diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/cadreTraining/controller/CadreTrainingActController.java b/src/main/java/com/budwk/app/zhgh/dayofficework/cadreTraining/controller/CadreTrainingActController.java new file mode 100644 index 00000000..2fdcebb3 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/cadreTraining/controller/CadreTrainingActController.java @@ -0,0 +1,108 @@ +package com.budwk.app.zhgh.dayofficework.cadreTraining.controller; + +import cn.dev33.satoken.annotation.SaCheckPermission; +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.zhgh.dayofficework.cadreTraining.model.CadreTrainingAct; +import com.budwk.app.zhgh.dayofficework.cadreTraining.service.CadreTrainingActService; +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.Dao; +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; + +import javax.validation.Valid; + +/** + * @ClassName UnionReimburse + * @Author hongqiwei + * @Date 2025/9/19 14:45 + * @Version 1.0 + * @Description TODO + */ + +@IocBean +@At("/platform/cadreTraining/activity") +@Api("培训活动") +@Ok("json:full") +@Slf4j +public class CadreTrainingActController { + + @Inject + private Dao dao; + @Inject + private CadreTrainingActService cadreTrainingActService; + + + @At("") + @Ok("beetl:/platform/zhgh/dayofficework/cadreTraining/activity/index.html") + @SaCheckPermission("cadreTraining.activity") + public void index() { + } + @At("/h5") + @Ok("beetl:/platform/zhghh5/dayofficework/cadreTraining/activity/index.html") + @SaCheckPermission("h5.cadreTraining.activity") + public void h5Index() { + } + + @At + @SaCheckPermission("cadreTraining.activity") + @ApiOperation("活动列表") + public Result pageData(@Valid PageForm pageForm, Integer year) { + Cnd cnd = Cnd.NEW(); + cnd.andEX("year(signUpStartTime)", "=", year); + if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) { + cnd.where().andLike(CadreTrainingAct::getName, pageForm.getSearchKeyword()); + } + Pagination pagination = cadreTrainingActService.listPage(pageForm.getPageNumber(), pageForm.getPageSize(), cnd); + return Result.success(pagination); + } + + @At + @SaCheckPermission("cadreTraining.activity") + @ApiOperation("添加活动") + @SLog(tag = "干部培训添加活动", msg = "活动名称:${args[0].name}") + public Result insert(@Valid @Param("cadreTrainingAct") CadreTrainingAct cadreTrainingAct) { + cadreTrainingActService.insert(cadreTrainingAct); + return Result.success(); + } + + @At + @SaCheckPermission("cadreTraining.activity") + @ApiOperation("编辑活动") + @SLog(tag = "干部培训编辑活动", msg = "活动名称:${args[0].name}") + public Result update(@Valid @Param("cadreTrainingAct") CadreTrainingAct cadreTrainingAct) { + cadreTrainingActService.update(cadreTrainingAct); + return Result.success(); + } + + @At + @SaCheckPermission("cadreTraining.activity") + @ApiOperation("删除活动") + @SLog(tag = "干部培训删除活动", msg = "活动名称:${args[0]}") + @Aop(TransAop.READ_COMMITTED) + public Result delete(@Param("id") String id) { + cadreTrainingActService.delete(id); + dao.clear(CadreTrainingAct.class, Cnd.where(CadreTrainingAct::getId, "=", id)); + return Result.success(); + } + + @At + @SaCheckPermission("cadreTraining.activity") + @ApiOperation("查询单个活动信息") + public Result get(@Param("id") String id) { + CadreTrainingAct cadreTrainingAct = cadreTrainingActService.fetch(id); + return Result.success().addData(cadreTrainingAct); + } + +} diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/cadreTraining/controller/CadreTrainingCollectController.java b/src/main/java/com/budwk/app/zhgh/dayofficework/cadreTraining/controller/CadreTrainingCollectController.java new file mode 100644 index 00000000..903e0ec4 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/cadreTraining/controller/CadreTrainingCollectController.java @@ -0,0 +1,211 @@ +package com.budwk.app.zhgh.dayofficework.cadreTraining.controller; + +import cn.afterturn.easypoi.excel.ExcelExportUtil; +import cn.afterturn.easypoi.excel.entity.ExportParams; +import cn.afterturn.easypoi.excel.entity.enmus.ExcelType; +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.param.PageForm; +import com.budwk.app.base.result.Result; +import com.budwk.app.base.utils.CommonDownloadUtil; +import com.budwk.app.flow.engine.FlowEngine; +import com.budwk.app.zhgh.dayofficework.cadreTraining.model.CadreTrainingAct; +import com.budwk.app.zhgh.dayofficework.cadreTraining.service.CadreTrainingSignUpService; +import com.budwk.app.zhgh.dayofficework.cadreTraining.service.CadreTrainingActService; +import com.budwk.app.zhgh.dayofficework.cadreTraining.vo.CadreTrainingCollectExcelVO; +import com.budwk.app.zhgh.staffbenefit.condolence.model.CondolenceType; +import com.budwk.app.zhgh.staffbenefit.maternityLeave.vo.MaternityLeaveCollectExcelVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.apache.poi.ss.usermodel.Workbook; +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.entity.Record; +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.lang.util.NutMap; +import org.nutz.mvc.annotation.At; +import org.nutz.mvc.annotation.Ok; +import org.nutz.mvc.annotation.Param; + +import javax.servlet.http.HttpServletResponse; +import javax.validation.Valid; +import java.util.List; + +/** + * @author : hongqiwei + * @description : + * @createDate : 2025/9/22 19:01 + */ + +@IocBean +@At("/platform/cadreTraining/collect") +@Ok("json:full") +@Api(tags = "查询统计") +public class CadreTrainingCollectController { + @Inject + private Dao dao; + @Inject + private FlowEngine flowEngine; + @Inject + private CadreTrainingSignUpService cadreTrainingSignUpService; + @Inject + private CadreTrainingActService cadreTrainingActService; + + @At("") + @Ok("beetl:/platform/zhgh/dayofficework/cadreTraining/collect/index.html") + @SaCheckPermission("cadreTraining.collect") + public void index() { + } + + @At("/h5") + @Ok("beetl:/platform/zhghh5/dayofficework/cadreTraining/collect/index.html") + @SaCheckPermission("h5.cadreTraining.collect") + public void h5Index() { + } + + @At + @ApiOperation("分页查询") + @SaCheckPermission(value = {"cadreTraining.collect", "h5.cadreTraining.collect"}, mode = SaMode.OR) + public Result pageData(PageForm pageForm, + String activityId, + String unionId, + String unitId, + String userName, + String sex) { + Sql sql = Sqls.create(""" + SELECT + info.*, + ct.name, + ct.signUpStartTime, + ct.signUpEndTime, + ct.startTime, + ct.endTime, + ct.notice, + ins.id AS instanceId, + ins.businessNo, + ins.state instanceState, + ins.variable instanceVariable, + ins.processDefineId instanceProcessDefineId, + t.id taskId, + t.taskName AS taskKey, + t.displayName taskName, + t.taskType, + t.performType taskPerformType, + t.taskState, + t.finishTime, + t.taskParentId, + t.variable taskVariable, + IF((SELECT taskName FROM wf_process_task tt WHERE tt.id = t.taskParentId) = 'startTask', 1, 0) canRevoke, + (select MAX(id) from wf_process_task where processInstanceId = ins.id and taskName = 'startTask' AND taskState in (10,20)) AS startTaskId + FROM + cadre_training_signup info + LEFT JOIN `wf_process_instance` ins ON ins.businessNo = info.id + LEFT JOIN `cadre_training` ct ON ct.id = info.cadreTrainingActId + LEFT JOIN wf_process_task t ON t.processInstanceId = ins.id AND t.taskState = 10 + LEFT JOIN wf_process_task_actor ta ON ta.processTaskId = t.id + $condition + """); + Cnd cnd = Cnd.NEW(); + + // 活动ID查询条件 + cnd.and("info.cadreTrainingActId", "=", activityId); + + // 工会、单位名称查询条件 + cnd.andEX("info.unionId", "=", unionId); + cnd.andEX("info.unitId", "=", unitId); + + // 性别查询条件 + cnd.andEX("info.sex", "=", sex); + + // 姓名查询条件 + if (StrUtil.isNotBlank(userName)) { + cnd.and("info.userName", "like", "%" + userName + "%"); + } + + // 只查询流程实例状态为20的数据(已完成状态) + cnd.and("ins.state", "=", 20); + + cnd.desc("info.applyTime"); + sql.setCondition(cnd); + Pagination pagination = cadreTrainingSignUpService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); + return Result.success(pagination); + } + + @At + @ApiOperation("获取活动列表") + @SaCheckPermission(value = {"cadreTraining.collect", "h5.cadreTraining.collect"}, mode = SaMode.OR) + public Result getActivityList(Integer year) { + Cnd cnd = Cnd.NEW(); + // 添加年度筛选条件,基于报名开始时间 + if (year != null) { + cnd.andEX("year(signUpStartTime)", "=", year); + } + // 按报名开始时间倒序排列(最新的活动在前) + cnd.desc("signUpStartTime"); + List list = cadreTrainingActService.query(cnd); + return Result.success(list); + } + + @At + @ApiOperation("删除") + @Aop(TransAop.READ_COMMITTED) + @SaCheckPermission(value = {"cadreTraining.collect", "h5.cadreTraining.collect"}, mode = SaMode.OR) + @SLog(tag = "删除干部培训报名", msg = "删除干部培训报名") + public Result delete(@Param("id") String id) { + cadreTrainingSignUpService.delete(id); + flowEngine.processInstanceService().deleteProcessInstanceByBusinessKey(id); + return Result.success(); + } + + @At + @Ok("void") + @SaCheckPermission(value = {"cadreTraining.collect", "h5.cadreTraining.collect"}, mode = SaMode.OR) + @ApiOperation("导出培训活动报名人表") + public void onExport(@Param(value = "activityId") String activityId, + @Param(value = "unionId") String unionId, + @Param(value = "unitId") String unitId, + @Param(value = "userName") String userName, + @Param(value = "sex") String sex, + HttpServletResponse response) { + //查询审核通过的数据 + Sql sql = Sqls.create(""" + SELECT + info.*, + ct.name AS activityName, + ins.state instanceState + FROM + cadre_training_signup info + LEFT JOIN `wf_process_instance` ins ON ins.businessNo = info.id + LEFT JOIN `cadre_training` ct ON ct.id = info.cadreTrainingActId + $condition + """); + Cnd cnd = Cnd.NEW(); + if (StrUtil.isNotBlank(userName)) { + cnd.and("info.userName", "like", "%" + userName + "%"); + } + // 活动ID查询条件 + cnd.and("info.cadreTrainingActId", "=", activityId); + cnd.andEX("info.unionId", "=", unionId); + cnd.andEX("info.unitId", "=", unitId); + cnd.andEX("info.sex", "=", sex); + cnd.and("ins.state", "=", 20); + + cnd.desc("info.applyTime"); + sql.setCondition(cnd); + List list = cadreTrainingSignUpService.listVO(sql, CadreTrainingCollectExcelVO.class); + + ExportParams exportParams = new ExportParams(); + exportParams.setType(ExcelType.XSSF); + + Workbook workbook = ExcelExportUtil.exportExcel(exportParams, CadreTrainingCollectExcelVO.class, list); + CommonDownloadUtil.download("培训报名表.xlsx", workbook, response); + } +} diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/cadreTraining/controller/CadreTrainingMineController.java b/src/main/java/com/budwk/app/zhgh/dayofficework/cadreTraining/controller/CadreTrainingMineController.java new file mode 100644 index 00000000..09862ab4 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/cadreTraining/controller/CadreTrainingMineController.java @@ -0,0 +1,126 @@ +package com.budwk.app.zhgh.dayofficework.cadreTraining.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.param.PageForm; +import com.budwk.app.base.result.Result; +import com.budwk.app.flow.engine.FlowEngine; +import com.budwk.app.web.commons.auth.utils.SecurityUtil; +import com.budwk.app.zhgh.dayofficework.cadreTraining.model.CadreTrainingAct; +import com.budwk.app.zhgh.dayofficework.cadreTraining.service.CadreTrainingActService; +import com.budwk.app.zhgh.dayofficework.cadreTraining.service.CadreTrainingSignUpService; +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.Dao; +import org.nutz.dao.Sqls; +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.lang.util.NutMap; +import org.nutz.mvc.annotation.At; +import org.nutz.mvc.annotation.Ok; +import org.nutz.mvc.annotation.Param; + +import javax.validation.Valid; + +/** + * @author : hongqiwei + * @description : + * @createDate : 2025/9/22 15:46 + */ + +@IocBean +@At("/platform/cadreTraining/mine") +@Api("我的报名") +@Ok("json:full") +@Slf4j +public class CadreTrainingMineController { + + @Inject + private Dao dao; + @Inject + private FlowEngine flowEngine; + @Inject + private CadreTrainingSignUpService cadreTrainingSignUpService; + + @At("") + @Ok("beetl:/platform/zhgh/dayofficework/cadreTraining/mine/index.html") + @SaCheckPermission("cadreTraining.mine") + public void index() { + } + @At("/h5") + @Ok("beetl:/platform/zhghh5/dayofficework/cadreTraining/mine/index.html") + @SaCheckPermission("h5.cadreTraining.mine") + public void h5Index() { + } + + @At + @ApiOperation("分页查询") + @SaCheckPermission(value = {"cadreTraining.mine", "h5.cadreTraining.mine"}, mode = SaMode.OR) + public Result pageData(@Valid PageForm pageForm, Integer year) { + Sql sql = Sqls.create(""" + SELECT + info.*, + ct.name, + ct.signUpStartTime, + ct.signUpEndTime, + ct.startTime, + ct.endTime, + ct.notice, + ins.id AS instanceId, + ins.businessNo, + ins.state instanceState, + ins.variable instanceVariable, + ins.processDefineId instanceProcessDefineId, + t.id taskId, + t.taskName AS taskKey, + t.displayName taskName, + t.taskType, + t.performType taskPerformType, + t.taskState, + t.finishTime, + t.taskParentId, + t.variable taskVariable, + IF((SELECT taskName FROM wf_process_task tt WHERE tt.id = t.taskParentId) = 'startTask', 1, 0) canRevoke, + (select MAX(id) from wf_process_task where processInstanceId = ins.id and taskName = 'startTask') AS startTaskId + FROM + cadre_training_signup info + LEFT JOIN `wf_process_instance` ins ON ins.businessNo = info.id + LEFT JOIN `cadre_training` ct ON ct.id = info.cadreTrainingActId + LEFT JOIN wf_process_task t ON t.processInstanceId = ins.id AND t.taskState = 10 + LEFT JOIN wf_process_task_actor ta ON ta.processTaskId = t.id + $condition + """); + Cnd cnd = Cnd.NEW(); + // 年度查询条件 + cnd.andEX("year(info.applyTime)", "=", year); + // 名称搜索条件 + if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) { + cnd.where().andLike(CadreTrainingAct::getName, pageForm.getSearchKeyword()); + } + cnd.desc("info.applyTime"); + cnd.and("info.userId", "=", SecurityUtil.getUserId()); + sql.setCondition(cnd); + Pagination pagination = cadreTrainingSignUpService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); + return Result.success(pagination); + } + + @At + @ApiOperation("删除") + @Aop(TransAop.READ_COMMITTED) + @SaCheckPermission(value = {"cadreTraining.mine", "h5.cadreTraining.mine"}, mode = SaMode.OR) + @SLog( tag = "删除工会报销", msg = "删除工会报销") + public Result delete(@Param("id") String id) { + cadreTrainingSignUpService.delete(id); + flowEngine.processInstanceService().deleteProcessInstanceByBusinessKey(id); + return Result.success(); + } +} + diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/cadreTraining/controller/CadreTrainingSchoolAuditController.java b/src/main/java/com/budwk/app/zhgh/dayofficework/cadreTraining/controller/CadreTrainingSchoolAuditController.java new file mode 100644 index 00000000..25e5b3f4 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/cadreTraining/controller/CadreTrainingSchoolAuditController.java @@ -0,0 +1,139 @@ +package com.budwk.app.zhgh.dayofficework.cadreTraining.controller; + +import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.dev33.satoken.annotation.SaMode; +import cn.hutool.core.util.StrUtil; +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.engine.FlowEngine; +import com.budwk.app.flow.enums.ProcessTaskStateEnum; +import com.budwk.app.web.commons.auth.utils.SecurityUtil; +import com.budwk.app.zhgh.dayofficework.cadreTraining.service.CadreTrainingSignUpService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.nutz.dao.Cnd; +import org.nutz.dao.Dao; +import org.nutz.dao.Sqls; +import org.nutz.dao.sql.Sql; +import org.nutz.ioc.loader.annotation.Inject; +import org.nutz.ioc.loader.annotation.IocBean; +import org.nutz.lang.util.NutMap; +import org.nutz.mvc.annotation.At; +import org.nutz.mvc.annotation.Ok; + +import java.util.List; + +/** + * @author : hongqiwei + * @description : + * @createDate : 2025/9/22 15:47 + */ + +@IocBean +@At("/platform/cadreTraining/schoolAudit") +@Api("校工会审核") +@Ok("json:full") +@Slf4j +public class CadreTrainingSchoolAuditController { + + @Inject + private Dao dao; + @Inject + private FlowEngine flowEngine; + @Inject + private CadreTrainingSignUpService cadreTrainingSignUpService; + @At("") + @Ok("beetl:/platform/zhgh/dayofficework/cadreTraining/schoolAudit/index.html") + @SaCheckPermission("cadreTraining.schoolAudit") + public void index() { + } + @At("/h5") + @Ok("beetl:/platform/zhghh5/dayofficework/cadreTraining/schoolAudit/index.html") + @SaCheckPermission("h5.cadreTraining.schoolAudit") + public void h5Index() { + } + @At + @ApiOperation("分页查询") + @SaCheckPermission(value = {"cadreTraining.schoolAudit", "h5.cadreTraining.schoolAudit"}, mode = SaMode.OR) + public Result pageData(PageForm pageForm, + boolean approval, + Integer year, + String activityId, + String unionId, + String unitId, + String userName, + String sex) { + Sql sql = Sqls.create(""" + SELECT + info.*, + ct.name, + ct.signUpStartTime, + ct.signUpEndTime, + ct.startTime, + ct.endTime, + ct.notice, + ins.id AS instanceId, + ins.businessNo, + ins.state instanceState, + ins.variable instanceVariable, + ins.processDefineId instanceProcessDefineId, + t.id taskId, + t.taskName AS taskKey, + t.displayName taskName, + t.taskType, + t.performType taskPerformType, + t.taskState, + t.finishTime, + t.taskParentId, + t.variable taskVariable, + IFNULL(GROUP_CONCAT(DISTINCT nt.displayName),'结束') curTaskName, + IF(rt.id IS NOT NULL, 1, 0) AS canRevoke + FROM + wf_process_task t + LEFT JOIN wf_process_instance ins ON ins.id = t.processInstanceId + LEFT JOIN cadre_training_signup info ON info.id = ins.businessNo + LEFT JOIN `cadre_training` ct ON ct.id = info.cadreTrainingActId + LEFT JOIN wf_process_task_actor ta ON ta.processTaskId = t.id + LEFT JOIN wf_process_task nt ON nt.processInstanceId = ins.id AND nt.taskState = 10 + LEFT JOIN wf_process_task rt ON rt.processInstanceId = ins.id AND rt.taskParentId = t.id AND rt.taskState = 10 + $condition + """); + Cnd cnd = Cnd.NEW(); + cnd.and("t.taskName", "=", "14347d9f-125f-4b8c-bd6e-97cce1e40e3f"); + cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId())); + + if (approval) { + cnd.and("t.taskState", "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.WITHDRAW.getCode(), ProcessTaskStateEnum.INTERRUPT.getCode())); + } else { + cnd.and("t.taskState", "=", ProcessTaskStateEnum.DOING.getCode()); + } + // 活动ID查询条件 + cnd.andEX("info.cadreTrainingActId", "=", activityId); + + // 工会、单位名称查询条件 + cnd.andEX("info.unionId", "=", unionId); + cnd.andEX("info.unitId", "=", unitId); + + // 性别查询条件 + cnd.andEX("info.sex", "=", sex); + + // 姓名查询条件 + if (StrUtil.isNotBlank(userName)) { + cnd.and("info.userName", "like", "%" + userName + "%"); + } + if (StrUtil.isAllBlank(pageForm.getPageOrderName(), pageForm.getPageOrderBy())) { + cnd.desc("info.applyTime"); + } else { + cnd.orderBy(pageForm.getPageOrderName(), PageUtil.getOrder(pageForm.getPageOrderBy())); + } + cnd.groupBy("t.id"); + cnd.desc("t.createdAt"); + sql.setCondition(cnd); + Pagination pagination = cadreTrainingSignUpService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); + return Result.success(pagination); + } +} + diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/cadreTraining/controller/CadreTrainingSignUpController.java b/src/main/java/com/budwk/app/zhgh/dayofficework/cadreTraining/controller/CadreTrainingSignUpController.java new file mode 100644 index 00000000..604a2745 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/cadreTraining/controller/CadreTrainingSignUpController.java @@ -0,0 +1,120 @@ +package com.budwk.app.zhgh.dayofficework.cadreTraining.controller; + +import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.dev33.satoken.annotation.SaMode; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.lang.Dict; +import cn.hutool.core.util.StrUtil; +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.flow.constant.FlowConst; +import com.budwk.app.flow.engine.FlowEngine; +import com.budwk.app.flow.entity.ProcessInstance; +import com.budwk.app.flow.entity.ProcessTask; +import com.budwk.app.flow.enums.ProcessSubmitTypeEnum; +import com.budwk.app.web.commons.auth.utils.SecurityUtil; +import com.budwk.app.zhgh.dayofficework.cadreTraining.model.CadreTrainingAct; +import com.budwk.app.zhgh.dayofficework.cadreTraining.model.CadreTrainingSignUp; +import com.budwk.app.zhgh.dayofficework.cadreTraining.service.CadreTrainingActService; +import com.budwk.app.zhgh.dayofficework.cadreTraining.service.CadreTrainingSignUpService; +import com.budwk.app.zhgh.dayofficework.rest.models.RestActSignUp; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.nutz.dao.Cnd; +import org.nutz.dao.Dao; +import org.nutz.dao.Sqls; +import org.nutz.dao.sql.Sql; +import org.nutz.ioc.loader.annotation.Inject; +import org.nutz.ioc.loader.annotation.IocBean; +import org.nutz.mvc.annotation.At; +import org.nutz.mvc.annotation.Ok; +import org.nutz.mvc.annotation.Param; + +import javax.validation.Valid; +import java.util.List; + +@IocBean +@At("/platform/cadreTraining/branchUnionSignUp") +@Ok("json:full") +@Api(tags = "干部培训分工会活动报名") +public class CadreTrainingSignUpController { + + @Inject + private Dao dao; + @Inject + private FlowEngine flowEngine; + @Inject + private CadreTrainingActService cadreTrainingActService; + @Inject + private CadreTrainingSignUpService cadreTrainingSignUpService; + + @At("") + @Ok("beetl:/platform/zhgh/dayofficework/cadreTraining/signUp/index.html") + @SaCheckPermission("cadreTraining.branchUnionSignUp") + public void index() { + } + + @At + @SaCheckPermission("cadreTraining.branchUnionSignUp") + @ApiOperation("分页查询") + public Result pageData(@Valid PageForm pageForm,Integer year) { + Sql sql = Sqls.create(""" + SELECT + info.* + FROM + cadre_training info + $condition + """); + Cnd cnd = Cnd.NEW(); + cnd.andEX("year(signUpStartTime)", "=", year); + if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) { + cnd.where().andLike(CadreTrainingAct::getName, pageForm.getSearchKeyword()); + } + sql.setCondition(cnd); + Pagination pagination = cadreTrainingActService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); + return Result.success(pagination); + } + + @At + @ApiOperation("提交申请") + @SaCheckPermission(value = {"cadreTraining.branchUnionSignUp", "h5.cadreTraining.branchUnionSignUp"}, mode = SaMode.OR) + public Result submit(@Param("data") CadreTrainingSignUp cadreTrainingSignUp) { + if (StrUtil.isBlank(cadreTrainingSignUp.getId())) cadreTrainingSignUp.setApplyTime(DateUtil.now()); + + dao.insertOrUpdate(cadreTrainingSignUp); + // 开启流程实例 + Dict args = Dict.create(); + args.set(FlowConst.SUBMIT_TYPE, ProcessSubmitTypeEnum.APPLY.getCode()); + args.set(FlowConst.FORM_DATA, cadreTrainingSignUp); + ProcessInstance instance = flowEngine.startProcessInstanceByKey("GBPX", cadreTrainingSignUp.getId(), SecurityUtil.getUserId(), args); + + // 自动完成第一个申请任务 + List doingTaskList = flowEngine.processTaskService().getDoingTaskList(instance.getId(), null); + for (ProcessTask task : doingTaskList) { + flowEngine.executeProcessTask(task.getId(), SecurityUtil.getUserId(), args); + } + return Result.success(); + } + + + + @At + @SaCheckPermission("cadreTraining.branchUnionSignUp") + @ApiOperation("查询报名用户") + public Result listSignUser(@Param("activityId") String activityId) { + List list = dao.query(CadreTrainingSignUp.class, Cnd.where(CadreTrainingSignUp::getCadreTrainingActId, "=", activityId).and(CadreTrainingSignUp::getUnionId, "=", SecurityUtil.getUnionId())); + return Result.success(list); + } + + + @At + @SaCheckPermission("cadreTraining.branchUnionSignUp") + @ApiOperation("查询本分工会名额") + public Result quota(@Param("activityId") String activityId) { + CadreTrainingAct cadreTrainingAct = dao.fetch(CadreTrainingAct.class, activityId); + Integer quota = cadreTrainingAct.getQuotas().stream().filter(v -> v.getStr("id", "").equals(SecurityUtil.getUnionId())).findFirst().map(v -> v.getInt("num")).orElse(0); + return Result.success(quota); + } + +} diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/cadreTraining/model/CadreTrainingAct.java b/src/main/java/com/budwk/app/zhgh/dayofficework/cadreTraining/model/CadreTrainingAct.java new file mode 100644 index 00000000..5eb90d8d --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/cadreTraining/model/CadreTrainingAct.java @@ -0,0 +1,72 @@ +package com.budwk.app.zhgh.dayofficework.cadreTraining.model; + +import cn.hutool.json.JSONObject; +import com.budwk.app.base.model.BaseModel; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.nutz.dao.entity.annotation.*; +import org.nutz.dao.interceptor.annotation.PrevInsert; + +import java.util.Date; +import java.util.List; + +/** + * @ClassName UnionReimburse + * @Author hongqiwei + * @Date 2025/9/19 14:45 + * @Version 1.0 + * @Description TODO + */ + +@Data +@EqualsAndHashCode(callSuper = true) +@Table("cadre_training") +@TableMeta("{'mysql-charset':'utf8mb4'}") +@Comment("工会干部培训") +public class CadreTrainingAct extends BaseModel { + + + @Name + @ColDefine(type = ColType.VARCHAR, width = 32) + @PrevInsert(uu32 = true) + @Comment("id") + private String id; + + @Column + @Comment("活动名称") + @ColDefine(type = ColType.VARCHAR, width = 50) + private String name; + + @Column + @Comment("报名开始时间") + @ColDefine(type = ColType.DATETIME) + private Date signUpStartTime; + + @Column + @Comment("报名结束时间") + @ColDefine(type = ColType.DATETIME) + private Date signUpEndTime; + + @Column + @Comment("活动开始时间") + @ColDefine(type = ColType.DATETIME) + private Date startTime; + + @Column + @Comment("活动结束时间") + @ColDefine(type = ColType.DATETIME) + private Date endTime; + + @Column + @Comment("通知内容") + @ColDefine(customType = "longtext") + private String notice; + + + @Column + @Comment("名额分配") + @ColDefine(type = ColType.MYSQL_JSON) + private List quotas; + + +} diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/cadreTraining/model/CadreTrainingSignUp.java b/src/main/java/com/budwk/app/zhgh/dayofficework/cadreTraining/model/CadreTrainingSignUp.java new file mode 100644 index 00000000..5d49f5af --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/cadreTraining/model/CadreTrainingSignUp.java @@ -0,0 +1,91 @@ +package com.budwk.app.zhgh.dayofficework.cadreTraining.model; + +import cn.hutool.json.JSONObject; +import com.budwk.app.base.model.BaseModel; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.nutz.dao.entity.annotation.*; +import org.nutz.dao.interceptor.annotation.PrevInsert; + +import java.util.List; + +@Data +@EqualsAndHashCode(callSuper = true) +@Table("cadre_training_signup") +@TableMeta("{'mysql-charset':'utf8mb4'}") +@Comment("工会干部培训报名") +public class CadreTrainingSignUp extends BaseModel { + + @Name + @ColDefine(type = ColType.VARCHAR, width = 32) + @PrevInsert(uu32 = true) + @Comment("id") + private String id; + + @Column + @Comment("活动ID") + @ColDefine(type = ColType.VARCHAR, width = 32) + private String cadreTrainingActId; + + @Column + @Comment("用户ID") + @ColDefine(type = ColType.VARCHAR, width = 32) + private String userId; + + @Column + @Comment("姓名") + @ColDefine(type = ColType.VARCHAR, width = 50) + private String userName; + + @Column + @Comment("性别") + @ColDefine(type = ColType.VARCHAR, width = 50) + private String sex; + + @Column + @Comment("分工会ID") + @ColDefine(type = ColType.VARCHAR, width = 32) + private String unionId; + + @Column + @Comment("分工会名称") + @ColDefine(type = ColType.VARCHAR, width = 50) + private String unionName; + + + @Column + @Comment("工号") + @ColDefine(type = ColType.VARCHAR, width = 50) + private String loginName; + + @Column + @Comment("单位ID") + @ColDefine(type = ColType.VARCHAR, width = 32) + private String unitId; + + @Column + @Comment("单位") + @ColDefine(type = ColType.VARCHAR, width = 100) + private String unitName; + + @Column + @Comment("年龄") + @ColDefine(type = ColType.INT) + private Integer age; + + @Column + @Comment("手机号") + @ColDefine(type = ColType.VARCHAR, width = 100) + private String mobile; + + @Column + @Comment("报名时间") + @ColDefine(type = ColType.VARCHAR, width = 100) + private String applyTime; + + @Column + @Comment("备注") + @ColDefine(type = ColType.VARCHAR, width = 1000) + private String remark; + +} diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/cadreTraining/param/CadreTrainingActPageForm.java b/src/main/java/com/budwk/app/zhgh/dayofficework/cadreTraining/param/CadreTrainingActPageForm.java new file mode 100644 index 00000000..a74fc310 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/cadreTraining/param/CadreTrainingActPageForm.java @@ -0,0 +1,23 @@ +package com.budwk.app.zhgh.dayofficework.cadreTraining.param; + +import com.budwk.app.base.param.PageForm; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@ApiModel("疗休养综合查询查询参数") +@EqualsAndHashCode(callSuper = true) +@Data +public class CadreTrainingActPageForm extends PageForm { + + @ApiModelProperty("活动ID") + private String actId; + + @ApiModelProperty("分工会ID") + private String unionId; + + @ApiModelProperty("单位ID") + private String unitId; + +} diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/cadreTraining/service/CadreTrainingActService.java b/src/main/java/com/budwk/app/zhgh/dayofficework/cadreTraining/service/CadreTrainingActService.java new file mode 100644 index 00000000..bbb3ffc1 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/cadreTraining/service/CadreTrainingActService.java @@ -0,0 +1,7 @@ +package com.budwk.app.zhgh.dayofficework.cadreTraining.service; + +import com.budwk.app.base.service.BaseService; +import com.budwk.app.zhgh.dayofficework.cadreTraining.model.CadreTrainingAct; + +public interface CadreTrainingActService extends BaseService { +} diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/cadreTraining/service/CadreTrainingSignUpService.java b/src/main/java/com/budwk/app/zhgh/dayofficework/cadreTraining/service/CadreTrainingSignUpService.java new file mode 100644 index 00000000..a5a7220d --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/cadreTraining/service/CadreTrainingSignUpService.java @@ -0,0 +1,8 @@ +package com.budwk.app.zhgh.dayofficework.cadreTraining.service; + +import com.budwk.app.base.service.BaseService; +import com.budwk.app.zhgh.dayofficework.cadreTraining.model.CadreTrainingSignUp; + + +public interface CadreTrainingSignUpService extends BaseService { +} diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/cadreTraining/service/impl/CadreTrainingActServiceImpl.java b/src/main/java/com/budwk/app/zhgh/dayofficework/cadreTraining/service/impl/CadreTrainingActServiceImpl.java new file mode 100644 index 00000000..293e6561 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/cadreTraining/service/impl/CadreTrainingActServiceImpl.java @@ -0,0 +1,17 @@ +package com.budwk.app.zhgh.dayofficework.cadreTraining.service.impl; + + +import com.budwk.app.base.service.impl.BaseServiceImpl; +import com.budwk.app.zhgh.dayofficework.cadreTraining.model.CadreTrainingAct; +import com.budwk.app.zhgh.dayofficework.cadreTraining.service.CadreTrainingActService; +import lombok.extern.slf4j.Slf4j; +import org.nutz.dao.Dao; +import org.nutz.ioc.loader.annotation.IocBean; + +@Slf4j +@IocBean(args = {"refer:dao"}) +public class CadreTrainingActServiceImpl extends BaseServiceImpl implements CadreTrainingActService { + public CadreTrainingActServiceImpl(Dao dao) { + super(dao); + } +} diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/cadreTraining/service/impl/CadreTrainingSignUpServiceImpl.java b/src/main/java/com/budwk/app/zhgh/dayofficework/cadreTraining/service/impl/CadreTrainingSignUpServiceImpl.java new file mode 100644 index 00000000..c1fa0681 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/cadreTraining/service/impl/CadreTrainingSignUpServiceImpl.java @@ -0,0 +1,15 @@ +package com.budwk.app.zhgh.dayofficework.cadreTraining.service.impl; + +import com.budwk.app.base.service.impl.BaseServiceImpl; +import com.budwk.app.zhgh.dayofficework.cadreTraining.model.CadreTrainingSignUp; +import com.budwk.app.zhgh.dayofficework.cadreTraining.service.CadreTrainingSignUpService; + +import org.nutz.dao.Dao; +import org.nutz.ioc.loader.annotation.IocBean; + +@IocBean(args = {"refer:dao"}) +public class CadreTrainingSignUpServiceImpl extends BaseServiceImpl implements CadreTrainingSignUpService { + public CadreTrainingSignUpServiceImpl(Dao dao) { + super(dao); + } +} diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/cadreTraining/vo/CadreTrainingCollectExcelVO.java b/src/main/java/com/budwk/app/zhgh/dayofficework/cadreTraining/vo/CadreTrainingCollectExcelVO.java new file mode 100644 index 00000000..75d89d4c --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/cadreTraining/vo/CadreTrainingCollectExcelVO.java @@ -0,0 +1,40 @@ +// MaternityLeaveCollectExcelVO.java +package com.budwk.app.zhgh.dayofficework.cadreTraining.vo; + +import cn.afterturn.easypoi.excel.annotation.Excel; +import lombok.Data; + +import java.util.Date; + +/** + * @author : hongqiwei + * @description : + * @createDate : 2025/9/16 17:08 + */ + +//工会干部培训,活动报名人导出 +@Data +public class CadreTrainingCollectExcelVO { + + @Excel(name = "报名时间", width = 20, format = "yyyy-MM-dd") + private Date applyTime; + + @Excel(name = "姓名", width = 20) + private String userName; + + @Excel(name = "性别", width = 20) + private String sex; + + @Excel(name = "分工会", width = 20) + private String unionName; + + @Excel(name = "单位", width = 20) + private String unitName; + + @Excel(name = "活动名称", width = 20) + private String activityName; + + @Excel(name = "电话", width = 20) + private String mobile; + +} diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/rest/param/RestQueryPageForm.java b/src/main/java/com/budwk/app/zhgh/dayofficework/rest/param/RestQueryPageForm.java index 0dd21e13..f3f7150d 100644 --- a/src/main/java/com/budwk/app/zhgh/dayofficework/rest/param/RestQueryPageForm.java +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/rest/param/RestQueryPageForm.java @@ -11,6 +11,9 @@ import lombok.EqualsAndHashCode; @Data public class RestQueryPageForm extends PageForm { + @ApiModelProperty("年度") + private String year; + @ApiModelProperty("活动ID") private String actId; diff --git a/src/main/java/com/budwk/app/zhgh/staffbenefit/maternityLeave/controller/MaternityLeaveMineController.java b/src/main/java/com/budwk/app/zhgh/staffbenefit/maternityLeave/controller/MaternityLeaveMineController.java index fe70ad86..c62d7701 100644 --- a/src/main/java/com/budwk/app/zhgh/staffbenefit/maternityLeave/controller/MaternityLeaveMineController.java +++ b/src/main/java/com/budwk/app/zhgh/staffbenefit/maternityLeave/controller/MaternityLeaveMineController.java @@ -2,19 +2,32 @@ package com.budwk.app.zhgh.staffbenefit.maternityLeave.controller; import cn.dev33.satoken.annotation.SaCheckPermission; import cn.dev33.satoken.annotation.SaMode; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.lang.Dict; import cn.hutool.core.util.StrUtil; +import cn.hutool.json.JSONUtil; 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.utils.CommonDownloadUtil; +import com.budwk.app.base.utils.SysOfficeTemplateUtil; import com.budwk.app.flow.engine.FlowEngine; +import com.budwk.app.flow.entity.ProcessTask; +import com.budwk.app.flow.vo.ProcessTaskVO; import com.budwk.app.web.commons.auth.utils.SecurityUtil; +import com.budwk.app.web.commons.base.Globals; +import com.budwk.app.zhgh.activity.declarereimbursement.vo.ActivityBudgetVO; import com.budwk.app.zhgh.staffbenefit.maternityLeave.service.MaternityLeaveService; +import com.deepoove.poi.XWPFTemplate; +import com.deepoove.poi.config.Configure; +import com.deepoove.poi.plugin.table.LoopRowTableRenderPolicy; 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.Dao; import org.nutz.dao.Sqls; import org.nutz.dao.sql.Sql; import org.nutz.ioc.aop.Aop; @@ -25,6 +38,15 @@ import org.nutz.mvc.annotation.At; import org.nutz.mvc.annotation.Ok; import org.nutz.mvc.annotation.Param; +import javax.servlet.http.HttpServletResponse; +import javax.validation.Valid; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.text.SimpleDateFormat; +import java.util.*; + +import static cn.dev33.satoken.SaManager.config; + /** * @author : hongqiwei * @description : @@ -38,10 +60,14 @@ import org.nutz.mvc.annotation.Param; @Slf4j public class MaternityLeaveMineController { + @Inject + private Dao dao; @Inject private FlowEngine flowEngine; @Inject private MaternityLeaveService maternityLeaveService; + @Inject + private SysOfficeTemplateUtil sysOfficeTemplateUtil; @At("/index") @@ -105,5 +131,124 @@ public class MaternityLeaveMineController { flowEngine.processInstanceService().deleteProcessInstanceByBusinessKey(id); return Result.success(); } + + @At + @Ok("void") + @SaCheckPermission("maternityLeave.mine") + @SLog(tag = "生育休假审批表", msg = "导出生育休假审批表") + public void doExportApply(@Valid String id, HttpServletResponse response) { + HashMap docData = new HashMap<>(); + + Sql sql = Sqls.create(""" + SELECT + info.*, + ins.id AS instanceId + FROM + `maternity_leave` info + LEFT JOIN wf_process_instance ins ON ins.businessNo = info.id + WHERE + info.id = @id + """).setParam("id", id); + sql.setCallback(Sqls.callback.map()); + dao.execute(sql); + NutMap info = (NutMap) sql.getResult(); + + // 根据性别选择不同的模板和文件名 + String sex = info.getString("sex"); + String templateName; + String fileName; + + if ("女性".equals(sex) || "女".equals(sex)) { + templateName = "maternity_leave_woman"; + fileName = "女职工生育休假审批表_" + info.getString("userName") + ".docx"; + } else { + templateName = "maternity_leave_man"; + fileName = "男职工陪护假育儿假审批表_" + info.getString("userName") + ".docx"; + } + + // 添加日期格式化处理 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + + // 格式化日期字段 + if (info.get("birthday") != null) { + if (info.get("birthday") instanceof Date) { + info.put("birthday", sdf.format((Date) info.get("birthday"))); + } + } + + if (info.get("loverBirthday") != null) { + if (info.get("loverBirthday") instanceof Date) { + info.put("loverBirthday", sdf.format((Date) info.get("loverBirthday"))); + } + } + + if (info.get("childrenBirthday") != null) { + if (info.get("childrenBirthday") instanceof Date) { + info.put("childrenBirthday", sdf.format((Date) info.get("childrenBirthday"))); + } + } + + if (info.get("startTime") != null) { + if (info.get("startTime") instanceof Date) { + info.put("startTime", sdf.format((Date) info.get("startTime"))); + } + } + + if (info.get("endTime") != null) { + if (info.get("endTime") instanceof Date) { + info.put("endTime", sdf.format((Date) info.get("endTime"))); + } + } + + docData.put("schoolName", Globals.AppName); + docData.put("info", info); + + List doneTaskVos = new ArrayList<>(); + List doneTaskList = flowEngine.processTaskService().getDoneTaskList(info.getLong("instanceId"), null); + for (ProcessTask doneTask : doneTaskList) { + ProcessTaskVO taskVO = flowEngine.processTaskService().findById(doneTask.getId()); + doneTaskVos.add(taskVO); + } + + // 各审批节点处理 + doneTaskVos.stream().filter(task -> "分工会审核".equals(task.getDisplayName())) + .max(Comparator.comparing(ProcessTaskVO::getCreatedAt)) + .ifPresent(v -> { + Dict taskFormData = v.getTaskFormData(); + HashMap approval = new HashMap<>(); + + approval.put("date", DateUtil.format(v.getFinishTime(), "yyyy年MM月dd日")); + approval.put("user", taskFormData.getStr("tf_userName")); + if (StrUtil.isNotBlank(taskFormData.getStr("tf_sign"))) { + approval.put("sign", sysOfficeTemplateUtil.createPictureRenderData(taskFormData.getStr("tf_sign"))); + } + approval.put("opinion", taskFormData.getStr("tf_opinion")); + docData.put("fgh", approval); + }); + + doneTaskVos.stream().filter(task -> "校工会审核".equals(task.getDisplayName())) + .max(Comparator.comparing(ProcessTaskVO::getCreatedAt)) + .ifPresent(v -> { + Dict taskFormData = v.getTaskFormData(); + HashMap approval = new HashMap<>(); + + approval.put("date", DateUtil.format(v.getFinishTime(), "yyyy年MM月dd日")); + approval.put("user", taskFormData.getStr("tf_userName")); + if (StrUtil.isNotBlank(taskFormData.getStr("tf_sign"))) { + approval.put("sign", sysOfficeTemplateUtil.createPictureRenderData(taskFormData.getStr("tf_sign"))); + } + approval.put("opinion", taskFormData.getStr("tf_opinion")); + docData.put("xgh", approval); + }); + + try (ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream()) { + XWPFTemplate.compile(sysOfficeTemplateUtil.getTemplate(templateName)).render(docData).writeAndClose(byteArrayOutputStream); + CommonDownloadUtil.download(fileName, byteArrayOutputStream.toByteArray(), response); + } catch (IOException e) { + log.error("生育休假审批表导出失败,id:{},错误信息:{}", id, e.getMessage()); + } + } + + } diff --git a/src/main/java/com/budwk/app/zhgh/staffmanage/member/param/pageform/MemberApplyPageForm.java b/src/main/java/com/budwk/app/zhgh/staffmanage/member/param/pageform/MemberApplyPageForm.java index e1e8fd6f..9a70a625 100644 --- a/src/main/java/com/budwk/app/zhgh/staffmanage/member/param/pageform/MemberApplyPageForm.java +++ b/src/main/java/com/budwk/app/zhgh/staffmanage/member/param/pageform/MemberApplyPageForm.java @@ -7,6 +7,8 @@ import lombok.EqualsAndHashCode; import org.nutz.dao.Cnd; import org.nutz.dao.util.cri.SqlExpressionGroup; +import java.util.List; + /** * @version 1.0 * @Author zzr @@ -22,11 +24,11 @@ public class MemberApplyPageForm extends PageForm { private String unitId; - private String userState; + private List userStates; - private String personType; + private List personTypes; - private String preparedBy; + private List preparedBys; public static void buildSearch(Cnd cnd, MemberApplyPageForm pageForm) { if (cnd == null) { @@ -40,8 +42,8 @@ public class MemberApplyPageForm extends PageForm { } cnd.andEX("info.unionId","=",pageForm.getUnionId()); cnd.andEX("info.unitId","=",pageForm.getUnitId()); - cnd.andEX("info.userState","=",pageForm.getUserState()); - cnd.andEX("info.personType","=",pageForm.getPersonType()); - cnd.andEX("info.preparedBy","=",pageForm.getPreparedBy()); + cnd.andEX("info.userState","in",pageForm.getUserStates()); + cnd.andEX("info.personType","in",pageForm.getPersonTypes()); + cnd.andEX("info.preparedBy","in",pageForm.getPreparedBys()); } } diff --git a/src/main/java/com/budwk/app/zhgh/staffmanage/member/param/pageform/MemberChangePageForm.java b/src/main/java/com/budwk/app/zhgh/staffmanage/member/param/pageform/MemberChangePageForm.java index f6ae3c32..7e095f10 100644 --- a/src/main/java/com/budwk/app/zhgh/staffmanage/member/param/pageform/MemberChangePageForm.java +++ b/src/main/java/com/budwk/app/zhgh/staffmanage/member/param/pageform/MemberChangePageForm.java @@ -8,6 +8,8 @@ import lombok.EqualsAndHashCode; import org.nutz.dao.Cnd; import org.nutz.dao.util.cri.SqlExpressionGroup; +import java.util.List; + /** * @version 1.0 * @Author zzr @@ -29,15 +31,15 @@ public class MemberChangePageForm extends PageForm { // 在职状态 @ApiModelProperty("在职状态") - private String userState; + private List userStates; // 在职状态 @ApiModelProperty("编制类型") - private String preparedBy; + private List preparedBys; // 人员类型 @ApiModelProperty("人员类型") - private String personType; + private List personTypes; public void buildSearch(Cnd cnd, String prefix){ @@ -54,8 +56,8 @@ public class MemberChangePageForm extends PageForm { cnd.andEX(prefix + "unionId", "=", this.getUnionId()); cnd.andEX(prefix + "unitId", "=", this.getUnitId()); - cnd.andEX(prefix + "userState", "=", this.getUserState()); - cnd.andEX(prefix + "preparedBy", "=", this.getPreparedBy()); - cnd.andEX(prefix + "personType", "=", this.getPersonType()); + cnd.andEX(prefix + "userState", "in", this.getUserStates()); + cnd.andEX(prefix + "preparedBy", "in", this.getPreparedBys()); + cnd.andEX(prefix + "personType", "in", this.getPersonTypes()); } } diff --git a/src/main/resources/static/components/plugins/sysDict/DictSelect.vue b/src/main/resources/static/components/plugins/sysDict/DictSelect.vue index fbba3f2a..29d8c7e6 100644 --- a/src/main/resources/static/components/plugins/sysDict/DictSelect.vue +++ b/src/main/resources/static/components/plugins/sysDict/DictSelect.vue @@ -24,7 +24,7 @@ + + diff --git a/src/main/resources/views/platform/zhgh/dayofficework/cadreTraining/collect/index.html b/src/main/resources/views/platform/zhgh/dayofficework/cadreTraining/collect/index.html new file mode 100644 index 00000000..506b42b5 --- /dev/null +++ b/src/main/resources/views/platform/zhgh/dayofficework/cadreTraining/collect/index.html @@ -0,0 +1,176 @@ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 导出 + + + + + + + + + + + + + + + + + + + + + + +
+ + + + diff --git a/src/main/resources/views/platform/zhgh/dayofficework/cadreTraining/common/info.js b/src/main/resources/views/platform/zhgh/dayofficework/cadreTraining/common/info.js new file mode 100644 index 00000000..d6b48236 --- /dev/null +++ b/src/main/resources/views/platform/zhgh/dayofficework/cadreTraining/common/info.js @@ -0,0 +1,114 @@ +const cadreTrainingInfo = { + template: /*language=HTML*/ ` +
+
+ 报名信息 + 点击查看流程图 +
+ + + {{viewData.name}} + {{viewData.signUpStartTime}} + {{viewData.signUpEndTime}} + {{viewData.startTime}} + {{viewData.endTime}} +
+
+ + + {{viewData.userName}} + {{viewData.unionName}} + {{viewData.unitName}} + {{viewData.sex}} + {{viewData.mobile}} + {{viewData.remark}} + + + + + + +
+ `, + store, + dicts: ["PROCESS_TASK_SUBMIT_TYPE"], + data() { + return { + visible: false, + viewData: {}, + doneTasks: [], + row: null + } + }, + methods: { + // 打开 + onOpen(row) { + this.row = row + this.visible = true + this.getInfo() + this.getDoneTasks() + }, + + // 获取申请信息 + getInfo() { + this.viewData = { ...this.row }; + // this.$axios.post('/platform/cadreTraining/activity/get', {id: this.row.id}).then((res) => { + // if (res.code === 0) { + // this.viewData = res.data + // } + // }) + }, + + // 获取已办任务审批记录 + 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) + } + + } + + +} diff --git a/src/main/resources/views/platform/zhgh/dayofficework/cadreTraining/mine/index.html b/src/main/resources/views/platform/zhgh/dayofficework/cadreTraining/mine/index.html new file mode 100644 index 00000000..4b7babd9 --- /dev/null +++ b/src/main/resources/views/platform/zhgh/dayofficework/cadreTraining/mine/index.html @@ -0,0 +1,114 @@ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + diff --git a/src/main/resources/views/platform/zhgh/dayofficework/cadreTraining/schoolAudit/index.html b/src/main/resources/views/platform/zhgh/dayofficework/cadreTraining/schoolAudit/index.html new file mode 100644 index 00000000..03423b8b --- /dev/null +++ b/src/main/resources/views/platform/zhgh/dayofficework/cadreTraining/schoolAudit/index.html @@ -0,0 +1,246 @@ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 已审核 + 未审核 + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + diff --git a/src/main/resources/views/platform/zhgh/dayofficework/cadreTraining/signUp/index.html b/src/main/resources/views/platform/zhgh/dayofficework/cadreTraining/signUp/index.html new file mode 100644 index 00000000..f785f9ce --- /dev/null +++ b/src/main/resources/views/platform/zhgh/dayofficework/cadreTraining/signUp/index.html @@ -0,0 +1,135 @@ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + diff --git a/src/main/resources/views/platform/zhgh/dayofficework/cadreTraining/signUp/signForm.js b/src/main/resources/views/platform/zhgh/dayofficework/cadreTraining/signUp/signForm.js new file mode 100644 index 00000000..39f0b380 --- /dev/null +++ b/src/main/resources/views/platform/zhgh/dayofficework/cadreTraining/signUp/signForm.js @@ -0,0 +1,226 @@ +const signForm = { + template: /*language=HTML*/ ` + +
+ +
+ + + {{ viewData.name }} + + + {{ viewData.signUpStartTime }} + + + {{ viewData.signUpEndTime }} + + + {{ viewData.startTime }} + + + {{ viewData.endTime }} + + + {{ quota }}人 / 剩余: {{ remainingQuota }}人 + + +
+
+
+ + +
个人报名信息
+ + + + + + + + + + + + + + 取消 + 确认报名 + +
+ `, + store, + data() { + return { + dialogVisible: false, + viewData: {}, + formData: {}, // 将 signUpData 改为 formData + id: null, + //表格用户(实际上只包含当前用户) + teamUsers: [], + quota: 0, // 报名名额限制 + signedUsers: [], // 已报名人员列表 + submitLoading: false, // 提交按钮加载状态 + isSignUp: false // 是否已报名 + } + }, + computed: { + remainingQuota() { + // 如果 quota 为 null 或 undefined,显示"不限" + if (this.quota == null) return "不限" + // 如果 quota 为具体数值(包括0),则计算剩余名额 + const remaining = Math.max(0, this.quota - this.signedUsers.length) + return remaining + }, + }, + methods: { + onOpen(row) { + this.row = row + this.dialogVisible = true + this.id = row.id; + }, + + handleDialogOpen() { + this.getActivityInfo() + this.getQuota(this.id) + this.loadUserData() + }, + + // 加载用户数据 + async loadUserData() { + try { + // 获取已报名人员 + const signedResponse = await this.$axios.post("/platform/cadreTraining/branchUnionSignUp/listSignUser", { activityId: this.id }) + if (signedResponse.code === 0) { + this.signedUsers = Array.isArray(signedResponse.data) ? signedResponse.data : [] + + // 检查当前用户是否已报名 + const currentUser = this.signedUsers.find(user => user.userId === this.$store.state.user.id) + this.isSignUp = !!currentUser + + // 显示当前用户信息 + if (currentUser) { + this.teamUsers = [currentUser] + } else { + // 如果当前用户未报名,显示当前用户信息用于报名 + this.teamUsers = [{ + userId: this.$store.state.user.id, + userName: this.$store.state.user.username, + loginName: this.$store.state.user.loginname, + unitId: this.$store.state.user?.unit?.id, + unitName: this.$store.state.user?.unit?.name, + unionId: this.$store.state.user?.union?.id, + unionName: this.$store.state.user?.union?.name, + sex: this.$store.state.user.sex, + mobile: this.$store.state.user.mobile, + remark: '' + }] + } + + // 初始化表单数据 + this.initFormData(); + } + } catch (error) { + this.$message.error("获取用户数据失败") + } + }, + + // 初始化表单数据 + initFormData() { + if (this.teamUsers.length > 0) { + const user = this.teamUsers[0]; + this.formData = { + cadreTrainingActId: this.id, + userId: user.userId, + userName: user.userName, + loginName: user.loginName, + unitId: user.unitId, + unitName: user.unitName, + unionId: user.unionId, + unionName: user.unionName, + sex: user.sex, + mobile: user.mobile, + remark: user.remark || '' + }; + } + }, + + // 获取名额限制 + async getQuota(id) { + try { + const { code, data } = await this.$axios.post("/platform/cadreTraining/branchUnionSignUp/quota", { activityId: id }) + if (code === 0) { + this.quota = data + } + } catch (error) { + this.$message.error("获取名额限制失败") + } + }, + + //活动信息 + getActivityInfo() { + this.$axios.post("/platform/cadreTraining/activity/get", {id: this.id}).then((res) => { + if (res.code === 0) { + this.viewData = res.data + } + }) + }, + + //提交报名 + async onConfirm() { + // 检查是否已报名 + if (this.isSignUp) { + this.$message.warning("您已报名该活动!") + return + } + + // 检查名额限制 + if (this.quota > 0 && this.signedUsers.length >= this.quota) { + this.$message.warning("该活动报名名额已满!") + return + } + + // 更新表单数据中的备注信息 + if (this.teamUsers.length > 0) { + this.formData.remark = this.teamUsers[0].remark || ''; + } + + try { + this.submitLoading = true; + + this.$confirm("您确定要提交吗?", "提示", { + confirmButtonText: "确定", + cancelButtonText: "取消", + type: "warning" + }).then(async () => { + try { + const { code, msg } = await this.$axios.post('/platform/cadreTraining/branchUnionSignUp/submit', { + data: JSON.stringify(this.formData) + }) + + if (code === 0) { + this.$message.success("报名成功") + this.isSignUp = true + this.dialogVisible = false + this.$emit("refresh", null) + } else { + this.$message.error(msg || "报名失败") + } + } catch (error) { + this.$message.error("操作失败") + } finally { + this.submitLoading = false; + } + }).catch(() => { + this.submitLoading = false; + }) + } catch (error) { + this.$message.error("操作失败") + this.submitLoading = false; + } + }, + + } +} diff --git a/src/main/resources/views/platform/zhgh/staffbenefit/maternityLeave/apply/index.html b/src/main/resources/views/platform/zhgh/staffbenefit/maternityLeave/apply/index.html index 034e96a2..92bd1d91 100644 --- a/src/main/resources/views/platform/zhgh/staffbenefit/maternityLeave/apply/index.html +++ b/src/main/resources/views/platform/zhgh/staffbenefit/maternityLeave/apply/index.html @@ -12,7 +12,8 @@ layout("/layouts/platform.html"){ {{formData.userName}} {{formData.sex}} {{formData.nation}} - {{formData.birthday}} + + {{formatDate(formData.birthday)}} {{formData.unitName}} {{formData.mobile}} @@ -60,41 +61,45 @@ layout("/layouts/platform.html"){ - + + type="number" :disabled="true"> - + + type="number" :disabled="true"> - + + type="number" :disabled="true"> - + + type="number" :disabled="true"> - + - + + + - + - + + + @@ -198,14 +203,92 @@ layout("/layouts/platform.html"){ }); return total; - } + }, + // 是否为男性 + isMale() { + return this.formData.sex === '男性' || this.formData.sex === '男'; + }, + // 是否为女性 + isFemale() { + return this.formData.sex === '女性' || this.formData.sex === '女'; + }, }, watch: { totalLeaveDays(newVal) { this.$set(this.formData, 'leaveDays', newVal); + // 当合计天数或开始时间变化时,自动计算结束时间 + this.calculateEndTime(); + }, + 'formData.startTime'() { + // 当开始时间变化时,自动计算结束时间 + this.calculateEndTime(); + }, + // 监听性别变化,设置默认值 + isMale(newVal) { + if (newVal) { + // 男性默认设置 + this.$set(this.formData, 'loverSex', '女性'); + this.$set(this.formData, 'withLeave', 15); + this.$set(this.formData, 'parentalLeave', 10); + } + }, + isFemale(newVal) { + if (newVal) { + // 女性默认设置 + this.$set(this.formData, 'loverSex', '男性'); + this.$set(this.formData, 'maternityLeave', 98); + this.$set(this.formData, 'extendLeave', 60); + } } }, methods: { + // 添加日期格式化方法 + formatDate(date) { + if (!date) return ''; + // 如果已经是 yyyy-MM-dd 格式,直接返回 + if (typeof date === 'string' && /^\d{4}-\d{2}-\d{2}/.test(date)) { + // 如果包含时间,只取日期部分 + if (date.length > 10) { + return date.substring(0, 10); + } + return date; + } + // 否则转换为 yyyy-MM-dd 格式 + try { + const d = new Date(date); + if (isNaN(d.getTime())) { + return date; + } + const year = d.getFullYear(); + const month = String(d.getMonth() + 1).padStart(2, '0'); + const day = String(d.getDate()).padStart(2, '0'); + return year + '-' + month + '-' + day; + } catch (e) { + return date; + } + }, + // 计算休假时间止 + calculateEndTime() { + // 如果是男性,则不自动计算结束时间 + if (this.isMale) { + return; + } + if (this.formData.startTime && this.formData.leaveDays) { + const startDate = new Date(this.formData.startTime); + if (!isNaN(startDate.getTime())) { + // 创建新的日期对象,避免修改原始日期 + const endDate = new Date(startDate); + // 添加天数(leaveDays - 1,因为包含开始日期) + endDate.setDate(endDate.getDate() + this.formData.leaveDays - 1); + // 格式化为 yyyy-MM-dd + const year = endDate.getFullYear(); + const month = String(endDate.getMonth() + 1).padStart(2, '0'); + const day = String(endDate.getDate()).padStart(2, '0'); + // 使用字符串拼接代替模板字符串,避免与Beetl冲突 + this.$set(this.formData, 'endTime', year + '-' + month + '-' + day); + } + } + }, // 保存 onSave() { this.$confirm("您确定保存吗?", "提示", { @@ -301,9 +384,27 @@ layout("/layouts/platform.html"){ birthday: birthday, mobile:mobile } + console.log('FormData birthday:', this.formData.birthday); + // 根据性别设置默认值 + if (this.isMale) { + // 男性默认设置 + this.$set(this.formData, 'loverSex', '女性'); + this.$set(this.formData, 'withLeave', 15); + this.$set(this.formData, 'parentalLeave', 10); + // 男性默认产假和延长假为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 + this.$set(this.formData, 'withLeave', 0); + this.$set(this.formData, 'parentalLeave', 0); + } } - } }, created() { diff --git a/src/main/resources/views/platform/zhgh/staffbenefit/maternityLeave/common/info.js b/src/main/resources/views/platform/zhgh/staffbenefit/maternityLeave/common/info.js index 25ba9588..aa175adf 100644 --- a/src/main/resources/views/platform/zhgh/staffbenefit/maternityLeave/common/info.js +++ b/src/main/resources/views/platform/zhgh/staffbenefit/maternityLeave/common/info.js @@ -10,15 +10,13 @@ const maternityLeaveInfo = { {{viewData.userName}} {{viewData.sex}} {{viewData.nation}} - {{viewData.birthday}} - {{viewData.unitName}} + {{formatDate(viewData.birthday)}} {{viewData.unitName}} {{viewData.mobile}} {{viewData.loverName}} {{viewData.loverSex}} {{viewData.loverNation}} - {{viewData.loverBirthday}} - {{viewData.loverUnitName}} + {{formatDate(viewData.loverBirthday)}} {{viewData.loverUnitName}} @@ -43,10 +41,10 @@ const maternityLeaveInfo = { {{viewData.winterLeave}} {{viewData.summerLeave}} {{viewData.leaveDays}} - - {{viewData.startTime}} - {{viewData.endTime}} - {{viewData.childrenBirthday}} + + {{formatDate(viewData.startTime)}} + {{formatDate(viewData.endTime)}} + {{formatDate(viewData.childrenBirthday)}} @@ -69,6 +70,10 @@ layout("/layouts/platform.html"){ } , methods: { + // 导出示例 + doExportApply(row){ + this.$downLoad('/platform/maternityLeave/mine/doExportApply?id=' + row.id) + }, onView(row) { this.$refs.guava.view(()=>{ this.$refs.maternityLeaveInfoRef.onOpen(row) diff --git a/src/main/resources/views/platform/zhgh/staffmanage/member/apply/common/commonQuery.js b/src/main/resources/views/platform/zhgh/staffmanage/member/apply/common/commonQuery.js index 3604b8d5..81d51ed0 100644 --- a/src/main/resources/views/platform/zhgh/staffmanage/member/apply/common/commonQuery.js +++ b/src/main/resources/views/platform/zhgh/staffmanage/member/apply/common/commonQuery.js @@ -24,13 +24,16 @@ const COMMON_QUERY = { - + - - + + - + @@ -45,14 +48,19 @@ const COMMON_QUERY = { searchKeyword: '', unionId: '', unitId: '', - userState: '', - personType: '' + userStates: [], + personTypes: [], + preparedBys: [], } } }, methods: { doSearch(){ - this.$emit('search', this.pageForm) + const pageForm = clone(this.pageForm) + pageForm.userStates = JSON.stringify(this.pageForm.userStates) + pageForm.personTypes = JSON.stringify(this.pageForm.personTypes) + pageForm.preparedBys = JSON.stringify(this.pageForm.preparedBys) + this.$emit('search', pageForm) }, async initData(){ if (this.$auth.hasRoleOr(["SYSADMIN", "SCHOOL_UNION_ADMIN"])) { diff --git a/src/main/resources/views/platform/zhgh/staffmanage/member/apply/submit/index.html b/src/main/resources/views/platform/zhgh/staffmanage/member/apply/submit/index.html index 78286e61..ec26b077 100644 --- a/src/main/resources/views/platform/zhgh/staffmanage/member/apply/submit/index.html +++ b/src/main/resources/views/platform/zhgh/staffmanage/member/apply/submit/index.html @@ -19,8 +19,8 @@ layout("/layouts/platform.html"){ - - + + diff --git a/src/main/resources/views/platform/zhgh/staffmanage/member/branch/verification/check/index.html b/src/main/resources/views/platform/zhgh/staffmanage/member/branch/verification/check/index.html index d93cbc50..6ada9754 100644 --- a/src/main/resources/views/platform/zhgh/staffmanage/member/branch/verification/check/index.html +++ b/src/main/resources/views/platform/zhgh/staffmanage/member/branch/verification/check/index.html @@ -43,7 +43,7 @@ layout("/layouts/platform.html"){ - + diff --git a/src/main/resources/views/platform/zhgh/staffmanage/member/change/common/commonQuery.js b/src/main/resources/views/platform/zhgh/staffmanage/member/change/common/commonQuery.js index 77a8f7e6..294c1623 100644 --- a/src/main/resources/views/platform/zhgh/staffmanage/member/change/common/commonQuery.js +++ b/src/main/resources/views/platform/zhgh/staffmanage/member/change/common/commonQuery.js @@ -19,20 +19,16 @@ const COMMON_QUERY = { - + - + - - - - + `, @@ -45,14 +41,19 @@ const COMMON_QUERY = { searchKeyword: '', unionId: '', unitId: '', - userState: '', - personType: '' + userStates: [], + personTypes: [], + preparedBys: [], } } }, methods: { doSearch(){ - this.$emit('search', this.pageForm) + const pageForm = clone(this.pageForm) + pageForm.userStates = JSON.stringify(this.pageForm.userStates) + pageForm.personTypes = JSON.stringify(this.pageForm.personTypes) + pageForm.preparedBys = JSON.stringify(this.pageForm.preparedBys) + this.$emit('search', pageForm) }, async initData(){ if (this.$auth.hasRoleOr("SYSADMIN, SCHOOL_UNION_ADMIN, SCHOOL_UNION_MEMBER_ADMIN")) { diff --git a/src/main/resources/views/platform/zhgh/staffmanage/member/change/common/memberChange.js b/src/main/resources/views/platform/zhgh/staffmanage/member/change/common/memberChange.js index b5a2e032..67bc171f 100644 --- a/src/main/resources/views/platform/zhgh/staffmanage/member/change/common/memberChange.js +++ b/src/main/resources/views/platform/zhgh/staffmanage/member/change/common/memberChange.js @@ -18,8 +18,8 @@ const MEMBER_CHANGE = { - - + + diff --git a/src/main/resources/views/platform/zhgh/staffmanage/member/change/submit/form.html b/src/main/resources/views/platform/zhgh/staffmanage/member/change/submit/form.html index 4c09a244..dc7ebebc 100644 --- a/src/main/resources/views/platform/zhgh/staffmanage/member/change/submit/form.html +++ b/src/main/resources/views/platform/zhgh/staffmanage/member/change/submit/form.html @@ -14,8 +14,8 @@ - - + + diff --git a/src/main/resources/views/platform/zhgh/staffmanage/member/change/submit/index.html b/src/main/resources/views/platform/zhgh/staffmanage/member/change/submit/index.html index 383abb8e..21a74401 100644 --- a/src/main/resources/views/platform/zhgh/staffmanage/member/change/submit/index.html +++ b/src/main/resources/views/platform/zhgh/staffmanage/member/change/submit/index.html @@ -19,8 +19,8 @@ layout("/layouts/platform.html"){ - - + + diff --git a/src/main/resources/views/platform/zhgh/staffmanage/member/school/verification/check/schoolViewAndHandle.js b/src/main/resources/views/platform/zhgh/staffmanage/member/school/verification/check/schoolViewAndHandle.js index e866f0ae..4e5e6b3c 100644 --- a/src/main/resources/views/platform/zhgh/staffmanage/member/school/verification/check/schoolViewAndHandle.js +++ b/src/main/resources/views/platform/zhgh/staffmanage/member/school/verification/check/schoolViewAndHandle.js @@ -21,7 +21,7 @@ const SCHOOL_VIEW_AND_HANDLE = { + code="USER_PREPARED_BY_TYPE"> + code="USER_PREPARED_BY_TYPE"> + code="USER_PREPARED_BY_TYPE"> + code="USER_PREPARED_BY_TYPE"> + code="USER_PREPARED_BY_TYPE"> + v-if="isMale" required> + v-if="isMale" required> + v-if="isFemale" required> + v-if="isFemale" required> + v-if="isFemale" required> + v-if="isFemale" required> 10) { + return date.substring(0, 10); + } + return date; + } + // 否则转换为 yyyy-MM-dd 格式 + try { + const d = new Date(date); + if (isNaN(d.getTime())) { + return date; + } + const year = d.getFullYear(); + const month = String(d.getMonth() + 1).padStart(2, '0'); + const day = String(d.getDate()).padStart(2, '0'); + return year + '-' + month + '-' + day; + } catch (e) { + return date; + } + }, + // 计算休假时间止 + calculateEndTime() { + // 如果是男性,则不自动计算结束时间 + if (this.isMale) { + return; + } + if (this.formData.startTime && this.formData.leaveDays) { + const startDate = new Date(this.formData.startTime); + if (!isNaN(startDate.getTime())) { + // 创建新的日期对象,避免修改原始日期 + const endDate = new Date(startDate); + // 添加天数(leaveDays - 1,因为包含开始日期) + endDate.setDate(endDate.getDate() + this.formData.leaveDays - 1); + // 格式化为 yyyy-MM-dd + const year = endDate.getFullYear(); + const month = String(endDate.getMonth() + 1).padStart(2, '0'); + const day = String(endDate.getDate()).padStart(2, '0'); + this.$set(this.formData, 'endTime', year + '-' + month + '-' + day); + } + } + }, async onSave() { // 保存时不需要验证,直接提交数据 this.$axios.post("/platform/maternityLeave/apply/save", {data: JSON.stringify(this.formData)}) @@ -298,7 +380,7 @@ layout("/layouts/platform_h5.html"){ } } - // 所人性别都需要填写的字段 + // 所有人需要填写的字段 if (!this.formData.winterLeave && this.formData.winterLeave !== 0) { errors.push('请输入寒假天数'); } @@ -373,26 +455,26 @@ layout("/layouts/platform_h5.html"){ }); }, - // 出生日期确认事件 + // 出生日期确认事件 - 格式化为 yyyy-MM-dd onLoverBirthdayConfirm(value) { - this.$set(this.formData, "loverBirthday", this.$moment(value).format("YYYY-MM-DD")); + this.$set(this.formData, "loverBirthday", this.formatDate(value)); this.showLoverBirthdayPicker = false; }, - // 休假开始时间确认事件 + // 休假开始时间确认事件 - 格式化为 yyyy-MM-dd onStartTimeConfirm(value) { - this.$set(this.formData, "startTime", this.$moment(value).format("YYYY-MM-DD")); + this.$set(this.formData, "startTime", this.formatDate(value)); this.showStartTimePicker = false; }, - // 休假结束时间确认事件 + // 休假结束时间确认事件 - 格式化为 yyyy-MM-dd onEndTimeConfirm(value) { - this.$set(this.formData, "endTime", this.$moment(value).format("YYYY-MM-DD")); + this.$set(this.formData, "endTime", this.formatDate(value)); this.showEndTimePicker = false; }, - // 子女出生日期确认事件 + // 子女出生日期确认事件 - 格式化为 yyyy-MM-dd onChildrenBirthdayConfirm(value) { - this.$set(this.formData, "childrenBirthday", this.$moment(value).format("YYYY-MM-DD")); + this.$set(this.formData, "childrenBirthday", this.formatDate(value)); this.showChildrenBirthdayPicker = false; }, @@ -435,6 +517,31 @@ layout("/layouts/platform_h5.html"){ this.$set(this.formData, "loverNation", matched.value) } } + + // 格式化所有日期字段,确保不包含时分秒 + const dateFields = ['birthday', 'loverBirthday', 'startTime', 'endTime', 'childrenBirthday']; + dateFields.forEach(field => { + if (this.formData[field]) { + this.$set(this.formData, field, this.formatDate(this.formData[field])); + } + }); + + // 根据性别设置默认值 + if (this.isMale) { + // 男性默认设置 + if (!this.formData.withLeave) this.$set(this.formData, 'withLeave', 15); + if (!this.formData.parentalLeave) this.$set(this.formData, 'parentalLeave', 10); + // 男性默认产假和延长假为0 + if (!this.formData.maternityLeave) this.$set(this.formData, 'maternityLeave', 0); + if (!this.formData.extendLeave) this.$set(this.formData, 'extendLeave', 0); + } else if (this.isFemale) { + // 女性默认设置 + if (!this.formData.maternityLeave) this.$set(this.formData, 'maternityLeave', 98); + if (!this.formData.extendLeave) this.$set(this.formData, 'extendLeave', 60); + // 女性默认陪产假和育儿假为0 + if (!this.formData.withLeave) this.$set(this.formData, 'withLeave', 0); + if (!this.formData.parentalLeave) this.$set(this.formData, 'parentalLeave', 0); + } } }) } else { @@ -448,8 +555,27 @@ layout("/layouts/platform_h5.html"){ this.$set(this.formData, "unionName", user.union.name) this.$set(this.formData, "sex", user.sex) this.$set(this.formData, "nation", user.nation) - this.$set(this.formData, "birthday", user.birthday) + this.$set(this.formData, "birthday", this.formatDate(user.birthday)) // 格式化日期 this.$set(this.formData, "mobile", user.mobile) + + // 根据性别设置默认值 + if (this.isMale) { + // 男性默认设置 + this.$set(this.formData, 'loverSex', '女性'); + this.$set(this.formData, 'withLeave', 15); + this.$set(this.formData, 'parentalLeave', 10); + // 男性默认产假和延长假为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 + this.$set(this.formData, 'withLeave', 0); + this.$set(this.formData, 'parentalLeave', 0); + } } } }, diff --git a/src/main/resources/views/platform/zhghh5/staffbenefit/maternityLeave/common/info.js b/src/main/resources/views/platform/zhghh5/staffbenefit/maternityLeave/common/info.js index 72dc1276..f3b21b55 100644 --- a/src/main/resources/views/platform/zhghh5/staffbenefit/maternityLeave/common/info.js +++ b/src/main/resources/views/platform/zhghh5/staffbenefit/maternityLeave/common/info.js @@ -3,17 +3,17 @@ const MATERNITY_LEAVE_INFO = { /*language=HTML*/`
- + {{ viewData.userName }} {{ viewData.sex }} {{ viewData.nation }} - {{ viewData.birthday }} + {{ formatDate(viewData.birthday) }} {{ viewData.unitName }} {{ viewData.mobile }} {{ viewData.loverName }} {{ viewData.loverSex }} {{ viewData.loverNation }} - {{ viewData.loverBirthday }} + {{ formatDate(viewData.loverBirthday) }} {{ viewData.loverUnitName }} @@ -27,11 +27,12 @@ const MATERNITY_LEAVE_INFO = { {{ viewData.winterLeave }} {{ viewData.summerLeave }} {{ viewData.leaveDays }} - {{ viewData.startTime }} - {{ viewData.endTime }} - {{ viewData.childrenBirthday }} + {{ formatDate(viewData.startTime) }} + {{ formatDate(viewData.endTime) }} + {{ formatDate(viewData.childrenBirthday) }} +