Merge branch 'main' of https://dd3skj.picp.vip/JyuHsin/zhgh_cug_v4
This commit is contained in:
+1
@@ -153,6 +153,7 @@ public class ActivitySportsApplyUserServiceImpl extends BaseServiceImpl<Activity
|
||||
school.applyType,
|
||||
school.image,
|
||||
school.eventNotification,
|
||||
school.activityGroupId,
|
||||
(SELECT count( 1 ) FROM activity_school_apply app WHERE app.activityId = school.id AND app.`status` = 2 ) apply_num,
|
||||
(SELECT count( 1 ) FROM activity_school_apply app WHERE app.activityId = school.id AND ( app.applyUser = @userid OR app.userId = @userid )) > 0 applyed,
|
||||
(SELECT COUNT(1) FROM activity_school_apply app WHERE app.activityId=school.id AND app.unionId=@unionId AND app.unionLeader=TRUE) LeaderCount,
|
||||
|
||||
@@ -8,11 +8,9 @@ import com.budwk.app.base.service.BaseService;
|
||||
import com.budwk.app.bpm.enums.BpmProcessInstanceStatusEnum;
|
||||
import com.budwk.app.bpm.enums.BpmProcessTaskStatusEnum;
|
||||
import com.budwk.app.flow.enums.ProcessInstanceStateEnum;
|
||||
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 com.budwk.app.web.commons.auth.utils.AuthUtil;
|
||||
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
|
||||
import com.budwk.app.zhgh.club.model.ClubUser;
|
||||
import com.budwk.app.zhgh.club.model.SysClub;
|
||||
import com.budwk.app.zhgh.club.service.SysClubService;
|
||||
import org.nutz.dao.Cnd;
|
||||
@@ -38,8 +36,6 @@ public class ClubCommonController {
|
||||
|
||||
@Inject
|
||||
private SysClubService sysClubService;
|
||||
@Inject
|
||||
private SysRoleService sysRoleService;
|
||||
|
||||
@At
|
||||
@SaCheckLogin
|
||||
@@ -62,9 +58,9 @@ public class ClubCommonController {
|
||||
public Result listClubByRole() {
|
||||
Cnd cnd = Cnd.NEW();
|
||||
if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) {
|
||||
Sys_role sysRole = sysRoleService.getByCode(RoleConstant.CLUB_PRESIDENT);
|
||||
List<Sys_user_role> userRoles = sysClubService.dao().query(Sys_user_role.class, Cnd.where("userId", "=", SecurityUtil.getUserId()).and("roleId", "=", sysRole.getId()));
|
||||
List<String> myClubId = userRoles.stream().map(Sys_user_role::getClubId).toList();
|
||||
// 报销申请只允许选择当前用户已加入的协会,避免看到未加入的协会数据。
|
||||
List<ClubUser> clubUsers = sysClubService.dao().query(ClubUser.class, Cnd.where("userId", "=", SecurityUtil.getUserId()));
|
||||
List<String> myClubId = clubUsers.stream().map(ClubUser::getClubId).distinct().toList();
|
||||
cnd.and("c.id", "in", myClubId);
|
||||
}
|
||||
cnd.and("inst.state","=",ProcessInstanceStateEnum.FINISHED.getCode());
|
||||
|
||||
+59
-4
@@ -3,8 +3,12 @@ package com.budwk.app.zhgh.dayofficework.outlay.outlayManage.service;
|
||||
import com.budwk.app.base.result.Result;
|
||||
import com.budwk.app.base.service.BaseService;
|
||||
import com.budwk.app.zhgh.dayofficework.outlay.outlayManage.union.model.OutLayAllocateUnion;
|
||||
import com.budwk.app.zhgh.dayofficework.outlay.outlayManage.union.vo.OutlayUnionAllocateImportVo;
|
||||
import org.apache.poi.ss.usermodel.Workbook;
|
||||
import org.nutz.mvc.upload.TempFile;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 分工会季度额度分配服务。
|
||||
@@ -36,12 +40,63 @@ public interface OutlayManageUnionAllocateService extends BaseService<OutLayAllo
|
||||
Result doBatchAllocate(BigDecimal allocateMoney, Integer quarterly, Integer year);
|
||||
|
||||
/**
|
||||
* 重置当前季度的分配记录。
|
||||
* 判断某年某季度是否已经做过额度分配。
|
||||
*
|
||||
* <p>重置时会先回滚 outlay_manage_union.totalQuota,
|
||||
* 再将当前季度的 outlay_allocate_union 记录标记删除。</p>
|
||||
* <p>只要当前季度记录中存在分配额度大于 0 的有效记录,
|
||||
* 就认为该季度已经分配过额度,前端据此决定是否提示再次分配。</p>
|
||||
*
|
||||
* @param quarterly 要检查的季度,例如 1/2/3/4
|
||||
* @param year 要检查的年份
|
||||
* @return true 已分配过;false 未分配
|
||||
*/
|
||||
boolean hasAllocated(Integer quarterly, Integer year);
|
||||
|
||||
/**
|
||||
* 解析导入文件并返回预览数据。
|
||||
*
|
||||
* @param file Excel 文件
|
||||
* @return 解析后的预览数据
|
||||
*/
|
||||
List<OutlayUnionAllocateImportVo> readImportExcel(TempFile file);
|
||||
|
||||
/**
|
||||
* 根据导入数据按分工会逐条分配季度额度。
|
||||
*
|
||||
* @param importList 导入预览数据
|
||||
* @param quarterly 当前季度
|
||||
* @param year 当前年度
|
||||
* @return 导入分配结果
|
||||
*/
|
||||
Result doImportAllocate(List<OutlayUnionAllocateImportVo> importList, Integer quarterly, Integer year);
|
||||
|
||||
/**
|
||||
* 导出分工会额度导入模板。
|
||||
*
|
||||
* @return 模板工作簿
|
||||
*/
|
||||
Workbook exportImportTemplate();
|
||||
|
||||
/**
|
||||
* 重置指定年度季度的分配记录。
|
||||
*
|
||||
* <p>页面支持切换年度和季度,所以重置动作必须严格使用前端当前选择值,
|
||||
* 不能再按系统当前自然季度处理,否则会出现页面筛选季度和实际重置季度不一致的问题。</p>
|
||||
*
|
||||
* @param quarterly 要重置的季度,例如 1/2/3/4
|
||||
* @param year 要重置的年份
|
||||
* @return Result 成功时返回 success;失败时返回错误信息
|
||||
*/
|
||||
Result deleteAllocateRecord();
|
||||
Result deleteAllocateRecord(Integer quarterly, Integer year);
|
||||
|
||||
/**
|
||||
* 按指定年度季度生成分工会预算记录。
|
||||
*
|
||||
* <p>生成前会先校验该年度季度是否已存在有效记录;
|
||||
* 若已存在,则直接提示前端需要先重置后再重新生成。</p>
|
||||
*
|
||||
* @param quarterly 要生成的季度,例如 1/2/3/4
|
||||
* @param year 要生成的年份
|
||||
* @return Result 成功时返回 success;失败时返回错误信息
|
||||
*/
|
||||
Result doAllocateRecord(Integer quarterly, Integer year);
|
||||
}
|
||||
|
||||
+249
-9
@@ -1,20 +1,36 @@
|
||||
package com.budwk.app.zhgh.dayofficework.outlay.outlayManage.service.impl;
|
||||
|
||||
import cn.afterturn.easypoi.excel.ExcelExportUtil;
|
||||
import cn.afterturn.easypoi.excel.ExcelImportUtil;
|
||||
import cn.afterturn.easypoi.excel.entity.ExportParams;
|
||||
import cn.afterturn.easypoi.excel.entity.ImportParams;
|
||||
import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
|
||||
import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
|
||||
import cn.hutool.core.io.FileUtil;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
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.sys.models.Sys_union;
|
||||
import com.budwk.app.zhgh.dayofficework.outlay.outlayManage.service.OutlayManageUnionAllocateService;
|
||||
import com.budwk.app.zhgh.dayofficework.outlay.outlayManage.union.model.OutLayAllocateUnion;
|
||||
import com.budwk.app.zhgh.dayofficework.outlay.outlayManage.union.model.OutlayManageUnion;
|
||||
import com.budwk.app.zhgh.dayofficework.outlay.outlayManage.union.vo.OutlayUnionAllocateImportVo;
|
||||
import org.apache.poi.ss.usermodel.Workbook;
|
||||
import org.nutz.dao.Chain;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Dao;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.lang.Lang;
|
||||
import org.nutz.mvc.upload.TempFile;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* 分工会季度额度分配实现。
|
||||
@@ -44,6 +60,10 @@ public class OutlayManageUnionAllocateServiceImpl extends BaseServiceImpl<OutLay
|
||||
|
||||
@Override
|
||||
public Result doBatchAllocate(BigDecimal allocateMoney, Integer quarterly, Integer year) {
|
||||
Result validateResult = validateCurrentQuarterOperation(quarterly);
|
||||
if (validateResult != null) {
|
||||
return validateResult;
|
||||
}
|
||||
List<OutLayAllocateUnion> allocateUnionList = dao().query(OutLayAllocateUnion.class,
|
||||
Cnd.where(OutLayAllocateUnion::getQuarterly, "=", quarterly)
|
||||
.and(OutLayAllocateUnion::getYear, "=", year)
|
||||
@@ -58,11 +78,155 @@ public class OutlayManageUnionAllocateServiceImpl extends BaseServiceImpl<OutLay
|
||||
}
|
||||
|
||||
@Override
|
||||
public Result deleteAllocateRecord() {
|
||||
int currentQuarter = getCurrentQuarter();
|
||||
public boolean hasAllocated(Integer quarterly, Integer year) {
|
||||
if (quarterly == null || year == null) {
|
||||
return false;
|
||||
}
|
||||
int count = dao().count(OutLayAllocateUnion.class,
|
||||
Cnd.where(OutLayAllocateUnion::getQuarterly, "=", quarterly)
|
||||
.and(OutLayAllocateUnion::getYear, "=", year)
|
||||
.and(OutLayAllocateUnion::getDelFlag, "=", false)
|
||||
.and("allocateMoney", ">", BigDecimal.ZERO));
|
||||
return count > 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<OutlayUnionAllocateImportVo> readImportExcel(TempFile file) {
|
||||
String extName = FileUtil.extName(file.getFile());
|
||||
if (!"xlsx".equalsIgnoreCase(extName) && !"xls".equalsIgnoreCase(extName)) {
|
||||
throw Lang.makeThrow("请上传xlsx或xls格式文件");
|
||||
}
|
||||
List<OutlayUnionAllocateImportVo> importList = ExcelImportUtil.importExcel(file.getFile(),
|
||||
OutlayUnionAllocateImportVo.class, new ImportParams());
|
||||
List<Sys_union> unionList = dao().query(Sys_union.class, Cnd.NEW());
|
||||
Map<String, Sys_union> unionMap = new HashMap<>();
|
||||
for (Sys_union union : unionList) {
|
||||
unionMap.put(union.getUnionCode(), union);
|
||||
}
|
||||
Set<String> duplicateUnionCodeSet = new LinkedHashSet<>();
|
||||
Set<String> existUnionCodeSet = new LinkedHashSet<>();
|
||||
for (OutlayUnionAllocateImportVo item : importList) {
|
||||
if (StrUtil.isBlank(item.getUnionCode())) {
|
||||
continue;
|
||||
}
|
||||
if (!existUnionCodeSet.add(item.getUnionCode())) {
|
||||
duplicateUnionCodeSet.add(item.getUnionCode());
|
||||
}
|
||||
}
|
||||
for (int i = 0; i < importList.size(); i++) {
|
||||
OutlayUnionAllocateImportVo item = importList.get(i);
|
||||
item.setRowNum(i + 2);
|
||||
if (StrUtil.isBlank(item.getUnionCode())) {
|
||||
item.setErrMsg("工会编码不能为空");
|
||||
continue;
|
||||
}
|
||||
if (item.getAllocateMoney() == null) {
|
||||
item.setErrMsg("分配额度不能为空");
|
||||
continue;
|
||||
}
|
||||
if (item.getAllocateMoney().compareTo(BigDecimal.ZERO) < 0) {
|
||||
item.setErrMsg("分配额度不能小于0");
|
||||
continue;
|
||||
}
|
||||
Sys_union union = unionMap.get(item.getUnionCode());
|
||||
if (Lang.isEmpty(union)) {
|
||||
item.setErrMsg("工会编码不存在");
|
||||
continue;
|
||||
}
|
||||
item.setUnionName(union.getName());
|
||||
if (duplicateUnionCodeSet.contains(item.getUnionCode())) {
|
||||
item.setErrMsg("工会编码重复");
|
||||
}
|
||||
}
|
||||
return importList;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Result doImportAllocate(List<OutlayUnionAllocateImportVo> importList, Integer quarterly, Integer year) {
|
||||
Result validateResult = validateCurrentQuarterOperation(quarterly);
|
||||
if (validateResult != null) {
|
||||
return validateResult;
|
||||
}
|
||||
if (importList == null || importList.isEmpty()) {
|
||||
return Result.error("请先上传导入数据");
|
||||
}
|
||||
List<OutLayAllocateUnion> allocateUnionList = dao().query(OutLayAllocateUnion.class,
|
||||
Cnd.where(OutLayAllocateUnion::getQuarterly, "=", currentQuarter)
|
||||
.and(OutLayAllocateUnion::getYear, "=", DateUtil.thisYear())
|
||||
Cnd.where(OutLayAllocateUnion::getQuarterly, "=", quarterly)
|
||||
.and(OutLayAllocateUnion::getYear, "=", year)
|
||||
.and(OutLayAllocateUnion::getDelFlag, "=", false));
|
||||
if (allocateUnionList == null || allocateUnionList.isEmpty()) {
|
||||
return Result.error("当前季度没有分配记录!");
|
||||
}
|
||||
List<Sys_union> unionList = dao().query(Sys_union.class, Cnd.NEW());
|
||||
Map<String, Sys_union> unionMap = new HashMap<>();
|
||||
for (Sys_union union : unionList) {
|
||||
unionMap.put(union.getUnionCode(), union);
|
||||
}
|
||||
Map<String, OutLayAllocateUnion> allocateUnionMap = new HashMap<>();
|
||||
for (OutLayAllocateUnion allocateUnion : allocateUnionList) {
|
||||
allocateUnionMap.put(allocateUnion.getUnionId(), allocateUnion);
|
||||
}
|
||||
List<String> errorList = new ArrayList<>();
|
||||
for (OutlayUnionAllocateImportVo item : importList) {
|
||||
if (StrUtil.isBlank(item.getUnionCode())) {
|
||||
errorList.add("第" + item.getRowNum() + "行:工会编码不能为空");
|
||||
continue;
|
||||
}
|
||||
if (item.getAllocateMoney() == null) {
|
||||
errorList.add("第" + item.getRowNum() + "行:分配额度不能为空");
|
||||
continue;
|
||||
}
|
||||
if (item.getAllocateMoney().compareTo(BigDecimal.ZERO) < 0) {
|
||||
errorList.add("第" + item.getRowNum() + "行:分配额度不能小于0");
|
||||
continue;
|
||||
}
|
||||
if (StrUtil.isNotBlank(item.getErrMsg())) {
|
||||
errorList.add("第" + item.getRowNum() + "行:" + item.getErrMsg());
|
||||
continue;
|
||||
}
|
||||
Sys_union union = unionMap.get(item.getUnionCode());
|
||||
if (Lang.isEmpty(union)) {
|
||||
errorList.add("第" + item.getRowNum() + "行:工会编码不存在");
|
||||
continue;
|
||||
}
|
||||
if (!allocateUnionMap.containsKey(union.getId())) {
|
||||
errorList.add("第" + item.getRowNum() + "行:当前季度未生成该分工会分配记录");
|
||||
}
|
||||
}
|
||||
if (!errorList.isEmpty()) {
|
||||
return Result.error(String.join(";", errorList));
|
||||
}
|
||||
for (OutlayUnionAllocateImportVo item : importList) {
|
||||
Sys_union union = unionMap.get(item.getUnionCode());
|
||||
OutLayAllocateUnion allocateUnion = allocateUnionMap.get(union.getId());
|
||||
// 导入分配与手工分配保持同一套金额同步规则,确保季度表和年度预算表数据一致。
|
||||
applyAllocateMoney(allocateUnion, item.getAllocateMoney());
|
||||
}
|
||||
return Result.success("导入分配成功");
|
||||
}
|
||||
|
||||
@Override
|
||||
public Workbook exportImportTemplate() {
|
||||
List<ExcelExportEntity> entityList = new ArrayList<>();
|
||||
entityList.add(new ExcelExportEntity("工会编码", "unionCode", 20));
|
||||
entityList.add(new ExcelExportEntity("分配额度", "allocateMoney", 20));
|
||||
ExportParams exportParams = new ExportParams();
|
||||
exportParams.setType(ExcelType.XSSF);
|
||||
return ExcelExportUtil.exportExcel(exportParams, entityList, new ArrayList<>());
|
||||
}
|
||||
|
||||
@Override
|
||||
public Result deleteAllocateRecord(Integer quarterly, Integer year) {
|
||||
if (quarterly == null || year == null) {
|
||||
return Result.error("参数错误!");
|
||||
}
|
||||
Result validateResult = validateCurrentQuarterOperation(quarterly);
|
||||
if (validateResult != null) {
|
||||
return validateResult;
|
||||
}
|
||||
List<OutLayAllocateUnion> allocateUnionList = dao().query(OutLayAllocateUnion.class,
|
||||
Cnd.where(OutLayAllocateUnion::getQuarterly, "=", quarterly)
|
||||
.and(OutLayAllocateUnion::getYear, "=", year)
|
||||
.and(OutLayAllocateUnion::getDelFlag, "=", false));
|
||||
if (allocateUnionList == null || allocateUnionList.isEmpty()) {
|
||||
return Result.error("当前季度还未分配,无法重置!");
|
||||
@@ -73,12 +237,38 @@ public class OutlayManageUnionAllocateServiceImpl extends BaseServiceImpl<OutLay
|
||||
}
|
||||
|
||||
dao().update(OutLayAllocateUnion.class, Chain.make("delFlag", true),
|
||||
Cnd.where(OutLayAllocateUnion::getQuarterly, "=", currentQuarter)
|
||||
.and(OutLayAllocateUnion::getYear, "=", DateUtil.thisYear())
|
||||
Cnd.where(OutLayAllocateUnion::getQuarterly, "=", quarterly)
|
||||
.and(OutLayAllocateUnion::getYear, "=", year)
|
||||
.and(OutLayAllocateUnion::getDelFlag, "=", false));
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Result doAllocateRecord(Integer quarterly, Integer year) {
|
||||
if (quarterly == null || year == null) {
|
||||
return Result.error("参数错误!");
|
||||
}
|
||||
Result validateResult = validateCurrentQuarterOperation(quarterly);
|
||||
if (validateResult != null) {
|
||||
return validateResult;
|
||||
}
|
||||
int count = dao().count(OutLayAllocateUnion.class,
|
||||
Cnd.where(OutLayAllocateUnion::getQuarterly, "=", quarterly)
|
||||
.and(OutLayAllocateUnion::getYear, "=", year)
|
||||
.and(OutLayAllocateUnion::getDelFlag, "=", false));
|
||||
if (count > 0) {
|
||||
return Result.error("当前季度已分配,如需重新分配请点击重置分配记录!");
|
||||
}
|
||||
|
||||
// 第一季度需要承接上一年度剩余额度,其余季度承接当年预算额度,确保生成记录时的分配前额度准确。
|
||||
Integer sourceYear = quarterly == 1 ? year - 1 : year;
|
||||
List<OutlayManageUnion> outlayManageUnionList = dao().query(OutlayManageUnion.class,
|
||||
Cnd.where(OutlayManageUnion::getYear, "=", sourceYear));
|
||||
List<OutLayAllocateUnion> insertList = buildAllocateUnionList(outlayManageUnionList, quarterly, year);
|
||||
insert(insertList);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 按“先回退旧额度,再写入新额度”的方式同步季度记录和年度预算表。
|
||||
*
|
||||
@@ -89,7 +279,7 @@ public class OutlayManageUnionAllocateServiceImpl extends BaseServiceImpl<OutLay
|
||||
BigDecimal oldAllocateMoney = defaultValue(allocateUnion.getAllocateMoney());
|
||||
OutlayManageUnion manageUnion = dao().fetch(OutlayManageUnion.class,
|
||||
Cnd.where(OutlayManageUnion::getUnionId, "=", allocateUnion.getUnionId())
|
||||
.and(OutlayManageUnion::getYear, "=", DateUtil.thisYear()));
|
||||
.and(OutlayManageUnion::getYear, "=", allocateUnion.getYear()));
|
||||
|
||||
if (Lang.isEmpty(manageUnion)) {
|
||||
manageUnion = buildManageUnion(allocateUnion, newAllocateMoney);
|
||||
@@ -115,7 +305,7 @@ public class OutlayManageUnionAllocateServiceImpl extends BaseServiceImpl<OutLay
|
||||
private void rollbackAllocateMoney(OutLayAllocateUnion allocateUnion) {
|
||||
OutlayManageUnion manageUnion = dao().fetch(OutlayManageUnion.class,
|
||||
Cnd.where(OutlayManageUnion::getUnionId, "=", allocateUnion.getUnionId())
|
||||
.and(OutlayManageUnion::getYear, "=", DateUtil.thisYear()));
|
||||
.and(OutlayManageUnion::getYear, "=", allocateUnion.getYear()));
|
||||
if (Lang.isEmpty(manageUnion)) {
|
||||
return;
|
||||
}
|
||||
@@ -135,7 +325,7 @@ public class OutlayManageUnionAllocateServiceImpl extends BaseServiceImpl<OutLay
|
||||
private OutlayManageUnion buildManageUnion(OutLayAllocateUnion allocateUnion, BigDecimal allocateMoney) {
|
||||
Sys_union union = dao().fetch(Sys_union.class, allocateUnion.getUnionId());
|
||||
OutlayManageUnion manageUnion = new OutlayManageUnion();
|
||||
manageUnion.setYear(DateUtil.thisYear());
|
||||
manageUnion.setYear(allocateUnion.getYear());
|
||||
manageUnion.setUnionId(allocateUnion.getUnionId());
|
||||
manageUnion.setTotalQuota(defaultValue(allocateUnion.getAllocateHeadMoney()).add(allocateMoney));
|
||||
manageUnion.setUsedQuota(BigDecimal.ZERO);
|
||||
@@ -164,4 +354,54 @@ public class OutlayManageUnionAllocateServiceImpl extends BaseServiceImpl<OutLay
|
||||
private int getCurrentQuarter() {
|
||||
return DateUtil.month(DateUtil.date()) / 3 + 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* 预算季度记录相关操作只能针对当前自然季度执行。
|
||||
*
|
||||
* @param quarterly 前端传入的目标季度
|
||||
* @return Result 不允许操作时返回错误结果;允许操作时返回 null
|
||||
*/
|
||||
private Result validateCurrentQuarterOperation(Integer quarterly) {
|
||||
if (quarterly == null) {
|
||||
return Result.error("参数错误!");
|
||||
}
|
||||
int currentQuarter = getCurrentQuarter();
|
||||
if (!quarterly.equals(currentQuarter)) {
|
||||
return Result.error("当前仅允许操作第" + currentQuarter + "季度数据,请切换后再操作!");
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 按目标年度季度初始化要生成的分工会分配记录。
|
||||
*
|
||||
* @param outlayManageUnionList 用于计算“分配前额度”的年度预算数据
|
||||
* @param quarterly 目标季度
|
||||
* @param year 目标年度
|
||||
* @return List<OutLayAllocateUnion> 待插入的季度分配记录
|
||||
*/
|
||||
private List<OutLayAllocateUnion> buildAllocateUnionList(List<OutlayManageUnion> outlayManageUnionList, Integer quarterly, Integer year) {
|
||||
List<Sys_union> unionList = dao().query(Sys_union.class, Cnd.NEW());
|
||||
List<OutLayAllocateUnion> insertList = new ArrayList<>();
|
||||
for (Sys_union union : unionList) {
|
||||
OutLayAllocateUnion allocateUnion = new OutLayAllocateUnion();
|
||||
allocateUnion.setYear(year);
|
||||
allocateUnion.setQuarterly(quarterly);
|
||||
allocateUnion.setUnionId(union.getId());
|
||||
allocateUnion.setAllocateMoney(BigDecimal.ZERO);
|
||||
OutlayManageUnion outlayManageUnion = outlayManageUnionList.stream()
|
||||
.filter(o -> o.getUnionId().equals(union.getId()))
|
||||
.findFirst()
|
||||
.orElse(null);
|
||||
if (Lang.isNotEmpty(outlayManageUnion)) {
|
||||
BigDecimal surplusMoney = defaultValue(outlayManageUnion.getTotalQuota())
|
||||
.subtract(defaultValue(outlayManageUnion.getUsedQuota()));
|
||||
allocateUnion.setAllocateHeadMoney(surplusMoney);
|
||||
} else {
|
||||
allocateUnion.setAllocateHeadMoney(BigDecimal.ZERO);
|
||||
}
|
||||
insertList.add(allocateUnion);
|
||||
}
|
||||
return insertList;
|
||||
}
|
||||
}
|
||||
|
||||
+39
-22
@@ -1,6 +1,7 @@
|
||||
package com.budwk.app.zhgh.dayofficework.outlay.outlayManage.service.impl;
|
||||
|
||||
import com.budwk.app.base.service.impl.BaseServiceImpl;
|
||||
import com.budwk.app.zhgh.dayofficework.outlay.outlayManage.club.model.OutlayManageClub;
|
||||
import com.budwk.app.zhgh.dayofficework.outlay.outlayManage.model.OutlayUseDetail;
|
||||
import com.budwk.app.zhgh.dayofficework.outlay.outlayManage.school.model.OutlayManageSchool;
|
||||
import com.budwk.app.zhgh.dayofficework.outlay.outlayManage.service.OutlayUseDetailService;
|
||||
@@ -21,49 +22,65 @@ public class OutlayUseDetailServiceImpl extends BaseServiceImpl<OutlayUseDetail>
|
||||
|
||||
@Override
|
||||
public void doDeleteDetail(String id, String outlayType) {
|
||||
//更新预算表的金额
|
||||
updateOutlayManage(id, null,outlayType,false);
|
||||
//更新完删除
|
||||
// 先回滚对应预算的已使用额度,再删除详情记录。
|
||||
updateOutlayManage(id, null, outlayType, false);
|
||||
delete(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void doEditDetail(OutlayUseDetail outlayUseDetail,String outlayType) {
|
||||
updateOutlayManage(outlayUseDetail.getId(), outlayUseDetail,outlayType,true);
|
||||
public void doEditDetail(OutlayUseDetail outlayUseDetail, String outlayType) {
|
||||
// 编辑详情时需要先回退旧金额,再叠加新金额,保证预算台账准确。
|
||||
updateOutlayManage(outlayUseDetail.getId(), outlayUseDetail, outlayType, true);
|
||||
update(outlayUseDetail);
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 更新预算表
|
||||
* 同步预算主表的已使用额度,保证校工会、分工会、协会三类台账口径一致。
|
||||
*
|
||||
* @param id
|
||||
* @param outlayType
|
||||
* @param id 详情主键
|
||||
* @param outlayUseDetail 编辑后的详情对象,删除场景可为空
|
||||
* @param outlayType 预算类型:school/union/club
|
||||
* @param isEdit 是否为编辑场景
|
||||
*/
|
||||
private void updateOutlayManage(String id, OutlayUseDetail outlayUseDetail,String outlayType,Boolean isEdit) {
|
||||
//找到是哪一条的预算详情
|
||||
private void updateOutlayManage(String id, OutlayUseDetail outlayUseDetail, String outlayType, Boolean isEdit) {
|
||||
OutlayUseDetail detail = fetch(id);
|
||||
//拿到预算详情的调整金额
|
||||
if (outlayType.equals("school")) {
|
||||
//找到预算分配的记录
|
||||
if (detail == null) {
|
||||
return;
|
||||
}
|
||||
if ("school".equals(outlayType)) {
|
||||
OutlayManageSchool manageSchool = dao().fetch(OutlayManageSchool.class, detail.getOutlayManageId());
|
||||
if (manageSchool == null) {
|
||||
return;
|
||||
}
|
||||
manageSchool.setUsedQuota(manageSchool.getUsedQuota().subtract(detail.getAdjustMoney()));
|
||||
if (isEdit){
|
||||
//如果是修改,就先减去原来的值在加上现在新的值
|
||||
if (Boolean.TRUE.equals(isEdit) && outlayUseDetail != null) {
|
||||
manageSchool.setUsedQuota(manageSchool.getUsedQuota().add(outlayUseDetail.getAdjustMoney()));
|
||||
}
|
||||
update(manageSchool);
|
||||
} else if (outlayType.equals("union")) {
|
||||
return;
|
||||
}
|
||||
if ("union".equals(outlayType)) {
|
||||
OutlayManageUnion manageUnion = dao().fetch(OutlayManageUnion.class, detail.getOutlayManageId());
|
||||
if (manageUnion == null) {
|
||||
return;
|
||||
}
|
||||
manageUnion.setUsedQuota(manageUnion.getUsedQuota().subtract(detail.getAdjustMoney()));
|
||||
if (isEdit){
|
||||
//如果是修改,就先减去原来的值在加上现在新的值
|
||||
if (Boolean.TRUE.equals(isEdit) && outlayUseDetail != null) {
|
||||
manageUnion.setUsedQuota(manageUnion.getUsedQuota().add(outlayUseDetail.getAdjustMoney()));
|
||||
}
|
||||
update(manageUnion);
|
||||
return;
|
||||
}
|
||||
if ("club".equals(outlayType)) {
|
||||
OutlayManageClub manageClub = dao().fetch(OutlayManageClub.class, detail.getOutlayManageId());
|
||||
if (manageClub == null) {
|
||||
return;
|
||||
}
|
||||
manageClub.setUsedQuota(manageClub.getUsedQuota().subtract(detail.getAdjustMoney()));
|
||||
if (Boolean.TRUE.equals(isEdit) && outlayUseDetail != null) {
|
||||
manageClub.setUsedQuota(manageClub.getUsedQuota().add(outlayUseDetail.getAdjustMoney()));
|
||||
}
|
||||
update(manageClub);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
+73
-63
@@ -1,20 +1,19 @@
|
||||
package com.budwk.app.zhgh.dayofficework.outlay.outlayManage.union.controller;
|
||||
|
||||
import com.budwk.app.base.utils.CommonDownloadUtil;
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.budwk.app.base.annotation.SLog;
|
||||
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.sys.models.Sys_union;
|
||||
import com.budwk.app.zhgh.dayofficework.outlay.outlayManage.service.OutlayManageUnionAllocateService;
|
||||
import com.budwk.app.zhgh.dayofficework.outlay.outlayManage.union.model.OutLayAllocateUnion;
|
||||
import com.budwk.app.zhgh.dayofficework.outlay.outlayManage.union.model.OutlayManageUnion;
|
||||
import com.budwk.app.zhgh.dayofficework.outlay.outlayManage.union.vo.OutlayUnionAllocateImportVo;
|
||||
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.aop.interceptor.ioc.TransAop;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Sqls;
|
||||
@@ -22,13 +21,18 @@ import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.ioc.aop.Aop;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.json.Json;
|
||||
import org.nutz.lang.Lang;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
import org.nutz.mvc.annotation.Param;
|
||||
import org.nutz.mvc.annotation.POST;
|
||||
import org.nutz.mvc.upload.TempFile;
|
||||
import org.nutz.mvc.upload.UploadAdaptor;
|
||||
import org.nutz.mvc.annotation.AdaptBy;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
@@ -107,76 +111,82 @@ public class OutlayManageUnionAllocateController {
|
||||
return outlayManageUnionAllocateService.doBatchAllocate(allocateMoney, quarterly, year);
|
||||
}
|
||||
|
||||
@At
|
||||
@ApiOperation("校验当前季度是否已分配额度")
|
||||
@SaCheckPermission("outlay.outlayManage.union.allocate")
|
||||
public Result hasAllocated(@Param("quarterly") Integer quarterly,
|
||||
@Param("year") Integer year) {
|
||||
if (quarterly == null || year == null) {
|
||||
return Result.error("参数错误!");
|
||||
}
|
||||
return Result.success(outlayManageUnionAllocateService.hasAllocated(quarterly, year));
|
||||
}
|
||||
|
||||
@At
|
||||
@POST
|
||||
@AdaptBy(type = UploadAdaptor.class, args = {"ioc:fileUpload"})
|
||||
@ApiOperation("读取导入分配Excel")
|
||||
@SaCheckPermission("outlay.outlayManage.union.allocate")
|
||||
public Result readImportExcel(TempFile file) {
|
||||
try {
|
||||
return Result.success(outlayManageUnionAllocateService.readImportExcel(file));
|
||||
} catch (Exception e) {
|
||||
log.error("读取分工会额度导入文件失败", e);
|
||||
return Result.error(e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@At
|
||||
@ApiOperation("导入分配分工会额度")
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@SLog(tag = "分工会预算-季度预算分配", msg = "导入分配分工会额度")
|
||||
@SaCheckPermission("outlay.outlayManage.union.allocate")
|
||||
public Result doImportAllocate(String data,
|
||||
@Param("quarterly") Integer quarterly,
|
||||
@Param("year") Integer year) {
|
||||
if (StrUtil.isBlank(data) || quarterly == null || year == null) {
|
||||
return Result.error("参数错误!");
|
||||
}
|
||||
List<OutlayUnionAllocateImportVo> importList = Json.fromJsonAsList(OutlayUnionAllocateImportVo.class, data);
|
||||
return outlayManageUnionAllocateService.doImportAllocate(importList, quarterly, year);
|
||||
}
|
||||
|
||||
@At
|
||||
@Ok("void")
|
||||
@ApiOperation("下载导入分配模板")
|
||||
@SaCheckPermission("outlay.outlayManage.union.allocate")
|
||||
public void downloadImportTemplate(HttpServletResponse response) {
|
||||
try {
|
||||
Workbook workbook = outlayManageUnionAllocateService.exportImportTemplate();
|
||||
CommonDownloadUtil.download("分工会额度导入模板.xlsx", workbook, response);
|
||||
} catch (Exception e) {
|
||||
log.error("下载分工会额度导入模板失败", e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@ApiOperation("重置预算季度记录")
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@SLog(tag = "分工会预算-季度预算分配", msg = "重置预算季度记录")
|
||||
@SaCheckPermission("outlay.outlayManage.union.allocate")
|
||||
public Result deleteAllocateRecord() {
|
||||
return outlayManageUnionAllocateService.deleteAllocateRecord();
|
||||
public Result deleteAllocateRecord(@Param("quarterly") Integer quarterly,
|
||||
@Param("year") Integer year) {
|
||||
if (quarterly == null || year == null) {
|
||||
return Result.error("参数错误!");
|
||||
}
|
||||
return outlayManageUnionAllocateService.deleteAllocateRecord(quarterly, year);
|
||||
}
|
||||
|
||||
@At
|
||||
@ApiOperation("预算季度记录生成")
|
||||
@SLog(tag = "分工会预算-季度预算分配", msg = "生成了预算分配记录")
|
||||
@SaCheckPermission("outlay.outlayManage.union.allocate")
|
||||
public Result doAllocateRecord() {
|
||||
int quarter = DateUtil.month(DateUtil.date()) / 3 + 1;
|
||||
// 查询当前季度
|
||||
int count = baseService.dao().count(OutLayAllocateUnion.class, Cnd.where(OutLayAllocateUnion::getQuarterly, "=", quarter)
|
||||
.and(OutLayAllocateUnion::getYear, "=", DateUtil.thisYear())
|
||||
.and(OutLayAllocateUnion::getDelFlag, "=", 0));
|
||||
if (count > 0) {
|
||||
return Result.error("当前季度已分配,如需重新分配请点击重置分配记录!");
|
||||
public Result doAllocateRecord(@Param("quarterly") Integer quarterly,
|
||||
@Param("year") Integer year) {
|
||||
if (quarterly == null || year == null) {
|
||||
return Result.error("参数错误!");
|
||||
}
|
||||
|
||||
List<OutlayManageUnion> outlayManageUnionList;
|
||||
if (quarter == 1) {
|
||||
//如果是第一季度,查询去年剩余额度
|
||||
outlayManageUnionList = baseService.dao().query(OutlayManageUnion.class,
|
||||
Cnd.where(OutlayManageUnion::getYear, "=", DateUtil.thisYear() - 1));
|
||||
} else {
|
||||
//非第一季度
|
||||
outlayManageUnionList = baseService.dao().query(OutlayManageUnion.class,
|
||||
Cnd.where(OutlayManageUnion::getYear, "=", DateUtil.thisYear()));
|
||||
}
|
||||
List<OutLayAllocateUnion> insertList = this.initOutLayAllocateUnion(outlayManageUnionList);
|
||||
baseService.insert(insertList);
|
||||
return Result.success();
|
||||
return outlayManageUnionAllocateService.doAllocateRecord(quarterly, year);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 初始化需要添加的数据
|
||||
*
|
||||
* @param outlayManageUnionList
|
||||
* @return
|
||||
*/
|
||||
public List<OutLayAllocateUnion> initOutLayAllocateUnion(List<OutlayManageUnion> outlayManageUnionList) {
|
||||
int quarter = DateUtil.month(DateUtil.date()) / 3 + 1;
|
||||
|
||||
List<Sys_union> unionList = baseService.dao().query(Sys_union.class, Cnd.NEW());
|
||||
List<OutLayAllocateUnion> insertList = new ArrayList<>();
|
||||
for (Sys_union union : unionList) {
|
||||
OutLayAllocateUnion allocateUnion = new OutLayAllocateUnion();
|
||||
allocateUnion.setYear(DateUtil.thisYear());
|
||||
allocateUnion.setQuarterly(quarter);
|
||||
allocateUnion.setUnionId(union.getId());
|
||||
allocateUnion.setAllocateMoney(BigDecimal.ZERO);
|
||||
//根据院级工会ID查询
|
||||
OutlayManageUnion outlayManageUnion = outlayManageUnionList.stream().filter(o -> o.getUnionId().equals(union.getId())).findFirst().orElse(null);
|
||||
if (Lang.isNotEmpty(outlayManageUnion)) {
|
||||
BigDecimal surplusMoney = outlayManageUnion.getTotalQuota().subtract(outlayManageUnion.getUsedQuota());
|
||||
allocateUnion.setAllocateHeadMoney(surplusMoney);
|
||||
} else {
|
||||
allocateUnion.setAllocateHeadMoney(BigDecimal.ZERO);
|
||||
}
|
||||
insertList.add(allocateUnion);
|
||||
|
||||
}
|
||||
return insertList;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
+34
@@ -0,0 +1,34 @@
|
||||
package com.budwk.app.zhgh.dayofficework.outlay.outlayManage.union.vo;
|
||||
|
||||
import cn.afterturn.easypoi.excel.annotation.Excel;
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
/**
|
||||
* 分工会季度额度导入行数据。
|
||||
*/
|
||||
@Data
|
||||
public class OutlayUnionAllocateImportVo {
|
||||
|
||||
@Excel(name = "工会编码")
|
||||
private String unionCode;
|
||||
|
||||
@Excel(name = "分配额度")
|
||||
private BigDecimal allocateMoney;
|
||||
|
||||
/**
|
||||
* 预览时展示匹配到的工会名称。
|
||||
*/
|
||||
private String unionName;
|
||||
|
||||
/**
|
||||
* 预览时展示当前行错误信息。
|
||||
*/
|
||||
private String errMsg;
|
||||
|
||||
/**
|
||||
* Excel 行号,便于用户定位问题数据。
|
||||
*/
|
||||
private Integer rowNum;
|
||||
}
|
||||
+9
-2
@@ -259,7 +259,14 @@ public class UnionReimburseApplyController {
|
||||
return Result.success(value);
|
||||
}
|
||||
|
||||
// 如果没有找到该社团的经费记录,返回0
|
||||
return Result.success(0.0);
|
||||
// 协会在年度预算分配之后才创建时,不会自动生成当年预算记录,这里给出明确提示。
|
||||
return Result.error("该协会本年度未生成预算记录,请先在协会预算分配中补分配");
|
||||
}
|
||||
|
||||
@At
|
||||
@ApiOperation("统一查询经费余额")
|
||||
@SaCheckPermission(value = {"unionReimburse.apply", "h5.unionReimburse.apply"}, mode = SaMode.OR)
|
||||
public Result getBudgetBalance(String reimburseFundSource, String clubId) {
|
||||
return unionReimburseService.getBudgetBalance(reimburseFundSource, clubId);
|
||||
}
|
||||
}
|
||||
|
||||
+11
-23
@@ -15,7 +15,6 @@ import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nutz.aop.interceptor.ioc.TransAop;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Dao;
|
||||
import org.nutz.dao.Sqls;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.dao.util.cri.SqlExpressionGroup;
|
||||
@@ -27,18 +26,15 @@ import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
import org.nutz.mvc.annotation.Param;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
@IocBean
|
||||
@At("/platform/unionReimburse/review")
|
||||
@Ok("json:full")
|
||||
@Api("审核报销")
|
||||
@Api("工会报销审核")
|
||||
@Slf4j
|
||||
public class UnionReimburseReviewController {
|
||||
|
||||
@Inject
|
||||
private Dao dao;
|
||||
@Inject
|
||||
private UnionReimburseService unionReimburseService;
|
||||
|
||||
@@ -98,42 +94,34 @@ public class UnionReimburseReviewController {
|
||||
}
|
||||
|
||||
@At
|
||||
@ApiOperation("审核")
|
||||
@ApiOperation("审核报销")
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@SaCheckPermission(value = {"unionReimburse.review", "h5.unionReimburse.review"}, mode = SaMode.OR)
|
||||
@SLog(tag = "审核工会报销", msg = "审核工会报销")
|
||||
@SLog(tag = "工会报销审核", msg = "审核工会报销")
|
||||
public Result reviewTask(@Param("data") UnionReimburse unionReimburse, String submitType) {
|
||||
if (submitType == null || !List.of("3", "4", "5").contains(submitType)) {
|
||||
return Result.error("无效的审核操作类型");
|
||||
}
|
||||
UnionReimburse dbRecord = dao.fetch(UnionReimburse.class, unionReimburse.getId());
|
||||
if (dbRecord == null) {
|
||||
return Result.error("记录不存在");
|
||||
}
|
||||
dbRecord.setReviewTime(new Date());
|
||||
dbRecord.setStateId(Integer.parseInt(submitType));
|
||||
dbRecord.setReviewOpinion(unionReimburse.getReviewOpinion());
|
||||
dao.update(dbRecord);
|
||||
return Result.success();
|
||||
return unionReimburseService.reviewApply(unionReimburse.getId(), unionReimburse.getReviewOpinion(), Integer.parseInt(submitType));
|
||||
}
|
||||
|
||||
@At
|
||||
@ApiOperation("一键审核")
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@SaCheckPermission(value = {"unionReimburse.review", "h5.unionReimburse.review"}, mode = SaMode.OR)
|
||||
@SLog(tag = "一键审核", msg = "一键审核")
|
||||
@SLog(tag = "工会报销审核", msg = "一键审核工会报销")
|
||||
public Result allReview() {
|
||||
try {
|
||||
List<UnionReimburse> reimbursements = unionReimburseService.query(Cnd.where("stateId", "=", 2));
|
||||
for (UnionReimburse reimbursement : reimbursements) {
|
||||
reimbursement.setStateId(3);
|
||||
reimbursement.setReviewTime(new Date());
|
||||
reimbursement.setReviewOpinion("通过");
|
||||
dao.update(reimbursement);
|
||||
Result result = unionReimburseService.reviewApply(reimbursement.getId(), "通过", 3);
|
||||
if (result.getCode() != 0) {
|
||||
return result;
|
||||
}
|
||||
}
|
||||
return Result.success("一键审核完成,共处理 " + reimbursements.size() + " 条记录");
|
||||
return Result.success("一键审核完成,共处理" + reimbursements.size() + "条记录");
|
||||
} catch (Exception e) {
|
||||
log.error("一键审核失败");
|
||||
log.error("一键审核失败", e);
|
||||
return Result.error("一键审核失败: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
+13
-4
@@ -1,7 +1,7 @@
|
||||
package com.budwk.app.zhgh.dayofficework.unionReimburse.service;
|
||||
|
||||
import com.budwk.app.base.service.BaseService;
|
||||
import com.budwk.app.base.result.Result;
|
||||
import com.budwk.app.base.service.BaseService;
|
||||
import com.budwk.app.zhgh.dayofficework.unionReimburse.model.UnionReimburse;
|
||||
import com.budwk.app.zhgh.dayofficework.unionReimburse.param.UnionReimbursePageForm;
|
||||
import com.budwk.app.zhgh.dayofficework.unionReimburse.vo.UnionReimburseBankHistoryVO;
|
||||
@@ -9,7 +9,7 @@ import org.nutz.dao.sql.Sql;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface UnionReimburseService extends BaseService<UnionReimburse> {
|
||||
public interface UnionReimburseService extends BaseService<UnionReimburse> {
|
||||
|
||||
Sql getSql(UnionReimbursePageForm pageForm);
|
||||
|
||||
@@ -19,7 +19,7 @@ public interface UnionReimburseService extends BaseService<UnionReimburse> {
|
||||
Result saveApply(UnionReimburse unionReimburse, int stateId);
|
||||
|
||||
/**
|
||||
* 查询申请表单详情,补齐发票明细回显数据。
|
||||
* 查询申请表单详情,并补齐发票明细回显数据。
|
||||
*/
|
||||
UnionReimburse getApplyForm(String id);
|
||||
|
||||
@@ -34,8 +34,17 @@ public interface UnionReimburseService extends BaseService<UnionReimburse> {
|
||||
Result checkInvoiceDuplicate(String invoiceNo, String reimburseId);
|
||||
|
||||
/**
|
||||
* 识别单张发票文件,并在需要时调用腾讯云验真接口补齐票面信息。
|
||||
* 识别单张发票文件,并在需要时调用验真接口补齐票面信息。
|
||||
*/
|
||||
Result recognizeInvoice(String fileId, Boolean verifySwitch);
|
||||
|
||||
/**
|
||||
* 查询报销可用经费余额,同时校验是否已分配以及协会归属权限。
|
||||
*/
|
||||
Result getBudgetBalance(String reimburseFundSource, String clubId);
|
||||
|
||||
/**
|
||||
* 审核报销,审核通过时扣减对应预算并新增预算使用详情。
|
||||
*/
|
||||
Result reviewApply(String reimburseId, String reviewOpinion, int submitType);
|
||||
}
|
||||
|
||||
+243
-11
@@ -8,6 +8,11 @@ import com.budwk.app.base.result.Result;
|
||||
import com.budwk.app.base.service.impl.BaseServiceImpl;
|
||||
import com.budwk.app.sys.models.Sys_file;
|
||||
import com.budwk.app.sys.services.SysFileService;
|
||||
import com.budwk.app.zhgh.club.model.ClubUser;
|
||||
import com.budwk.app.zhgh.dayofficework.outlay.outlayManage.club.model.OutlayManageClub;
|
||||
import com.budwk.app.zhgh.dayofficework.outlay.outlayManage.model.OutlayUseDetail;
|
||||
import com.budwk.app.zhgh.dayofficework.outlay.outlayManage.school.model.OutlayManageSchool;
|
||||
import com.budwk.app.zhgh.dayofficework.outlay.outlayManage.union.model.OutlayManageUnion;
|
||||
import com.budwk.app.zhgh.dayofficework.unionReimburse.model.UnionReimburse;
|
||||
import com.budwk.app.zhgh.dayofficework.unionReimburse.model.UnionReimburseInvoiceDetail;
|
||||
import com.budwk.app.zhgh.dayofficework.unionReimburse.param.UnionReimbursePageForm;
|
||||
@@ -123,6 +128,10 @@ public class UnionReimburseServiceImpl extends BaseServiceImpl<UnionReimburse> i
|
||||
if (validateResult != null) {
|
||||
return validateResult;
|
||||
}
|
||||
Result fundValidateResult = validateFundSourceBeforeSubmit(unionReimburse);
|
||||
if (fundValidateResult != null) {
|
||||
return fundValidateResult;
|
||||
}
|
||||
Result duplicateResult = validateInvoiceDuplicate(unionReimburse);
|
||||
if (duplicateResult != null) {
|
||||
return duplicateResult;
|
||||
@@ -232,8 +241,80 @@ public class UnionReimburseServiceImpl extends BaseServiceImpl<UnionReimburse> i
|
||||
}
|
||||
|
||||
/**
|
||||
* 统一规整发票明细中的文本和金额,避免空格、空数组等脏数据进入库表。
|
||||
* 按经费来源统一查询当前可用余额,未分配或权限不匹配时直接拦截。
|
||||
*/
|
||||
@Override
|
||||
public Result getBudgetBalance(String reimburseFundSource, String clubId) {
|
||||
if (StrUtil.isBlank(reimburseFundSource)) {
|
||||
return Result.error("请选择经费来源");
|
||||
}
|
||||
if ("UNION_REIMBURSE_FUND_SOURCE_1".equals(reimburseFundSource)) {
|
||||
OutlayManageSchool outlayManageSchool = dao().fetch(OutlayManageSchool.class,
|
||||
Cnd.where("year", "=", DateUtil.thisYear()));
|
||||
if (outlayManageSchool == null) {
|
||||
return Result.error("校工会经费未分配");
|
||||
}
|
||||
return Result.success(formatMoney(outlayManageSchool.getTotalQuota().subtract(outlayManageSchool.getUsedQuota())));
|
||||
}
|
||||
if ("UNION_REIMBURSE_FUND_SOURCE_2".equals(reimburseFundSource)) {
|
||||
OutlayManageUnion outlayManageUnion = dao().fetch(OutlayManageUnion.class,
|
||||
Cnd.where("unionId", "=", SecurityUtil.getUnionId()).and("year", "=", DateUtil.thisYear()));
|
||||
if (outlayManageUnion == null) {
|
||||
return Result.error("分工会经费未分配");
|
||||
}
|
||||
return Result.success(formatMoney(outlayManageUnion.getTotalQuota().subtract(outlayManageUnion.getUsedQuota())));
|
||||
}
|
||||
if ("UNION_REIMBURSE_FUND_SOURCE_3".equals(reimburseFundSource)) {
|
||||
if (StrUtil.isBlank(clubId)) {
|
||||
return Result.error("请选择协会");
|
||||
}
|
||||
List<String> myClubIds = getCurrentUserClubIds();
|
||||
if (!isAdmin() && !myClubIds.contains(clubId)) {
|
||||
return Result.error("当前用户无权使用该协会经费");
|
||||
}
|
||||
OutlayManageClub outlayManageClub = dao().fetch(OutlayManageClub.class,
|
||||
Cnd.where("clubId", "=", clubId).and("year", "=", DateUtil.thisYear()));
|
||||
if (outlayManageClub == null) {
|
||||
return Result.error("该协会本年度未生成预算记录,请先在协会预算分配中补分配");
|
||||
}
|
||||
return Result.success(formatMoney(outlayManageClub.getTotalQuota().subtract(outlayManageClub.getUsedQuota())));
|
||||
}
|
||||
return Result.error("不支持的经费来源");
|
||||
}
|
||||
|
||||
/**
|
||||
* 审核通过时统一校验余额、扣减预算并写入预算使用详情,避免控制器分散业务逻辑。
|
||||
*/
|
||||
@Override
|
||||
public Result reviewApply(String reimburseId, String reviewOpinion, int submitType) {
|
||||
if (!List.of(3, 4, 5).contains(submitType)) {
|
||||
return Result.error("无效的审核操作类型");
|
||||
}
|
||||
UnionReimburse dbRecord = this.fetch(reimburseId);
|
||||
if (dbRecord == null) {
|
||||
return Result.error("记录不存在");
|
||||
}
|
||||
if (submitType == 3) {
|
||||
// 已通过的单据再次触发通过时直接返回,避免重复扣减预算。
|
||||
if (Integer.valueOf(3).equals(dbRecord.getStateId())) {
|
||||
return Result.success();
|
||||
}
|
||||
Result validateResult = validateFundSourceBeforeSubmit(dbRecord);
|
||||
if (validateResult != null) {
|
||||
return validateResult;
|
||||
}
|
||||
Result deductResult = deductBudgetAndSaveUseDetail(dbRecord);
|
||||
if (deductResult != null && deductResult.getCode() != 0) {
|
||||
return deductResult;
|
||||
}
|
||||
}
|
||||
dbRecord.setReviewTime(new Date());
|
||||
dbRecord.setStateId(submitType);
|
||||
dbRecord.setReviewOpinion(reviewOpinion);
|
||||
dao().update(dbRecord);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
private void normalizeInvoiceDetails(UnionReimburse unionReimburse) {
|
||||
if (unionReimburse.getInvoiceDetails() == null) {
|
||||
unionReimburse.setInvoiceDetails(new ArrayList<>());
|
||||
@@ -289,15 +370,15 @@ public class UnionReimburseServiceImpl extends BaseServiceImpl<UnionReimburse> i
|
||||
if (!isValidContact(unionReimburse.getMobile())) {
|
||||
return Result.error("请输入正确的联系方式");
|
||||
}
|
||||
if (StrUtil.isBlank(unionReimburse.getBankUserName())) {
|
||||
return Result.error("请填写户名");
|
||||
}
|
||||
if (StrUtil.isBlank(unionReimburse.getBankCardNumber())) {
|
||||
return Result.error("请填写银行账号");
|
||||
}
|
||||
if (StrUtil.isBlank(unionReimburse.getBankOfDeposit())) {
|
||||
return Result.error("请填写开户行");
|
||||
}
|
||||
// if (StrUtil.isBlank(unionReimburse.getBankUserName())) {
|
||||
// return Result.error("请填写户名");
|
||||
// }
|
||||
// if (StrUtil.isBlank(unionReimburse.getBankCardNumber())) {
|
||||
// return Result.error("请填写银行账号");
|
||||
// }
|
||||
// if (StrUtil.isBlank(unionReimburse.getBankOfDeposit())) {
|
||||
// return Result.error("请填写开户行");
|
||||
// }
|
||||
if (StrUtil.isBlank(unionReimburse.getPaymentNotes())) {
|
||||
return Result.error("请填写支付内容");
|
||||
}
|
||||
@@ -342,8 +423,159 @@ public class UnionReimburseServiceImpl extends BaseServiceImpl<UnionReimburse> i
|
||||
}
|
||||
|
||||
/**
|
||||
* 同次提交和历史记录都要拦截重复发票,避免重复报销。
|
||||
* 提交和审核前统一校验预算是否已分配、余额是否充足。
|
||||
*/
|
||||
private Result validateFundSourceBeforeSubmit(UnionReimburse unionReimburse) {
|
||||
Result balanceResult = getBudgetBalance(unionReimburse.getReimburseFundSource(), unionReimburse.getClubId());
|
||||
if (balanceResult == null || balanceResult.getCode() != 0) {
|
||||
return balanceResult == null ? Result.error("经费余额校验失败") : balanceResult;
|
||||
}
|
||||
BigDecimal applyMoney = getApplyMoney(unionReimburse);
|
||||
if (applyMoney.compareTo(BigDecimal.ZERO) <= 0) {
|
||||
return Result.error("报销金额必须大于0");
|
||||
}
|
||||
BigDecimal balance = new BigDecimal(String.valueOf(balanceResult.getData()));
|
||||
if (balance.compareTo(applyMoney) < 0) {
|
||||
return Result.error("经费余额不足,当前余额:" + formatMoney(balance));
|
||||
}
|
||||
unionReimburse.setFundBalance(balance.doubleValue());
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 审核通过后按经费来源扣减预算,并补写预算使用详情,便于后续台账追踪。
|
||||
*/
|
||||
private Result deductBudgetAndSaveUseDetail(UnionReimburse unionReimburse) {
|
||||
BigDecimal applyMoney = getApplyMoney(unionReimburse);
|
||||
String reimburseFundSource = unionReimburse.getReimburseFundSource();
|
||||
if ("UNION_REIMBURSE_FUND_SOURCE_1".equals(reimburseFundSource)) {
|
||||
OutlayManageSchool outlayManageSchool = dao().fetch(OutlayManageSchool.class,
|
||||
Cnd.where("year", "=", DateUtil.thisYear()));
|
||||
if (outlayManageSchool == null) {
|
||||
return Result.error("校工会经费未分配");
|
||||
}
|
||||
if (outlayManageSchool.getTotalQuota().subtract(outlayManageSchool.getUsedQuota()).compareTo(applyMoney) < 0) {
|
||||
return Result.error("校工会经费余额不足");
|
||||
}
|
||||
outlayManageSchool.setUsedQuota(outlayManageSchool.getUsedQuota().add(applyMoney));
|
||||
dao().updateIgnoreNull(outlayManageSchool);
|
||||
insertUseDetail(unionReimburse, outlayManageSchool.getId(), applyMoney);
|
||||
return Result.success();
|
||||
}
|
||||
if ("UNION_REIMBURSE_FUND_SOURCE_2".equals(reimburseFundSource)) {
|
||||
OutlayManageUnion outlayManageUnion = dao().fetch(OutlayManageUnion.class,
|
||||
Cnd.where("unionId", "=", unionReimburse.getUnionId()).and("year", "=", DateUtil.thisYear()));
|
||||
if (outlayManageUnion == null) {
|
||||
return Result.error("分工会经费未分配");
|
||||
}
|
||||
if (outlayManageUnion.getTotalQuota().subtract(outlayManageUnion.getUsedQuota()).compareTo(applyMoney) < 0) {
|
||||
return Result.error("分工会经费余额不足");
|
||||
}
|
||||
outlayManageUnion.setUsedQuota(outlayManageUnion.getUsedQuota().add(applyMoney));
|
||||
dao().updateIgnoreNull(outlayManageUnion);
|
||||
insertUseDetail(unionReimburse, outlayManageUnion.getId(), applyMoney);
|
||||
return Result.success();
|
||||
}
|
||||
if ("UNION_REIMBURSE_FUND_SOURCE_3".equals(reimburseFundSource)) {
|
||||
OutlayManageClub outlayManageClub = dao().fetch(OutlayManageClub.class,
|
||||
Cnd.where("clubId", "=", unionReimburse.getClubId()).and("year", "=", DateUtil.thisYear()));
|
||||
if (outlayManageClub == null) {
|
||||
return Result.error("该协会本年度未生成预算记录,请先在协会预算分配中补分配");
|
||||
}
|
||||
if (outlayManageClub.getTotalQuota().subtract(outlayManageClub.getUsedQuota()).compareTo(applyMoney) < 0) {
|
||||
return Result.error("协会经费余额不足");
|
||||
}
|
||||
outlayManageClub.setUsedQuota(outlayManageClub.getUsedQuota().add(applyMoney));
|
||||
dao().updateIgnoreNull(outlayManageClub);
|
||||
insertUseDetail(unionReimburse, outlayManageClub.getId(), applyMoney);
|
||||
return Result.success();
|
||||
}
|
||||
return Result.error("不支持的经费来源");
|
||||
}
|
||||
|
||||
/**
|
||||
* 一张报销单只写入一条预算使用详情,避免重复通过或重复点击造成重复明细。
|
||||
*/
|
||||
private void insertUseDetail(UnionReimburse unionReimburse, String outlayManageId, BigDecimal applyMoney) {
|
||||
OutlayUseDetail oldDetail = dao().fetch(OutlayUseDetail.class, Cnd.where("outlayReimburseId", "=", unionReimburse.getId()));
|
||||
if (oldDetail != null) {
|
||||
return;
|
||||
}
|
||||
OutlayUseDetail detail = new OutlayUseDetail();
|
||||
detail.setOutlayManageId(outlayManageId);
|
||||
detail.setOutlayReimburseId(unionReimburse.getId());
|
||||
detail.setAdjustMoney(applyMoney);
|
||||
detail.setAdjustReason(StrUtil.blankToDefault(unionReimburse.getPaymentNotes(), getReimburseProjectName(unionReimburse.getReimburseProject())));
|
||||
detail.setAdjustUserId(SecurityUtil.getUserId());
|
||||
detail.setAdjustUserName(SecurityUtil.getUserUsername());
|
||||
detail.setAdjustLoginName(SecurityUtil.getUserLoginname());
|
||||
detail.setProjectName(buildUseDetailProjectName(unionReimburse));
|
||||
detail.setActivityNumber(unionReimburse.getActivityNumber());
|
||||
detail.setActivityTime(buildUseDetailTime(unionReimburse));
|
||||
dao().insert(detail);
|
||||
}
|
||||
|
||||
private BigDecimal getApplyMoney(UnionReimburse unionReimburse) {
|
||||
Double money = "UNION_REIMBURSE_PROJECT_1".equals(unionReimburse.getReimburseProject())
|
||||
? unionReimburse.getCondolenceMoney() : unionReimburse.getMoney();
|
||||
return BigDecimal.valueOf(money == null ? 0D : money).setScale(2, RoundingMode.HALF_UP);
|
||||
}
|
||||
|
||||
private String buildUseDetailProjectName(UnionReimburse unionReimburse) {
|
||||
if (StrUtil.isNotBlank(unionReimburse.getActivityName())) {
|
||||
return unionReimburse.getActivityName();
|
||||
}
|
||||
if (StrUtil.isNotBlank(unionReimburse.getCondolenceUserName())) {
|
||||
return getReimburseProjectName(unionReimburse.getReimburseProject()) + "-" + unionReimburse.getCondolenceUserName();
|
||||
}
|
||||
return StrUtil.blankToDefault(unionReimburse.getDocumentNo(), getReimburseProjectName(unionReimburse.getReimburseProject()));
|
||||
}
|
||||
|
||||
private String buildUseDetailTime(UnionReimburse unionReimburse) {
|
||||
if (unionReimburse.getActivityTime() != null) {
|
||||
return DateUtil.formatDate(unionReimburse.getActivityTime());
|
||||
}
|
||||
if (unionReimburse.getCondolenceTime() != null) {
|
||||
return DateUtil.formatDate(unionReimburse.getCondolenceTime());
|
||||
}
|
||||
if (unionReimburse.getCreateTime() != null) {
|
||||
return DateUtil.formatDate(unionReimburse.getCreateTime());
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
private String getReimburseProjectName(String reimburseProject) {
|
||||
if ("UNION_REIMBURSE_PROJECT_1".equals(reimburseProject)) {
|
||||
return "慰问申请";
|
||||
}
|
||||
if ("UNION_REIMBURSE_PROJECT_2".equals(reimburseProject)) {
|
||||
return "文体活动申请";
|
||||
}
|
||||
if ("UNION_REIMBURSE_PROJECT_3".equals(reimburseProject)) {
|
||||
return "日常活动申请";
|
||||
}
|
||||
if ("UNION_REIMBURSE_PROJECT_4".equals(reimburseProject)) {
|
||||
return "专项活动申请";
|
||||
}
|
||||
return "报销申请";
|
||||
}
|
||||
|
||||
private Double formatMoney(BigDecimal money) {
|
||||
return money == null ? 0D : money.setScale(2, RoundingMode.HALF_UP).doubleValue();
|
||||
}
|
||||
|
||||
private List<String> getCurrentUserClubIds() {
|
||||
if (isAdmin()) {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
List<ClubUser> clubUsers = dao().query(ClubUser.class, Cnd.where("userId", "=", SecurityUtil.getUserId()));
|
||||
return clubUsers.stream()
|
||||
.map(ClubUser::getClubId)
|
||||
.filter(StrUtil::isNotBlank)
|
||||
.distinct()
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
private Result validateInvoiceDuplicate(UnionReimburse unionReimburse) {
|
||||
Map<String, List<Integer>> currentInvoiceMap = new LinkedHashMap<>();
|
||||
List<UnionReimburseInvoiceDetail> details = unionReimburse.getInvoiceDetails();
|
||||
|
||||
+17
-2
@@ -84,6 +84,9 @@ public class DifficultHelpApplyController {
|
||||
public Result getIsCanPlay() {
|
||||
//获取申请次数,不想再写一个接口, are you ok? .and("zt", "=", 600)
|
||||
int applyCount = dao.count(DifficultHelpInfo.class, Cnd.where("proxyUserId", "=", SecurityUtil.getUserId()));
|
||||
// 页面初始化时需要先判断当前登录人本年度是否已经申请过,避免重复进入新增申请。
|
||||
boolean hasCurrentYearApply = dao.count(DifficultHelpInfo.class, Cnd.where("userId", "=", SecurityUtil.getUserId())
|
||||
.and("YEAR(applyTime)", "=", DateUtil.getYear())) > 0;
|
||||
Sys_config startConfig = dao.fetch(Sys_config.class, Cnd.where("configKey", "=", "DifficultyApplyStartTime"));
|
||||
Sys_config endConfig = dao.fetch(Sys_config.class, Cnd.where("configKey", "=", "DifficultyApplyEndTime"));
|
||||
if(startConfig != null && endConfig != null) {
|
||||
@@ -98,9 +101,9 @@ public class DifficultHelpApplyController {
|
||||
int endResult = cn.hutool.core.date.DateUtil.compare(cn.hutool.core.date.DateUtil.parse(today), cn.hutool.core.date.DateUtil.parse(end));
|
||||
|
||||
String time = startConfig.getConfigValue().replace("-", "月") + "日-" + endConfig.getConfigValue().replace("-", "月") + "日";
|
||||
return Result.success(Map.of("applyCount", applyCount,"time", time, "result", startResult >=0 && endResult <= 0));
|
||||
return Result.success(Map.of("applyCount", applyCount,"time", time, "result", startResult >=0 && endResult <= 0, "hasCurrentYearApply", hasCurrentYearApply));
|
||||
} else {
|
||||
return Result.success(Map.of("applyCount", applyCount,"time", "", "result", false));
|
||||
return Result.success(Map.of("applyCount", applyCount,"time", "", "result", false, "hasCurrentYearApply", hasCurrentYearApply));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -110,6 +113,10 @@ public class DifficultHelpApplyController {
|
||||
@SLog(tag = "困难补助申请", msg = "保存申请,填写人: ${args[0].proxyUserName}")
|
||||
public Result save(@Param("data") DifficultHelpInfo difficultHelpInfo) {
|
||||
difficultHelpInfo.setApplyTime(ObjectUtil.defaultIfNull(difficultHelpInfo.getApplyTime(), new Date()));
|
||||
difficultHelpCommonService.refreshApplyCount(difficultHelpInfo);
|
||||
if (difficultHelpCommonService.hasAppliedInYear(difficultHelpInfo.getUserId(), difficultHelpInfo.getApplyTime(), difficultHelpInfo.getId())) {
|
||||
return Result.error("该人员本年度已申请困难帮扶,不能重复申请");
|
||||
}
|
||||
dao.insertOrUpdate(difficultHelpInfo);
|
||||
return Result.success();
|
||||
}
|
||||
@@ -122,6 +129,10 @@ public class DifficultHelpApplyController {
|
||||
@SLog(tag = "困难补助申请", msg = "提交申请,填写人: ${args[0].proxyUserName}")
|
||||
public Result submit(@Param("data") DifficultHelpInfo difficultHelpInfo){
|
||||
difficultHelpInfo.setApplyTime(new Date());
|
||||
difficultHelpCommonService.refreshApplyCount(difficultHelpInfo);
|
||||
if (difficultHelpCommonService.hasAppliedInYear(difficultHelpInfo.getUserId(), difficultHelpInfo.getApplyTime(), difficultHelpInfo.getId())) {
|
||||
return Result.error("该人员本年度已申请困难帮扶,不能重复申请");
|
||||
}
|
||||
dao.insertOrUpdate(difficultHelpInfo);
|
||||
|
||||
// 开启流程实例
|
||||
@@ -146,6 +157,10 @@ public class DifficultHelpApplyController {
|
||||
@SLog(tag = "困难补助申请", msg = "重新提交申请,填写人: ${args[0].proxyUserName}")
|
||||
public Result submitAgain(@Param("data") DifficultHelpInfo difficultHelpInfo, @Param("taskId") Long taskId) {
|
||||
difficultHelpInfo.setApplyTime(ObjectUtil.defaultIfNull(difficultHelpInfo.getApplyTime(), new Date()));
|
||||
difficultHelpCommonService.refreshApplyCount(difficultHelpInfo);
|
||||
if (difficultHelpCommonService.hasAppliedInYear(difficultHelpInfo.getUserId(), difficultHelpInfo.getApplyTime(), difficultHelpInfo.getId())) {
|
||||
return Result.error("该人员本年度已申请困难帮扶,不能重复申请");
|
||||
}
|
||||
dao.insertOrUpdate(difficultHelpInfo);
|
||||
|
||||
Dict dict = Dict.create();
|
||||
|
||||
+18
@@ -7,6 +7,7 @@ import com.budwk.app.zhgh.staffbenefit.medicalMutualAid.aidFund.param.AidFundPag
|
||||
import org.nutz.lang.util.NutMap;
|
||||
import org.nutz.mvc.upload.TempFile;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
@@ -26,4 +27,21 @@ public interface DifficultHelpCommonService extends BaseService<DifficultHelpInf
|
||||
NutMap handlingMoneyImport(TempFile file, Boolean isFlag);
|
||||
|
||||
List<NutMap> getYearPayList(DifficultHelpPageParam pageForm);
|
||||
|
||||
/**
|
||||
* 校验同一受补助人同一年是否已存在申请记录。
|
||||
*
|
||||
* @param userId 受补助人id
|
||||
* @param applyTime 申请时间
|
||||
* @param excludeRecordId 排除的当前记录id,编辑/重新提交时使用
|
||||
* @return true 已存在同年申请记录
|
||||
*/
|
||||
boolean hasAppliedInYear(String userId, Date applyTime, String excludeRecordId);
|
||||
|
||||
/**
|
||||
* 新申请时按历史总申请次数重新计算申请次数字段,已有记录则保留原值。
|
||||
*
|
||||
* @param difficultHelpInfo 申请信息
|
||||
*/
|
||||
void refreshApplyCount(DifficultHelpInfo difficultHelpInfo);
|
||||
}
|
||||
|
||||
+32
@@ -50,6 +50,38 @@ public class DifficultHelpCommonServiceImpl extends BaseServiceImpl<DifficultHel
|
||||
@Inject
|
||||
private ManyAddOrRenewUtil manyAddOrRenewUtil;
|
||||
|
||||
@Override
|
||||
public boolean hasAppliedInYear(String userId, Date applyTime, String excludeRecordId) {
|
||||
if (StrUtil.isBlank(userId) || applyTime == null) {
|
||||
return false;
|
||||
}
|
||||
Cnd cnd = Cnd.where("userId", "=", userId);
|
||||
cnd.and("YEAR(applyTime)", "=", DateUtil.year(applyTime));
|
||||
if (StrUtil.isNotBlank(excludeRecordId)) {
|
||||
cnd.and("id", "<>", excludeRecordId);
|
||||
}
|
||||
// 按受补助人和申请年份校验,确保同一个人每年只能保留一条申请记录。
|
||||
return dao().count(DifficultHelpInfo.class, cnd) > 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void refreshApplyCount(DifficultHelpInfo difficultHelpInfo) {
|
||||
if (difficultHelpInfo == null || StrUtil.isBlank(difficultHelpInfo.getUserId())) {
|
||||
return;
|
||||
}
|
||||
if (StrUtil.isNotBlank(difficultHelpInfo.getId())) {
|
||||
DifficultHelpInfo dbInfo = dao().fetch(DifficultHelpInfo.class, difficultHelpInfo.getId());
|
||||
if (dbInfo != null) {
|
||||
// 已存在的申请记录沿用原申请次数,避免编辑或重新提交时重复累加。
|
||||
difficultHelpInfo.setApplyCount(dbInfo.getApplyCount());
|
||||
return;
|
||||
}
|
||||
}
|
||||
int historyApplyCount = dao().count(DifficultHelpInfo.class, Cnd.where("userId", "=", difficultHelpInfo.getUserId()));
|
||||
// 新申请记录按历史总申请次数 + 1 重新计算申请次数,不使用前端传入值。
|
||||
difficultHelpInfo.setApplyCount(historyApplyCount + 1);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<NutMap> getYearPayList(DifficultHelpPageParam pageForm) {
|
||||
// 1. 生成年份列表
|
||||
|
||||
+31
@@ -126,6 +126,37 @@ public class AIdFundPayRecordController {
|
||||
CommonDownloadUtil.download(pageForm.getYear() + "会员年度缴费记录.xlsx", workbook, response);
|
||||
}
|
||||
|
||||
@At
|
||||
@Ok("void")
|
||||
@ApiOperation("导出年度缴费名单")
|
||||
@SaCheckPermission("medicalMutualAid.aidFund.payRecord")
|
||||
public void exportAnnualPayMemberList(AidFundPageForm pageForm, HttpServletResponse response) {
|
||||
/*
|
||||
* 导出参数说明:
|
||||
* pageForm 可传所属工会、所属单位、会员类型、姓名/工号关键字等筛选条件;
|
||||
* 返回 Excel 列为工号、姓名、单位,以及 2015 到当前年度的动态缴费金额列。
|
||||
*/
|
||||
List<Integer> years = IntStream.rangeClosed(2015, DateUtil.thisYear())
|
||||
.boxed()
|
||||
.toList();
|
||||
|
||||
List<ExcelExportEntity> entityList = new ArrayList<>();
|
||||
entityList.add(new ExcelExportEntity("工号", "loginname", 20));
|
||||
entityList.add(new ExcelExportEntity("姓名", "username", 20));
|
||||
entityList.add(new ExcelExportEntity("单位", "unitName", 30));
|
||||
years.forEach(year -> {
|
||||
ExcelExportEntity entity = new ExcelExportEntity(String.valueOf(year), String.valueOf(year), 20);
|
||||
entity.setType(10);
|
||||
entityList.add(entity);
|
||||
});
|
||||
|
||||
List<NutMap> list = aidFundMemberPayService.getAnnualPayMemberList(pageForm);
|
||||
ExportParams exportParams = new ExportParams();
|
||||
exportParams.setType(ExcelType.XSSF);
|
||||
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, entityList, list);
|
||||
CommonDownloadUtil.download("年度缴费名单.xlsx", workbook, response);
|
||||
}
|
||||
|
||||
@At
|
||||
@Ok("void")
|
||||
@ApiOperation("导出缴费名单")
|
||||
|
||||
+28
@@ -3,23 +3,28 @@ package com.budwk.app.zhgh.staffbenefit.medicalMutualAid.aidFund.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;
|
||||
import com.budwk.app.base.result.Result;
|
||||
import com.budwk.app.base.utils.PageUtil;
|
||||
import com.budwk.app.flow.engine.FlowEngine;
|
||||
import com.budwk.app.zhgh.staffbenefit.medicalMutualAid.aidFund.param.AidFundPageForm;
|
||||
import com.budwk.app.zhgh.staffbenefit.medicalMutualAid.aidFund.service.AidFundMemberChangeRecordService;
|
||||
import com.budwk.app.zhgh.staffbenefit.medicalMutualAid.aidFund.service.AidFundMemberService;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nutz.aop.interceptor.ioc.TransAop;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Sqls;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.dao.util.cri.SqlExpressionGroup;
|
||||
import org.nutz.ioc.aop.Aop;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
import org.nutz.mvc.annotation.Param;
|
||||
|
||||
/**
|
||||
* @author zhf
|
||||
@@ -37,6 +42,9 @@ public class AidFundChangeRecordController {
|
||||
@Inject
|
||||
private AidFundMemberChangeRecordService changeRecordService;
|
||||
|
||||
@Inject
|
||||
private FlowEngine flowEngine;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/staffbenefit/medicalMutualAid/aidFund/changeRecord/index.html")
|
||||
@SaCheckPermission("medicalMutualAid.aidFund.changeRecord")
|
||||
@@ -105,5 +113,25 @@ public class AidFundChangeRecordController {
|
||||
return Result.success(pagination);
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除基金会员变更记录。
|
||||
*
|
||||
* @param id 变更记录 ID,前端列表行中的 row.id
|
||||
* @return Result,删除成功时返回 success;ID 为空时返回失败提示
|
||||
*/
|
||||
@At
|
||||
@ApiOperation("删除")
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@SaCheckPermission("medicalMutualAid.aidFund.changeRecord")
|
||||
@SLog(tag = "基金会员-变更记录", msg = "删除变更记录")
|
||||
public Result delete(@Param("id") String id) {
|
||||
if (StrUtil.isBlank(id)) {
|
||||
return Result.error("请选择需要删除的变更记录");
|
||||
}
|
||||
changeRecordService.delete(id);
|
||||
flowEngine.processInstanceService().deleteProcessInstanceByBusinessKey(id);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
+52
-1
@@ -3,11 +3,13 @@ package com.budwk.app.zhgh.staffbenefit.medicalMutualAid.aidFund.controller;
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import cn.dev33.satoken.annotation.SaMode;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.budwk.app.base.constant.RoleConstant;
|
||||
import com.budwk.app.base.page.Pagination;
|
||||
import com.budwk.app.base.param.PageForm;
|
||||
import com.budwk.app.base.result.Result;
|
||||
import com.budwk.app.base.utils.PageUtil;
|
||||
import com.budwk.app.flow.enums.ProcessTaskStateEnum;
|
||||
import com.budwk.app.web.commons.auth.utils.AuthUtil;
|
||||
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
|
||||
import com.budwk.app.zhgh.staffbenefit.condolence.model.Condolence;
|
||||
import com.budwk.app.zhgh.staffbenefit.medicalMutualAid.aidFund.service.AidFundMemberChangeRecordService;
|
||||
@@ -26,6 +28,7 @@ import org.nutz.mvc.annotation.Ok;
|
||||
import org.nutz.mvc.annotation.Param;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* @author zhf
|
||||
@@ -115,7 +118,9 @@ public class AidFundUnionAuditController {
|
||||
cnd.andEX("info.changeType", "=", changeType);
|
||||
|
||||
cnd.and("t.taskName", "=", "06ed1d6d-5f96-485f-9150-ed1ef4a082d6");
|
||||
cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId()));
|
||||
if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name())){
|
||||
cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId()));
|
||||
}
|
||||
|
||||
if (approval) {
|
||||
cnd.and("t.taskState", "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.INTERRUPT.getCode()));
|
||||
@@ -133,4 +138,50 @@ public class AidFundUnionAuditController {
|
||||
Pagination<NutMap> pageVO = changeRecordService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
|
||||
return Result.success(pageVO);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询所有未审核分工会对应的分工会主席工号。
|
||||
*
|
||||
* @param year 年度,按变更记录申请时间的年份筛选
|
||||
* @param aidFundMemberUserType 基金会员类型,传字典编码;为空时不限制
|
||||
* @param changeType 变更类型,传字典编码;为空时不限制
|
||||
* @return Result,data 为需要发送通知的分工会主席工号列表
|
||||
*/
|
||||
@At
|
||||
@ApiOperation("查询未审核分工会主席工号")
|
||||
@SaCheckPermission("medicalMutualAid.aidFund.unionAudit")
|
||||
public Result notifyUnapprovedUnionChairman(@Param(value = "year") Integer year,
|
||||
@Param(value = "aidFundMemberUserType") String aidFundMemberUserType,
|
||||
@Param(value = "changeType") String changeType) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT DISTINCT
|
||||
chairman.loginname
|
||||
FROM
|
||||
wf_process_task t
|
||||
LEFT JOIN wf_process_instance ins ON ins.id = t.processInstanceId
|
||||
LEFT JOIN aid_fund_member_change_record info ON info.id = ins.businessNo
|
||||
LEFT JOIN vw_user us ON us.id = info.userId
|
||||
LEFT JOIN sys_user_role ur ON ur.unionId = us.unionId
|
||||
LEFT JOIN sys_role role ON role.id = ur.roleId
|
||||
LEFT JOIN sys_user chairman ON chairman.id = ur.userId
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.andEX("YEAR(info.applyTime)", "=", year);
|
||||
cnd.andEX("IFNULL(info.aidFundMemberUserType, us.aidFundMemberUserType)", "=", aidFundMemberUserType);
|
||||
cnd.andEX("info.changeType", "=", changeType);
|
||||
cnd.and("t.taskName", "=", "06ed1d6d-5f96-485f-9150-ed1ef4a082d6");
|
||||
cnd.and("t.taskState", "=", ProcessTaskStateEnum.DOING.getCode());
|
||||
cnd.and("role.code", "=", RoleConstant.BRANCH_UNION_CHAIRMAN.name());
|
||||
cnd.and("chairman.loginname", "is not", null);
|
||||
sql.setCondition(cnd);
|
||||
|
||||
// 这里只返回需要发送通知的主席工号,真实消息发送功能由后续消息接口接入。
|
||||
List<String> loginNames = changeRecordService.listMap(sql).stream()
|
||||
.map(map -> map.getString("loginname"))
|
||||
.filter(Objects::nonNull)
|
||||
.distinct()
|
||||
.toList();
|
||||
return Result.success(loginNames);
|
||||
}
|
||||
}
|
||||
|
||||
+8
@@ -15,4 +15,12 @@ public interface AidFundMemberPayService extends BaseService<AidFundMemberPay> {
|
||||
Sql getSql(AidFundPageForm pageForm);
|
||||
|
||||
List<NutMap> getYearPayList(AidFundPageForm pageForm);
|
||||
|
||||
/**
|
||||
* 查询年度缴费名单导出数据。
|
||||
*
|
||||
* @param pageForm 页面筛选参数,包含所属工会、所属单位、会员类型、姓名/工号关键字等条件
|
||||
* @return 返回导出行数据,字段包含 loginname、username、unitName,以及 2015 到当前年度的缴费金额字段
|
||||
*/
|
||||
List<NutMap> getAnnualPayMemberList(AidFundPageForm pageForm);
|
||||
}
|
||||
|
||||
+98
@@ -201,4 +201,102 @@ public class AidFundMemberPayServiceImpl extends BaseServiceImpl<AidFundMemberPa
|
||||
}
|
||||
return nutMaps;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<NutMap> getAnnualPayMemberList(AidFundPageForm pageForm) {
|
||||
/*
|
||||
* 导出参数说明:
|
||||
* pageForm.unionId:按所属工会筛选;
|
||||
* pageForm.unitId:按所属单位筛选;
|
||||
* pageForm.aidFundMemberUserType:按基金会员类型筛选;
|
||||
* pageForm.searchKeyword:按姓名或工号模糊筛选。
|
||||
* 返回值字段:loginname、username、unitName 为人员基础信息,2015 到当前年度字段为对应年度缴费金额。
|
||||
*/
|
||||
List<Integer> years = IntStream.rangeClosed(2015, DateUtil.thisYear())
|
||||
.boxed()
|
||||
.toList();
|
||||
|
||||
Cnd userCnd = Cnd.where(View_user::getAidFundMember, "=", 1);
|
||||
userCnd.andEX(View_user::getUnionId, "=", pageForm.getUnionId());
|
||||
userCnd.andEX(View_user::getUnitId, "=", pageForm.getUnitId());
|
||||
userCnd.andEX(View_user::getAidFundMemberUserType, "=", pageForm.getAidFundMemberUserType());
|
||||
if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) {
|
||||
SqlExpressionGroup group = new SqlExpressionGroup();
|
||||
group.orLike(View_user::getLoginname, pageForm.getSearchKeyword(), true);
|
||||
group.orLike(View_user::getUsername, pageForm.getSearchKeyword(), true);
|
||||
userCnd.and(group);
|
||||
}
|
||||
userCnd.desc(View_user::getUnitCode);
|
||||
List<View_user> userList = dao().query(View_user.class, userCnd);
|
||||
|
||||
Set<String> oldLoginNames = new HashSet<>();
|
||||
Map<String, String> oldLoginToUserId = new HashMap<>();
|
||||
for (View_user user : userList) {
|
||||
if (StrUtil.isNotBlank(user.getOldLoginName())) {
|
||||
oldLoginNames.add(user.getOldLoginName());
|
||||
}
|
||||
}
|
||||
|
||||
if (!oldLoginNames.isEmpty()) {
|
||||
List<Sys_user> oldUsers = dao().query(Sys_user.class,
|
||||
Cnd.where(Sys_user::getLoginname, "in", new ArrayList<>(oldLoginNames)));
|
||||
for (Sys_user oldUser : oldUsers) {
|
||||
oldLoginToUserId.put(oldUser.getLoginname(), oldUser.getId());
|
||||
}
|
||||
}
|
||||
|
||||
Set<String> allUserIds = new HashSet<>();
|
||||
for (View_user user : userList) {
|
||||
allUserIds.add(user.getId());
|
||||
if (StrUtil.isNotBlank(user.getOldLoginName())) {
|
||||
String oldUserId = oldLoginToUserId.get(user.getOldLoginName());
|
||||
if (oldUserId != null) {
|
||||
allUserIds.add(oldUserId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
List<AidFundMemberPay> payList = allUserIds.isEmpty()
|
||||
? new ArrayList<>()
|
||||
: query(Cnd.where(AidFundMemberPay::getUserId, "in", new ArrayList<>(allUserIds)));
|
||||
|
||||
Map<String, Map<Integer, Double>> payIndex = new HashMap<>();
|
||||
for (AidFundMemberPay pay : payList) {
|
||||
if (pay.getUserId() == null || pay.getYear() == null || pay.getMoney() == null) {
|
||||
continue;
|
||||
}
|
||||
payIndex.computeIfAbsent(pay.getUserId(), k -> new HashMap<>())
|
||||
.put(pay.getYear(), pay.getMoney());
|
||||
}
|
||||
|
||||
List<NutMap> result = new ArrayList<>();
|
||||
for (View_user user : userList) {
|
||||
NutMap row = NutMap.NEW();
|
||||
row.put("loginname", user.getLoginname());
|
||||
row.put("username", user.getUsername());
|
||||
row.put("unitName", user.getUnitName());
|
||||
|
||||
Set<String> userIds = new HashSet<>();
|
||||
userIds.add(user.getId());
|
||||
if (StrUtil.isNotBlank(user.getOldLoginName())) {
|
||||
String oldUserId = oldLoginToUserId.get(user.getOldLoginName());
|
||||
if (oldUserId != null) {
|
||||
userIds.add(oldUserId);
|
||||
}
|
||||
}
|
||||
|
||||
for (Integer year : years) {
|
||||
Double yearMoney = 0.0;
|
||||
for (String userId : userIds) {
|
||||
Double money = Optional.ofNullable(payIndex.get(userId))
|
||||
.map(map -> map.get(year))
|
||||
.orElse(0.0);
|
||||
yearMoney += money;
|
||||
}
|
||||
row.put(String.valueOf(year), yearMoney == 0.0 ? null : yearMoney);
|
||||
}
|
||||
result.add(row);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -22,7 +22,6 @@
|
||||
{{ viewData.arrivalAtSchoolDate ? $moment(viewData.arrivalAtSchoolDate).format("YYYY-MM-DD") : null }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="身份类别">{{ viewData.identityType }}</el-descriptions-item>
|
||||
<el-descriptions-item label="编制类别">{{ viewData.preparedBy }}</el-descriptions-item>
|
||||
<el-descriptions-item label="教职工类别">{{ viewData.personType }}</el-descriptions-item>
|
||||
<el-descriptions-item label="在职状态">{{ viewData.userState }}</el-descriptions-item>
|
||||
<el-descriptions-item label="预计离退休时间">
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<!--#
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
@@ -52,7 +52,7 @@ layout("/layouts/platform.html"){
|
||||
<el-option v-for="item in preparedByOptions" :label="item" :value="item"></el-option>
|
||||
</el-select>
|
||||
</search-item>
|
||||
<search-item label="教职工类别">
|
||||
<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>
|
||||
@@ -77,8 +77,7 @@ layout("/layouts/platform.html"){
|
||||
</el-table-column>
|
||||
<el-table-column prop="userState" label="在职状态" sortable width="120"></el-table-column>
|
||||
<el-table-column prop="arrivalAtSchoolDate" label="来校时间" sortable width="120"></el-table-column>
|
||||
<el-table-column prop="preparedBy" label="编制类别" sortable width="120"></el-table-column>
|
||||
<el-table-column prop="personType" label="教职工类别" sortable width="120"></el-table-column>
|
||||
<el-table-column prop="personType" label="人员类型" sortable width="120"></el-table-column>
|
||||
<el-table-column prop="technicalTitle" label="技术职称" sortable width="120"></el-table-column>
|
||||
<el-table-column prop="position" label="干部职务" sortable width="120" show-overflow-tooltip></el-table-column>
|
||||
<el-table-column prop="education" label="学历" show-overflow-tooltip sortable width="120"></el-table-column>
|
||||
@@ -209,3 +208,4 @@ layout("/layouts/platform.html"){
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<!--#
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
@@ -39,10 +39,7 @@ layout("/layouts/platform.html"){
|
||||
<search-item label="在职状态">
|
||||
<dict-select v-model="pageForm.userState" code="USER_STATE" style="width: 100%"></dict-select>
|
||||
</search-item>
|
||||
<search-item label="编制类别">
|
||||
<dict-select v-model="pageForm.preparedBy" code="USER_PREPARED_BY_TYPE" style="width: 100%"></dict-select>
|
||||
</search-item>
|
||||
<search-item label="教职工类别">
|
||||
<search-item label="人员类型">
|
||||
<dict-select v-model="pageForm.personType" code="USER_PERSON_TYPE" style="width: 100%"></dict-select>
|
||||
</search-item>
|
||||
</search>
|
||||
@@ -72,8 +69,7 @@ layout("/layouts/platform.html"){
|
||||
<template slot-scope="{row}">{{$moment(row.birthday).format('YYYY-MM-DD')}}</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="userState" label="在职状态" sortable width="120"></el-table-column>
|
||||
<el-table-column prop="preparedBy" label="编制类别" sortable width="120"></el-table-column>
|
||||
<el-table-column prop="personType" label="教职工类别" sortable width="120"></el-table-column>
|
||||
<el-table-column prop="personType" label="人员类型" sortable width="120"></el-table-column>
|
||||
<el-table-column prop="arrivalAtSchoolDate" label="来校年月" sortable width="120"></el-table-column>
|
||||
<el-table-column prop="technicalTitle" label="技术职称" sortable width="120"></el-table-column>
|
||||
<el-table-column prop="position" label="职务" sortable width="120" show-overflow-tooltip></el-table-column>
|
||||
@@ -162,9 +158,8 @@ layout("/layouts/platform.html"){
|
||||
{ label: "生日", value: "birthday" },
|
||||
{ label: "手机号", value: "mobile" },
|
||||
{ label: "在职状态", value: "userState" },
|
||||
{ label: "编制类别", value: "preparedBy" },
|
||||
{ label: "进站时间", value: "postDoctoralJoinDate" },
|
||||
{ label: "教职工类别", value: "personType" },
|
||||
{ label: "人员类型", value: "personType" },
|
||||
{ label: "来校年月", value: "arrivalAtSchoolDate" },
|
||||
{ label: "单位", value: "unitName" },
|
||||
{ label: "单位编码", value: "unitId" },
|
||||
@@ -314,3 +309,4 @@ layout("/layouts/platform.html"){
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
|
||||
|
||||
@@ -30,8 +30,7 @@ const MSG_FORM_TEMPLATE = {
|
||||
<el-table-column prop="username" label="姓名" width="120"></el-table-column>
|
||||
<el-table-column prop="sex" label="性别" width="50"></el-table-column>
|
||||
<el-table-column prop="userState" label="在职状态" width="120"></el-table-column>
|
||||
<el-table-column prop="personType" label="教职工类别" width="120"></el-table-column>
|
||||
<el-table-column prop="preparedBy" label="编制类别" width="120"></el-table-column>
|
||||
<el-table-column prop="personType" label="人员类型" width="120"></el-table-column>
|
||||
<el-table-column prop="mobile" label="手机" width="120"></el-table-column>
|
||||
<el-table-column prop="unitName" label="所属单位" show-overflow-tooltip></el-table-column>
|
||||
<el-table-column prop="unionName" label="所属工会" show-overflow-tooltip></el-table-column>
|
||||
@@ -93,8 +92,7 @@ const MSG_FORM_TEMPLATE = {
|
||||
<el-table-column prop="username" label="姓名" width="120"></el-table-column>
|
||||
<el-table-column prop="sex" label="性别" width="50"></el-table-column>
|
||||
<el-table-column prop="userState" label="在职状态" width="120"></el-table-column>
|
||||
<el-table-column prop="personType" label="教职工类别" width="120"></el-table-column>
|
||||
<el-table-column prop="preparedBy" label="编制类别" width="120"></el-table-column>
|
||||
<el-table-column prop="personType" label="人员类型" width="120"></el-table-column>
|
||||
<el-table-column prop="mobile" label="手机" width="120"></el-table-column>
|
||||
<el-table-column prop="unitName" label="所属单位" show-overflow-tooltip></el-table-column>
|
||||
<el-table-column prop="unionName" label="所属工会" show-overflow-tooltip></el-table-column>
|
||||
@@ -262,3 +260,4 @@ const MSG_FORM_TEMPLATE = {
|
||||
this.roleList = await this.getRoleList()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+106
-42
@@ -38,7 +38,7 @@ layout("/layouts/platform.html"){
|
||||
<div class="search-item-label">活动项目</div>
|
||||
<div class="search-item-option">
|
||||
<el-select v-model="pageForm.eventId" placeholder="请选择活动项目" filterable clearable
|
||||
style="width: 100%" @change="doSearchS">
|
||||
style="width: 100%" @change="doSearch">
|
||||
<el-option
|
||||
v-for="item in events"
|
||||
:key="item.eventId"
|
||||
@@ -49,6 +49,51 @@ layout("/layouts/platform.html"){
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">男子女子</div>
|
||||
<div class="search-item-option">
|
||||
<el-select v-model="pageForm.isMenWomen" placeholder="请选择男子女子" clearable
|
||||
style="width: 100%" @change="doSearch">
|
||||
<el-option
|
||||
v-for="item in menWomenList"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">项目类型</div>
|
||||
<div class="search-item-option">
|
||||
<el-select v-model="pageForm.projectType" placeholder="请选择项目类型" clearable
|
||||
style="width: 100%" @change="doSearch">
|
||||
<el-option
|
||||
v-for="item in projectTypeList"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">比赛组别</div>
|
||||
<div class="search-item-option">
|
||||
<el-select v-model="pageForm.competitionCategory" placeholder="请选择比赛组别" filterable clearable
|
||||
style="width: 100%" @change="doSearch">
|
||||
<el-option
|
||||
v-for="item in groupList"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
</el-card>
|
||||
@@ -125,7 +170,7 @@ layout("/layouts/platform.html"){
|
||||
</template>
|
||||
|
||||
<template #edit_func>
|
||||
<el-button type="primary" @click="openAdd" v-if="awardsMode==1">临时获奖人员添加</el-button>
|
||||
<el-button type="primary" @click="openAdd">临时获奖人员添加</el-button>
|
||||
<el-button type="primary" @click="doAdd">确 定</el-button>
|
||||
</template>
|
||||
|
||||
@@ -394,8 +439,8 @@ layout("/layouts/platform.html"){
|
||||
</el-form-item>
|
||||
<el-form-item prop="sex" label="性  别">
|
||||
<el-radio-group v-model="formData.sex">
|
||||
<el-radio :label="'男性'" border>男性</el-radio>
|
||||
<el-radio :label="'女性'" border>女性</el-radio>
|
||||
<el-radio :label="'男'" border>男</el-radio>
|
||||
<el-radio :label="'女'" border>女</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item prop="unitId" label="所在单位">
|
||||
@@ -431,11 +476,14 @@ layout("/layouts/platform.html"){
|
||||
return {
|
||||
|
||||
userOptions: [],
|
||||
groupList: [
|
||||
{value: 1, name: "甲组"},
|
||||
{value: 2, name: "乙组"},
|
||||
{value: 3, name: "丙组"},
|
||||
{value: 4, name: "丁组"}
|
||||
groupList: [],
|
||||
menWomenList: [
|
||||
{id: 1, name: "男子"},
|
||||
{id: 2, name: "女子"}
|
||||
],
|
||||
projectTypeList: [
|
||||
{id: "1", name: "单项"},
|
||||
{id: "2", name: "团体"}
|
||||
],
|
||||
dialogVisible: false,
|
||||
viewData: [],
|
||||
@@ -465,7 +513,9 @@ layout("/layouts/platform.html"){
|
||||
{name: "第八名", id: 8}],
|
||||
sexList: [{sex: "男", id: 1}, {sex: "女", id: 2}],
|
||||
pageForm: {
|
||||
isMenWomen: [],
|
||||
isMenWomen: "",
|
||||
projectType: "",
|
||||
competitionCategory: "",
|
||||
year: new Date().getFullYear() + "",
|
||||
},
|
||||
formRules: {
|
||||
@@ -511,7 +561,7 @@ layout("/layouts/platform.html"){
|
||||
},
|
||||
async unitChange() {
|
||||
const unit = this.unitOptions.find(v => v.id === this.formData.unitId)
|
||||
this.$set(this.formData, "unionId", unit.id)
|
||||
this.$set(this.formData, "unionId", unit.unionId)
|
||||
this.$set(this.formData, "unionname", unit.unionName)
|
||||
this.$set(this.formData, "unitname", unit.name)
|
||||
},
|
||||
@@ -522,7 +572,7 @@ layout("/layouts/platform.html"){
|
||||
this.$set(this.formData, "awardsMode", this.awardsMode)
|
||||
this.$set(this.formData, "identity", ['1'])
|
||||
this.$set(this.formData, "status", 2)
|
||||
this.$set(this.formData, "sex", "男性")
|
||||
this.$set(this.formData, "sex", "男")
|
||||
this.dialogVisible = true
|
||||
if (this.$refs['form']) {
|
||||
this.$refs['form'].resetFields()
|
||||
@@ -545,8 +595,14 @@ layout("/layouts/platform.html"){
|
||||
pageForm.identity = JSON.stringify(this.formData.identity)
|
||||
const resp = await this.$axios.post(loc() + "/doAddUser", pageForm)
|
||||
if (resp.code === 0) {
|
||||
await this.userChange()
|
||||
this.userDetailsChange()
|
||||
if (this.awardsMode == 2) {
|
||||
this.unionList = await this.getUnionList({activityId: this.activityId, eventId: this.eventId})
|
||||
this.userData = await this.getUnionData({activityId: this.activityId, eventId: this.eventId})
|
||||
await this.unionDetailsChange()
|
||||
} else {
|
||||
await this.userChange()
|
||||
this.userDetailsChange()
|
||||
}
|
||||
this.dialogVisible = false
|
||||
} else {
|
||||
this.notifyWarning(resp.msg)
|
||||
@@ -554,21 +610,24 @@ layout("/layouts/platform.html"){
|
||||
}
|
||||
})
|
||||
},
|
||||
async yearChange() {
|
||||
yearChange() {
|
||||
this.activityList = []
|
||||
this.events = []
|
||||
this.$set(this.pageForm, "activityId", "")
|
||||
this.$set(this.pageForm, "eventId", "")
|
||||
const {data} = await this.$axios.post("/platform/activity/score/statistics/getActivitys", {year: this.pageForm.year})
|
||||
this.activityList = data
|
||||
if (data.length > 0) {
|
||||
this.pageForm.activityId = this.activityList[0].id
|
||||
}
|
||||
await this.doSearchS()
|
||||
this.$axios.post("/platform/activity/score/statistics/getActivitys", {year: this.pageForm.year}).then((res) => {
|
||||
const data = res.data
|
||||
this.activityList = data
|
||||
if (data.length > 0) {
|
||||
this.pageForm.activityId = this.activityList[0].id
|
||||
}
|
||||
this.doSearchS()
|
||||
})
|
||||
},
|
||||
async changeActivit() {
|
||||
const resp = await this.$axios.post("/platform/activity/apply/getEvents", {activityId: this.pageForm.activityId})
|
||||
this.events = resp.data
|
||||
changeActivit() {
|
||||
return this.$axios.post("/platform/activity/apply/getEvents", {activityId: this.pageForm.activityId}).then((resp) => {
|
||||
this.events = resp.data
|
||||
})
|
||||
},
|
||||
async doAdd() {
|
||||
|
||||
@@ -802,25 +861,34 @@ layout("/layouts/platform.html"){
|
||||
|
||||
|
||||
},
|
||||
async getActivitys() {
|
||||
const {data} = await this.$axios.post("/platform/activity/score/statistics/getActivitys", {year: this.pageForm.year})
|
||||
return data;
|
||||
|
||||
getActivitys() {
|
||||
return this.$axios.post("/platform/activity/score/statistics/getActivitys", {year: this.pageForm.year}).then((res) => {
|
||||
return res.data
|
||||
})
|
||||
},
|
||||
async doSearchS() {
|
||||
this.doSearch()
|
||||
await this.changeActivit()
|
||||
focusGroup() {
|
||||
this.$axios.post("/platform/activity/basic/event/focusGroup").then((resp) => {
|
||||
if (resp.code === 0) {
|
||||
this.groupList = resp.data
|
||||
} else {
|
||||
this.notifyWarning(resp.msg)
|
||||
}
|
||||
})
|
||||
},
|
||||
doSearchS() {
|
||||
this.$set(this.pageForm, "eventId", "")
|
||||
this.changeActivit().then(() => {
|
||||
this.doSearch()
|
||||
})
|
||||
},
|
||||
doSearch() {
|
||||
this.pageForm.pageNumber = 1
|
||||
this.pageData()
|
||||
},
|
||||
pageData() {
|
||||
this.tabLoading = true
|
||||
this.tableLoading = true
|
||||
const pageForm = clone(this.pageForm)
|
||||
pageForm.isMenWomen = JSON.stringify(pageForm.isMenWomen)
|
||||
this.$axios.post("/platform/activity/results/input/pageData", pageForm).then(resp => {
|
||||
this.tabLoading = false
|
||||
if (resp.code == 0) {
|
||||
this.tableData = resp.data.list;
|
||||
this.pageForm.totalCount = resp.data.totalCount;
|
||||
@@ -830,20 +898,16 @@ layout("/layouts/platform.html"){
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}).finally(() => {
|
||||
this.tableLoading = false
|
||||
})
|
||||
|
||||
},
|
||||
},
|
||||
|
||||
async created() {
|
||||
created() {
|
||||
this.focusGroup()
|
||||
this.yearChange()
|
||||
// this.pageData()
|
||||
this.activityList = await this.getActivitys()
|
||||
if (this.activityList.length) {
|
||||
this.pageForm.activityId = this.activityList[0].id
|
||||
}
|
||||
await this.changeActivit()
|
||||
this.pageData()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
@@ -586,13 +586,13 @@ var ACTIVITY_SPORTS_APPLY_USER = {
|
||||
message = teamName + "替补最多设置" + substituteNum + "人"
|
||||
break
|
||||
}
|
||||
const womanYdyNum = teamApplyData[i].filter((v) => ["女", "女性"].includes(v.sex) && v.identity.includes("1")).length
|
||||
const womanYdyNum = teamApplyData[i].filter((v) => ["女"].includes(v.sex) && v.identity.includes("1")).length
|
||||
if (restrictGirlNum > 0 && womanYdyNum < restrictGirlNum) {
|
||||
msgFlag = false
|
||||
message = teamName + "女运动员至少设置" + restrictGirlNum + "人"
|
||||
break
|
||||
}
|
||||
const manYdyNum = teamApplyData[i].filter((v) => ["男", "男性"].includes(v.sex) && v.identity.includes("1")).length
|
||||
const manYdyNum = teamApplyData[i].filter((v) => ["男"].includes(v.sex) && v.identity.includes("1")).length
|
||||
if (restrictBoyNum > 0 && manYdyNum < restrictBoyNum) {
|
||||
msgFlag = false
|
||||
message = teamName + "男运动员至少设置" + restrictBoyNum + "人"
|
||||
@@ -675,7 +675,7 @@ var ACTIVITY_SPORTS_APPLY_USER = {
|
||||
) {
|
||||
this.$notify({
|
||||
title: "警告",
|
||||
message: "该项目暂不支持男性运动员报名",
|
||||
message: "该项目暂不支持男运动员报名",
|
||||
type: "warning"
|
||||
})
|
||||
return
|
||||
@@ -689,7 +689,7 @@ var ACTIVITY_SPORTS_APPLY_USER = {
|
||||
) {
|
||||
this.$notify({
|
||||
title: "警告",
|
||||
message: "该项目暂不支持女性运动员报名",
|
||||
message: "该项目暂不支持女运动员报名",
|
||||
type: "warning"
|
||||
})
|
||||
return
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
let ACTIVITY_SPORTS_ADD_ACTIVITY = {
|
||||
let ACTIVITY_SPORTS_ADD_ACTIVITY = {
|
||||
template: `
|
||||
<div>
|
||||
<el-steps :active="active" finish-status="success" simple>
|
||||
@@ -1193,7 +1193,7 @@ let ACTIVITY_SPORTS_ADD_ACTIVITY = {
|
||||
options: [{label: '男', value: '男'}, {label: '女', value: '女'}]
|
||||
},
|
||||
{label: '在职状态', value: 'userState', type: "select", options: userStateOptions},
|
||||
{label: '教职工类别', value: 'personType', type: "select", options: personTypeOptions},
|
||||
{label: '人员类型', value: 'personType', type: "select", options: personTypeOptions},
|
||||
]*/
|
||||
}
|
||||
},
|
||||
@@ -1206,3 +1206,4 @@ let ACTIVITY_SPORTS_ADD_ACTIVITY = {
|
||||
this.unitOptions = this.clubOptions.concat(units)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<!--#
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
@@ -52,7 +52,7 @@ layout("/layouts/platform.html"){
|
||||
</el-select>
|
||||
</search-item>
|
||||
|
||||
<search-item label="教职工类别:">
|
||||
<search-item label="人员类型:">
|
||||
<dict-select clearable code="USER_PERSON_TYPE" multiple placeholder="请选择人员类型" v-model="pageForm.personTypes"></dict-select>
|
||||
</search-item>
|
||||
<search-item label="在职状态:">
|
||||
@@ -124,7 +124,7 @@ layout("/layouts/platform.html"){
|
||||
{ prop: "userName", label: "姓名" },
|
||||
{ prop: "sex", label: "性别", sortable: true },
|
||||
{ prop: "mobile", label: "联系方式" },
|
||||
{ prop: "personType", label: "教职工类别", sortable: true },
|
||||
{ prop: "personType", label: "人员类型", sortable: true },
|
||||
{ prop: "userState", label: "在职状态", sortable: true },
|
||||
{ prop: "unionName", label: "所属工会", sortable: true },
|
||||
{ prop: "unitName", label: "所属单位", sortable: true }
|
||||
@@ -218,3 +218,4 @@ layout("/layouts/platform.html"){
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<!--#
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
@@ -59,7 +59,7 @@ layout("/layouts/platform.html"){
|
||||
</el-select>
|
||||
</search-item>
|
||||
|
||||
<search-item label="教职工类别:">
|
||||
<search-item label="人员类型:">
|
||||
<dict-select clearable code="USER_PERSON_TYPE" multiple placeholder="请选择人员类型" v-model="pageForm.personTypes"></dict-select>
|
||||
</search-item>
|
||||
<search-item label="在职状态:">
|
||||
@@ -192,7 +192,7 @@ layout("/layouts/platform.html"){
|
||||
{ prop: "loginName", label: "工号" },
|
||||
{ prop: "userName", label: "姓名" },
|
||||
{ prop: "sex", label: "性别", sortable: true },
|
||||
{ prop: "personType", label: "教职工类别", sortable: true },
|
||||
{ prop: "personType", label: "人员类型", sortable: true },
|
||||
{ prop: "userState", label: "在职状态", sortable: true },
|
||||
{ prop: "unionName", label: "所属工会", sortable: true },
|
||||
{ prop: "unitName", label: "所属单位", sortable: true },
|
||||
@@ -258,3 +258,4 @@ layout("/layouts/platform.html"){
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
const EXAMINE_INFO_COMPONENT = {
|
||||
const EXAMINE_INFO_COMPONENT = {
|
||||
template: `
|
||||
<div>
|
||||
<el-tabs tab-position="top" v-model="activeName">
|
||||
@@ -19,7 +19,7 @@ const EXAMINE_INFO_COMPONENT = {
|
||||
<div class="process-title">社团成员变化情况</div>
|
||||
<el-table :data="viewData.changeUserNum" max-height="300">
|
||||
<el-table-column label="序号" type="index" width="50"></el-table-column>
|
||||
<el-table-column label="教职工类别" prop="userState"></el-table-column>
|
||||
<el-table-column label="人员类型" prop="userState"></el-table-column>
|
||||
<el-table-column label="年初人员" prop="yearFirstNum"></el-table-column>
|
||||
<el-table-column label="年度增加" prop="yearAddNum"></el-table-column>
|
||||
<el-table-column label="年度减少" prop="yearReduceNum"></el-table-column>
|
||||
@@ -196,3 +196,4 @@ const EXAMINE_INFO_COMPONENT = {
|
||||
}
|
||||
`
|
||||
}
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<!--#
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style></style>
|
||||
@@ -16,7 +16,7 @@ layout("/layouts/platform.html"){
|
||||
<search-item label="姓名/工号">
|
||||
<el-input placeholder="请输入姓名或工号" clearable v-model="pageForm.searchKeyword"></el-input>
|
||||
</search-item>
|
||||
<search-item label="教职工类别">
|
||||
<search-item label="人员类型">
|
||||
<dict-select code="USER_PERSON_TYPE" placeholder="请选择人员类型" clearable v-model="pageForm.personType"></dict-select>
|
||||
</search-item>
|
||||
<search-item label="在职状态">
|
||||
@@ -98,3 +98,4 @@ layout("/layouts/platform.html"){
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
const CLUB_INFO_MANAGE_TEMPLATE = {
|
||||
const CLUB_INFO_MANAGE_TEMPLATE = {
|
||||
template: `
|
||||
<div>
|
||||
<el-card shadow="never">
|
||||
@@ -6,7 +6,7 @@ const CLUB_INFO_MANAGE_TEMPLATE = {
|
||||
<search-item label="姓名/工号">
|
||||
<el-input placeholder="请输入姓名或工号" clearable v-model="pageForm.searchKeyword"></el-input>
|
||||
</search-item>
|
||||
<search-item label="教职工类别">
|
||||
<search-item label="人员类型">
|
||||
<dict-select code="USER_PERSON_TYPE" placeholder="请选择人员类型" clearable v-model="pageForm.personType"></dict-select>
|
||||
</search-item>
|
||||
<search-item label="在职状态">
|
||||
@@ -353,3 +353,4 @@ const CLUB_INFO_MANAGE_TEMPLATE = {
|
||||
await this.pageData()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+4
-8
@@ -35,14 +35,10 @@ layout("/layouts/platform.html"){
|
||||
<dict-select v-model="pageForm.userStates" placeholder="请选择在职状态" @change="doSearch"
|
||||
code="USER_STATE" multiple collapse-tags></dict-select>
|
||||
</search-item>
|
||||
<search-item label="教职工类别">
|
||||
<dict-select v-model="pageForm.personTypes" placeholder="请选择教职工类别" @change="doSearch"
|
||||
<search-item label="人员类型">
|
||||
<dict-select v-model="pageForm.personTypes" placeholder="请选择人员类型" @change="doSearch"
|
||||
code="USER_PERSON_TYPE" multiple collapse-tags></dict-select>
|
||||
</search-item>
|
||||
<search-item label="编制类别">
|
||||
<dict-select v-model="pageForm.preparedBys" placeholder="请选择编制类别" @change="doSearch"
|
||||
code="USER_PREPARED_BY_TYPE" multiple collapse-tags></dict-select>
|
||||
</search-item>
|
||||
</search>
|
||||
</el-card>
|
||||
<el-card shadow="never">
|
||||
@@ -105,8 +101,7 @@ layout("/layouts/platform.html"){
|
||||
{ label: "性别", prop: "sex" },
|
||||
{ label: "出生年月", prop: "birthday" },
|
||||
{ label: "在职状态", prop: "userState", sortable: true },
|
||||
{ label: "教职工类别", prop: "personType", sortable: true },
|
||||
{ label: '编制类别', prop: 'preparedBy', sortable: true },
|
||||
{ label: "人员类型", prop: "personType", sortable: true },
|
||||
{ label: "所属工会", prop: "unionName" },
|
||||
{ label: "所属单位", prop: "unitName" },
|
||||
],
|
||||
@@ -183,3 +178,4 @@ layout("/layouts/platform.html"){
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
|
||||
|
||||
@@ -39,14 +39,10 @@ layout("/layouts/platform.html"){
|
||||
<dict-select v-model="pageForm.userStates" placeholder="请选择在职状态" @change="doSearch"
|
||||
code="USER_STATE" multiple collapse-tags></dict-select>
|
||||
</search-item>
|
||||
<search-item label="教职工类别">
|
||||
<dict-select v-model="pageForm.personTypes" placeholder="请选择教职工类别" @change="doSearch"
|
||||
<search-item label="人员类型">
|
||||
<dict-select v-model="pageForm.personTypes" placeholder="请选择人员类型" @change="doSearch"
|
||||
code="USER_PERSON_TYPE" multiple collapse-tags></dict-select>
|
||||
</search-item>
|
||||
<search-item label="编制类别">
|
||||
<dict-select v-model="pageForm.preparedBys" placeholder="请选择编制类别" @change="doSearch"
|
||||
code="USER_PREPARED_BY_TYPE" multiple collapse-tags></dict-select>
|
||||
</search-item>
|
||||
</search>
|
||||
</el-card>
|
||||
<el-card shadow="never">
|
||||
@@ -113,8 +109,7 @@ layout("/layouts/platform.html"){
|
||||
{ label: "性别", prop: "sex" },
|
||||
{ label: "出生年月", prop: "birthday" },
|
||||
{ label: "在职状态", prop: "userState", sortable: true },
|
||||
{ label: "教职工类别", prop: "personType", sortable: true },
|
||||
{ label: '编制类别', prop: 'preparedBy', sortable: true },
|
||||
{ label: "人员类型", prop: "personType", sortable: true },
|
||||
{ label: "所属工会", prop: "unionName" },
|
||||
{ label: "所属单位", prop: "unitName" },
|
||||
{ label: "加入时间", prop: "joinTime" },
|
||||
@@ -219,3 +214,4 @@ layout("/layouts/platform.html"){
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
|
||||
|
||||
+2
-2
@@ -436,8 +436,7 @@ layout("/layouts/platform.html"){
|
||||
{label: "年龄", value: "age"},
|
||||
{label: "婚姻状况", value: "marriage"},
|
||||
{label: "在职状态", value: "userState"},
|
||||
{label: "编制类别", value: "preparedBy"},
|
||||
{label: "教职工类别", value: "personType"},
|
||||
{label: "人员类型", value: "personType"},
|
||||
],
|
||||
conditionGroup: {
|
||||
logic: "AND",
|
||||
@@ -701,3 +700,4 @@ layout("/layouts/platform.html"){
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<!--#
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<div id="app" v-cloak>
|
||||
@@ -43,8 +43,8 @@ layout("/layouts/platform.html"){
|
||||
<dict-select v-model="pageForm.userState" placeholder="在职状态" @change="doSearch"
|
||||
code="USER_STATE"></dict-select>
|
||||
</search-item>
|
||||
<search-item label="教职工类别">
|
||||
<dict-select v-model="pageForm.personType" placeholder="教职工类别" @change="doSearch"
|
||||
<search-item label="人员类型">
|
||||
<dict-select v-model="pageForm.personType" placeholder="人员类型" @change="doSearch"
|
||||
code="USER_PERSON_TYPE"></dict-select>
|
||||
</search-item>
|
||||
</search>
|
||||
@@ -249,7 +249,7 @@ layout("/layouts/platform.html"){
|
||||
{prop: 'username', label: '姓名', sortable: true},
|
||||
{prop: 'sex', label: '性别'},
|
||||
{prop: 'mobile', label: '联系电话'},
|
||||
{prop: 'personType', label: '教职工类别', sortable: true},
|
||||
{prop: 'personType', label: '人员类型', sortable: true},
|
||||
{prop: 'userState', label: '在职状态', sortable: true},
|
||||
{prop: 'unionName', label: '所属工会', sortable: true},
|
||||
{prop: 'unitName', label: '所属单位', sortable: true},
|
||||
@@ -460,3 +460,4 @@ layout("/layouts/platform.html"){
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
|
||||
|
||||
@@ -31,8 +31,7 @@ const meetingInfo = {
|
||||
<el-table-column prop="userName" label="姓名" width="120"></el-table-column>
|
||||
<el-table-column prop="sex" label="性别" width="50"></el-table-column>
|
||||
<el-table-column prop="userState" label="在职状态" width="120"></el-table-column>
|
||||
<el-table-column prop="personType" label="教职工类别" width="120"></el-table-column>
|
||||
<el-table-column prop="preparedBy" label="编制类别" width="120"></el-table-column>
|
||||
<el-table-column prop="personType" label="人员类型" width="120"></el-table-column>
|
||||
<el-table-column prop="mobile" label="手机" width="120"></el-table-column>
|
||||
<el-table-column prop="unitName" label="所属单位" show-overflow-tooltip></el-table-column>
|
||||
<el-table-column prop="unionName" label="所属工会" show-overflow-tooltip></el-table-column>
|
||||
@@ -68,3 +67,4 @@ const meetingInfo = {
|
||||
}
|
||||
`
|
||||
}
|
||||
|
||||
|
||||
@@ -114,8 +114,7 @@ const basicForm = {
|
||||
<el-table-column prop="userName" label="姓名" width="120"></el-table-column>
|
||||
<el-table-column prop="sex" label="性别" width="50"></el-table-column>
|
||||
<el-table-column prop="userState" label="在职状态" width="120"></el-table-column>
|
||||
<el-table-column prop="personType" label="教职工类别" width="120"></el-table-column>
|
||||
<el-table-column prop="preparedBy" label="编制类别" width="120"></el-table-column>
|
||||
<el-table-column prop="personType" label="人员类型" width="120"></el-table-column>
|
||||
<el-table-column prop="mobile" label="手机" width="120"></el-table-column>
|
||||
<el-table-column prop="unitName" label="所属单位" show-overflow-tooltip></el-table-column>
|
||||
<el-table-column prop="unionName" label="所属工会" show-overflow-tooltip></el-table-column>
|
||||
@@ -178,8 +177,7 @@ const basicForm = {
|
||||
<el-table-column prop="userName" label="姓名" width="120"></el-table-column>
|
||||
<el-table-column prop="sex" label="性别" width="50"></el-table-column>
|
||||
<el-table-column prop="userState" label="在职状态" width="120"></el-table-column>
|
||||
<el-table-column prop="personType" label="教职工类别" width="120"></el-table-column>
|
||||
<el-table-column prop="preparedBy" label="编制类别" width="120"></el-table-column>
|
||||
<el-table-column prop="personType" label="人员类型" width="120"></el-table-column>
|
||||
<el-table-column prop="mobile" label="手机" width="120"></el-table-column>
|
||||
<el-table-column prop="unitName" label="所属单位" show-overflow-tooltip></el-table-column>
|
||||
<el-table-column prop="unionName" label="所属工会" show-overflow-tooltip></el-table-column>
|
||||
@@ -394,3 +392,4 @@ const basicForm = {
|
||||
|
||||
`
|
||||
}
|
||||
|
||||
|
||||
+4
-4
@@ -249,24 +249,24 @@ layout("/layouts/platform.html"){
|
||||
async getActivityBudgetType() {
|
||||
const data = await this.$businessTool.getDictOptions("ACTIVITY_BUDGET_TYPE")
|
||||
let budgetTypeOption = []
|
||||
if (this.$auth.hasRoleOr(['SYSADMIN'])) {
|
||||
if (this.$auth.hasPermission(['activity.budget.apply.system'])) {
|
||||
this.budgetTypeOption = data
|
||||
} else {
|
||||
if (this.$auth.hasRoleOr(['SCHOOL_UNION_ADMIN'])) {
|
||||
if (this.$auth.hasPermission(['activity.budget.apply.schoolAdmin'])) {
|
||||
data.map(v => {
|
||||
if (["ACTIVITY_BUDGET_TYPE_ONE"].includes(v.code)) {
|
||||
budgetTypeOption.push(v)
|
||||
}
|
||||
})
|
||||
}
|
||||
if (this.$auth.hasRoleOr(['BRANCH_UNION_ADMIN', 'BRANCH_UNION_CHAIRMAN'])) {
|
||||
if (this.$auth.hasPermission(['activity.budget.apply.branchAdmin'])) {
|
||||
data.map(v => {
|
||||
if (["ACTIVITY_BUDGET_TYPE_TWO"].includes(v.code)) {
|
||||
budgetTypeOption.push(v)
|
||||
}
|
||||
})
|
||||
}
|
||||
if (this.$auth.hasRoleOr(['CLUB_PRESIDENT'])) {
|
||||
if (this.$auth.hasPermission(['activity.budget.apply.clubPresident'])) {
|
||||
data.map(v => {
|
||||
if (["ACTIVITY_BUDGET_TYPE_THREE"].includes(v.code)) {
|
||||
budgetTypeOption.push(v)
|
||||
|
||||
+186
-20
@@ -98,13 +98,54 @@ layout("/layouts/platform.html"){
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
|
||||
<el-dialog title="一键分配所有工会额度" :visible.sync="batchAllocateDialogVisible" width="500px">
|
||||
<el-dialog title="一键分配所有工会额度" :visible.sync="batchAllocateDialogVisible" width="700px">
|
||||
<el-form :model="batchAllocateForm" label-width="120px">
|
||||
<el-form-item label="统一分配额度">
|
||||
<el-form-item label="分配模式">
|
||||
<el-radio-group v-model="batchAllocateForm.allocateMode">
|
||||
<el-radio label="uniform">统一分配</el-radio>
|
||||
<el-radio label="import">导入分配</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="统一分配额度" v-if="batchAllocateForm.allocateMode === 'uniform'">
|
||||
<el-input-number v-model="batchAllocateForm.allocateMoney" :min="0" :precision="2"
|
||||
style="width: 100%" placeholder="请输入每个工会的分配额度">
|
||||
</el-input-number>
|
||||
</el-form-item>
|
||||
<template v-else>
|
||||
<el-form-item label="导入模板">
|
||||
<el-button type="primary" plain icon="el-icon-download" @click="downloadImportTemplate">下载模板</el-button>
|
||||
<div class="text-secondary mt5">请按模板填写工会编码和分配额度,导入后将按工会逐条分配。</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="上传文件">
|
||||
<el-upload
|
||||
name="file"
|
||||
ref="importUploadRef"
|
||||
:limit="1"
|
||||
action="/platform/outlay/outlayManage/unionAllocate/readImportExcel"
|
||||
:on-success="onImportSuccess"
|
||||
:on-remove="onImportRemove"
|
||||
:before-upload="beforeImportUpload"
|
||||
:file-list="importFileList"
|
||||
drag>
|
||||
<i class="el-icon-upload"></i>
|
||||
<div class="el-upload__text">将Excel文件拖到此处,或<em>点击上传</em></div>
|
||||
</el-upload>
|
||||
</el-form-item>
|
||||
<el-form-item label="导入预览" v-if="batchAllocateForm.importPreviewList.length > 0">
|
||||
<el-table :data="batchAllocateForm.importPreviewList" border size="mini" max-height="260">
|
||||
<el-table-column type="index" label="序号" width="60"></el-table-column>
|
||||
<el-table-column prop="unionCode" label="工会编码" min-width="120"></el-table-column>
|
||||
<el-table-column prop="unionName" label="工会名称" min-width="160"></el-table-column>
|
||||
<el-table-column prop="allocateMoney" label="分配额度" min-width="120"></el-table-column>
|
||||
<el-table-column prop="errMsg" label="校验结果" min-width="180">
|
||||
<template slot-scope="{row}">
|
||||
<span class="text-danger" v-if="row.errMsg">{{row.errMsg}}</span>
|
||||
<span class="text-success" v-else>通过</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-form>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="batchAllocateDialogVisible = false">取 消</el-button>
|
||||
@@ -137,11 +178,44 @@ layout("/layouts/platform.html"){
|
||||
quarterlyList: [],
|
||||
batchAllocateDialogVisible: false,
|
||||
batchAllocateForm: {
|
||||
allocateMoney: 0
|
||||
}
|
||||
allocateMode: "uniform",
|
||||
allocateMoney: 0,
|
||||
importPreviewList: []
|
||||
},
|
||||
importFileList: []
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
/**
|
||||
* 确认提示文案优先展示页面当前筛选季度。
|
||||
* 未选择季度时再回退到系统当前自然季度,避免提示文案与用户当前查看条件不一致。
|
||||
*/
|
||||
getPromptQuarter() {
|
||||
return this.pageForm.quarterly || this.$moment().quarter()
|
||||
},
|
||||
/**
|
||||
* 季度记录生成、重置记录都要按页面当前筛选的年度和季度执行。
|
||||
* 这里统一封装请求参数,避免前后端再次出现“提示季度”和“实际执行季度”不一致的问题。
|
||||
*/
|
||||
getCurrentQuarterParams() {
|
||||
return {
|
||||
quarterly: this.pageForm.quarterly || this.$moment().quarter(),
|
||||
year: this.pageForm.year
|
||||
}
|
||||
},
|
||||
/**
|
||||
* 生成、重置、一键分配都只允许操作当前自然季度。
|
||||
* 这里统一做前端入口校验,避免同类判断分散在多个按钮方法里难维护。
|
||||
*/
|
||||
validateCurrentQuarterAction(actionName) {
|
||||
const currentQuarter = this.$moment().quarter()
|
||||
const selectedQuarter = Number(this.getCurrentQuarterParams().quarterly)
|
||||
if (selectedQuarter !== currentQuarter) {
|
||||
this.$message.warning('当前仅允许操作第' + currentQuarter + '季度' + actionName + ',请切换后再操作')
|
||||
return false
|
||||
}
|
||||
return true
|
||||
},
|
||||
doEdit(row) {
|
||||
this.$confirm('确定要给【' + row.unionName + '】分配预算吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
@@ -163,13 +237,21 @@ layout("/layouts/platform.html"){
|
||||
})
|
||||
},
|
||||
deleteAllocateRecord() {
|
||||
this.$confirm('确定要重置【第' + this.$moment().quarter() + '季度】的预算记录吗?', '提示', {
|
||||
if (!this.validateCurrentQuarterAction('记录重置')) {
|
||||
return
|
||||
}
|
||||
// 重置动作以当前列表是否已有记录为前置条件,避免用户在空列表场景下误操作。
|
||||
if (this.tableData.length === 0) {
|
||||
this.$message.warning('当前列表无可重置记录')
|
||||
return
|
||||
}
|
||||
this.$confirm('确定要重置【第' + this.getPromptQuarter() + '季度】的预算记录吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
this.formLoading = true
|
||||
this.$axios.post("/platform/outlay/outlayManage/unionAllocate/deleteAllocateRecord").then((resp) => {
|
||||
this.$axios.post("/platform/outlay/outlayManage/unionAllocate/deleteAllocateRecord", this.getCurrentQuarterParams()).then((resp) => {
|
||||
if (resp.code === 0) {
|
||||
this.$message.success(resp.msg)
|
||||
this.doSearch()
|
||||
@@ -180,13 +262,16 @@ layout("/layouts/platform.html"){
|
||||
})
|
||||
},
|
||||
doAllocateRecord() {
|
||||
this.$confirm('确定要生成【第' + this.$moment().quarter() + '季度】的预算记录吗?', '提示', {
|
||||
if (!this.validateCurrentQuarterAction('记录生成')) {
|
||||
return
|
||||
}
|
||||
this.$confirm('确定要生成【第' + this.getPromptQuarter() + '季度】的预算记录吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
this.formLoading = true
|
||||
this.$axios.post("/platform/outlay/outlayManage/unionAllocate/doAllocateRecord").then((resp) => {
|
||||
this.$axios.post("/platform/outlay/outlayManage/unionAllocate/doAllocateRecord", this.getCurrentQuarterParams()).then((resp) => {
|
||||
if (resp.code === 0) {
|
||||
this.$message.success(resp.msg)
|
||||
this.doSearch()
|
||||
@@ -197,28 +282,109 @@ layout("/layouts/platform.html"){
|
||||
})
|
||||
},
|
||||
showBatchAllocateDialog() {
|
||||
if (!this.validateCurrentQuarterAction('一键分配')) {
|
||||
return
|
||||
}
|
||||
if (this.tableData.length === 0) {
|
||||
this.$message.warning('当前没有可分配的工会记录,请先生成季度记录')
|
||||
return
|
||||
}
|
||||
this.batchAllocateForm = {
|
||||
allocateMoney: 0
|
||||
const currentParams = this.getCurrentQuarterParams()
|
||||
const openDialog = () => {
|
||||
this.resetBatchAllocateForm()
|
||||
this.batchAllocateDialogVisible = true
|
||||
}
|
||||
this.batchAllocateDialogVisible = true
|
||||
this.$axios.post("/platform/outlay/outlayManage/unionAllocate/hasAllocated", {
|
||||
quarterly: currentParams.quarterly,
|
||||
year: currentParams.year
|
||||
}).then((resp) => {
|
||||
if (resp.code !== 0) {
|
||||
return
|
||||
}
|
||||
if (resp.data) {
|
||||
this.$confirm('温馨提示:当前季度已分配过额度,再次分配将覆盖本季度原有分配结果,是否继续?', '温馨提示', {
|
||||
confirmButtonText: '继续',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
openDialog()
|
||||
}).catch(() => {
|
||||
})
|
||||
} else {
|
||||
openDialog()
|
||||
}
|
||||
})
|
||||
},
|
||||
resetBatchAllocateForm() {
|
||||
this.batchAllocateForm = {
|
||||
allocateMode: "uniform",
|
||||
allocateMoney: 0,
|
||||
importPreviewList: []
|
||||
}
|
||||
this.importFileList = []
|
||||
},
|
||||
downloadImportTemplate() {
|
||||
this.$downLoad("/platform/outlay/outlayManage/unionAllocate/downloadImportTemplate")
|
||||
},
|
||||
beforeImportUpload(file) {
|
||||
const suffix = file.name.split(".").pop()
|
||||
if (["xls", "xlsx"].indexOf(suffix) === -1) {
|
||||
this.$message.warning("请上传xls或xlsx格式文件")
|
||||
return false
|
||||
}
|
||||
return true
|
||||
},
|
||||
onImportSuccess(resp, file, fileList) {
|
||||
this.importFileList = fileList.slice(-1)
|
||||
if (resp.code === 0) {
|
||||
this.$set(this.batchAllocateForm, "importPreviewList", resp.data || [])
|
||||
} else {
|
||||
this.$message.error(resp.msg)
|
||||
this.importFileList = []
|
||||
this.$set(this.batchAllocateForm, "importPreviewList", [])
|
||||
}
|
||||
},
|
||||
onImportRemove() {
|
||||
this.importFileList = []
|
||||
this.$set(this.batchAllocateForm, "importPreviewList", [])
|
||||
},
|
||||
doBatchAllocate() {
|
||||
if (!this.batchAllocateForm.allocateMoney || this.batchAllocateForm.allocateMoney <= 0) {
|
||||
this.$message.warning('请输入有效的分配额度')
|
||||
const currentParams = this.getCurrentQuarterParams()
|
||||
if (this.batchAllocateForm.allocateMode === "uniform") {
|
||||
if (!this.batchAllocateForm.allocateMoney || this.batchAllocateForm.allocateMoney <= 0) {
|
||||
this.$message.warning('请输入有效的分配额度')
|
||||
return
|
||||
}
|
||||
this.formLoading = true
|
||||
this.$axios.post("/platform/outlay/outlayManage/unionAllocate/doBatchAllocate", {
|
||||
allocateMoney: this.batchAllocateForm.allocateMoney,
|
||||
quarterly: currentParams.quarterly,
|
||||
year: currentParams.year
|
||||
}).then((resp) => {
|
||||
if (resp.code === 0) {
|
||||
this.$message.success(resp.msg)
|
||||
this.batchAllocateDialogVisible = false
|
||||
this.doSearch()
|
||||
}
|
||||
}).finally(() => {
|
||||
this.formLoading = false
|
||||
})
|
||||
return
|
||||
}
|
||||
if (this.batchAllocateForm.importPreviewList.length === 0) {
|
||||
this.$message.warning("请先上传导入文件")
|
||||
return
|
||||
}
|
||||
const hasErrorRow = this.batchAllocateForm.importPreviewList.some((item) => item.errMsg)
|
||||
if (hasErrorRow) {
|
||||
this.$message.warning("导入数据存在校验未通过的记录,请修正后重新上传")
|
||||
return
|
||||
}
|
||||
|
||||
const quarter = this.$moment().quarter()
|
||||
|
||||
this.formLoading = true
|
||||
this.$axios.post("/platform/outlay/outlayManage/unionAllocate/doBatchAllocate", {
|
||||
allocateMoney: this.batchAllocateForm.allocateMoney,
|
||||
quarterly: quarter,
|
||||
year: this.pageForm.year
|
||||
this.$axios.post("/platform/outlay/outlayManage/unionAllocate/doImportAllocate", {
|
||||
data: JSON.stringify(this.batchAllocateForm.importPreviewList),
|
||||
quarterly: currentParams.quarterly,
|
||||
year: currentParams.year
|
||||
}).then((resp) => {
|
||||
if (resp.code === 0) {
|
||||
this.$message.success(resp.msg)
|
||||
|
||||
+134
-73
@@ -51,8 +51,66 @@ layout("/layouts/platform.html"){
|
||||
<el-tabs class="reimbursement-tabs" v-model="activeTabName">
|
||||
<el-tab-pane label="申请基本信息" name="basic">
|
||||
<el-descriptions :column="2" border>
|
||||
<el-descriptions-item label="经办人">{{formData.userName}}</el-descriptions-item>
|
||||
<el-descriptions-item label="经费来源" span="2">
|
||||
<el-form-item label="经费来源" prop="reimburseFundSource">
|
||||
|
||||
<el-radio-group v-model="formData.reimburseFundSource" size="medium" @change="selectFundSource">
|
||||
<el-radio v-if="$auth.hasPermission('unionReimburse.xgh')"
|
||||
label="UNION_REIMBURSE_FUND_SOURCE_1"
|
||||
border>校工会经费</el-radio>
|
||||
<el-radio v-if="$auth.hasPermission('unionReimburse.fgh')"
|
||||
label="UNION_REIMBURSE_FUND_SOURCE_2"
|
||||
border>分工会经费</el-radio>
|
||||
<el-radio v-if="$auth.hasPermission('unionReimburse.club')"
|
||||
label="UNION_REIMBURSE_FUND_SOURCE_3"
|
||||
border>协会经费</el-radio>
|
||||
</el-radio-group>
|
||||
<!-- <span class="invoice-summary-tip" v-if="fundBalanceText">余额:{{fundBalanceText}}</span>-->
|
||||
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="报销项目" :span="2">
|
||||
<el-form-item label="报销项目" prop="reimburseProject">
|
||||
<el-radio-group v-model="formData.reimburseProject" size="medium" @change="handleReimburseProjectChange">
|
||||
<el-radio :label="item.code" border v-for="item in reimburseProjectList">
|
||||
{{item.name}}
|
||||
</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="支付方式">
|
||||
<el-form-item label="支付方式" prop="paymentWay">
|
||||
<el-radio-group v-model="formData.paymentWay" size="medium">
|
||||
<el-radio :label="item.code" border v-for="item in dict.type.UNION_REIMBURSE_PAYMENT_WAY">
|
||||
{{item.name}}
|
||||
</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="工号">{{formData.loginName}}</el-descriptions-item>
|
||||
<el-descriptions-item label="经办人">{{formData.userName}}</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="所属协会" v-if="formData.reimburseFundSource === 'UNION_REIMBURSE_FUND_SOURCE_3'">
|
||||
<el-form-item label="所属协会" prop="clubId">
|
||||
<el-select clearable
|
||||
placeholder="请选择协会"
|
||||
style="width: 100%;"
|
||||
v-model="formData.clubId"
|
||||
@change="clubChange">
|
||||
<el-option
|
||||
:key="item.id"
|
||||
:label="item.clubName"
|
||||
:value="item.id"
|
||||
v-for="item in clubOptions">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="余额" v-if="formData.reimburseFundSource">
|
||||
<el-form-item label="余额">
|
||||
<el-input :value="fundBalanceText" readonly></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<!-- <el-descriptions-item label="报销类别">-->
|
||||
<!-- <el-form-item label="报销类别" prop="reimburseType">-->
|
||||
<!-- <el-radio-group v-model="formData.reimburseType" size="medium">-->
|
||||
@@ -62,24 +120,8 @@ layout("/layouts/platform.html"){
|
||||
<!-- </el-radio-group>-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- </el-descriptions-item>-->
|
||||
<el-descriptions-item label="报销项目" span="2">
|
||||
<el-form-item label="报销项目" prop="reimburseProject">
|
||||
<el-radio-group v-model="formData.reimburseProject" size="medium" @change="handleReimburseProjectChange">
|
||||
<el-radio :label="item.code" border v-for="item in reimburseProjectList">
|
||||
{{item.name}}
|
||||
</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="支付方式">
|
||||
<el-form-item label="支付方式" prop="paymentWay">
|
||||
<el-radio-group v-model="formData.paymentWay" size="medium">
|
||||
<el-radio :label="item.code" border v-for="item in dict.type.UNION_REIMBURSE_PAYMENT_WAY">
|
||||
{{item.name}}
|
||||
</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
|
||||
|
||||
|
||||
<!-- <el-descriptions-item label="报销经费来源" span="2">
|
||||
@@ -304,15 +346,6 @@ layout("/layouts/platform.html"){
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="活动类型" v-if="formData.reimburseProject === 'UNION_REIMBURSE_PROJECT_2'">
|
||||
<el-form-item label="活动类型" prop="activityType">
|
||||
<el-select v-model="formData.activityType" placeholder="请选择活动类型" style="width: 100%">
|
||||
<el-option label="分工会活动" value="分工会活动"></el-option>
|
||||
<el-option label="校工会活动" value="校工会活动"></el-option>
|
||||
<el-option label="社团(社团)活动" value="社团(社团)活动"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="活动人数" v-if="formData.reimburseProject !== 'UNION_REIMBURSE_PROJECT_1'">
|
||||
<el-form-item label="活动人数" prop="activityNumber">
|
||||
<el-input v-model="formData.activityNumber" placeholder="请输入活动人数" type="text"></el-input>
|
||||
@@ -437,6 +470,8 @@ layout("/layouts/platform.html"){
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item :span="2" v-if="formData.reimburseProject === 'UNION_REIMBURSE_PROJECT_1'" style="display: none;">
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="参加随行人员" :span="2"
|
||||
v-if="formData.reimburseProject === 'UNION_REIMBURSE_PROJECT_1'">
|
||||
@@ -457,6 +492,8 @@ layout("/layouts/platform.html"){
|
||||
type="textarea" :autosize="{ minRows: 4, maxRows: 8}"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item :span="2" v-if="formData.reimburseProject !== 'UNION_REIMBURSE_PROJECT_1' && formData.reimburseFundSource === 'UNION_REIMBURSE_FUND_SOURCE_3'" style="display: none;">
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item :span="2">
|
||||
<template slot="label">
|
||||
附件
|
||||
@@ -714,7 +751,6 @@ layout("/layouts/platform.html"){
|
||||
condolenceMoney: [{required: true, message: "请输入慰问金额", trigger: ["change", "blur"]}],
|
||||
participants: [{required: true, message: "请填写参与随行人员", trigger: ["change", "blur"]}],
|
||||
payer: [{required: true, message: "请选择付款人", trigger: ["change", "blur"]}],
|
||||
activityType: [{required: true, message: "请选择活动类型", trigger: ["change", "blur"]}],
|
||||
activityPlace: [{required: true, message: "请输入活动地点", trigger: ["change", "blur"]}],
|
||||
activityTime: [{required: true, message: "请选择活动时间", trigger: ["change", "blur"]}],
|
||||
activityNumber: [{required: true, message: "请输入活动人数", trigger: ["change", "blur"]}]
|
||||
@@ -733,6 +769,7 @@ layout("/layouts/platform.html"){
|
||||
reimburseProjectList: [],
|
||||
reimburseProjects: [],
|
||||
clubOptions: [],
|
||||
fundBalanceText: '',
|
||||
budgetTypeOption: [],
|
||||
payerOptions: []
|
||||
}
|
||||
@@ -953,6 +990,7 @@ layout("/layouts/platform.html"){
|
||||
this.$set(this.formData, "money", null)
|
||||
} else {
|
||||
this.rebuildInvoiceSummary()
|
||||
this.normalizeFundBalance()
|
||||
}
|
||||
},
|
||||
openInvoiceDialog(mode, row, index) {
|
||||
@@ -1200,9 +1238,14 @@ layout("/layouts/platform.html"){
|
||||
// this.$set(this.formData, "way", this.chooseType.way)
|
||||
// }
|
||||
// },
|
||||
normalizeFundBalance() {
|
||||
const fundBalance = Number(this.formData.fundBalance)
|
||||
this.$set(this.formData, "fundBalance", Number.isNaN(fundBalance) ? null : fundBalance)
|
||||
},
|
||||
// 保存
|
||||
onSave() {
|
||||
this.rebuildInvoiceSummary()
|
||||
this.normalizeFundBalance()
|
||||
this.$confirm("您确定保存吗?", "提示", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
@@ -1221,11 +1264,17 @@ layout("/layouts/platform.html"){
|
||||
return new Promise((resolve) => {
|
||||
this.$refs.formRef.validate((valid) => {
|
||||
if (valid) {
|
||||
if (this.formData.reimburseFundSource === "UNION_REIMBURSE_FUND_SOURCE_3" && !this.formData.clubId) {
|
||||
this.$message.warning("请选择协会")
|
||||
resolve(false)
|
||||
return
|
||||
}
|
||||
if (!this.validateInvoiceDetailsBeforeSubmit()) {
|
||||
this.$set(this, "activeTabName", "invoice")
|
||||
resolve(false)
|
||||
return
|
||||
}
|
||||
this.normalizeFundBalance()
|
||||
this.rebuildInvoiceSummary()
|
||||
resolve(true)
|
||||
} else {
|
||||
@@ -1298,68 +1347,71 @@ layout("/layouts/platform.html"){
|
||||
const project = this.descOptions.find(item => item.reimburseProject === projectCode);
|
||||
return project ? project.fileDesc : '';
|
||||
},
|
||||
//经费来源查询
|
||||
reimburseFundSourceChange() {
|
||||
// 检查是否有选择经费来源
|
||||
if (!this.formData.reimburseFundSource) {
|
||||
this.$set(this.formData, "fundBalance", "")
|
||||
return
|
||||
selectFundSource(code) {
|
||||
this.$set(this.formData, "reimburseFundSource", code)
|
||||
if (code !== "UNION_REIMBURSE_FUND_SOURCE_3") {
|
||||
this.$set(this.formData, "clubId", null)
|
||||
this.$set(this.formData, "clubName", null)
|
||||
} else if (this.clubOptions.length === 1) {
|
||||
this.$set(this.formData, "clubId", this.clubOptions[0].id)
|
||||
this.$set(this.formData, "clubName", this.clubOptions[0].clubName)
|
||||
}
|
||||
|
||||
// 如果是社团经费来源,但没有选择具体社团,则不查询
|
||||
if (this.formData.reimburseFundSource === "UNION_REIMBURSE_FUND_SOURCE_3" && !this.formData.clubId) {
|
||||
this.$set(this.formData, "fundBalance", "")
|
||||
return
|
||||
}
|
||||
|
||||
// 定义API映射关系
|
||||
const apiMap = {
|
||||
"UNION_REIMBURSE_FUND_SOURCE_1": {
|
||||
url: "/platform/unionReimburse/apply/getSchoolBudget"
|
||||
},
|
||||
"UNION_REIMBURSE_FUND_SOURCE_2": {
|
||||
url: "/platform/unionReimburse/apply/getUnionBalance"
|
||||
},
|
||||
"UNION_REIMBURSE_FUND_SOURCE_3": {
|
||||
url: "/platform/unionReimburse/apply/getClubBudget"
|
||||
this.reimburseFundSourceChange()
|
||||
},
|
||||
clubChange() {
|
||||
if (this.formData.clubId) {
|
||||
const selectedClub = this.clubOptions.find(club => club.id === this.formData.clubId)
|
||||
if (selectedClub) {
|
||||
this.$set(this.formData, "clubName", selectedClub.clubName)
|
||||
}
|
||||
this.reimburseFundSourceChange()
|
||||
return
|
||||
}
|
||||
|
||||
this.$set(this.formData, "clubName", null)
|
||||
this.$set(this.formData, "fundBalance", null)
|
||||
this.fundBalanceText = "请选择协会"
|
||||
},
|
||||
// 经费来源查询
|
||||
reimburseFundSourceChange() {
|
||||
if (!this.formData.reimburseFundSource) {
|
||||
this.$set(this.formData, "fundBalance", null)
|
||||
this.fundBalanceText = ""
|
||||
return
|
||||
}
|
||||
if (this.formData.reimburseFundSource === "UNION_REIMBURSE_FUND_SOURCE_3" && !this.formData.clubId) {
|
||||
this.$set(this.formData, "fundBalance", null)
|
||||
this.fundBalanceText = ""
|
||||
return
|
||||
}
|
||||
const fundSource = this.formData.reimburseFundSource
|
||||
const apiInfo = apiMap[fundSource]
|
||||
|
||||
// 如果没有匹配的API,清空经费余额并返回
|
||||
if (!apiInfo) {
|
||||
this.$set(this.formData, "fundBalance", "")
|
||||
if (!fundSource) {
|
||||
this.$set(this.formData, "fundBalance", null)
|
||||
this.fundBalanceText = ""
|
||||
return
|
||||
}
|
||||
|
||||
// 构造请求参数
|
||||
const params = {
|
||||
reimburseFundSource: fundSource
|
||||
}
|
||||
|
||||
// 如果是社团经费,需要传递社团ID
|
||||
if (fundSource === "UNION_REIMBURSE_FUND_SOURCE_3" && this.formData.clubId) {
|
||||
params.clubId = this.formData.clubId
|
||||
}
|
||||
|
||||
// 显示加载状态
|
||||
this.$set(this.formData, "fundBalance", "查询中...")
|
||||
|
||||
// 发送请求
|
||||
this.$axios.post(apiInfo.url, params)
|
||||
this.$set(this.formData, "fundBalance", null)
|
||||
this.fundBalanceText = "查询中..."
|
||||
this.$axios.post("/platform/unionReimburse/apply/getBudgetBalance", params)
|
||||
.then(response => {
|
||||
if (response.code === 0) {
|
||||
// 显示经费余额(只显示数字,不显示"元")
|
||||
this.$set(this.formData, "fundBalance", response.data || "0.00")
|
||||
this.$set(this.formData, "fundBalance", response.data || 0)
|
||||
this.fundBalanceText = (response.data || 0).toString()
|
||||
} else {
|
||||
this.$set(this.formData, "fundBalance", "查询失败")
|
||||
this.$set(this.formData, "fundBalance", null)
|
||||
this.fundBalanceText = response.msg || "查询失败"
|
||||
this.$message.warning(this.fundBalanceText)
|
||||
}
|
||||
})
|
||||
.catch(error => {
|
||||
console.error("经费余额查询失败:", error)
|
||||
this.$set(this.formData, "fundBalance", "查询失败")
|
||||
this.$set(this.formData, "fundBalance", null)
|
||||
this.fundBalanceText = "查询失败"
|
||||
this.$message.error("经费余额查询失败")
|
||||
})
|
||||
},
|
||||
@@ -1433,7 +1485,16 @@ layout("/layouts/platform.html"){
|
||||
this.queryFileDesc()
|
||||
this.queryCondolenceType()
|
||||
//社团查询
|
||||
this.$businessTool.listCLubByRole().then((res) => (this.clubOptions = res))
|
||||
this.$businessTool.listClubByRole().then((res) => {
|
||||
this.$set(this, "clubOptions", res || [])
|
||||
if (res && res.length === 1 && !this.formData.clubId) {
|
||||
this.$set(this.formData, "clubId", res[0].id)
|
||||
this.$set(this.formData, "clubName", res[0].clubName)
|
||||
}
|
||||
if (this.formData.reimburseFundSource) {
|
||||
this.reimburseFundSourceChange()
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
@@ -5,168 +5,248 @@ const unionReimburseInfo = {
|
||||
申请信息
|
||||
<el-link type="primary" @click="openChart">点击查看流程图</el-link>
|
||||
</div>
|
||||
<el-descriptions :column="2" border class="flow-task-form">
|
||||
<el-descriptions-item label="经办人">{{viewData.userName}}</el-descriptions-item>
|
||||
<el-descriptions-item label="工号">{{viewData.loginName}}</el-descriptions-item>
|
||||
<el-descriptions-item label="单位">{{viewData.unitName}}</el-descriptions-item>
|
||||
<el-descriptions-item label="工会">{{viewData.unionName}}</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="报销项目">
|
||||
<span v-if="viewData.reimburseProject === 'UNION_REIMBURSE_PROJECT_1'">慰问</span>
|
||||
<span v-else-if="viewData.reimburseProject === 'UNION_REIMBURSE_PROJECT_2'">文体活动</span>
|
||||
<span v-else-if="viewData.reimburseProject === 'UNION_REIMBURSE_PROJECT_3'">日常活动</span>
|
||||
<span v-else-if="viewData.reimburseProject === 'UNION_REIMBURSE_PROJECT_4'">专项活动</span>
|
||||
<span v-else>{{ viewData.reimburseProject }}</span>
|
||||
</el-descriptions-item>
|
||||
<el-tabs v-model="activeTabName" style="margin-top: 10px;">
|
||||
<el-tab-pane label="申请基本信息" name="basic">
|
||||
<el-descriptions :column="2" border class="flow-task-form">
|
||||
<el-descriptions-item label="经费来源" :span="2">
|
||||
<dict-tag :options="dict.type.UNION_REIMBURSE_FUND_SOURCE"
|
||||
:value="viewData.reimburseFundSource">
|
||||
</dict-tag>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="支付方式">
|
||||
<dict-tag :options="dict.type.UNION_REIMBURSE_PAYMENT_WAY"
|
||||
:value="viewData.paymentWay">
|
||||
</dict-tag>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="报销项目" :span="2">
|
||||
<dict-tag :options="dict.type.UNION_REIMBURSE_PROJECT"
|
||||
:value="viewData.reimburseProject">
|
||||
</dict-tag>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="联系方式">{{viewData.mobile}}</el-descriptions-item>
|
||||
<el-descriptions-item label="支付方式">
|
||||
<dict-tag :options="dict.type.UNION_REIMBURSE_PAYMENT_WAY"
|
||||
:value="viewData.paymentWay">
|
||||
</dict-tag>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="付款人" v-if="viewData.paymentWay === 'UNION_REIMBURSE_PAYMENT_WAY_2'">
|
||||
<span>{{ viewData.payerName }}</span>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="工号">{{viewData.loginName}}</el-descriptions-item>
|
||||
<el-descriptions-item label="经办人">{{viewData.userName}}</el-descriptions-item>
|
||||
<el-descriptions-item label="单位">{{viewData.unitName}}</el-descriptions-item>
|
||||
<el-descriptions-item label="工会">{{viewData.unionName}}</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="开户行" v-if="viewData.paymentWay === 'UNION_REIMBURSE_PAYMENT_WAY_2'">
|
||||
<span>{{ viewData.bankOfDeposit }}</span>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="所属协会" v-if="viewData.reimburseFundSource === 'UNION_REIMBURSE_FUND_SOURCE_3'">
|
||||
<span>{{ viewData.clubName }}</span>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="银行卡号" v-if="viewData.paymentWay === 'UNION_REIMBURSE_PAYMENT_WAY_2'">
|
||||
<span>{{ viewData.bankCardNumber }}</span>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="余额" v-if="viewData.reimburseFundSource">
|
||||
<span>{{ formatMoney(viewData.fundBalance) }}</span>
|
||||
</el-descriptions-item>
|
||||
|
||||
<!-- 慰问相关字段 -->
|
||||
<el-descriptions-item label="慰问对象" v-if="viewData.reimburseProject === 'UNION_REIMBURSE_PROJECT_1'">
|
||||
<span>{{ viewData.condolenceUserName }}({{ viewData.condolenceLoginName }})({{ viewData.condolenceUnitName }})</span>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="联系方式">
|
||||
<span>{{ viewData.mobile }}</span>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="性别" v-if="viewData.reimburseProject === 'UNION_REIMBURSE_PROJECT_1'">
|
||||
<span>{{ viewData.condolenceSex }}</span>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="付款人" v-if="viewData.paymentWay === 'UNION_REIMBURSE_PAYMENT_WAY_2'">
|
||||
<span>{{ viewData.payerName }}</span>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="生日" v-if="viewData.reimburseProject === 'UNION_REIMBURSE_PROJECT_1'">
|
||||
<span>{{ viewData.condolenceBirthday && $moment(viewData.condolenceBirthday).isValid() ? $moment(viewData.condolenceBirthday).format('YYYY-MM-DD') : '' }}</span>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="户名" v-if="viewData.paymentWay === 'UNION_REIMBURSE_PAYMENT_WAY_2'">
|
||||
<span>{{ viewData.bankUserName }}</span>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="身份证号" v-if="viewData.reimburseProject === 'UNION_REIMBURSE_PROJECT_1'">
|
||||
<span>{{ viewData.condolenceIdCard }}</span>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="开户行" v-if="viewData.paymentWay === 'UNION_REIMBURSE_PAYMENT_WAY_2'">
|
||||
<span>{{ viewData.bankOfDeposit }}</span>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="联系方式" v-if="viewData.reimburseProject === 'UNION_REIMBURSE_PROJECT_1'">
|
||||
<span>{{ viewData.condolenceMobile }}</span>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="银行卡号" v-if="viewData.paymentWay === 'UNION_REIMBURSE_PAYMENT_WAY_2'">
|
||||
<span>{{ viewData.bankCardNumber }}</span>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="慰问类型" v-if="viewData.reimburseProject === 'UNION_REIMBURSE_PROJECT_1'">
|
||||
<span>{{ viewData.typeName }}</span>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="慰问对象" v-if="viewData.reimburseProject === 'UNION_REIMBURSE_PROJECT_1'">
|
||||
<span>{{ viewData.condolenceUserName }}({{ viewData.condolenceLoginName }})({{ viewData.condolenceUnitName }})</span>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="慰问方式" v-if="viewData.reimburseProject === 'UNION_REIMBURSE_PROJECT_1'">
|
||||
<span>{{ viewData.way }}</span>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="性别" v-if="viewData.reimburseProject === 'UNION_REIMBURSE_PROJECT_1'">
|
||||
<span>{{ viewData.condolenceSex }}</span>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="慰问金额" v-if="viewData.reimburseProject === 'UNION_REIMBURSE_PROJECT_1'">
|
||||
<span>{{ viewData.condolenceMoney }}</span>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="实际报销金额" v-if="viewData.reimburseProject === 'UNION_REIMBURSE_PROJECT_1'">
|
||||
<span>{{ viewData.realMoney }}</span>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="生日" v-if="viewData.reimburseProject === 'UNION_REIMBURSE_PROJECT_1'">
|
||||
<span>{{ viewData.condolenceBirthday && $moment(viewData.condolenceBirthday).isValid() ? $moment(viewData.condolenceBirthday).format('YYYY-MM-DD') : '' }}</span>
|
||||
</el-descriptions-item>
|
||||
|
||||
<!-- 活动相关字段 -->
|
||||
<el-descriptions-item label="活动名称" v-if="viewData.reimburseProject !== 'UNION_REIMBURSE_PROJECT_1'">
|
||||
<span>{{ viewData.activityName }}</span>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="身份证号" v-if="viewData.reimburseProject === 'UNION_REIMBURSE_PROJECT_1'">
|
||||
<span>{{ viewData.condolenceIdCard }}</span>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="活动类型" v-if="viewData.reimburseProject === 'UNION_REIMBURSE_PROJECT_2'">
|
||||
<span>{{ viewData.activityType }}</span>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="联系方式" v-if="viewData.reimburseProject === 'UNION_REIMBURSE_PROJECT_1'">
|
||||
<span>{{ viewData.condolenceMobile }}</span>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="活动人数" v-if="viewData.reimburseProject !== 'UNION_REIMBURSE_PROJECT_1'">
|
||||
<span>{{ viewData.activityNumber }}</span>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="慰问类型" v-if="viewData.reimburseProject === 'UNION_REIMBURSE_PROJECT_1'">
|
||||
<span>{{ viewData.typeName }}</span>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="活动地点" v-if="viewData.reimburseProject !== 'UNION_REIMBURSE_PROJECT_1'">
|
||||
<span>{{ viewData.activityPlace }}</span>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="慰问方式" v-if="viewData.reimburseProject === 'UNION_REIMBURSE_PROJECT_1'">
|
||||
<span>{{ viewData.way }}</span>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="报销金额" v-if="viewData.reimburseProject !== 'UNION_REIMBURSE_PROJECT_1'">
|
||||
<span>{{ viewData.money }}</span>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="慰问金额" v-if="viewData.reimburseProject === 'UNION_REIMBURSE_PROJECT_1'">
|
||||
<span>{{ formatMoney(viewData.condolenceMoney) }}</span>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="实际报销金额" v-if="viewData.reimburseProject !== 'UNION_REIMBURSE_PROJECT_1'">
|
||||
<span>{{ viewData.realMoney }}</span>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="实际报销金额" v-if="viewData.reimburseProject === 'UNION_REIMBURSE_PROJECT_1' && viewData.realMoney != null">
|
||||
<span>{{ formatMoney(viewData.realMoney) }}</span>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="活动时间" v-if="viewData.reimburseProject !== 'UNION_REIMBURSE_PROJECT_1'">
|
||||
<span>{{ viewData.activityTime | dateFormat }}</span>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="活动名称" v-if="viewData.reimburseProject !== 'UNION_REIMBURSE_PROJECT_1'">
|
||||
<span>{{ viewData.activityName }}</span>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="发票张数">
|
||||
<span>{{ viewData.invoiceNumber }}</span>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="活动人数" v-if="viewData.reimburseProject !== 'UNION_REIMBURSE_PROJECT_1'">
|
||||
<span>{{ viewData.activityNumber }}</span>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="慰问时间" v-if="viewData.reimburseProject === 'UNION_REIMBURSE_PROJECT_1'">
|
||||
<span>{{ viewData.condolenceTime | dateFormat }}</span>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="活动地点" v-if="viewData.reimburseProject !== 'UNION_REIMBURSE_PROJECT_1'">
|
||||
<span>{{ viewData.activityPlace }}</span>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="结婚时间" v-if="viewData.condolenceTypeId === 'cf4ce7af322d464f8f86d818fcc00203'">
|
||||
<span>{{ viewData.marryTime | dateFormat }}</span>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="报销金额" v-if="viewData.reimburseProject !== 'UNION_REIMBURSE_PROJECT_1'">
|
||||
<span>{{ formatMoney(viewData.money) }}</span>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="生育时间" v-if="viewData.condolenceTypeId === 'c90cb10dce6542e99ae271bee6fe8cc0'">
|
||||
<span>{{ viewData.fertilityTime | dateFormat }}</span>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="实际报销金额" v-if="viewData.reimburseProject !== 'UNION_REIMBURSE_PROJECT_1' && viewData.realMoney != null">
|
||||
<span>{{ formatMoney(viewData.realMoney) }}</span>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="住院病由" v-if="viewData.condolenceTypeId === '4e316737e71047e0b01aea78524c1416'">
|
||||
<span>{{ viewData.hospitalCausation }}</span>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="活动时间" v-if="viewData.reimburseProject !== 'UNION_REIMBURSE_PROJECT_1'">
|
||||
<span>{{ viewData.activityTime | dateFormat }}</span>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="住院时间" v-if="viewData.condolenceTypeId === '4e316737e71047e0b01aea78524c1416'">
|
||||
<span v-if="viewData.hospitalizationStartTime && viewData.hospitalizationEndTime">
|
||||
{{ $moment(viewData.hospitalizationStartTime).format('YYYY-MM-DD') }} 至 {{ $moment(viewData.hospitalizationEndTime).format('YYYY-MM-DD') }}
|
||||
</span>
|
||||
<span v-else>暂无住院时间</span>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="慰问时间" v-if="viewData.reimburseProject === 'UNION_REIMBURSE_PROJECT_1'">
|
||||
<span>{{ viewData.condolenceTime | dateFormat }}</span>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="入住医院" v-if="viewData.condolenceTypeId === '4e316737e71047e0b01aea78524c1416'">
|
||||
<span>{{ viewData.hospital }}</span>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="结婚时间" v-if="viewData.condolenceTypeId === 'cf4ce7af322d464f8f86d818fcc00203'">
|
||||
<span>{{ viewData.marryTime | dateFormat }}</span>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="当年次数" v-if="viewData.condolenceTypeId === '4e316737e71047e0b01aea78524c1416'">
|
||||
<span>{{ viewData.hospitalCount }}</span>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="生育时间" v-if="viewData.condolenceTypeId === 'c90cb10dce6542e99ae271bee6fe8cc0'">
|
||||
<span>{{ viewData.fertilityTime | dateFormat }}</span>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="去逝时间" v-if="viewData.condolenceTypeId === '60f03a87b62b4823855814afdbf5672a'">
|
||||
<span>{{ viewData.deathTime | dateFormat }}</span>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="住院病由" v-if="viewData.condolenceTypeId === '4e316737e71047e0b01aea78524c1416'">
|
||||
<span>{{ viewData.hospitalCausation }}</span>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="与被慰问人关系" v-if="viewData.condolenceTypeId === '60f03a87b62b4823855814afdbf5672a'">
|
||||
<span>{{ viewData.condolenceRelationship }}</span>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="住院时间" v-if="viewData.condolenceTypeId === '4e316737e71047e0b01aea78524c1416'">
|
||||
<span v-if="viewData.hospitalizationStartTime && viewData.hospitalizationEndTime">
|
||||
{{ $moment(viewData.hospitalizationStartTime).format('YYYY-MM-DD') }} 至 {{ $moment(viewData.hospitalizationEndTime).format('YYYY-MM-DD') }}
|
||||
</span>
|
||||
<span v-else>暂无住院时间</span>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="参加随行人员" :span="2"
|
||||
v-if="viewData.reimburseProject === 'UNION_REIMBURSE_PROJECT_1'">
|
||||
<span>{{ viewData.participants }}</span>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="入住医院" v-if="viewData.condolenceTypeId === '4e316737e71047e0b01aea78524c1416'">
|
||||
<span>{{ viewData.hospital }}</span>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="报销事由" :span="2">
|
||||
<span>{{ viewData.paymentNotes }}</span>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="当年次数" v-if="viewData.condolenceTypeId === '4e316737e71047e0b01aea78524c1416'">
|
||||
<span>{{ viewData.hospitalCount }}</span>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="备注" :span="2">
|
||||
<span>{{ viewData.notes }}</span>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="去逝时间" v-if="viewData.condolenceTypeId === '60f03a87b62b4823855814afdbf5672a'">
|
||||
<span>{{ viewData.deathTime | dateFormat }}</span>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="附件" :span="2">
|
||||
<file-preview v-if="viewData.files && viewData.files.length > 0" :files="viewData.files"
|
||||
complete_result></file-preview>
|
||||
<span v-else>暂无附件</span>
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
<el-descriptions-item label="与被慰问人关系" v-if="viewData.condolenceTypeId === '60f03a87b62b4823855814afdbf5672a'">
|
||||
<span>{{ viewData.condolenceRelationship }}</span>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="参加随行人员" :span="2"
|
||||
v-if="viewData.reimburseProject === 'UNION_REIMBURSE_PROJECT_1'">
|
||||
<span>{{ viewData.participants }}</span>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="报销事由" :span="2" v-if="viewData.reimburseProject === 'UNION_REIMBURSE_PROJECT_1'">
|
||||
<span>{{ viewData.paymentNotes }}</span>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="备注" :span="2" v-if="viewData.reimburseProject === 'UNION_REIMBURSE_PROJECT_1'">
|
||||
<span>{{ viewData.notes }}</span>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="附件" :span="2">
|
||||
<file-preview v-if="viewData.files && viewData.files.length > 0"
|
||||
:files="viewData.files"
|
||||
complete_result></file-preview>
|
||||
<span v-else>暂无附件</span>
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-tab-pane>
|
||||
|
||||
<el-tab-pane label="发票信息" name="invoice" v-if="showInvoiceTab">
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="报销金额" label-width="100px">
|
||||
<el-input :value="formatMoney(viewData.money)" readonly></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12">
|
||||
<el-form-item label="发票张数" label-width="100px">
|
||||
<el-input :value="viewData.invoiceNumber" readonly></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="24">
|
||||
<el-form-item label="支付内容" label-width="100px">
|
||||
<el-input :autosize="{ minRows: 4, maxRows: 8}"
|
||||
:value="viewData.paymentNotes"
|
||||
readonly
|
||||
type="textarea"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="24">
|
||||
<el-form-item label="备注" label-width="100px">
|
||||
<el-input :autosize="{ minRows: 3, maxRows: 6}"
|
||||
:value="viewData.notes"
|
||||
readonly
|
||||
type="textarea"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="24">
|
||||
<div style="display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-bottom: 16px; flex-wrap: wrap;">
|
||||
<div>
|
||||
<div style="font-size: 14px; color: #1867b0; font-weight: 600;">发票明细列表</div>
|
||||
<div style="margin-top: 8px; font-size: 12px; color: #909399;">
|
||||
查看页按申请页结构展示发票明细,仅用于查看,不提供编辑操作。
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<el-table :data="viewData.invoiceDetails" border empty-text="暂无发票明细">
|
||||
<el-table-column align="center" label="序号" type="index" width="70"></el-table-column>
|
||||
<el-table-column label="文件名称" min-width="220">
|
||||
<template slot-scope="scope">
|
||||
<file-preview v-if="scope.row.invoiceFiles && scope.row.invoiceFiles.length > 0"
|
||||
:files="scope.row.invoiceFiles"
|
||||
complete_result></file-preview>
|
||||
<span v-else>未上传</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="发票号码" min-width="140" prop="invoiceNo"></el-table-column>
|
||||
<el-table-column align="right" label="发票金额" min-width="110">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ formatMoney(scope.row.invoiceAmount) }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="销售方信息名称" min-width="180" prop="sellerName"></el-table-column>
|
||||
<el-table-column label="项目名称" min-width="180" prop="itemName"></el-table-column>
|
||||
<el-table-column label="备注" min-width="150" prop="remark"></el-table-column>
|
||||
</el-table>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
|
||||
<template>
|
||||
<div class="mt10" v-if="viewData.reviewTime">
|
||||
@@ -181,13 +261,13 @@ const unionReimburseInfo = {
|
||||
<span v-else-if="viewData.stateId == 4" style="color: #f56c6c;">拒绝</span>
|
||||
<span v-else-if="viewData.stateId == 5" style="color: #409eff;">退回</span>
|
||||
<span v-else style="color: #409eff;">{{ viewData.stateId }}</span>
|
||||
</el-descriptions-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="审核意见">{{ viewData.reviewOpinion }}</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</div>
|
||||
</template>
|
||||
<slot></slot>
|
||||
|
||||
<slot></slot>
|
||||
<snaker-chart ref="snakerChartRef"></snaker-chart>
|
||||
</div>
|
||||
`,
|
||||
@@ -201,42 +281,69 @@ const unionReimburseInfo = {
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
activeTabName: "basic",
|
||||
visible: false,
|
||||
viewData: {},
|
||||
viewData: {
|
||||
files: [],
|
||||
invoiceDetails: []
|
||||
},
|
||||
typeName: '',
|
||||
row: null
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
showInvoiceTab() {
|
||||
return this.viewData.reimburseProject !== "UNION_REIMBURSE_PROJECT_1"
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
// 打开
|
||||
onOpen(row) {
|
||||
this.row = row
|
||||
this.visible = true
|
||||
this.activeTabName = "basic"
|
||||
this.getInfo()
|
||||
},
|
||||
// 获取申请信息
|
||||
getInfo() {
|
||||
this.$axios.post('/platform/unionReimburse/apply/info', {id: this.row.id}).then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.viewData = res.data
|
||||
this.viewData = this.buildViewData(res.data)
|
||||
this.typeName = res.data.typeName || ''
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
// // 获取已办任务审批记录
|
||||
// getDoneTasks() {
|
||||
// this.$axios.post("/flow/common/doneTasks", {bizId: this.row.id}).then((res) => {
|
||||
// if (res.code === 0) {
|
||||
// this.doneTasks = res.data
|
||||
// }
|
||||
// })
|
||||
// },
|
||||
//
|
||||
// // 查看流程图
|
||||
// openChart(){
|
||||
// this.$refs.snakerChartRef.onOpenFull(this.row.instanceProcessDefineId,this.row.instanceId)
|
||||
// }
|
||||
|
||||
// 查看页面需要给附件和发票明细补默认值,避免空数据时组件渲染异常。
|
||||
buildViewData(data) {
|
||||
const viewData = Object.assign({
|
||||
files: [],
|
||||
invoiceDetails: []
|
||||
}, data || {})
|
||||
if (!Array.isArray(viewData.files)) {
|
||||
viewData.files = []
|
||||
}
|
||||
if (!Array.isArray(viewData.invoiceDetails)) {
|
||||
viewData.invoiceDetails = []
|
||||
}
|
||||
return viewData
|
||||
},
|
||||
// 查看页金额统一保留两位小数,和申请页展示口径保持一致。
|
||||
formatMoney(value) {
|
||||
if (value === null || value === undefined || value === "") {
|
||||
return ""
|
||||
}
|
||||
const numberValue = Number(value)
|
||||
if (Number.isNaN(numberValue)) {
|
||||
return value
|
||||
}
|
||||
return numberValue.toFixed(2)
|
||||
},
|
||||
// 查看流程图
|
||||
openChart() {
|
||||
if (!this.row || !this.$refs.snakerChartRef) {
|
||||
return
|
||||
}
|
||||
this.$refs.snakerChartRef.onOpenFull(this.row.instanceProcessDefineId, this.row.instanceId)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -44,7 +44,7 @@
|
||||
<el-descriptions-item label="性别">
|
||||
<el-form-item prop="sex">
|
||||
<el-select v-model="formData.sex" placeholder="请选择性别" clearable style="width: 100%">
|
||||
<el-option v-for="item in ['男性','女性']" :key="item" :label="item" :value="item">
|
||||
<el-option v-for="item in ['男','女']" :key="item" :label="item" :value="item">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
@@ -294,7 +294,8 @@ layout("/layouts/platform.html"){
|
||||
<el-card class="box-card" style="height: 92vh" shadow="never">
|
||||
<el-result icon="warning" title="温馨提醒" subTitle="">
|
||||
<template slot="extra">
|
||||
抱歉,当前时间不能申请,可申请时间为{{time}}。
|
||||
<span v-if="blockMessage">{{blockMessage}}</span>
|
||||
<span v-else>抱歉,当前时间不能申请,可申请时间为{{time}}。</span>
|
||||
</template>
|
||||
</el-result>
|
||||
</el-card>
|
||||
@@ -312,6 +313,7 @@ layout("/layouts/platform.html"){
|
||||
taskId: GetQueryString("taskId"),
|
||||
isShow: false,
|
||||
time: '',
|
||||
blockMessage: '',
|
||||
formData: {
|
||||
id: GetQueryString("bizId"),
|
||||
mode: '1',
|
||||
@@ -602,7 +604,14 @@ layout("/layouts/platform.html"){
|
||||
async getIsCanPlay() {
|
||||
this.$axios.post('/platform/difficultHelp/apply/getIsCanPlay').then(res => {
|
||||
if (res.code === 0) {
|
||||
this.isShow = res.data.result
|
||||
// 新增申请进入页面时,优先校验当前登录人本年度是否已经申请过,已申请则直接拦截新增。
|
||||
if (!this.bizId && res.data.hasCurrentYearApply) {
|
||||
this.isShow = false
|
||||
this.$set(this, 'blockMessage', '抱歉,您本年度已申请困难帮扶,不能重复申请。')
|
||||
} else {
|
||||
this.isShow = res.data.result
|
||||
this.$set(this, 'blockMessage', '')
|
||||
}
|
||||
this.$set(this, 'time', res.data.time);
|
||||
if (res.data.applyCount !== null && res.data.applyCount !== undefined && res.data.applyCount !== 0) {
|
||||
this.$set(this.formData, 'applyCount', res.data.applyCount)
|
||||
|
||||
+1
-1
@@ -159,7 +159,7 @@ layout("/layouts/platform.html"){
|
||||
{ prop: "subsidyStandards", label: "困难类型", sortable: true },
|
||||
{ prop: "applyTime", label: "申请时间", sortable: true },
|
||||
{ prop: "applyCount", label: "申请次数", sortable: true },
|
||||
{ prop: "taskName", label: "当前节点" },
|
||||
{ prop: "curTaskName", label: "当前节点" },
|
||||
{ prop: "instanceState", label: "流程状态" }
|
||||
],
|
||||
unions: [],
|
||||
|
||||
+14
-5
@@ -48,8 +48,9 @@ layout("/layouts/platform.html"){
|
||||
<el-radio-button label="false">未审核</el-radio-button>
|
||||
</el-radio-group>
|
||||
</table-tool>
|
||||
<el-table :data="tableData" :size="tableSize" @sort-change="pageOrder"
|
||||
<el-table :data="tableData" :size="tableSize" @sort-change="pageOrder" @selection-change="handleSelectionChange"
|
||||
ref="table" row-key="id" style="width: 100%">
|
||||
<el-table-column type="selection" width="45"></el-table-column>
|
||||
<el-table-column :index="indexMethod" header-align="center" label="序号"
|
||||
type="index" width="60px"></el-table-column>
|
||||
<el-table-column
|
||||
@@ -130,14 +131,15 @@ layout("/layouts/platform.html"){
|
||||
{ prop: "subsidyStandards", label: "困难类型", sortable: true },
|
||||
{ prop: "applyTime", label: "申请时间", sortable: true },
|
||||
{ prop: "applyCount", label: "申请次数", sortable: true },
|
||||
{ prop: "taskName", label: "当前节点" },
|
||||
{ prop: "curTaskName", label: "当前节点" },
|
||||
{ prop: "instanceState", label: "流程状态" }
|
||||
],
|
||||
unions: [],
|
||||
units: [],
|
||||
|
||||
formData: {},
|
||||
showApprovalForm: false
|
||||
showApprovalForm: false,
|
||||
selectData: [],
|
||||
}
|
||||
},
|
||||
components: {
|
||||
@@ -155,13 +157,17 @@ layout("/layouts/platform.html"){
|
||||
this.$message.warning('没有待审核的数据!');
|
||||
return;
|
||||
}
|
||||
const message = '确定要一键审核这 ' + this.tableData.length + ' 条记录吗?';
|
||||
if (this.selectData.length === 0) {
|
||||
this.$message.warning('请勾选待审核数据!');
|
||||
return;
|
||||
}
|
||||
const message = '确定要一键审核这 ' + this.selectData.length + ' 条记录吗?';
|
||||
this.$confirm(message, '批量审核确认', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
this.batchApprove(this.tableData);
|
||||
this.batchApprove(this.selectData);
|
||||
}).catch(() => {
|
||||
|
||||
});
|
||||
@@ -279,6 +285,9 @@ layout("/layouts/platform.html"){
|
||||
this.units = await this.$businessTool.listUnit(this.$store.state.user.union.id)
|
||||
}
|
||||
},
|
||||
handleSelectionChange: function (val) {
|
||||
this.selectData = val
|
||||
},
|
||||
},
|
||||
async created() {
|
||||
this.pageData()
|
||||
|
||||
+11
-11
@@ -215,13 +215,13 @@ layout("/layouts/platform.html"){
|
||||
|
||||
return total;
|
||||
},
|
||||
// 是否为男性
|
||||
// 是否为男
|
||||
isMale() {
|
||||
return this.formData.sex === '男性' || this.formData.sex === '男';
|
||||
return this.formData.sex === '男';
|
||||
},
|
||||
// 是否为女性
|
||||
// 是否为女
|
||||
isFemale() {
|
||||
return this.formData.sex === '女性' || this.formData.sex === '女';
|
||||
return this.formData.sex === '女';
|
||||
},
|
||||
},
|
||||
watch: {
|
||||
@@ -237,7 +237,7 @@ layout("/layouts/platform.html"){
|
||||
// 监听性别变化,设置默认值
|
||||
isMale(newVal) {
|
||||
if (newVal) {
|
||||
// 男性默认设置
|
||||
// 男默认设置
|
||||
this.$set(this.formData, 'loverSex', '女');
|
||||
this.$set(this.formData, 'withLeave', 15);
|
||||
this.$set(this.formData, 'parentalLeave', 10);
|
||||
@@ -245,7 +245,7 @@ layout("/layouts/platform.html"){
|
||||
},
|
||||
isFemale(newVal) {
|
||||
if (newVal) {
|
||||
// 女性默认设置
|
||||
// 女默认设置
|
||||
this.$set(this.formData, 'loverSex', '男');
|
||||
this.$set(this.formData, 'maternityLeave', 98);
|
||||
this.$set(this.formData, 'extendLeave', 60);
|
||||
@@ -255,7 +255,7 @@ layout("/layouts/platform.html"){
|
||||
methods: {
|
||||
// 计算休假时间止
|
||||
calculateEndTime() {
|
||||
// 如果是男性,则不自动计算结束时间
|
||||
// 如果是男,则不自动计算结束时间
|
||||
if (this.isMale) {
|
||||
return;
|
||||
}
|
||||
@@ -372,19 +372,19 @@ layout("/layouts/platform.html"){
|
||||
}
|
||||
// 根据性别设置默认值
|
||||
if (this.isMale) {
|
||||
// 男性默认设置
|
||||
// 男默认设置
|
||||
this.$set(this.formData, 'loverSex', '女');
|
||||
this.$set(this.formData, 'withLeave', 15);
|
||||
this.$set(this.formData, 'parentalLeave', 10);
|
||||
// 男性默认产假和延长假为0,因为男性不休产假
|
||||
// 男默认产假和延长假为0,因为男不休产假
|
||||
this.$set(this.formData, 'maternityLeave', 0);
|
||||
this.$set(this.formData, 'extendLeave', 0);
|
||||
} else if (this.isFemale) {
|
||||
// 女性默认设置
|
||||
// 女默认设置
|
||||
this.$set(this.formData, 'loverSex', '男');
|
||||
this.$set(this.formData, 'maternityLeave', 98);
|
||||
this.$set(this.formData, 'extendLeave', 60);
|
||||
// 女性默认陪产假和育儿假为0
|
||||
// 女默认陪产假和育儿假为0
|
||||
this.$set(this.formData, 'withLeave', 0);
|
||||
this.$set(this.formData, 'parentalLeave', 0);
|
||||
}
|
||||
|
||||
@@ -21,22 +21,22 @@ const maternityLeaveInfo = {
|
||||
</el-descriptions>
|
||||
<table-tool label="假期类型"></table-tool>
|
||||
<el-descriptions :column="2" border class="flow-task-form">
|
||||
<el-descriptions-item label="陪产假" v-if="viewData.sex === '男性' || viewData.sex === '男'">
|
||||
<el-descriptions-item label="陪产假" v-if="viewData.sex === '男'">
|
||||
{{viewData.withLeave}}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="育儿假" v-if="viewData.sex === '男性' || viewData.sex === '男'">
|
||||
<el-descriptions-item label="育儿假" v-if="viewData.sex === '男'">
|
||||
{{viewData.parentalLeave}}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="产假" v-if="viewData.sex === '女性' || viewData.sex === '女'">
|
||||
<el-descriptions-item label="产假" v-if="viewData.sex === '女'">
|
||||
{{viewData.maternityLeave}}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="延长假" v-if="viewData.sex === '女性' || viewData.sex === '女'">
|
||||
<el-descriptions-item label="延长假" v-if="viewData.sex === '女'">
|
||||
{{viewData.extendLeave}}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="多胞胎" v-if="viewData.sex === '女性' || viewData.sex === '女'">
|
||||
<el-descriptions-item label="多胞胎" v-if="viewData.sex === '女'">
|
||||
{{viewData.birthsLeave}}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="难产假" v-if="viewData.sex === '女性' || viewData.sex === '女'">
|
||||
<el-descriptions-item label="难产假" v-if="viewData.sex === '女'">
|
||||
{{viewData.difficultLeave}}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="寒假">{{viewData.winterLeave}}</el-descriptions-item>
|
||||
|
||||
+18
@@ -84,6 +84,7 @@ layout("/layouts/platform.html"){
|
||||
<el-table-column label="操作" fixed="right" width="200">
|
||||
<template slot-scope="{row}">
|
||||
<el-button @click="onView(row)" size="mini" type="primary">查看</el-button>
|
||||
<el-button @click="onDelete(row)" :loading="formLoading" size="mini" type="danger">删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
@@ -135,6 +136,23 @@ layout("/layouts/platform.html"){
|
||||
this.$refs.infoRef.onOpen(row)
|
||||
})
|
||||
},
|
||||
onDelete(row) {
|
||||
this.$confirm("确定要删除【" + row.username + "】的变更记录吗?删除后将同步删除关联流程记录", "提示", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: "warning"
|
||||
}).then(() => {
|
||||
this.formLoading = true
|
||||
this.$axios.post(loc() + "/delete", {id: row.id}).then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.$message.success(res.msg)
|
||||
this.doSearch()
|
||||
}
|
||||
}).finally(() => {
|
||||
this.formLoading = false
|
||||
})
|
||||
})
|
||||
},
|
||||
async unionChange(val) {
|
||||
this.pageForm.unitId = null
|
||||
this.unitList = await this.$businessTool.listUnit(val)
|
||||
|
||||
+9
@@ -75,6 +75,12 @@ layout("/layouts/platform.html"){
|
||||
type="primary">导出会员缴费金额
|
||||
</el-button>
|
||||
|
||||
<el-button @click="exportAnnualPayMemberList"
|
||||
size="small"
|
||||
icon="el-icon-download"
|
||||
type="primary">导出年度缴费名单
|
||||
</el-button>
|
||||
|
||||
<el-button :disabled="tableData.length==0" :loading="tableLoading" @click="clearPayRecord"
|
||||
icon="el-icon-delete"
|
||||
size="small"
|
||||
@@ -191,6 +197,9 @@ layout("/layouts/platform.html"){
|
||||
exportYearPayRecord(){
|
||||
this.$downLoad('/platform/medicalMutualAid/aidFund/payRecord/exportYearPayRecord', this.pageForm)
|
||||
},
|
||||
exportAnnualPayMemberList() {
|
||||
this.$downLoad('/platform/medicalMutualAid/aidFund/payRecord/exportAnnualPayMemberList', this.pageForm)
|
||||
},
|
||||
exportPayRecord() {
|
||||
this.$downLoad('/platform/medicalMutualAid/aidFund/payRecord/exportPayRecord', this.pageForm)
|
||||
},
|
||||
|
||||
+27
-1
@@ -40,10 +40,13 @@ layout("/layouts/platform.html"){
|
||||
<el-radio-button label="true">已审核</el-radio-button>
|
||||
<el-radio-button label="false">未审核</el-radio-button>
|
||||
</el-radio-group>
|
||||
<el-button @click="notifyUnapprovedUnionChairman" :loading="formLoading" size="small" type="primary">
|
||||
一键通知未审核工会
|
||||
</el-button>
|
||||
</table-tool>
|
||||
|
||||
<el-table :data="tableData" :size="tableSize" @sort-change="pageOrder"
|
||||
ref="table" row-key="id" style="width: 100%">
|
||||
ref="table" row-key="id" style="width: 100%" v-loading="tableLoading">
|
||||
<el-table-column :index="indexMethod" header-align="center" label="序号"
|
||||
type="index" width="60px"></el-table-column>
|
||||
<el-table-column
|
||||
@@ -158,6 +161,29 @@ layout("/layouts/platform.html"){
|
||||
this.$refs.infoRef.onOpen(row)
|
||||
})
|
||||
},
|
||||
notifyUnapprovedUnionChairman() {
|
||||
this.$confirm("确定要通知未审核的分工会吗?", "提示", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: "warning"
|
||||
}).then(() => {
|
||||
this.formLoading = true
|
||||
this.$axios.post(loc() + "/notifyUnapprovedUnionChairman", {
|
||||
year: this.pageForm.year,
|
||||
aidFundMemberUserType: this.pageForm.aidFundMemberUserType,
|
||||
changeType: this.pageForm.changeType
|
||||
}).then((res) => {
|
||||
if (res.code === 0) {
|
||||
const loginNames = res.data || []
|
||||
this.$alert(loginNames.length ? loginNames.join("、") : "暂无需要发送通知的人员", "需要发送人的工号", {
|
||||
confirmButtonText: "确定"
|
||||
})
|
||||
}
|
||||
}).finally(() => {
|
||||
this.formLoading = false
|
||||
})
|
||||
})
|
||||
},
|
||||
|
||||
handleTaskAction(val) {
|
||||
this.$confirm("您确定要提交吗?", "提示", {
|
||||
|
||||
+3
-2
@@ -1,4 +1,4 @@
|
||||
<!--#
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<div id="app" v-cloak>
|
||||
@@ -102,7 +102,7 @@ layout("/layouts/platform.html"){
|
||||
{ prop: "loginName", label: "工号", sortable: true },
|
||||
{ prop: "userName", label: "姓名", sortable: true },
|
||||
{ prop: "userState", label: "在职状态", sortable: true },
|
||||
// { prop: "personType", label: "教职工类别", sortable: true },
|
||||
// { prop: "personType", label: "人员类型", sortable: true },
|
||||
// { prop: "preparedBy", label: "编制类别", sortable: true },
|
||||
{ prop: "unionName", label: "所属工会", sortable: true },
|
||||
{ prop: "unitName", label: "所属单位", sortable: true },
|
||||
@@ -194,3 +194,4 @@ layout("/layouts/platform.html"){
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
|
||||
|
||||
+4
-3
@@ -1,4 +1,4 @@
|
||||
const COMMON_QUERY = {
|
||||
const COMMON_QUERY = {
|
||||
template: /*language=HTML*/ `
|
||||
<search @search="doSearch">
|
||||
<search-item label="姓名/工号">
|
||||
@@ -27,8 +27,8 @@ const COMMON_QUERY = {
|
||||
<dict-select v-model="pageForm.userStates" placeholder="请选择在职状态" @change="doSearch"
|
||||
code="USER_STATE" multiple collapse-tags></dict-select>
|
||||
</search-item>
|
||||
<search-item label="教职工类别">
|
||||
<dict-select v-model="pageForm.personTypes" placeholder="请选择教职工类别" @change="doSearch"
|
||||
<search-item label="人员类型">
|
||||
<dict-select v-model="pageForm.personTypes" placeholder="请选择人员类型" @change="doSearch"
|
||||
code="USER_PERSON_TYPE" multiple collapse-tags></dict-select>
|
||||
</search-item>
|
||||
<!-- <search-item label="编制类别">-->
|
||||
@@ -99,3 +99,4 @@ const COMMON_QUERY = {
|
||||
this.initData()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -27,8 +27,7 @@ const INFO = {
|
||||
<!-- <el-descriptions-item label="电子邮箱">{{ viewData.email }}</el-descriptions-item>-->
|
||||
|
||||
<el-descriptions-item label="在职状态">{{ viewData.userState }}</el-descriptions-item>
|
||||
<!-- <el-descriptions-item label="教职工类别">{{ viewData.personType }}</el-descriptions-item>-->
|
||||
<el-descriptions-item label="编制类别">{{ viewData.preparedBy }}</el-descriptions-item>
|
||||
<!-- <el-descriptions-item label="人员类型">{{ viewData.personType }}</el-descriptions-item>-->
|
||||
<el-descriptions-item label="婚姻状况">{{ viewData.marriage }}</el-descriptions-item>
|
||||
<el-descriptions-item label="入职时间">{{ viewData.arrivalAtSchoolDate }}</el-descriptions-item>
|
||||
<el-descriptions-item></el-descriptions-item>
|
||||
@@ -147,3 +146,4 @@ const INFO = {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+3
-2
@@ -1,4 +1,4 @@
|
||||
const MEMBER_APPLY_AUDIT_INFO = {
|
||||
const MEMBER_APPLY_AUDIT_INFO = {
|
||||
template: /*language=HTML*/ `
|
||||
<div>
|
||||
<el-tabs v-model="activeName">
|
||||
@@ -25,7 +25,7 @@ const MEMBER_APPLY_AUDIT_INFO = {
|
||||
<el-descriptions-item label="电子邮箱">{{ viewData.email }}</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="在职状态">{{ viewData.userState }}</el-descriptions-item>
|
||||
<el-descriptions-item label="教职工类别">{{ viewData.personType }}</el-descriptions-item>
|
||||
<el-descriptions-item label="人员类型">{{ viewData.personType }}</el-descriptions-item>
|
||||
<el-descriptions-item></el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="家庭主要成员" :span="3">
|
||||
@@ -125,3 +125,4 @@ const MEMBER_APPLY_AUDIT_INFO = {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<!--#
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<div id="app" v-cloak>
|
||||
@@ -85,7 +85,7 @@ layout("/layouts/platform.html"){
|
||||
{ prop: "loginName", label: "工号", sortable: true },
|
||||
{ prop: "userName", label: "姓名", sortable: true },
|
||||
{ prop: "userState", label: "在职状态", sortable: true },
|
||||
// { prop: "personType", label: "教职工类别", sortable: true },
|
||||
// { prop: "personType", label: "人员类型", sortable: true },
|
||||
// { prop: "preparedBy", label: "编制类别", sortable: true },
|
||||
{ prop: "unionName", label: "所属工会", sortable: true },
|
||||
{ prop: "unitName", label: "所属单位", sortable: true },
|
||||
@@ -161,3 +161,4 @@ layout("/layouts/platform.html"){
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
|
||||
|
||||
+3
-2
@@ -1,4 +1,4 @@
|
||||
<!--#
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<div id="app" v-cloak>
|
||||
@@ -120,7 +120,7 @@ layout("/layouts/platform.html"){
|
||||
{ prop: "loginName", label: "工号", sortable: true },
|
||||
{ prop: "userName", label: "姓名", sortable: true },
|
||||
{ prop: "userState", label: "在职状态", sortable: true },
|
||||
{ prop: "personType", label: "教职工类别", sortable: true },
|
||||
{ prop: "personType", label: "人员类型", sortable: true },
|
||||
// { prop: "preparedBy", label: "编制类别", sortable: true },
|
||||
{ prop: "unionName", label: "所属工会", sortable: true },
|
||||
{ prop: "unitName", label: "所属单位", sortable: true },
|
||||
@@ -225,3 +225,4 @@ layout("/layouts/platform.html"){
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<div id="member_apply">
|
||||
<div id="member_apply">
|
||||
<el-form :model="formData" ref="formRef" :rules="formRules" label-width="0" label-suffix=":" class="flow-task-form">
|
||||
<el-descriptions :column="3" border>
|
||||
<el-descriptions-item label="工号">
|
||||
@@ -90,7 +90,7 @@
|
||||
disabled style="width: 100%"></dict-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="教职工类别">
|
||||
<el-descriptions-item label="人员类型">
|
||||
<el-form-item prop="personType">
|
||||
<dict-select v-model="formData.personType" code="USER_PERSON_TYPE"
|
||||
disabled style="width: 100%"></dict-select>
|
||||
@@ -464,3 +464,4 @@
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<!--#
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<div id="app" v-cloak>
|
||||
@@ -96,7 +96,7 @@ layout("/layouts/platform.html"){
|
||||
disabled style="width: 100%"></dict-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<!--<el-descriptions-item label="教职工类别">
|
||||
<!--<el-descriptions-item label="人员类型">
|
||||
<el-form-item prop="personType">
|
||||
<dict-select v-model="formData.personType" code="USER_PERSON_TYPE"
|
||||
style="width: 100%"></dict-select>
|
||||
@@ -477,3 +477,4 @@ layout("/layouts/platform.html"){
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
|
||||
|
||||
+2
-2
@@ -104,8 +104,7 @@ layout("/layouts/platform.html"){
|
||||
{ prop: "loginName", label: "工号", sortable: true },
|
||||
{ prop: "userName", label: "姓名", sortable: true },
|
||||
{ prop: "userState", label: "在职状态", sortable: true },
|
||||
{ prop: "personType", label: "教职工类别", sortable: true },
|
||||
{ prop: "preparedBy", label: "编制类别", sortable: true },
|
||||
{ prop: "personType", label: "人员类型", sortable: true },
|
||||
{ prop: "unionName", label: "所属工会", sortable: true },
|
||||
{ prop: "unitName", label: "所属单位", sortable: true },
|
||||
{ prop: "sign", label: "签字" },
|
||||
@@ -196,3 +195,4 @@ layout("/layouts/platform.html"){
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<div id="member_apply_view">
|
||||
<div id="member_apply_view">
|
||||
<el-descriptions :column="3" border>
|
||||
<el-descriptions-item label="工号">{{ viewData.loginname }}</el-descriptions-item>
|
||||
<el-descriptions-item label="姓名">{{ viewData.username }}</el-descriptions-item>
|
||||
@@ -21,7 +21,7 @@
|
||||
<el-descriptions-item label="电子邮箱">{{ viewData.email }}</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="在职状态">{{ viewData.userState }}</el-descriptions-item>
|
||||
<el-descriptions-item label="教职工类别">{{ viewData.personType }}</el-descriptions-item>
|
||||
<el-descriptions-item label="人员类型">{{ viewData.personType }}</el-descriptions-item>
|
||||
<el-descriptions-item></el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="家庭主要成员" :span="3">
|
||||
@@ -142,3 +142,4 @@
|
||||
width: 15%;
|
||||
}
|
||||
</style>
|
||||
|
||||
|
||||
+4
-6
@@ -42,11 +42,8 @@ layout("/layouts/platform.html"){
|
||||
<search-item label="在职状态">
|
||||
<dict-select v-model="pageForm.userState" placeholder="请选择在职状态" @change="doSearch" code="USER_STATE"></dict-select>
|
||||
</search-item>
|
||||
<search-item label="编制类别">
|
||||
<dict-select v-model="pageForm.preparedBy" placeholder="请选择编制类别" @change="doSearch" code="USER_PREPARED_BY_TYPE"></dict-select>
|
||||
</search-item>
|
||||
<search-item label="教职工类别">
|
||||
<dict-select v-model="pageForm.personType" placeholder="请选择教职工类别" @change="doSearch" code="USER_PERSON_TYPE"></dict-select>
|
||||
<search-item label="人员类型">
|
||||
<dict-select v-model="pageForm.personType" placeholder="请选择人员类型" @change="doSearch" code="USER_PERSON_TYPE"></dict-select>
|
||||
</search-item>
|
||||
</search>
|
||||
</el-card>
|
||||
@@ -246,7 +243,7 @@ layout("/layouts/platform.html"){
|
||||
{ prop: "sex", label: "性别", sortable: true, width: "100px" },
|
||||
{ prop: "userState", label: "在职状态", sortable: true },
|
||||
// {prop: "preparedBy", label: "编制类别", sortable: true},
|
||||
// {prop: 'personType', label: '教职工类别', sortable: true},
|
||||
// {prop: 'personType', label: '人员类型', sortable: true},
|
||||
{ prop: "unionName", label: "所属工会", sortable: true },
|
||||
{ prop: "unitName", label: "所属单位", sortable: true },
|
||||
{ prop: "isChanged", label: "变更状态", sortable: true },
|
||||
@@ -549,3 +546,4 @@ layout("/layouts/platform.html"){
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
|
||||
|
||||
+3
-2
@@ -1,4 +1,4 @@
|
||||
<!--#
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
@@ -94,7 +94,7 @@ layout("/layouts/platform.html"){
|
||||
{ prop: "userName", label: "姓名", sortable: true },
|
||||
{ prop: "sex", label: "性别", sortable: true },
|
||||
{ prop: "userState", label: "在职状态", sortable: true },
|
||||
{ prop: "personType", label: "教职工类别", sortable: true },
|
||||
{ prop: "personType", label: "人员类型", sortable: true },
|
||||
// { prop: 'preparedBy', label: '编制类别', sortable: true },
|
||||
{ prop: "unionName", label: "所属工会", sortable: true },
|
||||
{ prop: "unitName", label: "所属单位", sortable: true },
|
||||
@@ -204,3 +204,4 @@ layout("/layouts/platform.html"){
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
|
||||
|
||||
+4
-3
@@ -1,4 +1,4 @@
|
||||
const COMMON_QUERY = {
|
||||
const COMMON_QUERY = {
|
||||
template: /*language=HTML*/ `
|
||||
<search @search="doSearch">
|
||||
<search-item label="姓名/工号">
|
||||
@@ -22,8 +22,8 @@ const COMMON_QUERY = {
|
||||
<dict-select v-model="pageForm.userStates" placeholder="请选择在职状态" @change="doSearch"
|
||||
code="USER_STATE" multiple collapse-tags></dict-select>
|
||||
</search-item>
|
||||
<search-item label="教职工类别">
|
||||
<dict-select v-model="pageForm.personTypes" placeholder="请选择教职工类别" @change="doSearch"
|
||||
<search-item label="人员类型">
|
||||
<dict-select v-model="pageForm.personTypes" placeholder="请选择人员类型" @change="doSearch"
|
||||
code="USER_PERSON_TYPE" multiple collapse-tags></dict-select>
|
||||
</search-item>
|
||||
<!-- <search-item label="编制类别">-->
|
||||
@@ -97,3 +97,4 @@ const COMMON_QUERY = {
|
||||
this.initData()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -30,8 +30,7 @@ const INFO = {
|
||||
<el-descriptions-item label="电子邮箱">{{ viewData.email }}</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="在职状态">{{ viewData.userState }}</el-descriptions-item>
|
||||
<el-descriptions-item label="教职工类别">{{ viewData.personType }}</el-descriptions-item>
|
||||
<el-descriptions-item label="编制类别">{{ viewData.preparedBy }}</el-descriptions-item>
|
||||
<el-descriptions-item label="人员类型">{{ viewData.personType }}</el-descriptions-item>
|
||||
|
||||
<template v-if="viewData.userState == '退休'">
|
||||
<el-descriptions-item label="退休日期">{{ viewData.retireDate ?
|
||||
@@ -178,3 +177,4 @@ const INFO = {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+2
-2
@@ -24,8 +24,7 @@ const MEMBER_ALL_CHANGE_INFO = {
|
||||
<el-descriptions-item label="电子邮箱">{{ viewData.email }}</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="在职状态">{{ viewData.userState }}</el-descriptions-item>
|
||||
<el-descriptions-item label="教职工类别">{{ viewData.personType }}</el-descriptions-item>
|
||||
<el-descriptions-item label="编制类别">{{ viewData.preparedBy }}</el-descriptions-item>
|
||||
<el-descriptions-item label="人员类型">{{ viewData.personType }}</el-descriptions-item>
|
||||
|
||||
<template v-if="viewData.userState == '退休'">
|
||||
<el-descriptions-item label="退休日期">{{ viewData.retireDate ? $moment(viewData.retireDate).format("YYYY-MM-DD") : '暂无' }}</el-descriptions-item>
|
||||
@@ -109,3 +108,4 @@ const MEMBER_ALL_CHANGE_INFO = {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+2
-7
@@ -139,18 +139,12 @@ const MEMBER_CHANGE = {
|
||||
:disabled="allowFields('userState')" style="width: 100%"></dict-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="教职工类别">
|
||||
<el-descriptions-item label="人员类型">
|
||||
<el-form-item prop="personType">
|
||||
<dict-select v-model="formData.personType" code="USER_PERSON_TYPE"
|
||||
:disabled="allowFields('personType')" style="width: 100%"></dict-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="编制类别">
|
||||
<el-form-item prop="preparedBy">
|
||||
<dict-select v-model="formData.preparedBy" code="USER_PREPARED_BY_TYPE"
|
||||
:disabled="allowFields('preparedBy')" style="width: 100%"></dict-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="人员属性">
|
||||
<el-form-item prop="userAttribute">
|
||||
<dict-select v-model="formData.userAttribute" code="USER_ATTRIBUTE"
|
||||
@@ -512,3 +506,4 @@ const MEMBER_CHANGE = {
|
||||
}
|
||||
`
|
||||
}
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<!--#
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<div id="app" v-cloak>
|
||||
@@ -30,8 +30,8 @@ layout("/layouts/platform.html"){
|
||||
<dict-select v-model="pageForm.userState" placeholder="请选择在职状态" @change="doSearch"
|
||||
code="USER_STATE"></dict-select>
|
||||
</search-item>
|
||||
<search-item label="教职工类别">
|
||||
<dict-select v-model="pageForm.personType" placeholder="请选择教职工类别" @change="doSearch"
|
||||
<search-item label="人员类型">
|
||||
<dict-select v-model="pageForm.personType" placeholder="请选择人员类型" @change="doSearch"
|
||||
code="USER_PERSON_TYPE"></dict-select>
|
||||
</search-item>
|
||||
<!-- <search-item label="编制类别">-->
|
||||
@@ -548,7 +548,7 @@ layout("/layouts/platform.html"){
|
||||
{ prop: "mobile", label: "联系电话", width: 120 },
|
||||
{ prop: "political", label: "政治面貌", width: 120, sortable: true},
|
||||
{ prop: "userState", label: "在职状态", width: 120, sortable: true },
|
||||
{ prop: "personType", label: "教职工类别", width: 120, sortable: true, checked: 0 },
|
||||
{ prop: "personType", label: "人员类型", width: 120, sortable: true, checked: 0 },
|
||||
// { prop: "preparedBy", label: "编制类别", width: 120, sortable: true },
|
||||
{ prop: "postDoctoralJoinDate", label: "进站时间", sortable: true, checked: 0 },
|
||||
{ prop: "unionName", label: "所属工会", width: 120, sortable: true },
|
||||
@@ -847,3 +847,4 @@ layout("/layouts/platform.html"){
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<!--#
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<div id="app">
|
||||
@@ -68,7 +68,7 @@ layout("/layouts/platform.html"){
|
||||
{ prop: "username", label: "姓名", sortable: true },
|
||||
{ prop: "sex", label: "性别", sortable: true },
|
||||
{ prop: "userState", label: "在职状态", sortable: true },
|
||||
{ prop: "personType", label: "教职工类别", sortable: true },
|
||||
{ prop: "personType", label: "人员类型", sortable: true },
|
||||
// { prop: "preparedBy", label: "编制类别", sortable: true },
|
||||
{ prop: "unionName", label: "所属工会", sortable: true },
|
||||
{ prop: "unitName", label: "所属单位", sortable: true },
|
||||
@@ -157,3 +157,4 @@ layout("/layouts/platform.html"){
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<!--#
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<div id="app" v-cloak>
|
||||
@@ -27,8 +27,8 @@ layout("/layouts/platform.html"){
|
||||
<dict-select v-model="pageForm.userState" placeholder="请选择在职状态" @change="doSearch"
|
||||
code="USER_STATE"></dict-select>
|
||||
</search-item>
|
||||
<search-item label="教职工类别">
|
||||
<dict-select v-model="pageForm.personType" placeholder="请选择教职工类别" @change="doSearch"
|
||||
<search-item label="人员类型">
|
||||
<dict-select v-model="pageForm.personType" placeholder="请选择人员类型" @change="doSearch"
|
||||
code="USER_PERSON_TYPE"></dict-select>
|
||||
</search-item>
|
||||
<search-item label="变更类型">
|
||||
@@ -135,7 +135,7 @@ layout("/layouts/platform.html"){
|
||||
{prop: 'username', label: '姓名'},
|
||||
{prop: 'sex', label: '性别', sortable: true, width: '100px'},
|
||||
{prop: 'birthday', label: '出生年月', sortable: true},
|
||||
{prop: 'personType', label: '教职工类别', sortable: true},
|
||||
{prop: 'personType', label: '人员类型', sortable: true},
|
||||
{prop: 'userState', label: '在职状态', sortable: true},
|
||||
{prop: 'unionName', label: '所属工会', sortable: true},
|
||||
{prop: 'unitName', label: '所属单位', sortable: true},
|
||||
@@ -227,3 +227,4 @@ layout("/layouts/platform.html"){
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
|
||||
|
||||
+3
-2
@@ -1,4 +1,4 @@
|
||||
<!--#
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
@@ -96,7 +96,7 @@ layout("/layouts/platform.html"){
|
||||
{ prop: "userName", label: "姓名", sortable: true },
|
||||
{ prop: "sex", label: "性别", sortable: true },
|
||||
{ prop: "userState", label: "在职状态", sortable: true },
|
||||
{ prop: "personType", label: "教职工类别", sortable: true },
|
||||
{ prop: "personType", label: "人员类型", sortable: true },
|
||||
// { prop: 'preparedBy', label: '编制类别', sortable: true },
|
||||
{ prop: "unionName", label: "所属工会", sortable: true },
|
||||
{ prop: "unitName", label: "所属单位", sortable: true },
|
||||
@@ -206,3 +206,4 @@ layout("/layouts/platform.html"){
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<div id="member_change">
|
||||
<div id="member_change">
|
||||
<el-form :model="formData" ref="formRef" :rules="formRules" label-width="0" label-suffix=":" class="flow-task-form">
|
||||
<el-descriptions :column="3" border>
|
||||
<el-descriptions-item label="工号">
|
||||
@@ -131,7 +131,7 @@
|
||||
:disabled="allowFields('userState')" style="width: 100%"></dict-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="教职工类别">
|
||||
<el-descriptions-item label="人员类型">
|
||||
<el-form-item prop="personType">
|
||||
<dict-select v-model="formData.personType" code="USER_PERSON_TYPE"
|
||||
:disabled="allowFields('personType')" style="width: 100%"></dict-select>
|
||||
@@ -530,3 +530,4 @@
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<!--#
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<div id="app">
|
||||
@@ -139,7 +139,7 @@ layout("/layouts/platform.html"){
|
||||
:disabled="allowFields('userState')" style="width: 100%"></dict-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="教职工类别">
|
||||
<el-descriptions-item label="人员类型">
|
||||
<el-form-item prop="personType">
|
||||
<dict-select v-model="formData.personType" code="USER_PERSON_TYPE"
|
||||
:disabled="allowFields('personType')" style="width: 100%"></dict-select>
|
||||
@@ -552,3 +552,4 @@ layout("/layouts/platform.html"){
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
|
||||
|
||||
+2
-2
@@ -94,8 +94,7 @@ layout("/layouts/platform.html"){
|
||||
{ prop: "userName", label: "姓名", sortable: true },
|
||||
{ prop: "sex", label: "性别", sortable: true },
|
||||
{ prop: "userState", label: "在职状态", sortable: true },
|
||||
{ prop: "personType", label: "教职工类别", sortable: true },
|
||||
{ prop: 'preparedBy', label: '编制类别', sortable: true },
|
||||
{ prop: "personType", label: "人员类型", sortable: true },
|
||||
{ prop: "unionName", label: "所属工会", sortable: true },
|
||||
{ prop: "unitName", label: "所属单位", sortable: true },
|
||||
{ prop: "changeTypes", label: "变更类型", sortable: true, width: 200 },
|
||||
@@ -204,3 +203,4 @@ layout("/layouts/platform.html"){
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<div id="member_change_view">
|
||||
<div id="member_change_view">
|
||||
<el-tabs v-model="activeName">
|
||||
<el-tab-pane label="基础信息" name="basicInfo">
|
||||
<el-descriptions :column="3" border class="descriptions-form">
|
||||
@@ -23,7 +23,7 @@
|
||||
<el-descriptions-item label="电子邮箱">{{ viewData.email }}</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="在职状态">{{ viewData.userState }}</el-descriptions-item>
|
||||
<el-descriptions-item label="教职工类别">{{ viewData.personType }}</el-descriptions-item>
|
||||
<el-descriptions-item label="人员类型">{{ viewData.personType }}</el-descriptions-item>
|
||||
<el-descriptions-item label="进校时间">{{ viewData.schoolTime }}</el-descriptions-item>
|
||||
|
||||
<template v-if="viewData.userState == '退休'">
|
||||
@@ -163,3 +163,4 @@
|
||||
width: 15%;
|
||||
}
|
||||
</style>
|
||||
|
||||
|
||||
@@ -70,8 +70,7 @@ const MEMBER_INFO = {
|
||||
|
||||
<!-- 第 3 行 -->
|
||||
<el-descriptions-item label="在职状态">{{ viewData.userState }}</el-descriptions-item>
|
||||
<el-descriptions-item label="教职工类别">{{ viewData.personType }}</el-descriptions-item>
|
||||
<el-descriptions-item label="编制类别">{{ viewData.preparedBy }}</el-descriptions-item>
|
||||
<el-descriptions-item label="人员类型">{{ viewData.personType }}</el-descriptions-item>
|
||||
|
||||
<!-- 第 4 行 -->
|
||||
<el-descriptions-item label="职称">{{ viewData.professionalTitle }}</el-descriptions-item>
|
||||
@@ -104,3 +103,4 @@ const MEMBER_INFO = {
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
+3
-6
@@ -27,12 +27,8 @@ const MEMBER_MANAGE_QUERY = {
|
||||
<dict-select v-model="pageForm.userState" placeholder="请选择在职状态" @change="doSearch"
|
||||
code="USER_STATE"></dict-select>
|
||||
</search-item>
|
||||
<search-item label="编制类别">
|
||||
<dict-select v-model="pageForm.preparedBy" placeholder="请选择编制类别" @change="doSearch"
|
||||
code="USER_PREPARED_BY_TYPE"></dict-select>
|
||||
</search-item>
|
||||
<search-item label="教职工类别">
|
||||
<dict-select v-model="pageForm.personType" placeholder="请选择教职工类别" @change="doSearch"
|
||||
<search-item label="人员类型">
|
||||
<dict-select v-model="pageForm.personType" placeholder="请选择人员类型" @change="doSearch"
|
||||
code="USER_PERSON_TYPE"></dict-select>
|
||||
</search-item>
|
||||
<search-item label="更新日期">
|
||||
@@ -134,3 +130,4 @@ const MEMBER_MANAGE_QUERY = {
|
||||
this.initData()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+2
-2
@@ -154,8 +154,7 @@ const MEMBER_MANAGE_TABLE = {
|
||||
{ prop: "sex", label: "性别", sortable: true, width: "100px" },
|
||||
{ prop: "birthday", label: "出生年月", sortable: true },
|
||||
{ prop: "userState", label: "在职状态", sortable: true },
|
||||
{ prop: "preparedBy", label: "编制类别", sortable: true },
|
||||
{ prop: "personType", label: "教职工类别", sortable: true },
|
||||
{ prop: "personType", label: "人员类型", sortable: true },
|
||||
{ prop: "unionName", label: "所属工会", sortable: true },
|
||||
{ prop: "unitName", label: "所属单位", sortable: true }
|
||||
],
|
||||
@@ -257,3 +256,4 @@ const MEMBER_MANAGE_TABLE = {
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+3
-2
@@ -1,4 +1,4 @@
|
||||
const MEMBER_VERIFICATION_CHANGE = {
|
||||
const MEMBER_VERIFICATION_CHANGE = {
|
||||
template: `
|
||||
<el-card shadow="never">
|
||||
<div>
|
||||
@@ -10,7 +10,7 @@ const MEMBER_VERIFICATION_CHANGE = {
|
||||
<el-descriptions-item label="性别">{{ viewData.sex }}</el-descriptions-item>
|
||||
<el-descriptions-item label="民族">{{ viewData.nation }}</el-descriptions-item>
|
||||
<el-descriptions-item label="在职状态">{{ viewData.userState }}</el-descriptions-item>
|
||||
<el-descriptions-item label="教职工类别">{{ viewData.personType }}</el-descriptions-item>
|
||||
<el-descriptions-item label="人员类型">{{ viewData.personType }}</el-descriptions-item>
|
||||
<el-descriptions-item label="学历">{{ viewData.education }}</el-descriptions-item>
|
||||
<el-descriptions-item label="政治面貌">{{ viewData.political }}</el-descriptions-item>
|
||||
<el-descriptions-item label="婚姻状况">{{ viewData.marriage || '' }}</el-descriptions-item>
|
||||
@@ -94,3 +94,4 @@ const MEMBER_VERIFICATION_CHANGE = {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<!--#
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<div id="app">
|
||||
@@ -58,7 +58,7 @@ layout("/layouts/platform.html"){
|
||||
{ prop: "username", label: "姓名", sortable: true },
|
||||
{ prop: "sex", label: "性别", sortable: true },
|
||||
{ prop: "userState", label: "在职状态", sortable: true },
|
||||
{ prop: "personType", label: "教职工类别", sortable: true },
|
||||
{ prop: "personType", label: "人员类型", sortable: true },
|
||||
// { prop: "preparedBy", label: "编制类别", sortable: true },
|
||||
{ prop: "unionName", label: "所属工会", sortable: true },
|
||||
{ prop: "unitName", label: "所属单位", sortable: true },
|
||||
@@ -133,3 +133,4 @@ layout("/layouts/platform.html"){
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<!--#
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
@@ -177,7 +177,7 @@ layout("/layouts/platform.html"){
|
||||
v-loading="loading.userStateMember"
|
||||
></div>
|
||||
|
||||
<div class="col-title">教职工类别</div>
|
||||
<div class="col-title">人员类型</div>
|
||||
<div
|
||||
id="personTypeMemberChart"
|
||||
style="width: 100%; height: calc(50% - 35px); box-sizing: border-box; padding: 30px 10px"
|
||||
@@ -716,3 +716,4 @@ layout("/layouts/platform.html"){
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
|
||||
|
||||
+4
-3
@@ -1,4 +1,4 @@
|
||||
const COMMON_QUERY = {
|
||||
const COMMON_QUERY = {
|
||||
template: /*language=HTML*/ `
|
||||
<search @search="doSearch">
|
||||
<search-item label="姓名/工号">
|
||||
@@ -37,8 +37,8 @@ const COMMON_QUERY = {
|
||||
<dict-select v-model="pageForm.userStates" placeholder="请选择在职状态" @change="doSearch"
|
||||
code="USER_STATE" multiple collapse-tags></dict-select>
|
||||
</search-item>
|
||||
<search-item label="教职工类别" v-if="!query_disable">
|
||||
<dict-select v-model="pageForm.personTypes" placeholder="请选择教职工类别" @change="doSearch"
|
||||
<search-item label="人员类型" v-if="!query_disable">
|
||||
<dict-select v-model="pageForm.personTypes" placeholder="请选择人员类型" @change="doSearch"
|
||||
code="USER_PERSON_TYPE" multiple collapse-tags></dict-select>
|
||||
</search-item>
|
||||
<!-- <search-item label="编制类别">-->
|
||||
@@ -125,3 +125,4 @@ const COMMON_QUERY = {
|
||||
this.initData()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+2
-1
@@ -120,7 +120,7 @@
|
||||
<!-- style="width: 100%"></dict-select>-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- </el-descriptions-item>-->
|
||||
<!-- <el-descriptions-item label="教职工类别">-->
|
||||
<!-- <el-descriptions-item label="人员类型">-->
|
||||
<!-- <el-form-item prop="personType">-->
|
||||
<!-- <dict-select v-model="formData.personType" code="USER_PERSON_TYPE"-->
|
||||
<!-- style="width: 100%"></dict-select>-->
|
||||
@@ -370,3 +370,4 @@
|
||||
this.initUnits()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+4
-3
@@ -1,4 +1,4 @@
|
||||
<!--#
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
@@ -97,7 +97,7 @@ layout("/layouts/platform.html"){
|
||||
</div>
|
||||
</div>
|
||||
<div class="search-other mt20">
|
||||
<div class="search-other-label">教职工类别</div>
|
||||
<div class="search-other-label">人员类型</div>
|
||||
<div>
|
||||
<el-tag
|
||||
style="margin-right: 10px;cursor: pointer"
|
||||
@@ -207,7 +207,7 @@ layout("/layouts/platform.html"){
|
||||
{ prop: "userName", label: "姓名", sortable: true },
|
||||
{ prop: "sex", label: "性别", sortable: true },
|
||||
{ prop: "userState", label: "在职状态", sortable: true },
|
||||
{ prop: "personType", label: "教职工类别", sortable: true },
|
||||
{ prop: "personType", label: "人员类型", sortable: true },
|
||||
// { prop: "preparedBy", label: "编制类别", sortable: true },
|
||||
{ prop: "unionName", label: "所属工会", sortable: true },
|
||||
{ prop: "unitName", label: "所属单位", sortable: true },
|
||||
@@ -314,3 +314,4 @@ layout("/layouts/platform.html"){
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<!--#
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<div id="app" v-cloak>
|
||||
@@ -126,7 +126,7 @@ layout("/layouts/platform.html"){
|
||||
{ prop: "mobile", label: "联系电话", width: 120 },
|
||||
{ prop: "political", label: "政治面貌", width: 120, sortable: true},
|
||||
{ prop: "userState", label: "在职状态", width: 120, sortable: true },
|
||||
{ prop: "personType", label: "教职工类别", width: 120, sortable: true, checked: 0 },
|
||||
{ prop: "personType", label: "人员类型", width: 120, sortable: true, checked: 0 },
|
||||
// { prop: "preparedBy", label: "编制类别", width: 120, sortable: true },
|
||||
{ prop: "postDoctoralJoinDate", label: "进站时间", sortable: true, checked: 0 },
|
||||
{ prop: "unionName", label: "所属工会", width: 120, sortable: true },
|
||||
@@ -238,3 +238,4 @@ layout("/layouts/platform.html"){
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
|
||||
|
||||
@@ -43,17 +43,9 @@ layout("/layouts/platform.html"){
|
||||
<search-item label="在职状态">
|
||||
<dict-select v-model="pageForm.userState" placeholder="请选择在职状态" @change="doSearch" code="USER_STATE"></dict-select>
|
||||
</search-item>
|
||||
<search-item label="教职工类别">
|
||||
<dict-select v-model="pageForm.personType" placeholder="请选择教职工类别" @change="doSearch" code="USER_PERSON_TYPE"></dict-select>
|
||||
<search-item label="人员类型">
|
||||
<dict-select v-model="pageForm.personType" placeholder="请选择人员类型" @change="doSearch" code="USER_PERSON_TYPE"></dict-select>
|
||||
</search-item>
|
||||
<search-item label="编制类别">
|
||||
<dict-select
|
||||
v-model="pageForm.preparedBy"
|
||||
placeholder="请选择编制类别"
|
||||
@change="doSearch"
|
||||
code="USER_PREPARED_BY_TYPE"
|
||||
></dict-select>
|
||||
</search-item>
|
||||
<search-item label="人员分类">
|
||||
<dict-select v-model="pageForm.aidFundMemberUserType" placeholder="请选择人员分类" @change="doSearch" code="AIDFUND_MEMBER_USER_TYPE"></dict-select>
|
||||
</search-item>
|
||||
@@ -128,7 +120,7 @@ layout("/layouts/platform.html"){
|
||||
{ prop: "sex", label: "性别" },
|
||||
{ prop: "mobile", label: "联系电话" },
|
||||
{ prop: "userState", label: "在职状态", sortable: true },
|
||||
{ prop: "personType", label: "教职工类别", sortable: true },
|
||||
{ prop: "personType", label: "人员类型", sortable: true },
|
||||
// { prop: "preparedBy", label: "编制类别", sortable: true },
|
||||
{ prop: "unionName", label: "所属工会", sortable: true },
|
||||
{ prop: "unitName", label: "所属单位", sortable: true }
|
||||
@@ -177,3 +169,4 @@ layout("/layouts/platform.html"){
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<!--#
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
@@ -43,8 +43,8 @@ layout("/layouts/platform.html"){
|
||||
<search-item label="在职状态">
|
||||
<dict-select v-model="pageForm.userState" placeholder="请选择在职状态" @change="doSearch" code="USER_STATE"></dict-select>
|
||||
</search-item>
|
||||
<search-item label="教职工类别">
|
||||
<dict-select v-model="pageForm.personType" placeholder="请选择教职工类别" @change="doSearch" code="USER_PERSON_TYPE"></dict-select>
|
||||
<search-item label="人员类型">
|
||||
<dict-select v-model="pageForm.personType" placeholder="请选择人员类型" @change="doSearch" code="USER_PERSON_TYPE"></dict-select>
|
||||
</search-item>
|
||||
<search-item label="人员分类">
|
||||
<dict-select v-model="pageForm.aidFundMemberUserType" placeholder="请选择人员分类" @change="doSearch" code="AIDFUND_MEMBER_USER_TYPE"></dict-select>
|
||||
@@ -201,3 +201,4 @@ layout("/layouts/platform.html"){
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
|
||||
|
||||
+5
-4
@@ -1,4 +1,4 @@
|
||||
<!--#
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<div id="app" v-cloak>
|
||||
@@ -26,8 +26,8 @@ layout("/layouts/platform.html"){
|
||||
<dict-select v-model="pageForm.userState" placeholder="请选择在职状态" @change="doSearch"
|
||||
code="USER_STATE"></dict-select>
|
||||
</search-item>
|
||||
<search-item label="教职工类别">
|
||||
<dict-select v-model="pageForm.personType" placeholder="请选择教职工类别" @change="doSearch"
|
||||
<search-item label="人员类型">
|
||||
<dict-select v-model="pageForm.personType" placeholder="请选择人员类型" @change="doSearch"
|
||||
code="USER_PERSON_TYPE"></dict-select>
|
||||
</search-item>
|
||||
</search>
|
||||
@@ -135,7 +135,7 @@ layout("/layouts/platform.html"){
|
||||
{prop: 'username', label: '姓名'},
|
||||
{prop: 'sex', label: '性别'},
|
||||
{prop: 'mobile', label: '联系电话'},
|
||||
{prop: 'personType', label: '教职工类别'},
|
||||
{prop: 'personType', label: '人员类型'},
|
||||
{prop: 'userState', label: '在职状态'},
|
||||
{prop: 'unionName', label: '所属工会'},
|
||||
{prop: 'unitName', label: '所属单位'},
|
||||
@@ -234,3 +234,4 @@ layout("/layouts/platform.html"){
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
|
||||
|
||||
+4
-8
@@ -19,12 +19,8 @@ const SCHOOL_VIEW_AND_HANDLE = {
|
||||
<dict-select v-model="pageForm.userState" placeholder="请选择在职状态" @change="doSearch"
|
||||
code="USER_STATE"></dict-select>
|
||||
</search-item>
|
||||
<search-item label="编制类别">
|
||||
<dict-select v-model="pageForm.preparedBy" placeholder="请选择编制类别" @change="doSearch"
|
||||
code="USER_PREPARED_BY_TYPE"></dict-select>
|
||||
</search-item>
|
||||
<search-item label="教职工类别">
|
||||
<dict-select v-model="pageForm.personType" placeholder="请选择教职工类别" @change="doSearch"
|
||||
<search-item label="人员类型">
|
||||
<dict-select v-model="pageForm.personType" placeholder="请选择人员类型" @change="doSearch"
|
||||
code="USER_PERSON_TYPE"></dict-select>
|
||||
</search-item>
|
||||
</search>
|
||||
@@ -140,8 +136,7 @@ const SCHOOL_VIEW_AND_HANDLE = {
|
||||
{ label: "工号", prop: "loginname" },
|
||||
{ label: "性别", prop: "sex" },
|
||||
{ label: "在职状态", prop: "userState" },
|
||||
{ label: "编制类别", prop: "preparedBy" },
|
||||
{ label: "教职工类别", prop: "personType" },
|
||||
{ label: "人员类型", prop: "personType" },
|
||||
{ label: "所属单位", prop: "unitName" },
|
||||
{ label: "是否变更", prop: "isChanged" },
|
||||
// { label: "分工会状态", prop: "branchUnionChecked" },
|
||||
@@ -287,3 +282,4 @@ const SCHOOL_VIEW_AND_HANDLE = {
|
||||
created() {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+4
-8
@@ -17,12 +17,8 @@ const VIEW_CHANGE_TYPE_USER = {
|
||||
<dict-select v-model="pageForm.userState" placeholder="请选择在职状态" @change="doSearch"
|
||||
code="USER_STATE"></dict-select>
|
||||
</search-item>
|
||||
<search-item label="编制类别">
|
||||
<dict-select v-model="pageForm.preparedBy" placeholder="请选择编制类别" @change="doSearch"
|
||||
code="USER_PREPARED_BY_TYPE"></dict-select>
|
||||
</search-item>
|
||||
<search-item label="教职工类别">
|
||||
<dict-select v-model="pageForm.personType" placeholder="请选择教职工类别" @change="doSearch"
|
||||
<search-item label="人员类型">
|
||||
<dict-select v-model="pageForm.personType" placeholder="请选择人员类型" @change="doSearch"
|
||||
code="USER_PERSON_TYPE"></dict-select>
|
||||
</search-item>
|
||||
</search>
|
||||
@@ -76,8 +72,7 @@ const VIEW_CHANGE_TYPE_USER = {
|
||||
{ prop: "loginname", label: "工号", sortable: true },
|
||||
{ prop: "username", label: "姓名", sortable: true },
|
||||
{ prop: "userState", label: "在职状态", sortable: true },
|
||||
{ prop: "preparedBy", label: "编制类别", sortable: true },
|
||||
{ prop: "personType", label: "教职工类别", sortable: true },
|
||||
{ prop: "personType", label: "人员类型", sortable: true },
|
||||
{ prop: "unionName", label: "所属工会", sortable: true },
|
||||
{ prop: "unitName", label: "所属单位", sortable: true },
|
||||
{ prop: "member", label: "会员", sortable: true },
|
||||
@@ -117,3 +112,4 @@ const VIEW_CHANGE_TYPE_USER = {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+4
-3
@@ -1,4 +1,4 @@
|
||||
const VERIFICATION_QUERY = {
|
||||
const VERIFICATION_QUERY = {
|
||||
template: `
|
||||
<el-card>
|
||||
<search @search="doSearch">
|
||||
@@ -23,8 +23,8 @@ const VERIFICATION_QUERY = {
|
||||
<dict-select v-model="pageForm.userState" placeholder="请选择在职状态" @change="doSearch"
|
||||
code="USER_STATE"></dict-select>
|
||||
</search-item>
|
||||
<search-item label="教职工类别">
|
||||
<dict-select v-model="pageForm.personType" placeholder="请选择教职工类别" @change="doSearch"
|
||||
<search-item label="人员类型">
|
||||
<dict-select v-model="pageForm.personType" placeholder="请选择人员类型" @change="doSearch"
|
||||
code="USER_PERSON_TYPE"></dict-select>
|
||||
</search-item>
|
||||
<search-item label="变更类型">
|
||||
@@ -62,3 +62,4 @@ const VERIFICATION_QUERY = {
|
||||
},
|
||||
created() {}
|
||||
}
|
||||
|
||||
|
||||
+3
-6
@@ -28,14 +28,10 @@ const VERIFICATION_SET_USER_LIST = {
|
||||
<dict-select v-model="pageForm.userState" placeholder="请选择在职状态" @change="doSearch"
|
||||
code="USER_STATE"></dict-select>
|
||||
</search-item>
|
||||
<search-item label="教职工类别">
|
||||
<dict-select v-model="pageForm.personType" placeholder="请选择教职工类别" @change="doSearch"
|
||||
<search-item label="人员类型">
|
||||
<dict-select v-model="pageForm.personType" placeholder="请选择人员类型" @change="doSearch"
|
||||
code="USER_PERSON_TYPE"></dict-select>
|
||||
</search-item>
|
||||
<search-item label="编制类别">
|
||||
<dict-select v-model="pageForm.preparedBy" placeholder="请选择编制类别" @change="doSearch"
|
||||
code="USER_PREPARED_BY_TYPE"></dict-select>
|
||||
</search-item>
|
||||
<search-item label="变更类型">
|
||||
<dict-select v-model="pageForm.changeType" placeholder="变更类型" @change="doSearch"
|
||||
code="MEMBER_CHANGE_TYPE"></dict-select>
|
||||
@@ -496,3 +492,4 @@ const VERIFICATION_SET_USER_LIST = {
|
||||
// this.findList()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+4
-8
@@ -26,12 +26,8 @@ const VERIFICATION_SHOW_SELECTION_USERS = {
|
||||
<dict-select v-model="pageForm.userState" placeholder="请选择在职状态" @change="doSearch"
|
||||
code="USER_STATE"></dict-select>
|
||||
</search-item>
|
||||
<search-item label="编制类别">
|
||||
<dict-select v-model="pageForm.preparedBy" placeholder="请选择编制类别" @change="doSearch"
|
||||
code="USER_PREPARED_BY_TYPE"></dict-select>
|
||||
</search-item>
|
||||
<search-item label="教职工类别">
|
||||
<dict-select v-model="pageForm.personType" placeholder="请选择教职工类别" @change="doSearch"
|
||||
<search-item label="人员类型">
|
||||
<dict-select v-model="pageForm.personType" placeholder="请选择人员类型" @change="doSearch"
|
||||
code="USER_PERSON_TYPE"></dict-select>
|
||||
</search-item>
|
||||
</search>
|
||||
@@ -43,8 +39,7 @@ const VERIFICATION_SHOW_SELECTION_USERS = {
|
||||
<el-table-column label="姓名" prop="username"></el-table-column>
|
||||
<el-table-column label="性别" prop="sex"></el-table-column>
|
||||
<el-table-column label="在职状态" prop="userState"></el-table-column>
|
||||
<el-table-column label="编制类别" prop="preparedBy"></el-table-column>
|
||||
<el-table-column label="教职工类别" prop="personType"></el-table-column>
|
||||
<el-table-column label="人员类型" prop="personType"></el-table-column>
|
||||
<el-table-column label="所属工会" prop="unionName"></el-table-column>
|
||||
<el-table-column label="所属单位" prop="unitName"></el-table-column>
|
||||
<el-table-column label="操作" fixed="right" width="80px" v-if="canBeModified">
|
||||
@@ -183,3 +178,4 @@ const VERIFICATION_SHOW_SELECTION_USERS = {
|
||||
},
|
||||
created() {}
|
||||
}
|
||||
|
||||
|
||||
+3
-2
@@ -1,4 +1,4 @@
|
||||
<!--#
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<div id="app">
|
||||
@@ -158,7 +158,7 @@ layout("/layouts/platform.html"){
|
||||
{ prop: "mobile", label: "联系电话", width: 120 },
|
||||
{ prop: "political", label: "政治面貌", width: 120, sortable: true},
|
||||
{ prop: "userState", label: "在职状态", width: 120, sortable: true },
|
||||
{ prop: "personType", label: "教职工类别", width: 120, sortable: true, checked: 0 },
|
||||
{ prop: "personType", label: "人员类型", width: 120, sortable: true, checked: 0 },
|
||||
// { prop: "preparedBy", label: "编制类别", width: 120, sortable: true },
|
||||
{ prop: "postDoctoralJoinDate", label: "进站时间", sortable: true, checked: 0 },
|
||||
{ prop: "unionName", label: "所属工会", width: 120, sortable: true },
|
||||
@@ -275,3 +275,4 @@ layout("/layouts/platform.html"){
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
|
||||
|
||||
+4
-27
@@ -63,7 +63,7 @@ const MEMBER_STATISTICS_COMPREHENSIVE_QUERY_FORM = {
|
||||
</el-row>
|
||||
|
||||
<el-row type="flex" align="middle" class="query-row query-row-tag">
|
||||
<el-col class="query-row-title">教职工类别:</el-col>
|
||||
<el-col class="query-row-title">人员类型:</el-col>
|
||||
<el-col class="query-row-content query-row-content-tag">
|
||||
<el-tag
|
||||
style="margin-right: 10px;cursor: pointer"
|
||||
@@ -87,30 +87,6 @@ const MEMBER_STATISTICS_COMPREHENSIVE_QUERY_FORM = {
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row type="flex" align="middle" class="query-row query-row-tag">
|
||||
<el-col class="query-row-title">编制类别:</el-col>
|
||||
<el-col class="query-row-content query-row-content-tag">
|
||||
<el-tag
|
||||
style="margin-right: 10px;cursor: pointer"
|
||||
v-for="item in preparedByOptions"
|
||||
:key="item.code"
|
||||
:type="item.name"
|
||||
:effect="pageForm.preparedBys.includes(item.name)?'dark':'plain'"
|
||||
@click="tagClick('preparedBys',item.name)">
|
||||
{{ item.name }}
|
||||
</el-tag>
|
||||
|
||||
<el-link type="danger"
|
||||
v-if="preparedByOptions.length&&pageForm.preparedBys.length"
|
||||
:underline="false"
|
||||
@click="pageForm.preparedBys=[];doSearch()">清空
|
||||
</el-link>
|
||||
<el-link :underline="false"
|
||||
@click="pageForm.preparedBys=preparedByOptions.map(p=>p.code);doSearch()"
|
||||
type="success">全部
|
||||
</el-link>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row type="flex" align="middle" class="query-row query-row-tag">
|
||||
<el-col class="query-row-title">人员分类:</el-col>
|
||||
@@ -283,8 +259,8 @@ const MEMBER_STATISTICS_COMPREHENSIVE_QUERY_FORM = {
|
||||
unions: [],
|
||||
units: [],
|
||||
sexTypeOptions: [
|
||||
{ code: "男性", name: "男性" },
|
||||
{ code: "女性", name: "女性" }
|
||||
{ code: "男", name: "男" },
|
||||
{ code: "女", name: "女" }
|
||||
],
|
||||
pickerOptions: {
|
||||
disabledDate: (time) => {
|
||||
@@ -491,3 +467,4 @@ const MEMBER_STATISTICS_COMPREHENSIVE_QUERY_FORM = {
|
||||
}
|
||||
`
|
||||
}
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<!--#
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
@@ -146,7 +146,7 @@ layout("/layouts/platform.html"){
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="教职工类别" prop="personType" >
|
||||
<el-table-column label="人员类型" prop="personType" >
|
||||
<template slot-scope="{row,$index}">
|
||||
<el-select @change="row.payMode=null" placeholder="请选择人员类型" v-model="row.personType"
|
||||
style="width: 100%" clearable>
|
||||
@@ -368,3 +368,4 @@ layout("/layouts/platform.html"){
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
const MINE_PAY_INFO = {
|
||||
const MINE_PAY_INFO = {
|
||||
template: /*language=html*/ `
|
||||
<div>
|
||||
<el-descriptions title="缴费信息" :column="3" border>
|
||||
@@ -7,7 +7,7 @@ const MINE_PAY_INFO = {
|
||||
<el-descriptions-item label="缴费项目">{{ viewData.projectName }}</el-descriptions-item>
|
||||
<el-descriptions-item label="所在工会">{{ viewData.unionname }}</el-descriptions-item>
|
||||
<el-descriptions-item label="所在单位">{{ viewData.unitname }}</el-descriptions-item>
|
||||
<el-descriptions-item label="教职工类别">{{ viewData.personType }}</el-descriptions-item>
|
||||
<el-descriptions-item label="人员类型">{{ viewData.personType }}</el-descriptions-item>
|
||||
<el-descriptions-item label="缴费情况">
|
||||
<el-tag v-if="viewData.personType">已缴费</el-tag>
|
||||
<el-tag v-else type="warning">未缴费</el-tag>
|
||||
@@ -123,3 +123,4 @@ const MINE_PAY_INFO = {
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<!--#
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
@@ -76,9 +76,9 @@ layout("/layouts/platform.html"){
|
||||
</search-item>
|
||||
</template>
|
||||
|
||||
<search-item label="教职工类别">
|
||||
<search-item label="人员类型">
|
||||
<dict-select v-model="pageForm.personType" style="width: 100%" clearable
|
||||
placeholder="教职工类别" code="USER_PERSON_TYPE"></dict-select>
|
||||
placeholder="人员类型" code="USER_PERSON_TYPE"></dict-select>
|
||||
</search-item>
|
||||
|
||||
<search-item label="在职状态">
|
||||
@@ -237,7 +237,7 @@ layout("/layouts/platform.html"){
|
||||
{ prop: "mobile", label: "联系电话" },
|
||||
{ prop: "schoolTime", label: "入职时间" },
|
||||
{ prop: "retireDate", label: "退休时间" },
|
||||
{ prop: "personType", label: "教职工类别", sortable: true },
|
||||
{ prop: "personType", label: "人员类型", sortable: true },
|
||||
{ prop: "userState", label: "在职状态", sortable: true },
|
||||
{ prop: "unionname", label: "所属工会", sortable: true },
|
||||
{ prop: "unitname", label: "所属单位", sortable: true },
|
||||
@@ -484,3 +484,4 @@ layout("/layouts/platform.html"){
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<!--#
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<div id="app" v-cloak>
|
||||
@@ -98,7 +98,7 @@ layout("/layouts/platform.html"){
|
||||
|
||||
<el-row :gutter="24">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="教职工类别" size="medium">
|
||||
<el-form-item label="人员类型" size="medium">
|
||||
<span>{{formData.personType}}</span>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
@@ -159,7 +159,7 @@ layout("/layouts/platform.html"){
|
||||
|
||||
<el-row :gutter="24">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="教职工类别" size="medium">
|
||||
<el-form-item label="人员类型" size="medium">
|
||||
<span>{{formData.personType}}</span>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
@@ -335,3 +335,4 @@ layout("/layouts/platform.html"){
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
|
||||
|
||||
+3
-6
@@ -24,14 +24,10 @@ const COMMON_QUERY = {
|
||||
<dict-select v-model="pageForm.userStates" placeholder="请选择在职状态" @change="doSearch"
|
||||
code="USER_STATE" multiple collapse-tags></dict-select>
|
||||
</search-item>
|
||||
<search-item label="教职工类别">
|
||||
<dict-select v-model="pageForm.personTypes" placeholder="请选择教职工类别" @change="doSearch"
|
||||
<search-item label="人员类型">
|
||||
<dict-select v-model="pageForm.personTypes" placeholder="请选择人员类型" @change="doSearch"
|
||||
code="USER_PERSON_TYPE" multiple collapse-tags></dict-select>
|
||||
</search-item>
|
||||
<search-item label="编制类别">
|
||||
<dict-select v-model="pageForm.preparedBys" placeholder="请选择编制类别" @change="doSearch"
|
||||
code="USER_PREPARED_BY_TYPE" multiple collapse-tags></dict-select>
|
||||
</search-item>
|
||||
</template>
|
||||
</search>
|
||||
`,
|
||||
@@ -90,3 +86,4 @@ const COMMON_QUERY = {
|
||||
this.initData()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+2
-2
@@ -142,8 +142,7 @@ const importAndMap = {
|
||||
{ value: "mobile", label: "联系电话" },
|
||||
{ value: "political", label: "政治面貌"},
|
||||
{ value: "userState", label: "在职状态" },
|
||||
{ value: "personType", label: "教职工类别" },
|
||||
{ value: "preparedBy", label: "编制类别" },
|
||||
{ value: "personType", label: "人员类型" },
|
||||
{ value: "postDoctoralJoinDate", label: "进站时间" },
|
||||
{ value: "unionId", label: "所属工会" },
|
||||
{ value: "unitId", label: "所属单位" },
|
||||
@@ -404,3 +403,4 @@ const importAndMap = {
|
||||
}
|
||||
`
|
||||
}
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user