Просмотр исходного кода

refactor:Refactoring routes and component locations

茫茫燃 4 лет назад
Родитель
Сommit
7c0b86fa84

+ 2 - 0
src/global/register-element.js

@@ -15,6 +15,7 @@ import {
   ElDialog,
   ElDatePicker,
   ElUpload,
+  ElDivider,
 } from "element-plus";
 
 // NOTE 使用到的组件列表,请确保 import 和 component 的一致性
@@ -35,6 +36,7 @@ const components = [
   ElDialog,
   ElDatePicker,
   ElUpload,
+  ElDivider,
 ];
 
 export default function (app) {

+ 6 - 2
src/router/index.js

@@ -1,9 +1,7 @@
 import { createRouter, createWebHistory } from "vue-router";
 import PortalPage from "@/views/PortalPage/PortalPage";
-import manager from "@/router/manager";
 
 const routes = [
-  ...manager,
   {
     path: "/",
     redirect: "/portal",
@@ -44,6 +42,12 @@ const routes = [
     name: "Course",
     component: () => import("../views/CoursePage/CoursePage.vue"),
   },
+  {
+    path: "/course/:id",
+    name: "CourseDetail",
+    component: () => import("../views/CoursePage/CourseDetail.vue"),
+  },
+
   {
     path: "/test",
     name: "Test",

+ 0 - 13
src/router/manager.js

@@ -1,13 +0,0 @@
-export default [
-  {
-    path: "/managerHome",
-    name: "ManagerHome",
-    component: () => import("../views/ManagePage/ManagerHome/ManagerHome"),
-  },
-  {
-    path: "/managerCourseDetail",
-    name: "ManagerCourseDetail",
-    component: () =>
-      import("../views/ManagePage/ManagerCourseDetail/ManagerCourseDetail"),
-  },
-];

+ 39 - 0
src/views/CoursePage/CourseDetail.vue

@@ -0,0 +1,39 @@
+<template>
+  <div class="course-detail-page">
+    <GlobalHeader/>
+    <div class="course-detail-container">
+      <div class="header">
+        <div class="course-img">
+          <img alt="" src="https://p.seec.seecoder.cn/image/java.png">
+        </div>
+        <div class="course-info">
+          <div>课程名:软件工程与计算</div>
+          <div>教师:Kenny67</div>
+          <div>开课时间:2021.9.3</div>
+          <el-button type="primary">查看详情</el-button>
+        </div>
+      </div>
+      <el-divider></el-divider>
+      <div class="introduce">
+        <span class="title">简介</span>
+        <br/>
+        <div class="introduce-content">
+          JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。
+          引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语言使用Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。
+        </div>
+      </div>
+      <el-divider></el-divider>
+
+    </div>
+
+
+  </div>
+</template>
+
+<script setup>
+import GlobalHeader from "../../../src/components/GlobalHeader";
+</script>
+
+<style scoped>
+@import "style/CourseDetail.css";
+</style>

+ 77 - 0
src/views/CoursePage/style/CourseDetail.css

@@ -0,0 +1,77 @@
+.course-detail-page {
+    min-height: 100vh;
+    display: flex;
+    flex-direction: column;
+    align-items: center;
+}
+
+.course-detail-container {
+    box-sizing: border-box;
+    width: 1200px;
+    min-width: 1200px;
+    margin-top: 32px;
+}
+
+
+.flex-center {
+    display: flex;
+    justify-content: center;
+    align-items: center;
+}
+
+.flex-around {
+    display: flex;
+    align-items: center;
+    justify-content: space-around;
+}
+
+.flex-between {
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
+}
+
+.header {
+    display: flex;
+    justify-content: flex-start;
+    align-items: center;
+}
+
+.course-img {
+    width: 400px;
+    object-fit: contain;
+}
+
+.course-img > img {
+    width: 100%;
+    height: 100%;
+}
+
+.course-info {
+    font-size: 22px;
+    color: #333333;
+    margin-left: 32px;
+}
+
+.course-info > div {
+    margin-bottom: 24px;
+}
+
+.course-info .el-button {
+    width: 220px;
+    border-radius: 32px;
+    font-size: 18px;
+}
+
+.introduce-content {
+    margin-top: 24px;
+    font-size: 18px;
+    line-height: 26px;
+    color: #333333;
+}
+
+.title {
+    color: #333333;
+    font-weight: 500;
+    font-size: 24px;
+}

+ 171 - 9
src/views/ManagePage/ManagePage.vue

@@ -1,17 +1,179 @@
 <template>
-  <GlobalHeader/>
-  <p style="text-align: center; font-weight: bolder; font-size: xxx-large">教师/HR页</p>
-  <img alt="err" src="@/assets/managePage.png" style="width: 100%">
+  <div class="page">
+    <GlobalHeader/>
+    <div class="container">
+      <div class="header">
+        <span class="title">课程列表</span>
+        <div>
+          <el-select v-model="value" class="m-2" placeholder="Select">
+            <el-option
+                v-for="item in options"
+                :key="item.value"
+                :label="item.label"
+                :value="item.value"
+            >
+            </el-option>
+          </el-select>
+          <el-button plain type="primary ml-16" @click="dialogVisible=true">新增课程</el-button>
+        </div>
+      </div>
+      <div class="courseList">
+        <div v-for="(index) in 8" :key="index" class="cItem">
+          <CourseItem></CourseItem>
+        </div>
+      </div>
+    </div>
+    <div class="pagination">
+      <el-pagination :total="1000" background layout="prev, pager, next">
+      </el-pagination>
+    </div>
+  </div>
+  <el-dialog
+      v-model="dialogVisible"
+      title="新增课程"
+      width="50%"
+  >
+    <div class="createCourseCard">
+      <div class="newCourseInfo">
+        <div class="mb-16 flex-around">
+          <span>课程名称</span>
+          <el-input v-model="courseInfo.name" placeholder="课程名称"/>
+        </div>
+        <div class="mb-16 flex-around">
+          <span>任课教师</span>
+          <el-input v-model="courseInfo.teacher" placeholder="任课教师"/>
+        </div>
+        <div class="mb-16 flex-around">
+          <span>所属学期</span>
+          <el-input v-model="courseInfo.semester" placeholder="所属学期"/>
+        </div>
+        <div class="mb-16 flex-around">
+          <span>开课时间</span>
+          <el-date-picker v-model="courseInfo.startTime" placeholder="Pick a day" type="date">
+          </el-date-picker>
+        </div>
+        <div class="mb-16 flex-around">
+          <span>邀请码&emsp;</span>
+          <el-input v-model="courseInfo.code" placeholder="邀请码"/>
+        </div>
+        <div class="mb-16 flex-around">
+          <span>外部链接</span>
+          <div class="checkBoxContainer">
+            <el-checkbox
+                v-model="selectMooc"
+                border
+                label="Mooc"
+                size="large"
+            ></el-checkbox>
+          </div>
+        </div>
+        <div v-if="selectMooc" class="mb-16 flex-around">
+          <span>&emsp;&emsp;&emsp;&emsp;</span>
+          <el-input v-model="courseInfo.moocLink" placeholder="Mooc Link"/>
+        </div>
+      </div>
+      <div class="newCoursePic">
+        <div class="upLoad">
+          <el-upload
+              :before-upload="beforeAvatarUpload"
+              :on-success="handleAvatarSuccess"
+              :show-file-list="false"
+              action="https://jsonplaceholder.typicode.com/posts/"
+              class="avatar-uploader"
+          >
+            <img v-if="courseInfo.imgUrl" :src="courseInfo.imgUrl" class="avatar"/>
+            <el-icon v-else class="avatar-uploader-icon">
+              <plus/>
+            </el-icon>
+          </el-upload>
+        </div>
+        <div class="mt-16">
+          <span style="display: block;margin-bottom: 4px">添加简介</span>
+          <el-input
+              v-model="courseInfo.description"
+              :rows="4"
+              placeholder="课程简介"
+              type="textarea"
+          />
+        </div>
+      </div>
+    </div>
+    <div class="flex-center">
+      <div class="saveNewCourse">
+        <el-button type="primary">保存</el-button>
+        <el-button type="danger" @click="dialogVisible=false">取消</el-button>
+      </div>
+    </div>
+
+  </el-dialog>
+
 </template>
 
-<script>
+<script setup>
 import GlobalHeader from "@/components/GlobalHeader";
-export default {
-  name: "ManagePage",
-  components: { GlobalHeader }
-};
+import CourseItem from "@/components/CourseItem";
+import {Plus} from "@element-plus/icons";
+import {reactive, ref} from "vue";
+
+
+const dialogVisible = ref(false);
+const selectMooc = ref(false);
+let courseInfo = reactive({
+  name: "",
+  teacher: "",
+  semester: "",
+  startTime: "",
+  code: "",
+  moocLink: "",
+  imgUrl: "",
+  description: ""
+});
+
+
 </script>
 
 <style scoped>
+@import "managePage.css";
+
+.el-input {
+  width: 200px;
+}
+
+.flex-around :deep(.el-date-editor.el-input) {
+  width: 200px;
+}
+
+
+.upLoad :deep(.avatar-uploader .el-upload) {
+  border: 1px dashed #d9d9d9;
+  border-radius: 6px;
+  cursor: pointer;
+  position: relative;
+  overflow: hidden;
+  width: 100%;
+  background-color: whitesmoke;
+}
+
+.upLoad :deep(.avatar-uploader .el-upload:hover) {
+  border-color: #409eff;
+}
+
+.upLoad :deep(.avatar-uploader-icon ) {
+  font-size: 28px;
+  color: #8c939d;
+  width: 178px;
+  height: 178px;
+  text-align: center;
+  line-height: 178px;
+}
+
+.upLoad :deep(.avatar) {
+  width: 178px;
+  height: 178px;
+  display: block;
+}
 
-</style>
+.saveNewCourse .el-button {
+  width: 88px;
+}
+</style>

+ 0 - 25
src/views/ManagePage/ManagerCourseDetail/ManagerCourseDetail.vue

@@ -1,25 +0,0 @@
-<template>
-  <div class="course-detail-page">
-    <GlobalHeader/>
-    <div class="course-detail-container">
-      <div class="header">
-        <div class="course-img">
-
-        </div>
-        <div class="course-info"></div>
-      </div>
-
-
-    </div>
-
-
-  </div>
-</template>
-
-<script setup>
-import GlobalHeader from "../../../components/GlobalHeader";
-</script>
-
-<style scoped>
-@import "style/ManagerCourseDetail.css";
-</style>

+ 0 - 30
src/views/ManagePage/ManagerCourseDetail/style/ManagerCourseDetail.css

@@ -1,30 +0,0 @@
-.course-detail-page {
-    min-height: 100vh;
-}
-
-.course-detail-container {
-    box-sizing: border-box;
-    width: 1500px;
-    min-width: 1500px;
-    margin-top: 32px;
-}
-
-
-.flex-center {
-    display: flex;
-    justify-content: center;
-    align-items: center;
-}
-
-.header {
-
-}
-
-.course-img {
-
-}
-
-.course-img > img {
-    width: 100%;
-    height: 100%;
-}

+ 0 - 179
src/views/ManagePage/ManagerHome/ManagerHome.vue

@@ -1,179 +0,0 @@
-<template>
-  <div class="page">
-    <GlobalHeader/>
-    <div class="container">
-      <div class="header">
-        <span class="title">课程列表</span>
-        <div>
-          <el-select v-model="value" class="m-2" placeholder="Select">
-            <el-option
-                v-for="item in options"
-                :key="item.value"
-                :label="item.label"
-                :value="item.value"
-            >
-            </el-option>
-          </el-select>
-          <el-button plain type="primary ml-16" @click="dialogVisible=true">新增课程</el-button>
-        </div>
-      </div>
-      <div class="courseList">
-        <div v-for="(index) in 8" :key="index" class="cItem">
-          <CourseItem></CourseItem>
-        </div>
-      </div>
-    </div>
-    <div class="pagination">
-      <el-pagination :total="1000" background layout="prev, pager, next">
-      </el-pagination>
-    </div>
-  </div>
-  <el-dialog
-      v-model="dialogVisible"
-      title="新增课程"
-      width="50%"
-  >
-    <div class="createCourseCard">
-      <div class="newCourseInfo">
-        <div class="mb-16 flex-around">
-          <span>课程名称</span>
-          <el-input v-model="courseInfo.name" placeholder="课程名称"/>
-        </div>
-        <div class="mb-16 flex-around">
-          <span>任课教师</span>
-          <el-input v-model="courseInfo.teacher" placeholder="任课教师"/>
-        </div>
-        <div class="mb-16 flex-around">
-          <span>所属学期</span>
-          <el-input v-model="courseInfo.semester" placeholder="所属学期"/>
-        </div>
-        <div class="mb-16 flex-around">
-          <span>开课时间</span>
-          <el-date-picker v-model="courseInfo.startTime" placeholder="Pick a day" type="date">
-          </el-date-picker>
-        </div>
-        <div class="mb-16 flex-around">
-          <span>邀请码&emsp;</span>
-          <el-input v-model="courseInfo.code" placeholder="邀请码"/>
-        </div>
-        <div class="mb-16 flex-around">
-          <span>外部链接</span>
-          <div class="checkBoxContainer">
-            <el-checkbox
-                v-model="selectMooc"
-                border
-                label="Mooc"
-                size="large"
-            ></el-checkbox>
-          </div>
-        </div>
-        <div v-if="selectMooc" class="mb-16 flex-around">
-          <span>&emsp;&emsp;&emsp;&emsp;</span>
-          <el-input v-model="courseInfo.link" placeholder="Mooc Link"/>
-        </div>
-      </div>
-      <div class="newCoursePic">
-        <div class="upLoad">
-          <el-upload
-              :before-upload="beforeAvatarUpload"
-              :on-success="handleAvatarSuccess"
-              :show-file-list="false"
-              action="https://jsonplaceholder.typicode.com/posts/"
-              class="avatar-uploader"
-          >
-            <img v-if="courseInfo.imgUrl" :src="courseInfo.imgUrl" class="avatar"/>
-            <el-icon v-else class="avatar-uploader-icon">
-              <plus/>
-            </el-icon>
-          </el-upload>
-        </div>
-        <div class="mt-16">
-          <span style="display: block;margin-bottom: 4px">添加简介</span>
-          <el-input
-              v-model="courseInfo.description"
-              :rows="4"
-              placeholder="课程简介"
-              type="textarea"
-          />
-        </div>
-      </div>
-    </div>
-    <div class="flex-center">
-      <div class="saveNewCourse">
-        <el-button type="primary">保存</el-button>
-        <el-button type="danger" @click="dialogVisible=false">取消</el-button>
-      </div>
-    </div>
-
-  </el-dialog>
-
-</template>
-
-<script setup>
-import GlobalHeader from "@/components/GlobalHeader";
-import CourseItem from "@/components/CourseItem";
-import {Plus} from "@element-plus/icons";
-import {reactive, ref} from "vue";
-
-
-const dialogVisible = ref(false);
-const selectMooc = ref(false);
-let courseInfo = reactive({
-  name: "",
-  teacher: "",
-  semester: "",
-  startTime: "",
-  code: "",
-  link: "",
-  imgUrl: "",
-  description: ""
-});
-
-
-</script>
-
-<style scoped>
-@import "style/managerHome.css";
-
-.el-input {
-  width: 200px;
-}
-
-.flex-around :deep(.el-date-editor.el-input) {
-  width: 200px;
-}
-
-
-.upLoad :deep(.avatar-uploader .el-upload) {
-  border: 1px dashed #d9d9d9;
-  border-radius: 6px;
-  cursor: pointer;
-  position: relative;
-  overflow: hidden;
-  width: 100%;
-  background-color: whitesmoke;
-}
-
-.upLoad :deep(.avatar-uploader .el-upload:hover) {
-  border-color: #409eff;
-}
-
-.upLoad :deep(.avatar-uploader-icon ) {
-  font-size: 28px;
-  color: #8c939d;
-  width: 178px;
-  height: 178px;
-  text-align: center;
-  line-height: 178px;
-}
-
-.upLoad :deep(.avatar) {
-  width: 178px;
-  height: 178px;
-  display: block;
-}
-
-.saveNewCourse .el-button {
-  width: 88px;
-}
-</style>

+ 0 - 0
src/views/ManagePage/ManagerHome/style/managerHome.css → src/views/ManagePage/managePage.css