## adminMemorial 确认操作说明 本文档说明在 `pages/memorial/adminMemorial.vue` 中新增的确认封装与其使用方式。 ### 目的 - 在高风险操作(全部开启、全部关闭、强制开启、强制关闭、时长归零)前弹出确认,避免误触。 - 通过 Promise 封装让调用处可以使用 async/await,编写更清晰的顺序代码。 ### 核心封装:confirmAction ```javascript // 确认提示封装,返回是否确认 async function confirmAction(message) { const res = await new Promise((resolve) => { uni.showModal({ title: "确认操作", content: message, confirmText: "确认", cancelText: "取消", success: (r) => resolve(r), }); }); return !!(res && res.confirm); } ``` ### 为何需要 Promise 包装 - `uni.showModal` 使用回调(success/fail),不能直接 `await`。 - 用 `new Promise` 将回调转换为 Promise,调用方即可: ```javascript const ok = await confirmAction("确定要全部关闭吗?"); if (!ok) return; // 用户取消则中断后续流程 ``` ### 关于 `!!(res && res.confirm)` - `res && res.confirm`:若存在回调结果再读取 `confirm`,否则为 `false`。 - `!!value`:将任意值强制转为布尔,等价 `Boolean(value)`。 - 语义:仅当用户点击“确认”时返回 `true`,其他情况均为 `false`。 ### 已接入的高风险操作 - `handleAllOpen`:全部开启 - `handleAllClose`:全部关闭 - `handleForceOpen`:强制开启(需选中单元) - `handleForceClose`:强制关闭(需选中单元) - `handleResetDuration`:时长归零(需选中单元) 接入方式统一如下(示例): ```javascript const ok = await this.confirmAction("确定要全部开启吗?"); if (!ok) return; // 继续调用接口 ``` ### 可定制项(如需) - 通过 `uni.showModal` 的参数可定制: - `title`:标题 - `content`:正文 - `showCancel`:是否显示取消按钮 - `confirmText` / `cancelText`:按钮文案 - `confirmColor` / `cancelColor`:按钮颜色 若需要让“取消”成为更显眼的默认选择,可调整按钮文案与颜色,或在交互上将危险操作改为二次输入确认。 ### 错误处理(可选增强) 如需捕获弹窗失败(极少见),可在封装中补充 `fail` 并 `reject(err)`,调用方用 `try/catch` 处理: ```javascript try { const ok = await confirmAction("确定继续吗?"); if (!ok) return; // ... } catch (e) { // 统一错误上报或提示 } ```