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
|