|
@@ -23,8 +23,9 @@
|
|
|
:data-source="filterScenes"
|
|
|
:pagination="false"
|
|
|
:row-selection="{
|
|
|
+ getCheckboxProps: getCheckboxProps,
|
|
|
selectedRowKeys: selectedSceneKeys,
|
|
|
- onChange: keys => (selectedSceneKeys = keys as SceneKey[])
|
|
|
+ onChange: changRowKeys
|
|
|
}"
|
|
|
>
|
|
|
<template #bodyCell="{ column, record }">
|
|
@@ -51,6 +52,7 @@ defineOptions<{ name: 'SceneList' }>()
|
|
|
type SceneKey = Scene['num']
|
|
|
|
|
|
const props = defineProps<{
|
|
|
+ maxSelect?: number
|
|
|
selectNums: SceneKey[]
|
|
|
onSave?: (selectIds: SceneKey[]) => void
|
|
|
onCancel: () => void
|
|
@@ -82,7 +84,22 @@ const sceneColumns = [
|
|
|
key: 'time'
|
|
|
}
|
|
|
]
|
|
|
+
|
|
|
+const isOverflow = (keys: SceneKey[]) =>
|
|
|
+ props.maxSelect && keys.length >= props.maxSelect
|
|
|
+
|
|
|
const selectedSceneKeys = ref<SceneKey[]>(props.selectNums)
|
|
|
+const keysOverflow = computed(() => isOverflow(selectedSceneKeys.value))
|
|
|
+const changRowKeys = (keys: any[]) => {
|
|
|
+ if (isOverflow(keys)) {
|
|
|
+ keys = keys.slice(0, props.maxSelect)
|
|
|
+ }
|
|
|
+ selectedSceneKeys.value = keys as SceneKey[]
|
|
|
+}
|
|
|
+const getCheckboxProps = (record: Scene) => ({
|
|
|
+ disabled: keysOverflow.value && !selectedSceneKeys.value.includes(record.num),
|
|
|
+ name: record.num
|
|
|
+})
|
|
|
const saveHandler = () => {
|
|
|
props.onSave && props.onSave(selectedSceneKeys.value)
|
|
|
visible.value = false
|