Browse Source

周别

master
han\hanst 3 days ago
parent
commit
4939dac754
  1. 38
      src/utils/zplGenerator.js
  2. 19
      src/views/modules/labelSetting/components/PropertyForm.vue

38
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)

19
src/views/modules/labelSetting/components/PropertyForm.vue

@ -185,16 +185,11 @@
</div>
<template v-if="element.dateExtractType === 'week'">
<el-form-item label="第一周日期">
<el-date-picker
v-model="element.firstWeekDate"
type="date"
placeholder="选择第一周日期"
size="mini"
style="width: 100%;"
format="yyyy-MM-dd"
value-format="yyyy-MM-dd">
</el-date-picker>
<el-form-item label="每周第一天">
<el-select v-model="element.firstDayOfWeek" size="mini" style="width: 100%;">
<el-option label="周日" value="0" />
<el-option label="周一" value="1" />
</el-select>
</el-form-item>
</template>
@ -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)

Loading…
Cancel
Save