Browse Source

标签支持日期加流水号;上中下询

master
han\hanst 1 month ago
parent
commit
43d952fb23
  1. 36
      src/utils/zplGenerator.js
  2. 20
      src/views/modules/labelSetting/LabelDesigner.vue
  3. 12
      src/views/modules/labelSetting/com_add_update_customer_label.vue
  4. 51
      src/views/modules/labelSetting/components/PropertyForm.vue
  5. 1
      src/views/modules/labelSetting/components/ZPLPreview.vue
  6. 12
      src/views/modules/labelSetting/customer_label_setting.vue

36
src/utils/zplGenerator.js

@ -199,7 +199,7 @@ export class ZPLGenerator {
case 'month': case 'month':
return String(date.getMonth() + 1) return String(date.getMonth() + 1)
case 'day': case 'day':
return String(date.getDate())
return this.formatExtractDay(date, element)
case 'week': case 'week':
return this.calculateWeekNumber(date, element.firstDayOfWeek) return this.calculateWeekNumber(date, element.firstDayOfWeek)
case 'weekday': case 'weekday':
@ -255,9 +255,7 @@ export class ZPLGenerator {
const month = monthDayDigits === '1' const month = monthDayDigits === '1'
? String(date.getMonth() + 1) ? String(date.getMonth() + 1)
: String(date.getMonth() + 1).padStart(2, '0') : 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') { if (dateFormat === 'dmy') {
return `${day}${separator}${month}${separator}${year}` return `${day}${separator}${month}${separator}${year}`
@ -268,6 +266,36 @@ export class ZPLGenerator {
return `${year}${separator}${month}${separator}${day}` 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) { parseDateString(dateStr) {
if (!dateStr || typeof dateStr !== 'string') { if (!dateStr || typeof dateStr !== 'string') {
return null return null

20
src/views/modules/labelSetting/LabelDesigner.vue

@ -462,13 +462,16 @@ export default {
// //
const defaultElement = {reportId: '', const defaultElement = {reportId: '',
type: '', x: 0, y: 0, data: '', fontSize: 30, bold: false, newline: false, lineRows: 2, 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, 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 fontFamily: 'default', textAlign: 'left', letterSpacing: 0, fontItalic: false, fontUnderline: false
}; };
this.elements = (data.data || []).map(item => { this.elements = (data.data || []).map(item => {
const element = Object.assign({}, defaultElement, item); const element = Object.assign({}, defaultElement, item);
if (typeof element.showSerialNumber === 'string') {
element.showSerialNumber = element.showSerialNumber === 'true'
}
// //
if (element.type === 'onecode') { if (element.type === 'onecode') {
if (!element.barcodeType) element.barcodeType = 'CODE128'; if (!element.barcodeType) element.barcodeType = 'CODE128';
@ -479,9 +482,15 @@ export default {
if (element.showSerialNumber === undefined || element.showSerialNumber === null || element.showSerialNumber === '') { if (element.showSerialNumber === undefined || element.showSerialNumber === null || element.showSerialNumber === '') {
element.showSerialNumber = true; 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; return element;
@ -528,8 +537,9 @@ export default {
newline: false, newline: false,
lineRows: 2, lineRows: 2,
lineWidth: 200, lineWidth: 200,
digits: 6,
digits: 2,
step: 1, step: 1,
showSerialNumber: false
} }
// //

12
src/views/modules/labelSetting/com_add_update_customer_label.vue

@ -6,14 +6,13 @@
<!-- 标签自定义信息 --> <!-- 标签自定义信息 -->
<el-row> <el-row>
<el-col :span="12"> <el-col :span="12">
<el-form-item class="customer-item" :label=labels.site>
<el-input v-model="pageData.site" style="width: 150px;" >
</el-input >
<el-form-item class="customer-item" :label=labels.customerId>
<el-input v-model="pageData.customerId" :readonly="labelNoReadOnly" style="width: 120px;" ></el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item class="customer-item" :label=labels.customerId>
<el-input v-model="pageData.customerId" :readonly="labelNoReadOnly" style="width: 120px;" ></el-input>
<el-form-item class="customer-item" :label=labels.addressNo>
<el-input v-model="pageData.addressNo" :readonly="labelNoReadOnly" style="width: 120px;" ></el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
@ -114,6 +113,8 @@ export default {
pageData: { pageData: {
site: this.$store.state.user.site, site: this.$store.state.user.site,
username: this.$store.state.user.name, username: this.$store.state.user.name,
customerId: '',
addressNo: '',
labelNo: '', labelNo: '',
labelType: '', labelType: '',
labelName: '', labelName: '',
@ -139,6 +140,7 @@ export default {
labels: { labels: {
site: '工厂编号:', site: '工厂编号:',
customerId: '客户编码:', customerId: '客户编码:',
addressNo: '地址编码:',
titleCon: '客户标签定义维护', titleCon: '客户标签定义维护',
labelNo: '标签编号:', labelNo: '标签编号:',
labelType: '标签类型:', labelType: '标签类型:',

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

@ -239,6 +239,41 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
</div> </div>
<div class="form-row">
<el-form-item label="日期天数规则" class="form-item-half">
<el-select v-model="element.firstWeekDate" size="mini" style="width: 100%;">
<el-option label="自然日(18)" value="normal" />
<el-option label="旬别日(01/11/21)" value="xun" />
</el-select>
</el-form-item>
</div>
<div class="form-row">
<el-form-item label="" class="form-item-half">
<el-checkbox v-model="element.showSerialNumber" size="small">流水号后缀</el-checkbox>
</el-form-item>
</div>
<div class="form-row" v-if="element.showSerialNumber">
<template>
<el-form-item label="流水号位数" class="form-item-half">
<el-input
v-model="element.digits"
controls-position="right"
size="mini"
style="width: 100%;"
placeholder="2"
/>
</el-form-item>
<el-form-item label="流水号步长" class="form-item-half">
<el-input
v-model="element.step"
controls-position="right"
size="mini"
style="width: 100%;"
placeholder="1"
/>
</el-form-item>
</template>
</div>
</template> </template>
</template> </template>
@ -692,9 +727,9 @@ export default {
} }
}, },
methods: { methods: {
setElementDefault(key, defaultValue) {
setElementDefault(key, defaultValue, keepEmptyString = false) {
const value = this.element[key] const value = this.element[key]
if (value === undefined || value === null || value === '') {
if (value === undefined || value === null || (!keepEmptyString && value === '')) {
this.$set(this.element, key, defaultValue) this.$set(this.element, key, defaultValue)
} }
}, },
@ -710,12 +745,15 @@ export default {
this.setElementDefault('dateSourceType', this.inferDateSourceType(this.element.data)) this.setElementDefault('dateSourceType', this.inferDateSourceType(this.element.data))
this.setElementDefault('dateExtractType', 'full') this.setElementDefault('dateExtractType', 'full')
this.setElementDefault('dateFormat', 'ymd') this.setElementDefault('dateFormat', 'ymd')
this.setElementDefault('dateSeparator', '-')
this.setElementDefault('dateSeparator', '-', true)
this.setElementDefault('yearDigits', '4') this.setElementDefault('yearDigits', '4')
this.setElementDefault('monthDayDigits', '2') this.setElementDefault('monthDayDigits', '2')
this.setElementDefault('firstWeekDate', '')
this.setElementDefault('firstWeekDate', 'normal')
this.setElementDefault('firstDayOfWeek', '0') this.setElementDefault('firstDayOfWeek', '0')
this.setElementDefault('dateOffsetDays', 0) this.setElementDefault('dateOffsetDays', 0)
this.setElementDefault('showSerialNumber', false)
this.setElementDefault('digits', 2)
this.setElementDefault('step', 1)
} else if (this.element.dataType === 'number') { } else if (this.element.dataType === 'number') {
this.setElementDefault('roundHalfUp', true) this.setElementDefault('roundHalfUp', true)
} else if (this.element.dataType === 'string') { } else if (this.element.dataType === 'string') {
@ -765,9 +803,12 @@ export default {
this.$set(this.element, 'dateSeparator', '-') this.$set(this.element, 'dateSeparator', '-')
this.$set(this.element, 'yearDigits', '4') this.$set(this.element, 'yearDigits', '4')
this.$set(this.element, 'monthDayDigits', '2') 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, 'firstDayOfWeek', '0')
this.$set(this.element, 'dateOffsetDays', 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') { } else if (newType === 'number') {
this.$set(this.element, 'roundHalfUp', true) this.$set(this.element, 'roundHalfUp', true)
} else if (newType === 'string') { } else if (newType === 'string') {

1
src/views/modules/labelSetting/components/ZPLPreview.vue

@ -490,6 +490,7 @@ export default {
// 3. API // 3. API
const response = await previewLabelWithRealData({ const response = await previewLabelWithRealData({
reportId: reportId, reportId: reportId,
site: this.$store.state.user.site,
...queryParams ...queryParams
}) })

12
src/views/modules/labelSetting/customer_label_setting.vue

@ -5,6 +5,9 @@
<el-form-item :label=labels.customerId> <el-form-item :label=labels.customerId>
<el-input v-model="pageData.customerId" style="width: 120px"></el-input> <el-input v-model="pageData.customerId" style="width: 120px"></el-input>
</el-form-item> </el-form-item>
<el-form-item :label=labels.addressNo>
<el-input v-model="pageData.addressNo" style="width: 120px"></el-input>
</el-form-item>
<el-form-item :label=labels.labelNo> <el-form-item :label=labels.labelNo>
<el-input v-model="pageData.labelNo" style="width: 120px"></el-input> <el-input v-model="pageData.labelNo" style="width: 120px"></el-input>
</el-form-item> </el-form-item>
@ -119,6 +122,7 @@ export default {
site: this.$store.state.user.site, site: this.$store.state.user.site,
username: this.$store.state.user.name, username: this.$store.state.user.name,
customerId: '', customerId: '',
addressNo: '',
labelNo: '', labelNo: '',
labelName: '', labelName: '',
labelType: '', labelType: '',
@ -163,13 +167,13 @@ export default {
}, { }, {
userId: this.$store.state.user.name, userId: this.$store.state.user.name,
functionId: 100008003, functionId: 100008003,
serialNumber: '100008003LabelCustomerDesc',
serialNumber: '100008003LabelAddressNo',
tableId: '100008003Label', tableId: '100008003Label',
tableName: '客户标签自定义列表', tableName: '客户标签自定义列表',
columnProp: 'customerDesc',
columnProp: 'addressNo',
headerAlign: 'center', headerAlign: 'center',
align: 'center', align: 'center',
columnLabel: '客户名称',
columnLabel: '地址编码',
columnHidden: false, columnHidden: false,
columnImage: false, columnImage: false,
columnSortable: true, columnSortable: true,
@ -286,6 +290,7 @@ export default {
}, },
labels: { labels: {
customerId: '客户编码', customerId: '客户编码',
addressNo: '地址编码',
labelNo: '标签编号:', labelNo: '标签编号:',
labelType: '标签类型:', labelType: '标签类型:',
labelName: '报表文件名:', labelName: '报表文件名:',
@ -346,6 +351,7 @@ export default {
subLabelFlag: 'N', subLabelFlag: 'N',
parentLabelNo: '*', parentLabelNo: '*',
customerId: '', customerId: '',
addressNo: '',
remark: '', remark: '',
addFlag: 'Y' addFlag: 'Y'
}; };

Loading…
Cancel
Save