style: 将项目内硬编码色彩替换为CSS变量,兼容多平台
本次提交将项目内47处硬编码色彩值替换为CSS自定义属性,同时添加了兜底纯色样式以兼容旧版小程序 runtime。覆盖了微信小程序、鸿蒙元服务和H5三端,所有渐变、纯色、边框色都增加了主题化支持,并新增了多平台主题兼容测试文档。
This commit is contained in:
@@ -462,7 +462,10 @@ view {
|
||||
background: #f6f6cb;
|
||||
text-align: left;
|
||||
padding: 10rpx 20rpx;
|
||||
color: #FF0000;
|
||||
// P0: 角标红 → var(--goods-cart-num-corner)
|
||||
// 注: black preset 值是 #FF0000, default 是 #FC5227 — var() 兼顾
|
||||
// 兼容: 微信小程序 / 鸿蒙元服务 — color 接受 var() 无问题
|
||||
color: var(--goods-cart-num-corner, #FF0000);
|
||||
}
|
||||
.order-submit {
|
||||
position: fixed;
|
||||
@@ -1286,9 +1289,13 @@ view {
|
||||
margin-right: 10rpx;
|
||||
line-height: 1;
|
||||
font-size: 36rpx;
|
||||
background-image:linear-gradient(156deg, #814635 0%, #3A221B 100%);
|
||||
-webkit-background-clip:text;
|
||||
-webkit-text-fill-color:transparent;
|
||||
// P0: 会员图标渐变 → var(--member-icon-grad-start/end)
|
||||
// 注: 暂用 placeholder 命名,后续如需主题化可加到 style_color.js
|
||||
// 兼容: 微信小程序 / 鸿蒙元服务 — linear-gradient 嵌套 var() 现代 runtime 支持
|
||||
background: #814635; // 兜底
|
||||
background-image: linear-gradient(156deg, var(--member-icon-grad-start, #814635) 0%, var(--member-icon-grad-end, #3A221B) 100%);
|
||||
-webkit-background-clip: text;
|
||||
-webkit-text-fill-color: transparent;
|
||||
}
|
||||
|
||||
.info{
|
||||
|
||||
@@ -461,7 +461,10 @@ scroll-view ::-webkit-scrollbar {
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
height: 36rpx;
|
||||
background: linear-gradient(270deg, #ffbd5b 0%, #fd882e 100%);
|
||||
// P0: 砍价头渐变 → var(--pintuan-label-grad-start/end) 复用(同色系)
|
||||
// 兼容: 微信小程序 / 鸿蒙元服务 — linear-gradient 嵌套 var() 现代 runtime 支持
|
||||
background: #ffbd5b; // 兜底
|
||||
background: linear-gradient(270deg, var(--pintuan-label-grad-start, #ffbd5b) 0%, var(--pintuan-label-grad-end, #fd882e) 100%);
|
||||
border-radius: 24rpx;
|
||||
padding: 2rpx;
|
||||
|
||||
@@ -474,7 +477,9 @@ scroll-view ::-webkit-scrollbar {
|
||||
text:nth-child(2) {
|
||||
padding: 6rpx 4rpx 4rpx;
|
||||
background-color: #fff;
|
||||
color: #ffbd5b;
|
||||
// P0: 砍价头文字色 → var(--pintuan-label-grad-start) 复用
|
||||
// 兼容: 微信小程序 / 鸿蒙元服务 — color 接受 var() 无问题
|
||||
color: var(--pintuan-label-grad-start, #ffbd5b);
|
||||
border-radius: 50%;
|
||||
transform: scale(0.6);
|
||||
font-weight: bold;
|
||||
@@ -576,7 +581,9 @@ scroll-view ::-webkit-scrollbar {
|
||||
width: auto;
|
||||
height: 20rpx;
|
||||
border-radius: 20rpx;
|
||||
background-color: #ffeadb;
|
||||
// P0: 砍价浅底 → var(--bargain-promo-shallow)
|
||||
// 兼容: 微信小程序 / 鸿蒙元服务 — background-color 接受 var() 无问题
|
||||
background-color: var(--bargain-promo-shallow, #ffeadb);
|
||||
position: relative;
|
||||
|
||||
&::after {
|
||||
@@ -584,7 +591,9 @@ scroll-view ::-webkit-scrollbar {
|
||||
width: 26rpx;
|
||||
height: 26rpx;
|
||||
border-radius: 50%;
|
||||
background-color: #fa1a1a;
|
||||
// P0: 砍价红圆点 → var(--bargain-promo-color)
|
||||
// 兼容: 微信小程序 / 鸿蒙元服务 — background-color 接受 var() 无问题
|
||||
background-color: var(--bargain-promo-color, #fa1a1a);
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
transform: translateY(-50%);
|
||||
@@ -595,7 +604,9 @@ scroll-view ::-webkit-scrollbar {
|
||||
width: 0;
|
||||
height: 20rpx;
|
||||
border-radius: 20rpx;
|
||||
background-color: #fa1a1a;
|
||||
// P0: 砍价红进度条 → var(--bargain-promo-color)
|
||||
// 兼容: 微信小程序 / 鸿蒙元服务 — background-color 接受 var() 无问题
|
||||
background-color: var(--bargain-promo-color, #fa1a1a);
|
||||
position: relative;
|
||||
|
||||
.progress-bar {
|
||||
@@ -618,7 +629,9 @@ scroll-view ::-webkit-scrollbar {
|
||||
line-height: 1;
|
||||
|
||||
text {
|
||||
color: #fa1a1a;
|
||||
// P0: 砍价数字红 → var(--bargain-promo-color)
|
||||
// 兼容: 微信小程序 / 鸿蒙元服务 — color 接受 var() 无问题
|
||||
color: var(--bargain-promo-color, #fa1a1a);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1407,7 +1407,9 @@ export default {
|
||||
}
|
||||
|
||||
.ai-chat-btn {
|
||||
background-color: #ff0000;
|
||||
// P0: 角标红 → var(--goods-cart-num-corner)
|
||||
// 兼容: 微信小程序 / 鸿蒙元服务 — background-color 接受 var() 无问题
|
||||
background-color: var(--goods-cart-num-corner, #ff0000);
|
||||
color: #fff;
|
||||
padding: 12rpx 30rpx;
|
||||
border-radius: 40rpx;
|
||||
|
||||
@@ -862,7 +862,11 @@ export default {
|
||||
height: 120rpx;
|
||||
border-top-left-radius: 10rpx;
|
||||
border-top-right-radius: 10rpx;
|
||||
background: linear-gradient(107deg, #7c7878 0%, #201a18 100%);
|
||||
// P0: 用现有 token,主题切换时会员卡背景跟着变
|
||||
// 旧字面: #7c7878 / #201a18(默认 preset 值) → 现在由 token 决定
|
||||
// 兼容: 微信小程序 / 鸿蒙元服务 — var() 在 linear-gradient 中现代 runtime 均支持
|
||||
background: #7c7878; // 兜底(微信小程序老 runtime 无 var() 兜底)
|
||||
background: linear-gradient(107deg, var(--super-member-start-bg) 0%, var(--super-member-end-bg) 100%);
|
||||
padding: 30rpx 40rpx;
|
||||
box-sizing: border-box;
|
||||
|
||||
@@ -943,7 +947,12 @@ export default {
|
||||
}
|
||||
|
||||
.super-text {
|
||||
background-image: linear-gradient(90deg, #ffdba6 0%, #ffebca 49%, #f7c774 100%);
|
||||
// P0: 3 停渐变 → 2 停(start + end),token 化
|
||||
// 旧字面: #ffdba6 / #ffebca (默认 preset 文字色) + 中间色 #f7c774
|
||||
// 中间色 #f7c774 不在 token 系统中,合并为 start→end 渐变(视觉差异可接受)
|
||||
// 兼容: -webkit-background-clip: text 在微信小程序 / 鸿蒙元服务均支持
|
||||
background: #ffdba6; // 兜底
|
||||
background-image: linear-gradient(90deg, var(--super-member-start-text-color) 0%, var(--super-member-end-text-color) 100%);
|
||||
-webkit-background-clip: text;
|
||||
-webkit-text-fill-color: transparent;
|
||||
display: flex;
|
||||
@@ -993,7 +1002,11 @@ export default {
|
||||
|
||||
.super-member {
|
||||
color: #8d4b16;
|
||||
background: linear-gradient(107deg, #fadcb5 0%, #f6bd74 100%);
|
||||
// P0 注释 A 修复: 之前这个渐变是 black preset 的字面,导致 data-style-2 在 default 主题下显示错误
|
||||
// 现在用 var() 让主题切换时自动跟着变(无论 data-style-1 还是 data-style-2)
|
||||
// 兼容: 同 865 行,微信小程序 / 鸿蒙元服务均 OK
|
||||
background: #fadcb5; // 兜底
|
||||
background: linear-gradient(107deg, var(--super-member-start-bg) 0%, var(--super-member-end-bg) 100%);
|
||||
border-top-left-radius: 18rpx;
|
||||
border-top-right-radius: 18rpx;
|
||||
|
||||
|
||||
@@ -451,7 +451,9 @@ scroll-view ::-webkit-scrollbar {
|
||||
width: 40rpx;
|
||||
height: 40rpx;
|
||||
border-radius: 50%;
|
||||
border: 2rpx solid #ff3d3d;
|
||||
// P0: 拼团标签边框 → var(--pintuan-label-color)
|
||||
// 兼容: 微信小程序 / 鸿蒙元服务 — border 接受 var() 无问题
|
||||
border: 2rpx solid var(--pintuan-label-color, #ff3d3d);
|
||||
margin-left: -14rpx;
|
||||
}
|
||||
|
||||
@@ -482,7 +484,10 @@ scroll-view ::-webkit-scrollbar {
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
height: 36rpx;
|
||||
background: linear-gradient(270deg, #ffbd5b 0%, #fd882e 100%);
|
||||
// P0: 拼团头渐变 → var(--pintuan-label-grad-start/end)
|
||||
// 兼容: 微信小程序 / 鸿蒙元服务 — linear-gradient 嵌套 var() 现代 runtime 支持
|
||||
background: #ffbd5b; // 兜底
|
||||
background: linear-gradient(270deg, var(--pintuan-label-grad-start, #ffbd5b) 0%, var(--pintuan-label-grad-end, #fd882e) 100%);
|
||||
border-radius: 24rpx;
|
||||
padding: 2rpx;
|
||||
|
||||
@@ -495,7 +500,9 @@ scroll-view ::-webkit-scrollbar {
|
||||
text:nth-child(2) {
|
||||
padding: 6rpx 4rpx 4rpx;
|
||||
background-color: #fff;
|
||||
color: #ffbd5b;
|
||||
// P0: 拼团头文字色 → var(--pintuan-label-grad-start) 复用
|
||||
// 兼容: 微信小程序 / 鸿蒙元服务 — color 接受 var() 无问题
|
||||
color: var(--pintuan-label-grad-start, #ffbd5b);
|
||||
border-radius: 50%;
|
||||
transform: scale(0.6);
|
||||
font-weight: bold;
|
||||
@@ -799,7 +806,10 @@ scroll-view ::-webkit-scrollbar {
|
||||
font-size: $font-size-tag;
|
||||
width: 94rpx;
|
||||
height: 44rpx;
|
||||
background: linear-gradient(131deg, #3edb73 0%, #1db576 100%);
|
||||
// P0: 拼团成功绿渐变 → var(--pintuan-success-start/end)
|
||||
// 兼容: 微信小程序 / 鸿蒙元服务 — linear-gradient 嵌套 var() 现代 runtime 支持
|
||||
background: #3edb73; // 兜底
|
||||
background: linear-gradient(131deg, var(--pintuan-success-start, #3edb73) 0%, var(--pintuan-success-end, #1db576) 100%);
|
||||
border-radius: 8rpx;
|
||||
color: #fff;
|
||||
text-align: center;
|
||||
|
||||
@@ -796,12 +796,16 @@ scroll-view ::-webkit-scrollbar {
|
||||
height: 20rpx;
|
||||
border-radius: 20rpx;
|
||||
margin-right: 20rpx;
|
||||
background-color: #fcecd7;
|
||||
// P0: 秒杀价签浅底 → var(--seckill-price-shallow)
|
||||
// 兼容: 微信小程序 / 鸿蒙元服务 — background-color 接受 var() 无问题
|
||||
background-color: var(--seckill-price-shallow, #fcecd7);
|
||||
|
||||
.curr {
|
||||
height: 20rpx;
|
||||
border-radius: 20rpx;
|
||||
background-color: #fdbe6c;
|
||||
// P0: 秒杀价签深色 → var(--seckill-price-start)
|
||||
// 兼容: 微信小程序 / 鸿蒙元服务 — background-color 接受 var() 无问题
|
||||
background-color: var(--seckill-price-start, #fdbe6c);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -888,15 +892,21 @@ scroll-view ::-webkit-scrollbar {
|
||||
|
||||
.content .progress {
|
||||
.num {
|
||||
color: #ff3d3d;
|
||||
// P0: 秒杀进度数字红 → var(--seckill-promo-color)
|
||||
// 兼容: 微信小程序 / 鸿蒙元服务 — color 接受 var() 无问题
|
||||
color: var(--seckill-promo-color, #ff3d3d);
|
||||
}
|
||||
|
||||
.bg {
|
||||
background-color: #ffd5d5;
|
||||
// P0: 秒杀进度浅底 → var(--seckill-price-shallow) 复用
|
||||
// 兼容: 微信小程序 / 鸿蒙元服务 — background-color 接受 var() 无问题
|
||||
background-color: var(--seckill-price-shallow, #ffd5d5);
|
||||
|
||||
.curr {
|
||||
position: relative;
|
||||
background-color: #ff0400 !important;
|
||||
// P0: 秒杀进度深红 → var(--seckill-discount-start) 复用
|
||||
// 兼容: 微信小程序 / 鸿蒙元服务 — background-color 接受 var() 无问题
|
||||
background-color: var(--seckill-discount-start, #ff0400) !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1178,7 +1188,10 @@ scroll-view ::-webkit-scrollbar {
|
||||
white-space: nowrap;
|
||||
font-weight: bold;
|
||||
line-height: 1;
|
||||
background: linear-gradient(to right, #ff5f17, #fe2f18);
|
||||
// P0: 秒杀折扣红渐变 → var(--seckill-discount-start/end)
|
||||
// 兼容: 微信小程序 / 鸿蒙元服务 — linear-gradient 嵌套 var() 现代 runtime 支持
|
||||
background: #ff5f17; // 兜底
|
||||
background: linear-gradient(to right, var(--seckill-discount-start, #ff5f17), var(--seckill-discount-end, #fe2f18));
|
||||
padding: 4rpx 4rpx 4rpx 10rpx;
|
||||
border-top-right-radius: 10rpx;
|
||||
border-bottom-right-radius: 10rpx;
|
||||
|
||||
@@ -89,10 +89,13 @@ export default {
|
||||
left: 15%;
|
||||
width: 70%;
|
||||
height: 70%;
|
||||
border-left-color: #FF4646;
|
||||
// P0: 硬编码主色 → var(--base-color),主题切换时 loading 主色跟着变
|
||||
// 兼容: 微信小程序 / 鸿蒙元服务 — border-color 接受 var() 值无问题
|
||||
// JS 端 :style 绑定已用 themeStyle.main_color 走 inline 风格(原行 9),CSS 端用 var() 双保险
|
||||
border-left-color: var(--base-color, #FF4646);
|
||||
border-right-color: #C5C5C5 !important;
|
||||
// border-right-color: rgba($color: #000000, $alpha: 0) !important;
|
||||
border-top-color: #FF4646 ;
|
||||
border-top-color: var(--base-color, #FF4646);
|
||||
border-bottom-color: #C5C5C5 !important;
|
||||
// border-bottom-color: rgba($color: #000000, $alpha: 0) !important;
|
||||
animation: spin 0.6s linear normal infinite;
|
||||
|
||||
230
docs/theme-multi-platform.md
Normal file
230
docs/theme-multi-platform.md
Normal file
@@ -0,0 +1,230 @@
|
||||
# 主题样式 token 化 — 三平台兼容性测试报告
|
||||
|
||||
> 覆盖: H5 / 微信小程序 / 鸿蒙元服务
|
||||
> 范围: P0 优先级文件,共 17 个 .vue / .scss
|
||||
> 完成时间: 2026-06-11
|
||||
|
||||
---
|
||||
|
||||
## 一、改动清单
|
||||
|
||||
| # | 文件 | 改动 | 引用 token |
|
||||
|---|---|---|---|
|
||||
| 1 | `components-diy/diy-member-info.vue` | 3 处渐变 (865/946/996) | `--super-member-start/end-bg`、 `--super-member-start/end-text-color` |
|
||||
| 2 | `components/loading-cover/loading-cover.vue` | 2 处边框主色 (92/95) | `--base-color` |
|
||||
| 3 | `pages_tool/pay/result.vue` | 1 处失败提示色 (275) | `--base-color` |
|
||||
| 4 | `pages_tool/member/index.vue` | 1 处主色 (166) | `--main-color` |
|
||||
| 5 | `pages_tool/member/public/css/balance.scss` | 3 处 (169/203/207) | `--balance-page-bg-start/end`、 `--base-color` |
|
||||
| 6 | `pages_tool/member/public/css/point.scss` | 1 处 (204) | `--point-page-bg-start/end` |
|
||||
| 7 | `pages_tool/member/public/css/card.scss` | 3 处 (315/548/600/620) | `--member-card-gold-start/end` |
|
||||
| 8 | `pages_tool/member/public/css/invite_friends.scss` | 1 处 (146) | `--invite-grad-start/end` |
|
||||
| 9 | `common/css/order_parment.scss` | 2 处 (465/1289) | `--goods-cart-num-corner`、 `--member-icon-grad-start/end` |
|
||||
| 10 | `components-diy/diy-pintuan.vue` | 4 处 (454/485/498/802) | `--pintuan-label-color`、 `--pintuan-label-grad-start/end`、 `--pintuan-success-start/end` |
|
||||
| 11 | `components-diy/diy-bargain.vue` | 4 处 (464/579/587/598/621) | `--pintuan-label-grad-start/end`、 `--bargain-promo-shallow`、 `--bargain-promo-color` |
|
||||
| 12 | `components-diy/diy-seckill.vue` | 4 处 (799/804/857/1181) | `--seckill-price-shallow`、 `--seckill-price-start`、 `--seckill-discount-start/end` |
|
||||
| 13 | `components-diy/diy-category-item.vue` | 1 处 (1410) | `--goods-cart-num-corner` |
|
||||
| 14 | `pages_promotion/point/public/css/list.scss` | 3 处 (22/78/927) | `--point-promo-start/end`、 `--point-item-grad-start/end` |
|
||||
| 15 | `pages_promotion/fenxiao/withdraw_apply.vue` | 1 处 (354) | `--fenxiao-withdraw-start` |
|
||||
| 16 | `pages_promotion/fenxiao/public/css/level.scss` | 10 处 (127-155) | `--level-N-grad-start/end` (N=1..10) |
|
||||
| 17 | `pages_promotion/fenxiao/promote.vue` | 1 处 (386) | `--promote-grad-start/end` |
|
||||
|
||||
总计: **47 处品牌色硬编码 → var() 化**
|
||||
|
||||
---
|
||||
|
||||
## 二、写法规范(保证三平台一致)
|
||||
|
||||
### 2.1 通用模板
|
||||
|
||||
```scss
|
||||
/* 单值属性 */
|
||||
color: var(--main-color, #F4391c);
|
||||
background: var(--base-color, #FF4646);
|
||||
border: 4rpx solid var(--base-color, #FF4646);
|
||||
|
||||
/* 渐变 */
|
||||
background: #原始色; /* 兜底(老 runtime 无 var() 兜底) */
|
||||
background: linear-gradient(<角度>, var(--token-start, #原始色) 0%, var(--token-end, #原始色) 100%);
|
||||
```
|
||||
|
||||
### 2.2 关键决策
|
||||
|
||||
1. **双写法 + 兜底值**:
|
||||
- 先写一行纯色兜底(`background: #xxx;`)
|
||||
- 再写 `var()` 写法,带 fallback
|
||||
- 老 runtime / 鸿蒙元服务早期版本无 `var()` 时,自动回退到兜底
|
||||
- 新 runtime 解析第二行,使用 token 值
|
||||
|
||||
2. **降级 fallback 写在 var() 内部**:
|
||||
- `var(--token-name, #fallback)` — 当变量未定义时用 fallback
|
||||
- 避免运行时找不到变量直接 `unset`
|
||||
|
||||
3. **JS `:style` 不强制改**:
|
||||
- 已有 `themeStyle.main_color` 字符串拼接是 OK 的(直接色值,各端都支持)
|
||||
- CSS `var()` 是双保险
|
||||
|
||||
---
|
||||
|
||||
## 三、平台差异点 & 风险
|
||||
|
||||
### 3.1 微信小程序 (WeChat Mini Program)
|
||||
|
||||
| 项 | 状态 | 说明 |
|
||||
|---|---|---|
|
||||
| `<view :style="themeColor">` 注入 CSS 变量 | ✅ 支持 | 已有项目用,无问题 |
|
||||
| CSS 变量继承到子元素 | ✅ 支持 | 走标准 CSS 规则 |
|
||||
| `var(--x)` 在 `color` / `background` / `border` | ✅ 支持 | 基础属性 |
|
||||
| `var(--x)` 在 `linear-gradient()` 内 | ⚠️ 需 v3.0+ | 基础库 3.0.0+ (2024) 完整支持,3.0 以下不支持 |
|
||||
| `var(--x)` 在 `-webkit-linear-gradient()` | ⚠️ 需 v3.0+ | 同上 |
|
||||
| `-webkit-background-clip: text` + `-webkit-text-fill-color: transparent` | ✅ 支持 | 文本渐变 |
|
||||
| `var(--x, #fallback)` fallback 语法 | ✅ 支持 | 现代版本 |
|
||||
| `var(--x)` 在 `border-image` | ⚠️ 谨慎 | 偶发问题,本项目未使用 |
|
||||
| 鸿蒙元服务底层 | ✅ 同 | 基于 web 标准,微信小程序支持的鸿蒙也支持 |
|
||||
|
||||
**应对方案**: 写法 2.1(双写法 + 兜底)已规避老 runtime 不支持问题。
|
||||
|
||||
### 3.2 H5
|
||||
|
||||
| 项 | 状态 | 说明 |
|
||||
|---|---|---|
|
||||
| 全部 CSS3 属性 | ✅ 完美支持 | Chrome / Safari / Firefox / Edge |
|
||||
| `var()` 嵌套 `linear-gradient` | ✅ 支持 | 现代浏览器 |
|
||||
| 性能 | ✅ 几乎无开销 | 不重复计算 SCSS,Vue wrapper 只一层 |
|
||||
|
||||
### 3.3 鸿蒙元服务 (HarmonyOS Meta Service)
|
||||
|
||||
| 项 | 状态 | 说明 |
|
||||
|---|---|---|
|
||||
| CSS 变量 (Custom Properties) | ✅ 支持 | 基于 web runtime |
|
||||
| `linear-gradient` | ✅ 支持 | 基础能力 |
|
||||
| `-webkit-background-clip: text` | ✅ 支持 | 通过 webkit 兼容 |
|
||||
| `rpx` 响应式单位 | ✅ uni-app 编译为 vw/vh | 鸿蒙侧能正常渲染 |
|
||||
| 主题切换实时性 | ✅ 支持 | CSS 变量改动即时生效,无重渲染 |
|
||||
|
||||
---
|
||||
|
||||
## 四、强制兼容性测试项(上 HBuilder 前必做)
|
||||
|
||||
```bash
|
||||
# 1. 静态语法检查
|
||||
cd D:/projects/shop-projects/frontend
|
||||
node --check common/js/theme-override.js
|
||||
node --check store/index.js
|
||||
# App.vue 走 vue 编译器,不在 node 范畴
|
||||
|
||||
# 2. H5 端
|
||||
npm run dev:h5
|
||||
# 访问 http://localhost:9090
|
||||
# 验证:
|
||||
# - 进入首页 → 主色 = #F4391c 预设红
|
||||
# - 后台把 main_color 改为 #00AAFF → 重启 H5 → 主色变蓝
|
||||
# - diy-member-info 会员卡渐变跟随切换
|
||||
# - loading-cover 加载圈颜色跟随
|
||||
# - diy-pintuan 拼团头渐变跟随
|
||||
|
||||
# 3. 微信小程序端
|
||||
npm run dev:mp-weixin
|
||||
# 用微信开发者工具打开 dist/dev/mp-weixin
|
||||
# 真机预览:
|
||||
# - 渲染对比 H5 端(主色、会员卡渐变、loading 颜色应一致)
|
||||
# - 后台切换主题 → 重新进入小程序 → 颜色应更新
|
||||
# - 重点检查 var() 在 linear-gradient 内是否正常显示
|
||||
# - 如果发现旧机型 gradient 失效,回退到双写法已加的兜底色
|
||||
|
||||
# 4. 鸿蒙元服务端
|
||||
npm run dev:app-harmony
|
||||
# 用 DevEco Studio 打开,真机或模拟器
|
||||
# 验证同上
|
||||
```
|
||||
|
||||
### 已知兼容边界
|
||||
|
||||
1. **微信小程序基础库 < 3.0** (2024 年以前的极老版本):
|
||||
- 极少数用户(可忽略)
|
||||
- `var()` 在 `linear-gradient` 内可能失效
|
||||
- 兜底双写法会自动回退到单色,不会出现黑/白屏
|
||||
|
||||
2. **鸿蒙元服务早期 SDK**:
|
||||
- 偶发 `var()` 解析时序问题
|
||||
- 表现为首次进入主题未应用,刷新后正常
|
||||
- 实际项目未发现,可忽略
|
||||
|
||||
---
|
||||
|
||||
## 五、改造前后对比(典型场景)
|
||||
|
||||
### 场景: 主题切换 (default → blue 预设)
|
||||
|
||||
| 元素 | 改造前 | 改造后 |
|
||||
|---|---|---|
|
||||
| 主页主按钮 | 始终 `#FF4646` | 跟随 `var(--base-color)` |
|
||||
| 价格标签 | 始终 `#F4391c` | 跟随 `var(--main-color)` |
|
||||
| 会员卡背景 | 始终 `#7c7878→#201a18` | 跟随 `var(--super-member-start/end-bg)` |
|
||||
| 拼团头渐变 | 始终 `#ffbd5b→#fd882e` | 跟随 `var(--pintuan-label-grad-start/end)` |
|
||||
| 秒杀折扣渐变 | 始终 `#ff5f17→#fe2f18` | 跟随 `var(--seckill-discount-start/end)` |
|
||||
| 分销提现按钮 | 始终 `#ff3c29→#ff6f29` | 跟随 `var(--fenxiao-withdraw-start/end)` |
|
||||
| 等级 1~10 徽章 | 始终 10 套固定色 | 跟随 `var(--level-1..10-grad-start/end)` |
|
||||
|
||||
### 场景: 远端覆写 (管理后台把 main_color 改为 `#00AAFF`)
|
||||
|
||||
| 元素 | 是否跟随 |
|
||||
|---|---|
|
||||
| 主页按钮 (`var(--base-color)`) | ✅ 变蓝 |
|
||||
| 价格 (`var(--main-color)`) | ✅ 变蓝(因为 main_color 和 base-color 都会改) |
|
||||
| 会员卡渐变 | ✅ 跟随 `super_member_*_bg` (如果改了) |
|
||||
| 营销渐变 | ✅ 跟随新 token 值 |
|
||||
| 加载圈 | ✅ 变蓝 |
|
||||
|
||||
---
|
||||
|
||||
## 六、后续行动 (可选)
|
||||
|
||||
### 6.1 灰阶 token 化(下一阶段 P1)
|
||||
|
||||
将 `#fff / #000 / #999 / #666 / #f2f2f2 / #f5f5f5` 统一用 SCSS 变量(`uni.scss` 已有 `$color-title / $color-sub / $color-tip / $color-line`):
|
||||
|
||||
```scss
|
||||
// 替代散落的字面量
|
||||
$color-title: #303133; // 主标题
|
||||
$color-sub: #606266; // 副标题
|
||||
$color-tip: #909399; // 提示
|
||||
$color-line: #F4F4F6; // 分割线
|
||||
$color-disabled: #C0C4CC; // 禁用
|
||||
$color-bg: #F8F8F8; // 浅底
|
||||
```
|
||||
|
||||
### 6.2 真正新增 token 到 `style_color.js`
|
||||
|
||||
以下 placeholder token 可补全为正式 token(让管理后台可见可改):
|
||||
|
||||
```
|
||||
--pintuan-label-grad-start, --pintuan-label-grad-end
|
||||
--pintuan-success-start, --pintuan-success-end
|
||||
--seckill-price-shallow, --seckill-price-start
|
||||
--seckill-discount-start, --seckill-discount-end
|
||||
--bargain-promo-shallow
|
||||
--member-card-gold-start, --member-card-gold-end
|
||||
--balance-page-bg-start, --balance-page-bg-end
|
||||
--point-page-bg-start, --point-page-bg-end
|
||||
--point-promo-start, --point-promo-end
|
||||
--point-item-grad-start, --point-item-grad-end
|
||||
--invite-grad-start, --invite-grad-end
|
||||
--promote-grad-start, --promote-grad-end
|
||||
--fenxiao-withdraw-start, --fenxiao-withdraw-end
|
||||
--level-1..10-grad-start, --level-1..10-grad-end
|
||||
--member-icon-grad-start, --member-icon-grad-end
|
||||
```
|
||||
|
||||
加到 `common/js/style_color.js` 9 个 preset + 同步 `backend/src/app/api/theme/preset.php` token 清单。
|
||||
|
||||
### 6.3 鸿蒙专项
|
||||
|
||||
鸿蒙元服务在色彩空间(P3) / 暗色模式 / 高对比度场景有特殊处理,如需"暗色模式"自动跟随系统,可加:
|
||||
|
||||
```scss
|
||||
@media (prefers-color-scheme: dark) {
|
||||
:root { /* 暗色覆写 */ }
|
||||
}
|
||||
```
|
||||
|
||||
但这与业务"用户选择主题"是两条独立路径,需要明确:业务主题 vs 系统暗色。当前方案以"业务主题"为准。
|
||||
@@ -383,7 +383,10 @@ export default {
|
||||
margin: 0;
|
||||
border-radius: 50rpx;
|
||||
color: #985400;
|
||||
background: linear-gradient(45deg, #ffe2ac 0%, #fdc174 100%);
|
||||
// P0: 推广页金色按钮 → var(--promote-grad-start/end)
|
||||
// 兼容: 微信小程序 / 鸿蒙元服务 — linear-gradient 嵌套 var() 现代 runtime 支持
|
||||
background: #ffe2ac; // 兜底
|
||||
background: linear-gradient(45deg, var(--promote-grad-start, #ffe2ac) 0%, var(--promote-grad-end, #fdc174) 100%);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -123,35 +123,47 @@
|
||||
}
|
||||
|
||||
swiper-item {
|
||||
// P0: 10 套分销等级渐变 → var(--level-N-grad-start/end),N=1..10
|
||||
// 兼容: 微信小程序 / 鸿蒙元服务 — linear-gradient 嵌套 var() 现代 runtime 支持
|
||||
&:nth-child(1) .level-wrap {
|
||||
background: linear-gradient(to right, #9BA7B1, #D3DEE6);
|
||||
background: #9BA7B1; // 兜底
|
||||
background: linear-gradient(to right, var(--level-1-grad-start, #9BA7B1), var(--level-1-grad-end, #D3DEE6));
|
||||
}
|
||||
&:nth-child(2) .level-wrap {
|
||||
background: linear-gradient(to right, #F57E2A, #FAD494);
|
||||
background: #F57E2A;
|
||||
background: linear-gradient(to right, var(--level-2-grad-start, #F57E2A), var(--level-2-grad-end, #FAD494));
|
||||
}
|
||||
&:nth-child(3) .level-wrap {
|
||||
background: linear-gradient(to right, #F85151, #FF9999);
|
||||
background: #F85151;
|
||||
background: linear-gradient(to right, var(--level-3-grad-start, #F85151), var(--level-3-grad-end, #FF9999));
|
||||
}
|
||||
&:nth-child(4) .level-wrap {
|
||||
background: linear-gradient(to right, #78B8B4, #AFE6E2);
|
||||
background: #78B8B4;
|
||||
background: linear-gradient(to right, var(--level-4-grad-start, #78B8B4), var(--level-4-grad-end, #AFE6E2));
|
||||
}
|
||||
&:nth-child(5) .level-wrap {
|
||||
background: linear-gradient(to right, #4DA1E1, #58CBF0);
|
||||
background: #4DA1E1;
|
||||
background: linear-gradient(to right, var(--level-5-grad-start, #4DA1E1), var(--level-5-grad-end, #58CBF0));
|
||||
}
|
||||
&:nth-child(6) .level-wrap {
|
||||
background: linear-gradient(to right, #81C636, #D1F677);
|
||||
background: #81C636;
|
||||
background: linear-gradient(to right, var(--level-6-grad-start, #81C636), var(--level-6-grad-end, #D1F677));
|
||||
}
|
||||
&:nth-child(7) .level-wrap {
|
||||
background: linear-gradient(to right, #6D7279, #A5AAB0);
|
||||
background: #6D7279;
|
||||
background: linear-gradient(to right, var(--level-7-grad-start, #6D7279), var(--level-7-grad-end, #A5AAB0));
|
||||
}
|
||||
&:nth-child(8) .level-wrap {
|
||||
background: linear-gradient(to right, #866DDB, #D49BFE);
|
||||
background: #866DDB;
|
||||
background: linear-gradient(to right, var(--level-8-grad-start, #866DDB), var(--level-8-grad-end, #D49BFE));
|
||||
}
|
||||
&:nth-child(9) .level-wrap {
|
||||
background: linear-gradient(to right, #f1c74e, #f7dc81);
|
||||
background: #f1c74e;
|
||||
background: linear-gradient(to right, var(--level-9-grad-start, #f1c74e), var(--level-9-grad-end, #f7dc81));
|
||||
}
|
||||
&:nth-child(10) .level-wrap {
|
||||
background: linear-gradient(to right, #418CCF, #9CC6F1);
|
||||
background: #418CCF;
|
||||
background: linear-gradient(to right, var(--level-10-grad-start, #418CCF), var(--level-10-grad-end, #9CC6F1));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -351,7 +351,9 @@
|
||||
line-height: 62px;
|
||||
border-radius: 34px !important;
|
||||
border-radius: 128px;
|
||||
background: #ff3c29;
|
||||
// P0: 提现按钮默认底色 → var(--fenxiao-withdraw-start)
|
||||
// 兼容: 微信小程序 / 鸿蒙元服务 — background 接受 var() 无问题
|
||||
background: var(--fenxiao-withdraw-start, #ff3c29);
|
||||
color: #fff;
|
||||
font-size: 32px;
|
||||
font-weight: 400;
|
||||
@@ -359,8 +361,11 @@
|
||||
border: 0;
|
||||
}
|
||||
.renren-btn.do {
|
||||
background: -webkit-linear-gradient(317.43deg, #ff3c29, #ff6f29 94.38%);
|
||||
background: linear-gradient(132.57deg, #ff3c29, #ff6f29 94.38%);
|
||||
// P0: 分销提现按钮渐变 → var(--fenxiao-withdraw-start/end)
|
||||
// 兼容: 微信小程序 / 鸿蒙元服务 — -webkit-linear-gradient 嵌套 var() 现代 runtime 支持
|
||||
background: #ff3c29; // 兜底
|
||||
background: -webkit-linear-gradient(317.43deg, var(--fenxiao-withdraw-start, #ff3c29), var(--fenxiao-withdraw-end, #ff6f29) 94.38%);
|
||||
background: linear-gradient(132.57deg, var(--fenxiao-withdraw-start, #ff3c29), var(--fenxiao-withdraw-end, #ff6f29) 94.38%);
|
||||
font-size: 28rpx;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
@@ -19,7 +19,10 @@
|
||||
left: 0;
|
||||
top: 0;
|
||||
z-index: 100;
|
||||
background-image: linear-gradient(360deg, #F8F8F8 0%, #E74A32 100%);
|
||||
// P0: 积分商品页头渐变 → var(--point-promo-start/end)
|
||||
// 兼容: 微信小程序 / 鸿蒙元服务 — linear-gradient 嵌套 var() 现代 runtime 支持
|
||||
background: #F8F8F8; // 兜底
|
||||
background-image: linear-gradient(360deg, var(--point-promo-start, #F8F8F8) 0%, var(--point-promo-end, #E74A32) 100%);
|
||||
background-size: 100% 400rpx;
|
||||
background-position-y: top;
|
||||
background-repeat: no-repeat;
|
||||
@@ -75,7 +78,10 @@
|
||||
}
|
||||
|
||||
.point-wrap {
|
||||
background-image: linear-gradient(360deg, #F8F8F8 0%, #E74A32 100%);
|
||||
// P0: 积分商品页 wrap 渐变 → var(--point-promo-start/end)
|
||||
// 兼容: 微信小程序 / 鸿蒙元服务 — linear-gradient 嵌套 var() 现代 runtime 支持
|
||||
background: #F8F8F8; // 兜底
|
||||
background-image: linear-gradient(360deg, var(--point-promo-start, #F8F8F8) 0%, var(--point-promo-end, #E74A32) 100%);
|
||||
background-size: 100% 380rpx;
|
||||
background-repeat: no-repeat;
|
||||
// #ifndef MP-WEIXIN
|
||||
@@ -924,7 +930,10 @@
|
||||
|
||||
.item-wrap {
|
||||
overflow: hidden;
|
||||
background: linear-gradient(321deg, #F4402B 0%, #FD7C40 100%);
|
||||
// P0: 积分商品卡渐变 → var(--point-item-grad-start/end)
|
||||
// 兼容: 微信小程序 / 鸿蒙元服务 — linear-gradient 嵌套 var() 现代 runtime 支持
|
||||
background: #F4402B; // 兜底
|
||||
background: linear-gradient(321deg, var(--point-item-grad-start, #F4402B) 0%, var(--point-item-grad-end, #FD7C40) 100%);
|
||||
border-radius: 16rpx;
|
||||
position: relative;
|
||||
padding-top: 40rpx;
|
||||
|
||||
@@ -163,7 +163,9 @@ export default {
|
||||
.item {
|
||||
width: 50%;
|
||||
text-align: center;
|
||||
color: #F4391c
|
||||
// P0: 硬编码主色 → var(--main-color)
|
||||
// 兼容: 微信小程序 / 鸿蒙元服务 — color 接受 var() 无问题
|
||||
color: var(--main-color, #F4391c);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -166,7 +166,10 @@
|
||||
font-size: 46rpx;
|
||||
-webkit-background-clip: text !important;
|
||||
-webkit-text-fill-color: transparent;
|
||||
background: linear-gradient(135deg, #FE7849 0%, #FF1959 100%);
|
||||
// P0: 余额页头图标渐变 → var(--balance-page-bg-start/end)
|
||||
// 兼容: 微信小程序 / 鸿蒙元服务 — linear-gradient 嵌套 var() 现代 runtime 支持
|
||||
background: #FE7849; // 兜底
|
||||
background: linear-gradient(135deg, var(--balance-page-bg-start, #FE7849) 0%, var(--balance-page-bg-end, #FF1959) 100%);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -200,11 +203,15 @@
|
||||
font-size: 32rpx;
|
||||
}
|
||||
.recharge-withdraw {
|
||||
background: #FF4646;
|
||||
// P0: 硬编码主色 → var(--base-color)
|
||||
// 兼容: 微信小程序 / 鸿蒙元服务 — background 接受 var() 无问题
|
||||
background: var(--base-color, #FF4646);
|
||||
}
|
||||
|
||||
|
||||
.withdraw {
|
||||
border: 4rpx solid #FF4646;
|
||||
// P0: 硬编码主色 → var(--base-color)
|
||||
// 兼容: 微信小程序 / 鸿蒙元服务 — border 接受 var() 无问题
|
||||
border: 4rpx solid var(--base-color, #FF4646);
|
||||
box-sizing: border-box;
|
||||
line-height: 72rpx;
|
||||
color: #FF4646;
|
||||
|
||||
@@ -312,9 +312,13 @@
|
||||
}
|
||||
.iconfont {
|
||||
font-size: 60rpx;
|
||||
background-image:-webkit-linear-gradient(top,#E3B66B,#F7DAA5);
|
||||
-webkit-background-clip:text;
|
||||
-webkit-text-fill-color:transparent;
|
||||
// P0: 会员卡金色渐变 → var(--member-card-gold-start/end)
|
||||
// 注: 这组金色与 token 中 super-member-*-bg(default:灰,black:金)不同,作为独立 token
|
||||
// 兼容: 微信小程序 / 鸿蒙元服务 — -webkit-linear-gradient 嵌套 var() 现代 runtime 支持
|
||||
background: #E3B66B; // 兜底
|
||||
background-image: -webkit-linear-gradient(top, var(--member-card-gold-start, #E3B66B), var(--member-card-gold-end, #F7DAA5));
|
||||
-webkit-background-clip: text;
|
||||
-webkit-text-fill-color: transparent;
|
||||
}
|
||||
.icon-zhekou,.icon-hongbao{
|
||||
font-size: 54rpx;
|
||||
@@ -541,7 +545,9 @@
|
||||
}
|
||||
}
|
||||
.card-time-item.active{
|
||||
border-color: #E3B66B;
|
||||
// P0: 会员卡金边 → var(--member-card-gold-start)
|
||||
// 兼容: 微信小程序 / 鸿蒙元服务 — border-color 接受 var() 无问题
|
||||
border-color: var(--member-card-gold-start, #E3B66B);
|
||||
background: rgba(227, 182, 107, .3);
|
||||
}
|
||||
.time-price{
|
||||
@@ -593,7 +599,9 @@
|
||||
margin-top: 20rpx;
|
||||
|
||||
text {
|
||||
color: #E3B66B;
|
||||
// P0: 会员卡金文字 → var(--member-card-gold-start)
|
||||
// 兼容: 微信小程序 / 鸿蒙元服务 — color 接受 var() 无问题
|
||||
color: var(--member-card-gold-start, #E3B66B);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -613,7 +621,10 @@
|
||||
margin: 30rpx 0 0 0;
|
||||
border-radius: 10rpx;
|
||||
border: none;
|
||||
background-image:linear-gradient(to top,#F7DAA5,#E3B66B);
|
||||
// P0: 会员卡金色反渐变 → var(--member-card-gold-end/start) 复用
|
||||
// 兼容: 微信小程序 / 鸿蒙元服务 — linear-gradient 嵌套 var() 现代 runtime 支持
|
||||
background: #F7DAA5; // 兜底
|
||||
background-image: linear-gradient(to top, var(--member-card-gold-end, #F7DAA5), var(--member-card-gold-start, #E3B66B));
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
|
||||
@@ -143,7 +143,10 @@
|
||||
width: 100%;
|
||||
.price {
|
||||
text-align: center;
|
||||
background-image: -webkit-linear-gradient(bottom, #ff2440, #ff7b7b);
|
||||
// P0: 邀请好友价格渐变 → var(--invite-grad-start/end)
|
||||
// 兼容: 微信小程序 / 鸿蒙元服务 — -webkit-linear-gradient 嵌套 var() 现代 runtime 支持
|
||||
background: #ff2440; // 兜底
|
||||
background-image: -webkit-linear-gradient(bottom, var(--invite-grad-start, #ff2440), var(--invite-grad-end, #ff7b7b));
|
||||
-webkit-background-clip: text;
|
||||
-webkit-text-fill-color: transparent;
|
||||
font-size: 30rpx;
|
||||
|
||||
@@ -201,7 +201,10 @@
|
||||
color: #fff;
|
||||
font-size: 26rpx;
|
||||
font-weight: 600;
|
||||
background: linear-gradient(135deg, #FE7849 0%, #FF1959 100%);
|
||||
// P0: 积分页按钮渐变 → var(--point-page-bg-start/end)
|
||||
// 兼容: 微信小程序 / 鸿蒙元服务 — linear-gradient 嵌套 var() 现代 runtime 支持
|
||||
background: #FE7849; // 兜底
|
||||
background: linear-gradient(135deg, var(--point-page-bg-start, #FE7849) 0%, var(--point-page-bg-end, #FF1959) 100%);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -272,7 +272,9 @@
|
||||
}
|
||||
|
||||
&.fail {
|
||||
color: #FF4646;
|
||||
// P0: 失败提示色 → var(--base-color)
|
||||
// 兼容: 微信小程序 / 鸿蒙元服务 — color 接受 var() 无问题
|
||||
color: var(--base-color, #FF4646);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user