elementui table 动态列表、弹框动态输入、校验

16 篇文章 0 订阅
<el-table :data='tableData' style='width: 100%' height='100%' class='tabClass'>
	<el-table-column prop='nickName' label='姓名' show-overflow-tooltip></el-table-column>
	<el-table-column show-overflow-tooltip v-for="(col,index) in cols" :key="index" :prop="col.fieldName"
		:label="col.fieldLabel">
	</el-table-column>
	<el-table-column label='操作' width='130'>
		<template slot-scope='scope'>
			<div class='button edit' @click='handleEdit(scope.row)'>
				<span>修改</span>
			</div>
		</template>
	</el-table-column>
</el-table>
<el-dialog :close-on-click-modal="false" title="修改数据" width="700px" class="leave-info"
	:visible.sync="balanceOpen">
	<el-form :model="formObj" ref='formName'>
		<el-row :gutter="20">
			<el-col :span="24">
				<el-form-item label="时间" label-width="100px">
					<el-date-picker style="width: 100%;" type="date" format="yyyy-MM-dd"
						value-format="yyyy-MM-dd" v-model="formObj.workDate" placeholder="选择日期">
					</el-date-picker>
				</el-form-item>
			</el-col>
			<el-col :span="12" v-for="(item,i) in formObj.days.length" :key="i">
				<el-form-item :label="formObj.days[i].leaveTypeName" label-width="100px"
					:prop="formObj.days[i].leaveType" :key='i'>
					<el-input :data-index="i" v-model="formObj.days[i].leaveBalance"
						:placeholder="'请输入'+formObj.days[i].leaveTypeName"></el-input>
				</el-form-item>
			</el-col>
		</el-row>
	</el-form>
	<div slot="footer" class="dialog-footer">
		<el-button @click="balanceOpen=false" size="mini">关 闭</el-button>
		<el-button type="primary" @click="saveSubmit" size="mini">确 定</el-button>
	</div>
</el-dialog>

js

this.tableData=[{
	01ac49d3639e462c9d3836caa18ed63f: 0,
	nickName: "王五",
	readOnlyType: '11',
	userId: "04e029eb2c634daf9ddcd62fdf3aba86"
},{
	01ac49d3639e462c9d3836caa18ed63f: 1,
	nickName: "李四",
	readOnlyType: '22',
	userId: "04e029eb2c6342384628642863486284"
}]
this.cols=[{
	fieldLabel: "姓名",
	fieldName: "nickName"
	},{
	fieldLabel: "类型",
	fieldName: "nickName"
	},{
	fieldLabel: "表头3",
	fieldName: "01ac49d3639e462c9d3836caa18ed63f"
}]
handleEdit(row) {
	this.formObj = {
		workDate:'2022-10-26',
		days:[
		    {
		        "leaveType": "1bd76d7035af4c129fe380e40e72ab3a",
		        "leaveTypeName": "哈哈哈",
		        "leaveBalance": 0,
		        "editFlag": false
		    },
		    {
		        "leaveType": "b824734da928479098570aee0fc3a64b",
		        "leaveTypeName": "呵呵呵",
		        "leaveBalance": 13,
		        "editFlag": true
		    }
		]
	}
	
	this.balanceOpen = true;
},
<!--动态添加、修改弹窗-->
<template>
	<el-dialog :title="getTitle" :visible.sync="showDialog" top="8vh" width="56%" :before-close="handleClose"
	 :close-on-click-modal="false">
		<div class="form-box">
			<el-form :model="form" ref='formName'>
				<el-row :gutter="20">
					<el-col :span="12" v-for="(item,i) in form.wagesdetailList.length">
						<el-form-item :label="form.wagesdetailList[i].fieldName" label-width="200px" :prop=" 'wagesdetailList.' + i + '.fieldValue'" v-if="form.wagesdetailList[i].templateField=='userName'" :rules="[form.wagesdetailList[i].type==0?{ required: true, message: form.wagesdetailList[i].fieldName+'不能为空', trigger: 'blur'}:'']">
						  <el-input v-model="form.wagesdetailList[i].fieldValue" :placeholder="'请输入'+form.wagesdetailList[i].fieldName" ></el-input>
						</el-form-item>
						<el-form-item :label="form.wagesdetailList[i].fieldName" label-width="200px" :prop=" 'wagesdetailList.' + i + '.fieldValue'" v-if="form.wagesdetailList[i].templateField=='userOffice'" :rules="[form.wagesdetailList[i].type==0?{ required: true, message: form.wagesdetailList[i].fieldName+'不能为空', trigger: 'blur'}:'']">
						  <el-input v-model="form.wagesdetailList[i].fieldValue" :placeholder="'请输入'+form.wagesdetailList[i].fieldName" ></el-input>
						</el-form-item>
						<el-form-item :label="form.wagesdetailList[i].fieldName" label-width="200px" :prop=" 'wagesdetailList.' + i + '.fieldValue'" v-if="form.wagesdetailList[i].templateField=='identityCard'" :rules="[form.wagesdetailList[i].type==0?{ required: true, message: form.wagesdetailList[i].fieldName+'不能为空', trigger: 'blur'}:'']">
						  <el-input v-model="form.wagesdetailList[i].fieldValue" :placeholder="'请输入'+form.wagesdetailList[i].fieldName" ></el-input>
						</el-form-item>
						<el-form-item :label="form.wagesdetailList[i].fieldName" label-width="200px" :prop=" 'wagesdetailList.' + i + '.fieldValue'" v-if="form.wagesdetailList[i].templateField=='wageDate'" :rules="[form.wagesdetailList[i].type==0?{ required: true, message: form.wagesdetailList[i].fieldName+'不能为空', trigger: 'blur'}:'']">
						  <el-date-picker
						    v-model="form.wagesdetailList[i].fieldValue"
						   type="date"
							placeholder="请选择日期"
							value-format="yyyy-MM-dd">
						  </el-date-picker>
						</el-form-item>
						<el-form-item :label="form.wagesdetailList[i].fieldName" label-width="200px" :prop=" 'wagesdetailList.' + i + '.fieldValue'" v-if="form.wagesdetailList[i].templateField=='wageTypes'" :rules="[form.wagesdetailList[i].type==0?{ required: true, message: form.wagesdetailList[i].fieldName+'不能为空', trigger: 'change'}:'']">
							<el-select  v-model="form.wagesdetailList[i].fieldValue" style="width: 100%;">
						   <el-option v-for="(item,index) in soundList" :key="index" :label="item.label" :value="item.label">
						   </el-option>
						 </el-select>
						</el-form-item>
						 <!-- onkeyup="this.value = this.value.replace(/[^\d.]/g,'');" -->
						<el-form-item   v-if="form.wagesdetailList[i].templateField!='wageDate' && form.wagesdetailList[i].templateField!='identityCard' && form.wagesdetailList[i].templateField!='wageTypes' && form.wagesdetailList[i].templateField!='userName' && form.wagesdetailList[i].templateField!='userOffice'" :label="form.wagesdetailList[i].fieldName" :prop=" 'wagesdetailList.' + i + '.fieldValue'"  :key='i' label-width="200px" :rules="[form.wagesdetailList[i].type==0?{ required: true, message: form.wagesdetailList[i].fieldName+'不能为空', trigger: 'blur'}:'']">
							<!-- 1、非数字的都替换掉,除了数字和.-2、前两位不能是0加数字  3、必须保证第一个为数字而不是.  4、保证只有出现一个.而没有多个.  5、保证.只出现一次,而不能出现两次以上   6、如果第一位是负号,则允许添加 -->
							<el-input @input="(val)=>{keyUps(val,i)}" maxlength="9" :data-index="i" :value="form.wagesdetailList[i].fieldValue" :placeholder="'请输入'+form.wagesdetailList[i].fieldName" ></el-input>
						</el-form-item>
					</el-col>
				</el-row>
			</el-form>
		</div>
		<div slot="footer" class="dialog-footer">
			<el-button @click="handleClose" size="mini">取 消</el-button>
			<el-button type="primary" @click="confirm" size="mini">确 定</el-button>
		</div>
	</el-dialog>
</template>

<script>
	export default {
		props: {
			getTitle: {
				type: String,
			},
			showDialog: {
				type: Boolean,
				default: false
			},
			soundList:{
				type:Array
			},
			form: {
			
			},
		},
		watch: {
			showDialog:{
				handler:function(newV,oldV){
						if(newV){
							this.$refs["formName"].resetFields();
						}
				}, 
				deep:true
			}
		},
		computed: {},

		data() {
			return {
				ruleList:[],
				rules: {},
			};
		},
		//生命周期 - 挂载完成(访问DOM元素)
		created() {
			
		
			
		},
		methods: {
			handleClose() {
				this.$parent.showDialog = false;
			},
			confirm() {
				this.$refs.formName.validate((valid, object) => {
					if (valid) {
						this.$parent.showDialog = false;
						this.$emit("confirm", this.form.wagesdetailList);
					} else {
						return false;
					}
				});
			},
			keyUps(val,i){
				this.form.wagesdetailList[i].fieldValue = val.replace(/[^\d\.\-]/g,'').replace(/^0\d[0-9]*/g,'').replace(/^\./g,'').replace(/\.{2,}/g,'.').replace('.','$#$').replace(/\./g,'').replace('$#$','.').replace(/^(\-)*(\d+)\.(\d\d).*$/,'$1$2.$3');
			}

		},
	};
</script>
<style lang="less" scoped>
	/deep/.el-form-item__content {
		width: 53%;
	}

	.el-date-editor.el-input,
	.el-date-editor.el-input__inner {
		width: 100%;
	}

	/deep/.el-form-item {
		margin-bottom: 18px;
	}
</style>

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值