Quellcode durchsuchen

Merge branch 'master' into liua

* master:
  附件出题沿用答题卡
  附件出题
  附件出题
  提交
  考试计划创建编辑
la vor 2 Jahren
Ursprung
Commit
1a6289d398

+ 0 - 51
components.d.ts

@@ -1,51 +0,0 @@
-/* eslint-disable */
-/* prettier-ignore */
-// @ts-nocheck
-// Generated by unplugin-vue-components
-// Read more: https://github.com/vuejs/core/pull/3399
-import '@vue/runtime-core'
-
-export {}
-
-declare module '@vue/runtime-core' {
-  export interface GlobalComponents {
-    BreadCrumb: typeof import('./src/components/BreadCrumb/index.vue')['default']
-    CommonFooter: typeof import('./src/components/commonFooter/index.vue')['default']
-    copy: typeof import('./src/components/leftSider copy/index.vue')['default']
-    ElAvatar: typeof import('element-plus/es')['ElAvatar']
-    ElBreadcrumb: typeof import('element-plus/es')['ElBreadcrumb']
-    ElBreadcrumbItem: typeof import('element-plus/es')['ElBreadcrumbItem']
-    ElButton: typeof import('element-plus/es')['ElButton']
-    ElCollapse: typeof import('element-plus/es')['ElCollapse']
-    ElCollapseItem: typeof import('element-plus/es')['ElCollapseItem']
-    ElConfigProvider: typeof import('element-plus/es')['ElConfigProvider']
-    ElDatePicker: typeof import('element-plus/es')['ElDatePicker']
-    ElDialog: typeof import('element-plus/es')['ElDialog']
-    ElForm: typeof import('element-plus/es')['ElForm']
-    ElFormItem: typeof import('element-plus/es')['ElFormItem']
-    ElIcon: typeof import('element-plus/es')['ElIcon']
-    ElInput: typeof import('element-plus/es')['ElInput']
-    ElMenu: typeof import('element-plus/es')['ElMenu']
-    ElMenuItem: typeof import('element-plus/es')['ElMenuItem']
-    ElMenuItemGroup: typeof import('element-plus/es')['ElMenuItemGroup']
-    ElOption: typeof import('element-plus/es')['ElOption']
-    ElPagination: typeof import('element-plus/es')['ElPagination']
-    ElRadio: typeof import('element-plus/es')['ElRadio']
-    ElRadioGroup: typeof import('element-plus/es')['ElRadioGroup']
-    ElSelect: typeof import('element-plus/es')['ElSelect']
-    ElSelectV2: typeof import('element-plus/es')['ElSelectV2']
-    ElSubMenu: typeof import('element-plus/es')['ElSubMenu']
-    ElTable: typeof import('element-plus/es')['ElTable']
-    ElTableColumn: typeof import('element-plus/es')['ElTableColumn']
-    LeftSider: typeof import('./src/components/leftSider/index.vue')['default']
-    LeftSiderStu: typeof import('./src/components/leftSiderStu/index.vue')['default']
-    NavHeader: typeof import('./src/components/NavHeader/index.vue')['default']
-    RouterLink: typeof import('vue-router')['RouterLink']
-    RouterView: typeof import('vue-router')['RouterView']
-    StatisticsSchool: typeof import('./src/components/statisticsSchool/index.vue')['default']
-    StatisticsTop: typeof import('./src/components/statisticsTop/index.vue')['default']
-    TheCounter: typeof import('./src/components/TheCounter.vue')['default']
-    TheFooter: typeof import('./src/components/TheFooter.vue')['default']
-    TheInput: typeof import('./src/components/TheInput.vue')['default']
-  }
-}

BIN
public/images/loading-new.gif


+ 142 - 108
src/pages/process/create/index.vue

@@ -13,8 +13,8 @@
             <el-input v-model="createForm.ksmc" placeholder="请输入考试名称" />
           </el-form-item>
           <el-form-item label="考试时间" prop="kssj" style="width: 620px">
-            <el-date-picker  v-model="createForm.kssj" type="datetimerange" range-separator="至" start-placeholder="考试开始时间"
-                            end-placeholder="考试结束时间" value-format="YYYY-MM-DD hh:mm:ss" />
+            <el-date-picker  v-model="createForm.kssj" type="daterange" range-separator="至" start-placeholder="考试开始时间"
+                            end-placeholder="考试结束时间" value-format="YYYY-MM-DD" />
           </el-form-item>
           <el-form-item label="考试类型" prop="kslx" style="width: 620px">
             <el-radio-group v-model="createForm.kslx">
@@ -25,17 +25,17 @@
             <el-select v-model="createForm.lkxx" style="width: 500px" multiple placeholder="请选择联考学校">
               <el-option
                 v-for="item in school_list"
-                :label="item.label"
-                :value="item.value"
+                :label="item.schoolname"
+                :value="{value:item.schoolid,label:item.schoolname}"
               />
             </el-select>
           </el-form-item>
           <el-form-item label="考试年级" prop="ksnj">
-            <el-select v-model="createForm.ksnj" style="width: 500px" multiple placeholder="请选择考试年级">
+            <el-select v-model="createForm.ksnj" style="width: 500px" placeholder="请选择考试年级" @change="getSubjectList">
               <el-option
                 v-for="item in grade_list"
-                :label="item.label"
-                :value="item.value"
+                :label="item.gradename"
+                :value="{label:item.gradename,value:item.grade}"
               />
             </el-select>
           </el-form-item>
@@ -43,8 +43,8 @@
             <el-select v-model="createForm.kskm" style="width: 500px" multiple placeholder="请选择考试科目">
               <el-option
                 v-for="item in subject_list"
-                :label="item.label"
-                :value="item.value"
+                :label="item.subject_name"
+                :value="{label:item.subject_name,value:item.subject_id}"
               />
             </el-select>
           </el-form-item>
@@ -77,6 +77,8 @@
 </route>
 <script setup>
 import { useRouter } from "vue-router";
+import request from "~/utils/request";
+import {user} from "~/store";
 const router = useRouter();
 const linkTo = (name) => {
   router.push({ name });
@@ -85,7 +87,7 @@ const rules = $ref({
   ksmc:[{ required: true, message: '请输入考试名称', trigger: 'blur' }],
   kssj:[{ required: true, message: "请选择考试时间", trigger: "blur" }],
   kslx: [{required: true, message: '请选择考试类型', trigger: 'change'}],
-  ksnj: [{required: true, message: '请至少选择一个年级', trigger: 'change'}],
+  ksnj: [{required: true, message: '请选择一个年级', trigger: 'change'}],
   kskm: [{required: true, message: '请至少选择一个科目', trigger: 'change'}],
   yjlc: [{required: true, message: '请选择阅卷流程', trigger: 'change'}],
   lkxx: [{required: true, message: '请至少选择一个学校', trigger: 'change'}],
@@ -96,88 +98,57 @@ let createForm = $ref({
   kssj:'',
   kslx:'1',
   ksnj:'',
-  kskm:'',
+  kskm:[],
   yjlc:'1',
   lkxx:''
 })
-let type_list = [{
-  value: '1',
-  label: '周考'
-}, {
-  value: '2',
-  label: '月考'
-}, {
-  value: '3',
-  label: '期中'
-},{
-  value: '4',
-  label: '期末'
-}, {
-  value: '5',
-  label: '作业'
-}, {
-  value: '6',
-  label: '测试'
-},{
-  value: '7',
-  label: '联考'
-}]
-let grade_list = [{
-  value: '1',
-  label: '一年级'
-}, {
-  value: '2',
-  label: '二年级'
-}, {
-  value: '3',
-  label: '三年级'
-},{
-  value: '4',
-  label: '四年级'
-}, {
-  value: '5',
-  label: '五年级'
-}, {
-  value: '6',
-  label: '六年级'
-},{
-  value: '7',
-  label: '初一'
-},{
-  value: '8',
-  label: '初二'
-},{
-  value: '9',
-  label: '初三'
-},{
-  value: '10',
-  label: '高一'
-},{
-  value: '11',
-  label: '高二'
-},{
-  value: '12',
-  label: '搞三'
-}]
-let subject_list = [{
-  value: '1',
-  label: '语文'
-}, {
-  value: '2',
-  label: '数学'
-}, {
-  value: '3',
-  label: '英语'
-},{
-  value: '4',
-  label: '物理'
-}, {
-  value: '5',
-  label: '生物'
-}, {
-  value: '6',
-  label: '化学'
-}]
+let type_list = $ref([])
+if(user.value.user_role_id < 72) {
+  type_list = [{
+    value: '1',
+    label: '周考'
+  }, {
+    value: '2',
+    label: '月考'
+  }, {
+    value: '3',
+    label: '期中'
+  },{
+    value: '4',
+    label: '期末'
+  }, {
+    value: '5',
+    label: '作业'
+  }, {
+    value: '6',
+    label: '测试'
+  },{
+    value: '7',
+    label: '联考'
+  }];
+} else {
+  type_list = [{
+    value: '1',
+    label: '周考'
+  }, {
+    value: '2',
+    label: '月考'
+  }, {
+    value: '3',
+    label: '期中'
+  },{
+    value: '4',
+    label: '期末'
+  }, {
+    value: '5',
+    label: '作业'
+  }, {
+    value: '6',
+    label: '测试'
+  }];
+}
+let grade_list = $ref([])
+let subject_list = $ref([])
 let process_type = [{
   value: '1',
   label: '先上传后划块'
@@ -185,25 +156,49 @@ let process_type = [{
   value: '2',
   label: '先划块后上传'
 }]
-let school_list = [{
-  value: '1',
-  label: '蒙阴市第一小学'
-},{
-  value: '2',
-  label: '蒙阴市第二小学'
-},{
-  value: '3',
-  label: '蒙阴市第三小学'
-},{
-  value: '4',
-  label: '蒙阴市第一中学'
-},{
-  value: '5',
-  label: '蒙阴市第二中学'
-},{
-  value: '6',
-  label: '蒙阴市第三中学'
-}]
+let school_list = $ref([])
+const getSchool= () => {
+  request({
+    url:window.GLOBAL_CONFIG.uc + "/index.php",
+    data: {
+      mod:'school',
+      action:'main',
+      do:'index',
+      page:'1',
+      limit:'999'
+    },
+  }).then((res) => {
+    if (res.code === "1") {
+      school_list = res.data.page_data;
+    }
+  });
+}
+getSchool();
+function getGrade() {
+  let data = {
+    for_mistake:'1'
+  }
+  if(user.value.user_role_id < 72) {
+    data.sm_id = user.value.sm_info.sm_id
+  }
+  request({
+    url: window.GLOBAL_CONFIG.uc + '/index.php?mod=school&action=main&do=base_grade',
+    data: data,
+  }).then((res) => {
+    if (res.code === "1") {
+      grade_list = res.data;
+    }
+  });
+}
+getGrade();
+const getSubjectList = () => {
+  for(let i in grade_list) {
+    if(grade_list[i].grade === createForm.ksnj.value) {
+      createForm.kskm = [];
+      subject_list = grade_list[i].subjects;
+    }
+  }
+}
 const handleCancel = () => {
   router.back();
 }
@@ -213,7 +208,46 @@ const handleSubmit = async (formEl) => {
 
   formEl.validate(async (valid, fields) => {
     if (valid) {
+      let kskm_label = [];
+      let kskm_value = [];
+      for(let i in createForm.kskm) {
+        kskm_label.push(createForm.kskm[i].label);
+        kskm_value.push(createForm.kskm[i].value);
+      }
 
+      let data = {
+        issubmit:'1',
+        yzy_ksjh:{
+          ykj_ksrwmc:createForm.ksmc,
+          ykj_ksrq:createForm.kssj[0],
+          ykj_jsrq:createForm.kssj[1],
+          ykj_kslx:createForm.kslx,
+          ykj_ksnj:createForm.ksnj.value,
+          ykj_ksnj_name:createForm.ksnj.label,
+          ykj_kskm:kskm_value.join(','),
+          ykj_kskm_name:kskm_label.join(','),
+          ykj_yjlc:createForm.yjlc
+        }
+      }
+      if(createForm.kslx === '7') {
+        let lkxx_value = [];
+        let lkxx_label = [];
+        for(let j in createForm.lkxx) {
+          lkxx_label.push(createForm.lkxx[j].label);
+          lkxx_value.push(createForm.lkxx[j].value);
+        }
+        data.yzy_ksjh.ykj_lkxx = lkxx_value.join(',');
+        data.yzy_ksjh.ykj_lkxx_name  = lkxx_label.join(',');
+      }
+      request({
+        url: '/yzy/ksjh/liankao_add',
+        data: data,
+      }).then((res) => {
+        if (res.code === "1") {
+          ElMessage.success("考试计划创建成功!");
+          linkTo('process');
+        }
+      });
     } else {
       console.log("error submit!", fields);
     }

+ 0 - 1
src/pages/process/detail/[id].vue

@@ -90,7 +90,6 @@ function getDetail() {
     },
   }).then((res) => {
     if (res.code === "1") {
-      console.log(res.data.one_info,887)
       ykj_detail= res.data.one_info;
     }
   });

+ 307 - 0
src/pages/process/edit/[id].vue

@@ -0,0 +1,307 @@
+<template>
+  <NavHeader/>
+  <bread-crumb/>
+  <div class="w-1200px m-auto">
+    <div class="relative -mt-40px flex justify-end">
+      <button type="button" class="back-btn" @click="linkTo('process')">返回</button>
+    </div>
+    <div class="mt-10px w-full min-h-860px bg-hex-FFF pt-25px">
+      <h3 class="text-18px text-center">编辑考试计划</h3>
+      <div class="mt-60px pl-250px">
+        <el-form ref="ruleFormRef" :rules="rules" :model="createForm" label-width="120px" size="large" status-icon>
+          <el-form-item label="考试名称" prop="ksmc" style="width: 620px">
+            <el-input v-model="createForm.ksmc" placeholder="请输入考试名称" />
+          </el-form-item>
+          <el-form-item label="考试时间" prop="kssj" style="width: 620px">
+            <el-date-picker  v-model="createForm.kssj" type="daterange" range-separator="至" start-placeholder="考试开始时间"
+                            end-placeholder="考试结束时间" value-format="YYYY-MM-DD" />
+          </el-form-item>
+          <el-form-item label="考试类型" prop="kslx" style="width: 620px">
+            <el-radio-group v-model="createForm.kslx">
+              <el-radio v-for="item in type_list" :label="item.value">{{item.label}}</el-radio>
+            </el-radio-group>
+          </el-form-item>
+          <el-form-item v-if="createForm.kslx === '7'" label="联考学校" prop="lkxx">
+            <el-select v-model="createForm.lkxx" style="width: 500px" multiple placeholder="请选择联考学校">
+              <el-option
+                v-for="item in school_list"
+                :label="item.schoolname"
+                :value="{value:item.schoolid,label:item.schoolname}"
+              />
+            </el-select>
+          </el-form-item>
+          <el-form-item label="考试年级" prop="ksnj">
+            <el-select v-model="createForm.ksnj" style="width: 500px" disabled placeholder="请选择考试年级" @change="getSubjectList">
+              <el-option
+                v-for="item in grade_list"
+                :label="item.gradename"
+                :value="{label:item.gradename,value:item.grade}"
+              />
+            </el-select>
+          </el-form-item>
+          <el-form-item label="考试科目" prop="kskm">
+            <el-select v-model="createForm.kskm" style="width: 500px" disabled multiple placeholder="请选择考试科目">
+              <el-option
+                v-for="item in subject_list"
+                :label="item.subject_name"
+                :value="{label:item.subject_name,value:item.subject_id}"
+              />
+            </el-select>
+          </el-form-item>
+          <el-form-item label="阅卷流程" prop="yjlc" style="width: 620px">
+            <el-radio-group v-model="createForm.yjlc">
+              <el-radio v-for="item in process_type" :label="item.value">{{item.label}}</el-radio>
+            </el-radio-group>
+          </el-form-item>
+          <el-form-item>
+            <div class="mt-50px pl-50px">
+              <el-button class="mr-20px" @click="linkTo('process')"><span class="px-40px">取消</span></el-button>
+              <el-button type="primary" color="#003eee" @click="handleSubmit(ruleFormRef)"><span class="px-40px">确定</span></el-button>
+            </div>
+
+
+          </el-form-item>
+        </el-form>
+      </div>
+    </div>
+  </div>
+  <commonFooter/>
+</template>
+<route lang="json">
+{
+"meta":{
+"title":"编辑考试计划",
+"breadcrumb": true
+}
+}
+</route>
+<script setup>
+import { useRouter } from "vue-router";
+import request from "~/utils/request";
+import {user} from "~/store";
+const router = useRouter();
+const route = useRoute();
+const linkTo = (name) => {
+  router.push({ name });
+};
+const rules = $ref({
+  ksmc:[{ required: true, message: '请输入考试名称', trigger: 'blur' }],
+  kssj:[{ required: true, message: "请选择考试时间", trigger: "blur" }],
+  kslx: [{required: true, message: '请选择考试类型', trigger: 'change'}],
+  ksnj: [{required: true, message: '请选择一个年级', trigger: 'change'}],
+  kskm: [{required: true, message: '请至少选择一个科目', trigger: 'change'}],
+  yjlc: [{required: true, message: '请选择阅卷流程', trigger: 'change'}],
+  lkxx: [{required: true, message: '请至少选择一个学校', trigger: 'change'}],
+})
+const ruleFormRef = ref(null);
+let createForm = $ref({
+  ksmc:'',
+  kssj:'',
+  kslx:'1',
+  ksnj:{},
+  kskm:[],
+  yjlc:'1',
+  lkxx:[]
+})
+let type_list = $ref([])
+if(user.value.user_role_id < 72) {
+  type_list = [{
+    value: '1',
+    label: '周考'
+  }, {
+    value: '2',
+    label: '月考'
+  }, {
+    value: '3',
+    label: '期中'
+  },{
+    value: '4',
+    label: '期末'
+  }, {
+    value: '5',
+    label: '作业'
+  }, {
+    value: '6',
+    label: '测试'
+  },{
+    value: '7',
+    label: '联考'
+  }];
+} else {
+  type_list = [{
+    value: '1',
+    label: '周考'
+  }, {
+    value: '2',
+    label: '月考'
+  }, {
+    value: '3',
+    label: '期中'
+  },{
+    value: '4',
+    label: '期末'
+  }, {
+    value: '5',
+    label: '作业'
+  }, {
+    value: '6',
+    label: '测试'
+  }];
+}
+let grade_list = $ref([])
+let subject_list = $ref([])
+let process_type = [{
+  value: '1',
+  label: '先上传后划块'
+},{
+  value: '2',
+  label: '先划块后上传'
+}]
+let school_list = $ref([])
+const getSchool= () => {
+  request({
+    url:window.GLOBAL_CONFIG.uc + "/index.php",
+    data: {
+      mod:'school',
+      action:'main',
+      do:'index',
+      page:'1',
+      limit:'999'
+    },
+  }).then((res) => {
+    if (res.code === "1") {
+      school_list = res.data.page_data;
+    }
+  });
+}
+getSchool();
+function getGrade() {
+  let data = {
+    for_mistake:'1'
+  }
+  if(user.value.user_role_id < 72) {
+    data.sm_id = user.value.sm_info.sm_id
+  }
+  request({
+    url: window.GLOBAL_CONFIG.uc + '/index.php?mod=school&action=main&do=base_grade',
+    data: data,
+  }).then((res) => {
+    if (res.code === "1") {
+      grade_list = res.data;
+    }
+  });
+}
+getGrade();
+const getSubjectList = () => {
+  for(let i in grade_list) {
+    if(grade_list[i].grade == createForm.ksnj.value) {
+      createForm.kskm = [];
+      subject_list = grade_list[i].subjects;
+    }
+  }
+}
+const handleCancel = () => {
+  router.back();
+}
+
+const handleSubmit = async (formEl) => {
+  if (!formEl) return;
+
+  formEl.validate(async (valid, fields) => {
+    if (valid) {
+      let kskm_label = [];
+      let kskm_value = [];
+      for(let i in createForm.kskm) {
+        kskm_label.push(createForm.kskm[i].label);
+        kskm_value.push(createForm.kskm[i].value);
+      }
+
+      let data = {
+        issubmit:'1',
+        ykj_id:ykj_id,
+        yzy_ksjh:{
+          ykj_ksrwmc:createForm.ksmc,
+          ykj_ksrq:createForm.kssj[0],
+          ykj_jsrq:createForm.kssj[1],
+          ykj_kslx:createForm.kslx,
+          ykj_ksnj:createForm.ksnj.value,
+          ykj_ksnj_name:createForm.ksnj.label,
+          ykj_kskm:kskm_value.join(','),
+          ykj_kskm_name:kskm_label.join(','),
+          ykj_yjlc:createForm.yjlc
+        }
+      }
+      if(createForm.kslx === '7') {
+        let lkxx_value = [];
+        let lkxx_label = [];
+        for(let j in createForm.lkxx) {
+          lkxx_label.push(createForm.lkxx[j].label);
+          lkxx_value.push(createForm.lkxx[j].value);
+        }
+        data.yzy_ksjh.ykj_lkxx = lkxx_value.join(',');
+        data.yzy_ksjh.ykj_lkxx_name  = lkxx_label.join(',');
+      }
+      request({
+        url: '/yzy/ksjh/edit',
+        data: data,
+      }).then((res) => {
+        if (res.code === "1") {
+          ElMessage.success("考试计划编辑成功!");
+          linkTo('process');
+        }
+      });
+    } else {
+      console.log("error submit!", fields);
+    }
+  });
+}
+let ykj_id = $ref('');
+function getDetail() {
+  request({
+    url: "/yzy/ksjh/detail",
+    data: {
+      ykj_id: ykj_id,
+    },
+  }).then((res) => {
+    if (res.code === "1") {
+      // createForm= res.data.one_info;
+      createForm.ksmc = res.data.one_info.ykj_ksrwmc;
+      createForm.kssj = [res.data.one_info.ykj_ksrq,res.data.one_info.ykj_jsrq];
+      createForm.kslx = res.data.one_info.ykj_kslx;
+      createForm.ksnj = {
+        label:res.data.one_info.ykj_ksnj_name,
+        value:res.data.one_info.ykj_ksnj
+      }
+      if(createForm.ksnj.value !== '') {
+        getSubjectList();
+      }
+      createForm.yjlc = res.data.one_info.ykj_yjlc;
+      for(let i in res.data.one_info.ykj_kskm.split(',')) {
+        let obj = {
+          value:res.data.one_info.ykj_kskm.split(',')[i],
+          label:res.data.one_info.ykj_kskm_name.split(',')[i]
+        }
+        createForm.kskm.push(obj);
+      }
+      if(res.data.one_info.ykj_kslx === '7') {
+        for(let j in res.data.one_info.ykj_lkxx.split(',')) {
+          let ob = {
+            value:res.data.one_info.ykj_lkxx.split(',')[j],
+            label:res.data.one_info.ykj_lkxx_name.split(',')[j]
+          }
+          createForm.lkxx.push(ob);
+        }
+      }
+    }
+  });
+}
+
+if (route.params.id) {
+  ykj_id = route.params.id;
+  getDetail();
+}
+</script>
+
+<style scoped>
+
+</style>

+ 740 - 0
src/pages/process/fjct/[ze_id]/[zs_id].vue

@@ -0,0 +1,740 @@
+<template>
+  <NavHeader/>
+  <bread-crumb/>
+  <div class="w-1200px m-auto">
+    <div class="relative -mt-40px flex justify-end">
+      <button type="button" class="back-btn" @click="linkTo('process')">返回</button>
+    </div>
+    <div class="mt-10px w-full min-h-860px bg-hex-FFF pt-25px pb-30px">
+      <h3 class="text-18px text-center">附件出题</h3>
+      <div class="mt-60px pl-250px">
+        <el-form ref="ruleFormRef" :rules="rules" :model="createForm" label-width="140px" size="large" status-icon>
+          <el-form-item label="学科" style="width: 620px">
+            <h3 class="text-14px">{{ createForm.xkmc }}</h3>
+          </el-form-item>
+          <el-form-item label="答题卡名称" prop="dtkmc" style="width: 620px">
+            <el-input v-model="createForm.dtkmc" placeholder="请输入答题卡名称"/>
+          </el-form-item>
+          <el-form-item label="答题卡别名" style="width: 620px">
+            <el-input v-model="createForm.dtkbm" placeholder="请输入答题卡别名"/>
+          </el-form-item>
+          <el-form-item label="及格分数" prop="jgfs" style="width: 620px">
+            <el-input v-model="createForm.jgfs" placeholder="请输入及格分数"/>
+          </el-form-item>
+          <el-form-item label="优秀分数" prop="yxfs" style="width: 620px">
+            <el-input v-model="createForm.yxfs" placeholder="请输入优秀分数"/>
+          </el-form-item>
+          <el-form-item label="流程类型" prop="lclx" style="width: 620px">
+            <el-radio-group v-model="createForm.lclx">
+              <el-radio v-for="item in lc_type_list" :label="item.value">{{ item.label }}</el-radio>
+            </el-radio-group>
+          </el-form-item>
+          <el-form-item label="阅卷流程" prop="fj_choose" style="width: 620px">
+            <el-radio-group v-model="createForm.fj_choose">
+              <el-radio v-for="item in yjlc" :label="item.value" @change="fileList = []">{{ item.label }}</el-radio>
+            </el-radio-group>
+          </el-form-item>
+          <el-form-item>
+            <el-upload v-if="createForm.fj_choose === '1'"
+                       action=""
+                       :auto-upload="false"
+                       :show-file-list="false"
+                       :on-change="uploadFile"
+                       v-loading.fullscreen.lock="fullscreenLoading"
+                       accept=".jpg,.png,.jpeg"
+                       class="upload-demo"
+            >
+              <el-button type="primary" color="#003eee">
+                <el-icon :size="24">
+                  <UploadFilled/>
+                </el-icon>
+                <span>上传文件</span>
+              </el-button>
+              <template #tip>
+                <div class="el-upload__tip">
+                  上传文件格式支持 jpg,png,jpeg
+                </div>
+              </template>
+            </el-upload>
+            <div v-else-if="createForm.fj_choose === '2'">
+              <el-button type="primary" color="#003eee" @click="launchClient">
+                <el-icon :size="24">
+                  <Promotion/>
+                </el-icon>
+                <span>启动客户端</span>
+              </el-button>
+            </div>
+            <div v-else>
+              <el-button type="primary" color="#003eee" @click="chooseCard">
+                <el-icon :size="24">
+                  <Plus/>
+                </el-icon>
+                <span>请选择答题卡</span>
+              </el-button>
+            </div>
+          </el-form-item>
+          <el-form-item v-if="fileList.length > 0" label="文件列表">
+            <div class="flex">
+              <div class="w-370px">名称</div>
+              <div class="w-200px">操作</div>
+            </div>
+            <div class="flex" v-for="(item,index) in fileList">
+              <div class="w-370px truncate">{{ item.name }}</div>
+              <div class="w-200px">
+                <el-link :underline="false" @click="filePreview(item)">预览</el-link>
+                <el-link class="ml-10px" :underline="false" @click="downloadFile(item)">下载</el-link>
+                <el-link class="ml-10px" :underline="false" @click="delFile(index)">删除</el-link>
+              </div>
+            </div>
+          </el-form-item>
+          <el-form-item>
+            <div class="mt-50px pl-50px">
+              <el-button class="mr-20px" @click="linkTo('process')"><span class="px-40px">取消</span></el-button>
+              <el-button type="primary" color="#003eee" @click="handleSubmit(ruleFormRef)"><span
+                class="px-40px">确定</span></el-button>
+            </div>
+
+
+          </el-form-item>
+        </el-form>
+      </div>
+    </div>
+  </div>
+  <el-dialog v-model="previewDialogVisible" title="文件预览"
+             width="850px"
+             custom-class="dialogTrick"
+             append-to-body>
+    <div class="w-full h-700px overflow-auto">
+      <img class="w-full" v-if="fileType === 'img'" :src="fileUrl" alt="Preview Image"/>
+      <video class="w-full h-full" controls v-if="fileType === 'mp4'" :src="fileUrl"></video>
+      <iframe class="w-full h-full" v-if="fileType === 'file'" :src="fileUrl" frameborder="0"></iframe>
+    </div>
+
+  </el-dialog>
+  <el-dialog
+    v-model="dialogVisible"
+    title="答题卡选择"
+    width="980px"
+    custom-class="dialogTrick"
+    append-to-body
+  >
+    <el-form :inline="true" class="flex justify-between" size="large">
+      <el-form-item label="考试时间筛选">
+        <el-date-picker
+          v-model="exam_time"
+          value-format="YYYY-MM-DD"
+          type="daterange"
+          range-separator="至"
+          start-placeholder="开始时间"
+          end-placeholder="结束时间"
+          @change="handleDateChange"
+          size="large"
+        />
+      </el-form-item>
+      <div>
+        <el-form-item style="margin-right: 10px">
+          <el-input v-model="keyword" style="width: 200px;" placeholder="请输入关键字" clearable @keyup.enter="filterData"
+                    @clear="filterData"/>
+        </el-form-item>
+        <el-form-item>
+          <el-button color="#003eee" type="primary" @click="filterData">搜索</el-button>
+        </el-form-item>
+
+      </div>
+
+    </el-form>
+    <div v-if="cardList.length > 0">
+      <ul class="card-list py-15px pl-20px">
+        <li v-for="item in cardList" class="relative py-15px" :class="chooseCheck === item.zs_id?'selected':''">
+          <div class="choose">
+            <p class="set-check">
+              <input type="radio" :id="item.zs_id" :value="item.zs_id" v-model="chooseCheck">
+              <label :for="item.zs_id"></label>
+            </p>
+          </div>
+          <div class="w-162px h-108px m-auto overflow-hidden">
+            <img class="w-full"
+                 :src="item.fj_content[0].url"
+                 alt="">
+          </div>
+          <h3 class="mt-10px mb-10px px-20px text-13px leading-20px truncate text-center">{{item.zs_name}}</h3>
+          <button type="button" class="op-btn block m-auto" :disabled="item.not_allowed" @click="imgShow(item)">查看</button>
+        </li>
+      </ul>
+      <div class="mt-20px page-new flex justify-end">
+        <el-pagination v-model:current-page="cur_page" v-model:page-size="limit" layout="total,prev, pager, next" :total="total" :background="true" @current-change="handleSelectionChange"></el-pagination>
+      </div>
+    </div>
+    <div v-else class="no-data">
+      <div>
+        <h3 class="no-data-img"></h3>
+        <h4 class="mt-25px text-18px text-hex-0048e5 text-center">暂无数据</h4>
+      </div>
+    </div>
+
+    <template #footer>
+      <span class="dialog-footer">
+        <el-button @click="dialogVisible = false" class="mr-15px" size="large">
+          <span class="px-10px">取消</span>
+        </el-button>
+        <el-button size="large" color="#003eee" type="primary" :disabled="chooseCheck === ''" @click="chooseCardSub">
+          <span class="px-10px">确定</span>
+        </el-button>
+      </span>
+    </template>
+
+  </el-dialog>
+  <div class="loading-mask" v-if="scanLoading">
+    <div class="text-center">
+      <div class="loading-icon"></div>
+      <h3 class="text-16px text-center text-hex-959595">客户端处理中,耐心等待……</h3>
+    </div>
+  </div>
+  <div class="preview-box" v-if="showPreview">
+    <el-icon class="preview-close cursor-pointer" @click="showPreview = false"><CloseBold /></el-icon>
+    <el-carousel class="h-full overflow-y-auto" :autoplay="false" indicator-position="none">
+      <el-carousel-item v-for="item in imgPreview" :key="item">
+        <img class="m-auto block" :src="item.url" alt="">
+      </el-carousel-item>
+    </el-carousel>
+  </div>
+  <commonFooter/>
+</template>
+<route lang="json">
+{
+"meta":{
+"title":"附件出题",
+"breadcrumb": true
+}
+}
+</route>
+<script setup>
+import {useRouter} from "vue-router";
+import request from "~/utils/request";
+import {REQUEST} from "~/utils/request";
+import {user} from "~/store";
+
+const router = useRouter();
+const route = useRoute();
+const linkTo = (name) => {
+  router.push({name});
+};
+const rules = $ref({
+  dtkmc: [{required: true, message: '请输入答题卡名称', trigger: 'blur'}],
+  jgfs: [{required: true, message: '请输入及格分数', trigger: 'blur'}],
+  yxfs: [{required: true, message: '请输入优秀分数', trigger: 'blur'}],
+  lclx: [{required: true, message: '请选择流程类型', trigger: 'change'}],
+  fj_choose: [{required: true, message: '请选择阅卷流程', trigger: 'change'}],
+})
+const ruleFormRef = ref(null);
+let createForm = $ref({
+  xkmc: '',
+  dtkmc: '',
+  dtkbm: '',
+  jgfs: '',
+  yxfs: '',
+  lclx: '',
+  fj_choose: '1'
+})
+let lc_type_list = [{
+  value: '0',
+  label: '常规'
+}, {
+  value: '1',
+  label: '自定义框选'
+}, {
+  value: '2',
+  label: '无定位点框选(第三方答题卡)'
+}]
+let yjlc = [{
+  value: '1',
+  label: '上传文件'
+}, {
+  value: '2',
+  label: '模板预扫描'
+}, {
+  value: '3',
+  label: '沿用答题卡'
+}]
+
+const handleCancel = () => {
+  router.back();
+}
+
+const handleSubmit = async (formEl) => {
+  if (!formEl) return;
+
+  formEl.validate(async (valid, fields) => {
+    if (valid) {
+      if (fileList.length === 0) {
+        ElMessage({
+          type: "warning",
+          message: "请先上传附件!",
+        });
+      } else {
+        request({
+          url: '/yzy/ksjh/fjct_edit',
+          data: {
+            zs_id: zs_id,
+            ze_id: ze_id,
+            zs_name: createForm.dtkmc,
+            zs_alias: createForm.dtkbm,
+            zs_lctype: createForm.lclx,
+            fj_choose: createForm.fj_choose,
+            fj_content: fileList,
+            ze_pass_score: createForm.jgfs,
+            ze_max_score: createForm.yxfs
+          }
+        }).then(res => {
+          if (res.code === '1') {
+            ElMessage.success("附件出题编辑成功!");
+            // 需要跳转到新流程页面
+          }
+        })
+      }
+    } else {
+      console.log("error submit!", fields);
+    }
+  });
+}
+
+let dialogVisible = $ref(false)
+let chooseCheck = $ref('');
+let ze_id = $ref('');
+let zs_id = $ref('');
+if (route.params.ze_id) {
+  ze_id = route.params.ze_id;
+  zs_id = route.params.zs_id;
+  getDetail();
+}
+let fullscreenLoading = $ref(false)
+let fileList = $ref([])
+let scanLoading = $ref(false)
+
+function getDetail() {
+  request({
+    url: "/yzy/ksjh/fjct_detail",
+    data: {
+      ze_id: ze_id,
+      zs_id: zs_id
+    },
+  }).then((res) => {
+    if (res.code === "1") {
+      createForm.xkmc = res.data.one_info.ze_xueke_name;
+      createForm.dtkmc = res.data.one_info.zs_name;
+      createForm.dtkbm = res.data.one_info.zs_alias;
+      createForm.jgfs = res.data.one_info.ze_pass_score;
+      createForm.yxfs = res.data.one_info.ze_max_score;
+      createForm.lclx = res.data.one_info.zs_lctype;
+      if (res.data.one_info.fj_choose === '0') {
+        createForm.fj_choose = '1';
+      } else {
+        createForm.fj_choose = res.data.one_info.fj_choose;
+      }
+
+      fileList = [];
+      if (res.data.one_info.fj_content !== '') {
+        let i_arr = res.data.one_info.fj_content.split('**');
+        for (let i in i_arr) {
+          let f_obj = {
+            name: i_arr[i].split('##')[0],
+            url: i_arr[i].split('##')[1]
+          }
+          fileList.push(f_obj);
+        }
+      }
+
+    }
+  });
+}
+
+const uploadFile = (file) => {
+  // console.log(file, 87)
+  fullscreenLoading = true;
+  REQUEST.upload({
+    url: '/upload/main/file',
+    data: {
+      filedata: file.raw,
+      mod: 'upload',
+      action: 'main',
+      do: 'file',
+      urltype: '1'
+    }
+  }).then(res => {
+    fullscreenLoading = false;
+    if (res.code === '1') {
+      // console.log(res.data, 89)
+      let file_info = {
+        name: res.data.file_name,
+        url: res.data.url
+      }
+      fileList.push(file_info);
+    } else {
+      ElMessage({
+        type: "warning",
+        message: "上传失败",
+      });
+    }
+  })
+}
+let previewDialogVisible = $ref(false)
+let fileType = $ref('')
+let fileUrl = $ref('')
+const filePreview = (item) => {
+  previewDialogVisible = true;
+
+  if (/\.(jpg|png|jpeg)/.test(item.url)) {
+    fileType = 'img';
+    fileUrl = item.url;
+  } else if (/\.mp4/.test(item.url)) {
+    fileType = 'mp4';
+    fileUrl = item.url;
+  } else if (/\.(docx|doc|pdf|ppt|pptx|xls|xlsx)/.test(item.url)) {
+    fileType = 'file';
+    fileUrl = 'https://view.officeapps.live.com/op/view.aspx?src=' + item.url;
+  }
+}
+const downloadFile = (item) => {
+  window.open(item.url, '_blank')
+}
+const delFile = (index) => {
+  fileList.splice(index, 1)
+}
+const launchClient = () => {
+  scanLoading = true;
+  let scan_batch = parseInt(new Date().getTime() / 1000) + randomString(5);
+  let clientLink = 'bozeduyuejuan://' + user.value.token + ',0,' + window.GLOBAL_CONFIG.yzy + ',pre_scan,' + scan_batch;
+  window.open(clientLink, '_blank');
+  getScanStatus(scan_batch);
+}
+
+function randomString(e) {
+  e = e || 32;
+  var t = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz123456789",
+    a = t.length,
+    n = "";
+  for (let i = 0; i < e; i++) n += t.charAt(Math.floor(Math.random() * a));
+  return n
+}
+
+let timer = null;
+
+function interval(func, wait) {
+  let interv = () => {
+    func.call(null);
+    timer = setTimeout(interv, wait);
+  };
+  timer = setTimeout(interv, wait);
+}
+
+function getScanStatus(scan_batch) {
+  request({
+    url: "/yzy/kmksyjlc/pre_scan_get",
+    data: {
+      tag: scan_batch
+    },
+  }).then((res) => {
+    if (res.code === "1") {
+      if (res.data.files.length === 0) {
+
+        interval(() => {
+          if (timer) {
+            clearTimeout(timer);
+            timer = null;
+          }
+          getScanStatus(scan_batch)
+        }, 10000);
+      } else {
+        scanLoading = false;
+        if (timer) {
+          clearTimeout(timer);
+          timer = null;
+        }
+        fileList = [];
+        for (let i = 0; i < res.data.files.length; i++) {
+          let file_info = {
+            name: '模板_' + (i + 1),
+            url: window.GLOBAL_CONFIG.yzy + '/' + res.data.files[i]
+          }
+          fileList.push(file_info);
+        }
+      }
+    }
+  })
+}
+
+let limit = $ref(8)
+let total = $ref(0)
+let cur_page = $ref(1)
+let exam_time = $ref([])
+let keyword = $ref('')
+let cardList = $ref([]);
+const chooseCard = () => {
+  getListData();
+  chooseCheck = '';
+  dialogVisible = true;
+
+}
+
+function getListData() {
+  let data = {
+    page: cur_page,
+    limit: limit,
+    keyword: keyword
+  }
+  if(exam_time && exam_time.length > 0) {
+    data.date_start = exam_time[0];
+    data.date_end = exam_time[1];
+  } else {
+    data.date_start = '';
+    data.date_end = '';
+  }
+  request({
+    url: "/yzy/ksjh/before_paper",
+    data: data,
+  }).then((res) => {
+    if (res.code === '1') {
+      cardList = res.data.page_data;
+      total = Number(res.data.total_rows);
+      cur_page = Number(res.data.page_now);
+      for(let i in cardList) {
+        for(let j in cardList[i].fj_content) {
+          cardList[i].not_allowed = /\.(docx|doc|pdf|ppt|pptx|xls|xlsx|mp4)/.test(cardList[i].fj_content[j].url);
+        }
+      }
+    }
+  })
+}
+
+const handleDateChange = (val) => {
+  if (val) {
+    exam_time = [val[0], val[1]];
+  } else {
+    exam_time = [];
+  }
+  cur_page = 1;
+  getListData();
+}
+const handleSelectionChange = (val) => {
+  cur_page = val;
+  getListData();
+};
+function filterData() {
+  cur_page = 1;
+  getListData();
+}
+function chooseCardSub() {
+  for(let i in cardList) {
+    if(cardList[i].zs_id === chooseCheck) {
+      fileList = cardList[i].fj_content;
+    }
+  }
+  dialogVisible = false;
+
+}
+let imgPreview = $ref([]);
+let showPreview = $ref(false)
+function imgShow(item) {
+  imgPreview = item.fj_content;
+  showPreview = true;
+}
+</script>
+
+<style lang="scss">
+
+.dialogTrick .el-dialog__footer {
+  text-align: center;
+}
+</style>
+
+<style lang="scss" scoped>
+::v-deep .el-radio__input.is-checked .el-radio__inner {
+  border-color: #003eee;
+  background: #003eee;
+}
+
+::v-deep .el-radio__input.is-checked + .el-radio__label {
+  color: #003eee;
+}
+::v-deep .el-carousel__container{
+  height: 100%;
+}
+
+.card-list {
+  display: flex;
+  flex-wrap: wrap;
+  max-height: 515px;
+  overflow-y: auto;
+
+  li {
+    width: 203px;
+    background: #ffffff;
+    border: 2px solid #cacaca;
+    border-radius: 10px;
+    margin-right: 30px;
+    margin-bottom: 30px;
+
+    &.selected {
+      border-color: #003eee;
+    }
+
+    &:nth-child(4n) {
+      margin-right: 0;
+    }
+
+    &:hover {
+      .card-pop {
+        display: flex;
+      }
+    }
+
+    .card-title {
+      width: 100%;
+      font-size: 13px;
+      line-height: 15px;
+    }
+  }
+
+  .card-pop {
+    position: absolute;
+    left: 0;
+    top: 0;
+    width: 100%;
+    height: 100%;
+    border-radius: 10px;
+    z-index: 30;
+    background: rgba(0, 0, 0, .45);
+    display: none;
+    align-items: center;
+    justify-content: center;
+  }
+}
+
+.op-btn {
+  width: 60px;
+  height: 30px;
+  background: #fff;
+  border: 1px solid #003eee;
+  border-radius: 2px;
+  font-size: 14px;
+  color: #003eee;
+  text-align: center;
+  &:disabled{
+    background: #ccc;
+    border-color: #ccc;
+    color: #fff;
+    pointer-events: none;
+  }
+}
+
+.choose {
+  position: absolute;
+  left: -12px;
+  top: -12px;
+  z-index: 50;
+}
+
+.set-check {
+  position: relative;
+  z-index: 40;
+  width: 25px;
+  height: 25px;
+
+  label {
+    position: absolute;
+    left: 0;
+    width: 25px;
+    height: 25px;
+    cursor: pointer;
+    background: #fff;
+    border-radius: 4px;
+    box-shadow: 0 0 4px rgba(0, 0, 0, 0.18);
+  }
+
+  input[type=radio] {
+    width: 25px;
+    height: 25px;
+    opacity: 0;
+
+    &:checked + label {
+      background: #003eee;
+    }
+
+    &:checked + label:after {
+      content: '';
+      width: 16px;
+      height: 10px;
+      position: absolute;
+      top: 5px;
+      left: 4px;
+      border: 3px solid #fff;
+      border-top: none;
+      border-right: none;
+      -moz-transform: rotate(-45deg);
+      -ms-transform: rotate(-45deg);
+      -webkit-transform: rotate(-45deg);
+      transform: rotate(-45deg);
+    }
+  }
+
+}
+
+.loading-mask {
+  position: fixed;
+  left: 0;
+  top: 0;
+  width: 100%;
+  height: 100%;
+  z-index: 1500;
+  background: rgba(255, 255, 255, .6);
+  display: flex;
+  justify-content: center;
+  align-items: center;
+}
+
+.loading-mask .loading-icon {
+  margin: 0 auto 15px;
+  width: 72px;
+  height: 72px;
+  background: url("/images/loading-new.gif") center no-repeat;
+}
+.no-data {
+  width: 100%;
+  height: 300px;
+  display: flex;
+  justify-content: center;
+  align-items: center;
+
+  .no-data-img {
+    width: 233px;
+    height: 199px;
+    background: url("/images/no-data.png") center no-repeat;
+  }
+}
+.preview-box{
+  position: fixed;
+  left: 0;
+  top: 0;
+  width: 100%;
+  height: 100%;
+  z-index: 2100;
+  background: rgba(0,0,0,.5);
+  .preview-close{
+    position: absolute;
+    right: 15px;
+    top: 15px;
+    font-size: 40px;
+    color: #fff;
+    z-index:2200 ;
+  }
+  .el-carousel__item{
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    overflow-y: auto;
+  }
+  img{
+    max-width: 80% !important;
+  }
+}
+</style>

+ 0 - 378
src/pages/process/fjct/index.vue

@@ -1,378 +0,0 @@
-<template>
-  <NavHeader/>
-  <bread-crumb/>
-  <div class="w-1200px m-auto">
-    <div class="relative -mt-40px flex justify-end">
-      <button type="button" class="back-btn" @click="linkTo('process')">返回</button>
-    </div>
-    <div class="mt-10px w-full min-h-860px bg-hex-FFF pt-25px">
-      <h3 class="text-18px text-center">附件出题</h3>
-      <div class="mt-60px pl-250px">
-        <el-form ref="ruleFormRef" :rules="rules" :model="createForm" label-width="140px" size="large" status-icon>
-          <el-form-item label="学科" style="width: 620px">
-             <h3 class="text-14px">{{createForm.xkmc}}</h3>
-          </el-form-item>
-          <el-form-item label="答题卡名称" prop="dtkmc" style="width: 620px">
-            <el-input v-model="createForm.dtkmc" placeholder="请输入答题卡名称" />
-          </el-form-item>
-          <el-form-item label="答题卡别名" style="width: 620px">
-            <el-input v-model="createForm.dtkbm" placeholder="请输入答题卡别名" />
-          </el-form-item>
-          <el-form-item label="及格分数" prop="jgfs" style="width: 620px">
-            <el-input v-model="createForm.jgfs" placeholder="请输入及格分数" />
-          </el-form-item>
-          <el-form-item label="优秀分数" prop="yxfs" style="width: 620px">
-            <el-input v-model="createForm.yxfs" placeholder="请输入优秀分数" />
-          </el-form-item>
-          <el-form-item label="流程类型" prop="lclx" style="width: 620px">
-            <el-radio-group v-model="createForm.lclx">
-              <el-radio v-for="item in lc_type_list" :label="item.value">{{item.label}}</el-radio>
-            </el-radio-group>
-          </el-form-item>
-          <el-form-item label="阅卷流程" prop="yjlc" style="width: 620px">
-            <el-radio-group v-model="createForm.yjlc">
-              <el-radio v-for="item in yjlc" :label="item.value">{{item.label}}</el-radio>
-            </el-radio-group>
-          </el-form-item>
-          <el-form-item>
-            <div v-if="createForm.yjlc === '1'">
-              <el-button type="primary" color="#003eee">
-                <el-icon :size="24"><UploadFilled /></el-icon>
-                <span>上传文件</span>
-              </el-button>
-              <span class="ml-10px text-13px text-hex-999999">上传文件格式支持 jpg,png,jpeg,docx,doc,mp4,pdf,ppt,pptx,xls,xlsx</span>
-            </div>
-            <div v-else-if="createForm.yjlc === '2'">
-              <el-button type="primary" color="#003eee">
-                <el-icon :size="24"><Promotion /></el-icon>
-                <span>启动客户端</span>
-              </el-button>
-            </div>
-            <div v-else>
-              <el-button type="primary" color="#003eee" @click="dialogVisible = true">
-                <el-icon :size="24"><Plus /></el-icon>
-                <span>请选择答题卡</span>
-              </el-button>
-            </div>
-          </el-form-item>
-          <el-form-item v-if="createForm.yjlc === '2'" label="扫描文件展示列表"></el-form-item>
-          <el-form-item>
-            <div class="mt-50px pl-50px">
-              <el-button class="mr-20px" @click="linkTo('process')"><span class="px-40px">取消</span></el-button>
-              <el-button type="primary" color="#003eee" @click="handleSubmit(ruleFormRef)"><span class="px-40px">确定</span></el-button>
-            </div>
-
-
-          </el-form-item>
-        </el-form>
-      </div>
-    </div>
-  </div>
-  <el-dialog
-    v-model="dialogVisible"
-    title="答题卡选择"
-    width="980px"
-    custom-class="dialogTrick"
-    append-to-body
-  >
-    <el-form :inline="true" class="flex justify-between" size="large">
-      <el-form-item label="考试时间筛选">
-        <el-date-picker
-          v-model="time"
-          type="date"
-          placeholder="请选择考试时间"
-        />
-      </el-form-item>
-      <div>
-        <el-form-item style="margin-right: 10px">
-          <el-input v-model="keyword" placeholder="请输入关键字" clearable />
-        </el-form-item>
-        <el-form-item>
-          <el-button color="#003eee" type="primary">搜索</el-button>
-        </el-form-item>
-
-      </div>
-
-    </el-form>
-    <ul class="card-list py-15px">
-      <li class="relative py-15px" :class="chooseCheck.includes('1')?'selected':''">
-        <div class="choose">
-          <p class="set-check">
-            <input type="checkbox" id="1" value="1" v-model="chooseCheck">
-            <label :for="1"></label>
-          </p>
-        </div>
-        <div class="w-162px h-108px m-auto overflow-hidden">
-          <img class="w-full" src="https://yzy.bozedu.net/data/upload/exam_package/20230329/1521/210900241/5-1521-210900241-4096-20230329101520/image_20230329101519044.jpg" alt="">
-        </div>
-        <h3 class="mt-10px mb-10px px-20px text-13px leading-20px truncate text-center">2023-11-12联考答题卡</h3>
-        <button type="button" class="op-btn block m-auto">查看</button>
-      </li>
-      <li class="relative py-15px">
-        <div class="choose">
-          <p class="set-check">
-            <input type="checkbox" id="2" value="2" v-model="chooseCheck">
-            <label :for="2"></label>
-          </p>
-        </div>
-        <div class="w-162px h-108px m-auto overflow-hidden">
-          <img class="w-full" src="https://yzy.bozedu.net/data/upload/exam_package/20230329/1521/210900241/5-1521-210900241-4096-20230329101520/image_20230329101519044.jpg" alt="">
-        </div>
-        <h3 class="mt-10px mb-10px px-20px text-13px leading-20px truncate text-center">2023-11-12联考答题卡</h3>
-        <button type="button" class="op-btn block m-auto">查看</button>
-      </li>
-      <li class="relative py-15px">
-        <div class="w-162px h-108px m-auto overflow-hidden">
-          <img class="w-full" src="https://yzy.bozedu.net/data/upload/exam_package/20230329/1521/210900241/5-1521-210900241-4096-20230329101520/image_20230329101519044.jpg" alt="">
-        </div>
-        <h3 class="mt-10px mb-10px px-20px text-13px leading-20px truncate text-center">2023-11-12联考答题卡</h3>
-        <button type="button" class="op-btn block m-auto">查看</button>
-      </li>
-      <li class="relative py-15px">
-        <div class="w-162px h-108px m-auto overflow-hidden">
-          <img class="w-full" src="https://yzy.bozedu.net/data/upload/exam_package/20230329/1521/210900241/5-1521-210900241-4096-20230329101520/image_20230329101519044.jpg" alt="">
-        </div>
-        <h3 class="mt-10px mb-10px px-20px text-13px leading-20px truncate text-center">2023-11-12联考答题卡</h3>
-        <button type="button" class="op-btn block m-auto">查看</button>
-      </li>
-      <li class="relative py-15px">
-        <div class="w-162px h-108px m-auto overflow-hidden">
-          <img class="w-full" src="https://yzy.bozedu.net/data/upload/exam_package/20230329/1521/210900241/5-1521-210900241-4096-20230329101520/image_20230329101519044.jpg" alt="">
-        </div>
-        <h3 class="mt-10px mb-10px px-20px text-13px leading-20px truncate text-center">2023-11-12联考答题卡</h3>
-        <button type="button" class="op-btn block m-auto">查看</button>
-      </li>
-      <li class="relative py-15px">
-        <div class="w-162px h-108px m-auto overflow-hidden">
-          <img class="w-full" src="https://yzy.bozedu.net/data/upload/exam_package/20230329/1521/210900241/5-1521-210900241-4096-20230329101520/image_20230329101519044.jpg" alt="">
-        </div>
-        <h3 class="mt-10px mb-10px px-20px text-13px leading-20px truncate text-center">2023-11-12联考答题卡</h3>
-        <button type="button" class="op-btn block m-auto">查看</button>
-      </li>
-      <li class="relative py-15px">
-        <div class="w-162px h-108px m-auto overflow-hidden">
-          <img class="w-full" src="https://yzy.bozedu.net/data/upload/exam_package/20230329/1521/210900241/5-1521-210900241-4096-20230329101520/image_20230329101519044.jpg" alt="">
-        </div>
-        <h3 class="mt-10px mb-10px px-20px text-13px leading-20px truncate text-center">2023-11-12联考答题卡</h3>
-        <button type="button" class="op-btn block m-auto">查看</button>
-      </li>
-      <li class="relative py-15px">
-        <div class="w-162px h-108px m-auto overflow-hidden">
-          <img class="w-full" src="https://yzy.bozedu.net/data/upload/exam_package/20230329/1521/210900241/5-1521-210900241-4096-20230329101520/image_20230329101519044.jpg" alt="">
-        </div>
-        <h3 class="mt-10px mb-10px px-20px text-13px leading-20px truncate text-center">2023-11-12联考答题卡</h3>
-        <button type="button" class="op-btn block m-auto">查看</button>
-      </li>
-      <li class="relative py-15px">
-        <div class="w-162px h-108px m-auto overflow-hidden">
-          <img class="w-full" src="https://yzy.bozedu.net/data/upload/exam_package/20230329/1521/210900241/5-1521-210900241-4096-20230329101520/image_20230329101519044.jpg" alt="">
-        </div>
-        <h3 class="mt-10px mb-10px px-20px text-13px leading-20px truncate text-center">2023-11-12联考答题卡</h3>
-        <button type="button" class="op-btn block m-auto">查看</button>
-      </li>
-      <li class="relative py-15px">
-        <div class="w-162px h-108px m-auto overflow-hidden">
-          <img class="w-full" src="https://yzy.bozedu.net/data/upload/exam_package/20230329/1521/210900241/5-1521-210900241-4096-20230329101520/image_20230329101519044.jpg" alt="">
-        </div>
-        <h3 class="mt-10px mb-10px px-20px text-13px leading-20px truncate text-center">2023-11-12联考答题卡</h3>
-        <button type="button" class="op-btn block m-auto">查看</button>
-      </li>
-    </ul>
-    <template #footer>
-      <span class="dialog-footer">
-        <el-button @click="dialogVisible = false" class="mr-15px" size="large">
-          <span class="px-10px">取消</span>
-        </el-button>
-        <el-button size="large" color="#003eee" type="primary" @click="dialogVisible = false">
-          <span class="px-10px">确定</span>
-        </el-button>
-      </span>
-    </template>
-
-  </el-dialog>
-  <commonFooter/>
-</template>
-<route lang="json">
-{
-"meta":{
-"title":"附件出题",
-"breadcrumb": true
-}
-}
-</route>
-<script setup>
-import { useRouter } from "vue-router";
-const router = useRouter();
-const linkTo = (name) => {
-  router.push({ name });
-};
-const rules = $ref({
-  dtkmc:[{ required: true, message: '请输入答题卡名称', trigger: 'blur' }],
-  jgfs:[{ required: true, message: '请输入及格分数', trigger: 'blur' }],
-  yxfs:[{ required: true, message: '请输入优秀分数', trigger: 'blur' }],
-  lclx: [{required: true, message: '请选择流程类型', trigger: 'change'}],
-  yjlc: [{required: true, message: '请选择阅卷流程', trigger: 'change'}],
-})
-const ruleFormRef = ref(null);
-let createForm = $ref({
-  xkmc:'语文',
-  dtkmc:'',
-  dtkbm:'',
-  jgfs:'',
-  yxfs:'',
-  lclx:'1',
-  yjlc:'1'
-})
-let lc_type_list = [{
-  value: '1',
-  label: '常规'
-}, {
-  value: '2',
-  label: '自定义框选'
-}, {
-  value: '3',
-  label: '无定位点框选(第三方答题卡)'
-}]
-let yjlc = [{
-  value: '1',
-  label: '上传文件'
-}, {
-  value: '2',
-  label: '模板预扫描'
-}, {
-  value: '3',
-  label: '沿用答题卡'
-}]
-
-const handleCancel = () => {
-  router.back();
-}
-
-const handleSubmit = async (formEl) => {
-  if (!formEl) return;
-
-  formEl.validate(async (valid, fields) => {
-    if (valid) {
-
-    } else {
-      console.log("error submit!", fields);
-    }
-  });
-}
-let dialogVisible = $ref(false)
-let time = $ref('')
-let keyword = $ref('')
-let chooseCheck = $ref([]);
-</script>
-
-<style lang="scss">
-
-.dialogTrick .el-dialog__footer {
-  text-align: center;
-}
-</style>
-
-<style lang="scss" scoped>
-.card-list{
-  display: flex;
-  flex-wrap: wrap;
-  max-height: 480px;
-  overflow-y:auto;
-  li{
-    width: 203px;
-    background: #ffffff;
-    border: 2px solid #cacaca;
-    border-radius: 10px;
-    margin-right: 40px;
-    margin-bottom: 30px;
-    &.selected{
-      border-color:#003eee;
-    }
-    &:nth-child(4n) {
-      margin-right: 0;
-    }
-    &:hover{
-      .card-pop{
-        display: flex;
-      }
-    }
-    .card-title{
-      width: 100%;
-      font-size: 13px;
-      line-height: 15px;
-    }
-  }
-  .card-pop{
-    position: absolute;
-    left: 0;
-    top: 0;
-    width: 100%;
-    height: 100%;
-    border-radius: 10px;
-    z-index: 30;
-    background: rgba(0,0,0,.45);
-    display: none;
-    align-items: center;
-    justify-content: center;
-  }
-}
-.op-btn {
-  width: 60px;
-  height: 30px;
-  background: #fff;
-  border: 1px solid #003eee;
-  border-radius: 2px;
-  font-size: 14px;
-  color: #003eee;
-  text-align: center;
-}
-.choose{
-  position: absolute;
-  left: -12px;
-  top:-12px;
-  z-index: 50;
-}
-.set-check {
-  position: relative;
-  z-index: 40;
-  width: 25px;
-  height: 25px;
-
-  label {
-    position: absolute;
-    left: 0;
-    width: 25px;
-    height: 25px;
-    cursor: pointer;
-    background: #fff;
-    border-radius: 4px;
-    box-shadow: 0 0 4px rgba(0,0,0,0.18);
-  }
-
-  input[type=checkbox] {
-    width: 25px;
-    height: 25px;
-    opacity: 0;
-    &:checked + label {
-      background: #003eee;
-    }
-
-    &:checked + label:after {
-      content: '';
-      width: 16px;
-      height: 10px;
-      position: absolute;
-      top: 5px;
-      left: 4px;
-      border: 3px solid #fff;
-      border-top: none;
-      border-right: none;
-      -moz-transform: rotate(-45deg);
-      -ms-transform: rotate(-45deg);
-      -webkit-transform: rotate(-45deg);
-      transform: rotate(-45deg);
-    }
-  }
-
-}
-</style>

+ 30 - 6
src/pages/process/index.vue

@@ -79,7 +79,7 @@
               </div>
               <div class="w-220px text-left">{{item.ykj_ksrq}}~{{item.ykj_jsrq}}</div>
               <div class="w-300px">
-                <button type="button" class="op-btn">编辑</button>
+                <button type="button" class="op-btn" :disabled="item.create_user_id != user.user_id" @click="linkTo({name:'process-edit-id',params:{id:item.ykj_id}})">编辑</button>
                 <button type="button" class="op-btn ml-10px" @click="linkTo({name:'process-detail-id',params:{id:item.ykj_id}})">详情</button>
                 <div class="ml-10px relative op-btn cursor-pointer">
                   <span class="inline-block align-middle leading-28px">更多</span>
@@ -87,7 +87,7 @@
                     <ul>
                       <li>扫描批阅进度</li>
                       <li>考试分析</li>
-                      <li>删除</li>
+                      <li v-if="item.create_user_id == user.user_id" @click="delProject(item)">删除</li>
                     </ul>
                   </div>
                 </div>
@@ -99,7 +99,7 @@
                 <li v-for="items in item.lc">
                   <span class="sub-del cursor-pointer" @click="del_sub(item.ykj_id,items.ykl_id)"></span>
                   <div>
-                    <div class="subject-name m-auto">{{JSON.parse(items.ykl_lc).ze_xueke_name}}</div>
+                    <div class="subject-name m-auto">{{items.ykl_lc !== ''?JSON.parse(items.ykl_lc).ze_xueke_name:''}}</div>
                     <div class="mt-5px">
                       <div class="inline-block align-middle process-state">
                         <h3 class="state-line">
@@ -176,7 +176,6 @@ import { useRouter } from "vue-router";
 import {user} from "~/store";
 import request from "@/utils/request";
 const router = useRouter();
-console.log(router,87)
 const linkTo = (obj) => {
   router.push(obj);
 };
@@ -224,8 +223,8 @@ function getSubject() {
    let data = {
      for_mistake:'1'
    }
-   if(user.user_role_id < 72) {
-     data.sm_id = user.sm_info.sm_id
+   if(user.value.user_role_id < 72) {
+     data.sm_id = user.value.sm_info.sm_id
    }
    subject(data).then(res =>{
      if(res.code === '1') {
@@ -262,6 +261,7 @@ function getListData() {
   })
 }
 getListData();
+
 function filterData() {
   cur_page = 1;
   getListData();
@@ -341,6 +341,30 @@ function toggleDown(index) {
     listData[index].showSub = true;
   }
 }
+function delProject(item) {
+  ElMessageBox.confirm("删除考试计划将会清除考试计划下的所有数据,是否继续", "", {
+    confirmButtonText: "确认",
+    cancelButtonText: "取消",
+    type: "warning",
+  }).then(() => {
+
+    request({
+      url: "/yzy/ksjh/delete",
+      data: {
+        ykj_id: item.ykj_id,
+        clear: '1'
+      },
+    }).then((res) => {
+      if (res.code === "1") {
+        ElMessage({
+          type: "success",
+          message: "删除成功",
+        });
+        getListData();
+      }
+    });
+  })
+}
 </script>
 <style lang="scss" scoped>
 $color: #0048e5;