(component): 新增 table 组件 v-model:expandKeys 属性, 意为当前展开行

This commit is contained in:
就眠儀式
2022-08-04 16:28:06 +08:00
parent 53d270ffdc
commit a61c6d0bef
5 changed files with 60 additions and 18 deletions

View File

@@ -127,13 +127,7 @@ const isDisabled = computed(() => {
><slot>{{ label }}</slot></span
>
<lay-icon
:type="
props.isIndeterminate && isChecked
? 'layui-icon-subtraction'
: isChecked
? 'layui-icon-ok'
: ''
"
:type="props.isIndeterminate && isChecked ? 'layui-icon-subtraction' : isChecked ? 'layui-icon-ok' : ''"
></lay-icon>
</div>
</span>

View File

@@ -33,6 +33,7 @@ export interface LayTableRowProps {
data: any;
spanMethod: Function;
defaultExpandAll: boolean;
expandKeys: Recordable[];
}
const slot = useSlots();
@@ -40,6 +41,7 @@ const emit = defineEmits([
"row",
"row-double",
"row-contextmenu",
"update:expandKeys",
"update:selectedKeys",
"update:selectedKey",
]);
@@ -51,6 +53,17 @@ const props = withDefaults(defineProps<LayTableRowProps>(), {
cellClassName: "",
});
const tableExpandAll = ref(props.defaultExpandAll);
const tableExpandKeys: WritableComputedRef<Recordable[]> = computed({
get() {
return [...props.expandKeys];
},
set(val) {
emit("update:expandKeys", val);
},
});
const tableSelectedKeys: WritableComputedRef<Recordable[]> = computed({
get() {
return [...props.selectedKeys];
@@ -69,7 +82,22 @@ const tableSelectedKey: WritableComputedRef<Recordable[]> = computed({
},
});
const isExpand = ref(props.defaultExpandAll);
const isExpand: WritableComputedRef<any> = computed({
get() {
return tableExpandAll.value ? true : tableExpandKeys.value.includes(props.data[props.id]);
},
set(val) {
let newTableExpandKeys = [...tableExpandKeys.value]
if (!val) {
newTableExpandKeys.splice(newTableExpandKeys.indexOf(props.data[props.id]), 1);
} else {
newTableExpandKeys.push(props.data[props.id]);
}
tableExpandAll.value = false;
tableExpandKeys.value = newTableExpandKeys;
},
});
const slotsData = ref<string[]>([]);
props.columns.map((value: any) => {
@@ -535,6 +563,7 @@ const isAutoShow = (
@row="rowClick"
@row-double="rowDoubleClick"
@row-contextmenu="rowContextmenu"
v-model:expandKeys="tableExpandKeys"
v-model:selectedKeys="tableSelectedKeys"
v-model:selectedKey="tableSelectedKey"
>

View File

@@ -47,6 +47,7 @@ export interface LayTableProps {
cellStyle?: string | Function;
spanMethod?: Function;
defaultExpandAll?: boolean;
expandKeys?: Recordable[];
}
const props = withDefaults(defineProps<LayTableProps>(), {
@@ -65,12 +66,14 @@ const props = withDefaults(defineProps<LayTableProps>(), {
cellStyle: "",
spanMethod: () => {},
defaultExpandAll: false,
expandKeys: () => []
});
const tableId = uuidv4();
const emit = defineEmits([
"change",
"update:expandKeys",
"update:selectedKeys",
"update:selectedKey",
"row-contextmenu",
@@ -112,6 +115,15 @@ const tableSelectedKey: WritableComputedRef<Recordable[]> = computed({
},
});
const tableExpandKeys: WritableComputedRef<Recordable[]> = computed({
get() {
return [...props.expandKeys];
},
set(val) {
emit("update:expandKeys", val);
},
});
watch(
() => props.dataSource,
() => {
@@ -584,10 +596,11 @@ const renderTotalRowCell = (column: any) => {
:rowStyle="rowStyle"
:rowClassName="rowClassName"
:spanMethod="spanMethod"
:defaultExpandAll="defaultExpandAll"
:defaultExpandAll="defaultExpandAll"
@row="rowClick"
@row-double="rowDoubleClick"
@row-contextmenu="rowContextmenu"
v-model:expandKeys="tableExpandKeys"
v-model:selectedKeys="tableSelectedKeys"
v-model:selectedKey="tableSelectedKey"
>