feat: keygen_gui 增加永久授权选项
This commit is contained in:
@ -15,12 +15,15 @@ if _project_root not in sys.path:
|
|||||||
|
|
||||||
from PyQt5.QtWidgets import (
|
from PyQt5.QtWidgets import (
|
||||||
QWidget, QVBoxLayout, QHBoxLayout, QLabel, QLineEdit,
|
QWidget, QVBoxLayout, QHBoxLayout, QLabel, QLineEdit,
|
||||||
QPushButton, QFileDialog, QMessageBox, QApplication, QDateEdit
|
QPushButton, QFileDialog, QMessageBox, QApplication, QDateEdit, QCheckBox
|
||||||
)
|
)
|
||||||
from PyQt5.QtCore import Qt, QDate
|
from PyQt5.QtCore import Qt, QDate
|
||||||
|
|
||||||
from src.auth.license_manager import generate_license
|
from src.auth.license_manager import generate_license
|
||||||
|
|
||||||
|
# 永久授权的标识日期
|
||||||
|
PERMANENT_EXPIRY = "2099-12-31"
|
||||||
|
|
||||||
|
|
||||||
class LicenseKeygenWindow(QWidget):
|
class LicenseKeygenWindow(QWidget):
|
||||||
"""授权发卡器主窗口"""
|
"""授权发卡器主窗口"""
|
||||||
@ -28,7 +31,7 @@ class LicenseKeygenWindow(QWidget):
|
|||||||
def __init__(self):
|
def __init__(self):
|
||||||
super().__init__()
|
super().__init__()
|
||||||
self.setWindowTitle("Mega Water - 离线授权发卡器 (开发者专用)")
|
self.setWindowTitle("Mega Water - 离线授权发卡器 (开发者专用)")
|
||||||
self.setMinimumSize(640, 340)
|
self.setMinimumSize(640, 360)
|
||||||
self.move(400, 280)
|
self.move(400, 280)
|
||||||
|
|
||||||
self._default_save_path = os.path.join(_project_root, "license.lic")
|
self._default_save_path = os.path.join(_project_root, "license.lic")
|
||||||
@ -37,7 +40,6 @@ class LicenseKeygenWindow(QWidget):
|
|||||||
def _setup_ui(self):
|
def _setup_ui(self):
|
||||||
# ── 全局字体:无衬线,清晰 ──
|
# ── 全局字体:无衬线,清晰 ──
|
||||||
font_family = "Microsoft YaHei" if sys.platform == "win32" else "Segoe UI"
|
font_family = "Microsoft YaHei" if sys.platform == "win32" else "Segoe UI"
|
||||||
base_font = f"'{font_family}', 'Segoe UI', sans-serif"
|
|
||||||
self.setStyleSheet(f"""
|
self.setStyleSheet(f"""
|
||||||
* {{
|
* {{
|
||||||
font-family: {font_family}, 'Segoe UI', sans-serif;
|
font-family: {font_family}, 'Segoe UI', sans-serif;
|
||||||
@ -79,17 +81,22 @@ class LicenseKeygenWindow(QWidget):
|
|||||||
|
|
||||||
# ── 到期时间选择行 ──
|
# ── 到期时间选择行 ──
|
||||||
exp_layout = QHBoxLayout()
|
exp_layout = QHBoxLayout()
|
||||||
exp_layout.setSpacing(12)
|
exp_layout.setSpacing(14)
|
||||||
exp_label = QLabel("到期时间:")
|
exp_label = QLabel("到期时间:")
|
||||||
exp_label.setFixedWidth(90)
|
exp_label.setFixedWidth(90)
|
||||||
self.exp_edit = QDateEdit()
|
self.exp_edit = QDateEdit()
|
||||||
self.exp_edit.setCalendarPopup(True)
|
self.exp_edit.setCalendarPopup(True)
|
||||||
self.exp_edit.setMinimumHeight(36)
|
self.exp_edit.setMinimumHeight(36)
|
||||||
self.exp_edit.setMinimumWidth(160)
|
self.exp_edit.setMinimumWidth(160)
|
||||||
# 默认:当前日期 + 1 年
|
|
||||||
self.exp_edit.setDate(QDate.currentDate().addYears(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(exp_label, 0)
|
||||||
exp_layout.addWidget(self.exp_edit, 0)
|
exp_layout.addWidget(self.exp_edit, 0)
|
||||||
|
exp_layout.addWidget(self.perm_check, 0)
|
||||||
exp_layout.addStretch(1)
|
exp_layout.addStretch(1)
|
||||||
main_layout.addLayout(exp_layout)
|
main_layout.addLayout(exp_layout)
|
||||||
|
|
||||||
@ -143,6 +150,13 @@ class LicenseKeygenWindow(QWidget):
|
|||||||
|
|
||||||
self.setLayout(main_layout)
|
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):
|
def _on_browse(self):
|
||||||
"""打开文件对话框选择保存路径"""
|
"""打开文件对话框选择保存路径"""
|
||||||
path, _ = QFileDialog.getSaveFileName(
|
path, _ = QFileDialog.getSaveFileName(
|
||||||
@ -163,13 +177,17 @@ class LicenseKeygenWindow(QWidget):
|
|||||||
QMessageBox.warning(self, "输入错误", "请输入机器码")
|
QMessageBox.warning(self, "输入错误", "请输入机器码")
|
||||||
return
|
return
|
||||||
|
|
||||||
expiry_date = self.exp_edit.date().toString("yyyy-MM-dd")
|
|
||||||
output_path = self.path_input.text().strip()
|
output_path = self.path_input.text().strip()
|
||||||
|
|
||||||
if not output_path:
|
if not output_path:
|
||||||
QMessageBox.warning(self, "输入错误", "请设置保存路径")
|
QMessageBox.warning(self, "输入错误", "请设置保存路径")
|
||||||
return
|
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(
|
ok, msg = generate_license(
|
||||||
machine_code=machine_code,
|
machine_code=machine_code,
|
||||||
output_path=output_path,
|
output_path=output_path,
|
||||||
|
|||||||
Reference in New Issue
Block a user