diff --git a/src/main/java/com/budwk/app/sys/services/impl/SysDataUserAllUpdateServiceImpl.java b/src/main/java/com/budwk/app/sys/services/impl/SysDataUserAllUpdateServiceImpl.java index 790ad4d..56d6572 100644 --- a/src/main/java/com/budwk/app/sys/services/impl/SysDataUserAllUpdateServiceImpl.java +++ b/src/main/java/com/budwk/app/sys/services/impl/SysDataUserAllUpdateServiceImpl.java @@ -479,7 +479,15 @@ public class SysDataUserAllUpdateServiceImpl implements SysDataUserUpdateService } // 特殊字段变更处理 - // 1. 会员状态变更 + // 1. 在职状态变更按状态名称匹配 MemberChangeType,历史记录统一保存枚举编码。 + if (StrUtil.isNotBlank(source.getUserState()) && !ObjectUtil.equals(user.getUserState(), source.getUserState())) { + Arrays.stream(MemberChangeType.values()) + .filter(type -> type.getChangeTypeName().equals(source.getUserState())) + .findFirst() + .ifPresent(type -> changeTypes.add(type.name())); + } + + // 2. 会员状态变更 // if (!ObjectUtil.equals(user.getMember(), source.getMember())) { // if (source.getMember()) { // changeTypes.add(MemberChangeType.RESTORE.name()); @@ -488,7 +496,7 @@ public class SysDataUserAllUpdateServiceImpl implements SysDataUserUpdateService // } // } - // 2. 单位变更 + // 3. 单位变更 if (!ObjectUtil.equals(user.getUnitId(), source.getUnitId())) { changeTypes.add(MemberChangeType.UNIT_CHANGE.name()); NutMap change = NutMap.NEW(); diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/enrollmentRegistration/controller/EnrollmentRegistrationPlanController.java b/src/main/java/com/budwk/app/zhgh/dayofficework/enrollmentRegistration/controller/EnrollmentRegistrationPlanController.java index 7090563..4ef85a5 100644 --- a/src/main/java/com/budwk/app/zhgh/dayofficework/enrollmentRegistration/controller/EnrollmentRegistrationPlanController.java +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/enrollmentRegistration/controller/EnrollmentRegistrationPlanController.java @@ -71,5 +71,20 @@ public class EnrollmentRegistrationPlanController { } + /** + * 删除指定的子女入学登记计划。 + * + * @param id 登记计划主键 ID + * @return Result 标准响应结构;code 为 0 表示删除成功 + */ + @At + @ApiOperation("删除登记计划") + @SaCheckPermission("enrollmentRegistration.plan") + @Aop(TransAop.READ_COMMITTED) + @SLog(tag = "子女入学管理-登记计划", msg = "删除登记计划id: ${args[0]}") + public Result doDelete(String id) { + baseService.dao().delete(EnrollmentRegistrationPlan.class, id); + return Result.success(); + } } diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/qsv/controller/QsvOnlineController.java b/src/main/java/com/budwk/app/zhgh/dayofficework/qsv/controller/QsvOnlineController.java index e897b48..f282478 100644 --- a/src/main/java/com/budwk/app/zhgh/dayofficework/qsv/controller/QsvOnlineController.java +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/qsv/controller/QsvOnlineController.java @@ -68,21 +68,25 @@ public class QsvOnlineController { /** * 查询当前用户可参与的在线问卷、答题和投票活动。 * pageForm 传入页码、每页数量与搜索关键字;year 为活动开始年份;title 为标题关键字; - * isAnswered 用于筛选已答或未答活动。返回 Pagination,列表数据仅包含当前用户命中活动分组的活动。 + * isAnswered 用于筛选已答或未答活动;activityId 用于首页活动携带 ID 直达指定答题任务。 + * 返回 Pagination,列表数据仅包含当前用户命中活动分组的活动;指定 activityId 时不受已答筛选影响, + * 以便前端根据实际 actionType 自动进入答题、继续答题或查看答题。 * * @param pageForm 分页及搜索参数 * @param year 活动开始年份 * @param title 活动标题关键字 * @param isAnswered 是否只查看已答活动 + * @param activityId 指定活动 ID,为空时按普通在线答题列表查询 * @return 当前用户可参与的在线活动分页结果 */ @At @SaCheckPermission("qsv.online") @ApiOperation("在线答题任务分页") - public Result pageData(@Valid PageForm pageForm, Integer year, String title, Boolean isAnswered) { + public Result pageData(@Valid PageForm pageForm, Integer year, String title, Boolean isAnswered, String activityId) { Cnd cnd = Cnd.where("enabled", "=", true); cnd.andEX("YEAR(startTime)", "=", year); cnd.and(Cnd.likeEX("title", title)); + cnd.andEX("id", "=", activityId); cnd.desc("startTime"); List activities = dao.query(QsvActivity.class, cnd); @@ -107,6 +111,10 @@ public class QsvOnlineController { List rows = activities.stream() .map((activity) -> buildOnlineRow(activity, recordGroup.getOrDefault(activity.getId(), new ArrayList<>()))) .filter((row) -> { + // 首页携带活动 ID 直达时保留真实答题状态,由前端根据 actionType 决定答题或查看。 + if (ObjectUtil.isNotEmpty(activityId)) { + return true; + } if (Boolean.TRUE.equals(isAnswered)) { return row.getBoolean("isAnswered"); } diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/qsv/models/QsvActivity.java b/src/main/java/com/budwk/app/zhgh/dayofficework/qsv/models/QsvActivity.java index ea94a8d..38cbdf3 100644 --- a/src/main/java/com/budwk/app/zhgh/dayofficework/qsv/models/QsvActivity.java +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/qsv/models/QsvActivity.java @@ -123,7 +123,7 @@ public class QsvActivity extends BaseModel implements Serializable, SysHomeConve sysHomeActivity.setName(this.getTitle()); sysHomeActivity.setCover(this.getCover()); sysHomeActivity.setContent(this.getDescription()); - sysHomeActivity.setUrl("/platform/qsv/activity"); + sysHomeActivity.setUrl("/platform/qsv/online?id=" + this.getId()); sysHomeActivity.setH5Url(getH5Url()); sysHomeActivity.setStartDate(this.getStartTime()); sysHomeActivity.setEndDate(this.getEndTime()); diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/qsv/service/impl/QsvSurveyServiceImpl.java b/src/main/java/com/budwk/app/zhgh/dayofficework/qsv/service/impl/QsvSurveyServiceImpl.java index 231be8a..0908968 100644 --- a/src/main/java/com/budwk/app/zhgh/dayofficework/qsv/service/impl/QsvSurveyServiceImpl.java +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/qsv/service/impl/QsvSurveyServiceImpl.java @@ -13,6 +13,7 @@ import com.budwk.app.base.page.Pagination; import com.budwk.app.base.param.PageForm; import com.budwk.app.base.service.impl.BaseServiceImpl; import com.budwk.app.base.utils.CommonDownloadUtil; +import com.budwk.app.sys.views.View_user; import com.budwk.app.zhgh.dayofficework.qsv.models.QsvActivity; import com.budwk.app.zhgh.dayofficework.qsv.models.QsvOption; import com.budwk.app.zhgh.dayofficework.qsv.models.QsvSubject; @@ -31,6 +32,7 @@ import org.nutz.lang.util.NutMap; import javax.servlet.http.HttpServletResponse; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -436,6 +438,9 @@ public class QsvSurveyServiceImpl extends BaseServiceImpl i // .and("isFinish", "=", true) Pagination pagination = listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), cnd); List answerRecords = pagination.getList(); + Map userMobileMap = queryUserMobileMap(answerRecords.stream() + .map(record -> record.getString("userId")) + .toList()); // 查询用户答题记录 // List answerRecords = dao().query(QsvUserAnswerRecord.class, Cnd.where("activityId", "=", activityId) @@ -464,7 +469,8 @@ public class QsvSurveyServiceImpl extends BaseServiceImpl i .addv("loginName", record.getString("loginName")) .addv("userName", record.getString("userName")) .addv("unitName", record.getString("unitName")) - .addv("unionName", record.getString("unionName")); + .addv("unionName", record.getString("unionName")) + .addv("mobile", userMobileMap.get(record.getString("userId"))); JSONObject extJson = record.getAs("extJson", JSONObject.class); if (ObjectUtil.isEmpty(extJson)) { return map; @@ -723,13 +729,17 @@ public class QsvSurveyServiceImpl extends BaseServiceImpl i } private List buildAnswerRecords(List answerRecords, Map subjectMap, Map optionMap) { + Map userMobileMap = queryUserMobileMap(answerRecords.stream() + .map(QsvUserAnswerRecord::getUserId) + .toList()); return answerRecords.stream().map(record -> { NutMap map = NutMap.NEW() .addv("id", record.getId()) .addv("loginName", record.getLoginName()) .addv("userName", record.getUserName()) .addv("unitName", record.getUnitName()) - .addv("unionName", record.getUnionName()); + .addv("unionName", record.getUnionName()) + .addv("mobile", userMobileMap.get(record.getUserId())); JSONObject extJson = record.getExtJson(); if (ObjectUtil.isEmpty(extJson)) { return map; @@ -745,6 +755,26 @@ public class QsvSurveyServiceImpl extends BaseServiceImpl i }).collect(Collectors.toList()); } + /** + * 根据答题记录中的用户ID批量查询当前手机号,供后台查看答卷和导出使用。 + * + * @param userIds 答题用户ID列表,允许包含重复值或空值 + * @return key为用户ID、value为View_user当前手机号的映射;用户不存在时不返回对应项 + */ + private Map queryUserMobileMap(List userIds) { + Map userMobileMap = new HashMap<>(); + List validUserIds = userIds.stream() + .filter(ObjectUtil::isNotEmpty) + .distinct() + .toList(); + if (validUserIds.isEmpty()) { + return userMobileMap; + } + List users = dao().query(View_user.class, Cnd.where("id", "in", validUserIds)); + users.forEach(user -> userMobileMap.put(user.getId(), user.getMobile())); + return userMobileMap; + } + /** * 组装单题答案展示内容。填空题返回填写文本;选择题返回选项文本,若选项配置了补充填写, * 则追加对应补充内容,保证后台查看答卷和导出能看到用户填写的说明。 diff --git a/src/main/java/com/budwk/app/zhgh/staffmanage/member/constant/MemberChangeType.java b/src/main/java/com/budwk/app/zhgh/staffmanage/member/constant/MemberChangeType.java index 48e80c5..120561b 100644 --- a/src/main/java/com/budwk/app/zhgh/staffmanage/member/constant/MemberChangeType.java +++ b/src/main/java/com/budwk/app/zhgh/staffmanage/member/constant/MemberChangeType.java @@ -21,32 +21,39 @@ public enum MemberChangeType { RESTORE("RESTORE", "入会"), WITHDRAWAL("WITHDRAWAL", "退会"), - ONLINE("ONLINE", "在岗"), - FLEX("FLEX", "柔性"), - SECONDED("SECONDED", "借调挂职"), - REMOTE_POST("REMOTE_POST", "异地任职"), - REHIRE_INNER("REHIRE_INNER", "内退返岗"), - - SHORT_TRIP("SHORT_TRIP", "短期公差"), - DOMESTIC_MEET("DOMESTIC_MEET", "境内会务"), - QUARANTINE("QUARANTINE", "疫期隔离"), - SICK_LEAVE("SICK_LEAVE", "病假"), - PERSONAL_LEAVE("PERSONAL_LEAVE", "事假"), - NURSING_LEAVE("NURSING_LEAVE", "哺乳假"), - - MATERNITY("MATERNITY", "产假"), + ONLINE("ONLINE", "在职"), + RETIRE("RETIRE", "退休"), + RESIGN("RESIGN", "辞职"), + RETIRE_REHIRE("RETIRE_REHIRE", "退休返聘"), + LEAVE("LEAVE", "离职"), + TRANSFER_OUT("TRANSFER_OUT", "调出"), + SECONDMENT("SECONDMENT", "挂职"), LONG_SICK("LONG_SICK", "长病假"), - ABROAD_PUB("ABROAD_PUB", "公派出国"), - STUDY_DOMESTIC("STUDY_DOMESTIC", "国内进修"), - STUDY_ABROAD("STUDY_ABROAD", "境外留学"), - OFF_JOB_START("OFF_JOB_START", "离岗创业"), - INNER_RETIRE("INNER_RETIRE", "内部退养"), - EXTEND("EXTEND", "延聘"), - REHIRE_SCH("REHIRE_SCH", "学校返聘"), - REHIRE_DEPT("REHIRE_DEPT", "部门返聘"), +// FLEX("FLEX", "柔性"), +// SECONDED("SECONDED", "借调挂职"), +// REMOTE_POST("REMOTE_POST", "异地任职"), +// REHIRE_INNER("REHIRE_INNER", "内退返岗"), - OFFLINE("OFFLINE", "不在岗"), +// SHORT_TRIP("SHORT_TRIP", "短期公差"), +// DOMESTIC_MEET("DOMESTIC_MEET", "境内会务"), +// QUARANTINE("QUARANTINE", "疫期隔离"), +// SICK_LEAVE("SICK_LEAVE", "病假"), +// PERSONAL_LEAVE("PERSONAL_LEAVE", "事假"), +// NURSING_LEAVE("NURSING_LEAVE", "哺乳假"), + +// MATERNITY("MATERNITY", "产假"), +// ABROAD_PUB("ABROAD_PUB", "公派出国"), +// STUDY_DOMESTIC("STUDY_DOMESTIC", "国内进修"), +// STUDY_ABROAD("STUDY_ABROAD", "境外留学"), +// OFF_JOB_START("OFF_JOB_START", "离岗创业"), +// INNER_RETIRE("INNER_RETIRE", "内部退养"), + +// EXTEND("EXTEND", "延聘"), +// REHIRE_SCH("REHIRE_SCH", "学校返聘"), +// REHIRE_DEPT("REHIRE_DEPT", "部门返聘"), + +// OFFLINE("OFFLINE", "不在岗"), UNIT_CHANGE("UNIT_CHANGE", "单位异动"), UNION_CHANGE("UNION_CHANGE", "工会关系异动"), diff --git a/src/main/java/com/budwk/app/zhgh/staffmanage/member/service/impl/MemberManageServiceImpl.java b/src/main/java/com/budwk/app/zhgh/staffmanage/member/service/impl/MemberManageServiceImpl.java index 6bc1cbb..4ccebfb 100644 --- a/src/main/java/com/budwk/app/zhgh/staffmanage/member/service/impl/MemberManageServiceImpl.java +++ b/src/main/java/com/budwk/app/zhgh/staffmanage/member/service/impl/MemberManageServiceImpl.java @@ -280,12 +280,12 @@ public class MemberManageServiceImpl extends BaseServiceImpl implement public List compareChangeType(MemberChangeRecord record, View_user user) { List changeTypes = new ArrayList<>(); changeTypes.add(MemberChangeType.BASIC_CHANGE.name()); - if (!ObjectUtil.equals(user.getUserState(), record.getUserState())) { - List list = Arrays.stream(MemberChangeType.values()) - .filter(v -> v.getChangeTypeName().equals(record.getUserState())).toList(); - if (Lang.isNotEmpty(list)) { - changeTypes.add(list.get(0).name()); - } + // 在职状态变更按状态名称匹配 MemberChangeType,历史记录统一保存枚举编码。 + if (StrUtil.isNotBlank(record.getUserState()) && !ObjectUtil.equals(user.getUserState(), record.getUserState())) { + Arrays.stream(MemberChangeType.values()) + .filter(type -> type.getChangeTypeName().equals(record.getUserState())) + .findFirst() + .ifPresent(type -> changeTypes.add(type.name())); } if (!ObjectUtil.equals(user.getMember() == 1, record.getMember())){ if (record.getMember()) { diff --git a/src/main/resources/static/assets/mobile/img/home/v4/hero-campus.png b/src/main/resources/static/assets/mobile/img/home/v4/hero-campus.png index d93173b..8dc2a90 100644 Binary files a/src/main/resources/static/assets/mobile/img/home/v4/hero-campus.png and b/src/main/resources/static/assets/mobile/img/home/v4/hero-campus.png differ diff --git a/src/main/resources/static/assets/mobile/img/home/v4/中国地质大学-logo.png b/src/main/resources/static/assets/mobile/img/home/v4/中国地质大学-logo.png deleted file mode 100644 index bff3e78..0000000 Binary files a/src/main/resources/static/assets/mobile/img/home/v4/中国地质大学-logo.png and /dev/null differ diff --git a/src/main/resources/views/layouts/v4/home/act.js b/src/main/resources/views/layouts/v4/home/act.js index 2f3ef6f..6e8a35b 100644 --- a/src/main/resources/views/layouts/v4/home/act.js +++ b/src/main/resources/views/layouts/v4/home/act.js @@ -308,7 +308,7 @@ const act = { height: 100% !important; max-width: 100% !important; max-height: 128px !important; - object-fit: cover !important; + object-fit: fill !important; transition: transform 0.3s ease; } diff --git a/src/main/resources/views/platform/zhgh/dayofficework/enrollmentRegistration/plan/index.html b/src/main/resources/views/platform/zhgh/dayofficework/enrollmentRegistration/plan/index.html index b457935..e95c240 100644 --- a/src/main/resources/views/platform/zhgh/dayofficework/enrollmentRegistration/plan/index.html +++ b/src/main/resources/views/platform/zhgh/dayofficework/enrollmentRegistration/plan/index.html @@ -185,6 +185,21 @@ layout("/layouts/platform.html"){ year: moment().format("YYYY") } this.dialogVisible = true + }, + doDelete(id) { + // id 为登记计划主键;删除成功后重新查询当前页,确保列表与数据库保持一致。 + this.$confirm("您确定要删除吗?", "提示", { + confirmButtonText: "确定", + cancelButtonText: "取消", + type: "warning" + }).then(() => { + this.$axios.post("/platform/enrollmentRegistration/plan/doDelete", {id: id}).then((res) => { + if (res.code === 0) { + this.$message.success(res.msg) + this.pageData() + } + }) + }) } }, async created() { diff --git a/src/main/resources/views/platform/zhgh/dayofficework/qsv/online/index.html b/src/main/resources/views/platform/zhgh/dayofficework/qsv/online/index.html index 74d270c..53554f2 100644 --- a/src/main/resources/views/platform/zhgh/dayofficework/qsv/online/index.html +++ b/src/main/resources/views/platform/zhgh/dayofficework/qsv/online/index.html @@ -545,6 +545,7 @@ layout("/layouts/platform.html"){ :class="['qsv-online-vote-option', isOptionSelected(currentVoteSubject, option.id) ? 'active' : '']" @click="toggleVoteOption(option)"> { + if (res.code !== 0) { + this.$message.error(res.msg) + return + } + const rows = res.data && res.data.list ? res.data.list : [] + if (rows.length === 0) { + this.$message.warning("未找到可参与的答题活动") + return + } + this.openAnswer(rows[0]) + }).finally(() => { + if (!this.answerDialog.visible) { + this.answerDialog.loading = false + } + }) + }, openAnswer(row) { const unavailableMessage = this.getActivityUnavailableMessage(row) if (unavailableMessage) { @@ -1205,6 +1234,7 @@ layout("/layouts/platform.html"){ }, created() { this.pageData() + this.openAnswerFromUrl() }, beforeDestroy() { this.stopVoteCountdown() diff --git a/src/main/resources/views/platform/zhgh/staffmanage/sourcechange/manage/index.html b/src/main/resources/views/platform/zhgh/staffmanage/sourcechange/manage/index.html index f4374b2..783821b 100644 --- a/src/main/resources/views/platform/zhgh/staffmanage/sourcechange/manage/index.html +++ b/src/main/resources/views/platform/zhgh/staffmanage/sourcechange/manage/index.html @@ -265,12 +265,15 @@ layout("/layouts/platform.html"){ // }) // }, getChangeTypes(changeTypes) { + if (!changeTypes) return null const changeTypesList = JSON.parse(changeTypes) if (changeTypesList) { - if (!changeTypesList || changeTypesList.length === 0 || !this.changeTypeData || this.changeTypeData.length === 0) return null + if (!changeTypesList || changeTypesList.length === 0) return null return changeTypesList .map((v) => { - return this.changeTypeData.find((item) => item.code === v).changeTypeName + // 异动类型统一从 MemberChangeType 枚举解析,未知历史值保留原值展示。 + const changeType = (this.changeTypeData || []).find((item) => item.code === v) + return changeType ? changeType.changeTypeName : v }) .join(",") } diff --git a/src/main/resources/views/platform/zhghh5/sys/home/home.js b/src/main/resources/views/platform/zhghh5/sys/home/home.js index adc8c66..c475a01 100644 --- a/src/main/resources/views/platform/zhghh5/sys/home/home.js +++ b/src/main/resources/views/platform/zhghh5/sys/home/home.js @@ -3,8 +3,8 @@ const home = {
+ src="/assets/mobile/img/home/v4/zhvtit-login.png" + alt="浙江交通职业技术学院"> 智慧工会
@@ -14,8 +14,8 @@ const home = {
+ src="/assets/mobile/img/home/v4/zhvtit-login.png" + alt="浙江交通职业技术学院">
智慧工会
情系职工 · 真诚服务
@@ -666,6 +666,8 @@ const home = { display: block; object-fit: contain; object-position: left center; + /* 新校徽为白色透明图,在白色悬浮栏中转为深色以保证清晰可见。 */ + filter: brightness(0); } .home-summary-bar__divider { @@ -835,9 +837,9 @@ const home = { .quick-scroll-grid { display: grid; - grid-auto-flow: column; - grid-template-rows: repeat(2, 86px); - grid-auto-columns: 25%; + grid-auto-flow: row; + grid-template-columns: repeat(4, 25%); + grid-auto-rows: 86px; min-width: 100%; } diff --git a/src/main/resources/views/platform/zhghh5/sys/home/mine.js b/src/main/resources/views/platform/zhghh5/sys/home/mine.js index b34898a..7e6f737 100644 --- a/src/main/resources/views/platform/zhghh5/sys/home/mine.js +++ b/src/main/resources/views/platform/zhghh5/sys/home/mine.js @@ -74,36 +74,16 @@ const mine = { 我的签名 - - - - - -
- -
- 退出登录 -
`, @@ -153,16 +133,6 @@ const mine = { switchTab(tab) { this.$store.commit("setActiveTarBar", tab) this.$emit("switch-tab", tab) - }, - logout() { - this.$dialog - .confirm({ - title: "温馨提示", - message: "您确认要退出登录吗?" - }) - .then(() => { - this.$store.dispatch("logout") - }) } }, @@ -410,17 +380,6 @@ const mine = { white-space: nowrap; } - .mine-logout-wrap { - padding-top: 4px; - } - - .mine-logout-btn { - height: 44px; - border-color: #bdcbe0 !important; - background: rgba(255, 255, 255, 0.82) !important; - color: #718198 !important; - font-size: 15px; - } ` } }