一、 根据供应商与物料分类关联表 查找供应商选择的分类返回前端
List<TenderSupplierBasicCategory> tenderSupplierBasicCategories = tenderSupplierBasicCategoryMapper.selectList(
new LambdaQueryWrapper<TenderSupplierBasicCategory>()
.eq(TenderSupplierBasicCategory::getSupplierBasicId, supplierId)
);
if(tenderSupplierBasicCategories != null && !tenderSupplierBasicCategories.isEmpty()){
// 根据物料分组集合 拼接物料分类名称
List<TenderMaterialCategory> tenderMaterialCategories = tenderMaterialCategoryMapper.selectList(
new LambdaQueryWrapper<TenderMaterialCategory>()
.in(TenderMaterialCategory::getMaterialCategoryId, tenderSupplierBasicCategories.stream()
.map(TenderSupplierBasicCategory::getCategoryId)
.collect(Collectors.toList()))
);
// 获取tenderMaterialCategories中 materialCategoryName 属性拼接
String materialCategoryNames = tenderMaterialCategories.stream()
.map(TenderMaterialCategory::getMaterialCategoryName)
.collect(Collectors.joining(","));
// 设置到vo对象中
vo.setMaterialCategoryNames(materialCategoryNames);
}
二、前端控制需求公司为单选, 同时后端接收到的参数 为数组
- 添加了 handleDeptChange 函数,当用户选择一个部门时,它会将单个值包装成数组存储在 formData.value.deptIds 中
- 在 TreeSelect 组件上添加了 @change="handleDeptChange" 事件处理器
这样修改后:
- 用户界面上只能选择一个部门(因为 TreeSelect 设置了 :multiple="false")
- 但在向后端提交数据时,选择的单个部门 ID 会被包装成数组形式传递
- 如果用户清除选择,则会传递空数组
<Col span="6">
<FormItem
label="需求单位"
v-bind="validateInfos.deptIds"
class="form-item"
>
<TreeSelect
v-model:value="formData.deptIds"
:tree-data="deptTreeData"
:placeholder="$t('ui.formRules.selectRequired')"
:get-popup-container="getPopupContainer"
tree-default-expand-all
:multiple="false"
:field-names="{
children: 'children',
label: 'deptName',
value: 'deptId',
}"
style="width: 100%"
allow-clear
@change="handleDeptChange"
/>
</FormItem>
</Col>
// 添加处理部门选择变化的函数
function handleDeptChange(value: number | undefined) {
// 如果选择了值,将单个值包装为数组传给后端
formData.value.deptIds = value ? [value] : [];
}
三、自定义字典翻译实现