antdv-ts + vue3 + setup checked效果制作 全选、部分选择、取消选择

效果图

先上效果图

html代码

<a-form class="flex-col flex-start flex-w color-font-0">
        <a-form-item v-for="item in CheckFilter" :label="item.name">
          <a-checkbox
            :checked="checkedAll(item)"
            :indeterminate="indeterminate(item)"
            @change="(e:any)=>{
              Object.assign(item, { checded: e.target.checked ? item.defstate : [], indeterminate: false })
            }"
            >all</a-checkbox
          >
          <a-checkbox-group :value="item.checded" :options="item.defstate" @change="(checkedList:Array<any>) => {item.checded = checkedList}"
          />
        </a-form-item>
      </a-form>

ts代码

ts-setup

//#region form
interface IChecked { name: string; checded: Array<any>; defstate: Array<any>; }
enum EType { tree = "tree", building = "building", people = "people", animal = "animal", };
enum EBelong { user = "user", public = "public", vip = "vip", };
enum ETypefile { FBX = "FBX", Obj = "Obj", };
enum ESource { Mode = "Mode", UI = "UI", Video = "Video", Radio = "Radio", };
const CheckFilter: UnwrapRef<Array<IChecked>> = reactive([
  { name: "type", checded: [], defstate: Object.keys(EType), },
  { name: "belong", checded: ["user", "public", "vip"], defstate: Object.keys(EBelong), },
  { name: "typefile", checded: ["FBX"], defstate: Object.keys(ETypefile), },
  { name: "typesource", checded: [], defstate: Object.keys(ESource), },
]);
const checkedAll = computed(()=> {
  return (_ele: IChecked) => {
    let [min, max, now] = [0, _ele.defstate.length, _ele.checded.length];
    return max === now;
  }
})
const indeterminate = computed(()=> {
  return (_ele: IChecked) => {
    let [min, max, now] = [0, _ele.defstate.length, _ele.checded.length];
    console.log('indeterminate', min, max, now, !((max == now) && (min == now)));
    return !(max == now) && !(min == now);
  }
})
//#endregion form
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值