会员升级
This commit is contained in:
@@ -26,6 +26,8 @@ public enum BpmProcessConstant {
|
||||
|
||||
MEMBER_SINGLE_APPLY("会员入会申请"),
|
||||
|
||||
MEMBER_CHANGE("会员变更申请"),
|
||||
|
||||
MEMBER_BRANCH_UNION_CHANGE("会员分工会变更"),
|
||||
|
||||
CLUB_JOIN("协会入会申请"),
|
||||
|
||||
@@ -1,12 +1,11 @@
|
||||
package com.budwk.app.sys.controller;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import com.budwk.app.base.constant.RoleConstant;
|
||||
import com.budwk.app.base.page.Pagination;
|
||||
import com.budwk.app.base.param.PageForm;
|
||||
import com.budwk.app.base.result.Result;
|
||||
import com.budwk.app.sys.models.Sys_union_group;
|
||||
import com.budwk.app.sys.models.Sys_user_role;
|
||||
import com.budwk.app.sys.models.Sys_unit;
|
||||
import com.budwk.app.sys.services.SysUnionGroupService;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
@@ -14,14 +13,18 @@ import lombok.extern.slf4j.Slf4j;
|
||||
import org.nutz.aop.interceptor.ioc.TransAop;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Dao;
|
||||
import org.nutz.dao.Sqls;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.ioc.aop.Aop;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
import org.nutz.mvc.annotation.Param;
|
||||
|
||||
import javax.validation.Valid;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
@IocBean
|
||||
@@ -81,10 +84,39 @@ public class SysUnionGroupController {
|
||||
@At
|
||||
@SaCheckPermission("sys.manager.union")
|
||||
@ApiOperation("获取非工会小组组长人员")
|
||||
public Result listUser(@Valid String unionId, String keyword) {
|
||||
List<NutMap> list = sysUnionGroupService.listNotLeader(unionId, keyword);
|
||||
public Result listUser(@Valid @Param("unionId") String unionId,
|
||||
@Param("keyword") String keyword,
|
||||
@Param("userIds") String[] userIds) {
|
||||
List<NutMap> list = sysUnionGroupService.listNotLeader(unionId, keyword, Arrays.asList(userIds));
|
||||
return Result.success(list);
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@SaCheckPermission("sys.manager.union")
|
||||
@ApiOperation("获取组成单位")
|
||||
public Result getUnits(String unionId, String groupId){
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
j.unitId
|
||||
FROM
|
||||
sys_union_group,
|
||||
JSON_TABLE (unitIds, '$[*]' COLUMNS (unitId VARCHAR (50) PATH '$')) AS j
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.and("unionId", "=", unionId);
|
||||
cnd.andEX("id", "!=", groupId);
|
||||
sql.setCondition(cnd);
|
||||
|
||||
sql.setCallback(Sqls.callback.strList());
|
||||
dao.execute(sql);
|
||||
List<String> list = sql.getList(String.class);
|
||||
|
||||
List<Sys_unit> unitList = dao.query(Sys_unit.class,
|
||||
Cnd.where("unionId", "=", unionId)
|
||||
.and("unitLevel", "=", 2)
|
||||
.andEX("id", "not in", list));
|
||||
return Result.success(unitList);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,6 +6,8 @@ import lombok.EqualsAndHashCode;
|
||||
import org.nutz.dao.entity.annotation.*;
|
||||
import org.nutz.dao.interceptor.annotation.PrevInsert;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Table("sys_union_group")
|
||||
@@ -23,6 +25,11 @@ public class Sys_union_group extends BaseModel {
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String unionId;
|
||||
|
||||
@Column
|
||||
@Comment("绑定单位Id集合")
|
||||
@ColDefine(type = ColType.MYSQL_JSON)
|
||||
private List<String> unitIds;
|
||||
|
||||
@Comment("名称")
|
||||
@Column
|
||||
@ColDefine(type = ColType.VARCHAR, width = 100)
|
||||
@@ -33,10 +40,9 @@ public class Sys_union_group extends BaseModel {
|
||||
@ColDefine(type = ColType.VARCHAR, width = 10)
|
||||
private String code;
|
||||
|
||||
@Comment("小组长")
|
||||
@Column
|
||||
@Comment("小组长")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String leader;
|
||||
|
||||
private List<String> leaders;
|
||||
|
||||
}
|
||||
|
||||
@@ -22,8 +22,9 @@ public interface SysUnionGroupService extends BaseService<Sys_union_group> {
|
||||
* 查询非组长的成员
|
||||
* @param unionId 分工会id
|
||||
* @param keyword 关键字
|
||||
* @param userIds 用户Id
|
||||
*/
|
||||
List<NutMap> listNotLeader(String unionId, String keyword);
|
||||
List<NutMap> listNotLeader(String unionId, String keyword, List<String> userIds);
|
||||
|
||||
/**
|
||||
* 分页查询
|
||||
|
||||
@@ -47,7 +47,7 @@ public class SysUnionGroupServiceImpl extends BaseServiceImpl<Sys_union_group> i
|
||||
throw new BaseException("小组编码已存在");
|
||||
}
|
||||
dao().insert(group);
|
||||
grantRole(group.getId(), group.getLeader());
|
||||
grantRole(group.getId(), group.getLeaders());
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -59,7 +59,7 @@ public class SysUnionGroupServiceImpl extends BaseServiceImpl<Sys_union_group> i
|
||||
throw new BaseException("小组编码已存在");
|
||||
}
|
||||
dao().updateIgnoreNull(group);
|
||||
grantRole(group.getId(), group.getLeader());
|
||||
grantRole(group.getId(), group.getLeaders());
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -72,14 +72,19 @@ public class SysUnionGroupServiceImpl extends BaseServiceImpl<Sys_union_group> i
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<NutMap> listNotLeader(String unionId, String keyword) {
|
||||
public List<NutMap> listNotLeader(String unionId, String keyword, List<String> userIds) {
|
||||
Sql sql = Sqls.create("select id,loginname,username,unitName from vw_user $condition limit 0,10");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.and("unionId", "=", unionId);
|
||||
SqlExpressionGroup seg = new SqlExpressionGroup();
|
||||
seg.orLike("username", keyword);
|
||||
seg.orLike("loginname", keyword);
|
||||
cnd.and(seg);
|
||||
if (StrUtil.isNotBlank(keyword)) {
|
||||
SqlExpressionGroup seg = new SqlExpressionGroup();
|
||||
seg.orLike("username", keyword);
|
||||
seg.orLike("loginname", keyword);
|
||||
cnd.and(seg);
|
||||
} else {
|
||||
cnd.and("id", "in", userIds);
|
||||
}
|
||||
|
||||
sql.setCondition(cnd);
|
||||
return listMap(sql);
|
||||
}
|
||||
@@ -88,12 +93,38 @@ public class SysUnionGroupServiceImpl extends BaseServiceImpl<Sys_union_group> i
|
||||
public Pagination pageData(PageForm pageForm, String unionId) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
t1.*,
|
||||
t2.username AS leaderUserName,
|
||||
t2.mobile AS leaderMobile
|
||||
t1.id,
|
||||
t1.`code`,
|
||||
t1.unionId,
|
||||
t1.`name`,
|
||||
t1.leaders,
|
||||
t1.unitIds,
|
||||
u_agg.unitInfos,
|
||||
l_agg.leaderInfos
|
||||
FROM
|
||||
sys_union_group t1
|
||||
LEFT JOIN sys_user t2 ON t2.id = t1.leader
|
||||
LEFT JOIN (
|
||||
SELECT
|
||||
tg.id,
|
||||
GROUP_CONCAT(u.NAME ORDER BY u.id) AS unitInfos
|
||||
FROM
|
||||
sys_union_group tg
|
||||
JOIN JSON_TABLE (tg.unitIds, '$[*]' COLUMNS (unitId VARCHAR (50) PATH '$')) ju
|
||||
JOIN sys_unit u ON u.id = ju.unitId
|
||||
GROUP BY
|
||||
tg.id
|
||||
) u_agg ON u_agg.id = t1.id
|
||||
LEFT JOIN (
|
||||
SELECT
|
||||
tg.id,
|
||||
GROUP_CONCAT(CONCAT(u1.username, '(', u1.loginname, ')') ORDER BY u1.username) AS leaderInfos
|
||||
FROM
|
||||
sys_union_group tg
|
||||
JOIN JSON_TABLE (tg.leaders, '$[*]' COLUMNS (userId VARCHAR (50) PATH '$')) jl
|
||||
JOIN sys_user u1 ON u1.id = jl.userId
|
||||
GROUP BY
|
||||
tg.id
|
||||
) l_agg ON l_agg.id = t1.id
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
@@ -124,16 +155,19 @@ public class SysUnionGroupServiceImpl extends BaseServiceImpl<Sys_union_group> i
|
||||
* @param groupId 小组id
|
||||
* @param groupLeader 组长id
|
||||
*/
|
||||
private void grantRole(String groupId, String groupLeader) {
|
||||
private void grantRole(String groupId, List<String> groupLeader) {
|
||||
// 小组长权限
|
||||
Sys_role unionGroupRole = sysRoleService.getByCode(RoleConstant.BRANCH_UNION_GROUP_LEADER.name());
|
||||
deleteUserRole(groupId, unionGroupRole.getId());
|
||||
|
||||
Sys_user_role userRole = new Sys_user_role();
|
||||
userRole.setRoleId(unionGroupRole.getId());
|
||||
userRole.setUnionGroupId(groupId);
|
||||
userRole.setUserId(groupLeader);
|
||||
dao().insert(userRole);
|
||||
List<Sys_user_role> roleList = groupLeader.stream().map(v -> {
|
||||
Sys_user_role userRole = new Sys_user_role();
|
||||
userRole.setRoleId(unionGroupRole.getId());
|
||||
userRole.setUnionGroupId(groupId);
|
||||
userRole.setUserId(v);
|
||||
return userRole;
|
||||
}).toList();
|
||||
dao().insert(roleList);
|
||||
|
||||
sysUserService.clearCache();
|
||||
sysRoleService.clearCache();
|
||||
|
||||
@@ -17,6 +17,7 @@ import com.budwk.app.sys.models.*;
|
||||
import com.budwk.app.sys.services.SysMenuService;
|
||||
import com.budwk.app.sys.services.SysRoleService;
|
||||
import com.budwk.app.sys.services.SysUserService;
|
||||
import com.budwk.app.sys.views.View_user;
|
||||
import com.budwk.app.web.commons.base.Globals;
|
||||
import org.nutz.aop.interceptor.ioc.TransAop;
|
||||
import org.nutz.dao.Chain;
|
||||
@@ -387,7 +388,17 @@ public class SysUserServiceImpl extends BaseServiceImpl<Sys_user> implements Sys
|
||||
|
||||
StpUtil.login(user.getId());
|
||||
StpUtil.checkLogin();
|
||||
StpUtil.getSession(true).set("loginname", Strings.sNull(user.getLoginname())).set("username", Strings.sNull(user.getUsername())).set("unitId", Strings.sNull(user.getUnitId())).set("unitPath", Strings.sNull(user.getUnitPath())).set("unionId", ObjectUtil.isEmpty(user.getUnion()) ? "" : user.getUnion().getId());
|
||||
// 查询一下视图,存储一些sys_user表中没有的字段
|
||||
View_user viewUser = dao().fetch(View_user.class, Cnd.where("id", "=", user.getId()));
|
||||
StpUtil.getSession(true)
|
||||
.set("loginname", Strings.sNull(user.getLoginname()))
|
||||
.set("username", Strings.sNull(user.getUsername()))
|
||||
.set("unitId", Strings.sNull(user.getUnitId()))
|
||||
.set("unitPath", Strings.sNull(user.getUnitPath()))
|
||||
.set("unionId", ObjectUtil.isEmpty(user.getUnion()) ? "" : user.getUnion().getId())
|
||||
.set("unionGroupId", Strings.sNull(viewUser.getUnionGroupId()))
|
||||
.set("clubIds", Strings.sNull(viewUser.getClubIds()));
|
||||
|
||||
Sys_log sysLog = new Sys_log();
|
||||
sysLog.setType("info");
|
||||
sysLog.setTag("用户登陆");
|
||||
|
||||
@@ -177,4 +177,16 @@ public class View_user {
|
||||
private Date memberJoinTime;
|
||||
|
||||
private Date memberLeaveTime;
|
||||
|
||||
@Column
|
||||
private String unionGroupId;
|
||||
|
||||
@Column
|
||||
private String unionGroupName;
|
||||
|
||||
@Column
|
||||
private String clubIds;
|
||||
|
||||
@Column
|
||||
private Boolean aidFundMember;
|
||||
}
|
||||
|
||||
@@ -4,30 +4,67 @@ import cn.dev33.satoken.session.SaSession;
|
||||
import cn.dev33.satoken.stp.StpUtil;
|
||||
import org.nutz.lang.Strings;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author wizzer@qq.com
|
||||
*/
|
||||
public class SecurityUtil {
|
||||
|
||||
/**
|
||||
* 获取当前用户ID
|
||||
*/
|
||||
public static String getUserId() {
|
||||
return Strings.sNull(StpUtil.getLoginId(""));
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取当前用户登录名
|
||||
*/
|
||||
public static String getUserLoginname() {
|
||||
return Strings.sNull(getSession().get("loginname"));
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取当前用户姓名
|
||||
*/
|
||||
public static String getUserUsername() {
|
||||
return Strings.sNull(getSession().get("username"));
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取当前用户单位ID
|
||||
*/
|
||||
public static String getUnitId() {
|
||||
return Strings.sNull(getSession().get("unitId"));
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取当前用户工会ID
|
||||
*/
|
||||
public static String getUnionId() {
|
||||
return Strings.sNull(getSession().get("unionId"));
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取当前用户工会小组ID
|
||||
*/
|
||||
public static String getUnionGroupId() {
|
||||
return Strings.sNull(getSession().get("unionGroupId"));
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取当前用户协会ID
|
||||
*/
|
||||
public static List<String> getClubIds() {
|
||||
String clubIds = getSession().get("clubIds").toString();
|
||||
return Arrays.stream(clubIds.split(",")).toList();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取当前用户Session
|
||||
*/
|
||||
public static SaSession getSession() {
|
||||
return StpUtil.getSession(true);
|
||||
}
|
||||
|
||||
+1
-1
@@ -194,7 +194,7 @@ public class BuildHomeAgencyController {
|
||||
@SaCheckPermission("buildHome.agency")
|
||||
@ApiOperation("获取非工会小组组长人员")
|
||||
public Result listUser(@Valid String keyword) {
|
||||
List<NutMap> list = sysUnionGroupService.listNotLeader(SecurityUtil.getUnionId(), keyword);
|
||||
List<NutMap> list = sysUnionGroupService.listNotLeader(SecurityUtil.getUnionId(), keyword, null);
|
||||
return Result.success(list);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.budwk.app.zhgh.staffmanage.member.constant;
|
||||
|
||||
import com.budwk.app.base.annotation.DictEnum;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
|
||||
@@ -12,15 +13,40 @@ import lombok.Getter;
|
||||
*/
|
||||
@Getter
|
||||
@AllArgsConstructor
|
||||
@DictEnum(key = "MemberChangeType", name = "会员变更类型")
|
||||
public enum MemberChangeType {
|
||||
|
||||
//变更类型
|
||||
NEW("新入职"),
|
||||
RESTORE("入会"),
|
||||
WITHDRAWAL("退会"),
|
||||
UNIT_CHANGE("单位异动"),
|
||||
BASIC_CHANGE("基本信息异动");
|
||||
NEW("NEW", "新入职"),
|
||||
RESTORE("RESTORE", "入会"),
|
||||
WITHDRAWAL("WITHDRAWAL", "退会"),
|
||||
|
||||
ON_DUTY("ON_DUTY", "在岗"),
|
||||
POSTDOC("POSTDOC", "在站"),
|
||||
NONE("NONE", "无"),
|
||||
OTHER("OTHER", "其他"),
|
||||
|
||||
QUIT("QUIT", "辞职"),
|
||||
OUT_TRANSFER("OUT_TRANSFER", "调出"),
|
||||
RETIRE("RETIRE", "退休"),
|
||||
CONTRACT_END("CONTRACT_END", "合同到期"),
|
||||
LEAVE("LEAVE", "离职"),
|
||||
|
||||
DISMISS("DISMISS", "辞退"),
|
||||
DISCHARGE("DISCHARGE", "退站"),
|
||||
EXPIRE("EXPIRE", "不保留编制"),
|
||||
POST_EXIT("POST_EXIT", "出站"),
|
||||
TERMINATE("TERMINATE", "解聘"),
|
||||
REMOVE("REMOVE", "除名"),
|
||||
|
||||
RETIRE_DEATH("RETIRE_DEATH", "离休死亡"),
|
||||
DEATH("DEATH", "死亡"),
|
||||
POST_DEATH("POST_DEATH", "退休死亡"),
|
||||
|
||||
UNIT_CHANGE("UNIT_CHANGE", "单位异动"),
|
||||
UNION_CHANGE("UNION_CHANGE", "工会关系异动"),
|
||||
BASIC_CHANGE("BASIC_CHANGE", "基本信息异动");
|
||||
|
||||
private final String code;
|
||||
private final String changeTypeName;
|
||||
}
|
||||
|
||||
+21
-52
@@ -19,11 +19,10 @@ import com.budwk.app.web.commons.auth.utils.AuthUtil;
|
||||
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
|
||||
import com.budwk.app.web.controllers.open.commons.service.CommonService;
|
||||
import com.budwk.app.zhgh.staffmanage.member.models.MemberApplyRecord;
|
||||
import com.budwk.app.zhgh.staffmanage.member.param.pageform.MemberApplyBranchAuditPageForm;
|
||||
import com.budwk.app.zhgh.staffmanage.member.param.pageform.MemberApplyPageForm;
|
||||
import com.budwk.app.zhgh.staffmanage.member.service.MemberApplyRecordService;
|
||||
import com.budwk.app.zhgh.staffmanage.member.service.MemberManageService;
|
||||
import com.budwk.app.zhgh.staffmanage.member.vo.MemberApplyVo;
|
||||
import com.budwk.app.zhgh.staffmanage.member.service.MemberCommonService;
|
||||
import com.budwk.app.zhgh.staffmanage.member.vo.MemberCommonVo;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.nutz.aop.interceptor.ioc.TransAop;
|
||||
import org.nutz.dao.Cnd;
|
||||
@@ -48,18 +47,16 @@ import java.util.Map;
|
||||
* 会员入会申请分工会审核
|
||||
*/
|
||||
@IocBean
|
||||
@At("/platform/member/apply/branchUnionAudit")
|
||||
@Ok("json:full")
|
||||
@At("/platform/member/apply/branchUnionAudit")
|
||||
public class MemberApplyBranchUnionAuditController {
|
||||
|
||||
@Inject
|
||||
private MemberApplyRecordService memberApplyRecordService;
|
||||
@Inject
|
||||
private MemberManageService memberManageService;
|
||||
@Inject
|
||||
private BpmService bpmService;
|
||||
@Inject
|
||||
private CommonService commonService;
|
||||
@Inject
|
||||
private MemberCommonService memberManageService;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/staffmanage/member/apply/branchunionaudit/index.html")
|
||||
@@ -72,21 +69,17 @@ public class MemberApplyBranchUnionAuditController {
|
||||
public Result pageData(MemberApplyPageForm pageForm) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
record.id,
|
||||
vu.id AS userId,
|
||||
vu.username,
|
||||
vu.loginname,
|
||||
record.changeType,
|
||||
record.changeTypes,
|
||||
record.changeOrigin,
|
||||
record.applyDateTime,
|
||||
record.unitId,
|
||||
IFNULL(record.unionId, vu.unionid) AS unionId,
|
||||
vu.unionname AS unionName,
|
||||
IFNULL(record.unitName, vu.unitname) AS unitName,
|
||||
IFNULL(record.userState, vu.userState) AS userState,
|
||||
IFNULL(record.preparedBy, vu.preparedBy) AS preparedBy,
|
||||
IFNULL(record.personType, vu.personType) AS personType,
|
||||
info.id,
|
||||
info.username,
|
||||
info.loginname,
|
||||
info.sex,
|
||||
info.unitName,
|
||||
info.unionName,
|
||||
info.userState,
|
||||
info.preparedBy,
|
||||
info.personType,
|
||||
info.changeTypes,
|
||||
info.applyDateTime,
|
||||
inst.id processInstanceId,
|
||||
inst.processInstanceNodeId,
|
||||
inst.processInstanceNodeName,
|
||||
@@ -100,17 +93,16 @@ public class MemberApplyBranchUnionAuditController {
|
||||
INNER JOIN bpm_process_node_define nd ON nd.id = task.processTaskNodeId
|
||||
INNER JOIN bpm_process_instance inst ON inst.id = task.processInstanceId
|
||||
INNER JOIN bpm_process_define define On inst.processDefineId = define.id
|
||||
INNER JOIN member_apply_record record ON record.id = inst.processInstanceBusinessId
|
||||
INNER JOIN member_apply_record info ON info.id = inst.processInstanceBusinessId
|
||||
LEFT JOIN bpm_process_task nt ON nt.prevTaskId = task.id AND nt.taskStatus = 'COMPLETE'
|
||||
LEFT JOIN vw_user vu ON vu.id = record.userId
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
MemberApplyPageForm.buildSearch(cnd, pageForm);
|
||||
pageForm.buildSearch(cnd, "info.");
|
||||
if(!AuthUtil.hasRole(RoleConstant.SYSADMIN.name())){
|
||||
cnd.and(new Static("JSON_CONTAINS( task.assignments, '\"%s\"' )".formatted(SecurityUtil.getUserLoginname())));
|
||||
}
|
||||
cnd.and("nd.nodeCode","=",20);
|
||||
cnd.and("nd.nodeCode","=",50);
|
||||
if (pageForm.getAudit() != null) {
|
||||
if (pageForm.getAudit()) {
|
||||
cnd.and("task.taskStatus", "=", BpmProcessTaskStatusEnum.COMPLETE);
|
||||
@@ -120,9 +112,9 @@ public class MemberApplyBranchUnionAuditController {
|
||||
}
|
||||
cnd.and("define.`code`", "=", BpmProcessConstant.MEMBER_SINGLE_APPLY.name());
|
||||
cnd.desc("task.createdOn");
|
||||
cnd.groupBy("record.id");
|
||||
cnd.groupBy("info.id");
|
||||
sql.setCondition(cnd);
|
||||
Pagination<MemberApplyVo> listPageVO = memberApplyRecordService.listPageVO(pageForm, sql, MemberApplyVo.class);
|
||||
Pagination<MemberCommonVo> listPageVO = memberManageService.listPageVO(pageForm, sql, MemberCommonVo.class);
|
||||
return Result.success(listPageVO);
|
||||
}
|
||||
|
||||
@@ -155,29 +147,6 @@ public class MemberApplyBranchUnionAuditController {
|
||||
bpmService.revokeTask(taskId);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 获取变更信息,审核
|
||||
* @param recordId
|
||||
* @return
|
||||
*/
|
||||
@At
|
||||
@SaCheckPermission(value = {"member.apply.branchUnionAudit","member.apply.mine","member.apply.schoolUnionAudit"}, mode = SaMode.OR)
|
||||
public Result findAuditChangeInfo(@Valid String recordId) {
|
||||
Sys_user_history history = memberApplyRecordService.dao().fetch(Sys_user_history.class, Cnd.where("recordId", "=", recordId).or("id","=",recordId));
|
||||
MemberApplyRecord record = memberApplyRecordService.dao().fetch(MemberApplyRecord.class, recordId);
|
||||
if (ObjectUtil.isAllEmpty(history, record)) {
|
||||
return Result.error("获取变更信息失败");
|
||||
}
|
||||
List<BpmTaskApprovalRecordVo> nodeTasks = bpmService.getNodeTasks(BpmProcessConstant.MEMBER_SINGLE_APPLY, recordId);
|
||||
if (Lang.isNotEmpty(history)) {
|
||||
List<NutMap> nutMaps = memberManageService.compareMemberChangeInfo(history);
|
||||
return Result.success(NutMap.NEW().addv("changeList", nutMaps).addv("nodeTasks", nodeTasks));
|
||||
}
|
||||
List<NutMap> nutMaps = memberManageService.compareMemberChangeInfo(record);
|
||||
return Result.success(NutMap.NEW().addv("changeList", nutMaps).addv("nodeTasks", nodeTasks));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
+40
-8
@@ -10,6 +10,7 @@ import com.budwk.app.base.constant.RoleConstant;
|
||||
import com.budwk.app.base.page.Pagination;
|
||||
import com.budwk.app.base.result.Result;
|
||||
import com.budwk.app.bpm.service.BpmService;
|
||||
import com.budwk.app.sys.models.Sys_union_group;
|
||||
import com.budwk.app.sys.models.Sys_user;
|
||||
import com.budwk.app.web.commons.auth.utils.AuthUtil;
|
||||
import com.budwk.app.sys.views.View_user;
|
||||
@@ -28,10 +29,13 @@ import org.nutz.dao.util.cri.Static;
|
||||
import org.nutz.ioc.aop.Aop;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.lang.Lang;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
|
||||
import javax.validation.Valid;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
@@ -101,17 +105,34 @@ public class MemberApplyController {
|
||||
record.setChangeType(MemberChangeType.RESTORE.name());
|
||||
record.setChangeTypes(List.of(MemberChangeType.RESTORE.name()));
|
||||
dao.insertOrUpdate(record);
|
||||
//设置分工会审核人
|
||||
List<Sys_user> users = commonService.findUserInfoByRoleCode("unionId", SecurityUtil.getUnionId(), RoleConstant.BRANCH_UNION_CHAIRMAN.name());
|
||||
if (ObjectUtil.isEmpty(users)) {
|
||||
return Result.error("您的分工会没有设置审核人,请联系校工会!");
|
||||
}
|
||||
List<Sys_user> operatorUsers = commonService.findUserInfoByRoleCode("unionId", SecurityUtil.getUnionId(), RoleConstant.BRANCH_UNION_OPERATOR.name());
|
||||
|
||||
List<Sys_user> assignments = Stream.concat(users.stream(), operatorUsers.stream()).distinct().toList();
|
||||
HashMap<String, Object> variables = new HashMap<>();
|
||||
// 审核人工号集合
|
||||
List<String> assignments = new ArrayList<>();
|
||||
|
||||
// 去查询申请人的单位有没有工会小组
|
||||
Sys_union_group group = dao.fetch(Sys_union_group.class, Cnd.where(Sys_union_group::getUnionId, "=", SecurityUtil.getUnionId())
|
||||
.and(new Static("JSON_CONTAINS(unitIds, '\"%s\"')".formatted(SecurityUtil.getUnitId()))));
|
||||
if (Lang.isNotEmpty(group)) {
|
||||
List<Sys_user> query = dao.query(Sys_user.class, Cnd.where("id", "in", group.getLeaders()));
|
||||
assignments = query.stream().map(Sys_user::getLoginname).toList();
|
||||
// 有小组,走工会小组审核
|
||||
variables.put("processType", "unionGroup");
|
||||
} else {
|
||||
//设置分工会审核人
|
||||
List<Sys_user> users = commonService.findUserInfoByRoleCode("unionId", SecurityUtil.getUnionId(), RoleConstant.BRANCH_UNION_CHAIRMAN.name());
|
||||
if (ObjectUtil.isEmpty(users)) {
|
||||
return Result.error("您的分工会没有设置审核人,请联系校工会!");
|
||||
}
|
||||
List<Sys_user> operatorUsers = commonService.findUserInfoByRoleCode("unionId", SecurityUtil.getUnionId(), RoleConstant.BRANCH_UNION_OPERATOR.name());
|
||||
assignments = Stream.concat(users.stream(), operatorUsers.stream()).distinct().toList().stream().map(Sys_user::getLoginname).toList();
|
||||
|
||||
// 没有小组,走分工会审核
|
||||
variables.put("processType", "branchUnion");
|
||||
}
|
||||
|
||||
bpmservice.startSubmitProcessInstance(BpmProcessConstant.MEMBER_SINGLE_APPLY.name(),
|
||||
"【会员入会申请】" + record.getUsername(), record.getId(), assignments.stream().map(Sys_user::getLoginname).toList(), null);
|
||||
"【会员变更申请】" + record.getUsername(), record.getId(), assignments, variables);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
@@ -152,4 +173,15 @@ public class MemberApplyController {
|
||||
return Result.success(dao.fetch(View_user.class, Cnd.where("id", "=", SecurityUtil.getUserId())));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 获取当前登录用户信息,是用来判断当前用户是否是会员
|
||||
* @return
|
||||
*/
|
||||
@At
|
||||
@ApiOperation("获取当前登录用户信息")
|
||||
@SaCheckPermission("member.apply.submit")
|
||||
public Result getSelfUserInfo() {
|
||||
return Result.success(dao.fetch(View_user.class, Cnd.where("id", "=", SecurityUtil.getUserId())));
|
||||
}
|
||||
}
|
||||
|
||||
+35
-57
@@ -1,14 +1,11 @@
|
||||
package com.budwk.app.zhgh.staffmanage.member.controller.apply;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import cn.dev33.satoken.annotation.SaMode;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.budwk.app.base.annotation.SLog;
|
||||
import com.budwk.app.base.constant.BpmProcessConstant;
|
||||
import com.budwk.app.base.constant.RoleConstant;
|
||||
import com.budwk.app.base.page.Pagination;
|
||||
import com.budwk.app.base.param.PageForm;
|
||||
import com.budwk.app.base.result.Result;
|
||||
import com.budwk.app.bpm.service.BpmService;
|
||||
import com.budwk.app.bpm.vo.BpmTaskApprovalRecordVo;
|
||||
@@ -18,11 +15,12 @@ import com.budwk.app.web.commons.auth.utils.SecurityUtil;
|
||||
import com.budwk.app.zhgh.staffmanage.member.models.MemberApplyRecord;
|
||||
import com.budwk.app.zhgh.staffmanage.member.param.pageform.MemberApplyPageForm;
|
||||
import com.budwk.app.zhgh.staffmanage.member.service.MemberApplyRecordService;
|
||||
import com.budwk.app.zhgh.staffmanage.member.service.MemberManageService;
|
||||
import com.budwk.app.zhgh.staffmanage.member.vo.MemberApplyVo;
|
||||
import com.budwk.app.zhgh.staffmanage.member.service.MemberCommonService;
|
||||
import com.budwk.app.zhgh.staffmanage.member.vo.MemberCommonVo;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.nutz.aop.interceptor.ioc.TransAop;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Dao;
|
||||
import org.nutz.dao.Sqls;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.ioc.aop.Aop;
|
||||
@@ -34,7 +32,6 @@ import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
|
||||
import javax.validation.Valid;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
@@ -46,11 +43,11 @@ import java.util.List;
|
||||
public class MemberApplyMineController {
|
||||
|
||||
@Inject
|
||||
private MemberApplyRecordService memberApplyRecordService;
|
||||
private Dao dao;
|
||||
@Inject
|
||||
private BpmService bpmService;
|
||||
@Inject
|
||||
private MemberManageService memberManageService;
|
||||
private MemberCommonService memberManageService;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/staffmanage/member/apply/mine/index.html")
|
||||
@@ -64,21 +61,17 @@ public class MemberApplyMineController {
|
||||
public Result pageData(MemberApplyPageForm pageForm) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
record.id,
|
||||
vu.id AS userId,
|
||||
vu.username,
|
||||
vu.loginname,
|
||||
record.changeType,
|
||||
record.changeTypes,
|
||||
record.changeOrigin,
|
||||
record.applyDateTime,
|
||||
record.unitId,
|
||||
IFNULL(record.unionId, vu.unionid) AS unionId,
|
||||
vu.unionname AS unionName,
|
||||
IFNULL(record.unitName, vu.unitname) AS unitName,
|
||||
IFNULL(record.userState, vu.userState) AS userState,
|
||||
IFNULL(record.preparedBy, vu.preparedBy) AS preparedBy,
|
||||
IFNULL(record.personType, vu.personType) AS personType,
|
||||
info.id,
|
||||
info.username,
|
||||
info.loginname,
|
||||
info.sex,
|
||||
info.unitName,
|
||||
info.unionName,
|
||||
info.userState,
|
||||
info.preparedBy,
|
||||
info.personType,
|
||||
info.changeTypes,
|
||||
info.applyDateTime,
|
||||
inst.id processInstanceId,
|
||||
inst.processInstanceNodeId,
|
||||
inst.processInstanceNodeCode,
|
||||
@@ -95,31 +88,31 @@ public class MemberApplyMineController {
|
||||
WHERE
|
||||
prevTaskId = ( SELECT id FROM bpm_process_task WHERE processInstanceId = inst.id AND processTaskNodeCode IN ( 10, 40, 70 ) ORDER BY createdAt DESC LIMIT 1 )
|
||||
AND taskStatus = 'COMPELTE'
|
||||
) AS nextTaskIsComplete
|
||||
) AS nextTaskIsComplete,
|
||||
( SELECT name FROM sys_union_group WHERE info.unitId = unitId ) AS groupName
|
||||
FROM
|
||||
bpm_process_task task
|
||||
INNER JOIN bpm_process_node_define nd ON nd.id = task.processTaskNodeId
|
||||
INNER JOIN bpm_process_instance inst ON inst.id = task.processInstanceId
|
||||
INNER JOIN bpm_process_define define On inst.processDefineId = define.id
|
||||
INNER JOIN member_apply_record record ON record.id = inst.processInstanceBusinessId
|
||||
INNER JOIN member_apply_record info ON info.id = inst.processInstanceBusinessId
|
||||
LEFT JOIN bpm_process_task nt ON nt.prevTaskId = task.id AND nt.taskStatus = 'COMPLETE'
|
||||
LEFT JOIN vw_user vu ON vu.id = record.userId
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
MemberApplyPageForm.buildSearch(cnd, pageForm);
|
||||
pageForm.buildSearch(cnd, "info.");
|
||||
cnd.and("nd.nodeCode", "=", 10);
|
||||
cnd.and("define.`code`", "=", BpmProcessConstant.MEMBER_SINGLE_APPLY.name());
|
||||
if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) {
|
||||
if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_MEMBER_ADMIN.name())) {
|
||||
if (AuthUtil.hasRole(RoleConstant.BRANCH_UNION_CHAIRMAN.name())) {
|
||||
cnd.andEX("vu.unionId","=", SecurityUtil.getUnionId());
|
||||
cnd.and("info.unionId", "=", SecurityUtil.getUnionId());
|
||||
} else {
|
||||
cnd.and("vu.id", "=", SecurityUtil.getUserId());
|
||||
cnd.and("info.userId", "=", SecurityUtil.getUserId());
|
||||
}
|
||||
}
|
||||
cnd.desc("record.applyDateTime");
|
||||
cnd.desc("info.applyDateTime");
|
||||
sql.setCondition(cnd);
|
||||
Pagination<MemberApplyVo> listPageVO = memberApplyRecordService.listPageVO(pageForm, sql, MemberApplyVo.class);
|
||||
Pagination<MemberCommonVo> listPageVO = memberManageService.listPageVO(pageForm, sql, MemberCommonVo.class);
|
||||
return Result.success(listPageVO);
|
||||
}
|
||||
|
||||
@@ -129,7 +122,7 @@ public class MemberApplyMineController {
|
||||
@SaCheckPermission("member.apply.mine")
|
||||
@SLog(tag = "会员管理-入会申请-我的申请记录", msg = "删除申请")
|
||||
public Result delete(@Valid String id) {
|
||||
memberApplyRecordService.delete(id);
|
||||
dao.clear(MemberApplyRecord.class, Cnd.where("id", "=", id));
|
||||
bpmService.deleteInstance(id);
|
||||
return Result.success();
|
||||
}
|
||||
@@ -147,34 +140,19 @@ public class MemberApplyMineController {
|
||||
|
||||
|
||||
/**
|
||||
* 获取变更信息,审核
|
||||
* @param recordId
|
||||
* 获取审核信息
|
||||
* @param id
|
||||
* @return
|
||||
*/
|
||||
@At
|
||||
@SaCheckPermission("member.apply.mine")
|
||||
public Result findAuditChangeInfo(@Valid String recordId) {
|
||||
MemberApplyRecord record = new MemberApplyRecord();
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.and(Cnd.exps("recordId", "=", recordId).or("id","=",recordId));
|
||||
if (!AuthUtil.hasRole(RoleConstant.SYSADMIN.name())) {
|
||||
cnd.and("loginname", "=", SecurityUtil.getUserLoginname());
|
||||
record = memberApplyRecordService.dao().fetch(MemberApplyRecord.class, Cnd.where("loginname", "=", SecurityUtil.getUserLoginname())
|
||||
.and("id", "=", recordId));
|
||||
} else {
|
||||
record = memberApplyRecordService.dao().fetch(MemberApplyRecord.class, recordId);
|
||||
}
|
||||
Sys_user_history history = memberApplyRecordService.dao().fetch(Sys_user_history.class, cnd);
|
||||
public Result findMemberApplyRecord(@Valid String id) {
|
||||
MemberApplyRecord record = dao.fetch(MemberApplyRecord.class, id);
|
||||
NutMap nutMap = Lang.obj2nutmap(record);
|
||||
|
||||
if (ObjectUtil.isAllEmpty(history, record)) {
|
||||
return Result.error("您暂无权限查询");
|
||||
}
|
||||
List<BpmTaskApprovalRecordVo> nodeTasks = bpmService.getNodeTasks(BpmProcessConstant.MEMBER_SINGLE_APPLY, recordId);
|
||||
if (Lang.isNotEmpty(history)) {
|
||||
List<NutMap> nutMaps = memberManageService.compareMemberChangeInfo(history);
|
||||
return Result.success(NutMap.NEW().addv("changeList", nutMaps).addv("nodeTasks", nodeTasks));
|
||||
}
|
||||
List<NutMap> nutMaps = memberManageService.compareMemberChangeInfo(record);
|
||||
return Result.success(NutMap.NEW().addv("changeList", nutMaps).addv("nodeTasks", nodeTasks));
|
||||
List<BpmTaskApprovalRecordVo> nodeTasks = bpmService.getNodeTasks(BpmProcessConstant.MEMBER_SINGLE_APPLY, id);
|
||||
nutMap.put("nodeTasks", nodeTasks);
|
||||
|
||||
return Result.success().addData(nutMap);
|
||||
}
|
||||
}
|
||||
|
||||
+30
-54
@@ -13,6 +13,7 @@ import com.budwk.app.bpm.enums.BpmTaskApprovalTypeEnum;
|
||||
import com.budwk.app.bpm.param.BpmTaskApprovalParam;
|
||||
import com.budwk.app.bpm.service.BpmService;
|
||||
import com.budwk.app.bpm.vo.BpmTaskApprovalRecordVo;
|
||||
import com.budwk.app.sys.models.Sys_user;
|
||||
import com.budwk.app.sys.models.Sys_user_history;
|
||||
import com.budwk.app.web.commons.auth.utils.AuthUtil;
|
||||
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
|
||||
@@ -20,11 +21,12 @@ import com.budwk.app.web.controllers.open.commons.service.CommonService;
|
||||
import com.budwk.app.zhgh.staffmanage.member.models.MemberApplyRecord;
|
||||
import com.budwk.app.zhgh.staffmanage.member.param.pageform.MemberApplyPageForm;
|
||||
import com.budwk.app.zhgh.staffmanage.member.service.MemberApplyRecordService;
|
||||
import com.budwk.app.zhgh.staffmanage.member.service.MemberManageService;
|
||||
import com.budwk.app.zhgh.staffmanage.member.vo.MemberApplyVo;
|
||||
import com.budwk.app.zhgh.staffmanage.member.service.MemberCommonService;
|
||||
import com.budwk.app.zhgh.staffmanage.member.vo.MemberCommonVo;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.nutz.aop.interceptor.ioc.TransAop;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Dao;
|
||||
import org.nutz.dao.Sqls;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.dao.util.cri.Static;
|
||||
@@ -38,7 +40,6 @@ import org.nutz.mvc.annotation.Ok;
|
||||
import org.nutz.mvc.annotation.Param;
|
||||
|
||||
import javax.validation.Valid;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@@ -46,18 +47,18 @@ import java.util.Map;
|
||||
* 会员入会申请校工会审核
|
||||
*/
|
||||
@IocBean
|
||||
@At("/platform/member/apply/schoolUnionAudit")
|
||||
@Ok("json:full")
|
||||
@At("/platform/member/apply/schoolUnionAudit")
|
||||
public class MemberApplySchoolUnionAuditController {
|
||||
|
||||
@Inject
|
||||
private MemberApplyRecordService memberApplyRecordService;
|
||||
@Inject
|
||||
private CommonService commonService;
|
||||
private Dao dao;
|
||||
@Inject
|
||||
private BpmService bpmService;
|
||||
@Inject
|
||||
private MemberManageService memberManageService;
|
||||
private CommonService commonService;
|
||||
@Inject
|
||||
private MemberCommonService memberManageService;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/staffmanage/member/apply/schoolunionaudit/index.html")
|
||||
@@ -70,21 +71,17 @@ public class MemberApplySchoolUnionAuditController {
|
||||
public Result pageData(MemberApplyPageForm pageForm) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
record.id,
|
||||
vu.id AS userId,
|
||||
vu.username,
|
||||
vu.loginname,
|
||||
record.changeType,
|
||||
record.changeTypes,
|
||||
record.changeOrigin,
|
||||
record.applyDateTime,
|
||||
record.unitId,
|
||||
IFNULL(record.unionId, vu.unionid) AS unionId,
|
||||
vu.unionname AS unionName,
|
||||
IFNULL(record.unitName, vu.unitname) AS unitName,
|
||||
IFNULL(record.userState, vu.userState) AS userState,
|
||||
IFNULL(record.preparedBy, vu.preparedBy) AS preparedBy,
|
||||
IFNULL(record.personType, vu.personType) AS personType,
|
||||
info.id,
|
||||
info.username,
|
||||
info.loginname,
|
||||
info.sex,
|
||||
info.unitName,
|
||||
info.unionName,
|
||||
info.userState,
|
||||
info.preparedBy,
|
||||
info.personType,
|
||||
info.changeTypes,
|
||||
info.applyDateTime,
|
||||
inst.id processInstanceId,
|
||||
inst.processInstanceNodeId,
|
||||
inst.processInstanceNodeName,
|
||||
@@ -98,17 +95,16 @@ public class MemberApplySchoolUnionAuditController {
|
||||
INNER JOIN bpm_process_node_define nd ON nd.id = task.processTaskNodeId
|
||||
INNER JOIN bpm_process_instance inst ON inst.id = task.processInstanceId
|
||||
INNER JOIN bpm_process_define define On inst.processDefineId = define.id
|
||||
INNER JOIN member_apply_record record ON record.id = inst.processInstanceBusinessId
|
||||
INNER JOIN member_apply_record info ON info.id = inst.processInstanceBusinessId
|
||||
LEFT JOIN bpm_process_task nt ON nt.prevTaskId = task.id AND nt.taskStatus = 'COMPLETE'
|
||||
LEFT JOIN vw_user vu ON vu.id = record.userId
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
MemberApplyPageForm.buildSearch(cnd, pageForm);
|
||||
pageForm.buildSearch(cnd, "info.");
|
||||
if(!AuthUtil.hasRole(RoleConstant.SYSADMIN.name())){
|
||||
cnd.and(new Static("JSON_CONTAINS( task.assignments, '\"%s\"' )".formatted(SecurityUtil.getUserLoginname())));
|
||||
}
|
||||
cnd.and("nd.nodeCode","=",50);
|
||||
cnd.and("nd.nodeCode","=",80);
|
||||
if (pageForm.getAudit() != null) {
|
||||
if (pageForm.getAudit()) {
|
||||
cnd.and("task.taskStatus", "=", BpmProcessTaskStatusEnum.COMPLETE);
|
||||
@@ -118,9 +114,9 @@ public class MemberApplySchoolUnionAuditController {
|
||||
}
|
||||
cnd.and("define.`code`", "=", BpmProcessConstant.MEMBER_SINGLE_APPLY.name());
|
||||
cnd.desc("task.createdOn");
|
||||
// cnd.groupBy("record.id");
|
||||
cnd.groupBy("info.id");
|
||||
sql.setCondition(cnd);
|
||||
Pagination<MemberApplyVo> listPageVO = memberApplyRecordService.listPageVO(pageForm, sql, MemberApplyVo.class);
|
||||
Pagination<MemberCommonVo> listPageVO = memberManageService.listPageVO(pageForm, sql, MemberCommonVo.class);
|
||||
return Result.success(listPageVO);
|
||||
}
|
||||
|
||||
@@ -133,8 +129,11 @@ public class MemberApplySchoolUnionAuditController {
|
||||
public Result approval(@Param("approval") @Valid BpmTaskApprovalParam approvalParam) {
|
||||
Map<String, Object> variables = BeanUtil.beanToMap(approvalParam);
|
||||
if (approvalParam.getBpmTaskApprovalTypeEnum().equals(BpmTaskApprovalTypeEnum.PASS)) {
|
||||
MemberApplyRecord record = memberManageService.dao().fetch(MemberApplyRecord.class, Cnd.where("id", "=", approvalParam.getProcessInstanceBusinessId()));
|
||||
memberManageService.compareMemberChangeInfoAndUpdateUser(record);
|
||||
MemberApplyRecord record = dao.fetch(MemberApplyRecord.class, Cnd.where("id", "=", approvalParam.getProcessInstanceBusinessId()));
|
||||
Sys_user sysUser = new Sys_user();
|
||||
BeanUtil.copyProperties(record, sysUser);
|
||||
sysUser.setId(record.getUserId());
|
||||
dao.updateIgnoreNull(sysUser);
|
||||
}
|
||||
bpmService.completeTask(approvalParam.getProcessInstanceTaskId(), approvalParam.getBpmTaskApprovalTypeEnum(), variables, null);
|
||||
return Result.success();
|
||||
@@ -150,29 +149,6 @@ public class MemberApplySchoolUnionAuditController {
|
||||
bpmService.revokeTask(taskId);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 获取变更信息,审核
|
||||
* @param recordId
|
||||
* @return
|
||||
*/
|
||||
@At
|
||||
@SaCheckPermission(value = "member.apply.branchUnionAudit")
|
||||
public Result findAuditChangeInfo(@Valid String recordId){
|
||||
Sys_user_history history = memberApplyRecordService.dao().fetch(Sys_user_history.class, Cnd.where("recordId", "=", recordId).or("id","=",recordId));
|
||||
MemberApplyRecord record = memberApplyRecordService.dao().fetch(MemberApplyRecord.class, recordId);
|
||||
if (ObjectUtil.isAllEmpty(history, record)) {
|
||||
return Result.error("获取变更信息失败");
|
||||
}
|
||||
List<BpmTaskApprovalRecordVo> nodeTasks = bpmService.getNodeTasks(BpmProcessConstant.MEMBER_SINGLE_APPLY, recordId);
|
||||
if (Lang.isNotEmpty(history)) {
|
||||
List<NutMap> nutMaps = memberManageService.compareMemberChangeInfo(history);
|
||||
return Result.success(NutMap.NEW().addv("changeList", nutMaps).addv("nodeTasks", nodeTasks));
|
||||
}
|
||||
List<NutMap> nutMaps = memberManageService.compareMemberChangeInfo(record);
|
||||
return Result.success(NutMap.NEW().addv("changeList", nutMaps).addv("nodeTasks", nodeTasks));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
+164
@@ -0,0 +1,164 @@
|
||||
package com.budwk.app.zhgh.staffmanage.member.controller.apply;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import com.budwk.app.base.annotation.SLog;
|
||||
import com.budwk.app.base.constant.BpmProcessConstant;
|
||||
import com.budwk.app.base.constant.RoleConstant;
|
||||
import com.budwk.app.base.page.Pagination;
|
||||
import com.budwk.app.base.result.Result;
|
||||
import com.budwk.app.bpm.enums.BpmProcessTaskStatusEnum;
|
||||
import com.budwk.app.bpm.enums.BpmTaskApprovalTypeEnum;
|
||||
import com.budwk.app.bpm.param.BpmTaskApprovalParam;
|
||||
import com.budwk.app.bpm.service.BpmService;
|
||||
import com.budwk.app.sys.models.Sys_config;
|
||||
import com.budwk.app.web.commons.auth.utils.AuthUtil;
|
||||
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
|
||||
import com.budwk.app.web.controllers.open.commons.service.CommonService;
|
||||
import com.budwk.app.zhgh.staffmanage.member.param.pageform.MemberApplyPageForm;
|
||||
import com.budwk.app.zhgh.staffmanage.member.param.pageform.MemberChangePageForm;
|
||||
import com.budwk.app.zhgh.staffmanage.member.service.MemberCommonService;
|
||||
import com.budwk.app.zhgh.staffmanage.member.vo.MemberCommonVo;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nutz.aop.interceptor.ioc.TransAop;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Dao;
|
||||
import org.nutz.dao.Sqls;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.dao.util.cri.Static;
|
||||
import org.nutz.ioc.aop.Aop;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
import org.nutz.mvc.annotation.Param;
|
||||
|
||||
import javax.validation.Valid;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @version 1.0
|
||||
* @Author zzr
|
||||
* @name:MemberApplyUnionGroupAuditController
|
||||
* @Date 2025/9/20 15:07
|
||||
* @注释 入会工会小组审核
|
||||
*/
|
||||
@Slf4j
|
||||
@IocBean
|
||||
@Ok("json")
|
||||
@At("/platform/member/apply/unionGroupAudit")
|
||||
public class MemberApplyUnionGroupAuditController {
|
||||
|
||||
@Inject
|
||||
private Dao dao;
|
||||
@Inject
|
||||
private BpmService bpmService;
|
||||
@Inject
|
||||
private CommonService commonService;
|
||||
@Inject
|
||||
private MemberCommonService memberCommonService;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/staffmanage/member/apply/groupunionaudit/index.html")
|
||||
@SaCheckPermission("member.apply.unionGroup.audit")
|
||||
public void index() {
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckPermission("member.change.unionGroup.audit")
|
||||
public Result pageData(MemberApplyPageForm pageForm) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
info.id,
|
||||
info.username,
|
||||
info.loginname,
|
||||
info.sex,
|
||||
info.unitName,
|
||||
info.unionName,
|
||||
info.userState,
|
||||
info.preparedBy,
|
||||
info.personType,
|
||||
info.changeTypes,
|
||||
info.applyDateTime,
|
||||
inst.id processInstanceId,
|
||||
inst.processInstanceNodeId,
|
||||
inst.processInstanceNodeName,
|
||||
inst.processInstanceTaskIds,
|
||||
inst.processInstanceStatus,
|
||||
task.id processInstanceTaskId,
|
||||
task.taskStatus processInstanceTaskStatus,
|
||||
COUNT(nt.id) OVER (PARTITION BY task.id) > 0 AS nextTaskIsComplete
|
||||
FROM
|
||||
bpm_process_task task
|
||||
INNER JOIN bpm_process_node_define nd ON nd.id = task.processTaskNodeId
|
||||
INNER JOIN bpm_process_instance inst ON inst.id = task.processInstanceId
|
||||
INNER JOIN bpm_process_define define On inst.processDefineId = define.id
|
||||
INNER JOIN member_apply_record info ON info.id = inst.processInstanceBusinessId
|
||||
LEFT JOIN bpm_process_task nt ON nt.prevTaskId = task.id AND nt.taskStatus = 'COMPLETE'
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
pageForm.buildSearch(cnd, "info.");
|
||||
if(!AuthUtil.hasRole(RoleConstant.SYSADMIN.name())){
|
||||
cnd.and(new Static("JSON_CONTAINS( task.assignments, '\"%s\"' )".formatted(SecurityUtil.getUserLoginname())));
|
||||
}
|
||||
cnd.and("nd.nodeCode","=",20);
|
||||
if (pageForm.getAudit() != null) {
|
||||
if (pageForm.getAudit()) {
|
||||
cnd.and("task.taskStatus", "=", BpmProcessTaskStatusEnum.COMPLETE);
|
||||
} else {
|
||||
cnd.and("task.taskStatus", "=", BpmProcessTaskStatusEnum.ACTIVE);
|
||||
}
|
||||
}
|
||||
cnd.and("define.`code`", "=", BpmProcessConstant.MEMBER_SINGLE_APPLY.name());
|
||||
cnd.desc("task.createdOn");
|
||||
cnd.groupBy("info.id");
|
||||
sql.setCondition(cnd);
|
||||
Pagination<MemberCommonVo> listPageVO = memberCommonService.listPageVO(pageForm, sql, MemberCommonVo.class);
|
||||
return Result.success(listPageVO);
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@ApiOperation("会员变更工会小组审核")
|
||||
@SaCheckPermission("member.change.unionGroup.audit")
|
||||
@SLog(tag = "会员变更", msg = "工会小组审核")
|
||||
public Result approval(@Param("approval") @Valid BpmTaskApprovalParam approvalParam) {
|
||||
approvalParam.getBpmTaskApprovalTypeEnum();
|
||||
Map<String, Object> variables = BeanUtil.beanToMap(approvalParam);
|
||||
|
||||
List<String> assignments = new ArrayList<>();
|
||||
if(approvalParam.getBpmTaskApprovalTypeEnum().equals(BpmTaskApprovalTypeEnum.PASS)){
|
||||
// 查询系统参数,看是否需要分工会审核
|
||||
Sys_config config = dao.fetch(Sys_config.class, Cnd.where(Sys_config::getConfigKey, "=", "UnionGroupIsNeedBranchAudit"));
|
||||
if ("true".equals(config.getConfigValue())) {
|
||||
// 工会小组审核后,需要分工会审核
|
||||
variables.put("groupAuditNext", "branch");
|
||||
String approvalLoginName = commonService.findUserLoginNameByRoleCode(RoleConstant.BRANCH_UNION_CHAIRMAN);
|
||||
assignments.add(approvalLoginName);
|
||||
} else {
|
||||
// 工会小组审核后,不需要分工会审核,交由校工会审核
|
||||
variables.put("groupAuditNext", "school");
|
||||
String approvalLoginName = commonService.findUserLoginNameByRoleCode(RoleConstant.SCHOOL_UNION_ADMIN);
|
||||
assignments.add(approvalLoginName);
|
||||
}
|
||||
}
|
||||
bpmService.completeTask(approvalParam.getProcessInstanceTaskId(), approvalParam.getBpmTaskApprovalTypeEnum(), variables, assignments);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@ApiOperation("工会小组审核撤回")
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@SaCheckPermission("member.change.unionGroup.audit")
|
||||
@SLog(tag = "会员变更", msg = "工会小组审核撤回")
|
||||
public Result revoke(@Valid String taskId) {
|
||||
bpmService.revokeTask(taskId);
|
||||
return Result.success();
|
||||
}
|
||||
}
|
||||
-113
@@ -1,113 +0,0 @@
|
||||
package com.budwk.app.zhgh.staffmanage.member.controller.branch;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import cn.dev33.satoken.annotation.SaMode;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.budwk.app.base.annotation.SLog;
|
||||
import com.budwk.app.base.constant.BpmProcessConstant;
|
||||
import com.budwk.app.base.page.Pagination;
|
||||
import com.budwk.app.base.result.Result;
|
||||
import com.budwk.app.bpm.param.BpmTaskApprovalParam;
|
||||
import com.budwk.app.bpm.service.BpmService;
|
||||
import com.budwk.app.bpm.vo.BpmTaskApprovalRecordVo;
|
||||
import com.budwk.app.sys.models.Sys_user_history;
|
||||
import com.budwk.app.zhgh.staffmanage.member.models.MemberApplyRecord;
|
||||
import com.budwk.app.zhgh.staffmanage.member.param.pageform.MemberManagePageForm;
|
||||
import com.budwk.app.zhgh.staffmanage.member.service.MemberBranchUnionManageService;
|
||||
import com.budwk.app.zhgh.staffmanage.member.service.MemberManageService;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nutz.aop.interceptor.ioc.TransAop;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.ioc.aop.Aop;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.lang.Lang;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
import org.nutz.mvc.annotation.Param;
|
||||
|
||||
import javax.validation.Valid;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @version 1.0
|
||||
* @Author zzr
|
||||
* @name:MemberBranchUnionAuditController
|
||||
* @Date 2024/8/13 8:48
|
||||
* @注释 分工会管理,分工会审核
|
||||
*/
|
||||
@Slf4j
|
||||
@IocBean
|
||||
@Ok("json")
|
||||
@At("/platform/member/branchUnion/audit")
|
||||
public class MemberBranchUnionAuditController {
|
||||
|
||||
@Inject
|
||||
private MemberBranchUnionManageService memberBranchUnionManageService;
|
||||
@Inject
|
||||
private MemberManageService memberManageService;
|
||||
@Inject
|
||||
private BpmService bpmService;
|
||||
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/staffmanage/member/branch/audit/index.html")
|
||||
@SaCheckPermission("member.branchUnion.audit")
|
||||
public void index() {
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@SaCheckPermission("member.branchUnion.audit")
|
||||
public Result pageData(MemberManagePageForm pageForm) {
|
||||
Pagination pageData = memberBranchUnionManageService.getPageData(pageForm);
|
||||
return Result.success(pageData);
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@ApiOperation("分工会审核")
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@SaCheckPermission("member.branchUnion.audit")
|
||||
@SLog(tag = "会员管理-分工会管理", type = "memberBranchUnionManage", msg = "分工会审核")
|
||||
public Result approval(@Param("approval") @Valid BpmTaskApprovalParam approvalParam) {
|
||||
bpmService.completeTask(approvalParam.getProcessInstanceTaskId(), approvalParam.getBpmTaskApprovalTypeEnum(), null, null);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@ApiOperation("分工会审核撤回")
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@SaCheckPermission("member.branchUnion.audit")
|
||||
@SLog(tag = "会员管理-分工会管理", type = "memberBranchUnionManage", msg = "分工会审核撤回")
|
||||
public Result revoke(@Valid String taskId) {
|
||||
bpmService.revokeTask(taskId);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 获取变更信息,审核
|
||||
* @param recordId
|
||||
* @return
|
||||
*/
|
||||
@At
|
||||
@SaCheckPermission(value = {"member.branchUnion.audit", "member.schoolUnion.audit"}, mode = SaMode.OR)
|
||||
public Result findAuditChangeInfo(String recordId) {
|
||||
Sys_user_history history = memberBranchUnionManageService.dao().fetch(Sys_user_history.class, Cnd.where("recordId", "=", recordId).or("id","=",recordId));
|
||||
MemberApplyRecord record = memberBranchUnionManageService.dao().fetch(MemberApplyRecord.class, recordId);
|
||||
if (ObjectUtil.isAllEmpty(history, record)) {
|
||||
return Result.error("获取变更信息失败");
|
||||
}
|
||||
List<BpmTaskApprovalRecordVo> nodeTasks = bpmService.getNodeTasks(BpmProcessConstant.MEMBER_BRANCH_UNION_CHANGE, recordId);
|
||||
if (Lang.isNotEmpty(history)) {
|
||||
List<NutMap> nutMaps = memberManageService.compareMemberChangeInfo(history);
|
||||
return Result.success(NutMap.NEW().addv("changeList", nutMaps).addv("nodeTasks", nodeTasks));
|
||||
}
|
||||
List<NutMap> nutMaps = memberManageService.compareMemberChangeInfo(record);
|
||||
return Result.success(NutMap.NEW().addv("changeList", nutMaps).addv("nodeTasks", nodeTasks));
|
||||
}
|
||||
}
|
||||
-175
@@ -1,175 +0,0 @@
|
||||
package com.budwk.app.zhgh.staffmanage.member.controller.branch;
|
||||
|
||||
import cn.afterturn.easypoi.excel.ExcelExportUtil;
|
||||
import cn.afterturn.easypoi.excel.entity.ExportParams;
|
||||
import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
|
||||
import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import cn.hutool.core.util.DesensitizedUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.budwk.app.base.annotation.RepeatSubmit;
|
||||
import com.budwk.app.base.annotation.SLog;
|
||||
import com.budwk.app.base.constant.BpmProcessConstant;
|
||||
import com.budwk.app.base.constant.RoleConstant;
|
||||
import com.budwk.app.base.exception.BaseException;
|
||||
import com.budwk.app.base.page.Pagination;
|
||||
import com.budwk.app.base.result.Result;
|
||||
import com.budwk.app.base.utils.CommonDownloadUtil;
|
||||
import com.budwk.app.bpm.service.BpmService;
|
||||
import com.budwk.app.sys.models.Sys_user;
|
||||
import com.budwk.app.web.controllers.open.commons.service.CommonService;
|
||||
import com.budwk.app.zhgh.staffmanage.member.constant.MemberChangeOrigin;
|
||||
import com.budwk.app.zhgh.staffmanage.member.models.MemberApplyRecord;
|
||||
import com.budwk.app.zhgh.staffmanage.member.param.pageform.MemberManagePageForm;
|
||||
import com.budwk.app.zhgh.staffmanage.member.param.pageform.MemberStatisticsPageForm;
|
||||
import com.budwk.app.zhgh.staffmanage.member.service.MemberManageService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.poi.ss.usermodel.Workbook;
|
||||
import org.nutz.aop.interceptor.ioc.TransAop;
|
||||
import org.nutz.dao.Chain;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.ioc.aop.Aop;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
import org.nutz.mvc.annotation.Param;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.validation.Valid;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* @version 1.0
|
||||
* @Author zzr
|
||||
* @name:MemberBranchUnionManageListController
|
||||
* @Date 2024/8/12 14:06
|
||||
* @注释 会员分工会管理
|
||||
*/
|
||||
@IocBean
|
||||
@At("/platform/member/branchUnion/manage/list")
|
||||
@Slf4j
|
||||
@Ok("json")
|
||||
public class MemberBranchUnionManageController {
|
||||
|
||||
@Inject
|
||||
private MemberManageService memberManageService;
|
||||
@Inject
|
||||
private CommonService commonService;
|
||||
@Inject
|
||||
private BpmService bpmservice;
|
||||
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/staffmanage/member/branch/manage/index.html")
|
||||
@SaCheckPermission("member.branchUnion.manage.list")
|
||||
public void index() {
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@SaCheckPermission("member.branchUnion.manage.list")
|
||||
@Ok("json:{dateFormat:'yyyy-MM-dd'}")
|
||||
public Result pageData(MemberManagePageForm pageForm) {
|
||||
Sql sql = memberManageService.getSql(pageForm, "branchUnion");
|
||||
Pagination pagination = memberManageService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
|
||||
return Result.success(pagination);
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@SaCheckPermission("member.branchUnion.manage.list")
|
||||
@SLog(tag = "添加会员", type = "memberBranchManage", msg = "添加会员")
|
||||
public Result addMember(@Valid MemberApplyRecord record) {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@SaCheckPermission("member.branchUnion.manage.list")
|
||||
public Result getChangeInfoByUserId(String userId) {
|
||||
return Result.success(memberManageService.getMemberChangeInfoByUserId(userId));
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@SaCheckPermission("member.branchUnion.manage.list")
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@RepeatSubmit
|
||||
@SLog(tag = "分工会管理-会员管理", type = "MemberBranchManageList", msg = "分工会普通变更")
|
||||
public Result generalMemberChange(@Param("record") MemberApplyRecord record) {
|
||||
try {
|
||||
if (Objects.isNull(record)) {
|
||||
return Result.error("数据获取失败");
|
||||
}
|
||||
Sys_user user = memberManageService.dao().fetch(Sys_user.class, Cnd.where("loginname", "=", record.getLoginname()));
|
||||
record.setUserId(user.getId());
|
||||
if ( record.getEdit() == null || !record.getEdit()) {
|
||||
// 校验是否有变更的字段
|
||||
List<NutMap> changeInfoList = memberManageService.compareMemberChangeInfo(record);
|
||||
// 存储变更的类型
|
||||
List<String> changeTypeList = memberManageService.compareMemberChangeType(changeInfoList, record);
|
||||
// 有字段发生变更会走下面的方法,没有则会抛异常
|
||||
record.setChangeTypes(changeTypeList);
|
||||
record.setChangeOrigin(MemberChangeOrigin.BRANCH_UNION.name());
|
||||
memberManageService.dao().insert(record);
|
||||
} else {
|
||||
record.setChangeOrigin(MemberChangeOrigin.BRANCH_UNION.name());
|
||||
memberManageService.dao().updateIgnoreNull(record);
|
||||
}
|
||||
|
||||
String approvalLoginName = commonService.findUserLoginNameByRoleCode(RoleConstant.SCHOOL_UNION_MEMBER_ADMIN);
|
||||
if (StrUtil.isBlank(approvalLoginName)) {
|
||||
throw new BaseException("校工会会员管理员未设置");
|
||||
}
|
||||
bpmservice.startSubmitProcessInstance(BpmProcessConstant.MEMBER_BRANCH_UNION_CHANGE.name(), "【会员分工会变更】" +record.getUsername(), record.getId(), List.of(approvalLoginName), null);
|
||||
return Result.success();
|
||||
} catch (Exception e) {
|
||||
return Result.error(e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@At
|
||||
@Ok("void")
|
||||
@SaCheckPermission("member.branchUnion.manage.list")
|
||||
public void doExport(MemberManagePageForm pageForm, HttpServletResponse response){
|
||||
Sql sql = memberManageService.getSql(pageForm, "branchUnion");
|
||||
List<NutMap> list = memberManageService.listMap(sql);
|
||||
|
||||
List<ExcelExportEntity> exportEntities = new ArrayList<>();
|
||||
exportEntities.add(new ExcelExportEntity("工号", "loginname", 20));
|
||||
exportEntities.add(new ExcelExportEntity("姓名", "username", 20));
|
||||
exportEntities.add(new ExcelExportEntity("性别", "sex", 20));
|
||||
exportEntities.add(new ExcelExportEntity("出生年月", "birthday", 20));
|
||||
exportEntities.add(new ExcelExportEntity("联系电话", "mobile", 20));
|
||||
exportEntities.add(new ExcelExportEntity("福利号码", "welfareMobile", 20));
|
||||
exportEntities.add(new ExcelExportEntity("在职状态", "userState", 20));
|
||||
exportEntities.add(new ExcelExportEntity("聘用方式", "preparedBy", 20));
|
||||
exportEntities.add(new ExcelExportEntity("人员类型", "personType", 20));
|
||||
exportEntities.add(new ExcelExportEntity("所属工会", "unionName", 20));
|
||||
exportEntities.add(new ExcelExportEntity("所属单位", "unitName", 30));
|
||||
|
||||
ExportParams exportParams = new ExportParams();
|
||||
exportParams.setType(ExcelType.XSSF);
|
||||
|
||||
try {
|
||||
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, exportEntities, list);
|
||||
CommonDownloadUtil.download("会员名单.xlsx", workbook, response);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckPermission("member.branchUnion.manage.list")
|
||||
@SLog(tag = "分工会管理-会员管理", type = "MemberBranchManageList", msg = "修改会员福利手机号")
|
||||
public Result changeWelfareMobile(String id,String welfareMobile){
|
||||
memberManageService.dao().update(Sys_user.class, Chain.make("welfareMobile", welfareMobile),Cnd.where("id", "=", id));
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
}
|
||||
-58
@@ -1,58 +0,0 @@
|
||||
package com.budwk.app.zhgh.staffmanage.member.controller.branch;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import com.budwk.app.base.page.Pagination;
|
||||
import com.budwk.app.base.result.Result;
|
||||
import com.budwk.app.sys.models.Sys_user_history;
|
||||
import com.budwk.app.zhgh.staffmanage.member.param.pageform.MemberManagePageForm;
|
||||
import com.budwk.app.zhgh.staffmanage.member.service.MemberManageService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
|
||||
import javax.validation.Valid;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @version 1.0
|
||||
* @Author zzr
|
||||
* @name:MemberBranchRecordController
|
||||
* @Date 2024/8/13 16:25
|
||||
* @注释 分工会 会员变更记录
|
||||
*/
|
||||
@Slf4j
|
||||
@IocBean
|
||||
@Ok("json")
|
||||
@At("/platform/member/branchUnion/record")
|
||||
public class MemberBranchUnionRecordController {
|
||||
|
||||
@Inject
|
||||
private MemberManageService memberManageService;
|
||||
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/staffmanage/member/branch/record/index.html")
|
||||
@SaCheckPermission("member.branchUnion.record")
|
||||
public void index() {
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@SaCheckPermission("member.branchUnion.record")
|
||||
public Result pageData(MemberManagePageForm pageForm){
|
||||
Pagination pagination = memberManageService.memberHistoryRecords(pageForm);
|
||||
return Result.success(pagination);
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@SaCheckPermission("member.branchUnion.record")
|
||||
public Result findAuditChangeInfo(@Valid String recordId) {
|
||||
Sys_user_history history = memberManageService.dao().fetch(Sys_user_history.class, recordId);
|
||||
List<NutMap> list = memberManageService.compareMemberChangeInfo(history);
|
||||
return Result.success(list);
|
||||
}
|
||||
}
|
||||
+155
@@ -0,0 +1,155 @@
|
||||
package com.budwk.app.zhgh.staffmanage.member.controller.change;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import cn.dev33.satoken.annotation.SaMode;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.budwk.app.base.annotation.SLog;
|
||||
import com.budwk.app.base.constant.BpmProcessConstant;
|
||||
import com.budwk.app.base.constant.RoleConstant;
|
||||
import com.budwk.app.base.result.Result;
|
||||
import com.budwk.app.bpm.service.BpmService;
|
||||
import com.budwk.app.sys.models.Sys_union;
|
||||
import com.budwk.app.sys.models.Sys_union_group;
|
||||
import com.budwk.app.sys.models.Sys_unit;
|
||||
import com.budwk.app.sys.models.Sys_user;
|
||||
import com.budwk.app.sys.views.View_user;
|
||||
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
|
||||
import com.budwk.app.web.controllers.open.commons.service.CommonService;
|
||||
import com.budwk.app.zhgh.staffmanage.member.models.MemberChangeRecord;
|
||||
import com.budwk.app.zhgh.staffmanage.member.service.MemberCommonService;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nutz.aop.interceptor.ioc.TransAop;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Dao;
|
||||
import org.nutz.dao.util.cri.Static;
|
||||
import org.nutz.ioc.aop.Aop;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.lang.Lang;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
import org.nutz.mvc.annotation.Param;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
/**
|
||||
* @version 1.0
|
||||
* @Author zzr
|
||||
* @name:MemberChangeApplyController
|
||||
* @Date 2025/9/16 16:03
|
||||
* @注释
|
||||
*/
|
||||
@Slf4j
|
||||
@IocBean
|
||||
@Ok("json:full")
|
||||
@ApiModel("会员变更申请")
|
||||
@At("/platform/member/change/submit")
|
||||
public class MemberChangeApplyController {
|
||||
|
||||
@Inject
|
||||
private Dao dao;
|
||||
@Inject
|
||||
private BpmService bpmservice;
|
||||
@Inject
|
||||
private CommonService commonService;
|
||||
@Inject
|
||||
private MemberCommonService memberCommonService;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/staffmanage/member/change/submit/index.html")
|
||||
@SaCheckPermission("member.change.submit")
|
||||
public void index() {
|
||||
}
|
||||
|
||||
@At
|
||||
@ApiOperation("保存申请")
|
||||
@SaCheckPermission("member.change.submit")
|
||||
@SLog(tag = "会员变更申请", msg = "保存申请,申请人: ${args[0].username}")
|
||||
public Result save(@Param("data") MemberChangeRecord memberChangeRecord) {
|
||||
// 校验是否有变更
|
||||
memberCommonService.validateChangeAndSetBasicData(memberChangeRecord);
|
||||
dao.insertOrUpdate(memberChangeRecord);
|
||||
bpmservice.startSaveProcessInstance(BpmProcessConstant.MEMBER_SINGLE_APPLY.name(),
|
||||
"【会员变更申请】" + memberChangeRecord.getUsername(), memberChangeRecord.getId(), null);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
@At
|
||||
@ApiOperation("提交申请")
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@SaCheckPermission("member.change.submit")
|
||||
@SLog(tag = "会员变更申请", msg = "提交申请,申请人: ${args[0].username}")
|
||||
public Result submit(@Param("data") MemberChangeRecord memberChangeRecord){
|
||||
// 校验是否有变更
|
||||
memberCommonService.validateChangeAndSetBasicData(memberChangeRecord);
|
||||
dao.insertOrUpdate(memberChangeRecord);
|
||||
|
||||
// 参数配置项
|
||||
HashMap<String, Object> variables = new HashMap<>();
|
||||
|
||||
// 审核人工号集合
|
||||
List<String> assignments = new ArrayList<>();
|
||||
|
||||
// 去查询申请人的单位有没有工会小组
|
||||
Sys_union_group group = dao.fetch(Sys_union_group.class, Cnd.where(Sys_union_group::getUnionId, "=", SecurityUtil.getUnionId())
|
||||
.and(new Static("JSON_CONTAINS(unitIds, '\"%s\"')".formatted(SecurityUtil.getUnitId()))));
|
||||
if (Lang.isNotEmpty(group)) {
|
||||
List<Sys_user> query = dao.query(Sys_user.class, Cnd.where("id", "in", group.getLeaders()));
|
||||
assignments = query.stream().map(Sys_user::getLoginname).toList();
|
||||
// 有小组,走工会小组审核
|
||||
variables.put("processType", "unionGroup");
|
||||
} else {
|
||||
//设置分工会审核人
|
||||
List<Sys_user> users = commonService.findUserInfoByRoleCode("unionId", SecurityUtil.getUnionId(), RoleConstant.BRANCH_UNION_CHAIRMAN.name());
|
||||
if (ObjectUtil.isEmpty(users)) {
|
||||
return Result.error("您的分工会没有设置审核人,请联系校工会!");
|
||||
}
|
||||
List<Sys_user> operatorUsers = commonService.findUserInfoByRoleCode("unionId", SecurityUtil.getUnionId(), RoleConstant.BRANCH_UNION_OPERATOR.name());
|
||||
assignments = Stream.concat(users.stream(), operatorUsers.stream()).distinct().toList().stream().map(Sys_user::getLoginname).toList();
|
||||
|
||||
// 没有小组,走分工会审核
|
||||
variables.put("processType", "branchUnion");
|
||||
}
|
||||
|
||||
bpmservice.startSubmitProcessInstance(BpmProcessConstant.MEMBER_CHANGE.name(),
|
||||
"【会员变更申请】" + memberChangeRecord.getUsername(), memberChangeRecord.getId(), assignments, variables);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@ApiModelProperty("根据id查询变更记录")
|
||||
@SaCheckPermission("member.change.submit")
|
||||
public Result findChangeById(String id){
|
||||
return Result.success().addData(dao.fetch(MemberChangeRecord.class, id));
|
||||
}
|
||||
|
||||
/**
|
||||
* 不知道有什么用,移过来的
|
||||
* @param userId
|
||||
* @return
|
||||
*/
|
||||
@At
|
||||
@SaCheckPermission(value = {"member.change.unionGroup.audit", "member.change.branchUnion.audit", "member.change.schoolUnion.audit"}, mode = SaMode.OR)
|
||||
public Result getUserByIdForMemberChange(String userId){
|
||||
View_user user = dao.fetch(View_user.class, Cnd.where("id", "=", userId));
|
||||
NutMap nutMap = Lang.obj2nutmap(user);
|
||||
if (StrUtil.isNotBlank(user.getUnionId())) {
|
||||
Sys_union union = dao.fetch(Sys_union.class, Cnd.where("id", "=", user.getUnionId()));
|
||||
nutMap.put("union", union);
|
||||
}
|
||||
if (StrUtil.isNotBlank(user.getUnitId())) {
|
||||
Sys_unit unit = dao.fetch(Sys_unit.class, Cnd.where("id", "=", user.getUnitId()));
|
||||
nutMap.put("unit", unit);
|
||||
}
|
||||
return Result.success().addData(nutMap);
|
||||
}
|
||||
}
|
||||
+152
@@ -0,0 +1,152 @@
|
||||
package com.budwk.app.zhgh.staffmanage.member.controller.change;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import com.budwk.app.base.annotation.SLog;
|
||||
import com.budwk.app.base.constant.BpmProcessConstant;
|
||||
import com.budwk.app.base.constant.RoleConstant;
|
||||
import com.budwk.app.base.page.Pagination;
|
||||
import com.budwk.app.base.result.Result;
|
||||
import com.budwk.app.bpm.enums.BpmProcessTaskStatusEnum;
|
||||
import com.budwk.app.bpm.enums.BpmTaskApprovalTypeEnum;
|
||||
import com.budwk.app.bpm.param.BpmTaskApprovalParam;
|
||||
import com.budwk.app.bpm.service.BpmService;
|
||||
import com.budwk.app.web.commons.auth.utils.AuthUtil;
|
||||
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
|
||||
import com.budwk.app.web.controllers.open.commons.service.CommonService;
|
||||
import com.budwk.app.zhgh.staffmanage.member.param.pageform.MemberChangePageForm;
|
||||
import com.budwk.app.zhgh.staffmanage.member.param.pageform.MemberManagePageForm;
|
||||
import com.budwk.app.zhgh.staffmanage.member.service.MemberCommonService;
|
||||
import com.budwk.app.zhgh.staffmanage.member.vo.MemberCommonVo;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nutz.aop.interceptor.ioc.TransAop;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Sqls;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.dao.util.cri.Static;
|
||||
import org.nutz.ioc.aop.Aop;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
import org.nutz.mvc.annotation.Param;
|
||||
|
||||
import javax.validation.Valid;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @version 1.0
|
||||
* @Author zzr
|
||||
* @name:MemberBranchUnionAuditController
|
||||
* @Date 2024/8/13 8:48
|
||||
* @注释 分工会管理,分工会审核
|
||||
*/
|
||||
@Slf4j
|
||||
@IocBean
|
||||
@Ok("json")
|
||||
@At("/platform/member/change/branchUnion/audit")
|
||||
public class MemberChangeBranchUnionAuditController {
|
||||
|
||||
@Inject
|
||||
private BpmService bpmService;
|
||||
@Inject
|
||||
private CommonService commonService;
|
||||
@Inject
|
||||
private MemberCommonService memberCommonService;
|
||||
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/staffmanage/member/change/branchunionaudit/index.html")
|
||||
@SaCheckPermission("member.change.branchUnion.audit")
|
||||
public void index() {
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@SaCheckPermission("member.change.branchUnion.audit")
|
||||
public Result pageData(MemberChangePageForm pageForm) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
info.id,
|
||||
info.username,
|
||||
info.loginname,
|
||||
info.sex,
|
||||
info.unitName,
|
||||
info.unionName,
|
||||
info.userState,
|
||||
info.preparedBy,
|
||||
info.personType,
|
||||
info.changeTypes,
|
||||
info.applyDateTime,
|
||||
inst.id processInstanceId,
|
||||
inst.processInstanceNodeId,
|
||||
inst.processInstanceNodeName,
|
||||
inst.processInstanceTaskIds,
|
||||
inst.processInstanceStatus,
|
||||
task.id processInstanceTaskId,
|
||||
task.taskStatus processInstanceTaskStatus,
|
||||
COUNT(nt.id) OVER (PARTITION BY task.id) > 0 AS nextTaskIsComplete
|
||||
FROM
|
||||
bpm_process_task task
|
||||
INNER JOIN bpm_process_node_define nd ON nd.id = task.processTaskNodeId
|
||||
INNER JOIN bpm_process_instance inst ON inst.id = task.processInstanceId
|
||||
INNER JOIN bpm_process_define define On inst.processDefineId = define.id
|
||||
INNER JOIN member_change_record info ON info.id = inst.processInstanceBusinessId
|
||||
LEFT JOIN bpm_process_task nt ON nt.prevTaskId = task.id AND nt.taskStatus = 'COMPLETE'
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
pageForm.buildSearch(cnd, "info.");
|
||||
if(!AuthUtil.hasRole(RoleConstant.SYSADMIN.name())){
|
||||
cnd.and(new Static("JSON_CONTAINS( task.assignments, '\"%s\"' )".formatted(SecurityUtil.getUserLoginname())));
|
||||
}
|
||||
cnd.and("nd.nodeCode","=",50);
|
||||
if (pageForm.getAudit() != null) {
|
||||
if (pageForm.getAudit()) {
|
||||
cnd.and("task.taskStatus", "=", BpmProcessTaskStatusEnum.COMPLETE);
|
||||
} else {
|
||||
cnd.and("task.taskStatus", "=", BpmProcessTaskStatusEnum.ACTIVE);
|
||||
}
|
||||
}
|
||||
cnd.and("define.`code`", "=", BpmProcessConstant.MEMBER_CHANGE.name());
|
||||
cnd.desc("task.createdOn");
|
||||
cnd.groupBy("info.id");
|
||||
sql.setCondition(cnd);
|
||||
Pagination<MemberCommonVo> listPageVO = memberCommonService.listPageVO(pageForm, sql, MemberCommonVo.class);
|
||||
return Result.success(listPageVO);
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@ApiOperation("分工会审核")
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@SLog(tag = "会员变更", msg = "分工会审核")
|
||||
@SaCheckPermission("member.change.branchUnion.audit")
|
||||
public Result approval(@Param("approval") @Valid BpmTaskApprovalParam approvalParam) {
|
||||
approvalParam.getBpmTaskApprovalTypeEnum();
|
||||
Map<String, Object> variables = BeanUtil.beanToMap(approvalParam);
|
||||
|
||||
List<String> assignments = new ArrayList<>();
|
||||
if(approvalParam.getBpmTaskApprovalTypeEnum().equals(BpmTaskApprovalTypeEnum.PASS)){
|
||||
String approvalLoginName = commonService.findUserLoginNameByRoleCode(RoleConstant.SCHOOL_UNION_ADMIN);
|
||||
assignments.add(approvalLoginName);
|
||||
}
|
||||
bpmService.completeTask(approvalParam.getProcessInstanceTaskId(), approvalParam.getBpmTaskApprovalTypeEnum(), variables, assignments);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@ApiOperation("分工会审核撤回")
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@SLog(tag = "会员变更", msg = "分工会审核撤回")
|
||||
@SaCheckPermission("member.change.branchUnion.audit")
|
||||
public Result revoke(@Valid String taskId) {
|
||||
bpmService.revokeTask(taskId);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
}
|
||||
+355
-61
@@ -1,61 +1,355 @@
|
||||
//package com.budwk.app.zhgh.member.controller.change;
|
||||
//
|
||||
//import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
//import com.budwk.app.base.annotation.SLog;
|
||||
//import com.budwk.app.base.page.Pagination;
|
||||
//import com.budwk.app.base.result.Result;
|
||||
//import com.budwk.app.zhgh.member.models.MemberApplyRecord;
|
||||
//import com.budwk.app.zhgh.member.param.MemberManagePageForm;
|
||||
//import com.budwk.app.zhgh.member.service.MemberManageService;
|
||||
//import lombok.extern.slf4j.Slf4j;
|
||||
//import org.nutz.dao.sql.Sql;
|
||||
//import org.nutz.ioc.loader.annotation.Inject;
|
||||
//import org.nutz.ioc.loader.annotation.IocBean;
|
||||
//import org.nutz.lang.util.NutMap;
|
||||
//import org.nutz.mvc.annotation.At;
|
||||
//import org.nutz.mvc.annotation.Ok;
|
||||
//
|
||||
//import javax.validation.Valid;
|
||||
//
|
||||
///**
|
||||
// * @version 1.0
|
||||
// * @Author zzr
|
||||
// * @name:MemberChangeManageController
|
||||
// * @Date 2024/8/6 8:39
|
||||
// * @注释
|
||||
// */
|
||||
//@IocBean
|
||||
//@Ok("json")
|
||||
//@At("/platform/member/change/manage")
|
||||
//@Slf4j
|
||||
//public class MemberChangeManageController {
|
||||
//
|
||||
// @Inject
|
||||
// private MemberManageService memberService;
|
||||
//
|
||||
// @At("")
|
||||
// @Ok("beetl:/platform/zhgh/staffmanage/member/change/manage/index.html")
|
||||
// @SaCheckPermission("member.branch.manage")
|
||||
// public void index() {
|
||||
// }
|
||||
//
|
||||
//
|
||||
// @At
|
||||
// @SaCheckPermission("member.branch.manage")
|
||||
// public Result pageData(MemberManagePageForm pageForm) {
|
||||
// Sql sql = memberService.getSql(pageForm,null);
|
||||
// Pagination pagination = memberService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
|
||||
// return Result.success(pagination);
|
||||
// }
|
||||
//
|
||||
//
|
||||
// @At
|
||||
// @SaCheckPermission("member.branch.manage")
|
||||
// public Result getNumData(MemberManagePageForm pageForm) {
|
||||
// NutMap map = memberService.getButtonNum(pageForm);
|
||||
// return Result.success(map);
|
||||
// }
|
||||
//
|
||||
//
|
||||
//
|
||||
//}
|
||||
package com.budwk.app.zhgh.staffmanage.member.controller.change;
|
||||
|
||||
import cn.afterturn.easypoi.excel.ExcelExportUtil;
|
||||
import cn.afterturn.easypoi.excel.entity.ExportParams;
|
||||
import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
|
||||
import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import cn.dev33.satoken.annotation.SaMode;
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import com.budwk.app.base.annotation.RepeatSubmit;
|
||||
import com.budwk.app.base.annotation.SLog;
|
||||
import com.budwk.app.base.constant.BpmProcessConstant;
|
||||
import com.budwk.app.base.constant.RoleConstant;
|
||||
import com.budwk.app.base.exception.BaseException;
|
||||
import com.budwk.app.base.page.Pagination;
|
||||
import com.budwk.app.base.result.Result;
|
||||
import com.budwk.app.base.utils.CommonDownloadUtil;
|
||||
import com.budwk.app.bpm.enums.BpmTaskApprovalTypeEnum;
|
||||
import com.budwk.app.bpm.models.BpmProcessInstance;
|
||||
import com.budwk.app.bpm.models.BpmProcessTask;
|
||||
import com.budwk.app.bpm.param.BpmTaskApprovalParam;
|
||||
import com.budwk.app.bpm.service.BpmService;
|
||||
import com.budwk.app.sys.models.Sys_config;
|
||||
import com.budwk.app.sys.models.Sys_union_group;
|
||||
import com.budwk.app.sys.models.Sys_user;
|
||||
import com.budwk.app.sys.views.View_user;
|
||||
import com.budwk.app.web.commons.auth.utils.AuthUtil;
|
||||
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
|
||||
import com.budwk.app.web.controllers.open.commons.service.CommonService;
|
||||
import com.budwk.app.zhgh.staffmanage.member.constant.MemberChangeOrigin;
|
||||
import com.budwk.app.zhgh.staffmanage.member.constant.MemberChangeType;
|
||||
import com.budwk.app.zhgh.staffmanage.member.models.MemberChangeRecord;
|
||||
import com.budwk.app.zhgh.staffmanage.member.param.pageform.MemberManagePageForm;
|
||||
import com.budwk.app.zhgh.staffmanage.member.service.MemberCommonService;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.poi.ss.usermodel.Workbook;
|
||||
import org.nutz.aop.interceptor.ioc.TransAop;
|
||||
import org.nutz.dao.Chain;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Dao;
|
||||
import org.nutz.dao.Sqls;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.dao.util.cri.Static;
|
||||
import org.nutz.ioc.aop.Aop;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.lang.Lang;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
import org.nutz.mvc.annotation.Param;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
/**
|
||||
* @version 1.0
|
||||
* @Author zzr
|
||||
* @name:MemberChangeManageController
|
||||
* @Date 2025/9/16 16:04
|
||||
* @注释
|
||||
*/
|
||||
@Slf4j
|
||||
@IocBean
|
||||
@Ok("json")
|
||||
@At("/platform/member/change/manage")
|
||||
public class MemberChangeManageController {
|
||||
|
||||
@Inject
|
||||
private Dao dao;
|
||||
@Inject
|
||||
private BpmService bpmService;
|
||||
@Inject
|
||||
private CommonService commonService;
|
||||
@Inject
|
||||
private MemberCommonService memberCommonService;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/staffmanage/member/change/manage/index.html")
|
||||
@SaCheckPermission(value = {"member.change.mange", "staff.member.change.mange"}, mode = SaMode.OR)
|
||||
public void index() {
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@ApiOperation("页面数据")
|
||||
@SaCheckPermission(value = {"member.change.mange", "staff.member.change.mange"}, mode = SaMode.OR)
|
||||
public Result pageData(MemberManagePageForm pageForm) {
|
||||
Sql sql = memberCommonService.getSql(pageForm);
|
||||
Pagination pagination = memberCommonService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
|
||||
return Result.success(pagination);
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@RepeatSubmit
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@SLog(tag = "会员高级管理-会员变更", msg = "分工会/校工会会员管理员提交变更")
|
||||
@SaCheckPermission(value = {"member.change.mange", "staff.member.change.mange"}, mode = SaMode.OR)
|
||||
public Result doSubmitChange(@Param("record") MemberChangeRecord record, @Param("approvalRemark") String approvalRemark) {
|
||||
// 检验是否有变更
|
||||
if (Lang.isEmpty(record)) {
|
||||
return Result.error("未获取到异动数据");
|
||||
}
|
||||
|
||||
// 角色判断,还要考虑有没有工会小组
|
||||
Sys_union_group group = dao.fetch(Sys_union_group.class, Cnd.where(Sys_union_group::getUnionId, "=", SecurityUtil.getUnionId())
|
||||
.and(new Static("JSON_CONTAINS(unitIds, '\"%s\"')".formatted(SecurityUtil.getUnitId()))));
|
||||
|
||||
boolean schoolRoleBool = AuthUtil.hasRoleOr(RoleConstant.SCHOOL_UNION_CHAIRMAN.name(), RoleConstant.SCHOOL_UNION_MEMBER_ADMIN.name(), RoleConstant.SYSADMIN.name());
|
||||
boolean branchRoleBool = AuthUtil.hasRoleOr(RoleConstant.BRANCH_UNION_CHAIRMAN.name(), RoleConstant.BRANCH_UNION_OPERATOR.name());
|
||||
boolean branchGroupRoleBool = AuthUtil.hasRoleOr(RoleConstant.BRANCH_UNION_GROUP_LEADER.name());
|
||||
|
||||
MemberChangeOrigin changeOrigin = schoolRoleBool ? MemberChangeOrigin.SCHOOL_UNION :
|
||||
branchRoleBool ? MemberChangeOrigin.BRANCH_UNION :
|
||||
branchGroupRoleBool ? MemberChangeOrigin.UNION_GROUP : null;
|
||||
|
||||
if (changeOrigin == null) {
|
||||
throw new BaseException("您无此权限");
|
||||
}
|
||||
|
||||
memberCommonService.validateChangeAndSetBasicData(record, changeOrigin);
|
||||
dao.insertOrUpdate(record);
|
||||
|
||||
// 启动流程
|
||||
HashMap<String, Object> processVariables = new HashMap<>();
|
||||
processVariables.put("processType", branchGroupRoleBool ? "unionGroup" : "branchUnion");
|
||||
|
||||
bpmService.startSubmitProcessInstance(
|
||||
BpmProcessConstant.MEMBER_CHANGE.name(),
|
||||
"【会员变更】" + record.getUsername(),
|
||||
record.getId(),
|
||||
List.of(SecurityUtil.getUserLoginname()),
|
||||
processVariables
|
||||
);
|
||||
|
||||
// 自动审批逻辑:根据角色逐级通过
|
||||
BpmProcessInstance instance = getProcessInstanceByBusinessId(record.getId());
|
||||
if (instance == null) {
|
||||
throw new BaseException("流程实例未找到,请检查流程启动是否成功");
|
||||
}
|
||||
|
||||
// // 1. 工会小组审核通过(如果是由小组长发起);不能通过角色判断,如果是分工会申请并且这个人有工会小组;那没办法创建工会小组的审核
|
||||
// if (branchGroupRoleBool) {
|
||||
// completeLatestTask(instance, "工会小组审核通过", null, null);
|
||||
// }
|
||||
if (Lang.isNotEmpty(group)) {
|
||||
Map<String, Object> vars = new HashMap<>();
|
||||
// 查询系统参数,看是否需要分工会审核
|
||||
Sys_config config = dao.fetch(Sys_config.class, Cnd.where(Sys_config::getConfigKey, "=", "UnionGroupIsNeedBranchAudit"));
|
||||
if ("true".equals(config.getConfigValue())) {
|
||||
vars.put("groupAuditNext", "branch");
|
||||
} else {
|
||||
vars.put("groupAuditNext", "school");
|
||||
}
|
||||
completeLatestTask(instance, "工会小组审核通过", null, vars);
|
||||
// processVariables.put("")
|
||||
}
|
||||
|
||||
|
||||
// 2. 分工会审核通过(如果是分工会角色)
|
||||
if (branchRoleBool || schoolRoleBool) {
|
||||
completeLatestTask(instance, "分工会审核通过", null, null);
|
||||
}
|
||||
|
||||
// 3. 校工会审核通过(如果是校工会或超管)
|
||||
if (schoolRoleBool) {
|
||||
// completeLatestTask 后 taskId 可能变化,所以重新查一次
|
||||
BpmProcessInstance committeeInstance = getProcessInstanceByBusinessId(record.getId());
|
||||
completeLatestTask(committeeInstance, "校工会审核通过",
|
||||
vars -> memberCommonService.compareChangeInfoAndUpdateMember(record.getId()),
|
||||
null);
|
||||
}
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@ApiOperation("获取该人员所有的变更信息")
|
||||
@SaCheckPermission(value = {"member.change.mange", "staff.member.change.mange"}, mode = SaMode.OR)
|
||||
public Result getAllChangeMemberInfo(String userId) {
|
||||
List<NutMap> mapList = memberCommonService.getAllChangeInfo(userId);
|
||||
|
||||
View_user user = dao.fetch(View_user.class, Cnd.where("id", "=", userId));
|
||||
NutMap map = Lang.obj2nutmap(user);
|
||||
map.put("user", user);
|
||||
map.put("allChangeInfo", mapList);
|
||||
return Result.success(map);
|
||||
}
|
||||
|
||||
|
||||
private BpmProcessInstance getProcessInstanceByBusinessId(String businessId) {
|
||||
return dao.fetch(BpmProcessInstance.class,
|
||||
Cnd.where("processInstanceBusinessId", "=", businessId));
|
||||
}
|
||||
|
||||
private BpmProcessTask getLatestTaskByInstanceId(String instanceId) {
|
||||
return dao.fetch(BpmProcessTask.class,
|
||||
Cnd.where(BpmProcessTask::getProcessInstanceId, "=", instanceId)
|
||||
.desc(BpmProcessTask::getCreatedAt)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* 完成指定流程实例的最新任务
|
||||
*
|
||||
* @param instance 流程实例
|
||||
* @param opinion 审批意见
|
||||
* @param postAction 成功后执行的动作(如更新会员数据)
|
||||
*/
|
||||
private void completeLatestTask(BpmProcessInstance instance, String opinion,
|
||||
Consumer<Map<String, Object>> postAction,
|
||||
Map<String, Object> var) {
|
||||
BpmProcessTask task = getLatestTaskByInstanceId(instance.getId());
|
||||
if (task == null) {
|
||||
throw new BaseException("无法获取待处理任务");
|
||||
}
|
||||
|
||||
BpmTaskApprovalParam param = new BpmTaskApprovalParam();
|
||||
param.setProcessInstanceId(instance.getId());
|
||||
param.setProcessInstanceBusinessId(instance.getProcessInstanceBusinessId());
|
||||
param.setProcessInstanceTaskId(task.getId());
|
||||
param.setBpmTaskApprovalType(BpmTaskApprovalTypeEnum.PASS.name());
|
||||
param.setBpmTaskApprovalTypeEnum(BpmTaskApprovalTypeEnum.PASS);
|
||||
param.setApprovalOpinion(opinion);
|
||||
|
||||
Map<String, Object> variables = BeanUtil.beanToMap(param);
|
||||
variables.putAll(var);
|
||||
|
||||
// 执行完成任务
|
||||
bpmService.completeTask(task.getId(), BpmTaskApprovalTypeEnum.PASS, variables, List.of(SecurityUtil.getUserLoginname()));
|
||||
|
||||
// 回调后置操作
|
||||
if (postAction != null) {
|
||||
postAction.accept(variables);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@SLog(tag = "分工会管理-会员管理", type = "MemberBranchManageList", msg = "修改会员福利手机号")
|
||||
@SaCheckPermission(value = {"member.change.mange", "staff.member.change.mange"}, mode = SaMode.OR)
|
||||
public Result changeWelfareMobile(String id,String welfareMobile){
|
||||
memberCommonService.dao().update(Sys_user.class, Chain.make("welfareMobile", welfareMobile),Cnd.where("id", "=", id));
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@Ok("void")
|
||||
@SaCheckPermission(value = {"member.change.mange", "staff.member.change.mange"}, mode = SaMode.OR)
|
||||
public void doExport(MemberManagePageForm pageForm, HttpServletResponse response){
|
||||
Sql sql = memberCommonService.getSql(pageForm);
|
||||
List<NutMap> list = memberCommonService.listMap(sql);
|
||||
|
||||
List<ExcelExportEntity> exportEntities = new ArrayList<>();
|
||||
exportEntities.add(new ExcelExportEntity("工号", "loginname", 20));
|
||||
exportEntities.add(new ExcelExportEntity("姓名", "username", 20));
|
||||
exportEntities.add(new ExcelExportEntity("性别", "sex", 20));
|
||||
exportEntities.add(new ExcelExportEntity("出生年月", "birthday", 20));
|
||||
exportEntities.add(new ExcelExportEntity("联系电话", "mobile", 20));
|
||||
exportEntities.add(new ExcelExportEntity("福利号码", "welfareMobile", 20));
|
||||
exportEntities.add(new ExcelExportEntity("在职状态", "userState", 20));
|
||||
exportEntities.add(new ExcelExportEntity("聘用方式", "preparedBy", 20));
|
||||
exportEntities.add(new ExcelExportEntity("人员类型", "personType", 20));
|
||||
exportEntities.add(new ExcelExportEntity("所属工会", "unionName", 20));
|
||||
exportEntities.add(new ExcelExportEntity("所属单位", "unitName", 30));
|
||||
|
||||
ExportParams exportParams = new ExportParams();
|
||||
exportParams.setType(ExcelType.XSSF);
|
||||
|
||||
try {
|
||||
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, exportEntities, list);
|
||||
CommonDownloadUtil.download("会员名单.xlsx", workbook, response);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@Ok("void")
|
||||
@SaCheckPermission(value = {"member.change.mange", "staff.member.change.mange"}, mode = SaMode.OR)
|
||||
public void doExportNotEqPhone(MemberManagePageForm pageForm, HttpServletResponse response){
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
u.id,
|
||||
u.sex,
|
||||
u.loginname,
|
||||
u.username,
|
||||
u.mobile,
|
||||
u.welfareMobile,
|
||||
u.unitId,
|
||||
u.unitName,
|
||||
u.unionId,
|
||||
u.unionName,
|
||||
DATE_FORMAT(u.birthday, '%Y-%m-%d ') as birthday,
|
||||
u.manyUnit,
|
||||
u.member,
|
||||
u.userState,
|
||||
u.preparedBy,
|
||||
u.personType,
|
||||
u.welfareMember,
|
||||
u.isModelWorker,
|
||||
u.wantJoinLoveMutualAidAssociation,
|
||||
his.id hisId,
|
||||
his.changeTypes,
|
||||
his.changeTime
|
||||
FROM
|
||||
vw_user u
|
||||
LEFT JOIN sys_user_history his ON his.loginname = u.loginname
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.and(new Static("u.mobile != u.welfareMobile"));
|
||||
MemberManagePageForm.buildSearch(cnd, pageForm);
|
||||
cnd.desc("his.changeTime");
|
||||
cnd.groupBy("u.id");
|
||||
cnd.asc("u.unionId");
|
||||
cnd.asc("u.unitId");
|
||||
cnd.asc("u.id");
|
||||
sql.setCondition(cnd);
|
||||
List<NutMap> list = memberCommonService.listMap(sql);
|
||||
|
||||
List<ExcelExportEntity> exportEntities = new ArrayList<>();
|
||||
exportEntities.add(new ExcelExportEntity("工号", "loginname", 20));
|
||||
exportEntities.add(new ExcelExportEntity("姓名", "username", 20));
|
||||
exportEntities.add(new ExcelExportEntity("性别", "sex", 20));
|
||||
exportEntities.add(new ExcelExportEntity("出生年月", "birthday", 20));
|
||||
exportEntities.add(new ExcelExportEntity("联系电话", "mobile", 20));
|
||||
exportEntities.add(new ExcelExportEntity("福利号码", "welfareMobile", 20));
|
||||
exportEntities.add(new ExcelExportEntity("在职状态", "userState", 20));
|
||||
exportEntities.add(new ExcelExportEntity("聘用方式", "preparedBy", 20));
|
||||
exportEntities.add(new ExcelExportEntity("人员类型", "personType", 20));
|
||||
exportEntities.add(new ExcelExportEntity("所属工会", "unionName", 20));
|
||||
exportEntities.add(new ExcelExportEntity("所属单位", "unitName", 30));
|
||||
|
||||
ExportParams exportParams = new ExportParams();
|
||||
exportParams.setType(ExcelType.XSSF);
|
||||
|
||||
try {
|
||||
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, exportEntities, list);
|
||||
CommonDownloadUtil.download("会员福利号码不一致名单.xlsx", workbook, response);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+161
@@ -0,0 +1,161 @@
|
||||
package com.budwk.app.zhgh.staffmanage.member.controller.change;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import cn.dev33.satoken.annotation.SaMode;
|
||||
import com.budwk.app.base.annotation.SLog;
|
||||
import com.budwk.app.base.constant.BpmProcessConstant;
|
||||
import com.budwk.app.base.constant.RoleConstant;
|
||||
import com.budwk.app.base.page.Pagination;
|
||||
import com.budwk.app.base.result.Result;
|
||||
import com.budwk.app.bpm.service.BpmService;
|
||||
import com.budwk.app.bpm.vo.BpmTaskApprovalRecordVo;
|
||||
import com.budwk.app.web.commons.auth.utils.AuthUtil;
|
||||
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
|
||||
import com.budwk.app.zhgh.staffmanage.member.models.MemberChangeRecord;
|
||||
import com.budwk.app.zhgh.staffmanage.member.param.pageform.MemberChangePageForm;
|
||||
import com.budwk.app.zhgh.staffmanage.member.service.MemberCommonService;
|
||||
import com.budwk.app.zhgh.staffmanage.member.vo.MemberCommonVo;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.nutz.aop.interceptor.ioc.TransAop;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Dao;
|
||||
import org.nutz.dao.Sqls;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.ioc.aop.Aop;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.lang.Lang;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
|
||||
import javax.validation.Valid;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @version 1.0
|
||||
* @Author zzr
|
||||
* @name:MemberChangeMineController
|
||||
* @Date 2025/9/16 16:04
|
||||
* @注释
|
||||
*/
|
||||
@IocBean
|
||||
@Ok("json:full")
|
||||
@ApiModel("会员变更申请查看")
|
||||
@At("/platform/member/change/mine")
|
||||
public class MemberChangeMineController {
|
||||
|
||||
@Inject
|
||||
private Dao dao;
|
||||
@Inject
|
||||
private BpmService bpmService;
|
||||
@Inject
|
||||
private MemberCommonService memberCommonService;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/staffmanage/member/change/mine/index.html")
|
||||
@SaCheckPermission("member.change.mine")
|
||||
public void index() {
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@SaCheckPermission("member.change.mine")
|
||||
public Result pageData(MemberChangePageForm pageForm) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
info.id,
|
||||
info.username,
|
||||
info.loginname,
|
||||
info.sex,
|
||||
info.unitName,
|
||||
info.unionName,
|
||||
info.userState,
|
||||
info.preparedBy,
|
||||
info.personType,
|
||||
info.changeTypes,
|
||||
info.applyDateTime,
|
||||
inst.id processInstanceId,
|
||||
inst.processInstanceNodeId,
|
||||
inst.processInstanceNodeCode,
|
||||
inst.processInstanceNodeName,
|
||||
inst.processInstanceTaskIds,
|
||||
inst.processInstanceStatus,
|
||||
task.id processInstanceTaskId,
|
||||
task.taskStatus processInstanceTaskStatus,
|
||||
(
|
||||
SELECT
|
||||
count( 1 ) > 0
|
||||
FROM
|
||||
bpm_process_task
|
||||
WHERE
|
||||
prevTaskId = ( SELECT id FROM bpm_process_task WHERE processInstanceId = inst.id AND processTaskNodeCode IN ( 10, 40, 70, 100 ) ORDER BY createdAt DESC LIMIT 1 )
|
||||
AND taskStatus = 'COMPELTE'
|
||||
) AS nextTaskIsComplete,
|
||||
( SELECT name FROM sys_union_group WHERE info.unitId = unitId ) AS groupName
|
||||
FROM
|
||||
bpm_process_task task
|
||||
INNER JOIN bpm_process_node_define nd ON nd.id = task.processTaskNodeId
|
||||
INNER JOIN bpm_process_instance inst ON inst.id = task.processInstanceId
|
||||
INNER JOIN bpm_process_define define On inst.processDefineId = define.id
|
||||
INNER JOIN member_change_record info ON info.id = inst.processInstanceBusinessId
|
||||
LEFT JOIN bpm_process_task nt ON nt.prevTaskId = task.id AND nt.taskStatus = 'COMPLETE'
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
pageForm.buildSearch(cnd, "info.");
|
||||
cnd.and("nd.nodeCode", "=", 10);
|
||||
cnd.and("define.`code`", "=", BpmProcessConstant.MEMBER_CHANGE.name());
|
||||
if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) {
|
||||
if (AuthUtil.hasRole(RoleConstant.BRANCH_UNION_CHAIRMAN.name())) {
|
||||
cnd.andEX("info.unionId","=", SecurityUtil.getUnionId());
|
||||
} else {
|
||||
cnd.and("info.userId", "=", SecurityUtil.getUserId());
|
||||
}
|
||||
}
|
||||
cnd.desc("info.applyDateTime");
|
||||
sql.setCondition(cnd);
|
||||
Pagination<MemberCommonVo> listPageVO = memberCommonService.listPageVO(pageForm, sql, MemberCommonVo.class);
|
||||
return Result.success(listPageVO);
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@ApiOperation("删除会员申请记录")
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@SaCheckPermission("member.change.mine")
|
||||
@SLog(tag = "会员管理-变更申请-我的申请记录", msg = "删除申请")
|
||||
public Result onDelete(@Valid String id) {
|
||||
dao.clear(MemberChangeRecord.class, Cnd.where("id", "=", id));
|
||||
bpmService.deleteInstance(id);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@ApiOperation("个人申请撤回")
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@SaCheckPermission("member.change.mine")
|
||||
@SLog(tag = "会员管理-变更申请-个人申请撤回", msg = "个人申请撤回")
|
||||
public Result revokeApply(@Valid String id) {
|
||||
bpmService.revokeApply(id);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@ApiOperation("根据id查询变更记录")
|
||||
@SaCheckPermission(value = {"member.change.mine", "member.change.unionGroup.audit"}, mode = SaMode.OR)
|
||||
public Result findMemberChangeRecord(@Valid String id){
|
||||
MemberChangeRecord record = dao.fetch(MemberChangeRecord.class, id);
|
||||
NutMap nutMap = Lang.obj2nutmap(record);
|
||||
|
||||
List<NutMap> changeInfos = memberCommonService.getChangeInfos(nutMap.getString("id"));
|
||||
nutMap.put("changeInfos", changeInfos);
|
||||
|
||||
List<BpmTaskApprovalRecordVo> nodeTasks = bpmService.getNodeTasks(BpmProcessConstant.MEMBER_CHANGE, id);
|
||||
nutMap.put("nodeTasks", nodeTasks);
|
||||
return Result.success().addData(nutMap);
|
||||
}
|
||||
}
|
||||
+10
-9
@@ -4,7 +4,7 @@ import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import com.budwk.app.base.page.Pagination;
|
||||
import com.budwk.app.base.result.Result;
|
||||
import com.budwk.app.zhgh.staffmanage.member.param.pageform.MemberManagePageForm;
|
||||
import com.budwk.app.zhgh.staffmanage.member.service.MemberManageService;
|
||||
import com.budwk.app.zhgh.staffmanage.member.service.MemberCommonService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
@@ -12,20 +12,20 @@ import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
|
||||
/**
|
||||
* @version 1.0
|
||||
* @Author zzr
|
||||
* @name:MemberChangeRecordsController
|
||||
* @Date 2024/8/8 8:40
|
||||
* @注释
|
||||
* @name:MemberChangeRecordController
|
||||
* @Date 2025/9/16 16:04
|
||||
* @version 1.0
|
||||
* @注释 变更记录
|
||||
*/
|
||||
@Slf4j
|
||||
@IocBean
|
||||
@Ok("json")
|
||||
@At("/platform/member/change/record")
|
||||
@Slf4j
|
||||
public class MemberChangeRecordController {
|
||||
|
||||
@Inject
|
||||
private MemberManageService memberService;
|
||||
private MemberCommonService memberCommonService;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/staffmanage/member/change/record/index.html")
|
||||
@@ -33,10 +33,11 @@ public class MemberChangeRecordController {
|
||||
public void index() {
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@SaCheckPermission("member.change.record")
|
||||
public Result pageData(MemberManagePageForm pageForm) {
|
||||
Pagination pagination = memberService.memberHistoryRecords(pageForm);
|
||||
public Result pageData(MemberManagePageForm pageForm){
|
||||
Pagination pagination = memberCommonService.memberHistoryRecords(pageForm);
|
||||
return Result.success(pagination);
|
||||
}
|
||||
}
|
||||
|
||||
+150
@@ -0,0 +1,150 @@
|
||||
package com.budwk.app.zhgh.staffmanage.member.controller.change;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.budwk.app.base.annotation.RepeatSubmit;
|
||||
import com.budwk.app.base.annotation.SLog;
|
||||
import com.budwk.app.base.constant.BpmProcessConstant;
|
||||
import com.budwk.app.base.constant.RoleConstant;
|
||||
import com.budwk.app.base.page.Pagination;
|
||||
import com.budwk.app.base.result.Result;
|
||||
import com.budwk.app.bpm.enums.BpmProcessTaskStatusEnum;
|
||||
import com.budwk.app.bpm.enums.BpmTaskApprovalTypeEnum;
|
||||
import com.budwk.app.bpm.param.BpmTaskApprovalParam;
|
||||
import com.budwk.app.bpm.service.BpmService;
|
||||
import com.budwk.app.web.commons.auth.utils.AuthUtil;
|
||||
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
|
||||
import com.budwk.app.zhgh.staffmanage.member.models.MemberChangeRecord;
|
||||
import com.budwk.app.zhgh.staffmanage.member.param.pageform.MemberChangePageForm;
|
||||
import com.budwk.app.zhgh.staffmanage.member.param.pageform.MemberManagePageForm;
|
||||
import com.budwk.app.zhgh.staffmanage.member.service.MemberCommonService;
|
||||
import com.budwk.app.zhgh.staffmanage.member.vo.MemberCommonVo;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nutz.aop.interceptor.ioc.TransAop;
|
||||
import org.nutz.dao.Chain;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Sqls;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.dao.util.cri.Static;
|
||||
import org.nutz.ioc.aop.Aop;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
import org.nutz.mvc.annotation.Param;
|
||||
|
||||
import javax.validation.Valid;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @version 1.0
|
||||
* @Author zzr
|
||||
* @name:MemberSchoolUnionAuditController
|
||||
* @Date 2024/8/13 8:49
|
||||
* @注释
|
||||
*/
|
||||
@Slf4j
|
||||
@IocBean
|
||||
@Ok("json")
|
||||
@At("/platform/member/change/schoolUnion/audit")
|
||||
public class MemberChangeSchoolUnionAuditController {
|
||||
|
||||
@Inject
|
||||
private BpmService bpmService;
|
||||
|
||||
@Inject
|
||||
private MemberCommonService memberCommonService;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/staffmanage/member/change/schoolunionaudit/index.html")
|
||||
@SaCheckPermission("member.change.schoolUnion.audit")
|
||||
public void index() {
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@SaCheckPermission("member.change.schoolUnion.audit")
|
||||
public Result pageData(MemberChangePageForm pageForm) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
info.id,
|
||||
info.username,
|
||||
info.loginname,
|
||||
info.sex,
|
||||
info.unitName,
|
||||
info.unionName,
|
||||
info.userState,
|
||||
info.preparedBy,
|
||||
info.personType,
|
||||
info.changeTypes,
|
||||
info.applyDateTime,
|
||||
inst.id processInstanceId,
|
||||
inst.processInstanceNodeId,
|
||||
inst.processInstanceNodeName,
|
||||
inst.processInstanceTaskIds,
|
||||
inst.processInstanceStatus,
|
||||
task.id processInstanceTaskId,
|
||||
task.taskStatus processInstanceTaskStatus,
|
||||
COUNT(nt.id) OVER (PARTITION BY task.id) > 0 AS nextTaskIsComplete
|
||||
FROM
|
||||
bpm_process_task task
|
||||
INNER JOIN bpm_process_node_define nd ON nd.id = task.processTaskNodeId
|
||||
INNER JOIN bpm_process_instance inst ON inst.id = task.processInstanceId
|
||||
INNER JOIN bpm_process_define define On inst.processDefineId = define.id
|
||||
INNER JOIN member_change_record info ON info.id = inst.processInstanceBusinessId
|
||||
LEFT JOIN bpm_process_task nt ON nt.prevTaskId = task.id AND nt.taskStatus = 'COMPLETE'
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
pageForm.buildSearch(cnd, "info.");
|
||||
if(!AuthUtil.hasRole(RoleConstant.SYSADMIN.name())){
|
||||
cnd.and(new Static("JSON_CONTAINS( task.assignments, '\"%s\"' )".formatted(SecurityUtil.getUserLoginname())));
|
||||
}
|
||||
cnd.and("nd.nodeCode","=",80);
|
||||
if (pageForm.getAudit() != null) {
|
||||
if (pageForm.getAudit()) {
|
||||
cnd.and("task.taskStatus", "=", BpmProcessTaskStatusEnum.COMPLETE);
|
||||
} else {
|
||||
cnd.and("task.taskStatus", "=", BpmProcessTaskStatusEnum.ACTIVE);
|
||||
}
|
||||
}
|
||||
cnd.and("define.`code`", "=", BpmProcessConstant.MEMBER_CHANGE.name());
|
||||
cnd.desc("task.createdOn");
|
||||
cnd.groupBy("info.id");
|
||||
sql.setCondition(cnd);
|
||||
Pagination<MemberCommonVo> listPageVO = memberCommonService.listPageVO(pageForm, sql, MemberCommonVo.class);
|
||||
return Result.success(listPageVO);
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@RepeatSubmit
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@SaCheckPermission("member.change.schoolUnion.audit")
|
||||
@SLog(tag = "会员管理-校工会管理", type = "memberSchoolUnionAudit", msg = "校工会会员审核")
|
||||
public Result approval(@Param("approval") @Valid BpmTaskApprovalParam approvalParam) {
|
||||
Map<String, Object> variables = BeanUtil.beanToMap(approvalParam);
|
||||
if (approvalParam.getBpmTaskApprovalTypeEnum().equals(BpmTaskApprovalTypeEnum.PASS)) {
|
||||
MemberChangeRecord record = memberCommonService.dao().fetch(MemberChangeRecord.class, Cnd.where("id", "=", approvalParam.getProcessInstanceBusinessId()));
|
||||
if (StrUtil.isNotEmpty(approvalParam.getApprovalRemark())) {
|
||||
memberCommonService.dao().update(MemberChangeRecord.class, Chain.make("remark", approvalParam.getApprovalRemark()), Cnd.where("id", "=", record.getId()));
|
||||
}
|
||||
memberCommonService.compareChangeInfoAndUpdateMember(record);
|
||||
}
|
||||
bpmService.completeTask(approvalParam.getProcessInstanceTaskId(), approvalParam.getBpmTaskApprovalTypeEnum(), variables, null);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@ApiOperation("校工会审核撤回")
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@SaCheckPermission("member.change.schoolUnion.audit")
|
||||
@SLog(tag = "会员管理-校工会管理", type = "memberSchoolUnionAudit", msg = "校工会审核撤回")
|
||||
public Result revoke(@Valid String taskId) {
|
||||
bpmService.revokeTask(taskId);
|
||||
return Result.success();
|
||||
}
|
||||
}
|
||||
+164
@@ -0,0 +1,164 @@
|
||||
package com.budwk.app.zhgh.staffmanage.member.controller.change;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import com.budwk.app.base.annotation.SLog;
|
||||
import com.budwk.app.base.constant.BpmProcessConstant;
|
||||
import com.budwk.app.base.constant.RoleConstant;
|
||||
import com.budwk.app.base.page.Pagination;
|
||||
import com.budwk.app.base.result.Result;
|
||||
import com.budwk.app.bpm.enums.BpmProcessTaskStatusEnum;
|
||||
import com.budwk.app.bpm.enums.BpmTaskApprovalTypeEnum;
|
||||
import com.budwk.app.bpm.param.BpmTaskApprovalParam;
|
||||
import com.budwk.app.bpm.service.BpmService;
|
||||
import com.budwk.app.sys.models.Sys_config;
|
||||
import com.budwk.app.web.commons.auth.utils.AuthUtil;
|
||||
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
|
||||
import com.budwk.app.web.controllers.open.commons.service.CommonService;
|
||||
import com.budwk.app.zhgh.staffmanage.member.param.pageform.MemberChangePageForm;
|
||||
import com.budwk.app.zhgh.staffmanage.member.service.MemberCommonService;
|
||||
import com.budwk.app.zhgh.staffmanage.member.vo.MemberCommonVo;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nutz.aop.interceptor.ioc.TransAop;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Dao;
|
||||
import org.nutz.dao.Sqls;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.dao.util.cri.Static;
|
||||
import org.nutz.ioc.aop.Aop;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
import org.nutz.mvc.annotation.Param;
|
||||
|
||||
import javax.validation.Valid;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @version 1.0
|
||||
* @Author zzr
|
||||
* @name:MemberUnionGroupAuditController
|
||||
* @Date 2025/9/18 14:33
|
||||
* @注释 工会小组审核
|
||||
*/
|
||||
@Slf4j
|
||||
@IocBean
|
||||
@Ok("json")
|
||||
@At("/platform/member/change/unionGroup/audit")
|
||||
public class MemberChangeUnionGroupAuditController {
|
||||
|
||||
@Inject
|
||||
private Dao dao;
|
||||
@Inject
|
||||
private BpmService bpmService;
|
||||
@Inject
|
||||
private CommonService commonService;
|
||||
@Inject
|
||||
private MemberCommonService memberCommonService;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/staffmanage/member/change/groupunionaudit/index.html")
|
||||
@SaCheckPermission("member.change.unionGroup.audit")
|
||||
public void index() {
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@SaCheckPermission("member.change.unionGroup.audit")
|
||||
public Result pageData(MemberChangePageForm pageForm) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
info.id,
|
||||
info.username,
|
||||
info.loginname,
|
||||
info.sex,
|
||||
info.unitName,
|
||||
info.unionName,
|
||||
info.userState,
|
||||
info.preparedBy,
|
||||
info.personType,
|
||||
info.changeTypes,
|
||||
info.applyDateTime,
|
||||
inst.id processInstanceId,
|
||||
inst.processInstanceNodeId,
|
||||
inst.processInstanceNodeName,
|
||||
inst.processInstanceTaskIds,
|
||||
inst.processInstanceStatus,
|
||||
task.id processInstanceTaskId,
|
||||
task.taskStatus processInstanceTaskStatus,
|
||||
COUNT(nt.id) OVER (PARTITION BY task.id) > 0 AS nextTaskIsComplete
|
||||
FROM
|
||||
bpm_process_task task
|
||||
INNER JOIN bpm_process_node_define nd ON nd.id = task.processTaskNodeId
|
||||
INNER JOIN bpm_process_instance inst ON inst.id = task.processInstanceId
|
||||
INNER JOIN bpm_process_define define On inst.processDefineId = define.id
|
||||
INNER JOIN member_change_record info ON info.id = inst.processInstanceBusinessId
|
||||
LEFT JOIN bpm_process_task nt ON nt.prevTaskId = task.id AND nt.taskStatus = 'COMPLETE'
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
pageForm.buildSearch(cnd, "info.");
|
||||
if(!AuthUtil.hasRole(RoleConstant.SYSADMIN.name())){
|
||||
cnd.and(new Static("JSON_CONTAINS( task.assignments, '\"%s\"' )".formatted(SecurityUtil.getUserLoginname())));
|
||||
}
|
||||
cnd.and("nd.nodeCode","=",20);
|
||||
if (pageForm.getAudit() != null) {
|
||||
if (pageForm.getAudit()) {
|
||||
cnd.and("task.taskStatus", "=", BpmProcessTaskStatusEnum.COMPLETE);
|
||||
} else {
|
||||
cnd.and("task.taskStatus", "=", BpmProcessTaskStatusEnum.ACTIVE);
|
||||
}
|
||||
}
|
||||
cnd.and("define.`code`", "=", BpmProcessConstant.MEMBER_CHANGE.name());
|
||||
cnd.desc("task.createdOn");
|
||||
cnd.groupBy("info.id");
|
||||
sql.setCondition(cnd);
|
||||
Pagination<MemberCommonVo> listPageVO = memberCommonService.listPageVO(pageForm, sql, MemberCommonVo.class);
|
||||
return Result.success(listPageVO);
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@ApiOperation("会员变更工会小组审核")
|
||||
@SaCheckPermission("member.change.unionGroup.audit")
|
||||
@SLog(tag = "会员变更", msg = "工会小组审核")
|
||||
public Result approval(@Param("approval") @Valid BpmTaskApprovalParam approvalParam) {
|
||||
approvalParam.getBpmTaskApprovalTypeEnum();
|
||||
Map<String, Object> variables = BeanUtil.beanToMap(approvalParam);
|
||||
|
||||
List<String> assignments = new ArrayList<>();
|
||||
if(approvalParam.getBpmTaskApprovalTypeEnum().equals(BpmTaskApprovalTypeEnum.PASS)){
|
||||
// 查询系统参数,看是否需要分工会审核
|
||||
Sys_config config = dao.fetch(Sys_config.class, Cnd.where(Sys_config::getConfigKey, "=", "UnionGroupIsNeedBranchAudit"));
|
||||
if ("true".equals(config.getConfigValue())) {
|
||||
// 工会小组审核后,需要分工会审核
|
||||
variables.put("groupAuditNext", "branch");
|
||||
String approvalLoginName = commonService.findUserLoginNameByRoleCode(RoleConstant.BRANCH_UNION_CHAIRMAN);
|
||||
assignments.add(approvalLoginName);
|
||||
} else {
|
||||
// 工会小组审核后,不需要分工会审核,交由校工会审核
|
||||
variables.put("groupAuditNext", "school");
|
||||
String approvalLoginName = commonService.findUserLoginNameByRoleCode(RoleConstant.SCHOOL_UNION_ADMIN);
|
||||
assignments.add(approvalLoginName);
|
||||
}
|
||||
}
|
||||
bpmService.completeTask(approvalParam.getProcessInstanceTaskId(), approvalParam.getBpmTaskApprovalTypeEnum(), variables, assignments);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@ApiOperation("工会小组审核撤回")
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@SaCheckPermission("member.change.unionGroup.audit")
|
||||
@SLog(tag = "会员变更", msg = "工会小组审核撤回")
|
||||
public Result revoke(@Valid String taskId) {
|
||||
bpmService.revokeTask(taskId);
|
||||
return Result.success();
|
||||
}
|
||||
}
|
||||
-91
@@ -1,91 +0,0 @@
|
||||
package com.budwk.app.zhgh.staffmanage.member.controller.modelworker;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import cn.dev33.satoken.annotation.SaMode;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.budwk.app.base.page.Pagination;
|
||||
import com.budwk.app.base.result.Result;
|
||||
import com.budwk.app.zhgh.staffmanage.member.param.pageform.MemberModelWorkerPageForm;
|
||||
import com.budwk.app.zhgh.staffmanage.member.service.MemberModelWorkerService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nutz.dao.Chain;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.lang.Lang;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
import org.nutz.mvc.annotation.Param;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @version 1.0
|
||||
* @Author zzr
|
||||
* @name:MemberModelWorkerController
|
||||
* @Date 2024/9/25 14:24
|
||||
* @注释
|
||||
*/
|
||||
@Slf4j
|
||||
@IocBean
|
||||
@Ok("json")
|
||||
@At("/platform/member/modelWorker/manage")
|
||||
public class MemberModelWorkerController {
|
||||
|
||||
@Inject
|
||||
private MemberModelWorkerService memberModelWorkerService;
|
||||
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/staffmanage/member/modelworker/manage/index.html")
|
||||
@SaCheckPermission("member.modelWorker.manage")
|
||||
public void index() {}
|
||||
|
||||
|
||||
@At
|
||||
@SaCheckPermission("member.modelWorker.manage")
|
||||
public Result pageData(MemberModelWorkerPageForm pageForm) {
|
||||
Sql sql = memberModelWorkerService.getSql(pageForm);
|
||||
Pagination pagination = memberModelWorkerService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
|
||||
return Result.success(pagination);
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@SaCheckPermission("member.modelWorker.manage")
|
||||
public Result setModelWorker(String userId) {
|
||||
if (StrUtil.isNotBlank(userId)) {
|
||||
memberModelWorkerService.update(Chain.make("isModelWorker", true), Cnd.where("id", "=", userId));
|
||||
return Result.success();
|
||||
} else {
|
||||
return Result.error();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 取消劳模身份
|
||||
* @return
|
||||
*/
|
||||
@At
|
||||
@SaCheckPermission(value = {"member.modelWorker.manage","member.branchUnion.manage.list","member.schoolUnion.manage.list"}, mode = SaMode.OR)
|
||||
public Result cancelModelWorker(@Param("userIds") String[] userIds) {
|
||||
List<String> list = Arrays.asList(userIds);
|
||||
if (Lang.isNotEmpty(list)) {
|
||||
memberModelWorkerService.update(Chain.make("isModelWorker", false), Cnd.where("id", "in", list));
|
||||
return Result.success();
|
||||
} else {
|
||||
return Result.error();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@Ok("void")
|
||||
@SaCheckPermission("member.modelWorker.manage")
|
||||
public void doExport(MemberModelWorkerPageForm pageForm, HttpServletResponse response){
|
||||
memberModelWorkerService.doExport(pageForm, response);
|
||||
}
|
||||
}
|
||||
-128
@@ -1,128 +0,0 @@
|
||||
package com.budwk.app.zhgh.staffmanage.member.controller.school;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import cn.dev33.satoken.annotation.SaMode;
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.budwk.app.base.annotation.RepeatSubmit;
|
||||
import com.budwk.app.base.annotation.SLog;
|
||||
import com.budwk.app.base.constant.BpmProcessConstant;
|
||||
import com.budwk.app.base.page.Pagination;
|
||||
import com.budwk.app.base.result.Result;
|
||||
import com.budwk.app.bpm.enums.BpmTaskApprovalTypeEnum;
|
||||
import com.budwk.app.bpm.param.BpmTaskApprovalParam;
|
||||
import com.budwk.app.bpm.service.BpmService;
|
||||
import com.budwk.app.bpm.vo.BpmTaskApprovalRecordVo;
|
||||
import com.budwk.app.sys.models.Sys_user_history;
|
||||
import com.budwk.app.zhgh.staffmanage.member.models.MemberApplyRecord;
|
||||
import com.budwk.app.zhgh.staffmanage.member.param.pageform.MemberManagePageForm;
|
||||
import com.budwk.app.zhgh.staffmanage.member.service.MemberManageService;
|
||||
import com.budwk.app.zhgh.staffmanage.member.service.MemberSchoolUnionManageService;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nutz.aop.interceptor.ioc.TransAop;
|
||||
import org.nutz.dao.Chain;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.ioc.aop.Aop;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.lang.Lang;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
import org.nutz.mvc.annotation.Param;
|
||||
|
||||
import javax.validation.Valid;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @version 1.0
|
||||
* @Author zzr
|
||||
* @name:MemberSchoolUnionAuditController
|
||||
* @Date 2024/8/13 8:49
|
||||
* @注释
|
||||
*/
|
||||
@Slf4j
|
||||
@IocBean
|
||||
@Ok("json")
|
||||
@At("/platform/member/schoolUnion/audit")
|
||||
public class MemberSchoolUnionAuditController {
|
||||
|
||||
@Inject
|
||||
private BpmService bpmService;
|
||||
|
||||
@Inject
|
||||
private MemberManageService memberManageService;
|
||||
|
||||
@Inject
|
||||
private MemberSchoolUnionManageService memberSchoolUnionManageService;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/staffmanage/member/school/audit/index.html")
|
||||
@SaCheckPermission("member.schoolUnion.audit")
|
||||
public void index() {
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@SaCheckPermission("member.schoolUnion.audit")
|
||||
public Result pageData(MemberManagePageForm pageForm) {
|
||||
Pagination pageData = memberSchoolUnionManageService.getPageData(pageForm);
|
||||
return Result.success(pageData);
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@RepeatSubmit
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@SaCheckPermission("member.schoolUnion.audit")
|
||||
@SLog(tag = "会员管理-校工会管理", type = "memberSchoolUnionAudit", msg = "校工会会员审核")
|
||||
public Result approval(@Param("approval") @Valid BpmTaskApprovalParam approvalParam) {
|
||||
Map<String, Object> variables = BeanUtil.beanToMap(approvalParam);
|
||||
if (approvalParam.getBpmTaskApprovalTypeEnum().equals(BpmTaskApprovalTypeEnum.PASS)) {
|
||||
MemberApplyRecord record = memberManageService.dao().fetch(MemberApplyRecord.class, Cnd.where("id", "=", approvalParam.getProcessInstanceBusinessId()));
|
||||
if (StrUtil.isNotEmpty(approvalParam.getApprovalRemark())) {
|
||||
memberManageService.dao().update(MemberApplyRecord.class, Chain.make("remark", approvalParam.getApprovalRemark()), Cnd.where("id", "=", record.getId()));
|
||||
}
|
||||
memberManageService.compareMemberChangeInfoAndUpdateUser(record);
|
||||
}
|
||||
bpmService.completeTask(approvalParam.getProcessInstanceTaskId(), approvalParam.getBpmTaskApprovalTypeEnum(), variables, null);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@ApiOperation("校工会审核撤回")
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@SaCheckPermission("member.schoolUnion.audit")
|
||||
@SLog(tag = "会员管理-校工会管理", type = "memberSchoolUnionAudit", msg = "校工会审核撤回")
|
||||
public Result revoke(@Valid String taskId) {
|
||||
bpmService.revokeTask(taskId);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 获取变更信息,审核
|
||||
* @param recordId
|
||||
* @return
|
||||
*/
|
||||
@At
|
||||
@SaCheckPermission(value = {"member.branchUnion.audit", "member.schoolUnion.audit"}, mode = SaMode.OR)
|
||||
public Result findAuditChangeInfo(String recordId) {
|
||||
Sys_user_history history = memberManageService.dao().fetch(Sys_user_history.class, Cnd.where("recordId", "=", recordId).or("id","=",recordId));
|
||||
MemberApplyRecord record = memberManageService.dao().fetch(MemberApplyRecord.class, recordId);
|
||||
if (ObjectUtil.isAllEmpty(history, record)) {
|
||||
return Result.error("获取变更信息失败");
|
||||
}
|
||||
List<BpmTaskApprovalRecordVo> nodeTasks = bpmService.getNodeTasks(BpmProcessConstant.MEMBER_BRANCH_UNION_CHANGE, recordId);
|
||||
if (Lang.isNotEmpty(history)) {
|
||||
List<NutMap> nutMaps = memberManageService.compareMemberChangeInfo(history);
|
||||
return Result.success(NutMap.NEW().addv("changeList", nutMaps).addv("nodeTasks", nodeTasks));
|
||||
}
|
||||
List<NutMap> nutMaps = memberManageService.compareMemberChangeInfo(record);
|
||||
return Result.success(NutMap.NEW().addv("changeList", nutMaps).addv("nodeTasks", nodeTasks));
|
||||
}
|
||||
}
|
||||
-244
@@ -1,244 +0,0 @@
|
||||
package com.budwk.app.zhgh.staffmanage.member.controller.school;
|
||||
|
||||
import cn.afterturn.easypoi.excel.ExcelExportUtil;
|
||||
import cn.afterturn.easypoi.excel.entity.ExportParams;
|
||||
import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
|
||||
import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import com.budwk.app.base.annotation.RepeatSubmit;
|
||||
import com.budwk.app.base.annotation.SLog;
|
||||
import com.budwk.app.base.constant.BpmProcessConstant;
|
||||
import com.budwk.app.base.page.Pagination;
|
||||
import com.budwk.app.base.result.Result;
|
||||
import com.budwk.app.base.utils.CommonDownloadUtil;
|
||||
import com.budwk.app.bpm.enums.BpmTaskApprovalTypeEnum;
|
||||
import com.budwk.app.bpm.models.BpmProcessInstance;
|
||||
import com.budwk.app.bpm.models.BpmProcessTask;
|
||||
import com.budwk.app.bpm.param.BpmTaskApprovalParam;
|
||||
import com.budwk.app.bpm.service.BpmService;
|
||||
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
|
||||
import com.budwk.app.zhgh.staffmanage.member.constant.MemberChangeOrigin;
|
||||
import com.budwk.app.zhgh.staffmanage.member.models.MemberApplyRecord;
|
||||
import com.budwk.app.zhgh.staffmanage.member.param.pageform.MemberManagePageForm;
|
||||
import com.budwk.app.zhgh.staffmanage.member.service.MemberManageService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.poi.ss.usermodel.Workbook;
|
||||
import org.nutz.aop.interceptor.ioc.TransAop;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Dao;
|
||||
import org.nutz.dao.Sqls;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.dao.util.cri.Static;
|
||||
import org.nutz.ioc.aop.Aop;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.lang.Lang;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
import org.nutz.mvc.annotation.Param;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.validation.Valid;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @version 1.0
|
||||
* @Author zzr
|
||||
* @name:MemberSchoolUnionManageController
|
||||
* @Date 2024/8/12 14:06
|
||||
* @注释 会员校工会管理
|
||||
*/
|
||||
@IocBean
|
||||
@At("/platform/member/schoolUnion/manage/list")
|
||||
@Slf4j
|
||||
@Ok("json")
|
||||
public class MemberSchoolUnionManageController {
|
||||
|
||||
@Inject
|
||||
private Dao dao;
|
||||
@Inject
|
||||
private BpmService bpmService;
|
||||
@Inject
|
||||
private MemberManageService memberManageService;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/staffmanage/member/school/manage/index.html")
|
||||
@SaCheckPermission("member.schoolUnion.manage.list")
|
||||
public void index() {
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@SaCheckPermission("member.schoolUnion.manage.list")
|
||||
public Result pageData(MemberManagePageForm pageForm){
|
||||
Sql sql = memberManageService.getSql(pageForm, "schoolUnion");
|
||||
Pagination pagination = memberManageService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
|
||||
return Result.success(pagination);
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@SaCheckPermission("member.schoolUnion.manage.list")
|
||||
@SLog(tag = "添加会员", type = "memberBranchManage", msg = "添加会员")
|
||||
public Result addMember(@Valid MemberApplyRecord record) {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@SaCheckPermission("member.schoolUnion.manage.list")
|
||||
public Result getChangeInfoByUserId(String userId) {
|
||||
return Result.success(memberManageService.getMemberChangeInfoByUserId(userId));
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@RepeatSubmit
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@SaCheckPermission("member.branchUnion.manage.list")
|
||||
@SLog(tag = "校工会管理-会员管理", type = "MemberBranchManageList", msg = "校工会普通变更")
|
||||
public Result generalMemberChange(@Param("record") MemberApplyRecord record, @Param("approvalRemark") String approvalRemark){
|
||||
//校工会变更,直接更改
|
||||
try {
|
||||
// 校验是否有变更的字段
|
||||
List<NutMap> changeInfoList = memberManageService.compareMemberChangeInfo(record);
|
||||
|
||||
if (Lang.isNotEmpty(changeInfoList)) {
|
||||
// 存储变更的类型
|
||||
List<String> changeTypeList = memberManageService.compareMemberChangeType(changeInfoList, record);
|
||||
record.setChangeTypes(changeTypeList);
|
||||
record.setChangeOrigin(MemberChangeOrigin.SCHOOL_UNION.name());
|
||||
record.setRemark(approvalRemark);
|
||||
memberManageService.insert(record);
|
||||
|
||||
// 开启流程,留痕
|
||||
bpmService.startSubmitProcessInstance(BpmProcessConstant.MEMBER_BRANCH_UNION_CHANGE.name(),
|
||||
"【会员分工会变更】" +record.getUsername(), record.getId(),
|
||||
List.of(SecurityUtil.getUserLoginname()), null);
|
||||
// 然后完成申请流程
|
||||
BpmProcessInstance committeeInstance = dao.fetch(BpmProcessInstance.class, Cnd.where("processInstanceBusinessId", "=", record.getId()));
|
||||
BpmProcessTask committeeTask = dao.fetch(BpmProcessTask.class, Cnd.where(BpmProcessTask::getProcessInstanceId, "=", committeeInstance.getId())
|
||||
.desc(BpmProcessTask::getCreatedAt));
|
||||
BpmTaskApprovalParam committeeParam = new BpmTaskApprovalParam();
|
||||
committeeParam.setProcessInstanceId(committeeInstance.getId());
|
||||
committeeParam.setProcessInstanceBusinessId(record.getId());
|
||||
committeeParam.setProcessInstanceTaskId(committeeTask.getId());
|
||||
committeeParam.setBpmTaskApprovalType(BpmTaskApprovalTypeEnum.PASS.name());
|
||||
committeeParam.setBpmTaskApprovalTypeEnum(BpmTaskApprovalTypeEnum.PASS);
|
||||
committeeParam.setApprovalOpinion("校工会会审核通过");
|
||||
bpmService.completeTask(committeeParam.getProcessInstanceTaskId(), committeeParam.getBpmTaskApprovalTypeEnum(), null, null);
|
||||
|
||||
// 更新用户信息
|
||||
memberManageService.compareMemberChangeInfoAndUpdateUser(record);
|
||||
}
|
||||
return Result.success();
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
return Result.error(e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@At
|
||||
@Ok("void")
|
||||
@SaCheckPermission("member.schoolUnion.manage.list")
|
||||
public void doExport(MemberManagePageForm pageForm, HttpServletResponse response){
|
||||
Sql sql = memberManageService.getSql(pageForm, "schoolUnion");
|
||||
List<NutMap> list = memberManageService.listMap(sql);
|
||||
|
||||
List<ExcelExportEntity> exportEntities = new ArrayList<>();
|
||||
exportEntities.add(new ExcelExportEntity("工号", "loginname", 20));
|
||||
exportEntities.add(new ExcelExportEntity("姓名", "username", 20));
|
||||
exportEntities.add(new ExcelExportEntity("性别", "sex", 20));
|
||||
exportEntities.add(new ExcelExportEntity("出生年月", "birthday", 20));
|
||||
exportEntities.add(new ExcelExportEntity("联系电话", "mobile", 20));
|
||||
exportEntities.add(new ExcelExportEntity("福利号码", "welfareMobile", 20));
|
||||
exportEntities.add(new ExcelExportEntity("在职状态", "userState", 20));
|
||||
exportEntities.add(new ExcelExportEntity("聘用方式", "preparedBy", 20));
|
||||
exportEntities.add(new ExcelExportEntity("人员类型", "personType", 20));
|
||||
exportEntities.add(new ExcelExportEntity("所属工会", "unionName", 20));
|
||||
exportEntities.add(new ExcelExportEntity("所属单位", "unitName", 30));
|
||||
|
||||
ExportParams exportParams = new ExportParams();
|
||||
exportParams.setType(ExcelType.XSSF);
|
||||
|
||||
try {
|
||||
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, exportEntities, list);
|
||||
CommonDownloadUtil.download("会员名单.xlsx", workbook, response);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
@At
|
||||
@Ok("void")
|
||||
@SaCheckPermission("member.schoolUnion.manage.list")
|
||||
public void doExportNotEqPhone(MemberManagePageForm pageForm, HttpServletResponse response){
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
u.id,
|
||||
u.sex,
|
||||
u.loginname,
|
||||
u.username,
|
||||
u.mobile,
|
||||
u.welfareMobile,
|
||||
u.unitId,
|
||||
u.unitName,
|
||||
u.unionId,
|
||||
u.unionName,
|
||||
DATE_FORMAT(u.birthday, '%Y-%m-%d ') as birthday,
|
||||
u.manyUnit,
|
||||
u.member,
|
||||
u.userState,
|
||||
u.preparedBy,
|
||||
u.personType,
|
||||
u.welfareMember,
|
||||
u.isModelWorker,
|
||||
u.wantJoinLoveMutualAidAssociation,
|
||||
his.id hisId,
|
||||
his.changeTypes,
|
||||
his.changeTime
|
||||
FROM
|
||||
vw_user u
|
||||
LEFT JOIN sys_user_history his ON his.loginname = u.loginname
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.and(new Static("u.mobile != u.welfareMobile"));
|
||||
MemberManagePageForm.buildSearch(cnd, pageForm);
|
||||
cnd.desc("his.changeTime");
|
||||
cnd.groupBy("u.id");
|
||||
cnd.asc("u.unionId");
|
||||
cnd.asc("u.unitId");
|
||||
cnd.asc("u.id");
|
||||
sql.setCondition(cnd);
|
||||
List<NutMap> list = memberManageService.listMap(sql);
|
||||
|
||||
List<ExcelExportEntity> exportEntities = new ArrayList<>();
|
||||
exportEntities.add(new ExcelExportEntity("工号", "loginname", 20));
|
||||
exportEntities.add(new ExcelExportEntity("姓名", "username", 20));
|
||||
exportEntities.add(new ExcelExportEntity("性别", "sex", 20));
|
||||
exportEntities.add(new ExcelExportEntity("出生年月", "birthday", 20));
|
||||
exportEntities.add(new ExcelExportEntity("联系电话", "mobile", 20));
|
||||
exportEntities.add(new ExcelExportEntity("福利号码", "welfareMobile", 20));
|
||||
exportEntities.add(new ExcelExportEntity("在职状态", "userState", 20));
|
||||
exportEntities.add(new ExcelExportEntity("聘用方式", "preparedBy", 20));
|
||||
exportEntities.add(new ExcelExportEntity("人员类型", "personType", 20));
|
||||
exportEntities.add(new ExcelExportEntity("所属工会", "unionName", 20));
|
||||
exportEntities.add(new ExcelExportEntity("所属单位", "unitName", 30));
|
||||
|
||||
ExportParams exportParams = new ExportParams();
|
||||
exportParams.setType(ExcelType.XSSF);
|
||||
|
||||
try {
|
||||
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, exportEntities, list);
|
||||
CommonDownloadUtil.download("会员福利号码不一致名单.xlsx", workbook, response);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
-56
@@ -1,56 +0,0 @@
|
||||
package com.budwk.app.zhgh.staffmanage.member.controller.school;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import com.budwk.app.base.page.Pagination;
|
||||
import com.budwk.app.base.result.Result;
|
||||
import com.budwk.app.sys.models.Sys_user_history;
|
||||
import com.budwk.app.zhgh.staffmanage.member.param.pageform.MemberManagePageForm;
|
||||
import com.budwk.app.zhgh.staffmanage.member.service.MemberManageService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
|
||||
import javax.validation.Valid;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @version 1.0
|
||||
* @Author zzr
|
||||
* @name:MemberSchoolRecordController
|
||||
* @Date 2024/8/13 16:27
|
||||
* @注释 校工会 会员变更记录
|
||||
*/
|
||||
@Slf4j
|
||||
@IocBean
|
||||
@Ok("json")
|
||||
@At("/platform/member/schoolUnion/record")
|
||||
public class MemberSchoolUnionRecordController {
|
||||
|
||||
@Inject
|
||||
private MemberManageService memberManageService;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/staffmanage/member/school/record/index.html")
|
||||
@SaCheckPermission("member.schoolUnion.record")
|
||||
public void index() {
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckPermission("member.schoolUnion.record")
|
||||
public Result pageData(MemberManagePageForm pageForm){
|
||||
Pagination pagination = memberManageService.memberHistoryRecords(pageForm);
|
||||
return Result.success(pagination);
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@SaCheckPermission("member.schoolUnion.record")
|
||||
public Result findAuditChangeInfo(@Valid String recordId) {
|
||||
Sys_user_history history = memberManageService.dao().fetch(Sys_user_history.class, recordId);
|
||||
List<NutMap> list = memberManageService.compareMemberChangeInfo(history);
|
||||
return Result.success(list);
|
||||
}
|
||||
}
|
||||
+14
-24
@@ -1,4 +1,4 @@
|
||||
package com.budwk.app.zhgh.staffmanage.member.controller.branch.verification;
|
||||
package com.budwk.app.zhgh.staffmanage.member.controller.verification;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import cn.dev33.satoken.annotation.SaMode;
|
||||
@@ -12,20 +12,16 @@ import com.budwk.app.base.constant.RoleConstant;
|
||||
import com.budwk.app.base.page.Pagination;
|
||||
import com.budwk.app.base.result.Result;
|
||||
import com.budwk.app.sys.models.Sys_user;
|
||||
import com.budwk.app.sys.models.Sys_user_change_info;
|
||||
import com.budwk.app.sys.models.Sys_user_history;
|
||||
import com.budwk.app.web.commons.auth.utils.AuthUtil;
|
||||
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
|
||||
import com.budwk.app.zhgh.staffmanage.member.constant.MemberChangeOrigin;
|
||||
import com.budwk.app.zhgh.staffmanage.member.models.MemberApplyRecord;
|
||||
import com.budwk.app.zhgh.staffmanage.member.models.MemberListVerificationProject;
|
||||
import com.budwk.app.zhgh.staffmanage.member.models.MemberListVerificationUser;
|
||||
import com.budwk.app.zhgh.staffmanage.member.models.MemberVerificationBranchUnionFeedback;
|
||||
import com.budwk.app.zhgh.staffmanage.member.models.*;
|
||||
import com.budwk.app.zhgh.staffmanage.member.param.pageform.MemberListVerificationPageForm;
|
||||
import com.budwk.app.zhgh.staffmanage.member.param.MemberVerificationBranchUnionFeedbackParam;
|
||||
import com.budwk.app.zhgh.staffmanage.member.param.MemberVerificationGetChangeParam;
|
||||
import com.budwk.app.zhgh.staffmanage.member.service.MemberListVerificationService;
|
||||
import com.budwk.app.zhgh.staffmanage.member.service.MemberManageService;
|
||||
import com.budwk.app.zhgh.staffmanage.member.service.MemberCommonService;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nutz.aop.interceptor.ioc.TransAop;
|
||||
@@ -65,7 +61,7 @@ public class MemberBranchVerificationCheckController {
|
||||
private MemberListVerificationService memberListVerificationService;
|
||||
|
||||
@Inject
|
||||
private MemberManageService memberManageService;
|
||||
private MemberCommonService memberCommonService;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/staffmanage/member/branch/verification/check/index.html")
|
||||
@@ -113,16 +109,15 @@ public class MemberBranchVerificationCheckController {
|
||||
@ApiOperation("分工会 名单核对事项,单个人员变更")
|
||||
@SaCheckPermission("member.branchUnion.verification.check")
|
||||
@SLog(tag = "分工会管理-名单核对事项", type = "branchUnionVerification", msg = "分工会单个人员变更")
|
||||
public Result doCheckMember(@Param("record") MemberApplyRecord record) {
|
||||
public Result doCheckMember(@Param("record") MemberChangeRecord record) {
|
||||
if (Objects.isNull(record)) {
|
||||
return Result.error("数据获取失败");
|
||||
}
|
||||
Dao dao = memberManageService.dao();
|
||||
// memberManageService.compareMemberChangeInfoAndUpdateUser(record);
|
||||
Dao dao = memberCommonService.dao();
|
||||
// 校验是否有变更的东西
|
||||
memberManageService.compareMemberChangeInfo(record);
|
||||
memberCommonService.compareChangeInfoAndUpdateMember(record);
|
||||
record.setChangeOrigin(MemberChangeOrigin.BRANCH_UNION_VERIFICATION.name());
|
||||
MemberApplyRecord applyRecord = dao.fetch(MemberApplyRecord.class, Cnd.where("userId", "=", record.getUserId())
|
||||
MemberChangeRecord applyRecord = dao.fetch(MemberChangeRecord.class, Cnd.where("userId", "=", record.getUserId())
|
||||
.and("verificationProjectId", "=", record.getVerificationProjectId()));
|
||||
//查出当前核对事项是否有变更记录,有则修改
|
||||
if (Lang.isNotEmpty(applyRecord)) {
|
||||
@@ -152,7 +147,7 @@ public class MemberBranchVerificationCheckController {
|
||||
@SaCheckPermission("member.branchUnion.verification.check")
|
||||
@SLog(tag = "分工会管理-名单核对事项", type = "branchUnionVerification", msg = "名单核对事项无误提交")
|
||||
public Result correctSubmission(@Param("data") @Valid MemberVerificationBranchUnionFeedbackParam param) {
|
||||
memberManageService.dao().update(MemberVerificationBranchUnionFeedback.class,
|
||||
memberCommonService.dao().update(MemberVerificationBranchUnionFeedback.class,
|
||||
Chain.make("isSubmit", true).add("status", "分工会无误提交")
|
||||
.add("welfareJson", param.getWelfareJson()),
|
||||
Cnd.where("verificationProjectId", "=", param.getVerificationProjectId())
|
||||
@@ -189,7 +184,7 @@ public class MemberBranchVerificationCheckController {
|
||||
@At
|
||||
@SaCheckPermission("member.branchUnion.verification.check")
|
||||
public Result validateSubmitButton(@Valid @Param("verificationProjectId") String verificationProjectId) {
|
||||
MemberVerificationBranchUnionFeedback feedback = memberManageService.dao().fetch(MemberVerificationBranchUnionFeedback.class,
|
||||
MemberVerificationBranchUnionFeedback feedback = memberCommonService.dao().fetch(MemberVerificationBranchUnionFeedback.class,
|
||||
Cnd.where("verificationProjectId", "=", verificationProjectId).and("unionId", "=", SecurityUtil.getUnionId()));
|
||||
|
||||
boolean flag = feedback.getBranchUnionSubmitNum() == 0 || feedback.getBranchUnionSubmit();
|
||||
@@ -240,15 +235,10 @@ public class MemberBranchVerificationCheckController {
|
||||
@ApiOperation("分工会 名单核对事项,获取变更记录")
|
||||
@SaCheckPermission("member.branchUnion.verification.check")
|
||||
public Result getVerificationChangeInfo(@Valid @Param("data") MemberVerificationGetChangeParam param) {
|
||||
MemberApplyRecord record = memberManageService.dao().fetch(MemberApplyRecord.class,
|
||||
MemberChangeRecord record = memberCommonService.dao().fetch(MemberChangeRecord.class,
|
||||
Cnd.where("userId", "=", param.getUserId()).and("verificationProjectId", "=", param.getVerificationProjectId()));
|
||||
if (Lang.isNotEmpty(record)) {
|
||||
Sys_user_history history = memberManageService.dao().fetch(Sys_user_history.class, Cnd.where("recordId", "=", record.getId()).desc("changeTime"));
|
||||
if (Lang.isNotEmpty(history)) {
|
||||
return Result.success(memberManageService.compareMemberChangeInfo(history));
|
||||
} else {
|
||||
return Result.success(memberManageService.compareMemberChangeInfo(record));
|
||||
}
|
||||
return Result.success(memberCommonService.getChangeInfos(record));
|
||||
}
|
||||
return Result.error();
|
||||
}
|
||||
@@ -258,9 +248,9 @@ public class MemberBranchVerificationCheckController {
|
||||
@ApiOperation("分工会 名单核对事项,查看反馈结果")
|
||||
@SaCheckPermission(value = {"member.branchUnion.verification.check", "member.schoolUnion.verification.check"}, mode = SaMode.OR)
|
||||
public Result getVerificationFeedback(String verificationProjectId, String unionId) {
|
||||
MemberVerificationBranchUnionFeedback fetch = memberManageService.dao().fetch(MemberVerificationBranchUnionFeedback.class,
|
||||
MemberVerificationBranchUnionFeedback fetch = memberCommonService.dao().fetch(MemberVerificationBranchUnionFeedback.class,
|
||||
Cnd.where("verificationProjectId", "=", verificationProjectId).and("unionId", "=", unionId));
|
||||
MemberListVerificationProject verificationProject = memberManageService.dao().fetch(MemberListVerificationProject.class, Cnd.where("id", "=", verificationProjectId));
|
||||
MemberListVerificationProject verificationProject = memberCommonService.dao().fetch(MemberListVerificationProject.class, Cnd.where("id", "=", verificationProjectId));
|
||||
NutMap nutMap = Lang.obj2nutmap(verificationProject);
|
||||
nutMap.put("feedbackDate", DateUtil.format(DateUtil.date(fetch.getUpdatedAt()), "yyyy-MM-dd HH:mm:ss"));
|
||||
nutMap.put("unionName", fetch.getUnionName());
|
||||
+3
-7
@@ -1,4 +1,4 @@
|
||||
package com.budwk.app.zhgh.staffmanage.member.controller.school.verification;
|
||||
package com.budwk.app.zhgh.staffmanage.member.controller.verification;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
@@ -14,15 +14,11 @@ import com.budwk.app.sys.models.Sys_union;
|
||||
import com.budwk.app.sys.services.SysDictService;
|
||||
import com.budwk.app.zhgh.benefit.mode.BenefitUserTemp;
|
||||
import com.budwk.app.zhgh.staffmanage.member.mode.MemberImportTemp;
|
||||
import com.budwk.app.zhgh.staffmanage.member.models.MemberApplyRecord;
|
||||
import com.budwk.app.zhgh.staffmanage.member.models.MemberListVerificationProject;
|
||||
import com.budwk.app.zhgh.staffmanage.member.models.MemberListVerificationUser;
|
||||
import com.budwk.app.zhgh.staffmanage.member.models.MemberVerificationBranchUnionFeedback;
|
||||
import com.budwk.app.zhgh.staffmanage.member.models.*;
|
||||
import com.budwk.app.zhgh.staffmanage.member.param.pageform.MemberListVerificationPageForm;
|
||||
import com.budwk.app.zhgh.staffmanage.member.param.MemberListVerificationParam;
|
||||
import com.budwk.app.zhgh.staffmanage.member.param.MemberListVerificationProjectParam;
|
||||
import com.budwk.app.zhgh.staffmanage.member.service.MemberListVerificationService;
|
||||
import com.budwk.app.zhgh.welfare.mode.WelfareUserTemp;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.poi.ss.formula.functions.T;
|
||||
@@ -188,7 +184,7 @@ public class MemberListVerificationController {
|
||||
public Result removeVerificationProject(String verificationProjectId) {
|
||||
Dao dao = memberListVerificationService.dao();
|
||||
dao.clear(MemberListVerificationProject.class, Cnd.where("id", "=", verificationProjectId));
|
||||
dao.clear(MemberApplyRecord.class, Cnd.where("verificationProjectId", "=", verificationProjectId));
|
||||
dao.clear(MemberChangeRecord.class, Cnd.where("verificationProjectId", "=", verificationProjectId));
|
||||
dao.clear(MemberListVerificationUser.class, Cnd.where("verificationProjectId", "=", verificationProjectId));
|
||||
dao.clear(MemberVerificationBranchUnionFeedback.class, Cnd.where("verificationProjectId", "=", verificationProjectId));
|
||||
return Result.success();
|
||||
+24
-36
@@ -1,4 +1,4 @@
|
||||
package com.budwk.app.zhgh.staffmanage.member.controller.school.verification;
|
||||
package com.budwk.app.zhgh.staffmanage.member.controller.verification;
|
||||
|
||||
import cn.afterturn.easypoi.excel.ExcelExportUtil;
|
||||
import cn.afterturn.easypoi.excel.entity.ExportParams;
|
||||
@@ -6,7 +6,6 @@ import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
|
||||
import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.json.JSONObject;
|
||||
import com.budwk.app.base.annotation.RepeatSubmit;
|
||||
import com.budwk.app.base.annotation.SLog;
|
||||
import com.budwk.app.base.page.Pagination;
|
||||
@@ -16,16 +15,12 @@ import com.budwk.app.sys.models.Sys_user;
|
||||
import com.budwk.app.sys.models.Sys_user_change_info;
|
||||
import com.budwk.app.sys.models.Sys_user_history;
|
||||
import com.budwk.app.zhgh.staffmanage.member.constant.MemberChangeOrigin;
|
||||
import com.budwk.app.zhgh.staffmanage.member.constant.MemberChangeType;
|
||||
import com.budwk.app.zhgh.staffmanage.member.models.MemberApplyRecord;
|
||||
import com.budwk.app.zhgh.staffmanage.member.models.MemberListVerificationProject;
|
||||
import com.budwk.app.zhgh.staffmanage.member.models.MemberListVerificationUser;
|
||||
import com.budwk.app.zhgh.staffmanage.member.models.MemberVerificationBranchUnionFeedback;
|
||||
import com.budwk.app.zhgh.staffmanage.member.models.*;
|
||||
import com.budwk.app.zhgh.staffmanage.member.param.pageform.MemberListVerificationPageForm;
|
||||
import com.budwk.app.zhgh.staffmanage.member.param.MemberSchoolVerificationSubmitParam;
|
||||
import com.budwk.app.zhgh.staffmanage.member.param.MemberVerificationGetChangeParam;
|
||||
import com.budwk.app.zhgh.staffmanage.member.service.MemberListVerificationService;
|
||||
import com.budwk.app.zhgh.staffmanage.member.service.MemberManageService;
|
||||
import com.budwk.app.zhgh.staffmanage.member.service.MemberCommonService;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.poi.ss.usermodel.Workbook;
|
||||
@@ -33,9 +28,7 @@ import org.nutz.aop.interceptor.ioc.TransAop;
|
||||
import org.nutz.dao.Chain;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Dao;
|
||||
import org.nutz.dao.Sqls;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.dao.util.cri.Static;
|
||||
import org.nutz.ioc.aop.Aop;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
@@ -68,7 +61,7 @@ public class MemberSchoolVerificationCheckController {
|
||||
private MemberListVerificationService memberListVerificationService;
|
||||
|
||||
@Inject
|
||||
private MemberManageService memberManageService;
|
||||
private MemberCommonService memberCommonService;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/staffmanage/member/school/verification/check/index.html")
|
||||
@@ -96,15 +89,10 @@ public class MemberSchoolVerificationCheckController {
|
||||
@At
|
||||
@SaCheckPermission("member.schoolUnion.verification.check")
|
||||
public Result getVerificationChangeInfo(@Valid @Param("data") MemberVerificationGetChangeParam param) {
|
||||
MemberApplyRecord record = memberManageService.dao().fetch(MemberApplyRecord.class,
|
||||
MemberChangeRecord record = memberCommonService.dao().fetch(MemberChangeRecord.class,
|
||||
Cnd.where("userId", "=", param.getUserId()).and("verificationProjectId", "=", param.getVerificationProjectId()));
|
||||
if (Lang.isNotEmpty(record)) {
|
||||
Sys_user_history history = memberManageService.dao().fetch(Sys_user_history.class, Cnd.where("recordId", "=", record.getId()).desc("changeTime"));
|
||||
if (Lang.isNotEmpty(history)) {
|
||||
return Result.success(memberManageService.compareMemberChangeInfo(history));
|
||||
} else {
|
||||
return Result.success(memberManageService.compareMemberChangeInfo(record));
|
||||
}
|
||||
return Result.success(memberCommonService.getChangeInfos(record));
|
||||
}
|
||||
return Result.success();
|
||||
}
|
||||
@@ -126,18 +114,18 @@ public class MemberSchoolVerificationCheckController {
|
||||
Chain chain = Chain.make("schoolUnionChecked", true);
|
||||
chain.add("verificationOption", param.getOption());
|
||||
|
||||
MemberApplyRecord record = memberManageService.dao().fetch(MemberApplyRecord.class,
|
||||
MemberChangeRecord record = memberCommonService.dao().fetch(MemberChangeRecord.class,
|
||||
Cnd.where("userId", "=", param.getUserId())
|
||||
.and("verificationProjectId", "=", param.getVerificationProjectId()));
|
||||
|
||||
if (param.getFlag()) {
|
||||
chain.add("currentState", 2);
|
||||
memberManageService.compareMemberChangeInfoAndUpdateUser(record);
|
||||
memberCommonService.compareChangeInfoAndUpdateMember(record);
|
||||
} else {
|
||||
chain.add("currentState", 1);
|
||||
memberManageService.update(record);
|
||||
memberCommonService.update(record);
|
||||
}
|
||||
memberManageService.dao().update(MemberListVerificationUser.class, chain,
|
||||
memberCommonService.dao().update(MemberListVerificationUser.class, chain,
|
||||
Cnd.where("userId", "=", param.getUserId()).and("verificationProjectId", "=", param.getVerificationProjectId()));
|
||||
return Result.success();
|
||||
}
|
||||
@@ -148,19 +136,19 @@ public class MemberSchoolVerificationCheckController {
|
||||
@SaCheckPermission("member.schoolUnion.verification.check")
|
||||
@SLog(type = "member", tag = "名单核对事项", msg = "校工会提交")
|
||||
public Result schoolVerificationSubmit(@Valid @Param("data") MemberSchoolVerificationSubmitParam param) {
|
||||
MemberVerificationBranchUnionFeedback fetch = memberManageService.dao().fetch(MemberVerificationBranchUnionFeedback.class,
|
||||
MemberVerificationBranchUnionFeedback fetch = memberCommonService.dao().fetch(MemberVerificationBranchUnionFeedback.class,
|
||||
Cnd.where("verificationProjectId", "=", param.getVerificationProjectId())
|
||||
.and("unionId", "=", param.getUnionId()));
|
||||
fetch.setSchoolUnionSubmit(true);
|
||||
fetch.setSchoolUnionSubmitNum(fetch.getSchoolUnionSubmitNum() + 1);
|
||||
fetch.setStatus("待分工会重新提交");
|
||||
// 更新反馈表的数据,校工会提交置为true
|
||||
memberManageService.dao().update(fetch);
|
||||
memberCommonService.dao().update(fetch);
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.and("unionId", "=", param.getUnionId());
|
||||
cnd.and("verificationProjectId", "=", param.getVerificationProjectId());
|
||||
|
||||
memberManageService.dao().update(MemberListVerificationUser.class,
|
||||
memberCommonService.dao().update(MemberListVerificationUser.class,
|
||||
Chain.make("branchUnionChecked", false).add("schoolUnionChecked", true),
|
||||
cnd);
|
||||
return Result.success();
|
||||
@@ -179,7 +167,7 @@ public class MemberSchoolVerificationCheckController {
|
||||
@SaCheckPermission("member.schoolUnion.verification.check")
|
||||
public Result getChangeTypeUserPageData(MemberListVerificationPageForm pageForm) {
|
||||
Sql sql = memberListVerificationService.getChangeTypeUserSql(pageForm);
|
||||
Pagination pagination = memberManageService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
|
||||
Pagination pagination = memberCommonService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
|
||||
return Result.success(pagination);
|
||||
}
|
||||
|
||||
@@ -189,7 +177,7 @@ public class MemberSchoolVerificationCheckController {
|
||||
@SaCheckPermission("member.schoolUnion.verification.check")
|
||||
public void exportChangeTypeUserByUnionIdExcel(MemberListVerificationPageForm pageForm, HttpServletResponse response) {
|
||||
Sql sql = memberListVerificationService.getChangeTypeUserSql(pageForm);
|
||||
List<NutMap> list = memberManageService.listMap(sql);
|
||||
List<NutMap> list = memberCommonService.listMap(sql);
|
||||
List<ExcelExportEntity> excelExportEntities = memberListVerificationService.buildExportEntities();
|
||||
NutMap nutMap = list.stream().findFirst().orElse(NutMap.NEW());
|
||||
String labelName = "";
|
||||
@@ -215,9 +203,9 @@ public class MemberSchoolVerificationCheckController {
|
||||
@Ok("void")
|
||||
@SaCheckPermission("member.schoolUnion.verification.check")
|
||||
public void exportAllChangeTypeUserExcel(MemberListVerificationPageForm pageForm, HttpServletResponse response){
|
||||
MemberListVerificationProject project = memberManageService.dao().fetch(MemberListVerificationProject.class, pageForm.getVerificationProjectId());
|
||||
MemberListVerificationProject project = memberCommonService.dao().fetch(MemberListVerificationProject.class, pageForm.getVerificationProjectId());
|
||||
Sql sql = memberListVerificationService.getChangeTypeUserSql(pageForm);
|
||||
List<NutMap> list = memberManageService.listMap(sql);
|
||||
List<NutMap> list = memberCommonService.listMap(sql);
|
||||
List<ExcelExportEntity> excelExportEntities = memberListVerificationService.buildExportEntities();
|
||||
String labelName = "";
|
||||
switch (pageForm.getChangeType()) {
|
||||
@@ -244,13 +232,13 @@ public class MemberSchoolVerificationCheckController {
|
||||
@ApiOperation("校工会 名单核对事项,单个人员变更")
|
||||
@SaCheckPermission("member.schoolUnion.verification.check")
|
||||
@SLog(tag = "校工会管理-名单核对事项", type = "schoolUnionVerification", msg = "校工会单个人员变更")
|
||||
public Result doCheckMember(@Param("record") MemberApplyRecord record){
|
||||
public Result doCheckMember(@Param("record") MemberChangeRecord record){
|
||||
if (Objects.isNull(record)) {
|
||||
return Result.error("数据获取失败");
|
||||
}
|
||||
Dao dao = memberManageService.dao();
|
||||
Dao dao = memberCommonService.dao();
|
||||
record.setChangeOrigin(MemberChangeOrigin.SCHOOL_UNION_VERIFICATION.name());
|
||||
MemberApplyRecord applyRecord = dao.fetch(MemberApplyRecord.class, Cnd.where("userId", "=", record.getUserId())
|
||||
MemberChangeRecord applyRecord = dao.fetch(MemberChangeRecord.class, Cnd.where("userId", "=", record.getUserId())
|
||||
.and("verificationProjectId", "=", record.getVerificationProjectId()));
|
||||
// 如果之前有变更,删除之前记录
|
||||
if (Lang.isNotEmpty(applyRecord)) {
|
||||
@@ -271,7 +259,7 @@ public class MemberSchoolVerificationCheckController {
|
||||
.and("verificationProjectId", "=", record.getVerificationProjectId()));
|
||||
dao.clear(Sys_user_history.class, Cnd.where("recordId", "=", record.getId()));
|
||||
|
||||
memberManageService.compareMemberChangeInfoAndUpdateUser(record);
|
||||
memberCommonService.compareChangeInfoAndUpdateMember(record);
|
||||
|
||||
dao.update(MemberListVerificationUser.class,
|
||||
Chain.make("schoolUnionChecked", true).add("currentState", 2),
|
||||
@@ -289,13 +277,13 @@ public class MemberSchoolVerificationCheckController {
|
||||
@SLog(tag = "校工会管理-名单核对事项", type = "schoolUnionVerification", msg = "退回分工会无误提交")
|
||||
public Result doRollback(@Valid @Param("id") String id,
|
||||
@Valid @Param("rollbackReason") String rollbackReason){
|
||||
MemberVerificationBranchUnionFeedback feedback = memberManageService.dao().fetch(MemberVerificationBranchUnionFeedback.class,
|
||||
MemberVerificationBranchUnionFeedback feedback = memberCommonService.dao().fetch(MemberVerificationBranchUnionFeedback.class,
|
||||
Cnd.where("id", "=", id));
|
||||
feedback.setIsRollback(true);
|
||||
feedback.setRollbackReason(rollbackReason);
|
||||
feedback.setSchoolUnionSubmitNum(feedback.getSchoolUnionSubmitNum() + 1);
|
||||
feedback.setStatus("校工会退回");
|
||||
memberManageService.dao().update(feedback);
|
||||
memberCommonService.dao().update(feedback);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
@@ -305,7 +293,7 @@ public class MemberSchoolVerificationCheckController {
|
||||
@Ok("void")
|
||||
@SaCheckPermission("member.schoolUnion.verification.check")
|
||||
public void doExportByPageDataForExcel(MemberListVerificationPageForm pageForm, HttpServletResponse response){
|
||||
MemberListVerificationProject project = memberManageService.dao().fetch(MemberListVerificationProject.class, pageForm.getVerificationProjectId());
|
||||
MemberListVerificationProject project = memberCommonService.dao().fetch(MemberListVerificationProject.class, pageForm.getVerificationProjectId());
|
||||
List<NutMap> mapList = memberListVerificationService.getSchoolListVerificationUnion(pageForm);
|
||||
mapList.forEach(v-> {
|
||||
v.put("branchUnionSubmit" ,v.getBoolean("branchUnionSubmit") ? "已提交" : "未提交");
|
||||
@@ -242,6 +242,10 @@ public class MemberApplyRecord extends BaseModel {
|
||||
@ColDefine(type = ColType.TEXT)
|
||||
private String changeInfos;
|
||||
|
||||
@Column
|
||||
@Comment("入会意愿")
|
||||
@ColDefine(type = ColType.BOOLEAN)
|
||||
private Boolean isVoluntary;
|
||||
|
||||
@Column
|
||||
@Comment("详细变更记录")
|
||||
|
||||
@@ -0,0 +1,255 @@
|
||||
package com.budwk.app.zhgh.staffmanage.member.models;
|
||||
|
||||
import cn.hutool.json.JSONObject;
|
||||
import com.budwk.app.base.model.BaseModel;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.experimental.Accessors;
|
||||
import org.nutz.dao.entity.annotation.*;
|
||||
import org.nutz.dao.interceptor.annotation.PrevInsert;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import javax.validation.constraints.Size;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @version 1.0
|
||||
* @Author zzr
|
||||
* @name:MemberChangeRecord
|
||||
* @Date 2025/9/16 14:12
|
||||
* @注释
|
||||
*/
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
@Table("member_change_record")
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class MemberChangeRecord extends BaseModel {
|
||||
|
||||
@Name
|
||||
@Comment("ID")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
@PrevInsert(uu32 = true)
|
||||
private String id;
|
||||
|
||||
@Column
|
||||
@Comment("用户id")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
@NotBlank(message = "用户不能为空")
|
||||
@Size(max = 32)
|
||||
private String userId;
|
||||
|
||||
@Column
|
||||
@Comment("姓名")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 100)
|
||||
@NotBlank(message = "姓名不能为空")
|
||||
@Size(max = 100)
|
||||
private String username;
|
||||
|
||||
@Column
|
||||
@Comment("工号")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 100)
|
||||
@NotBlank(message = "工号不能为空")
|
||||
@Size(max = 100)
|
||||
private String loginname;
|
||||
|
||||
@Column
|
||||
@Comment("单位id")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
@NotBlank(message = "单位id不能为空")
|
||||
@Size(max = 32)
|
||||
private String unitId;
|
||||
|
||||
@Column
|
||||
@Comment("变更单位id")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
@Size(max = 32)
|
||||
private String changeUnitId;
|
||||
|
||||
@Column
|
||||
@Comment("单位名称")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 200)
|
||||
@NotBlank(message = "单位名称不能为空")
|
||||
@Size(max = 200)
|
||||
private String unitName;
|
||||
|
||||
@Column
|
||||
@Comment("工会id")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
@NotBlank(message = "工会id不能为空")
|
||||
@Size(max = 32)
|
||||
private String unionId;
|
||||
|
||||
@Column
|
||||
@Comment("工会名称")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 50)
|
||||
@NotBlank(message = "工会名称不能为空")
|
||||
@Size(max = 50)
|
||||
private String unionName;
|
||||
|
||||
@Column
|
||||
@Comment("性别")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 10)
|
||||
@NotBlank(message = "性别不能为空")
|
||||
@Size(max = 10)
|
||||
private String sex;
|
||||
|
||||
@Column
|
||||
@Comment("证件号码")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 30)
|
||||
@NotBlank(message = "证件号码不能为空")
|
||||
@Size(max = 30)
|
||||
private String idCard;
|
||||
|
||||
@Column
|
||||
@Comment("民族")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 20)
|
||||
@NotBlank(message = "民族不能为空")
|
||||
@Size(max = 20)
|
||||
private String nation;
|
||||
|
||||
@Column
|
||||
@Comment("政治面貌")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 100)
|
||||
@NotBlank(message = "政治面貌不能为空")
|
||||
@Size(max = 100)
|
||||
private String political;
|
||||
|
||||
@Column
|
||||
@Comment("学历")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 20)
|
||||
@NotBlank(message = "学历不能为空")
|
||||
@Size(max = 20)
|
||||
private String education;
|
||||
|
||||
@Column
|
||||
@Comment("党政职务")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 50)
|
||||
@NotBlank(message = "党政职务不能为空")
|
||||
@Size(max = 50)
|
||||
private String governmentPosition;
|
||||
|
||||
@Column
|
||||
@Comment("在职状态")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 50)
|
||||
@NotBlank(message = "在职状态不能为空")
|
||||
@Size(max = 50)
|
||||
private String userState;
|
||||
|
||||
@Column
|
||||
@Comment("人事编制")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 50)
|
||||
@NotBlank(message = "人事编制不能为空")
|
||||
@Size(max = 50)
|
||||
private String preparedBy;
|
||||
|
||||
@Column
|
||||
@Comment("人员类别")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 50)
|
||||
@NotBlank(message = "人员类别不能为空")
|
||||
@Size(max = 50)
|
||||
private String personType;
|
||||
|
||||
@Column
|
||||
@Comment("手机号码")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
@NotBlank(message = "手机号码不能为空")
|
||||
@Size(max = 32)
|
||||
private String mobile;
|
||||
|
||||
@Column
|
||||
@Comment("电子邮箱")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 255)
|
||||
@NotBlank(message = "电子邮箱不能为空")
|
||||
@Size(max = 255)
|
||||
private String email;
|
||||
|
||||
@Column
|
||||
@Comment("是否愿意加入大病互助基金会")
|
||||
@ColDefine(type = ColType.BOOLEAN)
|
||||
@Default(value = "0")
|
||||
@NotNull(message = "愿意加入大病互助基金会不能为空")
|
||||
private Boolean wantJoinLoveMutualAidAssociation;
|
||||
|
||||
@Column
|
||||
@Comment("会员状态")
|
||||
@ColDefine(type = ColType.BOOLEAN)
|
||||
@Default(value = "0")
|
||||
private Boolean member;
|
||||
|
||||
@Column
|
||||
@Comment("福利会员状态")
|
||||
@ColDefine(type = ColType.BOOLEAN)
|
||||
@Default(value = "0")
|
||||
private Boolean welfareMember;
|
||||
|
||||
@Column
|
||||
@Comment("福利联系方式")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 50)
|
||||
private String welfareMobile;
|
||||
|
||||
@Column
|
||||
@Comment("家庭主要成员及其工作单位")
|
||||
@ColDefine(type = ColType.MYSQL_JSON)
|
||||
private List<JSONObject> families;
|
||||
|
||||
@Column
|
||||
@Comment("博士后进站时间")
|
||||
@ColDefine(type = ColType.DATE)
|
||||
private Date postDoctoralJoinDate;
|
||||
|
||||
@Column
|
||||
@Comment("个人简况")
|
||||
@ColDefine(type = ColType.VARCHAR, customType = "text")
|
||||
@NotBlank(message = "个人简况不能为空")
|
||||
private String personalData;
|
||||
|
||||
@Column
|
||||
@Comment("备注")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 255)
|
||||
private String notes;
|
||||
|
||||
@Column
|
||||
@Comment("变更类型")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 20)
|
||||
private String changeType;
|
||||
|
||||
@Column
|
||||
@Comment("变更类型集合")
|
||||
@ColDefine(type = ColType.MYSQL_JSON)
|
||||
private List<String> changeTypes;
|
||||
|
||||
@Column
|
||||
@Comment("变更来源")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 50)
|
||||
private String changeOrigin;
|
||||
|
||||
@Column
|
||||
@Comment("申请时间")
|
||||
@ColDefine(type = ColType.DATETIME)
|
||||
@PrevInsert(now = true)
|
||||
private Date applyDateTime;
|
||||
|
||||
@Column
|
||||
@Comment("福利享受截止日期")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 50)
|
||||
private String welfareStopDate;
|
||||
|
||||
@Column
|
||||
@Comment("名单事项核对Id")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String verificationProjectId;
|
||||
|
||||
@Column
|
||||
@Comment("详细变更记录")
|
||||
@ColDefine(type = ColType.TEXT)
|
||||
private String changeInfos;
|
||||
|
||||
@Column
|
||||
@Comment("详细变更记录")
|
||||
@ColDefine(type = ColType.TEXT)
|
||||
private String remark;
|
||||
|
||||
private Boolean edit;
|
||||
}
|
||||
+24
-11
@@ -3,6 +3,7 @@ package com.budwk.app.zhgh.staffmanage.member.param.pageform;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.budwk.app.base.param.PageForm;
|
||||
import com.budwk.app.zhgh.staffmanage.member.models.MemberApplyRecord;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import org.nutz.dao.Cnd;
|
||||
@@ -19,30 +20,42 @@ import org.nutz.dao.util.cri.SqlExpressionGroup;
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class MemberApplyPageForm extends PageForm<MemberApplyRecord> {
|
||||
|
||||
// 工会id
|
||||
@ApiModelProperty("工会id")
|
||||
private String unionId;
|
||||
|
||||
// 单位id
|
||||
@ApiModelProperty("单位id")
|
||||
private String unitId;
|
||||
|
||||
// 在职状态
|
||||
@ApiModelProperty("在职状态")
|
||||
private String userState;
|
||||
|
||||
private String personType;
|
||||
|
||||
// 在职状态
|
||||
@ApiModelProperty("编制类型")
|
||||
private String preparedBy;
|
||||
|
||||
public static void buildSearch(Cnd cnd, MemberApplyPageForm pageForm) {
|
||||
// 人员类型
|
||||
@ApiModelProperty("人员类型")
|
||||
private String personType;
|
||||
|
||||
public void buildSearch(Cnd cnd, String prefix){
|
||||
if (cnd == null) {
|
||||
cnd = Cnd.NEW();
|
||||
}
|
||||
if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) {
|
||||
|
||||
if (StrUtil.isNotBlank(this.getSearchKeyword())) {
|
||||
SqlExpressionGroup seg = new SqlExpressionGroup();
|
||||
seg.or("vu.loginname", "like", "%" + pageForm.getSearchKeyword() + "%");
|
||||
seg.or("vu.username", "like", "%" + pageForm.getSearchKeyword() + "%");
|
||||
seg.orLike(prefix + "username", this.getSearchKeyword());
|
||||
seg.orLike(prefix + "loginname", this.getSearchKeyword());
|
||||
cnd.and(seg);
|
||||
}
|
||||
cnd.andEX("vu.unionId","=",pageForm.getUnionId());
|
||||
cnd.andEX("vu.unitId","=",pageForm.getUnitId());
|
||||
cnd.andEX("vu.userState","=",pageForm.getUserState());
|
||||
cnd.andEX("vu.personType","=",pageForm.getPersonType());
|
||||
cnd.andEX("vu.preparedBy","=",pageForm.getPreparedBy());
|
||||
|
||||
cnd.andEX(prefix + "unionId", "=", this.getUnionId());
|
||||
cnd.andEX(prefix + "unitId", "=", this.getUnitId());
|
||||
cnd.andEX(prefix + "userState", "=", this.getUserState());
|
||||
cnd.andEX(prefix + "preparedBy", "=", this.getPreparedBy());
|
||||
cnd.andEX(prefix + "personType", "=", this.getPersonType());
|
||||
}
|
||||
}
|
||||
|
||||
+62
@@ -0,0 +1,62 @@
|
||||
package com.budwk.app.zhgh.staffmanage.member.param.pageform;
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.budwk.app.base.param.PageForm;
|
||||
import com.budwk.app.zhgh.staffmanage.member.models.MemberChangeRecord;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.util.cri.SqlExpressionGroup;
|
||||
|
||||
/**
|
||||
* @version 1.0
|
||||
* @Author zzr
|
||||
* @name:MemberChangePageForm
|
||||
* @Date 2025/9/16 16:31
|
||||
* @注释
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class MemberChangePageForm extends PageForm<MemberChangeRecord> {
|
||||
|
||||
// 工会id
|
||||
@ApiModelProperty("工会id")
|
||||
private String unionId;
|
||||
|
||||
// 单位id
|
||||
@ApiModelProperty("单位id")
|
||||
private String unitId;
|
||||
|
||||
// 在职状态
|
||||
@ApiModelProperty("在职状态")
|
||||
private String userState;
|
||||
|
||||
// 在职状态
|
||||
@ApiModelProperty("编制类型")
|
||||
private String preparedBy;
|
||||
|
||||
// 人员类型
|
||||
@ApiModelProperty("人员类型")
|
||||
private String personType;
|
||||
|
||||
|
||||
public void buildSearch(Cnd cnd, String prefix){
|
||||
if (cnd == null) {
|
||||
cnd = Cnd.NEW();
|
||||
}
|
||||
|
||||
if (StrUtil.isNotBlank(this.getSearchKeyword())) {
|
||||
SqlExpressionGroup seg = new SqlExpressionGroup();
|
||||
seg.orLike(prefix + "username", this.getSearchKeyword());
|
||||
seg.orLike(prefix + "loginname", this.getSearchKeyword());
|
||||
cnd.and(seg);
|
||||
}
|
||||
|
||||
cnd.andEX(prefix + "unionId", "=", this.getUnionId());
|
||||
cnd.andEX(prefix + "unitId", "=", this.getUnitId());
|
||||
cnd.andEX(prefix + "userState", "=", this.getUserState());
|
||||
cnd.andEX(prefix + "preparedBy", "=", this.getPreparedBy());
|
||||
cnd.andEX(prefix + "personType", "=", this.getPersonType());
|
||||
}
|
||||
}
|
||||
+7
-1
@@ -64,7 +64,13 @@ public class MemberManagePageForm extends PageForm {
|
||||
cnd = Cnd.NEW();
|
||||
}
|
||||
if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) {
|
||||
cnd.and("u.unionId", "=", SecurityUtil.getUnionId());
|
||||
if (AuthUtil.hasRoleOr(RoleConstant.BRANCH_UNION_CHAIRMAN.name(), RoleConstant.BRANCH_UNION_OPERATOR.name())) {
|
||||
cnd.and("u.unionId", "=", SecurityUtil.getUnionId());
|
||||
} else if (AuthUtil.hasRoleOr(RoleConstant.BRANCH_UNION_GROUP_LEADER.name())) {
|
||||
cnd.and("u.unionGroupId", "=", SecurityUtil.getUnionGroupId());
|
||||
} else {
|
||||
cnd.and("u.id", "=", SecurityUtil.getUserId());
|
||||
}
|
||||
} else {
|
||||
cnd.andEX("u.unionId", "=", pageForm.getUnionId());
|
||||
}
|
||||
|
||||
+42
-31
@@ -4,7 +4,10 @@ import com.budwk.app.base.page.Pagination;
|
||||
import com.budwk.app.base.service.BaseService;
|
||||
import com.budwk.app.sys.models.Sys_user;
|
||||
import com.budwk.app.sys.models.Sys_user_history;
|
||||
import com.budwk.app.sys.views.View_user;
|
||||
import com.budwk.app.zhgh.staffmanage.member.constant.MemberChangeOrigin;
|
||||
import com.budwk.app.zhgh.staffmanage.member.models.MemberApplyRecord;
|
||||
import com.budwk.app.zhgh.staffmanage.member.models.MemberChangeRecord;
|
||||
import com.budwk.app.zhgh.staffmanage.member.param.pageform.MemberManagePageForm;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
@@ -20,14 +23,14 @@ import java.util.Set;
|
||||
* @Date 2024/8/6 10:42
|
||||
* @注释
|
||||
*/
|
||||
public interface MemberManageService extends BaseService<Sys_user> {
|
||||
public interface MemberCommonService extends BaseService<Sys_user> {
|
||||
|
||||
/**
|
||||
* 多条件查询Sql
|
||||
* @param pageForm
|
||||
* @return
|
||||
*/
|
||||
Sql getSql(MemberManagePageForm pageForm, String queryType);
|
||||
Sql getSql(MemberManagePageForm pageForm);
|
||||
|
||||
/**
|
||||
* 获取会员、非会员、变更、未变更的人数
|
||||
@@ -44,42 +47,45 @@ public interface MemberManageService extends BaseService<Sys_user> {
|
||||
Pagination memberHistoryRecords(MemberManagePageForm pageForm);
|
||||
|
||||
/**
|
||||
* 根据用户id获取会员变更信息(时间线),所有的变更记录
|
||||
* @param userId 用户id
|
||||
* @return List<NutMap>
|
||||
*/
|
||||
List<NutMap> getMemberChangeInfoByUserId(String userId);
|
||||
|
||||
/**
|
||||
* 会员变更信息对比
|
||||
* @param current 当前数据
|
||||
* @param previous 上一条数据
|
||||
* 获取可变更字段
|
||||
* @return
|
||||
*/
|
||||
List<NutMap> compareChange(Sys_user_history current, Sys_user_history previous, Set<String> allowChangeFieldNames, Map<String, String> dictMap);
|
||||
|
||||
List<NutMap> compareMemberChangeInfo(Sys_user_history history);
|
||||
NutMap getDictAllowChangeFields();
|
||||
|
||||
/**
|
||||
* 校验是否有变更
|
||||
* @param record
|
||||
*/
|
||||
List<NutMap> compareMemberChangeInfo(MemberApplyRecord record);
|
||||
|
||||
/**
|
||||
* 获取变更类型
|
||||
* @param changeList 变更记录
|
||||
* 获取变更详情
|
||||
* @param recordId 变更记录id
|
||||
* @return
|
||||
*/
|
||||
List<String> compareMemberChangeType(List<NutMap> changeList, MemberApplyRecord record);
|
||||
List<NutMap> getChangeInfos(String recordId);
|
||||
|
||||
List<NutMap> getChangeInfos(MemberChangeRecord record);
|
||||
|
||||
/**
|
||||
* 会员变更信息对比 并更新数据
|
||||
* 比较有哪些变更类型
|
||||
* @param record
|
||||
* @param user
|
||||
* @return
|
||||
*/
|
||||
List<String> compareChangeType(MemberChangeRecord record, View_user user);
|
||||
|
||||
/**
|
||||
* 存储比较变更信息并更新会员信息
|
||||
* @param recordId
|
||||
*/
|
||||
void compareChangeInfoAndUpdateMember(String recordId);
|
||||
/**
|
||||
* 存储比较变更信息并更新会员信息
|
||||
* @param record
|
||||
*/
|
||||
void compareMemberChangeInfoAndUpdateUser(MemberApplyRecord record);
|
||||
void compareChangeInfoAndUpdateMember(MemberChangeRecord record);
|
||||
|
||||
/**
|
||||
* 获取会员的变更信息
|
||||
* @param userId
|
||||
* @return
|
||||
*/
|
||||
List<NutMap> getAllChangeInfo(String userId);
|
||||
|
||||
/**
|
||||
* 比较两个对象,并记录变更的字段工具
|
||||
@@ -91,11 +97,16 @@ public interface MemberManageService extends BaseService<Sys_user> {
|
||||
*/
|
||||
void extractChange(NutMap newMap, NutMap sourceMap, String fieldName, Map<String, String> fieldsMap, List<NutMap> changeList);
|
||||
|
||||
|
||||
/**
|
||||
* 获取会员变更信息,memberApplyRecord表中名单核对事项人员与sys_user表中人员对比
|
||||
* @param userId
|
||||
* @param verificationProjectId
|
||||
* @return
|
||||
* 验证变更信息
|
||||
* @param record
|
||||
*/
|
||||
List<NutMap> getLastTimeMemberChangeInfoByUserId(String userId, String verificationProjectId);
|
||||
void validateChangeAndSetBasicData(MemberChangeRecord record);
|
||||
|
||||
/**
|
||||
* 验证变更信息
|
||||
* @param record
|
||||
*/
|
||||
void validateChangeAndSetBasicData(MemberChangeRecord record, MemberChangeOrigin origin);
|
||||
}
|
||||
-22
@@ -1,22 +0,0 @@
|
||||
package com.budwk.app.zhgh.staffmanage.member.service;
|
||||
|
||||
import com.budwk.app.base.service.BaseService;
|
||||
import com.budwk.app.sys.models.Sys_user;
|
||||
import com.budwk.app.zhgh.staffmanage.member.param.pageform.MemberModelWorkerPageForm;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
/**
|
||||
* @version 1.0
|
||||
* @Author zzr
|
||||
* @name:MemberModelWorkerService
|
||||
* @Date 2024/9/25 17:01
|
||||
* @注释
|
||||
*/
|
||||
public interface MemberModelWorkerService extends BaseService<Sys_user> {
|
||||
|
||||
Sql getSql(MemberModelWorkerPageForm pageForm);
|
||||
|
||||
void doExport(MemberModelWorkerPageForm pageForm, HttpServletResponse response);
|
||||
}
|
||||
+14
-19
@@ -32,21 +32,17 @@ public class MemberBranchUnionManageServiceImpl extends BaseServiceImpl<Sys_user
|
||||
public Pagination getPageData(MemberManagePageForm pageForm) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
record.id,
|
||||
record.userId,
|
||||
record.username,
|
||||
record.loginname,
|
||||
record.changeType,
|
||||
record.changeTypes,
|
||||
record.changeOrigin,
|
||||
record.applyDateTime,
|
||||
record.unitId,
|
||||
IFNULL(record.unionId, vu.unionid) AS unionId,
|
||||
vu.unionname AS unionName,
|
||||
IFNULL(record.unitName, vu.unitname) AS unitName,
|
||||
IFNULL(record.userState, vu.userState) AS userState,
|
||||
IFNULL(record.preparedBy, vu.preparedBy) AS preparedBy,
|
||||
IFNULL(record.personType, vu.personType) AS personType,
|
||||
info.id,
|
||||
info.username,
|
||||
info.loginname,
|
||||
info.sex,
|
||||
info.unitName,
|
||||
info.unionName,
|
||||
info.userState,
|
||||
info.preparedBy,
|
||||
info.personType,
|
||||
info.changeTypes,
|
||||
info.applyDateTime,
|
||||
inst.id processInstanceId,
|
||||
inst.processInstanceNodeId,
|
||||
inst.processInstanceNodeCode,
|
||||
@@ -61,16 +57,15 @@ public class MemberBranchUnionManageServiceImpl extends BaseServiceImpl<Sys_user
|
||||
INNER JOIN bpm_process_node_define nd ON nd.id = task.processTaskNodeId
|
||||
INNER JOIN bpm_process_instance inst ON inst.id = task.processInstanceId
|
||||
INNER JOIN bpm_process_define define On inst.processDefineId = define.id
|
||||
INNER JOIN member_apply_record record ON record.id = inst.processInstanceBusinessId
|
||||
INNER JOIN member_change_record record ON record.id = inst.processInstanceBusinessId
|
||||
LEFT JOIN bpm_process_task nt ON nt.prevTaskId = task.id AND nt.taskStatus = 'COMPLETE'
|
||||
LEFT JOIN vw_user vu ON vu.id = record.userId
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
MemberManagePageForm.buildAuditSearch(cnd, pageForm);
|
||||
cnd.and("nd.nodeCode", "=", 10);
|
||||
cnd.and("define.`code`", "=", BpmProcessConstant.MEMBER_BRANCH_UNION_CHANGE.name());
|
||||
cnd.and("vu.unionId","=", SecurityUtil.getUnionId());
|
||||
cnd.and("define.`code`", "=", BpmProcessConstant.MEMBER_CHANGE.name());
|
||||
cnd.and("info.unionId","=", SecurityUtil.getUnionId());
|
||||
cnd.desc("record.applyDateTime");
|
||||
sql.setCondition(cnd);
|
||||
return listPageVO(pageForm, sql, MemberChangeAuditVo.class);
|
||||
|
||||
+487
@@ -0,0 +1,487 @@
|
||||
package com.budwk.app.zhgh.staffmanage.member.service.impl;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.hutool.http.HtmlUtil;
|
||||
import com.budwk.app.base.constant.RoleConstant;
|
||||
import com.budwk.app.base.exception.BaseException;
|
||||
import com.budwk.app.base.page.Pagination;
|
||||
import com.budwk.app.base.service.impl.BaseServiceImpl;
|
||||
import com.budwk.app.sys.models.*;
|
||||
import com.budwk.app.sys.services.SysDictService;
|
||||
import com.budwk.app.sys.services.SysRoleService;
|
||||
import com.budwk.app.sys.services.SysUserService;
|
||||
import com.budwk.app.sys.views.View_user;
|
||||
import com.budwk.app.web.commons.auth.utils.AuthUtil;
|
||||
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
|
||||
import com.budwk.app.zhgh.staffmanage.member.constant.MemberChangeOrigin;
|
||||
import com.budwk.app.zhgh.staffmanage.member.constant.MemberChangeType;
|
||||
import com.budwk.app.zhgh.staffmanage.member.models.MemberApplyRecord;
|
||||
import com.budwk.app.zhgh.staffmanage.member.models.MemberChangeRecord;
|
||||
import com.budwk.app.zhgh.staffmanage.member.param.pageform.MemberManagePageForm;
|
||||
import com.budwk.app.zhgh.staffmanage.member.service.MemberCommonService;
|
||||
import com.budwk.app.zhgh.staffmanage.specialstaff.model.SpecialStaff;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nutz.aop.interceptor.ioc.TransAop;
|
||||
import org.nutz.dao.Chain;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Dao;
|
||||
import org.nutz.dao.Sqls;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.dao.util.Daos;
|
||||
import org.nutz.dao.util.cri.SqlExpressionGroup;
|
||||
import org.nutz.dao.util.cri.Static;
|
||||
import org.nutz.ioc.aop.Aop;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.lang.Lang;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @version 1.0
|
||||
* @Author zzr
|
||||
* @name:MemberServiceImpl
|
||||
* @Date 2024/8/6 10:43
|
||||
* @注释
|
||||
*/
|
||||
@IocBean(args = {"refer:dao"})
|
||||
@Slf4j
|
||||
public class MemberCommonServiceImpl extends BaseServiceImpl<Sys_user> implements MemberCommonService {
|
||||
|
||||
@Inject
|
||||
private SysUserService sysUserService;
|
||||
@Inject
|
||||
private SysRoleService sysRoleService;
|
||||
@Inject
|
||||
private SysDictService sysDictService;
|
||||
|
||||
public MemberCommonServiceImpl(Dao dao) {
|
||||
super(dao);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Sql getSql(MemberManagePageForm pageForm) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
u.id,
|
||||
u.sex,
|
||||
u.loginname,
|
||||
u.username,
|
||||
u.mobile,
|
||||
u.unitId,
|
||||
u.unitName,
|
||||
u.unionId,
|
||||
u.unionName,
|
||||
u.birthday,
|
||||
u.manyUnit,
|
||||
u.member,
|
||||
u.userState,
|
||||
u.preparedBy,
|
||||
u.personType,
|
||||
u.welfareMember,
|
||||
his.id hisId,
|
||||
his.changeTypes,
|
||||
his.changeTime
|
||||
FROM
|
||||
vw_user u
|
||||
LEFT JOIN sys_user_history his ON his.loginname = u.loginname
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
MemberManagePageForm.buildSearch(cnd, pageForm);
|
||||
cnd.desc("his.changeTime");
|
||||
cnd.groupBy("u.id");
|
||||
if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) {
|
||||
cnd.and("u.unionId", "=", SecurityUtil.getUnionId());
|
||||
}
|
||||
cnd.asc("u.unionId");
|
||||
cnd.asc("u.unitId");
|
||||
cnd.asc("u.id");
|
||||
sql.setCondition(cnd);
|
||||
return sql;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public NutMap getButtonNum(MemberManagePageForm pageForm) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
(sum( CASE WHEN his.changeTypes IS NOT NULL THEN 1 ELSE 0 END )) as 'changeNum',
|
||||
(sum( CASE WHEN his.changeTypes IS NULL THEN 1 ELSE 0 END )) as 'notChangeNum',
|
||||
count(u.id) as 'userSumNum',
|
||||
(sum( CASE WHEN u.member = 1 THEN 1 ELSE 0 END )) as 'memberNum',
|
||||
(sum( CASE WHEN u.member != 1 THEN 1 ELSE 0 END )) as 'notMemberNum'
|
||||
FROM
|
||||
vw_user u
|
||||
LEFT JOIN sys_user_history his ON his.loginname = u.loginname
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
MemberManagePageForm.buildSearch(cnd,pageForm);
|
||||
sql.setCondition(cnd);
|
||||
cnd.desc("his.changeTime");
|
||||
cnd.groupBy("u.id");
|
||||
return (NutMap) Daos.query(dao(), sql.toString(), Sqls.callback.map());
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public Pagination memberHistoryRecords(MemberManagePageForm pageForm) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
his.id,
|
||||
his.changeTime,
|
||||
his.loginname,
|
||||
his.username,
|
||||
his.mobile,
|
||||
his.birthday,
|
||||
his.userState,
|
||||
his.preparedBy,
|
||||
his.personType,
|
||||
his.sex,
|
||||
his.changeTypes,
|
||||
his.changeOrigin,
|
||||
his.changeReason,
|
||||
his.remark,
|
||||
gh.`name` AS unionName,
|
||||
unit.`name` AS unitName,
|
||||
u.id AS userId
|
||||
FROM
|
||||
`sys_user_history` his
|
||||
LEFT JOIN sys_user u ON u.loginname = his.loginname
|
||||
LEFT JOIN sys_unit unit ON unit.id = u.unitid
|
||||
LEFT JOIN sys_union gh ON gh.id = unit.unionId
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.andEX("gh.id", "=", pageForm.getUnionId());
|
||||
cnd.andEX("his.unitId", "=", pageForm.getUnitId());
|
||||
cnd.andEX("his.personType", "=", pageForm.getPersonType());
|
||||
cnd.andEX("his.userState", "=", pageForm.getUserState());
|
||||
if (StrUtil.isNotBlank(pageForm.getChangeType())){
|
||||
cnd.and(new Static("JSON_CONTAINS(his.changeTypes, JSON_ARRAY('%s'), '$')".formatted(pageForm.getChangeType())));
|
||||
}
|
||||
|
||||
if (Lang.isNotEmpty(pageForm.getChangeTypes())) {
|
||||
SqlExpressionGroup seg = new SqlExpressionGroup();
|
||||
for (String type : pageForm.getChangeTypes()) {
|
||||
seg.or(new Static("JSON_CONTAINS(his.changeTypes, JSON_ARRAY('%s'), '$')".formatted(type)));
|
||||
}
|
||||
cnd.and(seg);
|
||||
}
|
||||
|
||||
if (Lang.isNotEmpty(pageForm.getChangeOrigins())) {
|
||||
SqlExpressionGroup seg = new SqlExpressionGroup();
|
||||
for (Integer c : pageForm.getChangeOrigins()) {
|
||||
seg.orEquals("his.changeOrigin", c);
|
||||
}
|
||||
cnd.and(seg);
|
||||
}
|
||||
|
||||
if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) {
|
||||
SqlExpressionGroup seg = new SqlExpressionGroup();
|
||||
seg.or("his.loginname", "like", "%" + pageForm.getSearchKeyword() + "%");
|
||||
seg.or("his.username", "like", "%" + pageForm.getSearchKeyword() + "%");
|
||||
cnd.and(seg);
|
||||
}
|
||||
if (StrUtil.isAllNotBlank(pageForm.getPageOrderName(), pageForm.getPageOrderBy())) {
|
||||
cnd.orderBy(pageForm.getPageOrderName(), pageForm.getPageOrderBy());
|
||||
} else {
|
||||
cnd.desc("his.changeTime");
|
||||
}
|
||||
|
||||
if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) {
|
||||
cnd.andEX("his.unionId", "=", SecurityUtil.getUnionId());
|
||||
}
|
||||
sql.setCondition(cnd);
|
||||
return listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
|
||||
}
|
||||
|
||||
@Override
|
||||
public NutMap getDictAllowChangeFields() {
|
||||
//获取可变更字段
|
||||
List<Sys_dict> dictList = sysDictService.getSubListByCode("MEMBER_ALLOW_CHANGES_FIELD");
|
||||
Set<String> allowChangeFieldNames = dictList.stream().map(Sys_dict::getCode).collect(Collectors.toSet());
|
||||
allowChangeFieldNames.add("member");
|
||||
Map<String, String> dictMap = dictList.stream().collect(Collectors.toMap(Sys_dict::getCode, Sys_dict::getName));
|
||||
dictMap.put("member", "会员状态");
|
||||
return NutMap.NEW().addv("allowChangeFieldNames", allowChangeFieldNames).addv("dictMap", dictMap);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<NutMap> getChangeInfos(String recordId) {
|
||||
Sys_user_history history = dao().fetch(Sys_user_history.class, Cnd.where("recordId", "=", recordId));
|
||||
if (Lang.isNotEmpty(history)) {
|
||||
return history.getChangeInfos();
|
||||
} else {
|
||||
MemberChangeRecord record = dao().fetch(MemberChangeRecord.class, recordId);
|
||||
return getChangeInfos(record);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<NutMap> getChangeInfos(MemberChangeRecord record) {
|
||||
View_user info = dao().fetch(View_user.class, Cnd.where("id", "=", record.getUserId()));
|
||||
|
||||
NutMap map = getDictAllowChangeFields();
|
||||
Set<String> allowChangeFieldNames = map.getAs("allowChangeFieldNames", Set.class);
|
||||
Map<String, String> dictMap = map.getAs("dictMap", Map.class);
|
||||
|
||||
// 新数据
|
||||
NutMap newMap = Lang.obj2nutmap(record);
|
||||
// 原数据
|
||||
NutMap sourceMap = Lang.obj2nutmap(info);
|
||||
List<NutMap> changeList = new ArrayList<>();
|
||||
|
||||
for (String fieldName : allowChangeFieldNames) {
|
||||
extractChange(newMap, sourceMap, fieldName, dictMap, changeList);
|
||||
}
|
||||
return changeList;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public List<String> compareChangeType(MemberChangeRecord record, View_user user) {
|
||||
List<String> changeTypes = new ArrayList<>();
|
||||
changeTypes.add(MemberChangeType.BASIC_CHANGE.name());
|
||||
if (!ObjectUtil.equals(user.getUserState(), record.getUserState())) {
|
||||
List<MemberChangeType> list = Arrays.stream(MemberChangeType.values())
|
||||
.filter(v -> v.getChangeTypeName().equals(record.getUserState())).toList();
|
||||
if (Lang.isNotEmpty(list)) {
|
||||
changeTypes.add(list.get(0).name());
|
||||
}
|
||||
}
|
||||
if (!ObjectUtil.equals(user.getMember() == 1, record.getMember())){
|
||||
if (record.getMember()) {
|
||||
changeTypes.add(MemberChangeType.RESTORE.name());
|
||||
} else {
|
||||
changeTypes.add(MemberChangeType.WITHDRAWAL.name());
|
||||
}
|
||||
}
|
||||
if (!ObjectUtil.equals(user.getUnitId(), record.getUnitId())) {
|
||||
changeTypes.add(MemberChangeType.UNIT_CHANGE.name());
|
||||
}
|
||||
if (!ObjectUtil.equals(user.getUnionId(), record.getUnionId())) {
|
||||
changeTypes.add(MemberChangeType.UNION_CHANGE.name());
|
||||
}
|
||||
return changeTypes;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void compareChangeInfoAndUpdateMember(String recordId) {
|
||||
MemberChangeRecord record = dao().fetch(MemberChangeRecord.class, recordId);
|
||||
compareChangeInfoAndUpdateMember(record);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void compareChangeInfoAndUpdateMember(MemberChangeRecord record) {
|
||||
List<NutMap> changeList = getChangeInfos(record);
|
||||
|
||||
// 如果有工会关系人员,这个user用来存储数据
|
||||
View_user user = dao().fetch(View_user.class, Cnd.where("id", "=", record.getUserId()));
|
||||
// 获取会员信息,用于存储变更记录
|
||||
Sys_user info = dao().fetch(Sys_user.class, Cnd.where("id", "=", record.getUserId()));
|
||||
String userId = info.getId();
|
||||
Sys_user_history history = new Sys_user_history();
|
||||
if (Lang.isNotEmpty(changeList)) {
|
||||
BeanUtil.copyProperties(info, history);
|
||||
}
|
||||
|
||||
if (Lang.isNotEmpty(history)) {
|
||||
history.setRecordId(record.getId());
|
||||
history.setChangeTime(DateUtil.date());
|
||||
history.setChangeTypes(record.getChangeTypes());
|
||||
history.setChangeOrigin(record.getChangeOrigin());
|
||||
|
||||
// 获取会员角色,加入或退出会员组别,写了之后用处不大,注释暂且保留,想优化就把下面注释打开
|
||||
Sys_role role = sysRoleService.getByCode(RoleConstant.MEMBER);
|
||||
// 加入会员
|
||||
if (record.getMember()) {
|
||||
// int activityCount = dao().count(ActivityUserScope.class, Cnd.where("userId", "=", userId).and("groupId", "=", 1));
|
||||
// 如果没有会员角色,新增
|
||||
int memberCount = dao().count(Sys_user_role.class, Cnd.where("userId", "=", userId).and("roleId", "=", role.getId()));
|
||||
// if (activityCount <= 0) {
|
||||
// // 取消或加入会员组别
|
||||
// if (record.getIsJoinActivityMemberScope() != null && record.getIsJoinActivityMemberScope()) {
|
||||
// ActivityUserScope scope = new ActivityUserScope();
|
||||
// scope.setUserId(userId);
|
||||
// scope.setGroupId(1);
|
||||
// scope.setGroupName("工会会员");
|
||||
// dao().insert(scope);
|
||||
// }
|
||||
// }
|
||||
if (memberCount <= 0) {
|
||||
Sys_user_role userRole = new Sys_user_role();
|
||||
userRole.setUserId(userId);
|
||||
userRole.setRoleId(role.getId());
|
||||
dao().insert(userRole);
|
||||
}
|
||||
// 杭医特有,其他学校请删除
|
||||
record.setPreparedBy("会员");
|
||||
} else {
|
||||
// if (record.getIsExitActivityMemberScope() != null && record.getIsExitActivityMemberScope()) {
|
||||
// dao().clear(ActivityUserScope.class, Cnd.where("userId", "=", userId).and("groupId", "=", 1));
|
||||
// }
|
||||
// 非会员取消会员角色
|
||||
dao().clear(Sys_user_role.class, Cnd.where("userId", "=", userId).and("roleId", "=", role.getId()));
|
||||
// 杭医特有,其他学校请删除
|
||||
record.setPreparedBy("教职工");
|
||||
}
|
||||
|
||||
// 到此,表明审核通过,需要存储历史数据,并修改用户数据
|
||||
BeanUtil.copyProperties(record, info);
|
||||
info.setId(userId);
|
||||
|
||||
// 如果有单位变更,则需要记录单位关系
|
||||
if (record.getChangeTypes().contains(MemberChangeType.UNIT_CHANGE.name())) {
|
||||
info.setUnitId(record.getUnitId());
|
||||
}
|
||||
|
||||
|
||||
// 如果有工会关系变更,也需要记录变更了什么工会
|
||||
history.setChangeInfos(changeList);
|
||||
String changeInfos = changeList.stream().map(v -> {
|
||||
return v.getString("fieldName") + ":" + HtmlUtil.cleanHtmlTag(v.getString("sourceValue")) + "->" + HtmlUtil.cleanHtmlTag(v.getString("newValue"));
|
||||
}).collect(Collectors.joining(";"));
|
||||
history.setChangeInfosStr(changeInfos);
|
||||
dao().updateIgnoreNull(info);
|
||||
dao().insert(history);
|
||||
|
||||
sysUserService.deleteCache(info.getId());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<NutMap> getAllChangeInfo(String userId) {
|
||||
List<NutMap> resultMapList = new ArrayList<>();
|
||||
|
||||
Sql sql = Sqls.fetchString(Sqls.create("select loginname from sys_user where id = @id").setParam("id", userId).toString());
|
||||
dao().execute(sql);
|
||||
String loginName = sql.getString();
|
||||
|
||||
MemberChangeRecord record = dao().fetch(MemberChangeRecord.class, Cnd.where("userId", "=", userId).desc("applyDateTime"));
|
||||
|
||||
List<Sys_user_history> historyList = dao().query(Sys_user_history.class, Cnd.where("loginname", "=", loginName)
|
||||
.and("changeInfos", "is not", null).desc("changeTime"));
|
||||
|
||||
List<String> recordList = historyList.stream().map(Sys_user_history::getRecordId).toList();
|
||||
|
||||
if (Lang.isNotEmpty(record) && !recordList.contains(record.getId())) {
|
||||
NutMap map = NutMap.NEW();
|
||||
List<NutMap> changeInfos = getChangeInfos(record.getId());
|
||||
map.put("changeInfos", changeInfos);
|
||||
map.put("timestamp", DateUtil.format(record.getApplyDateTime(), "yyyy-MM-dd HH:mm:ss"));
|
||||
map.put("changeOriginName", MemberChangeOrigin.valueOf(MemberChangeOrigin.class, record.getChangeOrigin()).changeOriginName);
|
||||
resultMapList.add(map);
|
||||
}
|
||||
for (Sys_user_history history : historyList) {
|
||||
NutMap map = NutMap.NEW();
|
||||
List<NutMap> changeInfos = history.getChangeInfos();
|
||||
map.put("changeInfos", changeInfos);
|
||||
map.put("timestamp", DateUtil.format(history.getChangeTime(), "yyyy-MM-dd HH:mm:ss"));
|
||||
map.put("changeOriginName", MemberChangeOrigin.valueOf(MemberChangeOrigin.class, history.getChangeOrigin()).changeOriginName);
|
||||
resultMapList.add(map);
|
||||
}
|
||||
return resultMapList;
|
||||
}
|
||||
|
||||
/**
|
||||
* 比较两个对象,并记录变更的字段工具
|
||||
*
|
||||
* @param newMap 新数据
|
||||
* @param sourceMap 原数据
|
||||
* @param fieldsMap 变更字段
|
||||
* @param changeList 变更集合
|
||||
*/
|
||||
@Override
|
||||
public void extractChange(NutMap newMap, NutMap sourceMap, String fieldName, Map<String, String> fieldsMap, List<NutMap> changeList) {
|
||||
try {
|
||||
Object currentValue = this.booleanVerification(newMap.get(fieldName));
|
||||
Object previousValue = this.booleanVerification(sourceMap.get(fieldName));
|
||||
|
||||
if ("unitId".equals(fieldName)) {
|
||||
currentValue = (newMap.get(fieldName) == null ? this.booleanVerification(newMap.get("unitId")) : currentValue);
|
||||
previousValue = (sourceMap.get(fieldName) == null ? this.booleanVerification(sourceMap.get("unitId")) : previousValue);
|
||||
}
|
||||
|
||||
if (!ObjectUtil.equals(currentValue, previousValue)) {
|
||||
String name = fieldsMap.getOrDefault(fieldName, fieldName);
|
||||
if ("unitId".equals(fieldName) || "unitid".equals(fieldName)) {
|
||||
List<Sys_unit> unitList = dao().query(Sys_unit.class,
|
||||
Cnd.where("id", "in", List.of(previousValue, currentValue)));
|
||||
Object finalPreviousValue = previousValue;
|
||||
previousValue = unitList.stream().filter(v -> v.getId().equals(String.valueOf(finalPreviousValue)))
|
||||
.findFirst().orElse(new Sys_unit()).getName();
|
||||
Object finalCurrentValue = currentValue;
|
||||
currentValue = unitList.stream().filter(v -> v.getId().equals(String.valueOf(finalCurrentValue)))
|
||||
.findFirst().orElse(new Sys_unit()).getName();
|
||||
} else if ("families".equals(fieldName)) {
|
||||
return;
|
||||
}
|
||||
changeList.add(NutMap.NEW()
|
||||
.setv("field", fieldName)
|
||||
.setv("fieldName", name)
|
||||
.setv("sourceValue", previousValue)
|
||||
.setv("newValue", currentValue));
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
log.error("Error while extracting and comparing changes for field: {}", fieldName, e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void validateChangeAndSetBasicData(MemberChangeRecord record) {
|
||||
// 不传递 MemberChangeOrigin 默认个人变更
|
||||
validateChangeAndSetBasicData(record, MemberChangeOrigin.PERSONAL);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void validateChangeAndSetBasicData(MemberChangeRecord record, MemberChangeOrigin origin) {
|
||||
// 校验有没有发生变更
|
||||
List<NutMap> changeInfos = getChangeInfos(record);
|
||||
if (Lang.isEmpty(changeInfos)) {
|
||||
throw new BaseException("未获取到异动数据");
|
||||
}
|
||||
|
||||
View_user user = dao().fetch(View_user.class, Cnd.where("id", "=", record.getUserId()));
|
||||
// 比较有哪些变更类型
|
||||
List<String> changeTypes = compareChangeType(record, user);
|
||||
|
||||
record.setChangeTypes(changeTypes);
|
||||
record.setUserId(user.getId());
|
||||
// 变更来源
|
||||
record.setChangeOrigin(origin != null ? origin.name() : MemberChangeOrigin.PERSONAL.name());
|
||||
record.setApplyDateTime(DateUtil.date());
|
||||
}
|
||||
|
||||
private String booleanVerification(Object value) {
|
||||
// 检查是否为null或空字符串
|
||||
if (ObjectUtil.isAllEmpty(value, "")) {
|
||||
return "无数据";
|
||||
}
|
||||
// 处理布尔值
|
||||
if (value instanceof Boolean) {
|
||||
return ((Boolean) value) ? "是" : "否";
|
||||
}
|
||||
// 处理数值类型
|
||||
if (value instanceof Number && List.of(0, 1).contains((Integer) value)) {
|
||||
return ((Number) value).intValue() != 0 ? "是" : "否";
|
||||
}
|
||||
// 其他对象,返回其字符串表示
|
||||
if (value instanceof Date) {
|
||||
return DateUtil.format((Date) value, "yyyy-MM-dd");
|
||||
}
|
||||
return value.toString();
|
||||
}
|
||||
}
|
||||
-534
@@ -1,534 +0,0 @@
|
||||
package com.budwk.app.zhgh.staffmanage.member.service.impl;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.hutool.http.HtmlUtil;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import com.budwk.app.base.constant.RoleConstant;
|
||||
import com.budwk.app.base.exception.BaseException;
|
||||
import com.budwk.app.base.page.Pagination;
|
||||
import com.budwk.app.base.service.impl.BaseServiceImpl;
|
||||
import com.budwk.app.sys.models.*;
|
||||
import com.budwk.app.sys.services.SysDictService;
|
||||
import com.budwk.app.sys.views.View_user;
|
||||
import com.budwk.app.web.commons.auth.utils.AuthUtil;
|
||||
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
|
||||
import com.budwk.app.zhgh.staffmanage.member.constant.MemberChangeOrigin;
|
||||
import com.budwk.app.zhgh.staffmanage.member.constant.MemberChangeType;
|
||||
import com.budwk.app.zhgh.staffmanage.member.models.MemberApplyRecord;
|
||||
import com.budwk.app.zhgh.staffmanage.member.param.pageform.MemberManagePageForm;
|
||||
import com.budwk.app.zhgh.staffmanage.member.service.MemberManageService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.json.JSONArray;
|
||||
import org.json.JSONObject;
|
||||
import org.nutz.aop.interceptor.ioc.TransAop;
|
||||
import org.nutz.dao.Chain;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Dao;
|
||||
import org.nutz.dao.Sqls;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.dao.util.Daos;
|
||||
import org.nutz.dao.util.cri.SqlExpressionGroup;
|
||||
import org.nutz.dao.util.cri.Static;
|
||||
import org.nutz.ioc.aop.Aop;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.json.Json;
|
||||
import org.nutz.lang.Lang;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @version 1.0
|
||||
* @Author zzr
|
||||
* @name:MemberServiceImpl
|
||||
* @Date 2024/8/6 10:43
|
||||
* @注释
|
||||
*/
|
||||
@IocBean(args = {"refer:dao"})
|
||||
@Slf4j
|
||||
public class MemberManageServiceImpl extends BaseServiceImpl<Sys_user> implements MemberManageService {
|
||||
|
||||
@Inject
|
||||
private SysDictService sysDictService;
|
||||
|
||||
public MemberManageServiceImpl(Dao dao) {
|
||||
super(dao);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Sql getSql(MemberManagePageForm pageForm, String queryType) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
u.id,
|
||||
u.sex,
|
||||
u.loginname,
|
||||
u.username,
|
||||
u.mobile,
|
||||
u.welfareMobile,
|
||||
u.unitId,
|
||||
u.unitName,
|
||||
u.unionId,
|
||||
u.unionName,
|
||||
DATE_FORMAT(u.birthday, '%Y-%m-%d ') as birthday,
|
||||
u.manyUnit,
|
||||
u.member,
|
||||
u.userState,
|
||||
u.preparedBy,
|
||||
u.personType,
|
||||
u.welfareMember,
|
||||
u.isModelWorker,
|
||||
u.wantJoinLoveMutualAidAssociation,
|
||||
his.id hisId,
|
||||
his.changeTypes,
|
||||
his.changeTime
|
||||
FROM
|
||||
vw_user u
|
||||
LEFT JOIN sys_user_history his ON his.loginname = u.loginname
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
MemberManagePageForm.buildSearch(cnd, pageForm);
|
||||
cnd.desc("his.changeTime");
|
||||
cnd.groupBy("u.id");
|
||||
if ("branchUnion".equals(queryType)) {
|
||||
cnd.and("u.unionId", "=", SecurityUtil.getUnionId());
|
||||
}
|
||||
cnd.asc("u.unionId");
|
||||
cnd.asc("u.unitId");
|
||||
cnd.asc("u.id");
|
||||
sql.setCondition(cnd);
|
||||
return sql;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public NutMap getButtonNum(MemberManagePageForm pageForm) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
(sum( CASE WHEN his.changeTypes IS NOT NULL THEN 1 ELSE 0 END )) as 'changeNum',
|
||||
(sum( CASE WHEN his.changeTypes IS NULL THEN 1 ELSE 0 END )) as 'notChangeNum',
|
||||
count(u.id) as 'userSumNum',
|
||||
(sum( CASE WHEN u.member = 1 THEN 1 ELSE 0 END )) as 'memberNum',
|
||||
(sum( CASE WHEN u.member != 1 THEN 1 ELSE 0 END )) as 'notMemberNum'
|
||||
FROM
|
||||
vw_user u
|
||||
LEFT JOIN sys_user_history his ON his.loginname = u.loginname
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
MemberManagePageForm.buildSearch(cnd,pageForm);
|
||||
sql.setCondition(cnd);
|
||||
cnd.desc("his.changeTime");
|
||||
cnd.groupBy("u.id");
|
||||
return (NutMap) Daos.query(dao(), sql.toString(), Sqls.callback.map());
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public Pagination memberHistoryRecords(MemberManagePageForm pageForm) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
his.id,
|
||||
his.changeTime,
|
||||
his.loginname,
|
||||
his.username,
|
||||
his.mobile,
|
||||
his.birthday,
|
||||
his.userState,
|
||||
his.preparedBy,
|
||||
his.personType,
|
||||
his.sex,
|
||||
his.changeTypes,
|
||||
his.changeOrigin,
|
||||
his.changeReason,
|
||||
his.remark,
|
||||
gh.`name` AS unionName,
|
||||
unit.`name` AS unitName,
|
||||
u.id AS userId
|
||||
FROM
|
||||
`sys_user_history` his
|
||||
LEFT JOIN sys_user u ON u.loginname = his.loginname
|
||||
LEFT JOIN sys_unit unit ON unit.id = u.unitid
|
||||
LEFT JOIN sys_union gh ON gh.id = unit.unionId
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.andEX("gh.id", "=", pageForm.getUnionId());
|
||||
cnd.andEX("his.unitId", "=", pageForm.getUnitId());
|
||||
cnd.andEX("his.personType", "=", pageForm.getPersonType());
|
||||
cnd.andEX("his.userState", "=", pageForm.getUserState());
|
||||
if (StrUtil.isNotBlank(pageForm.getChangeType())){
|
||||
cnd.and(new Static("JSON_CONTAINS(his.changeTypes, JSON_ARRAY('%s'), '$')".formatted(pageForm.getChangeType())));
|
||||
}
|
||||
|
||||
if (Lang.isNotEmpty(pageForm.getChangeTypes())) {
|
||||
SqlExpressionGroup seg = new SqlExpressionGroup();
|
||||
for (String type : pageForm.getChangeTypes()) {
|
||||
seg.or(new Static("JSON_CONTAINS(his.changeTypes, JSON_ARRAY('%s'), '$')".formatted(type)));
|
||||
}
|
||||
cnd.and(seg);
|
||||
}
|
||||
|
||||
if (Lang.isNotEmpty(pageForm.getChangeOrigins())) {
|
||||
SqlExpressionGroup seg = new SqlExpressionGroup();
|
||||
for (Integer c : pageForm.getChangeOrigins()) {
|
||||
seg.orEquals("his.changeOrigin", c);
|
||||
}
|
||||
cnd.and(seg);
|
||||
}
|
||||
|
||||
if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) {
|
||||
SqlExpressionGroup seg = new SqlExpressionGroup();
|
||||
seg.or("his.loginname", "like", "%" + pageForm.getSearchKeyword() + "%");
|
||||
seg.or("his.username", "like", "%" + pageForm.getSearchKeyword() + "%");
|
||||
cnd.and(seg);
|
||||
}
|
||||
if (StrUtil.isAllNotBlank(pageForm.getPageOrderName(), pageForm.getPageOrderBy())) {
|
||||
cnd.orderBy(pageForm.getPageOrderName(), pageForm.getPageOrderBy());
|
||||
} else {
|
||||
cnd.desc("his.changeTime");
|
||||
}
|
||||
|
||||
if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) {
|
||||
cnd.andEX("his.unionId", "=", SecurityUtil.getUnionId());
|
||||
}
|
||||
sql.setCondition(cnd);
|
||||
return listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据用户id获取用户变更信息
|
||||
*
|
||||
* @param userId 用户id
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public List<NutMap> getMemberChangeInfoByUserId(String userId) {
|
||||
Sys_user user = dao().fetch(Sys_user.class, userId);
|
||||
Sys_user_history history = new Sys_user_history();
|
||||
//获取当前用户信息
|
||||
BeanUtil.copyProperties(user, history);
|
||||
history.setChangeTime(new Date());
|
||||
//获取用户变更信息
|
||||
List<Sys_user_history> userHistories = dao().query(Sys_user_history.class, Cnd.where("loginname", "=", user.getLoginname()));
|
||||
userHistories.add(history);
|
||||
//按时间排序
|
||||
CollectionUtil.sort(userHistories, Comparator.comparing(Sys_user_history::getChangeTime).reversed());
|
||||
|
||||
//获取允许变更的字段
|
||||
List<Sys_dict> dictList = sysDictService.getSubListByCode("MEMBER_ALLOW_CHANGES_FIELD");
|
||||
Set<String> allowChangeFieldNames = dictList.stream().map(Sys_dict::getCode).collect(Collectors.toSet());
|
||||
Map<String, String> dictMap = dictList.stream().collect(Collectors.toMap(Sys_dict::getCode, Sys_dict::getName));
|
||||
|
||||
List<NutMap> resultList = new ArrayList<>();
|
||||
for (int i = 1; i < userHistories.size(); i++) {
|
||||
Sys_user_history current = userHistories.get(i);
|
||||
Sys_user_history previous = userHistories.get(i - 1);
|
||||
NutMap nutMap = compareAndRecordChange(current, previous, allowChangeFieldNames, dictMap);
|
||||
resultList.add(nutMap);
|
||||
}
|
||||
return resultList;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 比较两个对象,并记录变更的字段
|
||||
*
|
||||
* @param current 当前数据
|
||||
* @param previous 上一次的数据
|
||||
* @param allowChangeFieldNames 允许变更的字段名
|
||||
* @param dictMap 字典数据
|
||||
* @return NutMap
|
||||
*/
|
||||
public NutMap compareAndRecordChange(Sys_user_history current, Sys_user_history previous, Set<String> allowChangeFieldNames, Map<String, String> dictMap) {
|
||||
NutMap nutMap = NutMap.NEW();
|
||||
if (StrUtil.isNotBlank(current.getChangeOrigin())) {
|
||||
String title = MemberChangeOrigin.valueOf(MemberChangeOrigin.class , current.getChangeOrigin()).changeOriginName;
|
||||
nutMap.put("title", title + "(" + DateUtil.format(current.getChangeTime(), "yyyy-MM-dd HH:mm:ss") + ")");
|
||||
} else {
|
||||
nutMap.put("title", DateUtil.format(current.getChangeTime(), "yyyy-MM-dd HH:mm:ss"));
|
||||
}
|
||||
nutMap.put("remark", current.getRemark());
|
||||
|
||||
nutMap.put("changeTime", DateUtil.format(current.getChangeTime(), "yyyy-MM-dd HH:mm:ss"));
|
||||
List<NutMap> changeList = new ArrayList<>();
|
||||
|
||||
NutMap currentMap = Lang.obj2nutmap(current);
|
||||
NutMap previousMap = Lang.obj2nutmap(previous);
|
||||
|
||||
for (String fieldName : allowChangeFieldNames) {
|
||||
extractChange(currentMap, previousMap, fieldName, dictMap, changeList);
|
||||
}
|
||||
nutMap.put("changeList", changeList);
|
||||
return nutMap;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 比较两个对象,并记录变更的字段
|
||||
*
|
||||
* @param current 当前数据
|
||||
* @param previous 上一次的数据
|
||||
* @param allowChangeFieldNames 允许变更的字段名
|
||||
* @param dictMap 字典数据
|
||||
* @return NutMap
|
||||
*/
|
||||
@Override
|
||||
public List<NutMap> compareChange(Sys_user_history current, Sys_user_history previous, Set<String> allowChangeFieldNames, Map<String, String> dictMap) {
|
||||
List<NutMap> changeList = new ArrayList<>();
|
||||
NutMap currentMap = Lang.obj2nutmap(current);
|
||||
NutMap previousMap = Lang.obj2nutmap(previous);
|
||||
|
||||
for (String fieldName : allowChangeFieldNames) {
|
||||
extractChange(currentMap, previousMap, fieldName, dictMap, changeList);
|
||||
}
|
||||
return changeList;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 校验是否有变更
|
||||
* @param
|
||||
*/
|
||||
@Override
|
||||
public List<NutMap> compareMemberChangeInfo(Sys_user_history history) {
|
||||
List<NutMap> infos = history.getChangeInfos();
|
||||
if (ObjectUtil.isEmpty(infos)) {
|
||||
throw new BaseException("获取变更记录失败");
|
||||
}
|
||||
return infos;
|
||||
}
|
||||
|
||||
/**
|
||||
* 校验是否有变更
|
||||
* @param record
|
||||
*/
|
||||
@Override
|
||||
public List<NutMap> compareMemberChangeInfo(MemberApplyRecord record) {
|
||||
if (ObjectUtil.isEmpty(record) || ObjectUtil.isEmpty(record.getLoginname())) {
|
||||
throw new BaseException("未获取到变更记录");
|
||||
}
|
||||
|
||||
NutMap previousMap = NutMap.NEW();
|
||||
|
||||
View_user user = dao().fetch(View_user.class, Cnd.where("loginname", "=", record.getLoginname()));
|
||||
previousMap = Lang.obj2nutmap(user);
|
||||
|
||||
//获取允许变更的字段
|
||||
List<Sys_dict> dictList = sysDictService.getSubListByCode("MEMBER_ALLOW_CHANGES_FIELD");
|
||||
Set<String> allowChangeFieldNames = dictList.stream().map(Sys_dict::getCode).collect(Collectors.toSet());
|
||||
Map<String, String> dictMap = dictList.stream().collect(Collectors.toMap(Sys_dict::getCode, Sys_dict::getName));
|
||||
|
||||
List<NutMap> changeList = new ArrayList<>();
|
||||
|
||||
NutMap currentMap = Lang.obj2nutmap(record);
|
||||
|
||||
for (String fieldName : allowChangeFieldNames) {
|
||||
extractChange(currentMap, previousMap, fieldName, dictMap, changeList);
|
||||
}
|
||||
if (Lang.isEmpty(changeList)) {
|
||||
throw new BaseException("未获取到变更数据,请核对是否修改了数据");
|
||||
}
|
||||
return changeList;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public List<String> compareMemberChangeType(List<NutMap> changeList, MemberApplyRecord record) {
|
||||
if (Lang.isEmpty(changeList)) {
|
||||
return null;
|
||||
}
|
||||
List<String> changeTypes = new ArrayList<>();
|
||||
// 有单位发生变化的记录数据
|
||||
long unitChangeCount = changeList.stream().filter(item -> item != null && "unitId".equals(item.get("fieldName"))).count();
|
||||
if (unitChangeCount > 0) {
|
||||
// 有单位的变化,表明是单位变更
|
||||
changeTypes.add(MemberChangeType.UNIT_CHANGE.name());
|
||||
// 如果有非单位变更,表明是基本信息变更
|
||||
long nonUnitChangeCount = changeList.size() - unitChangeCount;
|
||||
if (nonUnitChangeCount > 0) {
|
||||
changeTypes.add(MemberChangeType.BASIC_CHANGE.name());
|
||||
}
|
||||
} else {
|
||||
// 没有单位的变化,表明是基本信息变更
|
||||
changeTypes.add(MemberChangeType.BASIC_CHANGE.name());
|
||||
}
|
||||
|
||||
// record中是否存在前端传递过来的变更状态,(入会/退会)
|
||||
String changeType = record.getChangeType();
|
||||
if (StrUtil.isNotBlank(changeType)) {
|
||||
changeTypes.add(changeType);
|
||||
}
|
||||
|
||||
return changeTypes;
|
||||
}
|
||||
|
||||
/**
|
||||
* 比较会员信息变更记录,并保存历史数据
|
||||
*
|
||||
* @param record 传递的记录
|
||||
* @return
|
||||
*/
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@Override
|
||||
public void compareMemberChangeInfoAndUpdateUser(MemberApplyRecord record) {
|
||||
List<NutMap> changeList = compareMemberChangeInfo(record);
|
||||
|
||||
View_user user = dao().fetch(View_user.class, Cnd.where("loginname", "=", record.getLoginname()));
|
||||
Sys_user_history history = new Sys_user_history();
|
||||
// 存储变更记录
|
||||
if (ObjectUtil.isNotEmpty(changeList)) {
|
||||
// 将当前的用户数据(user)记录成历史数据
|
||||
BeanUtil.copyProperties(user, history);
|
||||
|
||||
if (Lang.isNotEmpty(record.getChangeTypes())) {
|
||||
history.setChangeTypes(record.getChangeTypes());
|
||||
} else {
|
||||
List<String> changeTypes = this.compareMemberChangeType(changeList, record);
|
||||
history.setChangeTypes(changeTypes);
|
||||
}
|
||||
}
|
||||
|
||||
if (ObjectUtil.isNotEmpty(history) && ObjectUtil.isNotEmpty(history.getLoginname())) {
|
||||
Date nowDate = new Date();
|
||||
history.setRecordId(record.getId());
|
||||
history.setChangeTime(nowDate);
|
||||
history.setUnionId(user.getUnionId());
|
||||
history.setUnionName(user.getUnionName());
|
||||
history.setChangeOrigin(StrUtil.isNotBlank(record.getChangeOrigin()) ? record.getChangeOrigin() : MemberChangeOrigin.SCHOOL_UNION.name());
|
||||
history.setChangeReason(record.getNotes());
|
||||
history.setRemark(record.getRemark());
|
||||
// 到此,表明审核通过,需要存储历史数据,并修改用户数据
|
||||
Chain chain = Chain.make("unitPath", null);
|
||||
|
||||
changeList.forEach(v -> {
|
||||
if ("unitId".equals(v.getString("fieldName"))) {
|
||||
chain.add(v.getString("fieldName"), record.getUnitId());
|
||||
} else {
|
||||
chain.add(v.getString("fieldName"), v.getString("newValue"));
|
||||
}
|
||||
});
|
||||
chain.add("member", record.getMember());
|
||||
chain.add("welfareMember", record.getWelfareMember());
|
||||
|
||||
Sys_role memberRole = dao().fetch(Sys_role.class, Cnd.where("`code`", "=", "MEMBER"));
|
||||
dao().clear(Sys_user_role.class, Cnd.where("userId", "=", user.getId()).and("roleId","=", memberRole.getId()));
|
||||
if (record.getMember()) {
|
||||
Sys_user_role userRole = new Sys_user_role();
|
||||
userRole.setRoleId(memberRole.getId());
|
||||
userRole.setUserId(user.getId());
|
||||
dao().insert(userRole);
|
||||
}
|
||||
|
||||
AtomicBoolean isRetire = new AtomicBoolean(false);
|
||||
String changeInfos = changeList.stream().map(v -> {
|
||||
if ("userState".equals(v.getString("fieldName")) && "退休".equals(v.getString("newValue"))) {
|
||||
isRetire.set(true);
|
||||
chain.add("retireDate", DateUtil.date());
|
||||
}
|
||||
return "(变更字段:" + v.getString("name") + ",变更前:" + HtmlUtil.cleanHtmlTag(v.getString("value","")) + ",变更后:" + HtmlUtil.cleanHtmlTag(v.getString("newValue","")) + ")";
|
||||
}).collect(Collectors.joining(";"));
|
||||
record.setChangeInfos(changeInfos);
|
||||
|
||||
history.setChangeInfos(changeList);
|
||||
history.setChangeInfosStr(changeInfos);
|
||||
dao().insert(history);
|
||||
|
||||
dao().update(Sys_user.class, chain, Cnd.where("loginname", "=", record.getLoginname()));
|
||||
} else {
|
||||
throw new BaseException("未获取到变更数据,请核对是否修改了数据");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public List<NutMap> getLastTimeMemberChangeInfoByUserId(String userId, String verificationProjectId) {
|
||||
MemberApplyRecord record = dao().fetch(MemberApplyRecord.class, Cnd.where("userId", "=", userId)
|
||||
.and("verificationProjectId","=",verificationProjectId));
|
||||
if (ObjectUtil.isEmpty(record) || ObjectUtil.isEmpty(record.getLoginname())) {
|
||||
throw new NullPointerException("数据获取失败");
|
||||
}
|
||||
View_user user = dao().fetch(View_user.class, Cnd.where("loginname", "=", record.getLoginname()));
|
||||
|
||||
//获取允许变更的字段
|
||||
List<Sys_dict> dictList = sysDictService.getSubListByCode("MEMBER_ALLOW_CHANGES_FIELD");
|
||||
Set<String> allowChangeFieldNames = dictList.stream().map(Sys_dict::getCode).collect(Collectors.toSet());
|
||||
Map<String, String> dictMap = dictList.stream().collect(Collectors.toMap(Sys_dict::getCode, Sys_dict::getName));
|
||||
|
||||
List<NutMap> changeList = new ArrayList<>();
|
||||
|
||||
NutMap currentMap = Lang.obj2nutmap(record);
|
||||
NutMap previousMap = Lang.obj2nutmap(user);
|
||||
|
||||
for (String fieldName : allowChangeFieldNames) {
|
||||
extractChange(currentMap, previousMap, fieldName, dictMap, changeList);
|
||||
}
|
||||
return changeList;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 比较两个对象,并记录变更的字段工具
|
||||
*
|
||||
* @param current 当前数据
|
||||
* @param previous 上一次的数据
|
||||
* @param dictMap 字典数据
|
||||
* @param changeList 变更集合
|
||||
*/
|
||||
@Override
|
||||
public void extractChange(NutMap current, NutMap previous, String fieldName, Map<String, String> dictMap, List<NutMap> changeList) {
|
||||
try {
|
||||
Object currentValue = this.booleanVerification(current.get(fieldName));
|
||||
Object previousValue = this.booleanVerification(previous.get(fieldName));
|
||||
|
||||
if (!ObjectUtil.equals(currentValue, previousValue)) {
|
||||
String name = dictMap.getOrDefault(fieldName, fieldName);
|
||||
if ("unitId".equals(fieldName)) {
|
||||
List<Sys_unit> unitList = dao().query(Sys_unit.class, Cnd.where("id", "in", List.of(previousValue, currentValue)));
|
||||
Object finalPreviousValue = previousValue;
|
||||
previousValue = unitList.stream().filter(v->v.getId().equals(String.valueOf(finalPreviousValue))).findFirst().orElse(new Sys_unit()).getName();
|
||||
Object finalCurrentValue = currentValue;
|
||||
currentValue = unitList.stream().filter(v->v.getId().equals(String.valueOf(finalCurrentValue))).findFirst().orElse(new Sys_unit()).getName();
|
||||
} else if ("families".equals(fieldName)) {
|
||||
return;
|
||||
}
|
||||
changeList.add(NutMap.NEW()
|
||||
.setv("fieldName", fieldName)
|
||||
.setv("name", name)
|
||||
.setv("value", previousValue)
|
||||
.setv("newValue", currentValue));
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("Error while extracting and comparing changes for field: {}", fieldName, e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private String booleanVerification(Object value) {
|
||||
// 检查是否为null或空字符串
|
||||
if (ObjectUtil.isAllEmpty(value, "")) {
|
||||
return "无数据";
|
||||
}
|
||||
// 处理布尔值
|
||||
if (value instanceof Boolean) {
|
||||
return ((Boolean) value) ? "是" : "否";
|
||||
}
|
||||
// 处理数值类型
|
||||
if (value instanceof Number && List.of(0, 1).contains((Integer) value)) {
|
||||
return ((Number) value).intValue() != 0 ? "是" : "否";
|
||||
}
|
||||
// 其他对象,返回其字符串表示
|
||||
if (value instanceof Date) {
|
||||
return DateUtil.format((Date) value, "yyyy-MM-dd");
|
||||
}
|
||||
return value.toString();
|
||||
}
|
||||
}
|
||||
-144
@@ -1,144 +0,0 @@
|
||||
package com.budwk.app.zhgh.staffmanage.member.service.impl;
|
||||
|
||||
import cn.afterturn.easypoi.excel.ExcelExportUtil;
|
||||
import cn.afterturn.easypoi.excel.entity.ExportParams;
|
||||
import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
|
||||
import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.budwk.app.base.service.impl.BaseServiceImpl;
|
||||
import com.budwk.app.sys.models.Sys_user;
|
||||
import com.budwk.app.web.commons.auth.utils.AuthUtil;
|
||||
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
|
||||
import com.budwk.app.zhgh.staffmanage.member.param.pageform.MemberModelWorkerPageForm;
|
||||
import com.budwk.app.zhgh.staffmanage.member.service.MemberModelWorkerService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.poi.ss.usermodel.*;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Dao;
|
||||
import org.nutz.dao.Sqls;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.dao.util.cri.SqlExpressionGroup;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @version 1.0
|
||||
* @Author zzr
|
||||
* @name:MemberModelWorkerServiceImpl
|
||||
* @Date 2024/9/25 17:29
|
||||
* @注释
|
||||
*/
|
||||
@Slf4j
|
||||
@IocBean(args = {"refer:dao"})
|
||||
public class MemberModelWorkerServiceImpl extends BaseServiceImpl<Sys_user> implements MemberModelWorkerService {
|
||||
|
||||
public MemberModelWorkerServiceImpl(Dao dao) {
|
||||
super(dao);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Sql getSql(MemberModelWorkerPageForm pageForm) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
id,
|
||||
loginname,
|
||||
username,
|
||||
sex,
|
||||
member,
|
||||
welfareMember,
|
||||
personType,
|
||||
userState,
|
||||
unionCode,
|
||||
unionName,
|
||||
unionId,
|
||||
unitName,
|
||||
unitCode,
|
||||
unitId,
|
||||
mobile,
|
||||
birthday,
|
||||
isModelWorker,
|
||||
modelWorkerFiles
|
||||
from
|
||||
`vw_user`
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.and("isModelWorker","=",true);
|
||||
if (!AuthUtil.hasRoleOr("SYSADMIN", "SCHOOL_UNION_ADMIN")) {
|
||||
cnd.and("unionId", "=", SecurityUtil.getUnionId());
|
||||
} else {
|
||||
cnd.andEX("unionId", "=", pageForm.getUnionId());
|
||||
}
|
||||
|
||||
cnd.andEX("unitId", "=", pageForm.getUnitId());
|
||||
if (StrUtil.isAllNotBlank(pageForm.getSearchKeyword())) {
|
||||
SqlExpressionGroup seg = new SqlExpressionGroup();
|
||||
seg.orLike("username", pageForm.getSearchKeyword());
|
||||
seg.orLike("loginname", pageForm.getSearchKeyword());
|
||||
cnd.and(seg);
|
||||
}
|
||||
cnd.andEX("userState", "=", pageForm.getUserState());
|
||||
cnd.andEX("personType", "=", pageForm.getPersonType());
|
||||
if (StrUtil.isNotBlank(pageForm.getMemberState())) {
|
||||
cnd.andEX("member", "=", "true".equals(pageForm.getMemberState()));
|
||||
}
|
||||
if (StrUtil.isNotBlank(pageForm.getWelfareMemberState())) {
|
||||
cnd.andEX("welfareMember", "=", "true".equals(pageForm.getWelfareMemberState()));
|
||||
}
|
||||
sql.setCondition(cnd);
|
||||
return sql;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void doExport(MemberModelWorkerPageForm pageForm, HttpServletResponse response) {
|
||||
Sql sql = getSql(pageForm);
|
||||
List<NutMap> list = listMap(sql);
|
||||
int size = list.size();
|
||||
|
||||
List<ExcelExportEntity> exportEntities = new ArrayList<>();
|
||||
exportEntities.add(new ExcelExportEntity("工号", "loginname", 20));
|
||||
exportEntities.add(new ExcelExportEntity("姓名", "username", 20));
|
||||
exportEntities.add(new ExcelExportEntity("性别", "sex", 20));
|
||||
exportEntities.add(new ExcelExportEntity("联系电话", "mobile", 20));
|
||||
exportEntities.add(new ExcelExportEntity("身份证号", "idCard", 30));
|
||||
exportEntities.add(new ExcelExportEntity("在职状态", "userState", 20));
|
||||
exportEntities.add(new ExcelExportEntity("人员类型", "personType", 20));
|
||||
exportEntities.add(new ExcelExportEntity("所属工会", "unionName", 20));
|
||||
exportEntities.add(new ExcelExportEntity("所属单位", "unitName", 30));
|
||||
exportEntities.add(new ExcelExportEntity("是否为正式会员", "member", 10));
|
||||
exportEntities.add(new ExcelExportEntity("是否为福利会员", "welfareMember", 10));
|
||||
exportEntities.add(new ExcelExportEntity("劳模材料", "modelWorkerFiles", 20));
|
||||
|
||||
ExportParams exportParams = new ExportParams();
|
||||
exportParams.setType(ExcelType.XSSF);
|
||||
|
||||
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, exportEntities, list);
|
||||
Sheet sheet = workbook.getSheetAt(0);
|
||||
|
||||
int linkColumnIndex = exportEntities.size();
|
||||
CreationHelper helper = workbook.getCreationHelper();
|
||||
ClientAnchor anchor = helper.createClientAnchor();
|
||||
|
||||
for (int rowIndex = 1; rowIndex <= size; rowIndex++) {
|
||||
|
||||
|
||||
|
||||
|
||||
Row row = sheet.getRow(rowIndex);
|
||||
Cell cell = row.createCell(linkColumnIndex);
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
// CommonDownloadUtil
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
+2
-1
@@ -16,7 +16,7 @@ import java.util.List;
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class MemberApplyVo extends BpmTaskApprovalVo {
|
||||
public class MemberCommonVo extends BpmTaskApprovalVo {
|
||||
|
||||
private String id;
|
||||
private String userId;
|
||||
@@ -28,6 +28,7 @@ public class MemberApplyVo extends BpmTaskApprovalVo {
|
||||
private String unionId;
|
||||
private String changeUnionId;
|
||||
private String unionName;
|
||||
private String groupName;
|
||||
private String sex;
|
||||
private String idCard;
|
||||
private String nation;
|
||||
+4
-5
@@ -10,7 +10,7 @@ import com.budwk.app.bpm.service.BpmService;
|
||||
import com.budwk.app.bpm.vo.BpmTaskApprovalRecordVo;
|
||||
import com.budwk.app.sys.models.Sys_user_history;
|
||||
import com.budwk.app.sys.services.SysUserService;
|
||||
import com.budwk.app.zhgh.staffmanage.member.service.MemberManageService;
|
||||
import com.budwk.app.zhgh.staffmanage.member.service.MemberCommonService;
|
||||
import com.budwk.app.zhgh.staffmanage.sourcechange.param.SourceChangePageForm;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
@@ -21,7 +21,6 @@ import org.nutz.dao.util.cri.SqlExpressionGroup;
|
||||
import org.nutz.dao.util.cri.Static;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.lang.Lang;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
@@ -48,7 +47,7 @@ public class SourceChangeManageController {
|
||||
@Inject
|
||||
private SysUserService sysUserService;
|
||||
@Inject
|
||||
private MemberManageService memberManageService;
|
||||
private MemberCommonService memberManageService;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/staffmanage/sourcechange/manage/index.html")
|
||||
@@ -118,7 +117,7 @@ public class SourceChangeManageController {
|
||||
@ApiOperation("人员管理,人员全部变更信息查看")
|
||||
@SaCheckPermission("staff.sourcechange.manage")
|
||||
public Result getChangeInfoByUserId(String userId) {
|
||||
return Result.success(memberManageService.getMemberChangeInfoByUserId(userId));
|
||||
return Result.success(memberManageService.getAllChangeInfo(userId));
|
||||
}
|
||||
|
||||
@At
|
||||
@@ -133,7 +132,7 @@ public class SourceChangeManageController {
|
||||
log.error("FIND_AUDIT_CHANGE_INFO BY BpmTaskApprovalRecordVo error:{}", e.getMessage());
|
||||
}
|
||||
|
||||
List<NutMap> list = memberManageService.compareMemberChangeInfo(history);
|
||||
List<NutMap> list = memberManageService.getChangeInfos(recordId);
|
||||
return Result.success(NutMap.NEW().addv("changeList", list).addv("nodeTasks", nodeTasks).addv("remark", history.getRemark()));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -81,5 +81,17 @@ const businessTool = {
|
||||
return ""
|
||||
}
|
||||
})
|
||||
},
|
||||
getEnumOptions(name = null) {
|
||||
return commonUtil
|
||||
.axiosService()
|
||||
.post("/open/common/dictEnumOptions", {name})
|
||||
.then((resp) => {
|
||||
if (resp.code === 0) {
|
||||
return resp.data
|
||||
} else {
|
||||
return []
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,10 +21,10 @@ const branchUnionGroupManage = {
|
||||
<el-card shadow="never" style="border: 1px solid var(--border-color-lighter); margin-top: 10px">
|
||||
<el-table :data="tableData" border>
|
||||
<el-table-column type="index" width="50" label="序号"></el-table-column>
|
||||
<el-table-column prop="code" label="小组编码"></el-table-column>
|
||||
<el-table-column prop="name" label="小组名称"></el-table-column>
|
||||
<el-table-column prop="leaderUserName" label="组长姓名"></el-table-column>
|
||||
<el-table-column prop="leaderMobile" label="组长电话"></el-table-column>
|
||||
<el-table-column prop="code" label="小组编码" width="120px"></el-table-column>
|
||||
<el-table-column prop="name" label="小组名称" width="200px"></el-table-column>
|
||||
<el-table-column prop="leaderInfos" label="组长信息"></el-table-column>
|
||||
<el-table-column prop="unitInfos" label="组成单位"></el-table-column>
|
||||
<el-table-column label="操作" width="200px">
|
||||
<template slot-scope="{row}">
|
||||
<el-button type="primary" size="mini" @click="onEdit(row)">
|
||||
@@ -38,7 +38,7 @@ const branchUnionGroupManage = {
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
|
||||
|
||||
<el-dialog :title="formData.id ? '编辑' : '新增'" :visible.sync="dialogFormVisible" width="600px"
|
||||
:close-on-click-modal="false">
|
||||
<el-form ref="formRef" :model="formData" :rules="rules" label-width="100px">
|
||||
@@ -49,11 +49,17 @@ const branchUnionGroupManage = {
|
||||
<el-form-item label="小组名称" prop="name">
|
||||
<el-input v-model="formData.name" placeholder="小组名称" maxlength="100"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="小组长" prop="leader">
|
||||
<el-form-item label="组成单位" prop="unitIds">
|
||||
<el-select clearable filterable placeholder="请选择组成单位" multiple
|
||||
style="width: 100%" v-model="formData.unitIds">
|
||||
<el-option :key="item.id" :label="item.name" :value="item.id" v-for="item in units"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="小组长" prop="leaders">
|
||||
<el-select
|
||||
v-model="formData.leader"
|
||||
v-model="formData.leaders"
|
||||
filterable
|
||||
remote
|
||||
remote multiple
|
||||
reserve-keyword
|
||||
placeholder="请输入姓名查询"
|
||||
:remote-method="getUserOptions"
|
||||
@@ -88,22 +94,29 @@ const branchUnionGroupManage = {
|
||||
rules: {
|
||||
code: [{ required: true, message: "请输入小组编码", trigger: "blur" }],
|
||||
name: [{ required: true, message: "请输入小组名称", trigger: "blur" }],
|
||||
leader: [{ required: true, message: "请选择小组长", trigger: "change" }]
|
||||
leaders: [{ required: true, message: "请选择小组长", trigger: "change" }],
|
||||
unitIds: [{ required: true, message: "请选择组成单位", trigger: "change" }],
|
||||
},
|
||||
userOptions: []
|
||||
userOptions: [],
|
||||
units: [],
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
openAdd() {
|
||||
async openAdd() {
|
||||
this.dialogFormVisible = true
|
||||
await this.getUnits()
|
||||
this.$nextTick(() => {
|
||||
this.formData = {}
|
||||
this.$refs.formRef.clearValidate()
|
||||
})
|
||||
},
|
||||
|
||||
onEdit(row) {
|
||||
async onEdit(row) {
|
||||
this.formData = { ...row }
|
||||
this.formData.unitIds = JSON.parse(row.unitIds)
|
||||
this.formData.leaders = JSON.parse(row.leaders)
|
||||
await this.getUnits(row.id)
|
||||
this.getUserOptions(null, this.formData.leaders)
|
||||
this.dialogFormVisible = true
|
||||
this.$nextTick(() => {
|
||||
this.$refs.formRef.clearValidate()
|
||||
@@ -115,7 +128,10 @@ const branchUnionGroupManage = {
|
||||
if (valid) {
|
||||
const { id } = this.formData
|
||||
const url = "/platform/sys/unionGroup" + (id ? "/update" : "/insert")
|
||||
$.post(url, { ...this.formData, unionId: this.union_id }).then((res) => {
|
||||
const formData = clone(this.formData)
|
||||
formData.unitIds = JSON.stringify(formData.unitIds)
|
||||
formData.leaders = JSON.stringify(formData.leaders)
|
||||
$.post(url, { ...formData, unionId: this.union_id }).then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.$message.success(res.msg)
|
||||
this.dialogFormVisible = false
|
||||
@@ -152,12 +168,25 @@ const branchUnionGroupManage = {
|
||||
})
|
||||
},
|
||||
|
||||
getUserOptions(keyword) {
|
||||
$.get("/platform/sys/unionGroup/listUser", { keyword, unionId: this.union_id }).then((res) => {
|
||||
getUserOptions(keyword, userIds = null) {
|
||||
$.get("/platform/sys/unionGroup/listUser", {
|
||||
keyword,
|
||||
unionId: this.union_id,
|
||||
userIds: JSON.stringify(userIds)
|
||||
}).then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.userOptions = res.data
|
||||
}
|
||||
})
|
||||
},
|
||||
async getUnits(val) {
|
||||
const resp = await this.$axios.post("/platform/sys/unionGroup/getUnits", {
|
||||
unionId: this.union_id,
|
||||
groupId: val
|
||||
})
|
||||
if (resp.code === 0) {
|
||||
this.units = resp.data
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+77
-138
@@ -3,105 +3,71 @@ layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<el-card shadow="never">
|
||||
<search @search="doSearch">
|
||||
<search-item label="姓名/工号">
|
||||
<el-input placeholder="请输入内容" clearable v-model="pageForm.searchKeyword"></el-input>
|
||||
</search-item>
|
||||
<search-item label="所属工会">
|
||||
<el-select
|
||||
@change="flushUnits"
|
||||
@clear="flushUnits"
|
||||
clearable
|
||||
filterable
|
||||
placeholder="所属工会"
|
||||
style="width: 100%"
|
||||
v-model="pageForm.unionId"
|
||||
>
|
||||
<el-option :key="item.id" :label="item.name" :value="item.id" v-for="item in unions"></el-option>
|
||||
</el-select>
|
||||
</search-item>
|
||||
<search-item label="所属单位">
|
||||
<el-select clearable filterable placeholder="请选择" style="width: 100%" v-model="pageForm.unitId">
|
||||
<el-option :key="item.id" :label="item.name" :value="item.id" v-for="item in units"></el-option>
|
||||
</el-select>
|
||||
</search-item>
|
||||
<search-item label="在职状态">
|
||||
<dict-select v-model="pageForm.userState" placeholder="在职状态" @change="doSearch" code="USER_STATE"></dict-select>
|
||||
</search-item>
|
||||
<search-item label="聘用方式">
|
||||
<dict-select v-model="pageForm.preparedBy" placeholder="聘用方式" @change="doSearch" code="PREPARED_BY"></dict-select>
|
||||
</search-item>
|
||||
<search-item label="人员类型">
|
||||
<dict-select v-model="pageForm.personType" placeholder="人员类型" @change="doSearch" code="PERSON_TYPE"></dict-select>
|
||||
</search-item>
|
||||
</search>
|
||||
</el-card>
|
||||
<el-card shadow="never" class="mt10">
|
||||
<table-tool label="申请列表">
|
||||
<el-radio-group @change="doSearch" class="mr5" size="small" v-model="pageForm.audit">
|
||||
<el-radio-button label="true">已审核</el-radio-button>
|
||||
<el-radio-button label="false">未审核</el-radio-button>
|
||||
</el-radio-group>
|
||||
</table-tool>
|
||||
<el-table :data="tableData" :size="tableSize" @sort-change="pageOrder" ref="table" row-key="id" style="width: 100%">
|
||||
<el-table-column
|
||||
:index="indexMethod"
|
||||
align="center"
|
||||
header-align="center"
|
||||
label="序号"
|
||||
type="index"
|
||||
width="80px"
|
||||
></el-table-column>
|
||||
<el-table-column
|
||||
:label="column.label"
|
||||
:prop="column.prop"
|
||||
:sortable="column.sortable"
|
||||
:width="column.width"
|
||||
header-align="center"
|
||||
min-width="100px"
|
||||
show-overflow-tooltip
|
||||
v-for="column in tableColumns"
|
||||
>
|
||||
<template scope="{row}" v-if="column.prop=='loginname'">
|
||||
<el-link @click="openView(row)" type="primary">{{row.loginname}}</el-link>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" fixed="right" width="200px">
|
||||
<template scope="{row}">
|
||||
<el-button size="mini" type="primary" @click="openChangeView(row)">查看</el-button>
|
||||
<el-button v-if="row.processInstanceTaskStatus==='ACTIVE'" @click="openApproval(row)" size="mini" type="primary">
|
||||
审核
|
||||
</el-button>
|
||||
<el-button
|
||||
v-if="row.processInstanceTaskStatus==='COMPLETE' && !row.nextTaskIsComplete"
|
||||
@click="openRevoke(row.processInstanceTaskId)"
|
||||
size="mini"
|
||||
type="danger"
|
||||
>
|
||||
撤回
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</template>
|
||||
<el-card shadow="never">
|
||||
<common-query ref="commonQueryRef" @search="search"></common-query>
|
||||
</el-card>
|
||||
<el-card shadow="never" class="mt10">
|
||||
<table-tool label="申请列表">
|
||||
<el-radio-group @change="doSearch" class="mr5" size="small" v-model="pageForm.audit">
|
||||
<el-radio-button label="true">已审核</el-radio-button>
|
||||
<el-radio-button label="false">未审核</el-radio-button>
|
||||
</el-radio-group>
|
||||
</table-tool>
|
||||
<el-table :data="tableData" :size="tableSize" @sort-change="pageOrder" ref="table" row-key="id" style="width: 100%">
|
||||
<el-table-column
|
||||
:index="indexMethod"
|
||||
align="center"
|
||||
header-align="center"
|
||||
label="序号"
|
||||
type="index"
|
||||
width="80px"
|
||||
></el-table-column>
|
||||
<el-table-column
|
||||
:label="column.label"
|
||||
:prop="column.prop"
|
||||
:sortable="column.sortable"
|
||||
:width="column.width"
|
||||
header-align="center"
|
||||
min-width="100px"
|
||||
align="center"
|
||||
show-overflow-tooltip
|
||||
v-for="column in tableColumns"
|
||||
>
|
||||
<template scope="{row}" v-if="column.prop=='loginname'">
|
||||
<el-link @click="openView(row)" type="primary">{{row.loginname}}</el-link>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" fixed="right" width="200px" align="center">
|
||||
<template scope="{row}">
|
||||
<el-button size="mini" type="primary" @click="openView(row)">查看</el-button>
|
||||
<el-button v-if="row.processInstanceTaskStatus==='ACTIVE'" @click="openApproval(row)" size="mini" type="primary">
|
||||
审核
|
||||
</el-button>
|
||||
<el-button
|
||||
v-if="row.processInstanceTaskStatus==='COMPLETE' && !row.nextTaskIsComplete"
|
||||
@click="openRevoke(row.processInstanceTaskId)"
|
||||
size="mini"
|
||||
type="danger"
|
||||
>
|
||||
撤回
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
|
||||
<template #view>
|
||||
<member-info ref="memberInfoRef"></member-info>
|
||||
</template>
|
||||
<template #public>
|
||||
<member-audit-change-info ref="memberAuditChangeInfoRef"></member-audit-change-info>
|
||||
<info ref="infoRef"></info>
|
||||
<div v-if="showApprovalForm">
|
||||
<div class="process-title">{{formData.processInstanceNodeName}}</div>
|
||||
<el-form :model="formData" ref="approvalFormRef" label-position="left" label-width="80px">
|
||||
<el-form-item label="审核意见" prop="approvalOpinion" :rules="[{required:true,message:'必填',trigger:['change','blur']}]">
|
||||
<user-opinion-textarea v-model="formData.approvalOpinion"></user-opinion-textarea>
|
||||
</el-form-item>
|
||||
<el-form-item label="电子签名" prop="approvalSignature" :rules="[{required:false,message:'必填',trigger:['change','blur']}]">
|
||||
<!--<el-form-item label="电子签名" prop="approvalSignature" :rules="[{required:false,message:'必填',trigger:['change','blur']}]">
|
||||
<pc-signature v-model="formData.approvalSignature"></pc-signature>
|
||||
</el-form-item>
|
||||
</el-form-item>-->
|
||||
</el-form>
|
||||
<el-row type="flex" justify="end">
|
||||
<el-button plain @click="$refs.guava.index()">取消</el-button>
|
||||
@@ -114,17 +80,15 @@ layout("/layouts/platform.html"){
|
||||
</guava>
|
||||
</div>
|
||||
<script>
|
||||
<!--#include("../../common/info/memberInfo.js"){}#-->
|
||||
<!--#include("../../common/audit/memberAuditChangeInfo.js"){}#-->
|
||||
<!--#include("../common/info.js"){}#-->
|
||||
<!--#include("../common/commonQuery.js"){}#-->
|
||||
|
||||
new Vue({
|
||||
el: "#app",
|
||||
store,
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
pageForm: {
|
||||
audit: false
|
||||
},
|
||||
tableColumns: [
|
||||
{ prop: "loginname", label: "工号", sortable: true },
|
||||
{ prop: "username", label: "姓名", sortable: true },
|
||||
@@ -135,32 +99,28 @@ layout("/layouts/platform.html"){
|
||||
{ prop: "unitName", label: "所属单位", sortable: true },
|
||||
{ prop: "processInstanceNodeName", label: "当前节点", sortable: true }
|
||||
],
|
||||
unions: [],
|
||||
units: [],
|
||||
showApprovalForm: false
|
||||
|
||||
showApprovalForm: false,
|
||||
formData: {},
|
||||
}
|
||||
},
|
||||
components: {
|
||||
"member-info": MEMBER_INFO,
|
||||
"member-audit-change-info": MEMBER_AUDIT_CHANGE_INFO
|
||||
'info': INFO,
|
||||
'common-query': COMMON_QUERY,
|
||||
},
|
||||
methods: {
|
||||
openView(row) {
|
||||
this.$refs.guava.view(() => {
|
||||
this.$refs.memberInfoRef.onOpen(row.userId)
|
||||
})
|
||||
},
|
||||
openChangeView(row) {
|
||||
this.$refs.guava.public(() => {
|
||||
this.showApprovalForm = false
|
||||
this.$refs.memberAuditChangeInfoRef.onOpen({ recordId: row.id, userId: row.userId })
|
||||
this.showApprovalForm = false
|
||||
this.$refs.infoRef.onOpen(row.id)
|
||||
})
|
||||
},
|
||||
|
||||
openApproval(row) {
|
||||
this.$refs.guava.public(() => {
|
||||
this.$refs.guava.view(() => {
|
||||
this.showApprovalForm = true
|
||||
this.formData = row.approvalParam
|
||||
this.$refs.memberAuditChangeInfoRef.onOpen({ recordId: row.id, userId: row.userId })
|
||||
this.$refs.infoRef.onOpen(row.id)
|
||||
})
|
||||
},
|
||||
doApproval(approvalType) {
|
||||
@@ -195,36 +155,15 @@ layout("/layouts/platform.html"){
|
||||
})
|
||||
})
|
||||
},
|
||||
initData() {
|
||||
if (this.$auth.hasRoleOr(["SYSADMIN", "SCHOOL_UNION_ADMIN"])) {
|
||||
this.$businessTool.listUnion(this.pageForm.unionId).then((data) => {
|
||||
this.unions = data
|
||||
})
|
||||
this.$businessTool.listUnit().then((data) => {
|
||||
this.units = data
|
||||
})
|
||||
} else {
|
||||
this.$businessTool.listUnion(this.$store.state.user.union.id).then((data) => {
|
||||
this.unions = data
|
||||
})
|
||||
this.$businessTool.listUnit(this.$store.state.user.union.id).then((data) => {
|
||||
this.units = data
|
||||
})
|
||||
}
|
||||
this.doSearch()
|
||||
},
|
||||
flushUnits() {
|
||||
this.$set(this.pageForm, "unitId", null)
|
||||
this.units = []
|
||||
if (this.pageForm.unionId) {
|
||||
this.$businessTool.listUnit(this.pageForm.unionId).then((data) => {
|
||||
this.units = data
|
||||
})
|
||||
}
|
||||
}
|
||||
search(pageForm){
|
||||
if (pageForm) {
|
||||
this.pageForm = {...this.pageForm, ...pageForm}
|
||||
}
|
||||
this.doSearch()
|
||||
},
|
||||
},
|
||||
created() {
|
||||
this.initData()
|
||||
this.pageData()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
@@ -0,0 +1,85 @@
|
||||
const COMMON_QUERY = {
|
||||
template: /*language=HTML*/ `
|
||||
<search @search="doSearch">
|
||||
<search-item label="姓名/工号">
|
||||
<el-input placeholder="请输入内容" clearable v-model="pageForm.searchKeyword"></el-input>
|
||||
</search-item>
|
||||
<template v-if="$auth.hasRoleOr(['SYSADMIN', 'SCHOOL_UNION_ADMIN', 'BRANCH_UNION_CHAIRMAN'])">
|
||||
<search-item label="所属工会">
|
||||
<el-select
|
||||
@change="flushUnits"
|
||||
@clear="flushUnits"
|
||||
clearable
|
||||
filterable
|
||||
placeholder="所属工会"
|
||||
style="width: 100%"
|
||||
v-model="pageForm.unionId"
|
||||
>
|
||||
<el-option :key="item.id" :label="item.name" :value="item.id" v-for="item in unions"></el-option>
|
||||
</el-select>
|
||||
</search-item>
|
||||
<search-item label="所属单位">
|
||||
<el-select clearable filterable placeholder="请选择" style="width: 100%" v-model="pageForm.unitId">
|
||||
<el-option :key="item.id" :label="item.name" :value="item.id" v-for="item in units"></el-option>
|
||||
</el-select>
|
||||
</search-item>
|
||||
<search-item label="在职状态">
|
||||
<dict-select v-model="pageForm.userState" placeholder="在职状态" @change="doSearch" code="USER_STATE"></dict-select>
|
||||
</search-item>
|
||||
<search-item label="聘用方式">
|
||||
<dict-select v-model="pageForm.preparedBy" placeholder="聘用方式" @change="doSearch" code="PREPARED_BY"></dict-select>
|
||||
</search-item>
|
||||
<search-item label="人员类型">
|
||||
<dict-select v-model="pageForm.personType" placeholder="人员类型" @change="doSearch" code="PERSON_TYPE"></dict-select>
|
||||
</search-item>
|
||||
</template>
|
||||
</search>
|
||||
`,
|
||||
store,
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return{
|
||||
unions: [],
|
||||
units: [],
|
||||
pageForm: {
|
||||
searchKeyword: '',
|
||||
unionId: '',
|
||||
unitId: '',
|
||||
userState: '',
|
||||
personType: ''
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
doSearch(){
|
||||
this.$emit('search', this.pageForm)
|
||||
},
|
||||
async initData(){
|
||||
if (this.$auth.hasRoleOr(["SYSADMIN", "SCHOOL_UNION_ADMIN"])) {
|
||||
this.$businessTool.listUnion(this.pageForm.unionId).then((data) => {
|
||||
this.unions = data
|
||||
})
|
||||
this.$businessTool.listUnit().then((data) => {
|
||||
this.units = data
|
||||
})
|
||||
} else if (this.$auth.hasRole("BRANCH_UNION_CHAIRMAN")) {
|
||||
this.$businessTool.listUnion(this.$store.state.user.union.id).then((data) => {
|
||||
this.unions = data
|
||||
})
|
||||
this.$businessTool.listUnit(this.$store.state.user.union.id).then((data) => {
|
||||
this.units = data
|
||||
})
|
||||
}
|
||||
},
|
||||
async flushUnits(){
|
||||
this.$set(this.pageForm, "unitId", null)
|
||||
this.units = []
|
||||
if (this.pageForm.unionId) {
|
||||
this.units = await this.$businessTool.listUnit(this.pageForm.unionId)
|
||||
}
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.initData()
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,127 @@
|
||||
const INFO = {
|
||||
template: /*language=HTML*/ `
|
||||
<div>
|
||||
<el-tabs v-model="activeName">
|
||||
<el-tab-pane label="申请信息" name="basicInfo">
|
||||
<el-descriptions :column="3" border class="descriptions-form">
|
||||
<el-descriptions-item label="工号">{{ viewData.loginname }}</el-descriptions-item>
|
||||
<el-descriptions-item label="姓名">{{ viewData.username }}</el-descriptions-item>
|
||||
<el-descriptions-item label="性别">{{ viewData.sex }}</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="民族">{{ viewData.nation }}</el-descriptions-item>
|
||||
<el-descriptions-item label="出生日期">{{ $moment(viewData.birthday).format("YYYY年MM月DD日") }}</el-descriptions-item>
|
||||
<el-descriptions-item label="政治面貌">{{ viewData.political }}</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="学历">{{ viewData.education }}</el-descriptions-item>
|
||||
<el-descriptions-item label="学位">{{ viewData.academicDegree }}</el-descriptions-item>
|
||||
<el-descriptions-item label="党政职务">{{ viewData.position }}</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="工作单位">{{ viewData.userUnitName }}</el-descriptions-item>
|
||||
<el-descriptions-item label="所属工会">{{ viewData.userUnionName }}</el-descriptions-item>
|
||||
<el-descriptions-item label="所属校区">{{ viewData.campus }}</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="身份证号码">{{ viewData.idCard }}</el-descriptions-item>
|
||||
<el-descriptions-item label="联系电话">{{ viewData.mobile }}</el-descriptions-item>
|
||||
<el-descriptions-item label="电子邮箱">{{ viewData.email }}</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="在职状态">{{ viewData.userState }}</el-descriptions-item>
|
||||
<el-descriptions-item label="聘用方式">{{ viewData.preparedBy }}</el-descriptions-item>
|
||||
<el-descriptions-item label="人员类型">{{ viewData.personType }}</el-descriptions-item>
|
||||
|
||||
<template v-if="viewData.loginname == $store.state.user.loginname">
|
||||
<el-descriptions-item label="家庭主要成员" :span="3">
|
||||
<el-table v-if="viewData.families&&viewData.families.length"
|
||||
:data="viewData.families" size="mini" border
|
||||
:header-cell-style="{background:'#eff3f6'}"
|
||||
style="width: 100%">
|
||||
<el-table-column prop="relation" label="与本人关系" align="center" header-align="center">
|
||||
</el-table-column>
|
||||
<el-table-column prop="name" label="姓名" align="center" header-align="center">
|
||||
</el-table-column>
|
||||
<el-table-column prop="unit" label="单位" align="center" header-align="center">
|
||||
</el-table-column>
|
||||
<el-table-column prop="remark" label="备注" align="center" header-align="center">
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<el-empty v-else :image-size="50" description="暂无家庭成员信息"></el-empty>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="个人简况" :span="3">
|
||||
<div v-if="viewData.vita" class="text-left" v-html="viewData.vita"></div>
|
||||
<el-tag type="warning" v-else>暂无</el-tag>
|
||||
</el-descriptions-item>
|
||||
</template>
|
||||
|
||||
<el-descriptions-item label="签字信息" :span="3" v-if="viewData.sign">
|
||||
<el-image :src="viewData.sign"
|
||||
class="signature-image"></el-image>
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-tab-pane>
|
||||
|
||||
<el-tab-pane v-if="nodeTasks && nodeTasks.length > 0" label="审核信息" name="audit">
|
||||
<div>
|
||||
<div v-for="nodeTask in nodeTasks" :key="nodeTask.id">
|
||||
<div class="process-title">
|
||||
{{nodeTask.nodeName}}
|
||||
</div>
|
||||
<el-descriptions :column="3" border v-for="task in nodeTask.tasks" :key="task.id"
|
||||
style="margin-bottom: 10px">
|
||||
<el-descriptions-item label="审核人">
|
||||
{{ task.actualOwnerLoginName + '-' + task.actualOwnerUserName}}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="审核时间">{{ task.endOn}}</el-descriptions-item>
|
||||
<el-descriptions-item label="审核结果">
|
||||
<div v-if="task.extVariable">
|
||||
<el-tag type="success" size="mini"
|
||||
v-if="task.extVariable.bpmTaskApprovalType === 'PASS'">同意
|
||||
</el-tag>
|
||||
<el-tag type="danger" size="mini"
|
||||
v-if="task.extVariable.bpmTaskApprovalType === 'BACK'">退回
|
||||
</el-tag>
|
||||
<el-tag type="danger" size="mini"
|
||||
v-if="task.extVariable.bpmTaskApprovalType === 'REJECT'">拒绝
|
||||
</el-tag>
|
||||
</div>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="审核意见" :span="3">
|
||||
{{ task.extVariable.approvalOpinion }}
|
||||
</el-descriptions-item>
|
||||
<template v-if="$auth.hasRoleOr('SYSADMIN') && task.extVariable.approvalRemark">
|
||||
<el-descriptions-item label="审核说明" :span="3">
|
||||
{{ task.extVariable.approvalRemark }}
|
||||
</el-descriptions-item>
|
||||
</template>
|
||||
<el-descriptions-item label="签字" :span="3">
|
||||
<el-image :src="task.extVariable.approvalSignature"
|
||||
v-if="task.extVariable && task.extVariable.approvalSignature"
|
||||
class="signature-image"></el-image>
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</div>
|
||||
</div>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
</div>
|
||||
`,
|
||||
data() {
|
||||
return{
|
||||
activeName: "basicInfo",
|
||||
viewData: {},
|
||||
nodeTasks: [],
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
async onOpen(id){
|
||||
const resp = await $.post('/platform/member/apply/mine/findMemberApplyRecord', {id})
|
||||
if (resp.code === 0) {
|
||||
this.viewData = resp.data
|
||||
this.nodeTasks = resp.data.nodeTasks
|
||||
if (this.viewData.families) {
|
||||
this.viewData.families = JSON.parse(this.viewData.families)
|
||||
} else {
|
||||
this.viewData.families = []
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+172
@@ -0,0 +1,172 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<el-card shadow="never">
|
||||
<common-query ref="commonQueryRef" @search="search"></common-query>
|
||||
</el-card>
|
||||
<el-card shadow="never" class="mt10">
|
||||
<table-tool label="申请列表">
|
||||
<el-radio-group @change="doSearch" class="mr5" size="small" v-model="pageForm.audit">
|
||||
<el-radio-button label="true">已审核</el-radio-button>
|
||||
<el-radio-button label="false">未审核</el-radio-button>
|
||||
</el-radio-group>
|
||||
</table-tool>
|
||||
<el-table :data="tableData" :size="tableSize" @sort-change="pageOrder" ref="table" row-key="id" style="width: 100%">
|
||||
<el-table-column
|
||||
:index="indexMethod"
|
||||
align="center"
|
||||
header-align="center"
|
||||
label="序号"
|
||||
type="index"
|
||||
width="80px"
|
||||
></el-table-column>
|
||||
<el-table-column
|
||||
:label="column.label"
|
||||
:prop="column.prop"
|
||||
:sortable="column.sortable"
|
||||
:width="column.width"
|
||||
header-align="center"
|
||||
align="center"
|
||||
min-width="100px"
|
||||
show-overflow-tooltip
|
||||
v-for="column in tableColumns"
|
||||
>
|
||||
<template scope="{row}" v-if="column.prop=='loginname'">
|
||||
<el-link @click="openView(row)" type="primary">{{row.loginname}}</el-link>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" fixed="right" width="200px" align="center">
|
||||
<template scope="{row}">
|
||||
<el-button size="mini" type="primary" @click="openView(row)">查看</el-button>
|
||||
<el-button v-if="row.processInstanceTaskStatus==='ACTIVE'" @click="openApproval(row)" size="mini" type="primary">
|
||||
审核
|
||||
</el-button>
|
||||
<el-button
|
||||
v-if="row.processInstanceTaskStatus==='COMPLETE' && !row.nextTaskIsComplete"
|
||||
@click="openRevoke(row.processInstanceTaskId)"
|
||||
size="mini"
|
||||
type="danger"
|
||||
>
|
||||
撤回
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
|
||||
<template #view>
|
||||
<info ref="infoRef"></info>
|
||||
<div v-if="showApprovalForm">
|
||||
<div class="process-title">{{formData.processInstanceNodeName}}</div>
|
||||
<el-form :model="formData" ref="approvalFormRef" label-position="left" label-width="80px">
|
||||
<el-form-item label="审核意见" prop="approvalOpinion" :rules="[{required:true,message:'必填',trigger:['change','blur']}]">
|
||||
<user-opinion-textarea v-model="formData.approvalOpinion"></user-opinion-textarea>
|
||||
</el-form-item>
|
||||
<!--<el-form-item label="电子签名" prop="approvalSignature" :rules="[{required:false,message:'必填',trigger:['change','blur']}]">
|
||||
<pc-signature v-model="formData.approvalSignature"></pc-signature>
|
||||
</el-form-item>-->
|
||||
</el-form>
|
||||
<el-row type="flex" justify="end">
|
||||
<el-button plain @click="$refs.guava.index()">取消</el-button>
|
||||
<el-button type="danger" @click="doApproval('BACK')">退回重新申请</el-button>
|
||||
<el-button type="danger" @click="doApproval('REJECT')">拒绝申请</el-button>
|
||||
<el-button type="primary" @click="doApproval('PASS')">同意申请</el-button>
|
||||
</el-row>
|
||||
</div>
|
||||
</template>
|
||||
</guava>
|
||||
</div>
|
||||
<script>
|
||||
<!--#include("../common/info.js"){}#-->
|
||||
<!--#include("../common/commonQuery.js"){}#-->
|
||||
|
||||
new Vue({
|
||||
el: "#app",
|
||||
store,
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
tableColumns: [
|
||||
{ prop: "loginname", label: "工号", sortable: true },
|
||||
{ prop: "username", label: "姓名", sortable: true },
|
||||
{ prop: "userState", label: "在职状态", sortable: true },
|
||||
{ prop: "preparedBy", label: "聘用方式", sortable: true },
|
||||
{ prop: "personType", label: "人员类型", sortable: true },
|
||||
{ prop: "unionName", label: "所属工会", sortable: true },
|
||||
{ prop: "unitName", label: "所属单位", sortable: true },
|
||||
{ prop: "processInstanceNodeName", label: "当前节点", sortable: true }
|
||||
],
|
||||
|
||||
showApprovalForm: false,
|
||||
formData: {},
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'info': INFO,
|
||||
'common-query': COMMON_QUERY,
|
||||
},
|
||||
methods: {
|
||||
openView(row) {
|
||||
this.$refs.guava.view(() => {
|
||||
this.showApprovalForm = false
|
||||
this.$refs.infoRef.onOpen(row.id)
|
||||
})
|
||||
},
|
||||
|
||||
openApproval(row) {
|
||||
this.$refs.guava.view(() => {
|
||||
this.showApprovalForm = true
|
||||
this.formData = row.approvalParam
|
||||
this.$refs.infoRef.onOpen(row.id)
|
||||
})
|
||||
},
|
||||
doApproval(approvalType) {
|
||||
this.formData.bpmTaskApprovalType = approvalType
|
||||
this.$refs.approvalFormRef.validate((valid) => {
|
||||
if (valid) {
|
||||
this.$axios
|
||||
.post(loc() + "/approval", {
|
||||
approval: JSON.stringify(this.formData)
|
||||
})
|
||||
.then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.$refs.guava.index()
|
||||
this.$message.success(res.msg)
|
||||
this.doSearch()
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
},
|
||||
openRevoke(taskId) {
|
||||
this.$confirm("您确定要撤回吗?", "提示", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: "info"
|
||||
}).then(() => {
|
||||
this.$axios.post(loc() + "/revoke", { taskId }).then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.$message.success(res.msg)
|
||||
this.doSearch()
|
||||
}
|
||||
})
|
||||
})
|
||||
},
|
||||
search(pageForm){
|
||||
if (pageForm) {
|
||||
this.pageForm = {...this.pageForm, ...pageForm}
|
||||
}
|
||||
this.doSearch()
|
||||
},
|
||||
},
|
||||
created() {
|
||||
this.pageData()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -3,113 +3,87 @@ layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<el-card shadow="never">
|
||||
<search @search="doSearch">
|
||||
<search-item label="姓名/工号">
|
||||
<el-input placeholder="请输入内容" clearable v-model="pageForm.searchKeyword"></el-input>
|
||||
</search-item>
|
||||
<template v-if="$auth.hasRoleOr(['SYSADMIN', 'SCHOOL_UNION_ADMIN', 'BRANCH_UNION_CHAIRMAN'])">
|
||||
<search-item label="所属工会">
|
||||
<el-select
|
||||
@change="flushUnits"
|
||||
@clear="flushUnits"
|
||||
clearable
|
||||
filterable
|
||||
placeholder="所属工会"
|
||||
style="width: 100%"
|
||||
v-model="pageForm.unionId"
|
||||
>
|
||||
<el-option :key="item.id" :label="item.name" :value="item.id" v-for="item in unions"></el-option>
|
||||
</el-select>
|
||||
</search-item>
|
||||
<search-item label="所属单位">
|
||||
<el-select clearable filterable placeholder="请选择" style="width: 100%" v-model="pageForm.unitId">
|
||||
<el-option :key="item.id" :label="item.name" :value="item.id" v-for="item in units"></el-option>
|
||||
</el-select>
|
||||
</search-item>
|
||||
<search-item label="在职状态">
|
||||
<dict-select v-model="pageForm.userState" placeholder="在职状态" @change="doSearch" code="USER_STATE"></dict-select>
|
||||
</search-item>
|
||||
<search-item label="聘用方式">
|
||||
<dict-select v-model="pageForm.preparedBy" placeholder="聘用方式" @change="doSearch" code="PREPARED_BY"></dict-select>
|
||||
</search-item>
|
||||
<search-item label="人员类型">
|
||||
<dict-select v-model="pageForm.personType" placeholder="人员类型" @change="doSearch" code="PERSON_TYPE"></dict-select>
|
||||
</search-item>
|
||||
</template>
|
||||
</search>
|
||||
</el-card>
|
||||
|
||||
<el-card shadow="never" class="mt10">
|
||||
<table-tool label="申请列表">
|
||||
<el-button size="small" type="primary" @click="$store.dispatch('pjaxRoute', '/platform/member/apply/submit')">申请入会</el-button>
|
||||
</table-tool>
|
||||
<el-table :data="tableData" :size="tableSize" @sort-change="pageOrder" ref="table" row-key="id" style="width: 100%">
|
||||
<el-table-column
|
||||
:index="indexMethod"
|
||||
align="center"
|
||||
header-align="center"
|
||||
label="序号"
|
||||
type="index"
|
||||
width="80px"
|
||||
></el-table-column>
|
||||
<el-table-column
|
||||
:label="column.label"
|
||||
:prop="column.prop"
|
||||
:sortable="column.sortable"
|
||||
:width="column.width"
|
||||
header-align="center"
|
||||
min-width="100px"
|
||||
show-overflow-tooltip
|
||||
v-for="column in tableColumns"
|
||||
>
|
||||
<template scope="{row}" v-if="column.prop=='loginname'">
|
||||
<el-link @click="openView(row)" type="primary">{{row.loginname}}</el-link>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="220">
|
||||
<template slot-scope="{row}">
|
||||
<el-button @click="openChangeView(row)" size="mini" type="primary">查看</el-button>
|
||||
<el-button
|
||||
v-if="[10,40,70].includes(row.processInstanceNodeCode)"
|
||||
size="mini"
|
||||
type="primary"
|
||||
@click="$store.dispatch('pjaxRoute', '/platform/member/apply/submit?id='+row.id)"
|
||||
>
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button
|
||||
v-if="[20].includes(row.processInstanceNodeCode) && !row.nextTaskIsComplete"
|
||||
size="mini"
|
||||
type="danger"
|
||||
@click="openRevoke(row)"
|
||||
>
|
||||
撤销
|
||||
</el-button>
|
||||
<el-button v-if="[10].includes(row.processInstanceNodeCode)" size="mini" type="danger" @click="doDelete(row)">
|
||||
删除
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</template>
|
||||
<el-card shadow="never">
|
||||
<common-query ref="commonQueryRef" @search="search"></common-query>
|
||||
</el-card>
|
||||
|
||||
<el-card shadow="never" class="mt10">
|
||||
<table-tool label="申请列表">
|
||||
<el-button size="small" type="primary" @click="$store.dispatch('pjaxRoute', '/platform/member/apply/submit')">申请入会</el-button>
|
||||
</table-tool>
|
||||
<el-table :data="tableData" :size="tableSize" @sort-change="pageOrder" ref="table" row-key="id" style="width: 100%">
|
||||
<el-table-column
|
||||
:index="indexMethod"
|
||||
align="center"
|
||||
header-align="center"
|
||||
label="序号"
|
||||
type="index"
|
||||
width="80px"
|
||||
></el-table-column>
|
||||
<el-table-column
|
||||
:label="column.label"
|
||||
:prop="column.prop"
|
||||
:sortable="column.sortable"
|
||||
:width="column.width"
|
||||
align="center"
|
||||
header-align="center"
|
||||
min-width="100px"
|
||||
show-overflow-tooltip
|
||||
v-for="column in tableColumns"
|
||||
>
|
||||
<template scope="{row}" v-if="column.prop=='loginname'">
|
||||
<el-link @click="openView(row)" type="primary">{{row.loginname}}</el-link>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="220" align="center">
|
||||
<template slot-scope="{row}">
|
||||
<el-button @click="openView(row)" size="mini" type="primary">查看</el-button>
|
||||
<el-button
|
||||
v-if="[10,40,70].includes(row.processInstanceNodeCode)"
|
||||
size="mini"
|
||||
type="primary"
|
||||
@click="$store.dispatch('pjaxRoute', '/platform/member/apply/submit?id='+row.id)"
|
||||
>
|
||||
编辑
|
||||
</el-button>
|
||||
<template v-if="row.groupName">
|
||||
<el-button
|
||||
v-if="[20].includes(row.processInstanceNodeCode) && !row.nextTaskIsComplete"
|
||||
size="mini"
|
||||
type="danger"
|
||||
@click="openRevoke(row)"
|
||||
>
|
||||
撤销
|
||||
</el-button>
|
||||
</template>
|
||||
<template v-else>
|
||||
<el-button
|
||||
v-if="[50].includes(row.processInstanceNodeCode) && !row.nextTaskIsComplete"
|
||||
size="mini"
|
||||
type="danger"
|
||||
@click="openRevoke(row)"
|
||||
>
|
||||
撤销
|
||||
</el-button>
|
||||
</template>
|
||||
<el-button v-if="[10].includes(row.processInstanceNodeCode)" size="mini" type="danger" @click="doDelete(row)">
|
||||
删除
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
|
||||
<template #view>
|
||||
<member-info ref="memberInfoRef"></member-info>
|
||||
</template>
|
||||
|
||||
<template #public>
|
||||
<member-audit-change-info ref="memberAuditChangeInfoRef"></member-audit-change-info>
|
||||
<info ref="infoRef"></info>
|
||||
</template>
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
<!--#include("../../common/info/memberInfo.js"){}#-->
|
||||
<!--#include("../../common/audit/memberAuditChangeInfo.js"){}#-->
|
||||
<!--#include("../common/info.js"){}#-->
|
||||
<!--#include("../common/commonQuery.js"){}#-->
|
||||
|
||||
new Vue({
|
||||
el: "#app",
|
||||
@@ -127,27 +101,18 @@ layout("/layouts/platform.html"){
|
||||
{ prop: "unitName", label: "所属单位", sortable: true },
|
||||
{ prop: "processInstanceNodeName", label: "当前节点", sortable: true }
|
||||
],
|
||||
unions: [],
|
||||
units: []
|
||||
}
|
||||
},
|
||||
components: {
|
||||
"member-info": MEMBER_INFO,
|
||||
"member-audit-change-info": MEMBER_AUDIT_CHANGE_INFO
|
||||
"info": INFO,
|
||||
'common-query': COMMON_QUERY,
|
||||
},
|
||||
methods: {
|
||||
doDelete(row) {
|
||||
this.$confirm("您确定要删除吗?", "提示", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: "warning"
|
||||
}).then(() => {
|
||||
this.$axios.post(loc() + "/delete", { id: row.id }).then((resp) => {
|
||||
this.$message.success(resp.msg)
|
||||
this.doSearch()
|
||||
})
|
||||
})
|
||||
},
|
||||
openView(row) {
|
||||
this.$refs.guava.view(() => {
|
||||
this.$refs.infoRef.onOpen(row.id)
|
||||
})
|
||||
},
|
||||
openRevoke(row) {
|
||||
this.$confirm("您确定要撤销申请吗?", "提示", {
|
||||
confirmButtonText: "确定",
|
||||
@@ -160,47 +125,27 @@ layout("/layouts/platform.html"){
|
||||
})
|
||||
})
|
||||
},
|
||||
openView(row) {
|
||||
this.$refs.guava.view(() => {
|
||||
this.$refs.memberInfoRef.onOpen(row.userId)
|
||||
})
|
||||
},
|
||||
openChangeView(row) {
|
||||
this.$refs.guava.public(() => {
|
||||
this.$refs.memberAuditChangeInfoRef.onOpen({ recordId: row.id, userId: row.userId })
|
||||
})
|
||||
},
|
||||
initData() {
|
||||
if (this.$auth.hasRoleOr(["SYSADMIN", "SCHOOL_UNION_ADMIN"])) {
|
||||
this.$businessTool.listUnion(this.pageForm.unionId).then((data) => {
|
||||
this.unions = data
|
||||
})
|
||||
this.$businessTool.listUnit().then((data) => {
|
||||
this.units = data
|
||||
})
|
||||
} else if (this.$auth.hasRole("BRANCH_UNION_CHAIRMAN")) {
|
||||
this.$businessTool.listUnion(this.$store.state.user.union.id).then((data) => {
|
||||
this.unions = data
|
||||
})
|
||||
this.$businessTool.listUnit(this.$store.state.user.union.id).then((data) => {
|
||||
this.units = data
|
||||
})
|
||||
}
|
||||
this.doSearch()
|
||||
},
|
||||
flushUnits() {
|
||||
this.$set(this.pageForm, "unitId", null)
|
||||
this.units = []
|
||||
if (this.pageForm.unionId) {
|
||||
this.$businessTool.listUnit(this.pageForm.unionId).then((data) => {
|
||||
this.units = data
|
||||
})
|
||||
}
|
||||
}
|
||||
doDelete(row) {
|
||||
this.$confirm("您确定要删除吗?", "提示", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: "warning"
|
||||
}).then(() => {
|
||||
this.$axios.post(loc() + "/delete", { id: row.id }).then((resp) => {
|
||||
this.$message.success(resp.msg)
|
||||
this.doSearch()
|
||||
})
|
||||
})
|
||||
},
|
||||
search(pageForm){
|
||||
if (pageForm) {
|
||||
this.pageForm = {...this.pageForm, ...pageForm}
|
||||
}
|
||||
this.doSearch()
|
||||
},
|
||||
},
|
||||
created() {
|
||||
debugger
|
||||
this.initData()
|
||||
this.pageData()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
+162
-226
@@ -2,234 +2,170 @@
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<el-card shadow="never">
|
||||
<search @search="doSearch">
|
||||
<search-item label="姓名/工号">
|
||||
<el-input placeholder="请输入内容" clearable v-model="pageForm.searchKeyword"></el-input>
|
||||
</search-item>
|
||||
<search-item label="所属工会">
|
||||
<el-select
|
||||
@change="flushUnits"
|
||||
@clear="flushUnits"
|
||||
clearable
|
||||
filterable
|
||||
placeholder="所属工会"
|
||||
style="width: 100%"
|
||||
v-model="pageForm.unionId"
|
||||
>
|
||||
<el-option :key="item.id" :label="item.name" :value="item.id" v-for="item in unions"></el-option>
|
||||
</el-select>
|
||||
</search-item>
|
||||
<search-item label="所属单位">
|
||||
<el-select clearable filterable placeholder="请选择" style="width: 100%" v-model="pageForm.unitId">
|
||||
<el-option :key="item.id" :label="item.name" :value="item.id" v-for="item in units"></el-option>
|
||||
</el-select>
|
||||
</search-item>
|
||||
<search-item label="在职状态">
|
||||
<dict-select v-model="pageForm.userState" placeholder="在职状态" @change="doSearch" code="USER_STATE"></dict-select>
|
||||
</search-item>
|
||||
<search-item label="聘用方式">
|
||||
<dict-select v-model="pageForm.preparedBy" placeholder="聘用方式" @change="doSearch" code="PREPARED_BY"></dict-select>
|
||||
</search-item>
|
||||
<search-item label="人员类型">
|
||||
<dict-select v-model="pageForm.personType" placeholder="人员类型" @change="doSearch" code="PERSON_TYPE"></dict-select>
|
||||
</search-item>
|
||||
</search>
|
||||
</el-card>
|
||||
<el-card shadow="never" class="mt10">
|
||||
<table-tool label="申请列表">
|
||||
<el-radio-group @change="doSearch" class="mr5" size="small" v-model="pageForm.audit">
|
||||
<el-radio-button label="true">已审核</el-radio-button>
|
||||
<el-radio-button label="false">未审核</el-radio-button>
|
||||
</el-radio-group>
|
||||
</table-tool>
|
||||
<el-table :data="tableData" :size="tableSize" @sort-change="pageOrder" ref="table" row-key="id" style="width: 100%">
|
||||
<el-table-column
|
||||
:index="indexMethod"
|
||||
align="center"
|
||||
header-align="center"
|
||||
label="序号"
|
||||
type="index"
|
||||
width="80px"
|
||||
></el-table-column>
|
||||
<el-table-column
|
||||
:label="column.label"
|
||||
:prop="column.prop"
|
||||
:sortable="column.sortable"
|
||||
:width="column.width"
|
||||
header-align="center"
|
||||
min-width="100px"
|
||||
show-overflow-tooltip
|
||||
v-for="column in tableColumns"
|
||||
>
|
||||
<template scope="{row}" v-if="column.prop=='loginname'">
|
||||
<el-link @click="openView(row)" type="primary">{{row.loginname}}</el-link>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" fixed="right" width="200px">
|
||||
<template scope="{row}">
|
||||
<el-button size="mini" type="primary" @click="openChangeView(row)">查看</el-button>
|
||||
<el-button v-if="row.processInstanceTaskStatus==='ACTIVE'" @click="openApproval(row)" size="mini" type="primary">
|
||||
审核
|
||||
</el-button>
|
||||
<!--<el-button
|
||||
v-if="row.processInstanceTaskStatus==='COMPLETE' && !row.nextTaskIsComplete"
|
||||
@click="openRevoke(row.processInstanceTaskId)"
|
||||
size="mini"
|
||||
type="danger"
|
||||
>
|
||||
撤回
|
||||
</el-button>-->
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</template>
|
||||
<template #view>
|
||||
<member-info ref="memberInfoRef"></member-info>
|
||||
</template>
|
||||
<template #public>
|
||||
<member-audit-change-info ref="memberAuditChangeInfoRef"></member-audit-change-info>
|
||||
<div v-if="showApprovalForm">
|
||||
<div class="process-title">{{formData.processInstanceNodeName}}</div>
|
||||
<el-form :model="formData" ref="approvalFormRef" label-position="left" label-width="80px">
|
||||
<el-form-item label="审核意见" prop="approvalOpinion" :rules="[{required:true,message:'必填',trigger:['change','blur']}]">
|
||||
<user-opinion-textarea v-model="formData.approvalOpinion"></user-opinion-textarea>
|
||||
</el-form-item>
|
||||
<el-form-item label="审核说明" prop="approvalRemark">
|
||||
<el-input v-model="formData.approvalRemark" type="textarea" :rows="4" placeholder="请输入审核说明"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="电子签名" prop="approvalSignature" :rules="[{required:false,message:'必填',trigger:['change','blur']}]">
|
||||
<pc-signature v-model="formData.approvalSignature"></pc-signature>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<el-row type="flex" justify="end">
|
||||
<el-button plain @click="$refs.guava.index()">取消</el-button>
|
||||
<el-button type="danger" @click="doApproval('BACK')">退回重新申请</el-button>
|
||||
<el-button type="danger" @click="doApproval('REJECT')">拒绝申请</el-button>
|
||||
<el-button type="primary" @click="doApproval('PASS')">同意申请</el-button>
|
||||
</el-row>
|
||||
</div>
|
||||
</template>
|
||||
</guava>
|
||||
<guava ref="guava">
|
||||
<el-card shadow="never">
|
||||
<common-query ref="commonQueryRef" @search="search"></common-query>
|
||||
</el-card>
|
||||
<el-card shadow="never" class="mt10">
|
||||
<table-tool label="申请列表">
|
||||
<el-radio-group @change="doSearch" class="mr5" size="small" v-model="pageForm.audit">
|
||||
<el-radio-button label="true">已审核</el-radio-button>
|
||||
<el-radio-button label="false">未审核</el-radio-button>
|
||||
</el-radio-group>
|
||||
</table-tool>
|
||||
<el-table :data="tableData" :size="tableSize" @sort-change="pageOrder" ref="table" row-key="id" style="width: 100%">
|
||||
<el-table-column
|
||||
:index="indexMethod"
|
||||
align="center"
|
||||
header-align="center"
|
||||
label="序号"
|
||||
type="index"
|
||||
width="80px"
|
||||
></el-table-column>
|
||||
<el-table-column
|
||||
:label="column.label"
|
||||
:prop="column.prop"
|
||||
:sortable="column.sortable"
|
||||
:width="column.width"
|
||||
header-align="center"
|
||||
align="center"
|
||||
min-width="100px"
|
||||
show-overflow-tooltip
|
||||
v-for="column in tableColumns"
|
||||
>
|
||||
<template scope="{row}" v-if="column.prop=='loginname'">
|
||||
<el-link @click="openView(row)" type="primary">{{row.loginname}}</el-link>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" fixed="right" width="200px" align="center">
|
||||
<template scope="{row}">
|
||||
<el-button size="mini" type="primary" @click="openView(row)">查看</el-button>
|
||||
<el-button v-if="row.processInstanceTaskStatus==='ACTIVE'" @click="openApproval(row)" size="mini" type="primary">
|
||||
审核
|
||||
</el-button>
|
||||
<el-button
|
||||
v-if="row.processInstanceTaskStatus==='COMPLETE' && !row.nextTaskIsComplete"
|
||||
@click="openRevoke(row.processInstanceTaskId)"
|
||||
size="mini"
|
||||
type="danger"
|
||||
>
|
||||
撤回
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
|
||||
<template #view>
|
||||
<info ref="infoRef"></info>
|
||||
<div v-if="showApprovalForm">
|
||||
<div class="process-title">{{formData.processInstanceNodeName}}</div>
|
||||
<el-form :model="formData" ref="approvalFormRef" label-position="left" label-width="80px">
|
||||
<el-form-item label="审核意见" prop="approvalOpinion" :rules="[{required:true,message:'必填',trigger:['change','blur']}]">
|
||||
<user-opinion-textarea v-model="formData.approvalOpinion"></user-opinion-textarea>
|
||||
</el-form-item>
|
||||
<!--<el-form-item label="电子签名" prop="approvalSignature" :rules="[{required:false,message:'必填',trigger:['change','blur']}]">
|
||||
<pc-signature v-model="formData.approvalSignature"></pc-signature>
|
||||
</el-form-item>-->
|
||||
</el-form>
|
||||
<el-row type="flex" justify="end">
|
||||
<el-button plain @click="$refs.guava.index()">取消</el-button>
|
||||
<el-button type="danger" @click="doApproval('BACK')">退回重新申请</el-button>
|
||||
<el-button type="danger" @click="doApproval('REJECT')">拒绝申请</el-button>
|
||||
<el-button type="primary" @click="doApproval('PASS')">同意申请</el-button>
|
||||
</el-row>
|
||||
</div>
|
||||
</template>
|
||||
</guava>
|
||||
</div>
|
||||
<script>
|
||||
<!--#include("../../common/info/memberInfo.js"){}#-->
|
||||
<!--#include("../../common/audit/memberAuditChangeInfo.js"){}#-->
|
||||
new Vue({
|
||||
el: "#app",
|
||||
store,
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
pageForm: {
|
||||
audit: false
|
||||
},
|
||||
tableColumns: [
|
||||
{ prop: "loginname", label: "工号", sortable: true },
|
||||
{ prop: "username", label: "姓名", sortable: true },
|
||||
{ prop: "userState", label: "在职状态", sortable: true },
|
||||
{ prop: "preparedBy", label: "聘用方式", sortable: true },
|
||||
{ prop: "personType", label: "人员类型", sortable: true },
|
||||
{ prop: "unionName", label: "所属工会", sortable: true },
|
||||
{ prop: "unitName", label: "所属单位", sortable: true },
|
||||
{ prop: "processInstanceNodeName", label: "当前节点", sortable: true }
|
||||
],
|
||||
unions: [],
|
||||
units: [],
|
||||
showApprovalForm: false
|
||||
}
|
||||
},
|
||||
components: {
|
||||
"member-info": MEMBER_INFO,
|
||||
"member-audit-change-info": MEMBER_AUDIT_CHANGE_INFO
|
||||
},
|
||||
methods: {
|
||||
openView(row) {
|
||||
this.$refs.guava.view(() => {
|
||||
this.$refs.memberInfoRef.onOpen(row.userId)
|
||||
})
|
||||
},
|
||||
openChangeView(row) {
|
||||
this.$refs.guava.public(() => {
|
||||
this.showApprovalForm = false
|
||||
this.$refs.memberAuditChangeInfoRef.onOpen({ recordId: row.id, userId: row.userId })
|
||||
})
|
||||
},
|
||||
openApproval(row) {
|
||||
this.$refs.guava.public(() => {
|
||||
this.showApprovalForm = true
|
||||
this.formData = row.approvalParam
|
||||
this.$refs.memberAuditChangeInfoRef.onOpen({ recordId: row.id, userId: row.userId })
|
||||
})
|
||||
},
|
||||
doApproval(approvalType) {
|
||||
this.formData.bpmTaskApprovalType = approvalType
|
||||
this.$refs.approvalFormRef.validate((valid) => {
|
||||
if (valid) {
|
||||
this.$axios
|
||||
.post(loc() + "/approval", {
|
||||
approval: JSON.stringify(this.formData)
|
||||
})
|
||||
.then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.$refs.guava.index()
|
||||
this.$message.success(res.msg)
|
||||
this.doSearch()
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
},
|
||||
openRevoke(taskId) {
|
||||
this.$confirm("您确定要撤回吗?", "提示", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: "info"
|
||||
}).then(() => {
|
||||
this.$axios.post(loc() + "/revoke", { taskId }).then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.$message.success(res.msg)
|
||||
this.doSearch()
|
||||
}
|
||||
})
|
||||
})
|
||||
},
|
||||
initData() {
|
||||
if (this.$auth.hasRoleOr(["SYSADMIN", "SCHOOL_UNION_ADMIN"])) {
|
||||
this.$businessTool.listUnion(this.pageForm.unionId).then((data) => {
|
||||
this.unions = data
|
||||
})
|
||||
this.$businessTool.listUnit().then((data) => {
|
||||
this.units = data
|
||||
})
|
||||
} else {
|
||||
this.$businessTool.listUnion(this.$store.state.user.union.id).then((data) => {
|
||||
this.unions = data
|
||||
})
|
||||
this.$businessTool.listUnit(this.$store.state.user.union.id).then((data) => {
|
||||
this.units = data
|
||||
})
|
||||
}
|
||||
this.doSearch()
|
||||
},
|
||||
flushUnits() {
|
||||
this.$set(this.pageForm, "unitId", null)
|
||||
this.units = []
|
||||
if (this.pageForm.unionId) {
|
||||
this.$businessTool.listUnit(this.pageForm.unionId).then((data) => {
|
||||
this.units = data
|
||||
})
|
||||
}
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.initData()
|
||||
}
|
||||
})
|
||||
<!--#include("../common/info.js"){}#-->
|
||||
<!--#include("../common/commonQuery.js"){}#-->
|
||||
|
||||
new Vue({
|
||||
el: "#app",
|
||||
store,
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
tableColumns: [
|
||||
{ prop: "loginname", label: "工号", sortable: true },
|
||||
{ prop: "username", label: "姓名", sortable: true },
|
||||
{ prop: "userState", label: "在职状态", sortable: true },
|
||||
{ prop: "preparedBy", label: "聘用方式", sortable: true },
|
||||
{ prop: "personType", label: "人员类型", sortable: true },
|
||||
{ prop: "unionName", label: "所属工会", sortable: true },
|
||||
{ prop: "unitName", label: "所属单位", sortable: true },
|
||||
{ prop: "processInstanceNodeName", label: "当前节点", sortable: true }
|
||||
],
|
||||
|
||||
showApprovalForm: false,
|
||||
formData: {},
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'info': INFO,
|
||||
'common-query': COMMON_QUERY,
|
||||
},
|
||||
methods: {
|
||||
openView(row) {
|
||||
this.$refs.guava.view(() => {
|
||||
this.showApprovalForm = false
|
||||
this.$refs.infoRef.onOpen(row.id)
|
||||
})
|
||||
},
|
||||
|
||||
openApproval(row) {
|
||||
this.$refs.guava.view(() => {
|
||||
this.showApprovalForm = true
|
||||
this.formData = row.approvalParam
|
||||
this.$refs.infoRef.onOpen(row.id)
|
||||
})
|
||||
},
|
||||
doApproval(approvalType) {
|
||||
this.formData.bpmTaskApprovalType = approvalType
|
||||
this.$refs.approvalFormRef.validate((valid) => {
|
||||
if (valid) {
|
||||
this.$axios
|
||||
.post(loc() + "/approval", {
|
||||
approval: JSON.stringify(this.formData)
|
||||
})
|
||||
.then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.$refs.guava.index()
|
||||
this.$message.success(res.msg)
|
||||
this.doSearch()
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
},
|
||||
openRevoke(taskId) {
|
||||
this.$confirm("您确定要撤回吗?", "提示", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: "info"
|
||||
}).then(() => {
|
||||
this.$axios.post(loc() + "/revoke", { taskId }).then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.$message.success(res.msg)
|
||||
this.doSearch()
|
||||
}
|
||||
})
|
||||
})
|
||||
},
|
||||
search(pageForm){
|
||||
if (pageForm) {
|
||||
this.pageForm = {...this.pageForm, ...pageForm}
|
||||
}
|
||||
this.doSearch()
|
||||
},
|
||||
},
|
||||
created() {
|
||||
this.pageData()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
|
||||
+170
-74
@@ -6,6 +6,11 @@ layout("/layouts/platform.html"){
|
||||
<h3 style="color: var(--color-primary)" slot="header">入会申请</h3>
|
||||
<el-form :model="formData" ref="formRef" label-width="0" :rules="formRules" size="small">
|
||||
<el-descriptions :column="3" border class="descriptions-form">
|
||||
<el-descriptions-item label="工号">
|
||||
<el-form-item prop="loginname">
|
||||
<el-input v-model="formData.loginname" readonly size="small"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="姓名">
|
||||
<el-form-item prop="username">
|
||||
<el-input v-model="formData.username" readonly size="small"></el-input>
|
||||
@@ -14,16 +19,11 @@ layout("/layouts/platform.html"){
|
||||
<el-descriptions-item label="性别">
|
||||
<el-form-item prop="sex">
|
||||
<el-radio-group v-model="formData.sex" size="small">
|
||||
<el-radio border label="男"></el-radio>
|
||||
<el-radio border label="女"></el-radio>
|
||||
<el-radio border label="男性"></el-radio>
|
||||
<el-radio border label="女性"></el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="身份证号码">
|
||||
<el-form-item prop="idCard">
|
||||
<el-input v-model="formData.idCard" placeholder="请输入身份证号码" maxlength="18"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="民族">
|
||||
<el-form-item prop="nation">
|
||||
<dict-select style="width: 100%" placeholder="请选择民族" v-model="formData.nation" code="USER_NATION"></dict-select>
|
||||
@@ -73,23 +73,28 @@ layout("/layouts/platform.html"){
|
||||
|
||||
<el-descriptions-item label="在职状态">
|
||||
<el-form-item prop="userState">
|
||||
<dict-select v-model="formData.userState" code="USER_STATE" style="width: 100%"></dict-select>
|
||||
<dict-select v-model="formData.userState" disabled code="USER_STATE" style="width: 100%"></dict-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="聘用方式">
|
||||
<el-form-item prop="preparedBy">
|
||||
<dict-select v-model="formData.preparedBy" code="PREPARED_BY" style="width: 100%"></dict-select>
|
||||
<dict-select v-model="formData.preparedBy" disabled code="PREPARED_BY" style="width: 100%"></dict-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="人员类型">
|
||||
<el-form-item prop="personType">
|
||||
<dict-select v-model="formData.personType" code="PERSON_TYPE" style="width: 100%"></dict-select>
|
||||
<dict-select v-model="formData.personType" disabled code="PERSON_TYPE" style="width: 100%"></dict-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
|
||||
<el-descriptions-item label="身份证号码">
|
||||
<el-form-item prop="idCard">
|
||||
<el-input v-model="formData.idCard" placeholder="请输入身份证号码" maxlength="18"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="联系电话">
|
||||
<el-form-item prop="mobile">
|
||||
<el-input v-model="formData.mobile" placeholder="请输入联系电话" maxlength="32"></el-input>
|
||||
<el-input v-model="formData.mobile" placeholder="请输入联系电话" maxlength="11"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="电子邮箱">
|
||||
@@ -97,7 +102,6 @@ layout("/layouts/platform.html"){
|
||||
<el-input v-model="formData.email" placeholder="请输入电子邮箱" maxlength="50"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item></el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="家庭主要成员及其工作单位" :span="3">
|
||||
<el-form-item prop="families">
|
||||
@@ -145,6 +149,23 @@ layout("/layouts/platform.html"){
|
||||
<text-editor v-model="formData.personalData"></text-editor>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="入会意愿" :span="3">
|
||||
<el-form-item prop="isVoluntary">
|
||||
<el-checkbox size="medium" style="width: 95%; color: #F56C6C; display: flex; align-items: center;" v-model="formData.isVoluntary">
|
||||
<div>
|
||||
<span style="flex: 1; word-wrap: break-word; word-break: break-all; white-space: normal;">
|
||||
我自愿申请加入学校工会,并委托学校按规定代为扣缴工会会员会费。
|
||||
</span>
|
||||
</div>
|
||||
<div>
|
||||
<span style="flex: 1; word-wrap: break-word; word-break: break-all; white-space: normal;">
|
||||
我将严格遵守工会章程,认真执行工会决议,积极参与工会活动,主动融入“学校健康幸福家”建设,为营造温暖、和谐、奋进的校园氛围贡献力量,以实际行动助力学校各项事业发展。
|
||||
</span>
|
||||
</div>
|
||||
</el-checkbox>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-form>
|
||||
<el-row v-if="!this.$store.state.user.member" justify="end" type="flex" class="mt10">
|
||||
@@ -172,70 +193,75 @@ layout("/layouts/platform.html"){
|
||||
formRules: {
|
||||
username: [{ required: false, message: "必填", trigger: "change" }],
|
||||
sex: [{ required: false, message: "必填", trigger: "change" }],
|
||||
idCard: [
|
||||
{ required: false, message: "身份证号不能为空", trigger: "blur" },
|
||||
{
|
||||
pattern: /(^\d{6}(18|19|20)\d{2}(0[1-9]|1[012])(0[1-9]|[12]\d|3[01])\d{3}([0-9xX])$)/,
|
||||
message: "身份证号格式不正确",
|
||||
trigger: "blur"
|
||||
}
|
||||
]
|
||||
isVoluntary: [{required: true, message: "必填", trigger: ["change", "blur"]}],
|
||||
email: [
|
||||
{
|
||||
validator: (rule, value, callback) => {
|
||||
if (!value) {
|
||||
callback();
|
||||
} else if (/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/.test(value)) {
|
||||
callback();
|
||||
} else {
|
||||
callback(new Error("邮箱格式错误"));
|
||||
}
|
||||
},
|
||||
trigger: ["change", "blur"]
|
||||
}
|
||||
],
|
||||
idCard: [
|
||||
{
|
||||
validator: (rule, value, callback) => {
|
||||
if (!value) {
|
||||
// 如果值为空,直接通过校验
|
||||
callback();
|
||||
} else if (/^[1-9]\d{5}(18|19|20)?\d{2}((0[1-9])|(10|11|12))(([0|1|2][0-9])|10|20|30|31)\d{3}(\d|[Xx])$/.test(value)) {
|
||||
// 18位身份证号码格式正确
|
||||
callback();
|
||||
} else if (/^[1-9]\d{7}((0[1-9])|(10|11|12))(([0|1|2][0-9])|10|20|30|31)\d{3}$/.test(value)) {
|
||||
// 15位身份证号码格式正确
|
||||
callback();
|
||||
} else if (/^[1-9]\d{5}(18|19|20)?\d{2}((0[1-9])|(10|11|12))(([0|1|2][0-9])|10|20|30|31)\d{3}$/.test(value)) {
|
||||
// 外国人身份证号码格式正确(18位)
|
||||
callback();
|
||||
} else if (/^[1-9]\d{7}((0[1-9])|(10|11|12))(([0|1|2][0-9])|10|20|30|31)\d{3}$/.test(value)) {
|
||||
// 外国人身份证号码格式正确(15位)
|
||||
callback();
|
||||
} else {
|
||||
// 格式错误,返回错误信息
|
||||
callback(new Error("身份证号码格式错误"));
|
||||
}
|
||||
},
|
||||
trigger: ["change", "blur"]
|
||||
}
|
||||
],
|
||||
mobile: [
|
||||
{
|
||||
validator: (rule, value, callback) => {
|
||||
if (!value) {
|
||||
// 如果值为空,直接通过校验
|
||||
callback();
|
||||
} else if (/^[1][345789][0-9]{9}$/.test(value)) {
|
||||
// 手机号格式正确
|
||||
callback();
|
||||
} else if (/^\d+-\d+$/.test(value) && value.length <= 16) {
|
||||
// 座机号格式正确
|
||||
callback();
|
||||
} else {
|
||||
// 格式错误,返回错误信息
|
||||
callback(new Error(value.includes('-') ? '座机号码格式错误' : '手机号码格式错误'));
|
||||
}
|
||||
},
|
||||
trigger: ["change", "blur"]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
init() {
|
||||
if (this.id) {
|
||||
this.$axios.post(loc() + "/findApplyById", { id: this.id }).then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.formData = res.data
|
||||
}
|
||||
})
|
||||
} else {
|
||||
const {
|
||||
id,
|
||||
username,
|
||||
loginname,
|
||||
sex,
|
||||
idCard,
|
||||
nation,
|
||||
political,
|
||||
education,
|
||||
governmentPosition,
|
||||
mobile,
|
||||
email,
|
||||
wantJoinLoveMutualAidAssociation,
|
||||
families,
|
||||
personalData,
|
||||
unit,
|
||||
union
|
||||
} = this.$store.state.user
|
||||
|
||||
this.$set(this.formData, "userId", id)
|
||||
this.$set(this.formData, "username", username)
|
||||
this.$set(this.formData, "loginname", loginname)
|
||||
this.$set(this.formData, "sex", sex)
|
||||
this.$set(this.formData, "idCard", idCard)
|
||||
this.$set(this.formData, "nation", nation)
|
||||
this.$set(this.formData, "political", political)
|
||||
this.$set(this.formData, "education", education)
|
||||
this.$set(this.formData, "unitName", unit ? unit.name : null)
|
||||
this.$set(this.formData, "unitId", unit ? unit.id : null)
|
||||
this.$set(this.formData, "unionName", union ? union.name : null)
|
||||
this.$set(this.formData, "unionId", union ? union.id : null)
|
||||
|
||||
this.$set(this.formData, "governmentPosition", governmentPosition)
|
||||
this.$set(this.formData, "mobile", mobile)
|
||||
this.$set(this.formData, "email", email)
|
||||
this.$set(this.formData, "wantJoinLoveMutualAidAssociation", wantJoinLoveMutualAidAssociation)
|
||||
this.$set(this.formData, "families", families ? families : [])
|
||||
this.$set(this.formData, "personalData", personalData)
|
||||
}
|
||||
},
|
||||
doSave() {
|
||||
this.$confirm("保存后可在我的申请里面再次编辑,您确定要保存吗?", "提示", { type: "warning" })
|
||||
.then(() => {
|
||||
this.$axios.post(loc() + "/doSave", this.formData).then((res) => {
|
||||
this.$axios.post("/platform/member/apply/submit/doSave", this.formData).then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.$message.success(res.msg)
|
||||
this.$store.dispatch("pjaxRoute", "/platform/member/apply/mine")
|
||||
@@ -248,9 +274,7 @@ layout("/layouts/platform.html"){
|
||||
this.$confirm("您确定要提交申请吗?", "提示", { type: "warning" })
|
||||
.then(() => {
|
||||
this.$axios
|
||||
.post(loc() + "/doSubmit", {
|
||||
...this.formData
|
||||
})
|
||||
.post("/platform/member/apply/submit/doSubmit", this.formData)
|
||||
.then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.$message.success(res.msg)
|
||||
@@ -259,7 +283,79 @@ layout("/layouts/platform.html"){
|
||||
})
|
||||
})
|
||||
.catch()
|
||||
}
|
||||
},
|
||||
async init() {
|
||||
let user
|
||||
const resp = await $.post('/platform/member/apply/submit/getSelfUserInfo')
|
||||
if (resp.code === 0) {
|
||||
if (!resp.data) {
|
||||
user = this.$store.state.user
|
||||
} else {
|
||||
user = resp.data
|
||||
}
|
||||
} else {
|
||||
user = this.$store.state.user
|
||||
}
|
||||
|
||||
if (this.id) {
|
||||
const res = await this.$axios.post("/platform/member/apply/submit/findApplyById", { id: this.id })
|
||||
debugger
|
||||
if (res.code === 0) {
|
||||
this.formData = res.data
|
||||
}
|
||||
} else {
|
||||
const {
|
||||
id,
|
||||
username,
|
||||
loginname,
|
||||
sex,
|
||||
nation,
|
||||
birthday,
|
||||
political,
|
||||
education,
|
||||
academicDegree,
|
||||
position,
|
||||
unitId,
|
||||
unitName,
|
||||
unit,
|
||||
unionId,
|
||||
unionName,
|
||||
union,
|
||||
campus,
|
||||
userState,
|
||||
personType,
|
||||
idCard,
|
||||
mobile,
|
||||
email,
|
||||
families,
|
||||
personalData
|
||||
} = user
|
||||
|
||||
this.$set(this.formData, "userId", id)
|
||||
this.$set(this.formData, "username", username)
|
||||
this.$set(this.formData, "loginname", loginname)
|
||||
this.$set(this.formData, "birthday", birthday)
|
||||
this.$set(this.formData, "sex", sex)
|
||||
this.$set(this.formData, "idCard", idCard)
|
||||
this.$set(this.formData, "nation", nation)
|
||||
this.$set(this.formData, "political", political)
|
||||
this.$set(this.formData, "position", position)
|
||||
this.$set(this.formData, "education", education)
|
||||
this.$set(this.formData, "academicDegree", academicDegree)
|
||||
this.$set(this.formData, "campus", campus)
|
||||
this.$set(this.formData, "userState", userState)
|
||||
this.$set(this.formData, "personType", personType)
|
||||
this.$set(this.formData, "unitName", unit ? unit.name : unitName)
|
||||
this.$set(this.formData, "unitId", unit ? unit.id : unitId)
|
||||
this.$set(this.formData, "unionName", union ? union.name : unionName)
|
||||
this.$set(this.formData, "unionId", union ? union.id : unionId)
|
||||
|
||||
this.$set(this.formData, "mobile", mobile)
|
||||
this.$set(this.formData, "email", email)
|
||||
this.$set(this.formData, "families", families ? families : [])
|
||||
this.$set(this.formData, "personalData", personalData)
|
||||
}
|
||||
},
|
||||
},
|
||||
async created() {
|
||||
this.init()
|
||||
|
||||
@@ -1,118 +0,0 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<member-audit-table ref="tableRef" @open-change-view="openChangeInfo" @open-edit="openEdit"
|
||||
@open-approval="openApproval" @open-view="openView"></member-audit-table>
|
||||
|
||||
<template #view>
|
||||
<member-info ref="memberInfoRef"></member-info>
|
||||
</template>
|
||||
|
||||
<template #public>
|
||||
<member-audit-change-info ref="memberAuditChangeInfoViewRef"></member-audit-change-info>
|
||||
<div v-if="showApprovalForm">
|
||||
<el-form :model="formData" ref="approvalFormRef" label-position="left" label-width="80px">
|
||||
<el-form-item label="审核意见" prop="approvalOpinion" :rules="[{required:true,message:'必填',trigger:['change','blur']}]">
|
||||
<user-opinion-textarea v-model="formData.approvalOpinion"></user-opinion-textarea>
|
||||
</el-form-item>
|
||||
<el-form-item label="电子签名" prop="approvalSignature" :rules="[{required:false,message:'必填',trigger:['change','blur']}]">
|
||||
<pc-signature v-model="formData.approvalSignature"></pc-signature>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<el-row type="flex" justify="end">
|
||||
<el-button plain @click="$refs.guava.index()">取消</el-button>
|
||||
<el-button type="danger" @click="doApproval('BACK')">退回重新填写</el-button>
|
||||
<el-button type="danger" @click="doApproval('REJECT')">拒绝</el-button>
|
||||
<el-button type="primary" @click="doApproval('PASS')">同意</el-button>
|
||||
</el-row>
|
||||
</div>
|
||||
</template>
|
||||
<template #edit>
|
||||
<member-change :id="id" :url="url" :edit="true" ref="memberChangeRef" @submit-ready="changeSuccess"></member-change>
|
||||
</template>
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
|
||||
<!--#include("../../common/audit/memberAuditTable.js"){}#-->
|
||||
<!--#include("../../common/audit/memberAuditChangeInfo.js"){}#-->
|
||||
<!--#include("../../common/info/memberInfo.js"){}#-->
|
||||
<!--#include("../../common/change/memberChange.js"){}#-->
|
||||
|
||||
new Vue({
|
||||
el: "#app",
|
||||
store,
|
||||
mixins: [initTableMixins],
|
||||
data: {
|
||||
showApprovalForm: false,
|
||||
id: '',
|
||||
url: '',
|
||||
},
|
||||
components: {
|
||||
"member-audit-table": MEMBER_AUDIT_TABLE,
|
||||
"member-audit-change-info": MEMBER_AUDIT_CHANGE_INFO,
|
||||
"member-info": MEMBER_INFO,
|
||||
"member-change": MEMBER_CHANGE,
|
||||
},
|
||||
methods: {
|
||||
doApproval(approvalType) {
|
||||
this.formData.bpmTaskApprovalType = approvalType
|
||||
this.$refs.approvalFormRef.validate((valid) => {
|
||||
if (valid) {
|
||||
this.$axios
|
||||
.post(loc() + "/approval", {
|
||||
approval: JSON.stringify(this.formData)
|
||||
})
|
||||
.then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.$refs.guava.index()
|
||||
this.$message.success(res.msg)
|
||||
this.doSearch()
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
},
|
||||
openApproval(data) {
|
||||
this.$refs.guava.public(() => {
|
||||
this.showApprovalForm = true
|
||||
this.formData = row.approvalParam
|
||||
this.$refs.memberAuditChangeInfoViewRef.onOpen({recordId: data.id, userId: data.userId})
|
||||
})
|
||||
},
|
||||
openChangeInfo(data){
|
||||
this.$refs.guava.public(() => {
|
||||
this.showApprovalForm = false
|
||||
this.$refs.memberAuditChangeInfoViewRef.onOpen({recordId: data.id, userId: data.userId})
|
||||
})
|
||||
},
|
||||
openView(userId){
|
||||
this.$refs.guava.view(() => {
|
||||
this.$refs.memberInfoRef.onOpen(userId)
|
||||
})
|
||||
},
|
||||
doSearch() {
|
||||
this.$refs.tableRef.doSearch()
|
||||
},
|
||||
changeSuccess() {
|
||||
this.$refs.guava.index(() => {
|
||||
this.doSearch()
|
||||
})
|
||||
},
|
||||
openEdit(row) {
|
||||
this.id = row.id
|
||||
this.url = '/platform/member/branchUnion/manage/list/generalMemberChange'
|
||||
this.$refs.guava.edit(() => {
|
||||
this.$refs.memberChangeRef.init()
|
||||
})
|
||||
}
|
||||
}
|
||||
});
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -1,102 +0,0 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<member-manage-query ref="queryRef" @query-ready="onQueryReady"></member-manage-query>
|
||||
<member-manage-table
|
||||
ref="tableRef"
|
||||
v-if="isQueryReady"
|
||||
@refresh="tableReady"
|
||||
@change-member="changeMember"
|
||||
@view-member="viewMember"
|
||||
@add-member="addMember"
|
||||
@refresh-table="changeSuccess"
|
||||
></member-manage-table>
|
||||
|
||||
<template #view>
|
||||
<member-info ref="memberInfoRef"></member-info>
|
||||
</template>
|
||||
|
||||
<template #edit>
|
||||
<member-apply :admin-operate="true"></member-apply>
|
||||
</template>
|
||||
|
||||
<template #public>
|
||||
<member-change :id="id" :url="url" ref="memberChangeRef" @submit-ready="changeSuccess"></member-change>
|
||||
</template>
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
<!--#include("../../common/manage/memberManageQuery.js"){}#-->
|
||||
<!--#include("../../common/manage/memberManageTable.js"){}#-->
|
||||
<!--#include("../../common/info/memberInfo.js"){}#-->
|
||||
<!--#include("../../common/apply/memberApply.js"){}#-->
|
||||
<!--#include("../../common/change/memberChange.js"){}#-->
|
||||
|
||||
new Vue({
|
||||
el: "#app",
|
||||
store,
|
||||
mixins: [initTableMixins],
|
||||
data: {
|
||||
id: "",
|
||||
username: "",
|
||||
url: "",
|
||||
isQueryReady: false,
|
||||
hasShownMessage: false
|
||||
},
|
||||
components: {
|
||||
"member-manage-query": MEMBER_MANAGE_QUERY,
|
||||
"member-manage-table": MEMBER_MANAGE_TABLE,
|
||||
"member-info": MEMBER_INFO,
|
||||
"member-apply": MEMBER_APPLY,
|
||||
"member-change": MEMBER_CHANGE
|
||||
},
|
||||
methods: {
|
||||
changeMember(data) {
|
||||
this.id = data.id
|
||||
this.username = data.username
|
||||
this.url = "/platform/member/branchUnion/manage/list/generalMemberChange"
|
||||
this.$refs.guava.public(() => {
|
||||
this.$refs.memberChangeRef.init()
|
||||
})
|
||||
},
|
||||
viewMember(val) {
|
||||
this.$refs.guava.view(() => {
|
||||
this.$refs.memberInfoRef.onOpen(val)
|
||||
})
|
||||
},
|
||||
addMember() {
|
||||
this.$refs.guava.edit()
|
||||
},
|
||||
onQueryReady(pageForm) {
|
||||
this.isQueryReady = true
|
||||
this.$nextTick(() => {
|
||||
if (this.$refs.tableRef) {
|
||||
this.$refs.tableRef.pageData()
|
||||
this.$refs.tableRef.pageForm = pageForm
|
||||
}
|
||||
})
|
||||
},
|
||||
tableReady(pageForm) {
|
||||
this.$refs.queryRef.pageForm = pageForm
|
||||
},
|
||||
changeSuccess() {
|
||||
this.$refs.guava.index()
|
||||
this.$nextTick(() => {
|
||||
this.$refs.tableRef.pageData()
|
||||
})
|
||||
if (this.hasShownMessage) return
|
||||
// setTimeout(() => {
|
||||
// this.$message.success('您已成功提交【'+ this.username +'】老师的变更,可前往分工会审核菜单查看审核记录');
|
||||
// }, 1000);
|
||||
this.hasShownMessage = true
|
||||
}
|
||||
},
|
||||
created() {}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -1,51 +0,0 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<member-record @open-view="openView" @open-change-info="openChangeInfo"></member-record>
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<member-info ref="memberInfoRef"></member-info>
|
||||
</template>
|
||||
|
||||
<template #public>
|
||||
<member-audit-change-info ref="memberAuditChangeInfoRef"></member-audit-change-info>
|
||||
</template>
|
||||
</guava>
|
||||
</div>
|
||||
<script>
|
||||
<!--#include("../../common/record/memberRecord.js"){}#-->
|
||||
<!--#include("../../common/info/memberInfo.js"){}#-->
|
||||
<!--#include("../../common/audit/memberAuditChangeInfo.js"){}#-->
|
||||
new Vue({
|
||||
el: "#app",
|
||||
mixins: [initTableMixins],
|
||||
store,
|
||||
components: {
|
||||
"member-record": MEMBER_RECORD,
|
||||
"member-info": MEMBER_INFO,
|
||||
"member-audit-change-info": MEMBER_AUDIT_CHANGE_INFO
|
||||
},
|
||||
data: {
|
||||
userId: ''
|
||||
},
|
||||
methods: {
|
||||
openChangeInfo(row) {
|
||||
this.$refs.guava.public(() => {
|
||||
this.$refs.memberAuditChangeInfoRef.onOpen({recordId: row.id, userId: row.userId})
|
||||
})
|
||||
},
|
||||
openView(data) {
|
||||
this.$refs.guava.view(() => {
|
||||
this.$refs.memberInfoRef.onOpen(data)
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
+180
@@ -0,0 +1,180 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<el-card shadow="never">
|
||||
<common-query ref="commonQueryRef" @search="search"></common-query>
|
||||
</el-card>
|
||||
|
||||
<el-card shadow="never" class="mt10">
|
||||
<table-tool :app="this" label="申请列表">
|
||||
<el-radio-group @change="doSearch" class="mr5" size="small" v-model="pageForm.audit">
|
||||
<el-radio-button label="true">已审核</el-radio-button>
|
||||
<el-radio-button label="false">未审核</el-radio-button>
|
||||
</el-radio-group>
|
||||
</table-tool>
|
||||
<el-table :data="tableData" :size="tableSize" @sort-change="pageOrder" ref="table" row-key="id" style="width: 100%">
|
||||
<el-table-column
|
||||
:index="indexMethod"
|
||||
align="center"
|
||||
header-align="center"
|
||||
label="序号"
|
||||
type="index"
|
||||
width="80px"
|
||||
></el-table-column>
|
||||
<el-table-column
|
||||
:label="column.label"
|
||||
:prop="column.prop"
|
||||
:sortable="column.sortable"
|
||||
:width="column.width"
|
||||
header-align="center"
|
||||
align="center"
|
||||
min-width="100px"
|
||||
show-overflow-tooltip
|
||||
v-for="column in tableColumns"
|
||||
>
|
||||
<template scope="{row}" v-if="column.prop=='loginname'">
|
||||
<el-link @click="openView(row)" type="primary">{{row.loginname}}</el-link>
|
||||
</template>
|
||||
<template scope="{row}" v-else-if="column.prop=='changeTypes'">
|
||||
<span style="color: #0e78c5;cursor: pointer" @click="openView(row)">
|
||||
{{getChangeTypes(row.changeTypes)}}
|
||||
</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="220" align="center">
|
||||
<template slot-scope="{row}">
|
||||
<el-button @click="openView(row)" size="mini" type="primary">查看</el-button>
|
||||
<el-button v-if="row.processInstanceTaskStatus==='ACTIVE'" @click="openApproval(row)" size="mini" type="primary">
|
||||
审核
|
||||
</el-button>
|
||||
<el-button
|
||||
v-if="row.processInstanceTaskStatus==='COMPLETE' && !row.nextTaskIsComplete"
|
||||
@click="openRevoke(row.processInstanceTaskId)"
|
||||
size="mini"
|
||||
type="danger"
|
||||
>
|
||||
撤回
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
|
||||
<template #view>
|
||||
<info ref="infoRef"></info>
|
||||
<div v-if="showApprovalForm">
|
||||
<div class="process-title">{{formData.processInstanceNodeName}}</div>
|
||||
<el-form :model="formData" ref="approvalFormRef" label-position="left" label-width="80px">
|
||||
<el-form-item label="审核意见" prop="approvalOpinion" :rules="[{required:true,message:'必填',trigger:['change','blur']}]">
|
||||
<user-opinion-textarea v-model="formData.approvalOpinion"></user-opinion-textarea>
|
||||
</el-form-item>
|
||||
<!--<el-form-item label="电子签名" prop="approvalSignature" :rules="[{required:false,message:'必填',trigger:['change','blur']}]">
|
||||
<pc-signature v-model="formData.approvalSignature"></pc-signature>
|
||||
</el-form-item>-->
|
||||
</el-form>
|
||||
<el-row type="flex" justify="end">
|
||||
<el-button plain @click="$refs.guava.index()">取消</el-button>
|
||||
<el-button type="danger" @click="doApproval('BACK')">退回重新填写</el-button>
|
||||
<el-button type="danger" @click="doApproval('REJECT')">拒绝</el-button>
|
||||
<el-button type="primary" @click="doApproval('PASS')">同意</el-button>
|
||||
</el-row>
|
||||
</div>
|
||||
</template>
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
<!--#include("../common/info.js"){}#-->
|
||||
<!--#include("../common/commonQuery.js"){}#-->
|
||||
|
||||
new Vue({
|
||||
el: "#app",
|
||||
store,
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
tableColumns: [
|
||||
{ prop: "loginname", label: "工号", sortable: true },
|
||||
{ prop: "username", label: "姓名", sortable: true },
|
||||
{ prop: "sex", label: "性别", sortable: true },
|
||||
{ prop: "userState", label: "在职状态", sortable: true },
|
||||
{ prop: "personType", label: "人员类型", sortable: true },
|
||||
{ prop: "unionName", label: "所属工会", sortable: true },
|
||||
{ prop: "unitName", label: "所属单位", sortable: true },
|
||||
{ prop: "changeTypes", label: "变更类型", sortable: true, width: 200 },
|
||||
{ prop: "applyDateTime", label: "申请时间", sortable: true },
|
||||
{ prop: "processInstanceNodeName", label: "当前节点", sortable: true }
|
||||
],
|
||||
|
||||
showApprovalForm: false,
|
||||
formData: {}
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'info': INFO,
|
||||
'common-query': COMMON_QUERY,
|
||||
},
|
||||
methods: {
|
||||
openView(row){
|
||||
this.$refs.guava.view(() => {
|
||||
this.showApprovalForm = false
|
||||
this.$refs.infoRef.onOpen(row)
|
||||
})
|
||||
},
|
||||
openApproval(row) {
|
||||
this.$refs.guava.view(() => {
|
||||
this.showApprovalForm = true
|
||||
this.formData = row.approvalParam
|
||||
this.$refs.infoRef.onOpen(row)
|
||||
})
|
||||
},
|
||||
doApproval(approvalType) {
|
||||
this.formData.bpmTaskApprovalType = approvalType
|
||||
this.$refs.approvalFormRef.validate((valid) => {
|
||||
if (valid) {
|
||||
this.$axios
|
||||
.post(loc() + "/approval", {
|
||||
approval: JSON.stringify(this.formData)
|
||||
})
|
||||
.then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.$refs.guava.index()
|
||||
this.$message.success(res.msg)
|
||||
this.doSearch()
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
},
|
||||
search(pageForm){
|
||||
if (pageForm) {
|
||||
this.pageForm = {...this.pageForm, ...pageForm}
|
||||
}
|
||||
this.doSearch()
|
||||
},
|
||||
getChangeTypes(changeTypes){
|
||||
// const changeTypesList = JSON.parse(changeTypes)
|
||||
if (changeTypes) {
|
||||
if (!changeTypes || changeTypes.length === 0 || !this.changeTypeData || this.changeTypeData.length === 0) return null
|
||||
return changeTypes
|
||||
.map((v) => {
|
||||
return this.changeTypeData.find((item) => item.code === v).changeTypeName
|
||||
})
|
||||
.join(",")
|
||||
}
|
||||
return null
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.pageData()
|
||||
this.changeTypeData = await this.$businessTool.getEnumOptions("MemberChangeType")
|
||||
}
|
||||
});
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
+83
@@ -0,0 +1,83 @@
|
||||
const COMMON_QUERY = {
|
||||
template: /*language=HTML*/ `
|
||||
<search @search="doSearch">
|
||||
<search-item label="姓名/工号">
|
||||
<el-input placeholder="请输入内容" clearable v-model="pageForm.searchKeyword"></el-input>
|
||||
</search-item>
|
||||
<search-item label="所属工会">
|
||||
<el-select @change="flushUnits" @clear="flushUnits" clearable filterable
|
||||
placeholder="所属工会" style="width: 100%;" v-model="pageForm.unionId">
|
||||
<el-option :key="item.id" :label="item.name" :value="item.id"
|
||||
v-for="item in unions"></el-option>
|
||||
</el-select>
|
||||
</search-item>
|
||||
<search-item label="所属单位">
|
||||
<el-select clearable filterable placeholder="请选择" style="width: 100%"
|
||||
v-model="pageForm.unitId">
|
||||
<el-option :key="item.id" :label="item.name" :value="item.id"
|
||||
v-for="item in units"></el-option>
|
||||
</el-select>
|
||||
</search-item>
|
||||
<search-item label="在职状态">
|
||||
<dict-select v-model="pageForm.userState" placeholder="在职状态" @change="doSearch"
|
||||
code="USER_STATE"></dict-select>
|
||||
</search-item>
|
||||
<search-item label="人事编制">
|
||||
<dict-select v-model="pageForm.preparedBy" placeholder="人事编制" @change="doSearch"
|
||||
code="PREPARED_BY"></dict-select>
|
||||
</search-item>
|
||||
<search-item label="人员类型">
|
||||
<dict-select v-model="pageForm.personType" placeholder="人员类型" @change="doSearch"
|
||||
code="PERSON_TYPE"></dict-select>
|
||||
</search-item>
|
||||
</search>
|
||||
`,
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return{
|
||||
unions: [],
|
||||
units: [],
|
||||
pageForm: {
|
||||
searchKeyword: '',
|
||||
unionId: '',
|
||||
unitId: '',
|
||||
userState: '',
|
||||
personType: ''
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
doSearch(){
|
||||
this.$emit('search', this.pageForm)
|
||||
},
|
||||
async initData(){
|
||||
if (this.$auth.hasRoleOr("SYSADMIN, SCHOOL_UNION_ADMIN, SCHOOL_UNION_MEMBER_ADMIN")) {
|
||||
this.$businessTool.listUnion(this.pageForm.unionId).then((data) => {
|
||||
this.unions = data
|
||||
})
|
||||
this.$businessTool.listUnit().then((data) => {
|
||||
this.units = data
|
||||
})
|
||||
} else {
|
||||
this.$businessTool.listUnion(this.$store.state.user.union.id).then((data) => {
|
||||
this.unions = data
|
||||
})
|
||||
this.$businessTool.listUnit(this.$store.state.user.union.id).then((data) => {
|
||||
this.units = data
|
||||
})
|
||||
}
|
||||
},
|
||||
async flushUnits(){
|
||||
this.$set(this.pageForm, "unitId", null)
|
||||
this.units = []
|
||||
if (this.pageForm.unionId) {
|
||||
this.$businessTool.listUnit(this.pageForm.unionId).then((data) => {
|
||||
this.units = data
|
||||
})
|
||||
}
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.initData()
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,175 @@
|
||||
const INFO = {
|
||||
template: /*language=HTML*/ `
|
||||
<div>
|
||||
<el-tabs v-model="activeName">
|
||||
<el-tab-pane label="基础信息" name="basicInfo">
|
||||
<el-descriptions :column="3" border class="descriptions-form">
|
||||
<el-descriptions-item label="工号">{{ viewData.loginname }}</el-descriptions-item>
|
||||
<el-descriptions-item label="姓名">{{ viewData.username }}</el-descriptions-item>
|
||||
<el-descriptions-item label="性别">{{ viewData.sex }}</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="民族">{{ viewData.nation }}</el-descriptions-item>
|
||||
<el-descriptions-item label="出生日期">{{ viewData.birthday ?
|
||||
$moment(viewData.birthday).format("YYYY年MM月DD日") : '暂无' }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="政治面貌">{{ viewData.political }}</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="学历">{{ viewData.education }}</el-descriptions-item>
|
||||
<el-descriptions-item label="学位">{{ viewData.academicDegree }}</el-descriptions-item>
|
||||
<el-descriptions-item label="党政职务">{{ viewData.position }}</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="工作单位">{{ viewData.unitname }}</el-descriptions-item>
|
||||
<el-descriptions-item label="所属工会">{{ viewData.unionname }}</el-descriptions-item>
|
||||
<el-descriptions-item label="所属校区">{{ viewData.campus }}</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="身份证号码">{{ viewData.idCard }}</el-descriptions-item>
|
||||
<el-descriptions-item label="联系电话">{{ viewData.mobile }}</el-descriptions-item>
|
||||
<el-descriptions-item label="电子邮箱">{{ viewData.email }}</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="在职状态">{{ viewData.userState }}</el-descriptions-item>
|
||||
<el-descriptions-item label="人员类型">{{ viewData.personType }}</el-descriptions-item>
|
||||
<el-descriptions-item label="进校时间">{{ viewData.schoolTime }}</el-descriptions-item>
|
||||
|
||||
<template v-if="viewData.userState == '退休'">
|
||||
<el-descriptions-item label="退休日期">{{ viewData.retireDate ?
|
||||
$moment(viewData.retireDate).format("YYYY-MM-DD") : '暂无' }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="福利享受截止日期">{{
|
||||
$moment(viewData.welfareStopDate).format("YYYY-MM-DD") }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item></el-descriptions-item>
|
||||
</template>
|
||||
|
||||
<el-descriptions-item label="会员状态">{{ viewData.member ? '会员' : '非会员' }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="福利会员状态">{{ viewData.welfareMember ? '福利会员' : '非福利会员'
|
||||
}}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item></el-descriptions-item>
|
||||
|
||||
<template v-if="$store.state.user.loginname == viewData.loginname">
|
||||
<el-descriptions-item label="家庭主要成员" :span="3">
|
||||
<el-table v-if="viewData.families&&viewData.families.length"
|
||||
:data="viewData.families" size="mini" border
|
||||
:header-cell-style="{background:'#eff3f6'}"
|
||||
style="width: 100%">
|
||||
<el-table-column prop="relation" label="与本人关系" align="center"
|
||||
header-align="center">
|
||||
</el-table-column>
|
||||
<el-table-column prop="name" label="姓名" align="center" header-align="center">
|
||||
</el-table-column>
|
||||
<el-table-column prop="unit" label="单位" align="center" header-align="center">
|
||||
</el-table-column>
|
||||
<el-table-column prop="remark" label="备注" align="center" header-align="center">
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<el-empty v-else :image-size="50" description="暂无家庭成员信息"></el-empty>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="个人简况" :span="3">
|
||||
<template slot="label">个人简况</template>
|
||||
<div v-if="viewData.personalData" class="text-left" v-html="viewData.personalData"></div>
|
||||
<span v-else>无数据</span>
|
||||
</el-descriptions-item>
|
||||
</template>
|
||||
</el-descriptions>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="变更信息" name="changeInfo" v-if="viewData.changeInfos">
|
||||
<el-table :data="viewData.changeInfos" :size="tableSize" @sort-change="pageOrder" ref="table"
|
||||
row-key="id" style="width: 100%">
|
||||
<el-table-column :index="indexMethod" align="center" header-align="center"
|
||||
label="序号" type="index" width="80px"></el-table-column>
|
||||
<el-table-column prop="fieldName" label="变更字段" header-align="center" align="center"></el-table-column>
|
||||
<el-table-column prop="sourceValue" label="原数据" header-align="center" align="center">
|
||||
<template slot-scope="{row}">
|
||||
<div v-html="row.sourceValue"></div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="newValue" label="新数据" header-align="center" align="center">
|
||||
<template slot-scope="{row}">
|
||||
<div v-html="row.newValue"></div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-tab-pane>
|
||||
|
||||
<el-tab-pane v-if="nodeTasks && nodeTasks.length > 0" label="审核信息" name="audit">
|
||||
<div>
|
||||
<div v-for="nodeTask in nodeTasks" :key="nodeTask.id">
|
||||
<div class="process-title">
|
||||
{{nodeTask.nodeName}}
|
||||
</div>
|
||||
<el-descriptions :column="3" border v-for="task in nodeTask.tasks" :key="task.id"
|
||||
style="margin-bottom: 10px">
|
||||
<el-descriptions-item label="审核人">
|
||||
{{ task.actualOwnerLoginName + '-' + task.actualOwnerUserName}}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="审核时间">{{ task.endOn}}</el-descriptions-item>
|
||||
<el-descriptions-item label="审核结果">
|
||||
<div v-if="task.extVariable">
|
||||
<el-tag type="success" size="mini"
|
||||
v-if="task.extVariable.bpmTaskApprovalType === 'PASS'">同意
|
||||
</el-tag>
|
||||
<el-tag type="danger" size="mini"
|
||||
v-if="task.extVariable.bpmTaskApprovalType === 'BACK'">退回
|
||||
</el-tag>
|
||||
<el-tag type="danger" size="mini"
|
||||
v-if="task.extVariable.bpmTaskApprovalType === 'REJECT'">拒绝
|
||||
</el-tag>
|
||||
</div>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="审核意见" :span="3">
|
||||
{{ task.extVariable.approvalOpinion }}
|
||||
</el-descriptions-item>
|
||||
<template v-if="$auth.hasRoleOr('SYSADMIN') && task.extVariable.approvalRemark">
|
||||
<el-descriptions-item label="审核说明" :span="3">
|
||||
{{ task.extVariable.approvalRemark }}
|
||||
</el-descriptions-item>
|
||||
</template>
|
||||
<el-descriptions-item label="签字" :span="3" v-if="task.extVariable && task.extVariable.approvalSignature">
|
||||
<el-image :src="task.extVariable.approvalSignature"
|
||||
class="signature-image"></el-image>
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</div>
|
||||
</div>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
</div>
|
||||
`,
|
||||
store,
|
||||
mixins: [initTableMixins],
|
||||
data(){
|
||||
return {
|
||||
viewData: {
|
||||
changeInfos: [],
|
||||
remark: "",
|
||||
},
|
||||
nodeTasks: [],
|
||||
row: null,
|
||||
|
||||
activeName: "basicInfo",
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
// 打开
|
||||
onOpen(row) {
|
||||
this.row = row
|
||||
this.info()
|
||||
},
|
||||
|
||||
// 获取申请信息
|
||||
info() {
|
||||
this.$axios.post("/platform/member/change/mine/findMemberChangeRecord", { id: this.row.id }).then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.viewData = res.data
|
||||
this.nodeTasks = res.data.nodeTasks
|
||||
if (this.viewData.families) {
|
||||
this.viewData.families = JSON.parse(this.viewData.families)
|
||||
} else {
|
||||
this.viewData.families = []
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
}
|
||||
}
|
||||
+117
@@ -0,0 +1,117 @@
|
||||
const MEMBER_ALL_CHANGE_INFO = {
|
||||
template: /*language=HTML*/ `
|
||||
<el-tabs v-model="activeName">
|
||||
<el-tab-pane label="基础信息" name="basicInfo">
|
||||
<el-descriptions :column="3" border class="descriptions-form">
|
||||
<el-descriptions-item label="工号">{{ viewData.loginname }}</el-descriptions-item>
|
||||
<el-descriptions-item label="姓名">{{ viewData.username }}</el-descriptions-item>
|
||||
<el-descriptions-item label="性别">{{ viewData.sex }}</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="民族">{{ viewData.nation }}</el-descriptions-item>
|
||||
<el-descriptions-item label="出生日期">{{ $moment(viewData.birthday).format("YYYY年MM月DD日") }}</el-descriptions-item>
|
||||
<el-descriptions-item label="政治面貌">{{ viewData.political }}</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="学历">{{ viewData.education }}</el-descriptions-item>
|
||||
<el-descriptions-item label="学位">{{ viewData.academicDegree }}</el-descriptions-item>
|
||||
<el-descriptions-item label="党政职务">{{ viewData.position }}</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="工作单位">{{ viewData.unitname }}</el-descriptions-item>
|
||||
<el-descriptions-item label="所属工会">{{ viewData.unionname }}</el-descriptions-item>
|
||||
<el-descriptions-item label="所属校区">{{ viewData.campus }}</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="身份证号码">{{ viewData.idCard }}</el-descriptions-item>
|
||||
<el-descriptions-item label="联系电话">{{ viewData.mobile }}</el-descriptions-item>
|
||||
<el-descriptions-item label="电子邮箱">{{ viewData.email }}</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="在职状态">{{ viewData.userState }}</el-descriptions-item>
|
||||
<el-descriptions-item label="人员类型">{{ viewData.personType }}</el-descriptions-item>
|
||||
<el-descriptions-item label="进校时间">{{ viewData.schoolTime }}</el-descriptions-item>
|
||||
|
||||
<template v-if="viewData.userState == '退休'">
|
||||
<el-descriptions-item label="退休日期">{{ viewData.retireDate ? $moment(viewData.retireDate).format("YYYY-MM-DD") : '暂无' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="福利享受截止日期">{{ $moment(viewData.welfareStopDate).format("YYYY-MM-DD") }}</el-descriptions-item>
|
||||
<el-descriptions-item></el-descriptions-item>
|
||||
</template>
|
||||
|
||||
<el-descriptions-item label="会员状态">{{ viewData.member ? '会员' : '非会员' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="福利会员状态">{{ viewData.welfareMember ? '福利会员' : '非福利会员' }}</el-descriptions-item>
|
||||
<template v-if="viewData.welfareMember">
|
||||
<el-descriptions-item label="福利号码">{{ viewData.welfareMobile }}</el-descriptions-item>
|
||||
</template>
|
||||
<template v-else>
|
||||
<el-descriptions-item></el-descriptions-item>
|
||||
</template>
|
||||
|
||||
<template v-if="viewData.loginname == $store.state.user.loginname">
|
||||
<el-descriptions-item label="家庭主要成员" :span="3">
|
||||
<el-table v-if="viewData.families&&viewData.families.length"
|
||||
:data="viewData.families" size="mini" border
|
||||
:header-cell-style="{background:'#eff3f6'}"
|
||||
style="width: 100%">
|
||||
<el-table-column prop="relation" label="与本人关系" align="center" header-align="center">
|
||||
</el-table-column>
|
||||
<el-table-column prop="name" label="姓名" align="center" header-align="center">
|
||||
</el-table-column>
|
||||
<el-table-column prop="unit" label="单位" align="center" header-align="center">
|
||||
</el-table-column>
|
||||
<el-table-column prop="remark" label="备注" align="center" header-align="center">
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<el-empty v-else :image-size="50" description="暂无家庭成员信息"></el-empty>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="个人简况" :span="3">
|
||||
<template slot="label">个人简况</template>
|
||||
<div v-if="viewData.vita" class="text-left" v-html="viewData.vita"></div>
|
||||
<span v-else>无数据</span>
|
||||
</el-descriptions-item>
|
||||
</template>
|
||||
</el-descriptions>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="历史变更记录" name="changeInfo" v-if="viewData.allChangeInfo">
|
||||
<el-timeline style="margin-top: 20px">
|
||||
<el-timeline-item placement="top" v-for="(changeData, index) in viewData.allChangeInfo"
|
||||
:key="index" :timestamp="changeData.timestamp">
|
||||
<el-card>
|
||||
<h5 style="color: #006DB9;font-weight: bolder;margin-bottom: 5px">{{ changeData.changeOriginName }}</h5>
|
||||
<el-table :data="changeData.changeInfos" size="mini" ref="table" row-key="id" style="width: 100%">
|
||||
<el-table-column :index="indexMethod" align="center" header-align="center"
|
||||
label="序号" type="index" width="80px"></el-table-column>
|
||||
<el-table-column prop="fieldName" label="变更字段" header-align="center" align="center"></el-table-column>
|
||||
<el-table-column prop="sourceValue" label="原数据" header-align="center" align="center">
|
||||
<template slot-scope="{row}">
|
||||
<div v-html="row.sourceValue"></div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="newValue" label="新数据" header-align="center" align="center">
|
||||
<template slot-scope="{row}">
|
||||
<div v-html="row.newValue"></div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-card>
|
||||
</el-timeline-item>
|
||||
</el-timeline>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
`,
|
||||
store,
|
||||
mixins: [initTableMixins],
|
||||
data(){
|
||||
return{
|
||||
viewData: {},
|
||||
activeName: "basicInfo"
|
||||
}
|
||||
},
|
||||
methods:{
|
||||
onOpen(userId){
|
||||
this.$axios.post('/platform/member/change/manage/getAllChangeMemberInfo', {userId})
|
||||
.then(resp => {
|
||||
if (resp.code === 0) {
|
||||
this.viewData = resp.data
|
||||
} else {
|
||||
this.$message.warning(resp.msg)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
+421
@@ -0,0 +1,421 @@
|
||||
const MEMBER_CHANGE = {
|
||||
template: /*language=HTML*/ `
|
||||
<el-card shadow="never">
|
||||
<div class="process-title">会员变更</div>
|
||||
<el-form :model="formData" ref="formRef" label-width="0" :rules="formRules" size="small" class="flow-task-form">
|
||||
<el-descriptions :column="3" border class="descriptions-form">
|
||||
<el-descriptions-item label="姓名">
|
||||
<el-form-item prop="username">
|
||||
<el-input :value="formData.username + '(' + formData.loginname + ')'" readonly
|
||||
size="small"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="性别">
|
||||
<el-form-item prop="sex">
|
||||
<el-radio-group :disabled="allowFields('sex')" v-model="formData.sex" size="small">
|
||||
<el-radio border label="男性"></el-radio>
|
||||
<el-radio border label="女性"></el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="民族">
|
||||
<el-form-item prop="nation">
|
||||
<dict-select style="width: 100%" placeholder="请选择民族" v-model="formData.nation"
|
||||
:disabled="allowFields('nation')" code="USER_NATION"></dict-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="政治面貌">
|
||||
<el-form-item prop="political">
|
||||
<dict-select style="width: 100%" placeholder="请选择政治面貌" v-model="formData.political"
|
||||
:disabled="allowFields('political')" code="POLITICAL_STATUS"></dict-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
|
||||
<el-descriptions-item label="学历">
|
||||
<el-form-item prop="education">
|
||||
<dict-select style="width: 100%" placeholder="请选择学历" v-model="formData.education"
|
||||
:disabled="allowFields('education')" code="USER_EDUCATION"></dict-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="学位">
|
||||
<el-form-item prop="academicDegree">
|
||||
<dict-select style="width: 100%" placeholder="请选择学位" v-model="formData.academicDegree"
|
||||
:disabled="allowFields('academicDegree')"
|
||||
code="USER_ACADEMIC_DEGREE"></dict-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="身份证号码">
|
||||
<el-form-item prop="idCard">
|
||||
<el-input v-model="formData.idCard" :disabled="allowFields('idCard')"
|
||||
placeholder="请输入身份证号码" maxlength="18"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="联系电话">
|
||||
<el-form-item prop="mobile">
|
||||
<el-input v-model="formData.mobile" :disabled="allowFields('mobile')"
|
||||
placeholder="请输入联系电话" maxlength="15"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="电子邮箱">
|
||||
<el-form-item prop="email">
|
||||
<el-input v-model="formData.email" :disabled="allowFields('email')" placeholder="请输入电子邮箱"
|
||||
maxlength="50"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="工作单位">
|
||||
<el-form-item prop="unitId">
|
||||
<el-select clearable filterable placeholder="请选择工作单位" style="width: 100%"
|
||||
:disabled="allowFields('unitId')" @change="getUnionName"
|
||||
v-model="formData.unitId">
|
||||
<el-option :key="item.id" :label="item.name" :value="item.id"
|
||||
v-for="item in units"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="所属工会">
|
||||
<el-form-item prop="unionName">
|
||||
<el-input v-model="formData.unionName" disabled placeholder="请输入所属工会"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="所属校区">
|
||||
<el-form-item prop="campus">
|
||||
<dict-select style="width: 100%" placeholder="请选择所属校区" v-model="formData.campus"
|
||||
:disabled="allowFields('campus')" code="USER_CAMPUS"></dict-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="在职状态">
|
||||
<el-form-item prop="userState">
|
||||
<dict-select v-model="formData.userState" code="USER_STATE"
|
||||
:disabled="allowFields('userState')" style="width: 100%"></dict-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="人员类型">
|
||||
<el-form-item prop="personType">
|
||||
<dict-select v-model="formData.personType" code="PERSON_TYPE"
|
||||
:disabled="allowFields('personType')" style="width: 100%"></dict-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item></el-descriptions-item>
|
||||
|
||||
|
||||
<el-descriptions-item label="会员状态">
|
||||
<el-form-item prop="member">
|
||||
<el-radio-group v-model="formData.member" size="small">
|
||||
<el-radio border :label="true">会员</el-radio>
|
||||
<el-radio border :label="false">非会员</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="福利会员状态">
|
||||
<el-form-item prop="welfareMember">
|
||||
<el-radio-group v-model="formData.welfareMember" size="small">
|
||||
<el-radio border :label="true">福利会员</el-radio>
|
||||
<el-radio border :label="false">非福利会员</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<template v-if="formData.welfareMember">
|
||||
<el-descriptions-item label="福利联系方式">
|
||||
<el-form-item prop="welfareMember">
|
||||
<el-input v-model="formData.welfareMobile" placeholder="请输入选择福利联系方式"
|
||||
maxlength="11" show-word-limit></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
</template>
|
||||
<template v-else>
|
||||
<el-descriptions-item></el-descriptions-item>
|
||||
</template>
|
||||
|
||||
|
||||
<template v-if="formData.loginname == $store.state.user.loginname">
|
||||
<el-descriptions-item label="家庭主要成员" :span="3">
|
||||
<el-form-item prop="families">
|
||||
<el-table :data="formData.families" border size="small">
|
||||
<el-table-column label="关系" prop="relation">
|
||||
<template slot-scope="{row}">
|
||||
<el-input v-model="row.relation" maxlength="50"
|
||||
placeholder="请输入与本人关系"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="姓名" prop="name">
|
||||
<template slot-scope="{row}">
|
||||
<el-input v-model="row.name" maxlength="50" placeholder="请输入姓名"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="工作单位" prop="unit">
|
||||
<template slot-scope="{row}">
|
||||
<el-input v-model="row.unit" maxlength="100"
|
||||
placeholder="请输入工作单位"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="备注" prop="remark">
|
||||
<template slot-scope="{row}">
|
||||
<el-input v-model="row.remark" maxlength="100"
|
||||
placeholder="请输入备注"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column width="100px">
|
||||
<template slot="header" slot-scope="scope">
|
||||
<el-button type="primary" size="mini" :disabled="allowFields('families')"
|
||||
@click="formData.families.push({})">添加
|
||||
</el-button>
|
||||
</template>
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
type="danger"
|
||||
icon="el-icon-delete"
|
||||
size="mini"
|
||||
:disabled="formData.families.length===0 || allowFields('families')"
|
||||
@click="formData.families.splice(scope.$index,1)"
|
||||
></el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="个人简历" :span="3">
|
||||
<el-form-item prop="personalData">
|
||||
<text-editor v-model="formData.personalData"></text-editor>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
</template>
|
||||
</el-descriptions>
|
||||
</el-form>
|
||||
<el-row justify="end" type="flex" class="mt10">
|
||||
<el-button @click="$emit('do-back')" v-if="formData.id || !isShow" type="primary">返 回</el-button>
|
||||
<template v-if="isShow">
|
||||
<el-button @click="doSave" type="primary">保存变更</el-button>
|
||||
</template>
|
||||
<el-button @click="doSubmit" type="primary">提交变更</el-button>
|
||||
</el-row>
|
||||
</el-card>
|
||||
`,
|
||||
props: {
|
||||
id: { type: String, default: '' },
|
||||
},
|
||||
mixins: [initTableMixins],
|
||||
store,
|
||||
data(){
|
||||
return{
|
||||
isShow: true,
|
||||
user: {},
|
||||
units: [],
|
||||
unions: [],
|
||||
// 允许变更的字段
|
||||
allowChangeFields: [],
|
||||
formData: {
|
||||
families: [],
|
||||
},
|
||||
formRules: {
|
||||
username: [{required: false, message: "必填", trigger: ["change", "blur"]}],
|
||||
sex: [{required: false, message: "必填", trigger: ["change", "blur"]}],
|
||||
email: [
|
||||
{
|
||||
validator: (rule, value, callback) => {
|
||||
if (!value) {
|
||||
callback();
|
||||
} else if (/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/.test(value)) {
|
||||
callback();
|
||||
} else {
|
||||
callback(new Error("邮箱格式错误"));
|
||||
}
|
||||
},
|
||||
trigger: ["change", "blur"]
|
||||
}
|
||||
],
|
||||
idCard: [
|
||||
{
|
||||
validator: (rule, value, callback) => {
|
||||
if (!value) {
|
||||
// 如果值为空,直接通过校验
|
||||
callback();
|
||||
} else if (/^[1-9]\d{5}(18|19|20)?\d{2}((0[1-9])|(10|11|12))(([0|1|2][0-9])|10|20|30|31)\d{3}(\d|[Xx])$/.test(value)) {
|
||||
// 18位身份证号码格式正确
|
||||
callback();
|
||||
} else if (/^[1-9]\d{7}((0[1-9])|(10|11|12))(([0|1|2][0-9])|10|20|30|31)\d{3}$/.test(value)) {
|
||||
// 15位身份证号码格式正确
|
||||
callback();
|
||||
} else if (/^[1-9]\d{5}(18|19|20)?\d{2}((0[1-9])|(10|11|12))(([0|1|2][0-9])|10|20|30|31)\d{3}$/.test(value)) {
|
||||
// 外国人身份证号码格式正确(18位)
|
||||
callback();
|
||||
} else if (/^[1-9]\d{7}((0[1-9])|(10|11|12))(([0|1|2][0-9])|10|20|30|31)\d{3}$/.test(value)) {
|
||||
// 外国人身份证号码格式正确(15位)
|
||||
callback();
|
||||
} else {
|
||||
// 格式错误,返回错误信息
|
||||
callback(new Error("身份证号码格式错误"));
|
||||
}
|
||||
},
|
||||
trigger: ["change", "blur"]
|
||||
}
|
||||
],
|
||||
mobile: [
|
||||
{
|
||||
validator: (rule, value, callback) => {
|
||||
if (!value) {
|
||||
// 如果值为空,直接通过校验
|
||||
callback();
|
||||
} else if (/^[1][345789][0-9]{9}$/.test(value)) {
|
||||
// 手机号格式正确
|
||||
callback();
|
||||
} else if (/^\d+-\d+$/.test(value) && value.length <= 16) {
|
||||
// 座机号格式正确
|
||||
callback();
|
||||
} else {
|
||||
// 格式错误,返回错误信息
|
||||
callback(new Error(value.includes('-') ? '座机号码格式错误' : '手机号码格式错误'));
|
||||
}
|
||||
},
|
||||
trigger: ["change", "blur"]
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
welfareProjectList: []
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
getUnionName(val){
|
||||
const data = this.units.find(v => v.id === val)
|
||||
this.$set(this.formData, 'unionName', data ? data.unionname : '')
|
||||
},
|
||||
allowFields(prop) {
|
||||
return !this.allowChangeFields.map(v => v.code).includes(prop)
|
||||
},
|
||||
doSave(){
|
||||
this.$confirm("保存后可在我的申请里面再次编辑,您确定要保存吗?", "提示", { type: "warning" })
|
||||
.then(() => {
|
||||
const formData = this.formData
|
||||
if (formData.families) {
|
||||
formData.families = JSON.stringify(this.formData.families)
|
||||
}
|
||||
this.$emit('do-save', formData)
|
||||
})
|
||||
.catch()
|
||||
},
|
||||
doSubmit() {
|
||||
this.$refs.formRef.validate((valid) => {
|
||||
if (valid) {
|
||||
this.$confirm("提交后将进入审核流程,无法再进行编辑,您确定要提交申请吗?", "提示", { type: "warning" })
|
||||
.then(() => {
|
||||
const formData = this.formData
|
||||
if (formData.families) {
|
||||
formData.families = JSON.stringify(this.formData.families)
|
||||
}
|
||||
this.$emit('do-submit', formData)
|
||||
})
|
||||
.catch()
|
||||
}
|
||||
})
|
||||
},
|
||||
async onOpen(userId){
|
||||
if (userId) {
|
||||
this.isShow = false
|
||||
await this.getUserById(userId)
|
||||
} else {
|
||||
this.isShow = true
|
||||
this.user = this.$store.state.user
|
||||
}
|
||||
this.getFormDataValue(this.id)
|
||||
this.allowChangeFields = await this.$businessTool.getDictOptions("MEMBER_ALLOW_CHANGES_FIELD")
|
||||
if (this.$auth.hasRoleOr('SYSADMIN, SCHOOL_UNION_MEMBER_ADMIN, SCHOOL_UNION_ADMIN')) {
|
||||
this.units = await this.$businessTool.listUnit()
|
||||
this.unions = await this.$businessTool.listUnion()
|
||||
} else {
|
||||
this.units = await this.$businessTool.listUnit(this.user.union.id)
|
||||
}
|
||||
},
|
||||
async getUserById(userId){
|
||||
const resp = await $.post("/platform/member/change/submit/getUserByIdForMemberChange", { userId })
|
||||
if (resp.code === 0) {
|
||||
this.user = resp.data
|
||||
}
|
||||
},
|
||||
getFormDataValue(id){
|
||||
if (id) {
|
||||
$.post("/platform/member/change/submit/findChangeById", { id }).then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.formData = res.data
|
||||
this.formData.unionid = this.user.unionid
|
||||
if (this.formData.families) {
|
||||
this.formData.families = JSON.parse(this.formData.families)
|
||||
} else {
|
||||
this.formData.families = []
|
||||
}
|
||||
}
|
||||
})
|
||||
} else {
|
||||
const {
|
||||
id,
|
||||
username,
|
||||
loginname,
|
||||
sex,
|
||||
member,
|
||||
welfareMember,
|
||||
nation,
|
||||
birthday,
|
||||
political,
|
||||
education,
|
||||
academicDegree,
|
||||
position,
|
||||
unit,
|
||||
union,
|
||||
campus,
|
||||
userState,
|
||||
personType,
|
||||
preparedBy,
|
||||
idCard,
|
||||
mobile,
|
||||
welfareMobile,
|
||||
email,
|
||||
families,
|
||||
personalData
|
||||
} = this.user
|
||||
|
||||
this.$set(this.formData, "userId", id)
|
||||
this.$set(this.formData, "username", username)
|
||||
this.$set(this.formData, "loginname", loginname)
|
||||
this.$set(this.formData, "birthday", birthday)
|
||||
this.$set(this.formData, "sex", sex)
|
||||
this.$set(this.formData, "member", member === 1)
|
||||
this.$set(this.formData, "welfareMember", welfareMember === 1)
|
||||
this.$set(this.formData, "idCard", idCard)
|
||||
this.$set(this.formData, "nation", nation)
|
||||
this.$set(this.formData, "political", political)
|
||||
this.$set(this.formData, "position", position)
|
||||
this.$set(this.formData, "education", education)
|
||||
this.$set(this.formData, "academicDegree", academicDegree)
|
||||
this.$set(this.formData, "campus", campus)
|
||||
this.$set(this.formData, "userState", userState)
|
||||
this.$set(this.formData, "personType", personType)
|
||||
this.$set(this.formData, "preparedBy", preparedBy)
|
||||
this.$set(this.formData, "unitName", unit ? unit.name : null)
|
||||
this.$set(this.formData, "unitId", unit ? unit.id : null)
|
||||
this.$set(this.formData, "unionName", union ? union.name : null)
|
||||
this.$set(this.formData, "unionId", union ? union.id : null)
|
||||
|
||||
this.$set(this.formData, "mobile", mobile)
|
||||
this.$set(this.formData, "welfareMobile", welfareMobile)
|
||||
this.$set(this.formData, "email", email)
|
||||
this.$set(this.formData, "families", families ? families : [])
|
||||
this.$set(this.formData, "personalData", personalData)
|
||||
}
|
||||
}
|
||||
},
|
||||
created(){
|
||||
// this.init()
|
||||
},
|
||||
style: /*language=CSS*/ `
|
||||
.el-descriptions-item__label {
|
||||
width: 15% !important;
|
||||
}
|
||||
`
|
||||
}
|
||||
+182
@@ -0,0 +1,182 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<el-card shadow="never">
|
||||
<common-query ref="commonQueryRef" @search="search"></common-query>
|
||||
</el-card>
|
||||
|
||||
<el-card shadow="never" class="mt10">
|
||||
<table-tool :app="this" label="申请列表">
|
||||
<el-radio-group @change="doSearch" class="mr5" size="small" v-model="pageForm.audit">
|
||||
<el-radio-button label="true">已审核</el-radio-button>
|
||||
<el-radio-button label="false">未审核</el-radio-button>
|
||||
</el-radio-group>
|
||||
</table-tool>
|
||||
<el-table :data="tableData" :size="tableSize" @sort-change="pageOrder" ref="table" row-key="id" style="width: 100%">
|
||||
<el-table-column
|
||||
:index="indexMethod"
|
||||
align="center"
|
||||
header-align="center"
|
||||
label="序号"
|
||||
type="index"
|
||||
width="80px"
|
||||
></el-table-column>
|
||||
<el-table-column
|
||||
:label="column.label"
|
||||
:prop="column.prop"
|
||||
:sortable="column.sortable"
|
||||
:width="column.width"
|
||||
header-align="center"
|
||||
align="center"
|
||||
min-width="100px"
|
||||
show-overflow-tooltip
|
||||
v-for="column in tableColumns"
|
||||
>
|
||||
<template scope="{row}" v-if="column.prop=='loginname'">
|
||||
<el-link @click="openView(row)" type="primary">{{row.loginname}}</el-link>
|
||||
</template>
|
||||
<template scope="{row}" v-else-if="column.prop=='changeTypes'">
|
||||
<span style="color: #0e78c5;cursor: pointer" @click="openView(row)">
|
||||
{{getChangeTypes(row.changeTypes)}}
|
||||
</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="220" align="center">
|
||||
<template slot-scope="{row}">
|
||||
<el-button @click="openView(row)" size="mini" type="primary">查看</el-button>
|
||||
<el-button v-if="row.processInstanceTaskStatus==='ACTIVE'" @click="openApproval(row)" size="mini" type="primary">
|
||||
审核
|
||||
</el-button>
|
||||
<el-button
|
||||
v-if="row.processInstanceTaskStatus==='COMPLETE' && !row.nextTaskIsComplete"
|
||||
@click="openRevoke(row.processInstanceTaskId)"
|
||||
size="mini"
|
||||
type="danger"
|
||||
>
|
||||
撤回
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
|
||||
<template #view>
|
||||
<info ref="infoRef"></info>
|
||||
<div v-if="showApprovalForm">
|
||||
<div class="process-title">{{formData.processInstanceNodeName}}</div>
|
||||
<el-form :model="formData" ref="approvalFormRef" label-position="left" label-width="80px">
|
||||
<el-form-item label="审核意见" prop="approvalOpinion" :rules="[{required:true,message:'必填',trigger:['change','blur']}]">
|
||||
<user-opinion-textarea v-model="formData.approvalOpinion"></user-opinion-textarea>
|
||||
</el-form-item>
|
||||
<!--<el-form-item label="电子签名" prop="approvalSignature" :rules="[{required:false,message:'必填',trigger:['change','blur']}]">
|
||||
<pc-signature v-model="formData.approvalSignature"></pc-signature>
|
||||
</el-form-item>-->
|
||||
</el-form>
|
||||
<el-row type="flex" justify="end">
|
||||
<el-button plain @click="$refs.guava.index()">取消</el-button>
|
||||
<el-button type="danger" @click="doApproval('BACK')">退回重新填写</el-button>
|
||||
<el-button type="danger" @click="doApproval('REJECT')">拒绝</el-button>
|
||||
<el-button type="primary" @click="doApproval('PASS')">同意</el-button>
|
||||
</el-row>
|
||||
</div>
|
||||
</template>
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
<!--#include("../common/info.js"){}#-->
|
||||
<!--#include("../common/commonQuery.js"){}#-->
|
||||
|
||||
new Vue({
|
||||
el: "#app",
|
||||
store,
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
tableColumns: [
|
||||
{ prop: "loginname", label: "工号", sortable: true },
|
||||
{ prop: "username", label: "姓名", sortable: true },
|
||||
{ prop: "sex", label: "性别", sortable: true },
|
||||
{ prop: "userState", label: "在职状态", sortable: true },
|
||||
{ prop: "personType", label: "人员类型", sortable: true },
|
||||
{ prop: "unionName", label: "所属工会", sortable: true },
|
||||
{ prop: "unitName", label: "所属单位", sortable: true },
|
||||
{ prop: "changeTypes", label: "变更类型", sortable: true, width: 200 },
|
||||
{ prop: "applyDateTime", label: "申请时间", sortable: true },
|
||||
{ prop: "processInstanceNodeName", label: "当前节点", sortable: true }
|
||||
],
|
||||
|
||||
changeTypeData: [],
|
||||
|
||||
showApprovalForm: false,
|
||||
formData: {},
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'info': INFO,
|
||||
'common-query': COMMON_QUERY,
|
||||
},
|
||||
methods: {
|
||||
openView(row){
|
||||
this.$refs.guava.view(() => {
|
||||
this.showApprovalForm = false
|
||||
this.$refs.infoRef.onOpen(row)
|
||||
})
|
||||
},
|
||||
openApproval(row) {
|
||||
this.$refs.guava.view(() => {
|
||||
this.showApprovalForm = true
|
||||
this.formData = row.approvalParam
|
||||
this.$refs.infoRef.onOpen(row)
|
||||
})
|
||||
},
|
||||
doApproval(approvalType) {
|
||||
this.formData.bpmTaskApprovalType = approvalType
|
||||
this.$refs.approvalFormRef.validate((valid) => {
|
||||
if (valid) {
|
||||
this.$axios
|
||||
.post(loc() + "/approval", {
|
||||
approval: JSON.stringify(this.formData)
|
||||
})
|
||||
.then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.$refs.guava.index()
|
||||
this.$message.success(res.msg)
|
||||
this.doSearch()
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
},
|
||||
search(pageForm){
|
||||
if (pageForm) {
|
||||
this.pageForm = {...this.pageForm, ...pageForm}
|
||||
}
|
||||
this.doSearch()
|
||||
},
|
||||
getChangeTypes(changeTypes){
|
||||
// const changeTypesList = JSON.parse(changeTypes)
|
||||
if (changeTypes) {
|
||||
if (!changeTypes || changeTypes.length === 0 || !this.changeTypeData || this.changeTypeData.length === 0) return null
|
||||
return changeTypes
|
||||
.map((v) => {
|
||||
return this.changeTypeData.find((item) => item.code === v).changeTypeName
|
||||
})
|
||||
.join(",")
|
||||
}
|
||||
return null
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.pageData()
|
||||
this.changeTypeData = await this.$businessTool.getEnumOptions("MemberChangeType")
|
||||
}
|
||||
});
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
+133
-42
@@ -68,7 +68,12 @@ layout("/layouts/platform.html"){
|
||||
code="UserType"></dict-select>
|
||||
</div>-->
|
||||
|
||||
<el-button @click="addMember" type="primary" size="small">新增会员</el-button>
|
||||
<!-- <el-button @click="addMember" type="primary" size="small">新增会员</el-button>-->
|
||||
<el-button type="primary" size="small" icon="el-icon-printer" @click="exportExcel">导出会员名单</el-button>
|
||||
|
||||
<el-button type="primary" size="small" icon="el-icon-printer" @click="exportNotEqPhoneExcel"
|
||||
v-if="$auth.hasRoleOr('SYSADMIN,SCHOOL_UNION_ADMIN')">导出会员福利号码不一致名单
|
||||
</el-button>
|
||||
</table-tool>
|
||||
|
||||
<el-table :data="tableData" :size="tableSize" @sort-change="pageOrder"
|
||||
@@ -137,9 +142,14 @@ layout("/layouts/platform.html"){
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item
|
||||
:command="{type:'change',data:row}"
|
||||
v-if="$auth.hasRoleOr(['SYSADMIN','SCHOOL_UNION_ADMIN','BRANCH_UNION_CHAIRMAN','BRANCH_UNION_CHAIRMAN'])">
|
||||
v-if="$auth.hasRoleOr(['SYSADMIN','SCHOOL_UNION_ADMIN','BRANCH_UNION_CHAIRMAN','BRANCH_UNION_CHAIRMAN','BRANCH_UNION_GROUP_LEADER'])">
|
||||
变更
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item
|
||||
:command="{type:'changeWelfareMobile',data:row}"
|
||||
v-if="$auth.hasRoleOr(['SYSADMIN','SCHOOL_UNION_ADMIN'])">
|
||||
修改福利号码
|
||||
</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
</template>
|
||||
@@ -150,24 +160,53 @@ layout("/layouts/platform.html"){
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<member-info :id="id"></member-info>
|
||||
<member-info ref="memberInfoRef"></member-info>
|
||||
</template>
|
||||
|
||||
<template #edit>
|
||||
<member-apply :admin-operate="true"></member-apply>
|
||||
</template>
|
||||
|
||||
|
||||
<template #public>
|
||||
<member-change :id="id" :url="url" ref="memberChangeRef"></member-change>
|
||||
<member-change ref="memberChangeRef" @do-back="$refs.guava.index()" @do-submit="doChangeSubmit"></member-change>
|
||||
</template>
|
||||
|
||||
<template #edit>
|
||||
<member-all-change ref="memberAllChangeRef"></member-all-change>
|
||||
</template>
|
||||
</guava>
|
||||
|
||||
<el-dialog title="修改福利号码" :visible.sync="changeWelfareMobileVisible" append-to-body width="30%">
|
||||
<el-form :model="welfareFormData" label-width="80px">
|
||||
<el-form-item label="姓名">
|
||||
<el-input :value="welfareFormData.username" disabled></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="工号">
|
||||
<el-input :value="welfareFormData.loginname" disabled></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="手机号">
|
||||
<el-input :value="welfareFormData.mobile" disabled></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="福利号码" prop="welfareMobile"
|
||||
:rules="[
|
||||
{required: true, message: '请输入福利号码', trigger: 'blur'},
|
||||
{
|
||||
pattern: /^1[3-9]\d{9}$/,
|
||||
message: '请输入有效的手机号码',
|
||||
trigger: 'blur'
|
||||
}]">
|
||||
<el-input v-model="welfareFormData.welfareMobile"></el-input>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button @click="changeWelfareMobileVisible = false">取消</el-button>
|
||||
<el-button type="primary" @click="changeWelfareMobile">确定</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
|
||||
<!--#include("../../common/info/memberInfo.js"){}#-->
|
||||
<!--#include("../../common/apply/memberApply.js"){}#-->
|
||||
<!--#include("../../common/change/memberChange.js"){}#-->
|
||||
<!--#include("../common/memberChange.js"){}#-->
|
||||
<!--#include("../common/memberAllChangeInfo.js"){}#-->
|
||||
|
||||
new Vue({
|
||||
el: "#app",
|
||||
@@ -213,9 +252,7 @@ layout("/layouts/platform.html"){
|
||||
},
|
||||
unions: [],
|
||||
units: [],
|
||||
changeType: {},
|
||||
id: "",
|
||||
url: "",
|
||||
tableColumns: [
|
||||
{prop: 'loginname', label: '工号', sortable: true},
|
||||
{prop: 'username', label: '姓名', sortable: true},
|
||||
@@ -226,11 +263,14 @@ layout("/layouts/platform.html"){
|
||||
{prop: 'unionName', label: '所属工会', sortable: true},
|
||||
{prop: 'unitName', label: '所属单位', sortable: true},
|
||||
],
|
||||
|
||||
changeWelfareMobileVisible: false,
|
||||
welfareFormData: {}
|
||||
},
|
||||
components: {
|
||||
"member-info": MEMBER_INFO,
|
||||
"member-apply": MEMBER_APPLY,
|
||||
"member-change": MEMBER_CHANGE,
|
||||
"member-all-change": MEMBER_ALL_CHANGE_INFO,
|
||||
},
|
||||
methods: {
|
||||
dropdownCommand(command) {
|
||||
@@ -239,57 +279,108 @@ layout("/layouts/platform.html"){
|
||||
this.openView(data.id)
|
||||
} else if (type === 'change') {
|
||||
this.openChange(data.id)
|
||||
} else if (type === "changeWelfareMobile") {
|
||||
this.welfareFormData = {
|
||||
id: data.id,
|
||||
username: data.username,
|
||||
loginname: data.loginname,
|
||||
mobile: data.mobile,
|
||||
welfareMobile: data.welfareMobile
|
||||
}
|
||||
this.changeWelfareMobileVisible = true
|
||||
}
|
||||
},
|
||||
|
||||
changeWelfareMobile() {
|
||||
this.$confirm("确定要将" + this.welfareFormData.username + "的福利号码修改为:" + this.welfareFormData.welfareMobile + "吗?", "提示", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: "warning"
|
||||
})
|
||||
.then(() => {
|
||||
this.$axios.post("/platform/member/change/manage/changeWelfareMobile", this.welfareFormData).then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.$message.success(res.msg)
|
||||
this.pageData()
|
||||
this.changeWelfareMobileVisible = false
|
||||
}
|
||||
})
|
||||
})
|
||||
},
|
||||
|
||||
openChange(id) {
|
||||
this.id = null
|
||||
this.id = id
|
||||
this.$refs.guava.public()
|
||||
this.$nextTick(() => {
|
||||
this.$refs.memberChangeRef.findOne(id)
|
||||
this.$refs.guava.public(() => {
|
||||
this.$refs.memberChangeRef.onOpen(id)
|
||||
})
|
||||
},
|
||||
|
||||
openView(id) {
|
||||
this.id = null
|
||||
this.id = id
|
||||
this.$refs.guava.view()
|
||||
this.$refs.guava.view(() => {
|
||||
this.$refs.memberInfoRef.onOpen(id)
|
||||
})
|
||||
},
|
||||
|
||||
openUserChangeInfo(row) {
|
||||
this.$refs.guava.edit(() => {
|
||||
this.$refs.memberAllChangeRef.onOpen(row.id)
|
||||
})
|
||||
},
|
||||
|
||||
addMember() {
|
||||
this.$refs.guava.edit()
|
||||
},
|
||||
openUserChangeInfo() {
|
||||
|
||||
},
|
||||
getChangeTypes(changeTypes) {
|
||||
if (changeTypes) {
|
||||
const c = JSON.parse(changeTypes)
|
||||
return c.map(v => {
|
||||
return this.changeType[v]
|
||||
}).join(',')
|
||||
}
|
||||
return null
|
||||
},
|
||||
async doChangeSubmit(formData) {
|
||||
const resp = await this.$axios.post('/platform/member/change/manage/doSubmitChange', {
|
||||
record: JSON.stringify(formData),
|
||||
approvalRemark: ""
|
||||
})
|
||||
if (resp.code === 0) {
|
||||
this.pageData()
|
||||
this.$message.success(resp.msg)
|
||||
this.$refs.guava.index()
|
||||
} else {
|
||||
this.$message.error(resp.msg)
|
||||
}
|
||||
},
|
||||
getChangeTypes(changeTypes){
|
||||
const changeTypesList = JSON.parse(changeTypes)
|
||||
if (changeTypesList) {
|
||||
if (!changeTypesList || changeTypesList.length === 0 || !this.changeTypeData || this.changeTypeData.length === 0) return null
|
||||
return changeTypesList
|
||||
.map((v) => {
|
||||
return this.changeTypeData.find((item) => item.code === v).changeTypeName
|
||||
})
|
||||
.join(",")
|
||||
}
|
||||
return null
|
||||
},
|
||||
changeDateRangeChange(val) {
|
||||
if (val && val.length > 0) {
|
||||
this.pageForm.changeDateBefore = val[0]
|
||||
this.pageForm.changeDateEnd = val[1]
|
||||
}
|
||||
},
|
||||
/**
|
||||
* 导出会员名单
|
||||
*/
|
||||
exportExcel() {
|
||||
const pageForm = clone(this.pageForm)
|
||||
this.$downLoad("/platform/member/change/manage/doExport", pageForm)
|
||||
},
|
||||
exportNotEqPhoneExcel(){
|
||||
const pageForm = clone(this.pageForm)
|
||||
this.$downLoad("/platform/member/change/manage/doExportNotEqPhone", pageForm)
|
||||
},
|
||||
async initData() {
|
||||
const isAdmin = this.$auth.hasRoleOr(["SYSADMIN", "SCHOOL_UNION_ADMIN"])
|
||||
if (isAdmin) {
|
||||
this.$businessTool.listUnion(this.pageForm.unionId).then(data => {
|
||||
this.unions = data
|
||||
})
|
||||
this.unions = await this.$businessTool.listUnion(this.pageForm.unionId)
|
||||
} else {
|
||||
this.$businessTool.listUnion(this.$store.state.user.union.id).then(data => {
|
||||
this.unions = data
|
||||
})
|
||||
this.unions = await this.$businessTool.listUnion(this.$store.state.user.union.id)
|
||||
}
|
||||
this.$businessTool.getDictOptions("MEMBER_CHANGE_TYPE").then(data => {
|
||||
this.changeType = data
|
||||
})
|
||||
this.url = isAdmin ? "/platform/member/school/manage/generalMemberChange" : "/platform/member/branch/manage/generalMemberChange"
|
||||
this.changeTypeData = await this.$businessTool.getEnumOptions("MemberChangeType")
|
||||
},
|
||||
async flushUnits() {
|
||||
this.$set(this.pageForm, "unitId", null)
|
||||
|
||||
@@ -0,0 +1,175 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<div id="app">
|
||||
<guava ref="guava">
|
||||
<el-card shadow="never">
|
||||
<common-query ref="commonQueryRef" @search="search"></common-query>
|
||||
</el-card>
|
||||
|
||||
<el-card shadow="never" class="mt10">
|
||||
<table-tool :app="this" label="申请列表"></table-tool>
|
||||
<el-table :data="tableData" :size="tableSize" @sort-change="pageOrder" ref="table" row-key="id" style="width: 100%">
|
||||
<el-table-column
|
||||
:index="indexMethod"
|
||||
align="center"
|
||||
header-align="center"
|
||||
label="序号"
|
||||
type="index"
|
||||
width="80px"
|
||||
></el-table-column>
|
||||
<el-table-column
|
||||
:label="column.label"
|
||||
:prop="column.prop"
|
||||
:sortable="column.sortable"
|
||||
:width="column.width"
|
||||
header-align="center"
|
||||
align="center"
|
||||
min-width="100px"
|
||||
show-overflow-tooltip
|
||||
v-for="column in tableColumns"
|
||||
>
|
||||
<template scope="{row}" v-if="column.prop=='loginname'">
|
||||
<el-link @click="openView(row)" type="primary">{{row.loginname}}</el-link>
|
||||
</template>
|
||||
<template scope="{row}" v-else-if="column.prop=='changeTypes'">
|
||||
<span style="color: #0e78c5;cursor: pointer" @click="openView(row)">
|
||||
{{getChangeTypes(row.changeTypes)}}
|
||||
</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="220" align="center">
|
||||
<template slot-scope="{row}">
|
||||
<el-button @click="openView(row)" size="mini" type="primary">查看</el-button>
|
||||
<el-button
|
||||
v-if="[10,40,70].includes(row.processInstanceNodeCode)"
|
||||
size="mini"
|
||||
type="primary"
|
||||
@click="$store.dispatch('pjaxRoute', '/platform/member/change/submit?id='+row.id)"
|
||||
>
|
||||
编辑
|
||||
</el-button>
|
||||
|
||||
<template v-if="row.groupName">
|
||||
<el-button
|
||||
v-if="[20].includes(row.processInstanceNodeCode) && !row.nextTaskIsComplete"
|
||||
size="mini"
|
||||
type="danger"
|
||||
@click="openRevoke(row)"
|
||||
>
|
||||
撤销
|
||||
</el-button>
|
||||
</template>
|
||||
<template v-else>
|
||||
<el-button
|
||||
v-if="[50].includes(row.processInstanceNodeCode) && !row.nextTaskIsComplete"
|
||||
size="mini"
|
||||
type="danger"
|
||||
@click="openRevoke(row)"
|
||||
>
|
||||
撤销
|
||||
</el-button>
|
||||
</template>
|
||||
<el-button v-if="[10].includes(row.processInstanceNodeCode)" size="mini" type="danger" @click="doDelete(row)">
|
||||
删除
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
|
||||
<template #view>
|
||||
<info ref="infoRef"></info>
|
||||
</template>
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
<!--#include("../common/info.js"){}#-->
|
||||
<!--#include("../common/commonQuery.js"){}#-->
|
||||
|
||||
new Vue({
|
||||
el: "#app",
|
||||
store,
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
tableColumns: [
|
||||
{ prop: "loginname", label: "工号", sortable: true },
|
||||
{ prop: "username", label: "姓名", sortable: true },
|
||||
{ prop: "sex", label: "性别", sortable: true },
|
||||
{ prop: "userState", label: "在职状态", sortable: true },
|
||||
{ prop: "personType", label: "人员类型", sortable: true },
|
||||
{ prop: "unionName", label: "所属工会", sortable: true },
|
||||
{ prop: "unitName", label: "所属单位", sortable: true },
|
||||
{ prop: "changeTypes", label: "变更类型", sortable: true, width: 200 },
|
||||
{ prop: "applyDateTime", label: "申请时间", sortable: true },
|
||||
{ prop: "processInstanceNodeName", label: "当前节点", sortable: true }
|
||||
]
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'info': INFO,
|
||||
'common-query': COMMON_QUERY,
|
||||
},
|
||||
methods: {
|
||||
doDelete(row) {
|
||||
this.$confirm("您确定要删除吗?", "提示", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: "warning"
|
||||
}).then(() => {
|
||||
this.$axios.post(loc() + "/delete", { id: row.id }).then((resp) => {
|
||||
this.$message.success(resp.msg)
|
||||
this.doSearch()
|
||||
})
|
||||
})
|
||||
},
|
||||
openRevoke(row) {
|
||||
this.$confirm("您确定要撤销申请吗?", "提示", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: "warning"
|
||||
}).then(() => {
|
||||
this.$axios.post(loc() + "/revokeApply", { id: row.id }).then((resp) => {
|
||||
this.$message.success(resp.msg)
|
||||
this.doSearch()
|
||||
})
|
||||
})
|
||||
},
|
||||
openView(row) {
|
||||
this.$refs.guava.view(() => {
|
||||
this.$refs.infoRef.onOpen(row)
|
||||
})
|
||||
},
|
||||
|
||||
search(pageForm){
|
||||
if (pageForm) {
|
||||
this.pageForm = {...this.pageForm, ...pageForm}
|
||||
}
|
||||
this.doSearch()
|
||||
},
|
||||
|
||||
getChangeTypes(changeTypes){
|
||||
// const changeTypesList = JSON.parse(changeTypes)
|
||||
if (changeTypes) {
|
||||
if (!changeTypes || changeTypes.length === 0 || !this.changeTypeData || this.changeTypeData.length === 0) return null
|
||||
return changeTypes
|
||||
.map((v) => {
|
||||
return this.changeTypeData.find((item) => item.code === v).changeTypeName
|
||||
})
|
||||
.join(",")
|
||||
}
|
||||
return null
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.pageData()
|
||||
this.changeTypeData = await this.$businessTool.getEnumOptions("MemberChangeType")
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
+106
-123
@@ -5,105 +5,91 @@ layout("/layouts/platform.html"){
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<el-card shadow="never">
|
||||
<search @search="doSearch">
|
||||
<search-item label="姓名/工号">
|
||||
<el-input placeholder="请输入内容" clearable v-model="pageForm.searchKeyword"></el-input>
|
||||
</search-item>
|
||||
<search-item label="所属工会">
|
||||
<el-select @change="flushUnits" @clear="flushUnits" clearable filterable
|
||||
placeholder="所属工会" style="width: 100%;" v-model="pageForm.unionId">
|
||||
<el-option :key="item.id" :label="item.name" :value="item.id"
|
||||
v-for="item in unions"></el-option>
|
||||
</el-select>
|
||||
</search-item>
|
||||
<search-item label="所属单位">
|
||||
<el-select clearable filterable placeholder="请选择" style="width: 100%"
|
||||
v-model="pageForm.unitId">
|
||||
<el-option :key="item.id" :label="item.name" :value="item.id"
|
||||
v-for="item in units"></el-option>
|
||||
</el-select>
|
||||
</search-item>
|
||||
<search-item label="在职状态">
|
||||
<dict-select v-model="pageForm.userState" placeholder="在职状态" @change="doSearch"
|
||||
code="USER_STATE"></dict-select>
|
||||
</search-item>
|
||||
<search-item label="人员类型">
|
||||
<dict-select v-model="pageForm.personType" placeholder="人员类型" @change="doSearch"
|
||||
code="PERSON_TYPE"></dict-select>
|
||||
</search-item>
|
||||
<search-item label="变更类型">
|
||||
<dict-select v-model="pageForm.changeType" placeholder="变更类型" @change="doSearch"
|
||||
code="MEMBER_CHANGE_TYPE"></dict-select>
|
||||
</search-item>
|
||||
</search>
|
||||
</el-card>
|
||||
|
||||
<el-card shadow="never">
|
||||
<table-tool label="变更列表"></table-tool>
|
||||
<el-table :data="tableData" :size="tableSize" @sort-change="pageOrder"
|
||||
class="vi-table" ref="table" row-key="id" style="width: 100%">
|
||||
<el-table-column :index="indexMethod" align="center" header-align="center"
|
||||
label="序号" type="index" width="80px"></el-table-column>
|
||||
<el-table-column :label="column.label" :prop="column.prop"
|
||||
:sortable="column.sortable" :width="column.width"
|
||||
align="center" header-align="center" min-width="100px"
|
||||
show-overflow-tooltip v-for="column in tableColumns">
|
||||
<template scope="{row}" v-if="column.prop=='loginname'">
|
||||
<el-link @click="openView(row.id)" type="primary">{{row.loginname}}</el-link>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column header-align="center" label="异动信息">
|
||||
<el-table-column align="center" header-align="center" label="更新时间"
|
||||
min-width="145px" prop="changeTime"
|
||||
show-overflow-tooltip sortable>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="异动类型"
|
||||
prop="changeType" show-overflow-tooltip sortable>
|
||||
<template scope="{row}">
|
||||
<!--<span style="color: #0e78c5;cursor: pointer" @click="openUserChangeInfo(row)">
|
||||
{{getChangeTypes(row.changeTypes)}}
|
||||
</span>-->
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table-column>
|
||||
|
||||
<!--<el-table-column align="center" header-align="center" label="操作"
|
||||
prop="userOnline"
|
||||
width="100px">
|
||||
<template scope="{row}">
|
||||
<el-dropdown @command="dropdownCommand">
|
||||
<el-button plain size="mini">
|
||||
<i class="ti-settings"></i>
|
||||
<span class="ti-angle-down"></span>
|
||||
</el-button>
|
||||
<el-dropdown-menu slot="dropdown">
|
||||
<el-dropdown-item :command="{type:'view',data:row}">
|
||||
查看
|
||||
</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
</template>
|
||||
</el-table-column>-->
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
<common-query ref="commonQueryRef" @search="search"></common-query>
|
||||
</el-card>
|
||||
|
||||
<el-card shadow="never" class="mt10">
|
||||
<table-tool label="变更列表" :app="this"></table-tool>
|
||||
<el-table :data="tableData" style="width: 100%" row-key="id"
|
||||
@sort-change="pageOrder"
|
||||
resizable
|
||||
v-loading="tableLoading" :size="tableSize" class="vi-table">
|
||||
<el-table-column align="center" header-align="center" type="index"
|
||||
:index="indexMethod" label="序号"
|
||||
width="80px"></el-table-column>
|
||||
<el-table-column
|
||||
align="center"
|
||||
header-align="center"
|
||||
v-for="column in tableColumns"
|
||||
show-overflow-tooltip
|
||||
:label="column.label"
|
||||
:prop="column.prop"
|
||||
:sortable="column.sortable"
|
||||
>
|
||||
<template v-if="column.prop=='loginname'" scope="{row}">
|
||||
<el-link type="primary" @click="openUserView(row)">{{row.loginname}}</el-link>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="异动信息" header-align="center">
|
||||
<el-table-column label="更新时间" prop="changeTime" min-width="145px"
|
||||
header-align="center"
|
||||
sortable
|
||||
align="center" show-overflow-tooltip>
|
||||
</el-table-column>
|
||||
<el-table-column label="异动类型" prop="changeTypes" header-align="center"
|
||||
width="150px"
|
||||
align="center" show-overflow-tooltip sortable>
|
||||
<template scope="{row}">
|
||||
<span style="color: #0e78c5;cursor: pointer" @click="openView(row)">
|
||||
{{ getChangeTypes(row.changeTypes) }}
|
||||
</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table-column>
|
||||
|
||||
<!-- <el-table-column label="审核状态">-->
|
||||
<!-- <template scope="{row}">-->
|
||||
<!-- <vi-table-state v-if="row.stateId" :state="row"></vi-table-state>-->
|
||||
<!-- <vi-table-state v-else :state="{stateColor:'#1890ff',stateName:'暂无'}"></vi-table-state>-->
|
||||
<!-- </template>-->
|
||||
<!-- </el-table-column>-->
|
||||
<el-table-column prop="userOnline" align="center" header-align="center"
|
||||
label="操作"
|
||||
width="100px" fixed="right">
|
||||
<template scope="{row}">
|
||||
<el-button size="mini" type="primary" @click="openView(row.userId)">查看</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<member-info :id="userId"></member-info>
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<member-all-change ref="memberAllChangeRef"></member-all-change>
|
||||
</template>
|
||||
|
||||
<template #edit>
|
||||
<member-info ref="memberInfoRef"></member-info>
|
||||
</template>
|
||||
</guava>
|
||||
|
||||
</div>
|
||||
<script>
|
||||
|
||||
<!--#include("../../common/info/memberInfo.js"){}#-->
|
||||
|
||||
<!--#include("../../common/info/memberInfo.js"){}#-->
|
||||
<!--#include("../common/memberAllChangeInfo.js"){}#-->
|
||||
<!--#include("../common/commonQuery.js"){}#-->
|
||||
|
||||
new Vue({
|
||||
el:'#app',
|
||||
mixins: [initTableMixins],
|
||||
components: {
|
||||
"member-info": MEMBER_INFO,
|
||||
'common-query': COMMON_QUERY,
|
||||
"member-all-change": MEMBER_ALL_CHANGE_INFO,
|
||||
},
|
||||
data(){
|
||||
return{
|
||||
@@ -118,46 +104,43 @@ layout("/layouts/platform.html"){
|
||||
{prop: 'unionName', label: '所属工会', sortable: true},
|
||||
{prop: 'unitName', label: '所属单位', sortable: true},
|
||||
],
|
||||
unions: [],
|
||||
units: []
|
||||
changeTypeData: [],
|
||||
}
|
||||
},
|
||||
methods:{
|
||||
getChangeTypes(changeTypes) {
|
||||
if (changeTypes) {
|
||||
const c = JSON.parse(changeTypes)
|
||||
return this.userChangeTypeOptions.filter(v => c.includes(v.code)).map(v => v.description).join()
|
||||
}
|
||||
return null
|
||||
},
|
||||
openView(userId) {
|
||||
this.id = userId
|
||||
this.$refs.guava.view()
|
||||
},
|
||||
async initData() {
|
||||
if (this.$auth.hasRoleOr(["SYSADMIN", "SCHOOL_UNION_ADMIN"])) {
|
||||
this.$businessTool.listUnion().then(data => {
|
||||
this.unions = data
|
||||
})
|
||||
} else {
|
||||
this.$businessTool.listUnion(this.$store.state.user.union.id).then(data => {
|
||||
this.unions = data
|
||||
})
|
||||
}
|
||||
},
|
||||
async flushUnits() {
|
||||
this.$set(this.pageForm, "unitId", null)
|
||||
this.units = []
|
||||
if (this.pageForm.unionId) {
|
||||
this.$businessTool.listUnit(this.pageForm.unionId).then(data => {
|
||||
this.units = data
|
||||
})
|
||||
}
|
||||
}
|
||||
openUserView(row){
|
||||
this.$refs.guava.edit(() => {
|
||||
this.$refs.memberInfoRef.onOpen(row.userId)
|
||||
})
|
||||
},
|
||||
openView(row){
|
||||
this.$refs.guava.view(() => {
|
||||
this.$refs.memberAllChangeRef.onOpen(row.userId)
|
||||
})
|
||||
},
|
||||
getChangeTypes(changeTypes){
|
||||
if (!changeTypes) return null
|
||||
const changeTypesList = JSON.parse(changeTypes)
|
||||
if (changeTypesList) {
|
||||
if (!changeTypesList || changeTypesList.length === 0 || !this.changeTypeData || this.changeTypeData.length === 0) return null
|
||||
return changeTypesList
|
||||
.map((v) => {
|
||||
return this.changeTypeData.find((item) => item.code === v).changeTypeName
|
||||
})
|
||||
.join(",")
|
||||
}
|
||||
return null
|
||||
},
|
||||
search(pageForm){
|
||||
if (pageForm) {
|
||||
this.pageForm = {...this.pageForm, ...pageForm}
|
||||
}
|
||||
this.doSearch()
|
||||
},
|
||||
},
|
||||
created(){
|
||||
this.pageData()
|
||||
this.initData()
|
||||
async created(){
|
||||
this.changeTypeData = await this.$businessTool.getEnumOptions("MemberChangeType")
|
||||
this.pageData()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
+180
@@ -0,0 +1,180 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<el-card shadow="never">
|
||||
<common-query ref="commonQueryRef" @search="search"></common-query>
|
||||
</el-card>
|
||||
|
||||
<el-card shadow="never" class="mt10">
|
||||
<table-tool :app="this" label="申请列表">
|
||||
<el-radio-group @change="doSearch" class="mr5" size="small" v-model="pageForm.audit">
|
||||
<el-radio-button label="true">已审核</el-radio-button>
|
||||
<el-radio-button label="false">未审核</el-radio-button>
|
||||
</el-radio-group>
|
||||
</table-tool>
|
||||
<el-table :data="tableData" :size="tableSize" @sort-change="pageOrder" ref="table" row-key="id" style="width: 100%">
|
||||
<el-table-column
|
||||
:index="indexMethod"
|
||||
align="center"
|
||||
header-align="center"
|
||||
label="序号"
|
||||
type="index"
|
||||
width="80px"
|
||||
></el-table-column>
|
||||
<el-table-column
|
||||
:label="column.label"
|
||||
:prop="column.prop"
|
||||
:sortable="column.sortable"
|
||||
:width="column.width"
|
||||
header-align="center"
|
||||
align="center"
|
||||
min-width="100px"
|
||||
show-overflow-tooltip
|
||||
v-for="column in tableColumns"
|
||||
>
|
||||
<template scope="{row}" v-if="column.prop=='loginname'">
|
||||
<el-link @click="openView(row)" type="primary">{{row.loginname}}</el-link>
|
||||
</template>
|
||||
<template scope="{row}" v-else-if="column.prop=='changeTypes'">
|
||||
<span style="color: #0e78c5;cursor: pointer" @click="openView(row)">
|
||||
{{getChangeTypes(row.changeTypes)}}
|
||||
</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="220" align="center">
|
||||
<template slot-scope="{row}">
|
||||
<el-button @click="openView(row)" size="mini" type="primary">查看</el-button>
|
||||
<el-button v-if="row.processInstanceTaskStatus==='ACTIVE'" @click="openApproval(row)" size="mini" type="primary">
|
||||
审核
|
||||
</el-button>
|
||||
<el-button
|
||||
v-if="row.processInstanceTaskStatus==='COMPLETE' && !row.nextTaskIsComplete"
|
||||
@click="openRevoke(row.processInstanceTaskId)"
|
||||
size="mini"
|
||||
type="danger"
|
||||
>
|
||||
撤回
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
|
||||
<template #view>
|
||||
<info ref="infoRef"></info>
|
||||
<div v-if="showApprovalForm">
|
||||
<div class="process-title">{{formData.processInstanceNodeName}}</div>
|
||||
<el-form :model="formData" ref="approvalFormRef" label-position="left" label-width="80px">
|
||||
<el-form-item label="审核意见" prop="approvalOpinion" :rules="[{required:true,message:'必填',trigger:['change','blur']}]">
|
||||
<user-opinion-textarea v-model="formData.approvalOpinion"></user-opinion-textarea>
|
||||
</el-form-item>
|
||||
<!--<el-form-item label="电子签名" prop="approvalSignature" :rules="[{required:false,message:'必填',trigger:['change','blur']}]">
|
||||
<pc-signature v-model="formData.approvalSignature"></pc-signature>
|
||||
</el-form-item>-->
|
||||
</el-form>
|
||||
<el-row type="flex" justify="end">
|
||||
<el-button plain @click="$refs.guava.index()">取消</el-button>
|
||||
<el-button type="danger" @click="doApproval('BACK')">退回重新填写</el-button>
|
||||
<el-button type="danger" @click="doApproval('REJECT')">拒绝</el-button>
|
||||
<el-button type="primary" @click="doApproval('PASS')">同意</el-button>
|
||||
</el-row>
|
||||
</div>
|
||||
</template>
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
<!--#include("../common/info.js"){}#-->
|
||||
<!--#include("../common/commonQuery.js"){}#-->
|
||||
|
||||
new Vue({
|
||||
el: "#app",
|
||||
store,
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
tableColumns: [
|
||||
{ prop: "loginname", label: "工号", sortable: true },
|
||||
{ prop: "username", label: "姓名", sortable: true },
|
||||
{ prop: "sex", label: "性别", sortable: true },
|
||||
{ prop: "userState", label: "在职状态", sortable: true },
|
||||
{ prop: "personType", label: "人员类型", sortable: true },
|
||||
{ prop: "unionName", label: "所属工会", sortable: true },
|
||||
{ prop: "unitName", label: "所属单位", sortable: true },
|
||||
{ prop: "changeTypes", label: "变更类型", sortable: true, width: 200 },
|
||||
{ prop: "applyDateTime", label: "申请时间", sortable: true },
|
||||
{ prop: "processInstanceNodeName", label: "当前节点", sortable: true }
|
||||
],
|
||||
|
||||
showApprovalForm: false,
|
||||
formData: {}
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'info': INFO,
|
||||
'common-query': COMMON_QUERY,
|
||||
},
|
||||
methods: {
|
||||
openView(row){
|
||||
this.$refs.guava.view(() => {
|
||||
this.showApprovalForm = false
|
||||
this.$refs.infoRef.onOpen(row)
|
||||
})
|
||||
},
|
||||
openApproval(row) {
|
||||
this.$refs.guava.view(() => {
|
||||
this.showApprovalForm = true
|
||||
this.formData = row.approvalParam
|
||||
this.$refs.infoRef.onOpen(row)
|
||||
})
|
||||
},
|
||||
doApproval(approvalType) {
|
||||
this.formData.bpmTaskApprovalType = approvalType
|
||||
this.$refs.approvalFormRef.validate((valid) => {
|
||||
if (valid) {
|
||||
this.$axios
|
||||
.post(loc() + "/approval", {
|
||||
approval: JSON.stringify(this.formData)
|
||||
})
|
||||
.then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.$refs.guava.index()
|
||||
this.$message.success(res.msg)
|
||||
this.doSearch()
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
},
|
||||
search(pageForm){
|
||||
if (pageForm) {
|
||||
this.pageForm = {...this.pageForm, ...pageForm}
|
||||
}
|
||||
this.doSearch()
|
||||
},
|
||||
getChangeTypes(changeTypes){
|
||||
// const changeTypesList = JSON.parse(changeTypes)
|
||||
if (changeTypes) {
|
||||
if (!changeTypes || changeTypes.length === 0 || !this.changeTypeData || this.changeTypeData.length === 0) return null
|
||||
return changeTypes
|
||||
.map((v) => {
|
||||
return this.changeTypeData.find((item) => item.code === v).changeTypeName
|
||||
})
|
||||
.join(",")
|
||||
}
|
||||
return null
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.pageData()
|
||||
this.changeTypeData = await this.$businessTool.getEnumOptions("MemberChangeType")
|
||||
}
|
||||
});
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,421 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<div id="app">
|
||||
<el-card shadow="never">
|
||||
<h3 style="color: var(--color-primary)" slot="header">会员变更申请</h3>
|
||||
<el-form :model="formData" ref="formRef" :rules="formRules" label-width="0" label-suffix=":">
|
||||
<el-descriptions :column="3" border class="descriptions-form">
|
||||
<el-descriptions-item label="姓名">
|
||||
<el-form-item prop="username">
|
||||
<el-input :value="formData.username + '(' + formData.loginname + ')'" readonly size="small"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="性别">
|
||||
<el-form-item prop="sex">
|
||||
<el-radio-group :disabled="allowFields('sex')" v-model="formData.sex" size="small">
|
||||
<el-radio border label="男性"></el-radio>
|
||||
<el-radio border label="女性"></el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="民族">
|
||||
<el-form-item prop="nation">
|
||||
<dict-select style="width: 100%" placeholder="请选择民族" v-model="formData.nation"
|
||||
:disabled="allowFields('nation')" code="USER_NATION"></dict-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="政治面貌">
|
||||
<el-form-item prop="political">
|
||||
<dict-select style="width: 100%" placeholder="请选择政治面貌" v-model="formData.political"
|
||||
:disabled="allowFields('political')" code="POLITICAL_STATUS"></dict-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
|
||||
<el-descriptions-item label="学历">
|
||||
<el-form-item prop="education">
|
||||
<dict-select style="width: 100%" placeholder="请选择学历" v-model="formData.education"
|
||||
:disabled="allowFields('education')" code="USER_EDUCATION"></dict-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="学位">
|
||||
<el-form-item prop="academicDegree">
|
||||
<dict-select style="width: 100%" placeholder="请选择学位" v-model="formData.academicDegree"
|
||||
:disabled="allowFields('academicDegree')" code="USER_ACADEMIC_DEGREE"></dict-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="身份证号码">
|
||||
<el-form-item prop="idCard">
|
||||
<el-input v-model="formData.idCard" :disabled="allowFields('idCard')" placeholder="请输入身份证号码" maxlength="18"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="联系电话">
|
||||
<el-form-item prop="mobile">
|
||||
<el-input v-model="formData.mobile" :disabled="allowFields('mobile')" placeholder="请输入联系电话" maxlength="15"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="电子邮箱">
|
||||
<el-form-item prop="email">
|
||||
<el-input v-model="formData.email" :disabled="allowFields('email')" placeholder="请输入电子邮箱" maxlength="50"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="工作单位">
|
||||
<el-form-item prop="unitId">
|
||||
<el-select clearable filterable placeholder="请选择工作单位" style="width: 100%"
|
||||
:disabled="allowFields('unitId')" @change="getUnionName"
|
||||
v-model="formData.unitId">
|
||||
<el-option :key="item.id" :label="item.name" :value="item.id"
|
||||
v-for="item in units"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="所属工会">
|
||||
<el-form-item prop="unionName">
|
||||
<el-input v-model="formData.unionName" disabled placeholder="请输入所属工会"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="所属校区">
|
||||
<el-form-item prop="campus">
|
||||
<dict-select style="width: 100%" placeholder="请选择所属校区" v-model="formData.campus"
|
||||
:disabled="allowFields('campus')" code="USER_CAMPUS"></dict-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="在职状态">
|
||||
<el-form-item prop="userState">
|
||||
<dict-select v-model="formData.userState" code="USER_STATE"
|
||||
:disabled="allowFields('userState')" style="width: 100%"></dict-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="人员类型">
|
||||
<el-form-item prop="personType">
|
||||
<dict-select v-model="formData.personType" code="PERSON_TYPE"
|
||||
:disabled="allowFields('personType')" style="width: 100%"></dict-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item></el-descriptions-item>
|
||||
|
||||
|
||||
|
||||
<el-descriptions-item label="会员状态">
|
||||
<el-form-item prop="member">
|
||||
<el-radio-group v-model="formData.member" size="small">
|
||||
<el-radio border :label="true">会员</el-radio>
|
||||
<el-radio border :label="false">非会员</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="福利会员状态">
|
||||
<el-form-item prop="welfareMember">
|
||||
<el-radio-group v-model="formData.welfareMember" size="small">
|
||||
<el-radio border :label="true">福利会员</el-radio>
|
||||
<el-radio border :label="false">非福利会员</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<template v-if="formData.welfareMember">
|
||||
<el-descriptions-item label="福利联系方式">
|
||||
<el-form-item prop="welfareMember">
|
||||
<el-input v-model="formData.welfareMobile" placeholder="请输入选择福利联系方式" maxlength="11" show-word-limit></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
</template>
|
||||
<template v-else>
|
||||
<el-descriptions-item></el-descriptions-item>
|
||||
</template>
|
||||
|
||||
|
||||
<template v-if="formData.loginname == $store.state.user.loginname">
|
||||
<el-descriptions-item label="家庭主要成员" :span="3">
|
||||
<el-form-item prop="families">
|
||||
<el-table :data="formData.families" border size="small">
|
||||
<el-table-column label="关系" prop="relation">
|
||||
<template slot-scope="{row}">
|
||||
<el-input v-model="row.relation" maxlength="50"
|
||||
placeholder="请输入与本人关系"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="姓名" prop="name">
|
||||
<template slot-scope="{row}">
|
||||
<el-input v-model="row.name" maxlength="50" placeholder="请输入姓名"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="工作单位" prop="unit">
|
||||
<template slot-scope="{row}">
|
||||
<el-input v-model="row.unit" maxlength="100"
|
||||
placeholder="请输入工作单位"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="备注" prop="remark">
|
||||
<template slot-scope="{row}">
|
||||
<el-input v-model="row.remark" maxlength="100" placeholder="请输入备注"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column width="100px">
|
||||
<template slot="header" slot-scope="scope">
|
||||
<el-button type="primary" size="mini" :disabled="allowFields('families')"
|
||||
@click="formData.families.push({})">添加
|
||||
</el-button>
|
||||
</template>
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
type="danger"
|
||||
icon="el-icon-delete"
|
||||
size="mini"
|
||||
:disabled="formData.families.length===0 || allowFields('families')"
|
||||
@click="formData.families.splice(scope.$index,1)"
|
||||
></el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="个人简历" :span="3">
|
||||
<el-form-item prop="personalData">
|
||||
<text-editor v-model="formData.personalData"></text-editor>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
</template>
|
||||
</el-descriptions>
|
||||
</el-form>
|
||||
<el-row type="flex" justify="end" class="mt20">
|
||||
<el-button type="primary" plain @click="onSave">保存</el-button>
|
||||
<el-button type="primary" @click="onSubmit">提交</el-button>
|
||||
</el-row>
|
||||
</el-card>
|
||||
</div>
|
||||
<script>
|
||||
new Vue({
|
||||
el: "#app",
|
||||
store,
|
||||
data() {
|
||||
return {
|
||||
bizId: GetQueryString("bizId"),
|
||||
units: [],
|
||||
unions: [],
|
||||
// 允许变更的字段
|
||||
allowChangeFields: [],
|
||||
formData: {
|
||||
families: [],
|
||||
},
|
||||
formRules: {
|
||||
username: [{required: false, message: "必填", trigger: ["change", "blur"]}],
|
||||
sex: [{required: false, message: "必填", trigger: ["change", "blur"]}],
|
||||
email: [
|
||||
{
|
||||
validator: (rule, value, callback) => {
|
||||
if (!value) {
|
||||
callback();
|
||||
} else if (/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/.test(value)) {
|
||||
callback();
|
||||
} else {
|
||||
callback(new Error("邮箱格式错误"));
|
||||
}
|
||||
},
|
||||
trigger: ["change", "blur"]
|
||||
}
|
||||
],
|
||||
idCard: [
|
||||
{
|
||||
validator: (rule, value, callback) => {
|
||||
if (!value) {
|
||||
// 如果值为空,直接通过校验
|
||||
callback();
|
||||
} else if (/^[1-9]\d{5}(18|19|20)?\d{2}((0[1-9])|(10|11|12))(([0|1|2][0-9])|10|20|30|31)\d{3}(\d|[Xx])$/.test(value)) {
|
||||
// 18位身份证号码格式正确
|
||||
callback();
|
||||
} else if (/^[1-9]\d{7}((0[1-9])|(10|11|12))(([0|1|2][0-9])|10|20|30|31)\d{3}$/.test(value)) {
|
||||
// 15位身份证号码格式正确
|
||||
callback();
|
||||
} else if (/^[1-9]\d{5}(18|19|20)?\d{2}((0[1-9])|(10|11|12))(([0|1|2][0-9])|10|20|30|31)\d{3}$/.test(value)) {
|
||||
// 外国人身份证号码格式正确(18位)
|
||||
callback();
|
||||
} else if (/^[1-9]\d{7}((0[1-9])|(10|11|12))(([0|1|2][0-9])|10|20|30|31)\d{3}$/.test(value)) {
|
||||
// 外国人身份证号码格式正确(15位)
|
||||
callback();
|
||||
} else {
|
||||
// 格式错误,返回错误信息
|
||||
callback(new Error("身份证号码格式错误"));
|
||||
}
|
||||
},
|
||||
trigger: ["change", "blur"]
|
||||
}
|
||||
],
|
||||
mobile: [
|
||||
{
|
||||
validator: (rule, value, callback) => {
|
||||
if (!value) {
|
||||
// 如果值为空,直接通过校验
|
||||
callback();
|
||||
} else if (/^[1][345789][0-9]{9}$/.test(value)) {
|
||||
// 手机号格式正确
|
||||
callback();
|
||||
} else if (/^\d+-\d+$/.test(value) && value.length <= 16) {
|
||||
// 座机号格式正确
|
||||
callback();
|
||||
} else {
|
||||
// 格式错误,返回错误信息
|
||||
callback(new Error(value.includes('-') ? '座机号码格式错误' : '手机号码格式错误'));
|
||||
}
|
||||
},
|
||||
trigger: ["change", "blur"]
|
||||
}
|
||||
]
|
||||
},
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
// 保存
|
||||
onSave() {
|
||||
this.$confirm("您确定保存吗?", "提示", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: "warning"
|
||||
}).then(() => {
|
||||
this.$axios.post('/platform/member/change/submit/save', {data: JSON.stringify(this.formData)}).then(res => {
|
||||
if (res.code === 0) {
|
||||
this.$message.success("保存成功")
|
||||
this.$store.dispatch("pjaxRoute", "/platform/member/change/mine")
|
||||
}
|
||||
})
|
||||
})
|
||||
},
|
||||
|
||||
// 提交
|
||||
onSubmit() {
|
||||
this.$confirm("您确定要提交吗?", "提示", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: "warning"
|
||||
}).then(() => {
|
||||
this.$axios.post('/platform/member/change/submit/submit', {
|
||||
data: JSON.stringify(this.formData)
|
||||
}).then(res => {
|
||||
if (res.code === 0) {
|
||||
this.$message.success("提交成功")
|
||||
this.$store.dispatch("pjaxRoute", "/platform/member/change/mine")
|
||||
}
|
||||
})
|
||||
})
|
||||
},
|
||||
|
||||
// 获取表单工会名称
|
||||
getUnionName(val){
|
||||
const data = this.units.find(v => v.id === val)
|
||||
this.$set(this.formData, 'unionName', data ? data.unionname : '')
|
||||
},
|
||||
// 获取表单可编辑的字段信息
|
||||
allowFields(prop) {
|
||||
return !this.allowChangeFields.map(v => v.code).includes(prop)
|
||||
},
|
||||
// 初始化表单数据
|
||||
async init(userId){
|
||||
if (userId) {
|
||||
this.isShow = false
|
||||
await this.getUserById(userId)
|
||||
} else {
|
||||
this.isShow = true
|
||||
this.user = this.$store.state.user
|
||||
}
|
||||
this.getFormDataValue()
|
||||
this.allowChangeFields = await this.$businessTool.getDictOptions("MEMBER_ALLOW_CHANGES_FIELD")
|
||||
if (this.$auth.hasRoleOr('SYSADMIN, SCHOOL_UNION_MEMBER_ADMIN, SCHOOL_UNION_ADMIN')) {
|
||||
this.units = await this.$businessTool.listUnit()
|
||||
this.unions = await this.$businessTool.listUnion()
|
||||
} else {
|
||||
this.units = await this.$businessTool.listUnit(this.user.union.id)
|
||||
}
|
||||
},
|
||||
// 获取根据userId获取用户信息
|
||||
async getUserById(userId){
|
||||
const resp = await this.$axios.post("/platform/member/change/apply/getUserByIdForMemberChange", { userId })
|
||||
if (resp.code === 0) {
|
||||
this.user = resp.data
|
||||
}
|
||||
},
|
||||
getFormDataValue(){
|
||||
if (this.bizId) {
|
||||
this.$axios.post("/platform/member/change/apply/findChangeById", { id: this.bizId }).then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.formData = res.data
|
||||
this.formData.unionid = this.user.unionid
|
||||
if (this.formData.families) {
|
||||
this.formData.families = JSON.parse(this.formData.families)
|
||||
} else {
|
||||
this.formData.families = []
|
||||
}
|
||||
}
|
||||
})
|
||||
} else {
|
||||
const {
|
||||
id,
|
||||
username,
|
||||
loginname,
|
||||
sex,
|
||||
member,
|
||||
welfareMember,
|
||||
nation,
|
||||
birthday,
|
||||
political,
|
||||
education,
|
||||
academicDegree,
|
||||
position,
|
||||
unit,
|
||||
union,
|
||||
campus,
|
||||
userState,
|
||||
personType,
|
||||
preparedBy,
|
||||
idCard,
|
||||
mobile,
|
||||
email,
|
||||
families,
|
||||
personalData,
|
||||
welfareMobile
|
||||
} = this.user
|
||||
|
||||
this.$set(this.formData, "userId", id)
|
||||
this.$set(this.formData, "username", username)
|
||||
this.$set(this.formData, "loginname", loginname)
|
||||
this.$set(this.formData, "birthday", birthday)
|
||||
this.$set(this.formData, "sex", sex)
|
||||
this.$set(this.formData, "member", member === 1)
|
||||
this.$set(this.formData, "welfareMember", welfareMember === 1)
|
||||
this.$set(this.formData, "idCard", idCard)
|
||||
this.$set(this.formData, "nation", nation)
|
||||
this.$set(this.formData, "political", political)
|
||||
this.$set(this.formData, "position", position)
|
||||
this.$set(this.formData, "education", education)
|
||||
this.$set(this.formData, "academicDegree", academicDegree)
|
||||
this.$set(this.formData, "campus", campus)
|
||||
this.$set(this.formData, "userState", userState)
|
||||
this.$set(this.formData, "personType", personType)
|
||||
this.$set(this.formData, "preparedBy", preparedBy)
|
||||
this.$set(this.formData, "unitName", unit ? unit.name : null)
|
||||
this.$set(this.formData, "unitId", unit ? unit.id : null)
|
||||
this.$set(this.formData, "unionName", union ? union.name : null)
|
||||
this.$set(this.formData, "unionId", union ? union.id : null)
|
||||
|
||||
this.$set(this.formData, "mobile", mobile)
|
||||
this.$set(this.formData, "mobile", welfareMobile)
|
||||
this.$set(this.formData, "email", email)
|
||||
this.$set(this.formData, "families", families ? families : [])
|
||||
this.$set(this.formData, "personalData", personalData)
|
||||
}
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.init()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
+146
-147
@@ -1,151 +1,150 @@
|
||||
const MEMBER_APPLY = {
|
||||
template: `
|
||||
<!-- <flow-start @task_id="(val)=>{this.TASK_ID = val}" @business_id="(val)=>{this.id = val}">-->
|
||||
<el-card shadow="never">
|
||||
<h3 style="color: var(--color-primary)" slot="header">入会申请</h3>
|
||||
<el-form :model="formData" ref="formRef" label-width="0" :rules="formRules" size="small">
|
||||
<el-descriptions :column="3" border>
|
||||
<el-descriptions-item label="姓名">
|
||||
<template v-if="adminOperate">
|
||||
<el-form-item prop="userId">
|
||||
<user-select v-model="formData.userId"
|
||||
api="/platform/member/apply/submit/getApplyUserByUnionOperate"
|
||||
api_input_key_name="keyWord"
|
||||
placeholder="请输入工号或姓名进行查询"
|
||||
:option_label_func="(item)=>{return item.userName + item.loginName + '(' + item.unitName + ')'}"
|
||||
@change="findOne(formData.userId)"
|
||||
style="width: 100%"></user-select>
|
||||
</el-form-item>
|
||||
</template>
|
||||
<template v-else>
|
||||
<el-form-item prop="userName">
|
||||
<el-input :value="formData.userName" readonly size="small"></el-input>
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="性别">
|
||||
<el-form-item prop="sex">
|
||||
<el-radio-group v-model="formData.sex" size="small">
|
||||
<el-radio border label="男"></el-radio>
|
||||
<el-radio border label="女"></el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="身份证号码">
|
||||
<el-form-item prop="idCard">
|
||||
<el-input v-model="formData.idCard" placeholder="请输入身份证号码" maxlength="18"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="民族">
|
||||
<el-form-item prop="nation">
|
||||
<dict-select style="width: 100%" placeholder="请选择民族" v-model="formData.nation" code="USER_NATION"></dict-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="政治面貌">
|
||||
<el-form-item prop="political">
|
||||
<dict-select style="width: 100%" placeholder="请选择政治面貌" v-model="formData.political" code="POLITICAL_STATUS"></dict-select>
|
||||
<!-- <el-input v-model="formData.political" maxlength="100"></el-input>-->
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="学历">
|
||||
<el-form-item prop="education">
|
||||
<dict-select style="width: 100%" placeholder="请选择学历" v-model="formData.education" code="USER_EDUCATION"></dict-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="工作单位">
|
||||
<el-form-item prop="unitId">
|
||||
<el-select clearable filterable placeholder="请选择工作单位" style="width: 100%" :disabled="isAdmin"
|
||||
@change="getUnionName(formData.unitId)" v-model="formData.unitId">
|
||||
<el-option :key="item.id" :label="item.name" :value="item.id"
|
||||
v-for="item in units"></el-option>
|
||||
</el-select>
|
||||
<!--<el-input v-model="formData.unitName" placeholder="请输入工作单位" readonly maxlength="100"></el-input>-->
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="所属工会">
|
||||
<el-form-item prop="unionName">
|
||||
<el-input v-model="formData.unionName" readonly placeholder="请输入所属工会"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="职务">
|
||||
<el-form-item prop="governmentPosition">
|
||||
<el-input v-model="formData.governmentPosition" placeholder="请输入职务" maxlength="50"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="联系电话">
|
||||
<el-form-item prop="mobile">
|
||||
<el-input v-model="formData.mobile" placeholder="请输入联系电话" maxlength="32"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="电子邮箱">
|
||||
<el-form-item prop="email">
|
||||
<el-input v-model="formData.email" placeholder="请输入电子邮箱" maxlength="50"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item></el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="是否愿意加入重大疾病爱心互助会" :span="3">
|
||||
<el-form-item prop="wantJoinLoveMutualAidAssociation">
|
||||
<el-radio-group v-model="formData.wantJoinLoveMutualAidAssociation" size="small">
|
||||
<el-radio :label="true" border>是</el-radio>
|
||||
<el-radio :label="false" border>否</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="家庭主要成员及其工作单位" :span="3">
|
||||
<el-form-item prop="families">
|
||||
<el-table :data="formData.families" border size="small">
|
||||
<el-table-column label="关系" prop="relation">
|
||||
<template slot-scope="{row}">
|
||||
<el-input v-model="row.relation" maxlength="50" placeholder="请输入与本人关系"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="姓名" prop="name">
|
||||
<template slot-scope="{row}">
|
||||
<el-input v-model="row.name" maxlength="50" placeholder="请输入姓名"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="工作单位" prop="unit">
|
||||
<template slot-scope="{row}">
|
||||
<el-input v-model="row.unit" maxlength="100" placeholder="请输入工作单位"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="备注" prop="remark">
|
||||
<template slot-scope="{row}">
|
||||
<el-input v-model="row.remark" maxlength="100" placeholder="请输入备注"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column width="100px">
|
||||
<template slot="header" slot-scope="scope">
|
||||
<el-button type="primary" size="mini" @click="formData.families.push({})">添加</el-button>
|
||||
</template>
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
type="danger"
|
||||
icon="el-icon-delete"
|
||||
size="mini"
|
||||
:disabled="formData.families.length===0"
|
||||
@click="formData.families.splice(scope.$index,1)"
|
||||
></el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="个人简况(简历、获奖情况、有何特长)" :span="3">
|
||||
<el-form-item prop="personalData">
|
||||
<el-input type="textarea" placeholder="请输入个人简况(简历、获奖情况、有何特长)" v-model="formData.personalData" clearable></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-form>
|
||||
</el-card>
|
||||
`,
|
||||
template: /*language=HTML*/ `
|
||||
<el-card shadow="never">
|
||||
<h3 style="color: var(--color-primary)" slot="header">入会申请</h3>
|
||||
<el-form :model="formData" ref="formRef" label-width="0" :rules="formRules" size="small">
|
||||
<el-descriptions :column="3" border>
|
||||
<el-descriptions-item label="姓名">
|
||||
<template v-if="adminOperate">
|
||||
<el-form-item prop="userId">
|
||||
<user-select v-model="formData.userId"
|
||||
api="/platform/member/apply/submit/getApplyUserByUnionOperate"
|
||||
api_input_key_name="keyWord"
|
||||
placeholder="请输入工号或姓名进行查询"
|
||||
:option_label_func="(item)=>{return item.userName + item.loginName + '(' + item.unitName + ')'}"
|
||||
@change="findOne(formData.userId)"
|
||||
style="width: 100%"></user-select>
|
||||
</el-form-item>
|
||||
</template>
|
||||
<template v-else>
|
||||
<el-form-item prop="userName">
|
||||
<el-input :value="formData.userName" readonly size="small"></el-input>
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="性别">
|
||||
<el-form-item prop="sex">
|
||||
<el-radio-group v-model="formData.sex" size="small">
|
||||
<el-radio border label="男性"></el-radio>
|
||||
<el-radio border label="女性"></el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="身份证号码">
|
||||
<el-form-item prop="idCard">
|
||||
<el-input v-model="formData.idCard" placeholder="请输入身份证号码" maxlength="18"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="民族">
|
||||
<el-form-item prop="nation">
|
||||
<dict-select style="width: 100%" placeholder="请选择民族" v-model="formData.nation" code="USER_NATION"></dict-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="政治面貌">
|
||||
<el-form-item prop="political">
|
||||
<dict-select style="width: 100%" placeholder="请选择政治面貌" v-model="formData.political" code="POLITICAL_STATUS"></dict-select>
|
||||
<!-- <el-input v-model="formData.political" maxlength="100"></el-input>-->
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="学历">
|
||||
<el-form-item prop="education">
|
||||
<dict-select style="width: 100%" placeholder="请选择学历" v-model="formData.education" code="USER_EDUCATION"></dict-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="工作单位">
|
||||
<el-form-item prop="unitId">
|
||||
<el-select clearable filterable placeholder="请选择工作单位" style="width: 100%" :disabled="isAdmin"
|
||||
@change="getUnionName(formData.unitId)" v-model="formData.unitId">
|
||||
<el-option :key="item.id" :label="item.name" :value="item.id"
|
||||
v-for="item in units"></el-option>
|
||||
</el-select>
|
||||
<!--<el-input v-model="formData.unitName" placeholder="请输入工作单位" readonly maxlength="100"></el-input>-->
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="所属工会">
|
||||
<el-form-item prop="unionName">
|
||||
<el-input v-model="formData.unionName" readonly placeholder="请输入所属工会"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="职务">
|
||||
<el-form-item prop="governmentPosition">
|
||||
<el-input v-model="formData.governmentPosition" placeholder="请输入职务" maxlength="50"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="联系电话">
|
||||
<el-form-item prop="mobile">
|
||||
<el-input v-model="formData.mobile" placeholder="请输入联系电话" maxlength="32"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="电子邮箱">
|
||||
<el-form-item prop="email">
|
||||
<el-input v-model="formData.email" placeholder="请输入电子邮箱" maxlength="50"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item></el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="是否愿意加入重大疾病爱心互助会" :span="3">
|
||||
<el-form-item prop="wantJoinLoveMutualAidAssociation">
|
||||
<el-radio-group v-model="formData.wantJoinLoveMutualAidAssociation" size="small">
|
||||
<el-radio :label="true" border>是</el-radio>
|
||||
<el-radio :label="false" border>否</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="家庭主要成员及其工作单位" :span="3">
|
||||
<el-form-item prop="families">
|
||||
<el-table :data="formData.families" border size="small">
|
||||
<el-table-column label="关系" prop="relation">
|
||||
<template slot-scope="{row}">
|
||||
<el-input v-model="row.relation" maxlength="50" placeholder="请输入与本人关系"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="姓名" prop="name">
|
||||
<template slot-scope="{row}">
|
||||
<el-input v-model="row.name" maxlength="50" placeholder="请输入姓名"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="工作单位" prop="unit">
|
||||
<template slot-scope="{row}">
|
||||
<el-input v-model="row.unit" maxlength="100" placeholder="请输入工作单位"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="备注" prop="remark">
|
||||
<template slot-scope="{row}">
|
||||
<el-input v-model="row.remark" maxlength="100" placeholder="请输入备注"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column width="100px">
|
||||
<template slot="header" slot-scope="scope">
|
||||
<el-button type="primary" size="mini" @click="formData.families.push({})">添加</el-button>
|
||||
</template>
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
type="danger"
|
||||
icon="el-icon-delete"
|
||||
size="mini"
|
||||
:disabled="formData.families.length===0"
|
||||
@click="formData.families.splice(scope.$index,1)"
|
||||
></el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="个人简况(简历、获奖情况、有何特长)" :span="3">
|
||||
<el-form-item prop="personalData">
|
||||
<el-input type="textarea" placeholder="请输入个人简况(简历、获奖情况、有何特长)" v-model="formData.personalData" clearable></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-form>
|
||||
</el-card>
|
||||
`,
|
||||
props: {
|
||||
adminOperate: { type: Boolean, default: false },
|
||||
id: { type: String },
|
||||
|
||||
-163
@@ -1,163 +0,0 @@
|
||||
const MEMBER_AUDIT_CHANGE_INFO = {
|
||||
template:
|
||||
/*language=HTML*/
|
||||
`
|
||||
<el-card shadow="never">
|
||||
|
||||
<el-tabs v-model="activeName">
|
||||
<el-tab-pane label="基础信息及变更信息" name="basicInfo">
|
||||
<div>
|
||||
<div class="process-title">
|
||||
当前信息
|
||||
</div>
|
||||
<el-descriptions :column="3" border class="descriptions-form">
|
||||
<el-descriptions-item label="姓名">{{ viewData.username }}</el-descriptions-item>
|
||||
<el-descriptions-item label="性别">{{ viewData.sex }}</el-descriptions-item>
|
||||
<el-descriptions-item label="民族">{{ viewData.nation }}</el-descriptions-item>
|
||||
<el-descriptions-item label="在职状态">{{ viewData.userState }}</el-descriptions-item>
|
||||
<template v-if="viewData.retireDate">
|
||||
<el-descriptions-item label="退休时间">{{ $moment(viewData.retireDate).format('YYYY-MM-DD') }}</el-descriptions-item>
|
||||
<el-descriptions-item label="人员类型">{{ viewData.personType }}</el-descriptions-item>
|
||||
</template>
|
||||
<template>
|
||||
<el-descriptions-item label="人员类型">{{ viewData.personType }}</el-descriptions-item>
|
||||
<el-descriptions-item></el-descriptions-item>
|
||||
</template>
|
||||
<el-descriptions-item label="学历">{{ viewData.education }}</el-descriptions-item>
|
||||
<el-descriptions-item label="政治面貌">{{ viewData.political }}</el-descriptions-item>
|
||||
<el-descriptions-item label="婚姻状况">{{ viewData.marriage || '' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="证件号码">{{ viewData.idCard }}</el-descriptions-item>
|
||||
<el-descriptions-item label="联系电话">{{ viewData.mobile }}</el-descriptions-item>
|
||||
<el-descriptions-item label="电子邮箱">{{ viewData.email }}</el-descriptions-item>
|
||||
<el-descriptions-item label="是否会员">{{ viewData.member ? '是' : '否' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="是否福利会员">{{ viewData.welfareMember ? '是' : '否' }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item></el-descriptions-item>
|
||||
<el-descriptions-item label="所属工会、工作部门(学院)及职务" span="3">
|
||||
<template slot="label">工作部门(学院)及岗位</template>
|
||||
<div class="text-left">
|
||||
{{ viewData.unionName + '-' + viewData.unitName + ( viewData.governmentPosition ? ( '('
|
||||
+ viewData.governmentPosition + ')' ) : '' ) }}
|
||||
</div>
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</div>
|
||||
|
||||
<div v-if="changeList && changeList.length > 0">
|
||||
<div class="process-title">
|
||||
{{ '变更记录' + (remark ? ('(变更/审核说明:' + remark + ')') : '') }}
|
||||
</div>
|
||||
<el-table ref="changeTable" :data="changeList" row-key="id" style="width: 100%" border>
|
||||
<el-table-column label="序号" type="index" width="50"></el-table-column>
|
||||
<el-table-column label="变更字段" prop="name"></el-table-column>
|
||||
<el-table-column label="原数据" prop="value">
|
||||
<template slot-scope="scope">
|
||||
<div v-html="scope.row.value"></div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="新数据" prop="newValue">
|
||||
<template slot-scope="scope">
|
||||
<div v-html="scope.row.newValue"></div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
|
||||
</el-tab-pane>
|
||||
|
||||
<el-tab-pane v-if="nodeTasks && nodeTasks.length > 0" label="审核信息" name="audit">
|
||||
<div>
|
||||
<div v-for="nodeTask in nodeTasks" :key="nodeTask.id">
|
||||
<div class="process-title">
|
||||
{{nodeTask.nodeName}}
|
||||
</div>
|
||||
<el-descriptions :column="3" border v-for="task in nodeTask.tasks" :key="task.id"
|
||||
style="margin-bottom: 10px">
|
||||
<el-descriptions-item label="审核人">
|
||||
{{ task.actualOwnerLoginName + '-' + task.actualOwnerUserName}}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="审核时间">{{ task.endOn}}</el-descriptions-item>
|
||||
<el-descriptions-item label="审核结果">
|
||||
<div v-if="task.extVariable">
|
||||
<el-tag type="success" size="mini"
|
||||
v-if="task.extVariable.bpmTaskApprovalType === 'PASS'">同意
|
||||
</el-tag>
|
||||
<el-tag type="danger" size="mini"
|
||||
v-if="task.extVariable.bpmTaskApprovalType === 'BACK'">退回
|
||||
</el-tag>
|
||||
<el-tag type="danger" size="mini"
|
||||
v-if="task.extVariable.bpmTaskApprovalType === 'REJECT'">拒绝
|
||||
</el-tag>
|
||||
</div>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="审核意见" :span="3">
|
||||
{{ task.extVariable.approvalOpinion }}
|
||||
</el-descriptions-item>
|
||||
<template v-if="$auth.hasRoleOr('SYSADMIN') && task.extVariable.approvalRemark">
|
||||
<el-descriptions-item label="审核说明" :span="3">
|
||||
{{ task.extVariable.approvalRemark }}
|
||||
</el-descriptions-item>
|
||||
</template>
|
||||
<el-descriptions-item label="签字" :span="3">
|
||||
<el-image :src="task.extVariable.approvalSignature"
|
||||
v-if="task.extVariable && task.extVariable.approvalSignature"
|
||||
class="signature-image"></el-image>
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</div>
|
||||
</div>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
</el-card>
|
||||
`,
|
||||
props: {
|
||||
is_default_url: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
activeName: "basicInfo",
|
||||
changeList: [],
|
||||
nodeTasks: [],
|
||||
viewData: {},
|
||||
remark: ""
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
findAuditChangeInfo(recordId) {
|
||||
if (!recordId) {
|
||||
return
|
||||
}
|
||||
let url = loc() + "/findAuditChangeInfo"
|
||||
if (this.is_default_url) {
|
||||
url = "/platform/sourcechange/manage/findAuditChangeInfo"
|
||||
}
|
||||
this.$axios.post(url, { recordId: recordId }).then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.changeList = res.data.changeList
|
||||
this.nodeTasks = res.data.nodeTasks
|
||||
this.remark = res.data.remark
|
||||
}
|
||||
})
|
||||
},
|
||||
findUserInfo(userId) {
|
||||
if (!userId) {
|
||||
return
|
||||
}
|
||||
this.$axios.post("/platform/member/apply/common/findOne", { id: userId }).then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.viewData = res.data
|
||||
}
|
||||
})
|
||||
},
|
||||
onOpen(data) {
|
||||
console.log(data)
|
||||
this.findAuditChangeInfo(data.recordId)
|
||||
this.$nextTick(() => {
|
||||
this.findUserInfo(data.userId)
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
-71
@@ -1,71 +0,0 @@
|
||||
const MEMBER_AUDIT_RECORD = {
|
||||
template: `
|
||||
<div class="process-task-record">
|
||||
<template v-if="approvalRecord.length > 0" v-for="item in approvalRecord">
|
||||
<div v-if="item.taskName === '2a9632c6-710f-4d3b-89e4-86566238ce8e'" class="mb25">
|
||||
<div class="process-title">
|
||||
{{item.displayName}}
|
||||
</div>
|
||||
<el-descriptions :column="3" border :key="item.displayName + item.taskParentId">
|
||||
<template v-for="task in item.processTaskVOList">
|
||||
<el-descriptions-item label="姓名">{{task.taskActor?.actorUserName}}</el-descriptions-item>
|
||||
<el-descriptions-item label="工号">{{task.taskActor?.actorId}}</el-descriptions-item>
|
||||
<el-descriptions-item label="填写时间">{{$moment(task.createdAt).format('YYYY-MM-DD HH:mm:ss')}}</el-descriptions-item>
|
||||
</template>
|
||||
</el-descriptions>
|
||||
</div>
|
||||
<div v-else>
|
||||
<div class="process-title">
|
||||
{{item.displayName}}
|
||||
</div>
|
||||
<el-descriptions :column="3" border :key="item.displayName + item.taskParentId">
|
||||
<template v-for="task in item.processTaskVOList">
|
||||
<el-descriptions-item label="姓名">{{task.taskActor?.actorUserName}}</el-descriptions-item>
|
||||
<el-descriptions-item label="工号">{{task.taskActor?.actorId}}</el-descriptions-item>
|
||||
<el-descriptions-item label="审核时间">{{task.finishTime ? task.finishTime : '暂无'}}</el-descriptions-item>
|
||||
<el-descriptions-item label="审核结果">
|
||||
{{Object.keys(task.ext.submitTypeText).length !== 0 ? task.ext.submitTypeText : '暂无'}}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="审核意见" :span="3">{{task.ext.comment ? task.ext.comment : '暂无'}}</el-descriptions-item>
|
||||
</template>
|
||||
</el-descriptions>
|
||||
</div>
|
||||
</template>
|
||||
<el-empty v-else description="暂无审核记录"></el-empty>
|
||||
</div>
|
||||
`,
|
||||
dicts: ["PROCESS_TASK_SUBMIT_TYPE"],
|
||||
props: {
|
||||
id: {
|
||||
type: String,
|
||||
required: true
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
id: {
|
||||
handler: function (val) {
|
||||
if (val) {
|
||||
this.findOne()
|
||||
}
|
||||
},
|
||||
immediate: true
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
approvalRecord: []
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
findOne() {
|
||||
if (!this.id) {
|
||||
return
|
||||
}
|
||||
this.$axios.post("/platform/wf/processCommon/approvalRecord", { businessNo: this.id }).then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.approvalRecord = res.data
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
-202
@@ -1,202 +0,0 @@
|
||||
const MEMBER_AUDIT_TABLE = {
|
||||
template: `
|
||||
<div>
|
||||
<el-card shadow="never">
|
||||
<search @search="doSearch">
|
||||
<search-item label="姓名/工号">
|
||||
<el-input placeholder="请输入内容" clearable v-model="pageForm.searchKeyword"></el-input>
|
||||
</search-item>
|
||||
<search-item label="所属工会">
|
||||
<el-select @change="flushUnits" @clear="flushUnits" clearable filterable
|
||||
placeholder="所属工会" style="width: 100%;" v-model="pageForm.unionId">
|
||||
<el-option :key="item.id" :label="item.name" :value="item.id"
|
||||
v-for="item in unions"></el-option>
|
||||
</el-select>
|
||||
</search-item>
|
||||
<search-item label="所属单位">
|
||||
<el-select clearable filterable placeholder="请选择" style="width: 100%"
|
||||
v-model="pageForm.unitId">
|
||||
<el-option :key="item.id" :label="item.name" :value="item.id"
|
||||
v-for="item in units"></el-option>
|
||||
</el-select>
|
||||
</search-item>
|
||||
<search-item label="在职状态">
|
||||
<dict-select v-model="pageForm.userState" placeholder="在职状态" @change="doSearch"
|
||||
code="USER_STATE"></dict-select>
|
||||
</search-item>
|
||||
<search-item label="聘用方式">
|
||||
<dict-select v-model="pageForm.preparedBy" placeholder="聘用方式" @change="doSearch"
|
||||
code="PREPARED_BY"></dict-select>
|
||||
</search-item>
|
||||
<search-item label="人员类型">
|
||||
<dict-select v-model="pageForm.personType" placeholder="人员类型" @change="doSearch"
|
||||
code="PERSON_TYPE"></dict-select>
|
||||
</search-item>
|
||||
<search-item label="变更类型">
|
||||
<dict-select v-model="pageForm.changeType" placeholder="人员类型" @change="doSearch"
|
||||
code="MEMBER_CHANGE_TYPE"></dict-select>
|
||||
</search-item>
|
||||
</search>
|
||||
</el-card>
|
||||
<el-card shadow="never">
|
||||
<table-tool label="审核列表">
|
||||
<el-radio-group @change="doSearch" class="mr5" size="small" v-model="pageForm.audit">
|
||||
<el-radio-button label="true">已审核</el-radio-button>
|
||||
<el-radio-button label="false">未审核</el-radio-button>
|
||||
</el-radio-group>
|
||||
</table-tool>
|
||||
<el-table :data="tableData" :size="tableSize" @sort-change="pageOrder" ref="table" row-key="id" style="width: 100%">
|
||||
<el-table-column :index="indexMethod" align="center" header-align="center"
|
||||
label="序号" type="index" width="80px"></el-table-column>
|
||||
<el-table-column v-for="column in tableColumns" :label="column.label"
|
||||
:prop="column.prop" :key="column.prop"
|
||||
:sortable="column.sortable" :width="column.width"
|
||||
align="center" header-align="center" min-width="100px"
|
||||
show-overflow-tooltip>
|
||||
<template scope="{row}" v-if="column.prop=='loginname'">
|
||||
<el-link @click="openView(row.userId)" type="primary">{{row.loginname}}</el-link>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column header-align="center" label="变更类型" prop="changeType" show-overflow-tooltip sortable>
|
||||
<template slot-scope="{row}">
|
||||
<span style="color: #0e78c5;cursor: pointer" @click="openChangeView(row)">
|
||||
{{getChangeTypes(row.changeTypes)}}
|
||||
</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column header-align="center" label="变更时间" prop="applyDateTime" show-overflow-tooltip sortable>
|
||||
<template slot-scope="{row}">
|
||||
<span>{{ row.applyDateTime }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" fixed="right" width="200px">
|
||||
<template slot-scope="{row}">
|
||||
<el-button size="mini" type="primary" @click="openChangeView(row)">查看</el-button>
|
||||
<el-button v-if="row.processInstanceTaskStatus==='ACTIVE'
|
||||
&& !(row.processInstanceNodeCode == 10 && row.changeOrigin == 'BRANCH_UNION')"
|
||||
@click="openApproval(row)"
|
||||
size="mini"
|
||||
type="primary">
|
||||
审核
|
||||
</el-button>
|
||||
<el-button v-if="(row.processInstanceTaskStatus==='ACTIVE' || row.processInstanceStatus==='RUNNING')
|
||||
&& [10,40].includes(row.processInstanceNodeCode) && $auth.hasRole('BRANCH_UNION_CHAIRMAN')"
|
||||
@click="openEdit(row)"
|
||||
size="mini"
|
||||
type="primary">
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button
|
||||
v-if="row.processInstanceTaskStatus==='COMPLETE' && !row.nextTaskIsComplete && row.processInstanceNodeCode != 50"
|
||||
@click="openRevoke(row.processInstanceTaskId)"
|
||||
size="mini"
|
||||
type="danger">
|
||||
撤回
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</div>
|
||||
`,
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
pageForm: {
|
||||
audit: false
|
||||
},
|
||||
tableColumns: [
|
||||
{ prop: "loginname", label: "工号", sortable: true },
|
||||
{ prop: "username", label: "姓名", sortable: true },
|
||||
{ prop: "userState", label: "在职状态", sortable: true },
|
||||
{ prop: "preparedBy", label: "聘用方式", sortable: true },
|
||||
{ prop: "personType", label: "人员类型", sortable: true },
|
||||
{ prop: "unionName", label: "所属工会", sortable: true },
|
||||
{ prop: "unitName", label: "所属单位", sortable: true },
|
||||
{ prop: "processInstanceNodeName", label: "当前节点", sortable: true }
|
||||
],
|
||||
unions: [],
|
||||
units: [],
|
||||
changeTypeData: [],
|
||||
auditChangeVisible: false,
|
||||
userId: "",
|
||||
recordId: ""
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
// 审核
|
||||
openApproval(row) {
|
||||
this.$emit("open-approval", row)
|
||||
},
|
||||
// 退回
|
||||
openRevoke(taskId) {
|
||||
this.$confirm("您确定要撤回吗?", "提示", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: "warning"
|
||||
}).then(() => {
|
||||
this.$axios.post(loc() + "/revoke", { taskId }).then((resp) => {
|
||||
this.$message.success(resp.msg)
|
||||
this.doSearch()
|
||||
})
|
||||
})
|
||||
},
|
||||
openEdit(row) {
|
||||
this.$emit("open-edit", row)
|
||||
},
|
||||
openUserChangeInfo(row) {
|
||||
this.$emit("open-change-view", row)
|
||||
},
|
||||
getChangeTypes(changeTypes) {
|
||||
if (changeTypes) {
|
||||
if (!changeTypes || changeTypes.length === 0 || !this.changeTypeData || this.changeTypeData.length === 0) return null
|
||||
return changeTypes
|
||||
.map((v) => {
|
||||
return this.changeTypeData.find((item) => item.code === v).name
|
||||
})
|
||||
.join(",")
|
||||
}
|
||||
return null
|
||||
},
|
||||
openView(userId) {
|
||||
this.$emit("open-view", userId)
|
||||
},
|
||||
openChangeView(row) {
|
||||
this.$emit("open-change-view", row)
|
||||
},
|
||||
pageData() {
|
||||
this.$axios.post(loc() + "/pageData", this.pageForm).then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.tableData = res.data.list
|
||||
this.pageForm.totalCount = res.data.totalCount
|
||||
}
|
||||
})
|
||||
},
|
||||
initData() {
|
||||
if (this.$auth.hasRoleOr(["SYSADMIN", "SCHOOL_UNION_ADMIN"])) {
|
||||
this.$businessTool.listUnion(this.pageForm.unionId).then((data) => {
|
||||
this.unions = data
|
||||
})
|
||||
} else {
|
||||
this.$businessTool.listUnion(this.$store.state.user.union.id).then((data) => {
|
||||
this.unions = data
|
||||
})
|
||||
}
|
||||
this.doSearch()
|
||||
},
|
||||
flushUnits() {
|
||||
this.$set(this.pageForm, "unitId", null)
|
||||
this.units = []
|
||||
if (this.pageForm.unionId) {
|
||||
this.$businessTool.listUnit(this.pageForm.unionId).then((data) => {
|
||||
this.units = data
|
||||
})
|
||||
}
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.initData()
|
||||
this.changeTypeData = await this.$businessTool.getAllDictOptions("MEMBER_CHANGE_TYPE")
|
||||
}
|
||||
}
|
||||
-368
@@ -1,368 +0,0 @@
|
||||
const MEMBER_CHANGE = {
|
||||
template: /*language=HTML*/ `
|
||||
<el-card shadow="never">
|
||||
<h3 style="color: var(--color-primary)" slot="header">信息变更</h3>
|
||||
<el-form :model="formData" ref="formRef" label-width="0" :rules="formRules" size="small">
|
||||
<el-descriptions :column="3" border class="descriptions-form">
|
||||
<el-descriptions-item label="姓名">
|
||||
<el-form-item prop="username">
|
||||
<el-input :value="formData.username" readonly size="small"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="性别">
|
||||
<el-form-item prop="sex">
|
||||
<el-radio-group :disabled="allowFields('sex')" v-model="formData.sex" size="small">
|
||||
<el-radio border label="男"></el-radio>
|
||||
<el-radio border label="女"></el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="身份证号码">
|
||||
<el-form-item prop="idCard">
|
||||
<el-input v-model="formData.idCard" :disabled="allowFields('idCard')" placeholder="请输入身份证号码" maxlength="18"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="民族">
|
||||
<el-form-item prop="nation">
|
||||
<dict-select style="width: 100%" placeholder="请选择民族" :disabled="allowFields('nation')" v-model="formData.nation" code="USER_NATION"></dict-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="政治面貌">
|
||||
<el-form-item prop="political">
|
||||
<dict-select style="width: 100%" placeholder="请选择政治面貌" :disabled="allowFields('political')" v-model="formData.political" code="POLITICAL_STATUS"></dict-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="学历">
|
||||
<el-form-item prop="education">
|
||||
<dict-select style="width: 100%" placeholder="请选择学历" :disabled="allowFields('education')" v-model="formData.education" code="USER_EDUCATION"></dict-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="工作单位">
|
||||
<el-form-item prop="unitId">
|
||||
<el-select clearable filterable placeholder="请选择工作单位" style="width: 100%"
|
||||
@change="getUnionName(formData.unitId)"
|
||||
:disabled="allowFields('unitId')" v-model="formData.unitId">
|
||||
<el-option :key="item.id" :label="item.name" :value="item.id"
|
||||
v-for="item in units"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="所属工会">
|
||||
<el-form-item prop="unionName">
|
||||
<el-input v-model="formData.unionName" readonly placeholder="请输入所属工会"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="职务">
|
||||
<el-form-item prop="governmentPosition">
|
||||
<el-input v-model="formData.governmentPosition" :disabled="allowFields('governmentPosition')" placeholder="请输入职务" maxlength="50"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="在职状态">
|
||||
<el-form-item prop="userState">
|
||||
<dict-select v-model="formData.userState" code="USER_STATE"
|
||||
style="width: 100%"
|
||||
:disabled="allowFields('userState')"></dict-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="聘用方式">
|
||||
<el-form-item prop="preparedBy">
|
||||
<dict-select v-model="formData.preparedBy" code="PREPARED_BY" style="width: 100%"
|
||||
:disabled="allowFields('preparedBy')"></dict-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="人员类型">
|
||||
<el-form-item prop="personType">
|
||||
<dict-select v-model="formData.personType" code="PERSON_TYPE" style="width: 100%"
|
||||
:disabled="allowFields('personType')"></dict-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="进站时间" v-show="formData.preparedBy === '博士后'">
|
||||
<el-form-item prop="postDoctoralJoinDate">
|
||||
<el-date-picker
|
||||
v-model="formData.postDoctoralJoinDate"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="选择日期">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="联系电话">
|
||||
<el-form-item prop="mobile">
|
||||
<el-input v-model="formData.mobile" :disabled="allowFields('mobile')" placeholder="请输入联系电话" maxlength="32"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="电子邮箱">
|
||||
<el-form-item prop="email">
|
||||
<el-input v-model="formData.email" :disabled="allowFields('email')" placeholder="请输入电子邮箱" maxlength="50"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="是否会员">
|
||||
<el-form-item prop="member">
|
||||
<span style="color: #0e9558" v-if="formData.member">是</span>
|
||||
<span style="color: #ac2925" v-else>否</span>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<!-- <el-descriptions-item label="是否福利会员">-->
|
||||
<!-- <el-form-item prop="welfareMember">-->
|
||||
<!-- <span style="color: #0e9558" v-if="formData.welfareMember">是</span>-->
|
||||
<!-- <span style="color: #ac2925" v-else>否</span>-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- </el-descriptions-item>-->
|
||||
<el-descriptions-item></el-descriptions-item>
|
||||
<el-descriptions-item></el-descriptions-item>
|
||||
<!--<el-descriptions-item label="是否重大疾病爱心互助会会员">
|
||||
<el-form-item prop="wantJoinLoveMutualAidAssociation">
|
||||
<span style="color: #0e9558" v-if="formData.wantJoinLoveMutualAidAssociation">是</span>
|
||||
<span style="color: #ac2925" v-else>否</span>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>-->
|
||||
|
||||
<el-descriptions-item label="变更类型" :span="3">
|
||||
<el-form-item prop="changeType">
|
||||
<el-radio-group v-model="formData.changeType">
|
||||
<el-radio v-for="item in changeTypeOptions" border size="small"
|
||||
@click.native.prevent="clickDataType(item.code)"
|
||||
:key="item.id" :label="item.code">{{item.name}}</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<template v-if="formData.changeType">
|
||||
<el-descriptions-item label="会员状态" :span="1.5">
|
||||
<el-form-item prop="changeMember">
|
||||
<el-radio-group v-model="formData.changeMember" size="mini">
|
||||
<el-radio :label="true" border>{{ formData.member ? '保留' : '成为' }}会员</el-radio>
|
||||
<el-radio :label="false" border>取消会员</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="福利会员状态" :span="1.5">
|
||||
<el-form-item prop="changeWelfareMember">
|
||||
<el-radio-group v-model="formData.changeWelfareMember" size="mini">
|
||||
<el-radio :label="true" border>{{ formData.welfareMember ? '保留' : '成为' }}会员</el-radio>
|
||||
<el-radio :label="false" border>取消会员</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
</template>
|
||||
|
||||
<template v-if="formData.loginname == $store.state.user.loginname">
|
||||
<el-descriptions-item label="家庭主要成员及其工作单位" :span="3">
|
||||
<el-form-item prop="families">
|
||||
<el-table :data="formData.families" border size="small">
|
||||
<el-table-column label="关系" prop="relation">
|
||||
<template slot-scope="{row}">
|
||||
<el-input v-model="row.relation" maxlength="50" placeholder="请输入与本人关系"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="姓名" prop="name">
|
||||
<template slot-scope="{row}">
|
||||
<el-input v-model="row.name" maxlength="50" placeholder="请输入姓名"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="工作单位" prop="unit">
|
||||
<template slot-scope="{row}">
|
||||
<el-input v-model="row.unit" maxlength="100" placeholder="请输入工作单位"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="备注" prop="remark">
|
||||
<template slot-scope="{row}">
|
||||
<el-input v-model="row.remark" maxlength="100" placeholder="请输入备注"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column width="100px">
|
||||
<template slot="header" slot-scope="scope">
|
||||
<el-button type="primary" size="mini" :disabled="allowFields('families')"
|
||||
@click="formData.families.push({})">添加</el-button>
|
||||
</template>
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
type="danger"
|
||||
icon="el-icon-delete"
|
||||
size="mini"
|
||||
:disabled="formData.families.length===0 || allowFields('families')"
|
||||
@click="formData.families.splice(scope.$index,1)"
|
||||
></el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="个人简况(简历、获奖情况、有何特长)" :span="3">
|
||||
<el-form-item prop="personalData">
|
||||
<text-editor v-model="formData.personalData"></text-editor>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
</template>
|
||||
|
||||
<el-descriptions-item label="变更说明" :span="3">
|
||||
<el-form-item prop="approvalRemark">
|
||||
<el-input v-model="formData.approvalRemark" type="textarea" :rows="4" placeholder="请输入变更说明"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
</el-descriptions>
|
||||
</el-form>
|
||||
<el-row justify="end" type="flex" class="mt10">
|
||||
<el-button v-if="showClose" @click="$emit('close')">关 闭</el-button>
|
||||
<el-button @click="doSubmit" type="primary">提 交</el-button>
|
||||
</el-row>
|
||||
</el-card>
|
||||
`,
|
||||
props: {
|
||||
id: { type: String, required: true },
|
||||
url: { type: String, required: true },
|
||||
edit: { type: Boolean, default: false },
|
||||
showClose: { type: Boolean, default: false }
|
||||
},
|
||||
store,
|
||||
data() {
|
||||
return {
|
||||
formDisabled: false,
|
||||
formData: {
|
||||
families: [],
|
||||
changeMember: null,
|
||||
changeWelfareMember: null,
|
||||
changeWantJoinLoveMutualAidAssociation: null,
|
||||
verificationProjectId: ""
|
||||
},
|
||||
formRules: {
|
||||
username: [{ required: false, message: "必填", trigger: "change" }],
|
||||
sex: [{ required: false, message: "必填", trigger: "change" }],
|
||||
idCard: [
|
||||
{ required: false, message: "身份证号不能为空", trigger: "blur" },
|
||||
{
|
||||
pattern: /(^\d{6}(18|19|20)\d{2}(0[1-9]|1[012])(0[1-9]|[12]\d|3[01])\d{3}([0-9xX])$)/,
|
||||
message: "身份证号格式不正确",
|
||||
trigger: "blur"
|
||||
}
|
||||
],
|
||||
nation: [{ required: false, message: "必填", trigger: "change" }],
|
||||
political: [{ required: false, message: "必填", trigger: "change" }],
|
||||
education: [{ required: false, message: "必填", trigger: "change" }],
|
||||
unitName: [{ required: false, message: "必填", trigger: "change" }],
|
||||
governmentPosition: [{ required: false, message: "必填", trigger: "change" }],
|
||||
mobile: [
|
||||
{ required: true, message: "手机号不能为空", trigger: "blur" },
|
||||
{ pattern: /^1[3-9]\d{9}$/, message: "手机号格式不正确", trigger: "blur" }
|
||||
],
|
||||
email: [{ required: false, message: "必填", trigger: "change" }],
|
||||
changeWantJoinLoveMutualAidAssociation: [{ required: false, message: "必填", trigger: "change" }],
|
||||
personalData: [{ required: false, message: "必填", trigger: "change" }]
|
||||
},
|
||||
allowChangeFields: [],
|
||||
units: [],
|
||||
changeTypeOptions: []
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
clickDataType(e) {
|
||||
e === this.formData.changeType ? (this.formData.changeType = "") : (this.formData.changeType = e)
|
||||
this.doSetMemberStatus(e)
|
||||
},
|
||||
doSetMemberStatus(name) {
|
||||
this.$set(this.formData, "changeMember", name ? name === "RESTORE" : "")
|
||||
this.$set(this.formData, "changeWelfareMember", name ? name === "RESTORE" : "")
|
||||
this.$set(this.formData, "changeWantJoinLoveMutualAidAssociation", name ? name === "RESTORE" : "")
|
||||
},
|
||||
init() {
|
||||
if (this.id) {
|
||||
this.findOne(this.id, this.edit)
|
||||
}
|
||||
if (!this.allowChangeFields || this.allowChangeFields.length === 0) {
|
||||
this.$businessTool.getDictOptions("MEMBER_ALLOW_CHANGES_FIELD").then((data) => {
|
||||
this.allowChangeFields = data.map((v) => v.code)
|
||||
})
|
||||
}
|
||||
if (this.$auth.hasRoleOr(["SYSADMIN", "SCHOOL_UNION_ADMIN"])) {
|
||||
this.$businessTool.listUnit().then((data) => {
|
||||
this.units = data
|
||||
})
|
||||
} else {
|
||||
this.$businessTool.listUnit(this.$store.state.user.union.id).then((data) => {
|
||||
this.units = data
|
||||
})
|
||||
}
|
||||
this.$businessTool.getDictOptions("MEMBER_CHANGE_TYPE").then((data) => {
|
||||
this.changeTypeOptions = data
|
||||
})
|
||||
},
|
||||
assignmentFormData(data) {
|
||||
const source = data
|
||||
// 特定字段的默认值映射
|
||||
const defaultValues = {
|
||||
families: []
|
||||
}
|
||||
|
||||
const setField = (key) => {
|
||||
// 检查字段是否在 defaultValues 映射中,如果在,则使用其默认值,否则从 source 获取值
|
||||
const value = defaultValues.hasOwnProperty(key) ? defaultValues[key] : source[key]
|
||||
this.$set(this.formData, key, value)
|
||||
}
|
||||
// 遍历表单项并设置值
|
||||
this.$refs.formRef.fields.forEach((formItem) => {
|
||||
setField(formItem.prop)
|
||||
})
|
||||
this.$set(this.formData, "loginname", data.loginname)
|
||||
this.$set(this.formData, "userId", data.id)
|
||||
},
|
||||
findOne(id, isEdit) {
|
||||
this.$axios.post("/platform/member/apply/submit/findOne", { id: id, isEdit: isEdit }).then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.assignmentFormData(res.data)
|
||||
}
|
||||
})
|
||||
},
|
||||
allowFields(prop) {
|
||||
return !this.allowChangeFields.includes(prop)
|
||||
},
|
||||
getUnionName(unitId) {
|
||||
const data = this.units.find((v) => v.id === unitId)
|
||||
this.$set(this.formData, "unionName", data.unionName)
|
||||
},
|
||||
doSubmit() {
|
||||
//是否确认提交?
|
||||
this.$confirm("是否确认提交?提交后将进入审核流程,请仔细核对变更数据是否准确!", "提示", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: "warning"
|
||||
}).then(() => {
|
||||
this.setSubmitUserMemberStatus()
|
||||
if (this.edit) {
|
||||
this.formData.edit = this.edit
|
||||
this.formData.id = this.id
|
||||
}
|
||||
this.$axios
|
||||
.post(this.url, {
|
||||
record: JSON.stringify(this.formData),
|
||||
approvalRemark: this.formData.approvalRemark
|
||||
})
|
||||
.then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.$message.success(res.msg)
|
||||
this.$emit("submit-ready", null)
|
||||
}
|
||||
})
|
||||
})
|
||||
},
|
||||
setSubmitUserMemberStatus() {
|
||||
if (this.formData.changeType) {
|
||||
this.formData.member = this.formData.changeMember
|
||||
this.formData.welfareMember = this.formData.changeWelfareMember
|
||||
}
|
||||
},
|
||||
verificationInit(data) {
|
||||
this.allowChangeFields = data.renewFields
|
||||
this.$set(this.formData, "changeOrigin", data.changeOrigin)
|
||||
this.$set(this.formData, "verificationProjectId", data.verificationProjectId)
|
||||
this.init()
|
||||
}
|
||||
},
|
||||
created() {}
|
||||
}
|
||||
-112
@@ -1,112 +0,0 @@
|
||||
const MEMBER_CHANGE_INFO = {
|
||||
template: /*language=html*/ `
|
||||
<el-card shadow="never">
|
||||
<div>
|
||||
<div class="process-title">
|
||||
当前信息
|
||||
</div>
|
||||
<el-descriptions :column="3" border class="descriptions-form">
|
||||
<el-descriptions-item label="姓名">{{ viewData.username }}</el-descriptions-item>
|
||||
<el-descriptions-item label="性别">{{ viewData.sex }}</el-descriptions-item>
|
||||
<el-descriptions-item label="民族">{{ viewData.nation }}</el-descriptions-item>
|
||||
<el-descriptions-item label="在职状态">{{ viewData.userState }}</el-descriptions-item>
|
||||
<template v-if="viewData.retireDate">
|
||||
<el-descriptions-item label="退休时间">{{ $moment(viewData.retireDate).format('YYYY-MM-DD') }}</el-descriptions-item>
|
||||
<el-descriptions-item label="人员类型">{{ viewData.personType }}</el-descriptions-item>
|
||||
</template>
|
||||
<template>
|
||||
<el-descriptions-item label="人员类型">{{ viewData.personType }}</el-descriptions-item>
|
||||
<el-descriptions-item></el-descriptions-item>
|
||||
</template>
|
||||
<el-descriptions-item label="学历">{{ viewData.education }}</el-descriptions-item>
|
||||
<el-descriptions-item label="政治面貌">{{ viewData.political }}</el-descriptions-item>
|
||||
<el-descriptions-item label="婚姻状况">{{ viewData.marriage || '' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="证件号码" span="2">{{ viewData.idCard }}</el-descriptions-item>
|
||||
<el-descriptions-item label="联系电话">{{ viewData.mobile }}</el-descriptions-item>
|
||||
<el-descriptions-item label="电子邮箱">{{ viewData.email }}</el-descriptions-item>
|
||||
<el-descriptions-item label="是否会员">{{ viewData.member ? '是' : '否' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="是否福利会员">{{ viewData.welfareMember ? '是' : '否' }}</el-descriptions-item>
|
||||
<el-descriptions-item></el-descriptions-item>
|
||||
<el-descriptions-item label="所属工会、工作部门(学院)及职务" span="3">
|
||||
<template slot="label">工作部门(学院)及岗位</template>
|
||||
<div class="text-left">
|
||||
{{ viewData.unionName + '-' + viewData.unitName + ( viewData.governmentPosition ? ( '(' + viewData.governmentPosition + ')' ) : '' ) }}
|
||||
</div>
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</div>
|
||||
|
||||
<div style="margin-top: 20px">
|
||||
<div class="process-title">
|
||||
变更信息
|
||||
</div>
|
||||
<el-tabs tab-position="left" style="height: 300px;" v-model="activeName">
|
||||
<el-tab-pane :key="item.changeTime" v-for="(item, index) in viewList"
|
||||
:name="item.changeTime">
|
||||
<span slot="label" style="display: flex; align-items: center;" v-html="formattedTitle(item.title)">
|
||||
<i class="el-icon-date"></i>
|
||||
</span>
|
||||
|
||||
<div style="padding: 0 30px;display: flex;justify-content: flex-start;align-content: center" v-if="item.remark">
|
||||
<div>
|
||||
<h5 style="color: var(--color-primary);font-weight: bolder">变更/审核说明:</h5>
|
||||
</div>
|
||||
<div style="margin-top: 5px">
|
||||
<span>{{ item.remark }}</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<el-table v-if="item.changeList && item.changeList.length > 0" ref="changeTable" :data="item.changeList" row-key="id"
|
||||
style="width: 95%;margin-left: 20px" border>
|
||||
<el-table-column label="序号" type="index" width="50"></el-table-column>
|
||||
<el-table-column label="变更字段" prop="name"></el-table-column>
|
||||
<el-table-column label="原数据" prop="newValue">
|
||||
<template slot-scope="scope">
|
||||
<div v-html="scope.row.newValue"></div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="新数据" prop="value">
|
||||
<template slot-scope="scope">
|
||||
<div v-html="scope.row.value"></div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<el-empty v-else :image-size="50" description="未获取到变更信息"></el-empty>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
</div>
|
||||
</el-card>
|
||||
`,
|
||||
data() {
|
||||
return {
|
||||
viewList: [],
|
||||
activeName: "",
|
||||
viewData: {}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
formattedTitle(title) {
|
||||
const datePattern = /\(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\)/
|
||||
return title.replace(datePattern, '<span style="display: block;">$&</span>')
|
||||
},
|
||||
onOpen(id, changeTime) {
|
||||
if (!id) {
|
||||
return
|
||||
}
|
||||
this.$axios.post(loc() + "/getChangeInfoByUserId", { userId: id }).then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.viewList = res.data.sort((a, b) => new Date(b.title) - new Date(a.title))
|
||||
this.activeName = changeTime || (this.viewList && this.viewList.length > 0 ? this.viewList[0].changeTime : "")
|
||||
this.findUserInfo(id)
|
||||
}
|
||||
})
|
||||
},
|
||||
findUserInfo(id) {
|
||||
this.$axios.post("/platform/member/apply/common/findOne", { id }).then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.viewData = res.data
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -17,9 +17,9 @@
|
||||
<el-descriptions-item label="入党时间">{{ viewData.joinPartyDate ? $moment(viewData.joinPartyDate).format('YYYY-MM-DD') : null }}</el-descriptions-item>
|
||||
<el-descriptions-item label="来校时间">{{ viewData.arrivalAtSchoolDate ? $moment(viewData.arrivalAtSchoolDate).format('YYYY-MM-DD') : null}}</el-descriptions-item>
|
||||
<el-descriptions-item label="身份类别">{{ viewData.identityType }}</el-descriptions-item>
|
||||
<el-descriptions-item label="在职状态">{{ viewData.userState }}</el-descriptions-item>
|
||||
<el-descriptions-item label="聘用方式">{{ viewData.preparedBy }}</el-descriptions-item>
|
||||
<el-descriptions-item label="教职工类别">{{ viewData.personType }}</el-descriptions-item>
|
||||
<el-descriptions-item label="在职状态">{{ viewData.userState }}</el-descriptions-item>
|
||||
<el-descriptions-item label="预计离退休时间">{{ viewData.retireDate ?
|
||||
$moment(viewData.retireDate).format('YYYY-MM-DD') : null }}
|
||||
</el-descriptions-item>
|
||||
|
||||
-136
@@ -1,136 +0,0 @@
|
||||
const MEMBER_MANAGE_QUERY = {
|
||||
template: `
|
||||
<el-card shadow="never">
|
||||
<search @search="doSearch">
|
||||
<search-item label="姓名/工号">
|
||||
<el-input placeholder="请输入内容" clearable v-model="pageForm.searchKeyword"></el-input>
|
||||
</search-item>
|
||||
<search-item label="所属工会">
|
||||
<el-select @change="flushUnits" @clear="flushUnits" clearable filterable
|
||||
placeholder="所属工会" style="width: 100%;" v-model="pageForm.unionId">
|
||||
<el-option :key="item.id" :label="item.name" :value="item.id"
|
||||
v-for="item in unions"></el-option>
|
||||
</el-select>
|
||||
</search-item>
|
||||
<search-item label="所属单位">
|
||||
<el-select clearable filterable placeholder="请选择" style="width: 100%"
|
||||
v-model="pageForm.unitId">
|
||||
<el-option :key="item.id" :label="item.name" :value="item.id"
|
||||
v-for="item in units"></el-option>
|
||||
</el-select>
|
||||
</search-item>
|
||||
<search-item label="性别">
|
||||
<dict-select v-model="pageForm.sex" placeholder="性别" @change="doSearch"
|
||||
code="USER_SEX"></dict-select>
|
||||
</search-item>
|
||||
<search-item label="在职状态">
|
||||
<dict-select v-model="pageForm.userState" placeholder="在职状态" @change="doSearch"
|
||||
code="USER_STATE"></dict-select>
|
||||
</search-item>
|
||||
<search-item label="聘用方式">
|
||||
<dict-select v-model="pageForm.preparedBy" placeholder="聘用方式" @change="doSearch"
|
||||
code="USER_PREPARED_BY_TYPE"></dict-select>
|
||||
</search-item>
|
||||
<search-item label="人员类型">
|
||||
<dict-select v-model="pageForm.personType" placeholder="人员类型" @change="doSearch"
|
||||
code="USER_PERSON_TYPE"></dict-select>
|
||||
</search-item>
|
||||
<search-item label="更新日期">
|
||||
<el-date-picker :picker-options="pickerOptions" @change="changeDateRangeChange"
|
||||
align="right" end-placeholder="结束日期" format="yyyy-MM-dd"
|
||||
range-separator="-" start-placeholder="开始日期" style="width: 100%"
|
||||
type="datetimerange" v-model="pageForm.changeDateRange"
|
||||
value-format="yyyy-MM-dd"></el-date-picker>
|
||||
</search-item>
|
||||
</search>
|
||||
</el-card>
|
||||
`,
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
pickerOptions: {
|
||||
shortcuts: [
|
||||
{
|
||||
text: "最近一周",
|
||||
onClick(picker) {
|
||||
const end = new Date()
|
||||
const start = new Date()
|
||||
start.setTime(start.getTime() - 3600 * 1000 * 24 * 7)
|
||||
picker.$emit("pick", [start, end])
|
||||
}
|
||||
},
|
||||
{
|
||||
text: "最近一个月",
|
||||
onClick(picker) {
|
||||
const end = new Date()
|
||||
const start = new Date()
|
||||
start.setTime(start.getTime() - 3600 * 1000 * 24 * 30)
|
||||
picker.$emit("pick", [start, end])
|
||||
}
|
||||
},
|
||||
{
|
||||
text: "最近三个月",
|
||||
onClick(picker) {
|
||||
const end = new Date()
|
||||
const start = new Date()
|
||||
start.setTime(start.getTime() - 3600 * 1000 * 24 * 90)
|
||||
picker.$emit("pick", [start, end])
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
pageForm: {
|
||||
unionId: null,
|
||||
unitId: null,
|
||||
sex: null,
|
||||
searchKeyword: null,
|
||||
changed: 2,
|
||||
isMember: 1,
|
||||
isWelfareMember: null,
|
||||
changeTypes: []
|
||||
},
|
||||
unions: [],
|
||||
units: []
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
changeDateRangeChange(val) {
|
||||
if (val && val.length > 0) {
|
||||
this.pageForm.changeDateBefore = val[0]
|
||||
this.pageForm.changeDateEnd = val[1]
|
||||
} else {
|
||||
this.pageForm.changeDateBefore = null
|
||||
this.pageForm.changeDateEnd = null
|
||||
}
|
||||
this.doSearch()
|
||||
},
|
||||
async initData() {
|
||||
if (this.$auth.hasRoleOr(["SYSADMIN", "SCHOOL_UNION_ADMIN"])) {
|
||||
this.unions = await this.$businessTool.listUnion(this.pageForm.unionId)
|
||||
this.units = await this.$businessTool.listUnit()
|
||||
} else {
|
||||
this.unions = await this.$businessTool.listUnion(this.$store.state.user.union.id)
|
||||
this.units = await this.$businessTool.listUnit(this.$store.state.user.union.id)
|
||||
}
|
||||
// this.$businessTool.getDictOptions("MEMBER_CHANGE_TYPE").then((data) => {
|
||||
// this.changeTypes = data
|
||||
// })
|
||||
this.doSearch()
|
||||
},
|
||||
async flushUnits() {
|
||||
this.$set(this.pageForm, "unitId", null)
|
||||
this.units = []
|
||||
if (this.pageForm.unionId) {
|
||||
this.$businessTool.listUnit(this.pageForm.unionId).then((data) => {
|
||||
this.units = data
|
||||
})
|
||||
}
|
||||
},
|
||||
doSearch() {
|
||||
this.$emit("query-ready", this.pageForm)
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.initData()
|
||||
}
|
||||
}
|
||||
-339
@@ -1,339 +0,0 @@
|
||||
<!--#include("../change/memberChangeInfo.js"){}#-->
|
||||
const MEMBER_MANAGE_TABLE = {
|
||||
template: /*language=HTML*/ `
|
||||
<div>
|
||||
<el-card shadow="never" class="mt10">
|
||||
<table-tool label="人员列表">
|
||||
<span class="text-danger">会员:</span>
|
||||
<el-radio-group @change="doSearch" class="mr5" size="small" v-model="pageForm.isMember">
|
||||
<el-radio-button :label="null">全部</el-radio-button>
|
||||
<el-radio-button :label="1">会员</el-radio-button>
|
||||
<el-radio-button :label="0">非会员</el-radio-button>
|
||||
</el-radio-group>
|
||||
|
||||
<!-- <span class="text-danger">福利会员:</span>-->
|
||||
<!-- <el-radio-group @change="doSearch" class="mr5" size="small" v-model="pageForm.isWelfareMember">-->
|
||||
<!-- <el-radio-button :label="null">全部</el-radio-button>-->
|
||||
<!-- <el-radio-button :label="1">福利会员</el-radio-button>-->
|
||||
<!-- <el-radio-button :label="0">非福利会员</el-radio-button>-->
|
||||
<!-- </el-radio-group>-->
|
||||
|
||||
<span class="text-danger">人员异动:</span>
|
||||
<el-radio-group @change="doSearch" class="mr5" size="small"
|
||||
v-model="pageForm.changed">
|
||||
<el-radio-button :label="2">全部</el-radio-button>
|
||||
<el-radio-button :label="1">异动</el-radio-button>
|
||||
<el-radio-button :label="0">未异动</el-radio-button>
|
||||
</el-radio-group>
|
||||
|
||||
<!--<div v-if="pageForm.changed == '1'" class="div-enum">
|
||||
<dict-select v-model="pageForm.USER_CHANGE_TYPE" placeholder="异动类型" @change="doSearch"
|
||||
code="UserType"></dict-select>
|
||||
</div>-->
|
||||
|
||||
<!--<el-button @click="addMember" type="primary" size="small">新增会员</el-button>-->
|
||||
|
||||
<el-button type="primary" size="small" icon="el-icon-printer" @click="exportExcel">导出会员名单
|
||||
</el-button>
|
||||
|
||||
<el-button type="primary" size="small" icon="el-icon-printer" @click="exportNotEqPhoneExcel" v-if="$auth.hasRoleOr('SYSADMIN,SCHOOL_UNION_ADMIN')">导出会员福利号码不一致名单
|
||||
</el-button>
|
||||
|
||||
</table-tool>
|
||||
|
||||
<el-table :data="tableData" :size="tableSize" @sort-change="pageOrder" ref="table" row-key="id"
|
||||
style="width: 100%">
|
||||
<el-table-column :index="indexMethod" align="center" header-align="center"
|
||||
label="序号" type="index" width="80px"></el-table-column>
|
||||
<el-table-column :label="column.label" :prop="column.prop"
|
||||
:sortable="column.sortable" :width="column.width"
|
||||
align="center" header-align="center" min-width="100px"
|
||||
show-overflow-tooltip v-for="column in tableColumns">
|
||||
<template scope="{row}" v-if="column.prop=='loginname'">
|
||||
<el-link @click="openView(row.id)" type="primary">{{row.loginname}}</el-link>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column header-align="center" label="异动信息">
|
||||
<el-table-column align="center" header-align="center" label="更新时间"
|
||||
min-width="145px" prop="changeTime"
|
||||
show-overflow-tooltip sortable>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="异动类型"
|
||||
prop="changeType" show-overflow-tooltip sortable>
|
||||
<template scope="{row}">
|
||||
<span style="color: #0e78c5;cursor: pointer" @click="openUserChangeInfo(row)">
|
||||
{{getChangeTypes(row.changeTypes)}}
|
||||
</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column v-if="$auth.hasRole('BRANCH_UNION_CHAIRMAN')" header-align="center"
|
||||
label="审核状态"
|
||||
prop="auditState">
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column align="center" header-align="center" label="会员" prop="member"
|
||||
show-overflow-tooltip sortable>
|
||||
<template scope="{row}">
|
||||
<span class="text-success" v-if="row.member==1">
|
||||
<i class="fa fa-circle ml5"></i> 是
|
||||
</span>
|
||||
<span class="text-danger" v-else>
|
||||
<i class="fa fa-circle ml5"></i> 否
|
||||
</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<!-- <el-table-column align="center" header-align="center" label="福利会员" prop="member"-->
|
||||
<!-- show-overflow-tooltip sortable>-->
|
||||
<!-- <template scope="{row}">-->
|
||||
<!-- <span class="text-success" v-if="row.welfareMember==1">-->
|
||||
<!-- <i class="fa fa-circle ml5"></i> 是-->
|
||||
<!-- </span>-->
|
||||
<!-- <span class="text-danger" v-else>-->
|
||||
<!-- <i class="fa fa-circle ml5"></i> 否-->
|
||||
<!-- </span>-->
|
||||
<!-- </template>-->
|
||||
<!-- </el-table-column>-->
|
||||
<!--<el-table-column align="center" header-align="center" label="劳模" prop="member"
|
||||
show-overflow-tooltip sortable>
|
||||
<template scope="{row}">
|
||||
<span class="text-success " v-if="row.isModelWorker==1">
|
||||
<i class="fa fa-circle ml5"></i> 是
|
||||
</span>
|
||||
<span class="text-danger" v-else>
|
||||
<i class="fa fa-circle ml5"></i> 否
|
||||
</span>
|
||||
</template>
|
||||
</el-table-column>-->
|
||||
<el-table-column align="center" header-align="center" label="操作"
|
||||
prop="userOnline"
|
||||
width="100px">
|
||||
<template scope="{row}">
|
||||
<el-dropdown @command="dropdownCommand">
|
||||
<el-button plain size="mini">
|
||||
<i class="ti-settings"></i>
|
||||
<span class="ti-angle-down"></span>
|
||||
</el-button>
|
||||
<el-dropdown-menu slot="dropdown">
|
||||
<el-dropdown-item :command="{type:'view',data:row}">
|
||||
查看
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item
|
||||
:command="{type:'change',data:row}"
|
||||
v-if="$auth.hasRoleOr(['SYSADMIN','SCHOOL_UNION_ADMIN','BRANCH_UNION_CHAIRMAN','BRANCH_UNION_CHAIRMAN'])">
|
||||
变更
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item
|
||||
:command="{type:'changeWelfareMobile',data:row}"
|
||||
v-if="$auth.hasRoleOr(['SYSADMIN','SCHOOL_UNION_ADMIN','BRANCH_UNION_CHAIRMAN','BRANCH_UNION_CHAIRMAN'])">
|
||||
修改福利号码
|
||||
</el-dropdown-item>
|
||||
|
||||
<!--<el-dropdown-item
|
||||
:command="{type:'setModelWorker',data:row}"
|
||||
v-if="$auth.hasRoleOr(['SYSADMIN','SCHOOL_UNION_ADMIN','BRANCH_UNION_CHAIRMAN','BRANCH_UNION_CHAIRMAN']) && !row.isModelWorker">
|
||||
设为劳模
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item
|
||||
:command="{type:'cancelModelWorker',data:row}"
|
||||
v-if="$auth.hasRoleOr(['SYSADMIN','SCHOOL_UNION_ADMIN','BRANCH_UNION_CHAIRMAN','BRANCH_UNION_CHAIRMAN']) && row.isModelWorker">
|
||||
取消劳模
|
||||
</el-dropdown-item>-->
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
|
||||
<el-dialog title="变更信息" :visible.sync="changeInfoVisible" width="70%">
|
||||
<member-change-info ref="memberChangeInfoRef"></member-change-info>
|
||||
</el-dialog>
|
||||
|
||||
<el-dialog title="修改福利号码" :visible.sync="changeWelfareMobileVisible" append-to-body width="30%">
|
||||
<el-form :model="welfareFormData" label-width="80px">
|
||||
<el-form-item label="姓名">
|
||||
<el-input :value="welfareFormData.username" disabled></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="工号">
|
||||
<el-input :value="welfareFormData.loginname" disabled></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="手机号">
|
||||
<el-input :value="welfareFormData.mobile" disabled></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="福利号码" prop="welfareMobile"
|
||||
:rules="[
|
||||
{required: true, message: '请输入福利号码', trigger: 'blur'},
|
||||
{
|
||||
pattern: /^1[3-9]\\d{9}$/,
|
||||
message: '请输入有效的手机号码',
|
||||
trigger: 'blur'
|
||||
}]">
|
||||
<el-input v-model="welfareFormData.welfareMobile"></el-input>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button @click="changeWelfareMobileVisible = false">取消</el-button>
|
||||
<el-button type="primary" @click="changeWelfareMobile">确定</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
|
||||
</div>
|
||||
`,
|
||||
mixins: [initTableMixins],
|
||||
components: {
|
||||
"member-change-info": MEMBER_CHANGE_INFO
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
changeTypeData: [],
|
||||
tableColumns: [
|
||||
{ prop: "loginname", label: "工号", sortable: true },
|
||||
{ prop: "username", label: "姓名", sortable: true },
|
||||
{ prop: "sex", label: "性别", sortable: true, width: "100px" },
|
||||
{ prop: "birthday", label: "出生年月", sortable: true },
|
||||
{ prop: "userState", label: "在职状态", sortable: true },
|
||||
{ prop: "preparedBy", label: "聘用方式", sortable: true },
|
||||
{ prop: "postDoctoralJoinDate", label: "进站时间", sortable: true },
|
||||
{ prop: "personType", label: "人员类型", sortable: true },
|
||||
{ prop: "unionName", label: "所属工会", sortable: true },
|
||||
{ prop: "unitName", label: "所属单位", sortable: true }
|
||||
],
|
||||
changeInfoVisible: false,
|
||||
userId: "",
|
||||
pageForm: {
|
||||
isMember: 1,
|
||||
changed: 2
|
||||
},
|
||||
changeWelfareMobileVisible: false,
|
||||
welfareFormData: {}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
dropdownCommand(command) {
|
||||
const { type, data } = command
|
||||
if (type === "view") {
|
||||
this.openView(data.id)
|
||||
} else if (type === "change") {
|
||||
this.openChange(data)
|
||||
} else if (type === "setModelWorker") {
|
||||
this.setModelWorker(data.id)
|
||||
} else if (type === "cancelModelWorker") {
|
||||
this.cancelModelWorker(data.id)
|
||||
} else if (type === "changeWelfareMobile") {
|
||||
this.welfareFormData = {
|
||||
id: data.id,
|
||||
username: data.username,
|
||||
loginname: data.loginname,
|
||||
mobile: data.mobile,
|
||||
welfareMobile: data.welfareMobile
|
||||
}
|
||||
this.changeWelfareMobileVisible = true
|
||||
}
|
||||
},
|
||||
|
||||
changeWelfareMobile() {
|
||||
this.$confirm("确定要将" + this.welfareFormData.username + "的福利号码修改为:" + this.welfareFormData.welfareMobile + "吗?", "提示", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: "warning"
|
||||
})
|
||||
.then(() => {
|
||||
this.$axios.post("/platform/member/branchUnion/manage/list/changeWelfareMobile", this.welfareFormData).then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.$message.success(res.msg)
|
||||
this.$emit("refresh-table")
|
||||
this.changeWelfareMobileVisible = false
|
||||
}
|
||||
})
|
||||
})
|
||||
},
|
||||
|
||||
setModelWorker(userId) {
|
||||
this.$confirm("确定要将此教工设置为劳模吗?", "提示", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: "warning"
|
||||
})
|
||||
.then(() => {
|
||||
this.$axios.post("/platform/member/modelWorker/manage/setModelWorker", { userId: userId }).then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.$message.success(res.msg)
|
||||
this.$emit("refresh-table")
|
||||
} else {
|
||||
this.$message.error(res.msg)
|
||||
}
|
||||
})
|
||||
})
|
||||
},
|
||||
cancelModelWorker(userId) {
|
||||
this.$confirm("确定要取消此教工的劳模身份码?", "提示", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: "warning"
|
||||
})
|
||||
.then(() => {
|
||||
this.$axios.post("/platform/member/modelWorker/manage/cancelModelWorker", { userIds: JSON.stringify([userId]) })
|
||||
.then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.$message.success(res.msg)
|
||||
this.$emit("refresh-table")
|
||||
} else {
|
||||
this.$message.error(res.msg)
|
||||
}
|
||||
})
|
||||
})
|
||||
},
|
||||
openChange(data) {
|
||||
this.$emit("change-member", { id: data.id, username: data.username })
|
||||
},
|
||||
openView(id) {
|
||||
this.$emit("view-member", id)
|
||||
},
|
||||
addMember() {
|
||||
this.$emit("add-member")
|
||||
},
|
||||
openUserChangeInfo(row) {
|
||||
this.changeInfoVisible = true
|
||||
this.$nextTick(() => {
|
||||
this.$refs.memberChangeInfoRef.onOpen(row.id, null)
|
||||
})
|
||||
},
|
||||
getChangeTypes(changeTypes) {
|
||||
if (changeTypes) {
|
||||
const c = JSON.parse(changeTypes)
|
||||
return c
|
||||
.map((v) => {
|
||||
return this.changeTypeData.find((item) => item.code === v).name
|
||||
})
|
||||
.join(",")
|
||||
}
|
||||
return null
|
||||
},
|
||||
pageData() {
|
||||
this.$axios.post(loc() + "/pageData", this.pageForm).then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.tableData = res.data.list
|
||||
this.pageForm.totalCount = res.data.totalCount
|
||||
this.$emit("refresh", this.pageForm)
|
||||
}
|
||||
})
|
||||
},
|
||||
exportExcel() {
|
||||
const pageForm = clone(this.pageForm)
|
||||
this.$downLoad(loc() + "/doExport", pageForm)
|
||||
},
|
||||
exportNotEqPhoneExcel(){
|
||||
const pageForm = clone(this.pageForm)
|
||||
this.$downLoad(loc() + "/doExportNotEqPhone", pageForm)
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.$businessTool.getAllDictOptions("MEMBER_CHANGE_TYPE").then((res) => {
|
||||
this.changeTypeData = res
|
||||
})
|
||||
}
|
||||
}
|
||||
-143
@@ -1,143 +0,0 @@
|
||||
const MEMBER_RECORD = {
|
||||
template: `
|
||||
<div>
|
||||
<el-card shadow="never">
|
||||
<search @search="doSearch">
|
||||
<search-item label="姓名/工号">
|
||||
<el-input placeholder="请输入内容" clearable v-model="pageForm.searchKeyword"></el-input>
|
||||
</search-item>
|
||||
<search-item label="所属工会">
|
||||
<el-select @change="flushUnits" @clear="flushUnits" clearable filterable
|
||||
placeholder="所属工会" style="width: 100%;" v-model="pageForm.unionId">
|
||||
<el-option :key="item.id" :label="item.name" :value="item.id"
|
||||
v-for="item in unions"></el-option>
|
||||
</el-select>
|
||||
</search-item>
|
||||
<search-item label="所属单位">
|
||||
<el-select clearable filterable placeholder="请选择" style="width: 100%"
|
||||
v-model="pageForm.unitId">
|
||||
<el-option :key="item.id" :label="item.name" :value="item.id"
|
||||
v-for="item in units"></el-option>
|
||||
</el-select>
|
||||
</search-item>
|
||||
<search-item label="在职状态">
|
||||
<dict-select v-model="pageForm.userState" placeholder="在职状态" @change="doSearch"
|
||||
code="USER_STATE"></dict-select>
|
||||
</search-item>
|
||||
<search-item label="人员类型">
|
||||
<dict-select v-model="pageForm.personType" placeholder="人员类型" @change="doSearch"
|
||||
code="PERSON_TYPE"></dict-select>
|
||||
</search-item>
|
||||
<search-item label="聘用方式">
|
||||
<dict-select v-model="pageForm.preparedBy" placeholder="聘用方式" @change="doSearch"
|
||||
code="PREPARED_BY"></dict-select>
|
||||
</search-item>
|
||||
<search-item label="变更类型">
|
||||
<dict-select v-model="pageForm.changeType" placeholder="变更类型" @change="doSearch"
|
||||
code="MEMBER_CHANGE_TYPE"></dict-select>
|
||||
</search-item>
|
||||
</search>
|
||||
</el-card>
|
||||
|
||||
<el-card shadow="never">
|
||||
<table-tool label="变更列表"></table-tool>
|
||||
<el-table :data="tableData" :size="tableSize" @sort-change="pageOrder"
|
||||
class="vi-table" ref="table" row-key="id" style="width: 100%">
|
||||
<el-table-column :index="indexMethod" align="center" header-align="center"
|
||||
label="序号" type="index" width="80px"></el-table-column>
|
||||
<el-table-column :label="column.label" :prop="column.prop"
|
||||
:sortable="column.sortable" :width="column.width"
|
||||
align="center" header-align="center" min-width="100px"
|
||||
show-overflow-tooltip v-for="column in tableColumns">
|
||||
<template scope="{row}" v-if="column.prop=='loginname'">
|
||||
<el-link @click="openView(row.userId)" type="primary">{{row.loginname}}</el-link>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column header-align="center" label="异动信息">
|
||||
<el-table-column align="center" header-align="center" label="更新时间"
|
||||
min-width="145px" prop="changeTime"
|
||||
show-overflow-tooltip sortable>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="异动类型"
|
||||
prop="changeType" show-overflow-tooltip sortable>
|
||||
<template scope="{row}">
|
||||
<span style="color: var(--color-primary);cursor: pointer" @click="openUserChangeInfo(row)">
|
||||
{{getChangeTypes(row.changeTypes)}}
|
||||
</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</div>
|
||||
`,
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
userId: "",
|
||||
recordId: "",
|
||||
tableColumns: [
|
||||
{ prop: "loginname", label: "工号" },
|
||||
{ prop: "username", label: "姓名" },
|
||||
{ prop: "sex", label: "性别", sortable: true, width: "100px" },
|
||||
{ prop: "birthday", label: "出生年月", sortable: true },
|
||||
{ prop: "personType", label: "人员类型", sortable: true },
|
||||
{ prop: "userState", label: "在职状态", sortable: true },
|
||||
{ prop: "unionName", label: "所属工会", sortable: true },
|
||||
{ prop: "unitName", label: "所属单位", sortable: true },
|
||||
{ prop: "remark", label: "变更说明", sortable: true }
|
||||
],
|
||||
unions: [],
|
||||
units: [],
|
||||
changeTypeData: [],
|
||||
changeInfoVisible: false,
|
||||
changeTime: ""
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
openUserChangeInfo(row) {
|
||||
this.$emit("open-change-info", row)
|
||||
},
|
||||
getChangeTypes(changeTypes) {
|
||||
if (changeTypes) {
|
||||
const c = JSON.parse(changeTypes)
|
||||
if (!c || c.length === 0 || !this.changeTypeData || this.changeTypeData.length === 0) return null
|
||||
return c
|
||||
.map((v) => {
|
||||
return this.changeTypeData.find((item) => item.code === v).name
|
||||
})
|
||||
.join(",")
|
||||
}
|
||||
return null
|
||||
},
|
||||
openView(userId) {
|
||||
this.$emit("open-view", userId)
|
||||
},
|
||||
async initData() {
|
||||
if (this.$auth.hasRoleOr(["SYSADMIN", "SCHOOL_UNION_ADMIN"])) {
|
||||
this.unions = await this.$businessTool.listUnion(this.pageForm.unionId)
|
||||
this.units = await this.$businessTool.listUnit()
|
||||
} else {
|
||||
this.unions = await this.$businessTool.listUnion(this.$store.state.user.union.id)
|
||||
this.units = await this.$businessTool.listUnit(this.$store.state.user.union.id)
|
||||
}
|
||||
this.pageData()
|
||||
},
|
||||
async flushUnits() {
|
||||
this.$set(this.pageForm, "unitId", null)
|
||||
this.units = []
|
||||
if (this.pageForm.unionId) {
|
||||
this.$businessTool.listUnit(this.pageForm.unionId).then((data) => {
|
||||
this.units = data
|
||||
})
|
||||
}
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.pageData()
|
||||
this.$businessTool.getAllDictOptions("MEMBER_CHANGE_TYPE").then((res) => {
|
||||
this.changeTypeData = res
|
||||
})
|
||||
}
|
||||
}
|
||||
-236
@@ -1,236 +0,0 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<el-card shadow="never">
|
||||
<search @search="doSearch">
|
||||
<search-item label="姓名/工号">
|
||||
<el-input placeholder="请输入内容" clearable v-model="pageForm.searchKeyword"></el-input>
|
||||
</search-item>
|
||||
<search-item label="所属工会">
|
||||
<el-select @change="flushUnits" @clear="flushUnits" clearable filterable
|
||||
placeholder="所属工会" style="width: 100%;" v-model="pageForm.unionId">
|
||||
<el-option :key="item.id" :label="item.name" :value="item.id"
|
||||
v-for="item in unions"></el-option>
|
||||
</el-select>
|
||||
</search-item>
|
||||
<search-item label="所属单位">
|
||||
<el-select clearable filterable placeholder="请选择" style="width: 100%"
|
||||
v-model="pageForm.unitId">
|
||||
<el-option :key="item.id" :label="item.name" :value="item.id"
|
||||
v-for="item in units"></el-option>
|
||||
</el-select>
|
||||
</search-item>
|
||||
<search-item label="在职状态">
|
||||
<dict-select v-model="pageForm.userState" placeholder="在职状态" @change="doSearch"
|
||||
code="USER_STATE"></dict-select>
|
||||
</search-item>
|
||||
<search-item label="人员类型">
|
||||
<dict-select v-model="pageForm.personType" placeholder="人员类型" @change="doSearch"
|
||||
code="PERSON_TYPE"></dict-select>
|
||||
</search-item>
|
||||
</search>
|
||||
</el-card>
|
||||
<el-card shadow="never">
|
||||
<table-tool label="劳模列表">
|
||||
<el-select v-model="pageForm.memberState" placeholder="会员筛选" clearable
|
||||
style="width: 120px" @change="doSearch" class="mr10" size="small">
|
||||
<el-option label="全部会员" value="all"></el-option>
|
||||
<el-option label="会员" value="true"></el-option>
|
||||
<el-option label="非会员" value="false"></el-option>
|
||||
</el-select>
|
||||
<el-select v-model="pageForm.welfareMemberState" placeholder="福利会员筛选" clearable
|
||||
style="width: 120px" @change="doSearch" class="mr10" size="small">
|
||||
<el-option label="全部福利会员" value="all"></el-option>
|
||||
<el-option label="福利会员" value="true"></el-option>
|
||||
<el-option label="非福利会员" value="false"></el-option>
|
||||
</el-select>
|
||||
|
||||
<el-button size="small" @click="batchDelete" type="danger">
|
||||
批量取消劳模
|
||||
</el-button>
|
||||
<!--<el-button size="small" @click="openImport" type="primary">
|
||||
导入
|
||||
</el-button>-->
|
||||
<el-button size="small" @click="doExport" type="primary">
|
||||
导出
|
||||
</el-button>
|
||||
</table-tool>
|
||||
|
||||
<el-table ref="table" :data="tableData" style="width: 100%" row-key="id" @sort-change="pageOrder"
|
||||
:size="tableSize" @selection-change="tableHandleSelectionChange">
|
||||
<el-table-column type="selection" :reserve-selection="true"></el-table-column>
|
||||
<el-table-column align="center" header-align="center" type="index"
|
||||
:index="indexMethod" label="序号"
|
||||
width="80px"></el-table-column>
|
||||
<el-table-column
|
||||
align="center"
|
||||
header-align="center"
|
||||
v-for="column in tableColumns"
|
||||
show-overflow-tooltip
|
||||
:label="column.label"
|
||||
:prop="column.prop"
|
||||
:sortable="column.sortable"
|
||||
>
|
||||
<template v-if="column.prop==='member'" scope="{row}">
|
||||
<span v-if="row.member==1" class="text-success ">
|
||||
<i class="fa fa-circle ml5"></i> 是
|
||||
</span>
|
||||
<span v-else class="text-danger">
|
||||
<i class="fa fa-circle ml5"></i> 否
|
||||
</span>
|
||||
</template>
|
||||
<template v-else-if="column.prop==='welfareMember'" scope="{row}">
|
||||
<span v-if="row.welfareMember==1" class="text-success ">
|
||||
<i class="fa fa-circle ml5"></i> 是
|
||||
</span>
|
||||
<span v-else class="text-danger">
|
||||
<i class="fa fa-circle ml5"></i> 否
|
||||
</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column prop="userOnline" align="center" header-align="center"
|
||||
label="操作"
|
||||
width="180px">
|
||||
<template scope="{row}">
|
||||
<el-button size="mini" type="primary" @click="openView(row.id)">查看</el-button>
|
||||
<el-button size="mini" type="danger" @click="doDelete(row.id)">取消劳模</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
|
||||
<template #view>
|
||||
<member-info ref="memberInfoRef" :id="userId"></member-info>
|
||||
</template>
|
||||
</guava>
|
||||
</div>
|
||||
<script>
|
||||
|
||||
<!--#include("../../common/info/memberInfo.js"){}#-->
|
||||
|
||||
new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data: {
|
||||
pageForm: {
|
||||
searchKeyword: '',
|
||||
unionId: '',
|
||||
unitId: '',
|
||||
threeUnitId: '',
|
||||
unionGroupId: '',
|
||||
personType: '',
|
||||
userState: '',
|
||||
memberState: '',
|
||||
welfareMemberState: ''
|
||||
},
|
||||
unions: [],
|
||||
units: [],
|
||||
tableColumns: [
|
||||
{prop: 'loginname', label: '工号'},
|
||||
{prop: 'username', label: '姓名'},
|
||||
{prop: 'sex', label: '性别'},
|
||||
{prop: 'mobile', label: '联系电话'},
|
||||
{prop: 'personType', label: '人员类型'},
|
||||
{prop: 'userState', label: '在职状态'},
|
||||
{prop: 'unionName', label: '所属工会'},
|
||||
{prop: 'unitName', label: '所属单位'},
|
||||
{prop: 'member', label: '是否会员'},
|
||||
{prop: 'welfareMember', label: '是否福利员'},
|
||||
],
|
||||
|
||||
checkUsers: [],
|
||||
userId: '',
|
||||
},
|
||||
components: {
|
||||
"member-info": MEMBER_INFO,
|
||||
},
|
||||
methods: {
|
||||
openView(userId) {
|
||||
this.userId = userId
|
||||
this.$refs.guava.view()
|
||||
this.$nextTick(() => {
|
||||
this.$refs.memberInfoRef.findOne()
|
||||
})
|
||||
},
|
||||
openImport() {
|
||||
|
||||
},
|
||||
doExport() {
|
||||
this.$downLoad('/platform/member/modelWorker/manage/doExport', this.pageForm)
|
||||
},
|
||||
tableHandleSelectionChange(val) {
|
||||
this.checkUsers = val;
|
||||
},
|
||||
batchDelete() {
|
||||
if (!this.checkUsers.length) {
|
||||
this.$message.warning("请先勾选需要取消劳模身份的数据!")
|
||||
return
|
||||
}
|
||||
|
||||
this.$confirm('您确定要取消这些教工的劳模身份吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
const userIds = this.checkUsers.map(obj => obj.id);
|
||||
this.$axios.post('/platform/member/modelWorker/manage/cancelModelWorker', {userIds: JSON.stringify(userIds)} )
|
||||
.then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.pageData()
|
||||
this.$refs.table.clearSelection();
|
||||
this.$message.success(res.msg)
|
||||
} else {
|
||||
this.$message.error(res.msg)
|
||||
}
|
||||
})
|
||||
})
|
||||
},
|
||||
doDelete(userId) {
|
||||
this.$confirm('您确定要取消该教工的劳模身份吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
this.checkUsers = []
|
||||
this.checkUsers.push(userId)
|
||||
this.$axios.post('/platform/member/modelWorker/manage/cancelModelWorker', {userIds: JSON.stringify(this.checkUsers)})
|
||||
.then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.pageData()
|
||||
this.$message.success(res.msg)
|
||||
} else {
|
||||
this.$message.error(res.msg)
|
||||
}
|
||||
})
|
||||
})
|
||||
},
|
||||
initData() {
|
||||
const resp = this.$auth.hasRoleOr(["SYSADMIN", "SCHOOL_UNION_ADMIN"]) ? this.pageForm.unionId : this.$store.state.user.union.id
|
||||
this.$businessTool.listUnion(resp).then(data => {
|
||||
this.unions = data
|
||||
})
|
||||
this.pageData()
|
||||
},
|
||||
flushUnits() {
|
||||
this.$set(this.pageForm, "unitId", null)
|
||||
this.units = []
|
||||
if (this.pageForm.unionId) {
|
||||
this.$businessTool.listUnit(this.pageForm.unionId).then(data => {
|
||||
this.units = data
|
||||
})
|
||||
}
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.initData()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -1,104 +0,0 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<member-audit-table ref="tableRef" @open-change-view="openChangeInfo" @open-approval="openApproval"
|
||||
@open-view="openView"></member-audit-table>
|
||||
|
||||
<template #view>
|
||||
<member-info ref="memberInfoRef"></member-info>
|
||||
</template>
|
||||
|
||||
<template #public>
|
||||
<member-audit-change-info ref="memberAuditChangeInfoViewRef"></member-audit-change-info>
|
||||
<div v-if="showApprovalForm">
|
||||
<el-form :model="formData" ref="approvalFormRef" label-position="left" label-width="80px">
|
||||
<el-form-item label="审核意见" prop="approvalOpinion" :rules="[{required:true,message:'必填',trigger:['change','blur']}]">
|
||||
<user-opinion-textarea v-model="formData.approvalOpinion"></user-opinion-textarea>
|
||||
</el-form-item>
|
||||
<el-form-item label="审核说明" prop="approvalRemark">
|
||||
<el-input v-model="formData.approvalRemark" type="textarea" :rows="4" placeholder="请输入审核说明"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="电子签名" prop="approvalSignature" :rules="[{required:false,message:'必填',trigger:['change','blur']}]">
|
||||
<pc-signature v-model="formData.approvalSignature"></pc-signature>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<el-row type="flex" justify="end">
|
||||
<el-button plain @click="$refs.guava.index()">取消</el-button>
|
||||
<el-button type="danger" @click="doApproval('BACK')">退回重新填写</el-button>
|
||||
<el-button type="danger" @click="doApproval('REJECT')">拒绝</el-button>
|
||||
<el-button type="primary" @click="doApproval('PASS')">同意</el-button>
|
||||
</el-row>
|
||||
</div>
|
||||
</template>
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
|
||||
<!--#include("../../common/audit/memberAuditTable.js"){}#-->
|
||||
<!--#include("../../common/audit/memberAuditRecord.js"){}#-->
|
||||
<!--#include("../../common/audit/memberAuditChangeInfo.js"){}#-->
|
||||
<!--#include("../../common/info/memberInfo.js"){}#-->
|
||||
|
||||
new Vue({
|
||||
el: "#app",
|
||||
store,
|
||||
mixins: [initTableMixins],
|
||||
data: {
|
||||
showApprovalForm: false,
|
||||
},
|
||||
components: {
|
||||
"member-audit-table": MEMBER_AUDIT_TABLE,
|
||||
"member-audit-record": MEMBER_AUDIT_RECORD,
|
||||
"member-audit-change-info": MEMBER_AUDIT_CHANGE_INFO,
|
||||
"member-info": MEMBER_INFO,
|
||||
},
|
||||
methods: {
|
||||
doApproval(approvalType) {
|
||||
this.formData.bpmTaskApprovalType = approvalType
|
||||
this.$refs.approvalFormRef.validate((valid) => {
|
||||
if (valid) {
|
||||
this.$axios
|
||||
.post(loc() + "/approval", {
|
||||
approval: JSON.stringify(this.formData)
|
||||
})
|
||||
.then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.$refs.guava.index()
|
||||
this.$message.success(res.msg)
|
||||
this.doSearch()
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
},
|
||||
openApproval(data) {
|
||||
this.$refs.guava.public(() => {
|
||||
this.showApprovalForm = true
|
||||
this.formData = data.approvalParam
|
||||
this.$refs.memberAuditChangeInfoViewRef.onOpen({recordId: data.id, userId: data.userId})
|
||||
})
|
||||
},
|
||||
openView(userId){
|
||||
this.$refs.guava.view(() => {
|
||||
this.$refs.memberInfoRef.onOpen(userId)
|
||||
})
|
||||
},
|
||||
openChangeInfo(data){
|
||||
this.$refs.guava.public(() => {
|
||||
this.showApprovalForm = false
|
||||
this.$refs.memberAuditChangeInfoViewRef.onOpen({recordId: data.id, userId: data.userId})
|
||||
})
|
||||
},
|
||||
doSearch() {
|
||||
this.$refs.tableRef.doSearch()
|
||||
},
|
||||
}
|
||||
});
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -1,93 +0,0 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
|
||||
<member-manage-query ref="queryRef" @query-ready="onQueryReady"></member-manage-query>
|
||||
<member-manage-table ref="tableRef" v-if="isQueryReady" @refresh="tableReady" @change-member="changeMember"
|
||||
@view-member="viewMember" @add-member="addMember" @refresh-table="changeSuccess"></member-manage-table>
|
||||
|
||||
<template #view>
|
||||
<member-info ref="memberInfoRef"></member-info>
|
||||
</template>
|
||||
|
||||
<template #edit>
|
||||
<member-apply :admin-operate="true"></member-apply>
|
||||
</template>
|
||||
|
||||
<template #public>
|
||||
<member-change :id="id" :url="url" ref="memberChangeRef"
|
||||
@submit-ready="changeSuccess"></member-change>
|
||||
</template>
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
|
||||
<!--#include("../../common/manage/memberManageQuery.js"){}#-->
|
||||
<!--#include("../../common/manage/memberManageTable.js"){}#-->
|
||||
<!--#include("../../common/info/memberInfo.js"){}#-->
|
||||
<!--#include("../../common/apply/memberApply.js"){}#-->
|
||||
<!--#include("../../common/change/memberChange.js"){}#-->
|
||||
|
||||
const vue = new Vue({
|
||||
el: "#app",
|
||||
store,
|
||||
mixins: [initTableMixins],
|
||||
data: {
|
||||
id: '',
|
||||
url:'',
|
||||
username: '',
|
||||
isQueryReady: false,
|
||||
hasShownMessage: false
|
||||
},
|
||||
components: {
|
||||
"member-manage-query": MEMBER_MANAGE_QUERY,
|
||||
"member-manage-table": MEMBER_MANAGE_TABLE,
|
||||
"member-info": MEMBER_INFO,
|
||||
"member-apply": MEMBER_APPLY,
|
||||
"member-change": MEMBER_CHANGE,
|
||||
},
|
||||
methods: {
|
||||
changeMember(data){
|
||||
this.id = data.id
|
||||
this.url = '/platform/member/schoolUnion/manage/list/generalMemberChange'
|
||||
this.$refs.guava.public()
|
||||
this.$nextTick(()=>{
|
||||
this.$refs.memberChangeRef.init()
|
||||
})
|
||||
},
|
||||
viewMember(val){
|
||||
this.$refs.guava.view(() => {
|
||||
this.$refs.memberInfoRef.onOpen(val)
|
||||
})
|
||||
},
|
||||
addMember(){
|
||||
this.$refs.guava.edit()
|
||||
},
|
||||
onQueryReady(pageForm) {
|
||||
this.isQueryReady = true;
|
||||
this.$nextTick(() => {
|
||||
if (this.$refs.tableRef) {
|
||||
this.$refs.tableRef.pageForm = pageForm
|
||||
this.$refs.tableRef.pageData();
|
||||
}
|
||||
})
|
||||
},
|
||||
tableReady(pageForm){
|
||||
this.$refs.queryRef.pageForm = pageForm
|
||||
},
|
||||
changeSuccess(){
|
||||
this.$refs.guava.index(() => {
|
||||
this.$refs.tableRef.pageData()
|
||||
})
|
||||
}
|
||||
},
|
||||
created() {
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -1,51 +0,0 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<member-record @open-view="openView" @open-change-info="openChangeInfo"></member-record>
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<member-info ref="memberInfoRef"></member-info>
|
||||
</template>
|
||||
|
||||
<template #public>
|
||||
<member-audit-change-info ref="memberAuditChangeInfoRef" is_default_url></member-audit-change-info>
|
||||
</template>
|
||||
</guava>
|
||||
</div>
|
||||
<script>
|
||||
<!--#include("../../common/record/memberRecord.js"){}#-->
|
||||
<!--#include("../../common/info/memberInfo.js"){}#-->
|
||||
<!--#include("../../common/audit/memberAuditChangeInfo.js"){}#-->
|
||||
new Vue({
|
||||
el: "#app",
|
||||
mixins: [initTableMixins],
|
||||
store,
|
||||
components: {
|
||||
"member-record": MEMBER_RECORD,
|
||||
"member-info": MEMBER_INFO,
|
||||
"member-audit-change-info": MEMBER_AUDIT_CHANGE_INFO
|
||||
},
|
||||
data: {
|
||||
userId: ''
|
||||
},
|
||||
methods: {
|
||||
openChangeInfo(row) {
|
||||
this.$refs.guava.public(() => {
|
||||
this.$refs.memberAuditChangeInfoRef.onOpen({recordId: row.id, userId: row.userId})
|
||||
})
|
||||
},
|
||||
openView(data) {
|
||||
this.$refs.guava.view(() => {
|
||||
this.$refs.memberInfoRef.onOpen(data)
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
+298
-11
@@ -1,7 +1,240 @@
|
||||
const MEMBER_STATISTICS_COMPREHENSIVE_QUERY_FORM = {
|
||||
template: /*language=HTML*/ `
|
||||
<el-card shadow="never">
|
||||
<search @search="doSearch">
|
||||
<el-row type="flex" align="middle" class="query-row">
|
||||
<el-col class="query-row-title">年  度:</el-col>
|
||||
<el-col class="query-row-content" :span="12">
|
||||
<el-row style="margin-left: 3px">
|
||||
<el-date-picker @change="doSearch()"
|
||||
style="width: 85%"
|
||||
:picker-options="pickerOptions"
|
||||
v-model="pageForm.year"
|
||||
type="year"
|
||||
value-format="yyyy"
|
||||
placeholder="选择年" :clearable="false">
|
||||
</el-date-picker>
|
||||
<el-link type="primary" style="margin-left: 10px"
|
||||
:underline="false"
|
||||
@click="setNowYear();doSearch()">
|
||||
本年
|
||||
</el-link>
|
||||
</el-row>
|
||||
</el-col>
|
||||
<el-col class="query-row-title">姓名/工号:</el-col>
|
||||
<el-col class="query-row-content" :span="12">
|
||||
<el-row style="width: 92%">
|
||||
<el-input placeholder="请输入内容" clearable v-model="pageForm.searchKeyword"></el-input>
|
||||
</el-row>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row type="flex" align="middle" class="query-row">
|
||||
<el-col class="query-row-content">
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<span>所属工会:</span>
|
||||
<el-select placeholder="所属工会" v-model="pageForm.unionId"
|
||||
clearable multiple style="margin-left: 33px;width: 80%"
|
||||
@change="flushUnits();doSearch()"
|
||||
@clear="flushUnits();doSearch()"
|
||||
filterable>
|
||||
<el-option v-for="item in unions" :label="item.name"
|
||||
:value="item.id"></el-option>
|
||||
</el-select>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<span>所属单位:</span>
|
||||
<el-select placeholder="所属单位" v-model="pageForm.unitId"
|
||||
clearable multiple style="margin-left: 33px;width: 80%" filterable>
|
||||
<el-option v-for="item in units" :label="item.name"
|
||||
:value="item.id"></el-option>
|
||||
</el-select>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row class="query-row">
|
||||
<el-col class="query-row-title">性别:</el-col>
|
||||
<el-col class="query-row-content">
|
||||
<el-tag
|
||||
:effect="pageForm.sexTypes.includes(item.name)?'dark':'plain'"
|
||||
:key="item.code"
|
||||
:type="item.name"
|
||||
@click="tagClick('sexTypes',item.name)"
|
||||
style="margin-right: 10px;cursor: pointer"
|
||||
v-for="item in sexTypeOptions">
|
||||
{{ item.name }}
|
||||
</el-tag>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row type="flex" align="middle" class="query-row query-row-tag">
|
||||
<el-col class="query-row-title">人员类型:</el-col>
|
||||
<el-col class="query-row-content query-row-content-tag">
|
||||
<el-tag
|
||||
style="margin-right: 10px;cursor: pointer"
|
||||
v-for="item in personTypeOptions"
|
||||
:key="item.code"
|
||||
:type="item.name"
|
||||
:effect="pageForm.personTypes.includes(item.name)?'dark':'plain'"
|
||||
@click="tagClick('personTypes',item.name)">
|
||||
{{ item.name }}
|
||||
</el-tag>
|
||||
|
||||
<el-link type="danger"
|
||||
v-if="personTypeOptions.length&&pageForm.personTypes.length"
|
||||
:underline="false"
|
||||
@click="pageForm.personTypes=[];doSearch()">清空
|
||||
</el-link>
|
||||
<el-link :underline="false"
|
||||
@click="pageForm.personTypes=personTypeOptions.map(p=>p.code);doSearch()"
|
||||
type="success">全部
|
||||
</el-link>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row type="flex" align="middle" class="query-row query-row-tag">
|
||||
<el-col class="query-row-title">人事编制:</el-col>
|
||||
<el-col class="query-row-content query-row-content-tag">
|
||||
<el-tag
|
||||
style="margin-right: 10px;cursor: pointer"
|
||||
v-for="item in preparedByOptions"
|
||||
:key="item.code"
|
||||
:type="item.name"
|
||||
:effect="pageForm.preparedBys.includes(item.name)?'dark':'plain'"
|
||||
@click="tagClick('preparedBys',item.name)">
|
||||
{{ item.name }}
|
||||
</el-tag>
|
||||
|
||||
<el-link type="danger"
|
||||
v-if="preparedByOptions.length&&pageForm.preparedBys.length"
|
||||
:underline="false"
|
||||
@click="pageForm.preparedBys=[];doSearch()">清空
|
||||
</el-link>
|
||||
<el-link :underline="false"
|
||||
@click="pageForm.preparedBys=preparedByOptions.map(p=>p.code);doSearch()"
|
||||
type="success">全部
|
||||
</el-link>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row type="flex" align="middle" class="query-row query-row-tag">
|
||||
<el-col class="query-row-title">在职状态:</el-col>
|
||||
<el-col class="query-row-content query-row-content-tag">
|
||||
<el-tag
|
||||
style="margin-right: 10px;cursor: pointer"
|
||||
v-for="item in userStateOptions"
|
||||
:key="item.code"
|
||||
:type="item.name"
|
||||
:effect="pageForm.userStates.includes(item.name)?'dark':'plain'"
|
||||
@click="tagClick('userStates',item.name)">
|
||||
{{ item.name }}
|
||||
</el-tag>
|
||||
|
||||
<el-link type="danger"
|
||||
v-if="userStateOptions.length&&pageForm.userStates.length"
|
||||
:underline="false"
|
||||
@click="pageForm.userStates=[];doSearch()">清空
|
||||
</el-link>
|
||||
<el-link :underline="false"
|
||||
@click="pageForm.userStates=userStateOptions.map(p=>p.code);doSearch()"
|
||||
type="success">全部
|
||||
</el-link>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row class="query-row" type="flex" align="middle">
|
||||
<el-col class="query-row-title">出生日期:</el-col>
|
||||
<el-col class="query-row-content">
|
||||
<el-date-picker
|
||||
v-model="pageForm.startDate"
|
||||
type="date"
|
||||
@change="determineStartDate"
|
||||
placeholder="选择开始日期">
|
||||
</el-date-picker>
|
||||
<el-date-picker
|
||||
v-model="pageForm.endDate"
|
||||
type="date"
|
||||
@change="determineEndDate"
|
||||
placeholder="选择结束日期">
|
||||
</el-date-picker>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row class="query-row" type="flex" align="middle">
|
||||
<el-col class="query-row-title">入会日期:</el-col>
|
||||
<el-col class="query-row-content">
|
||||
<el-date-picker
|
||||
v-model="pageForm.startJoinDate"
|
||||
type="date"
|
||||
@change="determineStartDate"
|
||||
placeholder="选择开始日期">
|
||||
</el-date-picker>
|
||||
<el-date-picker
|
||||
v-model="pageForm.endJoinDate"
|
||||
type="date"
|
||||
@change="determineEndDate"
|
||||
placeholder="选择结束日期">
|
||||
</el-date-picker>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row class="query-row" type="flex" align="middle">
|
||||
<el-col class="query-row-title">离会日期:</el-col>
|
||||
<el-col class="query-row-content">
|
||||
<el-date-picker
|
||||
v-model="pageForm.startLeaveDate"
|
||||
type="date"
|
||||
@change="determineStartDate"
|
||||
placeholder="选择开始日期">
|
||||
</el-date-picker>
|
||||
<el-date-picker
|
||||
v-model="pageForm.endLeaveDate"
|
||||
type="date"
|
||||
@change="determineEndDate"
|
||||
placeholder="选择结束日期">
|
||||
</el-date-picker>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row class="query-row" type="flex" align="middle">
|
||||
<el-col class="query-row-title">年龄范围:</el-col>
|
||||
<el-col class="query-row-content">
|
||||
<el-row type="flex" style="align-items: center">
|
||||
<el-col :span="15">
|
||||
<el-slider
|
||||
v-model="pageForm.age"
|
||||
range
|
||||
show-stops
|
||||
:max="100">
|
||||
</el-slider>
|
||||
</el-col>
|
||||
<el-col :span="9" class="pl20">
|
||||
当前范围:{{ pageForm.age }}
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row type="flex" align="middle" class="query-row">
|
||||
<el-col class="query-row-title">模糊查询:</el-col>
|
||||
<el-col class="query-row-content">
|
||||
<member-cnd @cnd="(v)=>pageForm={...pageForm,...v}"></member-cnd>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row class="query-row" style="justify-content: end">
|
||||
<el-checkbox v-model="pageForm.reverseSelection" label="是否反选" border
|
||||
@change="doSearch"
|
||||
class="reverseCheckBox"></el-checkbox>
|
||||
<el-button type="danger" icon="el-icon-circle-close" @click="doReset">重置
|
||||
</el-button>
|
||||
<el-button type="primary" icon="el-icon-search" @click="doSearch">搜索</el-button>
|
||||
</el-row>
|
||||
|
||||
|
||||
<!--<search @search="doSearch">
|
||||
<search-item label="年度">
|
||||
<el-date-picker @change="doSearch"
|
||||
:picker-options="pickerOptions"
|
||||
@@ -53,8 +286,8 @@ const MEMBER_STATISTICS_COMPREHENSIVE_QUERY_FORM = {
|
||||
</search-item>
|
||||
<search-item label="性别">
|
||||
<el-select v-model="pageForm.sexTypes" clearable multiple placeholder="性别">
|
||||
<el-option label="男" value="男"></el-option>
|
||||
<el-option label="女" value="女"></el-option>
|
||||
<el-option label="男性"></el-option>
|
||||
<el-option label="女性"></el-option>
|
||||
</el-select>
|
||||
</search-item>
|
||||
<search-item label="人员类型">
|
||||
@@ -133,7 +366,7 @@ const MEMBER_STATISTICS_COMPREHENSIVE_QUERY_FORM = {
|
||||
</div>
|
||||
</div>
|
||||
</search-item>
|
||||
</search>
|
||||
</search>-->
|
||||
|
||||
|
||||
<!-- <el-row type="flex" align="middle" class="query-row">-->
|
||||
@@ -187,7 +420,6 @@ const MEMBER_STATISTICS_COMPREHENSIVE_QUERY_FORM = {
|
||||
personTypeOptions: [],
|
||||
preparedByOptions: [],
|
||||
userStateOptions: [],
|
||||
memberStatusOptions: [],
|
||||
unions: [],
|
||||
units: [],
|
||||
sexTypeOptions: [
|
||||
@@ -224,6 +456,15 @@ const MEMBER_STATISTICS_COMPREHENSIVE_QUERY_FORM = {
|
||||
}
|
||||
this.pageForm.endDate = this.pageForm.endDate.toLocaleDateString().replaceAll("/", "-")
|
||||
},
|
||||
determineStartDate() {
|
||||
if (this.pageForm.endDate) {
|
||||
if (Date.parse(this.pageForm.startDate) > Date.parse(this.pageForm.endDate)) {
|
||||
this.pageForm.startDate = ""
|
||||
this.$notify.warning("开始时间不能大于结束时间")
|
||||
}
|
||||
}
|
||||
this.pageForm.startDate = this.pageForm.startDate.toLocaleDateString().replaceAll("/", "-")
|
||||
},
|
||||
tagClick(key, val) {
|
||||
let idx = this.pageForm[key].indexOf(val)
|
||||
if (idx !== -1) {
|
||||
@@ -308,18 +549,15 @@ const MEMBER_STATISTICS_COMPREHENSIVE_QUERY_FORM = {
|
||||
this.unions = await this.$businessTool.listUnion(this.$store.state.user.union.id)
|
||||
this.units = await this.$businessTool.listUnit(this.$store.state.user.union.id)
|
||||
}
|
||||
this.$businessTool.getDictOptions("USER_STAFF_TYPE").then((data) => {
|
||||
this.$businessTool.getDictOptions("USER_PERSON_TYPE").then((data) => {
|
||||
this.personTypeOptions = data
|
||||
})
|
||||
this.$businessTool.getDictOptions("USER_EMPLOYMENT_TYPE").then((data) => {
|
||||
this.$businessTool.getDictOptions("USER_PREPARED_BY_TYPE").then((data) => {
|
||||
this.preparedByOptions = data
|
||||
})
|
||||
this.$businessTool.getDictOptions("USER_STATE").then((data) => {
|
||||
this.userStateOptions = data
|
||||
})
|
||||
this.$businessTool.getAllDictOptions("MEMBER_CHANGE_TYPE").then((data) => {
|
||||
this.memberStatusOptions = data
|
||||
})
|
||||
},
|
||||
flushUnits() {
|
||||
this.$set(this.pageForm, "unitId", null)
|
||||
@@ -342,5 +580,54 @@ const MEMBER_STATISTICS_COMPREHENSIVE_QUERY_FORM = {
|
||||
created() {
|
||||
this.initData()
|
||||
this.doSearch()
|
||||
}
|
||||
},
|
||||
style: /*language=CSS*/ `
|
||||
.reverseCheckBox {
|
||||
margin: 0 10px 0 0 !important;
|
||||
}
|
||||
|
||||
.query-row {
|
||||
min-height: 60px;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.query-row:not(:last-child) {
|
||||
border-bottom: 1px dashed rgb(230, 230, 230);
|
||||
}
|
||||
|
||||
.query-row-title {
|
||||
width: 120px;
|
||||
}
|
||||
|
||||
.query-row > .query-title {
|
||||
width: 100px;
|
||||
max-width: 100px;
|
||||
min-width: 100px;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.query-row > .query-content {
|
||||
min-width: 200px;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.query-row > .query-content > .el-tag {
|
||||
margin-bottom: 5px;
|
||||
margin-top: 5px;
|
||||
}
|
||||
|
||||
.query-row-tag {
|
||||
padding: 10px 0;
|
||||
}
|
||||
|
||||
.query-row-content-tag {
|
||||
display: flex;
|
||||
flex-wrap: wrap; /* 标签自动换行 */
|
||||
align-items: center;
|
||||
gap: 4px 6px; /* 横纵向间距 */
|
||||
}
|
||||
`
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user