From fc2505f46bd0e45d5a4c2ad1b4ab9187c9e7bec3 Mon Sep 17 00:00:00 2001
From: lyh <925863403@qq.com>
Date: 星期三, 02 四月 2025 09:19:51 +0800
Subject: [PATCH] 修改审签工作流

---
 src/views/flowable/workflow/dispatchFile/DispatchFileBachHandleForm.vue         |  216 ++++++++++++++++++++++++++++++++++++
 src/views/flowable/workflow/dispatchFile/DispatchFileBachHandleStyle#Drawer.vue |   62 ++++++++++
 src/views/flowable/workflow/FlowTodo.vue                                        |   57 ++++++++-
 3 files changed, 329 insertions(+), 6 deletions(-)

diff --git a/src/views/flowable/workflow/FlowTodo.vue b/src/views/flowable/workflow/FlowTodo.vue
index 8db64e3..6ce720b 100644
--- a/src/views/flowable/workflow/FlowTodo.vue
+++ b/src/views/flowable/workflow/FlowTodo.vue
@@ -44,22 +44,33 @@
 
     <!-- 鎿嶄綔鎸夐挳鍖哄煙 -->
     <div class="table-operator">
+    <a-dropdown v-if="selectedRowKeys.length > 0 ">
+      <a-menu slot="overlay">
+        <a-menu-item key="1" @click="batchHandle"><a-icon type="delete"/>鎵归噺澶勭悊</a-menu-item>
+      </a-menu>
+      <a-button style="margin-left: 8px"> 鎵归噺鎿嶄綔 <a-icon type="down" /></a-button>
+    </a-dropdown>
     </div>
 
     <!-- table鍖哄煙-begin -->
     <div>
+      <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
+        <i class="anticon anticon-info-circle ant-alert-icon"></i>宸查�夋嫨&nbsp;<a style="font-weight: 600">{{
+          selectedRowKeys.length }}</a>椤�&nbsp;&nbsp;
+        <a style="margin-left: 24px" @click="onClearSelected">娓呯┖</a>
+      </div>
 
       <a-table
         ref="table"
-        size="middle"
-        :scroll="{x:true}"
         bordered
+        size="middle"
         rowKey="id"
+        :scroll="{x:'max-content',y:465}"
         :columns="columns"
         :dataSource="dataSource"
         :pagination="ipagination"
         :loading="loading"
-        class="j-table-force-nowrap"
+        :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
         @change="handleTableChange">
 
         <template slot="htmlSlot" slot-scope="text">
@@ -91,7 +102,7 @@
 
     <AssignFileStreamHandle ref="modalFormApproval" :selectShenpiData="selectShenpiData"></AssignFileStreamHandle>
     <DispatchFileHandle ref="modalFormDispatchFileXq"  :selectShenpiData="selectDispatchFileXqData" @searchReset="searchReset"></DispatchFileHandle>
-
+    <DispatchFileBachHandleStyle ref="modalFormDispatchFileBatch" @searchReset="searchReset" @ok="modalFormOk"></DispatchFileBachHandleStyle>
   </a-card>
 </template>
 
@@ -103,13 +114,16 @@
 import JDictSelectTag from '@/components/dict/JDictSelectTag.vue'
 import AssignFileStreamHandle from '@views/flowable/workflow/assignFileStream/AssignFileStreamHandle.vue'
 import DispatchFileHandle from '@views/flowable/workflow/dispatchFile/DispatchFileHandle.vue'
+import DispatchFileBachHandleStyle from '@views/flowable/workflow/dispatchFile/DispatchFileBachHandleStyle#Drawer.vue'
+import { getAction } from '@api/manage'
 export default {
   name: 'NcDeviceCharactersList',
   mixins:[JeecgListMixin, mixinDevice],
   components: {
     AssignFileStreamHandle,
     JDictSelectTag,
-    DispatchFileHandle
+    DispatchFileHandle,
+    DispatchFileBachHandleStyle
   },
   data () {
     return {
@@ -179,10 +193,12 @@
       ],
       url: {
         list: '/assign/flow/toTaskBySelf',
+        isSameNode: '/assign/flow/isSameNode'
       },
       dictOptions:{},
       selectShenpiData: {},
-      selectDispatchFileXqData:{}
+      selectDispatchFileXqData:{},
+      selectBachData:{}
     }
   },
   created() {
@@ -229,6 +245,35 @@
       this.selectDispatchFileXqData = item
       this.$refs.modalFormDispatchFileXq.clearTableSource()
       this.$refs.modalFormDispatchFileXq.getAllApproveData(item)
+    },
+    batchHandle() {
+      if (this.selectedRowKeys.length <= 0) {
+        this.$notification.warning({
+          message: '娑堟伅',
+          description: "璇烽�夋嫨涓�鏉¤褰�"
+        });
+        return;
+      } else {
+        let ids = "";
+        for (var a = 0; a < this.selectedRowKeys.length; a++) {
+          ids += this.selectedRowKeys[a] + ",";
+        }
+        getAction(this.url.isSameNode+"?taskIds="+ids).then((res)=>{
+          if(res.success){
+            let taskDefKey=res.result
+            this.selectBachData.taskIds = ids
+            this.selectBachData.taskDefKey = taskDefKey
+            this.$refs.modalFormDispatchFileBatch.title="鎵归噺澶勭悊";
+            this.$refs.modalFormDispatchFileBatch.edit(this.selectBachData)
+            this.$refs.modalFormDispatchFileBatch.disableSubmit = false;
+          }else{
+            this.$notification.warning({
+              message: '娑堟伅',
+              description: res.message
+            });
+          }
+        })
+      }
     }
   }
 }
diff --git a/src/views/flowable/workflow/dispatchFile/DispatchFileBachHandleForm.vue b/src/views/flowable/workflow/dispatchFile/DispatchFileBachHandleForm.vue
new file mode 100644
index 0000000..a883bcc
--- /dev/null
+++ b/src/views/flowable/workflow/dispatchFile/DispatchFileBachHandleForm.vue
@@ -0,0 +1,216 @@
+<template>
+	<a-spin :spinning="confirmLoading">
+		<j-form-container >
+			<a-form-model ref="form" :model="model" :rules="validatorRules" slot="detail">
+				<a-row>
+          <a-col :span="24" v-if="selectBachData.taskDefKey ==='task_proofread'" class="btxx">
+            <a-form-model-item  label="澶勭悊绫诲瀷" :labelCol="labelCol" :wrapperCol="wrapperCol" prop='status'>
+              <j-dict-select-tag  type='list' v-model='model.status' dictCode='nc_sq_handle_type_jd' placeholder="璇烽�夋嫨澶勭悊绫诲瀷"  />
+            </a-form-model-item >
+          </a-col>
+          <a-col :span="24" v-if="selectBachData.taskDefKey ==='task_approve' || selectBachData.taskDefKey ==='task_cut' || selectBachData.taskDefKey ==='task_finalize'" class="btxx">
+            <a-form-model-item  label="澶勭悊绫诲瀷" :labelCol="labelCol" :wrapperCol="wrapperCol" prop='status'>
+              <j-dict-select-tag  type='list' v-model='model.status' dictCode='nc_sq_handle_type' placeholder="璇烽�夋嫨澶勭悊绫诲瀷"  />
+            </a-form-model-item >
+          </a-col>
+          <a-col :span="24" class="btxx">
+            <a-form-model-item  label="澶勭悊鎰忚" :labelCol="labelCol" :wrapperCol="wrapperCol">
+              <a-textarea v-model="model.approveContent" rows="4" placeholder="璇疯緭鍏ュ鐞嗘剰瑙�"/>
+            </a-form-model-item >
+          </a-col>
+				</a-row>
+			</a-form-model>
+		</j-form-container>
+	</a-spin>
+</template>
+
+<script>
+	import axios from 'axios';
+	import {
+		httpAction,
+		getAction
+	} from '@/api/manage'
+	import {
+		validateDuplicateValue
+	} from '@/utils/util'
+
+	export default {
+		name: 'ChCfForm',
+		components: {},
+		props: {
+			//琛ㄥ崟绂佺敤
+			disabled: {
+				type: Boolean,
+				default: false,
+				required: false
+			}
+		},
+		data() {
+			return {
+				principalList: [],
+				model: {},
+				labelCol: {
+					xs: {
+						span: 24
+					},
+					sm: {
+						span: 5
+					},
+				},
+				wrapperCol: {
+					xs: {
+						span: 24
+					},
+					sm: {
+						span: 16
+					},
+				},
+				confirmLoading: false,
+				validatorRules: {
+					address: [{
+						required: true,
+						message: '璇烽�夋嫨鍦板潃!'
+					}, ],
+					bt: [{
+						required: true,
+						message: '璇疯緭鍏ユ爣棰�!'
+					}, ],
+				},
+				url: {
+          approvalBatch: "/dncFlow/dispatchFile/approvalBatch",
+				},
+        selectBachData:{}
+			}
+		},
+		computed: {
+			formDisabled() {
+				return this.disabled
+			},
+		},
+		created() {
+			//澶囦唤model鍘熷鍊�
+			this.modelDefault = JSON.parse(JSON.stringify(this.model));
+		},
+		methods: {
+			handleChange(e) {
+				console.log(e);
+				let sss = e.split('||||')
+				console.log(sss);
+				this.model.jd = sss[0]
+				this.model.address = sss[1]
+				console.log(sss)
+			},
+			handleSearch(e) {
+				if (e === '') {
+					return
+				}
+				const that = this;
+				axios.get('/s-api/api/index/lsdz?input=' + e)
+					.then(response => {
+						that.principalList = []
+						console.log(that.principalList)
+						for (var i = 0; i < response.data.data.length; i++) {
+							that.principalList.push({
+								value: response.data.data[i].inputValueId + '||||' + response.data.data[i].setout,
+								label: response.data.data[i].setout,
+							});
+						}
+						// that.principalList = response.data.data
+						console.log(that.principalList, '8888'); // 杈撳嚭杩斿洖鐨勬暟鎹�
+					})
+					.catch(error => {
+						console.error(error); // 澶勭悊閿欒鎯呭喌
+					});
+			},
+			add() {
+				this.edit(this.modelDefault);
+			},
+			edit(record) {
+				this.selectBachData=record
+				this.visible = true;
+			},
+      submitForm () {
+        const that = this;
+        if (that.selectBachData.taskDefKey ==='task_prepare'){
+          // 瑙﹀彂琛ㄥ崟楠岃瘉-閲嶆柊鍚姩
+          this.$refs.form.validate(valid => {
+            if (valid) {
+              that.confirmLoading = true;
+              let url=this.url.approvalBatch;
+              let method = 'post';
+              let flowTaskVo = {}
+              flowTaskVo.comment =this.model.approveContent;
+              flowTaskVo.taskIds=that.selectBachData.taskIds
+              flowTaskVo.targetKey=that.selectBachData.taskDefKey
+              console.log("琛ㄥ崟鎻愪氦鏁版嵁",flowTaskVo)
+              httpAction(url,flowTaskVo,method).then((res)=>{
+                if(res.success){
+                  that.$message.success(res.message);
+                  that.valid = false
+                  //鍒锋柊琛ㄦ牸
+                  that.$emit('searchReset')
+                }else{
+                  that.$message.warning(res.message);
+                }
+              }).finally(() => {
+                that.confirmLoading = false;
+              })
+            }
+          })
+          //璺冲嚭鏂规硶
+          return false;
+        }else {
+          if (!that.model.status==null || that.model.status===undefined){
+            this.$message.warning('璇烽�夋嫨澶勭悊绫诲瀷锛�')
+            return false;
+          }
+        }
+        if (!that.model.approveContent==null || that.model.approveContent===undefined) {
+          this.$message.warning('璇疯緭鍏ュ鐞嗘剰瑙侊紒')
+          return false;
+        }
+        // 瑙﹀彂琛ㄥ崟楠岃瘉
+        this.$refs.form.validate(valid => {
+          if (valid) {
+            that.confirmLoading = true;
+            let url=this.url.approvalBatch
+            let method = 'post';
+            let handle =this.model.status === '1';
+            let flowTaskVo = {}
+            switch (that.selectBachData.taskDefKey){
+              case "task_approve":
+                flowTaskVo.ratify=handle;
+                break;
+              case "task_cut":
+                flowTaskVo.cut=handle;
+                break;
+              case "task_finalize":
+                flowTaskVo.stereotype=handle;
+                break;
+            }
+            if (that.selectBachData.taskDefKey ==='task_proofread'){
+              flowTaskVo.proofreadStatus =that.model.status;
+            }
+            flowTaskVo.comment =that.model.approveContent;
+            flowTaskVo.taskIds=that.selectBachData.taskIds
+            flowTaskVo.targetKey=that.selectBachData.taskDefKey
+            console.log("琛ㄥ崟鎻愪氦鏁版嵁",flowTaskVo)
+            httpAction(url,flowTaskVo,method).then((res)=>{
+              if(res.success){
+                that.$message.success(res.message);
+                that.valid = false
+                that.close();
+                //鍒锋柊琛ㄦ牸
+                that.$emit('ok')
+              }else{
+                that.$message.warning(res.message);
+              }
+            }).finally(() => {
+              that.confirmLoading = false;
+            })
+          }
+        })
+      },
+		}
+	}
+</script>
\ No newline at end of file
diff --git "a/src/views/flowable/workflow/dispatchFile/DispatchFileBachHandleStyle\043Drawer.vue" "b/src/views/flowable/workflow/dispatchFile/DispatchFileBachHandleStyle\043Drawer.vue"
new file mode 100644
index 0000000..c3bfc8a
--- /dev/null
+++ "b/src/views/flowable/workflow/dispatchFile/DispatchFileBachHandleStyle\043Drawer.vue"
@@ -0,0 +1,62 @@
+<template>
+  <j-modal
+    :title="title"
+    :width="width"
+    :visible="visible"
+    switchFullscreen
+    @ok="handleOk"
+    :okButtonProps="{ class:{'jee-hidden': disableSubmit} }"
+    @cancel="handleCancel"
+    cancelText="鍏抽棴">
+    <DispatchFileBachHandleForm ref="realForm" @ok="submitCallback" :disabled="disableSubmit" normal></DispatchFileBachHandleForm>
+  </j-modal>
+
+
+</template>
+<script>
+
+  import DispatchFileBachHandleForm from './DispatchFileBachHandleForm.vue'
+
+  export default {
+    name: 'DispatchFileBachHandleStyle',
+    components: {
+      DispatchFileBachHandleForm
+    },
+    data () {
+      return {
+        title:'',
+        width:800,
+        visible: false,
+        disableSubmit: false
+      }
+    },
+    methods: {
+      add () {
+        this.visible=true
+        this.$nextTick(()=>{
+          this.$refs.realForm.add();
+        })
+      },
+      edit (record) {
+        this.visible=true
+        this.$nextTick(()=>{
+          this.$refs.realForm.edit(record);
+        });
+      },
+      close () {
+        this.$emit('close');
+        this.visible = false;
+      },
+      submitCallback(){
+        this.$emit('ok');
+        this.visible = false;
+      },
+      handleOk () {
+        this.$refs.realForm.submitForm();
+      },
+      handleCancel () {
+        this.close()
+      }
+    }
+  }
+</script>
\ No newline at end of file

--
Gitblit v1.9.3