docs: document host nginx frontend deployment

This commit is contained in:
hajimi
2026-08-03 04:52:35 +08:00
parent 2f933ef48f
commit c368a45d11
5 changed files with 505 additions and 28 deletions
+14
View File
@@ -140,6 +140,20 @@ git fetch origin dev.1.0.0
git pull --ff-only
```
当用户明确要求“直接覆盖”,且服务器本地修改或同路径未跟踪文件阻塞拉取时,使用下面的命令强制对齐远端分支。该操作会永久丢弃所有已跟踪文件的本地修改,并覆盖与远端跟踪文件同路径的未跟踪文件;不会执行全局 `git clean`,其它未跟踪运行文件仍会保留:
```bash
cd /www/wwwroot/test-server.sbnews.net
git fetch origin dev.1.0.0
sudo git -c safe.directory=/www/wwwroot/test-server.sbnews.net reset --hard origin/dev.1.0.0
sudo chown -R ubuntu:ubuntu .git
sudo chmod -R u+rwX .git
git rev-parse --short HEAD
git status --short --untracked-files=no
```
上述强制覆盖仅用于用户明确授权丢弃服务器本地改动的场景;不要附加无范围的 `git clean -fd`,避免删除构建产物、备份文件和服务器私有运行配置。
如果 `.git/objects` 权限异常,只修复 Git 元数据,不要递归修改整个项目:
```bash
@@ -35,7 +35,7 @@
- 使用浅蓝渐变、锁图形、标题、所需积分、当前余额、积分明细入口、主按钮和永久可读提示组成完整解锁区。
- 当前余额复用 `getCommunityUserStats()`,未登录时显示“登录后查看”。
- “积分明细”跳转现有 `/packages/pages/points_log/points_log`,不新增不存在的积分规则页面
- 解锁卡入口文案按设计稿显示“积分规则”;规则内容由管理端协议设置配置,用户端复用通用富文本页 `/pages/agreement/agreement?type=points_rule` 展示
- 主按钮状态区分“确认解锁 / 解锁中 / 已解锁”。
### 互动与评论
+459 -1
View File
@@ -13,6 +13,457 @@
## 一、已完成事项
### 125. 个人中心设计稿分组重排
- 状态:代码已完成,待 H5 验收 - 时间:2026-08-03
完成内容:
- 个人中心按设计稿重排为资料头部、数据统计、我的权益、内容与服务、账户与支持五个层级,统一为白底圆角卡片和蓝色线性图标风格。
- 页面仅保留设计稿中的积分中心、会员权益、我的帖子、我的评论、我的收藏、消息通知、钱包与订单、邀请记录、帮助与客服、设置入口;暂未具备独立页面的评论、通知入口提供友好提示。
- 资料头部兼容登录态、默认头像、等级信息、会员状态、未验证手机号提示及编辑资料入口。
涉及模块:
- `uniapp/src/pages/user/user.vue`
### 124. 彩票中心设计稿视觉优化
- 状态:代码已完成,待 H5 验收 - 时间:2026-08-03
完成内容:
- 彩票中心顶部改为 SB 品牌标识、彩票中心标题、AI 助手与分享入口的设计稿布局。
- 新增开奖大厅、我的关注、开奖日历导航视觉层级;彩种切换改为横向可滑动胶囊,保留后台彩种接口和当前选择逻辑。
- 新增开奖信息风险提示、更新时间刷新入口,以及包含彩种信息、开奖号码、下期开奖倒计时和详情/历史操作的最新开奖卡片。
- 详情按钮跳转开奖详情页,历史开奖按钮跳转开奖记录列表页,开奖结果与现有 API 数据保持兼容。
- 根据验收反馈统一收紧页面字号,标题、导航、彩种、开奖卡片、倒计时、号码和 AI 弹窗文字均降低一档,保持信息层级和可读性。
涉及模块:
- `uniapp/src/pages/lottery_analysis/lottery_analysis.vue`
### 123. 比赛详情直播间匹配与沉浸式播放器
- 状态:已完成 - 时间:2026-08-03
完成内容:
- 比赛详情接口在读取已绑定直播间的基础上,增加按直播标题同时命中主队、客队名称的房间匹配,并与已绑定结果去重合并。
- 命中直播时详情页将播放器前置为沉浸式主画面,展示直播状态、比赛时间、全屏入口及源站兜底。
- 多个匹配直播间使用横向房间切换条展示,切换后立即替换当前播放流;详情头部与比赛比分区域同步按设计稿收紧层级。
涉及模块:
- `server/app/common/service/match/MatchLiveService.php`
- `server/app/api/controller/MatchController.php`
- `uniapp/src/pages/match_detail/match_detail.vue`
- `uniapp/src/components/match-detail-header/match-detail-header.vue`
### 122. 积分中心设计稿页面
- 状态:已完成 - 时间:2026-08-03
完成内容:
- 新增积分中心页面,按设计稿实现可用积分卡片、积分明细入口、积分规则、快捷功能、最近明细、风险提示和底部明细按钮。
- 页面复用真实用户积分与积分流水接口,支持空状态、加载状态及明细跳转。
- 社区和个人中心的积分入口统一指向新的积分中心,保留原积分明细页作为完整流水页面。
涉及模块:
- `uniapp/src/packages/pages/points_center/points_center.vue`
- `uniapp/src/pages.json`
- `uniapp/src/pages/community/community.vue`
- `uniapp/src/pages/user/user.vue`
### 121. 热门联赛“全部”赛事筛选修复
- 状态:已完成 - 时间:2026-08-03
完成内容:
- 热门联赛页的首个筛选项统一显示为“全部”,不再显示“全部热门”。
- `/api/match/lists` 新增 `hot_only` 筛选参数,按管理端已配置的热门联赛查询赛事;无配置时稳定返回空结果。
- 用户端热门联赛“全部”改为由接口直接返回热门赛事,日期自动按返回数据校正,避免前端二次过滤与日期状态叠加导致空列表。
- 热门联赛模式的一级运动分类会根据已配置的热门二级联赛动态过滤;没有热门二级联赛的一级分类不再展示。
涉及模块:
- `server/app/api/controller/MatchController.php`
- `uniapp/src/api/match.ts`
- `uniapp/src/packages_match/components/MatchCenterTabsPanel.vue`
### 120. 世界杯赛程匹配直播入口
- 状态:已完成 - 时间:2026-08-03
完成内容:
- 世界杯赛程加载时同步读取现有直播列表;优先以赛事 ID 匹配,ID 不一致时以主客队名称和直播标题兜底匹配。
- 只有命中有效直播线路的赛程才显示“看直播”入口,避免无效跳转。
- 点击入口自动切换到对应直播卡并复用已有播放器逻辑。
涉及模块:
- `uniapp/src/packages_match/components/WorldCupPanel.vue`
### 119. 加密行情美元计价统一
- 状态:已完成 - 时间:2026-08-03
完成内容:
- 加密行情数据源从 CoinGecko 的 `cny` 切换为 `usd`,列表最新价、市值和市场概览的成交额均使用同一计价基准。
- 前端金额格式统一为 `$` 前缀及 `K / M / B / T` 缩写;接口总成交额字段同步更名为 `total_volume_usd`
- 行情缓存键增加 USD 版本后缀,避免旧人民币快照被当作美元数据展示。
涉及模块:
- `server/app/common/service/crypto/CryptoMarketService.php`
- `uniapp/src/api/crypto.ts`
- `uniapp/src/pages/crypto/crypto.vue`
### 118. 帖子详情互动与评论区设计稿对齐
- 状态:已完成 - 时间:2026-08-03
完成内容:
- 互动统计和评论列表合并为连续内容卡,移除重复的“评论(n)”标题,使用一条分割线衔接,匹配设计稿的信息层级。
- 评论项调整为头像、昵称、正文、时间与回复的纵向结构;单条点赞固定在正文右侧,避免挤入时间操作行。
- 互动统计与评论点赞统一复用紧凑计数方法,支持 `k / 万 / 亿` 显示,并保留点赞、回复和删除的既有交互。
- 页面主体、解锁卡、互动评论与输入栏的字号、头像、图片高度及内外边距已统一收紧,提升单屏信息密度。
涉及模块:
- `uniapp/src/packages_community/pages/post_detail.vue`
- `uniapp/src/packages_community/components/post-card.vue`
- `uniapp/src/utils/number.ts`
### 116. 帖子详情积分解锁卡视觉还原
- 状态:已完成 - 时间:2026-08-03
完成内容:
- 解锁卡调整为设计稿的横向层级:浅蓝渐变背景、三层同心圆、实心锁图标、限制宽度的解锁信息区和宽幅渐变确认按钮。
- 所需积分、当前余额、底部永久可读提示的字号、间距与颜色层级已同步优化;底部移除多余分隔线。
- 入口文案按设计稿改为“积分规则”,点击复用通用富文本协议页,并读取后台配置的积分规则内容。
- “积分规则”文字与箭头图标采用固定行高和 flex 中线对齐,保证跨端显示时两者上下居中。
涉及模块:
- `uniapp/src/packages_community/pages/post_detail.vue`
### 117. 积分规则后台配置与通用富文本页接入
- 状态:已完成 - 时间:2026-08-03
完成内容:
- 管理端 `setting/website/protocol` 新增“积分规则”标题和富文本编辑器,与现有服务协议、隐私协议共用保存入口。
- 协议配置新增 `points_rule_title``points_rule_content`,保存时处理富文本中的文件域名,读取时恢复完整文件地址。
- 帖子解锁卡“积分规则”跳转至已有通用协议页 `/pages/agreement/agreement?type=points_rule`,不再跳转积分明细。
涉及模块:
- `admin/src/views/setting/website/protocol.vue`
- `server/app/adminapi/logic/setting/web/WebSettingLogic.php`
- `uniapp/src/enums/agreementEnums.ts`
- `uniapp/src/packages_community/pages/post_detail.vue`
验证说明:
- 按当前任务边界未执行 H5 构建或部署。
### 115. 帖子编辑标签计数字段修复
- 状态:已修复并同步测试服 - 时间:2026-08-02
完成内容:
- 修复帖子全字段编辑保存时刷新标签帖子数写入 `la_community_tag.update_time` 导致的 `fields not exists:[update_time]` 错误。
- 标签计数刷新仅更新真实存在的 `post_count` 字段;帖子与分类表原有更新时间逻辑保持不变。
涉及模块:
- `server/app/adminapi/logic/community/CommunityPostLogic.php`
### 114. 帖子编辑验证器方法冲突修复
- 状态:已修复并同步测试服 - 时间:2026-08-02
完成内容:
- 修复 `CommunityPostValidate::checkExt()` 与 ThinkPHP 父类文件扩展名校验方法同名、签名不兼容导致的 PHP 致命错误。
- 自定义扩展 JSON 校验方法更名为 `checkExtJson()`,帖子全字段编辑接口参数与校验逻辑保持不变。
涉及模块:
- `server/app/adminapi/validate/community/CommunityPostValidate.php`
### 113. 锁定付费帖子免费预览展开按钮
- 状态:已完成 - 时间:2026-08-02
完成内容:
- 修复帖子详情页仅在摘要超过 90 字或 3 行时显示“展开”的问题,未解锁付费帖子现在始终提供展开入口。
- 折叠状态将“展开”定位在免费摘要末行右侧,并增加白色渐变衔接,贴近设计稿效果。
- 展开操作只切换接口已返回的免费预览,不请求或展示锁定全文,付费解锁边界保持不变。
涉及模块:
- `uniapp/src/packages_community/pages/post_detail.vue`
验证说明:
- 按当前任务边界未执行 H5 构建或部署。
### 112. 社区顶部积分入口垂直居中
- 状态:已完成 - 时间:2026-08-02
完成内容:
- 社区频道工具栏改为垂直居中对齐,积分入口取消底部偏移。
- 积分入口恢复对称的上下内边距,使积分图标、文字和箭头在按钮及导航栏内上下居中。
涉及模块:
- `uniapp/src/pages/community/community.vue`
验证说明:
- 按当前任务边界未执行 H5 构建或部署。
### 111. 管理端帖子全字段编辑
- 状态:代码已完成并同步测试服 - 时间:2026-08-02
完成内容:
- `app/community/post` 编辑弹窗按基础信息、正文素材、付费设置、统计数据、展示状态和扩展数据重新分区。
- 除自增 ID、自动更新时间和软删除时间外,帖子主表全部业务字段均可编辑;同时支持维护帖子图片与最多 3 个关联标签。
- 后端完整编辑接口使用显式字段白名单、事务更新标签关系与分类/标签帖子数,并按最新审核状态同步 AI 知识库。
- 原“编辑内容”权限升级为“编辑帖子”权限,已有角色授权通过幂等 SQL 自动迁移。
涉及模块:
- `server/app/adminapi/controller/community/CommunityPostController.php`
- `server/app/adminapi/logic/community/CommunityPostLogic.php`
- `server/app/adminapi/validate/community/CommunityPostValidate.php`
- `server/app/adminapi/logic/community/CommunityTagLogic.php`
- `admin/src/api/community.ts`
- `admin/src/views/community/post/index.vue`
- `docs/sql/upsert_community_post_edit_permission.sql`
### 110. 社区帖子计数显示优化
- 状态:已完成 - 时间:2026-08-02
完成内容:
- 优化帖子卡片关注数、浏览量、评论数和点赞数的共用格式化逻辑,整数单位值不再显示无意义的 `.0`
- 保留 `k / 万` 紧凑显示并补充“亿”单位;空值、负数和非法数值统一显示为 `0`,小数计数向下取整。
涉及模块:
- `uniapp/src/packages_community/components/post-card.vue`
验证说明:
- 按当前任务边界未执行 H5 构建或部署。
### 109. 付费帖子卡片顶部状态对齐
- 状态:已完成 - 时间:2026-08-02
完成内容:
- 锁定付费帖将 `post-card__paid-notice``post-card__status` 合并到卡片顶部同一行,付费提示居左,积分状态与更多按钮固定右上角并使用顶部对齐,不再垂直居中。
- 免费或已解锁帖将“免费”状态与更多按钮脱离作者栏的垂直居中布局,固定到卡片右上角;作者栏同步预留右侧空间,避免昵称和关注数与状态重叠。
涉及模块:
- `uniapp/src/packages_community/components/post-card.vue`
验证说明:
- 按当前任务边界未执行 H5 构建或部署。
### 108. 社区帖子卡片互动栏三等分
- 状态:已完成 - 时间:2026-08-02
完成内容:
- `post-card__actions` 仅保留浏览量、评论数和点赞数,移除列表卡片中的 AI 分析与分享入口。
- 三个互动项使用等宽布局,各占一行的三分之一并水平居中;帖子详情页原有 AI 分析和分享功能保持不变。
- 清理社区列表页不再使用的 AI 分析事件监听与处理方法。
涉及模块:
- `uniapp/src/packages_community/components/post-card.vue`
- `uniapp/src/pages/community/community.vue`
验证说明:
- 按当前任务边界未执行 H5 构建或部署。
### 107. 管理端帖子内容编辑
- 状态:代码已完成并同步测试服 - 时间:2026-08-02
完成内容:
- `app/community/post` 帖子管理列表新增“编辑”入口,使用列表返回的完整内容回填独立弹窗并保存。
- 初版新增管理端帖子内容编辑能力,现已由第 111 项升级为 `/adminapi/community.communityPost/edit` 全字段编辑接口。
- 已审核帖子修改内容后自动重新投递知识库同步任务,确保 AI 知识库内容随后更新。
- 新增“编辑内容”按钮权限 SQL,并默认授权超级管理员角色。
涉及模块:
- `server/app/adminapi/controller/community/CommunityPostController.php`
- `server/app/adminapi/logic/community/CommunityPostLogic.php`
- `server/app/adminapi/validate/community/CommunityPostValidate.php`
- `admin/src/api/community.ts`
- `admin/src/views/community/post/index.vue`
- `docs/sql/upsert_community_post_edit_permission.sql`
### 106. 社区帖子卡片作者关注数
- 状态:已完成并同步测试服 - 时间:2026-08-02
完成内容:
- 社区帖子列表接口按当前页作者批量聚合 `la_community_follow.follow_user_id`,在 `post.user.fans_count` 返回作者被关注人数,避免逐帖查询。
- 用户端 `post-card__identity` 在昵称后新增蓝色关注数胶囊,按设计稿显示“关注 3.2万”等格式,并与置顶标识保持同一行。
涉及模块:
- `server/app/api/lists/community/CommunityPostLists.php`
- `uniapp/src/packages_community/components/post-card.vue`
验证记录:
- `CommunityPostLists.php` 已通过 PHP 语法检查,`post-card.vue` 已通过 Vue SFC 解析与模板编译检查。
- 已同步测试服并请求 `/api/community/postLists`,确认 `post.user.fans_count` 正常返回;测试库作者“东京不热”关注人数为 1,接口返回值同为 1。
- 本次未执行完整 H5 构建。
### 105. 社区顶部话题栏切换为分类数据源
- 状态:代码已修改,待页面验收 - 时间:2026-08-02
完成内容:
- 新增公开接口 `/api/community/categoryLists`,只返回已启用的 `la_community_post_category` 分类,并按后台排序值倒序展示。
- 用户端 `community-topics` 不再调用标签表接口 `/api/community/tagLists`,改为消费社区分类接口。
- 点击顶部分类后保持当前“推荐 / 关注 / 热门 / 话题”频道,只叠加 `category_id` 筛选,不再强制切换到话题广场;切换频道时清除当前分类筛选。
- 重复点击当前已激活分类会取消选中,将 `category_id` 恢复为 0 并重新加载当前频道不带分类筛选的完整列表。
- 兼容读取旧的本地标签选择记录,分类不存在时自动清除当前筛选。
涉及模块:
- `server/app/api/controller/CommunityController.php`
- `uniapp/src/api/community.ts`
- `uniapp/src/pages/community/community.vue`
### 104. 社区推荐频道全量排序
- 状态:已完成并同步测试服 - 时间:2026-08-02
完成内容:
- 社区“推荐”频道不再只过滤 `is_recommend=1`,改为展示全部已发布帖子。
- 推荐频道排序规则调整为 `is_recommend DESC, sort DESC, create_time DESC, id DESC`,推荐帖优先,其次按后台排序值,最后按发布时间倒序。
- 新增 `la_community_post.sort` 数值排序字段、组合索引和管理端快捷设置接口及输入框。
涉及模块:
- `server/app/api/lists/community/CommunityPostLists.php`
- `server/app/adminapi/controller/community/CommunityPostController.php`
- `server/app/adminapi/logic/community/CommunityPostLogic.php`
- `server/app/adminapi/validate/community/CommunityPostValidate.php`
- `admin/src/views/community/post/index.vue`
- `admin/src/api/community.ts`
- `uniapp/src/pages/community/community.vue`
- `docs/sql/alter_community_post_add_sort.sql`
验证说明:
- 测试服运行库已新增 `sort` 字段和 `idx_status_recommend_sort` 组合索引,管理端“设置排序”权限已写入并授予角色 1。
- `/api/community/postLists?feed=recommend` 返回全部 23401 条可见帖子,首条为推荐帖,后续未推荐帖子按排序值和发布时间倒序返回。
- 已完成修改 PHP 文件语法检查、Admin/uni-app Vue 单文件组件解析编译检查及 `git diff --check`;未执行完整前端构建。
### 103. 社区帖子频道字段与独立分类管理
- 状态:已完成并同步测试服 - 时间:2026-08-02
完成内容:
- 复用帖子已有 `is_recommend``is_hot` 字段,新增 `is_topic` 与单选 `category_id`,推荐、热门、话题频道改为由服务端字段直接筛选。
- 新增 `la_community_post_category` 独立分类表;初始化时从 `la_community_tag` 复制名称、图标、排序和状态并保留原 ID,历史帖子按标签排序回填主分类,已有标签的帖子初始化为话题帖。
- 新增管理端帖子分类列表、新增、编辑、删除和全部分类接口;被帖子引用的分类禁止删除。
- 帖子管理页增加分类、推荐、热门、话题筛选,增加分类单选以及推荐、热门、话题快捷开关。
- 用户端社区推荐、热门、话题频道改为向 `/api/community/postLists` 传递对应字段;话题标签筛选继续通过 `tag_id` 叠加。
- 新增幂等 SQL 初始化分类表、字段、索引、历史数据、菜单和管理员角色权限。
涉及模块:
- `server/app/common/model/community/CommunityCategory.php`
- `server/app/adminapi/controller/community/CommunityCategoryController.php`
- `server/app/adminapi/logic/community/CommunityCategoryLogic.php`
- `server/app/adminapi/validate/community/CommunityCategoryValidate.php`
- `server/app/adminapi/lists/community/CommunityCategoryLists.php`
- `server/app/adminapi/*/community/CommunityPost*.php`
- `server/app/api/lists/community/CommunityPostLists.php`
- `admin/src/views/community/category/index.vue`
- `admin/src/views/community/post/index.vue`
- `admin/src/api/community.ts`
- `uniapp/src/pages/community/community.vue`
- `docs/sql/create_community_post_categories.sql`
验证说明:
- 测试服运行库已创建 17 个帖子分类并与现有 17 个标签完成一次性初始化;帖子分类、话题字段及 4 组查询索引均已存在,9 个管理菜单/按钮权限已授予超级管理员。
- 测试服 `/api/community/postLists` 的推荐、热门、话题筛选均返回 `code=1`;当前发布数据中推荐 0 条、热门 4 条、话题 23396 条。
- 已完成 PHP 语法检查、Vue 单文件组件解析/编译检查、跨文件字段契约检查、`git diff --check` 与前端代码 review;按任务边界未执行完整前端构建或自动化测试。
### 102. 生产环境统一 Docker Compose
- 状态:配置已完成,待生产服务器部署验收 - 时间:2026-08-02
完成内容:
- 新增生产 Compose,统一运行 Server、API Nginx、Scheduler、Crawler、KB Worker、Admin 构建版和 uni-app H5 构建版。
- 生产容器使用 host 网络连接宿主机 MySQL `3300` 与 Redis `6377/DB2`,数据库和缓存继续由宿主机管理。
- Admin 与 H5 使用 Node 多阶段构建和独立静态 Nginx,由宝塔分别反向代理三个正式域名。
- 新增生产私有环境模板、回环端口限制、健康检查、日志轮转、部署验证和回滚说明。
涉及模块:
- `docker/docker-compose.prod.yml`
- `docker/Dockerfile.admin`
- `docker/Dockerfile.uniapp-h5`
- `docker/config/nginx/`
- `docker/config/php/`
- `docs/生产环境Docker部署说明.md`
### 101. 加密行情设计稿重构与账号自选同步
- 状态:已完成并同步测试服,H5 页面已复核 - 时间:2026-08-02
完成内容:
- 加密行情页按设计稿重构顶部标题、圆形 AI 助手、热门/自选/涨幅榜/跌幅榜/成交额导航、搜索入口、市场概览、三列行情表格和星标收藏交互。
- 行情数据改由后端统一获取 CoinGecko 人民币市场数据,展示真实币种 Logo、人民币价格、市值、24h 涨跌、BTC 市值占比和全市场 24h 成交额;服务端增加短缓存与最近成功数据降级。
- 新增账号级加密自选表 `la_crypto_favorite`,通过 `user_id + symbol` 唯一约束实现幂等收藏;新增自选列表、加入自选和取消自选接口,登录账号可跨设备同步。
- 修正旧页面将成交额误标为市值的问题,并按设计稿统一为绿色上涨、红色下跌。
- 底部导航文案由“加密行情”统一调整为“行情”,同步更新 `pages.json` 与测试库 `la_decorate_tabbar`
涉及模块:
- `server/app/api/controller/CryptoController.php`
- `server/app/api/logic/CryptoLogic.php`
- `server/app/api/validate/CryptoValidate.php`
- `server/app/common/model/crypto/CryptoFavorite.php`
- `server/app/common/service/crypto/CryptoMarketService.php`
- `uniapp/src/api/crypto.ts`
- `uniapp/src/pages/crypto/crypto.vue`
- `uniapp/src/pages.json`
- `docs/sql/create_crypto_favorite_and_market_config.sql`
验证说明:
- 已完成修改 PHP 文件语法检查、Vue 单文件组件模板/脚本/SCSS 解析检查和 `pages.json` 解析检查。
- 已验证测试服行情接口返回 20 个币种;测试账号加入 BTC 后自选接口可读取,取消后同步移除;430×932 H5 页面已复核搜索、自选、星标、底部“行情”文案和主要视觉布局。
- 按当前任务边界未执行 H5 完整构建或自动化测试。
### 100. 赛事中心新版设计稿视觉重构
- 状态:代码已修改,待页面验证 - 时间:2026-08-02
完成内容:
- `/packages_match/pages/worldcup` 默认赛事主页按新版设计稿重构为居中标题、圆形 AI 助手、三段式顶部导航、三日日期选择、日历选择器、运动分类和联赛筛选。
- 赛程列表按进行中、即将开始、已结束重新组织视觉层级,增加分组圆点、场次数量、查看更多入口和底部安全区留白。
- 新增赛事中心专用比赛卡片,进行中赛事展示比分、分钟、直播状态和看直播入口;未开始赛事展示日期时间、球队标志、比赛详情和 AI 分析入口,不影响比赛详情页复用的通用比赛卡片。
- 日期筛选基于现有赛事接口返回结果在客户端按设备本地时区过滤。
- 联赛管理新增“热门联赛”字段和快捷开关;用户端“热门联赛”顶部导航不再跳转世界杯专题,而是只展示后台标记为热门的联赛及其赛事,没有配置时明确展示空状态。
- 赛事中心继续沿用同一套信息架构,并进一步收紧标题、导航、日期筛选、联赛筛选和比赛卡片的字号、内边距与分组间距,提升首屏信息密度。
- 管理端 `match/league` 编辑弹窗放开二级联赛图标配置,继续复用现有 `la_league.icon` 字段和素材选择器,无需新增接口或数据库字段。
涉及模块:
- `uniapp/src/packages_match/components/MatchCenterPanel.vue`
- `uniapp/src/packages_match/components/MatchCenterTabsPanel.vue`
- `uniapp/src/packages_match/components/MatchCenterScheduleCard.vue`
- `admin/src/views/match/league/index.vue`
- `server/app/adminapi/logic/match/LeagueLogic.php`
- `server/app/api/controller/MatchController.php`
- `docs/sql/alter_la_league_add_is_hot.sql`
验证说明:
- 已完成模板、脚本与样式静态检查,按当前任务边界未执行 H5 构建或部署。
### 99. 社区标签图标管理与用户端展示
- 状态:代码已修改,待页面配置验收 - 时间:2026-08-02
@@ -20,7 +471,7 @@
完成内容:
- 社区标签管理页新增图标上传、预览和编辑回显,复用管理端现有素材选择器。
- 后端补充 `la_community_tag.icon` 字段校验及图片地址存取规范化,管理端和用户端接口统一返回可访问的完整图片地址。
- 社区用户端话题栏优先展示后台上传的标签图标;未配置图标时继续使用原有默认图标,兼容存量标签
- 社区用户端 `community-topics` 统一使用图片组件展示后台标签 `icon`;未配置或图片加载失败时使用项目内置社区默认图片,不再显示 Emoji 图标
涉及模块:
- `admin/src/views/community/tag/index.vue`
@@ -39,6 +490,7 @@
- 后端 `/api/community/postDetail` 改为按 `free_content_len` 返回 20~500 字的免费预览,异常时默认 100 字,不再硬编码 20 字。
- 修复付费特朗普帖子可能通过 `translated_content` 泄露全文的问题:锁定状态不生成或返回译文,解锁后继续沿用原翻译链路。
- 增加帖子详情和评论加载失败的可重试状态、点赞进行中保护、非负计数处理及评论头像失效回退。
- 特朗普等已有译文的帖子详情按逗号、分号、句号、感叹号和问号切成短语,采用“一段原文紧跟一段译文”显示;两侧数量不一致时自动合并较多一侧的相邻短片段,避免空侧和内容丢失,同时保护英文缩写、小数及数字千分位。
涉及模块:
- `server/app/api/controller/CommunityController.php`
@@ -86,6 +538,7 @@
完成内容:
- 社区 Tab 的规范入口由 `/pages/empty/empty` 更正为 `/pages/community/community`;原路径和旧分包入口均保留自动跳转,避免旧链接或后台旧配置中断访问。
- 将社区页改为搜索、积分入口、频道导航、动态话题胶囊和卡片式讨论流布局,并重构帖子卡片的信息层级、付费解锁区、互动栏与图片展示。
- 付费帖子未解锁区域按设计稿改为上深下浅的蓝灰到白色纵向渐变面板,解锁说明位于顶部,“查看详情”描边按钮位于底部居中;接口和解锁逻辑保持不变。
- 继续复用现有社区帖子、标签、积分、点赞、付费解锁、发布、分享和 AI 分析接口,未变更后端契约。
涉及模块:
@@ -2033,5 +2486,10 @@
## 四、避坑记录
- **跨模型批量更新前必须逐表核对字段**:`la_community_post``la_community_post_category``update_time`,但 `la_community_tag` 只有 `create_time`;复用计数刷新写法时不能默认所有业务表都有更新时间字段,否则 ThinkPHP 模型会直接返回 `fields not exists` 并导致事务回滚。
- **ThinkPHP 验证器自定义规则不能覆盖父类同名方法**:`think\Validate` 已内置 `checkExt(File $file, $ext): bool` 用于文件扩展名校验,自定义 JSON 校验若也命名为 `checkExt($value)`,PHP 会因继承方法签名不兼容而在加载验证器时直接致命退出;自定义规则应使用明确且不冲突的名称,如 `checkExtJson`
- **测试服后台上传目录必须匹配 PHP-FPM 用户**:`sport-era-dev-server-1` 中 PHP-FPM 工作进程使用 `www-data`UID 33),而宿主机 `www` 为 UID 1001;若 `server/public/uploads``www:www` 且为 `755`,上传接口无法创建 `uploads/images/YYYYMMDD`。修复时仅对 `server/public/uploads` 执行 `chown -R www-data:www-data`,目录保持 `755`、文件 `644`,并通过容器内 `www-data` 实测创建当天目录;不要递归修改整个项目目录。
- **Docker crawler 新增任务后,不能只同步源码不重建容器**:像 `match_live_stream.py` 这类新增动作,即使服务器目录里已经有文件,运行中的 `sport-era-crawler` 仍可能还是旧镜像;要同时检查容器内 `/app/<task>.py``/app/config/crawler_tasks.yaml``/etc/cron.d/sport-era-crawler` 是否都已加载新任务,否则会出现“代码在服务器上、任务却永远不执行”的假象。
- **Docker 外层 runner 与任务脚本内部不要重复抢同名锁**:`docker_task_runner.py` 已经按 action 加过锁,任务脚本内部如果再对同名 action 抢文件锁,会出现“任务日志连续成功、数据库完全没更新”的假成功症状;后续新增 Docker crawler 任务时,要先确认锁只保留一层,或显式区分 runner 锁和脚本独立执行锁。
+22 -20
View File
@@ -8,7 +8,8 @@
- Admin`keislwo.sbnews.net`
- H5`web.sbnews.net`
- MySQL、Redis、域名和 HTTPS 由宿主机/宝塔管理。
- Docker Compose 负责 Server、Scheduler、Crawler、KB Worker、Admin 和 H5
- Docker Compose 负责 Server、Scheduler、Crawler、KB Worker 和 API Nginx
- Admin/H5 由宿主机 Nginx 直接读取 `server/public/admin``server/public/mobile`,不再运行独立前端容器。
生产 MySQL 和 Redis 不放入 Compose
@@ -31,9 +32,18 @@ chmod 600 docker/.env.server.production docker/.env.crawler.production
# 使用编辑器填写真实密码及 API Key,不要把真实配置提交到 Git。
sudo docker compose -f docker/docker-compose.prod.yml config -q
sudo docker compose -f docker/docker-compose.prod.yml up -d --build
sudo docker compose -f docker/docker-compose.prod.yml up -d --no-build --remove-orphans
```
前端产物在本地构建后同步到生产目录:
```bash
cd admin && npm run build
cd ../uniapp && npm run build:h5
```
构建结果分别写入 `server/public/admin``server/public/mobile`
## 日常更新
```bash
@@ -46,7 +56,7 @@ git tag -f production-stable "$(git rev-parse HEAD)"
git switch dev.1.0.0
git pull --ff-only origin dev.1.0.0
sudo docker compose -f docker/docker-compose.prod.yml config -q
sudo docker compose -f docker/docker-compose.prod.yml up -d --build
sudo docker compose -f docker/docker-compose.prod.yml up -d --no-build --remove-orphans
```
构建失败时不要删除现有容器和镜像;确认构建成功后再重新创建服务。Compose 不自动执行数据库迁移、SQL 导入或其他破坏性数据操作。
@@ -73,26 +83,20 @@ location / {
### keislwo.sbnews.net
```nginx
root /www/wwwroot/sbnews/server/public/admin;
location / {
proxy_pass http://127.0.0.1:5176;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
try_files $uri $uri/ /index.html;
}
```
### web.sbnews.net
```nginx
root /www/wwwroot/sbnews/server/public/mobile;
location / {
proxy_pass http://127.0.0.1:5177;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
try_files $uri $uri/ /index.html;
}
```
@@ -103,8 +107,6 @@ location / {
```bash
sudo docker compose -f docker/docker-compose.prod.yml ps
curl -f http://127.0.0.1:8000/api/index/config
curl -I http://127.0.0.1:5176/
curl -I http://127.0.0.1:5177/
curl -I https://api.sbnews.net/api/index/config
curl -I https://keislwo.sbnews.net/
curl -I https://web.sbnews.net/
@@ -112,7 +114,7 @@ curl -I https://web.sbnews.net/
重点确认:
- `server``scheduler``crawler``kb-worker``api-nginx``admin``uniapp-h5` 均处于运行状态
- `server``scheduler``crawler``kb-worker``api-nginx` 处于运行状态;不应再有 `admin``uniapp-h5` 容器
- Scheduler 能产生正常定时任务日志。
- Crawler 容器已生成 `/etc/cron.d/sport-era-crawler`
- KB Worker 能连接 Redis Stream `ai:kb:sync:stream`,没有持续重试错误。
@@ -122,7 +124,7 @@ curl -I https://web.sbnews.net/
查看日志:
```bash
sudo docker compose -f docker/docker-compose.prod.yml logs --tail 100 server api-nginx scheduler crawler kb-worker admin uniapp-h5
sudo docker compose -f docker/docker-compose.prod.yml logs --tail 100 server api-nginx scheduler crawler kb-worker
```
## 回滚
@@ -133,7 +135,7 @@ sudo docker compose -f docker/docker-compose.prod.yml logs --tail 100 server api
cd /www/wwwroot/sbnews
git status --short
git switch --detach production-stable
sudo docker compose -f docker/docker-compose.prod.yml up -d --build
sudo docker compose -f docker/docker-compose.prod.yml up -d --no-build --remove-orphans
```
回滚完成后,如需继续跟踪生产分支:
+9 -6
View File
@@ -22,14 +22,17 @@
| 设计稿名称 | uniapp 页面路径 | 状态 | 备注 |
| --- | --- | --- | --- |
| 赛事中心(含世界杯专题入口) | `uniapp/src/pages/match/match.vue` | ✅ 已完成 | 2026-07-11 赛程、直播、赔率改为在赛事中心当前内容区域切换;运动和联赛分类仅在赛程显示,赔率只保留盘口与联赛/球队搜索;2026-08-01 `/packages_match/pages/worldcup` 作为赛事 Tab 入口时默认展示赛事主页,专题仅由页面内入口打开 |
| 赛事详情页 | `uniapp/src/pages/match_detail/match_detail.vue` | 🚧 部分完成 | 2026-05-29 优化顶部赛事摘要头部,补充联赛、对阵、状态与直播入口信息 |
| 世界杯专题页(排名导航) | `uniapp/src/packages_match/pages/worldcup.vue` | 🚧 部分完成 | 2026-05-20 已按设计稿拆分排名导航、积分榜、球员榜组件,后续可继续细化表格视觉与新闻页样式 |
| 积分中心 | `uniapp/src/packages/pages/points_center/points_center.vue` | ✅ 已完成 | 2026-08-03 按设计稿实现积分卡片、快捷入口、最近明细、积分规则与底部明细入口;复用真实用户积分与积分流水接口 |
| 加密行情 | `uniapp/src/pages/crypto/crypto.vue` | ✅ 已完成 | 2026-08-02 按设计稿重构行情导航、市场概览、美元行情列表和币种 Logo;新增账号级跨设备自选、星标收藏与搜索;金额统一使用 `$` 前缀及 `K / M / B / T` 缩写;底部 Tab 文案统一为“行情”,430×932 H5 页面已复核 |
| 赛事中心 | `uniapp/src/pages/match/match.vue` | 🚧 部分完成 | 2026-07-11 赛程、直播、赔率改为在赛事中心当前内容区域切换;2026-08-01 `/packages_match/pages/worldcup` 作为赛事 Tab 入口时默认展示赛事主页;2026-08-02 按新版设计稿重构居中标题、三段导航、日期选择、运动/联赛筛选、赛事分组与赛程卡片;“热门联赛”改为读取管理端联赛配置,不再作为世界杯专题入口;2026-08-03 其“全部”筛选改由接口返回热门联赛赛事,避免日期与本地二次筛选导致空列表,待 H5 页面验收 |
| 赛事详情页 | `uniapp/src/pages/match_detail/match_detail.vue` | 🚧 部分完成 | 2026-05-29 优化顶部赛事摘要头部,补充联赛、对阵、状态与直播入口信息;2026-08-03 顶部改为设计稿的沉浸式直播大图与比分区,详情接口可按已绑定关系或直播标题中的主客队名称匹配房间,多房间可横向切换 |
| 世界杯专题页(排名导航) | `uniapp/src/packages_match/pages/worldcup.vue` | 🚧 部分完成 | 2026-05-20 已按设计稿拆分排名导航、积分榜、球员榜组件;2026-08-03 赛程卡会按赛事 ID、主客队名和直播标题匹配直播列表,命中后显示“看直播”入口;后续可继续细化表格视觉与新闻页样式 |
| 首页 | `uniapp/src/pages/index/index.vue` | 🚧 部分完成 | 2026-07-31 已按当前设计图重构为“今日焦点赛程、主推大图、最新资讯”三段式首页;2026-08-02 频道栏改为可横向滑动,频道项固定宽度并统一间距;频道仍复用后台配置分类,待实际 H5 页面验收后确认最终状态 |
| 社区广场 | `uniapp/src/pages/community/community.vue` | 🚧 部分完成 | 2026-08-02 已按优化设计稿重构为社区信息流;入口路径调整为 `/pages/community/community`,旧 `/pages/empty/empty` 与旧分包入口会自动跳转,待 H5 发布后验收实际效果 |
| 社区帖子详情 | `uniapp/src/packages_community/pages/post_detail.vue` | 🚧 部分完成 | 2026-08-02 已按付费帖子详情设计稿重构作者内容卡、免费摘要、积分解锁卡、互动评论区和底部输入栏;430px H5 页面已复核,App/小程序与正式构建待验收 |
| 彩票中心 | `uniapp/src/pages/lottery_analysis/lottery_analysis.vue` | 🚧 部分完成 | 2026-08-03 按彩票中心设计稿重构顶部品牌导航、开奖大厅/关注/日历导航、横向彩种胶囊、风险提示及最新开奖卡片;保留开奖结果、倒计时、详情与历史开奖入口,待 H5 页面验收 |
| 社区广场 | `uniapp/src/pages/community/community.vue` | 🚧 部分完成 | 2026-08-02 已按优化设计稿重构为社区信息流;入口路径调整为 `/pages/community/community`,旧 `/pages/empty/empty` 与旧分包入口会自动跳转;顶部积分入口已在频道导航栏内上下居中;付费帖子未解锁区域已调整为上深下浅纵向渐变面板和底部居中描边按钮;锁定付费卡片的付费提示与积分状态改为顶部左右同排,免费及积分状态均固定右上角顶对齐;帖子卡片互动栏仅保留浏览、评论、点赞并按三等分排列,计数支持去除 `.0``k / 万 / 亿` 紧凑显示,待 H5 发布后验收实际效果 |
| 社区帖子详情 | `uniapp/src/packages_community/pages/post_detail.vue` | 🚧 部分完成 | 2026-08-03 解锁卡已按设计稿优化为浅蓝渐变、同心圆实心锁、积分信息区、渐变解锁按钮与居中提示;“积分规则”复用通用富文本协议页,并由管理端协议设置配置内容;页面主体、解锁卡、互动评论与输入栏已压缩字号及间距;互动统计与评论区改为连续卡片层级,评论点赞置于正文右侧并统一使用紧凑计数;未解锁帖子始终显示免费预览“展开”按钮,折叠态按钮位于摘要末行右侧;已有译文的帖子按标点短语进行原文/译文一对一交错显示;430px H5 页面已复核,App/小程序与正式构建待验收 |
| 新闻详情 | `uniapp/src/pages/news_detail/news_detail.vue` | 待核对 | 富文本与图片渲染已存在相关实现 |
| 个人中心 | 待补充 | 待核对 | 需核对实际页面路径 |
| 个人中心 | `uniapp/src/pages/user/user.vue` | 🚧 部分完成 | 2026-08-03 按设计稿重排顶部资料、统计、我的权益、内容与服务、账户与支持;页面仅保留设计稿中的入口,未具备独立页面的评论、通知暂提供提示 |
| AI 分析 | 待补充 | 待核对 | 需核对实际页面路径 |
| 世博头条 AI 助手 | `uniapp/src/pages/ai_assistant/ai_assistant.vue` | ⚠️ 仅需求备注(无视觉导出) | 2026-06-11 按产品方案新增免费对话助手,入口位于首页与个人中心 |
| 私聊聊天室 | `uniapp/src/pages/private_chat/room.vue` | ⚠️ 仅需求备注(无视觉导出) | 2026-06-11 新增 App 端语音输入面板,语音识别结果填入文字输入框后手动发送 |