feat: 新增运动节拍训练工具套件与子工具页面
新增运动节拍RepClock全套小程序页面、后端API与数据库服务,新增subhub子工具汇总页面,优化全局主页样式与配置,为web静态资源添加版本缓存参数,补充配套调试脚本
This commit is contained in:
@@ -0,0 +1,60 @@
|
||||
const api = require('../../api.js')
|
||||
|
||||
Page({
|
||||
data: {
|
||||
loading: true,
|
||||
kits: [],
|
||||
appNameZh: 'MilesYang时光助手',
|
||||
subtitle: '小工具集合 · 完全独立 · 零共享',
|
||||
},
|
||||
|
||||
onLoad() { this.refresh() },
|
||||
|
||||
onPullDownRefresh() {
|
||||
this.refresh().finally(() => wx.stopPullDownRefresh())
|
||||
},
|
||||
|
||||
async refresh() {
|
||||
this.setData({ loading: true })
|
||||
try {
|
||||
const res = await api.core.getMeta()
|
||||
if (res && res.appNameZh) this.setData({ appNameZh: res.appNameZh })
|
||||
} catch (e) {}
|
||||
this.setData({
|
||||
kits: this.buildKits(),
|
||||
loading: false,
|
||||
})
|
||||
},
|
||||
|
||||
buildKits() {
|
||||
return [
|
||||
{
|
||||
id: 'personal_collect',
|
||||
name: '微信收藏夹',
|
||||
description: '聊天图片 / 文件 / 文字收藏,标签搜索,软删除可追溯。',
|
||||
icon: '📁',
|
||||
path: '/kits/personal_collect/pages/list/list',
|
||||
meta: 'API: /api/mp_personal_collect/ · DB: mp_personal_collect.db',
|
||||
},
|
||||
{
|
||||
id: 'rep_clock',
|
||||
name: '运动节拍 RepClock',
|
||||
description: 'HIIT / Yoga / 拉伸节奏倒计时,锚点时钟 + 女声播报。',
|
||||
icon: '⏱️',
|
||||
path: '/kits/rep_clock/pages/cards/cards',
|
||||
meta: 'API: /api/mp_rep_clock/ · DB: mp_rep_clock.db',
|
||||
},
|
||||
]
|
||||
},
|
||||
|
||||
async onKitTap(e) {
|
||||
const id = (e.currentTarget.dataset.id || '').trim()
|
||||
const path = (e.currentTarget.dataset.path || '').trim()
|
||||
if (!path) { wx.showToast({ title: '功能开发中', icon: 'none' }); return }
|
||||
try { await api.core.setActiveKit(id) } catch (e) {}
|
||||
wx.navigateTo({
|
||||
url: path,
|
||||
fail: () => wx.showToast({ title: '打开失败', icon: 'none' }),
|
||||
})
|
||||
},
|
||||
})
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"navigationBarTitleText": "时光助手",
|
||||
"navigationBarBackgroundColor": "#1a1a2e",
|
||||
"navigationBarTextStyle": "white",
|
||||
"backgroundColor": "#0f0f1a",
|
||||
"enablePullDownRefresh": true,
|
||||
"backgroundTextStyle": "light"
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
<view class="container">
|
||||
<view class="page-header">
|
||||
<view class="page-title">{{appNameZh}}</view>
|
||||
<view class="page-subtitle">{{subtitle}}</view>
|
||||
</view>
|
||||
|
||||
<view wx:if="{{loading}}" class="empty">加载中...</view>
|
||||
|
||||
<view class="hero-card">
|
||||
<view class="hero-icon">
|
||||
<text class="hero-emoji">🧘</text>
|
||||
</view>
|
||||
<view class="hero-body">
|
||||
<view class="hero-title">每一次节奏,都是一次呼吸。</view>
|
||||
<view class="hero-desc">独立工具集合,互不干扰,可独立部署。</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<block wx:for="{{kits}}" wx:key="id">
|
||||
<view class="kit-card" bindtap="onKitTap" data-id="{{item.id}}" data-path="{{item.path}}">
|
||||
<view class="kit-icon">
|
||||
<text class="kit-icon-text">{{item.icon}}</text>
|
||||
</view>
|
||||
<view class="kit-body">
|
||||
<view class="kit-title">{{item.name}}</view>
|
||||
<view class="kit-desc">{{item.description}}</view>
|
||||
<view wx:if="{{item.meta}}" class="kit-meta">{{item.meta}}</view>
|
||||
</view>
|
||||
<view class="chevron">›</view>
|
||||
</view>
|
||||
</block>
|
||||
|
||||
<view class="footer muted small">
|
||||
独立部署 · 独立数据库 · 独立运行锁
|
||||
</view>
|
||||
</view>
|
||||
@@ -0,0 +1,23 @@
|
||||
.hero-card {
|
||||
margin: 4rpx 24rpx 36rpx;
|
||||
padding: 32rpx 30rpx;
|
||||
background: linear-gradient(145deg, rgba(108, 122, 224, 0.22), rgba(176, 107, 224, 0.16));
|
||||
border: 1px solid rgba(140, 150, 240, 0.24);
|
||||
border-radius: 28rpx;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 26rpx;
|
||||
box-shadow: 0 14rpx 36rpx rgba(0,0,0,0.28);
|
||||
}
|
||||
.hero-icon { width: 96rpx; height: 96rpx; flex: none; border-radius: 24rpx; background: rgba(255,255,255,0.08); display: flex; align-items: center; justify-content: center; }
|
||||
.hero-emoji { font-size: 54rpx; }
|
||||
.hero-title { font-size: 30rpx; font-weight: 700; color: #efeffe; letter-spacing: 0.5rpx; margin-bottom: 8rpx; }
|
||||
.hero-desc { font-size: 24rpx; color: #a6a9d0; }
|
||||
|
||||
.footer {
|
||||
margin: 80rpx 0 40rpx;
|
||||
text-align: center;
|
||||
letter-spacing: 1rpx;
|
||||
color: #5a5e82;
|
||||
font-size: 22rpx;
|
||||
}
|
||||
Reference in New Issue
Block a user