Compare commits

21 Commits
Author SHA1 Message Date
c-chenxs1 1ddfa7e609 feat: 经费预算管理2 2026-11-05 19:39:22 +08:00
c-chenxs1 e7fbf4021e feat: 经费预算管理 2026-11-05 19:23:13 +08:00
c-chenxs1 c21e92e418 feat: 疗休养UI优化2 2026-11-05 17:42:34 +08:00
c-chenxs1 134a11da09 feat: 疗休养UI优化 2026-11-05 16:17:06 +08:00
c-chenxs1 506121ac5f feat: 疗休养优化站内消息发送 2026-11-05 10:23:11 +08:00
c-chenxs1 8c401a5132 feat: 疗休养优化布局 2026-11-05 10:09:39 +08:00
c-chenxs1 4d9fd57d6c feat: 疗休养优化移动端 2026-11-05 08:37:27 +08:00
c-chenxs1 fd117b4fc3 feat: 疗休养优化2 2026-11-04 18:12:51 +08:00
c-chenxs1 060e8d5bc7 feat: 疗休养优化 2026-11-04 17:11:14 +08:00
c-chenxs1 894c720bb8 feat: 优化福利2 2026-11-03 20:35:12 +08:00
c-chenxs1 39ee74f0a9 feat: 优化福利 2026-11-03 20:20:59 +08:00
c-chenxs1 7faa2730b5 feat: 同步人员时按人员类型或在职状态设置工会会员标记 2026-11-03 17:41:57 +08:00
c-chenxs1 fa019786d6 feat: 完善人员数据同步与筛选
- 在人员来源表中保存专业技术职务代码 ZYJSZWDM
- 支持按所属单位、在职状态和人员类型筛选空数据
- 在获取信息中心数据和更新系统用户数据页面添加搜索重置按钮
- 同步人员时按人员类型或在职状态设置工会会员标记
2026-11-03 17:30:29 +08:00
c-chenxs1 ffe782e538 feat: 人员映射 2026-11-03 15:06:04 +08:00
c-chenxs1 3c65c9d561 feat: 同步职工慰问和困难帮扶 2026-11-02 18:12:23 +08:00
c-chenxs1 89a77c41af Merge branch 'master' into feat_本工会单独业务 2026-11-02 11:30:59 +08:00
c-chenxs1 0f460e6b1a feat: 优化人员拉取和数据字典部分4 2026-11-02 11:22:39 +08:00
c-chenxs1 d1050db6b3 feat: 优化人员拉取和数据字典部分3 2026-10-29 16:14:08 +08:00
c-chenxs1 e3f32fe72b feat: 优化人员拉取和数据字典部分2 2026-10-29 15:52:02 +08:00
c-chenxs1 b885f449c7 feat: 优化人员拉取和数据字典部分 2026-10-29 15:29:55 +08:00
c-chenxs1 3f441828a1 Merge branch 'feat_可同步长江大学的优化_fix' into feat_本工会单独业务 2026-10-29 10:45:35 +08:00
139 changed files with 5690 additions and 1136 deletions
@@ -20,6 +20,7 @@ RoleConstant {
SCHOOL_UNION_CHAIRMAN("校工会主席"),
SCHOOL_UNION_VICE_CHAIRMAN("校工会副主席"),
SCHOOL_UNION_WELFARE_ADMIN("校工会福利管理员"),
SCHOOL_UNION_WELFARE_COMMITTEE("校福利委员会"),
SCHOOL_UNION_MEMBER_ADMIN("校工会会员管理员"),
SCHOOL_UNION_TC_ADMIN("校工会教代会管理员"),
SCHOOL_UNION_WC_ADMIN("校工会工代会管理员"),
@@ -0,0 +1,47 @@
package com.budwk.app.flow.handler;
import cn.hutool.core.util.StrUtil;
import com.budwk.app.base.constant.RoleConstant;
import com.budwk.app.base.exception.BaseException;
import com.budwk.app.flow.engine.AssignmentHandler;
import com.budwk.app.flow.engine.core.Execution;
import com.budwk.app.flow.engine.core.ServiceContext;
import com.budwk.app.flow.engine.model.TaskModel;
import com.budwk.app.sys.models.Sys_role;
import com.budwk.app.sys.models.Sys_user_role;
import com.budwk.app.sys.services.SysRoleService;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import java.util.List;
public class FlowSchoolUnionWelfareCommitteeHandler implements AssignmentHandler {
@Override
public List<String> assign(TaskModel model, Execution execution) {
Dao dao = ServiceContext.find(Dao.class);
SysRoleService sysRoleService = ServiceContext.find(SysRoleService.class);
Sys_role role = sysRoleService.getByCode(RoleConstant.SCHOOL_UNION_WELFARE_COMMITTEE);
if (role == null || role.isDisabled()) {
throw new BaseException("校福利委员会角色未配置或已禁用,请联系校工会!");
}
List<Sys_user_role> relations = dao.query(Sys_user_role.class,
Cnd.where(Sys_user_role::getRoleId, "=", role.getId())
.and(Sys_user_role::getEnable, "=", true));
List<String> userIds = relations.stream().map(Sys_user_role::getUserId)
.filter(StrUtil::isNotBlank).distinct().toList();
if (userIds.isEmpty()) {
throw new BaseException("校福利委员没有设置,请联系校工会!");
}
return userIds;
}
@Override
public String getMessage() {
return "获取校福利委员";
}
@Override
public int getOrder() {
return 14;
}
}
@@ -14,6 +14,7 @@ import io.swagger.annotations.ApiOperation;
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.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.mvc.annotation.At;
@@ -47,10 +48,10 @@ public class SysDataUserPullController {
cnd.andEX(Sys_user_source::getPullTime, "=", pageForm.getPullTime());
cnd.and(Cnd.likeEX(Sys_user_source::getUsername, pageForm.getUserName()));
cnd.and(Cnd.likeEX(Sys_user_source::getLoginname, pageForm.getLoginName()));
cnd.andEX(Sys_user_source::getUnitName, "=", pageForm.getUnitName());
cnd.andEX(Sys_user_source::getUserState, "=", pageForm.getUserState());
addSourceFilter(cnd, "us.unitName", pageForm.getUnitName());
addSourceFilter(cnd, "us.userState", pageForm.getUserState());
cnd.andEX(Sys_user_source::getPreparedBy, "=", pageForm.getPreparedBy());
cnd.andEX(Sys_user_source::getPersonType, "=", pageForm.getPersonType());
addSourceFilter(cnd, "us.personType", pageForm.getPersonType());
if (StrUtil.isAllNotBlank(pageForm.getPageOrderName(), pageForm.getPageOrderBy())) {
cnd.orderBy(pageForm.getPageOrderName(), PageUtil.getOrder(pageForm.getPageOrderBy()));
@@ -61,6 +62,15 @@ public class SysDataUserPullController {
return Result.success(pagination);
}
private void addSourceFilter(Cnd cnd, String column, String value) {
if ("__EMPTY__".equals(value)) {
cnd.and(new Static("(%s IS NULL OR LOWER(%s) REGEXP '^[[:space:]]*(null)?[[:space:]]*$')"
.formatted(column, column)));
} else {
cnd.andEX(column, "=", value);
}
}
@At
@SaCheckPermission("sys.data.user.pull")
@ApiOperation("拉取用户数据")
@@ -0,0 +1,32 @@
package com.budwk.app.sys.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import com.budwk.app.base.result.Result;
import com.budwk.app.sys.services.SysDataUserPullService;
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;
@IocBean
@At("/platform/sys/data/user/query")
@Ok("json:full")
public class SysDataUserQueryController {
@Inject
private SysDataUserPullService sysUserPullService;
@At("")
@Ok("beetl:/platform/sys/data/user/query.html")
@SaCheckPermission("sys.data.user.query")
public void index() {
}
@At
@SaCheckPermission("sys.data.user.query")
public Result queryData(@Param("zgh") String zgh, @Param("pageNumber") int pageNumber,
@Param("pageSize") int pageSize) {
return Result.success(sysUserPullService.queryUsers(zgh, pageNumber, pageSize));
}
}
@@ -98,6 +98,7 @@ public class Sys_user extends BaseModel implements Serializable {
@Column
@Comment("证件类型")
@ColDefine(type = ColType.VARCHAR, width = 30)
@DataCenterColumn(name = "证件类型", key = "SFZJLXDM", dict = "USER_ID_CARD_TYPE")
private String idCardType;
@Column
@@ -133,6 +134,7 @@ public class Sys_user extends BaseModel implements Serializable {
@Column
@Comment("岗位类别")
@ColDefine(type = ColType.VARCHAR, width = 50)
@DataCenterColumn(name = "聘岗类型", key = "ZYJSGWLBDMMC")
private String jobCategory;
@Column
@@ -222,7 +224,7 @@ public class Sys_user extends BaseModel implements Serializable {
private Integer pendingConfirmStatus;
@Column
@Comment("编制类别码")
@Comment("编制类别")
@ColDefine(type = ColType.VARCHAR, width = 30)
@DataCenterColumn(name = "编制类别", key = "BZLBDMMC")
private String preparedBy;
@@ -295,6 +297,7 @@ public class Sys_user extends BaseModel implements Serializable {
@Comment("是否双肩挑")
@ColDefine(type = ColType.BOOLEAN)
@Default(value = "0")
@DataCenterColumn(name = "是否双肩挑", key = "SFSJT")
private Boolean manyUnit;
@Column
@@ -1,5 +1,6 @@
package com.budwk.app.sys.models;
import com.budwk.app.sys.annotation.DataCenterColumn;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
@@ -31,6 +32,42 @@ public class Sys_user_source extends Sys_user {
@ColDefine(type = ColType.VARCHAR, width = 255)
private String unitName;
@Column
@Comment("最高学历代码")
@ColDefine(type = ColType.VARCHAR, width = 20)
@DataCenterColumn(name = "最高学历代码", key = "ZGXLDM")
private String educationCode;
@Column
@Comment("最高学位代码")
@ColDefine(type = ColType.VARCHAR, width = 50)
@DataCenterColumn(name = "最高学位代码", key = "XWDM")
private String academicDegreeCode;
@Column
@Comment("编制类别代码")
@ColDefine(type = ColType.VARCHAR, width = 30)
@DataCenterColumn(name = "编制类别代码", key = "BZLBDM")
private String preparedByCode;
@Column
@Comment("聘岗类型代码")
@ColDefine(type = ColType.VARCHAR, width = 50)
@DataCenterColumn(name = "聘岗类型代码", key = "ZYJSGWLBDM")
private String jobCategoryCode;
@Column
@Comment("专业技术职务代码")
@ColDefine(type = ColType.VARCHAR, width = 50)
@DataCenterColumn(name = "专业技术职务代码", key = "ZYJSZWDM")
private String professionalTitleCode;
@Column
@Comment("当前状态代码")
@ColDefine(type = ColType.VARCHAR, width = 30)
@DataCenterColumn(name = "当前状态代码", key = "DQZTDM")
private String userStateCode;
@Column
@Comment("拉取时间")
@ColDefine(type = ColType.DATETIME)
@@ -15,6 +15,8 @@ public interface SysDataUserPullService extends BaseService<Sys_user_source> {
*/
Date pull();
NutMap queryUsers(String zgh, int pageNumber, int pageSize);
/**
* 拉取人员博士后的信息
*/
@@ -7,4 +7,15 @@ import com.budwk.app.sys.param.SysDataUserUpdateParam;
*/
public interface SysDataUserUpdateService {
String update(SysDataUserUpdateParam updateParam);
static boolean qualifiesAsUnionMember(String personType, String userState) {
if (!"在岗".equals(userState) || personType == null) {
return false;
}
return switch (personType) {
case "在编", "兰溪编制", "聘用合同制(享受人事代理待遇)",
"聘用合同制", "聘用制专家", "人事代理" -> true;
default -> false;
};
}
}
@@ -164,6 +164,9 @@ public class SysDataUserAllUpdateServiceImpl implements SysDataUserUpdateService
// 创建用户对象
Sys_user u = new Sys_user();
BeanUtils.copyProperties(source, u);
if (SysDataUserUpdateService.qualifiesAsUnionMember(u.getPersonType(), u.getUserState())) {
u.setMember(true);
}
if (user == null) {
// 新增用户,初始化数据
@@ -123,6 +123,9 @@ public class SysDataUserIncrUpdateServiceImpl implements SysDataUserUpdateServic
//加入到系统用户表
List<Sys_user> sysUsers = BeanUtil.copyToList(userSources, Sys_user.class);
for (Sys_user sysUser : sysUsers) {
if (SysDataUserUpdateService.qualifiesAsUnionMember(sysUser.getPersonType(), sysUser.getUserState())) {
sysUser.setMember(true);
}
//重新设置
sysUser.setId(R.UU32());
String salt = R.UU32();
@@ -98,7 +98,7 @@ public class SysDataUserPullServiceImpl extends BaseServiceImpl<Sys_user_source>
synchronized (SysDataUserPullServiceImpl.class) {
if (fieldMappings == null) {
List<FieldMapping> mappings = new ArrayList<>();
Field[] fields = Sys_user.class.getDeclaredFields();
Field[] fields = cn.hutool.core.util.ReflectUtil.getFields(Sys_user_source.class);
for (Field field : fields) {
DataCenterColumn annotation = field.getAnnotation(DataCenterColumn.class);
if (annotation != null) {
@@ -200,6 +200,8 @@ public class SysDataUserPullServiceImpl extends BaseServiceImpl<Sys_user_source>
mapping.field.set(sysUser, raw.getStr(mapping.key));
}
}
} else if (mapping.field.getType() == Boolean.class) {
mapping.field.set(sysUser, raw.getBool(mapping.key));
} else if (mapping.field.getType() == Date.class) {
String dateText = StrUtil.trim(raw.getStr(mapping.key));
if (StrUtil.isNotBlank(dateText)) {
@@ -332,12 +334,39 @@ public class SysDataUserPullServiceImpl extends BaseServiceImpl<Sys_user_source>
return url;
}
@Override
public NutMap queryUsers(String zgh, int pageNumber, int pageSize) {
if (pageNumber < 1 || pageSize < 1 || pageSize > 200) {
throw new BaseException("分页参数不合法");
}
if (!dataCenterProperties.isTokenEnabled()) {
JSONObject response = DataCenterUtil.queryPage(getDmpUrl(DMP_TEACHER_KEY), zgh, pageNumber, pageSize);
JSONObject pageInfo = response.getJSONObject("pageInfo");
JSONArray data = response.getJSONArray("dataSet");
if (pageInfo == null || pageInfo.getLong("total") == null || data == null) {
throw new BaseException("数据中心接口未返回有效的分页数据");
}
return NutMap.NEW().addv("list", data).addv("totalCount", pageInfo.getLong("total"));
}
String accessToken = getDmpAccessToken();
List<JSONObject> records = new ArrayList<>();
records.addAll(pullDmpUsers(getDmpUrl(DMP_TEACHER_KEY), accessToken, "在岗教职工", StrUtil.trim(zgh)));
records.addAll(pullDmpUsers(getDmpUrl(DMP_DISPATCH_KEY), accessToken, "在岗劳务派遣", StrUtil.trim(zgh)));
int from = (int) Math.min((long) (pageNumber - 1) * pageSize, records.size());
return NutMap.NEW().addv("list", records.subList(from, Math.min(from + pageSize, records.size())))
.addv("totalCount", records.size());
}
/**
* 分页拉取单个人员接口数据。
* 入参 url 为人员接口地址,accessToken 为信息中心令牌,sourceName 用于日志区分接口来源。
* 返回值为该接口所有分页合并后的原始人员 JSON 列表。
*/
private List<JSONObject> pullDmpUsers(String url, String accessToken, String sourceName) {
return pullDmpUsers(url, accessToken, sourceName, null);
}
private List<JSONObject> pullDmpUsers(String url, String accessToken, String sourceName, String zgh) {
List<JSONObject> rawDataList = new ArrayList<>();
int page = 1;
int maxPage = 1;
@@ -347,11 +376,14 @@ public class SysDataUserPullServiceImpl extends BaseServiceImpl<Sys_user_source>
// 信息中心接口单页最多返回1000条,按page循环拉完当前接口全部数据。
HttpRequest httpRequest = HttpUtil.createPost(url);
httpRequest.header(Header.CONTENT_TYPE, "application/json");
httpRequest.body(JSONUtil.toJsonStr(Map.of(
"access_token", accessToken,
"per_page", String.valueOf(DMP_PAGE_SIZE),
"page", String.valueOf(page)
)));
Map<String, Object> body = new HashMap<>();
body.put("access_token", accessToken);
body.put("per_page", String.valueOf(DMP_PAGE_SIZE));
body.put("page", String.valueOf(page));
if (StrUtil.isNotBlank(zgh)) {
body.put("zgh", zgh);
}
httpRequest.body(JSONUtil.toJsonStr(body));
log.info("请求{}人员数据,第{}页: {}", sourceName, page, httpRequest);
String resBody = httpRequest.execute().body();
@@ -14,6 +14,7 @@ import com.budwk.app.sys.models.Sys_unit;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -40,7 +41,11 @@ public class DataCenterUtil {
}
public static List<JSONObject> pullData(String url) {
JSONObject firstResponse = requestData(url, Map.of("", ""));
return pullData(url, Map.of("", ""));
}
public static List<JSONObject> pullData(String url, Map<String, ?> params) {
JSONObject firstResponse = requestData(url, params);
JSONObject pageInfo = firstResponse.getJSONObject("pageInfo");
Integer pages = pageInfo == null ? null : pageInfo.getInt("pages");
if (pages == null || pages < 0) {
@@ -48,7 +53,9 @@ public class DataCenterUtil {
}
List<JSONObject> records = new ArrayList<>();
for (int page = 1; page <= pages; page++) {
JSONObject response = requestData(url, Map.of("pageNum", page));
Map<String, Object> body = new HashMap<>(params);
body.put("pageNum", page);
JSONObject response = requestData(url, body);
JSONArray data = response.getJSONArray("dataSet");
if (data == null) {
throw new BaseException("数据中心接口第{}页缺少 dataSet", page);
@@ -58,6 +65,16 @@ public class DataCenterUtil {
return records;
}
public static JSONObject queryPage(String url, String zgh, int pageNumber, int pageSize) {
Map<String, Object> body = new HashMap<>();
body.put("pageNum", pageNumber);
body.put("pageSize", pageSize);
if (StrUtil.isNotBlank(zgh)) {
body.put("zgh", zgh.trim());
}
return requestData(url, body);
}
private static JSONObject requestData(String url, Map<String, ?> body) {
try (HttpResponse response = HttpUtil.createPost(url)
.body(JSONUtil.toJsonStr(body)).execute()) {
@@ -10,6 +10,8 @@ import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.ioc.impl.PropertiesProxy;
import org.nutz.lang.Strings;
import java.util.List;
@@ -24,6 +26,8 @@ public class SmsMessageSendStrategy implements GlobalMessageSendStrategy {
private Dao dao;
@Inject
private SmsService smsService;
@Inject
private PropertiesProxy conf;
@Override
public GlobalMessageChannel getChannel() {
@@ -118,7 +122,9 @@ public class SmsMessageSendStrategy implements GlobalMessageSendStrategy {
// 限制短信长度(一般短信限制70个字符)
String smsContent = sb.toString();
if (smsContent.length() > 67) {
boolean intelligenceMode = Strings.isNotBlank(conf.get("custom.msg.platform.app-id"))
&& conf.getBoolean("msg.platform.IntelligenceMode", false);
if (!intelligenceMode && smsContent.length() > 67) {
smsContent = smsContent.substring(0, 67) + "...";
}
@@ -10,6 +10,8 @@ import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.ioc.impl.PropertiesProxy;
import org.nutz.lang.Strings;
import java.util.List;
@@ -24,12 +26,20 @@ public class WechatMessageSendStrategy implements GlobalMessageSendStrategy {
private Dao dao;
@Inject
private SmsService smsService;
@Inject
private PropertiesProxy conf;
@Override
public GlobalMessageChannel getChannel() {
return GlobalMessageChannel.WECHAT;
}
@Override
public boolean isEnabled() {
return !(Strings.isNotBlank(conf.get("custom.msg.platform.app-id"))
&& conf.getBoolean("msg.platform.IntelligenceMode", false));
}
@Override
public boolean supportAsync() {
return true;
@@ -2,6 +2,7 @@ package com.budwk.app.zhgh.dayofficework.outlay.outlayManage.service;
import com.budwk.app.base.service.BaseService;
import org.nutz.lang.util.NutMap;
import org.nutz.dao.sql.Sql;
/**
* 分工会预算统计服务。
@@ -28,4 +29,6 @@ public interface OutlayManageUnionStatisticsService extends BaseService {
* @return 包含各项收入、支出和余额字段的合计数据
*/
NutMap queryIncomeExpenseSummary(Integer year, String unionId);
Sql buildIncomeExpenseSql(Integer year, String unionId);
}
@@ -0,0 +1,243 @@
package com.budwk.app.zhgh.dayofficework.outlay.outlayManage.service.impl;
import cn.dev33.satoken.stp.StpUtil;
import cn.hutool.core.util.StrUtil;
import com.budwk.app.base.result.Result;
import com.budwk.app.base.service.impl.BaseServiceImpl;
import com.budwk.app.zhgh.dayofficework.outlay.outlayManage.union.model.OutlayManageUnion;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.json.Json;
import org.nutz.lang.util.NutMap;
import java.math.BigDecimal;
import java.time.Year;
import java.util.List;
import java.util.UUID;
@IocBean(args = {"refer:dao"})
public class OutlayAnnualAllocateService extends BaseServiceImpl<OutlayManageUnion> {
public OutlayAnnualAllocateService(Dao dao) { super(dao); }
public Sql sql(String text, Object... args) {
Sql sql = Sqls.create(text);
for (int i = 0; i < args.length; i += 2) sql.params().set(args[i].toString(), args[i + 1]);
return sql;
}
private NutMap first(Sql sql) {
List<NutMap> rows = listMap(sql);
return rows.isEmpty() ? null : rows.get(0);
}
private String table(String type) {
if ("base".equals(type)) return "outlay_annual_base";
if ("special".equals(type)) return "outlay_annual_special";
throw new IllegalArgumentException("经费类型错误");
}
public Sql pageSql(String type, Integer year, String unionId, String projectName) {
String table = table(type);
return sql("SELECT a.*, un.name unionName, creator.username operatorName FROM " + table +
" a LEFT JOIN sys_union un ON un.id=a.unionId LEFT JOIN sys_user creator ON creator.id=a.updatedBy " +
"WHERE a.year=@year AND (@unionId='' OR a.unionId=@unionId)" +
("special".equals(type) ? " AND (@projectName='' OR LOCATE(@projectName,a.projectName)>0)" : "") +
" ORDER BY un.unionCode,a.createdAt DESC",
"year", year, "unionId", StrUtil.blankToDefault(unionId, ""),
"projectName", StrUtil.blankToDefault(StrUtil.trim(projectName), ""));
}
public List<NutMap> summary(Integer year, String unionId) {
return listMap(sql("""
SELECT un.id, un.name unionName, COALESCE(b.money,0) baseMoney,
COALESCE(s.money,0) specialMoney, COALESCE(b.money,0)+COALESCE(s.money,0) totalMoney
FROM sys_union un
LEFT JOIN (SELECT unionId,SUM(allocateMoney) money FROM outlay_annual_base
WHERE year=@year AND status=1 GROUP BY unionId) b ON b.unionId=un.id
LEFT JOIN (SELECT unionId,SUM(allocateMoney) money FROM outlay_annual_special
WHERE year=@year AND status=1 GROUP BY unionId) s ON s.unionId=un.id
WHERE (@unionId='' OR un.id=@unionId) ORDER BY un.unionCode
""", "year", year, "unionId", StrUtil.blankToDefault(unionId, "")));
}
public List<NutMap> historyRecords(Integer year, String unionId) {
return listMap(sql("""
SELECT a.year,un.name unionName,a.quarterly,a.allocateHeadMoney,a.allocateMoney
FROM outlay_allocate_union a LEFT JOIN sys_union un ON un.id=a.unionId
WHERE a.year=@year AND a.delFlag=0 AND (@unionId='' OR a.unionId=@unionId)
ORDER BY un.unionCode,a.quarterly,a.id
""", "year", year, "unionId", StrUtil.blankToDefault(unionId, "")));
}
public Result generate(Integer year, BigDecimal standard, String unionId) {
if (year == null || year < 1900 || year > Year.now().getValue() || !moneyValid(standard))
return Result.error("请选择有效年度和人均标准(最多两位小数)");
boolean current = year == Year.now().getValue();
if (!current && first(sql("SELECT id FROM member_history WHERE year=@year LIMIT 1", "year", year)) == null)
return Result.error("该年度没有会员历史快照,无法生成统计人数");
List<NutMap> unions = listMap(sql("SELECT id FROM sys_union WHERE (@unionId='' OR id=@unionId) ORDER BY id",
"unionId", StrUtil.blankToDefault(unionId, "")));
int added = 0;
for (NutMap union : unions) {
String uid = union.getString("id");
lockUnion(uid);
if (first(sql("SELECT id FROM outlay_annual_base WHERE year=@year AND unionId=@unionId", "year", year, "unionId", uid)) != null) continue;
NutMap count = first(sql("SELECT COUNT(DISTINCT id) memberCount FROM " + (current ? "vw_user" : "member_history") +
" WHERE member=1 AND unionId=@unionId" + (current ? "" : " AND year=@year"), "unionId", uid, "year", year));
int members = count.getInt("memberCount");
BigDecimal calculated = standard.multiply(BigDecimal.valueOf(members));
if (!moneyValid(calculated)) throw new IllegalArgumentException("计算金额超出允许范围");
String id = UUID.randomUUID().toString().replace("-", "");
execute(sql("""
INSERT INTO outlay_annual_base
(id,year,unionId,memberCount,standard,calculatedMoney,allocateMoney,remark,status,version,createdAt,createdBy,updatedAt,updatedBy)
VALUES (@id,@year,@unionId,@count,@standard,@money,@money,'',0,0,@now,@actor,@now,@actor)
""", "id", id, "year", year, "unionId", uid, "count", members, "standard", standard,
"money", calculated, "now", System.currentTimeMillis(), "actor", StpUtil.getLoginIdAsString()));
audit("base", id, "生成", null, first(sql("SELECT * FROM outlay_annual_base WHERE id=@id", "id", id)), "生成年度人数快照");
added++;
}
return Result.success("已生成" + added + "条记录,已有记录保持不变");
}
private void lockUnion(String unionId) {
if (first(sql("SELECT id FROM sys_union WHERE id=@id FOR UPDATE", "id", unionId)) == null)
throw new IllegalArgumentException("分工会不存在");
}
private BigDecimal decimal(Object value) {
return value == null ? BigDecimal.ZERO : new BigDecimal(value.toString());
}
private boolean moneyValid(BigDecimal money) {
return money != null && money.signum() >= 0 && money.scale() <= 2
&& money.compareTo(new BigDecimal("99999999.99")) <= 0;
}
public Result save(String type, String id, Integer year, String unionId, String projectName,
Integer memberCount, BigDecimal standard, BigDecimal allocateMoney, String remark, Integer version) {
String table = table(type);
if (StrUtil.isBlank(id) || !id.matches("[a-fA-F0-9]{32}") || year == null || year < 1900 || year > 9999
|| StrUtil.isBlank(unionId) || !moneyValid(allocateMoney) || remark != null && remark.length() > 1000)
return Result.error("请填写有效年度、分工会和金额,说明最多1000字");
lockUnion(unionId);
NutMap old = first(sql("SELECT * FROM " + table + " WHERE id=@id FOR UPDATE", "id", id));
if (old != null && (old.getInt("year") != year || !unionId.equals(old.getString("unionId"))))
return Result.error("已有记录不能变更年度和分工会");
if (old != null && (version == null || old.getInt("version") != version))
return Result.error("记录已更新,请刷新后重试");
boolean confirmed = old != null && old.getInt("status") == 1;
BigDecimal calculated = null;
if ("base".equals(type)) {
if (old == null) return Result.error("请先生成基础经费记录");
memberCount = old.getInt("memberCount");
if (confirmed) {
standard = new BigDecimal(old.get("standard").toString());
}
if (memberCount == null || memberCount < 0 || !moneyValid(standard)) return Result.error("人数和标准不正确");
calculated = standard.multiply(BigDecimal.valueOf(memberCount));
if (!moneyValid(calculated)) return Result.error("计算金额超出允许范围");
if (allocateMoney.compareTo(calculated) != 0 && StrUtil.isBlank(remark)) return Result.error("实际金额与计算金额不一致,请填写调整说明");
} else if (StrUtil.isBlank(projectName) || projectName.trim().length() > 100 || allocateMoney.signum() <= 0) {
return Result.error("请填写专项名称(最多100字)和大于0的金额");
}
if (confirmed && StrUtil.isBlank(remark)) return Result.error("调整已下拨记录必须填写原因");
if (confirmed) syncBudget(old, allocateMoney.subtract(new BigDecimal(old.get("allocateMoney").toString())));
long now = System.currentTimeMillis();
String actor = StpUtil.getLoginIdAsString();
if (old == null) {
execute(sql("""
INSERT INTO outlay_annual_special
(id,year,unionId,projectName,allocateMoney,remark,status,version,createdAt,createdBy,updatedAt,updatedBy)
VALUES (@id,@year,@unionId,@name,@money,@remark,0,0,@now,@actor,@now,@actor)
""", "id", id, "year", year, "unionId", unionId, "name", projectName.trim(), "money", allocateMoney,
"remark", remark, "now", now, "actor", actor));
} else {
execute(sql("UPDATE " + table + " SET allocateMoney=@money,remark=@remark,updatedAt=@now,updatedBy=@actor,version=version+1" +
("base".equals(type) ? ",memberCount=@count,standard=@standard,calculatedMoney=@calculated" : ",projectName=@name") + " WHERE id=@id",
"money", allocateMoney, "remark", remark, "now", now, "actor", actor, "count", memberCount,
"standard", standard, "calculated", calculated, "name", StrUtil.trim(projectName), "id", id));
}
audit(type, id, confirmed ? "调整下拨" : "保存", old, first(sql("SELECT * FROM " + table + " WHERE id=@id", "id", id)), remark);
return Result.success();
}
public Result confirm(String type, String id, Integer version) {
String table = table(type);
NutMap snapshot = first(sql("SELECT * FROM " + table + " WHERE id=@id", "id", id));
if (snapshot == null) return Result.error("记录不存在");
lockUnion(snapshot.getString("unionId"));
NutMap row = first(sql("SELECT * FROM " + table + " WHERE id=@id FOR UPDATE", "id", id));
if (row.getInt("status") == 1) return Result.success("该记录已下拨,无需重复操作");
if (version == null || row.getInt("version") != version) return Result.error("记录已更新,请刷新后重试");
confirmRecord(type, table, row);
return Result.success();
}
public Result batchConfirm(String type, Integer year, String unionId, String projectName) {
String table = table(type);
if (year == null || year < 1900 || year > 9999) return Result.error("请选择有效年度");
List<NutMap> pending = listMap(sql("SELECT * FROM " + table +
" WHERE year=@year AND status=0 AND (@unionId='' OR unionId=@unionId)" +
("special".equals(type) ? " AND (@projectName='' OR LOCATE(@projectName,projectName)>0)" : "") +
" ORDER BY unionId,id",
"year", year, "unionId", StrUtil.blankToDefault(unionId, ""),
"projectName", StrUtil.blankToDefault(StrUtil.trim(projectName), "")));
int count = 0;
for (NutMap candidate : pending) {
lockUnion(candidate.getString("unionId"));
NutMap row = first(sql("SELECT * FROM " + table + " WHERE id=@id FOR UPDATE", "id", candidate.getString("id")));
if (row == null || row.getInt("status") == 1) continue;
if (row.getInt("version") != candidate.getInt("version"))
throw new IllegalArgumentException("待下拨记录已被修改,本次操作已取消,请刷新后重试");
confirmRecord(type, table, row);
count++;
}
return Result.success(count == 0 ? "当前筛选范围没有待下拨记录" : "成功下拨" + count + "条记录");
}
private void confirmRecord(String type, String table, NutMap row) {
String id = row.getString("id");
syncBudget(row, new BigDecimal(row.get("allocateMoney").toString()));
execute(sql("UPDATE " + table + " SET status=1,allocatedAt=@now,updatedAt=@now,updatedBy=@actor,version=version+1 WHERE id=@id",
"id", id, "now", System.currentTimeMillis(), "actor", StpUtil.getLoginIdAsString()));
audit(type, id, "确认下拨", row, first(sql("SELECT * FROM " + table + " WHERE id=@id", "id", id)), "确认下拨");
}
private void syncBudget(NutMap row, BigDecimal delta) {
List<NutMap> budgets = listMap(sql("SELECT * FROM outlay_manage_union WHERE year=@year AND unionId=@unionId FOR UPDATE",
"year", row.getInt("year"), "unionId", row.getString("unionId")));
if (budgets.size() > 1) throw new IllegalArgumentException("该分工会年度预算存在重复记录,不能下拨");
if (budgets.isEmpty()) {
if (delta.signum() < 0) throw new IllegalArgumentException("年度预算不存在,不能扣减");
// 新建预算承接上年结余;已有预算仅增加本次差额,避免重复结转。
NutMap previous = first(sql("SELECT COALESCE(totalQuota,0)-COALESCE(usedQuota,0) surplus FROM outlay_manage_union WHERE year=@year AND unionId=@unionId",
"year", row.getInt("year") - 1, "unionId", row.getString("unionId")));
BigDecimal carry = previous == null ? BigDecimal.ZERO : new BigDecimal(previous.get("surplus").toString());
if (!moneyValid(carry.add(delta))) throw new IllegalArgumentException("下拨后年度总额度超出允许范围");
execute(sql("""
INSERT INTO outlay_manage_union (id,year,unionId,unionName,unionCode,totalQuota,usedQuota,delFlag,createdAt,updatedAt,createdBy,updatedBy)
SELECT @id,@year,id,name,unionCode,@money,0,0,@now,@now,@actor,@actor FROM sys_union WHERE id=@unionId
""", "id", UUID.randomUUID().toString().replace("-", ""), "year", row.getInt("year"),
"unionId", row.getString("unionId"), "money", carry.add(delta), "now", System.currentTimeMillis(), "actor", StpUtil.getLoginIdAsString()));
} else {
NutMap budget = budgets.get(0);
BigDecimal total = decimal(budget.get("totalQuota")).add(delta);
if (!moneyValid(total)) throw new IllegalArgumentException("下拨后年度总额度超出允许范围");
if (total.compareTo(decimal(budget.get("usedQuota"))) < 0)
throw new IllegalArgumentException("调整后总额度不能低于已使用额度");
execute(sql("UPDATE outlay_manage_union SET totalQuota=COALESCE(totalQuota,0)+@delta,updatedAt=@now,updatedBy=@actor WHERE id=@id",
"delta", delta, "now", System.currentTimeMillis(), "actor", StpUtil.getLoginIdAsString(), "id", budget.getString("id")));
}
}
private void audit(String type, String id, String action, NutMap before, NutMap after, String remark) {
execute(sql("""
INSERT INTO outlay_annual_allocate_log (id,allocateType,allocateId,action,beforeData,afterData,remark,createdAt,createdBy)
VALUES (@id,@type,@allocateId,@action,@before,@after,@remark,@now,@actor)
""", "id", UUID.randomUUID().toString().replace("-", ""), "type", type, "allocateId", id,
"action", action, "before", before == null ? null : Json.toJson(before), "after", Json.toJson(after),
"remark", remark, "now", System.currentTimeMillis(), "actor", StpUtil.getLoginIdAsString()));
}
}
@@ -42,39 +42,72 @@ public class OutlayManageUnionStatisticsServiceImpl extends BaseServiceImpl impl
@Override
public NutMap queryIncomeExpenseSummary(Integer year, String unionId) {
Cnd cnd = buildUnionManageCondition(year, unionId, true);
Sql sql = Sqls.create("""
SELECT
COALESCE(SUM(t.beginMoney), 0) AS beginMoney,
COALESCE(SUM(t.feeJanApr), 0) AS feeJanApr,
COALESCE(SUM(t.feeMayAug), 0) AS feeMayAug,
COALESCE(SUM(t.feeSepDec), 0) AS feeSepDec,
COALESCE(SUM(t.awardMoney), 0) AS awardMoney,
COALESCE(SUM(t.usedMoney), 0) AS usedMoney,
COALESCE(SUM(t.remainMoney), 0) AS remainMoney
COALESCE(SUM(t.beginMoney),0) AS beginMoney,
COALESCE(SUM(t.baseMoney),0) AS baseMoney,
COALESCE(SUM(t.specialMoney),0) AS specialMoney,
COALESCE(SUM(t.incomeMoney),0) AS incomeMoney,
COALESCE(SUM(t.feeJanApr),0) AS feeJanApr,
COALESCE(SUM(t.feeMayAug),0) AS feeMayAug,
COALESCE(SUM(t.feeSepDec),0) AS feeSepDec,
COALESCE(SUM(t.awardMoney),0) AS awardMoney,
COALESCE(SUM(t.usedMoney),0) AS usedMoney,
COALESCE(SUM(t.remainMoney),0) AS remainMoney
FROM (
SELECT
mu.unionId,
COALESCE(SUM(CASE WHEN au.quarterly = 1 THEN au.allocateHeadMoney ELSE 0 END), 0) AS beginMoney,
COALESCE(SUM(CASE WHEN au.quarterly = 1 THEN au.allocateMoney ELSE 0 END), 0) AS feeJanApr,
COALESCE(SUM(CASE WHEN au.quarterly = 2 THEN au.allocateMoney ELSE 0 END), 0) AS feeMayAug,
COALESCE(SUM(CASE WHEN au.quarterly = 3 THEN au.allocateMoney ELSE 0 END), 0) AS feeSepDec,
COALESCE(SUM(CASE WHEN au.quarterly = 4 THEN au.allocateMoney ELSE 0 END), 0) AS awardMoney,
COALESCE(mu.usedQuota, 0) AS usedMoney,
COALESCE(mu.totalQuota, 0) - COALESCE(mu.usedQuota, 0) AS remainMoney
FROM outlay_manage_union mu
LEFT JOIN outlay_allocate_union au ON au.year = mu.year
AND au.unionId = mu.unionId
AND au.delFlag = 0
LEFT JOIN sys_union su ON su.id = mu.unionId
$condition
GROUP BY mu.year, mu.unionId, mu.usedQuota, mu.totalQuota
) t
""");
sql.setCondition(cnd);
""" + incomeExpenseQuery() + ") t");
sql.params().set("incomeYear", year == null ? DateUtil.thisYear() : year);
sql.setCondition(buildUnionManageCondition(year, unionId, true));
return executeMap(sql);
}
@Override
public Sql buildIncomeExpenseSql(Integer year, String unionId) {
Sql sql = Sqls.create(incomeExpenseQuery() + " ORDER BY COALESCE(mu.unionCode,su.unionCode)");
sql.params().set("incomeYear", year == null ? DateUtil.thisYear() : year);
sql.setCondition(buildUnionManageCondition(year, unionId, true));
return sql;
}
private String incomeExpenseQuery() {
// 历史会费并入年度基础经费,历史奖励并入专项经费;分别汇总避免关联后重复累计。
// 年初数由年度总额度扣除当年各类下拨计算,兼容没有历史第一期记录的新流程。
return """
SELECT mu.year, mu.unionId,
COALESCE(mu.unionName,su.name) AS unionName,
COALESCE(mu.unionCode,su.unionCode) AS unionCode,
COALESCE(mu.totalQuota,0) - (COALESCE(b.money,0) + COALESCE(sp.money,0) + COALESCE(au.feeJanApr,0) + COALESCE(au.feeMayAug,0) + COALESCE(au.feeSepDec,0) + COALESCE(au.awardMoney,0)) AS beginMoney,
COALESCE(b.money,0) + COALESCE(au.feeJanApr,0) + COALESCE(au.feeMayAug,0) + COALESCE(au.feeSepDec,0) AS baseMoney,
COALESCE(sp.money,0) + COALESCE(au.awardMoney,0) AS specialMoney,
(COALESCE(b.money,0) + COALESCE(sp.money,0) + COALESCE(au.feeJanApr,0) + COALESCE(au.feeMayAug,0) + COALESCE(au.feeSepDec,0) + COALESCE(au.awardMoney,0)) AS incomeMoney,
COALESCE(au.feeJanApr,0) AS feeJanApr,
COALESCE(au.feeMayAug,0) AS feeMayAug,
COALESCE(au.feeSepDec,0) AS feeSepDec,
COALESCE(au.awardMoney,0) AS awardMoney,
COALESCE(mu.usedQuota,0) AS usedMoney,
COALESCE(mu.totalQuota,0)-COALESCE(mu.usedQuota,0) AS remainMoney
FROM outlay_manage_union mu
LEFT JOIN sys_union su ON su.id=mu.unionId
LEFT JOIN (
SELECT year,unionId,SUM(allocateMoney) money FROM outlay_annual_base
WHERE year=@incomeYear AND status=1 GROUP BY year,unionId
) b ON b.year=mu.year AND b.unionId=mu.unionId
LEFT JOIN (
SELECT year,unionId,SUM(allocateMoney) money FROM outlay_annual_special
WHERE year=@incomeYear AND status=1 GROUP BY year,unionId
) sp ON sp.year=mu.year AND sp.unionId=mu.unionId
LEFT JOIN (
SELECT year,unionId,
SUM(CASE WHEN quarterly=1 THEN allocateMoney ELSE 0 END) feeJanApr,
SUM(CASE WHEN quarterly=2 THEN allocateMoney ELSE 0 END) feeMayAug,
SUM(CASE WHEN quarterly=3 THEN allocateMoney ELSE 0 END) feeSepDec,
SUM(CASE WHEN quarterly=4 THEN allocateMoney ELSE 0 END) awardMoney
FROM outlay_allocate_union WHERE year=@incomeYear AND delFlag=0 GROUP BY year,unionId
) au ON au.year=mu.year AND au.unionId=mu.unionId
$condition
""";
}
/**
* 构造两个列表共用的预算主表过滤条件,保证汇总和分页列表权限口径一致。
*/
@@ -0,0 +1,141 @@
package com.budwk.app.zhgh.dayofficework.outlay.outlayManage.union.controller;
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.date.DateUtil;
import com.budwk.app.base.utils.CommonDownloadUtil;
import com.budwk.app.sys.models.Sys_dict;
import com.budwk.app.sys.services.SysDictService;
import org.apache.poi.ss.usermodel.Workbook;
import org.nutz.lang.util.NutMap;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.HashMap;
import cn.dev33.satoken.annotation.SaCheckPermission;
import com.budwk.app.base.param.PageForm;
import com.budwk.app.base.result.Result;
import com.budwk.app.zhgh.dayofficework.outlay.outlayManage.service.impl.OutlayAnnualAllocateService;
import org.nutz.aop.interceptor.ioc.TransAop;
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.*;
import java.math.BigDecimal;
import java.util.UUID;
@IocBean
@At("/platform/outlay/outlayManage/unionAllocate/annual")
@Ok("json:full")
public class OutlayAnnualAllocateController {
@Inject
private OutlayAnnualAllocateService outlayAnnualAllocateService;
@Inject
private SysDictService sysDictService;
@At
@SaCheckPermission("outlay.outlayManage.union.allocate")
public Result pageData(PageForm pageForm, String type, Integer year, String unionId, String projectName) {
return Result.success(outlayAnnualAllocateService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(),
outlayAnnualAllocateService.pageSql(type, year, unionId, projectName)));
}
@At
@SaCheckPermission("outlay.outlayManage.union.allocate")
public Result summary(Integer year, String unionId) {
return Result.success(outlayAnnualAllocateService.summary(year, unionId));
}
@At
@Ok("void")
@SaCheckPermission("outlay.outlayManage.union.allocate")
public void doExport(String type, Integer year, String unionId, HttpServletResponse response) {
int queryYear = year == null ? DateUtil.thisYear() : year;
if (queryYear < 1900 || queryYear > 9999) throw new IllegalArgumentException("请选择有效年度");
List<NutMap> rows;
List<ExcelExportEntity> columns = new ArrayList<>();
columns.add(new ExcelExportEntity("年度", "year", 12));
columns.add(new ExcelExportEntity("分工会", "unionName", 30));
String title;
if ("summary".equals(type)) {
title = "下拨汇总";
rows = outlayAnnualAllocateService.summary(queryYear, unionId);
for (NutMap row : rows) row.put("year", queryYear);
columns.add(new ExcelExportEntity("基础经费已下拨(元)", "baseMoney", 24));
columns.add(new ExcelExportEntity("专项经费已下拨(元)", "specialMoney", 24));
columns.add(new ExcelExportEntity("新流程合计下拨(元)", "totalMoney", 24));
} else if ("history".equals(type)) {
title = "历史季度记录";
rows = outlayAnnualAllocateService.historyRecords(queryYear, unionId);
Map<String, String> projectNames = new HashMap<>();
for (Sys_dict dict : sysDictService.getSubListByCode("OUTLAY_QUARTERLY")) {
projectNames.put(dict.getCode(), dict.getName());
}
for (NutMap row : rows) {
String code = row.getString("quarterly");
row.put("projectName", projectNames.getOrDefault(code, code));
}
columns.add(new ExcelExportEntity("分配项目", "projectName", 24));
columns.add(new ExcelExportEntity("分配前额度(元)", "allocateHeadMoney", 24));
columns.add(new ExcelExportEntity("分配金额(元)", "allocateMoney", 24));
} else {
throw new IllegalArgumentException("不支持的导出类型");
}
ExportParams params = new ExportParams();
params.setType(ExcelType.XSSF);
Workbook workbook = ExcelExportUtil.exportExcel(params, columns, rows);
CommonDownloadUtil.download(queryYear + "年" + title + ".xlsx", workbook, response);
}
@At
@SaCheckPermission("outlay.outlayManage.union.allocate")
public Result newId() {
return Result.success("", UUID.randomUUID().toString().replace("-", ""));
}
@At
@SaCheckPermission("outlay.outlayManage.union.allocate")
@POST
@Aop(TransAop.READ_COMMITTED)
public Result generate(Integer year, @Param("standard") BigDecimal standard, String unionId) {
return outlayAnnualAllocateService.generate(year, standard, unionId);
}
@At
@SaCheckPermission("outlay.outlayManage.union.allocate")
@POST
@Aop(TransAop.READ_COMMITTED)
public Result save(String type, String id, Integer year, String unionId, String projectName,
Integer memberCount, @Param("standard") BigDecimal standard, @Param("allocateMoney") BigDecimal allocateMoney, String remark, Integer version) {
return outlayAnnualAllocateService.save(type, id, year, unionId, projectName, memberCount, standard, allocateMoney, remark, version);
}
@At
@SaCheckPermission("outlay.outlayManage.union.allocate")
@POST
@Aop(TransAop.READ_COMMITTED)
public Result confirm(String type, String id, Integer version) {
return outlayAnnualAllocateService.confirm(type, id, version);
}
@At
@SaCheckPermission("outlay.outlayManage.union.allocate")
@POST
@Aop(TransAop.READ_COMMITTED)
public Result batchConfirm(String type, Integer year, String unionId, String projectName) {
return outlayAnnualAllocateService.batchConfirm(type, year, unionId, projectName);
}
@At
@SaCheckPermission("outlay.outlayManage.union.allocate")
public Result logs(PageForm pageForm, String type, String id) {
return Result.success(outlayAnnualAllocateService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), outlayAnnualAllocateService.sql("""
SELECT l.*,u.username operatorName FROM outlay_annual_allocate_log l
LEFT JOIN sys_user u ON u.id=l.createdBy
WHERE l.allocateType=@type AND l.allocateId=@id ORDER BY l.createdAt DESC,l.id
""", "type", type, "id", id)));
}
}
@@ -53,7 +53,7 @@ public class OutlayManageUnionAllocateController {
private OutlayManageUnionAllocateService outlayManageUnionAllocateService;
@At("")
@Ok("beetl:/platform/zhgh/dayofficework/outlay/outlayManage/union/allocate/index.html")
@Ok("beetl:/platform/zhgh/dayofficework/outlay/outlayManage/union/allocate/annual.html")
@SaCheckPermission("outlay.outlayManage.union.allocate")
public void index() {
}
@@ -6,22 +6,17 @@ 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.date.DateUtil;
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.base.service.BaseService;
import com.budwk.app.base.utils.CommonDownloadUtil;
import com.budwk.app.web.commons.auth.utils.AuthUtil;
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.zhgh.dayofficework.outlay.outlayManage.service.OutlayManageUnionStatisticsService;
import com.budwk.app.zhgh.dayofficework.outlay.outlayManage.union.vo.OutlayUnionIncomeExpenseVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.usermodel.Workbook;
import org.nutz.dao.Cnd;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
@@ -85,11 +80,10 @@ public class OutlayManageUnionIncomeExpenseController {
ArrayList<ExcelExportEntity> entities = new ArrayList<>();
entities.add(new ExcelExportEntity("单位", "unionName", 25));
entities.add(new ExcelExportEntity("年初数", "beginMoney", 20));
entities.add(new ExcelExportEntity("1-4月会费", "feeJanApr", 20));
entities.add(new ExcelExportEntity("5-8月会费", "feeMayAug", 20));
entities.add(new ExcelExportEntity("9-12月会费", "feeSepDec", 20));
entities.add(new ExcelExportEntity("评优奖励", "awardMoney", 20));
entities.add(new ExcelExportEntity("1-12月支出", "usedMoney", 20));
entities.add(new ExcelExportEntity("年度基础经费", "baseMoney", 20));
entities.add(new ExcelExportEntity("专项经费", "specialMoney", 20));
entities.add(new ExcelExportEntity("合计下拨", "incomeMoney", 20));
entities.add(new ExcelExportEntity("年度支出", "usedMoney", 20));
entities.add(new ExcelExportEntity("经费余额", "remainMoney", 20));
ExportParams exportParams = new ExportParams();
@@ -98,52 +92,8 @@ public class OutlayManageUnionIncomeExpenseController {
CommonDownloadUtil.download(queryYear + "年二级分工会经费收支使用情况表.xlsx", workbook, response);
}
/**
* 统计参数说明:
* year 为统计年度,未传时默认当前年份;unionId 为二级分工会主键,管理员可为空查询全部。
* 返回 VO 中 beginMoney 是年初数,feeJanApr/feeMayAug/feeSepDec 是三个会费收入段,
* awardMoney 是评优奖励,usedMoney 是年度支出,remainMoney 是当前经费余额。
*/
private Sql buildIncomeExpenseSql(Integer year, String unionId) {
Sql sql = Sqls.create("""
SELECT
mu.year AS year,
mu.unionId AS unionId,
COALESCE(mu.unionName, su.name) AS unionName,
COALESCE(mu.unionCode, su.unionCode) AS unionCode,
COALESCE(SUM(CASE WHEN au.quarterly = 1 THEN au.allocateHeadMoney ELSE 0 END), 0) AS beginMoney,
COALESCE(SUM(CASE WHEN au.quarterly = 1 THEN au.allocateMoney ELSE 0 END), 0) AS feeJanApr,
COALESCE(SUM(CASE WHEN au.quarterly = 2 THEN au.allocateMoney ELSE 0 END), 0) AS feeMayAug,
COALESCE(SUM(CASE WHEN au.quarterly = 3 THEN au.allocateMoney ELSE 0 END), 0) AS feeSepDec,
COALESCE(SUM(CASE WHEN au.quarterly = 4 THEN au.allocateMoney ELSE 0 END), 0) AS awardMoney,
COALESCE(mu.usedQuota, 0) AS usedMoney,
COALESCE(mu.totalQuota, 0) - COALESCE(mu.usedQuota, 0) AS remainMoney
FROM outlay_manage_union mu
LEFT JOIN sys_union su ON su.id = mu.unionId
LEFT JOIN outlay_allocate_union au ON au.year = mu.year
AND au.unionId = mu.unionId
AND au.delFlag = 0
$condition
""");
Cnd cnd = Cnd.NEW();
cnd.and("mu.delFlag", "=", false);
cnd.and("mu.year", "=", getQueryYear(year));
cnd.and("mu.totalQuota", "IS NOT", null);
cnd.andEX("mu.unionId", "=", unionId);
if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) {
cnd.and("mu.unionId", "=", SecurityUtil.getUnionId());
}
cnd.groupBy("mu.year");
cnd.groupBy("mu.unionId");
cnd.groupBy("mu.unionName");
cnd.groupBy("mu.unionCode");
cnd.groupBy("su.name");
cnd.groupBy("su.unionCode");
cnd.groupBy("mu.usedQuota");
cnd.groupBy("mu.totalQuota");
cnd.asc("mu.unionCode");
sql.setCondition(cnd);
return sql;
return outlayManageUnionStatisticsService.buildIncomeExpenseSql(year, unionId);
}
private Integer getQueryYear(Integer year) {
@@ -20,6 +20,12 @@ public class OutlayUnionIncomeExpenseVO {
private BigDecimal beginMoney;
private BigDecimal baseMoney;
private BigDecimal specialMoney;
private BigDecimal incomeMoney;
private BigDecimal feeJanApr;
private BigDecimal feeMayAug;
@@ -127,6 +127,7 @@ public class CondolenceApplyController {
username as userName,
loginname as loginName,
sex,
mobile,
technicalTitle,
IFNULL(unitname, '暂无') as unitName,
unitid as unitId,
@@ -27,34 +27,34 @@ import org.nutz.mvc.annotation.Param;
import java.util.List;
/**
* @ClassName CondolenceBranchUnionApprovalController
* @ClassName CondolenceFirstApprovalController
* @Author JyuHsin
* @Date 2025/7/28 11:33
* @Version 1.0
* @Description TODO
*/
@IocBean
@At("/platform/condolence/branchUnionApproval")
@Api("职工慰问分工会审核")
@At("/platform/condolence/firstApproval")
@Api("职工慰问一级审核")
@Ok("json:full")
public class CondolenceBranchUnionApprovalController {
public class CondolenceFirstApprovalController {
@Inject
private CondolenceService condolenceService;
@At("/")
@Ok("beetl:/platform/zhgh/staffbenefit/condolence/branchUnionApproval/index.html")
@SaCheckPermission("condolence.branchUnionApproval")
@Ok("beetl:/platform/zhgh/staffbenefit/condolence/firstApproval/index.html")
@SaCheckPermission("condolence.firstApproval")
public void index() {}
@At("/h5")
@Ok("beetl:/platform/zhghh5/staffbenefit/condolence/branchUnionApproval/index.html")
@SaCheckPermission("h5.condolence.branchUnionApproval")
@Ok("beetl:/platform/zhghh5/staffbenefit/condolence/firstApproval/index.html")
@SaCheckPermission("h5.condolence.firstApproval")
public void h5Index() {}
@At
@ApiOperation("分页查询")
@SaCheckPermission(value = {"condolence.branchUnionApproval", "h5.condolence.branchUnionApproval"}, mode = SaMode.OR)
@SaCheckPermission(value = {"condolence.firstApproval", "h5.condolence.firstApproval"}, mode = SaMode.OR)
public Result pageData(PageForm pageForm,
@Param(value = "year") Integer year,
@Param(value = "type") String type,
@@ -29,30 +29,30 @@ import java.util.List;
/**
* @author zhf
* @date 2025/12/23 14:13
* @description 校工会预审
* @description 二级审核
*/
@IocBean
@At("/platform/condolence/schoolPrincipalApproval")
@Api("职工慰问校工会预审")
@At("/platform/condolence/secondApproval")
@Api("职工慰问二级审核")
@Ok("json:full")
public class CondolenceSchoolPrincipalApprovalController {
public class CondolenceSecondApprovalController {
@Inject
private CondolenceService condolenceService;
@At("/")
@Ok("beetl:/platform/zhgh/staffbenefit/condolence/schoolPrincipalApproval/index.html")
@SaCheckPermission("condolence.schoolPrincipalApproval")
@Ok("beetl:/platform/zhgh/staffbenefit/condolence/secondApproval/index.html")
@SaCheckPermission("condolence.secondApproval")
public void index() {}
@At("/h5")
@Ok("beetl:/platform/zhghh5/staffbenefit/condolence/schoolPrincipalApproval/index.html")
@SaCheckPermission("h5.condolence.schoolPrincipalApproval")
@Ok("beetl:/platform/zhghh5/staffbenefit/condolence/secondApproval/index.html")
@SaCheckPermission("h5.condolence.secondApproval")
public void h5Index() {}
@At
@ApiOperation("分页查询")
@SaCheckPermission(value = {"condolence.schoolPrincipalApproval", "h5.condolence.schoolPrincipalApproval"}, mode = SaMode.OR)
@SaCheckPermission(value = {"condolence.secondApproval", "h5.condolence.secondApproval"}, mode = SaMode.OR)
public Result pageData(PageForm pageForm,
@Param(value = "year") Integer year,
@Param(value = "type") String type,
@@ -27,34 +27,34 @@ import org.nutz.mvc.annotation.Param;
import java.util.List;
/**
* @ClassName CondolenceSchoolUnionApprovalController
* @ClassName CondolenceThirdApprovalController
* @Author JyuHsin
* @Date 2025/7/29 16:23
* @Version 1.0
* @Description TODO
*/
@IocBean
@At("/platform/condolence/schoolUnionApproval")
@Api("职工慰问校工会审核")
@At("/platform/condolence/thirdApproval")
@Api("职工慰问三级审核")
@Ok("json:full")
public class CondolenceSchoolUnionApprovalController {
public class CondolenceThirdApprovalController {
@Inject
private CondolenceService condolenceService;
@At("/")
@Ok("beetl:/platform/zhgh/staffbenefit/condolence/schoolUnionApproval/index.html")
@SaCheckPermission("condolence.schoolUnionApproval")
@Ok("beetl:/platform/zhgh/staffbenefit/condolence/thirdApproval/index.html")
@SaCheckPermission("condolence.thirdApproval")
public void index() {}
@At("/h5")
@Ok("beetl:/platform/zhghh5/staffbenefit/condolence/schoolUnionApproval/index.html")
@SaCheckPermission("h5.condolence.schoolUnionApproval")
@Ok("beetl:/platform/zhghh5/staffbenefit/condolence/thirdApproval/index.html")
@SaCheckPermission("h5.condolence.thirdApproval")
public void h5Index() {}
@At
@ApiOperation("分页查询")
@SaCheckPermission(value = {"condolence.schoolUnionApproval", "h5.condolence.schoolUnionApproval"}, mode = SaMode.OR)
@SaCheckPermission(value = {"condolence.thirdApproval", "h5.condolence.thirdApproval"}, mode = SaMode.OR)
public Result pageData(PageForm pageForm,
@Param(value = "year") Integer year,
@Param(value = "type") String type,
@@ -184,6 +184,10 @@ public class DifficultHelpApplyController {
birthday,
mobile,
sex,
idCard,
position,
professionalTitle AS officialCapacity,
(SELECT u.homeAddress FROM sys_user u WHERE u.id = vw_user.id) AS homeAddress,
unitName,
unionName,
unionId,
@@ -25,15 +25,15 @@ import java.util.List;
/**
* @version 1.0
* @Author zzr
* @name:DifficultHelpBranchUnionApprovalController
* @name:DifficultHelpFirstApprovalController
* @Date 2025/7/31 11:47
* @注释
*/
@IocBean
@Ok("json")
@ApiOperation("困难补助分工会审核")
@At("/platform/difficultHelp/branchUnionApproval")
public class DifficultHelpBranchUnionApprovalController {
@ApiOperation("困难补助一级审核")
@At("/platform/difficultHelp/firstApproval")
public class DifficultHelpFirstApprovalController {
@Inject
private Dao dao;
@@ -41,27 +41,27 @@ public class DifficultHelpBranchUnionApprovalController {
private DifficultHelpCommonService difficultHelpCommonService;
@At("")
@SaCheckPermission("difficultHelp.branchUnionApproval")
@Ok("beetl:/platform/zhgh/staffbenefit/difficulthelp/branchunionapproval/index.html")
@SaCheckPermission("difficultHelp.firstApproval")
@Ok("beetl:/platform/zhgh/staffbenefit/difficulthelp/firstApproval/index.html")
public void index() {
}
@At
@SaCheckPermission("difficultHelp.branchUnionApproval")
@Ok("beetl:/platform/zhgh/staffbenefit/difficulthelp/branchunionapproval/form.html")
@SaCheckPermission("difficultHelp.firstApproval")
@Ok("beetl:/platform/zhgh/staffbenefit/difficulthelp/firstApproval/form.html")
public void form() {
}
@At
@SaCheckPermission("h5.difficultHelp.branchUnionApproval")
@Ok("beetl:/platform/zhghh5/staffbenefit/difficulthelp/branchunionapproval/index.html")
@SaCheckPermission("h5.difficultHelp.firstApproval")
@Ok("beetl:/platform/zhghh5/staffbenefit/difficulthelp/firstApproval/index.html")
public void h5() {
}
@At
@ApiOperation("困难补助分工会审核列表")
@SaCheckPermission("difficultHelp.branchUnionApproval")
@ApiOperation("困难补助一级审核列表")
@SaCheckPermission("difficultHelp.firstApproval")
public Result pageData(DifficultHelpPageParam pageParam) {
Sql sql = Sqls.create("""
SELECT
@@ -1,6 +1,7 @@
package com.budwk.app.zhgh.staffbenefit.difficulthelp.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.dev33.satoken.annotation.SaMode;
import cn.hutool.core.util.StrUtil;
import com.budwk.app.base.annotation.SLog;
import com.budwk.app.base.page.Pagination;
@@ -68,6 +69,7 @@ public class DifficultHelpMineController {
Sql sql = Sqls.create("""
SELECT
info.id,
info.createdBy,
info.proxyUserName,
info.proxyLoginName,
info.userName,
@@ -103,7 +105,8 @@ public class DifficultHelpMineController {
""");
Cnd cnd = Cnd.NEW();
pageParam.buildSearch(cnd, "info.");
cnd.and("info.createdBy", "=", SecurityUtil.getUserId());
cnd.and(Cnd.exps("info.createdBy", "=", SecurityUtil.getUserId())
.or("info.userId", "=", SecurityUtil.getUserId()));
if (StrUtil.isAllBlank(pageParam.getPageOrderName(), pageParam.getPageOrderBy())) {
cnd.desc("info.applyTime");
} else {
@@ -121,6 +124,10 @@ public class DifficultHelpMineController {
@SaCheckPermission("difficultHelp.mine")
@SLog(tag = "困难补助申请", msg = "删除困难补助申请,id: ${args[0]}")
public Result onDelete(@Valid String id){
DifficultHelpInfo helpInfo = dao.fetch(DifficultHelpInfo.class, id);
if (helpInfo == null || !SecurityUtil.getUserId().equals(helpInfo.getCreatedBy())) {
return Result.error("只能删除自己创建的申请记录");
}
dao.clear(DifficultHelpInfo.class, Cnd.where("id", "=", id));
// 删除流程相关操作
flowEngine.processInstanceService().deleteProcessInstanceByBusinessKey(id);
@@ -130,7 +137,7 @@ public class DifficultHelpMineController {
@At
@ApiModelProperty("获取困难补助申请")
@SaCheckPermission("difficultHelp.mine")
@SaCheckPermission(value = {"difficultHelp.mine", "difficultHelp.reading"}, mode = SaMode.OR)
public Result findOne(String id) {
DifficultHelpInfo helpInfo = dao.fetch(DifficultHelpInfo.class, id);
return Result.success().addData(helpInfo);
@@ -26,15 +26,15 @@ import java.util.List;
/**
* @version 1.0
* @Author zzr
* @name:DifficultHelpBranchUnionApprovalController
* @name:DifficultHelpSecondApprovalController
* @Date 2025/7/31 11:47
* @注释
*/
@IocBean
@Ok("json")
@ApiOperation("困难补助二级党组织审核")
@At("/platform/difficultHelp/unionLeaderApproval")
public class DifficultHelpBranchUnionLeaderApprovalController {
@ApiOperation("困难补助二级审核")
@At("/platform/difficultHelp/secondApproval")
public class DifficultHelpSecondApprovalController {
@Inject
private Dao dao;
@@ -42,27 +42,27 @@ public class DifficultHelpBranchUnionLeaderApprovalController {
private DifficultHelpCommonService difficultHelpCommonService;
@At("")
@SaCheckPermission("difficultHelp.unionLeaderApproval")
@Ok("beetl:/platform/zhgh/staffbenefit/difficulthelp/unionLeaderApproval/index.html")
@SaCheckPermission("difficultHelp.secondApproval")
@Ok("beetl:/platform/zhgh/staffbenefit/difficulthelp/secondApproval/index.html")
public void index() {
}
@At
@SaCheckPermission("difficultHelp.unionLeaderApproval")
@Ok("beetl:/platform/zhgh/staffbenefit/difficulthelp/unionLeaderApproval/form.html")
@SaCheckPermission("difficultHelp.secondApproval")
@Ok("beetl:/platform/zhgh/staffbenefit/difficulthelp/secondApproval/form.html")
public void form() {
}
@At
@SaCheckPermission("h5.difficultHelp.unionLeaderApproval")
@Ok("beetl:/platform/zhghh5/staffbenefit/difficulthelp/unionLeaderApproval/index.html")
@SaCheckPermission("h5.difficultHelp.secondApproval")
@Ok("beetl:/platform/zhghh5/staffbenefit/difficulthelp/secondApproval/index.html")
public void h5() {
}
@At
@ApiOperation("困难补助分工会审核列表")
@SaCheckPermission("difficultHelp.unionLeaderApproval")
@ApiOperation("困难补助二级审核列表")
@SaCheckPermission("difficultHelp.secondApproval")
public Result pageData(DifficultHelpPageParam pageParam) {
Sql sql = Sqls.create("""
SELECT
@@ -30,15 +30,15 @@ import java.util.List;
/**
* @version 1.0
* @Author zzr
* @name:DifficultHelpSchoolUnionApprovalController
* @name:DifficultHelpThirdApprovalController
* @Date 2025/7/31 11:47
* @注释
*/
@IocBean
@Ok("json")
@ApiOperation("困难补助校工会审核")
@At("/platform/difficultHelp/schoolUnionApproval")
public class DifficultHelpSchoolUnionApprovalController {
@ApiOperation("困难补助三级审核")
@At("/platform/difficultHelp/thirdApproval")
public class DifficultHelpThirdApprovalController {
@Inject
private Dao dao;
@@ -46,26 +46,26 @@ public class DifficultHelpSchoolUnionApprovalController {
private DifficultHelpCommonService difficultHelpCommonService;
@At("")
@SaCheckPermission("difficultHelp.schoolUnionApproval")
@Ok("beetl:/platform/zhgh/staffbenefit/difficulthelp/schoolunionapproval/index.html")
@SaCheckPermission("difficultHelp.thirdApproval")
@Ok("beetl:/platform/zhgh/staffbenefit/difficulthelp/thirdApproval/index.html")
public void index() {
}
@At
@SaCheckPermission("difficultHelp.schoolUnionApproval")
@Ok("beetl:/platform/zhgh/staffbenefit/difficulthelp/schoolunionapproval/form.html")
@SaCheckPermission("difficultHelp.thirdApproval")
@Ok("beetl:/platform/zhgh/staffbenefit/difficulthelp/thirdApproval/form.html")
public void form() {
}
@At
@SaCheckPermission("h5.difficultHelp.schoolUnionApproval")
@Ok("beetl:/platform/zhghh5/staffbenefit/difficulthelp/schoolunionapproval/index.html")
@SaCheckPermission("h5.difficultHelp.thirdApproval")
@Ok("beetl:/platform/zhghh5/staffbenefit/difficulthelp/thirdApproval/index.html")
public void h5() {
}
@At
@ApiOperation("困难补助校工会审核列表")
@SaCheckPermission("difficultHelp.schoolUnionApproval")
@ApiOperation("困难补助三级审核列表")
@SaCheckPermission("difficultHelp.thirdApproval")
public Result pageData(DifficultHelpPageParam pageParam) {
Sql sql = Sqls.create("""
SELECT
@@ -131,7 +131,7 @@ public class DifficultHelpSchoolUnionApprovalController {
@At
@ApiOperation("保存补助金额、级别")
@SaCheckPermission("difficultHelp.schoolUnionApproval")
@SaCheckPermission("difficultHelp.thirdApproval")
@SLog(tag = "困难补助申请", msg = "保存申请,填写人: ${args[0].proxyUserName}")
public Result save(@Param("data") DifficultHelpInfo difficultHelpInfo) {
dao.updateIgnoreNull(difficultHelpInfo);
@@ -260,7 +260,7 @@ public class TheRapyRecuperationUnionQueryController {
cnd.andEX("enroll.isNormal", "=", true);
cnd.andEX("YEAR ( enroll.signingUptime )", "=", year);
if (StrUtil.isNotBlank(lotId)) {
if (!"2".equals(state) && StrUtil.isNotBlank(lotId)) {
SqlExpressionGroup seg = new SqlExpressionGroup();
seg.or("line.lotId", "=", lotId);
// seg.or("agency.lotId", "=", lotId);
@@ -275,7 +275,7 @@ public class TheRapyRecuperationUnionQueryController {
}
cnd.andEX("enroll.selfUnionId", "=", unionId);
} else {
if (StrUtil.isNotBlank(state2)) {
if ("1".equals(state) && StrUtil.isNotBlank(state2)) {
//等于1本工会人员看自己工会线路人员
if (state2.equals("1")) {
cnd.andEX("enroll.selfUnionId", "=", TherapyContext.getUnionId());
@@ -296,8 +296,10 @@ public class TheRapyRecuperationUnionQueryController {
}
}
cnd.andEX("enroll.selfUnitId", "=", unitId);
cnd.andEX("lineu.lineId", "=", takePartInLineId);
cnd.andEX("lineu.id", "=", selectId);
if (!"2".equals(state)) {
cnd.andEX("lineu.lineId", "=", takePartInLineId);
cnd.andEX("lineu.id", "=", selectId);
}
addEnrollTravelAgencyCondition(cnd, agencyId);
if (state.equals("1")) {
cnd.andEX("line.regionalNature", "=", regionalNature);
@@ -305,9 +307,8 @@ public class TheRapyRecuperationUnionQueryController {
cnd.and("enroll.takePartInLineId", "!=", "");
sql.setVar("lotSql", ",(select lotName from inclusive_therapy_v3_lot where id = line.lotId) as lotName");
} else if (state.equals("2")) {
cnd.and("enroll.takePartInTravelAgencyId", "is not", null);
cnd.and("enroll.takePartInTravelAgencyId", "!=", "");
cnd.andEX("enroll.takePartInTravelAgencyId", "=", agencyId);
cnd.and("agency.id", "is not", null);
cnd.andEX("agency.id", "=", agencyId);
} else if ("3".equals(state)) {
cnd.and("enroll.takePartInBaseManagementId", "is not", null);
cnd.andEX("enroll.takePartInBaseManagementId", "=", takePartInBaseManagementId);
@@ -333,27 +334,35 @@ public class TheRapyRecuperationUnionQueryController {
public Object getLxsData(PageForm pageForm, String year, String agencyId) {
Cnd cnd = Cnd.NEW();
Sql sql = Sqls.create("""
SELECT agency.*
FROM (
SELECT
*,
agency.*,
files AS fileId,
( SELECT COUNT( 1 ) FROM inclusive_therapy_v3_enroll WHERE agency.id = takePartInTravelAgencyId and isNormal=true and stateId=@stateId $unionCnd $yearCnd) agencyNum
( SELECT COUNT(1)
FROM inclusive_therapy_v3_enroll enroll
LEFT JOIN inclusive_therapy_v3_line_union_select lineu ON lineu.id = enroll.takePartInLineId
LEFT JOIN inclusive_therapy_v3_line line ON line.id = lineu.lineId
WHERE agency.id = IFNULL(enroll.takePartInTravelAgencyId, IFNULL(lineu.travelAgencyId, line.travelAgencyId))
AND enroll.isNormal = TRUE AND enroll.stateId = @stateId
$agencyUnionCnd $agencyYearCnd
) agencyNum
FROM
inclusive_therapy_v3_travel_agency agency
) agency
$condition
""").setParam("stateId", TheRapyRecuperationState.PASS);
if (!TherapyContext.hasAnyRoles("sysadmin,H06")) {
sql.setVar("unionCnd", "AND selfUnionId = '%s' ".formatted(TherapyContext.getUnionId()));
sql.setVar("agencyUnionCnd", "AND enroll.selfUnionId = '%s' ".formatted(TherapyContext.getUnionId()));
}
if (StrUtil.isNotBlank(year)) {
sql.setVar("yearCnd", "AND YEAR(signingUptime) = '%s' ".formatted(year));
sql.setVar("agencyYearCnd", "AND YEAR(enroll.signingUptime) = '%s' ".formatted(year));
}
cnd.andEX("agency.`year`", "=", year);
cnd.andEX("agency.id", "=", agencyId);
cnd.and("agency.agencyNum", ">", 0);
sql.setCondition(cnd);
Pagination pagination = baseService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
List<NutMap> list = pagination.getList();
List<NutMap> agencyNum = list.stream().filter(v -> v.getInt("agencyNum") > 0).collect(Collectors.toList());
pagination.setList(agencyNum);
return pagination;
}
@@ -639,8 +648,8 @@ public class TheRapyRecuperationUnionQueryController {
//cnd1.and(Cnd.exps("enroll.selfUnionId", "=", Vi.getUnionId()));
}
} else if (state.equals("2")) {
cnd1.and("enroll.takePartInTravelAgencyId", "is not", null)
.and("enroll.takePartInTravelAgencyId", "!=", "")
cnd1.and("IFNULL(enroll.takePartInTravelAgencyId, IFNULL(lineu.travelAgencyId, line.travelAgencyId))", "is not", null)
.and("IFNULL(enroll.takePartInTravelAgencyId, IFNULL(lineu.travelAgencyId, line.travelAgencyId))", "!=", "")
.and("enroll.selfUnionId", "=", TherapyContext.getUnionId());
} else {
cnd1.and("enroll.takePartInBaseManagementId", "is not", null).and("enroll.selfUnionId", "=", TherapyContext.getUnionId());
@@ -675,8 +684,8 @@ public class TheRapyRecuperationUnionQueryController {
cnd1.and("enroll.takePartInLineId", "is not", null);
cnd1.and("enroll.takePartInLineId", "!=", "");
} else if (state.equals("2")) {
cnd1.and("enroll.takePartInTravelAgencyId", "is not", null);
cnd1.and("enroll.takePartInTravelAgencyId", "!=", "");
cnd1.and("IFNULL(enroll.takePartInTravelAgencyId, IFNULL(lineu.travelAgencyId, line.travelAgencyId))", "is not", null);
cnd1.and("IFNULL(enroll.takePartInTravelAgencyId, IFNULL(lineu.travelAgencyId, line.travelAgencyId))", "!=", "");
cnd1.andEX("enroll.selfUnionId", "=", unionId);
} else if (state.equals("3")) {
cnd1.and("enroll.takePartInBaseManagementId", "is not", null);
@@ -732,8 +741,8 @@ public class TheRapyRecuperationUnionQueryController {
//cnd2.and(Cnd.exps("enroll.selfUnionId", "=", Vi.getUnionId()));
}
} else if (state.equals("2")) {
cnd2.and("enroll.takePartInTravelAgencyId", "is not", null)
.and("enroll.takePartInTravelAgencyId", "!=", "")
cnd2.and("IFNULL(enroll.takePartInTravelAgencyId, IFNULL(lineu.travelAgencyId, line.travelAgencyId))", "is not", null)
.and("IFNULL(enroll.takePartInTravelAgencyId, IFNULL(lineu.travelAgencyId, line.travelAgencyId))", "!=", "")
.and("enroll.selfUnionId", "=", TherapyContext.getUnionId());
} else {
cnd2.and("enroll.takePartInBaseManagementId", "is not", null).and("enroll.selfUnionId", "=", TherapyContext.getUnionId());
@@ -768,8 +777,8 @@ public class TheRapyRecuperationUnionQueryController {
cnd2.and("enroll.takePartInLineId", "is not", null);
cnd2.and("enroll.takePartInLineId", "!=", "");
} else if (state.equals("2")) {
cnd2.and("enroll.takePartInTravelAgencyId", "is not", null);
cnd2.and("enroll.takePartInTravelAgencyId", "!=", "");
cnd2.and("IFNULL(enroll.takePartInTravelAgencyId, IFNULL(lineu.travelAgencyId, line.travelAgencyId))", "is not", null);
cnd2.and("IFNULL(enroll.takePartInTravelAgencyId, IFNULL(lineu.travelAgencyId, line.travelAgencyId))", "!=", "");
cnd2.andEX("enroll.selfUnionId", "=", unionId);
} else {
cnd2.and("enroll.takePartInBaseManagementId", "is not", null);
@@ -99,8 +99,16 @@ public class TheRapyRecuperationEnrollServiceImpl extends TherapyServiceImpl<The
@Inject
private TheRapyRecuperationLineService lineService;
private boolean isCurrentUserInActivityScope() {
TheRapyRecuperationConfig config = dao().fetch(TheRapyRecuperationConfig.class);
return config != null && activityBasicScopeService.isUserInGroup(config.getActivityGroupId(), TherapyContext.getUserId());
}
@Override
public Pagination enrollPageData(PageForm pageForm, Integer year, String unionId, int trrt, Integer lineUnionType, String lineKeyword, Integer signUpStatus) {
if (!isCurrentUserInActivityScope()) {
return new Pagination(pageForm.getPageNumber(), pageForm.getPageSize(), 0, Collections.emptyList());
}
Cnd cnd = Cnd.NEW();
if (List.of(TheRapyRecuperationType.provinceInLine.getValue(), TheRapyRecuperationType.provinceOutLine.getValue()).contains(trrt)) {
Sql lineSql = Sqls.create("""
@@ -217,6 +225,9 @@ public class TheRapyRecuperationEnrollServiceImpl extends TherapyServiceImpl<The
@Override
public List<NutMap> getSelectLineById(String lineId, String usId, String unionId, int trrt, Integer lineUnionType, Integer signUpStatus) {
if (!isCurrentUserInActivityScope()) {
return Collections.emptyList();
}
Sql lineSql = Sqls.create("""
SELECT
us.id as usId,
@@ -2,6 +2,7 @@ package com.budwk.app.zhgh.staffbenefit.therapyRecuperation.service.impl;
import com.budwk.app.base.page.Pagination;
import com.budwk.app.zhgh.staffbenefit.therapyRecuperation.support.TherapyContext;
import com.budwk.app.zhgh.staffbenefit.therapyRecuperation.constant.TheRapyRecuperationState;
import com.budwk.app.base.param.PageForm;
import com.budwk.app.zhgh.staffbenefit.therapyRecuperation.support.TherapyServiceImpl;
import com.budwk.app.zhgh.staffbenefit.therapyRecuperation.model.TheRapyRecuperationTravelAgency;
@@ -114,11 +115,22 @@ public class TheRapyRecuperationTravelAgencyServiceImpl extends TherapyServiceIm
( SELECT COUNT( 1 ) FROM inclusive_therapy_v3_enroll_companion WHERE trreId = enroll.id AND relation = '亲属' ) isFamily
FROM
`inclusive_therapy_v3_enroll` enroll
LEFT JOIN inclusive_therapy_v3_travel_agency agency ON agency.id = enroll.takePartInTravelAgencyId
LEFT JOIN inclusive_therapy_v3_line_union_select lineu ON lineu.id = enroll.takePartInLineId
LEFT JOIN inclusive_therapy_v3_line line ON line.id = lineu.lineId
LEFT JOIN inclusive_therapy_v3_travel_agency agency
ON agency.id = IFNULL(enroll.takePartInTravelAgencyId, IFNULL(lineu.travelAgencyId, line.travelAgencyId))
WHERE
enroll.takePartInTravelAgencyId = @takePartInTravelAgencyId
and enroll.selfUnionId = @unionId
""").setParam("takePartInTravelAgencyId", id).setParam("unionId", TherapyContext.getUnionId());
agency.id = @takePartInTravelAgencyId
AND enroll.isNormal = TRUE
AND enroll.stateId = @stateId
AND YEAR(enroll.signingUptime) = agency.year
$agencyUnionCnd
""").setParam("takePartInTravelAgencyId", id)
.setParam("stateId", TheRapyRecuperationState.PASS);
if (!TherapyContext.hasAnyRoles("sysadmin,H06")) {
sql.setVar("agencyUnionCnd", "AND enroll.selfUnionId = @unionId");
sql.setParam("unionId", TherapyContext.getUnionId());
}
return listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
}
}
@@ -25,6 +25,16 @@ public class MemberHistory extends Sys_user {
@ColDefine(type = ColType.VARCHAR, width = 32)
private String id;
@Column
@Comment("编制类别")
@ColDefine(type = ColType.TEXT)
private String preparedBy;
@Column
@Comment("岗位类别")
@ColDefine(type = ColType.TEXT)
private String jobCategory;
@Column
@Comment("年度")
@ColDefine(type = ColType.INT, width = 4)
@@ -5,7 +5,6 @@ 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.afterturn.easypoi.excel.export.ExcelExportService;
import cn.hutool.core.util.StrUtil;
import com.budwk.app.base.constant.RoleConstant;
import com.budwk.app.base.page.Pagination;
@@ -24,6 +23,13 @@ import com.budwk.app.zhgh.welfare.param.WelfareSelectionSituationPageForm;
import com.budwk.app.zhgh.welfare.service.WelfareSelectionSituationService;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.ClientAnchor;
import org.apache.poi.ss.usermodel.Drawing;
import org.apache.poi.ss.usermodel.Font;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
@@ -232,55 +238,69 @@ public class WelfareSelectionSituationServiceImpl extends BaseServiceImpl<Welfar
List<WelfareProjectSubjectOption> optionList = dao().query(WelfareProjectSubjectOption.class, Cnd.where(WelfareProjectSubjectOption::getWelfareId, "=", pageForm.getProjectId()).asc("optionSort"));
for (NutMap map : list) {
if (map.get("selectOptionIds") != null){
String[] selectOptionIds = map.getString("selectOptionIds").split(",");
for (WelfareProjectSubjectOption option : optionList) {
if(Arrays.asList(selectOptionIds).contains(option.getId())){
map.put(option.getOptionName(), "√");
}
}
}
if (map.get("userSign") != null){
if (map.get("userSign") != null) {
try {
Sys_file file = dao().fetch(Sys_file.class, Cnd.where(Sys_file::getDownloadPath, "=", map.getString("userSign")));
byte[] userSignBytes = SysFileMinIoUtil.getFileBytes(file.getBucket(), file.getStoragePath());
map.put("userSign", userSignBytes);
}catch (Exception e){
e.printStackTrace();
log.error("下载图片失败", e);
BufferedImage image = ImageIO.read(new ByteArrayInputStream(userSignBytes));
if (image != null) {
ByteArrayOutputStream png = new ByteArrayOutputStream();
ImageIO.write(image, "png", png);
map.put("userSign", png.toByteArray());
}
} catch (Exception e) {
log.error("下载签字图片失败", e);
}
}
}
List<Map<String, Object>> safeList = list.stream().map(nutMap -> {
Map<String, Object> map = new HashMap<>(nutMap);
return map;
}).toList();
// 分组
Map<String, List<Map<String, Object>>> listMap = safeList.stream()
.collect(Collectors.groupingBy(n -> (String) n.get("welfareUnionName")));
// 构建 Excel 列
List<ExcelExportEntity> entities = new ArrayList<>();
entities.add(new ExcelExportEntity("工号", "loginName", 20));
entities.add(new ExcelExportEntity("姓名", "userName", 20));
optionList.forEach(option -> {
entities.add(new ExcelExportEntity(option.getOptionName(), option.getOptionName(), 20));
});
ExcelExportEntity userSignEntity = new ExcelExportEntity("签字", "userSign", 20);
userSignEntity.setType(2);
userSignEntity.setExportImageType(2);
entities.add(userSignEntity);
// 导出
Map<String, List<NutMap>> rowsByUnion = list.stream()
.collect(Collectors.groupingBy(n -> n.getString("welfareUnionName")));
Workbook workbook = new HSSFWorkbook();
listMap.forEach((k, v) -> {
ExcelExportService service = new ExcelExportService();
ExportParams exportParams = new ExportParams();
exportParams.setSheetName(k);
exportParams.setType(ExcelType.HSSF);
service.createSheetForMap(workbook, exportParams, entities, v);
if (rowsByUnion.isEmpty()) {
rowsByUnion.put("领取表", Collections.emptyList());
}
CellStyle headerStyle = workbook.createCellStyle();
Font headerFont = workbook.createFont();
headerFont.setBold(true);
headerStyle.setFont(headerFont);
List<String> headers = new ArrayList<>(List.of("工号", "姓名"));
optionList.forEach(option -> headers.add(option.getOptionName()));
headers.add("签字");
int signColumn = headers.size() - 1;
rowsByUnion.forEach((unionName, records) -> {
Sheet sheet = workbook.createSheet(unionName);
Row header = sheet.createRow(0);
for (int column = 0; column < headers.size(); column++) {
sheet.setColumnWidth(column, 20 * 256);
Cell cell = header.createCell(column);
cell.setCellValue(headers.get(column));
cell.setCellStyle(headerStyle);
}
Drawing<?> drawing = sheet.createDrawingPatriarch();
for (NutMap record : records) {
Row row = sheet.createRow(sheet.getLastRowNum() + 1);
row.createCell(0).setCellValue(Objects.toString(record.get("loginName"), ""));
row.createCell(1).setCellValue(Objects.toString(record.get("userName"), ""));
Set<String> selectedIds = new HashSet<>(Arrays.asList(
Objects.toString(record.get("selectOptionIds"), "").split(",")));
for (int i = 0; i < optionList.size(); i++) {
row.createCell(i + 2).setCellValue(selectedIds.contains(optionList.get(i).getId()) ? "√" : "");
}
if (record.get("userSign") instanceof byte[] signature) {
row.setHeightInPoints(40);
ClientAnchor anchor = workbook.getCreationHelper().createClientAnchor();
anchor.setCol1(signColumn);
anchor.setCol2(signColumn + 1);
anchor.setRow1(row.getRowNum());
anchor.setRow2(row.getRowNum() + 1);
drawing.createPicture(anchor, workbook.addPicture(signature, Workbook.PICTURE_TYPE_PNG));
}
}
});
CommonDownloadUtil.download("领取表.xls", workbook, response);
+1 -1
View File
@@ -34,7 +34,7 @@ sdk:
appSecret: a65cec4fb69980bd88258fc8433a3eef
redirectUri: /platform/wx/oauth2/callback
cas:
enable: true
enable: false
server-url-prefix: https://authserver.zjnu.edu.cn/authserver
server-login-url: https://authserver.zjnu.edu.cn/authserver/login
qi-wx-server-login-url: https://authserver.zjnu.edu.cn/authserver/login
+1 -1
View File
@@ -68,7 +68,7 @@ custom:
msg:
platform:
enabled: true
IntelligenceMode: false
IntelligenceMode: true
app-id: 'MSG45363193'
app-password: 'OGQxNzVmOTJkZjM5NzJhZDg1MDNiZGM0MDQ5ZTJlNDY'
base-url: http://xxt.zjnu.edu.cn
+11 -5
View File
@@ -7938,7 +7938,7 @@ CREATE TABLE `member_history` (
`modelWorkerFiles` json NULL COMMENT '劳模资料',
`customMenuIds` json NULL COMMENT '常用菜单',
`retireDate` date NULL DEFAULT NULL COMMENT '退休日期',
`preparedBy` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '人事编制',
`preparedBy` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL COMMENT '编制类别',
`customApprovalOpinions` json NULL COMMENT '常用审批意见',
`wxOpenId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '微信openId',
`totalIntegral` int NULL DEFAULT 0 COMMENT '总积分',
@@ -7962,7 +7962,7 @@ CREATE TABLE `member_history` (
`isThirtyTeach` tinyint(1) NULL DEFAULT NULL COMMENT '是否教学30年以上教工',
`preparationMemberFee` decimal(10, 2) NULL DEFAULT NULL COMMENT '编制会费',
`contractMemberFee` decimal(10, 2) NULL DEFAULT NULL COMMENT '合同制会费',
`jobCategory` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '岗位类别',
`jobCategory` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL COMMENT '岗位类别',
`professionalTitle` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '职称',
`professionalLevel` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '职级',
`employeeSource` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '职工来源',
@@ -12460,7 +12460,7 @@ CREATE TABLE `sys_user` (
`arrivalAtSchoolDate` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '来校时间',
`postDoctoralJoinDate` date NULL DEFAULT NULL COMMENT '博士后进站时间',
`personType1` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '人员类别',
`preparedBy` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '聘用方式',
`preparedBy` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '编制类别',
`marriage` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '婚姻状况',
`memberTime` datetime NULL DEFAULT NULL COMMENT '会员加入时间',
`openId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT 'openId',
@@ -12634,7 +12634,7 @@ CREATE TABLE `sys_user_history` (
`dutySituation` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '在岗情况',
`personType` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '教职工类别码',
`pendingConfirmStatus` tinyint NULL DEFAULT 0 COMMENT '待确认状态:0不用确认、1待确认、2已确认',
`preparedBy` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '编制类别码',
`preparedBy` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '编制类别',
`teachingTime` date NULL DEFAULT NULL COMMENT '从教年月',
`expectedLeaveSchoolDate` date NULL DEFAULT NULL COMMENT '预计离校时间/最后离校时间',
`retireDate` date NULL DEFAULT NULL COMMENT '退休时间',
@@ -12743,7 +12743,9 @@ CREATE TABLE `sys_user_source` (
`idCard` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '证件号码',
`mobile` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '手机号码',
`education` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '学历',
`educationCode` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '最高学历代码',
`academicDegree` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '学位',
`academicDegreeCode` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '最高学位代码',
`technicalTitle` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '技术职称',
`technicalTitleLevel` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '技术职称级别',
`position` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '职务',
@@ -12754,6 +12756,7 @@ CREATE TABLE `sys_user_source` (
`employmentType` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '聘用方式',
`identityType` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '身份类型',
`userState` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '在职状态',
`userStateCode` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '当前状态代码',
`retireDate` date NULL DEFAULT NULL COMMENT '退休时间',
`avatar` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '头像',
`email` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '电子邮箱',
@@ -12784,7 +12787,8 @@ CREATE TABLE `sys_user_source` (
`arrivalAtSchoolDate` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '来校时间',
`postDoctoralJoinDate` date NULL DEFAULT NULL COMMENT '博士后进站时间',
`personType` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '人员类别',
`preparedBy` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '聘用方式',
`preparedBy` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '编制类别',
`preparedByCode` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '编制类别代码',
`marriage` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '婚姻状况',
`memberTime` datetime NULL DEFAULT NULL COMMENT '会员加入时间',
`openId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT 'openId',
@@ -12793,7 +12797,9 @@ CREATE TABLE `sys_user_source` (
`preparationMemberFee` decimal(10, 2) NULL DEFAULT NULL COMMENT '编制会费',
`contractMemberFee` decimal(10, 2) NULL DEFAULT NULL COMMENT '合同制会费',
`jobCategory` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '岗位类别',
`jobCategoryCode` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '聘岗类型代码',
`professionalTitle` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '职称',
`professionalTitleCode` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '专业技术职务代码',
`professionalLevel` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '职级',
`employeeSource` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '职工来源',
`administrativeLevel` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '行政级别(用于管理岗位)',
@@ -0,0 +1,58 @@
-- 年度基础经费与专项经费下拨;原 outlay_allocate_union 历史记录及余额保持不变。
-- 人数口径沿用会员统计:本年度 vw_user.member=1,历史年度 member_history.member=1。
-- 新表仅记录新流程数据,不自动将历史季度下拨转为年度基础经费,避免重复计入预算。
CREATE TABLE IF NOT EXISTS `outlay_annual_base` (
`id` varchar(32) NOT NULL,
`year` int NOT NULL,
`unionId` varchar(32) NOT NULL,
`memberCount` int NOT NULL,
`standard` decimal(10,2) NOT NULL DEFAULT 800.00,
`calculatedMoney` decimal(10,2) NOT NULL,
`allocateMoney` decimal(10,2) NOT NULL,
`remark` varchar(1000) DEFAULT NULL,
`status` tinyint NOT NULL DEFAULT 0 COMMENT '0待下拨 1已下拨',
`version` int NOT NULL DEFAULT 0,
`allocatedAt` bigint DEFAULT NULL,
`createdAt` bigint NOT NULL,
`createdBy` varchar(32) NOT NULL,
`updatedAt` bigint NOT NULL,
`updatedBy` varchar(32) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_annual_base_year_union` (`year`,`unionId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='年度基础经费下拨';
CREATE TABLE IF NOT EXISTS `outlay_annual_special` (
`id` varchar(32) NOT NULL COMMENT '同时作为提交幂等标识',
`year` int NOT NULL,
`unionId` varchar(32) NOT NULL,
`projectName` varchar(100) NOT NULL,
`allocateMoney` decimal(10,2) NOT NULL,
`remark` varchar(1000) DEFAULT NULL,
`status` tinyint NOT NULL DEFAULT 0 COMMENT '0待下拨 1已下拨',
`version` int NOT NULL DEFAULT 0,
`allocatedAt` bigint DEFAULT NULL,
`createdAt` bigint NOT NULL,
`createdBy` varchar(32) NOT NULL,
`updatedAt` bigint NOT NULL,
`updatedBy` varchar(32) NOT NULL,
PRIMARY KEY (`id`),
KEY `idx_annual_special_year_union` (`year`,`unionId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='专项经费下拨';
CREATE TABLE IF NOT EXISTS `outlay_annual_allocate_log` (
`id` varchar(32) NOT NULL,
`allocateType` varchar(10) NOT NULL,
`allocateId` varchar(32) NOT NULL,
`action` varchar(30) NOT NULL,
`beforeData` text DEFAULT NULL COMMENT '操作前完整快照',
`afterData` text NOT NULL COMMENT '操作后完整快照',
`remark` varchar(1000) DEFAULT NULL,
`createdAt` bigint NOT NULL,
`createdBy` varchar(32) NOT NULL,
PRIMARY KEY (`id`),
KEY `idx_annual_log_record_time` (`allocateType`,`allocateId`,`createdAt`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='经费下拨及调整记录';
-- 沿用现有权限与入口,仅调整菜单名称。
UPDATE sys_menu SET name='年度经费下拨', aliasName='年度经费下拨'
WHERE permission='outlay.outlayManage.union.allocate';
@@ -0,0 +1,783 @@
-- 人员接口原始代码到名称的映射;系统页面字典另由 sys_dict 保存名称值。
-- 同分类、同代码已有记录更新名称,缺失记录补充,不删除其他记录。
SET NAMES utf8mb4;
START TRANSACTION;
UPDATE sys_data_dict existing
JOIN (
SELECT 'USER_SEX' AS parentCode, '1' AS code, '男' AS name
UNION ALL SELECT 'USER_SEX', '2', '女'
UNION ALL SELECT 'USER_POLITICAL', '01', '中国共产党员'
UNION ALL SELECT 'USER_POLITICAL', '02', '中国共产党预备党员'
UNION ALL SELECT 'USER_POLITICAL', '03', '中国共产主义青年团团员'
UNION ALL SELECT 'USER_POLITICAL', '04', '中国国民党革命委员会会员'
UNION ALL SELECT 'USER_POLITICAL', '05', '中国民主同盟盟员'
UNION ALL SELECT 'USER_POLITICAL', '06', '中国民主建国会会员'
UNION ALL SELECT 'USER_POLITICAL', '07', '中国民主促进会会员'
UNION ALL SELECT 'USER_POLITICAL', '08', '中国农工民主党党员'
UNION ALL SELECT 'USER_POLITICAL', '09', '中国致公党党员'
UNION ALL SELECT 'USER_POLITICAL', '10', '九三学社社员'
UNION ALL SELECT 'USER_POLITICAL', '11', '台湾民主自治同盟盟员'
UNION ALL SELECT 'USER_POLITICAL', '12', '无党派民主人士'
UNION ALL SELECT 'USER_POLITICAL', '13', '群众'
UNION ALL SELECT 'USER_POLITICAL', '14', '入党积极分子'
UNION ALL SELECT 'USER_POLITICAL', '99', '其他'
UNION ALL SELECT 'USER_NATION', '01', '汉族'
UNION ALL SELECT 'USER_NATION', '02', '蒙古族'
UNION ALL SELECT 'USER_NATION', '03', '回族'
UNION ALL SELECT 'USER_NATION', '04', '藏族'
UNION ALL SELECT 'USER_NATION', '05', '维吾尔族'
UNION ALL SELECT 'USER_NATION', '06', '苗族'
UNION ALL SELECT 'USER_NATION', '07', '彝族'
UNION ALL SELECT 'USER_NATION', '08', '壮族'
UNION ALL SELECT 'USER_NATION', '09', '布依族'
UNION ALL SELECT 'USER_NATION', '10', '朝鲜族'
UNION ALL SELECT 'USER_NATION', '11', '满族'
UNION ALL SELECT 'USER_NATION', '12', '侗族'
UNION ALL SELECT 'USER_NATION', '13', '瑶族'
UNION ALL SELECT 'USER_NATION', '14', '白族'
UNION ALL SELECT 'USER_NATION', '15', '土家族'
UNION ALL SELECT 'USER_NATION', '16', '哈尼族'
UNION ALL SELECT 'USER_NATION', '17', '哈萨克族'
UNION ALL SELECT 'USER_NATION', '18', '傣族'
UNION ALL SELECT 'USER_NATION', '19', '黎族'
UNION ALL SELECT 'USER_NATION', '20', '傈僳族'
UNION ALL SELECT 'USER_NATION', '21', '佤族'
UNION ALL SELECT 'USER_NATION', '22', '畲族'
UNION ALL SELECT 'USER_NATION', '23', '高山族'
UNION ALL SELECT 'USER_NATION', '24', '拉祜族'
UNION ALL SELECT 'USER_NATION', '25', '水族'
UNION ALL SELECT 'USER_NATION', '26', '东乡族'
UNION ALL SELECT 'USER_NATION', '27', '纳西族'
UNION ALL SELECT 'USER_NATION', '28', '景颇族'
UNION ALL SELECT 'USER_NATION', '29', '柯尔克孜族'
UNION ALL SELECT 'USER_NATION', '30', '土族'
UNION ALL SELECT 'USER_NATION', '31', '达斡尔族'
UNION ALL SELECT 'USER_NATION', '32', '仫佬族'
UNION ALL SELECT 'USER_NATION', '33', '羌族'
UNION ALL SELECT 'USER_NATION', '34', '布朗族'
UNION ALL SELECT 'USER_NATION', '35', '撒拉族'
UNION ALL SELECT 'USER_NATION', '36', '毛南族'
UNION ALL SELECT 'USER_NATION', '37', '仡佬族'
UNION ALL SELECT 'USER_NATION', '38', '锡伯族'
UNION ALL SELECT 'USER_NATION', '39', '阿昌族'
UNION ALL SELECT 'USER_NATION', '40', '普米族'
UNION ALL SELECT 'USER_NATION', '41', '塔吉克族'
UNION ALL SELECT 'USER_NATION', '42', '怒族'
UNION ALL SELECT 'USER_NATION', '43', '乌孜别克族'
UNION ALL SELECT 'USER_NATION', '44', '俄罗斯族'
UNION ALL SELECT 'USER_NATION', '45', '鄂温克族'
UNION ALL SELECT 'USER_NATION', '46', '崩龙族'
UNION ALL SELECT 'USER_NATION', '47', '保安族'
UNION ALL SELECT 'USER_NATION', '48', '裕固族'
UNION ALL SELECT 'USER_NATION', '49', '京族'
UNION ALL SELECT 'USER_NATION', '50', '塔塔尔族'
UNION ALL SELECT 'USER_NATION', '51', '独龙族'
UNION ALL SELECT 'USER_NATION', '52', '鄂伦春族'
UNION ALL SELECT 'USER_NATION', '53', '赫哲族'
UNION ALL SELECT 'USER_NATION', '54', '门巴族'
UNION ALL SELECT 'USER_NATION', '55', '珞巴族'
UNION ALL SELECT 'USER_NATION', '56', '基诺族'
UNION ALL SELECT 'USER_NATION', '59', '穿青人'
UNION ALL SELECT 'USER_NATION', '60', '革(亻革)家人'
UNION ALL SELECT 'USER_NATION', '90', '藏族(区内)'
UNION ALL SELECT 'USER_NATION', '97', '其他'
UNION ALL SELECT 'USER_NATION', '98', '外国血统中国籍人士'
UNION ALL SELECT 'USER_STATE', '01', '离退休'
UNION ALL SELECT 'USER_STATE', '03', '死亡'
UNION ALL SELECT 'USER_STATE', '04', '退休返聘'
UNION ALL SELECT 'USER_STATE', '05', '调出'
UNION ALL SELECT 'USER_STATE', '06', '辞职'
UNION ALL SELECT 'USER_STATE', '07', '离职'
UNION ALL SELECT 'USER_STATE', '08', '开除'
UNION ALL SELECT 'USER_STATE', '11', '在职'
UNION ALL SELECT 'USER_STATE', '14', '长病假'
UNION ALL SELECT 'USER_STATE', '15', '因公出国'
UNION ALL SELECT 'USER_STATE', '17', '待岗'
UNION ALL SELECT 'USER_STATE', '19', '内退'
UNION ALL SELECT 'USER_STATE', '20', '自主创业'
UNION ALL SELECT 'USER_STATE', '21', '挂职'
UNION ALL SELECT 'USER_STATE', '22', '在岗'
UNION ALL SELECT 'USER_STATE', '98', '病假等'
UNION ALL SELECT 'USER_STATE', '99', '其他'
UNION ALL SELECT 'USER_STATE', '999', '报到办理中'
UNION ALL SELECT 'USER_JOB_CATEGORY', '10', '管理岗位'
UNION ALL SELECT 'USER_JOB_CATEGORY', '20', '专业技术岗位'
UNION ALL SELECT 'USER_JOB_CATEGORY', '21', '教师岗位'
UNION ALL SELECT 'USER_JOB_CATEGORY', '22', '专职辅导员岗位'
UNION ALL SELECT 'USER_JOB_CATEGORY', '23', '其他专业技术岗位'
UNION ALL SELECT 'USER_JOB_CATEGORY', '30', '工勤技能岗位'
UNION ALL SELECT 'USER_JOB_CATEGORY', '125', '编辑'
UNION ALL SELECT 'USER_JOB_CATEGORY', '126', '编审'
UNION ALL SELECT 'USER_JOB_CATEGORY', '127', '大学讲师'
UNION ALL SELECT 'USER_JOB_CATEGORY', '128', '档案'
UNION ALL SELECT 'USER_JOB_CATEGORY', '129', '副教授'
UNION ALL SELECT 'USER_JOB_CATEGORY', '130', '高级工程师'
UNION ALL SELECT 'USER_JOB_CATEGORY', '131', '高级会计师'
UNION ALL SELECT 'USER_JOB_CATEGORY', '132', '高级讲师'
UNION ALL SELECT 'USER_JOB_CATEGORY', '133', '高校讲师'
UNION ALL SELECT 'USER_JOB_CATEGORY', '134', '工程'
UNION ALL SELECT 'USER_JOB_CATEGORY', '135', '馆员'
UNION ALL SELECT 'USER_JOB_CATEGORY', '136', '管理'
UNION ALL SELECT 'USER_JOB_CATEGORY', '137', '会计'
UNION ALL SELECT 'USER_JOB_CATEGORY', '138', '会计审计'
UNION ALL SELECT 'USER_JOB_CATEGORY', '139', '讲师'
UNION ALL SELECT 'USER_JOB_CATEGORY', '140', '教管'
UNION ALL SELECT 'USER_JOB_CATEGORY', '142', '教育管理'
UNION ALL SELECT 'USER_JOB_CATEGORY', '143', '科研'
UNION ALL SELECT 'USER_JOB_CATEGORY', '145', '实验'
UNION ALL SELECT 'USER_JOB_CATEGORY', '146', '实验师'
UNION ALL SELECT 'USER_JOB_CATEGORY', '147', '思政'
UNION ALL SELECT 'USER_JOB_CATEGORY', '148', '图资'
UNION ALL SELECT 'USER_JOB_CATEGORY', '149', '卫计'
UNION ALL SELECT 'USER_JOB_CATEGORY', '150', '卫技'
UNION ALL SELECT 'USER_JOB_CATEGORY', '151', '幼教'
UNION ALL SELECT 'USER_ID_CARD_TYPE', '0', '居民身份证'
UNION ALL SELECT 'USER_ID_CARD_TYPE', '1', '护照'
UNION ALL SELECT 'USER_ID_CARD_TYPE', '2', '港澳台居民身份证'
UNION ALL SELECT 'USER_ID_CARD_TYPE', '4', '旅行证据'
UNION ALL SELECT 'USER_ID_CARD_TYPE', '5', '其他'
UNION ALL SELECT 'USER_MANY_UNIT', '0', '否'
UNION ALL SELECT 'USER_MANY_UNIT', '1', '是'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '000', '无学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '0', '博士后'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '004', '教育学博士后'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '005', '文学博士后'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '006', '历史学博士后'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '008', '工学博士后'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '100', '名誉博士学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '200', '博士学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '201', '哲学博士学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '202', '经济学博士学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '203', '法学博士学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '204', '教育学博士学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '205', '文学博士学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '206', '历史学博士学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '207', '理学博士学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '208', '工学博士学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '209', '农学博士学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '210', '医学博士学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '212', '管理学博士学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '213', '艺术学博士学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '242', '教育博士专业学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '245', '临床医学博士专业学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '248', '兽医博士专业学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '250', '口腔医学博士专业学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '300', '硕士学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '301', '哲学硕士学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '302', '经济学硕士学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '303', '法学硕士学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '304', '教育学硕士学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '305', '文学硕士学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '306', '历史学硕士学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '307', '理学硕士学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '308', '工学硕士学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '309', '农学硕士学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '310', '医学硕士学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '312', '管理学硕士学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '313', '艺术学硕士学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '341', '法律硕士专业学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '342', '教育硕士专业学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '343', '工程硕士专业学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '344', '建筑学硕士专业学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '345', '临床学硕士专业学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '346', '工商管理硕士专业学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '347', '农业推广硕士专业学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '348', '兽医硕士专业学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '349', '公共管理硕士专业学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '350', '口腔医学硕士专业学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '351', '公共卫生硕士专业学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '352', '军事硕士专业学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '353', '金融硕士专业学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '354', '体育硕士专业学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '355', '艺术硕士专业学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '356', '风景园林硕士专业学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '357', '汉语国际教育硕士专业学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '358', '翻译硕士专业学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '359', '审计硕士专业学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '360', '社会工作硕士专业学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '362', '体育硕士专业学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '364', '应用心理硕士专业学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '365', '翻译硕士专业学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '370', '风景园林硕士专业学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '375', '会计硕士专业学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '377', '图书情报硕士专业学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '379', '艺术硕士专业学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '400', '学士学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '401', '哲学学士学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '402', '经济学学士学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '403', '法学学士学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '404', '教育学学士学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '405', '文学学士学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '406', '历史学学士学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '407', '理学学士学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '408', '工学学士学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '409', '农学学士学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '410', '医学学士学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '412', '管理学学士学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '413', '艺术学学士学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '444', '建筑学学士专业学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '900', '境外学位'
UNION ALL SELECT 'USER_EDUCATION', '10', '研究生教育'
UNION ALL SELECT 'USER_EDUCATION', '11', '博士研究生毕业'
UNION ALL SELECT 'USER_EDUCATION', '12', '博士研究生结业'
UNION ALL SELECT 'USER_EDUCATION', '14', '硕士研究生毕业'
UNION ALL SELECT 'USER_EDUCATION', '15', '硕士研究生结业'
UNION ALL SELECT 'USER_EDUCATION', '17', '研究生班毕业'
UNION ALL SELECT 'USER_EDUCATION', '18', '研究生班结业'
UNION ALL SELECT 'USER_EDUCATION', '20', '大学本科教育'
UNION ALL SELECT 'USER_EDUCATION', '21', '大学本科毕业'
UNION ALL SELECT 'USER_EDUCATION', '22', '大学本科结业'
UNION ALL SELECT 'USER_EDUCATION', '25', '双学历毕业'
UNION ALL SELECT 'USER_EDUCATION', '28', '大学普通班毕业'
UNION ALL SELECT 'USER_EDUCATION', '30', '大学专科教育'
UNION ALL SELECT 'USER_EDUCATION', '31', '大学专科毕业'
UNION ALL SELECT 'USER_EDUCATION', '32', '大学专科结业'
UNION ALL SELECT 'USER_EDUCATION', '40', '中等职业教育'
UNION ALL SELECT 'USER_EDUCATION', '41', '中等专科毕业'
UNION ALL SELECT 'USER_EDUCATION', '42', '中等专科结业'
UNION ALL SELECT 'USER_EDUCATION', '43', '中等专科肄业'
UNION ALL SELECT 'USER_EDUCATION', '44', '职业高中毕业'
UNION ALL SELECT 'USER_EDUCATION', '45', '职业高中结业'
UNION ALL SELECT 'USER_EDUCATION', '47', '技工学校毕业'
UNION ALL SELECT 'USER_EDUCATION', '48', '技工学校结业'
UNION ALL SELECT 'USER_EDUCATION', '60', '普通高级中学教育'
UNION ALL SELECT 'USER_EDUCATION', '61', '普通高中毕业'
UNION ALL SELECT 'USER_EDUCATION', '62', '普通高中结业'
UNION ALL SELECT 'USER_EDUCATION', '63', '普通高中肄业'
UNION ALL SELECT 'USER_EDUCATION', '70', '初级中学教育'
UNION ALL SELECT 'USER_EDUCATION', '71', '初中毕业'
UNION ALL SELECT 'USER_EDUCATION', '73', '初中肄业'
UNION ALL SELECT 'USER_EDUCATION', '80', '小学教育'
UNION ALL SELECT 'USER_EDUCATION', '81', '小学毕业'
UNION ALL SELECT 'USER_EDUCATION', '90', '其他'
UNION ALL SELECT 'USER_EDUCATION', '128', '相当大学毕业'
UNION ALL SELECT 'USER_EDUCATION', '138', '相当专科毕业'
UNION ALL SELECT 'USER_EDUCATION', '142', '中技毕业'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '010', '高等学校教师'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '011', '教授'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '012', '副教授'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '013', '讲师(高校)'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '014', '助教(高校)'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '022', '高级讲师(中专)'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '023', '讲师(中专)'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '024', '助理讲师(中专)'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '032', '高级讲师(技校)'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '033', '讲师(技校)'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '034', '助理讲师(技校)'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '043', '一级实习指导教师'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '044', '二级实习指导教师'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '045', '三级实习指导教师'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '052', '高级教师(中学)'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '053', '一级教师(中学)'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '054', '二级教师(中学)'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '061', '正高级教师'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '062', '高级教师'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '063', '一级教师'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '064', '二级教师'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '071', '教授级高级实验师'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '072', '高级实验师'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '073', '实验师'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '074', '助理实验师'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '075', '实验员'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '081', '教授级高级工程师'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '082', '高级工程师'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '083', '工程师'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '084', '助理工程师'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '085', '技术员'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '093', '农艺师'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '110', '农业技术人员(畜牧)'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '120', '经济专业人员'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '123', '经济师'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '124', '助理经济师'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '130', '会计专业人员'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '132', '高级会计师'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '133', '会计师'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '134', '助理会计师'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '135', '会计员'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '140', '统计专业人员'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '143', '统计师'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '151', '编审'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '152', '副编审'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '153', '编辑'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '202', '主任编辑'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '203', '编辑'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '220', '播音员'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '230', '卫生技术人员(医师)'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '231', '主任医师'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '232', '副主任医师'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '233', '主治医师'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '234', '医师'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '242', '副主任药师'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '243', '主管药师'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '244', '药师'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '250', '卫生技术人员(护理)'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '252', '副主任护师'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '253', '主管护师'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '254', '护师'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '263', '卫生主管技师'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '413', '高级教师(小学)'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '414', '一级教师(小学)'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '430', '船舶技术人员(轮机)'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '611', '研究员(自然科学)'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '612', '副研究员(自然科学)'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '613', '助理研究员(自然科学)'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '621', '研究员(社会科学)'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '622', '副研究员(社会科学)'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '623', '助理研究员(社会科学)'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '624', '研究实习员(社会科学)'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '641', '研究馆员(图书)'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '642', '副研究馆员(图书)'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '643', '馆员(图书)'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '644', '助理馆员(图书)'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '653', '馆员(文博)'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '661', '研究馆员(档案)'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '662', '副研究馆员(档案)'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '663', '馆员(档案)'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '911', '教授(思想政治教育)'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '912', '副教授(思想政治教育)'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '913', '讲师(思想政治教育)'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '914', '助教(思想政治教育)'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '983', '政工师'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '984', '助理政工师'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '985', '政工员'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '992', '副教授(改革)'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '9061', '研究员'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '9062', '副研究员'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '9063', '助理研究员'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '9064', '研究实习员'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '9211', '研究馆员'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '9212', '副研究馆员'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '9213', '馆员'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '9214', '助理馆员'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '9215', '管理员'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '9581', '幼教一级'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '9582', '幼教二级'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '9583', '幼教高级'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '9621', '研究员(教管)'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '9622', '副研究员(教管)'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '9623', '助理研究员(教管)'
) source ON existing.parentCode = source.parentCode AND existing.code = source.code
SET existing.name = source.name, existing.updatedAt = UNIX_TIMESTAMP(NOW()) * 1000
WHERE NOT (existing.name <=> source.name);
INSERT INTO sys_data_dict (
parentCode, name, code, createdBy, createdAt, updatedBy, updatedAt, delFlag
)
SELECT
source.parentCode, source.name, source.code,
'', UNIX_TIMESTAMP(NOW()) * 1000, '', UNIX_TIMESTAMP(NOW()) * 1000, 0
FROM (
SELECT 'USER_SEX' AS parentCode, '1' AS code, '男' AS name
UNION ALL SELECT 'USER_SEX', '2', '女'
UNION ALL SELECT 'USER_POLITICAL', '01', '中国共产党员'
UNION ALL SELECT 'USER_POLITICAL', '02', '中国共产党预备党员'
UNION ALL SELECT 'USER_POLITICAL', '03', '中国共产主义青年团团员'
UNION ALL SELECT 'USER_POLITICAL', '04', '中国国民党革命委员会会员'
UNION ALL SELECT 'USER_POLITICAL', '05', '中国民主同盟盟员'
UNION ALL SELECT 'USER_POLITICAL', '06', '中国民主建国会会员'
UNION ALL SELECT 'USER_POLITICAL', '07', '中国民主促进会会员'
UNION ALL SELECT 'USER_POLITICAL', '08', '中国农工民主党党员'
UNION ALL SELECT 'USER_POLITICAL', '09', '中国致公党党员'
UNION ALL SELECT 'USER_POLITICAL', '10', '九三学社社员'
UNION ALL SELECT 'USER_POLITICAL', '11', '台湾民主自治同盟盟员'
UNION ALL SELECT 'USER_POLITICAL', '12', '无党派民主人士'
UNION ALL SELECT 'USER_POLITICAL', '13', '群众'
UNION ALL SELECT 'USER_POLITICAL', '14', '入党积极分子'
UNION ALL SELECT 'USER_POLITICAL', '99', '其他'
UNION ALL SELECT 'USER_NATION', '01', '汉族'
UNION ALL SELECT 'USER_NATION', '02', '蒙古族'
UNION ALL SELECT 'USER_NATION', '03', '回族'
UNION ALL SELECT 'USER_NATION', '04', '藏族'
UNION ALL SELECT 'USER_NATION', '05', '维吾尔族'
UNION ALL SELECT 'USER_NATION', '06', '苗族'
UNION ALL SELECT 'USER_NATION', '07', '彝族'
UNION ALL SELECT 'USER_NATION', '08', '壮族'
UNION ALL SELECT 'USER_NATION', '09', '布依族'
UNION ALL SELECT 'USER_NATION', '10', '朝鲜族'
UNION ALL SELECT 'USER_NATION', '11', '满族'
UNION ALL SELECT 'USER_NATION', '12', '侗族'
UNION ALL SELECT 'USER_NATION', '13', '瑶族'
UNION ALL SELECT 'USER_NATION', '14', '白族'
UNION ALL SELECT 'USER_NATION', '15', '土家族'
UNION ALL SELECT 'USER_NATION', '16', '哈尼族'
UNION ALL SELECT 'USER_NATION', '17', '哈萨克族'
UNION ALL SELECT 'USER_NATION', '18', '傣族'
UNION ALL SELECT 'USER_NATION', '19', '黎族'
UNION ALL SELECT 'USER_NATION', '20', '傈僳族'
UNION ALL SELECT 'USER_NATION', '21', '佤族'
UNION ALL SELECT 'USER_NATION', '22', '畲族'
UNION ALL SELECT 'USER_NATION', '23', '高山族'
UNION ALL SELECT 'USER_NATION', '24', '拉祜族'
UNION ALL SELECT 'USER_NATION', '25', '水族'
UNION ALL SELECT 'USER_NATION', '26', '东乡族'
UNION ALL SELECT 'USER_NATION', '27', '纳西族'
UNION ALL SELECT 'USER_NATION', '28', '景颇族'
UNION ALL SELECT 'USER_NATION', '29', '柯尔克孜族'
UNION ALL SELECT 'USER_NATION', '30', '土族'
UNION ALL SELECT 'USER_NATION', '31', '达斡尔族'
UNION ALL SELECT 'USER_NATION', '32', '仫佬族'
UNION ALL SELECT 'USER_NATION', '33', '羌族'
UNION ALL SELECT 'USER_NATION', '34', '布朗族'
UNION ALL SELECT 'USER_NATION', '35', '撒拉族'
UNION ALL SELECT 'USER_NATION', '36', '毛南族'
UNION ALL SELECT 'USER_NATION', '37', '仡佬族'
UNION ALL SELECT 'USER_NATION', '38', '锡伯族'
UNION ALL SELECT 'USER_NATION', '39', '阿昌族'
UNION ALL SELECT 'USER_NATION', '40', '普米族'
UNION ALL SELECT 'USER_NATION', '41', '塔吉克族'
UNION ALL SELECT 'USER_NATION', '42', '怒族'
UNION ALL SELECT 'USER_NATION', '43', '乌孜别克族'
UNION ALL SELECT 'USER_NATION', '44', '俄罗斯族'
UNION ALL SELECT 'USER_NATION', '45', '鄂温克族'
UNION ALL SELECT 'USER_NATION', '46', '崩龙族'
UNION ALL SELECT 'USER_NATION', '47', '保安族'
UNION ALL SELECT 'USER_NATION', '48', '裕固族'
UNION ALL SELECT 'USER_NATION', '49', '京族'
UNION ALL SELECT 'USER_NATION', '50', '塔塔尔族'
UNION ALL SELECT 'USER_NATION', '51', '独龙族'
UNION ALL SELECT 'USER_NATION', '52', '鄂伦春族'
UNION ALL SELECT 'USER_NATION', '53', '赫哲族'
UNION ALL SELECT 'USER_NATION', '54', '门巴族'
UNION ALL SELECT 'USER_NATION', '55', '珞巴族'
UNION ALL SELECT 'USER_NATION', '56', '基诺族'
UNION ALL SELECT 'USER_NATION', '59', '穿青人'
UNION ALL SELECT 'USER_NATION', '60', '革(亻革)家人'
UNION ALL SELECT 'USER_NATION', '90', '藏族(区内)'
UNION ALL SELECT 'USER_NATION', '97', '其他'
UNION ALL SELECT 'USER_NATION', '98', '外国血统中国籍人士'
UNION ALL SELECT 'USER_STATE', '01', '离退休'
UNION ALL SELECT 'USER_STATE', '03', '死亡'
UNION ALL SELECT 'USER_STATE', '04', '退休返聘'
UNION ALL SELECT 'USER_STATE', '05', '调出'
UNION ALL SELECT 'USER_STATE', '06', '辞职'
UNION ALL SELECT 'USER_STATE', '07', '离职'
UNION ALL SELECT 'USER_STATE', '08', '开除'
UNION ALL SELECT 'USER_STATE', '11', '在职'
UNION ALL SELECT 'USER_STATE', '14', '长病假'
UNION ALL SELECT 'USER_STATE', '15', '因公出国'
UNION ALL SELECT 'USER_STATE', '17', '待岗'
UNION ALL SELECT 'USER_STATE', '19', '内退'
UNION ALL SELECT 'USER_STATE', '20', '自主创业'
UNION ALL SELECT 'USER_STATE', '21', '挂职'
UNION ALL SELECT 'USER_STATE', '22', '在岗'
UNION ALL SELECT 'USER_STATE', '98', '病假等'
UNION ALL SELECT 'USER_STATE', '99', '其他'
UNION ALL SELECT 'USER_STATE', '999', '报到办理中'
UNION ALL SELECT 'USER_JOB_CATEGORY', '10', '管理岗位'
UNION ALL SELECT 'USER_JOB_CATEGORY', '20', '专业技术岗位'
UNION ALL SELECT 'USER_JOB_CATEGORY', '21', '教师岗位'
UNION ALL SELECT 'USER_JOB_CATEGORY', '22', '专职辅导员岗位'
UNION ALL SELECT 'USER_JOB_CATEGORY', '23', '其他专业技术岗位'
UNION ALL SELECT 'USER_JOB_CATEGORY', '30', '工勤技能岗位'
UNION ALL SELECT 'USER_JOB_CATEGORY', '125', '编辑'
UNION ALL SELECT 'USER_JOB_CATEGORY', '126', '编审'
UNION ALL SELECT 'USER_JOB_CATEGORY', '127', '大学讲师'
UNION ALL SELECT 'USER_JOB_CATEGORY', '128', '档案'
UNION ALL SELECT 'USER_JOB_CATEGORY', '129', '副教授'
UNION ALL SELECT 'USER_JOB_CATEGORY', '130', '高级工程师'
UNION ALL SELECT 'USER_JOB_CATEGORY', '131', '高级会计师'
UNION ALL SELECT 'USER_JOB_CATEGORY', '132', '高级讲师'
UNION ALL SELECT 'USER_JOB_CATEGORY', '133', '高校讲师'
UNION ALL SELECT 'USER_JOB_CATEGORY', '134', '工程'
UNION ALL SELECT 'USER_JOB_CATEGORY', '135', '馆员'
UNION ALL SELECT 'USER_JOB_CATEGORY', '136', '管理'
UNION ALL SELECT 'USER_JOB_CATEGORY', '137', '会计'
UNION ALL SELECT 'USER_JOB_CATEGORY', '138', '会计审计'
UNION ALL SELECT 'USER_JOB_CATEGORY', '139', '讲师'
UNION ALL SELECT 'USER_JOB_CATEGORY', '140', '教管'
UNION ALL SELECT 'USER_JOB_CATEGORY', '142', '教育管理'
UNION ALL SELECT 'USER_JOB_CATEGORY', '143', '科研'
UNION ALL SELECT 'USER_JOB_CATEGORY', '145', '实验'
UNION ALL SELECT 'USER_JOB_CATEGORY', '146', '实验师'
UNION ALL SELECT 'USER_JOB_CATEGORY', '147', '思政'
UNION ALL SELECT 'USER_JOB_CATEGORY', '148', '图资'
UNION ALL SELECT 'USER_JOB_CATEGORY', '149', '卫计'
UNION ALL SELECT 'USER_JOB_CATEGORY', '150', '卫技'
UNION ALL SELECT 'USER_JOB_CATEGORY', '151', '幼教'
UNION ALL SELECT 'USER_ID_CARD_TYPE', '0', '居民身份证'
UNION ALL SELECT 'USER_ID_CARD_TYPE', '1', '护照'
UNION ALL SELECT 'USER_ID_CARD_TYPE', '2', '港澳台居民身份证'
UNION ALL SELECT 'USER_ID_CARD_TYPE', '4', '旅行证据'
UNION ALL SELECT 'USER_ID_CARD_TYPE', '5', '其他'
UNION ALL SELECT 'USER_MANY_UNIT', '0', '否'
UNION ALL SELECT 'USER_MANY_UNIT', '1', '是'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '000', '无学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '0', '博士后'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '004', '教育学博士后'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '005', '文学博士后'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '006', '历史学博士后'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '008', '工学博士后'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '100', '名誉博士学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '200', '博士学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '201', '哲学博士学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '202', '经济学博士学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '203', '法学博士学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '204', '教育学博士学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '205', '文学博士学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '206', '历史学博士学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '207', '理学博士学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '208', '工学博士学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '209', '农学博士学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '210', '医学博士学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '212', '管理学博士学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '213', '艺术学博士学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '242', '教育博士专业学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '245', '临床医学博士专业学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '248', '兽医博士专业学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '250', '口腔医学博士专业学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '300', '硕士学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '301', '哲学硕士学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '302', '经济学硕士学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '303', '法学硕士学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '304', '教育学硕士学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '305', '文学硕士学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '306', '历史学硕士学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '307', '理学硕士学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '308', '工学硕士学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '309', '农学硕士学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '310', '医学硕士学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '312', '管理学硕士学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '313', '艺术学硕士学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '341', '法律硕士专业学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '342', '教育硕士专业学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '343', '工程硕士专业学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '344', '建筑学硕士专业学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '345', '临床学硕士专业学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '346', '工商管理硕士专业学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '347', '农业推广硕士专业学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '348', '兽医硕士专业学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '349', '公共管理硕士专业学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '350', '口腔医学硕士专业学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '351', '公共卫生硕士专业学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '352', '军事硕士专业学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '353', '金融硕士专业学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '354', '体育硕士专业学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '355', '艺术硕士专业学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '356', '风景园林硕士专业学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '357', '汉语国际教育硕士专业学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '358', '翻译硕士专业学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '359', '审计硕士专业学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '360', '社会工作硕士专业学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '362', '体育硕士专业学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '364', '应用心理硕士专业学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '365', '翻译硕士专业学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '370', '风景园林硕士专业学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '375', '会计硕士专业学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '377', '图书情报硕士专业学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '379', '艺术硕士专业学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '400', '学士学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '401', '哲学学士学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '402', '经济学学士学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '403', '法学学士学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '404', '教育学学士学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '405', '文学学士学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '406', '历史学学士学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '407', '理学学士学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '408', '工学学士学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '409', '农学学士学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '410', '医学学士学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '412', '管理学学士学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '413', '艺术学学士学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '444', '建筑学学士专业学位'
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '900', '境外学位'
UNION ALL SELECT 'USER_EDUCATION', '10', '研究生教育'
UNION ALL SELECT 'USER_EDUCATION', '11', '博士研究生毕业'
UNION ALL SELECT 'USER_EDUCATION', '12', '博士研究生结业'
UNION ALL SELECT 'USER_EDUCATION', '14', '硕士研究生毕业'
UNION ALL SELECT 'USER_EDUCATION', '15', '硕士研究生结业'
UNION ALL SELECT 'USER_EDUCATION', '17', '研究生班毕业'
UNION ALL SELECT 'USER_EDUCATION', '18', '研究生班结业'
UNION ALL SELECT 'USER_EDUCATION', '20', '大学本科教育'
UNION ALL SELECT 'USER_EDUCATION', '21', '大学本科毕业'
UNION ALL SELECT 'USER_EDUCATION', '22', '大学本科结业'
UNION ALL SELECT 'USER_EDUCATION', '25', '双学历毕业'
UNION ALL SELECT 'USER_EDUCATION', '28', '大学普通班毕业'
UNION ALL SELECT 'USER_EDUCATION', '30', '大学专科教育'
UNION ALL SELECT 'USER_EDUCATION', '31', '大学专科毕业'
UNION ALL SELECT 'USER_EDUCATION', '32', '大学专科结业'
UNION ALL SELECT 'USER_EDUCATION', '40', '中等职业教育'
UNION ALL SELECT 'USER_EDUCATION', '41', '中等专科毕业'
UNION ALL SELECT 'USER_EDUCATION', '42', '中等专科结业'
UNION ALL SELECT 'USER_EDUCATION', '43', '中等专科肄业'
UNION ALL SELECT 'USER_EDUCATION', '44', '职业高中毕业'
UNION ALL SELECT 'USER_EDUCATION', '45', '职业高中结业'
UNION ALL SELECT 'USER_EDUCATION', '47', '技工学校毕业'
UNION ALL SELECT 'USER_EDUCATION', '48', '技工学校结业'
UNION ALL SELECT 'USER_EDUCATION', '60', '普通高级中学教育'
UNION ALL SELECT 'USER_EDUCATION', '61', '普通高中毕业'
UNION ALL SELECT 'USER_EDUCATION', '62', '普通高中结业'
UNION ALL SELECT 'USER_EDUCATION', '63', '普通高中肄业'
UNION ALL SELECT 'USER_EDUCATION', '70', '初级中学教育'
UNION ALL SELECT 'USER_EDUCATION', '71', '初中毕业'
UNION ALL SELECT 'USER_EDUCATION', '73', '初中肄业'
UNION ALL SELECT 'USER_EDUCATION', '80', '小学教育'
UNION ALL SELECT 'USER_EDUCATION', '81', '小学毕业'
UNION ALL SELECT 'USER_EDUCATION', '90', '其他'
UNION ALL SELECT 'USER_EDUCATION', '128', '相当大学毕业'
UNION ALL SELECT 'USER_EDUCATION', '138', '相当专科毕业'
UNION ALL SELECT 'USER_EDUCATION', '142', '中技毕业'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '010', '高等学校教师'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '011', '教授'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '012', '副教授'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '013', '讲师(高校)'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '014', '助教(高校)'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '022', '高级讲师(中专)'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '023', '讲师(中专)'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '024', '助理讲师(中专)'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '032', '高级讲师(技校)'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '033', '讲师(技校)'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '034', '助理讲师(技校)'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '043', '一级实习指导教师'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '044', '二级实习指导教师'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '045', '三级实习指导教师'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '052', '高级教师(中学)'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '053', '一级教师(中学)'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '054', '二级教师(中学)'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '061', '正高级教师'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '062', '高级教师'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '063', '一级教师'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '064', '二级教师'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '071', '教授级高级实验师'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '072', '高级实验师'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '073', '实验师'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '074', '助理实验师'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '075', '实验员'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '081', '教授级高级工程师'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '082', '高级工程师'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '083', '工程师'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '084', '助理工程师'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '085', '技术员'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '093', '农艺师'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '110', '农业技术人员(畜牧)'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '120', '经济专业人员'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '123', '经济师'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '124', '助理经济师'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '130', '会计专业人员'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '132', '高级会计师'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '133', '会计师'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '134', '助理会计师'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '135', '会计员'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '140', '统计专业人员'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '143', '统计师'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '151', '编审'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '152', '副编审'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '153', '编辑'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '202', '主任编辑'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '203', '编辑'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '220', '播音员'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '230', '卫生技术人员(医师)'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '231', '主任医师'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '232', '副主任医师'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '233', '主治医师'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '234', '医师'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '242', '副主任药师'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '243', '主管药师'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '244', '药师'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '250', '卫生技术人员(护理)'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '252', '副主任护师'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '253', '主管护师'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '254', '护师'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '263', '卫生主管技师'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '413', '高级教师(小学)'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '414', '一级教师(小学)'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '430', '船舶技术人员(轮机)'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '611', '研究员(自然科学)'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '612', '副研究员(自然科学)'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '613', '助理研究员(自然科学)'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '621', '研究员(社会科学)'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '622', '副研究员(社会科学)'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '623', '助理研究员(社会科学)'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '624', '研究实习员(社会科学)'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '641', '研究馆员(图书)'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '642', '副研究馆员(图书)'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '643', '馆员(图书)'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '644', '助理馆员(图书)'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '653', '馆员(文博)'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '661', '研究馆员(档案)'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '662', '副研究馆员(档案)'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '663', '馆员(档案)'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '911', '教授(思想政治教育)'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '912', '副教授(思想政治教育)'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '913', '讲师(思想政治教育)'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '914', '助教(思想政治教育)'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '983', '政工师'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '984', '助理政工师'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '985', '政工员'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '992', '副教授(改革)'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '9061', '研究员'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '9062', '副研究员'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '9063', '助理研究员'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '9064', '研究实习员'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '9211', '研究馆员'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '9212', '副研究馆员'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '9213', '馆员'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '9214', '助理馆员'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '9215', '管理员'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '9581', '幼教一级'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '9582', '幼教二级'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '9583', '幼教高级'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '9621', '研究员(教管)'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '9622', '副研究员(教管)'
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '9623', '助理研究员(教管)'
) source
WHERE NOT EXISTS (
SELECT 1 FROM sys_data_dict existing
WHERE existing.parentCode = source.parentCode AND existing.code = source.code
);
-- 人员类型:独立补充 v3 的 17 项映射,不混入上面的其他字典数据。
UPDATE sys_data_dict existing
JOIN (
SELECT '1' AS code, '在编类' AS name
UNION ALL SELECT '1001', '聘用合同制(享受人事代理待遇)'
UNION ALL SELECT '101', '在编'
UNION ALL SELECT '102', '兰溪编制'
UNION ALL SELECT '2', '非在编类'
UNION ALL SELECT '202', '派遣人员'
UNION ALL SELECT '204', '博士后'
UNION ALL SELECT '206', '挂职人员'
UNION ALL SELECT '208', '外籍教师'
UNION ALL SELECT '209', '兼职教师'
UNION ALL SELECT '210', '非学校聘用人员'
UNION ALL SELECT '214', '单位返聘'
UNION ALL SELECT '215', '附属单位'
UNION ALL SELECT '902', '聘用合同制'
UNION ALL SELECT '904', '聘用制专家'
UNION ALL SELECT '905', '人事代理'
UNION ALL SELECT '909', '其他'
) source ON existing.parentCode = 'USER_PERSON_TYPE' AND existing.code = source.code
SET existing.name = source.name, existing.updatedAt = UNIX_TIMESTAMP(NOW()) * 1000
WHERE NOT (existing.name <=> source.name);
INSERT INTO sys_data_dict (
parentCode, name, code, createdBy, createdAt, updatedBy, updatedAt, delFlag
)
SELECT
'USER_PERSON_TYPE', source.name, source.code,
'', UNIX_TIMESTAMP(NOW()) * 1000, '', UNIX_TIMESTAMP(NOW()) * 1000, 0
FROM (
SELECT '1' AS code, '在编类' AS name
UNION ALL SELECT '1001', '聘用合同制(享受人事代理待遇)'
UNION ALL SELECT '101', '在编'
UNION ALL SELECT '102', '兰溪编制'
UNION ALL SELECT '2', '非在编类'
UNION ALL SELECT '202', '派遣人员'
UNION ALL SELECT '204', '博士后'
UNION ALL SELECT '206', '挂职人员'
UNION ALL SELECT '208', '外籍教师'
UNION ALL SELECT '209', '兼职教师'
UNION ALL SELECT '210', '非学校聘用人员'
UNION ALL SELECT '214', '单位返聘'
UNION ALL SELECT '215', '附属单位'
UNION ALL SELECT '902', '聘用合同制'
UNION ALL SELECT '904', '聘用制专家'
UNION ALL SELECT '905', '人事代理'
UNION ALL SELECT '909', '其他'
) source
WHERE NOT EXISTS (
SELECT 1 FROM sys_data_dict existing
WHERE existing.parentCode = 'USER_PERSON_TYPE' AND existing.code = source.code
);
COMMIT;
@@ -0,0 +1,28 @@
-- 在人员数据拉取菜单同级新增实时查询入口,沿用现有菜单的角色授权。
INSERT INTO sys_menu (
id, parentId, path, name, type, href, target, icon, showit, disabled,
permission, location, hasChildren, platform, moduleId,
createdBy, createdAt, updatedBy, updatedAt, delFlag
)
SELECT 'bc6cf4034e9449bfa6e81c7d26509129', source.parentId,
CONCAT(LEFT(source.path, CHAR_LENGTH(source.path) - 4),
LPAD(COALESCE((SELECT MAX(CAST(RIGHT(sibling.path, 4) AS UNSIGNED))
FROM sys_menu sibling WHERE sibling.parentId = source.parentId), 0) + 1, 4, '0')),
'数据中心人员查询', 'menu', '/platform/sys/data/user/query', source.target,
source.icon, 1, 0, 'sys.data.user.query', source.location + 1, 0,
source.platform, source.moduleId, '', UNIX_TIMESTAMP(NOW()) * 1000,
'', UNIX_TIMESTAMP(NOW()) * 1000, 0
FROM sys_menu source
WHERE source.permission = 'sys.data.user.pull'
AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE permission = 'sys.data.user.query')
LIMIT 1;
INSERT INTO sys_role_menu (roleId, menuId)
SELECT DISTINCT relation.roleId, target.id
FROM sys_role_menu relation
JOIN sys_menu source ON source.id = relation.menuId AND source.permission = 'sys.data.user.pull'
JOIN sys_menu target ON target.permission = 'sys.data.user.query'
WHERE NOT EXISTS (
SELECT 1 FROM sys_role_menu existing
WHERE existing.roleId = relation.roleId AND existing.menuId = target.id
);
@@ -0,0 +1,781 @@
SET NAMES utf8mb4;
START TRANSACTION;
UPDATE sys_dict child
JOIN sys_dict parent ON parent.id = child.parentId
SET child.code = child.name
WHERE parent.code IN ('USER_SEX', 'USER_POLITICAL', 'USER_NATION', 'USER_STATE', 'USER_JOB_CATEGORY', 'USER_ID_CARD_TYPE', 'USER_MANY_UNIT')
AND child.name IS NOT NULL
AND child.name <> ''
AND NOT (child.code <=> child.name);
-- 1. 政治面貌
-- 补充 USER_POLITICAL 的直接子项:code、name 均为全称,remark 为简称。
-- 仅使用指定父节点,已有同编码子项不覆盖;不删除任何记录。
INSERT INTO sys_dict (
id, parentId, path, name, remark, code, disabled, location, hasChildren,
createdBy, createdAt, updatedBy, updatedAt, delFlag
)
SELECT
REPLACE(UUID(), '-', ''), parent.id,
CONCAT(parent.path, LPAD(IFNULL((
SELECT MAX(CAST(RIGHT(child.path, 4) AS UNSIGNED))
FROM sys_dict child
WHERE child.path LIKE CONCAT(parent.path, '____')
), 0) + source.sortOrder, 4, '0')),
source.name, source.shortName, source.name, 0,
IFNULL((SELECT MAX(child.location) FROM sys_dict child WHERE child.parentId = parent.id), 0)
+ source.sortOrder,
0, '', UNIX_TIMESTAMP(NOW()) * 1000, '', UNIX_TIMESTAMP(NOW()) * 1000, 0
FROM sys_dict parent
CROSS JOIN (
SELECT 1 AS sortOrder, '01' AS code, '中国共产党员' AS name, '中共党员' AS shortName
UNION ALL SELECT 2, '02', '中国共产党预备党员', '中共预备党员'
UNION ALL SELECT 3, '03', '中国共产主义青年团团员', '共青团员'
UNION ALL SELECT 4, '04', '中国国民党革命委员会会员', '民革党员'
UNION ALL SELECT 5, '05', '中国民主同盟盟员', '民盟盟员'
UNION ALL SELECT 6, '06', '中国民主建国会会员', '民建会员'
UNION ALL SELECT 7, '07', '中国民主促进会会员', '民进会员'
UNION ALL SELECT 8, '08', '中国农工民主党党员', '农工党党员'
UNION ALL SELECT 9, '09', '中国致公党党员', '致公党党员'
UNION ALL SELECT 10, '10', '九三学社社员', '九三学社社员'
UNION ALL SELECT 11, '11', '台湾民主自治同盟盟员', '台盟盟员'
UNION ALL SELECT 12, '12', '无党派民主人士', '无党派人士'
UNION ALL SELECT 13, '13', '群众', '群众'
UNION ALL SELECT 14, '14', '入党积极分子', '积极分子'
UNION ALL SELECT 15, '99', '其他', '其他'
) source
WHERE parent.id = '4cc380a7a45a43a89410413676c9103e'
AND parent.code = 'USER_POLITICAL'
AND NOT EXISTS (
SELECT 1 FROM sys_dict existing
WHERE existing.parentId = parent.id AND existing.code = source.name
);
UPDATE sys_dict parent
SET parent.hasChildren = 1
WHERE parent.id = '4cc380a7a45a43a89410413676c9103e'
AND parent.code = 'USER_POLITICAL'
AND EXISTS (
SELECT 1 FROM (SELECT DISTINCT parentId FROM sys_dict) child
WHERE child.parentId = parent.id
);
-- 2. 民族
-- 补充 USER_NATION 的 61 个直接子项,保留接口代码前导零及提供的名称原文。
-- 仅新增缺失编码,不删除或覆盖已有记录。
INSERT INTO sys_dict (
id, parentId, path, name, remark, code, disabled, location, hasChildren,
createdBy, createdAt, updatedBy, updatedAt, delFlag
)
SELECT
REPLACE(UUID(), '-', ''), parent.id,
CONCAT(parent.path, LPAD(IFNULL((
SELECT MAX(CAST(RIGHT(child.path, 4) AS UNSIGNED))
FROM sys_dict child
WHERE child.path LIKE CONCAT(parent.path, '____')
), 0) + source.sortOrder, 4, '0')),
source.name, '', source.name, 0,
IFNULL((SELECT MAX(child.location) FROM sys_dict child WHERE child.parentId = parent.id), 0)
+ source.sortOrder,
0, '', UNIX_TIMESTAMP(NOW()) * 1000, '', UNIX_TIMESTAMP(NOW()) * 1000, 0
FROM sys_dict parent
CROSS JOIN (
SELECT 1 AS sortOrder, '01' AS code, '汉族' AS name
UNION ALL SELECT 2, '02', '蒙古族'
UNION ALL SELECT 3, '03', '回族'
UNION ALL SELECT 4, '04', '藏族'
UNION ALL SELECT 5, '05', '维吾尔族'
UNION ALL SELECT 6, '06', '苗族'
UNION ALL SELECT 7, '07', '彝族'
UNION ALL SELECT 8, '08', '壮族'
UNION ALL SELECT 9, '09', '布依族'
UNION ALL SELECT 10, '10', '朝鲜族'
UNION ALL SELECT 11, '11', '满族'
UNION ALL SELECT 12, '12', '侗族'
UNION ALL SELECT 13, '13', '瑶族'
UNION ALL SELECT 14, '14', '白族'
UNION ALL SELECT 15, '15', '土家族'
UNION ALL SELECT 16, '16', '哈尼族'
UNION ALL SELECT 17, '17', '哈萨克族'
UNION ALL SELECT 18, '18', '傣族'
UNION ALL SELECT 19, '19', '黎族'
UNION ALL SELECT 20, '20', '傈僳族'
UNION ALL SELECT 21, '21', '佤族'
UNION ALL SELECT 22, '22', '畲族'
UNION ALL SELECT 23, '23', '高山族'
UNION ALL SELECT 24, '24', '拉祜族'
UNION ALL SELECT 25, '25', '水族'
UNION ALL SELECT 26, '26', '东乡族'
UNION ALL SELECT 27, '27', '纳西族'
UNION ALL SELECT 28, '28', '景颇族'
UNION ALL SELECT 29, '29', '柯尔克孜族'
UNION ALL SELECT 30, '30', '土族'
UNION ALL SELECT 31, '31', '达斡尔族'
UNION ALL SELECT 32, '32', '仫佬族'
UNION ALL SELECT 33, '33', '羌族'
UNION ALL SELECT 34, '34', '布朗族'
UNION ALL SELECT 35, '35', '撒拉族'
UNION ALL SELECT 36, '36', '毛南族'
UNION ALL SELECT 37, '37', '仡佬族'
UNION ALL SELECT 38, '38', '锡伯族'
UNION ALL SELECT 39, '39', '阿昌族'
UNION ALL SELECT 40, '40', '普米族'
UNION ALL SELECT 41, '41', '塔吉克族'
UNION ALL SELECT 42, '42', '怒族'
UNION ALL SELECT 43, '43', '乌孜别克族'
UNION ALL SELECT 44, '44', '俄罗斯族'
UNION ALL SELECT 45, '45', '鄂温克族'
UNION ALL SELECT 46, '46', '崩龙族'
UNION ALL SELECT 47, '47', '保安族'
UNION ALL SELECT 48, '48', '裕固族'
UNION ALL SELECT 49, '49', '京族'
UNION ALL SELECT 50, '50', '塔塔尔族'
UNION ALL SELECT 51, '51', '独龙族'
UNION ALL SELECT 52, '52', '鄂伦春族'
UNION ALL SELECT 53, '53', '赫哲族'
UNION ALL SELECT 54, '54', '门巴族'
UNION ALL SELECT 55, '55', '珞巴族'
UNION ALL SELECT 56, '56', '基诺族'
UNION ALL SELECT 57, '59', '穿青人'
UNION ALL SELECT 58, '60', '革(亻革)家人'
UNION ALL SELECT 59, '90', '藏族(区内)'
UNION ALL SELECT 60, '97', '其他'
UNION ALL SELECT 61, '98', '外国血统中国籍人士'
) source
WHERE parent.id = '456c088b99bb4423a115c0bb5b420a99'
AND parent.code = 'USER_NATION'
AND NOT EXISTS (
SELECT 1 FROM sys_dict existing
WHERE existing.parentId = parent.id AND existing.code = source.name
);
-- 3. 当前状态
-- 补充 USER_STATE 的 18 个直接子项,保留接口代码前导零及提供的名称原文。
-- 仅新增缺失编码,不删除或覆盖已有记录。
INSERT INTO sys_dict (
id, parentId, path, name, remark, code, disabled, location, hasChildren,
createdBy, createdAt, updatedBy, updatedAt, delFlag
)
SELECT
REPLACE(UUID(), '-', ''), parent.id,
CONCAT(parent.path, LPAD(IFNULL((
SELECT MAX(CAST(RIGHT(child.path, 4) AS UNSIGNED))
FROM sys_dict child
WHERE child.path LIKE CONCAT(parent.path, '____')
), 0) + source.sortOrder, 4, '0')),
source.name, '', source.name, 0,
IFNULL((SELECT MAX(child.location) FROM sys_dict child WHERE child.parentId = parent.id), 0)
+ source.sortOrder,
0, '', UNIX_TIMESTAMP(NOW()) * 1000, '', UNIX_TIMESTAMP(NOW()) * 1000, 0
FROM sys_dict parent
CROSS JOIN (
SELECT 1 AS sortOrder, '01' AS code, '离退休' AS name
UNION ALL SELECT 2, '03', '死亡'
UNION ALL SELECT 3, '04', '退休返聘'
UNION ALL SELECT 4, '05', '调出'
UNION ALL SELECT 5, '06', '辞职'
UNION ALL SELECT 6, '07', '离职'
UNION ALL SELECT 7, '08', '开除'
UNION ALL SELECT 8, '11', '在职'
UNION ALL SELECT 9, '14', '长病假'
UNION ALL SELECT 10, '15', '因公出国'
UNION ALL SELECT 11, '17', '待岗'
UNION ALL SELECT 12, '19', '内退'
UNION ALL SELECT 13, '20', '自主创业'
UNION ALL SELECT 14, '21', '挂职'
UNION ALL SELECT 15, '22', '在岗'
UNION ALL SELECT 16, '98', '病假等'
UNION ALL SELECT 17, '99', '其他'
UNION ALL SELECT 18, '999', '报到办理中'
) source
WHERE parent.id = '3709e40a132348be947dcaa553bf8f8a'
AND parent.code = 'USER_STATE'
AND NOT EXISTS (
SELECT 1 FROM sys_dict existing
WHERE existing.parentId = parent.id AND existing.code = source.name
);
-- 4. 岗位类型
-- 岗位类型(USER_JOB_CATEGORY)下的 31 个直接子项,父级须已存在。
-- 仅新增缺失编码,不删除或覆盖已有记录。
INSERT INTO sys_dict (
id, parentId, path, name, remark, code, disabled, location, hasChildren,
createdBy, createdAt, updatedBy, updatedAt, delFlag
)
SELECT
REPLACE(UUID(), '-', ''), parent.id,
CONCAT(parent.path, LPAD(IFNULL((
SELECT MAX(CAST(RIGHT(child.path, 4) AS UNSIGNED))
FROM sys_dict child
WHERE child.path LIKE CONCAT(parent.path, '____')
), 0) + source.sortOrder, 4, '0')),
source.name, '', source.name, 0,
IFNULL((SELECT MAX(child.location) FROM sys_dict child WHERE child.parentId = parent.id), 0)
+ source.sortOrder,
0, '', UNIX_TIMESTAMP(NOW()) * 1000, '', UNIX_TIMESTAMP(NOW()) * 1000, 0
FROM sys_dict parent
CROSS JOIN (
SELECT 1 AS sortOrder, '10' AS code, '管理岗位' AS name
UNION ALL SELECT 2, '20', '专业技术岗位'
UNION ALL SELECT 3, '21', '教师岗位'
UNION ALL SELECT 4, '22', '专职辅导员岗位'
UNION ALL SELECT 5, '23', '其他专业技术岗位'
UNION ALL SELECT 6, '30', '工勤技能岗位'
UNION ALL SELECT 7, '125', '编辑'
UNION ALL SELECT 8, '126', '编审'
UNION ALL SELECT 9, '127', '大学讲师'
UNION ALL SELECT 10, '128', '档案'
UNION ALL SELECT 11, '129', '副教授'
UNION ALL SELECT 12, '130', '高级工程师'
UNION ALL SELECT 13, '131', '高级会计师'
UNION ALL SELECT 14, '132', '高级讲师'
UNION ALL SELECT 15, '133', '高校讲师'
UNION ALL SELECT 16, '134', '工程'
UNION ALL SELECT 17, '135', '馆员'
UNION ALL SELECT 18, '136', '管理'
UNION ALL SELECT 19, '137', '会计'
UNION ALL SELECT 20, '138', '会计审计'
UNION ALL SELECT 21, '139', '讲师'
UNION ALL SELECT 22, '140', '教管'
UNION ALL SELECT 23, '142', '教育管理'
UNION ALL SELECT 24, '143', '科研'
UNION ALL SELECT 25, '145', '实验'
UNION ALL SELECT 26, '146', '实验师'
UNION ALL SELECT 27, '147', '思政'
UNION ALL SELECT 28, '148', '图资'
UNION ALL SELECT 29, '149', '卫计'
UNION ALL SELECT 30, '150', '卫技'
UNION ALL SELECT 31, '151', '幼教'
) source
WHERE parent.code = 'USER_JOB_CATEGORY'
AND NOT EXISTS (
SELECT 1 FROM sys_dict existing
WHERE existing.parentId = parent.id AND existing.code = source.name
);
UPDATE sys_dict parent
SET parent.hasChildren = 1
WHERE parent.code = 'USER_JOB_CATEGORY'
AND EXISTS (
SELECT 1 FROM (SELECT DISTINCT parentId FROM sys_dict) child
WHERE child.parentId = parent.id
);
-- 5. 证件类型
-- 在用户表字段字典下补充证件类型及子项,仅新增缺失编码,不覆盖已有配置。
INSERT INTO sys_dict (
id, parentId, path, name, remark, code, disabled, location, hasChildren,
createdBy, createdAt, updatedBy, updatedAt, delFlag
)
SELECT
REPLACE(UUID(), '-', ''), parent.id,
CONCAT(parent.path, LPAD(IFNULL((
SELECT MAX(CAST(RIGHT(child.path, 4) AS UNSIGNED))
FROM sys_dict child WHERE child.path LIKE CONCAT(parent.path, '____')
), 0) + 1, 4, '0')),
'证件类型', '', 'USER_ID_CARD_TYPE', 0,
IFNULL((SELECT MAX(child.location) FROM sys_dict child WHERE child.parentId = parent.id), 0) + 1,
0, '', UNIX_TIMESTAMP(NOW()) * 1000, '', UNIX_TIMESTAMP(NOW()) * 1000, 0
FROM sys_dict parent
WHERE parent.code = 'USER_TABLE_COLUMN_DICTS'
AND NOT EXISTS (SELECT 1 FROM sys_dict existing WHERE existing.code = 'USER_ID_CARD_TYPE');
INSERT INTO sys_dict (
id, parentId, path, name, remark, code, disabled, location, hasChildren,
createdBy, createdAt, updatedBy, updatedAt, delFlag
)
SELECT
REPLACE(UUID(), '-', ''), parent.id,
CONCAT(parent.path, LPAD(IFNULL((
SELECT MAX(CAST(RIGHT(child.path, 4) AS UNSIGNED))
FROM sys_dict child WHERE child.path LIKE CONCAT(parent.path, '____')
), 0) + source.sortOrder, 4, '0')),
source.name, '', source.name, 0,
IFNULL((SELECT MAX(child.location) FROM sys_dict child WHERE child.parentId = parent.id), 0)
+ source.sortOrder,
0, '', UNIX_TIMESTAMP(NOW()) * 1000, '', UNIX_TIMESTAMP(NOW()) * 1000, 0
FROM sys_dict parent
CROSS JOIN (
SELECT 1 AS sortOrder, '0' AS code, '居民身份证' AS name
UNION ALL SELECT 2, '1', '护照'
UNION ALL SELECT 3, '2', '港澳台居民身份证'
UNION ALL SELECT 4, '4', '旅行证据'
UNION ALL SELECT 5, '5', '其他'
) source
WHERE parent.code = 'USER_ID_CARD_TYPE'
AND NOT EXISTS (
SELECT 1 FROM sys_dict existing
WHERE existing.parentId = parent.id AND existing.code = source.name
);
UPDATE sys_dict parent
SET parent.hasChildren = 1
WHERE parent.code IN ('USER_TABLE_COLUMN_DICTS', 'USER_ID_CARD_TYPE')
AND EXISTS (
SELECT 1 FROM (SELECT DISTINCT parentId FROM sys_dict) child
WHERE child.parentId = parent.id
);
-- 6. 是否双肩挑
-- 在用户表字段字典下补充是否双肩挑及子项,仅新增缺失编码,不覆盖已有配置。
INSERT INTO sys_dict (
id, parentId, path, name, remark, code, disabled, location, hasChildren,
createdBy, createdAt, updatedBy, updatedAt, delFlag
)
SELECT
REPLACE(UUID(), '-', ''), parent.id,
CONCAT(parent.path, LPAD(IFNULL((
SELECT MAX(CAST(RIGHT(child.path, 4) AS UNSIGNED))
FROM sys_dict child WHERE child.path LIKE CONCAT(parent.path, '____')
), 0) + 1, 4, '0')),
'是否双肩挑', '', 'USER_MANY_UNIT', 0,
IFNULL((SELECT MAX(child.location) FROM sys_dict child WHERE child.parentId = parent.id), 0) + 1,
0, '', UNIX_TIMESTAMP(NOW()) * 1000, '', UNIX_TIMESTAMP(NOW()) * 1000, 0
FROM sys_dict parent
WHERE parent.code = 'USER_TABLE_COLUMN_DICTS'
AND NOT EXISTS (SELECT 1 FROM sys_dict existing WHERE existing.code = 'USER_MANY_UNIT');
INSERT INTO sys_dict (
id, parentId, path, name, remark, code, disabled, location, hasChildren,
createdBy, createdAt, updatedBy, updatedAt, delFlag
)
SELECT
REPLACE(UUID(), '-', ''), parent.id,
CONCAT(parent.path, LPAD(IFNULL((
SELECT MAX(CAST(RIGHT(child.path, 4) AS UNSIGNED))
FROM sys_dict child WHERE child.path LIKE CONCAT(parent.path, '____')
), 0) + source.sortOrder, 4, '0')),
source.name, '', source.name, 0,
IFNULL((SELECT MAX(child.location) FROM sys_dict child WHERE child.parentId = parent.id), 0)
+ source.sortOrder,
0, '', UNIX_TIMESTAMP(NOW()) * 1000, '', UNIX_TIMESTAMP(NOW()) * 1000, 0
FROM sys_dict parent
CROSS JOIN (
SELECT 1 AS sortOrder, '0' AS code, '否' AS name
UNION ALL SELECT 2, '1', '是'
) source
WHERE parent.code = 'USER_MANY_UNIT'
AND NOT EXISTS (
SELECT 1 FROM sys_dict existing
WHERE existing.parentId = parent.id AND existing.code = source.name
);
UPDATE sys_dict parent
SET parent.hasChildren = 1
WHERE parent.code IN ('USER_TABLE_COLUMN_DICTS', 'USER_MANY_UNIT')
AND EXISTS (
SELECT 1 FROM (SELECT DISTINCT parentId FROM sys_dict) child
WHERE child.parentId = parent.id
);
-- 7. 学位
UPDATE sys_dict child
JOIN sys_dict parent ON parent.id = child.parentId
SET child.code = child.name
WHERE parent.code IN ('USER_ACADEMIC_DEGREE')
AND child.name IS NOT NULL
AND child.name <> ''
AND NOT (child.code <=> child.name);
-- 补充学位(USER_ACADEMIC_DEGREE)直接子项,父级须已存在。
-- code、name 均保存名称原文,仅新增缺失名称,不删除或覆盖已有记录。
INSERT INTO sys_dict (
id, parentId, path, name, remark, code, disabled, location, hasChildren,
createdBy, createdAt, updatedBy, updatedAt, delFlag
)
SELECT
REPLACE(UUID(), '-', ''), parent.id,
CONCAT(parent.path, LPAD(IFNULL((
SELECT MAX(CAST(RIGHT(child.path, 4) AS UNSIGNED))
FROM sys_dict child WHERE child.path LIKE CONCAT(parent.path, '____')
), 0) + source.sortOrder, 4, '0')),
source.name, '', source.name, 0,
IFNULL((SELECT MAX(child.location) FROM sys_dict child WHERE child.parentId = parent.id), 0)
+ source.sortOrder,
0, '', UNIX_TIMESTAMP(NOW()) * 1000, '', UNIX_TIMESTAMP(NOW()) * 1000, 0
FROM sys_dict parent
CROSS JOIN (
SELECT 1 AS sortOrder, '000' AS code, '无学位' AS name
UNION ALL SELECT 2, '0', '博士后'
UNION ALL SELECT 3, '004', '教育学博士后'
UNION ALL SELECT 4, '005', '文学博士后'
UNION ALL SELECT 5, '006', '历史学博士后'
UNION ALL SELECT 6, '008', '工学博士后'
UNION ALL SELECT 7, '100', '名誉博士学位'
UNION ALL SELECT 8, '200', '博士学位'
UNION ALL SELECT 9, '201', '哲学博士学位'
UNION ALL SELECT 10, '202', '经济学博士学位'
UNION ALL SELECT 11, '203', '法学博士学位'
UNION ALL SELECT 12, '204', '教育学博士学位'
UNION ALL SELECT 13, '205', '文学博士学位'
UNION ALL SELECT 14, '206', '历史学博士学位'
UNION ALL SELECT 15, '207', '理学博士学位'
UNION ALL SELECT 16, '208', '工学博士学位'
UNION ALL SELECT 17, '209', '农学博士学位'
UNION ALL SELECT 18, '210', '医学博士学位'
UNION ALL SELECT 19, '212', '管理学博士学位'
UNION ALL SELECT 20, '213', '艺术学博士学位'
UNION ALL SELECT 21, '242', '教育博士专业学位'
UNION ALL SELECT 22, '245', '临床医学博士专业学位'
UNION ALL SELECT 23, '248', '兽医博士专业学位'
UNION ALL SELECT 24, '250', '口腔医学博士专业学位'
UNION ALL SELECT 25, '300', '硕士学位'
UNION ALL SELECT 26, '301', '哲学硕士学位'
UNION ALL SELECT 27, '302', '经济学硕士学位'
UNION ALL SELECT 28, '303', '法学硕士学位'
UNION ALL SELECT 29, '304', '教育学硕士学位'
UNION ALL SELECT 30, '305', '文学硕士学位'
UNION ALL SELECT 31, '306', '历史学硕士学位'
UNION ALL SELECT 32, '307', '理学硕士学位'
UNION ALL SELECT 33, '308', '工学硕士学位'
UNION ALL SELECT 34, '309', '农学硕士学位'
UNION ALL SELECT 35, '310', '医学硕士学位'
UNION ALL SELECT 36, '312', '管理学硕士学位'
UNION ALL SELECT 37, '313', '艺术学硕士学位'
UNION ALL SELECT 38, '341', '法律硕士专业学位'
UNION ALL SELECT 39, '342', '教育硕士专业学位'
UNION ALL SELECT 40, '343', '工程硕士专业学位'
UNION ALL SELECT 41, '344', '建筑学硕士专业学位'
UNION ALL SELECT 42, '345', '临床学硕士专业学位'
UNION ALL SELECT 43, '346', '工商管理硕士专业学位'
UNION ALL SELECT 44, '347', '农业推广硕士专业学位'
UNION ALL SELECT 45, '348', '兽医硕士专业学位'
UNION ALL SELECT 46, '349', '公共管理硕士专业学位'
UNION ALL SELECT 47, '350', '口腔医学硕士专业学位'
UNION ALL SELECT 48, '351', '公共卫生硕士专业学位'
UNION ALL SELECT 49, '352', '军事硕士专业学位'
UNION ALL SELECT 50, '353', '金融硕士专业学位'
UNION ALL SELECT 51, '354', '体育硕士专业学位'
UNION ALL SELECT 52, '355', '艺术硕士专业学位'
UNION ALL SELECT 53, '356', '风景园林硕士专业学位'
UNION ALL SELECT 54, '357', '汉语国际教育硕士专业学位'
UNION ALL SELECT 55, '358', '翻译硕士专业学位'
UNION ALL SELECT 56, '359', '审计硕士专业学位'
UNION ALL SELECT 57, '360', '社会工作硕士专业学位'
UNION ALL SELECT 58, '362', '体育硕士专业学位'
UNION ALL SELECT 59, '364', '应用心理硕士专业学位'
UNION ALL SELECT 60, '365', '翻译硕士专业学位'
UNION ALL SELECT 61, '370', '风景园林硕士专业学位'
UNION ALL SELECT 62, '375', '会计硕士专业学位'
UNION ALL SELECT 63, '377', '图书情报硕士专业学位'
UNION ALL SELECT 64, '379', '艺术硕士专业学位'
UNION ALL SELECT 65, '400', '学士学位'
UNION ALL SELECT 66, '401', '哲学学士学位'
UNION ALL SELECT 67, '402', '经济学学士学位'
UNION ALL SELECT 68, '403', '法学学士学位'
UNION ALL SELECT 69, '404', '教育学学士学位'
UNION ALL SELECT 70, '405', '文学学士学位'
UNION ALL SELECT 71, '406', '历史学学士学位'
UNION ALL SELECT 72, '407', '理学学士学位'
UNION ALL SELECT 73, '408', '工学学士学位'
UNION ALL SELECT 74, '409', '农学学士学位'
UNION ALL SELECT 75, '410', '医学学士学位'
UNION ALL SELECT 76, '412', '管理学学士学位'
UNION ALL SELECT 77, '413', '艺术学学士学位'
UNION ALL SELECT 78, '444', '建筑学学士专业学位'
UNION ALL SELECT 79, '900', '境外学位'
) source
WHERE parent.code = 'USER_ACADEMIC_DEGREE'
AND NOT EXISTS (
SELECT 1 FROM sys_dict existing
WHERE existing.parentId = parent.id AND existing.code = source.name
);
UPDATE sys_dict parent
SET parent.hasChildren = 1
WHERE parent.code = 'USER_ACADEMIC_DEGREE'
AND EXISTS (
SELECT 1 FROM (SELECT DISTINCT parentId FROM sys_dict) child
WHERE child.parentId = parent.id
);
-- 8. 学历
UPDATE sys_dict child
JOIN sys_dict parent ON parent.id = child.parentId
SET child.code = child.name
WHERE parent.code IN ('USER_EDUCATION')
AND child.name IS NOT NULL
AND child.name <> ''
AND NOT (child.code <=> child.name);
-- 补充学历(USER_EDUCATION)直接子项,父级须已存在。
-- code、name 均保存名称原文,仅新增缺失名称,不删除或覆盖已有记录。
INSERT INTO sys_dict (
id, parentId, path, name, remark, code, disabled, location, hasChildren,
createdBy, createdAt, updatedBy, updatedAt, delFlag
)
SELECT
REPLACE(UUID(), '-', ''), parent.id,
CONCAT(parent.path, LPAD(IFNULL((
SELECT MAX(CAST(RIGHT(child.path, 4) AS UNSIGNED))
FROM sys_dict child WHERE child.path LIKE CONCAT(parent.path, '____')
), 0) + source.sortOrder, 4, '0')),
source.name, '', source.name, 0,
IFNULL((SELECT MAX(child.location) FROM sys_dict child WHERE child.parentId = parent.id), 0)
+ source.sortOrder,
0, '', UNIX_TIMESTAMP(NOW()) * 1000, '', UNIX_TIMESTAMP(NOW()) * 1000, 0
FROM sys_dict parent
CROSS JOIN (
SELECT 1 AS sortOrder, '10' AS code, '研究生教育' AS name
UNION ALL SELECT 2, '11', '博士研究生毕业'
UNION ALL SELECT 3, '12', '博士研究生结业'
UNION ALL SELECT 4, '14', '硕士研究生毕业'
UNION ALL SELECT 5, '15', '硕士研究生结业'
UNION ALL SELECT 6, '17', '研究生班毕业'
UNION ALL SELECT 7, '18', '研究生班结业'
UNION ALL SELECT 8, '20', '大学本科教育'
UNION ALL SELECT 9, '21', '大学本科毕业'
UNION ALL SELECT 10, '22', '大学本科结业'
UNION ALL SELECT 11, '25', '双学历毕业'
UNION ALL SELECT 12, '28', '大学普通班毕业'
UNION ALL SELECT 13, '30', '大学专科教育'
UNION ALL SELECT 14, '31', '大学专科毕业'
UNION ALL SELECT 15, '32', '大学专科结业'
UNION ALL SELECT 16, '40', '中等职业教育'
UNION ALL SELECT 17, '41', '中等专科毕业'
UNION ALL SELECT 18, '42', '中等专科结业'
UNION ALL SELECT 19, '43', '中等专科肄业'
UNION ALL SELECT 20, '44', '职业高中毕业'
UNION ALL SELECT 21, '45', '职业高中结业'
UNION ALL SELECT 22, '47', '技工学校毕业'
UNION ALL SELECT 23, '48', '技工学校结业'
UNION ALL SELECT 24, '60', '普通高级中学教育'
UNION ALL SELECT 25, '61', '普通高中毕业'
UNION ALL SELECT 26, '62', '普通高中结业'
UNION ALL SELECT 27, '63', '普通高中肄业'
UNION ALL SELECT 28, '70', '初级中学教育'
UNION ALL SELECT 29, '71', '初中毕业'
UNION ALL SELECT 30, '73', '初中肄业'
UNION ALL SELECT 31, '80', '小学教育'
UNION ALL SELECT 32, '81', '小学毕业'
UNION ALL SELECT 33, '90', '其他'
UNION ALL SELECT 34, '128', '相当大学毕业'
UNION ALL SELECT 35, '138', '相当专科毕业'
UNION ALL SELECT 36, '142', '中技毕业'
) source
WHERE parent.code = 'USER_EDUCATION'
AND NOT EXISTS (
SELECT 1 FROM sys_dict existing
WHERE existing.parentId = parent.id AND existing.code = source.name
);
UPDATE sys_dict parent
SET parent.hasChildren = 1
WHERE parent.code = 'USER_EDUCATION'
AND EXISTS (
SELECT 1 FROM (SELECT DISTINCT parentId FROM sys_dict) child
WHERE child.parentId = parent.id
);
-- 9. 职称
-- 复用会员职称表单字典 TECHNICAL_TITLE_LEVEL,code、name 均保存名称。
-- 同名职称在页面字典中仅保留一个,原始代码另存 sys_data_dict。
INSERT INTO sys_dict (
id, parentId, path, name, remark, code, disabled, location, hasChildren,
createdBy, createdAt, updatedBy, updatedAt, delFlag
)
SELECT
REPLACE(UUID(), '-', ''), parent.id,
CONCAT(parent.path, LPAD(IFNULL((
SELECT MAX(CAST(RIGHT(child.path, 4) AS UNSIGNED))
FROM sys_dict child WHERE child.path LIKE CONCAT(parent.path, '____')
), 0) + 1, 4, '0')),
'职称', '', 'TECHNICAL_TITLE_LEVEL', 0,
IFNULL((SELECT MAX(child.location) FROM sys_dict child WHERE child.parentId = parent.id), 0) + 1,
0, '', UNIX_TIMESTAMP(NOW()) * 1000, '', UNIX_TIMESTAMP(NOW()) * 1000, 0
FROM sys_dict parent
WHERE parent.code = 'USER_TABLE_COLUMN_DICTS'
AND NOT EXISTS (SELECT 1 FROM sys_dict existing WHERE existing.code = 'TECHNICAL_TITLE_LEVEL');
UPDATE sys_dict child
JOIN sys_dict parent ON parent.id = child.parentId
SET child.code = child.name
WHERE parent.code = 'TECHNICAL_TITLE_LEVEL'
AND child.name IS NOT NULL AND child.name <> ''
AND NOT (child.code <=> child.name);
INSERT INTO sys_dict (
id, parentId, path, name, remark, code, disabled, location, hasChildren,
createdBy, createdAt, updatedBy, updatedAt, delFlag
)
SELECT
REPLACE(UUID(), '-', ''), parent.id,
CONCAT(parent.path, LPAD(IFNULL((
SELECT MAX(CAST(RIGHT(child.path, 4) AS UNSIGNED))
FROM sys_dict child WHERE child.path LIKE CONCAT(parent.path, '____')
), 0) + source.sortOrder, 4, '0')),
source.name, '', source.name, 0,
IFNULL((SELECT MAX(child.location) FROM sys_dict child WHERE child.parentId = parent.id), 0)
+ source.sortOrder,
0, '', UNIX_TIMESTAMP(NOW()) * 1000, '', UNIX_TIMESTAMP(NOW()) * 1000, 0
FROM sys_dict parent
CROSS JOIN (
SELECT 1 AS sortOrder, '高等学校教师' AS name
UNION ALL SELECT 2, '教授'
UNION ALL SELECT 3, '副教授'
UNION ALL SELECT 4, '讲师(高校)'
UNION ALL SELECT 5, '助教(高校)'
UNION ALL SELECT 6, '高级讲师(中专)'
UNION ALL SELECT 7, '讲师(中专)'
UNION ALL SELECT 8, '助理讲师(中专)'
UNION ALL SELECT 9, '高级讲师(技校)'
UNION ALL SELECT 10, '讲师(技校)'
UNION ALL SELECT 11, '助理讲师(技校)'
UNION ALL SELECT 12, '一级实习指导教师'
UNION ALL SELECT 13, '二级实习指导教师'
UNION ALL SELECT 14, '三级实习指导教师'
UNION ALL SELECT 15, '高级教师(中学)'
UNION ALL SELECT 16, '一级教师(中学)'
UNION ALL SELECT 17, '二级教师(中学)'
UNION ALL SELECT 18, '正高级教师'
UNION ALL SELECT 19, '高级教师'
UNION ALL SELECT 20, '一级教师'
UNION ALL SELECT 21, '二级教师'
UNION ALL SELECT 22, '教授级高级实验师'
UNION ALL SELECT 23, '高级实验师'
UNION ALL SELECT 24, '实验师'
UNION ALL SELECT 25, '助理实验师'
UNION ALL SELECT 26, '实验员'
UNION ALL SELECT 27, '教授级高级工程师'
UNION ALL SELECT 28, '高级工程师'
UNION ALL SELECT 29, '工程师'
UNION ALL SELECT 30, '助理工程师'
UNION ALL SELECT 31, '技术员'
UNION ALL SELECT 32, '农艺师'
UNION ALL SELECT 33, '农业技术人员(畜牧)'
UNION ALL SELECT 34, '经济专业人员'
UNION ALL SELECT 35, '经济师'
UNION ALL SELECT 36, '助理经济师'
UNION ALL SELECT 37, '会计专业人员'
UNION ALL SELECT 38, '高级会计师'
UNION ALL SELECT 39, '会计师'
UNION ALL SELECT 40, '助理会计师'
UNION ALL SELECT 41, '会计员'
UNION ALL SELECT 42, '统计专业人员'
UNION ALL SELECT 43, '统计师'
UNION ALL SELECT 44, '编审'
UNION ALL SELECT 45, '副编审'
UNION ALL SELECT 46, '编辑'
UNION ALL SELECT 47, '主任编辑'
UNION ALL SELECT 48, '播音员'
UNION ALL SELECT 49, '卫生技术人员(医师)'
UNION ALL SELECT 50, '主任医师'
UNION ALL SELECT 51, '副主任医师'
UNION ALL SELECT 52, '主治医师'
UNION ALL SELECT 53, '医师'
UNION ALL SELECT 54, '副主任药师'
UNION ALL SELECT 55, '主管药师'
UNION ALL SELECT 56, '药师'
UNION ALL SELECT 57, '卫生技术人员(护理)'
UNION ALL SELECT 58, '副主任护师'
UNION ALL SELECT 59, '主管护师'
UNION ALL SELECT 60, '护师'
UNION ALL SELECT 61, '卫生主管技师'
UNION ALL SELECT 62, '高级教师(小学)'
UNION ALL SELECT 63, '一级教师(小学)'
UNION ALL SELECT 64, '船舶技术人员(轮机)'
UNION ALL SELECT 65, '研究员(自然科学)'
UNION ALL SELECT 66, '副研究员(自然科学)'
UNION ALL SELECT 67, '助理研究员(自然科学)'
UNION ALL SELECT 68, '研究员(社会科学)'
UNION ALL SELECT 69, '副研究员(社会科学)'
UNION ALL SELECT 70, '助理研究员(社会科学)'
UNION ALL SELECT 71, '研究实习员(社会科学)'
UNION ALL SELECT 72, '研究馆员(图书)'
UNION ALL SELECT 73, '副研究馆员(图书)'
UNION ALL SELECT 74, '馆员(图书)'
UNION ALL SELECT 75, '助理馆员(图书)'
UNION ALL SELECT 76, '馆员(文博)'
UNION ALL SELECT 77, '研究馆员(档案)'
UNION ALL SELECT 78, '副研究馆员(档案)'
UNION ALL SELECT 79, '馆员(档案)'
UNION ALL SELECT 80, '教授(思想政治教育)'
UNION ALL SELECT 81, '副教授(思想政治教育)'
UNION ALL SELECT 82, '讲师(思想政治教育)'
UNION ALL SELECT 83, '助教(思想政治教育)'
UNION ALL SELECT 84, '政工师'
UNION ALL SELECT 85, '助理政工师'
UNION ALL SELECT 86, '政工员'
UNION ALL SELECT 87, '副教授(改革)'
UNION ALL SELECT 88, '研究员'
UNION ALL SELECT 89, '副研究员'
UNION ALL SELECT 90, '助理研究员'
UNION ALL SELECT 91, '研究实习员'
UNION ALL SELECT 92, '研究馆员'
UNION ALL SELECT 93, '副研究馆员'
UNION ALL SELECT 94, '馆员'
UNION ALL SELECT 95, '助理馆员'
UNION ALL SELECT 96, '管理员'
UNION ALL SELECT 97, '幼教一级'
UNION ALL SELECT 98, '幼教二级'
UNION ALL SELECT 99, '幼教高级'
UNION ALL SELECT 100, '研究员(教管)'
UNION ALL SELECT 101, '副研究员(教管)'
UNION ALL SELECT 102, '助理研究员(教管)'
) source
WHERE parent.code = 'TECHNICAL_TITLE_LEVEL'
AND NOT EXISTS (
SELECT 1 FROM sys_dict existing
WHERE existing.parentId = parent.id AND existing.code = source.name
);
UPDATE sys_dict parent
SET parent.hasChildren = 1
WHERE parent.code IN ('USER_TABLE_COLUMN_DICTS', 'TECHNICAL_TITLE_LEVEL')
AND EXISTS (
SELECT 1 FROM (SELECT DISTINCT parentId FROM sys_dict) child
WHERE child.parentId = parent.id
);
-- 10. 人员类型:沿用 v3 的 17 个名称,code、name 均保存名称。
INSERT INTO sys_dict (
id, parentId, path, name, remark, code, disabled, location, hasChildren,
createdBy, createdAt, updatedBy, updatedAt, delFlag
)
SELECT
REPLACE(UUID(), '-', ''), parent.id,
CONCAT(parent.path, LPAD(IFNULL((
SELECT MAX(CAST(RIGHT(child.path, 4) AS UNSIGNED))
FROM sys_dict child WHERE child.path LIKE CONCAT(parent.path, '____')
), 0) + source.sortOrder, 4, '0')),
source.name, '', source.name, 0,
IFNULL((SELECT MAX(child.location) FROM sys_dict child WHERE child.parentId = parent.id), 0)
+ source.sortOrder,
0, '', UNIX_TIMESTAMP(NOW()) * 1000, '', UNIX_TIMESTAMP(NOW()) * 1000, 0
FROM sys_dict parent
CROSS JOIN (
SELECT 1 AS sortOrder, '在编类' AS name
UNION ALL SELECT 2, '聘用合同制(享受人事代理待遇)'
UNION ALL SELECT 3, '在编'
UNION ALL SELECT 4, '兰溪编制'
UNION ALL SELECT 5, '非在编类'
UNION ALL SELECT 6, '派遣人员'
UNION ALL SELECT 7, '博士后'
UNION ALL SELECT 8, '挂职人员'
UNION ALL SELECT 9, '外籍教师'
UNION ALL SELECT 10, '兼职教师'
UNION ALL SELECT 11, '非学校聘用人员'
UNION ALL SELECT 12, '单位返聘'
UNION ALL SELECT 13, '附属单位'
UNION ALL SELECT 14, '聘用合同制'
UNION ALL SELECT 15, '聘用制专家'
UNION ALL SELECT 16, '人事代理'
UNION ALL SELECT 17, '其他'
) source
WHERE parent.code = 'USER_PERSON_TYPE'
AND NOT EXISTS (
SELECT 1 FROM sys_dict existing
WHERE existing.parentId = parent.id AND existing.code = source.name
);
UPDATE sys_dict parent
SET parent.hasChildren = 1
WHERE parent.code = 'USER_PERSON_TYPE'
AND EXISTS (
SELECT 1 FROM (SELECT DISTINCT parentId FROM sys_dict) child
WHERE child.parentId = parent.id
);
COMMIT;
@@ -0,0 +1,11 @@
COMMIT;
-- 在源表补充接口原始代码,原有字段继续保存名称。
ALTER TABLE sys_user_source
ADD COLUMN educationCode varchar(20) NULL DEFAULT NULL COMMENT '最高学历代码' AFTER education,
ADD COLUMN academicDegreeCode varchar(50) NULL DEFAULT NULL COMMENT '最高学位代码' AFTER academicDegree,
ADD COLUMN preparedByCode varchar(30) NULL DEFAULT NULL COMMENT '编制类别代码' AFTER preparedBy,
ADD COLUMN jobCategoryCode varchar(50) NULL DEFAULT NULL COMMENT '聘岗类型代码' AFTER jobCategory,
ADD COLUMN userStateCode varchar(30) NULL DEFAULT NULL COMMENT '当前状态代码' AFTER userState;
COMMIT;
@@ -0,0 +1,2 @@
ALTER TABLE `sys_user_source`
ADD COLUMN `professionalTitleCode` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '专业技术职务代码' AFTER `professionalTitle`;
@@ -0,0 +1,55 @@
;(function (a) {
;(jQuery.browser = jQuery.browser || {}).mobile =
/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(
a
) ||
/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(
a.substr(0, 4)
)
})(navigator.userAgent || navigator.vendor || window.opera)
$.ajaxSetup({
contentType: "application/x-www-form-urlencoded;charset=utf-8",
success: function (response, textStatus, jqXHR) {
if (response && typeof response === "object" && response.code !== undefined && response.code !== 0) {
Vue.prototype.$message.error(response.msg)
} else {
return response
}
},
error: function (v1) {
Vue.prototype.$message.error(v1.status + " " + v1.statusText)
},
complete: function (XMLHttpRequest, textStatus) {
var sessionstatus = XMLHttpRequest.getResponseHeader("loginStatus") //通过XMLHttpRequest取得响应头,sessionstatus,
if (sessionstatus == "accessDenied") {
Vue.prototype.$message({
message: "\u767b\u5f55\u5931\u6548\uff0c\u8bf7\u5237\u65b0\u9875\u9762\u91cd\u65b0\u767b\u5f55",
type: "error"
})
}
if (sessionstatus == "unauthorized") {
Vue.prototype.$message({
message: "\u6ca1\u6709\u6743\u9650",
type: "error"
})
}
}
})
function pjaxReplace(url, data = {}) {
const { pathname, search } = location
if (url === pathname + search) {
return
}
$.pjax({
url: url,
container: "#sub-app-container-main-content-body",
maxCacheLength: 0,
push: false,
replace: true,
fragment: "#sub-app-container-main-content-body",
timeout: 8000,
data
})
}
@@ -1,12 +1,12 @@
const uploadFileType = ['jpg', 'png', 'doc', 'docx', 'xls', 'xlsx', 'pdf']
const docType = ['doc', 'docx', 'xls', 'xlsx', 'pdf']
var uploadFileType = ['jpg', 'png', 'doc', 'docx', 'xls', 'xlsx', 'pdf']
var docType = ['doc', 'docx', 'xls', 'xlsx', 'pdf']
const FILE_UPLOAD_ADDRESS = '/platform/inclusiveTherapyV3/common/uploadFile'
const FILE_DELETE_ADDRESS = '/platform/inclusiveTherapyV3/common/deleteFile'
const FILE_STREAM_PREVIEW_ADDRESS = '/platform/inclusiveTherapyV3/common/preview'
const FILE_STREAM_DOWNLOAD_ADDRESS = '/platform/inclusiveTherapyV3/common/download'
var FILE_UPLOAD_ADDRESS = '/platform/inclusiveTherapyV3/common/uploadFile'
var FILE_DELETE_ADDRESS = '/platform/inclusiveTherapyV3/common/deleteFile'
var FILE_STREAM_PREVIEW_ADDRESS = '/platform/inclusiveTherapyV3/common/preview'
var FILE_STREAM_DOWNLOAD_ADDRESS = '/platform/inclusiveTherapyV3/common/download'
const preview = async (filename, id) => {
var preview = async (filename, id) => {
const suffix = filename.substring(filename.lastIndexOf('.') + 1)
if (!docType.includes(suffix.toLowerCase())) {
let image = new Image();
@@ -19,19 +19,19 @@ const preview = async (filename, id) => {
}
}
const download = (id) => {
var download = (id) => {
window.open(FILE_STREAM_DOWNLOAD_ADDRESS + '?id=' + id)
}
const PREVIEW_IMAGE = (val) => {
var PREVIEW_IMAGE = (val) => {
let image = new Image();
image.src = FILE_STREAM_PREVIEW_ADDRESS + "?id=" + val
let viewer = new Viewer(image);
viewer.show();
}
const CREATE_PREVIEW_URL = (val) => {
var CREATE_PREVIEW_URL = (val) => {
return /^(https?:|data:|blob:|\/)/.test(val || "") ? val : FILE_STREAM_PREVIEW_ADDRESS + "?id=" + encodeURIComponent(val)
}
@@ -40,13 +40,13 @@ const CREATE_PREVIEW_URL = (val) => {
* 遮盖层颜色
* @type {string}
*/
const COVER_LAYER_COLOR = "rgba(0,0,0,.45)"
var COVER_LAYER_COLOR = "rgba(0,0,0,.45)"
/**
* 民族
* @type {string[]}
*/
const nation = [
var nation = [
'汉族',
'蒙古族',
'回族',
@@ -113,7 +113,7 @@ function clone(obj) {
return JSON.parse(JSON.stringify(obj))
}
const calcTableHeight = (eleIds = []) => {
var calcTableHeight = (eleIds = []) => {
if (eleIds) {
eleIds.forEach(e_id => {
const ele = document.querySelector('#' + e_id)
@@ -1,4 +1,4 @@
const sublime = {
var sublime = {
jumpPagePjax(url) {
window.location.href = url;
}
@@ -1,9 +1,9 @@
Vue.component('vi-title', {
props: ['title'],
template: `
<div style="display: flex;flex-direction:row;color: var(--color-primary);font-weight: bolder;margin-bottom: 20px">
<div style="width: 5px;height: 24px;background-color: var(--color-primary);border-radius: 2px"></div>
<div style="margin-left: 20px;line-height: 24px;font-size: 15px;letter-spacing: 1px">
<div class="therapy-title" style="display: flex;flex-direction:row;color: var(--color-primary);font-weight: bolder;margin-bottom: 20px">
<div class="therapy-title-marker" style="width: 5px;height: 24px;background-color: var(--color-primary);border-radius: 2px"></div>
<div class="therapy-title-text" style="margin-left: 20px;line-height: 24px;font-size: 15px;letter-spacing: 1px">
{{ title }}
</div>
</div>
@@ -46,7 +46,7 @@ Vue.component('more', {
}
})
Vue.component('table-tool', {
Vue.component('therapy-table-tool', {
props: {
label: {type: String},
app: {}
@@ -79,7 +79,7 @@ Vue.component('table-tool', {
this.getColumns()
},
template: `
<el-row type="flex" justify="space-between" align="middle" style="margin-bottom: 15px">
<el-row class="therapy-table-tool" type="flex" justify="space-between" align="middle" style="margin-bottom: 15px">
<div style="display: flex;justify-content: center;align-items: center">
<vi-title :title="label" style="margin-bottom: 0"></vi-title><slot name="label_end"></slot>
@@ -127,3 +127,4 @@ Vue.component('table-tool', {
</el-row>
`,
})
Vue.component('table-tool', Vue.options.components['therapy-table-tool'])
@@ -0,0 +1,189 @@
.therapy-desktop {
font-family: "Helvetica Neue", "Microsoft YaHei", Arial, sans-serif;
font-size: 14px;
color: #303133;
}
.therapy-desktop #app {
height: auto;
min-height: 100%;
overflow: visible;
background: transparent;
}
.therapy-desktop #app .el-card__header {
padding: 16px 20px;
color: #303133;
font-size: 16px;
font-weight: 600;
line-height: 24px;
}
.therapy-desktop #app .el-form-item__label {
color: #606266;
font-weight: 400;
}
.therapy-desktop #app .search {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: 16px 24px;
margin: 0;
}
.therapy-desktop #app .search .search-item {
width: auto;
min-width: 0;
margin: 0;
padding: 0;
overflow: visible;
}
.therapy-desktop #app .search .search-item-label {
flex: 0 0 90px;
width: 90px;
min-width: 0;
margin-right: 12px;
color: #606266;
text-align: right;
line-height: 20px;
overflow: visible;
}
.therapy-desktop #app .search .search-item-option {
flex: 1;
width: 0;
min-width: 0;
overflow: visible;
}
.therapy-desktop #app .search-item-option > .el-input,
.therapy-desktop #app .search-item-option > .el-select,
.therapy-desktop #app .search-item-option > .el-date-editor {
width: 100%;
max-width: 100%;
}
.therapy-desktop #app .search-item-option > .el-radio-group {
display: flex;
flex-wrap: wrap;
gap: 4px 0;
}
.therapy-desktop #app .search .search-query {
display: flex;
align-items: center;
gap: 10px;
width: auto;
margin: 0;
padding-left: 102px;
overflow: visible;
}
.therapy-desktop #app .query-row {
height: auto;
min-height: 56px;
padding: 12px 0;
}
.therapy-desktop #app .query-row > .query-row-title:empty {
display: none;
}
.therapy-desktop #app .query-row .el-col {
min-width: 0;
overflow: visible;
}
.therapy-desktop #app .query-row-content {
flex: 1;
}
.therapy-desktop #app .query-row-content > .el-row {
display: flex;
flex-wrap: wrap;
row-gap: 12px;
}
.therapy-desktop #app .query-row-content > .el-row > .el-col {
display: flex;
align-items: center;
gap: 12px;
padding-right: 24px;
}
.therapy-desktop #app .query-row-content > .el-row > .el-col > span:first-child {
flex: 0 0 90px;
color: #606266;
text-align: right;
}
.therapy-desktop #app .query-row-content > .el-row > .el-col > .el-input,
.therapy-desktop #app .query-row-content > .el-row > .el-col > .el-select {
flex: 1;
width: 0 !important;
min-width: 0;
}
.therapy-desktop .therapy-table-tool {
flex-wrap: wrap;
gap: 12px;
}
.therapy-desktop .therapy-table-tool > div {
min-width: 0;
max-width: 100%;
flex-wrap: wrap;
gap: 10px;
}
.therapy-desktop .therapy-title {
display: flex;
align-items: center;
min-width: 0;
margin-bottom: 16px;
color: #303133 !important;
font-size: 16px;
font-weight: 600 !important;
line-height: 24px;
overflow-wrap: anywhere;
}
.therapy-desktop .therapy-title .therapy-title-marker {
flex: 0 0 3px;
height: 16px !important;
}
.therapy-desktop .therapy-title .therapy-title-text {
margin-left: 10px !important;
font-size: 16px !important;
letter-spacing: normal !important;
}
.therapy-desktop #app .chart-title,
.therapy-desktop #app .col-title {
color: #303133;
font-size: 16px;
font-weight: 600;
}
@media (max-width: 1199px) {
.therapy-desktop #app .search {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
}
@media (max-width: 767px) {
.therapy-desktop #app .search {
grid-template-columns: minmax(0, 1fr);
}
.therapy-desktop #app .query-row-content > .el-row > .el-col {
width: 100%;
padding-right: 0;
}
.therapy-desktop .therapy-table-tool > div {
width: 100%;
}
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 441 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 524 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 991 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

@@ -1,4 +1,4 @@
const initTableMixins = {
var therapyTableMixins = {
data() {
return {
festival: ['元旦', '春节', '清明节', '劳动节', '端午节', '中秋节', '国庆节', '其它'],
@@ -23,6 +23,14 @@ const mobileMixins = {
}
},
methods: {
historyBack(callback) {
if (window.history.length > 1) {
window.history.back()
} else {
window.location.href = '/platform/h5/home'
}
if (typeof callback === 'function') callback()
},
async pageData() {
this.mLoading = true
if (this.pageDataUrl == null) {
@@ -2,7 +2,7 @@
* 根据enum获取选项
* @returns {Promise<*>}
*/
const getEnumOptions = async (enumName) => {
var getEnumOptions = async (enumName) => {
const {data} = await $.get("/platform/inclusiveTherapyV3/common/enumOptions", {enumName})
return data
}
@@ -11,7 +11,7 @@ const getEnumOptions = async (enumName) => {
* 根据code获取字典选项
* @returns {Promise<*>}
*/
const getDictOptions = async (code) => {
var getDictOptions = async (code) => {
const {data} = await $.get("/platform/inclusiveTherapyV3/common/dictOptions", {code})
return data
}
@@ -20,7 +20,7 @@ const getDictOptions = async (code) => {
* 根据code获取字典选项信息
* @returns {Promise<*>}
*/
const getDictState = async (code) => {
var getDictState = async (code) => {
const {data} = await $.get("/platform/inclusiveTherapyV3/common/dictState", {code})
return data
}
@@ -29,7 +29,7 @@ const getDictState = async (code) => {
* 获取校区
* @returns {Promise<*>}
*/
const getCampus = async () => {
var getCampus = async () => {
const {data} = await $.get("/platform/inclusiveTherapyV3/common/getCampus")
return data
}
@@ -39,19 +39,19 @@ const getCampus = async () => {
* 获取代表团
* @returns {Promise<*>}
*/
const getDbt = async (jdhId) => {
var getDbt = async (jdhId) => {
const {data} = await $.get("/platform/inclusiveTherapyV3/common/getDbt", {jdhId})
return data
}
//查询当前用户管理的院级工会
const getUnion = async () => {
var getUnion = async () => {
const {data} = await $.get("/platform/inclusiveTherapyV3/common/getUnion")
return data
}
//查询当前用户管理的院级工会下的单位
const getUnit = async (unionid) => {
var getUnit = async (unionid) => {
const {data} = await $.get("/platform/inclusiveTherapyV3/common/getUnit", {unionid: unionid})
return data
}
@@ -60,13 +60,13 @@ const getUnit = async (unionid) => {
* 获取代表小组
* @returns {Promise<*>}
*/
const getGroup = async (jdhId) => {
var getGroup = async (jdhId) => {
const {data} = await $.get("/platform/inclusiveTherapyV3/common/getGroup", {jdhId})
return data
}
//获取所有开启的教代会
const getOpenJdh = async () => {
var getOpenJdh = async () => {
const {data} = await $.get("/platform/jdh/Common/getOpenJdhxx")
return data
}
@@ -75,7 +75,7 @@ const getOpenJdh = async () => {
* 获取院级工会
* @returns {Promise<*>}
*/
const getUnions = async (delegationId = null, isPermission = false) => {
var getUnions = async (delegationId = null, isPermission = false) => {
const {data} = await $.get("/platform/inclusiveTherapyV3/common/unions", {delegationId, isPermission})
return data
}
@@ -84,7 +84,7 @@ const getUnions = async (delegationId = null, isPermission = false) => {
* 获取活动院级工会
* @returns {Promise<*>}
*/
const getActivityUnions = async () => {
var getActivityUnions = async () => {
const {data} = await $.get("/platform/activity/basic/union/getActivityUnions",)
return data
}
@@ -93,12 +93,12 @@ const getActivityUnions = async () => {
* 获取单位
* @returns {Promise<*>}
*/
const getUnits = async (unionId = null) => {
var getUnits = async (unionId = null) => {
const {data} = await $.get("/platform/inclusiveTherapyV3/common/units", {unionId})
return data
}
const getClubUnits = async () => {
var getClubUnits = async () => {
const {data} = await $.get("/platform/inclusiveTherapyV3/common/getClubUnits", {})
return data
}
@@ -107,7 +107,7 @@ const getClubUnits = async () => {
* 获取单位
* @returns {Promise<*>}
*/
const getActivityUnits = async (unionId) => {
var getActivityUnits = async (unionId) => {
const {data} = await $.get("/platform/activity/basic/union/getActivityUnits", {unionId})
return data
}
@@ -117,7 +117,7 @@ const getActivityUnits = async (unionId) => {
* 获取本分工会的单位
* @returns {Promise<*>}
*/
const getUnionUnits = async () => {
var getUnionUnits = async () => {
const {data} = await $.get("/platform/inclusiveTherapyV3/common/unionUnits")
return data
}
@@ -126,7 +126,7 @@ const getUnionUnits = async () => {
* 获取福利单位
* @returns {Promise<*>}
*/
const getWelfareUnits = async () => {
var getWelfareUnits = async () => {
const {data} = await $.get("/platform/inclusiveTherapyV3/common/welfareUnits")
return data
}
@@ -135,7 +135,7 @@ const getWelfareUnits = async () => {
* 获取福利单位的二级单位
* @returns {Promise<*>}
*/
const getUnitsByWelfareUnit = async (welfareUnitId) => {
var getUnitsByWelfareUnit = async (welfareUnitId) => {
const {data} = await $.get("/platform/inclusiveTherapyV3/common/unitsByWelfareUnit", {welfareUnitId})
return data
}
@@ -144,7 +144,7 @@ const getUnitsByWelfareUnit = async (welfareUnitId) => {
* 获取协会
* @returns {Promise<*>}
*/
const getClubs = async () => {
var getClubs = async () => {
const {data} = await $.get("/platform/inclusiveTherapyV3/common/clubs", {})
return data
}
@@ -153,7 +153,7 @@ const getClubs = async () => {
* 获取届次
* @returns {Promise<*>}
*/
const getJc = async () => {
var getJc = async () => {
const {data} = await $.get("/platform/inclusiveTherapyV3/common/getJcByDict")
return data
}
@@ -162,7 +162,7 @@ const getJc = async () => {
* 获取当前人所管理的协会
* @returns {Promise<*>}
*/
const getClubsByRole = async () => {
var getClubsByRole = async () => {
const {data} = await $.get("/platform/inclusiveTherapyV3/common/getClubsByRole", {})
return data
}
@@ -170,7 +170,7 @@ const getClubsByRole = async () => {
* 获取当前人所在的协会
* @returns {Promise<*>}
*/
const getClubsByUser = async () => {
var getClubsByUser = async () => {
const {data} = await $.get("/platform/inclusiveTherapyV3/common/getClubsByUser", {})
return data
}
@@ -179,7 +179,7 @@ const getClubsByUser = async () => {
* 获取文件类型
* @returns {Promise<*>}
*/
const getFileType = async () => {
var getFileType = async () => {
const {data} = await $.get("/platform/inclusiveTherapyV3/common/getFileTypeByDict")
return data
}
@@ -188,7 +188,7 @@ const getFileType = async () => {
* 获取基层干部的角色
* @returns {Promise<*>}
*/
const getJcgbJs = async () => {
var getJcgbJs = async () => {
const {data} = await $.get("/platform/inclusiveTherapyV3/common/getJcgbJsByDict")
return data
}
@@ -197,7 +197,7 @@ const getJcgbJs = async () => {
* 获取审批员的角色
* @returns {Promise<*>}
*/
const getSpyJs = async () => {
var getSpyJs = async () => {
const {data} = await $.get("/platform/inclusiveTherapyV3/common/getSpyJsByDict")
return data
}
@@ -206,7 +206,7 @@ const getSpyJs = async () => {
* 获取协会类型
* @returns {Promise<*>}
*/
const getClubType = async () => {
var getClubType = async () => {
const {data} = await $.get("/platform/inclusiveTherapyV3/common/getClubTypeByDict")
return data
}
@@ -215,7 +215,7 @@ const getClubType = async () => {
* 获取系统名称
* @returns {Promise<*>}
*/
const getSystemName = async () => {
var getSystemName = async () => {
const {data} = await $.get("/platform/inclusiveTherapyV3/common/getSystemNameByDict")
return data
}
@@ -224,7 +224,7 @@ const getSystemName = async () => {
* 获取工代会
* @returns {Promise<*>}
*/
const getGdh = async (open = true) => {
var getGdh = async (open = true) => {
const {data} = await $.get("/platform/inclusiveTherapyV3/common/getGdh", {open})
return data
}
@@ -233,7 +233,7 @@ const getGdh = async (open = true) => {
* 获取工代会代表团
* @returns {Promise<*>}
*/
const getGdhDbt = async (jdhId) => {
var getGdhDbt = async (jdhId) => {
const {data} = await $.get("/platform/gdh/common/getDbt", {jdhId})
return data
}
@@ -242,7 +242,7 @@ const getGdhDbt = async (jdhId) => {
* 根据id查用户
* @returns {Promise<*>}
*/
const queryUserByIds = async (ids) => {
var queryUserByIds = async (ids) => {
const {data} = await $.get("/platform/inclusiveTherapyV3/common/queryUserByIds", {ids: JSON.stringify(ids)})
return data
}
@@ -251,7 +251,7 @@ const queryUserByIds = async (ids) => {
* 根据id查用户
* @returns {Promise<*>}
*/
const queryUserById = async (id) => {
var queryUserById = async (id) => {
const {data} = await $.get("/platform/inclusiveTherapyV3/common/queryUserById", {id: id})
return data
}
@@ -265,7 +265,7 @@ const queryUserById = async (id) => {
* @param member
* @returns {Promise<*>}
*/
const searchUser = async (query, unionId = null, unitId = null, sex = null, member = null) => {
var searchUser = async (query, unionId = null, unitId = null, sex = null, member = null) => {
const {data} = await $.get("/platform/inclusiveTherapyV3/common/searchUser", {
query,
unionId,
@@ -280,7 +280,7 @@ const searchUser = async (query, unionId = null, unitId = null, sex = null, memb
* 获取代表可以操作的教代会
* @returns {Promise<*>}
*/
const getJdhByDb = async () => {
var getJdhByDb = async () => {
const {data} = await $.get("/platform/proposal/common/getJdhByDb")
return data
}
@@ -289,7 +289,7 @@ const getJdhByDb = async () => {
* 获取代表可以操作的开启的教代会
* @returns {Promise<*>}
*/
const getOpenJdhByDb = async () => {
var getOpenJdhByDb = async () => {
const {data} = await $.get("/platform/proposal/common/getOpenMeeting")
return data
}
@@ -298,7 +298,7 @@ const getOpenJdhByDb = async () => {
* 获取教代会工作资料类型
* @returns {Promise<*>}
*/
const getGzzllx = async () => {
var getGzzllx = async () => {
const {data} = await $.get("/platform/jdh/Common/getGzzllx")
return data
}
@@ -307,16 +307,16 @@ const getGzzllx = async () => {
* 获取疗休养活动
* @returns {Promise<*>}
*/
const getLxyHd = async () => {
var getLxyHd = async () => {
const {data} = await $.get("/platform/zgfw/lxy/common/getHdList")
return data
}
const getlxyHdCd = async () => {
var getlxyHdCd = async () => {
const {data} = await $.get("/platform/zgfw/lxy/common/getlxyHdCd")
return data
}
const getNowLxyHd = async () => {
var getNowLxyHd = async () => {
const {data} = await $.get("/platform/zgfw/lxy/common/getNowHdList")
return data
}
@@ -325,11 +325,11 @@ const getNowLxyHd = async () => {
* 获取基层工会
* @returns {Promise<*>}
*/
const getUnionList = async (unionId) => {
var getUnionList = async (unionId) => {
const {data} = await $.get("/platform/inclusiveTherapyV3/common/unionList", {unionId})
return data
}
const threeUnitsByUnionGroupOrUnitId = async (unitId, groupId) => {
var threeUnitsByUnionGroupOrUnitId = async (unitId, groupId) => {
const {data} = await $.get("/platform/inclusiveTherapyV3/common/threeUnitsByUnionGroupOrUnitId", {
unitId,
groupId
@@ -337,7 +337,7 @@ const threeUnitsByUnionGroupOrUnitId = async (unitId, groupId) => {
return data
}
const unionGroupsByUnionId = async (unionId) => {
var unionGroupsByUnionId = async (unionId) => {
const {data} = await $.get("/platform/inclusiveTherapyV3/common/unionGroupsByUnionId", {unionId})
return data
}
@@ -346,7 +346,7 @@ const unionGroupsByUnionId = async (unionId) => {
* 获取活动人员范围
* @returns {Promise<*>}
*/
const getActivityGroup = async () => {
var getActivityGroup = async () => {
const {data} = await $.get('/platform/activity/basic/scope/getActivityUserScopeGroup')
return data
}
@@ -354,7 +354,7 @@ const getActivityGroup = async () => {
* 查看该人员是否在活动范围中
* @returns {Promise<*>}
*/
const getScopeUser = async (activityGroupId) => {
var getScopeUser = async (activityGroupId) => {
const {data} = await $.get('/platform/activity/basic/scope/getScopeUser', {activityGroupId})
return data
}
@@ -364,18 +364,18 @@ const getScopeUser = async (activityGroupId) => {
* @param id
* @returns {Promise<*>}
*/
const getActivityTwoLevelType = async (code) => {
var getActivityTwoLevelType = async (code) => {
const {data} = await $.get("/platform/activity/basic/basic/settings/getActivityTwoLevelType", {code})
return data
}
//获取二级教代会(双代会)工作资料类型
const getJdh2Gzzllx = async () => {
var getJdh2Gzzllx = async () => {
const {data} = await $.get("/platform/jdh/Common/getJdh2Gzzllx")
return data
}
const getLocationVariable = (variable) => {
var getLocationVariable = (variable) => {
var query = window.location.search.substring(1);
var vars = query.split("&");
for (let i = 0; i < vars.length; i++) {
@@ -387,7 +387,7 @@ const getLocationVariable = (variable) => {
return '';
}
const getConfigKey = async (key) => {
var getConfigKey = async (key) => {
const {data} = await $.get('/platform/inclusiveTherapyV3/common/getValue', {key})
return data
}
@@ -396,7 +396,7 @@ const getConfigKey = async (key) => {
* 根据多个工会获取单位
* @returns {Promise<*>}
*/
const getUnitByUnions = async (unionId = null) => {
var getUnitByUnions = async (unionId = null) => {
const {data} = await $.get("/platform/inclusiveTherapyV3/common/getUnitsByUnions", {unionId})
return data
}
@@ -407,7 +407,7 @@ const getUnitByUnions = async (unionId = null) => {
* @param groupId
* @returns {Promise<*>}
*/
const getThreeUnitsByUnionGroupsOrUnitIds = async (unitId, groupId) => {
var getThreeUnitsByUnionGroupsOrUnitIds = async (unitId, groupId) => {
const {data} = await $.get("/platform/inclusiveTherapyV3/common/getThreeUnitsByUnionGroupsOrUnitIds", {
unitId,
groupId
@@ -420,7 +420,7 @@ const getThreeUnitsByUnionGroupsOrUnitIds = async (unitId, groupId) => {
* @param unionId
* @returns {Promise<*>}
*/
const getUnionGroupsByUnions = async (unionId) => {
var getUnionGroupsByUnions = async (unionId) => {
const {data} = await $.get("/platform/inclusiveTherapyV3/common/getUnionGroupsByUnions", {unionId})
return data
}
@@ -0,0 +1,128 @@
<template>
<van-popup :value="value" position="right" class="therapy-notice-preview" :close-on-click-overlay="false"
:close-on-popstate="true" @input="$emit('input', $event)" @opened="loadPdf" @closed="releasePdf">
<van-nav-bar :title="title" left-arrow left-text="返回" @click-left="$emit('input', false)"></van-nav-bar>
<div class="therapy-notice-preview__body">
<div v-if="src" ref="viewer" class="therapy-notice-preview__viewer"></div>
<div v-else class="therapy-notice-preview__content" v-html="content"></div>
<div v-if="loading" class="therapy-notice-preview__status"><van-loading vertical>正在加载须知...</van-loading></div>
<div v-if="failed" class="therapy-notice-preview__status">
<van-empty image="error" description="PDF 加载失败,请重试">
<van-button round type="primary" size="small" @click="loadPdf">重新加载</van-button>
</van-empty>
</div>
</div>
</van-popup>
</template>
<script>
module.exports = {
name: 'TherapyNoticePreview',
props: {
value: { type: Boolean, default: false },
src: { type: String, default: '' },
title: { type: String, default: '疗休养须知' },
content: { type: String, default: '' }
},
data() {
return { loading: false, failed: false }
},
methods: {
loadPdf() {
this.releasePdf()
if (!this.value || !this.src) return
this.loading = true
try {
const viewer = new Pdfh5(this.$refs.viewer, { pdfurl: this.src, URIenable: false })
this._pdfViewer = viewer
viewer.on('complete', (status) => {
if (this._pdfViewer !== viewer) return
this.loading = false
this.failed = status !== 'success'
})
viewer.on('error', () => {
if (this._pdfViewer !== viewer) return
this.loading = false
this.failed = true
})
} catch (error) {
this.loading = false
this.failed = true
}
},
releasePdf() {
const viewer = this._pdfViewer
this._pdfViewer = null
if (viewer) viewer.destroy()
this.loading = false
this.failed = false
}
},
beforeDestroy() {
this.releasePdf()
}
}
</script>
<style>
.therapy-notice-preview.van-popup {
display: flex;
flex-direction: column;
width: 100vw;
max-width: none;
border-radius: 0;
height: 100%;
height: 100dvh;
overflow: hidden;
background: #f3f7fd;
box-sizing: border-box;
padding-top: env(safe-area-inset-top);
padding-bottom: env(safe-area-inset-bottom);
}
.therapy-notice-preview > .van-nav-bar {
flex-shrink: 0;
background: #fff;
}
.therapy-notice-preview .van-nav-bar__title {
max-width: 60%;
}
.therapy-notice-preview__body {
position: relative;
flex: 1;
min-height: 0;
overflow: hidden;
}
.therapy-notice-preview__viewer {
width: 100%;
height: 100%;
}
.therapy-notice-preview__content {
height: 100%;
padding: 16px;
overflow: auto;
box-sizing: border-box;
background: #fff;
line-height: 1.8;
overflow-wrap: anywhere;
}
.therapy-notice-preview__content img,
.therapy-notice-preview__content video {
max-width: 100% !important;
height: auto !important;
}
.therapy-notice-preview__status {
position: absolute;
inset: 0;
display: flex;
align-items: center;
justify-content: center;
background: #f3f7fd;
}
</style>
@@ -3,6 +3,7 @@
<slot></slot>
<div class="search-query" v-if="isSearchButton">
<el-button type="primary" icon="el-icon-search" @click="$emit('search', null)">搜索</el-button>
<slot name="actions"></slot>
</div>
</div>
</template>
@@ -1,6 +1,6 @@
<template>
<div>
<div class="panel panel-default mt20" style="border: none">
<div class="panel panel-default" style="border: none">
<div class="panel-heading" style="background: #fafafa;border:1px solid #ebeef5;border-bottom: none">
<h3 class="panel-title">
基地信息
@@ -3,7 +3,7 @@
<div>
<el-tabs tab-position="top" v-model="activeName" v-loading="loading">
<el-tab-pane label="报名信息" name="1">
<div class="panel panel-default mt20" style="border: none">
<div class="panel panel-default" style="border: none">
<div class="panel-heading" style="background: #fafafa;border:1px solid #ebeef5;border-bottom: none">
<h3 class="panel-title">
本人信息
@@ -68,7 +68,23 @@
</h3>
</div>
<div class="panel-body" style="border: 1px solid rgb(235, 238, 245)">
<el-table :data="viewData.companionList">
<div v-if="familyCards" class="therapy-family-list">
<div v-for="(item, index) in viewData.companionList" :key="item.id || index" class="therapy-family-card">
<div class="therapy-family-title">家属 {{ index + 1 }} · {{ item.userName }}</div>
<el-descriptions :column="2" border class="therapy-family-details">
<el-descriptions-item label="姓名">{{ item.userName }}</el-descriptions-item>
<el-descriptions-item label="性别">{{ item.sex }}</el-descriptions-item>
<el-descriptions-item label="关系">{{ item.relation }}</el-descriptions-item>
<el-descriptions-item label="身份证号">{{ item.idCard }}</el-descriptions-item>
<el-descriptions-item label="年龄">{{ item.age }}</el-descriptions-item>
<el-descriptions-item label="床型">{{ item.bedInfo?.bedType }}</el-descriptions-item>
<el-descriptions-item label="床位">{{ item.bedInfo?.bedNum }}</el-descriptions-item>
<el-descriptions-item label="意向拼床人">{{ item.bedInfo?.otherSleepUser || '暂无' }}</el-descriptions-item>
</el-descriptions>
</div>
<el-empty v-if="!viewData.companionList || !viewData.companionList.length" description="暂无家属信息" :image-size="60"></el-empty>
</div>
<el-table v-else :data="viewData.companionList">
<el-table-column label="姓名" prop="userName"></el-table-column>
<el-table-column label="性别" prop="sex"></el-table-column>
<el-table-column label="身份证号" prop="idCard"></el-table-column>
@@ -138,6 +154,10 @@
<script>
module.exports = {
props: {
familyCards: {
type: Boolean,
default: false,
},
union_id: {
type: String,
default: "",
@@ -8,7 +8,7 @@
<template #header>
<el-row type="flex">
<el-col :span="12">
<el-button icon="el-icon-back" style="font-size: 16px" type="text" @click="v='index'">返回</el-button>
<el-button icon="el-icon-back" style="font-size: 16px; padding: 0" type="text" @click="v='index'">返回</el-button>
</el-col>
<el-col :span="12" class="text-right">
<slot name="edit_func"></slot>
@@ -22,7 +22,7 @@
<el-card v-show="v==='view'" key="view" shadow="never" class="animated-card">
<template #header>
<el-button icon="el-icon-back" style="font-size: 16px" type="text" @click="v='index'">返回</el-button>
<el-button icon="el-icon-back" style="font-size: 16px; padding: 0" type="text" @click="v='index'">返回</el-button>
</template>
<div :class="{'card_scroll':edit_scroll}">
<slot name="view"></slot>
@@ -31,7 +31,7 @@
<el-card v-show="v==='public'" key="public" shadow="never" class="animated-card">
<div slot="header" class="clearfix">
<el-button icon="el-icon-back" style="font-size: 16px" type="text" @click="back()">返回
<el-button icon="el-icon-back" style="font-size: 16px; padding: 0" type="text" @click="back()">返回
</el-button>
</div>
<div>
@@ -92,7 +92,7 @@ module.exports = {
<style>
.guava-main-content {
padding: 10px 12px;
padding: 0;
background-color: #f6f6f6;
min-height: 100%;
}
@@ -114,8 +114,12 @@ module.exports = {
}
}
.el-card__header {
padding: 5px 20px !important;
.guava-main-content > .animated-card > .el-card__header {
padding: 12px 24px !important;
}
.guava-main-content > .animated-card > .el-card__body {
padding: 20px 24px;
}
.el-tabs--border-card {
@@ -143,4 +147,4 @@ module.exports = {
display: none;
}
</style>
</style>
@@ -1,16 +1,16 @@
<template>
<div>
<div class="panel panel-default mt20" style="border: none">
<div class="panel-heading" style="background: #fafafa;border:1px solid #ebeef5;border-bottom: none">
<h3 class="panel-title">
<div class="therapy-line-info">
<div class="line-info-section">
<div class="line-info-section-header">
<h3 class="line-info-section-title">
线路信息
</h3>
</div>
<el-descriptions :column="2" border class="viewTable">
<el-descriptions-item label="年度">{{ viewData.year }}</el-descriptions-item>
<el-descriptions-item label="编号">{{ viewData.serialNumber }}</el-descriptions-item>
<el-descriptions-item label="线路名称">{{ viewData.lineName }}</el-descriptions-item>
<el-descriptions-item label="区域性质">{{ viewData.regionalNature }}</el-descriptions-item>
<dl class="line-info-fields">
<div class="line-info-field"><dt>年度</dt><dd>{{ viewData.year }}</dd></div>
<div class="line-info-field"><dt>编号</dt><dd>{{ viewData.serialNumber }}</dd></div>
<div class="line-info-field"><dt>线路名称</dt><dd>{{ viewData.lineName }}</dd></div>
<div class="line-info-field"><dt>区域性质</dt><dd>{{ viewData.regionalNature }}</dd></div>
<!-- <el-descriptions-item label="最少参与教工">{{ viewData.minimumGroupSize }}</el-descriptions-item>-->
<!-- (校工会创建AND自由模式) OR (分工会创建) -->
<!-- <template v-if="(viewData.createMode === 2 && viewData.signUpMode === 2 ) || viewData.createMode === 1">-->
@@ -25,12 +25,12 @@
<!-- <el-descriptions-item label="预计费用(元)">{{ viewData.estimatedCost }}</el-descriptions-item>-->
<!-- <el-descriptions-item label="预计人数(含家属)">{{ viewData.estimatedFamilyNumbers }}</el-descriptions-item>-->
<!-- <el-descriptions-item label=""></el-descriptions-item>-->
</el-descriptions>
</dl>
</div>
<div class="panel panel-default mt20" style="border:none" v-if="showTravelTimePeriod">
<div class="panel-heading" style="background: #fafafa;border:1px solid #ebeef5;border-bottom: none">
<h3 class="panel-title">
<div class="line-info-section" v-if="showTravelTimePeriod">
<div class="line-info-section-header">
<h3 class="line-info-section-title">
出行时间段
</h3>
</div>
@@ -73,14 +73,15 @@
</el-descriptions>
</div>
-->
<div class="panel panel-default mt20" style="border-color: #ebeef5">
<div class="panel-heading" style="background: #fafafa;border-color: #ebeef5">
<h3 class="panel-title">
<div class="line-info-section">
<div class="line-info-section-header">
<h3 class="line-info-section-title">
线路内容
</h3>
</div>
<div class="panel-body">
<div v-html="viewData.content"></div>
<div class="line-info-content">
<div v-html="viewData.content" v-if="viewData.content"></div>
<div class="line-info-empty" v-else>暂无线路内容</div>
</div>
</div>
</div>
@@ -134,12 +135,113 @@ module.exports = {
}
</script>
<style scoped>
.viewTable .el-descriptions__table {
table-layout: fixed !important;
<style>
.therapy-line-info {
color: #303133;
font-size: 14px;
line-height: 1.6;
}
.viewTable .el-descriptions-item__cell {
text-align: center !important;
.therapy-line-info .line-info-section {
margin-bottom: 24px;
overflow: hidden;
border: 1px solid #ebeef5;
border-radius: 4px;
background: #fff;
}
.therapy-line-info .line-info-section:last-child {
margin-bottom: 0;
}
.therapy-line-info .line-info-section-header {
padding: 14px 20px;
border-bottom: 1px solid #ebeef5;
background: #fafafa;
}
.therapy-line-info .line-info-section-title {
margin: 0;
padding-left: 10px;
border-left: 3px solid var(--color-primary, #409eff);
color: #303133;
font-size: 16px;
font-weight: 600;
line-height: 22px;
}
.therapy-line-info .line-info-fields {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
margin: 0;
}
.therapy-line-info .line-info-field {
display: grid;
grid-template-columns: 120px minmax(0, 1fr);
min-width: 0;
}
.therapy-line-info .line-info-field:nth-child(n + 3) {
border-top: 1px solid #ebeef5;
}
.therapy-line-info .line-info-field:nth-child(2n) {
border-left: 1px solid #ebeef5;
}
.therapy-line-info .line-info-field dt,
.therapy-line-info .line-info-field dd {
margin: 0;
padding: 14px 16px;
line-height: 24px;
text-align: left;
overflow-wrap: anywhere;
}
.therapy-line-info .line-info-field dt {
border-right: 1px solid #ebeef5;
background: #fafafa;
color: #606266;
font-weight: 400;
}
.therapy-line-info .line-info-content {
padding: 20px 24px;
color: #303133;
line-height: 1.9;
overflow-wrap: anywhere;
overflow-x: auto;
}
.therapy-line-info .line-info-content p {
margin: 0 0 12px;
}
.therapy-line-info .line-info-content img,
.therapy-line-info .line-info-content video {
max-width: 100%;
height: auto;
}
.therapy-line-info .line-info-empty {
padding: 12px 0;
color: #909399;
text-align: center;
}
@media (max-width: 767px) {
.therapy-line-info .line-info-fields {
grid-template-columns: minmax(0, 1fr);
}
.therapy-line-info .line-info-field + .line-info-field {
border-top: 1px solid #ebeef5;
border-left: 0;
}
.therapy-line-info .line-info-content {
padding: 16px;
}
}
</style>
@@ -3,7 +3,7 @@
<div>
<el-tabs tab-position="top" v-model="activeName" v-loading="loading">
<el-tab-pane label="报名信息" name="1">
<div class="panel panel-default mt20" style="border: none">
<div class="panel panel-default" style="border: none">
<div class="panel-heading" style="background: #fafafa;border:1px solid #ebeef5;border-bottom: none">
<h3 class="panel-title">
本人信息
@@ -504,7 +504,9 @@ layout("/layouts/v4/baseLayout.html"){
// 页面加载时获取到正确的菜单
const pathname = window.location.pathname
if (!pathname.startsWith("/platform/v4/subApp")) {
const path = this.getMenuOwnerFullPath()
// 普惠疗休养子菜单含 mode 等参数,刷新时统一从模块根菜单恢复侧栏。
const path = pathname === "/platform/inclusiveTherapyV3" || pathname.startsWith("/platform/inclusiveTherapyV3/")
? "/platform/inclusiveTherapyV3" : this.getMenuOwnerFullPath()
this.$axios.post("/platform/sys/user/rootMenuByPath", {pathname: path}).then((res) => {
if (res.code === 0) {
this.setAppInfo(res.data)
@@ -38,13 +38,13 @@ layout("/layouts/platform.html"){
<el-input placeholder="请输入工号" clearable v-model="pageForm.loginName" style="width: 100%"></el-input>
</search-item>
<search-item label="所属单位">
<el-select placeholder="请选择所属单位" v-model="pageForm.unitName" clearable filterable>
<el-option v-for="item in unitNameOptions" :key="item" :label="item" :value="item"></el-option>
<el-select placeholder="全部" v-model="pageForm.unitName" clearable filterable>
<el-option v-for="item in unitNameOptions" :key="item.value" :label="item.label" :value="item.value"></el-option>
</el-select>
</search-item>
<search-item label="在职状态">
<el-select v-model="pageForm.userState" clearable filterable>
<el-option v-for="item in userStateOptions" :label="item" :value="item"></el-option>
<el-select placeholder="全部" v-model="pageForm.userState" clearable filterable>
<el-option v-for="item in userStateOptions" :key="item.value" :label="item.label" :value="item.value"></el-option>
</el-select>
</search-item>
<!-- 暂停用人方式筛选,保留查询控件供后续恢复。
@@ -55,10 +55,11 @@ layout("/layouts/platform.html"){
</search-item>
-->
<search-item label="人员类型">
<el-select v-model="pageForm.personType" clearable filterable>
<el-option v-for="item in personTypeOptions" :label="item" :value="item"></el-option>
<el-select placeholder="全部" v-model="pageForm.personType" clearable filterable>
<el-option v-for="item in personTypeOptions" :key="item.value" :label="item.label" :value="item.value"></el-option>
</el-select>
</search-item>
<el-button slot="actions" icon="el-icon-refresh-left" @click="resetSearch">重置</el-button>
</search>
</el-card>
@@ -125,6 +126,16 @@ layout("/layouts/platform.html"){
}
},
methods: {
resetSearch() {
this.$set(this.pageForm, "userName", "")
this.$set(this.pageForm, "loginName", "")
this.$set(this.pageForm, "unitName", "")
this.$set(this.pageForm, "userState", "")
this.$set(this.pageForm, "personType", "")
this.$set(this.pageForm, "preparedBy", "")
this.$set(this.pageForm, "pullTime", (this.pullTimeOptions[0] || {}).pullTime || "")
this.doSearch()
},
pull() {
// 拉取未结束时不再打开确认框或发送重复请求。
if (this.pullLoading) return
@@ -149,6 +160,7 @@ layout("/layouts/platform.html"){
.then((resp) => {
if (resp.code === 0) {
this.$message.success(resp.msg)
this.getSearchOptions()
this.getPullTimeOptions()
this.doSearch()
}
@@ -162,12 +174,24 @@ layout("/layouts/platform.html"){
.catch(() => {})
},
buildSearchOptions(values) {
const optionValues = new Set(values.map(value =>
value == null || /^(?:null)?$/i.test(value.trim()) ? "__EMPTY__" : value
))
const hasEmpty = optionValues.delete("__EMPTY__")
const options = Array.from(optionValues, value => ({ label: value, value }))
if (hasEmpty) {
options.push({ label: "空数据", value: "__EMPTY__" })
}
return options
},
getSearchOptions() {
this.$axios.post("/platform/sys/data/user/pull/searchOptions").then((resp) => {
if (resp.code === 0) {
this.unitNameOptions = resp.data.unitNames
this.userStateOptions = resp.data.userStates
this.personTypeOptions = resp.data.personTypes
this.unitNameOptions = this.buildSearchOptions(resp.data.unitNames)
this.userStateOptions = this.buildSearchOptions(resp.data.userStates)
this.personTypeOptions = this.buildSearchOptions(resp.data.personTypes)
this.preparedByOptions = resp.data.preparedBys
}
})
@@ -206,6 +230,7 @@ layout("/layouts/platform.html"){
if (resp.code === 0) {
this.$message.success(resp.msg)
this.pullTimeDialogVisible = false
this.getSearchOptions()
this.doSearch()
}
})
@@ -0,0 +1,82 @@
<!--#
layout("/layouts/platform.html"){
#-->
<div id="app" v-cloak>
<el-card shadow="never">
<search @search="doSearch">
<search-item label="工号">
<el-input placeholder="请输入工号" clearable v-model="pageForm.zgh" @keyup.enter.native="doSearch"></el-input>
</search-item>
<el-button slot="actions" icon="el-icon-refresh-left" :disabled="tableLoading" @click="resetSearch">重置</el-button>
</search>
</el-card>
<el-card shadow="never">
<table-tool :label="'数据中心人员数据(' + tableData.length + '条)'"></table-tool>
<el-table :data="tableData" v-loading="tableLoading" empty-text="暂无数据" border>
<el-table-column type="index" label="序号" width="70" fixed="left" :index="indexMethod"></el-table-column>
<el-table-column v-for="column in columns" :key="column.key" :label="column.label" min-width="160" show-overflow-tooltip>
<template slot-scope="{row}">{{formatValue(row[column.key] != null ? row[column.key] : row[column.alias])}}</template>
</el-table-column>
</el-table>
<!--#include("/layouts/pagination.html"){}#-->
</el-card>
</div>
<script nonce="${cspNonce!}">
new Vue({
el: "#app",
mixins: [initTableMixins],
data() {
return {
pageDataUrl: "/platform/sys/data/user/query/queryData",
pageForm: { zgh: "" },
columns: [
{ key: "ZGH", label: "工号", alias: "ID" },
{ key: "XM", label: "姓名", alias: "" },
{ key: "XBMC", label: "性别", alias: "XB" },
{ key: "SJHM", label: "手机号码", alias: "YDDH" },
{ key: "CSRQ", label: "出生日期", alias: "" },
{ key: "DQZTMC", label: "在职状态", alias: "DQZT" },
{ key: "LXRQ", label: "来校时间", alias: "LXNY" },
{ key: "YRFSDM", label: "人员类型", alias: "RYLX" },
{ key: "SZDW", label: "单位名称", alias: "" },
{ key: "SZDWDM", label: "单位编码", alias: "SZDWH" },
{ key: "ZZMMM", label: "政治面貌", alias: "" },
{ key: "MZDM", label: "民族", alias: "MZM" },
{ key: "ZGXLMC", label: "学历", alias: "" },
{ key: "ZGXWMC", label: "学位", alias: "" },
{ key: "ZYJSGWLBDMMC", label: "聘岗类型", alias: "" },
{ key: "ZYJSZWDMMC", label: "职称", alias: "" },
{ key: "BZLBDMMC", label: "编制类别", alias: "" },
{ key: "SFSJT", label: "是否双肩挑", alias: "" },
{ key: "SFZJLXDM", label: "证件类型", alias: "" },
{ key: "SFZJH", label: "证件号码", alias: "" },
{ key: "ZGXLDM", label: "最高学历代码", alias: "" },
{ key: "XWDM", label: "最高学位代码", alias: "" },
{ key: "BZLBDM", label: "编制类别代码", alias: "" },
{ key: "ZYJSGWLBDM", label: "聘岗类型代码", alias: "" },
{ key: "ZYJSZWDM", label: "专业技术职务代码", alias: "" },
{ key: "DQZTDM", label: "当前状态代码", alias: "" }
]
}
},
methods: {
resetSearch() {
this.pageForm.zgh = ""
this.doSearch()
},
formatValue(value) {
if (value == null) return ""
return typeof value === "object" ? JSON.stringify(value) : value
}
},
created() {
this.pageData()
}
})
</script>
<!--#
}
#-->
@@ -42,6 +42,7 @@ layout("/layouts/platform.html"){
<search-item label="人员类型">
<dict-select v-model="pageForm.personType" code="USER_PERSON_TYPE" style="width: 100%"></dict-select>
</search-item>
<el-button slot="actions" icon="el-icon-refresh-left" @click="resetSearch">重置</el-button>
</search>
</el-card>
@@ -173,6 +174,14 @@ layout("/layouts/platform.html"){
"member-all-change-info": MEMBER_ALL_CHANGE_INFO
},
methods: {
resetSearch() {
this.$set(this.pageForm, "userName", "")
this.$set(this.pageForm, "loginName", "")
this.$set(this.pageForm, "unitId", "")
this.$set(this.pageForm, "userState", "")
this.$set(this.pageForm, "personType", "")
this.doSearch()
},
// 更新单位数据
updateUnits() {
if (this.unitUpdateLoading || this.updateLoading) return
@@ -0,0 +1,257 @@
<!--#
layout("/layouts/platform.html"){
#-->
<style>
<!--#include("../fixedListLayout.css"){}#-->
.fund-log-dialog .el-dialog { width: 94%; max-width: 1800px; height: 86vh; display: flex; flex-direction: column; }
.fund-log-dialog .el-dialog__body { padding: 16px 24px 24px; flex: 1; min-height: 0; display: flex; flex-direction: column; }
.fund-log-dialog .el-pagination { margin-top: 16px; text-align: right; flex: 0 0 auto; }
.fund-edit-dialog .el-dialog { max-width: calc(100vw - 32px); }
.fund-edit-dialog .el-dialog__body { padding: 20px 28px; max-height: 65vh; overflow-y: auto; }
.fund-edit-dialog .el-dialog__footer { padding: 16px 28px; border-top: 1px solid #ebeef5; }
.fund-edit-dialog .el-alert { margin-bottom: 20px; }
.fund-edit-section { grid-column: 1 / -1; font-weight: 600; color: #303133; border-bottom: 1px solid #ebeef5; padding-bottom: 10px; }
.fund-edit-hint { color: #909399; font-size: 12px; line-height: 20px; }
.fund-edit-difference { grid-column: 1 / -1; background: #fdf6ec; color: #b88230; border-radius: 4px; padding: 10px 14px; line-height: 22px; }
.fund-edit-form { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 20px 24px; }
.fund-edit-form .el-form-item { margin-bottom: 0; min-width: 0; }
.fund-edit-form .el-form-item__label { padding-bottom: 6px; line-height: 24px; }
.fund-edit-form .el-select,
.fund-edit-form .el-date-editor,
.fund-edit-form .el-input-number { width: 100%; }
.fund-edit-form .fund-edit-wide { grid-column: 1 / -1; }
.fund-edit-amount { display: flex; align-items: center; flex-wrap: wrap; gap: 16px; }
.fund-edit-amount .el-input-number { flex: 1; min-width: 200px; }
.fund-edit-calculated { display: block; padding: 0 15px; background: #f5f7fa; border: 1px solid #e4e7ed; border-radius: 4px; font-size: 20px; font-weight: 600; color: #303133; }
@media (max-width: 600px) {
.fund-edit-form { grid-template-columns: minmax(0, 1fr); }
}
</style>
<div id="app" v-cloak>
<guava ref="guava"><template>
<div class="outlay-union-fixed-list-page">
<el-card class="outlay-union-fixed-query-card" shadow="never">
<search @search="doSearch">
<search-item label="年度"><el-date-picker v-model="query.year" type="year" value-format="yyyy" :clearable="false" @change="doSearch"></el-date-picker></search-item>
<search-item label="分工会"><el-select v-model="query.unionId" clearable filterable @change="doSearch"><el-option v-for="u in unionList" :key="u.id" :value="u.id" :label="u.name"></el-option></el-select></search-item>
<search-item v-if="tab==='special'" label="专项名称"><el-input v-model="query.projectName" clearable placeholder="请输入专项名称" @keyup.enter.native="doSearch" @clear="doSearch"></el-input></search-item>
</search>
</el-card>
<el-card class="outlay-union-fixed-list-card mt10" shadow="never">
<el-tabs class="outlay-union-summary-table" v-model="tab" @tab-click="changeTab">
<el-tab-pane label="年度基础经费" name="base"></el-tab-pane>
<el-tab-pane label="专项经费" name="special"></el-tab-pane>
<el-tab-pane label="下拨汇总" name="summary"></el-tab-pane>
<el-tab-pane label="历史季度记录" name="history"></el-tab-pane>
</el-tabs>
<table-tool label="年度经费下拨">
<el-button v-if="tab==='base'" size="small" type="primary" @click="generateVisible=true" :disabled="busy">生成年度基础经费</el-button>
<el-button v-if="tab==='special'" size="small" type="primary" @click="addSpecial" :disabled="busy">新增专项经费</el-button>
<el-button v-if="tab==='base' || tab==='special'" size="small" type="success" @click="batchConfirm" :loading="busy">一键下拨</el-button>
<el-button v-if="tab==='summary' || tab==='history'" size="small" type="primary" @click="doExport" :disabled="loading || busy">导出Excel</el-button>
</table-tool>
<el-table :key="tab" ref="tableRef" :data="rows" :height="tableHeight" v-loading="loading" border row-key="id">
<el-table-column v-if="tab!=='summary'" prop="year" label="年度" width="85"></el-table-column>
<el-table-column prop="unionName" label="分工会" min-width="170"></el-table-column>
<template v-if="tab==='base'">
<el-table-column prop="memberCount" label="统计人数" width="100"></el-table-column>
<el-table-column prop="standard" label="人均标准(元/年)" width="150"></el-table-column>
<el-table-column prop="calculatedMoney" label="计算金额(元)" width="140"></el-table-column>
</template>
<el-table-column v-if="tab==='special'" prop="projectName" label="专项名称" min-width="150"></el-table-column>
<template v-if="tab==='summary'">
<el-table-column prop="baseMoney" label="基础经费已下拨(元)" min-width="160"></el-table-column>
<el-table-column prop="specialMoney" label="专项经费已下拨(元)" min-width="160"></el-table-column>
<el-table-column prop="totalMoney" label="新流程合计下拨(元)" min-width="160"></el-table-column>
</template>
<template v-else-if="tab==='history'">
<el-table-column label="分配项目" min-width="140"><template slot-scope="{row}"><dict-tag :options="dict.type.OUTLAY_QUARTERLY" :value="row.quarterly"></dict-tag></template></el-table-column>
<el-table-column prop="allocateHeadMoney" label="分配前额度(元)" min-width="140"></el-table-column>
<el-table-column prop="allocateMoney" label="分配金额(元)" min-width="140"></el-table-column>
</template>
<template v-else>
<el-table-column prop="allocateMoney" label="实际下拨金额(元)" width="160"></el-table-column>
<el-table-column label="状态" width="100"><template slot-scope="{row}">{{Number(row.status)===1?'已下拨':'待下拨'}}</template></el-table-column>
<el-table-column prop="remark" label="说明" min-width="150" show-overflow-tooltip></el-table-column>
<el-table-column label="下拨时间" width="165"><template slot-scope="{row}">{{time(row.allocatedAt)}}</template></el-table-column>
<el-table-column prop="operatorName" label="操作人" width="100"></el-table-column>
<el-table-column label="最后操作时间" width="165"><template slot-scope="{row}">{{time(row.updatedAt)}}</template></el-table-column>
<el-table-column label="操作" fixed="right" width="220"><template slot-scope="{row}">
<el-button type="text" :disabled="busy" @click="edit(row)">{{Number(row.status)===1?'调整':'编辑'}}</el-button>
<el-button v-if="Number(row.status)===0" type="text" :disabled="busy" @click="confirm(row)">确认下拨</el-button>
<el-button type="text" @click="showLogs(row)">操作记录</el-button>
</template></el-table-column>
</template>
</el-table>
<div class="el-pagination-container" v-if="tab!=='summary'">
<el-pagination :current-page.sync="query.pageNumber" :page-size.sync="query.pageSize" :total="total" layout="total, sizes, prev, pager, next" @current-change="load" @size-change="doSearch"></el-pagination>
</div>
</el-card>
</div>
<el-dialog title="生成年度基础经费" :visible.sync="generateVisible" width="550px" :close-on-click-modal="false">
<el-alert title="按所选年度、分工会生成;已有记录不覆盖。人数沿用会员统计口径并保存快照,确认下拨前请核对。" type="info" :closable="false"></el-alert>
<el-form label-width="130px" class="mt10">
<el-form-item label="年度">{{query.year}}</el-form-item>
<el-form-item label="分工会">{{selectedUnionName}}</el-form-item>
<el-form-item label="人均标准(元/年)"><el-input-number v-model="standard" :min="0" :max="99999999.99" :precision="2"></el-input-number></el-form-item>
</el-form>
<span slot="footer"><el-button @click="generateVisible=false" :disabled="busy">取消</el-button><el-button type="primary" :loading="busy" @click="generate">生成</el-button></span>
</el-dialog>
<el-dialog :title="form.status===1?'调整已下拨经费':'编辑经费'" :visible.sync="editVisible" width="860px" class="fund-edit-dialog" top="6vh" :close-on-click-modal="false" :show-close="!busy">
<el-alert v-if="form.status===1" title="当前经费已下拨,保存后将按新旧金额差额调整年度预算,请填写调整原因。" type="warning" show-icon :closable="false"></el-alert>
<el-form class="fund-edit-form" label-position="top">
<div class="fund-edit-section">基础信息 · {{tab==='base'?'年度基础经费':'专项经费'}}</div>
<el-form-item label="年度"><el-date-picker v-model="form.year" type="year" value-format="yyyy" :clearable="false" :disabled="!isNew"></el-date-picker></el-form-item>
<el-form-item label="分工会"><el-select v-model="form.unionId" filterable :disabled="!isNew"><el-option v-for="u in unionList" :key="u.id" :value="u.id" :label="u.name"></el-option></el-select></el-form-item>
<div class="fund-edit-section">金额核算</div>
<template v-if="tab==='base'">
<el-form-item label="统计人数"><el-input :value="form.memberCount" readonly><template slot="append">人</template></el-input></el-form-item>
<el-form-item label="人均标准(元/年)"><el-input-number v-model="form.standard" :min="0" :max="99999999.99" :precision="2" :disabled="form.status===1"></el-input-number></el-form-item>
<el-form-item label="计算金额(元)"><span class="fund-edit-calculated">{{calculated}} <small>元</small></span><div class="fund-edit-hint">统计人数 × 人均年度标准</div></el-form-item>
</template>
<el-form-item v-else label="专项名称" class="fund-edit-wide" required><el-input v-model="form.projectName" maxlength="100" placeholder="如:一会一品、评优奖励"></el-input></el-form-item>
<el-form-item label="实际下拨金额(元)" :class="{'fund-edit-wide': tab!=='base'}" required><div class="fund-edit-amount"><el-input-number v-model="form.allocateMoney" :min="0" :max="99999999.99" :precision="2" controls-position="right"></el-input-number><el-button v-if="tab==='base' && form.status===0" type="text" @click="form.allocateMoney=Number(calculated)">使用计算金额</el-button></div></el-form-item>
<div v-if="form.status===1 || amountDifference!==0" class="fund-edit-difference">
<template v-if="form.status===1">原下拨金额:{{Number(originalAllocateMoney).toFixed(2)}} 元;本次调整:{{amountDifference>0?'+':''}}{{amountDifference.toFixed(2)}} 元。</template>
<template v-else>实际下拨金额较计算金额{{amountDifference>0?'增加':'减少'}} {{Math.abs(amountDifference).toFixed(2)}} 元,请填写原因。</template>
</div>
<el-form-item :label="form.status===1?'调整原因':'说明'" class="fund-edit-wide" :required="remarkRequired"><el-input v-model="form.remark" type="textarea" :rows="3" maxlength="1000" show-word-limit :placeholder="remarkRequired?'请填写本次金额调整的具体原因':'可填写经费用途或其他说明'"></el-input></el-form-item>
</el-form>
<span slot="footer"><el-button @click="editVisible=false" :disabled="busy">取消</el-button><el-button type="primary" :loading="busy" @click="save">{{form.status===1?'保存调整':'保存'}}</el-button></span>
</el-dialog>
<el-dialog title="经费操作记录" :visible.sync="logsVisible" width="94%" top="4vh" class="fund-log-dialog">
<el-table :data="logs" height="100%" style="flex: 1; min-height: 0;" border v-loading="logsLoading">
<el-table-column prop="action" label="操作" width="100"></el-table-column>
<el-table-column prop="operatorName" label="操作人" width="100"></el-table-column>
<el-table-column label="时间" width="165"><template slot-scope="{row}">{{time(row.createdAt)}}</template></el-table-column>
<el-table-column label="操作前" min-width="180"><template slot-scope="{row}">{{snapshot(row.beforeData)}}</template></el-table-column>
<el-table-column label="操作后" min-width="180"><template slot-scope="{row}">{{snapshot(row.afterData)}}</template></el-table-column>
<el-table-column prop="remark" label="说明" min-width="140"></el-table-column>
</el-table>
<el-pagination :current-page.sync="logPage" :page-size="10" :total="logTotal" layout="total,prev,pager,next" @current-change="loadLogs"></el-pagination>
</el-dialog>
</template></guava>
</div>
<script nonce="${cspNonce!}">
<!--#include("../fixedListLayout.js"){}#-->
new Vue({
el: '#app', store,
mixins: [OUTLAY_UNION_FIXED_LIST_MIXIN],
dicts: ['OUTLAY_QUARTERLY'],
data() { return {
tab: 'base', query: {year: this.$moment().format('YYYY'), unionId: '', projectName: '', pageNumber: 1, pageSize: 20},
unionList: [], rows: [], total: 0, loading: false, busy: false, requestSequence: 0,
standard: 800, generateVisible: false, editVisible: false, isNew: false, form: {}, originalAllocateMoney: 0,
logsVisible: false, logsLoading: false, logs: [], logPage: 1, logTotal: 0, logRecord: null
}},
computed: {
calculated() { return ((this.form.memberCount || 0) * (this.form.standard || 0)).toFixed(2) },
amountDifference() {
const amount=Number(this.form.allocateMoney)
if (!Number.isFinite(amount)) return 0
const reference=this.form.status===1?Number(this.originalAllocateMoney):(this.tab==='base'?Number(this.calculated):amount)
return Number((amount-reference).toFixed(2))
},
remarkRequired() { return this.form.status===1 || (this.tab==='base' && this.amountDifference!==0) },
selectedUnionName() { const u=this.unionList.find(u=>u.id===this.query.unionId); return u?u.name:'全部分工会' }
},
methods: {
time(value) { return value?this.$moment(Number(value)).format('YYYY-MM-DD HH:mm:ss'):'—' },
snapshot(value) {
if (!value) return '—'
try { const v=JSON.parse(value); return v.year+'年 / '+(v.memberCount==null?(v.projectName || ''):v.memberCount+'人 × '+v.standard+'元,计算 '+v.calculatedMoney+'元')+' / 实际 '+v.allocateMoney+'元 / '+(Number(v.status)===1?'已下拨':'待下拨') }
catch(e) { return value }
},
doExport() {
if (!this.query.year) { this.$message.warning('请选择年度'); return }
const params='type='+encodeURIComponent(this.tab)+'&year='+encodeURIComponent(this.query.year)+'&unionId='+encodeURIComponent(this.query.unionId || '')
window.open('/platform/outlay/outlayManage/unionAllocate/annual/doExport?'+params)
},
async request(action, data) {
const resp=await this.$axios.post('/platform/outlay/outlayManage/unionAllocate/annual/'+action, data)
if (resp.code!==0) { this.$message.error(resp.msg || '操作失败'); throw new Error(resp.msg) }
return resp
},
changeTab() {
this.rows=[]
this.total=0
this.doSearch()
this.updateOutlayUnionTableHeight()
},
doSearch() { this.query.pageNumber=1; this.load() },
async load() {
const sequence=++this.requestSequence
this.loading=true
try {
let resp
if (this.tab==='history') resp=await this.$axios.post('/platform/outlay/outlayManage/unionAllocate/pageData', this.query)
else resp=await this.request(this.tab==='summary'?'summary':'pageData', Object.assign({},this.query,{type:this.tab}))
if (sequence!==this.requestSequence) return
if (resp.code===0) { this.rows=this.tab==='summary'?(resp.data || []):(resp.data.list || []); this.total=this.tab==='summary'?0:resp.data.totalCount }
} catch(e) { if(sequence===this.requestSequence) this.rows=[] }
finally { if(sequence===this.requestSequence) { this.loading=false; this.updateOutlayUnionTableHeight() } }
},
async generate() {
this.busy=true
try { const resp=await this.request('generate',Object.assign({},this.query,{standard:this.standard})); this.$message.success(resp.msg); this.generateVisible=false; this.doSearch() }
catch(e) {} finally { this.busy=false }
},
edit(row) {
this.isNew=false
this.originalAllocateMoney=Number(row.allocateMoney)
this.form=Object.assign({},row,{year:String(row.year), status:Number(row.status), allocateMoney:Number(row.allocateMoney)})
if (this.tab==='base') Object.assign(this.form,{memberCount:Number(row.memberCount),standard:Number(row.standard)})
this.editVisible=true
},
async addSpecial() {
this.busy=true
try { const resp=await this.request('newId',{}); this.isNew=true; this.form={id:resp.data,year:this.query.year,unionId:this.query.unionId,projectName:'',allocateMoney:0,remark:'',status:0}; this.editVisible=true }
catch(e) {} finally { this.busy=false }
},
async save() {
if (!this.form.year || !this.form.unionId || this.form.allocateMoney==null) { this.$message.warning('请填写年度、分工会和金额'); return }
if (this.busy) return
if (!Number.isFinite(this.form.allocateMoney) || this.form.allocateMoney<0) { this.$message.warning('请输入有效的下拨金额'); return }
if (this.tab==='base' && (!Number.isFinite(this.form.standard) || this.form.standard<0)) { this.$message.warning('请输入有效的人均标准'); return }
if (this.remarkRequired && !(this.form.remark || '').trim()) { this.$message.warning('请填写金额调整原因'); return }
this.busy=true
const payload={type:this.tab,id:this.form.id,year:this.form.year,unionId:this.form.unionId,allocateMoney:this.form.allocateMoney,remark:this.form.remark,version:this.form.version}
if (this.tab==='base') payload.standard=this.form.standard
else payload.projectName=this.form.projectName
try { await this.request('save',payload); this.$message.success('保存成功'); this.editVisible=false; this.doSearch() }
catch(e) {} finally { this.busy=false }
},
async batchConfirm() {
if (this.busy) return
const params={type:this.tab,year:this.query.year,unionId:this.query.unionId || '',projectName:this.tab==='special'?(this.query.projectName || '').trim():''}
const typeName=this.tab==='base'?'年度基础经费':'专项经费'
const scope=this.selectedUnionName+(params.projectName?' / 专项名称包含:'+params.projectName:'')
if (!params.year) { this.$message.warning('请选择年度'); return }
this.busy=true
try {
await this.$confirm('确认一键下拨【'+params.year+'年 / '+scope+'】的全部待下拨'+typeName+'?范围包含所有分页,已下拨记录自动跳过,请先核对金额及历史下拨记录。','一键下拨',{type:'warning'})
const resp=await this.request('batchConfirm',params)
this.$message.success(resp.msg)
this.load()
} catch(e) {} finally { this.busy=false }
},
async confirm(row) {
try { await this.$confirm('确认向【'+row.unionName+'】下拨 '+row.allocateMoney+' 元?此操作将计入年度预算,请核对历史下拨记录。','确认下拨',{type:'warning'}) }
catch(e) { return }
this.busy=true
try { await this.request('confirm',{type:this.tab,id:row.id,version:row.version}); this.$message.success('下拨成功'); this.load() }
catch(e) {} finally { this.busy=false }
},
showLogs(row) { this.logRecord={id:row.id,type:this.tab}; this.logPage=1; this.logsVisible=true; this.loadLogs() },
async loadLogs() {
this.logsLoading=true
try { const resp=await this.request('logs',Object.assign({},this.logRecord,{pageNumber:this.logPage,pageSize:10})); this.logs=resp.data.list || []; this.logTotal=resp.data.totalCount }
catch(e) {} finally { this.logsLoading=false }
}
},
created() { this.$businessTool.listUnion().then(data=>{this.unionList=data}); this.load() }
})
</script>
<!--#
}
#-->
@@ -61,52 +61,19 @@ layout("/layouts/platform.html"){
{{formatMoney(row.beginMoney)}}
</template>
</el-table-column>
<el-table-column align="center" header-align="center" :label="pageForm.year + '年会费收入'">
<el-table-column
align="center"
header-align="center"
label="1-4月会费"
prop="feeJanApr"
min-width="120">
<template v-slot="{row}">
{{formatMoney(row.feeJanApr)}}
</template>
</el-table-column>
<el-table-column
align="center"
header-align="center"
label="5-8月会费"
prop="feeMayAug"
min-width="120">
<template v-slot="{row}">
{{formatMoney(row.feeMayAug)}}
</template>
</el-table-column>
<el-table-column
align="center"
header-align="center"
label="9-12月会费"
prop="feeSepDec"
min-width="120">
<template v-slot="{row}">
{{formatMoney(row.feeSepDec)}}
</template>
</el-table-column>
<el-table-column align="center" header-align="center" label="年度基础经费" prop="baseMoney" min-width="120">
<template v-slot="{row}">{{formatMoney(row.baseMoney)}}</template>
</el-table-column>
<el-table-column align="center" header-align="center" label="专项经费" prop="specialMoney" min-width="120">
<template v-slot="{row}">{{formatMoney(row.specialMoney)}}</template>
</el-table-column>
<el-table-column align="center" header-align="center" label="合计下拨" prop="incomeMoney" min-width="120">
<template v-slot="{row}">{{formatMoney(row.incomeMoney)}}</template>
</el-table-column>
<el-table-column
align="center"
header-align="center"
label="评优奖励"
prop="awardMoney"
min-width="120">
<template v-slot="{row}">
{{formatMoney(row.awardMoney)}}
</template>
</el-table-column>
<el-table-column
align="center"
header-align="center"
label="1-12月支出"
label="年度支出"
prop="usedMoney"
min-width="120">
<template v-slot="{row}">
@@ -141,19 +108,16 @@ layout("/layouts/platform.html"){
<el-table-column align="center" header-align="center" label="年初数" prop="beginMoney" min-width="120">
<template v-slot="{row}">{{summaryValue('beginMoney', row)}}</template>
</el-table-column>
<el-table-column align="center" header-align="center" label="1-4月会费" prop="feeJanApr" min-width="120">
<template v-slot="{row}">{{summaryValue('feeJanApr', row)}}</template>
<el-table-column align="center" header-align="center" label="年度基础经费" prop="baseMoney" min-width="120">
<template v-slot="{row}">{{summaryValue('baseMoney', row)}}</template>
</el-table-column>
<el-table-column align="center" header-align="center" label="5-8月会费" prop="feeMayAug" min-width="120">
<template v-slot="{row}">{{summaryValue('feeMayAug', row)}}</template>
<el-table-column align="center" header-align="center" label="专项经费" prop="specialMoney" min-width="120">
<template v-slot="{row}">{{summaryValue('specialMoney', row)}}</template>
</el-table-column>
<el-table-column align="center" header-align="center" label="9-12月会费" prop="feeSepDec" min-width="120">
<template v-slot="{row}">{{summaryValue('feeSepDec', row)}}</template>
<el-table-column align="center" header-align="center" label="合计下拨" prop="incomeMoney" min-width="120">
<template v-slot="{row}">{{summaryValue('incomeMoney', row)}}</template>
</el-table-column>
<el-table-column align="center" header-align="center" label="评优奖励" prop="awardMoney" min-width="120">
<template v-slot="{row}">{{summaryValue('awardMoney', row)}}</template>
</el-table-column>
<el-table-column align="center" header-align="center" label="本年累计支出" prop="usedMoney" min-width="120">
<el-table-column align="center" header-align="center" label="年度支出" prop="usedMoney" min-width="120">
<template v-slot="{row}">{{summaryValue('usedMoney', row)}}</template>
</el-table-column>
<el-table-column align="center" header-align="center" label="经费余额" prop="remainMoney" min-width="120">
@@ -55,7 +55,7 @@ layout("/layouts/platform.html"){
</el-select>
</el-form-item>
</el-descriptions-item>-->
<el-descriptions-item label="证明人">
<!-- <el-descriptions-item label="证明人">
<el-form-item prop="certifierUserId" label="证明人">
<el-select
style="width: 100%"
@@ -75,7 +75,7 @@ layout("/layouts/platform.html"){
</el-option>
</el-select>
</el-form-item>
</el-descriptions-item>
</el-descriptions-item> -->
<el-descriptions-item label="慰问类型">
<el-form-item prop="type" label="慰问类型">
<el-select v-model="formData.type" @change="typeChange" style="width: 100%"
@@ -112,14 +112,14 @@ layout("/layouts/platform.html"){
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="收款账户">
<el-descriptions-item label="收款账户" v-if="!['A', 'D'].includes(formData.typeCode)">
<el-form-item prop="bankCardNumber" label="收款账户">
<el-input maxlength="20" v-model="formData.bankCardNumber" placeholder="请填写收款账户"
<el-input maxlength="30" v-model="formData.bankCardNumber" placeholder="请填写银行卡号或对公账户号"
></el-input>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="户名">
<el-descriptions-item label="户名" v-if="!['A', 'D'].includes(formData.typeCode)">
<el-form-item prop="bankUserName" label="户名">
<el-input maxlength="20" v-model="formData.bankUserName"
placeholder="请填写户名"
@@ -127,7 +127,7 @@ layout("/layouts/platform.html"){
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="开户行" >
<el-descriptions-item label="开户行" v-if="!['A', 'D'].includes(formData.typeCode)">
<el-form-item prop="bankOfDeposit" label="开户行">
<el-input maxlength="20" v-model="formData.bankOfDeposit"
placeholder="请填写开户行"
@@ -173,10 +173,12 @@ layout("/layouts/platform.html"){
</template>
</el-descriptions>
<el-descriptions :column="3" border>
<el-descriptions-item label="申请事由" :span="3">
<el-form-item prop="remark" label="申请事由">
<el-input maxlength="500" v-model="formData.remark" placeholder="请填写申请事由"
type="textarea" :autosize="{ minRows: 4, maxRows: 8}"></el-input>
type="textarea" :rows="3" resize="none"></el-input>
</el-form-item>
</el-descriptions-item>
@@ -219,6 +221,15 @@ layout("/layouts/platform.html"){
new Vue({
el: "#app",
store,
components: {
ElDatePicker: {
extends: ELEMENT.DatePicker,
mounted() {
// 手动输入触发 change 前初始化日期面板,避免 picker 尚未创建。
if (!this.picker) this.mountPicker()
}
}
},
data() {
return {
bizId: GetQueryString("bizId"),
@@ -229,7 +240,10 @@ layout("/layouts/platform.html"){
payUserId: [{ required: true, message: "必填", trigger: ["change", "blur"] }],
type: [{ required: true, message: "必填", trigger: ["change", "blur"] }],
way: [{ required: true, message: "必填", trigger: ["change", "blur"] }],
money: [{ required: true, message: "必填", trigger: ["change", "blur"] }],
money: [
{ required: true, message: "请填写慰问金额", trigger: ["change", "blur"] },
{ validator: (rule, value, callback) => callback(this.validateMoney(value) ? undefined : new Error("慰问金额须大于0且不超过10000元,最多两位小数")), trigger: ["change", "blur"] }
],
occurTime: [{ required: true, message: "必填", trigger: ["change", "blur"] }],
child: [{ required: true, message: "必填", trigger: ["change", "blur"] }],
hospital: [{ required: true, message: "必填", trigger: ["change", "blur"] }],
@@ -238,14 +252,20 @@ layout("/layouts/platform.html"){
hospitalBy: [{ required: true, message: "必填", trigger: ["change", "blur"] }],
deadImmediateFamily: [{ required: true, message: "必填", trigger: ["change", "blur"] }],
remark: [{ required: true, message: "必填", trigger: ["change", "blur"] }],
files: [{ required: true, message: "必填", trigger: ["change", "blur"] }],
files: [{ required: true, type: "array", min: 1, max: 5, message: "请上传1至5个附件", trigger: ["change", "blur"] }],
signature: [{ required: true, message: "必填", trigger: ["change", "blur"] }],
handlerUserId: [{ required: true, message: "必填", trigger: ["change", "blur"] }],
certifierUserId: [{ required: true, message: "必填", trigger: ["change", "blur"] }],
bankCardNumber: [{ required: true, message: "必填", trigger: ["change", "blur"] }],
// certifierUserId: [{ required: true, message: "必填", trigger: ["change", "blur"] }],
bankCardNumber: [
{ required: true, message: "请填写银行卡号或对公账户号", trigger: ["change", "blur"] },
{ pattern: /^[0-9]{6,30}$/, message: "收款账户须为6至30位数字(银行卡号或对公账户号)", trigger: ["change", "blur"] }
],
bankUserName: [{ required: true, message: "必填", trigger: ["change", "blur"] }],
bankOfDeposit: [{ required: true, message: "必填", trigger: ["change", "blur"] }],
thisYearHospitalizationNum: [{ required: true, message: "必填", trigger: ["change", "blur"] }],
thisYearHospitalizationNum: [
{ required: true, message: "必填", trigger: ["change", "blur"] },
{ type: "integer", min: 0, max: 10000, message: "住院次数须为0至10000的整数", trigger: ["change", "blur"] }
],
leaveHospitalTime: [{ required: true, message: "必填", trigger: ["change", "blur"] }],
hospitalizationTime: [{ required: true, message: "必填", trigger: ["change", "blur"] }],
},
@@ -259,6 +279,9 @@ layout("/layouts/platform.html"){
}
},
methods: {
validateMoney(value) {
return /^(0|[1-9][0-9]*)(\.[0-9]{1,2})?$/.test(String(value)) && Number(value) > 0 && Number(value) <= 10000
},
createRemoteMethod(options) {
return (keyword) => {
this.selectQueryUser(keyword, options)
@@ -43,7 +43,7 @@ const condolenceInfo = {
<template v-for="task in doneTasks">
<div class="mt10">
<div class="process-title">{{ task.displayName }}</div>
<div class="process-title">{{ ({'分工会审核':'一级审核','校工会预审':'二级审核','校工会审核':'三级审核'}[task.displayName] || task.displayName) }}</div>
<el-descriptions border class="flow-task-form" :column="3" :key="task.id"
v-if="task.ext.isFirstTaskNode">
<el-descriptions-item label="申请用户">{{ task.ext.initiatorName
@@ -65,6 +65,9 @@ const condolenceInfo = {
<dict-tag :options="dict.type.PROCESS_TASK_SUBMIT_TYPE"
:value="task.ext.submitType"></dict-tag>
</el-descriptions-item>
<el-descriptions-item label="审批签字" :span="3" v-if="task.taskFormData && task.taskFormData.sign">
<el-image :src="task.taskFormData.sign" style="height: 80px" fit="contain"></el-image>
</el-descriptions-item>
<el-descriptions-item label="办理意见" v-if="!task.ext.isFirstTaskNode">{{
task.taskFormData.opinion }}
</el-descriptions-item>
@@ -37,12 +37,12 @@ const basicForm = {
<el-radio-button :label="false">不上传</el-radio-button>
</el-radio-group>
</el-form-item>-->
<!-- <el-form-item label="是否上传附件" prop="isUploadFile">-->
<!-- <el-radio-group v-model="formData.isUploadFile">-->
<!-- <el-radio-button :label="true">是</el-radio-button>-->
<!-- <el-radio-button :label="false">否</el-radio-button>-->
<!-- </el-radio-group>-->
<!-- </el-form-item>-->
<el-form-item label="是否上传附件" prop="isUploadFile">
<el-radio-group v-model="formData.isUploadFile">
<el-radio-button :label="true">是</el-radio-button>
<el-radio-button :label="false">否</el-radio-button>
</el-radio-group>
</el-form-item>
<el-form-item label="上传附件说明" prop="uploadFileDesc" v-if="formData.isUploadFile">
<el-input v-model="formData.uploadFileDesc" maxlength="50" clearable placeholder="请填写上传附件说明"></el-input>
</el-form-item>
@@ -17,7 +17,7 @@
@change="modeChange"
:disabled="formData.id" style="width: 100%">
<el-option label="本人申请" value="1"></el-option>
<el-option v-if="$auth.hasRoleOr('SYSADMIN, SCHOOL_UNION_ADMIN, BRANCH_UNION_CHAIRMAN, BRANCH_UNION_OPERATOR')"
<el-option v-if="$auth.hasRoleOr('BRANCH_UNION_CHAIRMAN')"
label="替他人申请" value="2"></el-option>
</el-select>
</el-form-item>
@@ -263,6 +263,9 @@
methods: {
// 查询受助人
queryRecipients(key) {
if (String(this.formData.mode) !== "2" || !this.$auth.hasRoleOr('BRANCH_UNION_CHAIRMAN')) {
return
}
this.$axios.get("/platform/difficultHelp/apply/queryRecipients", {
key
}).then(res => {
@@ -417,10 +420,10 @@
this.$set(this.formData, 'proxyLoginName', user.loginname)
this.$set(this.formData, 'mode', "1")
this.$set(this.formData, 'sex', user.sex)
this.$set(this.formData, 'unitId', user.unit.id)
this.$set(this.formData, 'unitName', user.unit.name)
this.$set(this.formData, 'unionId', user.union.id)
this.$set(this.formData, 'unionName', user.union.name)
this.$set(this.formData, 'unitId', (user.unit || {}).id || user.unitId || null)
this.$set(this.formData, 'unitName', (user.unit || {}).name || '')
this.$set(this.formData, 'unionId', (user.union || {}).id || (user.unit || {}).unionId || null)
this.$set(this.formData, 'unionName', (user.union || {}).name || '')
this.$set(this.formData, 'monthlyIncome', null)
this.$set(this.formData, 'birthday', user.birthday)
this.$set(this.formData, 'mobile', user.mobile)
@@ -1,8 +1,9 @@
<!--#
layout("/layouts/platform.html"){
#-->
<div id="app">
<el-card shadow="never" v-if="isShow">
<div id="app" v-cloak>
<el-card shadow="never" v-if="pageLoading" v-loading="pageLoading" element-loading-text="正在加载申请信息" style="min-height: 300px"></el-card>
<el-card shadow="never" v-else-if="isShow">
<snaker-start slot="header" label="困难帮扶申请" define_key="KNBF"></snaker-start>
<el-form :model="formData" ref="formRef" :rules="formRules" label-width="0" label-suffix=":" class="flow-task-form">
<el-descriptions :column="3" border>
@@ -15,7 +16,7 @@ layout("/layouts/platform.html"){
<el-form-item prop="mode">
<el-select v-model="formData.mode" placeholder="申请模式" @change="modeChange" style="width: 100%">
<el-option label="本人申请" value="1"></el-option>
<el-option v-if="$auth.hasRoleOr('SYSADMIN, SCHOOL_UNION_ADMIN, BRANCH_UNION_CHAIRMAN, BRANCH_UNION_OPERATOR')"
<el-option v-if="canApplyForOthers"
label="替他人申请" value="2"></el-option>
</el-select>
</el-form-item>
@@ -26,7 +27,7 @@ layout("/layouts/platform.html"){
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="受补助人">
<el-form-item prop="userName">
<el-form-item prop="userId">
<template v-if="formData.mode == 2">
<el-select :remote-method="queryRecipients"
@change="userChange" clearable filterable
@@ -51,7 +52,7 @@ layout("/layouts/platform.html"){
</el-descriptions-item>
<el-descriptions-item label="身份证号" :span="2">
<el-form-item prop="idCard">
<el-input maxlength="20" clearable placeholder="请填写身份证号"
<el-input clearable placeholder="请填写身份证号"
v-model="formData.idCard" maxlength="18"></el-input>
</el-form-item>
</el-descriptions-item>
@@ -84,7 +85,7 @@ layout("/layouts/platform.html"){
<el-descriptions-item label="手机号码">
<el-form-item prop="mobile">
<el-input maxlength="11" clearable placeholder="请填写手机号码"
v-model="formData.mobile" maxlength="11"></el-input>
v-model="formData.mobile"></el-input>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="家庭年总收入(万元)">
@@ -103,6 +104,7 @@ layout("/layouts/platform.html"){
<el-input-number
v-model="formData.homeNumber"
:min="1"
:precision="0"
:step="1"
style="width: 100%"
placeholder="请填写家庭人数">
@@ -113,7 +115,7 @@ layout("/layouts/platform.html"){
<el-form-item prop="homeAddress">
<el-input clearable
style="width: 100%"
v-model="formData.homeAddress"
v-model="formData.homeAddress" maxlength="200"
placeholder="请填写家庭住址">
</el-input>
</el-form-item>
@@ -132,7 +134,7 @@ layout("/layouts/platform.html"){
<!-- </el-descriptions-item>-->
<el-descriptions-item label="银行卡号" >
<el-form-item prop="bankCardNum">
<el-input maxlength="20" clearable placeholder="请填写银行卡号"
<el-input maxlength="19" clearable placeholder="请填写银行卡号"
v-model="formData.bankCardNum"></el-input>
</el-form-item>
</el-descriptions-item>
@@ -151,7 +153,7 @@ layout("/layouts/platform.html"){
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="生活致困原因" :span="3">
<el-descriptions-item label="生活致困原因" :span="3">
<el-form-item prop="reason">
<el-input maxlength="500" :autosize="{ minRows: 5, maxRows: 10}"
placeholder="请简述生活致困原因"
@@ -193,8 +195,8 @@ layout("/layouts/platform.html"){
<template slot-scope="{row,$index}">
<el-form-item label-width="0"
:prop="'familyList.'+$index+'.relation'"
:rules="[{required:true,message:'必填',trigger:['change','blur']}]">
<el-input v-model="row.relation" placeholder="请填写与本人关系" clearable></el-input>
:rules="textRules('与本人关系', 50)">
<el-input v-model="row.relation" maxlength="50" placeholder="请填写与本人关系" clearable></el-input>
</el-form-item>
</template>
</el-table-column>
@@ -202,8 +204,8 @@ layout("/layouts/platform.html"){
<template slot-scope="{row,$index}">
<el-form-item label-width="0"
:prop="'familyList.'+$index+'.name'"
:rules="[{required:true,message:'必填',trigger:['change','blur']}]">
<el-input v-model="row.name" placeholder="请填写姓名" clearable></el-input>
:rules="textRules('姓名', 100)">
<el-input v-model="row.name" maxlength="100" placeholder="请填写姓名" clearable></el-input>
</el-form-item>
</template>
</el-table-column>
@@ -211,9 +213,9 @@ layout("/layouts/platform.html"){
<template slot-scope="{row,$index}">
<el-form-item label-width="0"
:prop="'familyList.'+$index+'.age'"
:rules="[{required:true,message:'必填',trigger:['change','blur']}]">
:rules="[{required:true,type:'integer',min:1,max:100,message:'年龄须为1至100的整数',trigger:['change','blur']}]">
<el-input-number v-model="row.age" placeholder="年龄" :min="1"
:max="100" :step="1" style="width: 100%" clearable></el-input-number>
:max="100" :precision="0" :step="1" style="width: 100%" clearable></el-input-number>
</el-form-item>
</template>
</el-table-column>
@@ -221,8 +223,8 @@ layout("/layouts/platform.html"){
<template slot-scope="{row,$index}">
<el-form-item label-width="0"
:prop="'familyList.'+$index+'.homeUnit'"
:rules="[{required:true,message:'必填',trigger:['change','blur']}]">
<el-input v-model="row.homeUnit" placeholder="请填写工作单位" clearable></el-input>
:rules="textRules('工作单位', 200)">
<el-input v-model="row.homeUnit" maxlength="200" placeholder="请填写工作单位" clearable></el-input>
</el-form-item>
</template>
</el-table-column>
@@ -230,9 +232,9 @@ layout("/layouts/platform.html"){
<template slot-scope="{row,$index}">
<el-form-item label-width="0"
:prop="'familyList.'+$index+'.yearIncome'"
:rules="[{required:true,message:'必填',trigger:['change','blur']}]">
:rules="[{validator:validateIncome,required:true,trigger:['change','blur']}]">
<el-input-number v-model="row.yearIncome" placeholder="年收入"
:min="0" :step="1" style="width: 100%" clearable></el-input-number>
:min="0" :precision="2" :step="1" style="width: 100%" clearable></el-input-number>
</el-form-item>
</template>
</el-table-column>
@@ -240,8 +242,8 @@ layout("/layouts/platform.html"){
<template slot-scope="{row,$index}">
<el-form-item label-width="0"
:prop="'familyList.'+$index+'.remarks'"
:rules="[{required:true,message:'必填',trigger:['change','blur']}]">
<el-input v-model="row.remarks" placeholder="请填写备注" clearable></el-input>
:rules="textRules('备注', 500)">
<el-input v-model="row.remarks" maxlength="500" placeholder="请填写备注" clearable></el-input>
</el-form-item>
</template>
</el-table-column>
@@ -292,7 +294,7 @@ layout("/layouts/platform.html"){
</el-card>
<div v-else>
<el-card class="box-card" style="height: 92vh" shadow="never">
<el-result icon="warning" title="温馨提醒" subTitle="">
<el-result icon="warning" title="温馨提醒" sub-title="">
<template slot="extra">
<span v-if="blockMessage">{{blockMessage}}</span>
<span v-else>抱歉,当前时间不能申请,可申请时间为{{time}}。</span>
@@ -312,6 +314,7 @@ layout("/layouts/platform.html"){
bizId: GetQueryString("bizId"),
taskId: GetQueryString("taskId"),
isShow: false,
pageLoading: true,
time: '',
blockMessage: '',
formData: {
@@ -320,30 +323,55 @@ layout("/layouts/platform.html"){
applyCount: '1',
},
formRules: {
proxyUserName: [{required: true, message: '必填', trigger: ['blur', 'change']}],
proxyLoginName: [{required: true, message: '必填', trigger: ['blur', 'change']}],
sex: [{required: true, message: '请填写性别', trigger: ['blur', 'change']}],
userName: [{required: true, message: '请填写受补助人', trigger: ['blur', 'change']}],
unitName: [{required: true, message: '请填写所属单位', trigger: ['blur', 'change']}],
proxyUserName: this.textRules('填写人姓名', 100),
proxyLoginName: this.textRules('填写人工号', 100),
mode: [{required: true, type: 'enum', enum: ['1', '2'], message: '请选择申请模式', trigger: ['blur', 'change']}],
sex: [{required: true, type: 'enum', enum: ['男', '女'], message: '请选择性别', trigger: ['blur', 'change']}],
userId: [{required: true, message: '请选择受补助人', trigger: ['blur', 'change']}],
unitName: this.textRules('所属单位', 500),
unionName: [{required: true, message: '请填写所属工会', trigger: ['blur', 'change']}],
homeAddress: [{required: true, message: '请填写家庭住址', trigger: ['blur', 'change']}],
mobile: [{required: true, message: '请填写手机号码', trigger: ['blur', 'change']}],
idCard: [{required: true, message: '请填写身份证号', trigger: ['blur', 'change']}],
bankCardNum: [{required: true, message: '请填写收款账户卡号', trigger: ['blur', 'change']}],
homeAddress: this.textRules('家庭住址', 200),
mobile: [
{required: true, message: '请填写手机号码', trigger: ['blur', 'change']},
{pattern: /^1[3-9]\d{9}$/, message: '请输入正确的11位手机号码', trigger: ['blur', 'change']}
],
idCard: [{validator: (rule, value, callback) => {
const result = this.isValidIdCard(value || '')
callback(result.status === 0 ? new Error(result.msg) : undefined)
}, required: true, trigger: ['blur', 'change']}],
bankCardNum: [{validator: (rule, value, callback) => {
const result = this.validateCard(value || '')
callback(result.status === 0 ? new Error(result.msg) : undefined)
}, required: true, trigger: ['blur', 'change']}],
bankUserName: [{required: true, message: '请填写户名', trigger: ['blur', 'change']}],
bankOfDeposit: [{required: true, message: '请填写开户行', trigger: ['blur', 'change']}],
position: [{required: true, message: '请填写职务', trigger: ['blur', 'change']}],
officialCapacity: [{required: true, message: '请填写职称', trigger: ['blur', 'change']}],
subsidyStandards: [{required: true, message: '请选择困难类型', trigger: ['blur', 'change']}],
reason: [{required: true, message: '请填写申请原因', trigger: ['blur', 'change']}],
sign: [{required: true, message: '请签字', trigger: ['blur', 'change']}]
bankOfDeposit: this.textRules('开户行', 30),
position: this.textRules('职务', 20),
officialCapacity: this.textRules('职称', 20),
homeIncome: [{validator: this.validateIncome, required: true, trigger: ['blur', 'change']}],
homeNumber: [{required: true, type: 'integer', min: 1, message: '家庭人数须为大于零的整数', trigger: ['blur', 'change']}],
subsidy: this.textRules('补助类型', 500),
subsidyStandards: this.textRules('困难类型', 500),
reason: this.textRules('生活致困原因', 500),
sign: [{required: true, whitespace: true, message: '请完成签字', trigger: ['blur', 'change']}],
},
// 替他人申请相关
subsidizedList: []
}
},
computed: {
canApplyForOthers() {
return this.$auth.hasRoleOr('SYSADMIN, SCHOOL_UNION_ADMIN, BRANCH_UNION_CHAIRMAN, BRANCH_UNION_OPERATOR')
}
},
methods: {
textRules(label, max) {
return [{required: true, whitespace: true, max, message: '请填写' + label + ',且不超过' + max + '个字符', trigger: ['blur', 'change']}]
},
validateIncome(rule, value, callback) {
const valid = typeof value === 'number' && Number.isFinite(value) && value >= 0 && /^\d+(\.\d{1,2})?$/.test(String(value))
callback(valid ? undefined : new Error('收入须为不小于零的数字,最多保留两位小数'))
},
// 保存
onSave() {
this.$confirm("您确定保存吗?", "提示", {
@@ -362,24 +390,13 @@ layout("/layouts/platform.html"){
// 提交
async onSubmit() {
this.$refs.formRef.validate().then((valid) => {
this.$refs.formRef.validate().catch(() => false).then((valid) => {
if (valid) {
this.$confirm("您确定要提交吗?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
}).then(() => {
const result = this.isValidIdCard(this.formData.idCard)
if (result.status === 0) {
this.$message.warning(result.msg)
return
}
const bankRes = this.validateCard(this.formData.bankCardNum)
if (bankRes.status === 0) {
this.$message.warning(bankRes.msg)
return;
}
this.$axios.post('/platform/difficultHelp/apply/submit', {
data: JSON.stringify(this.formData)
}).then(res => {
@@ -394,7 +411,7 @@ layout("/layouts/platform.html"){
},
async onFinishTask() {
this.$refs.formRef.validate().then((valid) => {
this.$refs.formRef.validate().catch(() => false).then((valid) => {
if (valid) {
this.$confirm("您确定要提交吗?", "提示", {
confirmButtonText: "确定",
@@ -402,17 +419,6 @@ layout("/layouts/platform.html"){
type: "warning"
}).then(() => {
const result = this.isValidIdCard(this.formData.idCard)
if (result.status === 0) {
this.$message.warning(result.msg)
return
}
const bankRes = this.validateCard(this.formData.bankCardNum)
if (bankRes.status === 0) {
this.$message.warning(bankRes.msg)
return;
}
this.$axios.post('/platform/difficultHelp/apply/submitAgain', {
data: JSON.stringify(this.formData),
taskId: GetQueryString("taskId")
@@ -429,6 +435,9 @@ layout("/layouts/platform.html"){
// 查询受助人
queryRecipients(key) {
if (String(this.formData.mode) !== "2" || !this.canApplyForOthers) {
return
}
this.$axios.post("/platform/difficultHelp/apply/queryRecipients", {
key
}).then(res => {
@@ -438,10 +447,12 @@ layout("/layouts/platform.html"){
})
},
findOne(id) {
this.$axios.post('/platform/difficultHelp/mine/findOne', { id }).then(res => {
return this.$axios.post('/platform/difficultHelp/mine/findOne', { id }).then(res => {
if (res.code === 0) {
this.formData = res.data
this.queryRecipients(res.data.loginName)
} else {
throw new Error(res.msg || '申请信息加载失败,请刷新页面重试')
}
})
},
@@ -459,6 +470,9 @@ layout("/layouts/platform.html"){
this.$set(this.formData, 'birthday', user.birthday)
this.$set(this.formData, 'mobile', user.mobile)
this.$set(this.formData, 'idCard', user.idCard)
this.$set(this.formData, 'position', user.position || '')
this.$set(this.formData, 'officialCapacity', user.officialCapacity || '')
this.$set(this.formData, 'homeAddress', user.homeAddress || '')
} else {
this.$set(this.formData, 'userId', null)
@@ -471,6 +485,10 @@ layout("/layouts/platform.html"){
this.$set(this.formData, 'unionName', null)
this.$set(this.formData, 'birthday', null)
this.$set(this.formData, 'mobile', null)
this.$set(this.formData, 'idCard', null)
this.$set(this.formData, 'position', '')
this.$set(this.formData, 'officialCapacity', '')
this.$set(this.formData, 'homeAddress', '')
}
},
// 申请模式
@@ -486,15 +504,17 @@ layout("/layouts/platform.html"){
this.$set(this.formData, 'proxyLoginName', user.loginname)
this.$set(this.formData, 'mode', "1")
this.$set(this.formData, 'sex', user.sex)
this.$set(this.formData, 'unitId', user.unit.id)
this.$set(this.formData, 'unitName', user.unit.name)
this.$set(this.formData, 'unionId', user.union.id)
this.$set(this.formData, 'unionName', user.union.name)
this.$set(this.formData, 'unitId', (user.unit || {}).id || user.unitId || null)
this.$set(this.formData, 'unitName', (user.unit || {}).name || '')
this.$set(this.formData, 'unionId', (user.union || {}).id || (user.unit || {}).unionId || null)
this.$set(this.formData, 'unionName', (user.union || {}).name || '')
this.$set(this.formData, 'yearIncome', null)
this.$set(this.formData, 'birthday', user.birthday)
this.$set(this.formData, 'idCard', user.idCard)
this.$set(this.formData, 'mobile', user.mobile)
this.$set(this.formData, 'homeAddress', user.homeAddress)
this.$set(this.formData, 'position', user.position || '')
this.$set(this.formData, 'officialCapacity', user.professionalTitle || '')
this.$set(this.formData, 'subsidyStandards', null)
this.$set(this.formData, 'reason', null)
this.$set(this.formData, 'remarks', null)
@@ -602,10 +622,10 @@ layout("/layouts/platform.html"){
return { status: 200, msg: "卡号有效。" };
},
async getIsCanPlay() {
this.$axios.post('/platform/difficultHelp/apply/getIsCanPlay').then(res => {
return this.$axios.post('/platform/difficultHelp/apply/getIsCanPlay').then(res => {
if (res.code === 0) {
// 新增申请进入页面时,优先校验当前登录人本年度是否已经申请过,已申请则直接拦截新增。
if (!this.bizId && res.data.hasCurrentYearApply) {
if (!this.bizId && res.data.hasCurrentYearApply && !this.canApplyForOthers) {
this.isShow = false
this.$set(this, 'blockMessage', '抱歉,您本年度已申请困难帮扶,不能重复申请。')
} else {
@@ -616,16 +636,25 @@ layout("/layouts/platform.html"){
if (res.data.applyCount !== null && res.data.applyCount !== undefined && res.data.applyCount !== 0) {
this.$set(this.formData, 'applyCount', res.data.applyCount)
}
} else {
throw new Error(res.msg || '申请资格加载失败,请刷新页面重试')
}
})
}
},
async created() {
await this.getIsCanPlay();
if (this.bizId) {
this.findOne(this.bizId)
} else {
this.modeChange("1")
try {
await this.getIsCanPlay();
if (this.bizId) {
await this.findOne(this.bizId)
} else {
this.modeChange("1")
}
} catch (error) {
this.isShow = false
this.blockMessage = error.message || '申请信息加载失败,请刷新页面重试'
} finally {
this.pageLoading = false
}
}
})
@@ -24,6 +24,12 @@ const INFO = {
<el-descriptions-item label="申请次数" >{{ 1 }}</el-descriptions-item>
<el-descriptions-item label="家庭住址" :span="2">{{ viewData.homeAddress }}</el-descriptions-item>
<el-descriptions-item label="补助类型">
<dict-tag :options="dict.type.DIFFICULT_SUBSIDY_TYPE" :value="viewData.subsidy"></dict-tag>
</el-descriptions-item>
<el-descriptions-item label="困难类型">
<dict-tag :options="dict.type.DIFFICULT_TYPE" :value="viewData.subsidyStandards"></dict-tag>
</el-descriptions-item>
<el-descriptions-item label="家庭主要成员(在一起生活的直系亲属)经济收入情况" :span="3">
@@ -64,7 +70,7 @@ const INFO = {
<template v-for="task in doneTasks">
<div class="task-panel mt10">
<div class="process-title">{{ task.displayName }}</div>
<div class="process-title">{{ ({'分工会审核':'一级审核','二级党组织审核':'二级审核','校工会审核':'三级审核'}[task.displayName] || task.displayName) }}</div>
<el-descriptions border class="flow-task-form" :column="3" :key="task.id"
v-if="task.ext.isFirstTaskNode">
<el-descriptions-item label="申请用户">{{ task.ext.initiatorName
@@ -106,7 +112,7 @@ const INFO = {
</div>
`,
store,
dicts: ["PROCESS_TASK_SUBMIT_TYPE"],
dicts: ["PROCESS_TASK_SUBMIT_TYPE", "DIFFICULT_SUBSIDY_TYPE", "DIFFICULT_TYPE"],
data() {
return {
viewData: {},
@@ -1,4 +1,4 @@
<div id="difficult_help_branch_union_approval_form">
<div id="difficult_help_first_approval_form">
<el-form :model="formData" ref="formRef" label-width="0" label-suffix=":" class="flow-task-form">
<el-form-item label="审批意见" prop="tf_opinion" :rules="[{required:true,message:'必填',trigger:['change','blur']}]">
<user-opinion-textarea v-model="formData.tf_opinion"></user-opinion-textarea>
@@ -9,7 +9,7 @@
<script nonce="${cspNonce!}">
new Vue({
el: "#difficult_help_branch_union_approval_form",
el: "#difficult_help_first_approval_form",
data() {
return {
businessId: GetQueryString("businessId"),
@@ -64,16 +64,16 @@ layout("/layouts/platform.html"){
size="small"></enum-tag>
</template>
</el-table-column>
<el-table-column label="操作" fixed="right" width="300px">
<el-table-column label="操作" fixed="right" width="300px" class-name="difficult-help-mine-actions">
<template slot-scope="{row}">
<el-button @click="openView(row)" size="mini" type="primary">查看</el-button>
<el-button v-if="row.taskKey === 'startTask' || !row.instanceId" @click="onEdit(row)" size="mini" type="primary">
<el-button v-if="row.createdBy === $store.state.user.id && (row.taskKey === 'startTask' || !row.instanceId)" @click="onEdit(row)" size="mini" type="primary">
编辑
</el-button>
<el-button v-if="row.canRevoke" @click="onRevoke(row)" size="mini" type="danger">撤回
<el-button v-if="row.createdBy === $store.state.user.id && row.canRevoke" @click="onRevoke(row)" size="mini" type="danger">撤回
</el-button>
<el-button @click="doExportApply(row)" size="mini" type="primary">打印</el-button>
<el-button v-if="row.taskKey === 'startTask' || !row.instanceId" @click="onDelete(row.id)" size="mini" type="danger">删除</el-button>
<el-button v-if="row.createdBy === $store.state.user.id && row.instanceState == 20" @click="doExportApply(row)" size="mini" type="primary">导出</el-button>
<el-button v-if="row.createdBy === $store.state.user.id && (row.taskKey === 'startTask' || !row.instanceId)" @click="onDelete(row.id)" size="mini" type="danger">删除</el-button>
</template>
</el-table-column>
</el-table>
@@ -87,6 +87,18 @@ layout("/layouts/platform.html"){
</div>
<style nonce="${cspNonce!}">
#app .difficult-help-mine-actions .cell {
display: flex;
align-items: center;
justify-content: center;
gap: 10px;
}
#app .difficult-help-mine-actions .cell > .el-button {
margin-left: 0;
}
</style>
<script nonce="${cspNonce!}">
<!--#include("../common/info.js"){}#-->
@@ -165,11 +177,11 @@ layout("/layouts/platform.html"){
if (this.$auth.hasRoleOr('SYSADMIN, SCHOOL_UNION_ADMIN')) {
this.units = await this.$businessTool.listUnit(this.pageForm.unionId)
} else {
this.units = await this.$businessTool.listUnit(this.$store.state.user.union.id)
this.units = await this.$businessTool.listUnit((this.$store.state.user.union || {}).id || this.pageForm.unionId)
}
},
doExportApply(row) {
this.$downLoad('/platform/difficultHelp/reading/doExportApply?id=' + row.id + '&print=true')
this.$downLoad('/platform/difficultHelp/reading/doExportApply?id=' + row.id + '&print=false')
}
},
async created() {
@@ -177,7 +189,7 @@ layout("/layouts/platform.html"){
if (this.$auth.hasRoleOr('SYSADMIN, SCHOOL_UNION_ADMIN')) {
this.unions = await this.$businessTool.listUnion()
} else {
this.unions = await this.$businessTool.listUnion(this.$store.state.user.union.id)
this.unions = await this.$businessTool.listUnion((this.$store.state.user.union || {}).id)
}
}
})
@@ -1,4 +1,4 @@
<div id="difficult_help_branch_union_approval_form">
<div id="difficult_help_second_approval_form">
<el-form :model="formData" ref="formRef" label-width="0" label-suffix=":" class="flow-task-form">
<el-form-item label="审批意见" prop="tf_opinion" :rules="[{required:true,message:'必填',trigger:['change','blur']}]">
<user-opinion-textarea v-model="formData.tf_opinion"></user-opinion-textarea>
@@ -9,7 +9,7 @@
<script nonce="${cspNonce!}">
new Vue({
el: "#difficult_help_branch_union_approval_form",
el: "#difficult_help_second_approval_form",
data() {
return {
businessId: GetQueryString("businessId"),
@@ -1,4 +1,4 @@
<div id="difficult_help_school_union_approval_form">
<div id="difficult_help_third_approval_form">
<el-form :model="formData" ref="formRef" label-width="0" label-suffix=":" class="flow-task-form">
<el-form-item label="审核金额" prop="tf_money" :rules="[{required:true,message:'必填',trigger:['change','blur']}]">
<el-input-number placeholder="请输入金额" v-model="formData.tf_money"></el-input-number>
@@ -12,7 +12,7 @@
<script nonce="${cspNonce!}">
new Vue({
el: "#difficult_help_school_union_approval_form",
el: "#difficult_help_third_approval_form",
data() {
return {
businessId: GetQueryString("businessId"),
@@ -256,7 +256,7 @@ layout("/layouts/platform.html"){
approveSingleItem(item) {
return new Promise((resolve, reject) => {
this.$axios.post("/platform/difficultHelp/schoolUnionApproval/save", {
this.$axios.post("/platform/difficultHelp/thirdApproval/save", {
data: JSON.stringify({
...this.formData,
id: item.id
@@ -301,7 +301,7 @@ layout("/layouts/platform.html"){
cancelButtonText: "取消",
type: "warning"
}).then(() => {
this.$axios.post("/platform/difficultHelp/schoolUnionApproval/save", {
this.$axios.post("/platform/difficultHelp/thirdApproval/save", {
data: JSON.stringify({
...this.formData,
})
@@ -381,7 +381,7 @@ layout("/platform/zhgh/staffbenefit/therapyRecuperation/layouts/platform.html"){
</guava>
<el-dialog
<el-dialog :append-to-body="true"
title="提示"
:visible.sync="dialogVisible"
width="50%">
@@ -418,7 +418,7 @@ layout("/platform/zhgh/staffbenefit/therapyRecuperation/layouts/platform.html"){
</span>
</el-dialog>
<el-dialog
<el-dialog :append-to-body="true"
title="修改信息"
:visible.sync="editVisible"
:close-on-click-modal="false"
@@ -548,7 +548,7 @@ layout("/platform/zhgh/staffbenefit/therapyRecuperation/layouts/platform.html"){
<script>
const vue = new Vue({
el: '#app',
mixins: [initTableMixins],
mixins: [therapyTableMixins],
data() {
return {
unionDisabled: false,
@@ -290,7 +290,7 @@ layout("/platform/zhgh/staffbenefit/therapyRecuperation/layouts/platform.html"){
</guava>
<el-dialog
<el-dialog :append-to-body="true"
title="提示"
:visible.sync="dialogVisible"
width="50%">
@@ -327,7 +327,7 @@ layout("/platform/zhgh/staffbenefit/therapyRecuperation/layouts/platform.html"){
</span>
</el-dialog>
<el-dialog
<el-dialog :append-to-body="true"
title="修改信息"
:visible.sync="editVisible"
:close-on-click-modal="false"
@@ -434,7 +434,7 @@ layout("/platform/zhgh/staffbenefit/therapyRecuperation/layouts/platform.html"){
<script>
const vue = new Vue({
el: '#app',
mixins: [initTableMixins],
mixins: [therapyTableMixins],
data() {
return {
unionDisabled: false,
@@ -375,7 +375,7 @@ layout("/platform/zhgh/staffbenefit/therapyRecuperation/layouts/platform.html"){
</template>
</guava>
<el-dialog
<el-dialog :append-to-body="true"
title="提示"
:visible.sync="dialogVisible"
width="50%">
@@ -412,7 +412,7 @@ layout("/platform/zhgh/staffbenefit/therapyRecuperation/layouts/platform.html"){
</span>
</el-dialog>
<el-dialog
<el-dialog :append-to-body="true"
title="修改信息"
:visible.sync="editVisible"
:close-on-click-modal="false"
@@ -541,7 +541,7 @@ layout("/platform/zhgh/staffbenefit/therapyRecuperation/layouts/platform.html"){
<script>
const vue = new Vue({
el: '#app',
mixins: [initTableMixins],
mixins: [therapyTableMixins],
data() {
return {
unionDisabled: false,
@@ -347,7 +347,7 @@ layout("/platform/zhgh/staffbenefit/therapyRecuperation/layouts/platform.html"){
<base-info ref="viewBaseInfo"></base-info>
</template>
<el-dialog
<el-dialog :append-to-body="true"
title="目的地导入"
:visible.sync="importVisible"
:close-on-click-modal="false"
@@ -398,7 +398,7 @@ layout("/platform/zhgh/staffbenefit/therapyRecuperation/layouts/platform.html"){
<script>
new Vue({
el: '#app',
mixins: [initTableMixins],
mixins: [therapyTableMixins],
components: {
'base-info': httpVueLoader('/components/staffbenefit/therapyRecuperation/BaseManageInfo.vue')
},
@@ -14,6 +14,42 @@ layout("/platform/zhgh/staffbenefit/therapyRecuperation/layouts/platform.html"){
.el-radio {
margin-right: 0;
}
#app .search .line-year-range-input {
width: 230px;
max-width: 100%;
}
.line-year-range-panel .year-range-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 12px;
}
.line-year-range-panel .year-range-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 8px;
}
.line-year-range-panel .year-range-grid .el-button {
margin: 0;
}
.line-year-range-panel .year-range-grid .in-range {
color: var(--color-primary, #409eff);
background: #ecf5ff;
}
.line-year-range-panel .year-range-footer {
display: flex;
justify-content: space-between;
align-items: center;
margin-top: 12px;
color: #909399;
font-size: 12px;
}
</style>
<div id="app" v-cloak>
@@ -22,37 +58,32 @@ layout("/platform/zhgh/staffbenefit/therapyRecuperation/layouts/platform.html"){
<div class="search">
<div class="search-item">
<div class="search-item-label">年度范围:</div>
<div class="search-item-option" style="display:flex;align-items:center;gap:10px">
<el-date-picker
v-model="pageForm.startYear"
type="year"
class="picker-year"
format="yyyy"
style="flex:1;width:0;min-width:0"
value-format="yyyy"
@change="handleChangeYear"
>
</el-date-picker>
<span style="flex-shrink:0">至</span>
<el-date-picker
v-model="pageForm.endYear"
type="year"
class="picker-year"
format="yyyy"
style="flex:1;width:0;min-width:0"
value-format="yyyy"
@change="handleChangeYear"
>
</el-date-picker>
<!--<el-date-picker
style="width: 100%"
@change="doSearch"
placeholder="选择年度"
type="year"
v-model="pageForm.year"
value-format="yyyy">
</el-date-picker>-->
<div class="search-item-option">
<el-popover v-model="yearRangeVisible" placement="bottom-start" trigger="click"
width="320" popper-class="line-year-range-panel" @show="openYearRange">
<div class="year-range-header">
<el-button type="text" icon="el-icon-d-arrow-left" aria-label="前十年"
@click="yearRangeDecade -= 10"></el-button>
<span>{{yearRangeDecade}} - {{yearRangeDecade + 11}}</span>
<el-button type="text" icon="el-icon-d-arrow-right" aria-label="后十年"
@click="yearRangeDecade += 10"></el-button>
</div>
<div class="year-range-grid">
<el-button v-for="offset in 12" :key="yearRangeDecade + offset - 1" size="small"
:type="yearRangeStart === yearRangeDecade + offset - 1 ? 'primary' : 'default'"
:class="{'in-range': !yearRangeStart && pageForm.startYear && pageForm.endYear && yearRangeDecade + offset - 1 >= Number(pageForm.startYear) && yearRangeDecade + offset - 1 <= Number(pageForm.endYear)}"
@click="selectRangeYear(yearRangeDecade + offset - 1)">
{{yearRangeDecade + offset - 1}}
</el-button>
</div>
<div class="year-range-footer">
<span>{{yearRangeStart ? '已选 ' + yearRangeStart + ',请选择结束年份' : '请选择开始年份'}}</span>
<el-button type="text" @click="clearYearRange">清空</el-button>
</div>
<el-input slot="reference" class="line-year-range-input" readonly
prefix-icon="el-icon-date" placeholder="开始年份 至 结束年份"
:value="pageForm.startYear || pageForm.endYear ? (pageForm.startYear || '开始年份') + ' 至 ' + (pageForm.endYear || '结束年份') : ''"></el-input>
</el-popover>
</div>
</div>
<div class="search-item">
@@ -483,7 +514,7 @@ layout("/platform/zhgh/staffbenefit/therapyRecuperation/layouts/platform.html"){
<line-info ref="viewLineInfo"></line-info>
</template>
<el-dialog :close-on-click-modal="false"
<el-dialog :append-to-body="true" :close-on-click-modal="false"
:visible.sync="lineUnionSetTimeDialog"
title="查看详情"
top="50px"
@@ -499,7 +530,7 @@ layout("/platform/zhgh/staffbenefit/therapyRecuperation/layouts/platform.html"){
</el-dialog>
<el-dialog
<el-dialog :append-to-body="true"
title="路线导入"
:visible.sync="importVisible"
:close-on-click-modal="false"
@@ -549,7 +580,7 @@ layout("/platform/zhgh/staffbenefit/therapyRecuperation/layouts/platform.html"){
</span>
</el-dialog>
<el-dialog
<el-dialog :append-to-body="true"
title="导入"
:visible.sync="lineImportVisible"
:close-on-click-modal="false"
@@ -606,7 +637,7 @@ layout("/platform/zhgh/staffbenefit/therapyRecuperation/layouts/platform.html"){
const vue = new Vue({
el: '#app',
mixins: [initTableMixins],
mixins: [therapyTableMixins],
components: {
'line-info': httpVueLoader('/components/staffbenefit/therapyRecuperation/LineInfo.vue')
},
@@ -658,6 +689,9 @@ layout("/platform/zhgh/staffbenefit/therapyRecuperation/layouts/platform.html"){
}
return {
yearRangeVisible: false,
yearRangeStart: null,
yearRangeDecade: Math.floor(new Date().getFullYear() / 10) * 10,
tableColumns: [
{label: '年度', prop: 'year', sortable: true},
{label: '线路名称', prop: 'lineName', sortable: true, width: '200'},
@@ -851,7 +885,10 @@ layout("/platform/zhgh/staffbenefit/therapyRecuperation/layouts/platform.html"){
cancelButtonText: '取消',
type: 'warning'
}).then(async () => {
window.top.location.href = '/platform/inclusiveTherapyV3/lineXghSelect?mode=2'
const targetMenu = window.parent.document.querySelector('#sidebar-menu a[data-pjax][href="/platform/inclusiveTherapyV3/lineXghSelect?mode=2"]')
if (targetMenu) {
targetMenu.click()
}
}).catch(() => {
this.$refs.guava.index()
this.pageData()
@@ -1062,6 +1099,28 @@ layout("/platform/zhgh/staffbenefit/therapyRecuperation/layouts/platform.html"){
this.lineImportLoading = false
}
},
openYearRange() {
this.yearRangeStart = null
const year = Number(this.pageForm.startYear) || new Date().getFullYear()
this.yearRangeDecade = Math.floor(year / 10) * 10
},
selectRangeYear(year) {
if (this.yearRangeStart === null) {
this.yearRangeStart = year
return
}
this.pageForm.startYear = String(Math.min(this.yearRangeStart, year))
this.pageForm.endYear = String(Math.max(this.yearRangeStart, year))
this.yearRangeStart = null
this.yearRangeVisible = false
this.handleChangeYear()
},
clearYearRange() {
this.pageForm.startYear = ''
this.pageForm.endYear = ''
this.yearRangeStart = null
this.yearRangeVisible = false
},
handleChangeYear() {
if (this.pageForm.startYear && this.pageForm.endYear) {
if (this.pageForm.startYear > this.pageForm.endYear) {
@@ -93,7 +93,7 @@ layout("/platform/zhgh/staffbenefit/therapyRecuperation/layouts/platform.html"){
<!--#include("/layouts/pagination.html"){}#-->
</el-card>
<el-dialog :close-on-click-modal="false" :title="editDialogTitle" :visible.sync="editDialogVisible"
<el-dialog :append-to-body="true" :close-on-click-modal="false" :title="editDialogTitle" :visible.sync="editDialogVisible"
width="60%">
<el-form :model="formData" :rules="rules" label-width="120px" ref="form">
<el-row :gutter="20">
@@ -225,7 +225,7 @@ layout("/platform/zhgh/staffbenefit/therapyRecuperation/layouts/platform.html"){
</template>
<el-dialog
<el-dialog :append-to-body="true"
title="旅行社导入"
:visible.sync="importVisible"
:close-on-click-modal="false"
@@ -281,7 +281,7 @@ layout("/platform/zhgh/staffbenefit/therapyRecuperation/layouts/platform.html"){
<script>
const vue = new Vue({
el: '#app',
mixins: [initTableMixins],
mixins: [therapyTableMixins],
data() {
return {
tableColumns: [
@@ -1,50 +1,13 @@
<!--# if(!@com.budwk.app.zhgh.staffbenefit.therapyRecuperation.support.TherapyContext.isEmbeddedPage()){ #-->
<!--# layout("/layouts/platform.html"){ #-->
<iframe src="${@com.budwk.app.zhgh.staffbenefit.therapyRecuperation.support.TherapyContext.getEmbeddedPageUrl(),escape}" title="普惠疗休养" style="width:100%;height:calc(100vh - 100px);border:0;background:#fff"></iframe>
<!--# } } else { #-->
<!doctype html>
<html lang="zh-CN"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1,viewport-fit=cover">
<title>普惠疗休养</title>
<script src="${base!}/assets/platform/plugins/vue/vue.js"></script>
<script src="${base!}/assets/platform/plugins/jquery/jquery.js"></script>
<script src="${base!}/assets/platform/plugins/vue-http-loader/httpVueLoader.js"></script>
<script src="${base!}/assets/platform/plugins/moment/moment.min.js"></script>
<script src="${base!}/assets/platform/plugins/axios/axios.js"></script>
<script>const APP_DOMAIN = location.origin; const FILE_DOMAIN = location.origin;</script>
<link rel="stylesheet" href="${base!}/assets/platform/css/root.css">
<link rel="stylesheet" href="${base!}/assets/platform/plugins/element-ui/lib/theme-chalk/index.css">
<link rel="stylesheet" href="${base!}/assets/platform/fonts/font-awesome.min.css">
<link rel="stylesheet" href="${base!}/assets/platform/fonts/themify-icons.css">
<link rel="stylesheet" href="${base!}/assets/platform/plugins/viewerjs/viewer.css">
<script src="${base!}/assets/platform/plugins/viewerjs/viewer.js"></script>
<link rel="stylesheet" href="${base!}/assets/staffbenefit/therapyRecuperation/css/common.css">
<link rel="stylesheet" href="${base!}/assets/staffbenefit/therapyRecuperation/css/main.css">
<link rel="stylesheet" href="${base!}/assets/staffbenefit/therapyRecuperation/css/elmain.css">
<link rel="stylesheet" href="${base!}/assets/staffbenefit/therapyRecuperation/css/panel.css">
<link rel="stylesheet" href="${base!}/assets/platform/plugins/element-ui/lib/theme-chalk/index_custom.css">
<link rel="stylesheet" href="${base!}/assets/platform/plugins/element-ui/lib/theme-chalk/override.css">
<link rel="stylesheet" href="${base!}/assets/platform/css/common.css">
<script src="${base!}/assets/platform/plugins/element-ui/lib/index.js"></script>
<script>
ELEMENT.Dialog.props.closeOnClickModal.default = false;
ELEMENT.Dialog.props.top.default = '50px';
ELEMENT.Table.props.border.default = true;
ELEMENT.TableColumn.props.headerAlign.default = 'center';
ELEMENT.TableColumn.props.align.default = 'center';
Vue.use(ELEMENT, {zIndex: 20000});
</script>
<script src="${base!}/assets/platform/plugins/wangEditor4/wangEditor.js"></script>
<script src="${base!}/assets/platform/plugins/sortablejs/sortable.min.js"></script>
<script src="${base!}/assets/platform/plugins/vuedraggable/vuedraggable.umd.min.js"></script>
<!--#
layout("/layouts/platform.html"){
#-->
<link rel="stylesheet" href="${base!}/assets/staffbenefit/therapyRecuperation/css/desktop.css">
<script src="${base!}/assets/platform/plugins/echarts/echarts.min.js"></script>
<script src="${base!}/assets/platform/plugins/g2plot/g2plot.min.js"></script>
<script src="${base!}/assets/staffbenefit/therapyRecuperation/basics.js"></script>
<script src="${base!}/assets/staffbenefit/therapyRecuperation/v.js"></script>
<script src="${base!}/assets/staffbenefit/therapyRecuperation/component.js"></script>
<script src="${base!}/assets/staffbenefit/therapyRecuperation/initTableMixins.js"></script>
<script src="${base!}/assets/staffbenefit/therapyRecuperation/compat.js"></script>
<script src="${base!}/assets/platform/js/util/commonUtil.js"></script>
<script src="${base!}/assets/platform/js/tool/businessTool.js"></script>
<script>
Vue.prototype.$axios = commonUtil.axiosService();
Vue.prototype.$businessTool = businessTool;
@@ -63,6 +26,7 @@ Vue.directive('auth', {inserted(el, binding) {
if (!requested.some(role => roles.includes(role))) el.parentNode.removeChild(el);
}});
</script>
<style>body{margin:0;padding:12px;box-sizing:border-box;background:#f6f6f6} [v-cloak]{display:none}</style>
</head><body>${layoutContent}</body></html>
<!--# } #-->
<div class="therapy-desktop">${layoutContent}</div>
<!--#
}
#-->
@@ -26,6 +26,287 @@ layout("/platform/zhgh/staffbenefit/therapyRecuperation/layouts/platform.html"){
.el-table-container {
padding-top: 0;
}
#app .branch-query-filters .query-condition-row {
display: flex;
align-items: flex-start;
gap: 12px;
}
#app .branch-query-filters .query-condition-label {
flex: 0 0 90px;
color: #606266;
text-align: right;
line-height: 32px;
}
#app .branch-query-filters .query-condition-options {
display: flex;
flex: 1;
min-width: 0;
flex-wrap: wrap;
align-items: center;
gap: 10px;
}
#app .branch-query-filters .query-condition-options .el-tag {
margin: 0;
cursor: pointer;
}
#app .branch-query-filters .query-row-content > .el-row:empty {
display: none;
}
#app .branch-query-filters .query-row-content > .el-row > .query-hint {
display: block;
padding: 10px 14px;
margin: 0;
border-radius: 4px;
background: #fdf6ec;
color: #b36b13;
line-height: 24px;
overflow-wrap: anywhere;
}
#app .branch-query-filters .query-row-content > .el-row > .query-hint > span {
display: inline;
color: inherit;
text-align: left;
}
#app .branch-query-filters .query-hint-row {
margin-left: 0;
margin-top: 12px;
}
#app .branch-query-filters .query-extra-fields {
display: flex;
flex-wrap: wrap;
gap: 12px 0;
}
#app .branch-query-filters .query-extra-fields > .el-col {
display: flex;
align-items: center;
gap: 12px;
padding-right: 24px;
}
#app .branch-query-filters .query-extra-fields > .el-col > span {
flex: 0 0 90px;
color: #606266;
text-align: right;
}
#app .branch-query-filters .query-extra-fields > .el-col > .el-select {
flex: 1;
width: 0 !important;
min-width: 0;
}
@media (max-width: 767px) {
#app .branch-query-filters .query-hint-row {
margin-left: 0;
}
#app .branch-query-filters .query-extra-fields > .el-col {
width: 100%;
padding-right: 0;
}
}
#app .branch-query-filters .query-route-choice {
display: flex;
align-items: center;
gap: 12px;
}
#app .branch-query-filters .query-route-choice > span {
flex-shrink: 0;
}
#app .branch-query-filters .query-route-choice > .el-select {
flex: 1;
min-width: 0;
width: 0 !important;
}
#app .branch-query-filters .query-route-hint {
padding-left: 20px;
color: #b36b13;
font-size: 13px;
line-height: 20px;
}
.therapy-desktop #app .branch-query-filters .query-row-content > .el-row > .query-route-hint > span:first-child {
flex: 1 1 auto;
min-width: 0;
color: inherit;
text-align: left;
white-space: normal;
overflow-wrap: anywhere;
}
@media (max-width: 767px) {
#app .branch-query-filters .query-route-choice,
#app .branch-query-filters .query-route-hint { width: 100%; }
#app .branch-query-filters .query-route-hint { padding: 10px 0 0; }
}
.therapy-query-view-dialog,
.therapy-query-edit-dialog {
display: flex;
flex-direction: column;
max-width: 1440px;
max-height: calc(100vh - 100px);
margin-top: 50px !important;
}
.therapy-query-view-dialog > .el-dialog__header,
.therapy-query-view-dialog > .el-dialog__footer,
.therapy-query-edit-dialog > .el-dialog__header,
.therapy-query-edit-dialog > .el-dialog__footer {
flex-shrink: 0;
}
.therapy-query-view-dialog > .el-dialog__body,
.therapy-query-edit-dialog > .el-dialog__body {
min-height: 0;
padding: 20px 24px;
overflow: auto;
}
.therapy-query-view-dialog .panel {
margin: 0 0 20px;
overflow: hidden;
border-radius: 4px;
}
.therapy-query-view-dialog .panel-heading {
padding: 12px 16px;
}
.therapy-query-view-dialog .panel-title {
margin: 0;
color: #303133;
font-size: 15px;
font-weight: 600;
line-height: 24px;
}
.therapy-query-view-dialog .panel-body {
padding: 16px;
}
.therapy-query-view-dialog .el-descriptions-item__label,
.therapy-query-edit-dialog .el-descriptions-item__label {
color: #606266;
font-weight: 400;
line-height: 24px;
}
.therapy-query-view-dialog .el-descriptions-item__content,
.therapy-query-edit-dialog .el-descriptions-item__content {
padding: 12px 16px;
line-height: 24px;
}
.therapy-query-edit-dialog .el-form-item__label {
color: #606266;
font-weight: 400;
}
.therapy-query-edit-dialog .therapy-edit-family > .el-form-item__label {
display: block;
float: none;
width: auto !important;
margin-bottom: 12px;
text-align: left;
line-height: 24px;
}
.therapy-query-view-dialog .viewTable .el-descriptions__table {
table-layout: fixed;
}
.therapy-query-view-dialog .viewTable .el-descriptions-item__label {
width: 120px;
white-space: nowrap;
}
.therapy-query-view-dialog .el-descriptions-item__content,
.therapy-query-edit-dialog .el-descriptions-item__content {
overflow-wrap: anywhere;
}
.therapy-query-edit-dialog .therapy-edit-family > .el-form-item__content {
margin-left: 0 !important;
line-height: normal;
}
.therapy-query-view-dialog .therapy-family-list,
.therapy-query-edit-dialog .therapy-family-list {
display: grid;
gap: 16px;
}
.therapy-query-view-dialog .therapy-family-card,
.therapy-query-edit-dialog .therapy-family-card {
min-width: 0;
overflow: hidden;
border: 1px solid #ebeef5;
border-radius: 4px;
}
.therapy-query-view-dialog .therapy-family-title,
.therapy-query-edit-dialog .therapy-family-title {
padding: 12px 16px;
background: #fafafa;
color: #303133;
font-weight: 500;
overflow-wrap: anywhere;
}
.therapy-query-view-dialog .therapy-family-details .el-descriptions__table,
.therapy-query-edit-dialog .therapy-family-details .el-descriptions__table {
table-layout: fixed;
}
.therapy-query-view-dialog .therapy-family-details .el-descriptions-item__label,
.therapy-query-edit-dialog .therapy-family-details .el-descriptions-item__label {
width: 100px;
white-space: nowrap;
}
@media (max-width: 1000px) {
.therapy-query-view-dialog,
.therapy-query-edit-dialog {
width: 94% !important;
}
.therapy-query-edit-dialog .el-form > .el-row > .el-col {
width: 100%;
}
.therapy-query-view-dialog .el-descriptions__row,
.therapy-query-edit-dialog .therapy-family-details .el-descriptions__row {
display: grid;
grid-template-columns: 120px minmax(0, 1fr);
}
.therapy-query-view-dialog .viewTable .el-descriptions-item__label,
.therapy-query-view-dialog .therapy-family-details .el-descriptions-item__label,
.therapy-query-edit-dialog .therapy-family-details .el-descriptions-item__label {
width: auto;
white-space: normal;
}
.therapy-query-view-dialog .el-descriptions-item__content,
.therapy-query-edit-dialog .el-descriptions-item__content {
min-width: 0;
}
}
</style>
@@ -33,7 +314,7 @@ layout("/platform/zhgh/staffbenefit/therapyRecuperation/layouts/platform.html"){
<guava ref="guava">
<template>
<el-card shadow="never">
<el-card shadow="never" class="branch-query-filters">
<el-row align="middle" class="query-row" type="flex">
<el-col class="query-row-title"></el-col>
<el-col class="query-row-content">
@@ -103,13 +384,13 @@ layout("/platform/zhgh/staffbenefit/therapyRecuperation/layouts/platform.html"){
</el-row>
<el-row align="middle" class="query-row" type="flex">
<el-col class="query-row-title"></el-col>
<el-col class="query-row-content">
<span>查询条件:</span>
<el-col class="query-row-content query-condition-row">
<span class="query-condition-label">查询条件:</span>
<div class="query-condition-options">
<el-tag :effect="pageForm.state===item.value?'dark':'plain'"
:key="item.value"
:type="item.label"
@click="checkState(item.value)"
style="margin-right: 10px;cursor: pointer;margin-bottom: 5px;"
v-for="item in options">
{{ item.label }}
</el-tag>
@@ -120,19 +401,20 @@ layout("/platform/zhgh/staffbenefit/therapyRecuperation/layouts/platform.html"){
unitDisabled = false"
type="danger" v-if="options.length&&pageForm.state">清空
</el-link>
</div>
</el-col>
</el-row>
<!--#if(@com.budwk.app.zhgh.staffbenefit.therapyRecuperation.support.TherapyContext.hasRole('H04')){#-->
<el-row align="middle" class="query-row" type="flex"
v-if="pageForm.state==='1'&&pageForm.lb==='ry'">
<el-col class="query-row-title"></el-col>
<el-col class="query-row-content">
<span>报名路线:</span>
<el-col class="query-row-content query-condition-row">
<span class="query-condition-label">报名路线:</span>
<div class="query-condition-options">
<el-tag :effect="pageForm.state2===item.value?'dark':'plain'"
:key="item.value"
:type="item.label"
@click="checkState2(item.value)"
style="margin-right: 10px;cursor: pointer;margin-bottom: 5px;font-size: 15px"
v-for="item in options2">
{{ item.label }}
</el-tag>
@@ -140,6 +422,7 @@ layout("/platform/zhgh/staffbenefit/therapyRecuperation/layouts/platform.html"){
@click="pageForm.state2='';doSearch();getBmUserUnion();pageForm.takePartInLineId='';getXlByUnion()"
style="color: red" v-if="options2.length&&pageForm.state">清空
</el-link>
</div>
</el-col>
</el-row>
<!--#}#-->
@@ -148,7 +431,7 @@ layout("/platform/zhgh/staffbenefit/therapyRecuperation/layouts/platform.html"){
<el-col class="query-row-title"></el-col>
<el-col class="query-row-content">
<el-row>
<el-col :span="12" v-if="pageForm.state=='1'">
<el-col :span="12" v-if="pageForm.state=='1'" class="query-route-choice">
<span>选择路线:</span>
<el-select v-model="pageForm.takePartInLineId" filterable clearable
placeholder="请选择线路"
@@ -161,9 +444,8 @@ layout("/platform/zhgh/staffbenefit/therapyRecuperation/layouts/platform.html"){
</el-select>
</el-col>
<el-col :span="12" v-if="pageForm.state=='1'"
style="color: red;margin-top: 10px">
<sapn>【本工会报名线路】和【本工会人员选择其他工会的线路】</sapn>
<el-col :span="12" v-if="pageForm.state=='1'" class="query-route-hint">
<span>【本工会报名线路】和【本工会人员选择其他工会的线路】</span>
</el-col>
<el-col :span="12" v-if="pageForm.state=='2'">
<span>选择旅行社:</span>
@@ -195,8 +477,8 @@ layout("/platform/zhgh/staffbenefit/therapyRecuperation/layouts/platform.html"){
</el-row>
<el-row v-if="!pageForm.state">
<el-col :span="24" style="color: red;margin-top: 10px">
<el-row v-if="!pageForm.state" class="query-hint-row">
<el-col :span="24" class="query-hint">
<span>温馨提醒:当前操作查询是【本工会当年参加疗休养的人员(包含校工会线路)】和【其他工会选择本工会线路的疗休养人员】</span>
<!--<span>温馨提醒:当前操作查询是【本工会当年参加疗休养的人员(包含校工会线路)】</span>-->
@@ -208,7 +490,7 @@ layout("/platform/zhgh/staffbenefit/therapyRecuperation/layouts/platform.html"){
<el-row align="middle" class="query-row" type="flex"
v-if="pageForm.state=='1'||pageForm.state=='3'">
<el-col class="query-row-title"></el-col>
<el-col class="query-row-content">
<el-col class="query-row-content query-extra-fields">
<el-col :span="8">
<span>出行时间:</span>
<el-select v-model="pageForm.selectId" filterable clearable
@@ -253,7 +535,7 @@ layout("/platform/zhgh/staffbenefit/therapyRecuperation/layouts/platform.html"){
<el-card shadow="never" class="mt10">
<table-tool label="" :app="this" ref="table_tool">
<therapy-table-tool label="" :app="this" ref="table_tool">
<template #label_end>
<el-radio-group size="small" v-model="pageForm.lb" class="ml10"
@change="doSearch()"
@@ -280,7 +562,7 @@ layout("/platform/zhgh/staffbenefit/therapyRecuperation/layouts/platform.html"){
<!-- <el-button icon="el-icon-s-promotion" @click="openImport" size="small"
type="primary">参加人员导入
</el-button>-->
<!--# if(@com.budwk.app.zhgh.staffbenefit.therapyRecuperation.support.TherapyContext.hasAnyRoles('H04,superadmin')){ #-->
<!--# if(@com.budwk.app.zhgh.staffbenefit.therapyRecuperation.support.TherapyContext.hasAnyRoles('H04,sysadmin')){ #-->
<template>
<el-button icon="el-icon-s-promotion"
@click="$downloadFile('/platform/inclusiveTherapyV3/query/exportDeclareForm')"
@@ -330,9 +612,9 @@ layout("/platform/zhgh/staffbenefit/therapyRecuperation/layouts/platform.html"){
<el-radio-button label="省外">省外</el-radio-button>
</el-radio-group>
</template>
</table-tool>
</therapy-table-tool>
<el-table :data="tableData" style="width: 100%"
<el-table :key="pageForm.state + '-' + pageForm.lb" :data="tableData" style="width: 100%"
ref="table"
@selection-change="handleSelectionChange"
row-key="id" @sort-change="pageOrder1"
@@ -360,11 +642,12 @@ layout("/platform/zhgh/staffbenefit/therapyRecuperation/layouts/platform.html"){
:prop="column.prop"
:sortable="column.sortable"
>
<template slot-scope="{row}" v-if="column.prop=='lineName'">
<template slot-scope="{row}">
<template v-if="column.prop=='lineName'">
<el-link type="primary" @click="openLine(row)">{{row.lineName}}
</el-link>
</template>
<template slot-scope="{row}" v-else-if="column.prop=='isFamily'">
<template v-else-if="column.prop=='isFamily'">
<el-link v-if="!row.familyNumber" type="primary" @click="openView(row)">
{{row.isFamily?'携带':'未携带'}}({{row.isFamily}})
</el-link>
@@ -372,7 +655,7 @@ layout("/platform/zhgh/staffbenefit/therapyRecuperation/layouts/platform.html"){
{{row.familyNumber?'携带':'未携带'}}({{row.familyNumber}})
</el-link>
</template>
<template slot-scope="{row}" v-else-if="column.prop=='lineNum'">
<template v-else-if="column.prop=='lineNum'">
<span v-if="!row.familyNumber" >
{{row.lineNum}}({{row.signUpUserFamilyNum}})
@@ -383,25 +666,25 @@ layout("/platform/zhgh/staffbenefit/therapyRecuperation/layouts/platform.html"){
</template>
<template slot-scope="{row}" v-else-if="column.prop=='signUpMode'">
<template v-else-if="column.prop=='signUpMode'">
{{signUpModeName(row.signUpMode)}}
</template>
<template slot-scope="{row}" v-else-if="column.prop=='agencyNum'">
<template v-else-if="column.prop=='agencyNum'">
<el-link type="primary" @click="openApplyUser(row)">{{row.agencyNum}}
</el-link>
</template>
<template slot-scope="{row}" v-else-if="column.prop=='times'">
<template v-else-if="column.prop=='times'">
<div v-if="row.playStartTime">{{row.playStartTime}}</div>
<div v-else>{{row.playStartTime1}}</div>
</template>
<template slot-scope="{row}" v-else-if="column.prop=='isTakePartIn'">
<template v-else-if="column.prop=='isTakePartIn'">
{{row.isTakePartIn?'已参加':'未参加'}}
</template>
<template slot-scope="{row}" v-else-if="column.prop=='stateId'">
<template v-else-if="column.prop=='stateId'">
<span v-if="row.stateId">
<vi-table-state :state="row"></vi-table-state>
</span>-->
<sapn v-else style="color: #67C23A">暂无</sapn>
</span>
<span v-else style="color: #67C23A">暂无</span>
</template>
<!--<template scope="{row}" v-else-if="column.prop=='travelAgencyName'">
@@ -409,16 +692,17 @@ layout("/platform/zhgh/staffbenefit/therapyRecuperation/layouts/platform.html"){
{{row.travelAgencyName}}
</el-link>
</template>-->
<template slot-scope="{row}" v-else-if="column.prop=='lineOrMaName'">
<template v-else-if="column.prop=='lineOrMaName'">
{{row.lineName?row.lineName:row.baseName?row.baseName:row.travelAgencyName}}
</template>
<template slot-scope="{row:{officialWebsite}}"
<template
v-else-if="column.prop==='officialWebsite'">
<a :href="officialWebsite" class="text-primary" target="_blank">
{{officialWebsite}}
<a :href="row.officialWebsite" class="text-primary" target="_blank">
{{row.officialWebsite}}
</a>
</template>
<template slot-scope="{row}" v-else>{{row[column.prop]}}</template>
<template v-else>{{row[column.prop]}}</template>
</template>
</el-table-column>
<!-- <el-table-column label="家属信息" type="expand" width="100px"
v-if="pageForm.lb==='ry'">
@@ -573,10 +857,12 @@ layout("/platform/zhgh/staffbenefit/therapyRecuperation/layouts/platform.html"){
:sortable="column.sortable"
:key="column.id || column.code || therapyIndex">
<template slot-scope="{row}" v-if="column.prop=='isFamily'">
<template slot-scope="{row}">
<template v-if="column.prop=='isFamily'">
{{row.isFamily?'携带':'未携带'}}
</template>
<template slot-scope="{row}" v-else>{{row[column.prop]}}</template>
<template v-else>{{row[column.prop]}}</template>
</template>
</el-table-column>
<el-table-column label="操作" width="250px">
<template slot-scope="{row}">
@@ -624,17 +910,18 @@ layout("/platform/zhgh/staffbenefit/therapyRecuperation/layouts/platform.html"){
</guava>
<el-dialog
<el-dialog :append-to-body="true"
title="查看个人信息"
custom-class="therapy-query-view-dialog"
:visible.sync="userFindDialogVisible"
width="80%" top="2%">
<enroll-info ref="viewEnrollInfo" :union_id="unionId"></enroll-info>
width="80%" top="50px">
<enroll-info ref="viewEnrollInfo" :union_id="unionId" :family-cards="true"></enroll-info>
<span slot="footer" class="dialog-footer">
<el-button @click="userFindDialogVisible = false" type="primary">关闭</el-button>
</span>
</el-dialog>
<el-drawer
<el-drawer :append-to-body="true"
size="70%"
title="批量设置参加人员"
:visible.sync="userDrawer"
@@ -698,7 +985,7 @@ layout("/platform/zhgh/staffbenefit/therapyRecuperation/layouts/platform.html"){
</el-drawer>
<el-dialog
<el-dialog :append-to-body="true"
title="参加人员导入"
:visible.sync="importVisible"
:close-on-click-modal="false"
@@ -747,7 +1034,7 @@ layout("/platform/zhgh/staffbenefit/therapyRecuperation/layouts/platform.html"){
</span>
</el-dialog>
<el-drawer
<el-drawer :append-to-body="true"
size="70%"
title="家属信息"
:visible.sync="familyDrawer"
@@ -781,82 +1068,70 @@ layout("/platform/zhgh/staffbenefit/therapyRecuperation/layouts/platform.html"){
</el-card>
</el-drawer>
<el-dialog
<el-dialog :append-to-body="true"
title="修改信息"
custom-class="therapy-query-edit-dialog"
:visible.sync="editVisible"
:close-on-click-modal="false"
width="50%">
<el-form :model="editFormData" label-width="120px" :rules="rules" ref="editForm" style="margin-right: 40px">
<el-row>
<el-col span="12">
width="80%" top="50px">
<el-form :model="editFormData" label-width="120px" :rules="rules" ref="editForm">
<el-row :gutter="24">
<el-col :span="12">
<el-form-item prop="loginName" label="工号">
<el-input v-model="editFormData.loginName" readonly></el-input>
</el-form-item>
</el-col>
<el-col span="12">
<el-col :span="12">
<el-form-item prop="userName" label="姓名">
<el-input v-model="editFormData.userName" readonly></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col span="12">
<el-row :gutter="24">
<el-col :span="12">
<el-form-item prop="userName" label="手机号">
<el-input v-model="editFormData.mobile" readonly></el-input>
</el-form-item>
</el-col>
<el-col span="12">
<el-col :span="12">
<el-form-item prop="userName" label="身份证号">
<el-input v-model="editFormData.idCard" readonly></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col span="12">
<el-row :gutter="24">
<el-col :span="12">
<el-form-item prop="unionName" label="工会">
<el-input v-model="editFormData.unionName" readonly></el-input>
</el-form-item>
</el-col>
<el-col span="12">
<el-col :span="12">
<el-form-item prop="unitName" label="单位">
<el-input v-model="editFormData.unitName" readonly></el-input>
</el-form-item>
</el-col>
</el-row>
<el-form-item prop="prop" :label="labelName">
<el-form-item prop="prop" :label="labelName" class="therapy-edit-family">
<template v-if="modifyConfig.familyInfo == 2">
<el-collapse v-model="activeNames">
<el-collapse-item title="点击可展开详细信息" name="1">
<el-card shadow="never">
<el-table :data="editFormData.companionList">
<el-table-column label="姓名" prop="userName"></el-table-column>
<el-table-column label="性别" prop="sex"></el-table-column>
<el-table-column label="身份证号" prop="idCard" show-overflow-tooltip></el-table-column>
<el-table-column label="年龄" prop="age"></el-table-column>
<el-table-column label="床型" prop="bedType">
<template slot-scope="{row}">
{{ row.bedInfo?.bedType }}
</template>
</el-table-column>
<el-table-column label="床位" prop="bedNum">
<template slot-scope="{row}">
{{ row.bedInfo?.bedNum }}
</template>
</el-table-column>
<el-table-column label="意向拼床人" prop="otherSleepUser">
<template slot-scope="{row}">
{{ row.bedInfo?.otherSleepUser ?
row.bedInfo?.otherSleepUser : '暂无' }}
</template>
</el-table-column>
<el-table-column label="关系" prop="relation"></el-table-column>
</el-table>
</el-card>
</el-collapse-item>
</el-collapse>
<div class="therapy-family-list">
<div v-for="(item, index) in editFormData.companionList" :key="item.id || index" class="therapy-family-card">
<div class="therapy-family-title">家属 {{ index + 1 }} · {{ item.userName }}</div>
<el-descriptions :column="2" border class="therapy-family-details">
<el-descriptions-item label="姓名">{{ item.userName }}</el-descriptions-item>
<el-descriptions-item label="性别">{{ item.sex }}</el-descriptions-item>
<el-descriptions-item label="关系">{{ item.relation }}</el-descriptions-item>
<el-descriptions-item label="身份证号">{{ item.idCard }}</el-descriptions-item>
<el-descriptions-item label="年龄">{{ item.age }}</el-descriptions-item>
<el-descriptions-item label="床型">{{ item.bedInfo?.bedType }}</el-descriptions-item>
<el-descriptions-item label="床位">{{ item.bedInfo?.bedNum }}</el-descriptions-item>
<el-descriptions-item label="意向拼床人">{{ item.bedInfo?.otherSleepUser || '暂无' }}</el-descriptions-item>
</el-descriptions>
</div>
<el-empty v-if="!editFormData.companionList || !editFormData.companionList.length" description="暂无家属信息" :image-size="60"></el-empty>
</div>
</template>
<template v-else>
<el-input v-model="editFormData.bedType" readonly></el-input>
@@ -909,7 +1184,7 @@ layout("/platform/zhgh/staffbenefit/therapyRecuperation/layouts/platform.html"){
<script>
const vue = new Vue({
el: '#app',
mixins: [initTableMixins],
mixins: [therapyTableMixins],
data() {
return {
lotId: "",
@@ -928,6 +1203,7 @@ layout("/platform/zhgh/staffbenefit/therapyRecuperation/layouts/platform.html"){
signUpModeList: [],
viewData: {},
applyUserRow: {},
listRequestId: 0,
agencyLists: [],
unionId: "${@com.budwk.app.zhgh.staffbenefit.therapyRecuperation.support.TherapyContext.getUnionId()}",
userFindDialogVisible: false,
@@ -1011,7 +1287,7 @@ layout("/platform/zhgh/staffbenefit/therapyRecuperation/layouts/platform.html"){
}
},
components: {
'enroll-info': httpVueLoader('/components/staffbenefit/therapyRecuperation/Enrollinfo.vue?v=1.0.1'),
'enroll-info': httpVueLoader('/components/staffbenefit/therapyRecuperation/Enrollinfo.vue?v=1.0.3'),
'line-info': httpVueLoader('/components/staffbenefit/therapyRecuperation/LineInfo.vue')
},
methods: {
@@ -1413,6 +1689,13 @@ layout("/platform/zhgh/staffbenefit/therapyRecuperation/layouts/platform.html"){
checkState(type) {
this.$refs.table.clearSelection();
this.pageForm.state = type
if (type === "2") {
this.$set(this.pageForm, 'state2', '')
this.$set(this.pageForm, 'takePartInLineId', '')
this.$set(this.pageForm, 'selectId', '')
this.$set(this.pageForm, 'lotId', '')
this.$set(this.pageForm, 'regionalNature', '')
}
if (type === "1") {
this.pageForm.lb = 'xl'
} else if (type === "2") {
@@ -1500,9 +1783,12 @@ layout("/platform/zhgh/staffbenefit/therapyRecuperation/layouts/platform.html"){
}
},
getSelfUnionUser() {
const requestId = ++this.listRequestId
const viewKey = this.pageForm.state + '-' + this.pageForm.lb
this.tableLoading = true
this.tableData = []
$.post(loc() + "/getSelfUnionUser", this.pageForm, (data) => {
return $.post(loc() + "/getSelfUnionUser", this.pageForm, (data) => {
if (requestId !== this.listRequestId || viewKey !== this.pageForm.state + '-' + this.pageForm.lb) return
this.tableLoading = false
if (data.code === 0) {
this.tableData = data.data.list;
@@ -1603,7 +1889,8 @@ layout("/platform/zhgh/staffbenefit/therapyRecuperation/layouts/platform.html"){
await this.getRyData()
}
await this.getApplyNum()
this.$refs.table_tool.getColumns()
await this.$nextTick()
if (this.$refs.table_tool) this.$refs.table_tool.getColumns()
},
async flushUnits() {
@@ -1634,9 +1921,12 @@ layout("/platform/zhgh/staffbenefit/therapyRecuperation/layouts/platform.html"){
this.jdList = data
},
getLxsData() {
const requestId = ++this.listRequestId
const viewKey = this.pageForm.state + '-' + this.pageForm.lb
this.tableLoading = true
this.tableData = []
$.post(loc() + "/getLxsData", this.pageForm, (data) => {
return $.post(loc() + "/getLxsData", this.pageForm, (data) => {
if (requestId !== this.listRequestId || viewKey !== this.pageForm.state + '-' + this.pageForm.lb) return
this.tableLoading = false
if (data.code === 0) {
this.tableData = data.data.list;
@@ -1647,9 +1937,12 @@ layout("/platform/zhgh/staffbenefit/therapyRecuperation/layouts/platform.html"){
}, "json");
},
getJdData() {
const requestId = ++this.listRequestId
const viewKey = this.pageForm.state + '-' + this.pageForm.lb
this.tableLoading = true
this.tableData = []
$.post(loc() + "/getJdData", this.pageForm, (data) => {
return $.post(loc() + "/getJdData", this.pageForm, (data) => {
if (requestId !== this.listRequestId || viewKey !== this.pageForm.state + '-' + this.pageForm.lb) return
this.tableLoading = false
if (data.code === 0) {
this.tableData = data.data.list;
@@ -1660,9 +1953,12 @@ layout("/platform/zhgh/staffbenefit/therapyRecuperation/layouts/platform.html"){
}, "json");
},
async getXlData() {
const requestId = ++this.listRequestId
const viewKey = this.pageForm.state + '-' + this.pageForm.lb
this.tableLoading = true
this.tableData = []
$.post(loc() + "/getXlData", this.pageForm, (data) => {
return $.post(loc() + "/getXlData", this.pageForm, (data) => {
if (requestId !== this.listRequestId || viewKey !== this.pageForm.state + '-' + this.pageForm.lb) return
this.tableLoading = false
if (data.code === 0) {
this.tableData = data.data.list;
@@ -1673,9 +1969,12 @@ layout("/platform/zhgh/staffbenefit/therapyRecuperation/layouts/platform.html"){
}, "json");
},
async getRyData() {
const requestId = ++this.listRequestId
const viewKey = this.pageForm.state + '-' + this.pageForm.lb
this.tableLoading = true
this.tableData = []
$.post(loc() + "/getRyData", this.pageForm, (data) => {
return $.post(loc() + "/getRyData", this.pageForm, (data) => {
if (requestId !== this.listRequestId || viewKey !== this.pageForm.state + '-' + this.pageForm.lb) return
this.tableLoading = false
if (data.code === 0) {
this.tableData = data.data.list;

Some files were not shown because too many files have changed in this diff Show More