From 1550ea7fb0f98762062833a37f716ba459b986df Mon Sep 17 00:00:00 2001 From: lyh <liuyuanheng@xalxzn.com> Date: 星期五, 28 二月 2025 15:53:38 +0800 Subject: [PATCH] 工作流 代办已办 --- src/views/dnc/base/modules/ProductStructure/Process/ProcessModalForm.vue | 6 src/views/flowable/workflow/FlowManage.vue | 140 +++++ src/views/dnc/base/modules/ProductStructure/ProcessStep/ProcessStepInfo.vue | 2 src/views/flowable/workflow/FlowWorkTaskList.vue | 142 +++++ src/views/flowable/workflow/FlowLedger.vue | 229 ++++++++ src/views/flowable/workflow/FlowMyTaskToDo.vue | 299 ++++++++++ src/views/flowable/workflow/FlowNcZpi.vue | 414 ++++++++++++++ src/views/dnc/base/modules/ProductStructure/ProcessStep/ProcessStepModalForm.vue | 6 src/views/flowable/workflow/FlowCompleted.vue | 204 +++++++ src/views/flowable/workflow/FlowTodo.vue | 212 +++++++ src/assets/less/common.less | 12 11 files changed, 1,654 insertions(+), 12 deletions(-) diff --git a/src/assets/less/common.less b/src/assets/less/common.less index b27871b..4330ff3 100644 --- a/src/assets/less/common.less +++ b/src/assets/less/common.less @@ -58,4 +58,14 @@ } /**闅愯棌鏍峰紡-modal纭畾鎸夐挳 */ -.jee-hidden{display: none} \ No newline at end of file +.jee-hidden{display: none} + +.btxx > .ant-form-item > .ant-form-item-label label { + position: relative; +} +.btxx > .ant-form-item > .ant-form-item-label label::before{ + position: absolute; + content: "*"; + left: -8px; + color: #f5222d; +} \ No newline at end of file diff --git a/src/views/dnc/base/modules/ProductStructure/Process/ProcessModalForm.vue b/src/views/dnc/base/modules/ProductStructure/Process/ProcessModalForm.vue index c60ec92..1866bd5 100644 --- a/src/views/dnc/base/modules/ProductStructure/Process/ProcessModalForm.vue +++ b/src/views/dnc/base/modules/ProductStructure/Process/ProcessModalForm.vue @@ -17,11 +17,7 @@ <a-row> <a-col :span="24"> <a-form-model-item label="鍔犲伐璁惧缂栧彿" :labelCol="labelColLong" :wrapperCol="wrapperColLong"> - <a-select v-model="model.processingEquipmentCode" placeholder="璇烽�夋嫨鍔犲伐璁惧缂栧彿"> - <a-select-option v-for="item in allDeviceList" :key="item.deviceId"> - {{item.deviceId}} - </a-select-option> - </a-select> + <j-dict-select-tag v-model="model.processingEquipmentCode" placeholder="璇烽�夋嫨鍔犲伐璁惧缂栧彿" dictCode="mdc_equipment,equipment_id,equipment_id"/> </a-form-model-item> </a-col> </a-row> diff --git a/src/views/dnc/base/modules/ProductStructure/ProcessStep/ProcessStepInfo.vue b/src/views/dnc/base/modules/ProductStructure/ProcessStep/ProcessStepInfo.vue index d4649d5..0fb30cd 100644 --- a/src/views/dnc/base/modules/ProductStructure/ProcessStep/ProcessStepInfo.vue +++ b/src/views/dnc/base/modules/ProductStructure/ProcessStep/ProcessStepInfo.vue @@ -5,7 +5,7 @@ <a-descriptions-item label="宸ユ绫诲瀷">{{currentLevelDetails.stepType}}</a-descriptions-item> <a-descriptions-item label="鍔犲伐璁惧鍨嬪彿">{{currentLevelDetails.processingEquipmentModel}}</a-descriptions-item> <a-descriptions-item label="鍔犲伐璁惧绫诲瀷">{{currentLevelDetails.processingEquipmentOs}}</a-descriptions-item> - <a-descriptions-item label="鍔犲伐璁惧缂栧彿">{{currentLevelDetails.deviceNo}}</a-descriptions-item> + <a-descriptions-item label="鍔犲伐璁惧缂栧彿">{{currentLevelDetails.deviceNo_dictText}}</a-descriptions-item> <a-descriptions-item label="宸ヨ缂栧彿">{{currentLevelDetails.assembleStep}}</a-descriptions-item> <a-descriptions-item label="宸ヨ鍚嶇О " :span="2">{{currentLevelDetails.assembleName}}</a-descriptions-item> <a-descriptions-item label="鍒涘缓浜�">{{currentLevelDetails.createName}}</a-descriptions-item> diff --git a/src/views/dnc/base/modules/ProductStructure/ProcessStep/ProcessStepModalForm.vue b/src/views/dnc/base/modules/ProductStructure/ProcessStep/ProcessStepModalForm.vue index 7274b23..782759a 100644 --- a/src/views/dnc/base/modules/ProductStructure/ProcessStep/ProcessStepModalForm.vue +++ b/src/views/dnc/base/modules/ProductStructure/ProcessStep/ProcessStepModalForm.vue @@ -17,11 +17,7 @@ <a-row> <a-col :span="24"> <a-form-model-item label="鍔犲伐璁惧缂栧彿" :labelCol="labelColLong" :wrapperCol="wrapperColLong"> - <a-select v-model="model.deviceNo" placeholder="璇烽�夋嫨鍔犲伐璁惧缂栧彿"> - <a-select-option v-for="item in allDeviceList" :key="item.deviceId"> - {{item.deviceId}} - </a-select-option> - </a-select> + <j-dict-select-tag v-model="model.deviceNo" placeholder="璇烽�夋嫨鍔犲伐璁惧缂栧彿" dictCode="mdc_equipment,equipment_id,equipment_id"/> </a-form-model-item> </a-col> </a-row> diff --git a/src/views/flowable/workflow/FlowCompleted.vue b/src/views/flowable/workflow/FlowCompleted.vue new file mode 100644 index 0000000..2afd4c8 --- /dev/null +++ b/src/views/flowable/workflow/FlowCompleted.vue @@ -0,0 +1,204 @@ +<!-- + Description: 宸ヤ綔娴�-鎴戠殑宸插姙 List + Author: 浣滆�� liuyh + Date: 2025-02-27 +--> +<template> + <a-card :bordered="false"> + <!-- 鏌ヨ鍖哄煙 --> + <div class="table-page-search-wrapper"> + <a-form layout="inline" @keyup.enter.native="searchQuery"> + <a-row :gutter="24"> + <a-col :xl="6" :lg="7" :md="8" :sm="24"> + <a-form-item label="娴佺▼鍚嶇О"> + <a-input placeholder="璇疯緭鍏ユ祦绋嬪悕绉�" v-model="queryParam.deviceNo"></a-input> + </a-form-item> + </a-col> + <template v-if="toggleSearchStatus"> + <a-col :xl="6" :lg="7" :md="8" :sm="24"> + <a-form-item label="娴佺▼鍒嗙被"> + <j-dict-select-tag v-model="queryParam.departId" placeholder="璇烽�夋嫨娴佺▼鍒嗙被" dictCode="sys_department,depart_name,depart_id"/> + </a-form-item> + </a-col> + <a-col :xl="10" :lg="11" :md="12" :sm="24"> + <a-form-item label="鎿嶄綔鏃堕棿"> + <j-date :show-time="true" date-format="YYYY-MM-DD HH:mm:ss" placeholder="璇烽�夋嫨寮�濮嬫椂闂�" class="query-group-cust" v-model="queryParam.startTime"></j-date> + <span class="query-group-split-cust"></span> + <j-date :show-time="true" date-format="YYYY-MM-DD HH:mm:ss" placeholder="璇烽�夋嫨缁撴潫鏃堕棿" class="query-group-cust" v-model="queryParam.endTime"></j-date> + </a-form-item> + </a-col> + </template> + <a-col :xl="6" :lg="7" :md="8" :sm="24"> + <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons"> + <a-button type="primary" @click="searchQuery" icon="search">鏌ヨ</a-button> + <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">閲嶇疆</a-button> + <a @click="handleToggleSearch" style="margin-left: 8px">{{ toggleSearchStatus ? '鏀惰捣' : '灞曞紑' }}<a-icon :type="toggleSearchStatus ? 'up' : 'down'" /></a> + </span> + </a-col> + </a-row> + </a-form> + </div> + <!-- 鏌ヨ鍖哄煙-END --> + + <!-- table鍖哄煙-begin --> + <div> + + <a-table + ref="table" + size="middle" + :scroll="{x:true}" + bordered + rowKey="id" + :columns="columns" + :dataSource="dataSource" + :pagination="ipagination" + :loading="loading" + class="j-table-force-nowrap" + @change="handleTableChange"> + + <template slot="htmlSlot" slot-scope="text"> + <div v-html="text"></div> + </template> + <template slot="imgSlot" slot-scope="text"> + <span v-if="!text" style="font-size: 12px;font-style: italic;">鏃犲浘鐗�</span> + <img v-else :src="getImgView(text)" height="25px" alt="" style="max-width:80px;font-size: 12px;font-style: italic;"/> + </template> + <template slot="fileSlot" slot-scope="text"> + <span v-if="!text" style="font-size: 12px;font-style: italic;">鏃犳枃浠�</span> + <a-button + v-else + :ghost="true" + type="primary" + icon="download" + size="small" + @click="downloadFile(text)"> + 涓嬭浇 + </a-button> + </template> + + <span slot="action" slot-scope="text, record"> + <a @click="handelDetial(record,text)">璇︽儏</a> + </span> + + </a-table> + </div> + + <FlowNcZpi ref="modalFormApproval" :selectShenpiData="selectShenpiData"></FlowNcZpi> + + </a-card> +</template> + +<script> + +import '@/assets/less/TableExpand.less' +import { mixinDevice } from '@/utils/mixin' +import { JeecgListMixin } from '@/mixins/JeecgListMixin' +import JDictSelectTag from '@/components/dict/JDictSelectTag.vue' +import FlowNcZpi from '@views/flowable/workflow/FlowNcZpi.vue' + +export default { + name: 'NcDeviceCharactersList', + mixins:[JeecgListMixin, mixinDevice], + components: { + FlowNcZpi, + JDictSelectTag, + }, + data () { + return { + description: '璁惧鐗规畩瀛楃绠$悊椤甸潰', + // 琛ㄥご + columns: [ + { + title: '搴忓彿', + dataIndex: '', + key:'rowIndex', + width:200, + align:"center", + customRender:function (t,r,index) { + return parseInt(index)+1; + } + }, + { + title: '娴佺▼鍚嶇О', + align: "center", + dataIndex: 'procDefName', + width: 200, + }, + { + title: '娴佺▼涓氬姟绠�瑕佹弿杩�', + align: "center", + dataIndex: 'description', + width:300 + }, + { + title: '娴佺▼鍙戣捣浜哄悕绉�', + align: "center", + dataIndex: 'startUserName', + width: 250, + }, + { + title: '浠诲姟鍚嶇О', + align: "center", + dataIndex: 'taskName', + width:250 + }, + { + title: '鎿嶄綔鏃堕棿', + align: "center", + dataIndex: 'createTime', + width:300 + }, + { + title: '鎿嶄綔', + dataIndex: 'action', + scopedSlots: { customRender: 'action' }, + align: 'center', + width: 200, + fixed: 'right' + } + ], + url: { + list: "/nc/assign/flow/finishedList", + }, + dictOptions:{}, + selectShenpiData: {}, + } + }, + created() { + }, + computed: { + importExcelUrl: function(){ + return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`; + }, + }, + methods: { + handelDetial(item, index) { + console.log('鐐瑰嚮浜嗚鎯�') + console.log('item----->', item) + console.log('index----->', index) + let approcesstype = this.splitAprocessType(item.description) + console.log('approcesstype--->', approcesstype) + switch (approcesstype) { + case '鎸囨淳NC鏂囨。鍒拌澶囨祦绋�': + this.handDrDetial(item) + break + default: + alert('娌℃壘鍒拌瀹℃壒') + } + }, + splitAprocessType(title) { + let parts = title.split('锛�') // 娉ㄦ剰鍐掑彿鏄叏瑙掑瓧绗︼紝浣跨敤瀵瑰簲鐨勫瓧杩涜鍒嗗壊 + let result = parts[0] + return result + }, + handDrDetial(item) { + this.selectShenpiData = item + this.$refs.modalFormApproval.clearTableSource() + this.$refs.modalFormApproval.getAllApproveData(item) + }, + } +} +</script> +<style scoped> +@import '~@assets/less/common.less'; +</style> \ No newline at end of file diff --git a/src/views/flowable/workflow/FlowLedger.vue b/src/views/flowable/workflow/FlowLedger.vue new file mode 100644 index 0000000..eeaa7ca --- /dev/null +++ b/src/views/flowable/workflow/FlowLedger.vue @@ -0,0 +1,229 @@ +<!-- + Description: 宸ヤ綔娴�-鎬诲彴璐� List + Author: 浣滆�� liuyh + Date: 2025-02-27 +--> +<template> + <a-card :bordered="false"> + <!-- 鏌ヨ鍖哄煙 --> + <div class="table-page-search-wrapper"> + <a-form layout="inline" @keyup.enter.native="searchQuery"> + <a-row :gutter="24"> + <a-col :xl="6" :lg="7" :md="8" :sm="24"> + <a-form-item label="璁惧缂栧彿"> + <a-input placeholder="璇疯緭鍏ヨ澶囩紪鍙�" v-model="queryParam.deviceNo"></a-input> + </a-form-item> + </a-col> + <a-col :xl="6" :lg="7" :md="8" :sm="24"> + <a-form-item label="鐗规畩瀛楃"> + <a-input placeholder="璇疯緭鍏ョ壒娈婂瓧绗�" v-model="queryParam.characters"></a-input> + </a-form-item> + </a-col> + <template v-if="toggleSearchStatus"> + <a-col :xl="6" :lg="7" :md="8" :sm="24"> + <a-form-item label="閮ㄩ棬鍒嗙粍"> + <j-dict-select-tag v-model="queryParam.departId" placeholder="璇烽�夋嫨閮ㄩ棬鍒嗙粍" dictCode="sys_department,depart_name,depart_id"/> + </a-form-item> + </a-col> + <a-col :xl="6" :lg="7" :md="8" :sm="24"> + <a-form-item label="鏁版帶绯荤粺"> + <a-input placeholder="璇疯緭鍏ユ暟鎺х郴缁�" v-model="queryParam.controlSystem"></a-input> + </a-form-item> + </a-col> + <a-col :xl="10" :lg="11" :md="12" :sm="24"> + <a-form-item label="鎿嶄綔鏃堕棿"> + <j-date :show-time="true" date-format="YYYY-MM-DD HH:mm:ss" placeholder="璇烽�夋嫨寮�濮嬫椂闂�" class="query-group-cust" v-model="queryParam.startTime"></j-date> + <span class="query-group-split-cust"></span> + <j-date :show-time="true" date-format="YYYY-MM-DD HH:mm:ss" placeholder="璇烽�夋嫨缁撴潫鏃堕棿" class="query-group-cust" v-model="queryParam.endTime"></j-date> + </a-form-item> + </a-col> + </template> + <a-col :xl="6" :lg="7" :md="8" :sm="24"> + <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons"> + <a-button type="primary" @click="searchQuery" icon="search">鏌ヨ</a-button> + <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">閲嶇疆</a-button> + <a @click="handleToggleSearch" style="margin-left: 8px">{{ toggleSearchStatus ? '鏀惰捣' : '灞曞紑' }}<a-icon :type="toggleSearchStatus ? 'up' : 'down'" /></a> + </span> + </a-col> + </a-row> + </a-form> + </div> + <!-- 鏌ヨ鍖哄煙-END --> + + <!-- 鎿嶄綔鎸夐挳鍖哄煙 --> + + <!-- table鍖哄煙-begin --> + <div> + + <a-table + ref="table" + size="middle" + :scroll="{x:true}" + bordered + rowKey="id" + :columns="columns" + :dataSource="dataSource" + :pagination="ipagination" + :loading="loading" + class="j-table-force-nowrap" + @change="handleTableChange"> + + <template slot="htmlSlot" slot-scope="text"> + <div v-html="text"></div> + </template> + <template slot="imgSlot" slot-scope="text"> + <span v-if="!text" style="font-size: 12px;font-style: italic;">鏃犲浘鐗�</span> + <img v-else :src="getImgView(text)" height="25px" alt="" style="max-width:80px;font-size: 12px;font-style: italic;"/> + </template> + <template slot="fileSlot" slot-scope="text"> + <span v-if="!text" style="font-size: 12px;font-style: italic;">鏃犳枃浠�</span> + <a-button + v-else + :ghost="true" + type="primary" + icon="download" + size="small" + @click="downloadFile(text)"> + 涓嬭浇 + </a-button> + </template> + + <span slot="action" slot-scope="text, record"> + <a @click="handleEdit(record)">缂栬緫</a> + <a-divider type="vertical" /> + <a-dropdown> + <a class="ant-dropdown-link">鏇村 + <a-icon type="down" /> + </a> + <a-menu slot="overlay"> + <a-menu-item> + <a @click="handleDetail(record)">璇︽儏</a> + </a-menu-item> + <a-menu-item> + <a-popconfirm + title="纭畾鍒犻櫎鍚�?" + @confirm="() => handleDelete(record.id)" + > + <a>鍒犻櫎</a> + </a-popconfirm> + </a-menu-item> + </a-menu> + </a-dropdown> + </span> + </a-table> + </div> + + + + </a-card> +</template> + +<script> + +import '@/assets/less/TableExpand.less' +import { mixinDevice } from '@/utils/mixin' +import { JeecgListMixin } from '@/mixins/JeecgListMixin' +import JDictSelectTag from '@/components/dict/JDictSelectTag.vue' + +export default { + name: 'NcDeviceCharactersList', + mixins:[JeecgListMixin, mixinDevice], + components: { + JDictSelectTag, + }, + data () { + return { + description: '璁惧鐗规畩瀛楃绠$悊椤甸潰', + // 琛ㄥご + columns: [ + { + title: '搴忓彿', + dataIndex: '', + key:'rowIndex', + width:200, + align:"center", + customRender:function (t,r,index) { + return parseInt(index)+1; + } + }, + { + title:'娴佺▼鍚嶇О', + align:"center", + dataIndex: 'flowName' + }, + { + title:'娴佺▼涓氬姟绠�瑕佹弿杩�', + align:"center", + dataIndex: 'title' + }, + { + title:'鐢宠浜�', + align:"center", + dataIndex: 'proposer_dictText' + }, + { + title:'娴佺▼鐘舵�佽鏄�', + align:"center", + dataIndex: 'actStatus' + }, + { + title:'褰撳墠鐨勪换鍔d', + align:"center", + dataIndex: 'taskId' + }, + { + title:'褰撳墠鐨勮妭鐐�', + align:"center", + dataIndex: 'taskName' + }, + { + title:'娴佺▼寮�濮嬫椂闂�', + align:"center", + dataIndex: 'startTime' + }, + { + title:'娴佺▼缁撴潫鏃堕棿', + align:"center", + dataIndex: 'endTime' + }, + { + title:'浠诲姟浜�', + align:"center", + dataIndex: 'todoUsers_dictText' + }, + { + title:'澶勭悊杩囩殑浜�', + align:"center", + dataIndex: 'doneUsers_dictText' + }, + { + title: '鎿嶄綔', + dataIndex: 'action', + scopedSlots: { customRender: 'action' }, + align: 'center', + width: 200, + fixed: 'right' + } + ], + url: { + list: "nc/assign/flow/list", + }, + dictOptions:{}, + } + }, + created() { + }, + computed: { + importExcelUrl: function(){ + return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`; + }, + }, + methods: { + initDictConfig(){ + } + } +} +</script> +<style scoped> +@import '~@assets/less/common.less'; +</style> \ No newline at end of file diff --git a/src/views/flowable/workflow/FlowManage.vue b/src/views/flowable/workflow/FlowManage.vue new file mode 100644 index 0000000..57fc669 --- /dev/null +++ b/src/views/flowable/workflow/FlowManage.vue @@ -0,0 +1,140 @@ +<template> + <a-card :bordered="false"> + <div> + <a-table + ref="table" + size="middle" + :scroll="{x:true}" + bordered + rowKey="id" + :columns="columns" + :dataSource="dataSource" + :pagination="ipagination" + :loading="loading" + class="j-table-force-nowrap" + > + </a-table> + </div> + </a-card> +</template> + +<script> + + import '@/assets/less/TableExpand.less' + import { mixinDevice } from '@/utils/mixin' + import { JeecgListMixin } from '@/mixins/JeecgListMixin' + + export default { + name: 'FlowManage', + mixins:[JeecgListMixin, mixinDevice], + components: { + + }, + data () { + return { + toolsVisable:true, + description: '娴佺▼绠$悊椤甸潰', + // 琛ㄥご + columns: [ + { + title: '#', + dataIndex: '', + key:'rowIndex', + width:60, + align:"center", + customRender:function (t,r,index) { + return parseInt(index)+1; + } + }, + { + title:'娴佺▼瀹氫箟key', + align:"center", + dataIndex: 'processDefinitionKey' + }, + { + title:'娴佺▼瀹氫箟id', + align:"center", + dataIndex: 'processDefinitionId' + }, + { + title:'娴佺▼涓氬姟绠�瑕佹弿杩�', + align:"center", + dataIndex: 'title' + }, + { + title:'涓氬姟琛╥d', + align:"center", + dataIndex: 'dataId' + }, + { + title:'鐢宠浜�', + align:"center", + dataIndex: 'proposer' + }, + { + title:'娴佺▼鐘舵�佽鏄�', + align:"center", + dataIndex: 'actStatus' + }, + { + title:'褰撳墠鐨勪换鍔d', + align:"center", + dataIndex: 'taskId' + }, + { + title:'褰撳墠鐨勮妭鐐�', + align:"center", + dataIndex: 'taskName' + }, + { + title:'褰撳墠鐨勮妭鐐笽d', + align:"center", + dataIndex: 'taskNameId' + }, + { + title:'浠诲姟浜�', + align:"center", + dataIndex: 'todoUsers' + }, + { + title:'澶勭悊杩囩殑浜�', + align:"center", + dataIndex: 'doneUsers' + }, + ], + url: { + list: "/nc/assign/flow/list", + + }, + dictOptions:{}, + superFieldList:[], + workflowSource:[] + } + }, + created() { + this.getSuperFieldList(); + }, + computed: { + }, + methods: { + getSuperFieldList(){ + let fieldList=[]; + fieldList.push({type:'string',value:'processDefinitionKey',text:'娴佺▼瀹氫箟key',dictCode:''}) + fieldList.push({type:'string',value:'processDefinitionId',text:'娴佺▼瀹氫箟id',dictCode:''}) + fieldList.push({type:'string',value:'title',text:'娴佺▼涓氬姟绠�瑕佹弿杩�',dictCode:''}) + fieldList.push({type:'string',value:'dataId',text:'涓氬姟琛╥d',dictCode:''}) + fieldList.push({type:'string',value:'proposer',text:'鐢宠浜�',dictCode:''}) + fieldList.push({type:'string',value:'actStatus',text:'娴佺▼鐘舵�佽鏄�',dictCode:''}) + fieldList.push({type:'string',value:'taskId',text:'褰撳墠鐨勪换鍔d',dictCode:''}) + fieldList.push({type:'string',value:'taskName',text:'褰撳墠鐨勮妭鐐�',dictCode:'unit_all'}) + fieldList.push({type:'string',value:'taskNameId',text:'褰撳墠鐨勮妭鐐笽d',dictCode:''}) + fieldList.push({type:'string',value:'todoUsers',text:'浠诲姟浜�',dictCode:''}) + fieldList.push({type:'string',value:'doneUsers',text:'澶勭悊杩囩殑浜�',dictCode:''}) + this.superFieldList = fieldList + } + } + } +</script> +<style scoped> + @import '~@assets/less/common.less'; +</style> \ No newline at end of file diff --git a/src/views/flowable/workflow/FlowMyTaskToDo.vue b/src/views/flowable/workflow/FlowMyTaskToDo.vue new file mode 100644 index 0000000..a76b002 --- /dev/null +++ b/src/views/flowable/workflow/FlowMyTaskToDo.vue @@ -0,0 +1,299 @@ +<template> + <a-card> + <a-list + class="demo-loadmore-list" + :loading="loading" + item-layout="horizontal" + :data-source="carddata" + > + + <a-list-item slot="renderItem" slot-scope="item, index"> + <a slot="actions" @click="handelDetial(item,index)">鏌ョ湅璇︽儏</a> + <a-list-item-meta :description='item.createTime'> + <a slot="title">{{ item.title }}</a> + <a-avatar + slot="avatar" + src="https://zos.alipayobjects.com/rmsportal/ODTLcjxAfvqbxHnVXCYX.png" + /> + </a-list-item-meta> + <div><b>{{ item.name }}</b></div> + </a-list-item> + </a-list> + + + <FlowNcZpi ref="modalFormApproval" :selectShenpiData="selectShenpiData"></FlowNcZpi> + </a-card> +</template> +<style> +.demo-loadmore-list { + min-height: 350px; +} +</style> + +<script> +import { getAction, deleteAction, postAction } from '@/api/manage' +import '@/assets/less/TableExpand.less' +import { mixinDevice } from '@/utils/mixin' +import store from '@/store' +import FlowNcZpi from './FlowNcZpi.vue' + + +export default { + name: 'FlowMyTaskToDo', + mixins: [mixinDevice], + components: { + FlowNcZpi + }, + data() { + return { + jsonArr: {}, + infos: [], + selectShenpiData: {}, + carddata: [], + toTaskSelfData: [], + toolsVisable: true, + description: '瀹℃壒寰呭姙椤甸潰', + ipagination: { + current: 1, + pageSize: 10, + pageSizeOptions: ['10', '20', '30'], + showTotal: (total, range) => { + return range[0] + '-' + range[1] + ' 鍏�' + total + '鏉�' + }, + showQuickJumper: true, + showSizeChanger: true, + total: 0 + }, + loading: false, + // 琛ㄥご + selectedRowKeys: [], + url: { + toTaskBySelfList: '/nc/assign/flow/toTaskBySelf', + complete: '/plmebomtechnicalordercreatebomapproval/plmEbomTechnicalorderCreatebomapproval/completeByDateId', + reject: '/plmebomtechnicalordercreatebomapproval/plmEbomTechnicalorderCreatebomapproval/rejectTask', + pdfSign: '/plmebomtechnicalordercreatebomapproval/plmEbomTechnicalorderCreatebomapproval/pdfSign', + queryApproveJiJiaByDataId: '/plmmbomprocedurespecification/plmMbomProcedurespecification/queryApproveJiJiaByDataId', + queryApproveLsByDataId: '/plmbomlsgy/plmMbomLsgy/queryApproveLsByDataId', + queryApproveFxByDataId: '/plmmbomfxgy/plmMbomFxgy/queryApproveFxByDataId', + queryByNumber: '/plmebompartmaster/plmEbomPartmaster/queryByNumber', + getCaxaUrlJJ: '/plmmbomjijiagyapproval/plmMbomJijiagyApproval/getCaxaUrlJeecg', + getCaxaUrlLS: '/plmbomlsgy/plmMbomLsgy/getCaxaUrlJeecg', + getCaxaUrlFx: '/plmmbomfxgy/plmMbomFxgy/getCaxaUrlJeecg', + queryApproveJiJiaById: '/plmmbomjijiagyapproval/plmMbomJijiagyApproval/queryApproveJiJiaById', + signCxpFile: '/plmmbomjijiagyapproval/plmMbomJijiagyApproval/signCxpFile', + queryApproveLsById: '/plmmbomapprovallsgy/plmMbomApprovalLsgy/queryApproveDataById', + queryApproveFxById: '/plmmbomapprovalfxgy/plmMbomApprovalFxgy/queryApproveDataById', + queryJjDataByJjggAprovalId: '/plmmbomprocedurespecification/plmMbomProcedurespecification/queryJjDataByJjggAprovalId', + queryJjggByApprovalId: '/plmmbomjjgg/plmMbomJjgg/queryJjggByApprovalId', + getCaxaUrlJjgg:'/plmmbomjjgg/plmMbomJjgg/getCaxaUrlJeecg', + queryJjggApprovalByDataId:'/plmmbomjjggapproval/plmMbomJjggApproval/queryById' + }, + dictOptions: {}, + superFieldList: [], + workflowSource: [] + } + }, + created() { + this.toTaskBySelf() + this.getSuperFieldList() + }, + computed: {}, + methods: { + toTaskBySelf() { + let usercode = store.getters.userInfo.username + let param = { + 'currentUserId': usercode + } + console.log('usercode--->', usercode) + + getAction(this.url.toTaskBySelfList, param).then((res => { + if (res.success) { + console.log('res---->', res) + console.log('resresult---->', res.result) + this.carddata = res.result + } + })) + console.log('this.toTaskSelfData---->', this.toTaskSelfData) + }, + handelDetial(item, index) { + console.log('鐐瑰嚮浜嗚鎯�') + console.log('item----->', item) + console.log('index----->', index) + let approcesstype = this.splitAprocessType(item.title) + console.log('approcesstype--->', approcesstype) + switch (approcesstype) { + case '鎸囨淳NC鏂囨。鍒拌澶囨祦绋�': + this.handDrDetial(item) + break + default: + alert('娌℃壘鍒拌瀹℃壒') + } + }, + handDrDetial(item) { + this.selectShenpiData = item + this.$refs.modalFormApproval.clearTableSource() + this.$refs.modalFormApproval.getAllApproveData(item) + }, + handCheckApprove(record,approcesstype){ + if(approcesstype === '鎸囨淳NC鏂囨。鍒拌澶囨祦绋�'){ + + }else if(approcesstype === '鏈哄姞瀹℃壒娴佺▼'){ + + }else if(approcesstype === '涓存椂宸ヨ壓瀹℃壒娴佺▼'){ + + }else if(approcesstype === '杩斾慨宸ヨ壓瀹℃壒娴佺▼'){ + + }else if(approcesstype === '鏈哄姞鏇存敼鍗曞鎵规祦绋�'){ + + } + }, + handleCommonAgree(record) { + console.log('record------>', record) + let flowTaskVo = {} + flowTaskVo.dataId = record.dataId + flowTaskVo.taskId = record.id + flowTaskVo.userId = record.assignee + flowTaskVo.instanceId = record.procInstId + flowTaskVo.targetKey = record.taskDefKey + flowTaskVo.values = record.variables + flowTaskVo.assignee = record.assignee + postAction(this.url.complete, flowTaskVo).then((res => { + if (res.success) { + this.$message.success(res.result) + } else { + this.$message.warning(res.result) + } + })) + }, + handleZhuanJiao(record) { + let approcesstype = this.splitAprocessType(record.title) + this.handleCommonZhuanJiao(record) + }, + handleCommonZhuanJiao(record) { + this.$refs.Flowzhuanjiao.openThis() + this.$refs.Flowzhuanjiao.approveData = record + }, + handleJjggpdfSign(record){ + let parm = { + 'id': record.dataId + } + console.log("parm===>",parm) + getAction(this.url.queryJjggApprovalByDataId,parm).then(res=>{ + console.log("resres--->",res.result) + let infos = {} + let signInfos = [] + let signInfo = { + 'proc_bz': res.result.organization, + 'proc_bz_date': res.result.writeTime, + // 'proc_jd': res.result.proofread, + // 'proc_jd_date': res.result.proofreadTime, + 'proc_sh': res.result.examine, + 'proc_sh_date': res.result.examineTime, + 'proc_pz': res.result.ratify, + 'proc_pz_date': res.result.approveTime + } + signInfos.push(signInfo) + let type = { + 'type': 'jjggd' + } + infos.signInfos = signInfos + infos.type = type + let parm2 = { + 'dataId': record.dataId + } + getAction(this.url.queryJjggByApprovalId,parm2).then(res2=>{ + let parm3 = { + 'signInfos': JSON.stringify(signInfos), + 'type': 'jjggd', + 'cxpFile': res2.result.filecxp, + 'number': res2.result.number + } + console.log('parm3---->', parm3) + console.log('parm3---->', res2.result) + getAction(this.url.signCxpFile, parm3).then(res3 => { + console.log('res3---->', res3) + this.$message.success('绛惧悕瀹屾垚') + }) + }) + }) + }, + handeditFxCapp(item) { + console.log('item----->', item) + let parm1 = { + 'dataId': item.dataId + } + getAction(this.url.queryApproveFxByDataId, parm1).then(res => { + if (res.success) { + let fileNo = this.splitAprocessNumber(item.title) + this.jsonArr.userName = item.assignee + this.jsonArr.partNumber = res.result.partnumber + this.jsonArr.partName = res.result.partname + this.jsonArr.drawingVision = res.result.editiondrawing + this.jsonArr.fileNo = fileNo + this.jsonArr.id = res.result.id + let parm2 = { + 'number': res.result.partnumber + } + this.jsonArr.number = res.result.number + this.jsonArr.cxpFilePath = res.result.attract + // this.jsonArr.cxpFilePath = '/pdmCapp/鑸槦鏈哄姞宸ヨ壓瑙勭▼.cxp' + getAction(this.url.queryByNumber, parm2).then(res2 => { + this.jsonArr.partType = res2.result.partType + this.infos.push(this.jsonArr) + let infosJsonNew = JSON.stringify(this.infos) + console.log('infosJson--->', infosJsonNew) + let parm3 = {} + parm3.infosJson = infosJsonNew + console.log('infosJsonNew---->', infosJsonNew) + getAction(this.url.getCaxaUrlFx, parm3).then(res => { + console.log('鎵ц浜嗗彂閫�') + if (res.status == 'SUCCESS') { + console.log('resUrl------>', res) + let beforeUrl = res.msg + let afterBefore = this.jiexieUrl(beforeUrl) + console.log('afterBefore---->', afterBefore) + window.open(afterBefore, '_blank') + } + }).finally( + this.jsonArr = {}, + this.infos = [] + ) + }) + } + }) + }, + jiexieUrl(beforeUrl) { + let afterBefore = beforeUrl.replaceAll('%3A', ':').replaceAll('%2F', '/').replaceAll('%23', '#').replaceAll('%7C', '|').replaceAll('%5C', '\\\\') + return afterBefore + }, + getSuperFieldList() { + let fieldList = [] + fieldList.push({ type: 'string', value: 'id', text: '浠诲姟ID', dictCode: '' }) + fieldList.push({ type: 'string', value: 'rev', text: '鐗堟湰鍙�', dictCode: '' }) + fieldList.push({ type: 'string', value: 'executionId', text: '鎵ц瀹炰緥ID', dictCode: '' }) + fieldList.push({ type: 'string', value: 'procInstId', text: '娴佺▼瀹炰緥ID', dictCode: '' }) + fieldList.push({ type: 'string', value: 'procDefId', text: '娴佺▼瀹氫箟ID', dictCode: '' }) + fieldList.push({ type: 'string', value: 'name', text: '浠诲姟鍚嶇О', dictCode: '' }) + fieldList.push({ type: 'string', value: 'taskDefKey', text: '浠诲姟瀹氫箟Key', dictCode: '' }) + fieldList.push({ type: 'string', value: 'assignee', text: '鍔炵悊浜�', dictCode: 'unit_all' }) + fieldList.push({ type: 'string', value: 'priority', text: '浼樺厛绾�', dictCode: '' }) + fieldList.push({ type: 'string', value: 'createTime', text: '浠诲姟鍒涘缓鏃堕棿', dictCode: '' }) + fieldList.push({ type: 'string', value: 'suspensionState', text: '鏆傚仠鐘舵��', dictCode: '' }) + this.superFieldList = fieldList + }, + splitAprocessType(title) { + let parts = title.split('锛�') // 娉ㄦ剰鍐掑彿鏄叏瑙掑瓧绗︼紝浣跨敤瀵瑰簲鐨勫瓧杩涜鍒嗗壊 + let result = parts[0] + return result + }, + splitAprocessNumber(title) { + let parts = title.split('锛�') // 娉ㄦ剰鍐掑彿鏄叏瑙掑瓧绗︼紝浣跨敤瀵瑰簲鐨勫瓧绗﹁繘琛屽垎鍓� + let result = parts[1] + return result + } + } +} +</script> +<style scoped> +@import '~@assets/less/common.less'; +</style> \ No newline at end of file diff --git a/src/views/flowable/workflow/FlowNcZpi.vue b/src/views/flowable/workflow/FlowNcZpi.vue new file mode 100644 index 0000000..50c3204 --- /dev/null +++ b/src/views/flowable/workflow/FlowNcZpi.vue @@ -0,0 +1,414 @@ +<template> + <a-modal + :title="title" + :width="width" + :visible="visible" + :footer="null" + @cancel="handCancel" + > + <a-card :bordered="false"> + <div> + <b>{{ selectShenpiData.title }}</b> + <br> + <br> + <a-tag color="blue"> + 澶勭悊浜� {{ selectShenpiData.assignee }} + </a-tag> + <a-tag color="blue"> + 鍒涘缓鏃堕棿 {{ selectShenpiData.createTime }} + </a-tag> + <br> + <br> + <button @click="fetchAndShowBmp" class="btn-custom">鎵撳紑娴佺▼鍥�</button> + <div v-if="imageSrc"> + <img :src="imageSrc" alt="Fetched Image" /> + </div> + <hr class="shallow-hr"> + </div> + <div> + <b>鎸囨淳璇︽儏</b> + <br> + <a-form :form='form'> + <a-spin :spinning="spinning"> + <a-tabs default-active-key='1' @change='callback'> + <a-tab-pane key='1' tab='鍩烘湰淇℃伅'> + <a-form-model ref='form' :model='tableRowRecord' :rules='validatorRules'> + <a-row> + <a-col :span='span'> + <a-form-model-item label='浜у搧鍚嶇О' :labelCol='labelCol' :wrapperCol='wrapperCol' prop='productName'> + <a-input :disabled='coldisabled' v-model='tableRowRecord.productName'></a-input> + </a-form-model-item> + </a-col> + <a-col :span='span'> + <a-form-model-item label='閮ㄤ欢鍚嶇О' :labelCol='labelCol' :wrapperCol='wrapperCol' prop='componentId'> + <a-input :disabled='coldisabled' v-model='tableRowRecord.componentName'></a-input> + </a-form-model-item> + </a-col> + </a-row> + <a-row> + <a-col :span='span'> + <a-form-model-item label='闆朵欢鍚嶇О' :labelCol='labelCol' :wrapperCol='wrapperCol' prop='partsName'> + <a-input :disabled='coldisabled' v-model='tableRowRecord.partsName'></a-input> + </a-form-model-item> + </a-col> + <a-col :span='span'> + <a-form-model-item label='宸ュ簭鍚嶇О' :labelCol='labelCol' :wrapperCol='wrapperCol' prop='processName'> + <a-input :disabled='coldisabled' v-model='tableRowRecord.processName'></a-input> + </a-form-model-item> + </a-col> + </a-row> + <a-row> + <a-col :span='span'> + <a-form-model-item label='宸ユ鍚嶇О' :labelCol='labelCol' :wrapperCol='wrapperCol' prop='stepName'> + <a-input :disabled='coldisabled' v-model='tableRowRecord.stepName'></a-input> + </a-form-model-item> + </a-col> + <a-col :span='span'> + <a-form-model-item label='璁惧鍚嶇О' :labelCol='labelCol' :wrapperCol='wrapperCol' prop='deviceName'> + <a-input :disabled='coldisabled' v-model='tableRowRecord.deviceName'></a-input> + </a-form-model-item> + </a-col> + </a-row> + <a-row> + <a-col :span='span'> + <a-form-model-item label='鏂囨。鍚嶇О' :labelCol='labelCol' :wrapperCol='wrapperCol' prop='docName'> + <a-input :disabled='coldisabled' v-model='tableRowRecord.docName'></a-input> + </a-form-model-item> + </a-col> + <a-col :span='span'> + <a-form-model-item label='鏂囨。鐗堟湰' :labelCol='labelCol' :wrapperCol='wrapperCol' prop='version'> + <a-input :disabled='coldisabled' v-model='tableRowRecord.version'></a-input> + </a-form-model-item> + </a-col> + </a-row> + </a-form-model> + </a-tab-pane> + <a-tab-pane key='2' tab='娴佺▼鑺傜偣'> + <a-card> + <a-timeline style="padding:0 1% 0 12%" > + <a-timeline-item color='white' v-for="(item,index1) in hitaskDataSource" :key="index1"> + <div class="bottom"> + <p>寮�濮嬫椂闂达細{{item.startTime}}</p> + <p>缁撴潫鏃堕棿锛歿{item.endTime}}</p> + <p>澶勭悊浜猴細{{item.assignee}}</p> + <p>鍔炵悊绫诲瀷锛歿{item.bllx_dictText}}</p> + <p>澶勭悊鎰忚锛歿{item.cause}}</p> + <div class="left_qiu"><span>{{item.name}}</span></div> + </div> + </a-timeline-item> + </a-timeline> + </a-card> + </a-tab-pane> + </a-tabs> + </a-spin> + </a-form> + </div> + <div> + <hr class="shallow-hr"> + <br> + <b>瀹℃壒璇︽儏</b> + <br> + <a-form-model ref="form" :model="approveData" :rules="validatorRules" slot="detail"> + <a-row> + <a-col ::span='span'> + <a-form-model-item label="鐢宠浜�" :labelCol="labelCol" :wrapperCol="wrapperCol" prop='applyUser'> + <a-input :disabled='coldisabled' v-model='tableRowRecord.applyUser'></a-input> + </a-form-model-item > + </a-col> + <a-col ::span='span'> + <a-form-model-item label="鐢宠鍘熷洜" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="applyReason"> + <a-textarea :disabled='coldisabled' v-model="tableRowRecord.applyReason" rows="4" /> + </a-form-model-item > + </a-col> + <a-col ::span='span'> + <a-form-model-item label="鐢宠鏃堕棿" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="applyTime"> + <a-input :disabled='coldisabled' v-model='tableRowRecord.applyTime'></a-input> + </a-form-model-item > + </a-col> + <a-col :span="24"> + <a-form-item label="瀵嗙骇涓�" :labelCol="labelCol" :wrapperCol="wrapperCol"> + <j-dict-select-tag type='list' v-model='assignFileStream.secretLevel' dictCode='dnc_secret_level' placeholder="璇烽�夋嫨瀵嗙骇" /> + </a-form-item> + </a-col> + <a-col :span="24" class="btxx"> + <a-form-item label="瀹℃壒鐘舵��" :labelCol="labelCol" :wrapperCol="wrapperCol"> + <j-dict-select-tag type='list' v-model='assignFileStream.status' dictCode='dnc_assign_stream_status' placeholder="璇烽�夋嫨瀹℃壒鐘舵��" /> + </a-form-item> + </a-col> + <a-col :span="24" class="btxx"> + <a-form-model-item label="瀹℃壒鎰忚" :labelCol="labelCol" :wrapperCol="wrapperCol"> + <a-textarea v-model="assignFileStream.approveContent" rows="4" placeholder="璇疯緭鍏ュ鎵规剰瑙�"/> + </a-form-model-item > + </a-col> + </a-row> + <div class="table-operator" style="text-align: right;"> + <a-button @click="handleQueXiaoTask" type="primary" icon="close">鍙栨秷</a-button> + <a-button @click="submitForm">鎻� 浜�</a-button> + </div> + </a-form-model> + </div> + </a-card> + + + </a-modal> +</template> + +<script> + +import '@/assets/less/TableExpand.less' +import { mixinDevice } from '@/utils/mixin' +import { getAction, deleteAction, postAction, downFile, httpAction } from '@/api/manage' +export default { + name: 'FlowShenPi', + mixins: [mixinDevice], + props: { + selectShenpiData: { + type: Object, + required: true + } + }, + + data() { + return { + form: this.$form.createForm(this), + span: 12, + span1: 8, + coldisabled: true, + spinning: false, + tableRowRecord: {}, + assignFileStream:{}, + tableDataSource: [], + usageDataSource: [], + hitaskDataSource:[], + bomForm: {}, + approveContent:"", + imageSrc: null, + drawerVisible: true, + labelCol: { + xs: { span: 24 }, + sm: { span: 5 } + }, + wrapperCol: { + xs: { span: 30 }, + sm: { span: 16 } + }, + validatorRules: { + version: { + rules: [ + { required: true, message: '璇疯緭鍏ユ枃妗g増鏈�!'}, + ] + }, + applyUser: { + rules: [ + { required: true, message: '璇烽�夋嫨鐢宠浜�!'}, + ] + }, + approveContent: { + rules: [ + { required: true, message: '璇疯緭鍏ュ鎵规剰瑙�!'}, + ] + }, + docName: { + rules: [ + { required: true, message: '璇疯緭鍏ユ枃妗e悕绉�!'}, + ] + }, + status: { + rules: [ + { required: true, message: '璇烽�夋嫨瀹℃壒鐘舵��!'}, + ] + }, + }, + approveData: {}, + flowData: {}, + title: '瀹℃壒椤甸潰', + width: 1000, + visible: false, + // 琛ㄥご + url: { + queryBomDataById: '/nc/activit/selectVoById', + diagramView: '/nc/assign/flow/diagramView', + queryHisTaskList:'/nc/assign/flow/queryHisTaskList', + approve:"/nc/activit/assign/file/approve", + }, + dictOptions: {}, + superFieldList: [], + workflowSource: [] + } + }, + created() { + }, + computed: {}, + methods: { + callback() { + }, + handCancel() { + this.visible = false + }, + clearTableSource() { + this.tableDataSource = [] + this.usageDataSource = [] + }, + fetchAndShowBmp() { + console.log('flowData----->', this.flowData) + try { + let parm = { + taskId: this.flowData.id + } + downFile(this.url.diagramView,parm,'get').then((res=>{ + console.log('Pica------>',res) + const urlObject = window.URL.createObjectURL(new Blob([res])) + this.imageSrc = urlObject + })) + } catch (error) { + console.error('Error fetching image blob:', error) + alert('鏃犳硶鍔犺浇鍥剧墖锛岃绋嶅悗鍐嶈瘯銆�') + } + }, + handleQueXiaoTask(){ + this.visible = false + this.routeReload() + }, + submitForm () { + const that = this; + if (!that.assignFileStream.status==null || that.assignFileStream.status===undefined){ + this.$message.warning('璇烽�夋嫨瀹℃壒鐘舵�侊紒') + return false; + } + if (!that.assignFileStream.approveContent==null || that.assignFileStream.approveContent===undefined) { + this.$message.warning('璇疯緭鍏ュ鎵规剰瑙侊紒') + return false; + } + // 瑙﹀彂琛ㄥ崟楠岃瘉 + this.form.validateFields((err, values) => { + if (!err) { + that.confirmLoading = true; + let url=this.url.approve + let method = 'post'; + let flowTaskVo = {} + flowTaskVo.status=that.assignFileStream.status; + flowTaskVo.approveContent =that.assignFileStream.approveContent; + flowTaskVo.comment =that.assignFileStream.approveContent; + flowTaskVo.secretLevel = that.assignFileStream.secretLevel; + flowTaskVo.dataId = this.selectShenpiData.dataId + flowTaskVo.taskId = this.selectShenpiData.id + flowTaskVo.userId = this.selectShenpiData.assignee + flowTaskVo.instanceId = this.selectShenpiData.procInstId + flowTaskVo.targetKey = this.selectShenpiData.taskDefKey + flowTaskVo.values = this.selectShenpiData.variables + flowTaskVo.assignee = this.selectShenpiData.assignee + flowTaskVo.secretLevel = that.assignFileStream.secretLevel; + console.log("琛ㄥ崟鎻愪氦鏁版嵁",flowTaskVo) + httpAction(url,flowTaskVo,method).then((res)=>{ + if(res.success){ + that.$message.success(res.message); + that.$emit('ok'); + }else{ + that.$message.warning(res.message); + } + }).finally(() => { + that.confirmLoading = false; + }) + } + + }) + }, + getAllApproveData(item) { + console.log('selectShenpiData----->', this.selectShenpiData) + this.flowData = item + let param = { + 'id': item.dataId + } + let parmhis={ + 'drapprovedataId': item.dataId + } + getAction(this.url.queryHisTaskList,parmhis).then(res=>{ + this.hitaskDataSource=res.result + getAction(this.url.queryBomDataById, param).then((res => { + if (res.success) { + this.tableRowRecord = res.result + console.log('this.tableRowRecord----->', this.tableRowRecord) + } + })) + }).finally( + this.visible = true, + console.log('this.approveData---->', this.approveData) + ) + } + } +} +</script> +<style scoped> +.shallow-hr { + border: 0; + height: 1px; /* 鍒嗙晫绾跨殑楂樺害 */ + background-color: rgba(0, 0, 0, 0.1); /* 浣跨敤 RGBA 棰滆壊锛屽苟璁剧疆杈冧綆鐨勯�忔槑搴� */ + margin: 20px 0; /* 鍒嗙晫绾夸笂涓嬬殑澶栬竟璺� */ +} +.btn-custom { + background-color: #4CAF50; /* 缁胯壊鑳屾櫙 */ + color: white; /* 鐧借壊鏂囧瓧 */ + border: none; /* 鏃犺竟妗� */ + padding: 5px 15px; /* 鍐呰竟璺� */ + text-align: center; /* 鏂囧瓧灞呬腑 */ + text-decoration: none; /* 鏃犱笅鍒掔嚎 */ + display: inline-block; /* 琛屽唴鍧楀厓绱� */ + font-size: 12px; /* 瀛椾綋澶у皬 */ + margin: 4px 2px; /* 澶栬竟璺� */ + cursor: pointer; /* 榧犳爣鎮仠鏃舵樉绀烘墜鍨� */ + border-radius: 4px; /* 鍦嗚杈规 */ +} + +.bold-large-label { + font-weight: bold; + font-size: 20px; /* 鎴栦綘闇�瑕佺殑浠讳綍澶у皬 */ +} +.left_qiu{ + position: absolute; + left: -74px; + top: 0; + width:54px; + border-radius: 50%; + height:54px; + font-size: 13px; + margin: auto; + display: flex; + flex-wrap: wrap; + align-items: center; + justify-content: center; + background: #0099ff; + transform: translate(0, 0); +} +/deep/ .ant-timeline-item-tail{ + left: -29px !important; +} +.left_qiu span{ + width: 3em; + display: block; + color: #fff; + text-align: center; +} +.img{ + width: 75%; +} + +.wrap{ + clear: both; + width: 100%; + display: flex; + height: 50px; + border: 1px solid #ccc; + /* background-color: aqua; */ +} +.box{ + width:21%; + height:50px; + border-right: 1px solid #ccc; + line-height: 50px; + /* background: red; */ + text-align:center; + margin: auto; +} + +@import '~@assets/less/common.less'; +</style> \ No newline at end of file diff --git a/src/views/flowable/workflow/FlowTodo.vue b/src/views/flowable/workflow/FlowTodo.vue new file mode 100644 index 0000000..232354b --- /dev/null +++ b/src/views/flowable/workflow/FlowTodo.vue @@ -0,0 +1,212 @@ +<!-- + Description: 宸ヤ綔娴�-鎴戠殑寰呭姙 List + Author: 浣滆�� liuyh + Date: 2025-02-27 +--> +<template> + <a-card :bordered="false"> + <!-- 鏌ヨ鍖哄煙 --> + <div class="table-page-search-wrapper"> + <a-form layout="inline" @keyup.enter.native="searchQuery"> + <a-row :gutter="24"> + <a-col :xl="6" :lg="7" :md="8" :sm="24"> + <a-form-item label="娴佺▼鍚嶇О"> + <a-input placeholder="璇疯緭鍏ユ祦绋嬪悕绉�" v-model="queryParam.flowName"></a-input> + </a-form-item> + </a-col> + <a-col :xl="6" :lg="7" :md="8" :sm="24"> + <a-form-item label="绠�瑕佹弿杩�"> + <a-input placeholder="璇疯緭鍏ョ畝瑕佹弿杩�" v-model="queryParam.title"></a-input> + </a-form-item> + </a-col> + <a-col :xl="10" :lg="11" :md="12" :sm="24"> + <a-form-item label="褰撳墠鎿嶄綔鏃堕棿"> + <j-date :show-time="true" date-format="YYYY-MM-DD HH:mm:ss" placeholder="璇烽�夋嫨寮�濮嬫椂闂�" class="query-group-cust" v-model="queryParam.startTime"></j-date> + <span class="query-group-split-cust"></span> + <j-date :show-time="true" date-format="YYYY-MM-DD HH:mm:ss" placeholder="璇烽�夋嫨缁撴潫鏃堕棿" class="query-group-cust" v-model="queryParam.endTime"></j-date> + </a-form-item> + </a-col> + <a-col :xl="6" :lg="7" :md="8" :sm="24"> + <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons"> + <a-button type="primary" @click="searchQuery" icon="search">鏌ヨ</a-button> + <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">閲嶇疆</a-button> + </span> + </a-col> + </a-row> + </a-form> + </div> + <!-- 鏌ヨ鍖哄煙-END --> + + <!-- 鎿嶄綔鎸夐挳鍖哄煙 --> + <div class="table-operator"> + </div> + + <!-- table鍖哄煙-begin --> + <div> + + <a-table + ref="table" + size="middle" + :scroll="{x:true}" + bordered + rowKey="id" + :columns="columns" + :dataSource="dataSource" + :pagination="ipagination" + :loading="loading" + class="j-table-force-nowrap" + @change="handleTableChange"> + + <template slot="htmlSlot" slot-scope="text"> + <div v-html="text"></div> + </template> + <template slot="imgSlot" slot-scope="text"> + <span v-if="!text" style="font-size: 12px;font-style: italic;">鏃犲浘鐗�</span> + <img v-else :src="getImgView(text)" height="25px" alt="" style="max-width:80px;font-size: 12px;font-style: italic;"/> + </template> + <template slot="fileSlot" slot-scope="text"> + <span v-if="!text" style="font-size: 12px;font-style: italic;">鏃犳枃浠�</span> + <a-button + v-else + :ghost="true" + type="primary" + icon="download" + size="small" + @click="downloadFile(text)"> + 涓嬭浇 + </a-button> + </template> + + <span slot="action" slot-scope="text, record"> + <a @click="handelDetial(record,text)">鏌ョ湅璇︽儏</a> + </span> + + </a-table> + </div> + + <FlowNcZpi ref="modalFormApproval" :selectShenpiData="selectShenpiData"></FlowNcZpi> + </a-card> +</template> + +<script> + +import '@/assets/less/TableExpand.less' +import { mixinDevice } from '@/utils/mixin' +import { JeecgListMixin } from '@/mixins/JeecgListMixin' +import JDictSelectTag from '@/components/dict/JDictSelectTag.vue' +import store from '@/store' +import { getAction } from '@api/manage' +import FlowNcZpi from '@views/flowable/workflow/FlowNcZpi.vue' + +export default { + name: 'NcDeviceCharactersList', + mixins:[JeecgListMixin, mixinDevice], + components: { + FlowNcZpi, + JDictSelectTag, + }, + data () { + return { + description: '宸ヤ綔娴�-鎴戠殑寰呭姙', + // 琛ㄥご + columns: [ + { + title: '搴忓彿', + dataIndex: '', + key:'rowIndex', + width:200, + align:"center", + customRender:function (t,r,index) { + return parseInt(index)+1; + } + }, + { + title: '娴佺▼鍚嶇О', + align: "center", + dataIndex: 'flowName', + width: 200, + }, + { + title: '娴佺▼涓氬姟绠�瑕佹弿杩�', + align: "center", + dataIndex: 'title', + width:300 + }, + { + title: '涓婁竴姝ュ鐞嗕汉', + align: "center", + dataIndex: 'variables.INITIATOR', + width:200 + }, + { + title: '涓婁竴姝ヨ妭鐐�', + align: "center", + dataIndex: 'actStatus', + width:200 + }, + { + title: '褰撳墠鑺傜偣', + align: "center", + dataIndex: 'name', + width:200 + }, + { + title: '褰撳墠鑺傜偣寮�濮嬫椂闂�', + align: "center", + dataIndex: 'createTime', + width:300 + }, + { + title: '鎿嶄綔', + dataIndex: 'action', + scopedSlots: { customRender: 'action' }, + align: 'center', + width: 200, + fixed: 'right' + } + ], + url: { + list: '/nc/assign/flow/toTaskBySelf', + }, + dictOptions:{}, + selectShenpiData: {}, + } + }, + created() { + }, + computed: { + importExcelUrl: function(){ + return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`; + }, + }, + methods: { + handelDetial(item, index) { + console.log('鐐瑰嚮浜嗚鎯�') + console.log('item----->', item) + console.log('index----->', index) + let approcesstype = this.splitAprocessType(item.title) + console.log('approcesstype--->', approcesstype) + switch (approcesstype) { + case '鎸囨淳NC鏂囨。鍒拌澶囨祦绋�': + this.handDrDetial(item) + break + default: + alert('娌℃壘鍒拌瀹℃壒') + } + }, + splitAprocessType(title) { + let parts = title.split('锛�') // 娉ㄦ剰鍐掑彿鏄叏瑙掑瓧绗︼紝浣跨敤瀵瑰簲鐨勫瓧杩涜鍒嗗壊 + let result = parts[0] + return result + }, + handDrDetial(item) { + this.selectShenpiData = item + this.$refs.modalFormApproval.clearTableSource() + this.$refs.modalFormApproval.getAllApproveData(item) + }, + } +} +</script> +<style scoped> +@import '~@assets/less/common.less'; +</style> \ No newline at end of file diff --git a/src/views/flowable/workflow/FlowWorkTaskList.vue b/src/views/flowable/workflow/FlowWorkTaskList.vue new file mode 100644 index 0000000..c912aa5 --- /dev/null +++ b/src/views/flowable/workflow/FlowWorkTaskList.vue @@ -0,0 +1,142 @@ +<template> + <a-card :bordered="false"> + <div> + <a-table + ref="table" + size="middle" + :scroll="{x:true}" + bordered + rowKey="id" + :columns="columns" + :dataSource="dataSource" + :pagination="ipagination" + :loading="loading" + class="j-table-force-nowrap" + > + </a-table> + </div> + </a-card> +</template> + +<script> + + import '@/assets/less/TableExpand.less' + import { mixinDevice } from '@/utils/mixin' + import { JeecgListMixin } from '@/mixins/JeecgListMixin' + import {filterMultiDictText} from '@/components/dict/JDictSelectUtil' + + export default { + name: 'FlowManage', + mixins:[JeecgListMixin, mixinDevice], + components: { + + }, + data () { + return { + toolsVisable:true, + description: '浠诲姟鍒楄〃椤甸潰', + // 琛ㄥご + columns: [ + { + title: '#', + dataIndex: '', + key:'rowIndex', + width:60, + align:"center", + customRender:function (t,r,index) { + return parseInt(index)+1; + } + }, + { + title:'浠诲姟ID', + align:"center", + dataIndex: 'id' + }, + { + title:'鐗堟湰鍙�', + align:"center", + dataIndex: 'rev' + }, + { + title:'鎵ц瀹炰緥ID', + align:"center", + dataIndex: 'executionId' + }, + { + title:'娴佺▼瀹炰緥ID', + align:"center", + dataIndex: 'procInstId' + }, + { + title:'娴佺▼瀹氫箟ID', + align:"center", + dataIndex: 'procDefId' + }, + { + title:'浠诲姟鍚嶇О', + align:"center", + dataIndex: 'name' + }, + { + title:'浠诲姟瀹氫箟Key', + align:"center", + dataIndex: 'taskDefKey' + }, + { + title:'鍔炵悊浜�', + align:"center", + dataIndex: 'assignee' + }, + { + title:'浼樺厛绾�', + align:"center", + dataIndex: 'priority' + }, + { + title:'浠诲姟鍒涘缓鏃堕棿', + align:"center", + dataIndex: 'createTime' + }, + { + title:'鏆傚仠鐘舵��', + align:"center", + dataIndex: 'suspensionState' + }, + + ], + url: { + list: "/nc/assign/flow/workTasklist", + + }, + dictOptions:{}, + superFieldList:[], + workflowSource:[] + } + }, + created() { + this.getSuperFieldList(); + }, + computed: { + }, + methods: { + getSuperFieldList(){ + let fieldList=[]; + fieldList.push({type:'string',value:'id',text:'浠诲姟ID',dictCode:''}) + fieldList.push({type:'string',value:'rev',text:'鐗堟湰鍙�',dictCode:''}) + fieldList.push({type:'string',value:'executionId',text:'鎵ц瀹炰緥ID',dictCode:''}) + fieldList.push({type:'string',value:'procInstId',text:'娴佺▼瀹炰緥ID',dictCode:''}) + fieldList.push({type:'string',value:'procDefId',text:'娴佺▼瀹氫箟ID',dictCode:''}) + fieldList.push({type:'string',value:'name',text:'浠诲姟鍚嶇О',dictCode:''}) + fieldList.push({type:'string',value:'taskDefKey',text:'浠诲姟瀹氫箟Key',dictCode:''}) + fieldList.push({type:'string',value:'assignee',text:'鍔炵悊浜�',dictCode:'unit_all'}) + fieldList.push({type:'string',value:'priority',text:'浼樺厛绾�',dictCode:''}) + fieldList.push({type:'string',value:'createTime',text:'浠诲姟鍒涘缓鏃堕棿',dictCode:''}) + fieldList.push({type:'string',value:'suspensionState',text:'鏆傚仠鐘舵��',dictCode:''}) + this.superFieldList = fieldList + } + } + } +</script> +<style scoped> + @import '~@assets/less/common.less'; +</style> \ No newline at end of file -- Gitblit v1.9.3