diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/fund/member/controller/FundMemberBranchUnionApprovalController.java b/src/main/java/com/budwk/app/zhgh/dayofficework/fund/member/controller/FundMemberBranchUnionApprovalController.java index 2dfeba6..8748802 100644 --- a/src/main/java/com/budwk/app/zhgh/dayofficework/fund/member/controller/FundMemberBranchUnionApprovalController.java +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/fund/member/controller/FundMemberBranchUnionApprovalController.java @@ -1,6 +1,7 @@ package com.budwk.app.zhgh.dayofficework.fund.member.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; @@ -39,8 +40,14 @@ public class FundMemberBranchUnionApprovalController { } + @At("/h5") + @Ok("beetl:/platform/zhghh5/dayofficework/fund/member/branchUnionApproval/index.html") + @SaCheckPermission("h5.fundMember.branchUnionApproval") + public void h5() { + } + @At - @SaCheckPermission("fundMember.branchUnionApproval") + @SaCheckPermission(value = {"fundMember.branchUnionApproval", "h5.fundMember.branchUnionApproval"}, mode = SaMode.OR) public Result pageData(PageForm pageForm, String taskId, String searchKeyword, Integer year, boolean approval) { Sql sql = Sqls.create(""" SELECT diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/fund/member/controller/FundMemberCommonController.java b/src/main/java/com/budwk/app/zhgh/dayofficework/fund/member/controller/FundMemberCommonController.java index 797ca0e..e1f9f0d 100644 --- a/src/main/java/com/budwk/app/zhgh/dayofficework/fund/member/controller/FundMemberCommonController.java +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/fund/member/controller/FundMemberCommonController.java @@ -4,6 +4,7 @@ import cn.dev33.satoken.annotation.SaCheckPermission; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.StrUtil; +import cn.hutool.json.JSONObject; import com.budwk.app.base.result.Result; import com.budwk.app.base.utils.CommonDownloadUtil; import com.budwk.app.base.utils.SysOfficeTemplateUtil; @@ -31,9 +32,10 @@ import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; import java.io.ByteArrayOutputStream; import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.stream.Collectors; @IocBean @At("/platform/fundMember/common") @@ -72,9 +74,12 @@ public class FundMemberCommonController { FundMemberApply fundMember = dao.fetch(FundMemberApply.class, id); Map docData = BeanUtil.beanToMap(fundMember); - docData.put("birthday", DateUtil.format(fundMember.getBirthday(), "yyyy年MM月dd日")); - docData.put("joinWorkTime", DateUtil.format(fundMember.getJoinWorkTime(), "yyyy年MM月dd日")); - docData.put("retireTime", DateUtil.format(fundMember.getRetireTime(), "yyyy年MM月dd日")); + docData.put("birthday", formatDate(fundMember.getBirthday(), "yyyy年MM月")); + docData.put("joinWorkTime", formatDate(fundMember.getJoinWorkTime(), "yyyy年MM月dd日")); + docData.put("retireTime", formatDate(fundMember.getRetireTime(), "yyyy年MM月dd日")); + docData.put("submitTime", formatDate(fundMember.getSubmitTime(), "yyyy年MM月dd日")); + docData.put("unionName", StrUtil.nullToEmpty(fundMember.getUnionName())); + docData.put("familyMembers", buildFamilyMembers(fundMember.getFamilies())); if (StrUtil.isNotBlank(fundMember.getAvatar())) { docData.put("avatar", sysOfficeTemplateUtil.createPictureRenderData(fundMember.getAvatar())); } @@ -88,19 +93,87 @@ public class FundMemberCommonController { doneTaskVos.add(taskVO); } - // 按任务节点分组 - Map> taskGroups = doneTaskVos.stream().collect(Collectors.groupingBy(ProcessTaskVO::getDisplayName)); - docData.putAll(taskGroups); + // 按模板约定输出分工会、校工会审核信息,fgh、xgh 可在模板中直接使用 date 和 opinion 子字段。 + putApprovalData(docData, doneTaskVos, List.of("fgh", "ltx"), "fgh"); + putApprovalData(docData, doneTaskVos, List.of("xgh"), "xgh"); Configure configure = Configure.builder().build(); try (ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream()) { - XWPFTemplate.compile(sysOfficeTemplateUtil.getTemplate("fundMember"), configure).render(docData).writeAndClose(byteArrayOutputStream); + XWPFTemplate.compile(sysOfficeTemplateUtil.getTemplate("fundMemberApply"), configure).render(docData).writeAndClose(byteArrayOutputStream); CommonDownloadUtil.download(fundMember.getUserName() + "的医疗互助“爱心”基金入会申请表.docx", byteArrayOutputStream.toByteArray(), response); } catch (Exception e) { log.error("导出word异常", e); } } + /** + * 格式化导出日期,空日期以空字符串输出,避免 Word 模板显示 null。 + * + * @param date 日期 + * @param pattern Word 模板展示格式 + * @return 格式化后的日期文本 + */ + private String formatDate(Date date, String pattern) { + return date == null ? "" : DateUtil.format(date, pattern); + } + + /** + * 将家庭成员列表转换为 Word 模板单元格可直接展示的多行文本。 + * + * @param families 家庭成员列表 + * @return 序号、姓名、年龄、与本人关系组成的多行文本 + */ + private String buildFamilyMembers(List families) { + if (families == null || families.isEmpty()) { + return ""; + } + StringBuilder content = new StringBuilder(); + for (int index = 0; index < families.size(); index++) { + JSONObject family = families.get(index); + if (family == null) { + continue; + } + if (content.length() > 0) { + content.append(System.lineSeparator()); + } + String sequence = StrUtil.blankToDefault(family.getStr("sequence"), String.valueOf(index + 1)); + content.append(sequence).append("、") + .append(StrUtil.nullToEmpty(family.getStr("name"))).append(",") + .append(StrUtil.nullToEmpty(family.getStr("age"))).append("岁,") + .append(StrUtil.nullToEmpty(family.getStr("relation"))); + } + return content.toString(); + } + + /** + * 从指定流程节点中取最后一次已办记录,组装 Word 模板所需的审核日期与意见。 + * + * @param docData 模板数据 + * @param doneTasks 已办流程任务 + * @param taskNames 对应的流程任务名称 + * @param templateKey 模板对象名称,例如 fgh、xgh + */ + private void putApprovalData(Map docData, List doneTasks, List taskNames, String templateKey) { + Map approval = new HashMap<>(); + approval.put("date", ""); + approval.put("opinion", ""); + ProcessTaskVO latestTask = null; + for (ProcessTaskVO task : doneTasks) { + if (!taskNames.contains(task.getTaskName())) { + continue; + } + if (latestTask == null || (task.getCreatedAt() != null + && (latestTask.getCreatedAt() == null || task.getCreatedAt() > latestTask.getCreatedAt()))) { + latestTask = task; + } + } + if (latestTask != null) { + approval.put("date", formatDate(latestTask.getFinishTime(), "yyyy年MM月dd日")); + approval.put("opinion", StrUtil.nullToEmpty(latestTask.getTaskFormData().getStr("tf_opinion"))); + } + docData.put(templateKey, approval); + } + } diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/fund/member/controller/FundMemberMineController.java b/src/main/java/com/budwk/app/zhgh/dayofficework/fund/member/controller/FundMemberMineController.java index 27b8bc2..278844e 100644 --- a/src/main/java/com/budwk/app/zhgh/dayofficework/fund/member/controller/FundMemberMineController.java +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/fund/member/controller/FundMemberMineController.java @@ -1,6 +1,7 @@ package com.budwk.app.zhgh.dayofficework.fund.member.controller; import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.dev33.satoken.annotation.SaMode; import com.budwk.app.base.annotation.SLog; import com.budwk.app.base.page.Pagination; import com.budwk.app.base.result.Result; @@ -44,8 +45,14 @@ public class FundMemberMineController { } + @At("/h5") + @Ok("beetl:/platform/zhghh5/dayofficework/fund/member/mine/index.html") + @SaCheckPermission("h5.fundMember.mine") + public void h5() { + } + @At - @SaCheckPermission("fundMember.mine") + @SaCheckPermission(value = {"fundMember.mine", "h5.fundMember.mine"}, mode = SaMode.OR) public Result pageData(Integer pageNumber, Integer pageSize, String searchKeyword, Integer year) { Sql sql = Sqls.create(""" SELECT @@ -76,13 +83,15 @@ public class FundMemberMineController { Cnd cnd = Cnd.NEW(); cnd.andEX("YEAR(info.submitTime)", "=", year); cnd.and("info.createdBy", "=", SecurityUtil.getUserId()); + // 同一流程任务存在多个参与人时,按申请主表主键合并,避免我的申请列表出现重复记录。 + cnd.groupBy("info.id"); sql.setCondition(cnd); Pagination pagination = fundMemberService.listPageMap(pageNumber, pageSize, sql); return Result.success(pagination); } @At - @SaCheckPermission("fundMember.mine") + @SaCheckPermission(value = {"fundMember.mine", "h5.fundMember.mine"}, mode = SaMode.OR) @Aop(TransAop.READ_COMMITTED) @ApiOperation("删除") @SLog(tag = "基金会员-我的申请", msg = "删除") diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/fund/member/controller/FundMemberQueryController.java b/src/main/java/com/budwk/app/zhgh/dayofficework/fund/member/controller/FundMemberQueryController.java index 7c8955e..8c528a6 100644 --- a/src/main/java/com/budwk/app/zhgh/dayofficework/fund/member/controller/FundMemberQueryController.java +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/fund/member/controller/FundMemberQueryController.java @@ -79,10 +79,16 @@ public class FundMemberQueryController { u.userState, u.preparedBy, u.personType, - u.aidFundMemberType, + COALESCE(NULLIF(u.aidFundMemberType, ''), + (SELECT applyInfo.aidFundMemberType + FROM fund_member_apply applyInfo + WHERE applyInfo.loginName = u.loginName + AND applyInfo.isJoin = 1 + ORDER BY applyInfo.submitTime DESC + LIMIT 1)) AS aidFundMemberType, u.unitName, u.unionName, - (SELECT changeTime FROM fund_member_change_record WHERE loginName = u.loginName AND isJoin = 1 ORDER BY changeTime DESC limit 1) joinTime + (SELECT changeTime FROM fund_member_change_record WHERE loginName = u.loginName AND isJoin = 1 ORDER BY changeTime DESC LIMIT 1) AS joinTime FROM vw_user u $condition diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/fund/member/controller/FundMemberSchoolUnionApprovalController.java b/src/main/java/com/budwk/app/zhgh/dayofficework/fund/member/controller/FundMemberSchoolUnionApprovalController.java index a810e9c..065fc69 100644 --- a/src/main/java/com/budwk/app/zhgh/dayofficework/fund/member/controller/FundMemberSchoolUnionApprovalController.java +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/fund/member/controller/FundMemberSchoolUnionApprovalController.java @@ -1,6 +1,7 @@ package com.budwk.app.zhgh.dayofficework.fund.member.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; @@ -39,8 +40,14 @@ public class FundMemberSchoolUnionApprovalController { } + @At("/h5") + @Ok("beetl:/platform/zhghh5/dayofficework/fund/member/schoolUnionApproval/index.html") + @SaCheckPermission("h5.fundMember.schoolUnionApproval") + public void h5() { + } + @At - @SaCheckPermission("fundMember.schoolUnionApproval") + @SaCheckPermission(value = {"fundMember.schoolUnionApproval", "h5.fundMember.schoolUnionApproval"}, mode = SaMode.OR) public Result pageData(PageForm pageForm, String unionId, Integer year, boolean approval) { Sql sql = Sqls.create(""" SELECT diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/fund/member/controller/FundMemberWriteController.java b/src/main/java/com/budwk/app/zhgh/dayofficework/fund/member/controller/FundMemberWriteController.java index fe1390f..3054357 100644 --- a/src/main/java/com/budwk/app/zhgh/dayofficework/fund/member/controller/FundMemberWriteController.java +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/fund/member/controller/FundMemberWriteController.java @@ -1,6 +1,7 @@ package com.budwk.app.zhgh.dayofficework.fund.member.controller; import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.dev33.satoken.annotation.SaMode; import cn.hutool.core.lang.Dict; import cn.hutool.core.util.StrUtil; import com.budwk.app.base.annotation.SLog; @@ -50,8 +51,14 @@ public class FundMemberWriteController { } + @At("/h5") + @Ok("beetl:/platform/zhghh5/dayofficework/fund/member/write/index.html") + @SaCheckPermission("h5.fundMember.write") + public void h5() { + } + @At - @SaCheckPermission("fundMember.write") + @SaCheckPermission(value = {"fundMember.write", "h5.fundMember.write"}, mode = SaMode.OR) @ApiOperation("保存申请") @SLog(tag = "建言献策-填写申请", msg = "保存申请") public Result save(@Param("data") FundMemberApply fundMember) { @@ -64,11 +71,12 @@ public class FundMemberWriteController { @At - @SaCheckPermission("fundMember.write") + @SaCheckPermission(value = {"fundMember.write", "h5.fundMember.write"}, mode = SaMode.OR) @ApiOperation("提交申请") @Aop(TransAop.READ_COMMITTED) @SLog(tag = "基金会员-填写申请", msg = "提交申请") public Result submit(@Param("data") FundMemberApply fundMember) { + fundMemberService.validateCurrentUserNotFundMember(); if (StrUtil.isBlank(fundMember.getId())) { fundMemberService.validateApply(); } @@ -80,7 +88,7 @@ public class FundMemberWriteController { args.set(FlowConst.SUBMIT_TYPE, ProcessSubmitTypeEnum.APPLY.getCode()); args.set(FlowConst.FORM_DATA, fundMember); args.set(FlowConst.TASK_FORM_DATA_PREFIX + "userState", fundMember.getUserState()); - ProcessInstance instance = flowEngine.startProcessInstanceByKey("FUND_MEMBER", fundMember.getId(), SecurityUtil.getUserId(), args); + ProcessInstance instance = flowEngine.startProcessInstanceByKey("JJHY", fundMember.getId(), SecurityUtil.getUserId(), args); // 自动完成第一个申请任务 List doingTaskList = flowEngine.processTaskService().getDoingTaskList(instance.getId(), null); @@ -91,11 +99,12 @@ public class FundMemberWriteController { } @At - @SaCheckPermission("fundMember.write") + @SaCheckPermission(value = {"fundMember.write", "h5.fundMember.write"}, mode = SaMode.OR) @ApiOperation("重新提交申请") @Aop(TransAop.READ_COMMITTED) @SLog(tag = "基金会员-填写申请", msg = "重新提交申请") public Result submitAgain(@Param("data") FundMemberApply fundMember, @Param("taskId") Long taskId) { + fundMemberService.validateCurrentUserNotFundMember(); if (StrUtil.isBlank(fundMember.getId())) { fundMemberService.validateApply(); } @@ -109,7 +118,7 @@ public class FundMemberWriteController { } @At - @SaCheckPermission("fundMember.write") + @SaCheckPermission(value = {"fundMember.write", "fundMember.mine", "fundMember.branchUnionApproval", "fundMember.schoolUnionApproval", "h5.fundMember.write", "h5.fundMember.mine", "h5.fundMember.branchUnionApproval", "h5.fundMember.schoolUnionApproval"}, mode = SaMode.OR) @ApiOperation("获取申请信息") public Result info(@Param("id") String id) { FundMemberApply box = dao.fetch(FundMemberApply.class, id); @@ -118,10 +127,20 @@ public class FundMemberWriteController { @At - @SaCheckPermission("fundMember.write") + @SaCheckPermission(value = {"fundMember.write", "h5.fundMember.write"}, mode = SaMode.OR) + @ApiOperation("获取当前用户基金会员状态") + public Result memberStatus() { + return Result.success(fundMemberService.isCurrentUserFundMember()); + } + + @At + @SaCheckPermission(value = {"fundMember.write", "h5.fundMember.write"}, mode = SaMode.OR) @ApiOperation("校验是否有申请在流程中") public Result validateApply(){ - fundMemberService.validateApply(); - return Result.success(); + boolean isFundMember = fundMemberService.isCurrentUserFundMember(); + if (!isFundMember) { + fundMemberService.validateApply(); + } + return Result.success(isFundMember); } } diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/fund/member/interceptor/FundMemberPassInterceptor.java b/src/main/java/com/budwk/app/zhgh/dayofficework/fund/member/interceptor/FundMemberPassInterceptor.java index 343563c..cf4c015 100644 --- a/src/main/java/com/budwk/app/zhgh/dayofficework/fund/member/interceptor/FundMemberPassInterceptor.java +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/fund/member/interceptor/FundMemberPassInterceptor.java @@ -32,6 +32,8 @@ public class FundMemberPassInterceptor implements FlowInterceptor { // 添加到变更记录 FundMemberChangeRecord record = BeanUtil.copyProperties(fundMemberApply, FundMemberChangeRecord.class, "id"); record.setId(null); + // 后置拦截器只在入会申请审核通过后执行,明确标记为加入记录,供台账展示加入时间。 + record.setIsJoin(true); record.setChangeOrigin("流程申请"); record.setChangeTime(new Date()); dao.insert(record); diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/fund/member/models/FundMemberApply.java b/src/main/java/com/budwk/app/zhgh/dayofficework/fund/member/models/FundMemberApply.java index 673c2cc..dabae12 100644 --- a/src/main/java/com/budwk/app/zhgh/dayofficework/fund/member/models/FundMemberApply.java +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/fund/member/models/FundMemberApply.java @@ -1,6 +1,7 @@ package com.budwk.app.zhgh.dayofficework.fund.member.models; import cn.afterturn.easypoi.excel.annotation.Excel; +import cn.hutool.json.JSONObject; import com.budwk.app.base.model.BaseModel; import lombok.Data; import lombok.EqualsAndHashCode; @@ -8,6 +9,7 @@ import org.nutz.dao.entity.annotation.*; import org.nutz.dao.interceptor.annotation.PrevInsert; import java.util.Date; +import java.util.List; @Data @Table("fund_member_apply") @@ -48,7 +50,7 @@ public class FundMemberApply extends BaseModel { private String idCard; @Column - @Comment("参加工作时间") + @Comment("入职时间") @ColDefine(type = ColType.DATE) private Date joinWorkTime; @@ -67,6 +69,21 @@ public class FundMemberApply extends BaseModel { @ColDefine(type = ColType.VARCHAR, width = 100) private String address; + @Column + @Comment("籍贯") + @ColDefine(type = ColType.VARCHAR, width = 100) + private String nativePlace; + + @Column + @Comment("学历") + @ColDefine(type = ColType.VARCHAR, width = 50) + private String education; + + @Column + @Comment("健康状况") + @ColDefine(type = ColType.VARCHAR, width = 200) + private String healthStatus; + @Column @Comment("手机号码") @ColDefine(type = ColType.VARCHAR, width = 20) @@ -77,6 +94,16 @@ public class FundMemberApply extends BaseModel { @ColDefine(type = ColType.VARCHAR, width = 20) private String homePhone; + @Column + @Comment("家庭主要成员") + @ColDefine(type = ColType.MYSQL_JSON) + private List families; + + @Column + @Comment("备注") + @ColDefine(type = ColType.VARCHAR, customType = "text") + private String remark; + @Column @Comment("照片") @ColDefine(type = ColType.VARCHAR, width = 100) diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/fund/member/service/FundMemberService.java b/src/main/java/com/budwk/app/zhgh/dayofficework/fund/member/service/FundMemberService.java index 0d64785..0b12f71 100644 --- a/src/main/java/com/budwk/app/zhgh/dayofficework/fund/member/service/FundMemberService.java +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/fund/member/service/FundMemberService.java @@ -10,6 +10,18 @@ public interface FundMemberService extends BaseService { */ void validateApply(); + /** + * 判断当前登录用户是否为基金会员。 + * + * @return 当前用户是基金会员时返回 true + */ + boolean isCurrentUserFundMember(); + + /** + * 校验当前登录用户不是基金会员,避免重复发起入会申请。 + */ + void validateCurrentUserNotFundMember(); + /** * 修改大病基金会员类别。 * @@ -17,4 +29,5 @@ public interface FundMemberService extends BaseService { * @param aidFundMemberType 大病基金会员类别 */ void updateAidFundMemberType(String loginName, String aidFundMemberType); + } diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/fund/member/service/impl/FundMemberServiceImpl.java b/src/main/java/com/budwk/app/zhgh/dayofficework/fund/member/service/impl/FundMemberServiceImpl.java index 856079f..956b7a0 100644 --- a/src/main/java/com/budwk/app/zhgh/dayofficework/fund/member/service/impl/FundMemberServiceImpl.java +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/fund/member/service/impl/FundMemberServiceImpl.java @@ -23,6 +23,7 @@ public class FundMemberServiceImpl extends BaseServiceImpl impl @Override public void validateApply() { + validateCurrentUserNotFundMember(); FundMemberApply apply = dao().fetch(FundMemberApply.class, Cnd.where(FundMemberApply::getLoginName, "=", SecurityUtil.getUserLoginname()) .and("isJoin", "=", 1) @@ -39,6 +40,20 @@ public class FundMemberServiceImpl extends BaseServiceImpl impl } } + @Override + public boolean isCurrentUserFundMember() { + Sys_user user = dao().fetch(Sys_user.class, + Cnd.where(Sys_user::getLoginname, "=", SecurityUtil.getUserLoginname())); + return user != null && Boolean.TRUE.equals(user.getAidFundMember()); + } + + @Override + public void validateCurrentUserNotFundMember() { + if (isCurrentUserFundMember()) { + throw new RuntimeException("您已是基金会员,无需重复申请"); + } + } + @Override public void updateAidFundMemberType(String loginName, String aidFundMemberType) { if (StrUtil.isBlank(loginName)) { @@ -51,4 +66,5 @@ public class FundMemberServiceImpl extends BaseServiceImpl impl Chain.make("aidFundMemberType", aidFundMemberType), Cnd.where(Sys_user::getLoginname, "=", loginName).and(Sys_user::getAidFundMember, "=", 1)); } + } diff --git a/src/main/resources/views/platform/zhgh/dayofficework/fund/member/branchUnionApproval/index.html b/src/main/resources/views/platform/zhgh/dayofficework/fund/member/branchUnionApproval/index.html index 59b4967..855e2c7 100644 --- a/src/main/resources/views/platform/zhgh/dayofficework/fund/member/branchUnionApproval/index.html +++ b/src/main/resources/views/platform/zhgh/dayofficework/fund/member/branchUnionApproval/index.html @@ -26,12 +26,7 @@ layout("/layouts/platform.html"){ - - - + diff --git a/src/main/resources/views/platform/zhgh/dayofficework/fund/member/info.js b/src/main/resources/views/platform/zhgh/dayofficework/fund/member/info.js index df76063..aecd448 100644 --- a/src/main/resources/views/platform/zhgh/dayofficework/fund/member/info.js +++ b/src/main/resources/views/platform/zhgh/dayofficework/fund/member/info.js @@ -1,66 +1,61 @@ const fundMemberInfo = { - template: /*language=HTML*/ ` -
-
- 申请信息 - 点击查看流程图 -
- - {{viewData.userName}} - {{viewData.loginName}} - {{viewData.aidFundMemberType}} - {{viewData.userState}} - {{viewData.unionName}} - {{viewData.unitName}} - {{viewData.sex}} - {{viewData.birthday}} - {{viewData.idCard}} - {{viewData.joinWorkTime}} - {{viewData.retireTime}} - {{viewData.address}} - {{viewData.mobile}} - {{viewData.homePhone}} - - - - - - - - - - -
- `, + template: /*language=HTML*/ [ + '
', + '
', + ' 申请信息', + ' 点击查看流程图', + '
', + ' ', + ' {{ viewData.userName || \'-\' }}', + ' {{ viewData.loginName || \'-\' }}', + ' {{ viewData.birthday || \'-\' }}', + ' {{ viewData.sex || \'-\' }}', + ' {{ viewData.nativePlace || \'-\' }}', + ' {{ viewData.address || \'-\' }}', + ' {{ viewData.healthStatus || \'-\' }}', + ' {{ viewData.education || \'-\' }}', + ' {{ viewData.mobile || \'-\' }}', + ' {{ viewData.joinWorkTime || \'-\' }}', + ' {{ viewData.idCard || \'-\' }}', + ' {{ viewData.aidFundMemberType || \'-\' }}', + ' {{ viewData.retireTime || \'-\' }}', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ' {{ viewData.remark || \'-\' }}', + ' ', + '', + ' ', + ' ', + ' ', + '
' + ].join(''), store, dicts: ["PROCESS_TASK_SUBMIT_TYPE"], data(){ diff --git a/src/main/resources/views/platform/zhgh/dayofficework/fund/member/mine/index.html b/src/main/resources/views/platform/zhgh/dayofficework/fund/member/mine/index.html index c7b4d2e..e865975 100644 --- a/src/main/resources/views/platform/zhgh/dayofficework/fund/member/mine/index.html +++ b/src/main/resources/views/platform/zhgh/dayofficework/fund/member/mine/index.html @@ -17,12 +17,7 @@ layout("/layouts/platform.html"){ - - - + @@ -34,7 +29,6 @@ layout("/layouts/platform.html"){ diff --git a/src/main/resources/views/platform/zhgh/dayofficework/fund/member/schoolUnionApproval/index.html b/src/main/resources/views/platform/zhgh/dayofficework/fund/member/schoolUnionApproval/index.html index a3d9952..dcdb1e1 100644 --- a/src/main/resources/views/platform/zhgh/dayofficework/fund/member/schoolUnionApproval/index.html +++ b/src/main/resources/views/platform/zhgh/dayofficework/fund/member/schoolUnionApproval/index.html @@ -37,12 +37,7 @@ layout("/layouts/platform.html"){ - - - + diff --git a/src/main/resources/views/platform/zhgh/dayofficework/fund/member/write/index.html b/src/main/resources/views/platform/zhgh/dayofficework/fund/member/write/index.html index 4d08288..0cc2e2a 100644 --- a/src/main/resources/views/platform/zhgh/dayofficework/fund/member/write/index.html +++ b/src/main/resources/views/platform/zhgh/dayofficework/fund/member/write/index.html @@ -4,7 +4,8 @@ layout("/layouts/platform.html"){
- + + @@ -43,8 +44,8 @@ layout("/layouts/platform.html"){ - - + + @@ -56,16 +57,51 @@ layout("/layouts/platform.html"){ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -121,8 +184,8 @@ layout("/layouts/platform.html"){ - 提交申请 - 提交申请 + 提交申请 + 提交申请
@@ -135,7 +198,14 @@ layout("/layouts/platform.html"){ return { bizId: GetQueryString("bizId"), taskId: GetQueryString("taskId"), - formData: {}, + isFundMember: false, + formData: { + families: [], + nativePlace: "", + education: "", + healthStatus: "", + remark: "" + }, formRules: { userName: [{required: true, message: '请输入姓名', trigger: 'blur'}], loginName: [{required: true, message: '请输入工资号', trigger: 'blur'}], @@ -149,7 +219,10 @@ layout("/layouts/platform.html"){ } ], address: [{required: true, message: '请输入家庭住址', trigger: 'blur'}], - joinWorkTime: [{required: true, message: '请选择参加工作时间', trigger: 'blur'}], + nativePlace: [{required: true, message: '请输入籍贯', trigger: 'blur'}], + healthStatus: [{required: true, message: '请输入健康状况', trigger: 'blur'}], + education: [{required: true, message: '请选择学历', trigger: 'change'}], + joinWorkTime: [{required: true, message: '请选择入职时间', trigger: 'blur'}], retireTime: [{required: false, message: '请选择退休时间', trigger: 'blur'}], aidFundMemberType: [{required: true, message: '请选择会员类别', trigger: 'change'}], mobile: [{required: true, message: '请输入手机号码', trigger: 'blur'}, @@ -172,6 +245,63 @@ layout("/layouts/platform.html"){ } }, methods: { + // 确保家庭成员字段始终为可响应式数组,兼容旧申请数据。 + ensureFamilies() { + if (!Array.isArray(this.formData.families)) { + this.$set(this.formData, "families", []) + } + }, + + // 按当前行顺序重置家庭成员序号,避免删除成员后出现断号。 + resetFamilySequence() { + this.ensureFamilies() + this.formData.families.forEach((family, index) => { + this.$set(family, "sequence", index + 1) + }) + }, + + // 添加一名家庭成员并自动设置序号。 + addFamily() { + this.ensureFamilies() + this.formData.families.push({ + sequence: this.formData.families.length + 1, + name: "", + age: null, + relation: "" + }) + }, + + // 删除指定家庭成员后重排序号。 + removeFamily(index) { + this.ensureFamilies() + this.formData.families.splice(index, 1) + this.resetFamilySequence() + }, + + // 提交前校验家庭主要成员的必填信息。 + validateFamilies() { + this.resetFamilySequence() + if (this.formData.families.length === 0) { + this.$message.error("请至少添加一名家庭主要成员") + return false + } + for (const family of this.formData.families) { + if (!family.name || !String(family.name).trim()) { + this.$message.error("请填写第" + family.sequence + "位家庭成员的姓名") + return false + } + if (family.age === null || family.age === undefined || family.age === "") { + this.$message.error("请填写第" + family.sequence + "位家庭成员的年龄") + return false + } + if (!family.relation || !String(family.relation).trim()) { + this.$message.error("请填写第" + family.sequence + "位家庭成员与本人的关系") + return false + } + } + return true + }, + // 保存 // onSave() { // this.$confirm("您确定保存吗?", "提示", { @@ -192,6 +322,7 @@ layout("/layouts/platform.html"){ onSubmit() { this.$refs.formRef.validate(valid => { if (!valid) return + if (!this.validateFamilies()) return // if (!this.isAgree) { // this.$message.error("请先阅读并同意《南昌大学教职工医疗互助“爱心”基金管理办法》") // return @@ -214,19 +345,22 @@ layout("/layouts/platform.html"){ }, onFinishTask() { - this.$confirm("您确定要提交吗?", "提示", { - confirmButtonText: "确定", - cancelButtonText: "取消", - type: "warning" - }).then(() => { - this.$axios.post('/platform/fundMember/write/submitAgain', { - data: JSON.stringify(this.formData), - taskId: GetQueryString("taskId") - }).then(res => { - if (res.code === 0) { - this.$message.success("提交成功") - commonUtil.pjaxPush('/platform/fundMember/mine') - } + this.$refs.formRef.validate(valid => { + if (!valid || !this.validateFamilies()) return + this.$confirm("您确定要提交吗?", "提示", { + confirmButtonText: "确定", + cancelButtonText: "取消", + type: "warning" + }).then(() => { + this.$axios.post('/platform/fundMember/write/submitAgain', { + data: JSON.stringify(this.formData), + taskId: GetQueryString("taskId") + }).then(res => { + if (res.code === 0) { + this.$message.success("提交成功") + commonUtil.pjaxPush('/platform/fundMember/mine') + } + }) }) }) }, @@ -238,10 +372,11 @@ layout("/layouts/platform.html"){ this.$axios.post("/platform/fundMember/write/info", {id: this.bizId}).then((res) => { if (res.code === 0) { this.formData = res.data + this.resetFamilySequence() } }) } else { - const {username, loginname, sex, birthday, mobile, union, userState, idCard} = this.$store.state.user + const {username, loginname, sex, birthday, mobile, union, userState, idCard, education} = this.$store.state.user this.formData = { userName: username, loginName: loginname, @@ -251,7 +386,12 @@ layout("/layouts/platform.html"){ unionId: union?.id, unionName: union?.name, userState: userState, - idCard: idCard + idCard: idCard, + nativePlace: "", + education: education || "", + healthStatus: "", + remark: "", + families: [] } } }, @@ -259,6 +399,11 @@ layout("/layouts/platform.html"){ }, created() { this.init() + this.$axios.post('/platform/fundMember/write/memberStatus').then((res) => { + if (res.code === 0) { + this.$set(this, "isFundMember", Boolean(res.data)) + } + }) if(!this.bizId){ this.$axios.post('/platform/fundMember/write/validateApply') }