d5a08db56c
feat:添加存储空间
2026-07-29 16:03:33 +08:00
zerosaturation
128a12fa03
fix(asset-detail): fade in sibling modules during up-pull collapse
...
The .card-siblings wrapper lives inside <scroll-view v-else>, so when
viewMode flips to 'expanded' the wrapper is destroyed and the
siblingFadeOpacity binding has no element to animate. Up-pull therefore
shows nothing fading in even though the computed correctly returns
0 -> 1.
Add a top-level overlay that mirrors the same four modules
(card-meta-row, info-row, creator-section, chain-section) and binds
its opacity to siblingFadeOpacity. The overlay is rendered only when
viewMode === 'expanded', positioned fixed at the bottom with z-index 60
(above the expanded card at 50, below the header at 100), and uses
pointer-events: none on the wrapper so the up-pull gesture from the
lower viewport can still reach .pull-collapse-surface; interactive
children re-enable pointer-events: auto.
The original .card-siblings inside <scroll-view> is untouched and
still drives the down-pull fade-out.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-28 15:56:45 +08:00
zerosaturation
3d984f19cd
feat(asset-detail): pull-down/up card gestures with smooth follow
...
Add AssetCardPullExpand component for locked-state display and wire
up/down gesture symmetry on the asset detail page.
Down-pull at top of list:
- card scales 1.0 -> 1.6 with translateY follow, sibling modules fade
out, hint text '下拉查看大图' -> '松手查看大图' past 80rpx
- on release past threshold, viewMode flips to expanded
Up-pull in expanded state:
- card shrinks 1.6 -> 1.0 with translateY follow, sibling modules fade
back in, hint text '上拉收起' -> '松手收起' past 80rpx
- on release past threshold, viewMode flips back to normal
- the locked scale(1.6) lives on the wrapper so the release animation
stays single-jump, not dual-jump
Implementation:
- AssetCardPullExpand renders the card at scale(1) and exposes isExpanded
for the parent's locked-state toggle (showMask prop gates the legacy
full-screen tap-to-collapse overlay)
- both gesture surfaces use lazy startY capture in onMove to avoid
tap-induced jumps; no CSS transition on the wrapper during active pull
- 0.15s transform transition smooths the release interpolation only
- header bar and report/share buttons stay visible in both states;
v-if/v-else-if/v-else chain (loading -> error -> expanded -> scroll-view)
preserved; existing 8 card class names and parent CSS untouched
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-28 14:13:39 +08:00
zerosaturation
27313f414a
feat(profile): render level progress bar in LV box
...
profile.vue only rendered fan level digit, hiding the fact that
fans level up via accumulated exhibition hours (6h/level, cap 20),
not login/task experience. Users saw "LV X" without "X more
hours to next level", so upgrades felt invisible.
- backend: surface exhibition_hours / next_level_hours on
CurrentIdentityDTO via a new loadLevelProgress helper in
user_controller (read-only, no proto regen, no service
surface change). Full-level responses set next_level_hours =
exhibition_hours so the client can derive progress=1.
- frontend: split level-box into base track + gold fill + text
overlay; width bound to progressRatio with 0.4s transition.
Adds "距 LV X+1 还差 N 小时" hint and MAX indicator for
full-level users.
2026-07-27 18:02:59 +08:00
zerosaturation
83999995f5
refactor(frontend): consolidate user storage read via getStoredUser helper
...
uni.getStorageSync('user') 在 key 从未写过的 UniApp 平台下默认返回 ""(空串)
而非 null/undefined,旧式 `JSON.parse(uni.getStorageSync('user')) || {}` 在
parse 阶段直接抛 `SyntaxError: Unexpected end of JSON input`,导致 quickLogin
setup 崩溃,并触发 Vue 二次告警 `Invalid vnode type: undefined`。
新增 utils/getStoredUser.js 单点封装,统一处理:
- 空值/损坏 JSON 兜底(返回 null,不抛)
- 与 store/modules/user.js 初始化块同源守卫
- 失败 warn 级别日志,不影响业务
替换全库 16 处不安全 `JSON.parse(userStr)` 调用:
composables/useLaserMint.js composables/useShare.js
utils/guideConfig.js utils/preloadApi/core.js
pages/castlove/lenticular/lenticular-result.vue
pages/support-activity/index.vue pages/support-activity/components/{TopRanking,ActionBar}.vue
pages/components/{Header,ShareModal,ShareReportButtons}.vue
pages/tasks/{GuideModal,daily-tasks}.vue
pages/asset-detail/asset-detail.vue pages/exhibition/exhibition.vue
pages/profile/profile.vue pages/login/quickLogin.vue(原崩点)
净 -18 行,17 文件改动 + 1 文件新增。后续如需支持多 key(如 'adminUser'),
把 getStoredUser 扩成泛型 getStoredJSON(key) 即可。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-27 17:16:49 +08:00
zerosaturation
d6573efcdd
fix(frontend): align daily_login storage cache with backend task_completed
...
Header.vue 的 '日内去重' 逻辑原本在 reportEvent 走 .then() 时无条
件 setStorageSync(true),但 reportEvent 在后端 task_completed=false
时仍 HTTP 200 + code=0(例如 trigger_event=NULL / 任务不存在等),
.then() 照样跑,storage 缓存被错误标记为'已报',后续进 home 永远跳
过 reportEvent,daily_login 任务永远无法补完成(死锁)。
修后 .then((res) => ...) 按后端真实 task_completed 判定:
- task_completed=true → setStorageSync + 清昨日(保持原优化)
- task_completed=false → removeStorageSync(自愈,允许下次重试)
影响范围:仅 daily_login。其他 daily 任务(daily_browse_asset /
daily_place_asset)本来就没前端 storage cache,不受影响。
当前 daily_login 卡住的用户:手动清 storage 后重进 home 可触发自愈;
或等明天 5 点跨天后 storage key 自动失效(同日 5 点重置周期)。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-27 16:45:49 +08:00
zerosaturation
b17a3b4b4a
chore(asset-detail): silence debug console.log in loadData
...
调试期临时加的 [asset-detail] loaded asset 日志已无用途,清掉避免
生产环境输出噪音。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-27 16:37:54 +08:00
zerosaturation
ab1810e433
fix(frontend): clear all daily_login_completed_* keys on logout
...
登出时清理 daily_login 本地缓存的 key 写错:实际清的是
daily_login_completed_${today},但 Header.vue 写入的 key 是
daily_login_completed_${date}_${uid}_${starId},格式不匹配导致
根本没清掉任何东西,跨账号/重装场景会留旧去重残留,新一天本应触发
的 daily_login 上报被本地 cache 误判成'已报'。
改成模糊匹配所有 daily_login_completed_*(uni 没有'按前缀删'接口,
getStorageInfoSync + filter + 循环 remove,模式同
utils/preloadApi/storage.js#clearForUser)。
注:daily_login 仍保留前端去重(spec §3 要求);其他 daily 任务
(daily_browse_asset / daily_place_asset) 本来就没前端去重,完全
靠后端 ProcessTaskEvent 幂等(status=completed/claimed 跳过)。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-27 16:36:58 +08:00
zerosaturation
5ab1a537db
feat(frontend): daily-task reportEvent 接入 + exhibition 错位实现迁移
...
Phase F.2 前端接入:
- asset-detail.vue: onLoad 触发 daily_browse_asset reportEvent(后端幂等:
status=completed/claimed 时 skip;本地不缓存避免跨天去重逻辑复杂)
- exhibition.vue: 删除原 exhibition 页 onLoad 的 daily_browse_asset reportEvent
调用(错位实现,浏览发生在详情页不在展厅页)
- myWorks.vue: handleAssetSelect 成功分支新增 daily_place_asset reportEvent
- daily-tasks.vue: 移除多余的 task-progress 文本显示(接口不返回
current_count/target_count,前端 UI 也不展示)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-27 15:47:01 +08:00
zerosaturation
907e2265b1
feat:修改铸造消耗弹窗样式
2026-07-27 13:38:23 +08:00
ea39ee1881
feat:修改图片尺寸和uni配置
2026-07-27 12:48:02 +08:00
zerosaturation
e079a6c2e2
feat(asset): restore starbook home More button by Asset.LikeCount ordering
...
starbook 首页每个 grade/group 按 Asset.LikeCount DESC, Asset.ID ASC 取前三张,超三显示 has_more;
GetAssetsByType 不截断返回全部匹配项。包含:
- proto/asset.proto 声明 GetAssetsByType RPC + 消息,重新生成 .pb.go/.triple.go
- gateway starbook controller 改用标准 AssetService 客户端
- assetService: 三个 build*GroupForAssets 增加 previewLimit 参数
- 新增 sortAndLimitAssetItems 共享助手
- 新增 asset_service_group_test.go DB-free 单测
- 新增 TestStarbookHomePreviewAndMoreUseAssetLikeRanking 端到端回归
- frontend pages/starbook/items.vue 适配嵌套 groups/grades/items 响应,单 grade 竖向展示
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-24 19:20:16 +08:00
zerosaturation
946493a0ff
fix:补齐appBUG
2026-07-22 16:29:39 +08:00
zerosaturation
b7f8f1b724
fix:修改登录页流程bug
2026-07-21 16:41:42 +08:00
zerosaturation
6f9b178fc1
fix:修改一键登录页到首页的bug
2026-07-21 15:00:49 +08:00
zerosaturation
d554d7be83
feat:修改周边验证
2026-07-17 16:53:57 +08:00
zerosaturation
d4ee464bed
fix:修复任务组件报错
2026-07-16 11:34:37 +08:00
zerosaturation
99775f1d11
feat:修改详细页面,修改为每个类型的页面不对
2026-07-15 19:16:28 +08:00
zerosaturation
18aff3b682
fix:修改bug
2026-07-15 13:12:27 +08:00
365f783ea0
feat:修改分享url
2026-07-15 12:40:39 +08:00
zerosaturation
c0b577dd40
feat:增加邮箱管理功能
2026-07-14 21:59:15 +08:00
zerosaturation
1f1696063d
feat:修改分享页名次
2026-07-14 13:49:58 +08:00
zerosaturation
bf92ab3ac8
feat:修改路由
2026-07-13 15:23:50 +08:00
zerosaturation
c4b8800ea7
feat:增加骨架屏
2026-07-13 15:08:28 +08:00
zerosaturation
6a6d5f9deb
feat:增加守卫组合式函数本身
2026-07-13 14:56:08 +08:00
zerosaturation
7467190e38
feat:增加清理临时文件的目录
2026-07-13 14:40:34 +08:00
zerosaturation
d900c0d8b2
feat:增加验证真伪访问次数和首次验证
2026-07-13 14:24:42 +08:00
zerosaturation
74853800b6
feat:增加二维码验证真伪的功能
2026-07-13 11:22:56 +08:00
345a22e5fa
docs:增加周边扫描功能
2026-07-10 12:35:12 +08:00
zerosaturation
e5bd0c854c
feat:增加忘记密码的功能
2026-07-09 19:00:03 +08:00
zerosaturation
31eee930ca
feat:去掉无用的函数方法
2026-07-09 16:08:25 +08:00
fbf3e6c63c
feat:增加分享页下载
2026-07-09 15:49:06 +08:00
5625f6ac28
feat:增加预加载接口
2026-07-09 13:27:25 +08:00
f6b2b31d76
feat:修改热更新
2026-07-08 18:19:17 +08:00
ce1ef491f8
feat:增加uniapp更新页面
2026-07-07 14:44:23 +08:00
zerosaturation
139d91d08b
feat:修复光栅卡改为连续版,auto
2026-07-07 00:44:52 +08:00
zerosaturation
0a62b9cd10
feat:修改陀螺仪为手动控制并且增加自动控制
2026-07-07 00:29:01 +08:00
zerosaturation
a1e92448f1
feat:修改陀螺仪控制为手动控制
2026-07-06 21:20:24 +08:00
zerosaturation
217af65121
refactor(holographic): 移除 DeviceOrientationEvent 路径
...
- 删 startGyro / startDeviceOrientation / stopGyro
- 删 accelHandler / accelBaselineReady 等基线追踪状态
- simulate(x, y) 成为唯一驱动入口
- 保留 onMounted / onUnmounted 钩子(如果外部有需要可保留,否则删)
Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-06 18:58:04 +08:00
zerosaturation
a4836605e7
refactor(craft-tilt): 删除硬件传感器模块 + 同步清理 3 个其他页面
...
- 删 useLenticularStudioTilt.js (28KB, 894 行)
- 删 useOneEuroFilter.js (75 行)
- useLenticularCraftTiltPreview 移除对二者的引用与 3 个旧 API(scheduleTiltStart/stopTiltPreview/gyroSourceLabel)
- 同步清理 3 个其他消费方页面(discover/generation-result, castlove/success, asset-detail):
- 删 3 个旧 destructure 键
- 模板 :gyro-source 改静态 'simulation' + 删 :skip-built-in-touch
- 删 12 处旧 API 调用
- 保留手动模拟入口 simulateTilt / simulateTiltFromNormalized / simulateTiltReset(Task 1)
- ★ 3 个页面用触摸事件替代硬件传感器(未加 slider,后续可补)
Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-06 18:48:09 +08:00
zerosaturation
34dd301a92
chore(manifest): 移除 imengyu 插件注册与传感器权限
...
- 删 nativePlugins.imengyu-UniAndroidGyro 段(30-44 行)
- 删 BODY_SENSORS 权限(69 行)
- 删 NSMotionUsageDescription 隐私描述(82 行)
Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-06 18:22:20 +08:00
zerosaturation
c992ddbf61
chore(native-plugin): 移除 imengyu-UniAndroidGyro 陀螺仪插件
...
- 28KB AAR + iOS Framework + package.json 全部删除
- 与 useLenticularStudioTilt.js 同步(Task 9 跟进)
Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-06 18:10:27 +08:00
zerosaturation
dcdbc041a9
feat(lenticular-result): 切换为手动倾斜模式 + 触摸滑块双向同步
...
- @simulate → onTouchSimulate:触摸 x 投影到滑块 + 驱动引擎
- @update:slider-value → onSliderChange:滑块拖动驱动引擎
- @slider-reset → onSliderReset:复位滑块+引擎
- v-model:slider-value 双向
- 删 3 处 scheduleTiltStart / stopTiltPreview / gyroSourceLabel 引用
- 触摸结束不强制回中
Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-06 18:02:51 +08:00
zerosaturation
851a8f6c43
feat(castlove-preview): 透传 showSlider prop
...
Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-06 17:53:04 +08:00
zerosaturation
b0dcb82276
feat(holographic-card): 接入 ManualTiltSlider + 修 touchend 行为
...
- 与 LenticularCard 对齐的 showSlider / sliderValue / v-model 接口
- 触摸结束不再 emit (0,0)
Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-06 17:48:42 +08:00
zerosaturation
c3b423cf23
feat(lenticular-card): 接入 ManualTiltSlider + 修 touchend 行为
...
- 新增 showSlider / sliderValue props
- 新增 update:sliderValue / sliderReset emits(v-model 配套)
- 触摸结束不再 emit (0,0),与滑块数据驱动相容
Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-06 17:43:18 +08:00
zerosaturation
86a5fdfbb5
feat(lenticular): 新增 ManualTiltSlider 独立组件
...
- uniapp <slider> 包装,0..1 双向绑定
- 内置 ↺ 复位按钮
- value validator 拦截 0..1 范围外输入
Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-06 17:36:07 +08:00
zerosaturation
c6cb55dfc0
feat(craft-tilt): 新增 simulateTilt 手动模拟入口
...
- simulateTilt(dx, dy) 单位度,校验 NaN/Infinity
- simulateTiltFromNormalized(x, y) 触摸归一化转度(系数 45)
- simulateTiltReset() 滑块复位用
Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-06 17:14:00 +08:00
zerosaturation
958c867309
fix:修改举报/反馈的bug
2026-07-06 16:22:26 +08:00
zerosaturation
d279976822
feat:修改铸造相关报错
2026-07-04 00:22:05 +08:00