From bb677211fa6a0916869eb264ba047aa88a8181be Mon Sep 17 00:00:00 2001
From: zhouwx <1175765986@qq.com>
Date: 星期二, 11 六月 2024 17:12:33 +0800
Subject: [PATCH] 在线教育监管

---
 src/permission.js                                                           |   15 
 src/views/onlineEducation/classBatch/index.vue                              |  171 ++++
 src/views/onlineEducation/platformManage/index.vue                          |  129 +++
 src/views/onlineEducation/studentSupervision/compontents/learningRecord.vue |  123 +++
 src/views/onlineEducation/platformManage/components/addDialog.vue           |  154 ++++
 src/views/onlineEducation/questionManage/index.vue                          |  103 ++
 src/views/onlineEducation/courseSupervision/index.vue                       |  189 +++++
 src/store/modules/permission.js                                             |   11 
 src/views/onlineEducation/classBatch/components/classHour.vue               |  157 ++++
 src/views/onlineEducation/count/index.vue                                   |  136 +++
 src/views/onlineEducation/learnRecord/index.vue                             |  105 +++
 src/assets/images/im.png                                                    |    0 
 src/views/onlineEducation/courseSupervision/components/courseDialog.vue     |  168 ++++
 src/views/onlineEducation/examManage/index.vue                              |  111 +++
 src/views/onlineEducation/count/components/studentList.vue                  |  119 +++
 src/views/onlineEducation/studentSupervision/compontents/lessonReport.vue   |   46 +
 src/views/onlineEducation/studentSupervision/index.vue                      |  167 ++++
 src/views/onlineEducation/examManage/components/detailDialog.vue            |  151 ++++
 18 files changed, 2,050 insertions(+), 5 deletions(-)

diff --git a/src/assets/images/im.png b/src/assets/images/im.png
new file mode 100644
index 0000000..48c1d27
--- /dev/null
+++ b/src/assets/images/im.png
Binary files differ
diff --git a/src/permission.js b/src/permission.js
index 01ff805..0aed761 100644
--- a/src/permission.js
+++ b/src/permission.js
@@ -23,6 +23,7 @@
         isRelogin.show = true
         // 判断当前用户是否已拉取完user_info信息
         store.dispatch('GetInfo').then(() => {
+
           isRelogin.show = false
           store.dispatch('GenerateRoutes').then(accessRoutes => {
             // 根据roles权限生成可访问的路由表
@@ -30,12 +31,20 @@
             // next({ ...to, replace: true }) // hack方法 确保addRoutes已完成
             let path = '';
             if (accessRoutes[0].path === '/') {
-              path = accessRoutes[0].path + accessRoutes[0].children[0].path; //获取第一路由路径
+              if(accessRoutes[0].children){
+                path = accessRoutes[0].path + accessRoutes[0].children[0].path; //获取第一路由路径
+              }else {
+                path = accessRoutes[0].path
+              }
             } else {
-              path = accessRoutes[0].path + '/' + accessRoutes[0].children[0].path; //获取第一路由路径
+              if(accessRoutes[0].children){
+                path = accessRoutes[0].path + '/' + accessRoutes[0].children[0].path; //获取第一路由路径
+              }else {
+                path = accessRoutes[0].path + '/'
+              }
             }
 
-            if (accessRoutes[0].children[0].query !== undefined) { //如果当前路由存在路由参数,则带入
+            if (accessRoutes[0].children && accessRoutes[0].children[0].query !== undefined) { //如果当前路由存在路由参数,则带入
               let query = JSON.parse(accessRoutes[0].children[0].query);
               let temp = '';
               for (var val in query) {
diff --git a/src/store/modules/permission.js b/src/store/modules/permission.js
index bbfd7c9..e06d5ed 100644
--- a/src/store/modules/permission.js
+++ b/src/store/modules/permission.js
@@ -40,8 +40,15 @@
         getRouters().then(res => {
           const sdata = JSON.parse(JSON.stringify(res.data))
           const rdata = JSON.parse(JSON.stringify(res.data))
-          let indexdata = res.data[0].path + "/" + res.data[0].children[0].path
-          if (res.data[0].children[0].query !== undefined) { //如果当前路由存在路由参数,则带入
+          let indexdata = ''
+          if(res.data && res.data[0].children){
+            indexdata = res.data[0].path + "/" + res.data[0].children[0].path
+          }else {
+            indexdata = res.data[0].path + "/"
+          }
+
+
+          if (res.data[0].children && res.data[0].children[0].query !== undefined) { //如果当前路由存在路由参数,则带入
             let query = JSON.parse(res.data[0].children[0].query);
             let temp = '';
             for (var val in query) {
diff --git a/src/views/onlineEducation/classBatch/components/classHour.vue b/src/views/onlineEducation/classBatch/components/classHour.vue
new file mode 100644
index 0000000..c7d408d
--- /dev/null
+++ b/src/views/onlineEducation/classBatch/components/classHour.vue
@@ -0,0 +1,157 @@
+<template>
+  <el-dialog
+    title="学时清单"
+    :visible.sync="dialogVisible"
+    :modal-append-to-body="false"
+    :close-on-click-modal="false"
+    width="850px"
+    :before-close="handleClose"
+  >
+    <div v-for="(item,index) in classList" :key="index">
+      <span style="font-size: 16px;">{{item.courseName}}:总学时{{item.totalTime}}分钟</span>
+      <el-table
+        :data="item.userList"
+        style="width: 100%;margin-top: 10px">
+        <el-table-column
+          prop="name"
+          label="姓名"
+        >
+        </el-table-column>
+        <el-table-column
+          label="身份证号"
+          prop="idCard" :show-overflow-tooltip="true">
+        </el-table-column>
+        <el-table-column
+          prop="progress"
+          label="当前学时进度"
+        >
+          <template #default="scope">
+            <el-progress :text-inside="true" :stroke-width="26" :percentage="scope.row.progressRate" :status="scope.row.progressStatus"></el-progress>
+          </template>
+        </el-table-column>
+        <el-table-column label="关联上报记录" align="center" class-name="small-padding fixed-width">
+          <template #default="scope">
+            <el-button
+              size="mini"
+              type="text"
+              style="color: #1890ff"
+              @click="openClassHour(scope.row)"
+            >查看记录清单</el-button>
+          </template>
+        </el-table-column>
+        <el-table-column label="学时报告" align="center" class-name="small-padding fixed-width">
+          <template #default="scope">
+            <el-button
+              v-if="scope.row.progress == item.totalTime"
+              size="mini"
+              type="text"
+              style="color: #1890ff"
+              @click="viewLessonReport(scope.row)"
+            >查看学时报告</el-button>
+            <div v-else>——</div>
+          </template>
+        </el-table-column>
+      </el-table>
+      <pagination
+        v-show="item.total>0"
+        :total="item.total"
+        :page.sync="queryParams.pageIndex"
+        :limit.sync="queryParams.pageSize"
+        @pagination="getList"
+      />
+    </div>
+    <learningRecord ref="recordRef"></learningRecord>
+    <lessonReport ref="lessonRef"></lessonReport>
+  </el-dialog>
+</template>
+
+<script >
+import learningRecord from '@/views/onlineEducation/studentSupervision/compontents/learningRecord.vue'
+import lessonReport from '@/views/onlineEducation/studentSupervision/compontents/lessonReport.vue'
+export default {
+  name: 'addUser',
+  components: {
+    lessonReport,
+    learningRecord
+  },
+  data() {
+    return {
+      dialogVisible: false,
+      dialogStatus: '',
+      dataForm: {},
+      queryParams: {},
+      classList: [
+        {
+          courseName:'课程一',
+          totalTime: 130,
+          total: 2,
+          userList: [
+            {
+              name: '张三',
+              idCard: '320154198514571152',
+              progress: 65,
+              progressRate: 50,
+              progressStatus:'exception'
+            },
+            {
+              name: '李四',
+              idCard: '320241198514571152',
+              progress: 104,
+              progressRate: 80,
+              progressStatus:'warning'
+            }
+          ]
+        },
+        {
+          courseName:'课程二',
+          totalTime: 130,
+          total: 2,
+          userList: [
+            {
+              name: '张三',
+              idCard: '320154198514571152',
+              progress: 130,
+              progressRate: 100,
+              progressStatus:'success'
+            },
+            {
+              name: '李四',
+              idCard: '320241198514571152',
+              progress: 117,
+              progressRate: 90,
+              progressStatus:'warning'
+            }
+          ]
+        }
+      ]
+    }
+  },
+  created() {
+  },
+  methods: {
+    getList() {
+
+    },
+    openDialog (type, data) {
+      this.dialogVisible = true;
+      this.dialogStatus = type;
+    },
+
+    handleClose() {
+      this.dialogVisible = false;
+      this.$emit("getList");
+    },
+    openClassHour(data){
+      this.$refs.recordRef.openDialog(data);
+    },
+    viewLessonReport(data){
+      this.$refs.lessonRef.openDialog(data)
+    }
+
+  }
+}
+
+</script>
+<style scoped>
+
+</style>
diff --git a/src/views/onlineEducation/classBatch/index.vue b/src/views/onlineEducation/classBatch/index.vue
new file mode 100644
index 0000000..c2cc228
--- /dev/null
+++ b/src/views/onlineEducation/classBatch/index.vue
@@ -0,0 +1,171 @@
+<template>
+  <div class="app-container">
+    <div style="margin-left: -35px;margin-top: 15px">
+      <el-select v-model="queryParams.platform"  size="small" style="margin-left: 40px;" placeholder="请选择平台">
+        <el-option
+          v-for="item in platformList"
+          :key="item.value"
+          :label="item.label"
+          :value="item.value">
+        </el-option>
+      </el-select>
+      <el-button
+        size="small"
+        type="primary"
+        style="margin-bottom: 10px;margin-left: 20px"
+        @click="handleQuery()"
+      >查询</el-button>
+      <el-button
+        size="small"
+        type="primary"
+        style="margin-bottom: 10px"
+        @click="resetQuery()"
+      >重置</el-button>
+    </div>
+    <el-table v-loading="loading" :data="expertList" style="margin-top: 10px">
+      <el-table-column label="UUID" align="center" prop="UUID" />
+      <el-table-column label="批次名称" align="center" prop="batchName" />
+      <el-table-column label="推送平台" align="center" prop="platform" />
+      <el-table-column label="上报时间" align="center" prop="reportTime" />
+      <el-table-column label="所属培训机构" align="center" prop="trainingInstitution" />
+      <el-table-column label="课程" align="center" >
+        <template #default="scope">
+          <div v-for="(item,index) in scope.row.course" :key="index" style="color: #1890ff;cursor: pointer">
+            <span @click="handleViewCourse(item)">{{item}}</span>
+          </div>
+        </template>
+      </el-table-column>
+      <el-table-column label="学员人数" align="center" prop="student" >
+        <template #default="scope">
+          <span style="color: #1890ff;cursor: pointer" @click="openStudent(scope.row)">{{scope.row.student}}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="是否有考试" align="center" prop="isExam" />
+      <el-table-column label="已开班" align="center" prop="isOfferClass" />
+      <el-table-column label="数据更新时间" align="center" prop="updateTime" />
+      <el-table-column label="删除标记" align="center" prop="delFlag" />
+      <el-table-column label="学时监管" align="center" class-name="small-padding fixed-width">
+        <template #default="scope">
+          <el-button
+            size="mini"
+            type="text"
+            style="color: #1890ff"
+            @click="openClassHour(scope.row)"
+          >查看学时清单</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageIndex"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+    <course-dialog ref="courseDialogRef" @getList = "getList"></course-dialog>
+    <studentList ref="studentDialog" @getList = "getList"></studentList>
+    <class-hour ref="classRef" @getList = "getList"></class-hour>
+  </div>
+</template>
+
+<script>
+
+import studentList from '@/views/onlineEducation/count/components/studentList.vue'
+import courseDialog from '@/views/onlineEducation/courseSupervision/components/courseDialog.vue'
+import classHour from '@/views/onlineEducation/classBatch/components/classHour.vue'
+export default {
+  name: "nPeopleManage",
+  dicts: [],
+  components: { courseDialog,studentList,classHour},
+  data() {
+    return {
+      loading: false,
+      single: true,
+      multiple: true,
+      showSearch: true,
+      addForm: false,
+      total: 0,
+      platformList: [
+        {
+          value: '1',
+          label: '平台1'
+        },
+        {
+          value: '2',
+          label: '平台2'
+        },
+      ],
+      expertList: [],
+      queryParams: {
+        pageIndex: 1,
+        pageSize: 10,
+        platform: ''
+      },
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    getList(){
+      this.loading = true;
+      this.expertList = [
+        {
+          UUID: '2024060600001',
+          batchName: '测试数据1',
+          platform:'平台1',
+          reportTime: '2024-6-11 10:32:00',
+          trainingInstitution: '培训机构1',
+          course: ['课程1','课程2'],
+          student:120,
+          isExam: '是',
+          isOfferClass: '是',
+          delFlag:'未删除',
+          updateTime: '2024-6-11 10:32:00'
+        },
+        {
+          UUID: '2024060600002',
+          batchName: '测试数据2',
+          platform:'平台2',
+          reportTime: '2024-6-11 10:32:00',
+          trainingInstitution: '培训机构2',
+          course: ['课程2'],
+          student: 132,
+          isExam: '否',
+          isOfferClass: '否',
+          delFlag:'未删除',
+          updateTime: '2024-6-11 10:32:00'
+        },
+      ]
+      this.total = 2
+      this.loading = false;
+
+    },
+    handleChange(){
+
+    },
+    handleQuery(){
+      this.getList();
+
+    },
+    resetQuery(){
+      this.queryParams = {
+        pageIndex: 1,
+        pageSize: 10,
+        platform: ''
+      }
+      this.getList();
+    },
+    handleViewCourse(data){
+      this.$refs.courseDialogRef.openDialog(data);
+    },
+    openStudent(data) {
+      this.$refs.studentDialog.openDialog(data);
+    },
+    openClassHour(data){
+      this.$refs.classRef.openDialog(data)
+
+    }
+  }
+};
+</script>
diff --git a/src/views/onlineEducation/count/components/studentList.vue b/src/views/onlineEducation/count/components/studentList.vue
new file mode 100644
index 0000000..7ab47c9
--- /dev/null
+++ b/src/views/onlineEducation/count/components/studentList.vue
@@ -0,0 +1,119 @@
+<template>
+  <el-dialog
+    title="学员"
+    :visible.sync="dialogVisible"
+    :modal-append-to-body="false"
+    :close-on-click-modal="false"
+    width="850px"
+    :before-close="handleClose"
+  >
+    <el-table
+      :data="learningTable"
+      style="width: 100%;">
+      <el-table-column
+        prop="name"
+        label="姓名"
+      >
+      </el-table-column>
+      <el-table-column
+        label="身份证号"
+        prop="idCard"
+        width="160" :show-overflow-tooltip="true">
+      </el-table-column>
+      <el-table-column
+        prop="totalTime"
+        label="总学时"
+      >
+      </el-table-column>
+      <el-table-column
+        prop="learnedTime"
+        label="已学学时"
+      ></el-table-column>
+      <el-table-column
+        prop="isEnd"
+        label="是否已结束培训"
+      ></el-table-column>
+      <el-table-column label="学时报告" align="center" class-name="small-padding fixed-width">
+        <template #default="scope">
+          <el-button
+            v-if="scope.row.isEnd === '是'"
+            size="mini"
+            type="text"
+            style="color: #1890ff"
+            @click="viewLessonReport"
+          >查看学时报告</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageIndex"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+    <lessonReport ref="lessonRef"></lessonReport>
+  </el-dialog>
+</template>
+
+<script >
+import lessonReport from '@/views/onlineEducation/studentSupervision/compontents/lessonReport.vue'
+export default {
+  name: 'addUser',
+  components: {
+    lessonReport
+  },
+  data() {
+    return {
+      dialogVisible: false,
+      dialogStatus: '',
+      dataForm: {},
+      total: 2,
+      queryParams: {},
+      learningTable: [
+        {
+          name: '张三',
+          idCard: '320154199811153355',
+          totalTime: '2h',
+          learnedTime: '1h',
+          courseTime: '2h',
+          learningTime: '1h',
+          isEnd: '否'
+        },
+        {
+          name: '李四',
+          idCard: '320154194511153355',
+          totalTime: '2h',
+          learnedTime: '2h',
+          courseTime: '2h',
+          learningTime: '1h',
+          isEnd: '是'
+        },
+      ]
+    }
+  },
+  created() {
+  },
+  methods: {
+    getList() {
+
+    },
+    openDialog (type, data) {
+      this.dialogVisible = true;
+      this.dialogStatus = type;
+    },
+
+    handleClose() {
+      this.dialogVisible = false;
+      this.$emit("getList");
+    },
+    viewLessonReport(data){
+      this.$refs.lessonRef.openDialog(data)
+    }
+  }
+}
+
+</script>
+<style scoped>
+
+</style>
diff --git a/src/views/onlineEducation/count/index.vue b/src/views/onlineEducation/count/index.vue
new file mode 100644
index 0000000..cecd2dc
--- /dev/null
+++ b/src/views/onlineEducation/count/index.vue
@@ -0,0 +1,136 @@
+<template>
+  <div class="app-container">
+    <div >
+      <el-date-picker
+        v-model="time"
+        size="small"
+        type="daterange"
+        range-separator="至"
+        start-placeholder="开始日期"
+        end-placeholder="结束日期">
+      </el-date-picker>
+      <el-select v-model="queryParams.object"  size="small" style="margin-left: 40px" placeholder="请选择科目">
+        <el-option
+          v-for="item in objectList"
+          :key="item.value"
+          :label="item.label"
+          :value="item.value">
+        </el-option>
+      </el-select>
+      <el-button
+        size="small"
+        type="primary"
+        style="margin-bottom: 10px;margin-left: 20px"
+        @click="handleQuery()"
+      >查询</el-button>
+      <el-button
+        size="small"
+        type="primary"
+        style="margin-bottom: 10px"
+        @click="resetQuery()"
+      >重置</el-button>
+    </div>
+    <el-table v-loading="loading" :data="expertList">
+      <el-table-column label="平台" align="center" prop="name" />
+      <el-table-column label="机构" align="center" prop="organization" />
+      <el-table-column label="培训总人数" align="center" prop="pTotal" />
+      <el-table-column label="总时长" align="center" prop="tTotal" />
+      <el-table-column label="培训学时达标人数" align="center" prop="timeQualifyNum" />
+      <el-table-column label="考试合格人数" align="center" prop="examQualifyNum" />
+      <el-table-column label="考试合格率" align="center" prop="passRate" />
+    </el-table>
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageIndex"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+  </div>
+</template>
+
+<script>
+export default {
+  name: "count",
+  components: {},
+  data() {
+    return {
+      loading: false,
+      single: true,
+      multiple: true,
+      showSearch: true,
+      addForm: false,
+      total: 0,
+      objectList: [
+        {
+          value: '1',
+          label: '测试数据1'
+        },
+        {
+          value: '2',
+          label: '测试数据2'
+        },
+      ],
+      expertList: [],
+      queryParams: {},
+      time: []
+    };
+  },
+  created() {
+    this.getList()
+  },
+  methods: {
+    getList(){
+      this.loading = true;
+      this.expertList = [
+        {
+          id: 1,
+          name: '测试数据1',
+          organization: '测试机构1',
+          pTotal: 40,
+          tTotal: 80,
+          timeQualifyNum: 38,
+          examQualifyNum: 35,
+          passRate: '87.5%'
+        },
+        {
+          id: 2,
+          name: '测试数据2',
+          organization: '测试机构3',
+          pTotal: 30,
+          tTotal: 50,
+          timeQualifyNum: 30,
+          examQualifyNum: 30,
+          passRate: '100%'
+
+        }
+      ]
+      this.total = 2;
+      this.loading = false;
+
+    },
+    handleChange(){
+
+    },
+    handleQuery(){
+      this.getList()
+
+    },
+    resetQuery(){
+      this.queryParams = {
+        pageIndex: 1,
+        pageSize: 10,
+        object: '',
+        startTime: '',
+        endTime: ''
+      }
+      this.time = []
+      this.getList()
+    },
+    handleAdd(){
+
+    }
+  }
+};
+</script>
+
diff --git a/src/views/onlineEducation/courseSupervision/components/courseDialog.vue b/src/views/onlineEducation/courseSupervision/components/courseDialog.vue
new file mode 100644
index 0000000..a45dcb5
--- /dev/null
+++ b/src/views/onlineEducation/courseSupervision/components/courseDialog.vue
@@ -0,0 +1,168 @@
+<template>
+  <el-dialog
+    :visible.sync="dialogVisible"
+    :modal-append-to-body="false"
+    :close-on-click-modal="false"
+    width="600px"
+    :before-close="handleClose"
+  >
+    <div style="margin:  0 25px">
+      <div style="display: flex;flex-direction: column">
+        <div style="display: flex;align-items: center;justify-content: space-between">
+          <span style="font-size: 20px;font-weight: 550">课程大纲</span>
+          <span style="color: #1890ff;cursor: pointer;" @click="clickOpen">收起/展开</span>
+        </div>
+        <div :class="{'open':isClose}" style="overflow: hidden">
+          <div v-for="(item,index) in courseList" :key="index" style="font-size: 16px;margin: 20px 35px">
+            <span>{{item.name}}</span>
+          </div>
+        </div>
+
+      </div>
+      <div style="display: flex;flex-direction: column">
+        <span style="font-size: 20px;font-weight: 550">课程章节资源</span>
+        <el-table
+          :data="courseTable"
+          style="width: 80%;margin: 20px 35px">
+          <el-table-column
+            prop="catalogCode"
+            label="章节UUID">
+          </el-table-column>
+          <el-table-column
+            prop="catalogName"
+            label="章节名称">
+          </el-table-column>
+          <el-table-column
+            label="资源类别"
+            prop="resourceType">
+          </el-table-column>
+          <el-table-column
+            label="章节学时"
+            prop="lessonNum">
+          </el-table-column>
+          <el-table-column label="预览" align="center" class-name="small-padding fixed-width">
+            <template #default="scope">
+              <el-button
+                size="mini"
+                type="text"
+                style="color: #1890ff"
+              >预览课程</el-button>
+            </template>
+          </el-table-column>
+        </el-table>
+
+      </div>
+
+    </div>
+  </el-dialog>
+</template>
+
+<script >
+export default {
+  name: 'addUser',
+  components: {
+  },
+  data() {
+    return {
+      isClose:false,
+      dialogVisible: false,
+      dialogStatus: '',
+      dataForm: {},
+      courseTable: [
+        {
+          catalogCode: '1',
+          catalogName: '测试',
+          resourceType: '视频',
+          lessonNum: '2h'
+        },
+        {
+          catalogCode: '1',
+          catalogName: '测试3',
+          resourceType: '音频',
+          lessonNum: '45min'
+        }
+      ],
+      courseList: [
+        {
+          name: '1.1  ……'
+        },
+        {
+          name: '1.2  ……'
+        },
+        {
+          name: '1.3  ……'
+        }
+
+      ]
+    }
+  },
+  created() {
+  },
+  methods: {
+    openDialog (type, data) {
+      this.resetDataForm();
+      this.dialogVisible = true;
+      this.dialogStatus = type;
+    },
+    clickOpen() {
+      this.isClose = !this.isClose
+    },
+    handleClose() {
+      this.dialogVisible = false;
+      this.$emit("getList");
+    },
+    onSubmit() {
+      this.$refs["dataForm"].validate( async valid => {
+        if (valid) {
+          if(this.dialogStatus == 'add'){
+            // this.dataForm.isCm = 1;
+            // console.log("this.dataForm",this.dataForm)
+            // const res = await addExam(this.dataForm);
+            // if(res.code == 200) {
+              this.$emit("getList");
+              this.dialogVisible = false;
+            //   this.$message({
+            //     type:'success',
+            //     message: '新增成功'
+            //   })
+            // }else{
+            //   this.$message({
+            //     type:'warning',
+            //     message: res.msg
+            //   })
+            // }
+          }else {
+            // this.dataForm.isCm = 1;
+            // console.log("this.dataForm",this.dataForm)
+            // const res = await updateExam(this.dataForm);
+            // if(res.code == 200) {
+              this.$emit("getList");
+              this.dialogVisible = false;
+            //   this.$message({
+            //     type:'success',
+            //     message: '编辑成功'
+            //   })
+            // }else{
+            //   this.$message({
+            //     type:'warning',
+            //     message: res.msg
+            //   })
+            // }
+          }
+        }
+      })
+
+    },
+    resetDataForm() {
+      this.dataForm = {
+      }
+    },
+  }
+}
+
+</script>
+<style scoped>
+.open{
+  height: 15px;
+}
+</style>
diff --git a/src/views/onlineEducation/courseSupervision/index.vue b/src/views/onlineEducation/courseSupervision/index.vue
new file mode 100644
index 0000000..dcda9a4
--- /dev/null
+++ b/src/views/onlineEducation/courseSupervision/index.vue
@@ -0,0 +1,189 @@
+<template>
+  <div class="app-container">
+    <span style="font-size: 20px;font-weight: 550">课程汲取与课程监管</span>
+    <div style="margin-left: -35px;margin-top: 15px">
+      <el-select v-model="queryParams.platform"  size="small" style="margin-left: 40px;" placeholder="请选择平台">
+        <el-option
+          v-for="item in platformList"
+          :key="item.value"
+          :label="item.label"
+          :value="item.value">
+        </el-option>
+      </el-select>
+      <el-button
+        size="small"
+        type="primary"
+        style="margin-bottom: 10px;margin-left: 20px"
+        @click="handleQuery()"
+      >查询</el-button>
+      <el-button
+        size="small"
+        type="primary"
+        style="margin-bottom: 10px"
+        @click="resetQuery()"
+      >重置</el-button>
+    </div>
+    <el-table v-loading="loading" :data="expertList" style="margin-top: 10px">
+      <el-table-column label="课程标识UUID" align="center" prop="courseCode" />
+      <el-table-column label="来源企业" align="center" prop="unit" />
+      <el-table-column label="课程名称" align="center" prop="courseName" />
+      <el-table-column label="课程章节数" align="center" prop="courseNum" >
+        <template #default="scope">
+          <span @click="handleViewCourse(scope.row)" style="color: #1890ff;cursor: pointer">{{scope.row.courseNum}}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="总课时" align="center" prop="lessonNum" />
+      <el-table-column label="查看已学学员" align="center" prop="student" >
+        <template #default="scope">
+          <span style="color: #1890ff;cursor: pointer" @click="openStudent(scope.row)">{{scope.row.student}}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="审核状态" align="center" prop="state" />
+      <el-table-column label="删除标识" align="center" prop="delFlag" />
+      <el-table-column label="创建时间" align="center" prop="createTime" />
+      <el-table-column label="最近修改时间" align="center" prop="updateTime" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template #default="scope">
+          <el-button
+            size="mini"
+            type="text"
+            style="color: #1890ff"
+          >预览课程</el-button>
+          <el-button
+            v-if="scope.row.state == '未审核'"
+            size="mini"
+            type="text"
+            style="color: #1890ff"
+            @click="check(scope.row)"
+          >审核</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageIndex"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+    <course-dialog ref="courseDialogRef" @getList = "getList"></course-dialog>
+    <studentList ref="studentDialog" @getList = "getList"></studentList>
+  </div>
+</template>
+
+<script>
+import courseDialog from '@/views/onlineEducation/courseSupervision/components/courseDialog.vue'
+import studentList from '@/views/onlineEducation/count/components/studentList.vue'
+import { delJobRegist } from '@/api/coalMine/jobRegist'
+export default {
+  name: "nPeopleManage",
+  dicts: [],
+  components: { courseDialog,studentList},
+  data() {
+    return {
+      loading: false,
+      single: true,
+      multiple: true,
+      showSearch: true,
+      addForm: false,
+      total: 0,
+      platformList: [
+        {
+          value: '1',
+          label: '平台1'
+        },
+        {
+          value: '2',
+          label: '平台2'
+        },
+      ],
+      expertList: [],
+      queryParams: {
+        pageIndex: 1,
+        pageSize: 10,
+        platform: ''
+      },
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    getList(){
+      this.loading = true;
+      this.expertList = [
+        {
+          courseCode: '2024060600001',
+          unit: '测试数据1',
+          courseName:'测试课程1',
+          courseNum: 12,
+          lessonNum: 300,
+          student: 600,
+          state:'未审核',
+          delFlag:'未删除',
+          createTime: '2024-6-11 10:32:00',
+          updateTime: '2024-6-11 10:32:00'
+        },
+        {
+          courseCode: '2024060600002',
+          unit: '测试数据2',
+          courseName:'测试课程1',
+          courseNum: 12,
+          lessonNum: 300,
+          student: 120,
+          state:'已审核',
+          delFlag:'未删除',
+          createTime: '2024-6-11 10:32:00',
+          updateTime: '2024-6-11 10:32:00'
+        },
+        {
+          courseCode: '2024060600003',
+          unit: '测试数据3',
+          courseName:'测试课程1',
+          courseNum: 12,
+          lessonNum: 100,
+          student: 600,
+          state:'审核不符合',
+          delFlag:'已删除',
+          createTime: '2024-6-11 10:32:00',
+          updateTime: '2024-6-11 10:32:00'
+        },
+      ]
+      this.total = 2
+      this.loading = false;
+
+    },
+    handleChange(){
+
+    },
+    handleQuery(){
+      this.getList();
+
+    },
+    resetQuery(){
+      this.queryParams = {
+        pageIndex: 1,
+        pageSize: 10,
+        platform: ''
+      }
+      this.getList();
+    },
+    handleViewCourse(data){
+      this.$refs.courseDialogRef.openDialog(data);
+    },
+    openStudent(data) {
+      this.$refs.studentDialog.openDialog(data);
+    },
+    check(val){
+      this.$confirm('此操作将审核该条数据, 是否继续?', '提示', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(async () => {
+      }).catch(() => {
+
+      });
+    }
+  }
+};
+</script>
diff --git a/src/views/onlineEducation/examManage/components/detailDialog.vue b/src/views/onlineEducation/examManage/components/detailDialog.vue
new file mode 100644
index 0000000..2068d86
--- /dev/null
+++ b/src/views/onlineEducation/examManage/components/detailDialog.vue
@@ -0,0 +1,151 @@
+<template>
+  <el-dialog
+    title="学习记录详情"
+    :visible.sync="dialogVisible"
+    :modal-append-to-body="false"
+    :close-on-click-modal="false"
+    width="900px"
+    :before-close="handleClose"
+  >
+    <el-form ref="dataForm" :model="dataForm" label-position="right" label-width="150px" style="padding-right: 50px" >
+      <div class="flex">
+        <el-form-item label="姓名:">
+          <span>{{dataForm.name}}</span>
+        </el-form-item>
+        <el-form-item label="身份证号:" >
+          <span>{{dataForm.idCard}}</span>
+        </el-form-item>
+        <el-form-item label="学习平台:" >
+          <span>{{dataForm.platformName}}</span>
+        </el-form-item>
+        <el-form-item label="所属机构:" >
+          <span>{{dataForm.trainingInstitution}}</span>
+        </el-form-item>
+      </div>
+      <el-form-item label="当前班级(批次):">
+        <span>{{dataForm.classBatch}}</span>
+      </el-form-item>
+
+      <div class="flex">
+        <el-form-item label="课程:">
+          <span>{{dataForm.course}}</span>
+        </el-form-item>
+        <el-form-item label="章节:">
+          <span>{{dataForm.chapter}}</span>
+        </el-form-item>
+      </div>
+      <el-table
+        :data="examTable"
+        style="width: 80%;margin-left: 50px">
+        <el-table-column
+          prop="learningTime"
+          label="学习时长"
+          width="180">
+        </el-table-column>
+        <el-table-column
+          prop="startTime"
+          label="开始时间"
+          width="180">
+        </el-table-column>
+        <el-table-column
+          label="结束时间"
+          prop="endTime">
+        </el-table-column>
+      </el-table>
+      <div class="columnFlex" style="margin: 30px 20px ">
+        <span style="font-size: 20px;font-weight: 550">认证纪录集合</span>
+        <div class="columnFlex" style="margin-top: 15px">
+          <img style="height: 130px;width: 130px;" src="../../../../assets/images/im.png">
+          <div class="columnFlex" style="margin-top: 15px;font-size: 16px;line-height: 25px">
+            <span>认证位置:xxxx</span>
+            <span>类别:签到</span>
+            <span>认证时间:2024-6-11 10:32:00</span>
+          </div>
+        </div>
+      </div>
+      <div class="columnFlex" style="margin: 30px 20px ">
+        <span style="font-size: 20px;font-weight: 550">视频存档 (非必传)</span>
+        <div class="columnFlex" style="margin-top: 5px">
+          <span style="font-size: 18px;">无</span>
+        </div>
+      </div>
+      <div class="columnFlex" style="margin: 30px 20px ">
+        <span style="font-size: 20px;font-weight: 550">学习轨迹</span>
+        <div class="columnFlex" style="margin-top: 5px">
+          <el-table
+            :data="examTable"
+            style="width: 80%;margin: 10px 25px">
+            <el-table-column
+              prop="learningTime"
+              label="学习时长"
+              width="180">
+            </el-table-column>
+            <el-table-column
+              prop="startTime"
+              label="开始时间"
+              width="180">
+            </el-table-column>
+            <el-table-column
+              label="结束时间"
+              prop="endTime">
+            </el-table-column>
+          </el-table>
+        </div>
+      </div>
+      <div class="columnFlex" style="margin: 30px 20px ">
+        <span style="font-size: 20px;font-weight: 550">学时报告</span>
+        <div class="columnFlex" style="margin-top: 10px">
+          <img style="height: 130px;width: 150px;" src="../../../../assets/images/im.png">
+        </div>
+      </div>
+
+    </el-form>
+  </el-dialog>
+</template>
+
+<script >
+
+export default {
+  name: 'addUser',
+  components: {
+  },
+  data() {
+    return {
+      dialogVisible: false,
+      dialogStatus: '',
+      dataForm: {},
+      examTable: []
+    }
+  },
+  created() {
+  },
+  methods: {
+    openDialog (data) {
+      this.dialogVisible = true;
+      this.dataForm = {
+        name: '张三',
+        idCard: '123456',
+        platformName: '链工宝',
+        trainingInstitution: '新疆水利水电学院',
+        classBatch: '2024第一批',
+        course: '测试课程1',
+        chapter: '测试章节1'
+      }
+    },
+    handleClose() {
+      this.dialogVisible = false;
+      this.$emit("getList");
+    },
+  }
+}
+
+</script>
+<style lang="scss" scoped>
+.flex{
+  display: flex;
+  margin-left: -85px
+}
+.columnFlex{
+  display: flex;flex-direction: column
+}
+</style>
diff --git a/src/views/onlineEducation/examManage/index.vue b/src/views/onlineEducation/examManage/index.vue
new file mode 100644
index 0000000..49b5092
--- /dev/null
+++ b/src/views/onlineEducation/examManage/index.vue
@@ -0,0 +1,111 @@
+<template>
+  <div class="app-container">
+    <el-table v-loading="loading" :data="expertList">
+      <el-table-column label="记录ID" align="center" prop="id" />
+      <el-table-column label="姓名" align="center" prop="name" />
+      <el-table-column label="身份证号" align="center" prop="idCard" :show-overflow-tooltip="true" />
+      <el-table-column label="上报平台" align="center" prop="platformName" />
+      <el-table-column label="所属培训机构" align="center" prop="trainingInstitution" />
+      <el-table-column label="班级批次" align="center" prop="classBatch" />
+      <el-table-column label="课程名称" align="center" prop="courseName" />
+      <el-table-column label="考试名称" align="center" prop="examName" />
+      <el-table-column label="开考时间" align="center" prop="startTime" />
+      <el-table-column label="结束时间" align="center" prop="endTime" />
+      <el-table-column label="学员成绩" align="center" prop="grade" />
+      <el-table-column label="试卷总分" align="center" prop="examTotal" />
+      <el-table-column label="合格分数" align="center" prop="qualifiedScore" />
+      <el-table-column label="是否通过" align="center" prop="isPass" />
+      <el-table-column label="考试次数" align="center" prop="examNum" />
+    </el-table>
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageIndex"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+  </div>
+</template>
+
+<script>
+export default {
+  name: "nPeopleManage",
+  dicts: [],
+  components: {},
+  data() {
+    return {
+      loading: false,
+      single: true,
+      multiple: true,
+      showSearch: true,
+      addForm: false,
+      total: 0,
+      expertTypes: [],
+      expertList: [],
+      queryParams: {
+        pageIndex: 1,
+        pageSize: 10
+      },
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    getList(){
+      this.loading = true;
+      this.expertList = [
+        {
+          id: '2024060600001',
+          name: '张三',
+          idCard: '321154874512225541',
+          platformName:'测试数据1',
+          trainingInstitution:'测试机构1',
+          classBatch: '批次1',
+          courseName:'测试课程1',
+          examName:'测试考试1',
+          startTime:'2024-6-11 10:32:00',
+          endTime:'2024-6-11 12:32:00',
+          grade: 80,
+          examTotal: 100,
+          qualifiedScore: 60,
+          isPass: '是',
+          examNum: 1,
+        },
+        {
+          id: '2024060600002',
+          name: '李四',
+          idCard: '32115487451215241',
+          platformName:'测试数据2',
+          trainingInstitution:'测试机构2',
+          classBatch: '批次2',
+          courseName:'测试课程2',
+          examName:'测试考试2',
+          startTime:'2024-6-11 10:32:00',
+          endTime:'2024-6-11 12:32:00',
+          grade: 55,
+          examTotal: 100,
+          qualifiedScore: 60,
+          isPass: '否',
+          examNum: 2,
+        },
+      ]
+      this.total = 2
+      this.loading = false;
+
+    },
+    handleChange(){
+
+    },
+    handleQuery(){
+
+    },
+    resetQuery(){
+
+    },
+    handleView(){
+
+    }
+  }
+};
+</script>
diff --git a/src/views/onlineEducation/learnRecord/index.vue b/src/views/onlineEducation/learnRecord/index.vue
new file mode 100644
index 0000000..51d616d
--- /dev/null
+++ b/src/views/onlineEducation/learnRecord/index.vue
@@ -0,0 +1,105 @@
+<template>
+  <div class="app-container">
+    <el-table v-loading="loading" :data="expertList">
+      <el-table-column label="记录编号" align="center" prop="id" />
+      <el-table-column label="身份证号" align="center" prop="idCard" :show-overflow-tooltip="true" />
+      <el-table-column label="上报平台" align="center" prop="platformName" />
+      <el-table-column label="所属培训机构" align="center" prop="trainingInstitution" />
+      <el-table-column label="班级批次" align="center" prop="classBatch" />
+      <el-table-column label="课程" align="center" prop="course" />
+      <el-table-column label="章节" align="center" prop="chapter" />
+      <el-table-column label="学习时长" align="center" prop="learningTime" />
+      <el-table-column label="是否彻底完成" align="center" prop="isComplete" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template #default="scope">
+          <el-button
+            size="mini"
+            type="text"
+            style="color: #1890ff"
+            @click="handleView(scope.row)"
+          >查看详细记录</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageIndex"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+    <detail-dialog ref="detailDialogRef" @getList = "getList"></detail-dialog>
+  </div>
+</template>
+
+<script>
+import detailDialog from '@/views/onlineEducation/examManage/components/detailDialog.vue'
+export default {
+  name: "nPeopleManage",
+  dicts: [],
+  components: { detailDialog},
+  data() {
+    return {
+      loading: false,
+      single: true,
+      multiple: true,
+      showSearch: true,
+      addForm: false,
+      total: 0,
+      expertTypes: [],
+      expertList: [],
+      queryParams: {
+        pageIndex: 1,
+        pageSize: 10
+      },
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    getList(){
+      this.loading = true;
+      this.expertList = [
+        {
+          id: '2024060600001',
+          idCard: '321154874512225541',
+          platformName:'测试数据1',
+          trainingInstitution:'测试机构1',
+          classBatch: '批次1',
+          course:'测试课程1',
+          chapter:'测试章节1',
+          learningTime:'2h',
+          isComplete: '是'
+        },
+        {
+          id: '2024060600002',
+          idCard: '321154874512441141',
+          platformName:'测试数据2',
+          trainingInstitution:'测试机构2',
+          classBatch: '批次2',
+          course:'测试课程2',
+          chapter:'测试章节2',
+          learningTime:'2h',
+          isComplete: '否'
+        },
+      ]
+      this.total = 2
+      this.loading = false;
+
+    },
+    handleChange(){
+
+    },
+    handleQuery(){
+
+    },
+    resetQuery(){
+
+    },
+    handleView(data){
+      this.$refs.detailDialogRef.openDialog(data);
+    }
+  }
+};
+</script>
diff --git a/src/views/onlineEducation/platformManage/components/addDialog.vue b/src/views/onlineEducation/platformManage/components/addDialog.vue
new file mode 100644
index 0000000..825e6c0
--- /dev/null
+++ b/src/views/onlineEducation/platformManage/components/addDialog.vue
@@ -0,0 +1,154 @@
+<template>
+  <el-dialog
+    :title="dialogStatus==='add'?'新增':'编辑'"
+    :visible.sync="dialogVisible"
+    :modal-append-to-body="false"
+    :close-on-click-modal="false"
+    width="500px"
+    :before-close="handleClose"
+  >
+    <el-form ref="dataForm" :model="dataForm"  :rules="rules" label-position="right" label-width="150px" style="padding-right: 50px" element-loading-text="保存中...">
+      <el-form-item label="平台名称:" prop="name">
+        <el-input v-model.trim="dataForm.name"/>
+      </el-form-item>
+      <el-form-item label="AccessKey:" prop="AccessKey">
+        <el-input  v-model.trim="dataForm.AccessKey"/>
+      </el-form-item>
+      <el-form-item label="SecretKey:" prop="SecretKey">
+        <el-input v-model.trim="dataForm.SecretKey"/>
+      </el-form-item>
+      <el-form-item label="联系人:" prop="people">
+        <el-input v-model.trim="dataForm.people"/>
+      </el-form-item>
+      <el-form-item label="联系电话:" prop="phone">
+        <el-input v-model.trim="dataForm.phone" :maxlength="11" />
+      </el-form-item>
+    </el-form>
+    <span slot="footer" class="dialog-footer">
+      <el-button @click="handleClose">取 消</el-button>
+      <el-button type="primary" @click="onSubmit">确 定</el-button>
+    </span>
+  </el-dialog>
+</template>
+
+<script >
+export default {
+  name: 'addUser',
+  components: {
+  },
+  data() {
+    return {
+      dialogVisible: false,
+      dialogStatus: '',
+      rules: {
+        name: [{ required: true, message: '请输入平台名称', trigger: 'blur' }],
+        phone: [
+          {
+            pattern: /^1[0-9]{10}$/,
+            message: '手机号格式不正确',
+            trigger: 'blur'
+          }
+        ],
+      },
+      dataForm: {}
+    }
+  },
+  created() {
+    this.getArea();
+    this.getTrain();
+  },
+  methods: {
+    openDialog (type, data) {
+      this.resetDataForm();
+      this.dialogVisible = true;
+      this.dialogStatus = type;
+      if(this.dialogStatus == 'edit') {
+        this.dataForm = data;
+        this.dataForm.institutionId = data.institutionId.toString()
+      }
+      this.$nextTick(() => {
+        this.$refs['dataForm'].clearValidate()
+      })
+    },
+    async getTrain() {
+      const param = {
+        isCm: 1
+      }
+      const res = await getTrainList(param);
+      if(res.code == 200) {
+        this.trainList = res.data;
+      }else{
+        this.$message({
+          type:'warning',
+          message: res.msg
+        })
+      }
+    },
+    async getArea() {
+      const res = await getAreaList();
+      if(res.code == 200) {
+        this.areaList = res.data;
+      }else{
+        this.$message({
+          type:'warning',
+          message: res.msg
+        })
+      }
+    },
+    handleClose() {
+      this.dialogVisible = false;
+      this.$emit("getList");
+    },
+    onSubmit() {
+      this.$refs["dataForm"].validate( async valid => {
+        if (valid) {
+          if(this.dialogStatus == 'add'){
+            // this.dataForm.isCm = 1;
+            // console.log("this.dataForm",this.dataForm)
+            // const res = await addExam(this.dataForm);
+            // if(res.code == 200) {
+              this.$emit("getList");
+              this.dialogVisible = false;
+            //   this.$message({
+            //     type:'success',
+            //     message: '新增成功'
+            //   })
+            // }else{
+            //   this.$message({
+            //     type:'warning',
+            //     message: res.msg
+            //   })
+            // }
+          }else {
+            // this.dataForm.isCm = 1;
+            // console.log("this.dataForm",this.dataForm)
+            // const res = await updateExam(this.dataForm);
+            // if(res.code == 200) {
+              this.$emit("getList");
+              this.dialogVisible = false;
+            //   this.$message({
+            //     type:'success',
+            //     message: '编辑成功'
+            //   })
+            // }else{
+            //   this.$message({
+            //     type:'warning',
+            //     message: res.msg
+            //   })
+            // }
+          }
+        }
+      })
+
+    },
+    resetDataForm() {
+      this.dataForm = {
+      }
+    },
+  }
+}
+
+</script>
+<style scoped>
+
+</style>
diff --git a/src/views/onlineEducation/platformManage/index.vue b/src/views/onlineEducation/platformManage/index.vue
new file mode 100644
index 0000000..06ae0cf
--- /dev/null
+++ b/src/views/onlineEducation/platformManage/index.vue
@@ -0,0 +1,129 @@
+<template>
+  <div class="app-container">
+    <el-button
+      size="medium"
+      type="primary"
+      style="margin-bottom: 10px"
+      @click="handleAdd('add',{})"
+    >新增</el-button>
+    <el-table v-loading="loading" :data="expertList">
+      <el-table-column label="平台编号" align="center" type="index"width="80" />
+      <el-table-column label="平台名称" align="center" prop="name" />
+      <el-table-column label="AccessKey" align="center" prop="AccessKey" />
+      <el-table-column label="SecretKey" align="center" prop="SecretKey" />
+      <el-table-column label="联系人" align="center" prop="people" />
+      <el-table-column label="联系电话" align="center" prop="phone" />
+      <el-table-column label="更新时间" align="center" prop="updateTime" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template #default="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-view"
+            @click="handleAdd('edit',scope.row)"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            style="color: #f56c6c"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['system:experts:remove']"
+          >删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageIndex"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+    <add-dialog ref="addDialogRef" @getList = "getList"></add-dialog>
+  </div>
+</template>
+
+<script>
+import addDialog from '@/views/onlineEducation/platformManage/components/addDialog.vue'
+import { delExam } from '@/api/coalMine/placeManage/exam'
+export default {
+  name: "platformManage",
+  components: {addDialog},
+  data() {
+    return {
+      loading: false,
+      single: true,
+      multiple: true,
+      showSearch: true,
+      addForm: false,
+      total: 0,
+      expertList: [],
+      queryParams: {
+        pageIndex: 1,
+        pageSize: 10
+      },
+      classiFy: [],
+      form: {},
+      rules: {
+        classifyName: [
+          { required: true, message: "分类名称不能为空", trigger: "blur" }
+        ]
+      }
+    };
+  },
+  created() {
+    this.getList();
+
+  },
+  methods: {
+    getList(){
+      this.loading = true;
+      this.expertList = [
+        {
+          id: 1,
+          name: '测试数据1',
+          AccessKey: '12345',
+          SecretKey: '12345',
+          people: '张三',
+          phone: '13453456456',
+          updateTime: '2024-6-11 10:32:00 '
+
+        },
+        {
+          id: 2,
+          name: '测试数据3',
+          AccessKey: '14564',
+          SecretKey: '16665',
+          people: '李四',
+          phone: '13453456456',
+          updateTime: '2024-6-11 10:33:00 '
+
+        }
+      ]
+      this.total = 2
+      this.loading = false;
+    },
+    handleDelete(val) {
+      this.$confirm('删除此条信息,是否继续', '提示', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        // delExam( val.siteId).then((res) => {
+        //   if (res.code == 200) {
+        //     this.$message({
+        //       type:'success',
+        //       message: '删除成功'
+        //     })
+        //     this.getList()
+        //   }
+        // })
+      })
+    },
+    handleAdd(type,data){
+      this.$refs.addDialogRef.openDialog(type, data);
+    }
+  }
+};
+</script>
diff --git a/src/views/onlineEducation/questionManage/index.vue b/src/views/onlineEducation/questionManage/index.vue
new file mode 100644
index 0000000..33e35a8
--- /dev/null
+++ b/src/views/onlineEducation/questionManage/index.vue
@@ -0,0 +1,103 @@
+<template>
+  <div class="app-container">
+    <el-table v-loading="loading" :data="expertList">
+      <el-table-column label="月份" align="center" prop="month" />
+      <el-table-column label="平台名称" align="center" prop="name" />
+      <el-table-column label="上月题库总题目数" align="center" prop="totalNum" />
+      <el-table-column label="新增题目数量" align="center" prop="addQuestionNum" />
+      <el-table-column label="减少题目数" align="center" prop="reduceQuestionNum" />
+      <el-table-column label="刷题应用率" align="center" prop="brushQuestionsRate" />
+      <el-table-column label="组卷应用率" align="center" prop="testPaperRate" />
+      <el-table-column label="上报时间" align="center" prop="time" />
+      <el-table-column label="组卷预览" align="center" class-name="small-padding fixed-width">
+        <template #default="scope">
+          <el-button
+            size="mini"
+            type="text"
+            style="color: #1890ff"
+            @click="handleView(scope.row)"
+          >点击预览</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageIndex"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+  </div>
+</template>
+
+<script>
+export default {
+  name: "nPeopleManage",
+  dicts: [],
+  components: {},
+  data() {
+    return {
+      loading: false,
+      single: true,
+      multiple: true,
+      showSearch: true,
+      addForm: false,
+      total: 0,
+      expertTypes: [],
+      expertList: [],
+      queryParams: {
+        pageIndex: 1,
+        pageSize: 10
+      },
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    getList(){
+      this.loading = true;
+      this.expertList = [
+        {
+          id: 1,
+          month: '2024年6月',
+          name: '测试数据1',
+          totalNum: 120,
+          addQuestionNum: 20,
+          reduceQuestionNum: 10,
+          brushQuestionsRate: '80%',
+          testPaperRate: '75%',
+          time: '2024-6-11 10:32:00 '
+
+        },
+        {
+          id: 2,
+          month: '2024年6月',
+          name: '测试数据2',
+          totalNum: 100,
+          addQuestionNum: 10,
+          reduceQuestionNum: 15,
+          brushQuestionsRate: '90%',
+          testPaperRate: '85%',
+          time: '2024-6-11 10:32:00 '
+        }
+      ]
+      this.total = 2
+      this.loading = false;
+
+    },
+    handleChange(){
+
+    },
+    handleQuery(){
+
+    },
+    resetQuery(){
+
+    },
+    handleView(){
+
+    }
+  }
+};
+</script>
diff --git a/src/views/onlineEducation/studentSupervision/compontents/learningRecord.vue b/src/views/onlineEducation/studentSupervision/compontents/learningRecord.vue
new file mode 100644
index 0000000..b58f0dc
--- /dev/null
+++ b/src/views/onlineEducation/studentSupervision/compontents/learningRecord.vue
@@ -0,0 +1,123 @@
+<template>
+  <el-dialog
+    title="学习记录"
+    :visible.sync="dialogVisible"
+    :modal-append-to-body="false"
+    :close-on-click-modal="false"
+    width="850px"
+    :before-close="handleClose"
+    append-to-body
+  >
+    <el-table
+      :data="learningTable"
+      style="width: 100%;">
+      <el-table-column
+        prop="startTime"
+        label="开始时间"
+        width="160"
+        >
+      </el-table-column>
+      <el-table-column
+        label="结束时间"
+        prop="endTime"
+      width="160">
+      </el-table-column>
+      <el-table-column
+        prop="trainingInstitutions"
+        label="培训机构"
+        >
+      </el-table-column>
+      <el-table-column
+        prop="platform"
+        label="线上平台"
+        >
+      </el-table-column>
+      <el-table-column
+        prop="courseName"
+        label="课程名称"
+        >
+      </el-table-column>
+      <el-table-column
+        prop="courseTime"
+        label="课程时长"
+        >
+      </el-table-column>
+      <el-table-column
+        prop="learningTime"
+        label="学习时长"
+        >
+      </el-table-column>
+      <el-table-column
+        prop="isComplete"
+        label="是否已完成"
+        >
+      </el-table-column>
+    </el-table>
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageIndex"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+  </el-dialog>
+</template>
+
+<script >
+export default {
+  name: 'addUser',
+  components: {
+  },
+  data() {
+    return {
+      dialogVisible: false,
+      dialogStatus: '',
+      dataForm: {},
+      total: 2,
+      queryParams: {},
+      learningTable: [
+        {
+          startTime: '2024-6-11 10:33:00',
+          endTime: '2024-6-11 12:33:00',
+          trainingInstitutions: 'xxx',
+          platform: 'xxx',
+          courseName: '课程1',
+          courseTime: '2h',
+          learningTime: '1h',
+          isComplete: '否'
+        },
+        {
+          startTime: '2024-6-11 10:33:00',
+          endTime: '2024-6-11 12:33:00',
+          trainingInstitutions: 'xxx',
+          platform: 'xxx',
+          courseName: '课程1',
+          courseTime: '2h',
+          learningTime: '1h',
+          isComplete: '否'
+        }
+      ]
+    }
+  },
+  created() {
+  },
+  methods: {
+    getList() {
+
+    },
+    openDialog (type, data) {
+      this.dialogVisible = true;
+      this.dialogStatus = type;
+    },
+
+    handleClose() {
+      this.dialogVisible = false;
+      this.$emit("getList");
+    },
+  }
+}
+
+</script>
+<style scoped>
+
+</style>
diff --git a/src/views/onlineEducation/studentSupervision/compontents/lessonReport.vue b/src/views/onlineEducation/studentSupervision/compontents/lessonReport.vue
new file mode 100644
index 0000000..85c8db9
--- /dev/null
+++ b/src/views/onlineEducation/studentSupervision/compontents/lessonReport.vue
@@ -0,0 +1,46 @@
+<template>
+  <el-dialog
+    title="学时报告"
+    :visible.sync="dialogVisible"
+    :modal-append-to-body="false"
+    :close-on-click-modal="false"
+    width="850px"
+    :before-close="handleClose"
+    append-to-body
+  >
+    <div class="columnFlex" style="margin-top: 10px">
+      <img style="height: 130px;width: 150px;" src="../../../../assets/images/im.png">
+    </div>
+  </el-dialog>
+</template>
+
+<script >
+export default {
+  name: 'addUser',
+  components: {
+  },
+  data() {
+    return {
+      dialogVisible: false,
+      dialogStatus: '',
+    }
+  },
+  created() {
+  },
+  methods: {
+    openDialog (type, data) {
+      this.dialogVisible = true;
+      this.dialogStatus = type;
+    },
+
+    handleClose() {
+      this.dialogVisible = false;
+      this.$emit("getList");
+    },
+  }
+}
+
+</script>
+<style scoped>
+
+</style>
diff --git a/src/views/onlineEducation/studentSupervision/index.vue b/src/views/onlineEducation/studentSupervision/index.vue
new file mode 100644
index 0000000..031dcaa
--- /dev/null
+++ b/src/views/onlineEducation/studentSupervision/index.vue
@@ -0,0 +1,167 @@
+<template>
+  <div class="app-container">
+    <div style="display: flex">
+     <el-input placeholder="请输入身份证号" v-model="queryParams.idCard" style="width: 250px"></el-input>
+      <el-input placeholder="请输入姓名" v-model="queryParams.name" style="width: 250px;margin-left: 20px"></el-input>
+      <el-button
+        size="small"
+        type="primary"
+        style="margin-bottom: 10px;margin-left: 20px"
+        @click="handleQuery()"
+      >查询</el-button>
+      <el-button
+        size="small"
+        type="primary"
+        style="margin-bottom: 10px"
+        @click="resetQuery()"
+      >重置</el-button>
+    </div>
+    <el-table v-loading="loading" :data="expertList">
+      <el-table-column label="姓名" align="center" prop="name" />
+      <el-table-column label="身份证号" align="center" prop="idCard" :show-overflow-tooltip="true" />
+      <el-table-column label="性别" align="center" prop="sex" />
+      <el-table-column label="手机号" align="center" prop="phone" />
+      <el-table-column label="实名认证照" align="center" prop="photo" >
+        <template #default="scope">
+          <el-image
+            style="width: 100px; height: 100px"
+            :src="scope.row.photo"
+            :preview-src-list="[scope.row.photo]">
+          </el-image>
+        </template>
+      </el-table-column>
+      <el-table-column label="当前归属单位" align="center" prop="unit" />
+      <el-table-column label="行业" align="center" prop="industry" />
+      <el-table-column label="工种" align="center" prop="job" />
+      <el-table-column label="初次上报平台" align="center" prop="platform" />
+      <el-table-column label="上报时间" align="center" prop="reportTime" />
+      <el-table-column label="最近更新平台" align="center" prop="updatePlatform" />
+      <el-table-column label="最新更新时间" align="center" prop="updateTime" />
+      <el-table-column label="历史记录" align="center" class-name="small-padding fixed-width">
+        <template #default="scope">
+          <el-button
+            size="mini"
+            type="text"
+            @click="viewLearnRecord(scope.row)"
+          >学习记录</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            @click="viewExamRecord(scope.row)"
+          >考试记录</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageIndex"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+    <learning-record ref="learnRef" ></learning-record>
+    <el-dialog
+      title="考试记录"
+      :visible.sync="dialogVisible"
+      :modal-append-to-body="false"
+      :close-on-click-modal="false"
+      width="850px"
+      :before-close="handleClose">
+      <exam-manage ref="examManageRef"></exam-manage>
+    </el-dialog>
+
+  </div>
+</template>
+
+<script>
+import examManage from '@/views/onlineEducation/examManage/index.vue'
+import learningRecord from '@/views/onlineEducation/studentSupervision/compontents/learningRecord.vue'
+export default {
+  name: "nPeopleManage",
+  dicts: [],
+  components: {learningRecord,examManage},
+  data() {
+    return {
+      loading: false,
+      single: true,
+      multiple: true,
+      showSearch: true,
+      addForm: false,
+      total: 0,
+      expertTypes: [],
+      expertList: [],
+      queryParams: {},
+      dialogVisible:false
+    };
+  },
+  created() {
+    this.getList()
+
+  },
+  methods: {
+    getList(){
+      this.loading = true;
+      this.expertList = [
+        {
+          id: 1,
+          name: '张三',
+          sex: '男',
+          idCard: '321154874512225541',
+          phone:'13587452145',
+          photo: 'https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg',
+          unit: '培训机构',
+          industry: 'xxx',
+          job: 'xxx',
+          platform: '测试平台1',
+          reportTime: '2024-6-11 10:32:00',
+          updatePlatform: '测试平台2',
+          updateTime: '2024-6-11 13:32:00'
+
+        },
+        {
+          id: 2,
+          name: '李四',
+          sex: '女',
+          idCard: '321154874512225541',
+          phone:'13587452145',
+          photo: 'https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg',
+          unit: '培训机构',
+          industry: 'xxx',
+          job: 'xxx',
+          platform: '测试平台1',
+          reportTime: '2024-6-11 10:32:00',
+          updatePlatform: '测试平台2',
+          updateTime: '2024-6-11 13:32:00'
+
+        },
+      ]
+      this.total = 2;
+      this.loading = false;
+    },
+    handleChange(){
+
+    },
+    handleQuery(){
+      this.getList()
+    },
+    resetQuery(){
+      this.queryParams = {
+        pageIndex: 1,
+        pageSize: 10,
+        idCard: '',
+        name: '',
+      }
+      this.getList()
+    },
+    viewLearnRecord(data){
+      this.$refs.learnRef.openDialog(data)
+    },
+    viewExamRecord(data){
+      this.dialogVisible = true
+    },
+    handleClose() {
+      this.dialogVisible = false;
+    },
+  }
+};
+</script>

--
Gitblit v1.9.2