Phase 0: 建立 design token 体系 - tokens.scss 新增 --tk-pri/--tk-pri-l/--tk-pri-d/--tk-shadow-btn/--tk-shadow-tab - .doctor-mode 覆盖为靛蓝色系,.elder-mode 非线性放大字号 - variables.scss 新增医生端色彩 + 阴影变量 Phase 1: 组件库 + 页面全局替换 - 75 个页面 SCSS $pri → var(--tk-pri) 全量替换 - 11 个新 UI 组件(PrimaryButton/TabFilter/FormInput/ProgressRing 等) - 8 个现有组件 SCSS 更新 - 18 个医生端页面 useElderClass → useDoctorClass - PageHeader 匹配原型 NavBar 规格 Phase 2: 登录页重写 - Logo: 方形+ → 圆形渐变 H - 登录方式: 纯微信 → 账号密码 + 微信一键登录 - 新增 credentialLogin API + store action - 字号/间距严格匹配原型 mp-01-login.html
217 lines
3.5 KiB
SCSS
217 lines
3.5 KiB
SCSS
@import '../../../styles/variables.scss';
|
||
@import '../../../styles/mixins.scss';
|
||
|
||
// PageShell 已接管:min-height, background, padding
|
||
|
||
/* ===== 余额卡片 ===== */
|
||
.balance-card {
|
||
background: $card;
|
||
margin: var(--tk-section-gap) var(--tk-page-padding) var(--tk-gap-md);
|
||
border-radius: $r-lg;
|
||
padding: var(--tk-gap-xl);
|
||
box-shadow: $shadow-sm;
|
||
}
|
||
|
||
.balance-label {
|
||
font-size: var(--tk-font-h2);
|
||
color: $tx2;
|
||
display: block;
|
||
margin-bottom: var(--tk-gap-xs);
|
||
}
|
||
|
||
.balance-value {
|
||
@include serif-number;
|
||
font-size: var(--tk-font-hero);
|
||
font-weight: bold;
|
||
color: var(--tk-pri);
|
||
display: block;
|
||
margin-bottom: var(--tk-card-padding-lg);
|
||
letter-spacing: -1px;
|
||
}
|
||
|
||
.balance-stats {
|
||
display: flex;
|
||
align-items: center;
|
||
background: $bg;
|
||
border-radius: $r;
|
||
padding: var(--tk-section-gap) 0;
|
||
}
|
||
|
||
.stat-item {
|
||
flex: 1;
|
||
display: flex;
|
||
flex-direction: column;
|
||
align-items: center;
|
||
}
|
||
|
||
.stat-value {
|
||
@include serif-number;
|
||
font-size: var(--tk-font-num);
|
||
font-weight: bold;
|
||
margin-bottom: var(--tk-gap-2xs);
|
||
|
||
&.stat-earn {
|
||
color: $acc;
|
||
}
|
||
|
||
&.stat-spend {
|
||
color: $wrn;
|
||
}
|
||
|
||
&.stat-expired {
|
||
color: $tx3;
|
||
}
|
||
}
|
||
|
||
.stat-label {
|
||
font-size: var(--tk-font-body);
|
||
color: $tx3;
|
||
}
|
||
|
||
.stat-divider {
|
||
width: 1px;
|
||
height: 48px;
|
||
background: $bd;
|
||
}
|
||
|
||
/* ===== 类型筛选标签 ===== */
|
||
.type-tabs {
|
||
display: flex;
|
||
gap: 0;
|
||
padding: 0 var(--tk-page-padding);
|
||
margin-bottom: var(--tk-gap-md);
|
||
}
|
||
|
||
.type-tab {
|
||
@include flex-center;
|
||
flex: 1;
|
||
padding: var(--tk-gap-md) 0;
|
||
position: relative;
|
||
|
||
&.active::after {
|
||
content: '';
|
||
position: absolute;
|
||
bottom: 0;
|
||
left: 50%;
|
||
transform: translateX(-50%);
|
||
width: 40px;
|
||
height: 4px;
|
||
background: var(--tk-pri);
|
||
border-radius: $r-xs;
|
||
}
|
||
}
|
||
|
||
.type-tab-text {
|
||
font-size: var(--tk-font-body-lg);
|
||
color: $tx3;
|
||
|
||
.type-tab.active & {
|
||
color: var(--tk-pri);
|
||
font-weight: bold;
|
||
}
|
||
}
|
||
|
||
/* ===== 交易列表 ===== */
|
||
.transaction-list {
|
||
padding: 0 var(--tk-page-padding);
|
||
}
|
||
|
||
.transaction-item {
|
||
display: flex;
|
||
align-items: center;
|
||
background: $card;
|
||
border-radius: $r;
|
||
padding: var(--tk-card-padding);
|
||
margin-bottom: var(--tk-gap-sm);
|
||
box-shadow: $shadow-sm;
|
||
}
|
||
|
||
.tx-badge {
|
||
width: 64px;
|
||
height: 64px;
|
||
border-radius: $r;
|
||
@include flex-center;
|
||
margin-right: var(--tk-section-gap);
|
||
flex-shrink: 0;
|
||
|
||
&.tx-badge-earn {
|
||
background: $acc-l;
|
||
}
|
||
|
||
&.tx-badge-spend {
|
||
background: $wrn-l;
|
||
}
|
||
|
||
&.tx-badge-expired {
|
||
background: $bd-l;
|
||
}
|
||
}
|
||
|
||
.tx-badge-text {
|
||
font-family: 'Georgia', 'Times New Roman', serif;
|
||
font-size: var(--tk-font-body-lg);
|
||
font-weight: bold;
|
||
|
||
.tx-badge-earn & {
|
||
color: $acc;
|
||
}
|
||
|
||
.tx-badge-spend & {
|
||
color: $wrn;
|
||
}
|
||
|
||
.tx-badge-expired & {
|
||
color: $tx3;
|
||
}
|
||
}
|
||
|
||
.tx-info {
|
||
flex: 1;
|
||
min-width: 0;
|
||
}
|
||
|
||
.tx-desc {
|
||
font-size: var(--tk-font-body-lg);
|
||
color: $tx;
|
||
display: block;
|
||
margin-bottom: var(--tk-gap-2xs);
|
||
overflow: hidden;
|
||
text-overflow: ellipsis;
|
||
white-space: nowrap;
|
||
}
|
||
|
||
.tx-date {
|
||
font-size: var(--tk-font-body);
|
||
color: $tx3;
|
||
display: block;
|
||
}
|
||
|
||
.tx-amount-col {
|
||
display: flex;
|
||
flex-direction: column;
|
||
align-items: flex-end;
|
||
margin-left: var(--tk-gap-md);
|
||
flex-shrink: 0;
|
||
}
|
||
|
||
.tx-amount {
|
||
@include serif-number;
|
||
font-size: var(--tk-font-num);
|
||
font-weight: bold;
|
||
margin-bottom: var(--tk-gap-2xs);
|
||
|
||
&.tx-amount-positive {
|
||
color: $acc;
|
||
}
|
||
|
||
&.tx-amount-negative {
|
||
color: $tx2;
|
||
}
|
||
}
|
||
|
||
.tx-remaining {
|
||
@include serif-number;
|
||
font-size: var(--tk-font-body);
|
||
color: $tx3;
|
||
}
|