From 43d952fb23f8a156c67782ca47ba8ed39e435f50 Mon Sep 17 00:00:00 2001 From: "han\\hanst" Date: Fri, 15 May 2026 13:47:47 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A0=87=E7=AD=BE=E6=94=AF=E6=8C=81=E6=97=A5?= =?UTF-8?q?=E6=9C=9F=E5=8A=A0=E6=B5=81=E6=B0=B4=E5=8F=B7=EF=BC=9B=E4=B8=8A?= =?UTF-8?q?=E4=B8=AD=E4=B8=8B=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/utils/zplGenerator.js | 36 +++++++++++-- .../modules/labelSetting/LabelDesigner.vue | 20 ++++++-- .../com_add_update_customer_label.vue | 12 +++-- .../labelSetting/components/PropertyForm.vue | 51 +++++++++++++++++-- .../labelSetting/components/ZPLPreview.vue | 1 + .../labelSetting/customer_label_setting.vue | 12 +++-- 6 files changed, 110 insertions(+), 22 deletions(-) diff --git a/src/utils/zplGenerator.js b/src/utils/zplGenerator.js index 0e8ee9c..58991e7 100644 --- a/src/utils/zplGenerator.js +++ b/src/utils/zplGenerator.js @@ -199,7 +199,7 @@ export class ZPLGenerator { case 'month': return String(date.getMonth() + 1) case 'day': - return String(date.getDate()) + return this.formatExtractDay(date, element) case 'week': return this.calculateWeekNumber(date, element.firstDayOfWeek) case 'weekday': @@ -255,9 +255,7 @@ export class ZPLGenerator { const month = monthDayDigits === '1' ? String(date.getMonth() + 1) : String(date.getMonth() + 1).padStart(2, '0') - const day = monthDayDigits === '1' - ? String(date.getDate()) - : String(date.getDate()).padStart(2, '0') + const day = this.formatFullDateDay(date, element, monthDayDigits) if (dateFormat === 'dmy') { return `${day}${separator}${month}${separator}${year}` @@ -268,6 +266,36 @@ export class ZPLGenerator { return `${year}${separator}${month}${separator}${day}` } + formatExtractDay(date, element) { + if (this.isTenDayPeriodMode(element)) { + return this.mapDayToTenDayPeriod(date.getDate()) + } + return String(date.getDate()) + } + + formatFullDateDay(date, element, monthDayDigits) { + if (this.isTenDayPeriodMode(element)) { + return this.mapDayToTenDayPeriod(date.getDate()) + } + return monthDayDigits === '1' + ? String(date.getDate()) + : String(date.getDate()).padStart(2, '0') + } + + isTenDayPeriodMode(element) { + return (element.firstWeekDate || 'normal') === 'xun' + } + + mapDayToTenDayPeriod(dayOfMonth) { + if (dayOfMonth <= 10) { + return '01' + } + if (dayOfMonth <= 20) { + return '11' + } + return '21' + } + parseDateString(dateStr) { if (!dateStr || typeof dateStr !== 'string') { return null diff --git a/src/views/modules/labelSetting/LabelDesigner.vue b/src/views/modules/labelSetting/LabelDesigner.vue index 58aac97..05431f4 100644 --- a/src/views/modules/labelSetting/LabelDesigner.vue +++ b/src/views/modules/labelSetting/LabelDesigner.vue @@ -462,13 +462,16 @@ export default { // 修复:对每个元素补全属性,保证响应式 const defaultElement = {reportId: '', type: '', x: 0, y: 0, data: '', fontSize: 30, bold: false, newline: false, lineRows: 2, - lineWidth: 200, digits: 6, step: 1, width: 100, height: 30, previewUrl: '', barcodeType: '', showContent: true, showElement: true, showSerialNumber: true, + lineWidth: 200, digits: 2, step: 1, width: 100, height: 30, previewUrl: '', barcodeType: '', showContent: true, showElement: true, showSerialNumber: false, showMainSeq: false,parentSerialLabelNo:'', seqName: '', isChecked: false, decimalPlaces: '', showDecimalPlaces: false, thousandsSeparator: false, roundHalfUp: true, dateOffsetDays: 0, // 字体相关属性 fontFamily: 'default', textAlign: 'left', letterSpacing: 0, fontItalic: false, fontUnderline: false }; this.elements = (data.data || []).map(item => { const element = Object.assign({}, defaultElement, item); + if (typeof element.showSerialNumber === 'string') { + element.showSerialNumber = element.showSerialNumber === 'true' + } // 为一维码元素确保有新属性和合理的毫米默认值 if (element.type === 'onecode') { if (!element.barcodeType) element.barcodeType = 'CODE128'; @@ -479,9 +482,15 @@ export default { if (element.showSerialNumber === undefined || element.showSerialNumber === null || element.showSerialNumber === '') { element.showSerialNumber = true; } - // 如果是字符串类型,转换为布尔值 - if (typeof element.showSerialNumber === 'string') { - element.showSerialNumber = element.showSerialNumber === 'true'; + } else if (element.type === 'text' && element.dataType === 'date') { + if (element.showSerialNumber === undefined || element.showSerialNumber === null || element.showSerialNumber === '') { + element.showSerialNumber = false + } + if (element.digits === undefined || element.digits === null || element.digits === '') { + element.digits = 2 + } + if (element.step === undefined || element.step === null || element.step === '') { + element.step = 1 } } return element; @@ -528,8 +537,9 @@ export default { newline: false, lineRows: 2, lineWidth: 200, - digits: 6, + digits: 2, step: 1, + showSerialNumber: false } // 根据类型设置默认尺寸和特殊属性 diff --git a/src/views/modules/labelSetting/com_add_update_customer_label.vue b/src/views/modules/labelSetting/com_add_update_customer_label.vue index 13e7256..987c173 100644 --- a/src/views/modules/labelSetting/com_add_update_customer_label.vue +++ b/src/views/modules/labelSetting/com_add_update_customer_label.vue @@ -6,14 +6,13 @@ - - - + + - - + + @@ -114,6 +113,8 @@ export default { pageData: { site: this.$store.state.user.site, username: this.$store.state.user.name, + customerId: '', + addressNo: '', labelNo: '', labelType: '', labelName: '', @@ -139,6 +140,7 @@ export default { labels: { site: '工厂编号:', customerId: '客户编码:', + addressNo: '地址编码:', titleCon: '客户标签定义维护', labelNo: '标签编号:', labelType: '标签类型:', diff --git a/src/views/modules/labelSetting/components/PropertyForm.vue b/src/views/modules/labelSetting/components/PropertyForm.vue index 33d8c53..9ada75a 100644 --- a/src/views/modules/labelSetting/components/PropertyForm.vue +++ b/src/views/modules/labelSetting/components/PropertyForm.vue @@ -239,6 +239,41 @@ +
+ + + + + + +
+
+ + 流水号后缀 + +
+
+ +
@@ -692,9 +727,9 @@ export default { } }, methods: { - setElementDefault(key, defaultValue) { + setElementDefault(key, defaultValue, keepEmptyString = false) { const value = this.element[key] - if (value === undefined || value === null || value === '') { + if (value === undefined || value === null || (!keepEmptyString && value === '')) { this.$set(this.element, key, defaultValue) } }, @@ -710,12 +745,15 @@ export default { this.setElementDefault('dateSourceType', this.inferDateSourceType(this.element.data)) this.setElementDefault('dateExtractType', 'full') this.setElementDefault('dateFormat', 'ymd') - this.setElementDefault('dateSeparator', '-') + this.setElementDefault('dateSeparator', '-', true) this.setElementDefault('yearDigits', '4') this.setElementDefault('monthDayDigits', '2') - this.setElementDefault('firstWeekDate', '') + this.setElementDefault('firstWeekDate', 'normal') this.setElementDefault('firstDayOfWeek', '0') this.setElementDefault('dateOffsetDays', 0) + this.setElementDefault('showSerialNumber', false) + this.setElementDefault('digits', 2) + this.setElementDefault('step', 1) } else if (this.element.dataType === 'number') { this.setElementDefault('roundHalfUp', true) } else if (this.element.dataType === 'string') { @@ -765,9 +803,12 @@ export default { this.$set(this.element, 'dateSeparator', '-') this.$set(this.element, 'yearDigits', '4') this.$set(this.element, 'monthDayDigits', '2') - this.$set(this.element, 'firstWeekDate', '') + this.$set(this.element, 'firstWeekDate', 'normal') this.$set(this.element, 'firstDayOfWeek', '0') this.$set(this.element, 'dateOffsetDays', 0) + this.$set(this.element, 'showSerialNumber', false) + this.$set(this.element, 'digits', 2) + this.$set(this.element, 'step', 1) } else if (newType === 'number') { this.$set(this.element, 'roundHalfUp', true) } else if (newType === 'string') { diff --git a/src/views/modules/labelSetting/components/ZPLPreview.vue b/src/views/modules/labelSetting/components/ZPLPreview.vue index ded7518..5176b44 100644 --- a/src/views/modules/labelSetting/components/ZPLPreview.vue +++ b/src/views/modules/labelSetting/components/ZPLPreview.vue @@ -490,6 +490,7 @@ export default { // 3. 调用真实数据预览API const response = await previewLabelWithRealData({ reportId: reportId, + site: this.$store.state.user.site, ...queryParams }) diff --git a/src/views/modules/labelSetting/customer_label_setting.vue b/src/views/modules/labelSetting/customer_label_setting.vue index 11c2b6e..97286d7 100644 --- a/src/views/modules/labelSetting/customer_label_setting.vue +++ b/src/views/modules/labelSetting/customer_label_setting.vue @@ -5,6 +5,9 @@ + + + @@ -119,6 +122,7 @@ export default { site: this.$store.state.user.site, username: this.$store.state.user.name, customerId: '', + addressNo: '', labelNo: '', labelName: '', labelType: '', @@ -163,13 +167,13 @@ export default { }, { userId: this.$store.state.user.name, functionId: 100008003, - serialNumber: '100008003LabelCustomerDesc', + serialNumber: '100008003LabelAddressNo', tableId: '100008003Label', tableName: '客户标签自定义列表', - columnProp: 'customerDesc', + columnProp: 'addressNo', headerAlign: 'center', align: 'center', - columnLabel: '客户名称', + columnLabel: '地址编码', columnHidden: false, columnImage: false, columnSortable: true, @@ -286,6 +290,7 @@ export default { }, labels: { customerId: '客户编码', + addressNo: '地址编码', labelNo: '标签编号:', labelType: '标签类型:', labelName: '报表文件名:', @@ -346,6 +351,7 @@ export default { subLabelFlag: 'N', parentLabelNo: '*', customerId: '', + addressNo: '', remark: '', addFlag: 'Y' };