checkbox 多选框
Siona
checkbox 多选框
1. 多选框组 CheckboxGroup
<template>
<div>
<a-table :columns="columns"
:data-source="menuPermissionData"
:bordered="true"
>
<template #bodyCell="{column, record }">
<template v-if="column.dataIndex === 'interface' && record.interface">
<a-checkbox-group v-model:value="record.checkedActionList" :options="record.interface" />
</template>
</template>
</a-table>
</div>
</template>
<script setup>
import PermissionApi from '@/api/system/Permission'
import { onMounted, ref } from 'vue'
import { useRoute } from 'vue-router'
const route = useRoute()
const roleId = route.query.id
const systemData = ref([])
const columns = [
{
title: '菜单',
dataIndex: 'menu',
key: 'menu'
},
{
title: '接口',
key: 'interface',
dataIndex: 'interface'
}
]
const menuPermissionData = ref([])
const getSubSystemList = async () => {
const params = {
roleId: roleId
}
const { data: result } = await PermissionApi.getSubSystemList(params)
if (result.status) {
const subSystemList = result.data.subSystemList
systemData.value = subSystemList.map(item => {
return {
id: item.id,
label: item.menuName
}
})
// 默认显示第一个系统的菜单
if (subSystemList[0] && subSystemList[0].menuActionList) {
menuPermissionData.value = subSystemList[0].menuActionList.map(item => {
// 注意,在处理 item.sysActionList 时添加一个检查,如果 item.sysActionList 为 null,则将 actionList 设为一个空数组 []。
// 可以通过逻辑运算符 || 来简化这一检查和赋值的过程
const checkedActionList = []
const actionList = (item.sysActionList || []).map(action => {
// 封装 checkedActionList
if (!action.Checked) {
checkedActionList.push(action.label)
}
return {
label: action.label,
value: action.label
}
})
return {
id: item.id,
key: item.id,
menu: item.menuName,
interface: actionList
}
})
}
} else {
this.$message.error(result.msg)
}
}
/* 监听多选框改变 */
watch(() => menuPermissionData.value, value => {
console.log(333, value)
}, { deep: true }) // 深度监听
</script>
深度监听:
- 使用 watch 监听 menuPermissionData.value 的变化,并添加
{ deep: true }
选项来进行深度监听。这将确保监听到对象和数组内部的变化。
实际接口中数据格式,需要处理一下,适用于 Antd 的 a-checkbox-group 组件数据渲染。
[
{
"id": 2,
"actionUrl": "",
"actionMethod": "",
"createTime": null,
"updateTime": null,
"label": "系统报名列表",
"menuId": 0,
"Checked": false
},
{
"id": 21,
"actionUrl": "",
"actionMethod": "",
"createTime": null,
"updateTime": null,
"label": "系统报名删除",
"menuId": 0,
"Checked": false
}
]