AIDeveloper-PC/gui_ai_developer/dialogs/new_project_dialog.py

154 lines
4.6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""
新建项目对话框
"""
from PyQt5.QtWidgets import (
QDialog, QVBoxLayout, QHBoxLayout, QLabel,
QLineEdit, QTextEdit, QPushButton, QMessageBox
)
from PyQt5.QtCore import Qt
from gui_ai_developer.models import Project, Requirement, Module, Document
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