Compare commits

14 Commits
Author SHA1 Message Date
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
93 changed files with 3563 additions and 529 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()) {
@@ -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);
@@ -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);
+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,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,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>
@@ -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>
@@ -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%;
}
}
@@ -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">
本人信息
@@ -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
@@ -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,
})
@@ -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">
@@ -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) {
@@ -24,6 +24,7 @@
<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">
<link rel="stylesheet" href="${base!}/assets/staffbenefit/therapyRecuperation/css/desktop.css">
<script src="${base!}/assets/platform/plugins/element-ui/lib/index.js"></script>
<script>
ELEMENT.Dialog.props.closeOnClickModal.default = false;
@@ -32,6 +33,11 @@ ELEMENT.Table.props.border.default = true;
ELEMENT.TableColumn.props.headerAlign.default = 'center';
ELEMENT.TableColumn.props.align.default = 'center';
Vue.use(ELEMENT, {zIndex: 20000});
if (window.parent !== window) {
Vue.prototype.$confirm = function(...args) {
return window.parent.ELEMENT.MessageBox.confirm(...args);
};
}
</script>
<script src="${base!}/assets/platform/plugins/wangEditor4/wangEditor.js"></script>
<script src="${base!}/assets/platform/plugins/sortablejs/sortable.min.js"></script>
@@ -63,6 +69,6 @@ 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>
<style>body{margin:0;padding:0;box-sizing:border-box;background:#f6f6f6} [v-cloak]{display:none}</style>
</head><body class="therapy-desktop">${layoutContent}</body></html>
<!--# } #-->
@@ -26,6 +26,95 @@ 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;
}
}
</style>
@@ -33,7 +122,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 +192,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 +209,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 +230,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>
<!--#}#-->
@@ -161,10 +252,6 @@ 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>
<el-col :span="12" v-if="pageForm.state=='2'">
<span>选择旅行社:</span>
<el-select v-model="pageForm.agencyId" filterable clearable
@@ -195,8 +282,13 @@ 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=='1'" class="query-hint-row">
<el-col :span="24" class="query-hint">
<span>【本工会报名线路】和【本工会人员选择其他工会的线路】</span>
</el-col>
</el-row>
<el-row v-if="!pageForm.state" class="query-hint-row">
<el-col :span="24" class="query-hint">
<span>温馨提醒:当前操作查询是【本工会当年参加疗休养的人员(包含校工会线路)】和【其他工会选择本工会线路的疗休养人员】</span>
<!--<span>温馨提醒:当前操作查询是【本工会当年参加疗休养的人员(包含校工会线路)】</span>-->
@@ -208,7 +300,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
@@ -280,7 +372,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')"
@@ -360,11 +452,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 +465,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 +476,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 +502,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'">
@@ -266,12 +266,13 @@ 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'">
{{row.baseName?row.baseName:row.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>
@@ -279,15 +280,16 @@ layout("/platform/zhgh/staffbenefit/therapyRecuperation/layouts/platform.html"){
{{row.familyNumber?'携带':'未携带'}}({{row.familyNumber}})
</el-link>
</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=='lotName'">
<template v-else-if="column.prop=='lotName'">
<span v-if="row.lotName"> {{row.lotName}}</span>
<span v-else>暂无</span>
</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}">
@@ -78,13 +78,11 @@ layout("/platform/zhgh/staffbenefit/therapyRecuperation/layouts/platform.html"){
<div class="search-item">
<div class="search-item-label">线路类型:</div>
<div class="search-item-option">
<el-radio-group class="mr0-radio"
<el-select placeholder="请选择线路类型" style="width: 100%"
v-model="pageForm.regionalNature">
<el-radio-button :label="item.value"
border v-for="(item, therapyIndex) in regionalNatureList" :key="item.id || item.code || therapyIndex">
{{item.label}}
</el-radio-button>
</el-radio-group>
<el-option :value="item.value" :label="item.label"
v-for="(item, therapyIndex) in regionalNatureList" :key="item.id || item.code || therapyIndex"></el-option>
</el-select>
</div>
</div>
@@ -41,15 +41,12 @@ layout("/platform/zhgh/staffbenefit/therapyRecuperation/layouts/platform.html"){
<div class="search-item">
<div class="search-item-label">线路类型:</div>
<div class="search-item-option">
<el-radio-group class="mr0-radio"
<el-select placeholder="请选择线路类型" style="width: 100%"
@change="doSearch"
v-model="pageForm.regionalNature">
<el-radio-button :label="item.value"
border
v-for="(item, therapyIndex) in regionalNatureList" :key="item.id || item.code || therapyIndex">
{{item.label}}
</el-radio-button>
</el-radio-group>
<el-option :value="item.value" :label="item.label"
v-for="(item, therapyIndex) in regionalNatureList" :key="item.id || item.code || therapyIndex"></el-option>
</el-select>
</div>
</div>
@@ -134,7 +131,8 @@ layout("/platform/zhgh/staffbenefit/therapyRecuperation/layouts/platform.html"){
header-align="center"
show-overflow-tooltip
v-for="column in tableColumns">
<template slot-scope="{row}" v-if="column.prop === 'playTimes' || column.prop === 'signUpTimes'">
<template slot-scope="{row}">
<template v-if="column.prop === 'playTimes' || column.prop === 'signUpTimes'">
<template v-if="row[column.prop]">
<template slot="content">
<div :class="[index === row[column.prop].split(',').length - 1 ? '' : 'mb10']"
@@ -149,15 +147,16 @@ layout("/platform/zhgh/staffbenefit/therapyRecuperation/layouts/platform.html"){
</template>
<span v-else>暂未设置</span>
</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 === 'isOpen'">
<template v-else-if="column.prop === 'isOpen'">
{{row.isOpen ? '是' : '否'}}
</template>
<template slot-scope="{row}" v-else>
<template v-else>
{{row[column.prop]}}
</template>
</template>
</el-table-column>
<el-table-column align="center" header-align="center" label="操作" width="120px">
<template slot-scope="{row}">
@@ -58,14 +58,12 @@ layout("/platform/zhgh/staffbenefit/therapyRecuperation/layouts/platform.html"){
<div class="search-item">
<div class="search-item-label">线路类型:</div>
<div class="search-item-option">
<el-radio-group class="mr0-radio"
<el-select placeholder="请选择线路类型" style="width: 100%"
@change="doSearch"
v-model="pageForm.regionalNature">
<el-radio-button :label="item.value"
border v-for="(item, therapyIndex) in regionalNatureList" :key="item.id || item.code || therapyIndex">
{{item.label}}
</el-radio-button>
</el-radio-group>
<el-option :value="item.value" :label="item.label"
v-for="(item, therapyIndex) in regionalNatureList" :key="item.id || item.code || therapyIndex"></el-option>
</el-select>
</div>
</div>
@@ -215,19 +215,21 @@ layout("/platform/zhgh/staffbenefit/therapyRecuperation/layouts/platform.html"){
:fixed="column.fixed"
: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=='signUpMode'">
<template v-else-if="column.prop=='signUpMode'">
<span>{{row.signUpMode == '1' ? '校工会组织' : '分工会组织'}}</span>
</template>
<template slot-scope="{row}" v-else-if="column.prop=='groupCount'">
<template v-else-if="column.prop=='groupCount'">
<el-link type="primary" @click="openUserData(row)">
{{Number(row.lineNum || 0) + Number(row.adultFamilyNum || 0)}}
</el-link>
</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="380px" fixed="right">
<template slot-scope="{row}">
@@ -305,7 +307,8 @@ layout("/platform/zhgh/staffbenefit/therapyRecuperation/layouts/platform.html"){
:prop="column.prop"
: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'">
<el-link v-if="!row.familyNumber" type="primary">
{{row.isFamily?'携带':'未携带'}}({{row.isFamily}})
</el-link>
@@ -313,7 +316,8 @@ layout("/platform/zhgh/staffbenefit/therapyRecuperation/layouts/platform.html"){
{{row.familyNumber?'携带':'未携带'}}({{row.familyNumber}})
</el-link>
</template>
<template slot-scope="{row}" v-else>{{row[column.prop]}}</template>
<template v-else>{{row[column.prop]}}</template>
</template>
</el-table-column>
</el-table>
<el-row class="el-pagination-container" style="margin-bottom: 0px">
@@ -4,14 +4,161 @@ layout("/platform/zhgh/staffbenefit/therapyRecuperation/layouts/platform.html"){
<style>
.item-button {
#app .therapy-config .el-card__header {
padding: 16px 20px;
font-size: 16px;
font-weight: 600;
line-height: 24px;
}
#app .therapy-config .el-tabs__header {
margin-bottom: 24px;
}
#app .therapy-config .el-card__body {
padding: 20px 24px 0;
}
#app .therapy-config .el-tabs__item {
height: 46px;
line-height: 46px;
}
#app .config-base {
width: 100%;
}
#app .config-section {
display: grid;
grid-template-columns: minmax(0, 1fr);
gap: 0 28px;
margin-bottom: 20px;
padding: 20px 24px 4px;
border: 1px solid #ebeef5;
border-radius: 6px;
background: #fff;
}
#app .config-section-title {
grid-column: 1 / -1;
margin: 0 0 20px;
padding: 0 0 0 10px;
border-left: 3px solid var(--color-primary, #409eff);
color: #303133;
font-size: 14px;
font-weight: 600;
line-height: 20px;
background: transparent;
}
#app .config-base .el-form-item {
min-width: 0;
margin-bottom: 22px;
}
#app .config-base .el-form-item__label {
float: none;
display: block;
width: auto !important;
padding: 0 0 8px;
line-height: 22px;
text-align: left;
color: #606266;
}
#app .config-base .el-form-item__content {
margin-left: 0 !important;
}
#app .config-base .el-input,
#app .config-base .el-select {
width: 100%;
}
#app .config-base .el-radio-group {
display: inline-flex;
flex-wrap: wrap;
}
#app .therapy-config .el-table th {
background: #f5f7fa;
}
#app .config-wide {
grid-column: 1 / -1;
min-width: 0;
}
#app .config-scope,
#app .config-time-range {
display: flex;
align-items: center;
gap: 12px;
width: 100%;
}
#app .config-scope .el-select {
flex: 1;
min-width: 0;
}
#app .config-time-range .el-date-editor {
width: 0;
flex: 1;
min-width: 0;
}
#app .config-time-separator {
color: #909399;
}
#app .config-table-toolbar {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 12px;
color: #606266;
}
#app .config-actions {
position: sticky;
bottom: 0;
z-index: 20;
margin: 20px 0 0;
padding: 16px 0;
box-shadow: 0 -6px 16px rgba(0, 0, 0, 0.03);
background: #fff;
border-top: 1px solid #ebeef5;
text-align: right;
}
.item-button .el-button {
#app .config-actions .el-form-item__content {
margin-left: 0 !important;
}
#app .config-actions .el-button {
padding: 12px 25px;
}
@media (max-width: 767px) {
#app .therapy-config .el-card__body {
padding: 12px 12px 0;
}
#app .config-section {
padding: 16px 14px 0;
}
#app .config-time-range {
flex-wrap: wrap;
}
#app .config-time-range .el-date-editor {
flex: 1 1 100%;
width: 100%;
}
}
/*.el-dialog__title {
font-size: 18px; !* 修改标题字体大小 *!
color: red; !* 修改标题字体颜色 *!
@@ -22,37 +169,35 @@ layout("/platform/zhgh/staffbenefit/therapyRecuperation/layouts/platform.html"){
<div id="app" v-cloak>
<guava>
<el-card shadow="never">
<el-card shadow="never" class="therapy-config">
<div slot="header" class="clearfix">
<h3 style="color: var(--color-primary);font-family: Microsoft YaHei;">疗休养配置</h3>
<span>普惠疗休养基础设置</span>
</div>
<el-form ref="addForm" :model="formData" :rules="formRules" label-width="170px">
<el-tabs v-model="activeTab" type="card">
<el-tab-pane label="基本配置" name="baseConfig">
<el-form ref="addForm" :model="formData" :rules="formRules" label-width="200px">
<el-tabs v-model="activeTab">
<el-tab-pane label="基本配置" name="baseConfig" class="config-base">
<div class="config-section">
<div class="config-section-title">基本信息</div>
<el-form-item label="配置名称" prop="configName">
<el-input v-model="formData.configName" placeholder="请输入配置名称"></el-input>
</el-form-item>
<el-form-item prop="activityGroupId" label="参加人员范围">
<div style="display: flex; justify-content: space-between">
<div style="width: 99%">
<div class="config-scope">
<el-select v-model="formData.activityGroupId" placeholder="请选择参加人员范围" filterable
clearable
style="width: 99%">
clearable>
<el-option v-for="item in activityGroupList"
:value="item.groupId"
:key="item.groupId"
:label="item.groupName"></el-option>
</el-select>
</div>
<div>
<el-button @click="$refs.drawerUserScope.userScopeDialog = true" type="primary">设置</el-button>
</div>
</div>
</el-form-item>
<!-- 报名时间范围绑定配置实体的两个独立字段,保存时随 formData 一并提交到后台。 -->
<el-form-item label="报名时间">
<el-form-item label="报名时间" class="config-wide">
<div class="config-time-range">
<el-date-picker
v-model="formData.signUpStartTime"
type="datetime"
@@ -60,7 +205,7 @@ layout("/platform/zhgh/staffbenefit/therapyRecuperation/layouts/platform.html"){
format="yyyy-MM-dd HH:mm"
placeholder="请选择报名开始时间">
</el-date-picker>
<span style="display: inline-block; margin: 0 10px;">至</span>
<span class="config-time-separator">至</span>
<el-date-picker
v-model="formData.signUpEndTime"
type="datetime"
@@ -68,10 +213,12 @@ layout("/platform/zhgh/staffbenefit/therapyRecuperation/layouts/platform.html"){
format="yyyy-MM-dd HH:mm"
placeholder="请选择报名结束时间">
</el-date-picker>
</div>
</el-form-item>
<!-- 选择线路时间用于控制分工会/校工会在线路选择页可选择、修改、取消选择的时间范围。 -->
<el-form-item label="选择线路时间">
<el-form-item label="选择线路时间" class="config-wide">
<div class="config-time-range">
<el-date-picker
v-model="formData.lineSelectStartTime"
type="datetime"
@@ -79,7 +226,7 @@ layout("/platform/zhgh/staffbenefit/therapyRecuperation/layouts/platform.html"){
format="yyyy-MM-dd HH:mm"
placeholder="请选择选择线路开始时间">
</el-date-picker>
<span style="display: inline-block; margin: 0 10px;">至</span>
<span class="config-time-separator">至</span>
<el-date-picker
v-model="formData.lineSelectEndTime"
type="datetime"
@@ -87,8 +234,13 @@ layout("/platform/zhgh/staffbenefit/therapyRecuperation/layouts/platform.html"){
format="yyyy-MM-dd HH:mm"
placeholder="请选择选择线路结束时间">
</el-date-picker>
</div>
</el-form-item>
</div>
<div class="config-section">
<div class="config-section-title">报名与出行规则</div>
<el-form-item label="省外最少成团人数(包括家属)" prop="outsideQuota">
<el-input v-model.number="formData.outsideQuota"
placeholder="请输入省外最少成团人数(包括家属)"></el-input>
@@ -132,6 +284,10 @@ layout("/platform/zhgh/staffbenefit/therapyRecuperation/layouts/platform.html"){
v-model.number="formData.modifyNumber"></el-input>
</el-form-item>
</div>
<div class="config-section">
<div class="config-section-title">审核规则</div>
<el-form-item label="省内线路是否需要审核" prop="isSnLine">
<el-radio-group v-model="formData.isSnLine">
<el-radio-button :label="true">需要</el-radio-button>
@@ -153,6 +309,10 @@ layout("/platform/zhgh/staffbenefit/therapyRecuperation/layouts/platform.html"){
</el-radio-group>
</el-form-item>
</div>
<div class="config-section">
<div class="config-section-title">名额与报名信息</div>
<el-form-item label="全批次最多报名人数" prop="allLineSignUpNumber">
<el-input max="100"
placeholder="请输入全批次最多报名人数"
@@ -179,35 +339,38 @@ layout("/platform/zhgh/staffbenefit/therapyRecuperation/layouts/platform.html"){
</el-radio-group>
</el-form-item>
</div>
</el-tab-pane>
<el-tab-pane label="标段管理" name="lotManage">
<el-form-item label="标段">
<el-button type="primary" @click="formData.lots.push({})"
style="float: right;">增加一条
<el-form-item label-width="0">
<div class="config-table-toolbar">
<span>标段列表</span>
<el-button type="primary" size="small" icon="el-icon-plus" @click="formData.lots.push({})">增加一条
</el-button>
</div>
<el-table :data="formData.lots" stripe style="width: 100%">
<el-table-column prop="index" label="序号" width="180">
<el-table-column prop="index" label="序号" width="80">
<template slot-scope="scope">
{{scope.$index+1}}
</template>
</el-table-column>
<el-table-column prop="lotName" label="标段名称">
<el-table-column prop="lotName" label="标段名称" min-width="200">
<template slot-scope="{row}">
<el-input v-model="row.lotName" placeholder="请输入标段名称"></el-input>
</template>
</el-table-column>
<el-table-column prop="lotValue" label="标段值">
<el-table-column prop="lotValue" label="标段值" min-width="160">
<template slot-scope="{row}">
<el-input v-model="row.lotValue" placeholder="请输入标段值"></el-input>
</template>
</el-table-column>
<el-table-column prop="activityCost" label="标段费用">
<el-table-column prop="activityCost" label="标段费用" min-width="160">
<template slot-scope="{row}">
<el-input v-model="row.activityCost" placeholder="请输入标段费用"></el-input>
</template>
</el-table-column>
<!--# if(@com.budwk.app.zhgh.staffbenefit.therapyRecuperation.support.TherapyContext.hasRole('sysadmin')){ #-->
<el-table-column prop="index" label="操作">
<el-table-column prop="index" label="操作" width="100" align="center">
<template slot-scope="scope">
<el-button type="danger" icon="el-icon-delete"
@click="deleteLotsRow(scope)"></el-button>
@@ -220,14 +383,14 @@ layout("/platform/zhgh/staffbenefit/therapyRecuperation/layouts/platform.html"){
</el-tab-pane>
<el-tab-pane label="分工会线路数量管理" name="unionLineNumberManage">
<el-form-item label="分工会线路数量">
<el-form-item label-width="0">
<el-table :data="formData.unionLineNumberConfigs" stripe style="width: 100%">
<el-table-column prop="index" label="序号" width="120">
<template slot-scope="scope">
{{scope.$index+1}}
</template>
</el-table-column>
<el-table-column prop="unionId" label="分工会">
<el-table-column prop="unionId" label="分工会" min-width="240">
<template slot-scope="{row}">
<el-select v-model="row.unionId" placeholder="请选择分工会" filterable clearable
style="width: 100%">
@@ -239,13 +402,13 @@ layout("/platform/zhgh/staffbenefit/therapyRecuperation/layouts/platform.html"){
</el-select>
</template>
</el-table-column>
<el-table-column prop="minProvinceOutNumber" label="最少省外数量">
<el-table-column prop="minProvinceOutNumber" label="最少省外数量" min-width="180">
<template slot-scope="{row}">
<el-input v-model.number="row.minProvinceOutNumber"
placeholder="请输入最少省外数量"></el-input>
</template>
</el-table-column>
<el-table-column prop="minProvinceInNumber" label="最少省内数量">
<el-table-column prop="minProvinceInNumber" label="最少省内数量" min-width="180">
<template slot-scope="{row}">
<el-input v-model.number="row.minProvinceInNumber"
placeholder="请输入最少省内数量"></el-input>
@@ -265,15 +428,16 @@ layout("/platform/zhgh/staffbenefit/therapyRecuperation/layouts/platform.html"){
</el-tab-pane>
<el-tab-pane label="服务须知" name="serviceNotice">
<el-form-item label="疗休养服务须知" prop="notice">
<div class="config-section-title">疗休养服务须知</div>
<el-form-item prop="notice" label-width="0">
<text-editor v-model="formData.notice"></text-editor>
</el-form-item>
</el-tab-pane>
</el-tabs>
<el-form-item class="item-button">
<el-button type="danger" @click="resetForm">重&emsp;置</el-button>
<el-button type="primary" @click="operation" :loading="subLoading">提&emsp;交
<el-form-item class="config-actions">
<el-button @click="resetForm">重置</el-button>
<el-button type="primary" @click="operation" :loading="subLoading">保存配置
</el-button>
</el-form-item>
</el-form>
@@ -17,6 +17,9 @@ layout("/layouts/platform.html"){
value-format="yyyy"
></el-date-picker>
</search-item>
<template #actions>
<el-button @click="resetSearch">重置</el-button>
</template>
</search>
</el-card>
@@ -115,6 +118,10 @@ layout("/layouts/platform.html"){
"select-view": selectView
},
methods: {
resetSearch() {
this.pageForm.year = moment().format("YYYY")
this.doSearch()
},
async openView(row) {
this.$refs.selectViewRef.onOpen(row.id)
}
@@ -117,6 +117,9 @@ const filterUser = {
<el-option label="否" :value="false"></el-option>
</el-select>
</search-item>
<template #actions>
<el-button @click="resetSearch">重置</el-button>
</template>
</search>
</el-card>
@@ -200,6 +203,11 @@ const filterUser = {
this.pageData()
},
resetSearch() {
this.resetPageForm()
this.doSearch()
},
resetPageForm() {
this.$set(this.pageForm, "userName", null)
this.$set(this.pageForm, "loginName", null)
@@ -21,6 +21,9 @@ layout("/layouts/platform.html"){
<search-item label="项目名称">
<el-input clearable placeholder="请输入项目名称" v-model="pageForm.name"></el-input>
</search-item>
<template #actions>
<el-button @click="resetSearch">重置</el-button>
</template>
</search>
</el-card>
@@ -294,6 +297,11 @@ layout("/layouts/platform.html"){
}
},
methods: {
resetSearch() {
this.pageForm.year = moment().format("YYYY")
this.$set(this.pageForm, "name", null)
this.doSearch()
},
dropdownCommand(command) {
const { type, data } = command
if (type === "edit") {
@@ -22,6 +22,7 @@ layout("/layouts/platform.html"){
</div>
<div class="search-query">
<el-button @click="doSearch" icon="el-icon-search" type="primary">搜索</el-button>
<el-button @click="resetSearch">重置</el-button>
</div>
</div>
</el-card>
@@ -120,6 +121,10 @@ layout("/layouts/platform.html"){
"option-select": optionSelect
},
methods: {
resetSearch() {
this.$set(this.pageForm, "year", null)
this.doSearch()
},
go_back() {
this.doSearch()
this.$refs.guava.index()
@@ -34,7 +34,7 @@ const optionSelect = {
</div>
<div class="info-item">
<div class="info-label">节日信息</div>
<div class="info-value">{{ projectInfo.festival }} · {{ projectInfo.year }}年</div>
<div class="info-value"><!--{{ projectInfo.festival }} · -->{{ projectInfo.year }}年</div>
</div>
<div class="info-item">
<div class="info-label">选择时间</div>
@@ -48,10 +48,12 @@ const optionSelect = {
projectInfo.provideTimeEnd) }}
</div>
</div>
<!--
<div class="info-item">
<div class="info-label">发放地点</div>
<div class="info-value">{{ projectInfo.provideAddress }}</div>
</div>
-->
</div>
</el-card>
@@ -143,8 +145,15 @@ const optionSelect = {
<div class="confirm-mobile-section">
<div class="confirm-section-title">联系信息</div>
<el-form :model="contactForm" ref="contactForm" :rules="contactRules" label-width="80px">
<el-form-item label="领取方式" v-if="projectInfo.provideMode === 3">
<el-radio-group v-model="deliveryMethod">
<el-radio-button label="pickup">学校自提</el-radio-button>
<el-radio-button label="mail">邮寄</el-radio-button>
</el-radio-group>
<div style="margin-top: 8px; padding: 8px 12px; border-radius: 6px; line-height: 1.5; background: #fff3e8; color: #9c451c">超出江浙沪不包邮,超出部分自理,具体金额联系供应商。</div>
</el-form-item>
<el-row :gutter="10">
<el-col :span="20" v-if="projectInfo.provideMode == 3">
<el-col :span="20" v-if="projectInfo.provideMode === 3 && deliveryMethod === 'mail'">
<el-form-item prop="receiveAddress"
label="收货地址"
:rules="[{ required: true, message: '请选择收货地址', trigger: 'change' }]">
@@ -158,10 +167,10 @@ const optionSelect = {
</el-select>
</el-form-item>
</el-col>
<el-col :span="4" v-if="projectInfo.provideMode == 3">
<el-col :span="4" v-if="projectInfo.provideMode === 3 && deliveryMethod === 'mail'">
<el-button @click="openAddress" type="primary" size="small">添加地址</el-button>
</el-col>
<el-col :span="24" v-if="projectInfo.provideMode == 3">
<el-col :span="24" v-if="projectInfo.provideMode === 3 && deliveryMethod === 'mail'">
<el-form-item prop="userName" label="收货人">
<el-input
v-model="contactForm.userName"
@@ -170,7 +179,7 @@ const optionSelect = {
</el-input>
</el-form-item>
</el-col>
<el-col :span="24">
<el-col :span="24" v-if="projectInfo.provideMode !== 3 || deliveryMethod === 'mail'">
<el-form-item prop="mobile" label="联系电话">
<el-input
v-model="contactForm.mobile"
@@ -258,6 +267,7 @@ const optionSelect = {
userSelection: [], // 用户选择的选项
selectedRadioId: "", // 单选模式下选中的选项ID
showConfirmDialog: false, // 确认弹窗
deliveryMethod: "",
isSubmitting: false, // 是否正在提交
hasSubmittedBefore: false, // 是否之前提交过
deadlineTime: null, // 选择截止时间
@@ -410,6 +420,7 @@ const optionSelect = {
this.projectId = projectId
this.userId = userId
this.deliveryMethod = ""
this.selectedRadioId = null
this.contactForm = {
mobile: "",
@@ -485,7 +496,9 @@ const optionSelect = {
// 地址回显
if (this.projectInfo.provideMode === 3) {
if (this.userSelection.length > 0 && this.userSelection[0].receiveAddress) {
this.contactForm.receiveAddress = this.userSelection[0].receiveAddress
const receiveAddress = this.userSelection[0].receiveAddress
this.deliveryMethod = receiveAddress === "学校自提" ? "pickup" : "mail"
this.contactForm.receiveAddress = this.deliveryMethod === "mail" ? receiveAddress : ""
// this.contactForm.userName = this.userSelection[0].userName;
// this.contactForm.mobile = this.userSelection[0].mobile;
this.$set(this.contactForm, "userName", this.userSelection[0].userName)
@@ -526,6 +539,10 @@ const optionSelect = {
// 执行提交
doSubmit() {
if (this.projectInfo.provideMode === 3 && !this.deliveryMethod) {
this.$message.warning("请选择领取方式")
return
}
// 验证手机号
this.$refs.contactForm.validate((valid) => {
if (!valid) {
@@ -547,7 +564,7 @@ const optionSelect = {
mobile: this.contactForm.mobile,
userName: this.contactForm.userName,
userSign: this.contactForm.userSign,
receiveAddress: this.contactForm.receiveAddress
receiveAddress: this.deliveryMethod === "pickup" ? "学校自提" : this.contactForm.receiveAddress
}
]
}
@@ -560,7 +577,7 @@ const optionSelect = {
mobile: this.contactForm.mobile,
userName: this.contactForm.userName,
userSign: this.contactForm.userSign,
receiveAddress: this.contactForm.receiveAddress
receiveAddress: this.deliveryMethod === "pickup" ? "学校自提" : this.contactForm.receiveAddress
}))
}
@@ -69,6 +69,9 @@ layout("/layouts/platform.html"){
<dict-select v-model="pageForm.userAttribute" placeholder="请选择人员属性" @change="doSearch"
code="USER_ATTRIBUTE"></dict-select>
</search-item>
<template #actions>
<el-button @click="resetSearch">重置</el-button>
</template>
</search>
</el-card>
@@ -173,6 +176,18 @@ layout("/layouts/platform.html"){
}
},
methods: {
resetSearch() {
this.pageForm.year = new Date().getFullYear().toString()
this.$set(this.pageForm, "welfareOptionId", null)
this.$set(this.pageForm, "userName", null)
this.$set(this.pageForm, "loginName", null)
this.$set(this.pageForm, "unionId", null)
this.$set(this.pageForm, "aidFundMemberUserType", null)
this.$set(this.pageForm, "userAttribute", null)
this.$set(this.pageForm, "isSelect", null)
this.$set(this.pageForm, "unitIds", [])
this.getWelfareList()
},
// 获取福利列表
getWelfareList() {
this.$axios.post("/platform/welfare/common/list", { year: this.pageForm.year }).then((res) => {
@@ -28,6 +28,9 @@ layout("/layouts/platform.html"){
<el-option :key="item.id" :label="item.name" :value="item.id" v-for="item in unionOptions"></el-option>
</el-select>
</search-item>
<template #actions>
<el-button @click="resetSearch">重置</el-button>
</template>
</search>
</el-card>
@@ -110,6 +113,13 @@ layout("/layouts/platform.html"){
}
},
methods: {
resetSearch() {
this.pageForm.year = new Date().getFullYear().toString()
const isBranchChairman = !this.$auth.hasRoleOr(["SYSADMIN", "SCHOOL_UNION_ADMIN", "SCHOOL_UNION_WELFARE_ADMIN"]) &&
this.$auth.hasRoleOr(["BRANCH_UNION_CHAIRMAN"])
this.$set(this.pageForm, "unionId", isBranchChairman ? this.$store.state.user.union.id : null)
this.getWelfareProjectList()
},
remindUnSelectedPlaceholder() {
this.$message.info("提醒未选择人员功能待开发")
},
@@ -112,7 +112,15 @@ let CHOOSE_WELFARE = {
</el-row>
</el-form-item>
<template v-if="projectInfo.provideMode===3">
<div v-if="projectInfo.provideMode === 3 && !is_view" style="padding: 8px 16px">
<div>领取方式</div>
<el-radio-group v-model="deliveryMethod">
<el-radio-button label="pickup">学校自提</el-radio-button>
<el-radio-button label="mail">邮寄</el-radio-button>
</el-radio-group>
<div style="margin-top: 8px; padding: 8px; background: #fff3e8; color: #9c451c">超出江浙沪不包邮,超出部分自理,具体金额联系供应商。</div>
</div>
<template v-if="projectInfo.provideMode === 3 && (is_view || deliveryMethod === 'mail')">
<el-row :gutter="20">
<el-col :span="24" v-if="!is_view">
<el-form-item label="收货地址" prop="receiveAddress">
@@ -202,6 +210,7 @@ let CHOOSE_WELFARE = {
data() {
return {
projectInfo: {},
deliveryMethod: "",
addressOptions: [],
welfareProvideMode: [],
welfareSignMode: [],
@@ -295,6 +304,10 @@ let CHOOSE_WELFARE = {
}
},
doChoose() {
if (this.projectInfo.provideMode === 3 && !this.deliveryMethod) {
this.$message.warning("请选择领取方式")
return
}
this.$refs["addForm"].validate(async (valid) => {
if (valid) {
const {
@@ -309,7 +322,7 @@ let CHOOSE_WELFARE = {
return
}
}
if (this.formData.receiveAddress == null || this.formData.receiveAddress === "") {
if (this.projectInfo.provideMode === 3 && this.deliveryMethod === "mail" && !this.formData.receiveAddress) {
this.$message.warning("请填写收货地址")
return
}
@@ -322,7 +335,7 @@ let CHOOSE_WELFARE = {
welfareId: this.projectInfo.id,
subjectId: v.subjectId,
selectOptionId: v.id,
receiveAddress: this.formData.receiveAddress,
receiveAddress: this.deliveryMethod === "pickup" ? "学校自提" : this.formData.receiveAddress,
userSign: this.formData.userSign,
selectNum: v.selectNum
}
@@ -397,12 +410,19 @@ let CHOOSE_WELFARE = {
},
async openChoose(row) {
await this.getProjectInfo(row.id)
this.deliveryMethod = ""
this.$set(this.formData, "receiveAddress", null)
this.$set(this.formData, "addressId", null)
this.$set(this.formData, "userName", this.$store.state.user.username)
this.$set(this.formData, "tel", this.$store.state.user.mobile)
//如果已选择
if (row.isChoose > 0) {
this.$set(this.formData, "receiveAddress", this.userSelection[0].receiveAddress)
const receiveAddress = this.userSelection[0].receiveAddress
if (this.projectInfo.provideMode === 3 && receiveAddress) {
this.deliveryMethod = receiveAddress === "学校自提" ? "pickup" : "mail"
}
this.$set(this.formData, "receiveAddress", this.deliveryMethod === "pickup" && !this.is_view ? null : receiveAddress)
this.$set(this.formData, "addressId", null)
this.$set(this.formData, "userSign", this.userSelection[0].userSign)
} else {
@@ -22,6 +22,7 @@ layout("/layouts/platform.html"){
</div>
<div class="search-query">
<el-button @click="doSearch" icon="el-icon-search" type="primary">搜索</el-button>
<el-button @click="resetSearch">重置</el-button>
</div>
</div>
</el-card>
@@ -120,6 +121,10 @@ layout("/layouts/platform.html"){
"choose-welfare": CHOOSE_WELFARE
},
methods: {
resetSearch() {
this.$set(this.pageForm, "year", null)
this.doSearch()
},
go_back() {
this.doSearch()
this.$refs.guava.index()
@@ -138,6 +138,9 @@ layout("/layouts/platform.html"){
<!-- <el-option :key="item.id" :label="item.optionName" :value="item.id" v-for="item in pageFormProject"></el-option>-->
<!-- </el-select>-->
<!-- </search-item>-->
<template #actions>
<el-button @click="resetSearch">重置</el-button>
</template>
</search>
</el-card>
@@ -311,6 +314,22 @@ layout("/layouts/platform.html"){
}
},
methods: {
resetSearch() {
this.pageForm.year = new Date().getFullYear().toString()
this.$set(this.pageForm, "userName", null)
this.$set(this.pageForm, "loginName", null)
this.$set(this.pageForm, "sex", null)
this.$set(this.pageForm, "birthday", null)
this.$set(this.pageForm, "unionId", null)
this.$set(this.pageForm, "aidFundMemberUserType", null)
this.$set(this.pageForm, "birthMonths", [])
this.$set(this.pageForm, "unitIds", [])
this.$set(this.pageForm, "personTypes", [])
this.$set(this.pageForm, "userStates", [])
this.$set(this.pageForm, "userAttributes", [])
this.unitIdsChange([])
this.getWelfareList()
},
// 导出名单
openExport() {
this.$downLoad("/platform/welfare/list/mange/exportXlsx", {
@@ -432,6 +451,9 @@ layout("/layouts/platform.html"){
}
try {
const responses = await Promise.all(unitIds.map((unitId) => this.$axios.post("/platform/sys/unit/child", { pid: unitId })))
if (unitIds !== this.pageForm.unitIds) {
return
}
const failedResponse = responses.find((res) => res.code !== 0)
if (failedResponse) {
this.$message.error(failedResponse.msg || "三级单位查询失败")
@@ -255,7 +255,7 @@ layout("/layouts/platform_h5.html"){
<van-empty description="暂无数据" v-else></van-empty>
</van-action-sheet>-->
<van-field
<!-- <van-field
v-model="formData.certifierUserName"
name="certifierUserName"
label="证明人"
@@ -288,7 +288,7 @@ layout("/layouts/platform_h5.html"){
</template>
</div>
<van-empty description="暂无数据" v-else></van-empty>
</van-action-sheet>
</van-action-sheet> -->
<van-field
v-model="formData.typeName"
@@ -322,7 +322,7 @@ layout("/layouts/platform_h5.html"){
name="money"
label="慰问金额"
required
:rules="[{ required: true }]"
:rules="[{ required: true, message: '请填写慰问金额' }, { validator: validateMoney, message: '慰问金额须大于0且不超过10000元,最多两位小数' }]"
placeholder="选择慰问类型自动匹配金额"
clickable
type="number"
@@ -353,17 +353,19 @@ layout("/layouts/platform_h5.html"){
</van-popup>
<van-field
v-if="!['A', 'D'].includes(formData.typeCode)"
v-model="formData.bankCardNumber"
label="收款账户"
maxlength="20"
maxlength="30"
clearable
name="bankCardNumber"
placeholder="请填写收款账户"
:rules="[{ required: true }]"
placeholder="请填写银行卡号或对公账户号"
:rules="[{ required: true, message: '请填写银行卡号或对公账户号' }, { pattern: /^[0-9]{6,30}$/, message: '收款账户须为6至30位数字(银行卡号或对公账户号)' }]"
required
></van-field>
<van-field
v-if="!['A', 'D'].includes(formData.typeCode)"
v-model="formData.bankUserName"
label="户名"
placeholder="请填写户名"
@@ -373,12 +375,10 @@ layout("/layouts/platform_h5.html"){
name="bankUserName"
></van-field>
<van-field
v-if="!['A', 'D'].includes(formData.typeCode)"
v-model="formData.bankOfDeposit"
label="开户行"
maxlength="30"
type="textarea"
rows="4"
autosize
maxlength="20"
placeholder="请填写开户行"
:rules="[{ required: true }]"
required
@@ -433,8 +433,8 @@ layout("/layouts/platform_h5.html"){
></van-datetime-picker>
</van-popup>
<van-field type="digit" label="当年第几次住院"
:rules="[{ required: true }]"
<van-field type="digit" label="当年第几次住院" name="thisYearHospitalizationNum"
:rules="[{ required: true }, { validator: value => /^[0-9]+$/.test(String(value)) && Number(value) <= 10000, message: '住院次数须为0至10000的整数' }]"
required
placeholder="请输入当年第几次住院"
v-model="formData.thisYearHospitalizationNum"></van-field>
@@ -443,6 +443,7 @@ layout("/layouts/platform_h5.html"){
<van-field
v-model="formData.remark"
name="remark"
maxlength="500"
label="申请事由"
type="textarea"
rows="4"
@@ -460,15 +461,18 @@ layout("/layouts/platform_h5.html"){
{{ '附件说明:' + chooseType.uploadFileDesc }}
</div>
<van-cell-group :border="false">
<van-field class="direction-column-field" name="avatar" label="">
<van-field class="direction-column-field" name="files" label="附件" required
:rules="[{ validator: () => Array.isArray(formData.files) && formData.files.length > 0 && formData.files.length <= 5, message: '请上传1至5个附件' }]">
<template #input>
<h5-file-upload
slot="input"
:value.sync="formData.files"
:upload_number="5"
upload_text="上传附件"
upload_result_category="array"
complete_result
></h5-file-upload>
<div class="condolence-card__desc">最多上传 5 个文件</div>
</template>
</van-field>
</van-cell-group>
@@ -477,7 +481,8 @@ layout("/layouts/platform_h5.html"){
<section class="form-section">
<h2 class="condolence-card__title">签字确认</h2>
<van-cell-group :border="false">
<van-field class="direction-column-field" name="signature" label="">
<van-field class="direction-column-field" name="signature" label="" :value="formData.signature"
:rules="[{ required: true, message: '请填写签字' }]">
<template #input>
<h5-signature v-model="formData.signature" slot="input"></h5-signature>
</template>
@@ -532,6 +537,9 @@ layout("/layouts/platform_h5.html"){
}
},
methods: {
validateMoney(value) {
return /^(0|[1-9][0-9]*)(\.[0-9]{1,2})?$/.test(String(value)) && Number(value) > 0 && Number(value) <= 10000
},
// 选择出院时间
showLeaveHospitalTimePickerClick() {
if (this.formData.leaveHospitalTime) {
@@ -158,19 +158,44 @@
}
.condolence-info-long-cell {
display: flex;
align-items: flex-start;
}
.condolence-info-card .condolence-attachments .empty-container {
height: auto;
justify-content: flex-start;
color: inherit;
}
.condolence-info-card .condolence-attachments .empty-text {
font-size: inherit;
line-height: inherit;
}
.condolence-info-opinion > :first-child {
margin-top: 0;
}
.condolence-info-opinion > :last-child {
margin-bottom: 0;
}
.condolence-signature-image,
.condolence-approval-signature-image {
display: block;
}
.condolence-info-long-cell .van-cell__title {
width: auto;
width: 100%;
max-width: 100%;
height: 80px;
}
.condolence-info-long-cell .van-cell__value {
margin-top: 7px;
.condolence-signature-image .van-image__img,
.condolence-approval-signature-image {
object-fit: contain;
object-position: left center;
}
.condolence-signature-image {
display: block;
.condolence-info-opinion img {
max-width: 100%;
height: auto;
}
@@ -25,13 +25,13 @@ const condolenceInfo = {
<van-cell title="申请人单位">{{ viewData.applyUnitName || '--' }}</van-cell>
<van-cell title="申请人工会">{{ viewData.applyUnionName || '--' }}</van-cell>
<van-cell title="慰问对象">{{ viewData.helpUserName || '--' }}</van-cell>
<van-cell title="证明人">{{ viewData.certifierUserName || '--' }}</van-cell>
<!-- <van-cell title="证明人">{{ viewData.certifierUserName || '--' }}</van-cell> -->
<van-cell title="慰问类型">{{ viewData.typeName || '--' }}</van-cell>
<van-cell title="慰问金额">{{ viewData.money || '--' }}</van-cell>
<van-cell title="慰问时间">{{ viewData.occurTime || '--' }}</van-cell>
<van-cell title="收款账户">{{ viewData.bankCardNumber || '--' }}</van-cell>
<van-cell title="户名">{{ viewData.bankUserName || '--' }}</van-cell>
<van-cell class="condolence-info-long-cell" title="开户行">
<van-cell title="开户行">
{{ viewData.bankOfDeposit || '暂无' }}
</van-cell>
<template v-if="['2'].includes(viewData.typeCode)">
@@ -39,17 +39,18 @@ const condolenceInfo = {
<van-cell title="出院时间">{{ viewData.leaveHospitalTime || '--' }}</van-cell>
<van-cell title="当年第几次住院(次)">{{ viewData.thisYearHospitalizationNum || '--' }}</van-cell>
</template>
<van-cell class="condolence-info-long-cell" title="申请事由">
<van-cell title="申请事由">
{{ viewData.remark || '暂无' }}
</van-cell>
<van-cell class="condolence-info-long-cell" title="附件">
<file-preview :files="viewData.files" complete_result></file-preview>
<file-preview class="condolence-attachments" :files="viewData.files" complete_result></file-preview>
</van-cell>
<van-cell class="condolence-info-long-cell" title="签字">
<van-image
v-if="viewData.signature"
:src="viewData.signature"
class="condolence-signature-image"
fit="contain"
></van-image>
<span v-else>暂无签字</span>
</van-cell>
@@ -61,7 +62,7 @@ const condolenceInfo = {
:key="task.id || index"
class="condolence-info-card"
>
<h2 class="condolence-info-card__title">{{ task.displayName || '办理记录' }}</h2>
<h2 class="condolence-info-card__title">{{ ({'分工会审核':'一级审核','校工会预审':'二级审核','校工会审核':'三级审核'}[task.displayName] || task.displayName) || '办理记录' }}</h2>
<van-cell-group :border="false" v-if="task.ext && task.ext.isFirstTaskNode">
<van-cell title="申请用户">
{{ task.ext.initiatorName || '--' }}({{ task.ext.initiatorAccount || '--' }})
@@ -85,8 +86,11 @@ const condolenceInfo = {
:value="task.ext && task.ext.submitType"
></dict-tag>
</van-cell>
<van-cell class="condolence-info-long-cell" title="办理意见">
<div v-html="task.taskFormData && task.taskFormData.tf_opinion || '暂无'"></div>
<van-cell v-if="task.taskFormData && task.taskFormData.sign" title="审批签字">
<img :src="task.taskFormData.sign" class="condolence-approval-signature-image">
</van-cell>
<van-cell title="办理意见">
<div class="condolence-info-opinion" v-html="task.taskFormData && task.taskFormData.tf_opinion || '暂无'"></div>
</van-cell>
</van-cell-group>
</section>
@@ -55,7 +55,7 @@ layout("/layouts/platform_h5.html"){
<div id="app">
<div class="condolence-list-page">
<van-nav-bar title="分工会审核" left-text="返回" left-arrow @click-left="historyBack" fixed placeholder></van-nav-bar>
<van-nav-bar title="一级审核" left-text="返回" left-arrow @click-left="historyBack" fixed placeholder></van-nav-bar>
<van-sticky offset-top="46px">
<div class="condolence-list-sticky">
@@ -84,7 +84,7 @@ layout("/layouts/platform_h5.html"){
<van-skeleton title :row="5" animated></van-skeleton>
</div>
</div>
<table-list api="/platform/condolence/branchUnionApproval/pageData" :page_form.sync="pageForm" ref="tableListRef"
<table-list api="/platform/condolence/firstApproval/pageData" :page_form.sync="pageForm" ref="tableListRef"
v-show="!skeletonLoading" :show_loading_overlay="false" @ready="onReady"
@loading-change="handleListLoadingChange">
<template #header="{index,row}">
@@ -55,7 +55,7 @@ layout("/layouts/platform_h5.html"){
<div id="app">
<div class="condolence-list-page">
<van-nav-bar title="校工会预审" left-text="返回" left-arrow @click-left="historyBack" fixed placeholder></van-nav-bar>
<van-nav-bar title="二级审核" left-text="返回" left-arrow @click-left="historyBack" fixed placeholder></van-nav-bar>
<van-sticky offset-top="46px">
<div class="condolence-list-sticky">
@@ -84,7 +84,7 @@ layout("/layouts/platform_h5.html"){
<van-skeleton title :row="5" animated></van-skeleton>
</div>
</div>
<table-list api="/platform/condolence/schoolPrincipalApproval/pageData" :page_form.sync="pageForm" ref="tableListRef"
<table-list api="/platform/condolence/secondApproval/pageData" :page_form.sync="pageForm" ref="tableListRef"
v-show="!skeletonLoading" :show_loading_overlay="false" @ready="onReady"
@loading-change="handleListLoadingChange">
<template #header="{index,row}">
@@ -55,7 +55,7 @@ layout("/layouts/platform_h5.html"){
<div id="app">
<div class="condolence-list-page">
<van-nav-bar title="校工会审核" left-text="返回" left-arrow @click-left="historyBack" fixed placeholder></van-nav-bar>
<van-nav-bar title="三级审核" left-text="返回" left-arrow @click-left="historyBack" fixed placeholder></van-nav-bar>
<van-sticky offset-top="46px">
<div class="condolence-list-sticky">
@@ -84,7 +84,7 @@ layout("/layouts/platform_h5.html"){
<van-skeleton title :row="5" animated></van-skeleton>
</div>
</div>
<table-list api="/platform/condolence/schoolUnionApproval/pageData" :page_form.sync="pageForm" ref="tableListRef"
<table-list api="/platform/condolence/thirdApproval/pageData" :page_form.sync="pageForm" ref="tableListRef"
v-show="!skeletonLoading" :show_loading_overlay="false" @ready="onReady"
@loading-change="handleListLoadingChange">
<template #header="{index,row}">
@@ -94,6 +94,22 @@ layout("/layouts/platform_h5.html"){
color: #f06464;
}
.difficult-help-apply-form .difficult-help-apply-mode {
flex-wrap: nowrap;
gap: 8px;
}
.difficult-help-apply-form .difficult-help-apply-mode .van-radio {
flex-shrink: 0;
margin-right: 0;
}
.difficult-help-apply-form .difficult-help-apply-mode .van-radio__label {
margin-left: 4px;
font-size: 12px;
white-space: nowrap;
}
.difficult-help-apply-actions {
position: fixed;
z-index: 100;
@@ -308,10 +324,10 @@ layout("/layouts/platform_h5.html"){
required name="proxyLoginName"></van-field>
<van-field label="申请模式" name="mode" required :rules="[{ required: true }]">
<template #input>
<van-radio-group v-model="formData.mode" @change="modeChange" direction="horizontal">
<van-radio-group class="difficult-help-apply-mode" :value="formData.mode" @input="formData.mode !== $event && modeChange($event)" direction="horizontal" icon-size="14px">
<van-radio name="1" shape="square">本人申请</van-radio>
<van-radio
v-if="$auth.hasRoleOr('SYSADMIN, SCHOOL_UNION_ADMIN, BRANCH_UNION_CHAIRMAN, BRANCH_UNION_OPERATOR')"
v-if="canApplyForOthers"
name="2" shape="square">替他人申请
</van-radio>
</van-radio-group>
@@ -707,11 +723,16 @@ layout("/layouts/platform_h5.html"){
return false;
}
},
computed: {
canApplyForOthers() {
return this.$auth.hasRoleOr('SYSADMIN, SCHOOL_UNION_ADMIN, BRANCH_UNION_CHAIRMAN, BRANCH_UNION_OPERATOR')
}
},
methods: {
historyBack,
// 替他人申请时由只读字段主动打开受助人选择,已有业务数据时保持原禁止更换规则。
openRecipientPopup() {
if (this.formData.mode !== "2" || this.formData.id) return
if (this.formData.mode !== "2" || this.formData.id || !this.canApplyForOthers) return
this.$set(this, "recipientSearchKey", "")
this.$set(this, "recipientHasSearched", false)
this.$set(this, "subsidizedList", [])
@@ -975,7 +996,7 @@ layout("/layouts/platform_h5.html"){
* recipientSearchKey 传搜索关键词;接口返回用户数组,列表仅展示姓名和单位。
*/
queryRecipients() {
if (this.formData.mode !== "2") {
if (this.formData.mode !== "2" || !this.canApplyForOthers) {
return
}
const key = (this.recipientSearchKey || "").trim()
@@ -1024,6 +1045,7 @@ layout("/layouts/platform_h5.html"){
this.$set(this.formData, "userName", null)
this.$set(this.formData, "loginName", null)
this.$set(this.formData, "sex", null)
this.$set(this.formData, "birthday", null)
this.$set(this.formData, "unitId", null)
this.$set(this.formData, "unitName", null)
this.$set(this.formData, "unionId", null)
@@ -1088,6 +1110,8 @@ layout("/layouts/platform_h5.html"){
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)
@@ -167,11 +167,11 @@
}
.difficult-help-info-card .van-cell__title {
width: 112px;
width: 102px;
color: #596779;
font-size: 12px;
line-height: 24px;
flex: 0 0 112px;
flex: 0 0 102px;
}
.difficult-help-info-card .van-cell__value {
@@ -184,16 +184,8 @@
}
.difficult-help-info-long-cell {
display: block;
}
.difficult-help-info-long-cell .van-cell__title {
width: auto;
max-width: 100%;
}
.difficult-help-info-long-cell .van-cell__value {
margin-top: 7px;
display: flex;
align-items: flex-start;
}
.difficult-help-info-pre-line {
@@ -165,11 +165,11 @@ const INFO = {
:class="{'difficult-help-info-card': fullScreen}"
>
<h2 v-if="fullScreen" class="difficult-help-info-card__title">
{{ task.displayName || '办理记录' }}
{{ ({'分工会审核':'一级审核','二级党组织审核':'二级审核','校工会审核':'三级审核'}[task.displayName] || task.displayName) || '办理记录' }}
</h2>
<van-cell-group
v-if="task.ext && task.ext.isFirstTaskNode"
:title="fullScreen ? '' : task.displayName"
:title="fullScreen ? '' : ({'分工会审核':'一级审核','二级党组织审核':'二级审核','校工会审核':'三级审核'}[task.displayName] || task.displayName)"
:border="!fullScreen"
>
<van-cell title="申请用户">
@@ -183,7 +183,7 @@ const INFO = {
></dict-tag>
</van-cell>
</van-cell-group>
<van-cell-group v-else :title="fullScreen ? '' : task.displayName" :border="!fullScreen">
<van-cell-group v-else :title="fullScreen ? '' : ({'分工会审核':'一级审核','二级党组织审核':'二级审核','校工会审核':'三级审核'}[task.displayName] || task.displayName)" :border="!fullScreen">
<van-cell title="办理用户">
{{ task.taskFormData && task.taskFormData.userName || '--' }}{{ task.taskFormData && task.taskFormData.loginName ? '(' + task.taskFormData.loginName + ')' : '' }}
</van-cell>
@@ -9,7 +9,7 @@ layout("/layouts/platform_h5.html"){
</style>
<div id="app">
<div class="difficult-help-approval-page">
<van-nav-bar title="帮扶分工会审核" left-text="返回" left-arrow @click-left="historyBack" placeholder fixed></van-nav-bar>
<van-nav-bar title="一级审核" left-text="返回" left-arrow @click-left="historyBack" placeholder fixed></van-nav-bar>
<van-sticky offset-top="46px">
<div class="difficult-help-approval-sticky">
<van-search
@@ -61,7 +61,7 @@ layout("/layouts/platform_h5.html"){
<van-skeleton title :row="5" animated></van-skeleton>
</div>
</div>
<table-list api="/platform/difficultHelp/branchUnionApproval/pageData" :page_form.sync="pageForm" ref="tableListRef" title="userName"
<table-list api="/platform/difficultHelp/firstApproval/pageData" :page_form.sync="pageForm" ref="tableListRef" title="userName"
v-show="!skeletonLoading" :show_loading_overlay="false" @ready="onReady"
@loading-change="handleListLoadingChange">
<template #header="{index,row}">
@@ -318,7 +318,7 @@ layout("/layouts/platform_h5.html"){
</style>
<div id="app">
<div class="difficult-help-list-page">
<van-nav-bar title="帮扶申请记录" left-text="返回" left-arrow @click-left="historyBack" placeholder fixed></van-nav-bar>
<van-nav-bar title="我的申请" left-text="返回" left-arrow @click-left="historyBack" placeholder fixed></van-nav-bar>
<van-sticky offset-top="46px">
<div class="difficult-help-list-sticky">
<van-search
@@ -388,16 +388,16 @@ layout("/layouts/platform_h5.html"){
<van-icon name="eye-o"></van-icon>
<span>查看</span>
</div>
<div class="action-btn" v-if="row.taskKey === 'startTask' || !row.instanceId"
<div class="action-btn" v-if="row.createdBy === $store.state.user.id && (row.taskKey === 'startTask' || !row.instanceId)"
@click="onEdit(row)">
<van-icon name="edit"></van-icon>
<span>编辑</span>
</div>
<div class="action-btn delete" v-if="row.canRevoke" @click="onRevoke(row)">
<div class="action-btn delete" v-if="row.createdBy === $store.state.user.id && row.canRevoke" @click="onRevoke(row)">
<van-icon name="revoke"></van-icon>
<span>撤回</span>
</div>
<div class="action-btn delete" v-if="row.taskKey === 'startTask' || !row.instanceId"
<div class="action-btn delete" v-if="row.createdBy === $store.state.user.id && (row.taskKey === 'startTask' || !row.instanceId)"
@click="onDelete(row.id)">
<van-icon name="delete-o"></van-icon>
<span>删除</span>
@@ -9,7 +9,7 @@ layout("/layouts/platform_h5.html"){
</style>
<div id="app">
<div class="difficult-help-approval-page">
<van-nav-bar title="帮扶二级党组织审核" left-text="返回" left-arrow @click-left="historyBack" placeholder fixed></van-nav-bar>
<van-nav-bar title="二级审核" left-text="返回" left-arrow @click-left="historyBack" placeholder fixed></van-nav-bar>
<van-sticky offset-top="46px">
<div class="difficult-help-approval-sticky">
<van-search
@@ -61,7 +61,7 @@ layout("/layouts/platform_h5.html"){
<van-skeleton title :row="5" animated></van-skeleton>
</div>
</div>
<table-list api="/platform/difficultHelp/unionLeaderApproval/pageData" :page_form.sync="pageForm" ref="tableListRef" title="userName"
<table-list api="/platform/difficultHelp/secondApproval/pageData" :page_form.sync="pageForm" ref="tableListRef" title="userName"
v-show="!skeletonLoading" :show_loading_overlay="false" @ready="onReady"
@loading-change="handleListLoadingChange">
<template #header="{index,row}">
@@ -9,7 +9,7 @@ layout("/layouts/platform_h5.html"){
</style>
<div id="app">
<div class="difficult-help-approval-page">
<van-nav-bar title="帮扶校工会审核" left-text="返回" left-arrow @click-left="historyBack" placeholder fixed></van-nav-bar>
<van-nav-bar title="三级审核" left-text="返回" left-arrow @click-left="historyBack" placeholder fixed></van-nav-bar>
<van-sticky offset-top="46px">
<div class="difficult-help-approval-sticky">
<van-search
@@ -61,7 +61,7 @@ layout("/layouts/platform_h5.html"){
<van-skeleton title :row="5" animated></van-skeleton>
</div>
</div>
<table-list api="/platform/difficultHelp/schoolUnionApproval/pageData" :page_form.sync="pageForm" ref="tableListRef" title="userName"
<table-list api="/platform/difficultHelp/thirdApproval/pageData" :page_form.sync="pageForm" ref="tableListRef" title="userName"
v-show="!skeletonLoading" :show_loading_overlay="false" @ready="onReady"
@loading-change="handleListLoadingChange">
<template #header="{index,row}">
@@ -328,7 +328,7 @@ layout("/layouts/platform_h5.html"){
// 先保存级别和金额,再提交 processTaskId、审批意见及流程提交类型。
submitTaskAction() {
this.$set(this, "formLoading", true)
this.$axios.post("/platform/difficultHelp/schoolUnionApproval/save", {
this.$axios.post("/platform/difficultHelp/thirdApproval/save", {
data: JSON.stringify({...this.formData})
})
.then((saveRes) => {
@@ -174,7 +174,7 @@ layout("/layouts/platform_h5.html"){
display: flex;
min-width: 0;
margin-top: 10px;
padding-top: 2px;
padding-top: 10px;
align-items: center;
border-top: 1px solid #edf1f6;
}
@@ -194,18 +194,22 @@ layout("/layouts/platform_h5.html"){
}
.welfare-list-card__choices .welfare-inline-selection {
width: 82px;
min-width: 82px;
min-height: 112px;
padding: 8px 0;
flex: 0 0 clamp(82px, 31%, 112px);
min-width: 0;
padding: 0;
flex-direction: column;
align-items: stretch;
border-bottom: 0;
overflow: hidden;
border: 0;
border-radius: 8px;
background: #edf4fc;
}
.welfare-list-card__choices .welfare-inline-selection__image {
width: 82px;
height: 64px;
display: block;
width: 100%;
height: auto;
aspect-ratio: 4 / 3;
margin-right: 0;
}
@@ -223,19 +227,22 @@ layout("/layouts/platform_h5.html"){
}
.welfare-list-card__choices .welfare-inline-selection__image--name span {
display: -webkit-box;
min-width: 0;
overflow: hidden;
text-overflow: ellipsis;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
white-space: nowrap;
}
.welfare-list-card__choices .welfare-inline-selection__content {
margin-top: 6px;
width: 100%;
padding: 3px 6px;
box-sizing: border-box;
text-align: center;
}
.welfare-list-card__choices .welfare-inline-selection__name {
font-weight: 400;
line-height: 16px;
}
.welfare-list-card__choices .welfare-inline-selection__meta {
@@ -486,7 +493,7 @@ layout("/layouts/platform_h5.html"){
.welfare-inline-selection__name {
overflow: hidden;
color: #263548;
font-size: 14px;
font-size: 12px;
line-height: 21px;
font-weight: 600;
text-overflow: ellipsis;
File diff suppressed because one or more lines are too long
@@ -227,8 +227,16 @@ layout("/layouts/platform_h5.html"){
></van-card>
</van-cell>
<div v-if="projectInfo.provideMode === 3" style="padding: 8px 16px">
<div>领取方式</div>
<van-radio-group v-model="deliveryMethod" direction="horizontal">
<van-radio name="pickup">学校自提</van-radio>
<van-radio name="mail">邮寄</van-radio>
</van-radio-group>
<div style="margin-top: 8px; padding: 8px; background: #fff3e8; color: #9c451c">超出江浙沪不包邮,超出部分自理,具体金额联系供应商。</div>
</div>
<!--邮寄到家 填写收货地址-->
<van-cell @click="selectAddressPopup = true" class="confirmWelfareCell" is-link v-if="projectInfo.provideMode===3">
<van-cell @click="selectAddressPopup = true" class="confirmWelfareCell" is-link v-if="projectInfo.provideMode === 3 && deliveryMethod === 'mail'">
<van-icon class="van-cell__left-icon" color="red" name="info" slot="icon"></van-icon>
<div slot="title" style="font-weight: bold; font-size: 15px">收货地址</div>
<template #label>
@@ -287,6 +295,7 @@ layout("/layouts/platform_h5.html"){
descPopup: false,
confirmPopup: false,
selectAddressPopup: false,
deliveryMethod: "",
selectAddress: null,
addressList: [],
userSign: ""
@@ -427,7 +436,11 @@ layout("/layouts/platform_h5.html"){
//回显用户的地址
if (this.projectInfo.provideMode === 3 && this.isSelect && this.userSelection) {
this.selectAddress = this.userSelection[0].receiveAddress
const receiveAddress = this.userSelection[0].receiveAddress
if (receiveAddress) {
this.deliveryMethod = receiveAddress === "学校自提" ? "pickup" : "mail"
}
this.selectAddress = this.deliveryMethod === "mail" ? receiveAddress : null
}
//回显用户签名
@@ -466,8 +479,12 @@ layout("/layouts/platform_h5.html"){
},
//提交选择
async submitSelect() {
if (this.projectInfo.provideMode === 3 && !this.deliveryMethod) {
this.$toast("请选择领取方式")
return
}
if (this.projectInfo.provideMode === 3) {
if (this.selectAddress == null || this.selectAddress === "") {
if (this.deliveryMethod === "mail" && !this.selectAddress) {
this.$toast("请填写您的收货地址")
return
}
@@ -491,7 +508,7 @@ layout("/layouts/platform_h5.html"){
welfareId: this.projectInfo.id,
subjectId: v.subjectId,
selectOptionId: v.id,
receiveAddress: this.selectAddress,
receiveAddress: this.deliveryMethod === "pickup" ? "学校自提" : this.selectAddress,
selectNum: v.selectNum,
userSign: this.userSign
}