var __defProp = Object.defineProperty; var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; var __publicField = (obj, key, value) => { __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value); return value; }; if (typeof Promise !== "undefined" && !Promise.prototype.finally) { Promise.prototype.finally = function(callback) { const promise = this.constructor; return this.then( (value) => promise.resolve(callback()).then(() => value), (reason) => promise.resolve(callback()).then(() => { throw reason; }) ); }; } ; if (typeof uni !== "undefined" && uni && uni.requireGlobal) { const global2 = uni.requireGlobal(); ArrayBuffer = global2.ArrayBuffer; Int8Array = global2.Int8Array; Uint8Array = global2.Uint8Array; Uint8ClampedArray = global2.Uint8ClampedArray; Int16Array = global2.Int16Array; Uint16Array = global2.Uint16Array; Int32Array = global2.Int32Array; Uint32Array = global2.Uint32Array; Float32Array = global2.Float32Array; Float64Array = global2.Float64Array; BigInt64Array = global2.BigInt64Array; BigUint64Array = global2.BigUint64Array; } ; if (uni.restoreGlobal) { uni.restoreGlobal(Vue, weex, plus, setTimeout, clearTimeout, setInterval, clearInterval); } (function(vue) { "use strict"; function formatAppLog(type, filename, ...args) { if (uni.__log__) { uni.__log__(type, filename, ...args); } else { console[type].apply(console, [...args, filename]); } } function isAndroid() { return uni.getSystemInfoSync().platform === "android"; } if (typeof setTimeout === "undefined") { formatAppLog("log", "at utils/fileUtils.js:12", "setTimeout 未定义,添加 polyfill"); global.setTimeout = function(callback, delay) { callback(); }; } async function moveChromeApkToDevice(options = {}) { const config = { sourcePath: "/static/apk/com.android.chrome.apk", targetDir: "yxd", targetFileName: "com.android.chrome.apk", ...options }; formatAppLog("log", "at utils/fileUtils.js:52", "开始移动APK文件,配置:", config); return new Promise((resolve, reject) => { try { const srcPath = plus.io.convertLocalFileSystemURL(config.sourcePath); const targetDirPath = "_downloads/"; formatAppLog("log", "at utils/fileUtils.js:60", "源文件路径:", srcPath); const internalStoragePath = "file:///storage/emulated/0/"; formatAppLog("log", "at utils/fileUtils.js:64", "尝试使用内部存储目录:", internalStoragePath); plus.io.resolveLocalFileSystemURL(srcPath, (srcEntry) => { formatAppLog("log", "at utils/fileUtils.js:67", "找到源文件:", srcEntry.fullPath); plus.io.resolveLocalFileSystemURL(targetDirPath, (downloadDirEntry) => { formatAppLog("log", "at utils/fileUtils.js:110", "找到下载目录:", downloadDirEntry.fullPath); downloadDirEntry.getFile(config.targetFileName, {}, (existingFile) => { formatAppLog("log", "at utils/fileUtils.js:114", "找到已存在的 APK:", existingFile.fullPath); scanFile(existingFile.fullPath); resolve(existingFile); }, () => { srcEntry.copyTo(downloadDirEntry, config.targetFileName, (newEntry) => { formatAppLog("log", "at utils/fileUtils.js:121", "APK 复制成功:", newEntry.fullPath); scanFile(newEntry.fullPath); resolve(newEntry); }, (copyErr) => { formatAppLog("error", "at utils/fileUtils.js:125", "复制失败:", copyErr); reject(`复制失败: ${JSON.stringify(copyErr)}`); }); }); }, (dirErr) => { formatAppLog("error", "at utils/fileUtils.js:131", "获取公共下载目录失败,尝试应用私有目录:", dirErr); saveToPrivateDir(srcEntry, config, resolve, reject); }); }, (srcErr) => { formatAppLog("error", "at utils/fileUtils.js:135", "访问源文件失败:", srcErr); reject(`访问源文件失败: ${JSON.stringify(srcErr)}`); }); } catch (e) { formatAppLog("error", "at utils/fileUtils.js:139", "执行过程中发生异常:", e); reject(`执行过程中发生异常: ${e}`); } }); } function scanFile(filePath) { if (!isAndroid()) return; try { formatAppLog("log", "at utils/fileUtils.js:148", "开始扫描文件:", filePath); const Intent = plus.android.importClass("android.content.Intent"); const Uri = plus.android.importClass("android.net.Uri"); const File = plus.android.importClass("java.io.File"); const main = plus.android.runtimeMainActivity(); const intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE); intent.setData(Uri.fromFile(new File(filePath))); main.sendBroadcast(intent); formatAppLog("log", "at utils/fileUtils.js:156", "文件扫描成功"); } catch (e) { formatAppLog("error", "at utils/fileUtils.js:158", "文件扫描失败:", e); } } class ChromeBrowser { /** * 打开URL,自动处理浏览器 * @param {string} url - 要打开的URL * @returns {Promise} 是否成功处理 */ static async openUrl(url) { if (!url) { formatAppLog("error", "at utils/chrome-browser.js:29", "ChromeBrowser: URL为空"); return false; } return new Promise((resolve, reject) => { plus.runtime.openURL(url, async (err) => { if (err) { formatAppLog("log", "at utils/chrome-browser.js:36", "检测失败,Chrome 可能未安装:", err); try { const result = await this.installAndOpen(url); resolve(result); } catch (error) { formatAppLog("error", "at utils/chrome-browser.js:42", "installAndOpen 失败:", error); resolve(false); } } else { resolve(true); } }, "com.android.chrome"); }); } /** * 使用谷歌浏览器打开URL * @param {string} url */ static openWithChrome(url) { plus.runtime.openURL(url, { pname: "Chrome" }); return true; } /** * 安装谷歌浏览器并打开URL * @param {string} url * @returns {Promise} */ static async installAndOpen(url) { try { const confirm = await this.showInstallConfirm(); if (!confirm) { plus.runtime.openURL(url); return false; } const installed = await this.initWorkflow(); if (installed) { this.hasChrome = true; uni.setStorageSync("has_chrome_browser", true); setTimeout(() => { this.openWithChrome(url); }, 1e3); return true; } else { plus.runtime.openURL(url); return false; } } catch (error) { formatAppLog("error", "at utils/chrome-browser.js:102", "ChromeBrowser: 安装流程失败:", error); plus.runtime.openURL(url); return false; } } /** * 显示安装确认对话框 * @returns {Promise} */ static showInstallConfirm() { return new Promise((resolve) => { uni.showModal({ title: "安装谷歌浏览器", content: "检测到您未安装谷歌浏览器\n\n建议安装谷歌浏览器以获得最佳体验\n是否现在安装?", confirmText: "立即安装", cancelText: "使用其他浏览器", success: (res) => { resolve(res.confirm); } }); }); } static async initWorkflow() { return new Promise(async (resolve) => { try { const hasPermission = await this.requestAndroidPermission( "android.permission.WRITE_EXTERNAL_STORAGE" ); if (!hasPermission) { uni.showModal({ title: "提示", content: "请授予存储权限以保存安装包", showCancel: false }); return; } uni.showLoading({ title: "正在准备资源..." }); const result = await moveChromeApkToDevice(); uni.hideLoading(); uni.showModal({ title: "就绪", content: `安装包已保存至:Downloads/${result.name}`, confirmText: "去安装", success: (res) => { if (res.confirm) { this.installApk(result.fullPath, resolve); } else { resolve(false); } } }); } catch (e) { uni.hideLoading(); formatAppLog("error", "at utils/chrome-browser.js:165", "流程失败:", e); uni.showToast({ title: "操作失败: " + e, icon: "none" }); } }); } // 动态权限申请核心代码 static requestAndroidPermission(permissionID) { return new Promise((resolve) => { plus.android.requestPermissions( [permissionID], (resultObj) => { if (resultObj.granted.length > 0) { resolve(true); } else { resolve(false); } }, (error) => { formatAppLog("error", "at utils/chrome-browser.js:187", "权限请求错误:", error); resolve(false); } ); }); } /** * 实时下载并安装 * @param {Function} resolve */ static downloadAndInstall(resolve) { uni.showLoading({ title: "正在下载...\n约十分钟", mask: true }); const downloadUrl = "https://database.yuxindazhineng.com/user-file//690c72a6b8ffa329af2d5607/avatar/com.android.chrome.apk"; const fileName = `_downloads/chrome_${Date.now()}.apk`; const dtask = plus.downloader.createDownload( downloadUrl, { filename: fileName }, (d, status) => { uni.hideLoading(); if (status === 200) { formatAppLog("log", "at utils/chrome-browser.js:217", "ChromeBrowser: 下载成功,开始安装"); this.installApk(d.filename, resolve); } else { formatAppLog("error", "at utils/chrome-browser.js:220", "ChromeBrowser: 下载失败,状态码:", status); this.showDownloadError(); resolve(false); } } ); dtask.start(); } /** * 安装APK文件 * @param {string} filePath * @param {Function} resolve */ static installApk(filePath, resolve) { uni.showLoading({ title: "准备中...", mask: true }); plus.runtime.install( filePath, { force: false }, () => { uni.hideLoading(); formatAppLog("log", "at utils/chrome-browser.js:247", "ChromeBrowser: 安装成功"); uni.showToast({ title: "准备完成", icon: "success", duration: 1500 }); resolve(true); }, (error) => { uni.hideLoading(); formatAppLog("error", "at utils/chrome-browser.js:257", "ChromeBrowser: 安装失败:", error); uni.removeStorageSync("chrome_apk_path"); this.showInstallError(filePath); resolve(false); } ); } /** * 显示下载错误提示 */ static showDownloadError() { uni.showModal({ title: "下载失败", content: "无法下载谷歌浏览器\n请检查网络连接后重试", showCancel: false }); } /** * 显示安装错误提示 * @param {string} filePath */ static showInstallError(filePath) { uni.showModal({ title: "安装失败", content: "自动安装失败\n请在文件管理中手动安装\n或退出应用后台重新进入下载", confirmText: "查看文件", success: (res) => { if (res.confirm && filePath) { plus.runtime.openFile(filePath); } } }); } /** * 强制重新检查浏览器状态 * @returns {Promise} */ static async forceCheck() { formatAppLog("log", "at utils/chrome-browser.js:299", "ChromeBrowser: 强制重新检查"); this.hasChrome = null; return await this.init(); } /** * 获取当前状态信息 */ static getStatus() { return { hasChrome: this.hasChrome, apkDownloaded: this.apkDownloaded, apkPath: this.apkPath, cachedHasChrome: uni.getStorageSync("has_chrome_browser"), cachedApkPath: uni.getStorageSync("chrome_apk_path") }; } } // 存储检查结果 __publicField(ChromeBrowser, "hasChrome", null); __publicField(ChromeBrowser, "apkDownloaded", false); __publicField(ChromeBrowser, "apkPath", null); const _imports_0 = "/static/logo.png"; const _export_sfc = (sfc, props) => { const target = sfc.__vccOpts || sfc; for (const [key, val] of props) { target[key] = val; } return target; }; const _sfc_main$3 = { __name: "light-theme", setup(__props, { expose: __expose }) { __expose(); const username = vue.ref(""); const password = vue.ref(""); const rememberMe = vue.ref(false); const showPassword = vue.ref(false); const isLoggingIn = vue.ref(false); const redirectUrl = vue.ref(""); const copySuccess = vue.ref(false); const usernameError = vue.ref(""); const passwordError = vue.ref(""); const loginError = vue.ref(""); const toggleRememberMe = () => { rememberMe.value = !rememberMe.value; }; const validateForm = () => { let isValid = true; usernameError.value = ""; passwordError.value = ""; if (!username.value.trim()) { usernameError.value = "请输入账号"; isValid = false; } if (!password.value) { passwordError.value = "请输入密码"; isValid = false; } else if (password.value.length < 6) { passwordError.value = "密码至少6位字符"; isValid = false; } return isValid; }; const clearError = (field) => { if (field === "username") { usernameError.value = ""; } else if (field === "password") { passwordError.value = ""; } loginError.value = ""; }; const handleLogin = async () => { if (!validateForm()) { return; } isLoggingIn.value = true; loginError.value = ""; try { const res = await uni.request({ url: "http://cloud.yuxindazhineng.com/cloud_api/app/verify_domain", method: "POST", header: { "Content-Type": "application/json" }, data: { username: username.value, password: password.value } }); if (res.statusCode !== 200) { throw new Error(`接口请求失败,状态码:${res.statusCode}`); } const responseData = res.data; formatAppLog("log", "at pages/light-theme/light-theme.vue:176", responseData); if (responseData.success) { if (rememberMe.value) { uni.setStorageSync("yxd_username", username.value); } else { uni.removeStorageSync("yxd_username"); } const domainData = responseData.data; formatAppLog("log", "at pages/light-theme/light-theme.vue:189", "完整域名:", domainData.full_domain); formatAppLog("log", "at pages/light-theme/light-theme.vue:190", "域名前缀:", domainData.domain_prefix); redirectUrl.value = `http://${domainData.full_domain}`; setTimeout(() => { openExternalLink(); }, 1e3); } else { throw new Error(responseData.message || "登录失败,请检查账号密码"); } } catch (error) { loginError.value = error.message || "登录失败,请检查账号密码"; } finally { isLoggingIn.value = false; } }; const openExternalLink = () => { if (!redirectUrl.value) return; ChromeBrowser.openUrl(redirectUrl.value); setTimeout(() => { redirectUrl.value = null; }, 1e3); }; const copyToClipboard = () => { if (!redirectUrl.value) return; uni.setClipboardData({ data: redirectUrl.value, success: () => { copySuccess.value = true; setTimeout(() => { copySuccess.value = false; }, 2e3); } }); }; vue.onMounted(() => { const savedUsername = uni.getStorageSync("yxd_username"); if (savedUsername) { username.value = savedUsername; rememberMe.value = true; } formatAppLog("log", "at pages/light-theme/light-theme.vue:259", "登录组件已挂载"); }); const __returned__ = { username, password, rememberMe, showPassword, isLoggingIn, redirectUrl, copySuccess, usernameError, passwordError, loginError, toggleRememberMe, validateForm, clearError, handleLogin, openExternalLink, copyToClipboard, ref: vue.ref, onMounted: vue.onMounted, get ChromeBrowser() { return ChromeBrowser; } }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; } }; function _sfc_render$2(_ctx, _cache, $props, $setup, $data, $options) { return vue.openBlock(), vue.createElementBlock("div", { class: "main-view" }, [ vue.createElementVNode("div", { class: "container" }, [ vue.createElementVNode("div", { class: "logo" }, [ vue.createElementVNode("image", { src: _imports_0, alt: "YXD" }) ]), vue.createElementVNode("h1", null, "登录 YXD 智能应用"), vue.createElementVNode("div", { class: "login-form" }, [ vue.createElementVNode("div", { class: "form-group" }, [ vue.createElementVNode("label", { for: "username" }, "账号"), vue.withDirectives(vue.createElementVNode( "input", { id: "username", "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $setup.username = $event), type: "text", placeholder: "请输入账号/邮箱/手机号", class: vue.normalizeClass({ "error": $setup.usernameError }), onInput: _cache[1] || (_cache[1] = ($event) => $setup.clearError("username")) }, null, 34 /* CLASS, NEED_HYDRATION */ ), [ [vue.vModelText, $setup.username] ]), $setup.usernameError ? (vue.openBlock(), vue.createElementBlock( "div", { key: 0, class: "error-message" }, vue.toDisplayString($setup.usernameError), 1 /* TEXT */ )) : vue.createCommentVNode("v-if", true) ]), vue.createElementVNode("div", { class: "form-group" }, [ vue.createElementVNode("label", { for: "password" }, "密码"), vue.createElementVNode("div", { class: "password-input" }, [ vue.withDirectives(vue.createElementVNode("input", { id: "password", "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => $setup.password = $event), type: $setup.showPassword ? "text" : "password", placeholder: "请输入密码", class: vue.normalizeClass({ "error": $setup.passwordError }), onInput: _cache[3] || (_cache[3] = ($event) => $setup.clearError("password")), onKeyup: vue.withKeys($setup.handleLogin, ["enter"]) }, null, 42, ["type"]), [ [vue.vModelDynamic, $setup.password] ]), vue.createElementVNode("button", { type: "button", class: "toggle-password", onClick: _cache[4] || (_cache[4] = ($event) => $setup.showPassword = !$setup.showPassword) }, [ $setup.showPassword ? (vue.openBlock(), vue.createElementBlock("span", { key: 0 }, "🙈")) : (vue.openBlock(), vue.createElementBlock("span", { key: 1 }, "👁️")) ]) ]), $setup.passwordError ? (vue.openBlock(), vue.createElementBlock( "div", { key: 0, class: "error-message" }, vue.toDisplayString($setup.passwordError), 1 /* TEXT */ )) : vue.createCommentVNode("v-if", true) ]), vue.createElementVNode("div", { class: "form-options" }, [ vue.createElementVNode("label", { class: "remember-me", onClick: $setup.toggleRememberMe }, [ vue.createElementVNode("div", { class: "custom-checkbox-wrapper" }, [ vue.createElementVNode( "div", { class: vue.normalizeClass(["custom-checkbox", { "checked": $setup.rememberMe }]) }, [ $setup.rememberMe ? (vue.openBlock(), vue.createElementBlock("span", { key: 0 }, "✓")) : vue.createCommentVNode("v-if", true) ], 2 /* CLASS */ ) ]), vue.createElementVNode("span", null, "记住账号") ]) ]), vue.createElementVNode("button", { class: "login-btn", onClick: $setup.handleLogin, disabled: $setup.isLoggingIn }, [ $setup.isLoggingIn ? (vue.openBlock(), vue.createElementBlock("span", { key: 0 }, "⏳")) : (vue.openBlock(), vue.createElementBlock("span", { key: 1 }, "🔑")), vue.createTextVNode( " " + vue.toDisplayString($setup.isLoggingIn ? "登录中..." : "立即登录"), 1 /* TEXT */ ) ], 8, ["disabled"]), $setup.loginError ? (vue.openBlock(), vue.createElementBlock("div", { key: 0, class: "login-error" }, [ vue.createElementVNode("span", { class: "error-icon" }, "⚠"), vue.createTextVNode( " " + vue.toDisplayString($setup.loginError), 1 /* TEXT */ ) ])) : vue.createCommentVNode("v-if", true), $setup.redirectUrl ? (vue.openBlock(), vue.createElementBlock("div", { key: 1, class: "redirect-section" }, [ vue.createElementVNode("div", { class: "success-message" }, [ vue.createElementVNode("span", { class: "success-icon" }, "✅"), vue.createTextVNode(" 登录成功!正在为您跳转... ") ]) ])) : vue.createCommentVNode("v-if", true) ]) ]) ]); } const PagesLightThemeLightTheme = /* @__PURE__ */ _export_sfc(_sfc_main$3, [["render", _sfc_render$2], ["__scopeId", "data-v-68542e3f"], ["__file", "D:/Projects/intelligentProject-phone/pages/light-theme/light-theme.vue"]]); const _sfc_main$2 = { __name: "index", setup(__props, { expose: __expose }) { __expose(); const url = vue.ref("https://ws.yuxindazhineng.com"); function openExternalLink() { plus.runtime.openURL(url.value); } const handleAccessClick = () => { setTimeout(() => { window.location.href = url.value; }, 1e3); }; const handleDirectLinkClick = (e) => { e.preventDefault(); if (loadingElement.value) { loadingElement.value.style.display = "block"; } setTimeout(() => { window.location.href = url.value; }, 500); }; vue.onMounted(() => { formatAppLog("log", "at pages/index/index.vue:79", "组件已挂载,DOM元素可用"); }); const __returned__ = { url, openExternalLink, handleAccessClick, handleDirectLinkClick, ref: vue.ref, onMounted: vue.onMounted }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; } }; function _sfc_render$1(_ctx, _cache, $props, $setup, $data, $options) { return vue.openBlock(), vue.createElementBlock("div", { class: "main-view" }, [ vue.createElementVNode("div", { class: "container" }, [ vue.createElementVNode("div", { class: "logo" }, [ vue.createElementVNode("image", { src: _imports_0, alt: "YXD" }) ]), vue.createElementVNode("h1", null, "访问 YXD 智能应用"), vue.createElementVNode("p", { class: "description" }, "点击下方按钮跳转至浏览器访问 YXD 智能应用平台,体验智能服务。"), vue.createElementVNode("div", { class: "url-display" }, [ vue.createElementVNode("input", { placeholder: "请输入网址", value: $setup.url }, null, 8, ["value"]) ]), vue.createElementVNode( "button", { class: "access-btn", ref: "accessButton", onClick: $setup.openExternalLink }, [ vue.createElementVNode("i", { class: "fas fa-external-link-alt" }), vue.createTextVNode(" 立即访问 ") ], 512 /* NEED_PATCH */ ) ]) ]); } const PagesIndexIndex = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["render", _sfc_render$1], ["__scopeId", "data-v-1cf27b2a"], ["__file", "D:/Projects/intelligentProject-phone/pages/index/index.vue"]]); const _sfc_main$1 = { __name: "night-theme", setup(__props, { expose: __expose }) { __expose(); const username = vue.ref(""); const password = vue.ref(""); const rememberMe = vue.ref(false); const showPassword = vue.ref(false); const isLoggingIn = vue.ref(false); const redirectUrl = vue.ref(""); const copySuccess = vue.ref(false); const usernameError = vue.ref(""); const passwordError = vue.ref(""); const loginError = vue.ref(""); const toggleRememberMe = () => { rememberMe.value = !rememberMe.value; formatAppLog("log", "at pages/night-theme/night-theme.vue:109", "触发toggleRememberMe"); }; const mockLoginApi = (user, pwd) => { return new Promise((resolve, reject) => { setTimeout(() => { if (user && pwd) { resolve({ success: true, redirectUrl: "https://ws.yuxindazhineng.com/", userInfo: { username: user, name: "用户" + user.substring(0, 3) } }); } else { reject({ success: false, message: "账号或密码错误" }); } }, 1500); }); }; const validateForm = () => { let isValid = true; usernameError.value = ""; passwordError.value = ""; if (!username.value.trim()) { usernameError.value = "请输入账号"; isValid = false; } if (!password.value) { passwordError.value = "请输入密码"; isValid = false; } else if (password.value.length < 6) { passwordError.value = "密码至少6位字符"; isValid = false; } return isValid; }; const clearError = (field) => { if (field === "username") { usernameError.value = ""; } else if (field === "password") { passwordError.value = ""; } loginError.value = ""; }; const handleLogin = async () => { if (!validateForm()) { return; } isLoggingIn.value = true; loginError.value = ""; try { const response = await mockLoginApi(username.value, password.value); if (response.success) { if (rememberMe.value) { uni.setStorageSync("yxd_username", username.value); } else { uni.removeStorageSync("yxd_username"); } redirectUrl.value = response.redirectUrl; setTimeout(() => { openExternalLink(); }, 2e3); } } catch (error) { loginError.value = error.message || "登录失败,请检查账号密码"; } finally { isLoggingIn.value = false; } }; function openExternalLink() { if (!redirectUrl.value) return; plus.runtime.openURL(redirectUrl.value); } const copyToClipboard = () => { if (!redirectUrl.value) return; uni.setClipboardData({ data: redirectUrl.value, success: () => { copySuccess.value = true; setTimeout(() => { copySuccess.value = false; }, 2e3); } }); }; vue.onMounted(() => { const savedUsername = uni.getStorageSync("yxd_username"); if (savedUsername) { username.value = savedUsername; rememberMe.value = true; } formatAppLog("log", "at pages/night-theme/night-theme.vue:267", "登录组件已挂载"); }); const __returned__ = { username, password, rememberMe, showPassword, isLoggingIn, redirectUrl, copySuccess, usernameError, passwordError, loginError, toggleRememberMe, mockLoginApi, validateForm, clearError, handleLogin, openExternalLink, copyToClipboard, ref: vue.ref, onMounted: vue.onMounted }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; } }; function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) { return vue.openBlock(), vue.createElementBlock("div", { class: "main-view" }, [ vue.createElementVNode("div", { class: "container" }, [ vue.createElementVNode("div", { class: "logo" }, [ vue.createElementVNode("image", { src: _imports_0, alt: "YXD" }) ]), vue.createElementVNode("h1", null, "登录 YXD 智能应用"), vue.createElementVNode("div", { class: "login-form" }, [ vue.createElementVNode("div", { class: "form-group" }, [ vue.createElementVNode("label", { for: "username" }, "账号"), vue.withDirectives(vue.createElementVNode( "input", { id: "username", "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $setup.username = $event), type: "text", placeholder: "请输入账号/邮箱/手机号", class: vue.normalizeClass({ "error": $setup.usernameError }), onInput: _cache[1] || (_cache[1] = ($event) => $setup.clearError("username")) }, null, 34 /* CLASS, NEED_HYDRATION */ ), [ [vue.vModelText, $setup.username] ]), $setup.usernameError ? (vue.openBlock(), vue.createElementBlock( "div", { key: 0, class: "error-message" }, vue.toDisplayString($setup.usernameError), 1 /* TEXT */ )) : vue.createCommentVNode("v-if", true) ]), vue.createElementVNode("div", { class: "form-group" }, [ vue.createElementVNode("label", { for: "password" }, "密码"), vue.createElementVNode("div", { class: "password-input" }, [ vue.withDirectives(vue.createElementVNode("input", { id: "password", "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => $setup.password = $event), type: $setup.showPassword ? "text" : "password", placeholder: "请输入密码", class: vue.normalizeClass({ "error": $setup.passwordError }), onInput: _cache[3] || (_cache[3] = ($event) => $setup.clearError("password")), onKeyup: vue.withKeys($setup.handleLogin, ["enter"]) }, null, 42, ["type"]), [ [vue.vModelDynamic, $setup.password] ]), vue.createElementVNode("button", { type: "button", class: "toggle-password", onClick: _cache[4] || (_cache[4] = ($event) => $setup.showPassword = !$setup.showPassword) }, [ $setup.showPassword ? (vue.openBlock(), vue.createElementBlock("span", { key: 0 }, "🙈")) : (vue.openBlock(), vue.createElementBlock("span", { key: 1 }, "👁️")) ]) ]), $setup.passwordError ? (vue.openBlock(), vue.createElementBlock( "div", { key: 0, class: "error-message" }, vue.toDisplayString($setup.passwordError), 1 /* TEXT */ )) : vue.createCommentVNode("v-if", true) ]), vue.createElementVNode("div", { class: "form-options" }, [ vue.createElementVNode("label", { class: "remember-me", onClick: $setup.toggleRememberMe }, [ vue.createElementVNode("div", { class: "custom-checkbox-wrapper" }, [ vue.createElementVNode( "div", { class: vue.normalizeClass(["custom-checkbox", { "checked": $setup.rememberMe }]) }, [ $setup.rememberMe ? (vue.openBlock(), vue.createElementBlock("span", { key: 0 }, "✓")) : vue.createCommentVNode("v-if", true) ], 2 /* CLASS */ ) ]), vue.createElementVNode("span", null, "记住账号") ]) ]), vue.createElementVNode("button", { class: "login-btn", onClick: $setup.handleLogin, disabled: $setup.isLoggingIn }, [ $setup.isLoggingIn ? (vue.openBlock(), vue.createElementBlock("span", { key: 0 }, "⏳")) : (vue.openBlock(), vue.createElementBlock("span", { key: 1 }, "🔑")), vue.createTextVNode( " " + vue.toDisplayString($setup.isLoggingIn ? "登录中..." : "立即登录"), 1 /* TEXT */ ) ], 8, ["disabled"]), $setup.loginError ? (vue.openBlock(), vue.createElementBlock("div", { key: 0, class: "login-error" }, [ vue.createElementVNode("span", null, "⚠️"), vue.createTextVNode( " " + vue.toDisplayString($setup.loginError), 1 /* TEXT */ ) ])) : vue.createCommentVNode("v-if", true), $setup.redirectUrl ? (vue.openBlock(), vue.createElementBlock("div", { key: 1, class: "redirect-section" }, [ vue.createElementVNode("div", { class: "success-message" }, [ vue.createElementVNode("span", null, "✅"), vue.createTextVNode(" 登录成功!正在为您跳转... ") ]) ])) : vue.createCommentVNode("v-if", true) ]) ]) ]); } const PagesNightThemeNightTheme = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["render", _sfc_render], ["__scopeId", "data-v-197fbf56"], ["__file", "D:/Projects/intelligentProject-phone/pages/night-theme/night-theme.vue"]]); __definePage("pages/light-theme/light-theme", PagesLightThemeLightTheme); __definePage("pages/index/index", PagesIndexIndex); __definePage("pages/night-theme/night-theme", PagesNightThemeNightTheme); const _sfc_main = { onLaunch: function() { formatAppLog("log", "at App.vue:5", "App Launch"); }, onShow: function() { formatAppLog("log", "at App.vue:8", "App Show"); }, onHide: function() { formatAppLog("log", "at App.vue:11", "App Hide"); } }; const App = /* @__PURE__ */ _export_sfc(_sfc_main, [["__file", "D:/Projects/intelligentProject-phone/App.vue"]]); function createApp() { const app = vue.createVueApp(App); return { app }; } const { app: __app__, Vuex: __Vuex__, Pinia: __Pinia__ } = createApp(); uni.Vuex = __Vuex__; uni.Pinia = __Pinia__; __app__.provide("__globalStyles", __uniConfig.styles); __app__._component.mpType = "app"; __app__._component.render = () => { }; __app__.mount("#app"); })(Vue);