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代码
*/
generateSerialNumberZPL(element, x, y) {
// 检查是否显示流水号(默认显示)
if (element.showSerialNumber === false) {
return '' // 不显示时返回空字符串
}
const zpl = []
// 生成字体命令

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

@ -462,7 +462,7 @@ 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,
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,
//
fontFamily: 'default', textAlign: 'left', letterSpacing: 0, fontItalic: false, fontUnderline: false
@ -474,6 +474,16 @@ export default {
if (!element.barcodeType) element.barcodeType = 'CODE128';
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;
});
}
@ -569,7 +579,8 @@ export default {
fontSize: 30,
showMainSeq: false,
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">
<!-- 可选分组显示 -->
<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
v-for="group in viewGroups"
:key="group.viewSource"
@ -38,6 +54,7 @@
</template>
<template v-else>
<!-- 数据字段组 -->
<div class="view-group">
<div class="view-title">可用数据字段</div>
<div class="checkbox-grid">
@ -86,7 +103,14 @@ export default {
emits: ['update:visible', 'confirm'],
data() {
return {
selectedKeys: []
selectedKeys: [],
systemVariables: [
{
fieldName: 'CURRENT_DATE_YYYYMMDD',
displayName: '日期(YYYYMMDD)',
description: '日期,格式:YYYYMMDD,如:20241218'
}
]
}
},
computed: {
@ -119,15 +143,26 @@ export default {
return name + (key.fieldDescription ? `(${key.fieldDescription})` : '')
},
initializeSelection() {
if (!this.currentText || !this.dataKeys || !this.dataKeys.length) {
if (!this.currentText) {
this.selectedKeys = []
return
}
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
},
handleClose() {
@ -135,6 +170,13 @@ export default {
},
handleConfirm() {
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)
return f && f.originalFieldName ? f.originalFieldName : s
})
@ -289,4 +331,39 @@ export default {
color: #fff;
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>

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

@ -71,9 +71,8 @@
</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>
</template>
@ -399,4 +398,16 @@ export default {
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>

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

@ -532,13 +532,22 @@
</div>
<div class="form-row" v-if="!element.parentSerialLabelNo">
<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>
</div>
<div class="form-row">
<el-form-item label="流水号信息" class="form-item-half">
<el-button type="primary" size="mini" @click="serialInfoModal(element)">
查看
</el-button>
</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>
</el-form>

Loading…
Cancel
Save