From 2d1f7bd9e68a2ee60bbd1adcc9cd43c94db08c0d Mon Sep 17 00:00:00 2001 From: 龚焕茏 <2842157468@qq.com> Date: 星期三, 24 七月 2024 15:05:37 +0800 Subject: [PATCH] feat:选人增加姓名 --- src/views/exam/personalRandomTemplate/edit.vue | 208 ++++++++++++++++++++++++++++++++++++++-------------- 1 files changed, 152 insertions(+), 56 deletions(-) diff --git a/src/views/exam/personalRandomTemplate/edit.vue b/src/views/exam/personalRandomTemplate/edit.vue index 3a476d4..b6d8537 100644 --- a/src/views/exam/personalRandomTemplate/edit.vue +++ b/src/views/exam/personalRandomTemplate/edit.vue @@ -1,19 +1,29 @@ <template> <div class="app-container"> <el-form :model="form" ref="form" label-width="200px" v-loading="formLoading" :rules="rules"> - <el-form-item label="鑰冪敓锛�" prop="menuIds" required> - <el-select v-model="form.menuIds" :collapse-tags="true" multiple placeholder="璇烽�夋嫨" @focus="selectStudent" - popper-class="examinee-popper"></el-select> - </el-form-item> - <el-form-item label="璇剧洰锛�" prop="subjectId" required> - <el-select ref="subjectIdRef" v-model="form.subjectId" placeholder="璇剧洰" multiple collapse-tags - @visible-change="subjectIdEvent"> - <el-option v-for="item in subjectFilter" :key="item.id" :value="item.id" :label="item.name + ' '"></el-option> + <el-form-item label="鑰冪敓锛�" prop="userIds" required> + <el-select v-model="form.userIds" :collapse-tags="true" multiple placeholder="璇烽�夋嫨" @focus="selectStudent" + popper-class="examinee-popper"> + <el-option v-for="item in form.examineeList" :value="item.id" :label="item.realName" + :key="item.id"></el-option> </el-select> </el-form-item> <el-form-item label="閮ㄩ棬锛�" prop="deptId" required> - <el-select v-model="form.deptId" collapse-tags placeholder="閮ㄩ棬"> + <!-- <el-select v-model="form.deptId" collapse-tags @change="getSubject" placeholder="閮ㄩ棬"> <el-option v-for="item in depts" :key="item.id" :value="item.id" :label="item.name"></el-option> + </el-select> --> + <el-cascader + clearable + @change="getSubject" + v-model="form.deptId" + :options="depts" + :props="{ emitPath: false, value: 'id', label: 'name', checkStrictly: true }" + ></el-cascader> + </el-form-item> + <el-form-item label="璇剧洰锛�" prop="subjectId" required> + <el-select ref="subjectIdRef" v-model="form.subjectId" :disabled="! form.deptId" placeholder="璇剧洰" multiple collapse-tags + @visible-change="subjectIdEvent"> + <el-option v-for="item in subjectFilter" :key="item.id" :value="item.id" :label="item.name + ' '"></el-option> </el-select> </el-form-item> <el-form-item label="璇曞嵎绫诲瀷锛�" prop="paperType" required> @@ -22,7 +32,7 @@ </el-select> </el-form-item> - <el-form-item label="鏃堕棿闄愬埗锛�"> + <el-form-item label="鏃堕棿闄愬埗锛�" prop="limitDateTime"> <el-date-picker v-model="form.limitDateTime" value-format="yyyy-MM-dd HH:mm:ss" type="datetimerange" range-separator="鑷�" start-placeholder="寮�濮嬫棩鏈�" end-placeholder="缁撴潫鏃ユ湡"> </el-date-picker> @@ -40,7 +50,7 @@ </el-col> </el-row> </el-form-item> - <el-form-item :key="item.subjectId" :label="item.label" required v-for="(item, key) in form.questionTypeVMS" + <!-- <el-form-item :key="item.subjectId" :label="item.label" required v-for="(item, key) in form.questionTypeVMS" v-if="form.paperType == 7"> <el-row> <el-col :span="3"> @@ -63,7 +73,7 @@ <el-input v-model="form.questionTypeVMS[key].trueFalse" style="width: 80%" /> </el-col> </el-row> - </el-form-item> + </el-form-item> --> <!-- <el-form-item label="鎬绘暟鍒嗭細" v-if="form.paperType==7" prop="name" required>--> <!-- <el-input v-model="form.name"/>--> <!-- </el-form-item>--> @@ -133,24 +143,42 @@ <el-dialog :visible.sync="studentDialog" width="70%"> <el-form :model="student" ref="queryForm" :inline="true"> - <el-form-item label="鏍囩锛�"> - <el-select v-model="student.tagId" clearable> + <el-form-item> + <el-select v-model="student.tagIds" clearable multiple placeholder="鏍囩"> <el-option v-for="item in tags" :key="item.id" :value="item.id" :label="item.name"></el-option> </el-select> </el-form-item> - <el-form-item label="閮ㄩ棬锛�"> - <el-select v-model="student.deptId" clearable> - <el-option v-for="item in depts" :key="item.id" :value="item.id" :label="item.name"></el-option> + <el-form-item> + <el-select v-model="student.excludeTagIds" clearable multiple placeholder="鎺掗櫎鏍囩"> + <el-option v-for="item in tags" :key="item.id" :value="item.id" :label="item.name"></el-option> </el-select> + </el-form-item> + <el-form-item> + <!-- <el-select v-model="student.deptIds" clearable multiple> + <el-option v-for="item in depts" :key="item.id" :value="item.id" :label="item.name"></el-option> + </el-select> --> + <el-cascader + filterable + placeholder="璇烽�夋嫨閮ㄩ棬" + clearable + collapse-tags + v-model="student.deptIds" + :options="depts" + :props="{ multiple: true, emitPath: false, value: 'id', label: 'name', checkStrictly: true }" + ></el-cascader> + </el-form-item> + <el-form-item> + <el-input v-model="student.realName" clearable placeholder="璇疯緭鍏ュ鍚�"></el-input> </el-form-item> <el-form-item> <el-button type="primary" @click="selectStudent">鏌ヨ</el-button> </el-form-item> </el-form> + <el-button type="danger" @click="selectAllBoolean ? selectAll() : unselectAll()" size="small" style="margin-bottom: 3px">{{ selectAllBoolean ? '鍏ㄩ��' : '鍙栨秷鍏ㄩ��' }}</el-button> <el-table ref="multipleTable" v-loading="student.listLoading" :data="tableData" border fit highlight-current-row style="width: 100%" @selection-change="handleSelection" row-key="id"> <el-table-column type="selection" :reserve-selection="true"></el-table-column> - <el-table-column prop="realName" label="鐢ㄦ埛" /> + <el-table-column prop="realName" label="瀛﹀憳" /> </el-table> <pagination v-show="total > 0" :total="total" :page.sync="student.pageIndex" :limit.sync="student.pageSize" @pagination="selectStudent" /> @@ -168,6 +196,7 @@ import Pagination from '@/components/Pagination'; import QuestionShow from '../question/components/Show'; import examPaperApi from '@/api/examPaper'; +import subjectApi from '@/api/subject'; import userApi from '@/api/user'; import questionApi from '@/api/question'; import departmentApi from '@/api/department'; @@ -177,16 +206,19 @@ data() { return { + selectAllBoolean: true, tags: [], - depts: [], - student: {}, studentDialog: false, student: { + deptIds: [], pageIndex: 1, pageSize: 5, listLoading: true, - multipleSelection: [] + multipleSelection: [], + excludeTagIds: [] }, + isFirstShow: true, + tableData: [], total: 0, props: { @@ -212,6 +244,7 @@ }, subjectIdList: [], form: { + deptId: '', aggregateSource: '100', id: null, departmentIds: [], @@ -221,13 +254,21 @@ limitDateTime: [], name: '', suggestTime: null, - titleItems: [], + titleItems: [{ + name: '', + questionItems: [] + }], subjectSource: {}, - questionTypeVMS: [] + questionTypeVMS: [], + examineeList: [], + userIds: [] }, subjectFilter: null, formLoading: false, rules: { + userIds: [ + { required: true, message: '璇烽�夋嫨鑰冪敓', trigger: 'change' } + ], subjectId: [ { required: true, message: '璇烽�夋嫨璇剧洰', trigger: 'change' } ], @@ -239,6 +280,9 @@ ], name: [ { required: true, message: '璇疯緭鍏ヨ瘯鍗峰悕绉�', trigger: 'blur' } + ], + limitDateTime: [ + { required: true, message: '璇烽�夋嫨鏃堕棿闄愬埗', trigger: 'blur' } ], suggestTime: [ { required: true, message: '璇疯緭鍏ュ缓璁椂闀�', trigger: 'blur' } @@ -252,7 +296,7 @@ questionType: null, subjectId: 1, pageIndex: 1, - pageSize: 5 + pageSize: 500000000 }, listLoading: true, tableData: [], @@ -266,11 +310,16 @@ console.log(res); this.subjectFilter = res.response; }); - departmentApi.getDeptAdmins().then(res => { + departmentApi.list().then(res => { this.depts = res.response; }); }, async mounted() { + departmentApi.getCurrentDeptId().then(res => { + if (res.response && res.response[0]) { + this.form.deptId = res.response[0]; + } + }); let id = this.$route.query.id; let _this = this; @@ -279,12 +328,21 @@ _this.subjectFilter = _this.subjects; }); if (id && parseInt(id) !== 0) { + this.selectAllBoolean = false; _this.formLoading = true; await examPaperApi.selfselect(id).then(re => { + const { userIds, userNames } = re.response; _this.form = re.response; - _this.form.menuIds = JSON.parse(re.response.menuIds); - _this.optionsData = _this.form.menuIds; - console.log(_this.form); + if (userIds && userIds.length) { + _this.form.examineeList = userIds.map((item, index) => { + return { + id: item, + realName: userNames && userNames[index] ? userNames[index] : '' + }; + }); + } else { + _this.form.examineeList = []; + } _this.formLoading = false; }); @@ -300,16 +358,57 @@ }; }); }); - - // this.subjectIdEvent(false) }, methods: { + getSubject(deptId) { + // 鑾峰彇瀵瑰簲閮ㄩ棬鐨勮鐩� + subjectApi.selectByDeptId(deptId).then(res => { + this.form.subjectId = null + this.subjectFilter = res.response + }) + }, handleSelection(val) { this.student.multipleSelection = val; }, + selectAll () { + this.preSelectAll(); + let param = { ...this.student }; + param.pageSize = 999999; + examPaperApi.selectStudent(param).then(res => { + this.handleSelection(res.response.list); + res.response.list.forEach(item => { + this.$refs.multipleTable.toggleRowSelection(item, true); + this.selectAllBoolean = false; + }) + this.getStudent(); + }); + }, + unselectAll () { + this.$refs.multipleTable.clearSelection(); + this.selectAllBoolean = true; + }, confirmStudentSelect() { - this.form.menuIds = this.student.multipleSelection.map((item) => item.id); + this.form.userIds = this.student.multipleSelection.map((item) => item.id); + this.form.examineeList = this.student.multipleSelection.map((item) => { + return { + id: item.id, + realName: item.realName + }; + }); + this.student.multipleSelection = []; this.studentDialog = false; + }, + preSelectAll() { + this.selectAllBoolean = true; + this.$refs.multipleTable.clearSelection(); + this.form.userIds = this.student.multipleSelection.map((item) => item.id); + this.form.examineeList = this.student.multipleSelection.map((item) => { + return { + id: item.id, + realName: item.realName + }; + }); + this.student.multipleSelection = []; }, getTags() { userApi.tagList(null).then(data => { @@ -320,20 +419,20 @@ this.getTags(); this.studentDialog = true; this.student.listLoading = true; - + this.getStudent(); + }, + getStudent() { + this.student.listLoading = true; examPaperApi.selectStudent(this.student).then(res => { this.tableData = res.response.list; this.total = res.response.total; this.student.listLoading = false; - this.$nextTick(() => { - this.tableData.map(data => { - if (this.form.menuIds.find(item => item === data.id)) { - this.$refs.multipleTable.toggleRowSelection(data, true); - } else { - this.$refs.multipleTable.toggleRowSelection(data, false); - } + if (this.studentDialog && this.isFirstShow) { + this.isFirstShow = false; + this.form.examineeList.forEach(item => { + this.$refs.multipleTable.toggleRowSelection(item, true); }); - }); + } }); }, cascaderChangeFun(event) { @@ -399,7 +498,10 @@ console.log(this.form.subjectSource); console.log(this.form.questionTypeVMS); // this.form.paperType = 7 - this.form.titleItems = []; + this.form.titleItems = [{ + name: '', + questionItems: [] + }]; } else { this.form.subjectSource = {}; this.subjectIdList = []; @@ -408,8 +510,6 @@ }, submitForm() { let _this = this; - console.log(this.subjectIdList); - console.log(this.form.subjectSource); this.$refs.form.validate((valid) => { if (valid) { const tempForm = JSON.parse(JSON.stringify(this.form)); @@ -418,19 +518,15 @@ tempForm.subjectId = tempForm.subjectId; }; - let lastHasAll = tempForm.menuIds.find(arr => { - return arr[0] === 'all'; - }); - if (lastHasAll) { - tempForm.menuIds = tempForm.menuIds.slice(1); - } - // let op = []; - // for(var ele of this.form.menuIds){ - // op.push(ele[1]) - // }; - tempForm.userIds = tempForm.menuIds; - tempForm.menuIds = JSON.stringify(tempForm.menuIds); - console.log("laks", this.form); + // let lastHasAll = tempForm.menuIds.find(arr => { + // return arr[0] === 'all'; + // }); + // if (lastHasAll) { + // tempForm.menuIds = tempForm.menuIds.slice(1); + // } + + tempForm.menuIds = tempForm.userIds.join(','); + if (tempForm.questionTypeVMS == null) { tempForm.questionTypeVMS = []; } -- Gitblit v1.8.0