#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ 批量为表格页面添加右键菜单和悬浮提示功能 """ import re import os def add_imports(content): """添加必要的导入""" # 检查是否已经导入 if 'useTableContextMenu' in content: return content # 找到 useAuth 导入位置 import_pattern = r"(import\s+{\s+useAuth\s+}\s+from\s+'@/composables/useAuth')" if re.search(import_pattern, content): # 在 useAuth 后面添加 useTableContextMenu content = re.sub( import_pattern, r"\1\n import { useTableContextMenu } from '@/composables/useTableContextMenu'", content ) # 添加 TableContextMenuHint 组件导入 arttable_pattern = r"(import\s+ArtButtonTable\s+from\s+'@/components/core/forms/ArtButtonTable\.vue')" if re.search(arttable_pattern, content): content = re.sub( arttable_pattern, r"\1\n import TableContextMenuHint from '@/components/core/others/TableContextMenuHint.vue'", content ) # 如果没有 ArtMenuRight,添加它 if 'ArtMenuRight' not in content: content = re.sub( arttable_pattern, r"\1\n import ArtMenuRight from '@/components/core/others/ArtMenuRight.vue'\n import type { MenuItemType } from '@/components/core/others/ArtMenuRight.vue'", content ) return content def add_context_menu_usage(content): """添加 useTableContextMenu 的使用""" if 'useTableContextMenu()' in content: return content # 查找 const currentRow = ref 或类似的变量声明 pattern = r"(const\s+currentRow\s*=\s*ref[^\n]+)" usage_code = """ // 使用表格右键菜单功能 const { showContextMenuHint, hintPosition, getRowClassName, handleCellMouseEnter, handleCellMouseLeave } = useTableContextMenu()""" if re.search(pattern, content): content = re.sub(pattern, r"\1" + usage_code, content) return content def add_table_events(content): """为 ArtTable 添加事件监听""" # 查找 ArtTable 标签 table_pattern = r"(]*?)(\s*@row-contextmenu=\"[^\"]+\")?([^>]*>)" if '@cell-mouse-enter' in content: return content # 添加必要的属性和事件 def replace_table(match): prefix = match.group(1) existing_contextmenu = match.group(2) or '' suffix = match.group(3) # 如果没有 row-class-name,添加它 if ':row-class-name' not in prefix and 'row-class-name' not in prefix: prefix += '\n :row-class-name="getRowClassName"' # 如果没有 row-contextmenu,添加它 if not existing_contextmenu and '@row-contextmenu' not in prefix: existing_contextmenu = '\n @row-contextmenu="handleRowContextMenu"' # 添加 cell mouse 事件 cell_events = '\n @cell-mouse-enter="handleCellMouseEnter"\n @cell-mouse-leave="handleCellMouseLeave"' return prefix + existing_contextmenu + cell_events + suffix content = re.sub(table_pattern, replace_table, content, flags=re.DOTALL) return content def add_hint_component(content): """添加悬浮提示组件""" if 'TableContextMenuHint' in content and ':visible="showContextMenuHint"' in content: return content # 在 后添加提示组件 table_end_pattern = r"()" hint_component = r"""\1 """ content = re.sub(table_end_pattern, hint_component, content) return content def add_context_menu_component(content): """添加右键菜单组件""" if 'ArtMenuRight' in content and 'contextMenuRef' in content: return content # 在提示组件后添加右键菜单 hint_pattern = r"(]+/>)" menu_component = r"""\1 """ content = re.sub(hint_pattern, menu_component, content) return content def add_css_styles(content): """添加 CSS 样式""" if 'table-row-with-context-menu' in content: return content # 查找