需求:红框内选项变成“否”那么就需要提示“填写接受人”
结果样式:
代码:
data() {
return {
// 校验
rules: {
// receiver: [{ required: true, message: '请选择接收人', trigger: 'change' }],
receiver: [{ validator: this.validateReceiver, trigger: 'change' }],
},
}
}
methods: {
// 在组件的 methods 中定义一个函数,用于动态生成校验规则
validateReceiver(rule, value, callback) {
const { isFollowTime, isContent, isOnDuty, isFilledForm, isGoodEnv } = this.ruleForm;
if (isFollowTime === '0' || isContent === '0' || isOnDuty === '0' || isFilledForm === '0' || isGoodEnv === '0') {
// 满足条件中的任何一个条件时,要求选择接收人
if (!value) {
return callback(new Error('请选择接收人'));
}
}
// 如果不满足条件,或者接收人已经选择,则校验通过
callback();
},
}
页面整体代码:
<template>
<el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="122px" :disabled="formDisabled">
<el-form-item label="uuid" prop="uuid" v-show="false">
<el-input v-model="ruleForm.uuid"></el-input>
</el-form-item>
<el-row>
<el-col :span="12">
<el-form-item label="培训项目" prop="planId">
<el-select v-model="ruleForm.planId" @change="onPlanIdChanged">
<el-option v-for="item in planIdList" :key="item.uuid" :label="item.project" :value="item.uuid"></el-option>
</el-select>
</el-form-item>
</el-col>
<!-- <el-col :span="12">
<el-form-item label="培训编号" prop="trainId">
<el-input v-model="trainId" :disabled="true"></el-input>
</el-form-item>
</el-col>-->
<el-col :span="12">
<el-form-item label="教员" prop="teacherId">
<el-select v-model="ruleForm.teacherId">
<el-option v-for="item in teacherIdList" :key="item.uuid" :label="item.teacherName" :value="item.uuid"></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="培训地点" prop="classroomName">
<!--onplanidchanged加上ou,traintime,应到实到人数-->
<!-- <el-select v-model="ruleForm.classroomId" >
<el-option v-for="item in classroomIdList" :key="item.uuid" :label="item.classroomName" :value="item.uuid"></el-option>
</el-select> -->
<el-input v-model="ruleForm.classroomName"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<!--<el-form-item label="培训课程" prop="courseId">
<el-select v-model="ruleForm.courseId" @change="onCourseChanged">
<el-option v-for="item in courseIdList" :key="item.uuid" :label="item.name" :value="item.uuid"></el-option>
</el-select>
</el-form-item>-->
<el-form-item label="培训组织部门" prop="ou">
<!--onplanidchanged加上ou,traintime,应到实到人数-->
<el-input v-model="ruleForm.ou" maxlength="30"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="培训时间" prop="trainTime">
<el-date-picker v-model="ruleForm.trainTime" type="datetimerange" format="yyyy-MM-dd" range-separator="至" style="width: 100%"></el-date-picker>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="应到人数" prop="takeStudentCount">
<el-input v-model="ruleForm.takeStudentCount" :disabled="true"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="实到人数" prop="actualStudentCount">
<el-input v-model="ruleForm.actualStudentCount" maxlength="30"></el-input>
</el-form-item>
</el-col>
</el-row>
<div class="check-table">
<el-row>
<el-col :span="2">序号</el-col>
<el-col :span="7">检查内容 </el-col>
<el-col :span="3">检查结果</el-col>
<el-col :span="7">情况说明 </el-col>
<el-col :span="5">改正情况跟踪 </el-col>
</el-row>
<el-row>
<el-col :span="2">1</el-col>
<el-col :span="7">培训是否按时间执行。 </el-col>
<el-col :span="3">
<el-form-item prop="isFollowTime">
<el-select v-model="ruleForm.isFollowTime">
<el-option v-for="item in isFollowTimeList" :key="item.id" :label="item.text" :value="item.id"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="7">
<el-input type="textarea" :rows="2" v-model="ruleForm.followTimeRemark" maxlength="50" show-word-limit resize="none"></el-input>
</el-col>
<el-col :span="5">
<el-input type="textarea" :rows="2" v-model="ruleForm.followTimeModify" maxlength="50" show-word-limit resize="none"></el-input>
</el-col>
</el-row>
<el-row>
<el-col :span="2">2</el-col>
<el-col :span="7">培训内容是否与培训计划一致。 </el-col>
<el-col :span="3">
<el-form-item prop="isContent">
<el-select v-model="ruleForm.isContent">
<el-option v-for="item in isFollowTimeList" :key="item.id" :label="item.text" :value="item.id"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="7">
<el-input type="textarea" :rows="2" v-model="ruleForm.isContentRemark" maxlength="50" show-word-limit resize="none"></el-input>
</el-col>
<el-col :span="5">
<el-input type="textarea" :rows="2" v-model="ruleForm.isContentModify" maxlength="50" show-word-limit resize="none"></el-input>
</el-col>
</el-row>
<el-row>
<el-col :span="2">3</el-col>
<el-col :span="7">教员、学员是否均在岗。 </el-col>
<el-col :span="3">
<el-form-item prop="isOnDuty">
<el-select v-model="ruleForm.isOnDuty">
<el-option v-for="item in isFollowTimeList" :key="item.id" :label="item.text" :value="item.id"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="7">
<el-input type="textarea" :rows="2" v-model="ruleForm.notDutyRemark" maxlength="50" show-word-limit resize="none"></el-input>
</el-col>
<el-col :span="5">
<el-input type="textarea" :rows="2" v-model="ruleForm.notDutyModify" maxlength="50" show-word-limit resize="none"></el-input>
</el-col>
</el-row>
<el-row>
<el-col :span="2">4</el-col>
<el-col :span="7">是否按要求填写《培训记录表》和《教员课时确认单》等相关表格。 </el-col>
<el-col :span="3">
<el-form-item prop="isFilledForm">
<el-select v-model="ruleForm.isFilledForm">
<el-option v-for="item in isFollowTimeList" :key="item.id" :label="item.text" :value="item.id"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="7">
<el-input type="textarea" :rows="2" v-model="ruleForm.unfilledFormRemark" maxlength="50" show-word-limit resize="none"></el-input>
</el-col>
<el-col :span="5">
<el-input type="textarea" :rows="2" v-model="ruleForm.unfilledFormModify" maxlength="50" show-word-limit resize="none"></el-input>
</el-col>
</el-row>
<el-row>
<el-col :span="2">5</el-col>
<el-col :span="7">教员、学员在培训过程中是否做与培训无关的事情。 </el-col>
<el-col :span="3">
<el-form-item prop="isRelatedTrain">
<el-select v-model="ruleForm.isRelatedTrain">
<el-option v-for="item in isFollowTimeList" :key="item.id" :label="item.text" :value="item.id"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="7">
<el-input type="textarea" :rows="2" v-model="ruleForm.unrelatedTrainRemark" maxlength="50" show-word-limit resize="none"></el-input>
</el-col>
<el-col :span="5">
<el-input type="textarea" :rows="2" v-model="ruleForm.unrelatedTrainModify" maxlength="50" show-word-limit resize="none"></el-input>
</el-col>
</el-row>
<el-row>
<el-col :span="2">6</el-col>
<el-col :span="7">培训环境是否良好。 </el-col>
<el-col :span="3">
<el-form-item prop="isGoodEnv">
<el-select v-model="ruleForm.isGoodEnv">
<el-option v-for="item in isFollowTimeList" :key="item.id" :label="item.text" :value="item.id"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="7">
<el-input type="textarea" :rows="2" v-model="ruleForm.badEnvRemark" maxlength="50" show-word-limit resize="none"></el-input>
</el-col>
<el-col :span="5">
<el-input type="textarea" :rows="2" v-model="ruleForm.badEnvModify" maxlength="50" show-word-limit resize="none"></el-input>
</el-col>
</el-row>
<el-row style="height: 105px">
<el-col :span="2">其他情况</el-col>
<el-col :span="22">
<el-input type="textarea" :rows="3" v-model="ruleForm.other" maxlength="300" show-word-limit resize="none"></el-input>
</el-col>
</el-row>
</div>
<el-row style="margin-top: 10px">
<el-col :span="6">
<el-form-item label="检查人" prop="checkerId">
<el-input v-model="ruleForm.checkerId" maxlength="30" :disabled="true"></el-input>
</el-form-item>
</el-col>
<el-col :span="7" v-if="htmlFlag == 'add' || htmlFlag == 'update'">
<el-form-item label="接收人" prop="receiver">
<el-select v-model="ruleForm.receiver">
<el-option v-for="item in receiverList" :key="item.uuid" :label="item.teacherName" :value="item.uuid"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="7" v-if="htmlFlag == 'audit' || htmlFlag == 'look'">
<el-form-item label="教员(签字)" prop="signTeacherId">
<el-select v-model="ruleForm.signTeacherId">
<el-option v-for="item in receiverList" :key="item.uuid" :label="item.teacherName" :value="item.uuid"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="9">
<el-form-item label="检查时间" prop="checkTime">
<el-date-picker v-model="ruleForm.checkTime" format="yyyy-MM-dd HH:mm" type="datetime"></el-date-picker>
</el-form-item>
</el-col>
</el-row>
</el-form>
</template>
<script>
import { saveTrainCheckList, updateTrainCheckList, getTrainPlanById, listChecker } from '@/api/eams/trainCheck.js';
// import { listTrainer } from '@/api/eams/teachRecord.js'
import { listAllTeacher } from '@/api/eams/teacherInfo.js';
import { listTrainerByPlanId } from '@/api/eams/trainPlan.js';
import { listTrainPlan } from '@/api/eams/trainPlan.js';
import { listBizCodeByType } from '@/api/eams/bizcode.js';
// import { listCoursesByPlanId } from '@/api/eams/courseArrange.js';
import { getFirstNodeCandidate } from '@/api/eams/flow.js';
export default {
name: 'trainPlanData',
props: {
dialogFormVisible: {
required: true,
type: Boolean,
},
updateData: {
type: Object,
default() {
return {};
},
},
htmlFlag: {
type: String,
default: 'add',
},
},
data() {
return {
title: '新增巡查记录',
planIdList: [],
trainIdList: [],
// classroomIdList:[],
courseIdList: [],
operateTypeList: [],
checkTypeList: [],
openTypeList: [],
teacherIdList: [],
checkerList: [],
isFollowTimeList: [],
formDisabled: false, //表单是否禁用
trainId: '',
ruleForm: {
uuid: '',
planId: '',
classroomId: '',
classroomName: '',
courseId: '',
trainTime: '',
theoryType: '',
ou: '',
takeStudentCount: '',
actualStudentCount: '',
checkTime: new Date(),
teacherId: '',
checkerId: '',
signTeacherId: '',
operateTeacherId: '',
theory: '',
operate: '',
other: '',
openType: '',
writeSpeak: '',
isFollowTime: '1',
isContent: '1',
isOnDuty: '1',
isFilledForm: '1',
isGoodEnv: '1',
isRelatedTrain: '0',
followTimeRemark: '',
followTimeModify: '',
isContentRemark: '',
isContentModify: '',
notDutyRemark: '',
notDutyModify: '',
unfilledFormRemark: '',
unfilledFormModify: '',
badEnvRemark: '',
badEnvModify: '',
unrelatedTrainRemark: '',
unrelatedTrainModify: '',
receiver: '', //接收人
},
photoAction: window.fileAction.uploadFileAction,
imageUrl: '',
// 校验
rules: {
//resourceName: [{ required: true, message: "请输入资源名称", trigger: "blur" }],
//resourceType: [{ required: true, message: "请选择资源类型", trigger: "change" }],
planId: [{ required: true, message: '请选择培训项目', trigger: 'change' }],
// checkerId: [{ required: true, message: '请选择检查人', trigger: 'change' }],
// receiver: [{ required: true, message: '请选择接收人', trigger: 'change' }],
receiver: [{ validator: this.validateReceiver, trigger: 'change' }],
// trainId: [{ required: true, message: "请输入培训编号", trigger: "blur" }],
},
any: {
A: '',
B: '',
C: '',
D: '',
E: '',
aPer: '',
bPer: '',
cPer: '',
dPer: '',
ePer: '',
total: '',
},
receiverList: [], //接收人(教员)
};
},
computed: {
visible: {
get() {
return this.dialogFormVisible;
},
set(val) {
this.$emit('update:dialogFormVisible', val);
},
},
},
mounted() {
//查询实操类型列表
listBizCodeByType({ type: 'operate_type' }).then((res) => {
this.operateTypeList = res.data.data;
});
listBizCodeByType({ type: 'check_open_type' }).then((res) => {
///
this.openTypeList = res.data.data;
});
listBizCodeByType({ type: 'check_type' }).then((res) => {
///
this.checkTypeList = res.data.data;
});
listTrainPlan().then((res) => {
this.planIdList = res.data.data;
});
listTrainerByPlanId({ planId: this.ruleForm.planId }).then((res) => {
this.teacherIdList = res.data.data;
});
listChecker().then((res) => {
this.checkerList = res.data.data;
});
//查询接收人列表
getFirstNodeCandidate('patrolRecord').then((res) => {
this.receiverList = res.data.data;
});
listBizCodeByType({ type: 'yes_or_no' }).then((res) => {
// 是否按计划执行
this.isFollowTimeList = res.data.data;
});
this.openInit();
},
methods: {
//初始化
openInit() {
this.closeDialog();
this.$set(this.ruleForm, 'checkerId', this.$UserInfoUtil.getCurrentRealName());
this.formDisabled = false;
if (this.htmlFlag == 'look' || this.htmlFlag == 'audit') {
this.formDisabled = true;
}
if (this.htmlFlag != 'add') {
this.ruleForm = { ...this.updateData };
this.onPlanIdChanged(this.updateData.planId);
}
},
//关闭窗口
closeDialog() {
// 清空表单
this.$refs.ruleForm.resetFields();
// 清除校验
this.$refs.ruleForm.clearValidate();
},
// 触发父页面方法
hideDialog() {
this.$emit('handleDialogVisible', { dialogFormVisible: false });
},
// 提交
submitForm() {
this.$refs.ruleForm.validate((valid) => {
if (valid) {
var param = { ...this.ruleForm };
delete param.trainTime;
param.trainPlaceId = param.classroomId;
param.userId = this.$UserInfoUtil.getCurrentAccountId();
param.deptId = this.$UserInfoUtil.getCurrentGroupId();
param.userName = this.$UserInfoUtil.getCurrentRealName();
param.roleId = this.$store.state.userInfos.userInfos.roles;
if (this.htmlFlag == 'add') {
//新增
saveTrainCheckList(param).then((res) => {
if (res.data.data) {
this.$message({
type: 'success',
message: '新增巡查记录成功',
});
//刷新
// this.$emit('handleDialogVisible', false);
this.visible = false;
} else {
this.$message({
type: 'error',
message: '新增巡查记录失败',
});
}
});
} else {
//修改
updateTrainCheckList(param).then((res) => {
if (res.data.data) {
this.$message({
type: 'success',
message: '修改巡查记录成功',
});
//刷新
// this.$emit('handleDialogVisible', false);
this.visible = false;
} else {
this.$message({
type: 'error',
message: '修改巡查记录失败',
});
}
});
}
} else {
return false;
}
});
},
// 重置
cancelForm() {
this.visible = false;
},
//培训项目值改变时
onPlanIdChanged(value) {
//查询地点,应到人数,培训时间
getTrainPlanById({ uuid: value }).then((res) => {
var resData = res.data.data;
this.$set(this.ruleForm, 'trainTime', [resData.startTime, resData.endTime]);
this.ruleForm.takeStudentCount = resData.trainNumber;
this.ruleForm.classroomName = resData.classroomName;
this.ruleForm.classroomId = resData.classroomId;
this.ruleForm.ou = resData.applyCompany;
});
listTrainerByPlanId({ planId: this.ruleForm.planId }).then((res) => {
this.teacherIdList = res.data.data;
this.receiverList = res.data.data;
});
},
// //课程改变时
// onCourseChanged(value){
// //根据课程id查询考核信息
// getCourseInfo4Analyse({planId:this.ruleForm.planId,courseId:value}).then(res=>{
// var courseData = res.data.data;;
// if(courseData){
// this.ruleForm = courseData;
// //渲染理论考核形式
// this.ruleForm.theoryType = this.$common.renderCode(this.ruleForm.openType, this.openTypeList) + "," +this.$common.renderCode(this.ruleForm.writeSpeak,this.checkTypeList);
// }
// })
// //根据课程id查询巡查记录
// getAnalyseScoreResByCond({planId:this.ruleForm.planId,courseId:value}).then(res=>{
// this.any = res.data.data;
// })
// },
//渲染百分比
onRenderPer(value) {
return value ? (parseFloat(value) * 100).toFixed(2) : 0;
},
//渲染培训时间
// 在组件的 methods 中定义一个函数,用于动态生成校验规则
validateReceiver(rule, value, callback) {
const { isFollowTime, isContent, isOnDuty, isFilledForm, isGoodEnv } = this.ruleForm;
if (isFollowTime === '0' || isContent === '0' || isOnDuty === '0' || isFilledForm === '0' || isGoodEnv === '0') {
// 满足条件中的任何一个条件时,要求选择接收人
if (!value) {
return callback(new Error('请选择接收人'));
}
}
// 如果不满足条件,或者接收人已经选择,则校验通过
callback();
},
},
};
</script>
<style scoped>
.trainCheck-add >>> .el-date-editor.el-input,
.trainCheck-add >>> .el-select {
width: 100%;
}
.trainCheck-add >>> .avatar-uploader .el-upload {
border: 1px dashed #d9d9d9;
border-radius: 6px;
cursor: pointer;
position: relative;
overflow: hidden;
}
.trainCheck-add >>> .avatar-uploader .el-upload:hover {
border-color: #409eff;
}
.trainCheck-add >>> .avatar-uploader-icon {
font-size: 28px;
color: #8c939d;
width: 178px;
height: 178px;
line-height: 178px;
text-align: center;
}
.trainCheck-add >>> .avatar {
width: 178px;
height: 178px;
display: block;
}
.check-table >>> .el-form-item__content {
margin-left: 0px !important;
}
.check-table >>> .el-row {
height: 70px;
}
.check-table >>> .el-col {
height: 100%;
display: flex;
justify-content: center;
align-items: center;
border-top: 1px solid #6b7887;
border-left: 1px solid #6b7887;
padding: 0px 4px;
}
.check-table >>> .el-row:last-child {
border-bottom: 1px solid #6b7887;
}
.check-table >>> .el-row .el-col:last-child {
border-right: 1px solid #6b7887;
}
.check-table >>> .el-textarea__inner {
border: none;
}
.check-table >>> .el-select > .el-input {
margin-top: 14px;
}
/* .trainCheck-add >>> .el-row .el-col:first-child .el-form-item__label {
width: 90px !important;
}
.trainCheck-add >>> .el-row .el-col:last-child .el-form-item__content {
margin-left: 115px !important;
} */
</style>