From ca04b4338539fda5fd91a34502d1d2664a9e906e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=A3=E4=BA=9B=E8=8A=B1=E5=84=BF?= <1156921458@qq.com> Date: Fri, 20 Jun 2025 14:48:06 +0800 Subject: [PATCH] .. --- .../app/base/constant/RedisConstant.java | 6 +- .../sys/controller/SysLoginController.java | 41 +++- .../sys/services/impl/SysUserServiceImpl.java | 31 ++- .../apply/MemberApplyCommonController.java | 4 +- .../info/MemberInfoGroupController.java | 7 +- .../MemberComprehensiveController.java | 9 +- .../service/impl/MemberInfoServiceImpl.java | 3 +- .../impl/MemberStatisticsServiceImpl.java | 1 - .../WelfareProjectMangeController.java | 2 +- .../WelfareSelectionSituationController.java | 34 +++ .../zhgh/welfare/model/WelfareProject.java | 6 +- .../WelfareSelectionSituationServiceImpl.java | 15 ++ .../components/plugins/sysDict/DictSelect.vue | 2 +- .../member/common/manage/memberManageTable.js | 74 ++++--- .../staffmanage/member/info/group/index.html | 1 - .../statistics/comprehensive/index.html | 2 - .../zhgh/welfare/select/optionSelect.js | 198 +++++++++++------- .../welfare/selectionSituation/index.html | 24 ++- .../platform/zhghh5/welfare/select/index.html | 13 +- 19 files changed, 315 insertions(+), 158 deletions(-) diff --git a/src/main/java/com/budwk/app/base/constant/RedisConstant.java b/src/main/java/com/budwk/app/base/constant/RedisConstant.java index 55b9c79..e0d67dc 100644 --- a/src/main/java/com/budwk/app/base/constant/RedisConstant.java +++ b/src/main/java/com/budwk/app/base/constant/RedisConstant.java @@ -30,7 +30,6 @@ public class RedisConstant { public final static String REDIS_KEY_API_SIGN_OPEN_NONCE = PLATFORM_REDIS_PREFIX + "api:sign:open:nonce:"; - /** * Token 缓存前缀 */ @@ -55,4 +54,9 @@ public class RedisConstant { * 签名前缀 */ public static final String SIGNATURE_PREFIX = PLATFORM_REDIS_PREFIX + "sys:signature:"; + + /** + * 用户登录锁前缀 + */ + public static final String USER_LOGIN_LOCK_PREFIX = PLATFORM_REDIS_PREFIX + "user:login:lock:"; } diff --git a/src/main/java/com/budwk/app/sys/controller/SysLoginController.java b/src/main/java/com/budwk/app/sys/controller/SysLoginController.java index 929333f..f1b63ab 100644 --- a/src/main/java/com/budwk/app/sys/controller/SysLoginController.java +++ b/src/main/java/com/budwk/app/sys/controller/SysLoginController.java @@ -1,6 +1,7 @@ package com.budwk.app.sys.controller; import cn.dev33.satoken.stp.StpUtil; +import cn.hutool.core.convert.Convert; import cn.hutool.core.util.StrUtil; import cn.hutool.http.HttpUtil; import cn.hutool.json.JSONObject; @@ -83,24 +84,43 @@ public class SysLoginController { @At("/doLogin") @Ok("json") @ApiOperation("用户本地账号密码登录") - public Object doLogin(@Param("username") String username, - @Param("password") String password, - @Param("platformKey") String captchaKey, - @Param("platformCaptcha") String captchaCode, - HttpServletRequest req, HttpServletResponse response, HttpSession session) { + public Object doLogin(@Param("username") String username, @Param("password") String password, @Param("platformKey") String captchaKey, @Param("platformCaptcha") String captchaCode, HttpServletRequest req, HttpServletResponse response, HttpSession session) { + if (StrUtil.isBlank(username)) { + return Result.error("用户名不能为空"); + } + if (StrUtil.isBlank(password)) { + return Result.error("密码不能为空"); + } + + String lockKey = RedisConstant.USER_LOGIN_LOCK_PREFIX + username; + int errCount = Convert.toInt(StrUtil.blankToDefault(redisService.get(lockKey), "0")); + log.info("用户名:" + username + "登录失败次数:" + errCount); + + if (errCount > 5) { + redisService.setex(lockKey, 5 * 60, String.valueOf(errCount + 1)); + return Result.error("登录失败次数过多,请5分钟后再试"); + } try { - Sys_user user = null; -// sysUserService.checkLoginname(username); - validateService.checkCode(captchaKey, captchaCode); - user = sysUserService.loginByPassword(username, password); + // 验证码校验 + try { + validateService.checkCode(captchaKey, captchaCode); + } catch (BaseException e) { + return Result.error(e.getMessage()); + } + + // 用户名密码校验 + Sys_user user = sysUserService.loginByPassword(username, password); if (user == null) { throw new BaseException("用户登录失败"); } - //前端去跳转地址 + + // 成功登录 sysUserService.loginPlus(user, LoginType.PC_LOCAL, req); return Result.success("login.success"); } catch (Exception e) { log.error(e.getMessage(), e); + redisService.set(lockKey, Convert.toStr(errCount + 1)); + String message = e.getMessage(); return Result.error(e.getMessage()); } } @@ -116,6 +136,7 @@ public class SysLoginController { String loginName = assertion.getPrincipal().getName(); sysUserService.checkThirdPlatformLoginName(loginName); Sys_user sysUser = sysUserService.loginByLoginName(loginName); + return ">>:" + sysUserService.loginPlus(sysUser, LoginType.CAS, request); } diff --git a/src/main/java/com/budwk/app/sys/services/impl/SysUserServiceImpl.java b/src/main/java/com/budwk/app/sys/services/impl/SysUserServiceImpl.java index 99914d4..63474c7 100644 --- a/src/main/java/com/budwk/app/sys/services/impl/SysUserServiceImpl.java +++ b/src/main/java/com/budwk/app/sys/services/impl/SysUserServiceImpl.java @@ -24,6 +24,7 @@ import org.nutz.dao.Cnd; import org.nutz.dao.Dao; import org.nutz.dao.Sqls; import org.nutz.dao.sql.Sql; +import org.nutz.integration.jedis.RedisService; import org.nutz.ioc.aop.Aop; import org.nutz.ioc.loader.annotation.Inject; import org.nutz.ioc.loader.annotation.IocBean; @@ -57,6 +58,8 @@ public class SysUserServiceImpl extends BaseServiceImpl implements Sys private SysRoleService sysRoleService; @Inject private SLogService sLogService; + @Inject + private RedisService redisService; @Override @CacheResult(cacheKey = "${userId}_getPermissionList") @@ -91,8 +94,7 @@ public class SysUserServiceImpl extends BaseServiceImpl implements Sys dao().fetchLinks(user, "roles"); List roleNameList = new ArrayList(); for (Sys_role role : user.getRoles()) { - if (!role.isDisabled()) - roleNameList.add(role.getCode()); + if (!role.isDisabled()) roleNameList.add(role.getCode()); } return roleNameList; } @@ -156,8 +158,7 @@ public class SysUserServiceImpl extends BaseServiceImpl implements Sys */ // @CacheResult(cacheKey = "${userId}_getMenus") public List getMenus(String userId) { - Sql sql = Sqls.create("select distinct a.* from sys_menu a,sys_role_menu b where a.id=b.menuId and " + - " b.roleId in(select c.roleId from sys_user_role c,sys_role d where c.roleId=d.id and c.userId=@userId and d.disabled=@f) and a.disabled=@f and a.showit=@t and a.type='menu' order by a.location ASC,a.path asc"); + Sql sql = Sqls.create("select distinct a.* from sys_menu a,sys_role_menu b where a.id=b.menuId and " + " b.roleId in(select c.roleId from sys_user_role c,sys_role d where c.roleId=d.id and c.userId=@userId and d.disabled=@f) and a.disabled=@f and a.showit=@t and a.type='menu' order by a.location ASC,a.path asc"); sql.params().set("userId", userId); sql.params().set("f", false); sql.params().set("t", true); @@ -172,8 +173,7 @@ public class SysUserServiceImpl extends BaseServiceImpl implements Sys */ // @CacheResult(cacheKey = "${userId}_getMenusAndButtons") public List getMenusAndButtons(String userId) { - Sql sql = Sqls.create("select distinct a.* from sys_menu a,sys_role_menu b where a.id=b.menuId and " + - " b.roleId in(select c.roleId from sys_user_role c,sys_role d where c.roleId=d.id and c.userId=@userId and d.disabled=@f) and a.disabled=@f order by a.location ASC,a.path asc"); + Sql sql = Sqls.create("select distinct a.* from sys_menu a,sys_role_menu b where a.id=b.menuId and " + " b.roleId in(select c.roleId from sys_user_role c,sys_role d where c.roleId=d.id and c.userId=@userId and d.disabled=@f) and a.disabled=@f order by a.location ASC,a.path asc"); sql.params().set("userId", userId); sql.params().set("f", false); return sysMenuService.listEntity(sql); @@ -192,8 +192,7 @@ public class SysUserServiceImpl extends BaseServiceImpl implements Sys */ @CacheResult(cacheKey = "${userId}_getDatas") public List getDatas(String userId) { - Sql sql = Sqls.create("select distinct a.* from sys_menu a,sys_role_menu b where a.id=b.menuId and " + - " b.roleId in(select c.roleId from sys_user_role c,sys_role d where c.roleId=d.id and c.userId=@userId and d.disabled=@f) and a.disabled=@f and a.type='data' order by a.location ASC,a.path asc"); + Sql sql = Sqls.create("select distinct a.* from sys_menu a,sys_role_menu b where a.id=b.menuId and " + " b.roleId in(select c.roleId from sys_user_role c,sys_role d where c.roleId=d.id and c.userId=@userId and d.disabled=@f) and a.disabled=@f and a.type='data' order by a.location ASC,a.path asc"); sql.params().set("userId", userId); sql.params().set("f", false); return sysMenuService.listEntity(sql); @@ -230,8 +229,7 @@ public class SysUserServiceImpl extends BaseServiceImpl implements Sys */ @CacheResult(cacheKey = "${userId}_${pid}_getRoleMenus") public List getRoleMenus(String userId, String pid) { - Sql sql = Sqls.create("select distinct a.* from sys_menu a,sys_role_menu b where a.id=b.menuId and " + - "$m and b.roleId in(select c.roleId from sys_user_role c,sys_role d where c.roleId=d.id and c.userId=@userId and d.disabled=@f) and a.disabled=@f order by a.location ASC,a.path asc"); + Sql sql = Sqls.create("select distinct a.* from sys_menu a,sys_role_menu b where a.id=b.menuId and " + "$m and b.roleId in(select c.roleId from sys_user_role c,sys_role d where c.roleId=d.id and c.userId=@userId and d.disabled=@f) and a.disabled=@f order by a.location ASC,a.path asc"); sql.params().set("userId", userId); sql.params().set("f", false); if (Strings.isNotBlank(pid)) { @@ -250,8 +248,7 @@ public class SysUserServiceImpl extends BaseServiceImpl implements Sys */ @CacheResult(cacheKey = "${userId}_${pid}_hasChildren") public boolean hasChildren(String userId, String pid) { - Sql sql = Sqls.create("select count(*) from sys_menu a,sys_role_menu b where a.id=b.menuId and " + - "$m and b.roleId in(select c.roleId from sys_user_role c,sys_role d where c.roleId=d.id and c.userId=@userId and d.disabled=@f) and a.disabled=@f order by a.location ASC,a.path asc"); + Sql sql = Sqls.create("select count(*) from sys_menu a,sys_role_menu b where a.id=b.menuId and " + "$m and b.roleId in(select c.roleId from sys_user_role c,sys_role d where c.roleId=d.id and c.userId=@userId and d.disabled=@f) and a.disabled=@f order by a.location ASC,a.path asc"); sql.params().set("userId", userId); sql.params().set("f", false); if (Strings.isNotBlank(pid)) { @@ -390,12 +387,7 @@ public class SysUserServiceImpl extends BaseServiceImpl implements Sys StpUtil.login(user.getId()); StpUtil.checkLogin(); - StpUtil.getSession(true) - .set("loginname", Strings.sNull(user.getLoginname())) - .set("username", Strings.sNull(user.getUsername())) - .set("unitId", Strings.sNull(user.getUnitId())) - .set("unitPath", Strings.sNull(user.getUnitPath())) - .set("unionId", ObjectUtil.isEmpty(user.getUnion()) ? "" : user.getUnion().getId()); + StpUtil.getSession(true).set("loginname", Strings.sNull(user.getLoginname())).set("username", Strings.sNull(user.getUsername())).set("unitId", Strings.sNull(user.getUnitId())).set("unitPath", Strings.sNull(user.getUnitPath())).set("unionId", ObjectUtil.isEmpty(user.getUnion()) ? "" : user.getUnion().getId()); Sys_log sysLog = new Sys_log(); sysLog.setType("info"); sysLog.setTag("用户登陆"); @@ -410,6 +402,9 @@ public class SysUserServiceImpl extends BaseServiceImpl implements Sys sysLog.setLoginname(user.getLoginname()); sLogService.async(sysLog); + // 清除登录锁 + redisService.del(RedisConstant.USER_LOGIN_LOCK_PREFIX + user.getLoginname()); + // 微信登录 if (StrUtil.isNotBlank(wxOpenId)) { dao().update(Sys_user.class, Chain.make("wxOpenId", wxOpenId), Cnd.where("id", "=", user.getId())); diff --git a/src/main/java/com/budwk/app/zhgh/staffmanage/member/controller/apply/MemberApplyCommonController.java b/src/main/java/com/budwk/app/zhgh/staffmanage/member/controller/apply/MemberApplyCommonController.java index e770a9d..af2fc06 100644 --- a/src/main/java/com/budwk/app/zhgh/staffmanage/member/controller/apply/MemberApplyCommonController.java +++ b/src/main/java/com/budwk/app/zhgh/staffmanage/member/controller/apply/MemberApplyCommonController.java @@ -41,14 +41,14 @@ public class MemberApplyCommonController { // 分会主席只能查看本分会用户或未分配分会的用户 if (AuthUtil.hasRole(RoleConstant.BRANCH_UNION_CHAIRMAN.name()) && (user.getUnionId().equals(SecurityUtil.getUnionId()) || StrUtil.isBlank(user.getUnionId()))) { - user.setIdCard(DesensitizedUtil.idCardNum(user.getIdCard(), 7, 4)); + user.setIdCard(DesensitizedUtil.idCardNum(user.getIdCard(), 3, 4)); user.setMobile(DesensitizedUtil.mobilePhone(user.getMobile())); return Result.success(user); } // 分工会操作员同主席权限一致 if (AuthUtil.hasRole(RoleConstant.BRANCH_UNION_OPERATOR.name()) && (user.getUnionId().equals(SecurityUtil.getUnionId()) || StrUtil.isBlank(user.getUnionId()))) { - user.setIdCard(DesensitizedUtil.idCardNum(user.getIdCard(), 7, 4)); + user.setIdCard(DesensitizedUtil.idCardNum(user.getIdCard(), 3, 4)); user.setMobile(DesensitizedUtil.mobilePhone(user.getMobile())); return Result.success(user); } diff --git a/src/main/java/com/budwk/app/zhgh/staffmanage/member/controller/info/MemberInfoGroupController.java b/src/main/java/com/budwk/app/zhgh/staffmanage/member/controller/info/MemberInfoGroupController.java index 7dde261..ae4ca34 100644 --- a/src/main/java/com/budwk/app/zhgh/staffmanage/member/controller/info/MemberInfoGroupController.java +++ b/src/main/java/com/budwk/app/zhgh/staffmanage/member/controller/info/MemberInfoGroupController.java @@ -1,6 +1,7 @@ package com.budwk.app.zhgh.staffmanage.member.controller.info; import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.hutool.core.util.DesensitizedUtil; import com.alibaba.excel.EasyExcel; import com.budwk.app.base.annotation.SLog; import com.budwk.app.base.page.Pagination; @@ -29,6 +30,7 @@ import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; import java.net.URLEncoder; import java.util.ArrayList; +import java.util.List; /** * @version 1.0 @@ -58,7 +60,10 @@ public class MemberInfoGroupController { @Ok("json:{dateFormat:'yyyy-MM-dd'}") public Result pageData(@Valid @Param("pageForm") MemberInfoPageForm pageForm) { Sql sql = memberInfoService.getSql(pageForm); - Pagination pagination = memberInfoService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); + Pagination pagination = memberInfoService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); + for (NutMap row : pagination.getList()) { + row.put("mobile",DesensitizedUtil.mobilePhone(row.getString("mobile"))); + } return Result.success(pagination); } diff --git a/src/main/java/com/budwk/app/zhgh/staffmanage/member/controller/statistics/MemberComprehensiveController.java b/src/main/java/com/budwk/app/zhgh/staffmanage/member/controller/statistics/MemberComprehensiveController.java index 3811c98..7d08614 100644 --- a/src/main/java/com/budwk/app/zhgh/staffmanage/member/controller/statistics/MemberComprehensiveController.java +++ b/src/main/java/com/budwk/app/zhgh/staffmanage/member/controller/statistics/MemberComprehensiveController.java @@ -1,6 +1,7 @@ package com.budwk.app.zhgh.staffmanage.member.controller.statistics; import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.hutool.core.util.DesensitizedUtil; import com.budwk.app.base.page.Pagination; import com.budwk.app.base.result.Result; import com.budwk.app.base.utils.CommonDownloadUtil; @@ -46,7 +47,10 @@ public class MemberComprehensiveController { @SaCheckPermission("member.statistics.comprehensive") public Result pageData(MemberStatisticsPageForm pageForm) { Sql sql = memberStatisticsService.getComprehensiveSql(pageForm); - Pagination pagination = memberStatisticsService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); + Pagination pagination = memberStatisticsService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); + for (NutMap row : pagination.getList()) { + row.put("mobile", DesensitizedUtil.mobilePhone(row.getString("mobile"))); + } return Result.success(pagination); } @@ -57,6 +61,9 @@ public class MemberComprehensiveController { public void doExport(MemberStatisticsPageForm pageForm, HttpServletResponse response){ Sql sql = memberStatisticsService.getComprehensiveSql(pageForm); List list = memberStatisticsService.listMap(sql); + for (NutMap row : list) { + row.put("mobile", DesensitizedUtil.mobilePhone(row.getString("mobile"))); + } try { Workbook workbook = memberInfoService.setHistoryExcelData(list); CommonDownloadUtil.download("会员综合统计表.xlsx", workbook, response); diff --git a/src/main/java/com/budwk/app/zhgh/staffmanage/member/service/impl/MemberInfoServiceImpl.java b/src/main/java/com/budwk/app/zhgh/staffmanage/member/service/impl/MemberInfoServiceImpl.java index 4598c24..8c5a100 100644 --- a/src/main/java/com/budwk/app/zhgh/staffmanage/member/service/impl/MemberInfoServiceImpl.java +++ b/src/main/java/com/budwk/app/zhgh/staffmanage/member/service/impl/MemberInfoServiceImpl.java @@ -70,7 +70,6 @@ public class MemberInfoServiceImpl extends BaseServiceImpl implements sex, birthday, mobile, - idCard, personType, userState, preparedBy, @@ -236,7 +235,7 @@ public class MemberInfoServiceImpl extends BaseServiceImpl implements exportEntities.add(new ExcelExportEntity("姓名", "username", 20)); exportEntities.add(new ExcelExportEntity("性别", "sex", 20)); exportEntities.add(new ExcelExportEntity("联系电话", "mobile", 20)); - exportEntities.add(new ExcelExportEntity("身份证号", "idCard", 30)); +// exportEntities.add(new ExcelExportEntity("身份证号", "idCard", 30)); exportEntities.add(new ExcelExportEntity("在职状态", "userState", 20)); exportEntities.add(new ExcelExportEntity("聘用方式", "preparedBy", 20)); exportEntities.add(new ExcelExportEntity("人员类型", "personType", 20)); diff --git a/src/main/java/com/budwk/app/zhgh/staffmanage/member/service/impl/MemberStatisticsServiceImpl.java b/src/main/java/com/budwk/app/zhgh/staffmanage/member/service/impl/MemberStatisticsServiceImpl.java index 175532e..9b355e5 100644 --- a/src/main/java/com/budwk/app/zhgh/staffmanage/member/service/impl/MemberStatisticsServiceImpl.java +++ b/src/main/java/com/budwk/app/zhgh/staffmanage/member/service/impl/MemberStatisticsServiceImpl.java @@ -127,7 +127,6 @@ public class MemberStatisticsServiceImpl extends BaseServiceImpl imple u.nativePlace, u.nationality, u.idCardType, - u.idCard, u.mobile, u.education, u.academicDegree, diff --git a/src/main/java/com/budwk/app/zhgh/welfare/controller/WelfareProjectMangeController.java b/src/main/java/com/budwk/app/zhgh/welfare/controller/WelfareProjectMangeController.java index aadafb0..2abd9ab 100644 --- a/src/main/java/com/budwk/app/zhgh/welfare/controller/WelfareProjectMangeController.java +++ b/src/main/java/com/budwk/app/zhgh/welfare/controller/WelfareProjectMangeController.java @@ -89,7 +89,7 @@ public class WelfareProjectMangeController { * @return */ @At - @SaCheckPermission("welfare.project.mange") + @SaCheckPermission("welfare") public Result findOne(String id) { return Result.success(projectService.projectInfo(id)); } diff --git a/src/main/java/com/budwk/app/zhgh/welfare/controller/WelfareSelectionSituationController.java b/src/main/java/com/budwk/app/zhgh/welfare/controller/WelfareSelectionSituationController.java index 040ac06..8fcbcb8 100644 --- a/src/main/java/com/budwk/app/zhgh/welfare/controller/WelfareSelectionSituationController.java +++ b/src/main/java/com/budwk/app/zhgh/welfare/controller/WelfareSelectionSituationController.java @@ -2,10 +2,13 @@ package com.budwk.app.zhgh.welfare.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.base.utils.PageUtil; +import com.budwk.app.web.commons.auth.utils.SecurityUtil; +import com.budwk.app.zhgh.welfare.model.WelfareUserSelection; import com.budwk.app.zhgh.welfare.param.WelfareSelectionSituationPageForm; import com.budwk.app.zhgh.welfare.service.WelfareListService; import com.budwk.app.zhgh.welfare.service.WelfareSelectionSituationService; @@ -14,10 +17,12 @@ import com.budwk.app.zhgh.welfare.service.WelfareStatisticsService; 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.mvc.annotation.At; @@ -27,6 +32,8 @@ import org.nutz.mvc.annotation.Param; import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; import java.util.Collections; +import java.util.Date; +import java.util.List; @IocBean @Ok("json:full") @@ -62,6 +69,33 @@ public class WelfareSelectionSituationController { return Result.success(pagination); } + + @At + @SaCheckPermission("welfare.selection.situation") + @ApiOperation("获取某个用户选择信息") + public Result getUserSelection(String projectId, String userId) { + List list = dao.query(WelfareUserSelection.class, Cnd.where(WelfareUserSelection::getWelfareId, "=", projectId).and(WelfareUserSelection::getSelectUserId, "=", userId)); + return Result.success(list); + } + + + @At + @Aop(TransAop.READ_COMMITTED) + @SLog(type = "welfare", tag = "选择福利", msg = "代选福利") + @SaCheckPermission("welfare.selection.situation") + public Result confirmSelect(@Param("selections") WelfareUserSelection[] selections, String projectId, String userId) { + //删除上次选择的 + dao.clear(WelfareUserSelection.class, Cnd.where(WelfareUserSelection::getWelfareId, "=", projectId).and(WelfareUserSelection::getSelectUserId, "=", userId)); + for (WelfareUserSelection welfareUserSelection : selections) { + welfareUserSelection.setWelfareId(projectId); + welfareUserSelection.setSelectUserId(userId); + welfareUserSelection.setSelectTime(new Date()); + } + dao.insert(selections); + return Result.success("选择成功"); + } + + @At @SaCheckPermission("welfare.selection.situation") @Ok("void") diff --git a/src/main/java/com/budwk/app/zhgh/welfare/model/WelfareProject.java b/src/main/java/com/budwk/app/zhgh/welfare/model/WelfareProject.java index 5819ac1..ccb9427 100644 --- a/src/main/java/com/budwk/app/zhgh/welfare/model/WelfareProject.java +++ b/src/main/java/com/budwk/app/zhgh/welfare/model/WelfareProject.java @@ -210,11 +210,11 @@ public class WelfareProject extends BaseModel implements SysHomeConvert { sysHomeActivity.setId(this.getId()); sysHomeActivity.setName(this.getName()); sysHomeActivity.setCover(this.getCover()); - sysHomeActivity.setUrl("/platform/welfare/userChoose"); - sysHomeActivity.setH5Url("/platform/h5/welfare/userChoose/list"); + sysHomeActivity.setUrl("/platform/welfare/userSelect"); + sysHomeActivity.setH5Url("/platform/h5/welfare/userSelect/index?id=" + this.getId()); sysHomeActivity.setStartDate(this.getChoiceTimeStart()); sysHomeActivity.setEndDate(this.getChoiceTimeEnd()); - sysHomeActivity.setAllowUserSql("select userId from welfare_list where projectId = '"+this.getId()+"' and userId = @userId"); + sysHomeActivity.setAllowUserSql("select userId from welfare_list where projectId = '" + this.getId() + "' and userId = @userId"); sysHomeActivity.setEnable(true); sysHomeActivity.setClassPath(this.getClass().getPackageName() + this.getClass().getName()); return sysHomeActivity; diff --git a/src/main/java/com/budwk/app/zhgh/welfare/service/impl/WelfareSelectionSituationServiceImpl.java b/src/main/java/com/budwk/app/zhgh/welfare/service/impl/WelfareSelectionSituationServiceImpl.java index 205d9ac..06eba28 100644 --- a/src/main/java/com/budwk/app/zhgh/welfare/service/impl/WelfareSelectionSituationServiceImpl.java +++ b/src/main/java/com/budwk/app/zhgh/welfare/service/impl/WelfareSelectionSituationServiceImpl.java @@ -5,11 +5,14 @@ import cn.afterturn.easypoi.excel.entity.ExportParams; import cn.afterturn.easypoi.excel.entity.enmus.ExcelType; import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity; import cn.hutool.core.util.StrUtil; +import com.budwk.app.base.constant.RoleConstant; import com.budwk.app.base.page.Pagination; import com.budwk.app.base.result.Result; import com.budwk.app.base.service.impl.BaseServiceImpl; import com.budwk.app.base.utils.CommonDownloadUtil; import com.budwk.app.base.utils.PageUtil; +import com.budwk.app.web.commons.auth.utils.AuthUtil; +import com.budwk.app.web.commons.auth.utils.SecurityUtil; import com.budwk.app.zhgh.welfare.model.WelfareList; import com.budwk.app.zhgh.welfare.param.WelfareSelectionSituationPageForm; import com.budwk.app.zhgh.welfare.service.WelfareSelectionSituationService; @@ -38,6 +41,8 @@ public class WelfareSelectionSituationServiceImpl extends BaseServiceImpl会员 非会员 - - 福利会员: - - 全部 - 福利会员 - 非福利会员 - - + + + + + + + + 人员异动: @@ -25,16 +25,17 @@ const MEMBER_MANAGE_TABLE = { 异动 未异动 - + - + - - + + - - - + - - - - + + + + + + + + + + + + - + @@ -158,7 +160,11 @@ const MEMBER_MANAGE_TABLE = { { prop: "unitName", label: "所属单位", sortable: true } ], changeInfoVisible: false, - userId: '' + userId: "", + pageForm: { + isMember: 1, + changed: 2 + } } }, methods: { @@ -206,11 +212,11 @@ const MEMBER_MANAGE_TABLE = { } else { this.$message.error(res.msg) } - }) + }) }) }, openChange(data) { - this.$emit("change-member", {id: data.id, username: data.username}) + this.$emit("change-member", { id: data.id, username: data.username }) }, openView(id) { this.$emit("view-member", id) @@ -221,7 +227,7 @@ const MEMBER_MANAGE_TABLE = { openUserChangeInfo(row) { this.changeInfoVisible = true this.$nextTick(() => { - this.$refs.memberChangeInfoRef.onOpen(row.id,null) + this.$refs.memberChangeInfoRef.onOpen(row.id, null) }) }, getChangeTypes(changeTypes) { diff --git a/src/main/resources/views/platform/zhgh/staffmanage/member/info/group/index.html b/src/main/resources/views/platform/zhgh/staffmanage/member/info/group/index.html index 69eb98b..0c66f9c 100644 --- a/src/main/resources/views/platform/zhgh/staffmanage/member/info/group/index.html +++ b/src/main/resources/views/platform/zhgh/staffmanage/member/info/group/index.html @@ -208,7 +208,6 @@ layout("/layouts/platform.html"){ { prop: "sex", label: "性别" }, { prop: "birthday", label: "出生年月", sortable: true }, { prop: "mobile", label: "联系电话" }, - { prop: "idCard", label: "身份证号", width: 170 }, { prop: "userState", label: "在职状态", sortable: true }, { prop: "preparedBy", label: "聘用方式", sortable: true }, { prop: "personType", label: "人员类型", sortable: true }, diff --git a/src/main/resources/views/platform/zhgh/staffmanage/member/statistics/comprehensive/index.html b/src/main/resources/views/platform/zhgh/staffmanage/member/statistics/comprehensive/index.html index 10ff109..3dad6da 100644 --- a/src/main/resources/views/platform/zhgh/staffmanage/member/statistics/comprehensive/index.html +++ b/src/main/resources/views/platform/zhgh/staffmanage/member/statistics/comprehensive/index.html @@ -120,8 +120,6 @@ layout("/layouts/platform.html"){ { prop: "sex", label: "性别" }, { prop: "birthday", label: "出生年月", width: 120, sortable: true }, { prop: "mobile", label: "联系电话" }, - { prop: "idCardType", label: "证件类型" }, - { prop: "idCard", label: "证件号码", width: 180 }, { prop: "userState", label: "在职状态", width: 120, sortable: true }, { prop: "personType", label: "教职工类别", width: 120, sortable: true }, { prop: "preparedBy", label: "聘用方式", width: 120, sortable: true }, diff --git a/src/main/resources/views/platform/zhgh/welfare/select/optionSelect.js b/src/main/resources/views/platform/zhgh/welfare/select/optionSelect.js index e96e620..8d086e8 100644 --- a/src/main/resources/views/platform/zhgh/welfare/select/optionSelect.js +++ b/src/main/resources/views/platform/zhgh/welfare/select/optionSelect.js @@ -6,7 +6,7 @@ const optionSelect = { 选择截止时间即将到期,请尽快选择! - +
- +
@@ -37,11 +37,15 @@ const optionSelect = {
选择时间
-
{{ formatTimeRange(projectInfo.choiceTimeStart, projectInfo.choiceTimeEnd) }}
+
{{ formatTimeRange(projectInfo.choiceTimeStart, + projectInfo.choiceTimeEnd) }} +
发放时间
-
{{ formatTimeRange(projectInfo.provideTimeStart, projectInfo.provideTimeEnd) }}
+
{{ formatTimeRange(projectInfo.provideTimeStart, + projectInfo.provideTimeEnd) }} +
发放地点
@@ -49,7 +53,7 @@ const optionSelect = {
- +
@@ -57,40 +61,42 @@ const optionSelect = { 福利选项 共 {{ projectInfo.options.length }} 项
- +
-
- - 已选择 - + + 已选择 + +
- +
{{ option.optionName }}
- +
查看详情
- +
{{ null }}
- +
- @@ -101,12 +107,13 @@ const optionSelect = {
- + - +
- + 联系信息 - @@ -143,14 +150,14 @@ const optionSelect = { - +
已选择项目
-
@@ -167,27 +174,27 @@ const optionSelect = {
- × {{ option.selectNum }}
- +
总数量 {{ totalSelectedCount }} 份
- +
{{ confirmMessage }}
- +
{{ deadlineText }} @@ -200,16 +207,16 @@ const optionSelect = {
`, + store, data() { return { - projectId: null, - projectInfo: {}, - userSelection: [], - welfareProvideMode: [], - welfareSignMode: [], + projectId: null, // 项目ID + userId: null, // 用户id 代选的时候用得到 + projectInfo: {}, // 项目信息 + userSelection: [], // 用户选择的选项 selectedRadioId: "", // 单选模式下选中的选项ID - showConfirmDialog: false, - isSubmitting: false, + showConfirmDialog: false, // 确认弹窗 + isSubmitting: false, // 是否正在提交 hasSubmittedBefore: false, // 是否之前提交过 deadlineTime: null, // 选择截止时间 showOptionDetailDialog: false, // 选项详情弹窗 @@ -219,13 +226,18 @@ const optionSelect = { }, contactRules: { mobile: [ - { required: true, message: '请输入联系电话', trigger: 'blur' }, - { pattern: /^1[3456789]\d{9}$/, message: '请输入正确的手机号码', trigger: 'blur' } + { required: true, message: "请输入联系电话", trigger: "blur" }, + { + pattern: /^1[3456789]\d{9}$/, + message: "请输入正确的手机号码", + trigger: "blur" + } ] } } }, computed: { + // 是否有选择 hasSelection() { if (this.projectInfo.isCheckBox === "radio") { return !!this.selectedRadioId @@ -235,6 +247,7 @@ const optionSelect = { } }, + // 已选择的选项 selectedOptions() { if (this.projectInfo.isCheckBox === "radio") { if (!this.selectedRadioId || !this.projectInfo.options) return [] @@ -245,11 +258,13 @@ const optionSelect = { } }, + // 已选择的数量 totalSelectedCount() { if (!this.projectInfo.options) return 0 return this.projectInfo.options.reduce((sum, option) => sum + (option.selectNum || 0), 0) }, + // 截止时间快了 isDeadlineSoon() { if (!this.projectInfo.choiceTimeEnd) return false @@ -260,6 +275,7 @@ const optionSelect = { return diffHours > 0 && diffHours < 24 }, + // 截止时间提示 deadlineText() { if (!this.deadlineTime) return "" const now = new Date() @@ -279,21 +295,36 @@ const optionSelect = { } }, + // 确认弹窗提示 confirmMessage() { if (this.hasSubmittedBefore) { return "修改后的选择将覆盖之前的选择" } return "请仔细确认您的选择" + }, + + // 是否代选 + isProxySelect() { + return !!this.userId } }, methods: { - onOpen(projectId) { + // 打开选择项目弹窗 userId为null默认则是本人 + onOpen(projectId, userId = null) { this.projectId = projectId + this.userId = userId + + this.selectedRadioId = null + this.contactForm = { + mobile: "" + } + this.getProjectInfo() }, + // 获取项目信息 getProjectInfo() { - this.$axios.post("/platform/welfare/project/mange/findOne", { id: this.projectId }).then((res) => { + this.$axios.post("/platform/welfare/common/projectInfo", { id: this.projectId }).then((res) => { if (res.code === 0) { this.projectInfo = res.data this.deadlineTime = this.projectInfo.choiceTimeEnd @@ -314,17 +345,24 @@ const optionSelect = { // 获取用户选择的数据 getUserSelection() { - this.$axios.post("/platform/welfare/userSelect/getUserSelection", { projectId: this.projectId }).then((resp) => { + let url = "/platform/welfare/userSelect/getUserSelection" + + const formData = { + projectId: this.projectId + } + + if (this.isProxySelect) { + url = "/platform/welfare/selection/situation/getUserSelection" + formData.userId = this.userId + } + + this.$axios.post(url, formData).then((resp) => { if (resp.code === 0) { this.userSelection = resp.data this.hasSubmittedBefore = this.userSelection.length > 0 - // 如果有用户选择数据,从中获取手机号 - if (this.userSelection && this.userSelection.length > 0 && this.userSelection[0].mobile) { - this.contactForm.mobile = this.userSelection[0].mobile - } else if (this.$store.user && this.$store.user.mobile) { - // 如果没有选择过,使用store中的默认手机号 - this.contactForm.mobile = this.$store.user.mobile + if (this.userSelection && this.userSelection.length > 0) { + this.contactForm.mobile = this.userSelection[0]?.mobile } // 设置已选择的选项 @@ -356,11 +394,11 @@ const optionSelect = { // 执行提交 doSubmit() { // 验证手机号 - this.$refs.contactForm.validate(valid => { + this.$refs.contactForm.validate((valid) => { if (!valid) { return } - + if (this.isSubmitting) return this.isSubmitting = true @@ -387,15 +425,23 @@ const optionSelect = { })) } + let url = "/platform/welfare/userSelect/confirmSelect" + const formData = { + projectId: this.projectId, + selections: JSON.stringify(selections) + } + if (this.isProxySelect) { + url = "/platform/welfare/selection/situation/confirmSelect" + formData.userId = this.userId + } + this.$axios - .post("/platform/welfare/userSelect/confirmSelect", { - projectId: this.projectId, - selections: JSON.stringify(selections) - }) + .post(url, formData) .then((res) => { this.isSubmitting = false if (res.code === 0) { + this.showConfirmDialog = false this.$message.success("选择成功") this.$emit("refresh") } else { @@ -516,9 +562,15 @@ const optionSelect = { } @keyframes pulse { - 0% { transform: scale(1); } - 50% { transform: scale(1.01); } - 100% { transform: scale(1); } + 0% { + transform: scale(1); + } + 50% { + transform: scale(1.01); + } + 100% { + transform: scale(1); + } } .welfare-deadline i { @@ -568,7 +620,7 @@ const optionSelect = { left: 0; right: 0; height: 40px; - background: linear-gradient(to top, rgba(255,255,255,1), rgba(255,255,255,0)); + background: linear-gradient(to top, rgba(255, 255, 255, 1), rgba(255, 255, 255, 0)); } .project-cover .el-image { @@ -711,7 +763,7 @@ const optionSelect = { left: 0; right: 0; height: 40px; - background: linear-gradient(to top, rgba(0,0,0,0.2), transparent); + background: linear-gradient(to top, rgba(0, 0, 0, 0.2), transparent); } .option-image .el-image { @@ -826,7 +878,7 @@ const optionSelect = { position: relative; padding-left: 10px; } - + .confirm-section-title::before { content: ''; position: absolute; @@ -842,7 +894,7 @@ const optionSelect = { .confirm-mobile-section { margin-bottom: 20px; } - + .selected-items { background: #f8f9fb; border-radius: 8px; @@ -1046,8 +1098,14 @@ const optionSelect = { /* 动画 */ @keyframes fadeIn { - from { opacity: 0; transform: translateY(10px); } - to { opacity: 1; transform: translateY(0); } + from { + opacity: 0; + transform: translateY(10px); + } + to { + opacity: 1; + transform: translateY(0); + } } .welfare-select-container > * { diff --git a/src/main/resources/views/platform/zhgh/welfare/selectionSituation/index.html b/src/main/resources/views/platform/zhgh/welfare/selectionSituation/index.html index 1b726d9..db5948c 100644 --- a/src/main/resources/views/platform/zhgh/welfare/selectionSituation/index.html +++ b/src/main/resources/views/platform/zhgh/welfare/selectionSituation/index.html @@ -101,19 +101,28 @@ layout("/layouts/platform.html"){ > + + + +