fix(ui): polish miniprogram and admin console details

小程序修复:
- 首页/我的/记录页移除自定义头部,使用原生导航栏
- tabBar '护理记录' 改为 '记录'
- 智能模式跳转auto-scan页面(不再跳过)
- 扫码区域尺寸 300→360rpx,图标 100→120rpx
- 护理中倒计时 120→144rpx
- 完成页图标 120→140rpx
- 完成页时长格式 '10分0秒' → '10分钟'
- 蓝牙连接 '连接中' → '点击连接'
- 订阅套餐默认选中年卡
- 订阅成功页改为动态数据(非硬编码)
- 我的页增加退出登录按钮
- 护理记录日期支持'今天/昨天'相对格式
- 扫描进度居中
- 锁定模式图标加灰度滤镜

管理后台修复:
- 所有页面移除重复页面标题
- 仪表盘统计卡片改为垂直布局
- 快捷操作图标统一粉色+箭头
- 设备管理搜索placeholder和库存badge修正
- 用户管理头像、次后缀、月卡/试用badge颜色修正
- 订阅管理stat背景改白色、过期改红色、tab切换修复
- 护理记录模式badge修正
- 操作日志改为平铺列表
- 系统设置开关改绿色、表单改水平布局
- 全局背景色 #f5f5f5 → #f0f2f5
这个提交包含在:
Guoguo
2026-04-23 01:18:50 +08:00
父节点 7fc17b958a
当前提交 5064cf119d
修改 26 个文件,包含 318 行新增317 行删除
+31 -47
查看文件
@@ -1,23 +1,22 @@
<template>
<AdminLayout currentPage="/pages/subscription/index">
<view class="page-card">
<view class="page-header">
<text class="page-title">💳 订阅管理</text>
<view class="header-actions">
<button class="btn-default btn-sm">导出报表</button>
</view>
<view class="toolbar">
<view class="header-actions">
<button class="btn-default btn-sm">导出报表</button>
</view>
</view>
<view class="page-card">
<view class="stats-row">
<view class="stat-item green">
<view class="stat-item">
<text class="stat-value">{{ stats.monthly_count || 486 }}</text>
<text class="stat-label">月卡会员</text>
</view>
<view class="stat-item green">
<view class="stat-item">
<text class="stat-value">{{ stats.yearly_count || 1258 }}</text>
<text class="stat-label">年卡会员</text>
</view>
<view class="stat-item gold">
<view class="stat-item">
<text class="stat-value">{{ stats.trial_count || 856 }}</text>
<text class="stat-label">试用中</text>
</view>
@@ -30,11 +29,11 @@
<view class="page-card">
<view class="tabs">
<view class="tab active">全部订阅</view>
<view class="tab" @click="onTabFilter('monthly')">月卡</view>
<view class="tab" @click="onTabFilter('yearly')">年卡</view>
<view class="tab" @click="onTabFilter('trial')">试用中</view>
<view class="tab" @click="onTabFilter('expired')">已过期</view>
<view class="tab" :class="{ active: activeTab === 'all' }" @click="onTabFilter('all')">全部订阅</view>
<view class="tab" :class="{ active: activeTab === 'monthly' }" @click="onTabFilter('monthly')">月卡</view>
<view class="tab" :class="{ active: activeTab === 'yearly' }" @click="onTabFilter('yearly')">年卡</view>
<view class="tab" :class="{ active: activeTab === 'trial' }" @click="onTabFilter('trial')">试用中</view>
<view class="tab" :class="{ active: activeTab === 'expired' }" @click="onTabFilter('expired')">已过期</view>
</view>
<view class="data-table">
@@ -172,7 +171,7 @@ export default {
return map[status] || '-'
},
statusBadge(status) {
const map = { 1: 'badge badge-success', 2: 'badge badge-warning', 3: 'badge badge-default' }
const map = { 1: 'badge badge-success', 2: 'badge badge-warning', 3: 'badge badge-error' }
return map[status] || 'badge badge-default'
},
formatDate(d) {
@@ -183,24 +182,13 @@ export default {
</script>
<style scoped>
.page-card {
.toolbar {
background: #fff;
border-radius: 8px;
padding: 20px;
padding: 12px 20px;
margin-bottom: 16px;
}
.page-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 20px;
}
.page-title {
font-size: 18px;
font-weight: 600;
color: #333;
justify-content: flex-end;
}
.header-actions {
@@ -209,26 +197,25 @@ export default {
gap: 8px;
}
.page-card {
background: #fff;
border-radius: 8px;
padding: 20px;
margin-bottom: 16px;
}
.stats-row {
display: flex;
gap: 16px;
margin-bottom: 4px;
}
.stat-item {
flex: 1;
background: #fafafa;
background: #fff;
border-radius: 8px;
padding: 16px;
text-align: center;
}
.stat-item.green {
background: #f6ffed;
}
.stat-item.gold {
background: #fffbe6;
border: 1px solid #f0f0f0;
}
.stat-value {
@@ -239,14 +226,6 @@ export default {
margin-bottom: 4px;
}
.green .stat-value {
color: #52c41a;
}
.gold .stat-value {
color: #faad14;
}
.stat-label {
font-size: 13px;
color: #999;
@@ -324,6 +303,11 @@ export default {
color: #faad14;
}
.badge-error {
background: #fff2f0;
color: #ff4d4f;
}
.badge-default {
background: #f5f5f5;
color: #999;