From d8887d36d08e3a0a5068763c8460b0b4f16e87ee Mon Sep 17 00:00:00 2001
From: shikeying <pxzsky@163.com>
Date: 星期一, 03 四月 2023 16:21:37 +0800
Subject: [PATCH] 待办任务审批测试界面

---
 src/api/activiti/task.js               |   35 ++
 src/views/etaa/question_bank/index.vue |  459 ++++++++++++++++++++++++++++++
 src/api/etaa/question_bank.js          |   77 +++++
 src/views/activiti/task/done_list.vue  |  194 ++++++++++++
 src/views/activiti/task/index.vue      |  126 ++++----
 5 files changed, 826 insertions(+), 65 deletions(-)

diff --git a/src/api/activiti/task.js b/src/api/activiti/task.js
index dfd933b..201e0a1 100644
--- a/src/api/activiti/task.js
+++ b/src/api/activiti/task.js
@@ -9,6 +9,41 @@
   })
 }
 
+// 宸插姙浠诲姟鍒楄〃銆�2023-04-01
+export function listDone(query) {
+  return request({
+    url: '/wf/task/list/done',
+    method: 'get',
+    params: query
+  })
+}
+
+// 娴佺▼瀹℃壒鍘嗗彶鍒楄〃銆�2023-04-03
+export function listApprove(processInstanceId) {
+  return request({
+    url: '/wf/task/showApprove/' + processInstanceId,
+    method: 'get'
+    // params: query
+  })
+}
+
+// 寰呭姙浠诲姟璇︽儏銆�2023-04-03
+export function todoDetail(todoTask) {
+  return request({
+    url: '/wf/task/todoDetail',
+    method: 'post',
+    data: todoTask
+  })
+}
+// 鎻愪氦寰呭姙浠诲姟銆�2023-04-03
+export function transmission(workflowForm) {
+  return request({
+    url: '/wf/task/transmission',
+    method: 'post',
+    data: workflowForm
+  })
+}
+
 // 鏌ヨ琛ㄥ崟
 export function formDataShow(taskID) {
   return request({
diff --git a/src/api/etaa/question_bank.js b/src/api/etaa/question_bank.js
new file mode 100644
index 0000000..697d4a2
--- /dev/null
+++ b/src/api/etaa/question_bank.js
@@ -0,0 +1,77 @@
+import request from '@/utils/request'
+
+export function listQuestionType() {
+  return request({
+    url: '/etaa/question_bank/select/get_question_type',
+    method: 'get'
+    // params: query
+  })
+}
+
+// 鏌ヨ閮ㄨ瘯棰樿〃
+export function listQuestion(query) {
+  return request({
+    url: '/etaa/question_bank/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 璇曢鍒嗙被鏍戯紝鐩墠鏀惧湪鏁版嵁瀛楀吀涓�
+export function listCatalogTreeList(dictType) {
+  return request({
+    url: '/permit/dict/list_tree/' + dictType,
+    method: 'get'
+  })
+}
+//
+// // 鏌ヨ閮ㄩ棬璇︾粏
+// export function getDept(deptId) {
+//   return request({
+//     url: '/system/dept/view/' + deptId,
+//     method: 'get'
+//   })
+// }
+//
+// // 鏌ヨ閮ㄩ棬涓嬫媺鏍戠粨鏋�
+// export function treeselect(deptId) {
+//   return request({
+//     // url: '/system/dept/treeselect',
+//     url: '/system/dept/select/tree_dept/' + deptId,
+//     method: 'get'
+//   })
+// }
+//
+// // 鏍规嵁瑙掕壊ID鏌ヨ閮ㄩ棬鏍戠粨鏋�
+// export function roleDeptTreeselect(roleId) {
+//   return request({
+//     url: '/system/dept/roleDeptTreeselect/' + roleId,
+//     method: 'get'
+//   })
+// }
+//
+// // 鏂板閮ㄩ棬
+// export function addDept(data) {
+//   return request({
+//     url: '/system/dept/add',
+//     method: 'post',
+//     data: data
+//   })
+// }
+//
+// // 淇敼閮ㄩ棬
+// export function updateDept(data) {
+//   return request({
+//     url: '/system/dept/edit',
+//     method: 'post',
+//     data: data
+//   })
+// }
+//
+// // 鍒犻櫎閮ㄩ棬
+// export function delDept(deptId) {
+//   return request({
+//     url: '/system/dept/remove/' + deptId,
+//     method: 'get'
+//   })
+// }
diff --git a/src/views/activiti/task/done_list.vue b/src/views/activiti/task/done_list.vue
new file mode 100644
index 0000000..68350bf
--- /dev/null
+++ b/src/views/activiti/task/done_list.vue
@@ -0,0 +1,194 @@
+<template>
+  <div class="app-container">
+
+
+    <el-table v-loading="loading" :data="tastList">
+      <!--      <el-table-column label="娴佺▼ID" align="center" prop="id"/>-->
+      <el-table-column label="娴佺▼鍚嶇О" align="left" prop="title"/>
+      <el-table-column label="浠诲姟鍚嶇О" align="left" prop="taskName"/>
+      <el-table-column label="浠诲姟鏍囪瘑" align="left" prop="taskDefineKey"/>
+      <el-table-column label="鎵ц浜�" align="left" prop="assignee"/>
+      <el-table-column label="浠g悊浜�" align="left" prop="owner"/>
+      <el-table-column label="浠诲姟寮�濮�" align="left" prop="startTime"/>
+      <el-table-column label="浠诲姟瀹屾垚" align="left" prop="endTime"/>
+      <el-table-column label="娴佺▼缁撴潫" align="left" prop="processEnd"/>
+      <el-table-column label="涓氬姟缂栧彿" align="left" prop="businessKey"/>
+      <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="showApprove(scope.row)"
+            v-hasPermi="['wf:task:**']"
+          >鏌ョ湅
+          </el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 灞曠ず瀹℃壒鍘嗗彶 -->
+    <el-dialog :title="title" :visible.sync="open" v-if="open" width="800px" append-to-body>
+<!--      <leaveHistoryForm :businessKey="businessKey" v-if="'leave'==definitionKey"/>-->
+<!--      <el-form :model="form" ref="form" label-width="100px" class="demo-dynamic">-->
+<!--        <el-form-item-->
+<!--          v-for="(domain, index) in form.formData"-->
+<!--          :label="domain.controlLable"-->
+<!--          :key="index"-->
+<!--        >-->
+<!--          <el-radio-group v-model="domain.controlValue" v-if="'radio'==domain.controlType">-->
+<!--            <el-radio v-for="(defaults,indexd) in domain.controlDefault.split('&#45;&#45;__&#45;&#45;')"-->
+<!--                      :label=indexd-->
+<!--                      :key="indexd"-->
+<!--                      >{{defaults}}-->
+
+<!--            </el-radio>-->
+
+<!--          </el-radio-group>-->
+<!--          <el-input type="textarea" v-model="domain.controlValue" v-if="'textarea'==domain.controlType"-->
+<!--          ></el-input>-->
+<!--        </el-form-item>-->
+<!--      </el-form>-->
+      <div  v-for="(approve, index) in approveList"
+            :key="index" >
+        <h2>
+          ----------------------------------
+          {{approve.taskName}}
+        </h2>
+        <h3>浠诲姟寮�濮嬶細{{approve.startTime}}锛屼换鍔$粨鏉燂細{{approve.endTime}}</h3>
+        <h3 v-if="approve.taskCount==1">鍔炵悊浜�:{{approve.assignee}}锛屾剰瑙侊細{{approve.approveSummary}}</h3>
+        <h3 v-if="approve.taskCount==1">鍔炵悊鏃堕棿:{{approve.approveTime}}</h3>
+        <el-form v-for="(approveItem, indexH) in approve.children" :key="indexH" label-width="80px" v-if="approve.taskCount>1">
+          <h3>鍔炵悊浜�:{{approveItem.assignee}}锛屾剰瑙侊細{{approveItem.approveSummary}}</h3>
+          <h3>鍔炵悊鏃堕棿:{{approveItem.approveTime}}</h3>
+<!--          <el-form-item :label=approveItem.assignee v-if="approveItem.assignee !=''">-->
+<!--            <el-input v-model="approveItem.approveTime"/>-->
+<!--          </el-form-item>-->
+        </el-form>
+      </div>
+
+      <div slot="footer" class="dialog-footer">
+<!--        <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>-->
+        <el-button @click="cancel">鍏� 闂�</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+
+  import {listDone, listApprove, formDataShow, formDataSave} from "@/api/activiti/task";
+  // import leaveHistoryForm from "@/views/workflow/leave/leaveHistoryForm";
+
+  export default {
+    name: "DoneTask",
+    // components: {leaveHistoryForm},
+    data() {
+      return {
+        id:'',
+        definitionKey: '',
+        businessKey: '',
+        // 閬僵灞�
+        loading: true,
+        // 閫変腑鏁扮粍
+        ids: [],
+        // 闈炲崟涓鐢�
+        single: true,
+        // 闈炲涓鐢�
+        multiple: true,
+        // 鏄剧ず鎼滅储鏉′欢
+        showSearch: true,
+        // 鎬绘潯鏁�
+        total: 0,
+        // 璇峰亣琛ㄦ牸鏁版嵁
+        tastList: [],
+
+        // 瀹℃壒鍘嗗彶闆嗗悎锛�2023-04-03
+        approveList: [],
+
+        // 寮瑰嚭灞傛爣棰�
+        title: "",
+        // 鏄惁鏄剧ず寮瑰嚭灞�
+        open: false,
+        // 鏌ヨ鍙傛暟
+        queryParams: {
+          pageNum: 1,
+          pageSize: 10,
+        },
+        // 琛ㄥ崟鍙傛暟
+        form: {
+          formData:[]
+        },
+        // 琛ㄥ崟鏍¢獙
+        rules: {}
+      };
+    },
+    created() {
+      this.getList();
+    },
+    methods: {
+      /** 鏌ヨ璇峰亣鍒楄〃 */
+      getList() {
+        this.loading = true;
+        listDone(this.queryParams).then(response => {
+          this.tastList = response.data;
+          this.total = response.total;
+          this.loading = false;
+        });
+      },
+
+      /** 鏌ヨ瀹℃壒鍘嗗彶闆嗗悎 */
+      getApproveList(processInstanceId){
+        this.loading = true;
+        listApprove(processInstanceId).then(response => {
+          this.approveList = response.data;
+          this.loading = false;
+        });
+      },
+
+      // 鍙栨秷鎸夐挳
+      cancel() {
+        this.open = false;
+        this.reset();
+      },
+      // 琛ㄥ崟閲嶇疆
+      reset() {
+        this.definitionKey = '',
+          this.businessKey = '',
+          this.form = {
+            formData:[],
+          };
+        this.resetForm("form");
+      },
+
+      /** 灞曠ず瀹℃壒鍒楄〃 */
+      showApprove(row) {
+        console.log("processInstanceId = " + row.processInstanceId)
+        this.reset();
+        this.definitionKey = row.definitionKey;
+        this.businessKey = row.businessKey;
+        this.id=row.id;
+        this.getApproveList(row.processInstanceId);
+        this.open = true;
+        this.title = "瀹℃壒鍘嗗彶";
+      }
+
+      // /** 鎻愪氦鎸夐挳 */
+      // submitForm() {
+      //   formDataSave(this.id,this.form.formData).then(response => {
+      //     this.$modal.msgSuccess("瀹℃壒鎴愬姛");
+      //     this.open = false;
+      //     this.getList();
+      //   });
+      // },
+    }
+  };
+</script>
diff --git a/src/views/activiti/task/index.vue b/src/views/activiti/task/index.vue
index f5ed247..9452a39 100644
--- a/src/views/activiti/task/index.vue
+++ b/src/views/activiti/task/index.vue
@@ -1,14 +1,13 @@
 <template>
   <div class="app-container">
 
-
     <el-table v-loading="loading" :data="tastList">
       <!--      <el-table-column label="娴佺▼ID" align="center" prop="id"/>-->
-      <el-table-column label="娴佺▼鍚嶇О" align="center" prop="instanceName"/>
-      <el-table-column label="浠诲姟鑺傜偣鍚嶇О" align="center" prop="name"/>
-      <el-table-column label="浠诲姟鐘舵��" align="center" prop="status"/>
-      <el-table-column label="鍔炵悊浜�" align="center" prop="assignee"/>
-      <el-table-column label="鍒涘缓鏃堕棿" align="center" prop="createdDate"/>
+      <el-table-column label="娴佺▼鍚嶇О" align="center" prop="title"/>
+      <el-table-column label="浠诲姟鑺傜偣鍚嶇О" align="center" prop="taskName"/>
+      <el-table-column label="浠诲姟鐘舵��" align="center" prop=""/>
+      <el-table-column label="鍔炵悊浜�" align="center" prop="userId"/>
+      <el-table-column label="鍒涘缓鏃堕棿" align="center" prop="createTime"/>
 
       <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
         <template slot-scope="scope">
@@ -16,7 +15,7 @@
             size="mini"
             type="text"
             icon="el-icon-edit"
-            @click="examineAndApprove (scope.row)"
+            @click="showTodoDetail(scope.row)"
             v-hasPermi="['wf:task:**']"
           >瀹℃壒
           </el-button>
@@ -34,30 +33,40 @@
 
     <!-- 瀹℃壒瀵硅瘽妗� -->
     <el-dialog :title="title" :visible.sync="open" v-if="open" width="500px" append-to-body>
-      <leaveHistoryForm :businessKey="businessKey" v-if="'leave'==definitionKey"/>
-
+<!--      <leaveHistoryForm :businessKey="businessKey" v-if="'leave'==definitionKey"/>-->
       <el-form :model="form" ref="form" label-width="100px" class="demo-dynamic">
-        <el-form-item
-          v-for="(domain, index) in form.formData"
-          :label="domain.controlLable"
-          :key="index"
-        >
-          <el-radio-group v-model="domain.controlValue" v-if="'radio'==domain.controlType">
-            <el-radio v-for="(defaults,indexd) in domain.controlDefault.split('--__--')"
-                      :label=indexd
-                      :key="indexd"
-                      >{{defaults}}
-
-            </el-radio>
-
-          </el-radio-group>
-          <el-input type="textarea" v-model="domain.controlValue" v-if="'textarea'==domain.controlType"
-          ></el-input>
+        <el-form-item label="娴佺▼鍚嶇О">
+          <el-input v-model="todoTask.title"/>
         </el-form-item>
+        <el-form-item label="浠诲姟鍚嶇О">
+          <el-input v-model="todoTask.taskName"/>
+        </el-form-item>
+        <el-form-item label="涓氬姟涓婚敭" prop="businessKey">
+<!--          <el-input v-model="todoTask.businessKey"/>-->
+          <el-input v-model="form.businessKey"/>
+        </el-form-item>
+        <el-form-item label="娴佺▼鏍囪瘑" prop="processDefinitionKey">
+<!--          <el-input v-model="todoTask.processDefinitionKey"/>-->
+          <el-input v-model="form.processDefinitionKey"/>
+        </el-form-item>
+        <el-form-item label="浠诲姟ID" prop="taskInstanceId">
+<!--          <el-input v-model="todoTask.id"/>-->
+          <el-input v-model="form.taskInstanceId"/>
+        </el-form-item>
+        <el-form-item label="瀹℃壒閫夐」" prop="approveResult">
+          <el-radio-group v-model="form.approveResult">
+            <el-radio value="yes">鍚屾剰</el-radio>
+            <el-radio value="no">閫�鍥�</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item label="瀹℃壒鎰忚" prop="approveSummary">
+          <el-input v-model="form.approveSummary" placeholder="杈撳叆瀹℃壒鎰忚" maxlength="90" />
+        </el-form-item>
+
       </el-form>
 
       <div slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
+        <el-button type="primary" @click="submitForm">杞� 鍙�</el-button>
         <el-button @click="cancel">鍙� 娑�</el-button>
       </div>
     </el-dialog>
@@ -65,19 +74,19 @@
 </template>
 
 <script>
-
-
-  import {listTask, formDataShow, formDataSave} from "@/api/activiti/task";
-  import leaveHistoryForm from "@/views/workflow/leave/leaveHistoryForm";
+  import {listTask, todoDetail, transmission, formDataShow, formDataSave} from "@/api/activiti/task";
+  // import leaveHistoryForm from "@/views/workflow/leave/leaveHistoryForm";
 
   export default {
     name: "Leave",
-    components: {leaveHistoryForm},
+    components: {},
     data() {
       return {
         id:'',
         definitionKey: '',
         businessKey: '',
+        // 褰撳墠寰呭姙浠诲姟璇︾粏锛堢偣鍑荤殑璇︽儏锛夛紝2023-04-03
+        todoTask: undefined,
         // 閬僵灞�
         loading: true,
         // 閫変腑鏁扮粍
@@ -103,7 +112,13 @@
         },
         // 琛ㄥ崟鍙傛暟
         form: {
-          formData:[]
+          businessKey: undefined,
+          processDefinitionKey: undefined,
+          assignee: undefined,
+          taskInstanceId: undefined,
+          approveResult: undefined,
+          approveSummary: '',
+          approveTime: undefined
         },
         // 琛ㄥ崟鏍¢獙
         rules: {}
@@ -130,59 +145,40 @@
       },
       // 琛ㄥ崟閲嶇疆
       reset() {
-        this.definitionKey = '',
-          this.businessKey = '',
-          this.form = {
-            formData:[],
-          };
+        this.definitionKey = '';
+        this.businessKey = '';
+        this.form = {};
         this.resetForm("form");
       },
 
       /** 瀹℃壒鎸夐挳鎿嶄綔 */
-      examineAndApprove(row) {
-        console.log(row)
+      showTodoDetail(row) {
+        console.log(row);
         this.reset();
         this.definitionKey = row.definitionKey;
         this.businessKey = row.businessKey;
         this.id=row.id;
-        formDataShow(row.id).then(response => {
+        todoDetail(row).then(response => {
           // FormProperty_3qipis2--__!!radio--__!!瀹℃壒鎰忚--__!!i--__!!鍚屾剰--__--涓嶅悓鎰�
           // FormProperty_0lffpcm--__!!textarea--__!!鎵规敞--__!!f--__!!null
-          let datas = response.data;
-          let formData = []
-          for (let i = 0; i < datas.length; i++) {
-            let strings = datas[i].split('--__!!')
-            let controlValue = null
-            let controlDefault = null
-            switch (strings[1]) {
-              case 'radio':
-                controlValue = 0;
-                controlDefault = strings[4]
-                break;
-              // default:
-            }
-            formData.push({
-              controlId: strings[0],
-              controlType: strings[1],
-              controlLable: strings[2],
-              controlIsParam: strings[3],
-              controlValue: controlValue,
-              controlDefault: controlDefault
-            })
-          }
-          this.form.formData = formData;
+          this.todoTask = response.data;
+          this.form.businessKey = this.todoTask.businessKey;
+          this.form.taskInstanceId = this.todoTask.id;
+          this.form.processDefinitionKey = this.todoTask.processDefinitionKey;
+
+          // this.form.formData = formData;
           this.open = true;
           this.title = "瀹℃壒";
         });
       },
       /** 鎻愪氦鎸夐挳 */
       submitForm() {
-        formDataSave(this.id,this.form.formData).then(response => {
+        transmission(this.form).then(response => {
           this.$modal.msgSuccess("瀹℃壒鎴愬姛");
           this.open = false;
           this.getList();
         });
-      },
+      }
     }
   };
 </script>
diff --git a/src/views/etaa/question_bank/index.vue b/src/views/etaa/question_bank/index.vue
new file mode 100644
index 0000000..0b752d5
--- /dev/null
+++ b/src/views/etaa/question_bank/index.vue
@@ -0,0 +1,459 @@
+<template>
+  <div class="app-container">
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="6" :xs="24">
+        <div class="head-container">
+          <el-tree
+            :data="catalogListOptions"
+            :props="defaultProps"
+            :expand-on-click-node="false"
+            :filter-node-method="filterNode"
+            ref="tree"
+            default-expand-all
+            highlight-current
+            @node-click="handleNodeClick"
+          />
+        </div>
+      </el-col>
+      <el-col :span="18" :xs="24">
+        <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+          <el-form-item label="椤剁骇鍗曚綅" prop="orgId">
+            <el-select v-model="queryParams.orgId" placeholder="閫夋嫨椤剁骇鍗曚綅" @change="getList()">
+              <el-option
+                v-for="org in this.rootOrgList"
+                :key="org.id"
+                :label="org.dept_name"
+                :value="org.id"
+              />
+            </el-select>
+          </el-form-item>
+
+          <el-form-item label="璇曢绫诲瀷" prop="questionType">
+            <el-select v-model="queryParams.questionType" placeholder="璇曢绫诲瀷">
+              <el-option
+                v-for="d in this.questionTypeList"
+                :key="d.key"
+                :label="d.value"
+                :value="d.key"
+              />
+            </el-select>
+          </el-form-item>
+          <el-form-item label="璇曢棰樼洰" prop="content">
+            <el-input
+              v-model="queryParams.content"
+              placeholder="璇曢鍐呭"
+              clearable
+              @keyup.enter.native="handleQuery"
+            />
+          </el-form-item>
+<!--          <el-form-item label="涓撲笟鍒嗙被" prop="majorCode">-->
+<!--            <el-select v-model="queryParams.majorCode" placeholder="璇烽�夋嫨涓撲笟鍒嗙被" clearable>-->
+<!--              <el-option-->
+<!--                v-for="dict in dict.type.sys_job_status"-->
+<!--                :key="dict.value"-->
+<!--                :label="dict.label"-->
+<!--                :value="dict.value"-->
+<!--              />-->
+<!--            </el-select>-->
+<!--          </el-form-item>-->
+
+          <el-form-item>
+            <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
+            <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
+          </el-form-item>
+        </el-form>
+
+        <el-row :gutter="10" class="mb8">
+          <el-col :span="1.5">
+            <el-button
+              type="primary"
+              plain
+              icon="el-icon-plus"
+              size="mini"
+              @click="handleAdd"
+              v-hasPermi="['exam:online:add']"
+            >娣诲姞</el-button>
+          </el-col>
+          <el-col :span="1.5">
+            <el-button
+              type="danger"
+              plain
+              icon="el-icon-delete"
+              size="mini"
+              :disabled="multiple"
+              @click="handleDelete"
+              v-hasPermi="['exam:online:delBatch']"
+            >鍒犻櫎</el-button>
+          </el-col>
+          <el-col :span="1.5">
+            <el-button
+              type="warning"
+              plain
+              icon="el-icon-search"
+              size="mini"
+              @click="handleExport"
+              v-hasPermi="['exam:online:exist']"
+            >鏌ラ噸</el-button>
+          </el-col>
+          <el-col :span="1.5">
+            <el-button
+              type="warning"
+              plain
+              icon="el-icon-upload2"
+              size="mini"
+              @click="handleExport"
+              v-hasPermi="['exam:online:upload']"
+            >瀵煎叆</el-button>
+          </el-col>
+          <el-col :span="1.5">
+            <el-button
+              type="info"
+              plain
+              icon="el-icon-download"
+              size="mini"
+              @click=""
+              v-hasPermi="['exam:online:download']"
+            >妯℃澘涓嬭浇</el-button>
+          </el-col>
+          <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+        </el-row>
+
+        <el-table v-loading="loading" :data="examList" @selection-change="handleSelectionChange">
+          <el-table-column type="selection" width="55" align="left" />
+          <el-table-column label="ID" align="left" prop="id" :show-overflow-tooltip="true" />
+          <el-table-column label="褰掑睘" align="left" prop="parameter.orgName"/>
+          <el-table-column label="澶х被" align="left" prop="parameter.rootCatalogName"/>
+          <el-table-column label="瀛愬垎绫�" align="left" prop="parameter.majorCatalogName"/>
+          <el-table-column label="棰樼洰" align="left" prop="content" :show-overflow-tooltip="true" />
+          <el-table-column label="璇曢绫诲瀷" align="left" prop="parameter.questionTypeName"/>
+          <el-table-column label="鍒涘缓浜�" align="left" prop="createUserId" :show-overflow-tooltip="true" />
+          <el-table-column label="鍒涘缓鏃堕棿" align="left" prop="parameter.createTimeName" />
+          <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
+            <template slot-scope="scope">
+              <el-button
+                size="mini"
+                type="text"
+                icon="el-icon-edit"
+                @click="handleUpdate(scope.row)"
+                v-hasPermi="['exam:online:edit']"
+              >淇敼</el-button>
+              <el-button
+                size="mini"
+                type="text"
+                icon="el-icon-delete"
+                @click="handleDelete(scope.row)"
+                v-hasPermi="['exam:online:del']"
+              >鍒犻櫎</el-button>
+            </template>
+          </el-table-column>
+        </el-table>
+
+        <pagination
+          v-show="total>0"
+          :total="total"
+          :page.sync="queryParams.pageNum"
+          :limit.sync="queryParams.pageSize"
+          @pagination="getList"
+        />
+      </el-col>
+    </el-row>
+
+    <!-- 娣诲姞鎴栦慨鏀瑰畾鏃朵换鍔″璇濇 -->
+    <el-dialog :title="title" :visible.sync="open" width="800px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="120px">
+        <el-row>
+          <el-col :span="24">
+            <el-form-item label="鎵�灞炲垎绫�" prop="majorId">
+              <el-select v-model="form.majorId" placeholder="璇烽�夋嫨鎵�灞炲垎绫�">
+                <el-option
+                  v-for="dict in dict.type.sys_job_group"
+                  :key="dict.value"
+                  :label="dict.label"
+                  :value="dict.value"
+                ></el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="24">
+            <el-form-item label="棰樼洰绫诲瀷" prop="type">
+              <el-select v-model="form.type" placeholder="璇烽�夋嫨棰樼洰绫诲瀷">
+                <el-option
+                  v-for="dict in dict.type.sys_job_group"
+                  :key="dict.value"
+                  :label="dict.label"
+                  :value="dict.value"
+                ></el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="24">
+            <el-form-item label="棰樼洰" prop="content">
+              <el-input v-model="form.content" placeholder="璇疯緭鍏ラ鐩�"/>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
+        <el-button @click="cancel">鍙� 娑�</el-button>
+      </div>
+    </el-dialog>
+
+    <!-- 璇曢搴撹缁� -->
+    <el-dialog title="璇曢搴撹缁�" :visible.sync="openView" width="700px" append-to-body>
+      <el-form ref="form" :model="form" label-width="120px" size="mini">
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="鎵�灞炲垎绫伙細">{{ form.id }}</el-form-item>
+            <el-form-item label="棰樼洰绫诲瀷锛�">{{ form.jobName }}</el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="棰樼洰锛�">{{ "" }}</el-form-item>
+            <el-form-item label="绛旀锛�">{{ form.createTime }}</el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="openView = false">鍏� 闂�</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+  // import { listJob, getJob, delJob, addJob, updateJob, runJob, changeJobStatus } from "@/api/monitor/job";
+  import { listOrgRoot, listOrgRootTree } from '@/api/system/dept'
+  import { listCatalogTreeList, listQuestion, listQuestionType } from '@/api/etaa/question_bank'
+
+  export default {
+  // components: { Crontab },
+  name: "questionBank",
+  dicts: ['sys_job_status'],
+  data() {
+    return {
+      // 鏃ユ湡鑼冨洿
+      dateRange: [],
+      // 閬僵灞�
+      loading: true,
+      // 閫変腑鏁扮粍
+      ids: [],
+      // 闈炲崟涓鐢�
+      single: true,
+      // 闈炲涓鐢�
+      multiple: true,
+      // 鏄剧ず鎼滅储鏉′欢
+      showSearch: true,
+      // 鎬绘潯鏁�
+      total: 0,
+      // 琛ㄦ牸鏁版嵁
+      examList: [],
+
+      // 2022-12-30 鏍规満鏋勫垪琛紝涓汉鍙兘鍒楀嚭鑷繁鎵�鍦ㄦ牴鏈烘瀯
+      rootOrgList:[],
+      // 2022-12-30 瓒呯骇绠$悊鍛橀�夋嫨鐨勯《绾ф満鏋処D
+      selectedRootOrgId: undefined,
+      // 璇曢绫诲埆鍒楄〃锛�2023-03-11
+      questionTypeList: [],
+      // 2023-03-13 璇曢绫诲埆鏍戞暟鎹�夐」
+      catalogListOptions: undefined,
+      /** 鍒嗙被鏍戞暟鎹粨鏋� */
+      defaultProps: {
+        children: "children",
+        label: "label"
+      },
+
+      // 寮瑰嚭灞傛爣棰�
+      title: "",
+      // 鏄惁鏄剧ず寮瑰嚭灞�
+      open: false,
+      // 鏄惁鏄剧ず璇︾粏寮瑰嚭灞�
+      openView: false,
+      // 鏄惁鏄剧ずCron琛ㄨ揪寮忓脊鍑哄眰
+      openCron: false,
+      // 浼犲叆鐨勮〃杈惧紡
+      expression: "",
+      // 鏌ヨ鍙傛暟
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        content: undefined,
+        catalogId: undefined,
+        orgId: undefined,
+        questionType: undefined
+      },
+      // 琛ㄥ崟鍙傛暟
+      form: {},
+      // 琛ㄥ崟鏍¢獙
+      rules: {
+        content: [
+          { required: true, message: "棰樼洰涓嶈兘涓虹┖", trigger: "blur" }
+        ]
+      }
+    };
+  },
+  created() {
+    this.getRootOrgList();
+    this.getQuestionTypeList();
+  },
+  methods: {
+    /** 鑾峰彇璇曢绫诲埆闆嗗悎 2023-03-11 */
+    getQuestionTypeList(){
+      listQuestionType().then(response => {
+        // console.log(response.data);
+        this.questionTypeList = response.data;
+      });
+    },
+    /** 鑾峰彇椤剁骇鏈烘瀯鍒楄〃閫夋嫨妗� 2022-12-30 */
+    getRootOrgList(){
+      this.loading = true;
+      listOrgRoot().then(response => {
+        this.rootOrgList = response.data;
+        this.selectedRootOrgId = this.rootOrgList[0].id;
+        this.queryParams.orgId = this.selectedRootOrgId;
+        this.loading = false;
+      }).then(() => {
+        this.listCatalogTree();
+        this.getList();
+      }).catch(function() {
+        this.loading = false;
+      });
+    },
+
+    // 璇曢绫诲埆鏍�
+    listCatalogTree(){
+      listCatalogTreeList("question_root_catalog").then(response => {
+        console.log(response.data);
+        this.catalogListOptions = response.data;
+      });
+    },
+
+    /** 鏌ヨ鍒楄〃 */
+    getList() {
+      this.loading = true;
+      listQuestion(this.queryParams).then(response => {
+        this.examList = response.data;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+
+    // 绛涢�夎妭鐐�
+    filterNode(value, data) {
+      if (!value) return true;
+      console.log("value = " + value + ", data = " + data);
+      return data.label.indexOf(value) !== -1;
+    },
+    // 鑺傜偣鍗曞嚮浜嬩欢
+    handleNodeClick(data) {
+      this.queryParams.catalogId = data.id;
+      this.handleQuery();
+    },
+
+    // 鍙栨秷鎸夐挳
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 琛ㄥ崟閲嶇疆
+    reset() {
+      this.form = {
+        id: undefined,
+        content: undefined,
+        concurrent: 1,
+        status: "0"
+      };
+      this.dateRange = [];// 鏃堕棿鑼冨洿
+      this.resetForm("form");
+    },
+    /** 鎼滅储鎸夐挳鎿嶄綔 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 閲嶇疆鎸夐挳鎿嶄綔 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.queryParams.orgId = this.selectedRootOrgId;
+      this.queryParams.questionType = undefined;
+      this.handleQuery();
+    },
+    // 澶氶�夋閫変腑鏁版嵁
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id);
+      this.single = selection.length != 1;
+      this.multiple = !selection.length;
+    },
+    // 鐘舵�佷慨鏀�
+    handleStatusChange(row) {
+      let text = row.status === "0" ? "鍚敤" : "鍋滅敤";
+      this.$modal.confirm('纭瑕�"' + text + '""' + row.name + '"浠诲姟鍚楋紵').then(function() {
+        return changeJobStatus(row.id, row.status);
+      }).then(() => {
+        this.$modal.msgSuccess(text + "鎴愬姛");
+      }).catch(function() {
+        row.status = row.status === "0" ? "1" : "0";
+      });
+    },
+    /** 浠诲姟璇︾粏淇℃伅 */
+    handleView(row) {
+      // getJob(row.id).then(response => {
+      //   this.form = response.data;
+      //   this.openView = true;
+      // });
+    },
+    /** 鏂板鎸夐挳鎿嶄綔 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "娣诲姞璇曢搴�";
+    },
+    /** 淇敼鎸夐挳鎿嶄綔 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids;
+      getJob(id).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "淇敼璇曢搴�";
+      });
+    },
+    /** 鎻愪氦鎸夐挳 */
+    submitForm: function() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != undefined) {
+            updateJob(this.form).then(response => {
+              this.$modal.msgSuccess("淇敼鎴愬姛");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addJob(this.form).then(response => {
+              this.$modal.msgSuccess("鏂板鎴愬姛");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
+    handleDelete(row) {
+      const jobIds = row.id || this.ids;
+      this.$modal.confirm('鏄惁纭鍒犻櫎缂栧彿涓�"' + jobIds + '"鐨勬暟鎹」锛�').then(function() {
+        return delJob(jobIds);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("鍒犻櫎鎴愬姛");
+      }).catch(() => {});
+    },
+    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
+    handleExport() {
+      this.download('monitor/job/export', {
+        ...this.queryParams
+      }, `job_${new Date().getTime()}.xlsx`)
+    }
+  }
+};
+</script>

--
Gitblit v1.9.1