WATER_CONTENT.md 4.9 KB

首页内容配置

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首页。实际客户端接入时应从可信登录身份、企业订单及授权角色推导人群,不得直接把本预览参数当成真实用户权限,也不通过内容配置开放代理入口。

验证

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}。