diff --git a/src/utils/zplGenerator.js b/src/utils/zplGenerator.js index 6b99058..0e8ee9c 100644 --- a/src/utils/zplGenerator.js +++ b/src/utils/zplGenerator.js @@ -201,7 +201,7 @@ export class ZPLGenerator { case 'day': return String(date.getDate()) case 'week': - return this.calculateWeekNumber(date, element.firstWeekDate) + return this.calculateWeekNumber(date, element.firstDayOfWeek) case 'weekday': return this.calculateWeekday(date, element.firstDayOfWeek) case 'full': @@ -210,22 +210,34 @@ export class ZPLGenerator { } } - calculateWeekNumber(date, firstWeekDateStr) { - let firstWeekDate = new Date(date.getFullYear(), 0, 1) - if (firstWeekDateStr) { - const parsed = this.parseDateString(firstWeekDateStr) - if (parsed) { - firstWeekDate = parsed - } - } - const diffMs = date.getTime() - firstWeekDate.getTime() + calculateWeekNumber(date, firstDayOfWeekStr) { + const yearStartDate = new Date(date.getFullYear(), 0, 1) + const firstDayOfWeek = Number(firstDayOfWeekStr === undefined || firstDayOfWeekStr === null || firstDayOfWeekStr === '' ? 0 : firstDayOfWeekStr) + const normalizedFirstDayOfWeek = Number.isNaN(firstDayOfWeek) ? 0 : Math.max(0, Math.min(6, firstDayOfWeek)) + + const diffMs = date.getTime() - yearStartDate.getTime() const diffDays = Math.floor(diffMs / 86400000) - const weekNo = Math.floor(diffDays / 7) + 1 - return String(Math.max(1, weekNo)) + if (diffDays <= 0) { + return `01${String(date.getFullYear() % 100).padStart(2, '0')}` + } + + const yearStartWeekday = yearStartDate.getDay() // 0=周日,1=周一...6=周六 + const daysToNextWeekStart = (normalizedFirstDayOfWeek - yearStartWeekday + 7) % 7 + if (daysToNextWeekStart === 0) { + const weekNo = Math.floor(diffDays / 7) + 1 + const normalizedWeekNo = Math.max(1, weekNo) + return `${String(normalizedWeekNo).padStart(2, '0')}${String(date.getFullYear() % 100).padStart(2, '0')}` + } + if (diffDays < daysToNextWeekStart) { + return `01${String(date.getFullYear() % 100).padStart(2, '0')}` + } + const weekNo = Math.floor((diffDays - daysToNextWeekStart) / 7) + 2 + const normalizedWeekNo = Math.max(1, weekNo) + return `${String(normalizedWeekNo).padStart(2, '0')}${String(date.getFullYear() % 100).padStart(2, '0')}` } calculateWeekday(date, firstDayOfWeekStr) { - const firstDayOfWeek = Number(firstDayOfWeekStr || 1) + const firstDayOfWeek = Number(firstDayOfWeekStr === undefined || firstDayOfWeekStr === null || firstDayOfWeekStr === '' ? 0 : firstDayOfWeekStr) const dayOfWeek = date.getDay() === 0 ? 7 : date.getDay() const adjustedDay = ((dayOfWeek - firstDayOfWeek + 7) % 7) + 1 return String(adjustedDay) diff --git a/src/views/modules/labelSetting/components/PropertyForm.vue b/src/views/modules/labelSetting/components/PropertyForm.vue index d040518..33d8c53 100644 --- a/src/views/modules/labelSetting/components/PropertyForm.vue +++ b/src/views/modules/labelSetting/components/PropertyForm.vue @@ -185,16 +185,11 @@ @@ -719,7 +714,7 @@ export default { this.setElementDefault('yearDigits', '4') this.setElementDefault('monthDayDigits', '2') this.setElementDefault('firstWeekDate', '') - this.setElementDefault('firstDayOfWeek', '1') + this.setElementDefault('firstDayOfWeek', '0') this.setElementDefault('dateOffsetDays', 0) } else if (this.element.dataType === 'number') { this.setElementDefault('roundHalfUp', true) @@ -771,7 +766,7 @@ export default { this.$set(this.element, 'yearDigits', '4') this.$set(this.element, 'monthDayDigits', '2') this.$set(this.element, 'firstWeekDate', '') - this.$set(this.element, 'firstDayOfWeek', '1') + this.$set(this.element, 'firstDayOfWeek', '0') this.$set(this.element, 'dateOffsetDays', 0) } else if (newType === 'number') { this.$set(this.element, 'roundHalfUp', true)