HarmonyOS5.0基于UniApp开发的智能待办事项应用
摘要:这是一个基于UniApp开发的跨平台智能待办事项应用完整项目示例。项目采用模块化结构,包含页面目录、可复用组件、状态管理和静态资源。核心功能包括:1)待办事项列表展示与增删改查;2)使用Vuex进行状态管理并实现本地数据持久化;3)响应式组件开发(TodoItem.vue)。项目特色:1)一套代码适配微信小程序、H5和App;2)采用uni-app条件编译处理平台差异;3)支持扩展云开发和多
·
以下是一个基于UniApp开发的智能待办事项应用完整项目示例,结合官方最佳实践与开发规范,涵盖核心功能实现与跨平台适配要点:
项目结构
todo-app/
├── pages/ # 页面目录
│ ├── index/ # 首页
│ │ ├── index.vue # 主页面
│ │ └── index.json # 页面配置
│ └── detail/ # 详情页
├── components/ # 可复用组件
│ └── TodoItem.vue # 待办项组件
├── static/ # 静态资源
│ └── icons/ # 图标目录
├── store/ # 状态管理
│ └── todoStore.js # Vuex状态管理
├── App.vue # 应用入口
├── main.js # 初始化文件
└── pages.json # 路由配置
核心功能实现
1. 待办事项列表(pages/index/index.vue)
<template>
<view class="container">
<!-- 输入框 -->
<input
v-model="newTodo"
placeholder="添加新任务"
@confirm="addTodo"
class="input-box"
/>
<!-- 待办列表 -->
<scroll-view scroll-y class="list-container">
<TodoItem
v-for="(item, index) in todos"
:key="index"
:item="item"
@toggle="toggleStatus(index)"
@delete="deleteTodo(index)"
/>
</scroll-view>
</view>
</template>
<script>
import TodoItem from '@/components/TodoItem.vue'
import { mapState, mapMutations } from 'vuex'
export default {
components: { TodoItem },
data() {
return { newTodo: '' }
},
computed: { ...mapState(['todos']) },
methods: {
...mapMutations(['ADD_TODO', 'TOGGLE_STATUS', 'DELETE_TODO']),
addTodo() {
if(this.newTodo.trim()) {
this.ADD_TODO({ text: this.newTodo })
this.newTodo = ''
}
},
toggleStatus(index) { this.TOGGLE_STATUS(index) },
deleteTodo(index) { this.DELETE_TODO(index) }
}
}
</script>
2. 可复用组件(components/TodoItem.vue)
<template>
<view class="todo-item">
<checkbox :checked="item.completed" @tap="$emit('toggle')" />
<text :class="{ 'completed': item.completed }">{{ item.text }}</text>
<button @tap="$emit('delete')" class="delete-btn">×</button>
</view>
</template>
<script>
export default {
props: { item: Object }
}
</script>
<style scoped>
.todo-item {
display: flex;
align-items: center;
padding: 15rpx;
border-bottom: 1rpx solid #eee;
}
.completed {
text-decoration: line-through;
color: #888;
}
.delete-btn {
margin-left: auto;
color: #ff4444;
}
</style>
状态管理(store/todoStore.js)
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
export default new Vuex.Store({
state: {
todos: JSON.parse(uni.getStorageSync('todos') || '[]')
},
mutations: {
ADD_TODO(state, payload) {
state.todos.push({ ...payload, completed: false })
uni.setStorageSync('todos', JSON.stringify(state.todos))
},
TOGGLE_STATUS(state, index) {
state.todos[index].completed = !state.todos[index].completed
uni.setStorageSync('todos', JSON.stringify(state.todos))
},
DELETE_TODO(state, index) {
state.todos.splice(index, 1)
uni.setStorageSync('todos', JSON.stringify(state.todos))
}
}
})
路由配置(pages.json)
{
"pages": [
{
"path": "pages/index/index",
"style": {
"navigationBarTitleText": "待办事项",
"enablePullDownRefresh": true
}
}
],
"globalStyle": {
"navigationBarTextStyle": "white",
"navigationBarTitleText": "UniApp Todo",
"navigationBarBackgroundColor": "#007AFF",
"backgroundColor": "#F8F8F8"
}
}
核心特性实现
-
跨平台兼容
通过uni-app编译器自动适配各平台差异,同一套代码可同时发布到微信小程序、H5和App(网页1、网页4) -
数据持久化
使用uni.setStorageSync实现本地存储,结合Vuex管理全局状态(网页5、网页7) -
交互优化
scroll-view组件实现流畅滚动(网页4)- 复选框与删除按钮的点击反馈优化
扩展建议
-
云开发集成
// 接入uniCloud实现云端同步 const db = uniCloud.database() db.collection('todos').add(state.todos) -
多端样式适配
/* 条件编译 */ #ifdef MP-WEIXIN .container { padding: 20rpx; } #endif -
插件扩展
通过uni-app插件市场添加:- 时间选择器设置任务期限
- 语音输入添加待办事项
(生态扩展参考网页1、网页4)
开发环境配置
- 安装HBuilderX(网页1、网页8)
- 创建uni-app项目选择"默认模板"
- 真机调试:
# 微信开发者工具需开启服务端口 npm run dev:mp-weixin - 打包发布:
npm run build:mp-weixin # 生成小程序包 npm run build:h5 # 生成H5页面
更多推荐
所有评论(0)