first commit

This commit is contained in:
2026-01-14 14:24:58 +08:00
commit 3ccc482933
37 changed files with 4395 additions and 0 deletions

View File

@@ -0,0 +1,8 @@
{
"hash": "e66e26ef",
"configHash": "95216d54",
"lockfileHash": "e3b0c442",
"browserHash": "965e6bcf",
"optimized": {},
"chunks": {}
}

View File

@@ -0,0 +1,3 @@
{
"type": "module"
}

11
unpackage/dist/dev/.nvue/app.css.js vendored Normal file
View File

@@ -0,0 +1,11 @@
var __getOwnPropNames = Object.getOwnPropertyNames;
var __commonJS = (cb, mod) => function __require() {
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
};
var require_app_css = __commonJS({
"app.css.js"(exports) {
const _style_0 = {};
exports.styles = [_style_0];
}
});
export default require_app_css();

2
unpackage/dist/dev/.nvue/app.js vendored Normal file
View File

@@ -0,0 +1,2 @@
Promise.resolve("./app.css.js").then(() => {
});

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

@@ -0,0 +1,24 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>View</title>
<link rel="icon" href="data:,">
<link rel="stylesheet" href="app.css" />
<script>var __uniConfig = {"globalStyle":{},"darkmode":false}</script>
<script>
var coverSupport = 'CSS' in window && typeof CSS.supports === 'function' && (CSS.supports('top: env(a)') ||
CSS.supports('top: constant(a)'))
document.write(
'<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0' +
(coverSupport ? ', viewport-fit=cover' : '') + '" />')
</script>
</head>
<body>
<div id="app"></div>
<script src="uni-app-view.umd.js"></script>
</body>
</html>

View File

@@ -0,0 +1,11 @@
;(function(){
let u=void 0,isReady=false,onReadyCallbacks=[],isServiceReady=false,onServiceReadyCallbacks=[];
const __uniConfig = {"pages":[],"globalStyle":{"backgroundColor":"#F8F8F8","navigationBar":{"backgroundColor":"#F8F8F8","titleText":"uni-app","type":"default","titleColor":"#000000"},"isNVue":false},"nvue":{"compiler":"uni-app","styleCompiler":"uni-app","flex-direction":"column"},"renderer":"auto","appname":"111","splashscreen":{"alwaysShowBeforeRender":true,"autoclose":true},"compilerVersion":"4.87","entryPagePath":"pages/light-theme/light-theme","entryPageQuery":"","realEntryPagePath":"","networkTimeout":{"request":60000,"connectSocket":60000,"uploadFile":60000,"downloadFile":60000},"locales":{},"darkmode":false,"themeConfig":{}};
const __uniRoutes = [{"path":"pages/light-theme/light-theme","meta":{"isQuit":true,"isEntry":true,"navigationBarHidden":true,"navigationBar":{"titleText":"YXD","style":"custom","type":"default"},"isNVue":false}},{"path":"pages/index/index","meta":{"navigationBarHidden":true,"navigationBar":{"titleText":"YXD","style":"custom","type":"default"},"isNVue":false}},{"path":"pages/night-theme/night-theme","meta":{"navigationBar":{"titleText":"","type":"default"},"isNVue":false}}].map(uniRoute=>(uniRoute.meta.route=uniRoute.path,__uniConfig.pages.push(uniRoute.path),uniRoute.path='/'+uniRoute.path,uniRoute));
__uniConfig.styles=[];//styles
__uniConfig.onReady=function(callback){if(__uniConfig.ready){callback()}else{onReadyCallbacks.push(callback)}};Object.defineProperty(__uniConfig,"ready",{get:function(){return isReady},set:function(val){isReady=val;if(!isReady){return}const callbacks=onReadyCallbacks.slice(0);onReadyCallbacks.length=0;callbacks.forEach(function(callback){callback()})}});
__uniConfig.onServiceReady=function(callback){if(__uniConfig.serviceReady){callback()}else{onServiceReadyCallbacks.push(callback)}};Object.defineProperty(__uniConfig,"serviceReady",{get:function(){return isServiceReady},set:function(val){isServiceReady=val;if(!isServiceReady){return}const callbacks=onServiceReadyCallbacks.slice(0);onServiceReadyCallbacks.length=0;callbacks.forEach(function(callback){callback()})}});
service.register("uni-app-config",{create(a,b,c){if(!__uniConfig.viewport){var d=b.weex.config.env.scale,e=b.weex.config.env.deviceWidth,f=Math.ceil(e/d);Object.assign(__uniConfig,{viewport:f,defaultFontSize:16})}return{instance:{__uniConfig:__uniConfig,__uniRoutes:__uniRoutes,global:u,window:u,document:u,frames:u,self:u,location:u,navigator:u,localStorage:u,history:u,Caches:u,screen:u,alert:u,confirm:u,prompt:u,fetch:u,XMLHttpRequest:u,WebSocket:u,webkit:u,print:u}}}});
})();

View File

@@ -0,0 +1 @@
(function(){})();

View File

@@ -0,0 +1,664 @@
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 global = uni.requireGlobal();
ArrayBuffer = global.ArrayBuffer;
Int8Array = global.Int8Array;
Uint8Array = global.Uint8Array;
Uint8ClampedArray = global.Uint8ClampedArray;
Int16Array = global.Int16Array;
Uint16Array = global.Uint16Array;
Int32Array = global.Int32Array;
Uint32Array = global.Uint32Array;
Float32Array = global.Float32Array;
Float64Array = global.Float64Array;
BigInt64Array = global.BigInt64Array;
BigUint64Array = global.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]);
}
}
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;
formatAppLog("log", "at pages/light-theme/light-theme.vue:109", "111");
};
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 res = await uni.request({
url: "http://cloud_test.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;
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:212", "完整域名:", domainData.full_domain);
formatAppLog("log", "at pages/light-theme/light-theme.vue:213", "域名前缀:", domainData.domain_prefix);
redirectUrl.value = `https://${domainData.full_domain}`;
setTimeout(() => {
openExternalLink();
}, 2e3);
} else {
throw new Error(responseData.message || "登录失败,请检查账号密码");
}
} 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/light-theme/light-theme.vue:292", "登录组件已挂载");
});
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$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/uniapp/app-test/fronted-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/uniapp/app-test/fronted-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/uniapp/app-test/fronted-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:4", "App Launch");
},
onShow: function() {
formatAppLog("log", "at App.vue:7", "App Show");
},
onHide: function() {
formatAppLog("log", "at App.vue:10", "App Hide");
}
};
const App = /* @__PURE__ */ _export_sfc(_sfc_main, [["__file", "D:/Projects/uniapp/app-test/fronted-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);

15
unpackage/dist/dev/app-plus/app.css vendored Normal file

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,107 @@
{
"@platforms": [
"android",
"iPhone",
"iPad"
],
"id": "__UNI__B742B9E",
"name": "111",
"version": {
"name": "1.0.0",
"code": "100"
},
"description": "",
"developer": {
"name": "",
"email": "",
"url": ""
},
"permissions": {
"UniNView": {
"description": "UniNView原生渲染"
}
},
"plus": {
"useragent": {
"value": "uni-app",
"concatenate": true
},
"splashscreen": {
"target": "id:1",
"autoclose": true,
"waiting": true,
"delay": 0
},
"popGesture": "close",
"launchwebview": {
"render": "always",
"id": "1",
"kernel": "WKWebview"
},
"usingComponents": true,
"nvueStyleCompiler": "uni-app",
"compilerVersion": 3,
"distribute": {
"google": {
"permissions": [
"<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
"<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
"<uses-permission android:name=\"android.permission.VIBRATE\"/>",
"<uses-permission android:name=\"android.permission.READ_LOGS\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
"<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
"<uses-permission android:name=\"android.permission.CAMERA\"/>",
"<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>",
"<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
"<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
"<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
"<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
"<uses-feature android:name=\"android.hardware.camera\"/>",
"<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"
]
},
"apple": {},
"plugins": {
"audio": {
"mp3": {
"description": "Android平台录音支持MP3格式文件"
}
}
}
},
"statusbar": {
"immersed": "supportedDevice",
"style": "dark",
"background": "#F8F8F8"
},
"uniStatistics": {
"enable": false
},
"allowsInlineMediaPlayback": true,
"uni-app": {
"control": "uni-v3",
"vueVersion": "3",
"compilerVersion": "4.87",
"nvueCompiler": "uni-app",
"renderer": "auto",
"nvue": {
"flex-direction": "column"
},
"nvueLaunchMode": "normal",
"webView": {
"minUserAgentVersion": "49.0"
}
}
},
"app-harmony": {
"useragent": {
"value": "uni-app",
"concatenate": true
},
"uniStatistics": {
"enable": false
}
},
"launch_path": "__uniappview.html"
}

View File

@@ -0,0 +1,198 @@
*[data-v-1cf27b2a] {
margin: 0;
padding: 0;
box-sizing: border-box;
font-family: 'PingFang SC', 'Helvetica Neue', Arial, sans-serif;
}
body[data-v-1cf27b2a] {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: -1;
background: linear-gradient(135deg, #0f1419 0, #1a1f2e 100%);
}
.main-view[data-v-1cf27b2a] {
z-index: 0;
min-height: 100vh;
display: flex;
align-items: center;
justify-content: center;
padding: 1rem;
position: relative;
overflow: hidden;
background: radial-gradient(ellipse at center, #0f1419 0%, #0a0e1a 70%);
color: #e8f4f8;
}
.container[data-v-1cf27b2a] {
display: flex;
flex-direction: column;
width: auto;
height: 90vh;
max-width: 500px;
background: rgba(26, 31, 46, .8);
border: 1px solid rgba(139, 195, 232, 0.2);
border-radius: 16px;
overflow: hidden;
/* box-shadow: 0 10px 30px rgba(0, 0, 0, 0.15); */
box-shadow: 0 0 30px rgba(139, 195, 232, 0.5);
text-align: center;
/* align-items: center; */
justify-content: center;
padding: 40px 30px;
margin: 10px;
box-sizing: border-box;
}
.logo[data-v-1cf27b2a] {
z-index: 1;
width: 100px;
height: 100px;
margin: 0 auto 25px;
background: rgba(139, 195, 232, 0.2);
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
color: white;
font-size: 40px;
box-shadow: 0 0 20px rgba(139, 195, 232, 0.3);
overflow: hidden;
/* 确保图片不会超出圆形容器 */
padding: 10px;
/* 增加内边距,让图片与边缘有间距 */
}
.logo uni-image[data-v-1cf27b2a] {
z-index: 2;
max-width: 100%;
/* 图片最大宽度不超过容器 */
max-height: 100%;
/* 图片最大高度不超过容器 */
object-fit: contain;
/* 保持图片比例,完整显示在容器内 */
display: block;
/* 去除图片底部可能出现的空白 */
/* border-radius: 50%;
box-shadow: 0 0 20px rgba(139, 195, 232, 0.1); */
}
/* h1 {
color: #2c3e50;
margin-bottom: 15px;
font-size: 24px;
background: linear-gradient(135deg, #8bc3e8, #6ba3d6);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
filter: drop-shadow(0 0 5px rgba(74, 139, 194, 0.2));
} */
h1[data-v-1cf27b2a] {
font-size: 2rem;
font-weight: 700;
letter-spacing: 2px;
background: linear-gradient(135deg, #8bc3e8, #6ba3d6);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
/* margin-bottom: 10px; */
filter: drop-shadow(0 0 5px rgba(74, 139, 194, 0.2));
text-shadow: 0 0 10px rgba(139, 195, 232, 0.3);
}
.description[data-v-1cf27b2a] {
color: #9db4c0;
font-size: 0.9rem;
margin: 20px;
}
.url-display[data-v-1cf27b2a] {
background: #f8f9fa;
padding: 15px;
border-radius: 12px;
margin-bottom: 25px;
border: 1px solid #eaeaea;
display: flex;
align-items: center;
justify-content: center;
font-size: 14px;
color: #5a6570;
}
.access-btn[data-v-1cf27b2a] {
background: linear-gradient(135deg, #8bc3e8, #6ba3d6);
color: white;
border: none;
width: 100%;
padding: 16px 40px;
border-radius: 20px;
font-size: 18px;
font-weight: 500;
cursor: pointer;
transition: all 0.3s ease;
/* box-shadow: 0 5px 15px rgba(0, 0, 0, 0.15); */
box-shadow: 0 0 20px rgba(139, 195, 232, 0.3);
display: inline-block;
margin-bottom: 25px;
}
.access-btn[data-v-1cf27b2a]:hover {
transform: translateY(-2px);
box-shadow: 0 8px 20px rgba(0, 0, 0, 0.2);
}
.access-btn[data-v-1cf27b2a]:active {
transform: translateY(0);
box-shadow: 0 3px 10px rgba(0, 0, 0, 0.15);
}
.access-btn[data-v-1cf27b2a]:disabled {
opacity: 0.7;
cursor: not-allowed;
transform: none;
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.15);
}
.loading-container[data-v-1cf27b2a] {
margin: 20px 0;
display: none;
}
.spinner[data-v-1cf27b2a] {
width: 40px;
height: 40px;
border: 4px solid #f3f3f3;
border-top: 4px solid #3498db;
border-radius: 50%;
animation: spin-1cf27b2a 1s linear infinite;
margin: 0 auto 15px;
}
@keyframes spin-1cf27b2a {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
.loading-text[data-v-1cf27b2a] {
font-size: 16px;
color: #7f8c8d;
}
.alternative[data-v-1cf27b2a] {
margin-top: 25px;
padding-top: 20px;
border-top: 1px solid #eaeaea;
font-size: 14px;
color: #7f8c8d;
}
.alternative a[data-v-1cf27b2a] {
color: #3498db;
text-decoration: none;
}
.alternative a[data-v-1cf27b2a]:hover {
text-decoration: underline;
}
@media (max-width: 600px) {
.container[data-v-1cf27b2a] {
padding: 30px 20px;
}
h1[data-v-1cf27b2a] {
font-size: 22px;
}
.access-btn[data-v-1cf27b2a] {
padding: 14px 30px;
font-size: 16px;
}
}

View File

@@ -0,0 +1,470 @@
*[data-v-68542e3f] {
margin: 0;
padding: 0;
box-sizing: border-box;
font-family: 'PingFang SC', 'Helvetica Neue', Arial, sans-serif;
}
body[data-v-68542e3f] {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: -1;
background: linear-gradient(135deg, #f8fcff 0%, #f0f8ff 100%);
}
.main-view[data-v-68542e3f] {
z-index: 0;
min-height: 100vh;
display: flex;
align-items: center;
justify-content: center;
padding: 1rem;
position: relative;
overflow: hidden;
background: linear-gradient(135deg, #f8fcff 0%, #f0f8ff 100%);
color: #333;
}
.container[data-v-68542e3f] {
display: flex;
flex-direction: column;
width: 100%;
max-width: 500px;
background: rgba(255, 255, 255, 0.95);
border-radius: 20px;
overflow: hidden;
box-shadow:
0 15px 35px rgba(33, 150, 243, 0.08),
0 5px 15px rgba(0, 0, 0, 0.05),
inset 0 0 0 1px rgba(255, 255, 255, 0.9);
text-align: center;
align-items: center;
justify-content: center;
padding: 45px 35px;
margin: 10px;
-webkit-backdrop-filter: blur(10px);
backdrop-filter: blur(10px);
}
.logo[data-v-68542e3f] {
width: 110px;
height: 110px;
margin: 0 auto 30px;
background: linear-gradient(135deg, rgba(33, 150, 243, 0.1), rgba(100, 181, 246, 0.15));
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-size: 40px;
box-shadow:
0 8px 25px rgba(33, 150, 243, 0.12),
0 0 0 1px rgba(255, 255, 255, 0.9),
inset 0 0 15px rgba(255, 255, 255, 0.8);
overflow: hidden;
padding: 12px;
position: relative;
}
.logo[data-v-68542e3f]::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
border-radius: 50%;
background: linear-gradient(135deg, rgba(255, 255, 255, 0.9), rgba(255, 255, 255, 0.6));
z-index: 1;
}
.logo uni-image[data-v-68542e3f] {
max-width: 100%;
max-height: 100%;
object-fit: contain;
display: block;
position: relative;
z-index: 2;
filter: drop-shadow(0 2px 5px rgba(33, 150, 243, 0.3));
}
h1[data-v-68542e3f] {
font-size: 2.1rem;
font-weight: 700;
color: #1565c0;
margin-bottom: 18px;
text-shadow: 0 1px 2px rgba(255, 255, 255, 0.8);
letter-spacing: -0.3px;
}
.description[data-v-68542e3f] {
color: #5d7b9f;
font-size: 0.95rem;
margin: 0 0 30px 0;
line-height: 1.6;
font-weight: 400;
}
.login-form[data-v-68542e3f] {
width: 100%;
}
.form-group[data-v-68542e3f] {
margin-bottom: 22px;
text-align: left;
}
.form-group uni-label[data-v-68542e3f] {
display: block;
margin-bottom: 10px;
font-weight: 500;
color: #2c5282;
font-size: 14px;
}
.form-group uni-input[data-v-68542e3f] {
border: 1px solid rgba(59, 130, 246, 0.3);
border-radius: 12px;
width: 100%;
height: 30px;
padding-left: 8px;
}
.form-group uni-input .uni-input-input[data-v-68542e3f] {
width: 100%;
padding: 15px 18px;
border: 1px solid #e1f5fe;
border-radius: 12px;
font-size: 15px;
transition: all 0.3s ease;
background: rgba(255, 255, 255, 0.9);
box-shadow:
inset 0 2px 4px rgba(0, 0, 0, 0.04),
0 1px 0 rgba(255, 255, 255, 0.8);
color: #2c3e50 !important;
}
.form-group uni-input .uni-input-input[data-v-68542e3f]:focus {
outline: none;
border-color: #4fc3f7;
background: white;
box-shadow:
0 0 0 3px rgba(79, 195, 247, 0.2),
inset 0 2px 4px rgba(0, 0, 0, 0.02);
}
.form-group uni-input .uni-input-input[data-v-68542e3f]::-webkit-input-placeholder {
color: #90a4ae !important;
}
.form-group uni-input .uni-input-input[data-v-68542e3f]::placeholder {
color: #90a4ae !important;
}
.form-group uni-input .uni-input-input.error[data-v-68542e3f] {
border-color: #ff7043;
background: rgba(255, 112, 67, 0.03);
}
.form-group uni-input[data-v-68542e3f]:focus {
outline: none;
border-color: #4fc3f7;
background: white;
box-shadow:
0 0 0 3px rgba(79, 195, 247, 0.2),
inset 0 2px 4px rgba(0, 0, 0, 0.02);
}
.form-group uni-input[data-v-68542e3f]::-webkit-input-placeholder {
color: #90a4ae !important;
}
.form-group uni-input[data-v-68542e3f]::placeholder {
color: #90a4ae !important;
}
.form-group uni-input.error[data-v-68542e3f] {
border-color: #ff7043;
background: rgba(255, 112, 67, 0.03);
}
.error-message[data-v-68542e3f] {
color: #ff7043;
font-size: 13px;
margin-top: 8px;
font-weight: 500;
}
.password-input[data-v-68542e3f] {
position: relative;
}
.password-input uni-button[data-v-68542e3f]::after,
.password-input uni-button[data-v-68542e3f]::before {
border: none
}
.toggle-password[data-v-68542e3f] {
position: absolute;
right: 15px;
top: 50%;
transform: translateY(-50%);
background: transparent;
color: #93c5fd;
cursor: pointer;
font-size: 15px;
transition: all 0.2s ease;
z-index: 2;
}
/* .toggle-password:hover {
color: #2196f3;
border-color: #4fc3f7;
background: white;
box-shadow: 0 2px 5px rgba(33, 150, 243, 0.15);
} */
.toggle-password span[data-v-68542e3f] {
font-size: 16px;
display: inline-block;
vertical-align: middle;
}
.form-options[data-v-68542e3f] {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 28px;
font-size: 14px;
}
.remember-me[data-v-68542e3f] {
display: flex;
align-items: center;
gap: 10px;
color: #5d7b9f;
cursor: pointer;
font-weight: 500;
}
.custom-checkbox[data-v-68542e3f] {
width: 18px;
height: 18px;
border: 1px solid rgba(59, 130, 246, 0.3);
border-radius: 4px;
background: transparent;
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
transition: all 0.2s ease;
}
.custom-checkbox.checked[data-v-68542e3f] {
/* background: #3b82f6; */
border-color: #3b82f6;
}
.custom-checkbox.checked i[data-v-68542e3f] {
color: white;
font-size: 12px;
}
/* uni-checkbox样式 */
.remember-me uni-checkbox[data-v-68542e3f] {
width: 18px;
height: 18px;
margin: 0;
padding: 0;
background: transparent;
border: 1px solid rgba(59, 130, 246, 0.3);
border-radius: 4px;
appearance: none;
-webkit-appearance: none;
-moz-appearance: none;
position: relative;
cursor: pointer;
transition: all 0.2s ease;
}
.remember-me uni-checkbox[data-v-68542e3f]:checked {
background: #3b82f6;
border-color: #3b82f6;
}
.remember-me uni-checkbox[data-v-68542e3f]:checked::after {
content: '✓';
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
color: white;
font-size: 12px;
font-weight: bold;
}
.remember-me uni-checkbox[data-v-68542e3f]:focus {
outline: none;
box-shadow: 0 0 0 2px rgba(59, 130, 246, 0.3);
}
.forgot-password[data-v-68542e3f] {
color: #29b6f6;
text-decoration: none;
font-weight: 500;
transition: all 0.2s ease;
}
.forgot-password[data-v-68542e3f]:hover {
color: #0288d1;
text-decoration: underline;
}
.login-btn[data-v-68542e3f] {
background: linear-gradient(135deg, #29b6f6, #0288d1);
color: white;
border: none;
width: 100%;
padding: 18px;
border-radius: 14px;
font-size: 16px;
font-weight: 600;
cursor: pointer;
transition: all 0.3s ease;
box-shadow:
0 6px 20px rgba(41, 182, 246, 0.3),
0 0 0 1px rgba(255, 255, 255, 0.2);
display: flex;
align-items: center;
justify-content: center;
gap: 10px;
letter-spacing: 0.5px;
position: relative;
overflow: hidden;
}
.login-btn[data-v-68542e3f]::before {
content: '';
position: absolute;
top: 0;
left: -100%;
width: 100%;
height: 100%;
background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.2), transparent);
transition: left 0.5s;
}
.login-btn[data-v-68542e3f]:hover:not(:disabled)::before {
left: 100%;
}
.login-btn[data-v-68542e3f]:hover:not(:disabled) {
transform: translateY(-3px);
box-shadow:
0 10px 25px rgba(41, 182, 246, 0.4),
0 0 0 1px rgba(255, 255, 255, 0.3);
background: linear-gradient(135deg, #4fc3f7, #039be5);
}
.login-btn[data-v-68542e3f]:active:not(:disabled) {
transform: translateY(0);
box-shadow:
0 4px 15px rgba(41, 182, 246, 0.3),
0 0 0 1px rgba(255, 255, 255, 0.2);
}
.login-btn[data-v-68542e3f]:disabled {
opacity: 0.7;
cursor: not-allowed;
transform: none !important;
}
.login-error[data-v-68542e3f] {
margin-top: 18px;
padding: 14px;
background: linear-gradient(135deg, rgba(255, 112, 67, 0.08), rgba(255, 112, 67, 0.05));
border: 1px solid #ffccbc;
border-radius: 12px;
color: #e64a19;
font-size: 14px;
display: flex;
align-items: center;
justify-content: center;
gap: 10px;
font-weight: 500;
box-shadow: 0 2px 8px rgba(255, 112, 67, 0.08);
}
.redirect-section[data-v-68542e3f] {
margin-top: 30px;
padding-top: 30px;
border-top: 1px solid #e1f5fe;
animation: fadeIn-68542e3f 0.5s ease;
}
@keyframes fadeIn-68542e3f {
from {
opacity: 0;
transform: translateY(15px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
.success-message[data-v-68542e3f] {
color: #00c853;
font-weight: 600;
margin-bottom: 18px;
display: flex;
align-items: center;
justify-content: center;
gap: 10px;
font-size: 15px;
}
.url-display[data-v-68542e3f] {
background: linear-gradient(135deg, #f8fdff, #e3f2fd);
padding: 15px;
border-radius: 12px;
margin-bottom: 18px;
border: 1px solid #bbdefb;
display: flex;
align-items: center;
gap: 12px;
box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05);
}
.url-display uni-input[data-v-68542e3f] {
flex: 1;
border: none;
background: transparent;
font-size: 14px;
color: #1565c0;
outline: none;
font-family: 'Monaco', 'Consolas', monospace;
font-weight: 500;
}
.copy-btn[data-v-68542e3f] {
background: white;
border: 1px solid #bbdefb;
border-radius: 8px;
padding: 9px 14px;
color: #29b6f6;
cursor: pointer;
transition: all 0.2s ease;
font-size: 14px;
box-shadow: 0 2px 5px rgba(0, 0, 0, 0.05);
}
.copy-btn[data-v-68542e3f]:hover {
background: #e3f2fd;
color: #0288d1;
border-color: #90caf9;
box-shadow: 0 3px 8px rgba(0, 0, 0, 0.08);
}
.access-btn[data-v-68542e3f] {
background: linear-gradient(135deg, #26c6da, #0097a7);
color: white;
border: none;
width: 100%;
padding: 16px;
border-radius: 12px;
font-size: 15px;
font-weight: 600;
cursor: pointer;
transition: all 0.3s ease;
box-shadow:
0 6px 20px rgba(38, 198, 218, 0.25),
0 0 0 1px rgba(255, 255, 255, 0.2);
display: flex;
align-items: center;
justify-content: center;
gap: 10px;
letter-spacing: 0.5px;
}
.access-btn[data-v-68542e3f]:hover {
transform: translateY(-2px);
box-shadow:
0 10px 25px rgba(38, 198, 218, 0.35),
0 0 0 1px rgba(255, 255, 255, 0.3);
background: linear-gradient(135deg, #4dd0e1, #00acc1);
}
.access-btn[data-v-68542e3f]:active {
transform: translateY(0);
box-shadow:
0 4px 15px rgba(38, 198, 218, 0.25),
0 0 0 1px rgba(255, 255, 255, 0.2);
}
@media (max-width: 600px) {
.container[data-v-68542e3f] {
padding: 35px 25px;
}
h1[data-v-68542e3f] {
font-size: 1.9rem;
}
.form-options[data-v-68542e3f] {
flex-direction: column;
align-items: flex-start;
gap: 15px;
}
.logo[data-v-68542e3f] {
width: 95px;
height: 95px;
}
}

View File

@@ -0,0 +1,500 @@
*[data-v-197fbf56] {
margin: 0;
padding: 0;
box-sizing: border-box;
font-family: 'PingFang SC', 'Helvetica Neue', Arial, sans-serif;
}
/* 移除全局body样式改为在main-view中设置背景 */
.main-view[data-v-197fbf56] {
z-index: 0;
min-height: 100vh;
display: flex;
align-items: center;
justify-content: center;
padding: 1rem;
position: relative;
overflow: hidden;
background: linear-gradient(135deg, #0a0e17 0%, #131826 100%);
color: #e8f4f8;
}
.container[data-v-197fbf56] {
display: flex;
flex-direction: column;
width: 100%;
max-width: 500px;
background: linear-gradient(135deg, rgba(23, 32, 56, 0.9), rgba(19, 28, 46, 0.95));
border-radius: 20px;
overflow: hidden;
box-shadow:
0 20px 50px rgba(0, 10, 30, 0.5),
0 0 0 1px rgba(59, 130, 246, 0.15),
inset 0 0 30px rgba(0, 0, 0, 0.5);
text-align: center;
align-items: center;
justify-content: center;
padding: 45px 35px;
margin: 10px;
-webkit-backdrop-filter: blur(10px);
backdrop-filter: blur(10px);
border: 1px solid rgba(59, 130, 246, 0.2);
}
.logo[data-v-197fbf56] {
width: 110px;
height: 110px;
margin: 0 auto 30px;
background: linear-gradient(135deg, rgba(23, 32, 56, 0.8), rgba(59, 130, 246, 0.2));
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-size: 40px;
box-shadow:
0 10px 30px rgba(0, 0, 0, 0.5),
0 0 0 1px rgba(59, 130, 246, 0.3),
inset 0 0 20px rgba(59, 130, 246, 0.2);
overflow: hidden;
padding: 12px;
position: relative;
}
.logo[data-v-197fbf56]::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
border-radius: 50%;
background: linear-gradient(135deg, rgba(59, 130, 246, 0.1), rgba(59, 130, 246, 0.05));
z-index: 1;
}
.logo uni-image[data-v-197fbf56] {
max-width: 100%;
max-height: 100%;
object-fit: contain;
display: block;
position: relative;
z-index: 2;
filter: drop-shadow(0 0 10px rgba(59, 130, 246, 0.5));
}
h1[data-v-197fbf56] {
font-size: 2.1rem;
font-weight: 700;
color: #60a5fa;
margin-bottom: 18px;
text-shadow: 0 0 15px rgba(96, 165, 250, 0.5);
letter-spacing: -0.3px;
}
.description[data-v-197fbf56] {
color: #93c5fd;
font-size: 0.95rem;
margin: 0 0 30px 0;
line-height: 1.6;
font-weight: 400;
opacity: 0.9;
}
.login-form[data-v-197fbf56] {
width: 100%;
}
.form-group[data-v-197fbf56] {
margin-bottom: 22px;
text-align: left;
}
.form-group uni-label[data-v-197fbf56] {
display: block;
margin-bottom: 10px;
font-weight: 500;
color: #93c5fd;
font-size: 14px;
}
.form-group uni-input[data-v-197fbf56] {
border: 1px solid rgba(59, 130, 246, 0.3);
border-radius: 12px;
width: 100%;
height: 30px;
padding-left: 8px;
}
.form-group uni-input .uni-input-input[data-v-197fbf56] {
width: 100%;
padding: 15px 20px;
border: 1px solid rgba(59, 130, 246, 0.3);
border-radius: 12px;
font-size: 15px;
transition: all 0.3s ease;
background: rgba(15, 23, 42, 0.8);
box-shadow:
inset 0 2px 10px rgba(0, 0, 0, 0.3),
0 1px 0 rgba(255, 255, 255, 0.05);
color: #e2e8f0;
}
/* 修复输入框无法选中的问题 */
.form-group uni-input .uni-input-input[data-v-197fbf56] {
pointer-events: auto !important;
user-select: auto !important;
-webkit-user-select: auto !important;
-moz-user-select: auto !important;
-ms-user-select: auto !important;
}
.form-group uni-input[data-v-197fbf56]:focus {
outline: none;
border-color: #3b82f6;
background: rgba(15, 23, 42, 0.9);
box-shadow:
0 0 0 3px rgba(59, 130, 246, 0.2),
inset 0 2px 10px rgba(0, 0, 0, 0.4);
}
.form-group uni-input[data-v-197fbf56]::-webkit-input-placeholder {
color: #64748b;
}
.form-group uni-input[data-v-197fbf56]::placeholder {
color: #64748b;
}
.form-group uni-input.error[data-v-197fbf56] {
border-color: #ef4444;
background: rgba(239, 68, 68, 0.05);
}
.error-message[data-v-197fbf56] {
color: #fca5a5;
font-size: 13px;
margin-top: 8px;
font-weight: 500;
}
.password-input[data-v-197fbf56] {
position: relative;
}
.toggle-password[data-v-197fbf56] {
position: absolute;
right: 15px;
top: 50%;
transform: translateY(-50%);
background: transparent;
color: #93c5fd;
cursor: pointer;
font-size: 15px;
transition: all 0.2s ease;
z-index: 2;
}
/* .toggle-password:hover {
color: #60a5fa;
border-color: #3b82f6;
background: rgba(30, 41, 59, 0.9);
box-shadow: 0 2px 8px rgba(59, 130, 246, 0.2);
} */
.toggle-password span[data-v-197fbf56] {
font-size: 16px;
display: inline-block;
vertical-align: middle;
}
.form-options[data-v-197fbf56] {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 28px;
font-size: 14px;
}
.remember-me[data-v-197fbf56] {
display: flex;
align-items: center;
gap: 10px;
color: #93c5fd;
cursor: pointer;
font-weight: 500;
}
.custom-checkbox[data-v-197fbf56] {
width: 18px;
height: 18px;
border: 1px solid rgba(59, 130, 246, 0.3);
border-radius: 4px;
background: transparent;
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
transition: all 0.2s ease;
}
.custom-checkbox.checked[data-v-197fbf56] {
/* background: #3b82f6; */
border-color: #3b82f6;
}
.custom-checkbox.checked i[data-v-197fbf56] {
color: white;
font-size: 12px;
}
/* 对✓字符加粗效果有限 */
/* .custom-checkbox span {
font-size: 12px;
font-weight: bold;
line-height: 1;
} */
/* checkbox样式 */
/* .remember-me uni-checkbox {
width: 18px;
height: 18px;
margin: 0;
padding: 0;
background: transparent;
border: 1px solid rgba(59, 130, 246, 0.3);
border-radius: 4px;
appearance: none;
-webkit-appearance: none;
-moz-appearance: none;
position: relative;
cursor: pointer;
transition: all 0.2s ease;
}
.remember-me uni-checkbox:checked {
background: #3b82f6;
border-color: #3b82f6;
}
.remember-me uni-checkbox:checked::after {
content: '✓';
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
color: white;
font-size: 12px;
font-weight: bold;
}
.remember-me uni-checkbox:focus {
outline: none;
box-shadow: 0 0 0 2px rgba(59, 130, 246, 0.3);
} */
.forgot-password[data-v-197fbf56] {
color: #60a5fa;
text-decoration: none;
font-weight: 500;
transition: all 0.2s ease;
}
.forgot-password[data-v-197fbf56]:hover {
color: #3b82f6;
text-decoration: underline;
}
.login-btn[data-v-197fbf56] {
background: linear-gradient(135deg, #3b82f6, #1d4ed8);
color: white;
border: none;
width: 100%;
padding: 18px;
border-radius: 14px;
font-size: 16px;
font-weight: 600;
cursor: pointer;
transition: all 0.3s ease;
box-shadow:
0 8px 25px rgba(59, 130, 246, 0.3),
0 0 0 1px rgba(255, 255, 255, 0.1);
display: flex;
align-items: center;
justify-content: center;
gap: 10px;
letter-spacing: 0.5px;
position: relative;
overflow: hidden;
}
.login-btn span[data-v-197fbf56] {
font-size: 16px;
display: inline-block;
vertical-align: middle;
}
.login-btn:disabled span[data-v-197fbf56] {
animation: spin-197fbf56 1s linear infinite;
}
@keyframes spin-197fbf56 {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
.login-btn[data-v-197fbf56]::before {
content: '';
position: absolute;
top: 0;
left: -100%;
width: 100%;
height: 100%;
background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.1), transparent);
transition: left 0.5s;
}
.login-btn[data-v-197fbf56]:hover:not(:disabled)::before {
left: 100%;
}
.login-btn[data-v-197fbf56]:hover:not(:disabled) {
transform: translateY(-3px);
box-shadow:
0 12px 30px rgba(59, 130, 246, 0.4),
0 0 0 1px rgba(255, 255, 255, 0.2);
background: linear-gradient(135deg, #60a5fa, #2563eb);
}
.login-btn[data-v-197fbf56]:active:not(:disabled) {
transform: translateY(0);
box-shadow:
0 4px 15px rgba(59, 130, 246, 0.3),
0 0 0 1px rgba(255, 255, 255, 0.1);
}
.login-btn[data-v-197fbf56]:disabled {
opacity: 0.7;
cursor: not-allowed;
transform: none !important;
}
.login-error[data-v-197fbf56] {
margin-top: 18px;
padding: 14px;
background: linear-gradient(135deg, rgba(239, 68, 68, 0.1), rgba(239, 68, 68, 0.05));
border: 1px solid rgba(239, 68, 68, 0.3);
border-radius: 12px;
color: #fca5a5;
font-size: 14px;
display: flex;
align-items: center;
justify-content: center;
gap: 10px;
font-weight: 500;
box-shadow: 0 2px 8px rgba(239, 68, 68, 0.1);
}
.login-error span[data-v-197fbf56] {
font-size: 16px;
}
.redirect-section[data-v-197fbf56] {
margin-top: 30px;
padding-top: 30px;
border-top: 1px solid rgba(59, 130, 246, 0.2);
animation: fadeIn-197fbf56 0.5s ease;
}
@keyframes fadeIn-197fbf56 {
from {
opacity: 0;
transform: translateY(15px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
.success-message[data-v-197fbf56] {
color: #4ade80;
font-weight: 600;
margin-bottom: 18px;
display: flex;
align-items: center;
justify-content: center;
gap: 10px;
font-size: 15px;
text-shadow: 0 0 10px rgba(74, 222, 128, 0.3);
}
.success-message span[data-v-197fbf56] {
font-size: 16px;
}
.url-display[data-v-197fbf56] {
background: linear-gradient(135deg, rgba(15, 23, 42, 0.8), rgba(30, 41, 59, 0.8));
padding: 15px;
border-radius: 12px;
margin-bottom: 18px;
border: 1px solid rgba(59, 130, 246, 0.3);
display: flex;
align-items: center;
gap: 12px;
box-shadow: inset 0 2px 10px rgba(0, 0, 0, 0.3);
}
.url-display uni-input[data-v-197fbf56] {
flex: 1;
border: none;
background: transparent;
font-size: 14px;
color: #60a5fa;
outline: none;
font-family: 'Monaco', 'Consolas', monospace;
font-weight: 500;
pointer-events: auto !important;
-webkit-user-select: auto !important;
user-select: auto !important;
}
.copy-btn[data-v-197fbf56] {
background: rgba(30, 41, 59, 0.8);
border: 1px solid rgba(59, 130, 246, 0.3);
border-radius: 8px;
padding: 9px 14px;
color: #93c5fd;
cursor: pointer;
transition: all 0.2s ease;
font-size: 14px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2);
display: flex;
align-items: center;
justify-content: center;
}
.copy-btn span[data-v-197fbf56] {
font-size: 16px;
}
.copy-btn[data-v-197fbf56]:hover {
background: rgba(59, 130, 246, 0.2);
color: #60a5fa;
border-color: #3b82f6;
box-shadow: 0 3px 12px rgba(0, 0, 0, 0.3);
}
.access-btn[data-v-197fbf56] {
background: linear-gradient(135deg, #0ea5e9, #0369a1);
color: white;
border: none;
width: 100%;
padding: 16px;
border-radius: 12px;
font-size: 15px;
font-weight: 600;
cursor: pointer;
transition: all 0.3s ease;
box-shadow:
0 8px 25px rgba(14, 165, 233, 0.25),
0 0 0 1px rgba(255, 255, 255, 0.1);
display: flex;
align-items: center;
justify-content: center;
gap: 10px;
letter-spacing: 0.5px;
}
.access-btn span[data-v-197fbf56] {
font-size: 16px;
}
.access-btn[data-v-197fbf56]:hover {
transform: translateY(-2px);
box-shadow:
0 12px 30px rgba(14, 165, 233, 0.35),
0 0 0 1px rgba(255, 255, 255, 0.2);
background: linear-gradient(135deg, #38bdf8, #0284c7);
}
.access-btn[data-v-197fbf56]:active {
transform: translateY(0);
box-shadow:
0 4px 15px rgba(14, 165, 233, 0.25),
0 0 0 1px rgba(255, 255, 255, 0.1);
}
@media (max-width: 600px) {
.container[data-v-197fbf56] {
padding: 35px 25px;
}
h1[data-v-197fbf56] {
font-size: 1.9rem;
}
.form-options[data-v-197fbf56] {
flex-direction: column;
align-items: flex-start;
gap: 15px;
}
.logo[data-v-197fbf56] {
width: 95px;
height: 95px;
}
.form-group uni-input uni-input[data-v-197fbf56] {
padding: 14px 16px;
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long