AIDeveloper-PC/gui_ai_developer/dialogs/new_project_dialog.py

154 lines
4.6 KiB
Python
Raw Permalink Normal View History

2026-01-31 09:32:00 +00:00
"""
新建项目对话框
"""
from PyQt5.QtWidgets import (
QDialog, QVBoxLayout, QHBoxLayout, QLabel,
QLineEdit, QTextEdit, QPushButton, QMessageBox
)
from PyQt5.QtCore import Qt
2026-03-06 13:50:01 +00:00
from gui_ai_developer.models import Project, Requirement, Module, Document
2026-01-31 09:32:00 +00:00
class NewProjectDialog(QDialog):
"""新建项目对话框"""
def __init__(self, parent=None):
"""
初始化对话框
Args:
parent: 父窗口
"""
super().__init__(parent)
self.project = None
self._setup_ui()
def _setup_ui(self):
"""设置UI"""
self.setWindowTitle("新建项目")
self.setModal(True)
self.resize(700, 500)
layout = QVBoxLayout(self)
layout.setSpacing(15)
# 标题
title_label = QLabel("<h2>📁 新建项目</h2>")
layout.addWidget(title_label)
# 项目名称
layout.addWidget(QLabel("项目名称 *"))
self.name_edit = QLineEdit()
self.name_edit.setPlaceholderText("请输入项目名称")
layout.addWidget(self.name_edit)
# 项目描述
layout.addWidget(QLabel("项目描述"))
self.desc_edit = QTextEdit()
self.desc_edit.setPlaceholderText("请输入项目描述(可选)")
self.desc_edit.setMaximumHeight(80)
layout.addWidget(self.desc_edit)
# 需求描述
layout.addWidget(QLabel("需求描述 *"))
self.req_edit = QTextEdit()
self.req_edit.setPlaceholderText(
"请输入项目需求...\n\n"
"建议格式:\n"
"1. 功能描述\n"
"2. 性能要求\n"
"3. 安全要求"
)
layout.addWidget(self.req_edit)
# 按钮区域
button_layout = QHBoxLayout()
button_layout.addStretch()
cancel_btn = QPushButton("取消")
cancel_btn.setStyleSheet("""
QPushButton {
background: rgba(51, 65, 85, 0.5);
border: 1px solid rgba(59, 130, 246, 0.2);
}
""")
cancel_btn.clicked.connect(self.reject)
button_layout.addWidget(cancel_btn)
create_btn = QPushButton("创建项目")
create_btn.clicked.connect(self._create_project)
button_layout.addWidget(create_btn)
layout.addLayout(button_layout)
def _create_project(self):
"""创建项目"""
# 验证输入
name = self.name_edit.text().strip()
if not name:
QMessageBox.warning(self, "提示", "请输入项目名称")
return
req_text = self.req_edit.toPlainText().strip()
if not req_text:
QMessageBox.warning(self, "提示", "请输入需求描述")
return
# 创建项目对象
self.project = Project(
name=name,
description=self.desc_edit.toPlainText().strip()
)
self.project.original_requirement = req_text
# 模拟生成需求
self._generate_requirements()
# 模拟生成模块
self._generate_modules()
# 模拟生成文档
self._generate_documents()
self.accept()
def _generate_requirements(self):
"""生成需求模拟AI分析"""
requirements = [
Requirement("REQ-001", "核心功能", "从需求文本提取的核心功能", 90, ""),
Requirement("REQ-002", "数据管理", "数据的增删改查功能", 85, ""),
Requirement("REQ-003", "用户管理", "用户认证和权限管理", 88, "")
]
for req in requirements:
self.project.add_requirement(req)
def _generate_modules(self):
"""生成模块模拟AI生成"""
modules = [
Module("核心业务模块", "实现主要业务逻辑", ["REQ-001"]),
Module("数据管理模块", "数据存储和查询", ["REQ-002"]),
Module("用户认证模块", "用户登录和权限控制", ["REQ-003"])
]
for module in modules:
module.add_tech("Spring Boot")
module.add_tech("MySQL")
module.add_tech("Redis")
self.project.add_module(module)
def _generate_documents(self):
"""生成文档"""
documents = [
Document("需求规格说明书.docx", "SRS", "1.5 MB"),
Document("功能设计文档.docx", "功能设计", "1.2 MB"),
Document("接口文档.pdf", "API", "800 KB")
]
for doc in documents:
self.project.add_document(doc)
def get_project(self):
"""获取创建的项目"""
return self.project