您现在的位置是:首页 >技术教程 >基于微信小程序的番茄时钟的实现(人脸识别登录)网站首页技术教程
基于微信小程序的番茄时钟的实现(人脸识别登录)
hello hello~ ,这里是 code袁~💖💖 ,欢迎大家点赞🥳🥳关注💥💥收藏🌹🌹🌹
🦁作者简介:一名喜欢分享和记录学习的在校大学生
💥个人主页:code袁的博客
💥 个人QQ:2647996100
🐯 个人wechat:code8896
code袁系列专栏导航
1.《毕业设计与课程设计》本专栏分享一些毕业设计的源码以及项目成果。🥰🥰🥰
2.《微信小程序开发》本专栏从基础到入门的一系开发流程,并且分享了自己在开发中遇到的一系列问题。🤹🤹🤹
3.《vue开发系列全程线路》本专栏分享自己的vue的学习历程。非常期待和您一起在这个小小的互联网世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨
基于微信小程序的番茄时钟系统的设计
1.前言介绍
1.1 什么是番茄工作法?
番茄工作法是一种简单易行的时间管理方法,由 Francesco Cirillo 于 1980 年代创立。其核心是将工作时间划分为 25 分钟的专注时间段(称为一个“番茄钟”),每个番茄钟之间进行 5 分钟的短暂休息。每完成四个番茄钟,可以进行一次较长时间的休息。
1.2 番茄时钟小程序能为你做什么?
- 提升专注力: 25 分钟的倒计时,帮助你屏蔽干扰,全身心投入工作。
- 提高效率: 将大任务分解成小目标,逐个击破,告别拖延。
- 科学休息: 定时提醒休息,劳逸结合,保持最佳状态。
- 数据统计: 记录你的专注时长和完成任务数,见证你的进步。
- 个性化设置: 自定义番茄钟时长、休息时长、背景音乐等,打造专属你的高效工具。
1.3 番茄时钟小程序的特点:
- 界面简洁,操作便捷: 无需复杂设置,一键开启专注模式。
- 功能强大,满足多样需求: 支持任务管理、数据统计、白噪音等功能。
- 数据同步,多端使用: 支持微信小程序、手机 APP 等多端数据同步,随时随地开启高效生活。
1.4 番茄时钟小程序,适合谁?
- 学生党: 告别拖延,高效学习,轻松应对考试。
- 上班族: 提升工作效率,告别加班,享受生活。
- 自由职业者: 合理安排时间,提高工作效率,实现工作与生活的平衡。
2.功能设计
-
番茄钟设置:用户可自定义一个番茄钟的时长,默认时长为25分钟。同时提供短休息时间设置,默认5分钟;长休息时间设置,默认15分钟。在学习或工作场景中,合理的时间分配能有效提升专注度和效率。
-
倒计时与正计时:支持倒计时显示,让用户清晰看到每个番茄钟剩余时间,增强时间紧迫感;也提供正计时功能,方便用户回顾专注时长,增强成就感。
-
计时提醒:在番茄钟结束、短休息和长休息开始与结束时,提供多种提醒方式,如声音、震动、弹窗。用户可自行选择喜欢的提醒音效,如清脆的鸟鸣声、舒缓的音乐等。
-
任务创建:用户可输入任务名称、详细描述、设置优先级(高、中、低)。比如用户在备考阶段,可创建“复习数学知识点”任务,并标注优先级为高。
-
任务分类:支持自定义任务分类,如工作、学习、生活等。方便用户对不同类型任务进行集中管理和统计分析。
-
任务进度跟踪:通过番茄钟的完成次数,自动记录任务进度。以百分比形式展示任务完成进度,让用户对任务完成情况一目了然。
-
时间统计:统计每日、每周、每月专注时长,以及不同任务、不同分类下的专注时间分布。用户能直观了解自己在各项事务上投入的时间。
-
专注度分析:根据用户在番茄钟内的中断次数、完成率等数据,分析专注度变化趋势。以图表形式展示,帮助用户发现自身专注度波动规律。
-
数据可视化:将时间统计和专注度分析结果以柱状图、折线图、饼图等形式呈现,更直观展示数据变化,便于用户快速获取关键信息。
-
主题切换:提供多种主题风格,如简约白、活力橙、护眼绿等,满足用户个性化审美需求。
-
声音设置:除了选择提醒音效,还可调节音量大小,适应不同使用场景。
3、功能实现
系统登录功能是程序必不可少的功能,在登录页面必填的数据有两项,一项就是账号,另一项数据就是密码,当管理员正确填写并提交这二者数据之后,管理员就可以进入系统后台功能操作区。下图就是管理员登录页面。
小程端部分页面展示
4、开发技术简介
本节介绍场馆预约平台用到的一些技术和开发环境的简介,用到开发技术主要包括:
(1)前端用到Element UI组件库和Vue框架
(2)后端用到Node
(3)包管理器Npm
(4)中间件Express
(5)数据库MySQL
系统开发环境主要是:前端开发工具Vscode,Hbuilder、操作系统Win10、CPU i5-9300H、内存8G。
5、系统物理架构
自习室系统的物理架构主要有:管理端和用户端,其中管理端主要是基于Vue和Element UI,用户端主要基于安卓
番茄时钟小程序的系统架构通常包括表现层、逻辑层和数据层,以下是各层的具体功能和相关技术说明:
5.1 表现层
- 用户界面设计:采用微信小程序、支付宝小程序等框架进行界面开发,运用HTML、CSS和JavaScript技术,为用户呈现简洁、美观、易用的交互界面,包括番茄钟设置、任务管理、数据统计等页面。
- 交互设计:运用触摸事件、动画效果等技术,实现如点击开始/暂停按钮、滑动选择时间等交互操作,提升用户体验。使用小程序提供的组件库和动画库,实现流畅的界面过渡和动态效果。
5.2 逻辑层
- 定时器逻辑:使用JavaScript的定时器函数
setTimeout
和setInterval
来实现番茄钟的倒计时和正计时功能,精确控制时间的流逝和更新界面显示。 - 任务管理逻辑:负责处理任务的创建、编辑、删除以及任务进度的跟踪。当用户创建任务时,对输入的任务信息进行合法性验证,如任务名称不能为空等。在番茄钟完成过程中,根据完成的番茄钟数量更新任务进度。
- 数据统计逻辑:对用户的使用数据进行统计和分析,如计算每日、每周、每月的专注时长,统计不同任务和分类下的时间分布,运用数据处理算法和统计方法,为用户生成详细的统计报表。
- 提醒逻辑:利用小程序的通知推送功能,在番茄钟结束、休息时间开始和结束等关键时间点,通过设置系统通知或声音提醒用户,支持用户自定义提醒方式和提醒时间间隔。
5.3 数据层
- 本地存储:采用小程序提供的本地存储API,如微信小程序的
wx.setStorage
和wx.getStorage
,将用户的设置信息、任务数据、统计数据等存储在本地,方便用户在离线状态下也能正常使用小程序,并快速加载已保存的数据。 - 云存储:选用云服务提供商(如腾讯云、阿里云等)的云数据库和云存储服务,将重要数据备份到云端,实现数据的跨设备同步和共享。使用云函数实现数据的上传、下载和更新操作,确保数据的安全性和可靠性。
5.4 网络层(可选)
- 网络请求:当小程序需要与外部服务器进行数据交互,如获取社区互动数据、更新版本信息时,使用小程序的网络请求API,如
wx.request
,发送HTTP请求到服务器,并处理服务器返回的响应数据。 - 数据传输安全:采用SSL/TLS等加密协议对网络传输的数据进行加密,防止数据在传输过程中被窃取或篡改,保障用户数据的安全。
6、库表设计
7、关键代码
<view class="container">
<view class="section-panel">
<text class="section_title">工作时长(分钟)</text>
<view class="section_body">
<slider
bindchange="changeWorkTime"
show-value="true"
min="1"
max="180"
value="{{workTime}}"
left-icon="cancel"
show-value activeColor="{{themColor}}"
right-icon="success_no_circle"/>
</view>
</view>
<view class="section-panel">
<text class="section_title">休息时长(分钟)</text>
<view class="section_body">
<slider
bindchange="changeRestTime"
show-value="true"
min="5"
max="30"
value="{{restTime}}"
left-icon="cancel"
show-value activeColor="{{themColor}}"
right-icon="success_no_circle"/>
</view>
</view>
<view class="section-panel">
<view class="section_title">
<text>主页背景</text>
</view>
<view class="section_body" bindtap="chooseImage">
<text class="section_tip">选择背景 > </text>
</view>
</view>
<view class="section-panel">
<view class="section_title">
<text>振动设置</text>
</view>
<view class="section_switch" >
<view></view>
<switch checked="{{isCheck}}" bindchange="changeSwitch"/>
</view>
</view>
<view class="section-panel">
<view class="section_title">
<text>选择白噪声</text>
</view>
<view class="section_body">
<picker bindchange="bindPickerChange" value="{{index}}" range="{{array}}">
<view class="picker">
当前选择:{{array[index]}}模式
</view>
</picker>
</view>
</view>
</view>
<template>
<div class="messge">
<div class="manage-hander"></div>
<!-- 表格 -->
<div class="common-table">
<el-table
:data="tableData"
stripe
height="90%"
border
style="width: 100%"
>
<el-table-column prop="id" label="ID" align="center"> </el-table-column>
<el-table-column prop="username" label="用户名" align="center">
</el-table-column>
<el-table-column prop="phone" label="手机号" align="center">
</el-table-column>
<el-table-column label="任务类型" prop="cate" align="center">
<template slot-scope="scope">
<span v-for="item in cateArr" :key="item.id">
<span v-if="scope.row.cate === item.id">
{{ item.text }}
</span>
</span>
</template>
</el-table-column>
<el-table-column prop="time" label="番茄时间" align="center">
</el-table-column>
<el-table-column prop="date" label="日期" align="center">
</el-table-column>
<el-table-column prop="addr" label="操作" align="center">
<template slot-scope="scope">
<!-- <el-button
type="primary "
size="mini"
@click="handleEdit(scope.row)"
>编辑</el-button
> -->
<el-button
type="danger"
size="mini"
@click="handleDelete(scope.row)"
>删除</el-button
>
</template>
</el-table-column>
</el-table>
<!-- 分页组件 -->
<el-pagination
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="pageNum"
:page-sizes="[6, 8, 9]"
:page-size="pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="total"
>
</el-pagination>
</div>
</div>
</template>
<script>
import commonUpload from "@/components/commonUpload.vue";
import { getrecord, deleteRecord } from "@/api/index";
// import { allAdmin } from "@/api/reservation";
export default {
name: "User",
data() {
return {
dialogVisible: false,
// 表单字段
form: {
name: "",
openTime: "",
address: "",
logo: "",
adminId: "",
desc: "",
},
total: 0,
pageSize: 9,
pageNum: 1,
cateArr: [
{
id: "0",
text: "工作",
},
{
id: "1",
text: "学习",
},
{
id: "2",
text: "写作",
},
{
id: "3",
text: "阅读",
},
{
id: "4",
text: "娱乐",
},
{
id: "5",
text: "自定义",
},
],
// 表单数据
tableData: [],
modelType: 0, //0表示是新增的弹窗 ,1表示的是编辑
userFrom: {
username: "",
},
};
},
components: {
commonUpload,
},
methods: {
// 提交
submit() {
if (this.modelType == 0) {
this.$refs.form.validate((value) => {
// 校验为真
if (value) {
console.log("value", this.form);
this.form.logo = this.$store.state.upload.imgUrl;
addPlace(this.form).then((res) => {
// console.log(res);
this.$message.success("添加成功");
});
this.$refs.form.resetFields();
this.dialogVisible = false;
this.getList();
}
});
} else {
this.$refs.form.validate((value) => {
// 校验为真
if (value) {
console.log("value", this.form);
updatePlace(this.form).then((res) => {
// console.log(res);
this.$message.success("修改成功");
});
this.$refs.form.resetFields();
this.dialogVisible = false;
this.getList();
}
});
}
},
// 关闭弹窗
handleClose() {
this.$refs.form.resetFields();
this.dialogVisible = false;
},
// 点击取消按钮
cancle() {
this.handleClose();
},
// 表单的编辑
handleEdit(res) {
this.modelType = 1;
this.dialogVisible = true;
// 注意到对当前的数据进行深度拷贝
this.form = JSON.parse(JSON.stringify(res));
},
//表单的删除
handleDelete(res) {
this.$confirm("此操作将永久删除该文件, 是否继续?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
})
.then(() => {
// 调用删除接口
var that = this;
deleteRecord({ id: res.id }).then((res) => {
that.$message({
type: "success",
message: res.data.data.msg,
});
});
this.getList();
})
.catch(() => {
this.$message({
type: "info",
message: "已取消删除",
});
});
},
// 新增数
handleAdd() {
(this.modelType = 0), (this.dialogVisible = true);
this.form = {};
},
getOpstions() {
allAdmin().then((res) => {
this.options = res.data.data.data;
});
},
//分页
handleSizeChange(pageSize) {
this.pageSize = pageSize;
this.getList();
},
handleCurrentChange(pageNum) {
this.pageNum = pageNum;
this.getList();
},
// 查询数据
handleSearch() {
searchUser(this.userFrom).then((res) => {
this.tableData = res.data.data;
// this.getList();
});
},
//分页
handlePage(val) {
console.log(val);
},
// 获取数据
getList() {
let data = {
pageNum: this.pageNum,
pageSize: this.pageSize,
};
// 采用封装的api接口方法
getrecord(data).then((res) => {
console.log(res);
this.total = res.data.data.total;
this.tableData = res.data.data.data;
});
},
},
// 挂载
mounted() {
this.getList();
this.getOpstions();
},
};
</script>
<style lang="less">
.messge {
height: 90%;
.common-table {
position: relative;
height: calc(100% - 62px);
.page {
position: absolute;
bottom: 0;
right: 20px;
}
}
.manage-hander {
display: flex;
justify-content: space-between;
align-items: center;
}
}
.el-table .cell {
img {
height: 50rpx;
}
}
</style>
相关选题
1.基于微信小程序的图书馆预约系统的设计与实现
2.基于微信小程序的实验室预约系统的设计与开发
3.基于微信小程序的番茄时钟的设计与实现(课设&毕设)
4.基于微信小程序的自习室预约系统的设计与实现
5.基于Uni-app的体育场馆预约系统的设计与实现
6.基于微信小程序的在线答题小程序设计与实现
7.基于微信小程序的医院预约挂号系统的设计与实现
8.基于微信小程序的博物馆预约系统的设计与实现
8、源码获取
大家点赞、收藏、关注、评论啦 、查看👇🏻获取联系方式👇🏻