14 KiB
14 KiB
用户拓展
在用户现有字段基础上,自定义 拓展属性字段,新增拓展表,通过 user_id 字段关联用户。
创建实体类
实体类继承自 ink.wgink.pojo.dtos.user.UserDTO
import ink.wgink.pojo.dtos.user.UserDTO;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
public class UserExpandDTO extends UserDTO {
private String userExpandId;
private String title;
private String company;
private String summary;
public UserExpandDTO() {
}
public UserExpandDTO(UserDTO userDTO) {
setUserDTO(userDTO);
}
public void setUserDTO(UserDTO userDTO) {
super.setUserId(userDTO.getUserId());
super.setUserUsername(userDTO.getUserUsername());
super.setUserName(userDTO.getUserName());
super.setUserAvatar(userDTO.getUserAvatar());
super.setUserEmail(userDTO.getUserEmail());
super.setUserLatitude(userDTO.getUserLatitude());
super.setUserExpiredDate(userDTO.getUserExpiredDate());
super.setUserLongitude(userDTO.getUserLongitude());
super.setUserPhone(userDTO.getUserPhone());
super.setUserState(userDTO.getUserState());
super.setUserType(userDTO.getUserType());
super.setUserUKey(userDTO.getUserUKey());
super.setDepartmentIds(userDTO.getDepartmentIds());
super.setDepartmentNames(userDTO.getDepartmentNames());
super.setPositionIds(userDTO.getPositionIds());
super.setPositionNames(userDTO.getPositionNames());
super.setRoleIds(userDTO.getRoleIds());
super.setRoleNames(userDTO.getRoleNames());
super.setGmtCreate(userDTO.getGmtCreate());
super.setLastLoginAddress(userDTO.getLastLoginAddress());
super.setLastLoginTime(userDTO.getLastLoginTime());
super.setLoginType(userDTO.getLoginType());
}
}
新建接口
实现或继承接口 ink.wgink.interfaces.user.IUserExpandBaseService<UserExpandDTO extends UserDTO>
可以直接实现,也可以通过接口继承
import ink.wgink.interfaces.user.IUserExpandBaseService;
import java.util.List;
import java.util.Map;
public interface IUserExpandService extends IUserExpandBaseService<UserExpandDTO> {
/**
* 修改
*
* @param userId 用户ID
* @param userExpandVO 拓展属性
*/
void update(String userId, UserExpandVO userExpandVO);
/**
* 修改
*
* @param token
* @param userExpandVO
* @throws Exception
*/
void updateByToken(String token, UserExpandVO userExpandVO) throws Exception;
/**
* 用户拓展详情
*
* @param params
* @return
*/
UserExpandPO getPO(Map<String, Object> params);
/**
* 用户拓展详情
*
* @param userId
* @return
*/
UserExpandPO getPO(String userId);
/**
* 用户拓展列表
*
* @param params
* @return
*/
List<UserExpandPO> listPO(Map<String, Object> params);
/**
* 详情
*
* @param token
* @return
*/
UserExpandDTO getByToken(String token) throws Exception;
}
实现接口
当方法 getRoute
有返回值时,用户列表中会出现 拓展属性 按钮,用户通过点击按钮打开拓展属性的编辑页面。在编辑页面打开时,在 window.location.href
上会携带 userId
字段。
为了保证唯一,在提交时,需判断用户是否已经有值。如果有值则修改,反之新增。
示例代码中,没有完善的方法可根据情况自行处理。
import ink.wgink.interfaces.user.IUserBaseService;
import ink.wgink.pojo.ListPage;
import ink.wgink.pojo.dtos.user.UserDTO;
import ink.wgink.pojo.result.SuccessResultList;
import ink.wgink.util.map.HashMapUtil;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
@Service
public class UserExpandServiceImpl implements IUserExpandService {
@Autowired
private IUserExpandDao userExpandDao;
@Autowired
private IUserBaseService userBaseService;
@Override
public void update(String userId, UserExpandVO userExpandVO) {
UserExpandPO userExpandPO = getPO(userId);
if (userExpandPO != null) {
updateInfo(null, userId, userExpandVO);
} else {
saveInfo(null, userId, userExpandVO);
}
}
@Override
public void updateByToken(String token, UserExpandVO userExpandVO) throws Exception {
String userId = securityComponent.getAppTokenUser(token).getId();
UserExpandPO userExpandPO = getPO(userId);
if (userExpandPO != null) {
updateInfo(token, userId, userExpandVO);
} else {
saveInfo(token, userId, userExpandVO);
}
}
/**
* 保存
*
* @param token
* @param userId
* @param userExpandVO
*/
private void saveInfo(String token, String userId, UserExpandVO userExpandVO) {
Map<String, Object> params = HashMapUtil.beanToMap(userExpandVO);
params.put("userId", userId);
if (StringUtils.isNotBlank(token)) {
setAppSaveInfo(token, params);
} else {
setSaveInfo(params);
}
userExpandDao.save(params);
}
/**
* 修改
*
* @param token
* @param userId
* @param userExpandVO
*/
private void updateInfo(String token, String userId, UserExpandVO userExpandVO) {
Map<String, Object> params = HashMapUtil.beanToMap(userExpandVO);
params.put("userId", userId);
if (StringUtils.isNotBlank(token)) {
setAppUpdateInfo(token, params);
} else {
setUpdateInfo(params);
}
userExpandDao.update(params);
}
@Override
public UserExpandPO getPO(Map<String, Object> params) {
return userExpandDao.getPO(params);
}
@Override
public UserExpandPO getPO(String userId) {
Map<String, Object> params = getHashMap(2);
params.put("userId", userId);
return getPO(params);
}
@Override
public List<UserExpandPO> listPO(Map<String, Object> params) {
return userExpandDao.listPO(params);
}
@Override
public UserExpandDTO getByToken(String token) throws Exception {
String userId = securityComponent.getAppTokenUser(token).getId();
return get(userId);
}
@Override
public String getRoute() {
// 编辑页面的路径,只有详情页
return "route/userexpand/get.html";
}
private UserExpandDTO getDTO(Map<String, Object> params) {
return userExpandDao.get(params);
}
private UserExpandDTO getDTO(String userId) {
Map<String, Object> params = getHashMap(2);
params.put("userId", userId);
return getDTO(params);
}
@Override
public UserExpandDTO get(String userId) {
UserDTO userDTO = userBaseService.get(userId);
if (userDTO == null) {
return null;
}
UserExpandDTO userExpandDTO = getDTO(userId);
if (userExpandDTO == null) {
return new UserExpandDTO(userDTO);
}
userExpandDTO.setUserDTO(userDTO);
return userExpandDTO;
}
@Override
public UserExpandDTO getByUsername(String username) {
return null;
}
@Override
public List<UserExpandDTO> listByUserIds(List<String> userIds) {
return null;
}
@Override
public List<UserExpandDTO> listByUsernames(List<String> usernames) {
return null;
}
@Override
public List<UserExpandDTO> list(Map<String, Object> params) {
return null;
}
@Override
public SuccessResultList<List<UserExpandDTO>> listPage(ListPage page) {
return null;
}
@Override
public SuccessResultList<List<UserExpandDTO>> listPageByIds(List<String> userIds, ListPage page) {
return null;
}
@Override
public SuccessResultList<List<UserExpandDTO>> listPageByExcludeIds(List<String> excludeUserIds, ListPage page) {
return null;
}
@Override
public int countDateRange(String startDate, String endDate) {
return 0;
}
@Override
public int count() {
return 0;
}
@Override
public List<UserExpandDTO> listByKeywords(String keywords) {
return null;
}
}
页面
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
<link rel="stylesheet" href="assets/fonts/font-awesome/css/font-awesome.css"/>
<link rel="stylesheet" href="assets/layuiadmin/layui/css/layui.css" media="all">
<link rel="stylesheet" href="assets/layuiadmin/style/admin.css" media="all">
</head>
<body>
<div class="layui-anim layui-anim-fadein">
<div class="layui-card">
<div class="layui-card-body" style="padding: 15px;">
<form class="layui-form layui-form-pane" lay-filter="dataForm">
<div class="layui-row">
<div class="layui-form-item">
<label class="layui-form-label">职称</label>
<div class="layui-input-block">
<input type="text" name="title" lay-verify="required" placeholder="请输入职称" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">单位</label>
<div class="layui-input-block">
<input type="text" name="company" lay-verify="required" placeholder="请输入单位" class="layui-input">
</div>
</div>
<div class="layui-form-item layui-form-text">
<label class="layui-form-label">简介</label>
<div class="layui-input-block">
<textarea name="summary" placeholder="请输入简介" class="layui-textarea"></textarea>
</div>
</div>
</div>
<div class="layui-form-item layui-layout-admin">
<div class="layui-input-block">
<div class="layui-footer" style="left: 0;">
<button type="button" class="layui-btn" lay-submit lay-filter="submitForm">提交编辑</button>
<button type="button" class="layui-btn layui-btn-primary close">返回上级</button>
</div>
</div>
</div>
</form>
</div>
</div>
</div>
<script src="assets/layuiadmin/layui/layui.js"></script>
<script>
layui.config({
base: 'assets/layuiadmin/' //静态资源所在路径
}).extend({
index: 'lib/index' //主入口模块
}).use(['index', 'form', 'laydate'], function(){
var $ = layui.$;
var laydate = layui.laydate;
var form = layui.form;
var userId = top.restAjax.params(window.location.href).userId;
function closeBox() {
parent.layer.close(parent.layer.getFrameIndex(window.name));
}
function initDate() {}
initDate();
// 初始化
function initData() {
var self = this;
var loadLayerIndex;
top.restAjax.get(top.restAjax.path('api/user-expand/get/{userId}', [userId]), {}, null, function(code, data) {
form.val('dataForm', {
title: data.title,
company: data.company,
summary: data.summary
});
form.render(null, 'dataForm');
}, function(code, data) {
top.dialog.msg(data.msg);
}, function() {
loadLayerIndex = top.dialog.msg(top.dataMessage.loading, {icon: 16, time: 0, shade: 0.3});
}, function() {
top.dialog.close(loadLayerIndex);
});
}
initData();
// 提交表单
form.on('submit(submitForm)', function(formData) {
top.dialog.confirm(top.dataMessage.commit, function(index) {
top.dialog.close(index);
var loadLayerIndex;
top.restAjax.put(top.restAjax.path('api/user-expand/update/{userId}', [userId]), formData.field, null, function(code, data) {
var layerIndex = top.dialog.msg(top.dataMessage.commitSuccess, {
time: 0,
btn: [top.dataMessage.button.yes, top.dataMessage.button.no],
shade: 0.3,
yes: function(index) {
top.dialog.close(index);
window.location.reload();
},
btn2: function() {
closeBox();
}
});
}, function(code, data) {
top.dialog.msg(data.msg);
}, function() {
loadLayerIndex = top.dialog.msg(top.dataMessage.committing, {icon: 16, time: 0, shade: 0.3});
}, function() {
top.dialog.close(loadLayerIndex);
});
});
return false;
});
$('.close').on('click', function() {
closeBox();
});
});
</script>
</body>
</html>