vue+element ui el-table 完成动态添加表格&&动态合并踩坑记录

vue+element ui el-table 完成动态添加表格&&动态合并踩坑记录,第1张

添加后的图片效果

1.关键:写一个标识数组(例如这个图表中的,以 日期 indexObj 为唯一标识,每个不一样的日期合并行数记录下来)

2.必要:监听表格数据(无深度监听)当表格数据添加行/删除行/复制时,都有表格数据的动态变化,从而计算标识

3.关键:合并行方法 objectSpanMethod({ row, columnIndex })

注意传值是 { ...this.rowObj } 我也不知道为什么传this.rowObj会造成数据乱,这也是一个对象啊???

步骤:

1.根据点击复制按钮行的信息,得到上一工作日Day

2.根据此Day,执行下面方法,得到上一工作日所有数据,此处Json转化,实际 *** 作中没有转换时,插入数据会乱掉。

3.改变标识,进行循环插入

在element+vue项目中,需求要表格内已有数据,点击新增在首行添加一行带输入框内容

table的数据为datas=[],那么下面是一列的数据,多列可循环或复制

 <el-table-column

prop="name"

label="件号"

sortable

show-overflow-tooltip:

true

align="center"

width="180"

>

<template slot-scope="scope">

<template

v-if="scope.row.show"

>

<el-form-item

label=" "

prop="name"

>

<el-input

v-model="ruleForm.name"

disabled="true"

size="mini"

>

<i

slot="suffix"

class="el-input__icon el-icon-search"

@click="Partnum"

/>

</el-input>

</el-form-item>

</template>

<template v-else>

<span @click="partNumber(scope.$index, scope.row)">{{ scope.row.name }}</span>

</template>

</template>

</el-table-column>

这思路主要是template里面还有2个template,在data数组的 *** 作中每条加一个属性show来控制是显示输入框还是里面的某个字段,

addBtn () {// 添加按钮事件

let data = { show: true }

this.datasNew.unshift(data)

},

同思路可自定义添加各种属性给表格做相应 *** 作。

依旧是公司里那个Vue+Element UI的项目。今天遇到了一个新的问题:表单中某个选择器的值不同,控制着下面表单内容是否显示。放图:

 

       大概就是这个样子。由后台返回的“发放方式”的数值,控制下面几个input框是否显示。这个实现比较简单,只需要把下面几个框用一个<dev>包裹起来,加上一个v-show=""的判断条件即可,但它们的表单验证让我为难了,因为只看Element UI官网给的方法来看,:rules="rules"只在data下面绑定了一个rules对象,可我这明显需要两套,即如果发放方式为"平台代发"时,只验证一个"发放方式"否则则全部验证。

       花了一点时间摸索,我想:如果不像官方给的那样,rules="rules",然后在data下设置rules的值,而是把rules绑定一个函数,这个函数在computed计算属性中,根据不同的条件设置不同的验证方法不就可以了?自己尝试了一下,真的成功了,代码如下:

<el-form class="dialog-body" :rules="rulesList" :model="temp">

<!--这里为表单内容-->

</el-form>

<script>

export default {

data() {

return {

rules: {

pay_type: [

{ required: true, message: '不能为空', trigger: 'change' }

],

accno: [

{ required: true, message: '不能为空', trigger: 'blur' }

],

accname: [

{ required: true, message: '不能为空', trigger: 'blur' }

],

otp: [

{ required: true, message: '不能为空', trigger: 'blur' }

],

username: [

{ required: true, message: '不能为空', trigger: 'change' }

],

otp_id: [

{ required: true, message: '不能为空', trigger: 'change' }

]

},

rules2: {

pay_type: [

{ required: true, message: '不能为空', trigger: 'change' }

]

},

}

},

computed: {

rulesList: function() {

if (this.temp.pay_type) {

return this.rules

} else {

return this.rules2

}

}

},

登录后复制

    这样就实现了对一个表单进行两套或以上的验证。

    另外一种场景是,给某一个字段添加多条验证规则。由于rules接收的是一个数组,我们在数组中再添加一项即可。

比如下面的例子,我又在后面添加了一条自定义的规则

data() {

const validatePass = (rule, value, callback) =>{

if (this.option) {

callback(new Error('请选择列表中已有的选项'))

} else {

callback()

}

}

return {

rules: {

firstContract: [

{ required: true, message: '不能为空', trigger: ['blur', 'change'] },

{ required: true, trigger: 'blur', validator: validatePass }

],

}

}

}

登录后复制

    自定义规则中,validator接受的是我自定义的一套规则validatePass,Error为接受的错误提示。

 

vue

element

表单验证


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11628762.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-17
下一篇2023-05-17

发表评论

登录后才能评论

评论列表(0条)

    保存