This commit is contained in:
Paidax
2025-09-25 09:10:15 +08:00
parent 5730478c79
commit 5fa9399d76
59 changed files with 1200 additions and 492 deletions
@@ -153,7 +153,7 @@ public class SysUnionController {
Sql sql = Sqls.create("""
SELECT
gh.*,
GROUP_CONCAT( u.username,'(',u.mobile,')' ) AS chairman
GROUP_CONCAT( u.username,'(',u.loginname,')' ) AS chairman
FROM
sys_union gh
LEFT JOIN sys_user_role sur ON sur.unionId = gh.id
@@ -110,7 +110,7 @@ public class SysDataUserAllUpdateServiceImpl implements SysDataUserUpdateService
* 检查用户是否符合会员条件
*
* @param userState 用户状态
* @param preparedBy 聘用方式
* @param preparedBy 编制类别
* @param postDoctoralJoinDate 博士后进站时间
* @return 是否符合会员条件
*/
@@ -109,7 +109,7 @@ public class MemberChangeManageController {
throw new BaseException("没有权限,或未设置工会小组");
}
memberCommonService.validateChangeAndSetBasicData(record);
memberCommonService.validateChangeAndSetBasicData(record, changeOrigin);
dao.insertOrUpdate(record);
// 开启流程实例
@@ -0,0 +1,107 @@
package com.budwk.app.zhgh.staffmanage.member.controller.check;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.dev33.satoken.annotation.SaMode;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.StrUtil;
import com.budwk.app.base.annotation.SLog;
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.base.utils.ManyAddOrRenewUtil;
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.models.check.MemberCheckTask;
import com.budwk.app.zhgh.staffmanage.member.models.check.MemberCheckTaskUser;
import com.budwk.app.zhgh.staffmanage.member.param.pageform.MemberCheckPageForm;
import com.budwk.app.zhgh.staffmanage.member.param.pageform.MemberStatisticsPageForm;
import com.budwk.app.zhgh.staffmanage.member.service.MemberCheckTaskService;
import com.budwk.app.zhgh.staffmanage.member.service.MemberCommonService;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ArrayUtils;
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.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.Strings;
import org.nutz.lang.random.R;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
import java.util.List;
/**
* @version 1.0
* @Author zzr
* @nameMemberCheckTaskController
* @Date 2025/9/24 9:53
* @注释 会员核对任务创建
*/
@Slf4j
@IocBean
@Ok("json")
@At("/platform/member/check/task")
public class MemberCheckTaskController {
@Inject
private Dao dao;
@Inject
private ManyAddOrRenewUtil renewUtil;
@Inject
private MemberCheckTaskService memberCheckTaskService;
@At("")
@Ok("beetl:/platform/zhgh/staffmanage/member/check/task/index.html")
@SaCheckPermission("member.check.task")
public void index() {}
@At
@ApiOperation("页面数据")
@SaCheckPermission("member.check.task")
public Result pageData(MemberCheckPageForm pageForm) {
Sql sql = Sqls.create("select * from member_check_task $condition");
Cnd cnd = Cnd.NEW();
cnd.andEX("`year`", "=", pageForm.getYear());
cnd.andEX("checkTaskId", "=", pageForm.getCheckTaskId());
sql.setCondition(cnd);
Pagination pagination = memberCheckTaskService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return Result.success(pagination);
}
@At
@ApiOperation("添加或修改")
@Aop(TransAop.READ_COMMITTED)
@SaCheckPermission("member.check.task")
@SLog(tag = "会员核对任务创建", msg = "添加或修改会员核对任务创建:${args[0].taskName}")
public Result doAddOrModify(MemberCheckTask memberCheckTask) {
dao.insertOrUpdate(memberCheckTask);
dao.clear(MemberCheckTaskUser.class, Cnd.where(MemberCheckTaskUser::getCheckTaskId, "=", memberCheckTask.getId()));
List<String> userStates = memberCheckTask.getUserStates();
List<Sys_user> query = dao.query(Sys_user.class, Cnd.where(Sys_user::getUserState, "in", userStates).or(Sys_user::getMember, "=", 1));
List<MemberCheckTaskUser> list = query.stream().map(v -> {
MemberCheckTaskUser memberCheckTaskUser = new MemberCheckTaskUser();
BeanUtil.copyProperties(v, memberCheckTaskUser);
memberCheckTaskUser.setId(R.UU32());
memberCheckTaskUser.setCheckTaskId(memberCheckTask.getId());
memberCheckTaskUser.setUserId(v.getId());
return memberCheckTaskUser;
}).toList();
renewUtil.asyncExecuteFastInsert(list, 200);
return Result.success();
}
}
@@ -0,0 +1,179 @@
package com.budwk.app.zhgh.staffmanage.member.controller.check;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hutool.core.util.StrUtil;
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.web.commons.auth.utils.AuthUtil;
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.zhgh.staffmanage.member.param.pageform.MemberCheckPageForm;
import com.budwk.app.zhgh.staffmanage.member.service.MemberCheckTaskService;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
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.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.lang.Lang;
import org.nutz.lang.Strings;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
/**
* @version 1.0
* @Author zzr
* @nameMemberCheckTaskUnionController
* @Date 2025/9/24 11:24
* @注释
*/
@Slf4j
@IocBean
@Ok("json")
@At("/platform/member/checkTask/union")
public class MemberCheckTaskUnionController {
@Inject
private Dao dao;
@Inject
private MemberCheckTaskService memberCheckTaskService;
@At("")
@Ok("beetl:/platform/zhgh/staffmanage/member/check/union/index.html")
@SaCheckPermission("member.checkTask.union")
public void index() {}
@At
@ApiOperation("页面数据")
@SaCheckPermission("member.checkTask.union")
public Result pageData(MemberCheckPageForm pageForm){
Sql sql = Sqls.create("""
SELECT
u.id,
u.loginname,
u.username,
u.sex,
u.birthday,
u.political,
u.joinPartyDate,
u.nation,
u.nativePlace,
u.nationality,
u.idCardType,
u.mobile,
u.education,
u.academicDegree,
u.position,
u.personType,
u.preparedBy,
u.identityType,
u.userState,
u.unionName,
u.unitName,
u.member,
u.postDoctoralJoinDate
FROM
`vw_user` u
$condition
""");
Cnd cnd = getCnd(pageForm);
if (StrUtil.isNotBlank(pageForm.getIsUnit())) {
cnd.and("u.unitId", "true".equals(pageForm.getIsUnit()) ? "is not" : "is", null);
}
if (StrUtil.isNotBlank(pageForm.getIsUnion())) {
cnd.and("u.unionId", "true".equals(pageForm.getIsUnion()) ? "is not" : "is", null);
}
if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) {
SqlExpressionGroup seg = new SqlExpressionGroup();
seg.or("u.username", "like", "%" + pageForm.getSearchKeyword() + "%");
seg.or("u.loginname", "like", "%" + pageForm.getSearchKeyword() + "%");
cnd.and(seg);
}
if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) {
cnd.and(Cnd.exps("u.unionId", "=", SecurityUtil.getUnionId())
.or("u.unionId", "is", null).or("u.unionId", "=", ""));
}
cnd.desc("u.unionName,u.id");
cnd.groupBy("u.id");
sql.setCondition(cnd);
Pagination pagination = memberCheckTaskService.listPage(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return Result.success(pagination);
}
public Cnd getCnd(MemberCheckPageForm pageForm) {
Boolean reverseSelection = pageForm.getReverseSelection();
String IN_OR_NIN_OP = reverseSelection ? "NOT IN" : "IN";
String EQ_OR_NEQ_OP = reverseSelection ? "!=" : "=";
//小于等于
String LE_OR_NLE_OP = reverseSelection ? ">=" : "<=";
//大于等于
String GE_OR_NGE_OP = reverseSelection ? "<=" : ">=";
Cnd cnd = Cnd.NEW();
if (StrUtil.isAllNotBlank(pageForm.getPageOrderBy(), pageForm.getPageOrderName())) {
cnd.orderBy(pageForm.getPageOrderName(), "ascending".equalsIgnoreCase(pageForm.getPageOrderBy()) ? "ASC" : "DESC");
}
if (Lang.isNotEmpty(pageForm.getUserTypes())) {
if (pageForm.getUserTypes().contains("工会会员")) {
cnd.and("u.member", EQ_OR_NEQ_OP, true);
}
if (pageForm.getUserTypes().contains("福利会员")) {
cnd.and("u.welfareMember", EQ_OR_NEQ_OP, true);
}
}
if (Lang.isNotEmpty(pageForm.getAge()) && !"0".equals(pageForm.getAge().get(1))) {
if (reverseSelection) {
cnd.andNot("TIMESTAMPDIFF(YEAR, u.birthday, CURDATE())", "between", pageForm.getAge().toArray());
} else {
cnd.and("TIMESTAMPDIFF(YEAR, u.birthday, CURDATE())", "between", pageForm.getAge().toArray());
}
}
if (Strings.isNotBlank(pageForm.getBirthdayStartDate()) && Strings.isNotBlank(pageForm.getBirthdayEndDate())) {
if (reverseSelection) {
cnd.andNot("DATE(u.birthday)", "between", new String[]{pageForm.getBirthdayStartDate(), pageForm.getBirthdayEndDate()});
} else {
cnd.and("DATE(u.birthday)", "between", new String[]{pageForm.getBirthdayStartDate(), pageForm.getBirthdayEndDate()});
}
}
if (Strings.isNotBlank(pageForm.getBirthdayStartDate()) && Strings.isBlank(pageForm.getBirthdayEndDate())) {
cnd.and("DATE(u.birthday)", GE_OR_NGE_OP, pageForm.getBirthdayStartDate());
}
if (Strings.isBlank(pageForm.getBirthdayStartDate()) && Strings.isNotBlank(pageForm.getBirthdayEndDate())) {
cnd.and("DATE(u.birthday)", LE_OR_NLE_OP, pageForm.getBirthdayEndDate());
}
try {
handleField("id", pageForm.getUserInfos(), reverseSelection, IN_OR_NIN_OP, cnd);
handleField("unionId", pageForm.getUnionIds(), reverseSelection, IN_OR_NIN_OP, cnd);
handleField("unitId", pageForm.getUnitIds(), reverseSelection, IN_OR_NIN_OP, cnd);
handleField("personType", pageForm.getPersonTypes(), reverseSelection, IN_OR_NIN_OP, cnd);
handleField("preparedBy", pageForm.getPreparedBys(), reverseSelection, IN_OR_NIN_OP, cnd);
handleField("userState", pageForm.getUserStates(), reverseSelection, IN_OR_NIN_OP, cnd);
handleField("sex", pageForm.getSexTypes(), reverseSelection, IN_OR_NIN_OP, cnd);
} catch (Exception e) {
throw new RuntimeException(e);
}
return cnd;
}
void handleField(String fieldName, Object fieldValue, boolean reverseSelection, String IN_OR_NIN_OP, Cnd cnd) {
if (reverseSelection && Lang.isNotEmpty(fieldValue)) {
SqlExpressionGroup seg = new SqlExpressionGroup();
seg.or("u." + fieldName, "is", null);
seg.or("u." + fieldName, IN_OR_NIN_OP, fieldValue);
cnd.and(seg);
} else {
cnd.andEX("u." + fieldName, IN_OR_NIN_OP, fieldValue);
}
}
}
@@ -36,13 +36,17 @@ import org.nutz.dao.util.cri.SqlExpressionGroup;
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.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
/**
* @version 1.0
@@ -85,34 +89,12 @@ public class MemberBatchMakeController {
unitName,
mobile
from
`user`
`vw_user`
$condition
""");
Cnd cnd = Cnd.NEW();
cnd.and("member", "=", false);
if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) {
SqlExpressionGroup seg = new SqlExpressionGroup();
seg.orLike("username", pageForm.getSearchKeyword());
seg.orLike("loginname", pageForm.getSearchKeyword());
cnd.and(seg);
}
// 权限判断
if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) {
SqlExpressionGroup seg = new SqlExpressionGroup();
seg.or("unionId", "=", SecurityUtil.getUnionId());
seg.or("unionId", "is", null);
seg.or("unionId", "=", "");
cnd.and(seg);
} else {
cnd.andEX("unionId", "=", pageForm.getUnionId());
cnd.andEX("unitId", "=", pageForm.getUnitId());
}
cnd.andEX("userState", "in", pageForm.getUserStates());
cnd.andEX("preparedBy", "in", pageForm.getPreparedBys());
cnd.andEX("personType", "in", pageForm.getPersonTypes());
pageForm.buildSearch(cnd, "");
sql.setCondition(cnd);
Pagination pagination = memberCommonService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
@@ -126,7 +108,11 @@ public class MemberBatchMakeController {
@SLog(tag = "会员信息", msg = "批量设置会员")
@SaCheckPermission("member.info.batchMake")
public Result batchMake(MemberBatchMakeParam param){
List<String> userIds = param.getUserIds();
List<String> userIds = Optional.ofNullable(param.getUserIds()).orElse(Collections.emptyList())
.stream().filter(StrUtil::isNotBlank).collect(Collectors.toList());
if (Lang.isEmpty(userIds)) {
throw new BaseException("请传递数据");
}
// 查询会员角色
Sys_role role = sysRoleService.getByCode(RoleConstant.MEMBER);
if (role == null) {
@@ -153,7 +139,7 @@ public class MemberBatchMakeController {
@At
@Ok("void")
@SaCheckPermission("member.statistics.comprehensive")
public void doExport(MemberStatisticsPageForm pageForm, HttpServletResponse response){
public void doExport(MemberInfoPageForm pageForm, HttpServletResponse response){
Sql sql = Sqls.create("""
SELECT
id,
@@ -172,33 +158,13 @@ public class MemberBatchMakeController {
""");
Cnd cnd = Cnd.NEW();
cnd.and("member", "=", false);
if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) {
SqlExpressionGroup seg = new SqlExpressionGroup();
seg.orLike("username", pageForm.getSearchKeyword());
seg.orLike("loginname", pageForm.getSearchKeyword());
cnd.and(seg);
}
// 权限判断
if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) {
SqlExpressionGroup seg = new SqlExpressionGroup();
seg.or("unionId", "=", SecurityUtil.getUnionId());
seg.or("unionId", "is", null);
seg.or("unionId", "=", "");
cnd.and(seg);
} else {
cnd.andEX("unionId", "=", pageForm.getUnionId());
cnd.andEX("unitId", "=", pageForm.getUnitId());
}
cnd.andEX("userState", "in", pageForm.getUserStates());
cnd.andEX("preparedBy", "in", pageForm.getPreparedBys());
cnd.andEX("personType", "in", pageForm.getPersonTypes());
pageForm.buildSearch(cnd, "u.");
sql.setCondition(cnd);
List<NutMap> list = memberCommonService.listMap(sql);
for (NutMap row : list) {
row.put("mobile", DesensitizedUtil.mobilePhone(row.getString("mobile")));
row.put("idCard", DesensitizedUtil.idCardNum(row.getString("idCard"), 3, 4));
}
try {
List<ExcelExportEntity> exportEntities = new ArrayList<>();
@@ -207,7 +173,7 @@ public class MemberBatchMakeController {
exportEntities.add(new ExcelExportEntity("性别", "sex", 20));
exportEntities.add(new ExcelExportEntity("联系电话", "mobile", 20));
exportEntities.add(new ExcelExportEntity("在职状态", "userState", 20));
exportEntities.add(new ExcelExportEntity("聘用方式", "preparedBy", 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));
@@ -67,6 +67,7 @@ public class MemberInfoGroupController {
Pagination<NutMap> pagination = memberInfoService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
for (NutMap row : pagination.getList()) {
row.put("mobile",DesensitizedUtil.mobilePhone(row.getString("mobile")));
row.put("idCard",DesensitizedUtil.idCardNum(row.getString("idCard"), 3, 4));
}
return Result.success(pagination);
}
@@ -125,9 +126,10 @@ public class MemberInfoGroupController {
@Aop(TransAop.READ_COMMITTED)
@SaCheckPermission("member.info.group")
@AdaptBy(type = UploadAdaptor.class, args = {"ioc:fileUpload"})
public Result importMember(TempFile file) {
public Result importMember(TempFile file, Boolean isFlag) {
try {
NutMap nutMap = memberInfoService.handlingMemberImport(file);
System.out.println(isFlag);
NutMap nutMap = memberInfoService.handlingMemberImport(file, isFlag);
if (Lang.isNotEmpty(nutMap)) {
return Result.success(nutMap);
}
@@ -1,5 +1,9 @@
package com.budwk.app.zhgh.staffmanage.member.controller.statistics;
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 com.budwk.app.base.page.Pagination;
@@ -12,12 +16,16 @@ import org.apache.poi.ss.usermodel.Workbook;
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.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.List;
import java.util.Map;
/**
* @version 1.0
@@ -50,6 +58,7 @@ public class MemberComprehensiveController {
Pagination<NutMap> pagination = memberStatisticsService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
for (NutMap row : pagination.getList()) {
row.put("mobile", DesensitizedUtil.mobilePhone(row.getString("mobile")));
row.put("idCard", DesensitizedUtil.idCardNum(row.getString("idCard"), 3, 4));
}
return Result.success(pagination);
}
@@ -63,9 +72,23 @@ public class MemberComprehensiveController {
List<NutMap> list = memberStatisticsService.listMap(sql);
for (NutMap row : list) {
row.put("mobile", DesensitizedUtil.mobilePhone(row.getString("mobile")));
row.put("idCard", DesensitizedUtil.idCardNum(row.getString("idCard"), 3, 4));
}
try {
Workbook workbook = memberInfoService.setHistoryExcelData(list);
Workbook workbook = null;
if (Lang.isNotEmpty(pageForm.getColumns())) {
List<ExcelExportEntity> exportEntities = new ArrayList<>();
pageForm.getColumns().forEach(column -> {
exportEntities.add(new ExcelExportEntity(column.get("label"), column.get("prop"), 20));
});
ExportParams exportParams = new ExportParams();
exportParams.setType(ExcelType.XSSF);
workbook = ExcelExportUtil.exportExcel(exportParams, exportEntities, list);
} else {
workbook = memberInfoService.setHistoryExcelData(list);
}
CommonDownloadUtil.download("会员综合统计表.xlsx", workbook, response);
} catch (Exception e) {
e.printStackTrace();
@@ -18,7 +18,7 @@ import org.nutz.dao.interceptor.annotation.PrevInsert;
@Accessors(chain = true)
@Table("member_list_verification_user")
@Comment("会员名单核对事项用户表")
public class MemberListVerificationUser extends MemberApplyRecord {
public class MemberListVerificationUser extends MemberChangeRecord {
@Name
@Comment("ID")
@@ -0,0 +1,72 @@
package com.budwk.app.zhgh.staffmanage.member.models.check;
import com.budwk.app.base.model.BaseModel;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.nutz.dao.entity.annotation.*;
import org.nutz.dao.interceptor.annotation.PrevInsert;
import java.util.Date;
import java.util.List;
/**
* @version 1.0
* @Author zzr
* @nameMemberCheckTask
* @Date 2025/9/24 11:03
* @注释
*/
@Data
@Table
@Comment("会员核对事项表")
@EqualsAndHashCode(callSuper = true)
public class MemberCheckTask extends BaseModel {
@Column
@Name
@Comment("ID")
@ColDefine(type = ColType.VARCHAR, width = 32)
@PrevInsert(uu32 = true)
private String id;
@Column
@Comment("年度")
@ColDefine(type = ColType.INT)
private Integer year;
@Column
@Comment("任务名称")
@ColDefine(type = ColType.VARCHAR, width = 20)
private String taskName;
@Column
@Comment("说明")
@ColDefine(type = ColType.VARCHAR, width = 50)
private String description;
@Column
@Comment("开始时间")
@ColDefine(type = ColType.DATETIME)
private Date startTime;
@Column
@Comment("结束时间")
@ColDefine(type = ColType.DATETIME)
private Date endTime;
@Column
@Comment("模式")
@ColDefine(type = ColType.INT)
private Integer taskMode;
@Column
@Comment("在职状态")
@ColDefine(type = ColType.MYSQL_JSON)
private List<String> userStates;
@Column
@Comment("是否开启")
@Default(value = "1")
@ColDefine(type = ColType.BOOLEAN)
private Boolean isEnabled;
}
@@ -0,0 +1,98 @@
package com.budwk.app.zhgh.staffmanage.member.models.check;
import cn.hutool.json.JSONObject;
import com.budwk.app.base.model.BaseModel;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.nutz.dao.entity.annotation.*;
import org.nutz.dao.interceptor.annotation.PrevInsert;
import java.util.List;
/**
* @version 1.0
* @Author zzr
* @nameMemberCheckTaskUnionFeedback
* @Date 2025/9/24 11:09
* @注释
*/
@Data
@Table
@Comment("核对分工会反馈表")
@EqualsAndHashCode(callSuper = true)
public class MemberCheckTaskUnionFeedback 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)
private String checkTaskId;
@Column
@Comment("分工会Id")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String unionId;
@Column
@Comment("分工会编码")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String unionCode;
@Column
@Comment("分工会名称")
@ColDefine(type = ColType.VARCHAR, width = 100)
private String unionName;
@Column
@Comment("分工会是否已提交")
@ColDefine(type = ColType.BOOLEAN)
@Default("0")
private Boolean branchUnionSubmit;
@Column
@Comment("校工会是否审核")
@ColDefine(type = ColType.BOOLEAN)
@Default("0")
private Boolean schoolUnionAudit;
@Column
@Comment("反馈人Id")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String feedbackUserId;
@Column
@Comment("反馈人姓名")
@ColDefine(type = ColType.VARCHAR, width = 30)
private String feedbackUserName;
@Column
@Comment("反馈人工号")
@ColDefine(type = ColType.VARCHAR, width = 50)
private String feedbackLoginName;
@Column
@Comment("反馈文件")
@ColDefine(type = ColType.MYSQL_JSON)
private List<JSONObject> feedbackFiles;
@Column
@Comment("校工会是否退回")
@ColDefine(type = ColType.BOOLEAN)
private Boolean isRollback;
@Column
@Comment("退回原因")
@ColDefine(type = ColType.VARCHAR, width = 200)
private String rollbackReason;
@Column
@Comment("当前状态")
@ColDefine(type = ColType.VARCHAR, width = 30)
private String status;
}
@@ -0,0 +1,61 @@
package com.budwk.app.zhgh.staffmanage.member.models.check;
import com.budwk.app.base.model.BaseModel;
import com.budwk.app.zhgh.staffmanage.member.models.MemberChangeRecord;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.nutz.dao.entity.annotation.*;
import org.nutz.dao.interceptor.annotation.PrevInsert;
/**
* @version 1.0
* @Author zzr
* @nameMemberCheckTaskUser
* @Date 2025/9/24 11:08
* @注释
*/
@Data
@Table
@Comment("会员核对人表")
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = true)
public class MemberCheckTaskUser extends MemberChangeRecord {
@Name
@Comment("ID")
@ColDefine(type = ColType.VARCHAR, width = 32)
@PrevInsert(uu32 = true)
private String id;
@Column
@Comment("核对事项ID")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String checkTaskId;
@Column
@Default("0")
@Comment("分工会是否已核对")
@ColDefine(type = ColType.BOOLEAN)
private Boolean branchUnionChecked;
@Column
@Default("0")
@Comment("校工会是否已核对")
@ColDefine(type = ColType.BOOLEAN)
private Boolean schoolUnionChecked;
@Column
@Default("0")
@Comment("是否变更")
@ColDefine(type = ColType.BOOLEAN)
private Boolean isChanged;
/**
* 1,校工会拒绝 2,校工会通过
*/
@Column
@Comment("当前状态")
@ColDefine(type = ColType.INT)
private Integer currentState;
}
@@ -34,7 +34,7 @@ public class MemberChangePageForm extends PageForm {
private List<String> userStates;
// 在职状态
@ApiModelProperty("编制类")
@ApiModelProperty("编制类")
private List<String> preparedBys;
// 人员类型
@@ -0,0 +1,78 @@
package com.budwk.app.zhgh.staffmanage.member.param.pageform;
import com.budwk.app.base.param.PageForm;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.List;
/**
* @version 1.0
* @Author zzr
* @nameMemberCheckPageForm
* @Date 2025/9/24 9:59
* @注释
*/
@Data
@ApiModel("核对参数")
@EqualsAndHashCode(callSuper = true)
public class MemberCheckPageForm extends PageForm {
@ApiModelProperty("核对年份")
private Integer year;
@ApiModelProperty("是否有单位")
private String isUnit;
@ApiModelProperty("是否有工会")
private String isUnion;
@ApiModelProperty("核对任务id")
private String checkTaskId;
// 工会id
@ApiModelProperty("工会id")
private String unionIds;
// 单位id
@ApiModelProperty("单位id")
private String unitIds;
@ApiModelProperty("出生日期开始时间")
private String birthdayStartDate;
@ApiModelProperty("出生日期结束时间")
private String birthdayEndDate;
// 在职状态
@ApiModelProperty("在职状态")
private List<String> userStates;
// 在职状态
@ApiModelProperty("编制类别")
private List<String> preparedBys;
// 人员类型
@ApiModelProperty("人员类型")
private List<String> personTypes;
@ApiModelProperty("年龄区间")
private List<String> age;
@ApiModelProperty("性别")
private List<String> sexTypes;
@ApiModelProperty("人员类型(会员、福利会员之类的)")
private List<String> userTypes;
@ApiModelProperty("是否反选")
private Boolean reverseSelection;
@ApiModelProperty("导出字段")
private String props;
@ApiModelProperty("用户信息查询列表")
private List<String> userInfos;
}
@@ -52,7 +52,7 @@ public class MemberInfoPageForm extends PageForm {
@ApiModelProperty("在职状态")
private String userState;
@ApiModelProperty("编制类")
@ApiModelProperty("编制类")
private String preparedBy;
@ApiModelProperty("人员类型")
@@ -1,10 +1,12 @@
package com.budwk.app.zhgh.staffmanage.member.param.pageform;
import com.budwk.app.base.param.PageForm;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.List;
import java.util.Map;
/**
* @version 1.0
@@ -29,6 +31,9 @@ public class MemberStatisticsPageForm extends PageForm {
private Integer year;
@ApiModelProperty("人员Id")
private List<String> userIds;
private List<String> unionId;
private List<String> unitId;
@@ -59,4 +64,6 @@ public class MemberStatisticsPageForm extends PageForm {
private String memberSearchKeyWord;
@ApiModelProperty("导出的数据")
private List<Map<String, String>> columns;
}
@@ -0,0 +1,14 @@
package com.budwk.app.zhgh.staffmanage.member.service;
import com.budwk.app.base.service.BaseService;
import com.budwk.app.zhgh.staffmanage.member.models.check.MemberCheckTaskUser;
/**
* @version 1.0
* @Author zzr
* @nameMemberCheckTaskService
* @Date 2025/9/24 11:02
* @注释
*/
public interface MemberCheckTaskService extends BaseService<MemberCheckTaskUser> {
}
@@ -64,7 +64,8 @@ public interface MemberInfoService extends BaseService<Sys_user> {
/**
* 导入会员数据处理
* @param file
* @param file 文件
* @param isFlag 是否清空更新
*/
NutMap handlingMemberImport(TempFile file);
NutMap handlingMemberImport(TempFile file, Boolean isFlag);
}
@@ -0,0 +1,23 @@
package com.budwk.app.zhgh.staffmanage.member.service.impl;
import com.budwk.app.base.service.impl.BaseServiceImpl;
import com.budwk.app.zhgh.staffmanage.member.models.check.MemberCheckTask;
import com.budwk.app.zhgh.staffmanage.member.models.check.MemberCheckTaskUser;
import com.budwk.app.zhgh.staffmanage.member.service.MemberCheckTaskService;
import org.nutz.dao.Dao;
import org.nutz.ioc.loader.annotation.IocBean;
/**
* @version 1.0
* @Author zzr
* @nameMemberCheckTaskServiceImpl
* @Date 2025/9/24 11:22
* @注释
*/
@IocBean(args = {"refer:dao"})
public class MemberCheckTaskServiceImpl extends BaseServiceImpl<MemberCheckTaskUser> implements MemberCheckTaskService {
public MemberCheckTaskServiceImpl(Dao dao) {
super(dao);
}
}
@@ -5,6 +5,7 @@ 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.bean.BeanUtil;
import cn.hutool.core.util.DesensitizedUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import com.budwk.app.base.constant.RoleConstant;
@@ -23,6 +24,7 @@ import com.budwk.app.zhgh.staffmanage.member.vo.MemberImportVo;
import org.apache.poi.ss.formula.functions.T;
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;
@@ -63,64 +65,49 @@ public class MemberInfoServiceImpl extends BaseServiceImpl<Sys_user> implements
public Sql getSql(MemberInfoPageForm pageForm) {
Sql sql = Sqls.create("""
SELECT
id,
loginname,
username,
sex,
birthday,
mobile,
personType,
userState,
preparedBy,
unionId,
unionName,
unitId,
unitName,
education,
nation,
postDoctoralJoinDate
u.id,
u.loginname,
u.username,
u.sex,
DATE_FORMAT(u.birthday, '%Y-%m-%d') AS birthday,
u.political,
DATE_FORMAT(u.joinPartyDate, '%Y-%m-%d') AS joinPartyDate,
u.nation,
u.nativePlace,
u.nationality,
u.idCardType,
u.mobile,
u.idCard,
u.marriage,
u.education,
u.academicDegree,
u.position,
u.jobCategory,
u.professionalTitle,
u.professionalLevel,
u.employeeSource,
u.administrativeLevel,
u.positionSeries,
u.positionLevel,
u.administrativePositionLevel,
u.arrivalAtSchoolDate,
u.personType,
u.preparedBy,
u.identityType,
u.userState,
u.unionName,
u.unitName,
DATE_FORMAT(u.teachingTime, '%Y-%m-%d') AS teachingTime,
DATE_FORMAT(u.expectedLeaveSchoolDate, '%Y-%m-%d') AS expectedLeaveSchoolDate,
u.member,
DATE_FORMAT(u.postDoctoralJoinDate, '%Y-%m-%d') AS postDoctoralJoinDate
FROM
vw_user
vw_user u
$condition
""");
Cnd cnd = Cnd.NEW();
cnd.andEX("unionId", "=", pageForm.getUnionId());
cnd.andEX("unitId", "=", pageForm.getUnitId());
if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) {
SqlExpressionGroup seg = new SqlExpressionGroup();
seg.or("username", "like", "%" + pageForm.getSearchKeyword() + "%");
seg.or("loginname", "like", "%" + pageForm.getSearchKeyword() + "%");
cnd.and(seg);
}
if (StrUtil.isAllNotBlank(pageForm.getMemberSearchName(), pageForm.getMemberSearchKeyWord())) {
cnd.and(new SqlExpressionGroup().andLike(pageForm.getMemberSearchName(), pageForm.getMemberSearchKeyWord()));
}
if (Lang.isNotEmpty(pageForm.getPersonTypes())) {
cnd.andEX("personType", "in", pageForm.getPersonTypes());
}
if (Lang.isNotEmpty(pageForm.getPreparedBys())) {
cnd.andEX("preparedBy", "in", pageForm.getPreparedBys());
}
if (Lang.isNotEmpty(pageForm.getUserStates())) {
cnd.andEX("userState", "in", pageForm.getUserStates());
}
cnd.andEX("sex", "=", pageForm.getSex());
cnd.andEX("sex", "in", pageForm.getSexTypes());
cnd.and("member", "=", true);
if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) {
cnd.and("unionId", "=", SecurityUtil.getUnionId());
}
if(StrUtil.isAllBlank(pageForm.getPageOrderName(),pageForm.getPageOrderBy())){
cnd.asc("unionCode").asc("unitCode");
}else{
cnd.orderBy(pageForm.getPageOrderName(), PageUtil.getOrder(pageForm.getPageOrderBy()));
}
pageForm.buildSearch(cnd, "u.");
sql.setCondition(cnd);
return sql;
}
@@ -237,7 +224,7 @@ public class MemberInfoServiceImpl extends BaseServiceImpl<Sys_user> implements
exportEntities.add(new ExcelExportEntity("联系电话", "mobile", 20));
// exportEntities.add(new ExcelExportEntity("身份证号", "idCard", 30));
exportEntities.add(new ExcelExportEntity("在职状态", "userState", 20));
exportEntities.add(new ExcelExportEntity("聘用方式", "preparedBy", 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));
@@ -255,26 +242,58 @@ public class MemberInfoServiceImpl extends BaseServiceImpl<Sys_user> implements
public void exportMember(MemberInfoPageForm pageForm, HttpServletResponse response) {
Sql sql = getSql(pageForm);
List<NutMap> list = listMap(sql);
Workbook workbook = setHistoryExcelData(list);
for (NutMap row : list) {
row.put("mobile", DesensitizedUtil.mobilePhone(row.getString("mobile")));
row.put("idCard",DesensitizedUtil.idCardNum(row.getString("idCard"), 3, 4));
}
Workbook workbook = null;
if (Lang.isNotEmpty(pageForm.getColumns())) {
List<ExcelExportEntity> exportEntities = new ArrayList<>();
pageForm.getColumns().forEach(column -> {
exportEntities.add(new ExcelExportEntity(column.get("label"), column.get("prop"), 20));
});
ExportParams exportParams = new ExportParams();
exportParams.setType(ExcelType.XSSF);
workbook = ExcelExportUtil.exportExcel(exportParams, exportEntities, list);
} else {
workbook = setHistoryExcelData(list);
}
CommonDownloadUtil.download("会员档案表.xlsx", workbook, response);
}
@Aop(TransAop.READ_COMMITTED)
@Override
public NutMap handlingMemberImport(TempFile file) {
public NutMap handlingMemberImport(TempFile file, Boolean isFlag) {
Sys_role memberRole = dao().fetch(Sys_role.class, Cnd.where("`code`", "=", RoleConstant.MEMBER.name()));
Sys_role publicRole = dao().fetch(Sys_role.class, Cnd.where("`code`", "=", RoleConstant.PUBLIC.name()));
List<T> ts = EasyExcelUtil.syncReadModel(file.getFile(), MemberImportVo.class, 0, 1);
List<MemberImportVo> list = JSONUtil.parseArray(JSONUtil.toJsonStr(ts)).toList(MemberImportVo.class);
// 如果flag为true,文件里面没有但是系统里面有的会员,需要清空
if (isFlag) {
List<String> loginNameList = list.stream().map(MemberImportVo::getLoginname).toList();
Sql sql = Sqls.create("select id from sys_user where member = 1 and loginname not in (@loginNameList)").setParam("loginNameList", loginNameList);
sql.setCallback(Sqls.callback.strList());
dao().execute(sql);
List<String> userIds = sql.getList(String.class);
if (Lang.isNotEmpty(userIds)) {
dao().clear(Sys_user_role.class, Cnd.where("userId", "in", userIds).and("roleId", "=", memberRole.getId()));
dao().update(Sys_user.class, Chain.make("member", false), Cnd.where("id", "in", userIds));
}
}
// 获取系统用户
Cnd cnd = Cnd.NEW();
if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(),RoleConstant.SCHOOL_UNION_ADMIN.name())) {
cnd.and("unionId","=",SecurityUtil.getUnionId());
}
List<Sys_user> dataUserList = dao().query(Sys_user.class, cnd);
Map<String, Sys_user> userMap = dataUserList.stream().collect(Collectors.toMap(Sys_user::getLoginname, v -> v));
List<Sys_unit> unitList = dao().query(Sys_unit.class, Cnd.where("unitLevel", "is not", null).and("unitLevel", "!=", "").groupBy("name"));
List<Sys_unit> unitList = dao().query(Sys_unit.class, Cnd.where("unitTypeCode", "=", "1").groupBy("name"));
//单位名称,单位Id
Map<String, String> unitNameLevelTwoMap = unitList.stream().filter(v -> v.getUnitLevel() == 2).collect(Collectors.toMap(Sys_unit::getName, Sys_unit::getId));
@@ -360,9 +379,6 @@ public class MemberInfoServiceImpl extends BaseServiceImpl<Sys_user> implements
if (Lang.isNotEmpty(insertOrUpdateUserList)) {
manyAddOrRenewUtil.asyncExecuteInsertOrUpdate(insertOrUpdateUserList,200);
Sys_role memberRole = dao().fetch(Sys_role.class, Cnd.where("`code`", "=", RoleConstant.MEMBER.name()));
Sys_role publicRole = dao().fetch(Sys_role.class, Cnd.where("`code`", "=", RoleConstant.PUBLIC.name()));
dao().clear(Sys_user_role.class, Cnd.where("roleId","=", memberRole.getId()));
//新增用户赋值普通角色
@@ -372,7 +388,7 @@ public class MemberInfoServiceImpl extends BaseServiceImpl<Sys_user> implements
newUserSql.setCallback(Sqls.callback.maps());
dao().execute(newUserSql);
List<NutMap> newUserSqlList = newUserSql.getList(NutMap.class);
List<String> newUserIds = newUserSqlList.stream().map(user -> user.getString("id")).collect(Collectors.toList());
List<String> newUserIds = newUserSqlList.stream().map(user -> user.getString("id")).toList();
List<Sys_user_role> newUserRoles = newUserIds.stream().map(userId -> {
Sys_user_role sysUserRole = new Sys_user_role();
@@ -143,7 +143,7 @@ public class MemberManageServiceImpl extends BaseServiceImpl<Sys_user> implement
his.loginname,
his.username,
his.mobile,
his.birthday,
DATE_FORMAT(his.birthday, '%Y-%m-%d') AS birthday,
his.userState,
his.preparedBy,
his.personType,
@@ -85,6 +85,7 @@ public class MemberStatisticsServiceImpl extends BaseServiceImpl<Sys_user> imple
}
try {
handleField("id", pageForm.getUserIds(), reverseSelection, IN_OR_NIN_OP, cnd);
handleField("unionId", pageForm.getUnionId(), reverseSelection, IN_OR_NIN_OP, cnd);
handleField("unitId", pageForm.getUnitId(), reverseSelection, IN_OR_NIN_OP, cnd);
handleField("personType", pageForm.getPersonTypes(), reverseSelection, IN_OR_NIN_OP, cnd);
@@ -120,21 +121,27 @@ public class MemberStatisticsServiceImpl extends BaseServiceImpl<Sys_user> imple
u.loginname,
u.username,
u.sex,
u.birthday,
DATE_FORMAT(u.birthday, '%Y-%m-%d') AS birthday,
u.political,
u.joinPartyDate,
DATE_FORMAT(u.joinPartyDate, '%Y-%m-%d') AS joinPartyDate,
u.nation,
u.nativePlace,
u.nationality,
u.idCardType,
u.mobile,
u.idCard,
u.marriage,
u.education,
u.academicDegree,
u.technicalTitle,
u.technicalTitleLevel,
u.position,
u.jobCategory,
u.professionalTitle,
u.professionalLevel,
u.employeeSource,
u.administrativeLevel,
u.positionSeries,
u.positionLevel,
u.employeeLevel,
u.administrativePositionLevel,
u.arrivalAtSchoolDate,
u.personType,
u.preparedBy,
@@ -142,8 +149,10 @@ public class MemberStatisticsServiceImpl extends BaseServiceImpl<Sys_user> imple
u.userState,
u.unionName,
u.unitName,
DATE_FORMAT(u.teachingTime, '%Y-%m-%d') AS teachingTime,
DATE_FORMAT(u.expectedLeaveSchoolDate, '%Y-%m-%d') AS expectedLeaveSchoolDate,
u.member,
u.postDoctoralJoinDate
DATE_FORMAT(u.postDoctoralJoinDate, '%Y-%m-%d') AS postDoctoralJoinDate
FROM
$table
$hisUser
@@ -188,7 +197,7 @@ public class MemberStatisticsServiceImpl extends BaseServiceImpl<Sys_user> imple
}
if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) {
cnd.and("u.unionId", "in", SecurityUtil.getUnionId());
cnd.and("u.unionId", "=", SecurityUtil.getUnionId());
}
// cnd.desc("u.unitId");
cnd.desc("u.unionName,u.id");
@@ -109,7 +109,7 @@ public class SpecialStaffManageController {
BeanUtil.copyProperties(specialStaffVo, staff);
if (specialStaffVo.getIsManyUnit()!=null && specialStaffVo.getIsManyUnit()) {
// 如果是多单位人员, 更改单位为工会关系
// user.setUnitid(specialStaffVo.getUnionRelationUnitId());
user.setUnitId(specialStaffVo.getUnionRelationUnitId());
// user.setThreeUnitId(specialStaffVo.getUnionRelationThreeUnitId());
// user.setIsManyUnit(true);
dao.updateIgnoreNull(user);
@@ -136,9 +136,7 @@ public class SpecialStaffManageController {
public Result removeSpecialStaff(@Valid String userId) {
SpecialStaff staff = dao.fetch(SpecialStaff.class, Cnd.where("userId", "=", userId));
if (staff.getIsManyUnit()) {
dao.update(Sys_user.class, Chain.make("unitId", staff.getPersonnelRelationUnitId())
.add("threeUnitId", staff.getPersonnelRelationThreeUnitId())
.add("isManyUnit", null), Cnd.where("id", "=", userId));
dao.update(Sys_user.class, Chain.make("unitId", staff.getPersonnelRelationUnitId()), Cnd.where("id", "=", userId));
SysUserPublisher.notify(SysUserEvent.builder().userId(userId).memberChangeType(MemberChangeType.UNIT_CHANGE).build());
}
dao.clear(SpecialStaff.class, Cnd.where("userId", "=", userId));
@@ -88,13 +88,9 @@ public class SpecialStaffManageServiceImpl extends BaseServiceImpl<SpecialStaff>
id AS userId,
username,
loginname,
unitid AS personnelRelationUnitId,
unitname AS personnelRelationUnitName,
unionname AS personnelRelationUnionName,
threeUnitId AS personnelRelationThreeUnitId,
threeUnitName AS personnelRelationThreeUnitName,
unionGroupId AS personnelRelationUnionGroupId,
unionGroupName AS personnelRelationUnionGroupName,
unitId AS personnelRelationUnitId,
unitName AS personnelRelationUnitName,
unionName AS personnelRelationUnionName,
userState,
personType,
mobile
@@ -73,7 +73,7 @@ public class WelfareList extends BaseModel{
private String userState;
@Column
@Comment("聘用方式")
@Comment("编制类别")
@ColDefine(type = ColType.VARCHAR)
private String preparedBy;
@@ -46,7 +46,7 @@ public class WelfareFilterUserPageForm extends PageForm {
@ApiModelProperty("人员类型")
private String[] personTypes;
@ApiModelProperty("聘用方式")
@ApiModelProperty("编制类别")
private String[] preparedBys;
@ApiModelProperty("在职状态")
@@ -49,7 +49,7 @@ public class WelfareListPageForm extends PageForm {
@ApiModelProperty("人员类型")
private String[] personTypes;
@ApiModelProperty("聘用方式")
@ApiModelProperty("编制类别")
private String[] preparedBys;
@ApiModelProperty("在职状态")
@@ -598,7 +598,7 @@ public class WelfareListServiceImpl extends BaseServiceImpl<WelfareList> impleme
entities.add(new ExcelExportEntity("性别", "sex", 20));
entities.add(new ExcelExportEntity("出生日期", "birthday", 20));
entities.add(new ExcelExportEntity("人员类型", "personType", 20));
entities.add(new ExcelExportEntity("聘用方式", "preparedBy", 20));
entities.add(new ExcelExportEntity("编制类别", "preparedBy", 20));
entities.add(new ExcelExportEntity("在职状态", "userState", 20));
entities.add(new ExcelExportEntity("所属工会", "welfareUnionName", 20));
entities.add(new ExcelExportEntity("所属单位", "welfareUnitName", 20));
@@ -201,7 +201,7 @@ public class WelfareStatisticsServiceImpl extends BaseServiceImpl<WelfareProject
entities.add(new ExcelExportEntity("生日", "birthday", 20));
entities.add(new ExcelExportEntity("在职状态", "userState", 20));
entities.add(new ExcelExportEntity("教职工类别", "personType", 20));
entities.add(new ExcelExportEntity("聘用方式", "preparedBy", 20));
entities.add(new ExcelExportEntity("编制类别", "preparedBy", 20));
entities.add(new ExcelExportEntity("进站时间", "postDoctoralJoinDate", 20));
entities.add(new ExcelExportEntity("单位", "welfareUnitName", 20));
entities.add(new ExcelExportEntity("工会", "welfareUnionName", 20));
@@ -22,7 +22,7 @@
{{ 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.preparedBy }}</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="预计离退休时间">
@@ -128,7 +128,8 @@ module.exports = {
const loading = this.$loading({
lock: true,
text: "正在导入中,请稍后...",
spinner: "el-icon-loading"
spinner: "el-icon-loading",
background: "rgba(0, 0, 0, 0.7)"
})
this.$axios.post(this.post_url, data).then((res) => {
loading.close()
@@ -102,7 +102,7 @@ layout("/layouts/platform.html"){
{ prop: "loginName", label: "工号", sortable: true },
{ prop: "userName", label: "姓名", sortable: true },
{ prop: "userState", label: "在职状态", sortable: true },
{ prop: "preparedBy", label: "聘用方式", sortable: true },
{ prop: "preparedBy", label: "编制类别", sortable: true },
{ prop: "personType", label: "人员类型", sortable: true },
{ prop: "unionName", label: "所属工会", sortable: true },
{ prop: "unitName", label: "所属单位", sortable: true },
@@ -85,7 +85,7 @@ layout("/layouts/platform.html"){
{ prop: "loginName", label: "工号", sortable: true },
{ prop: "userName", label: "姓名", sortable: true },
{ prop: "userState", label: "在职状态", sortable: true },
{ prop: "preparedBy", label: "聘用方式", sortable: true },
{ prop: "preparedBy", label: "编制类别", sortable: true },
{ prop: "personType", label: "人员类型", sortable: true },
{ prop: "unionName", label: "所属工会", sortable: true },
{ prop: "unitName", label: "所属单位", sortable: true },
@@ -120,7 +120,7 @@ layout("/layouts/platform.html"){
{ prop: "loginName", label: "工号", sortable: true },
{ prop: "userName", label: "姓名", sortable: true },
{ prop: "userState", label: "在职状态", sortable: true },
{ prop: "preparedBy", label: "聘用方式", sortable: true },
{ prop: "preparedBy", label: "编制类别", sortable: true },
{ prop: "personType", label: "人员类型", sortable: true },
{ prop: "unionName", label: "所属工会", sortable: true },
{ prop: "unitName", label: "所属单位", sortable: true },
@@ -42,8 +42,8 @@ layout("/layouts/platform.html"){
<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 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>
@@ -245,7 +245,7 @@ layout("/layouts/platform.html"){
{ prop: "username", label: "姓名", sortable: true },
{ prop: "sex", label: "性别", sortable: true, width: "100px" },
{ prop: "userState", label: "在职状态", sortable: true },
// {prop: "preparedBy", label: "聘用方式", sortable: true},
// {prop: "preparedBy", label: "编制类别", sortable: true},
// {prop: 'personType', label: '人员类型', sortable: true},
{ prop: "unionName", label: "所属工会", sortable: true },
{ prop: "unitName", label: "所属单位", sortable: true },
@@ -32,6 +32,7 @@ const COMMON_QUERY = {
</search-item>
</search>
`,
store,
mixins: [initTableMixins],
data() {
return{
@@ -50,28 +50,30 @@ const INFO = {
</el-descriptions-item>
<el-descriptions-item></el-descriptions-item>
<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 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.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">
@@ -139,7 +139,7 @@ const MEMBER_CHANGE = {
:disabled="allowFields('userState')" style="width: 100%"></dict-select>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="编制类">
<el-descriptions-item label="编制类">
<el-form-item prop="preparedBy">
<dict-select v-model="formData.preparedBy" code="USER_PREPARED_BY_TYPE"
:disabled="allowFields('preparedBy')" style="width: 100%"></dict-select>
@@ -255,11 +255,15 @@ layout("/layouts/platform.html"){
},
async doSubmit(data) {
const resp = this.$axios.post("/platform/member/change/manage/doSubmitChange", data)
const loading = createLoading('正在提交中')
const resp = await this.$axios.post("/platform/member/change/manage/doSubmitChange", data)
loading.close()
if (resp.code === 0) {
this.$message.success(resp.msg)
this.$refs.guava.index()
this.pageData()
} else {
this.$message.error(resp.msg)
}
},
getChangeTypes(changeTypes){
@@ -62,7 +62,7 @@ layout("/layouts/platform.html"){
</el-table-column>
<el-table-column label="异动信息" header-align="center">
<el-table-column label="更新时间" prop="applyDateTime" min-width="145px"
<el-table-column label="更新时间" prop="changeTime" min-width="130px"
header-align="center"
sortable
align="center" show-overflow-tooltip>
@@ -88,7 +88,7 @@ layout("/layouts/platform.html"){
label="操作"
width="100px" fixed="right">
<template scope="{row}">
<el-button size="mini" type="primary" @click="openView(row.userId)">查看</el-button>
<el-button size="mini" type="primary" @click="openView(row)">查看</el-button>
</template>
</el-table-column>
</el-table>
@@ -27,8 +27,8 @@ const MEMBER_MANAGE_QUERY = {
<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"
<search-item label="编制类别">
<dict-select v-model="pageForm.preparedBy" placeholder="编制类别" @change="doSearch"
code="USER_PREPARED_BY_TYPE"></dict-select>
</search-item>
<search-item label="人员类型">
@@ -154,7 +154,7 @@ const MEMBER_MANAGE_TABLE = {
{ prop: "sex", label: "性别", sortable: true, width: "100px" },
{ prop: "birthday", label: "出生年月", sortable: true },
{ prop: "userState", label: "在职状态", sortable: true },
{ prop: "preparedBy", label: "聘用方式", sortable: true },
{ prop: "preparedBy", label: "编制类别", sortable: true },
{ prop: "personType", label: "人员类型", sortable: true },
{ prop: "unionName", label: "所属工会", sortable: true },
{ prop: "unitName", label: "所属单位", sortable: true }
@@ -8,8 +8,14 @@ layout("/layouts/platform.html"){
</el-card>
<el-card shadow="never" class="mt10">
<table-tool label="非会员列表"></table-tool>
<el-table :data="tableData" :size="tableSize" @sort-change="pageOrder" ref="table" row-key="id" style="width: 100%">
<table-tool label="非会员列表">
<el-button @click="doExport" size="mini" type="primary">导出</el-button>
<el-button :disabled="!selection || selection.length == 0"
@click="batchMake" size="mini" type="primary">批量设置为会员</el-button>
</table-tool>
<el-table :data="tableData" :size="tableSize" @sort-change="pageOrder" ref="table"
row-key="id" @selection-change="handleSelectionChange" style="width: 100%">
<el-table-column :reserve-selection="true" type="selection" width="55"></el-table-column>
<el-table-column :index="indexMethod" align="center" header-align="center"
label="序号" type="index" width="80px"></el-table-column>
<el-table-column :label="column.label"
@@ -30,6 +36,10 @@ layout("/layouts/platform.html"){
</el-table>
<!--#include("/layouts/pagination.html"){}#-->
</el-card>
<template #view>
<member-info ref="memberInfo"></member-info>
</template>
</guava>
</div>
<script>
@@ -44,29 +54,69 @@ layout("/layouts/platform.html"){
return {
pageForm: {},
tableColumns: [
{ prop: "loginName", label: "工号", sortable: true },
{ prop: "userName", label: "姓名", sortable: true },
{ 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: "preparedBy", label: "编制类", sortable: true },
{ prop: "preparedBy", label: "编制类", sortable: true },
{ prop: "unionName", label: "所属工会", sortable: true },
{ prop: "unitName", label: "所属单位", sortable: true },
]
],
selection: [],
}
},
components: {
"common-query": COMMON_QUERY,
"member-info": MEMBER_INFO
},
methods: {
// 查看会员
openView() {
// 查看信息
openView(row) {
this.$refs.guava.view(() => {
this.$refs.memberInfo.onOpen(row.id)
})
},
// 单个设置会员
singleMake(row) {
const data = [row.id]
const msg = "确定将【" + row.username + "】设置为会员吗?"
this.setMemberFun(msg, data)
},
// 批量设置会员
batchMake() {
const msg = "确定将【" + this.selection.length + "】条数据设置为会员吗?"
const data = this.selection.map(item => item.id)
this.setMemberFun(msg, data)
},
setMemberFun(msg, data) {
this.$confirm(msg, "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
}).then(async () => {
debugger
const loading = createLoading('正在提交中')
const resp = await this.$axios.post("/platform/member/info/batchMake/batchMake", {
userIds: JSON.stringify(data)
})
loading.close()
if (resp.code === 0) {
this.$message.success(resp.msg)
this.pageData()
this.selection = []
this.$refs.table.clearSelection()
} else {
this.$message.error(resp.msg)
}
})
},
doExport() {
},
handleSelectionChange(val){
this.selection = val;
},
search(pageForm) {
if (pageForm) {
@@ -18,20 +18,26 @@ const COMMON_QUERY = {
v-for="item in units"></el-option>
</el-select>
</search-item>
<search-item label="在职状态">
<search-item label="在职状态" v-if="!query_disable">
<dict-select v-model="pageForm.userStates" placeholder="在职状态" @change="doSearch"
code="USER_STATE" multiple collapse-tags></dict-select>
code="USER_STATE" multiple collapse-tags></dict-select>
</search-item>
<search-item label="人事编制">
<dict-select v-model="pageForm.preparedBys" placeholder="人事编制" @change="doSearch"
code="USER_PREPARED_BY_TYPE" multiple collapse-tags></dict-select>
</search-item>
<search-item label="人员类型">
<search-item label="人员类型" v-if="!query_disable">
<dict-select v-model="pageForm.personTypes" placeholder="人员类型" @change="doSearch"
code="USER_PERSON_TYPE" multiple collapse-tags></dict-select>
code="USER_PERSON_TYPE" multiple collapse-tags></dict-select>
</search-item>
</search>
`,
props: {
query_disable: {
type: Boolean,
default: false
}
},
mixins: [initTableMixins],
data() {
return{
@@ -59,7 +59,7 @@ layout("/layouts/platform.html"){
<div id="app">
<guava ref="guava">
<el-card shadow="never">
<common-query ref="commonQueryRef" @search="search"></common-query>
<common-query ref="commonQueryRef" @search="search" query_disable></common-query>
</el-card>
<el-card shadow="never">
@@ -208,7 +208,7 @@ layout("/layouts/platform.html"){
{ prop: "sex", label: "性别", sortable: true },
{ prop: "userState", label: "在职状态", sortable: true },
{ prop: "personType", label: "人员类型", sortable: true },
{ prop: "preparedBy", label: "编制类", sortable: true },
{ prop: "preparedBy", label: "编制类", sortable: true },
{ prop: "unionName", label: "所属工会", sortable: true },
{ prop: "unitName", label: "所属单位", sortable: true },
],
@@ -5,65 +5,7 @@ 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="性别">
<el-select v-model="pageForm.sexTypes" clearable multiple placeholder="性别">
<el-option label="男" value="男"></el-option>
<el-option label="女" value="女"></el-option>
</el-select>
</search-item>
<search-item label="在职状态">
<dict-select
clearable
code="USER_STATE"
multiple
collapse-tags
placeholder="请选择人员状态"
v-model="pageForm.userStates"
></dict-select>
</search-item>
<search-item label="人员类型">
<dict-select
clearable
code="USER_PERSON_TYPE"
multiple
collapse-tags
placeholder="请选择人员类型"
v-model="pageForm.personTypes"
></dict-select>
</search-item>
<search-item label="聘用方式">
<dict-select
clearable
code="USER_PREPARED_BY_TYPE"
multiple
collapse-tags
placeholder="请选择聘用方式"
v-model="pageForm.preparedBys"
></dict-select>
</search-item>
</search>
<common-query ref="commonQueryRef" @search="search"></common-query>
</el-card>
<el-card shadow="never" class="mt10">
@@ -79,6 +21,37 @@ layout("/layouts/platform.html"){
备份历史会员
</el-button>
<el-button type="primary" size="small" icon="el-icon-download" @click="exportMember">会员档案导出</el-button>
<el-popover
placement="bottom"
trigger="click"
width="200">
<!-- 点击外部/空白自动关闭,无需额外代码 -->
<div style="padding:4px 0;">
<el-button type="text" size="mini" @click="checkAll">全选</el-button>
<el-button type="text" size="mini" @click="invertCheck">反选</el-button>
</div>
<el-checkbox-group v-model="checkedFields">
<el-checkbox
v-for="f in tableColumns"
:key="f.prop"
:label="f.prop"
style="display:block;margin:6px 0;">
{{ f.label }}
</el-checkbox>
</el-checkbox-group>
<!-- 触发器:文字按钮 -->
<el-button
slot="reference"
type="text"
icon="el-icon-s-operation"
size="small"
style="margin-left:12px;">
列设置
</el-button>
</el-popover>
</table-tool>
<el-table :data="tableData" style="width: 100%" row-key="id" @sort-change="pageOrder" :size="tableSize" class="vi-table">
@@ -86,6 +59,7 @@ layout("/layouts/platform.html"){
align="center"
header-align="center"
type="index"
fixed="left"
:index="indexMethod"
label="序号"
width="80px"
@@ -95,7 +69,9 @@ layout("/layouts/platform.html"){
align="center"
header-align="center"
v-for="column in tableColumns"
v-if="checkedFields.includes(column.prop)"
:label="column.label"
:fixed="column.fixed"
:prop="column.prop"
:sortable="column.sortable"
:width="column.width"
@@ -113,7 +89,7 @@ layout("/layouts/platform.html"){
</template>
<template #view>
<member-info ref="applyInfoRef"></member-info>
<member-info ref="infoRef"></member-info>
</template>
</guava>
@@ -122,6 +98,7 @@ layout("/layouts/platform.html"){
<el-dialog title="会员导入" :visible.sync="importDialog" width="50%" :close-on-click-modal="false" :close-on-press-escape="false">
<file-import
ref="viewImport"
is_show_radio
temp_url="/platform/member/info/group/downloadMemberTemplate"
post_url="/platform/member/info/group/importMember"
@flush="successImport"
@@ -129,52 +106,57 @@ layout("/layouts/platform.html"){
</el-dialog>
</div>
<script>
<!--#include("archiveMember.js"){}#-->
<!--#include("../common/commonQuery.js"){}#-->
<!--#include("../../common/info/memberInfo.js"){}#-->
<!--#include("archiveMember.js"){}#-->
new Vue({
el: "#app",
mixins: [initTableMixins],
data() {
return {
pageForm: {
searchKeyword: "",
unionId: "",
unitId: "",
personTypes: [],
preparedBys: [],
userStates: [],
sexTypes: [],
totalCount: 0,
cnd: ""
},
userId: "",
unions: [],
units: [],
tableColumns: [
{ prop: "loginname", label: "工号" },
{ prop: "username", label: "姓名" },
{ prop: "sex", label: "性别" },
{ prop: "birthday", label: "出生年月", sortable: true },
{ prop: "mobile", label: "联系电话" },
{ 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 }
],
personTypeOptions: [],
preparedByOptions: [],
userStateOptions: [],
pageForm: {},
tableColumns: [
{ prop: "loginname", label: "工号", width: 120, fixed: "left"},
{ prop: "username", label: "姓名", width: 120, fixed: "left" },
{ prop: "sex", label: "性别", width: 120},
{ prop: "birthday", label: "出生年月", width: 120, sortable: true },
{ prop: "nationality", label: "国籍", width: 120, sortable: true, checked: 0 },
{ prop: "nation", label: "民族", width: 120, sortable: true},
{ prop: "mobile", label: "联系电话", width: 120 },
{ prop: "political", label: "政治面貌", width: 120, sortable: true},
{ prop: "userState", label: "在职状态", width: 120, sortable: true },
{ prop: "personType", label: "教职工类别", width: 120, sortable: true },
{ prop: "preparedBy", label: "编制类别", width: 120, sortable: true },
{ prop: "postDoctoralJoinDate", label: "进站时间", sortable: true, checked: 0 },
{ prop: "unionName", label: "所属工会", width: 120, sortable: true },
{ prop: "unitName", label: "所属单位", width: 120, sortable: true },
{ prop: "idCardType", label: "证件类型", width: 120, sortable: true, checked: 0 },
{ prop: "idCard", label: "证件号码", width: 120, sortable: true, checked: 0 },
{ prop: "marriage", label: "婚姻状况", width: 120, sortable: true, checked: 0 },
{ prop: "jobCategory", label: "岗位类别", width: 120, sortable: true, checked: 0 },
{ prop: "professionalTitle", label: "职称", width: 120, sortable: true, checked: 0 },
{ prop: "professionalLevel", label: "职级", width: 120, sortable: true, checked: 0 },
{ prop: "employeeSource", label: "职工来源", width: 120, sortable: true, checked: 0 },
{ prop: "administrativeLevel", label: "行政级别(管理岗位)", width: 120, sortable: true, checked: 0 },
{ prop: "positionSeries", label: "岗位系列", width: 120, sortable: true, checked: 0 },
{ prop: "positionLevel", label: "岗级", width: 120, sortable: true, checked: 0 },
{ prop: "administrativePositionLevel", label: "行政岗级", width: 120, sortable: true, checked: 0 },
{ prop: "arrivalAtSchoolDate", label: "来校时间", width: 120, sortable: true, checked: 0 },
{ prop: "teachingTime", label: "从教年月", width: 120, sortable: true, checked: 0 },
{ prop: "expectedLeaveSchoolDate", label: "预计/最后离校时间", width: 120, sortable: true, checked: 0 },
],
checkedFields: [],
importDialog: false
}
},
components: {
"member-cnd": httpVueLoader("/components/module/member/MemberCnd.vue?v=" + new Date().getTime()),
"file-import": httpVueLoader("/components/plugins/sysImport/index.vue?v=" + new Date().getTime()),
"archive-member": ARCHIVE_MEMBER,
"member-info": MEMBER_INFO
"member-info": MEMBER_INFO,
"common-query": COMMON_QUERY,
},
methods: {
openImport() {
@@ -182,12 +164,14 @@ layout("/layouts/platform.html"){
},
successImport() {
this.importDialog = false
this.pageData()
},
exportMember() {
const pageForm = clone(this.pageForm)
pageForm.userStates = JSON.stringify(this.pageForm.userStates)
pageForm.personTypes = JSON.stringify(this.pageForm.personTypes)
pageForm.preparedBys = JSON.stringify(this.pageForm.preparedBys)
this.$downLoad(loc() + "/exportMember", pageForm)
},
openArchive() {
@@ -195,9 +179,16 @@ layout("/layouts/platform.html"){
},
openView(userId) {
this.$refs.guava.view(() => {
this.$refs.applyInfoRef.onOpen(userId)
this.$refs.infoRef.onOpen(userId)
})
},
search(pageForm) {
this.pageForm = {
...this.pageForm,
...pageForm,
}
this.pageData()
},
pageData() {
this.tableLoading = true
const pageForm = clone(this.pageForm)
@@ -217,29 +208,23 @@ layout("/layouts/platform.html"){
this.tableLoading = false
})
},
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(store?.state.user.union.id)
this.units = await this.$businessTool.listUnit(store?.state.user.union.id)
}
this.personTypeOptions = await this.$businessTool.getDictOptions("USER_STAFF_TYPE")
this.preparedByOptions = await this.$businessTool.getDictOptions("USER_EMPLOYMENT_TYPE")
this.userStateOptions = await this.$businessTool.getDictOptions("USER_STATE")
},
async flushUnits() {
this.$set(this.pageForm, "unitId", null)
this.units = []
if (this.pageForm.unionId) {
this.units = await this.$businessTool.listUnit(this.pageForm.unionId)
}
}
checkAll() {
this.checkedFields = this.tableColumns.map(c => c.prop);
},
invertCheck() {
const all = this.tableColumns.map(c => c.prop);
this.checkedFields = all.filter(p => !this.checkedFields.includes(p));
}
},
computed: {
showColumns() {
return this.tableColumns.filter(c => this.checkedFields.includes(c.prop));
}
},
created() {
this.checkedFields = this.tableColumns.filter(c => c.checked !== 0).map(c => c.prop);
this.pageData()
this.initData()
}
})
</script>
@@ -43,10 +43,10 @@ layout("/layouts/platform.html"){
<search-item label="在职状态">
<dict-select v-model="pageForm.userState" placeholder="在职状态" @change="doSearch" code="USER_STATE"></dict-select>
</search-item>
<search-item label="聘用方式">
<search-item label="编制类别">
<dict-select
v-model="pageForm.preparedBy"
placeholder="聘用方式"
placeholder="编制类别"
@change="doSearch"
code="USER_PREPARED_BY_TYPE"
></dict-select>
@@ -120,7 +120,7 @@ layout("/layouts/platform.html"){
{ prop: "sex", label: "性别" },
{ prop: "mobile", label: "联系电话" },
{ prop: "userState", label: "在职状态", sortable: true },
{ prop: "preparedBy", label: "聘用方式", sortable: true },
{ prop: "preparedBy", label: "编制类别", sortable: true },
{ prop: "personType", label: "人员类型", sortable: true },
{ prop: "unionName", label: "所属工会", sortable: true },
{ prop: "unitName", label: "所属单位", sortable: true }
@@ -19,8 +19,8 @@ const SCHOOL_VIEW_AND_HANDLE = {
<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"
<search-item label="编制类别">
<dict-select v-model="pageForm.preparedBy" placeholder="编制类别" @change="doSearch"
code="USER_PREPARED_BY_TYPE"></dict-select>
</search-item>
<search-item label="人员类型">
@@ -140,7 +140,7 @@ const SCHOOL_VIEW_AND_HANDLE = {
{ label: "工号", prop: "loginname" },
{ label: "性别", prop: "sex" },
{ label: "在职状态", prop: "userState" },
{ label: "聘用方式", prop: "preparedBy" },
{ label: "编制类别", prop: "preparedBy" },
{ label: "人员类型", prop: "personType" },
{ label: "所属单位", prop: "unitName" },
{ label: "是否变更", prop: "isChanged" },
@@ -17,8 +17,8 @@ const VIEW_CHANGE_TYPE_USER = {
<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"
<search-item label="编制类别">
<dict-select v-model="pageForm.preparedBy" placeholder="编制类别" @change="doSearch"
code="USER_PREPARED_BY_TYPE"></dict-select>
</search-item>
<search-item label="人员类型">
@@ -76,7 +76,7 @@ const VIEW_CHANGE_TYPE_USER = {
{ prop: "loginname", label: "工号", sortable: true },
{ prop: "username", label: "姓名", sortable: true },
{ prop: "userState", label: "在职状态", sortable: true },
{ prop: "preparedBy", label: "聘用方式", sortable: true },
{ prop: "preparedBy", label: "编制类别", sortable: true },
{ prop: "personType", label: "人员类型", sortable: true },
{ prop: "unionName", label: "所属工会", sortable: true },
{ prop: "unitName", label: "所属单位", sortable: true },
@@ -32,8 +32,8 @@ const VERIFICATION_SET_USER_LIST = {
<dict-select v-model="pageForm.personType" placeholder="人员类型" @change="doSearch"
code="USER_PERSON_TYPE"></dict-select>
</search-item>
<search-item label="聘用方式">
<dict-select v-model="pageForm.preparedBy" placeholder="聘用方式" @change="doSearch"
<search-item label="编制类别">
<dict-select v-model="pageForm.preparedBy" placeholder="编制类别" @change="doSearch"
code="USER_PREPARED_BY_TYPE"></dict-select>
</search-item>
<search-item label="变更类型">
@@ -26,8 +26,8 @@ const VERIFICATION_SHOW_SELECTION_USERS = {
<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"
<search-item label="编制类别">
<dict-select v-model="pageForm.preparedBy" placeholder="编制类别" @change="doSearch"
code="USER_PREPARED_BY_TYPE"></dict-select>
</search-item>
<search-item label="人员类型">
@@ -43,7 +43,7 @@ const VERIFICATION_SHOW_SELECTION_USERS = {
<el-table-column label="姓名" prop="username"></el-table-column>
<el-table-column label="性别" prop="sex"></el-table-column>
<el-table-column label="在职状态" prop="userState"></el-table-column>
<el-table-column label="聘用方式" prop="preparedBy"></el-table-column>
<el-table-column label="编制类别" prop="preparedBy"></el-table-column>
<el-table-column label="人员类型" prop="personType"></el-table-column>
<el-table-column label="所属工会" prop="unionName"></el-table-column>
<el-table-column label="所属单位" prop="unitName"></el-table-column>
@@ -47,7 +47,39 @@ layout("/layouts/platform.html"){
<el-option label="无工会" value="false"></el-option>
</el-select>
<el-button icon="el-icon-printer" type="primary" style="float: right" size="small" @click="doExport">导出</el-button>
<el-button icon="el-icon-printer" type="primary" size="small" @click="doExport">导出</el-button>
<el-popover
placement="bottom"
trigger="click"
width="200">
<!-- 点击外部/空白自动关闭,无需额外代码 -->
<div style="padding:4px 0;">
<el-button type="text" size="mini" @click="checkAll">全选</el-button>
<el-button type="text" size="mini" @click="invertCheck">反选</el-button>
</div>
<el-checkbox-group v-model="checkedFields">
<el-checkbox
v-for="f in tableColumns"
:key="f.prop"
:label="f.prop"
style="display:block;margin:6px 0;">
{{ f.label }}
</el-checkbox>
</el-checkbox-group>
<!-- 触发器:文字按钮 -->
<el-button
slot="reference"
type="text"
icon="el-icon-s-operation"
size="small"
style="margin-left:12px;">
列设置
</el-button>
</el-popover>
</table-tool>
<el-table
:data="tableData"
@@ -62,6 +94,7 @@ layout("/layouts/platform.html"){
align="center"
header-align="center"
type="index"
fixed="left"
:index="indexMethod"
label="序号"
width="80px"
@@ -71,9 +104,11 @@ layout("/layouts/platform.html"){
header-align="center"
v-for="column in tableColumns"
show-overflow-tooltip
v-if="checkedFields.includes(column.prop)"
:label="column.label"
:prop="column.prop"
:width="column.width"
:fixed="column.fixed"
:sortable="column.sortable"
>
<template v-if="column.prop==='memberJoinTime'" scope="{row}">{{$moment(row.memberJoinTime).format('YYYY-MM-DD')}}</template>
@@ -83,7 +118,7 @@ layout("/layouts/platform.html"){
</template>
</el-table-column>
<el-table-column align="center" header-align="center" label="操作" width="100px">
<el-table-column align="center" header-align="center" label="操作" width="100px" fixed="right">
<template scope="{row}">
<el-button size="mini" @click="openView(row.id)" type="primary">查看</el-button>
</template>
@@ -114,20 +149,38 @@ layout("/layouts/platform.html"){
units: [],
childrenData: {},
tableColumns: [
{ prop: "loginname", label: "工号", fixed: "left" },
{ prop: "username", label: "姓名", fixed: "left" },
{ prop: "sex", label: "性别" },
{ prop: "loginname", label: "工号", width: 120, fixed: "left"},
{ prop: "username", label: "姓名", width: 120, fixed: "left" },
{ prop: "sex", label: "性别", width: 120},
{ prop: "birthday", label: "出生年月", width: 120, sortable: true },
{ prop: "mobile", label: "联系电话" },
{ prop: "nationality", label: "国籍", width: 120, sortable: true, checked: 0 },
{ prop: "nation", label: "民族", width: 120, sortable: true},
{ prop: "mobile", label: "联系电话", width: 120 },
{ prop: "political", label: "政治面貌", width: 120, sortable: true},
{ prop: "userState", label: "在职状态", width: 120, sortable: true },
{ prop: "personType", label: "教职工类别", width: 120, sortable: true },
{ prop: "preparedBy", label: "聘用方式", width: 120, sortable: true },
{ prop: "postDoctoralJoinDate", label: "进站时间", sortable: true },
{ prop: "identityType", label: "身份类型", width: 120, sortable: true },
{ prop: "preparedBy", label: "编制类别", width: 120, sortable: true },
{ prop: "postDoctoralJoinDate", label: "进站时间", sortable: true, checked: 0 },
{ prop: "unionName", label: "所属工会", width: 120, sortable: true },
{ prop: "unitName", label: "所属单位", width: 120, sortable: true },
{ prop: "arrivalAtSchoolDate", label: "来校年月", width: 120, sortable: true }
]
{ prop: "idCardType", label: "证件类型", width: 120, sortable: true, checked: 0 },
{ prop: "idCard", label: "证件号码", width: 120, sortable: true, checked: 0 },
{ prop: "marriage", label: "婚姻状况", width: 120, sortable: true, checked: 0 },
{ prop: "jobCategory", label: "岗位类别", width: 120, sortable: true, checked: 0 },
{ prop: "professionalTitle", label: "职称", width: 120, sortable: true, checked: 0 },
{ prop: "professionalLevel", label: "职级", width: 120, sortable: true, checked: 0 },
{ prop: "employeeSource", label: "职工来源", width: 120, sortable: true, checked: 0 },
{ prop: "administrativeLevel", label: "行政级别(管理岗位)", width: 120, sortable: true, checked: 0 },
{ prop: "positionSeries", label: "岗位系列", width: 120, sortable: true, checked: 0 },
{ prop: "positionLevel", label: "岗级", width: 120, sortable: true, checked: 0 },
{ prop: "administrativePositionLevel", label: "行政岗级", width: 120, sortable: true, checked: 0 },
{ prop: "arrivalAtSchoolDate", label: "来校时间", width: 120, sortable: true, checked: 0 },
{ prop: "teachingTime", label: "从教年月", width: 120, sortable: true, checked: 0 },
{ prop: "expectedLeaveSchoolDate", label: "预计/最后离校时间", width: 120, sortable: true, checked: 0 },
],
checkedFields: []
}
},
components: {
@@ -142,12 +195,17 @@ layout("/layouts/platform.html"){
},
doExport() {
const pageForm = clone(this.pageForm)
pageForm.userIds = JSON.stringify(this.pageForm.userIds)
pageForm.unionId = JSON.stringify(this.pageForm.unionId)
pageForm.unitId = JSON.stringify(this.pageForm.unitId)
pageForm.sexTypes = JSON.stringify(this.pageForm.sexTypes)
pageForm.memberTypes = JSON.stringify(this.pageForm.memberTypes)
pageForm.personTypes = JSON.stringify(this.pageForm.personTypes)
pageForm.userStates = JSON.stringify(this.pageForm.userStates)
const data = this.tableColumns.filter(item => this.checkedFields.includes(item.prop)).map(item => {
return {prop: item.prop, label: item.label}
})
pageForm.columns = JSON.stringify(data)
this.$downLoad("/platform/member/statistics/comprehensive/doExport", pageForm)
},
search(pageForm) {
@@ -159,6 +217,7 @@ layout("/layouts/platform.html"){
},
pageData() {
const pageForm = clone(this.pageForm)
pageForm.userIds = JSON.stringify(this.pageForm.userIds)
pageForm.age = JSON.stringify(this.pageForm.age)
pageForm.unionId = JSON.stringify(this.pageForm.unionId)
pageForm.unitId = JSON.stringify(this.pageForm.unitId)
@@ -188,7 +247,22 @@ layout("/layouts/platform.html"){
this.$message.error(res.msg)
}
})
},
checkAll() {
this.checkedFields = this.tableColumns.map(c => c.prop);
},
invertCheck() {
const all = this.tableColumns.map(c => c.prop);
this.checkedFields = all.filter(p => !this.checkedFields.includes(p));
}
},
computed: {
showColumns() {
return this.tableColumns.filter(c => this.checkedFields.includes(c.prop));
}
},
mounted() {
this.checkedFields = this.tableColumns.filter(c => c.checked !== 0).map(c => c.prop);
}
})
</script>
@@ -1,59 +1,27 @@
const MEMBER_STATISTICS_COMPREHENSIVE_QUERY_FORM = {
template: /*language=HTML*/ `
<el-card shadow="never">
<el-row type="flex" align="middle" class="query-row">
<el-col class="query-row-title">&emsp;&emsp;</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-row class="query-row">
<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-select
clearable
v-model="pageForm.userIds"
filterable
remote
collapse-tags
placeholder="输入工号或者姓名查找"
:remote-method="queryUser"
@change="doSearch"
style="width: 100%"
multiple
>
<el-option v-for="o in userList" :label="o.username + '(' + o.loginname + ')'" :value="o.id"
:key="o.id"></el-option>
</el-select>
</el-col>
</el-row>
<el-row class="query-row">
<el-col class="query-row-title">性别</el-col>
<el-col class="query-row-content">
@@ -69,6 +37,31 @@ const MEMBER_STATISTICS_COMPREHENSIVE_QUERY_FORM = {
</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 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">
@@ -119,31 +112,32 @@ const MEMBER_STATISTICS_COMPREHENSIVE_QUERY_FORM = {
</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-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: 38px;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" type="flex" align="middle">
<el-col class="query-row-title">出生日期</el-col>
<el-col class="query-row-content">
@@ -202,7 +196,9 @@ const MEMBER_STATISTICS_COMPREHENSIVE_QUERY_FORM = {
store,
data() {
return {
userList: [],
pageForm: {
userIds: [],
isUnit: "",
isUnion: "",
unionId: [],
@@ -247,6 +243,10 @@ const MEMBER_STATISTICS_COMPREHENSIVE_QUERY_FORM = {
"member-cnd": httpVueLoader("/components/module/member/MemberCnd.vue?v=" + new Date().getTime())
},
methods: {
async queryUser(val) {
const resp = await $.get("/open/common/userOptions", {query: val})
this.userList = resp.data
},
determineEndDate() {
if (this.pageForm.startDate) {
if (Date.parse(this.pageForm.startDate) > Date.parse(this.pageForm.endDate)) {
@@ -310,7 +310,7 @@ const MEMBER_STATISTICS_COMPREHENSIVE_QUERY_FORM = {
this.doSearch()
},
doReset() {
this.pageForm.userId = []
this.pageForm.userIds = []
this.pageForm.memberTypes = []
this.pageForm.sexTypes = []
this.pageForm.personTypes = []
@@ -133,20 +133,7 @@ layout("/layouts/platform.html"){
</el-form-item>
</el-col>
</el-row>
<template v-if="isThreeUnit">
<el-row :gutter="10">
<el-col :span="12">
<el-form-item label="所属科室(人事关系)" prop="personnelRelationThreeUnitName">
<el-input v-model="formData.personnelRelationThreeUnitName" placeholder="请输入工号或姓名查询,查询后自动读取" readonly></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="工会小组(人事关系)" prop="personnelRelationUnionGroupName">
<el-input v-model="formData.personnelRelationUnionGroupName" placeholder="请输入工号或姓名查询,查询后自动读取" readonly></el-input>
</el-form-item>
</el-col>
</el-row>
</template>
<el-row :gutter="10">
<el-col :span="12">
<el-form-item label="特殊人员类型" prop="specialStaffType">
@@ -179,35 +166,6 @@ layout("/layouts/platform.html"){
</el-form-item>
</el-col>
</el-row>
<template v-if="isThreeUnit">
<el-row :gutter="10">
<el-col :span=12>
<el-form-item label="所属科室(工会关系)" prop="unionRelationThreeUnitId">
<el-select
v-model="formData.unionRelationThreeUnitId"
filterable
clearable
:disabled="isView"
placeholder="请选择工会关系所属科室"
style="width: 100%"
@change="unionRelationThreeUnitChange"
>
<el-option
v-for="unit in threeUnits"
:key="unit.id"
:label="unit.name"
:value="unit.id"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span=12>
<el-form-item label="工会小组(工会关系)" prop="unionRelationUnionGroupName">
<el-input :value="formData.unionRelationUnionGroupName" placeholder="请选择工会关系所属科室,查询后自动读取" readonly></el-input>
</el-form-item>
</el-col>
</el-row>
</template>
</template>
@@ -366,38 +324,18 @@ layout("/layouts/platform.html"){
}
},
unionRelationUnitChange(v) {
this.$set(this.formData, 'unionRelationThreeUnitId', null)
this.$set(this.formData, 'unionRelationUnionGroupName', null)
this.threeUnits = []
if (v) {
this.getThreeUnits(v)
}
const unit = this.units.find((item) => item.id === v)
if (unit) {
this.$set(this.formData, "unionRelationUnitId", unit.id)
this.$set(this.formData, "unionRelationUnitName", unit.name)
this.$set(this.formData, "unionRelationUnionId", unit.unionid)
this.$set(this.formData, "unionRelationUnionName", unit.unionname)
this.$set(this.formData, "unionRelationUnionId", unit.unionId)
this.$set(this.formData, "unionRelationUnionName", unit.unionName)
} else {
this.$set(this.formData, "unionRelationUnionId", null)
this.$set(this.formData, "unionRelationUnionName", null)
}
},
unionRelationThreeUnitChange(val) {
if (val) {
const threeUnit = this.threeUnits.find(v => v.id === val)
const groupName = threeUnit.groupname ? threeUnit.groupname : null
this.$set(this.formData, 'unionRelationThreeUnitId', threeUnit.id)
this.$set(this.formData, 'unionRelationThreeUnitName', threeUnit.name)
this.$set(this.formData, 'unionRelationUnionGroupId', threeUnit.uniongroupid)
this.$set(this.formData, 'unionRelationUnionGroupName', groupName)
} else {
this.$set(this.formData, 'unionRelationUnionGroupName', null)
}
},
async getThreeUnits(val) {
this.threeUnits = await threeUnitsByUnionGroupOrUnitId(val)
},
queryUser(keyWord, flag = true) {
if (!keyWord) {
return
@@ -428,7 +366,7 @@ layout("/layouts/platform.html"){
this.$set(this.pageForm, "unitId", null)
this.units = []
if (this.pageForm.unionId) {
this.unions = await getUnions()
this.units = this.$businessTool.listUnit(this.pageForm.unionId)
}
},
async initData() {
@@ -436,13 +374,10 @@ layout("/layouts/platform.html"){
this.specialStaffTypeList = data
})
this.unionRelationUnionOptions = await this.$businessTool.listUnion()
this.$businessTool.listUnit().then((data) => {
this.units = data
})
this.units = await this.$businessTool.listUnit()
},
},
async created() {
// this.isThreeUnit = await getConfigKey('isThreeUnit') === 'true'
this.initData()
this.pageData()
},
@@ -84,7 +84,7 @@ const filterUser = {
v-model="pageForm.personTypes"></dict-select>
</search-item>
<search-item label="聘用方式">
<search-item label="编制类别">
<dict-select clearable code="USER_PREPARED_BY_TYPE"
multiple
collapse-tags
@@ -169,7 +169,7 @@ const filterUser = {
{ prop: "sex", label: "性别", sortable: true, checked: 0 },
{ prop: "birthday", label: "出生日期", sortable: true, checked: 0 },
{ prop: "personType", label: "人员类型", sortable: true },
{ prop: "preparedBy", label: "聘用方式", sortable: true },
{ prop: "preparedBy", label: "编制类别", sortable: true },
{ prop: "userState", label: "在职状态", sortable: true },
{ prop: "unionName", label: "所属工会", sortable: true },
{ prop: "unitName", label: "所属单位", sortable: true }
@@ -51,7 +51,7 @@ const selectedUser = {
{ label: "生日", prop: "birthday" },
{ prop: "userState", label: "在职状态", width: 120, sortable: true },
{ prop: "personType", label: "教职工类别", width: 120, sortable: true },
{ prop: "preparedBy", label: "聘用方式", width: 120, sortable: true },
{ prop: "preparedBy", label: "编制类别", width: 120, sortable: true },
{ prop: "postDoctoralJoinDate", label: "进站时间", sortable: true },
{ label: "单位", prop: "welfareUnitName" },
{ label: "手机号", prop: "mobile" },
@@ -50,7 +50,7 @@ const unSelectedUser = {
{ label: "生日", prop: "birthday" },
{ prop: "userState", label: "在职状态", width: 120, sortable: true },
{ prop: "personType", label: "教职工类别", width: 120, sortable: true },
{ prop: "preparedBy", label: "聘用方式", width: 120, sortable: true },
{ prop: "preparedBy", label: "编制类别", width: 120, sortable: true },
{ prop: "postDoctoralJoinDate", label: "进站时间", sortable: true },
{ label: "单位", prop: "welfareUnitName" }
]
@@ -86,7 +86,7 @@ const addUser = {
v-model="pageForm.personTypes"></dict-select>
</search-item>
<search-item label="聘用方式">
<search-item label="编制类别">
<dict-select clearable code="USER_PREPARED_BY_TYPE"
multiple
collapse-tags
@@ -175,7 +175,7 @@ const addUser = {
{ prop: "sex", label: "性别", sortable: true, checked: 0 },
{ prop: "birthday", label: "出生日期", sortable: true, checked: 0 },
{ prop: "personType", label: "人员类型", sortable: true },
{ prop: "preparedBy", label: "聘用方式", sortable: true },
{ prop: "preparedBy", label: "编制类别", sortable: true },
{ prop: "userState", label: "在职状态", sortable: true },
{ prop: "unionName", label: "所属工会", sortable: true },
{ prop: "unitName", label: "所属单位", sortable: true }
@@ -98,7 +98,7 @@ layout("/layouts/platform.html"){
></dict-select>
</search-item>
<search-item label="聘用方式">
<search-item label="编制类别">
<dict-select
clearable
code="USER_PREPARED_BY_TYPE"
@@ -265,7 +265,7 @@ layout("/layouts/platform.html"){
{ prop: "sex", label: "性别", sortable: true, checked: 0 },
{ prop: "birthday", label: "出生日期", sortable: true, checked: 0 },
{ prop: "personType", label: "人员类型", sortable: true },
{ prop: "preparedBy", label: "聘用方式", sortable: true },
{ prop: "preparedBy", label: "编制类别", sortable: true },
{ prop: "userState", label: "在职状态", sortable: true },
{ prop: "welfareUnionName", label: "所属工会", sortable: true },
{ prop: "welfareUnitName", label: "所属单位", sortable: true },