diff --git a/src/main/java/com/budwk/app/sys/controller/SysSignatureController.java b/src/main/java/com/budwk/app/sys/controller/SysSignatureController.java index adbcab67..d0c7c8d9 100644 --- a/src/main/java/com/budwk/app/sys/controller/SysSignatureController.java +++ b/src/main/java/com/budwk/app/sys/controller/SysSignatureController.java @@ -131,7 +131,8 @@ public class SysSignatureController { @Aop(TransAop.READ_COMMITTED) public Result update(@Param("file") TempFile tempFile) { String url = sysFileService.uploadReturnUrl(SysFileEngineTypeEnum.MINIO.getValue(), tempFile); - Sys_user_signature sysUserSignature = dao.fetch(Sys_user_signature.class); + // 签字记录必须按当前登录用户读取,避免后续用户更新时覆盖其他用户的签字。 + Sys_user_signature sysUserSignature = dao.fetch(Sys_user_signature.class, Cnd.where(Sys_user_signature::getUserId, "=", SecurityUtil.getUserId())); if (ObjectUtil.isNull(sysUserSignature)) { sysUserSignature = new Sys_user_signature(); } diff --git a/src/main/resources/static/assets/mobile/img/condolence/condolence-empty.png b/src/main/resources/static/assets/mobile/img/condolence/condolence-empty.png new file mode 100644 index 00000000..0dd32328 Binary files /dev/null and b/src/main/resources/static/assets/mobile/img/condolence/condolence-empty.png differ diff --git a/src/main/resources/views/layouts/platform_h5.html b/src/main/resources/views/layouts/platform_h5.html index b5f16e09..be69f88f 100644 --- a/src/main/resources/views/layouts/platform_h5.html +++ b/src/main/resources/views/layouts/platform_h5.html @@ -257,10 +257,14 @@ window.customStyleList = document.querySelectorAll('style[id^="style-"]') }) $(document).on("pjax:complete", function () { + // PJAX 替换 #container 时可能已经移除旧样式节点,清理前需兼容节点脱离 DOM 的情况。 if (window.customStyleList) { window.customStyleList.forEach((style) => { - style.parentNode.removeChild(style) + if (style.parentNode) { + style.parentNode.removeChild(style) + } }) + window.customStyleList = null } NProgress.done() toggleShowBar() @@ -287,7 +291,7 @@ })() function pjaxReplace(url, data = null) { - $.pjax({ + return $.pjax({ url: url, container: "#container", maxCacheLength: 0, diff --git a/src/main/resources/views/platform/zhghh5/democratic/proposal/common/info.css b/src/main/resources/views/platform/zhghh5/democratic/proposal/common/info.css index 84de1605..26f9a31d 100644 --- a/src/main/resources/views/platform/zhghh5/democratic/proposal/common/info.css +++ b/src/main/resources/views/platform/zhghh5/democratic/proposal/common/info.css @@ -49,6 +49,63 @@ column-gap: 10px; } +/* 提案页面按需启用的圆角按钮与分页样式,不影响未声明对应 class 的组件。 */ +.proposal-soft-button, +.proposal-soft-pagination { + --proposal-soft-primary: #1989fa; +} + +/* 提案审核弹框的次要操作按钮统一使用柔和圆角,不包含阴影或漫反射效果。 */ +.proposal-rounded-button { + border-radius: 14px; +} + +.proposal-soft-pagination { + column-gap: 2px; +} + +.proposal-soft-button { + border-color: var(--proposal-soft-primary); + border-radius: 14px; + background-color: var(--proposal-soft-primary); +} + +/* 保持危险操作原有红色语义。 */ +.proposal-soft-button--danger { + border-color: #ff4d4f; + background-color: #ff4d4f; +} + +/* 保持退回类操作原有橙色语义。 */ +.proposal-soft-button--warning { + border-color: #ff976a; + background-color: #ff976a; +} + +.proposal-soft-pagination .van-pagination__item { + color: var(--proposal-soft-primary); + background-color: #f8fbff; + border-radius: 12px; + transition: color 0.2s ease, background-color 0.2s ease; +} + +.proposal-soft-pagination .van-pagination__item::after { + border-color: rgba(25, 137, 250, 0.16); + border-radius: inherit; +} + +.proposal-soft-pagination .van-pagination__item--active, +.proposal-soft-pagination .van-pagination__item:not(.van-pagination__item--disabled):active { + color: #fff; + background-color: var(--proposal-soft-primary); +} + +.proposal-soft-pagination .van-pagination__item--disabled, +.proposal-soft-pagination .van-pagination__item--disabled:active { + color: #646566; + background-color: #f7f8fa; +} + .proposal-action-icon { margin-right: 6px; font-size: 15px; diff --git a/src/main/resources/views/platform/zhghh5/democratic/proposal/common/task-popup.js b/src/main/resources/views/platform/zhghh5/democratic/proposal/common/task-popup.js index 2d5b4b3a..f2a1cf7f 100644 --- a/src/main/resources/views/platform/zhghh5/democratic/proposal/common/task-popup.js +++ b/src/main/resources/views/platform/zhghh5/democratic/proposal/common/task-popup.js @@ -28,9 +28,9 @@ const PROPOSAL_TASK_POPUP = {
- 退回不同意同意 + 退回不同意同意
- 退回(不审核)退回(审核)不同意同意 + 退回(不审核)退回(审核)不同意同意
-
退回答复同意答复
-
取消提交
+
退回答复同意答复
+
取消提交
- - - + + + +
选择答复单位
@@ -108,7 +109,19 @@ const PROPOSAL_TASK_POPUP = { toggleReplyUnit(item) { const ids=[...this.pendingReplyUnitIds]; const index=ids.indexOf(item.unitId); if (index>-1) ids.splice(index,1); else ids.push(item.unitId); this.$set(this,"pendingReplyUnitIds",ids) }, confirmReplyUnits() { this.$set(this.formData,"tf_secondReplyUnitIds",[...this.pendingReplyUnitIds]); this.closeLayer("reply-unit-picker") }, buildCaseCheckData() { const data={...this.formData}; const units=data.tf_caseCheckNeedSecondReply === 1 ? this.replyUnitOptions.filter((item) => data.tf_secondReplyUnitIds.indexOf(item.unitId)>-1) : []; const masters=units.filter((item) => item.isMaster); const slaves=units.filter((item) => !item.isMaster); data.tf_masterUnitIds=masters.map((item) => item.unitId); data.tf_masterUnitId=data.tf_masterUnitIds[0] || ""; data.tf_masterUnitNames=masters.map((item) => item.unitName); data.tf_masterUnitName=data.tf_masterUnitNames[0] || ""; data.tf_masterUnitNameStr=data.tf_masterUnitNames.join(","); data.tf_slaveUnitIds=slaves.map((item) => item.unitId); data.tf_slaveUnitNames=slaves.map((item) => item.unitName); data.tf_slaveUnitNameStr=data.tf_slaveUnitNames.join(","); return data }, - prepareSubmit(value) { this.$refs.formRef.validate().then(() => { this.$set(this,"pendingSubmitType",value); this.openLayer("submit-confirm") }).catch(() => {}) }, + prepareSubmit(value) { + // 各办理页面提交前统一校验意见字段;空白字符按未填写处理,提示后不再打开确认弹框。 + const opinionConfig = this.kind === "suggestion" + ? {field: "opinion", message: "请输入反馈意见"} + : this.kind === "unitReply" + ? {field: "tf_opinion", message: "请填写答复内容"} + : {field: "tf_opinion", message: "请填写审批意见"} + if (!(this.formData[opinionConfig.field] || "").trim()) { + this.$toast(opinionConfig.message) + return + } + this.$refs.formRef.validate().then(() => { this.$set(this,"pendingSubmitType",value); this.openLayer("submit-confirm") }).catch(() => {}) + }, /** 根据页面类型保留原接口和参数分支,成功后清理全部弹层历史并通知列表刷新。 */ submit() { this.$set(this,"formLoading",true) diff --git a/src/main/resources/views/platform/zhghh5/democratic/proposal/transact/caseCheck/index.html b/src/main/resources/views/platform/zhghh5/democratic/proposal/transact/caseCheck/index.html index 31d0731f..e8f6e30a 100644 --- a/src/main/resources/views/platform/zhghh5/democratic/proposal/transact/caseCheck/index.html +++ b/src/main/resources/views/platform/zhghh5/democratic/proposal/transact/caseCheck/index.html @@ -231,6 +231,7 @@ layout("/layouts/platform_h5.html"){
diff --git a/src/main/resources/views/platform/zhghh5/democratic/proposal/transact/commissioner/index.html b/src/main/resources/views/platform/zhghh5/democratic/proposal/transact/commissioner/index.html index a45fbb13..6bbcf050 100644 --- a/src/main/resources/views/platform/zhghh5/democratic/proposal/transact/commissioner/index.html +++ b/src/main/resources/views/platform/zhghh5/democratic/proposal/transact/commissioner/index.html @@ -2,31 +2,70 @@ layout("/layouts/platform_h5.html"){ #--> +
+
+
- + + @change="doSearch" @open="setFilterOpened(true)" @close="setFilterOpened(false)"> + - - - - +
+
+ +
暂无提案记录插画
暂无提案记录
当前筛选条件下暂时没有提案
@@ -53,6 +92,7 @@ layout("/layouts/platform_h5.html"){
+
@@ -86,7 +126,7 @@ layout("/layouts/platform_h5.html"){
取消 - 提交 + 提交
@@ -109,6 +149,7 @@ layout("/layouts/platform_h5.html"){ +
diff --git a/src/main/resources/views/platform/zhghh5/staffbenefit/condolence/common/info.css b/src/main/resources/views/platform/zhghh5/staffbenefit/condolence/common/info.css new file mode 100644 index 00000000..3094eded --- /dev/null +++ b/src/main/resources/views/platform/zhghh5/staffbenefit/condolence/common/info.css @@ -0,0 +1,176 @@ +.condolence-full-popup { + --color-primary: #1989fa; + width: 100%; + height: 100%; + overflow: hidden; + background: #f3f7fc; +} + +.condolence-full-popup__page { + display: flex; + height: 100%; + padding-top: 46px; + overflow: hidden; + box-sizing: border-box; + flex-direction: column; +} + +.condolence-full-popup__page > .van-nav-bar { + z-index: 20; + background: #fff; +} + +.condolence-full-popup__page > .van-nav-bar .van-icon, +.condolence-full-popup__page > .van-nav-bar .van-nav-bar__text { + color: #1989fa; +} + +.condolence-full-popup__scroll { + min-height: 0; + overflow-y: auto; + flex: 1; + -webkit-overflow-scrolling: touch; +} + +.condolence-info-main { + padding: 12px 15px calc(18px + env(safe-area-inset-bottom)); +} + +.condolence-info-card { + margin-bottom: 11px; + overflow: hidden; + border: 1px solid #e9eff7; + border-radius: 10px; + background: #fff; + box-shadow: 0 3px 11px rgba(51, 87, 126, .08); +} + +.condolence-info-card__title { + position: relative; + margin: 0; + padding: 12px 14px 8px 21px; + color: #354255; + font-size: 15px; + font-weight: 600; + line-height: 22px; +} + +.condolence-info-card__title::before { + position: absolute; + top: 15px; + bottom: 11px; + left: 12px; + width: 2px; + border-radius: 2px; + background: #1989fa; + content: ""; +} + +/* 审核意见复用详情 Card 标题,并与提案 delegation 审核输入区保持一致。 */ +.condolence-audit-card__required { + margin-left: 4px; + color: #ee0a24; + font-size: 14px; +} + +.condolence-info-card .van-field.condolence-audit-field { + width: calc(100% - 28px); + margin: 0 14px 14px; + padding: 12px; + box-sizing: border-box; + border: 1px solid #c9d5e5; + border-radius: 10px; + background: #f7f9fd; +} + +.condolence-info-card .van-field.condolence-audit-field .van-field__control { + min-height: 150px; + color: #253247; + line-height: 22px; +} + +.condolence-info-card .van-field.condolence-audit-field .van-field__control::placeholder { + color: #9aa7b8; +} + +.condolence-info-card .van-field.condolence-audit-field .van-field__word-limit { + color: #718096; +} + +.condolence-info-card .van-field.condolence-audit-field::after { + display: none; +} + +.condolence-popup-actions { + display: flex; + padding: 10px 12px calc(12px + env(safe-area-inset-bottom)); + justify-content: space-between; + column-gap: 10px; + background: transparent; +} + +.condolence-popup-actions .van-button { + border-radius: 14px; +} + +.condolence-popup-actions .condolence-action-primary { + border-color: #1989fa; + background: #1989fa; +} + +.condolence-popup-actions .condolence-action-danger { + border-color: #ff4d4f; + background: #ff4d4f; +} + +.condolence-info-card .van-cell-group { + margin: 0; + background: transparent; +} + +.condolence-info-card .van-cell { + min-height: 44px; + padding: 10px 14px; + background: transparent; +} + +.condolence-info-card .van-cell:not(:last-child)::after { + right: 14px; + left: 14px; + border-color: #eef2f7; +} + +.condolence-info-card .van-cell__title { + width: 102px; + color: #596779; + font-size: 12px; + line-height: 24px; + flex: 0 0 102px; +} + +.condolence-info-card .van-cell__value { + min-width: 0; + color: #4f5d70; + font-size: 12px; + line-height: 24px; + text-align: left; + overflow-wrap: anywhere; +} + +.condolence-info-long-cell { + display: block; +} + +.condolence-info-long-cell .van-cell__title { + width: auto; + max-width: 100%; +} + +.condolence-info-long-cell .van-cell__value { + margin-top: 7px; +} + +.condolence-signature-image { + display: block; + max-width: 100%; +} diff --git a/src/main/resources/views/platform/zhghh5/staffbenefit/condolence/common/info.js b/src/main/resources/views/platform/zhghh5/staffbenefit/condolence/common/info.js index 532f959d..36c8e1ad 100644 --- a/src/main/resources/views/platform/zhghh5/staffbenefit/condolence/common/info.js +++ b/src/main/resources/views/platform/zhghh5/staffbenefit/condolence/common/info.js @@ -1,104 +1,174 @@ const condolenceInfo = { - template: - /*language=HTML*/ - ` - -
- - {{ viewData.applyUserName }} - {{ viewData.applyLoginName }} - {{ viewData.applyUnitName }} - {{ viewData.applyUnionName }} - {{ viewData.helpUserName }} - - {{ viewData.certifierUserName }} - {{ viewData.typeName }} - {{ viewData.money }} - {{ viewData.occurTime }} - {{ viewData.bankCardNumber }} - {{ viewData.bankUserName }} - - {{ viewData.bankOfDeposit || '暂无' }} - - - - {{ viewData.remark || '暂无' }} - - - - - - - 暂无签字 - - - + template: /*language=HTML*/ ` + +
+ +
+
+
+

基本信息

+ + {{ viewData.applyUserName || '--' }} + {{ viewData.applyLoginName || '--' }} + {{ viewData.applyUnitName || '--' }} + {{ viewData.applyUnionName || '--' }} + {{ viewData.helpUserName || '--' }} + {{ viewData.certifierUserName || '--' }} + {{ viewData.typeName || '--' }} + {{ viewData.money || '--' }} + {{ viewData.occurTime || '--' }} + {{ viewData.bankCardNumber || '--' }} + {{ viewData.bankUserName || '--' }} + + {{ viewData.bankOfDeposit || '暂无' }} + + + + {{ viewData.remark || '暂无' }} + + + + + + + 暂无签字 + + +
+ +
+

{{ task.displayName || '办理记录' }}

+ + + {{ task.ext.initiatorName || '--' }}({{ task.ext.initiatorAccount || '--' }}) + + {{ task.finishTime || '--' }} + + + + + + + {{ task.taskFormData && task.taskFormData.userName || '--' }}({{ task.taskFormData && task.taskFormData.loginName || '--' }}) + + {{ task.finishTime || '--' }} + + + + +
+
+
+
+ + +
- - - `, +
+
+ `, dicts: ["PROCESS_TASK_SUBMIT_TYPE"], + props: { + pageKey: { + type: String, + required: true + } + }, data() { return { - visible:false, + visible: false, + popupTitle: "慰问详情", viewData: {}, doneTasks: [], row: null, + historyLayerUnsubscribe: null } }, methods: { - onOpen(row) { - this.row = row - this.visible = true + // 浏览器历史变化时,只同步当前慰问详情弹框的显示状态。 + syncHistoryLayerStack(stack) { + this.$set(this, "visible", stack.includes("condolence-detail")) + }, + + /** + * 打开慰问详情或审核弹框。 + * row 传列表当前行,title 传顶部导航标题;无返回值。 + */ + onOpen(row, title = "慰问详情") { + this.$set(this, "row", row) + this.$set(this, "popupTitle", title) + this.$set(this, "viewData", {}) + this.$set(this, "doneTasks", []) this.getInfo() this.getDoneTasks() + if (window.h5HistoryLayerManager && window.h5HistoryLayerManager.open("condolence-detail")) return + this.$set(this, "visible", true) }, - onClose(){ - this.visible = false + + // 顶部返回按钮与业务主动关闭统一回退弹框对应的浏览器历史。 + onClose(afterClose = null) { + if (window.h5HistoryLayerManager && window.h5HistoryLayerManager.close("condolence-detail", afterClose)) return + this.$set(this, "visible", false) + if (typeof afterClose === "function") afterClose() }, + getInfo() { - this.$axios.post("/platform/condolence/mine/info", { id: this.row.id }).then((res) => { + this.$axios.post("/platform/condolence/mine/info", {id: this.row.id}).then((res) => { if (res.code === 0) { - this.viewData = res.data + this.$set(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 + this.$set(this, "doneTasks", res.data || []) } }) - }, + } }, - style: /*language=CSS*/ ` - - ` + created() { + if (!window.h5HistoryLayerManager) return + window.h5HistoryLayerManager.ensureRegistered(this.pageKey) + this.$set(this, "historyLayerUnsubscribe", window.h5HistoryLayerManager.subscribe((stack) => { + this.syncHistoryLayerStack(stack) + })) + }, + beforeDestroy() { + if (typeof this.historyLayerUnsubscribe === "function") this.historyLayerUnsubscribe() + if (window.h5HistoryLayerManager && window.h5HistoryLayerManager.pageKey === this.pageKey) { + window.h5HistoryLayerManager.unregister(this.pageKey) + } + } } diff --git a/src/main/resources/views/platform/zhghh5/staffbenefit/condolence/mine/index.html b/src/main/resources/views/platform/zhghh5/staffbenefit/condolence/mine/index.html index 49aec50e..a96d6172 100644 --- a/src/main/resources/views/platform/zhghh5/staffbenefit/condolence/mine/index.html +++ b/src/main/resources/views/platform/zhghh5/staffbenefit/condolence/mine/index.html @@ -2,30 +2,293 @@ layout("/layouts/platform_h5.html"){ #--> - + +
+
+
- + +
+
+ + +
- + +
diff --git a/src/main/resources/views/platform/zhghh5/staffbenefit/condolence/schoolUnionApproval/index.html b/src/main/resources/views/platform/zhghh5/staffbenefit/condolence/schoolUnionApproval/index.html index 788a9b33..4a0ebfac 100644 --- a/src/main/resources/views/platform/zhghh5/staffbenefit/condolence/schoolUnionApproval/index.html +++ b/src/main/resources/views/platform/zhghh5/staffbenefit/condolence/schoolUnionApproval/index.html @@ -2,35 +2,87 @@ layout("/layouts/platform_h5.html"){ #--> - +
+
+
- + + - - - - +
+
+ + +
- +
-
{{formData.taskName}}
- - - -
- 同意 - 不同意 - 退回 +
+

+ 审批意见* +

+ + + +
+
+ 退回 + 不同意 + 同意
+ +