refactor(orders): 优化API请求参数结构并添加材料搜索功能
重构了API请求参数的结构,使其更清晰易读。在订单编辑组件中新增了材料和宝石的搜索功能,提升了用户体验。
This commit is contained in:
parent
ce88e46cf5
commit
207524063e
@ -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) {
|
||||
|
||||
@ -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' },
|
||||
},
|
||||
}),
|
||||
]);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user