vue-vben-admin
vue-vben-admin copied to clipboard
可编辑表格远程下拉列的值无法远程转换(字典翻译)
基于vue-vben-admin20210911版本测试
1)将EditRowTable.vue中「数字输入框」列注释 2)将onEditChange中相关代码注释 3)将「远程下拉」的dataIndex改为 'id',
/#/comp/table/editRowTable的显示效果如下:
远程下拉的值是0~N,对应的ApiSelect的optionsListApi的数据也是数字,其显示应该是「选项N」的形式而不是数字。 点击编辑,ApiSelect显示出来,此时会自动将数字转为文字,保存后文字保持正确不变。
两个建议:
1)如果能直接利用options选项进行文字自动转换,那就不需要我们写代码去转换。
2)我们自己编码转换,我尝试使用editValueMap进行转换,发现editValueMap不支持异步,不能远程处理。 能否将EditableCell.vue中「getValues」computed属性改为「ref+watchEffect」,使editValueMap支持async 类似
const getValues = ref<any>(null);
watchEffect(async () => {
const { editComponentProps, editValueMap } = props.column;
const value = unref(currentValueRef);
if (editValueMap && isFunction(editValueMap)) {
getValues.value = await editValueMap(value);
return;
}
const component = unref(getComponent);
if (!component.includes('Select')) {
getValues.value = value;
return;
}
const options: LabelValueOptions = editComponentProps?.options ?? (unref(optionsRef) || []);
const option = options.find((item) => `${item.value}` === `${value}`);
getValues.value = option?.label ?? value;
return;
});
这样我就能在editValueMap中异步转换数据实现字典翻译
实际上,目前的逻辑并不推荐在BasicTable中使用apiSelect和apiTreeSelect组件,请使用Select和TreeSelect代替。
实际上,目前的逻辑并不推荐在BasicTable中使用apiSelect和apiTreeSelect组件,请使用Select和TreeSelect代替。
能从原理上讲讲原因吗?远程搜索使用apiSelect比较方便。
每一行的ApiSelect都会独立创建,每一个实例都会重新请求一下api,这会造成重复请求。而ApiSelect组件只有在进入编辑模式时才会创建,在未创建之前也不会发起api请求,所以表格中的已有的项目会因为从未进入过编辑状态,就不会自动将value转换成label(此时没有得到映射数据)。
我们小的固定的字典有本地缓存,读取一次后就不再需要远程访问,统一以API形式使用是为了简化编码。
数量较多的、更改较频繁的数据只能远程获取,需要专门编码处理,或保证仅用于少量数据以避免网络访问消耗。
EditableCell中如果editValueMap支持异步,我们也能轻松利用缓存进行转换(我们支持字典动态升级,缓存不能保证都有效,必须依赖API异步获取最新字典)。
可编辑表格本身不常用,仅个别场景使用,vben现成的样例顶好的,基本够我们使用了,就差字典方面问题。
不用ApiSelect,改用Select,有什么改善?便利性?
急取解决这个问题。可以参考一下avuejs的实现。
This issue is stale because it has been open 60 days with no activity. Remove stale label or comment or this will be closed in 7 days