5 changed files with 517 additions and 34 deletions
-
21src/api/labelSetting/label_type_management.js
-
414src/views/modules/labelSetting/components/LabelTypeManagementDialog.vue
-
30src/views/modules/labelSetting/default_label_setting.vue
-
58src/views/modules/labelSetting/label_setting.vue
-
28src/views/modules/labelSetting/label_setting_printer.vue
@ -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) |
||||
|
|
||||
@ -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> |
||||
|
|
||||
Write
Preview
Loading…
Cancel
Save
Reference in new issue