当前位置:   article > 正文

基于Vue的校园服务平台的设计与实现(2023.6本科毕业设计)_校园论坛国内发展现状分析

校园论坛国内发展现状分析

1.选题的背景与意义

1.1 项目背景

        教学管理是智慧校园建设的重点之一,包括课程管理、教学评价、学生成绩管理、教学资源管理等方面。科研管理也是智慧校园建设的重要内容,包括科研项目管理、科研成果管理、科研资源管理等方面。

        智慧校园建设也需要依托现代化的信息技术手段,如云计算、大数据、物联网、人工智能等技术,实现校园信息资源的整合和共享,提高校园信息化应用水平。

        通过数字智慧校园的建设,可以提高高校管理水平和服务质量,为学生提供更加便捷的学习环境和服务,也能促进学术交流、科学研究和社会服务的发展。

1.2 国内外研究现状分析

        国内研究表明,校园服务平台的应用已经得到广泛推广和应用,越来越多的高校将其纳入校园信息化建设的范畴。校园服务平台的开发和应用可以有效地提高校园服务的效率和质量,为学生提供更加便利和优质的服务。此外,校园服务平台的开发和应用可以促进学生之间的互帮互助,增强校园凝聚力和社会责任感。

        国外的研究表明,校园服务平台的应用也得到了广泛关注和研究。在一些发达国家,校园服务平台的开发和应用已经非常成熟,成为高校信息化建设的重要组成部分。一些校园服务平台的开发和应用可以提高学生的生活和学习质量,增强学生的社交能力和创新能力。此外,校园服务平台的开发和应用可以促进学生的自我管理和自我发展,培养学生的创新精神和实践能力。

1.3 选题意义

        在过去,想要了解校园信息、等只能通过纸质的报纸或者杂志。但现在通过校园服务平台的开发,我们为广大学生和教职工提供更加高效、便捷的服务,让用户更方便地了解校园的信息和动态,提高学校的管理水平和教学质量。

        通过这个项目的开发和设计,我们可以巩固和提高自己的计算机知识和技能。完善的子服务系统也是提高平台使用率和用户满意度的重要保证。

        在未来的开发中,我们将进一步研究和完善服务系统,提高平台的稳定性和可靠性,以更好地服务广大用户,吸引更多的用户使用该平台,为校园网站的信息化建设贡献自己的力量。

2.关键技术介绍

  • HTML

是一种用来开发网页的计算机语言,它通过标签(标记式指令)将文本、音视频、图片、表格、按钮、输入框等内容显示出来。也就是说,HTML 是用来给网页内容进行排版和布局的。

  • CSS

是层叠样式表(Cascading Style Sheet )的简称。是一种标记语言,用于设置页面的外观样式。实现结构与样式分离,便于开发维护。

  • JavaScript

是世界上最流行的语言之一,是一种运行在客户端的脚本语言。不需要编译,运行过程中由 js 解释器( js 引擎)逐行来进行解释并执行。

  • Vue.js

是基于MVVM模式开发的三种主流前端框架之一,主要用于构建用户界面,可以显著提高开发人员的开发效率。

  • Element UI

是基于 Vue.js的后台组件库,便于开发者高效布局和建立网页。它不仅在页面视觉设计方面表现得很突出,还注重细节处理和交互感觉。

  • Vuex

是一个专为Vue.js应用程序开发的状态管理模式和库。它可以帮助我们管理应用程序中的所有组件的状态,并确保这些状态以一种可预测的方式发生变化。

3.系统分析与设计

广大师生通过登陆网站地址,了解校园信息、了解校园生活、使用发布任务帖、发表论坛帖子等功能使大家的校园生活更加便利。

3.1注册登录功能需求设计

注册模块,用户输入个人相关信息,个人信息中的账号、昵称、密码是必填项,如其中一个未填写就点击注册提交的话,会弹出提示“注册失败”。如注册成功后,数据将存储至Vuex中userList表,同时页面返回至登录页。登录模块,用户输入账号密码,点击登录提交信息,通过对比Vuex中userList表存储的数据判断查看是否存在该用户:如果存在则验证密码是否正确;如果不存在,则提示账号不存在,请先注册。如果信息匹配成功,则登录成功进入首页。

登录流程图
登录流程图
注册流程图
标注册流程图

3.2 任务信息功能需求设计

不同的用户登录平台后,在任务信息模块,可以查看到以列表的形式展现出来的任务信息。此外,点击右上角的“发布任务”按钮,填写需要发布的任务信息,输入想要发布的相关内容(标题、类型、内容、奖励)。其中任务标题,奖励,详细描述是必填项,如有一项未填则发布失败。发布时间是默认发布时系统的当前时间,所以用户不需要输入,填写完成后点击“发布”按钮,发布成功之后提示“发布成功”,并跳转至列表页。

任务信息功能图
任务信息功能图

3.3 校园论坛功能需求设计

不同的用户登录平台后,在校园论坛模块,可以查看到以列表的形式展现出来的论坛信息。此外,点击右上角的“发表帖子”按钮,填写需要发布的论坛信息,输入想要发布的相关内容,进行发布话题参与交流。发布时间是默认发布时系统的当前时间,所以用户不需要输入。填写完成后点击“发布”按钮,发布成功之后提示“发布成功”,并跳转至列表页。

校园论坛功能图

3.4 个人中心功能需求设计

用户登录后,若发布了任务,可以在“我的发布”这一栏查看我发布的任务和我发布的帖子。若收藏了任务或帖子,可以在“我的收藏”这一栏查看我收藏的任务和我收藏的帖子;若接受了任务,可以在“我发布的任务”这一栏查看我发布过的任务;若想查看或更改信息,可以在“个人信息”这一栏查看基本资料和修改密码。

个人中心功能图

3.5 后台管理功能需求设计

        管理员登录时,需要输入管理员相关信息(管理员账户、密码),其中管理员账户、密码是必填项,如其中一个未填写就点击登录的话,会弹出提示“登录失败”;因为管理员账户是唯一的,所以在提交后会检索Vuex中的formList 表,如果登录的管理员账号和密码不符合Vuex存储的管理员账号和密码,则提示登录失败。
        管理员可以通过后台管理窗口,用管理员的账号密码进行登录后,进入到校园服务平台的后台管理系统,进行用户管理,帖子管理,任务管理和资讯管理。对用户进行添加、编辑和搜索查看,对帖子搜索查看和删除,对任务列表搜索查看操作和删除操作,对资讯添加、编辑、删除和搜索查看。

后台管理功能图

4.系统实现与测试

4.1 用户注册展示

如果用户尚未注册账号,则跳转到注册页面,用户创建新的账号昵称和密码,验证两次密码是否一致,通过验证后,点击“立即注册”触发方法,将用户刚创建的账号密码传入到Vuex中的state中保存,即完成了注册,再次登录时Vuex中就有了记录。

  1. export default {
  2. data() {
  3. var validatePass = (rule, value, callback) => {
  4. if (value === "") {
  5. callback(new Error("请输入密码"));
  6. } else {
  7. if (this.registerForm.checkPass !== "") {
  8. this.$refs.registerForm.validateField("checkPass");
  9. }
  10. callback();
  11. }
  12. };
  13. var validatePass2 = (rule, value, callback) => {
  14. if (value === "") {
  15. callback(new Error("请再次输入密码"));
  16. } else if (value !== this.registerForm.password) {
  17. callback(new Error("两次输入密码不一致!"));
  18. } else {
  19. callback();
  20. }
  21. };
  22. return {
  23. registerForm: {
  24. username: "",
  25. studentID: "",
  26. phone: "",
  27. password: "",
  28. checkPass: "",
  29. role: "1",
  30. },
  31. rules: {
  32. username: [
  33. { required: true, message: "请填写用户名", trigger: "blur" },
  34. {
  35. min: 2,
  36. max: 14,
  37. message: "长度在 2 到 14 个字符",
  38. trigger: "blur",
  39. },
  40. ], //校验规则:必填、信息提示、失去焦点
  41. studentID: [{ required: true, message: "请输入学号", trigger: "blur" }],
  42. phone: [{ required: true, message: "请输入手机号", trigger: "blur" }],
  43. password: [
  44. { validator: validatePass, trigger: "blur" },
  45. { min: 6, message: "密码长度要大于6", trigger: "blur" },
  46. ],
  47. checkPass: [{ validator: validatePass2, trigger: "blur" }],
  48. },
  49. };
  50. },
  51. methods: {
  52. ...mapMutations(["SET_NEWUSERINFO"]),
  53. getCurrentTime() {
  54. //获取当前时间并打印
  55. var _this = this;
  56. let yy = new Date().getFullYear();
  57. let mm = new Date().getMonth() + 1;
  58. let dd = new Date().getDate();
  59. _this.gettime = yy + "/" + mm + "/" + dd;
  60. console.log(_this.gettime);
  61. this.registerForm.date = _this.gettime;
  62. },
  63. submitForm(formName) {
  64. this.$refs[formName].validate((valid) => {
  65. if (valid) {
  66. this.SET_NEWUSERINFO({
  67. username: this.registerForm.username,
  68. studentID: this.registerForm.studentID,
  69. phone: this.registerForm.phone,
  70. password: this.registerForm.password,
  71. role: this.registerForm.role,
  72. date: this.registerForm.date,
  73. });
  74. this.$message.success("注册成功");
  75. this.$router.push("/login"); //实现跳转到登录界面
  76. } else {
  77. console.log("提交失败!!");
  78. return false;
  79. }
  80. });
  81. },
  82. resetForm(formName) {
  83. this.$refs[formName].resetFields();
  84. },
  85. },
  86. };

4.2 用户登录展示

在router中的index.js中写路由配置,引入login.js文件,在login.js文件中的state中存储内置的账号密码。在登录页面时点击登录触发方法submitlogin( ),将用户输入的用户名和密码和Vuex中存储的用户名和密码做匹配。如果匹配成功则将用户名和密码存储到localStorage中并进入首页展示菜单栏等,如果匹配失败则返回错误提示。

  1. export default {
  2. name: "loginPage",
  3. data() {
  4. return {
  5. captchaUrl: "",
  6. loginForm: {
  7. username: "张三",
  8. studentID: "19310120431",
  9. phone: "13375962533",
  10. gender: "男",
  11. password: "123456",
  12. role: "1",
  13. },
  14. filter: false,
  15. filter2: false,
  16. rules: {
  17. username: [
  18. { required: true, message: "请输入用户名", trigger: "blur" },
  19. {
  20. min: 2,
  21. max: 14,
  22. message: "长度在 2 到 14 个字符",
  23. trigger: "blur",
  24. },
  25. ],
  26. phone: [{ required: true, message: "请输入手机号", trigger: "blur" }],
  27. studentID: [{ required: true, message: "请输入学号", trigger: "blur" }],
  28. password: [
  29. { required: true, message: "请输入密码", trigger: "blur" },
  30. { min: 6, message: "密码长度要大于6", trigger: "blur" },
  31. ],
  32. },
  33. radioVal: "1",
  34. };
  35. },
  36. computed: {
  37. ...mapGetters(["get_userList"]),
  38. ...mapState(["userList"]),
  39. },
  40. methods: {
  41. ...mapMutations(["SET_MENUSHOW"]),
  42. getRadioVal() {
  43. console.log(this.radioVal);
  44. },
  45. submitLogin() {
  46. this.$refs["loginForm"].validate((valid) => {
  47. if (valid) {
  48. // console.log(this.$store.state.login.userList);
  49. for (var i = 0; i < this.$store.state.login.userList.length; ++i) {
  50. if (
  51. this.$store.state.login.userList[i].username ==
  52. this.loginForm.username &&
  53. this.$store.state.login.userList[i].password ==
  54. this.loginForm.password &&
  55. this.$store.state.login.userList[i].role == this.radioVal
  56. ) {
  57. this.filter = true;
  58. break;
  59. }
  60. }
  61. if (this.filter == true) {
  62. this.loginForm.role = this.$store.state.login.userList[i].role;
  63. window.localStorage.setItem(
  64. "userInfo",
  65. JSON.stringify(this.loginForm)
  66. );
  67. // window.localStorage.setItem("taskInfo", JSON.stringify([]));
  68. // window.localStorage.setItem("acceptInfo", JSON.stringify([]));
  69. // window.localStorage.setItem("collectInfo", JSON.stringify([]));
  70. // window.localStorage.setItem("forumInfo", JSON.stringify([]));
  71. this.$message.success("登录成功");
  72. this.SET_MENUSHOW(true);
  73. this.$router.push("/homePage");
  74. } else {
  75. this.$message.error("该用户不存在或密码错误!");
  76. this.loginForm = {
  77. username: "",
  78. password: "",
  79. };
  80. }
  81. } else {
  82. this.$message.error("登录出错请重新输入");
  83. return false;
  84. }
  85. });
  86. },
  87. },
  88. };

4.3 首页效果展示

轮播图效果:
        使用elementUI配合Vue实现轮播图效果且图片自适应,监听屏幕视口大小,如果’resize’发生改变了,就获取图片的高度height,然后渲染到页面上。方法解析:窗口第一次打开的时候加载执行 imgLoad( )方法,第一次加载时获取图片在窗口中的高度,然后渲染到页面中去。接着通过addEventListenner( )方法监听视口是否发生改变,如果发生改变,重新调用imgLoad( )方法渲染数据到页面,这样图片高度就可以随视口改变发生改变,适应各种大小屏幕。
        其他部分用到router-link标签实现新闻快捷页跳转,或CSS设置样式。

4.4 实现任务信息

头部使用el-form表单嵌入一个select选择器,使用filter方法将存储在localStorage中的taskInfo根据选择的任务状态筛选出来并渲染在taskList表上,以此实现任务状态的筛选;发布任务时,点击弹出dialog对话框,填写任务标题和内容,发布时用push方法存储在localStorage中的taskInfo里;下方的任务列表使用v-for循环遍历对象数组taskList,并读取刚刚存储的任务,渲染在任务列表上;同时,发布任务时获取当前时间作为发布时间。

  1. export default {
  2. components: {},
  3. props: {},
  4. data() {
  5. return {
  6. addTask: {
  7. name: "",
  8. reward: "",
  9. tasktime: "",
  10. status: "待解决",
  11. collect: 0,
  12. },
  13. // addVisible: false,
  14. saveLoading: false,
  15. rules: {
  16. name: [
  17. {
  18. required: true,
  19. message: "请输入任务标题",
  20. trigger: "blur",
  21. transform: (value) => value && value.trim(), //不可以写空格
  22. },
  23. {
  24. min: 1,
  25. max: 20,
  26. message: "长度在 1 到 10 个字符",
  27. trigger: "blur",
  28. },
  29. ],
  30. reward: [
  31. {
  32. required: true,
  33. message: "请填写奖励金额(只能填写正整数)",
  34. trigger: "blur",
  35. transform: (value) => value && value.trim(), //不可以写空格
  36. pattern: /^[0-9|^\\.]/, //正整数
  37. },
  38. ],
  39. content: [
  40. {
  41. required: true,
  42. message: "请输入任务内容",
  43. trigger: "blur",
  44. transform: (value) => value && value.trim(), //不可以写空格
  45. },
  46. ],
  47. },
  48. };
  49. },
  50. methods: {
  51. ...mapActions([""]),
  52. ...mapMutations(["SET_TASK", "OPEN_ADDTASKVISIBLE"]),
  53. getCurrentTime() {
  54. //获取当前时间并打印
  55. var _this = this;
  56. let yy = new Date().getFullYear();
  57. let mm = new Date().getMonth() + 1;
  58. let dd = new Date().getDate();
  59. let hh = new Date().getHours();
  60. let mf =
  61. new Date().getMinutes() < 10
  62. ? "0" + new Date().getMinutes()
  63. : new Date().getMinutes();
  64. let ss =
  65. new Date().getSeconds() < 10
  66. ? "0" + new Date().getSeconds()
  67. : new Date().getSeconds();
  68. _this.gettime = yy + "/" + mm + "/" + dd + " " + hh + ":" + mf + ":" + ss;
  69. console.log(_this.gettime);
  70. this.addTask.tasktime = _this.gettime;
  71. },
  72. //取消按钮
  73. cancel() {
  74. // this.saveLoading = false; //加载关闭
  75. this.OPEN_ADDTASKVISIBLE(false);
  76. this.$refs["ruleForm"].clearValidate(); //清空所有的验证规则,不清空表单信息
  77. this.addTask = {
  78. name: "",
  79. reward: "",
  80. tasktime: "",
  81. status: "待解决",
  82. };
  83. },
  84. //关闭按钮
  85. handleClose() {
  86. this.$confirm("确认关闭?")
  87. // eslint-disable-next-line
  88. .then((_) => {
  89. // this.saveLoading = false;
  90. this.OPEN_ADDTASKVISIBLE(false);
  91. this.$refs["ruleForm"].resetFields(); //清空所有的验证规则,包括表单信息
  92. })
  93. // eslint-disable-next-line
  94. .catch((_) => {});
  95. },
  96. // 提交按钮
  97. onSubmit(formName) {
  98. this.$refs[formName].validate((valid) => {
  99. if (valid) {
  100. // this.SET_TASK(this.addTask);
  101. this.addTask.user = JSON.parse(
  102. window.localStorage.getItem("userInfo")
  103. ).username;
  104. // console.log(this.addTask, "+++");
  105. let list = JSON.parse(window.localStorage.getItem("taskInfo"));
  106. list.push(this.addTask);
  107. // console.log(list, "list");
  108. window.localStorage.setItem("taskInfo", JSON.stringify(list));
  109. this.OPEN_ADDTASKVISIBLE(false);
  110. this.$message({
  111. message: "发布成功",
  112. type: "success",
  113. });
  114. this.addTask = {
  115. name: "",
  116. reward: "",
  117. tasktime: "",
  118. status: "待解决",
  119. };
  120. location.reload();
  121. } else {
  122. console.log("error submit!!");
  123. return false;
  124. }
  125. });
  126. },
  127. },
  128. computed: {
  129. ...mapGetters(["get_addDialogVisible", "get_published"]),
  130. },
  131. };

 4.5 实现个人中心-‘我的发布’

        将任务列表页内我发布的新任务同步到‘个人中心’—‘我的发布’页,通过用taskList获取存储在localStorage中的任务,通过筛选对比发布者信息和登录者信息是否相同来展示本人发布的任务即可;通过设置v-if当任务状为“待解决”时,可点击“取消该任务”,当任务状态为“已完成”时,可“删除该任务”和“查看接受者信息”。

  1. //取消该任务
  2. cancelTask(item, index) {
  3. this.$confirm("是否取消该任务", "提示", {
  4. confirmButtonText: "是",
  5. cancelButtonText: "否",
  6. type: "warning",
  7. center: true,
  8. })
  9. .then(() => {
  10. // this.taskList.splice(index, 1);
  11. let list = JSON.parse(window.localStorage.getItem("taskInfo"));
  12. if ((this.taskList.user = this.user)) {
  13. for (var k = 0; k < list.length; ++k) {
  14. if (list[k].name == item.name) {
  15. list.splice(index, 1);
  16. }
  17. }
  18. }
  19. //删除该任务
  20. deleteTask(item) {
  21. this.$confirm("是否删除该任务", "提示", {
  22. confirmButtonText: "是",
  23. cancelButtonText: "否",
  24. type: "warning",
  25. center: true,
  26. })
  27. .then(() => {
  28. console.log(item);
  29. // 删除任务信息页
  30. let list3 = JSON.parse(window.localStorage.getItem("taskInfo"));
  31. for (var k = 0; k < list3.length; ++k) {
  32. if (list3[k].name == item.row.name) {
  33. list3.splice(k, 1);
  34. }
  35. }
  36. window.localStorage.setItem("taskInfo", JSON.stringify(list3));
  37. this.taskList = list3;
  38. this.$message({
  39. type: "success",
  40. message: "删除成功",
  41. });
  42. })
  43. .catch(() => {
  44. this.$message({
  45. type: "info",
  46. message: "已取消",
  47. });
  48. });
  49. },

4.6 实现个人中心-‘我的接受’

        在“任务信息”页面选择自己像接受的任务,点击后更改该任务的任务状态为“解决中”,更新localStorage里的taskInfo和collectInfo,渲染“任务信息”页面或“我接受的任务”页面任务状态,并将该任务push到新的acceptInfo存储在localStorage,在‘个人中心’—‘我接受的任务’页面,通过acceptList获取存储在collectInfo的数组对象,并使用v-for循环展示我接受的任务;当任务完成时更改该任务的任务状态为“已完成”,更新localStorage里的taskInfo和collectInfo,渲染“任务信息”页面或“我接受的任务”页面任务状态。

  1. // 是否完成该任务
  2. finish(item) {
  3. this.$confirm("是否已完成该任务", "提示", {
  4. confirmButtonText: "是",
  5. cancelButtonText: "否",
  6. type: "warning",
  7. center: true,
  8. })
  9. .then(() => {
  10. console.log(item, "item+++++");
  11. item.status = "已完成";
  12. let list = JSON.parse(window.localStorage.getItem("taskInfo"));
  13. for (var i = 0; i < list.length; ++i) {
  14. if (list[i].name == item.name) {
  15. list[i] = item;
  16. console.log(111111111);
  17. }
  18. }
  19. console.log(list, "list++++");
  20. window.localStorage.setItem("taskInfo", JSON.stringify(list));
  21. window.localStorage.setItem(
  22. "acceptInfo",
  23. JSON.stringify(this.acceptList)
  24. );
  25. this.$message({
  26. type: "success",
  27. message: "已完成该任务!",
  28. });
  29. })
  30. .catch(() => {
  31. this.$message({
  32. type: "info",
  33. message: "已取消",
  34. });
  35. });
  36. },

4.7 实现个人中心-‘我的收藏’

        收藏:在“任务信息”页面或“我接受的任务”页面可选择收藏自己感兴趣的任务,当收藏该任务时,将该任务收藏状态置为1,更新localStorage里的taskInfo和collectInfo,渲染“任务信息”页面或“我接受的任务”中icon图标变为黄色,即“收藏”状态;将新收藏的帖子push到新的collectInfo存储在localStorage,在‘个人中心’—‘我的收藏’页,通过collectList获取存储在collectInfo的数组对象,并使用v-for循环展示收藏的任务;
        取消收藏:在“我的收藏”页面选择取消收藏某个任务,当取消收藏该任务时,将该任务收藏状态置为0,更新localStorage里的taskInfo和collectInfo,渲染“任务信息”页面或“我接受的任务”中icon图标变为灰色,即“未收藏”状态;将取消收藏的任务从collectInfo中删除,通过collectList获取存储在collectInfo的数组对象,此时“我的收藏”页面已经没有了刚刚收藏的任务了。

  1. // 收藏
  2. gostore(item) {
  3. if (item.collect == 0) {
  4. // 我的接受页的对应收藏
  5. item.collect = 1;
  6. window.localStorage.setItem("taskInfo", JSON.stringify(this.taskList));
  7. window.localStorage.setItem(
  8. "acceptInfo",
  9. JSON.stringify(this.acceptList)
  10. );
  11. this.$message({
  12. type: "success",
  13. message: "已收藏",
  14. });
  15. // 我的收藏页添加对应收藏
  16. let list = [];
  17. list = JSON.parse(window.localStorage.getItem("collectInfo"));
  18. list.push(item);
  19. console.log(list);
  20. window.localStorage.setItem("collectInfo", JSON.stringify(list));
  21. // location.reload();
  22. //任务列表页的对应收藏
  23. let list2 = [];
  24. list2 = JSON.parse(window.localStorage.getItem("taskInfo"));
  25. for (var i = 0; i < list2.length; ++i) {
  26. if (list2[i].name == item.name) {
  27. list2[i].collect = 1;
  28. }
  29. }
  30. window.localStorage.setItem("taskInfo", JSON.stringify(list2));
  31. // 渲染
  32. this.collectList = JSON.parse(
  33. window.localStorage.getItem("collectInfo")
  34. );
  35. this.tasktList = JSON.parse(window.localStorage.getItem("taskInfo"));
  36. this.acceptList = JSON.parse(window.localStorage.getItem("acceptInfo"));
  37. }
  38. },
  39. //取消收藏
  40. nogostore(item) {
  41. if (item.collect == 1) {
  42. // 我的接受页对应取消收藏
  43. item.collect = 0;
  44. window.localStorage.setItem(
  45. "acceptInfo",
  46. JSON.stringify(this.acceptList)
  47. );
  48. this.$message({
  49. type: "info",
  50. message: "取消收藏",
  51. });
  52. // 我的收藏页
  53. let list = JSON.parse(window.localStorage.getItem("collectInfo"));
  54. for (var i = 0; i < list.length; ++i) {
  55. if (list[i].name == item.name) {
  56. list.splice(i, 1);
  57. }
  58. }
  59. window.localStorage.setItem("collectInfo", JSON.stringify(list));
  60. // 任务列表页
  61. let list2 = [];
  62. list2 = JSON.parse(window.localStorage.getItem("taskInfo"));
  63. for (var j = 0; j < list2.length; ++j) {
  64. if (list2[j].name == item.name) {
  65. list2[j].collect = 0;
  66. }
  67. }
  68. window.localStorage.setItem("taskInfo", JSON.stringify(list2));
  69. //我的接受页
  70. let list3 = [];
  71. list3 = JSON.parse(window.localStorage.getItem("acceptInfo"));
  72. for (var k = 0; k < list3.length; ++k) {
  73. if (list3[k].name == item.name) {
  74. list3[k].collect = 0;
  75. }
  76. }
  77. window.localStorage.setItem("acceptInfo", JSON.stringify(list3)); // 渲染
  78. this.collectList = JSON.parse(
  79. window.localStorage.getItem("collectInfo")
  80. );
  81. this.tasktList = JSON.parse(window.localStorage.getItem("taskInfo"));
  82. this.acceptList = JSON.parse(window.localStorage.getItem("acceptInfo")); // location.reload();
  83. }
  84. },

4.8 实现个人中心-'个人信息'

使用两个div盒子展示基本信息和修改密码,点击弹出dialog对话框,用于详情展示,可编辑个人基本信息;修改密码时,如果输入的旧密码和存储在usersInfo中的原密码相同,则把新密码存储在userInfo中。

  1. // 修改个人信息提交按钮
  2. onSubmit() {
  3. this.$refs["infoData"].validate((valid) => {
  4. if (valid) {
  5. this.OPEN_BASICINFOVISIBLE(false);
  6. window.localStorage.setItem(
  7. "userInfo",
  8. JSON.stringify(this.infoData)
  9. );
  10. this.$message({
  11. message: "修改个人信息成功",
  12. type: "success",
  13. });
  14. // location.reload();
  15. } else {
  16. console.log("error submit!!");
  17. return false;
  18. }
  19. });
  20. },
  1. // 修改密码提交按钮
  2. onSubmit() {
  3. this.$refs["passwordData"].validate((valid) => {
  4. if (valid) {
  5. if (this.passwordData.oldPass == this.infoData.password) {
  6. this.infoData.password = this.passwordData.newPass;
  7. window.localStorage.setItem(
  8. "userInfo",
  9. JSON.stringify(this.infoData)
  10. );
  11. console.log(this.infoData);
  12. this.OPEN_CHANGEPASSWORDVISIBLE(false);
  13. this.$message({
  14. message: "修改成功",
  15. type: "success",
  16. });
  17. this.$refs.passwordData.resetFields();
  18. this.$refs.passwordData.clearValidate();
  19. } else {
  20. this.$message.error("旧密码错误!请重新输入");
  21. this.passwordData = {
  22. oldPass: "",
  23. newPass: "",
  24. checkPass: "",
  25. };
  26. }
  27. // location.reload();
  28. } else {
  29. console.log("error submit!!");
  30. return false;
  31. }
  32. });
  33. },

4.9测试用例

测试模块输入处理输出测试结果
注册

点击注册,填写信息,包括账号、昵称、手机号、密码

将填写的信息存入LocalStorage

注册成功,返回登录页

通过
登录

填写信息,包括账号、昵称、手机号、密码

将填写的信息和LocalStorage中存储的信息做比对

从LocalStorage获取任务信息,如果账号密码相同,则登录成功

通过
发布任务

点击“发布任务”,填写信息,包括任务标题,奖励,任务内容

获取当时时间,并将发布的任务信息存储至LocalStorage

发布成功,从LocalStorage获取任务信息,并在任务列表页更改状态为“待解决”,在我的发布页成功渲染

通过
收藏任务

点击某一条任务旁的星星

获取此任务信息的数组对象,并存入localStorage

收藏成功,从LocalStorage获取任务信息,并在任务列表页和我的收藏页成功渲染

通过
接受任务

点击某一条任务下是否接受该任务,点击确定

获取此任务信息的数组对象,并存入localStorage

接受成功,从LocalStorage获取任务信息,并在任务列表页更改状态为“解决中”和我的接受页成功渲染

通过
完成任务

在我接受的列表页点击完成任务

将localStorage中的数组对象字段状态信息更改

完成任务,在任务列表页更改状态为“已完成”,在我的接受页成功渲染

通过

5.论文总结与致谢

5.1 开发工作总结

        在前端开发方面,我使用了Vue CLI来创建项目,并且使用了Vuex来管理应用程序的状态。此外,我还使用了Vue Router进行页面路由管理。为了提高开发效率,我使用了Element UI组件库,并且实现了可重用的Vue组件。

        在“校园服务平台”软件项目的设计开发中,我严格遵照软件工程的要求进行了整个系统的设计与实现,包括系统分析、系统设计和系统实现等步骤。最终,该系统通过了系统测试。该软件项目具备多种功能,例如“查看校园资讯”、“发布任务”、“接受任务”、“收藏任务”和“发表帖子”等等,实现了平台互助,具有友好的界面和易于上手的特点。

        此外,平台角色分为用户和管理员两个角色,用户可以注册,而管理员目前只有一个,后续还可以新增管理员。不同的角色登录后,系统会展示不同的菜单。当管理员登录时,系统会展示后台管理菜单,以便对用户、任务帖子和校园资讯等进行管理操作。

5.2后续工作展望 

        我计划在未来进一步提升“校园服务平台”的用户体验。具体来说,我将增加动画效果、优化响应时间以及提供更好的错误提示。同时,我还计划增加更多的功能和模块,例如在线预约服务、活动发布和交流、学生社团管理等等。另外,我希望进一步提高系统的性能,增加后端和数据库,减少API请求响应时间、减小数据传输大小以及优化前端性能等等。

        目前,“校园服务平台”存在一些限制,例如用户查看自己的信息时,无法上传头像等。此外,“校园服务平台”的任务信息模块还有待丰富,例如任务列表支持任务分类,用户可根据需求选择分类查看任务,更加方便快捷。同时,“校园服务平台”的校园论坛模块还需完善,包括收藏帖子功能和发表评论功能等等。

        综上所述,“校园服务平台”仍有很大提升的空间,我将利用空余时间不断完善它。总的来说,我认为这个基于Vue的校园服务平台是一个充满前景的项目,我愿意继续为它的发展做出贡献。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/155593
推荐阅读
相关标签
  

闽ICP备14008679号