修复bug
All checks were successful
构建并部署前端到测试环境 / build-and-deploy (push) Successful in 11m14s

This commit is contained in:
sexygoat
2026-04-08 10:19:25 +08:00
parent ff087abd44
commit b510b4539f
55 changed files with 2274 additions and 2612 deletions

View File

@@ -31,27 +31,12 @@
:default-expand-all="false"
:marginTop="10"
:show-pagination="false"
:row-class-name="getRowClassName"
@row-contextmenu="handleRowContextMenu"
@cell-mouse-enter="handleCellMouseEnter"
@cell-mouse-leave="handleCellMouseLeave"
>
<template #default>
<ElTableColumn v-for="col in columns" :key="col.prop || col.type" v-bind="col" />
</template>
</ArtTable>
<!-- 鼠标悬浮提示 -->
<TableContextMenuHint :visible="showContextMenuHint" :position="hintPosition" />
<!-- 右键菜单 -->
<ArtMenuRight
ref="contextMenuRef"
:menu-items="contextMenuItems"
:menu-width="120"
@select="handleContextMenuSelect"
/>
<!-- 新增/编辑对话框 -->
<ElDialog
v-model="dialogVisible"
@@ -134,6 +119,7 @@
ElTag,
ElRadio,
ElRadioGroup,
ElButton,
type FormInstance,
type FormRules
} from 'element-plus'
@@ -142,11 +128,6 @@
import type { SearchFormItem } from '@/types'
import { useCheckedColumns } from '@/composables/useCheckedColumns'
import { useAuth } from '@/composables/useAuth'
import { useTableContextMenu } from '@/composables/useTableContextMenu'
import ArtButtonTable from '@/components/core/forms/ArtButtonTable.vue'
import ArtMenuRight from '@/components/core/others/ArtMenuRight.vue'
import TableContextMenuHint from '@/components/core/others/TableContextMenuHint.vue'
import type { MenuItemType } from '@/components/core/others/ArtMenuRight.vue'
import {
PermissionType,
PERMISSION_TYPE_OPTIONS,
@@ -222,19 +203,8 @@
const tableRef = ref()
const dialogVisible = ref(false)
const dialogType = ref('add')
const currentRow = ref<PermissionTreeNode | null>(null)
const currentPermissionId = ref<number>(0)
const submitLoading = ref(false)
const contextMenuRef = ref<InstanceType<typeof ArtMenuRight>>()
// 使用表格右键菜单功能
const {
showContextMenuHint,
hintPosition,
getRowClassName,
handleCellMouseEnter,
handleCellMouseLeave
} = useTableContextMenu()
// 表单引用和数据
const formRef = ref<FormInstance>()
@@ -342,6 +312,45 @@
prop: 'sort',
label: '排序',
width: 80
},
{
prop: 'actions',
label: '操作',
width: 160,
fixed: 'right',
formatter: (row: PermissionTreeNode) => {
const buttons: any[] = []
if (hasAuth('permission:edit')) {
buttons.push(
h(
ElButton,
{
type: 'primary',
link: true,
onClick: () => showDialog('edit', row)
},
() => '编辑'
)
)
}
if (hasAuth('permission:delete')) {
buttons.push(
h(
ElButton,
{
type: 'danger',
link: true,
onClick: () => deletePermission(row)
},
() => '删除'
)
)
}
return h('div', { style: 'display: flex; gap: 8px;' }, buttons)
}
}
])
@@ -444,7 +453,6 @@
}
if (type === 'edit' && row) {
currentRow.value = row
currentPermissionId.value = row.id
// 从API获取完整的权限数据包含parent_id
try {
@@ -555,47 +563,6 @@
onMounted(() => {
getPermissionList()
})
// 右键菜单项配置
const contextMenuItems = computed((): MenuItemType[] => {
const items: MenuItemType[] = []
if (hasAuth('permission:edit')) {
items.push({ key: 'edit', label: '编辑' })
}
if (hasAuth('permission:delete')) {
items.push({ key: 'delete', label: '删除' })
}
return items
})
// 处理表格行右键菜单
const handleRowContextMenu = (row: PermissionTreeNode, column: any, event: MouseEvent) => {
event.preventDefault()
event.stopPropagation()
currentRow.value = row
contextMenuRef.value?.show(event)
}
// 处理右键菜单选择
const handleContextMenuSelect = (item: MenuItemType) => {
if (!currentRow.value) return
switch (item.key) {
case 'edit':
showDialog('edit', currentRow.value)
break
case 'delete':
deletePermission(currentRow.value)
break
}
}
</script>
<style scoped lang="scss">
:deep(.el-table__row.table-row-with-context-menu) {
cursor: pointer;
}
</style>
<style scoped lang="scss"></style>