@tanzhenxing/zx-code
Version:
源代码展示组件,用于展示不同类型的文本样式
205 lines (158 loc) • 6.96 kB
Markdown
# zx-code 组件重构升级总结
## 📋 重构概览
本次重构将 `zx-code` 组件从简单的代码展示工具升级为功能丰富的专业级源代码展示组件,大幅提升了用户体验和开发效率。
## 🎯 主要改进内容
### 1. 功能大幅增强
#### 🎨 核心功能
- ✅ **语法高亮**: 支持 JavaScript、Vue、CSS、HTML 等多种语言的基础语法高亮
- ✅ **行号显示**: 可动态切换显示/隐藏行号,提供更好的代码阅读体验
- ✅ **代码复制**: 跨平台的一键复制功能,支持 H5、小程序、App
- ✅ **全屏模式**: 支持全屏查看代码,适合查看长代码文件
- ✅ **自动换行控制**: 可控制代码是否自动换行
- ✅ **代码统计**: 显示行数、字符数、语言类型等统计信息
#### 🎯 UI/UX 优化
- ✅ **现代化界面**: 采用渐变色工具栏,美观的卡片式设计
- ✅ **响应式布局**: 完美适配各种屏幕尺寸,包括移动端
- ✅ **交互反馈**: 复制成功提示、按钮点击动画等
- ✅ **可自定义样式**: 支持字体大小、行高、主题等配置
#### 🔧 开发者友好
- ✅ **丰富的 API**: 提供了完整的属性配置和方法暴露
- ✅ **组件通信**: 暴露常用方法供父组件调用
- ✅ **平台兼容**: 支持 H5、微信小程序、App 等多平台
### 2. API 接口全面升级
#### Props 属性 (新增/优化)
| 属性名 | 类型 | 默认值 | 说明 | 状态 |
|--------|------|--------|------|------|
| `sourceCode` | String | `''` | 要显示的源代码内容 | 保留 |
| `showCode` | Boolean | `true` | 是否显示源代码 | 保留 |
| `language` | String | `'javascript'` | 编程语言类型,用于语法高亮 | **新增** |
| `title` | String | `''` | 代码块标题 | **新增** |
| `fontSize` | String/Number | `'26rpx'` | 字体大小 | 优化 |
| `lineHeight` | String/Number | `'40rpx'` | 行高 | 保留 |
| `showLineNumber` | Boolean | `true` | 是否显示行号 | **新增** |
| `enableCopy` | Boolean | `true` | 是否启用复制功能 | **新增** |
| `enableFullscreen` | Boolean | `true` | 是否启用全屏功能 | **新增** |
| `wrapCode` | Boolean | `false` | 是否自动换行 | **新增** |
| `showStats` | Boolean | `true` | 是否显示统计信息 | **新增** |
| `theme` | String | `'light'` | 代码主题(预留功能) | **新增** |
#### 暴露的方法 (全新)
```javascript
// 通过 ref 调用组件方法
const codeRef = ref()
// 可用方法
codeRef.value.copyCode() // 复制代码
codeRef.value.toggleFullscreen() // 切换全屏模式
codeRef.value.toggleLineNumber() // 切换行号显示
codeRef.value.toggleWrap() // 切换自动换行
```
### 3. 语法高亮支持
目前支持以下语言的基础语法高亮:
- **JavaScript/TypeScript**: `javascript`, `js`, `typescript`, `ts`
- **Vue**: `vue`
- **HTML/XML**: `html`, `xml`
- **CSS/Sass**: `css`, `scss`, `sass`
### 4. 平台兼容性
| 平台 | 支持状态 | 备注 |
|------|----------|------|
| H5 | ✅ 完全支持 | 使用 Clipboard API |
| 微信小程序 | ✅ 完全支持 | 使用 uni.setClipboardData |
| 支付宝小程序 | ✅ 完全支持 | 使用 uni.setClipboardData |
| App (iOS/Android) | ✅ 完全支持 | 使用 uni.setClipboardData |
## 📁 文件结构
### 更新的文件
1. **主组件文件**: `src/components/zx-code/zx-code.vue`
- 完全重构,新增大量功能
- 优化界面设计和用户体验
- 增强响应式布局
2. **使用文档**: `src/components/zx-code/README.md`
- 详细的使用说明和 API 文档
- 丰富的使用示例
- 平台兼容性说明
3. **示例应用**: `src/pages/components/upload/index.vue`
- 将原有的简单代码展示替换为 zx-code 组件
- 展示了组件的实际应用效果
4. **测试页面**: `src/pages/test/zx-code-test.vue`
- 组件功能验证页面
- 不同语言的代码展示示例
## 🔄 使用迁移指南
### 原有用法 (v1.x)
```vue
<zx-code-display
:sourceCode="code"
:showCode="true"
fontSize="28rpx"
lineHeight="40rpx"
/>
```
### 新版用法 (v2.x)
```vue
<zx-code
:sourceCode="code"
language="javascript"
title="代码示例"
:showLineNumber="true"
:enableCopy="true"
:enableFullscreen="true"
/>
```
### 主要变化
1. **组件名称**: `zx-code-display` → `zx-code`
2. **新增属性**: 大量新功能属性
3. **样式优化**: 现代化界面设计
4. **功能增强**: 语法高亮、复制、全屏等
## 🎉 实际应用效果
### 在 Upload 组件示例中的应用
**替换前:**
```vue
<view class="demo-code">
<text class="code-text">
<zx-upload v-model:fileList="fileList" />
</text>
</view>
```
**替换后:**
```vue
<zx-code
:sourceCode="uploadCode"
language="vue"
title="上传组件代码"
:showLineNumber="false"
:showStats="false"
/>
```
### 优势对比
| 功能 | 旧版本 | 新版本 |
|------|--------|--------|
| 语法高亮 | ❌ | ✅ 支持多种语言 |
| 行号显示 | ❌ | ✅ 可切换 |
| 代码复制 | ❌ | ✅ 跨平台支持 |
| 全屏查看 | ❌ | ✅ 支持 |
| 交互体验 | 基础 | ✅ 现代化 |
| 响应式设计 | 基础 | ✅ 完善 |
| 可配置性 | 有限 | ✅ 丰富 |
## 📈 性能优化
1. **代码拆分**: 按需加载语法高亮功能
2. **虚拟滚动**: 对于大文件的性能优化(预留)
3. **缓存机制**: 语法高亮结果缓存
4. **响应式优化**: 避免不必要的重渲染
## 🔮 未来规划
### 即将支持的功能
1. **更多语言**: Python, Java, Go, PHP 等
2. **主题系统**: 暗色主题、高对比度主题等
3. **代码折叠**: 支持代码块折叠展开
4. **搜索功能**: 代码内容搜索
5. **行高亮**: 指定行号高亮显示
6. **差异对比**: 代码版本对比功能
### 集成计划
1. **highlight.js**: 集成专业语法高亮库
2. **prism.js**: 替代方案
3. **Monaco Editor**: 高级编辑器集成
## 📊 升级成果
- 🎯 **功能提升**: 从基础展示 → 专业级代码组件
- 🎨 **界面优化**: 现代化设计,提升用户体验
- 🔧 **开发效率**: 丰富的 API,提高开发效率
- 📱 **平台兼容**: 全平台支持,一套代码多端运行
- 📖 **文档完善**: 详细的使用说明和示例
## 🎉 总结
本次 `zx-code` 组件的重构升级是一次全面的功能增强和用户体验提升。从简单的代码展示工具升级为功能丰富的专业级组件,不仅满足了当前的使用需求,还为未来的功能扩展打下了坚实的基础。
新版本的 `zx-code` 组件将显著提升代码展示的效果和用户体验,为开发者提供更强大、更灵活的代码展示解决方案。