forked from gzzfw/frontEnd/gzDyh

xusd
2024-09-13 466f59f771bc9306079728ba4363f4b204d5beca
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
/*
 * @Company: hugeInfo
 * @Author: lwh
 * @Date: 2022-03-01 16:37:37
 * @LastEditTime: 2022-04-08 15:43:57
 * @LastEditors: lwh
 * @Version: 1.0.0
 * @Description:勾选树形结构组件
 */
import React, { useState } from 'react';
import './index.less';
import { Collapse, Row, Col, Checkbox, Divider } from 'antd';
import { CaretRightOutlined } from '@ant-design/icons';
 
const { Panel } = Collapse;
 
const SelectTree = ({ text, list, onChange = (e, list) => {}, disabled }) => {
    const [treeList, setTreeList] = useState(list);
    const [callbacked, setCallbacked] = useState(list.map((item) => item.value));
 
    return (
        <div className="select-tree-main">
            <div className="select-tree-main-title">{text}</div>
            <Collapse defaultActiveKey={callbacked} expandIcon={({ isActive }) => <CaretRightOutlined rotate={isActive ? 90 : 0} />} ghost>
                {treeList.map((apps, appIndex) => (
                    //应用
                    <Panel
                        showArrow
                        header={
                            <Checkbox
                                disabled={disabled}
                                indeterminate={apps.indeterminate}
                                checked={disabled ? true : apps.checked}
                                value={apps.label}
                                onChange={(e) => onChange(e, apps)}
                            >
                                {apps.label}
                            </Checkbox>
                        }
                        key={apps.value}
                        style={{ position: 'relative' }}
                    >
                        <React.Fragment>
                            {apps.children &&
                                apps.children.map((moudles, moudleIndex) => (
                                    //模块或者菜单
                                    <Row style={{ paddingLeft: '8px', alignItems: 'center' }}>
                                        <Col span={moudles.labelType == '2' ? null : 24} className="select-tree-main-col">
                                            <Checkbox
                                                disabled={disabled}
                                                indeterminate={moudles.indeterminate}
                                                checked={disabled ? true : moudles.checked}
                                                value={moudles.label}
                                                onChange={(e) => onChange(e, moudles)}
                                                style={{ lineHeight: '42px' }}
                                            >
                                                {moudles.label}
                                            </Checkbox>
                                        </Col>
                                        {moudles.labelType == '2' && moudles.children && moudles.children.length > 0 && (
                                            <Divider style={{ borderLeft: '1px solid #d9d9d9', height: '24px' }} type="vertical" />
                                        )}
                                        {!apps.children && <Divider />}
                                        {moudles.labelType == '2' &&
                                            moudles.children &&
                                            moudles.children.map((menus, index) => (
                                                <Row style={{ alignItems: 'center', backgroundColor: 'red' }}>
                                                    <Col className="select-tree-main-col">
                                                        <Checkbox
                                                            disabled={disabled}
                                                            indeterminate={menus.indeterminate}
                                                            checked={disabled ? true : menus.checked}
                                                            value={menus.label}
                                                            onChange={(e) => onChange(e, menus)}
                                                            style={{ lineHeight: '42px' }}
                                                        >
                                                            {menus.label}
                                                        </Checkbox>
                                                    </Col>
                                                    {menus.labelType == '2' && <Divider style={{ borderLeft: '1px solid #d9d9d9', height: '24px' }} type="vertical" />}
                                                    {menus.children
                                                        ? menus.children.map((funs, index) => (
                                                                <React.Fragment>
                                                                    <Col className="select-tree-main-col">
                                                                        <Checkbox
                                                                            disabled={disabled}
                                                                            checked={disabled ? true : funs.checked}
                                                                            value={funs.label}
                                                                            onChange={(e) => onChange(e, funs)}
                                                                            style={{ lineHeight: '42px' }}
                                                                        >
                                                                            {funs.label}
                                                                        </Checkbox>
                                                                    </Col>
                                                                </React.Fragment>
                                                          ))
                                                        : null}
                                                </Row>
                                            ))}
                                        {/* <Divider /> */}
                                    </Row>
                                ))}
                        </React.Fragment>
                        <Divider />
                    </Panel>
                ))}
            </Collapse>
        </div>
    );
};
SelectTree.propTypes = {};
export default SelectTree;