dootask/resources/assets/js/pages/manage/components/ProjectTableGroupDropdown.vue
kuaifan ffbb45708d feat(project): 支持表格分组配置与悬停筛选菜单
新增到期、排期、逾期与未排期分组,按项目缓存显示选择并至少保留一项。

统一分组复选下拉菜单,接入 Cascader 桌面悬停展开,增加勾选后的滚动定位校正。

升级 view-design-hi 至 4.7.0-81,同步多语言、知识库和回归测试。
2026-09-07 12:08:52 +00:00

57 lines
1.8 KiB
Vue

<template>
<Dropdown
:visible="open"
@on-visible-change="open = $event"
:trigger="touch ? 'click' : 'hover'"
:placement="placement"
transfer
transfer-class-name="project-table-groups-dropdown">
<div
@keydown.enter.prevent="open = true"
@keydown.space.prevent="open = true"
@keydown.esc="open = false">
<slot/>
</div>
<div slot="list" class="project-table-group-options" @click.stop @keydown.esc="open = false">
<Checkbox
v-for="group in groups"
:key="group.key"
class="ivu-dropdown-item"
:class="{'ivu-dropdown-item-disabled': selected.length === 1 && selected.includes(group.key)}"
:value="selected.includes(group.key)"
:disabled="selected.length === 1 && selected.includes(group.key)"
:title="selected.length === 1 && selected.includes(group.key) ? $L('至少保留一项') : ''"
@on-change="$emit('change', group, $event)">
{{$L(group.title)}}
</Checkbox>
</div>
</Dropdown>
</template>
<script>
import {projectTableGroups} from "../../../utils/projectTableGroups";
export default {
name: 'ProjectTableGroupDropdown',
props: {
value: {type: Boolean, default: false},
touch: {type: Boolean, default: false},
selected: {type: Array, required: true},
placement: {type: String, default: 'bottom-start'},
},
computed: {
groups() {
return projectTableGroups;
},
open: {
get() {
return this.value;
},
set(value) {
this.$emit('input', value);
},
},
},
};
</script>