diff --git a/klp-ui/src/views/crm/components/CoilTable.vue b/klp-ui/src/views/crm/components/CoilTable.vue index 3739463ab..26d7b08d1 100644 --- a/klp-ui/src/views/crm/components/CoilTable.vue +++ b/klp-ui/src/views/crm/components/CoilTable.vue @@ -55,7 +55,7 @@ - + @@ -282,4 +282,10 @@ export default { }, } } - \ No newline at end of file + + + \ No newline at end of file diff --git a/klp-ui/src/views/crm/contract/components/ProductContent.vue b/klp-ui/src/views/crm/contract/components/ProductContent.vue index 0525b001d..0f16f2a7f 100644 --- a/klp-ui/src/views/crm/contract/components/ProductContent.vue +++ b/klp-ui/src/views/crm/contract/components/ProductContent.vue @@ -39,49 +39,49 @@
-
+
{{ index + 1 }}
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -397,6 +397,10 @@ export default { align-items: center; } +.edit-cell { + padding: 0px; +} + .table-cell:last-child { border-right: none; } diff --git a/klp-ui/src/views/erp/purchaseAudit/index.vue b/klp-ui/src/views/erp/purchaseAudit/index.vue index cec0e9d61..7d7e3ab8c 100644 --- a/klp-ui/src/views/erp/purchaseAudit/index.vue +++ b/klp-ui/src/views/erp/purchaseAudit/index.vue @@ -66,7 +66,7 @@

从左侧选择一条采购合同进行审核

-
+
{{ current.planNo }} @@ -91,8 +91,9 @@
采购要求共 {{ current.items.length }} 项
- - + + + @@ -131,6 +132,7 @@ export default { return { loading: true, buttonLoading: false, + detailLoading: false, total: 0, pendingCount: 0, planList: [], @@ -175,10 +177,11 @@ export default { this.getList() }, selectPlan(row) { + this.detailLoading = true getPurchasePlan(row.planId).then(res => { this.current = res.data || {} this.auditOpinion = this.current.auditOpinion || '' - }) + }).finally(() => { this.detailLoading = false }) }, doAudit(status) { this.buttonLoading = true @@ -192,10 +195,11 @@ export default { this.getList(true) // 刷新列表但保留右侧当前计划 this.loadPendingCount() // 右侧停留在刚审核的计划:状态/历史即时更新,驳回后可直接重新审核 + this.detailLoading = true getPurchasePlan(pid).then(res => { this.current = res.data || {} this.auditOpinion = '' - }) + }).finally(() => { this.detailLoading = false }) }).finally(() => { this.buttonLoading = false }) }, auditText(s) { diff --git a/klp-ui/src/views/erp/purchaseDelivery/index.vue b/klp-ui/src/views/erp/purchaseDelivery/index.vue index 610554d87..c81bf2814 100644 --- a/klp-ui/src/views/erp/purchaseDelivery/index.vue +++ b/klp-ui/src/views/erp/purchaseDelivery/index.vue @@ -53,7 +53,7 @@

从左侧选择一条采购合同

-
+
{{ current.planNo }} @@ -61,6 +61,7 @@
刷新到货 + 下载模板 采购要求
- - - + + + + @@ -162,6 +164,7 @@ import { refreshArrival } from '@/api/erp/purchasePlan' import { getToken } from '@/utils/auth' +import * as XLSX from 'xlsx' export default { name: 'ErpPurchaseDelivery', @@ -176,6 +179,7 @@ export default { deliveryList: [], deliveryLoading: false, refreshing: false, + detailLoading: false, upload: { headers: { Authorization: 'Bearer ' + getToken() } }, progressColor: '#5b8db8' } @@ -220,7 +224,8 @@ export default { refreshDetail() { const planId = this.current.planId if (!planId) return - getPurchasePlan(planId).then(res => { this.current = { ...this.current, ...(res.data || {}) } }) + this.detailLoading = true + getPurchasePlan(planId).then(res => { this.current = { ...this.current, ...(res.data || {}) } }).finally(() => { this.detailLoading = false }) this.deliveryLoading = true listDelivery(planId).then(res => { this.deliveryList = res.data || [] }).finally(() => { this.deliveryLoading = false }) }, @@ -269,6 +274,15 @@ export default { }, contractStatusText(v) { return { 0: '草稿', 1: '生效', 2: '作废', 3: '已完成' }[v] || '—' + }, + downloadTemplate() { + const headers = ['日期', '牌号', '规格', '卷号', '单卷重量', '车号', '数量', '件数', '销售', '钢厂到站'] + const sampleRow = ['2026-01-01', 'Q235B', '1.0*1250*C', 'COIL0001', '20.50', '辽A12345', '60.8', '3', 'XS001', '沈阳站'] + const wb = XLSX.utils.book_new() + const ws = XLSX.utils.aoa_to_sheet([headers, sampleRow]) + ws['!cols'] = headers.map(h => ({ wch: h.length > 4 ? 14 : 10 })) + XLSX.utils.book_append_sheet(wb, ws, '到货模板') + XLSX.writeFile(wb, '到货导入模板.xlsx') } } } diff --git a/klp-ui/src/views/erp/purchasePlan/index.vue b/klp-ui/src/views/erp/purchasePlan/index.vue index a79b336a0..48d9fa6db 100644 --- a/klp-ui/src/views/erp/purchasePlan/index.vue +++ b/klp-ui/src/views/erp/purchasePlan/index.vue @@ -124,10 +124,13 @@
- + - + + + + @@ -157,7 +160,7 @@
-
+
{{ current.planNo }} @@ -212,9 +215,10 @@ - - - + + + + @@ -367,6 +371,7 @@ export default { }, buttonLoading: false, submitLoading: false, + detailLoading: false, selectedContracts: [], // 合同选择器 pickerOpen: false, @@ -419,7 +424,8 @@ export default { refreshDetail() { const planId = this.current.planId if (!planId) return - getPurchasePlan(planId).then(res => { this.current = { ...this.current, ...(res.data || {}) } }) + this.detailLoading = true + getPurchasePlan(planId).then(res => { this.current = { ...this.current, ...(res.data || {}) } }).finally(() => { this.detailLoading = false }) }, // ---- 新增 / 编辑 ---- resetForm() { @@ -431,6 +437,7 @@ export default { this.mode = 'edit' }, handleEdit() { + this.detailLoading = true getPurchasePlan(this.current.planId).then(res => { const d = res.data || {} this.form = { @@ -440,7 +447,7 @@ export default { } this.selectedContracts = [] this.mode = 'edit' - }) + }).finally(() => { this.detailLoading = false }) }, cancelEdit() { this.mode = this.planList.length ? 'view' : 'empty' @@ -520,7 +527,7 @@ export default { }).catch(() => cb([])) }, blankItem() { - return { spec: '', weight: '', manufacturer: '' } + return { spec: '', material: '', weight: '', manufacturer: '' } }, addItem() { // 新行继承上一行的厂商(同批多为同厂),规格/重量留空 diff --git a/klp-ui/src/views/wms/coil/do/trace.vue b/klp-ui/src/views/wms/coil/do/trace.vue index 613adcd49..69d7b90a0 100644 --- a/klp-ui/src/views/wms/coil/do/trace.vue +++ b/klp-ui/src/views/wms/coil/do/trace.vue @@ -1,7 +1,7 @@