From a8441611deb2a51bb16a0f85e83a2750840c18f4 Mon Sep 17 00:00:00 2001 From: zhangherong <571457620@qq.com> Date: 星期三, 09 七月 2025 16:22:08 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- src/views/system/modules/SelectEamDeviceModal.vue | 231 +++++++++ src/components/jeecgbiz/JSelectBaseFactory.vue | 183 +++++++ src/api/api.js | 11 src/views/eam/equipment/modules/EamEquipmentModal.vue | 2 src/views/system/modules/UserModal.vue | 74 ++ src/views/flowable/workflow/InspectionOrder/InspectionOrderHandle.vue | 413 ++++++++-------- src/components/jeecgbiz/modal/JSelectBaseFactoryModal.vue | 294 ++++++++++++ src/views/eam/maintenance/modules/EamInspectionOrderModal.vue | 26 src/views/flowable/workflow/FlowTodo.vue | 10 src/views/eam/base/EamMaintenanceStandardList.vue | 55 + src/views/eam/base/modules/EamMaintenanceStandardDetailList.vue | 84 ++ 11 files changed, 1,115 insertions(+), 268 deletions(-) diff --git a/src/api/api.js b/src/api/api.js index 41f3a08..371c8fe 100644 --- a/src/api/api.js +++ b/src/api/api.js @@ -67,7 +67,10 @@ const queryRepairDepartTreeList = (params)=>getAction("/eam/eamBaseRepairDepart/queryTreeList",params); const queryRepDepIdTree = (params)=>getAction("/eam/eamBaseRepairDepart/queryIdTree",params); const deleteByRepairDepartId = (params)=>deleteAction("/eam/eamBaseRepairDepart/delete",params); - +//EAM涓績 +const queryEamCenterTreeList = (params)=>getAction("/eam/BaseFactory/queryTreeList",params); +const queryEamCenterIdTree = (params)=>getAction("/eam/BaseFactory/queryIdTree",params); +const deleteByEamCenterId = (params)=>deleteAction("/eam/BaseFactory/delete",params); //浜х嚎鏍� @@ -190,8 +193,10 @@ editEquipment, queryRepairDepartTreeList, queryRepDepIdTree, - deleteByRepairDepartId - + deleteByRepairDepartId, + queryEamCenterTreeList, + queryEamCenterIdTree, + deleteByEamCenterId } diff --git a/src/components/jeecgbiz/JSelectBaseFactory.vue b/src/components/jeecgbiz/JSelectBaseFactory.vue new file mode 100644 index 0000000..22df2a6 --- /dev/null +++ b/src/components/jeecgbiz/JSelectBaseFactory.vue @@ -0,0 +1,183 @@ +<template> + <div class="components-input-demo-presuffix"> + <!----> + <a-input @click="openModal" placeholder="璇风偣鍑婚�夋嫨EAM涓績" v-model="textVals" readOnly :disabled="disabled"> + <a-icon slot="prefix" type="cluster" title="EAM涓績閫夋嫨鎺т欢"/> + <a-icon v-if="storeVals" slot="suffix" type="close-circle" @click="handleEmpty" title="娓呯┖"/> + </a-input> + <JSelectBaseFactoryModal + ref="innerBaseFactorySelectModal" + :modal-width="modalWidth" + :multi="multi" + :rootOpened="rootOpened" + :BaseFactoryId="value" + :store="storeField" + :text="textField" + :treeBaseFactory="treeBaseFactory" + @ok="handleOK" + @initComp="initComp"> + + </JSelectBaseFactoryModal> + </div> +</template> + +<script> + import JSelectBaseFactoryModal from './modal/JSelectBaseFactoryModal' + import { underLinetoHump } from '@/components/_util/StringUtil' + export default { + name: 'JSelectBaseFactory', + components:{ + JSelectBaseFactoryModal + }, + props:{ + modalWidth:{ + type:Number, + default:500, + required:false + }, + multi:{ + type:Boolean, + default:false, + required:false + }, + rootOpened:{ + type:Boolean, + default:true, + required:false + }, + value:{ + type:String, + required:false + }, + disabled:{ + type: Boolean, + required: false, + default: false + }, + // 鑷畾涔夎繑鍥炲瓧娈碉紝榛樿杩斿洖 id + customReturnField: { + type: String, + default: '' + }, + backBaseFactory: { + type: Boolean, + default: false, + required: false + }, + // 瀛樺偍瀛楁 [key field] + store: { + type: String, + default: 'id', + required: false + }, + // 鏄剧ず瀛楁 [label field] + text: { + type: String, + default: 'factoryName', + required: false + }, + treeBaseFactory: { + type: Boolean, + default: false, + required: false + } + + }, + data(){ + return { + visible:false, + confirmLoading:false, + storeVals: '', //[key values] + textVals: '' //[label values] + } + }, + computed:{ + storeField(){ + let field = this.customReturnField + if(!field){ + field = this.store; + } + return underLinetoHump(field) + }, + textField(){ + return underLinetoHump(this.text) + } + }, + mounted(){ + this.storeVals = this.value + }, + watch:{ + value(val){ + this.storeVals = val + } + }, + methods:{ + initComp(textVals){ + this.textVals = textVals + }, + //杩斿洖閫変腑鐨勮溅闂翠俊鎭� + backBaseFactoryInfo(){ + if(this.backBaseFactory===true){ + //LOWCOD-2147 銆愮敤鎴风鐞嗐�戦�夋嫨閮ㄩ棬鍜屼笂绾т互鍚庯紝璐熻矗閮ㄩ棬娌℃湁鏁版嵁鍙�� (闄剁値鏀归�犺嚜瀹氫箟杩斿洖瀛楁瀵艰嚧) + if(this.storeVals && this.storeVals.length>0){ + let arr1 = this.storeVals.split(',') + let arr2 = this.textVals.split(',') + let info = [] + for(let i=0;i<arr1.length;i++){ + info.push({ + value: arr1[i], + text: arr2[i] + }) + } + this.$emit('back', info) + } + } + }, + openModal(){ + this.$refs.innerBaseFactorySelectModal.show() + }, + handleOK(rows) { + if (!rows && rows.length <= 0) { + this.textVals = '' + this.storeVals = '' + } else { + let arr1 = [] + let arr2 = [] + for(let dep of rows){ + arr1.push(dep[this.storeField]) + arr2.push(dep[this.textField]) + } + this.storeVals = arr1.join(',') + this.textVals = arr2.join(',') + } + this.$emit("change", this.storeVals) + this.backBaseFactoryInfo() + }, + getBaseFactoryNames(){ + return this.departNames + }, + handleEmpty(){ + this.handleOK('') + } + }, + model: { + prop: 'value', + event: 'change' + } + } +</script> + +<style scoped> + .components-input-demo-presuffix .anticon-close-circle { + cursor: pointer; + color: #ccc; + transition: color 0.3s; + font-size: 12px; + } + .components-input-demo-presuffix .anticon-close-circle:hover { + color: #f5222d; + } + .components-input-demo-presuffix .anticon-close-circle:active { + color: #666; + } +</style> \ No newline at end of file diff --git a/src/components/jeecgbiz/modal/JSelectBaseFactoryModal.vue b/src/components/jeecgbiz/modal/JSelectBaseFactoryModal.vue new file mode 100644 index 0000000..2e839c9 --- /dev/null +++ b/src/components/jeecgbiz/modal/JSelectBaseFactoryModal.vue @@ -0,0 +1,294 @@ +<template> + <j-modal + title="璇风偣鍑婚�夋嫨EAM涓績" + :width="modalWidth" + :visible="visible" + :confirmLoading="confirmLoading" + @ok="handleSubmit" + @cancel="handleCancel" + @update:fullscreen="isFullscreen" + wrapClassName="j-repair-depart-select-modal" + switchFullscreen + cancelText="鍏抽棴"> + <a-spin tip="Loading..." :spinning="false"> + <a-input-search style="margin-bottom: 1px" placeholder="璇疯緭鍏ヤ腑蹇�/宸ュ尯/宸ユ鍚嶇О鎸夊洖杞﹁繘琛屾悳绱�" @search="onSearch" /> + <a-tree + checkable + :class="treeScreenClass" + :treeData="treeData" + :checkStrictly="checkStrictly" + @check="onCheck" + @select="onSelect" + @expand="onExpand" + :autoExpandParent="autoExpandParent" + :expandedKeys="expandedKeys" + :checkedKeys="checkedKeys"> + + <template slot="title" slot-scope="{title}"> + <span v-if="title.indexOf(searchValue) > -1"> + {{title.substr(0, title.indexOf(searchValue))}} + <span style="color: #f50">{{searchValue}}</span> + {{title.substr(title.indexOf(searchValue) + searchValue.length)}} + </span> + <span v-else>{{title}}</span> + </template> + </a-tree> + </a-spin> + </j-modal> +</template> + +<script> +import {queryEamCenterTreeList} from '@/api/api' + export default { + name: 'JSelectBaseFactoryModal', + props:['modalWidth','multi','rootOpened','BaseFactoryId', 'store', 'text','treeBaseFactory'], + data(){ + return { + visible:false, + confirmLoading:false, + treeData:[], + autoExpandParent:true, + expandedKeys:[], + dataList:[], + checkedKeys:[], + checkedRows:[], + searchValue:"", + checkStrictly: false, + fullscreen:false + } + }, + created(){ + this.loadDepart(); + }, + watch:{ + BaseFactoryId(){ + this.initDepartComponent() + }, + visible: { + handler() { + this.initDepartComponent(true) + } + } + }, + computed:{ + treeScreenClass() { + return { + 'my-dept-select-tree': true, + 'fullscreen': this.fullscreen, + } + }, + }, + methods:{ + show(){ + this.visible=true + this.checkedRows=[] + this.checkedKeys=[] + }, + loadDepart(){ + // 杩欎釜鏂规硶鏄壘鍒版墍鏈夌殑閮ㄩ棬淇℃伅 + queryEamCenterTreeList().then(res=>{ + if(res.success){ + let arr = [...res.result] + this.reWriterWithSlot(arr) + this.treeData = arr + this.initDepartComponent() + if(this.rootOpened){ + this.initExpandedKeys(res.result) + } + } + }) + }, + initDepartComponent(flag){ + let arr = [] + //璇ユ柟娉曚袱涓湴鏂圭敤 1.visible鏀瑰彉浜嬩欢閲嶆柊璁剧疆閫変腑椤� 2.缁勪欢缂栬緫椤甸潰鍥炴樉 + let fieldName = flag==true?'key':this.text + if(this.BaseFactoryId){ + let arr2 = this.BaseFactoryId.split(',') + for(let item of this.dataList){ + if(arr2.indexOf(item[this.store])>=0){ + arr.push(item[fieldName]) + } + } + } + if(flag==true){ + this.checkedKeys = [...arr] + }else{ + this.$emit("initComp", arr.join(',')) + } + }, + reWriterWithSlot(arr){ + for(let item of arr){ + if(item.children && item.children.length>0){ + this.reWriterWithSlot(item.children) + let temp = Object.assign({},item) + temp.children = {} + this.dataList.push(temp) + }else{ + this.dataList.push(item) + item.scopedSlots={ title: 'title' } + } + } + }, + initExpandedKeys(arr){ + if(arr && arr.length>0){ + let keys = [] + for(let item of arr){ + if(item.children && item.children.length>0){ + keys.push(item.id) + } + } + this.expandedKeys=[...keys] + //鍏ㄩ儴keys + //this.allTreeKeys = [...keys] + }else{ + this.expandedKeys=[] + //this.allTreeKeys = [] + } + }, + onCheck (checkedKeys,info) { + if(!this.multi){ + let arr = checkedKeys.checked.filter(item => this.checkedKeys.indexOf(item) < 0) + this.checkedKeys = [...arr] + this.checkedRows = (this.checkedKeys.length === 0) ? [] : [info.node.dataRef] + }else{ + if(this.checkStrictly){ + this.checkedKeys = checkedKeys.checked + }else{ + this.checkedKeys = checkedKeys + } + this.checkedRows = this.getCheckedRows(this.checkedKeys) + } + }, + onSelect(selectedKeys,info) { + //鍙栨秷鍏宠仈鐨勬儏鍐典笅鎵嶈蛋onSelect鐨勯�昏緫 + if(this.checkStrictly){ + let keys = [] + keys.push(selectedKeys[0]) + if(!this.checkedKeys || this.checkedKeys.length===0 || !this.multi){ + this.checkedKeys = [...keys] + this.checkedRows=[info.node.dataRef] + }else{ + let currKey = info.node.dataRef.key + if(this.checkedKeys.indexOf(currKey)>=0){ + this.checkedKeys = this.checkedKeys.filter(item=> item !==currKey) + }else{ + this.checkedKeys.push(...keys) + } + } + this.checkedRows = this.getCheckedRows(this.checkedKeys) + } + }, + onExpand (expandedKeys) { + this.expandedKeys = expandedKeys + this.autoExpandParent = false + }, + handleSubmit(){ + if(!this.checkedKeys || this.checkedKeys.length==0){ + this.$emit("ok",'') + }else{ + let checkRow = this.getCheckedRows(this.checkedKeys) + let keyStr = this.checkedKeys.join(",") + this.$emit("ok", checkRow, keyStr) + } + this.handleClear() + }, + handleCancel(){ + this.handleClear() + }, + handleClear(){ + this.visible=false + this.checkedKeys=[] + }, + getParentKey(currKey,treeData){ + let parentKey + for (let i = 0; i < treeData.length; i++) { + const node = treeData[i] + if (node.children) { + if (node.children.some(item => item.key === currKey)) { + parentKey = node.key + } else if (this.getParentKey(currKey, node.children)) { + parentKey = this.getParentKey(currKey, node.children) + } + } + } + return parentKey + }, + onSearch(value){ + const expandedKeys = this.dataList.map((item) => { + if (item.title.indexOf(value) > -1) { + return this.getParentKey(item.key,this.treeData) + } + return null + }).filter((item, i, self) => item && self.indexOf(item) === i) + + Object.assign(this, { + expandedKeys, + searchValue: value, + autoExpandParent: true, + }) + + + }, + // 鏍规嵁 checkedKeys 鑾峰彇 rows + getCheckedRows(checkedKeys) { + const forChildren = (list, key) => { + for (let item of list) { + if (item.id === key) { + return item + } + if (item.children instanceof Array) { + let value = forChildren(item.children, key) + if (value != null) { + return value + } + } + } + return null + } + + let rows = [] + for (let key of checkedKeys) { + let row = forChildren(this.treeData, key) + if (row != null) { + rows.push(row) + } + } + return rows + }, + switchCheckStrictly (v) { + if(v==1){ + this.checkStrictly = false + }else if(v==2){ + this.checkStrictly = true + } + }, + isFullscreen(val){ + this.fullscreen=val + } + } + } + +</script> + +<style lang="less" scoped> +// 闄愬埗閮ㄩ棬閫夋嫨鏍戦珮搴︼紝閬垮厤閮ㄩ棬澶鏃剁偣鍑荤‘瀹氫笉渚� +.my-dept-select-tree{ + height:350px; + + &.fullscreen{ + height: calc(100vh - 250px); + } + overflow-y: scroll; +} +.drawer-bootom-button { + position: absolute; + bottom: 0; + width: 100%; + border-top: 1px solid #e8e8e8; + padding: 10px 16px; + text-align: right; + left: 0; + background: #fff; + border-radius: 0 0 2px 2px; +} +</style> \ No newline at end of file diff --git a/src/views/eam/base/EamMaintenanceStandardList.vue b/src/views/eam/base/EamMaintenanceStandardList.vue index e04390f..f437afa 100644 --- a/src/views/eam/base/EamMaintenanceStandardList.vue +++ b/src/views/eam/base/EamMaintenanceStandardList.vue @@ -90,19 +90,10 @@ <a style="margin-left: 24px" @click="onClearSelected">娓呯┖</a> </div> - <a-table - ref="table" - size="middle" - bordered - rowKey="id" - :columns="columns" - :dataSource="dataSource" - :pagination="ipagination" - :loading="loading" - class="j-table-force-nowrap" - :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}" - :customRow='clickThenSelect' - @change="handleTableChange"> + <a-table ref="table" size="middle" bordered rowKey="id" :columns="columns" :dataSource="dataSource" + :pagination="ipagination" :loading="loading" class="j-table-force-nowrap" + :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}" :customRow='clickThenSelect' + @change="handleTableChange"> <span slot="action" slot-scope="text, record"> <a v-if="record.standardStatus === 'START'" @click.stop="handleUpgrade(record)">鍗囩増</a> @@ -125,14 +116,33 @@ </span> </a-table> - <a-tabs defaultActiveKey="1"> - <a-tab-pane tab='淇濆吇鏍囧噯鏄庣粏椤�' key="1"> - <div class="table-operator" style="margin:-16px"> - <eam-maintenance-standard-detail-list ref="standardDetailRef" :standardId="standardId" - :pageSelectionRow="selectionRows[0]"/> - </div> - </a-tab-pane> + <a-tabs defaultActiveKey="1" v-if="selectionRows.length===1"> + <template v-if="selectionRows[0]&&selectionRows[0].maintenanceCategory=='POINT_INSPECTION'"> + <a-tab-pane tab="鏃ョ偣妫�" key="1"> + <eam-maintenance-standard-detail-list :standardId="standardId" :pageSelectionRow="selectionRows[0]" + filterKey="DAY_INSPECTION"/> + </a-tab-pane> + <a-tab-pane tab="鍛ㄧ偣妫�" key="2" forceRender> + <eam-maintenance-standard-detail-list :standardId="standardId" :pageSelectionRow="selectionRows[0]" + filterKey="WEEK_INSPECTION"/> + </a-tab-pane> + </template> + <template v-if="selectionRows[0]&&selectionRows[0].maintenanceCategory=='SECOND_MAINTENANCE'"> + <a-tab-pane tab="鎿嶄綔宸�" key="1"> + <eam-maintenance-standard-detail-list :standardId="standardId" :pageSelectionRow="selectionRows[0]" + filterKey="OPERATOR_MAINTENANCE"/> + </a-tab-pane> + <a-tab-pane tab="缁翠慨宸�" key="2" forceRender> + <eam-maintenance-standard-detail-list :standardId="standardId" :pageSelectionRow="selectionRows[0]" + filterKey="REPAIRER_MAINTENANCE"/> + </a-tab-pane> + </template> + + <a-tab-pane tab="涓変繚" key="1" v-if="selectionRows[0]&&selectionRows[0].maintenanceCategory=='THIRD_MAINTENANCE'"> + <eam-maintenance-standard-detail-list :standardId="standardId" + :pageSelectionRow="selectionRows[0]"/> + </a-tab-pane> </a-tabs> </div> <!-- table鍖哄煙-end --> @@ -243,9 +253,8 @@ secondMaintenanceImportExcel: '/eam/maintenanceStandard/importSecondMaintenanceStandard', thirdMaintenanceImportExcel: '/eam/maintenanceStandard/importThirdMaintenanceStandard', inspectionXlsDownloadUrl: '瀵煎叆妯℃澘/鐐规鏍囧噯瀵煎叆妯℃澘_v1.0.xlsx', - weekMaintenanceXlsDownloadUrl: '瀵煎叆妯℃澘/鍛ㄤ繚鏍囧噯瀵煎叆妯℃澘_v1.0.xlsx', - secondMaintenanceXlsDownloadUrl: '瀵煎叆妯℃澘/浜屼繚鏍囧噯瀵煎叆妯℃澘_v1.0.xlsx', - thirdMaintenanceXlsDownloadUrl: '瀵煎叆妯℃澘/涓変繚鏍囧噯瀵煎叆妯℃澘_v1.0.xlsx' + secondMaintenanceXlsDownloadUrl: '瀵煎叆妯℃澘/浜屼繚鏍囧噯瀵煎叆妯℃澘_v1.0.docx', + thirdMaintenanceXlsDownloadUrl: '瀵煎叆妯℃澘/涓変繚鏍囧噯瀵煎叆妯℃澘_v1.0.docx' }, standardId: '-1' } diff --git a/src/views/eam/base/modules/EamMaintenanceStandardDetailList.vue b/src/views/eam/base/modules/EamMaintenanceStandardDetailList.vue index 214e801..d242efa 100644 --- a/src/views/eam/base/modules/EamMaintenanceStandardDetailList.vue +++ b/src/views/eam/base/modules/EamMaintenanceStandardDetailList.vue @@ -32,6 +32,9 @@ type: Object, default: () => { } + }, + filterKey: { + type: String } }, data() { @@ -39,18 +42,12 @@ description: '淇濆吇鏍囧噯鏄庣粏绠$悊椤甸潰', // 琛ㄥご columns: [], - defaultColumns: [ + inspectionColumns: [ { title: '搴忓彿', align: 'center', dataIndex: 'itemCode', width: 60 - }, - { - title: '閮ㄤ綅', - align: 'center', - dataIndex: 'itemPart', - ellipsis: true }, { title: '淇濆吇椤瑰垎绫�', @@ -71,6 +68,53 @@ ellipsis: true } ], + secondMaintenanceColumns: [ + { + title: '搴忓彿', + align: 'center', + dataIndex: 'itemCode', + width: 60 + }, + { + title: '淇濆吇椤瑰垎绫�', + align: 'center', + dataIndex: 'itemCategory_dictText', + width: 150 + }, + { + title: '淇濆吇椤圭洰', + align: 'center', + dataIndex: 'itemName', + ellipsis: true + } + ], + thirdMaintenanceColumns: [ + { + title: '搴忓彿', + align: 'center', + dataIndex: 'itemCode', + width: 60 + }, + { + title: '淇濆吇閮ㄤ綅', + align: 'center', + dataIndex: 'itemPart', + ellipsis: true + }, + { + title: '淇濆吇鍐呭', + align: 'center', + dataIndex: 'itemName', + ellipsis: true + }, + { + title: '楠屾敹鏍囧噯', + align: 'center', + dataIndex: 'itemDemand', + ellipsis: true + } + ], + disableMixinCreated: true, url: { list: '/eam/eamMaintenanceStandardDetail/list' } @@ -81,28 +125,32 @@ immediate: true, handler(val) { if (val) { - this.loadData(1) + console.log('val---------------------', val) + this.$nextTick(() => this.loadData(1)) } else { this.clearList() } } }, pageSelectionRow: { + immediate: true, handler(val) { - if (val) { - if (val.maintenanceCategory != 'THIRD_MAINTENANCE') this.columns = [...this.defaultColumns.filter(item => item.dataIndex != 'itemPart')] - else this.columns = [...this.defaultColumns.filter(item => item.dataIndex != 'itemCategory_dictText')] + switch (val.maintenanceCategory) { + case 'POINT_INSPECTION': + this.columns = this.inspectionColumns + break + case 'SECOND_MAINTENANCE': + this.columns = this.secondMaintenanceColumns + break + case 'THIRD_MAINTENANCE': + this.columns = this.thirdMaintenanceColumns + break } } } }, - computed: {}, methods: { loadData(arg) { - if (!this.url.list) { - this.$message.error('璇疯缃畊rl.list灞炴��!') - return - } if (this.standardId && this.standardId === '-1') { this.clearList() return @@ -118,11 +166,13 @@ this.dataSource = [] params.standardId = this.standardId this.loading = true + console.log('----------------------', this.filterKey) getAction(this.url.list, params).then((res) => { if (res.success) { // console.log(res) //update-begin---author:zhangyafei Date:20201118 for锛氶�傞厤涓嶅垎椤电殑鏁版嵁鍒楄〃------------ - this.dataSource = res.result.records || res.result + if (this.filterKey) this.dataSource = res.result.records.filter(item => item.itemCategory == this.filterKey) + else this.dataSource = res.result.records if (res.result.total) { this.ipagination.total = res.result.total } else { diff --git a/src/views/eam/equipment/modules/EamEquipmentModal.vue b/src/views/eam/equipment/modules/EamEquipmentModal.vue index 4db5113..a06b114 100644 --- a/src/views/eam/equipment/modules/EamEquipmentModal.vue +++ b/src/views/eam/equipment/modules/EamEquipmentModal.vue @@ -99,7 +99,7 @@ <a-row> <a-col :span="customSpan"> <a-form-model-item label="绯荤粺"> - <a-input placeholder="璇疯緭鍏ョ郴缁�" :disabled="Boolean(+model.operationSystem)" v-model="model.system"/> + <a-input placeholder="璇疯緭鍏ョ郴缁�" :disabled="!Boolean(+model.operationSystem)" v-model="model.system"/> </a-form-model-item> </a-col> <a-col :span="customSpan"> diff --git a/src/views/eam/maintenance/modules/EamInspectionOrderModal.vue b/src/views/eam/maintenance/modules/EamInspectionOrderModal.vue index 1ecc745..84c5ec1 100644 --- a/src/views/eam/maintenance/modules/EamInspectionOrderModal.vue +++ b/src/views/eam/maintenance/modules/EamInspectionOrderModal.vue @@ -128,7 +128,7 @@ { title: '搴忓彿', key: 'itemCode', - type: JVXETypes.inputNumber, + type: JVXETypes.normal, width: 100, align: 'center', disabled: true @@ -156,42 +156,42 @@ type: JVXETypes.normal, width: 60, align: 'center', - fixed: 'left' + disabled: true }, { title: '淇濆吇椤�', key: 'itemName', type: JVXETypes.textarea, align: 'center', - fixed: 'left' + disabled: true }, { title: '淇濆吇瑕佹眰', key: 'itemDemand', type: JVXETypes.textarea, align: 'center', - fixed: 'left' + disabled: true }, { title: '鐐规缁撴灉', key: 'inspectionResult', - type: JVXETypes.slot, - slotName: 'inspectionResult', - align: 'center' + type: JVXETypes.textarea, + align: 'center', + disabled: true }, { title: '寮傚父鎻忚堪', key: 'exceptionDescription', - type: JVXETypes.slot, - slotName: 'exceptionDescription', - align: 'center' + type: JVXETypes.textarea, + align: 'center', + disabled: true }, { title: '寮傚父鏄惁鎶ヤ慨', key: 'reportFlag', - type: JVXETypes.slot, - slotName: 'reportFlag', - align: 'center' + type: JVXETypes.textarea, + align: 'center', + disabled: true } ] } diff --git a/src/views/flowable/workflow/FlowTodo.vue b/src/views/flowable/workflow/FlowTodo.vue index e29eaf4..7d6937e 100644 --- a/src/views/flowable/workflow/FlowTodo.vue +++ b/src/views/flowable/workflow/FlowTodo.vue @@ -90,6 +90,8 @@ <maintenance-standard-approval-modal ref="maintenanceStandardApprovalModal" @modalFormOk="modalFormOk" :selectShenpiData="selectedRowData"/> + + <inspection-order-handle ref="modalFormInspectionOrder" :selectShenpiData="selectedRowData"/> </a-card> </template> @@ -98,11 +100,12 @@ import { JeecgListMixin } from '@/mixins/JeecgListMixin' import { getAction } from '@api/manage' import MaintenanceStandardApprovalModal from './MaintenanceStandard/MaintenanceStandardApprovalModal' + import InspectionOrderHandle from './InspectionOrder/InspectionOrderHandle' export default { name: 'NcDeviceCharactersList', mixins: [JeecgListMixin, mixinDevice], - components: { MaintenanceStandardApprovalModal }, + components: { InspectionOrderHandle, MaintenanceStandardApprovalModal }, data() { return { description: '宸ヤ綔娴�-鎴戠殑寰呭姙', @@ -225,8 +228,11 @@ } }, + /** + * 鐐瑰嚮淇濆吇瑙勮寖鍒嗙被娴佺▼璇︽儏鏃惰Е鍙� + * @param record + */ handleMaintenanceStandard(record) { - console.log('this.$refs.maintenanceStandardApprovalModal.', this.$refs.maintenanceStandardApprovalModal) this.selectedRowData = Object.assign({}, record) this.$refs.maintenanceStandardApprovalModal.visible = true this.$refs.maintenanceStandardApprovalModal.title = '淇濆吇瑙勮寖' diff --git a/src/views/flowable/workflow/InspectionOrder/InspectionOrderHandle.vue b/src/views/flowable/workflow/InspectionOrder/InspectionOrderHandle.vue index 156c30d..b302f37 100644 --- a/src/views/flowable/workflow/InspectionOrder/InspectionOrderHandle.vue +++ b/src/views/flowable/workflow/InspectionOrder/InspectionOrderHandle.vue @@ -1,201 +1,198 @@ <template> - <j-modal - :title="title" - :width="1200" - :visible="visible" - :okButtonProps="{ class:{'jee-hidden': disableSubmit||!hasInspectionDateArrived} }" - @ok="submitForm" - @cancel="handleCancel" - :mask-closable="false" - :confirmLoading="confirmLoading" - switchFullscreen - centered - > + <j-modal :title="title" :width="1200" :visible="visible" + :okButtonProps="{ class:{'jee-hidden': disableSubmit||!hasInspectionDateArrived} }" @ok="submitForm" + @cancel="handleCancel" :mask-closable="false" :confirmLoading="confirmLoading" fullscreen> <a-spin :spinning="spinning"> <a-form-model ref='form' :model='tableRowRecord' :labelCol="labelCol" :wrapperCol="wrapperCol" :rules="validatorRules"> - <a-divider orientation="center" style="font-size: large;font-style: italic;color: #66aeed;"> 鐐规鍩虹淇℃伅</a-divider> + <a-row :gutter="48"> + <a-col :span="8"> + <a-tabs> + <a-tab-pane tab="鍩虹淇℃伅"> + <a-row> + <a-col :span='span'> + <a-form-model-item label="宸ュ崟鍙�"> + <a-input readOnly v-model="tableRowRecord.orderNum"/> + </a-form-model-item> + </a-col> + <a-col :span='span'> + <a-form-model-item label="璁惧缂栧彿"> + <MaintenanceEquipmentSelect v-model="tableRowRecord.equipmentId" + :maintenanceCategory="'POINT_INSPECTION'" + disabled @autocompleteForm="autoCompleteForm"/> + </a-form-model-item> + </a-col> - <a-row> - <a-col :span='span'> - <a-form-model-item label="宸ュ崟鍙�"> - <a-input readOnly v-model="tableRowRecord.orderNum"/> - </a-form-model-item> - </a-col> - <a-col :span='span'> - <a-form-model-item label="璁惧缂栧彿"> - <MaintenanceEquipmentSelect v-model="tableRowRecord.equipmentId" - :maintenanceCategory="'POINT_INSPECTION'" disabled - @autocompleteForm="autoCompleteForm"/> - </a-form-model-item> - </a-col> - <a-col :span='span'> - <a-form-model-item label="鏍囧噯鍚嶇О"> - <a-input readOnly v-model="tableRowRecord.standardName"/> - </a-form-model-item> - </a-col> - </a-row> + </a-row> - <a-row> - <a-col :span='span'> - <a-form-model-item label="鏍囧噯缂栫爜"> - <a-input readOnly v-model="tableRowRecord.standardCode"/> - </a-form-model-item> - </a-col> - <a-col :span='span'> - <a-form-model-item label="鐐规鏃ユ湡"> - <a-input v-model="tableRowRecord.inspectionDate" readOnly/> - </a-form-model-item> - </a-col> - <a-col :span='span'> - <a-form-model-item label="鐐规杩囨湡鏃堕棿"> - <a-input v-model="tableRowRecord.expirationTime" readOnly/> - </a-form-model-item> - </a-col> - </a-row> + <a-row> + <a-col :span='span'> + <a-form-model-item label="瑙勮寖鍚嶇О"> + <a-input readOnly v-model="tableRowRecord.standardName"/> + </a-form-model-item> + </a-col> + <a-col :span='span'> + <a-form-model-item label="瑙勮寖缂栫爜"> + <a-input readOnly v-model="tableRowRecord.standardCode"/> + </a-form-model-item> + </a-col> - <a-row> - <a-col :span='span'> - <a-form-model-item label="淇濆吇鍛ㄦ湡"> - <a-input v-model="tableRowRecord.maintenancePeriod" readOnly/> - </a-form-model-item> + </a-row> + + <a-row> + <a-col :span='span'> + <a-form-model-item label="鐐规鏃ユ湡"> + <a-input v-model="tableRowRecord.inspectionDate" readOnly/> + </a-form-model-item> + </a-col> + <a-col :span='span'> + <a-form-model-item label="鐐规杩囨湡鏃堕棿"> + <a-input v-model="tableRowRecord.expirationTime" readOnly/> + </a-form-model-item> + </a-col> + </a-row> + + <a-row> + <a-col :span='span'> + <a-form-model-item label="淇濆吇鍛ㄦ湡"> + <a-input v-model="tableRowRecord.maintenancePeriod" readOnly/> + </a-form-model-item> + </a-col> + <a-col :span='span'> + <a-form-model-item label="鐐规浜�"> + <a-input v-model="tableRowRecord.operator_dictText" readOnly/> + </a-form-model-item> + </a-col> + </a-row> + + <a-row> + <a-col :span="span*2"> + <a-form-model-item label="澶囨敞" :labelCol="{span:4}" :wrapperCol="{span:20}"> + <a-textarea v-model="tableRowRecord.remark" rows="3" readOnly/> + </a-form-model-item> + </a-col> + </a-row> + </a-tab-pane> + </a-tabs> </a-col> - <a-col :span='span'> - <a-form-model-item label="鐐规浜�"> - <a-input v-model="tableRowRecord.operator_dictText" readOnly/> - </a-form-model-item> - </a-col> - </a-row> - <a-row> - <a-col :span="span*3"> - <a-form-model-item label="澶囨敞" :labelCol="{span:2}" :wrapperCol="{span:21}"> - <a-textarea v-model="tableRowRecord.remark" rows="3" readOnly/> - </a-form-model-item> - </a-col> - </a-row> + <a-col :span="disableSubmit||tableRowRecord.inspectionStatus=='UNDER_INSPECTION'?16:10"> + <a-tabs v-model="activeTabKey"> + <a-tab-pane key="1" tab="鏃ョ偣妫�"> + <j-vxe-table ref="editableDetailTable" :rowNumber="false" rowSelection bordered + alwaysEdit :toolbar="false" keep-source :height="300" :loading="detail.loading" + :dataSource="detail.dataSource" :columns="detail.columns" + @selectRowChange="handleTableSelectRowChange"> + <template v-slot:inspectionResult="props"> + <j-dict-select-tag v-model="props.row.inspectionResult" dictCode="eam_inspection_result" + :disabled="isDisableOperation" placeholder="璇烽�夋嫨鐐规缁撴灉" + @change="handleInspectionResultSelectChange($event,props.row)" + style="width: 100%"/> + </template> - <a-row> - <a-form-model-item prop="imageFilesResult" label="鐐规鍥剧墖" :labelCol="{span:2}" :wrapperCol="{span:21}"> - <lx-upload :returnUrl="false" :isMultiple="true" file-type="image" :number="3" - :disabled="isDisableOperation||!hasInspectionDateArrived" - v-model="tableRowRecord.fileList"/> - </a-form-model-item> - </a-row> + <template v-slot:exceptionDescription="props"> + <a-textarea style="height: 32px" v-model="props.row.exceptionDescription" + :placeholder="props.row.inspectionResult==='2'?'璇疯緭鍏ュ紓甯告弿杩�':''" + :disabled="isDisableOperation||!props.row.inspectionResult||props.row.inspectionResult==='1'"/> + </template> - <a-divider orientation="center" style="font-size: large;font-style: italic;color: #66aeed;"> - 淇濆吇椤逛俊鎭� - </a-divider> + <template v-slot:reportFlag="props"> + <j-dict-select-tag v-model="props.row.reportFlag" + :placeholder="props.row.inspectionResult==='2'?'璇烽�夋嫨寮傚父鏄惁鎶ヤ慨':''" + :disabled="isDisableOperation||!props.row.inspectionResult||props.row.inspectionResult==='1'" + dictCode="yn" style="width: 100%"/> + </template> + </j-vxe-table> + </a-tab-pane> - <a-tabs v-model="activeTabKey"> - <a-tab-pane key="1" tab="淇濆吇椤规槑缁�"> - <j-vxe-table - ref="editableDetailTable" - :rowNumber="false" - :rowSelection="true" - :bordered="true" - :alwaysEdit="true" - :toolbar="false" - keep-source - :height="300" - :loading="detail.loading" - :dataSource="detail.dataSource" - :columns="detail.columns" - @selectRowChange="handleTableSelectRowChange" - > - <template v-slot:inspectionResult="props"> - <j-dict-select-tag v-model="props.row.inspectionResult" dictCode="eam_inspection_result" - :disabled="isDisableOperation" - placeholder="璇烽�夋嫨鐐规缁撴灉" - @change="handleInspectionResultSelectChange($event,props.row)" - style="width: 100%"/> + <a-tab-pane key="2" tab="鍛ㄧ偣妫�"> + <j-vxe-table ref="editableDetailTable" :rowNumber="false" rowSelection bordered + alwaysEdit :toolbar="false" keep-source :height="300" :loading="detail.loading" + :dataSource="detail.weekInspectionList" :columns="detail.columns" + @selectRowChange="handleTableSelectRowChange"> + <template v-slot:inspectionResult="props"> + <j-dict-select-tag v-model="props.row.inspectionResult" dictCode="eam_inspection_result" + :disabled="isDisableOperation" placeholder="璇烽�夋嫨鐐规缁撴灉" + @change="handleInspectionResultSelectChange($event,props.row)" + style="width: 100%"/> + </template> + + <template v-slot:exceptionDescription="props"> + <a-textarea style="height: 32px" v-model="props.row.exceptionDescription" + :placeholder="props.row.inspectionResult==='2'?'璇疯緭鍏ュ紓甯告弿杩�':''" + :disabled="isDisableOperation||!props.row.inspectionResult||props.row.inspectionResult==='1'"/> + </template> + + <template v-slot:reportFlag="props"> + <j-dict-select-tag v-model="props.row.reportFlag" + :placeholder="props.row.inspectionResult==='2'?'璇烽�夋嫨寮傚父鏄惁鎶ヤ慨':''" + :disabled="isDisableOperation||!props.row.inspectionResult||props.row.inspectionResult==='1'" + dictCode="yn" style="width: 100%"/> + </template> + </j-vxe-table> + </a-tab-pane> + + <template v-if="selectShenpiData.procInstId"> + <a-tab-pane key='3' tab='娴佺▼鑺傜偣'> + <a-card :bordered="false"> + <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-card> + </a-tab-pane> + + <a-tab-pane key='4' tab='娴佺▼鍥�'> + <img :src="imageSrc" width="100%" v-if="imageSrc"/> + </a-tab-pane> </template> - <template v-slot:exceptionDescription="props"> - <a-textarea style="height: 32px" v-model="props.row.exceptionDescription" - :placeholder="props.row.inspectionResult==='2'?'璇疯緭鍏ュ紓甯告弿杩�':''" - :disabled="isDisableOperation||!props.row.inspectionResult||props.row.inspectionResult==='1'"/> - </template> + <a-button + v-if="selectedRowKeys.length>0&&!isDisableOperation&&hasInspectionDateArrived&&activeTabKey==='1'&&activeTabKey==='2'" + slot="tabBarExtraContent" type="primary" + @click="handleSelectAllInspectionResult">鎵归噺鐐规姝e父 + </a-button> + </a-tabs> + </a-col> - <template v-slot:reportFlag="props"> - <j-dict-select-tag v-model="props.row.reportFlag" - :placeholder="props.row.inspectionResult==='2'?'璇烽�夋嫨寮傚父鏄惁鎶ヤ慨':''" - :disabled="isDisableOperation||!props.row.inspectionResult||props.row.inspectionResult==='1'" - dictCode="yn" - style="width: 100%"/> - </template> - </j-vxe-table> - </a-tab-pane> + <a-col v-if="!disableSubmit&&isDisplayConfirm" :span="6"> + <a-tabs> + <a-tab-pane tab="缁翠慨宸ョ‘璁�"> + <a-row> + <a-col :span="24"> + <a-form-model-item prop="confirmDealType" label="澶勭悊绫诲瀷"> + <j-dict-select-tag type='radio' v-model='tableRowRecord.confirmDealType' + dictCode='approved_rejected' + :disabled="disableSubmit||tableRowRecord.inspectionStatus!=='WAIT_CONFIRM'"/> + </a-form-model-item> + </a-col> - <template v-if="selectShenpiData.procInstId"> - <a-tab-pane key='2' tab='娴佺▼鑺傜偣'> - <a-card :bordered="false"> - <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-card> - </a-tab-pane> - - <a-tab-pane key='3' tab='娴佺▼鍥�'> - <img :src="imageSrc" alt="Fetched Image"/> - </a-tab-pane> - </template> - - <a-button - v-if="selectedRowKeys.length>0&&!isDisableOperation&&hasInspectionDateArrived&&activeTabKey==='1'" - slot="tabBarExtraContent" type="primary" - @click="handleSelectAllInspectionResult">鎵归噺鐐规姝e父 - </a-button> - - <!--<a-dropdown slot="tabBarExtraContent" v-if="selectedRowKeys.length>0">--> - <!--<a-menu slot="overlay">--> - <!--<a-menu-item key="1" @click="handleSelectAllInspectionResult('姝e父')">姝e父</a-menu-item>--> - <!--<a-menu-item key="2" @click="handleSelectAllInspectionResult('寮傚父')">寮傚父</a-menu-item>--> - <!--</a-menu>--> - - <!--<a-button> 鎵归噺閫夋嫨鐐规缁撴灉--> - <!--<a-icon type="down"/>--> - <!--</a-button>--> - <!--</a-dropdown>--> - </a-tabs> - - <template v-if="isDisplayConfirm"> - <a-divider orientation="center" style="font-size: large;font-style: italic;color: #66aeed;"> 绠$悊鍛樼‘璁や俊鎭� - </a-divider> - - <a-row :gutter="24"> - <a-col :span="12"> - <a-form-model-item prop="confirmDealType" label="澶勭悊绫诲瀷"> - <j-dict-select-tag type='radio' v-model='tableRowRecord.confirmDealType' dictCode='approved_rejected' - :disabled="disableSubmit||tableRowRecord.inspectionStatus!=='WAIT_CONFIRM'"/> - </a-form-model-item> - </a-col> - - <a-col :span="12"> - <a-form-model-item prop="confirmComment" label="澶勭悊鎰忚"> - <a-textarea placeholder="璇疯緭鍏ュ鐞嗘剰瑙�" - :disabled="disableSubmit||tableRowRecord.inspectionStatus!=='WAIT_CONFIRM'" - v-model="tableRowRecord.confirmComment"/> - </a-form-model-item> - </a-col> - </a-row> - </template> + <a-col :span="24"> + <a-form-model-item prop="confirmComment" label="澶勭悊鎰忚"> + <a-textarea placeholder="璇疯緭鍏ュ鐞嗘剰瑙�" + :disabled="disableSubmit||tableRowRecord.inspectionStatus!=='WAIT_CONFIRM'" + v-model="tableRowRecord.confirmComment"/> + </a-form-model-item> + </a-col> + </a-row> + </a-tab-pane> + </a-tabs> + </a-col> + </a-row> </a-form-model> </a-spin> </j-modal> </template> <script> - import '@assets/less/TableExpand.less' - import { getAction, deleteAction, postAction, downFile, httpAction } from '@api/manage' + import { getAction, postAction, downFile } from '@api/manage' import MaintenanceEquipmentSelect from '@views/eam/equipment/modules/MaintenanceEquipmentSelect.vue' import { JVXETypes } from '@comp/jeecg/JVxeTable' import moment from 'moment' @@ -210,11 +207,10 @@ }, data() { return { - span: 8, + span: 12, confirmLoading: false, spinning: false, tableRowRecord: {}, - assignFileStream: {}, hitaskDataSource: [], validatorRules: { confirmDealType: [ @@ -227,21 +223,21 @@ imageSrc: null, labelCol: { xs: { span: 24 }, - sm: { span: 6 } + sm: { span: 9 } }, wrapperCol: { xs: { span: 30 }, - sm: { span: 16 } + sm: { span: 15 } }, visible: false, // 琛ㄥご url: { - // queryBomDataById: '/eam/eamInspectionOrder/selectVoById', diagramView: '/assign/flow/diagramView', queryHisTaskList: '/assign/flow/queryHisTaskList', approve: '/eam/eamInspectionOrder/approval', queryById: '/eam/eamInspectionOrder/queryById', - detailList: '/eam/eamInspectionOrderDetail/queryList' + detailList: '/eam/eamInspectionOrderDetail/queryList', + weekInspectionOrderList: '/eam/eamWeekInspectionDetail/queryStandardList' }, detail: { loading: false, @@ -251,7 +247,7 @@ title: '搴忓彿', key: 'itemCode', type: JVXETypes.normal, - width: '5%', + width: 60, align: 'center', fixed: 'left' }, @@ -259,7 +255,6 @@ title: '淇濆吇椤�', key: 'itemName', type: JVXETypes.normal, - width: '15%', align: 'center', fixed: 'left' }, @@ -267,7 +262,6 @@ title: '淇濆吇瑕佹眰', key: 'itemDemand', type: JVXETypes.normal, - width: '15%', align: 'center', fixed: 'left' }, @@ -276,10 +270,9 @@ key: 'inspectionResult', type: JVXETypes.slot, slotName: 'inspectionResult', - width: '15%', align: 'center', validateRules: [ - { required: true, message: '${title}涓嶈兘涓虹┖锛�' } + { required: true, message: '${title}涓嶈兘涓虹┖' } ] }, { @@ -287,7 +280,6 @@ key: 'exceptionDescription', type: JVXETypes.slot, slotName: 'exceptionDescription', - width: '20%', align: 'center', validateRules: [ { handler: this.customValidator } @@ -298,13 +290,13 @@ key: 'reportFlag', type: JVXETypes.slot, slotName: 'reportFlag', - width: '20%', align: 'center', validateRules: [ { handler: this.customValidator } ] } - ] + ], + weekInspectionList: [] }, selectedRowKeys: [], disableSubmit: false, @@ -363,13 +355,11 @@ this.detail.dataSource = [] this.spinning = true const param = { id: record.dataId } - let res = await getAction(this.url.queryById, param); - this.tableRowRecord = Object.assign({}, res.result); - if (this.tableRowRecord.imageFiles) { - let obj = JSON.parse(this.tableRowRecord.imageFiles) - this.tableRowRecord.fileList = [...obj] - } - await this.loadDetail(record.dataId) + let res = await getAction(this.url.queryById, param) + this.tableRowRecord = Object.assign({}, res.result) + this.loadDetail(record.dataId) + console.log('record', record) + this.getWeekInspectionOrderListByApi(this.tableRowRecord.standardId) }, async submitForm() { @@ -390,11 +380,9 @@ flowTaskVo.values = this.selectShenpiData.variables flowTaskVo.confirmDealType = this.tableRowRecord.confirmDealType flowTaskVo.confirmComment = this.tableRowRecord.confirmComment - flowTaskVo.fileList = this.tableRowRecord.fileList flowTaskVo.tableDetailList = this.$refs.editableDetailTable.getTableData() const that = this - console.log('琛ㄥ崟鎻愪氦鏁版嵁', flowTaskVo) - httpAction(this.url.approve, flowTaskVo, 'post') + postAction(this.url.approve, flowTaskVo) .then((res) => { if (res.success) { that.$message.success(res.message) @@ -468,10 +456,14 @@ this.selectedRowKeys = [] this.visible = false }, - //鏍囧噯閫夋嫨鍙樺寲 + + /** + * 鑾峰彇鏃ョ偣妫�鏄庣粏 + * @param orderId + */ loadDetail(orderId) { if (orderId) { - getAction(this.url.detailList, { orderId: orderId }) + getAction(this.url.detailList, { orderId }) .then(res => { if (res.success) { this.detail.dataSource = [...res.result] @@ -482,6 +474,21 @@ }) } }, + + /** + * 鑾峰彇鐐规宸ュ崟涓殑鍛ㄧ偣妫�鍒楄〃 + * @param standardId 瑙勮寖id + */ + getWeekInspectionOrderListByApi(standardId) { + console.log('standardId-------------------------', standardId) + getAction(this.url.weekInspectionOrderList, { standardId, inspectionDate: this.tableRowRecord.inspectionDate }) + .then(res => { + if (res.success) this.detail.weekInspectionList = res.result + }) + .finally(() => { + this.spinning = false + }) + } } } </script> @@ -489,6 +496,4 @@ /deep/ .ant-select-dropdown-menu { text-align: left; } - - @import '~@assets/less/common.less'; </style> \ No newline at end of file diff --git a/src/views/system/modules/SelectEamDeviceModal.vue b/src/views/system/modules/SelectEamDeviceModal.vue new file mode 100644 index 0000000..74fb71b --- /dev/null +++ b/src/views/system/modules/SelectEamDeviceModal.vue @@ -0,0 +1,231 @@ +<template> + <a-modal + :title="title" + :visible="visible" + @ok="handleOk" + @cancel="handleCancel" + > + + <a-spin :spinning="loading"> + <!-- showLine --> + <a-form> + <a-form-item label="杞﹂棿灞傜骇锛�"> + <a-tree showLine ref="tree" :expandedKeys.sync="expandedKeys" + :treeData="treeDataSource" checkable @check="onCheck" v-model="checkedKeys" + @expand="onExpand"> + </a-tree> + </a-form-item> + </a-form> + + </a-spin> + + <template slot="footer"> + <div> + <a-dropdown + style="float: left" + :trigger="['click']" + placement="topCenter" + > + <a-menu slot="overlay"> + <a-menu-item key="1" @click="expandAll">灞曞紑鎵�鏈�</a-menu-item> + <a-menu-item key="2" @click="closeAll">鍚堝苟鎵�鏈�</a-menu-item> + <a-menu-item key="3" @click="refreshTree">鍒锋柊</a-menu-item> + </a-menu> + <a-button> + 鏍戞搷浣� + <a-icon type="up"/> + </a-button> + </a-dropdown> + <a-popconfirm title="纭畾鏀惧純缂栬緫锛�" @confirm="handleCancel" okText="纭畾" cancelText="鍙栨秷"> + <a-button style="margin-right: .8rem">鍏抽棴</a-button> + </a-popconfirm> + <a-button + @click="handleOk" + type="primary" + >纭畾 + </a-button> + </div> + </template> + + </a-modal> +</template> + +<script> + import { + getAction, + postAction, + deleteAction + } from '@/api/manage' + import BaseTree from '@/views/mdc/common/BaseTree' + import DepartTree from '@/views/mdc/base/modules/DepartList/DepartListTree/DepartTree' + + export default { + name: 'selectEamDeviceModal', + components: { + BaseTree, DepartTree + }, + props: { + editDisable: { + type: Boolean, + default() { + return true + } + }, + title: { + type: String + }, + selectedProduction: { + type: String + } + }, + data() { + return { + loading: false, + treeDataSource: [], + expandedKeys: [], + checkedKeys: [], + url: { + getDeviceTree: '/eam/equipment/loadTreeListByEamCenterIds' + }, + selectedWorkshopIds: '', + dataList: [], + allTreeKeys: [], + visible: false, + dataSource: [] + } + }, + created() { + this.closeAll() + }, + methods: { + onExpand(expandedKeys) { + this.expandedKeys = expandedKeys + this.autoExpandParent = false + }, + queryTreeData(value) { + this.loading = true + this.selectedWorkshopIds = value + getAction(this.url.getDeviceTree, { ids: value }) + .then(res => { + if (res.success) { + this.dataList = [] + this.allTreeKeys = [] + this.getTreeDataSouce(res.result) + this.treeDataSource = res.result + this.generateList(this.treeDataSource) + this.expandedKeys = this.allTreeKeys + } else { + this.$notification.warning({ + message: '娑堟伅', + description: res.message + }) + } + }) + .catch(err => { + this.$notification.error({ + message: '娑堟伅', + description: err.message + }) + }) + .finally(() => { + this.loading = false + }) + }, + + generateList(data) { + for (let i = 0; i < data.length; i++) { + const node = data[i] + const key = node.key + const title = node.title + this.dataList.push({ + key, + title: title + }) + this.allTreeKeys.push(key) + if (node.children) { + this.generateList(node.children) + } + } + }, + + getTreeDataSouce(data) { + data.forEach(item => { + if (item.children && item.children.length > 0) { + this.getTreeDataSouce(item.children) + } + item.key = item.equipmentId ? item.equipmentId : item.key + item.value = item.equipmentId ? item.equipmentId : item.value + }) + }, + expandAll() { + this.expandedKeys = this.allTreeKeys + }, + closeAll() { + this.expandedKeys = ['-1'] + }, + refreshTree() { + this.queryTreeData(this.selectedWorkshopIds) + }, + onCheck(value, obj) { + this.checkedKeys = value + this.deviceNodes = obj.checkedNodes.filter(item => item.data.props.equipmentId).map(item => item.data.props.equipmentId) + }, + handleCancel() { + this.visible = false + }, + handleOk() { + this.$emit('selectFinished', this.deviceNodes) + this.visible = false + } + + } + } +</script> +<style lang="less" scoped> + /deep/ .ant-modal { + /*transform-origin: 337px 50px;*/ + } + + .ant-card-body .table-operator { + margin-bottom: 18px; + } + + .ant-table-tbody .ant-table-row td { + padding-top: 15px; + padding-bottom: 15px; + } + + .anty-row-operator button { + margin: 0 5px + } + + .ant-btn-danger { + background-color: #ffffff + } + + .ant-modal-cust-warp { + height: 100% + } + + .ant-modal-cust-warp .ant-modal-body { + height: calc(100% - 110px) !important; + overflow-y: auto + } + + .ant-modal-cust-warp .ant-modal-content { + height: 90% !important; + overflow-y: hidden + } + + .drawer-bottom-button { + position: absolute; + bottom: 0; + width: 100%; + border-top: 1px solid #e8e8e8; + padding: 10px 16px; + text-align: right; + left: 0; + background: #fff; + border-radius: 0 0 2px 2px; + } +</style> \ No newline at end of file diff --git a/src/views/system/modules/UserModal.vue b/src/views/system/modules/UserModal.vue index 76bd7f1..740580c 100644 --- a/src/views/system/modules/UserModal.vue +++ b/src/views/system/modules/UserModal.vue @@ -74,12 +74,12 @@ <a-input-search :readOnly="true" v-model="model.equipmentIds" @search="deviceSearch" enter-button placeholder="璇烽�夋嫨璁惧" :disabled="!model.selectedProduction"/> </a-form-model-item> - <a-form-model-item label="EAM涓績鍒嗛厤" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="areaId"> - <j-multi-select-tag :triggerChange="true" v-model="model.eamFactoryIds" dictCode="mom_base_area,name,id,del_flag = 0 and type = 1" placeholder="璇风淮鎶や腑蹇�"/> + <a-form-model-item label="EAM涓績鍒嗛厤" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="eamFactoryIds"> + <JSelectBaseFactory v-model="model.selectedBaseFactory" :multi="true" @back="backBaseFactoryInfo" :backProduction="true" :treeProductOpera="true"/> </a-form-model-item> <a-form-model-item label="EAM璁惧鍒嗛厤" :labelCol="labelCol" :wrapperCol="wrapperCol" v-show="!productionDisabled"> - <a-input-search :readOnly="true" v-model="model.eamEquipmentIds" @search="deviceSearch" enter-button placeholder="璇烽�夋嫨璁惧" :disabled="!model.selectedProduction"/> + <a-input-search :readOnly="true" v-model="model.eamEquipmentIds" @search="eamDeviceSearch" enter-button placeholder="璇烽�夋嫨EAM璁惧" :disabled="!model.selectedBaseFactory"/> </a-form-model-item> <a-form-model-item label="缁翠慨閮ㄩ棬/鐝粍鍒嗛厤" :labelCol="labelCol" :wrapperCol="wrapperCol" v-show="!repairDepartDisabled"> @@ -100,6 +100,9 @@ </div> <select-device-modal ref="selectDeviceModal" @selectFinished="selectOK" :title="'閫夋嫨璁惧'"/> + + <select-eam-device-modal ref="selectEamDeviceModal" @selectFinished="selectEamOK" :title="'閫夋嫨EAM璁惧'"/> + </a-drawer> </template> @@ -116,13 +119,17 @@ import { mapActions } from 'vuex' import { ajaxGetDictItems, getDictItemsFromCache } from '@/api/api' import SelectDeviceModal from './SelectDeviceModal' + import SelectEamDeviceModal from './SelectEamDeviceModal' + import JSelectBaseFactory from "@comp/jeecgbiz/JSelectBaseFactory.vue"; export default { name: 'UserModal', components: { + JSelectBaseFactory, SelectDeviceModal, JSelectProduction, - JSelectRepairDepart + JSelectRepairDepart, + SelectEamDeviceModal }, data() { return { @@ -181,17 +188,20 @@ syncUserByUserName: '/act/process/extActProcess/doSyncUserByUserName',//鍚屾鐢ㄦ埛鍒板伐浣滄祦 queryTenantList: '/sys/tenant/queryList', userRepairDepartList: '/sys/user/userRepairDepartList', + userBaseFactoryList: '/sys/user/userBaseFactoryList', repairDepartTreeList: '/eam/eamBaseRepairDepart/queryTreeList' }, tenantsOptions: [], rolesOptions: [], nextDepartOptions: [], nextProductionOptions: [], + nextBaseFactoryOptions:[], nextRepairDepartOptions: [], isDepartType: '', model: { selectedProduction: '', - selectedRepairDeparts: '' + selectedRepairDeparts: '', + selectedBaseFactory:'', } } }, @@ -210,6 +220,17 @@ } // 濡傛灉娓呯┖杞﹂棿鍊煎垯閲嶇疆閫夋嫨璁惧 if (newVal === '') this.model.equipmentIds = '' + } + }, + 'model.selectedBaseFactory': { + handler(newVal, oldVal) { + if (newVal && this.$refs.selectEamDeviceModal) { + // 濡傛灉杞﹂棿閫夋嫨鍓嶅悗涓嶄竴鑷村垯閲嶇疆閫夋嫨璁惧 + if ((oldVal && newVal !== oldVal)) this.model.eamEquipmentIds = '' + this.$refs.selectEamDeviceModal.queryTreeData(newVal) + } + // 濡傛灉娓呯┖杞﹂棿鍊煎垯閲嶇疆閫夋嫨璁惧 + if (newVal === '') this.model.eamEquipmentIds = '' } } }, @@ -265,6 +286,7 @@ selectedroles: '', selecteddeparts: '', selectedProduction: '', + selectedBaseFactory:'', selectedRepairDeparts: '' }) }, @@ -288,6 +310,7 @@ that.getUserDeparts(record.id) that.getUserProductions(record.id) that.getUserRepairDeparts(record.id) + this.getUserBaseFactorys(record.id) } }, isDisabledAuth(code) { @@ -403,6 +426,27 @@ } }) }, + getUserBaseFactorys(userid) { + let that = this + // 鑾峰彇EAM涓績/宸ュ尯/宸ユ鍒嗛厤 + getAction(that.url.userBaseFactoryList, { userId: userid }).then((res) => { + if (res.success) { + let BaseFactoryOptions = [] + let selectedBaseFactoryOptionsKeys = [] + for (let i = 0; i < res.result.length; i++) { + selectedBaseFactoryOptionsKeys.push(res.result[i].key) + //鏂板璐熻矗缁翠慨閮ㄩ棬/鐝粍閫夋嫨涓嬫媺妗� + BaseFactoryOptions.push({ + value: res.result[i].key, + label: res.result[i].title + }) + } + + this.$set(this.model, 'selectedBaseFactory', selectedBaseFactoryOptionsKeys.join(',')) + that.nextBaseFactoryOptions = BaseFactoryOptions + } + }) + }, backDepartInfo(info) { this.model.departIds = this.model.selecteddeparts this.nextDepartOptions = info.map((item, index, arr) => { @@ -413,6 +457,13 @@ backProductionInfo(info) { this.model.productionIds = this.model.selectedProduction this.nextProductionOptions = info.map((item, index, arr) => { + let c = { label: item.text, value: item.value + '' } + return c + }) + }, + backBaseFactoryInfo(info) { + this.model.eamFactoryIds = this.model.selectedBaseFactory + this.nextBaseFactoryOptions = info.map((item, index, arr) => { let c = { label: item.text, value: item.value + '' } return c }) @@ -429,6 +480,7 @@ this.userId = '' this.nextDepartOptions = [] this.nextProductionOptions = [] + this.nextBaseFactoryOptions = [] this.nextRepairDepartOptions = [] this.departIdShow = false }, @@ -437,6 +489,7 @@ this.visible = false this.disableSubmit = false this.nextDepartOptions = [] + this.nextProductionOptions = [] this.nextProductionOptions = [] this.nextRepairDepartOptions = [] this.departIdShow = false @@ -615,6 +668,13 @@ this.$refs.selectDeviceModal.checkedKeys = this.model.equipmentIds ? this.model.equipmentIds.split(',') : [] }, + eamDeviceSearch(){ + this.$refs.selectEamDeviceModal.visible = true + this.$refs.selectEamDeviceModal.selectedRowKeys = [] + this.$refs.selectEamDeviceModal.selectedRows = [] + this.$refs.selectEamDeviceModal.checkedKeys = this.model.eamEquipmentIds ? this.model.eamEquipmentIds.split(',') : [] + }, + /** * 閫夋嫨宸叉湁璁惧鍚庣偣鍑荤‘瀹氭椂瑙﹀彂 * @param data 宸查�夋嫨鐨勮澶囨暟缁� @@ -622,6 +682,10 @@ selectOK(data) { console.log('data=', data) this.$set(this.model, 'equipmentIds', data.join(',')) + }, + selectEamOK(data) { + console.log('data=', data) + this.$set(this.model, 'eamEquipmentIds', data.join(',')) } } } -- Gitblit v1.9.3