|
|
|
|
|
# 组件复用性分析报告
|
|
|
|
|
|
|
|
|
|
|
|
## 一、项目组件盘点
|
|
|
|
|
|
|
|
|
|
|
|
### 1.1 现有自定义组件(10个)
|
|
|
|
|
|
|
|
|
|
|
|
| 组件名称 | 路径 | 功能描述 | 使用频率 | 状态 |
|
|
|
|
|
|
|---------|------|---------|---------|------|
|
|
|
|
|
|
| navbar | /components/navbar | 自定义导航栏 | 高(15+页面) | ✅ 良好 |
|
|
|
|
|
|
| pagination | /components/pagination | 分页组件 | 中(5页面) | ✅ 良好 |
|
|
|
|
|
|
| popup | /components/popup | 通用弹窗 | 高(8页面) | ⚠️ 需优化 |
|
|
|
|
|
|
| calendar | /components/calendar | 日历组件 | 低(未使用) | ❓ 待确认 |
|
|
|
|
|
|
| pickerArea | /components/pickerArea | 省市区选择器 | 低(1页面) | ✅ 可用 |
|
|
|
|
|
|
| uploadFile | /components/uploadFile | 文件上传 | 低(1页面) | ✅ 可用 |
|
|
|
|
|
|
| ec-canvas | /components/ec-canvas | ECharts图表 | 中(2页面) | ✅ 良好 |
|
|
|
|
|
|
| customPoster | /components/customPoster | 海报生成 | 低(未使用) | ❓ 待确认 |
|
|
|
|
|
|
| star | /components/star | 星星动画 | 低(未使用) | ❓ 待确认 |
|
|
|
|
|
|
| popupDoctor | /components/popupDoctor | 医生信息弹窗 | 低(未使用) | ❓ 待确认 |
|
|
|
|
|
|
|
|
|
|
|
|
### 1.2 TabBar组件(2个)
|
|
|
|
|
|
|
|
|
|
|
|
| 组件名称 | 路径 | 使用端 | 使用频率 |
|
|
|
|
|
|
|---------|------|--------|---------|
|
|
|
|
|
|
| doctor-tab-bar | /components/doctor-tab-bar | 药店端 | 4页面 |
|
|
|
|
|
|
| ground-tab-bar | /components/ground-tab-bar | 地推端 | 3页面 |
|
|
|
|
|
|
|
|
|
|
|
|
**复用建议:** 两个组件功能相似,可合并为 `tab-bar` 组件,通过配置区分不同角色。
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 二、组件复用价值评估矩阵
|
|
|
|
|
|
|
|
|
|
|
|
### 2.1 高优先级组件(建议立即提取)
|
|
|
|
|
|
|
|
|
|
|
|
| 组件名称 | 使用频率 | 功能独立性 | 通用性 | 复杂度 | 复用价值 | 优先级 |
|
|
|
|
|
|
|---------|---------|-----------|--------|--------|---------|--------|
|
|
|
|
|
|
| **项目选择器** | 3次 | 高 | 高 | 低 | ⭐⭐⭐⭐⭐ | P0 |
|
|
|
|
|
|
| **统计卡片** | 4次 | 高 | 高 | 中 | ⭐⭐⭐⭐⭐ | P0 |
|
|
|
|
|
|
| **日期选择逻辑** | 5次 | 高 | 高 | 中 | ⭐⭐⭐⭐ | P1 |
|
|
|
|
|
|
|
|
|
|
|
|
### 2.2 中优先级组件(建议后续提取)
|
|
|
|
|
|
|
|
|
|
|
|
| 组件名称 | 使用频率 | 功能独立性 | 通用性 | 复杂度 | 复用价值 | 优先级 |
|
|
|
|
|
|
|---------|---------|-----------|--------|--------|---------|--------|
|
|
|
|
|
|
| **状态标签** | 2次 | 高 | 中 | 低 | ⭐⭐⭐ | P2 |
|
|
|
|
|
|
| **个人信息页面** | 6次 | 中 | 中 | 高 | ⭐⭐⭐ | P2 |
|
|
|
|
|
|
| **登录页面** | 2次 | 中 | 中 | 高 | ⭐⭐⭐ | P2 |
|
|
|
|
|
|
| **修改昵称/手机页面** | 4次 | 中 | 中 | 中 | ⭐⭐⭐ | P2 |
|
|
|
|
|
|
|
|
|
|
|
|
### 2.3 低优先级组件(保持现状)
|
|
|
|
|
|
|
|
|
|
|
|
| 组件名称 | 使用频率 | 功能独立性 | 通用性 | 复杂度 | 复用价值 | 优先级 |
|
|
|
|
|
|
|---------|---------|-----------|--------|--------|---------|--------|
|
|
|
|
|
|
| **患者卡片** | 1次 | 中 | 低 | 高 | ⭐⭐ | P3 |
|
|
|
|
|
|
| **上传材料弹窗** | 1次 | 高 | 中 | 中 | ⭐⭐ | P3 |
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 三、详细组件分析
|
|
|
|
|
|
|
|
|
|
|
|
### 3.1 项目选择器(ProjectPicker)
|
|
|
|
|
|
|
|
|
|
|
|
**使用位置:**
|
|
|
|
|
|
1. 地推端首页:`/ground/pages/home/index.wxml`
|
|
|
|
|
|
2. 药店端首页:`/doctor/pages/home/index.wxml`
|
|
|
|
|
|
3. 患者列表页:`/doctor/pages/patientList/index.wxml`
|
|
|
|
|
|
|
|
|
|
|
|
**代码相似度:** 90%
|
|
|
|
|
|
|
|
|
|
|
|
**主要差异:**
|
|
|
|
|
|
- 主题色不同(地推端蓝色 #4A8DFF,药店端橙色 #FF8A4C)
|
|
|
|
|
|
- 样式细节略有差异
|
|
|
|
|
|
|
|
|
|
|
|
**提取收益:**
|
|
|
|
|
|
- 减少重复代码约 60 行
|
|
|
|
|
|
- 统一项目切换交互体验
|
|
|
|
|
|
- 便于后续维护
|
|
|
|
|
|
|
|
|
|
|
|
**组件接口设计:**
|
|
|
|
|
|
```typescript
|
|
|
|
|
|
interface ProjectPickerProps {
|
|
|
|
|
|
projectList: Array<{ projectId: number; projectName: string }>;
|
|
|
|
|
|
currentProjectName: string;
|
|
|
|
|
|
themeColor: string; // 主题色
|
|
|
|
|
|
onChange: (projectId: number) => void;
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 3.2 统计卡片(StatCard)
|
|
|
|
|
|
|
|
|
|
|
|
**使用位置:**
|
|
|
|
|
|
1. 地推端首页:`/ground/pages/home/index.wxml`(2处)
|
|
|
|
|
|
2. 药店端首页:`/doctor/pages/home/index.wxml`(2处)
|
|
|
|
|
|
3. 地推端统计页:`/ground/pages/stat/index.wxml`
|
|
|
|
|
|
4. 药店端统计页:`/doctor/pages/stat/index.wxml`
|
|
|
|
|
|
|
|
|
|
|
|
**代码相似度:** 88%
|
|
|
|
|
|
|
|
|
|
|
|
**主要差异:**
|
|
|
|
|
|
- 地推端显示"药店数",药店端不显示
|
|
|
|
|
|
- 数据字段名称略有不同
|
|
|
|
|
|
- 主题色不同
|
|
|
|
|
|
|
|
|
|
|
|
**提取收益:**
|
|
|
|
|
|
- 减少重复代码约 200 行
|
|
|
|
|
|
- 统一统计卡片样式
|
|
|
|
|
|
- 支持配置化展示
|
|
|
|
|
|
|
|
|
|
|
|
**组件接口设计:**
|
|
|
|
|
|
```typescript
|
|
|
|
|
|
interface StatCardProps {
|
|
|
|
|
|
title: string;
|
|
|
|
|
|
tip?: string;
|
|
|
|
|
|
data: Array<{ name: string; value: number }>;
|
|
|
|
|
|
showIndicationStats?: boolean;
|
|
|
|
|
|
indicationStats?: Array<any>;
|
|
|
|
|
|
themeColor: string;
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 3.3 日期选择逻辑(DatePickerMixin)
|
|
|
|
|
|
|
|
|
|
|
|
**使用位置:**
|
|
|
|
|
|
1. 地推端首页:日期筛选逻辑
|
|
|
|
|
|
2. 药店端首页:日期筛选逻辑
|
|
|
|
|
|
3. 患者列表页:时间筛选
|
|
|
|
|
|
4. 地推端统计页:日期筛选
|
|
|
|
|
|
5. 药店端统计页:日期筛选
|
|
|
|
|
|
|
|
|
|
|
|
**代码相似度:** 85%
|
|
|
|
|
|
|
|
|
|
|
|
**重复逻辑:**
|
|
|
|
|
|
- 日期格式化函数
|
|
|
|
|
|
- 日期范围验证
|
|
|
|
|
|
- 日/月模式切换
|
|
|
|
|
|
- 日期选择器事件处理
|
|
|
|
|
|
|
|
|
|
|
|
**提取收益:**
|
|
|
|
|
|
- 减少重复代码约 150 行
|
|
|
|
|
|
- 统一日期处理逻辑
|
|
|
|
|
|
- 避免日期相关 bug
|
|
|
|
|
|
|
|
|
|
|
|
**Mixin接口设计:**
|
|
|
|
|
|
```typescript
|
|
|
|
|
|
interface DatePickerMixin {
|
|
|
|
|
|
// 数据
|
|
|
|
|
|
startDate: string;
|
|
|
|
|
|
endDate: string;
|
|
|
|
|
|
statType: 'day' | 'month';
|
|
|
|
|
|
|
|
|
|
|
|
// 方法
|
|
|
|
|
|
formatDate(date: string): string;
|
|
|
|
|
|
formatMonth(date: string): string;
|
|
|
|
|
|
validateDateRange(start: string, end: string): boolean;
|
|
|
|
|
|
onDateChange(e: CustomEvent): void;
|
|
|
|
|
|
prevDate(): void;
|
|
|
|
|
|
nextDate(): void;
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 3.4 状态标签(StatusTag)
|
|
|
|
|
|
|
|
|
|
|
|
**使用位置:**
|
|
|
|
|
|
1. 患者列表页:跳转状态、入组状态、审核状态
|
|
|
|
|
|
|
|
|
|
|
|
**代码相似度:** 80%
|
|
|
|
|
|
|
|
|
|
|
|
**状态定义:**
|
|
|
|
|
|
```typescript
|
|
|
|
|
|
// 跳转/入组状态
|
|
|
|
|
|
const statusOptions = [
|
|
|
|
|
|
{ value: '', label: '全部' },
|
|
|
|
|
|
{ value: 0, label: '未跳转/未入组' },
|
|
|
|
|
|
{ value: 1, label: '已跳转/已入组' },
|
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
|
|
// 审核状态
|
|
|
|
|
|
const auditStatusMap = {
|
|
|
|
|
|
0: { label: '未审核', class: 's2' },
|
|
|
|
|
|
1: { label: '审核中', class: 's2' },
|
|
|
|
|
|
2: { label: '已通过', class: 's1' },
|
|
|
|
|
|
3: { label: '已驳回', class: 's1' },
|
|
|
|
|
|
};
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
**提取收益:**
|
|
|
|
|
|
- 统一状态展示样式
|
|
|
|
|
|
- 便于新增状态类型
|
|
|
|
|
|
|
|
|
|
|
|
### 3.5 个人信息相关页面
|
|
|
|
|
|
|
|
|
|
|
|
**涉及页面:**
|
|
|
|
|
|
- 地推端:my、changeNickname、changeTel(3个页面)
|
|
|
|
|
|
- 药店端:my、changeNickname、changeTel(3个页面)
|
|
|
|
|
|
|
|
|
|
|
|
**代码相似度:** 95%
|
|
|
|
|
|
|
|
|
|
|
|
**主要差异:**
|
|
|
|
|
|
- API接口地址不同
|
|
|
|
|
|
- 数据字段名称不同
|
|
|
|
|
|
- 主题色不同
|
|
|
|
|
|
|
|
|
|
|
|
**提取建议:**
|
|
|
|
|
|
创建通用页面模板,通过配置区分:
|
|
|
|
|
|
```typescript
|
|
|
|
|
|
interface ProfileConfig {
|
|
|
|
|
|
role: 'promoter' | 'pharmacist';
|
|
|
|
|
|
themeColor: string;
|
|
|
|
|
|
apiEndpoints: {
|
|
|
|
|
|
getProfile: string;
|
|
|
|
|
|
updateAvatar: string;
|
|
|
|
|
|
updateName: string;
|
|
|
|
|
|
updatePhone: string;
|
|
|
|
|
|
logout: string;
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 四、组件提取实施建议
|
|
|
|
|
|
|
|
|
|
|
|
### 4.1 第一阶段:高优先级组件(1-2周)
|
|
|
|
|
|
|
|
|
|
|
|
1. **项目选择器**
|
|
|
|
|
|
- 创建 `/components/project-picker/`
|
|
|
|
|
|
- 替换 3 个页面的使用
|
|
|
|
|
|
- 编写组件文档
|
|
|
|
|
|
|
|
|
|
|
|
2. **统计卡片**
|
|
|
|
|
|
- 创建 `/components/stat-card/`
|
|
|
|
|
|
- 替换 4 个页面的使用
|
|
|
|
|
|
- 编写组件文档
|
|
|
|
|
|
|
|
|
|
|
|
3. **日期选择Mixin**
|
|
|
|
|
|
- 创建 `/mixins/date-picker.ts`
|
|
|
|
|
|
- 在 5 个页面中引入使用
|
|
|
|
|
|
- 编写使用文档
|
|
|
|
|
|
|
|
|
|
|
|
### 4.2 第二阶段:中优先级组件(2-3周)
|
|
|
|
|
|
|
|
|
|
|
|
1. **状态标签组件**
|
|
|
|
|
|
2. **个人信息页面模板**
|
|
|
|
|
|
3. **登录页面模板**
|
|
|
|
|
|
|
|
|
|
|
|
### 4.3 第三阶段:优化与文档(1周)
|
|
|
|
|
|
|
|
|
|
|
|
1. 完善组件文档
|
|
|
|
|
|
2. 编写使用示例
|
|
|
|
|
|
3. 代码审查与优化
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 五、预期收益
|
|
|
|
|
|
|
|
|
|
|
|
### 5.1 代码量减少
|
|
|
|
|
|
|
|
|
|
|
|
| 组件 | 预计减少代码行数 |
|
|
|
|
|
|
|------|----------------|
|
|
|
|
|
|
| 项目选择器 | 60 行 |
|
|
|
|
|
|
| 统计卡片 | 200 行 |
|
|
|
|
|
|
| 日期选择Mixin | 150 行 |
|
|
|
|
|
|
| 状态标签 | 80 行 |
|
|
|
|
|
|
| 个人信息页面 | 300 行 |
|
|
|
|
|
|
| **总计** | **约 800 行** |
|
|
|
|
|
|
|
|
|
|
|
|
### 5.2 维护效率提升
|
|
|
|
|
|
|
|
|
|
|
|
- 统一交互体验
|
|
|
|
|
|
- 减少重复 bug
|
|
|
|
|
|
- 便于功能迭代
|
|
|
|
|
|
- 新功能开发效率提升 30%
|
|
|
|
|
|
|
|
|
|
|
|
### 5.3 代码质量提升
|
|
|
|
|
|
|
|
|
|
|
|
- 提高代码可读性
|
|
|
|
|
|
- 降低耦合度
|
|
|
|
|
|
- 提升可测试性
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 六、风险评估与应对措施
|
|
|
|
|
|
|
|
|
|
|
|
| 风险点 | 影响 | 应对措施 |
|
|
|
|
|
|
|--------|------|----------|
|
|
|
|
|
|
| 组件耦合度高 | 提取困难 | 先解耦再提取,保持原有功能 |
|
|
|
|
|
|
| 样式差异大 | 统一困难 | 通过 props 配置主题色和样式 |
|
|
|
|
|
|
| 替换影响功能 | 回归测试 | 分阶段替换,每阶段充分测试 |
|
|
|
|
|
|
| 接口差异 | 逻辑复杂 | 使用配置化方式处理差异 |
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 七、下一步行动
|
|
|
|
|
|
|
|
|
|
|
|
1. **立即开始**:项目选择器组件提取
|
|
|
|
|
|
2. **本周完成**:统计卡片组件提取
|
|
|
|
|
|
3. **下周开始**:日期选择Mixin提取
|
|
|
|
|
|
4. **持续进行**:组件文档编写
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
*报告生成时间:2026-03-05*
|
|
|
|
|
|
*分析师:AI Assistant*
|