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