src/views/eam/spare/modules/EamSparePartRequisition/EamSparePartRequisitionDetailModal.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/eam/spare/modules/EamSparePartRequisition/EamSparePartRequisitionExamineModal.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/eam/spare/modules/EamSparePartRequisition/EamSparePartRequisitionModal.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/flowable/workflow/FlowTodo.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/flowable/workflow/sparePartApply/SparePartApplyHandle.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/views/eam/spare/modules/EamSparePartRequisition/EamSparePartRequisitionDetailModal.vue
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,117 @@ <template> <j-modal :title="title" :width="800" :visible="visible" :confirmLoading="confirmLoading" switchFullscreen @ok="handleOk" @cancel="handleCancel" cancelText="å ³é"> <a-spin :spinning="confirmLoading"> <a-form-model ref="form" :model="model" :rules="validatorRules"> <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="delFlag" label="å 餿 è®°"> <a-input-number v-model="model.delFlag"/> </a-form-model-item> <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="partId" label="å¤åå¤ä»¶ID"> <a-input placeholder="请è¾å ¥å¤åå¤ä»¶ID" v-model="model.partId" /> </a-form-model-item> <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="requisitionNum" label="è¯·è´æ°é"> <a-input placeholder="请è¾å ¥è¯·è´æ°é" v-model="model.requisitionNum" /> </a-form-model-item> </a-form-model> </a-spin> </j-modal> </template> <script> import { httpAction } from '@api/manage' import moment from "moment" export default { name: "EamSparePartRequisitionDetailModal", data () { return { title:"æä½", visible: false, model: {}, labelCol: { xs: { span: 24 }, sm: { span: 5 }, }, wrapperCol: { xs: { span: 24 }, sm: { span: 16 }, }, confirmLoading: false, validatorRules:{ }, url: { add: "/eam/eamSparePartRequisitionDetail/add", edit: "/eam/eamSparePartRequisitionDetail/edit", }, } }, created () { }, methods: { add () { //åå§åé»è®¤å¼ this.edit({}); }, edit (record) { this.model = Object.assign({}, record); this.visible = true; }, close () { this.$emit('close'); this.visible = false; this.$refs.form.clearValidate(); }, handleOk () { const that = this; // 触å表åéªè¯ this.$refs.form.validate(valid => { if (valid) { that.confirmLoading = true; let httpurl = ''; let method = ''; if(!this.model.id){ httpurl+=this.url.add; method = 'post'; }else{ httpurl+=this.url.edit; method = 'put'; } httpAction(httpurl,this.model,method).then((res)=>{ if(res.success){ that.$message.success(res.message); that.$emit('ok'); }else{ that.$message.warning(res.message); } }).finally(() => { that.confirmLoading = false; that.close(); }) }else{ return false; } }) }, handleCancel () { this.close() }, } } </script> <style lang="less" scoped> </style> src/views/eam/spare/modules/EamSparePartRequisition/EamSparePartRequisitionExamineModal.vue
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,122 @@ <template> <j-modal :title="title" :width="800" :visible="visible" :confirmLoading="confirmLoading" switchFullscreen :cancel="close" > <a-spin :spinning="confirmLoading"> <a-form-model ref="form" :model="model" :rules="validatorRules" > <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="requisitionCode" label="请è´åç¼ç " > <a-input placeholder="请è´åç¼ç èªå¨çæ" v-model="model.requisitionCode" :disabled="true" /> </a-form-model-item> </a-form-model> </a-spin> <template slot='footer'> <a-popconfirm @confirm="handleReject" title="确认å°å½åå¤ä»¶è¯·è´å驳åï¼" > <a-button :loading='confirmLoading' :style="{marginRight: '8px'}" >驳å</a-button> </a-popconfirm> <a-popconfirm @confirm="handleOk" title="确认å°å½åå¤ä»¶è¯·è´åå®¡æ ¸éè¿ï¼" > <a-button type='primary' :loading='confirmLoading' :style="{marginRight: '8px'}" >éè¿</a-button> </a-popconfirm> </template> </j-modal> </template> <script> import { postAction } from '@api/manage' export default { name: "EamSparePartRequisitionExamineModal", data() { return { title: "å®¡æ ¸", visible: false, model: {}, labelCol: { xs: { span: 24 }, sm: { span: 5 }, }, wrapperCol: { xs: { span: 24 }, sm: { span: 16 }, }, confirmLoading: false, validatorRules: { }, url: { examine: "eam/eamSparePartRequisition/examineSpareRequisition" }, } }, created() { }, methods: { examine(record) { this.model = Object.assign({}, record); this.visible = true; }, close() { this.$emit('close'); this.visible = false; }, handleOk() { this.handleSubmit("3"); }, handleReject() { this.handleSubmit("4"); }, handleSubmit(status) { const that = this; that.model.requisitionStatus = status; postAction(that.url.examine, that.model).then((res) => { if (res.success) { that.$message.success(res.message); that.$emit('ok'); } else { that.$message.warning(res.message); } }).catch(() => { that.$message.error('æä½å¤±è´¥ï¼è¯·ç¨åéè¯'); }).finally(() => { that.confirmLoading = false; that.close(); }); } } } </script> <style lang="less" scoped> </style> src/views/eam/spare/modules/EamSparePartRequisition/EamSparePartRequisitionModal.vue
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,145 @@ <template> <j-modal :title="title" :width="800" :visible="visible" :confirmLoading="confirmLoading" switchFullscreen @ok="handleOk" @cancel="handleCancel" cancelText="å ³é" > <a-spin :spinning="confirmLoading"> <a-form-model ref="form" :model="model" :rules="validatorRules" > <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="requisitionCode" label="请è´åç¼ç " > <a-input placeholder="请è´åç¼ç èªå¨çæ" v-model="model.requisitionCode" :disabled="true" /> </a-form-model-item> <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="remark" label="夿³¨" > <a-textarea placeholder="请è¾å ¥å¤æ³¨" v-model="model.remark" /> </a-form-model-item> </a-form-model> </a-spin> </j-modal> </template> <script> import { httpAction, getAction } from '@api/manage' import moment from "moment" export default { name: "EamSparePartRequisitionModal", data() { return { title: "æä½", visible: false, model: {}, labelCol: { xs: { span: 24 }, sm: { span: 5 }, }, wrapperCol: { xs: { span: 24 }, sm: { span: 16 }, }, confirmLoading: false, validatorRules: {}, url: { add: "/eam/eamSparePartRequisition/add", edit: "/eam/eamSparePartRequisition/edit", generateRequisitionCode: "sys/sysBusinessCodeRule/generateBusinessCodeSeq" }, } }, created() { }, methods: { add() { const that = this let params = { businessCode: "SpareRequisitionCodeRule" } getAction(that.url.generateRequisitionCode, params).then((res) => { if (res.success) { this.model = { requisitionCode: res.result } } else { that.$message.warning(res.message); } }) //åå§åé»è®¤å¼ that.edit(this.model); }, edit(record) { this.model = Object.assign({}, record); this.visible = true; }, close() { this.$emit('close'); this.visible = false; this.$refs.form.clearValidate(); }, handleOk() { const that = this; // 触å表åéªè¯ this.$refs.form.validate(valid => { if (valid) { that.confirmLoading = true; let httpurl = ''; let method = ''; if (!this.model.id) { httpurl += this.url.add; method = 'post'; } else { httpurl += this.url.edit; method = 'put'; } httpAction(httpurl, this.model, method).then((res) => { if (res.success) { that.$message.success(res.message); that.$emit('ok'); } else { that.$message.warning(res.message); } }).finally(() => { that.confirmLoading = false; that.close(); }) } else { return false; } }) }, handleCancel() { this.close() }, } } </script> <style lang="less" scoped> </style> src/views/flowable/workflow/FlowTodo.vue
@@ -7,12 +7,23 @@ <a-card :bordered='false'> <!-- æ¥è¯¢åºå --> <div class='table-page-search-wrapper'> <a-form layout='inline' @keyup.enter.native='searchQuery'> <a-form layout='inline' @keyup.enter.native='searchQuery' > <a-row :gutter='24'> <a-col :lg='6' :md='8' :sm='24' :xl='4'> <a-col :lg='6' :md='8' :sm='24' :xl='4' > <a-form-item label='æµç¨åç±»'> <j-dict-select-tag v-model='queryParam.category' dictCode='flow_type' placeholder='è¯·éæ©æµç¨åç±»'></j-dict-select-tag> <j-dict-select-tag v-model='queryParam.category' dictCode='flow_type' placeholder='è¯·éæ©æµç¨åç±»' ></j-dict-select-tag> </a-form-item> </a-col> <!--<a-col :xl="4" :lg="6" :md="8" :sm="24">--> @@ -20,35 +31,83 @@ <!--<a-input placeholder="请è¾å ¥æµç¨åç§°" v-model="queryParam.flowName"></a-input>--> <!--</a-form-item>--> <!--</a-col>--> <a-col :lg='6' :md='8' :sm='24' :xl='4'> <a-col :lg='6' :md='8' :sm='24' :xl='4' > <a-form-item label='å½åèç¹'> <a-input v-model='queryParam.name' placeholder='请è¾å ¥å½åèç¹ç²¾ç¡®æ¥è¯¢'></a-input> <a-input v-model='queryParam.name' placeholder='请è¾å ¥å½åèç¹ç²¾ç¡®æ¥è¯¢' ></a-input> </a-form-item> </a-col> <a-col :lg='6' :md='8' :sm='24' :xl='4'> <a-col :lg='6' :md='8' :sm='24' :xl='4' > <a-form-item label='ç®è¦æè¿°'> <a-input v-model='queryParam.title' placeholder='请è¾å ¥ç®è¦æè¿°'></a-input> <a-input v-model='queryParam.title' placeholder='请è¾å ¥ç®è¦æè¿°' ></a-input> </a-form-item> </a-col> <template v-if='toggleSearchStatus'> <a-col :lg='8' :md='12' :sm='24' :xl='8'> <a-col :lg='8' :md='12' :sm='24' :xl='8' > <a-form-item label='任塿¶é´èå´'> <j-date v-model='queryParam.startTime' :show-time='false' class='query-group-cust' date-format='YYYY-MM-DD HH:mm:ss' placeholder='è¯·éæ©å¼å§æ¶é´'></j-date> <j-date v-model='queryParam.startTime' :show-time='false' class='query-group-cust' date-format='YYYY-MM-DD HH:mm:ss' placeholder='è¯·éæ©å¼å§æ¶é´' ></j-date> <span class='query-group-split-cust'></span> <j-date v-model='queryParam.endTime' :show-time='false' class='query-group-cust' date-format='YYYY-MM-DD HH:mm:ss' placeholder='è¯·éæ©ç»ææ¶é´'></j-date> <j-date v-model='queryParam.endTime' :show-time='false' class='query-group-cust' date-format='YYYY-MM-DD HH:mm:ss' placeholder='è¯·éæ©ç»ææ¶é´' ></j-date> </a-form-item> </a-col> </template> <a-col :lg='6' :md='8' :sm='24' :xl='4'> <span class='table-page-search-submitButtons' style='float: left;overflow: hidden;'> <a-button icon='search' type='primary' @click='searchQuery'>æ¥è¯¢</a-button> <a-button icon='reload' style='margin-left: 8px' @click='searchReset'>éç½®</a-button> <a style='margin-left: 8px' @click='handleToggleSearch'> <a-col :lg='6' :md='8' :sm='24' :xl='4' > <span class='table-page-search-submitButtons' style='float: left;overflow: hidden;' > <a-button icon='search' type='primary' @click='searchQuery' >æ¥è¯¢</a-button> <a-button icon='reload' style='margin-left: 8px' @click='searchReset' >éç½®</a-button> <a style='margin-left: 8px' @click='handleToggleSearch' > {{ toggleSearchStatus ? 'æ¶èµ·' : 'å±å¼' }} <a-icon :type="toggleSearchStatus ? 'up' : 'down'" /> </a> @@ -63,7 +122,10 @@ <div class='table-operator'> <a-dropdown v-if='selectedRowKeys.length > 0 '> <a-menu slot='overlay'> <a-menu-item key='1' @click='batchHandle'> <a-menu-item key='1' @click='batchHandle' > <a-icon type='delete' /> æ¹éå¤ç </a-menu-item> @@ -76,10 +138,16 @@ <!-- tableåºå-begin --> <div> <div class='ant-alert ant-alert-info' style='margin-bottom: 16px;'> <div class='ant-alert ant-alert-info' style='margin-bottom: 16px;' > <i class='anticon anticon-info-circle ant-alert-icon'></i>已鿩 <a style='font-weight: 600'>{{ selectedRowKeys.length }}</a>项 <a style='margin-left: 24px' @click='onClearSelected'>æ¸ ç©º</a> <a style='margin-left: 24px' @click='onClearSelected' >æ¸ ç©º</a> </div> <a-table @@ -93,54 +161,115 @@ bordered rowKey='id' size='middle' @change='handleTableChange'> @change='handleTableChange' > <span slot='action' slot-scope='text, record'> <a @click='handelDetail(record,text)'>æ§è¡/审æ¹</a> <span slot='action' slot-scope='text, record' > <a @click='handelDetail(record,text)'>æ§è¡/审æ¹</a> </span> </a-table> </div> <AssignFileStreamHandle ref='modalFormApproval' :selectShenpiData='selectShenpiData' @searchReset='searchReset'></AssignFileStreamHandle> <DispatchFileHandle ref='modalFormDispatchFileXq' :selectShenpiData='selectDispatchFileXqData' @searchReset='searchReset'></DispatchFileHandle> <DispatchFileBachHandleStyle ref='modalFormDispatchFileBatch' @ok='modalFormOk' @searchReset='searchReset'></DispatchFileBachHandleStyle> <AssignFileStreamHandle ref='modalFormApproval' :selectShenpiData='selectShenpiData' @searchReset='searchReset' ></AssignFileStreamHandle> <DispatchFileHandle ref='modalFormDispatchFileXq' :selectShenpiData='selectDispatchFileXqData' @searchReset='searchReset' ></DispatchFileHandle> <DispatchFileBachHandleStyle ref='modalFormDispatchFileBatch' @ok='modalFormOk' @searchReset='searchReset' ></DispatchFileBachHandleStyle> <!--å个æµç¨å¤ç--> <InspectionOrderHandle ref='modalFormInspectionOrder' :selectShenpiData='selectInspectionOrderData' @searchReset='searchReset'></InspectionOrderHandle> <week-maintenance-approval-modal ref='weekMaintenanceApprovalModal' :selectShenpiData='selectWeekMaintenanceData' @searchReset='searchReset'></week-maintenance-approval-modal> <repair-order-approval-modal ref='repairOrderApprovalModal' :selectShenpiData='selectRepairOrderData' @searchReset='searchReset'></repair-order-approval-modal> <out-bound-order-handle ref='outBoundOrderHandle' :selectShenpiData='selectOutBoundOrderData' @searchReset='searchReset'></out-bound-order-handle> <stocktaking-bound-handle ref='stocktakingBoundHandle' :selectShenpiData='selectStocktakingBoundOrderData' @searchReset='searchReset'></stocktaking-bound-handle> <InspectionOrderHandle ref='modalFormInspectionOrder' :selectShenpiData='selectInspectionOrderData' @searchReset='searchReset' ></InspectionOrderHandle> <week-maintenance-approval-modal ref='weekMaintenanceApprovalModal' :selectShenpiData='selectWeekMaintenanceData' @searchReset='searchReset' ></week-maintenance-approval-modal> <repair-order-approval-modal ref='repairOrderApprovalModal' :selectShenpiData='selectRepairOrderData' @searchReset='searchReset' ></repair-order-approval-modal> <out-bound-order-handle ref='outBoundOrderHandle' :selectShenpiData='selectOutBoundOrderData' @searchReset='searchReset' ></out-bound-order-handle> <stocktaking-bound-handle ref='stocktakingBoundHandle' :selectShenpiData='selectStocktakingBoundOrderData' @searchReset='searchReset' ></stocktaking-bound-handle> <loss-bound-handle ref='lossBoundHandle' :selectShenpiData='selectLossBoundOrderData' @searchReset='searchReset'></loss-bound-handle> <loss-bound-handle ref='lossBoundHandle' :selectShenpiData='selectLossBoundOrderData' @searchReset='searchReset' ></loss-bound-handle> <!--æ¹éå¤ç--> <inspection-order-batch-handle ref='inspectionOrderBatchHandleRef' :taskList='selectionRows' @searchReset='searchReset' /> <inspection-order-batch-handle ref='inspectionOrderBatchHandleRef' :taskList='selectionRows' @searchReset='searchReset' /> <week-maintenance-batch-approval-modal ref='weenMaintenanceBatchApprovalModalRef' :taskList='selectionRows' @searchReset='searchReset' /> <equipment-lean-out-approval-modal ref='equipmentLeanOutApprovalModelRef' @searchReset='searchReset' /> <week-maintenance-batch-approval-modal ref='weenMaintenanceBatchApprovalModalRef' :taskList='selectionRows' @searchReset='searchReset' /> <equipment-lean-out-approval-modal ref='equipmentLeanOutApprovalModelRef' @searchReset='searchReset' /> <second-maintenance-approval-modal ref='secondMaintenanceApprovalModal' :selectShenpiData='selectSecondMaintenanceData' @searchReset='searchReset'></second-maintenance-approval-modal> <third-maintenance-approval-modal ref='thirdMaintenanceApprovalModal' :selectShenpiData='selectThirdMaintenanceData' @searchReset='searchReset'></third-maintenance-approval-modal> <equipment-seal-up-approval-modal ref='equipmentSealUpApprovalModelRef' @searchReset='searchReset' /> <inbound-order-handle ref='inboundOrderApprovalModal' :selectInboundOrderData='selectInboundOrderData' @searchReset='searchReset'></inbound-order-handle> <equipment-transfer-approval-modal ref='equipmentTransferApprovalModelRef' @searchReset='searchReset' /> <equipment-scrap-approval-modal ref='equipmentScrapApprovalModelRef' @searchReset='searchReset' /> <second-maintenance-approval-modal ref='secondMaintenanceApprovalModal' :selectShenpiData='selectSecondMaintenanceData' @searchReset='searchReset' ></second-maintenance-approval-modal> <third-maintenance-approval-modal ref='thirdMaintenanceApprovalModal' :selectShenpiData='selectThirdMaintenanceData' @searchReset='searchReset' ></third-maintenance-approval-modal> <equipment-seal-up-approval-modal ref='equipmentSealUpApprovalModelRef' @searchReset='searchReset' /> <inbound-order-handle ref='inboundOrderApprovalModal' :selectInboundOrderData='selectInboundOrderData' @searchReset='searchReset' ></inbound-order-handle> <equipment-transfer-approval-modal ref='equipmentTransferApprovalModelRef' @searchReset='searchReset' /> <equipment-scrap-approval-modal ref='equipmentScrapApprovalModelRef' @searchReset='searchReset' /> <spare-part-apply-handle ref='sparePartApplyModal' :selectSparePartApplyData='selectSparePartApplyData' @searchReset='searchReset' ></spare-part-apply-handle> </a-card> </template> @@ -171,6 +300,7 @@ import stocktakingBoundHandle from '@views/flowable/workflow/stocktakingBound/stocktakingBoundHandle.vue' import lossBoundHandle from '@views/flowable/workflow/lossBound/lossBoundHandle.vue' import InboundOrderHandle from '@views/flowable/workflow/inboundOrder/InboundOrderHandle.vue' import SparePartApplyHandle from '@views/flowable/workflow/sparePartApply/SparePartApplyHandle.vue' export default { name: 'NcDeviceCharactersList', @@ -194,7 +324,8 @@ EquipmentSealUpApprovalModal, InboundOrderHandle, EquipmentTransferApprovalModal, EquipmentScrapApprovalModal EquipmentScrapApprovalModal, SparePartApplyHandle }, data() { return { @@ -207,7 +338,7 @@ key: 'rowIndex', width: 60, align: 'center', customRender: function(t, r, index) { customRender: function (t, r, index) { return parseInt(index) + 1 } }, @@ -280,6 +411,7 @@ selectLossBoundOrderData: {}, selectStocktakingBoundOrderData: {}, selectInboundOrderData: {}, selectSparePartApplyData: {}, //ä¸å¡ä¿¡æ¯ID dataId: undefined } @@ -287,7 +419,7 @@ created() { }, computed: { importExcelUrl: function() { importExcelUrl: function () { return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}` }, getTableColumnsTotalWidth() { @@ -380,6 +512,9 @@ break case 'equipment_scrap': this.handleEquipmentScrap(item) break case 'spare_part_apply': this.handleSparePartApplyApproval(item) break default: alert('没æ¾å°è¯¥æµç¨') @@ -536,7 +671,15 @@ this.$refs.equipmentScrapApprovalModelRef.title = item.name this.$refs.equipmentScrapApprovalModelRef.handleDetail(item) this.$refs.equipmentScrapApprovalModelRef.disableSubmit = false } }, handleSparePartApplyApproval(item) { if (item && item.dataId) { this.selectSparePartApplyData = Object.assign({}, item) this.$refs.sparePartApplyModal.auditVisible = true this.$refs.sparePartApplyModal.clearTableSource() this.$refs.sparePartApplyModal.getAllApproveData(item) } }, } } </script> src/views/flowable/workflow/sparePartApply/SparePartApplyHandle.vue
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,503 @@ <!-- Description: 工使µ-åºåºç³è¯·å审æ¹å¤çé¡µé¢ List Author: ä½è liuyh Date: 2025-02-27 --> <template> <a-modal :title="title" :width="width" :visible="visible" :footer="null" @cancel="handCancel" > <a-card :bordered="false"> <div> <b>{{ selectSparePartApplyData.description }}</b> <br> <br> <a-tag color="blue"> å¤ç人 {{ selectSparePartApplyData.assignee_dictText }} </a-tag> <a-tag color="blue"> å建æ¶é´ {{ selectSparePartApplyData.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='2' tab='ç³è¯·æç»ä¿¡æ¯' > <a-row> <a-col :span='span'> <a-form-model-item label='å¤ä»¶è¯·è´åç¼å·' :labelCol='labelCol' :wrapperCol='wrapperCol' prop='requisitionCode' > <a-input :disabled='coldisabled' v-model='tableRowRecord.requisitionCode' ></a-input> </a-form-model-item> </a-col> </a-row> <a-table ref="table" size="middle" bordered rowKey="id" :scroll="{x:'max-content'}" :columns="columns" :dataSource="dataSource" :pagination="ipagination" :loading="loading" :rowSelection="null" > </a-table> </a-tab-pane> <a-tab-pane key='3' tab='æµç¨èç¹' > <a-timeline> <a-timeline-item v-for="(item,index) in hitaskDataSource" :key="index" > <div> <h3 style="font-weight: bold;">{{item.taskName}}</h3> <div>å¤ç人ï¼{{item.assignee_dictText}}</div> <div v-if="index !==0">å¤çæ¶é¿ï¼{{item.duration}}</div> <div v-if="item.name !== 'æäº¤ç³è¯·'">å¤çç±»åï¼{{item.sequenceFlowName}}</div> <div v-if="item.description">å¤çæè§ï¼{{item.description}}</div> </div> </a-timeline-item> </a-timeline> </a-tab-pane> </a-tabs> </a-spin> </a-form> </div> <div v-if="auditVisible"> <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='reportUser' > <a-input :disabled='coldisabled' v-model='tableRowRecord.reportUser' ></a-input> </a-form-model-item> </a-col> <a-col ::span='span'> <a-form-model-item label="ç³è¯·æ¶é´" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="createTime" > <a-input :disabled='coldisabled' v-model='tableRowRecord.createTime' ></a-input> </a-form-model-item> </a-col> <a-col :span="24" class="btxx" > <a-form-item label="审æ¹ç¶æ" :labelCol="labelCol" :wrapperCol="wrapperCol" > <a-select v-model='assignFileStream.status' placeholder="è¯·éæ©å®¡æ¹ç»æ" > <a-select-option value="1">éè¿</a-select-option> <a-select-option value="2">驳å</a-select-option> </a-select> </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.approvalOpinion" 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: { selectSparePartApplyData: { type: Object, required: true } }, data() { return { form: this.$form.createForm(this), span: 12, span1: 8, coldisabled: true, spinning: false, tableRowRecord: {}, assignFileStream: {}, tableDataSource: [], usageDataSource: [], hitaskDataSource: [], dataSource: [], bomForm: {}, imageSrc: null, drawerVisible: true, auditVisible: true, loading: false, labelCol: { xs: { span: 24 }, sm: { span: 5 } }, wrapperCol: { xs: { span: 30 }, sm: { span: 16 } }, /* å页忰 */ ipagination: { current: 1, pageSize: 5, pageSizeOptions: ['5', '10', '50'], showTotal: (total, range) => { return range[0] + "-" + range[1] + " å ±" + total + "æ¡" }, showQuickJumper: true, showSizeChanger: true, total: 0 }, columns: [ { title: '#', dataIndex: '', key: 'rowIndex', width: 60, align: "center", customRender: function (t, r, index) { return parseInt(index) + 1; } }, { title: 'å¤ä»¶åç±»', align: "left", dataIndex: 'partCategory' }, { title: 'å¤ä»¶ç¼ç ', align: "left", dataIndex: 'partCode' }, { title: 'å¤ä»¶åç§°', align: "center", dataIndex: 'partName' }, { title: 'å¤ä»¶è§æ ¼', align: "center", dataIndex: 'partModel' }, { title: 'åå·', align: "center", dataIndex: 'partSpecification' }, { title: 'ç³è¯·æ°é', align: "center", dataIndex: 'quantity' }, ], validatorRules: { status: { rules: [ { required: true, message: 'è¯·éæ©å®¡æ¹ç¶æ!' }, ] }, }, approveData: {}, flowData: {}, title: '审æ¹é¡µé¢', width: 1200, visible: false, // 表头 url: { getSparePartRequisitionList: '/eam/eamSparePartRequisition/getSparePartRequisitionList', diagramView: '/assign/flow/diagramView', queryHisTaskList: '/assign/flow/queryHisTaskList', approve: "/eam/eamSparePartRequisition/approval", }, dictOptions: {}, superFieldList: [], workflowSource: [] } }, created() { }, computed: {}, methods: { callback() { }, handCancel() { this.assignFileStream = {} 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('æ æ³å è½½å¾çï¼è¯·ç¨ååè¯ã') } }, 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.approvalOpinion == null || that.assignFileStream.approvalOpinion === 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 EamSparePartRequisitionRequest = {} EamSparePartRequisitionRequest.id = this.flowData.dataId EamSparePartRequisitionRequest.status = that.assignFileStream.status; EamSparePartRequisitionRequest.approvalOpinion = that.assignFileStream.approvalOpinion; EamSparePartRequisitionRequest.comment = that.assignFileStream.approvalOpinion; EamSparePartRequisitionRequest.dataId = this.selectSparePartApplyData.dataId EamSparePartRequisitionRequest.taskId = this.selectSparePartApplyData.id EamSparePartRequisitionRequest.userId = this.selectSparePartApplyData.assignee EamSparePartRequisitionRequest.instanceId = this.selectSparePartApplyData.procInstId EamSparePartRequisitionRequest.targetKey = this.selectSparePartApplyData.taskDefKey EamSparePartRequisitionRequest.values = this.selectSparePartApplyData.variables EamSparePartRequisitionRequest.assignee = this.selectSparePartApplyData.assignee httpAction(url, EamSparePartRequisitionRequest, method).then((res) => { if (res.success) { that.$message.success(res.message); this.handCancel() //å·æ°è¡¨æ ¼ that.$emit('searchReset') } else { that.$message.warning(res.message); } }).finally(() => { that.confirmLoading = false; }) } }) }, getAllApproveData(item) { this.tableRowRecord = {} this.assignFileStream = {} this.visible = true this.loading = true console.log('selectSparePartApplyData----->', this.selectSparePartApplyData) this.flowData = item getAction(this.url.queryHisTaskList, { procInstId: item.procInstId }).then(res => { if (res.success) { this.hitaskDataSource = res.result } }) getAction(this.url.getSparePartRequisitionList, { id: item.dataId }).then(res => { if (res.success) { this.tableRowRecord.requisitionCode = res.result.records[0].requisitionCode this.tableRowRecord.reportUser = res.result.records[0].reportUser this.tableRowRecord.createTime = res.result.records[0].createTime this.dataSource = res.result.records[0].sparePartRequisitionDetailList if (res.result.total) { this.ipagination.total = res.result.total } else { this.ipagination.total = 0 } } else { this.$message.warning(res.message) } }).finally(() => { this.loading = false }) } } } </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>