import { h } from 'vue' import { ElTag } from 'element-plus' import ArtSvgIcon from '@/components/core/base/art-svg-icon/index.vue' import ArtButtonTable from '@/components/core/forms/art-button-table/index.vue' import { getMenuDisplayIcon, getMenuDisplayTitle, getMenuStatusMeta, getMenuTypeTag, getMenuTypeText } from './menuPage.helpers' export function createMenuTableColumns({ titleFormatter, handleAddAuth, handleEditAuth, handleDeleteAuth, handleEditMenu, handleDeleteMenu }) { return [ { prop: 'meta.title', label: '菜单名称', minWidth: 180, formatter: (row) => getMenuDisplayTitle(row, titleFormatter) }, { prop: 'meta.icon', label: '图标预览', width: 96, align: 'center', formatter: (row) => { const icon = getMenuDisplayIcon(row) if (!icon) return h('span', { class: 'text-g-400' }, '-') return h( 'div', { class: 'mx-auto flex h-8 w-8 items-center justify-center rounded-md border border-[var(--art-border-color)] bg-[var(--art-main-bg-color)]' }, [h(ArtSvgIcon, { icon, class: 'text-base text-g-700' })] ) } }, { prop: 'type', label: '菜单类型', width: 110, formatter: (row) => h(ElTag, { type: getMenuTypeTag(row), effect: 'light' }, () => getMenuTypeText(row)) }, { prop: 'route', label: '路由', minWidth: 180, formatter: (row) => { if (row.meta?.isAuthButton) return '' return row.route || '' } }, { prop: 'authority', label: '权限标识', minWidth: 180, formatter: (row) => { if (row.meta?.isAuthButton) { return row.authority || row.meta?.authMark || '' } if (!row.meta?.authList?.length) return row.authority || '' return `${row.meta.authList.length} 个权限标识` } }, { prop: 'sort', label: '排序', width: 90 }, { prop: 'status', label: '状态', width: 100, formatter: (row) => { const statusMeta = getMenuStatusMeta(row.status) return h(ElTag, { type: statusMeta.type, effect: 'light' }, () => statusMeta.text) } }, { prop: 'memo', label: '备注', minWidth: 180, showOverflowTooltip: true, formatter: (row) => row.memo || '-' }, { prop: 'operation', label: '操作', width: 180, align: 'right', formatter: (row) => { const buttonStyle = { class: 'flex justify-end' } if (row.meta?.isAuthButton) { return h('div', buttonStyle, [ h(ArtButtonTable, { type: 'edit', onClick: () => handleEditAuth(row) }), h(ArtButtonTable, { type: 'delete', onClick: () => handleDeleteAuth(row) }) ]) } return h('div', buttonStyle, [ h(ArtButtonTable, { type: 'add', onClick: () => handleAddAuth(row), title: '新增权限' }), h(ArtButtonTable, { type: 'edit', onClick: () => handleEditMenu(row) }), h(ArtButtonTable, { type: 'delete', onClick: () => handleDeleteMenu(row) }) ]) } } ] }