refactor(orders): 优化API请求参数结构并添加材料搜索功能

重构了API请求参数的结构,使其更清晰易读。在订单编辑组件中新增了材料和宝石的搜索功能,提升了用户体验。
This commit is contained in:
user 2025-05-07 22:23:47 +08:00
parent ce88e46cf5
commit 207524063e
2 changed files with 109 additions and 9 deletions

View File

@ -33,11 +33,69 @@ export default defineComponent({
const orderForm = ref<VxeFormInstance>();
const baseRef = ref<VxeTableInstance>();
const settingRef = ref<VxeTableInstance>();
const materials = ref([]);
const materialQuery = ref('');
const stones = ref([]);
const stoneQuery = ref('');
const formRules = {
number: [{ required: true, message: $t('entity.validation.required') }],
name: [{ required: true, message: $t('entity.validation.required') }],
quality: [{ required: true, message: $t('entity.validation.required') }],
};
const searchMaterials = async query => {
if (query && query.length > 0) {
materialQuery.value = query;
try {
const { data } = await axios.get('api/materials', {
params: {
number: { name: '', op: 'like', value: `%${query}%` },
name: { name: '', op: 'like', value: `%${query}%` },
matGroup00: { op: '=', value: 'M' },
status: { op: '=', value: '1' },
},
});
// 更新材料列表数据
materials.value = data;
// 返回处理后的数据用于VxeSelect组件显示
return data.map(item => ({
value: item.number,
label: `${item.number} - ${item.name}`,
}));
} catch (e) {
console.error($t('error.load.data.failed'), e);
return [];
}
}
return [];
};
const searchStones = async query => {
if (query && query.length > 0) {
stoneQuery.value = query;
try {
const { data } = await axios.get('api/materials', {
params: {
number: { name: '', op: 'like', value: `%${query}%` },
name: { name: '', op: 'like', value: `%${query}%` },
matGroup00: { op: '=', value: 'S' },
status: { op: '=', value: '1' },
},
});
// 更新材料列表数据
stones.value = data;
// 返回处理后的数据用于VxeSelect组件显示
return data.map(item => ({
value: item.number,
label: `${item.number} - ${item.name}`,
}));
} catch (e) {
console.error($t('error.load.data.failed'), e);
return [];
}
}
return [];
};
const settingColumns = ref([
{ field: 'id', title: 'jewpmsApp.order.setting.id', visible: false },
{ field: 'number', title: 'jewpmsApp.order.setting.number', visible: false },
@ -49,7 +107,20 @@ export default defineComponent({
title: 'jewpmsApp.order.setting.process',
editRender: { name: 'VxeSelect', options: settingTypes, optionProps: { value: 'number', label: 'name' } },
},
{ field: 'material', title: 'jewpmsApp.order.setting.material', editRender: { name: 'VxeInput', immediate: true, autoselect: true } },
{
field: 'material',
title: 'jewpmsApp.order.setting.material',
editRender: {
name: 'VxeSelect',
options: stones,
optionProps: { value: 'number', label: 'name' },
props: {
filterable: true,
remote: true,
'remote-method': searchStones,
},
},
},
{ field: 'subgroup', title: 'jewpmsApp.order.setting.subgroup', editRender: { name: 'VxeInput', immediate: true, autoselect: true } },
{ field: 'quantity', title: 'jewpmsApp.order.setting.quantity', editRender: { name: 'VxeNumberInput', autoselect: true } },
{ field: 'weight', title: 'jewpmsApp.order.setting.weight', editRender: { name: 'VxeNumberInput', autoselect: true } },
@ -73,7 +144,20 @@ export default defineComponent({
title: 'jewpmsApp.order.base.process',
editRender: { name: 'VxeSelect', options: processTypes, optionProps: { value: 'number', label: 'name' } },
},
{ field: 'material', title: 'jewpmsApp.order.base.material', editRender: { name: 'VxeInput', immediate: true, autoselect: true } },
{
field: 'material',
title: 'jewpmsApp.order.base.material',
editRender: {
name: 'VxeSelect',
options: materials,
optionProps: { value: 'number', label: 'name' },
props: {
filterable: true,
remote: true,
'remote-method': searchMaterials,
},
},
},
{ field: 'subgroup', title: 'jewpmsApp.order.base.subgroup', editRender: { name: 'VxeInput', immediate: true, autoselect: true } },
{ field: 'quantity', title: 'jewpmsApp.order.base.quantity', editRender: { name: 'VxeNumberInput', autoselect: true } },
{ field: 'weight', title: 'jewpmsApp.order.base.weight', editRender: { name: 'VxeNumberInput', autoselect: true } },
@ -127,7 +211,7 @@ export default defineComponent({
loading.value = true;
try {
// 加载字典数据
const [qualityDictsRes, processTypesRes, settingTypesRes, statusDictsRes] = await Promise.all([
const [qualityDictsRes, processTypesRes, settingTypesRes, statusDictsRes, materialsRes, stonesRes] = await Promise.all([
axios.get('api/dicts', {
params: {
number: { name: '' },
@ -163,11 +247,29 @@ export default defineComponent({
status: { op: '=', value: '1' },
},
}),
axios.get('api/materials', {
params: {
number: { name: '' },
name: { name: '' },
matGroup00: { op: '=', value: 'M' },
status: { op: '=', value: '1' },
},
}),
axios.get('api/materials', {
params: {
number: { name: '' },
name: { name: '' },
matGroup00: { op: '=', value: 'S' },
status: { op: '=', value: '1' },
},
}),
]);
qualityDicts.value = qualityDictsRes.data;
processTypes.value = processTypesRes.data;
settingTypes.value = settingTypesRes.data;
statusDicts.value = statusDictsRes.data;
materials.value = materialsRes.data;
stones.value = stonesRes.data;
// 如果是新建订单,设置默认状态
if (!route.params?.id) {

View File

@ -305,12 +305,10 @@ export default defineComponent({
}),
axios.get('api/companies', {
params: {
'number[name]': '',
'name[name]': '',
'type[op]': '=',
'type[value]': 'CS',
'status[op]': '=',
'status[value]': '1',
number: { name: '' },
name: { name: '' },
type: { op: '=', value: 'CS' },
status: { op: '=', value: '1' },
},
}),
]);