From f851850e65df71a252c0e21dc8d969d5910a03f8 Mon Sep 17 00:00:00 2001 From: cuilei <ray_tsu1@163.com> Date: 星期五, 22 八月 2025 10:42:54 +0800 Subject: [PATCH] 排产工单列表页面调整 --- src/views/mes/MesProductionWorkOrderListView.vue | 480 ++++++++++++++++++++++++++++++----------------------------- 1 files changed, 247 insertions(+), 233 deletions(-) diff --git a/src/views/mes/MesProductionWorkOrderListView.vue b/src/views/mes/MesProductionWorkOrderListView.vue index ef4e254..0f244cd 100644 --- a/src/views/mes/MesProductionWorkOrderListView.vue +++ b/src/views/mes/MesProductionWorkOrderListView.vue @@ -5,26 +5,40 @@ <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="宸ュ崟鍙�(浠诲姟鍙�)"> - <j-input placeholder="璇疯緭鍏ュ伐鍗曞彿(浠诲姟鍙�)" v-model="queryParam.workOrderCode"></j-input> + <a-form-item label="浜х嚎"> + <j-tree-select dict="base_factory,factory_name,id" pid-field="parent_id" + v-model="queryParam.factoryId" style="width: 100%"></j-tree-select> </a-form-item> </a-col> <a-col :xl="6" :lg="7" :md="8" :sm="24"> - <a-form-item label="鐗╂枡缂栧彿"> - <j-input placeholder="璇疯緭鍏ョ墿鏂欑紪鍙�" v-model="queryParam.materialNumber"></j-input> + <a-form-item label="鐗╂枡缂栫爜"> + <a-input placeholder="璇疯緭鍏ョ墿鏂欑紪鐮�" v-model="queryParam.materialNumber"></a-input> + </a-form-item> + </a-col> + <a-col :xl="6" :lg="7" :md="8" :sm="24"> + <a-form-item label="鐗╂枡鍚嶇О"> + <a-input placeholder="璇疯緭鍏ョ墿鏂欏悕绉�" v-model="queryParam.materialName"></a-input> </a-form-item> </a-col> <template v-if="toggleSearchStatus"> <a-col :xl="6" :lg="7" :md="8" :sm="24"> <a-form-item label="宸ュ崟鐘舵��"> - <j-dict-select-tag dictCode="work_order_status" placeholder="璇疯緭鍏ュ伐鍗曠姸鎬�" + <j-dict-select-tag dictCode="work_order_status" placeholder="璇烽�夋嫨宸ュ崟鐘舵��" v-model="queryParam.workOrderStatus"></j-dict-select-tag> </a-form-item> </a-col> <a-col :xl="6" :lg="7" :md="8" :sm="24"> - <a-form-item label="閲嶅彂甯冧汉"> - <j-select-user-by-dep placeholder="璇疯緭鍏ラ噸鍙戝竷浜�" - v-model="queryParam.republisher"></j-select-user-by-dep> + <a-form-item label="宸ュ崟鍙�(浠诲姟鍙�)"> + <a-input placeholder="璇疯緭鍏ュ伐鍗曞彿(浠诲姟鍙�)" v-model="queryParam.workOrderCode"></a-input> + </a-form-item> + </a-col> + <a-col :xl="6" :lg="7" :md="8" :sm="24"> + <a-form-item label="鎺掍骇鏃ユ湡"> + <a-range-picker + style="width: 100%" + @change="dateRangeChange" + :value="dateRange"> + </a-range-picker> </a-form-item> </a-col> </template> @@ -41,8 +55,24 @@ </a-row> <a-row> <a-button type="primary" @click="productionSchedule" icon="retweet" style="margin-bottom: 8px">鎺掍骇</a-button> + <a-dropdown v-if="selectedRowKeys.length > 1"> + <a-menu slot="overlay"> + <a-menu-item key="1" @click="batchPublish"> + <a-icon type="check"/> + 鍙戝竷 + </a-menu-item> + </a-menu> + <a-button style="margin-left: 8px"> + 鎵归噺鎿嶄綔 + <a-icon type="down"/> + </a-button> + </a-dropdown> </a-row> </a-form> + </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-spin :spinning="confirmLoading"> <div> @@ -56,30 +86,11 @@ :dataSource="dataSource" :pagination="ipagination" :loading="loading" - :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange,type: 'radio'}" + :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange,type: 'checkbox'}" 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> + @change="handleTableChange" + :customRow="clickSelect" + > <span slot="action" slot-scope="text, record"> <span v-if="record.workOrderStatus === 'NEW'"> @@ -95,11 +106,11 @@ <a-divider type="vertical" /> <a @click="handleCompletenessCheck(record)">榻愬鎬ф鏌�</a> </span> - <span v-if="record.workOrderStatus === 'PUBLISHED' && record.equipmentInspectionFlag === '0'"> + <span v-if="record.workOrderStatus === 'PUBLISHED' && record.completenessCheckFlag === '1' && record.equipmentInspectionFlag === '0'"> <a-divider type="vertical" /> <a @click="handleCompletenessCheck(record)">璁惧鐐规</a> </span> - <span v-if="record.workOrderStatus === 'PUBLISHED' && record.processInspectionFlag === '0'"> + <span v-if="record.workOrderStatus === 'PUBLISHED' && record.completenessCheckFlag === '1' && record.equipmentInspectionFlag === '1' && record.processInspectionFlag === '0'"> <a-divider type="vertical" /> <a @click="handleCompletenessCheck(record)">宸ヨ壓鐐规</a> </span> @@ -130,65 +141,45 @@ </a-menu-item> </a-menu> </a-dropdown> - </span> </a-table> </div> <a-tabs v-model="activeKey" @change="handleChangeTabs"> - <a-tab-pane tab="宸ュ崟鎶ュ伐" :key="refKeys1[0]" :forceRender="true"> - <div style="display: flex; align-items: center; margin-bottom: 10px;"> - </div> - <j-vxe-table - keep-source - :ref="refKeys1[0]" + <a-tab-pane tab="宸ュ崟鎶ュ伐" :key="tabsRefKeys[0]" :forceRender="true"> + <a-table + :ref="tabsRefKeys[0]" :loading="mesWorkReporting.loading" :columns="mesWorkReporting.columns" :dataSource="mesWorkReporting.dataSource" - :maxHeight="300" - :rowNumber="true" - :rowSelection="true" - :toolbar="false"> - <template slot="showDetail" slot-scope="{row}"> - <a-button type="primary" @click="handleOrderDetail(row)" size="small"> - <a-icon type="eye" />璁㈠崟璇︽儏 - </a-button> - </template> - </j-vxe-table> + :pagination="false" + :scroll="{ y: 300 }" + size="middle" + bordered> + </a-table> </a-tab-pane> - <a-tab-pane tab="涓婁笅鏂欐煡璇�" :key="refKeys3[0]" :forceRender="true"> - <div style="display: flex; align-items: center; margin-bottom: 10px;"> - </div> - <j-vxe-table - keep-source - :ref="refKeys3[0]" + <a-tab-pane tab="涓婁笅鏂欐煡璇�" :key="tabsRefKeys[1]" :forceRender="true"> + <a-table + :ref="tabsRefKeys[1]" :loading="mesMaterialLoading.loading" :columns="mesMaterialLoading.columns" :dataSource="mesMaterialLoading.dataSource" - :maxHeight="300" - :rowNumber="true" - :rowSelection="true" - :toolbar="false"> - <template slot="showUnloadingDetail" slot-scope="{row}"> - <a-button type="primary" @click="handleUnLoadingDetail(row)" size="small"> - <a-icon type="eye" />涓嬫枡璇︽儏 - </a-button> - </template> - </j-vxe-table> + :pagination="false" + :scroll="{ y: 300 }" + size="middle" + bordered> + </a-table> </a-tab-pane> - <a-tab-pane tab="榻愬鎬ф鏌ヨ褰�" :key="refKeys4[0]" :forceRender="true"> - <div style="display: flex; align-items: center; margin-bottom: 10px;"> - </div> - <j-vxe-table - keep-source - :ref="refKeys4[0]" + <a-tab-pane tab="榻愬鎬ф鏌ヨ褰�" :key="tabsRefKeys[2]" :forceRender="true"> + <a-table + :ref="tabsRefKeys[2]" :loading="mesKittingCompletenessCheck.loading" :columns="mesKittingCompletenessCheck.columns" :dataSource="mesKittingCompletenessCheck.dataSource" - :maxHeight="300" - :rowNumber="true" - :rowSelection="true" - :toolbar="false" - /> + :pagination="false" + :scroll="{ y: 300 }" + size="middle" + bordered> + </a-table> </a-tab-pane> </a-tabs> </a-spin> @@ -208,8 +199,6 @@ import { mixinDevice } from '@/utils/mixin' import { JeecgListMixin } from '@/mixins/JeecgListMixin' import MesProductionWorkOrderModal from './modules/MesProductionWorkOrderModal' -import { JVxeTableModelMixin } from '@/mixins/JVxeTableModelMixin.js' -import { JVXETypes } from '@/components/jeecg/JVxeTable' import { filterMultiDictText } from '@/components/dict/JDictSelectUtil' import { getAction, requestPut } from '@api/manage' import MesProductionOrderModal from '@views/mes/modules/MesProductionOrderModal.vue' @@ -218,11 +207,14 @@ import MesProductionWorkOrderRepublishModal from '@views/mes/modules/MesProductionWorkOrderRepublishModal.vue' import MesProductionWorkOrderReportModal from '@views/mes/modules/MesProductionWorkOrderReportModal.vue' import MesProductionWorkOrderCompletenessCheckModal from '@views/mes/modules/MesProductionWorkOrderCompletenessCheckModal.vue' +import JSelectFactory from '@comp/jeecgbiz/JSelectFactory.vue' +import moment from 'moment/moment' export default { name: 'MesProductionWorkOrderList', - mixins: [JeecgListMixin, mixinDevice, JVxeTableModelMixin, JVXETypes], + mixins: [JeecgListMixin, mixinDevice], components: { + JSelectFactory, MesProductionWorkOrderModal, MesProductionOrderModal, MesMaterialUnloadingList, @@ -235,15 +227,20 @@ return { description: '鎺掍骇宸ュ崟绠$悊椤甸潰', activeKey : 'mesWorkReporting', - // 宸ュ崟鎶ュ伐 - refKeys1: ['mesWorkReporting'], - tableKeys1: ['mesWorkReporting'], - //涓婃枡 - refKeys3: ['mesMaterialLoading'], - tableKeys3: ['mesMaterialLoading'], - //榻愬鎬ф鏌ヨ褰� - refKeys4: ['mesKittingCompletenessCheck'], - tableKeys4: ['mesKittingCompletenessCheck'], + confirmLoading: false, + tabsRefKeys: ['mesWorkReporting', 'mesMaterialLoading', 'mesKittingCompletenessCheck'], + /* 鍒嗛〉鍙傛暟 */ + ipagination:{ + current: 1, + pageSize: 5, + pageSizeOptions: ['5', '10', '20'], + showTotal: (total, range) => { + return range[0] + "-" + range[1] + " 鍏�" + total + "鏉�" + }, + showQuickJumper: true, + showSizeChanger: true, + total: 0 + }, // 琛ㄥご columns: [ { @@ -340,93 +337,65 @@ dataSource: [], columns: [ { - title: '鎿嶄綔', - key: 'action', - type: JVXETypes.slot, - slotName: 'showDetail', - width: '120px', - align: 'center' + title: '#', + dataIndex: '', + key: 'rowIndex', + width: 60, + align: 'center', + customRender: function(t, r, index) { + return parseInt(index) + 1 + } }, { title: '璁㈠崟鍙�', - key: 'orderCode', - type: JVXETypes.input, - width: '200px', - placeholder: '璇疯緭鍏�${title}', - defaultValue: '' + align: 'center', + dataIndex: 'orderCode' }, { title: '宸ュ崟鍙�', - key: 'workOrderCode', - type: JVXETypes.input, - width: '200px', - placeholder: '璇疯緭鍏�${title}', - defaultValue: '' + align: 'center', + dataIndex: 'workOrderCode' }, { title: '浜х嚎鍚嶇О', - key: 'factoryName', - type: JVXETypes.input, - width: '200px', - placeholder: '璇疯緭鍏�${title}', - defaultValue: '' + align: 'center', + dataIndex: 'factoryName' }, { title: '鎵规鍙�', - key: 'batchNumber', - type: JVXETypes.input, - width: '200px', - placeholder: '璇疯緭鍏�${title}', - defaultValue: '' + align: 'center', + dataIndex: 'batchNumber' }, { title: '鎵樺彿', - key: 'palletNumber', - type: JVXETypes.input, - width: '200px', - placeholder: '璇疯緭鍏�${title}', - defaultValue: '' + align: 'center', + dataIndex: 'palletNumber' }, { title: '鏁伴噺', - key: 'quantity', - type: JVXETypes.input, - width: '200px', - placeholder: '璇疯緭鍏�${title}', - defaultValue: '' + align: 'center', + dataIndex: 'quantity' }, { title: '鎶ュ伐浜�', - key: 'reporter', - type: JVXETypes.input, - width: '200px', - placeholder: '璇疯緭鍏�${title}', - defaultValue: '' + align: 'center', + dataIndex: 'reporter' }, { title: '鎶ュ伐鏃堕棿', - key: 'reportTime', - type: JVXETypes.input, - width: '200px', - placeholder: '璇疯緭鍏�${title}', - defaultValue: '' + align: 'center', + dataIndex: 'reportTime' }, { title: '绾胯竟浠撳悕绉�', - key: 'warehouseName', - type: JVXETypes.input, - width: '200px', - placeholder: '璇疯緭鍏�${title}', - defaultValue: '' + align: 'center', + dataIndex: 'warehouseName' }, - { - title: '鎴愬搧涓嬬嚎鎵撳嵃鐘舵��', - key: 'printStatus', - type: JVXETypes.input, - width: '200px', - placeholder: '璇疯緭鍏�${title}', - defaultValue: '' - }, + // { + // title: '鎴愬搧涓嬬嚎鎵撳嵃鐘舵��', + // align: 'center', + // dataIndex: 'printStatus' + // } ] }, mesMaterialLoading: { @@ -434,85 +403,60 @@ dataSource: [], columns: [ { - title: '鎿嶄綔', - key: 'action', - type: JVXETypes.slot, - slotName: 'showUnloadingDetail', - width: '120px', - align: 'center' + title: '#', + dataIndex: '', + key: 'rowIndex', + width: 60, + align: 'center', + customRender: function(t, r, index) { + return parseInt(index) + 1 + } }, { title: '宸ュ崟鍙�', - key: 'workOrderCode', - type: JVXETypes.input, - width: '200px', - placeholder: '璇疯緭鍏�${title}', - defaultValue: '' + align: 'center', + dataIndex: 'workOrderCode' }, { - title: '璁惧ID', - key: 'equipmentId', - type: JVXETypes.input, - width: '200px', - placeholder: '璇疯緭鍏�${title}', - defaultValue: '' + title: '璁惧', + align: 'center', + dataIndex: 'equipmentId' }, { title: '宸ュ簭缂栫爜', - key: 'processCode', - type: JVXETypes.input, - width: '200px', - placeholder: '璇疯緭鍏�${title}', - defaultValue: '' + align: 'center', + dataIndex: 'processCode' }, { title: '宸ュ簭鍚嶇О', - key: 'processName', - type: JVXETypes.input, - width: '200px', - placeholder: '璇疯緭鍏�${title}', - defaultValue: '' + align: 'center', + dataIndex: 'processName' }, { title: '鐗╂枡缂栫爜', - key: 'materialNumber', - type: JVXETypes.input, - width: '200px', - placeholder: '璇疯緭鍏�${title}', - defaultValue: '' + align: 'center', + dataIndex: 'materialNumber' }, { title: '鐗╂枡鍚嶇О', - key: 'materialName', - type: JVXETypes.input, - width: '200px', - placeholder: '璇疯緭鍏�${title}', - defaultValue: '' + align: 'center', + dataIndex: 'materialName' }, { title: '鎵规鍙�', - key: 'batchNumber', - type: JVXETypes.input, - width: '200px', - placeholder: '璇疯緭鍏�${title}', - defaultValue: '' + align: 'center', + dataIndex: 'batchNumber' }, { title: '鏁伴噺', - key: 'quantity', - type: JVXETypes.input, - width: '200px', - placeholder: '璇疯緭鍏�${title}', - defaultValue: '' + align: 'center', + dataIndex: 'quantity' }, { title: '鍓╀綑鏁伴噺', - key: 'remainingQuantity', - type: JVXETypes.input, - width: '200px', - placeholder: '璇疯緭鍏�${title}', - defaultValue: '' - }, + align: 'center', + dataIndex: 'remainingQuantity' + } ] }, mesKittingCompletenessCheck: { @@ -520,53 +464,48 @@ dataSource: [], columns: [ { + title: '#', + dataIndex: '', + key: 'rowIndex', + width: 60, + align: 'center', + customRender: function(t, r, index) { + return parseInt(index) + 1 + } + }, + { title: '宸ュ崟鍙�', - key: 'workOrderCode', - type: JVXETypes.input, - width: '200px', - placeholder: '璇疯緭鍏�${title}', - defaultValue: '' + align: 'center', + dataIndex: 'workOrderCode' }, { title: '鐗╂枡缂栧彿', - key: 'materialNumber', - type: JVXETypes.input, - width: '200px', - placeholder: '璇疯緭鍏�${title}', - defaultValue: '' + align: 'center', + dataIndex: 'materialNumber' }, { title: '鐗╂枡鍚嶇О', - key: 'materialName', - type: JVXETypes.input, - width: '200px', - placeholder: '璇疯緭鍏�${title}', - defaultValue: '' + align: 'center', + dataIndex: 'materialName' }, { title: '闇�姹傛暟閲�', - key: 'requiredQuantity', - type: JVXETypes.input, - width: '200px', - placeholder: '璇疯緭鍏�${title}', - defaultValue: '' + align: 'center', + dataIndex: 'requiredQuantity' }, { title: '瀹為檯鏁伴噺', - key: 'actualQuantity', - type: JVXETypes.input, - width: '200px', - placeholder: '璇疯緭鍏�${title}', - defaultValue: '' + align: 'center', + dataIndex: 'actualQuantity' }, { title: '鏄惁榻愬', - key: 'checkFlag', - type: JVXETypes.input, - width: '200px', - placeholder: '璇疯緭鍏�${title}', - defaultValue: '' - }, + align: 'center', + dataIndex: 'checkFlag', + customRender: function(text) { + return text === '0' ? '鍚�' : text === '1' ? '鏄�' : '' + } + } ] }, url: { @@ -584,21 +523,96 @@ execute: '/mes/mesProductionWorkOrder/execute', }, dictOptions: {}, - superFieldList: [] + superFieldList: [], + dateRange: [] } }, created() { this.getSuperFieldList() }, computed: { + tabsKeyMap() { + return { + mesWorkReporting: { + url: this.url.queryWorkReportingByWorkOrderId, + loading: this.mesWorkReporting.loading, + data: this.mesWorkReporting.dataSource, + setLoading: (loading) => { this.mesWorkReporting.loading = loading }, + setData: (data) => { this.mesWorkReporting.dataSource = data } + }, + mesMaterialLoading: { + url: this.url.queryLoadingByWorkOrderId, + loading: this.mesMaterialLoading.loading, + data: this.mesMaterialLoading.dataSource, + setLoading: (loading) => { this.mesMaterialLoading.loading = loading }, + setData: (data) => { this.mesMaterialLoading.dataSource = data } + }, + mesKittingCompletenessCheck: { + url: this.url.queryCompletenessCheckByWorkOrderId, + loading: this.mesKittingCompletenessCheck.loading, + data: this.mesKittingCompletenessCheck.dataSource, + setLoading: (loading) => { this.mesKittingCompletenessCheck.loading = loading }, + setData: (data) => { this.mesKittingCompletenessCheck.dataSource = data } + } + } + }, importExcelUrl: function() { return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}` } }, methods: { + handleChangeTabs(key) { + this.activeKey = key + this.selectTabData(key, this.selectedRowKeys[0]) + }, + clickSelect(record) { + return { + on: { + click: () => { + this.selectedRowKeys = [record.id] + this.selectTabData(this.activeKey, record.id) + } + } + } + }, + selectTabData(tabKey, workOrderId) { + const tab = this.tabsKeyMap[tabKey] + if (tab) { + tab.setLoading(true) + getAction(tab.url, { workOrderId: workOrderId }).then(res => { + if (res.success) { + tab.setData(res.result || []) + } + }).catch(error => { + console.error('Error loading tab data:', error) + tab.setData([]) + }).finally(() => { + tab.setLoading(false) + }) + } + }, + searchReset() { + this.queryParam = {} + this.dateRange = [] + this.loadData(1); + }, + dateRangeChange(dates, dateStrings) { + this.dateRange = dates + this.queryParam.startDate = dateStrings[0] + this.queryParam.endDate = dateStrings[1] + }, productionSchedule() { this.$refs.MesProductionWorkOrderScheduleModal.scheduleOpen() }, + batchPublish() { + if (this.selectedRowKeys.length < 1) { + this.$message.warning('璇烽�夋嫨澶氭潯璁板綍锛�') + return + } + const ids = this.selectedRowKeys.join(',') + this.handlePublish(ids) + this.selectedRowKeys = [] + }, handlePublish(id) { requestPut(this.url.publish, null, { ids: id }).then((res) => { if (res.success) { -- Gitblit v1.9.3