#
luxiaotao1123
2024-02-22 ad847473401730c14a5d667bd06afcb7d4575eb6
#
6个文件已修改
272 ■■■■■ 已修改文件
zy-asrs-flow/src/pages/system/dept/index.jsx 82 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/pages/system/menu/index.jsx 102 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/pages/system/user/index.jsx 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/system/controller/DeptController.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/system/controller/MenuController.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/utils/Utils.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/pages/system/dept/index.jsx
@@ -110,12 +110,12 @@
            valueType: 'text',
            hidden: false,
            width: 240,
            filterDropdown: (props) => <TextFilter
                name='name'
                {...props}
                actionRef={actionRef}
                setSearchParam={setSearchParam}
            />,
            // filterDropdown: (props) => <TextFilter
            //     name='name'
            //     {...props}
            //     actionRef={actionRef}
            //     setSearchParam={setSearchParam}
            // />,
        },
        {
            title: '上级部门',
@@ -188,12 +188,12 @@
            valueType: 'text',
            hidden: false,
            width: 140,
            filterDropdown: (props) => <TextFilter
                name='leader'
                {...props}
                actionRef={actionRef}
                setSearchParam={setSearchParam}
            />,
            // filterDropdown: (props) => <TextFilter
            //     name='leader'
            //     {...props}
            //     actionRef={actionRef}
            //     setSearchParam={setSearchParam}
            // />,
        },
        {
            title: '数量',
@@ -214,12 +214,12 @@
            valueType: 'text',
            hidden: false,
            width: 140,
            filterDropdown: (props) => <TextFilter
                name='sort'
                {...props}
                actionRef={actionRef}
                setSearchParam={setSearchParam}
            />,
            // filterDropdown: (props) => <TextFilter
            //     name='sort'
            //     {...props}
            //     actionRef={actionRef}
            //     setSearchParam={setSearchParam}
            // />,
            render: (_, record) => {
                return <span style={{ fontWeight: "bold" }}>{_}</span>
            }
@@ -230,16 +230,16 @@
            valueType: 'text',
            hidden: false,
            width: 140,
            filterDropdown: (props) => <SelectFilter
                name='status'
                {...props}
                actionRef={actionRef}
                setSearchParam={setSearchParam}
                data={[
                    { label: '正常', value: 1 },
                    { label: '禁用', value: 0 },
                ]}
            />,
            // filterDropdown: (props) => <SelectFilter
            //     name='status'
            //     {...props}
            //     actionRef={actionRef}
            //     setSearchParam={setSearchParam}
            //     data={[
            //         { label: '正常', value: 1 },
            //         { label: '禁用', value: 0 },
            //     ]}
            // />,
            render: (_, record) => {
                const status = statusMap[record.status]
                return <Tag color={status.color}>{status.text}</Tag>
@@ -251,12 +251,12 @@
            valueType: 'text',
            hidden: false,
            width: 140,
            filterDropdown: (props) => <DatetimeRangeFilter
                name='updateTime'
                {...props}
                actionRef={actionRef}
                setSearchParam={setSearchParam}
            />,
            // filterDropdown: (props) => <DatetimeRangeFilter
            //     name='updateTime'
            //     {...props}
            //     actionRef={actionRef}
            //     setSearchParam={setSearchParam}
            // />,
        },
        {
            title: '修改人员',
@@ -264,13 +264,13 @@
            valueType: 'text',
            hidden: false,
            width: 140,
            filterDropdown: (props) => <LinkFilter
                name='updateBy'
                major='user'
                {...props}
                actionRef={actionRef}
                setSearchParam={setSearchParam}
            />,
            // filterDropdown: (props) => <LinkFilter
            //     name='updateBy'
            //     major='user'
            //     {...props}
            //     actionRef={actionRef}
            //     setSearchParam={setSearchParam}
            // />,
        },
        {
            title: '备注',
zy-asrs-flow/src/pages/system/menu/index.jsx
@@ -122,12 +122,12 @@
            valueType: 'text',
            hidden: false,
            width: 240,
            filterDropdown: (props) => <TextFilter
                name='name'
                {...props}
                actionRef={actionRef}
                setSearchParam={setSearchParam}
            />,
            // filterDropdown: (props) => <TextFilter
            //     name='name'
            //     {...props}
            //     actionRef={actionRef}
            //     setSearchParam={setSearchParam}
            // />,
        },
        {
            title: '上级菜单',
@@ -187,12 +187,12 @@
            valueType: 'text',
            hidden: false,
            width: 200,
            filterDropdown: (props) => <TextFilter
                name='route'
                {...props}
                actionRef={actionRef}
                setSearchParam={setSearchParam}
            />,
            // filterDropdown: (props) => <TextFilter
            //     name='route'
            //     {...props}
            //     actionRef={actionRef}
            //     setSearchParam={setSearchParam}
            // />,
        },
        {
            title: '页面组件',
@@ -243,16 +243,16 @@
                const type = typeMap[record.type]
                return <Tag color={type.color}>{type.text}</Tag>
            },
            filterDropdown: (props) => <SelectFilter
                name='type'
                {...props}
                actionRef={actionRef}
                setSearchParam={setSearchParam}
                data={[
                    { label: '菜单', value: 0 },
                    { label: '按钮', value: 1 },
                ]}
            />,
            // filterDropdown: (props) => <SelectFilter
            //     name='type'
            //     {...props}
            //     actionRef={actionRef}
            //     setSearchParam={setSearchParam}
            //     data={[
            //         { label: '菜单', value: 0 },
            //         { label: '按钮', value: 1 },
            //     ]}
            // />,
        },
        {
            title: '权限标识',
@@ -260,12 +260,12 @@
            valueType: 'text',
            hidden: false,
            width: 140,
            filterDropdown: (props) => <TextFilter
                name='authority'
                {...props}
                actionRef={actionRef}
                setSearchParam={setSearchParam}
            />,
            // filterDropdown: (props) => <TextFilter
            //     name='authority'
            //     {...props}
            //     actionRef={actionRef}
            //     setSearchParam={setSearchParam}
            // />,
        },
        {
            title: '菜单图标',
@@ -310,16 +310,16 @@
                const status = statusMap[record.status]
                return <Tag color={status.color}>{status.text}</Tag>
            },
            filterDropdown: (props) => <SelectFilter
                name='status'
                {...props}
                actionRef={actionRef}
                setSearchParam={setSearchParam}
                data={[
                    { label: '正常', value: 1 },
                    { label: '禁用', value: 0 },
                ]}
            />,
            // filterDropdown: (props) => <SelectFilter
            //     name='status'
            //     {...props}
            //     actionRef={actionRef}
            //     setSearchParam={setSearchParam}
            //     data={[
            //         { label: '正常', value: 1 },
            //         { label: '禁用', value: 0 },
            //     ]}
            // />,
        },
        {
            title: '添加时间',
@@ -354,12 +354,12 @@
            valueType: 'text',
            hidden: false,
            width: 140,
            filterDropdown: (props) => <DatetimeRangeFilter
                name='updateTime'
                {...props}
                actionRef={actionRef}
                setSearchParam={setSearchParam}
            />,
            // filterDropdown: (props) => <DatetimeRangeFilter
            //     name='updateTime'
            //     {...props}
            //     actionRef={actionRef}
            //     setSearchParam={setSearchParam}
            // />,
        },
        {
            title: '修改人员',
@@ -367,13 +367,13 @@
            valueType: 'text',
            hidden: false,
            width: 140,
            filterDropdown: (props) => <LinkFilter
                name='updateBy'
                major='user'
                {...props}
                actionRef={actionRef}
                setSearchParam={setSearchParam}
            />,
            // filterDropdown: (props) => <LinkFilter
            //     name='updateBy'
            //     major='user'
            //     {...props}
            //     actionRef={actionRef}
            //     setSearchParam={setSearchParam}
            // />,
        },
        {
            title: '备注',
zy-asrs-flow/src/pages/system/user/index.jsx
@@ -121,12 +121,8 @@
    const [deptExpandedKeys, setDeptExpandedKeys] = useState([]);
    const [pwdModalVisible, setPwdModalVisible] = useState(false);
    useEffect(() => {
        const handleResize = () => setBoxHeight(window.innerHeight - 368);
        window.addEventListener('resize', handleResize);
        handleResize();
        Http.doPostPromise('/api/dept/tree', {}, (res) => {
    const loadDeptTreeData = (param) => {
        Http.doPostPromise('/api/dept/tree', param, (res) => {
            const rootMenu = { id: 0, name: '全部', value: 0, children: [] };
            rootMenu.children = res.data;
            // const treeData = transformTreeData([rootMenu]);
@@ -135,6 +131,14 @@
            const treeAllKeys = getTreeAllKeys(treeData);
            setDeptExpandedKeys(treeAllKeys);
        })
    }
    useEffect(() => {
        const handleResize = () => setBoxHeight(window.innerHeight - 368);
        window.addEventListener('resize', handleResize);
        handleResize();
        loadDeptTreeData();
        return () => window.removeEventListener('resize', handleResize);
    }, []);
@@ -485,7 +489,9 @@
                            placeholder="Search"
                            onChange={(e) => {
                                const { value } = e.target;
                                console.log(value);
                                loadDeptTreeData({
                                    condition: value
                                })
                            }}
                        />
                        <div style={{height: 'calc(100vh - 350px)', overflowY: 'auto' }}>
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/system/controller/DeptController.java
@@ -1,7 +1,6 @@
package com.zy.asrs.wcs.system.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zy.asrs.framework.common.Cools;
import com.zy.asrs.framework.common.R;
@@ -45,10 +44,14 @@
    @PreAuthorize("hasAuthority('system:dept:list')")
    @PostMapping("/dept/tree")
    public R tree(@RequestBody Map<String, Object> map) {
        PageParam<Dept, BaseParam> param = new PageParam<>(buildParam(map, BaseParam.class), Dept.class);
        QueryWrapper<Dept> wrapper = param.buildWrapper(true, queryWrapper -> queryWrapper.orderByAsc("sort"));
        List<Dept> deptList = deptService.list(wrapper);
        return R.ok().add(Utils.toTreeData(deptList, 0L, Dept::getParentId, Dept::getId, Dept::setChildren));
//        PageParam<Dept, BaseParam> param = new PageParam<>(buildParam(map, BaseParam.class), Dept.class);
//        QueryWrapper<Dept> wrapper = param.buildWrapper(true, queryWrapper -> queryWrapper.orderByAsc("sort"));
        List<Dept> deptList = deptService.list(new LambdaQueryWrapper<Dept>().orderByAsc(Dept::getSort));
        List<Dept> treeData = Utils.toTreeData(deptList, 0L, Dept::getParentId, Dept::getId, Dept::setChildren);
        if (!Cools.isEmpty(map.get("condition"))) {
            treeData = Utils.treeRemove(deptList, String.valueOf(map.get("condition")), Dept::getName, Dept::getChildren, Dept::setChildren);
        }
        return R.ok().add(treeData);
    }
    @PreAuthorize("hasAuthority('system:dept:list')")
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/system/controller/MenuController.java
@@ -1,7 +1,6 @@
package com.zy.asrs.wcs.system.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zy.asrs.framework.common.Cools;
import com.zy.asrs.framework.common.R;
@@ -45,10 +44,16 @@
    @PreAuthorize("hasAuthority('system:menu:list')")
    @PostMapping("/menu/tree")
    public R tree(@RequestBody Map<String, Object> map) {
        PageParam<Menu, BaseParam> param = new PageParam<>(buildParam(map, BaseParam.class), Menu.class);
        QueryWrapper<Menu> wrapper = param.buildWrapper(true, queryWrapper -> queryWrapper.orderByAsc("sort"));
        List<Menu> menus = menuService.list(wrapper);
        return R.ok().add(Utils.toTreeData(menus, 0L, Menu::getParentId, Menu::getId, Menu::setChildren));
//        PageParam<Menu, BaseParam> param = new PageParam<>(buildParam(map, BaseParam.class), Menu.class);
//        QueryWrapper<Menu> wrapper = param.buildWrapper(true, queryWrapper -> queryWrapper.orderByAsc("sort"));
//        List<Menu> menus = menuService.list(wrapper);
//        return R.ok().add(Utils.toTreeData(menus, 0L, Menu::getParentId, Menu::getId, Menu::setChildren));
        List<Menu> menuList = menuService.list(new LambdaQueryWrapper<Menu>().orderByAsc(Menu::getSort));
        List<Menu> treeData = Utils.toTreeData(menuList, 0L, Menu::getParentId, Menu::getId, Menu::setChildren);
        if (!Cools.isEmpty(map.get("condition"))) {
            treeData = Utils.treeRemove(menuList, String.valueOf(map.get("condition")), Menu::getName, Menu::getChildren, Menu::setChildren);
        }
        return R.ok().add(treeData);
    }
    @PreAuthorize("hasAuthority('system:menu:list')")
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/utils/Utils.java
@@ -10,6 +10,7 @@
import java.util.Optional;
import java.util.function.BiConsumer;
import java.util.function.Function;
import java.util.function.Predicate;
/**
 * Created by vincent on 2023/3/14
@@ -48,6 +49,45 @@
        return result;
    }
//    public static <T> List<T> treeRemove(List<T> data, String condition,
//                                         Function<? super T, ? extends String> fetcher,
//                                         Function<T, List<T>> childrenGetter,
//                                         BiConsumer<T, List<T>> childrenSetter) {
//        List<T> result = new ArrayList<>();
//        for (T node : data) {
//            List<T> children = childrenGetter.apply(node);
//
//            if (children != null && !children.isEmpty()) {
//                List<T> newChildren = treeRemove(children, condition, fetcher, childrenGetter, childrenSetter);
//                childrenSetter.accept(node, newChildren);
//            }
//
//            if (fetcher.apply(node).contains(condition)) {
//                result.add(node);
//            }
//        }
//        return result;
//    }
    public static <T> List<T> treeRemove(List<T> data, String condition,
                                         Function<? super T, ? extends String> fetcher,
                                         Function<T, List<T>> childrenGetter,
                                         BiConsumer<T, List<T>> childrenSetter) {
        List<T> result = new ArrayList<>();
        Predicate<T> predicate = node -> fetcher.apply(node).contains(condition);
        for (T node : data) {
            List<T> children = childrenGetter.apply(node);
            if (children != null && !children.isEmpty()) {
                List<T> newChildren = treeRemove(children, condition, fetcher, childrenGetter, childrenSetter);
                childrenSetter.accept(node, newChildren);
            }
            if (predicate.test(node)) {
                result.add(node);
            }
        }
        return result;
    }
    /**
     * 数组倒序
     * @param bytes