vue利用element勾选框样式编写可勾选的卡片组件

需求:1、卡片点击查看详情,添加选中样式,兄弟标签取消样式;2、勾选框全选、反选,勾选样式,判断全选,未全选。

1.HTML 

  1. 全选 
    <div class="select-contanier">
    <el-col
    v-if="showSubmits"
    :span="24"
    style="padding-right: 10px;
    display: flex;
    justify-content: space-between"
    >
    <el-button
      type="success"
      size="mini"
      @click="handleGetALL"
      :disabled="checkedList.length === 0"
    >
      全部提交
    </el-button>
    <el-checkbox
      style="margin-right: 15px"
      :value="checkAll"
      @change="checkAllChange"
      />
    </el-col>
    <div>
  2. 卡片容器 
    <div class="card-contanier">
                            <div
                                v-for="(item,index) in cityOptions"
                                class="card-body"
                                :class="{bgclick: item.active || selectIndex === index}"
                                @click.prevent="cardClickList(item.myIndex)"
                            >
                                <div class="card-header">
    
                                    <div class="card-header--left"><span>{{ item.measureName }}</span>
                                        <el-divider
                                            direction="vertical"
                                        />
                                    </div>
                                    <div class="card-header--middle">
                                        第{{ item.periodNo }}期
                                    </div>
                                    <div class="card-header--right" @click.stop.prevent="checkOne(item, index)" >
                                        <el-checkbox :value="item.checked"/>
                                    </div>
                                </div>
                                <div class="card-content">
                                    <span>¥{{ item.measureTotalAmount }}</span>
                                </div>
                            </div>
                        </div>
    data(){
      return{
               // 接口数据
                measureTypeOptions: [],
                selectIndex: -1,
                checkAll: false,
               // 卡片数据
                cityOptions:[],
               // 已勾选数据存储
                checkedList: [],
       }
    }
     /** 获取数据 */
            getCurrMeasureList() {
                getMeasureList({
                    teamId: this.teamId,
                    projectId: this.projectId,
                    contractSectId: this.contractSectId,
                }).then(res => {
                    this.measureDtOptions = []
                    this.measureDtOptions = res.data
                    if (this.measureDtOptions.length > 0) {
                        this.measureDtOptions.forEach((x, index) => {
                            x.myIndex = index
                            x.active = false
                            x.checked = false
                        })
                    }
                    this.cityOptions = this.measureDtOptions
                })
            },
    /** 卡片详情点击事件 */
            cardClickList(index) {
                this.checkAll = false
                this.checkedList = []
                this.measureDtOptions.forEach(item => {
                    item.checked = false
                    item.active = false
                })
                // 卡片样式
                // this.measureDtOptions[index].active = true
                this.selectIndex = index
            },
            /** 全选*/
            checkAllChange() {
                this.checkAll = !this.checkAll
                if (this.checkAll) {
                    this.checkedList = []
                    this.measureDtOptions.forEach(item => {
                        item.checked = true
                        item.active = true
                        this.checkedList.push(item.id)
                    })
                } else {
                    this.checkedList = []
                    this.measureDtOptions.forEach(item => {
                        item.checked = false
                        item.active = false
                    })
                }
            },
            /** 单选 */
            checkOne(item, index) {
                if (this.checkedList.length > 0 && this.checkedList.includes(item.id)) {
                    this.checkedList.splice(this.checkedList.indexOf(item.id), 1)
                    this.measureDtOptions[index].checked = false
                    this.measureDtOptions[index].active = false
                } else {
                    this.checkedList.push(item.id)
                    this.measureDtOptions[index].checked = true
                    this.measureDtOptions[index].active = true
                }
                this.checkAll = this.checkedList.length === this.cityOptions.length
            }

     css

    .card-contanier{
            margin-top: 10px;
            margin-right: 10px;
            flex: 0 0 47vh;
            /*max-height:440px;*/
            scrollbar-width: none; /* firefox */
            -ms-overflow-style: none; /* IE 10+ */
            overflow-y: scroll;
        }
        .card-body{
            width: 100%;
            height:100px;
            border-radius:10px;
            border:1px solid #cccccc;
            margin-top: 10px;
            padding: 0 12px;
            .card-header{
                width: 100%;
                display: flex;
                height: 45%;
                align-items: center;
                border-bottom: 1px solid #cccccc;
                &--left{
                    flex: 10;
                    justify-content: space-between;
                    align-items: center;
                    display: inline-flex;
                }
                &--middle{
                    flex: 5;
                    text-align: center;
                }
                &--right{
                    flex: 1;z-index: 1100
                }
            }
            .card-content{
                width: 100%;
                height:55%;
                display: flex;
                align-items: center;
            }
        }
    .card-contanier::-webkit-scrollbar {
            display: none; /* Chrome Safari */
        }

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Element UI 的表格中,要实现勾选框的反选功能,你可以使用以下步骤: 1. 首先,确保你的表格列定义了一个名为 `selection` 的类型,这样会在每一行添加一个勾选框列。例如: ```html <el-table-column type="selection"></el-table-column> ``` 2. 在你的 Vue 组件中,定义一个变量来存储选中的行数据。例如: ```javascript data() { return { selectedRows: [] } } ``` 3. 在表格组件中,在 `el-table` 标签上添加 `@selection-change` 事件监听器,并将选中的行数据存储到 `selectedRows` 变量中。例如: ```html <el-table :data="tableData" @selection-change="handleSelectionChange" > </el-table> ``` 4. 在 Vue 组件的方法中,实现 `handleSelectionChange` 方法来更新 `selectedRows` 变量的值。例如: ```javascript methods: { handleSelectionChange(selection) { this.selectedRows = selection }, ``` 5. 最后,在 Vue 组件中,定义一个反选的方法来实现勾选框的反选功能。例如: ```javascript methods: { inverseSelection() { const allRows = this.$refs.table.selectAll() const selectedRows = this.selectedRows const inverseRows = allRows.filter(row => !selectedRows.includes(row)) this.$refs.table.clearSelection() inverseRows.forEach(row => this.$refs.table.toggleRowSelection(row)) }, } ``` 现在,当你调用 `inverseSelection` 方法时,勾选框将会反选当前表格中的行数据。你可以根据自己的需求修改方法的实现,以适应你的业务逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值