From 8ff27c68fb20b0592ce256c15df474d6b3137416 Mon Sep 17 00:00:00 2001
From: zhangxp <zhangxp@chicecm.com>
Date: 星期三, 21 六月 2023 16:06:37 +0800
Subject: [PATCH] 操作流程

---
 Source/UBCS-WEB/src/views/work/process/leave-bak/handle.vue |  169 ++++++++++++++++++++++++
 Source/UBCS-WEB/src/views/work/process/leave-bak/form.vue   |  112 ++++++++++++++++
 Source/UBCS-WEB/src/views/work/process/leave-bak/detail.vue |  107 +++++++++++++++
 3 files changed, 388 insertions(+), 0 deletions(-)

diff --git a/Source/UBCS-WEB/src/views/work/process/leave-bak/detail.vue b/Source/UBCS-WEB/src/views/work/process/leave-bak/detail.vue
new file mode 100644
index 0000000..18a8e30
--- /dev/null
+++ b/Source/UBCS-WEB/src/views/work/process/leave-bak/detail.vue
@@ -0,0 +1,107 @@
+<template>
+  <basic-container>
+    <el-form ref="form" :model="form" label-width="80px">
+      <el-row type="flex" class="row-bg" justify="end">
+        <el-form-item>
+          <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-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">
+              <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>
+              </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>
+  </basic-container>
+</template>
+
+<script>
+  import {historyFlowList, leaveDetail} from "@/api/work/process";
+
+  export default {
+    data() {
+      return {
+        businessId: '',
+        processInstanceId: '',
+        src: '',
+        flowList: [],
+        form: {
+          flow:{
+            assigneeName:'',
+          },
+          startTime: '',
+          endTime: '',
+          reason: '',
+        }
+      }
+    },
+    created() {
+      this.init();
+    },
+    methods: {
+      init() {
+        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;
+          }
+        })
+      },
+      handleCancel() {
+        this.$router.$avueRouter.closeTag();
+        this.$router.push({path: `/work/start`});
+      }
+    }
+  }
+</script>
diff --git a/Source/UBCS-WEB/src/views/work/process/leave-bak/form.vue b/Source/UBCS-WEB/src/views/work/process/leave-bak/form.vue
new file mode 100644
index 0000000..5f15d44
--- /dev/null
+++ b/Source/UBCS-WEB/src/views/work/process/leave-bak/form.vue
@@ -0,0 +1,112 @@
+<template>
+  <div>
+    <basic-container>
+      <avue-form :option="option" v-model="form" @submit="handleSubmit"/>
+    </basic-container>
+    <basic-container>
+      <flow-design :is-display="true" :process-definition-id="processDefinitionId"></flow-design>
+    </basic-container>
+  </div>
+</template>
+
+<script>
+  import {leaveProcess} from "@/api/work/process";
+
+  export default {
+    data() {
+      return {
+        processDefinitionId: '',
+        form: {},
+        option: {
+          group: [
+            {
+              icon: 'el-icon-info',
+              label: '璇峰亣鍩虹淇℃伅',
+              prop: 'group1',
+              column: [
+                {
+                  label: '瀹℃壒浜哄憳',
+                  prop: 'taskUser',
+                  type: 'select',
+                  dicUrl: `/api/ubcs-user/user-list`,
+                  props: {
+                    label: "account",
+                    value: "id"
+                  },
+                  span: 24,
+                  rules: [
+                    {
+                      required: true,
+                      message: '璇烽�夋嫨瀹℃壒浜哄憳',
+                      trigger: 'blur'
+                    }
+                  ]
+                },
+                {
+                  label: '寮�濮嬫椂闂�',
+                  prop: 'startTime',
+                  type: 'datetime',
+                  valueFormat: 'yyyy-MM-dd HH:mm:ss',
+                  rules: [
+                    {
+                      required: true,
+                      message: '璇烽�夋嫨寮�濮嬫椂闂�',
+                      trigger: 'blur'
+                    }
+                  ]
+                },
+                {
+                  label: '缁撴潫鏃堕棿',
+                  prop: 'endTime',
+                  type: 'datetime',
+                  valueFormat: 'yyyy-MM-dd HH:mm:ss',
+                  rules: [
+                    {
+                      required: true,
+                      message: '璇烽�夋嫨缁撴潫鏃堕棿',
+                      trigger: 'blur'
+                    }
+                  ]
+                },
+                {
+                  label: '璇峰亣鐞嗙敱',
+                  prop: 'reason',
+                  type: 'textarea',
+                  span: 24,
+                  rules: [
+                    {
+                      required: true,
+                      message: '璇疯緭鍏ヨ鍋囩悊鐢�',
+                      trigger: 'blur'
+                    }
+                  ]
+                },
+              ]
+            },
+          ],
+        }
+      }
+    },
+    created() {
+      this.processDefinitionId = this.$route.params.processDefinitionId;
+    },
+    methods: {
+      handleSubmit() {
+        const params = {
+          processDefinitionId: this.$route.params.processDefinitionId,
+          ...this.form,
+        };
+        leaveProcess(params).then(resp => {
+          const data = resp.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 || '鎻愪氦澶辫触');
+          }
+        });
+      }
+    }
+  }
+</script>
diff --git a/Source/UBCS-WEB/src/views/work/process/leave-bak/handle.vue b/Source/UBCS-WEB/src/views/work/process/leave-bak/handle.vue
new file mode 100644
index 0000000..961bf88
--- /dev/null
+++ b/Source/UBCS-WEB/src/views/work/process/leave-bak/handle.vue
@@ -0,0 +1,169 @@
+<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">
+              <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>
+              </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>
+  </basic-container>
+</template>
+
+<script>
+  import {historyFlowList, leaveDetail} from "@/api/work/process";
+  import {completeTask} from "@/api/work/work";
+
+  export default {
+    data() {
+      return {
+        taskId: '',
+        businessId: '',
+        processInstanceId: '',
+        src: '',
+        flowList: [],
+        form: {
+          flow: {
+            assigneeName: '',
+          },
+          startTime: '',
+          endTime: '',
+          reason: '',
+          comment: '',
+        },
+      }
+    },
+    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;
+          }
+        })
+        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() {
+        this.$router.$avueRouter.closeTag();
+        this.$router.push({path: `/work/start`});
+      }
+    }
+  }
+</script>

--
Gitblit v1.9.3