Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
22a18986d0 | ||
|
|
d6e3815b3d | ||
|
|
1ddfa7e609 | ||
|
|
e7fbf4021e | ||
|
|
c21e92e418 | ||
|
|
134a11da09 | ||
|
|
506121ac5f | ||
|
|
8c401a5132 | ||
|
|
4d9fd57d6c | ||
|
|
fd117b4fc3 | ||
|
|
060e8d5bc7 | ||
|
|
894c720bb8 | ||
|
|
39ee74f0a9 | ||
|
|
7faa2730b5 | ||
|
|
fa019786d6 | ||
|
|
ffe782e538 | ||
|
|
3c65c9d561 | ||
|
|
89a77c41af | ||
|
|
0f460e6b1a | ||
|
|
d1050db6b3 | ||
|
|
e3f32fe72b | ||
|
|
b885f449c7 | ||
|
|
3f441828a1 |
@@ -49,4 +49,7 @@ Thumbs.db
|
||||
.trae/pr-creator/SKILL.md
|
||||
.trae/update-docs/SKILL.md
|
||||
.trae/webapp-testing/SKILL.md
|
||||
outputs
|
||||
outputs
|
||||
|
||||
semgrep.json
|
||||
trivy.json
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
@@ -147,12 +147,9 @@ public class SysLoginController {
|
||||
// 解密密码
|
||||
LoginRsaKey rsaKey = LOGIN_RSA_KEY_RING.getPrivateKey(keyId);
|
||||
if (rsaKey == null) {
|
||||
throw new BaseException("Login key expired, please refresh the login page");
|
||||
throw new BaseException("登录凭证已过期,请刷新登录页面。");
|
||||
}
|
||||
String decryptPwd = RsaUtils.decrypt(password, rsaKey.privateKey);
|
||||
if (decryptPwd == null) {
|
||||
throw new BaseException("用户登录失败");
|
||||
}
|
||||
decryptPwd = Base64Encoder.encode(decryptPwd);
|
||||
|
||||
// 用户名密码校验
|
||||
|
||||
@@ -84,6 +84,7 @@ public class SysUnitController {
|
||||
// cnd.and("parentId", "is not", null).andEX("unitLevel", "=", unitLevel).asc("unitLevel").asc("unitcode");
|
||||
cnd.and("parentId", "is not", null);
|
||||
cnd.andEX("parentId", "=", unitId);
|
||||
cnd.andEX("id", "!=", unitId);
|
||||
// cnd.and("unitTypeCode", "=", "1");
|
||||
cnd.asc("unitcode");
|
||||
cnd.and(Cnd.likeEX("name", unitName));
|
||||
@@ -313,15 +314,17 @@ public class SysUnitController {
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.asc("unitcode");
|
||||
List<Sys_unit> list = sysUnitService.query(cnd);
|
||||
boolean defaultRoot = "0".equals(rootId);
|
||||
boolean hasDefaultRoot = defaultRoot && list.stream().anyMatch(unit -> rootId.equals(unit.getId()));
|
||||
|
||||
List<TreeNode<String>> nodeList = CollUtil.newArrayList();
|
||||
for (int i = 0; i < list.size(); i++) {
|
||||
Sys_unit unit = list.get(i);
|
||||
/*
|
||||
* 单位根节点存在 id 与 parentId 都为 0 的自引用数据。
|
||||
* 构建树时把当前查询根挂到虚拟根下,避免“中国地质大学”和 parentId=0 的学院被构造成同级。
|
||||
*/
|
||||
String parentId = rootId.equals(unit.getId()) ? virtualRootId : unit.getParentId();
|
||||
String parentId = unit.getParentId();
|
||||
if (rootId.equals(unit.getId()) || (defaultRoot && (StrUtil.isBlank(parentId)
|
||||
|| (!hasDefaultRoot && rootId.equals(parentId))))) {
|
||||
parentId = virtualRootId;
|
||||
}
|
||||
nodeList.add(new TreeNode<>(unit.getId(), parentId, unit.getName(), i)
|
||||
.setExtra(
|
||||
Map.of(
|
||||
|
||||
@@ -98,6 +98,7 @@ public class Sys_user extends BaseModel implements Serializable {
|
||||
@Column
|
||||
@Comment("证件类型")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 30)
|
||||
@DataCenterColumn(name = "证件类型", key = "SFZJLXDM", dict = "USER_ID_CARD_TYPE")
|
||||
private String idCardType;
|
||||
|
||||
@Column
|
||||
@@ -133,6 +134,7 @@ public class Sys_user extends BaseModel implements Serializable {
|
||||
@Column
|
||||
@Comment("岗位类别")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 50)
|
||||
@DataCenterColumn(name = "聘岗类型", key = "ZYJSGWLBDMMC")
|
||||
private String jobCategory;
|
||||
|
||||
@Column
|
||||
@@ -222,7 +224,7 @@ public class Sys_user extends BaseModel implements Serializable {
|
||||
private Integer pendingConfirmStatus;
|
||||
|
||||
@Column
|
||||
@Comment("编制类别码")
|
||||
@Comment("编制类别")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 30)
|
||||
@DataCenterColumn(name = "编制类别", key = "BZLBDMMC")
|
||||
private String preparedBy;
|
||||
@@ -295,6 +297,7 @@ public class Sys_user extends BaseModel implements Serializable {
|
||||
@Comment("是否双肩挑")
|
||||
@ColDefine(type = ColType.BOOLEAN)
|
||||
@Default(value = "0")
|
||||
@DataCenterColumn(name = "是否双肩挑", key = "SFSJT")
|
||||
private Boolean manyUnit;
|
||||
|
||||
@Column
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.budwk.app.sys.models;
|
||||
|
||||
import com.budwk.app.sys.annotation.DataCenterColumn;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.experimental.Accessors;
|
||||
@@ -31,6 +32,42 @@ public class Sys_user_source extends Sys_user {
|
||||
@ColDefine(type = ColType.VARCHAR, width = 255)
|
||||
private String unitName;
|
||||
|
||||
@Column
|
||||
@Comment("最高学历代码")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 20)
|
||||
@DataCenterColumn(name = "最高学历代码", key = "ZGXLDM")
|
||||
private String educationCode;
|
||||
|
||||
@Column
|
||||
@Comment("最高学位代码")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 50)
|
||||
@DataCenterColumn(name = "最高学位代码", key = "XWDM")
|
||||
private String academicDegreeCode;
|
||||
|
||||
@Column
|
||||
@Comment("编制类别代码")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 30)
|
||||
@DataCenterColumn(name = "编制类别代码", key = "BZLBDM")
|
||||
private String preparedByCode;
|
||||
|
||||
@Column
|
||||
@Comment("聘岗类型代码")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 50)
|
||||
@DataCenterColumn(name = "聘岗类型代码", key = "ZYJSGWLBDM")
|
||||
private String jobCategoryCode;
|
||||
|
||||
@Column
|
||||
@Comment("专业技术职务代码")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 50)
|
||||
@DataCenterColumn(name = "专业技术职务代码", key = "ZYJSZWDM")
|
||||
private String professionalTitleCode;
|
||||
|
||||
@Column
|
||||
@Comment("当前状态代码")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 30)
|
||||
@DataCenterColumn(name = "当前状态代码", key = "DQZTDM")
|
||||
private String userStateCode;
|
||||
|
||||
@Column
|
||||
@Comment("拉取时间")
|
||||
@ColDefine(type = ColType.DATETIME)
|
||||
|
||||
@@ -15,6 +15,8 @@ public interface SysDataUserPullService extends BaseService<Sys_user_source> {
|
||||
*/
|
||||
Date pull();
|
||||
|
||||
NutMap queryUsers(String zgh, int pageNumber, int pageSize);
|
||||
|
||||
/**
|
||||
* 拉取人员博士后的信息
|
||||
*/
|
||||
|
||||
@@ -7,4 +7,15 @@ import com.budwk.app.sys.param.SysDataUserUpdateParam;
|
||||
*/
|
||||
public interface SysDataUserUpdateService {
|
||||
String update(SysDataUserUpdateParam updateParam);
|
||||
|
||||
static boolean qualifiesAsUnionMember(String personType, String userState) {
|
||||
if (!"在岗".equals(userState) || personType == null) {
|
||||
return false;
|
||||
}
|
||||
return switch (personType) {
|
||||
case "在编", "兰溪编制", "聘用合同制(享受人事代理待遇)",
|
||||
"聘用合同制", "聘用制专家", "人事代理" -> true;
|
||||
default -> false;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -164,6 +164,9 @@ public class SysDataUserAllUpdateServiceImpl implements SysDataUserUpdateService
|
||||
// 创建用户对象
|
||||
Sys_user u = new Sys_user();
|
||||
BeanUtils.copyProperties(source, u);
|
||||
if (SysDataUserUpdateService.qualifiesAsUnionMember(u.getPersonType(), u.getUserState())) {
|
||||
u.setMember(true);
|
||||
}
|
||||
|
||||
if (user == null) {
|
||||
// 新增用户,初始化数据
|
||||
|
||||
@@ -123,6 +123,9 @@ public class SysDataUserIncrUpdateServiceImpl implements SysDataUserUpdateServic
|
||||
//加入到系统用户表
|
||||
List<Sys_user> sysUsers = BeanUtil.copyToList(userSources, Sys_user.class);
|
||||
for (Sys_user sysUser : sysUsers) {
|
||||
if (SysDataUserUpdateService.qualifiesAsUnionMember(sysUser.getPersonType(), sysUser.getUserState())) {
|
||||
sysUser.setMember(true);
|
||||
}
|
||||
//重新设置
|
||||
sysUser.setId(R.UU32());
|
||||
String salt = R.UU32();
|
||||
|
||||
@@ -98,7 +98,7 @@ public class SysDataUserPullServiceImpl extends BaseServiceImpl<Sys_user_source>
|
||||
synchronized (SysDataUserPullServiceImpl.class) {
|
||||
if (fieldMappings == null) {
|
||||
List<FieldMapping> mappings = new ArrayList<>();
|
||||
Field[] fields = Sys_user.class.getDeclaredFields();
|
||||
Field[] fields = cn.hutool.core.util.ReflectUtil.getFields(Sys_user_source.class);
|
||||
for (Field field : fields) {
|
||||
DataCenterColumn annotation = field.getAnnotation(DataCenterColumn.class);
|
||||
if (annotation != null) {
|
||||
@@ -200,6 +200,8 @@ public class SysDataUserPullServiceImpl extends BaseServiceImpl<Sys_user_source>
|
||||
mapping.field.set(sysUser, raw.getStr(mapping.key));
|
||||
}
|
||||
}
|
||||
} else if (mapping.field.getType() == Boolean.class) {
|
||||
mapping.field.set(sysUser, raw.getBool(mapping.key));
|
||||
} else if (mapping.field.getType() == Date.class) {
|
||||
String dateText = StrUtil.trim(raw.getStr(mapping.key));
|
||||
if (StrUtil.isNotBlank(dateText)) {
|
||||
@@ -332,12 +334,39 @@ public class SysDataUserPullServiceImpl extends BaseServiceImpl<Sys_user_source>
|
||||
return url;
|
||||
}
|
||||
|
||||
@Override
|
||||
public NutMap queryUsers(String zgh, int pageNumber, int pageSize) {
|
||||
if (pageNumber < 1 || pageSize < 1 || pageSize > 200) {
|
||||
throw new BaseException("分页参数不合法");
|
||||
}
|
||||
if (!dataCenterProperties.isTokenEnabled()) {
|
||||
JSONObject response = DataCenterUtil.queryPage(getDmpUrl(DMP_TEACHER_KEY), zgh, pageNumber, pageSize);
|
||||
JSONObject pageInfo = response.getJSONObject("pageInfo");
|
||||
JSONArray data = response.getJSONArray("dataSet");
|
||||
if (pageInfo == null || pageInfo.getLong("total") == null || data == null) {
|
||||
throw new BaseException("数据中心接口未返回有效的分页数据");
|
||||
}
|
||||
return NutMap.NEW().addv("list", data).addv("totalCount", pageInfo.getLong("total"));
|
||||
}
|
||||
String accessToken = getDmpAccessToken();
|
||||
List<JSONObject> records = new ArrayList<>();
|
||||
records.addAll(pullDmpUsers(getDmpUrl(DMP_TEACHER_KEY), accessToken, "在岗教职工", StrUtil.trim(zgh)));
|
||||
records.addAll(pullDmpUsers(getDmpUrl(DMP_DISPATCH_KEY), accessToken, "在岗劳务派遣", StrUtil.trim(zgh)));
|
||||
int from = (int) Math.min((long) (pageNumber - 1) * pageSize, records.size());
|
||||
return NutMap.NEW().addv("list", records.subList(from, Math.min(from + pageSize, records.size())))
|
||||
.addv("totalCount", records.size());
|
||||
}
|
||||
|
||||
/**
|
||||
* 分页拉取单个人员接口数据。
|
||||
* 入参 url 为人员接口地址,accessToken 为信息中心令牌,sourceName 用于日志区分接口来源。
|
||||
* 返回值为该接口所有分页合并后的原始人员 JSON 列表。
|
||||
*/
|
||||
private List<JSONObject> pullDmpUsers(String url, String accessToken, String sourceName) {
|
||||
return pullDmpUsers(url, accessToken, sourceName, null);
|
||||
}
|
||||
|
||||
private List<JSONObject> pullDmpUsers(String url, String accessToken, String sourceName, String zgh) {
|
||||
List<JSONObject> rawDataList = new ArrayList<>();
|
||||
int page = 1;
|
||||
int maxPage = 1;
|
||||
@@ -347,11 +376,14 @@ public class SysDataUserPullServiceImpl extends BaseServiceImpl<Sys_user_source>
|
||||
// 信息中心接口单页最多返回1000条,按page循环拉完当前接口全部数据。
|
||||
HttpRequest httpRequest = HttpUtil.createPost(url);
|
||||
httpRequest.header(Header.CONTENT_TYPE, "application/json");
|
||||
httpRequest.body(JSONUtil.toJsonStr(Map.of(
|
||||
"access_token", accessToken,
|
||||
"per_page", String.valueOf(DMP_PAGE_SIZE),
|
||||
"page", String.valueOf(page)
|
||||
)));
|
||||
Map<String, Object> body = new HashMap<>();
|
||||
body.put("access_token", accessToken);
|
||||
body.put("per_page", String.valueOf(DMP_PAGE_SIZE));
|
||||
body.put("page", String.valueOf(page));
|
||||
if (StrUtil.isNotBlank(zgh)) {
|
||||
body.put("zgh", zgh);
|
||||
}
|
||||
httpRequest.body(JSONUtil.toJsonStr(body));
|
||||
|
||||
log.info("请求{}人员数据,第{}页: {}", sourceName, page, httpRequest);
|
||||
String resBody = httpRequest.execute().body();
|
||||
|
||||
@@ -14,6 +14,7 @@ import com.budwk.app.sys.models.Sys_unit;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@@ -40,7 +41,11 @@ public class DataCenterUtil {
|
||||
}
|
||||
|
||||
public static List<JSONObject> pullData(String url) {
|
||||
JSONObject firstResponse = requestData(url, Map.of("", ""));
|
||||
return pullData(url, Map.of("", ""));
|
||||
}
|
||||
|
||||
public static List<JSONObject> pullData(String url, Map<String, ?> params) {
|
||||
JSONObject firstResponse = requestData(url, params);
|
||||
JSONObject pageInfo = firstResponse.getJSONObject("pageInfo");
|
||||
Integer pages = pageInfo == null ? null : pageInfo.getInt("pages");
|
||||
if (pages == null || pages < 0) {
|
||||
@@ -48,7 +53,9 @@ public class DataCenterUtil {
|
||||
}
|
||||
List<JSONObject> records = new ArrayList<>();
|
||||
for (int page = 1; page <= pages; page++) {
|
||||
JSONObject response = requestData(url, Map.of("pageNum", page));
|
||||
Map<String, Object> body = new HashMap<>(params);
|
||||
body.put("pageNum", page);
|
||||
JSONObject response = requestData(url, body);
|
||||
JSONArray data = response.getJSONArray("dataSet");
|
||||
if (data == null) {
|
||||
throw new BaseException("数据中心接口第{}页缺少 dataSet", page);
|
||||
@@ -58,6 +65,16 @@ public class DataCenterUtil {
|
||||
return records;
|
||||
}
|
||||
|
||||
public static JSONObject queryPage(String url, String zgh, int pageNumber, int pageSize) {
|
||||
Map<String, Object> body = new HashMap<>();
|
||||
body.put("pageNum", pageNumber);
|
||||
body.put("pageSize", pageSize);
|
||||
if (StrUtil.isNotBlank(zgh)) {
|
||||
body.put("zgh", zgh.trim());
|
||||
}
|
||||
return requestData(url, body);
|
||||
}
|
||||
|
||||
private static JSONObject requestData(String url, Map<String, ?> body) {
|
||||
try (HttpResponse response = HttpUtil.createPost(url)
|
||||
.body(JSONUtil.toJsonStr(body)).execute()) {
|
||||
|
||||
@@ -10,6 +10,8 @@ import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Dao;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.ioc.impl.PropertiesProxy;
|
||||
import org.nutz.lang.Strings;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@@ -24,6 +26,8 @@ public class SmsMessageSendStrategy implements GlobalMessageSendStrategy {
|
||||
private Dao dao;
|
||||
@Inject
|
||||
private SmsService smsService;
|
||||
@Inject
|
||||
private PropertiesProxy conf;
|
||||
|
||||
@Override
|
||||
public GlobalMessageChannel getChannel() {
|
||||
@@ -118,7 +122,9 @@ public class SmsMessageSendStrategy implements GlobalMessageSendStrategy {
|
||||
|
||||
// 限制短信长度(一般短信限制70个字符)
|
||||
String smsContent = sb.toString();
|
||||
if (smsContent.length() > 67) {
|
||||
boolean intelligenceMode = Strings.isNotBlank(conf.get("custom.msg.platform.app-id"))
|
||||
&& conf.getBoolean("msg.platform.IntelligenceMode", false);
|
||||
if (!intelligenceMode && smsContent.length() > 67) {
|
||||
smsContent = smsContent.substring(0, 67) + "...";
|
||||
}
|
||||
|
||||
|
||||
@@ -10,6 +10,8 @@ import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Dao;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.ioc.impl.PropertiesProxy;
|
||||
import org.nutz.lang.Strings;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@@ -24,12 +26,20 @@ public class WechatMessageSendStrategy implements GlobalMessageSendStrategy {
|
||||
private Dao dao;
|
||||
@Inject
|
||||
private SmsService smsService;
|
||||
@Inject
|
||||
private PropertiesProxy conf;
|
||||
|
||||
@Override
|
||||
public GlobalMessageChannel getChannel() {
|
||||
return GlobalMessageChannel.WECHAT;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isEnabled() {
|
||||
return !(Strings.isNotBlank(conf.get("custom.msg.platform.app-id"))
|
||||
&& conf.getBoolean("msg.platform.IntelligenceMode", false));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean supportAsync() {
|
||||
return true;
|
||||
|
||||
@@ -2,6 +2,7 @@ package com.budwk.app.zhgh.dayofficework.outlay.outlayManage.service;
|
||||
|
||||
import com.budwk.app.base.service.BaseService;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
|
||||
/**
|
||||
* 分工会预算统计服务。
|
||||
@@ -28,4 +29,6 @@ public interface OutlayManageUnionStatisticsService extends BaseService {
|
||||
* @return 包含各项收入、支出和余额字段的合计数据
|
||||
*/
|
||||
NutMap queryIncomeExpenseSummary(Integer year, String unionId);
|
||||
|
||||
Sql buildIncomeExpenseSql(Integer year, String unionId);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,295 @@
|
||||
package com.budwk.app.zhgh.dayofficework.outlay.outlayManage.service.impl;
|
||||
|
||||
import cn.dev33.satoken.stp.StpUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.budwk.app.base.result.Result;
|
||||
import com.budwk.app.base.service.impl.BaseServiceImpl;
|
||||
import com.budwk.app.zhgh.dayofficework.outlay.outlayManage.union.model.OutlayManageUnion;
|
||||
import com.budwk.app.zhgh.dayofficework.outlay.outlayManage.union.vo.OutlayUnionAllocateImportVo;
|
||||
import org.nutz.dao.Dao;
|
||||
import org.nutz.dao.Sqls;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.json.Json;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
import java.math.BigDecimal;
|
||||
import java.time.Year;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.TreeMap;
|
||||
import java.util.UUID;
|
||||
|
||||
@IocBean(args = {"refer:dao"})
|
||||
public class OutlayAnnualAllocateService extends BaseServiceImpl<OutlayManageUnion> {
|
||||
public OutlayAnnualAllocateService(Dao dao) { super(dao); }
|
||||
|
||||
public Sql sql(String text, Object... args) {
|
||||
Sql sql = Sqls.create(text);
|
||||
for (int i = 0; i < args.length; i += 2) sql.params().set(args[i].toString(), args[i + 1]);
|
||||
return sql;
|
||||
}
|
||||
|
||||
private NutMap first(Sql sql) {
|
||||
List<NutMap> rows = listMap(sql);
|
||||
return rows.isEmpty() ? null : rows.get(0);
|
||||
}
|
||||
|
||||
private String table(String type) {
|
||||
if ("base".equals(type)) return "outlay_annual_base";
|
||||
if ("special".equals(type)) return "outlay_annual_special";
|
||||
throw new IllegalArgumentException("经费类型错误");
|
||||
}
|
||||
|
||||
public Sql pageSql(String type, Integer year, String unionId, String projectName, String amountMatch) {
|
||||
String table = table(type);
|
||||
return sql("SELECT a.*, un.name unionName, creator.username operatorName FROM " + table +
|
||||
" a LEFT JOIN sys_union un ON un.id=a.unionId LEFT JOIN sys_user creator ON creator.id=a.updatedBy " +
|
||||
"WHERE a.year=@year AND (@unionId='' OR a.unionId=@unionId)" +
|
||||
("special".equals(type) ? " AND (@projectName='' OR LOCATE(@projectName,a.projectName)>0)" : " AND a.status<>2" + amountMatchCondition(amountMatch)) +
|
||||
" ORDER BY un.unionCode,a.createdAt DESC",
|
||||
"year", year, "unionId", StrUtil.blankToDefault(unionId, ""),
|
||||
"projectName", StrUtil.blankToDefault(StrUtil.trim(projectName), ""));
|
||||
}
|
||||
|
||||
private String amountMatchCondition(String amountMatch) {
|
||||
if ("equal".equals(amountMatch)) return " AND a.calculatedMoney=a.allocateMoney";
|
||||
if ("different".equals(amountMatch)) return " AND a.calculatedMoney<>a.allocateMoney";
|
||||
return "";
|
||||
}
|
||||
|
||||
public Result importBaseAmounts(Integer year, String unionId, List<OutlayUnionAllocateImportVo> items, String remark) {
|
||||
if (year == null || items == null || items.isEmpty() || StrUtil.isBlank(remark) || remark.length() > 1000) {
|
||||
return Result.error("请选择年度和导入文件,并填写1000字以内的调整说明");
|
||||
}
|
||||
Map<String, NutMap> records = new TreeMap<>();
|
||||
Map<String, BigDecimal> amounts = new TreeMap<>();
|
||||
for (OutlayUnionAllocateImportVo item : items) {
|
||||
if (item == null || StrUtil.isBlank(item.getUnionCode()) || !moneyValid(item.getAllocateMoney())) {
|
||||
return Result.error("工会编码和分配额度必填,金额须为有效的非负数且最多两位小数");
|
||||
}
|
||||
List<NutMap> matches = listMap(sql("""
|
||||
SELECT a.id,a.unionId,a.standard,a.version FROM outlay_annual_base a
|
||||
JOIN sys_union un ON un.id=a.unionId
|
||||
WHERE a.year=@year AND a.status IN (0,1) AND un.unionCode=@code AND (@unionId='' OR a.unionId=@unionId)
|
||||
""", "year", year, "code", item.getUnionCode().trim(), "unionId", StrUtil.blankToDefault(unionId, "")));
|
||||
if (matches.size() != 1) return Result.error("工会编码 " + item.getUnionCode() + " 未匹配到唯一有效基础经费记录");
|
||||
NutMap row = matches.get(0);
|
||||
String uid = row.getString("unionId");
|
||||
if (records.putIfAbsent(uid, row) != null) return Result.error("工会编码 " + item.getUnionCode() + " 重复");
|
||||
amounts.put(uid, item.getAllocateMoney());
|
||||
}
|
||||
for (Map.Entry<String, NutMap> entry : records.entrySet()) {
|
||||
String uid = entry.getKey();
|
||||
NutMap row = entry.getValue();
|
||||
Result result = save("base", row.getString("id"), year, uid, null, null,
|
||||
decimal(row.get("standard")), amounts.get(uid), remark.trim(), row.getInt("version"));
|
||||
if (result.getCode() != 0) throw new IllegalArgumentException(result.getMsg());
|
||||
}
|
||||
return Result.success("已导入" + records.size() + "条记录");
|
||||
}
|
||||
|
||||
public List<NutMap> summary(Integer year, String unionId) {
|
||||
return listMap(sql("""
|
||||
SELECT un.id, un.name unionName, COALESCE(b.money,0) baseMoney,
|
||||
COALESCE(s.money,0) specialMoney, COALESCE(b.money,0)+COALESCE(s.money,0) totalMoney
|
||||
FROM sys_union un
|
||||
LEFT JOIN (SELECT unionId,SUM(allocateMoney) money FROM outlay_annual_base
|
||||
WHERE year=@year AND status=1 GROUP BY unionId) b ON b.unionId=un.id
|
||||
LEFT JOIN (SELECT unionId,SUM(allocateMoney) money FROM outlay_annual_special
|
||||
WHERE year=@year AND status=1 GROUP BY unionId) s ON s.unionId=un.id
|
||||
WHERE (@unionId='' OR un.id=@unionId) ORDER BY un.unionCode
|
||||
""", "year", year, "unionId", StrUtil.blankToDefault(unionId, "")));
|
||||
}
|
||||
|
||||
public List<NutMap> confirmedRecords(Integer year, String unionId) {
|
||||
return listMap(sql("""
|
||||
SELECT id,'base' allocateType,'年度基础经费' projectName,allocateMoney
|
||||
FROM outlay_annual_base WHERE year=@year AND unionId=@unionId AND status=1
|
||||
UNION ALL
|
||||
SELECT id,'special' allocateType,projectName,allocateMoney
|
||||
FROM outlay_annual_special WHERE year=@year AND unionId=@unionId AND status=1
|
||||
ORDER BY allocateType,projectName,id
|
||||
""", "year", year, "unionId", unionId));
|
||||
}
|
||||
|
||||
public List<NutMap> historyRecords(Integer year, String unionId) {
|
||||
return listMap(sql("""
|
||||
SELECT a.year,un.name unionName,a.quarterly,a.allocateHeadMoney,a.allocateMoney
|
||||
FROM outlay_allocate_union a LEFT JOIN sys_union un ON un.id=a.unionId
|
||||
WHERE a.year=@year AND a.delFlag=0 AND (@unionId='' OR a.unionId=@unionId)
|
||||
ORDER BY un.unionCode,a.quarterly,a.id
|
||||
""", "year", year, "unionId", StrUtil.blankToDefault(unionId, "")));
|
||||
}
|
||||
|
||||
public Result generate(Integer year, BigDecimal standard, String unionId) {
|
||||
if (year == null || year < 1900 || year > Year.now().getValue() || !moneyValid(standard))
|
||||
return Result.error("请选择有效年度和人均标准(最多两位小数)");
|
||||
boolean current = year == Year.now().getValue();
|
||||
if (!current && first(sql("SELECT id FROM member_history WHERE year=@year LIMIT 1", "year", year)) == null)
|
||||
return Result.error("该年度没有会员历史快照,无法生成统计人数");
|
||||
List<NutMap> unions = listMap(sql("SELECT id FROM sys_union WHERE (@unionId='' OR id=@unionId) ORDER BY id",
|
||||
"unionId", StrUtil.blankToDefault(unionId, "")));
|
||||
int added = 0;
|
||||
for (NutMap union : unions) {
|
||||
String uid = union.getString("id");
|
||||
lockUnion(uid);
|
||||
NutMap old = first(sql("SELECT * FROM outlay_annual_base WHERE year=@year AND unionId=@unionId", "year", year, "unionId", uid));
|
||||
if (old != null && old.getInt("status") != 2) continue;
|
||||
NutMap count = first(sql("SELECT COUNT(DISTINCT id) memberCount FROM " + (current ? "vw_user" : "member_history") +
|
||||
" WHERE member=1 AND unionId=@unionId" + (current ? "" : " AND year=@year"), "unionId", uid, "year", year));
|
||||
int members = count.getInt("memberCount");
|
||||
BigDecimal calculated = standard.multiply(BigDecimal.valueOf(members));
|
||||
if (!moneyValid(calculated)) throw new IllegalArgumentException("计算金额超出允许范围");
|
||||
syncBudget(year, uid, calculated);
|
||||
String id = old == null ? UUID.randomUUID().toString().replace("-", "") : old.getString("id");
|
||||
if (old == null) {
|
||||
execute(sql("""
|
||||
INSERT INTO outlay_annual_base
|
||||
(id,year,unionId,memberCount,standard,calculatedMoney,allocateMoney,remark,status,version,createdAt,createdBy,updatedAt,updatedBy)
|
||||
VALUES (@id,@year,@unionId,@count,@standard,@money,@money,'',1,0,@now,@actor,@now,@actor)
|
||||
""", "id", id, "year", year, "unionId", uid, "count", members, "standard", standard,
|
||||
"money", calculated, "now", System.currentTimeMillis(), "actor", StpUtil.getLoginIdAsString()));
|
||||
} else {
|
||||
// 复用已重置记录,保留原操作日志及年度、分工会唯一约束。
|
||||
execute(sql("""
|
||||
UPDATE outlay_annual_base SET memberCount=@count,standard=@standard,calculatedMoney=@money,
|
||||
allocateMoney=@money,remark='',status=1,version=version+1,updatedAt=@now,updatedBy=@actor
|
||||
WHERE id=@id
|
||||
""", "count", members, "standard", standard, "money", calculated, "id", id,
|
||||
"now", System.currentTimeMillis(), "actor", StpUtil.getLoginIdAsString()));
|
||||
}
|
||||
audit("base", id, old == null ? "生成" : "重新生成", old,
|
||||
first(sql("SELECT * FROM outlay_annual_base WHERE id=@id", "id", id)), "生成年度人数快照");
|
||||
added++;
|
||||
}
|
||||
return Result.success("已生成" + added + "条记录,已有记录保持不变");
|
||||
}
|
||||
|
||||
private void lockUnion(String unionId) {
|
||||
if (first(sql("SELECT id FROM sys_union WHERE id=@id FOR UPDATE", "id", unionId)) == null)
|
||||
throw new IllegalArgumentException("分工会不存在");
|
||||
}
|
||||
|
||||
private BigDecimal decimal(Object value) {
|
||||
return value == null ? BigDecimal.ZERO : new BigDecimal(value.toString());
|
||||
}
|
||||
|
||||
private boolean moneyValid(BigDecimal money) {
|
||||
return money != null && money.signum() >= 0 && money.scale() <= 2
|
||||
&& money.compareTo(new BigDecimal("99999999.99")) <= 0;
|
||||
}
|
||||
|
||||
public Result save(String type, String id, Integer year, String unionId, String projectName,
|
||||
Integer memberCount, BigDecimal standard, BigDecimal allocateMoney, String remark, Integer version) {
|
||||
String table = table(type);
|
||||
if (StrUtil.isBlank(id) || !id.matches("[a-fA-F0-9]{32}") || year == null || year < 1900 || year > 9999
|
||||
|| StrUtil.isBlank(unionId) || !moneyValid(allocateMoney) || remark != null && remark.length() > 1000)
|
||||
return Result.error("请填写有效年度、分工会和金额,说明最多1000字");
|
||||
lockUnion(unionId);
|
||||
NutMap old = first(sql("SELECT * FROM " + table + " WHERE id=@id FOR UPDATE", "id", id));
|
||||
if (old != null && (old.getInt("year") != year || !unionId.equals(old.getString("unionId"))))
|
||||
return Result.error("已有记录不能变更年度和分工会");
|
||||
if (old != null && (version == null || old.getInt("version") != version))
|
||||
return Result.error("记录已更新,请刷新后重试");
|
||||
boolean confirmed = old != null && old.getInt("status") == 1;
|
||||
BigDecimal calculated = null;
|
||||
if ("base".equals(type)) {
|
||||
if (old == null || old.getInt("status") == 2) return Result.error("请先生成基础经费记录");
|
||||
memberCount = old.getInt("memberCount");
|
||||
if (confirmed) {
|
||||
standard = new BigDecimal(old.get("standard").toString());
|
||||
}
|
||||
if (memberCount == null || memberCount < 0 || !moneyValid(standard)) return Result.error("人数和标准不正确");
|
||||
calculated = standard.multiply(BigDecimal.valueOf(memberCount));
|
||||
if (!moneyValid(calculated)) return Result.error("计算金额超出允许范围");
|
||||
if (allocateMoney.compareTo(calculated) != 0 && StrUtil.isBlank(remark)) return Result.error("实际金额与计算金额不一致,请填写调整说明");
|
||||
} else if (StrUtil.isBlank(projectName) || projectName.trim().length() > 100 || allocateMoney.signum() <= 0) {
|
||||
return Result.error("请填写专项名称(最多100字)和大于0的金额");
|
||||
}
|
||||
if (confirmed && StrUtil.isBlank(remark)) return Result.error("调整已计入预算的经费必须填写原因");
|
||||
BigDecimal budgetDelta = allocateMoney.subtract(confirmed ? decimal(old.get("allocateMoney")) : BigDecimal.ZERO);
|
||||
if (!confirmed || budgetDelta.signum() != 0) syncBudget(year, unionId, budgetDelta);
|
||||
long now = System.currentTimeMillis();
|
||||
String actor = StpUtil.getLoginIdAsString();
|
||||
if (old == null) {
|
||||
execute(sql("""
|
||||
INSERT INTO outlay_annual_special
|
||||
(id,year,unionId,projectName,allocateMoney,remark,status,version,createdAt,createdBy,updatedAt,updatedBy)
|
||||
VALUES (@id,@year,@unionId,@name,@money,@remark,1,0,@now,@actor,@now,@actor)
|
||||
""", "id", id, "year", year, "unionId", unionId, "name", projectName.trim(), "money", allocateMoney,
|
||||
"remark", remark, "now", now, "actor", actor));
|
||||
} else {
|
||||
execute(sql("UPDATE " + table + " SET allocateMoney=@money,remark=@remark,status=1,updatedAt=@now,updatedBy=@actor,version=version+1" +
|
||||
("base".equals(type) ? ",memberCount=@count,standard=@standard,calculatedMoney=@calculated" : ",projectName=@name") + " WHERE id=@id",
|
||||
"money", allocateMoney, "remark", remark, "now", now, "actor", actor, "count", memberCount,
|
||||
"standard", standard, "calculated", calculated, "name", StrUtil.trim(projectName), "id", id));
|
||||
}
|
||||
audit(type, id, confirmed ? "调整经费" : "保存", old, first(sql("SELECT * FROM " + table + " WHERE id=@id", "id", id)), remark);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
public Result resetBaseRecords(Integer year, String unionId, String amountMatch) {
|
||||
if (year == null || year != Year.now().getValue()) return Result.error("只能重置当前年度的分配记录");
|
||||
List<NutMap> candidates = listMap(sql("""
|
||||
SELECT id,unionId,version FROM outlay_annual_base a
|
||||
WHERE year=@year AND status IN (0,1) AND (@unionId='' OR unionId=@unionId)
|
||||
""" + amountMatchCondition(amountMatch) + " ORDER BY unionId,id", "year", year, "unionId", StrUtil.blankToDefault(unionId, "")));
|
||||
int count = 0;
|
||||
for (NutMap candidate : candidates) {
|
||||
String id = candidate.getString("id");
|
||||
lockUnion(candidate.getString("unionId"));
|
||||
NutMap row = first(sql("SELECT * FROM outlay_annual_base WHERE id=@id FOR UPDATE", "id", id));
|
||||
if (row == null || row.getInt("status") == 2) continue;
|
||||
if (row.getInt("version") != candidate.getInt("version")) {
|
||||
throw new IllegalArgumentException("分配记录发生变更,本次重置已取消,请刷新后重试");
|
||||
}
|
||||
BigDecimal amount = row.getInt("status") == 1 ? decimal(row.get("allocateMoney")) : BigDecimal.ZERO;
|
||||
if (amount.signum() != 0) syncBudget(year, row.getString("unionId"), amount.negate());
|
||||
execute(sql("""
|
||||
UPDATE outlay_annual_base
|
||||
SET status=2,updatedAt=@now,updatedBy=@actor,version=version+1
|
||||
WHERE id=@id
|
||||
""", "id", id, "now", System.currentTimeMillis(), "actor", StpUtil.getLoginIdAsString()));
|
||||
NutMap after = first(sql("SELECT * FROM outlay_annual_base WHERE id=@id", "id", id));
|
||||
audit("base", id, "重置分配记录", row, after, "扣回年度预算 " + amount.toPlainString() + " 元");
|
||||
count++;
|
||||
}
|
||||
return Result.success(count == 0 ? "当前筛选范围没有可重置记录" : "已重置" + count + "条记录");
|
||||
}
|
||||
|
||||
private void syncBudget(int year, String unionId, BigDecimal delta) {
|
||||
List<NutMap> budgets = listMap(sql("SELECT * FROM outlay_manage_union WHERE year=@year AND unionId=@unionId FOR UPDATE",
|
||||
"year", year, "unionId", unionId));
|
||||
if (budgets.size() > 1) throw new IllegalArgumentException("该分工会年度预算存在重复记录,不能下拨");
|
||||
if (budgets.isEmpty()) {
|
||||
if (delta.signum() < 0) throw new IllegalArgumentException("年度预算不存在,不能扣减");
|
||||
// 新建预算承接上年结余;已有预算仅增加本次差额,避免重复结转。
|
||||
NutMap previous = first(sql("SELECT COALESCE(totalQuota,0)-COALESCE(usedQuota,0) surplus FROM outlay_manage_union WHERE year=@year AND unionId=@unionId",
|
||||
"year", year - 1, "unionId", unionId));
|
||||
BigDecimal carry = previous == null ? BigDecimal.ZERO : new BigDecimal(previous.get("surplus").toString());
|
||||
if (!moneyValid(carry.add(delta))) throw new IllegalArgumentException("下拨后年度总额度超出允许范围");
|
||||
execute(sql("""
|
||||
INSERT INTO outlay_manage_union (id,year,unionId,unionName,unionCode,totalQuota,usedQuota,delFlag,createdAt,updatedAt,createdBy,updatedBy)
|
||||
SELECT @id,@year,id,name,unionCode,@money,0,0,@now,@now,@actor,@actor FROM sys_union WHERE id=@unionId
|
||||
""", "id", UUID.randomUUID().toString().replace("-", ""), "year", year,
|
||||
"unionId", unionId, "money", carry.add(delta), "now", System.currentTimeMillis(), "actor", StpUtil.getLoginIdAsString()));
|
||||
} else {
|
||||
NutMap budget = budgets.get(0);
|
||||
BigDecimal total = decimal(budget.get("totalQuota")).add(delta);
|
||||
if (!moneyValid(total)) throw new IllegalArgumentException("下拨后年度总额度超出允许范围");
|
||||
if (total.compareTo(decimal(budget.get("usedQuota"))) < 0)
|
||||
throw new IllegalArgumentException("调整后总额度不能低于已使用额度");
|
||||
execute(sql("UPDATE outlay_manage_union SET totalQuota=COALESCE(totalQuota,0)+@delta,updatedAt=@now,updatedBy=@actor WHERE id=@id",
|
||||
"delta", delta, "now", System.currentTimeMillis(), "actor", StpUtil.getLoginIdAsString(), "id", budget.getString("id")));
|
||||
}
|
||||
}
|
||||
|
||||
private void audit(String type, String id, String action, NutMap before, NutMap after, String remark) {
|
||||
execute(sql("""
|
||||
INSERT INTO outlay_annual_allocate_log (id,allocateType,allocateId,action,beforeData,afterData,remark,createdAt,createdBy)
|
||||
VALUES (@id,@type,@allocateId,@action,@before,@after,@remark,@now,@actor)
|
||||
""", "id", UUID.randomUUID().toString().replace("-", ""), "type", type, "allocateId", id,
|
||||
"action", action, "before", before == null ? null : Json.toJson(before), "after", Json.toJson(after),
|
||||
"remark", remark, "now", System.currentTimeMillis(), "actor", StpUtil.getLoginIdAsString()));
|
||||
}
|
||||
}
|
||||
@@ -42,39 +42,62 @@ public class OutlayManageUnionStatisticsServiceImpl extends BaseServiceImpl impl
|
||||
|
||||
@Override
|
||||
public NutMap queryIncomeExpenseSummary(Integer year, String unionId) {
|
||||
Cnd cnd = buildUnionManageCondition(year, unionId, true);
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
COALESCE(SUM(t.beginMoney), 0) AS beginMoney,
|
||||
COALESCE(SUM(t.feeJanApr), 0) AS feeJanApr,
|
||||
COALESCE(SUM(t.feeMayAug), 0) AS feeMayAug,
|
||||
COALESCE(SUM(t.feeSepDec), 0) AS feeSepDec,
|
||||
COALESCE(SUM(t.awardMoney), 0) AS awardMoney,
|
||||
COALESCE(SUM(t.usedMoney), 0) AS usedMoney,
|
||||
COALESCE(SUM(t.remainMoney), 0) AS remainMoney
|
||||
COALESCE(SUM(t.beginMoney),0) AS beginMoney,
|
||||
COALESCE(SUM(t.baseMoney),0) AS baseMoney,
|
||||
COALESCE(SUM(t.specialMoney),0) AS specialMoney,
|
||||
COALESCE(SUM(t.incomeMoney),0) AS incomeMoney,
|
||||
COALESCE(SUM(t.feeJanApr),0) AS feeJanApr,
|
||||
COALESCE(SUM(t.feeMayAug),0) AS feeMayAug,
|
||||
COALESCE(SUM(t.feeSepDec),0) AS feeSepDec,
|
||||
COALESCE(SUM(t.awardMoney),0) AS awardMoney,
|
||||
COALESCE(SUM(t.usedMoney),0) AS usedMoney,
|
||||
COALESCE(SUM(t.remainMoney),0) AS remainMoney
|
||||
FROM (
|
||||
SELECT
|
||||
mu.unionId,
|
||||
COALESCE(SUM(CASE WHEN au.quarterly = 1 THEN au.allocateHeadMoney ELSE 0 END), 0) AS beginMoney,
|
||||
COALESCE(SUM(CASE WHEN au.quarterly = 1 THEN au.allocateMoney ELSE 0 END), 0) AS feeJanApr,
|
||||
COALESCE(SUM(CASE WHEN au.quarterly = 2 THEN au.allocateMoney ELSE 0 END), 0) AS feeMayAug,
|
||||
COALESCE(SUM(CASE WHEN au.quarterly = 3 THEN au.allocateMoney ELSE 0 END), 0) AS feeSepDec,
|
||||
COALESCE(SUM(CASE WHEN au.quarterly = 4 THEN au.allocateMoney ELSE 0 END), 0) AS awardMoney,
|
||||
COALESCE(mu.usedQuota, 0) AS usedMoney,
|
||||
COALESCE(mu.totalQuota, 0) - COALESCE(mu.usedQuota, 0) AS remainMoney
|
||||
FROM outlay_manage_union mu
|
||||
LEFT JOIN outlay_allocate_union au ON au.year = mu.year
|
||||
AND au.unionId = mu.unionId
|
||||
AND au.delFlag = 0
|
||||
LEFT JOIN sys_union su ON su.id = mu.unionId
|
||||
$condition
|
||||
GROUP BY mu.year, mu.unionId, mu.usedQuota, mu.totalQuota
|
||||
) t
|
||||
""");
|
||||
sql.setCondition(cnd);
|
||||
""" + incomeExpenseQuery() + ") t");
|
||||
sql.params().set("incomeYear", year == null ? DateUtil.thisYear() : year);
|
||||
sql.setCondition(buildUnionManageCondition(year, unionId, true));
|
||||
return executeMap(sql);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Sql buildIncomeExpenseSql(Integer year, String unionId) {
|
||||
Sql sql = Sqls.create(incomeExpenseQuery() + " ORDER BY COALESCE(mu.unionCode,su.unionCode)");
|
||||
sql.params().set("incomeYear", year == null ? DateUtil.thisYear() : year);
|
||||
sql.setCondition(buildUnionManageCondition(year, unionId, true));
|
||||
return sql;
|
||||
}
|
||||
|
||||
private String incomeExpenseQuery() {
|
||||
return """
|
||||
SELECT mu.year, mu.unionId,
|
||||
COALESCE(mu.unionName,su.name) AS unionName,
|
||||
COALESCE(mu.unionCode,su.unionCode) AS unionCode,
|
||||
COALESCE(mu.totalQuota,0) - (COALESCE(b.money,0) + COALESCE(sp.money,0)) AS beginMoney,
|
||||
COALESCE(b.money,0) AS baseMoney,
|
||||
COALESCE(sp.money,0) AS specialMoney,
|
||||
COALESCE(b.money,0) + COALESCE(sp.money,0) AS incomeMoney,
|
||||
0 AS feeJanApr,
|
||||
0 AS feeMayAug,
|
||||
0 AS feeSepDec,
|
||||
0 AS awardMoney,
|
||||
COALESCE(mu.usedQuota,0) AS usedMoney,
|
||||
COALESCE(mu.totalQuota,0)-COALESCE(mu.usedQuota,0) AS remainMoney
|
||||
FROM outlay_manage_union mu
|
||||
LEFT JOIN sys_union su ON su.id=mu.unionId
|
||||
LEFT JOIN (
|
||||
SELECT year,unionId,SUM(allocateMoney) money FROM outlay_annual_base
|
||||
WHERE year=@incomeYear AND status=1 GROUP BY year,unionId
|
||||
) b ON b.year=mu.year AND b.unionId=mu.unionId
|
||||
LEFT JOIN (
|
||||
SELECT year,unionId,SUM(allocateMoney) money FROM outlay_annual_special
|
||||
WHERE year=@incomeYear AND status=1 GROUP BY year,unionId
|
||||
) sp ON sp.year=mu.year AND sp.unionId=mu.unionId
|
||||
$condition
|
||||
""";
|
||||
}
|
||||
|
||||
/**
|
||||
* 构造两个列表共用的预算主表过滤条件,保证汇总和分页列表权限口径一致。
|
||||
*/
|
||||
|
||||
@@ -0,0 +1,145 @@
|
||||
package com.budwk.app.zhgh.dayofficework.outlay.outlayManage.union.controller;
|
||||
|
||||
import cn.afterturn.easypoi.excel.ExcelExportUtil;
|
||||
import cn.afterturn.easypoi.excel.entity.ExportParams;
|
||||
import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
|
||||
import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import com.budwk.app.base.utils.CommonDownloadUtil;
|
||||
import com.budwk.app.sys.models.Sys_dict;
|
||||
import com.budwk.app.sys.services.SysDictService;
|
||||
import org.apache.poi.ss.usermodel.Workbook;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
import org.nutz.json.Json;
|
||||
import com.budwk.app.zhgh.dayofficework.outlay.outlayManage.union.vo.OutlayUnionAllocateImportVo;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.HashMap;
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import com.budwk.app.base.param.PageForm;
|
||||
import com.budwk.app.base.result.Result;
|
||||
import com.budwk.app.zhgh.dayofficework.outlay.outlayManage.service.impl.OutlayAnnualAllocateService;
|
||||
import org.nutz.aop.interceptor.ioc.TransAop;
|
||||
import org.nutz.ioc.aop.Aop;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.mvc.annotation.*;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.UUID;
|
||||
|
||||
@IocBean
|
||||
@At("/platform/outlay/outlayManage/unionAllocate/annual")
|
||||
@Ok("json:full")
|
||||
public class OutlayAnnualAllocateController {
|
||||
@Inject
|
||||
private OutlayAnnualAllocateService outlayAnnualAllocateService;
|
||||
@Inject
|
||||
private SysDictService sysDictService;
|
||||
|
||||
@At
|
||||
@SaCheckPermission("outlay.outlayManage.union.allocate")
|
||||
public Result pageData(PageForm pageForm, String type, Integer year, String unionId, String projectName, String amountMatch) {
|
||||
return Result.success(outlayAnnualAllocateService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(),
|
||||
outlayAnnualAllocateService.pageSql(type, year, unionId, projectName, amountMatch)));
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckPermission("outlay.outlayManage.union.allocate")
|
||||
public Result summary(Integer year, String unionId) {
|
||||
return Result.success(outlayAnnualAllocateService.summary(year, unionId));
|
||||
}
|
||||
|
||||
@At
|
||||
@Ok("void")
|
||||
@SaCheckPermission("outlay.outlayManage.union.allocate")
|
||||
public void doExport(String type, Integer year, String unionId, HttpServletResponse response) {
|
||||
int queryYear = year == null ? DateUtil.thisYear() : year;
|
||||
if (queryYear < 1900 || queryYear > 9999) throw new IllegalArgumentException("请选择有效年度");
|
||||
List<NutMap> rows;
|
||||
List<ExcelExportEntity> columns = new ArrayList<>();
|
||||
columns.add(new ExcelExportEntity("年度", "year", 12));
|
||||
columns.add(new ExcelExportEntity("分工会", "unionName", 30));
|
||||
String title;
|
||||
if ("summary".equals(type)) {
|
||||
title = "下拨汇总";
|
||||
rows = outlayAnnualAllocateService.summary(queryYear, unionId);
|
||||
for (NutMap row : rows) row.put("year", queryYear);
|
||||
columns.add(new ExcelExportEntity("基础经费已下拨(元)", "baseMoney", 24));
|
||||
columns.add(new ExcelExportEntity("专项经费已下拨(元)", "specialMoney", 24));
|
||||
columns.add(new ExcelExportEntity("合计经费下拨(元)", "totalMoney", 24));
|
||||
} else if ("history".equals(type)) {
|
||||
title = "历史年度记录";
|
||||
rows = outlayAnnualAllocateService.historyRecords(queryYear, unionId);
|
||||
Map<String, String> projectNames = new HashMap<>();
|
||||
for (Sys_dict dict : sysDictService.getSubListByCode("OUTLAY_QUARTERLY")) {
|
||||
projectNames.put(dict.getCode(), dict.getName());
|
||||
}
|
||||
for (NutMap row : rows) {
|
||||
String code = row.getString("quarterly");
|
||||
row.put("projectName", projectNames.getOrDefault(code, code));
|
||||
}
|
||||
columns.add(new ExcelExportEntity("分配项目", "projectName", 24));
|
||||
columns.add(new ExcelExportEntity("分配前额度(元)", "allocateHeadMoney", 24));
|
||||
columns.add(new ExcelExportEntity("分配金额(元)", "allocateMoney", 24));
|
||||
} else {
|
||||
throw new IllegalArgumentException("不支持的导出类型");
|
||||
}
|
||||
ExportParams params = new ExportParams();
|
||||
params.setType(ExcelType.XSSF);
|
||||
Workbook workbook = ExcelExportUtil.exportExcel(params, columns, rows);
|
||||
CommonDownloadUtil.download(queryYear + "年" + title + ".xlsx", workbook, response);
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckPermission("outlay.outlayManage.union.allocate")
|
||||
public Result newId() {
|
||||
return Result.success("", UUID.randomUUID().toString().replace("-", ""));
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckPermission("outlay.outlayManage.union.allocate")
|
||||
@POST
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
public Result generate(Integer year, @Param("standard") BigDecimal standard, String unionId) {
|
||||
return outlayAnnualAllocateService.generate(year, standard, unionId);
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckPermission("outlay.outlayManage.union.allocate")
|
||||
@POST
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
public Result save(String type, String id, Integer year, String unionId, String projectName,
|
||||
Integer memberCount, @Param("standard") BigDecimal standard, @Param("allocateMoney") BigDecimal allocateMoney, String remark, Integer version) {
|
||||
return outlayAnnualAllocateService.save(type, id, year, unionId, projectName, memberCount, standard, allocateMoney, remark, version);
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckPermission("outlay.outlayManage.union.allocate")
|
||||
@POST
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
public Result resetBaseRecords(Integer year, String unionId, String amountMatch) {
|
||||
return outlayAnnualAllocateService.resetBaseRecords(year, unionId, amountMatch);
|
||||
}
|
||||
|
||||
@At
|
||||
@POST
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@SaCheckPermission("outlay.outlayManage.union.allocate")
|
||||
public Result importBaseAmounts(Integer year, String unionId, String data, String remark) {
|
||||
if (data == null || data.isBlank()) return Result.error("请先上传导入文件");
|
||||
return outlayAnnualAllocateService.importBaseAmounts(year, unionId,
|
||||
Json.fromJsonAsList(OutlayUnionAllocateImportVo.class, data), remark);
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckPermission("outlay.outlayManage.union.allocate")
|
||||
public Result logs(PageForm pageForm, String type, String id) {
|
||||
return Result.success(outlayAnnualAllocateService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), outlayAnnualAllocateService.sql("""
|
||||
SELECT l.*,u.username operatorName FROM outlay_annual_allocate_log l
|
||||
LEFT JOIN sys_user u ON u.id=l.createdBy
|
||||
WHERE l.allocateType=@type AND l.allocateId=@id ORDER BY l.createdAt DESC,l.id
|
||||
""", "type", type, "id", id)));
|
||||
}
|
||||
}
|
||||
@@ -53,7 +53,7 @@ public class OutlayManageUnionAllocateController {
|
||||
private OutlayManageUnionAllocateService outlayManageUnionAllocateService;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/dayofficework/outlay/outlayManage/union/allocate/index.html")
|
||||
@Ok("beetl:/platform/zhgh/dayofficework/outlay/outlayManage/union/allocate/annual.html")
|
||||
@SaCheckPermission("outlay.outlayManage.union.allocate")
|
||||
public void index() {
|
||||
}
|
||||
|
||||
@@ -6,22 +6,17 @@ import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
|
||||
import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import com.budwk.app.base.constant.RoleConstant;
|
||||
import com.budwk.app.base.page.Pagination;
|
||||
import com.budwk.app.base.param.PageForm;
|
||||
import com.budwk.app.base.result.Result;
|
||||
import com.budwk.app.base.service.BaseService;
|
||||
import com.budwk.app.base.utils.CommonDownloadUtil;
|
||||
import com.budwk.app.web.commons.auth.utils.AuthUtil;
|
||||
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
|
||||
import com.budwk.app.zhgh.dayofficework.outlay.outlayManage.service.OutlayManageUnionStatisticsService;
|
||||
import com.budwk.app.zhgh.dayofficework.outlay.outlayManage.union.vo.OutlayUnionIncomeExpenseVO;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.poi.ss.usermodel.Workbook;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Sqls;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
@@ -85,11 +80,10 @@ public class OutlayManageUnionIncomeExpenseController {
|
||||
ArrayList<ExcelExportEntity> entities = new ArrayList<>();
|
||||
entities.add(new ExcelExportEntity("单位", "unionName", 25));
|
||||
entities.add(new ExcelExportEntity("年初数", "beginMoney", 20));
|
||||
entities.add(new ExcelExportEntity("1-4月会费", "feeJanApr", 20));
|
||||
entities.add(new ExcelExportEntity("5-8月会费", "feeMayAug", 20));
|
||||
entities.add(new ExcelExportEntity("9-12月会费", "feeSepDec", 20));
|
||||
entities.add(new ExcelExportEntity("评优奖励", "awardMoney", 20));
|
||||
entities.add(new ExcelExportEntity("1-12月支出", "usedMoney", 20));
|
||||
entities.add(new ExcelExportEntity("年度基础经费", "baseMoney", 20));
|
||||
entities.add(new ExcelExportEntity("专项经费", "specialMoney", 20));
|
||||
entities.add(new ExcelExportEntity("合计下拨", "incomeMoney", 20));
|
||||
entities.add(new ExcelExportEntity("年度支出", "usedMoney", 20));
|
||||
entities.add(new ExcelExportEntity("经费余额", "remainMoney", 20));
|
||||
|
||||
ExportParams exportParams = new ExportParams();
|
||||
@@ -98,52 +92,8 @@ public class OutlayManageUnionIncomeExpenseController {
|
||||
CommonDownloadUtil.download(queryYear + "年二级分工会经费收支使用情况表.xlsx", workbook, response);
|
||||
}
|
||||
|
||||
/**
|
||||
* 统计参数说明:
|
||||
* year 为统计年度,未传时默认当前年份;unionId 为二级分工会主键,管理员可为空查询全部。
|
||||
* 返回 VO 中 beginMoney 是年初数,feeJanApr/feeMayAug/feeSepDec 是三个会费收入段,
|
||||
* awardMoney 是评优奖励,usedMoney 是年度支出,remainMoney 是当前经费余额。
|
||||
*/
|
||||
private Sql buildIncomeExpenseSql(Integer year, String unionId) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
mu.year AS year,
|
||||
mu.unionId AS unionId,
|
||||
COALESCE(mu.unionName, su.name) AS unionName,
|
||||
COALESCE(mu.unionCode, su.unionCode) AS unionCode,
|
||||
COALESCE(SUM(CASE WHEN au.quarterly = 1 THEN au.allocateHeadMoney ELSE 0 END), 0) AS beginMoney,
|
||||
COALESCE(SUM(CASE WHEN au.quarterly = 1 THEN au.allocateMoney ELSE 0 END), 0) AS feeJanApr,
|
||||
COALESCE(SUM(CASE WHEN au.quarterly = 2 THEN au.allocateMoney ELSE 0 END), 0) AS feeMayAug,
|
||||
COALESCE(SUM(CASE WHEN au.quarterly = 3 THEN au.allocateMoney ELSE 0 END), 0) AS feeSepDec,
|
||||
COALESCE(SUM(CASE WHEN au.quarterly = 4 THEN au.allocateMoney ELSE 0 END), 0) AS awardMoney,
|
||||
COALESCE(mu.usedQuota, 0) AS usedMoney,
|
||||
COALESCE(mu.totalQuota, 0) - COALESCE(mu.usedQuota, 0) AS remainMoney
|
||||
FROM outlay_manage_union mu
|
||||
LEFT JOIN sys_union su ON su.id = mu.unionId
|
||||
LEFT JOIN outlay_allocate_union au ON au.year = mu.year
|
||||
AND au.unionId = mu.unionId
|
||||
AND au.delFlag = 0
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.and("mu.delFlag", "=", false);
|
||||
cnd.and("mu.year", "=", getQueryYear(year));
|
||||
cnd.and("mu.totalQuota", "IS NOT", null);
|
||||
cnd.andEX("mu.unionId", "=", unionId);
|
||||
if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) {
|
||||
cnd.and("mu.unionId", "=", SecurityUtil.getUnionId());
|
||||
}
|
||||
cnd.groupBy("mu.year");
|
||||
cnd.groupBy("mu.unionId");
|
||||
cnd.groupBy("mu.unionName");
|
||||
cnd.groupBy("mu.unionCode");
|
||||
cnd.groupBy("su.name");
|
||||
cnd.groupBy("su.unionCode");
|
||||
cnd.groupBy("mu.usedQuota");
|
||||
cnd.groupBy("mu.totalQuota");
|
||||
cnd.asc("mu.unionCode");
|
||||
sql.setCondition(cnd);
|
||||
return sql;
|
||||
return outlayManageUnionStatisticsService.buildIncomeExpenseSql(year, unionId);
|
||||
}
|
||||
|
||||
private Integer getQueryYear(Integer year) {
|
||||
|
||||
@@ -13,6 +13,7 @@ import com.budwk.app.web.commons.auth.utils.SecurityUtil;
|
||||
import com.budwk.app.zhgh.dayofficework.outlay.outlayManage.model.OutlayUseDetail;
|
||||
import com.budwk.app.zhgh.dayofficework.outlay.outlayManage.service.OutlayUseDetailService;
|
||||
import com.budwk.app.zhgh.dayofficework.outlay.outlayManage.service.OutlayManageUnionStatisticsService;
|
||||
import com.budwk.app.zhgh.dayofficework.outlay.outlayManage.service.impl.OutlayAnnualAllocateService;
|
||||
import com.budwk.app.zhgh.dayofficework.outlay.outlayManage.union.model.OutLayAllocateUnion;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
@@ -49,6 +50,8 @@ public class OutlayManageUnionUseDetailController {
|
||||
private OutlayUseDetailService outlayUseDetailService;
|
||||
@Inject
|
||||
private OutlayManageUnionStatisticsService outlayManageUnionStatisticsService;
|
||||
@Inject
|
||||
private OutlayAnnualAllocateService outlayAnnualAllocateService;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/dayofficework/outlay/outlayManage/union/useDetail/index.html")
|
||||
@@ -128,6 +131,13 @@ public class OutlayManageUnionUseDetailController {
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
@At
|
||||
@ApiOperation("查询分工会年度已下拨经费明细")
|
||||
@SaCheckPermission("outlay.outlayManage.union.useDetail")
|
||||
public Result queryAnnualAllocateList(Integer year, String unionId) {
|
||||
return Result.success(outlayAnnualAllocateService.confirmedRecords(year, unionId));
|
||||
}
|
||||
|
||||
@At
|
||||
@ApiOperation("查询分工会今年每个分配项目的分配情况")
|
||||
@SaCheckPermission("outlay.outlayManage.union.useDetail")
|
||||
|
||||
@@ -20,6 +20,12 @@ public class OutlayUnionIncomeExpenseVO {
|
||||
|
||||
private BigDecimal beginMoney;
|
||||
|
||||
private BigDecimal baseMoney;
|
||||
|
||||
private BigDecimal specialMoney;
|
||||
|
||||
private BigDecimal incomeMoney;
|
||||
|
||||
private BigDecimal feeJanApr;
|
||||
|
||||
private BigDecimal feeMayAug;
|
||||
|
||||
@@ -122,9 +122,9 @@ public class UnionReimburseServiceImpl extends BaseServiceImpl<UnionReimburse> i
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存、提交及重新提交共用支付信息校验,并在同一事务内保存申请和发票明细。
|
||||
* 在同一事务内保存申请和发票明细,正式提交及重新提交时校验支付信息。
|
||||
* @param unionReimburse 申请表单,paymentDetails 为支付方式、金额及对私收款资料组成的明细列表
|
||||
* @param stateId 1 表示保存草稿,2 表示提交;均要求支付信息完整,发票选填,上传后须通过服务端验真
|
||||
* @param stateId 1 表示保存草稿,2 表示提交;提交时至少需要一张发票
|
||||
* @return Result 成功或失败结果,msg 包含失败明细的行号及原因
|
||||
*/
|
||||
@Override
|
||||
@@ -133,23 +133,27 @@ public class UnionReimburseServiceImpl extends BaseServiceImpl<UnionReimburse> i
|
||||
if (unionReimburse == null) {
|
||||
return Result.error("报销数据不能为空");
|
||||
}
|
||||
// 发票选填;保存、提交及重提均对已上传的发票检查完整性。
|
||||
if (stateId == 2 && Lang.isEmpty(unionReimburse.getInvoiceDetails())) {
|
||||
return Result.error("提交前请至少上传一张发票");
|
||||
}
|
||||
// 保存、提交及重提均对已上传的发票检查完整性。
|
||||
Result invoiceResult = validateInvoiceDetails(unionReimburse);
|
||||
if (invoiceResult != null) {
|
||||
return invoiceResult;
|
||||
}
|
||||
Result paymentResult = validatePaymentDetails(unionReimburse);
|
||||
if (paymentResult != null) {
|
||||
return paymentResult;
|
||||
}
|
||||
// 保存、提交及重提均在写入前检查支付总额,不能只依赖页面的金额限制。
|
||||
Result amountResult = validatePaymentAmountLimit(unionReimburse);
|
||||
if (amountResult != null) {
|
||||
return amountResult;
|
||||
}
|
||||
Result activityAmountResult = validateActivityApplyMoney(unionReimburse);
|
||||
if (activityAmountResult != null) {
|
||||
return activityAmountResult;
|
||||
if (stateId == 2) {
|
||||
Result paymentResult = validatePaymentDetails(unionReimburse);
|
||||
if (paymentResult != null) {
|
||||
return paymentResult;
|
||||
}
|
||||
Result amountResult = validatePaymentAmountLimit(unionReimburse);
|
||||
if (amountResult != null) {
|
||||
return amountResult;
|
||||
}
|
||||
Result activityAmountResult = validateActivityApplyMoney(unionReimburse);
|
||||
if (activityAmountResult != null) {
|
||||
return activityAmountResult;
|
||||
}
|
||||
}
|
||||
UnionReimburse oldRecord = null;
|
||||
if (StrUtil.isNotBlank(unionReimburse.getId())) {
|
||||
@@ -760,15 +764,18 @@ public class UnionReimburseServiceImpl extends BaseServiceImpl<UnionReimburse> i
|
||||
invoiceFileCount++;
|
||||
}
|
||||
}
|
||||
// 无发票申请从服务端已校验的支付明细计算金额,不能信任前端传入的报销总额。
|
||||
if (Lang.isEmpty(unionReimburse.getInvoiceDetails())) {
|
||||
// 无发票时由支付明细汇总,草稿中未填完的金额暂不计入。
|
||||
if (Lang.isEmpty(unionReimburse.getInvoiceDetails()) && Lang.isNotEmpty(unionReimburse.getPaymentDetails())) {
|
||||
BigDecimal paymentTotal = BigDecimal.ZERO;
|
||||
for (JSONObject detail : unionReimburse.getPaymentDetails()) {
|
||||
paymentTotal = paymentTotal.add(new BigDecimal(detail.get("money").toString()));
|
||||
String money = detail == null ? "" : detail.getStr("money", "");
|
||||
if (money.matches("[0-9]+(\\.[0-9]{1,2})?")) {
|
||||
paymentTotal = paymentTotal.add(new BigDecimal(money));
|
||||
}
|
||||
}
|
||||
totalMoney = paymentTotal.setScale(2, RoundingMode.HALF_UP).doubleValue();
|
||||
}
|
||||
// 三类活动使用已校验的手填申请金额,不能被发票或支付合计覆盖。
|
||||
// 三类活动保留手填申请金额。
|
||||
if (!isManualReimburseAmount(unionReimburse)) {
|
||||
unionReimburse.setMoney(BigDecimal.valueOf(totalMoney).setScale(2, RoundingMode.HALF_UP).doubleValue());
|
||||
}
|
||||
@@ -783,8 +790,8 @@ public class UnionReimburseServiceImpl extends BaseServiceImpl<UnionReimburse> i
|
||||
}
|
||||
|
||||
/**
|
||||
* 校验支付明细,防止绕过 PC/H5 校验直接保存。对公只需方式和金额,对私必须补齐人员及银行资料。
|
||||
* @param form 本次保存的申请,paymentDetails 必须至少包含一条完整支付明细
|
||||
* 校验提交的支付明细。对公只需方式和金额,对私必须补齐人员及银行资料。
|
||||
* @param form 本次提交的申请,paymentDetails 必须至少包含一条完整支付明细
|
||||
* @return 校验通过返回 null,失败返回带行号和原因的 Result
|
||||
*/
|
||||
private Result validatePaymentDetails(UnionReimburse form) {
|
||||
@@ -916,7 +923,7 @@ public class UnionReimburseServiceImpl extends BaseServiceImpl<UnionReimburse> i
|
||||
}
|
||||
|
||||
/**
|
||||
* 发票列表允许为空;已有明细必须且只能包含一张可定位的发票文件。
|
||||
* 校验已填写的发票明细,每条明细必须且只能包含一张可定位的发票文件。
|
||||
*/
|
||||
private Result validateInvoiceDetails(UnionReimburse unionReimburse) {
|
||||
if (Lang.isEmpty(unionReimburse.getInvoiceDetails())) {
|
||||
|
||||
@@ -127,6 +127,7 @@ public class CondolenceApplyController {
|
||||
username as userName,
|
||||
loginname as loginName,
|
||||
sex,
|
||||
mobile,
|
||||
technicalTitle,
|
||||
IFNULL(unitname, '暂无') as unitName,
|
||||
unitid as unitId,
|
||||
|
||||
@@ -27,34 +27,34 @@ import org.nutz.mvc.annotation.Param;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @ClassName CondolenceBranchUnionApprovalController
|
||||
* @ClassName CondolenceFirstApprovalController
|
||||
* @Author JyuHsin
|
||||
* @Date 2025/7/28 11:33
|
||||
* @Version 1.0
|
||||
* @Description TODO
|
||||
*/
|
||||
@IocBean
|
||||
@At("/platform/condolence/branchUnionApproval")
|
||||
@Api("职工慰问分工会审核")
|
||||
@At("/platform/condolence/firstApproval")
|
||||
@Api("职工慰问一级审核")
|
||||
@Ok("json:full")
|
||||
public class CondolenceBranchUnionApprovalController {
|
||||
public class CondolenceFirstApprovalController {
|
||||
|
||||
@Inject
|
||||
private CondolenceService condolenceService;
|
||||
|
||||
@At("/")
|
||||
@Ok("beetl:/platform/zhgh/staffbenefit/condolence/branchUnionApproval/index.html")
|
||||
@SaCheckPermission("condolence.branchUnionApproval")
|
||||
@Ok("beetl:/platform/zhgh/staffbenefit/condolence/firstApproval/index.html")
|
||||
@SaCheckPermission("condolence.firstApproval")
|
||||
public void index() {}
|
||||
|
||||
@At("/h5")
|
||||
@Ok("beetl:/platform/zhghh5/staffbenefit/condolence/branchUnionApproval/index.html")
|
||||
@SaCheckPermission("h5.condolence.branchUnionApproval")
|
||||
@Ok("beetl:/platform/zhghh5/staffbenefit/condolence/firstApproval/index.html")
|
||||
@SaCheckPermission("h5.condolence.firstApproval")
|
||||
public void h5Index() {}
|
||||
|
||||
@At
|
||||
@ApiOperation("分页查询")
|
||||
@SaCheckPermission(value = {"condolence.branchUnionApproval", "h5.condolence.branchUnionApproval"}, mode = SaMode.OR)
|
||||
@SaCheckPermission(value = {"condolence.firstApproval", "h5.condolence.firstApproval"}, mode = SaMode.OR)
|
||||
public Result pageData(PageForm pageForm,
|
||||
@Param(value = "year") Integer year,
|
||||
@Param(value = "type") String type,
|
||||
@@ -29,30 +29,30 @@ import java.util.List;
|
||||
/**
|
||||
* @author zhf
|
||||
* @date 2025/12/23 14:13
|
||||
* @description 校工会预审
|
||||
* @description 二级审核
|
||||
*/
|
||||
@IocBean
|
||||
@At("/platform/condolence/schoolPrincipalApproval")
|
||||
@Api("职工慰问校工会预审")
|
||||
@At("/platform/condolence/secondApproval")
|
||||
@Api("职工慰问二级审核")
|
||||
@Ok("json:full")
|
||||
public class CondolenceSchoolPrincipalApprovalController {
|
||||
public class CondolenceSecondApprovalController {
|
||||
|
||||
@Inject
|
||||
private CondolenceService condolenceService;
|
||||
|
||||
@At("/")
|
||||
@Ok("beetl:/platform/zhgh/staffbenefit/condolence/schoolPrincipalApproval/index.html")
|
||||
@SaCheckPermission("condolence.schoolPrincipalApproval")
|
||||
@Ok("beetl:/platform/zhgh/staffbenefit/condolence/secondApproval/index.html")
|
||||
@SaCheckPermission("condolence.secondApproval")
|
||||
public void index() {}
|
||||
|
||||
@At("/h5")
|
||||
@Ok("beetl:/platform/zhghh5/staffbenefit/condolence/schoolPrincipalApproval/index.html")
|
||||
@SaCheckPermission("h5.condolence.schoolPrincipalApproval")
|
||||
@Ok("beetl:/platform/zhghh5/staffbenefit/condolence/secondApproval/index.html")
|
||||
@SaCheckPermission("h5.condolence.secondApproval")
|
||||
public void h5Index() {}
|
||||
|
||||
@At
|
||||
@ApiOperation("分页查询")
|
||||
@SaCheckPermission(value = {"condolence.schoolPrincipalApproval", "h5.condolence.schoolPrincipalApproval"}, mode = SaMode.OR)
|
||||
@SaCheckPermission(value = {"condolence.secondApproval", "h5.condolence.secondApproval"}, mode = SaMode.OR)
|
||||
public Result pageData(PageForm pageForm,
|
||||
@Param(value = "year") Integer year,
|
||||
@Param(value = "type") String type,
|
||||
@@ -27,34 +27,34 @@ import org.nutz.mvc.annotation.Param;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @ClassName CondolenceSchoolUnionApprovalController
|
||||
* @ClassName CondolenceThirdApprovalController
|
||||
* @Author JyuHsin
|
||||
* @Date 2025/7/29 16:23
|
||||
* @Version 1.0
|
||||
* @Description TODO
|
||||
*/
|
||||
@IocBean
|
||||
@At("/platform/condolence/schoolUnionApproval")
|
||||
@Api("职工慰问校工会审核")
|
||||
@At("/platform/condolence/thirdApproval")
|
||||
@Api("职工慰问三级审核")
|
||||
@Ok("json:full")
|
||||
public class CondolenceSchoolUnionApprovalController {
|
||||
public class CondolenceThirdApprovalController {
|
||||
|
||||
@Inject
|
||||
private CondolenceService condolenceService;
|
||||
|
||||
@At("/")
|
||||
@Ok("beetl:/platform/zhgh/staffbenefit/condolence/schoolUnionApproval/index.html")
|
||||
@SaCheckPermission("condolence.schoolUnionApproval")
|
||||
@Ok("beetl:/platform/zhgh/staffbenefit/condolence/thirdApproval/index.html")
|
||||
@SaCheckPermission("condolence.thirdApproval")
|
||||
public void index() {}
|
||||
|
||||
@At("/h5")
|
||||
@Ok("beetl:/platform/zhghh5/staffbenefit/condolence/schoolUnionApproval/index.html")
|
||||
@SaCheckPermission("h5.condolence.schoolUnionApproval")
|
||||
@Ok("beetl:/platform/zhghh5/staffbenefit/condolence/thirdApproval/index.html")
|
||||
@SaCheckPermission("h5.condolence.thirdApproval")
|
||||
public void h5Index() {}
|
||||
|
||||
@At
|
||||
@ApiOperation("分页查询")
|
||||
@SaCheckPermission(value = {"condolence.schoolUnionApproval", "h5.condolence.schoolUnionApproval"}, mode = SaMode.OR)
|
||||
@SaCheckPermission(value = {"condolence.thirdApproval", "h5.condolence.thirdApproval"}, mode = SaMode.OR)
|
||||
public Result pageData(PageForm pageForm,
|
||||
@Param(value = "year") Integer year,
|
||||
@Param(value = "type") String type,
|
||||
@@ -184,6 +184,10 @@ public class DifficultHelpApplyController {
|
||||
birthday,
|
||||
mobile,
|
||||
sex,
|
||||
idCard,
|
||||
position,
|
||||
professionalTitle AS officialCapacity,
|
||||
(SELECT u.homeAddress FROM sys_user u WHERE u.id = vw_user.id) AS homeAddress,
|
||||
unitName,
|
||||
unionName,
|
||||
unionId,
|
||||
|
||||
@@ -25,15 +25,15 @@ import java.util.List;
|
||||
/**
|
||||
* @version 1.0
|
||||
* @Author zzr
|
||||
* @name:DifficultHelpBranchUnionApprovalController
|
||||
* @name:DifficultHelpFirstApprovalController
|
||||
* @Date 2025/7/31 11:47
|
||||
* @注释
|
||||
*/
|
||||
@IocBean
|
||||
@Ok("json")
|
||||
@ApiOperation("困难补助分工会审核")
|
||||
@At("/platform/difficultHelp/branchUnionApproval")
|
||||
public class DifficultHelpBranchUnionApprovalController {
|
||||
@ApiOperation("困难补助一级审核")
|
||||
@At("/platform/difficultHelp/firstApproval")
|
||||
public class DifficultHelpFirstApprovalController {
|
||||
|
||||
@Inject
|
||||
private Dao dao;
|
||||
@@ -41,27 +41,27 @@ public class DifficultHelpBranchUnionApprovalController {
|
||||
private DifficultHelpCommonService difficultHelpCommonService;
|
||||
|
||||
@At("")
|
||||
@SaCheckPermission("difficultHelp.branchUnionApproval")
|
||||
@Ok("beetl:/platform/zhgh/staffbenefit/difficulthelp/branchunionapproval/index.html")
|
||||
@SaCheckPermission("difficultHelp.firstApproval")
|
||||
@Ok("beetl:/platform/zhgh/staffbenefit/difficulthelp/firstApproval/index.html")
|
||||
public void index() {
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckPermission("difficultHelp.branchUnionApproval")
|
||||
@Ok("beetl:/platform/zhgh/staffbenefit/difficulthelp/branchunionapproval/form.html")
|
||||
@SaCheckPermission("difficultHelp.firstApproval")
|
||||
@Ok("beetl:/platform/zhgh/staffbenefit/difficulthelp/firstApproval/form.html")
|
||||
public void form() {
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckPermission("h5.difficultHelp.branchUnionApproval")
|
||||
@Ok("beetl:/platform/zhghh5/staffbenefit/difficulthelp/branchunionapproval/index.html")
|
||||
@SaCheckPermission("h5.difficultHelp.firstApproval")
|
||||
@Ok("beetl:/platform/zhghh5/staffbenefit/difficulthelp/firstApproval/index.html")
|
||||
public void h5() {
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@ApiOperation("困难补助分工会审核列表")
|
||||
@SaCheckPermission("difficultHelp.branchUnionApproval")
|
||||
@ApiOperation("困难补助一级审核列表")
|
||||
@SaCheckPermission("difficultHelp.firstApproval")
|
||||
public Result pageData(DifficultHelpPageParam pageParam) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
@@ -1,6 +1,7 @@
|
||||
package com.budwk.app.zhgh.staffbenefit.difficulthelp.controller;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import cn.dev33.satoken.annotation.SaMode;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.budwk.app.base.annotation.SLog;
|
||||
import com.budwk.app.base.page.Pagination;
|
||||
@@ -68,6 +69,7 @@ public class DifficultHelpMineController {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
info.id,
|
||||
info.createdBy,
|
||||
info.proxyUserName,
|
||||
info.proxyLoginName,
|
||||
info.userName,
|
||||
@@ -103,7 +105,8 @@ public class DifficultHelpMineController {
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
pageParam.buildSearch(cnd, "info.");
|
||||
cnd.and("info.createdBy", "=", SecurityUtil.getUserId());
|
||||
cnd.and(Cnd.exps("info.createdBy", "=", SecurityUtil.getUserId())
|
||||
.or("info.userId", "=", SecurityUtil.getUserId()));
|
||||
if (StrUtil.isAllBlank(pageParam.getPageOrderName(), pageParam.getPageOrderBy())) {
|
||||
cnd.desc("info.applyTime");
|
||||
} else {
|
||||
@@ -121,6 +124,10 @@ public class DifficultHelpMineController {
|
||||
@SaCheckPermission("difficultHelp.mine")
|
||||
@SLog(tag = "困难补助申请", msg = "删除困难补助申请,id: ${args[0]}")
|
||||
public Result onDelete(@Valid String id){
|
||||
DifficultHelpInfo helpInfo = dao.fetch(DifficultHelpInfo.class, id);
|
||||
if (helpInfo == null || !SecurityUtil.getUserId().equals(helpInfo.getCreatedBy())) {
|
||||
return Result.error("只能删除自己创建的申请记录");
|
||||
}
|
||||
dao.clear(DifficultHelpInfo.class, Cnd.where("id", "=", id));
|
||||
// 删除流程相关操作
|
||||
flowEngine.processInstanceService().deleteProcessInstanceByBusinessKey(id);
|
||||
@@ -130,7 +137,7 @@ public class DifficultHelpMineController {
|
||||
|
||||
@At
|
||||
@ApiModelProperty("获取困难补助申请")
|
||||
@SaCheckPermission("difficultHelp.mine")
|
||||
@SaCheckPermission(value = {"difficultHelp.mine", "difficultHelp.reading"}, mode = SaMode.OR)
|
||||
public Result findOne(String id) {
|
||||
DifficultHelpInfo helpInfo = dao.fetch(DifficultHelpInfo.class, id);
|
||||
return Result.success().addData(helpInfo);
|
||||
|
||||
@@ -26,15 +26,15 @@ import java.util.List;
|
||||
/**
|
||||
* @version 1.0
|
||||
* @Author zzr
|
||||
* @name:DifficultHelpBranchUnionApprovalController
|
||||
* @name:DifficultHelpSecondApprovalController
|
||||
* @Date 2025/7/31 11:47
|
||||
* @注释
|
||||
*/
|
||||
@IocBean
|
||||
@Ok("json")
|
||||
@ApiOperation("困难补助二级党组织审核")
|
||||
@At("/platform/difficultHelp/unionLeaderApproval")
|
||||
public class DifficultHelpBranchUnionLeaderApprovalController {
|
||||
@ApiOperation("困难补助二级审核")
|
||||
@At("/platform/difficultHelp/secondApproval")
|
||||
public class DifficultHelpSecondApprovalController {
|
||||
|
||||
@Inject
|
||||
private Dao dao;
|
||||
@@ -42,27 +42,27 @@ public class DifficultHelpBranchUnionLeaderApprovalController {
|
||||
private DifficultHelpCommonService difficultHelpCommonService;
|
||||
|
||||
@At("")
|
||||
@SaCheckPermission("difficultHelp.unionLeaderApproval")
|
||||
@Ok("beetl:/platform/zhgh/staffbenefit/difficulthelp/unionLeaderApproval/index.html")
|
||||
@SaCheckPermission("difficultHelp.secondApproval")
|
||||
@Ok("beetl:/platform/zhgh/staffbenefit/difficulthelp/secondApproval/index.html")
|
||||
public void index() {
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckPermission("difficultHelp.unionLeaderApproval")
|
||||
@Ok("beetl:/platform/zhgh/staffbenefit/difficulthelp/unionLeaderApproval/form.html")
|
||||
@SaCheckPermission("difficultHelp.secondApproval")
|
||||
@Ok("beetl:/platform/zhgh/staffbenefit/difficulthelp/secondApproval/form.html")
|
||||
public void form() {
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckPermission("h5.difficultHelp.unionLeaderApproval")
|
||||
@Ok("beetl:/platform/zhghh5/staffbenefit/difficulthelp/unionLeaderApproval/index.html")
|
||||
@SaCheckPermission("h5.difficultHelp.secondApproval")
|
||||
@Ok("beetl:/platform/zhghh5/staffbenefit/difficulthelp/secondApproval/index.html")
|
||||
public void h5() {
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@ApiOperation("困难补助分工会审核列表")
|
||||
@SaCheckPermission("difficultHelp.unionLeaderApproval")
|
||||
@ApiOperation("困难补助二级审核列表")
|
||||
@SaCheckPermission("difficultHelp.secondApproval")
|
||||
public Result pageData(DifficultHelpPageParam pageParam) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
@@ -30,15 +30,15 @@ import java.util.List;
|
||||
/**
|
||||
* @version 1.0
|
||||
* @Author zzr
|
||||
* @name:DifficultHelpSchoolUnionApprovalController
|
||||
* @name:DifficultHelpThirdApprovalController
|
||||
* @Date 2025/7/31 11:47
|
||||
* @注释
|
||||
*/
|
||||
@IocBean
|
||||
@Ok("json")
|
||||
@ApiOperation("困难补助校工会审核")
|
||||
@At("/platform/difficultHelp/schoolUnionApproval")
|
||||
public class DifficultHelpSchoolUnionApprovalController {
|
||||
@ApiOperation("困难补助三级审核")
|
||||
@At("/platform/difficultHelp/thirdApproval")
|
||||
public class DifficultHelpThirdApprovalController {
|
||||
|
||||
@Inject
|
||||
private Dao dao;
|
||||
@@ -46,26 +46,26 @@ public class DifficultHelpSchoolUnionApprovalController {
|
||||
private DifficultHelpCommonService difficultHelpCommonService;
|
||||
|
||||
@At("")
|
||||
@SaCheckPermission("difficultHelp.schoolUnionApproval")
|
||||
@Ok("beetl:/platform/zhgh/staffbenefit/difficulthelp/schoolunionapproval/index.html")
|
||||
@SaCheckPermission("difficultHelp.thirdApproval")
|
||||
@Ok("beetl:/platform/zhgh/staffbenefit/difficulthelp/thirdApproval/index.html")
|
||||
public void index() {
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckPermission("difficultHelp.schoolUnionApproval")
|
||||
@Ok("beetl:/platform/zhgh/staffbenefit/difficulthelp/schoolunionapproval/form.html")
|
||||
@SaCheckPermission("difficultHelp.thirdApproval")
|
||||
@Ok("beetl:/platform/zhgh/staffbenefit/difficulthelp/thirdApproval/form.html")
|
||||
public void form() {
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckPermission("h5.difficultHelp.schoolUnionApproval")
|
||||
@Ok("beetl:/platform/zhghh5/staffbenefit/difficulthelp/schoolunionapproval/index.html")
|
||||
@SaCheckPermission("h5.difficultHelp.thirdApproval")
|
||||
@Ok("beetl:/platform/zhghh5/staffbenefit/difficulthelp/thirdApproval/index.html")
|
||||
public void h5() {
|
||||
}
|
||||
|
||||
@At
|
||||
@ApiOperation("困难补助校工会审核列表")
|
||||
@SaCheckPermission("difficultHelp.schoolUnionApproval")
|
||||
@ApiOperation("困难补助三级审核列表")
|
||||
@SaCheckPermission("difficultHelp.thirdApproval")
|
||||
public Result pageData(DifficultHelpPageParam pageParam) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
@@ -131,7 +131,7 @@ public class DifficultHelpSchoolUnionApprovalController {
|
||||
|
||||
@At
|
||||
@ApiOperation("保存补助金额、级别")
|
||||
@SaCheckPermission("difficultHelp.schoolUnionApproval")
|
||||
@SaCheckPermission("difficultHelp.thirdApproval")
|
||||
@SLog(tag = "困难补助申请", msg = "保存申请,填写人: ${args[0].proxyUserName}")
|
||||
public Result save(@Param("data") DifficultHelpInfo difficultHelpInfo) {
|
||||
dao.updateIgnoreNull(difficultHelpInfo);
|
||||
@@ -260,7 +260,7 @@ public class TheRapyRecuperationUnionQueryController {
|
||||
cnd.andEX("enroll.isNormal", "=", true);
|
||||
cnd.andEX("YEAR ( enroll.signingUptime )", "=", year);
|
||||
|
||||
if (StrUtil.isNotBlank(lotId)) {
|
||||
if (!"2".equals(state) && StrUtil.isNotBlank(lotId)) {
|
||||
SqlExpressionGroup seg = new SqlExpressionGroup();
|
||||
seg.or("line.lotId", "=", lotId);
|
||||
// seg.or("agency.lotId", "=", lotId);
|
||||
@@ -275,7 +275,7 @@ public class TheRapyRecuperationUnionQueryController {
|
||||
}
|
||||
cnd.andEX("enroll.selfUnionId", "=", unionId);
|
||||
} else {
|
||||
if (StrUtil.isNotBlank(state2)) {
|
||||
if ("1".equals(state) && StrUtil.isNotBlank(state2)) {
|
||||
//等于1本工会人员看自己工会线路人员
|
||||
if (state2.equals("1")) {
|
||||
cnd.andEX("enroll.selfUnionId", "=", TherapyContext.getUnionId());
|
||||
@@ -296,8 +296,10 @@ public class TheRapyRecuperationUnionQueryController {
|
||||
}
|
||||
}
|
||||
cnd.andEX("enroll.selfUnitId", "=", unitId);
|
||||
cnd.andEX("lineu.lineId", "=", takePartInLineId);
|
||||
cnd.andEX("lineu.id", "=", selectId);
|
||||
if (!"2".equals(state)) {
|
||||
cnd.andEX("lineu.lineId", "=", takePartInLineId);
|
||||
cnd.andEX("lineu.id", "=", selectId);
|
||||
}
|
||||
addEnrollTravelAgencyCondition(cnd, agencyId);
|
||||
if (state.equals("1")) {
|
||||
cnd.andEX("line.regionalNature", "=", regionalNature);
|
||||
@@ -305,9 +307,8 @@ public class TheRapyRecuperationUnionQueryController {
|
||||
cnd.and("enroll.takePartInLineId", "!=", "");
|
||||
sql.setVar("lotSql", ",(select lotName from inclusive_therapy_v3_lot where id = line.lotId) as lotName");
|
||||
} else if (state.equals("2")) {
|
||||
cnd.and("enroll.takePartInTravelAgencyId", "is not", null);
|
||||
cnd.and("enroll.takePartInTravelAgencyId", "!=", "");
|
||||
cnd.andEX("enroll.takePartInTravelAgencyId", "=", agencyId);
|
||||
cnd.and("agency.id", "is not", null);
|
||||
cnd.andEX("agency.id", "=", agencyId);
|
||||
} else if ("3".equals(state)) {
|
||||
cnd.and("enroll.takePartInBaseManagementId", "is not", null);
|
||||
cnd.andEX("enroll.takePartInBaseManagementId", "=", takePartInBaseManagementId);
|
||||
@@ -333,27 +334,35 @@ public class TheRapyRecuperationUnionQueryController {
|
||||
public Object getLxsData(PageForm pageForm, String year, String agencyId) {
|
||||
Cnd cnd = Cnd.NEW();
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT agency.*
|
||||
FROM (
|
||||
SELECT
|
||||
*,
|
||||
agency.*,
|
||||
files AS fileId,
|
||||
( SELECT COUNT( 1 ) FROM inclusive_therapy_v3_enroll WHERE agency.id = takePartInTravelAgencyId and isNormal=true and stateId=@stateId $unionCnd $yearCnd) agencyNum
|
||||
( SELECT COUNT(1)
|
||||
FROM inclusive_therapy_v3_enroll enroll
|
||||
LEFT JOIN inclusive_therapy_v3_line_union_select lineu ON lineu.id = enroll.takePartInLineId
|
||||
LEFT JOIN inclusive_therapy_v3_line line ON line.id = lineu.lineId
|
||||
WHERE agency.id = IFNULL(enroll.takePartInTravelAgencyId, IFNULL(lineu.travelAgencyId, line.travelAgencyId))
|
||||
AND enroll.isNormal = TRUE AND enroll.stateId = @stateId
|
||||
$agencyUnionCnd $agencyYearCnd
|
||||
) agencyNum
|
||||
FROM
|
||||
inclusive_therapy_v3_travel_agency agency
|
||||
) agency
|
||||
$condition
|
||||
""").setParam("stateId", TheRapyRecuperationState.PASS);
|
||||
if (!TherapyContext.hasAnyRoles("sysadmin,H06")) {
|
||||
sql.setVar("unionCnd", "AND selfUnionId = '%s' ".formatted(TherapyContext.getUnionId()));
|
||||
sql.setVar("agencyUnionCnd", "AND enroll.selfUnionId = '%s' ".formatted(TherapyContext.getUnionId()));
|
||||
}
|
||||
if (StrUtil.isNotBlank(year)) {
|
||||
sql.setVar("yearCnd", "AND YEAR(signingUptime) = '%s' ".formatted(year));
|
||||
sql.setVar("agencyYearCnd", "AND YEAR(enroll.signingUptime) = '%s' ".formatted(year));
|
||||
}
|
||||
cnd.andEX("agency.`year`", "=", year);
|
||||
cnd.andEX("agency.id", "=", agencyId);
|
||||
cnd.and("agency.agencyNum", ">", 0);
|
||||
sql.setCondition(cnd);
|
||||
Pagination pagination = baseService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
|
||||
List<NutMap> list = pagination.getList();
|
||||
List<NutMap> agencyNum = list.stream().filter(v -> v.getInt("agencyNum") > 0).collect(Collectors.toList());
|
||||
pagination.setList(agencyNum);
|
||||
return pagination;
|
||||
}
|
||||
|
||||
@@ -639,8 +648,8 @@ public class TheRapyRecuperationUnionQueryController {
|
||||
//cnd1.and(Cnd.exps("enroll.selfUnionId", "=", Vi.getUnionId()));
|
||||
}
|
||||
} else if (state.equals("2")) {
|
||||
cnd1.and("enroll.takePartInTravelAgencyId", "is not", null)
|
||||
.and("enroll.takePartInTravelAgencyId", "!=", "")
|
||||
cnd1.and("IFNULL(enroll.takePartInTravelAgencyId, IFNULL(lineu.travelAgencyId, line.travelAgencyId))", "is not", null)
|
||||
.and("IFNULL(enroll.takePartInTravelAgencyId, IFNULL(lineu.travelAgencyId, line.travelAgencyId))", "!=", "")
|
||||
.and("enroll.selfUnionId", "=", TherapyContext.getUnionId());
|
||||
} else {
|
||||
cnd1.and("enroll.takePartInBaseManagementId", "is not", null).and("enroll.selfUnionId", "=", TherapyContext.getUnionId());
|
||||
@@ -675,8 +684,8 @@ public class TheRapyRecuperationUnionQueryController {
|
||||
cnd1.and("enroll.takePartInLineId", "is not", null);
|
||||
cnd1.and("enroll.takePartInLineId", "!=", "");
|
||||
} else if (state.equals("2")) {
|
||||
cnd1.and("enroll.takePartInTravelAgencyId", "is not", null);
|
||||
cnd1.and("enroll.takePartInTravelAgencyId", "!=", "");
|
||||
cnd1.and("IFNULL(enroll.takePartInTravelAgencyId, IFNULL(lineu.travelAgencyId, line.travelAgencyId))", "is not", null);
|
||||
cnd1.and("IFNULL(enroll.takePartInTravelAgencyId, IFNULL(lineu.travelAgencyId, line.travelAgencyId))", "!=", "");
|
||||
cnd1.andEX("enroll.selfUnionId", "=", unionId);
|
||||
} else if (state.equals("3")) {
|
||||
cnd1.and("enroll.takePartInBaseManagementId", "is not", null);
|
||||
@@ -732,8 +741,8 @@ public class TheRapyRecuperationUnionQueryController {
|
||||
//cnd2.and(Cnd.exps("enroll.selfUnionId", "=", Vi.getUnionId()));
|
||||
}
|
||||
} else if (state.equals("2")) {
|
||||
cnd2.and("enroll.takePartInTravelAgencyId", "is not", null)
|
||||
.and("enroll.takePartInTravelAgencyId", "!=", "")
|
||||
cnd2.and("IFNULL(enroll.takePartInTravelAgencyId, IFNULL(lineu.travelAgencyId, line.travelAgencyId))", "is not", null)
|
||||
.and("IFNULL(enroll.takePartInTravelAgencyId, IFNULL(lineu.travelAgencyId, line.travelAgencyId))", "!=", "")
|
||||
.and("enroll.selfUnionId", "=", TherapyContext.getUnionId());
|
||||
} else {
|
||||
cnd2.and("enroll.takePartInBaseManagementId", "is not", null).and("enroll.selfUnionId", "=", TherapyContext.getUnionId());
|
||||
@@ -768,8 +777,8 @@ public class TheRapyRecuperationUnionQueryController {
|
||||
cnd2.and("enroll.takePartInLineId", "is not", null);
|
||||
cnd2.and("enroll.takePartInLineId", "!=", "");
|
||||
} else if (state.equals("2")) {
|
||||
cnd2.and("enroll.takePartInTravelAgencyId", "is not", null);
|
||||
cnd2.and("enroll.takePartInTravelAgencyId", "!=", "");
|
||||
cnd2.and("IFNULL(enroll.takePartInTravelAgencyId, IFNULL(lineu.travelAgencyId, line.travelAgencyId))", "is not", null);
|
||||
cnd2.and("IFNULL(enroll.takePartInTravelAgencyId, IFNULL(lineu.travelAgencyId, line.travelAgencyId))", "!=", "");
|
||||
cnd2.andEX("enroll.selfUnionId", "=", unionId);
|
||||
} else {
|
||||
cnd2.and("enroll.takePartInBaseManagementId", "is not", null);
|
||||
|
||||
@@ -99,8 +99,16 @@ public class TheRapyRecuperationEnrollServiceImpl extends TherapyServiceImpl<The
|
||||
@Inject
|
||||
private TheRapyRecuperationLineService lineService;
|
||||
|
||||
private boolean isCurrentUserInActivityScope() {
|
||||
TheRapyRecuperationConfig config = dao().fetch(TheRapyRecuperationConfig.class);
|
||||
return config != null && activityBasicScopeService.isUserInGroup(config.getActivityGroupId(), TherapyContext.getUserId());
|
||||
}
|
||||
|
||||
@Override
|
||||
public Pagination enrollPageData(PageForm pageForm, Integer year, String unionId, int trrt, Integer lineUnionType, String lineKeyword, Integer signUpStatus) {
|
||||
if (!isCurrentUserInActivityScope()) {
|
||||
return new Pagination(pageForm.getPageNumber(), pageForm.getPageSize(), 0, Collections.emptyList());
|
||||
}
|
||||
Cnd cnd = Cnd.NEW();
|
||||
if (List.of(TheRapyRecuperationType.provinceInLine.getValue(), TheRapyRecuperationType.provinceOutLine.getValue()).contains(trrt)) {
|
||||
Sql lineSql = Sqls.create("""
|
||||
@@ -217,6 +225,9 @@ public class TheRapyRecuperationEnrollServiceImpl extends TherapyServiceImpl<The
|
||||
|
||||
@Override
|
||||
public List<NutMap> getSelectLineById(String lineId, String usId, String unionId, int trrt, Integer lineUnionType, Integer signUpStatus) {
|
||||
if (!isCurrentUserInActivityScope()) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
Sql lineSql = Sqls.create("""
|
||||
SELECT
|
||||
us.id as usId,
|
||||
|
||||
@@ -2,6 +2,7 @@ package com.budwk.app.zhgh.staffbenefit.therapyRecuperation.service.impl;
|
||||
|
||||
import com.budwk.app.base.page.Pagination;
|
||||
import com.budwk.app.zhgh.staffbenefit.therapyRecuperation.support.TherapyContext;
|
||||
import com.budwk.app.zhgh.staffbenefit.therapyRecuperation.constant.TheRapyRecuperationState;
|
||||
import com.budwk.app.base.param.PageForm;
|
||||
import com.budwk.app.zhgh.staffbenefit.therapyRecuperation.support.TherapyServiceImpl;
|
||||
import com.budwk.app.zhgh.staffbenefit.therapyRecuperation.model.TheRapyRecuperationTravelAgency;
|
||||
@@ -114,11 +115,22 @@ public class TheRapyRecuperationTravelAgencyServiceImpl extends TherapyServiceIm
|
||||
( SELECT COUNT( 1 ) FROM inclusive_therapy_v3_enroll_companion WHERE trreId = enroll.id AND relation = '亲属' ) isFamily
|
||||
FROM
|
||||
`inclusive_therapy_v3_enroll` enroll
|
||||
LEFT JOIN inclusive_therapy_v3_travel_agency agency ON agency.id = enroll.takePartInTravelAgencyId
|
||||
LEFT JOIN inclusive_therapy_v3_line_union_select lineu ON lineu.id = enroll.takePartInLineId
|
||||
LEFT JOIN inclusive_therapy_v3_line line ON line.id = lineu.lineId
|
||||
LEFT JOIN inclusive_therapy_v3_travel_agency agency
|
||||
ON agency.id = IFNULL(enroll.takePartInTravelAgencyId, IFNULL(lineu.travelAgencyId, line.travelAgencyId))
|
||||
WHERE
|
||||
enroll.takePartInTravelAgencyId = @takePartInTravelAgencyId
|
||||
and enroll.selfUnionId = @unionId
|
||||
""").setParam("takePartInTravelAgencyId", id).setParam("unionId", TherapyContext.getUnionId());
|
||||
agency.id = @takePartInTravelAgencyId
|
||||
AND enroll.isNormal = TRUE
|
||||
AND enroll.stateId = @stateId
|
||||
AND YEAR(enroll.signingUptime) = agency.year
|
||||
$agencyUnionCnd
|
||||
""").setParam("takePartInTravelAgencyId", id)
|
||||
.setParam("stateId", TheRapyRecuperationState.PASS);
|
||||
if (!TherapyContext.hasAnyRoles("sysadmin,H06")) {
|
||||
sql.setVar("agencyUnionCnd", "AND enroll.selfUnionId = @unionId");
|
||||
sql.setParam("unionId", TherapyContext.getUnionId());
|
||||
}
|
||||
return listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -25,6 +25,16 @@ public class MemberHistory extends Sys_user {
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String id;
|
||||
|
||||
@Column
|
||||
@Comment("编制类别")
|
||||
@ColDefine(type = ColType.TEXT)
|
||||
private String preparedBy;
|
||||
|
||||
@Column
|
||||
@Comment("岗位类别")
|
||||
@ColDefine(type = ColType.TEXT)
|
||||
private String jobCategory;
|
||||
|
||||
@Column
|
||||
@Comment("年度")
|
||||
@ColDefine(type = ColType.INT, width = 4)
|
||||
|
||||
@@ -5,7 +5,6 @@ import cn.afterturn.easypoi.excel.ExcelExportUtil;
|
||||
import cn.afterturn.easypoi.excel.entity.ExportParams;
|
||||
import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
|
||||
import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
|
||||
import cn.afterturn.easypoi.excel.export.ExcelExportService;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.budwk.app.base.constant.RoleConstant;
|
||||
import com.budwk.app.base.page.Pagination;
|
||||
@@ -24,6 +23,13 @@ import com.budwk.app.zhgh.welfare.param.WelfareSelectionSituationPageForm;
|
||||
import com.budwk.app.zhgh.welfare.service.WelfareSelectionSituationService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
||||
import org.apache.poi.ss.usermodel.Cell;
|
||||
import org.apache.poi.ss.usermodel.CellStyle;
|
||||
import org.apache.poi.ss.usermodel.ClientAnchor;
|
||||
import org.apache.poi.ss.usermodel.Drawing;
|
||||
import org.apache.poi.ss.usermodel.Font;
|
||||
import org.apache.poi.ss.usermodel.Row;
|
||||
import org.apache.poi.ss.usermodel.Sheet;
|
||||
import org.apache.poi.ss.usermodel.Workbook;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Dao;
|
||||
@@ -232,55 +238,69 @@ public class WelfareSelectionSituationServiceImpl extends BaseServiceImpl<Welfar
|
||||
List<WelfareProjectSubjectOption> optionList = dao().query(WelfareProjectSubjectOption.class, Cnd.where(WelfareProjectSubjectOption::getWelfareId, "=", pageForm.getProjectId()).asc("optionSort"));
|
||||
|
||||
for (NutMap map : list) {
|
||||
if (map.get("selectOptionIds") != null){
|
||||
String[] selectOptionIds = map.getString("selectOptionIds").split(",");
|
||||
for (WelfareProjectSubjectOption option : optionList) {
|
||||
if(Arrays.asList(selectOptionIds).contains(option.getId())){
|
||||
map.put(option.getOptionName(), "√");
|
||||
}
|
||||
}
|
||||
}
|
||||
if (map.get("userSign") != null){
|
||||
if (map.get("userSign") != null) {
|
||||
try {
|
||||
Sys_file file = dao().fetch(Sys_file.class, Cnd.where(Sys_file::getDownloadPath, "=", map.getString("userSign")));
|
||||
byte[] userSignBytes = SysFileMinIoUtil.getFileBytes(file.getBucket(), file.getStoragePath());
|
||||
map.put("userSign", userSignBytes);
|
||||
}catch (Exception e){
|
||||
e.printStackTrace();
|
||||
log.error("下载图片失败", e);
|
||||
BufferedImage image = ImageIO.read(new ByteArrayInputStream(userSignBytes));
|
||||
if (image != null) {
|
||||
ByteArrayOutputStream png = new ByteArrayOutputStream();
|
||||
ImageIO.write(image, "png", png);
|
||||
map.put("userSign", png.toByteArray());
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("下载签字图片失败", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
List<Map<String, Object>> safeList = list.stream().map(nutMap -> {
|
||||
Map<String, Object> map = new HashMap<>(nutMap);
|
||||
return map;
|
||||
}).toList();
|
||||
|
||||
// 分组
|
||||
Map<String, List<Map<String, Object>>> listMap = safeList.stream()
|
||||
.collect(Collectors.groupingBy(n -> (String) n.get("welfareUnionName")));
|
||||
|
||||
// 构建 Excel 列
|
||||
List<ExcelExportEntity> entities = new ArrayList<>();
|
||||
entities.add(new ExcelExportEntity("工号", "loginName", 20));
|
||||
entities.add(new ExcelExportEntity("姓名", "userName", 20));
|
||||
optionList.forEach(option -> {
|
||||
entities.add(new ExcelExportEntity(option.getOptionName(), option.getOptionName(), 20));
|
||||
});
|
||||
ExcelExportEntity userSignEntity = new ExcelExportEntity("签字", "userSign", 20);
|
||||
userSignEntity.setType(2);
|
||||
userSignEntity.setExportImageType(2);
|
||||
entities.add(userSignEntity);
|
||||
|
||||
// 导出
|
||||
Map<String, List<NutMap>> rowsByUnion = list.stream()
|
||||
.collect(Collectors.groupingBy(n -> n.getString("welfareUnionName")));
|
||||
Workbook workbook = new HSSFWorkbook();
|
||||
listMap.forEach((k, v) -> {
|
||||
ExcelExportService service = new ExcelExportService();
|
||||
ExportParams exportParams = new ExportParams();
|
||||
exportParams.setSheetName(k);
|
||||
exportParams.setType(ExcelType.HSSF);
|
||||
service.createSheetForMap(workbook, exportParams, entities, v);
|
||||
if (rowsByUnion.isEmpty()) {
|
||||
rowsByUnion.put("领取表", Collections.emptyList());
|
||||
}
|
||||
|
||||
CellStyle headerStyle = workbook.createCellStyle();
|
||||
Font headerFont = workbook.createFont();
|
||||
headerFont.setBold(true);
|
||||
headerStyle.setFont(headerFont);
|
||||
|
||||
List<String> headers = new ArrayList<>(List.of("工号", "姓名"));
|
||||
optionList.forEach(option -> headers.add(option.getOptionName()));
|
||||
headers.add("签字");
|
||||
int signColumn = headers.size() - 1;
|
||||
|
||||
rowsByUnion.forEach((unionName, records) -> {
|
||||
Sheet sheet = workbook.createSheet(unionName);
|
||||
Row header = sheet.createRow(0);
|
||||
for (int column = 0; column < headers.size(); column++) {
|
||||
sheet.setColumnWidth(column, 20 * 256);
|
||||
Cell cell = header.createCell(column);
|
||||
cell.setCellValue(headers.get(column));
|
||||
cell.setCellStyle(headerStyle);
|
||||
}
|
||||
|
||||
Drawing<?> drawing = sheet.createDrawingPatriarch();
|
||||
for (NutMap record : records) {
|
||||
Row row = sheet.createRow(sheet.getLastRowNum() + 1);
|
||||
row.createCell(0).setCellValue(Objects.toString(record.get("loginName"), ""));
|
||||
row.createCell(1).setCellValue(Objects.toString(record.get("userName"), ""));
|
||||
Set<String> selectedIds = new HashSet<>(Arrays.asList(
|
||||
Objects.toString(record.get("selectOptionIds"), "").split(",")));
|
||||
for (int i = 0; i < optionList.size(); i++) {
|
||||
row.createCell(i + 2).setCellValue(selectedIds.contains(optionList.get(i).getId()) ? "√" : "");
|
||||
}
|
||||
if (record.get("userSign") instanceof byte[] signature) {
|
||||
row.setHeightInPoints(40);
|
||||
ClientAnchor anchor = workbook.getCreationHelper().createClientAnchor();
|
||||
anchor.setCol1(signColumn);
|
||||
anchor.setCol2(signColumn + 1);
|
||||
anchor.setRow1(row.getRowNum());
|
||||
anchor.setRow2(row.getRowNum() + 1);
|
||||
drawing.createPicture(anchor, workbook.addPicture(signature, Workbook.PICTURE_TYPE_PNG));
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
CommonDownloadUtil.download("领取表.xls", workbook, response);
|
||||
|
||||
@@ -34,7 +34,7 @@ sdk:
|
||||
appSecret: a65cec4fb69980bd88258fc8433a3eef
|
||||
redirectUri: /platform/wx/oauth2/callback
|
||||
cas:
|
||||
enable: true
|
||||
enable: false
|
||||
server-url-prefix: https://authserver.zjnu.edu.cn/authserver
|
||||
server-login-url: https://authserver.zjnu.edu.cn/authserver/login
|
||||
qi-wx-server-login-url: https://authserver.zjnu.edu.cn/authserver/login
|
||||
@@ -80,3 +80,10 @@ custom:
|
||||
encrypted-secret-key: ''
|
||||
connect-timeout: 5000
|
||||
read-timeout: 10000
|
||||
|
||||
invoice:
|
||||
tencent:
|
||||
# 发票 OCR 使用腾讯云 SecretId/SecretKey;为空时会回退读取 secret-file 指向的 csv。
|
||||
secret-id: AKID1473y253saFsMelgS4TjnfLofMrAHDyX
|
||||
secret-key: TlrlTzIRNjtIj296riPuISbmqplnhQDy
|
||||
secret-file: C:/Users/Administrator/Desktop
|
||||
@@ -68,7 +68,7 @@ custom:
|
||||
msg:
|
||||
platform:
|
||||
enabled: true
|
||||
IntelligenceMode: false
|
||||
IntelligenceMode: true
|
||||
app-id: 'MSG45363193'
|
||||
app-password: 'OGQxNzVmOTJkZjM5NzJhZDg1MDNiZGM0MDQ5ZTJlNDY'
|
||||
base-url: http://xxt.zjnu.edu.cn
|
||||
|
||||
@@ -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,73 @@
|
||||
-- 年度基础经费与专项经费下拨;原 outlay_allocate_union 历史记录及余额保持不变。
|
||||
-- 人数口径沿用会员统计:本年度 vw_user.member=1,历史年度 member_history.member=1。
|
||||
-- 新表仅记录新流程数据,不自动将历史季度下拨转为年度基础经费,避免重复计入预算。
|
||||
CREATE TABLE IF NOT EXISTS `outlay_annual_base` (
|
||||
`id` varchar(32) NOT NULL,
|
||||
`year` int NOT NULL,
|
||||
`unionId` varchar(32) NOT NULL,
|
||||
`memberCount` int NOT NULL,
|
||||
`standard` decimal(10,2) NOT NULL DEFAULT 800.00,
|
||||
`calculatedMoney` decimal(10,2) NOT NULL,
|
||||
`allocateMoney` decimal(10,2) NOT NULL,
|
||||
`remark` varchar(1000) DEFAULT NULL,
|
||||
`status` tinyint NOT NULL DEFAULT 0 COMMENT '0待下拨 1已下拨 2已重置',
|
||||
`version` int NOT NULL DEFAULT 0,
|
||||
`createdAt` bigint NOT NULL,
|
||||
`createdBy` varchar(32) NOT NULL,
|
||||
`updatedAt` bigint NOT NULL,
|
||||
`updatedBy` varchar(32) NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_annual_base_year_union` (`year`,`unionId`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='年度基础经费下拨';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `outlay_annual_special` (
|
||||
`id` varchar(32) NOT NULL COMMENT '同时作为提交幂等标识',
|
||||
`year` int NOT NULL,
|
||||
`unionId` varchar(32) NOT NULL,
|
||||
`projectName` varchar(100) NOT NULL,
|
||||
`allocateMoney` decimal(10,2) NOT NULL,
|
||||
`remark` varchar(1000) DEFAULT NULL,
|
||||
`status` tinyint NOT NULL DEFAULT 0 COMMENT '0待下拨 1已下拨',
|
||||
`version` int NOT NULL DEFAULT 0,
|
||||
`createdAt` bigint NOT NULL,
|
||||
`createdBy` varchar(32) NOT NULL,
|
||||
`updatedAt` bigint NOT NULL,
|
||||
`updatedBy` varchar(32) NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_annual_special_year_union` (`year`,`unionId`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='专项经费下拨';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `outlay_annual_allocate_log` (
|
||||
`id` varchar(32) NOT NULL,
|
||||
`allocateType` varchar(10) NOT NULL,
|
||||
`allocateId` varchar(32) NOT NULL,
|
||||
`action` varchar(30) NOT NULL,
|
||||
`beforeData` text DEFAULT NULL COMMENT '操作前完整快照',
|
||||
`afterData` text NOT NULL COMMENT '操作后完整快照',
|
||||
`remark` varchar(1000) DEFAULT NULL,
|
||||
`createdAt` bigint NOT NULL,
|
||||
`createdBy` varchar(32) NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_annual_log_record_time` (`allocateType`,`allocateId`,`createdAt`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='经费下拨及调整记录';
|
||||
|
||||
-- 兼容已执行旧版建表脚本的数据库。
|
||||
SET @drop_annual_allocated_at = IF(EXISTS (
|
||||
SELECT 1 FROM information_schema.COLUMNS
|
||||
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'outlay_annual_base' AND COLUMN_NAME = 'allocatedAt'
|
||||
), 'ALTER TABLE `outlay_annual_base` DROP COLUMN `allocatedAt`', 'DO 0');
|
||||
PREPARE drop_annual_allocated_at FROM @drop_annual_allocated_at;
|
||||
EXECUTE drop_annual_allocated_at;
|
||||
DEALLOCATE PREPARE drop_annual_allocated_at;
|
||||
|
||||
SET @drop_annual_allocated_at = IF(EXISTS (
|
||||
SELECT 1 FROM information_schema.COLUMNS
|
||||
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'outlay_annual_special' AND COLUMN_NAME = 'allocatedAt'
|
||||
), 'ALTER TABLE `outlay_annual_special` DROP COLUMN `allocatedAt`', 'DO 0');
|
||||
PREPARE drop_annual_allocated_at FROM @drop_annual_allocated_at;
|
||||
EXECUTE drop_annual_allocated_at;
|
||||
DEALLOCATE PREPARE drop_annual_allocated_at;
|
||||
|
||||
-- 沿用现有权限与入口,仅调整菜单名称。
|
||||
UPDATE sys_menu SET name='年度经费下拨', aliasName='年度经费下拨'
|
||||
WHERE permission='outlay.outlayManage.union.allocate';
|
||||
@@ -0,0 +1,783 @@
|
||||
-- 人员接口原始代码到名称的映射;系统页面字典另由 sys_dict 保存名称值。
|
||||
-- 同分类、同代码已有记录更新名称,缺失记录补充,不删除其他记录。
|
||||
SET NAMES utf8mb4;
|
||||
START TRANSACTION;
|
||||
|
||||
UPDATE sys_data_dict existing
|
||||
JOIN (
|
||||
SELECT 'USER_SEX' AS parentCode, '1' AS code, '男' AS name
|
||||
UNION ALL SELECT 'USER_SEX', '2', '女'
|
||||
UNION ALL SELECT 'USER_POLITICAL', '01', '中国共产党员'
|
||||
UNION ALL SELECT 'USER_POLITICAL', '02', '中国共产党预备党员'
|
||||
UNION ALL SELECT 'USER_POLITICAL', '03', '中国共产主义青年团团员'
|
||||
UNION ALL SELECT 'USER_POLITICAL', '04', '中国国民党革命委员会会员'
|
||||
UNION ALL SELECT 'USER_POLITICAL', '05', '中国民主同盟盟员'
|
||||
UNION ALL SELECT 'USER_POLITICAL', '06', '中国民主建国会会员'
|
||||
UNION ALL SELECT 'USER_POLITICAL', '07', '中国民主促进会会员'
|
||||
UNION ALL SELECT 'USER_POLITICAL', '08', '中国农工民主党党员'
|
||||
UNION ALL SELECT 'USER_POLITICAL', '09', '中国致公党党员'
|
||||
UNION ALL SELECT 'USER_POLITICAL', '10', '九三学社社员'
|
||||
UNION ALL SELECT 'USER_POLITICAL', '11', '台湾民主自治同盟盟员'
|
||||
UNION ALL SELECT 'USER_POLITICAL', '12', '无党派民主人士'
|
||||
UNION ALL SELECT 'USER_POLITICAL', '13', '群众'
|
||||
UNION ALL SELECT 'USER_POLITICAL', '14', '入党积极分子'
|
||||
UNION ALL SELECT 'USER_POLITICAL', '99', '其他'
|
||||
UNION ALL SELECT 'USER_NATION', '01', '汉族'
|
||||
UNION ALL SELECT 'USER_NATION', '02', '蒙古族'
|
||||
UNION ALL SELECT 'USER_NATION', '03', '回族'
|
||||
UNION ALL SELECT 'USER_NATION', '04', '藏族'
|
||||
UNION ALL SELECT 'USER_NATION', '05', '维吾尔族'
|
||||
UNION ALL SELECT 'USER_NATION', '06', '苗族'
|
||||
UNION ALL SELECT 'USER_NATION', '07', '彝族'
|
||||
UNION ALL SELECT 'USER_NATION', '08', '壮族'
|
||||
UNION ALL SELECT 'USER_NATION', '09', '布依族'
|
||||
UNION ALL SELECT 'USER_NATION', '10', '朝鲜族'
|
||||
UNION ALL SELECT 'USER_NATION', '11', '满族'
|
||||
UNION ALL SELECT 'USER_NATION', '12', '侗族'
|
||||
UNION ALL SELECT 'USER_NATION', '13', '瑶族'
|
||||
UNION ALL SELECT 'USER_NATION', '14', '白族'
|
||||
UNION ALL SELECT 'USER_NATION', '15', '土家族'
|
||||
UNION ALL SELECT 'USER_NATION', '16', '哈尼族'
|
||||
UNION ALL SELECT 'USER_NATION', '17', '哈萨克族'
|
||||
UNION ALL SELECT 'USER_NATION', '18', '傣族'
|
||||
UNION ALL SELECT 'USER_NATION', '19', '黎族'
|
||||
UNION ALL SELECT 'USER_NATION', '20', '傈僳族'
|
||||
UNION ALL SELECT 'USER_NATION', '21', '佤族'
|
||||
UNION ALL SELECT 'USER_NATION', '22', '畲族'
|
||||
UNION ALL SELECT 'USER_NATION', '23', '高山族'
|
||||
UNION ALL SELECT 'USER_NATION', '24', '拉祜族'
|
||||
UNION ALL SELECT 'USER_NATION', '25', '水族'
|
||||
UNION ALL SELECT 'USER_NATION', '26', '东乡族'
|
||||
UNION ALL SELECT 'USER_NATION', '27', '纳西族'
|
||||
UNION ALL SELECT 'USER_NATION', '28', '景颇族'
|
||||
UNION ALL SELECT 'USER_NATION', '29', '柯尔克孜族'
|
||||
UNION ALL SELECT 'USER_NATION', '30', '土族'
|
||||
UNION ALL SELECT 'USER_NATION', '31', '达斡尔族'
|
||||
UNION ALL SELECT 'USER_NATION', '32', '仫佬族'
|
||||
UNION ALL SELECT 'USER_NATION', '33', '羌族'
|
||||
UNION ALL SELECT 'USER_NATION', '34', '布朗族'
|
||||
UNION ALL SELECT 'USER_NATION', '35', '撒拉族'
|
||||
UNION ALL SELECT 'USER_NATION', '36', '毛南族'
|
||||
UNION ALL SELECT 'USER_NATION', '37', '仡佬族'
|
||||
UNION ALL SELECT 'USER_NATION', '38', '锡伯族'
|
||||
UNION ALL SELECT 'USER_NATION', '39', '阿昌族'
|
||||
UNION ALL SELECT 'USER_NATION', '40', '普米族'
|
||||
UNION ALL SELECT 'USER_NATION', '41', '塔吉克族'
|
||||
UNION ALL SELECT 'USER_NATION', '42', '怒族'
|
||||
UNION ALL SELECT 'USER_NATION', '43', '乌孜别克族'
|
||||
UNION ALL SELECT 'USER_NATION', '44', '俄罗斯族'
|
||||
UNION ALL SELECT 'USER_NATION', '45', '鄂温克族'
|
||||
UNION ALL SELECT 'USER_NATION', '46', '崩龙族'
|
||||
UNION ALL SELECT 'USER_NATION', '47', '保安族'
|
||||
UNION ALL SELECT 'USER_NATION', '48', '裕固族'
|
||||
UNION ALL SELECT 'USER_NATION', '49', '京族'
|
||||
UNION ALL SELECT 'USER_NATION', '50', '塔塔尔族'
|
||||
UNION ALL SELECT 'USER_NATION', '51', '独龙族'
|
||||
UNION ALL SELECT 'USER_NATION', '52', '鄂伦春族'
|
||||
UNION ALL SELECT 'USER_NATION', '53', '赫哲族'
|
||||
UNION ALL SELECT 'USER_NATION', '54', '门巴族'
|
||||
UNION ALL SELECT 'USER_NATION', '55', '珞巴族'
|
||||
UNION ALL SELECT 'USER_NATION', '56', '基诺族'
|
||||
UNION ALL SELECT 'USER_NATION', '59', '穿青人'
|
||||
UNION ALL SELECT 'USER_NATION', '60', '革(亻革)家人'
|
||||
UNION ALL SELECT 'USER_NATION', '90', '藏族(区内)'
|
||||
UNION ALL SELECT 'USER_NATION', '97', '其他'
|
||||
UNION ALL SELECT 'USER_NATION', '98', '外国血统中国籍人士'
|
||||
UNION ALL SELECT 'USER_STATE', '01', '离退休'
|
||||
UNION ALL SELECT 'USER_STATE', '03', '死亡'
|
||||
UNION ALL SELECT 'USER_STATE', '04', '退休返聘'
|
||||
UNION ALL SELECT 'USER_STATE', '05', '调出'
|
||||
UNION ALL SELECT 'USER_STATE', '06', '辞职'
|
||||
UNION ALL SELECT 'USER_STATE', '07', '离职'
|
||||
UNION ALL SELECT 'USER_STATE', '08', '开除'
|
||||
UNION ALL SELECT 'USER_STATE', '11', '在职'
|
||||
UNION ALL SELECT 'USER_STATE', '14', '长病假'
|
||||
UNION ALL SELECT 'USER_STATE', '15', '因公出国'
|
||||
UNION ALL SELECT 'USER_STATE', '17', '待岗'
|
||||
UNION ALL SELECT 'USER_STATE', '19', '内退'
|
||||
UNION ALL SELECT 'USER_STATE', '20', '自主创业'
|
||||
UNION ALL SELECT 'USER_STATE', '21', '挂职'
|
||||
UNION ALL SELECT 'USER_STATE', '22', '在岗'
|
||||
UNION ALL SELECT 'USER_STATE', '98', '病假等'
|
||||
UNION ALL SELECT 'USER_STATE', '99', '其他'
|
||||
UNION ALL SELECT 'USER_STATE', '999', '报到办理中'
|
||||
UNION ALL SELECT 'USER_JOB_CATEGORY', '10', '管理岗位'
|
||||
UNION ALL SELECT 'USER_JOB_CATEGORY', '20', '专业技术岗位'
|
||||
UNION ALL SELECT 'USER_JOB_CATEGORY', '21', '教师岗位'
|
||||
UNION ALL SELECT 'USER_JOB_CATEGORY', '22', '专职辅导员岗位'
|
||||
UNION ALL SELECT 'USER_JOB_CATEGORY', '23', '其他专业技术岗位'
|
||||
UNION ALL SELECT 'USER_JOB_CATEGORY', '30', '工勤技能岗位'
|
||||
UNION ALL SELECT 'USER_JOB_CATEGORY', '125', '编辑'
|
||||
UNION ALL SELECT 'USER_JOB_CATEGORY', '126', '编审'
|
||||
UNION ALL SELECT 'USER_JOB_CATEGORY', '127', '大学讲师'
|
||||
UNION ALL SELECT 'USER_JOB_CATEGORY', '128', '档案'
|
||||
UNION ALL SELECT 'USER_JOB_CATEGORY', '129', '副教授'
|
||||
UNION ALL SELECT 'USER_JOB_CATEGORY', '130', '高级工程师'
|
||||
UNION ALL SELECT 'USER_JOB_CATEGORY', '131', '高级会计师'
|
||||
UNION ALL SELECT 'USER_JOB_CATEGORY', '132', '高级讲师'
|
||||
UNION ALL SELECT 'USER_JOB_CATEGORY', '133', '高校讲师'
|
||||
UNION ALL SELECT 'USER_JOB_CATEGORY', '134', '工程'
|
||||
UNION ALL SELECT 'USER_JOB_CATEGORY', '135', '馆员'
|
||||
UNION ALL SELECT 'USER_JOB_CATEGORY', '136', '管理'
|
||||
UNION ALL SELECT 'USER_JOB_CATEGORY', '137', '会计'
|
||||
UNION ALL SELECT 'USER_JOB_CATEGORY', '138', '会计审计'
|
||||
UNION ALL SELECT 'USER_JOB_CATEGORY', '139', '讲师'
|
||||
UNION ALL SELECT 'USER_JOB_CATEGORY', '140', '教管'
|
||||
UNION ALL SELECT 'USER_JOB_CATEGORY', '142', '教育管理'
|
||||
UNION ALL SELECT 'USER_JOB_CATEGORY', '143', '科研'
|
||||
UNION ALL SELECT 'USER_JOB_CATEGORY', '145', '实验'
|
||||
UNION ALL SELECT 'USER_JOB_CATEGORY', '146', '实验师'
|
||||
UNION ALL SELECT 'USER_JOB_CATEGORY', '147', '思政'
|
||||
UNION ALL SELECT 'USER_JOB_CATEGORY', '148', '图资'
|
||||
UNION ALL SELECT 'USER_JOB_CATEGORY', '149', '卫计'
|
||||
UNION ALL SELECT 'USER_JOB_CATEGORY', '150', '卫技'
|
||||
UNION ALL SELECT 'USER_JOB_CATEGORY', '151', '幼教'
|
||||
UNION ALL SELECT 'USER_ID_CARD_TYPE', '0', '居民身份证'
|
||||
UNION ALL SELECT 'USER_ID_CARD_TYPE', '1', '护照'
|
||||
UNION ALL SELECT 'USER_ID_CARD_TYPE', '2', '港澳台居民身份证'
|
||||
UNION ALL SELECT 'USER_ID_CARD_TYPE', '4', '旅行证据'
|
||||
UNION ALL SELECT 'USER_ID_CARD_TYPE', '5', '其他'
|
||||
UNION ALL SELECT 'USER_MANY_UNIT', '0', '否'
|
||||
UNION ALL SELECT 'USER_MANY_UNIT', '1', '是'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '000', '无学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '0', '博士后'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '004', '教育学博士后'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '005', '文学博士后'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '006', '历史学博士后'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '008', '工学博士后'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '100', '名誉博士学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '200', '博士学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '201', '哲学博士学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '202', '经济学博士学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '203', '法学博士学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '204', '教育学博士学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '205', '文学博士学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '206', '历史学博士学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '207', '理学博士学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '208', '工学博士学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '209', '农学博士学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '210', '医学博士学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '212', '管理学博士学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '213', '艺术学博士学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '242', '教育博士专业学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '245', '临床医学博士专业学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '248', '兽医博士专业学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '250', '口腔医学博士专业学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '300', '硕士学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '301', '哲学硕士学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '302', '经济学硕士学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '303', '法学硕士学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '304', '教育学硕士学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '305', '文学硕士学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '306', '历史学硕士学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '307', '理学硕士学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '308', '工学硕士学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '309', '农学硕士学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '310', '医学硕士学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '312', '管理学硕士学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '313', '艺术学硕士学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '341', '法律硕士专业学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '342', '教育硕士专业学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '343', '工程硕士专业学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '344', '建筑学硕士专业学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '345', '临床学硕士专业学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '346', '工商管理硕士专业学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '347', '农业推广硕士专业学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '348', '兽医硕士专业学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '349', '公共管理硕士专业学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '350', '口腔医学硕士专业学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '351', '公共卫生硕士专业学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '352', '军事硕士专业学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '353', '金融硕士专业学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '354', '体育硕士专业学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '355', '艺术硕士专业学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '356', '风景园林硕士专业学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '357', '汉语国际教育硕士专业学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '358', '翻译硕士专业学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '359', '审计硕士专业学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '360', '社会工作硕士专业学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '362', '体育硕士专业学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '364', '应用心理硕士专业学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '365', '翻译硕士专业学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '370', '风景园林硕士专业学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '375', '会计硕士专业学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '377', '图书情报硕士专业学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '379', '艺术硕士专业学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '400', '学士学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '401', '哲学学士学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '402', '经济学学士学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '403', '法学学士学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '404', '教育学学士学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '405', '文学学士学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '406', '历史学学士学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '407', '理学学士学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '408', '工学学士学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '409', '农学学士学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '410', '医学学士学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '412', '管理学学士学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '413', '艺术学学士学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '444', '建筑学学士专业学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '900', '境外学位'
|
||||
UNION ALL SELECT 'USER_EDUCATION', '10', '研究生教育'
|
||||
UNION ALL SELECT 'USER_EDUCATION', '11', '博士研究生毕业'
|
||||
UNION ALL SELECT 'USER_EDUCATION', '12', '博士研究生结业'
|
||||
UNION ALL SELECT 'USER_EDUCATION', '14', '硕士研究生毕业'
|
||||
UNION ALL SELECT 'USER_EDUCATION', '15', '硕士研究生结业'
|
||||
UNION ALL SELECT 'USER_EDUCATION', '17', '研究生班毕业'
|
||||
UNION ALL SELECT 'USER_EDUCATION', '18', '研究生班结业'
|
||||
UNION ALL SELECT 'USER_EDUCATION', '20', '大学本科教育'
|
||||
UNION ALL SELECT 'USER_EDUCATION', '21', '大学本科毕业'
|
||||
UNION ALL SELECT 'USER_EDUCATION', '22', '大学本科结业'
|
||||
UNION ALL SELECT 'USER_EDUCATION', '25', '双学历毕业'
|
||||
UNION ALL SELECT 'USER_EDUCATION', '28', '大学普通班毕业'
|
||||
UNION ALL SELECT 'USER_EDUCATION', '30', '大学专科教育'
|
||||
UNION ALL SELECT 'USER_EDUCATION', '31', '大学专科毕业'
|
||||
UNION ALL SELECT 'USER_EDUCATION', '32', '大学专科结业'
|
||||
UNION ALL SELECT 'USER_EDUCATION', '40', '中等职业教育'
|
||||
UNION ALL SELECT 'USER_EDUCATION', '41', '中等专科毕业'
|
||||
UNION ALL SELECT 'USER_EDUCATION', '42', '中等专科结业'
|
||||
UNION ALL SELECT 'USER_EDUCATION', '43', '中等专科肄业'
|
||||
UNION ALL SELECT 'USER_EDUCATION', '44', '职业高中毕业'
|
||||
UNION ALL SELECT 'USER_EDUCATION', '45', '职业高中结业'
|
||||
UNION ALL SELECT 'USER_EDUCATION', '47', '技工学校毕业'
|
||||
UNION ALL SELECT 'USER_EDUCATION', '48', '技工学校结业'
|
||||
UNION ALL SELECT 'USER_EDUCATION', '60', '普通高级中学教育'
|
||||
UNION ALL SELECT 'USER_EDUCATION', '61', '普通高中毕业'
|
||||
UNION ALL SELECT 'USER_EDUCATION', '62', '普通高中结业'
|
||||
UNION ALL SELECT 'USER_EDUCATION', '63', '普通高中肄业'
|
||||
UNION ALL SELECT 'USER_EDUCATION', '70', '初级中学教育'
|
||||
UNION ALL SELECT 'USER_EDUCATION', '71', '初中毕业'
|
||||
UNION ALL SELECT 'USER_EDUCATION', '73', '初中肄业'
|
||||
UNION ALL SELECT 'USER_EDUCATION', '80', '小学教育'
|
||||
UNION ALL SELECT 'USER_EDUCATION', '81', '小学毕业'
|
||||
UNION ALL SELECT 'USER_EDUCATION', '90', '其他'
|
||||
UNION ALL SELECT 'USER_EDUCATION', '128', '相当大学毕业'
|
||||
UNION ALL SELECT 'USER_EDUCATION', '138', '相当专科毕业'
|
||||
UNION ALL SELECT 'USER_EDUCATION', '142', '中技毕业'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '010', '高等学校教师'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '011', '教授'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '012', '副教授'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '013', '讲师(高校)'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '014', '助教(高校)'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '022', '高级讲师(中专)'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '023', '讲师(中专)'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '024', '助理讲师(中专)'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '032', '高级讲师(技校)'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '033', '讲师(技校)'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '034', '助理讲师(技校)'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '043', '一级实习指导教师'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '044', '二级实习指导教师'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '045', '三级实习指导教师'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '052', '高级教师(中学)'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '053', '一级教师(中学)'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '054', '二级教师(中学)'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '061', '正高级教师'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '062', '高级教师'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '063', '一级教师'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '064', '二级教师'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '071', '教授级高级实验师'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '072', '高级实验师'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '073', '实验师'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '074', '助理实验师'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '075', '实验员'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '081', '教授级高级工程师'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '082', '高级工程师'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '083', '工程师'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '084', '助理工程师'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '085', '技术员'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '093', '农艺师'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '110', '农业技术人员(畜牧)'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '120', '经济专业人员'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '123', '经济师'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '124', '助理经济师'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '130', '会计专业人员'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '132', '高级会计师'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '133', '会计师'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '134', '助理会计师'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '135', '会计员'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '140', '统计专业人员'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '143', '统计师'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '151', '编审'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '152', '副编审'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '153', '编辑'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '202', '主任编辑'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '203', '编辑'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '220', '播音员'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '230', '卫生技术人员(医师)'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '231', '主任医师'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '232', '副主任医师'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '233', '主治医师'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '234', '医师'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '242', '副主任药师'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '243', '主管药师'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '244', '药师'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '250', '卫生技术人员(护理)'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '252', '副主任护师'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '253', '主管护师'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '254', '护师'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '263', '卫生主管技师'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '413', '高级教师(小学)'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '414', '一级教师(小学)'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '430', '船舶技术人员(轮机)'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '611', '研究员(自然科学)'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '612', '副研究员(自然科学)'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '613', '助理研究员(自然科学)'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '621', '研究员(社会科学)'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '622', '副研究员(社会科学)'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '623', '助理研究员(社会科学)'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '624', '研究实习员(社会科学)'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '641', '研究馆员(图书)'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '642', '副研究馆员(图书)'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '643', '馆员(图书)'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '644', '助理馆员(图书)'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '653', '馆员(文博)'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '661', '研究馆员(档案)'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '662', '副研究馆员(档案)'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '663', '馆员(档案)'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '911', '教授(思想政治教育)'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '912', '副教授(思想政治教育)'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '913', '讲师(思想政治教育)'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '914', '助教(思想政治教育)'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '983', '政工师'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '984', '助理政工师'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '985', '政工员'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '992', '副教授(改革)'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '9061', '研究员'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '9062', '副研究员'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '9063', '助理研究员'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '9064', '研究实习员'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '9211', '研究馆员'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '9212', '副研究馆员'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '9213', '馆员'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '9214', '助理馆员'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '9215', '管理员'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '9581', '幼教一级'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '9582', '幼教二级'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '9583', '幼教高级'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '9621', '研究员(教管)'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '9622', '副研究员(教管)'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '9623', '助理研究员(教管)'
|
||||
) source ON existing.parentCode = source.parentCode AND existing.code = source.code
|
||||
SET existing.name = source.name, existing.updatedAt = UNIX_TIMESTAMP(NOW()) * 1000
|
||||
WHERE NOT (existing.name <=> source.name);
|
||||
|
||||
INSERT INTO sys_data_dict (
|
||||
parentCode, name, code, createdBy, createdAt, updatedBy, updatedAt, delFlag
|
||||
)
|
||||
SELECT
|
||||
source.parentCode, source.name, source.code,
|
||||
'', UNIX_TIMESTAMP(NOW()) * 1000, '', UNIX_TIMESTAMP(NOW()) * 1000, 0
|
||||
FROM (
|
||||
SELECT 'USER_SEX' AS parentCode, '1' AS code, '男' AS name
|
||||
UNION ALL SELECT 'USER_SEX', '2', '女'
|
||||
UNION ALL SELECT 'USER_POLITICAL', '01', '中国共产党员'
|
||||
UNION ALL SELECT 'USER_POLITICAL', '02', '中国共产党预备党员'
|
||||
UNION ALL SELECT 'USER_POLITICAL', '03', '中国共产主义青年团团员'
|
||||
UNION ALL SELECT 'USER_POLITICAL', '04', '中国国民党革命委员会会员'
|
||||
UNION ALL SELECT 'USER_POLITICAL', '05', '中国民主同盟盟员'
|
||||
UNION ALL SELECT 'USER_POLITICAL', '06', '中国民主建国会会员'
|
||||
UNION ALL SELECT 'USER_POLITICAL', '07', '中国民主促进会会员'
|
||||
UNION ALL SELECT 'USER_POLITICAL', '08', '中国农工民主党党员'
|
||||
UNION ALL SELECT 'USER_POLITICAL', '09', '中国致公党党员'
|
||||
UNION ALL SELECT 'USER_POLITICAL', '10', '九三学社社员'
|
||||
UNION ALL SELECT 'USER_POLITICAL', '11', '台湾民主自治同盟盟员'
|
||||
UNION ALL SELECT 'USER_POLITICAL', '12', '无党派民主人士'
|
||||
UNION ALL SELECT 'USER_POLITICAL', '13', '群众'
|
||||
UNION ALL SELECT 'USER_POLITICAL', '14', '入党积极分子'
|
||||
UNION ALL SELECT 'USER_POLITICAL', '99', '其他'
|
||||
UNION ALL SELECT 'USER_NATION', '01', '汉族'
|
||||
UNION ALL SELECT 'USER_NATION', '02', '蒙古族'
|
||||
UNION ALL SELECT 'USER_NATION', '03', '回族'
|
||||
UNION ALL SELECT 'USER_NATION', '04', '藏族'
|
||||
UNION ALL SELECT 'USER_NATION', '05', '维吾尔族'
|
||||
UNION ALL SELECT 'USER_NATION', '06', '苗族'
|
||||
UNION ALL SELECT 'USER_NATION', '07', '彝族'
|
||||
UNION ALL SELECT 'USER_NATION', '08', '壮族'
|
||||
UNION ALL SELECT 'USER_NATION', '09', '布依族'
|
||||
UNION ALL SELECT 'USER_NATION', '10', '朝鲜族'
|
||||
UNION ALL SELECT 'USER_NATION', '11', '满族'
|
||||
UNION ALL SELECT 'USER_NATION', '12', '侗族'
|
||||
UNION ALL SELECT 'USER_NATION', '13', '瑶族'
|
||||
UNION ALL SELECT 'USER_NATION', '14', '白族'
|
||||
UNION ALL SELECT 'USER_NATION', '15', '土家族'
|
||||
UNION ALL SELECT 'USER_NATION', '16', '哈尼族'
|
||||
UNION ALL SELECT 'USER_NATION', '17', '哈萨克族'
|
||||
UNION ALL SELECT 'USER_NATION', '18', '傣族'
|
||||
UNION ALL SELECT 'USER_NATION', '19', '黎族'
|
||||
UNION ALL SELECT 'USER_NATION', '20', '傈僳族'
|
||||
UNION ALL SELECT 'USER_NATION', '21', '佤族'
|
||||
UNION ALL SELECT 'USER_NATION', '22', '畲族'
|
||||
UNION ALL SELECT 'USER_NATION', '23', '高山族'
|
||||
UNION ALL SELECT 'USER_NATION', '24', '拉祜族'
|
||||
UNION ALL SELECT 'USER_NATION', '25', '水族'
|
||||
UNION ALL SELECT 'USER_NATION', '26', '东乡族'
|
||||
UNION ALL SELECT 'USER_NATION', '27', '纳西族'
|
||||
UNION ALL SELECT 'USER_NATION', '28', '景颇族'
|
||||
UNION ALL SELECT 'USER_NATION', '29', '柯尔克孜族'
|
||||
UNION ALL SELECT 'USER_NATION', '30', '土族'
|
||||
UNION ALL SELECT 'USER_NATION', '31', '达斡尔族'
|
||||
UNION ALL SELECT 'USER_NATION', '32', '仫佬族'
|
||||
UNION ALL SELECT 'USER_NATION', '33', '羌族'
|
||||
UNION ALL SELECT 'USER_NATION', '34', '布朗族'
|
||||
UNION ALL SELECT 'USER_NATION', '35', '撒拉族'
|
||||
UNION ALL SELECT 'USER_NATION', '36', '毛南族'
|
||||
UNION ALL SELECT 'USER_NATION', '37', '仡佬族'
|
||||
UNION ALL SELECT 'USER_NATION', '38', '锡伯族'
|
||||
UNION ALL SELECT 'USER_NATION', '39', '阿昌族'
|
||||
UNION ALL SELECT 'USER_NATION', '40', '普米族'
|
||||
UNION ALL SELECT 'USER_NATION', '41', '塔吉克族'
|
||||
UNION ALL SELECT 'USER_NATION', '42', '怒族'
|
||||
UNION ALL SELECT 'USER_NATION', '43', '乌孜别克族'
|
||||
UNION ALL SELECT 'USER_NATION', '44', '俄罗斯族'
|
||||
UNION ALL SELECT 'USER_NATION', '45', '鄂温克族'
|
||||
UNION ALL SELECT 'USER_NATION', '46', '崩龙族'
|
||||
UNION ALL SELECT 'USER_NATION', '47', '保安族'
|
||||
UNION ALL SELECT 'USER_NATION', '48', '裕固族'
|
||||
UNION ALL SELECT 'USER_NATION', '49', '京族'
|
||||
UNION ALL SELECT 'USER_NATION', '50', '塔塔尔族'
|
||||
UNION ALL SELECT 'USER_NATION', '51', '独龙族'
|
||||
UNION ALL SELECT 'USER_NATION', '52', '鄂伦春族'
|
||||
UNION ALL SELECT 'USER_NATION', '53', '赫哲族'
|
||||
UNION ALL SELECT 'USER_NATION', '54', '门巴族'
|
||||
UNION ALL SELECT 'USER_NATION', '55', '珞巴族'
|
||||
UNION ALL SELECT 'USER_NATION', '56', '基诺族'
|
||||
UNION ALL SELECT 'USER_NATION', '59', '穿青人'
|
||||
UNION ALL SELECT 'USER_NATION', '60', '革(亻革)家人'
|
||||
UNION ALL SELECT 'USER_NATION', '90', '藏族(区内)'
|
||||
UNION ALL SELECT 'USER_NATION', '97', '其他'
|
||||
UNION ALL SELECT 'USER_NATION', '98', '外国血统中国籍人士'
|
||||
UNION ALL SELECT 'USER_STATE', '01', '离退休'
|
||||
UNION ALL SELECT 'USER_STATE', '03', '死亡'
|
||||
UNION ALL SELECT 'USER_STATE', '04', '退休返聘'
|
||||
UNION ALL SELECT 'USER_STATE', '05', '调出'
|
||||
UNION ALL SELECT 'USER_STATE', '06', '辞职'
|
||||
UNION ALL SELECT 'USER_STATE', '07', '离职'
|
||||
UNION ALL SELECT 'USER_STATE', '08', '开除'
|
||||
UNION ALL SELECT 'USER_STATE', '11', '在职'
|
||||
UNION ALL SELECT 'USER_STATE', '14', '长病假'
|
||||
UNION ALL SELECT 'USER_STATE', '15', '因公出国'
|
||||
UNION ALL SELECT 'USER_STATE', '17', '待岗'
|
||||
UNION ALL SELECT 'USER_STATE', '19', '内退'
|
||||
UNION ALL SELECT 'USER_STATE', '20', '自主创业'
|
||||
UNION ALL SELECT 'USER_STATE', '21', '挂职'
|
||||
UNION ALL SELECT 'USER_STATE', '22', '在岗'
|
||||
UNION ALL SELECT 'USER_STATE', '98', '病假等'
|
||||
UNION ALL SELECT 'USER_STATE', '99', '其他'
|
||||
UNION ALL SELECT 'USER_STATE', '999', '报到办理中'
|
||||
UNION ALL SELECT 'USER_JOB_CATEGORY', '10', '管理岗位'
|
||||
UNION ALL SELECT 'USER_JOB_CATEGORY', '20', '专业技术岗位'
|
||||
UNION ALL SELECT 'USER_JOB_CATEGORY', '21', '教师岗位'
|
||||
UNION ALL SELECT 'USER_JOB_CATEGORY', '22', '专职辅导员岗位'
|
||||
UNION ALL SELECT 'USER_JOB_CATEGORY', '23', '其他专业技术岗位'
|
||||
UNION ALL SELECT 'USER_JOB_CATEGORY', '30', '工勤技能岗位'
|
||||
UNION ALL SELECT 'USER_JOB_CATEGORY', '125', '编辑'
|
||||
UNION ALL SELECT 'USER_JOB_CATEGORY', '126', '编审'
|
||||
UNION ALL SELECT 'USER_JOB_CATEGORY', '127', '大学讲师'
|
||||
UNION ALL SELECT 'USER_JOB_CATEGORY', '128', '档案'
|
||||
UNION ALL SELECT 'USER_JOB_CATEGORY', '129', '副教授'
|
||||
UNION ALL SELECT 'USER_JOB_CATEGORY', '130', '高级工程师'
|
||||
UNION ALL SELECT 'USER_JOB_CATEGORY', '131', '高级会计师'
|
||||
UNION ALL SELECT 'USER_JOB_CATEGORY', '132', '高级讲师'
|
||||
UNION ALL SELECT 'USER_JOB_CATEGORY', '133', '高校讲师'
|
||||
UNION ALL SELECT 'USER_JOB_CATEGORY', '134', '工程'
|
||||
UNION ALL SELECT 'USER_JOB_CATEGORY', '135', '馆员'
|
||||
UNION ALL SELECT 'USER_JOB_CATEGORY', '136', '管理'
|
||||
UNION ALL SELECT 'USER_JOB_CATEGORY', '137', '会计'
|
||||
UNION ALL SELECT 'USER_JOB_CATEGORY', '138', '会计审计'
|
||||
UNION ALL SELECT 'USER_JOB_CATEGORY', '139', '讲师'
|
||||
UNION ALL SELECT 'USER_JOB_CATEGORY', '140', '教管'
|
||||
UNION ALL SELECT 'USER_JOB_CATEGORY', '142', '教育管理'
|
||||
UNION ALL SELECT 'USER_JOB_CATEGORY', '143', '科研'
|
||||
UNION ALL SELECT 'USER_JOB_CATEGORY', '145', '实验'
|
||||
UNION ALL SELECT 'USER_JOB_CATEGORY', '146', '实验师'
|
||||
UNION ALL SELECT 'USER_JOB_CATEGORY', '147', '思政'
|
||||
UNION ALL SELECT 'USER_JOB_CATEGORY', '148', '图资'
|
||||
UNION ALL SELECT 'USER_JOB_CATEGORY', '149', '卫计'
|
||||
UNION ALL SELECT 'USER_JOB_CATEGORY', '150', '卫技'
|
||||
UNION ALL SELECT 'USER_JOB_CATEGORY', '151', '幼教'
|
||||
UNION ALL SELECT 'USER_ID_CARD_TYPE', '0', '居民身份证'
|
||||
UNION ALL SELECT 'USER_ID_CARD_TYPE', '1', '护照'
|
||||
UNION ALL SELECT 'USER_ID_CARD_TYPE', '2', '港澳台居民身份证'
|
||||
UNION ALL SELECT 'USER_ID_CARD_TYPE', '4', '旅行证据'
|
||||
UNION ALL SELECT 'USER_ID_CARD_TYPE', '5', '其他'
|
||||
UNION ALL SELECT 'USER_MANY_UNIT', '0', '否'
|
||||
UNION ALL SELECT 'USER_MANY_UNIT', '1', '是'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '000', '无学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '0', '博士后'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '004', '教育学博士后'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '005', '文学博士后'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '006', '历史学博士后'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '008', '工学博士后'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '100', '名誉博士学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '200', '博士学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '201', '哲学博士学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '202', '经济学博士学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '203', '法学博士学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '204', '教育学博士学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '205', '文学博士学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '206', '历史学博士学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '207', '理学博士学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '208', '工学博士学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '209', '农学博士学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '210', '医学博士学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '212', '管理学博士学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '213', '艺术学博士学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '242', '教育博士专业学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '245', '临床医学博士专业学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '248', '兽医博士专业学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '250', '口腔医学博士专业学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '300', '硕士学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '301', '哲学硕士学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '302', '经济学硕士学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '303', '法学硕士学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '304', '教育学硕士学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '305', '文学硕士学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '306', '历史学硕士学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '307', '理学硕士学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '308', '工学硕士学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '309', '农学硕士学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '310', '医学硕士学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '312', '管理学硕士学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '313', '艺术学硕士学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '341', '法律硕士专业学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '342', '教育硕士专业学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '343', '工程硕士专业学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '344', '建筑学硕士专业学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '345', '临床学硕士专业学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '346', '工商管理硕士专业学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '347', '农业推广硕士专业学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '348', '兽医硕士专业学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '349', '公共管理硕士专业学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '350', '口腔医学硕士专业学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '351', '公共卫生硕士专业学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '352', '军事硕士专业学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '353', '金融硕士专业学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '354', '体育硕士专业学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '355', '艺术硕士专业学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '356', '风景园林硕士专业学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '357', '汉语国际教育硕士专业学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '358', '翻译硕士专业学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '359', '审计硕士专业学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '360', '社会工作硕士专业学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '362', '体育硕士专业学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '364', '应用心理硕士专业学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '365', '翻译硕士专业学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '370', '风景园林硕士专业学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '375', '会计硕士专业学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '377', '图书情报硕士专业学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '379', '艺术硕士专业学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '400', '学士学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '401', '哲学学士学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '402', '经济学学士学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '403', '法学学士学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '404', '教育学学士学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '405', '文学学士学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '406', '历史学学士学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '407', '理学学士学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '408', '工学学士学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '409', '农学学士学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '410', '医学学士学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '412', '管理学学士学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '413', '艺术学学士学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '444', '建筑学学士专业学位'
|
||||
UNION ALL SELECT 'USER_ACADEMIC_DEGREE', '900', '境外学位'
|
||||
UNION ALL SELECT 'USER_EDUCATION', '10', '研究生教育'
|
||||
UNION ALL SELECT 'USER_EDUCATION', '11', '博士研究生毕业'
|
||||
UNION ALL SELECT 'USER_EDUCATION', '12', '博士研究生结业'
|
||||
UNION ALL SELECT 'USER_EDUCATION', '14', '硕士研究生毕业'
|
||||
UNION ALL SELECT 'USER_EDUCATION', '15', '硕士研究生结业'
|
||||
UNION ALL SELECT 'USER_EDUCATION', '17', '研究生班毕业'
|
||||
UNION ALL SELECT 'USER_EDUCATION', '18', '研究生班结业'
|
||||
UNION ALL SELECT 'USER_EDUCATION', '20', '大学本科教育'
|
||||
UNION ALL SELECT 'USER_EDUCATION', '21', '大学本科毕业'
|
||||
UNION ALL SELECT 'USER_EDUCATION', '22', '大学本科结业'
|
||||
UNION ALL SELECT 'USER_EDUCATION', '25', '双学历毕业'
|
||||
UNION ALL SELECT 'USER_EDUCATION', '28', '大学普通班毕业'
|
||||
UNION ALL SELECT 'USER_EDUCATION', '30', '大学专科教育'
|
||||
UNION ALL SELECT 'USER_EDUCATION', '31', '大学专科毕业'
|
||||
UNION ALL SELECT 'USER_EDUCATION', '32', '大学专科结业'
|
||||
UNION ALL SELECT 'USER_EDUCATION', '40', '中等职业教育'
|
||||
UNION ALL SELECT 'USER_EDUCATION', '41', '中等专科毕业'
|
||||
UNION ALL SELECT 'USER_EDUCATION', '42', '中等专科结业'
|
||||
UNION ALL SELECT 'USER_EDUCATION', '43', '中等专科肄业'
|
||||
UNION ALL SELECT 'USER_EDUCATION', '44', '职业高中毕业'
|
||||
UNION ALL SELECT 'USER_EDUCATION', '45', '职业高中结业'
|
||||
UNION ALL SELECT 'USER_EDUCATION', '47', '技工学校毕业'
|
||||
UNION ALL SELECT 'USER_EDUCATION', '48', '技工学校结业'
|
||||
UNION ALL SELECT 'USER_EDUCATION', '60', '普通高级中学教育'
|
||||
UNION ALL SELECT 'USER_EDUCATION', '61', '普通高中毕业'
|
||||
UNION ALL SELECT 'USER_EDUCATION', '62', '普通高中结业'
|
||||
UNION ALL SELECT 'USER_EDUCATION', '63', '普通高中肄业'
|
||||
UNION ALL SELECT 'USER_EDUCATION', '70', '初级中学教育'
|
||||
UNION ALL SELECT 'USER_EDUCATION', '71', '初中毕业'
|
||||
UNION ALL SELECT 'USER_EDUCATION', '73', '初中肄业'
|
||||
UNION ALL SELECT 'USER_EDUCATION', '80', '小学教育'
|
||||
UNION ALL SELECT 'USER_EDUCATION', '81', '小学毕业'
|
||||
UNION ALL SELECT 'USER_EDUCATION', '90', '其他'
|
||||
UNION ALL SELECT 'USER_EDUCATION', '128', '相当大学毕业'
|
||||
UNION ALL SELECT 'USER_EDUCATION', '138', '相当专科毕业'
|
||||
UNION ALL SELECT 'USER_EDUCATION', '142', '中技毕业'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '010', '高等学校教师'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '011', '教授'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '012', '副教授'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '013', '讲师(高校)'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '014', '助教(高校)'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '022', '高级讲师(中专)'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '023', '讲师(中专)'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '024', '助理讲师(中专)'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '032', '高级讲师(技校)'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '033', '讲师(技校)'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '034', '助理讲师(技校)'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '043', '一级实习指导教师'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '044', '二级实习指导教师'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '045', '三级实习指导教师'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '052', '高级教师(中学)'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '053', '一级教师(中学)'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '054', '二级教师(中学)'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '061', '正高级教师'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '062', '高级教师'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '063', '一级教师'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '064', '二级教师'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '071', '教授级高级实验师'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '072', '高级实验师'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '073', '实验师'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '074', '助理实验师'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '075', '实验员'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '081', '教授级高级工程师'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '082', '高级工程师'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '083', '工程师'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '084', '助理工程师'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '085', '技术员'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '093', '农艺师'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '110', '农业技术人员(畜牧)'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '120', '经济专业人员'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '123', '经济师'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '124', '助理经济师'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '130', '会计专业人员'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '132', '高级会计师'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '133', '会计师'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '134', '助理会计师'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '135', '会计员'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '140', '统计专业人员'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '143', '统计师'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '151', '编审'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '152', '副编审'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '153', '编辑'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '202', '主任编辑'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '203', '编辑'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '220', '播音员'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '230', '卫生技术人员(医师)'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '231', '主任医师'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '232', '副主任医师'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '233', '主治医师'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '234', '医师'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '242', '副主任药师'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '243', '主管药师'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '244', '药师'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '250', '卫生技术人员(护理)'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '252', '副主任护师'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '253', '主管护师'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '254', '护师'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '263', '卫生主管技师'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '413', '高级教师(小学)'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '414', '一级教师(小学)'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '430', '船舶技术人员(轮机)'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '611', '研究员(自然科学)'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '612', '副研究员(自然科学)'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '613', '助理研究员(自然科学)'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '621', '研究员(社会科学)'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '622', '副研究员(社会科学)'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '623', '助理研究员(社会科学)'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '624', '研究实习员(社会科学)'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '641', '研究馆员(图书)'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '642', '副研究馆员(图书)'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '643', '馆员(图书)'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '644', '助理馆员(图书)'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '653', '馆员(文博)'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '661', '研究馆员(档案)'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '662', '副研究馆员(档案)'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '663', '馆员(档案)'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '911', '教授(思想政治教育)'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '912', '副教授(思想政治教育)'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '913', '讲师(思想政治教育)'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '914', '助教(思想政治教育)'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '983', '政工师'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '984', '助理政工师'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '985', '政工员'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '992', '副教授(改革)'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '9061', '研究员'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '9062', '副研究员'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '9063', '助理研究员'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '9064', '研究实习员'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '9211', '研究馆员'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '9212', '副研究馆员'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '9213', '馆员'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '9214', '助理馆员'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '9215', '管理员'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '9581', '幼教一级'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '9582', '幼教二级'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '9583', '幼教高级'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '9621', '研究员(教管)'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '9622', '副研究员(教管)'
|
||||
UNION ALL SELECT 'TECHNICAL_TITLE_LEVEL', '9623', '助理研究员(教管)'
|
||||
) source
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM sys_data_dict existing
|
||||
WHERE existing.parentCode = source.parentCode AND existing.code = source.code
|
||||
);
|
||||
|
||||
-- 人员类型:独立补充 v3 的 17 项映射,不混入上面的其他字典数据。
|
||||
UPDATE sys_data_dict existing
|
||||
JOIN (
|
||||
SELECT '1' AS code, '在编类' AS name
|
||||
UNION ALL SELECT '1001', '聘用合同制(享受人事代理待遇)'
|
||||
UNION ALL SELECT '101', '在编'
|
||||
UNION ALL SELECT '102', '兰溪编制'
|
||||
UNION ALL SELECT '2', '非在编类'
|
||||
UNION ALL SELECT '202', '派遣人员'
|
||||
UNION ALL SELECT '204', '博士后'
|
||||
UNION ALL SELECT '206', '挂职人员'
|
||||
UNION ALL SELECT '208', '外籍教师'
|
||||
UNION ALL SELECT '209', '兼职教师'
|
||||
UNION ALL SELECT '210', '非学校聘用人员'
|
||||
UNION ALL SELECT '214', '单位返聘'
|
||||
UNION ALL SELECT '215', '附属单位'
|
||||
UNION ALL SELECT '902', '聘用合同制'
|
||||
UNION ALL SELECT '904', '聘用制专家'
|
||||
UNION ALL SELECT '905', '人事代理'
|
||||
UNION ALL SELECT '909', '其他'
|
||||
) source ON existing.parentCode = 'USER_PERSON_TYPE' AND existing.code = source.code
|
||||
SET existing.name = source.name, existing.updatedAt = UNIX_TIMESTAMP(NOW()) * 1000
|
||||
WHERE NOT (existing.name <=> source.name);
|
||||
|
||||
INSERT INTO sys_data_dict (
|
||||
parentCode, name, code, createdBy, createdAt, updatedBy, updatedAt, delFlag
|
||||
)
|
||||
SELECT
|
||||
'USER_PERSON_TYPE', source.name, source.code,
|
||||
'', UNIX_TIMESTAMP(NOW()) * 1000, '', UNIX_TIMESTAMP(NOW()) * 1000, 0
|
||||
FROM (
|
||||
SELECT '1' AS code, '在编类' AS name
|
||||
UNION ALL SELECT '1001', '聘用合同制(享受人事代理待遇)'
|
||||
UNION ALL SELECT '101', '在编'
|
||||
UNION ALL SELECT '102', '兰溪编制'
|
||||
UNION ALL SELECT '2', '非在编类'
|
||||
UNION ALL SELECT '202', '派遣人员'
|
||||
UNION ALL SELECT '204', '博士后'
|
||||
UNION ALL SELECT '206', '挂职人员'
|
||||
UNION ALL SELECT '208', '外籍教师'
|
||||
UNION ALL SELECT '209', '兼职教师'
|
||||
UNION ALL SELECT '210', '非学校聘用人员'
|
||||
UNION ALL SELECT '214', '单位返聘'
|
||||
UNION ALL SELECT '215', '附属单位'
|
||||
UNION ALL SELECT '902', '聘用合同制'
|
||||
UNION ALL SELECT '904', '聘用制专家'
|
||||
UNION ALL SELECT '905', '人事代理'
|
||||
UNION ALL SELECT '909', '其他'
|
||||
) source
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM sys_data_dict existing
|
||||
WHERE existing.parentCode = 'USER_PERSON_TYPE' AND existing.code = source.code
|
||||
);
|
||||
|
||||
COMMIT;
|
||||
@@ -0,0 +1,28 @@
|
||||
-- 在人员数据拉取菜单同级新增实时查询入口,沿用现有菜单的角色授权。
|
||||
INSERT INTO sys_menu (
|
||||
id, parentId, path, name, type, href, target, icon, showit, disabled,
|
||||
permission, location, hasChildren, platform, moduleId,
|
||||
createdBy, createdAt, updatedBy, updatedAt, delFlag
|
||||
)
|
||||
SELECT 'bc6cf4034e9449bfa6e81c7d26509129', source.parentId,
|
||||
CONCAT(LEFT(source.path, CHAR_LENGTH(source.path) - 4),
|
||||
LPAD(COALESCE((SELECT MAX(CAST(RIGHT(sibling.path, 4) AS UNSIGNED))
|
||||
FROM sys_menu sibling WHERE sibling.parentId = source.parentId), 0) + 1, 4, '0')),
|
||||
'数据中心人员查询', 'menu', '/platform/sys/data/user/query', source.target,
|
||||
source.icon, 1, 0, 'sys.data.user.query', source.location + 1, 0,
|
||||
source.platform, source.moduleId, '', UNIX_TIMESTAMP(NOW()) * 1000,
|
||||
'', UNIX_TIMESTAMP(NOW()) * 1000, 0
|
||||
FROM sys_menu source
|
||||
WHERE source.permission = 'sys.data.user.pull'
|
||||
AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE permission = 'sys.data.user.query')
|
||||
LIMIT 1;
|
||||
|
||||
INSERT INTO sys_role_menu (roleId, menuId)
|
||||
SELECT DISTINCT relation.roleId, target.id
|
||||
FROM sys_role_menu relation
|
||||
JOIN sys_menu source ON source.id = relation.menuId AND source.permission = 'sys.data.user.pull'
|
||||
JOIN sys_menu target ON target.permission = 'sys.data.user.query'
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM sys_role_menu existing
|
||||
WHERE existing.roleId = relation.roleId AND existing.menuId = target.id
|
||||
);
|
||||
@@ -0,0 +1,781 @@
|
||||
SET NAMES utf8mb4;
|
||||
START TRANSACTION;
|
||||
|
||||
UPDATE sys_dict child
|
||||
JOIN sys_dict parent ON parent.id = child.parentId
|
||||
SET child.code = child.name
|
||||
WHERE parent.code IN ('USER_SEX', 'USER_POLITICAL', 'USER_NATION', 'USER_STATE', 'USER_JOB_CATEGORY', 'USER_ID_CARD_TYPE', 'USER_MANY_UNIT')
|
||||
AND child.name IS NOT NULL
|
||||
AND child.name <> ''
|
||||
AND NOT (child.code <=> child.name);
|
||||
|
||||
-- 1. 政治面貌
|
||||
-- 补充 USER_POLITICAL 的直接子项:code、name 均为全称,remark 为简称。
|
||||
-- 仅使用指定父节点,已有同编码子项不覆盖;不删除任何记录。
|
||||
|
||||
INSERT INTO sys_dict (
|
||||
id, parentId, path, name, remark, code, disabled, location, hasChildren,
|
||||
createdBy, createdAt, updatedBy, updatedAt, delFlag
|
||||
)
|
||||
SELECT
|
||||
REPLACE(UUID(), '-', ''), parent.id,
|
||||
CONCAT(parent.path, LPAD(IFNULL((
|
||||
SELECT MAX(CAST(RIGHT(child.path, 4) AS UNSIGNED))
|
||||
FROM sys_dict child
|
||||
WHERE child.path LIKE CONCAT(parent.path, '____')
|
||||
), 0) + source.sortOrder, 4, '0')),
|
||||
source.name, source.shortName, source.name, 0,
|
||||
IFNULL((SELECT MAX(child.location) FROM sys_dict child WHERE child.parentId = parent.id), 0)
|
||||
+ source.sortOrder,
|
||||
0, '', UNIX_TIMESTAMP(NOW()) * 1000, '', UNIX_TIMESTAMP(NOW()) * 1000, 0
|
||||
FROM sys_dict parent
|
||||
CROSS JOIN (
|
||||
SELECT 1 AS sortOrder, '01' AS code, '中国共产党员' AS name, '中共党员' AS shortName
|
||||
UNION ALL SELECT 2, '02', '中国共产党预备党员', '中共预备党员'
|
||||
UNION ALL SELECT 3, '03', '中国共产主义青年团团员', '共青团员'
|
||||
UNION ALL SELECT 4, '04', '中国国民党革命委员会会员', '民革党员'
|
||||
UNION ALL SELECT 5, '05', '中国民主同盟盟员', '民盟盟员'
|
||||
UNION ALL SELECT 6, '06', '中国民主建国会会员', '民建会员'
|
||||
UNION ALL SELECT 7, '07', '中国民主促进会会员', '民进会员'
|
||||
UNION ALL SELECT 8, '08', '中国农工民主党党员', '农工党党员'
|
||||
UNION ALL SELECT 9, '09', '中国致公党党员', '致公党党员'
|
||||
UNION ALL SELECT 10, '10', '九三学社社员', '九三学社社员'
|
||||
UNION ALL SELECT 11, '11', '台湾民主自治同盟盟员', '台盟盟员'
|
||||
UNION ALL SELECT 12, '12', '无党派民主人士', '无党派人士'
|
||||
UNION ALL SELECT 13, '13', '群众', '群众'
|
||||
UNION ALL SELECT 14, '14', '入党积极分子', '积极分子'
|
||||
UNION ALL SELECT 15, '99', '其他', '其他'
|
||||
) source
|
||||
WHERE parent.id = '4cc380a7a45a43a89410413676c9103e'
|
||||
AND parent.code = 'USER_POLITICAL'
|
||||
AND NOT EXISTS (
|
||||
SELECT 1 FROM sys_dict existing
|
||||
WHERE existing.parentId = parent.id AND existing.code = source.name
|
||||
);
|
||||
|
||||
UPDATE sys_dict parent
|
||||
SET parent.hasChildren = 1
|
||||
WHERE parent.id = '4cc380a7a45a43a89410413676c9103e'
|
||||
AND parent.code = 'USER_POLITICAL'
|
||||
AND EXISTS (
|
||||
SELECT 1 FROM (SELECT DISTINCT parentId FROM sys_dict) child
|
||||
WHERE child.parentId = parent.id
|
||||
);
|
||||
|
||||
-- 2. 民族
|
||||
-- 补充 USER_NATION 的 61 个直接子项,保留接口代码前导零及提供的名称原文。
|
||||
-- 仅新增缺失编码,不删除或覆盖已有记录。
|
||||
INSERT INTO sys_dict (
|
||||
id, parentId, path, name, remark, code, disabled, location, hasChildren,
|
||||
createdBy, createdAt, updatedBy, updatedAt, delFlag
|
||||
)
|
||||
SELECT
|
||||
REPLACE(UUID(), '-', ''), parent.id,
|
||||
CONCAT(parent.path, LPAD(IFNULL((
|
||||
SELECT MAX(CAST(RIGHT(child.path, 4) AS UNSIGNED))
|
||||
FROM sys_dict child
|
||||
WHERE child.path LIKE CONCAT(parent.path, '____')
|
||||
), 0) + source.sortOrder, 4, '0')),
|
||||
source.name, '', source.name, 0,
|
||||
IFNULL((SELECT MAX(child.location) FROM sys_dict child WHERE child.parentId = parent.id), 0)
|
||||
+ source.sortOrder,
|
||||
0, '', UNIX_TIMESTAMP(NOW()) * 1000, '', UNIX_TIMESTAMP(NOW()) * 1000, 0
|
||||
FROM sys_dict parent
|
||||
CROSS JOIN (
|
||||
SELECT 1 AS sortOrder, '01' AS code, '汉族' AS name
|
||||
UNION ALL SELECT 2, '02', '蒙古族'
|
||||
UNION ALL SELECT 3, '03', '回族'
|
||||
UNION ALL SELECT 4, '04', '藏族'
|
||||
UNION ALL SELECT 5, '05', '维吾尔族'
|
||||
UNION ALL SELECT 6, '06', '苗族'
|
||||
UNION ALL SELECT 7, '07', '彝族'
|
||||
UNION ALL SELECT 8, '08', '壮族'
|
||||
UNION ALL SELECT 9, '09', '布依族'
|
||||
UNION ALL SELECT 10, '10', '朝鲜族'
|
||||
UNION ALL SELECT 11, '11', '满族'
|
||||
UNION ALL SELECT 12, '12', '侗族'
|
||||
UNION ALL SELECT 13, '13', '瑶族'
|
||||
UNION ALL SELECT 14, '14', '白族'
|
||||
UNION ALL SELECT 15, '15', '土家族'
|
||||
UNION ALL SELECT 16, '16', '哈尼族'
|
||||
UNION ALL SELECT 17, '17', '哈萨克族'
|
||||
UNION ALL SELECT 18, '18', '傣族'
|
||||
UNION ALL SELECT 19, '19', '黎族'
|
||||
UNION ALL SELECT 20, '20', '傈僳族'
|
||||
UNION ALL SELECT 21, '21', '佤族'
|
||||
UNION ALL SELECT 22, '22', '畲族'
|
||||
UNION ALL SELECT 23, '23', '高山族'
|
||||
UNION ALL SELECT 24, '24', '拉祜族'
|
||||
UNION ALL SELECT 25, '25', '水族'
|
||||
UNION ALL SELECT 26, '26', '东乡族'
|
||||
UNION ALL SELECT 27, '27', '纳西族'
|
||||
UNION ALL SELECT 28, '28', '景颇族'
|
||||
UNION ALL SELECT 29, '29', '柯尔克孜族'
|
||||
UNION ALL SELECT 30, '30', '土族'
|
||||
UNION ALL SELECT 31, '31', '达斡尔族'
|
||||
UNION ALL SELECT 32, '32', '仫佬族'
|
||||
UNION ALL SELECT 33, '33', '羌族'
|
||||
UNION ALL SELECT 34, '34', '布朗族'
|
||||
UNION ALL SELECT 35, '35', '撒拉族'
|
||||
UNION ALL SELECT 36, '36', '毛南族'
|
||||
UNION ALL SELECT 37, '37', '仡佬族'
|
||||
UNION ALL SELECT 38, '38', '锡伯族'
|
||||
UNION ALL SELECT 39, '39', '阿昌族'
|
||||
UNION ALL SELECT 40, '40', '普米族'
|
||||
UNION ALL SELECT 41, '41', '塔吉克族'
|
||||
UNION ALL SELECT 42, '42', '怒族'
|
||||
UNION ALL SELECT 43, '43', '乌孜别克族'
|
||||
UNION ALL SELECT 44, '44', '俄罗斯族'
|
||||
UNION ALL SELECT 45, '45', '鄂温克族'
|
||||
UNION ALL SELECT 46, '46', '崩龙族'
|
||||
UNION ALL SELECT 47, '47', '保安族'
|
||||
UNION ALL SELECT 48, '48', '裕固族'
|
||||
UNION ALL SELECT 49, '49', '京族'
|
||||
UNION ALL SELECT 50, '50', '塔塔尔族'
|
||||
UNION ALL SELECT 51, '51', '独龙族'
|
||||
UNION ALL SELECT 52, '52', '鄂伦春族'
|
||||
UNION ALL SELECT 53, '53', '赫哲族'
|
||||
UNION ALL SELECT 54, '54', '门巴族'
|
||||
UNION ALL SELECT 55, '55', '珞巴族'
|
||||
UNION ALL SELECT 56, '56', '基诺族'
|
||||
UNION ALL SELECT 57, '59', '穿青人'
|
||||
UNION ALL SELECT 58, '60', '革(亻革)家人'
|
||||
UNION ALL SELECT 59, '90', '藏族(区内)'
|
||||
UNION ALL SELECT 60, '97', '其他'
|
||||
UNION ALL SELECT 61, '98', '外国血统中国籍人士'
|
||||
) source
|
||||
WHERE parent.id = '456c088b99bb4423a115c0bb5b420a99'
|
||||
AND parent.code = 'USER_NATION'
|
||||
AND NOT EXISTS (
|
||||
SELECT 1 FROM sys_dict existing
|
||||
WHERE existing.parentId = parent.id AND existing.code = source.name
|
||||
);
|
||||
|
||||
-- 3. 当前状态
|
||||
-- 补充 USER_STATE 的 18 个直接子项,保留接口代码前导零及提供的名称原文。
|
||||
-- 仅新增缺失编码,不删除或覆盖已有记录。
|
||||
INSERT INTO sys_dict (
|
||||
id, parentId, path, name, remark, code, disabled, location, hasChildren,
|
||||
createdBy, createdAt, updatedBy, updatedAt, delFlag
|
||||
)
|
||||
SELECT
|
||||
REPLACE(UUID(), '-', ''), parent.id,
|
||||
CONCAT(parent.path, LPAD(IFNULL((
|
||||
SELECT MAX(CAST(RIGHT(child.path, 4) AS UNSIGNED))
|
||||
FROM sys_dict child
|
||||
WHERE child.path LIKE CONCAT(parent.path, '____')
|
||||
), 0) + source.sortOrder, 4, '0')),
|
||||
source.name, '', source.name, 0,
|
||||
IFNULL((SELECT MAX(child.location) FROM sys_dict child WHERE child.parentId = parent.id), 0)
|
||||
+ source.sortOrder,
|
||||
0, '', UNIX_TIMESTAMP(NOW()) * 1000, '', UNIX_TIMESTAMP(NOW()) * 1000, 0
|
||||
FROM sys_dict parent
|
||||
CROSS JOIN (
|
||||
SELECT 1 AS sortOrder, '01' AS code, '离退休' AS name
|
||||
UNION ALL SELECT 2, '03', '死亡'
|
||||
UNION ALL SELECT 3, '04', '退休返聘'
|
||||
UNION ALL SELECT 4, '05', '调出'
|
||||
UNION ALL SELECT 5, '06', '辞职'
|
||||
UNION ALL SELECT 6, '07', '离职'
|
||||
UNION ALL SELECT 7, '08', '开除'
|
||||
UNION ALL SELECT 8, '11', '在职'
|
||||
UNION ALL SELECT 9, '14', '长病假'
|
||||
UNION ALL SELECT 10, '15', '因公出国'
|
||||
UNION ALL SELECT 11, '17', '待岗'
|
||||
UNION ALL SELECT 12, '19', '内退'
|
||||
UNION ALL SELECT 13, '20', '自主创业'
|
||||
UNION ALL SELECT 14, '21', '挂职'
|
||||
UNION ALL SELECT 15, '22', '在岗'
|
||||
UNION ALL SELECT 16, '98', '病假等'
|
||||
UNION ALL SELECT 17, '99', '其他'
|
||||
UNION ALL SELECT 18, '999', '报到办理中'
|
||||
) source
|
||||
WHERE parent.id = '3709e40a132348be947dcaa553bf8f8a'
|
||||
AND parent.code = 'USER_STATE'
|
||||
AND NOT EXISTS (
|
||||
SELECT 1 FROM sys_dict existing
|
||||
WHERE existing.parentId = parent.id AND existing.code = source.name
|
||||
);
|
||||
|
||||
-- 4. 岗位类型
|
||||
-- 岗位类型(USER_JOB_CATEGORY)下的 31 个直接子项,父级须已存在。
|
||||
-- 仅新增缺失编码,不删除或覆盖已有记录。
|
||||
INSERT INTO sys_dict (
|
||||
id, parentId, path, name, remark, code, disabled, location, hasChildren,
|
||||
createdBy, createdAt, updatedBy, updatedAt, delFlag
|
||||
)
|
||||
SELECT
|
||||
REPLACE(UUID(), '-', ''), parent.id,
|
||||
CONCAT(parent.path, LPAD(IFNULL((
|
||||
SELECT MAX(CAST(RIGHT(child.path, 4) AS UNSIGNED))
|
||||
FROM sys_dict child
|
||||
WHERE child.path LIKE CONCAT(parent.path, '____')
|
||||
), 0) + source.sortOrder, 4, '0')),
|
||||
source.name, '', source.name, 0,
|
||||
IFNULL((SELECT MAX(child.location) FROM sys_dict child WHERE child.parentId = parent.id), 0)
|
||||
+ source.sortOrder,
|
||||
0, '', UNIX_TIMESTAMP(NOW()) * 1000, '', UNIX_TIMESTAMP(NOW()) * 1000, 0
|
||||
FROM sys_dict parent
|
||||
CROSS JOIN (
|
||||
SELECT 1 AS sortOrder, '10' AS code, '管理岗位' AS name
|
||||
UNION ALL SELECT 2, '20', '专业技术岗位'
|
||||
UNION ALL SELECT 3, '21', '教师岗位'
|
||||
UNION ALL SELECT 4, '22', '专职辅导员岗位'
|
||||
UNION ALL SELECT 5, '23', '其他专业技术岗位'
|
||||
UNION ALL SELECT 6, '30', '工勤技能岗位'
|
||||
UNION ALL SELECT 7, '125', '编辑'
|
||||
UNION ALL SELECT 8, '126', '编审'
|
||||
UNION ALL SELECT 9, '127', '大学讲师'
|
||||
UNION ALL SELECT 10, '128', '档案'
|
||||
UNION ALL SELECT 11, '129', '副教授'
|
||||
UNION ALL SELECT 12, '130', '高级工程师'
|
||||
UNION ALL SELECT 13, '131', '高级会计师'
|
||||
UNION ALL SELECT 14, '132', '高级讲师'
|
||||
UNION ALL SELECT 15, '133', '高校讲师'
|
||||
UNION ALL SELECT 16, '134', '工程'
|
||||
UNION ALL SELECT 17, '135', '馆员'
|
||||
UNION ALL SELECT 18, '136', '管理'
|
||||
UNION ALL SELECT 19, '137', '会计'
|
||||
UNION ALL SELECT 20, '138', '会计审计'
|
||||
UNION ALL SELECT 21, '139', '讲师'
|
||||
UNION ALL SELECT 22, '140', '教管'
|
||||
UNION ALL SELECT 23, '142', '教育管理'
|
||||
UNION ALL SELECT 24, '143', '科研'
|
||||
UNION ALL SELECT 25, '145', '实验'
|
||||
UNION ALL SELECT 26, '146', '实验师'
|
||||
UNION ALL SELECT 27, '147', '思政'
|
||||
UNION ALL SELECT 28, '148', '图资'
|
||||
UNION ALL SELECT 29, '149', '卫计'
|
||||
UNION ALL SELECT 30, '150', '卫技'
|
||||
UNION ALL SELECT 31, '151', '幼教'
|
||||
) source
|
||||
WHERE parent.code = 'USER_JOB_CATEGORY'
|
||||
AND NOT EXISTS (
|
||||
SELECT 1 FROM sys_dict existing
|
||||
WHERE existing.parentId = parent.id AND existing.code = source.name
|
||||
);
|
||||
|
||||
UPDATE sys_dict parent
|
||||
SET parent.hasChildren = 1
|
||||
WHERE parent.code = 'USER_JOB_CATEGORY'
|
||||
AND EXISTS (
|
||||
SELECT 1 FROM (SELECT DISTINCT parentId FROM sys_dict) child
|
||||
WHERE child.parentId = parent.id
|
||||
);
|
||||
|
||||
-- 5. 证件类型
|
||||
-- 在用户表字段字典下补充证件类型及子项,仅新增缺失编码,不覆盖已有配置。
|
||||
INSERT INTO sys_dict (
|
||||
id, parentId, path, name, remark, code, disabled, location, hasChildren,
|
||||
createdBy, createdAt, updatedBy, updatedAt, delFlag
|
||||
)
|
||||
SELECT
|
||||
REPLACE(UUID(), '-', ''), parent.id,
|
||||
CONCAT(parent.path, LPAD(IFNULL((
|
||||
SELECT MAX(CAST(RIGHT(child.path, 4) AS UNSIGNED))
|
||||
FROM sys_dict child WHERE child.path LIKE CONCAT(parent.path, '____')
|
||||
), 0) + 1, 4, '0')),
|
||||
'证件类型', '', 'USER_ID_CARD_TYPE', 0,
|
||||
IFNULL((SELECT MAX(child.location) FROM sys_dict child WHERE child.parentId = parent.id), 0) + 1,
|
||||
0, '', UNIX_TIMESTAMP(NOW()) * 1000, '', UNIX_TIMESTAMP(NOW()) * 1000, 0
|
||||
FROM sys_dict parent
|
||||
WHERE parent.code = 'USER_TABLE_COLUMN_DICTS'
|
||||
AND NOT EXISTS (SELECT 1 FROM sys_dict existing WHERE existing.code = 'USER_ID_CARD_TYPE');
|
||||
|
||||
INSERT INTO sys_dict (
|
||||
id, parentId, path, name, remark, code, disabled, location, hasChildren,
|
||||
createdBy, createdAt, updatedBy, updatedAt, delFlag
|
||||
)
|
||||
SELECT
|
||||
REPLACE(UUID(), '-', ''), parent.id,
|
||||
CONCAT(parent.path, LPAD(IFNULL((
|
||||
SELECT MAX(CAST(RIGHT(child.path, 4) AS UNSIGNED))
|
||||
FROM sys_dict child WHERE child.path LIKE CONCAT(parent.path, '____')
|
||||
), 0) + source.sortOrder, 4, '0')),
|
||||
source.name, '', source.name, 0,
|
||||
IFNULL((SELECT MAX(child.location) FROM sys_dict child WHERE child.parentId = parent.id), 0)
|
||||
+ source.sortOrder,
|
||||
0, '', UNIX_TIMESTAMP(NOW()) * 1000, '', UNIX_TIMESTAMP(NOW()) * 1000, 0
|
||||
FROM sys_dict parent
|
||||
CROSS JOIN (
|
||||
SELECT 1 AS sortOrder, '0' AS code, '居民身份证' AS name
|
||||
UNION ALL SELECT 2, '1', '护照'
|
||||
UNION ALL SELECT 3, '2', '港澳台居民身份证'
|
||||
UNION ALL SELECT 4, '4', '旅行证据'
|
||||
UNION ALL SELECT 5, '5', '其他'
|
||||
) source
|
||||
WHERE parent.code = 'USER_ID_CARD_TYPE'
|
||||
AND NOT EXISTS (
|
||||
SELECT 1 FROM sys_dict existing
|
||||
WHERE existing.parentId = parent.id AND existing.code = source.name
|
||||
);
|
||||
|
||||
UPDATE sys_dict parent
|
||||
SET parent.hasChildren = 1
|
||||
WHERE parent.code IN ('USER_TABLE_COLUMN_DICTS', 'USER_ID_CARD_TYPE')
|
||||
AND EXISTS (
|
||||
SELECT 1 FROM (SELECT DISTINCT parentId FROM sys_dict) child
|
||||
WHERE child.parentId = parent.id
|
||||
);
|
||||
|
||||
-- 6. 是否双肩挑
|
||||
-- 在用户表字段字典下补充是否双肩挑及子项,仅新增缺失编码,不覆盖已有配置。
|
||||
INSERT INTO sys_dict (
|
||||
id, parentId, path, name, remark, code, disabled, location, hasChildren,
|
||||
createdBy, createdAt, updatedBy, updatedAt, delFlag
|
||||
)
|
||||
SELECT
|
||||
REPLACE(UUID(), '-', ''), parent.id,
|
||||
CONCAT(parent.path, LPAD(IFNULL((
|
||||
SELECT MAX(CAST(RIGHT(child.path, 4) AS UNSIGNED))
|
||||
FROM sys_dict child WHERE child.path LIKE CONCAT(parent.path, '____')
|
||||
), 0) + 1, 4, '0')),
|
||||
'是否双肩挑', '', 'USER_MANY_UNIT', 0,
|
||||
IFNULL((SELECT MAX(child.location) FROM sys_dict child WHERE child.parentId = parent.id), 0) + 1,
|
||||
0, '', UNIX_TIMESTAMP(NOW()) * 1000, '', UNIX_TIMESTAMP(NOW()) * 1000, 0
|
||||
FROM sys_dict parent
|
||||
WHERE parent.code = 'USER_TABLE_COLUMN_DICTS'
|
||||
AND NOT EXISTS (SELECT 1 FROM sys_dict existing WHERE existing.code = 'USER_MANY_UNIT');
|
||||
|
||||
INSERT INTO sys_dict (
|
||||
id, parentId, path, name, remark, code, disabled, location, hasChildren,
|
||||
createdBy, createdAt, updatedBy, updatedAt, delFlag
|
||||
)
|
||||
SELECT
|
||||
REPLACE(UUID(), '-', ''), parent.id,
|
||||
CONCAT(parent.path, LPAD(IFNULL((
|
||||
SELECT MAX(CAST(RIGHT(child.path, 4) AS UNSIGNED))
|
||||
FROM sys_dict child WHERE child.path LIKE CONCAT(parent.path, '____')
|
||||
), 0) + source.sortOrder, 4, '0')),
|
||||
source.name, '', source.name, 0,
|
||||
IFNULL((SELECT MAX(child.location) FROM sys_dict child WHERE child.parentId = parent.id), 0)
|
||||
+ source.sortOrder,
|
||||
0, '', UNIX_TIMESTAMP(NOW()) * 1000, '', UNIX_TIMESTAMP(NOW()) * 1000, 0
|
||||
FROM sys_dict parent
|
||||
CROSS JOIN (
|
||||
SELECT 1 AS sortOrder, '0' AS code, '否' AS name
|
||||
UNION ALL SELECT 2, '1', '是'
|
||||
) source
|
||||
WHERE parent.code = 'USER_MANY_UNIT'
|
||||
AND NOT EXISTS (
|
||||
SELECT 1 FROM sys_dict existing
|
||||
WHERE existing.parentId = parent.id AND existing.code = source.name
|
||||
);
|
||||
|
||||
UPDATE sys_dict parent
|
||||
SET parent.hasChildren = 1
|
||||
WHERE parent.code IN ('USER_TABLE_COLUMN_DICTS', 'USER_MANY_UNIT')
|
||||
AND EXISTS (
|
||||
SELECT 1 FROM (SELECT DISTINCT parentId FROM sys_dict) child
|
||||
WHERE child.parentId = parent.id
|
||||
);
|
||||
|
||||
-- 7. 学位
|
||||
UPDATE sys_dict child
|
||||
JOIN sys_dict parent ON parent.id = child.parentId
|
||||
SET child.code = child.name
|
||||
WHERE parent.code IN ('USER_ACADEMIC_DEGREE')
|
||||
AND child.name IS NOT NULL
|
||||
AND child.name <> ''
|
||||
AND NOT (child.code <=> child.name);
|
||||
|
||||
-- 补充学位(USER_ACADEMIC_DEGREE)直接子项,父级须已存在。
|
||||
-- code、name 均保存名称原文,仅新增缺失名称,不删除或覆盖已有记录。
|
||||
INSERT INTO sys_dict (
|
||||
id, parentId, path, name, remark, code, disabled, location, hasChildren,
|
||||
createdBy, createdAt, updatedBy, updatedAt, delFlag
|
||||
)
|
||||
SELECT
|
||||
REPLACE(UUID(), '-', ''), parent.id,
|
||||
CONCAT(parent.path, LPAD(IFNULL((
|
||||
SELECT MAX(CAST(RIGHT(child.path, 4) AS UNSIGNED))
|
||||
FROM sys_dict child WHERE child.path LIKE CONCAT(parent.path, '____')
|
||||
), 0) + source.sortOrder, 4, '0')),
|
||||
source.name, '', source.name, 0,
|
||||
IFNULL((SELECT MAX(child.location) FROM sys_dict child WHERE child.parentId = parent.id), 0)
|
||||
+ source.sortOrder,
|
||||
0, '', UNIX_TIMESTAMP(NOW()) * 1000, '', UNIX_TIMESTAMP(NOW()) * 1000, 0
|
||||
FROM sys_dict parent
|
||||
CROSS JOIN (
|
||||
SELECT 1 AS sortOrder, '000' AS code, '无学位' AS name
|
||||
UNION ALL SELECT 2, '0', '博士后'
|
||||
UNION ALL SELECT 3, '004', '教育学博士后'
|
||||
UNION ALL SELECT 4, '005', '文学博士后'
|
||||
UNION ALL SELECT 5, '006', '历史学博士后'
|
||||
UNION ALL SELECT 6, '008', '工学博士后'
|
||||
UNION ALL SELECT 7, '100', '名誉博士学位'
|
||||
UNION ALL SELECT 8, '200', '博士学位'
|
||||
UNION ALL SELECT 9, '201', '哲学博士学位'
|
||||
UNION ALL SELECT 10, '202', '经济学博士学位'
|
||||
UNION ALL SELECT 11, '203', '法学博士学位'
|
||||
UNION ALL SELECT 12, '204', '教育学博士学位'
|
||||
UNION ALL SELECT 13, '205', '文学博士学位'
|
||||
UNION ALL SELECT 14, '206', '历史学博士学位'
|
||||
UNION ALL SELECT 15, '207', '理学博士学位'
|
||||
UNION ALL SELECT 16, '208', '工学博士学位'
|
||||
UNION ALL SELECT 17, '209', '农学博士学位'
|
||||
UNION ALL SELECT 18, '210', '医学博士学位'
|
||||
UNION ALL SELECT 19, '212', '管理学博士学位'
|
||||
UNION ALL SELECT 20, '213', '艺术学博士学位'
|
||||
UNION ALL SELECT 21, '242', '教育博士专业学位'
|
||||
UNION ALL SELECT 22, '245', '临床医学博士专业学位'
|
||||
UNION ALL SELECT 23, '248', '兽医博士专业学位'
|
||||
UNION ALL SELECT 24, '250', '口腔医学博士专业学位'
|
||||
UNION ALL SELECT 25, '300', '硕士学位'
|
||||
UNION ALL SELECT 26, '301', '哲学硕士学位'
|
||||
UNION ALL SELECT 27, '302', '经济学硕士学位'
|
||||
UNION ALL SELECT 28, '303', '法学硕士学位'
|
||||
UNION ALL SELECT 29, '304', '教育学硕士学位'
|
||||
UNION ALL SELECT 30, '305', '文学硕士学位'
|
||||
UNION ALL SELECT 31, '306', '历史学硕士学位'
|
||||
UNION ALL SELECT 32, '307', '理学硕士学位'
|
||||
UNION ALL SELECT 33, '308', '工学硕士学位'
|
||||
UNION ALL SELECT 34, '309', '农学硕士学位'
|
||||
UNION ALL SELECT 35, '310', '医学硕士学位'
|
||||
UNION ALL SELECT 36, '312', '管理学硕士学位'
|
||||
UNION ALL SELECT 37, '313', '艺术学硕士学位'
|
||||
UNION ALL SELECT 38, '341', '法律硕士专业学位'
|
||||
UNION ALL SELECT 39, '342', '教育硕士专业学位'
|
||||
UNION ALL SELECT 40, '343', '工程硕士专业学位'
|
||||
UNION ALL SELECT 41, '344', '建筑学硕士专业学位'
|
||||
UNION ALL SELECT 42, '345', '临床学硕士专业学位'
|
||||
UNION ALL SELECT 43, '346', '工商管理硕士专业学位'
|
||||
UNION ALL SELECT 44, '347', '农业推广硕士专业学位'
|
||||
UNION ALL SELECT 45, '348', '兽医硕士专业学位'
|
||||
UNION ALL SELECT 46, '349', '公共管理硕士专业学位'
|
||||
UNION ALL SELECT 47, '350', '口腔医学硕士专业学位'
|
||||
UNION ALL SELECT 48, '351', '公共卫生硕士专业学位'
|
||||
UNION ALL SELECT 49, '352', '军事硕士专业学位'
|
||||
UNION ALL SELECT 50, '353', '金融硕士专业学位'
|
||||
UNION ALL SELECT 51, '354', '体育硕士专业学位'
|
||||
UNION ALL SELECT 52, '355', '艺术硕士专业学位'
|
||||
UNION ALL SELECT 53, '356', '风景园林硕士专业学位'
|
||||
UNION ALL SELECT 54, '357', '汉语国际教育硕士专业学位'
|
||||
UNION ALL SELECT 55, '358', '翻译硕士专业学位'
|
||||
UNION ALL SELECT 56, '359', '审计硕士专业学位'
|
||||
UNION ALL SELECT 57, '360', '社会工作硕士专业学位'
|
||||
UNION ALL SELECT 58, '362', '体育硕士专业学位'
|
||||
UNION ALL SELECT 59, '364', '应用心理硕士专业学位'
|
||||
UNION ALL SELECT 60, '365', '翻译硕士专业学位'
|
||||
UNION ALL SELECT 61, '370', '风景园林硕士专业学位'
|
||||
UNION ALL SELECT 62, '375', '会计硕士专业学位'
|
||||
UNION ALL SELECT 63, '377', '图书情报硕士专业学位'
|
||||
UNION ALL SELECT 64, '379', '艺术硕士专业学位'
|
||||
UNION ALL SELECT 65, '400', '学士学位'
|
||||
UNION ALL SELECT 66, '401', '哲学学士学位'
|
||||
UNION ALL SELECT 67, '402', '经济学学士学位'
|
||||
UNION ALL SELECT 68, '403', '法学学士学位'
|
||||
UNION ALL SELECT 69, '404', '教育学学士学位'
|
||||
UNION ALL SELECT 70, '405', '文学学士学位'
|
||||
UNION ALL SELECT 71, '406', '历史学学士学位'
|
||||
UNION ALL SELECT 72, '407', '理学学士学位'
|
||||
UNION ALL SELECT 73, '408', '工学学士学位'
|
||||
UNION ALL SELECT 74, '409', '农学学士学位'
|
||||
UNION ALL SELECT 75, '410', '医学学士学位'
|
||||
UNION ALL SELECT 76, '412', '管理学学士学位'
|
||||
UNION ALL SELECT 77, '413', '艺术学学士学位'
|
||||
UNION ALL SELECT 78, '444', '建筑学学士专业学位'
|
||||
UNION ALL SELECT 79, '900', '境外学位'
|
||||
) source
|
||||
WHERE parent.code = 'USER_ACADEMIC_DEGREE'
|
||||
AND NOT EXISTS (
|
||||
SELECT 1 FROM sys_dict existing
|
||||
WHERE existing.parentId = parent.id AND existing.code = source.name
|
||||
);
|
||||
|
||||
UPDATE sys_dict parent
|
||||
SET parent.hasChildren = 1
|
||||
WHERE parent.code = 'USER_ACADEMIC_DEGREE'
|
||||
AND EXISTS (
|
||||
SELECT 1 FROM (SELECT DISTINCT parentId FROM sys_dict) child
|
||||
WHERE child.parentId = parent.id
|
||||
);
|
||||
|
||||
-- 8. 学历
|
||||
UPDATE sys_dict child
|
||||
JOIN sys_dict parent ON parent.id = child.parentId
|
||||
SET child.code = child.name
|
||||
WHERE parent.code IN ('USER_EDUCATION')
|
||||
AND child.name IS NOT NULL
|
||||
AND child.name <> ''
|
||||
AND NOT (child.code <=> child.name);
|
||||
|
||||
-- 补充学历(USER_EDUCATION)直接子项,父级须已存在。
|
||||
-- code、name 均保存名称原文,仅新增缺失名称,不删除或覆盖已有记录。
|
||||
INSERT INTO sys_dict (
|
||||
id, parentId, path, name, remark, code, disabled, location, hasChildren,
|
||||
createdBy, createdAt, updatedBy, updatedAt, delFlag
|
||||
)
|
||||
SELECT
|
||||
REPLACE(UUID(), '-', ''), parent.id,
|
||||
CONCAT(parent.path, LPAD(IFNULL((
|
||||
SELECT MAX(CAST(RIGHT(child.path, 4) AS UNSIGNED))
|
||||
FROM sys_dict child WHERE child.path LIKE CONCAT(parent.path, '____')
|
||||
), 0) + source.sortOrder, 4, '0')),
|
||||
source.name, '', source.name, 0,
|
||||
IFNULL((SELECT MAX(child.location) FROM sys_dict child WHERE child.parentId = parent.id), 0)
|
||||
+ source.sortOrder,
|
||||
0, '', UNIX_TIMESTAMP(NOW()) * 1000, '', UNIX_TIMESTAMP(NOW()) * 1000, 0
|
||||
FROM sys_dict parent
|
||||
CROSS JOIN (
|
||||
SELECT 1 AS sortOrder, '10' AS code, '研究生教育' AS name
|
||||
UNION ALL SELECT 2, '11', '博士研究生毕业'
|
||||
UNION ALL SELECT 3, '12', '博士研究生结业'
|
||||
UNION ALL SELECT 4, '14', '硕士研究生毕业'
|
||||
UNION ALL SELECT 5, '15', '硕士研究生结业'
|
||||
UNION ALL SELECT 6, '17', '研究生班毕业'
|
||||
UNION ALL SELECT 7, '18', '研究生班结业'
|
||||
UNION ALL SELECT 8, '20', '大学本科教育'
|
||||
UNION ALL SELECT 9, '21', '大学本科毕业'
|
||||
UNION ALL SELECT 10, '22', '大学本科结业'
|
||||
UNION ALL SELECT 11, '25', '双学历毕业'
|
||||
UNION ALL SELECT 12, '28', '大学普通班毕业'
|
||||
UNION ALL SELECT 13, '30', '大学专科教育'
|
||||
UNION ALL SELECT 14, '31', '大学专科毕业'
|
||||
UNION ALL SELECT 15, '32', '大学专科结业'
|
||||
UNION ALL SELECT 16, '40', '中等职业教育'
|
||||
UNION ALL SELECT 17, '41', '中等专科毕业'
|
||||
UNION ALL SELECT 18, '42', '中等专科结业'
|
||||
UNION ALL SELECT 19, '43', '中等专科肄业'
|
||||
UNION ALL SELECT 20, '44', '职业高中毕业'
|
||||
UNION ALL SELECT 21, '45', '职业高中结业'
|
||||
UNION ALL SELECT 22, '47', '技工学校毕业'
|
||||
UNION ALL SELECT 23, '48', '技工学校结业'
|
||||
UNION ALL SELECT 24, '60', '普通高级中学教育'
|
||||
UNION ALL SELECT 25, '61', '普通高中毕业'
|
||||
UNION ALL SELECT 26, '62', '普通高中结业'
|
||||
UNION ALL SELECT 27, '63', '普通高中肄业'
|
||||
UNION ALL SELECT 28, '70', '初级中学教育'
|
||||
UNION ALL SELECT 29, '71', '初中毕业'
|
||||
UNION ALL SELECT 30, '73', '初中肄业'
|
||||
UNION ALL SELECT 31, '80', '小学教育'
|
||||
UNION ALL SELECT 32, '81', '小学毕业'
|
||||
UNION ALL SELECT 33, '90', '其他'
|
||||
UNION ALL SELECT 34, '128', '相当大学毕业'
|
||||
UNION ALL SELECT 35, '138', '相当专科毕业'
|
||||
UNION ALL SELECT 36, '142', '中技毕业'
|
||||
) source
|
||||
WHERE parent.code = 'USER_EDUCATION'
|
||||
AND NOT EXISTS (
|
||||
SELECT 1 FROM sys_dict existing
|
||||
WHERE existing.parentId = parent.id AND existing.code = source.name
|
||||
);
|
||||
|
||||
UPDATE sys_dict parent
|
||||
SET parent.hasChildren = 1
|
||||
WHERE parent.code = 'USER_EDUCATION'
|
||||
AND EXISTS (
|
||||
SELECT 1 FROM (SELECT DISTINCT parentId FROM sys_dict) child
|
||||
WHERE child.parentId = parent.id
|
||||
);
|
||||
|
||||
-- 9. 职称
|
||||
-- 复用会员职称表单字典 TECHNICAL_TITLE_LEVEL,code、name 均保存名称。
|
||||
-- 同名职称在页面字典中仅保留一个,原始代码另存 sys_data_dict。
|
||||
INSERT INTO sys_dict (
|
||||
id, parentId, path, name, remark, code, disabled, location, hasChildren,
|
||||
createdBy, createdAt, updatedBy, updatedAt, delFlag
|
||||
)
|
||||
SELECT
|
||||
REPLACE(UUID(), '-', ''), parent.id,
|
||||
CONCAT(parent.path, LPAD(IFNULL((
|
||||
SELECT MAX(CAST(RIGHT(child.path, 4) AS UNSIGNED))
|
||||
FROM sys_dict child WHERE child.path LIKE CONCAT(parent.path, '____')
|
||||
), 0) + 1, 4, '0')),
|
||||
'职称', '', 'TECHNICAL_TITLE_LEVEL', 0,
|
||||
IFNULL((SELECT MAX(child.location) FROM sys_dict child WHERE child.parentId = parent.id), 0) + 1,
|
||||
0, '', UNIX_TIMESTAMP(NOW()) * 1000, '', UNIX_TIMESTAMP(NOW()) * 1000, 0
|
||||
FROM sys_dict parent
|
||||
WHERE parent.code = 'USER_TABLE_COLUMN_DICTS'
|
||||
AND NOT EXISTS (SELECT 1 FROM sys_dict existing WHERE existing.code = 'TECHNICAL_TITLE_LEVEL');
|
||||
|
||||
UPDATE sys_dict child
|
||||
JOIN sys_dict parent ON parent.id = child.parentId
|
||||
SET child.code = child.name
|
||||
WHERE parent.code = 'TECHNICAL_TITLE_LEVEL'
|
||||
AND child.name IS NOT NULL AND child.name <> ''
|
||||
AND NOT (child.code <=> child.name);
|
||||
|
||||
INSERT INTO sys_dict (
|
||||
id, parentId, path, name, remark, code, disabled, location, hasChildren,
|
||||
createdBy, createdAt, updatedBy, updatedAt, delFlag
|
||||
)
|
||||
SELECT
|
||||
REPLACE(UUID(), '-', ''), parent.id,
|
||||
CONCAT(parent.path, LPAD(IFNULL((
|
||||
SELECT MAX(CAST(RIGHT(child.path, 4) AS UNSIGNED))
|
||||
FROM sys_dict child WHERE child.path LIKE CONCAT(parent.path, '____')
|
||||
), 0) + source.sortOrder, 4, '0')),
|
||||
source.name, '', source.name, 0,
|
||||
IFNULL((SELECT MAX(child.location) FROM sys_dict child WHERE child.parentId = parent.id), 0)
|
||||
+ source.sortOrder,
|
||||
0, '', UNIX_TIMESTAMP(NOW()) * 1000, '', UNIX_TIMESTAMP(NOW()) * 1000, 0
|
||||
FROM sys_dict parent
|
||||
CROSS JOIN (
|
||||
SELECT 1 AS sortOrder, '高等学校教师' AS name
|
||||
UNION ALL SELECT 2, '教授'
|
||||
UNION ALL SELECT 3, '副教授'
|
||||
UNION ALL SELECT 4, '讲师(高校)'
|
||||
UNION ALL SELECT 5, '助教(高校)'
|
||||
UNION ALL SELECT 6, '高级讲师(中专)'
|
||||
UNION ALL SELECT 7, '讲师(中专)'
|
||||
UNION ALL SELECT 8, '助理讲师(中专)'
|
||||
UNION ALL SELECT 9, '高级讲师(技校)'
|
||||
UNION ALL SELECT 10, '讲师(技校)'
|
||||
UNION ALL SELECT 11, '助理讲师(技校)'
|
||||
UNION ALL SELECT 12, '一级实习指导教师'
|
||||
UNION ALL SELECT 13, '二级实习指导教师'
|
||||
UNION ALL SELECT 14, '三级实习指导教师'
|
||||
UNION ALL SELECT 15, '高级教师(中学)'
|
||||
UNION ALL SELECT 16, '一级教师(中学)'
|
||||
UNION ALL SELECT 17, '二级教师(中学)'
|
||||
UNION ALL SELECT 18, '正高级教师'
|
||||
UNION ALL SELECT 19, '高级教师'
|
||||
UNION ALL SELECT 20, '一级教师'
|
||||
UNION ALL SELECT 21, '二级教师'
|
||||
UNION ALL SELECT 22, '教授级高级实验师'
|
||||
UNION ALL SELECT 23, '高级实验师'
|
||||
UNION ALL SELECT 24, '实验师'
|
||||
UNION ALL SELECT 25, '助理实验师'
|
||||
UNION ALL SELECT 26, '实验员'
|
||||
UNION ALL SELECT 27, '教授级高级工程师'
|
||||
UNION ALL SELECT 28, '高级工程师'
|
||||
UNION ALL SELECT 29, '工程师'
|
||||
UNION ALL SELECT 30, '助理工程师'
|
||||
UNION ALL SELECT 31, '技术员'
|
||||
UNION ALL SELECT 32, '农艺师'
|
||||
UNION ALL SELECT 33, '农业技术人员(畜牧)'
|
||||
UNION ALL SELECT 34, '经济专业人员'
|
||||
UNION ALL SELECT 35, '经济师'
|
||||
UNION ALL SELECT 36, '助理经济师'
|
||||
UNION ALL SELECT 37, '会计专业人员'
|
||||
UNION ALL SELECT 38, '高级会计师'
|
||||
UNION ALL SELECT 39, '会计师'
|
||||
UNION ALL SELECT 40, '助理会计师'
|
||||
UNION ALL SELECT 41, '会计员'
|
||||
UNION ALL SELECT 42, '统计专业人员'
|
||||
UNION ALL SELECT 43, '统计师'
|
||||
UNION ALL SELECT 44, '编审'
|
||||
UNION ALL SELECT 45, '副编审'
|
||||
UNION ALL SELECT 46, '编辑'
|
||||
UNION ALL SELECT 47, '主任编辑'
|
||||
UNION ALL SELECT 48, '播音员'
|
||||
UNION ALL SELECT 49, '卫生技术人员(医师)'
|
||||
UNION ALL SELECT 50, '主任医师'
|
||||
UNION ALL SELECT 51, '副主任医师'
|
||||
UNION ALL SELECT 52, '主治医师'
|
||||
UNION ALL SELECT 53, '医师'
|
||||
UNION ALL SELECT 54, '副主任药师'
|
||||
UNION ALL SELECT 55, '主管药师'
|
||||
UNION ALL SELECT 56, '药师'
|
||||
UNION ALL SELECT 57, '卫生技术人员(护理)'
|
||||
UNION ALL SELECT 58, '副主任护师'
|
||||
UNION ALL SELECT 59, '主管护师'
|
||||
UNION ALL SELECT 60, '护师'
|
||||
UNION ALL SELECT 61, '卫生主管技师'
|
||||
UNION ALL SELECT 62, '高级教师(小学)'
|
||||
UNION ALL SELECT 63, '一级教师(小学)'
|
||||
UNION ALL SELECT 64, '船舶技术人员(轮机)'
|
||||
UNION ALL SELECT 65, '研究员(自然科学)'
|
||||
UNION ALL SELECT 66, '副研究员(自然科学)'
|
||||
UNION ALL SELECT 67, '助理研究员(自然科学)'
|
||||
UNION ALL SELECT 68, '研究员(社会科学)'
|
||||
UNION ALL SELECT 69, '副研究员(社会科学)'
|
||||
UNION ALL SELECT 70, '助理研究员(社会科学)'
|
||||
UNION ALL SELECT 71, '研究实习员(社会科学)'
|
||||
UNION ALL SELECT 72, '研究馆员(图书)'
|
||||
UNION ALL SELECT 73, '副研究馆员(图书)'
|
||||
UNION ALL SELECT 74, '馆员(图书)'
|
||||
UNION ALL SELECT 75, '助理馆员(图书)'
|
||||
UNION ALL SELECT 76, '馆员(文博)'
|
||||
UNION ALL SELECT 77, '研究馆员(档案)'
|
||||
UNION ALL SELECT 78, '副研究馆员(档案)'
|
||||
UNION ALL SELECT 79, '馆员(档案)'
|
||||
UNION ALL SELECT 80, '教授(思想政治教育)'
|
||||
UNION ALL SELECT 81, '副教授(思想政治教育)'
|
||||
UNION ALL SELECT 82, '讲师(思想政治教育)'
|
||||
UNION ALL SELECT 83, '助教(思想政治教育)'
|
||||
UNION ALL SELECT 84, '政工师'
|
||||
UNION ALL SELECT 85, '助理政工师'
|
||||
UNION ALL SELECT 86, '政工员'
|
||||
UNION ALL SELECT 87, '副教授(改革)'
|
||||
UNION ALL SELECT 88, '研究员'
|
||||
UNION ALL SELECT 89, '副研究员'
|
||||
UNION ALL SELECT 90, '助理研究员'
|
||||
UNION ALL SELECT 91, '研究实习员'
|
||||
UNION ALL SELECT 92, '研究馆员'
|
||||
UNION ALL SELECT 93, '副研究馆员'
|
||||
UNION ALL SELECT 94, '馆员'
|
||||
UNION ALL SELECT 95, '助理馆员'
|
||||
UNION ALL SELECT 96, '管理员'
|
||||
UNION ALL SELECT 97, '幼教一级'
|
||||
UNION ALL SELECT 98, '幼教二级'
|
||||
UNION ALL SELECT 99, '幼教高级'
|
||||
UNION ALL SELECT 100, '研究员(教管)'
|
||||
UNION ALL SELECT 101, '副研究员(教管)'
|
||||
UNION ALL SELECT 102, '助理研究员(教管)'
|
||||
) source
|
||||
WHERE parent.code = 'TECHNICAL_TITLE_LEVEL'
|
||||
AND NOT EXISTS (
|
||||
SELECT 1 FROM sys_dict existing
|
||||
WHERE existing.parentId = parent.id AND existing.code = source.name
|
||||
);
|
||||
|
||||
UPDATE sys_dict parent
|
||||
SET parent.hasChildren = 1
|
||||
WHERE parent.code IN ('USER_TABLE_COLUMN_DICTS', 'TECHNICAL_TITLE_LEVEL')
|
||||
AND EXISTS (
|
||||
SELECT 1 FROM (SELECT DISTINCT parentId FROM sys_dict) child
|
||||
WHERE child.parentId = parent.id
|
||||
);
|
||||
|
||||
-- 10. 人员类型:沿用 v3 的 17 个名称,code、name 均保存名称。
|
||||
INSERT INTO sys_dict (
|
||||
id, parentId, path, name, remark, code, disabled, location, hasChildren,
|
||||
createdBy, createdAt, updatedBy, updatedAt, delFlag
|
||||
)
|
||||
SELECT
|
||||
REPLACE(UUID(), '-', ''), parent.id,
|
||||
CONCAT(parent.path, LPAD(IFNULL((
|
||||
SELECT MAX(CAST(RIGHT(child.path, 4) AS UNSIGNED))
|
||||
FROM sys_dict child WHERE child.path LIKE CONCAT(parent.path, '____')
|
||||
), 0) + source.sortOrder, 4, '0')),
|
||||
source.name, '', source.name, 0,
|
||||
IFNULL((SELECT MAX(child.location) FROM sys_dict child WHERE child.parentId = parent.id), 0)
|
||||
+ source.sortOrder,
|
||||
0, '', UNIX_TIMESTAMP(NOW()) * 1000, '', UNIX_TIMESTAMP(NOW()) * 1000, 0
|
||||
FROM sys_dict parent
|
||||
CROSS JOIN (
|
||||
SELECT 1 AS sortOrder, '在编类' AS name
|
||||
UNION ALL SELECT 2, '聘用合同制(享受人事代理待遇)'
|
||||
UNION ALL SELECT 3, '在编'
|
||||
UNION ALL SELECT 4, '兰溪编制'
|
||||
UNION ALL SELECT 5, '非在编类'
|
||||
UNION ALL SELECT 6, '派遣人员'
|
||||
UNION ALL SELECT 7, '博士后'
|
||||
UNION ALL SELECT 8, '挂职人员'
|
||||
UNION ALL SELECT 9, '外籍教师'
|
||||
UNION ALL SELECT 10, '兼职教师'
|
||||
UNION ALL SELECT 11, '非学校聘用人员'
|
||||
UNION ALL SELECT 12, '单位返聘'
|
||||
UNION ALL SELECT 13, '附属单位'
|
||||
UNION ALL SELECT 14, '聘用合同制'
|
||||
UNION ALL SELECT 15, '聘用制专家'
|
||||
UNION ALL SELECT 16, '人事代理'
|
||||
UNION ALL SELECT 17, '其他'
|
||||
) source
|
||||
WHERE parent.code = 'USER_PERSON_TYPE'
|
||||
AND NOT EXISTS (
|
||||
SELECT 1 FROM sys_dict existing
|
||||
WHERE existing.parentId = parent.id AND existing.code = source.name
|
||||
);
|
||||
|
||||
UPDATE sys_dict parent
|
||||
SET parent.hasChildren = 1
|
||||
WHERE parent.code = 'USER_PERSON_TYPE'
|
||||
AND EXISTS (
|
||||
SELECT 1 FROM (SELECT DISTINCT parentId FROM sys_dict) child
|
||||
WHERE child.parentId = parent.id
|
||||
);
|
||||
|
||||
COMMIT;
|
||||
@@ -0,0 +1,11 @@
|
||||
COMMIT;
|
||||
|
||||
-- 在源表补充接口原始代码,原有字段继续保存名称。
|
||||
ALTER TABLE sys_user_source
|
||||
ADD COLUMN educationCode varchar(20) NULL DEFAULT NULL COMMENT '最高学历代码' AFTER education,
|
||||
ADD COLUMN academicDegreeCode varchar(50) NULL DEFAULT NULL COMMENT '最高学位代码' AFTER academicDegree,
|
||||
ADD COLUMN preparedByCode varchar(30) NULL DEFAULT NULL COMMENT '编制类别代码' AFTER preparedBy,
|
||||
ADD COLUMN jobCategoryCode varchar(50) NULL DEFAULT NULL COMMENT '聘岗类型代码' AFTER jobCategory,
|
||||
ADD COLUMN userStateCode varchar(30) NULL DEFAULT NULL COMMENT '当前状态代码' AFTER userState;
|
||||
|
||||
COMMIT;
|
||||
@@ -0,0 +1,2 @@
|
||||
ALTER TABLE `sys_user_source`
|
||||
ADD COLUMN `professionalTitleCode` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '专业技术职务代码' AFTER `professionalTitle`;
|
||||
@@ -0,0 +1,55 @@
|
||||
;(function (a) {
|
||||
;(jQuery.browser = jQuery.browser || {}).mobile =
|
||||
/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(
|
||||
a
|
||||
) ||
|
||||
/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(
|
||||
a.substr(0, 4)
|
||||
)
|
||||
})(navigator.userAgent || navigator.vendor || window.opera)
|
||||
|
||||
$.ajaxSetup({
|
||||
contentType: "application/x-www-form-urlencoded;charset=utf-8",
|
||||
success: function (response, textStatus, jqXHR) {
|
||||
if (response && typeof response === "object" && response.code !== undefined && response.code !== 0) {
|
||||
Vue.prototype.$message.error(response.msg)
|
||||
} else {
|
||||
return response
|
||||
}
|
||||
},
|
||||
error: function (v1) {
|
||||
Vue.prototype.$message.error(v1.status + " " + v1.statusText)
|
||||
},
|
||||
complete: function (XMLHttpRequest, textStatus) {
|
||||
var sessionstatus = XMLHttpRequest.getResponseHeader("loginStatus") //通过XMLHttpRequest取得响应头,sessionstatus,
|
||||
if (sessionstatus == "accessDenied") {
|
||||
Vue.prototype.$message({
|
||||
message: "\u767b\u5f55\u5931\u6548\uff0c\u8bf7\u5237\u65b0\u9875\u9762\u91cd\u65b0\u767b\u5f55",
|
||||
type: "error"
|
||||
})
|
||||
}
|
||||
if (sessionstatus == "unauthorized") {
|
||||
Vue.prototype.$message({
|
||||
message: "\u6ca1\u6709\u6743\u9650",
|
||||
type: "error"
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
function pjaxReplace(url, data = {}) {
|
||||
const { pathname, search } = location
|
||||
if (url === pathname + search) {
|
||||
return
|
||||
}
|
||||
$.pjax({
|
||||
url: url,
|
||||
container: "#sub-app-container-main-content-body",
|
||||
maxCacheLength: 0,
|
||||
push: false,
|
||||
replace: true,
|
||||
fragment: "#sub-app-container-main-content-body",
|
||||
timeout: 8000,
|
||||
data
|
||||
})
|
||||
}
|
||||
@@ -1,12 +1,12 @@
|
||||
const uploadFileType = ['jpg', 'png', 'doc', 'docx', 'xls', 'xlsx', 'pdf']
|
||||
const docType = ['doc', 'docx', 'xls', 'xlsx', 'pdf']
|
||||
var uploadFileType = ['jpg', 'png', 'doc', 'docx', 'xls', 'xlsx', 'pdf']
|
||||
var docType = ['doc', 'docx', 'xls', 'xlsx', 'pdf']
|
||||
|
||||
const FILE_UPLOAD_ADDRESS = '/platform/inclusiveTherapyV3/common/uploadFile'
|
||||
const FILE_DELETE_ADDRESS = '/platform/inclusiveTherapyV3/common/deleteFile'
|
||||
const FILE_STREAM_PREVIEW_ADDRESS = '/platform/inclusiveTherapyV3/common/preview'
|
||||
const FILE_STREAM_DOWNLOAD_ADDRESS = '/platform/inclusiveTherapyV3/common/download'
|
||||
var FILE_UPLOAD_ADDRESS = '/platform/inclusiveTherapyV3/common/uploadFile'
|
||||
var FILE_DELETE_ADDRESS = '/platform/inclusiveTherapyV3/common/deleteFile'
|
||||
var FILE_STREAM_PREVIEW_ADDRESS = '/platform/inclusiveTherapyV3/common/preview'
|
||||
var FILE_STREAM_DOWNLOAD_ADDRESS = '/platform/inclusiveTherapyV3/common/download'
|
||||
|
||||
const preview = async (filename, id) => {
|
||||
var preview = async (filename, id) => {
|
||||
const suffix = filename.substring(filename.lastIndexOf('.') + 1)
|
||||
if (!docType.includes(suffix.toLowerCase())) {
|
||||
let image = new Image();
|
||||
@@ -19,19 +19,19 @@ const preview = async (filename, id) => {
|
||||
}
|
||||
}
|
||||
|
||||
const download = (id) => {
|
||||
var download = (id) => {
|
||||
window.open(FILE_STREAM_DOWNLOAD_ADDRESS + '?id=' + id)
|
||||
}
|
||||
|
||||
|
||||
const PREVIEW_IMAGE = (val) => {
|
||||
var PREVIEW_IMAGE = (val) => {
|
||||
let image = new Image();
|
||||
image.src = FILE_STREAM_PREVIEW_ADDRESS + "?id=" + val
|
||||
let viewer = new Viewer(image);
|
||||
viewer.show();
|
||||
}
|
||||
|
||||
const CREATE_PREVIEW_URL = (val) => {
|
||||
var CREATE_PREVIEW_URL = (val) => {
|
||||
return /^(https?:|data:|blob:|\/)/.test(val || "") ? val : FILE_STREAM_PREVIEW_ADDRESS + "?id=" + encodeURIComponent(val)
|
||||
}
|
||||
|
||||
@@ -40,13 +40,13 @@ const CREATE_PREVIEW_URL = (val) => {
|
||||
* 遮盖层颜色
|
||||
* @type {string}
|
||||
*/
|
||||
const COVER_LAYER_COLOR = "rgba(0,0,0,.45)"
|
||||
var COVER_LAYER_COLOR = "rgba(0,0,0,.45)"
|
||||
|
||||
/**
|
||||
* 民族
|
||||
* @type {string[]}
|
||||
*/
|
||||
const nation = [
|
||||
var nation = [
|
||||
'汉族',
|
||||
'蒙古族',
|
||||
'回族',
|
||||
@@ -113,7 +113,7 @@ function clone(obj) {
|
||||
return JSON.parse(JSON.stringify(obj))
|
||||
}
|
||||
|
||||
const calcTableHeight = (eleIds = []) => {
|
||||
var calcTableHeight = (eleIds = []) => {
|
||||
if (eleIds) {
|
||||
eleIds.forEach(e_id => {
|
||||
const ele = document.querySelector('#' + e_id)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
const sublime = {
|
||||
var sublime = {
|
||||
jumpPagePjax(url) {
|
||||
window.location.href = url;
|
||||
}
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
Vue.component('vi-title', {
|
||||
props: ['title'],
|
||||
template: `
|
||||
<div style="display: flex;flex-direction:row;color: var(--color-primary);font-weight: bolder;margin-bottom: 20px">
|
||||
<div style="width: 5px;height: 24px;background-color: var(--color-primary);border-radius: 2px"></div>
|
||||
<div style="margin-left: 20px;line-height: 24px;font-size: 15px;letter-spacing: 1px">
|
||||
<div class="therapy-title" style="display: flex;flex-direction:row;color: var(--color-primary);font-weight: bolder;margin-bottom: 20px">
|
||||
<div class="therapy-title-marker" style="width: 5px;height: 24px;background-color: var(--color-primary);border-radius: 2px"></div>
|
||||
<div class="therapy-title-text" style="margin-left: 20px;line-height: 24px;font-size: 15px;letter-spacing: 1px">
|
||||
{{ title }}
|
||||
</div>
|
||||
</div>
|
||||
@@ -46,7 +46,7 @@ Vue.component('more', {
|
||||
}
|
||||
})
|
||||
|
||||
Vue.component('table-tool', {
|
||||
Vue.component('therapy-table-tool', {
|
||||
props: {
|
||||
label: {type: String},
|
||||
app: {}
|
||||
@@ -79,7 +79,7 @@ Vue.component('table-tool', {
|
||||
this.getColumns()
|
||||
},
|
||||
template: `
|
||||
<el-row type="flex" justify="space-between" align="middle" style="margin-bottom: 15px">
|
||||
<el-row class="therapy-table-tool" type="flex" justify="space-between" align="middle" style="margin-bottom: 15px">
|
||||
|
||||
<div style="display: flex;justify-content: center;align-items: center">
|
||||
<vi-title :title="label" style="margin-bottom: 0"></vi-title><slot name="label_end"></slot>
|
||||
@@ -127,3 +127,4 @@ Vue.component('table-tool', {
|
||||
</el-row>
|
||||
`,
|
||||
})
|
||||
Vue.component('table-tool', Vue.options.components['therapy-table-tool'])
|
||||
|
||||
@@ -0,0 +1,189 @@
|
||||
.therapy-desktop {
|
||||
font-family: "Helvetica Neue", "Microsoft YaHei", Arial, sans-serif;
|
||||
font-size: 14px;
|
||||
color: #303133;
|
||||
}
|
||||
|
||||
.therapy-desktop #app {
|
||||
height: auto;
|
||||
min-height: 100%;
|
||||
overflow: visible;
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
.therapy-desktop #app .el-card__header {
|
||||
padding: 16px 20px;
|
||||
color: #303133;
|
||||
font-size: 16px;
|
||||
font-weight: 600;
|
||||
line-height: 24px;
|
||||
}
|
||||
|
||||
.therapy-desktop #app .el-form-item__label {
|
||||
color: #606266;
|
||||
font-weight: 400;
|
||||
}
|
||||
|
||||
.therapy-desktop #app .search {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(3, minmax(0, 1fr));
|
||||
gap: 16px 24px;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.therapy-desktop #app .search .search-item {
|
||||
width: auto;
|
||||
min-width: 0;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
overflow: visible;
|
||||
}
|
||||
|
||||
.therapy-desktop #app .search .search-item-label {
|
||||
flex: 0 0 90px;
|
||||
width: 90px;
|
||||
min-width: 0;
|
||||
margin-right: 12px;
|
||||
color: #606266;
|
||||
text-align: right;
|
||||
line-height: 20px;
|
||||
overflow: visible;
|
||||
}
|
||||
|
||||
.therapy-desktop #app .search .search-item-option {
|
||||
flex: 1;
|
||||
width: 0;
|
||||
min-width: 0;
|
||||
overflow: visible;
|
||||
}
|
||||
|
||||
.therapy-desktop #app .search-item-option > .el-input,
|
||||
.therapy-desktop #app .search-item-option > .el-select,
|
||||
.therapy-desktop #app .search-item-option > .el-date-editor {
|
||||
width: 100%;
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
.therapy-desktop #app .search-item-option > .el-radio-group {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 4px 0;
|
||||
}
|
||||
|
||||
.therapy-desktop #app .search .search-query {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 10px;
|
||||
width: auto;
|
||||
margin: 0;
|
||||
padding-left: 102px;
|
||||
overflow: visible;
|
||||
}
|
||||
|
||||
.therapy-desktop #app .query-row {
|
||||
height: auto;
|
||||
min-height: 56px;
|
||||
padding: 12px 0;
|
||||
}
|
||||
|
||||
.therapy-desktop #app .query-row > .query-row-title:empty {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.therapy-desktop #app .query-row .el-col {
|
||||
min-width: 0;
|
||||
overflow: visible;
|
||||
}
|
||||
|
||||
.therapy-desktop #app .query-row-content {
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.therapy-desktop #app .query-row-content > .el-row {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
row-gap: 12px;
|
||||
}
|
||||
|
||||
.therapy-desktop #app .query-row-content > .el-row > .el-col {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 12px;
|
||||
padding-right: 24px;
|
||||
}
|
||||
|
||||
.therapy-desktop #app .query-row-content > .el-row > .el-col > span:first-child {
|
||||
flex: 0 0 90px;
|
||||
color: #606266;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.therapy-desktop #app .query-row-content > .el-row > .el-col > .el-input,
|
||||
.therapy-desktop #app .query-row-content > .el-row > .el-col > .el-select {
|
||||
flex: 1;
|
||||
width: 0 !important;
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
.therapy-desktop .therapy-table-tool {
|
||||
flex-wrap: wrap;
|
||||
gap: 12px;
|
||||
}
|
||||
|
||||
.therapy-desktop .therapy-table-tool > div {
|
||||
min-width: 0;
|
||||
max-width: 100%;
|
||||
flex-wrap: wrap;
|
||||
gap: 10px;
|
||||
}
|
||||
|
||||
.therapy-desktop .therapy-title {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
min-width: 0;
|
||||
margin-bottom: 16px;
|
||||
color: #303133 !important;
|
||||
font-size: 16px;
|
||||
font-weight: 600 !important;
|
||||
line-height: 24px;
|
||||
overflow-wrap: anywhere;
|
||||
}
|
||||
|
||||
.therapy-desktop .therapy-title .therapy-title-marker {
|
||||
flex: 0 0 3px;
|
||||
height: 16px !important;
|
||||
}
|
||||
|
||||
.therapy-desktop .therapy-title .therapy-title-text {
|
||||
margin-left: 10px !important;
|
||||
font-size: 16px !important;
|
||||
letter-spacing: normal !important;
|
||||
}
|
||||
|
||||
.therapy-desktop #app .chart-title,
|
||||
.therapy-desktop #app .col-title {
|
||||
color: #303133;
|
||||
font-size: 16px;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
@media (max-width: 1199px) {
|
||||
.therapy-desktop #app .search {
|
||||
grid-template-columns: repeat(2, minmax(0, 1fr));
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 767px) {
|
||||
.therapy-desktop #app .search {
|
||||
grid-template-columns: minmax(0, 1fr);
|
||||
}
|
||||
|
||||
.therapy-desktop #app .query-row-content > .el-row > .el-col {
|
||||
width: 100%;
|
||||
padding-right: 0;
|
||||
}
|
||||
|
||||
.therapy-desktop .therapy-table-tool > div {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 2.2 MiB |
|
After Width: | Height: | Size: 1.6 MiB |
|
After Width: | Height: | Size: 1.8 MiB |
|
After Width: | Height: | Size: 1.7 MiB |
|
After Width: | Height: | Size: 1.1 MiB |
|
After Width: | Height: | Size: 441 KiB |
|
After Width: | Height: | Size: 524 KiB |
|
After Width: | Height: | Size: 1.0 MiB |
|
After Width: | Height: | Size: 1.2 MiB |
|
After Width: | Height: | Size: 991 KiB |
|
After Width: | Height: | Size: 1.2 MiB |
@@ -1,4 +1,4 @@
|
||||
const initTableMixins = {
|
||||
var therapyTableMixins = {
|
||||
data() {
|
||||
return {
|
||||
festival: ['元旦', '春节', '清明节', '劳动节', '端午节', '中秋节', '国庆节', '其它'],
|
||||
|
||||
@@ -23,6 +23,14 @@ const mobileMixins = {
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
historyBack(callback) {
|
||||
if (window.history.length > 1) {
|
||||
window.history.back()
|
||||
} else {
|
||||
window.location.href = '/platform/h5/home'
|
||||
}
|
||||
if (typeof callback === 'function') callback()
|
||||
},
|
||||
async pageData() {
|
||||
this.mLoading = true
|
||||
if (this.pageDataUrl == null) {
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
* 根据enum获取选项
|
||||
* @returns {Promise<*>}
|
||||
*/
|
||||
const getEnumOptions = async (enumName) => {
|
||||
var getEnumOptions = async (enumName) => {
|
||||
const {data} = await $.get("/platform/inclusiveTherapyV3/common/enumOptions", {enumName})
|
||||
return data
|
||||
}
|
||||
@@ -11,7 +11,7 @@ const getEnumOptions = async (enumName) => {
|
||||
* 根据code获取字典选项
|
||||
* @returns {Promise<*>}
|
||||
*/
|
||||
const getDictOptions = async (code) => {
|
||||
var getDictOptions = async (code) => {
|
||||
const {data} = await $.get("/platform/inclusiveTherapyV3/common/dictOptions", {code})
|
||||
return data
|
||||
}
|
||||
@@ -20,7 +20,7 @@ const getDictOptions = async (code) => {
|
||||
* 根据code获取字典选项信息
|
||||
* @returns {Promise<*>}
|
||||
*/
|
||||
const getDictState = async (code) => {
|
||||
var getDictState = async (code) => {
|
||||
const {data} = await $.get("/platform/inclusiveTherapyV3/common/dictState", {code})
|
||||
return data
|
||||
}
|
||||
@@ -29,7 +29,7 @@ const getDictState = async (code) => {
|
||||
* 获取校区
|
||||
* @returns {Promise<*>}
|
||||
*/
|
||||
const getCampus = async () => {
|
||||
var getCampus = async () => {
|
||||
const {data} = await $.get("/platform/inclusiveTherapyV3/common/getCampus")
|
||||
return data
|
||||
}
|
||||
@@ -39,19 +39,19 @@ const getCampus = async () => {
|
||||
* 获取代表团
|
||||
* @returns {Promise<*>}
|
||||
*/
|
||||
const getDbt = async (jdhId) => {
|
||||
var getDbt = async (jdhId) => {
|
||||
const {data} = await $.get("/platform/inclusiveTherapyV3/common/getDbt", {jdhId})
|
||||
return data
|
||||
}
|
||||
|
||||
//查询当前用户管理的院级工会
|
||||
const getUnion = async () => {
|
||||
var getUnion = async () => {
|
||||
const {data} = await $.get("/platform/inclusiveTherapyV3/common/getUnion")
|
||||
return data
|
||||
}
|
||||
|
||||
//查询当前用户管理的院级工会下的单位
|
||||
const getUnit = async (unionid) => {
|
||||
var getUnit = async (unionid) => {
|
||||
const {data} = await $.get("/platform/inclusiveTherapyV3/common/getUnit", {unionid: unionid})
|
||||
return data
|
||||
}
|
||||
@@ -60,13 +60,13 @@ const getUnit = async (unionid) => {
|
||||
* 获取代表小组
|
||||
* @returns {Promise<*>}
|
||||
*/
|
||||
const getGroup = async (jdhId) => {
|
||||
var getGroup = async (jdhId) => {
|
||||
const {data} = await $.get("/platform/inclusiveTherapyV3/common/getGroup", {jdhId})
|
||||
return data
|
||||
}
|
||||
|
||||
//获取所有开启的教代会
|
||||
const getOpenJdh = async () => {
|
||||
var getOpenJdh = async () => {
|
||||
const {data} = await $.get("/platform/jdh/Common/getOpenJdhxx")
|
||||
return data
|
||||
}
|
||||
@@ -75,7 +75,7 @@ const getOpenJdh = async () => {
|
||||
* 获取院级工会
|
||||
* @returns {Promise<*>}
|
||||
*/
|
||||
const getUnions = async (delegationId = null, isPermission = false) => {
|
||||
var getUnions = async (delegationId = null, isPermission = false) => {
|
||||
const {data} = await $.get("/platform/inclusiveTherapyV3/common/unions", {delegationId, isPermission})
|
||||
return data
|
||||
}
|
||||
@@ -84,7 +84,7 @@ const getUnions = async (delegationId = null, isPermission = false) => {
|
||||
* 获取活动院级工会
|
||||
* @returns {Promise<*>}
|
||||
*/
|
||||
const getActivityUnions = async () => {
|
||||
var getActivityUnions = async () => {
|
||||
const {data} = await $.get("/platform/activity/basic/union/getActivityUnions",)
|
||||
return data
|
||||
}
|
||||
@@ -93,12 +93,12 @@ const getActivityUnions = async () => {
|
||||
* 获取单位
|
||||
* @returns {Promise<*>}
|
||||
*/
|
||||
const getUnits = async (unionId = null) => {
|
||||
var getUnits = async (unionId = null) => {
|
||||
const {data} = await $.get("/platform/inclusiveTherapyV3/common/units", {unionId})
|
||||
return data
|
||||
}
|
||||
|
||||
const getClubUnits = async () => {
|
||||
var getClubUnits = async () => {
|
||||
const {data} = await $.get("/platform/inclusiveTherapyV3/common/getClubUnits", {})
|
||||
return data
|
||||
}
|
||||
@@ -107,7 +107,7 @@ const getClubUnits = async () => {
|
||||
* 获取单位
|
||||
* @returns {Promise<*>}
|
||||
*/
|
||||
const getActivityUnits = async (unionId) => {
|
||||
var getActivityUnits = async (unionId) => {
|
||||
const {data} = await $.get("/platform/activity/basic/union/getActivityUnits", {unionId})
|
||||
return data
|
||||
}
|
||||
@@ -117,7 +117,7 @@ const getActivityUnits = async (unionId) => {
|
||||
* 获取本分工会的单位
|
||||
* @returns {Promise<*>}
|
||||
*/
|
||||
const getUnionUnits = async () => {
|
||||
var getUnionUnits = async () => {
|
||||
const {data} = await $.get("/platform/inclusiveTherapyV3/common/unionUnits")
|
||||
return data
|
||||
}
|
||||
@@ -126,7 +126,7 @@ const getUnionUnits = async () => {
|
||||
* 获取福利单位
|
||||
* @returns {Promise<*>}
|
||||
*/
|
||||
const getWelfareUnits = async () => {
|
||||
var getWelfareUnits = async () => {
|
||||
const {data} = await $.get("/platform/inclusiveTherapyV3/common/welfareUnits")
|
||||
return data
|
||||
}
|
||||
@@ -135,7 +135,7 @@ const getWelfareUnits = async () => {
|
||||
* 获取福利单位的二级单位
|
||||
* @returns {Promise<*>}
|
||||
*/
|
||||
const getUnitsByWelfareUnit = async (welfareUnitId) => {
|
||||
var getUnitsByWelfareUnit = async (welfareUnitId) => {
|
||||
const {data} = await $.get("/platform/inclusiveTherapyV3/common/unitsByWelfareUnit", {welfareUnitId})
|
||||
return data
|
||||
}
|
||||
@@ -144,7 +144,7 @@ const getUnitsByWelfareUnit = async (welfareUnitId) => {
|
||||
* 获取协会
|
||||
* @returns {Promise<*>}
|
||||
*/
|
||||
const getClubs = async () => {
|
||||
var getClubs = async () => {
|
||||
const {data} = await $.get("/platform/inclusiveTherapyV3/common/clubs", {})
|
||||
return data
|
||||
}
|
||||
@@ -153,7 +153,7 @@ const getClubs = async () => {
|
||||
* 获取届次
|
||||
* @returns {Promise<*>}
|
||||
*/
|
||||
const getJc = async () => {
|
||||
var getJc = async () => {
|
||||
const {data} = await $.get("/platform/inclusiveTherapyV3/common/getJcByDict")
|
||||
return data
|
||||
}
|
||||
@@ -162,7 +162,7 @@ const getJc = async () => {
|
||||
* 获取当前人所管理的协会
|
||||
* @returns {Promise<*>}
|
||||
*/
|
||||
const getClubsByRole = async () => {
|
||||
var getClubsByRole = async () => {
|
||||
const {data} = await $.get("/platform/inclusiveTherapyV3/common/getClubsByRole", {})
|
||||
return data
|
||||
}
|
||||
@@ -170,7 +170,7 @@ const getClubsByRole = async () => {
|
||||
* 获取当前人所在的协会
|
||||
* @returns {Promise<*>}
|
||||
*/
|
||||
const getClubsByUser = async () => {
|
||||
var getClubsByUser = async () => {
|
||||
const {data} = await $.get("/platform/inclusiveTherapyV3/common/getClubsByUser", {})
|
||||
return data
|
||||
}
|
||||
@@ -179,7 +179,7 @@ const getClubsByUser = async () => {
|
||||
* 获取文件类型
|
||||
* @returns {Promise<*>}
|
||||
*/
|
||||
const getFileType = async () => {
|
||||
var getFileType = async () => {
|
||||
const {data} = await $.get("/platform/inclusiveTherapyV3/common/getFileTypeByDict")
|
||||
return data
|
||||
}
|
||||
@@ -188,7 +188,7 @@ const getFileType = async () => {
|
||||
* 获取基层干部的角色
|
||||
* @returns {Promise<*>}
|
||||
*/
|
||||
const getJcgbJs = async () => {
|
||||
var getJcgbJs = async () => {
|
||||
const {data} = await $.get("/platform/inclusiveTherapyV3/common/getJcgbJsByDict")
|
||||
return data
|
||||
}
|
||||
@@ -197,7 +197,7 @@ const getJcgbJs = async () => {
|
||||
* 获取审批员的角色
|
||||
* @returns {Promise<*>}
|
||||
*/
|
||||
const getSpyJs = async () => {
|
||||
var getSpyJs = async () => {
|
||||
const {data} = await $.get("/platform/inclusiveTherapyV3/common/getSpyJsByDict")
|
||||
return data
|
||||
}
|
||||
@@ -206,7 +206,7 @@ const getSpyJs = async () => {
|
||||
* 获取协会类型
|
||||
* @returns {Promise<*>}
|
||||
*/
|
||||
const getClubType = async () => {
|
||||
var getClubType = async () => {
|
||||
const {data} = await $.get("/platform/inclusiveTherapyV3/common/getClubTypeByDict")
|
||||
return data
|
||||
}
|
||||
@@ -215,7 +215,7 @@ const getClubType = async () => {
|
||||
* 获取系统名称
|
||||
* @returns {Promise<*>}
|
||||
*/
|
||||
const getSystemName = async () => {
|
||||
var getSystemName = async () => {
|
||||
const {data} = await $.get("/platform/inclusiveTherapyV3/common/getSystemNameByDict")
|
||||
return data
|
||||
}
|
||||
@@ -224,7 +224,7 @@ const getSystemName = async () => {
|
||||
* 获取工代会
|
||||
* @returns {Promise<*>}
|
||||
*/
|
||||
const getGdh = async (open = true) => {
|
||||
var getGdh = async (open = true) => {
|
||||
const {data} = await $.get("/platform/inclusiveTherapyV3/common/getGdh", {open})
|
||||
return data
|
||||
}
|
||||
@@ -233,7 +233,7 @@ const getGdh = async (open = true) => {
|
||||
* 获取工代会代表团
|
||||
* @returns {Promise<*>}
|
||||
*/
|
||||
const getGdhDbt = async (jdhId) => {
|
||||
var getGdhDbt = async (jdhId) => {
|
||||
const {data} = await $.get("/platform/gdh/common/getDbt", {jdhId})
|
||||
return data
|
||||
}
|
||||
@@ -242,7 +242,7 @@ const getGdhDbt = async (jdhId) => {
|
||||
* 根据id查用户
|
||||
* @returns {Promise<*>}
|
||||
*/
|
||||
const queryUserByIds = async (ids) => {
|
||||
var queryUserByIds = async (ids) => {
|
||||
const {data} = await $.get("/platform/inclusiveTherapyV3/common/queryUserByIds", {ids: JSON.stringify(ids)})
|
||||
return data
|
||||
}
|
||||
@@ -251,7 +251,7 @@ const queryUserByIds = async (ids) => {
|
||||
* 根据id查用户
|
||||
* @returns {Promise<*>}
|
||||
*/
|
||||
const queryUserById = async (id) => {
|
||||
var queryUserById = async (id) => {
|
||||
const {data} = await $.get("/platform/inclusiveTherapyV3/common/queryUserById", {id: id})
|
||||
return data
|
||||
}
|
||||
@@ -265,7 +265,7 @@ const queryUserById = async (id) => {
|
||||
* @param member
|
||||
* @returns {Promise<*>}
|
||||
*/
|
||||
const searchUser = async (query, unionId = null, unitId = null, sex = null, member = null) => {
|
||||
var searchUser = async (query, unionId = null, unitId = null, sex = null, member = null) => {
|
||||
const {data} = await $.get("/platform/inclusiveTherapyV3/common/searchUser", {
|
||||
query,
|
||||
unionId,
|
||||
@@ -280,7 +280,7 @@ const searchUser = async (query, unionId = null, unitId = null, sex = null, memb
|
||||
* 获取代表可以操作的教代会
|
||||
* @returns {Promise<*>}
|
||||
*/
|
||||
const getJdhByDb = async () => {
|
||||
var getJdhByDb = async () => {
|
||||
const {data} = await $.get("/platform/proposal/common/getJdhByDb")
|
||||
return data
|
||||
}
|
||||
@@ -289,7 +289,7 @@ const getJdhByDb = async () => {
|
||||
* 获取代表可以操作的开启的教代会
|
||||
* @returns {Promise<*>}
|
||||
*/
|
||||
const getOpenJdhByDb = async () => {
|
||||
var getOpenJdhByDb = async () => {
|
||||
const {data} = await $.get("/platform/proposal/common/getOpenMeeting")
|
||||
return data
|
||||
}
|
||||
@@ -298,7 +298,7 @@ const getOpenJdhByDb = async () => {
|
||||
* 获取教代会工作资料类型
|
||||
* @returns {Promise<*>}
|
||||
*/
|
||||
const getGzzllx = async () => {
|
||||
var getGzzllx = async () => {
|
||||
const {data} = await $.get("/platform/jdh/Common/getGzzllx")
|
||||
return data
|
||||
}
|
||||
@@ -307,16 +307,16 @@ const getGzzllx = async () => {
|
||||
* 获取疗休养活动
|
||||
* @returns {Promise<*>}
|
||||
*/
|
||||
const getLxyHd = async () => {
|
||||
var getLxyHd = async () => {
|
||||
const {data} = await $.get("/platform/zgfw/lxy/common/getHdList")
|
||||
return data
|
||||
}
|
||||
const getlxyHdCd = async () => {
|
||||
var getlxyHdCd = async () => {
|
||||
const {data} = await $.get("/platform/zgfw/lxy/common/getlxyHdCd")
|
||||
return data
|
||||
}
|
||||
|
||||
const getNowLxyHd = async () => {
|
||||
var getNowLxyHd = async () => {
|
||||
const {data} = await $.get("/platform/zgfw/lxy/common/getNowHdList")
|
||||
return data
|
||||
}
|
||||
@@ -325,11 +325,11 @@ const getNowLxyHd = async () => {
|
||||
* 获取基层工会
|
||||
* @returns {Promise<*>}
|
||||
*/
|
||||
const getUnionList = async (unionId) => {
|
||||
var getUnionList = async (unionId) => {
|
||||
const {data} = await $.get("/platform/inclusiveTherapyV3/common/unionList", {unionId})
|
||||
return data
|
||||
}
|
||||
const threeUnitsByUnionGroupOrUnitId = async (unitId, groupId) => {
|
||||
var threeUnitsByUnionGroupOrUnitId = async (unitId, groupId) => {
|
||||
const {data} = await $.get("/platform/inclusiveTherapyV3/common/threeUnitsByUnionGroupOrUnitId", {
|
||||
unitId,
|
||||
groupId
|
||||
@@ -337,7 +337,7 @@ const threeUnitsByUnionGroupOrUnitId = async (unitId, groupId) => {
|
||||
return data
|
||||
}
|
||||
|
||||
const unionGroupsByUnionId = async (unionId) => {
|
||||
var unionGroupsByUnionId = async (unionId) => {
|
||||
const {data} = await $.get("/platform/inclusiveTherapyV3/common/unionGroupsByUnionId", {unionId})
|
||||
return data
|
||||
}
|
||||
@@ -346,7 +346,7 @@ const unionGroupsByUnionId = async (unionId) => {
|
||||
* 获取活动人员范围
|
||||
* @returns {Promise<*>}
|
||||
*/
|
||||
const getActivityGroup = async () => {
|
||||
var getActivityGroup = async () => {
|
||||
const {data} = await $.get('/platform/activity/basic/scope/getActivityUserScopeGroup')
|
||||
return data
|
||||
}
|
||||
@@ -354,7 +354,7 @@ const getActivityGroup = async () => {
|
||||
* 查看该人员是否在活动范围中
|
||||
* @returns {Promise<*>}
|
||||
*/
|
||||
const getScopeUser = async (activityGroupId) => {
|
||||
var getScopeUser = async (activityGroupId) => {
|
||||
const {data} = await $.get('/platform/activity/basic/scope/getScopeUser', {activityGroupId})
|
||||
return data
|
||||
}
|
||||
@@ -364,18 +364,18 @@ const getScopeUser = async (activityGroupId) => {
|
||||
* @param id
|
||||
* @returns {Promise<*>}
|
||||
*/
|
||||
const getActivityTwoLevelType = async (code) => {
|
||||
var getActivityTwoLevelType = async (code) => {
|
||||
const {data} = await $.get("/platform/activity/basic/basic/settings/getActivityTwoLevelType", {code})
|
||||
return data
|
||||
}
|
||||
|
||||
//获取二级教代会(双代会)工作资料类型
|
||||
const getJdh2Gzzllx = async () => {
|
||||
var getJdh2Gzzllx = async () => {
|
||||
const {data} = await $.get("/platform/jdh/Common/getJdh2Gzzllx")
|
||||
return data
|
||||
}
|
||||
|
||||
const getLocationVariable = (variable) => {
|
||||
var getLocationVariable = (variable) => {
|
||||
var query = window.location.search.substring(1);
|
||||
var vars = query.split("&");
|
||||
for (let i = 0; i < vars.length; i++) {
|
||||
@@ -387,7 +387,7 @@ const getLocationVariable = (variable) => {
|
||||
return '';
|
||||
}
|
||||
|
||||
const getConfigKey = async (key) => {
|
||||
var getConfigKey = async (key) => {
|
||||
const {data} = await $.get('/platform/inclusiveTherapyV3/common/getValue', {key})
|
||||
return data
|
||||
}
|
||||
@@ -396,7 +396,7 @@ const getConfigKey = async (key) => {
|
||||
* 根据多个工会获取单位
|
||||
* @returns {Promise<*>}
|
||||
*/
|
||||
const getUnitByUnions = async (unionId = null) => {
|
||||
var getUnitByUnions = async (unionId = null) => {
|
||||
const {data} = await $.get("/platform/inclusiveTherapyV3/common/getUnitsByUnions", {unionId})
|
||||
return data
|
||||
}
|
||||
@@ -407,7 +407,7 @@ const getUnitByUnions = async (unionId = null) => {
|
||||
* @param groupId
|
||||
* @returns {Promise<*>}
|
||||
*/
|
||||
const getThreeUnitsByUnionGroupsOrUnitIds = async (unitId, groupId) => {
|
||||
var getThreeUnitsByUnionGroupsOrUnitIds = async (unitId, groupId) => {
|
||||
const {data} = await $.get("/platform/inclusiveTherapyV3/common/getThreeUnitsByUnionGroupsOrUnitIds", {
|
||||
unitId,
|
||||
groupId
|
||||
@@ -420,7 +420,7 @@ const getThreeUnitsByUnionGroupsOrUnitIds = async (unitId, groupId) => {
|
||||
* @param unionId
|
||||
* @returns {Promise<*>}
|
||||
*/
|
||||
const getUnionGroupsByUnions = async (unionId) => {
|
||||
var getUnionGroupsByUnions = async (unionId) => {
|
||||
const {data} = await $.get("/platform/inclusiveTherapyV3/common/getUnionGroupsByUnions", {unionId})
|
||||
return data
|
||||
}
|
||||
|
||||
@@ -0,0 +1,128 @@
|
||||
<template>
|
||||
<van-popup :value="value" position="right" class="therapy-notice-preview" :close-on-click-overlay="false"
|
||||
:close-on-popstate="true" @input="$emit('input', $event)" @opened="loadPdf" @closed="releasePdf">
|
||||
<van-nav-bar :title="title" left-arrow left-text="返回" @click-left="$emit('input', false)"></van-nav-bar>
|
||||
<div class="therapy-notice-preview__body">
|
||||
<div v-if="src" ref="viewer" class="therapy-notice-preview__viewer"></div>
|
||||
<div v-else class="therapy-notice-preview__content" v-html="content"></div>
|
||||
<div v-if="loading" class="therapy-notice-preview__status"><van-loading vertical>正在加载须知...</van-loading></div>
|
||||
<div v-if="failed" class="therapy-notice-preview__status">
|
||||
<van-empty image="error" description="PDF 加载失败,请重试">
|
||||
<van-button round type="primary" size="small" @click="loadPdf">重新加载</van-button>
|
||||
</van-empty>
|
||||
</div>
|
||||
</div>
|
||||
</van-popup>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
module.exports = {
|
||||
name: 'TherapyNoticePreview',
|
||||
props: {
|
||||
value: { type: Boolean, default: false },
|
||||
src: { type: String, default: '' },
|
||||
title: { type: String, default: '疗休养须知' },
|
||||
content: { type: String, default: '' }
|
||||
},
|
||||
data() {
|
||||
return { loading: false, failed: false }
|
||||
},
|
||||
methods: {
|
||||
loadPdf() {
|
||||
this.releasePdf()
|
||||
if (!this.value || !this.src) return
|
||||
this.loading = true
|
||||
try {
|
||||
const viewer = new Pdfh5(this.$refs.viewer, { pdfurl: this.src, URIenable: false })
|
||||
this._pdfViewer = viewer
|
||||
viewer.on('complete', (status) => {
|
||||
if (this._pdfViewer !== viewer) return
|
||||
this.loading = false
|
||||
this.failed = status !== 'success'
|
||||
})
|
||||
viewer.on('error', () => {
|
||||
if (this._pdfViewer !== viewer) return
|
||||
this.loading = false
|
||||
this.failed = true
|
||||
})
|
||||
} catch (error) {
|
||||
this.loading = false
|
||||
this.failed = true
|
||||
}
|
||||
},
|
||||
releasePdf() {
|
||||
const viewer = this._pdfViewer
|
||||
this._pdfViewer = null
|
||||
if (viewer) viewer.destroy()
|
||||
this.loading = false
|
||||
this.failed = false
|
||||
}
|
||||
},
|
||||
beforeDestroy() {
|
||||
this.releasePdf()
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
.therapy-notice-preview.van-popup {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
width: 100vw;
|
||||
max-width: none;
|
||||
border-radius: 0;
|
||||
height: 100%;
|
||||
height: 100dvh;
|
||||
overflow: hidden;
|
||||
background: #f3f7fd;
|
||||
box-sizing: border-box;
|
||||
padding-top: env(safe-area-inset-top);
|
||||
padding-bottom: env(safe-area-inset-bottom);
|
||||
}
|
||||
|
||||
.therapy-notice-preview > .van-nav-bar {
|
||||
flex-shrink: 0;
|
||||
background: #fff;
|
||||
}
|
||||
|
||||
.therapy-notice-preview .van-nav-bar__title {
|
||||
max-width: 60%;
|
||||
}
|
||||
|
||||
.therapy-notice-preview__body {
|
||||
position: relative;
|
||||
flex: 1;
|
||||
min-height: 0;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.therapy-notice-preview__viewer {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.therapy-notice-preview__content {
|
||||
height: 100%;
|
||||
padding: 16px;
|
||||
overflow: auto;
|
||||
box-sizing: border-box;
|
||||
background: #fff;
|
||||
line-height: 1.8;
|
||||
overflow-wrap: anywhere;
|
||||
}
|
||||
|
||||
.therapy-notice-preview__content img,
|
||||
.therapy-notice-preview__content video {
|
||||
max-width: 100% !important;
|
||||
height: auto !important;
|
||||
}
|
||||
|
||||
.therapy-notice-preview__status {
|
||||
position: absolute;
|
||||
inset: 0;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
background: #f3f7fd;
|
||||
}
|
||||
</style>
|
||||
@@ -3,6 +3,7 @@
|
||||
<slot></slot>
|
||||
<div class="search-query" v-if="isSearchButton">
|
||||
<el-button type="primary" icon="el-icon-search" @click="$emit('search', null)">搜索</el-button>
|
||||
<slot name="actions"></slot>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<template>
|
||||
<div>
|
||||
<div class="panel panel-default mt20" style="border: none">
|
||||
<div class="panel panel-default" style="border: none">
|
||||
<div class="panel-heading" style="background: #fafafa;border:1px solid #ebeef5;border-bottom: none">
|
||||
<h3 class="panel-title">
|
||||
基地信息
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
<div>
|
||||
<el-tabs tab-position="top" v-model="activeName" v-loading="loading">
|
||||
<el-tab-pane label="报名信息" name="1">
|
||||
<div class="panel panel-default mt20" style="border: none">
|
||||
<div class="panel panel-default" style="border: none">
|
||||
<div class="panel-heading" style="background: #fafafa;border:1px solid #ebeef5;border-bottom: none">
|
||||
<h3 class="panel-title">
|
||||
本人信息
|
||||
@@ -68,7 +68,23 @@
|
||||
</h3>
|
||||
</div>
|
||||
<div class="panel-body" style="border: 1px solid rgb(235, 238, 245)">
|
||||
<el-table :data="viewData.companionList">
|
||||
<div v-if="familyCards" class="therapy-family-list">
|
||||
<div v-for="(item, index) in viewData.companionList" :key="item.id || index" class="therapy-family-card">
|
||||
<div class="therapy-family-title">家属 {{ index + 1 }} · {{ item.userName }}</div>
|
||||
<el-descriptions :column="2" border class="therapy-family-details">
|
||||
<el-descriptions-item label="姓名">{{ item.userName }}</el-descriptions-item>
|
||||
<el-descriptions-item label="性别">{{ item.sex }}</el-descriptions-item>
|
||||
<el-descriptions-item label="关系">{{ item.relation }}</el-descriptions-item>
|
||||
<el-descriptions-item label="身份证号">{{ item.idCard }}</el-descriptions-item>
|
||||
<el-descriptions-item label="年龄">{{ item.age }}</el-descriptions-item>
|
||||
<el-descriptions-item label="床型">{{ item.bedInfo?.bedType }}</el-descriptions-item>
|
||||
<el-descriptions-item label="床位">{{ item.bedInfo?.bedNum }}</el-descriptions-item>
|
||||
<el-descriptions-item label="意向拼床人">{{ item.bedInfo?.otherSleepUser || '暂无' }}</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</div>
|
||||
<el-empty v-if="!viewData.companionList || !viewData.companionList.length" description="暂无家属信息" :image-size="60"></el-empty>
|
||||
</div>
|
||||
<el-table v-else :data="viewData.companionList">
|
||||
<el-table-column label="姓名" prop="userName"></el-table-column>
|
||||
<el-table-column label="性别" prop="sex"></el-table-column>
|
||||
<el-table-column label="身份证号" prop="idCard"></el-table-column>
|
||||
@@ -138,6 +154,10 @@
|
||||
<script>
|
||||
module.exports = {
|
||||
props: {
|
||||
familyCards: {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
union_id: {
|
||||
type: String,
|
||||
default: "",
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
<template #header>
|
||||
<el-row type="flex">
|
||||
<el-col :span="12">
|
||||
<el-button icon="el-icon-back" style="font-size: 16px" type="text" @click="v='index'">返回</el-button>
|
||||
<el-button icon="el-icon-back" style="font-size: 16px; padding: 0" type="text" @click="v='index'">返回</el-button>
|
||||
</el-col>
|
||||
<el-col :span="12" class="text-right">
|
||||
<slot name="edit_func"></slot>
|
||||
@@ -22,7 +22,7 @@
|
||||
|
||||
<el-card v-show="v==='view'" key="view" shadow="never" class="animated-card">
|
||||
<template #header>
|
||||
<el-button icon="el-icon-back" style="font-size: 16px" type="text" @click="v='index'">返回</el-button>
|
||||
<el-button icon="el-icon-back" style="font-size: 16px; padding: 0" type="text" @click="v='index'">返回</el-button>
|
||||
</template>
|
||||
<div :class="{'card_scroll':edit_scroll}">
|
||||
<slot name="view"></slot>
|
||||
@@ -31,7 +31,7 @@
|
||||
|
||||
<el-card v-show="v==='public'" key="public" shadow="never" class="animated-card">
|
||||
<div slot="header" class="clearfix">
|
||||
<el-button icon="el-icon-back" style="font-size: 16px" type="text" @click="back()">返回
|
||||
<el-button icon="el-icon-back" style="font-size: 16px; padding: 0" type="text" @click="back()">返回
|
||||
</el-button>
|
||||
</div>
|
||||
<div>
|
||||
@@ -92,7 +92,7 @@ module.exports = {
|
||||
<style>
|
||||
|
||||
.guava-main-content {
|
||||
padding: 10px 12px;
|
||||
padding: 0;
|
||||
background-color: #f6f6f6;
|
||||
min-height: 100%;
|
||||
}
|
||||
@@ -114,8 +114,12 @@ module.exports = {
|
||||
}
|
||||
}
|
||||
|
||||
.el-card__header {
|
||||
padding: 5px 20px !important;
|
||||
.guava-main-content > .animated-card > .el-card__header {
|
||||
padding: 12px 24px !important;
|
||||
}
|
||||
|
||||
.guava-main-content > .animated-card > .el-card__body {
|
||||
padding: 20px 24px;
|
||||
}
|
||||
|
||||
.el-tabs--border-card {
|
||||
@@ -143,4 +147,4 @@ module.exports = {
|
||||
display: none;
|
||||
}
|
||||
|
||||
</style>
|
||||
</style>
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
<template>
|
||||
<div>
|
||||
<div class="panel panel-default mt20" style="border: none">
|
||||
<div class="panel-heading" style="background: #fafafa;border:1px solid #ebeef5;border-bottom: none">
|
||||
<h3 class="panel-title">
|
||||
<div class="therapy-line-info">
|
||||
<div class="line-info-section">
|
||||
<div class="line-info-section-header">
|
||||
<h3 class="line-info-section-title">
|
||||
线路信息
|
||||
</h3>
|
||||
</div>
|
||||
<el-descriptions :column="2" border class="viewTable">
|
||||
<el-descriptions-item label="年度">{{ viewData.year }}</el-descriptions-item>
|
||||
<el-descriptions-item label="编号">{{ viewData.serialNumber }}</el-descriptions-item>
|
||||
<el-descriptions-item label="线路名称">{{ viewData.lineName }}</el-descriptions-item>
|
||||
<el-descriptions-item label="区域性质">{{ viewData.regionalNature }}</el-descriptions-item>
|
||||
<dl class="line-info-fields">
|
||||
<div class="line-info-field"><dt>年度</dt><dd>{{ viewData.year }}</dd></div>
|
||||
<div class="line-info-field"><dt>编号</dt><dd>{{ viewData.serialNumber }}</dd></div>
|
||||
<div class="line-info-field"><dt>线路名称</dt><dd>{{ viewData.lineName }}</dd></div>
|
||||
<div class="line-info-field"><dt>区域性质</dt><dd>{{ viewData.regionalNature }}</dd></div>
|
||||
<!-- <el-descriptions-item label="最少参与教工">{{ viewData.minimumGroupSize }}</el-descriptions-item>-->
|
||||
<!-- (校工会创建AND自由模式) OR (分工会创建) -->
|
||||
<!-- <template v-if="(viewData.createMode === 2 && viewData.signUpMode === 2 ) || viewData.createMode === 1">-->
|
||||
@@ -25,12 +25,12 @@
|
||||
<!-- <el-descriptions-item label="预计费用(元)">{{ viewData.estimatedCost }}</el-descriptions-item>-->
|
||||
<!-- <el-descriptions-item label="预计人数(含家属)">{{ viewData.estimatedFamilyNumbers }}</el-descriptions-item>-->
|
||||
<!-- <el-descriptions-item label=""></el-descriptions-item>-->
|
||||
</el-descriptions>
|
||||
</dl>
|
||||
</div>
|
||||
|
||||
<div class="panel panel-default mt20" style="border:none" v-if="showTravelTimePeriod">
|
||||
<div class="panel-heading" style="background: #fafafa;border:1px solid #ebeef5;border-bottom: none">
|
||||
<h3 class="panel-title">
|
||||
<div class="line-info-section" v-if="showTravelTimePeriod">
|
||||
<div class="line-info-section-header">
|
||||
<h3 class="line-info-section-title">
|
||||
出行时间段
|
||||
</h3>
|
||||
</div>
|
||||
@@ -73,14 +73,15 @@
|
||||
</el-descriptions>
|
||||
</div>
|
||||
-->
|
||||
<div class="panel panel-default mt20" style="border-color: #ebeef5">
|
||||
<div class="panel-heading" style="background: #fafafa;border-color: #ebeef5">
|
||||
<h3 class="panel-title">
|
||||
<div class="line-info-section">
|
||||
<div class="line-info-section-header">
|
||||
<h3 class="line-info-section-title">
|
||||
线路内容
|
||||
</h3>
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<div v-html="viewData.content"></div>
|
||||
<div class="line-info-content">
|
||||
<div v-html="viewData.content" v-if="viewData.content"></div>
|
||||
<div class="line-info-empty" v-else>暂无线路内容</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -134,12 +135,113 @@ module.exports = {
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.viewTable .el-descriptions__table {
|
||||
table-layout: fixed !important;
|
||||
<style>
|
||||
.therapy-line-info {
|
||||
color: #303133;
|
||||
font-size: 14px;
|
||||
line-height: 1.6;
|
||||
}
|
||||
|
||||
.viewTable .el-descriptions-item__cell {
|
||||
text-align: center !important;
|
||||
.therapy-line-info .line-info-section {
|
||||
margin-bottom: 24px;
|
||||
overflow: hidden;
|
||||
border: 1px solid #ebeef5;
|
||||
border-radius: 4px;
|
||||
background: #fff;
|
||||
}
|
||||
|
||||
.therapy-line-info .line-info-section:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.therapy-line-info .line-info-section-header {
|
||||
padding: 14px 20px;
|
||||
border-bottom: 1px solid #ebeef5;
|
||||
background: #fafafa;
|
||||
}
|
||||
|
||||
.therapy-line-info .line-info-section-title {
|
||||
margin: 0;
|
||||
padding-left: 10px;
|
||||
border-left: 3px solid var(--color-primary, #409eff);
|
||||
color: #303133;
|
||||
font-size: 16px;
|
||||
font-weight: 600;
|
||||
line-height: 22px;
|
||||
}
|
||||
|
||||
.therapy-line-info .line-info-fields {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(2, minmax(0, 1fr));
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.therapy-line-info .line-info-field {
|
||||
display: grid;
|
||||
grid-template-columns: 120px minmax(0, 1fr);
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
.therapy-line-info .line-info-field:nth-child(n + 3) {
|
||||
border-top: 1px solid #ebeef5;
|
||||
}
|
||||
|
||||
.therapy-line-info .line-info-field:nth-child(2n) {
|
||||
border-left: 1px solid #ebeef5;
|
||||
}
|
||||
|
||||
.therapy-line-info .line-info-field dt,
|
||||
.therapy-line-info .line-info-field dd {
|
||||
margin: 0;
|
||||
padding: 14px 16px;
|
||||
line-height: 24px;
|
||||
text-align: left;
|
||||
overflow-wrap: anywhere;
|
||||
}
|
||||
|
||||
.therapy-line-info .line-info-field dt {
|
||||
border-right: 1px solid #ebeef5;
|
||||
background: #fafafa;
|
||||
color: #606266;
|
||||
font-weight: 400;
|
||||
}
|
||||
|
||||
.therapy-line-info .line-info-content {
|
||||
padding: 20px 24px;
|
||||
color: #303133;
|
||||
line-height: 1.9;
|
||||
overflow-wrap: anywhere;
|
||||
overflow-x: auto;
|
||||
}
|
||||
|
||||
.therapy-line-info .line-info-content p {
|
||||
margin: 0 0 12px;
|
||||
}
|
||||
|
||||
.therapy-line-info .line-info-content img,
|
||||
.therapy-line-info .line-info-content video {
|
||||
max-width: 100%;
|
||||
height: auto;
|
||||
}
|
||||
|
||||
.therapy-line-info .line-info-empty {
|
||||
padding: 12px 0;
|
||||
color: #909399;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
@media (max-width: 767px) {
|
||||
.therapy-line-info .line-info-fields {
|
||||
grid-template-columns: minmax(0, 1fr);
|
||||
}
|
||||
|
||||
.therapy-line-info .line-info-field + .line-info-field {
|
||||
border-top: 1px solid #ebeef5;
|
||||
border-left: 0;
|
||||
}
|
||||
|
||||
.therapy-line-info .line-info-content {
|
||||
padding: 16px;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
<div>
|
||||
<el-tabs tab-position="top" v-model="activeName" v-loading="loading">
|
||||
<el-tab-pane label="报名信息" name="1">
|
||||
<div class="panel panel-default mt20" style="border: none">
|
||||
<div class="panel panel-default" style="border: none">
|
||||
<div class="panel-heading" style="background: #fafafa;border:1px solid #ebeef5;border-bottom: none">
|
||||
<h3 class="panel-title">
|
||||
本人信息
|
||||
|
||||
@@ -504,7 +504,9 @@ layout("/layouts/v4/baseLayout.html"){
|
||||
// 页面加载时获取到正确的菜单
|
||||
const pathname = window.location.pathname
|
||||
if (!pathname.startsWith("/platform/v4/subApp")) {
|
||||
const path = this.getMenuOwnerFullPath()
|
||||
// 普惠疗休养子菜单含 mode 等参数,刷新时统一从模块根菜单恢复侧栏。
|
||||
const path = pathname === "/platform/inclusiveTherapyV3" || pathname.startsWith("/platform/inclusiveTherapyV3/")
|
||||
? "/platform/inclusiveTherapyV3" : this.getMenuOwnerFullPath()
|
||||
this.$axios.post("/platform/sys/user/rootMenuByPath", {pathname: path}).then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.setAppInfo(res.data)
|
||||
|
||||
@@ -38,13 +38,13 @@ layout("/layouts/platform.html"){
|
||||
<el-input placeholder="请输入工号" clearable v-model="pageForm.loginName" style="width: 100%"></el-input>
|
||||
</search-item>
|
||||
<search-item label="所属单位">
|
||||
<el-select placeholder="请选择所属单位" v-model="pageForm.unitName" clearable filterable>
|
||||
<el-option v-for="item in unitNameOptions" :key="item" :label="item" :value="item"></el-option>
|
||||
<el-select placeholder="全部" v-model="pageForm.unitName" clearable filterable>
|
||||
<el-option v-for="item in unitNameOptions" :key="item.value" :label="item.label" :value="item.value"></el-option>
|
||||
</el-select>
|
||||
</search-item>
|
||||
<search-item label="在职状态">
|
||||
<el-select v-model="pageForm.userState" clearable filterable>
|
||||
<el-option v-for="item in userStateOptions" :label="item" :value="item"></el-option>
|
||||
<el-select placeholder="全部" v-model="pageForm.userState" clearable filterable>
|
||||
<el-option v-for="item in userStateOptions" :key="item.value" :label="item.label" :value="item.value"></el-option>
|
||||
</el-select>
|
||||
</search-item>
|
||||
<!-- 暂停用人方式筛选,保留查询控件供后续恢复。
|
||||
@@ -55,10 +55,11 @@ layout("/layouts/platform.html"){
|
||||
</search-item>
|
||||
-->
|
||||
<search-item label="人员类型">
|
||||
<el-select v-model="pageForm.personType" clearable filterable>
|
||||
<el-option v-for="item in personTypeOptions" :label="item" :value="item"></el-option>
|
||||
<el-select placeholder="全部" v-model="pageForm.personType" clearable filterable>
|
||||
<el-option v-for="item in personTypeOptions" :key="item.value" :label="item.label" :value="item.value"></el-option>
|
||||
</el-select>
|
||||
</search-item>
|
||||
<el-button slot="actions" icon="el-icon-refresh-left" @click="resetSearch">重置</el-button>
|
||||
</search>
|
||||
</el-card>
|
||||
|
||||
@@ -125,6 +126,16 @@ layout("/layouts/platform.html"){
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
resetSearch() {
|
||||
this.$set(this.pageForm, "userName", "")
|
||||
this.$set(this.pageForm, "loginName", "")
|
||||
this.$set(this.pageForm, "unitName", "")
|
||||
this.$set(this.pageForm, "userState", "")
|
||||
this.$set(this.pageForm, "personType", "")
|
||||
this.$set(this.pageForm, "preparedBy", "")
|
||||
this.$set(this.pageForm, "pullTime", (this.pullTimeOptions[0] || {}).pullTime || "")
|
||||
this.doSearch()
|
||||
},
|
||||
pull() {
|
||||
// 拉取未结束时不再打开确认框或发送重复请求。
|
||||
if (this.pullLoading) return
|
||||
@@ -149,6 +160,7 @@ layout("/layouts/platform.html"){
|
||||
.then((resp) => {
|
||||
if (resp.code === 0) {
|
||||
this.$message.success(resp.msg)
|
||||
this.getSearchOptions()
|
||||
this.getPullTimeOptions()
|
||||
this.doSearch()
|
||||
}
|
||||
@@ -162,12 +174,24 @@ layout("/layouts/platform.html"){
|
||||
.catch(() => {})
|
||||
},
|
||||
|
||||
buildSearchOptions(values) {
|
||||
const optionValues = new Set(values.map(value =>
|
||||
value == null || /^(?:null)?$/i.test(value.trim()) ? "__EMPTY__" : value
|
||||
))
|
||||
const hasEmpty = optionValues.delete("__EMPTY__")
|
||||
const options = Array.from(optionValues, value => ({ label: value, value }))
|
||||
if (hasEmpty) {
|
||||
options.push({ label: "空数据", value: "__EMPTY__" })
|
||||
}
|
||||
return options
|
||||
},
|
||||
|
||||
getSearchOptions() {
|
||||
this.$axios.post("/platform/sys/data/user/pull/searchOptions").then((resp) => {
|
||||
if (resp.code === 0) {
|
||||
this.unitNameOptions = resp.data.unitNames
|
||||
this.userStateOptions = resp.data.userStates
|
||||
this.personTypeOptions = resp.data.personTypes
|
||||
this.unitNameOptions = this.buildSearchOptions(resp.data.unitNames)
|
||||
this.userStateOptions = this.buildSearchOptions(resp.data.userStates)
|
||||
this.personTypeOptions = this.buildSearchOptions(resp.data.personTypes)
|
||||
this.preparedByOptions = resp.data.preparedBys
|
||||
}
|
||||
})
|
||||
@@ -206,6 +230,7 @@ layout("/layouts/platform.html"){
|
||||
if (resp.code === 0) {
|
||||
this.$message.success(resp.msg)
|
||||
this.pullTimeDialogVisible = false
|
||||
this.getSearchOptions()
|
||||
this.doSearch()
|
||||
}
|
||||
})
|
||||
|
||||
@@ -0,0 +1,82 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<el-card shadow="never">
|
||||
<search @search="doSearch">
|
||||
<search-item label="工号">
|
||||
<el-input placeholder="请输入工号" clearable v-model="pageForm.zgh" @keyup.enter.native="doSearch"></el-input>
|
||||
</search-item>
|
||||
<el-button slot="actions" icon="el-icon-refresh-left" :disabled="tableLoading" @click="resetSearch">重置</el-button>
|
||||
</search>
|
||||
</el-card>
|
||||
<el-card shadow="never">
|
||||
<table-tool :label="'数据中心人员数据(' + tableData.length + '条)'"></table-tool>
|
||||
<el-table :data="tableData" v-loading="tableLoading" empty-text="暂无数据" border>
|
||||
<el-table-column type="index" label="序号" width="70" fixed="left" :index="indexMethod"></el-table-column>
|
||||
<el-table-column v-for="column in columns" :key="column.key" :label="column.label" min-width="160" show-overflow-tooltip>
|
||||
<template slot-scope="{row}">{{formatValue(row[column.key] != null ? row[column.key] : row[column.alias])}}</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</div>
|
||||
|
||||
<script nonce="${cspNonce!}">
|
||||
new Vue({
|
||||
el: "#app",
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
pageDataUrl: "/platform/sys/data/user/query/queryData",
|
||||
pageForm: { zgh: "" },
|
||||
columns: [
|
||||
{ key: "ZGH", label: "工号", alias: "ID" },
|
||||
{ key: "XM", label: "姓名", alias: "" },
|
||||
{ key: "XBMC", label: "性别", alias: "XB" },
|
||||
{ key: "SJHM", label: "手机号码", alias: "YDDH" },
|
||||
{ key: "CSRQ", label: "出生日期", alias: "" },
|
||||
{ key: "DQZTMC", label: "在职状态", alias: "DQZT" },
|
||||
{ key: "LXRQ", label: "来校时间", alias: "LXNY" },
|
||||
{ key: "YRFSDM", label: "人员类型", alias: "RYLX" },
|
||||
{ key: "SZDW", label: "单位名称", alias: "" },
|
||||
{ key: "SZDWDM", label: "单位编码", alias: "SZDWH" },
|
||||
{ key: "ZZMMM", label: "政治面貌", alias: "" },
|
||||
{ key: "MZDM", label: "民族", alias: "MZM" },
|
||||
{ key: "ZGXLMC", label: "学历", alias: "" },
|
||||
{ key: "ZGXWMC", label: "学位", alias: "" },
|
||||
{ key: "ZYJSGWLBDMMC", label: "聘岗类型", alias: "" },
|
||||
{ key: "ZYJSZWDMMC", label: "职称", alias: "" },
|
||||
{ key: "BZLBDMMC", label: "编制类别", alias: "" },
|
||||
{ key: "SFSJT", label: "是否双肩挑", alias: "" },
|
||||
{ key: "SFZJLXDM", label: "证件类型", alias: "" },
|
||||
{ key: "SFZJH", label: "证件号码", alias: "" },
|
||||
{ key: "ZGXLDM", label: "最高学历代码", alias: "" },
|
||||
{ key: "XWDM", label: "最高学位代码", alias: "" },
|
||||
{ key: "BZLBDM", label: "编制类别代码", alias: "" },
|
||||
{ key: "ZYJSGWLBDM", label: "聘岗类型代码", alias: "" },
|
||||
{ key: "ZYJSZWDM", label: "专业技术职务代码", alias: "" },
|
||||
{ key: "DQZTDM", label: "当前状态代码", alias: "" }
|
||||
]
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
resetSearch() {
|
||||
this.pageForm.zgh = ""
|
||||
this.doSearch()
|
||||
},
|
||||
formatValue(value) {
|
||||
if (value == null) return ""
|
||||
return typeof value === "object" ? JSON.stringify(value) : value
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.pageData()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -42,6 +42,7 @@ layout("/layouts/platform.html"){
|
||||
<search-item label="人员类型">
|
||||
<dict-select v-model="pageForm.personType" code="USER_PERSON_TYPE" style="width: 100%"></dict-select>
|
||||
</search-item>
|
||||
<el-button slot="actions" icon="el-icon-refresh-left" @click="resetSearch">重置</el-button>
|
||||
</search>
|
||||
</el-card>
|
||||
|
||||
@@ -173,6 +174,14 @@ layout("/layouts/platform.html"){
|
||||
"member-all-change-info": MEMBER_ALL_CHANGE_INFO
|
||||
},
|
||||
methods: {
|
||||
resetSearch() {
|
||||
this.$set(this.pageForm, "userName", "")
|
||||
this.$set(this.pageForm, "loginName", "")
|
||||
this.$set(this.pageForm, "unitId", "")
|
||||
this.$set(this.pageForm, "userState", "")
|
||||
this.$set(this.pageForm, "personType", "")
|
||||
this.doSearch()
|
||||
},
|
||||
// 更新单位数据
|
||||
updateUnits() {
|
||||
if (this.unitUpdateLoading || this.updateLoading) return
|
||||
|
||||
@@ -177,7 +177,7 @@ layout("/layouts/platform.html"){
|
||||
getTreeData() {
|
||||
this.$set(this, "treeLoading", true)
|
||||
// tree 返回单位树数组;失败时保留现有内容,成功后按 ID 恢复当前单位。
|
||||
return this.$axios.post(loc() + "/tree").then((res) => {
|
||||
return this.$axios.post("/platform/sys/unit/tree").then((res) => {
|
||||
if (res.code !== 0 || !Array.isArray(res.data)) return
|
||||
const selectedId = this.currentTreeData?.id
|
||||
this.$set(this, "treeData", res.data)
|
||||
|
||||
@@ -0,0 +1,348 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
<!--#include("../fixedListLayout.css"){}#-->
|
||||
.fund-log-dialog .el-dialog { width: 94%; max-width: 1800px; height: 86vh; display: flex; flex-direction: column; }
|
||||
.fund-log-dialog .el-dialog__body { padding: 16px 24px 24px; flex: 1; min-height: 0; display: flex; flex-direction: column; }
|
||||
.fund-log-dialog .el-pagination { margin-top: 16px; text-align: right; flex: 0 0 auto; }
|
||||
.fund-import-dialog .el-dialog { max-width: calc(100vw - 32px); }
|
||||
.fund-import-dialog .el-dialog__body { padding: 16px 24px; max-height: 68vh; overflow-y: auto; }
|
||||
.fund-import-dialog .el-dialog__footer { border-top: 1px solid #ebeef5; }
|
||||
.fund-import-toolbar { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin: 16px 0 8px; }
|
||||
.fund-import-upload .el-upload,
|
||||
.fund-import-upload .el-upload-dragger { display: block; width: 100%; }
|
||||
.fund-import-upload .el-upload-dragger { height: 140px; }
|
||||
.fund-import-upload .el-icon-upload { margin: 16px 0 8px; }
|
||||
.fund-edit-dialog .el-dialog { max-width: calc(100vw - 32px); }
|
||||
.fund-edit-dialog .el-dialog__body { padding: 20px 28px; max-height: 65vh; overflow-y: auto; }
|
||||
.fund-edit-dialog .el-dialog__footer { padding: 16px 28px; border-top: 1px solid #ebeef5; }
|
||||
.fund-edit-dialog .el-alert { margin-bottom: 20px; }
|
||||
.fund-edit-section { grid-column: 1 / -1; font-weight: 600; color: #303133; border-bottom: 1px solid #ebeef5; padding-bottom: 10px; }
|
||||
.fund-edit-hint { color: #909399; font-size: 12px; line-height: 20px; }
|
||||
.fund-edit-difference { grid-column: 1 / -1; background: #fdf6ec; color: #b88230; border-radius: 4px; padding: 10px 14px; line-height: 22px; }
|
||||
.fund-edit-form { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 20px 24px; }
|
||||
.fund-edit-form .el-form-item { margin-bottom: 0; min-width: 0; }
|
||||
.fund-edit-form .el-form-item__label { padding-bottom: 6px; line-height: 24px; }
|
||||
.fund-edit-form .el-select,
|
||||
.fund-edit-form .el-date-editor,
|
||||
.fund-edit-form .el-input-number { width: 100%; }
|
||||
.fund-edit-form .fund-edit-wide { grid-column: 1 / -1; }
|
||||
.fund-edit-amount { display: flex; align-items: center; flex-wrap: wrap; gap: 16px; }
|
||||
.fund-edit-amount .el-input-number { flex: 1; min-width: 200px; }
|
||||
.fund-edit-calculated { display: block; padding: 0 15px; background: #f5f7fa; border: 1px solid #e4e7ed; border-radius: 4px; font-size: 20px; font-weight: 600; color: #303133; }
|
||||
.fund-adjust-dialog .el-dialog__header { padding-bottom: 8px; }
|
||||
.fund-adjust-dialog .el-dialog__body { padding: 12px 24px; }
|
||||
.fund-adjust-dialog .el-dialog__footer { padding: 12px 24px; }
|
||||
.fund-adjust-dialog .el-alert { margin-bottom: 12px; }
|
||||
.fund-adjust-dialog .fund-edit-form { gap: 10px 20px; }
|
||||
.fund-adjust-dialog .fund-edit-section { padding-bottom: 6px; }
|
||||
.fund-adjust-dialog .el-form-item__label { padding-bottom: 4px; line-height: 20px; }
|
||||
.fund-adjust-dialog .fund-edit-difference { padding: 6px 12px; }
|
||||
@media (max-width: 600px) {
|
||||
.fund-edit-form { grid-template-columns: minmax(0, 1fr); }
|
||||
}
|
||||
</style>
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava"><template>
|
||||
<div class="outlay-union-fixed-list-page">
|
||||
<el-card class="outlay-union-fixed-query-card" shadow="never">
|
||||
<search @search="doSearch">
|
||||
<search-item label="年度"><el-date-picker v-model="query.year" type="year" value-format="yyyy" :clearable="false" @change="doSearch"></el-date-picker></search-item>
|
||||
<search-item label="分工会"><el-select v-model="query.unionId" clearable filterable @change="doSearch"><el-option v-for="u in unionList" :key="u.id" :value="u.id" :label="u.name"></el-option></el-select></search-item>
|
||||
<search-item v-if="tab==='special'" label="专项名称"><el-input v-model="query.projectName" clearable placeholder="请输入专项名称" @keyup.enter.native="doSearch" @clear="doSearch"></el-input></search-item>
|
||||
<search-item v-if="tab==='base'" label="金额一致性">
|
||||
<el-select v-model="query.amountMatch" @change="doSearch">
|
||||
<el-option label="全部" value=""></el-option>
|
||||
<el-option label="一致" value="equal"></el-option>
|
||||
<el-option label="不一致" value="different"></el-option>
|
||||
</el-select>
|
||||
</search-item>
|
||||
</search>
|
||||
</el-card>
|
||||
<el-card class="outlay-union-fixed-list-card mt10" shadow="never">
|
||||
<el-tabs class="outlay-union-summary-table" v-model="tab" @tab-click="changeTab">
|
||||
<el-tab-pane label="年度基础经费" name="base"></el-tab-pane>
|
||||
<el-tab-pane label="专项经费" name="special"></el-tab-pane>
|
||||
<el-tab-pane label="下拨汇总" name="summary"></el-tab-pane>
|
||||
<el-tab-pane label="历史年度记录" name="history"></el-tab-pane>
|
||||
</el-tabs>
|
||||
<table-tool label="年度经费下拨">
|
||||
<el-button v-if="tab==='base'" size="small" type="primary" @click="generateVisible=true" :disabled="busy">生成年度基础经费</el-button>
|
||||
<el-button v-if="tab==='special'" size="small" type="primary" @click="addSpecial" :disabled="busy">新增专项经费</el-button>
|
||||
<el-button v-if="tab==='base' && isCurrentYear" size="small" type="danger" plain @click="resetBaseRecords" :disabled="busy || loading">重置分配记录</el-button>
|
||||
<el-button v-if="tab==='summary' || tab==='history'" size="small" type="primary" @click="doExport" :disabled="loading || busy">导出Excel</el-button>
|
||||
<el-button v-if="tab==='base'" size="small" type="primary" plain @click="openBaseImport" :disabled="busy || loading">Excel导入金额</el-button>
|
||||
</table-tool>
|
||||
<el-table :key="tab" ref="tableRef" :data="rows" :height="tableHeight" v-loading="loading" border row-key="id">
|
||||
<el-table-column v-if="tab!=='summary'" prop="year" label="年度" width="85"></el-table-column>
|
||||
<el-table-column prop="unionName" label="分工会" min-width="170"></el-table-column>
|
||||
<template v-if="tab==='base'">
|
||||
<el-table-column prop="memberCount" label="统计人数" width="100"></el-table-column>
|
||||
<el-table-column prop="standard" label="人均标准(元/年)" width="150"></el-table-column>
|
||||
<el-table-column prop="calculatedMoney" label="计算金额(元)" width="140"></el-table-column>
|
||||
</template>
|
||||
<el-table-column v-if="tab==='special'" prop="projectName" label="专项名称" min-width="150"></el-table-column>
|
||||
<template v-if="tab==='summary'">
|
||||
<el-table-column prop="baseMoney" label="基础经费已下拨(元)" min-width="160"></el-table-column>
|
||||
<el-table-column prop="specialMoney" label="专项经费已下拨(元)" min-width="160"></el-table-column>
|
||||
<el-table-column prop="totalMoney" label="合计经费下拨(元)" min-width="160"></el-table-column>
|
||||
</template>
|
||||
<template v-else-if="tab==='history'">
|
||||
<el-table-column label="分配项目" min-width="140"><template slot-scope="{row}"><dict-tag :options="dict.type.OUTLAY_QUARTERLY" :value="row.quarterly"></dict-tag></template></el-table-column>
|
||||
<el-table-column prop="allocateHeadMoney" label="分配前额度(元)" min-width="140"></el-table-column>
|
||||
<el-table-column prop="allocateMoney" label="分配金额(元)" min-width="140"></el-table-column>
|
||||
</template>
|
||||
<template v-else>
|
||||
<el-table-column prop="allocateMoney" label="实际下拨金额(元)" width="160"></el-table-column>
|
||||
<el-table-column prop="remark" label="说明" min-width="150" show-overflow-tooltip></el-table-column>
|
||||
<el-table-column prop="operatorName" label="操作人" width="100"></el-table-column>
|
||||
<el-table-column label="最后操作时间" width="165"><template slot-scope="{row}">{{time(row.updatedAt)}}</template></el-table-column>
|
||||
<el-table-column label="操作" fixed="right" width="220"><template slot-scope="{row}">
|
||||
<el-button type="text" :disabled="busy" @click="edit(row)">{{Number(row.status)===1?'调整':'编辑'}}</el-button>
|
||||
<el-button type="text" @click="showLogs(row)">操作记录</el-button>
|
||||
</template></el-table-column>
|
||||
</template>
|
||||
</el-table>
|
||||
<div class="el-pagination-container" v-if="tab!=='summary'">
|
||||
<el-pagination :current-page.sync="query.pageNumber" :page-size.sync="query.pageSize" :total="total" layout="total, sizes, prev, pager, next" @current-change="load" @size-change="doSearch"></el-pagination>
|
||||
</div>
|
||||
</el-card>
|
||||
</div>
|
||||
<el-dialog title="生成年度基础经费" :visible.sync="generateVisible" width="550px" :close-on-click-modal="false">
|
||||
<el-alert title="按所选年度、分工会生成并计入年度预算。已有记录不覆盖,人数沿用会员统计口径并保存快照。" type="info" :closable="false"></el-alert>
|
||||
<el-form label-width="130px" class="mt10">
|
||||
<el-form-item label="年度">{{query.year}}</el-form-item>
|
||||
<el-form-item label="分工会">{{selectedUnionName}}</el-form-item>
|
||||
<el-form-item label="人均标准(元/年)"><el-input-number v-model="standard" :min="0" :max="99999999.99" :precision="2"></el-input-number></el-form-item>
|
||||
</el-form>
|
||||
<span slot="footer"><el-button @click="generateVisible=false" :disabled="busy">取消</el-button><el-button type="primary" :loading="busy" @click="generate">生成</el-button></span>
|
||||
</el-dialog>
|
||||
<el-dialog title="Excel导入年度基础经费金额" :visible.sync="baseImportVisible" width="780px" top="6vh" class="fund-import-dialog" :close-on-click-modal="false" :show-close="!busy" destroy-on-close>
|
||||
<el-alert :title="query.year+'年 / '+selectedUnionName" type="info" show-icon :closable="false">
|
||||
请在模板中仅保留需调整的分工会并填写分配额度。导入会更新已有基础经费记录并同步年度预算。任一行未匹配到唯一有效记录时,整批导入失败。
|
||||
</el-alert>
|
||||
<div class="fund-import-toolbar">
|
||||
<strong>导入文件</strong>
|
||||
<el-button size="small" @click="downloadBaseImportTemplate">下载模板</el-button>
|
||||
</div>
|
||||
<el-upload class="fund-import-upload" action="/platform/outlay/outlayManage/unionAllocate/readImportExcel" drag accept=".xls,.xlsx" :limit="1"
|
||||
:before-upload="validateBaseImportFile" :on-exceed="onBaseImportExceed"
|
||||
:on-success="onBaseImportPreview" :on-error="onBaseImportError" :on-remove="clearBaseImportPreview" :disabled="busy">
|
||||
<i class="el-icon-upload"></i>
|
||||
<div class="el-upload__text">将 Excel 文件拖到此处,或<em>点击上传</em></div>
|
||||
<div slot="tip" class="el-upload__tip">支持 .xls、.xlsx,每次上传一个文件</div>
|
||||
</el-upload>
|
||||
<el-form label-position="top" class="mt10">
|
||||
<el-form-item label="调整说明" required>
|
||||
<el-input v-model="baseImportRemark" type="textarea" :rows="2" maxlength="1000" show-word-limit></el-input>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<el-table v-if="baseImportRows.length" :data="baseImportRows" max-height="300" border>
|
||||
<el-table-column prop="unionCode" label="工会编码" width="120"></el-table-column>
|
||||
<el-table-column prop="unionName" label="分工会" min-width="180"></el-table-column>
|
||||
<el-table-column prop="allocateMoney" label="实际下拨金额(元)" min-width="150"></el-table-column>
|
||||
<el-table-column label="校验结果" min-width="150"><template slot-scope="{row}">{{row.errMsg || '通过'}}</template></el-table-column>
|
||||
</el-table>
|
||||
<span slot="footer">
|
||||
<el-button @click="baseImportVisible=false" :disabled="busy">取消</el-button>
|
||||
<el-button type="primary" @click="saveBaseImport" :loading="busy" :disabled="!baseImportRows.length">确认导入</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
<el-dialog :title="form.status===1?'调整经费':'编辑经费'" :visible.sync="editVisible" width="860px" class="fund-edit-dialog" :class="{'fund-adjust-dialog': form.status===1}" top="6vh" :close-on-click-modal="false" :show-close="!busy">
|
||||
<el-alert v-if="form.status===1" title="保存后将按新旧金额差额调整年度预算,请填写调整原因。" type="warning" show-icon :closable="false"></el-alert>
|
||||
<el-alert v-else title="保存后金额将计入年度预算。" type="info" show-icon :closable="false"></el-alert>
|
||||
<el-form class="fund-edit-form" label-position="top">
|
||||
<div class="fund-edit-section">基础信息 · {{tab==='base'?'年度基础经费':'专项经费'}}</div>
|
||||
<el-form-item label="年度"><el-date-picker v-model="form.year" type="year" value-format="yyyy" :clearable="false" :disabled="!isNew"></el-date-picker></el-form-item>
|
||||
<el-form-item label="分工会"><el-select v-model="form.unionId" filterable :disabled="!isNew"><el-option v-for="u in unionList" :key="u.id" :value="u.id" :label="u.name"></el-option></el-select></el-form-item>
|
||||
<div class="fund-edit-section">金额核算</div>
|
||||
<template v-if="tab==='base'">
|
||||
<el-form-item label="统计人数"><el-input :value="form.memberCount" readonly><template slot="append">人</template></el-input></el-form-item>
|
||||
<el-form-item label="人均标准(元/年)"><el-input-number v-model="form.standard" :min="0" :max="99999999.99" :precision="2" :disabled="form.status===1"></el-input-number></el-form-item>
|
||||
<el-form-item label="计算金额(元)"><span class="fund-edit-calculated">{{calculated}} <small>元</small></span><div class="fund-edit-hint">统计人数 × 人均年度标准</div></el-form-item>
|
||||
</template>
|
||||
<el-form-item v-else label="专项名称" class="fund-edit-wide" required><el-input v-model="form.projectName" maxlength="100" placeholder="如:一会一品、评优奖励"></el-input></el-form-item>
|
||||
<el-form-item label="实际下拨金额(元)" :class="{'fund-edit-wide': tab!=='base'}" required><div class="fund-edit-amount"><el-input-number v-model="form.allocateMoney" :min="0" :max="99999999.99" :precision="2" controls-position="right"></el-input-number><el-button v-if="tab==='base' && form.status===0" type="text" @click="form.allocateMoney=Number(calculated)">使用计算金额</el-button></div></el-form-item>
|
||||
<div v-if="form.status===1 || amountDifference!==0" class="fund-edit-difference">
|
||||
<template v-if="form.status===1">原下拨金额:{{Number(originalAllocateMoney).toFixed(2)}} 元;本次调整:{{amountDifference>0?'+':''}}{{amountDifference.toFixed(2)}} 元。</template>
|
||||
<template v-else>实际下拨金额较计算金额{{amountDifference>0?'增加':'减少'}} {{Math.abs(amountDifference).toFixed(2)}} 元,请填写原因。</template>
|
||||
</div>
|
||||
<el-form-item :label="form.status===1?'调整原因':'说明'" class="fund-edit-wide" :required="remarkRequired"><el-input v-model="form.remark" type="textarea" :rows="3" maxlength="1000" show-word-limit :placeholder="remarkRequired?'请填写本次金额调整的具体原因':'可填写经费用途或其他说明'"></el-input></el-form-item>
|
||||
</el-form>
|
||||
<span slot="footer"><el-button @click="editVisible=false" :disabled="busy">取消</el-button><el-button type="primary" :loading="busy" @click="save">{{form.status===1?'保存调整':'保存'}}</el-button></span>
|
||||
</el-dialog>
|
||||
<el-dialog title="经费操作记录" :visible.sync="logsVisible" width="94%" top="4vh" class="fund-log-dialog">
|
||||
<el-table :data="logs" height="100%" style="flex: 1; min-height: 0;" border v-loading="logsLoading">
|
||||
<el-table-column prop="action" label="操作" width="100"></el-table-column>
|
||||
<el-table-column prop="operatorName" label="操作人" width="100"></el-table-column>
|
||||
<el-table-column label="时间" width="165"><template slot-scope="{row}">{{time(row.createdAt)}}</template></el-table-column>
|
||||
<el-table-column label="操作前" min-width="180"><template slot-scope="{row}">{{snapshot(row.beforeData)}}</template></el-table-column>
|
||||
<el-table-column label="操作后" min-width="180"><template slot-scope="{row}">{{snapshot(row.afterData)}}</template></el-table-column>
|
||||
<el-table-column prop="remark" label="说明" min-width="140"></el-table-column>
|
||||
</el-table>
|
||||
<el-pagination :current-page.sync="logPage" :page-size="10" :total="logTotal" layout="total,prev,pager,next" @current-change="loadLogs"></el-pagination>
|
||||
</el-dialog>
|
||||
</template></guava>
|
||||
</div>
|
||||
<script nonce="${cspNonce!}">
|
||||
<!--#include("../fixedListLayout.js"){}#-->
|
||||
new Vue({
|
||||
el: '#app', store,
|
||||
mixins: [OUTLAY_UNION_FIXED_LIST_MIXIN],
|
||||
dicts: ['OUTLAY_QUARTERLY'],
|
||||
data() { return {
|
||||
tab: 'base', query: {year: this.$moment().format('YYYY'), unionId: '', projectName: '', amountMatch: '', pageNumber: 1, pageSize: 10},
|
||||
unionList: [], rows: [], total: 0, loading: false, busy: false, requestSequence: 0,
|
||||
standard: 800, generateVisible: false, editVisible: false, isNew: false, form: {}, originalAllocateMoney: 0,
|
||||
baseImportVisible: false, baseImportRows: [], baseImportRemark: '',
|
||||
logsVisible: false, logsLoading: false, logs: [], logPage: 1, logTotal: 0, logRecord: null
|
||||
}},
|
||||
computed: {
|
||||
isCurrentYear() { return this.query.year===this.$moment().format('YYYY') },
|
||||
calculated() { return ((this.form.memberCount || 0) * (this.form.standard || 0)).toFixed(2) },
|
||||
amountDifference() {
|
||||
const amount=Number(this.form.allocateMoney)
|
||||
if (!Number.isFinite(amount)) return 0
|
||||
const reference=this.form.status===1?Number(this.originalAllocateMoney):(this.tab==='base'?Number(this.calculated):amount)
|
||||
return Number((amount-reference).toFixed(2))
|
||||
},
|
||||
remarkRequired() { return this.form.status===1 || (this.tab==='base' && this.amountDifference!==0) },
|
||||
amountMatchScope() {
|
||||
if (!this.query.amountMatch) return ''
|
||||
return this.query.amountMatch==='equal'?' / 金额一致':' / 金额不一致'
|
||||
},
|
||||
selectedUnionName() { const u=this.unionList.find(u=>u.id===this.query.unionId); return u?u.name:'全部分工会' }
|
||||
},
|
||||
methods: {
|
||||
time(value) { return value?this.$moment(Number(value)).format('YYYY-MM-DD HH:mm:ss'):'—' },
|
||||
snapshot(value) {
|
||||
if (!value) return '—'
|
||||
try { const v=JSON.parse(value); return v.year+'年 / '+(v.memberCount==null?(v.projectName || ''):v.memberCount+'人 × '+v.standard+'元,计算 '+v.calculatedMoney+'元')+' / 实际 '+v.allocateMoney+'元 / '+(Number(v.status)===2?'已重置':Number(v.status)===1?'已下拨':'待下拨') }
|
||||
catch(e) { return value }
|
||||
},
|
||||
doExport() {
|
||||
if (!this.query.year) { this.$message.warning('请选择年度'); return }
|
||||
const params='type='+encodeURIComponent(this.tab)+'&year='+encodeURIComponent(this.query.year)+'&unionId='+encodeURIComponent(this.query.unionId || '')
|
||||
window.open('/platform/outlay/outlayManage/unionAllocate/annual/doExport?'+params)
|
||||
},
|
||||
async request(action, data) {
|
||||
const resp=await this.$axios.post('/platform/outlay/outlayManage/unionAllocate/annual/'+action, data)
|
||||
if (resp.code!==0) { this.$message.error(resp.msg || '操作失败'); throw new Error(resp.msg) }
|
||||
return resp
|
||||
},
|
||||
changeTab() {
|
||||
this.rows=[]
|
||||
this.total=0
|
||||
this.doSearch()
|
||||
this.updateOutlayUnionTableHeight()
|
||||
},
|
||||
doSearch() { this.query.pageNumber=1; this.load() },
|
||||
async load() {
|
||||
const sequence=++this.requestSequence
|
||||
this.loading=true
|
||||
try {
|
||||
let resp
|
||||
if (this.tab==='history') resp=await this.$axios.post('/platform/outlay/outlayManage/unionAllocate/pageData', this.query)
|
||||
else resp=await this.request(this.tab==='summary'?'summary':'pageData', Object.assign({},this.query,{type:this.tab}))
|
||||
if (sequence!==this.requestSequence) return
|
||||
if (resp.code===0) { this.rows=this.tab==='summary'?(resp.data || []):(resp.data.list || []); this.total=this.tab==='summary'?0:resp.data.totalCount }
|
||||
} catch(e) { if(sequence===this.requestSequence) this.rows=[] }
|
||||
finally { if(sequence===this.requestSequence) { this.loading=false; this.updateOutlayUnionTableHeight() } }
|
||||
},
|
||||
async generate() {
|
||||
this.busy=true
|
||||
try { const resp=await this.request('generate',Object.assign({},this.query,{standard:this.standard})); this.$message.success(resp.msg); this.generateVisible=false; this.doSearch() }
|
||||
catch(e) {} finally { this.busy=false }
|
||||
},
|
||||
edit(row) {
|
||||
this.isNew=false
|
||||
this.originalAllocateMoney=Number(row.allocateMoney)
|
||||
this.form=Object.assign({},row,{year:String(row.year), status:Number(row.status), allocateMoney:Number(row.allocateMoney)})
|
||||
if (this.tab==='base') Object.assign(this.form,{memberCount:Number(row.memberCount),standard:Number(row.standard)})
|
||||
this.editVisible=true
|
||||
},
|
||||
async addSpecial() {
|
||||
this.busy=true
|
||||
try { const resp=await this.request('newId',{}); this.isNew=true; this.form={id:resp.data,year:this.query.year,unionId:this.query.unionId,projectName:'',allocateMoney:0,remark:'',status:0}; this.editVisible=true }
|
||||
catch(e) {} finally { this.busy=false }
|
||||
},
|
||||
async save() {
|
||||
if (!this.form.year || !this.form.unionId || this.form.allocateMoney==null) { this.$message.warning('请填写年度、分工会和金额'); return }
|
||||
if (this.busy) return
|
||||
if (!Number.isFinite(this.form.allocateMoney) || this.form.allocateMoney<0) { this.$message.warning('请输入有效的下拨金额'); return }
|
||||
if (this.tab==='base' && (!Number.isFinite(this.form.standard) || this.form.standard<0)) { this.$message.warning('请输入有效的人均标准'); return }
|
||||
if (this.remarkRequired && !(this.form.remark || '').trim()) { this.$message.warning('请填写金额调整原因'); return }
|
||||
this.busy=true
|
||||
const payload={type:this.tab,id:this.form.id,year:this.form.year,unionId:this.form.unionId,allocateMoney:this.form.allocateMoney,remark:this.form.remark,version:this.form.version}
|
||||
if (this.tab==='base') payload.standard=this.form.standard
|
||||
else payload.projectName=this.form.projectName
|
||||
try { await this.request('save',payload); this.$message.success('保存成功'); this.editVisible=false; this.doSearch() }
|
||||
catch(e) {} finally { this.busy=false }
|
||||
},
|
||||
openBaseImport() {
|
||||
this.clearBaseImportPreview()
|
||||
this.baseImportRemark=''
|
||||
this.baseImportVisible=true
|
||||
},
|
||||
downloadBaseImportTemplate() {
|
||||
window.open('/platform/outlay/outlayManage/unionAllocate/downloadImportTemplate')
|
||||
},
|
||||
clearBaseImportPreview() { this.baseImportRows=[] },
|
||||
validateBaseImportFile(file) {
|
||||
if (/\.(xls|xlsx)$/i.test(file.name)) return true
|
||||
this.$message.warning('请上传 .xls 或 .xlsx 文件')
|
||||
return false
|
||||
},
|
||||
onBaseImportExceed() {
|
||||
this.$message.warning('每次只能上传一个 Excel 文件,更换时请先移除已选文件')
|
||||
},
|
||||
onBaseImportPreview(resp) {
|
||||
this.clearBaseImportPreview()
|
||||
if (resp.code===0) this.baseImportRows=resp.data || []
|
||||
else this.$message.error(resp.msg || 'Excel读取失败')
|
||||
},
|
||||
onBaseImportError() {
|
||||
this.clearBaseImportPreview()
|
||||
this.$message.error('Excel上传失败')
|
||||
},
|
||||
async saveBaseImport() {
|
||||
if (this.busy || !this.baseImportRows.length) return
|
||||
if (this.baseImportRows.some(row=>row.errMsg)) { this.$message.warning('请修正校验未通过的记录后重新上传'); return }
|
||||
if (!this.baseImportRemark.trim()) { this.$message.warning('请填写调整说明'); return }
|
||||
this.busy=true
|
||||
try {
|
||||
const resp=await this.request('importBaseAmounts',{
|
||||
year:this.query.year,unionId:this.query.unionId || '',
|
||||
data:JSON.stringify(this.baseImportRows),remark:this.baseImportRemark.trim()
|
||||
})
|
||||
this.$message.success(resp.msg)
|
||||
this.baseImportVisible=false
|
||||
this.doSearch()
|
||||
} catch(e) {} finally { this.busy=false }
|
||||
},
|
||||
async resetBaseRecords() {
|
||||
if (this.busy || !this.isCurrentYear) return
|
||||
const params={year:this.query.year,unionId:this.query.unionId || '',amountMatch:this.query.amountMatch}
|
||||
const scope=params.year+'年 / '+this.selectedUnionName+this.amountMatchScope
|
||||
this.busy=true
|
||||
try {
|
||||
await this.$confirm('确认重置【'+scope+'】全部分页中的基础经费分配记录?已计入预算的金额将扣回,重置后可重新生成。','重置分配记录',{type:'warning',confirmButtonText:'确认重置'})
|
||||
const resp=await this.request('resetBaseRecords',params)
|
||||
this.$message.success(resp.msg)
|
||||
this.load()
|
||||
} catch(e) {} finally { this.busy=false }
|
||||
},
|
||||
showLogs(row) { this.logRecord={id:row.id,type:this.tab}; this.logPage=1; this.logsVisible=true; this.loadLogs() },
|
||||
async loadLogs() {
|
||||
this.logsLoading=true
|
||||
try { const resp=await this.request('logs',Object.assign({},this.logRecord,{pageNumber:this.logPage,pageSize:10})); this.logs=resp.data.list || []; this.logTotal=resp.data.totalCount }
|
||||
catch(e) {} finally { this.logsLoading=false }
|
||||
}
|
||||
},
|
||||
created() { this.$businessTool.listUnion().then(data=>{this.unionList=data}); this.load() }
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -61,52 +61,19 @@ layout("/layouts/platform.html"){
|
||||
{{formatMoney(row.beginMoney)}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" header-align="center" :label="pageForm.year + '年会费收入'">
|
||||
<el-table-column
|
||||
align="center"
|
||||
header-align="center"
|
||||
label="1-4月会费"
|
||||
prop="feeJanApr"
|
||||
min-width="120">
|
||||
<template v-slot="{row}">
|
||||
{{formatMoney(row.feeJanApr)}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
align="center"
|
||||
header-align="center"
|
||||
label="5-8月会费"
|
||||
prop="feeMayAug"
|
||||
min-width="120">
|
||||
<template v-slot="{row}">
|
||||
{{formatMoney(row.feeMayAug)}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
align="center"
|
||||
header-align="center"
|
||||
label="9-12月会费"
|
||||
prop="feeSepDec"
|
||||
min-width="120">
|
||||
<template v-slot="{row}">
|
||||
{{formatMoney(row.feeSepDec)}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="年度基础经费" prop="baseMoney" min-width="120">
|
||||
<template v-slot="{row}">{{formatMoney(row.baseMoney)}}</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="专项经费" prop="specialMoney" min-width="120">
|
||||
<template v-slot="{row}">{{formatMoney(row.specialMoney)}}</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="合计下拨" prop="incomeMoney" min-width="120">
|
||||
<template v-slot="{row}">{{formatMoney(row.incomeMoney)}}</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
align="center"
|
||||
header-align="center"
|
||||
label="评优奖励"
|
||||
prop="awardMoney"
|
||||
min-width="120">
|
||||
<template v-slot="{row}">
|
||||
{{formatMoney(row.awardMoney)}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
align="center"
|
||||
header-align="center"
|
||||
label="1-12月支出"
|
||||
label="年度支出"
|
||||
prop="usedMoney"
|
||||
min-width="120">
|
||||
<template v-slot="{row}">
|
||||
@@ -141,19 +108,16 @@ layout("/layouts/platform.html"){
|
||||
<el-table-column align="center" header-align="center" label="年初数" prop="beginMoney" min-width="120">
|
||||
<template v-slot="{row}">{{summaryValue('beginMoney', row)}}</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="1-4月会费" prop="feeJanApr" min-width="120">
|
||||
<template v-slot="{row}">{{summaryValue('feeJanApr', row)}}</template>
|
||||
<el-table-column align="center" header-align="center" label="年度基础经费" prop="baseMoney" min-width="120">
|
||||
<template v-slot="{row}">{{summaryValue('baseMoney', row)}}</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="5-8月会费" prop="feeMayAug" min-width="120">
|
||||
<template v-slot="{row}">{{summaryValue('feeMayAug', row)}}</template>
|
||||
<el-table-column align="center" header-align="center" label="专项经费" prop="specialMoney" min-width="120">
|
||||
<template v-slot="{row}">{{summaryValue('specialMoney', row)}}</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="9-12月会费" prop="feeSepDec" min-width="120">
|
||||
<template v-slot="{row}">{{summaryValue('feeSepDec', row)}}</template>
|
||||
<el-table-column align="center" header-align="center" label="合计下拨" prop="incomeMoney" min-width="120">
|
||||
<template v-slot="{row}">{{summaryValue('incomeMoney', row)}}</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="评优奖励" prop="awardMoney" min-width="120">
|
||||
<template v-slot="{row}">{{summaryValue('awardMoney', row)}}</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="本年累计支出" prop="usedMoney" min-width="120">
|
||||
<el-table-column align="center" header-align="center" label="年度支出" prop="usedMoney" min-width="120">
|
||||
<template v-slot="{row}">{{summaryValue('usedMoney', row)}}</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="经费余额" prop="remainMoney" min-width="120">
|
||||
|
||||
@@ -4,22 +4,15 @@ let OUTLAY_MANAGE_UNION_QUARTERLY_ALLOCATE = {
|
||||
`
|
||||
<div>
|
||||
<template>
|
||||
<table-tool label="分配记录"></table-tool>
|
||||
<table-tool label="年度已下拨记录"></table-tool>
|
||||
<el-table :data="tableData" style="width: 100%" row-key="id" class="vi-table">
|
||||
<el-table-column type="index" label="序号" width="80px"></el-table-column>
|
||||
<el-table-column label="分配项目" prop="quarterly">
|
||||
<template v-slot="{row}">
|
||||
<dict-tag :options="dict.type.OUTLAY_QUARTERLY"
|
||||
:value="row.quarterly"></dict-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="年初数" prop="allocateHeadMoney"></el-table-column>
|
||||
<el-table-column label="经费额度" prop="allocateMoney"></el-table-column>
|
||||
<el-table-column label="分配项目" prop="projectName"></el-table-column>
|
||||
<el-table-column label="实际下拨金额(元)" prop="allocateMoney"></el-table-column>
|
||||
</el-table>
|
||||
</template>
|
||||
</div>
|
||||
`,
|
||||
dicts: ["OUTLAY_QUARTERLY"],
|
||||
data() {
|
||||
return {
|
||||
rowData: {},
|
||||
@@ -29,11 +22,12 @@ let OUTLAY_MANAGE_UNION_QUARTERLY_ALLOCATE = {
|
||||
methods: {
|
||||
open(row) {
|
||||
this.rowData = row
|
||||
this.$axios.post("/platform/outlay/outlayManage/unionUseDetail/queryQuarterlyList", {
|
||||
this.tableData = []
|
||||
this.$axios.post("/platform/outlay/outlayManage/unionUseDetail/queryAnnualAllocateList", {
|
||||
year: row.year,
|
||||
unionId: row.unionId
|
||||
}).then(resp => {
|
||||
if (resp.code === 0) {
|
||||
if (this.rowData === row && resp.code === 0) {
|
||||
this.tableData = resp.data
|
||||
}
|
||||
})
|
||||
|
||||
@@ -52,6 +52,21 @@ layout("/layouts/platform.html"){
|
||||
.payment-info-table .el-form-item {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.invoice-detail-dialog {
|
||||
max-width: calc(100vw - 32px);
|
||||
}
|
||||
|
||||
.invoice-detail-dialog .el-dialog__body {
|
||||
max-height: min(80vh, calc(95vh - 128px));
|
||||
overflow-y: auto;
|
||||
padding: 12px 24px;
|
||||
}
|
||||
|
||||
.invoice-detail-dialog .el-form-item__label {
|
||||
line-height: 22px;
|
||||
padding-bottom: 6px;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div id="app" v-cloak>
|
||||
@@ -266,7 +281,7 @@ layout("/layouts/platform.html"){
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="报销金额" v-if="isManualReimburseAmount">
|
||||
<el-form-item label="报销金额" prop="money">
|
||||
<el-input v-model="formData.money" placeholder="请输入报销金额,最多两位小数"></el-input>
|
||||
<el-input :value="formData.money" @input="updateReimburseAmount" placeholder="请输入报销金额,最多两位小数"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="所属协会"
|
||||
@@ -605,11 +620,11 @@ layout("/layouts/platform.html"){
|
||||
<div>
|
||||
<div class="invoice-toolbar-title">发票明细列表</div>
|
||||
<div class="invoice-summary-tip">
|
||||
{{ isManualReimburseAmount ? '发票选填;有发票时报销金额不得超过发票总额,无发票仍可提交。' : '发票选填;无发票时按支付信息汇总报销金额。' }}上传后须通过验真,每条明细对应一张发票图片或单页 PDF。
|
||||
提交时至少上传一张发票,上传后须通过验真。每条明细对应一张发票图片或单页 PDF。
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<el-tag type="info">发票选填,上传须验真</el-tag>
|
||||
<el-tag type="info">提交时必填</el-tag>
|
||||
<el-button @click="openInvoiceDialog('add')" plain type="primary"
|
||||
style="margin-left: 12px">新增发票
|
||||
</el-button>
|
||||
@@ -677,10 +692,11 @@ layout("/layouts/platform.html"){
|
||||
:title="invoiceDialogMode === 'edit' ? '编辑发票明细' : '新增发票明细'"
|
||||
:visible.sync="invoiceDialogVisible"
|
||||
append-to-body
|
||||
width="820px">
|
||||
<el-form :model="detailForm" :rules="detailRules" label-position="right"
|
||||
label-suffix=":" label-width="120px" ref="invoiceDetailForm">
|
||||
<el-row :gutter="30">
|
||||
custom-class="invoice-detail-dialog"
|
||||
top="5vh"
|
||||
width="1000px">
|
||||
<el-form :model="detailForm" :rules="detailRules" label-position="top" ref="invoiceDetailForm">
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="24">
|
||||
<el-form-item label="发票文件" prop="invoiceFiles">
|
||||
<file-upload
|
||||
@@ -700,45 +716,45 @@ layout("/layouts/platform.html"){
|
||||
</div>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-col :xs="24" :sm="12">
|
||||
<el-form-item label="发票号码" prop="invoiceNo">
|
||||
<el-input placeholder="验真后自动回填" v-model="detailForm.invoiceNo" readonly></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-col :xs="24" :sm="12">
|
||||
<el-form-item label="开票日期">
|
||||
<el-input placeholder="识别后自动回填" v-model="detailForm.invoiceDate" readonly></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-col :xs="24" :sm="12">
|
||||
<el-form-item label="销售方信息名称" prop="sellerName">
|
||||
<el-input placeholder="验真后自动回填" v-model="detailForm.sellerName" readonly></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :sm="12">
|
||||
<el-form-item label="项目名称" prop="itemName">
|
||||
<el-input placeholder="验真后自动回填" v-model="detailForm.itemName" readonly></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :sm="8">
|
||||
<el-form-item label="价税合计" prop="invoiceAmount">
|
||||
<el-input-number :controls="false" :min="0" :precision="2"
|
||||
placeholder="验真后自动回填" style="width: 100%"
|
||||
v-model="detailForm.invoiceAmount" disabled></el-input-number>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-col :xs="24" :sm="8">
|
||||
<el-form-item label="税前金额">
|
||||
<el-input-number :controls="false" :precision="2" style="width: 100%"
|
||||
v-model="detailForm.amountWithoutTax" disabled></el-input-number>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-col :xs="24" :sm="8">
|
||||
<el-form-item label="税额">
|
||||
<el-input-number :controls="false" :precision="2" style="width: 100%"
|
||||
v-model="detailForm.taxAmount" disabled></el-input-number>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="销售方信息名称" prop="sellerName">
|
||||
<el-input placeholder="验真后自动回填" v-model="detailForm.sellerName" readonly></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="项目名称" prop="itemName">
|
||||
<el-input placeholder="验真后自动回填" v-model="detailForm.itemName" readonly></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="备注" prop="remark">
|
||||
<el-input :autosize="{ minRows: 3, maxRows: 5}"
|
||||
@@ -1647,7 +1663,10 @@ layout("/layouts/platform.html"){
|
||||
return false
|
||||
}
|
||||
const invoiceDetails = this.formData.invoiceDetails || []
|
||||
// 发票可不上传;已经添加的发票仍须填写完整并沿用验真流程。
|
||||
if (!invoiceDetails.length) {
|
||||
this.$message.warning("提交前请至少上传一张发票")
|
||||
return false
|
||||
}
|
||||
for (let i = 0; i < invoiceDetails.length; i++) {
|
||||
const currentDetail = invoiceDetails[i]
|
||||
if (!currentDetail.invoiceFiles || currentDetail.invoiceFiles.length === 0) {
|
||||
@@ -1710,6 +1729,11 @@ layout("/layouts/platform.html"){
|
||||
this.syncLegacyPaymentFields(submitData.paymentDetails, submitData)
|
||||
return submitData
|
||||
},
|
||||
updateReimburseAmount(value) {
|
||||
this.$set(this.formData, "money", value)
|
||||
const details = this.formData.paymentDetails || []
|
||||
if (details.length === 1) this.$set(details[0], "money", value)
|
||||
},
|
||||
// 金额输入允许编辑中的空值和末尾小数点;非法字符或超出两位小数时恢复原值,避免改变金额含义。
|
||||
inputPaymentMoney(row, value) {
|
||||
const previous = row.money
|
||||
@@ -1831,18 +1855,8 @@ layout("/layouts/platform.html"){
|
||||
// 保存
|
||||
onSave() {
|
||||
if (this.formLoading || this.recognizingInvoice) return
|
||||
if (!this.validateInvoiceDetailsBeforeSubmit()) {
|
||||
this.$set(this, "activeTabName", "invoice")
|
||||
return
|
||||
}
|
||||
this.rebuildInvoiceSummary()
|
||||
this.normalizeFundBalance()
|
||||
const paymentDetails = this.preparePaymentDetailsForSubmit()
|
||||
// 保存草稿也必须填写完整支付信息,避免非法金额和空明细入库。
|
||||
if (!this.validatePaymentDetailsBeforeSubmit(paymentDetails)) {
|
||||
this.$set(this, "activeTabName", "invoice")
|
||||
return
|
||||
}
|
||||
this.$confirm("您确定保存吗?", "提示", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
@@ -1850,7 +1864,7 @@ layout("/layouts/platform.html"){
|
||||
}).then(() => {
|
||||
if (this.formLoading) return
|
||||
this.$set(this, "formLoading", true)
|
||||
this.$axios.post("/platform/unionReimburse/apply/save", {data: JSON.stringify(this.buildSubmitFormData(paymentDetails))}).then(res => {
|
||||
this.$axios.post("/platform/unionReimburse/apply/save", {data: JSON.stringify(this.buildSubmitFormData())}).then(res => {
|
||||
if (res.code === 0) {
|
||||
this.$message.success(res.msg)
|
||||
commonUtil.pjaxPush("/platform/unionReimburse/mine/index")
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
const unionReimburseInfo = {
|
||||
template: /*language=HTML*/ `
|
||||
<div>
|
||||
<div class="process-title">
|
||||
申请信息
|
||||
<div class="process-title" style="display: flex; align-items: center; justify-content: space-between; gap: 12px;">
|
||||
<span>申请信息</span>
|
||||
<el-link type="primary" @click="openChart">点击查看流程图</el-link>
|
||||
</div>
|
||||
|
||||
@@ -380,7 +380,12 @@ const unionReimburseInfo = {
|
||||
if (!this.row || !this.$refs.snakerChartRef) {
|
||||
return
|
||||
}
|
||||
this.$refs.snakerChartRef.onOpenFull(this.row.instanceProcessDefineId, this.row.instanceId)
|
||||
const {instanceProcessDefineId, instanceId} = this.row
|
||||
if (!instanceProcessDefineId || !instanceId) {
|
||||
this.$message.warning("暂无流程图信息")
|
||||
return
|
||||
}
|
||||
this.$refs.snakerChartRef.onOpenFull(instanceProcessDefineId, instanceId)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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"),
|
||||