#
Junjie
昨天 ab6dd7555377d0d5fe3a78149c0cdb98e2f15275
src/main/webapp/static/js/login/login.js
@@ -69,19 +69,50 @@
                var localeTick = this.localeTick;
                void localeTick;
                if (window.WCS_I18N && typeof window.WCS_I18N.t === "function") {
                    return window.WCS_I18N.t(key);
                    var translated = window.WCS_I18N.t(key);
                    if (translated && translated !== key) {
                        return translated;
                    }
                }
                return fallback || key;
            },
            refreshRuleMessages: function () {
                var vm = this;
                vm.loginRules = {
                    mobile: [
                        { required: true, message: vm.text("login.validation.usernameRequired", "请输入账号"), trigger: "blur" }
                    ],
                    password: [
                        { required: true, message: vm.text("login.validation.passwordRequired", "请输入密码"), trigger: "blur" }
                    ]
                };
                vm.mfaRules = {
                    code: [
                        { required: true, message: vm.text("login.validation.mfaRequired", "请输入6位验证码"), trigger: "blur" },
                        {
                            validator: function (rule, value, callback) {
                                if (!/^\d{6}$/.test(String(value || "").trim())) {
                                    callback(new Error(vm.text("login.validation.mfaInvalid", "请输入6位数字验证码")));
                                    return;
                                }
                                callback();
                            },
                            trigger: "blur"
                        }
                    ]
                };
            },
            initLanguageSwitch: function () {
                var vm = this;
                if (!window.WCS_I18N || typeof window.WCS_I18N.onReady !== "function") {
                    vm.refreshRuleMessages();
                    return;
                }
                window.WCS_I18N.onReady(function (i18n) {
                    vm.localeOptions = i18n.getLocaleOptions();
                    vm.currentLocale = i18n.getLocale();
                    document.title = i18n.t("login.title");
                    vm.refreshRuleMessages();
                    vm.localeTick++;
                });
            },
@@ -138,13 +169,13 @@
                                vm.openMfaDialog(payload);
                                return;
                            }
                            vm.finishLogin(payload);
                            return;
                        }
                        vm.$message.error(res.msg || "登录失败");
                        vm.finishLogin(payload);
                        return;
                    }
                        vm.$message.error(res.msg || vm.text("login.error.loginFailed", "登录失败"));
                    },
                    error: function () {
                        vm.$message.error("登录失败");
                        vm.$message.error(vm.text("login.error.loginFailed", "登录失败"));
                    },
                    complete: function () {
                        vm.loginLoading = false;
@@ -192,7 +223,7 @@
            submitMfaLogin: function () {
                var vm = this;
                if (!vm.mfaPending.ticket) {
                    vm.$message.error("登录票据已失效,请重新登录");
                    vm.$message.error(vm.text("login.error.mfaTicketExpired", "登录票据已失效,请重新登录"));
                    vm.closeMfaDialog();
                    return;
                }
@@ -209,10 +240,10 @@
                            vm.finishLogin(res.data || {});
                            return;
                        }
                        vm.$message.error(res.msg || "验证失败");
                        vm.$message.error(res.msg || vm.text("login.error.mfaFailed", "验证失败"));
                    },
                    error: function () {
                        vm.$message.error("验证失败");
                        vm.$message.error(vm.text("login.error.mfaFailed", "验证失败"));
                    },
                    complete: function () {
                        vm.mfaLoading = false;
@@ -250,9 +281,9 @@
                    textarea.select();
                    document.execCommand("copy");
                    document.body.removeChild(textarea);
                    this.$message.success("已复制到剪贴板");
                    this.$message.success(this.text("login.dialog.copied", "已复制到剪贴板"));
                } catch (err) {
                    this.$message.error("复制失败");
                    this.$message.error(this.text("login.dialog.copyFailed", "复制失败"));
                }
            },
            copyText: function () {
@@ -260,7 +291,7 @@
                var text = vm.textDialog.text || "";
                if (navigator.clipboard && navigator.clipboard.writeText) {
                    navigator.clipboard.writeText(text).then(function () {
                        vm.$message.success("已复制到剪贴板");
                        vm.$message.success(vm.text("login.dialog.copied", "已复制到剪贴板"));
                    }).catch(function () {
                        vm.fallbackCopy(text);
                    });
@@ -275,13 +306,18 @@
                    method: "GET",
                    success: function (res) {
                        if (Number(res.code) === 200) {
                            vm.openTextDialog("获取请求码", "请求码", res.msg || "", "请求码中已包含项目名称,直接发给许可证服务端即可。");
                            vm.openTextDialog(
                                vm.text("login.requestCode.title", "获取请求码"),
                                vm.text("login.requestCode.label", "请求码"),
                                res.msg || "",
                                vm.text("login.requestCode.tip", "请求码中已包含项目名称,直接发给许可证服务端即可。")
                            );
                            return;
                        }
                        vm.$message.error(res.msg || "获取请求码失败");
                        vm.$message.error(res.msg || vm.text("login.error.requestCodeFailed", "获取请求码失败"));
                    },
                    error: function () {
                        vm.$message.error("获取请求码失败");
                        vm.$message.error(vm.text("login.error.requestCodeFailed", "获取请求码失败"));
                    }
                });
            },
@@ -291,17 +327,22 @@
                    url: baseUrl + "/license/getServerInfos",
                    method: "GET",
                    success: function (res) {
                        vm.openTextDialog("获取系统配置", "系统配置信息", res, "老项目仍可继续使用这份硬件信息 JSON 申请许可证。");
                        vm.openTextDialog(
                            vm.text("login.serverInfo.title", "获取系统配置"),
                            vm.text("login.serverInfo.label", "系统配置信息"),
                            res,
                            vm.text("login.serverInfo.tip", "老项目仍可继续使用这份硬件信息 JSON 申请许可证。")
                        );
                    },
                    error: function () {
                        vm.$message.error("获取系统配置信息失败");
                        vm.$message.error(vm.text("login.error.serverInfoFailed", "获取系统配置信息失败"));
                    }
                });
            },
            submitLicense: function () {
                var vm = this;
                if (!vm.licenseBase64) {
                    vm.$message.warning("许可证内容不能为空");
                    vm.$message.warning(vm.text("login.error.licenseEmpty", "许可证内容不能为空"));
                    return;
                }
                ajaxJson({
@@ -313,35 +354,35 @@
                        if (Number(res.code) === 200) {
                            vm.uploadDialogVisible = false;
                            vm.licenseBase64 = "";
                            vm.$message.success("许可证更新成功");
                            vm.$message.success(vm.text("login.license.success", "许可证更新成功"));
                            return;
                        }
                        vm.$message.error(res.msg || "许可证更新失败");
                        vm.$message.error(res.msg || vm.text("login.error.licenseUpdateFailed", "许可证更新失败"));
                    },
                    error: function () {
                        vm.$message.error("许可证录入失败");
                        vm.$message.error(vm.text("login.error.licenseImportFailed", "许可证录入失败"));
                    }
                });
            },
            activateLicense: function () {
                var vm = this;
                vm.$confirm("确定执行一键激活吗?", "提示", {
                vm.$confirm(vm.text("login.activate.confirm", "确定执行一键激活吗?"), vm.text("common.prompt", "提示"), {
                    type: "warning",
                    confirmButtonText: "确定",
                    cancelButtonText: "取消"
                    confirmButtonText: vm.text("common.ok", "确定"),
                    cancelButtonText: vm.text("login.mfa.cancel", "取消")
                }).then(function () {
                    ajaxJson({
                        url: baseUrl + "/license/activate",
                        method: "POST",
                        success: function (res) {
                            if (Number(res.code) === 200) {
                                vm.$message.success("激活成功");
                                vm.$message.success(vm.text("login.activate.success", "激活成功"));
                                return;
                            }
                            vm.$message.error(res.msg || "激活失败");
                            vm.$message.error(res.msg || vm.text("login.activate.failed", "激活失败"));
                        },
                        error: function () {
                            vm.$message.error("激活失败");
                            vm.$message.error(vm.text("login.activate.failed", "激活失败"));
                        }
                    });
                }).catch(function () {
@@ -354,15 +395,15 @@
                    method: "GET",
                    success: function (res) {
                        if (Number(res.code) === 200) {
                            vm.$alert(res.msg || "", "项目名称", {
                                confirmButtonText: "确定"
                            vm.$alert(res.msg || "", vm.text("login.projectName.title", "项目名称"), {
                                confirmButtonText: vm.text("common.ok", "确定")
                            });
                            return;
                        }
                        vm.$message.error(res.msg || "获取项目名称失败");
                        vm.$message.error(res.msg || vm.text("login.error.projectNameFailed", "获取项目名称失败"));
                    },
                    error: function () {
                        vm.$message.error("获取项目名称失败");
                        vm.$message.error(vm.text("login.error.projectNameFailed", "获取项目名称失败"));
                    }
                });
            }