From efaf016bd38b2e30d3942890beacc2b50bae70d9 Mon Sep 17 00:00:00 2001 From: zhangherong <571457620@qq.com> Date: 星期一, 25 八月 2025 16:01:15 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- src/views/mes/MesProductionWorkOrderListView.vue | 480 +++++++++++++++-------------- src/views/cms/CuttingInventoryList.vue | 210 ++++++++++++ src/views/cms/CuttingInboundList.vue | 246 +++++++++++++-- src/views/mes/modules/MesProductionWorkOrderReportModal.vue | 6 4 files changed, 663 insertions(+), 279 deletions(-) diff --git a/src/views/cms/CuttingInboundList.vue b/src/views/cms/CuttingInboundList.vue index 972c824..6f4ce01 100644 --- a/src/views/cms/CuttingInboundList.vue +++ b/src/views/cms/CuttingInboundList.vue @@ -117,8 +117,7 @@ </template> <span slot="action" slot-scope="text, record"> - <a @click="handleEdit(record)">缂栬緫</a> - + <a @click="handleEdit(record)" :disabled="record.orderStatus == '2'">缂栬緫</a> <a-divider type="vertical" /> <a-dropdown> <a class="ant-dropdown-link">鏇村 <a-icon type="down" /></a> @@ -126,14 +125,17 @@ <a-menu-item> <a @click="handleDetail(record)">璇︽儏</a> </a-menu-item> - <a-menu-item> +<!-- <a-menu-item v-if="record.orderStatus != '2'">--> +<!-- <a-popconfirm title="纭畾鍒犻櫎鍚�?" @confirm="() => handleDelete(record.id)">--> +<!-- <a>鍒犻櫎</a>--> +<!-- </a-popconfirm>--> +<!-- </a-menu-item>--> + <a-menu-item v-if="record.orderStatus != '2'"> + <a @click="handleSubmit(record.id)" :disabled="record.orderStatus == '3'">鎻愪氦</a> + </a-menu-item> + <a-menu-item v-if="record.orderStatus != '2'"> <a-popconfirm title="纭畾鍒犻櫎鍚�?" @confirm="() => handleDelete(record.id)"> <a>鍒犻櫎</a> - </a-popconfirm> - </a-menu-item> - <a-menu-item> - <a-popconfirm title="纭畾鎻愪氦鍚�?" @confirm="() => handleSubmit(record.id)"> - <a>鎻愪氦</a> </a-popconfirm> </a-menu-item> </a-menu> @@ -165,7 +167,7 @@ import Vue from 'vue' import { ACCESS_TOKEN } from '@/store/mutation-types' import store from '@/store' - + import { Modal } from 'ant-design-vue'; export default { name: 'CuttingInboundList', @@ -245,6 +247,7 @@ deleteBatch: "/cms/cuttingInbound/deleteBatch", exportXlsUrl: "/cms/cuttingInbound/exportXls", importExcelUrl: "cms/cuttingInbound/importExcel", + submit: "/cms/cuttingInbound/submit", }, dictOptions:{}, superFieldList:[], @@ -284,6 +287,7 @@ this.$refs.modalForm.title="璇︽儏"; this.$refs.modalForm.disableSubmit = true; }, + // 鑷畾涔夎鐐瑰嚮浜嬩欢 customRow(record) { return { @@ -409,42 +413,208 @@ /** * 鍗曟嵁鎻愪氦 */ - // handleSubmit: function() { + handleSubmit: function(id) { + if (!this.url.submit) { + this.$message.error('璇疯缃畊rl.submit灞炴��!') + return + } + + let targetId = id; // 浠庡弬鏁拌幏鍙朓D + // 濡傛灉娌℃湁閫氳繃鍙傛暟浼犻�扞D锛屽垯妫�鏌ラ�変腑鐨勮褰� + if (!targetId) { + if (this.selectedRowKeys.length != 1) { + this.$message.warning('璇烽�夋嫨涓�鏉¤褰曪紒') + return + } else { + targetId = this.selectedRowKeys[0] + } + } + + // 灏嗗弬鏁颁綔涓烘煡璇㈠弬鏁伴檮鍔犲埌URL涓� + let httpurl = this.url.submit + '?orderId=' + encodeURIComponent(targetId) + let method = 'get' + var params = {} // 娓呯┖params锛屽洜涓哄弬鏁板凡缁忓湪URL涓紶閫� + + const that = this + + this.$confirm({ + title: '纭鎻愪氦锛�', + // content: '姝e湪鎻愪氦鏁版嵁锛岃鑰愬績绛夊緟...', + okText: '纭', + cancelText: '鍙栨秷', + onOk() { + // 鏄剧ず鍔犺浇鎻愮ず + const hide = that.$message.loading('姝e湪鎻愪氦鏁版嵁锛岃鑰愬績绛夊緟...', 0); + + // 鍙戦�佽姹� + return httpAction(httpurl, params, method).then((res) => { + hide(); // 闅愯棌鍔犺浇鎻愮ず + if (res.success) { + that.$message.success(res.message) + that.loadData() + } else { + that.$message.warning(res.message) + } + }).catch(error => { + hide(); // 闅愯棌鍔犺浇鎻愮ず + that.$message.error('鎻愪氦澶辫触: ' + error.message) + }).finally(() => { + that.loading = false + }) + } + }) + }, + + // /** + // * 鍗曟嵁鎻愪氦锛堟敮鎸佸疄鏃惰繘搴︽洿鏂帮級 + // */ + // handleSubmit: function(id) { // if (!this.url.submit) { // this.$message.error('璇疯缃畊rl.submit灞炴��!') // return // } - // if (this.selectedRowKeys.length != 1) { - // this.$message.warning('璇烽�夋嫨涓�鏉¤褰曪紒') - // return - // } else { - // var id = this.selectedRowKeys[0] - // let httpurl = this.url.submit - // let method = 'post' - // var params = { id: id } // - // const that = this - // - // this.$confirm({ - // title: '纭鎻愪氦锛�', - // okText: '纭', - // cancelText: '鍙栨秷', - // onOk() { - // httpAction(httpurl, params, method).then((res) => { - // if (res.success) { - // that.$message.success(res.message) - // that.loadData() - // } else { - // that.$message.warning(res.message) - // } - // }).finally(() => { - // that.loading = false - // - // }) - // } - // }) + // let targetId = id; // 浠庡弬鏁拌幏鍙朓D + // // 濡傛灉娌℃湁閫氳繃鍙傛暟浼犻�扞D锛屽垯妫�鏌ラ�変腑鐨勮褰� + // if (!targetId) { + // if (this.selectedRowKeys.length != 1) { + // this.$message.warning('璇烽�夋嫨涓�鏉¤褰曪紒') + // return + // } else { + // targetId = this.selectedRowKeys[0] + // } // } + // + // const that = this + // + // this.$confirm({ + // title: '纭鎻愪氦锛�', + // content: '鎻愪氦杩囩▼涓彲鑳介渶瑕佽緝闀挎椂闂达紝璇疯�愬績绛夊緟...', + // okText: '纭', + // cancelText: '鍙栨秷', + // + // onOk() { + // // 鍒涘缓杩涘害鏉℃ā鎬佹 + // let percent = 0; + // let totalTools = 0; // 鍒�鍏锋�绘暟 + // let processedTools = 0; // 宸插鐞嗗垁鍏锋暟 + // + // // 浣跨敤 this.$info 鍒涘缓妯℃�佹 + // const modal = that.$info({ + // title: '姝e湪鎻愪氦鏁版嵁', + // content: that.$createElement('div', [ + // that.$createElement('p', '姝e湪澶勭悊鍒�鍏峰叆搴擄紝璇风◢鍊�...'), + // that.$createElement('a-progress', { + // props: { + // percent: percent, + // status: 'active' + // } + // }), + // // that.$createElement('p', { + // // style: { + // // marginTop: '10px' + // // } + // // }, `杩涘害: ${processedTools}/${totalTools} 鎶婂垁鍏穈) + // ]), + // okButtonProps: { style: { display: 'none' } }, // 闅愯棌纭鎸夐挳 + // cancelText: '鍙栨秷', + // closable: false, // 绂佹鍏抽棴妯℃�佹 + // }); + // + // // 鏇存柊杩涘害鏄剧ず鍑芥暟 + // const updateProgress = () => { + // if (totalTools > 0) { + // percent = Math.round((processedTools / totalTools) * 100); + // // 纭繚杩涘害涓嶈秴杩�90%锛屼繚鐣欐渶鍚�10%缁欐渶缁堝畬鎴� + // percent = percent > 90 ? 90 : percent; + // } + // + // modal.update({ + // content: that.$createElement('div', [ + // that.$createElement('p', '姝e湪澶勭悊鍒�鍏峰叆搴擄紝璇风◢鍊�...'), + // that.$createElement('a-progress', { + // props: { + // percent: percent, + // status: 'active' + // } + // }), + // // that.$createElement('p', { + // // style: { + // // marginTop: '10px' + // // } + // // }, `杩涘害: ${processedTools}/${totalTools} 鎶婂垁鍏穈) + // ]) + // }); + // }; + // + // // 鍙戦�佽姹� + // let httpurl = that.url.submit + '?orderId=' + encodeURIComponent(targetId) + // + // return httpAction(httpurl, {}, 'get').then((res) => { + // // 鏍规嵁鍚庣杩斿洖鐨勬�诲垁鍏锋暟璁剧疆杩涘害 + // if (res.success) { + // // 濡傛灉鍚庣杩斿洖浜嗘�诲垁鍏锋暟 + // if (res.result && res.result.quantity !== undefined) { + // totalTools = res.result.quantity; + // processedTools = res.result.totalSubmitted || 0; //宸插鐞嗗垁鍏锋暟 + // } + // // 濡傛灉鍚庣杩斿洖浜嗘槑缁嗗垪琛紝鏍规嵁receive_number璁$畻鎬绘暟閲� + // else if (res.result && res.result.detailList) { + // // 鏍规嵁姣忎釜鏄庣粏鐨剅eceive_number绱姞璁$畻鎬诲垁鍏锋暟 + // totalTools = res.result.detailList.reduce((total, detail) => { + // return total + (detail.receiveNumber || 0); + // }, 0); + // processedTools = totalTools; // 宸插鐞嗘暟閲� + // } + // + // // 鏇存柊杩涘害鏄剧ず + // percent = 100; // 鐩存帴鏄剧ず100%瀹屾垚 + // updateProgress(); + // + // // 鏄剧ず瀹屾垚鐘舵�� + // setTimeout(() => { + // modal.update({ + // content: that.$createElement('div', [ + // that.$createElement('p', '姝e湪澶勭悊鍒�鍏峰叆搴擄紝璇风◢鍊�...'), + // that.$createElement('a-progress', { + // props: { + // percent: percent, + // status: 'success' + // } + // }), + // that.$createElement('p', { + // style: { + // marginTop: '10px' + // } + // }, totalTools > 0 ? + // `杩涘害: ${processedTools}/${totalTools} 鎶婂垁鍏穈 : + // '澶勭悊瀹屾垚') + // ]) + // }); + // + // // 寤惰繜鍏抽棴妯℃�佹 + // setTimeout(() => { + // modal.destroy(); + // that.$message.success(res.message || '鎻愪氦鎴愬姛'); + // that.loadData(); + // }, 500); + // }, 300); + // } else { + // // 澶勭悊閿欒鎯呭喌 + // modal.destroy(); + // that.$message.warning(res.message || '鎻愪氦澶辫触'); + // } + // }).catch(error => { + // modal.destroy(); + // that.$message.error('鎻愪氦澶辫触: ' + error.message) + // }).finally(() => { + // that.loading = false + // }) + // } + // }) // }, + + } } </script> diff --git a/src/views/cms/CuttingInventoryList.vue b/src/views/cms/CuttingInventoryList.vue index 65b96c9..b1a972f 100644 --- a/src/views/cms/CuttingInventoryList.vue +++ b/src/views/cms/CuttingInventoryList.vue @@ -108,8 +108,23 @@ </a-menu> </a-dropdown> </span> - </a-table> + </div> + <!-- 搴撳瓨缁熻琛ㄦ牸 --> + <div style="margin-top: 20px;"> + <a-card title="搴撳瓨缁熻"> + <a-table + :pagination="statisticsPagination" + :columns="statisticsColumns"/>in + :dataSource="statisticsData" + :loading="statisticsLoading" + bordered + size="middle"> + <span slot="inventoryStatus" slot-scope="text"> + <a-tag :color="getTagColor(text)">{{ text }}</a-tag> + </span> + /> + </a-card> </div> <cutting-inventory-modal ref="modalForm" @ok="modalFormOk"></cutting-inventory-modal> @@ -147,7 +162,7 @@ { title:'鍒�鍏风紪鐮�', align:"center", - dataIndex: 'cuttingId' + dataIndex: 'cuttingId_dictText' }, { title:'鍒�鍏锋潯鐮�', @@ -173,20 +188,80 @@ // scopedSlots: { customRender: 'action' } // } ], + // 缁熻琛ㄦ牸鍒楀畾涔� + statisticsColumns: [ + { + title:'鍒�鍏风紪鐮�', + align:"center", + dataIndex: 'cuttingCode', + customRender: (text, record, index) => { + const obj = { + children: text, + attrs: {} + }; + // 璁剧疆鍚堝苟閫昏緫 + if (record.rowSpan !== undefined) { + obj.attrs.rowSpan = record.rowSpan; + } else { + obj.attrs.rowSpan = 1; + } + return obj; + } + }, + { + title: '搴撳瓨鐘舵��', + dataIndex: 'inventoryStatus', + align: "center", + }, + { + title: '鏁伴噺', + dataIndex: 'cuttingIdNumber', + align: "center" + } + ], url: { list: "/cms/cuttingInventory/list", delete: "/cms/cuttingInventory/delete", deleteBatch: "/cms/cuttingInventory/deleteBatch", exportXlsUrl: "/cms/cuttingInventory/exportXls", importExcelUrl: "cms/cuttingInventory/importExcel", - + statistics: "/cms/cuttingInventory/statistics" // 娣诲姞缁熻鎺ュ彛鍦板潃 }, dictOptions:{}, superFieldList:[], + // 缁熻鏁版嵁 + statisticsData: [], + statisticsLoading: false, + + // 涓轰富琛ㄦ牸淇濈暀鍘熸湁鐨勫垎椤甸厤缃� + ipagination: { + current: 1, + pageSize: 10, + pageSizeOptions: ['10', '20', '30'], + showTotal: (total, range) => { + return range[0] + '-' + range[1] + ' 鍏�' + total + '鏉�' + }, + showQuickJumper: true, + showSizeChanger: true, + total: 0 + }, + // 涓虹粺璁¤〃鏍兼坊鍔犲崟鐙殑鍒嗛〉閰嶇疆 + statisticsPagination: { + current: 1, + pageSize: 10, + pageSizeOptions: ['10', '20', '30'], + showTotal: (total, range) => { + return range[0] + '-' + range[1] + ' 鍏�' + total + '鏉�' + }, + showQuickJumper: true, + showSizeChanger: true, + total: 0 + } } }, created() { - this.getSuperFieldList(); + this.getSuperFieldList(); + this.loadStatisticsData(); }, computed: { importExcelUrl: function(){ @@ -203,8 +278,133 @@ fieldList.push({type:'string',value:'inventoryStatus',text:'搴撳瓨鐘舵��'}) fieldList.push({type:'number',value:'currentLife',text:'褰撳墠瀵垮懡(鐧惧垎姣�)'}) this.superFieldList = fieldList + }, + // 鍔犺浇缁熻淇℃伅 + loadStatisticsData() { + this.statisticsLoading = true; + // 璋冪敤鍚庣鎺ュ彛鑾峰彇缁熻鏁版嵁 + this.$http({ + url: this.url.statistics, + method: "get", + params: { + ...this.getQueryParams(), + pageNo: this.statisticsPagination.current, + pageSize: this.statisticsPagination.pageSize + } + }).then((res) => { + if (res.success) { + // 鏇存柊缁熻琛ㄦ牸鐨勫垎椤垫�绘暟 + this.statisticsPagination.total = res.result.total; + // 瀵规暟鎹繘琛屽悎骞跺鐞嗭紝浣跨敤 res.result.records 鑰屼笉鏄� res.result + this.statisticsData = this.mergeStatisticsData(res.result.records); + } + this.statisticsLoading = false; + }).catch(() => { + this.statisticsLoading = false; + }); + }, + + // 鏍规嵁鐘舵�佽繑鍥炴爣绛鹃鑹� + getTagColor(status) { + const colorMap = { + '姝e父': 'green', + '宸插嚭搴�': 'orange', + }; + return colorMap[status]; + }, + + // 閲嶅啓鎼滅储鏂规硶锛屽湪鎼滅储瀹屾垚鍚庡姞杞界粺璁′俊鎭� + searchQuery() { + this.loadData(1); + // 鎼滅储瀹屾垚鍚庡姞杞界粺璁′俊鎭� + this.$nextTick(() => { + this.loadStatisticsData(); + }); + }, + + // 閲嶅啓閲嶇疆鏂规硶 + searchReset() { + this.queryParam = {}; + this.loadData(1); + this.$nextTick(() => { + this.loadStatisticsData(); + }); + }, + + // 閲嶅啓鍔犺浇鏁版嵁鏂规硶 + loadData(arg) { + if (arg === 1) { + this.ipagination.current = 1; + } + var params = this.getQueryParams();//鏌ヨ鏉′欢 + this.loading = true; + this.$http({ + url: this.url.list, + method: "get", + params: params + }).then((res) => { + if (res.success) { + this.dataSource = res.result.records; + this.ipagination.total = res.result.total; + + // 鍔犺浇缁熻淇℃伅 + this.loadStatisticsData(); + } + this.loading = false; + }) + }, + // 鍚堝苟缁熻鏁版嵁鏂规硶 + mergeStatisticsData(data) { + if (!data || data.length === 0) return []; + + const grouped = {}; + + // 鎸夊垁鍏风紪鐮佸垎缁� + data.forEach(item => { + const key = item.cuttingCode; + if (!grouped[key]) { + grouped[key] = { + cuttingCode: item.cuttingCode, + cuttingId: item.cuttingId, + statuses: [] + }; + } + // 浣跨敤 item.inventoryStatus 鍜� item.cuttingIdNumber + grouped[key].statuses.push({ + status: item.inventoryStatus, + count: item.cuttingIdNumber + }); + }); + + // 杞崲涓鸿〃鏍奸渶瑕佺殑鏍煎紡锛屽苟娣诲姞琛屽悎骞朵俊鎭� + const result = []; + Object.values(grouped).forEach(group => { + const statuses = group.statuses; + const totalCount = statuses.reduce((sum, s) => sum + s.count, 0); + + // 绗竴琛屾樉绀哄垁鍏风紪鐮侊紝璁剧疆rowSpan + result.push({ + cuttingCode: group.cuttingCode, + cuttingId: group.cuttingId, + inventoryStatus: `${statuses[0].status}:${statuses[0].count}`, + cuttingIdNumber: totalCount, + rowSpan: statuses.length // 鍚堝苟鐨勮鏁� + }); + + // 鍓╀綑琛屽彧鏄剧ず鐘舵�佷俊鎭紝鍒�鍏风紪鐮佸垪rowSpan涓�0 + for (let i = 1; i < statuses.length; i++) { + result.push({ + cuttingCode: group.cuttingCode, + cuttingId: group.cuttingId, + inventoryStatus: `${statuses[i].status}:${statuses[i].count}`, + cuttingIdNumber: totalCount, + rowSpan: 0 // 琛ㄧず琚悎骞� + }); + } + }); + return result; } - } + }, } </script> <style scoped> 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) { diff --git a/src/views/mes/modules/MesProductionWorkOrderReportModal.vue b/src/views/mes/modules/MesProductionWorkOrderReportModal.vue index 2aa862a..5d45778 100644 --- a/src/views/mes/modules/MesProductionWorkOrderReportModal.vue +++ b/src/views/mes/modules/MesProductionWorkOrderReportModal.vue @@ -171,8 +171,8 @@ }); }, // 鎵撳嵃鏍囩 - printLabel() { - this.generateQRCode('鎴愬搧鎵樻爣绛�'); // 鍏堢敓鎴愪簩缁寸爜 + printLabel(palletNumber) { + this.generateQRCode(palletNumber); // 鍏堢敓鎴愪簩缁寸爜 setTimeout(() => { printJS({ printable: 'printLabel', @@ -279,7 +279,7 @@ } //鎴愬搧鎵樻爣绛炬墦鍗� this.$nextTick(() => { - this.printLabel() + this.printLabel(data.palletNumber) }) } this.submitCallback() -- Gitblit v1.9.3