From bf4237b160bd4f9ae5a8853a8ed62f78404af837 Mon Sep 17 00:00:00 2001 From: DXC Date: Mon, 11 May 2026 09:53:02 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20keygen=5Fgui=20=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E6=B0=B8=E4=B9=85=E6=8E=88=E6=9D=83=E9=80=89=E9=A1=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/auth/keygen_gui.py | 32 +++++++++++++++++++++++++------- 1 file changed, 25 insertions(+), 7 deletions(-) diff --git a/src/auth/keygen_gui.py b/src/auth/keygen_gui.py index 5105236..0ffc37a 100644 --- a/src/auth/keygen_gui.py +++ b/src/auth/keygen_gui.py @@ -15,12 +15,15 @@ if _project_root not in sys.path: from PyQt5.QtWidgets import ( QWidget, QVBoxLayout, QHBoxLayout, QLabel, QLineEdit, - QPushButton, QFileDialog, QMessageBox, QApplication, QDateEdit + QPushButton, QFileDialog, QMessageBox, QApplication, QDateEdit, QCheckBox ) from PyQt5.QtCore import Qt, QDate from src.auth.license_manager import generate_license +# 永久授权的标识日期 +PERMANENT_EXPIRY = "2099-12-31" + class LicenseKeygenWindow(QWidget): """授权发卡器主窗口""" @@ -28,7 +31,7 @@ class LicenseKeygenWindow(QWidget): def __init__(self): super().__init__() self.setWindowTitle("Mega Water - 离线授权发卡器 (开发者专用)") - self.setMinimumSize(640, 340) + self.setMinimumSize(640, 360) self.move(400, 280) self._default_save_path = os.path.join(_project_root, "license.lic") @@ -37,7 +40,6 @@ class LicenseKeygenWindow(QWidget): def _setup_ui(self): # ── 全局字体:无衬线,清晰 ── font_family = "Microsoft YaHei" if sys.platform == "win32" else "Segoe UI" - base_font = f"'{font_family}', 'Segoe UI', sans-serif" self.setStyleSheet(f""" * {{ font-family: {font_family}, 'Segoe UI', sans-serif; @@ -79,17 +81,22 @@ class LicenseKeygenWindow(QWidget): # ── 到期时间选择行 ── exp_layout = QHBoxLayout() - exp_layout.setSpacing(12) + exp_layout.setSpacing(14) exp_label = QLabel("到期时间:") exp_label.setFixedWidth(90) self.exp_edit = QDateEdit() self.exp_edit.setCalendarPopup(True) self.exp_edit.setMinimumHeight(36) self.exp_edit.setMinimumWidth(160) - # 默认:当前日期 + 1 年 self.exp_edit.setDate(QDate.currentDate().addYears(1)) + + self.perm_check = QCheckBox("永久授权 (不限时)") + self.perm_check.setMinimumHeight(36) + self.perm_check.stateChanged.connect(self._on_perm_changed) + exp_layout.addWidget(exp_label, 0) exp_layout.addWidget(self.exp_edit, 0) + exp_layout.addWidget(self.perm_check, 0) exp_layout.addStretch(1) main_layout.addLayout(exp_layout) @@ -143,6 +150,13 @@ class LicenseKeygenWindow(QWidget): self.setLayout(main_layout) + def _on_perm_changed(self, state): + """永久授权复选框状态变化时,联动日期选择器""" + if state == Qt.Checked: + self.exp_edit.setEnabled(False) + else: + self.exp_edit.setEnabled(True) + def _on_browse(self): """打开文件对话框选择保存路径""" path, _ = QFileDialog.getSaveFileName( @@ -163,13 +177,17 @@ class LicenseKeygenWindow(QWidget): QMessageBox.warning(self, "输入错误", "请输入机器码") return - expiry_date = self.exp_edit.date().toString("yyyy-MM-dd") output_path = self.path_input.text().strip() - if not output_path: QMessageBox.warning(self, "输入错误", "请设置保存路径") return + # 根据是否勾选永久授权决定日期 + if self.perm_check.isChecked(): + expiry_date = PERMANENT_EXPIRY + else: + expiry_date = self.exp_edit.date().toString("yyyy-MM-dd") + ok, msg = generate_license( machine_code=machine_code, output_path=output_path,