skyouc
2024-12-21 c635d78b479510ebe2556a420948effcd30a0731
zy-asrs-flow/src/pages/system/role/components/scope.jsx
@@ -1,156 +1,156 @@
import React, { useState, useRef, useEffect } from 'react';
import {
    ProForm,
    ProFormDigit,
} from '@ant-design/pro-components';
import { DownOutlined } from '@ant-design/icons';
import { Col, Form, Modal, Row, Checkbox, Skeleton, Tree, Drawer, Space, Button, Card } from 'antd';
import Http from '@/utils/http';
import { FormattedMessage, useIntl } from '@umijs/max';
import { transformTreeData, getTreeAllKeys } from '@/utils/tree-util'
const Scope = (props) => {
    const intl = useIntl();
    const [form] = Form.useForm();
    const { originMenuIds, values: { name } } = props;
    const [menuTreeLoading, setMenuTreeLoading] = useState(false);
    const [menuTreeData, setMenuTreeData] = useState([]);
    const [menuExpandedKeys, setMenuExpandedKeys] = useState([]);
    const [menuIds, setMenuIds] = useState([]);
    const [menuTreeAllKeys, setMenuTreeAllKeys] = useState([]);
    const loadMenuTree = (param) => {
        setMenuTreeLoading(true);
        Http.doPostPromise('/api/menu/tree', param, (res) => {
            setMenuTreeLoading(false);
            const treeData = transformTreeData(res.data);
            setMenuTreeData(treeData);
            const treeAllKeys = getTreeAllKeys(treeData);
            setMenuTreeAllKeys(treeAllKeys);
            setMenuExpandedKeys(treeAllKeys);
        }).catch((err) => {
            console.error(err);
            setMenuTreeLoading(false);
        })
    }
    useEffect(() => {
        setMenuIds(originMenuIds);
        form.resetFields();
        form.setFieldsValue({
            ...props.values
        })
        loadMenuTree();
    }, [form, props])
    const handleCancel = () => {
        props.onCancel();
    };
    const handleOk = () => {
        form.submit();
    }
    const handleFinish = async (values) => {
        props.onSubmit({ ...values, menuIds });
    }
    return (
        <>
            <Drawer
                title={`${intl.formatMessage({ id: 'page.assign.permission', defaultMessage: '分配权限' })} - ${name ? name : '-'}`}
                width={640}
                forceRender
                destroyOnClose
                open={props.open}
                onClose={handleCancel}
                styles={{
                    body: {
                        paddingBottom: 80,
                    },
                }}
                extra={
                    <Space>
                        <Button onClick={handleCancel}>Cancel</Button>
                        <Button onClick={handleOk} type="primary">
                            Submit
                        </Button>
                    </Space>
                }
            >
                <Card>
                    <ProForm
                        form={form}
                        submitter={false}
                        onFinish={handleFinish}
                        layout="horizontal"
                        grid={true}
                    >
                        <ProFormDigit
                            name="id"
                            disabled
                            hidden={true}
                        />
                        <ProForm.Item
                            name="deptIds"
                            label={intl.formatMessage({ id: 'page.permission.menu', defaultMessage: '权限菜单' })}
                            colProps={{ md: 24, xl: 24 }}
                        >
                            <Row gutter={[16, 16]}>
                                <Col md={24}>
                                    <Checkbox.Group
                                        options={[
                                            { label: intl.formatMessage({ id: 'page.role.assign.ec', defaultMessage: '展开/折叠' }), value: 'expandAll' },
                                            { label: intl.formatMessage({ id: 'page.role.assign.sd', defaultMessage: '全选/全不选' }), value: 'checkAll' },
                                        ]}
                                        defaultValue={['expandAll']}
                                        onChange={(values) => {
                                            if (values.includes('expandAll')) {
                                                setMenuExpandedKeys(menuTreeAllKeys);
                                            } else {
                                                setMenuExpandedKeys([]);
                                            }
                                            if (values.includes('checkAll')) {
                                                setMenuIds(menuTreeAllKeys)
                                            } else {
                                                setMenuIds([]);
                                            }
                                        }} />
                                </Col>
                                <Col md={24}>
                                    {menuTreeLoading ? (
                                        <Skeleton active />
                                    ) : (
                                        <Tree
                                            showLine
                                            blockNode
                                            checkable
                                            switcherIcon={<DownOutlined />}
                                            treeData={menuTreeData}
                                            expandedKeys={menuExpandedKeys}
                                            onExpand={(expandedKeys) => {
                                                setMenuExpandedKeys(expandedKeys)
                                            }}
                                            checkedKeys={menuIds}
                                            onCheck={(checkedKeys, checkInfo) => {
                                                return setMenuIds({
                                                    checked: checkedKeys,
                                                    halfChecked: checkInfo.halfCheckedKeys  // 父节点
                                                });
                                            }}
                                        />
                                    )}
                                </Col>
                            </Row>
                        </ProForm.Item>
                    </ProForm>
                </Card>
            </Drawer>
        </>
    )
}
import React, { useState, useRef, useEffect } from 'react';
import {
    ProForm,
    ProFormDigit,
} from '@ant-design/pro-components';
import { DownOutlined } from '@ant-design/icons';
import { Col, Form, Modal, Row, Checkbox, Skeleton, Tree, Drawer, Space, Button, Card } from 'antd';
import Http from '@/utils/http';
import { FormattedMessage, useIntl } from '@umijs/max';
import { transformTreeData, getTreeAllKeys } from '@/utils/tree-util'
const Scope = (props) => {
    const intl = useIntl();
    const [form] = Form.useForm();
    const { originMenuIds, values: { name } } = props;
    const [menuTreeLoading, setMenuTreeLoading] = useState(false);
    const [menuTreeData, setMenuTreeData] = useState([]);
    const [menuExpandedKeys, setMenuExpandedKeys] = useState([]);
    const [menuIds, setMenuIds] = useState([]);
    const [menuTreeAllKeys, setMenuTreeAllKeys] = useState([]);
    const loadMenuTree = (param) => {
        setMenuTreeLoading(true);
        Http.doPostPromise('/api/menu/tree', param, (res) => {
            setMenuTreeLoading(false);
            const treeData = transformTreeData(res.data);
            setMenuTreeData(treeData);
            const treeAllKeys = getTreeAllKeys(treeData);
            setMenuTreeAllKeys(treeAllKeys);
            setMenuExpandedKeys(treeAllKeys);
        }).catch((err) => {
            console.error(err);
            setMenuTreeLoading(false);
        })
    }
    useEffect(() => {
        setMenuIds(originMenuIds);
        form.resetFields();
        form.setFieldsValue({
            ...props.values
        })
        loadMenuTree();
    }, [form, props])
    const handleCancel = () => {
        props.onCancel();
    };
    const handleOk = () => {
        form.submit();
    }
    const handleFinish = async (values) => {
        props.onSubmit({ ...values, menuIds });
    }
    return (
        <>
            <Drawer
                title={`${intl.formatMessage({ id: 'page.assign.permission', defaultMessage: '分配权限' })} - ${name ? name : '-'}`}
                width={640}
                forceRender
                destroyOnClose
                open={props.open}
                onClose={handleCancel}
                styles={{
                    body: {
                        paddingBottom: 80,
                    },
                }}
                extra={
                    <Space>
                        <Button onClick={handleCancel}>Cancel</Button>
                        <Button onClick={handleOk} type="primary">
                            Submit
                        </Button>
                    </Space>
                }
            >
                <Card>
                    <ProForm
                        form={form}
                        submitter={false}
                        onFinish={handleFinish}
                        layout="horizontal"
                        grid={true}
                    >
                        <ProFormDigit
                            name="id"
                            disabled
                            hidden={true}
                        />
                        <ProForm.Item
                            name="deptIds"
                            label={intl.formatMessage({ id: 'page.permission.menu', defaultMessage: '权限菜单' })}
                            colProps={{ md: 24, xl: 24 }}
                        >
                            <Row gutter={[16, 16]}>
                                <Col md={24}>
                                    <Checkbox.Group
                                        options={[
                                            { label: intl.formatMessage({ id: 'page.role.assign.ec', defaultMessage: '展开/折叠' }), value: 'expandAll' },
                                            { label: intl.formatMessage({ id: 'page.role.assign.sd', defaultMessage: '全选/全不选' }), value: 'checkAll' },
                                        ]}
                                        defaultValue={['expandAll']}
                                        onChange={(values) => {
                                            if (values.includes('expandAll')) {
                                                setMenuExpandedKeys(menuTreeAllKeys);
                                            } else {
                                                setMenuExpandedKeys([]);
                                            }
                                            if (values.includes('checkAll')) {
                                                setMenuIds(menuTreeAllKeys)
                                            } else {
                                                setMenuIds([]);
                                            }
                                        }} />
                                </Col>
                                <Col md={24}>
                                    {menuTreeLoading ? (
                                        <Skeleton active />
                                    ) : (
                                        <Tree
                                            showLine
                                            blockNode
                                            checkable
                                            switcherIcon={<DownOutlined />}
                                            treeData={menuTreeData}
                                            expandedKeys={menuExpandedKeys}
                                            onExpand={(expandedKeys) => {
                                                setMenuExpandedKeys(expandedKeys)
                                            }}
                                            checkedKeys={menuIds}
                                            onCheck={(checkedKeys, checkInfo) => {
                                                return setMenuIds({
                                                    checked: checkedKeys,
                                                    halfChecked: checkInfo.halfCheckedKeys  // 父节点
                                                });
                                            }}
                                        />
                                    )}
                                </Col>
                            </Row>
                        </ProForm.Item>
                    </ProForm>
                </Card>
            </Drawer>
        </>
    )
}
export default Scope;