feat/asset_material_relations #1

Merged
liulujian merged 179 commits from feat/asset_material_relations into dev 2026-06-04 13:42:36 +00:00
Collaborator

WIP:合并代码,上线版本1.0.1

WIP:合并代码,上线版本1.0.1
liulujian added 179 commits 2026-06-04 13:39:47 +00:00
This reverts commit b698f08916.
包含三种实现方案(userService集成、独立微服务、gateway)的对比分析,
推荐方案一在userService中直接集成SMS SDK。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
根据评审意见修改:
- 配置项移至 userService(方案一)
- Redis 存储增加 scene 维度、防暴力破解策略、发送频率限制
- verify-code 增加 verify_token 供后续注册接口使用
- 补充错误处理场景(Redis失败、阿里云超时、限流等)
- 增加安全注意事项(日志脱敏、token安全等)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
verify_token 使用 32 位随机字符串(vtf_xxx)而非 JWT,
避免签名验证的复杂性,直接 Redis 比对即可。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
删除验证码 -> 创建 verify:register:{mobile} 记录 -> 注册时比对

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
明确 register.vue → setNickname.vue 的页面跳转和数据传递逻辑,
verify_token 需要跟随 temp_* 一起存储和传递。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- 部署说明移除错误的OSS_STS_ROLE_ARN,短信使用直接AccessKey
- 防暴力破解策略补充独立Key的TTL说明

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
明确短信服务使用直接AccessKey认证,与OSS的STS方式区分。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
verify_token通过temp_register_verify_token存储,非直接verify_token,
并补充说明setNickname.vue需透传verify_token到registerApi。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
新增第12章:价格计费、模板类型、签名、开通流程、相关文档链接。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
补充实际套餐包价格(200条¥10、1500条¥73.5、5000条¥170、15000条¥507.6),
修正原错误价格,删除"待确认"标注。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- 修正SDK包名为 github.com/alibabacloud-go/dysmsapi-20180501/v2
- 补充环境要求、安装方式、API Endpoint
- 新增12.5节:Go SDK使用说明(依赖安装、客户端初始化、发送短信代码示例)
- 新增返回码说明(OK、频率限制、内容违规等)
- 更新12.6相关文档链接,补充快速入门和SDK示例地址

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- SDK包名修正为 dysmsapi-20170525/v4/client
- 补充三种操作系统环境变量配置(Linux/macOS/Windows CMD/PowerShell)
- 完善SDK使用代码(初始化、发送短信、异常处理)
- 补充更多返回码和常见错误处理
- 推荐单例模式创建客户端

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- mintService: Add AssetLevelService field and call GetOrCreateRecord after asset creation
- assetLikeService: Add AssetLevelService and call AddLikes/RemoveLikes in LikeAsset/UnlikeAsset
- revenueService: Add AssetLevelService and call AddExhibitionHours in OnExhibitionCompleted

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
https://git.liantu.tech/xiaoyu/topfans into
feat/laser_card_material_relations# Please enter a commit message to explain why this merge is necessary,
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Add 3 API methods following existing patterns:
- getHotInspirationFlowBatchApi() for batch fetching 4 categories
- getHotInspirationFlowApi(type) for single category refresh
- getHotInspirationFlowMoreApi(type, cursor, limit) for pagination

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Add a reusable hot category block component with:
- Props: categoryType, title
- Events: cardClick(item)
- Exposed methods: setItems, setLoading, handleRefresh
- 4x2 grid layout with skeleton loading
- Bottom gradient overlay with user info and like count

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Change card width from 48% to calc(25% - 12rpx) to achieve
4 columns × 2 rows layout as specified in design docs.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- Created new page at frontend/pages/square/hot-category-more.vue
- Supports route params: type and title
- Implements sub tabs for star card categories (all, raster, holographic, tear_off, polaroid)
- Uses getHotInspirationFlowMoreApi for paginated loading
- Follows existing CreationGrid card styling with like animations

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- Import HotCategoryBlock and getHotInspirationFlowBatchApi
- Add hotCategories and hotCategoryRefs state
- Add loadHotCategories function to fetch categories
- Add handleHotCardClick handler for navigation
- Add template with v-for loop for hot category blocks
- Add CSS style for .hot-category-wrapper
- Call loadHotCategories in onMounted after loadBannerActivities

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
锁定 composables 方案、文件结构、组件契约、loading/error 策略,
并附实施顺序与风险记录。后端 dashboardService 尚未实现,前端先用 mock。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
应用 spec reviewer 的两条建议:澄清 composable 用 effectScope 释放
资源(非依赖 onUnmounted),并显式说明 6 组件消费 7 接口的映射
(CollectionMatrix 内部消费 3 个)。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
14 个任务,2-3 天工作量(前端部分),按 M2-M6 阶段分组。
不引入测试框架,验证走手动核对清单。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
修复:
1. Task 14: 删除 scrolltolower 误绑定(每次滚到底会触发全量刷新)
2. Task 14: 补 onShow 生命周期(spec §4.1 要求从其他页返回时强制刷)
3. Task 3: refresh() 改为 cache-aware 默认行为;force 需显式传参
4. Task 7: 删除未被引用的 chart-theme.json(死文件)
5. 删除原 Task 13(SectionSkeleton+EmptyState 死组件)
6. Task 13: pageBg 改用 SCSS class 引用,移除 inline 重复字符串
7. 新增 Task 14 全链路手动验证(spec §8.2 核对清单)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
阻塞修复:
1. Task 7: chartData/chartOpts 加入 return,H5 模板可访问
2. Task 13: 补 onUnmounted import
3. Task 13: 删除 4 个重复的 onShow 草稿块,保留唯一规范版本
4. Task 2: 新增 USE_MOCK_API 翻 true 的步骤(api.js 默认 false)

advisory 修复:
- Task 10: margin: 24r 0 → 24rpx 0
- Task 13: 删 enablePullDownRefresh(与 scroll-view refresher 冲突)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
代码质量评审发现逗号置于行首()与项目惯例()不一致,
修正为与项目其他 35+ 个路由条目完全一致的风格。
与项目 24+ 个 *Api 函数保持一致——其他 API(如 loginApi、
getRandomUsersApi、getEarningsSummaryApi)都返回完整 { code, data }
信封,由调用方在 boundary 处解包。dashboardApi 之前在 API 边界做
.data 解包是计划文本中的偏差,现在修正。

useDashboardData composable(Task 3)需要在内部用
`(res) => res?.data || res` 处理——这是 composable 边界该做的事。
代码评审建议:loadAll 与 refresh 各有一份相同的 7 项 fetcher 映射,
且 refresh 每次调用都重建对象。提取为模块级单例后:
- 消除重复(单一信源)
- 节省每次 refresh 的对象分配
- loadAll 用 Object.entries 驱动而非手写 7 行
代码评审发现 Options API 与项目 30+ 个页面(square.vue、
discover.vue、exhibition.vue 等)惯例不一致。改写为
<script setup>,并把 pageBg 提到模块顶层(不再通过 setup
return 传递)。Header 组件无 script 逻辑,无需改动。
代码评审指出 `transition: all` 是已知的 CSS 反模式——会触
发所有属性的动画,包括未预期的 layout-trigger 属性(width、
height、padding 等)。窄化为 `background` 与 `color`,符合
.tab 实际变化的状态。
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
liulujian merged commit 6bbaca2c91 into dev 2026-06-04 13:42:36 +00:00
Sign in to join this conversation.
No reviewers
No Label
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: xiaoyu/topfans#1
No description provided.