You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

8.2 KiB

组件复用性分析报告

一、项目组件盘点

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 行
  • 统一项目切换交互体验
  • 便于后续维护

组件接口设计:

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 行
  • 统一统计卡片样式
  • 支持配置化展示

组件接口设计:

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接口设计:

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%

状态定义:

// 跳转/入组状态
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接口地址不同
  • 数据字段名称不同
  • 主题色不同

提取建议: 创建通用页面模板,通过配置区分:

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