ソースを参照

优化权限组选择权限问题

wuxw 6 年 前
コミット
2bc6d9750e

+ 65 - 41
OrderService/src/main/java/com/java110/order/smo/impl/PrivilegeSMOImpl.java

@@ -1,5 +1,6 @@
 package com.java110.order.smo.impl;
 
+import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.java110.utils.cache.MappingCache;
 import com.java110.utils.constant.MappingConstant;
@@ -34,13 +35,13 @@ public class PrivilegeSMOImpl implements IPrivilegeSMO {
     @Override
     public ResponseEntity<String> saveUserDefaultPrivilege(String privilegeInfo) {
 
-        Assert.isJsonObject(privilegeInfo,"请求报文不是有效的json格式");
+        Assert.isJsonObject(privilegeInfo, "请求报文不是有效的json格式");
 
-        Assert.jsonObjectHaveKey(privilegeInfo,"userId","请求报文中未包含userId节点");
+        Assert.jsonObjectHaveKey(privilegeInfo, "userId", "请求报文中未包含userId节点");
 
-        Assert.jsonObjectHaveKey(privilegeInfo,"storeTypeCd","请求报文中未包含storeTypeCd节点");
+        Assert.jsonObjectHaveKey(privilegeInfo, "storeTypeCd", "请求报文中未包含storeTypeCd节点");
 
-        Assert.jsonObjectHaveKey(privilegeInfo,"userFlag","请求报文中未包含userFlag节点");
+        Assert.jsonObjectHaveKey(privilegeInfo, "userFlag", "请求报文中未包含userFlag节点");
 
 
         JSONObject privilegeObj = JSONObject.parseObject(privilegeInfo);
@@ -48,14 +49,14 @@ public class PrivilegeSMOImpl implements IPrivilegeSMO {
         String storeTypeCd = privilegeObj.getString("storeTypeCd");
 
         String privilegeDomain = "admin".equals(privilegeObj.getString("userFlag"))
-                ?MappingConstant.DOMAIN_DEFAULT_PRIVILEGE_ADMIN:MappingConstant.DOMAIN_DEFAULT_PRIVILEGE;
+                ? MappingConstant.DOMAIN_DEFAULT_PRIVILEGE_ADMIN : MappingConstant.DOMAIN_DEFAULT_PRIVILEGE;
 
-        String defaultPrivilege = MappingCache.getValue(privilegeDomain,storeTypeCd);
+        String defaultPrivilege = MappingCache.getValue(privilegeDomain, storeTypeCd);
 
-        Assert.hasLength(defaultPrivilege,"在c_mapping 表中未配置商户类型为"+storeTypeCd+" 的默认权限组");
-        privilegeObj.put("pId",defaultPrivilege);
+        Assert.hasLength(defaultPrivilege, "在c_mapping 表中未配置商户类型为" + storeTypeCd + " 的默认权限组");
+        privilegeObj.put("pId", defaultPrivilege);
 
-        if(privilegeDAOImpl.saveUserDefaultPrivilege(privilegeObj)){
+        if (privilegeDAOImpl.saveUserDefaultPrivilege(privilegeObj)) {
             return new ResponseEntity<String>("成功", HttpStatus.OK);
         }
 
@@ -64,17 +65,18 @@ public class PrivilegeSMOImpl implements IPrivilegeSMO {
 
     /**
      * 删除用户权限
+     *
      * @param privilegeInfo
      * @return
      */
     @Override
     public ResponseEntity<String> deleteUserAllPrivilege(String privilegeInfo) {
-        Assert.isJsonObject(privilegeInfo,"请求报文不是有效的json格式");
+        Assert.isJsonObject(privilegeInfo, "请求报文不是有效的json格式");
 
-        Assert.jsonObjectHaveKey(privilegeInfo,"userId","请求报文中未包含userId节点");
+        Assert.jsonObjectHaveKey(privilegeInfo, "userId", "请求报文中未包含userId节点");
 
         JSONObject privilegeObj = JSONObject.parseObject(privilegeInfo);
-        if(privilegeDAOImpl.deleteUserAllPrivilege(privilegeObj)){
+        if (privilegeDAOImpl.deleteUserAllPrivilege(privilegeObj)) {
             return new ResponseEntity<String>("成功", HttpStatus.OK);
         }
 
@@ -84,18 +86,18 @@ public class PrivilegeSMOImpl implements IPrivilegeSMO {
     @Override
     public ResponseEntity<String> savePrivilegeGroup(String privilegeGroupInfo) {
 
-        Assert.isJsonObject(privilegeGroupInfo,"请求报文不是有效的json格式");
+        Assert.isJsonObject(privilegeGroupInfo, "请求报文不是有效的json格式");
 
-        Assert.jsonObjectHaveKey(privilegeGroupInfo,"name","请求报文中未包含name节点");
+        Assert.jsonObjectHaveKey(privilegeGroupInfo, "name", "请求报文中未包含name节点");
 
-        Assert.jsonObjectHaveKey(privilegeGroupInfo,"storeId","请求报文中未包含storeId节点");
+        Assert.jsonObjectHaveKey(privilegeGroupInfo, "storeId", "请求报文中未包含storeId节点");
 
-        Assert.jsonObjectHaveKey(privilegeGroupInfo,"storeTypeCd","请求报文中未包含storeTypeCd节点");
+        Assert.jsonObjectHaveKey(privilegeGroupInfo, "storeTypeCd", "请求报文中未包含storeTypeCd节点");
         JSONObject privilegeGroupObj = JSONObject.parseObject(privilegeGroupInfo);
 
-        privilegeGroupObj.put("pgId",GenerateCodeFactory.getPgId());
+        privilegeGroupObj.put("pgId", GenerateCodeFactory.getPgId());
 
-        if(privilegeDAOImpl.savePrivilegeGroup(privilegeGroupObj)){
+        if (privilegeDAOImpl.savePrivilegeGroup(privilegeGroupObj)) {
             return new ResponseEntity<String>("成功", HttpStatus.OK);
         }
 
@@ -104,26 +106,27 @@ public class PrivilegeSMOImpl implements IPrivilegeSMO {
 
     /**
      * 删除权限组
+     *
      * @param privilegeGroupInfo
      * @return
      */
     @Override
     public ResponseEntity<String> deletePrivilegeGroup(String privilegeGroupInfo) {
 
-        Assert.isJsonObject(privilegeGroupInfo,"请求报文不是有效的json格式");
+        Assert.isJsonObject(privilegeGroupInfo, "请求报文不是有效的json格式");
 
-        Assert.jsonObjectHaveKey(privilegeGroupInfo,"pgId","请求报文中未包含pgId节点");
+        Assert.jsonObjectHaveKey(privilegeGroupInfo, "pgId", "请求报文中未包含pgId节点");
 
-        Assert.jsonObjectHaveKey(privilegeGroupInfo,"storeId","请求报文中未包含storeId节点");
+        Assert.jsonObjectHaveKey(privilegeGroupInfo, "storeId", "请求报文中未包含storeId节点");
 
-        Assert.jsonObjectHaveKey(privilegeGroupInfo,"storeTypeCd","请求报文中未包含storeTypeCd节点");
+        Assert.jsonObjectHaveKey(privilegeGroupInfo, "storeTypeCd", "请求报文中未包含storeTypeCd节点");
         JSONObject privilegeGroupObj = JSONObject.parseObject(privilegeGroupInfo);
         //删除权限组
         privilegeDAOImpl.deletePrivilegeGroup(privilegeGroupObj);
 
         List<Map> privileges = privilegeDAOImpl.queryPrivilegeRel(privilegeGroupObj);
 
-        if(privileges !=null && privileges.size()>0) {
+        if (privileges != null && privileges.size() > 0) {
             //删除权限组和权限关系
             privilegeDAOImpl.deletePrivilegeRel(privilegeGroupObj);
         }
@@ -139,22 +142,38 @@ public class PrivilegeSMOImpl implements IPrivilegeSMO {
         Assert.jsonObjectHaveKey(privilegeInfo, "pgId", "请求报文中未包含pgId节点");
 
         Assert.jsonObjectHaveKey(privilegeInfo, "storeId", "请求报文中未包含storeId节点");
-
-        Assert.jsonObjectHaveKey(privilegeInfo, "pId", "请求报文中未包含pId节点");
         JSONObject privilegeObj = JSONObject.parseObject(privilegeInfo);
+        //Assert.jsonObjectHaveKey(privilegeInfoObj,"pId","请求报文中未包含权限ID 节点");
+        if (!privilegeObj.containsKey("pIds") || privilegeObj.getJSONArray("pIds").size() < 1) {
+            throw new IllegalArgumentException("请求报文中未包含权限");
+        }
+
         //根据权限组ID和商户ID查询是否有数据
         List<Map> privilegeGroups = privilegeDAOImpl.queryPrivilegeGroup(privilegeObj);
         Assert.isNotNull(privilegeGroups, "当前没有权限操作权限组pgId = " + privilegeObj.getString("pgId"));
 
-        if (!privilegeDAOImpl.addPrivilegeRel(privilegeObj)) {
-            return new ResponseEntity<String>("添加权限失败", HttpStatus.INTERNAL_SERVER_ERROR);
+        JSONArray pIds = privilegeObj.getJSONArray("pIds");
+        int errorCount = 0;
+        for (int pIdIndex = 0; pIdIndex < pIds.size(); pIdIndex++) {
+            try {
+                if (!privilegeDAOImpl.addPrivilegeRel(privilegeObj)) {
+                    errorCount++;
+                }
+
+            } catch (Exception e) {
+                logger.error("保存权限关系失败", e);
+                errorCount++;
+            }
         }
 
-        return new ResponseEntity<String>("成功", HttpStatus.OK);
+        JSONObject paramOut = new JSONObject();
+        paramOut.put("success", pIds.size() - errorCount);
+        paramOut.put("error", errorCount);
+
+        return new ResponseEntity<String>(paramOut.toJSONString(), HttpStatus.OK);
     }
 
     /**
-     *
      * @param privilegeInfo
      * @return
      */
@@ -183,6 +202,7 @@ public class PrivilegeSMOImpl implements IPrivilegeSMO {
 
     /**
      * 员工添加权限或权限组
+     *
      * @param privilegeInfo
      * @return
      */
@@ -192,7 +212,7 @@ public class PrivilegeSMOImpl implements IPrivilegeSMO {
         JSONObject privilegeObj = validateData(privilegeInfo);
         //根据权限组ID和商户ID查询是否有数据
         String pFlag = privilegeObj.getString("pFlag");//权限组
-        privilegeObj.put("privilegeFlag","1".equals(pFlag)?"1":"0");
+        privilegeObj.put("privilegeFlag", "1".equals(pFlag) ? "1" : "0");
         List<Map> privilegeGroups = privilegeDAOImpl.queryUserPrivilege(privilegeObj);
         Assert.listIsNull(privilegeGroups, "已经存在该权限无需多次添加" + privilegeInfo);
 
@@ -205,6 +225,7 @@ public class PrivilegeSMOImpl implements IPrivilegeSMO {
 
     /**
      * 删除员工权限
+     *
      * @param privilegeInfo
      * @return
      */
@@ -213,7 +234,7 @@ public class PrivilegeSMOImpl implements IPrivilegeSMO {
         JSONObject privilegeObj = validateDeleteStaffPrivilegeData(privilegeInfo);
         //根据权限组ID和商户ID查询是否有数据
         String pFlag = privilegeObj.getString("pFlag");//权限组
-        privilegeObj.put("privilegeFlag","1".equals(pFlag)?"1":"0");
+        privilegeObj.put("privilegeFlag", "1".equals(pFlag) ? "1" : "0");
         List<Map> privilegeGroups = privilegeDAOImpl.queryUserPrivilege(privilegeObj);
         Assert.isNotNull(privilegeGroups, "不存在该权限" + privilegeInfo);
 
@@ -226,6 +247,7 @@ public class PrivilegeSMOImpl implements IPrivilegeSMO {
 
     /**
      * 数据校验
+     *
      * @param privilegeInfo
      * @return
      */
@@ -245,7 +267,7 @@ public class PrivilegeSMOImpl implements IPrivilegeSMO {
 
         JSONObject privilegeObj = JSONObject.parseObject(privilegeInfo);
         String pFlag = privilegeObj.getString("pFlag");//权限组
-        if("1".equals(pFlag)){
+        if ("1".equals(pFlag)) {
             validatePrivilegeGroup(privilegeObj);
             return privilegeObj;
         }
@@ -269,7 +291,7 @@ public class PrivilegeSMOImpl implements IPrivilegeSMO {
 
         JSONObject privilegeObj = JSONObject.parseObject(privilegeInfo);
         String pFlag = privilegeObj.getString("pFlag");//权限组
-        if("1".equals(pFlag)){
+        if ("1".equals(pFlag)) {
             validatePrivilegeGroup(privilegeObj);
             return privilegeObj;
         }
@@ -279,28 +301,30 @@ public class PrivilegeSMOImpl implements IPrivilegeSMO {
 
     /**
      * 权限组数据校验
+     *
      * @param privilegeObj
      */
-    private void validatePrivilegeGroup(JSONObject privilegeObj){
+    private void validatePrivilegeGroup(JSONObject privilegeObj) {
 
         //判断当前权限组是否隶属于 当前商户
-        privilegeObj.put("pgId",privilegeObj.getString("pId"));
+        privilegeObj.put("pgId", privilegeObj.getString("pId"));
         List<Map> privilegeGroups = privilegeDAOImpl.queryPrivilegeGroup(privilegeObj);
-        if(privilegeGroups == null || privilegeGroups.size() == 0){
-            throw new SMOException(1999,"当前没有权限操作该权限组"+privilegeGroups.toString());
+        if (privilegeGroups == null || privilegeGroups.size() == 0) {
+            throw new SMOException(1999, "当前没有权限操作该权限组" + privilegeGroups.toString());
         }
     }
 
     /**
      * 权限数据校验
+     *
      * @param privilegeObj
      */
-    private void validatePrivilege(JSONObject privilegeObj){
+    private void validatePrivilege(JSONObject privilegeObj) {
 
-        privilegeObj.put("domain",privilegeObj.getString("storeTypeCd"));
+        privilegeObj.put("domain", privilegeObj.getString("storeTypeCd"));
         List<Map> privileges = privilegeDAOImpl.queryPrivilege(privilegeObj);
-        if(privileges == null || privileges.size() == 0){
-            throw new SMOException(1999,"当前没有权限操作该权限"+privileges.toString());
+        if (privileges == null || privileges.size() == 0) {
+            throw new SMOException(1999, "当前没有权限操作该权限" + privileges.toString());
         }
     }
 

+ 4 - 1
WebService/src/main/java/com/java110/web/smo/impl/PrivilegeServiceSMOImpl.java

@@ -196,7 +196,10 @@ public class PrivilegeServiceSMOImpl extends BaseComponentSMO implements IPrivil
         JSONObject privilegeInfoObj = JSONObject.parseObject(pd.getReqData());
 
         Assert.jsonObjectHaveKey(privilegeInfoObj,"pgId","请求报文中未包含权限组ID 节点");
-        Assert.jsonObjectHaveKey(privilegeInfoObj,"pId","请求报文中未包含权限ID 节点");
+        //Assert.jsonObjectHaveKey(privilegeInfoObj,"pId","请求报文中未包含权限ID 节点");
+        if(!privilegeInfoObj.containsKey("pIds") || privilegeInfoObj.getJSONArray("pIds").size() <1){
+            throw new IllegalArgumentException("请求报文中未包含权限");
+        }
 
         ResponseEntity<String> storeInfo = super.getStoreInfo(pd,restTemplate);
 

+ 15 - 9
WebService/src/main/resources/components/privilegePackage/add-privilege/addPrivilege.html

@@ -29,28 +29,34 @@
                                     <table class="table table-striped">
                                         <thead>
                                         <tr>
-
+                                            <th class="text-center">
+                                                <input type="checkbox"  class="i-checks " @click="checkAll($event)" id="quan">
+                                            </th>
                                             <th>权限编码</th>
                                             <th>权限名称</th>
-                                            <th>资源路径</th>
-                                            <th>权限描述</th>
                                             <th>创建时间</th>
-                                            <th>操作</th>
                                         </tr>
                                         </thead>
                                         <tbody>
                                             <tr v-for="noAddPrivilege in addPrivilegeInfo._noAddPrivilege">
+                                                <td class="text-center">
+                                                    <input type="checkbox" class="i-checks checkItem" v-bind:value="noAddPrivilege.pId" v-model="addPrivilegeInfo.selectPrivileges" >
+                                                </td>
                                                 <td>{{noAddPrivilege.pId}}</td>
                                                 <td>{{noAddPrivilege.name}}</td>
-                                                <td>{{noAddPrivilege.resource}}</td>
-                                                <td>{{noAddPrivilege.description}}</td>
                                                 <td>{{vc.dateFormat(noAddPrivilege.createTime)}}</td>
-                                                <td>
-                                                    <button class="btn btn-primary btn-xs" v-on:click="addPrivilegeToPrivilegeGroup(noAddPrivilege)">添加</button>
-                                                </td>
                                             </tr>
                                         </tbody>
                                     </table>
+                                    <div class="ibox-content" v-if="addOrgCommunityInfo.communitys.length > 0">
+
+                                        <button class="btn btn-primary float-right" type="button" v-on:click="addPrivilegeToPrivilegeGroup()"><i
+                                                class="fa fa-check"></i>&nbsp;提交
+                                        </button>
+                                        <button type="button" class="btn btn-warning float-right" style="margin-right:20px;"
+                                                data-dismiss="modal">取消
+                                        </button>
+                                    </div>
                                 </div>
 
                         </div>

+ 44 - 3
WebService/src/main/resources/components/privilegePackage/add-privilege/addPrivilege.js

@@ -7,7 +7,20 @@
                 name:'',
                 description:'',
                 errorInfo:'',
-                _noAddPrivilege:[]
+                _noAddPrivilege:[],
+                selectPrivileges:[]
+            }
+        },
+        watch: { // 监视双向绑定的数据数组
+            checkData: {
+                handler(){ // 数据数组有变化将触发此函数
+                    if(vc.component.addPrivilegeInfo.selectPrivileges.length == vc.component.addPrivilegeInfo._noAddPrivilege.length){
+                        document.querySelector('#quan').checked = true;
+                    }else {
+                        document.querySelector('#quan').checked = false;
+                    }
+                },
+                deep: true // 深度监视
             }
         },
          _initMethod:function(){
@@ -47,10 +60,26 @@
                                 vc.component.addPrivilegeInfo.errorInfo = errInfo;
                              });
             },
-            addPrivilegeToPrivilegeGroup:function(_privilegeInfo){
+            addPrivilegeToPrivilegeGroup:function(){
 
                 vc.component.addPrivilegeInfo.errorInfo = "";
-                _privilegeInfo.pgId = vc.component.addPrivilegeInfo._currentPgId;
+                var _selectPrivileges = vc.component.addPrivilegeInfo.selectPrivileges;
+
+                if(_selectPrivileges.length < 1){
+                    vc.toast("请先选择权限");
+                    return ;
+                }
+                var _pIds = [];
+                for(var selectIndex = 0;selectIndex < _selectPrivileges.length;selectIndex ++){
+                    var _pId = {
+                        pId: _selectPrivileges[selectIndex]
+                    };
+                    _pIds.push(_pId)l
+                }
+                var _objData = {
+                    pgId:vc.component.addPrivilegeInfo._currentPgId,
+                    pIds:_pIds
+                };
                 vc.http.post(
                     'addPrivilege',
                     'addPrivilegeToPrivilegeGroup',
@@ -73,6 +102,18 @@
 
                         vc.component.addPrivilegeInfo.errorInfo = errInfo;
                      });
+            },
+            checkAll:function(e){
+                    var checkObj = document.querySelectorAll('.checkItem'); // 获取所有checkbox项
+                    if(e.target.checked){ // 判定全选checkbox的勾选状态
+                        for(var i=0;i<checkObj.length;i++){
+                            if(!checkObj[i].checked){ // 将未勾选的checkbox选项push到绑定数组中
+                                vc.component.addPrivilegeInfo.selectPrivileges.push(checkObj[i].value);
+                            }
+                        }
+                    }else { // 如果是去掉全选则清空checkbox选项绑定数组
+                        vc.component.addPrivilegeInfo.selectPrivileges = [];
+                    }
             }
         }
     });