From 6232ac30ca4f54e28ddeccdf5aca03734d02aada Mon Sep 17 00:00:00 2001 From: Houjie <714924425@qq.com> Date: 星期五, 23 五月 2025 18:02:14 +0800 Subject: [PATCH] 库存预警界面/ 工具盘点功能/工具盘点/刀具刃磨 --- src/views/tms/requirement/ToolSharpeningList .vue | 302 +++ src/views/tms/lossBound/modules/LossboundModal.vue | 427 +++++ src/views/tms/requirement/modules/ToolsSharpeningModal.vue | 385 ++++ src/views/tms/requirement/modules/ToolsModal.vue | 0 src/views/tms/lossBound/modules/LossboundDetailModal.vue | 141 + src/views/tms/storeEarlyWarning/ToolsStoreEarlyWarningList.vue | 303 +++ src/views/tms/stocktakingBound/ToolsStocktakingBoundList.vue | 321 +++ src/views/tms/storeEarlyWarning/modules/ToolsStoreEarlyWarningModal.vue | 60 src/views/tms/lossBound/LossboundList.vue | 307 +++ src/views/tms/storeEarlyWarning/modules/ToolsStoreEarlyWarningForm.vue | 221 ++ src/views/tms/lossBound/LossboundDetailList.vue | 180 ++ src/views/flowable/workflow/lossBound/lossBoundHandle.vue | 499 +++++ src/views/tms/lossBound/modules/JSelectLossboundToolModal.vue | 221 ++ src/views/tms/stocktakingBound/ToolsStocktaKingBoundDetail.vue | 225 ++ src/views/flowable/workflow/FlowTodo.vue | 686 ++++--- src/views/tms/stocktakingBound/modules/ToolsStocktakingBoundModal.vue | 504 ++++++ src/views/tms/stocktakingBound/modules/ToolSelectorModal.vue | 216 ++ 17 files changed, 4,675 insertions(+), 323 deletions(-) diff --git a/src/views/flowable/workflow/FlowTodo.vue b/src/views/flowable/workflow/FlowTodo.vue index c8f36b2..34c75f5 100644 --- a/src/views/flowable/workflow/FlowTodo.vue +++ b/src/views/flowable/workflow/FlowTodo.vue @@ -50,7 +50,7 @@ <a-button @click="searchReset" icon="reload" style="margin-left: 8px">閲嶇疆</a-button> <a @click="handleToggleSearch" style="margin-left: 8px"> {{ toggleSearchStatus ? '鏀惰捣' : '灞曞紑' }} - <a-icon :type="toggleSearchStatus ? 'up' : 'down'"/> + <a-icon :type="toggleSearchStatus ? 'up' : 'down'" /> </a> </span> </a-col> @@ -64,12 +64,12 @@ <a-dropdown v-if="selectedRowKeys.length > 0 "> <a-menu slot="overlay"> <a-menu-item key="1" @click="batchHandle"> - <a-icon type="delete"/> + <a-icon type="delete" /> 鎵归噺澶勭悊 </a-menu-item> </a-menu> <a-button style="margin-left: 8px"> 鎵归噺鎿嶄綔 - <a-icon type="down"/> + <a-icon type="down" /> </a-button> </a-dropdown> </div> @@ -78,7 +78,7 @@ <div> <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>椤� + selectedRowKeys.length }}</a>椤� <a style="margin-left: 24px" @click="onClearSelected">娓呯┖</a> </div> @@ -101,9 +101,12 @@ </a-table> </div> - <AssignFileStreamHandle ref="modalFormApproval" :selectShenpiData="selectShenpiData" @searchReset="searchReset"></AssignFileStreamHandle> - <DispatchFileHandle ref="modalFormDispatchFileXq" :selectShenpiData="selectDispatchFileXqData" @searchReset="searchReset"></DispatchFileHandle> - <DispatchFileBachHandleStyle ref="modalFormDispatchFileBatch" @searchReset="searchReset" @ok="modalFormOk"></DispatchFileBachHandleStyle> + <AssignFileStreamHandle ref="modalFormApproval" :selectShenpiData="selectShenpiData" + @searchReset="searchReset"></AssignFileStreamHandle> + <DispatchFileHandle ref="modalFormDispatchFileXq" :selectShenpiData="selectDispatchFileXqData" + @searchReset="searchReset"></DispatchFileHandle> + <DispatchFileBachHandleStyle ref="modalFormDispatchFileBatch" @searchReset="searchReset" + @ok="modalFormOk"></DispatchFileBachHandleStyle> <!--鍗曚釜娴佺▼澶勭悊--> <InspectionOrderHandle ref="modalFormInspectionOrder" :selectShenpiData="selectInspectionOrderData" @searchReset="searchReset"></InspectionOrderHandle> @@ -112,354 +115,391 @@ <repair-order-approval-modal ref="repairOrderApprovalModal" @searchReset="searchReset" :selectShenpiData="selectRepairOrderData"></repair-order-approval-modal> <out-bound-order-handle ref="outBoundOrderHandle" :selectShenpiData="selectOutBoundOrderData" - @searchReset="searchReset"></out-bound-order-handle> + @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" @searchReset="searchReset" - :taskList="selectionRows"/> + :taskList="selectionRows" /> <week-maintenance-batch-approval-modal ref="weenMaintenanceBatchApprovalModalRef" @searchReset="searchReset" - :taskList="selectionRows"/> - <equipment-lean-out-approval-modal ref="equipmentLeanOutApprovalModelRef" @searchReset="searchReset"/> + :taskList="selectionRows" /> + <equipment-lean-out-approval-modal ref="equipmentLeanOutApprovalModelRef" @searchReset="searchReset" /> - <second-maintenance-approval-modal ref="secondMaintenanceApprovalModal" :selectShenpiData="selectSecondMaintenanceData" - @searchReset="searchReset"></second-maintenance-approval-modal> + <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"/> + @searchReset="searchReset"></third-maintenance-approval-modal> + <equipment-seal-up-approval-modal ref="equipmentSealUpApprovalModelRef" @searchReset="searchReset" /> </a-card> </template> <script> - import '@/assets/less/TableExpand.less' - import { mixinDevice } from '@/utils/mixin' - import { JeecgListMixin } from '@/mixins/JeecgListMixin' - import JDictSelectTag from '@/components/dict/JDictSelectTag.vue' - import WeekMaintenanceApprovalModal from '@views/flowable/workflow/weekMaintenance/WeekMaintenanceApprovalModal' - import RepairOrderApprovalModal from '@views/flowable/workflow/repairOrder/RepairOrderApprovalModal' - import InspectionOrderHandle from '@views/flowable/workflow/InspectionOrder/InspectionOrderHandle.vue' +import '@/assets/less/TableExpand.less' +import { mixinDevice } from '@/utils/mixin' +import { JeecgListMixin } from '@/mixins/JeecgListMixin' +import JDictSelectTag from '@/components/dict/JDictSelectTag.vue' +import WeekMaintenanceApprovalModal from '@views/flowable/workflow/weekMaintenance/WeekMaintenanceApprovalModal' +import RepairOrderApprovalModal from '@views/flowable/workflow/repairOrder/RepairOrderApprovalModal' +import InspectionOrderHandle from '@views/flowable/workflow/InspectionOrder/InspectionOrderHandle.vue' - import { getAction } from '@api/manage' - import InspectionOrderBatchHandle from './InspectionOrder/InspectionOrderBatchHandle' - import WeekMaintenanceBatchApprovalModal from './weekMaintenance/WeekMaintenanceBatchApprovalModal' - import AssignFileStreamHandle from '@views/flowable/workflow/assignFileStream/AssignFileStreamHandle.vue' - import DispatchFileHandle from '@views/flowable/workflow/dispatchFile/DispatchFileHandle.vue' - import DispatchFileBachHandleStyle from '@views/flowable/workflow/dispatchFile/DispatchFileBachHandleStyle#Drawer.vue' - import OutBoundOrderHandle from '@views/flowable/workflow/outBoundOrder/OutBoundOrderHandle.vue' - import EquipmentLeanOutApprovalModal from '@views/flowable/workflow/leanOut/EquipmentLeanOutApprovalModal.vue' - import SecondMaintenanceApprovalModal from '@views/flowable/workflow/secondMaintenance/SecondMaintenanceApprovalModal.vue' - import ThirdMaintenanceApprovalModal from '@views/flowable/workflow/thirdMaintenance/ThirdMaintenanceApprovalModal.vue' - import EquipmentSealUpApprovalModal from '@views/flowable/workflow/sealUp/EquipmentSealUpApprovalModal.vue' - export default { - name: 'NcDeviceCharactersList', - mixins: [JeecgListMixin, mixinDevice], - components: { - AssignFileStreamHandle, - DispatchFileHandle, - DispatchFileBachHandleStyle, - WeekMaintenanceBatchApprovalModal, - InspectionOrderBatchHandle, - JDictSelectTag, - WeekMaintenanceApprovalModal, - RepairOrderApprovalModal, - InspectionOrderHandle, - EquipmentLeanOutApprovalModal, - SecondMaintenanceApprovalModal, - ThirdMaintenanceApprovalModal, - OutBoundOrderHandle, - EquipmentSealUpApprovalModal, - }, - data() { - return { - description: '宸ヤ綔娴�-鎴戠殑寰呭姙', - // 琛ㄥご - columns: [ - { - title: '搴忓彿', - dataIndex: '', - key: 'rowIndex', - width: 60, - align: 'center', - customRender: function(t, r, index) { - return parseInt(index) + 1 - } - }, - { - title: '娴佺▼鍒嗙被', - align: 'center', - dataIndex: 'category_dictText' - }, - { - title: '娴佺▼鍚嶇О', - align: 'center', - dataIndex: 'flowName', - width: 200 - }, - { - title: '娴佺▼涓氬姟绠�瑕佹弿杩�', - align: 'center', - dataIndex: 'description', - width: 350, - ellipsis: true +import { getAction } from '@api/manage' +import InspectionOrderBatchHandle from './InspectionOrder/InspectionOrderBatchHandle' +import WeekMaintenanceBatchApprovalModal from './weekMaintenance/WeekMaintenanceBatchApprovalModal' +import AssignFileStreamHandle from '@views/flowable/workflow/assignFileStream/AssignFileStreamHandle.vue' +import DispatchFileHandle from '@views/flowable/workflow/dispatchFile/DispatchFileHandle.vue' +import DispatchFileBachHandleStyle from '@views/flowable/workflow/dispatchFile/DispatchFileBachHandleStyle#Drawer.vue' +import OutBoundOrderHandle from '@views/flowable/workflow/outBoundOrder/OutBoundOrderHandle.vue' +import EquipmentLeanOutApprovalModal from '@views/flowable/workflow/leanOut/EquipmentLeanOutApprovalModal.vue' +import SecondMaintenanceApprovalModal + from '@views/flowable/workflow/secondMaintenance/SecondMaintenanceApprovalModal.vue' +import ThirdMaintenanceApprovalModal from '@views/flowable/workflow/thirdMaintenance/ThirdMaintenanceApprovalModal.vue' +import EquipmentSealUpApprovalModal from '@views/flowable/workflow/sealUp/EquipmentSealUpApprovalModal.vue' +import stocktakingBoundHandle from '@views/flowable/workflow/stocktakingBound/stocktakingBoundHandle.vue' +import lossBoundHandle from '@views/flowable/workflow/lossBound/lossBoundHandle.vue' - }, - { - title: '涓婁竴姝ュ鐞嗕汉', - align: 'center', - dataIndex: 'preNodeAssignee_dictText', - width: 150 - }, - { - title: '鍓嶉┍鑺傜偣', - align: 'center', - dataIndex: 'preNode', - width: 200 - }, - { - title: '褰撳墠鑺傜偣', - align: 'center', - dataIndex: 'name', - width: 200 - }, - { - title: '褰撳墠鑺傜偣寮�濮嬫椂闂�', - align: 'center', - dataIndex: 'createTime', - width: 200 - }, - { - title: '鎿嶄綔', - dataIndex: 'action', - scopedSlots: { customRender: 'action' }, - align: 'center', - width: 150, - fixed: 'right' +export default { + name: 'NcDeviceCharactersList', + mixins: [JeecgListMixin, mixinDevice], + components: { + lossBoundHandle, + stocktakingBoundHandle, + AssignFileStreamHandle, + DispatchFileHandle, + DispatchFileBachHandleStyle, + WeekMaintenanceBatchApprovalModal, + InspectionOrderBatchHandle, + JDictSelectTag, + WeekMaintenanceApprovalModal, + RepairOrderApprovalModal, + InspectionOrderHandle, + EquipmentLeanOutApprovalModal, + SecondMaintenanceApprovalModal, + ThirdMaintenanceApprovalModal, + OutBoundOrderHandle, + EquipmentSealUpApprovalModal + }, + data() { + return { + description: '宸ヤ綔娴�-鎴戠殑寰呭姙', + // 琛ㄥご + columns: [ + { + title: '搴忓彿', + dataIndex: '', + key: 'rowIndex', + width: 60, + align: 'center', + customRender: function(t, r, index) { + return parseInt(index) + 1 } - ], - url: { - list: '/assign/flow/toTaskBySelf', - isSameNode: '/assign/flow/isSameNode' }, - dictOptions: {}, - selectShenpiData: {}, - selectDispatchFileXqData:{}, - selectInspectionOrderData: {}, - selectWeekMaintenanceData: {}, - selectSecondMaintenanceData: {}, - selectThirdMaintenanceData: {}, - selectBachData: {}, - selectRepairOrderData: {}, - selectOutBoundOrderData: {}, - //涓氬姟淇℃伅ID - dataId: undefined - } - }, - created() { - }, - computed: { - importExcelUrl: function() { - return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}` + { + title: '娴佺▼鍒嗙被', + align: 'center', + dataIndex: 'category_dictText' + }, + { + title: '娴佺▼鍚嶇О', + align: 'center', + dataIndex: 'flowName', + width: 200 + }, + { + title: '娴佺▼涓氬姟绠�瑕佹弿杩�', + align: 'center', + dataIndex: 'description', + width: 350, + ellipsis: true + + }, + { + title: '涓婁竴姝ュ鐞嗕汉', + align: 'center', + dataIndex: 'preNodeAssignee_dictText', + width: 150 + }, + { + title: '鍓嶉┍鑺傜偣', + align: 'center', + dataIndex: 'preNode', + width: 200 + }, + { + title: '褰撳墠鑺傜偣', + align: 'center', + dataIndex: 'name', + width: 200 + }, + { + title: '褰撳墠鑺傜偣寮�濮嬫椂闂�', + align: 'center', + dataIndex: 'createTime', + width: 200 + }, + { + title: '鎿嶄綔', + dataIndex: 'action', + scopedSlots: { customRender: 'action' }, + align: 'center', + width: 150, + fixed: 'right' + } + ], + url: { + list: '/assign/flow/toTaskBySelf', + isSameNode: '/assign/flow/isSameNode' }, - getTableColumnsTotalWidth() { - return this.columns.reduce((total, item) => total + item.width, 0) - } + dictOptions: {}, + selectShenpiData: {}, + selectDispatchFileXqData: {}, + selectInspectionOrderData: {}, + selectWeekMaintenanceData: {}, + selectSecondMaintenanceData: {}, + selectThirdMaintenanceData: {}, + selectBachData: {}, + selectRepairOrderData: {}, + selectOutBoundOrderData: {}, + selectLossBoundOrderData: {}, + selectStocktakingBoundOrderData: {}, + //涓氬姟淇℃伅ID + dataId: undefined + } + }, + created() { + }, + computed: { + importExcelUrl: function() { + return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}` }, - methods: { - loadData(arg) { - if (!this.url.list) { - this.$message.error('璇疯缃畊rl.list灞炴��!') - return - } - //鍔犺浇鏁版嵁 鑻ヤ紶鍏ュ弬鏁�1鍒欏姞杞界涓�椤电殑鍐呭 - if (arg === 1) { - this.ipagination.current = 1 - } - var params = this.getQueryParams()//鏌ヨ鏉′欢 - if (!params) { - return false - } - this.loading = true - 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 (res.result.total) { - this.ipagination.total = res.result.total - } else { - this.ipagination.total = 0 - } - if (this.selectedRowKeys.length > 0) this.selectedRowKeys = this.selectionRows = [] - //update-end---author:zhangyafei Date:20201118 for锛氶�傞厤涓嶅垎椤电殑鏁版嵁鍒楄〃------------ + getTableColumnsTotalWidth() { + return this.columns.reduce((total, item) => total + item.width, 0) + } + }, + methods: { + loadData(arg) { + if (!this.url.list) { + this.$message.error('璇疯缃畊rl.list灞炴��!') + return + } + //鍔犺浇鏁版嵁 鑻ヤ紶鍏ュ弬鏁�1鍒欏姞杞界涓�椤电殑鍐呭 + if (arg === 1) { + this.ipagination.current = 1 + } + var params = this.getQueryParams()//鏌ヨ鏉′欢 + if (!params) { + return false + } + this.loading = true + 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 (res.result.total) { + this.ipagination.total = res.result.total } else { - this.$message.warning(res.message) + this.ipagination.total = 0 } - }).finally(() => { - this.loading = false + if (this.selectedRowKeys.length > 0) this.selectedRowKeys = this.selectionRows = [] + //update-end---author:zhangyafei Date:20201118 for锛氶�傞厤涓嶅垎椤电殑鏁版嵁鍒楄〃------------ + } else { + this.$message.warning(res.message) + } + }).finally(() => { + this.loading = false + }) + }, + + handelDetail(item, index) { + console.log('鐐瑰嚮浜嗚鎯�') + console.log('item----->', item) + console.log('index----->', index) + let processType = this.splitAprocessType(item.category) + console.log('processType--->', processType) + switch (processType) { + case 'drApproval': + this.handDrDetial(item) + break + case 'ggApproval': + this.handDispatchFileDetial(item) + break + case 'sbdjApproval': + this.handInspectionOrder(item) + break + case 'WEEK_MAINTENANCE': + this.handleWeekMaintenance(item) + break + case 'eam_repair': + this.handleRepairOrder(item) + break + case 'equipment_lean_out': + this.handleEquipmentLeanOut(item) + break + case 'second_maintenance': + this.handleSecondMaintenance(item) + break + case 'third_maintenance': + this.handleThirdMaintenance(item) + break + case 'toolOutStorageApproval': + this.handleToolOutStorageApproval(item) + break + case 'toolsStocktakingBound': + this.handleToolStocktakingApproval(item) + break + case 'toolsLossApproval': + this.handleToolLossApproval(item) + break + case 'equipment_seal_up': + this.handleEquipmentSealUp(item) + break + default: + alert('娌℃壘鍒拌娴佺▼') + } + }, + + batchHandle() { + const categorySet = new Set(this.selectionRows.map(item => item.category)) + const nameSet = new Set(this.selectionRows.map(item => item.name)) + if (categorySet.size !== 1 || nameSet.size !== 1) { + this.$notification.info({ + message: '娑堟伅', + description: '璇烽�夋嫨鍚屼竴娴佺▼鍒嗙被涓嬬殑鍚屼竴褰撳墠鑺傜偣' }) - }, + return + } - handelDetail(item, index) { - console.log('鐐瑰嚮浜嗚鎯�') - console.log('item----->', item) - console.log('index----->', index) - let processType = this.splitAprocessType(item.category) - console.log('processType--->', processType) - switch (processType) { - case 'drApproval': - this.handDrDetial(item) - break - case 'ggApproval': - this.handDispatchFileDetial(item) - break - case 'sbdjApproval': - this.handInspectionOrder(item) - break - case 'WEEK_MAINTENANCE': - this.handleWeekMaintenance(item) - break - case 'eam_repair': - this.handleRepairOrder(item) - break - case 'equipment_lean_out': - this.handleEquipmentLeanOut(item) - break - case 'second_maintenance': - this.handleSecondMaintenance(item) - break - case 'third_maintenance': - this.handleThirdMaintenance(item) - break - case 'toolOutStorageApproval': - this.handleToolOutStorageApproval(item) - break - case 'equipment_seal_up': - this.handleEquipmentSealUp(item) - break - default: - alert('娌℃壘鍒拌娴佺▼') - } - }, + if (categorySet.has('eam_repair')) { + this.$notification.info({ + message: '娑堟伅', + description: '璁惧缁翠慨娴佺▼鏃犳硶鎵归噺澶勭悊' + }) + return + } - batchHandle() { - const categorySet = new Set(this.selectionRows.map(item => item.category)) - const nameSet = new Set(this.selectionRows.map(item => item.name)) - if (categorySet.size !== 1 || nameSet.size !== 1) { - this.$notification.info({ - message: '娑堟伅', - description: '璇烽�夋嫨鍚屼竴娴佺▼鍒嗙被涓嬬殑鍚屼竴褰撳墠鑺傜偣' - }) - return - } + if (categorySet.has('sbdjApproval')) { + this.$refs.inspectionOrderBatchHandleRef.visible = true + this.$refs.inspectionOrderBatchHandleRef.title = this.selectionRows[0].name + this.$refs.inspectionOrderBatchHandleRef.getAllApproveData(this.selectionRows[0]) + this.$refs.inspectionOrderBatchHandleRef.getBasicInformation(this.selectionRows[0]) + } else if (categorySet.has('WEEK_MAINTENANCE')) { + this.$refs.weenMaintenanceBatchApprovalModalRef.handleDetail(this.selectionRows[0]) + this.$refs.weenMaintenanceBatchApprovalModalRef.title = this.selectionRows[0].name + } + }, - if (categorySet.has('eam_repair')) { - this.$notification.info({ - message: '娑堟伅', - description: '璁惧缁翠慨娴佺▼鏃犳硶鎵归噺澶勭悊' - }) - return - } + splitAprocessType(title) { + let parts = title.split('锛�') // 娉ㄦ剰鍐掑彿鏄叏瑙掑瓧绗︼紝浣跨敤瀵瑰簲鐨勫瓧杩涜鍒嗗壊 + let result = parts[0] + return result + }, - if (categorySet.has('sbdjApproval')) { - this.$refs.inspectionOrderBatchHandleRef.visible = true - this.$refs.inspectionOrderBatchHandleRef.title = this.selectionRows[0].name - this.$refs.inspectionOrderBatchHandleRef.getAllApproveData(this.selectionRows[0]) - this.$refs.inspectionOrderBatchHandleRef.getBasicInformation(this.selectionRows[0]) - } else if (categorySet.has('WEEK_MAINTENANCE')) { - this.$refs.weenMaintenanceBatchApprovalModalRef.handleDetail(this.selectionRows[0]) - this.$refs.weenMaintenanceBatchApprovalModalRef.title = this.selectionRows[0].name - } - }, + handDrDetial(item) { + this.selectShenpiData = item + this.$refs.modalFormApproval.clearTableSource() + this.$refs.modalFormApproval.getAllApproveData(item) + }, - splitAprocessType(title) { - let parts = title.split('锛�') // 娉ㄦ剰鍐掑彿鏄叏瑙掑瓧绗︼紝浣跨敤瀵瑰簲鐨勫瓧杩涜鍒嗗壊 - let result = parts[0] - return result - }, + handDispatchFileDetial(item) { + console.log('item----->', item) + this.selectDispatchFileXqData = item + this.$refs.modalFormDispatchFileXq.clearTableSource() + this.$refs.modalFormDispatchFileXq.getAllApproveData(item) + }, - handDrDetial(item) { - this.selectShenpiData = item - this.$refs.modalFormApproval.clearTableSource() - this.$refs.modalFormApproval.getAllApproveData(item) - }, + handInspectionOrder(record) { + console.log('record----->', record) + this.selectInspectionOrderData = Object.assign({}, record) + this.$refs.modalFormInspectionOrder.visible = true + this.$refs.modalFormInspectionOrder.title = record.name + this.$refs.modalFormInspectionOrder.getAllApproveData(record) + this.$refs.modalFormInspectionOrder.getBasicInformation(record) + }, - handDispatchFileDetial(item){ - console.log('item----->', item) - this.selectDispatchFileXqData = item - this.$refs.modalFormDispatchFileXq.clearTableSource() - this.$refs.modalFormDispatchFileXq.getAllApproveData(item) - }, + handleWeekMaintenance(item) { + if (item && item.dataId) { + this.selectWeekMaintenanceData = Object.assign({}, item) + this.$refs.weekMaintenanceApprovalModal.handleDetail(item) + this.$refs.weekMaintenanceApprovalModal.title = item.name + this.$refs.weekMaintenanceApprovalModal.disableSubmit = false + } + }, - handInspectionOrder(record) { - console.log('record----->', record) - this.selectInspectionOrderData = Object.assign({}, record) - this.$refs.modalFormInspectionOrder.visible = true - this.$refs.modalFormInspectionOrder.title = record.name - this.$refs.modalFormInspectionOrder.getAllApproveData(record) - this.$refs.modalFormInspectionOrder.getBasicInformation(record) - }, + /** + * 鐐瑰嚮璁惧缁翠慨鍒嗙被娴佺▼璇︽儏鏃惰Е鍙� + * @param record + */ + handleRepairOrder(record) { + this.selectRepairOrderData = Object.assign({}, record) + this.$refs.repairOrderApprovalModal.visible = true + this.$refs.repairOrderApprovalModal.title = record.name + this.$refs.repairOrderApprovalModal.getAllApproveData(record) + this.$refs.repairOrderApprovalModal.getBasicInformation(record) + }, + handleEquipmentLeanOut(item) { + this.$refs.equipmentLeanOutApprovalModelRef.visible = true + this.$refs.equipmentLeanOutApprovalModelRef.title = item.name + this.$refs.equipmentLeanOutApprovalModelRef.handleDetail(item) + this.$refs.equipmentLeanOutApprovalModelRef.disableSubmit = false + }, + handleSecondMaintenance(item) { + if (item && item.dataId) { + this.selectSecondMaintenanceData = Object.assign({}, item) + this.$refs.secondMaintenanceApprovalModal.handleDetail(item) + this.$refs.secondMaintenanceApprovalModal.title = item.name + this.$refs.secondMaintenanceApprovalModal.disableSubmit = false + } + }, + handleThirdMaintenance(item) { + if (item && item.dataId) { + this.selectThirdMaintenanceData = Object.assign({}, item) + this.$refs.thirdMaintenanceApprovalModal.handleDetail(item) + this.$refs.thirdMaintenanceApprovalModal.title = item.name + this.$refs.thirdMaintenanceApprovalModal.disableSubmit = false + } + }, + handleToolOutStorageApproval(item) { + if (item && item.dataId) { + this.selectOutBoundOrderData = Object.assign({}, item) + this.$refs.outBoundOrderHandle.auditVisible = true + this.$refs.outBoundOrderHandle.clearTableSource() + this.$refs.outBoundOrderHandle.getAllApproveData(item) + } + }, + handleToolStocktakingApproval(item) { + if (item && item.dataId) { + this.selectStocktakingBoundOrderData = Object.assign({}, item) + this.$refs.stocktakingBoundHandle.auditVisible = true + this.$refs.stocktakingBoundHandle.clearTableSource() + this.$refs.stocktakingBoundHandle.getAllApproveData(item) + } + }, + handleToolLossApproval(item) { + if (item && item.dataId) { + this.selectLossBoundOrderData = Object.assign({}, item) + this.$refs.lossBoundHandle.auditVisible = true + this.$refs.lossBoundHandle.clearTableSource() + this.$refs.lossBoundHandle.getAllApproveData(item) + } + }, - - handleWeekMaintenance(item) { - if (item && item.dataId) { - this.selectWeekMaintenanceData = Object.assign({}, item) - this.$refs.weekMaintenanceApprovalModal.handleDetail(item) - this.$refs.weekMaintenanceApprovalModal.title = item.name - this.$refs.weekMaintenanceApprovalModal.disableSubmit = false - } - }, - - /** - * 鐐瑰嚮璁惧缁翠慨鍒嗙被娴佺▼璇︽儏鏃惰Е鍙� - * @param record - */ - handleRepairOrder(record) { - this.selectRepairOrderData = Object.assign({}, record) - this.$refs.repairOrderApprovalModal.visible = true - this.$refs.repairOrderApprovalModal.title = record.name - this.$refs.repairOrderApprovalModal.getAllApproveData(record) - this.$refs.repairOrderApprovalModal.getBasicInformation(record) - }, - handleEquipmentLeanOut(item) { - this.$refs.equipmentLeanOutApprovalModelRef.visible = true - this.$refs.equipmentLeanOutApprovalModelRef.title = item.name - this.$refs.equipmentLeanOutApprovalModelRef.handleDetail(item) - this.$refs.equipmentLeanOutApprovalModelRef.disableSubmit = false - }, - handleSecondMaintenance(item) { - if (item && item.dataId) { - this.selectSecondMaintenanceData = Object.assign({}, item) - this.$refs.secondMaintenanceApprovalModal.handleDetail(item) - this.$refs.secondMaintenanceApprovalModal.title = item.name - this.$refs.secondMaintenanceApprovalModal.disableSubmit = false - } - }, - handleThirdMaintenance(item) { - if (item && item.dataId) { - this.selectThirdMaintenanceData = Object.assign({}, item) - this.$refs.thirdMaintenanceApprovalModal.handleDetail(item) - this.$refs.thirdMaintenanceApprovalModal.title = item.name - this.$refs.thirdMaintenanceApprovalModal.disableSubmit = false - } - }, - handleToolOutStorageApproval(item) { - if (item && item.dataId) { - this.selectOutBoundOrderData = Object.assign({}, item) - this.$refs.outBoundOrderHandle.auditVisible = true - this.$refs.outBoundOrderHandle.clearTableSource() - this.$refs.outBoundOrderHandle.getAllApproveData(item) - } - }, - handleEquipmentSealUp(item) { - this.$refs.equipmentSealUpApprovalModelRef.visible = true - this.$refs.equipmentSealUpApprovalModelRef.title = item.name - this.$refs.equipmentSealUpApprovalModelRef.handleDetail(item) - this.$refs.equipmentSealUpApprovalModelRef.disableSubmit = false - }, + handleEquipmentSealUp(item) { + this.$refs.equipmentSealUpApprovalModelRef.visible = true + this.$refs.equipmentSealUpApprovalModelRef.title = item.name + this.$refs.equipmentSealUpApprovalModelRef.handleDetail(item) + this.$refs.equipmentSealUpApprovalModelRef.disableSubmit = false } } +} </script> <style scoped> - @import '~@assets/less/common.less'; +@import '~@assets/less/common.less'; </style> \ No newline at end of file diff --git a/src/views/flowable/workflow/lossBound/lossBoundHandle.vue b/src/views/flowable/workflow/lossBound/lossBoundHandle.vue new file mode 100644 index 0000000..d0b2286 --- /dev/null +++ b/src/views/flowable/workflow/lossBound/lossBoundHandle.vue @@ -0,0 +1,499 @@ +<template> + <a-modal + :title="title" + :width="width" + :visible="visible" + :footer="null" + @cancel="handCancel" + > + <a-card :bordered="false"> + <div> + <b>{{ selectShenpiData.description }}</b> + <br> + <br> + <a-tag color="blue"> + 澶勭悊浜� {{ selectShenpiData.assignee_dictText }} + </a-tag> + <a-tag color="blue"> + 鍒涘缓鏃堕棿 {{ selectShenpiData.createTime }} + </a-tag> + <br> + <br> + <button @click="fetchAndShowBmp" class="btn-custom">鎵撳紑娴佺▼鍥�</button> + <div v-if="imageSrc"> + <img :src="imageSrc" alt="Fetched Image" /> + </div> + <hr class="shallow-hr"> + </div> + <div> + <b>鎶ユ崯璇︽儏</b> + <br> + <a-form :form="form"> + <a-spin :spinning="spinning"> + <a-tabs default-active-key="1" @change="callback"> + <a-tab-pane key="1" tab="鎶ユ崯鍩烘湰淇℃伅"> + <a-form-model ref="form" :model="tableRowRecord"> + <a-row> + <a-col :span="span"> + <a-form-model-item label="鎶ユ崯鍗曞崟鍙�" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="outNum"> + <a-input :disabled="coldisabled" v-model="tableRowRecord.orderCode"></a-input> + </a-form-model-item> + </a-col> + <a-col :span="span"> + <a-form-model-item label="鎶ユ崯浜�" :labelCol="labelCol" :wrapperCol="wrapperCol" + prop="outStorehouseType"> + <j-dict-select-tag :disabled="coldisabled" + v-model="tableRowRecord.losser" dictCode="sys_user,realname,id" + placeholder="璇烽�夋嫨" /> + </a-form-model-item> + </a-col> + </a-row> + <a-row> + <a-col :span="span"> + <a-form-model-item label="鎶ユ崯鏃堕棿" :labelCol="labelCol" :wrapperCol="wrapperCol" + prop="outboundTime"> + <j-date :disabled="coldisabled" v-model="tableRowRecord.lossTime" :show-time="true" + dateFormat="YYYY-MM-DD HH:mm" style="width: 100%" /> + </a-form-model-item> + </a-col> + <a-col :span="span"> + <a-form-model-item label="鎶ユ崯鍘熷洜" :labelCol="labelCol" :wrapperCol="wrapperCol" + prop="subjectMatter"> + <a-input :disabled="coldisabled" v-model="tableRowRecord.lossReason"></a-input> + </a-form-model-item> + </a-col> + </a-row> + <a-row> + <a-col :span="span"> + <a-form-model-item label="缁忔墜浜�" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="handler"> + <j-dict-select-tag :disabled="coldisabled" + v-model="tableRowRecord.handler" dictCode="sys_user,realname,id" + placeholder="璇烽�夋嫨" /> + </a-form-model-item> + </a-col> + <a-col :span="span"> + <a-form-model-item label="澶囨敞" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="remark"> + <a-textarea :disabled="coldisabled" v-model="tableRowRecord.remark" rows="4" /> + </a-form-model-item> + </a-col> + </a-row> + </a-form-model> + </a-tab-pane> + <a-tab-pane key="2" tab="鎶ユ崯鏄庣粏淇℃伅"> + <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="handler_dictText"> + <a-input :disabled="coldisabled" v-model="tableRowRecord.handler_dictText"></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="3">閫氳繃</a-select-option> + <a-select-option value="4">椹冲洖</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 { downFile, getAction, httpAction } from '@api/manage' + +export default { + name: 'lossBoundHandle', + 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: [], + 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: 'center', + dataIndex: 'toolCode' + }, + { + title: '宸ュ叿绫诲瀷', + align: 'center', + dataIndex: 'applicationType_dictText' + }, + { + title: '鎶ユ崯鍘熷洜', + align: 'center', + dataIndex: 'lossReason' + }, + { + title: '鎶ユ崯鏁伴噺', + align: 'center', + dataIndex: 'lossNumber' + }, + { + title: '涓枃鍚嶇О', + align: 'center', + dataIndex: 'chineseName' + }, + { + title: '鍨嬪彿/鍥惧彿', + align: 'center', + dataIndex: 'toolModel' + }, + { + title: '鍒�鍏锋潗鏂�', + align: 'center', + dataIndex: 'toolMaterial' + }, + { + title: '闆朵欢鏉愭枡', + align: 'center', + dataIndex: 'partMaterial' + }, + { + title: '鍘傚', + align: 'center', + dataIndex: 'supplierId' + }, + { + title: '瀛樺偍浣嶇疆(搴撲綅鍙�)', + align: 'center', + dataIndex: 'positionCode' + }, + + { + title: '鍒涘缓鏃堕棿', + align: 'center', + dataIndex: 'createTime' + }, + { + title: '澶囨敞', + align: 'center', + dataIndex: 'remark' + } + ], + validatorRules: { + status: { + rules: [ + { required: true, message: '璇烽�夋嫨瀹℃壒鐘舵��!' } + ] + } + }, + approveData: {}, + flowData: {}, + title: '瀹℃壒椤甸潰', + width: 1200, + visible: false, + // 琛ㄥご + url: { + queryOutBoundOrder: '/tms/toolsLossBound/queryById', + queryOutBoundDetailList: '/tms/toolsLossBound/listlossboundDetailByMainId', + diagramView: '/assign/flow/diagramView', + queryHisTaskList: '/assign/flow/queryHisTaskList', + approve: '/tms/outboundOrder/approval' + }, + 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('鏃犳硶鍔犺浇鍥剧墖锛岃绋嶅悗鍐嶈瘯銆�') + } + }, + 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 flowTaskVo = {} + flowTaskVo.status = that.assignFileStream.status + flowTaskVo.approvalOpinion = that.assignFileStream.approvalOpinion + flowTaskVo.comment = that.assignFileStream.approvalOpinion + 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 + console.log('琛ㄥ崟鎻愪氦鏁版嵁', flowTaskVo) + httpAction(url, flowTaskVo, method).then((res) => { + if (res.success) { + that.$message.success(res.message) + that.visible = false + //鍒锋柊琛ㄦ牸 + that.$emit('searchReset') + } else { + that.$message.warning(res.message) + } + }).finally(() => { + that.confirmLoading = false + }) + } + + }) + }, + getAllApproveData(item) { + this.visible = true + this.loading = true + console.log('selectShenpiData----->', this.selectShenpiData) + this.flowData = item + getAction(this.url.queryHisTaskList, { procInstId: item.procInstId }).then(res => { + if (res.success) { + this.hitaskDataSource = res.result + } + }) + getAction(this.url.queryOutBoundOrder, { id: item.dataId }).then((res => { + if (res.success) { + this.tableRowRecord = res.result + } + })) + getAction(this.url.queryOutBoundDetailList, { lossBoundId: item.dataId }).then(res => { + if (res.success) { + this.dataSource = res.result.records + 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> \ No newline at end of file diff --git a/src/views/tms/lossBound/LossboundDetailList.vue b/src/views/tms/lossBound/LossboundDetailList.vue new file mode 100644 index 0000000..bc54001 --- /dev/null +++ b/src/views/tms/lossBound/LossboundDetailList.vue @@ -0,0 +1,180 @@ +<template> + <a-card :bordered="false" :class="'cust-erp-sub-tab'"> + <!-- 鏌ヨ鍖哄煙 --> + + <!-- </div>--> + <!-- 鏌ヨ鍖哄煙-END --> + + <!-- 鎿嶄綔鎸夐挳鍖哄煙 --> + <div class="table-operator" v-if="mainId"> + + </div> + + <!-- table鍖哄煙-begin --> + <div> + + + <a-table + ref="table" + size="middle" + bordered + rowKey="id" + :scroll="{x:true}" + :columns="columns" + :dataSource="dataSource" + :pagination="ipagination" + :loading="loading" + :rowSelection="null" + @change="handleTableChange"> + + </a-table> + </div> + +<!-- <lossboundDetail-modal ref="modalForm" @ok="modalFormOk" :mainId="mainId"></lossboundDetail-modal>--> + </a-card> +</template> + +<script> + +import { JeecgListMixin } from '@/mixins/JeecgListMixin' +import LossboundDetailModal from './modules/LossboundDetailModal' + +export default { + name: 'LossboundDetailList', + mixins: [JeecgListMixin], + components: { LossboundDetailModal }, + props: { + mainId: { + type: String, + default: '', + required: false + } + }, + watch: { + mainId: { + immediate: true, + handler(val) { + if (!this.mainId) { + this.clearList() + } else { + this.queryParam['lossBoundId'] = val + this.loadData(1) + } + } + } + }, + data() { + return { + description: '鎶ユ崯绠$悊椤甸潰', + disableMixinCreated: true, + // 琛ㄥご + columns: [ + { + title: '#', + dataIndex: '', + key: 'rowIndex', + width: 60, + align: 'center', + customRender: function(t, r, index) { + return parseInt(index) + 1 + } + }, + { + title: '鍒�鍏风紪鍙�', + align: 'center', + dataIndex: 'toolCode' + }, + { + title: '宸ュ叿绫诲瀷', + align: 'center', + dataIndex: 'applicationType_dictText' + }, + { + title: '鎶ユ崯鍘熷洜', + align: 'center', + dataIndex: 'lossReason' + }, + { + title: '鎶ユ崯鏁伴噺', + align: 'center', + dataIndex: 'lossNumber' + }, + { + title: '涓枃鍚嶇О', + align: 'center', + dataIndex: 'chineseName' + }, + { + title: '鍨嬪彿/鍥惧彿', + align: 'center', + dataIndex: 'toolModel' + }, + { + title: '鍒�鍏锋潗鏂�', + align: 'center', + dataIndex: 'toolMaterial' + }, + { + title: '闆朵欢鏉愭枡', + align: 'center', + dataIndex: 'partMaterial' + }, + { + title: '鍘傚', + align: 'center', + dataIndex: 'supplierId' + }, + { + title: '瀛樺偍浣嶇疆(搴撲綅鍙�)', + align: 'center', + dataIndex: 'positionCode' + }, + + { + title: '鍒涘缓鏃堕棿', + align: 'center', + dataIndex: 'createTime' + }, + { + title: '澶囨敞', + align: 'center', + dataIndex: 'remark' + } + // { + // title: '鎿嶄綔', + // dataIndex: 'action', + // align:"center", + // fixed:"right", + // width:147, + // scopedSlots: { customRender: 'action' }, + // } + ], + url: { + list: '/tms/toolsLossBound/listlossboundDetailByMainId', + delete: '/tms/toolsLossBound/deleteLootboundDetail', + deleteBatch: '/tms/toolsLossBound/deleteBatchLossboundDetail', + exportXlsUrl: '/tms/toolsLossBound/exportLossboundDetail', + importUrl: '/tms/toolsLossBound/importLossboundDetail' + }, + } + }, + created() { + }, + computed: { + importExcelUrl() { + return `${window._CONFIG['domianURL']}/${this.url.importUrl}/${this.mainId}` + } + }, + methods: { + clearList() { + this.dataSource = [] + this.selectedRowKeys = [] + this.ipagination.current = 1 + } + + } +} +</script> +<style scoped> +@import '~@assets/less/common.less'; +</style> diff --git a/src/views/tms/lossBound/LossboundList.vue b/src/views/tms/lossBound/LossboundList.vue new file mode 100644 index 0000000..23d100c --- /dev/null +++ b/src/views/tms/lossBound/LossboundList.vue @@ -0,0 +1,307 @@ +<template> + <a-card :bordered="false"> + <!-- 鏌ヨ鍖哄煙 --> + <div class="table-page-search-wrapper"> + <a-form layout="inline" @keyup.enter.native="searchQuery"> + <a-row :gutter="24"> + <a-col :xl="6" :lg="7" :md="8" :sm="24"> + <a-form-item label="鎶ユ崯鍗曞崟鍙�"> + <a-input placeholder="璇疯緭鍏ユ姤鎹熷崟鍗曞彿" v-model="queryParam.orderCode"></a-input> + </a-form-item> + </a-col> + <a-col :xl="6" :lg="7" :md="8" :sm="24"> + <a-form-item label="瀹℃牳鐘舵��"> + <j-dict-select-tag placeholder="璇烽�夋嫨瀹℃牳鐘舵��" v-model="queryParam.orderStatus" + dictCode="approval_status"/> + </a-form-item> + </a-col> + <a-col :xl="6" :lg="7" :md="8" :sm="24"> + <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons"> + <a-button type="primary" @click="searchQuery" icon="search">鏌ヨ</a-button> + <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">閲嶇疆</a-button> + <a @click="handleToggleSearch" style="margin-left: 8px"> + {{ toggleSearchStatus ? '鏀惰捣' : '灞曞紑' }} + <a-icon :type="toggleSearchStatus ? 'up' : 'down'" /> + </a> + </span> + </a-col> + </a-row> + </a-form> + </div> + <!-- 鏌ヨ鍖哄煙-END --> + + <!-- 鎿嶄綔鎸夐挳鍖哄煙 --> + <div class="table-operator"> + <a-button @click="handleAdd" type="primary" icon="plus">鏂板</a-button> + + </div> + + <!-- table鍖哄煙-begin --> + <div> + + + <a-table + ref="table" + size="middle" + bordered + rowKey="id" + class="j-table-force-nowrap" + :scroll="{x:true}" + :columns="columns" + :dataSource="dataSource" + :pagination="ipagination" + :loading="loading" + :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange, type:'radio'}" + :customRow="clickThenSelect" + @change="handleTableChange"> + + <span slot="action" slot-scope="text, record"> + <a @click="handleDetail(record)">璇︽儏</a> + <span v-if="record.orderStatus === '1'"> + <a-divider type="vertical" /> + <a-popconfirm title="纭畾鎻愪氦鍚�?" @confirm="() => handleSubmit(record)"> + <a>鎻愪氦</a> + </a-popconfirm> + <a-divider type="vertical" /> + <a-dropdown> + <a class="ant-dropdown-link">鏇村<a-icon type="down" /></a> + <a-menu slot="overlay"> + <a-menu-item> + <a @click="handleEdit(record)">缂栬緫</a> + </a-menu-item> + <a-menu-item> + <a-popconfirm title="纭畾鍒犻櫎鍚�?" @confirm="() => handleDelete(record.id)"> + <a>鍒犻櫎</a> + </a-popconfirm> + </a-menu-item> + </a-menu> + </a-dropdown> + </span> + </span> + + </a-table> + </div> + + <a-tabs defaultActiveKey="1"> + <a-tab-pane tab="鎶ユ崯鐢宠鍗曟槑缁�" key="1"> + <LossboundDetailList ref="lossboundDetailList" :mainId="lossboundDetailMainId" /> + </a-tab-pane> + </a-tabs> + + <lossbound-modal ref="modalForm" @ok="modalFormOk"></lossbound-modal> + </a-card> +</template> + +<script> + +import { JeecgListMixin } from '@/mixins/JeecgListMixin' +import LossboundModal from './modules/LossboundModal' +import { deleteAction, getAction } from '@/api/manage' +import LossboundDetailList from './LossboundDetailList.vue' +import '@/assets/less/TableExpand.less' + +export default { + name: 'LooboundList', + mixins: [JeecgListMixin], + components: { + LossboundDetailList, + LossboundModal + }, + data() { + return { + description: 'tms_outbound_order绠$悊椤甸潰', + // 琛ㄥご + columns: [ + { + title: '鎶ユ崯鍗曞崟鍙�', + align: 'center', + dataIndex: 'orderCode' + }, + { + title: '瀹℃牳鐘舵��', + align: 'center', + dataIndex: 'orderStatus_dictText' + }, + { + title: '缁忔墜浜�', + align: 'center', + dataIndex: 'handler_dictText' + }, + { + title: '瀹℃牳浜�', + align: 'center', + dataIndex: 'reviewer_dictText' + }, + { + title: '瀹℃牳鏃堕棿', + align: 'center', + dataIndex: 'auditDate' + }, + { + title: '瀹℃牳鎰忚', + align: 'center', + dataIndex: 'approvalOpinion' + }, + { + title: '澶囨敞', + align: 'center', + dataIndex: 'remark' + }, + { + title: '鎿嶄綔', + dataIndex: 'action', + align: 'center', + fixed: 'right', + width: 147, + scopedSlots: { customRender: 'action' } + } + ], + url: { + list: '/tms/toolsLossBound/list', + delete: '/tms/toolsLossBound/delete', + submit: '/tms/toolsLossBound/submit', + deleteBatch: '/tms/toolsLossBound/deleteBatch', + exportXlsUrl: '/tms/toolsLossBound/exportXls', + importExcelUrl: 'tms/toolsLossBound/importExcel' + }, + /* 鍒嗛〉鍙傛暟 */ + ipagination: { + current: 1, + pageSize: 5, + pageSizeOptions: ['5', '10', '50'], + showTotal: (total, range) => { + return range[0] + '-' + range[1] + ' 鍏�' + total + '鏉�' + }, + showQuickJumper: true, + showSizeChanger: true, + total: 0 + }, + selectedMainId: '', + superFieldList: [], + lossboundDetailMainId: '' + } + }, + created() { + this.getSuperFieldList() + }, + computed: { + importExcelUrl: function() { + return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}` + } + }, + methods: { + modalFormOk() { + this.$refs.lossboundDetailList.clearList() + this.loadData() + }, + searchReset() { + this.queryParam = {} + this.onClearSelected() + this.$refs.lossboundDetailList.clearList() + this.loadData(1) + }, + initDictConfig() { + }, + clickThenSelect(record) { + return { + on: { + click: () => { + this.onSelectChange(record.id.split(','), [record]) + } + } + } + }, + onClearSelected() { + this.selectedRowKeys = [] + this.selectionRows = [] + this.selectedMainId = '' + this.lossboundDetailMainId = '' + }, + onSelectChange(selectedRowKeys, selectionRows) { + this.selectedMainId = selectedRowKeys[0] + this.selectedRowKeys = selectedRowKeys + this.selectionRows = selectionRows + this.lossboundDetailMainId = selectionRows[0]['id'] + }, + handleSubmit(record) { + getAction(this.url.submit, { id: record.id }).then((res) => { + if (res.success) { + this.$message.success(res.message) + this.loadData() + this.$refs.lossboundDetailList.clearList() + } else { + this.$message.warning(res.message) + } + }) + }, + handleDelete: function(id) { + if (!this.url.delete) { + this.$message.error('璇疯缃畊rl.delete灞炴��!') + return + } + var that = this + deleteAction(that.url.delete, { id: id }).then((res) => { + if (res.success) { + //閲嶆柊璁$畻鍒嗛〉闂 + that.reCalculatePage(1) + // that.$message.success(res.message); + that.$notification.success({ + message: '娑堟伅', + description: res.message + }) + that.loadData() + this.$refs.lossboundDetailList.clearList() + } else { + // that.$message.warning(res.message); + that.$notification.warning({ + message: '娑堟伅', + description: res.message + }) + } + }) + }, + loadData(arg) { + if (!this.url.list) { + this.$message.error('璇疯缃畊rl.list灞炴��!') + return + } + //鍔犺浇鏁版嵁 鑻ヤ紶鍏ュ弬鏁�1鍒欏姞杞界涓�椤电殑鍐呭 + if (arg === 1) { + this.ipagination.current = 1 + } + this.onClearSelected() + var params = this.getQueryParams()//鏌ヨ鏉′欢 + this.loading = true + getAction(this.url.list, params).then((res) => { + if (res.success) { + this.dataSource = res.result.records + this.ipagination.total = res.result.total + } + if (res.code === 510) { + this.$message.warning(res.message) + } + this.loading = false + }) + }, + getSuperFieldList() { + let fieldList = [] + fieldList.push({ type: 'string', value: 'orderCode', text: '鍑哄簱鍗曠紪鍙�', dictCode: '' }) + + fieldList.push({ type: 'string', value: 'handler', text: '缁忔墜浜�', dictCode: '' }) + fieldList.push({ type: 'sel_user', value: 'reviewer', text: '瀹℃牳浜�' }) + fieldList.push({ type: 'string', value: 'orderStatus', text: '瀹℃牳鐘舵��', dictCode: '' }) + fieldList.push({ type: 'date', value: 'auditDate', text: '瀹℃牳鏃堕棿' }) + fieldList.push({ type: 'string', value: 'approvalOpinion', text: '瀹℃牳鎰忚', dictCode: '' }) + fieldList.push({ type: 'string', value: 'subjectMatter', text: '棰嗙敤浜嬬敱', dictCode: '' }) + fieldList.push({ type: 'date', value: 'outboundTime', text: '鍑哄簱鏃堕棿' }) + fieldList.push({ type: 'string', value: 'remark', text: '澶囨敞', dictCode: '' }) + fieldList.push({ type: 'string', value: 'createBy', text: '鎿嶄綔鍛�', dictCode: '' }) + fieldList.push({ type: 'date', value: 'createTime', text: '鍒涘缓鏃堕棿' }) + this.superFieldList = fieldList + } + } +} +</script> +<style scoped> +@import '~@assets/less/common.less'; +</style> \ No newline at end of file diff --git a/src/views/tms/lossBound/modules/JSelectLossboundToolModal.vue b/src/views/tms/lossBound/modules/JSelectLossboundToolModal.vue new file mode 100644 index 0000000..ad06f5d --- /dev/null +++ b/src/views/tms/lossBound/modules/JSelectLossboundToolModal.vue @@ -0,0 +1,221 @@ +<template> + <!--鏀寔鍏ㄥ睆缂╂斁--> + <j-modal + :visible="visible" + :width="1200" + :title="title" + switchFullscreen + @ok="handleSubmit" + @cancel="close" + style="top: 50px" + cancelText="鍏抽棴" + > + <a-card :bordered="false"> + <div class="table-page-search-wrapper"> + <a-form layout="inline" @keyup.enter.native="searchQuery"> + <a-row :gutter="24"> + <a-col :xl="6" :lg="7" :md="8" :sm="24"> + <a-form-item label="宸ュ叿缂栫爜"> + <a-input placeholder="璇疯緭鍏ュ伐鍏风紪鐮�,鏀寔妯$硦鏌ヨ" v-model="queryParam.toolCode"></a-input> + </a-form-item> + </a-col> + <a-button type="primary" @click="searchQuery" icon="search">鏌ヨ</a-button> + <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">閲嶇疆</a-button> + </a-row> + </a-form> + </div> + <!--鍑哄簱鍗曞垪琛�--> + <a-table + ref="table" + size="middle" + :columns="columns" + :dataSource="dataSource" + :pagination="ipagination" + :rowSelection="rowSelection" + :loading="loading" + @change="handleTableChange" + > + </a-table> + </a-card> + </j-modal> +</template> + +<script> +import { filterObj } from '@/utils/util' +import { getAction } from '@api/manage' + +export default { + name: 'JSelectLossboundToolModal', + components: {}, + props: {}, + data() { + return { + title: '閫夋嫨鍑哄簱宸ュ叿', + queryParam: {}, + columns: [ + { + title: '#', + dataIndex: '', + key: 'rowIndex', + width: 60, + align: 'center', + customRender: (_, __, index) => parseInt(index) + 1 + }, + { + title: '宸ュ叿缂栫爜', + align: 'center', + dataIndex: 'toolCode' + }, + { + title: '涓枃鍚嶇О', + align: 'center', + dataIndex: 'chineseName' + }, + { + title: '鍨嬪彿/鍥惧彿', + align: 'center', + dataIndex: 'toolModel' + } + ], + selectedRowKeys: [], + oldSelectRow: [], + scrollTrigger: { x: 1500, y: 500 }, + dataSource: [], + selectionRows: [], + ipagination: { + current: 1, + pageSize: 10, + pageSizeOptions: ['5', '10', '20'], + showTotal: (total, range) => { + return range[0] + '-' + range[1] + ' 鍏�' + total + '鏉�' + }, + showQuickJumper: true, + showSizeChanger: true, + total: 0, + }, + isorter: { + column: 'toolCode', + order: 'asc', + }, + departTree: [], + visible: false, + loading: false, + prepareKnifeDetailList:[], + url: { + list: '/tms/baseTools/listWithLedgerAndConfig' + }, + } + }, + computed: { + rowSelection() { + return { + type: 'checkbox', + onChange: (selectedRowKeys, selectedRows) => { + this.selectedRowKeys = selectedRowKeys + this.onSelectChange(selectedRows) + }, + getCheckboxProps: (record) => ({ + props: { + disabled: record.disabled, + }, + }), + } + }, + }, + watch: { + }, + created() { + }, + methods: { + async loadData(arg) { + if (arg === 1) { + this.ipagination.current = 1 + } + this.loading = true + let params = this.getQueryParams() //鏌ヨ鏉′欢 + console.log(params) + await getAction(this.url.list, params).then((res) => { + if (res.success) { + this.dataSource = res.result.records + this.ipagination.total = res.result.total + } + if (res.code === 510) { + this.$message.warning(res.message) + } + this.loading = false + }) + }, + showModal(oldSelectRow) { + this.oldSelectRow = oldSelectRow + this.visible = true + this.queryParam.status = '1' + this.queryParam.excludeIds = oldSelectRow + this.loadData(1) + }, + getQueryParams() { + let param = Object.assign({}, this.queryParam, this.isorter) + param.field = this.getQueryField() + param.pageNo = this.ipagination.current + param.pageSize = this.ipagination.pageSize + return filterObj(param) + }, + //鏌ヨ鏉′欢澶勭悊 + getQueryField() { + let fields = ['id']; + for (let a = 0; a < this.columns.length; a++) { + fields.push(this.columns[a].dataIndex); + } + return fields.join(','); + }, + searchReset() { + this.queryParam = {} + this.loadData(1) + }, + close() { + this.queryParam = {} + // this.searchReset(0) + this.selectedRowKeys = [] + this.selectionRows = [] + this.visible = false + }, + handleTableChange(pagination, filters, sorter) { + if (Object.keys(sorter).length > 0) { + this.isorter.column = sorter.field + this.isorter.order = 'ascend' === sorter.order ? 'asc' : 'desc' + } + this.ipagination = pagination + this.loadData() + }, + handleSubmit() { + if (this.selectionRows.length > 0) { + this.$bus.$emit('selectionRows', this.selectionRows) + // this.searchReset(0) + this.close() + } else { + this.$message.warning('璇疯嚦灏戦�夋嫨涓�鏉℃暟鎹�') + } + }, + onSelectChange(selectionRows) { + this.selectionRows = selectionRows + }, + searchQuery() { + this.loadData(1) + }, + }, +} +</script> + +<style scoped> +.ant-table-tbody .ant-table-row td { + padding-top: 10px; + padding-bottom: 10px; +} + +#components-layout-demo-custom-trigger .trigger { + font-size: 18px; + line-height: 64px; + padding: 0 24px; + cursor: pointer; + transition: color 0.3s; +} +</style> \ No newline at end of file diff --git a/src/views/tms/lossBound/modules/LossboundDetailModal.vue b/src/views/tms/lossBound/modules/LossboundDetailModal.vue new file mode 100644 index 0000000..adaba74 --- /dev/null +++ b/src/views/tms/lossBound/modules/LossboundDetailModal.vue @@ -0,0 +1,141 @@ +<template> + <j-modal + :title="title" + :width="width" + :visible="visible" + :confirmLoading="confirmLoading" + switchFullscreen + @ok="handleOk" + @cancel="handleCancel" + cancelText="鍏抽棴"> + <a-spin :spinning="confirmLoading"> + <a-form-model ref="form" :model="model" :rules="validatorRules"> + <a-row> + <a-col :span="24"> + <a-form-model-item label="鍒�鍏风紪鐮�" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="toolCode"> + <a-input v-model="model.toolCode" placeholder="璇疯緭鍏ュ垁鍏风紪鐮�"></a-input> + </a-form-model-item> + </a-col> + <a-col :span="24"> + <a-form-model-item label="鐢宠鍑哄簱鏁伴噺" :labelCol="labelCol" :wrapperCol="wrapperCol" + prop="outboundQuantity"> + <a-input-number v-model="model.outboundQuantity" placeholder="璇疯緭鍏ョ敵璇峰嚭搴撴暟閲�" style="width: 100%" /> + </a-form-model-item> + </a-col> + <a-col :span="24"> + <a-form-model-item label="浠撳簱" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="storageLocation"> + <a-input v-model="model.storageLocation" placeholder="璇疯緭鍏ヤ粨搴�"></a-input> + </a-form-model-item> + </a-col> + <a-col :span="24"> + <a-form-model-item label="鍑哄簱搴撲綅" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="outboundLocation"> + <a-input v-model="model.outboundLocation" placeholder="璇疯緭鍏ュ嚭搴撳簱浣�"></a-input> + </a-form-model-item> + </a-col> + <a-col :span="24"> + <a-form-model-item label="鍑哄簱鐘舵��;1.鏈嚭搴擄紱2.閮ㄥ垎鍑哄簱锛�3.鍑哄簱瀹屾垚" :labelCol="labelCol" + :wrapperCol="wrapperCol" prop="status"> + <a-input-number v-model="model.status" placeholder="璇疯緭鍏ュ嚭搴撶姸鎬�;1.鏈嚭搴擄紱2.閮ㄥ垎鍑哄簱锛�3.鍑哄簱瀹屾垚" + style="width: 100%" /> + </a-form-model-item> + </a-col> + </a-row> + </a-form-model> + </a-spin> + </j-modal> +</template> + +<script> + +import { httpAction } from '@/api/manage' + +export default { + name: 'LossboundDetailModal', + components: {}, + props: { + mainId: { + type: String, + required: false, + default: '' + } + }, + data() { + return { + title: '鎿嶄綔', + width: 800, + visible: false, + model: {}, + labelCol: { + xs: { span: 24 }, + sm: { span: 5 } + }, + wrapperCol: { + xs: { span: 24 }, + sm: { span: 16 } + }, + + confirmLoading: false, + validatorRules: {}, + url: { + add: '/tms/toolsLossBound/add', + edit: '/tms/toolsLossBound/edit' + } + + } + }, + created() { + //澶囦唤model鍘熷鍊� + this.modelDefault = JSON.parse(JSON.stringify(this.model)) + }, + methods: { + add() { + this.edit(this.modelDefault) + }, + 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' + } + this.model['outStorehouseId'] = this.mainId + 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> diff --git a/src/views/tms/lossBound/modules/LossboundModal.vue b/src/views/tms/lossBound/modules/LossboundModal.vue new file mode 100644 index 0000000..62782be --- /dev/null +++ b/src/views/tms/lossBound/modules/LossboundModal.vue @@ -0,0 +1,427 @@ +<template> + <j-modal + :title="title" + :width="width" + :visible="visible" + :confirmLoading="confirmLoading" + switchFullscreen + @ok="handleOk" + @cancel="handleCancel" + cancelText="鍏抽棴"> + <a-spin :spinning="confirmLoading"> + <a-form-model ref="form" :model="model" :rules="validatorRules"> + <a-row> + <a-col :span="12"> + <a-form-model-item label="鎶ユ崯鍗曞崟鍙�" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="orderCode"> + <a-input v-model="model.orderCode" placeholder="绯荤粺鑷姩鐢熸垚" :disabled="true"></a-input> + </a-form-model-item> + </a-col> + <a-col :span="12"> + <a-form-model-item label="鎶ユ崯浜�" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="losser"> + <j-dict-select-tag :disabled="disableSubmit" + v-model="model.losser" dictCode="sys_user,realname,id" + placeholder="璇烽�夋嫨" /> + </a-form-model-item> + </a-col> + </a-row> + <a-row> + <a-col :span="12"> + <a-form-model-item label="鎶ユ崯鏃堕棿" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="lossTime"> + + <j-date placeholder="璇烽�夋嫨鎶ユ崯鏃堕棿" date-format="YYYY-MM-DD HH:mm:ss" v-model="model.lossTime" + style="width: 100%" /> + </a-form-model-item> + </a-col> + <a-col :span="12"> + <a-form-model-item label="瀹℃牳浜�" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="reviewer"> + <!-- <j-dict-select-tag :disabled="disableSubmit"--> + <!-- v-model="model.reviewer" dictCode="sys_user,realname,id"--> + <!-- placeholder="璇烽�夋嫨" />--> + <j-select-user-by-dep :disabled="disableSubmit" v-model="model.reviewer" :store="'username'" + :text="'realname'" :multi="false" /> + </a-form-model-item> + </a-col> + </a-row> + <a-row> + + <a-col :span="12"> + <a-form-model-item v-if="addShow" label="缁忔墜浜�" :labelCol="labelCol" :wrapperCol="wrapperCol" + prop="handler"> + + <j-dict-select-tag :disabled="disableSubmit" + v-model="model.handler" dictCode="sys_user,realname,id" + placeholder="璇烽�夋嫨" /> + </a-form-model-item> + </a-col> + <a-col :span="12"> + <a-form-model-item v-if="addShow" label="瀹℃牳鐘舵��" :labelCol="labelCol" :wrapperCol="wrapperCol" + prop="orderStatus"> + <j-dict-select-tag type="list" v-model="model.orderStatus" dictCode="out_bill_status" + placeholder="璇烽�夋嫨瀹℃牳鐘舵��" disabled /> + </a-form-model-item> + </a-col> + </a-row> + <a-row> + <a-col :span="12"> + <a-form-model-item v-if="addShow" label="瀹℃牳鏃堕棿" :labelCol="labelCol" :wrapperCol="wrapperCol" + prop="approvalDate"> + + <j-date placeholder="璇烽�夋嫨瀹℃牳鏃堕棿" date-format="YYYY-MM-DD HH:mm:ss" v-model="model.approvalDate" + style="width: 100%" /> + </a-form-model-item> + </a-col> + </a-row> + <a-row> + <a-col :span="12"> + <a-form-model-item v-if="addShow" label="瀹℃牳鎰忚" :labelCol="labelCol" :wrapperCol="wrapperCol" + prop="approvalOpinion"> + <a-input v-model="model.approvalOpinion" placeholder="璇疯緭鍏ュ鏍告剰瑙�" disabled></a-input> + </a-form-model-item> + </a-col> + </a-row> + <a-row> + <a-col :span="12"> + <a-form-model-item label="澶囨敞" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="remark"> + <a-textarea :disabled="disableSubmit" v-model="model.remark" rows="4" placeholder="璇疯緭鍏ュ娉�" /> + </a-form-model-item> + </a-col> + </a-row> + <a-row> + <a-col :span="12"> + <a-form-model-item label="鎶ユ崯鍘熷洜" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="lossReason"> + <a-textarea :disabled="disableSubmit" v-model="model.lossReason" rows="4" placeholder="璇疯緭鍏ュ娉�" /> + </a-form-model-item> + </a-col> + </a-row> + </a-form-model> + </a-spin> + + <a-button type="primary" :style="{ marginBottom: '8px' }" @click="selectTools"> + 閫夋嫨宸ュ叿 + </a-button> + <a-table + ref="table" + size="middle" + bordered + rowKey="id" + :scroll="{x:true}" + :columns="columns" + :dataSource="dataSource" + :pagination="ipagination" + :loading="loading" + :rowSelection="null" + @change="handleTableChange"> + + <template v-for="col in columns" :slot="col.dataIndex" slot-scope="text, record, index"> + <a-input-number :disabled="disableSubmit" :value="text" v-if="col.dataIndex == 'lossNumber'" :min="0" + :max="99999" + @change="(e) => handleChange(e, record.key, col, index)" style="width: 100%;" /> + <a-textarea + v-if="col.dataIndex == 'lossReason'" + :disabled="disableSubmit" + style="margin: -5px 0" + :value="text" + @change="(e) => handleChange(e.target.value, record.key, col, index)" + /> + + </template> + <span slot="action" v-if="disableSubmit === false" slot-scope="text, record, index"> + <a-popconfirm title="纭畾鍒犻櫎鍚�?" @confirm="() => handleDelete(record, index)"> + <a>鍒犻櫎</a> + </a-popconfirm> + </span> + </a-table> + <template slot="footer" v-if="disableSubmit === false"> + <a-button :style="{ marginRight: '8px' }" @click="handleCancel">鍏抽棴</a-button> + <a-button @click="handleOk" :disabled="isDisabled" type="primary">纭畾</a-button> + </template> + + <j-select-lossbound-tool-modal ref="selectLossBoundToolModal"></j-select-lossbound-tool-modal> + </j-modal> + +</template> + +<script> + +import { httpAction } from '@/api/manage' +import LossboundDetailList from '../LossboundDetailList.vue' +import JSelectLossboundToolModal from './JSelectLossboundToolModal.vue' +import { getAction } from '../../../../api/manage' + +export default { + name: 'LossboundModal', + components: { + LossboundDetailList, + JSelectLossboundToolModal + }, + data() { + return { + title: '', + width: 1200, + visible: false, + disableSubmit: false, + isDisabled: false, + addShow: true, + selectBorrowTool: false, + model: {}, + labelCol: { + xs: { span: 24 }, + sm: { span: 5 } + }, + wrapperCol: { + xs: { span: 24 }, + sm: { span: 16 } + }, + //琛ㄦ牸鍙傛暟 + ipagination: { + current: 1, + pageSize: 10, + total: 0 + }, + dataSource: [], + loading: false, + // 琛ㄥご + columns: [ + { + title: '#', + dataIndex: '', + key: 'rowIndex', + align: 'center', + customRender: function(t, r, index) { + return parseInt(index) + 1 + }, + width: 50 + }, + { + title: '鍒�鍏风紪鍙�', + dataIndex: 'toolCode', + align: 'center', + width: 150 + }, + + { + title: '宸ュ叿绫诲瀷', + dataIndex: 'applicationType', + align: 'center', + width: 150 + }, + + { + title: '涓枃鍚嶇О', + dataIndex: 'chineseName', + width: 150, + align: 'center' + }, + + { + title: '鍨嬪彿/鍥惧彿', + dataIndex: 'toolModel', + width: 150, + align: 'center' + }, + + { + title: '鍒�鍏锋潗鏂�', + width: 150, + dataIndex: 'toolMaterial', + align: 'center' + }, + { + title: '闆朵欢鏉愭枡', + width: 150, + dataIndex: 'partMaterial', + align: 'center' + }, + { + title: '鍘傚', + width: 150, + dataIndex: 'supplierId', + align: 'center' + + }, + { + title: '瀛樺偍浣嶇疆', + width: 150, + dataIndex: 'goodsShelvesId', + align: 'center' + }, + { + title: '鎶ユ崯鍘熷洜', + width: 150, + dataIndex: 'lossReason', + align: 'center', + scopedSlots: { customRender: 'lossReason' } + }, + + { + title: '鎶ユ崯鏁伴噺', + dataIndex: 'lossNumber', + align: 'center', + width: 150, + scopedSlots: { customRender: 'lossNumber' } + }, + + { + title: '澶囨敞', + width: 150, + dataIndex: 'remark', + align: 'center' + }, + { + title: '鎿嶄綔', + width: 150, + dataIndex: 'action', + scopedSlots: { customRender: 'action' }, + align: 'center' + } + ], + confirmLoading: false, + validatorRules: { + lossReason: [ + { required: true, message: '璇疯緭鍏ユ姤鎹熷師鍥�' } + ], + lossTime: [ + { required: true, message: '璇疯緭鍏ユ姤鎹熸椂闂�!' } + ], + losser: [ + { required: true, message: '璇疯緭鍏ユ姤鎹熶汉!' } + ], + + }, + url: { + list: '/tms/toolsLossBound/listlossboundDetailByMainId', + add: '/tms/toolsLossBound/addTotal', + edit: '/tms/toolsLossBound/editTotal' + } + + } + }, + created() { + //澶囦唤model鍘熷鍊� + this.modelDefault = JSON.parse(JSON.stringify(this.model)) + }, + mounted() { + this.$bus.$on('selectionRows', (data) => { + for (let i = 0; i < data.length; i++) { + this.dataSource.push({ + toolId: data[i].id, + toolCode: data[i].toolCode, + classifyId: data[i].classifyId, + applicationType: data[i].applicationType_dictText, + chineseName: data[i].chineseName, + toolModel: data[i].toolModel, + material: data[i].material, + supplierId: data[i].supplierId, + goodsShelvesId: data[i].positionCode, + toolMaterial: data[i].toolMaterial, + partMaterial: data[i].partMaterial + + }) + } + this.ipagination.total = this.dataSource.length + }) + }, + methods: { + + handleDelete(record, index) { + this.dataSource.splice(index, 1) + }, + handleChange(value, key, column, index) { + console.log(value, key, column, index) + const temp = [...this.dataSource] + const target = temp.filter(item => key === item.key)[index] + if (target) { + target[column.dataIndex] = value + this.dataSource = temp + if (column.dataIndex === 'lossNumber') { + + target[column.dataIndex] = value + } + if (column.dataIndex === 'lossReason') { + target[column.dataIndex] = value + } + this.dataSource = temp + } + }, + + selectTools: function() { + let ids = [] + for (let i = 0; i < this.dataSource.length; i++) { + ids.push(this.dataSource[i].id) + } + this.$refs.selectLossBoundToolModal.showModal(ids) + this.$refs.selectLossBoundToolModal.title = '閫夋嫨宸ュ叿淇℃伅' + this.$refs.selectLossBoundToolModal.disableSubmit = false + }, + add() { + this.addShow = false + this.edit() + this.dataSource = [] + }, + edit(record) { + console.log(record) + this.model = Object.assign({}, record) + this.visible = true + getAction(this.url.list, { + lossBoundId: record.id, + pageNo: 1, + pageSize: 99999 + }).then((res) => { + if (res.success) { + console.log(res.result.records) + this.dataSource = res.result.records + } else { + this.dataSource = null + } + }) + }, + + close() { + this.$emit('close') + this.addShow = true + this.selectBorrowTool = false + this.visible = false + this.$refs.form.clearValidate() + }, + handleTableChange(pagination, filters, sorter) { + this.ipagination = pagination + }, + handleOk() { + const that = this + // 瑙﹀彂琛ㄥ崟楠岃瘉 + this.$refs.form.validate(valid => { + if (valid) { + this.model.toolsLossBoundDetailList = this.dataSource + 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> \ No newline at end of file diff --git a/src/views/tms/requirement/ToolSharpeningList .vue b/src/views/tms/requirement/ToolSharpeningList .vue new file mode 100644 index 0000000..d864f8c --- /dev/null +++ b/src/views/tms/requirement/ToolSharpeningList .vue @@ -0,0 +1,302 @@ +<template> + <a-card :bordered="false"> + <!-- 鏌ヨ鍖哄煙 --> + <div class="table-page-search-wrapper"> + <a-form layout="inline" @keyup.enter.native="searchQuery"> + <a-row :gutter="24"> + <a-col :xl="4" :lg="7" :md="8" :sm="24"> + <a-form-item label="鍒�鍏峰悕绉�"> + <a-input placeholder="璇疯緭鍏ュ垁鍏峰悕绉�" v-model="queryParam.toolName"></a-input> + </a-form-item> + </a-col> + <a-col :xl="4" :lg="7" :md="8" :sm="24"> + <a-form-item label="鍒冪(缁撴灉"> + <a-input placeholder="璇疯緭鍏ュ垉纾ㄧ粨鏋�" v-model="queryParam.grindingResult"></a-input> + </a-form-item> + </a-col> + <a-col :xl="6" :lg="7" :md="8" :sm="24"> + <a-form-item label="鍒冪(鏃堕棿"> + <a-range-picker v-model="queryParam.inspectionDateRange" @change="onInspectionDateChange" format="YYYY-MM-DD" value-format="YYYY-MM-DD" /> + </a-form-item> + </a-col> + <a-col :xl="4" :lg="7" :md="8" :sm="24"> + <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons"> + <a-button type="primary" @click="searchQuery" icon="search">鏌ヨ</a-button> + <a-button type="info" @click="searchReset" icon="reload" style="margin-left: 8px">閲嶇疆</a-button> + </span> + </a-col> + </a-row> + </a-form> + </div> + <!-- 鏌ヨ鍖哄煙-END --> + + <!-- 鎿嶄綔鎸夐挳鍖哄煙 --> + <div class="table-operator"> + <div class="table-operator"> + <a-button @click="handleAdd" type="primary" icon="plus">鏂板</a-button> + </div> + </div> + + <!-- table鍖哄煙-begin --> + <div> + + + <a-table + ref="table" + size="middle" + :scroll="{x:true}" + bordered + rowKey="id" + :columns="columns" + :dataSource="dataSource" + :pagination="ipagination" + :loading="loading" + :rowSelection="null" + class="j-table-force-nowrap" + @change="handleTableChange"> + + + + <span slot="action" slot-scope="text, record"> + <a @click="handleDetail(record)">璇︽儏</a> + + <a-divider type="vertical" /> + <a-dropdown> + <a class="ant-dropdown-link">鏇村 <a-icon type="down" /></a> + <a-menu slot="overlay"> + <a-menu-item> + <a @click="handleEdit(record)">缂栬緫</a> + </a-menu-item> + <a-menu-item> + <a-popconfirm title="纭畾鍒犻櫎鍚�?" @confirm="() => handleDelete(record.id)"> + <a>鍒犻櫎</a> + </a-popconfirm> + </a-menu-item> + </a-menu> + </a-dropdown> + </span> + + </a-table> + </div> + + <tools-sharpening-modal ref="modalForm" :treeSelected="treeSelected" @ok="modalFormOk"></tools-sharpening-modal> + </a-card> +</template> + +<script> + +import '@/assets/less/TableExpand.less' +import { mixinDevice } from '@/utils/mixin' +import { JeecgListMixin } from '@/mixins/JeecgListMixin' +import ToolsSharpeningModal from './modules/ToolsSharpeningModal' +import { getAction, putAction, deleteAction } from '../../../api/manage' + +export default { + name: 'ToolSharpeningList ', + mixins:[JeecgListMixin, mixinDevice], + components: { + ToolsSharpeningModal + }, + data () { + return { + description: '鍒�鍏峰垉纾�', + // 琛ㄥご + columns: [ + { + title: '#', + dataIndex: '', + key:'rowIndex', + width:60, + align:"center", + customRender:function (t,r,index) { + return parseInt(index)+1; + } + }, + { + title:'鍒�鍏峰垎绫�', + align:"center", + dataIndex: 'warehouseId' + }, + { + title:'鍒�鍏风紪鍙�', + align:"center", + dataIndex: 'warehouseName' + }, + { + title:'鍒�鍏峰悕绉�', + align:"center", + dataIndex: 'warehouseName' + }, + { + title:'鍒�鍏锋潗鏂�', + align:"center", + dataIndex: 'parentWarehouseName', + }, + { + title:'鍘傚', + align:"center", + dataIndex: 'status', + }, + { + title:'闆朵欢鏉愭枡', + align:"center", + dataIndex: 'remark' + }, + + { + title:'鍒冪(鏃堕棿', + align:"center", + dataIndex: 'createBy' + }, + { + title:'鍒冪(缁撴灉鍙婂缓璁�', + align:"center", + dataIndex: 'createBy' + }, + { + title:'璐d换浜�', + align:"center", + dataIndex: 'createBy' + }, + + { + title:'鍒涘缓浜�', + align:"center", + dataIndex: 'createBy' + }, + + { + title:'鍒涘缓鏃堕棿', + align:"center", + dataIndex: 'createTime' + }, + { + title: '鎿嶄綔', + dataIndex: 'action', + align:"center", + fixed:"right", + width:147, + scopedSlots: { customRender: 'action' } + } + ], + url: { + list: "/tms/toolSharpening/list", + delete: "/tms/toolSharpening/delete", + edit: "/tms/toolSharpening/edit", + deleteBatch: "/tms/toolSharpening/deleteBatch", + exportXlsUrl: "/tms/toolSharpening/exportXls", + importExcelUrl: "tms/toolSharpening/importExcel", + + }, + dictOptions:{}, + superFieldList:[], + treeSelected: {}, + } + }, + created() { + this.getSuperFieldList(); + }, + computed: { + importExcelUrl: function(){ + return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`; + }, + addFlag: function(){ + return !(this.treeSelected.key && this.treeSelected.entity.leafFlag === '2'); + } + }, + mounted() { + this.handleGetCurrSelected = (data) => { + this.treeSelected = data; + this.queryParam.parentId = data.key; + this.loadData(); + } + this.$bus.$on('getCurrSelected', this.handleGetCurrSelected); + }, + beforeDestroy() { + this.$bus.$off('getCurrSelected', this.handleGetCurrSelected); + }, + methods: { + handleStatus(record) { + getAction(this.url.list, { parentId: record.id }).then((res) => { + if (res.success) { + if (res.result.total > 0) { + this.$message.warning('璇ヨ妭鐐逛笅瀛樺湪瀛愯妭鐐癸紝涓嶈兘鍙樻洿鐘舵�侊紒') + } else { + const params = { + id: record.id, + status: record.status === '1' ? '2' : '1' + } + putAction(this.url.edit, params).then((res) => { + if (res.success) { + this.$message.success(res.message) + this.loadData() + } else { + this.$message.warning(res.message) + } + }) + } + } else { + this.$message.warning(res.message); + } + }); + + }, + handleDelete(id) { + getAction(this.url.list, { parentId: id }).then((res) => { + if (res.success) { + if (res.result.total > 0) { + this.$message.warning('璇峰厛鍒犻櫎瀛愯妭鐐�'); + } else { + deleteAction(this.url.delete, {id: id}).then((res) => { + if (res.success) { + //閲嶆柊璁$畻鍒嗛〉闂 + this.loadData() + this.$message.success(res.message); + this.$bus.$emit('queryTreeData') + } else { + this.$message.warning(res.message); + } + }); + } + } else { + this.$message.warning(res.message); + } + }) + }, + searchReset() { + this.queryParam = { + parentId: this.treeSelected.key + } + this.loadData(1) + }, + modalFormOk() { + this.loadData() + this.$bus.$emit('queryTreeData') + }, + initDictConfig(){ + }, + getSuperFieldList(){ + let fieldList=[]; + fieldList.push({type:'string',value:'toolId',text:'宸ュ叿缂栧彿',dictCode:''}) + fieldList.push({type:'string',value:'warehouseName',text:'浠撳簱鍚嶇О',dictCode:''}) + fieldList.push({type:'string',value:'parentId',text:'鐖惰妭鐐圭紪鍙�',dictCode:''}) + fieldList.push({type:'string',value:'seq',text:'灞曠ず搴忓彿',dictCode:''}) + fieldList.push({type:'string',value:'leafFlag',text:'鏄惁鍙跺瓙鑺傜偣(1鏄�;2鍚�)',dictCode:''}) + fieldList.push({type:'string',value:'status',text:'鐘舵�侊紙1鍚敤;2鍋滅敤锛�',dictCode:''}) + fieldList.push({type:'string',value:'remark',text:'澶囨敞',dictCode:''}) + fieldList.push({type:'string',value:'createBy',text:'鍒涘缓浜�',dictCode:''}) + fieldList.push({type:'date',value:'createTime',text:'鍒涘缓鏃堕棿'}) + this.superFieldList = fieldList + } + } +} +</script> +<style scoped> +@import '~@assets/less/common.less'; +.enable { + color: green; +} +.disable { + color: red; +} +</style> \ No newline at end of file diff --git a/src/views/tms/requirement/modules/ToolsModal.vue b/src/views/tms/requirement/modules/ToolsModal.vue new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/src/views/tms/requirement/modules/ToolsModal.vue diff --git a/src/views/tms/requirement/modules/ToolsSharpeningModal.vue b/src/views/tms/requirement/modules/ToolsSharpeningModal.vue new file mode 100644 index 0000000..37c0fb8 --- /dev/null +++ b/src/views/tms/requirement/modules/ToolsSharpeningModal.vue @@ -0,0 +1,385 @@ +<template> + <j-modal + :title="title" + :width="1200" + :visible="visible" + :confirmLoading="confirmLoading" + switchFullscreen + centered + :mask-closable="false" + @ok="handleOk" + @cancel="handleCancel" + cancelText="鍏抽棴"> + + <a-spin :spinning="spinning"> + <a-form-model ref="form" :model="model" :rules="validatorRules" :labelCol="labelCol" :wrapperCol="wrapperCol"> + <a-row :gutter="24"> + <a-col :span="8"> + <a-form-model-item prop="standardCode" label="宸ュ叿缂栧彿"> + <a-input-search v-model="model.toolsId" placeholder="璇烽�夋嫨宸ュ叿缂栧彿" :disabled="disableSubmit" @search="onSearchPart" enter-button + /> + </a-form-model-item> + </a-col> + <a-col :span="10"> + <a-form-model-item prop="equipmentId" label="宸ュ叿鍒嗙被鍚嶇О"> + <a-input placeholder="璇疯緭鍏ュ伐鍏峰垎绫诲悕绉�" v-model="model.typeName" readOnly/> + </a-form-model-item> + </a-col> + + </a-row> + <a-row :gutter="24"> + <a-col :span="8"> + <a-form-model-item prop="standardCode" label="宸ュ叿鍙傛暟鏍囪瘑"> + <a-input placeholder="閫夋嫨璁惧鍚庤嚜鍔ㄥ甫鍑�" readOnly v-model="model.paraTypeFlagName" readOnly/> + </a-form-model-item> + </a-col> + <a-col :span="8"> + <a-form-model-item label="宸ュ叿绫诲瀷"> + <a-input placeholder="閫夋嫨璁惧鍚庤嚜鍔ㄥ甫鍑�" v-model="model.applicationType" readOnly/> + </a-form-model-item> + </a-col> + </a-row> + + <a-row :gutter="24"> + <a-col :span="8"> + <a-form-model-item prop="operator" label="璐d换浜�"> + <j-dict-select-tag type="list" v-model="model.reportPerson" dictCode="sys_user,realname,id" placeholder="璇烽�夋嫨鎶ュ伐浜哄憳" /> + </a-form-model-item> + </a-col> + <a-col :span="8"> + <a-form-model-item prop="standardName" label="宸ュ叿鍒嗙被缂栫爜"> + <a-input placeholder="閫夋嫨璁惧鍚庤嚜鍔ㄥ甫鍑�" readOnly v-model="model.classifyId" readOnly/> + </a-form-model-item> + </a-col> + </a-row> + + <a-row :gutter="24"> + <a-col :span="8"> + <a-form-model-item label="缁撴灉鍙婂缓璁�" prop="inspectionDate"> + <a-input placeholder="閫夋嫨濉啓鍒冪(缁撴灉鍙婂缓璁�" v-model="model.sharpeningResult" readOnly/> + </a-form-model-item> + </a-col> + <a-col :span="6"> + <a-form-model-item label="鍨嬪彿/鍥惧彿"> + <j-date placeholder="閫夋嫨濉啓鍨嬪彿/鍥惧彿" v-model="model.toolModel" disabled style="width: 100%"/> + </a-form-model-item> + </a-col> + </a-row> + <a-row :gutter="24"> + <a-col :span="8"> + <a-form-model-item label="浠撳簱鍩庡競" prop="inspectionDate"> + <a-input placeholder="閫夋嫨濉啓浠撳簱鐪佷唤鍩庡競" v-model="model.provinceCity" readOnly/> + </a-form-model-item> + </a-col> + <a-col :span="8"> + <a-form-model-item label="搴撳尯/搴撳彿"> + <j-date placeholder="閫夋嫨濉啓搴撳尯/搴撳彿" v-model="model.warehouseId" disabled style="width: 100%"/> + </a-form-model-item> + </a-col> + </a-row> + <a-row :gutter="24"> + <a-col :span="8"> + <a-form-model-item label="瀛樺偍浣嶇疆" prop="inspectionDate"> + <a-input placeholder="閫夋嫨濉啓瀛樺偍浣嶇疆" v-model="model.storageLocation" readOnly/> + </a-form-model-item> + </a-col> + <a-col :span="8"> + <a-form-model-item label="璁¢噺涓诲崟浣�"> + <j-date placeholder="璇峰~鍐欒閲忎富鍗曚綅" v-model="model.mainUnit" disabled style="width: 100%"/> + </a-form-model-item> + </a-col> + </a-row> + <a-row :gutter="24"> + <a-col :span="8"> + <a-form-model-item label="鍒冪(鏃堕棿" prop="inspectionDate"> + <j-date placeholder="璇烽�夋嫨鎵撳嵃鏃堕棿" v-model="model.sharpeningTime" style="width: 100%" /> + </a-form-model-item> + </a-col> + + </a-row> + <a-row :gutter="24"> + <a-col :span="24"> + <a-form-model-item label="澶囨敞" :labelCol="{span:2}" :wrapperCol="{span:21}" prop="remark"> + <a-textarea v-model="model.remark" rows="3" placeholder="璇疯緭鍏ュ娉�"/> + </a-form-model-item> + </a-col> + </a-row> + </a-form-model> + </a-spin> + </j-modal> +</template> + +<script> +import { getAction, httpAction } from '@/api/manage' +import { JVxeTableModelMixin } from '@/mixins/JVxeTableModelMixin.js' +import { JVXETypes } from '@/components/jeecg/JVxeTable' +import MaintenanceEquipmentSelect from '@views/eam/equipment/modules/MaintenanceEquipmentSelect' +import moment from 'dayjs' + +export default { + name: 'ToolsSharpeningModal', + mixins: [JVxeTableModelMixin], + components: { + MaintenanceEquipmentSelect + }, + data() { + return { + title: '鎿嶄綔', + visible: false, + model: {}, + labelCol: { + xs: { span: 24 }, + sm: { span: 6 } + }, + wrapperCol: { + xs: { span: 24 }, + sm: { span: 15 } + }, + confirmLoading: false, + spinning: false, + disabled: false, + validatorRules: { + // standardName: [ + // { required: true, message: '璇疯緭鍏ユ爣鍑嗗悕绉�!' } + // ], + inspectionDate: [ + { required: true, message: '璇烽�夋嫨鐐规鏃ユ湡!' } + ], + // maintenancePeriod: [ + // { required: true, message: '璇疯緭鍏ヤ繚鍏诲懆鏈燂紝鍗曚綅锛氬ぉ!' } + // ], + equipmentId: [ + { required: true, message: '璇烽�夋嫨璁惧!' } + ] + }, + url: { + add: '/eam/eamInspectionOrder/add', + edit: '/eam/eamInspectionOrder/edit', + detail: '/eam/eamMaintenanceStandardDetail/queryList', + detailOrder: '/eam/eamInspectionOrderDetail/queryList', + userSelect: '/eam/user_select/list' + }, + maintenanceCategory: 'POINT_INSPECTION', + maintenanceOperatorOptions: [], + standardId: '', + standardType: false, + detail: { + loading: false, + dataSource: [], + columns: [ + { + title: '搴忓彿', + key: 'itemCode', + type: JVXETypes.inputNumber, + width: '10%', + align: 'center', + validateRules: [ + { required: true, unique: true, message: '搴忓彿涓嶈兘閲嶅' } + ] + }, + { + title: '淇濆吇椤�', + key: 'itemName', + type: JVXETypes.textarea, + width: '20%', + align: 'center', + validateRules: [ + { required: true, message: '淇濆吇椤逛笉鑳戒负绌猴紒' } + ] + }, + { + title: '淇濆吇瑕佹眰', + key: 'itemDemand', + type: JVXETypes.textarea, + width: '30%', + align: 'center', + validateRules: [ + { required: true, message: '淇濆吇瑕佹眰涓嶈兘涓虹┖锛�' } + ] + } + ] + } + } + }, + created() { + }, + methods: { + add() { + this.model = {} + this.detail.dataSource = [] + this.visible = true + this.disabled = false + this.standardType = false + }, + + edit(record) { + this.model = Object.assign({}, record) + this.standardId = record.standardId + this.disabled = true + this.standardType = true + this.visible = true + this.detail.dataSource = [] + if (record && record.referenceFile) { + let obj = JSON.parse(record.referenceFile) + this.model.fileList = [obj] + } else { + this.model.fieldList = [] + } + this.loadDetailOrder(record.id) + }, + + async handleOk() { + const that = this + let errMap = await that.$refs.editableDetailTable.validateTable() + if (errMap) { + this.$message.warning('鏁版嵁鏍¢獙澶辫触锛�') + return + } + // 瑙﹀彂琛ㄥ崟楠岃瘉 + this.$refs.form.validate(valid => { + if (valid) { + let tableData = that.$refs.editableDetailTable.getTableData() + let removeData = that.$refs.editableDetailTable.getDeleteData() + that.model.tableDetailList = [...tableData] + that.model.removeDetailList = [...removeData] + + that.confirmLoading = that.spinning = true + let httpurl = '' + let method = '' + if (!this.model.id) { + httpurl += this.url.add + method = 'post' + } else { + httpurl += this.url.edit + method = 'put' + } + this.model.standardId = this.standardId + httpAction(httpurl, this.model, method).then((res) => { + if (res.success) { + that.$message.success(res.message) + that.$emit('ok') + that.close() + } else { + that.$message.warning(res.message) + } + }).finally(() => { + that.confirmLoading = that.spinning = false + }) + } else { + return false + } + }) + }, + onSearchPart() { + this.$refs.PartPopUp.showModals([this.model.enterpriseId]) + }, + + autocompleteForm(selectObj) { + this.model.standardName = selectObj.standardName + this.model.maintenancePeriod = selectObj.maintenancePeriod + this.model.standardCode = selectObj.standardCode + // 鑻ュ彇娑堣澶囬�夋嫨鍚庝繚鍏诲懆鏈熶负绌哄垯闇�娓呯┖鐐规鏃ユ湡鍜岀偣妫�杩囨湡鏃堕棿 + if (!this.model.equipmentId) { + delete this.model.inspectionDate + delete this.model.expirationTime + } else { + // 濡傛灉鐐规鏃ユ湡瀛樺湪锛屽垯鍦ㄩ噸鏂伴�夋嫨璁惧鍚庡嵆淇濆吇鍛ㄦ湡鍙兘鍙戠敓鏀瑰彉鍚庨噸鏂拌绠楄繃鏈熸椂闂� + if (this.model.inspectionDate) this.expirationTimeFrom(this.model.inspectionDate) + } + if (!this.standardType) { + console.log('this.standardType', this.standardType) + this.standardId = selectObj.id + this.loadDetail(selectObj.id) + } + this.$nextTick(() => this.loadMaintenanceOperatorList(this.model.equipmentId)) + }, + + expirationTimeFrom(date) { + //杩囨湡鏃堕棿鏄垵濮嬫椂闂�+淇濆吇鍛ㄦ湡 + if (date && this.model.maintenancePeriod) { + // 杞崲涓烘椂闂存埑瀛楃涓诧紙鎴栨寚瀹氭牸寮忥級 + this.model.expirationTime = moment(date) + .add(this.model.maintenancePeriod, 'days') + .format('YYYY-MM-DD') + } else { + this.model.expirationTime = null // 娓呯┖鏃犳晥鍊� + } + }, + + //鍔犺浇璇︽儏鏁版嵁 + loadDetail(standardId) { + this.detail.dataSource = [] + if (standardId) { + console.log('standardId', standardId) + this.spinning = true + getAction(this.url.detail, { standardId: standardId }) + .then(res => { + if (res.success) { + this.detail.dataSource = [...res.result] + } + }) + .finally(() => { + this.spinning = false + }) + } + }, + + loadDetailOrder(orderId) { + if (orderId) { + this.spinning = true + getAction(this.url.detailOrder, { orderId: orderId }) + .then(res => { + if (res.success) { + this.detail.dataSource = [...res.result] + } + }) + .finally(() => { + this.spinning = false + }) + } + }, + + loadMaintenanceOperatorList(equipmentId) { + this.maintenanceOperatorOptions = [] + let params = { positionCode: 'PCR0001' } + if (equipmentId) { + params.equipmentId = equipmentId + } else { + delete this.model.operator + return + } + const that = this + getAction(this.url.userSelect, params) + .then(res => { + if (res.success) { + that.maintenanceOperatorOptions = res.result.map(item => ({ + key: item.id, + value: item.username, + text: item.realname + })) + if (!that.maintenanceOperatorOptions.find(item => item.value === that.model.operator)) delete that.model.operator + } else { + if (that.model.operator) delete that.model.operator + } + }) + .catch(err => { + if (that.model.operator) delete that.model.operator + }) + }, + + handleCancel() { + this.close() + }, + + close() { + this.$emit('close') + this.visible = false + this.$refs.form.clearValidate() + } + } +} +</script> + +<style lang="less" scoped> + +</style> \ No newline at end of file diff --git a/src/views/tms/stocktakingBound/ToolsStocktaKingBoundDetail.vue b/src/views/tms/stocktakingBound/ToolsStocktaKingBoundDetail.vue new file mode 100644 index 0000000..692fd9e --- /dev/null +++ b/src/views/tms/stocktakingBound/ToolsStocktaKingBoundDetail.vue @@ -0,0 +1,225 @@ +<template> + <a-card :bordered="false"> + <div> + <a-table ref="table" size="middle" bordered rowKey="id" :scroll="{ x: true }" :columns="columns" + :dataSource="dataSource" :pagination="ipagination" :loading="loading" @change="handleTableChange"> + <span slot="num" slot-scope="text, record" class="fontweight"> + {{ record.num }} + </span> + + </a-table> + <template v-for="col in columns" :slot="col.dataIndex" slot-scope="text, record, index"> + </template> + </div> + </a-card> +</template> + +<script> +import { JeecgListMixin } from '@/mixins/JeecgListMixin' +import { getAction } from '@/api/manage' +import Tooltip from 'ant-design-vue/es/tooltip' +export default { + name: "ToolsStocktaKingBoundDetail", + components: { + Tooltip, + }, + mixins: [JeecgListMixin], + props: { + mainId: { + type: String, + default: '', + required: false + } + }, + watch: { + mainId: { + immediate: true, + handler(val) { + if (!this.mainId) { + this.clearList() + } else { + alert(val) + this.queryParam['stocktakingBoundId'] = val; + this.queryParam['delFlag'] = 0; + this.loadData(1); + } + } + } + }, + data() { + return { + columns: [ + { + title: '#', + dataIndex: '', + key: 'rowIndex', + align: 'center', + customRender: function(t, r, index) { + return parseInt(index) + 1 + }, + width: 50 + }, + + + { + title: '鍒�鍏风紪鍙�', + dataIndex: 'toolCode', + align: 'center' + }, + { + title: '宸ュ叿绫诲瀷', + dataIndex: 'applicationType_dictText', + align: 'center', + + }, + + { + title: '涓枃鍚嶇О', + dataIndex: 'chineseName', + align: 'center' + }, + + { + title: '鍨嬪彿/鍥惧彿', + dataIndex: 'toolModel', + align: 'center' + }, + { + title: '鍒�鍏锋潗鏂�', + dataIndex: 'toolMaterial', + align: 'center' + + }, + { + title: '闆朵欢鏉愭枡', + dataIndex: 'partMaterial', + align: 'center' + }, + { + title: '鍘傚', + dataIndex: 'supplierId', + align: 'center' + + }, + { + title: '瀛樺偍浣嶇疆(搴撲綅鍙�)', + dataIndex: 'goodsShelvesId', + align: 'center' + }, + + { + title: '璐﹂潰鏁伴噺', + dataIndex: 'bookQuantity', + align: 'center' + + }, + { + title: '鍙敤鏁伴噺', + dataIndex: 'availableQuantity', + align: 'center' + + }, + { + title: '瀹炵洏鏁伴噺', + dataIndex: 'practicalQuantity', + align: 'center' + }, + { + title: '宸紓鍊�', + dataIndex: 'differenceValue', + align: 'center' + }, + { + title: '鐩樹簭鐩樼泩', + dataIndex: 'surplusDeficit_dictText', + align: 'center' + }, + { + title: '鐩樺簱鏃堕棿', + dataIndex: 'stocktakingDate', + align: 'center' + }, + { + title: '澶囨敞', + dataIndex: 'remark', + align: 'center' + } + ], + url: { + list: "/tms/toolsStocktakingBound/listToolsStocktakingBoundControllerDetailsByMainId", + }, + /* 鍒嗛〉鍙傛暟 */ + ipagination: { + current: 1, + pageSize: 20, + pageSizeOptions: ['5', '10', '20', '50'], + showTotal: (total, range) => { + return range[0] + '-' + range[1] + ' 鍏�' + total + '鏉�' + }, + showQuickJumper: true, + showSizeChanger: true, + total: 0 + }, + } + }, + created() { + }, + computed: { + }, + methods: { + clearList() { + this.dataSource = [] + this.selectedRowKeys = [] + this.ipagination.current = 1 + }, + loadData(arg) { + if (!this.url.list) { + this.$message.error("璇疯缃畊rl.list灞炴��!") + return + } + //鍔犺浇鏁版嵁 鑻ヤ紶鍏ュ弬鏁�1鍒欏姞杞界涓�椤电殑鍐呭 + if (arg === 1) { + this.ipagination.current = 1; + } + var params = this.getQueryParams();//鏌ヨ鏉′欢 + this.loading = true; + getAction(this.url.list, params).then((res) => { + if (res.success) { + this.dataSource = res.result.records || res.result; + if (res.result.total) { + this.ipagination.total = res.result.total; + } else { + this.ipagination.total = 0; + } + //update-end---author:zhangyafei Date:20201118 for锛氶�傞厤涓嶅垎椤电殑鏁版嵁鍒楄〃------------ + } else { + this.$message.warning(res.message) + } + }).finally(() => { + this.loading = false + }) + }, + + + } +} +</script> +<style lang="less" scoped> +@import '~@assets/less/common.less'; + +.fontweight { + font-weight: bold; +} + +/deep/ .frozenRowClass { + color: #c9c9c9; +} + +.success { + color: green; +} + +.error { + color: red; +} +</style> diff --git a/src/views/tms/stocktakingBound/ToolsStocktakingBoundList.vue b/src/views/tms/stocktakingBound/ToolsStocktakingBoundList.vue new file mode 100644 index 0000000..28d161a --- /dev/null +++ b/src/views/tms/stocktakingBound/ToolsStocktakingBoundList.vue @@ -0,0 +1,321 @@ +<template> + <a-card :bordered="false"> + <!-- 鏌ヨ鍖哄煙 --> + <div class="table-page-search-wrapper"> + <a-form layout="inline" @keyup.enter.native="searchQuery"> + <a-row :gutter="24"> + <a-col :xl="6" :lg="7" :md="8" :sm="24"> + <a-form-item label="鐩樼偣鍗曞彿"> + <a-input placeholder="璇疯緭鍏ョ洏鐐瑰崟鍙�" v-model="queryParam.orderCode"></a-input> + </a-form-item> + </a-col> + <a-col :xl="6" :lg="7" :md="8" :sm="24"> + <a-form-item label="缁忔墜浜�"> + <j-dict-select-tag dictCode="sys_user,realname,id" placeholder="璇烽�夋嫨缁忔墜浜�" v-model="queryParam.handler" + /> + </a-form-item> + </a-col> + <a-col :xl="6" :lg="7" :md="8" :sm="24"> + <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons"> + <a-button type="primary" @click="searchQuery" icon="search">鏌ヨ</a-button> + <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">閲嶇疆</a-button> + <a @click="handleToggleSearch" style="margin-left: 8px"> + {{ toggleSearchStatus ? '鏀惰捣' : '灞曞紑' }} + <a-icon :type="toggleSearchStatus ? 'up' : 'down'"/> + </a> + </span> + </a-col> + </a-row> + </a-form> + </div> + <!-- 鏌ヨ鍖哄煙-END --> + + <!-- 鎿嶄綔鎸夐挳鍖哄煙 --> + <div class="table-operator"> + <a-button @click="handleAdd" type="primary" icon="plus">鏂板</a-button> + + +<!-- <a-dropdown v-if="selectedRowKeys.length > 0">--> +<!-- <a-menu slot="overlay">--> +<!-- <a-menu-item key="1" @click="batchDel"><a-icon type="delete"/>鍒犻櫎</a-menu-item>--> +<!-- </a-menu>--> +<!-- <a-button style="margin-left: 8px"> 鎵归噺鎿嶄綔 <a-icon type="down" /></a-button>--> +<!-- </a-dropdown>--> + </div> + + <!-- table鍖哄煙-begin --> + <div> + <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;"> + <i class="anticon anticon-info-circle ant-alert-icon"></i> 宸查�夋嫨 <a style="font-weight: 600">{{ selectedRowKeys.length }}</a>椤� + <a style="margin-left: 24px" @click="onClearSelected">娓呯┖</a> + </div> + + <a-table + ref="table" + size="middle" + bordered + rowKey="id" + class="j-table-force-nowrap" + :scroll="{x:true}" + :columns="columns" + :dataSource="dataSource" + :pagination="ipagination" + :loading="loading" + :rowSelection='{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange }' :customRow='clickThenSelect' + @change="handleTabChange"> + + + + <span slot="action" slot-scope="text, record"> + <a @click="handleDetail(record)">璇︽儏</a> + <span v-if="record.approvalStatus === '1'"> + <a-divider type="vertical" /> + <a-popconfirm title="纭畾鎻愪氦鍚�?" @confirm="() => handleSubmit(record)"> + <a>鎻愪氦</a> + </a-popconfirm> + <a-divider type="vertical" /> + <a-dropdown> + <a class="ant-dropdown-link">鏇村<a-icon type="down" /></a> + <a-menu slot="overlay"> + <a-menu-item> + <a @click="handleEdit(record)">缂栬緫</a> + </a-menu-item> + <a-menu-item> + <a-popconfirm title="纭畾鍒犻櫎鍚�?" @confirm="() => handleDelete(record.id)"> + <a>鍒犻櫎</a> + </a-popconfirm> + </a-menu-item> + </a-menu> + </a-dropdown> + </span> + </span> + </a-table> + <a-tabs defaultActiveKey="1"> + <!-- type="card" --> + <a-tab-pane tab='鐩樼偣鍗曟槑缁�' key="1"> + <div class="table-operator" style="margin:-16px"> + <tools-stockta-king-bound-detail ref="toolStockingBoundDetail" :mainId='mainId' /> + </div> + </a-tab-pane> + + </a-tabs> + </div> + + + <tools-stocktaking-bound-modal + ref="modalForm" + @ok="modalFormOk" + ></tools-stocktaking-bound-modal> + </a-card> +</template> + +<script> +import { JeecgListMixin } from '@/mixins/JeecgListMixin' +import ToolsStocktaKingBoundDetail from './ToolsStocktaKingBoundDetail.vue' +import ToolsStocktakingBoundModal from './modules/ToolsStocktakingBoundModal' +import '@/assets/less/TableExpand.less' +import { deleteAction, getAction } from '@api/manage' + +export default { + name: "ToolsStocktakingBoundList", + mixins:[JeecgListMixin], + components: { + ToolsStocktakingBoundModal, + ToolsStocktaKingBoundDetail + }, + data () { + return { + description: '鐩樼偣鍗曡〃绠$悊椤甸潰', + // 琛ㄥご + columns: [ + { + title: '#', + dataIndex: '', + key:'rowIndex', + width:60, + align:"center", + customRender:function (t,r,index) { + return parseInt(index)+1; + } + }, + { + title:'鐩樼偣鍗曞彿', + align:"center", + dataIndex: 'orderCode' + }, + { + title:'缁忔墜浜�', + align:"center", + dataIndex: 'handler_dictText' + }, + { + title:'瀹℃牳浜�', + align:"center", + dataIndex: 'reviewer_dictText' + }, + { + title:'鐩樼偣鍚嶇О', + align:"center", + dataIndex: 'stocktakingName' + }, + { + title:'澶囨敞', + align:"center", + dataIndex: 'remark' + }, + { + title:'瀹℃牳鐘舵��', + align:"center", + dataIndex: 'approvalStatus_dictText' + + }, + { + title:'瀹℃牳鎰忚', + align:"center", + dataIndex: 'approvalOpinion' + }, + { + title:'鐩樼偣鏃堕棿', + align:"center", + dataIndex: 'inventoryTime' + }, + { + title: '鎿嶄綔', + dataIndex: 'action', + align:"center", + fixed:"right", + width:147, + scopedSlots: { customRender: 'action' }, + } + ], + url: { + list: "/tms/toolsStocktakingBound/list", + submit:"/tms/toolsStocktakingBound/submit", + delete: "/tms/toolsStocktakingBound/delete", + deleteBatch: "/tms/toolsStocktakingBound/deleteBatch", + exportXlsUrl: "/tms/toolsStocktakingBound/exportXls", + importExcelUrl: "tms/toolsStocktakingBound/importExcel", + + }, + dictOptions:{}, + mainId: '', + superFieldList:[], + selectedMainId: '', + } + }, + created() { + }, + computed: { + importExcelUrl: function(){ + return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`; + } + }, + methods: { + clickThenSelect(record) { + return { + on: { + click: () => { + this.onSelectChange(record.id.split(','), [record]) + } + } + } + }, + onClearSelected() { + this.selectedRowKeys = [] + this.selectionRows = [] + + this.selectedMainId = '' + }, + onSelectChange(selectedRowKeys, selectionRows) { + if (selectedRowKeys.length == 1) { + this.mainId = selectionRows[0]['id'] + } else { + this.mainId = '' + } + this.selectedRowKeys = selectedRowKeys + this.selectionRows = selectionRows + }, + handleTabChange(pagination, filters, sorter) { + this.selectedRowKeys = [] + this.$refs.toolStockingBoundDetail.dataSource = [] + this.handleTableChange(pagination, filters, sorter) + }, + handleDelete: function (id) { + if (!this.url.delete) { + this.$message.error('璇疯缃畊rl.delete灞炴��!') + return + } + deleteAction(this.url.delete, { id: id }).then((res) => { + if (res.success) { + //閲嶆柊璁$畻鍒嗛〉闂 + this.reCalculatePage(1) + this.$message.success(res.message) + this.$refs.toolStockingBoundDetail.dataSource = [] + this.loadData() + } else { + this.$message.warning(res.message) + } + }) + }, + handleSubmit(record) { + getAction(this.url.submit,{ id: record.id }).then((res)=>{ + if (res.success) { + this.$message.success(res.message); + this.loadData(); + this.$refs.toolStockingBoundDetail.clearList() + } else { + this.$message.warning(res.message); + } + }) + }, + searchQuery() { + this.selectedRowKeys = []; + this.$refs.toolStockingBoundDetail.loadData(); + this.$refs.toolStockingBoundDetail.selectedRowKeys = []; + this.loadData(); + }, + searchReset() { + this.queryParam = {} + this.selectedRowKeys = [] + this.$refs.toolStockingBoundDetail.dataSource = [] + this.loadData(); + }, + modalFormOk() { + this.queryParam = {} + this.selectedRowKeys = [] + this.$refs.toolStockingBoundDetail.dataSource = [] + this.loadData(); + }, + + handleEdit: function (record) { + + console.log('record:', record) + this.$refs.modalForm.title = '缂栬緫' + this.$refs.modalForm.disableSubmit = false + this.$refs.modalForm.edit(record) + + }, + handleDetail:function(record){ + + this.$refs.modalForm.title="璇︽儏"; + this.$refs.modalForm.disableSubmit = true; + this.$refs.modalForm.edit(record); + }, + handleAdd: function () { + this.$refs.modalForm.disableSubmit = false + this.$refs.modalForm.title = "鏂板宸ュ叿鐢宠鍗�"; + this.$refs.modalForm.add(); + + console.log(this.$refs.modalForm.title); + + }, + + + initDictConfig(){ + }, + } + } +</script> +<style scoped> + @import '~@assets/less/common.less'; +</style> \ No newline at end of file diff --git a/src/views/tms/stocktakingBound/modules/ToolSelectorModal.vue b/src/views/tms/stocktakingBound/modules/ToolSelectorModal.vue new file mode 100644 index 0000000..eed4078 --- /dev/null +++ b/src/views/tms/stocktakingBound/modules/ToolSelectorModal.vue @@ -0,0 +1,216 @@ +<template> + <!--鏀寔鍏ㄥ睆缂╂斁--> + <a-modal :visible='visible' :title='title' switchFullscreen @ok='handleSubmit' @cancel='close' style='top:50px' + cancelText='鍏抽棴' :width='1500'> + <a-card :bordered='false'> + <div class='table-page-search-wrapper'> + <a-form layout='inline' @keyup.enter.native='searchQuery'> + <a-row :gutter='24'> + <a-col :md='8' :sm='6'> + <a-form-item label='宸ュ叿缂栫爜'> + <j-input placeholder='璇疯緭鍏ュ伐鍏风紪鐮�' v-model='queryParam.toolCode' /> + </a-form-item> + </a-col> + <a-col :md='3'> + <span style='float: left;overflow: hidden;' class='table-page-search-submitButtons'> + <a-button type='primary' @click='searchQuery' icon='search'>鏌ヨ</a-button> + <a-button @click='searchReset' icon='reload' style='margin-left: 10px'>閲嶇疆</a-button> + </span> + </a-col> + </a-row> + </a-form> + </div> + <a-table ref='table' :scroll='scrollTrigger' size='middle' rowKey='id' bordered :columns='columns' + :dataSource='dataSource' :pagination='ipagination' :rowSelection='rowSelection' :loading='loading' + @change='handleTableChange'> + + </a-table> + </a-card> + </a-modal> +</template> + +<script> +import { filterObj } from '@/utils/util' +import { getAction } from '@/api/manage' +import { JeecgListMixin } from '@/mixins/JeecgListMixin' + +export default { + name: 'ToolSelectorModal', + mixins: [JeecgListMixin], + components: {}, + props: {}, + data() { + return { + queryParam: {}, + columns: [ + { + title: '#', + dataIndex: '', + key: 'rowIndex', + width: 60, + align: 'center', + customRender: (_, __, index) => parseInt(index) + 1 + }, + { + title: '宸ュ叿缂栫爜', + align: 'center', + dataIndex: 'toolCode' + }, + { + title: '涓枃鍚嶇О', + align: 'center', + dataIndex: 'chineseName' + }, + { + title: '鍨嬪彿/鍥惧彿', + align: 'center', + dataIndex: 'toolModel' + } + ], + selectedRowKeys: [], + oldSelectRows: [], + scrollTrigger: {}, + dataSource: [], + selectionRows: [], + title: '鏍规嵁鏌ヨ缁撴灉閫夋嫨宸ュ叿', + ipagination: { + current: 1, + pageSize: 10, + pageSizeOptions: ['5', '10', '30', '50', '100'], + showTotal: (total, range) => { + return range[0] + '-' + range[1] + ' 鍏�' + total + '鏉�' + }, + showQuickJumper: true, + showSizeChanger: true, + total: 0 + }, + isorter: { + column: 'createTime', + order: 'desc' + }, + visible: false, + loading: false, + url: { + list: '/tms/baseTools/listWithLedgerAndConfig' + } + } + }, + computed: { + rowSelection() { + return { + type: 'checkbox', + onChange: (selectedRowKeys, selectedRows) => { + this.selectedRowKeys = selectedRowKeys + this.onSelectChange(selectedRows) + }, + getCheckboxProps: record => ({ + props: { + disabled: record.distable + } + }), + selectedRowKeys: this.selectedRowKeys + } + } + }, + + methods: { + + async loadData(arg) { + if (arg === 1) { + this.ipagination.current = 1 + } + let that = this + this.loading = true + let params = this.getQueryParams()//鏌ヨ鏉′欢 + await getAction(this.url.list, params).then((res) => { + if (res.success) { + for (let i = 0; i < res.result.records.length; i++) { + if (that.oldSelectRows.indexOf(res.result.records[i].id) > -1) { + res.result.records[i].distable = true + } else { + res.result.records[i].distable = false + } + } + this.dataSource = res.result.records + this.ipagination.total = res.result.total + } + if (res.code === 510) { + this.$message.warning(res.message) + } + this.loading = false + }) + }, + + showModals(oldSelectRows) { + this.selectionRows = [] + this.oldSelectRows = oldSelectRows + this.visible = true + this.loadData(1) + }, + getQueryParams() { + let param = Object.assign({}, this.queryParam, this.isorter) + param.field = this.getQueryField() + param.pageNo = this.ipagination.current + param.pageSize = this.ipagination.pageSize + return filterObj(param) + }, + //鏌ヨ鏉′欢澶勭悊 + getQueryField() { + let str = 'id,' + for (let a = 0; a < this.columns.length; a++) { + str += ',' + this.columns[a].dataIndex + } + return str + }, + searchReset(num) { + let that = this + this.queryParam = [] + if (num !== 0) { + that.loadData(1) + } + that.selectborrowIds = [] + }, + close() { + this.searchReset(0) + this.selectedRowKeys = [] + this.visible = false + }, + handleTableChange(pagination, filters, sorter) { + //TODO 绛涢�� + + if (Object.keys(sorter).length > 0) { + this.isorter.column = sorter.field + this.isorter.order = 'ascend' === sorter.order ? 'asc' : 'desc' + } + this.ipagination = pagination + this.loadData() + }, + handleSubmit() { + this.$bus.$emit('selectionRows', this.selectionRows) + // this.searchReset(0) + this.close() + }, + onSelectChange(selectionRows) { + this.selectionRows = selectionRows + }, + searchQuery() { + this.loadData(1) + } + } +} +</script> + +<style scoped> +.ant-table-tbody .ant-table-row td { + padding-top: 10px; + padding-bottom: 10px; +} + +#components-layout-demo-custom-trigger .trigger { + font-size: 18px; + line-height: 64px; + padding: 0 24px; + cursor: pointer; + transition: color 0.3s; +} +</style> \ No newline at end of file diff --git a/src/views/tms/stocktakingBound/modules/ToolsStocktakingBoundModal.vue b/src/views/tms/stocktakingBound/modules/ToolsStocktakingBoundModal.vue new file mode 100644 index 0000000..b158f99 --- /dev/null +++ b/src/views/tms/stocktakingBound/modules/ToolsStocktakingBoundModal.vue @@ -0,0 +1,504 @@ +<template> + <a-modal :title="title" :width="1500" :height="1500" :visible="visible" :maskClosable="false" @ok="handleOk" + cancelText="鍏抽棴" + @cancel="handleCancel" :confirmLoading="confirmLoading"> + + <a-spin :spinning="confirmLoading"> + <a-form :form="form"> + <a-row> + <a-col :span="12"> + <a-form-model-item label="鐩樼偣鍗曞彿" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="orderCode"> + <a-input :disabled="true" v-model="model.orderCode" placeholder="绯荤粺鑷姩鐢熸垚"></a-input> + </a-form-model-item> + </a-col> + <a-col :span="12"> + <a-form-model-item label="鐩樼偣绫诲瀷" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="approvalStatus"> + <j-dict-select-tag dictCode="stocktakingType" placeholder="璇烽�夋嫨鐩樼偣绫诲瀷" v-model="model.stocktakingType" + :disabled="disableSubmit"></j-dict-select-tag> + </a-form-model-item> + </a-col> + <a-col :span="12"> + <a-form-model-item v-show="addShow" label="缁忔墜浜�" :labelCol="labelCol" :wrapperCol="wrapperCol" + prop="handler"> + <j-dict-select-tag dictCode="sys_user,realname,id" placeholder="璇烽�夋嫨缁忔墜浜�" v-model="model.handler" + :disabled="disableSubmit" /> + </a-form-model-item> + </a-col> + <a-col :span="12"> + <a-form-model-item label="瀹℃牳浜�" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="reviewer"> + <j-select-user-by-dep :disabled="disableSubmit" v-model="model.reviewer" :store="'username'" + :text="'realname'" :multi="false" /> + </a-form-model-item> + </a-col> + <a-col :span="12"> + <a-form-model-item label="鐩樼偣鍚嶇О" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="stocktakingName"> + <a-input v-model="model.stocktakingName" placeholder="璇疯緭鍏ョ洏鐐瑰悕绉�"></a-input> + </a-form-model-item> + </a-col> + + <a-col :span="12"> + <a-form-model-item v-show="addShow" label="瀹℃牳鐘舵��" :labelCol="labelCol" :wrapperCol="wrapperCol" + prop="approvalStatus"> + <j-dict-select-tag dictCode="approval_status" placeholder="璇烽�夋嫨瀹℃牳鐘舵��" v-model="model.approvalStatus" + :disabled="true"></j-dict-select-tag> + </a-form-model-item> + </a-col> + <a-col :span="12"> + <a-form-model-item v-show="addShow" label="瀹℃牳鎰忚" :labelCol="labelCol" :wrapperCol="wrapperCol" + prop="approvalOpinion"> + <a-input v-model="model.approvalOpinion" placeholder="璇疯緭鍏ュ鏍告剰瑙�" type="textarea" + :disabled="model.approvalStatus==1"></a-input> + </a-form-model-item> + </a-col> + <a-col :span="12"> + <a-form-model-item label="鐩樼偣鏃堕棿" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="inventoryTime"> + <j-date placeholder="璇烽�夋嫨鐩樼偣鏃堕棿" date-format="YYYY-MM-DD HH:mm:ss" v-model="model.inventoryTime" + style="width: 100%" /> + </a-form-model-item> + </a-col> + <a-col :span="12"> + <a-form-model-item label="澶囨敞" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="remark"> + <a-input v-model="model.remark" placeholder="璇疯緭鍏ュ娉�" type="textarea"></a-input> + </a-form-model-item> + </a-col> + </a-row> + </a-form> + </a-spin> + <a-button type="primary" :style="{ marginRight: '8px', marginBottom: '8px' }" :loading="confirmLoading" + :disabled="disableSubmit" @click="selectTools()">宸ュ叿鏄庣粏 + </a-button> + <a-table ref="table" bordered size="middle" rowKey="id" :columns="columns" :dataSource="dataSource" + :scroll="{x:true}"> + <template v-for="col in columns" :slot="col.dataIndex" slot-scope="text, record, index"> + <a-input-number :disabled="disableSubmit" :value="text" v-if="col.dataIndex == 'practicalQuantity'" :min="0" + :max="99999" + @change="(e) => handleChange(e, record.key, col, index)" style="width: 100%;" /> + <a-input-number :value="text" v-if="col.dataIndex == 'differenceValue'" :min="0" :max="99999" + :disabled="true" @change="(e) => handleChange(e, record.key, col, index)" + style="width: 100%;" /> + <j-dict-select-tag :value="text" v-if="col.dataIndex == 'surplusDeficit'" + dictCode="surplusDeficit" + :disabled="true" + style="width: 100%;" + @change="(e) => handleChange(e, record.key, col, index)" /> + <!-- <j-dict-select-tag :value="text" v-if="col.dataIndex == 'classifyId'"--> + <!-- dictCode="tms_tools_classify,type_name,id"--> + <!-- style="width: 100%;"--> + <!-- :disabled="true"--> + <!-- @change="(e) => handleChange(e, record.key, col, index)" />--> + <j-date + :value="text" + v-if="col.dataIndex == 'stocktakingDate'" + placeholder="閫夋嫨鐩樺簱鏃堕棿" + @change="(e) => handleChange(e, record.key, col, index)" + style="width: 100%;" + /> + + <a-textarea + v-if="col.dataIndex == 'remark'" + :disabled="disableSubmit" + style="margin: -5px 0" + :value="text" + @change="(e) => handleChange(e.target.value, record.key, col, index)" + /> + + </template> + + <span slot="action" slot-scope="text, record, index"> + <a-popconfirm title="纭畾鍒犻櫎鍚�?" @confirm="() => handleDelete(text, record, index)"> + <a :disabled="disableSubmit">鍒犻櫎</a> + </a-popconfirm> + </span> + </a-table> + <template slot="footer"> + <a-button :style="{ marginRight: '8px' }" @click="handleCancel()"> + 鍏抽棴 + </a-button> + + <a-button @click="handleOk()" :disabled="disableSubmit" type="primary" :loading="confirmLoading">纭畾</a-button> + </template> + <tool-selector-modal ref="toolsModalForm"></tool-selector-modal> + </a-modal> + +</template> + +<script> +import { getAction, postAction, requestPut } from '@/api/manage' +import JMultiSelectTag from '@/components/dict/JMultiSelectTag' +import Tooltip from 'ant-design-vue/es/tooltip' +import ToolSelectorModal from '@views/tms/stocktakingBound/modules/ToolSelectorModal.vue' + +export default { + name: 'ToolsStocktakingBoundModal', + components: { + ToolSelectorModal, + JMultiSelectTag, + Tooltip + }, + data() { + + return { + addShow: true, + model: {}, + formDisabled: false, + pagination: { + current: 1, + pageSize: 10, + total: 0 + }, + columns: [ + { + title: '#', + dataIndex: '', + key: 'rowIndex', + align: 'center', + customRender: function(t, r, index) { + return parseInt(index) + 1 + }, + width: 50 + }, + { + title: '鍒�鍏风紪鍙�', + dataIndex: 'toolCode', + align: 'center', + width: 150 + }, + + { + title: '宸ュ叿绫诲瀷', + dataIndex: 'applicationType', + align: 'center', + width: 150 + }, + + { + title: '涓枃鍚嶇О', + dataIndex: 'chineseName', + width: 150, + align: 'center' + }, + + { + title: '鍨嬪彿/鍥惧彿', + dataIndex: 'toolModel', + width: 150, + align: 'center' + }, + + { + title: '鍒�鍏锋潗鏂�', + width: 150, + dataIndex: 'toolMaterial', + align: 'center' + }, + { + title: '闆朵欢鏉愭枡', + width: 150, + dataIndex: 'partMaterial', + align: 'center' + }, + { + title: '鍘傚', + width: 150, + dataIndex: 'supplierId', + align: 'center' + + }, + { + title: '瀛樺偍浣嶇疆', + width: 150, + dataIndex: 'goodsShelvesId', + align: 'center' + + }, + { + title: '璐﹂潰搴撳瓨', + width: 150, + dataIndex: 'bookQuantity', + align: 'center' + + }, + { + title: '鍙敤鏁伴噺', + width: 150, + dataIndex: 'availableQuantity', + align: 'center' + + }, + { + title: '瀹炵洏鏁伴噺', + dataIndex: 'practicalQuantity', + align: 'center', + width: 150, + scopedSlots: { customRender: 'practicalQuantity' } + }, + { + title: '宸紓鍊�', + dataIndex: 'differenceValue', + align: 'center', + width: 150, + scopedSlots: { customRender: 'differenceValue' } + }, + + { + title: '鐩樹簭鐩樼泩', + width: 150, + dataIndex: 'surplusDeficit', + align: 'center', + scopedSlots: { customRender: 'surplusDeficit' } + }, + + { + title: '鐩樺簱鏃堕棿', + width: 150, + dataIndex: 'stocktakingDate', + align: 'center', + scopedSlots: { customRender: 'stocktakingDate' } + }, + { + title: '澶囨敞', + width: 150, + dataIndex: 'remark', + align: 'center', + scopedSlots: { customRender: 'remark' } + }, + { + title: '鎿嶄綔', + width: 150, + dataIndex: 'action', + scopedSlots: { customRender: 'action' }, + align: 'center' + } + ], + title: '鎿嶄綔', + visible: false, + disableSubmit: false, + codeDisable: true, + + labelCol: { + xs: { span: 24 }, + sm: { span: 6 } + }, + wrapperCol: { + xs: { span: 24 }, + sm: { span: 18 } + }, + confirmLoading: false, + form: this.$form.createForm(this), + validatorRules: { + orderCode: [ + { required: true, message: '璇疯緭鍏ョ洏鐐瑰崟鍙�!' } + ], + handler: [ + { required: true, message: '璇疯緭鍏ョ粡鎵嬩汉!' } + ], + stocktakingName: [ + { required: true, message: '璇疯緭鍏ョ洏鐐瑰悕绉�!' } + ], + approvalStatus: [ + { required: true, message: '璇疯緭鍏ュ鏍哥姸鎬�!' } + ], + inventoryTime: [ + { required: true, message: '璇疯緭鍏ョ洏鐐规椂闂�!' } + ] + }, + url: { + add: '/tms/toolsStocktakingBound/add', + edit: '/tms/toolsStocktakingBound/edit', + queryDetailList: '/tms/toolsStocktakingBound/listToolsStocktakingBoundControllerDetailsByMainId' + + }, + dataSource: [] + } + }, + + mounted() { + this.$bus.$on('selectionRows', (data) => { + for (let i = 0; i < data.length; i++) { + this.dataSource.push({ + toolId: data[i].id, + toolCode: data[i].toolCode, + classifyId: data[i].classifyId, + applicationType: data[i].applicationType_dictText, + chineseName: data[i].chineseName, + toolModel: data[i].toolModel, + material: data[i].material, + toolMaterial: data[i].toolMaterial, + partMaterial: data[i].partMaterial, + bookQuantity: data[i].totalCount, + supplierId: data[i].supplierId, + goodsShelvesId: data[i].positionCode + }) + } + }) + }, + + methods: { + selectTools: function() { + let ids = [] + for (let i = 0; i < this.dataSource.length; i++) { + ids.push(this.dataSource[i].partId) + } + this.$refs.toolsModalForm.showModals(ids) + this.$refs.toolsModalForm.title = '閫夋嫨宸ュ叿淇℃伅' + this.$refs.toolsModalForm.disableSubmit = false + }, + add() { + this.addShow = false + this.edit() + }, + + edit(record) { + console.log(record) + console.log(this.auditFlag) + this.form.resetFields() + this.model = Object.assign({}, record) + this.visible = true + getAction(this.url.queryDetailList, { + stocktakingBoundId: record.id, + pageNo: 1, + pageSize: 99999 + }).then((res) => { + if (res.success) { + console.log(res.result.records) + this.dataSource = res.result.records + } else { + this.dataSource = null + } + }) + }, + + + + close() { + this.$emit('close') + this.visible = false + }, + + handleCancel() { + this.model = {} + this.dataSource = [] + this.close() + }, + + handleOk() { + const that = this + let data = that.dataSource + for (let i = 0; i < data.length; i++) { + if (data[i].practicalQuantity == undefined || data[i].practicalQuantity == null || data[i].practicalQuantity == '') { + that.$message.warning('璇疯緭鍏ョ' + (i + 1) + '琛岀殑瀹炵洏鏁伴噺鏁版嵁锛�') + return false + } + } + this.form.validateFields((err, values) => { + if (!err) { + that.confirmLoading = true + let formData = Object.assign(this.model, values) + if (that.dataSource.length === 0) { + that.$message.warning('璇烽�夋嫨宸ュ叿锛�') + that.confirmLoading = false + return + } + formData.toolsStocktakingBoundDetailList = that.dataSource + // formData.status = '0'; + let obj + if (!this.model.id) { + obj = postAction(this.url.add, formData) + } else { + obj = requestPut(this.url.edit, formData, { id: this.model.id }) + } + obj.then((res) => { + if (res.success) { + that.$message.success(res.message) + that.$emit('ok') + that.close() + } else { + that.$message.warning(res.message) + } + }).finally(() => { + that.confirmLoading = false + }) + } + }) + }, + + handleDelete(text, record, index) { + this.dataSource.splice(index, 1) + }, + + handleChange(value, key, column, index) { + let that = this + const temp = [...that.dataSource] + const target = temp.filter(item => key === item.key)[index] + if (target) { + // if (column.dataIndex == 'practicalQuantity') { + // target[column.dataIndex] = value + // } + if (column.dataIndex === 'practicalQuantity') { + target[column.dataIndex] = value + + // 璁$畻宸紓鍊� + target.differenceValue = value - target.availableQuantity + + // 鏍规嵁宸紓鍊煎垽鏂洏浜忕洏鐩� + if (target.differenceValue > 0) { + target.surplusDeficit = 1 + } else if (target.differenceValue < 0) { + target.surplusDeficit = 2 + } else { + target.surplusDeficit = 0 + } + } + if (column.dataIndex == 'differenceValue') { + target[column.dataIndex] = value + } + if (column.dataIndex == 'classifyId') { + target[column.dataIndex] = value + } + if (column.dataIndex == 'surplusDeficit') { + target[column.dataIndex] = value // 鍋囪 value 鏄瓧绗︿覆鏍煎紡鐨勬棩鏈� + } + if (column.dataIndex == 'stocktakingDate') { + target[column.dataIndex] = value // 鍋囪 value 鏄瓧绗︿覆鏍煎紡鐨勬棩鏈� + } + if (column.dataIndex === 'remark') { + // 娉ㄦ剰杩欓噷浣跨敤鐨勬槸 e.target.value + target[column.dataIndex] = value + } + + that.dataSource = temp + } + } + } + +} +</script> + +<style lang="less" scoped> +.frozenRowClass { + color: #c9c9c9; +} + +.fontweight { + font-weight: bold; +} + +.ant-btn { + padding: 0 10px; + margin-left: 3px; +} + +.ant-form-item-control { + line-height: 0px; +} + +/** 涓昏〃鍗曡闂磋窛 */ +.ant-form .ant-form-item { + margin-bottom: 10px; +} + +/** Tab椤甸潰琛岄棿璺� */ +.ant-tabs-content .ant-form-item { + margin-bottom: 0px; +} +</style> \ No newline at end of file diff --git a/src/views/tms/storeEarlyWarning/ToolsStoreEarlyWarningList.vue b/src/views/tms/storeEarlyWarning/ToolsStoreEarlyWarningList.vue new file mode 100644 index 0000000..7ebb7fc --- /dev/null +++ b/src/views/tms/storeEarlyWarning/ToolsStoreEarlyWarningList.vue @@ -0,0 +1,303 @@ +<template> + <a-card :bordered="false"> + <!-- 鏌ヨ鍖哄煙 --> + <div class="table-page-search-wrapper"> + <a-form layout="inline" @keyup.enter.native="searchQuery"> + <a-row :gutter="24"> + <a-col + :md="6" + :sm="8" + > + <a-form-item + label="宸ュ叿缂栧彿" + :labelCol="{span: 5}" + :wrapperCol="{span: 18, offset: 1}" + > + <a-input + placeholder="璇疯緭鍏ュ伐鍏风紪鐮佹绱�" + v-model="queryParam.toolCode" + ></a-input> + </a-form-item> + </a-col> + <a-col + :md="6" + :sm="8" + > + <a-form-item + label="鍘傚" + :labelCol="{span: 5}" + :wrapperCol="{span: 18, offset: 1}" + > + <a-input + placeholder="璇疯緭鍏ュ巶瀹舵绱�" + v-model="queryParam.supplierId" + ></a-input> + </a-form-item> + </a-col> + <a-col + :md="6" + :sm="8" + > + <a-form-item + label="鏉愯川" + :labelCol="{span: 5}" + :wrapperCol="{span: 18, offset: 1}" + > + <a-input + placeholder="璇疯緭鍏ユ潗璐ㄦ绱�" + v-model="queryParam.toolMaterial" + ></a-input> + </a-form-item> + </a-col> + <a-col + :md="6" + :sm="8" + > + <a-form-item + label="鍒�鍏疯鏍�" + :labelCol="{span: 5}" + :wrapperCol="{span: 18, offset: 1}" + > + <a-input + placeholder="璇疯緭鍏ュ垁鍏疯鏍兼绱�" + v-model="queryParam.toolModel" + ></a-input> + </a-form-item> + </a-col> + <a-col :md="6" :sm="24"> + <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons"> + <a-button type="primary" @click="searchQuery" icon="search">鏌ヨ</a-button> + <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">閲嶇疆</a-button> + </span> + </a-col> + + </a-row> + </a-form> + </div> + <!-- 鏌ヨ鍖哄煙-END --> + + <!-- 鎿嶄綔鎸夐挳鍖哄煙 --> + <div class="table-operator"> +<!-- <a-button @click="handleAdd" type="primary" icon="plus">鏂板</a-button>--> +<!-- <a-button type="primary" icon="download" @click="handleExportXls('tms_store_early warning')">瀵煎嚭</a-button>--> +<!-- <a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel">--> +<!-- <a-button type="primary" icon="import">瀵煎叆</a-button>--> +<!-- </a-upload>--> + <a-dropdown v-if="selectedRowKeys.length > 0"> + <a-menu slot="overlay"> + <a-menu-item key="1" @click="batchDel"><a-icon type="delete"/>鍒犻櫎</a-menu-item> + </a-menu> + <a-button style="margin-left: 8px"> 鎵归噺鎿嶄綔 <a-icon type="down" /></a-button> + </a-dropdown> + </div> + + <!-- table鍖哄煙-begin --> + <div> + <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;"> + <i class="anticon anticon-info-circle ant-alert-icon"></i> 宸查�夋嫨 <a style="font-weight: 600">{{ selectedRowKeys.length }}</a>椤� + <a style="margin-left: 24px" @click="onClearSelected">娓呯┖</a> + </div> + + <a-table + ref="table" + size="middle" + :scroll="{x:true}" + bordered + rowKey="id" + :columns="columns" + :dataSource="dataSource" + :pagination="ipagination" + :loading="loading" + :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}" + class="j-table-force-nowrap" + @change="handleTableChange"> + + <template slot="htmlSlot" slot-scope="text"> + <div v-html="text"></div> + </template> + <template slot="imgSlot" slot-scope="text,record"> + <span v-if="!text" style="font-size: 12px;font-style: italic;">鏃犲浘鐗�</span> + <img v-else :src="getImgView(text)" :preview="record.id" height="25px" alt="" style="max-width:80px;font-size: 12px;font-style: italic;"/> + </template> + <template slot="fileSlot" slot-scope="text"> + <span v-if="!text" style="font-size: 12px;font-style: italic;">鏃犳枃浠�</span> + <a-button + v-else + :ghost="true" + type="primary" + icon="download" + size="small" + @click="downloadFile(text)"> + 涓嬭浇 + </a-button> + </template> + + <span slot="action" slot-scope="text, record"> + <a @click="handleEdit(record)">缂栬緫</a> + + <a-divider type="vertical" /> + <a-dropdown> + <a class="ant-dropdown-link">鏇村 <a-icon type="down" /></a> + <a-menu slot="overlay"> + <a-menu-item> + <a @click="handleDetail(record)">璇︽儏</a> + </a-menu-item> + <a-menu-item> + <a-popconfirm title="纭畾鍒犻櫎鍚�?" @confirm="() => handleDelete(record.id)"> + <a>鍒犻櫎</a> + </a-popconfirm> + </a-menu-item> + </a-menu> + </a-dropdown> + </span> + + </a-table> + </div> + + <tools-store-early-warning-modal ref="modalForm" @ok="modalFormOk"></tools-store-early-warning-modal> + </a-card> +</template> + +<script> + + import '@/assets/less/TableExpand.less' + import { mixinDevice } from '@/utils/mixin' + import { JeecgListMixin } from '@/mixins/JeecgListMixin' + import ToolsStoreEarlyWarningModal from './modules/ToolsStoreEarlyWarningModal.vue' + + export default { + name: 'TmsStoreEarlyWarningList', + mixins:[JeecgListMixin, mixinDevice], + components: { + ToolsStoreEarlyWarningModal + }, + data () { + return { + description: 'tms_store_early warning绠$悊椤甸潰', + // 琛ㄥご + columns: [ + { + title: '#', + dataIndex: '', + key:'rowIndex', + width:60, + align:"center", + customRender:function (t,r,index) { + return parseInt(index)+1; + } + }, + { + title:'缂栫爜', + align:"center", + dataIndex: 'classifyId' + }, + { + title:'鍚嶇О', + align:"center", + dataIndex: 'toolName' + }, + { + title:'宸ュ叿绫诲瀷', + align:"center", + dataIndex: 'toolType' + }, + { + title:'瑙勬牸', + align:"center", + dataIndex: 'toolModel' + }, + { + title:'鏉愯川', + align:"center", + dataIndex: 'supplierId' + }, + { + title:'瀛樺偍浣嶇疆', + align:"center", + dataIndex: 'goodsShelvesId' + }, + { + title:'鍘傚', + align:"center", + dataIndex: 'supplierId' + }, + { + title:'搴撳瓨涓婇檺', + align:"center", + dataIndex: 'highestInventory' + }, + { + title:'搴撳瓨涓嬮檺', + align:"center", + dataIndex: 'lowerInventory' + }, + { + title:'鎬诲簱瀛樻暟閲�', + align:"center", + dataIndex: 'totalCount' + }, + { + title:'鍙敤搴撳瓨鏁伴噺', + align:"center", + dataIndex: 'availableQuantity' + }, + { + title:'鐘舵��;', + align:"center", + dataIndex: 'status' + }, + { + title:'澶囨敞', + align:"center", + dataIndex: 'remark' + }, + ], + url: { + list: "tms/toolsStoreEarlyWarning/list", + delete: "tms/toolsStoreEarlyWarning/delete", + deleteBatch: "tools/tmsStoreEarlyWarning/deleteBatch", + exportXlsUrl: "tools/tmsStoreEarlyWarning/exportXls", + importExcelUrl: "toolsStoreEarlyWarning/importExcel", + + }, + dictOptions:{}, + superFieldList:[], + } + }, + created() { + this.getSuperFieldList(); + }, + computed: { + importExcelUrl: function(){ + return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`; + }, + }, + methods: { + initDictConfig(){ + }, + getSuperFieldList(){ + let fieldList=[]; + fieldList.push({type:'string',value:'toolCode',text:'缂栫爜',dictCode:''}) + fieldList.push({type:'string',value:'toolName',text:'鍚嶇О',dictCode:''}) + fieldList.push({type:'string',value:'toolType',text:'宸ュ叿绫诲瀷',dictCode:''}) + fieldList.push({type:'string',value:'toolModel',text:'瑙勬牸',dictCode:''}) + fieldList.push({type:'string',value:'supplierId',text:'鏉愯川',dictCode:''}) + fieldList.push({type:'string',value:'goodsShelvesId',text:'瀛樺偍浣嶇疆',dictCode:''}) + fieldList.push({type:'string',value:'toolModel',text:'鍨嬪彿/鍥惧彿',dictCode:''}) + fieldList.push({type:'string',value:'supplierId',text:'鍘傚',dictCode:''}) + fieldList.push({type:'string',value:'toolMaterial',text:'鏉愯川',dictCode:''}) + fieldList.push({type:'string',value:'totalCount',text:'鎬诲簱瀛樻暟閲�',dictCode:''}) + fieldList.push({type:'string',value:'availableQuantity',text:'鍙敤搴撳瓨鏁伴噺',dictCode:''}) + fieldList.push({type:'BigDecimal',value:'lowerInventory',text:'搴撳瓨涓嬮檺',dictCode:''}) + fieldList.push({type:'string',value:'highestInventory',text:'搴撳瓨涓婇檺',dictCode:''}) + fieldList.push({type:'string',value:'status',text:'鐘舵��;',dictCode:''}) + fieldList.push({type:'string',value:'remark',text:'澶囨敞',dictCode:''}) + fieldList.push({type:'string',value:'tenantId',text:'绉熸埛鍙�',dictCode:''}) + this.superFieldList = fieldList + } + } + } +</script> +<style scoped> + @import '~@assets/less/common.less'; +</style> \ No newline at end of file diff --git a/src/views/tms/storeEarlyWarning/modules/ToolsStoreEarlyWarningForm.vue b/src/views/tms/storeEarlyWarning/modules/ToolsStoreEarlyWarningForm.vue new file mode 100644 index 0000000..88ead07 --- /dev/null +++ b/src/views/tms/storeEarlyWarning/modules/ToolsStoreEarlyWarningForm.vue @@ -0,0 +1,221 @@ +<template> + <a-spin :spinning="confirmLoading"> + <j-form-container :disabled="formDisabled"> + <a-form-model ref="form" :model="model" :rules="validatorRules" slot="detail"> + <a-row> + <a-col :span="8"> + <a-form-model-item label="鍒嗙被缂栧彿" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="classifyId"> + <a-input v-model="model.classifyId" placeholder="璇疯緭鍏ュ垎绫荤紪鍙�" ></a-input> + </a-form-model-item> + </a-col> + <a-col :span="8"> + <a-form-model-item label="涓枃鍚嶇О" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="chineseName"> + <a-input v-model="model.chineseName" placeholder="璇疯緭鍏ヤ腑鏂囧悕绉�" ></a-input> + </a-form-model-item> + </a-col> + <a-col :span="8"> + <a-form-model-item label="鑻辨枃鍚嶇О" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="foreignLanguageName"> + <a-input v-model="model.foreignLanguageName" placeholder="璇疯緭鍏ヨ嫳鏂囧悕绉�" ></a-input> + </a-form-model-item> + </a-col> + <a-col :span="8"> + <a-form-model-item label="宸ュ叿绫诲瀷;1.閫氱敤 +2.涓撶敤" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="applicationType"> + <a-input v-model="model.applicationType" placeholder="璇疯緭鍏ュ伐鍏风被鍨�;1.閫氱敤 +2.涓撶敤" ></a-input> + </a-form-model-item> + </a-col> + <a-col :span="8"> + <a-form-model-item label="鏍囧噯绾у埆" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="standardLevel"> + <a-input v-model="model.standardLevel" placeholder="璇疯緭鍏ユ爣鍑嗙骇鍒�" ></a-input> + </a-form-model-item> + </a-col> + <a-col :span="8"> + <a-form-model-item label="鏍囧噯鍙�" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="standardCode"> + <a-input v-model="model.standardCode" placeholder="璇疯緭鍏ユ爣鍑嗗彿" ></a-input> + </a-form-model-item> + </a-col> + <a-col :span="8"> + <a-form-model-item label="鍨嬪彿/鍥惧彿" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="toolModel"> + <a-input v-model="model.toolModel" placeholder="璇疯緭鍏ュ瀷鍙�/鍥惧彿" ></a-input> + </a-form-model-item> + </a-col> + <a-col :span="8"> + <a-form-model-item label="鍘傚" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="supplierId"> + <a-input v-model="model.supplierId" placeholder="璇疯緭鍏ュ巶瀹�" ></a-input> + </a-form-model-item> + </a-col> + <a-col :span="8"> + <a-form-model-item label="浠撳簱鐪佷唤鍩庡競" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="provinceCity"> + <a-input v-model="model.provinceCity" placeholder="璇疯緭鍏ヤ粨搴撶渷浠藉煄甯�" ></a-input> + </a-form-model-item> + </a-col> + <a-col :span="8"> + <a-form-model-item label="搴撳尯/搴撳彿" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="warehouseId"> + <a-input v-model="model.warehouseId" placeholder="璇疯緭鍏ュ簱鍖�/搴撳彿" ></a-input> + </a-form-model-item> + </a-col> + <a-col :span="8"> + <a-form-model-item label="搴撲綅鍙�;鐢卞簱鍖�+灞�+鎺�+鍒楃粍鎴愶紝鍙互鏄涓簱浣嶅彿浠ヨ嫳鏂囩偣鍙峰垎鍓茬殑瀛楃涓层��" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="positionCode"> + <a-input v-model="model.positionCode" placeholder="璇疯緭鍏ュ簱浣嶅彿;鐢卞簱鍖�+灞�+鎺�+鍒楃粍鎴愶紝鍙互鏄涓簱浣嶅彿浠ヨ嫳鏂囩偣鍙峰垎鍓茬殑瀛楃涓层��" ></a-input> + </a-form-model-item> + </a-col> + <a-col :span="8"> + <a-form-model-item label="瀛樺偍浣嶇疆锛堝亸閭d釜鍘傚尯鐨勫簱锛�" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="storageLocation"> + <a-input v-model="model.storageLocation" placeholder="璇疯緭鍏ュ瓨鍌ㄤ綅缃紙鍋忛偅涓巶鍖虹殑搴擄級" ></a-input> + </a-form-model-item> + </a-col> + <a-col :span="8"> + <a-form-model-item label="璁¢噺涓诲崟浣�" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="mainUnit"> + <a-input v-model="model.mainUnit" placeholder="璇疯緭鍏ヨ閲忎富鍗曚綅" ></a-input> + </a-form-model-item> + </a-col> + <a-col :span="8"> + <a-form-model-item label="璁¢噺杈呭崟浣�" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="auxiliaryUnit"> + <a-input v-model="model.auxiliaryUnit" placeholder="璇疯緭鍏ヨ閲忚緟鍗曚綅" ></a-input> + </a-form-model-item> + </a-col> + <a-col :span="8"> + <a-form-model-item label="璁¢噺涓诲崟浣嶆暟閲�" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="mainCount"> + <a-input v-model="model.mainCount" placeholder="璇疯緭鍏ヨ閲忎富鍗曚綅鏁伴噺" ></a-input> + </a-form-model-item> + </a-col> + <a-col :span="8"> + <a-form-model-item label="璁¢噺杈呭崟浣嶆暟閲�" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="auxiliaryCount"> + <a-input v-model="model.auxiliaryCount" placeholder="璇疯緭鍏ヨ閲忚緟鍗曚綅鏁伴噺" ></a-input> + </a-form-model-item> + </a-col> + <a-col :span="8"> + <a-form-model-item label="鏄惁鏈夎閲忚緟鍗曚綅;1,鏈夎緟鍔╁崟浣�2.鏃犺緟鍔╁崟浣�" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="auxiliaryUnitFlag"> + <a-input v-model="model.auxiliaryUnitFlag" placeholder="璇疯緭鍏ユ槸鍚︽湁璁¢噺杈呭崟浣�;1,鏈夎緟鍔╁崟浣�2.鏃犺緟鍔╁崟浣�" ></a-input> + </a-form-model-item> + </a-col> + <a-col :span="8"> + <a-form-model-item label="鍗曚环" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="price"> + <a-input-number v-model="model.price" placeholder="璇疯緭鍏ュ崟浠�" style="width: 100%" /> + </a-form-model-item> + </a-col> + <a-col :span="8"> + <a-form-model-item label="鏈�浣庡簱瀛�" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="lowerInventory"> + <a-input-number v-model="model.lowerInventory" placeholder="璇疯緭鍏ユ渶浣庡簱瀛�" style="width: 100%" /> + </a-form-model-item> + </a-col> + <a-col :span="8"> + <a-form-model-item label="鏈�楂樺簱瀛�" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="highestInventory"> + <a-input v-model="model.highestInventory" placeholder="璇疯緭鍏ユ渶楂樺簱瀛�" ></a-input> + </a-form-model-item> + </a-col> + <a-col :span="8"> + <a-form-model-item label="鐘舵��;1.鍚敤 +2.鏈惎鐢�" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="status"> + <a-input v-model="model.status" placeholder="璇疯緭鍏ョ姸鎬�;1.鍚敤 +2.鏈惎鐢�" ></a-input> + </a-form-model-item> + </a-col> + <a-col :span="8"> + <a-form-model-item label="澶囨敞" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="remark"> + <a-input v-model="model.remark" placeholder="璇疯緭鍏ュ娉�" ></a-input> + </a-form-model-item> + </a-col> + <a-col :span="8"> + <a-form-model-item label="绉熸埛鍙�" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="tenantId"> + <a-input v-model="model.tenantId" placeholder="璇疯緭鍏ョ鎴峰彿" ></a-input> + </a-form-model-item> + </a-col> + </a-row> + </a-form-model> + </j-form-container> + </a-spin> +</template> + +<script> + + import { httpAction, getAction } from '@/api/manage' + import { validateDuplicateValue } from '@/utils/util' + + export default { + name: 'TmsStoreEarlyWarningForm', + components: { + }, + props: { + //琛ㄥ崟绂佺敤 + disabled: { + type: Boolean, + default: false, + required: false + } + }, + data () { + return { + model:{ + }, + labelCol: { + xs: { span: 24 }, + sm: { span: 5 }, + }, + wrapperCol: { + xs: { span: 24 }, + sm: { span: 16 }, + }, + confirmLoading: false, + validatorRules: { + classifyId: [ + { required: true, message: '璇疯緭鍏ュ垎绫荤紪鍙�!'}, + ], + }, + url: { + add: "/org.jeecg.modules.tms/tmsStoreEarlyWarning/add", + edit: "/org.jeecg.modules.tms/tmsStoreEarlyWarning/edit", + queryById: "/org.jeecg.modules.tms/tmsStoreEarlyWarning/queryById" + } + } + }, + computed: { + formDisabled(){ + return this.disabled + }, + }, + created () { + //澶囦唤model鍘熷鍊� + this.modelDefault = JSON.parse(JSON.stringify(this.model)); + }, + methods: { + add () { + this.edit(this.modelDefault); + }, + edit (record) { + this.model = Object.assign({}, record); + this.visible = true; + }, + submitForm () { + 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; + }) + } + + }) + }, + } + } +</script> \ No newline at end of file diff --git a/src/views/tms/storeEarlyWarning/modules/ToolsStoreEarlyWarningModal.vue b/src/views/tms/storeEarlyWarning/modules/ToolsStoreEarlyWarningModal.vue new file mode 100644 index 0000000..b92d194 --- /dev/null +++ b/src/views/tms/storeEarlyWarning/modules/ToolsStoreEarlyWarningModal.vue @@ -0,0 +1,60 @@ +<template> + <j-modal + :title="title" + :width="width" + :visible="visible" + switchFullscreen + @ok="handleOk" + :okButtonProps="{ class:{'jee-hidden': disableSubmit} }" + @cancel="handleCancel" + cancelText="鍏抽棴"> + <tms-store-early-warning-form ref="realForm" @ok="submitCallback" :disabled="disableSubmit"></tms-store-early-warning-form> + </j-modal> +</template> + +<script> + + import TmsStoreEarlyWarningForm from './ToolsStoreEarlyWarningForm.vue' + export default { + name: 'TmsStoreEarlyWarningModal', + components: { + TmsStoreEarlyWarningForm + }, + data () { + return { + title:'', + width:1024, + visible: false, + disableSubmit: false + } + }, + methods: { + add () { + this.visible=true + this.$nextTick(()=>{ + this.$refs.realForm.add(); + }) + }, + edit (record) { + this.visible=true + this.$nextTick(()=>{ + this.$refs.realForm.edit(record); + }) + }, + close () { + this.$emit('close'); + this.visible = false; + }, + handleOk () { + this.$refs.realForm.submitForm(); + }, + submitCallback(){ + this.$emit('ok'); + this.visible = false; + }, + handleCancel () { + this.close() + } + } + } +</script> \ No newline at end of file -- Gitblit v1.9.3