feat: 新增运动节拍训练工具套件与子工具页面
新增运动节拍RepClock全套小程序页面、后端API与数据库服务,新增subhub子工具汇总页面,优化全局主页样式与配置,为web静态资源添加版本缓存参数,补充配套调试脚本
This commit is contained in:
@@ -5,8 +5,6 @@ Page({
|
||||
loading: true,
|
||||
kits: [],
|
||||
appNameZh: 'MilesYang时光助手',
|
||||
subtitle: '个人工具集合,记录时光点滴。',
|
||||
error: '',
|
||||
clipVisible: false,
|
||||
clipText: '',
|
||||
clipCount: 0,
|
||||
@@ -14,18 +12,12 @@ Page({
|
||||
clipPreview: '',
|
||||
},
|
||||
|
||||
onLoad() {
|
||||
this.loadMeta()
|
||||
},
|
||||
onLoad() { this.refresh() },
|
||||
|
||||
onShow() {
|
||||
this.checkClipboard()
|
||||
},
|
||||
onShow() { this.checkClipboard() },
|
||||
|
||||
onPullDownRefresh() {
|
||||
this.loadMeta().finally(() => {
|
||||
wx.stopPullDownRefresh()
|
||||
})
|
||||
this.refresh().finally(() => wx.stopPullDownRefresh())
|
||||
},
|
||||
|
||||
simpleHash(str) {
|
||||
@@ -42,6 +34,50 @@ Page({
|
||||
return h1.toString(36) + h2.toString(36)
|
||||
},
|
||||
|
||||
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' }),
|
||||
})
|
||||
},
|
||||
|
||||
checkClipboard() {
|
||||
try {
|
||||
const enable = wx.getStorageSync('mp_ta_clip_enable')
|
||||
@@ -72,15 +108,13 @@ Page({
|
||||
})
|
||||
},
|
||||
|
||||
onClipCollect(e) {
|
||||
const mode = (e && e.currentTarget && e.currentTarget.dataset.mode) || 'new'
|
||||
onClipCollect() {
|
||||
const text = this.data.clipText || ''
|
||||
if (!text) { this.setData({ clipVisible: false }); return }
|
||||
try { wx.setStorageSync('mp_ta_clip_text', text) } catch (e) {}
|
||||
try { wx.setStorageSync('mp_ta_clip_mode', mode) } catch (e) {}
|
||||
this.setData({ clipVisible: false })
|
||||
wx.navigateTo({
|
||||
url: '/kits/personal_collect/pages/edit/edit',
|
||||
url: '/kits/personal_collect/pages/edit/edit?mode=new',
|
||||
fail: () => { wx.showToast({ title: '打开失败', icon: 'none' }) }
|
||||
})
|
||||
},
|
||||
@@ -105,69 +139,5 @@ Page({
|
||||
})
|
||||
},
|
||||
|
||||
async loadMeta() {
|
||||
this.setData({ loading: true, error: '' })
|
||||
try {
|
||||
const res = await api.core.getMeta()
|
||||
if (res && res.appNameZh) {
|
||||
this.setData({ appNameZh: res.appNameZh })
|
||||
}
|
||||
if (res && Array.isArray(res.kits) && res.kits.length) {
|
||||
this.setData({ kits: this.decorateKits(res.kits) })
|
||||
try { getApp().setMeta(res) } catch (e) {}
|
||||
} else {
|
||||
this.setData({ kits: this.fallbackKits() })
|
||||
}
|
||||
} catch (e) {
|
||||
this.setData({
|
||||
error: e && e.message ? e.message : '加载失败,请检查网络',
|
||||
kits: this.fallbackKits(),
|
||||
})
|
||||
} finally {
|
||||
this.setData({ loading: false })
|
||||
}
|
||||
},
|
||||
|
||||
fallbackKits() {
|
||||
return this.decorateKits([{
|
||||
id: 'personal_collect',
|
||||
name: '微信收藏夹',
|
||||
description: '聊天图片、文件收藏管理,标签搜索,软删除可追溯。',
|
||||
}])
|
||||
},
|
||||
|
||||
decorateKits(list) {
|
||||
const icons = {
|
||||
personal_collect: '📁',
|
||||
}
|
||||
return list.map(item => Object.assign({}, item, {
|
||||
icon: icons[item.id] || '🛠️',
|
||||
path: this.getKitPath(item.id),
|
||||
}))
|
||||
},
|
||||
|
||||
getKitPath(id) {
|
||||
const map = {
|
||||
personal_collect: '/kits/personal_collect/pages/list/list',
|
||||
}
|
||||
return map[id] || ''
|
||||
},
|
||||
|
||||
async onKitTap(e) {
|
||||
const id = e.currentTarget.dataset.id
|
||||
const path = e.currentTarget.dataset.path
|
||||
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' })
|
||||
},
|
||||
})
|
||||
},
|
||||
noop() {},
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user