index.jsx 6.5 KB
import React, { useState, useEffect, useMemo, useRef } from 'react';
import DrawerPro from '@/components/DrawerPro';
import AutoTable from '@/components/AutoTable';
import PremButton from '@/components/PremButton';
import useKeepAlive from "@/components/useKeepAlive";
import getcolumns from "./columns";
import { useRequest } from 'ahooks';
import { doFetch } from '@/utils/doFetch';
import Authtree from "./Authtree";
function Role() {
    let actionRef = useRef();
    const [drawer, setdrawer] = useState({
        open: false,
    });
    const { run, loading, runAsync } = useRequest(doFetch, {
        manual: true,
        onSuccess: (res, params) => {
            if (res?.code == '0000') {
                reload();
            }
        },
    });
    const columns = useMemo(() => {
        let defcolumn = getcolumns();
        return defcolumn.concat({
            title: "操作",
            valueType: "option",
            width: 80,
            render: (text, row, _, action) => rightExtra(text, row, _, action),
        });
    }, []),
        usercolumns = [
            {
                title: "用户名",
                dataIndex: "accountName",
                key: "accountName",
            },
            {
                title: "姓名",
                dataIndex: "userName",
                key: "userName",
            },
            {
                title: "工厂",
                dataIndex: "factoryName",
                key: "factoryName",
            },
            {
                title: "组织",
                dataIndex: "departmentName",
                key: "departmentName",
            }
        ],
        dom = useMemo(() => {
            const renderType = {
                "auth": <Authtree roleId={drawer?.item?.id} reload={reload} />,
                "user": <AutoTable
                    path='/ta_wms_auth/sysUser/query/pageByRoleId'
                    extraparams={{ roleId: drawer?.item?.id }}
                    columns={usercolumns}
                    withCard={false}
                />
            }
            return renderType[drawer?.type]
        }, [drawer?.type, drawer?.item])
    const rightExtra = (text, row, _, action) => {
        return [
            <PremButton
                key="edit"
                btn={{
                    type: "primary",
                    size: "small",
                    onClick: () => {
                        setdrawer(s => {
                            return {
                                ...s,
                                open: true,
                                title: '修改角色',
                                val: 'edit',
                                item: row
                            }
                        })
                    },
                }}
            >
                修改
            </PremButton>,
            <PremButton
                key="auth"
                btn={{
                    size: "small",
                    type: "primary",
                    onClick: () => {
                        setdrawer(s => {
                            return {
                                ...s,
                                open: true,
                                val: 'only',
                                type: 'auth',
                                item: row,
                                title: `${row.roleName}-权限配置`
                            }
                        })
                    },
                }}
            >
                授权配置
            </PremButton>,
            <PremButton
                key="user"
                btn={{
                    size: "small",
                    type: "primary",
                    onClick: () => {
                        setdrawer(s => {
                            return {
                                ...s,
                                open: true,
                                val: 'only',
                                type: 'user',
                                item: row,
                                title: `拥有${row.roleName}角色 的人员列表`
                            }
                        })
                    },
                }}
            >
                人员
            </PremButton>,
            <PremButton
                key='delete'
                pop={{
                    title: "是否删除该角色?",
                    okText: "确认",
                    cancelText: "取消",
                    onConfirm: async () => {
                        await runAsync({
                            url: "/ta_wms_auth/sysRole/deleteById",
                            params: { id: row.id },
                        });
                    },
                }}
                btn={{
                    size: "small",
                    danger: true
                }}
            >
                删除
            </PremButton>
        ];
    };
    function reload() {
        actionRef?.current?.reload();
        setdrawer((s) => ({
            ...s,
            open: false,
        }));
    }
    return <div>
        <AutoTable
            pagetitle='角色管理'
            columns={columns}
            path='/ta_wms_auth/sysRole/queryList'
            actionRef={actionRef}
            pageextra='add'
            addconfig={{
                // access: 'sysDepartment_save',
                name: '新增',
                btn: {
                    type: 'primary',
                    onClick: () => {
                        setdrawer((s) => ({
                            ...s,
                            open: true,
                            title: '新增',
                            val: 'add',
                            item: {}
                        }));
                    },
                },
            }}
        />
        <DrawerPro
            {...drawer}
            fields={columns}
            defaultFormValue={drawer?.item}
            placement="right"
            onClose={() => {
                setdrawer((s) => ({
                    ...s,
                    open: false,
                }));
            }}
            onFinish={async (vals) => {
                let newfields = JSON.parse(JSON.stringify(vals));
                await runAsync({
                    url: "/ta_wms_auth/sysRole/save",
                    params: { ...newfields, id: drawer?.val === 'edit' ? drawer?.item?.id : '' }
                });
            }}
            width='60%'
        >
            {dom}
        </DrawerPro>
    </div>;
}

export default useKeepAlive(Role);