jy-safe-app/pages/apply/subPages/SE/2trainRecordShow.vue
2026-01-26 17:24:55 +08:00

353 lines
13 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<view class="page-wrap">
<view class="card">
<view class="background"></view>
<view>
<u--form labelPosition="left" labelWidth="auto" labelAlign="center" :model="model" class="demo-ruleForm">
<u-form-item label="培训名称:" prop="NAME" borderBottom>
<u--input v-if="model.Nav_Notify" v-model="model.Nav_Notify.NAME" border="none" slot="right" inputAlign="right" disabled disabledColor="#ffffff" fontSize="14px"></u--input>
</u-form-item>
<u-form-item label="培训类型:" prop="Nav_LaunchUser.NAME" borderBottom>
<u--input v-if="model.Nav_Notify" v-model="model.Nav_Notify.Nav_TrainType.NAME" border="none" slot="right" inputAlign="right" disabled disabledColor="#ffffff" fontSize="14px"></u--input>
</u-form-item>
<u-form-item label="培训级别:" prop="LEVEL" borderBottom>
<u--input v-if="model.Nav_Notify" v-model="model.Nav_Notify.LEVEL_SHOW" border="none" slot="right" inputAlign="right" disabled disabledColor="#ffffff" fontSize="14px"></u--input>
</u-form-item>
<u-form-item label="组织部门:" prop="Nav_Notify.Nav_LaunchDepartment.NAME" borderBottom>
<u--input v-if="model.Nav_Notify" v-model="model.Nav_Notify.Nav_LaunchDepartment.NAME" border="none" slot="right" inputAlign="right" disabled disabledColor="#ffffff" fontSize="14px"></u--input>
</u-form-item>
<u-form-item label="培训时间:" prop="TRAIN_TIME" borderBottom>
<u--input v-model="model.TRAIN_TIME" border="none" inputAlign="right" disabled disabledColor="#ffffff" fontSize="14px"></u--input>
</u-form-item>
<u-form-item label="培训地点:" prop="Nav_Notify.TRAIN_ADDR" borderBottom>
<u--input v-if="model.Nav_Notify" v-model="model.Nav_Notify.TRAIN_ADDR" border="none" slot="right" inputAlign="right" disabled disabledColor="#ffffff" fontSize="14px"></u--input>
</u-form-item>
<u-form-item label="培训学时:" prop="Nav_Notify.HOURS" borderBottom>
<u--input v-if="model.Nav_Notify" v-model="model.Nav_Notify.HOURS" border="none" slot="right" inputAlign="right" disabled disabledColor="#ffffff" fontSize="14px"></u--input>
</u-form-item>
<u-form-item label="培训老师:" prop="Nav_Notify.TRAIN_TEACHER" borderBottom>
<u--input v-if="model.Nav_Notify" v-model="model.Nav_Notify.TRAIN_TEACHER" border="none" slot="right" inputAlign="right" disabled disabledColor="#ffffff" fontSize="14px"></u--input>
</u-form-item>
<u-form-item label="培训形式:" prop="" borderBottom>
<u--input v-if="model.Nav_Notify" v-model="model.Nav_Notify.TRAINTYPE_SHOW" border="none" inputAlign="right" disabled disabledColor="#ffffff" fontSize="14px"></u--input>
</u-form-item>
<u-form-item label="考核方式:" prop="Nav_TrainCheckType.NAME" borderBottom>
<u--input v-if="model.Nav_Notify" v-model="model.Nav_Notify.CHECKTYPE_SHOW" border="none" slot="right" inputAlign="right" disabled disabledColor="#ffffff" fontSize="14px"></u--input>
</u-form-item>
<u-form-item label="培训内容:" prop="TRAINCONTENT" borderBottom>
<u-textarea autoHeight v-html="model.TRAINCONTENT" border="none" disabled></u-textarea>
</u-form-item>
<view class="upload-title">附件</view>
<full-upload v-model="model.Nav_Files" :listProp='listPropUpload' :listPropVal='listPropValUpload' :isShowBtn="false"></full-upload>
<u-form-item label="审阅意见:" prop="TRAIN_PLAN" borderBottom>
<u--input v-model="model.STATUS>2?'已阅':''" border="none" slot="right" inputAlign="right" disabled disabledColor="#ffffff" fontSize="14px"></u--input>
</u-form-item>
<u-form-item label="请假人员:" prop="LeaveUsers" borderBottom>
<u-textarea autoHeight v-html="model.LeaveUsers" border="none" disabled></u-textarea>
</u-form-item>
<u-form-item label="缺席人员:" prop="MissUsers" borderBottom>
<u-textarea autoHeight v-html="model.MissUsers" border="none" disabled></u-textarea>
</u-form-item>
<u-form-item label="培训人员:" prop="Users">
</u-form-item>
<rich-text autoHeight v-html="model.Users" border="none" disabled style="font-size: 14px;"></rich-text>
<view style="margin-top: 10px;">
<u-button type="primary" class="bottom" v-if='isLoadOK&&tableKey!=1&&model.Nav_Notify.CHECKTYPE == 51' @click="openTest(model.ID)">查看试卷</u-button>
</view>
</u--form>
</view>
<view class="bottom-button" v-if='isLoadOK&&tableKey==1&&model.STATUS==1'>
<u-button type="primary" class="bottom" color="#3d4b70" @click="onTableBtnAgree" :disabled="isAgree">签到</u-button>
</view>
<view class="bottom-button" v-if='isLoadOK&&tableKey==1&&model.STATUS==2'>
<u-button type="primary" class="bottom" color="#3d4b70" @click="onTableBtnAudit">审核</u-button>
</view>
</view>
</view>
</template>
<script>
import {
initFilter,
extendRule,
extendInclude
} from '../../../../utils/common'
import {
getRequest,
} from '../../../../services/apply/FOServices/FOServices'
import '../../../../utils/showMsg.js'
import color from '../../../../uni_modules/uview-ui/libs/config/color'
import config from '../../../../config/common'
import {
getEnum
} from '../../../../services/common';
export default {
data() {
return {
model: {},
TaskID: "",
tableKey: '0',
isLoadOK: false,
ORG_ID: uni.getStorageSync('orgId'),
listPropUpload: ['RECORD_ID'],
listPropValUpload: [],
isAgree: false,
enumsData: {}, // 存储所有枚举数据(键:枚举名称,值:处理后的枚举列表)
enumsText: {}, // 存储枚举文本列表(用于下拉选择等场景)
}
},
onLoad(option) {
this.model.ID = option.ID;
this.TaskID = option.taskID;
this.tableKey = option.tableKey ? option.tableKey : '0'
this.fetchEnums(['TrainType', 'PlanCheckType', 'FMDepartmentType']);
},
methods: {
async fetchEnums(enumNames) {
try {
// 存储所有枚举请求的Promise
const enumPromises = enumNames.map(name => {
return getEnum({
name
}).then(res => {
// 统一处理枚举格式添加name/code字段便于后续映射
return {
enumName: name,
data: res.map(item => ({
...item,
name: item.NAME, // 统一显示名称字段
code: item.ID // 统一值字段
}))
};
});
});
// 等待所有枚举请求完成
const results = await Promise.all(enumPromises);
// 存储枚举结果到data中键为枚举名称值为处理后的数据
results.forEach(({
enumName,
data
}) => {
this.enumsData[enumName] = data;
// 生成文本列表(如需要)
this.enumsText[enumName] = data.map(item => item.name);
});
// 所有枚举获取完成后执行loadData
this.loadData();
} catch (error) {
console.error('枚举请求失败:', error);
uni.showToast({
title: '枚举数据加载失败',
icon: 'none'
});
}
},
loadData() {
const json = initFilter(this.ORG_ID, "", "", 1)
extendRule(json, 'ID', 1, this.model.ID);
extendInclude(json, 'Nav_Notify');
extendInclude(json, 'Nav_Notify.Nav_TrainContentList.Nav_Point');
extendInclude(json, 'Nav_Notify.Nav_LaunchDepartment');
extendInclude(json, 'Nav_Notify.Nav_LaunchUser');
extendInclude(json, 'Nav_Notify.Nav_TrainType');
extendInclude(json, 'Nav_Users.Nav_User');
extendInclude(json, 'Nav_Files.Nav_ImgFile');
extendInclude(json, 'Nav_Users.Nav_User');
extendInclude(json, 'Nav_Papers');
getRequest(json, "/SE/TrainRecord/Get").then(res => {
this.model = res
//数据组装
let trainContent = '';
let MissUsers = '';
let LeaveUsers = '';
let Users = '';
if (res.Nav_Notify.Nav_TrainContentList && res.Nav_Notify.Nav_TrainContentList.length > 0) {
for (let i = 0; i < res.Nav_Notify.Nav_TrainContentList.length; i++) {
trainContent += (i + 1) + "." + res.Nav_Notify.Nav_TrainContentList[i].Nav_Point.NAME +
"<br/>"
}
}
let users0 = res.Nav_Users.filter(t => t.STATUS == 0);
let users1 = res.Nav_Users.filter(t => t.STATUS == 1);
let users2 = res.Nav_Users.filter(t => t.STATUS == 2);
if (users1 && users1.length > 0) {
for (let i = 0; i < users1.length; i++) {
LeaveUsers += users1[i].Nav_User.NAME +
"<br/>"
}
} else {
LeaveUsers = "无";
}
if (users2 && users2.length > 0) {
for (let i = 0; i < users2.length; i++) {
MissUsers += users2[i].Nav_User.NAME +
"<br/>"
}
} else {
MissUsers = "无";
}
if (users0 && users0.length > 0) {
for (let i = 0; i < users0.length; i++) {
if (!users0[i].OK) {
Users += (Users.length > 0 ? " " : "") +
"<view style='color:#E35D58;background-color:rgba(227,93,88,0.2);padding:5px;line-height:30px;white-space:nowrap;'>" +
users0[i].Nav_User.NAME + "</view>";
} else {
Users += (Users.length > 0 ? " " : "") +
"<text style='padding:5px;line-height:30px;white-space:nowrap;'>" +
users0[i].Nav_User.NAME + "</text>";
}
}
}
this.model.Nav_Notify.LEVEL_SHOW= res.Nav_Notify.LEVEL !== undefined ? this.enumsData['FMDepartmentType'].find(item => item.code === res.Nav_Notify.LEVEL)?.name : '';
this.model.Nav_Notify.TRAINTYPE_SHOW = res.Nav_Notify.TRAINTYPE !== undefined ? this.enumsData['TrainType'].find(item => item.code === res.Nav_Notify.TRAINTYPE)?.name : '';
this.model.Nav_Notify.CHECKTYPE_SHOW = res.Nav_Notify.CHECKTYPE !== undefined ? this.enumsData['PlanCheckType'].find(item => item.code === res.Nav_Notify.CHECKTYPE)?.name : '';
this.model.TRAIN_MODEL = this.returnModel(this.model.Nav_Notify.TRAIN_MODEL);
// this.model.LEVEL = this.transLevel(this.model.Nav_Notify.LEVEL);
this.model.TRAIN_TIME = this.model.Nav_Notify.TRAIN_START_TIME?.substring(0, 16) + "~" + this
.model.Nav_Notify
.TRAIN_END_TIME?.substring(0, 16);
this.model.TRAINCONTENT = trainContent;
this.model.MissUsers = MissUsers;
this.model.LeaveUsers = LeaveUsers;
this.model.Users = Users;
this.isLoadOK = true;
})
},
returnModel(level) {
let str = '';
if (level == undefined) {
return str;
}
if (level.indexOf('1') >= 0) {
str += '讲授法 ';
}
if (level.indexOf('2') >= 0) {
str += '视听法 ';
}
if (level.indexOf('3') >= 0) {
str += '研讨法 ';
}
if (level.indexOf('4') >= 0) {
str += '演示法 ';
}
return str;
},
transLevel(level) {
if (level == 0) {
return '部门 ';
}
if (level == 1) {
return '车间 ';
}
if (level == 2) {
return '班组 ';
}
if (level == 3) {
return '公司 ';
}
},
openTest(id) {
uni.navigateTo({
url: '/pages/apply/subPages/SE/7answerPageEdit?ID=' + id
})
},
onTableBtnAgree() {
this.isAgree = true;
const json = initFilter(this.ORG_ID, "", "", 1)
json.Keyword = this.model.ID;
json.Parameter1 = this.TaskID;
getRequest(json, "/SE/SETrainRecord/SignIn").then(res => {
if (res) {
uni.$showMsgFunc('操作成功!', () => {
uni.navigateBack()
}, 'success', 1000)
}
})
},
onTableBtnAudit() {
const json = initFilter(this.ORG_ID, "", "", 1)
json.Keyword = this.model.ID;
json.Parameter1 = this.TaskID;
getRequest(json, "/SE/SETrainRecord/Submit").then(res => {
if (res) {
uni.$showMsgFunc('操作成功!', () => {
uni.navigateBack()
}, 'success', 1000)
}
})
}
},
computed: {
}
}
</script>
<style>
/* @import url("@/style/css/editTemplate.css"); */
.card {
margin: 20px 16px 140px 16px;
/* border: 1px solid #EBEEF5; */
padding: 20px 30px 40px 30px;
/* box-shadow: rgba(0, 0, 0, 0.08) 0px 0px 3px 1px; */
background-color: #ffffff;
border-radius: 10px;
}
.page-wrap {
overflow: hidden;
}
.background {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: #edf1fd;
z-index: -1;
}
.upload-title {
font-size: 14px;
color: #8e8b9c;
line-height: 22px;
padding: 8px 0px;
}
.demo-ruleForm>>>.u-form-item__body__left__content__label {
font-size: 14px;
color: #8e8b9c;
/* justify-content: flex-start; */
}
.demo-ruleForm>>>.u-form-item__body__left__content__ {
left: -11px;
top: 0px
}
.demo-ruleForm>>>.u-textarea__field {
font-size: 14px;
}
.demo-ruleForm>>>.u-cell__title-text {
font-size: 14px;
}
.bottom-button {
position: fixed;
bottom: 0;
left: 0;
width: 100%;
padding: 10px 16px;
box-sizing: border-box;
background: #edf1fd;
z-index: 999;
}
</style>