Browse Source

流水号生成规则修改

master
han\hanst 4 months ago
parent
commit
5b3d0a6c38
  1. 5
      src/utils/zplGenerator.js
  2. 15
      src/views/modules/labelSetting/LabelDesigner.vue
  3. 87
      src/views/modules/labelSetting/components/DataSourceDialog.vue
  4. 17
      src/views/modules/labelSetting/components/DesignElement.vue
  5. 11
      src/views/modules/labelSetting/components/PropertyForm.vue

5
src/utils/zplGenerator.js

@ -510,6 +510,11 @@ export class ZPLGenerator {
* 生成流水号ZPL代码 * 生成流水号ZPL代码
*/ */
generateSerialNumberZPL(element, x, y) { generateSerialNumberZPL(element, x, y) {
// 检查是否显示流水号(默认显示)
if (element.showSerialNumber === false) {
return '' // 不显示时返回空字符串
}
const zpl = [] const zpl = []
// 生成字体命令 // 生成字体命令

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

@ -462,7 +462,7 @@ 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,
lineWidth: 200, digits: 6, step: 1, width: 100, height: 30, previewUrl: '', barcodeType: '', showContent: true, showElement: true, showSerialNumber: true,
showMainSeq: false,parentSerialLabelNo:'', seqName: '', isChecked: false, decimalPlaces: '', showDecimalPlaces: false, thousandsSeparator: false, showMainSeq: false,parentSerialLabelNo:'', seqName: '', isChecked: false, decimalPlaces: '', showDecimalPlaces: false, thousandsSeparator: false,
// //
fontFamily: 'default', textAlign: 'left', letterSpacing: 0, fontItalic: false, fontUnderline: false fontFamily: 'default', textAlign: 'left', letterSpacing: 0, fontItalic: false, fontUnderline: false
@ -474,6 +474,16 @@ export default {
if (!element.barcodeType) element.barcodeType = 'CODE128'; if (!element.barcodeType) element.barcodeType = 'CODE128';
if (element.showContent === undefined) element.showContent = true; if (element.showContent === undefined) element.showContent = true;
} }
// true
if (element.type === 'serialNumber') {
if (element.showSerialNumber === undefined || element.showSerialNumber === null || element.showSerialNumber === '') {
element.showSerialNumber = true;
}
//
if (typeof element.showSerialNumber === 'string') {
element.showSerialNumber = element.showSerialNumber === 'true';
}
}
return element; return element;
}); });
} }
@ -569,7 +579,8 @@ export default {
fontSize: 30, fontSize: 30,
showMainSeq: false, showMainSeq: false,
parentSerialLabelNo:'', parentSerialLabelNo:'',
reportId: this.labelNo
reportId: this.labelNo,
showSerialNumber: true //
} }
} }

87
src/views/modules/labelSetting/components/DataSourceDialog.vue

@ -14,6 +14,22 @@
<el-form label-position="top" class="data-source-form"> <el-form label-position="top" class="data-source-form">
<!-- 可选分组显示 --> <!-- 可选分组显示 -->
<template v-if="hasViewGroups"> <template v-if="hasViewGroups">
<!-- 系统变量组 -->
<div class="view-group">
<div class="view-title">系统变量</div>
<div class="checkbox-grid">
<label
v-for="sysVar in systemVariables"
:key="sysVar.fieldName"
class="checkbox-item system-var">
<el-checkbox :label="sysVar.fieldName" v-model="selectedKeys">
<span class="label-inner">
<span class="field-name" :title="sysVar.description">{{ sysVar.displayName }}</span>
</span>
</el-checkbox>
</label>
</div>
</div>
<div <div
v-for="group in viewGroups" v-for="group in viewGroups"
:key="group.viewSource" :key="group.viewSource"
@ -38,6 +54,7 @@
</template> </template>
<template v-else> <template v-else>
<!-- 数据字段组 -->
<div class="view-group"> <div class="view-group">
<div class="view-title">可用数据字段</div> <div class="view-title">可用数据字段</div>
<div class="checkbox-grid"> <div class="checkbox-grid">
@ -86,7 +103,14 @@ export default {
emits: ['update:visible', 'confirm'], emits: ['update:visible', 'confirm'],
data() { data() {
return { return {
selectedKeys: []
selectedKeys: [],
systemVariables: [
{
fieldName: 'CURRENT_DATE_YYYYMMDD',
displayName: '日期(YYYYMMDD)',
description: '日期,格式:YYYYMMDD,如:20241218'
}
]
} }
}, },
computed: { computed: {
@ -119,15 +143,26 @@ export default {
return name + (key.fieldDescription ? `(${key.fieldDescription})` : '') return name + (key.fieldDescription ? `(${key.fieldDescription})` : '')
}, },
initializeSelection() { initializeSelection() {
if (!this.currentText || !this.dataKeys || !this.dataKeys.length) {
if (!this.currentText) {
this.selectedKeys = [] this.selectedKeys = []
return return
} }
const found = [] const found = []
this.dataKeys.forEach(k => {
const pat = new RegExp(`#\\{${k.fieldName}\\}`, 'g')
if (pat.test(this.currentText)) found.push(k.fieldName)
//
this.systemVariables.forEach(sysVar => {
const pat = new RegExp(`#\\{${sysVar.fieldName}\\}`, 'g')
if (pat.test(this.currentText)) found.push(sysVar.fieldName)
}) })
//
if (this.dataKeys && this.dataKeys.length) {
this.dataKeys.forEach(k => {
const pat = new RegExp(`#\\{${k.fieldName}\\}`, 'g')
if (pat.test(this.currentText)) found.push(k.fieldName)
})
}
this.selectedKeys = found this.selectedKeys = found
}, },
handleClose() { handleClose() {
@ -135,6 +170,13 @@ export default {
}, },
handleConfirm() { handleConfirm() {
const processed = this.selectedKeys.map(s => { const processed = this.selectedKeys.map(s => {
//
const sysVar = this.systemVariables.find(sv => sv.fieldName === s)
if (sysVar) {
return s //
}
//
const f = this.dataKeys.find(k => k.fieldName === s) const f = this.dataKeys.find(k => k.fieldName === s)
return f && f.originalFieldName ? f.originalFieldName : s return f && f.originalFieldName ? f.originalFieldName : s
}) })
@ -289,4 +331,39 @@ export default {
color: #fff; color: #fff;
border: none; border: none;
} }
/* 系统变量特殊样式 */
.checkbox-item.system-var {
background: linear-gradient(135deg, #fff7e6, #fff2d9);
border-color: #ffd591;
}
.checkbox-item.system-var:hover {
background: linear-gradient(135deg, #fff4e6, #ffefcc);
border-color: #ffcc7a;
}
.checkbox-item.system-var .field-name {
color: #d46b08;
font-weight: 800;
}
/* 使用提示样式 */
.usage-tip {
background: #fff7e6;
border: 1px solid #ffd591;
border-radius: 4px;
padding: 8px 12px;
margin-bottom: 12px;
font-size: 13px;
color: #d46b08;
display: flex;
align-items: center;
gap: 6px;
}
.usage-tip i {
font-size: 14px;
color: #faad14;
}
</style> </style>

17
src/views/modules/labelSetting/components/DesignElement.vue

@ -71,9 +71,8 @@
</div> </div>
<!-- 流水号元素 --> <!-- 流水号元素 -->
<div v-else-if="element.type === 'serialNumber'" class="serial-number-element">
<div class="element-label">流水号</div>
<div v-else-if="element.type === 'serialNumber'" class="serial-number-element" :class="{ 'hidden-element': element.showSerialNumber === false }">
<div class="element-label">{{ element.showSerialNumber === false ? '流水号(已隐藏)' : '流水号' }}</div>
</div> </div>
</div> </div>
</template> </template>
@ -399,4 +398,16 @@ export default {
font-size: 9px; font-size: 9px;
} }
} }
/* 隐藏元素样式 */
.hidden-element {
opacity: 0.5;
background: linear-gradient(135deg, #f5f5f5, #e0e0e0) !important;
border: 1px dashed #bbb !important;
}
.hidden-element .element-label {
color: #999 !important;
font-style: italic;
}
</style> </style>

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

@ -532,13 +532,22 @@
</div> </div>
<div class="form-row" v-if="!element.parentSerialLabelNo"> <div class="form-row" v-if="!element.parentSerialLabelNo">
<el-form-item label="流水号规则" class="form-item-half"> <el-form-item label="流水号规则" class="form-item-half">
<el-input v-model="element.data" placeholder="请输入流水号规则" @focus="$emit('data-source', element)"/>
<el-input v-model="element.data" placeholder="请输入流水号规则" />
<el-button type="primary" size="mini" @click="$emit('data-source', element)">
数据源
</el-button>
</el-form-item> </el-form-item>
</div>
<div class="form-row">
<el-form-item label="流水号信息" class="form-item-half"> <el-form-item label="流水号信息" class="form-item-half">
<el-button type="primary" size="mini" @click="serialInfoModal(element)"> <el-button type="primary" size="mini" @click="serialInfoModal(element)">
查看 查看
</el-button> </el-button>
</el-form-item> </el-form-item>
<el-form-item label="是否显示" class="form-item-half">
<el-checkbox v-model="element.showSerialNumber" size="middle">显示流水号</el-checkbox>
</el-form-item>
</div> </div>
</el-form> </el-form>

Loading…
Cancel
Save