From 5137543a8b19e04b6be26b8dd4bd97b7d74263c1 Mon Sep 17 00:00:00 2001 From: wangdy55 Date: Sat, 20 May 2023 17:59:41 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E9=87=8D=E6=9E=84=E9=A1=B5=E9=9D=A2?= =?UTF-8?q?=E5=B8=83=E5=B1=80=E5=92=8C=E8=B7=AF=E7=94=B1=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package-lock.json | 11 + src/App.vue | 1 + src/assets/404.jpg | Bin 0 -> 301983 bytes src/assets/bg.jpg | Bin 0 -> 119018 bytes src/assets/css/reset.css | 48 + src/components/HelloWorld.vue | 130 - src/layout/BreadCrumb.vue | 12 + src/layout/Footer.vue | 17 + src/layout/Header.vue | 33 + src/layout/Menu.vue | 55 + src/layout/index.vue | 117 +- src/router/index.js | 155 +- src/utils/service.js | 31 + src/utils/token.js | 11 + src/utils/validate.js | 22 + src/views/AboutView.vue | 5 - src/views/HomeView.vue | 18 - src/views/NotFoundView.vue | 16 + src/views/ReportView.vue | 1 + .../{GpaView.vue => ReportViewGpaColumn.vue} | 0 .../CollectResultView.vue} | 1 + .../ImportListView.vue} | 3 +- .../OutputView.vue} | 1 + .../CompetitionEvalView.vue} | 39 +- src/views/{ => evals}/GpaEvalView.vue | 1 + .../PracticeEvalView.vue} | 1 + .../ResearchEvalView.vue} | 5 +- .../ServiceEvalView.vue} | 1 + .../SummaryEvalView.vue} | 1 + .../VolunteerEvalView.vue} | 1 + yarn.lock | 11890 ++++++++-------- 31 files changed, 6445 insertions(+), 6182 deletions(-) create mode 100644 src/assets/404.jpg create mode 100644 src/assets/bg.jpg create mode 100644 src/assets/css/reset.css delete mode 100644 src/components/HelloWorld.vue create mode 100644 src/layout/BreadCrumb.vue create mode 100644 src/layout/Footer.vue create mode 100644 src/layout/Header.vue create mode 100644 src/layout/Menu.vue create mode 100644 src/utils/service.js create mode 100644 src/utils/token.js create mode 100644 src/utils/validate.js delete mode 100644 src/views/AboutView.vue delete mode 100644 src/views/HomeView.vue create mode 100644 src/views/NotFoundView.vue rename src/views/{GpaView.vue => ReportViewGpaColumn.vue} (100%) rename src/views/{StudentManage.vue => admins/CollectResultView.vue} (99%) rename src/views/{ImportStuView.vue => admins/ImportListView.vue} (99%) rename src/views/{SummaryView.vue => admins/OutputView.vue} (98%) rename src/views/{competition_admin.vue => evals/CompetitionEvalView.vue} (91%) rename src/views/{ => evals}/GpaEvalView.vue (99%) rename src/views/{social_practice.vue => evals/PracticeEvalView.vue} (98%) rename src/views/{ScienceAdminView.vue => evals/ResearchEvalView.vue} (99%) rename src/views/{student_service.vue => evals/ServiceEvalView.vue} (99%) rename src/views/{PersonalSumView.vue => evals/SummaryEvalView.vue} (97%) rename src/views/{Volunteer_service.vue => evals/VolunteerEvalView.vue} (99%) diff --git a/package-lock.json b/package-lock.json index 99caccc..c940201 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,6 +10,7 @@ "dependencies": { "core-js": "^3.8.3", "element-ui": "^2.15.13", + "v-fit-columns": "^0.2.0", "vue": "^2.6.14", "vue-router": "^3.5.1" }, @@ -11536,6 +11537,11 @@ "uuid": "dist/bin/uuid" } }, + "node_modules/v-fit-columns": { + "version": "0.2.0", + "resolved": "https://registry.npmmirror.com/v-fit-columns/-/v-fit-columns-0.2.0.tgz", + "integrity": "sha512-xR0jIFmTyJeg4VZgEx7z8BIijZnHQegtbwAhG3L3TmyAoq/TXk7H6vzFLNxAVzOj9pSpO/0B2mf7jmuO2nE4Ag==" + }, "node_modules/v8-compile-cache": { "version": "2.3.0", "resolved": "https://registry.npmmirror.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", @@ -21728,6 +21734,11 @@ "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "dev": true }, + "v-fit-columns": { + "version": "0.2.0", + "resolved": "https://registry.npmmirror.com/v-fit-columns/-/v-fit-columns-0.2.0.tgz", + "integrity": "sha512-xR0jIFmTyJeg4VZgEx7z8BIijZnHQegtbwAhG3L3TmyAoq/TXk7H6vzFLNxAVzOj9pSpO/0B2mf7jmuO2nE4Ag==" + }, "v8-compile-cache": { "version": "2.3.0", "resolved": "https://registry.npmmirror.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", diff --git a/src/App.vue b/src/App.vue index 333c741..9226f08 100644 --- a/src/App.vue +++ b/src/App.vue @@ -5,6 +5,7 @@ diff --git a/src/layout/BreadCrumb.vue b/src/layout/BreadCrumb.vue new file mode 100644 index 0000000..f3e5b59 --- /dev/null +++ b/src/layout/BreadCrumb.vue @@ -0,0 +1,12 @@ + \ No newline at end of file diff --git a/src/layout/Footer.vue b/src/layout/Footer.vue new file mode 100644 index 0000000..cd7c135 --- /dev/null +++ b/src/layout/Footer.vue @@ -0,0 +1,17 @@ + + + + + \ No newline at end of file diff --git a/src/layout/Header.vue b/src/layout/Header.vue new file mode 100644 index 0000000..6821503 --- /dev/null +++ b/src/layout/Header.vue @@ -0,0 +1,33 @@ + + + + + \ No newline at end of file diff --git a/src/layout/Menu.vue b/src/layout/Menu.vue new file mode 100644 index 0000000..447c66c --- /dev/null +++ b/src/layout/Menu.vue @@ -0,0 +1,55 @@ + + + + + \ No newline at end of file diff --git a/src/layout/index.vue b/src/layout/index.vue index 60a7b97..5e16858 100644 --- a/src/layout/index.vue +++ b/src/layout/index.vue @@ -1,97 +1,40 @@ - +import Menu from '@/layout/Menu' +import Header from '@/layout/Header' +import Footer from '@/layout/Footer' +import BreadCrumb from '@/layout/BreadCrumb' - \ No newline at end of file diff --git a/src/router/index.js b/src/router/index.js index 5e70d10..5c1a0fa 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -1,115 +1,104 @@ -import Vue from "vue"; -import VueRouter from "vue-router"; -import Layout from '@/layout' +import Vue from "vue" +import Router from "vue-router" -Vue.use(VueRouter); +Vue.use(Router); const routes = [ { - path: '', - component: Layout, + path: '/', + redirect: '/student', + hidden: true + }, + { + path: '/student', + name: '学生页面', + component: () => import('@/layout'), + redirect: '/student/report', children: [ { - path: '/', - component: () => - import(/* webpackChunkName: "home" */ "@/views/HomeView.vue"), - name: 'home' - }, - { - path: "/about", - name: "about", - // route level code-splitting - // this generates a separate chunk (about.[hash].js) for this route - // which is lazy-loaded when the route is visited. - component: () => - import(/* webpackChunkName: "about" */ "@/views/AboutView.vue"), - }, - // yudingyi - { - path: "/science_admin", - name: "science_admin", - component: () => - import(/* webpackChunkName: "sciAdmin" */ "@/views/ScienceAdminView.vue"), - }, - { - path: "/student_manage", - name: "student_manage", - component: () => - import(/* webpackChunkName: "stuManage" */ "@/views/StudentManage.vue"), - }, - // wanglingyu + path: '/student/report', + name: '在线填报', + component: () => import('@/views/ReportView') + } + ] + }, + { + path: '/judge', + name: '评委页面', + component: () => import('@/layout'), + redirect: '/judge/gpa-eval', + children: [ { - path: "/gpa", - name: "gpa", - component: () => - import(/* webpackChunkName: "gpa" */ "@/views/GpaView.vue"), + path: '/judge/gpa-eval', + name: '学生成绩审核', + component: () => import('@/views/evals/GpaEvalView') }, { - path: "/gpa-eval", - name: "gpa-eval", - component: () => - import(/* webpackChunkName: "gpa-eval" */ "@/views/GpaEvalView.vue"), + path: '/judge/summary-eval', + name: '个人学年总结评审', + component: () => import('@/views/evals/SummaryEvalView') }, { - path: "/stu-import", - name: "stu-import", - component: () => - import(/* webpackChunkName: "stu-import" */ "@/views/ImportStuView.vue"), + path: '/judge/volunteer-eval', + name: '志愿服务评审', + component: () => import('@/views/evals/VolunteerEvalView') }, - // wuqile { - path: "/competition_admin", - name: "competition", - component: () => - import(/* webpackChunkName: "competition_admin" */ "@/views/competition_admin.vue"), + path: '/judge/research-eval', + name: '科研情况评审', + component: () => import('@/views/evals/ResearchEvalView') }, { - path: "/student_service", - name: "student_service", - component: () => - import(/* webpackChunkName: "student_service" */ "@/views/student_service.vue"), + path: '/judge/service-eval', + name: '学生服务岗位评审', + component: () => import('@/views/evals/ServiceEvalView') }, - // wangdy { - path: "/summary", - name: "summary", - component: () => - import(/* webpackChunkName: "summary" */ "@/views/SummaryView.vue"), + path: '/judge/competition-eval', + name: '竞赛得奖评审', + component: () => import('@/views/evals/CompetitionEvalView') }, { - path: "/personalSum", - name: "personalSum", - component: () => - import(/* webpackChunkName: "personalSum" */ "@/views/PersonalSumView.vue"), - }, - // mxh + path: '/judge/practice-eval', + name: '社会实践评审', + component: () => import('@/views/evals/PracticeEvalView') + } + ] + }, + { + path: '/admin', + name: '学工页面', + component: () => import('@/layout'), + redirect: '/admin/import', + children: [ { - path: "/social_practice", - name: "social_practice", - component: () => - import(/* webpackChunkName: "social_practice" */ "@/views/social_practice.vue"), + path: '/admin/import', + name: '导入学生名单', + component: () => import('@/views/admins/ImportListView') }, { - path: "/Volunteer_service", - name: "Volunteer_service", - component: () => - import(/* webpackChunkName: "Volunteer_service" */ "@/views/Volunteer_service.vue"), + path: '/admin/collect', + name: '成绩汇总', + component: () => import('@/views/admins/CollectResultView') }, - // 学生在线填报 { - path: "/report", - name: "report", - component: () => - import(/* webpackChunkName: "report" */ "@/views/ReportView.vue"), - }, + path: '/admin/output', + name: '成绩导出', + component: () => import('@/views/admins/OutputView') + } ] }, + { + path: '*', + name: '404', + component: res => require(['@/views/NotFoundView'], res), // 异步加载 + hidden: true + } ]; -const router = new VueRouter({ +const router = new Router({ mode: "history", - base: process.env.BASE_URL, - routes, + routes }); export default router; diff --git a/src/utils/service.js b/src/utils/service.js new file mode 100644 index 0000000..8b36ae6 --- /dev/null +++ b/src/utils/service.js @@ -0,0 +1,31 @@ +import axios from 'axios' +import { getToken } from '@/utils/token' +import { Message } from 'element-ui' + +const service = axios.create({ + baseURL: '/api', // baseURL 会自动加在每次请求的最前面,然后被 vue.config.js 解析 + timeout: 3000 +}) + +// 请求拦截器 +service.interceptors.request.use(config => { + // 发送请求的前置操作(如添加 token) + config.headers['token'] = getToken('token') + return config +}, error => { + return Promise.reject(error) +}) + +// 响应拦截器 +service.interceptors.response.use(res => { + // 收到响应的后置操作 + let { status, message } = res.data + if (status !== 200) { + Message({ message: message || 'error', type: 'warning' }) + } + return res +}, error => { + return Promise.reject(error) +}) + +export default service \ No newline at end of file diff --git a/src/utils/token.js b/src/utils/token.js new file mode 100644 index 0000000..16b5d52 --- /dev/null +++ b/src/utils/token.js @@ -0,0 +1,11 @@ +export function setToken(tokenKey, token) { + return localStorage.setItem(tokenKey, token); +} + +export function getToken(tokenKey) { + return localStorage.getItem(tokenKey); +} + +export function removeToken(tokenKey) { + return localStorage.removeItem(tokenKey); +} diff --git a/src/utils/validate.js b/src/utils/validate.js new file mode 100644 index 0000000..48e573b --- /dev/null +++ b/src/utils/validate.js @@ -0,0 +1,22 @@ +// 用户名匹配 +export function nameRule(rule, value, callback) { + let reg = /^[a-zA-Z0-9]{4,10}$/ + if (value === '') { + callback(new Error('请输入用户名')) + } else if (!reg.test(value)) { + callback(new Error('请输入4-10位用户名')) + } else { + callback() + } +} +// 密码正则匹配 +export function pwdRule(rule, value, callback) { + let reg = /^[^\s]{6,12}$/ + if (value === '') { + callback(new Error('请输入密码')) + } else if (!reg.test(value)) { + callback(new Error('请输入6-12位密码')) + } else { + callback() + } +} diff --git a/src/views/AboutView.vue b/src/views/AboutView.vue deleted file mode 100644 index 3fa2807..0000000 --- a/src/views/AboutView.vue +++ /dev/null @@ -1,5 +0,0 @@ - diff --git a/src/views/HomeView.vue b/src/views/HomeView.vue deleted file mode 100644 index 318e397..0000000 --- a/src/views/HomeView.vue +++ /dev/null @@ -1,18 +0,0 @@ - - - diff --git a/src/views/NotFoundView.vue b/src/views/NotFoundView.vue new file mode 100644 index 0000000..6c69013 --- /dev/null +++ b/src/views/NotFoundView.vue @@ -0,0 +1,16 @@ + + + + \ No newline at end of file diff --git a/src/views/ReportView.vue b/src/views/ReportView.vue index 4afc634..0f70bb1 100644 --- a/src/views/ReportView.vue +++ b/src/views/ReportView.vue @@ -1,3 +1,4 @@ +