✨ feat(mes): 添加条码内容生成接口及相关逻辑
新增条码内容生成接口,支持根据业务类型和编码生成条码内容。 同时更新相关服务和前端组件,确保条码内容的自动生成和验证逻辑。pull/871/MERGE
parent
b386c17933
commit
715135fbb1
|
|
@ -53,5 +53,13 @@ export const WmBarcodeApi = {
|
||||||
// 导出条码 Excel
|
// 导出条码 Excel
|
||||||
exportBarcode: async (params: any) => {
|
exportBarcode: async (params: any) => {
|
||||||
return await request.download({ url: '/mes/wm/barcode/export-excel', params })
|
return await request.download({ url: '/mes/wm/barcode/export-excel', params })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 生成条码内容
|
||||||
|
generateBarcodeContent: async (bizType: number, bizCode: string) => {
|
||||||
|
return await request.get({
|
||||||
|
url: '/mes/wm/barcode/generate-content',
|
||||||
|
params: { bizType, bizCode }
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -0,0 +1,81 @@
|
||||||
|
<!-- MES 工具选择器:纯下拉,前端过滤(支持 name、code) -->
|
||||||
|
<template>
|
||||||
|
<el-select
|
||||||
|
v-model="selectValue"
|
||||||
|
:placeholder="placeholder"
|
||||||
|
:disabled="disabled"
|
||||||
|
:clearable="clearable"
|
||||||
|
filterable
|
||||||
|
:filter-method="handleFilter"
|
||||||
|
class="!w-1/1"
|
||||||
|
@change="handleChange"
|
||||||
|
>
|
||||||
|
<el-option v-for="item in filteredList" :key="item.id" :label="item.name" :value="item.id">
|
||||||
|
<div class="flex items-center gap-8px">
|
||||||
|
<span>{{ item.name }}</span>
|
||||||
|
<el-tag v-if="item.code" size="small" type="info" class="ml-4px">
|
||||||
|
编号: {{ item.code }}
|
||||||
|
</el-tag>
|
||||||
|
</div>
|
||||||
|
</el-option>
|
||||||
|
</el-select>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
import { TmToolApi, TmToolVO } from '@/api/mes/tm/tool'
|
||||||
|
|
||||||
|
defineOptions({ name: 'TmToolSelect' })
|
||||||
|
|
||||||
|
const props = withDefaults(
|
||||||
|
defineProps<{
|
||||||
|
modelValue?: number
|
||||||
|
disabled?: boolean
|
||||||
|
clearable?: boolean
|
||||||
|
placeholder?: string
|
||||||
|
}>(),
|
||||||
|
{
|
||||||
|
disabled: false,
|
||||||
|
clearable: true,
|
||||||
|
placeholder: '请选择工具'
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
const emit = defineEmits<{
|
||||||
|
'update:modelValue': [value: number | undefined]
|
||||||
|
change: [item: TmToolVO | undefined]
|
||||||
|
}>()
|
||||||
|
|
||||||
|
const allList = ref<TmToolVO[]>([])
|
||||||
|
const filteredList = ref<TmToolVO[]>([])
|
||||||
|
|
||||||
|
const selectValue = computed({
|
||||||
|
get: () => props.modelValue,
|
||||||
|
set: (val) => emit('update:modelValue', val)
|
||||||
|
})
|
||||||
|
|
||||||
|
/** 前端过滤(name + code) */
|
||||||
|
const handleFilter = (query: string) => {
|
||||||
|
if (!query) {
|
||||||
|
filteredList.value = allList.value
|
||||||
|
return
|
||||||
|
}
|
||||||
|
const keyword = query.toLowerCase()
|
||||||
|
filteredList.value = allList.value.filter(
|
||||||
|
(item) =>
|
||||||
|
item.name?.toLowerCase().includes(keyword) ||
|
||||||
|
item.code?.toLowerCase().includes(keyword)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 选中变化 */
|
||||||
|
const handleChange = (val: number | undefined) => {
|
||||||
|
const item = allList.value.find((o) => o.id === val)
|
||||||
|
emit('change', item)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 加载工具列表 */
|
||||||
|
onMounted(async () => {
|
||||||
|
allList.value = await TmToolApi.getToolSimpleList()
|
||||||
|
filteredList.value = allList.value
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
|
@ -55,7 +55,11 @@
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item v-else-if="formData.bizType === BarcodeBizTypeEnum.AREA" label="库位" prop="bizId">
|
<el-form-item
|
||||||
|
v-else-if="formData.bizType === BarcodeBizTypeEnum.AREA"
|
||||||
|
label="库位"
|
||||||
|
prop="bizId"
|
||||||
|
>
|
||||||
<div class="space-y-2">
|
<div class="space-y-2">
|
||||||
<WmWarehouseSelect
|
<WmWarehouseSelect
|
||||||
v-model="areaWarehouseId"
|
v-model="areaWarehouseId"
|
||||||
|
|
@ -153,18 +157,13 @@
|
||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="业务编码" prop="bizCode">
|
<el-form-item label="业务编码" prop="bizCode">
|
||||||
<el-input
|
<el-input v-model="formData.bizCode" placeholder="请输入业务编码" disabled />
|
||||||
v-model="formData.bizCode"
|
|
||||||
placeholder="请输入业务编码"
|
|
||||||
disabled
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="业务名称" prop="bizName">
|
<el-form-item label="业务名称" prop="bizName">
|
||||||
<el-input
|
<el-input v-model="formData.bizName" placeholder="请输入业务名称" disabled />
|
||||||
v-model="formData.bizName"
|
</el-form-item>
|
||||||
placeholder="请输入业务名称"
|
<el-form-item label="条码内容" prop="content">
|
||||||
disabled
|
<el-input v-model="formData.content" placeholder="请输入条码内容或自动生成" />
|
||||||
/>
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="状态" prop="status">
|
<el-form-item label="状态" prop="status">
|
||||||
<el-radio-group v-model="formData.status">
|
<el-radio-group v-model="formData.status">
|
||||||
|
|
@ -189,7 +188,7 @@
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
|
import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
|
||||||
import { CommonStatusEnum } from '@/utils/constants'
|
import { CommonStatusEnum } from '@/utils/constants'
|
||||||
import { WmBarcodeApi, type WmBarcodeVO } from '@/api/mes/wm/barcode'
|
import { WmBarcodeApi, type WmBarcodeVO } from '@/api/mes/wm/barcode'
|
||||||
import { BarcodeBizTypeEnum } from '@/views/mes/utils/constants'
|
import { BarcodeBizTypeEnum } from '@/views/mes/utils/constants'
|
||||||
|
|
@ -222,6 +221,7 @@ const formData = ref<WmBarcodeVO>({
|
||||||
bizId: undefined,
|
bizId: undefined,
|
||||||
bizCode: undefined,
|
bizCode: undefined,
|
||||||
bizName: undefined,
|
bizName: undefined,
|
||||||
|
content: undefined,
|
||||||
status: CommonStatusEnum.ENABLE,
|
status: CommonStatusEnum.ENABLE,
|
||||||
remark: ''
|
remark: ''
|
||||||
})
|
})
|
||||||
|
|
@ -230,7 +230,8 @@ const formRules = reactive({
|
||||||
bizType: [{ required: true, message: '业务类型不能为空', trigger: 'change' }],
|
bizType: [{ required: true, message: '业务类型不能为空', trigger: 'change' }],
|
||||||
bizId: [{ required: true, message: '业务编号不能为空', trigger: 'blur' }],
|
bizId: [{ required: true, message: '业务编号不能为空', trigger: 'blur' }],
|
||||||
bizCode: [{ required: true, message: '业务编码不能为空', trigger: 'blur' }],
|
bizCode: [{ required: true, message: '业务编码不能为空', trigger: 'blur' }],
|
||||||
bizName: [{ required: true, message: '业务名称不能为空', trigger: 'blur' }]
|
bizName: [{ required: true, message: '业务名称不能为空', trigger: 'blur' }],
|
||||||
|
content: [{ required: true, message: '条码内容不能为空', trigger: 'blur' }]
|
||||||
})
|
})
|
||||||
const formRef = ref()
|
const formRef = ref()
|
||||||
|
|
||||||
|
|
@ -239,16 +240,30 @@ const areaWarehouseId = ref<number>() // 库位选择器的临时数据:选择
|
||||||
const areaLocationId = ref<number>() // 库位选择器的临时数据:选择库区后,传给库位选择器
|
const areaLocationId = ref<number>() // 库位选择器的临时数据:选择库区后,传给库位选择器
|
||||||
|
|
||||||
/** 业务 Select 选中回调:自动填充 bizId、bizCode、bizName */
|
/** 业务 Select 选中回调:自动填充 bizId、bizCode、bizName */
|
||||||
const handleBizSelect = (item: any) => {
|
const handleBizSelect = async (item: any) => {
|
||||||
if (!item) {
|
if (!item) {
|
||||||
formData.value.bizId = undefined
|
formData.value.bizId = undefined
|
||||||
formData.value.bizCode = undefined
|
formData.value.bizCode = undefined
|
||||||
formData.value.bizName = undefined
|
formData.value.bizName = undefined
|
||||||
|
formData.value.content = undefined
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
formData.value.bizId = item.id
|
formData.value.bizId = item.id
|
||||||
formData.value.bizCode = item.code || item.username
|
formData.value.bizCode = item.code || item.username
|
||||||
formData.value.bizName = item.name || item.nickname
|
formData.value.bizName = item.name || item.nickname
|
||||||
|
|
||||||
|
// 自动生成条码内容
|
||||||
|
if (formData.value.bizType && formData.value.bizCode) {
|
||||||
|
try {
|
||||||
|
formData.value.content = await WmBarcodeApi.generateBarcodeContent(
|
||||||
|
formData.value.bizType,
|
||||||
|
formData.value.bizCode
|
||||||
|
)
|
||||||
|
} catch (error) {
|
||||||
|
console.error('生成条码内容失败:', error)
|
||||||
|
formData.value.content = undefined
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 库区仓库选择回调:清空库区 */
|
/** 库区仓库选择回调:清空库区 */
|
||||||
|
|
@ -256,6 +271,7 @@ const handleLocationWarehouseChange = () => {
|
||||||
formData.value.bizId = undefined
|
formData.value.bizId = undefined
|
||||||
formData.value.bizCode = undefined
|
formData.value.bizCode = undefined
|
||||||
formData.value.bizName = undefined
|
formData.value.bizName = undefined
|
||||||
|
formData.value.content = undefined
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 库位仓库选择回调:清空库区和库位 */
|
/** 库位仓库选择回调:清空库区和库位 */
|
||||||
|
|
@ -264,6 +280,7 @@ const handleAreaWarehouseChange = () => {
|
||||||
formData.value.bizId = undefined
|
formData.value.bizId = undefined
|
||||||
formData.value.bizCode = undefined
|
formData.value.bizCode = undefined
|
||||||
formData.value.bizName = undefined
|
formData.value.bizName = undefined
|
||||||
|
formData.value.content = undefined
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 库位库区选择回调:清空库位 */
|
/** 库位库区选择回调:清空库位 */
|
||||||
|
|
@ -271,6 +288,7 @@ const handleAreaLocationChange = () => {
|
||||||
formData.value.bizId = undefined
|
formData.value.bizId = undefined
|
||||||
formData.value.bizCode = undefined
|
formData.value.bizCode = undefined
|
||||||
formData.value.bizName = undefined
|
formData.value.bizName = undefined
|
||||||
|
formData.value.content = undefined
|
||||||
}
|
}
|
||||||
|
|
||||||
/** bizType 切换时,清空业务字段 */
|
/** bizType 切换时,清空业务字段 */
|
||||||
|
|
@ -280,6 +298,7 @@ watch(
|
||||||
formData.value.bizId = undefined
|
formData.value.bizId = undefined
|
||||||
formData.value.bizCode = undefined
|
formData.value.bizCode = undefined
|
||||||
formData.value.bizName = undefined
|
formData.value.bizName = undefined
|
||||||
|
formData.value.content = undefined
|
||||||
// 清空仓库层级的临时数据
|
// 清空仓库层级的临时数据
|
||||||
locationWarehouseId.value = undefined
|
locationWarehouseId.value = undefined
|
||||||
areaWarehouseId.value = undefined
|
areaWarehouseId.value = undefined
|
||||||
|
|
@ -334,6 +353,7 @@ const resetForm = () => {
|
||||||
bizId: undefined,
|
bizId: undefined,
|
||||||
bizCode: undefined,
|
bizCode: undefined,
|
||||||
bizName: undefined,
|
bizName: undefined,
|
||||||
|
content: undefined,
|
||||||
status: CommonStatusEnum.ENABLE,
|
status: CommonStatusEnum.ENABLE,
|
||||||
remark: ''
|
remark: ''
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue