#
luxiaotao1123
2024-02-22 b9efed08b3cf24f3f30b915b17557efd93195940
#
1个文件已添加
4个文件已修改
233 ■■■■■ 已修改文件
zy-asrs-flow/src/pages/system/role/components/scope.jsx 125 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/pages/system/role/index.jsx 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-framework/src/main/resources/templates/react/Index.txt 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/system/controller/RoleController.java 34 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/system/controller/UserController.java 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/pages/system/role/components/scope.jsx
New file
@@ -0,0 +1,125 @@
import React, { useState, useRef, useEffect } from 'react';
import {
    ProForm,
    ProFormDigit,
    ProFormText,
    ProFormSelect,
} from '@ant-design/pro-components';
import { Col, Form, Modal, Row, Checkbox, Skeleton, Tree } from 'antd';
import Http from '@/utils/http';
import { transformTreeData, getTreeAllKeys } from '@/utils/tree-util'
const Scope = (props) => {
    const [form] = Form.useForm();
    const { } = props;
    const [menuTreeLoading, setMenuTreeLoading] = useState(false);
    const [menuTreeData, setMenuTreeData] = useState([]);
    const loadMenuTree = (param) => {
        setMenuTreeLoading(true);
        Http.doPostPromise('/api/menu/tree', param, (res) => {
            setMenuTreeLoading(false);
            const rootMenu = { id: 0, name: '全部', value: 0, children: [] };
            rootMenu.children = res.data;
            // const treeData = transformTreeData([rootMenu]);
            const treeData = transformTreeData(res.data);
            setMenuTreeData(treeData);
            // const treeAllKeys = getTreeAllKeys(treeData);
            // setDeptExpandedKeys(treeAllKeys);
        }).catch((err) => {
            console.error(err);
            setMenuTreeLoading(false);
        })
    }
    useEffect(() => {
        form.resetFields();
        form.setFieldsValue({
            ...props.values
        })
        loadMenuTree();
    }, [form, props])
    const handleCancel = () => {
        props.onCancel();
    };
    const handleOk = () => {
        form.submit();
    }
    const handleFinish = async (values) => {
        props.onSubmit({ ...values });
    }
    return (
        <>
            <Modal
                title="Scope"
                width={640}
                forceRender
                destroyOnClose
                open={props.open}
                onCancel={handleCancel}
                onOk={handleOk}
            >
                <ProForm
                    form={form}
                    submitter={false}
                    onFinish={handleFinish}
                    layout="horizontal"
                    grid={true}
                >
                    <ProFormDigit
                        name="id"
                        disabled
                        hidden={true}
                    />
                    <ProForm.Item
                        name="deptIds"
                        label="菜单权限"
                        colProps={{ md: 24, xl: 24 }}
                    >
                        <Row gutter={[16, 16]}>
                            <Col md={24}>
                                <Checkbox.Group
                                    options={[
                                        { label: '展开/折叠', value: 'deptExpand' },
                                        { label: '全选/全不选', value: 'deptNodeAll' },
                                    ]}
                                    onChange={(checkedValue) => {
                                        console.log(checkedValue);
                                    }} />
                            </Col>
                            <Col md={24}>
                                {menuTreeLoading ? (
                                    <Skeleton active />
                                ) : (
                                    <Tree
                                        checkable
                                        onExpand={(expandedKeys, { expanded, node }) => {
                                        }}
                                        // expandedKeys={expandedKeys}
                                        // autoExpandParent={autoExpandParent}
                                        // onCheck={onCheck}
                                        // checkedKeys={checkedKeys}
                                        // onSelect={onSelect}
                                        // selectedKeys={selectedKeys}
                                        treeData={menuTreeData}
                                    />
                                )}
                            </Col>
                        </Row>
                    </ProForm.Item>
                </ProForm>
            </Modal>
        </>
    )
}
export default Scope;
zy-asrs-flow/src/pages/system/role/index.jsx
@@ -10,6 +10,7 @@
import { PlusOutlined, ExportOutlined } from '@ant-design/icons';
import Http from '@/utils/http';
import Edit from './components/edit'
import Scope from './components/scope'
import { TextFilter, SelectFilter, DatetimeRangeFilter, LinkFilter } from '@/components/TableSearch'
import { statusMap } from '@/utils/enum-util'
@@ -87,6 +88,24 @@
    }
};
const handleScope = async (val) => {
    const hide = message.loading('正在分配');
    try {
        const resp = await Http.doPost('api/role/scope', val);
        if (resp.code === 200) {
            message.success('分配成功');
            return true;
        } else {
            message.error(resp.msg);
            return false;
        }
    } catch (error) {
        message.error('分配失败请重试!');
        return false;
    } finally {
        hide();
    }
};
const Main = () => {
    const formTableRef = useRef();
@@ -95,6 +114,8 @@
    const [modalVisible, setModalVisible] = useState(false);
    const [currentRow, setCurrentRow] = useState();
    const [searchParam, setSearchParam] = useState({});
    const [scopeModalVisible, setScopeModalVisible] = useState(false);
    useEffect(() => {
@@ -180,6 +201,16 @@
            width: 140,
            valueType: 'option',
            render: (_, record) => [
                <Button
                    type="link"
                    key="scope"
                    onClick={() => {
                        setScopeModalVisible(true);
                        setCurrentRow(record);
                    }}
                >
                    分配权限
                </Button>,
                <Button
                    type="link"
                    key="edit"
@@ -356,6 +387,30 @@
                }
                }
            />
            <Scope
                open={scopeModalVisible}
                values={currentRow || {}}
                onCancel={
                    () => {
                        setScopeModalVisible(false);
                        setCurrentRow(undefined);
                    }
                }
                onSubmit={async (values) => {
                    let ok = false;
                    if (values.id) {
                        ok = await handleScope({ ...values })
                    }
                    if (ok) {
                        setScopeModalVisible(false);
                        setCurrentRow(undefined);
                        if (actionRef.current) {
                            actionRef.current.reload();
                        }
                    }
                }}
            />
        </PageContainer>
    );
};
zy-asrs-framework/src/main/resources/templates/react/Index.txt
@@ -287,8 +287,7 @@
                            actionRef.current.reload();
                        }
                    }
                }
                }
                }}
            />
        </PageContainer>
    );
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/system/controller/RoleController.java
@@ -4,22 +4,23 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zy.asrs.framework.common.Cools;
import com.zy.asrs.framework.common.R;
import com.zy.asrs.framework.exception.CoolException;
import com.zy.asrs.wcs.common.annotation.OperationLog;
import com.zy.asrs.wcs.common.domain.BaseParam;
import com.zy.asrs.wcs.common.domain.KeyValVo;
import com.zy.asrs.wcs.common.domain.PageParam;
import com.zy.asrs.wcs.system.entity.Role;
import com.zy.asrs.wcs.system.entity.RoleMenu;
import com.zy.asrs.wcs.system.service.RoleMenuService;
import com.zy.asrs.wcs.system.service.RoleService;
import com.zy.asrs.wcs.utils.ExcelUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.*;
/**
 * Created by vincent on 2/13/2024
@@ -30,6 +31,8 @@
    @Autowired
    private RoleService roleService;
    @Autowired
    private RoleMenuService roleMenuService;
    @PreAuthorize("hasAuthority('system:role:list')")
    @PostMapping("/role/page")
@@ -63,6 +66,8 @@
                && roleService.count(new LambdaQueryWrapper<Role>().eq(Role::getCode, role.getCode())) > 0) {
            return R.error("角色标识已存在");
        }
        role.setCreateTime(new Date());
        role.setUpdateTime(new Date());
        if (!roleService.save(role)) {
            return R.error("添加失败");
        }
@@ -83,6 +88,7 @@
                .ne(Role::getId, role.getId())) > 0) {
            return R.error("角色名称已存在");
        }
        role.setUpdateTime(new Date());
        if (!roleService.updateById(role)) {
            return R.error("修改失败");
        }
@@ -92,9 +98,15 @@
    @PreAuthorize("hasAuthority('system:role:remove')")
    @OperationLog("删除角色")
    @PostMapping("/role/remove/{ids}")
    @Transactional
    public R remove(@PathVariable Long[] ids) {
        if (!roleService.removeByIds(Arrays.asList(ids))) {
            return R.error("删除失败");
        for (Long roleId : ids) {
            if (!roleService.removeById(roleId)) {
                throw new CoolException("服务器内部错误");
            }
            if (!roleMenuService.remove(new LambdaQueryWrapper<RoleMenu>().eq(RoleMenu::getRoleId, roleId))) {
                throw new CoolException("服务器内部错误");
            }
        }
        return R.ok("删除成功");
    }
@@ -119,4 +131,14 @@
        ExcelUtil.build(ExcelUtil.create(roleService.list(), Role.class), response);
    }
    @PreAuthorize("hasAuthority('system:role:update')")
    @OperationLog("分配权限")
    @PostMapping("/role/scope")
    public R scope(@RequestBody Role role) {
        return R.ok("分配成功");
    }
}
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/system/controller/UserController.java
@@ -4,15 +4,19 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zy.asrs.framework.common.Cools;
import com.zy.asrs.framework.common.R;
import com.zy.asrs.framework.exception.CoolException;
import com.zy.asrs.wcs.common.annotation.OperationLog;
import com.zy.asrs.wcs.common.domain.BaseParam;
import com.zy.asrs.wcs.common.domain.KeyValVo;
import com.zy.asrs.wcs.common.domain.PageParam;
import com.zy.asrs.wcs.system.entity.User;
import com.zy.asrs.wcs.system.entity.UserRole;
import com.zy.asrs.wcs.system.service.UserRoleService;
import com.zy.asrs.wcs.system.service.UserService;
import com.zy.asrs.wcs.utils.ExcelUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
@@ -26,6 +30,8 @@
    @Autowired
    private UserService userService;
    @Autowired
    private UserRoleService userRoleService;
    @PreAuthorize("hasAuthority('system:user:list')")
    @PostMapping("/user/page")
@@ -121,9 +127,15 @@
    @PreAuthorize("hasAuthority('system:user:remove')")
    @OperationLog("删除用户")
    @PostMapping("/user/remove/{ids}")
    @Transactional
    public R remove(@PathVariable Long[] ids) {
        if (!userService.removeByIds(Arrays.asList(ids))) {
            return R.error("删除失败");
        for (Long userId : ids) {
            if (!userService.removeById(userId)) {
                throw new CoolException("服务器内部错误");
            }
            if (!userRoleService.remove(new LambdaQueryWrapper<UserRole>().eq(UserRole::getUserId, userId))) {
                throw new CoolException("服务器内部错误");
            }
        }
        return R.ok("删除成功");
    }