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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?