From b87567230f76492a792062b577319113b6359215 Mon Sep 17 00:00:00 2001 From: zhouhefeng Date: Sun, 6 Sep 2026 15:48:25 +0800 Subject: [PATCH] =?UTF-8?q?=E8=81=8C=E5=B7=A5=E7=A6=8F=E5=88=A9=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sys/services/impl/SysFileServiceImpl.java | 5 +- .../controller/WelfareMineController.java | 2 - .../controller/WelfareNoticeController.java | 50 +++++++ .../WelfareUserSelectController.java | 1 - .../zhgh/welfare/model/WelfareProject.java | 8 ++ .../service/WelfareProjectService.java | 16 ++- .../WelfareSelectionSituationService.java | 8 +- .../service/WelfareUserEvaluationService.java | 4 +- .../impl/WelfareProjectServiceImpl.java | 102 ++++++++++++--- .../WelfareSelectionSituationServiceImpl.java | 93 ++++++++++++- .../WelfareUserEvaluationServiceImpl.java | 22 ++-- .../menu/init_recuperation_missing_menu.sql | 123 ++++++++++++++++++ .../zhgh/welfare/projectMange/index.html | 13 ++ .../welfare/projectMange/welfareOption.js | 29 ++--- .../platform/zhgh/welfare/select/index.html | 16 +-- .../zhgh/welfare/select/optionSelect.js | 26 ---- .../welfare/selectionSituation/index.html | 84 +++--------- .../platform/zhghh5/welfare/mine/list.html | 10 +- .../zhghh5/welfare/notice/detail.html | 97 ++++++++++++++ .../platform/zhghh5/welfare/select/index.html | 92 +------------ .../platform/zhghh5/welfare/select/list.html | 4 - 21 files changed, 536 insertions(+), 269 deletions(-) create mode 100644 src/main/java/com/budwk/app/zhgh/welfare/controller/WelfareNoticeController.java create mode 100644 src/main/resources/db/menu/init_recuperation_missing_menu.sql create mode 100644 src/main/resources/views/platform/zhghh5/welfare/notice/detail.html diff --git a/src/main/java/com/budwk/app/sys/services/impl/SysFileServiceImpl.java b/src/main/java/com/budwk/app/sys/services/impl/SysFileServiceImpl.java index 75975ce..95032df 100644 --- a/src/main/java/com/budwk/app/sys/services/impl/SysFileServiceImpl.java +++ b/src/main/java/com/budwk/app/sys/services/impl/SysFileServiceImpl.java @@ -38,6 +38,7 @@ import java.io.File; import java.io.IOException; import java.math.BigDecimal; import java.math.RoundingMode; +import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.StandardOpenOption; import java.util.Base64; @@ -270,10 +271,12 @@ public class SysFileServiceImpl extends BaseServiceImpl implements Sys } } HtmlSaveOptions saveOptions = new HtmlSaveOptions(); + // Aspose输出和字节流读取必须固定使用UTF-8,避免不同服务器的JVM默认编码导致中文乱码。 + saveOptions.setEncoding(StandardCharsets.UTF_8); saveOptions.setExportImagesAsBase64(true); ByteArrayOutputStream bos = new ByteArrayOutputStream(); doc.save(bos, saveOptions); - String htmlContent = Jsoup.parse(bos.toString()).body().html(); + String htmlContent = Jsoup.parse(bos.toString(StandardCharsets.UTF_8)).body().html(); Pattern pattern = Pattern.compile(IMG_BASE64_PATTERN, Pattern.CASE_INSENSITIVE); Matcher matcher = pattern.matcher(htmlContent); diff --git a/src/main/java/com/budwk/app/zhgh/welfare/controller/WelfareMineController.java b/src/main/java/com/budwk/app/zhgh/welfare/controller/WelfareMineController.java index 2a05517..29129a4 100644 --- a/src/main/java/com/budwk/app/zhgh/welfare/controller/WelfareMineController.java +++ b/src/main/java/com/budwk/app/zhgh/welfare/controller/WelfareMineController.java @@ -60,7 +60,6 @@ public class WelfareMineController { END AS isChoose, GROUP_CONCAT(DISTINCT wuso.optionName ,'(',wus.selectNum,'份)') AS gist_list, MAX(wus.selectTime) AS selectTime, - MAX(wus.deliveryDate) AS deliveryDate, wus.receiveAddress, wl.userId FROM @@ -98,7 +97,6 @@ public class WelfareMineController { wpus.receiveAddress, wpso.optionName, wpus.selectNum, - wpus.deliveryDate, wpus.remark, wpus.userSign, wpus.courierNumber, diff --git a/src/main/java/com/budwk/app/zhgh/welfare/controller/WelfareNoticeController.java b/src/main/java/com/budwk/app/zhgh/welfare/controller/WelfareNoticeController.java new file mode 100644 index 0000000..411d28b --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/welfare/controller/WelfareNoticeController.java @@ -0,0 +1,50 @@ +package com.budwk.app.zhgh.welfare.controller; + +import cn.dev33.satoken.annotation.SaCheckLogin; +import cn.hutool.core.util.StrUtil; +import com.budwk.app.base.result.Result; +import com.budwk.app.zhgh.welfare.service.WelfareProjectService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +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 javax.validation.Valid; + +/** + * 福利通知附件查看入口。 + */ +@IocBean +@Ok("json:full") +@At("/platform/welfare/notice") +@Api(tags = "福利通知") +public class WelfareNoticeController { + + @Inject + private WelfareProjectService projectService; + + @At("detail") + @Ok("beetl:/platform/zhghh5/welfare/notice/detail.html") + @SaCheckLogin + @ApiOperation("福利通知附件详情页") + public void detail() { + } + + /** + * 查询福利通知附件详情。 + * + * @param id 福利项目 ID + * @return JSON 结果,data 中包含项目名称、文件名称、下载地址和 PDF 预览地址 + */ + @At("detailData") + @SaCheckLogin + @ApiOperation("查询福利通知附件详情") + public Result detailData(@Valid String id) { + if (StrUtil.isBlank(id)) { + return Result.error("福利项目ID不能为空"); + } + return Result.success(projectService.getNoticeAttachmentInfo(id)); + } +} diff --git a/src/main/java/com/budwk/app/zhgh/welfare/controller/WelfareUserSelectController.java b/src/main/java/com/budwk/app/zhgh/welfare/controller/WelfareUserSelectController.java index 6fa9360..ba314fc 100644 --- a/src/main/java/com/budwk/app/zhgh/welfare/controller/WelfareUserSelectController.java +++ b/src/main/java/com/budwk/app/zhgh/welfare/controller/WelfareUserSelectController.java @@ -57,7 +57,6 @@ public class WelfareUserSelectController { ELSE 0 END AS isChoose, wus.selectTime, - MAX(wus.deliveryDate) AS deliveryDate, MAX(wus.remark) AS remark, GROUP_CONCAT(DISTINCT wuso.optionName ,'(',wus.selectNum,'份)') AS gist_list, wus.receiveAddress 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 793cc9b..b591514 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 @@ -207,6 +207,14 @@ public class WelfareProject extends BaseModel implements SysHomeConvert { @ColDefine(type = ColType.VARCHAR, width = 200) private String cover; + /** + * 福利通知附件下载地址,只允许关联一个 Word 文件。 + */ + @Column + @Comment("福利通知附件") + @ColDefine(type = ColType.VARCHAR, width = 200) + private String noticeAttachment; + @Column @Comment("是否全年生日蛋糕卷") @ColDefine(type = ColType.BOOLEAN) diff --git a/src/main/java/com/budwk/app/zhgh/welfare/service/WelfareProjectService.java b/src/main/java/com/budwk/app/zhgh/welfare/service/WelfareProjectService.java index e68311c..1f1526f 100644 --- a/src/main/java/com/budwk/app/zhgh/welfare/service/WelfareProjectService.java +++ b/src/main/java/com/budwk/app/zhgh/welfare/service/WelfareProjectService.java @@ -3,6 +3,7 @@ package com.budwk.app.zhgh.welfare.service; import com.budwk.app.base.service.BaseService; import com.budwk.app.zhgh.welfare.model.WelfareProject; import com.budwk.app.zhgh.welfare.model.WelfareUserSelection; +import org.nutz.lang.util.NutMap; import java.util.Date; import java.util.List; @@ -25,6 +26,14 @@ public interface WelfareProjectService extends BaseService { */ List listHistoryProject(); + /** + * 查询福利通知详情页需要的项目和附件信息。 + * + * @param projectId 福利项目 ID + * @return 包含 projectName、fileId、fileName、suffix、attachmentUrl 和 previewUrl 的详情数据;未上传附件时文件字段为空 + */ + NutMap getNoticeAttachmentInfo(String projectId); + /** * 校验福利选择是否保留系统默认福利。 * @@ -44,11 +53,10 @@ public interface WelfareProjectService extends BaseService { String validateGroupSelectionQuantity(String projectId, WelfareUserSelection[] selections); /** - * 校验福利选择附加信息。配送时间为必填项,必须按日期粒度不早于本次选择时间; - * 同一次提交的全部福利项必须使用相同配送时间和备注。 + * 校验福利选择附加信息。同一次提交的全部福利项必须使用相同备注,配送时间字段已停用。 * - * @param selections 用户提交的福利选择数组,每项需包含 deliveryDate,可选包含 remark - * @param selectTime 后端生成的本次选择时间,用于防止客户端伪造日期 + * @param selections 用户提交的福利选择数组,每项可包含 remark + * @param selectTime 后端生成的本次选择时间,保留该参数以兼容现有调用接口 * @return 校验通过返回 {@code null},否则返回可直接展示的错误提示 */ String validateSelectionAdditionalInfo(WelfareUserSelection[] selections, Date selectTime); diff --git a/src/main/java/com/budwk/app/zhgh/welfare/service/WelfareSelectionSituationService.java b/src/main/java/com/budwk/app/zhgh/welfare/service/WelfareSelectionSituationService.java index 0820f27..42aabda 100644 --- a/src/main/java/com/budwk/app/zhgh/welfare/service/WelfareSelectionSituationService.java +++ b/src/main/java/com/budwk/app/zhgh/welfare/service/WelfareSelectionSituationService.java @@ -15,11 +15,17 @@ public interface WelfareSelectionSituationService extends BaseService { /** - * 校验当前用户是否已到福利配送日期。只有存在选择记录、全部记录已设置配送日期,且当前日期 - * 不早于配送日期时才允许打开或提交评价。 + * 校验当前用户是否已经选择福利且项目活动已经结束。活动结束时间以福利项目的 + * choiceTimeEnd 为准,PC、移动端与接口提交使用同一规则。 * * @param projectId 福利项目ID * @param userId 当前登录用户ID diff --git a/src/main/java/com/budwk/app/zhgh/welfare/service/impl/WelfareProjectServiceImpl.java b/src/main/java/com/budwk/app/zhgh/welfare/service/impl/WelfareProjectServiceImpl.java index aa6154a..334aea2 100644 --- a/src/main/java/com/budwk/app/zhgh/welfare/service/impl/WelfareProjectServiceImpl.java +++ b/src/main/java/com/budwk/app/zhgh/welfare/service/impl/WelfareProjectServiceImpl.java @@ -4,6 +4,7 @@ import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.StrUtil; import com.budwk.app.base.service.impl.BaseServiceImpl; import com.budwk.app.sys.models.Sys_home_activity; +import com.budwk.app.sys.models.Sys_file; import com.budwk.app.sys.models.Sys_user; import com.budwk.app.zhgh.welfare.model.WelfareList; import com.budwk.app.zhgh.welfare.model.WelfareProject; @@ -79,6 +80,25 @@ public class WelfareProjectServiceImpl extends BaseServiceImpl i return dao().query(WelfareProject.class, Cnd.NEW().desc(WelfareProject::getYear).desc(WelfareProject::getChoiceTimeStart)); } + @Override + public NutMap getNoticeAttachmentInfo(String projectId) { + WelfareProject project = fetch(projectId); + if (project == null) { + throw new IllegalArgumentException("福利项目不存在"); + } + NutMap result = NutMap.NEW().addv("projectName", project.getName()); + if (StrUtil.isBlank(project.getNoticeAttachment())) { + return result; + } + Sys_file noticeFile = resolveNoticeAttachmentFile(project.getNoticeAttachment()); + return result + .addv("fileId", noticeFile.getId()) + .addv("fileName", noticeFile.getName()) + .addv("suffix", noticeFile.getSuffix()) + .addv("attachmentUrl", noticeFile.getDownloadPath()) + .addv("previewUrl", "/platform/sys/file/convertPDF?id=" + noticeFile.getId()); + } + @Override public String validateSystemDefaultOptionSelection(String projectId, WelfareUserSelection[] selections) { List systemDefaultOptions = dao().query(WelfareProjectSubjectOption.class, @@ -182,8 +202,8 @@ public class WelfareProjectServiceImpl extends BaseServiceImpl i } /** - * 校验一次选择提交中的配送日期和备注。日期比较统一截断到当天零点,允许选择当天配送; - * 多项福利的附加信息必须一致,避免同一次选择产生互相冲突的评价开放时间。 + * 校验一次选择提交中的备注。配送时间字段已停用,新提交数据统一清空该字段; + * 多项福利的备注必须一致,避免同一次选择出现互相冲突的附加信息。 * * @param selections 当前提交的福利选择数据 * @param selectTime 后端生成的选择时间 @@ -194,30 +214,23 @@ public class WelfareProjectServiceImpl extends BaseServiceImpl i if (selections == null || selections.length == 0) { return "请至少选择一项福利"; } - Date selectionDate = DateUtil.beginOfDay(selectTime == null ? new Date() : selectTime); - Date submittedDeliveryDate = null; String submittedRemark = null; + boolean firstSelection = true; for (WelfareUserSelection selection : selections) { - if (selection == null || selection.getDeliveryDate() == null) { - return "请选择配送时间"; - } - Date deliveryDate = DateUtil.beginOfDay(selection.getDeliveryDate()); - if (deliveryDate.before(selectionDate)) { - return "配送时间不能早于选择时间"; - } - if (submittedDeliveryDate == null) { - submittedDeliveryDate = deliveryDate; - submittedRemark = StrUtil.trim(selection.getRemark()); - } else if (!submittedDeliveryDate.equals(deliveryDate)) { - return "同一次选择的配送时间必须一致"; - } else if (!Objects.equals(submittedRemark, StrUtil.trim(selection.getRemark()))) { - return "同一次选择的备注必须一致"; + if (selection == null) { + return "福利选择数据不能为空"; } String remark = StrUtil.trim(selection.getRemark()); + if (firstSelection) { + submittedRemark = remark; + firstSelection = false; + } else if (!Objects.equals(submittedRemark, remark)) { + return "同一次选择的备注必须一致"; + } if (remark != null && remark.length() > 200) { return "备注不能超过200字"; } - selection.setDeliveryDate(deliveryDate); + selection.setDeliveryDate(null); selection.setRemark(remark); } return null; @@ -257,6 +270,7 @@ public class WelfareProjectServiceImpl extends BaseServiceImpl i @Override @Aop(TransAop.READ_COMMITTED) public void saveProject(WelfareProject project) { + normalizeNoticeAttachment(project); // 保存前根据福利选项分组去重并校验选择数量范围,防止非法 JSON 配置进入数据库。 normalizeGroupSelectionConfigs(project); // 插入项目 @@ -272,6 +286,7 @@ public class WelfareProjectServiceImpl extends BaseServiceImpl i @Override @Aop(TransAop.READ_COMMITTED) public void updateProject(WelfareProject project) { + normalizeNoticeAttachment(project); // 修改项目时同样归一化分组配置,确保新增、编辑两条保存链路规则一致。 normalizeGroupSelectionConfigs(project); // 更新项目 @@ -325,6 +340,55 @@ public class WelfareProjectServiceImpl extends BaseServiceImpl i dao().clear(Sys_home_activity.class, Cnd.where("id", "=", id)); } + /** + * 校验福利通知附件数量和真实文件类型,并将提交地址归一化为系统文件下载地址。 + * + * @param project 待保存的福利项目,noticeAttachment 应为单个系统文件下载地址 + */ + private void normalizeNoticeAttachment(WelfareProject project) { + String attachment = StrUtil.trim(project.getNoticeAttachment()); + if (StrUtil.isBlank(attachment)) { + project.setNoticeAttachment(null); + return; + } + if (attachment.contains(",")) { + throw new IllegalArgumentException("福利通知附件只能上传一个文件"); + } + Sys_file noticeFile = resolveNoticeAttachmentFile(attachment); + String suffix = StrUtil.blankToDefault(noticeFile.getSuffix(), "").toLowerCase(Locale.ROOT); + if (!"doc".equals(suffix) && !"docx".equals(suffix)) { + throw new IllegalArgumentException("福利通知附件只能上传Word文件"); + } + project.setNoticeAttachment(noticeFile.getDownloadPath()); + } + + /** + * 从系统下载地址解析文件 ID,并确认文件记录真实存在。 + * + * @param attachment 系统文件下载地址,格式为 /platform/sys/file/download?id=文件ID + * @return 对应的系统文件记录 + */ + private Sys_file resolveNoticeAttachmentFile(String attachment) { + int idIndex = attachment.indexOf("id="); + if (idIndex < 0) { + throw new IllegalArgumentException("福利通知附件地址无效"); + } + String fileId = attachment.substring(idIndex + 3); + int parameterIndex = fileId.indexOf('&'); + if (parameterIndex >= 0) { + fileId = fileId.substring(0, parameterIndex); + } + fileId = fileId.trim(); + if (StrUtil.isBlank(fileId)) { + throw new IllegalArgumentException("福利通知附件地址无效"); + } + Sys_file noticeFile = dao().fetch(Sys_file.class, fileId); + if (noticeFile == null) { + throw new IllegalArgumentException("福利通知附件文件不存在,请重新上传"); + } + return noticeFile; + } + /** * 根据福利选项中的非空分组生成最终配置数组,并校验最小、最大选择数量。 * 最大选择数量为 0 时表示不限,不参与最小值与最大值的大小比较。 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 419d599..9338df1 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 @@ -14,6 +14,7 @@ import com.budwk.app.base.exception.BaseException; import com.budwk.app.base.page.Pagination; import com.budwk.app.base.service.impl.BaseServiceImpl; import com.budwk.app.base.sms.SmsService; +import com.budwk.app.web.commons.base.Globals; import com.budwk.app.base.utils.CommonDownloadUtil; import com.budwk.app.base.utils.PageUtil; import com.budwk.app.sys.models.Sys_file; @@ -21,6 +22,7 @@ import com.budwk.app.sys.services.SysFileService; import com.budwk.app.sys.utils.SysFileMinIoUtil; 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.WelfareCourierNumber; import com.budwk.app.zhgh.welfare.model.WelfareList; import com.budwk.app.zhgh.welfare.model.WelfareProject; import com.budwk.app.zhgh.welfare.model.WelfareProjectSubjectOption; @@ -75,7 +77,6 @@ public class WelfareSelectionSituationServiceImpl extends BaseServiceImpl !line.trim().startsWith("查看详情:")) + .collect(Collectors.joining("\n")) + .trim(); + String sendContent = StrUtil.isBlank(messageBody) ? detailLine : messageBody + "\n" + detailLine; + boolean success = smsService.sendMsg("6", loginNames, null, title, sendContent, detailUrl, detailUrl); if (!success) { throw new BaseException("钉钉消息发送失败,请检查消息发送配置或稍后重试"); } @@ -190,12 +200,15 @@ public class WelfareSelectionSituationServiceImpl extends BaseServiceImpl list = listMap(sql); + fillExportCourierNumbers(list, pageForm); + list.forEach(this::fillExportUserSign); // 项目 WelfareProject project = dao().fetch(WelfareProject.class, pageForm.getProjectId()); @@ -263,6 +278,13 @@ public class WelfareSelectionSituationServiceImpl extends BaseServiceImpl rows, WelfareSelectionSituationPageForm pageForm) { + List userIds = rows.stream() + .map(row -> row.getString("userId")) + .filter(StrUtil::isNotBlank) + .distinct() + .toList(); + if (userIds.isEmpty()) { + return; + } + + Cnd courierCondition = Cnd.where(WelfareCourierNumber::getWelfareId, "=", pageForm.getProjectId()) + .and(WelfareCourierNumber::getSelectUserId, "in", userIds) + .andEX(WelfareCourierNumber::getSelectOptionId, "=", pageForm.getWelfareOptionId()); + courierCondition.asc(WelfareCourierNumber::getCreatedAt); + Map> courierNumbersByUser = dao() + .query(WelfareCourierNumber.class, courierCondition) + .stream() + .collect(Collectors.groupingBy(WelfareCourierNumber::getSelectUserId)); + + for (NutMap row : rows) { + LinkedHashSet courierNumbers = courierNumbersByUser + .getOrDefault(row.getString("userId"), Collections.emptyList()) + .stream() + .map(WelfareCourierNumber::getCourierNumber) + .filter(StrUtil::isNotBlank) + .collect(Collectors.toCollection(LinkedHashSet::new)); + String legacyCourierNumber = row.getString("legacyCourierNumber"); + if (StrUtil.isNotBlank(legacyCourierNumber)) { + Arrays.stream(legacyCourierNumber.split(",")) + .map(String::trim) + .filter(StrUtil::isNotBlank) + .forEach(courierNumbers::add); + } + row.put("courierNumber", String.join("、", courierNumbers)); + } + } + + /** + * 将签字文件路径转换为选择情况Excel可识别的图片字节。 + * 文件记录缺失或文件读取失败时保留空白签字列,避免单个历史文件影响整份导出。 + * + * @param row 选择情况导出行,输入userSign文件路径,输出userSignBytes图片字节 + */ + private void fillExportUserSign(NutMap row) { + String userSignPath = row.getString("userSign"); + if (StrUtil.isBlank(userSignPath)) { + return; + } + try { + Sys_file file = dao().fetch(Sys_file.class, Cnd.where(Sys_file::getDownloadPath, "=", userSignPath)); + if (file == null) { + log.warn("选择情况导出未找到签字文件记录,userId={}, userSign={}", row.getString("userId"), userSignPath); + return; + } + row.put("userSignBytes", SysFileMinIoUtil.getFileBytes(file.getBucket(), file.getStoragePath())); + } catch (Exception e) { + log.warn("选择情况导出签字文件读取失败,userId={}", row.getString("userId"), e); + } + } + @Override public void receiveXlsx(WelfareSelectionSituationPageForm pageForm, HttpServletResponse response) { diff --git a/src/main/java/com/budwk/app/zhgh/welfare/service/impl/WelfareUserEvaluationServiceImpl.java b/src/main/java/com/budwk/app/zhgh/welfare/service/impl/WelfareUserEvaluationServiceImpl.java index 1c5e8c1..aa66a12 100644 --- a/src/main/java/com/budwk/app/zhgh/welfare/service/impl/WelfareUserEvaluationServiceImpl.java +++ b/src/main/java/com/budwk/app/zhgh/welfare/service/impl/WelfareUserEvaluationServiceImpl.java @@ -4,7 +4,6 @@ import cn.afterturn.easypoi.excel.ExcelExportUtil; import cn.afterturn.easypoi.excel.entity.ExportParams; import cn.afterturn.easypoi.excel.entity.enmus.ExcelType; import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity; -import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.StrUtil; import com.budwk.app.base.constant.RoleConstant; import com.budwk.app.base.exception.BaseException; @@ -59,8 +58,8 @@ public class WelfareUserEvaluationServiceImpl extends BaseServiceImpl + + + + @@ -170,7 +168,6 @@ const welfareOption = { data() { return { welfareList: [], - systemDefaultOption: null, localGroupRequired: false, descriptionDialog: { visible: false, @@ -187,10 +184,6 @@ const welfareOption = { created() { this.welfareList = this.value ? JSON.parse(JSON.stringify(this.value)) : []; this.localGroupRequired = Boolean(this.groupRequired); - this.systemDefaultOption = this.welfareList.find((item) => item.isSystemDefault) || null; - if (this.systemDefaultOption) { - this.setSystemDefault(this.systemDefaultOption); - } }, watch: { @@ -298,22 +291,16 @@ const welfareOption = { return true; }, - // 每个福利项目只允许配置一个系统默认选项,保存时会随福利选项一并提交。 - setSystemDefault(defaultOption) { - this.welfareList.forEach((item) => { - this.$set(item, 'isSystemDefault', item === defaultOption); - }); + // 每个福利选项独立维护系统默认状态,支持同时勾选多个选项或取消已有勾选。 + setSystemDefault(option, selected) { + this.$set(option, 'isSystemDefault', selected); }, deleteOption(index) { this.$confirm('确认删除该福利选项?', '提示', { type: 'warning' }).then(() => { - const deletedOption = this.welfareList[index]; this.welfareList.splice(index, 1); - if (this.systemDefaultOption === deletedOption) { - this.systemDefaultOption = null; - } this.updateSortNumbers(); }); }, @@ -442,7 +429,7 @@ const welfareOption = { transform: translate(-50%, -50%); } - .welfare-option .el-radio__label { + .welfare-option .el-checkbox__label { padding-left: 0; } diff --git a/src/main/resources/views/platform/zhgh/welfare/select/index.html b/src/main/resources/views/platform/zhgh/welfare/select/index.html index 28f9e89..c7915d6 100644 --- a/src/main/resources/views/platform/zhgh/welfare/select/index.html +++ b/src/main/resources/views/platform/zhgh/welfare/select/index.html @@ -135,11 +135,6 @@ layout("/layouts/platform.html"){ 暂无 - -