react +ts+antd中tree和From和谐相处

利用useState存放点击的tree的key值

tree中调用的方法,获取tree中自带key,

将oncheck获取到的key值,放入到model方法对应的字段中

提交代码时,将model方法放入其中

所有代码

import React, { useEffect, useMemo, useState } from "react";

import { Form, Input, Modal, TreeSelect, message, Tree } from 'antd';

import './EditFromindex.less'

import { Dispatch } from 'umi';

import { AssignPermissions } from '@/service/roleService';

import { query as Menuquery } from '@/service/menuService';

import type { DataNode, TreeProps } from 'antd/es/tree';

import { number } from "echarts";

interface AssignFormProps {

  visible: boolean;

  onSubmit: () => void;

  onCancel: () => void;

  dataItem: any;

  dispatch: Dispatch;

  Items: Menu[];

  RoleId?: number;

  changevalue?: any;

}

const page: number = 1;

const pageSize: number = 99;



const AssignForm: React.FC<AssignFormProps> = (props: AssignFormProps) => {

  const [form] = Form.useForm();

  const { dataItem } = props;

  const [rolelist, setRoleList] = useState([]);

  const [changevalue, setChangeValue] = useState({});



  useEffect(() => {

    props.visible && MenuFunc()

  }, [dataItem?.Id]);



  const MenuFunc = async () => {

    const query = {

      currenetPageIndex: page,

      pageSize: pageSize,

    }

    const res = await Menuquery(query)

    console.log(res?.ResData.Items);

    setRoleList(treeDataFunc(res?.ResData.Items))

  }



  const mapToModel = (values: any,): any => {

    console.log(values)



    return {

      ...values,

      RoleId: dataItem?.Id,

      Permissions: '',

      Menus: changevalue,

    }

  }



  const onSubmit = (value: any) => {

    const server = AssignPermissions;

    server(mapToModel(value)).then((res) => {

      const { Success } = res;

      if (Success) {

        props.onSubmit();

        message.success('success');

      } else {

        message.error('error');

      }

    });

  };

  const treeDataFunc = (data) => {

    return data?.map((item) => {

      return {

        value: item.Id,

        title: item.Name,

        key: item.Id,

        children: item.SubMenu?.map((submenu) => {

          return {

            value: submenu.Id,

            title: submenu.Name,

            key: submenu.Name,

            children: submenu.Permissions?.map((permission) => {

              return {

                value: permission.Id,

                key: permission.Name,

                title: permission.Name.split('/')[1],

              }

            })

          }

        })

      }

    })

  }



  // tree 模板

  const onSelect: TreeProps['onSelect'] = (selectedKeys, info) => {

    console.log('selected', selectedKeys, info);

  };



  const onCheck: TreeProps['onCheck'] = (checkedKeys, info) => {

    console.log('onCheck', checkedKeys, info);

    setChangeValue(checkedKeys)

  };



  // tree 模板



  return (

    <Modal

      title="Assign permissions"

      onOk={() => {

        form.submit();

      }}

      onCancel={props.onCancel}

      visible={props.visible}

      className='department-editfrom'

    >



      <Form

        labelCol={{ span: 8 }}

        layout="vertical"

        form={form}

        onFinish={(values: number) => {

          console.log(values);

          onSubmit(values);

        }}

      >

        <Form.Item name="RoleId">

          <Tree

            checkable

            onSelect={onSelect}

            onCheck={onCheck}

            treeData={rolelist}

          />

        </Form.Item>

      </Form>

    </Modal>

  )



};



export default AssignForm;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值