# 首页内容配置 2026-09-17:按 `references/water-content-reference-20260917.png` 完成独立 `/water-content` 页面,替换通用 WaterWorkspace。复用现有 `sa_water_content`,无数据库迁移和持久测试数据;本次检查库内轮播0条,因此显示真实空状态。 ## 页面行为 - 左侧轮播列表:标题、投放人群、区域、有效时间、投放状态、编辑;按排序值倒序、ID倒序排列。支持标题/区域搜索、状态筛选、8条分页、重置及加载失败重试。 - “当前上线”统计全部已启用且在有效期内的内容,不受分页、搜索或状态筛选影响,不代表同一用户能看到的数量。 - 右侧按390:844比例展示选中素材。点击标题或行切换;待上线、已结束、停用素材也可检查外观,旁边显示状态及“选中素材预览”。空列表不填充参考图里的虚构宣传。 - 新建/编辑:标题、图片HTTP(S)地址、活动HTTP(S)链接、投放人群、区域、起止时间、排序和启停。旁边即时预览草稿,保存才生效;失败保留输入,保存期间禁止重复提交或关闭。图片加载失败回退标题卡片;活动链接仅允许HTTP(S),新标签安全打开,不渲染输入HTML。 - “预览移动端”打开人群模拟器:独立选择未首购/已购套餐、普通用户/企业管理员、区域,点击应用后从后端读取当前匹配轮播。管理员身份与购买状态可组合,不把企业管理员视为互斥购水阶段。 - 手机预览有手动轮播切换、套餐/订单/水卡/推广展示入口、真实上架套餐(最多3个,且商品规格也启用)及金额/权益。快捷入口是后台视觉展示,不实现手机端导航。商品空时显示“暂无上架套餐”。 - 窄屏左右区域改为单列,编辑器和表单列同步调整;表格可横向滚动。只读权限不显示新建/编辑,服务端仍校验写权限。 ## 业务规则与分层 - `service/WaterContentDashboard`:查询与预览应用服务,数据通过 Eloquent `WaterContent/WaterPackage` 模型处理。 - `service/content/ContentInput`:统一字段类型、长度、HTTP(S)链接、起止日期、排序及启停值校验;原 `WaterBusiness::save('content',...)` 委托校验并保留原事务/追加审计。 - `service/content/ContentPolicy`:列表、新看板、预览共享状态规则。停用优先;开始晚于当前时间为待上线;结束早于当前时间为已结束;其余投放中。开始/结束的精确秒包含在有效期内,采用上海时间。起止时间允许各自为空,均空表示长期,均有值时结束必须晚于开始。 - 区域留空或“全国”为全国;保存“全国”规范为空。其他区域按去首尾空格后的完整名称匹配,不擅自把“上海”“上海市”或“华东区”视为同一行政范围。缺少区域的预览只包含全国内容。 - 人群匹配为全部用户 + 对应购水状态;勾选企业管理员时再包含管理员内容。仅返回启用且当前有效的轮播,顺序同管理列表;预览最多20张并返回全部匹配数量。 - 控制器仍只处理鉴权/输入/响应。`GET /core/water/content/dashboard` 和 `GET /core/water/content/preview` 需要 `water:content:read`。写入复用 `POST /core/water/content`(原save动作),需要 `water:content:write`;不新增权限或改变角色。 - preview参数为 `purchase_status=new|purchased`、`is_enterprise_admin=0|1`、`region`;dashboard参数为 `keyword/status/page/limit`,limit默认8最大100。路由注册在通用water模块路由之前。 - **边界**:本次是后台配置和按条件模拟预览,不是已部署的小程序/App首页。实际客户端接入时应从可信登录身份、企业订单及授权角色推导人群,不得直接把本预览参数当成真实用户权限,也不通过内容配置开放代理入口。 ## 验证 ```powershell php -d extension=mbstring tests/water_content_dashboard_test.php --http php -d extension=mbstring tests/water_business_test.php ``` - 内容75项通过:保存/编辑/审计、日期边界及上海时区、上下线生效、分页排序、全量上线计数、人群组合、区域匹配、启用套餐/商品、非法内容与URL、权限、JSON提交及真实HTTP查询。原供水69项通过,所有测试夹具及审计全部回滚。 - 相关PHP语法、前端Prettier/ESLint/Stylelint和vue-tsc通过;Vite生产构建3331模块通过,dist更新。4173预览首页内容与当前dist一致,内容页资源SHA256核对一致。 - 浏览器工具仍存在会话内已确认的 `unsupported Codex auth method: apikey` 限制,未完成实际点击/截图验收,不能把HTTP和构建检查视为视觉验收。 前端文件:`src/api/water/content.ts` 和 `src/views/water/content/{index.vue,ContentEditor.vue,ContentPhone.vue,ContentPreviewDialog.vue,content.scss}`。