From 52d772dfea526a4b3d8b6a6f0746884efccbb706 Mon Sep 17 00:00:00 2001 From: zhaowei <zhaowei> Date: 星期五, 11 四月 2025 14:22:09 +0800 Subject: [PATCH] 1、调整全局domianUrl为/jeecg-boot 2、设备台账页面实现查询设备对应点检工单功能 3、工作流我的待办设备维修分类详情弹窗布局及功能逻辑调整 4、工作流我的待办页面表格样式调整 --- src/views/flowable/workflow/repairOrder/RepairOrderApprovalModal.vue | 507 ++++++++++++++++++++++++++++---------------------------- 1 files changed, 253 insertions(+), 254 deletions(-) diff --git a/src/views/flowable/workflow/repairOrder/RepairOrderApprovalModal.vue b/src/views/flowable/workflow/repairOrder/RepairOrderApprovalModal.vue index 01a921c..98b7bea 100644 --- a/src/views/flowable/workflow/repairOrder/RepairOrderApprovalModal.vue +++ b/src/views/flowable/workflow/repairOrder/RepairOrderApprovalModal.vue @@ -1,16 +1,16 @@ <template> <a-modal - :title="title" - :width="width" + :width="1000" :visible="visible" - :footer="null" @cancel="handCancel" + :mask-closable="false" + centered > <a-card :bordered="false"> <div> <b>{{ selectShenpiData.title }}</b> - <br> - <br> + <br/> + <br/> <a-tag color="blue"> 澶勭悊浜� {{ selectShenpiData.assignee }} </a-tag> @@ -19,37 +19,49 @@ </a-tag> <br> <br> - <button @click="fetchAndShowBmp" class="btn-custom">鎵撳紑娴佺▼鍥�</button> - <div v-if="imageSrc"> - <img :src="imageSrc" alt="Fetched Image" /> + <a-button @click="fetchAndShowBmp" :loading="showBmpButtonLoading" class="btn-custom">娴佺▼鍥�</a-button> + <div v-if="imageSrc&&isDisplayBmp"> + <img :src="imageSrc" alt="Fetched Image"/> </div> - <hr class="shallow-hr"> + <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-tabs default-active-key='1'> <a-tab-pane key='1' tab='鍩烘湰淇℃伅'> - <a-form-model ref='form' :model='tableRowRecord' :rules='validatorRules'> + <a-form-model ref='form' :model='tableRowRecord' :rules='validatorRules' :labelCol='labelCol' + :wrapperCol='wrapperCol'> <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 label='宸ュ崟缂栧彿'> + <a-input :readOnly='inputReadOnly' v-model='tableRowRecord.repairCode'/> </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 label='璁惧缂栧彿'> + <a-input :readOnly='inputReadOnly' v-model='tableRowRecord.equipmentId_dictText'/> + </a-form-model-item> + </a-col> + <a-col :span='span'> + <a-form-model-item label='鍗曟嵁鐘舵��'> + <a-input :readOnly='inputReadOnly' v-model='tableRowRecord.repairStatus_dictText'/> + </a-form-model-item> + </a-col> + <a-col :span='span'> + <a-form-model-item label='缁翠慨璐熻矗浜�'> + <a-input :readOnly='inputReadOnly' v-model='tableRowRecord.repairer'/> </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 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> @@ -57,8 +69,8 @@ <p>澶勭悊浜猴細{{item.assignee}}</p> <p>鍔炵悊绫诲瀷锛歿{item.bllx_dictText}}</p> <p v-if="item.name == '鎻愪氦鐢宠'">鎸囨淳鍘熷洜锛歿{item.cause}}</p> - <p v-else >澶勭悊鎰忚锛歿{item.cause}}</p> - <div class="left_qiu"><span>{{item.name}}</span></div> + <p v-else>澶勭悊鎰忚锛歿{item.cause}}</p> + <div class="left_qiu"><span>{{item.name}}</span></div> </div> </a-timeline-item> </a-timeline> @@ -73,265 +85,252 @@ <br> <b>瀹℃壒璇︽儏</b> <br> - <a-form-model ref="form" :model="approveData" :rules="validatorRules" slot="detail"> + <br> + <a-form-model ref="form" :model="approveData" :rules="validatorRules" :labelCol='labelCol' + :wrapperCol='wrapperCol'> <a-row> - <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 :span="24"> + <a-form-model-item label="鏄惁闇�瑕侀鐢ㄥ浠�" prop="status"> + <a-radio-group v-model="approveData.status"> + <a-radio :value="1">鏄�</a-radio> + <a-radio :value="0">鍚�</a-radio> + </a-radio-group> + </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="assignFileStream.approveContent" rows="4" placeholder="璇疯緭鍏ュ鎵规剰瑙�"/> - </a-form-model-item > - </a-col> + + <template v-if="approveData.status===0"> + <a-col :span="24"> + <a-form-model-item label="鏁呴殰鍘熷洜" prop="faultReason"> + <a-input v-model="approveData.faultReason" rows="4" placeholder="璇疯緭鍏ユ晠闅滃師鍥�"/> + </a-form-model-item> + </a-col> + <a-col :span="24"> + <a-form-model-item label="缁翠慨缁撴灉鎻忚堪" prop="repairResultDescription"> + <a-textarea v-model="approveData.repairResultDescription" placeholder="璇疯緭鍏ョ淮淇粨鏋滄弿杩�"/> + </a-form-model-item> + </a-col> + <a-col :span="24"> + <a-form-model-item label="缁翠慨鍥剧墖"> + <j-image-upload v-model="approveData.imageFiles" :is-multiple="true" :number="3"/> + </a-form-model-item> + </a-col> + </template> </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> - + <template slot="footer"> + <div> + <a-button @click="handCancel">鍙栨秷</a-button> + <a-button @click="submitForm" type="primary">鎻� 浜�</a-button> + </div> + </template> </a-modal> </template> <script> + import '@assets/less/TableExpand.less' + import { getAction, deleteAction, postAction, downFile, httpAction } from '@api/manage' -import '@assets/less/TableExpand.less' -import { mixinDevice } from '@/utils/mixin' -import { getAction, deleteAction, postAction, downFile, httpAction } from '@api/manage' - -export default { - name: 'RepairOrderApprovalModal', - 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: { - }, - approveData: {}, - flowData: {}, - title: '', - width: 1000, - visible: false, - // 琛ㄥご - url: { - queryBomDataById: '/eam/eamRepairOrder/queryById', - diagramView: '/assign/flow/diagramView', - queryHisTaskList:'/assign/flow/queryHisTaskList', - approve:"/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 = { - processDefinitionId: this.flowData.processDefinitionId, - processInstanceId:this.flowData.processInstanceId, - TaskDefinitionKey:this.flowData.processDefinitionKey - } - 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('鏃犳硶鍔犺浇鍥剧墖锛岃绋嶅悗鍐嶈瘯銆�') + export default { + name: 'RepairOrderApprovalModal', + props: { + selectShenpiData: { + type: Object, + required: true } }, - handleQueXiaoTask(){ - this.visible = false - this.routeReload() + data() { + return { + form: this.$form.createForm(this), + span: 12, + inputReadOnly: true, + spinning: false, + tableRowRecord: {}, + assignFileStream: {}, + hitaskDataSource: [], + imageSrc: null, + labelCol: { + xs: { span: 24 }, + sm: { span: 5 } + }, + wrapperCol: { + xs: { span: 24 }, + sm: { span: 16 } + }, + validatorRules: { + status: [ + { required: true, message: '璇烽�夋嫨鏄惁闇�瑕侀鐢ㄥ浠�' } + ], + faultReason: [ + { required: true, message: '璇疯緭鍏ユ晠闅滃師鍥�' } + ], + repairResultDescription: [ + { required: true, message: '璇疯緭鍏ョ淮淇粨鏋滄弿杩�' } + ] + }, + approveData: {}, + flowData: {}, + visible: false, + // 琛ㄥご + url: { + queryBomDataById: '/eam/eamRepairOrder/queryById', + diagramView: '/assign/flow/diagramView', + queryHisTaskList: '/assign/flow/queryHisTaskList', + approve: '/activit/assign/file/approve' + }, + isDisplayBmp: false, + showBmpButtonLoading: false + } }, - 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; + created() { + }, + methods: { + /** + * 鑾峰彇寰呭姙璁板綍鐨勫熀鏈俊鎭� + * @param record 寰呭姙璁板綍淇℃伅 + */ + getAllApproveData(record) { + console.log('selectShenpiData----->', this.selectShenpiData) + this.flowData = Object.assign({}, record) + const param = { 'procInstId': record.dataId } + getAction(this.url.queryHisTaskList, param) + .then(res => { + this.hitaskDataSource = res.result }) - } + }, - }) - }, - getAllApproveData(item) { - console.log('selectShenpiData----->', this.selectShenpiData) - this.flowData = item - let param = { - 'id': item.dataId - } - let parmhis={ - 'procInstId': 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) + /** + * 鑾峰彇寰呭姙璁板綍鐨勫熀鏈俊鎭� + * @param record 寰呭姙璁板綍淇℃伅 + */ + getBasicInformation(record) { + this.spinning = true + const that = this + const param = { id: record.dataId } + this.tableRowRecord = this.approveData = {} + getAction(this.url.queryBomDataById, param) + .then((res => { + if (res.success) { + that.tableRowRecord = res.result + console.log('this.tableRowRecord----->', that.tableRowRecord) + } + })) + .finally(() => { + that.spinning = false + }) + }, + + // 鑾峰彇骞跺睍寮�娴佺▼鍥� + fetchAndShowBmp() { + this.isDisplayBmp = !this.isDisplayBmp + if (!this.imageSrc) { + this.showBmpButtonLoading = true + const that = this + let param = { + processDefinitionId: this.flowData.processDefinitionId, + processInstanceId: this.flowData.processInstanceId, + TaskDefinitionKey: this.flowData.processDefinitionKey } - })) - }).finally( - this.visible = true, - console.log('this.approveData---->', this.approveData) - ) + downFile(this.url.diagramView, param, 'get') + .then((res => { + const urlObject = window.URL.createObjectURL(new Blob([res])) + this.imageSrc = urlObject + })) + .catch(err => { + that.$notification.error({ + message: '娑堟伅', + description: res.message + }) + }) + .finally(() => { + this.showBmpButtonLoading = false + }) + } + }, + + submitForm() { + const that = this + // 瑙﹀彂琛ㄥ崟楠岃瘉 + this.$refs.form.validate(valid => { + if (valid) { + that.confirmLoading = true + const flowTaskVo = {} + flowTaskVo.status = that.approveData.status + flowTaskVo.approveContent = flowTaskVo.comment = that.approveData.approveContent + flowTaskVo.dataId = this.selectShenpiData.dataId + flowTaskVo.taskId = this.selectShenpiData.id + flowTaskVo.userId = flowTaskVo.assignee = this.selectShenpiData.assignee + flowTaskVo.instanceId = this.selectShenpiData.procInstId + flowTaskVo.targetKey = this.selectShenpiData.taskDefKey + flowTaskVo.values = this.selectShenpiData.variables + console.log('琛ㄥ崟鎻愪氦鏁版嵁', flowTaskVo) + // httpAction(this.url.approve, flowTaskVo, 'post') + // .then((res) => { + // if (res.success) { + // that.$message.success(res.message) + // that.$emit('ok') + // } else { + // that.$message.warning(res.message) + // } + // }).finally(() => { + // that.confirmLoading = false + // }) + } else { + return false + } + }) + }, + + handCancel() { + this.visible = false + this.isDisplayBmp = false + this.imageSrc = null + } } } -} </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; /* 鍦嗚杈规 */ -} + .shallow-hr { + border: 0; + height: 1px; /* 鍒嗙晫绾跨殑楂樺害 */ + background-color: rgba(0, 0, 0, 0.1); /* 浣跨敤 RGBA 棰滆壊锛屽苟璁剧疆杈冧綆鐨勯�忔槑搴� */ + margin: 20px 0; /* 鍒嗙晫绾夸笂涓嬬殑澶栬竟璺� */ + } -.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%; -} + .btn-custom { + background-color: #4CAF50; /* 缁胯壊鑳屾櫙 */ + color: #fff; /* 鐧借壊鏂囧瓧 */ + } -.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; -} + .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); + } -@import '~@assets/less/common.less'; + /deep/ .ant-timeline-item-tail { + left: -29px !important; + } + + .left_qiu span { + width: 3em; + display: block; + color: #fff; + text-align: center; + } + + @import '~@assets/less/common.less'; </style> \ No newline at end of file -- Gitblit v1.9.3