单选多选,全选去选 mpvue小程序

<template>
  <div style="background: #f2f2f2">
    <div  v-for="(item,i) in cardInfoList" :key="i">
      <div style=" padding:10px 20px;display: flex;flex-direction: row;margin-top: 10px;background: #fff;">
        <div style="margin-top: 10px">
          <van-checkbox icon-size="16px" shape="square" :value="item.isChecked" @change="handleChange(item,i)"></van-checkbox>
        </div>
        <div style=" ;margin-left: 10px;">
          <p>
            附件类型:{{item.transferGoodsType}}&nbsp;&nbsp; 调拨数量:{{item.transferQty}}
          </p>
          <p>
            源库位:{{item.sourceStockName}}&nbsp;&nbsp; 目的库位:{{item.destStockName}}
          </p>
          <p>
            附件名称:{{item.transferGoodsName}}
          </p>
        </div>
      </div>


    </div>
    <div class="card_bottom">
      <div>
        全选/去选<van-switch size="18px" v-model="checkedAll"  @change="handleCheckAll"/>
      </div>
      <div>
        <button class="btn" open-type="getUserInfo" @click="handleComfirm">确 认 领 卡</button>
      </div>
    </div>
    <van-toast id="van-toast" />
  </div>
</template>

<script>
import Toast from '@/../static/vant/toast/toast'

export default {
  data () {
    return {
      result: [],
      checkedAll: false,
      cardInfoList: [
       //测试数据
        // {
        //   id: 1,
        //   isChecked: false,
        //   type: 'SD卡',
        //   qty: '40',
        //   kuwei: 'NKU001',
        //   time: '2019-01-04 17:34'
        // },
        // {
        //   id: 2,
        //   type: 'SD卡',
        //   isChecked: false,
        //   qty: '50',
        //   kuwei: 'NKU002',
        //   time: '2019-06-08 17:34'
        // }
      ]
    }
  },

  components: {
  },
  onShow () {
    this.initData()
  },
  methods: {
    initData () {
      this.$http.get('/contractor/contractororder/receiveCard?transferContractorCode='+this.$store.state.user.user.contorCode).then(res => {
        if (res.data.data.length == 0) {
          Toast('当前没有可领取的sd卡信息,即将跳转到主页')
          setTimeout(function () {
            wx.redirectTo({
              url: '/pages/driver/tms/tmsCarrier/common/main'
            })
          }, 2000)
          return
        }
        var resultData = res.data.data
      //后台数据没有isChecked属性,自己拼上去
        for (let i = 0; i < resultData.length; i++) {
          resultData[i].isChecked = false
        }
        this.cardInfoList = resultData
      })
    },
    handleChange (e, k) {
      console.log(this.cardInfoList)
      this.cardInfoList[k].isChecked = !this.cardInfoList[k].isChecked
      let arr = []
      for (let i = 0; i < this.cardInfoList.length; i++) {
        if (this.cardInfoList[i].isChecked === true) {
          arr.push(this.cardInfoList[i])
          if (arr.length == this.cardInfoList.length) {
            this.checkedAll = true
          }else{
            this.checkedAll = false
          }
        }
      }
    },
    handleCheckAll () {
      this.checkedAll = !this.checkedAll
      if (this.checkedAll === true) {
        for (let i = 0; i < this.cardInfoList.length; i++) {
          this.cardInfoList[i].isChecked = true
        }
      } else {
        for (let i = 0; i < this.cardInfoList.length; i++) {
          this.cardInfoList[i].isChecked = false
        }
      }
    },
    handleComfirm () {
      console.log(this.cardInfoList)
    }
  },
  created () {
  }
}
</script>
<style lang="wxss">
  page{
    background-color: #f2f2f2;
    font-size: 28rpx;color: #444
  }
</style>
<style scoped>
  .btn{
    width: 250px;
    font-size: 30rpx;
    border: none;
    background: #3480e8;
    color: #fff;
   }
.card_bottom{
  display: flex;
  position: absolute;
  line-height: 40px;
  bottom: 0;
}
</style>
微信小程序中可以通过使用组件来实现单选多选全选功能。 单选: 可以使用radio组件来实现单选功能。radio组件需要与radio-group组件配合使用。当用户点击其中一个radio后,radio-group会自动将其它的radio项取消中。 多选: 可以使用checkbox组件来实现多选功能。checkbox组件需要与checkbox-group组件配合使用。当用户点击某个checkbox时,checkbox-group会自动将其它的checkbox项保持原有状态。 全选: 可以使用checkbox组件来实现全选功能。需要在checkbox组件中加入一个value属性,并将其绑定到全选按钮的checked属性上。当用户点击全选按钮时,将全选按钮的状态传递给所有的checkbox项即可。 示例代码: 单选: ``` <radio-group> <label wx:for="{{list}}" wx:key="{{index}}"> <radio value="{{item.value}}">{{item.name}}</radio> </label> </radio-group> ``` 多选: ``` <checkbox-group> <label wx:for="{{list}}" wx:key="{{index}}"> <checkbox value="{{item.value}}">{{item.name}}</checkbox> </label> </checkbox-group> ``` 全选: ``` <checkbox value="all" checked="{{allChecked}}" bindchange="onAllChange">全选</checkbox> <checkbox-group> <label wx:for="{{list}}" wx:key="{{index}}"> <checkbox value="{{item.value}}" checked="{{item.checked}}">{{item.name}}</checkbox> </label> </checkbox-group> ``` 其中,allChecked和item.checked为数据中的属性,需要在js文件中定义和更新。onAllChange为全选按钮的change事件处理函数,代码如下: ``` onAllChange: function (e) { const isChecked = e.detail.value.length > 0; const list = this.data.list.map(item => { item.checked = isChecked; return item; }); this.setData({ allChecked: isChecked, list }); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值