数据权限绑定
This commit is contained in:
@@ -0,0 +1,89 @@
|
|||||||
|
|
||||||
|
package org.nl.sso.permission.rest;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSONArray;
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import org.nl.sso.permission.service.DataPermissionService;
|
||||||
|
import org.nl.sso.permission.service.dto.DataPermissionDto;
|
||||||
|
import org.springframework.data.domain.Pageable;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import org.nl.modules.logging.annotation.Log;
|
||||||
|
import org.springframework.http.HttpStatus;
|
||||||
|
import org.springframework.http.ResponseEntity;
|
||||||
|
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||||
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
import io.swagger.annotations.*;
|
||||||
|
import java.util.Map;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author lyd
|
||||||
|
* @date 2022-12-09
|
||||||
|
**/
|
||||||
|
@RestController
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
@Api(tags = "数据权限管理")
|
||||||
|
@RequestMapping("/api/dataPermission")
|
||||||
|
@Slf4j
|
||||||
|
public class DataPermissionController {
|
||||||
|
|
||||||
|
private final DataPermissionService dataPermissionService;
|
||||||
|
|
||||||
|
@GetMapping
|
||||||
|
@Log("查询数据权限")
|
||||||
|
@ApiOperation("查询数据权限")
|
||||||
|
//@SaCheckPermission("@el.check('dataPermission:list')")
|
||||||
|
public ResponseEntity<Object> query(@RequestParam Map whereJson, Pageable page){
|
||||||
|
return new ResponseEntity<>(dataPermissionService.queryAll(whereJson,page),HttpStatus.OK);
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping
|
||||||
|
@Log("新增数据权限")
|
||||||
|
@ApiOperation("新增数据权限")
|
||||||
|
//@SaCheckPermission("@el.check('dataPermission:add')")
|
||||||
|
public ResponseEntity<Object> create(@Validated @RequestBody DataPermissionDto dto){
|
||||||
|
dataPermissionService.create(dto);
|
||||||
|
return new ResponseEntity<>(HttpStatus.CREATED);
|
||||||
|
}
|
||||||
|
|
||||||
|
@PutMapping
|
||||||
|
@Log("修改数据权限")
|
||||||
|
@ApiOperation("修改数据权限")
|
||||||
|
//@SaCheckPermission("@el.check('dataPermission:edit')")
|
||||||
|
public ResponseEntity<Object> update(@Validated @RequestBody DataPermissionDto dto){
|
||||||
|
dataPermissionService.update(dto);
|
||||||
|
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Log("删除数据权限")
|
||||||
|
@ApiOperation("删除数据权限")
|
||||||
|
//@SaCheckPermission("@el.check('dataPermission:del')")
|
||||||
|
@DeleteMapping
|
||||||
|
public ResponseEntity<Object> delete(@RequestBody Long[] ids) {
|
||||||
|
dataPermissionService.deleteAll(ids);
|
||||||
|
return new ResponseEntity<>(HttpStatus.OK);
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/scopeType")
|
||||||
|
@Log("获取数据权限范围")
|
||||||
|
@ApiOperation("获取数据权限范围")
|
||||||
|
public ResponseEntity<Object> getDataScopeType(){
|
||||||
|
return new ResponseEntity<>(dataPermissionService.getDataScopeType(),HttpStatus.OK);
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/dataPermissionOption")
|
||||||
|
@Log("获取数据权限下拉框")
|
||||||
|
@ApiOperation("获取数据权限下拉框")
|
||||||
|
public ResponseEntity<Object> getDataPermissionOption(){
|
||||||
|
return new ResponseEntity<>(dataPermissionService.getDataPermissionOption(),HttpStatus.OK);
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping("/saveDataPermission")
|
||||||
|
@Log("保存数据权限")
|
||||||
|
@ApiOperation("保存数据权限")
|
||||||
|
public ResponseEntity<Object> saveDataPermission(@RequestBody JSONObject datas){
|
||||||
|
dataPermissionService.savePermission(datas);
|
||||||
|
return new ResponseEntity<>(HttpStatus.CREATED);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,84 @@
|
|||||||
|
package org.nl.sso.permission.service;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSONArray;
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import org.nl.sso.permission.service.dto.DataPermissionDto;
|
||||||
|
import org.springframework.data.domain.Pageable;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.List;
|
||||||
|
import java.io.IOException;
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description 服务接口
|
||||||
|
* @author lyd
|
||||||
|
* @date 2022-12-09
|
||||||
|
**/
|
||||||
|
public interface DataPermissionService {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询数据分页
|
||||||
|
* @param whereJson 条件
|
||||||
|
* @param page 分页参数
|
||||||
|
* @return Map<String,Object>
|
||||||
|
*/
|
||||||
|
Map<String,Object> queryAll(Map whereJson, Pageable page);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询所有数据不分页
|
||||||
|
* @param whereJson 条件参数
|
||||||
|
* @return List<DataPermissionDto>
|
||||||
|
*/
|
||||||
|
List<DataPermissionDto> queryAll(Map whereJson);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据ID查询
|
||||||
|
* @param permission_id ID
|
||||||
|
* @return DataPermission
|
||||||
|
*/
|
||||||
|
DataPermissionDto findById(Long permission_id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据编码查询
|
||||||
|
* @param code code
|
||||||
|
* @return DataPermission
|
||||||
|
*/
|
||||||
|
DataPermissionDto findByCode(String code);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建
|
||||||
|
* @param dto /
|
||||||
|
*/
|
||||||
|
void create(DataPermissionDto dto);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 编辑
|
||||||
|
* @param dto /
|
||||||
|
*/
|
||||||
|
void update(DataPermissionDto dto);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 多选删除
|
||||||
|
* @param ids /
|
||||||
|
*/
|
||||||
|
void deleteAll(Long[] ids);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取数据权限
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
JSONArray getDataScopeType();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取数据权限下拉框
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
JSONArray getDataPermissionOption();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 保存数据权限
|
||||||
|
* @param datas
|
||||||
|
*/
|
||||||
|
void savePermission(JSONObject datas);
|
||||||
|
}
|
||||||
@@ -0,0 +1,54 @@
|
|||||||
|
package org.nl.sso.permission.service.dto;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.io.Serializable;
|
||||||
|
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
|
||||||
|
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description /
|
||||||
|
* @author lyd
|
||||||
|
* @date 2022-12-09
|
||||||
|
**/
|
||||||
|
@Data
|
||||||
|
public class DataPermissionDto implements Serializable {
|
||||||
|
|
||||||
|
/** permission_id */
|
||||||
|
/** 防止精度丢失 */
|
||||||
|
@JsonSerialize(using= ToStringSerializer.class)
|
||||||
|
private Long permission_id;
|
||||||
|
|
||||||
|
/** 编码 */
|
||||||
|
private String code;
|
||||||
|
|
||||||
|
/** 名称 */
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
/** 排序 */
|
||||||
|
private BigDecimal order_sort;
|
||||||
|
|
||||||
|
/** 备注 */
|
||||||
|
private String remark;
|
||||||
|
|
||||||
|
/** 是否删除 */
|
||||||
|
private String is_delete;
|
||||||
|
|
||||||
|
/** 创建人标识 */
|
||||||
|
private Long create_id;
|
||||||
|
|
||||||
|
/** 创建人 */
|
||||||
|
private String create_name;
|
||||||
|
|
||||||
|
/** 修改时间 */
|
||||||
|
private String update_time;
|
||||||
|
|
||||||
|
/*创建时间*/
|
||||||
|
private String create_time;
|
||||||
|
|
||||||
|
/** 修改人标识 */
|
||||||
|
private Long update_optid;
|
||||||
|
|
||||||
|
/** 修改人 */
|
||||||
|
private String update_optname;
|
||||||
|
}
|
||||||
@@ -0,0 +1,213 @@
|
|||||||
|
|
||||||
|
package org.nl.sso.permission.service.impl;
|
||||||
|
|
||||||
|
import org.nl.modules.wql.WQL;
|
||||||
|
import org.nl.sso.permission.service.DataPermissionService;
|
||||||
|
import org.nl.sso.permission.service.dto.DataPermissionDto;
|
||||||
|
import com.alibaba.fastjson.JSON;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import org.nl.sso.tools.MapOf;
|
||||||
|
import org.nl.sso.tools.SecurityUtils;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.nl.modules.common.exception.BadRequestException;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
import org.springframework.data.domain.Pageable;
|
||||||
|
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
import cn.hutool.core.date.DateUtil;
|
||||||
|
import cn.hutool.core.util.IdUtil;
|
||||||
|
import com.alibaba.fastjson.JSONArray;
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import org.nl.modules.wql.core.bean.ResultBean;
|
||||||
|
import org.nl.modules.wql.core.bean.WQLObject;
|
||||||
|
import org.nl.modules.wql.util.WqlUtil;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description 服务实现
|
||||||
|
* @author lyd
|
||||||
|
* @date 2022-12-09
|
||||||
|
**/
|
||||||
|
@Service
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
@Slf4j
|
||||||
|
public class DataPermissionServiceImpl implements DataPermissionService {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Map<String,Object> queryAll(Map whereJson, Pageable page){
|
||||||
|
WQLObject wo = WQLObject.getWQLObject("sys_data_permission");
|
||||||
|
ResultBean rb = wo.pagequery(WqlUtil.getHttpContext(page), "1=1", "update_time desc");
|
||||||
|
final JSONObject json = rb.pageResult();
|
||||||
|
return json;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<DataPermissionDto> queryAll(Map whereJson){
|
||||||
|
WQLObject wo = WQLObject.getWQLObject("sys_data_permission");
|
||||||
|
JSONArray arr = wo.query().getResultJSONArray(0);
|
||||||
|
if (ObjectUtil.isNotEmpty(arr)) return arr.toJavaList(DataPermissionDto.class);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public DataPermissionDto findById(Long permission_id) {
|
||||||
|
WQLObject wo = WQLObject.getWQLObject("sys_data_permission");
|
||||||
|
JSONObject json = wo.query("permission_id = '" + permission_id + "'").uniqueResult(0);
|
||||||
|
if (ObjectUtil.isNotEmpty(json)){
|
||||||
|
return json.toJavaObject( DataPermissionDto.class);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public DataPermissionDto findByCode(String code) {
|
||||||
|
WQLObject wo = WQLObject.getWQLObject("sys_data_permission");
|
||||||
|
JSONObject json = wo.query("code ='" + code + "'").uniqueResult(0);
|
||||||
|
if (ObjectUtil.isNotEmpty(json)){
|
||||||
|
return json.toJavaObject( DataPermissionDto.class);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
|
public void create(DataPermissionDto dto) {
|
||||||
|
Long currentUserId = SecurityUtils.getCurrentUserId();
|
||||||
|
String nickName = SecurityUtils.getCurrentNickName();
|
||||||
|
String now = DateUtil.now();
|
||||||
|
|
||||||
|
dto.setPermission_id(IdUtil.getSnowflake(1, 1).nextId());
|
||||||
|
dto.setCreate_id(currentUserId);
|
||||||
|
dto.setCreate_name(nickName);
|
||||||
|
dto.setUpdate_optid(currentUserId);
|
||||||
|
dto.setUpdate_optname(nickName);
|
||||||
|
dto.setUpdate_time(now);
|
||||||
|
dto.setCreate_time(now);
|
||||||
|
|
||||||
|
WQLObject wo = WQLObject.getWQLObject("sys_data_permission");
|
||||||
|
JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto));
|
||||||
|
wo.insert(json);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
|
public void update(DataPermissionDto dto) {
|
||||||
|
DataPermissionDto entity = this.findById(dto.getPermission_id());
|
||||||
|
if (entity == null) throw new BadRequestException("被删除或无权限,操作失败!");
|
||||||
|
|
||||||
|
Long currentUserId = SecurityUtils.getCurrentUserId();
|
||||||
|
String nickName = SecurityUtils.getCurrentNickName();
|
||||||
|
|
||||||
|
String now = DateUtil.now();
|
||||||
|
dto.setUpdate_time(now);
|
||||||
|
dto.setUpdate_optid(currentUserId);
|
||||||
|
dto.setUpdate_optname(nickName);
|
||||||
|
|
||||||
|
WQLObject wo = WQLObject.getWQLObject("sys_data_permission");
|
||||||
|
JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto));
|
||||||
|
wo.update(json);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
|
public void deleteAll(Long[] ids) {
|
||||||
|
Long currentUserId = SecurityUtils.getCurrentUserId();
|
||||||
|
String nickName = SecurityUtils.getCurrentNickName();
|
||||||
|
String now = DateUtil.now();
|
||||||
|
|
||||||
|
WQLObject wo = WQLObject.getWQLObject("sys_data_permission");
|
||||||
|
for (Long permission_id: ids) {
|
||||||
|
JSONObject param = new JSONObject();
|
||||||
|
param.put("permission_id", String.valueOf(permission_id));
|
||||||
|
param.put("is_delete", "1");
|
||||||
|
param.put("update_optid", currentUserId);
|
||||||
|
param.put("update_optname", nickName);
|
||||||
|
param.put("update_time", now);
|
||||||
|
wo.update(param);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取数据权限
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public JSONArray getDataScopeType() {
|
||||||
|
WQLObject wo = WQLObject.getWQLObject("sys_dict");
|
||||||
|
JSONArray array = wo.query(" code = 'permission_scope_type'").getResultJSONArray(0);
|
||||||
|
return array;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取数据权限下拉框
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public JSONArray getDataPermissionOption() {
|
||||||
|
WQLObject wo = WQLObject.getWQLObject("sys_data_permission");
|
||||||
|
JSONArray jsonArray = wo.query().getResultJSONArray(0);
|
||||||
|
return jsonArray;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 保存数据权限
|
||||||
|
*
|
||||||
|
* @param datas
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
|
public void savePermission(JSONObject datas) {
|
||||||
|
String user_id = datas.getString("user_id");
|
||||||
|
JSONArray data = datas.getJSONArray("datas");
|
||||||
|
if (ObjectUtil.isEmpty(user_id)) throw new BadRequestException("用户不能为空");
|
||||||
|
WQLObject permissionTab = WQLObject.getWQLObject("sys_user_data_permission"); // 用户数据权限表
|
||||||
|
WQLObject scopeTab = WQLObject.getWQLObject("sys_data_scope"); // 用户数据权限表
|
||||||
|
// 删除用户绑定的数据
|
||||||
|
permissionTab.delete("user_id = '" + user_id + "'");
|
||||||
|
scopeTab.delete("self_user_id = '" + user_id + "'");
|
||||||
|
for (int i = 0; i < data.size(); i++) {
|
||||||
|
JSONObject scopeObj = data.getJSONObject(i);
|
||||||
|
String permission_scope_type = scopeObj.getString("value");
|
||||||
|
String permission_id = scopeObj.getString("permission_id");
|
||||||
|
// 保存用户数据权限
|
||||||
|
permissionTab.insert(MapOf.of("user_id", user_id,
|
||||||
|
"permission_scope_type", permission_scope_type,
|
||||||
|
"permission_id", permission_id));
|
||||||
|
JSONArray users = scopeObj.getJSONArray("users");
|
||||||
|
if (ObjectUtil.isNotEmpty(users)) { // 如果是用户直接将用户的id绑定进去
|
||||||
|
for (int j = 0; j < users.size(); j++) {
|
||||||
|
JSONObject user = users.getJSONObject(j);
|
||||||
|
String userId = user.getString("user_id");
|
||||||
|
scopeTab.insert(MapOf.of("self_user_id", user_id,
|
||||||
|
"permission_scope_type", permission_scope_type,
|
||||||
|
"user_id", userId));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
JSONArray depts = scopeObj.getJSONArray("depts");
|
||||||
|
if (ObjectUtil.isNotEmpty(depts)) { // 如果是部门,先根据部门id求出所有的用户id
|
||||||
|
for (int j = 0; j < depts.size(); j++) {
|
||||||
|
JSONObject dept = depts.getJSONObject(j);
|
||||||
|
JSONArray user_ids = WQL.getWO("Query").addParamMap(
|
||||||
|
MapOf.of("flag", "1","dept_id", dept.getString("dept_id")))
|
||||||
|
.process().getResultJSONArray(0);
|
||||||
|
for (int k = 0; k < user_ids.size(); k++) {
|
||||||
|
String userId = user_ids.getJSONObject(k).getString("user_id");
|
||||||
|
scopeTab.insert(MapOf.of("self_user_id", user_id,
|
||||||
|
"permission_scope_type", permission_scope_type,
|
||||||
|
"dept_id", dept.getString("dept_id"),
|
||||||
|
"user_id", userId));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,54 @@
|
|||||||
|
[交易说明]
|
||||||
|
交易名: 数据权限相关查询
|
||||||
|
所属模块:
|
||||||
|
功能简述:
|
||||||
|
版权所有:
|
||||||
|
表引用:
|
||||||
|
版本经历:
|
||||||
|
|
||||||
|
[数据库]
|
||||||
|
--指定数据库,为空采用默认值,默认为db.properties中列出的第一个库
|
||||||
|
|
||||||
|
[IO定义]
|
||||||
|
#################################################
|
||||||
|
## 表字段对应输入参数
|
||||||
|
#################################################
|
||||||
|
输入.flag TYPEAS s_string
|
||||||
|
输入.dept_id TYPEAS s_string
|
||||||
|
|
||||||
|
[临时表]
|
||||||
|
--这边列出来的临时表就会在运行期动态创建
|
||||||
|
|
||||||
|
[临时变量]
|
||||||
|
--所有中间过程变量均可在此处定义
|
||||||
|
|
||||||
|
[业务过程]
|
||||||
|
|
||||||
|
##########################################
|
||||||
|
# 1、输入输出检查 #
|
||||||
|
##########################################
|
||||||
|
|
||||||
|
|
||||||
|
##########################################
|
||||||
|
# 2、主过程前处理 #
|
||||||
|
##########################################
|
||||||
|
|
||||||
|
|
||||||
|
##########################################
|
||||||
|
# 3、业务主过程 #
|
||||||
|
##########################################
|
||||||
|
|
||||||
|
IF 输入.flag = "1"
|
||||||
|
PAGEQUERY
|
||||||
|
SELECT
|
||||||
|
DISTINCT user_id
|
||||||
|
FROM
|
||||||
|
sys_user_dept
|
||||||
|
WHERE
|
||||||
|
1 = 1
|
||||||
|
OPTION 输入.dept_id <> ""
|
||||||
|
dept_id = 输入.dept_id
|
||||||
|
ENDOPTION
|
||||||
|
ENDSELECT
|
||||||
|
ENDPAGEQUERY
|
||||||
|
ENDIF
|
||||||
49
lms/nladmin-ui/src/views/system/permission/dataPermission.js
Normal file
49
lms/nladmin-ui/src/views/system/permission/dataPermission.js
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
import request from '@/utils/request'
|
||||||
|
|
||||||
|
export function add(data) {
|
||||||
|
return request({
|
||||||
|
url: 'api/dataPermission',
|
||||||
|
method: 'post',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export function del(ids) {
|
||||||
|
return request({
|
||||||
|
url: 'api/dataPermission/',
|
||||||
|
method: 'delete',
|
||||||
|
data: ids
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export function edit(data) {
|
||||||
|
return request({
|
||||||
|
url: 'api/dataPermission',
|
||||||
|
method: 'put',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getDataScopeType() {
|
||||||
|
return request({
|
||||||
|
url: 'api/dataPermission/scopeType',
|
||||||
|
method: 'get'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getDataPermissionOption() {
|
||||||
|
return request({
|
||||||
|
url: 'api/dataPermission/dataPermissionOption',
|
||||||
|
method: 'get'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export function saveDataPermission(data) {
|
||||||
|
return request({
|
||||||
|
url: 'api/dataPermission/saveDataPermission',
|
||||||
|
method: 'post',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export default { add, edit, del, getDataScopeType, getDataPermissionOption, saveDataPermission }
|
||||||
109
lms/nladmin-ui/src/views/system/permission/index.vue
Normal file
109
lms/nladmin-ui/src/views/system/permission/index.vue
Normal file
@@ -0,0 +1,109 @@
|
|||||||
|
<template>
|
||||||
|
<div class="app-container">
|
||||||
|
<!--工具栏-->
|
||||||
|
<div class="head-container">
|
||||||
|
<!--如果想在工具栏加入更多按钮,可以使用插槽方式, slot = 'left' or 'right'-->
|
||||||
|
<crudOperation :permission="permission" />
|
||||||
|
<!--表单组件-->
|
||||||
|
<el-dialog :close-on-click-modal="false" :before-close="crud.cancelCU" :visible.sync="crud.status.cu > 0" :title="crud.status.title" width="500px">
|
||||||
|
<el-form ref="form" :model="form" :rules="rules" size="mini" label-width="80px">
|
||||||
|
<el-form-item label="编码" prop="code">
|
||||||
|
<el-input v-model="form.code" style="width: 370px;" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="名称" prop="name">
|
||||||
|
<el-input v-model="form.name" style="width: 370px;" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="排序">
|
||||||
|
<el-input-number
|
||||||
|
v-model.number="form.order_sort"
|
||||||
|
:min="0"
|
||||||
|
:max="999"
|
||||||
|
controls-position="right"
|
||||||
|
style="width: 370px;"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="备注">
|
||||||
|
<el-input v-model="form.remark" style="width: 370px;" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="是否启用">
|
||||||
|
<el-switch v-model="form.is_used" active-value="1" inactive-value="0" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
<div slot="footer" class="dialog-footer">
|
||||||
|
<el-button type="text" @click="crud.cancelCU">取消</el-button>
|
||||||
|
<el-button :loading="crud.cu === 2" type="primary" @click="crud.submitCU">确认</el-button>
|
||||||
|
</div>
|
||||||
|
</el-dialog>
|
||||||
|
<!--表格渲染-->
|
||||||
|
<el-table ref="table" v-loading="crud.loading" :data="crud.data" size="mini" style="width: 100%;" @selection-change="crud.selectionChangeHandler">
|
||||||
|
<el-table-column type="selection" width="55" />
|
||||||
|
<el-table-column v-if="false" prop="permission_id" label="permission_id" :min-width="flexWidth('permission_id',crud.data,'permission_id')" />
|
||||||
|
<el-table-column prop="code" label="编码" :min-width="flexWidth('code',crud.data,'编码')" />
|
||||||
|
<el-table-column prop="name" label="名称" :min-width="flexWidth('name',crud.data,'名称')" />
|
||||||
|
<el-table-column prop="order_sort" label="排序" :min-width="flexWidth('order_sort',crud.data,'排序')" />
|
||||||
|
<el-table-column prop="remark" label="备注" :min-width="flexWidth('remark',crud.data,'备注')" />
|
||||||
|
<el-table-column prop="create_name" label="创建人" :min-width="flexWidth('create_name',crud.data,'创建人')" />
|
||||||
|
<el-table-column prop="is_used" label="是否启用" :min-width="flexWidth('is_used',crud.data,'是否启用')" >
|
||||||
|
<template slot-scope="scope">
|
||||||
|
{{ scope.row.is_used==1?'是':'否' }}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column prop="create_name" label="创建人" :min-width="flexWidth('create_name',crud.data,'创建人')" />
|
||||||
|
<el-table-column prop="update_time" label="修改时间" :min-width="flexWidth('update_time',crud.data,'修改时间')" />
|
||||||
|
<el-table-column v-permission="[]" label="操作" width="120px" align="center" fixed="right">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<udOperation
|
||||||
|
:data="scope.row"
|
||||||
|
:permission="permission"
|
||||||
|
/>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
<!--分页组件-->
|
||||||
|
<pagination />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import crudDataPermission from './dataPermission'
|
||||||
|
import CRUD, { crud, form, header, presenter } from '@crud/crud'
|
||||||
|
import rrOperation from '@crud/RR.operation'
|
||||||
|
import crudOperation from '@crud/CRUD.operation'
|
||||||
|
import udOperation from '@crud/UD.operation'
|
||||||
|
import pagination from '@crud/Pagination'
|
||||||
|
|
||||||
|
const defaultForm = { permission_id: null, code: null, name: null, order_sort: '1', remark: null, create_name: null, is_used: '1', create_id: null, create_time: null, update_time: null, update_optid: null, update_optname: null }
|
||||||
|
export default {
|
||||||
|
name: 'DataPermission',
|
||||||
|
components: { pagination, crudOperation, rrOperation, udOperation },
|
||||||
|
mixins: [presenter(), header(), form(defaultForm), crud()],
|
||||||
|
cruds() {
|
||||||
|
return CRUD({ title: '数据权限', url: 'api/dataPermission', idField: 'permission_id', sort: 'permission_id,desc', crudMethod: { ...crudDataPermission }})
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
permission: {
|
||||||
|
},
|
||||||
|
rules: {
|
||||||
|
code: [
|
||||||
|
{ required: true, message: '编码不能为空', trigger: 'blur' }
|
||||||
|
],
|
||||||
|
name: [
|
||||||
|
{ required: true, message: '名称不能为空', trigger: 'blur' }
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
// 钩子:在获取表格数据之前执行,false 则代表不获取数据
|
||||||
|
[CRUD.HOOK.beforeRefresh]() {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
|
||||||
|
</style>
|
||||||
@@ -0,0 +1,169 @@
|
|||||||
|
<template>
|
||||||
|
<el-dialog
|
||||||
|
title="关联用户"
|
||||||
|
append-to-body
|
||||||
|
:visible.sync="dialogVisible"
|
||||||
|
destroy-on-close
|
||||||
|
width="1000px"
|
||||||
|
@close="close"
|
||||||
|
@open="open"
|
||||||
|
>
|
||||||
|
<el-form
|
||||||
|
:inline="true"
|
||||||
|
class="demo-form-inline"
|
||||||
|
label-position="right"
|
||||||
|
label-width="80px"
|
||||||
|
label-suffix=":"
|
||||||
|
>
|
||||||
|
<el-form-item label="模糊搜索">
|
||||||
|
<el-input
|
||||||
|
v-model="query.name"
|
||||||
|
clearable
|
||||||
|
size="mini"
|
||||||
|
placeholder="输入部门名称搜索"
|
||||||
|
style="width: 200px;"
|
||||||
|
class="filter-item"
|
||||||
|
@keyup.enter.native="crud.toQuery"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<rrOperation />
|
||||||
|
</el-form>
|
||||||
|
|
||||||
|
<!--表格渲染-->
|
||||||
|
<el-table
|
||||||
|
ref="table"
|
||||||
|
v-loading="crud.loading"
|
||||||
|
:data="crud.data"
|
||||||
|
lazy
|
||||||
|
row-key="dept_id"
|
||||||
|
:tree-props="{children: 'children', hasChildren: 'hasChildren'}"
|
||||||
|
:load="getDeptDatas"
|
||||||
|
default-expand-all
|
||||||
|
style="width: 100%;"
|
||||||
|
size="mini"
|
||||||
|
border
|
||||||
|
:header-cell-style="{background:'#f5f7fa',color:'#606266'}"
|
||||||
|
@select="handleSelectionChange"
|
||||||
|
@select-all="onSelectAll"
|
||||||
|
@current-change="clickChange"
|
||||||
|
>
|
||||||
|
<el-table-column v-if="!isSingle" type="selection" width="55" />
|
||||||
|
<el-table-column v-if="isSingle" label="选择" width="55">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<el-radio v-model="tableRadio" :label="scope.row"><i /></el-radio>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="名称" prop="name" />
|
||||||
|
<el-table-column label="排序" prop="dept_sort" />
|
||||||
|
<el-table-column prop="create_time" label="创建日期" />
|
||||||
|
</el-table>
|
||||||
|
<!--分页组件-->
|
||||||
|
<pagination />
|
||||||
|
<span slot="footer" class="dialog-footer">
|
||||||
|
<el-button @click="dialogVisible = false">取 消</el-button>
|
||||||
|
<el-button type="primary" @click="submit">确 定</el-button>
|
||||||
|
</span>
|
||||||
|
</el-dialog>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
|
||||||
|
import crudDept from '@/api/system/dept'
|
||||||
|
import CRUD, { header, presenter } from '@crud/crud'
|
||||||
|
import rrOperation from '@crud/RR.operation'
|
||||||
|
import pagination from '@crud/Pagination'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: 'RelevanceDeptDialog',
|
||||||
|
components: { rrOperation, pagination },
|
||||||
|
cruds() {
|
||||||
|
return CRUD({ title: '部门', idField: 'dept_id', url: 'api/dept/vo', crudMethod: { ...crudDept }, query: { is_used: '1' }})
|
||||||
|
},
|
||||||
|
mixins: [presenter(), header()],
|
||||||
|
dicts: ['product_series'],
|
||||||
|
props: {
|
||||||
|
dialogShow: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false
|
||||||
|
},
|
||||||
|
isSingle: {
|
||||||
|
type: Boolean,
|
||||||
|
default: true
|
||||||
|
},
|
||||||
|
materOptCode: {
|
||||||
|
type: String,
|
||||||
|
default: '00'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
dialogVisible: false,
|
||||||
|
classes: [],
|
||||||
|
tableRadio: null,
|
||||||
|
class_idStr: null,
|
||||||
|
checkrow: null,
|
||||||
|
rows: []
|
||||||
|
}
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
dialogShow: {
|
||||||
|
handler(newValue) {
|
||||||
|
this.dialogVisible = newValue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
clickChange(item) {
|
||||||
|
this.tableRadio = item
|
||||||
|
},
|
||||||
|
open() {
|
||||||
|
},
|
||||||
|
handleSelectionChange(val, row) {
|
||||||
|
if (val.length > 1 && this.isSingle) {
|
||||||
|
this.$refs.table.clearSelection()
|
||||||
|
this.$refs.table.toggleRowSelection(val.pop())
|
||||||
|
} else {
|
||||||
|
this.checkrow = row
|
||||||
|
}
|
||||||
|
},
|
||||||
|
onSelectAll() {
|
||||||
|
this.$refs.table.clearSelection()
|
||||||
|
},
|
||||||
|
close() {
|
||||||
|
this.crud.resetQuery(false)
|
||||||
|
this.$emit('update:dialogShow', false)
|
||||||
|
},
|
||||||
|
submit() {
|
||||||
|
// 处理单选
|
||||||
|
if (this.isSingle && this.tableRadio) {
|
||||||
|
this.$emit('update:dialogShow', false)
|
||||||
|
this.$emit('selectDepts', this.tableRadio)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
this.rows = this.$refs.table.selection
|
||||||
|
if (this.rows.length <= 0) {
|
||||||
|
this.$message('请先勾选用户')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
this.crud.resetQuery(false)
|
||||||
|
this.$emit('update:dialogShow', false)
|
||||||
|
this.$emit('selectDepts', this.rows)
|
||||||
|
// console.log(this.rows)
|
||||||
|
},
|
||||||
|
getDeptDatas(tree, treeNode, resolve) {
|
||||||
|
const params = { pid: tree.dept_id }
|
||||||
|
setTimeout(() => {
|
||||||
|
crudDept.getDeptvo(params).then(res => {
|
||||||
|
resolve(res.content)
|
||||||
|
})
|
||||||
|
}, 100)
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<style rel="stylesheet/scss" lang="scss" scoped>
|
||||||
|
::v-deep .el-dialog__body {
|
||||||
|
padding-top: 0px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
@@ -0,0 +1,163 @@
|
|||||||
|
<template>
|
||||||
|
<el-dialog
|
||||||
|
title="关联用户"
|
||||||
|
append-to-body
|
||||||
|
:visible.sync="dialogVisible"
|
||||||
|
destroy-on-close
|
||||||
|
width="1000px"
|
||||||
|
@close="close"
|
||||||
|
@open="open"
|
||||||
|
>
|
||||||
|
<el-form
|
||||||
|
:inline="true"
|
||||||
|
class="demo-form-inline"
|
||||||
|
label-position="right"
|
||||||
|
label-width="80px"
|
||||||
|
label-suffix=":"
|
||||||
|
>
|
||||||
|
<el-form-item label="模糊搜索">
|
||||||
|
<el-input
|
||||||
|
v-model="query.blurry"
|
||||||
|
clearable
|
||||||
|
size="mini"
|
||||||
|
placeholder="输入账号或者名称"
|
||||||
|
@keyup.enter.native="crud.toQuery"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<rrOperation />
|
||||||
|
</el-form>
|
||||||
|
|
||||||
|
<!--表格渲染-->
|
||||||
|
<el-table
|
||||||
|
ref="table"
|
||||||
|
v-loading="crud.loading"
|
||||||
|
:data="crud.data"
|
||||||
|
style="width: 100%;"
|
||||||
|
size="mini"
|
||||||
|
border
|
||||||
|
:header-cell-style="{background:'#f5f7fa',color:'#606266'}"
|
||||||
|
@select="handleSelectionChange"
|
||||||
|
@select-all="onSelectAll"
|
||||||
|
@current-change="clickChange"
|
||||||
|
>
|
||||||
|
<el-table-column v-if="!isSingle" type="selection" width="55" />
|
||||||
|
<el-table-column v-if="isSingle" label="选择" width="55">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<el-radio v-model="tableRadio" :label="scope.row"><i /></el-radio>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column prop="username" label="用户名" :min-width="flexWidth('username',crud.data,'用户名')" />
|
||||||
|
<el-table-column
|
||||||
|
prop="person_name"
|
||||||
|
label="姓名"
|
||||||
|
:min-width="flexWidth('person_name',crud.data,'姓名')"
|
||||||
|
/>
|
||||||
|
<el-table-column show-overflow-tooltip prop="deptnames" label="部门" />
|
||||||
|
<el-table-column label="状态" align="center" prop="enabled">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
{{scope.row.is_used==1?'启用':'禁用'}}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
<!--分页组件-->
|
||||||
|
<pagination />
|
||||||
|
<span slot="footer" class="dialog-footer">
|
||||||
|
<el-button @click="dialogVisible = false">取 消</el-button>
|
||||||
|
<el-button type="primary" @click="submit">确 定</el-button>
|
||||||
|
</span>
|
||||||
|
</el-dialog>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
|
||||||
|
import crudUser from '@/api/system/user'
|
||||||
|
import CRUD, { header, presenter } from '@crud/crud'
|
||||||
|
import rrOperation from '@crud/RR.operation'
|
||||||
|
import pagination from '@crud/Pagination'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: 'RelevanceUserDialog',
|
||||||
|
components: { rrOperation, pagination },
|
||||||
|
cruds() {
|
||||||
|
return CRUD({ title: '用户', idField: 'user_id', url: 'api/users', crudMethod: { ...crudUser }, query: {is_used: '1'}})
|
||||||
|
},
|
||||||
|
mixins: [presenter(), header()],
|
||||||
|
dicts: ['product_series'],
|
||||||
|
props: {
|
||||||
|
dialogShow: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false
|
||||||
|
},
|
||||||
|
isSingle: {
|
||||||
|
type: Boolean,
|
||||||
|
default: true
|
||||||
|
},
|
||||||
|
materOptCode: {
|
||||||
|
type: String,
|
||||||
|
default: '00'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
dialogVisible: false,
|
||||||
|
classes: [],
|
||||||
|
tableRadio: null,
|
||||||
|
class_idStr: null,
|
||||||
|
checkrow: null,
|
||||||
|
rows: []
|
||||||
|
}
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
dialogShow: {
|
||||||
|
handler(newValue) {
|
||||||
|
this.dialogVisible = newValue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
clickChange(item) {
|
||||||
|
this.tableRadio = item
|
||||||
|
},
|
||||||
|
open() {
|
||||||
|
},
|
||||||
|
handleSelectionChange(val, row) {
|
||||||
|
if (val.length > 1 && this.isSingle) {
|
||||||
|
this.$refs.table.clearSelection()
|
||||||
|
this.$refs.table.toggleRowSelection(val.pop())
|
||||||
|
} else {
|
||||||
|
this.checkrow = row
|
||||||
|
}
|
||||||
|
},
|
||||||
|
onSelectAll() {
|
||||||
|
this.$refs.table.clearSelection()
|
||||||
|
},
|
||||||
|
close() {
|
||||||
|
this.crud.resetQuery(false)
|
||||||
|
this.$emit('update:dialogShow', false)
|
||||||
|
},
|
||||||
|
submit() {
|
||||||
|
// 处理单选
|
||||||
|
if (this.isSingle && this.tableRadio) {
|
||||||
|
this.$emit('update:dialogShow', false)
|
||||||
|
this.$emit('selectUsers', this.tableRadio)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
this.rows = this.$refs.table.selection
|
||||||
|
if (this.rows.length <= 0) {
|
||||||
|
this.$message('请先勾选用户')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
this.crud.resetQuery(false)
|
||||||
|
this.$emit('update:dialogShow', false)
|
||||||
|
this.$emit('selectUsers', this.rows)
|
||||||
|
// console.log(this.rows)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<style rel="stylesheet/scss" lang="scss" scoped>
|
||||||
|
::v-deep .el-dialog__body {
|
||||||
|
padding-top: 0px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
@@ -177,7 +177,9 @@
|
|||||||
<el-dropdown-item icon="el-icon-key">
|
<el-dropdown-item icon="el-icon-key">
|
||||||
<span @click="openDeptDrawer(scope.row)">部门权限</span>
|
<span @click="openDeptDrawer(scope.row)">部门权限</span>
|
||||||
</el-dropdown-item>
|
</el-dropdown-item>
|
||||||
<el-dropdown-item icon="el-icon-key">数据权限</el-dropdown-item>
|
<el-dropdown-item icon="el-icon-key">
|
||||||
|
<span @click="openDataDialog(scope.row)">数据权限</span>
|
||||||
|
</el-dropdown-item>
|
||||||
<el-dropdown-item icon="el-icon-key"><span @click="changeEnabled(scope.row)">{{ enabledTypeOptions.find(item => {return item.key !== scope.row.is_used}).display_name }}账号</span></el-dropdown-item>
|
<el-dropdown-item icon="el-icon-key"><span @click="changeEnabled(scope.row)">{{ enabledTypeOptions.find(item => {return item.key !== scope.row.is_used}).display_name }}账号</span></el-dropdown-item>
|
||||||
<el-dropdown-item icon="el-icon-circle-check">
|
<el-dropdown-item icon="el-icon-circle-check">
|
||||||
<span @click="openRoleDrawer(scope.row)">分配角色</span>
|
<span @click="openRoleDrawer(scope.row)">分配角色</span>
|
||||||
@@ -219,14 +221,14 @@
|
|||||||
/>
|
/>
|
||||||
<el-table
|
<el-table
|
||||||
v-if="!flag"
|
v-if="!flag"
|
||||||
highlight-current-row
|
|
||||||
ref="roleTable"
|
ref="roleTable"
|
||||||
|
highlight-current-row
|
||||||
style="width: 100%;"
|
style="width: 100%;"
|
||||||
:data="rolesDatas"
|
:data="rolesDatas"
|
||||||
@selection-change="crud.selectionChangeHandler"
|
@selection-change="crud.selectionChangeHandler"
|
||||||
>
|
>
|
||||||
<el-table-column type="selection" width="55"/>
|
<el-table-column type="selection" width="55" />
|
||||||
<el-table-column prop="name" label="角色名称" min-width="100" show-overflow-tooltip/>
|
<el-table-column prop="name" label="角色名称" min-width="100" show-overflow-tooltip />
|
||||||
</el-table>
|
</el-table>
|
||||||
</div>
|
</div>
|
||||||
<div style="height: 10%">
|
<div style="height: 10%">
|
||||||
@@ -235,12 +237,65 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</el-drawer>
|
</el-drawer>
|
||||||
|
<el-dialog
|
||||||
|
:close-on-click-modal="true"
|
||||||
|
:visible.sync="dataPerm"
|
||||||
|
title="数据权限"
|
||||||
|
width="700px"
|
||||||
|
>
|
||||||
|
<el-form ref="form" :inline="true" :model="dataDialog" :rules="rules" size="mini" label-width="100px">
|
||||||
|
<el-form-item label="用户名" prop="username">
|
||||||
|
<el-input v-model="dataDialog.username" disabled style="width: 200px;" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="姓名" prop="preson_name">
|
||||||
|
<el-input v-model="dataDialog.person_name" disabled style="width: 200px;" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-table
|
||||||
|
ref="dialogTable"
|
||||||
|
:data="dataDialog.dataScopeType"
|
||||||
|
style="width: 100%;"
|
||||||
|
@selection-change="getRows"
|
||||||
|
>
|
||||||
|
<el-table-column :selectable="checkboxT" type="selection" width="55" />
|
||||||
|
<el-table-column prop="label" label="权限范围" />
|
||||||
|
<el-table-column prop="permission_id" label="数据权限">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<el-select v-model="scope.row.permission_id" placeholder="请选择" @change="openRelevance(scope.row)">
|
||||||
|
<el-option
|
||||||
|
v-for="item in permissions"
|
||||||
|
:key="item.permission_id"
|
||||||
|
:label="item.name"
|
||||||
|
:value="item.permission_id"
|
||||||
|
/>
|
||||||
|
</el-select>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<!-- <el-table-column-->
|
||||||
|
<!-- label="操作"-->
|
||||||
|
<!-- fixed="right"-->
|
||||||
|
<!-- align="center"-->
|
||||||
|
<!-- width="80"-->
|
||||||
|
<!-- >-->
|
||||||
|
<!-- <template slot-scope="scope">-->
|
||||||
|
<!-- <el-button type="text" icon="el-icon-arrow-right" @click="openRelevance(scope.row)">关联</el-button>-->
|
||||||
|
<!-- </template>-->
|
||||||
|
<!-- </el-table-column>-->
|
||||||
|
</el-table>
|
||||||
|
</el-form>
|
||||||
|
<div slot="footer" class="dialog-footer">
|
||||||
|
<el-button @click="cancelDataPerm">取消</el-button>
|
||||||
|
<el-button type="primary" @click="savePermise()">确认</el-button>
|
||||||
|
</div>
|
||||||
|
</el-dialog>
|
||||||
|
<relevance-user-dialog :dialog-show.sync="relevanceUser" :is-single="false" @selectUsers="selectUsers" />
|
||||||
|
<relevance-dept-dialog :dialog-show.sync="relevanceDept" :is-single="false" @selectDepts="selectDepts"/>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import crudUser from '@/api/system/user'
|
import crudUser from '@/api/system/user'
|
||||||
import crudDept from '@/api/system/dept'
|
import crudDept from '@/api/system/dept'
|
||||||
|
import crudDataPermission from '@/views/system/permission/dataPermission'
|
||||||
import { getAll, getLevel } from '@/api/system/role'
|
import { getAll, getLevel } from '@/api/system/role'
|
||||||
import CRUD, { crud, form, header, presenter } from '@crud/crud'
|
import CRUD, { crud, form, header, presenter } from '@crud/crud'
|
||||||
import rrOperation from '@crud/RR.operation'
|
import rrOperation from '@crud/RR.operation'
|
||||||
@@ -250,6 +305,8 @@ import pagination from '@crud/Pagination'
|
|||||||
import Treeselect, { LOAD_CHILDREN_OPTIONS } from '@riophae/vue-treeselect'
|
import Treeselect, { LOAD_CHILDREN_OPTIONS } from '@riophae/vue-treeselect'
|
||||||
import { mapGetters } from 'vuex'
|
import { mapGetters } from 'vuex'
|
||||||
import '@riophae/vue-treeselect/dist/vue-treeselect.css'
|
import '@riophae/vue-treeselect/dist/vue-treeselect.css'
|
||||||
|
import RelevanceUserDialog from '@/views/system/user/dialog/relevanceUserDialog'
|
||||||
|
import RelevanceDeptDialog from '@/views/system/user/dialog/relevanceDeptDialog'
|
||||||
|
|
||||||
let userRoles = []
|
let userRoles = []
|
||||||
const defaultForm = {
|
const defaultForm = {
|
||||||
@@ -266,7 +323,7 @@ const defaultForm = {
|
|||||||
}
|
}
|
||||||
export default {
|
export default {
|
||||||
name: 'User',
|
name: 'User',
|
||||||
components: { Treeselect, crudOperation, rrOperation, udOperation, pagination },
|
components: { RelevanceDeptDialog, RelevanceUserDialog, Treeselect, crudOperation, rrOperation, udOperation, pagination },
|
||||||
cruds() {
|
cruds() {
|
||||||
return CRUD({ title: '用户', idField: 'user_id', url: 'api/users', crudMethod: { ...crudUser }})
|
return CRUD({ title: '用户', idField: 'user_id', url: 'api/users', crudMethod: { ...crudUser }})
|
||||||
},
|
},
|
||||||
@@ -306,7 +363,15 @@ export default {
|
|||||||
rolesDatas: [],
|
rolesDatas: [],
|
||||||
drawerTitle: '',
|
drawerTitle: '',
|
||||||
nodeKey: 'dept_id',
|
nodeKey: 'dept_id',
|
||||||
flag: true
|
flag: true,
|
||||||
|
dataPerm: false,
|
||||||
|
dataDialog: {},
|
||||||
|
permissions: [],
|
||||||
|
permission_id: '',
|
||||||
|
multipleSelection: [], // 选中
|
||||||
|
relevanceUser: false, // 关联用户
|
||||||
|
rowData: {}, // 当行数据
|
||||||
|
relevanceDept: false // 关联部门
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
@@ -570,6 +635,73 @@ export default {
|
|||||||
this.flag = false
|
this.flag = false
|
||||||
this.giveValue(row)
|
this.giveValue(row)
|
||||||
},
|
},
|
||||||
|
openDataDialog(row) {
|
||||||
|
// 清空数据 应该需要初始化赋值
|
||||||
|
this.dataDialog = {}
|
||||||
|
this.multipleSelection = []
|
||||||
|
// 获取权限范围
|
||||||
|
crudDataPermission.getDataScopeType().then(res => {
|
||||||
|
this.dataDialog.dataScopeType = res
|
||||||
|
// permissions
|
||||||
|
crudDataPermission.getDataPermissionOption().then(res => {
|
||||||
|
this.permissions = res
|
||||||
|
this.dataDialog.person_name = row.person_name
|
||||||
|
this.dataDialog.username = row.username
|
||||||
|
this.dataDialog.user_id = row.user_id
|
||||||
|
this.dataPerm = true
|
||||||
|
console.log(res)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
},
|
||||||
|
getRows(val) { // 获取行数据
|
||||||
|
this.multipleSelection = val
|
||||||
|
console.log(val)
|
||||||
|
},
|
||||||
|
openRelevance(row) {
|
||||||
|
console.log('关联的当行数据', row)
|
||||||
|
this.rowData = {}
|
||||||
|
if (row.permission_id == '1601040560293023744') { // 用户
|
||||||
|
this.rowData = row
|
||||||
|
this.relevanceUser = true
|
||||||
|
} else if (row.permission_id == '1601040621190123520') {
|
||||||
|
this.rowData = row
|
||||||
|
this.relevanceDept = true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
selectUsers(row) { // row对话框传来的数据
|
||||||
|
for (var i = 0; i < this.dataDialog.dataScopeType.length; i++) {
|
||||||
|
if (this.dataDialog.dataScopeType[i].dict_id == this.rowData.dict_id) {
|
||||||
|
if (this.dataDialog.dataScopeType[i].depts != undefined && this.dataDialog.dataScopeType[i].depts.length > 0) this.dataDialog.dataScopeType[i].depts = []
|
||||||
|
this.dataDialog.dataScopeType[i].users = row
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.rowData = {}
|
||||||
|
},
|
||||||
|
selectDepts(row) {
|
||||||
|
for (var i = 0; i < this.dataDialog.dataScopeType.length; i++) {
|
||||||
|
if (this.dataDialog.dataScopeType[i].dict_id == this.rowData.dict_id) {
|
||||||
|
if (this.dataDialog.dataScopeType[i].users != undefined && this.dataDialog.dataScopeType[i].users.length > 0) this.dataDialog.dataScopeType[i].users = []
|
||||||
|
this.dataDialog.dataScopeType[i].depts = row
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.rowData = {}
|
||||||
|
},
|
||||||
|
cancelDataPerm() {
|
||||||
|
this.dataPerm = false
|
||||||
|
},
|
||||||
|
savePermise() {
|
||||||
|
const param = {
|
||||||
|
user_id: this.dataDialog.user_id,
|
||||||
|
datas: this.multipleSelection
|
||||||
|
}
|
||||||
|
crudDataPermission.saveDataPermission(param).then(res => {
|
||||||
|
this.dataPerm = false
|
||||||
|
this.crud.notify('添加数据权限成功', CRUD.NOTIFICATION_TYPE.SUCCESS)
|
||||||
|
this.crud.toQuery()
|
||||||
|
})
|
||||||
|
},
|
||||||
openDrawer() {
|
openDrawer() {
|
||||||
this.syncDrawer = true
|
this.syncDrawer = true
|
||||||
this.depCheckedId = ''
|
this.depCheckedId = ''
|
||||||
|
|||||||
Reference in New Issue
Block a user