From 54e06ab83d8fbebf91f8e0c3a621da743ac5af26 Mon Sep 17 00:00:00 2001
From: 黄何裕 <1053952480@qq.com>
Date: 星期四, 08 八月 2024 09:28:06 +0800
Subject: [PATCH] 课表页面开发

---
 src/views/class/index.vue               |  227 ++-
 vue.config.js                           |    2 
 src/api/rollCall.js                     |  102 +
 src/views/curriculum/index.vue          |  356 ++++-
 src/api/integral.js                     |   72 +
 src/views/student/index.vue             |  130 +
 src/views/scheduleCourses/index.vue     |  211 ++-
 src/api/work.js                         |   82 +
 src/views/rollCall/index.vue            |  336 ++++-
 src/views/student/components/create.vue |   39 
 src/utils/graphql.js                    |    2 
 src/views/development/index.vue         |  254 ++-
 src/views/integral/index.vue            |  227 ++-
 src/views/home/components/chart.vue     |   67 +
 src/router/index.js                     |  279 ++--
 src/views/comment/index.vue             |  244 ++-
 .env.development                        |    2 
 src/api/curriculum.js                   |   75 +
 src/views/home/index.vue                |   41 
 src/api/comment.js                      |   77 +
 src/api/student.js                      |   63 
 package.json                            |    1 
 src/api/scheduleCourses.js              |   68 +
 src/api/class.js                        |   78 +
 src/api/development.js                  |   70 +
 src/views/work/index.vue                |  215 ++-
 26 files changed, 2,453 insertions(+), 867 deletions(-)

diff --git a/.env.development b/.env.development
index 3796388..2ebbba7 100644
--- a/.env.development
+++ b/.env.development
@@ -2,4 +2,4 @@
 ENV = 'development'
 
 # base api
-VUE_APP_BASE_API = 'http://192.168.3.88:18080/dream_test'
+VUE_APP_BASE_API = 'http://192.168.3.87:18081/dream'
diff --git a/package.json b/package.json
index 186f2b0..8ce7d9a 100644
--- a/package.json
+++ b/package.json
@@ -24,6 +24,7 @@
     "core-js": "3.6.5",
     "cors": "^2.8.5",
     "cos-js-sdk-v5": "^1.8.3",
+    "echarts": "^5.5.1",
     "element-ui": "2.13.2",
     "graphql": "^16.9.0",
     "graphql-tag": "^2.12.6",
diff --git a/src/api/class.js b/src/api/class.js
new file mode 100644
index 0000000..21e36e8
--- /dev/null
+++ b/src/api/class.js
@@ -0,0 +1,78 @@
+import apolloClient from "@/utils/graphql";
+import gql from "graphql-tag";
+
+//鍏ㄩ儴
+export function getTeamDtoAll(params) {
+  return apolloClient.query({
+    query: gql`
+      query vars(
+        $staffId: Int!
+        $types: [TeamType!]!
+        $keyword: String
+        $pageIn: PageIn!
+      ) {
+        findTeamDtoAll(
+          staffId: $staffId
+          types: $types
+          keyword: $keyword
+          pageIn: $pageIn
+        ) {
+          ls {
+            team {
+              id
+              name
+              voucher {
+                id
+                name
+              }
+              sessionStaffs {
+                id
+                name
+              }
+            }
+            playerCount
+          }
+          pageOut {
+            total
+            index
+            size
+          }
+        }
+      }
+    `,
+    variables: params,
+  });
+}
+
+//鍋滅敤
+export function getDeletedItem(params) {
+  return apolloClient.query({
+    query: gql`
+      query vars(
+        $staffId: Int!
+        $itemType: ItemType!
+        $keyword: String
+        $pageIn: PageIn!
+      ) {
+        findDeletedItem(
+          staffId: $staffId
+          itemType: $itemType
+          keyword: $keyword
+          pageIn: $pageIn
+        ) {
+          ls {
+            id
+            name
+            modifyTime
+          }
+          pageOut {
+            total
+            index
+            size
+          }
+        }
+      }
+    `,
+    variables: params,
+  });
+}
diff --git a/src/api/comment.js b/src/api/comment.js
new file mode 100644
index 0000000..a41583c
--- /dev/null
+++ b/src/api/comment.js
@@ -0,0 +1,77 @@
+import apolloClient from "@/utils/graphql";
+import gql from "graphql-tag";
+
+//鍏ㄩ儴
+export function getSessionWithComment(params) {
+  return apolloClient.query({
+    query: gql`
+      query vars($staffId: Int!, $keyword: String, $pageIn: PageIn!) {
+        findSessionWithComment(
+          staffId: $staffId
+          keyword: $keyword
+          pageIn: $pageIn
+        ) {
+          ls {
+            sessionId
+            courseName
+            beginTime
+            endTime
+            homeworkCommentId
+            playerCount
+            commentCount
+            staffNames
+          }
+          pageOut {
+            total
+            index
+            size
+          }
+        }
+      }
+    `,
+    variables: params,
+  });
+}
+
+//鍋滅敤
+export function getHomeworkCommentByAuth(params) {
+  return apolloClient.query({
+    query: gql`
+      query vars(
+        $staffId: Int!
+        $commentTypes: [HomeworkCommentType!]!
+        $keyword: String
+        $pageIn: PageIn!
+      ) {
+        findHomeworkCommentByAuth(
+          staffId: $staffId
+          commentTypes: $commentTypes
+          keyword: $keyword
+          pageIn: $pageIn
+        ) {
+          ls {
+            id
+            player {
+              id
+              name
+            }
+            commentType
+            homework {
+              id
+              name
+            }
+            lastStaffCommentId
+            createTime
+            createById
+          }
+          pageOut {
+            total
+            index
+            size
+          }
+        }
+      }
+    `,
+    variables: params,
+  });
+}
diff --git a/src/api/curriculum.js b/src/api/curriculum.js
new file mode 100644
index 0000000..501921e
--- /dev/null
+++ b/src/api/curriculum.js
@@ -0,0 +1,75 @@
+import apolloClient from "@/utils/graphql";
+import gql from "graphql-tag";
+
+//鍏ㄩ儴
+export function getBySessionExistsOfDay(params) {
+  return apolloClient.query({
+    query: gql`
+      query vars($staffId: Int!, $day: LocalDate!) {
+        findBySessionExistsOfDay(staffId: $staffId, day: $day) {
+          id
+          name
+        }
+      }
+    `,
+    variables: params,
+  });
+}
+
+//鍋滅敤
+export function getSubjectByCourseAndDateRange(params) {
+  return apolloClient.query({
+    query: gql`
+      query vars(
+        $staffId: Int!
+        $courseIds: [Int]!
+        $beginDate: LocalDate!
+        $endDate: LocalDate!
+      ) {
+        findSubjectByCourseAndDateRange(
+          staffId: $staffId
+          courseIds: $courseIds
+          beginDate: $beginDate
+          endDate: $endDate
+        ) {
+          date
+          subjects {
+            id
+            name
+            subjectType
+            sessions {
+              id
+              courseId
+              courseName
+              courseType
+              playerMax
+              planId
+              sessionType
+              beginTime
+              endTime
+              staffCount
+              placeCount
+              staffNames
+              placeIds
+              placeNames
+              firstPlayerName
+              playerCount
+              playerNoneCount
+              playerApplyBookingCount
+              playerBookingCount
+              playerApplyLeaveCount
+              playerLeaveCount
+              playerLateCount
+              playerAbsenceCount
+              playerCompleteCount
+              description
+              complete
+              color
+            }
+          }
+        }
+      }
+    `,
+    variables: params,
+  });
+}
diff --git a/src/api/development.js b/src/api/development.js
new file mode 100644
index 0000000..0e00796
--- /dev/null
+++ b/src/api/development.js
@@ -0,0 +1,70 @@
+import apolloClient from "@/utils/graphql";
+import gql from "graphql-tag";
+
+//鍏ㄩ儴
+export function getHomeworkByType(params) {
+  return apolloClient.query({
+    query: gql`
+      query vars(
+        $staffId: Int!
+        $homeworkType: HomeworkType!
+        $keyword: String
+        $pageIn: PageIn
+      ) {
+        findHomeworkByType(
+          staffId: $staffId
+          homeworkType: $homeworkType
+          keyword: $keyword
+          pageIn: $pageIn
+        ) {
+          ls {
+            id
+            name
+            category
+            publisher {
+              id
+              name
+            }
+            createTime
+          }
+          pageOut {
+            total
+            index
+            size
+          }
+        }
+      }
+    `,
+    variables: params,
+  });
+}
+
+//鍋滅敤
+export function getSessionHomeworkDto(params) {
+  return apolloClient.query({
+    query: gql`
+      query vars($staffId: Int!, $keyword: String, $pageIn: PageIn!) {
+        findSessionHomeworkDto(
+          staffId: $staffId
+          keyword: $keyword
+          pageIn: $pageIn
+        ) {
+          ls {
+            sessionId
+            courseName
+            beginTime
+            endTime
+            playerCount
+            commentCount
+          }
+          pageOut {
+            total
+            index
+            size
+          }
+        }
+      }
+    `,
+    variables: params,
+  });
+}
diff --git a/src/api/integral.js b/src/api/integral.js
new file mode 100644
index 0000000..459523e
--- /dev/null
+++ b/src/api/integral.js
@@ -0,0 +1,72 @@
+import apolloClient from "@/utils/graphql";
+import gql from "graphql-tag";
+
+//鍏ㄩ儴
+export function getPlayerScore(params) {
+  return apolloClient.query({
+    query: gql`
+      query vars($staffId: Int!, $keyword: String, $pageIn: PageIn!) {
+        findPlayerScore(staffId: $staffId, keyword: $keyword, pageIn: $pageIn) {
+          ls {
+            playerId
+            playerName
+            voucherId
+            voucherName
+            qty
+            endDate
+            modifyTime
+          }
+          pageOut {
+            total
+            index
+            size
+          }
+        }
+      }
+    `,
+    variables: params,
+  });
+}
+
+//鍋滅敤
+export function getTeamDtoAll(params) {
+  return apolloClient.query({
+    query: gql`
+      query vars(
+        $staffId: Int!
+        $types: [TeamType!]!
+        $keyword: String
+        $pageIn: PageIn!
+      ) {
+        findTeamDtoAll(
+          staffId: $staffId
+          types: $types
+          keyword: $keyword
+          pageIn: $pageIn
+        ) {
+          ls {
+            team {
+              id
+              name
+              voucher {
+                id
+                name
+              }
+              sessionStaffs {
+                id
+                name
+              }
+            }
+            playerCount
+          }
+          pageOut {
+            total
+            index
+            size
+          }
+        }
+      }
+    `,
+    variables: params,
+  });
+}
diff --git a/src/api/rollCall.js b/src/api/rollCall.js
new file mode 100644
index 0000000..5a599cd
--- /dev/null
+++ b/src/api/rollCall.js
@@ -0,0 +1,102 @@
+import apolloClient from "@/utils/graphql";
+import gql from "graphql-tag";
+
+//鍏ㄩ儴
+export function getPlayerAccByStaffWithRollCall(params) {
+  return apolloClient.query({
+    query: gql`
+      query vars($staffId: Int!, $keyword: String, $pageIn: PageIn!) {
+        findPlayerAccByStaffWithRollCall(
+          staffId: $staffId
+          keyword: $keyword
+          pageIn: $pageIn
+        ) {
+          ls {
+            id
+            player {
+              id
+              name
+            }
+            voucher {
+              id
+              name
+            }
+            voucherType
+            memberType
+            qty
+            amt
+            endDate
+          }
+          pageOut {
+            total
+            index
+            size
+          }
+        }
+      }
+    `,
+    variables: params,
+  });
+}
+
+//鍋滅敤
+export function getTeamByStaffWithRollCall(params) {
+  return apolloClient.query({
+    query: gql`
+      query vars($staffId: Int!, $keyword: String, $pageIn: PageIn!) {
+        findTeamByStaffWithRollCall(
+          staffId: $staffId
+          keyword: $keyword
+          pageIn: $pageIn
+        ) {
+          ls {
+            id
+            name
+          }
+          pageOut {
+            total
+            index
+            size
+          }
+        }
+      }
+    `,
+    variables: params,
+  });
+}
+
+export function getUnCompleteSession(params) {
+  return apolloClient.query({
+    query: gql`
+      query vars(
+        $staffId: Int!
+        $completeTypes: [CompleteType!]!
+        $keyword: String
+        $pageIn: PageIn!
+      ) {
+        findUnCompleteSession(
+          staffId: $staffId
+          completeTypes: $completeTypes
+          keyword: $keyword
+          pageIn: $pageIn
+        ) {
+          ls {
+            id
+            courseName
+            teamId
+            teamName
+            beginTime
+            endTime
+            playerCount
+          }
+          pageOut {
+            total
+            index
+            size
+          }
+        }
+      }
+    `,
+    variables: params,
+  });
+}
diff --git a/src/api/scheduleCourses.js b/src/api/scheduleCourses.js
new file mode 100644
index 0000000..a60c721
--- /dev/null
+++ b/src/api/scheduleCourses.js
@@ -0,0 +1,68 @@
+import apolloClient from "@/utils/graphql";
+import gql from "graphql-tag";
+
+//鍏ㄩ儴
+export function getCourse(params) {
+  return apolloClient.query({
+    query: gql`
+      query vars(
+        $staffId: Int!
+        $types: [CourseType]
+        $keyword: String
+        $pageIn: PageIn
+      ) {
+        findCourse(
+          staffId: $staffId
+          types: $types
+          keyword: $keyword
+          pageIn: $pageIn
+        ) {
+          ls {
+            id
+            name
+            courseType
+          }
+          pageOut {
+            total
+            index
+            size
+          }
+        }
+      }
+    `,
+    variables: params,
+  });
+}
+
+//鍋滅敤
+export function getDeletedItem(params) {
+  return apolloClient.query({
+    query: gql`
+      query vars(
+        $staffId: Int!
+        $itemType: ItemType!
+        $keyword: String
+        $pageIn: PageIn!
+      ) {
+        findDeletedItem(
+          staffId: $staffId
+          itemType: $itemType
+          keyword: $keyword
+          pageIn: $pageIn
+        ) {
+          ls {
+            id
+            name
+            modifyTime
+          }
+          pageOut {
+            total
+            index
+            size
+          }
+        }
+      }
+    `,
+    variables: params,
+  });
+}
diff --git a/src/api/student.js b/src/api/student.js
index 739105b..6456ede 100644
--- a/src/api/student.js
+++ b/src/api/student.js
@@ -181,37 +181,6 @@
   });
 }
 
-export function getDeleted(params) {
-  return apolloClient.query({
-    query: gql`
-      query vars(
-        $staffId: Int!
-        $itemType: ItemType!
-        $keyword: String
-        $pageIn: PageIn!
-      ) {
-        findDeletedItem(
-          staffId: $staffId
-          itemType: $itemType
-          keyword: $keyword
-          pageIn: $pageIn
-        ) {
-          ls {
-            id
-            name
-            modifyTime
-          }
-          pageOut {
-            total
-            index
-            size
-          }
-        }
-      }
-    `,
-    variables: params,
-  });
-}
 
 export function getDetails(params) {
   return apolloClient.query({
@@ -335,3 +304,35 @@
     variables: params,
   });
 }
+//宸插仠鐢�
+export function getDeleted(params) {
+  return apolloClient.query({
+    query: gql`
+      query vars(
+        $staffId: Int!
+        $itemType: ItemType!
+        $keyword: String
+        $pageIn: PageIn!
+      ) {
+        findDeletedItem(
+          staffId: $staffId
+          itemType: $itemType
+          keyword: $keyword
+          pageIn: $pageIn
+        ) {
+          ls {
+            id
+            name
+            modifyTime
+          }
+          pageOut {
+            total
+            index
+            size
+          }
+        }
+      }
+    `,
+    variables: params,
+  });
+}
diff --git a/src/api/work.js b/src/api/work.js
new file mode 100644
index 0000000..4f0b224
--- /dev/null
+++ b/src/api/work.js
@@ -0,0 +1,82 @@
+import apolloClient from "@/utils/graphql";
+import gql from "graphql-tag";
+
+//鍏ㄩ儴
+export function getHomeworkByType(params) {
+  return apolloClient.query({
+    query: gql`
+      query vars(
+        $staffId: Int!
+        $homeworkType: HomeworkType!
+        $keyword: String
+        $pageIn: PageIn
+      ) {
+        findHomeworkByType(
+          staffId: $staffId
+          homeworkType: $homeworkType
+          keyword: $keyword
+          pageIn: $pageIn
+        ) {
+          ls {
+            id
+            name
+            publisher {
+              id
+              name
+            }
+            createTime
+          }
+          pageOut {
+            total
+            index
+            size
+          }
+        }
+      }
+    `,
+    variables: params,
+  });
+}
+
+//鍋滅敤
+export function getHomeworkCommentByAuth(params) {
+  return apolloClient.query({
+    query: gql`
+      query vars(
+        $staffId: Int!
+        $commentTypes: [HomeworkCommentType!]!
+        $keyword: String
+        $pageIn: PageIn!
+      ) {
+        findHomeworkCommentByAuth(
+          staffId: $staffId
+          commentTypes: $commentTypes
+          keyword: $keyword
+          pageIn: $pageIn
+        ) {
+          ls {
+            id
+            player {
+              id
+              name
+            }
+            commentType
+            homework {
+              id
+              name
+            }
+            lastStaffCommentId
+            createTime
+            createById
+          }
+          pageOut {
+            total
+            index
+            size
+          }
+        }
+      }
+    `,
+    variables: params,
+  });
+}
diff --git a/src/router/index.js b/src/router/index.js
index 5a0c890..ee4ea47 100644
--- a/src/router/index.js
+++ b/src/router/index.js
@@ -56,83 +56,108 @@
       },
     ],
   },
-
   {
-    path: "/educational",
+    path: "/",
     component: Layout,
-    redirect: "/educational/student",
-    name: "Educational",
-    meta: { title: "鏁欏姟", icon: "el-icon-s-help" },
+    redirect: "/curriculum",
     children: [
       {
-        path: "student",
+        path: "/curriculum",
+        name: "Curriculum",
+        component: () => import("@/views/curriculum/index"),
+        meta: { title: "璇捐〃", icon: "table" },
+      },
+    ],
+  },
+  {
+    path: "/",
+    component: Layout,
+    redirect: "/student",
+    children: [
+      {
+        path: "/student",
         name: "Student",
         component: () => import("@/views/student/index"),
         meta: { title: "瀛﹀憳", icon: "table" },
       },
-      {
-        path: "student/details",
-        name: "StudentDetails",
-        component: () => import("@/views/student/components/details.vue"),
-        meta: { title: "瀛﹀憳璇︽儏" },
-        hidden: true,
-      },
-      {
-        path: "class",
-        name: "Class",
-        component: () => import("@/views/class/index"),
-        meta: { title: "鐝骇", icon: "tree" },
-      },
-      {
-        path: "scheduleCourses",
-        name: "ScheduleCourses",
-        component: () => import("@/views/scheduleCourses/index"),
-        meta: { title: "鎺掕", icon: "table" },
-      },
-      {
-        path: "work",
-        name: "Work",
-        component: () => import("@/views/work/index"),
-        meta: { title: "浣滀笟", icon: "tree" },
-      },
-      {
-        path: "comment",
-        name: "Comment",
-        component: () => import("@/views/comment/index"),
-        meta: { title: "鐐硅瘎", icon: "table" },
-      },
-      {
-        path: "curriculum",
-        name: "Curriculum",
-        component: () => import("@/views/curriculum/index"),
-        meta: { title: "璇捐〃", icon: "tree" },
-      },
-      {
-        path: "table",
-        name: "Table",
-        component: () => import("@/views/student/index"),
-        meta: { title: "鏃ョ▼", icon: "table" },
-      },
-      {
-        path: "development",
-        name: "Development",
-        component: () => import("@/views/development/index"),
-        meta: { title: "鎴愰暱", icon: "tree" },
-      },
-      {
-        path: "integral",
-        name: "Integral",
-        component: () => import("@/views/integral/index"),
-        meta: { title: "绉垎", icon: "tree" },
-      },
-      {
-        path: "rollCall",
-        name: "RollCall",
-        component: () => import("@/views/rollCall/index"),
-        meta: { title: "鐐硅瘎", icon: "tree" },
-      },
     ],
   },
+  // {
+  //   path: "/educational",
+  //   component: Layout,
+  //   redirect: "/educational/student",
+  //   name: "Educational",
+  //   meta: { title: "鏁欏姟", icon: "el-icon-s-help" },
+  //   children: [
+  //     {
+  //       path: "student",
+  //       name: "Student",
+  //       component: () => import("@/views/student/index"),
+  //       meta: { title: "瀛﹀憳", icon: "table" },
+  //     },
+  //     {
+  //       path: "student/details",
+  //       name: "StudentDetails",
+  //       component: () => import("@/views/student/components/details.vue"),
+  //       meta: { title: "瀛﹀憳璇︽儏" },
+  //       hidden: true,
+  //     },
+  //     {
+  //       path: "class",
+  //       name: "Class",
+  //       component: () => import("@/views/class/index"),
+  //       meta: { title: "鐝骇", icon: "tree" },
+  //     },
+  //     {
+  //       path: "scheduleCourses",
+  //       name: "ScheduleCourses",
+  //       component: () => import("@/views/scheduleCourses/index"),
+  //       meta: { title: "鎺掕", icon: "table" },
+  //     },
+  //     {
+  //       path: "work",
+  //       name: "Work",
+  //       component: () => import("@/views/work/index"),
+  //       meta: { title: "浣滀笟", icon: "tree" },
+  //     },
+  //     {
+  //       path: "comment",
+  //       name: "Comment",
+  //       component: () => import("@/views/comment/index"),
+  //       meta: { title: "鐐硅瘎", icon: "table" },
+  //     },
+  //     {
+  //       path: "curriculum",
+  //       name: "Curriculum",
+  //       component: () => import("@/views/curriculum/index"),
+  //       meta: { title: "璇捐〃", icon: "tree" },
+  //     },
+  //     {
+  //       path: "table",
+  //       name: "Table",
+  //       component: () => import("@/views/student/index"),
+  //       meta: { title: "鏃ョ▼", icon: "table" },
+  //     },
+  //     {
+  //       path: "development",
+  //       name: "Development",
+  //       component: () => import("@/views/development/index"),
+  //       meta: { title: "鎴愰暱", icon: "tree" },
+  //     },
+  //     {
+  //       path: "integral",
+  //       name: "Integral",
+  //       component: () => import("@/views/integral/index"),
+  //       meta: { title: "绉垎", icon: "tree" },
+  //     },
+  //     {
+  //       path: "rollCall",
+  //       name: "RollCall",
+  //       component: () => import("@/views/rollCall/index"),
+  //       meta: { title: "鐐硅瘎", icon: "tree" },
+  //     },
+  //   ],
+  // },
 
   // {
   //   path: '/form',
@@ -147,66 +172,66 @@
   //   ]
   // },
 
-  {
-    path: "/nested",
-    component: Layout,
-    redirect: "/nested/menu1",
-    name: "Nested",
-    meta: {
-      title: "Nested",
-      icon: "nested",
-    },
-    children: [
-      {
-        path: "menu1",
-        component: () => import("@/views/nested/menu1/index"), // Parent router-view
-        name: "Menu1",
-        meta: { title: "Menu1" },
-        children: [
-          {
-            path: "menu1-1",
-            component: () => import("@/views/nested/menu1/menu1-1"),
-            name: "Menu1-1",
-            meta: { title: "Menu1-1" },
-          },
-          {
-            path: "menu1-2",
-            component: () => import("@/views/nested/menu1/menu1-2"),
-            name: "Menu1-2",
-            meta: { title: "Menu1-2" },
-            children: [
-              {
-                path: "menu1-2-1",
-                component: () =>
-                  import("@/views/nested/menu1/menu1-2/menu1-2-1"),
-                name: "Menu1-2-1",
-                meta: { title: "Menu1-2-1" },
-              },
-              {
-                path: "menu1-2-2",
-                component: () =>
-                  import("@/views/nested/menu1/menu1-2/menu1-2-2"),
-                name: "Menu1-2-2",
-                meta: { title: "Menu1-2-2" },
-              },
-            ],
-          },
-          {
-            path: "menu1-3",
-            component: () => import("@/views/nested/menu1/menu1-3"),
-            name: "Menu1-3",
-            meta: { title: "Menu1-3" },
-          },
-        ],
-      },
-      {
-        path: "menu2",
-        component: () => import("@/views/nested/menu2/index"),
-        name: "Menu2",
-        meta: { title: "menu2" },
-      },
-    ],
-  },
+  // {
+  //   path: "/nested",
+  //   component: Layout,
+  //   redirect: "/nested/menu1",
+  //   name: "Nested",
+  //   meta: {
+  //     title: "Nested",
+  //     icon: "nested",
+  //   },
+  //   children: [
+  //     {
+  //       path: "menu1",
+  //       component: () => import("@/views/nested/menu1/index"), // Parent router-view
+  //       name: "Menu1",
+  //       meta: { title: "Menu1" },
+  //       children: [
+  //         {
+  //           path: "menu1-1",
+  //           component: () => import("@/views/nested/menu1/menu1-1"),
+  //           name: "Menu1-1",
+  //           meta: { title: "Menu1-1" },
+  //         },
+  //         {
+  //           path: "menu1-2",
+  //           component: () => import("@/views/nested/menu1/menu1-2"),
+  //           name: "Menu1-2",
+  //           meta: { title: "Menu1-2" },
+  //           children: [
+  //             {
+  //               path: "menu1-2-1",
+  //               component: () =>
+  //                 import("@/views/nested/menu1/menu1-2/menu1-2-1"),
+  //               name: "Menu1-2-1",
+  //               meta: { title: "Menu1-2-1" },
+  //             },
+  //             {
+  //               path: "menu1-2-2",
+  //               component: () =>
+  //                 import("@/views/nested/menu1/menu1-2/menu1-2-2"),
+  //               name: "Menu1-2-2",
+  //               meta: { title: "Menu1-2-2" },
+  //             },
+  //           ],
+  //         },
+  //         {
+  //           path: "menu1-3",
+  //           component: () => import("@/views/nested/menu1/menu1-3"),
+  //           name: "Menu1-3",
+  //           meta: { title: "Menu1-3" },
+  //         },
+  //       ],
+  //     },
+  //     {
+  //       path: "menu2",
+  //       component: () => import("@/views/nested/menu2/index"),
+  //       name: "Menu2",
+  //       meta: { title: "menu2" },
+  //     },
+  //   ],
+  // },
 
   // {
   //   path: 'external-link',
diff --git a/src/utils/graphql.js b/src/utils/graphql.js
index e1d8377..8d5bd0e 100644
--- a/src/utils/graphql.js
+++ b/src/utils/graphql.js
@@ -6,7 +6,7 @@
 
 // export default apolloClient;
 // 瀹氫箟涓嶅悓璇锋眰鍦板潃
-const EFORMURI = "http://192.168.3.88:18080/dream_test/graphql";
+const EFORMURI = "http://192.168.3.87:18081/dream/graphql";
 const IOTURI = "https://www.9village.cn/dream_test" + "/graphql";
 // import ApolloClient from 'apollo-boost' //寮曞叆apollo-boost鎻掍欢
 import { ApolloClient } from "apollo-client";
diff --git a/src/views/class/index.vue b/src/views/class/index.vue
index f79de1a..11fdb70 100644
--- a/src/views/class/index.vue
+++ b/src/views/class/index.vue
@@ -1,103 +1,178 @@
 <template>
-    <div class="app-container">
-      <el-tabs v-model="activeName" @tab-click="handleClick">
-        <el-tab-pane label="鍏ㄩ儴" name="first" />
-        <el-tab-pane label="宸插仠鐢�" name="fourth" />
-      </el-tabs>
-      <div style="display: flex; flex-direction: row-reverse;">
-        <div style="width: 300px;">
-          <el-input
-            placeholder="鎸夌彮绾у悕绉版悳绱�"
-            v-model="input3"
-            class="input-with-select"
-            size="small"
-          >
-            <el-button slot="append" icon="el-icon-search"></el-button>
-          </el-input>
-        </div>
+  <div class="app-container">
+    <el-tabs v-model="activeName" @tab-click="fetchData">
+      <el-tab-pane label="鍏ㄩ儴" name="all" />
+      <el-tab-pane label="宸插仠鐢�" name="deactivated" />
+    </el-tabs>
+    <div style="display: flex; flex-direction: row-reverse">
+      <div style="width: 300px">
+        <el-input
+          placeholder="鎸夌彮绾у悕绉版悳绱�"
+          v-model="data.keyword"
+          class="input-with-select"
+          size="small"
+        >
+          <el-button
+            slot="append"
+            icon="el-icon-search"
+            @click="fetchData"
+          ></el-button>
+        </el-input>
       </div>
+    </div>
+    <div style="height: calc(100vh - 248px)">
       <el-table
         v-loading="listLoading"
         :data="list"
         element-loading-text="Loading"
         fit
+        v-if="activeName == 'all'"
+        height="100%"
       >
         <el-table-column label="鐝骇鍚嶇О">
-          <template slot-scope=""> xxxxx </template>
+          <template slot-scope="scope">
+            <el-link type="primary" :underline="false">{{
+              scope.row.team.name
+            }}</el-link>
+          </template>
         </el-table-column>
-        <el-table-column label="鐝骇浜烘暟" width="80">
-          <template slot-scope=""> 鐢� </template>
+        <el-table-column label="鐝骇浜烘暟" width="200">
+          <template slot-scope="scope">{{ scope.row.playerCount }} 浜�</template>
         </el-table-column>
         <el-table-column label="璇惧寘/浼氬憳鍗�" width="200">
-          <template slot-scope=""> 10086 </template>
-        </el-table-column>
-        <el-table-column label="榛樿璇炬秷" width="200">
-          <template slot-scope=""> asfiaf </template>
+          <template slot-scope="scope">{{
+            scope.row.team.voucher.name
+          }}</template>
         </el-table-column>
         <el-table-column label="鏁欏笀" width="">
-          <template slot-scope=""> asfiaf </template>
+          <template slot-scope="scope">{{
+            concatenateArray(scope.row.team.sessionStaffs)
+          }}</template>
         </el-table-column>
-        <el-table-column label="瀛﹀憳浜烘暟" width="">
-          <template slot-scope=""> asfiaf </template>
+      </el-table>
+      <el-table
+        v-loading="listLoading"
+        :data="list"
+        element-loading-text="Loading"
+        fit
+        height="100%"
+        v-else
+      >
+        <el-table-column label="鐝骇鍚嶇О">
+          <template slot-scope="scope">{{ scope.row.name }} </template>
         </el-table-column>
-        <!-- <el-table-column label="Author" width="110" align="center">
-          <template slot-scope="scope">
-            <span>{{ scope.row.author }}</span>
+        <el-table-column label="鍋滅敤鏃堕棿">
+          <template slot-scope="scope">{{ scope.row.modifyTime }} </template>
+        </el-table-column>
+        <el-table-column label="鎿嶄綔" width="200">
+          <template slot-scope="">
+            <el-link type="primary" :underline="false">鎭㈠</el-link>
           </template>
         </el-table-column>
-        <el-table-column label="Pageviews" width="110" align="center">
-          <template slot-scope="scope">
-            {{ scope.row.pageviews }}
-          </template>
-        </el-table-column>
-        <el-table-column class-name="status-col" label="Status" width="110" align="center">
-          <template slot-scope="scope">
-            <el-tag :type="scope.row.status | statusFilter">{{ scope.row.status }}</el-tag>
-          </template>
-        </el-table-column>
-        <el-table-column align="center" prop="created_at" label="Display_time" width="200">
-          <template slot-scope="scope">
-            <i class="el-icon-time" />
-            <span>{{ scope.row.display_time }}</span>
-          </template>
-        </el-table-column> -->
       </el-table>
     </div>
-  </template>
-  
-  <script>
-  import { getList } from "@/api/table";
-  
-  export default {
-    filters: {
-      statusFilter(status) {
-        const statusMap = {
-          published: "success",
-          draft: "gray",
-          deleted: "danger",
-        };
-        return statusMap[status];
-      },
-    },
-    data() {
-      return {
-        list: null,
-        listLoading: true,
-        activeName: "first",
+    <div>
+      <el-pagination
+        @size-change="handleSizeChange"
+        @current-change="handleCurrentChange"
+        :current-page="data.pageIn.index + 1"
+        :page-sizes="[10, 20, 30, 40]"
+        :page-size="data.pageIn.size"
+        layout="total, sizes, prev, pager, next, jumper"
+        :total="total"
+      >
+      </el-pagination>
+    </div>
+  </div>
+</template>
+
+<script>
+import { getTeamDtoAll, getDeletedItem } from "@/api/class";
+
+export default {
+  filters: {
+    statusFilter(status) {
+      const statusMap = {
+        published: "success",
+        draft: "gray",
+        deleted: "danger",
       };
+      return statusMap[status];
     },
-    created() {
-      this.fetchData();
+  },
+  data() {
+    return {
+      list: null,
+      listLoading: true,
+      activeName: "all",
+      total: 0,
+      data: {
+        staffId: JSON.parse(localStorage.getItem("user")).staffs[0].id,
+        keyword: "",
+        pageIn: {
+          //鍙�夛紝濡傛灉鏄垎椤垫煡璇紝闇�瑕佸姞涓娿��
+          index: 0, //蹇呴��
+          size: 10, //姣忛〉鐨勫ぇ灏忋�傞粯璁�20
+          sorts: {
+            name: "name", //鎺掑簭瀛楁鍚嶇О
+            direction: "ASC", //鎺掑簭鏂瑰悜
+          },
+        },
+        types: ["NORMAL"],
+      },
+    };
+  },
+  created() {
+    this.fetchData();
+  },
+  methods: {
+    handleSizeChange(val) {
+      this.data.pageIn.size = val;
+      this.fetchData("pageIn");
     },
-    methods: {
-      fetchData() {
+    handleCurrentChange(val) {
+      this.data.pageIn.index = val - 1;
+      this.fetchData("pageIn");
+    },
+    fetchData(_val) {
+      if (_val !== "pageIn") {
+        this.data.pageIn.index = 0;
+        this.data.pageIn.size = 10;
+      }
+      this.listLoading = true;
+      if (this.activeName == "all") {
         this.listLoading = true;
-        getList().then((response) => {
-          this.list = response.data.items;
+        getTeamDtoAll(this.data).then((response) => {
+          this.list = response.data.findTeamDtoAll.ls;
+          this.total = response.data.findTeamDtoAll.pageOut.total;
           this.listLoading = false;
         });
-      },
+      } else if (this.activeName == "deactivated") {
+        this.listLoading = true;
+        let data = {
+          itemType: "TEAM",
+          staffId: JSON.parse(localStorage.getItem("user")).staffs[0].id,
+          keyword: this.data.keyword,
+          pageIn: { ...this.data.pageIn },
+        };
+        getDeletedItem(data).then((response) => {
+          this.list = response.data.findDeletedItem.ls;
+          this.total = response.data.findDeletedItem.pageOut.total;
+          this.listLoading = false;
+        });
+      }
     },
-  };
-  </script>
-  
\ No newline at end of file
+    concatenateArray(arr) {
+      let result = "";
+      for (let i = 0; i < arr.length; i++) {
+        if (i == 0) {
+          result += arr[i].name;
+        } else {
+          result += "," + arr[i].name;
+        }
+      }
+      return result;
+    },
+  },
+};
+</script>
diff --git a/src/views/comment/index.vue b/src/views/comment/index.vue
index 0bcef35..004ad03 100644
--- a/src/views/comment/index.vue
+++ b/src/views/comment/index.vue
@@ -1,118 +1,190 @@
 <template>
-    <div class="app-container">
-      <el-tabs v-model="activeName" @tab-click="handleClick">
-        <el-tab-pane label="璇剧▼" name="first">
-          <div style="display: flex; flex-direction: row-reverse">
-            <div style="width: 300px">
-              <el-input
-                placeholder="鎸夎绋嬪悕绉版悳绱�"
-                v-model="input3"
-                class="input-with-select"
-                size="small"
-              >
-                <el-button slot="append" icon="el-icon-search"></el-button>
-              </el-input>
-            </div>
+  <div class="app-container">
+    <el-tabs v-model="activeName" @tab-click="fetchData">
+      <el-tab-pane label="璇惧悗鐐硅瘎" name="comment">
+        <div style="display: flex; flex-direction: row-reverse">
+          <div style="width: 300px">
+            <el-input
+              placeholder="鎸夎绋嬪悕绉版悳绱�"
+              v-model="data.keyword"
+              class="input-with-select"
+              size="small"
+            >
+              <el-button
+                slot="append"
+                icon="el-icon-search"
+                @click="fetchData"
+              ></el-button>
+            </el-input>
           </div>
+        </div>
+        <div style="height: calc(100vh - 248px)">
           <el-table
             v-loading="listLoading"
             :data="list"
             element-loading-text="Loading"
             fit
+            height="100%"
           >
             <el-table-column label="璇剧▼鍚嶇О">
-              <template slot-scope=""> xxxxx </template>
+              <template slot-scope="scope">
+                <el-link type="primary" :underline="false">{{
+                  scope.row.courseName
+                }}</el-link>
+              </template>
             </el-table-column>
-            <el-table-column label="鏃堕棿" width="80">
-              <template slot-scope=""> 鐢� </template>
+            <el-table-column label="璇剧▼鏃堕棿" width="">
+              <template slot-scope="scope">
+                {{ scope.row.beginTime }}
+              </template>
             </el-table-column>
-            <el-table-column label="鏁欏笀" width="200">
-              <template slot-scope=""> 10086 </template>
+            <el-table-column label="鏁欏笀" width="" prop="staffNames">
             </el-table-column>
-            <el-table-column label="瀛﹀憳鏁�" width="200">
-              <template slot-scope=""> asfiaf </template>
+            <el-table-column label="瀛﹀憳鏁�" width="" prop="playerCount">
             </el-table-column>
-            <el-table-column label="宸茬偣璇勬暟" width="">
-              <template slot-scope=""> asfiaf </template>
-            </el-table-column>
-            <el-table-column label="鎿嶄綔" width="">
-              <template slot-scope=""> 鐐硅瘎 </template>
+            <el-table-column label="宸茬偣璇勬暟" width="" prop="commentCount">
             </el-table-column>
           </el-table>
-        </el-tab-pane>
-        <el-tab-pane label="鍏朵粬" name="fourth">
-          <div style="display: flex; flex-direction: row-reverse">
-            <div style="width: 300px">
-              <el-input
-                placeholder="鎸夊鍛樺悕绉版悳绱�"
-                v-model="input3"
-                class="input-with-select"
-                size="small"
-              >
-                <el-button slot="append" icon="el-icon-search"></el-button>
-              </el-input>
-            </div>
+        </div>
+        <div>
+          <el-pagination
+            @size-change="handleSizeChange"
+            @current-change="handleCurrentChange"
+            :current-page="data.pageIn.index + 1"
+            :page-sizes="[10, 20, 30, 40]"
+            :page-size="data.pageIn.size"
+            layout="total, sizes, prev, pager, next, jumper"
+            :total="total"
+          >
+          </el-pagination>
+        </div>
+      </el-tab-pane>
+      <el-tab-pane label="鍏朵粬" name="other">
+        <div style="display: flex; flex-direction: row-reverse">
+          <div style="width: 300px">
+            <el-input
+              placeholder="鎸夊鍛樺悕绉版悳绱�"
+              v-model="data.keyword"
+              class="input-with-select"
+              size="small"
+            >
+              <el-button slot="append" icon="el-icon-search" @click="fetchData"></el-button>
+            </el-input>
           </div>
+        </div>
+        <div style="height: calc(100vh - 248px)">
           <el-table
             v-loading="listLoading"
             :data="list"
             element-loading-text="Loading"
             fit
+            height="100%"
           >
-            <el-table-column label="瀛﹀憳">
-              <template slot-scope=""> xxxxx </template>
+            <el-table-column label="瀛﹀憳鍚嶇О">
+              <template slot-scope="scope">
+                <el-link type="primary" :underline="false">{{
+                  scope.row.player.name
+                }}</el-link>
+              </template>
             </el-table-column>
-            <el-table-column label="鏃堕棿" width="80">
-              <template slot-scope=""> 鐢� </template>
-            </el-table-column>
-            <el-table-column label="鏍囬" width="200">
-              <template slot-scope=""> 10086 </template>
-            </el-table-column>
-            <el-table-column label="鐐硅瘎鑰佸笀" width="200">
-              <template slot-scope=""> asfiaf </template>
-            </el-table-column>
-            <el-table-column label="鎿嶄綔" width="">
-              <template slot-scope=""> 鏌ョ湅 </template>
+            <el-table-column label="鐐硅瘎鏃堕棿" width="" prop="createTime">
             </el-table-column>
           </el-table>
-        </el-tab-pane>
-      </el-tabs>
-    </div>
-  </template>
-  
-  <script>
-  import { getList } from "@/api/table";
-  
-  export default {
-    filters: {
-      statusFilter(status) {
-        const statusMap = {
-          published: "success",
-          draft: "gray",
-          deleted: "danger",
-        };
-        return statusMap[status];
-      },
-    },
-    data() {
-      return {
-        list: null,
-        listLoading: true,
-        activeName: "first",
+        </div>
+        <div>
+          <el-pagination
+            @size-change="handleSizeChange"
+            @current-change="handleCurrentChange"
+            :current-page="data.pageIn.index + 1"
+            :page-sizes="[10, 20, 30, 40]"
+            :page-size="data.pageIn.size"
+            layout="total, sizes, prev, pager, next, jumper"
+            :total="total"
+          >
+          </el-pagination>
+        </div>
+      </el-tab-pane>
+    </el-tabs>
+  </div>
+</template>
+
+<script>
+import { getSessionWithComment, getHomeworkCommentByAuth } from "@/api/comment";
+
+export default {
+  filters: {
+    statusFilter(status) {
+      const statusMap = {
+        published: "success",
+        draft: "gray",
+        deleted: "danger",
       };
+      return statusMap[status];
     },
-    created() {
-      this.fetchData();
+  },
+  data() {
+    return {
+      list: null,
+      listLoading: true,
+      activeName: "comment",
+      total: 0,
+      data: {
+        staffId: JSON.parse(localStorage.getItem("user")).staffs[0].id,
+        keyword: "",
+        pageIn: {
+          //鍙�夛紝濡傛灉鏄垎椤垫煡璇紝闇�瑕佸姞涓娿��
+          index: 0, //蹇呴��
+          size: 10, //姣忛〉鐨勫ぇ灏忋�傞粯璁�20
+          sorts: {
+            name: "begin_time", //鎺掑簭瀛楁鍚嶇О
+            direction: "ASC", //鎺掑簭鏂瑰悜
+          },
+        },
+      },
+    };
+  },
+  created() {
+    this.fetchData();
+  },
+  methods: {
+    handleSizeChange(val) {
+      this.data.pageIn.size = val;
+      this.fetchData("pageIn");
     },
-    methods: {
-      fetchData() {
+    handleCurrentChange(val) {
+      this.data.pageIn.index = val - 1;
+      this.fetchData("pageIn");
+    },
+    fetchData(_val) {
+      if (_val !== "pageIn") {
+        this.data.pageIn.index = 0;
+        this.data.pageIn.size = 10;
+      }
+      this.listLoading = true;
+      if (this.activeName == "comment") {
         this.listLoading = true;
-        getList().then((response) => {
-          this.list = response.data.items;
+        getSessionWithComment(this.data).then((response) => {
+          this.list = response.data.findSessionWithComment.ls;
+          this.total = response.data.findSessionWithComment.pageOut.total;
           this.listLoading = false;
         });
-      },
+      } else if (this.activeName == "other") {
+        this.listLoading = true;
+        let data = {
+          commentTypes: ["DIRECT_COMMENT"],
+          staffId: JSON.parse(localStorage.getItem("user")).staffs[0].id,
+          keyword: this.data.keyword,
+          pageIn: { ...this.data.pageIn },
+        };
+        data.pageIn.sorts.name = "createTime";
+        data.pageIn.sorts.direction = "DESC";
+        getHomeworkCommentByAuth(data).then((response) => {
+          this.list = response.data.findHomeworkCommentByAuth.ls;
+          this.total = response.data.findHomeworkCommentByAuth.pageOut.total;
+          this.listLoading = false;
+        });
+      }
     },
-  };
-  </script>
-  
\ No newline at end of file
+  },
+};
+</script>
diff --git a/src/views/curriculum/index.vue b/src/views/curriculum/index.vue
index c1fbb06..de71a49 100644
--- a/src/views/curriculum/index.vue
+++ b/src/views/curriculum/index.vue
@@ -1,131 +1,271 @@
 <template>
-  <div class="app-container">
-    <el-tabs v-model="activeName" @tab-click="handleClick">
-      <el-tab-pane label="璇剧▼" name="first" />
-      <el-tab-pane label="鏁欏笀" name="fourth" />
-      <el-tab-pane label="鍦哄湴" name="xxx" />
+  <div style="padding: 20px">
+    <el-tabs v-model="activeName" @tab-click="getCourses">
+      <el-tab-pane label="璇剧▼" name="course" />
+      <el-tab-pane label="鏁欏笀" name="teacher" />
+      <el-tab-pane label="鍦哄湴" name="site" />
     </el-tabs>
-    <div>
-      <div style="width: 300px">
-        <el-date-picker v-model="timeData" type="date" placeholder="閫夋嫨鏃ユ湡">
-        </el-date-picker>
-      </div>
-      <div style="display: flex">
-        <div class="timetable-b w100">
-          <table class="timetable-content w100">
-            <thead>
-              <tr>
-                <th></th>
-                <th v-for="(item1, index1) in weeks" :key="index1">
-                  xxx
-                </th>
-              </tr>
-            </thead>
-            <tbody>
-              <tr v-for="(item2, index2) in maxCourseLength" :key="index2">
-                <td>
-                  <p>{{ xxx }}</p>
-                </td>
-                <template v-for="(item3, index3) in weeks">
-                  <td
-                    :key="index3"
-                    :rowspan="
-                      showData(index3, index2 + 1).subject &&
-                      showData(index3, index2).subject ===
-                        showData(index3, index2 + 1).subject
-                        ? 2
-                        : ''
-                    "
-                    :style="[
-                      {
-                        display:
-                          showData(index3, index2 - 1).subject &&
-                          showData(index3, index2 - 1).subject ===
-                            showData(index3, index2).subject
-                            ? 'none'
-                            : '',
-                      },
-                    ]"
-                  >
-                    <div
-                      class="dmsjandjs-b"
-                      :style="[
-                        {
-                          background: showData(index3, index2).index
-                            ? getRandomColor()
-                            : '#FFFFFF',
-                        },
-                        { color: '#fff' },
-                        { borderRadius: '15px' },
-                        { padding: '12px' },
-                        { height: '100%' },
-                      ]"
-                    >
-                      <p>
-                        {{ showData(index3, index2).startTime }}
-                        {{ showData(index3, index2).startTime ? "-" : "" }}
-                        {{ showData(index3, index2).endTime }}
-                      </p>
-                      <p>{{ showData(index3, index2).subject }}</p>
-                      <p>{{ showData(index3, index2).major }}</p>
-                      <p>{{ showData(index3, index2).class }}</p>
-                    </div>
-                  </td>
-                </template>
-              </tr>
-            </tbody>
-          </table>
+    <div style="margin-bottom: 20px">
+      <el-date-picker
+        v-model="time"
+        type="date"
+        size="small"
+        placeholder="閫夋嫨鏃ユ湡"
+        @change="getCourses"
+      >
+      </el-date-picker>
+    </div>
+    <el-row>
+      <el-col :span="1" style="margin-top: 7px"
+        ><div
+          class=""
+          v-for="i in tiemData"
+          :key="i"
+          style="display: flex; flex-direction: row-reverse; margin: 32px 10px"
+        >
+          {{ i }}
+        </div></el-col
+      >
+      <el-col :span="23">
+        <div class="table_box">
+          <div
+            :style="{ display: 'flex', width: dataList.length * 200 + 'px' }"
+          >
+            <div
+              v-for="(i, index) in dataList"
+              :key="i.id"
+              class="header_box"
+              :id="0 < index ? 'header_boxA' : ''"
+            >
+              {{ i.name }}
+            </div>
+          </div>
+          <div style="display: flex; position: relative">
+            <div v-for="(i, index) in dataList" :key="i.id">
+              <div class="body_box" :id="0 < index ? 'header_boxA' : ''"></div>
+              <div class="body_box" :id="0 < index ? 'header_boxA' : ''"></div>
+              <div class="body_box" :id="0 < index ? 'header_boxA' : ''"></div>
+              <div class="body_box" :id="0 < index ? 'header_boxA' : ''"></div>
+              <div class="body_box" :id="0 < index ? 'header_boxA' : ''"></div>
+              <div class="body_box" :id="0 < index ? 'header_boxA' : ''"></div>
+              <div class="body_box" :id="0 < index ? 'header_boxA' : ''"></div>
+              <div class="body_box" :id="0 < index ? 'header_boxA' : ''"></div>
+              <div class="body_box" :id="0 < index ? 'header_boxA' : ''"></div>
+              <div class="body_box" :id="0 < index ? 'header_boxA' : ''"></div>
+              <div class="body_box" :id="0 < index ? 'header_boxA' : ''"></div>
+              <div class="body_box" :id="0 < index ? 'header_boxA' : ''"></div>
+              <div class="body_box" :id="0 < index ? 'header_boxA' : ''"></div>
+              <div
+                v-for="(j, index) in i.sessions"
+                :key="index"
+                :style="{
+                  width: '200px',
+                  backgroundColor: j.color,
+                  position: 'absolute',
+                  top: getTop(j.beginTime),
+                  height: getHeight(j.beginTime, j.endTime),
+                  borderRadius: '5px',
+                  fontSize: '15px',
+                }"
+                @click="lookDetails(j)"
+              >
+                <div>{{ j.staffNames }}</div>
+                <span>{{ j.placeNames }}</span>
+                <div>
+                  瀛﹀憳锛歿{ j.playerCount }}浜� 璇峰亣锛歿{ j.placeCount }}浜�
+                </div>
+              </div>
+            </div>
+          </div>
+        </div>
+      </el-col>
+    </el-row>
+    <el-drawer :title="drawerTime" :visible.sync="drawer" direction="rtl">
+      <div v-if="drawerIf">
+        <div style="display: flex; justify-content: center">
+          <i class="el-icon-time"></i> {{ headerTime }}
+        </div>
+        <div>
+          <el-form ref="form" label-width="80px">
+            <el-form-item label="璇剧▼">
+              <span>{{ formData.courseName }}</span>
+            </el-form-item>
+            <el-form-item label="鑰佸笀">
+              <span>{{ formData.staffNames }}</span>
+            </el-form-item>
+            <el-form-item label="鍦哄湴">
+              <span>{{ formData.placeNames }}</span>
+            </el-form-item>
+            <el-form-item label="瀛﹀憳">
+              <div style="display: flex; align-items: center;">
+                <el-progress
+                  style="width: 300px"
+                  :percentage="
+                    Math.floor(
+                      (formData.playerCount / formData.playerMax) * 100
+                    )
+                  "
+                ></el-progress>
+                <span
+                  >瀛﹀憳{{ formData.playerCount }}浜�/涓婇檺{{
+                    formData.playerMax
+                  }}浜�</span
+                >
+              </div>
+            </el-form-item>
+          </el-form>
         </div>
       </div>
-    </div>
+    </el-drawer>
   </div>
 </template>
-
 <script>
-import { getList } from "@/api/table";
-
+import {
+  getBySessionExistsOfDay,
+  getSubjectByCourseAndDateRange,
+} from "@/api/curriculum";
 export default {
-  filters: {
-    statusFilter(status) {
-      const statusMap = {
-        published: "success",
-        draft: "gray",
-        deleted: "danger",
-      };
-      return statusMap[status];
+  props: {
+    // 涓嬪崍鑺傛鏁�
+    afternoonLength: {
+      type: [String, Number],
+      default: 6,
     },
+    // 鎬昏妭娆�
+    length: {
+      type: [String, Number],
+      default: 14,
+    },
+    // 璇捐〃鏁版嵁
+    // events: {
+    //   type: Array,
+    //   default: this.events1,
+    // },
   },
   data() {
     return {
-      list: null,
-      listLoading: true,
-      activeName: "first",
-      timeData: new Date(),
+      // 璇剧▼琛ㄦ暟鎹�
+      tiemData: [
+        "07:00",
+        "08:00",
+        "09:00",
+        "10:00",
+        "11:00",
+        "12:00",
+        "13:00",
+        "14:00",
+        "15:00",
+        "16:00",
+        "17:00",
+        "18:00",
+        "19:00",
+        "20:00",
+      ],
+      time: new Date(),
+      dataList: [],
+      drawerTime: new Date(),
+      drawerIf: true,
+      drawer: false,
+      headerTime: "",
+      formData: {},
+      activeName:'course'
     };
   },
+  mounted() {
+    this.mergeData();
+  },
+  watch: {
+    events: {
+      handler(newVal, oldVal) {
+        this.mergeData();
+      },
+      deep: true,
+    },
+  },
   created() {
-    this.fetchData();
+    this.getCourses();
   },
   methods: {
-    fetchData() {
-      this.listLoading = true;
-      getList().then((response) => {
-        this.list = response.data.items;
-        this.listLoading = false;
+    getCourses() {
+      let data = {
+        staffId: JSON.parse(localStorage.getItem("user")).staffs[0].id,
+        day: this.getYMD(this.time),
+      };
+      getBySessionExistsOfDay(data).then((res) => {
+        let courseIds = [];
+        res.data.findBySessionExistsOfDay.map((i) => {
+          courseIds.push(i.id);
+        });
+        let params = {
+          staffId: JSON.parse(localStorage.getItem("user")).staffs[0].id,
+          beginDate: this.getYMD(this.time),
+          endDate: this.getYMD(this.time),
+          courseIds: courseIds,
+        };
+        getSubjectByCourseAndDateRange(params).then((res) => {
+          this.dataList = res.data.findSubjectByCourseAndDateRange[0].subjects;
+        });
       });
     },
-     //闅忔満鑾峰彇棰滆壊
-     getRandomColor() {
-      let colorList = this.colorList;
-      let colorRandom = Math.floor(Math.random() * colorList.length + 1) - 1;
-      let color;
-      for (let i = 0; colorList.length > i; i++) {
-        if (i == colorRandom) {
-          color = colorList[i];
-        }
-      }
-      return color;
+    getYMD(time) {
+      const year = time.getFullYear();
+      const month = (time.getMonth() + 1).toString().padStart(2, "0");
+      const day = time.getDate().toString().padStart(2, "0");
+      return `${year}/${month}/${day}`;
+    },
+    getTop(time) {
+      let tiemData = new Date(time);
+      return (tiemData.getHours() - 7 + tiemData.getMinutes() / 60) * 50 + "px";
+    },
+    getHeight(beginTime, endTime) {
+      let time = new Date(beginTime);
+      let timeA = new Date(endTime);
+      return ((timeA - time) / 1000 / 60 / 60) * 50 + "px";
+    },
+    lookDetails(i) {
+      const month = (this.time.getMonth() + 1).toString().padStart(2, "0");
+      const day = this.time.getDate().toString().padStart(2, "0");
+      this.drawerTime = `${month}/${day}(${this.getDayOfWeek(this.time)})`;
+      this.headerTime =
+        new Date(i.beginTime).getHours().toString().padStart(2, "0") +
+        ":" +
+        new Date(i.beginTime).getMinutes().toString().padStart(2, "0") +
+        "-" +
+        new Date(i.endTime).getHours().toString().padStart(2, "0") +
+        ":" +
+        new Date(i.endTime).getMinutes().toString().padStart(2, "0");
+      this.formData = i;
+      this.drawer = true;
+    },
+    getDayOfWeek(timestamp) {
+      const days = ["鍛ㄦ棩", "鍛ㄤ竴", "鍛ㄤ簩", "鍛ㄤ笁", "鍛ㄥ洓", "鍛ㄤ簲", "鍛ㄥ叚"];
+      const date = new Date(timestamp);
+      return days[date.getDay()];
     },
   },
 };
 </script>
+<style scoped>
+.table_box {
+  overflow-x: auto;
+  white-space: nowrap;
+}
+.header_box {
+  height: 50px;
+  width: 200px;
+  border: 2px solid rgb(165, 165, 165);
+  background-color: rgb(212, 241, 255);
+  display: flex;
+  align-items: center;
+  justify-content: center;
+}
+#header_boxA {
+  border-left: none;
+}
+.body_box {
+  height: 50px;
+  width: 200px;
+  border: 2px solid rgb(165, 165, 165);
+  border-top: none;
+}
+</style>
diff --git a/src/views/development/index.vue b/src/views/development/index.vue
index c619222..26bd43e 100644
--- a/src/views/development/index.vue
+++ b/src/views/development/index.vue
@@ -1,124 +1,202 @@
 <template>
-    <div class="app-container">
-      <el-tabs v-model="activeName" @tab-click="handleClick">
-        <el-tab-pane label="鍏ㄩ儴" name="first">
-          <div style="display: flex; flex-direction: row-reverse">
-            <div style="width: 300px">
-              <el-input
-                placeholder="鎸夋爣棰樻悳绱�"
-                v-model="input3"
-                class="input-with-select"
-                size="small"
-              >
-                <el-button slot="append" icon="el-icon-search"></el-button>
-              </el-input>
-            </div>
+  <div class="app-container">
+    <el-tabs v-model="activeName" @tab-click="fetchData">
+      <el-tab-pane label="鍏ㄩ儴" name="all">
+        <div style="display: flex; flex-direction: row-reverse">
+          <div style="width: 300px">
+            <el-input
+              placeholder="鎸夋爣棰樻悳绱�"
+              v-model="data.keyword"
+              class="input-with-select"
+              size="small"
+            >
+              <el-button
+                slot="append"
+                icon="el-icon-search"
+                @click="fetchData"
+              ></el-button>
+            </el-input>
           </div>
+        </div>
+        <div style="height: calc(100vh - 248px)">
           <el-table
             v-loading="listLoading"
             :data="list"
             element-loading-text="Loading"
             fit
+            height="100%"
           >
             <el-table-column label="鏍囬">
-              <template slot-scope=""> xxxxx </template>
+              <template slot-scope="scope">
+                <el-link type="primary" :underline="false">{{
+                  scope.row.name
+                }}</el-link>
+              </template>
             </el-table-column>
-            <el-table-column label="鍒嗙被" width="80">
-              <template slot-scope=""> 鐢� </template>
-            </el-table-column>
-            <el-table-column label="璋佸惁鍏紑" width="200">
-              <template slot-scope=""> 10086 </template>
-            </el-table-column>
-            <el-table-column label="鐝骇" width="200">
-              <template slot-scope=""> asfiaf </template>
-            </el-table-column>
-            <el-table-column label="瀛﹀憳" width="">
-              <template slot-scope=""> asfiaf </template>
+            <el-table-column label="鍒嗙被" width="" prop="category">
             </el-table-column>
             <el-table-column label="鏁欏笀" width="">
-              <template slot-scope=""> 鐐硅瘎 </template>
+              <template slot-scope="scope">{{
+                scope.row.publisher.name
+              }}</template>
             </el-table-column>
-            <el-table-column label="鍐呭" width="">
-              <template slot-scope=""> 鐐硅瘎 </template>
-            </el-table-column>
-            <el-table-column label="鎿嶄綔" width="">
-              <template slot-scope=""> 淇敼 </template>
+            <el-table-column label="鐐硅瘎鏃堕棿" width="" prop="createTime">
             </el-table-column>
           </el-table>
-        </el-tab-pane>
-        <el-tab-pane label="璇剧▼" name="fourth">
-          <div style="display: flex; flex-direction: row-reverse">
-            <div style="width: 300px">
-              <el-input
-                placeholder="鎸夊鍛樺悕绉版悳绱�"
-                v-model="input3"
-                class="input-with-select"
-                size="small"
-              >
-                <el-button slot="append" icon="el-icon-search"></el-button>
-              </el-input>
-            </div>
+        </div>
+        <div>
+          <el-pagination
+            @size-change="handleSizeChange"
+            @current-change="handleCurrentChange"
+            :current-page="data.pageIn.index + 1"
+            :page-sizes="[10, 20, 30, 40]"
+            :page-size="data.pageIn.size"
+            layout="total, sizes, prev, pager, next, jumper"
+            :total="total"
+          >
+          </el-pagination>
+        </div>
+      </el-tab-pane>
+      <el-tab-pane label="璇剧▼" name="other">
+        <div style="display: flex; flex-direction: row-reverse">
+          <div style="width: 300px">
+            <el-input
+              placeholder="鎸夊鍛樺悕绉版悳绱�"
+              v-model="data.keyword"
+              class="input-with-select"
+              size="small"
+            >
+              <el-button slot="append" icon="el-icon-search" @click="fetchData"></el-button>
+            </el-input>
           </div>
+        </div>
+        <div style="height: calc(100vh - 248px)">
           <el-table
             v-loading="listLoading"
             :data="list"
             element-loading-text="Loading"
             fit
+            height="100%"
           >
             <el-table-column label="璇剧▼">
-              <template slot-scope=""> xxxxx </template>
+              <template slot-scope="scope">
+                <el-link type="primary" :underline="false">{{
+                  scope.row.courseName
+                }}</el-link>
+              </template>
             </el-table-column>
-            <el-table-column label="鏃堕棿" width="80">
-              <template slot-scope=""> 鐢� </template>
+            <el-table-column label="寮�濮嬫椂闂�" width="" prop="beginTime">
             </el-table-column>
-            <el-table-column label="瀛﹀憳鏁�" width="200">
-              <template slot-scope=""> 10086 </template>
+            <el-table-column label="缁撴潫鏃堕棿" width="" prop="endTime">
             </el-table-column>
-            <el-table-column label="宸茶褰曟暟" width="200">
-              <template slot-scope=""> asfiaf </template>
+            <el-table-column label="瀛﹀憳鏁�" width="" prop="playerCount">
             </el-table-column>
-            <el-table-column label="鎿嶄綔" width="">
-              <template slot-scope=""> 璁板綍 </template>
+            <el-table-column label="宸茶褰曟暟" width="" prop="commentCount">
             </el-table-column>
           </el-table>
-        </el-tab-pane>
-      </el-tabs>
-    </div>
-  </template>
-  
-  <script>
-  import { getList } from "@/api/table";
-  
-  export default {
-    filters: {
-      statusFilter(status) {
-        const statusMap = {
-          published: "success",
-          draft: "gray",
-          deleted: "danger",
-        };
-        return statusMap[status];
-      },
-    },
-    data() {
-      return {
-        list: null,
-        listLoading: true,
-        activeName: "first",
+        </div>
+        <div>
+          <el-pagination
+            @size-change="handleSizeChange"
+            @current-change="handleCurrentChange"
+            :current-page="data.pageIn.index + 1"
+            :page-sizes="[10, 20, 30, 40]"
+            :page-size="data.pageIn.size"
+            layout="total, sizes, prev, pager, next, jumper"
+            :total="total"
+          >
+          </el-pagination>
+        </div>
+      </el-tab-pane>
+    </el-tabs>
+  </div>
+</template>
+
+<script>
+import { getHomeworkByType, getSessionHomeworkDto } from "@/api/development";
+
+export default {
+  filters: {
+    statusFilter(status) {
+      const statusMap = {
+        published: "success",
+        draft: "gray",
+        deleted: "danger",
       };
+      return statusMap[status];
     },
-    created() {
-      this.fetchData();
+  },
+  data() {
+    return {
+      list: null,
+      listLoading: true,
+      activeName: "all",
+      total: 0,
+      data: {
+        staffId: JSON.parse(localStorage.getItem("user")).staffs[0].id,
+        keyword: "",
+        pageIn: {
+          //鍙�夛紝濡傛灉鏄垎椤垫煡璇紝闇�瑕佸姞涓娿��
+          index: 0, //蹇呴��
+          size: 10, //姣忛〉鐨勫ぇ灏忋�傞粯璁�20
+          sorts: [
+            {
+              name: "name", //鎺掑簭瀛楁鍚嶇О
+              direction: "ASC", //鎺掑簭鏂瑰悜
+            },
+            {
+              name: "createTime",
+              direction: "DESC",
+            },
+          ],
+        },
+        homeworkType: "GROWTH",
+      },
+    };
+  },
+  created() {
+    this.fetchData();
+  },
+  methods: {
+    handleSizeChange(val) {
+      this.data.pageIn.size = val;
+      this.fetchData("pageIn");
     },
-    methods: {
-      fetchData() {
+    handleCurrentChange(val) {
+      this.data.pageIn.index = val - 1;
+      this.fetchData("pageIn");
+    },
+    fetchData(_val) {
+      if (_val !== "pageIn") {
+        this.data.pageIn.index = 0;
+        this.data.pageIn.size = 10;
+      }
+      this.listLoading = true;
+      if (this.activeName == "all") {
         this.listLoading = true;
-        getList().then((response) => {
-          this.list = response.data.items;
+        getHomeworkByType(this.data).then((response) => {
+          this.list = response.data.findHomeworkByType.ls;
+          this.total = response.data.findHomeworkByType.pageOut.total;
           this.listLoading = false;
         });
-      },
+      } else if (this.activeName == "other") {
+        this.listLoading = true;
+        let data = {
+          staffId: JSON.parse(localStorage.getItem("user")).staffs[0].id,
+          keyword: this.data.keyword,
+          pageIn: { ...this.data.pageIn },
+        };
+        data.pageIn.sorts = {
+          direction: "DESC",
+          name: "beginTime",
+        };
+        getSessionHomeworkDto(data).then((response) => {
+          this.list = response.data.findSessionHomeworkDto.ls;
+          this.total = response.data.findSessionHomeworkDto.pageOut.total;
+          this.listLoading = false;
+        });
+      }
     },
-  };
-  </script>
-  
\ No newline at end of file
+  },
+};
+</script>
diff --git a/src/views/home/components/chart.vue b/src/views/home/components/chart.vue
new file mode 100644
index 0000000..aa5e300
--- /dev/null
+++ b/src/views/home/components/chart.vue
@@ -0,0 +1,67 @@
+<template>
+  <div class="dashboard-container">
+    <div :id="data.value" style="height: 260px; width: 100%"></div>
+  </div>
+</template>
+
+<script>
+import * as echarts from "echarts";
+
+export default {
+  name: "Chart",
+  props:{
+    data: {
+      type: Object,
+    }
+  },
+  mounted() {
+    this.loadEcharts();
+  },
+  methods: {
+    //鍔犺浇echarts
+    loadEcharts() {
+      // 鍩轰簬鍑嗗濂界殑dom锛屽垵濮嬪寲echarts瀹炰緥
+      var myChart = echarts.init(document.getElementById(this.data.value));
+      // 缁樺埗鍥捐〃
+      myChart.setOption({
+        title: {
+          text: this.data.lable,
+        },
+        xAxis: {
+          type: "category",
+          data: [
+            "8鏈�4鍙�",
+            "8鏈�4鍙�",
+            "8鏈�4鍙�",
+            "8鏈�4鍙�",
+            "8鏈�4鍙�",
+            "8鏈�4鍙�",
+            "8鏈�4鍙�",
+          ],
+        },
+        yAxis: {
+          type: "value",
+        },
+        series: [
+          {
+            data: [150, 230, 224, 218, 135, 147, 260],
+            type: "line",
+          },
+        ],
+      });
+    },
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+.dashboard {
+  &-container {
+    margin: 30px;
+  }
+  &-text {
+    font-size: 30px;
+    line-height: 46px;
+  }
+}
+</style>
diff --git a/src/views/home/index.vue b/src/views/home/index.vue
index 0824cae..c9254e9 100644
--- a/src/views/home/index.vue
+++ b/src/views/home/index.vue
@@ -1,29 +1,56 @@
 <template>
   <div class="dashboard-container">
-    <div class="dashboard-text">name: {{ name }}</div>
     <el-button @click="getUserDate">鐧诲綍</el-button>
+    <div>
+      <div>
+        <Chart :data="data1"></Chart>
+      </div>
+      <div>
+        <Chart :data="data2"></Chart>
+      </div>
+      <div>
+        <Chart :data="data3"></Chart>
+      </div>
+    </div>
   </div>
 </template>
 
 <script>
 import { mapGetters } from "vuex";
 import { login } from "@/api/user";
+import Chart from "./components/chart.vue";
 
 export default {
   name: "Dashboard",
+  components: {
+    Chart,
+  },
   computed: {
     ...mapGetters(["name"]),
   },
-  created() {
-    // this.getUserDate();
+  data(){
+    return{
+      data1:{
+        value:'course',
+        lable:'璇炬秷'
+      },
+      data2:{
+        value:'student',
+        lable:'瀛﹀憳'
+      },
+      data3:{
+        value:'class',
+        lable:'鑰冨嫟'
+      }
+    }
   },
+  mounted() {},
   methods: {
     getUserDate() {
       login({
-        code: "061akYFa14JATH0EzoIa1NNVTC3akYFI"
-      }
-      ).then((res) => {
-       localStorage.setItem('user',JSON.stringify(res.data))
+        code: "0913JF000eW6BS1rZ3100FQTUM03JF05",
+      }).then((res) => {
+        localStorage.setItem("user", JSON.stringify(res.data));
       });
     },
   },
diff --git a/src/views/integral/index.vue b/src/views/integral/index.vue
index f2ff00c..9104d43 100644
--- a/src/views/integral/index.vue
+++ b/src/views/integral/index.vue
@@ -1,106 +1,195 @@
 <template>
-    <div class="app-container">
-      <el-tabs v-model="activeName" @tab-click="handleClick">
-        <el-tab-pane label="鎸夊鍛�" name="first">
-          <div style="display: flex; flex-direction: row-reverse">
-            <div style="width: 300px">
-              <el-input
-                placeholder="鎸夋爣棰樻悳绱�"
-                v-model="input3"
-                class="input-with-select"
-                size="small"
-              >
-                <el-button slot="append" icon="el-icon-search"></el-button>
-              </el-input>
-            </div>
+  <div class="app-container">
+    <el-tabs v-model="activeName" @tab-click="fetchData">
+      <el-tab-pane label="鎸夊鍛�" name="student">
+        <div style="display: flex; flex-direction: row-reverse">
+          <div style="width: 300px">
+            <el-input
+              placeholder="鎸夋爣棰樻悳绱�"
+              v-model="data.keyword"
+              class="input-with-select"
+              size="small"
+            >
+              <el-button
+                slot="append"
+                icon="el-icon-search"
+                @click="fetchData"
+              ></el-button>
+            </el-input>
           </div>
+        </div>
+        <div style="height: calc(100vh - 248px)">
           <el-table
             v-loading="listLoading"
             :data="list"
             element-loading-text="Loading"
             fit
+            height="100%"
           >
             <el-table-column label="濮撳悕">
-              <template slot-scope=""> xxxxx </template>
+              <template slot-scope="scope">
+                <el-link type="primary" :underline="false">{{
+                  scope.row.playerName
+                }}</el-link>
+              </template>
             </el-table-column>
-            <el-table-column label="绉垎" width="80">
-              <template slot-scope=""> 鐢� </template>
+            <el-table-column label="绉垎" width="" prop="qty">
             </el-table-column>
-            <el-table-column label="鏇存柊鏃堕棿" width="200">
-              <template slot-scope=""> 10086 </template>
+            <el-table-column label="鏇存柊鏃堕棿" width="" prop="modifyTime">
             </el-table-column>
             <el-table-column label="鎿嶄綔" width="">
               <template slot-scope=""> 鍏戞崲 鍙戞斁 </template>
             </el-table-column>
           </el-table>
-        </el-tab-pane>
-        <el-tab-pane label="鎸夌彮绾�" name="fourth">
-          <div style="display: flex; flex-direction: row-reverse">
-            <div style="width: 300px">
-              <el-input
-                placeholder="鎸夊鍛樺悕绉版悳绱�"
-                v-model="input3"
-                class="input-with-select"
-                size="small"
-              >
-                <el-button slot="append" icon="el-icon-search"></el-button>
-              </el-input>
-            </div>
+        </div>
+        <div>
+          <el-pagination
+            @size-change="handleSizeChange"
+            @current-change="handleCurrentChange"
+            :current-page="data.pageIn.index + 1"
+            :page-sizes="[10, 20, 30, 40]"
+            :page-size="data.pageIn.size"
+            layout="total, sizes, prev, pager, next, jumper"
+            :total="total"
+          >
+          </el-pagination>
+        </div>
+      </el-tab-pane>
+      <el-tab-pane label="鎸夌彮绾�" name="class">
+        <div style="display: flex; flex-direction: row-reverse">
+          <div style="width: 300px">
+            <el-input
+              placeholder="鎸夊鍛樺悕绉版悳绱�"
+              v-model="data.keyword"
+              class="input-with-select"
+              size="small"
+            >
+              <el-button
+                slot="append"
+                icon="el-icon-search"
+                @click="fetchData"
+              ></el-button>
+            </el-input>
           </div>
+        </div>
+        <div style="height: calc(100vh - 248px)">
           <el-table
             v-loading="listLoading"
             :data="list"
             element-loading-text="Loading"
             fit
+            height="100%"
           >
             <el-table-column label="鐝骇">
-              <template slot-scope=""> xxxxx </template>
+              <template slot-scope="scope">
+                <el-link type="primary" :underline="false">{{
+                  scope.row.team.name
+                }}</el-link>
+              </template>
             </el-table-column>
-            <el-table-column label="瀛﹀憳浜烘暟" width="80">
-              <template slot-scope=""> 鐢� </template>
+            <el-table-column label="瀛﹀憳浜烘暟" width="" prop="playerCount">
             </el-table-column>
             <el-table-column label="鎿嶄綔" width="">
               <template slot-scope=""> 鍙戞斁 </template>
             </el-table-column>
           </el-table>
-        </el-tab-pane>
-      </el-tabs>
-    </div>
-  </template>
-  
-  <script>
-  import { getList } from "@/api/table";
-  
-  export default {
-    filters: {
-      statusFilter(status) {
-        const statusMap = {
-          published: "success",
-          draft: "gray",
-          deleted: "danger",
-        };
-        return statusMap[status];
-      },
-    },
-    data() {
-      return {
-        list: null,
-        listLoading: true,
-        activeName: "first",
+        </div>
+        <div>
+          <el-pagination
+            @size-change="handleSizeChange"
+            @current-change="handleCurrentChange"
+            :current-page="data.pageIn.index + 1"
+            :page-sizes="[10, 20, 30, 40]"
+            :page-size="data.pageIn.size"
+            layout="total, sizes, prev, pager, next, jumper"
+            :total="total"
+          >
+          </el-pagination>
+        </div>
+      </el-tab-pane>
+    </el-tabs>
+  </div>
+</template>
+
+<script>
+import { getPlayerScore, getTeamDtoAll } from "@/api/integral";
+
+export default {
+  filters: {
+    statusFilter(status) {
+      const statusMap = {
+        published: "success",
+        draft: "gray",
+        deleted: "danger",
       };
+      return statusMap[status];
     },
-    created() {
-      this.fetchData();
+  },
+  data() {
+    return {
+      list: null,
+      listLoading: true,
+      activeName: "student",
+      total: 0,
+      data: {
+        staffId: JSON.parse(localStorage.getItem("user")).staffs[0].id,
+        keyword: "",
+        pageIn: {
+          //鍙�夛紝濡傛灉鏄垎椤垫煡璇紝闇�瑕佸姞涓娿��
+          index: 0, //蹇呴��
+          size: 10, //姣忛〉鐨勫ぇ灏忋�傞粯璁�20
+          sorts: [
+            { name: "v.id", direction: "DESC" },
+            { name: "acc.modify_time", direction: "DESC" },
+          ],
+        },
+      },
+    };
+  },
+  created() {
+    this.fetchData();
+  },
+  methods: {
+    handleSizeChange(val) {
+      this.data.pageIn.size = val;
+      this.fetchData("pageIn");
     },
-    methods: {
-      fetchData() {
+    handleCurrentChange(val) {
+      this.data.pageIn.index = val - 1;
+      this.fetchData("pageIn");
+    },
+    fetchData(_val) {
+      if (_val !== "pageIn") {
+        this.data.pageIn.index = 0;
+        this.data.pageIn.size = 10;
+      }
+      this.listLoading = true;
+      if (this.activeName == "student") {
         this.listLoading = true;
-        getList().then((response) => {
-          this.list = response.data.items;
+        getPlayerScore(this.data).then((response) => {
+          this.list = response.data.findPlayerScore.ls;
+          this.total = response.data.findPlayerScore.pageOut.total;
           this.listLoading = false;
         });
-      },
+      } else if (this.activeName == "class") {
+        this.listLoading = true;
+        let data = {
+          types: ["NORMAL"],
+          staffId: JSON.parse(localStorage.getItem("user")).staffs[0].id,
+          keyword: this.data.keyword,
+          pageIn: { ...this.data.pageIn },
+        };
+        data.pageIn.sorts = [
+          { name: "createTime", direction: "DESC" },
+          { name: "name", direction: "ASC" },
+        ];
+        getTeamDtoAll(data).then((response) => {
+          this.list = response.data.findTeamDtoAll.ls;
+          this.total = response.data.findTeamDtoAll.pageOut.total;
+          this.listLoading = false;
+        });
+      }
     },
-  };
-  </script>
-  
\ No newline at end of file
+  },
+};
+</script>
diff --git a/src/views/rollCall/index.vue b/src/views/rollCall/index.vue
index a42846b..6f529cd 100644
--- a/src/views/rollCall/index.vue
+++ b/src/views/rollCall/index.vue
@@ -1,115 +1,291 @@
 <template>
-    <div class="app-container">
-      <el-tabs v-model="activeName" @tab-click="handleClick">
-        <el-tab-pane label="鎸夊鍛�" name="first">
-          <div style="display: flex; flex-direction: row-reverse">
-            <div style="width: 300px">
-              <el-input
-                placeholder="鎸夋爣棰樻悳绱�"
-                v-model="input3"
-                class="input-with-select"
-                size="small"
-              >
-                <el-button slot="append" icon="el-icon-search"></el-button>
-              </el-input>
-            </div>
+  <div class="app-container">
+    <el-tabs v-model="activeName" @tab-click="fetchData">
+      <el-tab-pane label="鎸夊鍛�" name="student">
+        <div style="display: flex; flex-direction: row-reverse">
+          <div style="width: 300px">
+            <el-input
+              placeholder="鎸夋爣棰樻悳绱�"
+              v-model="data.keyword"
+              class="input-with-select"
+              size="small"
+            >
+              <el-button
+                slot="append"
+                icon="el-icon-search"
+                @click="fetchData"
+              ></el-button>
+            </el-input>
           </div>
+        </div>
+        <div style="height: calc(100vh - 248px)">
           <el-table
             v-loading="listLoading"
             :data="list"
             element-loading-text="Loading"
             fit
+            height="100%"
           >
             <el-table-column label="濮撳悕">
-              <template slot-scope=""> xxxxx </template>
+              <template slot-scope="scope">
+                <el-link type="primary" :underline="false">{{
+                  scope.row.player.name
+                }}</el-link>
+              </template>
             </el-table-column>
-            <el-table-column label="璇惧寘/浼氬憳鍗�" width="80">
-              <template slot-scope=""> 鐢� </template>
+            <el-table-column label="璇惧寘/浼氬憳鍗�" width="">
+              <template slot-scope="scope"
+                >{{ scope.row.voucher.name }}
+              </template>
             </el-table-column>
-            <el-table-column label="涓婅鏃ユ湡" width="200">
-              <template slot-scope=""> 10086 </template>
+            <el-table-column label="浣欓" width="" prop="qty">
             </el-table-column>
-            <el-table-column label="璇剧▼鏃堕暱" width="200">
-              <template slot-scope=""> 10086 </template>
-            </el-table-column>
-            <el-table-column label="寮�濮嬫椂闂�" width="200">
-              <template slot-scope=""> 10086 </template>
-            </el-table-column>
-            <el-table-column label="璇炬秷鏁伴噺" width="200">
-              <template slot-scope=""> 10086 </template>
+            <el-table-column label="鍒版湡鏃堕棿" width="" prop="endDate">
+              <template slot-scope="scope"
+                >{{ timeCompare(scope.row.endDate) }}
+              </template>
             </el-table-column>
             <el-table-column label="鎿嶄綔" width="">
-              <template slot-scope=""> 鍏戞崲 鍙戞斁 </template>
+              <template slot-scope=""> 鐐瑰悕 </template>
             </el-table-column>
           </el-table>
-        </el-tab-pane>
-        <el-tab-pane label="鎸夌彮绾�" name="fourth">
-          <div style="display: flex; flex-direction: row-reverse">
-            <div style="width: 300px">
-              <el-input
-                placeholder="鎸夊鍛樺悕绉版悳绱�"
-                v-model="input3"
-                class="input-with-select"
-                size="small"
-              >
-                <el-button slot="append" icon="el-icon-search"></el-button>
-              </el-input>
-            </div>
+        </div>
+        <div>
+          <el-pagination
+            @size-change="handleSizeChange"
+            @current-change="handleCurrentChange"
+            :current-page="data.pageIn.index + 1"
+            :page-sizes="[10, 20, 30, 40]"
+            :page-size="data.pageIn.size"
+            layout="total, sizes, prev, pager, next, jumper"
+            :total="total"
+          >
+          </el-pagination>
+        </div>
+      </el-tab-pane>
+      <el-tab-pane label="鎸夌彮绾�" name="class">
+        <div style="display: flex; flex-direction: row-reverse">
+          <div style="width: 300px">
+            <el-input
+              placeholder="鎸夊鍛樺悕绉版悳绱�"
+              v-model="data.keyword"
+              class="input-with-select"
+              size="small"
+            >
+              <el-button
+                slot="append"
+                icon="el-icon-search"
+                @click="fetchData"
+              ></el-button>
+            </el-input>
           </div>
+        </div>
+        <div style="height: calc(100vh - 248px)">
           <el-table
             v-loading="listLoading"
             :data="list"
             element-loading-text="Loading"
             fit
+            height="100%"
           >
             <el-table-column label="鐝骇">
-              <template slot-scope=""> xxxxx </template>
-            </el-table-column>
-            <el-table-column label="瀛﹀憳浜烘暟" width="80">
-              <template slot-scope=""> 鐢� </template>
+              <template slot-scope="scope">
+                <el-link type="primary" :underline="false">{{
+                  scope.row.name
+                }}</el-link>
+              </template>
             </el-table-column>
             <el-table-column label="鎿嶄綔" width="">
-              <template slot-scope=""> 鍙戞斁 </template>
+              <template slot-scope=""> 鐐瑰悕 </template>
             </el-table-column>
           </el-table>
-        </el-tab-pane>
-      </el-tabs>
-    </div>
-  </template>
-  
-  <script>
-  import { getList } from "@/api/table";
-  
-  export default {
-    filters: {
-      statusFilter(status) {
-        const statusMap = {
-          published: "success",
-          draft: "gray",
-          deleted: "danger",
-        };
-        return statusMap[status];
-      },
-    },
-    data() {
-      return {
-        list: null,
-        listLoading: true,
-        activeName: "first",
+        </div>
+        <div>
+          <el-pagination
+            @size-change="handleSizeChange"
+            @current-change="handleCurrentChange"
+            :current-page="data.pageIn.index + 1"
+            :page-sizes="[10, 20, 30, 40]"
+            :page-size="data.pageIn.size"
+            layout="total, sizes, prev, pager, next, jumper"
+            :total="total"
+          >
+          </el-pagination>
+        </div>
+      </el-tab-pane>
+      <el-tab-pane label="鎸夎绋�" name="course">
+        <div style="display: flex; flex-direction: row-reverse">
+          <div style="width: 300px">
+            <el-input
+              placeholder="鎸夎绋嬪悕绉版悳绱�"
+              v-model="data.keyword"
+              class="input-with-select"
+              size="small"
+            >
+              <el-button
+                slot="append"
+                icon="el-icon-search"
+                @click="fetchData"
+              ></el-button>
+            </el-input>
+          </div>
+        </div>
+        <div style="height: calc(100vh - 248px)">
+          <el-table
+            v-loading="listLoading"
+            :data="list"
+            element-loading-text="Loading"
+            fit
+            height="100%"
+          >
+            <el-table-column label="璇剧▼">
+              <template slot-scope="scope">
+                <el-link type="primary" :underline="false">{{
+                  scope.row.courseName
+                }}</el-link>
+              </template>
+            </el-table-column>
+            <el-table-column label="寮�濮嬫椂闂�" width="" prop="beginTime">
+            </el-table-column>
+            <el-table-column label="缁撴潫鏃堕棿" width="" prop="endTime">
+            </el-table-column>
+            <el-table-column label="瀛﹀憳浜烘暟" width="" prop="playerCount">
+            </el-table-column>
+            <el-table-column label="鎿嶄綔" width="">
+              <template slot-scope=""> 鐐瑰悕 </template>
+            </el-table-column>
+          </el-table>
+        </div>
+        <div>
+          <el-pagination
+            @size-change="handleSizeChange"
+            @current-change="handleCurrentChange"
+            :current-page="data.pageIn.index + 1"
+            :page-sizes="[10, 20, 30, 40]"
+            :page-size="data.pageIn.size"
+            layout="total, sizes, prev, pager, next, jumper"
+            :total="total"
+          >
+          </el-pagination>
+        </div>
+      </el-tab-pane>
+    </el-tabs>
+  </div>
+</template>
+
+<script>
+import {
+  getPlayerAccByStaffWithRollCall,
+  getTeamByStaffWithRollCall,
+  getUnCompleteSession,
+} from "@/api/rollCall";
+
+export default {
+  filters: {
+    statusFilter(status) {
+      const statusMap = {
+        published: "success",
+        draft: "gray",
+        deleted: "danger",
       };
+      return statusMap[status];
     },
-    created() {
-      this.fetchData();
+  },
+  data() {
+    return {
+      list: null,
+      listLoading: true,
+      activeName: "student",
+      total: 0,
+      data: {
+        staffId: JSON.parse(localStorage.getItem("user")).staffs[0].id,
+        keyword: "",
+        pageIn: {
+          //鍙�夛紝濡傛灉鏄垎椤垫煡璇紝闇�瑕佸姞涓娿��
+          index: 0, //蹇呴��
+          size: 10, //姣忛〉鐨勫ぇ灏忋�傞粯璁�20
+          sorts: [
+            { name: "modifyTime", direction: "DESC" },
+            { name: "player.name", direction: "ASC" },
+          ],
+        },
+      },
+    };
+  },
+  created() {
+    this.fetchData();
+  },
+  methods: {
+    handleSizeChange(val) {
+      this.data.pageIn.size = val;
+      this.fetchData("pageIn");
     },
-    methods: {
-      fetchData() {
+    handleCurrentChange(val) {
+      this.data.pageIn.index = val - 1;
+      this.fetchData("pageIn");
+    },
+    fetchData(_val) {
+      if (_val !== "pageIn") {
+        this.data.pageIn.index = 0;
+        this.data.pageIn.size = 10;
+      }
+      this.listLoading = true;
+      if (this.activeName == "student") {
         this.listLoading = true;
-        getList().then((response) => {
-          this.list = response.data.items;
+        getPlayerAccByStaffWithRollCall(this.data).then((response) => {
+          this.list = response.data.findPlayerAccByStaffWithRollCall.ls;
+          this.total =
+            response.data.findPlayerAccByStaffWithRollCall.pageOut.total;
           this.listLoading = false;
         });
-      },
+      } else if (this.activeName == "class") {
+        this.listLoading = true;
+        let data = {
+          types: ["NORMAL"],
+          staffId: JSON.parse(localStorage.getItem("user")).staffs[0].id,
+          keyword: this.data.keyword,
+          pageIn: { ...this.data.pageIn },
+        };
+        data.pageIn.sorts = [
+          { name: "modifyTime", direction: "DESC" },
+          { name: "name", direction: "ASC" },
+        ];
+        getTeamByStaffWithRollCall(data).then((response) => {
+          this.list = response.data.findTeamByStaffWithRollCall.ls;
+          this.total = response.data.findTeamByStaffWithRollCall.pageOut.total;
+          this.listLoading = false;
+        });
+      } else if (this.activeName == "course") {
+        this.listLoading = true;
+        let data = {
+          completeTypes: ["ROLL_CALL"],
+          staffId: JSON.parse(localStorage.getItem("user")).staffs[0].id,
+          keyword: this.data.keyword,
+          pageIn: { ...this.data.pageIn },
+        };
+        data.pageIn.sorts = [
+          { name: "s.begin_time", direction: "DESC" },
+          { name: "courseName", direction: "ASC" },
+        ];
+        getUnCompleteSession(data).then((response) => {
+          this.list = response.data.findUnCompleteSession.ls;
+          this.total = response.data.findUnCompleteSession.pageOut.total;
+          this.listLoading = false;
+        });
+      }
     },
-  };
-  </script>
-  
\ No newline at end of file
+    timeCompare(time) {
+      if (!time) {
+        return "";
+      }
+      let timeDate = new Date(time);
+      let nowTime = new Date();
+      if (nowTime > timeDate) {
+        return time + "(宸茶繃鏈�)";
+      } else {
+        return time;
+      }
+    },
+  },
+};
+</script>
diff --git a/src/views/scheduleCourses/index.vue b/src/views/scheduleCourses/index.vue
index 86d6c25..08aebe3 100644
--- a/src/views/scheduleCourses/index.vue
+++ b/src/views/scheduleCourses/index.vue
@@ -1,112 +1,151 @@
 <template>
-    <div class="app-container">
-      <el-tabs v-model="activeName" @tab-click="handleClick">
-        <el-tab-pane label="鍏ㄩ儴" name="first" />
-        <el-tab-pane label="宸插仠鐢�" name="fourth" />
-      </el-tabs>
-      <div style="display: flex; flex-direction: row-reverse;">
-        <div style="width: 300px;">
-          <el-input
-            placeholder="鎸夎绋嬪悕绉版悳绱�"
-            v-model="input3"
-            class="input-with-select"
-            size="small"
-          >
-            <el-button slot="append" icon="el-icon-search"></el-button>
-          </el-input>
-        </div>
+  <div class="app-container">
+    <el-tabs v-model="activeName" @tab-click="fetchData">
+      <el-tab-pane label="鍏ㄩ儴" name="all" />
+      <el-tab-pane label="宸插仠鐢�" name="deactivated" />
+    </el-tabs>
+    <div style="display: flex; flex-direction: row-reverse">
+      <div style="width: 300px">
+        <el-input
+          placeholder="鎸夎绋嬪悕绉版悳绱�"
+          v-model="data.keyword"
+          class="input-with-select"
+          size="small"
+        >
+          <el-button
+            slot="append"
+            icon="el-icon-search"
+            @click="fetchData"
+          ></el-button>
+        </el-input>
       </div>
+    </div>
+    <div style="height: calc(100vh - 248px)">
       <el-table
         v-loading="listLoading"
         :data="list"
         element-loading-text="Loading"
         fit
+        height="100%"
       >
         <el-table-column label="璇剧▼鍚嶇О">
-          <template slot-scope=""> xxxxx </template>
-        </el-table-column>
-        <el-table-column label="鐝骇鍚嶇О" width="80">
-          <template slot-scope=""> 鐢� </template>
-        </el-table-column>
-        <el-table-column label="绫诲瀷" width="200">
-          <template slot-scope=""> 10086 </template>
-        </el-table-column>
-        <el-table-column label="璇捐妭甯傚満(鍒嗛挓)" width="200">
-          <template slot-scope=""> asfiaf </template>
-        </el-table-column>
-        <el-table-column label="浜烘暟涓婇檺" width="">
-          <template slot-scope=""> asfiaf </template>
-        </el-table-column>
-        <el-table-column label="娑堣鏂瑰紡" width="">
-          <template slot-scope=""> asfiaf </template>
-        </el-table-column>
-        <el-table-column label="棰滆壊" width="">
-          <template slot-scope=""> asfiaf </template>
-        </el-table-column>
-        <el-table-column label="鎻忚堪" width="">
-          <template slot-scope=""> asfiaf </template>
-        </el-table-column>
-        <el-table-column label="鎿嶄綔" width="">
-          <template slot-scope=""> 淇敼 鍋滅敤 </template>
-        </el-table-column>
-        <!-- <el-table-column label="Author" width="110" align="center">
           <template slot-scope="scope">
-            <span>{{ scope.row.author }}</span>
+            <el-link type="primary" :underline="false">{{
+              scope.row.name
+            }}</el-link>
           </template>
         </el-table-column>
-        <el-table-column label="Pageviews" width="110" align="center">
+        <el-table-column
+          label="鍋滅敤鏃堕棿"
+          width="200"
+          v-if="activeName == 'deactivated'"
+        >
           <template slot-scope="scope">
-            {{ scope.row.pageviews }}
+            {{ scope.row.modifyTime }}
           </template>
         </el-table-column>
-        <el-table-column class-name="status-col" label="Status" width="110" align="center">
-          <template slot-scope="scope">
-            <el-tag :type="scope.row.status | statusFilter">{{ scope.row.status }}</el-tag>
+        <el-table-column
+          label="鎿嶄綔"
+          width="200"
+          v-if="activeName == 'deactivated'"
+        >
+          <template slot-scope="">
+            <el-link type="primary" :underline="false">鎭㈠</el-link>
           </template>
         </el-table-column>
-        <el-table-column align="center" prop="created_at" label="Display_time" width="200">
-          <template slot-scope="scope">
-            <i class="el-icon-time" />
-            <span>{{ scope.row.display_time }}</span>
-          </template>
-        </el-table-column> -->
       </el-table>
     </div>
-  </template>
-  
-  <script>
-  import { getList } from "@/api/table";
-  
-  export default {
-    filters: {
-      statusFilter(status) {
-        const statusMap = {
-          published: "success",
-          draft: "gray",
-          deleted: "danger",
-        };
-        return statusMap[status];
-      },
-    },
-    data() {
-      return {
-        list: null,
-        listLoading: true,
-        activeName: "first",
+    <div>
+      <el-pagination
+        @size-change="handleSizeChange"
+        @current-change="handleCurrentChange"
+        :current-page="data.pageIn.index + 1"
+        :page-sizes="[10, 20, 30, 40]"
+        :page-size="data.pageIn.size"
+        layout="total, sizes, prev, pager, next, jumper"
+        :total="total"
+      >
+      </el-pagination>
+    </div>
+  </div>
+</template>
+
+<script>
+import { getCourse, getDeletedItem } from "@/api/scheduleCourses";
+
+export default {
+  filters: {
+    statusFilter(status) {
+      const statusMap = {
+        published: "success",
+        draft: "gray",
+        deleted: "danger",
       };
+      return statusMap[status];
     },
-    created() {
-      this.fetchData();
+  },
+  data() {
+    return {
+      list: null,
+      listLoading: true,
+      activeName: "all",
+      total: 0,
+      data: {
+        staffId: JSON.parse(localStorage.getItem("user")).staffs[0].id,
+        keyword: "",
+        pageIn: {
+          //鍙�夛紝濡傛灉鏄垎椤垫煡璇紝闇�瑕佸姞涓娿��
+          index: 0, //蹇呴��
+          size: 10, //姣忛〉鐨勫ぇ灏忋�傞粯璁�20
+          sorts: {
+            name: "name", //鎺掑簭瀛楁鍚嶇О
+            direction: "ASC", //鎺掑簭鏂瑰悜
+          },
+        },
+        types: ["BOOKING_NONE", "BOOKING_TIME_STAFF", "BOOKING_TIME_PLACE"],
+      },
+    };
+  },
+  created() {
+    this.fetchData();
+  },
+  methods: {
+    handleSizeChange(val) {
+      this.data.pageIn.size = val;
+      this.fetchData("pageIn");
     },
-    methods: {
-      fetchData() {
+    handleCurrentChange(val) {
+      this.data.pageIn.index = val - 1;
+      this.fetchData("pageIn");
+    },
+    fetchData(_val) {
+      if (_val !== "pageIn") {
+        this.data.pageIn.index = 0;
+        this.data.pageIn.size = 10;
+      }
+      this.listLoading = true;
+      if (this.activeName == "all") {
         this.listLoading = true;
-        getList().then((response) => {
-          this.list = response.data.items;
+        getCourse(this.data).then((response) => {
+          this.list = response.data.findCourse.ls;
+          this.total = response.data.findCourse.pageOut.total;
           this.listLoading = false;
         });
-      },
+      } else if (this.activeName == "deactivated") {
+        this.listLoading = true;
+        let data = {
+          itemType: "COURSE",
+          staffId: JSON.parse(localStorage.getItem("user")).staffs[0].id,
+          keyword: this.data.keyword,
+          pageIn: { ...this.data.pageIn },
+        };
+        getDeletedItem(data).then((response) => {
+          this.list = response.data.findDeletedItem.ls;
+          this.total = response.data.findDeletedItem.pageOut.total;
+          this.listLoading = false;
+        });
+      }
     },
-  };
-  </script>
-  
\ No newline at end of file
+  },
+};
+</script>
diff --git a/src/views/student/components/create.vue b/src/views/student/components/create.vue
index 2dc2037..5a8c4a2 100644
--- a/src/views/student/components/create.vue
+++ b/src/views/student/components/create.vue
@@ -42,6 +42,35 @@
             </el-option>
           </el-select>
         </el-form-item>
+        <el-form-item label="璇炬椂" style="width: 400px">
+          <el-input-number v-model="num" size="small"></el-input-number>
+        </el-form-item>
+        <el-form-item label="缂磋垂" style="width: 400px">
+          <el-input-number
+            v-model="num"
+            size="small"
+            style="width: 200px"
+          ></el-input-number>
+        </el-form-item>
+        <el-form-item label="鏈夋晥鏈�" style="width: 400px">
+          <div>
+            <el-radio-group v-model="lifespan" @input="lifespanChange" size="mini">
+              <el-radio-button label="month">涓�鏈�</el-radio-button>
+              <el-radio-button label="year">涓�骞�</el-radio-button>
+              <el-radio-button label="longTerm">闀挎湡</el-radio-button>
+              <el-radio-button label="custom">鑷畾涔�</el-radio-button>
+            </el-radio-group>
+          </div>
+          <div>
+            <el-date-picker
+              v-model="createData.endDate"
+              type="date"
+              placeholder="閫夋嫨鏃ユ湡"
+              size="small"
+            >
+            </el-date-picker>
+          </div>
+        </el-form-item>
         <el-form-item label="璇剧▼椤鹃棶">
           <el-select
             v-model="createData.voucherId"
@@ -96,16 +125,16 @@
     return {
       dialogVisible: false,
       createData: {
-        beginDate: "",
+        beginDate: new Date(),
         birthday: null,
         description: "",
         detailDescription: "",
-        endDate: "",
+        endDate: new Date(),
         amt: 0,
         freezeQty: 0,
         gender: "鐢�",
         mobile: "",
-        orgId: "", //鏈烘瀯
+        orgId: 25, //鏈烘瀯
         playerId: null,
         playerName: "",
         qty: 0,
@@ -119,6 +148,7 @@
       },
       saleManList: [],
       voucherList: [],
+      lifespan:''
     };
   },
   created() {},
@@ -152,6 +182,9 @@
     goDetails(row) {
       this.$router.push("/details");
     },
+    lifespanChange(val){
+      console.log(val);
+    }
   },
 };
 </script>
diff --git a/src/views/student/index.vue b/src/views/student/index.vue
index d91dae9..3a28c1b 100644
--- a/src/views/student/index.vue
+++ b/src/views/student/index.vue
@@ -6,8 +6,9 @@
       <el-tab-pane label="宸茶繃鏈�" name="expired" />
       <el-tab-pane label="宸插仠鐢�" name="deactivated" />
     </el-tabs>
-    <div style="display: flex; justify-content: space-between;">
-      <el-button type="primary" size="small" @click="showCreate">鏂板缓瀛﹀憳</el-button>
+    <div style="display: flex; justify-content: space-between">
+      <!-- <el-button type="primary" size="small" @click="showCreate">鏂板缓瀛﹀憳</el-button> -->
+      <el-button type="primary" size="small">瀵煎嚭瀛﹀憳</el-button>
       <div style="width: 300px">
         <el-input
           placeholder="鎸夊鍚嶆悳绱�"
@@ -18,43 +19,82 @@
           <el-button
             slot="append"
             icon="el-icon-search"
-            @click="fetchData"
+            @click="handleClick"
           ></el-button>
         </el-input>
       </div>
     </div>
-    <el-table
-      v-loading="listLoading"
-      :data="list"
-      element-loading-text="Loading"
-      fit
-    >
-      <el-table-column label="濮撳悕" prop="">
-        <template slot-scope="scope">
-          <el-link
+    <div style="height: calc(100vh - 248px)">
+      <el-table
+        v-loading="listLoading"
+        :data="list"
+        element-loading-text="Loading"
+        fit
+        height="100%"
+      >
+        <el-table-column label="濮撳悕" prop="">
+          <template slot-scope="scope">
+            <el-link
             type="primary"
             :underline="false"
             @click="goDetails(scope.row)"
             >{{ scope.row.name }}</el-link
           >
-        </template>
-      </el-table-column>
-      <el-table-column label="鎬у埆" width="80">
-        <template slot-scope="scope">
-          {{ scope.row.gender == "FEMALE" ? "濂�" : "鐢�" }}
-        </template>
-      </el-table-column>
-      <el-table-column label="鎵嬫満鍙�" width="200" prop="mobile">
-        <template slot-scope="scope">
-          {{ scope.row.mobile ? scope.row.mobile : "--" }}
-        </template>
-      </el-table-column>
-      <el-table-column label="鏄惁缁戝畾寰俊" width="200">
-        <template slot-scope="scope">
-          {{ scope.row.user ? "鏄�" : "鍚�" }}
-        </template>
-      </el-table-column>
-    </el-table>
+            <!-- <el-link type="primary" :underline="false">{{
+              scope.row.name
+            }}</el-link> -->
+          </template>
+        </el-table-column>
+        <el-table-column
+          label="鎬у埆"
+          width="80"
+          v-if="activeName !== 'deactivated'"
+        >
+          <template slot-scope="scope">
+            {{ scope.row.gender == "FEMALE" ? "濂�" : "鐢�" }}
+          </template>
+        </el-table-column>
+        <el-table-column
+          label="鎵嬫満鍙�"
+          width="200"
+          prop="mobile"
+          v-if="activeName !== 'deactivated'"
+        >
+          <template slot-scope="scope">
+            {{ scope.row.mobile ? scope.row.mobile : "--" }}
+          </template>
+        </el-table-column>
+        <el-table-column
+          label="鏄惁缁戝畾寰俊"
+          width="200"
+          v-if="activeName !== 'deactivated'"
+        >
+          <template slot-scope="scope">
+            {{ scope.row.user ? "鏄�" : "鍚�" }}
+          </template>
+        </el-table-column>
+        <el-table-column
+          label="鎿嶄綔"
+          width="200"
+          v-if="activeName == 'deactivated'"
+        >
+          <template slot-scope="">
+            <el-link type="primary" :underline="false">鍒犻櫎</el-link>
+            &nbsp;&nbsp;&nbsp;&nbsp;
+            <el-link type="primary" :underline="false">鎭㈠</el-link>
+          </template>
+        </el-table-column>
+        <el-table-column
+          label="鍋滅敤鏃堕棿"
+          width="200"
+          v-if="activeName == 'deactivated'"
+        >
+          <template slot-scope="scope">
+            {{ scope.row.modifyTime }}
+          </template>
+        </el-table-column>
+      </el-table>
+    </div>
     <div>
       <el-pagination
         @size-change="handleSizeChange"
@@ -67,13 +107,13 @@
       >
       </el-pagination>
     </div>
-    <StudentCreate ref="studentCreate"/>
+    <StudentCreate ref="studentCreate" />
   </div>
 </template>
 
 <script>
 import { getData, getRenew, getExpire, getDeleted } from "@/api/student";
-import StudentCreate from './components/create.vue'
+import StudentCreate from "./components/create.vue";
 
 export default {
   filters: {
@@ -86,7 +126,7 @@
       return statusMap[status];
     },
   },
-  components:{
+  components: {
     StudentCreate,
   },
   data() {
@@ -96,7 +136,7 @@
       activeName: "all",
       total: 0,
       data: {
-        staffId: JSON.parse(localStorage.getItem('user')).staffs[0].id,
+        staffId: JSON.parse(localStorage.getItem("user")).staffs[0].id,
         keyword: "",
         pageIn: {
           //鍙�夛紝濡傛灉鏄垎椤垫煡璇紝闇�瑕佸姞涓娿��
@@ -124,11 +164,11 @@
     },
     handleSizeChange(val) {
       this.data.pageIn.size = val;
-      this.fetchData();
+      this.handleClick();
     },
     handleCurrentChange(val) {
       this.data.pageIn.index = val - 1;
-      this.fetchData();
+      this.handleClick();
     },
     handleClick(tab, event) {
       if (this.activeName == "pendingFees") {
@@ -149,9 +189,15 @@
         this.fetchData();
       } else if (this.activeName == "deactivated") {
         this.listLoading = true;
-        getExpire(this.data).then((response) => {
-          this.list = response.data.findPlayerExpire.ls;
-          this.total = response.data.findPlayerExpire.pageOut.total;
+        let data = {
+          itemType: "PLAYER",
+          staffId: JSON.parse(localStorage.getItem("user")).staffs[0].id,
+          keyword: this.data.keyword,
+          pageIn: { ...this.data.pageIn },
+        };
+        getDeleted(data).then((response) => {
+          this.list = response.data.findDeletedItem.ls;
+          this.total = response.data.findDeletedItem.pageOut.total;
           this.listLoading = false;
         });
       }
@@ -164,9 +210,9 @@
         },
       });
     },
-    showCreate(){
-      this.$refs.studentCreate.showDialog()
-    }
+    showCreate() {
+      this.$refs.studentCreate.showDialog();
+    },
   },
 };
 </script>
diff --git a/src/views/work/index.vue b/src/views/work/index.vue
index 6049020..90e2f7f 100644
--- a/src/views/work/index.vue
+++ b/src/views/work/index.vue
@@ -1,87 +1,135 @@
 <template>
   <div class="app-container">
-    <el-tabs v-model="activeName" @tab-click="handleClick">
-      <el-tab-pane label="浣滀笟" name="first">
+    <el-tabs v-model="activeName" @tab-click="fetchData">
+      <el-tab-pane label="浣滀笟" name="work">
         <div style="display: flex; flex-direction: row-reverse">
           <div style="width: 300px">
             <el-input
               placeholder="鎸変綔涓氬悕绉版悳绱�"
-              v-model="input3"
+              v-model="data.keyword"
               class="input-with-select"
               size="small"
             >
-              <el-button slot="append" icon="el-icon-search"></el-button>
+              <el-button
+                slot="append"
+                icon="el-icon-search"
+                @click="fetchData"
+              ></el-button>
             </el-input>
           </div>
         </div>
-        <el-table
-          v-loading="listLoading"
-          :data="list"
-          element-loading-text="Loading"
-          fit
-        >
-          <el-table-column label="浣滀笟鍚嶇О">
-            <template slot-scope=""> xxxxx </template>
-          </el-table-column>
-          <el-table-column label="鐝骇" width="80">
-            <template slot-scope=""> 鐢� </template>
-          </el-table-column>
-          <el-table-column label="瀛﹀憳" width="200">
-            <template slot-scope=""> 10086 </template>
-          </el-table-column>
-          <el-table-column label="鏁欏笀" width="200">
-            <template slot-scope=""> asfiaf </template>
-          </el-table-column>
-          <el-table-column label="鎴鏃ユ湡" width="">
-            <template slot-scope=""> asfiaf </template>
-          </el-table-column>
-          <el-table-column label="鍐呭" width="">
-            <template slot-scope=""> asfiaf </template>
-          </el-table-column>
-          <el-table-column label="鎿嶄綔" width="">
-            <template slot-scope=""> 淇敼 </template>
-          </el-table-column>
-        </el-table>
+        <div style="height: calc(100vh - 248px)">
+          <el-table
+            v-loading="listLoading"
+            :data="list"
+            element-loading-text="Loading"
+            fit
+            height="100%"
+          >
+            <el-table-column label="浣滀笟鍚嶇О">
+              <template slot-scope="scope">
+                <el-link type="primary" :underline="false">{{
+                  scope.row.name
+                }}</el-link>
+              </template>
+            </el-table-column>
+            <el-table-column label="甯冪疆鏃堕棿" width="">
+              <
+              <template slot-scope="scope">
+                {{ scope.row.createTime }}
+              </template>
+            </el-table-column>
+            <el-table-column label="甯冪疆浜�" width="">
+              <template slot-scope="scope">
+                {{ scope.row.publisher.name }}
+              </template>
+            </el-table-column>
+            <el-table-column label="鎿嶄綔" width="">
+              <template slot-scope=""> 澶嶅埗 </template>
+            </el-table-column>
+          </el-table>
+        </div>
+        <div>
+          <el-pagination
+            @size-change="handleSizeChange"
+            @current-change="handleCurrentChange"
+            :current-page="data.pageIn.index + 1"
+            :page-sizes="[10, 20, 30, 40]"
+            :page-size="data.pageIn.size"
+            layout="total, sizes, prev, pager, next, jumper"
+            :total="total"
+          >
+          </el-pagination>
+        </div>
       </el-tab-pane>
-      <el-tab-pane label="鎵归槄" name="fourth">
+      <el-tab-pane label="鎵归槄" name="readOver">
         <div style="display: flex; flex-direction: row-reverse">
           <div style="width: 300px">
             <el-input
               placeholder="鎸夊鍛樺悕绉版悳绱�"
-              v-model="input3"
+              v-model="data.keyword"
               class="input-with-select"
               size="small"
             >
-              <el-button slot="append" icon="el-icon-search"></el-button>
+              <el-button
+                slot="append"
+                icon="el-icon-search"
+                @click="fetchData"
+              ></el-button>
             </el-input>
           </div>
         </div>
-        <el-table
-          v-loading="listLoading"
-          :data="list"
-          element-loading-text="Loading"
-          fit
-        >
-          <el-table-column label="瀛﹀憳">
-            <template slot-scope=""> xxxxx </template>
-          </el-table-column>
-          <el-table-column label="鏃堕棿" width="80">
-            <template slot-scope=""> 鐢� </template>
-          </el-table-column>
-          <el-table-column label="浣滀笟" width="200">
-            <template slot-scope=""> 10086 </template>
-          </el-table-column>
-          <el-table-column label="鐐硅瘎" width="200">
-            <template slot-scope=""> asfiaf </template>
-          </el-table-column>
-        </el-table>
+        <div style="height: calc(100vh - 248px)">
+          <el-table
+            v-loading="listLoading"
+            :data="list"
+            element-loading-text="Loading"
+            fit
+            height="100%"
+          >
+            <el-table-column label="瀛﹀憳">
+              <template slot-scope="scope">
+                <el-link type="primary" :underline="false">{{
+                  scope.row.player.name
+                }}</el-link>
+              </template>
+            </el-table-column>
+            <el-table-column label="瀹屾垚鏃堕棿" width="">
+              <template slot-scope="scope">
+                {{ scope.row.createTime }}
+              </template>
+            </el-table-column>
+            <el-table-column label="浣滀笟" width="">
+              <template slot-scope="scope">
+                {{ scope.row.homework.name }}
+              </template>
+            </el-table-column>
+            <el-table-column label="鐐硅瘎" width="">
+              <template slot-scope="scope">
+                {{ scope.row.lastStaffCommentId ? "宸茬偣璇�" : "鏈偣璇�" }}
+              </template>
+            </el-table-column>
+          </el-table>
+        </div>
+        <div>
+          <el-pagination
+            @size-change="handleSizeChange"
+            @current-change="handleCurrentChange"
+            :current-page="data.pageIn.index + 1"
+            :page-sizes="[10, 20, 30, 40]"
+            :page-size="data.pageIn.size"
+            layout="total, sizes, prev, pager, next, jumper"
+            :total="total"
+          >
+          </el-pagination>
+        </div>
       </el-tab-pane>
     </el-tabs>
   </div>
 </template>
 
 <script>
-import { getList } from "@/api/table";
+import { getHomeworkByType, getHomeworkCommentByAuth } from "@/api/work";
 
 export default {
   filters: {
@@ -98,19 +146,64 @@
     return {
       list: null,
       listLoading: true,
-      activeName: "first",
+      activeName: "work",
+      total: 0,
+      data: {
+        staffId: JSON.parse(localStorage.getItem("user")).staffs[0].id,
+        keyword: "",
+        pageIn: {
+          //鍙�夛紝濡傛灉鏄垎椤垫煡璇紝闇�瑕佸姞涓娿��
+          index: 0, //蹇呴��
+          size: 10, //姣忛〉鐨勫ぇ灏忋�傞粯璁�20
+          sorts: {
+            name: "name", //鎺掑簭瀛楁鍚嶇О
+            direction: "ASC", //鎺掑簭鏂瑰悜
+          },
+        },
+        commentTypes: ["HOMEWORK"],
+        homeworkType: "HOMEWORK",
+      },
     };
   },
   created() {
     this.fetchData();
   },
   methods: {
-    fetchData() {
+    handleSizeChange(val) {
+      this.data.pageIn.size = val;
+      this.fetchData("pageIn");
+    },
+    handleCurrentChange(val) {
+      this.data.pageIn.index = val - 1;
+      this.fetchData("pageIn");
+    },
+    fetchData(_val) {
+      if (_val !== "pageIn") {
+        this.data.pageIn.index = 0;
+        this.data.pageIn.size = 10;
+      }
       this.listLoading = true;
-      getList().then((response) => {
-        this.list = response.data.items;
-        this.listLoading = false;
-      });
+      if (this.activeName == "work") {
+        this.listLoading = true;
+        getHomeworkByType(this.data).then((response) => {
+          this.list = response.data.findHomeworkByType.ls;
+          this.total = response.data.findHomeworkByType.pageOut.total;
+          this.listLoading = false;
+        });
+      } else if (this.activeName == "readOver") {
+        this.listLoading = true;
+        let data = {
+          commentTypes: ["PLAYER_REPLY"],
+          staffId: JSON.parse(localStorage.getItem("user")).staffs[0].id,
+          keyword: this.data.keyword,
+          pageIn: { ...this.data.pageIn },
+        };
+        getHomeworkCommentByAuth(data).then((response) => {
+          this.list = response.data.findHomeworkCommentByAuth.ls;
+          this.total = response.data.findHomeworkCommentByAuth.pageOut.total;
+          this.listLoading = false;
+        });
+      }
     },
   },
 };
diff --git a/vue.config.js b/vue.config.js
index 159032f..8d82eff 100644
--- a/vue.config.js
+++ b/vue.config.js
@@ -39,7 +39,7 @@
     proxy: {
       [process.env.VUE_APP_BASE_API]: {
         // 鍖归厤鎵�鏈変互 '/dev-api'寮�澶寸殑璇锋眰璺緞
-        target: "http://192.168.3.88:18080/dream_test", //绫讳技浜嶯ginx鍙嶅悜浠g悊
+        target: "http://192.168.3.87:18081/dream", //绫讳技浜嶯ginx鍙嶅悜浠g悊
         changeOrigin: true, // 鏀寔璺ㄥ煙
         pathRewrite: {
           // 閲嶅啓璺緞: 鍘绘帀璺緞涓紑澶寸殑'/dev-api'

--
Gitblit v1.8.0