TreeSelector.jsx 1.94 KB
Newer Older
DarkForst's avatar
DarkForst committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
import React,{useState} from 'react';
import { connect } from 'umi';
import { TreeSelect } from 'antd'

const TreeSelector = (props) => {
    const { treeData, onChange , value , setChargePeople , disabled} = props
    console.log(props)
    let allUser = []
    const initTreeData = (tree) => {
        if (!tree || tree?.length === 0) return;
        return tree && tree.length && tree.map(item => {
            const users = item?.userList || []
            let children = initTreeData(item.subList);
            if (users.length > 0) {
                const userList = users.map(user => ({
                    title: user.name,
                    key: user.id,
                    id: user.id,
                    avatarUrl: user.avatarUrl,
                    selectable: true
                }))
                children = children?.length > 0 ? children.concat(userList) : userList
                allUser = allUser.concat(item.userList)
            }
            return {
                title: item.name,
                key: `user-${item.id}`,
                id: item.id,
                children,
                disabled: true
            }
        })
    }
    const treeDataList = initTreeData(treeData)
    const onSelect = (value, node, extra) => {
        console.log(value, node, extra)
        onChange(node.id)
        if(setChargePeople){
            setChargePeople({
                id: node.id,
                name: node.title
            })
        }
    }
    const changeAction = (value) => {
        onChange(value)
    }

    return <TreeSelect
        value={value}
        style={{ width: '100%' }}
        allowClear
        placeholder="请选择"
        treeData={treeDataList}
        onSelect={onSelect}
        onChange={changeAction}
        disabled={disabled || false}
    />
}

export default connect(({ user,commonDevice, loading }) => ({
    user,commonDevice,
    loading:loading.models.commonDevice || loading.models.user
}))(TreeSelector)