85 lines
2.7 KiB
Python
85 lines
2.7 KiB
Python
#!/usr/bin/env python
|
|
"""
|
|
菜单生成器命令行工具
|
|
用于快速生成菜单配置和权限同步
|
|
"""
|
|
|
|
import os
|
|
import sys
|
|
import argparse
|
|
import django
|
|
from pathlib import Path
|
|
|
|
# 添加项目路径
|
|
project_root = os.path.dirname(os.path.abspath(__file__))
|
|
sys.path.insert(0, project_root)
|
|
|
|
# 设置Django环境
|
|
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'hertz_server_django.settings')
|
|
django.setup()
|
|
|
|
from hertz_studio_django_utils.code_generator.menu_generator import MenuGenerator
|
|
|
|
|
|
def generate_crud_menu(args):
|
|
"""生成CRUD菜单"""
|
|
generator = MenuGenerator()
|
|
|
|
operations = args.operations.split(',') if args.operations else ['list', 'create', 'update', 'delete']
|
|
|
|
menus = generator.generate_menu_config(
|
|
module_name=args.module_name,
|
|
model_name=args.model_name,
|
|
operations=operations,
|
|
parent_code=args.parent_code,
|
|
menu_prefix=args.prefix,
|
|
sort_order=args.sort_order,
|
|
icon=args.icon
|
|
)
|
|
|
|
# 保存到待同步文件
|
|
pending_file = os.path.join(project_root, 'pending_menus.py')
|
|
with open(pending_file, 'w', encoding='utf-8') as f:
|
|
f.write('# 待同步的菜单配置\n')
|
|
f.write('pending_menus = [\n')
|
|
for menu in menus:
|
|
f.write(' {\n')
|
|
for key, value in menu.items():
|
|
if isinstance(value, str):
|
|
f.write(f" '{key}': '{value}',\n")
|
|
elif value is None:
|
|
f.write(f" '{key}': None,\n")
|
|
else:
|
|
f.write(f" '{key}': {value},\n")
|
|
f.write(' },\n')
|
|
f.write(']\n')
|
|
|
|
print(f"已生成 {len(menus)} 个菜单配置,保存到 pending_menus.py")
|
|
print("请重启服务器以同步菜单到数据库")
|
|
|
|
|
|
def main():
|
|
parser = argparse.ArgumentParser(description='菜单生成器')
|
|
subparsers = parser.add_subparsers(dest='command', help='可用命令')
|
|
|
|
# CRUD菜单生成命令
|
|
crud_parser = subparsers.add_parser('crud', help='生成CRUD菜单')
|
|
crud_parser.add_argument('module_name', help='模块名称(中文)')
|
|
crud_parser.add_argument('model_name', help='模型名称(英文)')
|
|
crud_parser.add_argument('--parent-code', default='system', help='父级菜单代码')
|
|
crud_parser.add_argument('--prefix', default='system', help='菜单前缀')
|
|
crud_parser.add_argument('--operations', help='操作列表(逗号分隔)')
|
|
crud_parser.add_argument('--sort-order', type=int, default=1, help='排序')
|
|
crud_parser.add_argument('--icon', help='图标')
|
|
|
|
args = parser.parse_args()
|
|
|
|
if args.command == 'crud':
|
|
generate_crud_menu(args)
|
|
else:
|
|
parser.print_help()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|