Files
Neo-ZQYY/docs/miniprogram-dev/design-system/VI-DESIGN-SYSTEM.md

510 lines
16 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 微信小程序 VI 设计系统
> 最后更新2026-03-17
> 适用范围:台球门店小程序前端所有页面
> 面向对象设计师、前端开发、AI 代码生成
---
## 📋 目录
1. [任务分类配色](#1-任务分类配色)
2. [客户标签配色](#2-客户标签配色)
3. [关系等级配色](#3-关系等级配色)
4. [置顶/放弃状态](#4-置顶放弃状态)
5. [助教等级配色](#5-助教等级配色)
6. [AI 图标配色系统](#6-ai-图标配色系统)
7. [CSS 变量速查表](#7-css-变量速查表)
---
## 1. 任务分类配色
### 1.1 四种任务类型
| 任务类型 | 优先级 | 边框色 | 标签渐变色 | 用途 |
|---------|--------|--------|-----------|------|
| 高优先召回 | 0 | `#dc2626` | `#b91c1c → #dc2626` | max(WBI,NCI) > 7 |
| 优先召回 | 0 | `#f97316` | `#ea580c → #f97316` | max(WBI,NCI) > 5 |
| 客户回访 | 1 | `#14b8a6` | `#0d9488 → #14b8a6` | 完成召回后未备注 |
| 关系构建 | 2 | `#f472b6` | `#ec4899 → #f472b6` | RS < 6 |
### 1.2 WXSS 类名映射
```css
/* 卡片边框 */
.task-card--high_priority { border-left-color: #dc2626; }
.task-card--priority_recall { border-left-color: #f97316; }
.task-card--callback { border-left-color: #14b8a6; }
.task-card--relationship { border-left-color: #f472b6; }
/* 标签渐变 */
.task-type-tag--high_priority { background: linear-gradient(135deg, #b91c1c 0%, #dc2626 100%); }
.task-type-tag--priority_recall { background: linear-gradient(135deg, #ea580c 0%, #f97316 100%); }
.task-type-tag--callback { background: linear-gradient(135deg, #0d9488 0%, #14b8a6 100%); }
.task-type-tag--relationship { background: linear-gradient(135deg, #ec4899 0%, #f472b6 100%); }
```
### 1.3 TypeScript 常量
```typescript
export const TASK_TYPE_COLORS = {
high_priority: {
borderColor: '#dc2626',
gradientFrom: '#b91c1c',
gradientTo: '#dc2626',
label: '高优先召回',
},
priority_recall: {
borderColor: '#f97316',
gradientFrom: '#ea580c',
gradientTo: '#f97316',
label: '优先召回',
},
callback: {
borderColor: '#14b8a6',
gradientFrom: '#0d9488',
gradientTo: '#14b8a6',
label: '客户回访',
},
relationship: {
borderColor: '#f472b6',
gradientFrom: '#ec4899',
gradientTo: '#f472b6',
label: '关系构建',
},
};
```
---
## 2. 客户标签配色
### 2.1 六种客户分类标签
| 标签名 | 字体色 | 背景色 | 心理学依据 | 用途 |
|--------|--------|--------|-----------|------|
| 客户基础 | `#0052d9` | `#ecf2fe` | 蓝色 - 信任、基础信息 | 基本信息、生日、性别等 |
| 消费习惯 | `#00a870` | `#e6f7f0` | 绿色 - 增长、消费行为 | 消费频率、金额、时段 |
| 玩法偏好 | `#ed7b2f` | `#fff3e6` | 橙色 - 活力、娱乐偏好 | 游戏类型、时长偏好 |
| 促销偏好 | `#d4a017` | `#fffbeb` | 金色 - 价值、优惠敏感度 | 对促销活动的反应 |
| 社交关系 | `#764ba2` | `#f3e8ff` | 紫色 - 社交、人脉关系 | 推荐、介绍、社交属性 |
| 重要反馈 | `#e34d59` | `#ffe6e8` | 红色 - 警示、关键信息 | 投诉、建议、重要反馈 |
### 2.2 WXSS 类名映射
```css
.clue-tag-primary { background: rgba(0, 82, 217, 0.1); color: #0052d9; }
.clue-tag-success { background: rgba(0, 168, 112, 0.1); color: #00a870; }
.clue-tag-orange { background: rgba(237, 123, 47, 0.1); color: #ed7b2f; }
.clue-tag-gold { background: rgba(212, 160, 23, 0.1); color: #d4a017; }
.clue-tag-purple { background: rgba(118, 75, 162, 0.1); color: #764ba2; }
.clue-tag-error { background: rgba(227, 77, 89, 0.1); color: #e34d59; }
```
---
## 3. 关系等级配色
### 3.1 四个关系等级
| 关系等级 | 爱心Icon | 分数范围 | 背景渐变 | 文字色 | 用途 |
|---------|---------|---------|---------|--------|------|
| 很好(非常好) | 💖 | > 8.5 | `#e91e63 → #f472b6` | `#fff` | 优质客户 |
| 良好 | 🧡 | 6-8.5 | `#ea580c → #fb923c` | `#fff` | 稳定客户 |
| 一般 | 💛 | 3.5-6 | `#eab308 → #fbbf24` | `#fff` | 普通客户 |
| 待发展 | 💙 | < 3.5 | `#64748b → #94a3b8` | `#fff` | 需维护客户 |
### 3.2 WXSS 类名映射
```css
.rel-level-excellent { background: linear-gradient(135deg, #e91e63, #f472b6); box-shadow: 0 4rpx 12rpx rgba(233,30,99,0.30); }
.rel-level-good { background: linear-gradient(135deg, #ea580c, #fb923c); box-shadow: 0 4rpx 12rpx rgba(234,88,12,0.30); }
.rel-level-normal { background: linear-gradient(135deg, #eab308, #fbbf24); box-shadow: 0 4rpx 12rpx rgba(234,179,8,0.30); }
.rel-level-poor { background: linear-gradient(135deg, #64748b, #94a3b8); box-shadow: 0 4rpx 12rpx rgba(100,116,139,0.30); }
```
---
## 4. 置顶/放弃状态
### 4.1 置顶状态
**视觉处理**:金色边框光晕效果
```css
.task-card--pinned {
box-shadow: 0 5rpx 7rpx rgba(245, 158, 11, 0.12), 0 0 0 8rpx rgba(245, 158, 11, 0.08);
}
```
**颜色值**
- 光晕色:`#f59e0b`(琥珀色)
- 透明度12% + 8%
### 4.2 放弃状态
**视觉处理**:灰化 + 降低透明度
```css
.task-card--abandoned {
border-left-color: #d1d5db !important;
opacity: 0.55;
}
.task-type-tag--abandoned {
background: #d1d5db !important;
}
.customer-name--abandoned {
color: #9ca3af;
}
```
**颜色值**
- 边框色:`#d1d5db`(灰色)
- 文字色:`#9ca3af`(浅灰)
- 透明度55%
---
## 5. 助教等级配色
### 5.1 四级 + 星级
| 等级 | 字体色 | 背景色 | 说明 |
|------|--------|--------|------|
| 初级 | `#0052d9` | `#ecf2fe` | 蓝色 - 信任、基础 |
| 中级 | `#ed7b2f` | `#fff3e6` | 橙色 - 活力、进阶 |
| 高级 | `#e91e63` | `#ffe6e8` | 粉色 - 优雅、资深 |
| ⭐ 星级 | `#fbbf24` | `#fffef0` | 金黄色 - 价值、顶级 |
### 5.2 WXSS 类名映射
```css
.coach-level-junior { color: #0052d9; background: #ecf2fe; }
.coach-level-middle { color: #ed7b2f; background: #fff3e6; }
.coach-level-senior { color: #e91e63; background: #ffe6e8; }
.coach-level-star { color: #fbbf24; background: #fffef0; }
```
---
## 6. AI 图标配色系统
### 6.1 概览
AI 图标系统包含 **2 个标准组件** × **6 种配色**,共 12 种组合。
| 组件 | 路径 | 用途 | 图标文件 |
|------|------|------|----------|
| `ai-inline-icon` | `/components/ai-inline-icon/` | 卡片行首小图标30rpx 容器) | `ai-robot-inline.svg` |
| `ai-title-badge` | `/components/ai-title-badge/` | 标题行右侧徽章(胶囊形态) | `ai-robot-sm.svg` |
### 6.2 六种配色
| 配色名 | 主色 | 浅色 | 深色 | 用途 |
|--------|------|------|------|------|
| Red | `#e74c3c` | `#f39c9c` | `#c0392b` | 警示、重要 |
| Orange | `#e67e22` | `#f5c77e` | `#ca6c17` | 活力、推荐 |
| Yellow | `#d4a017` | `#f7dc6f` | `#b8860b` | 价值、优化 |
| Blue | `#2980b9` | `#7ec8e3` | `#1a5276` | 信息、分析 |
| Indigo | `#667eea` | `#a78bfa` | `#4a5fc7` | 默认、通用 |
| Purple | `#764ba2` | `#c084fc` | `#5b3080` | 创意、特殊 |
### 6.3 组件注册
在页面的 `.json` 文件中按需注册:
```json
{
"usingComponents": {
"ai-inline-icon": "/components/ai-inline-icon/ai-inline-icon",
"ai-title-badge": "/components/ai-title-badge/ai-title-badge"
}
}
```
### 6.4 ai-inline-icon行首嵌入小图标
**外观**
- 尺寸30rpx × 30rpx圆角 6rpx
- 背景:淡色渐变(主色 ~8% 透明度)
- 内部图标:`ai-robot-inline.svg`(白色机身)
- 动效微光扫过12s 周期)
**WXML 用法**
```wxml
<!-- 固定配色 —— indigo默认 -->
<ai-inline-icon />
<!-- 固定配色 —— orange -->
<ai-inline-icon color="orange" />
<!-- 页面随机配色(推荐) -->
<ai-inline-icon color="{{aiColor}}" />
```
**属性**
| 属性 | 类型 | 默认值 | 说明 |
|------|------|--------|------|
| `color` | String | `indigo` | 配色:`red` \| `orange` \| `yellow` \| `blue` \| `indigo` \| `purple` |
### 6.5 ai-title-badge标题行 AI 徽章)
**外观**
- 形态:胶囊,`padding: 4rpx 14rpx 4rpx 6rpx`,圆角 18rpx
- 背景:主色 ~8% 透明度渐变 + 主色 35% 边框
- 文字深色主色20rpxfont-weight 500
- 动效呼吸脉冲3s+ 高光扫过14s
**WXML 用法**
```wxml
<!-- 默认配色 + 默认文字「AI智能洞察」 -->
<ai-title-badge />
<!-- 指定配色 -->
<ai-title-badge color="blue" />
<!-- 自定义文字 -->
<ai-title-badge color="orange" label="AI 建议" />
<!-- 页面随机配色(推荐) -->
<ai-title-badge color="{{aiColor}}" />
```
**属性**
| 属性 | 类型 | 默认值 | 说明 |
|------|------|--------|------|
| `color` | String | `indigo` | 配色:`red` \| `orange` \| `yellow` \| `blue` \| `indigo` \| `purple` |
| `label` | String | `AI智能洞察` | 徽章文字 |
### 6.6 页面随机配色方案(推荐)
每个页面在 `onLoad` 时随机选取一种配色,全页所有 AI 图标统一使用同一配色。
**TS 实现**
```typescript
const AI_COLORS = ['red', 'orange', 'yellow', 'blue', 'indigo', 'purple'] as const
type AiColor = typeof AI_COLORS[number]
Page({
data: {
aiColor: 'indigo' as AiColor,
},
onLoad() {
const aiColor = AI_COLORS[Math.floor(Math.random() * AI_COLORS.length)]
this.setData({ aiColor })
},
})
```
**WXML 绑定**
```wxml
<!-- 行首图标 -->
<ai-inline-icon color="{{aiColor}}" />
<!-- 标题徽章 -->
<ai-title-badge color="{{aiColor}}" />
```
### 6.7 各页面配色建议(可选固定配色)
如不使用随机方案,可按以下建议固定配色:
| 页面 | 建议配色 | 原因 |
|------|---------|------|
| `task-list` | 随机 | 每日新鲜感 |
| `task-detail` | `indigo` | 通用默认 |
| `task-detail-callback` | `orange` | 与 banner 主题色呼应 |
| `task-detail-relationship` | `purple` | 与 banner 粉色系呼应 |
| `performance` | `blue` | 数据分析感 |
| `customer-detail` | `yellow` | 黑金页面,黄色点缀 |
| `coach-detail` | `red` | coral banner 配红色 AI |
---
## 7. CSS 变量速查表
### 7.1 全局颜色变量app.wxss
```css
page {
/* 主色系 */
--color-primary: #0052d9;
--color-primary-light: #ecf2fe;
--color-success: #00a870;
--color-warning: #ed7b2f;
--color-error: #e34d59;
/* 灰度系13级 */
--color-gray-1: #f3f3f3;
--color-gray-2: #eeeeee;
--color-gray-3: #e7e7e7;
--color-gray-4: #dcdcdc;
--color-gray-5: #c5c5c5;
--color-gray-6: #a6a6a6;
--color-gray-7: #8b8b8b;
--color-gray-8: #777777;
--color-gray-9: #5e5e5e;
--color-gray-10: #4b4b4b;
--color-gray-11: #393939;
--color-gray-12: #2c2c2c;
--color-gray-13: #242424;
}
```
### 7.2 快速查询
**任务类型边框色**
- 高优先召回:`#dc2626`
- 优先召回:`#f97316`
- 客户回访:`#14b8a6`
- 关系构建:`#f472b6`
**客户标签字体色**
- 客户基础:`#0052d9`
- 消费习惯:`#00a870`
- 玩法偏好:`#ed7b2f`
- 促销偏好:`#d4a017`
- 社交关系:`#764ba2`
- 重要反馈:`#e34d59`
**关系等级渐变**
- 很好:`#e91e63 → #f472b6`
- 良好:`#ea580c → #fb923c`
- 一般:`#eab308 → #fbbf24`
- 待发展:`#64748b → #94a3b8`
**助教等级**
- 初级:`#0052d9` / `#ecf2fe`
- 中级:`#ed7b2f` / `#fff3e6`
- 高级:`#e91e63` / `#ffe6e8`
- ⭐ 星级:`#fbbf24` / `#fffef0`
---
## 8. 头像颜色系统
### 8.1 概览
所有客户头像、助教头像统一使用本色板,共 **24 种**渐变色。
全局 WXSS 类名格式:`.avatar-{key}`,定义在 `app.wxss`
TS 工具函数:`nameToAvatarColor(name)` 位于 `utils/avatar-color.ts`
### 8.2 24 色标准色板
| Key | 渐变起点 | 渐变终点 | 视觉风格 |
|-----|---------|---------|--------|
| `blue` | `#60a5fa` | `#3b82f6` | 经典蓝 |
| `indigo` | `#818cf8` | `#4f46e5` | 靛蓝 |
| `violet` | `#a78bfa` | `#7c3aed` | 紫罗兰 |
| `purple` | `#c084fc` | `#9333ea` | 紫色 |
| `fuchsia` | `#bd58c8` | `#7a1486` | 紫红 |
| `pink` | `#d44d96` | `#b83077` | 粉色 |
| `rose` | `#d05060` | `#aa1535` | 玫瑰红 |
| `red` | `#c85050` | `#a81c1c` | 红色 |
| `orange` | `#cc6e22` | `#b04208` | 橙色 |
| `amber` | `#fbbf24` | `#d97706` | 琥珀 |
| `yellow` | `#facc15` | `#ca8a04` | 黄色 |
| `lime` | `#a3e635` | `#65a30d` | 黄绿 |
| `green` | `#4ade80` | `#16a34a` | 绿色 |
| `emerald` | `#34d399` | `#059669` | 翡翠绿 |
| `teal` | `#2dd4bf` | `#0d9488` | 青绿 |
| `cyan` | `#22d3ee` | `#0891b2` | 青色 |
| `sky` | `#38bdf8` | `#0284c7` | 天蓝 |
| `slate` | `#94a3b8` | `#475569` | 石板灰 |
| `coral` | `#cc6245` | `#ad3512` | 珊瑚 |
| `mint` | `#67e8f9` | `#0891b2` | 薄荷 |
| `lavender` | `#c4b5fd` | `#7c3aed` | 薰衣草 |
| `gold` | `#fcd34d` | `#b45309` | 金色 |
| `crimson` | `#c42844` | `#750d28` | 深红 |
| `ocean` | `#38bdf8` | `#1d4ed8` | 海洋蓝 |
### 8.3 WXSS 类名(全局,定义在 app.wxss
```css
.avatar-blue { background: linear-gradient(135deg, #60a5fa, #3b82f6); }
.avatar-indigo { background: linear-gradient(135deg, #818cf8, #4f46e5); }
.avatar-violet { background: linear-gradient(135deg, #a78bfa, #7c3aed); }
.avatar-purple { background: linear-gradient(135deg, #c084fc, #9333ea); }
.avatar-fuchsia { background: linear-gradient(135deg, #bd58c8, #7a1486); }
.avatar-pink { background: linear-gradient(135deg, #d44d96, #b83077); }
.avatar-rose { background: linear-gradient(135deg, #d05060, #aa1535); }
.avatar-red { background: linear-gradient(135deg, #c85050, #a81c1c); }
.avatar-orange { background: linear-gradient(135deg, #cc6e22, #b04208); }
.avatar-amber { background: linear-gradient(135deg, #fbbf24, #d97706); }
.avatar-yellow { background: linear-gradient(135deg, #facc15, #ca8a04); }
.avatar-lime { background: linear-gradient(135deg, #a3e635, #65a30d); }
.avatar-green { background: linear-gradient(135deg, #4ade80, #16a34a); }
.avatar-emerald { background: linear-gradient(135deg, #34d399, #059669); }
.avatar-teal { background: linear-gradient(135deg, #2dd4bf, #0d9488); }
.avatar-cyan { background: linear-gradient(135deg, #22d3ee, #0891b2); }
.avatar-sky { background: linear-gradient(135deg, #38bdf8, #0284c7); }
.avatar-slate { background: linear-gradient(135deg, #94a3b8, #475569); }
.avatar-coral { background: linear-gradient(135deg, #cc6245, #ad3512); }
.avatar-mint { background: linear-gradient(135deg, #67e8f9, #0891b2); }
.avatar-lavender { background: linear-gradient(135deg, #c4b5fd, #7c3aed); }
.avatar-gold { background: linear-gradient(135deg, #fcd34d, #b45309); }
.avatar-crimson { background: linear-gradient(135deg, #c42844, #750d28); }
.avatar-ocean { background: linear-gradient(135deg, #38bdf8, #1d4ed8); }
```
### 8.4 TypeScript 工具utils/avatar-color.ts
```typescript
import { nameToAvatarColor } from '../../utils/avatar-color'
// 根据姓名首字稳定映射颜色(相同输入永远返回相同结果)
const color = nameToAvatarColor('王先生') // => 'blue'
```
### 8.5 WXML 用法
```wxml
<!-- 客户/助教头像 -->
<view class="record-avatar avatar-{{item.avatarColor}}">
<text>{{item.avatarChar}}</text>
</view>
```
### 8.6 迁移说明
各页面原有的散乱类名统一替换为 `.avatar-{key}`
| 旧类名 | 新类名 | 页面 |
|--------|--------|------|
| `.avatar-from-blue` | `.avatar-blue` | performance, performance-records |
| `.avatar-from-pink` | `.avatar-pink` | performance, performance-records |
| `.avatar-from-teal` | `.avatar-teal` | performance, performance-records |
| `.avatar-from-green` | `.avatar-green` | performance, performance-records |
| `.avatar-from-orange` | `.avatar-orange` | performance, performance-records |
| `.avatar-from-purple` | `.avatar-purple` | performance, performance-records |
| `.avatar-from-violet` | `.avatar-violet` | performance, performance-records |
| `.avatar-from-amber` | `.avatar-amber` | performance, performance-records |
| `.avatar-gradient-pink` | `.avatar-pink` | coach-detail |
| `.avatar-gradient-amber` | `.avatar-amber` | coach-detail |
| `.avatar-gradient-green` | `.avatar-green` | coach-detail |
| `.avatar-gradient-blue` | `.avatar-blue` | coach-detail |
| `.avatar-gradient-purple` | `.avatar-violet` | coach-detail |
| `.avatar-gradient-teal` | `.avatar-teal` | coach-detail |
| `.avatar--blue` | `.avatar-blue` | board-coach |
| `.avatar--green` | `.avatar-green` | board-coach |
| `.avatar--pink` | `.avatar-pink` | board-coach |
| `.avatar--amber` | `.avatar-amber` | board-coach |
| `.avatar--purple` | `.avatar-violet` | board-coach |
| `.avatar--cyan` | `.avatar-cyan` | board-coach |
---
**版本:** 1.1
**最后更新:** 2026-03-17
**维护者:** 设计系统团队