iView在列表中使用switch的问题

180 阅读1分钟

在开发中使用iView这个框架的过程中遇到了几个问题:

1.switch绑定字段的值不是true, false,使用的是1,2代表激活或者开启在表格中的处理

<template slot="baseCommodityState" slot-scope="{ row }">
    <i-switch size="large" :value="row.baseCommodityState == 1 ? true : false"
                    v-if="row.baseCommodityState"
                    :before-change="handleChange.bind(this,row)">
        <span slot="open">上架</span>
        <span slot="close">下架</span>
     </i-switch>
</template>

2.在表单中处理switch的状态

<FormItem label="上架状态: " prop="baseCommodityState">
     <i-switch v-model="formData.baseCommodityState" :true-value="1" :false-value="2" />
</FormItem>

3.在表格中修改本行switch的状态,要求在改变状态以前调一下接口看看是否可以状态的改变,这时候使用on-change方法就会出现问题,change的时候方法就会直接改变状态,所以要使用before-change这个方法.在before-change的时候是拿不到行内的数据的, 通过element plus el-switch 的before-change 如何带参数-pudn.com找到了解决办法


/**
* html
*/
<template slot="baseCommodityState" slot-scope="{ row }">
    <i-switch size="large" :value="row.baseCommodityState == 1 ? true : false"
                    v-if="row.baseCommodityState"
                    :before-change="handleChange.bind(this,row)">
        <span slot="open">上架</span>
        <span slot="close">下架</span>
     </i-switch>
</template>
/**
* js
* 上架下架
* @param data
* i-switch 开启 or 关闭 返回返回promise对象时则可以切换switch的状态,若什么都不返回则不可切换switch状态
*/
handleChange(data) {
   return new Promise(async () => {
      const res = await standUpAndDown({ // 调用接口
        baseCommodityState: data.baseCommodityState == 1 ? 2 : 1,
        id: data.id
      })
      if (res.errCode == '40007' && !res.success) {
        this.$Modal.warning({
          title: '下架提示',
          content: res.errDesc
        })
      } else if (!res.success) {
        this.$Message.error(res.errDesc)
      } else {
        this.$Message.success('操作成功')
      }
       // 重新调用查询数据的接口
      this.getData()
      })
    },