dingxin пре 6 година
родитељ
комит
c536b85943
27 измењених фајлова са 619 додато и 154 уклоњено
  1. 1
    1
      CODE/smart-community/operate-api/src/main/java/com/community/huiju/OperateApplication.java
  2. 15
    0
      CODE/smart-community/operate-api/src/main/java/com/community/huiju/controller/SysRoleController.java
  3. 7
    0
      CODE/smart-community/operate-api/src/main/java/com/community/huiju/dao/ToSysMenuMapper.java
  4. 10
    0
      CODE/smart-community/operate-api/src/main/java/com/community/huiju/dao/ToSysRoleMapper.java
  5. 9
    0
      CODE/smart-community/operate-api/src/main/java/com/community/huiju/dao/ToSysRoleMenuMapper.java
  6. 9
    0
      CODE/smart-community/operate-api/src/main/java/com/community/huiju/service/IToSysRoleService.java
  7. 1
    1
      CODE/smart-community/operate-api/src/main/java/com/community/huiju/service/impl/ToSysMenuServiceImpl.java
  8. 57
    9
      CODE/smart-community/operate-api/src/main/java/com/community/huiju/service/impl/ToSysRoleServiceImpl.java
  9. 11
    0
      CODE/smart-community/operate-api/src/main/resources/mapper/ToSysMenuMapper.xml
  10. 10
    1
      CODE/smart-community/operate-api/src/main/resources/mapper/ToSysRoleMapper.xml
  11. 9
    0
      CODE/smart-community/operate-api/src/main/resources/mapper/ToSysRoleMenuMapper.xml
  12. 1
    1
      CODE/smart-community/property-api/src/main/java/com/community/huiju/controller/RoleController.java
  13. 48
    0
      CODE/smart-community/property-api/src/main/java/com/community/huiju/controller/SysMenuController.java
  14. 16
    0
      CODE/smart-community/property-api/src/main/java/com/community/huiju/dao/SysMenuMapper.java
  15. 72
    0
      CODE/smart-community/property-api/src/main/java/com/community/huiju/model/SysMenu.java
  16. 24
    0
      CODE/smart-community/property-api/src/main/java/com/community/huiju/service/ISysMenuService.java
  17. 75
    0
      CODE/smart-community/property-api/src/main/java/com/community/huiju/service/impl/SysMenuServiceImpl.java
  18. 5
    0
      CODE/smart-community/property-api/src/main/resources/mapper/SysMenuMapper.xml
  19. 17
    0
      VUECODE/smart-operate-manage/src/api/role.js
  20. 19
    2
      VUECODE/smart-operate-manage/src/store/modules/role.js
  21. 45
    5
      VUECODE/smart-operate-manage/src/views/account/role/add/index.vue
  22. 48
    66
      VUECODE/smart-operate-manage/src/views/account/role/edi/index.vue
  23. 4
    0
      VUECODE/smart-operate-manage/src/views/account/role/index.vue
  24. 48
    66
      VUECODE/smart-operate-manage/src/views/account/role/info/index.vue
  25. 7
    0
      VUECODE/smart-property-manage/src/api/role.js
  26. 18
    2
      VUECODE/smart-property-manage/src/store/modules/role.js
  27. 33
    0
      VUECODE/smart-property-manage/src/views/account/add/role-add.vue

+ 1
- 1
CODE/smart-community/operate-api/src/main/java/com/community/huiju/OperateApplication.java Прегледај датотеку

@@ -25,7 +25,7 @@ public class OperateApplication {
25 25
 	public HttpMessageConverters fastJsonConfigure(){
26 26
 		FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();
27 27
 		FastJsonConfig fastJsonConfig = new FastJsonConfig();
28
-		fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat);
28
+		fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat,SerializerFeature.DisableCircularReferenceDetect,SerializerFeature.WriteMapNullValue);
29 29
 		//日期格式化
30 30
 		//fastJsonConfig.setDateFormat("yyyy-MM-dd HH:mm:ss");
31 31
 		converter.setFastJsonConfig(fastJsonConfig);

+ 15
- 0
CODE/smart-community/operate-api/src/main/java/com/community/huiju/controller/SysRoleController.java Прегледај датотеку

@@ -1,6 +1,7 @@
1 1
 package com.community.huiju.controller;
2 2
 
3 3
 import com.community.commom.mode.ResponseBean;
4
+import com.community.commom.session.UserElement;
4 5
 import com.community.huiju.common.base.BaseController;
5 6
 import com.community.huiju.service.IToSysRoleService;
6 7
 import io.swagger.annotations.Api;
@@ -34,5 +35,19 @@ public class SysRoleController extends BaseController {
34 35
         return responseBean;
35 36
     }
36 37
 
38
+    @RequestMapping(value = "/role/add", method = RequestMethod.POST)
39
+    @ApiOperation(value = "添加角色", notes = "添加角色")
40
+    @ApiImplicitParams({
41
+            @ApiImplicitParam(dataTypeClass = String.class, paramType = "header", name = "X-Auth-Token", value = "Token"),
42
+            @ApiImplicitParam(dataTypeClass = String.class, paramType = "body", name = "parameter", value = "roleName角色名称;description描述;menuArray菜单id集合")
43
+    })
44
+    public ResponseBean addRole(@RequestBody String parameter,
45
+                                   HttpSession session){
46
+        ResponseBean responseBean = new ResponseBean();
47
+        UserElement userElement = getUserElement(session);
48
+        responseBean = iToSysRoleService.addRole(parameter, userElement);
49
+        return responseBean;
50
+    }
51
+
37 52
 
38 53
 }

+ 7
- 0
CODE/smart-community/operate-api/src/main/java/com/community/huiju/dao/ToSysMenuMapper.java Прегледај датотеку

@@ -27,4 +27,11 @@ public interface ToSysMenuMapper {
27 27
      * @return
28 28
      */
29 29
     List<ToSysMenu> selectParentId(@Param("parentId") Integer parentId, @Param("menuType") Integer menuType);
30
+
31
+    /**
32
+     * 批量添加 菜单
33
+     * @param menuList
34
+     * @return
35
+     */
36
+    int banchInsert (List<ToSysMenu> menuList);
30 37
 }

+ 10
- 0
CODE/smart-community/operate-api/src/main/java/com/community/huiju/dao/ToSysRoleMapper.java Прегледај датотеку

@@ -1,5 +1,6 @@
1 1
 package com.community.huiju.dao;
2 2
 
3
+import com.community.huiju.model.ToSysMenu;
3 4
 import com.community.huiju.model.ToSysRole;
4 5
 import org.apache.ibatis.annotations.Mapper;
5 6
 import org.apache.ibatis.annotations.Param;
@@ -35,4 +36,13 @@ public interface ToSysRoleMapper {
35 36
      * @return
36 37
      */
37 38
     List<ToSysRole> selectAll(@Param("roleName") String roleName);
39
+
40
+    /**
41
+     * 根据 角色名称 查询
42
+     * @param roleName
43
+     * @return
44
+     */
45
+    ToSysRole selectByRoleName(@Param("roleName") String roleName);
46
+
47
+
38 48
 }

+ 9
- 0
CODE/smart-community/operate-api/src/main/java/com/community/huiju/dao/ToSysRoleMenuMapper.java Прегледај датотеку

@@ -3,6 +3,8 @@ package com.community.huiju.dao;
3 3
 import com.community.huiju.model.ToSysRoleMenu;
4 4
 import org.apache.ibatis.annotations.Mapper;
5 5
 
6
+import java.util.List;
7
+
6 8
 @Mapper
7 9
 public interface ToSysRoleMenuMapper {
8 10
     int deleteByPrimaryKey(Integer id);
@@ -16,4 +18,11 @@ public interface ToSysRoleMenuMapper {
16 18
     int updateByPrimaryKeySelective(ToSysRoleMenu record);
17 19
 
18 20
     int updateByPrimaryKey(ToSysRoleMenu record);
21
+
22
+    /**
23
+     * 批量插入
24
+     * @param list
25
+     * @return
26
+     */
27
+    int banchInsert(List<ToSysRoleMenu> list);
19 28
 }

+ 9
- 0
CODE/smart-community/operate-api/src/main/java/com/community/huiju/service/IToSysRoleService.java Прегледај датотеку

@@ -1,6 +1,7 @@
1 1
 package com.community.huiju.service;
2 2
 
3 3
 import com.community.commom.mode.ResponseBean;
4
+import com.community.commom.session.UserElement;
4 5
 import com.community.huiju.model.ToSysRole;
5 6
 
6 7
 import java.util.List;
@@ -24,4 +25,12 @@ public interface IToSysRoleService {
24 25
      * @return
25 26
      */
26 27
     ResponseBean getAll(String parameter);
28
+
29
+    /**
30
+     * 添加角色
31
+     * @param parameter
32
+     * @param userElement 用户登录信息体
33
+     * @return
34
+     */
35
+    ResponseBean addRole(String parameter, UserElement userElement);
27 36
 }

+ 1
- 1
CODE/smart-community/operate-api/src/main/java/com/community/huiju/service/impl/ToSysMenuServiceImpl.java Прегледај датотеку

@@ -35,7 +35,7 @@ public class ToSysMenuServiceImpl implements IToSysMenuService {
35 35
     private List<ToSysMenu> getMenu (Integer parentId, Integer menuType){
36 36
         List<ToSysMenu> sysMenuList = toSysMenuMapper.selectParentId(parentId, menuType);
37 37
         if (CollectionUtils.isNotEmpty(sysMenuList)) {
38
-            sysMenuList.forEach(e -> getMenu(e.getId(), menuType));
38
+            sysMenuList.forEach(e -> e.setChildren(getMenu(e.getId(), menuType)));
39 39
         }
40 40
         return sysMenuList;
41 41
     }

+ 57
- 9
CODE/smart-community/operate-api/src/main/java/com/community/huiju/service/impl/ToSysRoleServiceImpl.java Прегледај датотеку

@@ -2,23 +2,24 @@ package com.community.huiju.service.impl;
2 2
 
3 3
 import com.alibaba.fastjson.JSONObject;
4 4
 import com.community.commom.mode.ResponseBean;
5
-import com.community.huiju.dao.TaUserMapper;
6
-import com.community.huiju.dao.ToSysRoleMapper;
7
-import com.community.huiju.dao.ToUserMapper;
8
-import com.community.huiju.model.TaUser;
9
-import com.community.huiju.model.ToSysRole;
10
-import com.community.huiju.model.ToUser;
5
+import com.community.commom.session.UserElement;
6
+import com.community.huiju.dao.*;
7
+import com.community.huiju.exception.WisdomException;
8
+import com.community.huiju.model.*;
11 9
 import com.community.huiju.service.IToSysRoleService;
12 10
 import com.github.pagehelper.Page;
13 11
 import com.github.pagehelper.PageHelper;
14 12
 import lombok.extern.slf4j.Slf4j;
15 13
 import org.springframework.beans.factory.annotation.Autowired;
16 14
 import org.springframework.stereotype.Service;
15
+import org.springframework.transaction.annotation.Transactional;
17 16
 
18
-import java.util.HashMap;
19
-import java.util.List;
20
-import java.util.Map;
17
+import java.util.*;
21 18
 
19
+/**
20
+ * 角色业务
21
+ * @author weiximei
22
+ */
22 23
 @Service("iToSysRoleService")
23 24
 @Slf4j
24 25
 public class ToSysRoleServiceImpl implements IToSysRoleService {
@@ -26,6 +27,9 @@ public class ToSysRoleServiceImpl implements IToSysRoleService {
26 27
     @Autowired
27 28
     private ToSysRoleMapper toSysRoleMapper;
28 29
 
30
+    @Autowired
31
+    private ToSysRoleMenuMapper toSysRoleMenuMapper;
32
+
29 33
     @Autowired
30 34
     private ToUserMapper toUserMapper;
31 35
 
@@ -63,4 +67,48 @@ public class ToSysRoleServiceImpl implements IToSysRoleService {
63 67
         responseBean.addSuccess(resMap);
64 68
         return responseBean;
65 69
     }
70
+
71
+
72
+    @Override
73
+    @Transactional(rollbackFor = Exception.class)
74
+    public ResponseBean addRole(String parameter, UserElement userElement) {
75
+        ResponseBean responseBean = new ResponseBean();
76
+
77
+        JSONObject jsonObject = JSONObject.parseObject(parameter);
78
+        String roleName = jsonObject.getString("roleName");
79
+        String description = jsonObject.getString("description");
80
+        Integer [] menuIdArray = jsonObject.getJSONArray("menuArray").toArray(new Integer[] {});
81
+
82
+        // 校验这个角色是否存在
83
+        ToSysRole toSysRole = toSysRoleMapper.selectByRoleName(roleName);
84
+        if (toSysRole != null) {
85
+            responseBean.addError("角色已存在!");
86
+            return responseBean;
87
+        }
88
+
89
+        ToSysRole createRole = new ToSysRole();
90
+        createRole.setRoleName(roleName);
91
+        createRole.setDescription(description);
92
+        createRole.setUpdateUser(userElement.getId());
93
+        createRole.setCreateUser(userElement.getId());
94
+        createRole.setCreateDate(new Date());
95
+        createRole.setUpdateDate(new Date());
96
+        createRole.setStatus("1");
97
+        int rows = toSysRoleMapper.insertSelective(createRole);
98
+
99
+        List<ToSysRoleMenu> roleMenuList = new ArrayList<>();
100
+        for (Integer menuId : menuIdArray) {
101
+            ToSysRoleMenu toSysRoleMenu = new ToSysRoleMenu();
102
+            toSysRoleMenu.setMenuId(menuId);
103
+            toSysRoleMenu.setRoleId(createRole.getId());
104
+            roleMenuList.add(toSysRoleMenu);
105
+        }
106
+
107
+        rows = toSysRoleMenuMapper.banchInsert(roleMenuList);
108
+        if (rows <= 0) {
109
+            throw new WisdomException("创建角色失败!");
110
+        }
111
+        responseBean.addSuccess("操作成功!");
112
+        return responseBean;
113
+    }
66 114
 }

+ 11
- 0
CODE/smart-community/operate-api/src/main/resources/mapper/ToSysMenuMapper.xml Прегледај датотеку

@@ -138,4 +138,15 @@
138 138
       </if>
139 139
     </trim>
140 140
   </select>
141
+  <insert id="banchInsert" parameterType="list" >
142
+    insert into to_sys_menu (id, menu_name, menu_url,
143
+      menu_icon, parent_id, sort,
144
+      menu_type, status)
145
+    values
146
+    <foreach collection="menuList" index="index" item="item" separator=",">
147
+      (#{item.menuName,jdbcType=VARCHAR}, #{item.menuUrl,jdbcType=VARCHAR},
148
+      #{item.menuIcon,jdbcType=VARCHAR}, #{item.parentId,jdbcType=INTEGER}, #{item.sort,jdbcType=INTEGER},
149
+      #{item.menuType,jdbcType=CHAR}, #{item.status,jdbcType=CHAR})
150
+    </foreach>
151
+  </insert>
141 152
 </mapper>

+ 10
- 1
CODE/smart-community/operate-api/src/main/resources/mapper/ToSysRoleMapper.xml Прегледај датотеку

@@ -32,7 +32,7 @@
32 32
       #{status,jdbcType=CHAR}, #{createUser,jdbcType=INTEGER}, #{createDate,jdbcType=TIMESTAMP}, 
33 33
       #{updateUser,jdbcType=INTEGER}, #{updateDate,jdbcType=TIMESTAMP})
34 34
   </insert>
35
-  <insert id="insertSelective" parameterType="com.community.huiju.model.ToSysRole" >
35
+  <insert id="insertSelective" parameterType="com.community.huiju.model.ToSysRole" useGeneratedKeys="true" keyProperty="id" keyColumn="id">
36 36
     insert into to_sys_role
37 37
     <trim prefix="(" suffix=")" suffixOverrides="," >
38 38
       <if test="id != null" >
@@ -142,4 +142,13 @@
142 142
       </if>
143 143
     </where>
144 144
   </select>
145
+
146
+  <select id="selectByRoleName" parameterType="string" resultMap="BaseResultMap">
147
+    select
148
+    <include refid="Base_Column_List"/>
149
+    from to_sys_role
150
+    <where>
151
+        role_name = #{roleName,jdbcType=VARCHAR}
152
+    </where>
153
+  </select>
145 154
 </mapper>

+ 9
- 0
CODE/smart-community/operate-api/src/main/resources/mapper/ToSysRoleMenuMapper.xml Прегледај датотеку

@@ -68,4 +68,13 @@
68 68
       menu_id = #{menuId,jdbcType=INTEGER}
69 69
     where id = #{id,jdbcType=INTEGER}
70 70
   </update>
71
+
72
+  <insert id="banchInsert" parameterType="list">
73
+    insert into to_sys_role_menu (role_id, menu_id
74
+      )
75
+    values
76
+    <foreach collection="list" index="index" item="item" separator=",">
77
+      (#{item.roleId,jdbcType=INTEGER}, #{item.menuId,jdbcType=INTEGER})
78
+    </foreach>
79
+  </insert>
71 80
 </mapper>

+ 1
- 1
CODE/smart-community/property-api/src/main/java/com/community/huiju/controller/RoleController.java Прегледај датотеку

@@ -31,7 +31,7 @@ public class RoleController extends BaseController {
31 31
 	@Autowired
32 32
 	private RoleServiceI roleService;
33 33
 	
34
-	@ApiOperation(value = "根据搜索条件获取二手租赁列表", notes = "根据搜索条件获取二手租赁列表")
34
+	@ApiOperation(value = "根据搜索条件获取角色列表", notes = "根据搜索条件获取角色列表")
35 35
 	@ApiImplicitParams({
36 36
 			@ApiImplicitParam(paramType = "query", dataType = "String", name = "roleName", value = "帖子标题(模糊查询)"),
37 37
 			@ApiImplicitParam(paramType = "query", dataType = "integer", name = "pageNum", value = "分页第几页"),

+ 48
- 0
CODE/smart-community/property-api/src/main/java/com/community/huiju/controller/SysMenuController.java Прегледај датотеку

@@ -0,0 +1,48 @@
1
+package com.community.huiju.controller;
2
+
3
+
4
+import com.community.commom.mode.ResponseBean;
5
+import com.community.commom.session.UserElement;
6
+import com.community.huiju.common.base.BaseController;
7
+import com.community.huiju.service.ISysMenuService;
8
+import io.swagger.annotations.Api;
9
+import io.swagger.annotations.ApiImplicitParam;
10
+import io.swagger.annotations.ApiImplicitParams;
11
+import io.swagger.annotations.ApiOperation;
12
+import org.springframework.beans.factory.annotation.Autowired;
13
+import org.springframework.cloud.context.config.annotation.RefreshScope;
14
+import org.springframework.web.bind.annotation.RequestMapping;
15
+import org.springframework.web.bind.annotation.RequestMethod;
16
+import org.springframework.web.bind.annotation.RequestParam;
17
+import org.springframework.web.bind.annotation.RestController;
18
+
19
+import javax.servlet.http.HttpSession;
20
+
21
+/**
22
+ * <p>
23
+ * 物业web端菜单表 前端控制器
24
+ * </p>
25
+ *
26
+ * @author jobob
27
+ * @since 2019-01-17
28
+ */
29
+@RestController
30
+@RefreshScope
31
+@RequestMapping("/")
32
+@Api(value = "物业端菜单API", description = "物业端菜单API")
33
+public class SysMenuController extends BaseController {
34
+	
35
+	@Autowired
36
+	private ISysMenuService sysMenuService;
37
+	
38
+	@ApiOperation(value = "根据搜索条件获取菜单列表", notes = "根据搜索条件获取菜单列表")
39
+	@ApiImplicitParams({
40
+	})
41
+	@RequestMapping(value = "/menus",method = RequestMethod.GET)
42
+	public ResponseBean getInfo(HttpSession session) {
43
+		ResponseBean responseBean = new ResponseBean();
44
+		UserElement userElement = getUserElement(session);
45
+		responseBean = sysMenuService.getMenuList(userElement);
46
+		return responseBean;
47
+	}
48
+}

+ 16
- 0
CODE/smart-community/property-api/src/main/java/com/community/huiju/dao/SysMenuMapper.java Прегледај датотеку

@@ -0,0 +1,16 @@
1
+package com.community.huiju.dao;
2
+
3
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
4
+import com.community.huiju.model.SysMenu;
5
+
6
+/**
7
+ * <p>
8
+ * 物业web端菜单表 Mapper 接口
9
+ * </p>
10
+ *
11
+ * @author jobob
12
+ * @since 2019-01-17
13
+ */
14
+public interface SysMenuMapper extends BaseMapper<SysMenu> {
15
+
16
+}

+ 72
- 0
CODE/smart-community/property-api/src/main/java/com/community/huiju/model/SysMenu.java Прегледај датотеку

@@ -0,0 +1,72 @@
1
+package com.community.huiju.model;
2
+
3
+import com.baomidou.mybatisplus.annotation.TableName;
4
+import lombok.Data;
5
+import lombok.EqualsAndHashCode;
6
+import lombok.experimental.Accessors;
7
+
8
+import java.io.Serializable;
9
+import java.util.List;
10
+
11
+/**
12
+ * <p>
13
+ * 物业web端菜单表
14
+ * </p>
15
+ *
16
+ * @author jobob
17
+ * @since 2019-01-17
18
+ */
19
+@Data
20
+@EqualsAndHashCode(callSuper = false)
21
+@Accessors(chain = true)
22
+@TableName("tp_sys_menu")
23
+public class SysMenu implements Serializable {
24
+
25
+    private static final long serialVersionUID = 1L;
26
+
27
+    private Integer id;
28
+    /**
29
+     * 小区id
30
+     */
31
+    private Integer communityId;
32
+
33
+    /**
34
+     * 菜单名称
35
+     */
36
+    private String menuName;
37
+
38
+    /**
39
+     * 菜单链接
40
+     */
41
+    private String menuUrl;
42
+
43
+    /**
44
+     * 菜单图标
45
+     */
46
+    private String menuIcon;
47
+
48
+    /**
49
+     * 父级菜单ID
50
+     */
51
+    private Integer parentId;
52
+
53
+    /**
54
+     * 排序
55
+     */
56
+    private Integer sort;
57
+
58
+    /**
59
+     * 菜单类型 0 页面菜单  1功能菜单
60
+     */
61
+    private String menuType;
62
+
63
+    /**
64
+     * 状态 0正常 9 删除
65
+     */
66
+    private String status;
67
+    
68
+    /**
69
+     * 子节点
70
+     */
71
+    private List<SysMenu> children;
72
+}

+ 24
- 0
CODE/smart-community/property-api/src/main/java/com/community/huiju/service/ISysMenuService.java Прегледај датотеку

@@ -0,0 +1,24 @@
1
+package com.community.huiju.service;
2
+
3
+import com.baomidou.mybatisplus.extension.service.IService;
4
+import com.community.commom.mode.ResponseBean;
5
+import com.community.commom.session.UserElement;
6
+import com.community.huiju.model.SysMenu;
7
+
8
+/**
9
+ * <p>
10
+ * 物业web端菜单表 服务类
11
+ * </p>
12
+ *
13
+ * @author jobob
14
+ * @since 2019-01-17
15
+ */
16
+public interface ISysMenuService extends IService<SysMenu> {
17
+	
18
+	/**
19
+	 * 获取递归菜单
20
+	 * @param userElement
21
+	 * @return
22
+	 */
23
+	ResponseBean getMenuList(UserElement userElement);
24
+}

+ 75
- 0
CODE/smart-community/property-api/src/main/java/com/community/huiju/service/impl/SysMenuServiceImpl.java Прегледај датотеку

@@ -0,0 +1,75 @@
1
+package com.community.huiju.service.impl;
2
+
3
+
4
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
5
+import com.community.commom.mode.ResponseBean;
6
+import com.community.commom.session.UserElement;
7
+import com.community.huiju.dao.SysMenuMapper;
8
+import com.community.huiju.model.SysMenu;
9
+import com.community.huiju.service.ISysMenuService;
10
+import org.springframework.beans.factory.annotation.Autowired;
11
+import org.springframework.stereotype.Service;
12
+
13
+import java.util.ArrayList;
14
+import java.util.List;
15
+
16
+/**
17
+ * <p>
18
+ * 物业web端菜单表 服务实现类
19
+ * </p>
20
+ *
21
+ * @author jobob
22
+ * @since 2019-01-17
23
+ */
24
+@Service
25
+public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> implements ISysMenuService {
26
+	
27
+	@Autowired
28
+	private SysMenuMapper sysMenuMapper;
29
+	/**
30
+	 * 获取递归菜单
31
+	 *
32
+	 * @param userElement
33
+	 * @return
34
+	 */
35
+	@Override
36
+	public ResponseBean getMenuList(UserElement userElement) {
37
+		ResponseBean responseBean = new ResponseBean();
38
+		List<SysMenu> sysMenuList = sysMenuMapper.selectList(null);
39
+		List<SysMenu> menuList = new ArrayList<SysMenu>();
40
+		sysMenuList.stream().forEach(sysMenu -> {
41
+			//父节点是0的,为根节点。
42
+			if(sysMenu.getParentId().equals("0")){
43
+				menuList.add(sysMenu);
44
+			}
45
+		});
46
+		
47
+		//递归
48
+		menuList.stream().forEach(sysMenu -> {
49
+			List<SysMenu> childList = getChild(sysMenu.getId(), sysMenuList);
50
+			sysMenu.setChildren(childList);
51
+		});
52
+		responseBean.addSuccess(menuList);
53
+		return responseBean;
54
+	}
55
+	
56
+	public List<SysMenu> getChild(Integer id,List<SysMenu> allMenuList){
57
+		//子菜单
58
+		List<SysMenu> childList = new ArrayList<SysMenu>();
59
+		allMenuList.stream().forEach(sysMenu -> {
60
+			//相等说明:为该根节点的子节点。
61
+			if(sysMenu.getParentId().equals(id)){
62
+				childList.add(sysMenu);
63
+			}
64
+		});
65
+		//递归
66
+		childList.stream().forEach(sysMenu -> {
67
+			sysMenu.setChildren(getChild(sysMenu.getId(), allMenuList));
68
+		});
69
+		//如果节点下没有子节点,返回一个空List(递归退出)
70
+		if(childList.size() == 0){
71
+			return new ArrayList<SysMenu>();
72
+		}
73
+		return childList;
74
+	}
75
+}

+ 5
- 0
CODE/smart-community/property-api/src/main/resources/mapper/SysMenuMapper.xml Прегледај датотеку

@@ -0,0 +1,5 @@
1
+<?xml version="1.0" encoding="UTF-8"?>
2
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
3
+<mapper namespace="com.community.huiju.dao.SysMenuMapper">
4
+
5
+</mapper>

+ 17
- 0
VUECODE/smart-operate-manage/src/api/role.js Прегледај датотеку

@@ -8,3 +8,20 @@ export function getRoleList(data) {
8 8
     data
9 9
   })
10 10
 }
11
+
12
+// 获取所有 菜单列表
13
+export function getMenuList() {
14
+  return request({
15
+    url: '/menu/list',
16
+    method: 'get'
17
+  })
18
+}
19
+
20
+// 添加 角色
21
+export function addRole(data) {
22
+  return request({
23
+    url: '/role/add',
24
+    method: 'post',
25
+    data
26
+  })
27
+}

+ 19
- 2
VUECODE/smart-operate-manage/src/store/modules/role.js Прегледај датотеку

@@ -1,10 +1,9 @@
1
-import { getRoleList } from '@/api/role'
1
+import { getRoleList, getMenuList, addRole } from '@/api/role'
2 2
 
3 3
 const role = {
4 4
 
5 5
   actions: {
6 6
     GetRoleList({ commit }, data) { // 根据条件获取所有的角色列表
7
-      console.log('角色列表请求参数: ', data)
8 7
       return new Promise((resolve, reject) => {
9 8
         getRoleList(data).then(response => {
10 9
           resolve(response)
@@ -12,6 +11,24 @@ const role = {
12 11
           reject(err)
13 12
         })
14 13
       })
14
+    },
15
+    GetMenuList({ commit }, data) { // 获取所有菜单
16
+      return new Promise((resolve, reject) => {
17
+        getMenuList(data).then(response => {
18
+          resolve(response)
19
+        }).catch((err) => {
20
+          reject(err)
21
+        })
22
+      })
23
+    },
24
+    AddRole({ commit }, data) { // 添加角色
25
+      return new Promise((resolve, reject) => {
26
+        addRole(data).then(response => {
27
+          resolve(response)
28
+        }).catch((err) => {
29
+          reject(err)
30
+        })
31
+      })
15 32
     }
16 33
   }
17 34
 }

+ 45
- 5
VUECODE/smart-operate-manage/src/views/account/role/add/index.vue Прегледај датотеку

@@ -8,10 +8,13 @@
8 8
         <el-input v-model="ruleForm.description"/>
9 9
       </el-form-item>
10 10
       <el-form-item label="权限资源" prop="menuArray">
11
+        <!-- default-expanded-keys 展示选中的
12
+             default-checked-keys 勾上选中的-->
11 13
         <el-tree
14
+          ref="tree"
12 15
           :data="menuData"
13
-          :default-expanded-keys="[2, 3]"
14
-          :default-checked-keys="[5]"
16
+          :default-expanded-keys="ruleForm.menuArray"
17
+          :default-checked-keys="ruleForm.menuArray"
15 18
           :props="defaultProps"
16 19
           show-checkbox
17 20
           node-key="id"
@@ -38,7 +41,7 @@ export default {
38 41
       defaultProps: { // 设置树形节点的渲染的属性
39 42
         id: 'id',
40 43
         children: 'children',
41
-        label: 'label'
44
+        label: 'menuName'
42 45
       },
43 46
       rules: {
44 47
         roleName: [
@@ -53,13 +56,38 @@ export default {
53 56
       }
54 57
     }
55 58
   },
59
+  mounted() {
60
+    this.getMenuList()
61
+  },
56 62
   methods: {
57 63
     submitForm(formName) {
64
+      // 获取选中的树形节点 key
65
+      this.ruleForm.menuArray = this.$refs.tree.getCheckedKeys()
58 66
       this.$refs[formName].validate((valid) => {
67
+        const loading = this.$loading({
68
+          lock: true,
69
+          text: 'Loading',
70
+          spinner: 'el-icon-loading',
71
+          background: 'rgba(0, 0, 0, 0.7)'
72
+        })
59 73
         if (valid) {
60
-          alert('submit!')
74
+          this.$store.dispatch('AddRole', this.ruleForm).then((res) => {
75
+            const resCode = res.code
76
+            if (resCode === '0') {
77
+              this.$message({
78
+                message: res.message,
79
+                type: 'success'
80
+              })
81
+              loading.close()
82
+              this.$router.push({ name: 'role-index' })
83
+            }
84
+          }).catch(() => {
85
+            console.log('error AddRole')
86
+            loading.close()
87
+          })
61 88
         } else {
62 89
           console.log('error submit!!')
90
+          loading.close()
63 91
           return false
64 92
         }
65 93
       })
@@ -69,11 +97,23 @@ export default {
69 97
     },
70 98
     handleCheckChange(data, checked, indeterminate) { // 树形图选择事件
71 99
       console.log(data, checked, indeterminate)
100
+    },
101
+    getMenuList() { // 获取 菜单列表
102
+      this.$store.dispatch('GetMenuList').then((res) => {
103
+        this.menuData = res.data
104
+      }).catch(() => {
105
+        console.log('error GetMenuList')
106
+      })
72 107
     }
73 108
   }
74 109
 }
75 110
 </script>
76 111
 
77 112
 <style scoped>
78
-
113
+.demo-ruleForm {
114
+  width: 500px;
115
+  margin-top: 20px;
116
+  margin-left: auto;
117
+  margin-right: auto;
118
+}
79 119
 </style>

+ 48
- 66
VUECODE/smart-operate-manage/src/views/account/role/edi/index.vue Прегледај датотеку

@@ -1,47 +1,23 @@
1 1
 <template>
2 2
   <div id="root">
3 3
     <el-form ref="ruleForm" :model="ruleForm" :rules="rules" label-width="100px" class="demo-ruleForm">
4
-      <el-form-item label="活动名称" prop="name">
5
-        <el-input v-model="ruleForm.name"/>
4
+      <el-form-item label="角色名称" prop="roleName">
5
+        <el-input v-model="ruleForm.roleName"/>
6 6
       </el-form-item>
7
-      <el-form-item label="活动区域" prop="region">
8
-        <el-select v-model="ruleForm.region" placeholder="请选择活动区域">
9
-          <el-option label="区域一" value="shanghai"/>
10
-          <el-option label="区域二" value="beijing"/>
11
-        </el-select>
7
+      <el-form-item label="角色描述" prop="description">
8
+        <el-input v-model="ruleForm.description"/>
12 9
       </el-form-item>
13
-      <el-form-item label="活动时间" required>
14
-        <el-col :span="11">
15
-          <el-form-item prop="date1">
16
-            <el-date-picker v-model="ruleForm.date1" type="date" placeholder="选择日期" style="width: 100%;"/>
17
-          </el-form-item>
18
-        </el-col>
19
-        <el-col :span="2" class="line">-</el-col>
20
-        <el-col :span="11">
21
-          <el-form-item prop="date2">
22
-            <el-time-picker v-model="ruleForm.date2" type="fixed-time" placeholder="选择时间" style="width: 100%;"/>
23
-          </el-form-item>
24
-        </el-col>
25
-      </el-form-item>
26
-      <el-form-item label="即时配送" prop="delivery">
27
-        <el-switch v-model="ruleForm.delivery"/>
28
-      </el-form-item>
29
-      <el-form-item label="活动性质" prop="type">
30
-        <el-checkbox-group v-model="ruleForm.type">
31
-          <el-checkbox label="美食/餐厅线上活动" name="type"/>
32
-          <el-checkbox label="地推活动" name="type"/>
33
-          <el-checkbox label="线下主题活动" name="type"/>
34
-          <el-checkbox label="单纯品牌曝光" name="type"/>
35
-        </el-checkbox-group>
36
-      </el-form-item>
37
-      <el-form-item label="特殊资源" prop="resource">
38
-        <el-radio-group v-model="ruleForm.resource">
39
-          <el-radio label="线上品牌商赞助"/>
40
-          <el-radio label="线下场地免费"/>
41
-        </el-radio-group>
42
-      </el-form-item>
43
-      <el-form-item label="活动形式" prop="desc">
44
-        <el-input v-model="ruleForm.desc" type="textarea"/>
10
+      <el-form-item label="权限资源" prop="menuArray">
11
+        <!-- default-expanded-keys 展示选中的
12
+             default-checked-keys 勾上选中的-->
13
+        <el-tree
14
+          :data="menuData"
15
+          :default-expanded-keys="ruleForm.menuArray"
16
+          :default-checked-keys="ruleForm.menuArray"
17
+          :props="defaultProps"
18
+          show-checkbox
19
+          node-key="id"
20
+          @check-change="handleCheckChange"/>
45 21
       </el-form-item>
46 22
       <el-form-item>
47 23
         <el-button type="primary" @click="submitForm('ruleForm')">立即创建</el-button>
@@ -56,41 +32,32 @@ export default {
56 32
   data() {
57 33
     return {
58 34
       ruleForm: {
59
-        name: '',
60
-        region: '',
61
-        date1: '',
62
-        date2: '',
63
-        delivery: false,
64
-        type: [],
65
-        resource: '',
66
-        desc: ''
35
+        roleName: '',
36
+        description: '',
37
+        menuArray: [] // 已选中的权限资源
38
+      },
39
+      menuData: [], // 所有权限资源
40
+      defaultProps: { // 设置树形节点的渲染的属性
41
+        id: 'id',
42
+        children: 'children',
43
+        label: 'menuName'
67 44
       },
68 45
       rules: {
69
-        name: [
70
-          { required: true, message: '请输入活动名称', trigger: 'blur' },
71
-          { min: 3, max: 5, message: '长度在 3 到 5 个字符', trigger: 'blur' }
72
-        ],
73
-        region: [
74
-          { required: true, message: '请选择活动区域', trigger: 'change' }
46
+        roleName: [
47
+          { required: true, message: '请输入角色名称', trigger: 'blur' }
75 48
         ],
76
-        date1: [
77
-          { type: 'date', required: true, message: '请选择日期', trigger: 'change' }
49
+        description: [
50
+          { required: true, message: '请输入角色描述', trigger: 'blur' }
78 51
         ],
79
-        date2: [
80
-          { type: 'date', required: true, message: '请选择时间', trigger: 'change' }
81
-        ],
82
-        type: [
52
+        menuArray: [
83 53
           { type: 'array', required: true, message: '请至少选择一个活动性质', trigger: 'change' }
84
-        ],
85
-        resource: [
86
-          { required: true, message: '请选择活动资源', trigger: 'change' }
87
-        ],
88
-        desc: [
89
-          { required: true, message: '请填写活动形式', trigger: 'blur' }
90 54
         ]
91 55
       }
92 56
     }
93 57
   },
58
+  mounted() {
59
+    this.getMenuList()
60
+  },
94 61
   methods: {
95 62
     submitForm(formName) {
96 63
       this.$refs[formName].validate((valid) => {
@@ -104,11 +71,26 @@ export default {
104 71
     },
105 72
     resetForm(formName) {
106 73
       this.$refs[formName].resetFields()
74
+    },
75
+    handleCheckChange(data, checked, indeterminate) { // 树形图选择事件
76
+      console.log(data, checked, indeterminate)
77
+    },
78
+    getMenuList() { // 获取 菜单列表
79
+      this.$store.dispatch('GetMenuList').then((res) => {
80
+        this.menuData = res.data
81
+      }).catch(() => {
82
+        console.log('error GetMenuList')
83
+      })
107 84
     }
108 85
   }
109 86
 }
110 87
 </script>
111 88
 
112 89
 <style scoped>
113
-
90
+.demo-ruleForm {
91
+  width: 500px;
92
+  margin-top: 20px;
93
+  margin-left: auto;
94
+  margin-right: auto;
95
+}
114 96
 </style>

+ 4
- 0
VUECODE/smart-operate-manage/src/views/account/role/index.vue Прегледај датотеку

@@ -125,6 +125,9 @@ export default {
125 125
       console.log(rows)
126 126
     },
127 127
     formatDate(val) {
128
+      if (val === null) {
129
+        return
130
+      }
128 131
       var value = new Date(val)
129 132
       var year = value.getFullYear()
130 133
       var month = value.getMonth() + 1
@@ -149,6 +152,7 @@ export default {
149 152
     deleteRole() { // 删除角色
150 153
     },
151 154
     updateRole() { // 修改角色
155
+      this.$router.push({ name: 'role-edi' })
152 156
     },
153 157
     addRole() { // 添加角色
154 158
       this.$router.push({ name: 'role-add' })

+ 48
- 66
VUECODE/smart-operate-manage/src/views/account/role/info/index.vue Прегледај датотеку

@@ -1,47 +1,23 @@
1 1
 <template>
2 2
   <div id="root">
3 3
     <el-form ref="ruleForm" :model="ruleForm" :rules="rules" label-width="100px" class="demo-ruleForm">
4
-      <el-form-item label="活动名称" prop="name">
5
-        <el-input v-model="ruleForm.name"/>
4
+      <el-form-item label="角色名称" prop="roleName">
5
+        <el-input v-model="ruleForm.roleName"/>
6 6
       </el-form-item>
7
-      <el-form-item label="活动区域" prop="region">
8
-        <el-select v-model="ruleForm.region" placeholder="请选择活动区域">
9
-          <el-option label="区域一" value="shanghai"/>
10
-          <el-option label="区域二" value="beijing"/>
11
-        </el-select>
7
+      <el-form-item label="角色描述" prop="description">
8
+        <el-input v-model="ruleForm.description"/>
12 9
       </el-form-item>
13
-      <el-form-item label="活动时间" required>
14
-        <el-col :span="11">
15
-          <el-form-item prop="date1">
16
-            <el-date-picker v-model="ruleForm.date1" type="date" placeholder="选择日期" style="width: 100%;"/>
17
-          </el-form-item>
18
-        </el-col>
19
-        <el-col :span="2" class="line">-</el-col>
20
-        <el-col :span="11">
21
-          <el-form-item prop="date2">
22
-            <el-time-picker v-model="ruleForm.date2" type="fixed-time" placeholder="选择时间" style="width: 100%;"/>
23
-          </el-form-item>
24
-        </el-col>
25
-      </el-form-item>
26
-      <el-form-item label="即时配送" prop="delivery">
27
-        <el-switch v-model="ruleForm.delivery"/>
28
-      </el-form-item>
29
-      <el-form-item label="活动性质" prop="type">
30
-        <el-checkbox-group v-model="ruleForm.type">
31
-          <el-checkbox label="美食/餐厅线上活动" name="type"/>
32
-          <el-checkbox label="地推活动" name="type"/>
33
-          <el-checkbox label="线下主题活动" name="type"/>
34
-          <el-checkbox label="单纯品牌曝光" name="type"/>
35
-        </el-checkbox-group>
36
-      </el-form-item>
37
-      <el-form-item label="特殊资源" prop="resource">
38
-        <el-radio-group v-model="ruleForm.resource">
39
-          <el-radio label="线上品牌商赞助"/>
40
-          <el-radio label="线下场地免费"/>
41
-        </el-radio-group>
42
-      </el-form-item>
43
-      <el-form-item label="活动形式" prop="desc">
44
-        <el-input v-model="ruleForm.desc" type="textarea"/>
10
+      <el-form-item label="权限资源" prop="menuArray">
11
+        <!-- default-expanded-keys 展示选中的
12
+             default-checked-keys 勾上选中的-->
13
+        <el-tree
14
+          :data="menuData"
15
+          :default-expanded-keys="ruleForm.menuArray"
16
+          :default-checked-keys="ruleForm.menuArray"
17
+          :props="defaultProps"
18
+          show-checkbox
19
+          node-key="id"
20
+          @check-change="handleCheckChange"/>
45 21
       </el-form-item>
46 22
       <el-form-item>
47 23
         <el-button type="primary" @click="submitForm('ruleForm')">立即创建</el-button>
@@ -56,41 +32,32 @@ export default {
56 32
   data() {
57 33
     return {
58 34
       ruleForm: {
59
-        name: '',
60
-        region: '',
61
-        date1: '',
62
-        date2: '',
63
-        delivery: false,
64
-        type: [],
65
-        resource: '',
66
-        desc: ''
35
+        roleName: '',
36
+        description: '',
37
+        menuArray: [] // 已选中的权限资源
38
+      },
39
+      menuData: [], // 所有权限资源
40
+      defaultProps: { // 设置树形节点的渲染的属性
41
+        id: 'id',
42
+        children: 'children',
43
+        label: 'menuName'
67 44
       },
68 45
       rules: {
69
-        name: [
70
-          { required: true, message: '请输入活动名称', trigger: 'blur' },
71
-          { min: 3, max: 5, message: '长度在 3 到 5 个字符', trigger: 'blur' }
72
-        ],
73
-        region: [
74
-          { required: true, message: '请选择活动区域', trigger: 'change' }
46
+        roleName: [
47
+          { required: true, message: '请输入角色名称', trigger: 'blur' }
75 48
         ],
76
-        date1: [
77
-          { type: 'date', required: true, message: '请选择日期', trigger: 'change' }
49
+        description: [
50
+          { required: true, message: '请输入角色描述', trigger: 'blur' }
78 51
         ],
79
-        date2: [
80
-          { type: 'date', required: true, message: '请选择时间', trigger: 'change' }
81
-        ],
82
-        type: [
52
+        menuArray: [
83 53
           { type: 'array', required: true, message: '请至少选择一个活动性质', trigger: 'change' }
84
-        ],
85
-        resource: [
86
-          { required: true, message: '请选择活动资源', trigger: 'change' }
87
-        ],
88
-        desc: [
89
-          { required: true, message: '请填写活动形式', trigger: 'blur' }
90 54
         ]
91 55
       }
92 56
     }
93 57
   },
58
+  mounted() {
59
+    this.getMenuList()
60
+  },
94 61
   methods: {
95 62
     submitForm(formName) {
96 63
       this.$refs[formName].validate((valid) => {
@@ -104,11 +71,26 @@ export default {
104 71
     },
105 72
     resetForm(formName) {
106 73
       this.$refs[formName].resetFields()
74
+    },
75
+    handleCheckChange(data, checked, indeterminate) { // 树形图选择事件
76
+      console.log(data, checked, indeterminate)
77
+    },
78
+    getMenuList() { // 获取 菜单列表
79
+      this.$store.dispatch('GetMenuList').then((res) => {
80
+        this.menuData = res.data
81
+      }).catch(() => {
82
+        console.log('error GetMenuList')
83
+      })
107 84
     }
108 85
   }
109 86
 }
110 87
 </script>
111 88
 
112 89
 <style scoped>
113
-
90
+.demo-ruleForm {
91
+  width: 500px;
92
+  margin-top: 20px;
93
+  margin-left: auto;
94
+  margin-right: auto;
95
+}
114 96
 </style>

+ 7
- 0
VUECODE/smart-property-manage/src/api/role.js Прегледај датотеку

@@ -7,3 +7,10 @@ export function fetchList(query) {
7 7
     params: query
8 8
   })
9 9
 }
10
+
11
+export function fetchMenuList() {
12
+  return request({
13
+    url: '/menus',
14
+    method: 'get'
15
+  })
16
+}

+ 18
- 2
VUECODE/smart-property-manage/src/store/modules/role.js Прегледај датотеку

@@ -1,10 +1,11 @@
1
-import { fetchList } from '@/api/role'
1
+import { fetchList, fetchMenuList } from '@/api/role'
2 2
 
3 3
 const transaction = {
4 4
   namespaced: true,
5 5
   state: {
6 6
     total: '',
7
-    roleList: []
7
+    roleList: [],
8
+    menuList: []
8 9
   },
9 10
 
10 11
   mutations: {
@@ -13,6 +14,9 @@ const transaction = {
13 14
     },
14 15
     SET_TOTAL: (state, total) => {
15 16
       state.total = total
17
+    },
18
+    SET_MENU_LIST: (state, data) => {
19
+      state.menuList = data
16 20
     }
17 21
   },
18 22
 
@@ -30,6 +34,18 @@ const transaction = {
30 34
         })
31 35
       })
32 36
     }
37
+  },
38
+  FetchMenuList({ commit }) {
39
+    console.log(1)
40
+    return new Promise((resolve, reject) => {
41
+      fetchMenuList().then(response => {
42
+        const data = response.data
43
+        commit('SET_MENU_LIST', data)
44
+        resolve()
45
+      }).catch(error => {
46
+        reject(error)
47
+      })
48
+    })
33 49
   }
34 50
 }
35 51
 

+ 33
- 0
VUECODE/smart-property-manage/src/views/account/add/role-add.vue Прегледај датотеку

@@ -7,6 +7,12 @@
7 7
       <el-form-item label="角色描述" prop="building">
8 8
         <el-input v-model="ruleForm.building"/>
9 9
       </el-form-item>
10
+      <el-tree
11
+        :data="menuList"
12
+        show-checkbox
13
+        node-key="id"
14
+        :props="defaultProps">
15
+      </el-tree>
10 16
       <el-form-item>
11 17
         <el-button type="primary" @click="submitForm('ruleForm')">立即创建</el-button>
12 18
         <el-button @click="resetForm('ruleForm')">重置</el-button>
@@ -16,7 +22,16 @@
16 22
 </template>
17 23
 
18 24
 <script>
25
+import { mapState, mapActions, mapMutations } from 'vuex'
26
+import waves from '@/directive/waves' // Waves directive
27
+import { parseTime } from '@/utils'
28
+
19 29
 export default {
30
+  computed: {
31
+    ...mapState('role', {
32
+      menuList: s => s.menuList
33
+    })
34
+  },
20 35
   data() {
21 36
     return {
22 37
       ruleForm: {
@@ -32,10 +47,22 @@ export default {
32 47
         phase: [
33 48
           { required: true, message: '请输入角色名称', trigger: 'blur' }
34 49
         ]
50
+      },
51
+      defaultProps: {
52
+        children: 'children',
53
+        label: 'menuName'
35 54
       }
36 55
     }
37 56
   },
57
+  created(){
58
+    this.getMenuList()
59
+  },
38 60
   methods: {
61
+    ...mapMutations('role', {
62
+    }),
63
+    ...mapActions('role', [
64
+      'FetchMenuList'
65
+    ]),
39 66
     submitForm(formName) { // 提交
40 67
       this.$refs[formName].validate((valid) => {
41 68
         if (valid) {
@@ -46,6 +73,12 @@ export default {
46 73
         }
47 74
       })
48 75
     },
76
+    getMenuList() {
77
+      this.FetchMenuList().then(() => {
78
+      }).catch(() => {
79
+        console.log('get list error')
80
+      })
81
+    },
49 82
     resetForm(formName) { // 重置
50 83
       this.$refs[formName].resetFields()
51 84
     },