# 小程序 WebView 模块接入 后续管理端业务进入微信小程序时,**只加 H5 路由与工作台入口**,不要再复制鉴权、登录注入或第二个 `web-view` 页。 接入约束见本文「已有骨架」与「新模块 5 步」。已落地:运输计划 `/#/m/pl/plan`、CRM 产品 `/#/m/crm/product`、CRM 报价 `/#/m/crm/quote*`、CRM 合同 `/#/m/crm/contract*`、CRM 客户 `/#/m/crm/customer`。 **列表卡 / 确认弹窗视觉标准**(扁平折叠卡为全部 `/m/**` 新标准;旧 expense-card 过渡):见 `docs/miniprogram-ui-spec-sanqiang.md` §12、OpenSpec「工作台 WebView 业务页」。参考实现:`web-admin/src/views/m/crm/customer/index.vue`、`web-admin/src/views/m/crm/product/index.vue`。 ## 已有骨架(不要新建) | 层 | 路径 | |----|------| | 小程序壳 | `miniprogram/pages/common/mp-webview.vue`(主包已注册) | | 换票 | `POST /api/web/auth/mp-webview-ticket`(需登录,走加密)→ H5 `POST /api/web/auth/mp-webview-exchange`(加密排除) | | H5 壳 | `web-admin/src/layouts/MpWebviewShell.vue` | | 路由识别 | `isMpWebviewPath`(`/m/` 前缀)、静态路由 `meta.isMpWebview` | | 视觉 | 三墙绿 `#0a9f6d`(`src/styles/mp-webview.scss`),不是管理端 Fresh Mint | ## 新模块 5 步 1. **H5 页面**:在 `web-admin/src/views/m//` 写列表/详情等;套 `MpWebviewShell`。桌面弹窗可加 `variant="page"` 全屏复用,不要重写业务规则。 2. **静态路由**:`web-admin/src/router/routes/staticRoutes.ts` 增加 `/m/...`,`meta: { isHideTab: true, isMpWebview: true }`,且必须写在 catch-all 之前。不要挂桌面 `index/index` 布局。 3. **工作台入口**:`miniprogram/config/workbench-menus.js` 增加一项;`config/api.js` 的 `WORKBENCH_ROUTE_MAP` 指向**同一个**壳: `pages/common/mp-webview?path=` + `encodeURIComponent('/m/...')`。 4. **双权限**:入口菜单用 `mini:...`;业务 API 仍校验对应 Web `perms`。角色需同时具备两者(参考 `docs/sql/migrations/2026-09-14-mini-pl-plan-webview-menus.sql`)。 5. **发版**:微信业务域名已配置时,只发 `web-admin` 静态资源即可,**不必提审**小程序。 禁止:每个模块再做一个 `web-view` 页面、再做一套登录注入、URL 长期带 `accessToken`、把公开司机/现场 token 页(`/#/public/pl/transport/:token`)当登录模板。 ## 运输计划对照 - 列表 `/m/pl/plan`,详情 `/:id`,表单 `/new` `/:id/edit` `/:id/arrange`,打印 `/:id/print`,三方人车 `/paste` - 工作台 code `pl-plan-webview`,perms `mini:pl:plan:manage` - 与原生现场页 `pages/pl/transport-plan/*`(`mini:pl:transportPlan:list`)并存,不要混名 ## CRM 产品对照 - 列表 `/m/crm/product`,详情 `/:id`,表单 `/new` `/:id/edit`,分类 `/categories` - 工作台 code `crm-product-webview`,perms `mini:crm:product:list` - 业务 API:现有 `/web/crm/products/*`、`/web/crm/product-categories/*` - 不做:导入/导出/批量上下架 ## CRM 报价对照 - 管理列表 `/m/crm/quote`,审批列表 `/m/crm/quote/approval`,详情 `/:id`,表单 `/new` `/:id/edit`,版本 `/:id/versions` - 工作台 code `crm-quote-webview` / `crm-quote-approval-webview`,perms `mini:crm:quote:list` / `mini:crm:quote:approve` - 业务 API:现有报价 list/detail/CRUD/submit/invalid/versions/approval;审批人设置仅 get 预填 - 不做:分享、转合同、生成报价单/PDF、导出、批量提交/审批、审批人设置菜单 ## CRM 合同对照 - 管理 `/m/crm/contract`,审批 `/m/crm/contract/approval`,详情 `/:id`,表单 `/new` `/:id/edit` - 工作台 code `crm-contract-webview` / `crm-contract-approval-webview` - perms `mini:crm:contract:list` / `mini:crm:contract:approve` - 支持单条与批量提交/审批;含复制、作废/恢复、上传扫描件 - 不做:调价函、打印/PDF、导出、执行、续签 ## CRM 客户管理对照 - 列表 `/m/crm/customer`,新增 `/new`,详情 `/:id`,编辑 `/:id/edit`。 - 工作台 code `crm-customer-webview`,perms `mini:crm:customer:list`。 - 四视图、搜索、字段筛选、日期排序、卡片字段显示、客户增改查及批量删除/放公海。 - 客户证件、跟进及附件、联系人、开票资料(含快速识别和默认设置)、关联商机/合同、操作日志。 - 复用已有客户/联系人/开票接口,独立移动组件,Web 客户组件保持不变;不提供导出。 - 菜单脚本:`docs/sql/migrations/2026-10-17-mini-crm-customer-webview-menus.sql`。 - 首次上线需要发布本次含工作台新入口的小程序包、部署 H5 并执行菜单 SQL。之后仅调整 H5 页面可独立部署静态资源。 ## 运输管理危化品证上传对照 - 列表 `/m/pl/plan-cert`,详情为独立页面 `/m/pl/plan-cert/:id`,上传继续使用本模块移动 Bottom Sheet。详情支持直达、刷新和标准返回,不使用票根或顶部记录摘要。 - 工作台 code `pl-plan-cert-webview`,入口 perms `mini:pl:plan-cert:list`;写操作仍分别按 Web `pl:plan-cert:upload`、`pl:plan-cert:ready` 显示并检查。 - 五个文字 Tab:未上传证书(默认)、全部、入库单、出库单、直销单。不提供导出。 - 复用计划列表/详情、产品证书、齐备接口与附件上传,不新增业务表,不修改桌面页面。 - 菜单脚本:`docs/sql/migrations/2026-10-17-mini-pl-plan-cert-webview-menus.sql`;仅新增移动叶子并为已有 Web 列表角色补齐移动根和运输父级。2026-10-17 已按用户授权在测试库执行,生产库未执行(历史执行记录,不代表当前部署状态)。 - 首次上线需发布含工作台入口的小程序包、部署 H5 并确认后执行上述 SQL;之后仅改 H5 内容可独立发版。 ## 回归清单(通用) - ticket 第二次 exchange 失败 - 换票后列表租户数据与桌面同账号一致 - 新增草稿、安排、复制、等通知、作废、打印预览、三方人车可走通 - 401 回小程序登录,不到 `/#/auth/login` - 只发 web-admin:改卡片文案在小程序 WebView 内可见 - 原生「运输计划单」现场页仍可用 - 生产加密:exchange 明文、后续计划 API 加密