feat(app_detail_window): 新增应用详情窗口独立组件

refactor(leonapp_gui): 重构应用详情展示逻辑,直接创建窗口实例
fix(version_control.php): 修复文件路径处理和删除逻辑问题
feat(upload_app.php): 添加Markdown预览功能
style(dashboard.php): 移除冗余的padding样式
chore: 更新favicon和清理pyc缓存文件
This commit is contained in:
2025-09-21 17:02:11 +08:00
parent 8ee686b80f
commit dd85397efa
12 changed files with 649 additions and 2206 deletions

View File

@@ -0,0 +1,142 @@
from PyQt5.QtWidgets import (QMainWindow, QWidget, QVBoxLayout, QHBoxLayout, QLabel,
QPushButton, QTextEdit, QGroupBox, QFormLayout, QScrollArea)
from PyQt5.QtCore import Qt
from qfluentwidgets import (InfoBar, InfoBarPosition, TitleLabel, SubtitleLabel,
PrimaryPushButton, PushButton)
import json
class AppDetailWindow(QMainWindow):
def __init__(self, api_client, app_id, parent=None):
super().__init__(parent)
self.api_client = api_client
self.app_id = app_id
self.parent_window = parent
# 设置窗口属性
self.setWindowTitle("应用详情")
self.resize(800, 600)
# 创建中心部件
self.central_widget = QWidget()
self.setCentralWidget(self.central_widget)
# 创建主布局
self.main_layout = QVBoxLayout(self.central_widget)
# 创建标题区域
self.title_layout = QHBoxLayout()
self.title_label = TitleLabel("应用详情")
self.close_button = PushButton("关闭")
self.close_button.clicked.connect(self.close)
self.title_layout.addWidget(self.title_label)
self.title_layout.addStretch()
self.title_layout.addWidget(self.close_button)
# 创建滚动区域
self.scroll_area = QScrollArea()
self.scroll_area.setWidgetResizable(True)
self.scroll_content = QWidget()
self.scroll_layout = QVBoxLayout(self.scroll_content)
# 添加滚动区域到主布局
self.scroll_area.setWidget(self.scroll_content)
# 将标题区域和滚动区域添加到主布局
self.main_layout.addLayout(self.title_layout)
self.main_layout.addWidget(self.scroll_area)
# 加载应用详情
self.load_app_detail()
def load_app_detail(self):
"""加载应用详情"""
try:
# 这里应该调用API获取应用详情
# 暂时使用模拟数据
app_data = {
"id": self.app_id,
"name": "示例应用",
"description": "这是一个示例应用,用于展示应用详情页面",
"developer_id": "1",
"developer_name": "示例开发者",
"status": "approved",
"version": "1.0.0",
"created_at": "2023-01-01 10:00:00"
}
# 清空滚动区域
for i in reversed(range(self.scroll_layout.count())):
widget = self.scroll_layout.itemAt(i).widget()
if widget is not None:
widget.setParent(None)
widget.deleteLater()
# 显示应用基本信息
self.display_app_info(app_data)
# 显示应用描述
self.display_app_description(app_data)
# 显示操作按钮
self.display_action_buttons()
except Exception as e:
InfoBar.error(
title="错误",
content=f"加载应用详情失败: {str(e)}",
orient=Qt.Horizontal,
isClosable=True,
position=InfoBarPosition.TOP,
duration=3000,
parent=self
)
def display_app_info(self, app_data):
"""显示应用基本信息"""
info_group = QGroupBox("基本信息")
info_layout = QFormLayout()
# 设置表单布局标签对齐
info_layout.setLabelAlignment(Qt.AlignRight | Qt.AlignVCenter)
# 添加基本信息字段
info_layout.addRow("应用ID:", QLabel(app_data.get("id", "--")))
info_layout.addRow("应用名称:", QLabel(app_data.get("name", "--")))
info_layout.addRow("开发者ID:", QLabel(app_data.get("developer_id", "--")))
info_layout.addRow("开发者名称:", QLabel(app_data.get("developer_name", "--")))
info_layout.addRow("应用状态:", QLabel(app_data.get("status", "--")))
info_layout.addRow("当前版本:", QLabel(app_data.get("version", "--")))
info_layout.addRow("创建时间:", QLabel(app_data.get("created_at", "--")))
info_group.setLayout(info_layout)
self.scroll_layout.addWidget(info_group)
def display_app_description(self, app_data):
"""显示应用描述"""
description_group = QGroupBox("应用描述")
description_layout = QVBoxLayout()
description_text = QTextEdit()
description_text.setReadOnly(True)
description_text.setPlainText(app_data.get("description", "无描述信息"))
description_layout.addWidget(description_text)
description_group.setLayout(description_layout)
self.scroll_layout.addWidget(description_group)
def display_action_buttons(self):
"""显示操作按钮"""
buttons_layout = QHBoxLayout()
buttons_layout.addStretch()
refresh_button = PushButton("刷新")
refresh_button.clicked.connect(self.load_app_detail)
buttons_layout.addWidget(refresh_button)
self.scroll_layout.addLayout(buttons_layout)
def closeEvent(self, event):
"""关闭窗口事件"""
# 如果需要在关闭时执行清理操作,可以在这里添加
event.accept()

View File

@@ -240,7 +240,10 @@ class AppTab(QWidget):
def show_app_detail(self, row, column):
"""显示应用详情"""
app_id = self.table.item(row, 0).text()
self.parent().show_app_detail(app_id)
# 直接创建应用详情窗口,而不是通过父对象调用方法
from app_detail_window import AppDetailWindow
detail_window = AppDetailWindow(self.api_client, app_id, self)
detail_window.show()
def show_progress(self):
"""显示进度条"""