自动化立体仓库 - WMS系统
#
whycq
2024-06-21 64d240185c5b7f7507d8217f50950af37201ab97
#
1个文件已添加
4个文件已修改
352 ■■■■■ 已修改文件
src/main/java/com/zy/common/web/AuthController.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/web/BaseController.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/order/order.js 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/role/rolePower.js 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/pdaResource/pdaResource.html 309 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/web/AuthController.java
@@ -25,6 +25,7 @@
import javax.servlet.http.HttpServletResponse;
import java.util.*;
import java.util.stream.Collectors;
/**
 * Created by vincent on 2019-07-30
@@ -283,6 +284,7 @@
        if (!Cools.isEmpty(powers)){
            List<PowerDto> dtos = JSON.parseArray(powers, PowerDto.class);
            for (PowerDto dto : dtos) {
                if (isNumber(dto.getTwo())) {
                Resource resource = resourceService.selectOne(new EntityWrapper<Resource>().eq("id", dto.getTwo()).eq("level", 2));
                if (!Cools.isEmpty(resource)) {
                    // 校验上级权限
@@ -296,6 +298,7 @@
                    roleResource.setRoleId(roleId);
                    roleResource.setResourceId(resource.getId());
                    roleResourceService.insert(roleResource);
                    }
                } else {
                    Permission permission = permissionService.selectOne(new EntityWrapper<Permission>().eq("action", dto.getTwo()));
                    if (!Cools.isEmpty(permission)){
@@ -312,7 +315,7 @@
                        if (leaderId != null) {
                            RoleResource roleResource = roleResourceService.selectOne(new EntityWrapper<RoleResource>().eq("role_id", leaderId).eq("resource_id", resource1.getId()));
                            if (null == roleResource) {
                                throw new CoolException(resource.getName().concat("的").concat(resource1.getName().concat("无法授权给").concat(role.getName())));
                                throw new CoolException(resource1.getName().concat("无法授权给").concat(role.getName()));
                            }
                        }
                        RoleResource roleResource = new RoleResource();
@@ -385,4 +388,23 @@
        return R.ok("激活成功,有效期至"+DateUtils.convert(exprTime));
    }
    @RequestMapping("/menu/pda/auth")
    @ManagerAuth
    public R menuPda(){
        Long userId = getUserId();
        List<RolePermission> rolePermissions;
        if (userId == 9527L) {
            rolePermissions = rolePermissionService.selectList(new EntityWrapper<>());
        } else {
            Long roleId = getUser().getRoleId();
            rolePermissions = rolePermissionService.selectList(new EntityWrapper<RolePermission>().eq("role_id", roleId));
        }
        if (Cools.isEmpty(rolePermissions)) {
            return R.ok();
        }
        List<Long> collect = rolePermissions.stream().map(RolePermission::getPermissionId).distinct().collect(Collectors.toList());
        List<Permission> permissions = permissionService.selectBatchIds(collect);
        return R.ok().add(permissions);
    }
}
src/main/java/com/zy/common/web/BaseController.java
@@ -205,4 +205,12 @@
        }
    }
    public static boolean isNumber(String str){
        for (int i = str.length();--i>=0;){
            if (!Character.isDigit(str.charAt(i))){
                return false;
            }
        }
        return true;
    }
}
src/main/webapp/static/js/order/order.js
@@ -44,6 +44,9 @@
        cellMinWidth: 100,
        cols: [[
            {type: 'numbers'},
            {field: 'defNumber', align: 'center', title: '操作系统号', hide: false, width: 120},
            {field: '操作单据', align: 'center', title: '操作单据', hide: true},
            {field: '操作类型', align: 'center', title: '操作类型', hide: true},
            {field: 'orderNo', title: '单据编号', templet: '#orderNoTpl'},
            //{field: 'itemName', align: 'center', title: '核算主体'},
            {field: 'docType$', align: 'center', title: '单据类型'},
@@ -51,6 +54,7 @@
            //{field: 'postFee', align: 'center', title: '总数量',  minWidth: 130, width: 130},
            {align: 'center', title: '明细', toolbar: '#tbLook', minWidth: 160, width: 160},
            {field: 'createTime$', title: '创建时间'},
            {field: 'shipCode', align: 'center',title: '制单人', hide: false},
            {field: 'settle$', align: 'center', title: '状态', templet: '#settleTpl',  minWidth: 160, width: 160},
            {field: 'memo', align: 'center',title: '备注', hide: true},
            {field: 'orderTime', align: 'center',title: '单据日期', hide: true},
@@ -58,7 +62,7 @@
            {field: 'tel', align: 'center',title: '仓库', hide: true},
            {field: 'operMemb', align: 'center',title: '出入库类别', hide: true},
            {field: 'salesman', align: 'center',title: '部门', hide: true},
            {field: 'shipCode', align: 'center',title: '制单人', hide: true},
            {align: 'center', title: '操作', toolbar: '#operate', width: 180}
        ]],
        request: {
src/main/webapp/static/js/role/rolePower.js
@@ -39,13 +39,16 @@
    form.on('submit(save)', function () {
        var param = [];
        var checkData = tree.getChecked('powerTree');
        console.log(checkData)
        checkData.map(function (obj) {
            obj.children.map(function (resource) {
                console.log(resource)
                var childrens = [];
                if (resource.children) {
                resource.children.map(function (resource) {
                    childrens.push(resource.id);
                });
                }
                var one = {
                    'two': resource.id,
                    'three': childrens
src/main/webapp/views/pdaResource/pdaResource.html
New file
@@ -0,0 +1,309 @@
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title></title>
    <meta name="renderer" content="webkit">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
    <link rel="stylesheet" href="../../static/layui/css/layui.css" media="all">
    <link rel="stylesheet" href="../../static/css/admin.css?v=318" media="all">
    <link rel="stylesheet" href="../../static/css/cool.css" media="all">
    <link rel="stylesheet" href="../../static/css/common.css" media="all">
    <style>
        #detail {
            padding: 25px 30px 0 0;
        }
        .ew-tree-table-box {
            height: 100%;
        }
    </style>
</head>
<body>
<!-- 正文开始 -->
<div class="layui-fluid">
    <div class="layui-card">
        <div class="layui-card-body">
            <!-- 数据表格 -->
            <table id="resource"></table>
        </div>
    </div>
</div>
<script type="text/html" id="operate">
    <a class="layui-btn layui-btn-primary layui-btn-xs btn-edit" lay-event="edit">修改</a>
    <a class="layui-btn layui-btn-danger layui-btn-xs btn-del" lay-event="del">删除</a>
</script>
<!-- 表单弹窗 -->
<script type="text/html" id="editDialog">
    <form id="detail" lay-filter="detail" class="layui-form" style="margin: 0">
        <input name="id" type="hidden">
        <input name="uuid" type="hidden">
        <input name="level" type="hidden">
        <div class="layui-row">
            <div class="layui-col-md6">
                <div class="layui-form-item">
                    <label class="layui-form-label">上级菜单</label>
                    <div class="layui-input-block">
                        <div id="resourceParentSel" class="ew-xmselect-tree"></div>
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label layui-form-required">菜单编码</label>
                    <div class="layui-input-block">
                        <input name="code" placeholder="请输入菜单编码" class="layui-input" lay-vertype="tips" lay-verify="required" required="">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label layui-form-required">类型</label>
                    <div class="layui-input-block">
                        <select name="level" lay-vertype="tips" lay-verify="required" required="">
                            <option value="">请选择类型</option>
                            <option value="1">一级菜单</option>
                            <option value="2">二级菜单</option>
                            <option value="3">按钮</option>
                        </select>
                    </div>
                </div>
            </div>
            <div class="layui-col-md6">
                <div class="layui-form-item">
                    <label class="layui-form-label layui-form-required">菜单名称</label>
                    <div class="layui-input-block">
                        <input name="name" placeholder="请输入菜单名称" class="layui-input" lay-vertype="tips" lay-verify="required" required="">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">排序</label>
                    <div class="layui-input-block">
                        <input name="sort" placeholder="请输入排序" class="layui-input" lay-verify="number">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label layui-form-required">状态</label>
                    <div class="layui-input-block">
                        <select name="status" lay-vertype="tips" lay-verify="required" required="">
                            <option value="">请选择状态</option>
                            <option value="1">正常</option>
                            <option value="0">禁用</option>
                        </select>
                    </div>
                </div>
            </div>
        </div>
        <hr class="layui-bg-gray">
        <div class="layui-form-item text-right">
            <button class="layui-btn" lay-filter="editSubmit" lay-submit="">保存</button>
            <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">取消</button>
        </div>
    </form>
</script>
<script type="text/html" id="typeTpl">
    {{# if( d.level === 1 ){ }}
    <span name="level" class="layui-badge layui-badge-green">菜单</span>
    {{# } else if(d.level === 2){ }}
    <span name="level" class="layui-badge layui-badge-green">菜单</span>
    {{# } else if(d.level === 3){ }}
    <span name="level" class="layui-badge layui-badge-gray">按钮</span>
    {{# } }}
</script>
<script type="text/javascript" src="../../static/js/jquery/jquery-3.3.1.min.js"></script>
<script type="text/javascript" src="../../static/layui/layui.js" charset="utf-8"></script>
<script type="text/javascript" src="../../static/js/common.js" charset="utf-8"></script>
<script type="text/javascript" src="../../static/js/cool.js" charset="utf-8"></script>
<script>
    layui.config({
        base: baseUrl + "/static/layui/lay/modules/"
    }).use(['form','treeTable', 'admin', 'xmSelect'], function() {
        var $ = layui.jquery;
        var layer = layui.layer;
        var form = layui.form;
        var admin = layui.admin;
        var treeTable = layui.treeTable;
        var xmSelect = layui.xmSelect;
        var tbDataList = [];
        var insTb = treeTable.render({
            elem: '#resource',
            url: baseUrl+'/resource/tree/auth',
            headers: {token: localStorage.getItem('token')},
            height: 'full-200',
            toolbar: ['<p>',
                '<button lay-event="add" class="layui-btn layui-btn-sm icon-btn"><i class="layui-icon">&#xe654;</i>添加</button>&nbsp;',
                '<button lay-event="del" class="layui-btn layui-btn-sm layui-btn-danger icon-btn"><i class="layui-icon">&#xe640;</i>删除</button>',
                '</p>'].join(''),
            tree: {
                iconIndex: 2,           // 折叠图标显示在第几列
                isPidData: true,        // 是否是id、pid形式数据
                idName: 'id',           // id字段名称
                pidName: 'resourceId'     // pid字段名称
            },
            cols: [[
                {type: 'checkbox', fixed: 'left'}
                ,{field: 'id', title: 'ID', sort: true,align: 'center', fixed: 'left', width: 80, hide: true}
                ,{field: 'name', align: 'left',title: '菜单名称'}
                ,{field: 'code', align: 'center',title: '菜单编码'}
                // ,{field: 'resourceName', align: 'center',title: '父级菜单'}
                // ,{field: 'level$', align: 'center',title: '菜单等级'}
                ,{field: 'type', align: 'center',title: '类型', templet: '#typeTpl', width: 120}
                ,{field: 'sort', align: 'center',title: '排序'}
                ,{fixed: 'right', title:'操作', align: 'center', toolbar: '#operate', width:150}
            ]],
            done: function (data) {
                $('.ew-tree-table-box').css('height', '100%');
                // insTb.expandAll();
                tbDataList = data;
                limit();
            }
        });
        /* 表格头工具栏点击事件 */
        treeTable.on('toolbar(resource)', function (obj) {
            if (obj.event === 'add') { // 添加
                showEditModel();
            } else if (obj.event === 'del') { // 删除
                var checkRows = insTb.checkStatus();
                if (checkRows.length === 0) {
                    layer.msg('请选择要删除的数据', {icon: 2});
                    return;
                }
                var ids = checkRows.map(function (d) {
                    if (!d.LAY_INDETERMINATE) {
                        return d.id;
                    } else {
                        return null;
                    }
                });
                doDel({ids: ids});
            }
        });
        /* 表格操作列点击事件 */
        treeTable.on('tool(resource)', function (obj) {
            if (obj.event === 'edit') { // 修改
                showEditModel(obj.data);
            } else if (obj.event === 'del') { // 删除
                doDel(obj);
            }
        });
        /* 显示表单弹窗 */
        function showEditModel(mData) {
            admin.open({
                type: 1,
                area: '600px',
                title: (mData ? '修改' : '添加') + '权限',
                content: $('#editDialog').html(),
                success: function (layero, dIndex) {
                    // 回显表单数据
                    form.val('detail', mData);
                    // 表单提交事件
                    form.on('submit(editSubmit)', function (data) {
                        data.field.resourceId = insXmSel.getValue('valueStr');
                        var loadIndex = layer.load(2);
                        $.ajax({
                            url: baseUrl+"/resource/"+(mData?'update':'add')+"/auth",
                            headers: {'token': localStorage.getItem('token')},
                            data: data.field,
                            method: 'POST',
                            success: function (res) {
                                layer.close(loadIndex);
                                if (res.code === 200){
                                    layer.close(dIndex);
                                    layer.msg(res.msg, {icon: 1});
                                    insTb.refresh();
                                    setTimeout(function () {
                                        insTb.expand(data.field.resourceId);
                                    }, 200)
                                } else if (res.code === 403){
                                    top.location.href = baseUrl+"/";
                                }else {
                                    layer.msg(res.msg, {icon: 2});
                                }
                            }
                        })
                        return false;
                    });
                    // 渲染下拉树
                    var insXmSel = xmSelect.render({
                        el: '#resourceParentSel',
                        height: '250px',
                        data: insTb.options.data,
                        initValue: mData&&mData.resourceId!=null ? [mData.resourceId] : [],
                        model: {label: {type: 'text'}},
                        prop: {
                            name: 'name',
                            value: 'id'
                        },
                        radio: true,
                        clickClose: true,
                        tree: {
                            show: true,
                            indent: 15,
                            strict: false,
                            expandedKeys: false
                        }
                    });
                    // 弹窗不出现滚动条
                    $(layero).children('.layui-layer-content').css('overflow', 'visible');
                    layui.form.render('select');
                }
            });
        }
        /* 删除 */
        function doDel(obj) {
            layer.confirm('确定要删除选中数据吗?', {
                skin: 'layui-layer-admin',
                shade: .1
            }, function (i) {
                layer.close(i);
                var loadIndex = layer.load(2);
                var ids;
                if (obj.data) {
                    ids = [];
                    ids[0] = obj.data.id;
                } else {
                    ids = obj.ids;
                }
                $.ajax({
                    url: baseUrl+"/resource/delete/auth",
                    headers: {'token': localStorage.getItem('token')},
                    data: {ids: ids},
                    method: 'POST',
                    success: function (res) {
                        layer.close(loadIndex);
                        if (res.code === 200){
                            layer.msg(res.msg, {icon: 1});
                            insTb.refresh();
                        } else if (res.code === 403){
                            top.location.href = baseUrl+"/";
                        } else {
                            layer.msg(res.msg, {icon: 2});
                        }
                    }
                })
            });
        }
    });
</script>
</body>
</html>