#!/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
# 查找