154 lines
4.6 KiB
Python
154 lines
4.6 KiB
Python
|
|
"""
|
|||
|
|
新建项目对话框
|
|||
|
|
"""
|
|||
|
|
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
|