jy-safe-app/pages/apply/subPages/SCWB/wb048.vue
2025-10-14 15:17:30 +08:00

606 lines
21 KiB
Vue

<!-- 外包单位安全培训记录结果确认 待开发页面 -->
<template>
<view class="page-wrap">
<view class="background"></view>
<view class="card">
<!-- <uni-card margin="0" :is-shadow="true"> -->
<u--form labelPosition="left" labelWidth="auto" labelAlign="center" :model="model" ref="wForm" errorType="border-bottom" class="demo-ruleForm">
<view style="position: relative;">
<view style="position: absolute;left: -10px;color: #3d4b70;top: -3px;">*</view>
</view>
<view style="font-size: 15px; font-weight: bold;color: #3d4b70;margin-bottom: 10px;">基本信息</view>
<u-form-item label="项目名称" prop="Nav_Parent.Nav_Project.NAME" borderBottom>
<u--input disabled disabledColor="#ffffff" v-model="model.Nav_Parent.Nav_Project.NAME" border="none" inputAlign="right" fontSize="14px"></u--input>
</u-form-item>
<u-form-item label="外包单位名称" prop="Nav_Parent.Nav_Project.UNIT_NAME" borderBottom>
<u--input disabled disabledColor="#ffffff" v-model="model.Nav_Parent.Nav_Project.UNIT_NAME" border="none" inputAlign="right" fontSize="14px"></u--input>
</u-form-item>
<u-form-item label="课程名称" prop="Nav_Parent.NAME" borderBottom>
<u--input disabled disabledColor="#ffffff" v-model="model.Nav_Parent.NAME" border="none" inputAlign="right" fontSize="14px"></u--input>
</u-form-item>
<u-form-item label="培训部门" prop="Nav_Parent.Nav_Department.NAME" borderBottom>
<u--input disabled disabledColor="#ffffff" v-model="model.Nav_Parent.Nav_Department.NAME" border="none" inputAlign="right" fontSize="14px"></u--input>
</u-form-item>
<u-form-item label="培训讲师" prop="Nav_Parent.Nav_User.NAME" borderBottom>
<u--input disabled disabledColor="#ffffff" v-model="model.Nav_Parent.Nav_User.NAME" border="none" inputAlign="right" fontSize="14px"></u--input>
</u-form-item>
<u-form-item label="最迟培训时间" prop="Nav_Parent.END_TIME" borderBottom>
<u--input disabled disabledColor="#ffffff" v-model="model.Nav_Parent.END_TIME" border="none" inputAlign="right" fontSize="14px"></u--input>
</u-form-item>
<u-form-item label="培训开始时间" prop="START_TIME" borderBottom>
<u--input disabled disabledColor="#ffffff" v-model="model.START_TIME" border="none" inputAlign="right" fontSize="14px"></u--input>
</u-form-item>
<u-form-item label="培训结束时间" prop="END_TIME" borderBottom>
<u--input disabled disabledColor="#ffffff" v-model="model.END_TIME" border="none" inputAlign="right" fontSize="14px"></u--input>
</u-form-item>
<u-form-item label="培训总时长" prop="TOTAL_TIME" borderBottom>
<u--input disabled disabledColor="#ffffff" v-model="model.TOTAL_TIME" border="none" inputAlign="right" fontSize="14px"></u--input>
</u-form-item>
<u-form-item label="培训形式" prop="TRAIN_TYPE_SHOW" borderBottom>
<u--input disabled disabledColor="#ffffff" v-model="model.TRAIN_TYPE_SHOW" border="none" inputAlign="right" fontSize="14px"></u--input>
</u-form-item>
<u-form-item label="培训内容" prop="TRAIN_CONTENT" borderBottom>
<u--input disabled disabledColor="#ffffff" v-model="model.TRAIN_CONTENT" border="none" inputAlign="right" fontSize="14px"></u--input>
</u-form-item>
<u-form-item v-if="Traintype==1||Traintype==3" label="线上培训开始时间" prop="ONLINE_START_TIME" borderBottom>
<u--input disabled disabledColor="#ffffff" v-model="model.ONLINE_START_TIME" border="none" inputAlign="right" fontSize="14px"></u--input>
</u-form-item>
<u-form-item v-if="Traintype==1||Traintype==3" label="线上培训结束时间" prop="ONLINE_END_TIME" borderBottom>
<u--input disabled disabledColor="#ffffff" v-model="model.ONLINE_END_TIME" border="none" inputAlign="right" fontSize="14px"></u--input>
</u-form-item>
<u-form-item v-if="Traintype==1||Traintype==3" label="线上培训总时长" prop="ONLINE_TOTAL_TIME" borderBottom>
<u--input disabled disabledColor="#ffffff" v-model="model.ONLINE_TOTAL_TIME" border="none" inputAlign="right" fontSize="14px"></u--input>
</u-form-item>
<u-form-item v-if="Traintype==2||Traintype==3" label="线下培训开始时间" prop="OFFLINE_START_TIME" borderBottom>
<u--input disabled disabledColor="#ffffff" v-model="model.OFFLINE_START_TIME" border="none" inputAlign="right" fontSize="14px"></u--input>
</u-form-item>
<u-form-item v-if="Traintype==2||Traintype==3" label="线下培训结束时间" prop="OFFLINE_END_TIME" borderBottom>
<u--input disabled disabledColor="#ffffff" v-model="model.OFFLINE_END_TIME" border="none" inputAlign="right" fontSize="14px"></u--input>
</u-form-item>
<u-form-item v-if="Traintype==2||Traintype==3" label="线下培训总时长" prop="OFFLINE_TOTAL_TIME" borderBottom>
<u--input disabled disabledColor="#ffffff" v-model="model.OFFLINE_TOTAL_TIME" border="none" inputAlign="right" fontSize="14px"></u--input>
</u-form-item>
<u-form-item v-if="Traintype==2||Traintype==3" label="培训地点" prop="TRAIN_ADDR" borderBottom>
<u--input disabled disabledColor="#ffffff" v-model="model.TRAIN_ADDR" border="none" inputAlign="right" fontSize="14px"></u--input>
</u-form-item>
<u-form-item v-if="Traintype==2||Traintype==3" label="是否触发在线考试" prop="IS_CREATE_TEST" borderBottom>
<u--input disabled disabledColor="#ffffff" v-model="model.IS_CREATE_TESTS" border="none" inputAlign="right" fontSize="14px"></u--input>
</u-form-item>
<view class="upload-title">附件</view>
<full-upload v-model="model.Nav_Photos" :isShowBtn='tableKey==1?true:false' :listProp='listPropUpload' :listPropVal='listPropValUpload'></full-upload>
</u--form>
<u--form labelPosition="left" labelWidth="auto" labelAlign="center" errorType="border-bottom" ref="sForm" class="sub-form" style="margin-top: 10px;">
<view style="position: relative;">
<view style="position: absolute;left: -10px;color: #3d4b70;top: -3px;">*</view>
</view>
<view style="font-size: 15px; font-weight: bold;color: #3d4b70;margin-bottom: 10px;">培训确认</view>
<uni-collapse :border="false" accordion>
<view v-for="(item, index) in model.Nav_Users" :key="index">
<uni-collapse-item :title="index + 1 + '. ' + item.Nav_User.NAME+ ' ( '+ item.SCORE+'分 )'" :border="false">
<view style="margin: 0px 10px;">
<u-form-item label="姓名" prop="Nav_User.NAME" borderBottom>
<u--input disabled disabledColor="#fff" v-model="item.Nav_User.NAME" border="none" inputAlign="right" fontSize="14px"></u--input>
</u-form-item>
<u-form-item label="性别" prop="Nav_User.SEX_SHOW" borderBottom>
<u--input disabled disabledColor="#fff" v-model="item.Nav_User.SEX_SHOW" border="none" inputAlign="right" fontSize="14px"></u--input>
</u-form-item>
<u-form-item label="手机号码" prop="ID_CARD" borderBottom>
<u--input disabled disabledColor="#fff" v-model="item.Nav_User.PHONE" border="none" inputAlign="right" fontSize="14px"></u--input>
</u-form-item>
<u-form-item label="分数" class="subRequired" required prop="SCORE" borderBottom>
<u--input disabledColor="#fff" v-model="item.SCORE" border="none" inputAlign="right" fontSize="14px"></u--input>
</u-form-item>
<!-- <u-form-item label="考核结果" prop="EXAMINATION_RESULTS" borderBottom>
<u--input disabled disabledColor="#fff" v-model="item.EXAMINATION_RESULTS"
border="none" inputAlign="right"></u--input>
</u-form-item> -->
<u-form-item v-if="tableKey==1" class="subRequired" required label="考核结果" prop="EXAMINATION_RESULTS" borderBottom @click="handleChange( item)">
<u--input disabledColor="#fff" v-model="item.EXAMINATION_RESULTS_SHOW" border="none" inputAlign="right" fontSize="14px"></u--input>
<u-icon style="margin-left: 4px;" name="arrow-down" size="12"></u-icon>
</u-form-item>
<view class="upload-title">附件</view>
<full-upload v-model="item.Nav_Files" :isShowBtn='tableKey==1?true:false' :listProp='listPropSubUpload' :listPropVal='item.listPropValSubUpload'></full-upload>
<u-form-item label="查看试卷:" prop="Nav_User.NAME" borderBottom @click="openTest(item.ID,item.USER_ID)">
<u--input disabled disabledColor="#fff" fontSize="14px" border="none" inputAlign="right"></u--input>
<u-icon style="margin-left: 4px;" name="arrow-right" size="12"></u-icon>
</u-form-item>
</view>
</uni-collapse-item>
</view>
</uni-collapse>
</u--form>
<!-- </uni-card> -->
</view>
<!-- <query-selector :multiple="selectorInfo.isMultiple" :show="selectorInfo.showPopup" :title="selectorInfo.title"
:lists="selectorInfo.dataLists" :defaultChecked="selectorInfo.defaultChecked" @search="handleSearch"
@select="handleSelected" @close="selectorInfo.showPopup=false" :total="selectorInfo.totalCount" /> -->
<!--
<query-selector :multiple="selectorInfo.isMultiple" :show="selectorInfo.showPopup"
:defaultChecked="selectorInfo.defaultChecked" :title="selectorInfo.title" :lists="selectorInfo.dataLists"
@search="handleSearch" @select="handleSelected" @close="selectorInfo.showPopup=false"
:total="selectorInfo.totalCount" /> -->
<!-- <query-selector :show="comPickerInfo.showSheet" :lists="userLists" :defaultValue="currentOperateUser.NAME"
@close="closePicker" @search="handleSearchUser" @select="onConfirmPicker" /> -->
<!-- <u-picker :show="comPickerInfo.showSheet" :columns="comPickerInfo.columns" @confirm="onConfirmPicker"
@close="closePicker" @cancel="closePicker" keyName="NAME"></u-picker> -->
<u-picker :show="selectorInfo.showPopup" :columns="selectorInfo.columns" @confirm="handleSelected" @close="selectorInfo.showPopup=false" @cancel="selectorInfo.showPopup=false" keyName="NAME"></u-picker>
<view class="bottom-button">
<u-button type="primary" v-if='isLoadOK&&tableKey==1' @click="submit" color="#3d4b70">提交</u-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 {
GetIni,
FullUpdate
} from '../../../../services/apply/subPages/scWB';
import {
getEnum
} from '../../../../services/common';
import config from '../../../../config/common'
export default {
data() {
return {
tableKey: '0',
TaskID: '',
Traintype: 0, //1 线上 2 线下 3 线上线下
listPropUpload: ['PARENT_ID'],
listPropValUpload: [],
listPropSubUpload: ['PARENT_ID'],
ORG_ID: uni.getStorageSync('orgId'),
listSEExaminationResultsEnum: [
// {
// ID: '',
// NAME: '',
// name: ''
// },
],
listSEExaminationResultsEnumText: [
// {
// ID: '',
// NAME: '',
// name: ''
// },
],
model: {
ID: '',
TaskID: '',
START_TIME: '',
END_TIME: '',
TOTAL_TIME: '',
TRAIN_TYPE: '',
TRAIN_CONTENT: '',
ONLINE_START_TIME: '',
ONLINE_END_TIME: '',
ONLINE_TOTAL_TIME: '',
OFFLINE_START_TIME: '',
OFFLINE_END_TIME: '',
OFFLINE_TOTAL_TIME: '',
TRAIN_ADDR: '',
IS_CREATE_TEST: '',
Nav_Files: [],
Nav_Parent: {
NAME: '',
END_TIME: '',
Nav_Project: {
NAME: '',
UNIT_NAME: ''
},
Nav_Department: {
NAME: ''
},
Nav_User: {
NAME: ''
},
},
Nav_Users: [{
listPropValSubUpload: [],
SCORE: 0,
EXAMINATION_RESULTS: '',
EXAMINATION_RESULTS_SHOW: '',
Nav_User: {
NAME: '',
SEX: '',
SEX_SHOW: '',
ID_CARD: ''
},
Nav_Files: []
}],
// Nav_CheckType: {},
// Nav_CheckTypeLevel: {
// Nav_Enums: {}
// },
// Nav_Files: [],
// Nav_ListRiskSubmitContent: [{
// Nav_Department: {},
// Nav_UserCheck: {},
// Nav_UserDeal: {},
// LastDateUser: null,
// departmentName: '',
// userChecker: '',
// userDetailer: '',
// listPropValSubUpload: [],
// Nav_Files: []
// }],
},
isLoadOK: false,
lists: [],
comPickerInfo: {
showSheet: false,
columns: [],
title: '',
dataIndex: undefined,
formIndex: undefined,
name: ''
},
selectorInfo: {
name: 'user',
isMultiple: false,
showPopup: false,
totalCount: 0,
title: '考核结果选择',
dataItem: {},
index: 0,
columns: [],
dataLists: [],
defaultText: '',
defaultChecked: []
},
// SOURCE_ID: '',
// papers: [],
// res: [],
// viewAll: false,
// record: {
// filepath: ''
// },
// notify: null,
// UserList: [],
// SelUsrID: null,
// config: null,
// score: 0,
// END_TIME: null,
// readonly: true,
// loading: false,
// tableKey: '0',
// radiolist1: [{
// name: '正确',
// disabled: false
// },
// {
// name: '错误',
// disabled: false
// },
// ],
// radiolist2: {},
// radiovalue1: "错误",
// checkbox: [],
// TaskID: '',
// SelUsrNAME: '',
// JOBID: ''
}
},
onLoad(option) {
// this.TaskID = option.taskID ? option.taskID : '';
// this.model.ID = option.ID ? option.ID : '';
// this.JOBID = option.ID ? option.ID : '';
// this.tableKey = option.tableKey ? option.tableKey : '0'
// this.loadData();
this.model.ID = option.ID
this.TaskID = option.taskID
this.tableKey = option.tableKey
if (option.taskID != null && option.taskID != '')
this.model.TaskID = option.taskID
this.getEnums()
// this.loadData()
},
methods: {
getEnums() {
var dataParm = {
'name': "SEExaminationResultsEnum"
}
getEnum(dataParm).then(res => {
this.listSEExaminationResultsEnum = res
this.listSEExaminationResultsEnumText = []
this.listSEExaminationResultsEnum.forEach(e => {
e.name = e.NAME
e.code = e.ID
this.listSEExaminationResultsEnumText.push(e.NAME)
})
this.loadData()
})
},
loadData() {
let json = initFilter(this.ORG_ID);
extendRule(json, 'ID', 1, this.model.ID);
extendInclude(json, 'Nav_Photos.Nav_ImgFile')
// extendInclude(json, 'Nav_Files.Nav_ImgFile')
extendInclude(json, 'Nav_Parent.Nav_Project')
extendInclude(json, 'Nav_Parent.Nav_Department')
extendInclude(json, 'Nav_Parent.Nav_User')
extendInclude(json, 'Nav_Users.Nav_User')
extendInclude(json, 'Nav_Users.Nav_Files.Nav_ImgFile')
GetIni(json).then(ret => {
this.model = ret
this.listPropValUpload.push(this.model.ID)
if (ret.TRAIN_TYPE.indexOf('1') > -1 && ret.TRAIN_TYPE.indexOf('2') > -1) {
this.Traintype = 3
this.model.TRAIN_TYPE_SHOW = '线上、线下'
} else if (ret.TRAIN_TYPE.indexOf('1') > -1) {
this.Traintype = 1
this.model.TRAIN_TYPE_SHOW = '线上'
} else if (ret.TRAIN_TYPE.indexOf('2') > -1) {
this.Traintype = 2
this.model.TRAIN_TYPE_SHOW = '线下'
}
var lenthEnum = this.listSEExaminationResultsEnum.length
this.model.IS_CREATE_TESTS = ret.IS_CREATE_TEST==true?'是':'否'
this.model.Nav_Users.forEach(e => {
e.listPropValSubUpload = []
e.listPropValSubUpload.push(e.ID)
e.Nav_User.SEX_SHOW = e.Nav_User.SEX == 1 ? '男' : '女'
if (lenthEnum > 1) {
for (let i = 0; i < lenthEnum; i++) {
if (e.EXAMINATION_RESULTS == this.listSEExaminationResultsEnum[i].ID)
e.EXAMINATION_RESULTS_SHOW = this.listSEExaminationResultsEnum[i].NAME
}
}
})
// uni.$updateData()
this.isLoadOK = true
});
},
openTest(id,userid) {
uni.navigateTo({
url: '1WBanswerPageEdit?ID=' + id+ "&USER_ID=" + userid
})
},
findSelectedOptions(num, OPTION_A, OPTION_B, OPTION_C, OPTION_D, OPTION_E) {
var optionVars = {
'A': {
value: 1,
variable: OPTION_A
},
'B': {
value: 2,
variable: OPTION_B
},
'C': {
value: 4,
variable: OPTION_C
},
'D': {
value: 8,
variable: OPTION_D
},
'E': {
value: 16,
variable: OPTION_E
}
};
var selectedVars = [];
for (var key in optionVars) {
if ((num & optionVars[key].value) === optionVars[key].value) {
selectedVars.push(optionVars[key].variable);
}
}
return selectedVars;
},
getType(paper) {
let ret = '';
let config = this.config;
switch (paper.Nav_Test.TYPE) {
case 0:
ret = `【是非题】(${paper.SCOREVAL}分)`;
break;
case 1:
ret = `【单选题】(${paper.SCOREVAL}分)`;
break;
case 2:
ret = `【多选题】(${paper.SCOREVAL}分)`;
break;
}
return ret;
},
doTrueOrFalse(index, item) {
item.ANSWER = (index + 1);
if (item.ANSWER == item.Nav_Test.ANSWER) {
item.SCORE = item.SCOREVAL
} else {
item.SCORE = 0
}
},
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;
} else if (index == 5) {
item.ANSWER = 32;
}
if (item.ANSWER == item.Nav_Test.ANSWER) {
item.SCORE = item.SCOREVAL
} else {
item.SCORE = 0
}
},
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;
} else if (index == 5) {
item.ANSWER += 32;
}
})
if (item.ANSWER == item.Nav_Test.ANSWER) {
item.SCORE = item.SCOREVAL
} else {
item.SCORE = 0
}
},
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() {
this.model.Nav_Users.forEach((e, index) => {
if (e.SCORE == null) {
uni.$showErrorInfo('行【' + index + 1 + '】分数不能为空!')
}
if (e.EXAMINATION_RESULTS == null) {
uni.$showErrorInfo('行【' + index + 1 + '】考核结果不能为空!')
}
})
if (this.TaskID != null && this.TaskID != '')
this.model.TaskID = this.TaskID
// const ele = this.$refs
// ele['wForm'].validate().then(res => {
this.model.PUBLISH = 'SaveAndNotify'
FullUpdate(this.model).then(res => {
uni.$showMsgFunc('操作成功!', () => {
uni.navigateBack()
}, 'success', 1000)
})
// }).catch(err => {
// // console.log('校验失败', err)
// uni.$showErrorInfo('校验失败!')
// })
},
handleChange(item) {
// if (name == 'user' || name == 'userDetailer') {
// this.selectorInfo.isMultiple = false
// this.selectorInfo.title = '人员选择'
// this.selectorInfo.defaultChecked = []
// } else {
// this.selectorInfo.isMultiple = true
// this.selectorInfo.title = '隐患原因'
// if (this.model.Nav_ListRiskSubmitContent[val].Nav_ListRiskQuestionReason == null || this.model
// .Nav_ListRiskSubmitContent[val].Nav_ListRiskQuestionReason.length < 1) {
// this.selectorInfo.defaultChecked = []
// } else {
// let def = []
// for (let i = 0; i < this.model.Nav_ListRiskSubmitContent[val].Nav_ListRiskQuestionReason
// .length; i++) {
// def.push(this.model.Nav_ListRiskSubmitContent[val].Nav_ListRiskQuestionReason[i]
// .Nav_RiskReason)
// }
// this.selectorInfo.defaultChecked = def
// }
// }
this.selectorInfo.name = name
this.selectorInfo.showPopup = true
this.selectorInfo.dataItem = item
this.selectorInfo.totalCount = this.listSEExaminationResultsEnum.length
// this.selectorInfo.dataLists = this.listSEExaminationResultsEnum
this.selectorInfo.dataLists = this.listSEExaminationResultsEnum
this.selectorInfo.columns = [this.listSEExaminationResultsEnumText]
},
handleSearch() {
this.selectorInfo.dataLists = this.listSEExaminationResultsEnum
this.selectorInfo.columns = [this.listSEExaminationResultsEnumText]
},
handleSelected(e) {
this.selectorInfo.showPopup = false
// this.selectorInfo.dataItem.EXAMINATION_RESULTS_SHOW = e.name
// this.selectorInfo.dataItem.EXAMINATION_RESULTS = e.ID
this.selectorInfo.dataItem.EXAMINATION_RESULTS_SHOW = e.value[0]
this.selectorInfo.dataItem.EXAMINATION_RESULTS = this.listSEExaminationResultsEnum[e.indexs[0]].code
},
closePicker() {
this.comPickerInfo = {
showSheet: false,
columns: [],
title: '',
name: '',
formIndex: undefined
}
},
}
}
</script>
<style scoped>
@import url("../../../../style/css/newTemplate.css");
/* @import url("../../../../style/css/editTemplate.css"); */
/* .todo-page {
padding: 16px 16px 70px;
} */
</style>