Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 8 additions & 2 deletions ui/src/components/COMPONENT_README.md
Original file line number Diff line number Diff line change
Expand Up @@ -198,6 +198,9 @@ Drawer 没有 `MkDialog` 的外壳挂载控制;需要按需挂载时,由业
### MkDropdown、MkDropdownMenu、MkDropdownItem

`MkDropdown` 默认 `persistent: false`,透传 Dropdown 属性、事件,公开 `handleOpen()`、`handleClose()`。
开启 `persistent` 时仍延迟到首次展开才挂载菜单内容,之后收起保留 Action 及其业务浮层,直到所属
组件卸载;未打开过的菜单不提前挂载。状态由组件内部维护,外部 `visible-change` 事件继续正常触发。
已打开过的多个菜单会分别保留;Dialog、Drawer 仍应点击时挂载并在 `closed` 后卸载。
`dropdown` 插槽内组合 `MkDropdownMenu`、`MkDropdownItem`,不在业务中重复组装底层组件。
菜单项通过 `icon` Prop 传 Element Plus 图标,或使用 `icon` 插槽;`selectable` 预留勾选位,
`selected` 控制选中。触发器遵循单根节点规则。
Expand Down Expand Up @@ -446,7 +449,9 @@ Dialog、Drawer、Popover、嵌套区域等其他大、小表格均禁止开启
表格操作列需要 More 菜单时使用 `MkTableMoreDropdown`。组件统一提供点击型、右下定位的 More
按钮以及 `MkDropdownMenu`,默认插槽中直接放置 `MkDropdownItem`;插槽为空,或其中的条件菜单项
均未渲染时,不显示 More 触发器。其他 Dropdown 属性和事件通过 `$attrs` 传入,菜单容器样式通过
`menu-class` 设置。
`menu-class` 设置。默认启用 `persistent`,复用 `MkDropdown` 的首次展开后保留机制,避免收起菜单
销毁 Action 中打开的 Dialog 或 Drawer;无需页面自行监听 `visible-change`。纯操作菜单可显式
传入 `:persistent="false"`,收起后释放菜单内容。

包含 `type="selection"` 的选择列时,选择数据会显示页面底部操作栏。批量按钮放入
`footer-batch-actions` 插槽,当前选择通过 `selection-change` 返回。组件暴露 `tableRef` 和
Expand Down Expand Up @@ -476,7 +481,8 @@ Dialog、Drawer、Popover、嵌套区域等其他大、小表格均禁止开启
`footer` 提供常驻内容及 `Action`、`ActionDropdown`:前者是悬浮/焦点操作容器,后者包裹 More 菜单,
内部直接放 `MkDropdownItem`,空菜单隐藏入口。仅需要开关或按钮时使用 `Action` 即可。
无有效 `footer` 内容时不渲染底栏,默认内容区不额外保留底部间距;有底栏时保留 16px 分隔。
`ActionDropdown` 固定 `persistent`,其管理的业务浮层应打开时挂载、`closed` 后卸载。
`ActionDropdown` 固定 `persistent`,复用 `MkDropdown` 的首次展开后保留机制,不在卡片列表初始化时
提前挂载菜单内容;其管理的业务浮层应打开时挂载、`closed` 后卸载。

`selectable` 开启卡片选择,`selected` Prop 控制选中,`selected` 事件返回新状态。
点击卡片或复选框切换,`Action` 在选择模式下不渲染;页面负责选择集合、批量操作和特殊内容显隐。
Expand Down
9 changes: 8 additions & 1 deletion ui/src/components/global/mk-dropdown/index.vue
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,12 @@ withDefaults(defineProps<{ popperOptions?: Partial<Options>; persistent?: boolea
})

const dropdownRef = ref<DropdownInstance>()
// 保留模式也延迟到首次展开,避免列表初始化时挂载每一行的菜单及业务浮层。
const hasOpened = ref(false)

function handleVisibleChange(visible: boolean) {
if (visible) hasOpened.value = true
}

const slots = defineSlots<{
/** 下拉触发器,必须只渲染一个有效根节点 */
Expand Down Expand Up @@ -54,8 +60,9 @@ defineExpose({ handleOpen, handleClose })
v-if="!hideWhenEmpty || hasDropdownContent(slots.dropdown?.())"
class="mk-dropdown"
ref="dropdownRef"
:persistent="persistent"
:persistent="persistent && hasOpened"
v-bind="$attrs"
@visible-change="handleVisibleChange"
>
<slot />
<template #dropdown>
Expand Down
11 changes: 9 additions & 2 deletions ui/src/components/global/mk-table/MkTableMoreDropdown.vue
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import { hasRenderableSlotContent } from '@/utils/vnode'

defineOptions({ name: 'MkTableMoreDropdown', inheritAttrs: false })

defineProps<{ menuClass?: string }>()
withDefaults(defineProps<{ menuClass?: string; persistent?: boolean }>(), { persistent: true })

defineSlots<{
/** 表格 More 菜单项,仅使用 MkDropdownItem */
Expand All @@ -16,7 +16,14 @@ const hasDropdownItems = computed(() => hasRenderableSlotContent(slots.default?.
</script>

<template>
<MkDropdown v-if="hasDropdownItems" class="mk-table-more-dropdown [button+&]:ml-1" trigger="click" placement="bottom-end" v-bind="$attrs">
<MkDropdown
v-if="hasDropdownItems"
class="mk-table-more-dropdown [button+&]:ml-1"
trigger="click"
placement="bottom-end"
:persistent="persistent"
v-bind="$attrs"
>
<el-button type="primary" text @click.stop>
<MkIcon name="icon_more_outlined" />
</el-button>
Expand Down
6 changes: 6 additions & 0 deletions ui/src/views/VIEW_README.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,10 @@
`<!-- 修改用户密码 -->`、`<!-- 更多 -->`、`<!-- 删除 -->`、`<!-- 批量设置角色 -->`。
备注紧邻对应按钮、菜单项或封装后的入口组件;批量操作明确标注“批量”,名称按实际业务职责
填写。今后新增或调整同类页面时统一补齐,不因操作已封装为组件或按钮已有文案而省略。
- 下拉菜单中包含自带 Dialog 或 Drawer 的 Action 时,使用公共组件的延迟保留机制:
`MkTableMoreDropdown` 和资源卡片菜单默认启用,直接使用 `MkDropdown` 时传入 `persistent`。
公共组件在首次展开后保留菜单,页面不自行维护菜单挂载状态或通过 `visible-change` 控制保留。
仅调用页面方法、且浮层挂载在菜单外的操作不需要保留菜单。
- Dialog 生命周期遵循 `COMPONENT_README.md` 的挂载方式规则:常驻实例在 `closed` 清理,
关闭后卸载的实例依赖重新初始化,`open()` 不重复清空,只处理业务回填和查询。
- 页面模板的事件绑定不直接调用 Dialog、Drawer 等组件实例暴露的 `open()` 方法。应在对应业务
Expand Down Expand Up @@ -701,6 +705,8 @@ Workspace API 内部通过 `getWorkspaceId()` 读取当前路由工作空间。
`KNOWLEDGE_TYPE_KEY` 判断,不从详情或文档数据读取类型,也不通过 `knowledgeType` Prop 传递。
Web 来源地址与选择器仅在单项设置中编辑,批量设置不展示这两个字段。
文档操作统一放在 `document/action-dropdown/`,通过该目录 `index.ts` 导出,页面显式组合各 Action。
文档页行操作使用 `MkTableMoreDropdown` 默认的延迟保留机制,批量操作菜单显式设置 `persistent`;
首次展开才挂载菜单内容,收起后保留 Action 及其弹窗,生命周期统一由公共组件管理。
文档状态展示、筛选配置和任务运行状态判断统一维护在 `document/status.ts`。
文档任务是否排队或执行中通过其中的 `isDocumentTaskRunning(document, taskType)` 判断,
页面及 Action 不重复解析状态字符串;文档或任务状态缺失时返回 `false`。
Expand Down
4 changes: 2 additions & 2 deletions ui/src/views/knowledge-detail/document/index.vue
Original file line number Diff line number Diff line change
Expand Up @@ -271,7 +271,7 @@ onBeforeUnmount(() => {
<MkQuickCreate ref="quickCreateRef" text="快速创建空白文档" placeholder="请输入文档名称" @create="handleCreateDocument" />
</template>

<el-table-column v-if="!isWorkspaceSharedResource()" type="selection" width="40" fixed="left" reserve-selection />
<el-table-column v-if="!isWorkspaceSharedResource()" type="selection" width="40" reserve-selection />

<el-table-column prop="name" label="文档名称" min-width="220" show-overflow-tooltip />

Expand Down Expand Up @@ -502,7 +502,7 @@ onBeforeUnmount(() => {
<el-button>添加标签</el-button>

<!-- 更多批量操作 -->
<MkDropdown class="ml-3" trigger="click" placement="bottom-end" hide-when-empty>
<MkDropdown class="ml-3" trigger="click" placement="bottom-end" hide-when-empty persistent>
<!-- 展开更多批量操作 -->
<el-button plain type="primary" class="min-w-0! w-8!">
<MkIcon name="icon_more_outlined" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,7 @@ onMounted(() => {
:max-table-height="210"
@current-change="loadApplicationPage"
@size-change="loadApplicationPage"
resizable
>
<el-table-column prop="name" label="名称" min-width="200" show-overflow-tooltip>
<template #default="{ row }">
Expand Down
Loading