Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

ApiSelect.vue文件版本更新之后联动更新字段不生效了 #6999

Closed
RacingK93 opened this issue Jul 31, 2024 · 6 comments
Closed

ApiSelect.vue文件版本更新之后联动更新字段不生效了 #6999

RacingK93 opened this issue Jul 31, 2024 · 6 comments

Comments

@RacingK93
Copy link

版本号:3.7.0
问题描述:

自从按照官方的更新把ApiSelect.vue文件中的
watchEffect(() => {
props.immediate && fetch();
});
改成props.immediate && fetch();
之后,页面联动选择数据查询就失效了。
比如选择设备品牌查询设备型号就无法调接口;
我是采用onchange然后写updateSchema
await updateSchema({
field: 'brandId',
component: 'ApiSelect',
componentProps: {
api: getDeviceBrandApi,
params: {
type: typeChoose,
},

这种形式去联动查询的;我把改回去就好了;

错误截图:

友情提示:

  • 未按格式要求发帖、描述过于简单的,会被直接删掉;
  • 描述问题请图文并茂,方便我们理解并快速定位问题;
  • 如果使用的不是master,请说明你使用的分支;
@yang-xianzhu
Copy link

我记得当时把watchEffect去掉是因为初始化的时候会请求两次接口。

@zhangdaiscott
Copy link
Member

zy

@liaozhiyang
Copy link
Contributor

有更详细的代码吗?

@liaozhiyang
Copy link
Contributor

你使用的场景是否如下:

iShot_2024-08-15_21 09 00

测试代码:


<!-- 基本用法 -->
<template>
  <!-- 自定表单 -->
  <BasicForm @register="registerForm" @submit="handleSubmit" style="margin-top: 50px; margin-left: 50px" />
</template>

<script lang="ts" setup>
  //引入依赖
  import { useForm, BasicForm, FormSchema } from '/@/components/Form';
  import { getAllRolesListNoByTenant, getAllTenantList } from '/@/views/system/user/user.api';

  //自定义表单字段
  const formSchemas: FormSchema[] = [
    {
      field: 'api01',
      component: 'ApiSelect',
      label: '设备品牌',
      colProps: { span: 12 },
      componentProps: {
        api: getAllRolesListNoByTenant,
        labelField: 'roleName',
        valueField: 'id',

        onChange: () => {
          updateSchema({
            field: 'api02',
            component: 'ApiSelect',
            componentProps: {
              api: getAllRolesListNoByTenant,
            },
          });
        },
      },
    },

    {
      field: 'api02',
      component: 'ApiSelect',
      label: '设备型号',
      colProps: { span: 12 },
      componentProps: {
        labelField: 'roleName',
        valueField: 'id',
      },
    },
  ];

  /**
   * BasicForm绑定注册;
   * useForm 是整个框架的核心用于表单渲染,里边封装了很多公共方法;
   * 支持(schemas: 渲染表单列,autoSubmitOnEnter:回车提交,submitButtonOptions:自定义按钮文本和图标等方法);
   * 平台通过此封装,简化了代码,支持自定义扩展;
   */
  const [registerForm, { updateSchema }] = useForm({
    //注册表单列
    schemas: formSchemas,
    //回车提交
    autoSubmitOnEnter: true,
    //不显示重置按钮
    showResetButton: false,
    //自定义提交按钮文本和图标
    submitButtonOptions: { text: '提交01', preIcon: '' },
    //查询列占比 24代表一行 取值范围 0-24
    actionColOptions: { span: 17 },
  });

  /**
   * 点击提交按钮的value值
   * @param values
   */
  function handleSubmit(values: any) {
    console.log('提交按钮数据::::', values);
  }
</script>

<style scoped></style>

如果是如上使用,应该按如下更改:

iShot_2024-08-15_21 12 59

使用ifShow 控制联动。
image

如果你不是以上使用,可以提供下测试代码,让我们更好兼容。之前那样编写无意支持了联动。

@RacingK93
Copy link
Author

你使用的场景是否如下:

iShot_2024-08-15_21 09 00 iShot_2024-08-15_21 09 00

测试代码:


<!-- 基本用法 -->
<template>
  <!-- 自定表单 -->
  <BasicForm @register="registerForm" @submit="handleSubmit" style="margin-top: 50px; margin-left: 50px" />
</template>

<script lang="ts" setup>
  //引入依赖
  import { useForm, BasicForm, FormSchema } from '/@/components/Form';
  import { getAllRolesListNoByTenant, getAllTenantList } from '/@/views/system/user/user.api';

  //自定义表单字段
  const formSchemas: FormSchema[] = [
    {
      field: 'api01',
      component: 'ApiSelect',
      label: '设备品牌',
      colProps: { span: 12 },
      componentProps: {
        api: getAllRolesListNoByTenant,
        labelField: 'roleName',
        valueField: 'id',

        onChange: () => {
          updateSchema({
            field: 'api02',
            component: 'ApiSelect',
            componentProps: {
              api: getAllRolesListNoByTenant,
            },
          });
        },
      },
    },

    {
      field: 'api02',
      component: 'ApiSelect',
      label: '设备型号',
      colProps: { span: 12 },
      componentProps: {
        labelField: 'roleName',
        valueField: 'id',
      },
    },
  ];

  /**
   * BasicForm绑定注册;
   * useForm 是整个框架的核心用于表单渲染,里边封装了很多公共方法;
   * 支持(schemas: 渲染表单列,autoSubmitOnEnter:回车提交,submitButtonOptions:自定义按钮文本和图标等方法);
   * 平台通过此封装,简化了代码,支持自定义扩展;
   */
  const [registerForm, { updateSchema }] = useForm({
    //注册表单列
    schemas: formSchemas,
    //回车提交
    autoSubmitOnEnter: true,
    //不显示重置按钮
    showResetButton: false,
    //自定义提交按钮文本和图标
    submitButtonOptions: { text: '提交01', preIcon: '' },
    //查询列占比 24代表一行 取值范围 0-24
    actionColOptions: { span: 17 },
  });

  /**
   * 点击提交按钮的value值
   * @param values
   */
  function handleSubmit(values: any) {
    console.log('提交按钮数据::::', values);
  }
</script>

<style scoped></style>

如果是如上使用,应该按如下更改:

iShot_2024-08-15_21 12 59 iShot_2024-08-15_21 12 59

使用ifShow 控制联动。 image

如果你不是以上使用,可以提供下测试代码,让我们更好兼容。之前那样编写无意支持了联动。

是的,就是你说的这个用法,那岂不是系统中之前的联动表单的地方都要加上ifShow: true和ifShow:false?

@liaozhiyang
Copy link
Contributor

已修复,下一版本发布。(代码还原)

# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants