vue根据选项是否显示校验规则

需求:红框内选项变成“否”那么就需要提示“填写接受人”

结果样式:

代码:

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>
  
  
  
  
  
  
  
  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值