From ff3b5c2ba2a757f050cf833f1af340f384874934 Mon Sep 17 00:00:00 2001
From: fuliqi <fuliqi@qq.com>
Date: 星期四, 04 七月 2024 17:08:04 +0800
Subject: [PATCH] 教学资源加班级

---
 src/views/exam/paper/list.vue         |    2 
 src/api/meet.js                       |   75 ++++---
 src/store/modules/enumItem.js         |   28 +-
 src/views/train/data-list/index.vue   |   23 +
 src/views/train/index.vue             |   68 ++++--
 src/views/education/resource/list.vue |  204 +++++++++++--------
 src/views/meet/index.vue              |   32 +-
 src/views/exam/exam/MarkPaper.vue     |    6 
 src/views/exam/paper/edit.vue         |  108 +++++++---
 9 files changed, 330 insertions(+), 216 deletions(-)

diff --git a/src/api/meet.js b/src/api/meet.js
index 72e9cc8..e5db7b1 100644
--- a/src/api/meet.js
+++ b/src/api/meet.js
@@ -1,61 +1,68 @@
-import axios from "./request";
+import axios from './request'
 
 // 鑾峰彇浼氳琛ㄥ垎椤�
 export const getMeets = (params) => {
-    return axios({
-        url: "/api/admin/meet/page",
-        method: "GET",
-        params: params
-    })
+  return axios({
+    url: '/api/admin/meet/page',
+    method: 'GET',
+    params: params
+  })
 }
 
 // 鑾峰彇浼氳琛ㄥ垪琛�
 export const getMeetList = () => {
-    return axios({
-        url: "/api/admin/meet/list",
-        method: "GET"
-    })
+  return axios({
+    url: '/api/admin/meet/list',
+    method: 'GET'
+  })
 }
 
 // 閫氳繃id鑾峰彇浼氳琛�
 export const getMeetById = (params) => {
-    return axios({
-        url: "/api/admin/meet/" + params,
-        method: "GET"
-    })
+  return axios({
+    url: '/api/admin/meet/' + params,
+    method: 'GET'
+  })
 }
 
 // 閫氳繃id鍒犻櫎浼氳琛�
 export const deleteMeetById = (params) => {
-    return axios({
-        url: "/api/admin/meet/" + params,
-        method: "DELETE"
-    })
+  return axios({
+    url: '/api/admin/meet/' + params,
+    method: 'DELETE'
+  })
 }
 
 // 鎵归噺鍒犻櫎浼氳琛�
 export const deleteMeetByIds = (params) => {
-    return axios({
-        url: "/api/admin/meet/batch",
-        method: "DELETE",
-        data: params
-    })
+  return axios({
+    url: '/api/admin/meet/batch',
+    method: 'DELETE',
+    data: params
+  })
 }
 
 // 淇敼浼氳琛�
 export const editMeet = (params) => {
-    return axios({
-        url: "/api/admin/meet/",
-        method: "PUT",
-        data: params
-    })
+  return axios({
+    url: '/api/admin/meet/',
+    method: 'PUT',
+    data: params
+  })
 }
-
+// 淇敼浼氳琛�
+export const startMeet = (params) => {
+  return axios({
+    url: '/api/admin/meet/start',
+    method: 'PUT',
+    data: params
+  })
+}
 // 娣诲姞浼氳琛�
 export const addMeet = (params) => {
-    return axios({
-        url: "/api/admin/meet/",
-        method: "POST",
-        data: params
-    })
+  return axios({
+    url: '/api/admin/meet/',
+    method: 'POST',
+    data: params
+  })
 }
diff --git a/src/store/modules/enumItem.js b/src/store/modules/enumItem.js
index 861a788..40697c3 100644
--- a/src/store/modules/enumItem.js
+++ b/src/store/modules/enumItem.js
@@ -3,9 +3,12 @@
   user: {
     sexEnum: [{ key: 1, value: '鐢�' }, { key: 2, value: '濂�' }],
     statusEnum: [{ key: 1, value: '鍚敤' }, { key: 2, value: '绂佺敤' }],
-    levelEnum: [{ key: 1, value: '涓�骞寸骇' }, { key: 2, value: '浜屽勾绾�' }, { key: 3, value: '涓夊勾绾�' }, { key: 4, value: '鍥涘勾绾�' }, { key: 5, value: '浜斿勾绾�' }, { key: 6, value: '鍏勾绾�' },
-    { key: 7, value: '鍒濅竴' }, { key: 8, value: '鍒濅簩' }, { key: 9, value: '鍒濅笁' },
-    { key: 10, value: '楂樹竴' }, { key: 11, value: '楂樹簩' }, { key: 12, value: '楂樹笁' }],
+    levelEnum: [{ key: 1, value: '涓�骞寸骇' }, { key: 2, value: '浜屽勾绾�' }, { key: 3, value: '涓夊勾绾�' }, {
+      key: 4,
+      value: '鍥涘勾绾�'
+    }, { key: 5, value: '浜斿勾绾�' }, { key: 6, value: '鍏勾绾�' },
+      { key: 7, value: '鍒濅竴' }, { key: 8, value: '鍒濅簩' }, { key: 9, value: '鍒濅笁' },
+      { key: 10, value: '楂樹竴' }, { key: 11, value: '楂樹簩' }, { key: 12, value: '楂樹笁' }],
     roleEnum: [{ key: 1, value: '瀛︾敓' }, { key: 2, value: '鏁欏笀' }, { key: 3, value: '绠$悊鍛�' }],
     statusTag: [{ key: 1, value: 'success' }, { key: 2, value: 'danger' }],
     statusBtn: [{ key: 1, value: '绂佺敤' }, { key: 2, value: '鍚敤' }]
@@ -15,15 +18,18 @@
       paperTypeEnum: [{ key: 1, value: '鍥哄畾璇曞嵎' }, { key: 2, value: '闅忔満璇曞嵎' }, { key: 3, value: '闅忓簭璇曞嵎' }]
     },
     question: {
-      typeEnum: [{ key: 1, value: '鍗曢�夐' }, { key: 2, value: '澶氶�夐' }, { key: 3, value: '鍒ゆ柇棰�' }, { key: 4, value: '濉┖棰�' }, { key: 5, value: '绠�绛旈' }, { key: 6, value: '璇煶棰�' }, { key: 7, value: '璁$畻棰�' }, { key: 8, value: '鍒嗘瀽棰�' }],
+      typeEnum: [{ key: 1, value: '鍗曢�夐' }, { key: 2, value: '澶氶�夐' }, { key: 3, value: '鍒ゆ柇棰�' }, {
+        key: 4,
+        value: '濉┖棰�'
+      }, { key: 5, value: '绠�绛旈' }, { key: 6, value: '璇煶棰�' }, { key: 7, value: '璁$畻棰�' }, { key: 8, value: '鍒嗘瀽棰�' }],
       editUrlEnum: [{ key: 1, value: '/exam/question/edit/singleChoice', name: '鍗曢�夐' },
-      { key: 2, value: '/exam/question/edit/multipleChoice', name: '澶氶�夐' },
-      { key: 3, value: '/exam/question/edit/trueFalse', name: '鍒ゆ柇棰�' },
-      { key: 4, value: '/exam/question/edit/gapFilling', name: '濉┖棰�' },
-      { key: 5, value: '/exam/question/edit/shortAnswer', name: '绠�绛旈' },
-      { key: 6, value: '/exam/question/edit/audio', name: '璇煶棰�' },
-      { key: 7, value: '/exam/question/edit/calculate', name: '璁$畻棰�' },
-      { key: 8, value: '/exam/question/edit/analysis', name: '鍒嗘瀽棰�' }],
+        { key: 2, value: '/exam/question/edit/multipleChoice', name: '澶氶�夐' },
+        { key: 3, value: '/exam/question/edit/trueFalse', name: '鍒ゆ柇棰�' },
+        { key: 4, value: '/exam/question/edit/gapFilling', name: '濉┖棰�' },
+        { key: 5, value: '/exam/question/edit/shortAnswer', name: '绠�绛旈' },
+        { key: 6, value: '/exam/question/edit/audio', name: '璇煶棰�' },
+        { key: 7, value: '/exam/question/edit/calculate', name: '璁$畻棰�' },
+        { key: 8, value: '/exam/question/edit/analysis', name: '鍒嗘瀽棰�' }],
       answer: {
         doRightTag: [{ key: true, value: 'success' }, { key: false, value: 'danger' }, { key: null, value: 'warning' }],
         doRightEnum: [{ key: true, value: '姝g‘' }, { key: false, value: '閿欒' }, { key: null, value: '寰呮壒鏀�' }],
diff --git a/src/views/education/resource/list.vue b/src/views/education/resource/list.vue
index 04229c2..cde0a54 100644
--- a/src/views/education/resource/list.vue
+++ b/src/views/education/resource/list.vue
@@ -3,7 +3,13 @@
     <div class="search">
       <el-form :inline="true" :model="searchForm" class="demo-form-inline">
         <el-form-item label="涓婚">
-          <el-input v-model="searchForm.introduction" size="small" placeholder="涓婚鍐呭" clearable @clear="page"></el-input>
+          <el-input v-model="searchForm.introduction" size="small" placeholder="涓婚鍐呭" clearable
+                    @clear="page"></el-input>
+        </el-form-item>
+        <el-form-item label="鐝骇">
+          <el-select v-model="searchForm.classId" clearable @clear="page" @change="page" placeholder="鐝骇">
+            <el-option v-for="item in classesIds" :key="item.id" :label="item.className" :value="item.id"/>
+          </el-select>
         </el-form-item>
         <el-form-item label="绉戠洰">
           <el-select v-model="searchForm.subjectId" clearable @clear="page" @change="page" placeholder="绉戠洰">
@@ -21,11 +27,12 @@
       </div>
     </div>
 
-
     <el-table :data="tableData" border @selection-change="handleSelectionChange" style="width: 100%">
       <el-table-column type="selection" width="55">
       </el-table-column>
       <el-table-column fixed prop="introduction" label="涓婚绠�浠�">
+      </el-table-column>
+      <el-table-column prop="className" label="鐝骇">
       </el-table-column>
       <el-table-column prop="typeName" label="绉戠洰">
       </el-table-column>
@@ -34,26 +41,30 @@
       <el-table-column label="鏂囦欢鍐呭" width="240">
         <template slot-scope="scope">
           <video controls v-if="scope.row.contentType === 'video'" :src="'/api/files/' + scope.row.contentUrl.url"
-                 class="showContent" />
+                 class="showContent"/>
           <el-image v-if="scope.row.contentType === 'img'" :src="'/api/files/' + scope.row.contentUrl.url"
                     class="showContent"></el-image>
           <!-- <img v-if="scope.row.contentType === 'img'" :src="'/api/files/' + scope.row.contentUrl.url"
             class="showContent" /> -->
           <el-link type="primary" v-if="scope.row.contentType === 'pdf'" class="showContent"
-                   @click="checkPdf('/api/files/' + scope.row.contentUrl.url)">鐐瑰嚮鏌ョ湅</el-link>
+                   @click="checkPdf('/api/files/' + scope.row.contentUrl.url)">鐐瑰嚮鏌ョ湅
+          </el-link>
         </template>
       </el-table-column>
       <el-table-column prop="attachment" label="闄勪欢">
         <template slot-scope="scope">
           <div v-for="item in scope.row.attachment" :key="item.url">
-            <el-link type="primary" :href="'/api/upload/download?url=' + item.url +'&fileName=' + item.name" >{{ item.name }}</el-link>
+            <el-link type="primary" :href="'/api/upload/download?url=' + item.url +'&fileName=' + item.name">
+              {{ item.name }}
+            </el-link>
           </div>
         </template>
       </el-table-column>
       <el-table-column fixed="right" label="鎿嶄綔" width="140">
         <template slot-scope="scope">
           <el-button @click="handleUpdate(scope.row)" type="primary" size="small"
-                     style="margin-right: 5px">淇敼</el-button>
+                     style="margin-right: 5px">淇敼
+          </el-button>
           <el-popconfirm :title="getTitle(scope.row.typeName)" @confirm="remove(scope.row.id)">
             <el-button slot="reference" type="danger" size="small">鍒犻櫎</el-button>
           </el-popconfirm>
@@ -62,13 +73,22 @@
     </el-table>
 
     <pagination v-show="total > 0" :total="total" :page.sync="searchForm.pageNum" :limit.sync="searchForm.pageSize"
-                @pagination="page" />
+                @pagination="page"/>
 
     <el-dialog :title="dialogTitle" :visible.sync="open" width="600px" :close-on-click-modal="false"
                :before-close="handleClose">
       <el-form label-position="left" label-width="120px" ref="form" :rules="rules" :model="form">
         <el-form-item label="涓婚绠�浠�" prop="introduction">
           <el-input v-model="form.introduction" placeholder="涓婚鍐呭"></el-input>
+        </el-form-item>
+        <el-form-item label="鐝骇" >
+          <el-select
+            v-model="form.classId"
+            placeholder="鐝骇"
+            clearable
+          >
+            <el-option v-for="item in classesIds" :key="item.id" :label="item.className" :value="item.id"/>
+          </el-select>
         </el-form-item>
         <el-form-item label="绉戠洰" prop="subjectId">
           <el-select v-model="form.subjectId" placeholder="绉戠洰">
@@ -85,11 +105,11 @@
         </el-form-item>
         <el-form-item label="涓婁紶鏂囦欢(涓�涓�)" prop="contentUrl">
           <upload v-show="form.contentType" ref="upload" :fileUrl="form.contentUrl" :fileType="form.contentType"
-                  :fileSizeLimitM="1024" :uploadNum="1" @getUploadUrl="getUploadUrl" @removeFile="removeFile" />
+                  :fileSizeLimitM="1024" :uploadNum="1" @getUploadUrl="getUploadUrl" @removeFile="removeFile"/>
         </el-form-item>
         <el-form-item label="闄勪欢(鏈�澶�3涓�)" prop="attachment">
           <upload :fileSizeLimitM="1024" :uploadNum="3" :fileUrl="form.attachment"
-                  @getUploadUrl="getUploadAttachmentUrl" @removeFile="removeAttachmentFile" />
+                  @getUploadUrl="getUploadAttachmentUrl" @removeFile="removeAttachmentFile"/>
         </el-form-item>
       </el-form>
       <span slot="footer" class="dialog-footer">
@@ -105,26 +125,29 @@
 </template>
 
 <script>
-import Pagination from '@/components/Pagination';
-import EducationResourceAPI from '@/api/educationResource';
-import SubjectAPI from '@/api/subject';
-import Upload from '@/components/UploadC';
+import Pagination from '@/components/Pagination'
+import EducationResourceAPI from '@/api/educationResource'
+import SubjectAPI from '@/api/subject'
+import Upload from '@/components/UploadC'
+import { myClasses } from '@/api/classes'
 
-import VueOfficePdf from '@vue-office/pdf';
+import VueOfficePdf from '@vue-office/pdf'
+
 export default {
   name: 'type',
   components: { Upload, Pagination, VueOfficePdf },
   computed: {
     fileContentUrl: () => {
-      return this.form ? this.form.contentUrl ? [this.form.contentUrl] : [] : [];
+      return this.form ? this.form.contentUrl ? [this.form.contentUrl] : [] : []
     }
   },
-  data() {
+  data () {
     return {
       pdf: '',
       dialogTitle: '娣诲姞瀛︿範鍐呭',
       ids: [],
       typeList: [],
+      classesIds: [],
       searchForm: {
         pageNum: 1,
         pageSize: 5,
@@ -139,6 +162,7 @@
         contentType: 'video',
         introduction: '',
         belongType: 2,
+        classId: null,
         contentUrl: [],
         attachment: [],
         temp: []
@@ -157,101 +181,107 @@
           { required: true, message: '璇烽�夋嫨鏂囦欢绫诲瀷', trigger: 'change' }
         ]
       }
-    };
+    }
   },
   methods: {
-    checkPdf(url) {
-      this.pdf = url;
-      this.pdfDialog = true;
+    // 鑾峰彇鎴戠殑鐝骇
+    getClasses () {
+      myClasses().then(re => {
+        this.classesIds = re.data.data
+      })
     },
-    closePdfDialog() {
-      this.pdfDialog = false;
+    checkPdf (url) {
+      this.pdf = url
+      this.pdfDialog = true
     },
-    rendered() {
+    closePdfDialog () {
+      this.pdfDialog = false
+    },
+    rendered () {
 
     },
-    fileChange() {
-      this.form.contentUrl = [];
+    fileChange () {
+      this.form.contentUrl = []
     },
-    handleSelectionChange(val) {
-      this.ids = val.map(item => item.id);
+    handleSelectionChange (val) {
+      this.ids = val.map(item => item.id)
     },
-    typeFormatter(row) {
+    typeFormatter (row) {
       if (row.contentType === 'video') {
-        return "瑙嗛";
+        return '瑙嗛'
       }
       if (row.contentType === 'img') {
-        return "鍥剧墖";
+        return '鍥剧墖'
       }
       if (row.contentType === 'pdf') {
-        return "PDF";
+        return 'PDF'
       }
     },
-    clearFile() {
-      this.form.contentUrl = [];
-      this.$refs.upload.clearFile();
+    clearFile () {
+      this.form.contentUrl = []
+      this.$refs.upload.clearFile()
     },
-    removeFile() {
-      this.form.contentUrl = [];
+    removeFile () {
+      this.form.contentUrl = []
     },
     removeAttachmentFile (fileList, fileName) {
-      this.form.attachment = fileList.filter(item => item.name !== fileName);
+      this.form.attachment = fileList.filter(item => item.name !== fileName)
     },
     getUploadAttachmentUrl (uploadData) {
-      this.form.attachment = uploadData;
+      this.form.attachment = uploadData
     },
     getUploadUrl (uploadData) {
-      this.form.contentUrl = uploadData;
+      this.form.contentUrl = uploadData
     },
     remove (id) {
       EducationResourceAPI.remove([id]).then(res => {
         if (res.code === 1) {
-          this.$message.success('鍒犻櫎鎴愬姛');
+          this.$message.success('鍒犻櫎鎴愬姛')
           this.page()
         }
-      });
+      })
     },
-    batchRemove() {
+    batchRemove () {
       if (this.ids.length < 1) {
-        this.$message.warning("璇烽�夋嫨瑕佸垹闄ょ殑鏁版嵁");
+        this.$message.warning('璇烽�夋嫨瑕佸垹闄ょ殑鏁版嵁')
       }
       EducationResourceAPI.remove(this.ids).then(res => {
         if (res.code === 1) {
-          this.$message.success('鍒犻櫎鎴愬姛');
-          this.ids = [];
+          this.$message.success('鍒犻櫎鎴愬姛')
+          this.ids = []
         }
-      });
+      })
     },
     getTitle (typeName) {
-      return '纭畾瑕佸垹闄�' + typeName + '杩欎釜鏂囦欢鍚楋紵';
+      return '纭畾瑕佸垹闄�' + typeName + '杩欎釜鏂囦欢鍚楋紵'
     },
     handlerSubmit () {
       this.$refs['form'].validate((valid) => {
         if (valid) {
-          const temp = JSON.parse(JSON.stringify(this.form));
+          const temp = JSON.parse(JSON.stringify(this.form))
           // this.form.contentUrl = this.form.contentUrl[0]
-          temp.contentUrl = temp.contentUrl[0];
+          temp.contentUrl = temp.contentUrl[0]
           if (temp.id) {
             EducationResourceAPI.update(temp).then(res => {
               if (res.code === 1) {
-                this.$message.success('淇敼鎴愬姛');
-                this.open = false;
-                this.page();
+                this.$message.success('淇敼鎴愬姛')
+                this.open = false
+                this.page()
               }
-            });
+            })
           } else {
             EducationResourceAPI.add(temp).then(res => {
               if (res.code === 1) {
-                this.$message.success('娣诲姞鎴愬姛');
-                this.open = false;
-                this.page();
+                this.$message.success('娣诲姞鎴愬姛')
+                this.open = false
+                this.page()
               }
-            });
+            })
           }
         }
-      });
+      })
     },
-    resetForm() {
+    resetForm () {
       this.form = {
         contentType: 'video',
         introduction: '',
@@ -259,45 +289,48 @@
         contentUrl: [],
         attachment: [],
         temp: []
-      };
+      }
     },
-    handleClose() {
-      this.open = false;
-      this.resetForm();
+    handleClose () {
+      this.open = false
+      this.resetForm()
     },
-    handlerAdd() {
-      this.resetForm();
-      this.open = true;
-      this.dialogTitle = '娣诲姞瀛︿範鍐呭';
+    handlerAdd () {
+      this.resetForm()
+      this.open = true
+      this.dialogTitle = '娣诲姞瀛︿範鍐呭'
     },
-    page() {
+    page () {
       EducationResourceAPI.page(this.searchForm).then(res => {
         if (res.code === 1) {
-          this.tableData = res.data;
-          this.total = res.total;
+          this.tableData = res.data
+          this.total = res.total
         }
-      });
+      })
     },
-    handleUpdate(row) {
-      this.form.id = row.id;
-      this.form.contentType = row.contentType;
-      this.form.contentUrl = [row.contentUrl] || [];
-      this.form.attachment = row.attachment || [];
-      this.form.introduction = row.introduction;
-      this.form.belongType = row.belongType;
-      this.dialogTitle = '淇敼瀛︿範鍐呭';
-      this.open = true;
+    handleUpdate (row) {
+      this.form.id = row.id
+      this.form.contentType = row.contentType
+      this.form.classesId = row.classesId
+      this.form.subjectId = row.subjectId
+      this.form.contentUrl = [row.contentUrl] || []
+      this.form.attachment = row.attachment || []
+      this.form.introduction = row.introduction
+      this.form.belongType = row.belongType
+      this.dialogTitle = '淇敼瀛︿範鍐呭'
+      this.open = true
     }
   },
-  mounted() {
-    this.page();
+  mounted () {
+    this.page()
+    this.getClasses()
     SubjectAPI.list().then(res => {
       if (res.code === 1) {
-        this.typeList = res.data;
+        this.typeList = res.data
       }
-    });
+    })
   }
-};
+}
 </script>
 
 <style scoped>
@@ -314,6 +347,7 @@
 .search {
   margin-top: 10px;
 }
+
 ::v-deep .el-image__error {
   position: absolute;
   top: 0;
diff --git a/src/views/exam/exam/MarkPaper.vue b/src/views/exam/exam/MarkPaper.vue
index 657ee0f..89565ff 100644
--- a/src/views/exam/exam/MarkPaper.vue
+++ b/src/views/exam/exam/MarkPaper.vue
@@ -71,12 +71,6 @@
       >
       </el-table-column>
       <el-table-column
-        align="center"
-        prop="phone"
-        label="绯荤粺鑷姩浼板垎(閫夋嫨棰樺瀷)"
-      >
-      </el-table-column>
-      <el-table-column
         label="鎿嶄綔"
         align="center"
         width="300px"
diff --git a/src/views/exam/paper/edit.vue b/src/views/exam/paper/edit.vue
index 53411d1..a5c7d8e 100644
--- a/src/views/exam/paper/edit.vue
+++ b/src/views/exam/paper/edit.vue
@@ -1,11 +1,6 @@
 <template>
   <div class="app-container">
     <el-form :model="form" ref="form" label-width="150px" v-loading="formLoading" :rules="rules">
-      <el-form-item label="瀛︾锛�" prop="subjectId" required>
-        <el-select v-model="form.subjectId" placeholder="瀛︾">
-          <el-option v-for="item in subjects" :key="item.id" :label="item.name" :value="item.id"/>
-        </el-select>
-      </el-form-item>
       <el-form-item label="璇曞嵎绫诲瀷锛�" prop="paperType" required>
         <el-select v-model="form.paperType" placeholder="璇曞嵎绫诲瀷">
           <el-option v-for="item in paperTypeEnum" :key="item.key" :value="item.key" :label="item.value"></el-option>
@@ -77,14 +72,15 @@
       </el-form-item>
       <!-- 棰樼洰閰嶇疆淇℃伅 闅忔満璇曞嵎鎴栨柊寤洪殢搴忔墠鏄剧ず -->
       <el-form-item v-show="form.paperType ===2 || (form.paperType ===3 && !form.id)" :key="index"
-                    :label="translateQuestionType(item.questionType)+'锛�'" v-for="(item,index) in form.questionSetting">
+                    :label="translateQuestionType(item.questionType)+'锛�'" v-for="(item,index) in form.questionSetting"
+      >
         <div>
           <span style="margin-right: 10px">{{ '鏍囬' }}</span>
           <el-input v-model="item.title" style="margin-bottom: 20px;margin-right: 30px;width: 800px"/>
-          <el-button type="primary" @click=addToQuestionSetting(item.questionType) >娣诲姞</el-button>
+          <el-button type="primary" @click=addToQuestionSetting(item.questionType)>娣诲姞</el-button>
 
-          <div style="display: flex;" :key="index" v-for="(setting,index) in item.settingList">
-            <span style="margin-right: 10px;margin-bottom: 10px;">{{ '闅惧害' }}</span>
+          <div style="display: flex;margin-bottom: 10px;" :key="index" v-for="(setting,index) in item.settingList">
+            <span style="margin-right: 10px;">{{ '闅惧害' }}</span>
             <el-rate v-model="setting.difficult" :precision="0" :min="0" style="margin-right: 25px;padding: 5px 0"/>
             <span style="margin-right: 10px">{{ '绉戠洰' }}</span>
             <el-select v-model="setting.subjectId" placeholder="瀛︾" style="margin-right: 25px">
@@ -93,7 +89,9 @@
             <span style="margin-right: 10px">{{ '鏁伴噺' }}</span>
             <el-input-number v-model="setting.num" :precision="0" :min="0" style="margin-right: 25px"/>
             <span style="margin-right: 10px">{{ '姣忛鍒嗘暟' }}</span>
-            <el-input-number v-model="setting.score" :min="0" :precision="1"/>
+            <el-input-number v-model="setting.score" :min="0" :precision="1" style="margin-right: 25px"/>
+            <el-button type="danger" icon="el-icon-delete" circle
+                       @click="removeQuestionSetting(item,index)"></el-button>
           </div>
 
         </div>
@@ -129,6 +127,11 @@
       <el-form :model="questionPage.queryParam" ref="queryForm" :inline="true">
         <el-form-item label="ID锛�">
           <el-input v-model="questionPage.queryParam.id" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="瀛︾锛�">
+          <el-select v-model="questionPage.queryParam.subjectIdInt" placeholder="瀛︾">
+            <el-option v-for="item in subjects" :key="item.id" :label="item.name" :value="item.id"/>
+          </el-select>
         </el-form-item>
         <el-form-item>
           <el-button type="primary" @click="queryForm">鏌ヨ</el-button>
@@ -171,7 +174,6 @@
     return {
       form: {
         id: null,
-        subjectId: null,
         paperType: 1,
         name: '',
         num: 0,
@@ -243,12 +245,6 @@
       subjects: [],
       formLoading: false,
       rules: {
-        level: [
-          { required: true, message: '璇烽�夋嫨骞寸骇', trigger: 'change' }
-        ],
-        subjectId: [
-          { required: true, message: '璇烽�夋嫨瀛︾', trigger: 'change' }
-        ],
         paperType: [
           { required: true, message: '璇烽�夋嫨璇曞嵎绫诲瀷', trigger: 'change' }
         ],
@@ -264,6 +260,7 @@
         showDialog: false,
         queryParam: {
           id: null,
+          subjectIdInt: null,
           questionType: [],
           subjectId: [],
           pageIndex: 1,
@@ -386,6 +383,13 @@
     addQuestion (titleItem) {
       this.currentTitleItem = titleItem
       this.questionPage.queryParam.questionType = []
+      if (!titleItem.questionType) {
+        this.$message({
+          message: '璇峰厛閫夋嫨棰樺瀷',
+          type: 'warning'
+        })
+        return
+      }
       this.questionPage.queryParam.questionType.push(titleItem.questionType)
       this.questionPage.showDialog = true
       this.search()
@@ -405,8 +409,12 @@
       this.updateTotalScore()
       this.form.num = this.form.num - 1
     },
+    removeQuestionSetting (item, index) {
+      item.settingList.splice(index, 1)
+    },
     queryForm () {
       this.questionPage.queryParam.pageIndex = 1
+      this.questionPage.queryParam.subjectId = [this.questionPage.queryParam.subjectIdInt]
       this.search()
     },
     confirmQuestionSelect () {
@@ -420,8 +428,6 @@
       this.questionPage.showDialog = false
     },
     search () {
-      this.questionPage.queryParam.subjectId = []
-      this.questionPage.queryParam.subjectId.push(this.form.subjectId)
       this.questionPage.listLoading = true
       questionApi.pageList(this.questionPage.queryParam).then(data => {
         const re = data.data
@@ -448,14 +454,46 @@
         deductTypeScore: 0,
         visibility: '1',
         questionSetting: [
-          { questionType: 1, title: '鍗曢�夐', score: null, num: null },
-          { questionType: 2, title: '澶氶�夐', score: null, num: null },
-          { questionType: 3, title: '鍒ゆ柇棰�', score: null, num: null },
-          { questionType: 4, title: '濉┖棰�', score: null, num: null },
-          { questionType: 5, title: '绠�绛旈', score: null, num: null },
-          { questionType: 6, title: '璇煶棰�', score: null, num: null },
-          { questionType: 7, title: '璁$畻棰�', score: null, num: null },
-          { questionType: 8, title: '鍒嗘瀽棰�', score: null, num: null },
+          {
+            title: '鍗曢�夐',
+            questionType: 1,
+            settingList: [{ difficult: null, score: null, num: null, subjectId: null }]
+          },
+          {
+            title: '澶氶�夐',
+            questionType: 2,
+            settingList: [{ difficult: null, score: null, num: null, subjectId: null }]
+          },
+          {
+            title: '鍒ゆ柇棰�',
+            questionType: 3,
+            settingList: [{ difficult: null, score: null, num: null, subjectId: null }]
+          },
+          {
+            title: '濉┖棰�',
+            questionType: 4,
+            settingList: [{ difficult: null, score: null, num: null, subjectId: null }]
+          },
+          {
+            title: '绠�绛旈',
+            questionType: 5,
+            settingList: [{ difficult: null, score: null, num: null, subjectId: null }]
+          },
+          {
+            title: '璇煶棰�',
+            questionType: 6,
+            settingList: [{ difficult: null, score: null, num: null, subjectId: null }]
+          },
+          {
+            title: '璁$畻棰�',
+            questionType: 7,
+            settingList: [{ difficult: null, score: null, num: null, subjectId: null }]
+          },
+          {
+            title: '鍒嗘瀽棰�',
+            questionType: 8,
+            settingList: [{ difficult: null, score: null, num: null, subjectId: null }]
+          }
         ],
         questionTitleList: []
       }
@@ -470,8 +508,10 @@
     totalNum () {
       if (this.form.paperType === 2 || this.form.paperType === 3) {
         let total = 0
-        for (let item of this.form.questionSetting) {
-          total += parseInt(item.num || 0, 10)
+        for (let settings of this.form.questionSetting) {
+          for (let item of settings.settingList) {
+            total += parseInt(item.num || 0, 10)
+          }
         }
         this.form.num = total
         return total
@@ -482,10 +522,12 @@
     totalScore () {
       if (this.form.paperType === 2 || this.form.paperType === 3) {
         let total = 0
-        for (let item of this.form.questionSetting) {
-          const num = parseInt(item.num || 0, 10)
-          const score = parseFloat(item.score || 0)
-          total += num * score
+        for (let settings of this.form.questionSetting) {
+          for (let item of settings.settingList) {
+            const num = parseInt(item.num || 0, 10)
+            const score = parseFloat(item.score || 0)
+            total += num * score
+          }
         }
         this.form.score = total.toFixed(1)
         return total.toFixed(1) // 淇濈暀涓�浣嶅皬鏁�
diff --git a/src/views/exam/paper/list.vue b/src/views/exam/paper/list.vue
index 16e86fe..322bd4d 100644
--- a/src/views/exam/paper/list.vue
+++ b/src/views/exam/paper/list.vue
@@ -7,7 +7,7 @@
       <el-form-item>
         <el-button type="primary" @click="submitForm">鏌ヨ</el-button>
         <router-link :to="{path:'/exam/paper/edit'}" class="link-left">
-          <el-button type="primary">娣诲姞</el-button>
+          <el-button type="primary" >娣诲姞</el-button>
         </router-link>
       </el-form-item>
     </el-form>
diff --git a/src/views/meet/index.vue b/src/views/meet/index.vue
index da6cafb..f5e576a 100644
--- a/src/views/meet/index.vue
+++ b/src/views/meet/index.vue
@@ -1,17 +1,23 @@
 <template>
-  <div id="meet" ref="meet" />
+  <div id="meet" ref="meet">
+    <div>
+      <span>
+        {{ '156165165' }}
+      </span>
+    </div>
+  </div>
 </template>
 
 <script>
-let jitsiApi = null;
+let jitsiApi = null
 export default {
-  mounted() {
-    const width = window.innerWidth;
-    const height = window.innerHeight;
-    const domain = this.$route.query.domain;
-    const roomName = this.$route.query.roomName;
-    const userInfoStr = this.$route.query.userInfoStr;
-    const userInfo = userInfoStr ? JSON.parse(userInfoStr) : null;
+  mounted () {
+    const width = window.innerWidth
+    const height = window.innerHeight
+    const domain = this.$route.query.domain
+    const roomName = this.$route.query.roomName
+    const userInfoStr = this.$route.query.userInfoStr
+    const userInfo = userInfoStr ? JSON.parse(userInfoStr) : null
     const options = {
       roomName: roomName,
       width: width,
@@ -28,12 +34,12 @@
         }
       },
       toolbarButtons: ['whiteboard']
-    };
-    jitsiApi = new window.JitsiMeetExternalAPI(domain, options);
+    }
+    jitsiApi = new window.JitsiMeetExternalAPI(domain, options)
 
     jitsiApi.addListener('readyToClose', () => {
-      window.close();
-    });
+      window.close()
+    })
   }
 }
 
diff --git a/src/views/train/data-list/index.vue b/src/views/train/data-list/index.vue
index 8ae8f7f..8a0c81e 100644
--- a/src/views/train/data-list/index.vue
+++ b/src/views/train/data-list/index.vue
@@ -14,6 +14,10 @@
                 <div class="info-text">{{ item.teacherName }}</div>
               </div>
               <div class="info-time">
+                <div class="info-label">鐘舵��:</div>
+                <div class="info-text">{{ translateStatus(item.status) }}</div>
+              </div>
+              <div class="info-time">
                 <div class="info-label">寮�濮嬫椂闂�:</div>
                 <div class="info-text">{{ item.startTime }}</div>
               </div>
@@ -22,7 +26,7 @@
                 <div class="info-text">{{ item.endTime }}</div>
               </div>
               <div class="button-container">
-                <el-button @click="start(item)">寮�濮嬩笂璇�</el-button>
+                <el-button v-if="item.status!==2" @click="start(item)">寮�濮嬩笂璇�</el-button>
                 <el-button @click="handleUpdate(item)">缂栬緫</el-button>
                 <el-button @click="remove(item)">鍒犻櫎</el-button>
               </div>
@@ -42,16 +46,25 @@
   },
   methods: {
     handleUpdate (item) {
-      this.$emit('handleUpdate',item)
+      this.$emit('handleUpdate', item)
     },
     remove (item) {
-      this.$emit('remove',item)
+      this.$emit('remove', item)
     },
     start (item) {
-      this.$emit('start',item)
+      this.$emit('start', item)
+    },
+    translateStatus (status) {
+      if (status === 0) {
+        return '寰呭紑濮�'
+      } else if (status === 1) {
+        return '杩涜涓�'
+      } else {
+        return '宸茬粨鏉�'
+      }
     }
   }
-};
+}
 </script>
 
 <style lang="scss" scoped>
diff --git a/src/views/train/index.vue b/src/views/train/index.vue
index 9a574a4..2e5f472 100644
--- a/src/views/train/index.vue
+++ b/src/views/train/index.vue
@@ -9,15 +9,16 @@
               <div class="card-header">
                 <div class="header-tab">
                   <el-tabs v-model="activeName" @tab-click="handleClick">
-                    <el-tab-pane label="鍏ㄩ儴" name="1"></el-tab-pane>
-                    <el-tab-pane label="鏈紑濮�" name="2"></el-tab-pane>
-                    <el-tab-pane label="杩涜涓�" name="3"></el-tab-pane>
-                    <el-tab-pane label="宸茬粨鏉�" name="4"></el-tab-pane>
+                    <el-tab-pane label="鍏ㄩ儴" name="all"></el-tab-pane>
+                    <el-tab-pane label="鏈紑濮�" name="0"></el-tab-pane>
+                    <el-tab-pane label="杩涜涓�" name="1"></el-tab-pane>
+                    <el-tab-pane label="宸茬粨鏉�" name="2"></el-tab-pane>
                   </el-tabs>
                 </div>
                 <div class="header-search">
-                  <el-input v-model="queryParam.meetName" @input="getList" clearable @clear="getList" placeholder="璇疯緭鍏ヨ绋嬪悕绉�"/>
-                  <el-button type="primary" class="ml-4" @click="getList" >鎼滅储</el-button>
+                  <el-input v-model="queryParam.meetName" @input="getList" clearable @clear="getList"
+                            placeholder="璇疯緭鍏ヨ绋嬪悕绉�"/>
+                  <el-button type="primary" class="ml-4" @click="getList">鎼滅储</el-button>
                 </div>
                 <div>
                   <el-button type="primary" @click="handleAdd()">娣诲姞</el-button>
@@ -26,23 +27,25 @@
 
               <div class="card-main flex-1 my-5 relative">
                 <div class="main-content absolute top-0 bottom-0 left-0 right-0">
-                  <DataList :tableData="tableData" @handleUpdate="handleUpdate" @remove = "remove" @start = "start"></DataList>
+                  <DataList :tableData="tableData" @handleUpdate="handleUpdate" @remove="remove"
+                            @start="start"></DataList>
                   <div id="meet" ref="meet"></div>
                 </div>
               </div>
 
-              <pagination v-show="total>0" :total="total" :page.sync="queryParam.pageIndex" :limit.sync="queryParam.pageSize"
+              <pagination v-show="total>0" :total="total" :page.sync="queryParam.pageIndex"
+                          :limit.sync="queryParam.pageSize"
                           @pagination="getList"/>
             </div>
           </el-card>
 
           <!-- 娣诲姞浼氳瀵硅瘽妗� -->
           <el-dialog :title="title" :visible.sync="open" width="600px" append-to-body>
-            <el-form label-width="80px" ref="form" :model="form" :rules="rules" >
-              <el-form-item label="鎴块棿鍚�" prop="meetName" >
+            <el-form label-width="80px" ref="form" :model="form" :rules="rules">
+              <el-form-item label="鎴块棿鍚�" prop="meetName">
                 <el-input v-model="form.meetName" placeholder="璇疯緭鍏ユ埧闂村悕" style="width: 300px"></el-input>
               </el-form-item>
-              <el-form-item label="鐝骇" >
+              <el-form-item label="鐝骇">
                 <el-select
                   v-model="form.classesId"
                   placeholder="鐝骇"
@@ -51,18 +54,18 @@
                   <el-option v-for="item in classesIds" :key="item.id" :label="item.className" :value="item.id"/>
                 </el-select>
               </el-form-item>
-              <el-form-item label="涓婅鏃堕棿" prop="time" >
-                  <el-date-picker
-                    v-model="form.time"
-                    type="datetimerange"
-                    format="yyyy-MM-dd HH:mm:ss"
-                    value-format="yyyy-MM-dd HH:mm:ss"
-                    range-separator="鑷�"
-                    start-placeholder="寮�濮嬫棩鏈�"
-                    end-placeholder="缁撴潫鏃ユ湡">
-                  </el-date-picker>
+              <el-form-item label="涓婅鏃堕棿" prop="time">
+                <el-date-picker
+                  v-model="form.time"
+                  type="datetimerange"
+                  format="yyyy-MM-dd HH:mm:ss"
+                  value-format="yyyy-MM-dd HH:mm:ss"
+                  range-separator="鑷�"
+                  start-placeholder="寮�濮嬫棩鏈�"
+                  end-placeholder="缁撴潫鏃ユ湡">
+                </el-date-picker>
               </el-form-item>
-              <el-form-item label="鐘舵��" >
+              <el-form-item label="鐘舵��">
                 <el-radio v-model="form.status" :label="0">寰呭紑濮�</el-radio>
                 <el-radio v-model="form.status" :label="1">杩涜涓�</el-radio>
                 <el-radio v-model="form.status" :label="2">宸茬粨鏉�</el-radio>
@@ -83,11 +86,11 @@
 <script>
 import DataList from './data-list/index.vue'
 import Pagination from '@/components/Pagination'
-import { getMeets,addMeet,editMeet,deleteMeetById } from '@/api/meet'
+import { getMeets, addMeet, editMeet, deleteMeetById, startMeet } from '@/api/meet'
 import { myClasses } from '@/api/classes'
 
 export default {
-  components: { DataList,Pagination},
+  components: { DataList, Pagination },
   data () {
     return {
       queryParam: {
@@ -103,7 +106,7 @@
       form: {},
       tableData: [],
       classesIds: [],
-      activeName: '1',
+      activeName: 'all',
       searchText: '',
       rules: {
         meetName: [
@@ -124,6 +127,12 @@
   },
   methods: {
     handleClick () {
+      if (this.activeName !== 'all') {
+        this.queryParam.status = this.activeName
+      } else {
+        this.queryParam.status = null
+      }
+      this.getList()
     },
     remove (item) {
       deleteMeetById(item.id).then(re => {
@@ -139,15 +148,15 @@
     start (item) {
       // 淇敼鎴块棿鐘舵�佷负杩涜涓�
       item.status = 1
-      editMeet(item).then(re => {
+      startMeet(item).then(re => {
         if (re.data.code === 1) {
           this.getList()
           let routeUrl = this.$router.resolve({
-            path: "/meet",
+            path: '/meet',
             query: {
               domain: 'ycl.easyblog.vip:8443/' + item.id,
               roomName: item.meetName,
-              userInfoStr:  JSON.stringify({
+              userInfoStr: JSON.stringify({
                 displayName: item.teacherName
               })
             }
@@ -240,6 +249,7 @@
 :deep(.el-tabs__nav-wrap:after) {
   display: none;
 }
+
 .train-container {
   width: 100%;
   height: 100%;
@@ -253,12 +263,14 @@
     width: 100%;
   }
 }
+
 .card-header {
   display: flex;
   justify-content: space-between;
   align-items: center;
   flex-shrink: 0;
 }
+
 .header-search {
   display: flex;
   align-items: center;

--
Gitblit v1.8.0