feat(版本管理): 添加应用版本列表功能
- 在GUI中添加查看全部版本按钮和版本列表窗口 - 实现API接口获取应用版本列表数据 - 优化文件下载路径处理,解决open_basedir限制问题 - 重构分页控件布局,增加弹性空间
This commit is contained in:
@@ -850,6 +850,17 @@ class AppDetailWindow(QMainWindow):
|
||||
|
||||
versions_text = "\n".join([f"- 版本 {v['version']} ({v['download_count']} 下载)" for v in data['versions'][:3]])
|
||||
self.info_layout.addWidget(CaptionLabel(versions_text))
|
||||
|
||||
# 添加"查看全部版本"按钮
|
||||
if len(data['versions']) > 3:
|
||||
self.view_all_versions_button = PushButton("查看全部版本")
|
||||
self.view_all_versions_button.clicked.connect(lambda: self.view_all_versions())
|
||||
self.info_layout.addWidget(self.view_all_versions_button)
|
||||
|
||||
def view_all_versions(self):
|
||||
"""查看全部版本"""
|
||||
versions_window = AppVersionsWindow(self.api_client, self.app_id, self.app_title.text(), self)
|
||||
versions_window.show()
|
||||
|
||||
# 添加图片数量信息
|
||||
if 'images' in data and data['images']:
|
||||
@@ -920,21 +931,18 @@ class TagAppsWindow(QMainWindow):
|
||||
self.app_table.cellDoubleClicked.connect(self.show_app_detail)
|
||||
main_layout.addWidget(self.app_table)
|
||||
|
||||
# 创建分页控制
|
||||
# 创建分页控件
|
||||
pagination_layout = QHBoxLayout()
|
||||
pagination_layout.setContentsMargins(0, 10, 0, 0)
|
||||
|
||||
self.prev_button = PushButton("上一页")
|
||||
self.prev_button.clicked.connect(self.prev_page)
|
||||
pagination_layout.addWidget(self.prev_button)
|
||||
|
||||
self.page_label = CaptionLabel("第 1 页,共 1 页")
|
||||
pagination_layout.addWidget(self.page_label, alignment=Qt.AlignCenter)
|
||||
|
||||
self.next_button = PushButton("下一页")
|
||||
self.next_button.clicked.connect(self.next_page)
|
||||
pagination_layout.addWidget(self.prev_button)
|
||||
pagination_layout.addStretch()
|
||||
pagination_layout.addWidget(self.page_label)
|
||||
pagination_layout.addStretch()
|
||||
pagination_layout.addWidget(self.next_button)
|
||||
|
||||
main_layout.addLayout(pagination_layout)
|
||||
|
||||
# 创建进度条
|
||||
@@ -1071,7 +1079,7 @@ class DeveloperAppsWindow(QMainWindow):
|
||||
self.app_table.cellDoubleClicked.connect(self.show_app_detail)
|
||||
main_layout.addWidget(self.app_table)
|
||||
|
||||
# 创建分页控制
|
||||
# 创建分页控件
|
||||
pagination_layout = QHBoxLayout()
|
||||
pagination_layout.setContentsMargins(0, 10, 0, 0)
|
||||
|
||||
@@ -1284,6 +1292,147 @@ class DeveloperInfoWindow(QMainWindow):
|
||||
parent=self
|
||||
)
|
||||
|
||||
class AppVersionsWindow(QMainWindow):
|
||||
"""应用版本列表窗口"""
|
||||
def __init__(self, api_client, app_id, app_name, parent=None):
|
||||
super().__init__(parent)
|
||||
self.api_client = api_client
|
||||
self.app_id = app_id
|
||||
self.app_name = app_name
|
||||
self.setWindowTitle(f"{app_name} - 版本历史")
|
||||
self.resize(800, 600)
|
||||
self.current_page = 1
|
||||
self.items_per_page = 20
|
||||
self.total_pages = 1
|
||||
self.init_ui()
|
||||
self.load_versions()
|
||||
|
||||
def init_ui(self):
|
||||
"""初始化界面"""
|
||||
# 创建中心部件
|
||||
central_widget = QWidget()
|
||||
self.setCentralWidget(central_widget)
|
||||
|
||||
# 创建主布局
|
||||
main_layout = QVBoxLayout(central_widget)
|
||||
main_layout.setContentsMargins(20, 20, 20, 20)
|
||||
|
||||
# 创建标题
|
||||
title = TitleLabel(f"{self.app_name} - 版本历史")
|
||||
main_layout.addWidget(title)
|
||||
|
||||
# 创建版本列表
|
||||
self.versions_table = TableWidget()
|
||||
self.versions_table.setColumnCount(5)
|
||||
self.versions_table.setHorizontalHeaderLabels(["版本号", "发布日期", "操作系统", "文件大小", "下载量"])
|
||||
main_layout.addWidget(self.versions_table)
|
||||
|
||||
# 创建分页控件
|
||||
pagination_layout = QHBoxLayout()
|
||||
self.prev_button = PushButton("上一页")
|
||||
self.prev_button.clicked.connect(self.prev_page)
|
||||
self.page_label = CaptionLabel("第 1 页,共 1 页")
|
||||
self.next_button = PushButton("下一页")
|
||||
self.next_button.clicked.connect(self.next_page)
|
||||
|
||||
pagination_layout.addWidget(self.prev_button)
|
||||
pagination_layout.addStretch()
|
||||
pagination_layout.addWidget(self.page_label)
|
||||
pagination_layout.addStretch()
|
||||
pagination_layout.addWidget(self.next_button)
|
||||
main_layout.addLayout(pagination_layout)
|
||||
|
||||
# 创建进度条
|
||||
self.progress_bar = ProgressBar()
|
||||
self.progress_bar.setVisible(False)
|
||||
main_layout.addWidget(self.progress_bar)
|
||||
|
||||
def load_versions(self):
|
||||
"""加载版本列表"""
|
||||
self.show_progress()
|
||||
self.worker = WorkerThread(self.api_client, 'getappversions',
|
||||
{'id': self.app_id,
|
||||
'page': self.current_page,
|
||||
'limit': self.items_per_page})
|
||||
self.worker.finished.connect(self.on_versions_loaded)
|
||||
self.worker.progress.connect(self.update_progress)
|
||||
self.worker.error.connect(self.show_error)
|
||||
self.worker.start()
|
||||
|
||||
def on_versions_loaded(self, data):
|
||||
"""版本列表加载完成处理"""
|
||||
self.hide_progress()
|
||||
|
||||
if not data:
|
||||
self.show_error("版本列表加载失败")
|
||||
return
|
||||
|
||||
# 清空表格
|
||||
self.versions_table.setRowCount(0)
|
||||
|
||||
# 更新分页信息
|
||||
pagination = data.get('pagination', {})
|
||||
self.total_pages = pagination.get('totalPages', 1)
|
||||
self.page_label.setText(f"第 {self.current_page} 页,共 {self.total_pages} 页")
|
||||
|
||||
# 更新按钮状态
|
||||
self.prev_button.setEnabled(self.current_page > 1)
|
||||
self.next_button.setEnabled(self.current_page < self.total_pages)
|
||||
|
||||
# 填充表格
|
||||
versions = data.get('versions', [])
|
||||
for version in versions:
|
||||
row_position = self.versions_table.rowCount()
|
||||
self.versions_table.insertRow(row_position)
|
||||
|
||||
# 添加版本数据
|
||||
self.versions_table.setItem(row_position, 0, QTableWidgetItem(version.get('version', '未知')))
|
||||
self.versions_table.setItem(row_position, 1, QTableWidgetItem(version.get('created_at', '未知')))
|
||||
self.versions_table.setItem(row_position, 2, QTableWidgetItem(version.get('platform', '未知')))
|
||||
self.versions_table.setItem(row_position, 3, QTableWidgetItem(version.get('file_size', '未知')))
|
||||
self.versions_table.setItem(row_position, 4, QTableWidgetItem(str(version.get('download_count', 0))))
|
||||
|
||||
# 自动调整列宽
|
||||
self.versions_table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
|
||||
|
||||
def prev_page(self):
|
||||
"""上一页"""
|
||||
if self.current_page > 1:
|
||||
self.current_page -= 1
|
||||
self.load_versions()
|
||||
|
||||
def next_page(self):
|
||||
"""下一页"""
|
||||
if self.current_page < self.total_pages:
|
||||
self.current_page += 1
|
||||
self.load_versions()
|
||||
|
||||
def show_progress(self):
|
||||
"""显示进度条"""
|
||||
self.progress_bar.setVisible(True)
|
||||
self.progress_bar.setValue(0)
|
||||
|
||||
def update_progress(self, value):
|
||||
"""更新进度条"""
|
||||
self.progress_bar.setValue(value)
|
||||
|
||||
def hide_progress(self):
|
||||
"""隐藏进度条"""
|
||||
self.progress_bar.setVisible(False)
|
||||
|
||||
def show_error(self, message):
|
||||
"""显示错误消息"""
|
||||
self.hide_progress()
|
||||
InfoBar.error(
|
||||
title="错误",
|
||||
content=message,
|
||||
orient=Qt.Horizontal,
|
||||
isClosable=True,
|
||||
position=InfoBarPosition.BOTTOM_RIGHT,
|
||||
duration=5000,
|
||||
parent=self
|
||||
)
|
||||
|
||||
class LeonAppGUI(FluentWindow):
|
||||
"""主应用窗口"""
|
||||
def __init__(self):
|
||||
@@ -1342,6 +1491,11 @@ class LeonAppGUI(FluentWindow):
|
||||
"""显示开发者信息"""
|
||||
developer_info_window = DeveloperInfoWindow(self.api_client, developer_id, self)
|
||||
developer_info_window.show()
|
||||
|
||||
def show_app_versions(self, app_id, app_name):
|
||||
"""显示应用的版本列表"""
|
||||
versions_window = AppVersionsWindow(self.api_client, app_id, app_name, self)
|
||||
versions_window.show()
|
||||
|
||||
def main():
|
||||
"""主函数"""
|
||||
|
||||
Reference in New Issue
Block a user