Vben,userform中的checkboxgroup数据渲染及选中

Vben,userform中的checkboxgroup数据渲染及选中

一、效果展示

二、使用步骤

1.数据格式

在看文档的时候可以看到checkboxgroup中渲染及绑定需要label以及value这两个值

2.获取数据及修改数据

通过后端接口,获取checkboxgroup需要渲染数据如下:

[
   { "label": "用户管理", "value": 3 },
   { "label": "后台用户管理","value": 8 },
   { "label": "Banner图管理","value": 15 },
   { "label": "优惠券管理","value": 19 },
   { "label": "定制管理", "value": 22 },
   { "label": "礼品卡管理", "value": 24 },
   { "label": "商品管理", "value": 27  },
   { "label": "积分商城管理","value": 37 },
   { "label": "客服聊天管理", "value": 41 },
   { "label": "订单管理", "value": 43},
   { "label": "打卡管理","value": 50 },
   { "label": "门店管理","value": 55},
   { "label": "系统管理", "value": 59 }
 ]

PS:后端大佬返回的数据并不是上图的数据,此时我是通过map方法返回了一个checkboxgroup所需要的数据在通过updateSchema表单方法将数据渲染上去

此时的界面如下:

三、渲染步骤

现在表单内容渲染好了,这时候就要获取该角色详细数据渲染

此时返回的permission权限字段是个字符串,咱们将他转换成数组渲染上去就好了,新数据如下:

获取数据并转换数据代码:

PS:提交数据给后端时再将permission转换成字符串就好了

四、全部代码

<template>
  <PageWrapper>
    <div
      style="
        display: flex;
        align-items: center;
        justify-content: flex-end;
        gap: 20px;
        margin-bottom: 6px;
      "
    >
      <a-button @click="resetFields">重置</a-button>
      <a-button type="primary" @click="validateForm">提交</a-button>
    </div>
    <CollapseContainer title="基础信息" class="mb-6">
      <BasicForm @register="register"></BasicForm>
    </CollapseContainer>
  </PageWrapper>
</template>

<script lang="ts">
import { defineComponent, unref, ref } from 'vue';
import { useRouter } from 'vue-router';
import { useGo } from '/@/hooks/web/usePage';
import { PageWrapper } from '/@/components/Page';
import { CollapseContainer } from '/@/components/Container';
import { BasicForm, useForm } from '/@/components/Form/index';
import { Button } from '/@/components/Button';
import { useMessage } from '/@/hooks/web/useMessage';
import { Tinymce } from '/@/components/Tinymce/index';
import { getRoleDetails, postRoleDetails } from '/@/api/member/details';
import { getPermissionList} from '/@/api/member';

export default defineComponent({
  components: {
    PageWrapper,
    CollapseContainer,
    BasicForm,
    Button,
    Tinymce,
  },
  setup() {
    const go = useGo();
    const { currentRoute } = useRouter();
    const test = ref();
    // 动态
    const params = unref(currentRoute).params;
    const { createMessage } = useMessage();
    const [
      register,
      {
        updateSchema,
        validateFields,
        resetFields,
        setFieldsValue,
      },
    ] = useForm({
      labelWidth: 120,
      schemas: [
        {
          field: 'id',
          label: 'id',
          required: true,
          defaultValue: 0,
          component: 'InputNumber',
          show: false,
        },
        {
          field: 'name',
          component: 'Input',
          label: '用户名称',
          colProps: {
            span: 20,
          },
          componentProps: {
            placeholder: '请输入用户名称',
          },
          required: true,
        },
        {
          field: 'value',
          component: 'Input',
          label: '真实名称',
          colProps: {
            span: 20,
          },
          componentProps: {
            placeholder: '请输入用户名称',
          },
          required: true,
          show: false,
        },
        {
          field: 'permission',
          component: 'CheckboxGroup',
          label: '角色权限',
          colProps: {
            span: 20,
          },
        },
        {
          field: 'status',
          component: 'Switch',
          label: '角色状态',
          colProps: {
            span: 20,
          },
          required: true,
        }
      ],
      // submitButtonOptions: { text: '提交' },
      showActionButtonGroup: false,
    });
       //获取后端数据
        getPermissionList({
          page: 1,
          pageSize:99
        }).then((msg: any) => {
          msg=msg.list.map((item: { title: any; id: any; }) => ({ label: item.title, value: item.id}))
          updateSchema({
            field: 'permission',
            componentProps: { options: msg },
          });
          getRoleDetails({
            id: params.id,
          }).then((res: any) => {
            if(res.permission!=undefined){
              res.permission = res.permission.split(',')
              res.permission = res.permission.map((item: number) => {
                  if (!isNaN(item - 0)) { 
                    return item - 0;
                  } else {
                    return item;
                  }
                });
            }
            setFieldsValue(res);
            test.value = res;
          });
        });
        
    // 提交
    const validateForm = async () => {
      try {
        const values = await validateFields();
        values.permission=values.permission.join()
        postRoleDetails({
          ...values,
        }).then((res: any) => {
          createMessage.success('提交成功');
          go(`/member/juese`);
        });
      } catch (error) {
        createMessage.error('系统错误,请稍后重试');
      }
    };
    const handleChange = (value: string) => {
      console.log(value);
    };
    return {
      register,
      resetFields,
      validateForm,
      handleChange,
    };
  },
});
</script>
 

总结

        上面是我处理这部分业务所需要的代码,转换数据并渲染表单组件的内容,再将permission中的值绑定在checkboxgroup中

  • 36
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值