Vue小练习:记录任务所花费时间

文章目录

    • 笔记
      • 遇到的问题(有解决方案的)
        • 如何使用按钮控制一个页面是否显示
        • vue怎么向后端发送请求
        • 如何添加新功能?
        • 如何接收前端发送的数据?
        • 如何把一个类对象存储到数据库
        • 如何实现自动注入
      • 未解决的问题
        • 无法将该差值表达式放到一个方法中
        • 如何使用JSON进行前后端数据传输
        • 如何使用MybatisPlus进行数据存储
    • 效果展示
    • 代码(QQ群有压缩包)
      • Vue
      • Spring

笔记

遇到的问题(有解决方案的)


前端的一些问题
#### 如何控制一个页面是否展示? v-if="一个逻辑值" 如果逻辑值为真,就展示,如果为假就不展示
如何使用按钮控制一个页面是否显示

有问题的思路:在点击按钮所调用的方法中修改逻辑值
存在的问题:在方法中改掉逻辑值,可能对页面的显示没影响
解决方案:

<!-- 1.isFocus是一个逻辑值,刚开始的时候是false,取反,刚好是true,span可以显示 -->
<span v-if="!isFocus"><input v-model="task" placeholder="Focus What?" ><br><div :class="startButton"><!-- 2.方法startFocus()返回一个逻辑值true,并赋值给isFocus。点击按钮之后,isFocus的值在template里改变,有效隐藏了span --><button @click="isFocus=startFocus()">Start Focus</button></div>
</span>

vue怎么向后端发送请求

使用axios
用之前记得先安装

function sendFocusInfo(){let url='http://localhost:8081/urfread/savefocusinfo?';let taskUrl='task='+task.value;let startTimeUrl='start='+startmillisecond;let endTimeUrl='end='+endmillisecond;axios.post(url+taskUrl+"&"+startTimeUrl+"&"+endTimeUrl).then(response => {console.log(response);}).catch(error => {console.error(error);});
}

后端的一些问题
如何添加新功能?

先写一个测试方法,想办法把测试方法跑过了,再去大改
and,先保存一份,别改坏了

如何接收前端发送的数据?
@RestController
//1.解决跨域问题,由协议、ip、端口不一样的来源发送的请求,会出现跨域问题,
//简单解决就是加CrossOrigin注解
@CrossOrigin
public class FocusInfoController {@AutowiredFocusInfoService focusInfoService;//2.给要匹配请求的方法添加RequestMapping注解,括号里写上请求路径@RequestMapping("/urfread/savefocusinfo")//3.获取请求的数据,使用@RequestParam注解,括号里写上参数的键public String saveFocusInfo(@RequestParam("task") String task,@RequestParam("start") long startMillisecond,@RequestParam("end") long endMillisecond) {focusInfoService.saveFocusInfo(task,startMillisecond,endMillisecond);return "ok";}
}
建议把spring服务的端口改成8081或者其他的,不然容易前后端服务端口一样,不让启动
server.port=8081

如何把一个类对象存储到数据库

0.编写要添加到数据库的对象的类文件:FocusInfo.java

package com.urfread.focusmore.pojo;import java.util.Date;public class FocusInfo {private int id;private String task;private Date startTime;private Date endTime;private long elapsedTime;@Overridepublic String toString() {return "FocusInfo{" +", task='" + task + '\'' +", startTime=" + startTime +", endTime=" + endTime +", elapsedTime=" + elapsedTime +'}';}public FocusInfo(){}public FocusInfo(int id, String task, Date startTime, Date endTime, long elapsedTime) {this.id = id;this.task = task;this.startTime = startTime;this.endTime = endTime;this.elapsedTime = elapsedTime;}public FocusInfo( String task, Date startTime, Date endTime, long elapsedTime) {this.task = task;this.startTime = startTime;this.endTime = endTime;this.elapsedTime = elapsedTime;}// Getter and Setter methods for each fieldpublic int getId() {return id;}public void setId(int id) {this.id = id;}public String getTask() {return task;}public void setTask(String task) {this.task = task;}public Date getStartTime() {return startTime;}public void setStartTime(Date startTime) {this.startTime = startTime;}public Date getEndTime() {return endTime;}public void setEndTime(Date endTime) {this.endTime = endTime;}public long getElapsedTime() {return elapsedTime;}public void setElapsedTime(long elapsedTime) {this.elapsedTime = elapsedTime;}
}

1.添加mybatis依赖

<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.33</version>
</dependency>
<!--mybatis-->
<dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.9</version>
</dependency>

2.创建配置文件:mybatis-config.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<!--configuration核心配置文件-->
<configuration><environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="com.mysql.cj.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/mine2024?useSSl=trur&amp;sueUnicode=true&amp;characterEncoding=UTF-8&amp;serverTimezone=Asia/Shanghai"/><property name="username" value="root"/><property name="password" value="123456"/></dataSource></environment></environments><mappers><mapper resource="FocusInfoMapper.xml"/></mappers>
</configuration>

3.编写配置文件:FocusInfoMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.urfread.focusmore.mapper.FocusInfoDao"><insert id="insert" parameterType="com.urfread.focusmore.pojo.FocusInfo">INSERT INTO task_info (id, task, start_time, end_time, elapsed_time)VALUES (#{id}, #{task}, #{startTime}, #{endTime}, #{elapsedTime})</insert>
</mapper>

mybatis文件可能会配错,如果有,请检查包名是否正确(全包名)

4.编写:MybatisUtils.java

package com.urfread.focusmore.mapper;import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;import java.io.IOException;
import java.io.InputStream;//sqlSessionFactory -->sqlSession
public class MybatisUtils {private static SqlSessionFactory sqlSessionFactory;//使用mybatis第一步,获取sqlSessionFactory对象static {try {String resource = "mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);} catch (IOException e) {e.printStackTrace();}}//既然有了sqlSessionFactory,顾名思义,我们就可以从中获得sqlSession的实例了//sqlSession 完全包含了面向数据库执行SQL命令所需的所有方法public static SqlSession getSqlSession(){return sqlSessionFactory.openSession();}}

5.编写:FocusInfoDao.java(

package com.urfread.focusmore.mapper;import com.urfread.focusmore.pojo.FocusInfo;public interface FocusInfoDao {int insert(FocusInfo focusInfo);}

6.编写:测试类 FocusInfoDaoTest.java

package com.urfread.focusmore;import com.urfread.focusmore.mapper.FocusInfoDao;
import com.urfread.focusmore.mapper.MybatisUtils;
import com.urfread.focusmore.pojo.FocusInfo;
import org.apache.ibatis.session.SqlSession;
import org.junit.jupiter.api.Test;import java.util.Calendar;
import java.util.Date;public class FocusInfoDaoTest {//第一步:获得sqlSession对象SqlSession sqlSession;@Testpublic void testInsert2() {FocusInfo focusInfo = new FocusInfo();focusInfo.setTask("杨青林");focusInfo.setStartTime(new Date());Date date=new Date();// 创建一个Calendar对象,并将Date对象设置到Calendar中Calendar calendar = Calendar.getInstance();calendar.setTime(date);// 将年份设置为2003年calendar.set(Calendar.YEAR, 2003);// 更新Date对象的时间date = calendar.getTime();focusInfo.setEndTime(date);focusInfo.setElapsedTime(1000L);sqlSession = MybatisUtils.getSqlSession();//方式一:getMapperFocusInfoDao mapper = sqlSession.getMapper(FocusInfoDao.class);int res=mapper.insert(focusInfo);System.out.println(res);// 提交事务sqlSession.commit();}
}
如何实现自动注入

@Component 添加给想要自动注入的类,添加在类声明上

@Component
public class FocusInfoDaoImpl {...}

@Autowired 添加在原来需要new对象的地方

@Autowired
FocusInfoService focusInfoService;

未解决的问题


前端
无法将该差值表达式放到一个方法中

{{Math.floor(elapsedTime / (1000*60))+“:”+Math.floor(elapsedTime / 1000)%60+“:”+elapsedTime%1000 }}

如果放到方法里,会出现不更新数据的情况
可能的解决方案:写一个随时间自动调用的函数,类似

timer.value = setInterval(() => elapsedTime.value = new Date() - startTime.value, 1);

如何使用JSON进行前后端数据传输
如何使用MybatisPlus进行数据存储

效果展示

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

代码(QQ群有压缩包)

有点多,不想粘了(抱一丝)
qq群370093641
有压缩包

Vue

<template><div><span v-if="!isFocus"><input v-model="task" placeholder="Focus What?" ><br><div :class="startButton"><button @click="isFocus=startFocus()">Start Focus</button></div></span><table v-else><tr><td>任务</td><td colspan="2">{{ task }}</td></tr><tr><td>开始时间</td><td colspan="2">{{ startTimeStr }}</td></tr><tr v-if="!isTiming"><td>结束时间</td><td colspan="2">{{ endTimeStr }}</td></tr><tr><td>已花费时间</td><td colspan="2">{{Math.floor(elapsedTime / (1000*60))+":"+Math.floor(elapsedTime / 1000)%60+":"+elapsedTime%1000 }}</td></tr><tr><td><button @click="isTiming=!endTiming()" :disabled="!isTiming">End Timing</button></td><td><button @click="sendFocusInfo" :disabled="isTiming">保存信息</button></td><td><button @click="isFocus=!oneMoreTime()" :disabled="isTiming">再来一次</button></td></tr></table></div></template>
<script setup>import {ref}from"vue";import axios from 'axios';let task=ref("")//记录 任务名let startTime=ref(null)//记录 开始时间let endTime=ref(null)//记录 结束时间let elapsedTime=ref(null)//记录 已耗费时间let startmillisecond;let endmillisecond;let startTimeStr=ref("")//用以 显示开始时间let endTimeStr=ref("")//用以 显示结束时间let elapsedTimeStr=ref("")//用以 显示已耗时间(有bug,计算公式放到函数里,就不计算了)let timer = ref(null);/*** timer 在这里用于存储一个定时器对象。* 在 startTiming() 函数中,通过 setInterval() 方法创建* 了一个定时器,每隔1毫秒执行一次回调函数。* 这个回调函数计算任务开始时间与当前时间的差值,* 并将差值转换为所耗时间(毫秒)。* 当调用 endTask() 函数时,* 使用 clearInterval() 方法清除定时器,停止计算所耗时间。*/let isFocus=ref(false)//表示 是否正在专注let isTiming=ref(false)//表示 是否开始计时/**处理 开始计时 相关任务* 记录 开始时间* 将页面状态调整为 开始计时*/function startFocus(){startTime.value=new Date();startmillisecond=new Date().getTime();startTimeStr.value=getTimeStr(startTime);timer.value = setInterval(() => elapsedTime.value = new Date() - startTime.value, 1);isTiming.value=true;return true;}/**处理 结束计时 相关任务* 记录 结束时间*/function endTiming(){endTime.value=new Date();endmillisecond=new Date().getTime();endTimeStr.value=getTimeStr(endTime);clearInterval(timer.value);//停止计时器return true;}/**将一个Date对象转换为一个字符串* time 要被转换的Date* 返回值为转换完成的字符串*/function getTimeStr(time){let temp = new Date(time.value);temp.setHours(temp.getHours() + 8);return temp.toISOString().substr(0, 10) + " " + temp.toISOString().substr(11, 8);}/**得到已耗时间的字符串* 计算公式放到函数里,会出问题* 使用插值表达式解决*/function getElapsedTimeStr(){// return elapsedTimeStr;}/**实现 再来一次 功能* 使各个变量恢复初始状态*/function oneMoreTime(){task.value=""return true;}/**向后端发送本次任务信息* */function sendFocusInfo(){let url='http://localhost:8081/urfread/savefocusinfo?';let taskUrl='task='+task.value;let startTimeUrl='start='+startmillisecond;let endTimeUrl='end='+endmillisecond;axios.post(url+taskUrl+"&"+startTimeUrl+"&"+endTimeUrl).then(response => {console.log(response);}).catch(error => {console.error(error);});}
</script>
<style>body {display: flex;justify-content: center;align-items: center;height: 100vh;margin: 0;}input {padding: 10px;border: 1px solid #ccc;border-radius: 4px;width: 200px;}button {padding: 10px 20px;background-color: #4CAF50;color: white;border: none;border-radius: 4px;cursor: pointer;text-align: center;width: 100%;}table {border-collapse: collapse;text-align: center;}td{border: 1px solid black;padding: 8px;}.startButton {justify-content: center;}
</style>

Spring

有点多,不想粘了(抱一丝)
qq群370093641
有压缩包

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/293950.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mojo与Python——wsl安装mojo

文章目录 前言一、wsl设置二、安装步骤三、mojo初体验四、vscode联合开发总结 前言 此课程为系列课程&#xff0c;借助python语言来学习python语言的超集mojo。可以持续关注。 一、wsl设置 powershell查看wsl的版本&#xff0c;如果版本是1需要修改为2。 二、安装步骤 1.安装m…

国产桌面操作系统统一身份认证及2FA双因子认证安全升级方案

某金融运营服务公司&#xff0c;主要负责业务处理、客户服务、业务监控、报表统计等金融运营服务&#xff0c;为集团下设二级单位&#xff0c;坐落于一线城市&#xff0c;对政策风向有很高的敏锐度。 该公司已为公司业务人员、客户服务、监督员等配备了数百台国产桌面操作系统…

从输入url到页面展示的过程

唠唠叨&#xff1a;我不想误人子弟&#xff0c;我这篇算是搬运工&#xff0c;加上自己的理解做点总结&#xff0c;所以还请大家科学上网去看这篇&#xff1a;https://aws.amazon.com/cn/blogs/mobile/what-happens-when-you-type-a-url-into-your-browser/ 是这六个步骤&#…

QuillEditor无法识别显示含有div和转义字符的问题

在解决前端根据爬取抓过来的数据时&#xff0c;要显示到富文本框中&#xff0c;如下&#xff1a; <div class\"info_cont\" id\"zoomcon\">\n <p><br></p><p style\";text-align: justify;font-family: Calibri;font-size…

【Unity每日一记】这些时间成员变量你是否清楚(Timescale,Time.deltaTime,Time.unscaledDeltaTime等)

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;uni…

银行软件测试:基于互联网金融平台的测试框架设计与分析

目前互联网金融火的一塌糊涂&#xff0c;基于互联网金融平台的自动化测试的项目也是如火如荼的进行。笔者手头上负责一个p2p项目的测试框架开发&#xff0c;因此如何设计一套有效的测试框架也成为工作所需和互相交流测试经验的必须。 这个网站的后台主要是php和java&#xff0…

C++之调用Python

1、配置头文件 Python安装目录下的include目录加入头文件目录。Visual Studio2022中操作路径是&#xff1a;属性–> C/C -> 常规-> 附加包含目录 C:\Users \AppData\Local\Programs\Python\Python39\include 2、配置lib库目录 要将Python39.lib加入编译链接。Visua…

深入理解 SQL 中的数据集合和数据关联

引言 在数据库管理系统中&#xff0c;数据集合和数据关联是 SQL 查询中常见的概念。它们是构建复杂查询和分析数据的基石。本文将深入探讨 SQL 中的数据集合和数据关联&#xff0c;包括它们的概念、常见用途以及实际示例。 首先引入一下数学中的集合 集合的基本概念&#x…

一文教会女朋友学会日常Git使用!Git知识总结

文章目录 一文教会女朋友学会日常Git使用&#xff01;Git知识总结一、git基本知识了解1.git简介2.git区域了解3.git常用命令 二、常用工作场景1.克隆远程仓库&#xff0c;把仓库代码拉到本地2.推送代码到远程仓库&#xff08;1&#xff09;本地代码和远程仓库版本相同&#xff…

【微服务】Sentinel(流量控制)

文章目录 1.基本介绍1.Sentinel是什么2.Sentinel主要特性3.Sentinel核心功能1.流量控制2.熔断降级3.消息削峰填谷 4.Sentinel两个组成部分 2.Sentinel控制台显示1.需求分析2.下载3.运行1.进入cmd2.输入java -jar sentinel-dashboard-1.8.0.jar3.查看默认端口8080 4.访问1.账号和…

数据结构(一)----前导知识

目录 一.数据相关 1.数据元素与数据项 2.数据对象和数据结构 3.数据结构的三要素 &#xff08;1&#xff09;逻辑结构 &#xff08;2&#xff09;数据运算 &#xff08;3&#xff09;物理结构&#xff08;存储结构&#xff09; 4.数据类型和抽象数据类型 二.算法 1.算…

[数据结构]排序

本篇主要是对常见排序的分类和一些排序的详解 一、插入排序 1.直接插入排序 // 直接插入排序函数 void insertionSort(int arr[], int n) {int i, key, j;for (i 1; i < n; i) {key arr[i]; // 取出待排序的元素j i - 1;// 将大于key的元素向后移动一位while (j > 0…

Windows Server 2022 使用ApacheDS用户远程桌面登录服务器

Windows Server 2022 使用ApacheDS用户远程桌面登录服务器 1、接上篇 Windows Server 2022 使用ApacheDS用户认证 使用Administrator用户远程登录192.168.1.100windows server&#xff0c;打开pGina软件 2、输入刚刚在ApacheDS中的新添加的用户测试一下&#xff0c;会自动添加…

设计模式之抽象工厂模式精讲

概念&#xff1a;为创建一组相关或相互依赖的对象提供一个接口&#xff0c;而且无须指定他们的具体类。 抽象工厂模式是工厂方法模式的升级版本。在存在多个业务品种或分类时&#xff0c;抽象工厂模式是一种更好的解决方式。 抽象工厂模式的UML类图如下&#xff1a; 可以看…

C++教学——从入门到精通 4.setw()语句

这次玩点新鲜的------setw() 这家虎是啥呢&#xff1f; 我们编程输出的时候总是要输出空格&#xff0c;但有些时候又点的手都麻了 这时setw语句就派上用场了 具体怎么用呢&#xff1f; 如下图 #include"iostream"// #include"iomanip"// bits/stdc…

OSCP靶场--RubyDome

OSCP靶场–RubyDome 考点(CVE-2022-25765 suid ruby提权) 1.nmap扫描 ┌──(root㉿kali)-[~/Desktop] └─# nmap -Pn -sC -sV 192.168.249.22 --min-rate 2500 Starting Nmap 7.92 ( https://nmap.org ) at 2024-03-29 00:28 EDT Nmap scan report for 192.168.249.22 Hos…

配置文件乱码

1、改UTF-8 &#xff08;1&#xff09;已经创建的项目 (2)新项目也改一下

YOLOv9改进策略 :主干优化 | 极简的神经网络VanillaBlock 实现涨点 |华为诺亚 VanillaNet

💡💡💡本文改进内容: VanillaNet,是一种设计优雅的神经网络架构, 通过避免高深度、shortcuts和自注意力等复杂操作,VanillaNet 简洁明了但功能强大。 💡💡💡引入VanillaBlock GFLOPs从原始的238.9降低至 165.0 ,保持轻量级的同时在多个数据集验证能够高效涨点…

北京WordPress建站公司

北京wordpress建站&#xff0c;就找北京wordpress建站公司 http://wordpress.zhanyes.com/beijing

java--this关键字

this代表当前对象&#xff0c;this后面可以加&#xff1a; 1、属性--> this.属性&#xff1a; 当方法中的局部变量与成员变量名称相同时&#xff0c;成员变量必须用this&#xff0c;其它情况的this可以省略 2、方法--this.方法&#xff1a;静态方法中不能使用this关键字&…