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 orderForm = ref<VxeFormInstance>();
|
||||||
const baseRef = ref<VxeTableInstance>();
|
const baseRef = ref<VxeTableInstance>();
|
||||||
const settingRef = ref<VxeTableInstance>();
|
const settingRef = ref<VxeTableInstance>();
|
||||||
|
const materials = ref([]);
|
||||||
|
const materialQuery = ref('');
|
||||||
|
const stones = ref([]);
|
||||||
|
const stoneQuery = ref('');
|
||||||
const formRules = {
|
const formRules = {
|
||||||
number: [{ required: true, message: $t('entity.validation.required') }],
|
number: [{ required: true, message: $t('entity.validation.required') }],
|
||||||
name: [{ required: true, message: $t('entity.validation.required') }],
|
name: [{ required: true, message: $t('entity.validation.required') }],
|
||||||
quality: [{ 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([
|
const settingColumns = ref([
|
||||||
{ field: 'id', title: 'jewpmsApp.order.setting.id', visible: false },
|
{ field: 'id', title: 'jewpmsApp.order.setting.id', visible: false },
|
||||||
{ field: 'number', title: 'jewpmsApp.order.setting.number', visible: false },
|
{ field: 'number', title: 'jewpmsApp.order.setting.number', visible: false },
|
||||||
@ -49,7 +107,20 @@ export default defineComponent({
|
|||||||
title: 'jewpmsApp.order.setting.process',
|
title: 'jewpmsApp.order.setting.process',
|
||||||
editRender: { name: 'VxeSelect', options: settingTypes, optionProps: { value: 'number', label: 'name' } },
|
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: '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: 'quantity', title: 'jewpmsApp.order.setting.quantity', editRender: { name: 'VxeNumberInput', autoselect: true } },
|
||||||
{ field: 'weight', title: 'jewpmsApp.order.setting.weight', 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',
|
title: 'jewpmsApp.order.base.process',
|
||||||
editRender: { name: 'VxeSelect', options: processTypes, optionProps: { value: 'number', label: 'name' } },
|
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: '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: 'quantity', title: 'jewpmsApp.order.base.quantity', editRender: { name: 'VxeNumberInput', autoselect: true } },
|
||||||
{ field: 'weight', title: 'jewpmsApp.order.base.weight', 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;
|
loading.value = true;
|
||||||
try {
|
try {
|
||||||
// 加载字典数据
|
// 加载字典数据
|
||||||
const [qualityDictsRes, processTypesRes, settingTypesRes, statusDictsRes] = await Promise.all([
|
const [qualityDictsRes, processTypesRes, settingTypesRes, statusDictsRes, materialsRes, stonesRes] = await Promise.all([
|
||||||
axios.get('api/dicts', {
|
axios.get('api/dicts', {
|
||||||
params: {
|
params: {
|
||||||
number: { name: '' },
|
number: { name: '' },
|
||||||
@ -163,11 +247,29 @@ export default defineComponent({
|
|||||||
status: { op: '=', value: '1' },
|
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;
|
qualityDicts.value = qualityDictsRes.data;
|
||||||
processTypes.value = processTypesRes.data;
|
processTypes.value = processTypesRes.data;
|
||||||
settingTypes.value = settingTypesRes.data;
|
settingTypes.value = settingTypesRes.data;
|
||||||
statusDicts.value = statusDictsRes.data;
|
statusDicts.value = statusDictsRes.data;
|
||||||
|
materials.value = materialsRes.data;
|
||||||
|
stones.value = stonesRes.data;
|
||||||
|
|
||||||
// 如果是新建订单,设置默认状态
|
// 如果是新建订单,设置默认状态
|
||||||
if (!route.params?.id) {
|
if (!route.params?.id) {
|
||||||
|
|||||||
@ -305,12 +305,10 @@ export default defineComponent({
|
|||||||
}),
|
}),
|
||||||
axios.get('api/companies', {
|
axios.get('api/companies', {
|
||||||
params: {
|
params: {
|
||||||
'number[name]': '',
|
number: { name: '' },
|
||||||
'name[name]': '',
|
name: { name: '' },
|
||||||
'type[op]': '=',
|
type: { op: '=', value: 'CS' },
|
||||||
'type[value]': 'CS',
|
status: { op: '=', value: '1' },
|
||||||
'status[op]': '=',
|
|
||||||
'status[value]': '1',
|
|
||||||
},
|
},
|
||||||
}),
|
}),
|
||||||
]);
|
]);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user