From 35036692b109feebeec30ba558aad65e1841889c Mon Sep 17 00:00:00 2001
From: zhangxp <zhangxp@chicecm.com>
Date: 星期日, 25 六月 2023 15:50:53 +0800
Subject: [PATCH] 流程测试

---
 Source/UBCS-WEB/src/api/template/flowpath.js            |   16 ++
 Source/UBCS-WEB/src/views/work/process/leave/handle.vue |  352 ++++++++++++++++++++++++++++---------------------
 Source/UBCS-WEB/vue.config.js                           |    4 
 3 files changed, 219 insertions(+), 153 deletions(-)

diff --git a/Source/UBCS-WEB/src/api/template/flowpath.js b/Source/UBCS-WEB/src/api/template/flowpath.js
index d1fef57..5efd565 100644
--- a/Source/UBCS-WEB/src/api/template/flowpath.js
+++ b/Source/UBCS-WEB/src/api/template/flowpath.js
@@ -64,3 +64,19 @@
     data: params
   })
 }
+// 灞炴�у垪琛ㄥ乏渚�
+export const getBtnTask = (params) => {
+  return request({
+    url: '/api/ubcs-flow/vciflow/next',
+    method: 'post',
+    data: params
+  })
+}
+// 妯℃澘闃舵鍒楄〃
+export const ExamineTask = (params) => {
+  return request({
+    url: '/api/ubcs-flow/work/complete-task',
+    method: 'post',
+    data: params
+  })
+}
diff --git a/Source/UBCS-WEB/src/views/work/process/leave/handle.vue b/Source/UBCS-WEB/src/views/work/process/leave/handle.vue
index 961bf88..86617b7 100644
--- a/Source/UBCS-WEB/src/views/work/process/leave/handle.vue
+++ b/Source/UBCS-WEB/src/views/work/process/leave/handle.vue
@@ -1,169 +1,219 @@
 <template>
   <basic-container>
-    <el-form ref="form" :model="form" :rules="rules" label-width="80px">
-      <el-row type="flex" class="row-bg" justify="end">
-        <el-form-item>
-          <el-button type="primary" @click="handleAgree">鍚屾剰</el-button>
-          <el-button type="danger" @click="handleDisagree">椹冲洖</el-button>
-          <el-button @click="handleCancel">鍏抽棴</el-button>
-        </el-form-item>
-      </el-row>
-      <el-card shadow="hover">
-        <div slot="header">
-          <span>瀹℃壒淇℃伅</span>
-        </div>
-        <el-form-item label="鐢宠浜�">
-          <el-input :disabled="true" v-model="form.flow.assigneeName"/>
-        </el-form-item>
-        <el-row>
-          <el-col :span="12">
-            <el-form-item label="寮�濮嬫椂闂�">
-              <el-input :disabled="true" v-model="form.startTime"/>
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="缁撴潫鏃堕棿">
-              <el-input :disabled="true" v-model="form.endTime"/>
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <el-form-item label="璇峰亣鐞嗙敱">
-          <el-input :disabled="true" type="textarea" v-model="form.reason"/>
-        </el-form-item>
-        <el-form-item label="鎵瑰鎰忚">
-          <el-input type="textarea" v-model="form.comment"/>
-        </el-form-item>
-      </el-card>
-      <el-card shadow="hover">
-        <div slot="header">
-          <span>娴佺▼淇℃伅</span>
-        </div>
-        <el-row type="flex" class="row-bg">
-          <el-timeline>
-            <el-timeline-item :key="flow.id" :timestamp="flow.createTime" v-for="flow in flowList" placement="top">
+    <div class="dialogwarp">
+      <div class="dialogwarp_tab">
+        <el-card class="dialogwarp_tab_card">
+          <el-tabs v-model="activeName" @tab-click="handleClick">
+            <el-tab-pane label="涓氬姟鏁版嵁淇℃伅" name="first">
+
+            </el-tab-pane>
+            <el-tab-pane label="娴佺▼璺熻釜" name="second">
+              <avue-crud :data="flowList" :option="option" ref="crud">
+              </avue-crud>
               <el-card shadow="hover">
-                <p>{{flow.assigneeName}} 鍦� [{{flow.createTime}}] 寮�濮嬪鐞� [{{flow.historyActivityName}}] 鐜妭</p>
-                <p v-if="flow.historyActivityDurationTime!==''">浠诲姟鍘嗘椂 [{{flow.historyActivityDurationTime}}]</p>
-                <p v-if="flow.comment!==''">鎵瑰鎰忚: [{{flow.comment}}]</p>
-                <p v-if="flow.endTime!==''">缁撴潫鏃堕棿: [{{flow.endTime}}]</p>
+                <div slot="header">
+                  <span>娴佺▼璺熻釜</span>
+                </div>
+                <el-row class="row-bg">
+                  <flow-design :is-display="true" :process-instance-id="processInstanceId"></flow-design>
+                </el-row>
               </el-card>
-            </el-timeline-item>
-          </el-timeline>
-        </el-row>
-      </el-card>
-      <el-card shadow="hover">
-        <div slot="header">
-          <span>娴佺▼璺熻釜</span>
-        </div>
-        <el-row class="row-bg">
-          <flow-design :is-display="true" :process-instance-id="processInstanceId"></flow-design>
-        </el-row>
-      </el-card>
-    </el-form>
+            </el-tab-pane>
+          </el-tabs>
+        </el-card>
+      </div>
+      <div class="dialogwarp_card">
+        <el-card class="box-card">
+          <div slot="header" class="clearfix">
+            <span>褰撳墠浠诲姟锛�</span>
+            <span>{{ title }}</span>
+          </div>
+          <div style="width: 100%;">
+            <p>璇峰湪涓嬫柟杈撳叆鎮ㄧ殑瀹℃壒鎰忚锛�</p>
+            <el-input type="textarea" :rows="4" placeholder="璇疯緭鍏ュ唴瀹�" show-word-limit v-model="opinionVal">
+            </el-input>
+          </div>
+          <div style="width: 100%;">
+            <p>瀹℃壒鎰忚闄勪欢锛�</p>
+            <el-upload drag action="https://jsonplaceholder.typicode.com/posts/" multiple style="width: 100%;">
+              <i class="el-icon-upload"></i>
+              <div class="el-upload__text">灏嗘枃浠舵嫋鍒版澶勶紝鎴�<em>鐐瑰嚮涓婁紶</em></div>
+            </el-upload>
+          </div>
+          <div style="width: 100%;">
+            <p>宸蹭笂浼犲鎵规枃浠讹細</p>
+            <el-card class="box-card">
+              <el-table :data="tableData" stripe style="width: 100%">
+                <el-table-column prop="date" label="鏂囦欢鍚�">
+                </el-table-column>
+                <el-table-column prop="name" label="涓婁紶浜�  ">
+                </el-table-column>
+                <el-table-column prop="address" label="鎿嶄綔">
+                </el-table-column>
+              </el-table>
+            </el-card>
+          </div>
+          <div style="margin-top: 20px;">
+            <!-- <el-button type="primary" size="mini" @click="handelRefuse">涓嶅悓鎰�</el-button>
+            <el-button v-if="!isRefuse" type="primary" size="mini" @click="handelAgree">鍚屾剰</el-button>
+             <el-button v-if="!isAgree" type="primary" size="mini" @click="handelRefuse">涓嶅悓鎰�</el-button> -->
+            <el-button type="primary" size="mini" @click="handelExecute(item)" v-for="(item, index) in btnList"
+              :key="index">{{ item.toName === '鍚屾剰' ? item.toName : `${item.toName}鍒�${item.taskName}` }}</el-button>
+            <!-- <el-button v-if="isRefuse" type="primary" size="mini" @click="handelExecute">鎵ц</el-button> -->
+          </div>
+        </el-card>
+      </div>
+    </div>
   </basic-container>
 </template>
 
 <script>
-  import {historyFlowList, leaveDetail} from "@/api/work/process";
-  import {completeTask} from "@/api/work/work";
+import { historyFlowList } from "@/api/work/process";
+import { getBtnTask, ExamineTask } from '@/api/template/flowpath.js'
+import { validatenull } from '@/util/validate'
 
-  export default {
-    data() {
-      return {
-        taskId: '',
-        businessId: '',
-        processInstanceId: '',
-        src: '',
-        flowList: [],
-        form: {
-          flow: {
-            assigneeName: '',
-          },
-          startTime: '',
-          endTime: '',
-          reason: '',
-          comment: '',
-        },
-      }
-    },
-    created() {
+export default {
+  data() {
+    return {
+      taskId: '',
+      businessId: '',
+      processInstanceId: '',
+      src: '',
+      flowList: [],
+      btnList: [],
+      opinionVal: '',
+      activeName: 'first',
+      option: {
+        menu: false,
+        addBtn: false,
+        refreshBtn: false,
+        columnBtn: false,
+        index: true,
+        header: false,
+        stripe: true,
+        indexLabelClassName: '搴忓彿',
+        column: [
+          { label: '浠诲姟鍚嶇О', prop: 'historyActivityName', minWidth: 120 },
+          { label: '鎵ц鎿嶄綔', prop: 'sex', minWidth: 80 },
+          { label: '浠诲姟寮�濮嬫椂闂�', prop: 'createTime', minWidth: 140 },
+          { label: '瀹℃壒鎰忚', prop: 'sex', minWidth: 220, overHidden: true },
+          { label: '鎵ц浜�', prop: 'assigneeName', minWidth: 80 },
+          { label: '浠诲姟瀹屾垚鏃堕棿', prop: 'endTime', minWidth: 140 },
+          { label: '宸蹭笂浼犲鎵规枃浠�', prop: 'sex', minWidth: 220, overHidden: true },
+        ]
+      },
+    }
+  },
+  created() {
+    this.init();
+
+  },
+  beforeRouteUpdate(to, from, next) {
+    // 鍦ㄥ綋鍓嶈矾鐢辨敼鍙橈紝浣嗘槸璇ョ粍浠惰澶嶇敤鏃惰皟鐢�
+    // 涓句緥鏉ヨ锛屽浜庝竴涓甫鏈夊姩鎬佸弬鏁扮殑璺緞 /foo/:id锛屽湪 /foo/1 鍜� /foo/2 涔嬮棿璺宠浆鐨勬椂鍊�
+    // 鐢变簬浼氭覆鏌撳悓鏍风殑 Foo 缁勪欢锛屽洜姝ょ粍浠跺疄渚嬩細琚鐢ㄣ�傝�岃繖涓挬瀛愬氨浼氬湪杩欎釜鎯呭喌涓嬭璋冪敤
+    // 鍙互璁块棶缁勪欢瀹炰緥 `this`
+    if (to.fullPath !== from.fullPath) {
+      next();
       this.init();
+    }
+  },
+  methods: {
+    init() {
+      this.taskId = this.$route.params.taskId;
+      this.processInstanceId = this.$route.params.processInstanceId;
+      this.businessId = this.$route.params.businessId;
+      historyFlowList(this.processInstanceId).then(res => {
+        const data = res.data;
+        if (data.success) {
+          this.flowList = data.data;
+        }
+      })
+      this.apiGetBtnTask(this.processInstanceId)
     },
-    beforeRouteUpdate(to, from, next) {
-      // 鍦ㄥ綋鍓嶈矾鐢辨敼鍙橈紝浣嗘槸璇ョ粍浠惰澶嶇敤鏃惰皟鐢�
-      // 涓句緥鏉ヨ锛屽浜庝竴涓甫鏈夊姩鎬佸弬鏁扮殑璺緞 /foo/:id锛屽湪 /foo/1 鍜� /foo/2 涔嬮棿璺宠浆鐨勬椂鍊�
-      // 鐢变簬浼氭覆鏌撳悓鏍风殑 Foo 缁勪欢锛屽洜姝ょ粍浠跺疄渚嬩細琚鐢ㄣ�傝�岃繖涓挬瀛愬氨浼氬湪杩欎釜鎯呭喌涓嬭璋冪敤
-      // 鍙互璁块棶缁勪欢瀹炰緥 `this`
-      if (to.fullPath !== from.fullPath) {
-        next();
-        this.init();
+    async apiGetBtnTask(id) {
+      const response = await getBtnTask({ processInstanceId: id })
+      const res = response.data
+      if (res.success) {
+        console.log(res)
+        this.btnList = res.data.toTasks
       }
     },
-    methods: {
-      init() {
-        this.taskId = this.$route.params.taskId;
-        this.processInstanceId = this.$route.params.processInstanceId;
-        this.businessId = this.$route.params.businessId;
-        historyFlowList(this.processInstanceId).then(res => {
-          const data = res.data;
-          if (data.success) {
-            this.flowList = data.data;
-          }
-        })
-        leaveDetail(this.businessId).then(res => {
-          const data = res.data;
-          if (data.success) {
-            this.form = data.data;
-          }
-        })
-      },
-      handleAgree() {
-        if (!this.form.comment) {
-          this.$message.warning('璇峰厛濉啓鎵瑰鎰忚');
-          return;
-        }
-        const params = {
-          taskId: this.taskId,
-          processInstanceId: this.processInstanceId,
-          flag: 'ok',
-          comment: this.form.comment,
-        };
-        completeTask(params).then(res => {
-          const data = res.data;
-          if (data.success) {
-            this.$message.success(data.msg);
-            this.$router.$avueRouter.closeTag();
-            this.$router.push({path: `/work/start`});
-          } else {
-            this.$message.error(data.msg || '鎻愪氦澶辫触');
-          }
-        })
-      },
-      handleDisagree() {
-        if (!this.form.comment) {
-          this.$message.warning('璇峰厛濉啓鎵瑰鎰忚');
-          return;
-        }
-        const params = {
-          taskId: this.taskId,
-          processInstanceId: this.processInstanceId,
-          comment: this.form.comment,
-        };
-        completeTask(params).then(res => {
-          const data = res.data;
-          if (data.success) {
-            this.$message.success(data.msg);
-            this.$router.$avueRouter.closeTag();
-            this.$router.push({path: `/work/start`});
-          } else {
-            this.$message.error(data.msg || '鎻愪氦澶辫触');
-          }
-        })
-      },
-      handleCancel() {
+    async apiExamineTask(param) {
+      const response = await ExamineTask(param)
+      const res = response.data
+      if (res.success) {
+        this.$message.success(res.msg);
         this.$router.$avueRouter.closeTag();
-        this.$router.push({path: `/work/start`});
+        this.$router.push({ path: `/work/start` });
+      } else {
+        this.$message.error(res.msg || '鎻愪氦澶辫触');
       }
+    },
+    handelExecute(event) {
+      console.log(event)
+      const { toName, conditionKey, conditionValue } = event
+      let param = {
+        comment: this.opinionVal || '鍚屾剰',
+        flag: 'ok',
+        processInstanceId: this.processInstanceId,
+        taskId: this.taskId,
+      }
+      if (!validatenull(conditionKey) && !validatenull(conditionValue)) {
+        param = {
+          ...param, variables: {
+            [conditionKey]: conditionValue
+          }
+        }
+      }
+      if (toName === '椹冲洖') {
+        if (!this.opinionVal) {
+          this.$alert(`褰撳鐞嗘柟寮忎负${toName}鏃讹紝闇�瑕佸~鍐欏鎵规剰瑙乣, '鎻愮ず淇℃伅', {
+            confirmButtonText: '纭畾',
+          }).then(() => {
+
+          });
+        } else this.apiExamineTask(param)
+      } else this.apiExamineTask(param)
     }
   }
+}
 </script>
+<style lang="scss" scoped>
+.dialogwarp {
+  display: -webkit-box;
+  display: -ms-flexbox;
+  display: flex;
+  justify-content: space-between;
+  height: 70vh;
+
+  &_tab {
+    width: 79%;
+
+
+    &_card {
+      width: 100%;
+      height: 100%;
+    }
+  }
+
+  &_card {
+    // margin-left: 20px;
+    width: 20%;
+  }
+}
+
+::v-deep(.el-upload) {
+  width: 100%;
+  height: 120px;
+}
+
+::v-deep(.el-upload-dragger) {
+  width: 100%;
+  height: 120px;
+}
+
+::v-deep(.el-upload-dragger .el-icon-upload) {
+  margin: 15px 0 16px;
+}
+</style>
diff --git a/Source/UBCS-WEB/vue.config.js b/Source/UBCS-WEB/vue.config.js
index 90f5f41..39735fc 100644
--- a/Source/UBCS-WEB/vue.config.js
+++ b/Source/UBCS-WEB/vue.config.js
@@ -26,7 +26,7 @@
     proxy: {
       '/api': {
         //鏈湴鏈嶅姟鎺ュ彛鍦板潃
-        target: 'http://localhost:37000',
+        // target: 'http://localhost:37000',
         // target: 'http://192.168.1.51:37000',
         //target: 'http://192.168.1.46:37000',
         // target: 'http://dev.vci-tech.com:37000',
@@ -35,7 +35,7 @@
         //target: 'http://192.168.3.7:37000',
         //target: 'http://dev.vci-tech.com:37000',
         //target: 'http://192.168.1.51:37000/',
-        // target:'http://192.168.1.104:37000',
+        target:'http://192.168.1.104:37000',
         //杩滅▼婕旂ず鏈嶅姟鍦板潃,鍙敤浜庣洿鎺ュ惎鍔ㄩ」鐩�
         // target: 'https://saber.bladex.vip/api',
         ws: true,

--
Gitblit v1.9.3