308 lines
		
	
	
		
			8.7 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
		
		
			
		
	
	
			308 lines
		
	
	
		
			8.7 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
| 
								 | 
							
								<template>
							 | 
						||
| 
								 | 
							
									<view class="todo-page">
							 | 
						||
| 
								 | 
							
										<view class="card">
							 | 
						||
| 
								 | 
							
											<uni-card margin="0" :is-shadow="true">
							 | 
						||
| 
								 | 
							
												<u--form labelPosition="left" labelWidth="auto" labelAlign="center" ref="wForm"
							 | 
						||
| 
								 | 
							
													errorType="border-bottom">
							 | 
						||
| 
								 | 
							
													<u-form-item label="培训人员:" prop="NAME" borderBottom>
							 | 
						||
| 
								 | 
							
														<u--input v-if="safe" v-model="safe.Nav_User.NAME" disabled disabledColor="#fff" border="none"
							 | 
						||
| 
								 | 
							
															inputAlign="right"></u--input>
							 | 
						||
| 
								 | 
							
													</u-form-item>
							 | 
						||
| 
								 | 
							
													<u-form-item label="成绩:" prop="score" borderBottom>
							 | 
						||
| 
								 | 
							
														<u--input v-model="score" disabled disabledColor="#fff" border="none"
							 | 
						||
| 
								 | 
							
															inputAlign="right"></u--input>
							 | 
						||
| 
								 | 
							
													</u-form-item>
							 | 
						||
| 
								 | 
							
												</u--form>
							 | 
						||
| 
								 | 
							
											</uni-card>
							 | 
						||
| 
								 | 
							
										</view>
							 | 
						||
| 
								 | 
							
										<u-sticky offset-top="20">
							 | 
						||
| 
								 | 
							
											<view class="sub-form">
							 | 
						||
| 
								 | 
							
												<view class="sub-form-wrap">
							 | 
						||
| 
								 | 
							
													<u--form labelPosition="left" labelWidth="auto" labelAlign="center" errorType="border-bottom"
							 | 
						||
| 
								 | 
							
														ref="sForm">
							 | 
						||
| 
								 | 
							
														<uni-card style="margin-bottom: 16px;" margin="0" spacing="0" :is-shadow="false"
							 | 
						||
| 
								 | 
							
															v-for="(item, index) in papers">
							 | 
						||
| 
								 | 
							
															<u-form-item>
							 | 
						||
| 
								 | 
							
																<view class="uni-flex uni-column">
							 | 
						||
| 
								 | 
							
																	<view>{{(index+1)+'. '+ item.Nav_Test.NAME+getType(item.Nav_Test.TYPE)}}</view>
							 | 
						||
| 
								 | 
							
																	<view>
							 | 
						||
| 
								 | 
							
																		<u-radio-group v-if="item.Nav_Test.TYPE==0" v-model="item.ANSWER1"
							 | 
						||
| 
								 | 
							
																			placement="column">
							 | 
						||
| 
								 | 
							
																			<u-radio :customStyle="{marginBottom: '4px',marginTop: '4px'}"
							 | 
						||
| 
								 | 
							
																				v-for="(item1, index1) in radiolist1" :key="index1" :label="item1.name"
							 | 
						||
| 
								 | 
							
																				:name="item1.name" @change="doTrueOrFalse(index1,item)"
							 | 
						||
| 
								 | 
							
																				:disabled="readonly" />
							 | 
						||
| 
								 | 
							
																		</u-radio-group>
							 | 
						||
| 
								 | 
							
																		<u-radio-group v-if="item.Nav_Test.TYPE==1" v-model="item.ANSWER2"
							 | 
						||
| 
								 | 
							
																			placement="column">
							 | 
						||
| 
								 | 
							
																			<u-radio :customStyle="{marginBottom: '4px',marginTop: '4px'}"
							 | 
						||
| 
								 | 
							
																				v-for="(item2, index2) in radiolist2[item.ID]" :key="index2"
							 | 
						||
| 
								 | 
							
																				:label="item2.name" :name="item2.name"
							 | 
						||
| 
								 | 
							
																				@change="doOptionChange(index2,item)" :disabled="readonly" />
							 | 
						||
| 
								 | 
							
																		</u-radio-group>
							 | 
						||
| 
								 | 
							
																		<u-checkbox-group v-if="item.Nav_Test.TYPE==2" v-model="item.ANSWER3"
							 | 
						||
| 
								 | 
							
																			@change="checkboxChange($event,item)" placement="column">
							 | 
						||
| 
								 | 
							
																			<u-checkbox :customStyle="{marginBottom: '4px',marginTop: '4px'}"
							 | 
						||
| 
								 | 
							
																				v-for="(item3, index3) in radiolist2[item.ID]" :key="index3"
							 | 
						||
| 
								 | 
							
																				:label="item3.name" :name="item3.name" :disabled="readonly">
							 | 
						||
| 
								 | 
							
																			</u-checkbox>
							 | 
						||
| 
								 | 
							
																		</u-checkbox-group>
							 | 
						||
| 
								 | 
							
																	</view>
							 | 
						||
| 
								 | 
							
																</view>
							 | 
						||
| 
								 | 
							
															</u-form-item>
							 | 
						||
| 
								 | 
							
														</uni-card>
							 | 
						||
| 
								 | 
							
													</u--form>
							 | 
						||
| 
								 | 
							
												</view>
							 | 
						||
| 
								 | 
							
											</view>
							 | 
						||
| 
								 | 
							
										</u-sticky>
							 | 
						||
| 
								 | 
							
										<view class="bottom-button">
							 | 
						||
| 
								 | 
							
											<button type="primary" @click="submit">提交</button>
							 | 
						||
| 
								 | 
							
										</view>
							 | 
						||
| 
								 | 
							
									</view>
							 | 
						||
| 
								 | 
							
								</template>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<script>
							 | 
						||
| 
								 | 
							
									import {
							 | 
						||
| 
								 | 
							
										mapState,
							 | 
						||
| 
								 | 
							
										mapMutations
							 | 
						||
| 
								 | 
							
									} from 'vuex'
							 | 
						||
| 
								 | 
							
									import {
							 | 
						||
| 
								 | 
							
										extendFilterGroup,
							 | 
						||
| 
								 | 
							
										extendGroupRule,
							 | 
						||
| 
								 | 
							
										extendInclude,
							 | 
						||
| 
								 | 
							
										extendOrder,
							 | 
						||
| 
								 | 
							
										extendRule,
							 | 
						||
| 
								 | 
							
										guid,
							 | 
						||
| 
								 | 
							
										initFilter,
							 | 
						||
| 
								 | 
							
										initFilterGroup
							 | 
						||
| 
								 | 
							
									} from '../../../../utils/common'
							 | 
						||
| 
								 | 
							
									import {
							 | 
						||
| 
								 | 
							
										getRequest,
							 | 
						||
| 
								 | 
							
									} from '../../../../services/apply/FOServices/FOServices';
							 | 
						||
| 
								 | 
							
									import config from '../../../../config/common'
							 | 
						||
| 
								 | 
							
									export default {
							 | 
						||
| 
								 | 
							
										data() {
							 | 
						||
| 
								 | 
							
											return {
							 | 
						||
| 
								 | 
							
												model: {
							 | 
						||
| 
								 | 
							
													ORG_ID: "",
							 | 
						||
| 
								 | 
							
												},
							 | 
						||
| 
								 | 
							
												papers: [],
							 | 
						||
| 
								 | 
							
												viewAll: false,
							 | 
						||
| 
								 | 
							
												safe: null,
							 | 
						||
| 
								 | 
							
												UserList: [],
							 | 
						||
| 
								 | 
							
												SelUsrID: null,
							 | 
						||
| 
								 | 
							
												config: null,
							 | 
						||
| 
								 | 
							
												score: 0,
							 | 
						||
| 
								 | 
							
												END_TIME: null,
							 | 
						||
| 
								 | 
							
												readonly: true,
							 | 
						||
| 
								 | 
							
												loading: false,
							 | 
						||
| 
								 | 
							
												radiolist1: [{
							 | 
						||
| 
								 | 
							
														name: '正确',
							 | 
						||
| 
								 | 
							
														disabled: false
							 | 
						||
| 
								 | 
							
													},
							 | 
						||
| 
								 | 
							
													{
							 | 
						||
| 
								 | 
							
														name: '错误',
							 | 
						||
| 
								 | 
							
														disabled: false
							 | 
						||
| 
								 | 
							
													},
							 | 
						||
| 
								 | 
							
												],
							 | 
						||
| 
								 | 
							
												radiolist2: {},
							 | 
						||
| 
								 | 
							
												radiovalue1: "错误",
							 | 
						||
| 
								 | 
							
												checkbox: [],
							 | 
						||
| 
								 | 
							
												TaskID: '',
							 | 
						||
| 
								 | 
							
												ORG_ID: uni.getStorageSync('orgId')
							 | 
						||
| 
								 | 
							
											}
							 | 
						||
| 
								 | 
							
										},
							 | 
						||
| 
								 | 
							
										onLoad(option) {
							 | 
						||
| 
								 | 
							
											this.TaskID = option.taskID ? option.taskID : '';
							 | 
						||
| 
								 | 
							
											this.model.ID = option.ID ? option.ID : '';
							 | 
						||
| 
								 | 
							
											this.loadData();
							 | 
						||
| 
								 | 
							
										},
							 | 
						||
| 
								 | 
							
										methods: {
							 | 
						||
| 
								 | 
							
											loadData() {
							 | 
						||
| 
								 | 
							
												let json = initFilter(this.ORG_ID);
							 | 
						||
| 
								 | 
							
												extendRule(json, 'RECORD_ID', 1, this.model.ID);
							 | 
						||
| 
								 | 
							
												extendInclude(json, 'Nav_User');
							 | 
						||
| 
								 | 
							
												getRequest(json, "/SE/SENewUsers/GetUsers").then(res => {
							 | 
						||
| 
								 | 
							
													if (res && res.length > 0) {
							 | 
						||
| 
								 | 
							
														this.UserList = res
							 | 
						||
| 
								 | 
							
														if (this.viewAll) {
							 | 
						||
| 
								 | 
							
															this.SelUsrID = res[0].ID;
							 | 
						||
| 
								 | 
							
															this.getPapers();
							 | 
						||
| 
								 | 
							
														} else {
							 | 
						||
| 
								 | 
							
															let usr = res.find(it => it.ID == uni.getStorageSync('appInfo')?.User?.ID);
							 | 
						||
| 
								 | 
							
															if (usr) {
							 | 
						||
| 
								 | 
							
																this.SelUsrID = usr.ID
							 | 
						||
| 
								 | 
							
																this.getPapers();
							 | 
						||
| 
								 | 
							
															} else {
							 | 
						||
| 
								 | 
							
																uni.$showMsgFunc('当前用户没有问卷!', () => {}, 'error', 1000)
							 | 
						||
| 
								 | 
							
															}
							 | 
						||
| 
								 | 
							
														}
							 | 
						||
| 
								 | 
							
													}
							 | 
						||
| 
								 | 
							
												});
							 | 
						||
| 
								 | 
							
											},
							 | 
						||
| 
								 | 
							
											getPapers() {
							 | 
						||
| 
								 | 
							
												let SelUsrID = this.SelUsrID;
							 | 
						||
| 
								 | 
							
												this.papers = [];
							 | 
						||
| 
								 | 
							
												if (!SelUsrID) {
							 | 
						||
| 
								 | 
							
													return;
							 | 
						||
| 
								 | 
							
												}
							 | 
						||
| 
								 | 
							
												const json = initFilter(this.ORG_ID, "", "")
							 | 
						||
| 
								 | 
							
												extendRule(json, 'RECORD_ID', 1, this.model.ID);
							 | 
						||
| 
								 | 
							
												extendRule(json, 'USER_ID', 1, SelUsrID);
							 | 
						||
| 
								 | 
							
												extendInclude(json, 'Nav_Test');
							 | 
						||
| 
								 | 
							
												extendInclude(json, 'Nav_Record.Nav_User');
							 | 
						||
| 
								 | 
							
												extendInclude(json, 'Nav_User');
							 | 
						||
| 
								 | 
							
												getRequest(json, "/SE/SENewUsers/GetUserPapers").then(res => {
							 | 
						||
| 
								 | 
							
													this.model = res
							 | 
						||
| 
								 | 
							
													if (res && res.Nav_Papers && res.Nav_Papers.length > 0) {
							 | 
						||
| 
								 | 
							
														let papers = res.Nav_Papers.sort((a, b) => {
							 | 
						||
| 
								 | 
							
															return a.Nav_Test.TYPE - b.Nav_Test.TYPE
							 | 
						||
| 
								 | 
							
														});
							 | 
						||
| 
								 | 
							
														let config = res.Nav_Config;
							 | 
						||
| 
								 | 
							
														let safe = res.Nav_Papers[0].Nav_Record;
							 | 
						||
| 
								 | 
							
														let hasAnswered = false;
							 | 
						||
| 
								 | 
							
														for (let i = 0; i < res.Nav_Papers.length; i++) {
							 | 
						||
| 
								 | 
							
															if (res.Nav_Papers[i].ANSWER !== 0) {
							 | 
						||
| 
								 | 
							
																hasAnswered = true;
							 | 
						||
| 
								 | 
							
															}
							 | 
						||
| 
								 | 
							
														}
							 | 
						||
| 
								 | 
							
														this.papers = papers;
							 | 
						||
| 
								 | 
							
														this.papers.forEach(item => {
							 | 
						||
| 
								 | 
							
															let test = {}
							 | 
						||
| 
								 | 
							
															if (item.Nav_Test.TYPE != 0) {
							 | 
						||
| 
								 | 
							
																this.radiolist2[item.ID] = [];
							 | 
						||
| 
								 | 
							
																this.radiolist2[item.ID].push({
							 | 
						||
| 
								 | 
							
																	name: item.Nav_Test.OPTION_A
							 | 
						||
| 
								 | 
							
																}, {
							 | 
						||
| 
								 | 
							
																	name: item.Nav_Test.OPTION_B
							 | 
						||
| 
								 | 
							
																}, {
							 | 
						||
| 
								 | 
							
																	name: item.Nav_Test.OPTION_C
							 | 
						||
| 
								 | 
							
																}, )
							 | 
						||
| 
								 | 
							
																if (item.Nav_Test.OPTION_D != undefined && item.Nav_Test.OPTION_D != "") {
							 | 
						||
| 
								 | 
							
																	this.radiolist2[item.ID].push({
							 | 
						||
| 
								 | 
							
																		name: item.Nav_Test.OPTION_D
							 | 
						||
| 
								 | 
							
																	})
							 | 
						||
| 
								 | 
							
																}
							 | 
						||
| 
								 | 
							
																if (item.Nav_Test.OPTION_E != undefined && item.Nav_Test.OPTION_E != "") {
							 | 
						||
| 
								 | 
							
																	this.radiolist2[item.ID].push({
							 | 
						||
| 
								 | 
							
																		name: item.Nav_Test.OPTION_E
							 | 
						||
| 
								 | 
							
																	})
							 | 
						||
| 
								 | 
							
																}
							 | 
						||
| 
								 | 
							
															}
							 | 
						||
| 
								 | 
							
														})
							 | 
						||
| 
								 | 
							
														this.config = config;
							 | 
						||
| 
								 | 
							
														this.safe = safe;
							 | 
						||
| 
								 | 
							
														this.readonly = hasAnswered;
							 | 
						||
| 
								 | 
							
														this.score = this.papers[0].SCORE;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
													} else {
							 | 
						||
| 
								 | 
							
														uni.$showMsgFunc('未能成功获取此用户的在线试卷,请稍后重试!', () => {}, 'error', 1000)
							 | 
						||
| 
								 | 
							
													}
							 | 
						||
| 
								 | 
							
												})
							 | 
						||
| 
								 | 
							
											},
							 | 
						||
| 
								 | 
							
											getType(type) {
							 | 
						||
| 
								 | 
							
												let ret = '';
							 | 
						||
| 
								 | 
							
												let config = this.config;
							 | 
						||
| 
								 | 
							
												switch (type) {
							 | 
						||
| 
								 | 
							
													case 0:
							 | 
						||
| 
								 | 
							
														ret = `【是非题】(${config && config.C_TEST_SCORE || 1}分)`;
							 | 
						||
| 
								 | 
							
														break;
							 | 
						||
| 
								 | 
							
													case 1:
							 | 
						||
| 
								 | 
							
														ret = `【单选题】(${config && config.S_TEST_SCORE || 1}分)`;
							 | 
						||
| 
								 | 
							
														break;
							 | 
						||
| 
								 | 
							
													case 2:
							 | 
						||
| 
								 | 
							
														ret = `【多选题】(${config && config.M_TEST_SCORE || 1}分)`;
							 | 
						||
| 
								 | 
							
														break;
							 | 
						||
| 
								 | 
							
												}
							 | 
						||
| 
								 | 
							
												return ret;
							 | 
						||
| 
								 | 
							
											},
							 | 
						||
| 
								 | 
							
											doTrueOrFalse(index, item) {
							 | 
						||
| 
								 | 
							
												item.ANSWER = (index + 1);
							 | 
						||
| 
								 | 
							
											},
							 | 
						||
| 
								 | 
							
											doOptionChange(index, item) {
							 | 
						||
| 
								 | 
							
												if (index == 0) {
							 | 
						||
| 
								 | 
							
													item.ANSWER = 1;
							 | 
						||
| 
								 | 
							
												} else if (index == 1) {
							 | 
						||
| 
								 | 
							
													item.ANSWER = 2;
							 | 
						||
| 
								 | 
							
												} else if (index == 2) {
							 | 
						||
| 
								 | 
							
													item.ANSWER = 4;
							 | 
						||
| 
								 | 
							
												} else if (index == 3) {
							 | 
						||
| 
								 | 
							
													item.ANSWER = 8;
							 | 
						||
| 
								 | 
							
												} else if (index == 4) {
							 | 
						||
| 
								 | 
							
													item.ANSWER = 16;
							 | 
						||
| 
								 | 
							
												}
							 | 
						||
| 
								 | 
							
											},
							 | 
						||
| 
								 | 
							
											doCheckChange(index, item) {
							 | 
						||
| 
								 | 
							
												if (index == 0) {
							 | 
						||
| 
								 | 
							
													item.ANSWER = 1;
							 | 
						||
| 
								 | 
							
												} else if (index == 1) {
							 | 
						||
| 
								 | 
							
													item.ANSWER = 2;
							 | 
						||
| 
								 | 
							
												} else if (index == 2) {
							 | 
						||
| 
								 | 
							
													item.ANSWER = 4;
							 | 
						||
| 
								 | 
							
												} else if (index == 3) {
							 | 
						||
| 
								 | 
							
													item.ANSWER = 8;
							 | 
						||
| 
								 | 
							
												} else if (index == 4) {
							 | 
						||
| 
								 | 
							
													item.ANSWER = 16;
							 | 
						||
| 
								 | 
							
												}
							 | 
						||
| 
								 | 
							
											},
							 | 
						||
| 
								 | 
							
											checkboxChange(arr, item) {
							 | 
						||
| 
								 | 
							
												let indexArr = this.findCommonElementsIndices(arr, this.radiolist2[item.ID])
							 | 
						||
| 
								 | 
							
												item.ANSWER3 = arr;
							 | 
						||
| 
								 | 
							
												item.ANSWER = 0;
							 | 
						||
| 
								 | 
							
												indexArr.forEach(index => {
							 | 
						||
| 
								 | 
							
													if (index == 0) {
							 | 
						||
| 
								 | 
							
														item.ANSWER += 1;
							 | 
						||
| 
								 | 
							
													} else if (index == 1) {
							 | 
						||
| 
								 | 
							
														item.ANSWER += 2;
							 | 
						||
| 
								 | 
							
													} else if (index == 2) {
							 | 
						||
| 
								 | 
							
														item.ANSWER += 4;
							 | 
						||
| 
								 | 
							
													} else if (index == 3) {
							 | 
						||
| 
								 | 
							
														item.ANSWER += 8;
							 | 
						||
| 
								 | 
							
													} else if (index == 4) {
							 | 
						||
| 
								 | 
							
														item.ANSWER += 16;
							 | 
						||
| 
								 | 
							
													}
							 | 
						||
| 
								 | 
							
												})
							 | 
						||
| 
								 | 
							
											},
							 | 
						||
| 
								 | 
							
											findCommonElementsIndices(arr1, arr2) {
							 | 
						||
| 
								 | 
							
												const commonElements = [];
							 | 
						||
| 
								 | 
							
												for (let i = 0; i < arr1.length; i++) {
							 | 
						||
| 
								 | 
							
													for (let j = 0; j < arr2.length; j++) {
							 | 
						||
| 
								 | 
							
														if (arr1[i] === arr2[j].name) {
							 | 
						||
| 
								 | 
							
															commonElements.push(j);
							 | 
						||
| 
								 | 
							
														}
							 | 
						||
| 
								 | 
							
													}
							 | 
						||
| 
								 | 
							
												}
							 | 
						||
| 
								 | 
							
												return commonElements;
							 | 
						||
| 
								 | 
							
											},
							 | 
						||
| 
								 | 
							
											submit() {
							 | 
						||
| 
								 | 
							
												let data = {
							 | 
						||
| 
								 | 
							
													Nav_Config: JSON.parse(JSON.stringify(this.config)),
							 | 
						||
| 
								 | 
							
													Nav_Papers: JSON.parse(JSON.stringify(this.papers)),
							 | 
						||
| 
								 | 
							
													TaskID: this.TaskID,
							 | 
						||
| 
								 | 
							
													ORG_ID: this.ORG_ID
							 | 
						||
| 
								 | 
							
												}
							 | 
						||
| 
								 | 
							
												for (let i = 0; i < data.Nav_Papers.length; i++) {
							 | 
						||
| 
								 | 
							
													if (data.Nav_Papers[i].ANSWER == 0) {
							 | 
						||
| 
								 | 
							
														uni.$showMsgFunc(`第${i + 1}题尚未选择答题,请完成所有答题后再进行提交`, () => {}, 'error', 2000)
							 | 
						||
| 
								 | 
							
														return;
							 | 
						||
| 
								 | 
							
													}
							 | 
						||
| 
								 | 
							
												}
							 | 
						||
| 
								 | 
							
												getRequest(data, "/SE/SENewUsers/SavePapers").then(res => {
							 | 
						||
| 
								 | 
							
													if (res) {
							 | 
						||
| 
								 | 
							
														uni.$showMsgFunc('操作成功!', () => {
							 | 
						||
| 
								 | 
							
															uni.navigateBack()
							 | 
						||
| 
								 | 
							
														}, 'success', 1000)
							 | 
						||
| 
								 | 
							
													}
							 | 
						||
| 
								 | 
							
												})
							 | 
						||
| 
								 | 
							
											},
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								</script>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<style scoped>
							 | 
						||
| 
								 | 
							
									@import url("../../../../style/css/editTemplate.css");
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									.todo-page {
							 | 
						||
| 
								 | 
							
										padding: 16px 16px 70px;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								</style>
							 |