vue-vben-admin icon indicating copy to clipboard operation
vue-vben-admin copied to clipboard

关于 From 表单组件的 ApiSelect 和 ApiTreeSelect 动态设置默认值

Open gh852195168 opened this issue 3 years ago • 5 comments

  • 我通过注入 api 获取到了下拉列表 , 但是此时我想动态设置默认值 , 比如下拉列表的第一个为默认值 , 此时如何拿到下拉列表放到 defaultValue . 望解答.谢谢!!
  • 也可以通过手动再次调用 api , 但是感觉有点多余

gh852195168 avatar Jan 24 '22 06:01 gh852195168

看了下, 发现有个 onOptionsChange 事件, 可以通过这个来更新, 文档怎么没标注

gh852195168 avatar Jan 24 '22 08:01 gh852195168

文档在组件使用上有点不全 可以pr增加相应api说明

wangxiaoer5200 avatar Feb 08 '22 02:02 wangxiaoer5200

看了下, 发现有个 onOptionsChange 事件, 可以通过这个来更新, 文档怎么没标注

render方法里面 model[field] = options[0].value,是用这种方式吗?

pg54 avatar Jul 26 '22 09:07 pg54

@gh852195168 @pg54 @wangxiaoer5200 可以使用如下方式设置

FormSchema:

  {
    label: '使用者',
    field: 'usedCode',
    component: 'ApiSelect',
    dynamicDisabled: ({ values }) => !!values.id,
    show: true,
    required: true,
    componentProps: ({ formActionType, formModel }) => {
      return {
        api: queryAllCompany,
        showArrow: true,
        showSearch: true,
        labelField: 'name',
        valueField: 'code',
        getPopupContainer: () => document.body,
        onOptionsChange: (options) => {
         // 注意,要在 “编辑” 时预先赋值 id,否则会受 API 延时影响,进而导致取不到值!详细代码如下:
          if (!formModel.id) {
            // 新增时默认取第一个对象的值
            formActionType.setFieldsValue({ usedCode: options[0].value });
          }
        },
      };
    },
  },

预先赋值 id:

  //表单赋值
  const [registerDrawer, { setDrawerProps, closeDrawer }] = useDrawerInner(async (data) => {
    //重置表单
    await resetFields();
    setDrawerProps({ confirmLoading: false });
    isUpdate.value = !!data?.isUpdate;
    if (unref(isUpdate)) {
     // ⚠️ 预先赋值 id
      setFieldsValue({ id: data.record?.id });
      await queryById(data.record?.id).then(async (resp) => {
        setFieldsValue(resp);
      });
    }
  });

oriming avatar Mar 24 '23 07:03 oriming