From 71e4a487a5512b46f00e3a3a48af5b1185ad3cf8 Mon Sep 17 00:00:00 2001 From: Guoguo Date: Wed, 29 Apr 2026 07:00:36 -0700 Subject: [PATCH] fix: resolve subscription UX issues and add placeholder pages MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Profile: show "未订阅" card when subscription inactive/0 days - Profile: subscription management navigates to page instead of modal - Subscribe-plans: data-driven plan cards with mock payment flow - Subscribe-plans: show current subscription status at top - Subscribe-prompt: "先使用普通模式" goes to wear-check directly - Add help and contact placeholder pages - Fix unbindDevice to work without explicit deviceId --- admin-console/package-lock.json | 11 ---- miniprogram/app.json | 4 +- miniprogram/pages/contact/contact.js | 18 ++++++ miniprogram/pages/contact/contact.json | 4 ++ miniprogram/pages/contact/contact.wxml | 9 +++ miniprogram/pages/contact/contact.wxss | 6 ++ miniprogram/pages/help/help.js | 18 ++++++ miniprogram/pages/help/help.json | 4 ++ miniprogram/pages/help/help.wxml | 9 +++ miniprogram/pages/help/help.wxss | 6 ++ miniprogram/pages/profile/profile.js | 19 +++--- miniprogram/pages/profile/profile.wxml | 15 +++-- miniprogram/pages/profile/profile.wxss | 5 ++ .../pages/subscribe-plans/subscribe-plans.js | 61 ++++++++++++++++--- .../subscribe-plans/subscribe-plans.wxml | 28 +++++---- .../subscribe-plans/subscribe-plans.wxss | 26 ++++++++ .../subscribe-prompt/subscribe-prompt.js | 4 ++ .../subscribe-prompt/subscribe-prompt.wxml | 2 +- miniprogram/utils/api.js | 2 +- 19 files changed, 205 insertions(+), 46 deletions(-) create mode 100644 miniprogram/pages/contact/contact.js create mode 100644 miniprogram/pages/contact/contact.json create mode 100644 miniprogram/pages/contact/contact.wxml create mode 100644 miniprogram/pages/contact/contact.wxss create mode 100644 miniprogram/pages/help/help.js create mode 100644 miniprogram/pages/help/help.json create mode 100644 miniprogram/pages/help/help.wxml create mode 100644 miniprogram/pages/help/help.wxss diff --git a/admin-console/package-lock.json b/admin-console/package-lock.json index fa7b2e6..5c62cd2 100644 --- a/admin-console/package-lock.json +++ b/admin-console/package-lock.json @@ -13,7 +13,6 @@ "@dcloudio/uni-components": "3.0.0-4020920240930001", "@dcloudio/uni-h5": "3.0.0-4020920240930001", "pinia": "^2.1.0", - "uview-plus": "^3.2.0", "vue": "^3.4.0" }, "devDependencies": { @@ -10951,16 +10950,6 @@ "uuid": "bin/uuid" } }, - "node_modules/uview-plus": { - "version": "3.7.36", - "resolved": "https://registry.npmmirror.com/uview-plus/-/uview-plus-3.7.36.tgz", - "integrity": "sha512-44pW0oKKatYxCHhXPljaNv5E+CESSJlhsz0FRZRNpMv1ms02m5Agk+CNpgDnv/XNHt9YxHdYSYerN+xnNP5orw==", - "engines": { - "HBuilderX": "^3.1.0", - "uni-app": "^4.66", - "uni-app-x": "" - } - }, "node_modules/v8-to-istanbul": { "version": "8.1.1", "resolved": "https://registry.npmmirror.com/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", diff --git a/miniprogram/app.json b/miniprogram/app.json index d470ba6..1ed0a8e 100644 --- a/miniprogram/app.json +++ b/miniprogram/app.json @@ -14,7 +14,9 @@ "pages/subscribe-plans/subscribe-plans", "pages/subscribe-success/subscribe-success", "pages/profile/profile", - "pages/history/history" + "pages/history/history", + "pages/help/help", + "pages/contact/contact" ], "window": { "navigationBarBackgroundColor": "#ffffff", diff --git a/miniprogram/pages/contact/contact.js b/miniprogram/pages/contact/contact.js new file mode 100644 index 0000000..9353300 --- /dev/null +++ b/miniprogram/pages/contact/contact.js @@ -0,0 +1,18 @@ +Page({ + data: { + statusBarHeight: 44 + }, + + onLoad: function () { + var app = getApp() + this.setData({ statusBarHeight: app.globalData.statusBarHeight }) + }, + + onBack: function () { + wx.navigateBack({ + fail: function () { + wx.switchTab({ url: '/pages/profile/profile' }) + } + }) + } +}) diff --git a/miniprogram/pages/contact/contact.json b/miniprogram/pages/contact/contact.json new file mode 100644 index 0000000..12cf3d1 --- /dev/null +++ b/miniprogram/pages/contact/contact.json @@ -0,0 +1,4 @@ +{ + "navigationStyle": "custom", + "navigationBarTitleText": "联系我们" +} diff --git a/miniprogram/pages/contact/contact.wxml b/miniprogram/pages/contact/contact.wxml new file mode 100644 index 0000000..0ee6448 --- /dev/null +++ b/miniprogram/pages/contact/contact.wxml @@ -0,0 +1,9 @@ + + + ‹ 返回 + 联系我们 + + + 内容建设中... + + diff --git a/miniprogram/pages/contact/contact.wxss b/miniprogram/pages/contact/contact.wxss new file mode 100644 index 0000000..0aa46be --- /dev/null +++ b/miniprogram/pages/contact/contact.wxss @@ -0,0 +1,6 @@ +.placeholder { + text-align: center; + color: #999999; + font-size: 28rpx; + padding: 80rpx 0; +} diff --git a/miniprogram/pages/help/help.js b/miniprogram/pages/help/help.js new file mode 100644 index 0000000..9353300 --- /dev/null +++ b/miniprogram/pages/help/help.js @@ -0,0 +1,18 @@ +Page({ + data: { + statusBarHeight: 44 + }, + + onLoad: function () { + var app = getApp() + this.setData({ statusBarHeight: app.globalData.statusBarHeight }) + }, + + onBack: function () { + wx.navigateBack({ + fail: function () { + wx.switchTab({ url: '/pages/profile/profile' }) + } + }) + } +}) diff --git a/miniprogram/pages/help/help.json b/miniprogram/pages/help/help.json new file mode 100644 index 0000000..b80b1e6 --- /dev/null +++ b/miniprogram/pages/help/help.json @@ -0,0 +1,4 @@ +{ + "navigationStyle": "custom", + "navigationBarTitleText": "使用帮助" +} diff --git a/miniprogram/pages/help/help.wxml b/miniprogram/pages/help/help.wxml new file mode 100644 index 0000000..5c359db --- /dev/null +++ b/miniprogram/pages/help/help.wxml @@ -0,0 +1,9 @@ + + + ‹ 返回 + 使用帮助 + + + 内容建设中... + + diff --git a/miniprogram/pages/help/help.wxss b/miniprogram/pages/help/help.wxss new file mode 100644 index 0000000..0aa46be --- /dev/null +++ b/miniprogram/pages/help/help.wxss @@ -0,0 +1,6 @@ +.placeholder { + text-align: center; + color: #999999; + font-size: 28rpx; + padding: 80rpx 0; +} diff --git a/miniprogram/pages/profile/profile.js b/miniprogram/pages/profile/profile.js index ef43c83..9741085 100644 --- a/miniprogram/pages/profile/profile.js +++ b/miniprogram/pages/profile/profile.js @@ -60,22 +60,21 @@ Page({ }, onViewSubscription: function () { - if (!this.data.subscription || this.data.subscription.status !== 'active') { - wx.navigateTo({ url: '/pages/subscribe-plans/subscribe-plans' }) - } else { - var sub = this.data.subscription - wx.showModal({ - title: '订阅信息', - content: '套餐类型:' + (sub.plan || '未知') + '\n剩余天数:' + (sub.remaining_days || 0) + '天', - showCancel: false - }) - } + wx.navigateTo({ url: '/pages/subscribe-plans/subscribe-plans' }) }, onViewHistory: function () { wx.switchTab({ url: '/pages/history/history' }) }, + onHelp: function () { + wx.navigateTo({ url: '/pages/help/help' }) + }, + + onContact: function () { + wx.navigateTo({ url: '/pages/contact/contact' }) + }, + onLogout: function () { wx.showModal({ title: '退出登录', diff --git a/miniprogram/pages/profile/profile.wxml b/miniprogram/pages/profile/profile.wxml index e35351a..9da5de0 100644 --- a/miniprogram/pages/profile/profile.wxml +++ b/miniprogram/pages/profile/profile.wxml @@ -8,12 +8,19 @@ - + ✨ 智能模式 剩余 {{subRemaining}}天 - 试用中 + 使用中 + + + + 智能模式 + 未订阅 + + 去订阅 › @@ -34,12 +41,12 @@ 订阅管理 - + 使用帮助 - + 📞 联系我们 diff --git a/miniprogram/pages/profile/profile.wxss b/miniprogram/pages/profile/profile.wxss index 50826fc..6f36a1b 100644 --- a/miniprogram/pages/profile/profile.wxss +++ b/miniprogram/pages/profile/profile.wxss @@ -107,6 +107,11 @@ color: #999; } +.sub-card-inactive { + background: #f5f5f5; + border: 1px dashed #d9d9d9; +} + .logout-btn { text-align: center; color: #ff4d4f; diff --git a/miniprogram/pages/subscribe-plans/subscribe-plans.js b/miniprogram/pages/subscribe-plans/subscribe-plans.js index 1ea97d0..e49a055 100644 --- a/miniprogram/pages/subscribe-plans/subscribe-plans.js +++ b/miniprogram/pages/subscribe-plans/subscribe-plans.js @@ -1,14 +1,17 @@ -var http = require('../../utils/request') +var api = require('../../utils/api') +var config = require('../../config/env') Page({ data: { statusBarHeight: 44, plans: [ - { plan: 'monthly', price: '¥99', desc: '约3.3元/天' }, - { plan: 'yearly', price: '¥899', desc: '省¥289' } + { key: 'monthly', name: '月卡', price: 99, priceLabel: '¥99', desc: '约3.3元/天' }, + { key: 'yearly', name: '年卡', price: 899, priceLabel: '¥899', desc: '省¥289', tag: '推荐' } ], selected: 'yearly', - purchasing: false + purchasing: false, + subscription: null, + subRemaining: 0 }, onBack: function () { @@ -24,15 +27,59 @@ Page({ this.setData({ statusBarHeight: app.globalData.statusBarHeight }) }, + onShow: function () { + this.loadSubscription() + }, + + loadSubscription: function () { + var self = this + api.getSubscription().then(function (sub) { + self.setData({ + subscription: sub, + subRemaining: sub.remaining_days || 0 + }) + }).catch(function () {}) + }, + onSelect: function (e) { this.setData({ selected: e.currentTarget.dataset.plan }) }, onPurchase: function () { + var self = this + var selected = this.data.selected + var plan = null + for (var i = 0; i < this.data.plans.length; i++) { + if (this.data.plans[i].key === selected) { + plan = this.data.plans[i] + break + } + } + if (!plan) return + wx.showModal({ - title: '暂未开放', - content: '在线购买功能尚未开放,请联系管理员开通订阅。', - showCancel: false + title: '确认支付', + content: '模拟支付 ¥' + plan.price + '?(测试环境)', + success: function (res) { + if (res.confirm) { + self.doPurchase(plan) + } + } + }) + }, + + doPurchase: function (plan) { + var self = this + self.setData({ purchasing: true }) + api.purchase(plan.key).then(function (order) { + self.setData({ purchasing: false }) + wx.showToast({ title: '支付成功', icon: 'success' }) + setTimeout(function () { + wx.redirectTo({ url: '/pages/subscribe-success/subscribe-success?plan=' + plan.key }) + }, 1000) + }).catch(function (err) { + self.setData({ purchasing: false }) + wx.showToast({ title: err.message || '支付失败', icon: 'none' }) }) } }) diff --git a/miniprogram/pages/subscribe-plans/subscribe-plans.wxml b/miniprogram/pages/subscribe-plans/subscribe-plans.wxml index 5b3f4cc..399c0e8 100644 --- a/miniprogram/pages/subscribe-plans/subscribe-plans.wxml +++ b/miniprogram/pages/subscribe-plans/subscribe-plans.wxml @@ -6,6 +6,18 @@ + + + + 当前套餐 + {{subscription.plan === 'trial' ? '试用' : subscription.plan === 'monthly' ? '月卡' : subscription.plan === 'yearly' ? '年卡' : subscription.plan}} + + + 剩余天数 + {{subRemaining}}天 + + + 选择订阅套餐 @@ -17,17 +29,11 @@ - - ¥99 - 月卡 - 约3.3元/天 - - - 推荐 - 推荐 - ¥899 - 年卡 - 省¥289 + + {{item.tag}} + {{item.priceLabel}} + {{item.name}} + {{item.desc}} diff --git a/miniprogram/pages/subscribe-plans/subscribe-plans.wxss b/miniprogram/pages/subscribe-plans/subscribe-plans.wxss index b746d81..f7ea7ec 100644 --- a/miniprogram/pages/subscribe-plans/subscribe-plans.wxss +++ b/miniprogram/pages/subscribe-plans/subscribe-plans.wxss @@ -1,3 +1,29 @@ +.current-sub { + background: #fff9e6; + border: 2rpx solid #DCB982; + border-radius: 20rpx; + padding: 20rpx 24rpx; + margin-bottom: 24rpx; +} + +.current-sub-row { + display: flex; + justify-content: space-between; + align-items: center; + padding: 8rpx 0; +} + +.current-sub-label { + font-size: 24rpx; + color: #666666; +} + +.current-sub-value { + font-size: 24rpx; + color: #333333; + font-weight: 600; +} + .service-card { display: flex; align-items: center; diff --git a/miniprogram/pages/subscribe-prompt/subscribe-prompt.js b/miniprogram/pages/subscribe-prompt/subscribe-prompt.js index 42da15c..98c8872 100644 --- a/miniprogram/pages/subscribe-prompt/subscribe-prompt.js +++ b/miniprogram/pages/subscribe-prompt/subscribe-prompt.js @@ -18,5 +18,9 @@ Page({ wx.reLaunch({ url: '/pages/index/index' }) } }) + }, + + onUseFreeMode: function () { + wx.redirectTo({ url: '/pages/wear-check/wear-check?mode=0' }) } }) diff --git a/miniprogram/pages/subscribe-prompt/subscribe-prompt.wxml b/miniprogram/pages/subscribe-prompt/subscribe-prompt.wxml index 534e39c..23be561 100644 --- a/miniprogram/pages/subscribe-prompt/subscribe-prompt.wxml +++ b/miniprogram/pages/subscribe-prompt/subscribe-prompt.wxml @@ -30,6 +30,6 @@ - + diff --git a/miniprogram/utils/api.js b/miniprogram/utils/api.js index c3fcc35..74b8d97 100644 --- a/miniprogram/utils/api.js +++ b/miniprogram/utils/api.js @@ -14,7 +14,7 @@ module.exports = { bindDevice: function (deviceId) { return http.post('/api/v1/device/bind', { device_id: deviceId }) }, confirmBind: function (deviceId, token) { return http.post('/api/v1/device/bind/confirm', { device_id: deviceId, bind_token: token }) }, mockBind: function (deviceId) { return http.post('/api/v1/device/mock-bind', { device_id: deviceId }) }, - unbindDevice: function (deviceId) { return http.post('/api/v1/device/unbind', { device_id: deviceId }) }, + unbindDevice: function (deviceId) { return http.post('/api/v1/device/unbind', deviceId ? { device_id: deviceId } : {}) }, // Subscription getSubscription: function () { return http.get('/api/v1/subscription') },