AI創作系列第18篇:海貍IM移動端UI統一大升級 - 從混亂到規范的技術重構之路
本文是海貍IM AI創作系列的第18篇文章,記錄7月11日-13日周末期間對移動端的UI統一升級工作。這次重構不是功能性的,而是架構性的 - 我們重新設計了整個UI架構,解決了頁面展示不一致、代碼重復、維護困難等問題,為海貍IM建立了可持續發展的UI架構基礎。
前言
經過7月11日-13日三天的密集開發,海貍IM移動端迎來了UI統一大升級。這次更新不是功能性的,而是架構性的 - 我們重新設計了整個UI架構,封裝了統一的骨架屏組件,重構了Header組件,開發了BeaverLayout布局組件,并開始搭建自己的UI組件庫。
一、為什么要做UI統一?
1.1 問題背景
在開發過程中,我們遇到了很多UI相關的問題:
頁面展示不一致:不同頁面的Header樣式、間距、字體大小都不一樣,用戶體驗很差。
代碼重復嚴重:每個頁面都要寫Header、狀態欄適配、滾動區域等重復代碼。
維護困難:修改一個樣式需要在多個頁面中重復修改,容易遺漏。
開發效率低:每次開發新頁面都要從零開始搭建基礎結構。
1.2 解決思路
我們決定采用組件化的方式來解決這些問題:
- 統一設計規范:制定統一的設計系統,包括顏色、字體、間距等
- 組件化開發:將常用的UI元素封裝成組件
- 配置化管理:通過配置文件統一管理應用信息
- 骨架屏優化:提升加載體驗
二、技術架構重構
2.1 新的組件架構
我們重新設計了整個組件架構:
src/
├── component/ // UI組件庫
│ ├── layout/ // 布局組件
│ ├── header/ // 頭部組件
│ ├── button/ // 按鈕組件
│ ├── dialog/ // 對話框組件
│ ├── toast/ // 提示組件
│ └── index.ts // 組件導出
├── uni_modules/ // 第三方組件
│ └── uv-skeleton/ // 骨架屏組件
└── config/ // 配置文件└── data.ts // 應用配置
2.2 設計系統建立
我們建立了統一的設計系統:
顏色系統:
- 主色:#FF7D45(橙色)
- 輔助色:#E86835(深橙色)
- 文字色:#2D3436(深灰)
- 次要文字:#636E72(中灰)
- 邊框色:#EBEEF5(淺灰)
- 背景色:#F9FAFB(極淺灰)
圓角規范:
- 小圓角:12px
- 中圓角:14px
- 大圓角:20px
動畫規范:
- 緩動函數:cubic-bezier(0.22, 1, 0.36, 1)
- 按鈕動畫:cubic-bezier(0.33, 1, 0.68, 1)
三、核心組件開發
3.1 骨架屏組件封裝
骨架屏是現代移動應用的重要體驗優化手段。我們封裝了統一的骨架屏組件,支持多種布局和動畫效果。
設計理念:
- 通過顯示頁面的大致結構來減少用戶的等待焦慮
- 支持自定義配置,適配不同頁面結構
- 流暢的動畫效果,提升用戶體驗
應用場景:
- 聊天列表加載時的骨架屏
- 朋友圈內容加載時的骨架屏
- 個人資料頁面加載時的骨架屏
3.2 Header組件重構
Header組件是頁面導航的核心,我們重新設計了它的架構。
核心特性:
- 多種模式支持:固定模式、靜態模式、透明模式
- 自適應狀態欄:自動獲取不同設備的狀態欄高度
- 靈活的插槽系統:支持自定義左側和右側內容
- 統一的樣式規范:確保所有頁面的Header樣式一致
使用體驗:
- 開發者只需要傳入標題和配置,就能獲得一致的Header效果
- 支持自定義返回按鈕、右側按鈕等
- 自動處理狀態欄適配,無需手動計算
3.3 BeaverLayout布局組件
BeaverLayout是一個綜合性的頁面布局組件,它集成了Header、背景、滾動區域等功能。
核心功能:
- 智能高度計算:自動計算Header高度、內容區域高度
- 背景裝飾系統:支持漸變背景、純色背景等
- 滾動區域管理:統一的滾動區域配置和事件處理
- 插槽系統:支持前置內容、后置內容的靈活配置
使用優勢:
- 開發者只需要關注頁面內容,布局邏輯由組件處理
- 確保所有頁面的展示效果一致
- 大幅減少重復代碼
四、UI組件庫搭建
4.1 組件庫設計原則
我們開始搭建自己的UI組件庫,制定了以下設計原則:
單一職責:每個組件只負責一個功能
可復用性:組件可以在多個頁面中使用
可配置性:通過props提供靈活的配置選項
可擴展性:通過插槽支持自定義內容
4.2 核心組件開發
BeaverButton按鈕組件:
- 支持多種類型:primary、secondary、outline、text、danger
- 支持多種尺寸:small、medium、large
- 支持加載狀態、禁用狀態
- 統一的動畫效果和交互反饋
BeaverDialog對話框組件:
- 支持多種類型:default、success、warning、error
- 支持多種尺寸:small、medium、large
- 靈活的按鈕配置和布局
- 統一的遮罩和動畫效果
BeaverToast提示組件:
- 支持多種位置:top、center、bottom
- 支持多種類型:default、success、warning、error
- 自動消失和手動關閉
- 統一的動畫效果
4.3 組件庫導出系統
我們建立了完整的組件導出系統,方便開發者使用:
// 統一導出所有組件
export {BeaverLayout,PageHeader,BeaverButton,BeaverDialog,BeaverToast
};
五、配置文件抽離
5.1 配置管理優化
我們將應用相關的配置抽離到獨立的配置文件中,便于統一管理:
應用基本信息:
- 應用名稱、描述、開發者信息
- 支持郵箱、應用Logo等
- 版本信息、更新地址等
使用優勢:
- 配置集中管理,便于維護
- 避免硬編碼,提高代碼質量
- 支持多環境配置
5.2 配置使用示例
在組件中直接引用配置,無需重復定義:
import { APP_CONFIG } from '@/config/data';// 在組件中使用
const appName = APP_CONFIG.name;
const appLogo = APP_CONFIG.logo;
六、頁面統一改造
6.1 改造前后對比
改造前的問題:
- 每個頁面都要寫Header、狀態欄適配
- 樣式不統一,用戶體驗差
- 代碼重復嚴重,維護困難
改造后的優勢:
- 使用BeaverLayout組件,代碼簡潔
- 樣式統一,用戶體驗一致
- 維護簡單,修改一處即可
6.2 改造示例
更新頁面改造:
- 使用BeaverLayout替代原有的容器結構
- 使用BeaverButton替代原生按鈕
- 使用APP_CONFIG統一管理應用信息
個人資料頁面改造:
- 統一的Header樣式和返回邏輯
- 一致的滾動區域和背景效果
- 統一的間距和字體規范
七、技術實現亮點
7.1 組件化架構
組件設計原則:
- 每個組件都有明確的職責邊界
- 通過props和事件進行組件通信
- 支持插槽實現內容自定義
組件通信機制:
- 使用事件系統進行父子組件通信
- 使用插槽系統實現內容自定義
- 使用provide/inject實現跨層級通信
7.2 樣式系統
SCSS變量系統:
- 統一的顏色變量定義
- 統一的尺寸和間距變量
- 統一的動畫和過渡變量
響應式設計:
- 支持不同屏幕尺寸的適配
- 統一的斷點定義
- 靈活的響應式工具函數
7.3 性能優化
組件懶加載:
- 使用defineAsyncComponent實現組件懶加載
- 減少首屏加載時間
- 優化內存使用
樣式優化:
- 使用transform代替position動畫
- 優化CSS選擇器性能
- 減少重繪和回流
八、開發規范制定
8.1 組件開發規范
文件命名規范:
- 組件文件使用kebab-case命名
- 類型文件使用.types.ts后綴
- 樣式文件使用.scss格式
組件結構規范:
- 統一的template、script、style結構
- 明確的props和emits定義
- 完整的TypeScript類型支持
8.2 代碼規范
TypeScript規范:
- 完整的接口定義和類型導出
- 嚴格的類型檢查
- 清晰的類型注釋
樣式規范:
- 使用BEM命名規范
- 統一的樣式組織結構
- 避免樣式沖突
九、測試驗證
9.1 功能測試
我們對所有組件進行了全面的功能測試:
Header組件測試:
- 返回按鈕功能正常
- 標題顯示正確
- 自定義內容插槽工作正常
BeaverLayout測試:
- 布局適配正確
- 滾動功能正常
- 背景裝飾效果正確
骨架屏測試:
- 加載狀態切換正常
- 動畫效果流暢
- 內容切換正確
9.2 兼容性測試
平臺兼容性:
- iOS各型號設備適配正常
- Android主流機型適配正常
- 小程序平臺兼容正常
- H5瀏覽器兼容正常
性能測試:
- 首屏加載時間優化
- 組件渲染性能提升
- 內存使用合理
十、遇到的問題和解決方案
10.1 狀態欄適配問題
問題:不同設備的狀態欄高度不同,手動適配容易出錯。
解決方案:
- 封裝狀態欄高度獲取函數
- 在Header組件中自動處理
- 支持自定義狀態欄高度配置
10.2 滾動區域高度計算問題
問題:固定Header時,滾動區域高度計算復雜。
解決方案:
- 使用computed屬性動態計算
- 考慮狀態欄、Header、底部安全區域
- 支持自定義高度配置
10.3 組件樣式沖突問題
問題:組件樣式可能與其他頁面樣式沖突。
解決方案:
- 使用scoped樣式
- 統一的樣式命名規范
- 避免全局樣式污染
十一、經驗總結
11.1 技術經驗
組件設計經驗:
- 組件設計要考慮復用性和擴展性
- 通過props和插槽提供靈活的配置
- 保持組件的單一職責
架構設計經驗:
- 建立統一的設計系統很重要
- 組件化開發能大幅提升開發效率
- 配置文件集中管理便于維護
11.2 開發經驗
開發流程經驗:
- 先設計架構,再開發組件
- 制定開發規范,確保代碼質量
- 充分測試,確保兼容性
團隊協作經驗:
- 統一的設計規范很重要
- 組件文檔要詳細完整
- 代碼review要嚴格
十二、未來規劃
12.1 短期目標
- 組件完善:補充更多基礎組件,如Input、Select等
- 文檔完善:編寫詳細的組件使用文檔和示例
- 主題系統:支持多主題切換功能
- 動畫庫:建立統一的動畫效果庫
12.2 中期目標
- 組件市場:將組件庫發布到uni-app插件市場
- 設計工具:開發可視化的組件設計工具
- 代碼生成:支持通過設計稿自動生成組件代碼
- 性能監控:建立組件性能監控系統
12.3 長期目標
- 生態建設:構建完整的組件生態體系
- 社區貢獻:開源社區貢獻和反饋
- 商業化探索:組件庫商業化可能性探索
- 國際化支持:支持多語言和多地區
十三、總結
本次UI統一升級是海貍IM移動端發展的重要里程碑:
13.1 技術價值
- 架構統一:建立了統一的UI架構體系
- 組件化:實現了高度的組件化開發
- 可維護性:大幅提升了代碼的可維護性
- 開發效率:顯著提升了開發效率
13.2 用戶體驗
- 一致性:所有頁面展示效果一致
- 流暢性:骨架屏提供流暢的加載體驗
- 專業性:統一的交互體驗更加專業
- 美觀性:統一的設計規范更加美觀
13.3 開發價值
- 規范制定:建立了完整的開發規范
- 組件庫:開始搭建自己的UI組件庫
- 配置管理:統一的配置管理方式
- 文檔完善:詳細的組件使用文檔
這次升級不僅解決了UI一致性問題,更重要的是為海貍IM建立了可持續發展的UI架構基礎。通過組件化、規范化的開發方式,海貍IM正在向一個更加專業、更加完善的移動應用邁進。
十四、技術思考
14.1 為什么選擇組件化?
組件化開發是現代前端開發的主流趨勢,它能夠:
- 提高代碼復用性:一次開發,多處使用
- 降低維護成本:修改一處,全局生效
- 提升開發效率:專注于業務邏輯,而不是重復的UI代碼
- 保證一致性:統一的組件確保UI風格一致
14.2 如何平衡靈活性和規范性?
在組件設計過程中,我們一直在思考如何平衡靈活性和規范性:
- 提供合理的默認值:大部分情況下使用默認配置即可
- 支持自定義配置:特殊情況下可以自定義
- 保持向后兼容:新版本不破壞現有功能
- 文檔和示例:提供詳細的使用說明
14.3 組件庫的未來發展方向?
組件庫的發展方向應該是:
- 智能化:支持AI輔助的組件生成
- 可視化:提供可視化的組件設計工具
- 生態化:構建完整的組件生態
- 國際化:支持多語言和多地區
相關鏈接:
- 移動端:https://github.com/wsrh8888/beaver-mobile
- 服務端:https://github.com/wsrh8888/beaver-server
- PC端:https://github.com/wsrh8888/beaver-desktop.git
- 文檔地址:https://wsrh8888.github.io/beaver-docs/
- 教程地址:https://www.bilibili.com/video/BV1HrrKYeEB4/
- 演示包:https://github.com/wsrh8888/beaver-docs/releases/download/v1.0.0/1.0.0.apk
下一篇預告: 海貍IM AI創作系列第19篇 - 《從功能到生態:海貍IM商業化探索之路》