邮轮穿舱件管理系统-小程序端技术架构分析
项目概述
邮轮穿舱件管理系统是基于uni-app框架开发的微信小程序,采用MVVM架构模式,实现了完整的业务功能模块。项目采用分包加载策略优化性能,集成了TDesign UI组件库,具备良好的可维护性和扩展性。
项目文件组织结构
核心目录结构
├── app.js # 应用入口文件
├── app.json # 应用配置文件
├── app.less # 全局样式文件
├── pages/ # 页面目录
│ ├── home/ # 首页模块
│ ├── taskPage/ # 任务页面模块
│ ├── searchPage/ # 搜索页面模块
│ ├── my/ # 个人中心模块
│ └── 其他分包页面
├── components/ # 公共组件目录
│ └── nav/ # 导航组件
├── api/ # 接口层
│ └── request.js # 网络请求封装
├── utils/ # 工具函数
│ └── eventBus.js # 事件总线
└── config/ # 配置目录
文件依赖关系图
flowchart TD
A[app.js] --> B[pages/home/index.js]
A --> C[pages/taskPage/index.js]
A --> D[pages/searchPage/index.js]
A --> E[pages/my/index.js]
B --> F[components/nav/index.js]
B --> G[api/request.js]
B --> H[utils/eventBus.js]
G --> I[config/index.js]
J[app.json] --> K[分包配置]
J --> L[tabBar配置]
J --> M[组件注册]
MVVM模式实现分析
数据绑定机制
uni-app基于Vue.js的MVVM模式,通过数据响应式系统实现视图与数据的双向绑定:
// ViewModel层示例 - pages/home/index.js
Page({
data: {
statsData: {
total_tickets: 0,
open_tickets: 0,
closed_tickets: 0
},
isLoggedIn: false,
navigationList: [...]
},
// 数据更新自动触发视图更新
async loadStatsData() {
try {
const res = await request('/miniapp/statistics/brief', 'get');
this.setData({ statsData: res }); // 触发视图更新
} catch (error) {
// 错误处理
}
}
})
组件通信架构
1. 全局事件总线模式
sequenceDiagram
participant A as App全局事件总线
participant H as Home页面
participant C as 其他组件
A->>H: 注册事件监听
H->>A: 触发事件更新
A->>C: 通知所有监听者
C->>C: 更新本地状态
// 事件总线实现 - utils/eventBus.js
export default function createBus() {
return {
events: {},
on(event, callback) {
if (!this.events[event]) this.events[event] = [];
this.events[event].push(callback);
},
emit(event, ...args) {
if (this.events[event]) this.events[event].forEach((callback) => callback(...args));
}
};
}
// 应用级别事件总线 - app.js
App({
eventBus: createBus(),
setUnreadNum(unreadNum) {
this.globalData.unreadNum = unreadNum;
this.eventBus.emit('unread-num-change', unreadNum);
}
})
2. 组件属性传递
flowchart LR
P[父组件] -->|properties| C[子组件]
C -->|triggerEvent| P
// 组件属性定义 - components/nav/index.js
Component({
properties: {
navType: {
type: String,
value: 'title',
},
titleText: String,
}
})
核心模块架构分析
应用入口架构
classDiagram
class App {
+onLaunch()
+globalData
+eventBus
+connect()
+setUnreadNum()
}
class Page {
+data
+onLoad()
+onShow()
+methods
}
class Component {
+properties
+data
+methods
+lifetimes
}
class EventBus {
+events
+on()
+off()
+emit()
}
App --> EventBus
Page --> App
Component --> Page
网络请求层架构
sequenceDiagram
participant P as Page页面
participant R as Request封装
participant W as wx.request
participant S as 服务器
P->>R: 调用request方法
R->>R: 添加Token认证头
R->>W: 发起网络请求
W->>S: HTTP请求
S-->>W: 响应数据
W-->>R: 回调处理
R->>R: 状态码验证
R-->>P: 返回结果或错误
// 请求封装 - api/request.js
function request(url, method = 'GET', data = {}) {
const header = {
'content-type': 'application/json',
};
// Token认证
const tokenString = wx.getStorageSync('access_token');
if (tokenString) {
header.Authorization = `Bearer ${tokenString}`;
}
return new Promise((resolve, reject) => {
wx.request({
url: baseUrl + url,
method,
data,
success(res) {
if (res.statusCode === 200 || res.statusCode === 201) {
resolve(res.data);
} else {
reject({
statusCode: res.statusCode,
message: res.data?.detail || '请求失败'
});
}
}
});
});
}
页面生命周期管理
stateDiagram-v2
[*] --> onLoad
onLoad --> onShow
onShow --> onReady
onReady --> 运行中
运行中 --> onHide
onHide --> onShow
onHide --> onUnload
onUnload --> [*]
state 运行中 {
[*] --> 用户交互
用户交互 --> 数据更新
数据更新 --> 视图渲染
视图渲染 --> [*]
}
分包加载策略
分包配置架构
flowchart TD
A[主包] --> B[pages/home]
A --> C[pages/taskPage]
A --> D[pages/searchPage]
A --> E[pages/my]
F[分包support] --> G[support页面]
H[分包workpieceDetail] --> I[workpieceDetail页面]
J[分包bindUser] --> K[bindUser页面]
A --> F
A --> H
A --> J
{
"subpackages": [
{
"root": "pages/support",
"name": "support",
"pages": ["index"]
},
{
"root": "pages/workpieceDetail",
"name": "workpieceDetail",
"pages": ["index"]
}
]
}
组件化架构设计
自定义组件系统
classDiagram
class NavComponent {
+properties: navType, titleText
+data: visible, sidebar, statusHeight
+methods: openDrawer(), itemClick()
+lifetimes: ready()
}
class PageComponent {
+使用NavComponent
+数据绑定
+事件处理
}
NavComponent <|-- PageComponent
// 页面使用组件 - pages/home/index.json
{
"usingComponents": {
"nav": "/components/nav",
"card": "/components/card"
}
}
数据流架构
单向数据流实现
flowchart LR
S[服务器数据] --> A[API层]
A --> V[ViewModel]
V --> VV[Virtual DOM]
VV --> R[真实DOM]
U[用户操作] --> E[事件处理]
E --> V
性能优化策略
1. 分包加载
- 主包包含核心功能和tabBar页面
- 功能模块按需分包,减少首次加载体积
2. 组件懒加载
- 使用自定义组件实现功能模块化
- 按需加载非核心功能组件
3. 数据缓存
- 合理使用本地存储缓存用户数据
- 请求结果缓存减少网络请求
4. 事件优化
- 全局事件总线避免组件间强耦合
- 合理使用事件委托减少内存占用
索引
邮轮穿舱件管理系统小程序端采用了成熟的uni-app MVVM架构,具备以下技术特点:
- 架构清晰:严格遵循MVVM模式,数据与视图分离明确
- 组件化程度高:通过自定义组件实现功能模块化
- 通信机制完善:全局事件总线+组件属性传递的多层次通信
- 性能优化到位:分包加载、懒加载等策略提升用户体验
- 可维护性强:清晰的目录结构和代码组织便于团队协作
该架构为后续功能扩展和维护提供了良好的基础,符合现代前端开发的最佳实践。