Browse Source

RFID标签打印的通用方法

master
han\hanst 3 months ago
parent
commit
e788246412
  1. 21
      src/api/labelSetting/label_type_management.js
  2. 414
      src/views/modules/labelSetting/components/LabelTypeManagementDialog.vue
  3. 30
      src/views/modules/labelSetting/default_label_setting.vue
  4. 58
      src/views/modules/labelSetting/label_setting.vue
  5. 28
      src/views/modules/labelSetting/label_setting_printer.vue

21
src/api/labelSetting/label_type_management.js

@ -0,0 +1,21 @@
import { createAPI } from "@/utils/httpRequest.js";
/**
* 标签类型管理API接口
*/
// 分页查询标签类型列表
export const getLabelTypeManagementList = data => createAPI('/label/labelType/getList', 'POST', data)
// 获取所有标签类型(用于下拉选择)
export const getAllLabelTypes = data => createAPI('/label/labelType/getAllList', 'POST', data)
// 保存标签类型
export const saveLabelType = data => createAPI('/label/labelType/save', 'POST', data)
// 更新标签类型
export const updateLabelType = data => createAPI('/label/labelType/update', 'POST', data)
// 删除标签类型
export const deleteLabelType = data => createAPI('/label/labelType/delete', 'POST', data)

414
src/views/modules/labelSetting/components/LabelTypeManagementDialog.vue

@ -0,0 +1,414 @@
<template>
<el-dialog
title="标签类型管理"
:visible.sync="dialogVisible"
width="1000px"
:before-close="handleClose"
:close-on-click-modal="false"
:append-to-body="true"
>
<div class="label-type-management">
<!-- 查询表单 -->
<el-form :inline="true" label-width="100px" style="margin-bottom: 10px;">
<el-form-item label="标签类型">
<el-input
v-model="queryParams.name"
placeholder="请输入标签类型"
style="width: 200px;"
clearable
/>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="loadLabelTypes">查询</el-button>
<el-button type="primary" @click="openAddDialog">新增</el-button>
</el-form-item>
</el-form>
<!-- 标签类型列表表格 -->
<el-table
:data="labelTypeList"
border :height="200"
v-loading="loading"
style="width: 100%;"
max-height="450"
>
<el-table-column
prop="name"
label="标签类型"
width="150"
align="left"
/>
<el-table-column
prop="viewSql"
label="WMS视图"
width="200"
align="left"
/>
<el-table-column
prop="ifsViewSql"
label="IFS视图"
width="200"
align="left"
/>
<el-table-column
prop="createdBy"
label="创建人"
width="100"
align="center"
/>
<el-table-column
prop="createdTime"
label="创建时间"
width="150"
align="center"
>
<template slot-scope="scope">
{{ formatDate(scope.row.createdTime) }}
</template>
</el-table-column>
<el-table-column
label="操作"
width="150"
align="center"
fixed="right"
>
<template slot-scope="scope">
<a
type="text"
size="small"
@click="openEditDialog(scope.row)"
>编辑</a>
<a
type="text"
size="small"
@click="handleDelete(scope.row)"
>删除</a>
</template>
</el-table-column>
</el-table>
<!-- 分页 -->
<el-pagination
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="pageIndex"
:page-sizes="[10, 20, 50, 100]"
:page-size="pageSize"
:total="totalPage"
layout="total, sizes, prev, pager, next, jumper"
style="margin-top: 20px; text-align: right;"
/>
</div>
<!-- 新增/编辑对话框 -->
<el-dialog
:title="editMode ? '编辑标签类型' : '新增标签类型'"
:visible.sync="editDialogVisible"
width="200px"
:append-to-body="true"
:close-on-click-modal="false"
>
<el-form :inline="true" label-position="top"
:model="formData" :rules="formRules" ref="formRef">
<el-form-item label="标签类型" prop="name">
<el-input style="width: 180px;"
v-model="formData.name"
placeholder="请输入标签类型名称"
:disabled="editMode"/>
</el-form-item>
<el-form-item label="WMS视图" prop="viewSql">
<el-input style="width: 180px;"
v-model="formData.viewSql"
placeholder="请输入WMS视图名称"/>
</el-form-item>
<el-form-item label="IFS视图" prop="ifsViewSql">
<el-input style="width: 180px;"
v-model="formData.ifsViewSql"
placeholder="请输入IFS视图名称"/>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="editDialogVisible = false">取消</el-button>
<el-button type="primary" @click="handleSave" :loading="saving">
保存
</el-button>
</div>
</el-dialog>
<div slot="footer" class="dialog-footer">
<el-button @click="handleClose">关闭</el-button>
</div>
</el-dialog>
</template>
<script>
import {
getLabelTypeManagementList,
saveLabelType,
updateLabelType,
deleteLabelType
} from '@/api/labelSetting/label_type_management.js';
export default {
name: 'LabelTypeManagementDialog',
props: {
visible: {
type: Boolean,
default: false
}
},
data() {
return {
dialogVisible: false,
editDialogVisible: false,
editMode: false,
loading: false,
saving: false,
//
queryParams: {
site: this.$store.state.user.site,
name: '',
page: 1,
limit: 20
},
//
labelTypeList: [],
//
pageIndex: 1,
pageSize: 20,
totalPage: 0,
//
formData: {
name: '',
site: this.$store.state.user.site,
viewSql: '',
ifsViewSql: ''
},
//
formRules: {
name: [
{ required: true, message: '请输入标签类型名称', trigger: 'blur' },
{ min: 1, max: 100, message: '长度在 1 到 100 个字符', trigger: 'blur' }
],
viewSql: [
{ max: 200, message: '长度不能超过 200 个字符', trigger: 'blur' }
],
ifsViewSql: [
{ max: 200, message: '长度不能超过 200 个字符', trigger: 'blur' }
]
}
};
},
watch: {
visible(val) {
this.dialogVisible = val;
if (val) {
this.initDialog();
}
},
dialogVisible(val) {
this.$emit('update:visible', val);
}
},
methods: {
/**
* 初始化对话框
*/
initDialog() {
this.queryParams.name = '';
this.pageIndex = 1;
this.pageSize = 20;
this.loadLabelTypes();
},
/**
* 加载标签类型列表
*/
async loadLabelTypes() {
this.loading = true;
try {
this.queryParams.page = this.pageIndex;
this.queryParams.limit = this.pageSize;
const response = await getLabelTypeManagementList(this.queryParams);
if (response.data && response.data.code === 200) {
this.labelTypeList = response.data.page.list || [];
this.totalPage = response.data.page.totalCount || 0;
} else {
this.$message.error(response.data.msg || '查询标签类型失败');
}
} catch (error) {
console.error('查询标签类型失败:', error);
this.$message.error('查询标签类型失败');
} finally {
this.loading = false;
}
},
/**
* 打开新增对话框
*/
openAddDialog() {
this.editMode = false;
this.formData = {
name: '',
site: this.$store.state.user.site,
viewSql: '',
ifsViewSql: ''
};
this.editDialogVisible = true;
//
this.$nextTick(() => {
if (this.$refs.formRef) {
this.$refs.formRef.clearValidate();
}
});
},
/**
* 打开编辑对话框
*/
openEditDialog(row) {
this.editMode = true;
this.formData = { ...row };
this.editDialogVisible = true;
//
this.$nextTick(() => {
if (this.$refs.formRef) {
this.$refs.formRef.clearValidate();
}
});
},
/**
* 保存标签类型
*/
handleSave() {
this.$refs.formRef.validate(async (valid) => {
if (!valid) {
return false;
}
this.saving = true;
try {
let response;
if (this.editMode) {
//
response = await updateLabelType(this.formData);
} else {
//
response = await saveLabelType(this.formData);
}
if (response.data && response.data.code === 200) {
this.$message.success(this.editMode ? '更新成功' : '保存成功');
this.editDialogVisible = false;
this.loadLabelTypes();
this.$emit('label-type-updated');
} else {
this.$message.error(response.data.msg || '保存失败');
}
} catch (error) {
console.error('保存标签类型失败:', error);
this.$message.error('保存标签类型失败');
} finally {
this.saving = false;
}
});
},
/**
* 删除标签类型
*/
handleDelete(row) {
this.$confirm('确定要删除该标签类型吗?', '删除确认', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(async () => {
try {
const response = await deleteLabelType({
name: row.name,
site: row.site
});
if (response.data && response.data.code === 200) {
this.$message.success('删除成功');
this.loadLabelTypes();
this.$emit('label-type-updated');
} else {
this.$message.error(response.data.msg || '删除失败');
}
} catch (error) {
console.error('删除标签类型失败:', error);
this.$message.error('删除标签类型失败');
}
}).catch(() => {
//
});
},
/**
* 分页大小改变
*/
handleSizeChange(val) {
this.pageSize = val;
this.pageIndex = 1;
this.loadLabelTypes();
},
/**
* 当前页改变
*/
handleCurrentChange(val) {
this.pageIndex = val;
this.loadLabelTypes();
},
/**
* 格式化日期
*/
formatDate(date) {
if (!date) return '';
const d = new Date(date);
const year = d.getFullYear();
const month = String(d.getMonth() + 1).padStart(2, '0');
const day = String(d.getDate()).padStart(2, '0');
const hours = String(d.getHours()).padStart(2, '0');
const minutes = String(d.getMinutes()).padStart(2, '0');
const seconds = String(d.getSeconds()).padStart(2, '0');
return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
},
/**
* 关闭对话框
*/
handleClose() {
this.dialogVisible = false;
}
}
};
</script>
<style scoped>
.label-type-management {
padding: 10px 0;
}
.dialog-footer {
text-align: center;
}
.el-table {
margin-top: 10px;
}
</style>

30
src/views/modules/labelSetting/default_label_setting.vue

@ -134,7 +134,7 @@ export default {
headerAlign: 'center', headerAlign: 'center',
align: 'center', align: 'center',
columnLabel: '标签类型', columnLabel: '标签类型',
columnWidth: 80,
columnWidth: 120,
columnHidden: false, columnHidden: false,
columnImage: false, columnImage: false,
columnSortable: true, columnSortable: true,
@ -192,17 +192,17 @@ export default {
sortLv: 0, sortLv: 0,
status: true, status: true,
fixed: ''*/ fixed: ''*/
}, {
},{
userId: this.$store.state.user.name, userId: this.$store.state.user.name,
functionId: 100008002, functionId: 100008002,
serialNumber: '100008002LabelRemark',
serialNumber: '100008002LabelSubLabelFlag',
tableId: '100008002Label', tableId: '100008002Label',
tableName: '默认标签列表', tableName: '默认标签列表',
columnProp: 'remark',
columnProp: 'subLabelFlag',
headerAlign: 'center', headerAlign: 'center',
align: 'left', align: 'left',
columnLabel: '备注',
columnWidth: 200,
columnLabel: '子报表',
columnWidth: 120,
columnHidden: false, columnHidden: false,
columnImage: false, columnImage: false,
columnSortable: false, columnSortable: false,
@ -212,14 +212,14 @@ export default {
}, { }, {
userId: this.$store.state.user.name, userId: this.$store.state.user.name,
functionId: 100008002, functionId: 100008002,
serialNumber: '100008002LabelSubLabelFlag',
serialNumber: '100008002LabelParentLabelNo',
tableId: '100008002Label', tableId: '100008002Label',
tableName: '默认标签列表', tableName: '默认标签列表',
columnProp: 'subLabelFlag',
columnProp: 'parentLabelNo',
headerAlign: 'center', headerAlign: 'center',
align: 'left', align: 'left',
columnLabel: '子报表',
columnWidth: 60,
columnLabel: '上级标签编号',
columnWidth: 150,
columnHidden: false, columnHidden: false,
columnImage: false, columnImage: false,
columnSortable: false, columnSortable: false,
@ -229,14 +229,14 @@ export default {
}, { }, {
userId: this.$store.state.user.name, userId: this.$store.state.user.name,
functionId: 100008002, functionId: 100008002,
serialNumber: '100008002LabelParentLabelNo',
serialNumber: '100008002LabelRemark',
tableId: '100008002Label', tableId: '100008002Label',
tableName: '默认标签列表', tableName: '默认标签列表',
columnProp: 'parentLabelNo',
columnProp: 'remark',
headerAlign: 'center', headerAlign: 'center',
align: 'left', align: 'left',
columnLabel: '上级标签编号',
columnWidth: 120,
columnLabel: '备注',
columnWidth: 300,
columnHidden: false, columnHidden: false,
columnImage: false, columnImage: false,
columnSortable: false, columnSortable: false,
@ -244,7 +244,7 @@ export default {
status: true, status: true,
fixed: '' fixed: ''
}, },
],
],
queryTable: { queryTable: {
userId: this.$store.state.user.name, userId: this.$store.state.user.name,
functionId: this.$route.meta.menuId, functionId: this.$route.meta.menuId,

58
src/views/modules/labelSetting/label_setting.vue

@ -27,13 +27,18 @@
</el-button> </el-button>
</el-form-item> </el-form-item>
<el-form-item style="margin-top: 16px;"> <el-form-item style="margin-top: 16px;">
<el-button type="success" @click="openDataSourceManagement()" class="customer-bun-mid2"
style="margin-left: 10px; margin-bottom: 5px;">{{ buttons.dataSourceManagementButton }}
<el-button type="success" @click="openDataSourceManagement()"
style="margin-left: 10px; margin-bottom: 5px; width: 90px; padding: 5px 5px;">{{ buttons.dataSourceManagementButton }}
</el-button>
</el-form-item>
<el-form-item style="margin-top: 16px;">
<el-button type="success" @click="openLabelTypeManagement()"
style="margin-left: 10px; margin-bottom: 5px; width: 95px; padding: 5px 5px;">{{ buttons.labelTypeManagementButton }}
</el-button> </el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
<!-- 标签列表数据 --> <!-- 标签列表数据 -->
<el-main style="margin-left: -20px; margin-top: -20px; width: 104%;">
<el-table @row-click="setCurrentRow" <el-table @row-click="setCurrentRow"
:height="height" :height="height"
highlight-current-row highlight-current-row
@ -73,7 +78,7 @@
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
</el-main>
<!-- 新增或者修改的modal --> <!-- 新增或者修改的modal -->
@ -95,6 +100,12 @@
@data-source-updated="handleDataSourceUpdated" @data-source-updated="handleDataSourceUpdated"
/> />
<!-- 标签类型管理对话框 -->
<LabelTypeManagementDialog
:visible.sync="labelTypeManagementVisible"
@label-type-updated="handleLabelTypeUpdated"
/>
</div> </div>
</template> </template>
@ -112,6 +123,7 @@ import comShowLabelParameter from "./com_show_label_parameter";/*打印参数维
import comShowLabelContent from "./com_show_label_content";/*打印内容定义数维护的組件*/ import comShowLabelContent from "./com_show_label_content";/*打印内容定义数维护的組件*/
import PaperManagementDialog from "./components/PaperManagementDialog.vue";/*纸张管理对话框*/ import PaperManagementDialog from "./components/PaperManagementDialog.vue";/*纸张管理对话框*/
import DataSourceManagementDialog from "./components/DataSourceManagementDialog.vue";/*数据源管理对话框*/ import DataSourceManagementDialog from "./components/DataSourceManagementDialog.vue";/*数据源管理对话框*/
import LabelTypeManagementDialog from "./components/LabelTypeManagementDialog.vue";/*标签类型管理对话框*/
/* 动态表头 */ /* 动态表头 */
import { import {
saveTableDefaultList, saveTableDefaultList,
@ -186,6 +198,24 @@ export default {
headerAlign: 'center', headerAlign: 'center',
align: 'center', align: 'center',
columnLabel: '标签类型', columnLabel: '标签类型',
columnWidth: 120,
columnHidden: false,
columnImage: false,
columnSortable: true,
sortLv: 0,
status: true,
fixed: ''
},
{
userId: this.$store.state.user.name,
functionId: '100008001',
serialNumber: '100008001LabelLabelType',
tableId: '100008001Label',
tableName: '标签自定义列表',
columnProp: 'rfidFlag',
headerAlign: 'center',
align: 'center',
columnLabel: 'RFID标签',
columnWidth: 100, columnWidth: 100,
columnHidden: false, columnHidden: false,
columnImage: false, columnImage: false,
@ -204,7 +234,7 @@ export default {
headerAlign: 'center', headerAlign: 'center',
align: 'center', align: 'center',
columnLabel: '打印方向', columnLabel: '打印方向',
columnWidth: 100,
columnWidth: 120,
columnHidden: false, columnHidden: false,
columnImage: false, columnImage: false,
columnSortable: true, columnSortable: true,
@ -240,7 +270,7 @@ export default {
headerAlign: 'center', headerAlign: 'center',
align: 'left', align: 'left',
columnLabel: '备注', columnLabel: '备注',
columnWidth: 300,
columnWidth: 400,
columnHidden: false, columnHidden: false,
columnImage: false, columnImage: false,
columnSortable: false, columnSortable: false,
@ -270,6 +300,7 @@ export default {
addButton: '新增', addButton: '新增',
paperManagementButton: '纸张管理', paperManagementButton: '纸张管理',
dataSourceManagementButton: '数据源管理', dataSourceManagementButton: '数据源管理',
labelTypeManagementButton: '标签类型管理',
}, },
queryButton: { queryButton: {
functionId: functionId, functionId: functionId,
@ -303,6 +334,8 @@ export default {
paperManagementVisible: false, paperManagementVisible: false,
// //
dataSourceManagementVisible: false, dataSourceManagementVisible: false,
//
labelTypeManagementVisible: false,
} }
}, },
@ -313,6 +346,7 @@ export default {
comShowLabelContent,/*标签打印内容定义*/ comShowLabelContent,/*标签打印内容定义*/
PaperManagementDialog,/*纸张管理对话框*/ PaperManagementDialog,/*纸张管理对话框*/
DataSourceManagementDialog,/*数据源管理对话框*/ DataSourceManagementDialog,/*数据源管理对话框*/
LabelTypeManagementDialog,/*标签类型管理对话框*/
}, },
mounted() { mounted() {
@ -497,6 +531,18 @@ export default {
// //
}, },
/*打开标签类型管理对话框*/
openLabelTypeManagement() {
this.labelTypeManagementVisible = true;
},
/*处理标签类型更新事件*/
handleLabelTypeUpdated(event) {
console.log('标签类型数据已更新:', event);
//
//
},
/*一键复制标签确认*/ /*一键复制标签确认*/
copyLabelConfirm(row) { copyLabelConfirm(row) {
this.$confirm(this.labels.sureCopyThisRecord, this.labels.tipsLabel, { this.$confirm(this.labels.sureCopyThisRecord, this.labels.tipsLabel, {

28
src/views/modules/labelSetting/label_setting_printer.vue

@ -135,7 +135,7 @@ export default {
headerAlign: 'center', headerAlign: 'center',
align: 'center', align: 'center',
columnLabel: '用户ID', columnLabel: '用户ID',
columnWidth: 100,
columnWidth: 120,
columnHidden: false, columnHidden: false,
columnImage: false, columnImage: false,
columnSortable: true, columnSortable: true,
@ -152,7 +152,7 @@ export default {
headerAlign: 'center', headerAlign: 'center',
align: 'center', align: 'center',
columnLabel: '用户名', columnLabel: '用户名',
columnWidth: 95,
columnWidth: 150,
columnHidden: false, columnHidden: false,
columnImage: false, columnImage: false,
columnSortable: true, columnSortable: true,
@ -169,41 +169,43 @@ export default {
headerAlign: 'center', headerAlign: 'center',
align: 'center', align: 'center',
columnLabel: '标签编号', columnLabel: '标签编号',
columnWidth: 95,
columnWidth: 150,
columnHidden: false, columnHidden: false,
columnImage: false, columnImage: false,
columnSortable: true, columnSortable: true,
sortLv: 0, sortLv: 0,
status: true, status: true,
fixed: '' fixed: ''
}, {
},
{
userId: this.$store.state.user.name, userId: this.$store.state.user.name,
functionId: 100008004, functionId: 100008004,
serialNumber: '100008004LabelPrinterName',
serialNumber: '100008004LabelIpAddress',
tableId: '100008004Label', tableId: '100008004Label',
tableName: '标签打印机列表', tableName: '标签打印机列表',
columnProp: 'printerName',
columnProp: 'ipAddress',
headerAlign: 'center', headerAlign: 'center',
align: 'left', align: 'left',
columnLabel: '打印机',
columnWidth: 235,
columnLabel: 'IP地址',
columnWidth: 180,
columnHidden: false, columnHidden: false,
columnImage: false, columnImage: false,
columnSortable: false, columnSortable: false,
sortLv: 0, sortLv: 0,
status: true, status: true,
fixed: '' fixed: ''
}, {
},
{
userId: this.$store.state.user.name, userId: this.$store.state.user.name,
functionId: 100008004, functionId: 100008004,
serialNumber: '100008004LabelIpAddress',
serialNumber: '100008004LabelPrinterName',
tableId: '100008004Label', tableId: '100008004Label',
tableName: '标签打印机列表', tableName: '标签打印机列表',
columnProp: 'ipAddress',
columnProp: 'printerName',
headerAlign: 'center', headerAlign: 'center',
align: 'left', align: 'left',
columnLabel: 'IP地址',
columnWidth: 140,
columnLabel: '打印机',
columnWidth: 300,
columnHidden: false, columnHidden: false,
columnImage: false, columnImage: false,
columnSortable: false, columnSortable: false,

Loading…
Cancel
Save