el-form、form 等表单校验哪些事
1. el-dialog 弹框固定在窗口上,如何设置上代码
/deep/ .el-dialog {
margin: 5vh auto !important;
}
/deep/ .el-dialog__body {
height: 80vh;
overflow: hidden;
}
2. el-radio 单选处理
data () {
return {
detailApprovalPass: '', // 处理取消单选,不能放到form对象来处理,需要单独处理
}
}
<el-radio-group v-model="detailApprovalPass">
<el-radio label="1" @click.native.prevent="clickAuditRadio('1')">审核通过</el-radio>
<el-radio label="0" @click.native.prevent="clickAuditRadio('0')">退回</el-radio>
</el-radio-group>
methods: {
// 取消单选处理
clickAuditRadio (val) {
parseInt(val) === parseInt(this.detailApprovalPass) ? this.detailApprovalPass = '' : this.detailApprovalPass = val
this.senceForm.detailApprovalPass = this.detailApprovalPass
this.senceForm.assignor = ''
if (this.detailApprovalPass === '') {
this.senceForm.detailApprovalOpinion = ''
}
}
}
3. 复选框 el-checkbox v-model 绑定的是某个值,但返回数据时,我们想要某个对象该怎么做?这里尝试修改el-checkbox的change事件@change="val => checkoutChange(val, item)",具体代码如下:
多组复选框多选,关键代码如下:
// checkoutBoxList 复选框选中的数组,里面只存放一个字段如中文name
<el-checkbox-group v-model="checkoutBoxList">
<div
v-for="(items, index) in textList"
:key="index"
class="checkout-row"
>
<div class="dialog-title">{{ items.name }}</div>
<el-checkbox
v-for="item in items.list"
:label="item.namd"
:key="item.id"
@change="val => checkoutChange(val, item)"
></el-checkbox>
</div>
</el-checkbox-group>
// 是返回后端的数组backCheckoutList,选中的id与之比较
methods: {
// 改变后代码处理
checkoutChange(val, currentItem) {
currentItem.flag = val
if (val) {
this.backCheckoutList.push(currentItem)
} else {
this.backCheckoutList = this.backCheckoutList.filter(
item => item.id !== currentItem.id
)
}
},
}
4. 不满足条件不切换el-tabs,具体实现的场景是el-tabs切换之前判断是否满足切换条件 不满足条件仅提示不切换Tab,需要实现的钩子方法:before-leave="beforeLeave",在调用之前来判断,刚开始是通过简单的变量来判断,现在弹出框弹出之前变量逻辑已经走完,promise有异步处理功能,这里使用promise来实现,代码如下:
// dom
<el-tabs v-model="activeName" :before-leave="beforeLeave">
<el-tab-pane label="aa" name="first"></el-tab-pane>
<el-tab-pane
label="bb"
name="sencend"
:disabled="disableTab"
></el-tab-pane>
<el-tab-pane
label="cc"
name="third"
:disabled="disableTab"
></el-tab-pane>
</el-tabs>
<div class="button-area">
<div v-if="activeName === 'first'">
<el-button class="next-button" @click="firstSubmit"
>aa</el-button
>
<div v-else-if="activeName === 'sencend'">
<el-button class="next-button" @click="nextButtonClick('lastStep')"
>bb</el-button
>
</div>
<div v-else>
<el-button class="next-button" @click="nextButtonClick('lastStep')"
>上一步</el-button
>
</div>
</div>
// computed方法:用到的时候再用
disableTab() {
let flag = false
if (//根据条件来判断后面两个是否置灰) {
flag = true
}
return flag
},
// methods方法
methods: {
beforeLeave() {
if (this.isNextTab) { // 点击按钮时,改变activeName来触发el-tabs时不走promise方法,直接走promise方法就好,要不会弹框两次
this.isNextTab = false
return true
}
return this.handleTab()
},
// 使用promise来实现确认之后切换
handleTab() {
return new Promise((resolve, reject) => {
this.$confirm(
`切换前请先确认页面内容已保存,是否确认切换?`,
'切换模板',
{
confirmButtonText: '确认',
cancelButtonText: '取消',
type: 'warning',
center: true
}
)
.then(() => {
resolve()
})
.catch(() => {
this.$message({
type: 'info',
message: '已取消'
})
reject()
})
})
},
firstSubmit() {
this.handleTab().then(() => {
this.isNextTab = true
// 调用接口地方
})
},
// 按钮实现调用tabs时处理方法
nextButtonClick(stepName) {
this.handleTab().then(() => {
this.isNextTab = true
switch (this.activeName) {
case 'first':
{
this.activeName = 'sencend'
}
break
case 'sencend':
if (stepName === 'lastStep') {
this.activeName = 'first'
} else if (stepName === 'nextStep') {
this.activeName = 'third'
}
break
case 'third':
if (stepName === 'lastStep') {
// 上一步
this.activeName = 'sencend'
}
break
default:
break
}
})
}
}
5. el-form 表单校验,el-select时,trigger: 'change' 这样修改后会马上校验,trigger: 'blur'是校验输入框的,修改后马上校验,不是点了保存才校验
6.
将来的自己,会感谢现在不放弃的自己!

浙公网安备 33010602011771号