fix(passkey): 修复安卓端 Credential Manager 异常并增强兼容
更新说明:\n1. 优化 Passkey 注册参数(residentKey/hints),提升安卓设备兼容性。\n2. 前台与后台统一增强 Passkey 错误提示,针对 NotReadableError/小米浏览器给出明确引导。\n3. 同步更新相关前端页面逻辑与构建产物。
This commit is contained in:
@@ -12,7 +12,7 @@ import {
|
|||||||
updateAdminPassword,
|
updateAdminPassword,
|
||||||
updateAdminUsername,
|
updateAdminUsername,
|
||||||
} from '../api/admin'
|
} from '../api/admin'
|
||||||
import { createPasskey, isPasskeyAvailable } from '../utils/passkey'
|
import { createPasskey, getPasskeyClientErrorMessage, isPasskeyAvailable } from '../utils/passkey'
|
||||||
|
|
||||||
const username = ref('')
|
const username = ref('')
|
||||||
const currentPassword = ref('')
|
const currentPassword = ref('')
|
||||||
@@ -203,12 +203,9 @@ async function addPasskey() {
|
|||||||
passkeyRegisterOptionsAt.value = 0
|
passkeyRegisterOptionsAt.value = 0
|
||||||
await prefetchPasskeyRegisterOptions()
|
await prefetchPasskeyRegisterOptions()
|
||||||
const data = e?.response?.data
|
const data = e?.response?.data
|
||||||
const clientMessage = e?.message ? String(e.message) : ''
|
|
||||||
const message =
|
const message =
|
||||||
data?.error ||
|
data?.error ||
|
||||||
(e?.name === 'NotAllowedError'
|
getPasskeyClientErrorMessage(e, 'Passkey注册')
|
||||||
? `Passkey注册未完成(浏览器返回:${clientMessage || '未提供详细原因'})`
|
|
||||||
: clientMessage || 'Passkey添加失败')
|
|
||||||
ElMessage.error(message)
|
ElMessage.error(message)
|
||||||
} finally {
|
} finally {
|
||||||
passkeyAddLoading.value = false
|
passkeyAddLoading.value = false
|
||||||
|
|||||||
@@ -93,6 +93,36 @@ export function isPasskeyAvailable() {
|
|||||||
return typeof window !== 'undefined' && window.isSecureContext && !!window.PublicKeyCredential && !!navigator.credentials
|
return typeof window !== 'undefined' && window.isSecureContext && !!window.PublicKeyCredential && !!navigator.credentials
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function isMiuiBrowser() {
|
||||||
|
const ua = String(window?.navigator?.userAgent || '')
|
||||||
|
return /MiuiBrowser|XiaoMi\/MiuiBrowser/i.test(ua)
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getPasskeyClientErrorMessage(error, actionLabel = 'Passkey操作') {
|
||||||
|
const name = String(error?.name || '').trim()
|
||||||
|
const message = String(error?.message || '').trim()
|
||||||
|
|
||||||
|
if (name === 'NotAllowedError') {
|
||||||
|
return `${actionLabel}未完成(可能已取消、超时或设备未响应)`
|
||||||
|
}
|
||||||
|
|
||||||
|
if (name === 'NotReadableError') {
|
||||||
|
if (/credential manager/i.test(message) && isMiuiBrowser()) {
|
||||||
|
return '当前小米浏览器与系统凭据管理器兼容性较差,请改用系统 Chrome 或 Edge 后重试。'
|
||||||
|
}
|
||||||
|
if (/credential manager/i.test(message)) {
|
||||||
|
return '系统凭据管理器返回异常,请确认已设置系统锁屏并改用系统 Chrome/Edge 后重试。'
|
||||||
|
}
|
||||||
|
return message || `${actionLabel}失败(设备读取异常)`
|
||||||
|
}
|
||||||
|
|
||||||
|
if (name === 'SecurityError') {
|
||||||
|
return '当前环境安全策略不满足 Passkey 要求,请确认使用 HTTPS 且证书有效。'
|
||||||
|
}
|
||||||
|
|
||||||
|
return message || `${actionLabel}失败`
|
||||||
|
}
|
||||||
|
|
||||||
export async function createPasskey(rawOptions) {
|
export async function createPasskey(rawOptions) {
|
||||||
const publicKey = toCreationOptions(rawOptions)
|
const publicKey = toCreationOptions(rawOptions)
|
||||||
const credential = await navigator.credentials.create({ publicKey })
|
const credential = await navigator.credentials.create({ publicKey })
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ import {
|
|||||||
updateEmailNotify,
|
updateEmailNotify,
|
||||||
} from '../api/settings'
|
} from '../api/settings'
|
||||||
import { useUserStore } from '../stores/user'
|
import { useUserStore } from '../stores/user'
|
||||||
import { createPasskey, isPasskeyAvailable } from '../utils/passkey'
|
import { createPasskey, getPasskeyClientErrorMessage, isPasskeyAvailable } from '../utils/passkey'
|
||||||
import { validateStrongPassword } from '../utils/password'
|
import { validateStrongPassword } from '../utils/password'
|
||||||
|
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
@@ -384,12 +384,9 @@ async function onAddPasskey() {
|
|||||||
passkeyRegisterOptionsAt.value = 0
|
passkeyRegisterOptionsAt.value = 0
|
||||||
await prefetchPasskeyRegisterOptions()
|
await prefetchPasskeyRegisterOptions()
|
||||||
const data = e?.response?.data
|
const data = e?.response?.data
|
||||||
const clientMessage = e?.message ? String(e.message) : ''
|
|
||||||
const message =
|
const message =
|
||||||
data?.error ||
|
data?.error ||
|
||||||
(e?.name === 'NotAllowedError'
|
getPasskeyClientErrorMessage(e, 'Passkey注册')
|
||||||
? `Passkey注册未完成(浏览器返回:${clientMessage || '未提供详细原因'})`
|
|
||||||
: clientMessage || 'Passkey添加失败')
|
|
||||||
ElMessage.error(message)
|
ElMessage.error(message)
|
||||||
} finally {
|
} finally {
|
||||||
passkeyAddLoading.value = false
|
passkeyAddLoading.value = false
|
||||||
|
|||||||
@@ -110,6 +110,36 @@ export function isPasskeyAvailable() {
|
|||||||
return typeof window !== 'undefined' && window.isSecureContext && !!window.PublicKeyCredential && !!navigator.credentials
|
return typeof window !== 'undefined' && window.isSecureContext && !!window.PublicKeyCredential && !!navigator.credentials
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function isMiuiBrowser() {
|
||||||
|
const ua = String(window?.navigator?.userAgent || '')
|
||||||
|
return /MiuiBrowser|XiaoMi\/MiuiBrowser/i.test(ua)
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getPasskeyClientErrorMessage(error, actionLabel = 'Passkey操作') {
|
||||||
|
const name = String(error?.name || '').trim()
|
||||||
|
const message = String(error?.message || '').trim()
|
||||||
|
|
||||||
|
if (name === 'NotAllowedError') {
|
||||||
|
return `${actionLabel}未完成(可能已取消、超时或设备未响应)`
|
||||||
|
}
|
||||||
|
|
||||||
|
if (name === 'NotReadableError') {
|
||||||
|
if (/credential manager/i.test(message) && isMiuiBrowser()) {
|
||||||
|
return '当前小米浏览器与系统凭据管理器兼容性较差,请改用系统 Chrome 或 Edge 后重试。'
|
||||||
|
}
|
||||||
|
if (/credential manager/i.test(message)) {
|
||||||
|
return '系统凭据管理器返回异常,请确认已设置系统锁屏并改用系统 Chrome/Edge 后重试。'
|
||||||
|
}
|
||||||
|
return message || `${actionLabel}失败(设备读取异常)`
|
||||||
|
}
|
||||||
|
|
||||||
|
if (name === 'SecurityError') {
|
||||||
|
return '当前环境安全策略不满足 Passkey 要求,请确认使用 HTTPS 且证书有效。'
|
||||||
|
}
|
||||||
|
|
||||||
|
return message || `${actionLabel}失败`
|
||||||
|
}
|
||||||
|
|
||||||
export async function createPasskey(rawOptions) {
|
export async function createPasskey(rawOptions) {
|
||||||
const publicKey = toCreationOptions(rawOptions)
|
const publicKey = toCreationOptions(rawOptions)
|
||||||
const credential = await navigator.credentials.create({ publicKey })
|
const credential = await navigator.credentials.create({ publicKey })
|
||||||
|
|||||||
@@ -21,7 +21,10 @@ from webauthn.helpers import (
|
|||||||
parse_registration_credential_json,
|
parse_registration_credential_json,
|
||||||
)
|
)
|
||||||
from webauthn.helpers.structs import (
|
from webauthn.helpers.structs import (
|
||||||
|
AuthenticatorSelectionCriteria,
|
||||||
|
PublicKeyCredentialHint,
|
||||||
PublicKeyCredentialDescriptor,
|
PublicKeyCredentialDescriptor,
|
||||||
|
ResidentKeyRequirement,
|
||||||
UserVerificationRequirement,
|
UserVerificationRequirement,
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -98,6 +101,12 @@ def make_registration_options(
|
|||||||
if credential_id
|
if credential_id
|
||||||
]
|
]
|
||||||
|
|
||||||
|
authenticator_selection = AuthenticatorSelectionCriteria(
|
||||||
|
resident_key=ResidentKeyRequirement.PREFERRED,
|
||||||
|
require_resident_key=False,
|
||||||
|
user_verification=UserVerificationRequirement.PREFERRED,
|
||||||
|
)
|
||||||
|
|
||||||
options = generate_registration_options(
|
options = generate_registration_options(
|
||||||
rp_id=rp_id,
|
rp_id=rp_id,
|
||||||
rp_name=rp_name,
|
rp_name=rp_name,
|
||||||
@@ -105,7 +114,12 @@ def make_registration_options(
|
|||||||
user_display_name=user_display_name,
|
user_display_name=user_display_name,
|
||||||
user_id=user_id_bytes,
|
user_id=user_id_bytes,
|
||||||
timeout=120000,
|
timeout=120000,
|
||||||
|
authenticator_selection=authenticator_selection,
|
||||||
exclude_credentials=exclude_credentials,
|
exclude_credentials=exclude_credentials,
|
||||||
|
hints=[
|
||||||
|
PublicKeyCredentialHint.CLIENT_DEVICE,
|
||||||
|
PublicKeyCredentialHint.HYBRID,
|
||||||
|
],
|
||||||
)
|
)
|
||||||
return _to_public_key_options_json(options)
|
return _to_public_key_options_json(options)
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"_MetricGrid-R-_JZS_i.js": {
|
"_MetricGrid-COFDfeGs.js": {
|
||||||
"file": "assets/MetricGrid-R-_JZS_i.js",
|
"file": "assets/MetricGrid-COFDfeGs.js",
|
||||||
"name": "MetricGrid",
|
"name": "MetricGrid",
|
||||||
"imports": [
|
"imports": [
|
||||||
"index.html",
|
"index.html",
|
||||||
@@ -14,29 +14,29 @@
|
|||||||
"file": "assets/MetricGrid-yP_dkP6X.css",
|
"file": "assets/MetricGrid-yP_dkP6X.css",
|
||||||
"src": "_MetricGrid-yP_dkP6X.css"
|
"src": "_MetricGrid-yP_dkP6X.css"
|
||||||
},
|
},
|
||||||
"_email-DX46gPSl.js": {
|
"_email-BoZeA2tF.js": {
|
||||||
"file": "assets/email-DX46gPSl.js",
|
"file": "assets/email-BoZeA2tF.js",
|
||||||
"name": "email",
|
"name": "email",
|
||||||
"imports": [
|
"imports": [
|
||||||
"index.html"
|
"index.html"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"_system-CeJP0y2Z.js": {
|
"_system-Dluvi0rE.js": {
|
||||||
"file": "assets/system-CeJP0y2Z.js",
|
"file": "assets/system-Dluvi0rE.js",
|
||||||
"name": "system",
|
"name": "system",
|
||||||
"imports": [
|
"imports": [
|
||||||
"index.html"
|
"index.html"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"_tasks-DaPM55hg.js": {
|
"_tasks-D5YLLzN-.js": {
|
||||||
"file": "assets/tasks-DaPM55hg.js",
|
"file": "assets/tasks-D5YLLzN-.js",
|
||||||
"name": "tasks",
|
"name": "tasks",
|
||||||
"imports": [
|
"imports": [
|
||||||
"index.html"
|
"index.html"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"_users-DoPbHko8.js": {
|
"_users-B3RByMlV.js": {
|
||||||
"file": "assets/users-DoPbHko8.js",
|
"file": "assets/users-B3RByMlV.js",
|
||||||
"name": "users",
|
"name": "users",
|
||||||
"imports": [
|
"imports": [
|
||||||
"index.html"
|
"index.html"
|
||||||
@@ -73,7 +73,7 @@
|
|||||||
"name": "vendor-vue"
|
"name": "vendor-vue"
|
||||||
},
|
},
|
||||||
"index.html": {
|
"index.html": {
|
||||||
"file": "assets/index-BMIn4N2u.js",
|
"file": "assets/index-BwP1dZnj.js",
|
||||||
"name": "index",
|
"name": "index",
|
||||||
"src": "index.html",
|
"src": "index.html",
|
||||||
"isEntry": true,
|
"isEntry": true,
|
||||||
@@ -99,7 +99,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"src/pages/AnnouncementsPage.vue": {
|
"src/pages/AnnouncementsPage.vue": {
|
||||||
"file": "assets/AnnouncementsPage-BY4ToZ0K.js",
|
"file": "assets/AnnouncementsPage-BZcUuw5h.js",
|
||||||
"name": "AnnouncementsPage",
|
"name": "AnnouncementsPage",
|
||||||
"src": "src/pages/AnnouncementsPage.vue",
|
"src": "src/pages/AnnouncementsPage.vue",
|
||||||
"isDynamicEntry": true,
|
"isDynamicEntry": true,
|
||||||
@@ -115,14 +115,14 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"src/pages/EmailPage.vue": {
|
"src/pages/EmailPage.vue": {
|
||||||
"file": "assets/EmailPage-DLwV2mnS.js",
|
"file": "assets/EmailPage-2qqiYZlu.js",
|
||||||
"name": "EmailPage",
|
"name": "EmailPage",
|
||||||
"src": "src/pages/EmailPage.vue",
|
"src": "src/pages/EmailPage.vue",
|
||||||
"isDynamicEntry": true,
|
"isDynamicEntry": true,
|
||||||
"imports": [
|
"imports": [
|
||||||
"_email-DX46gPSl.js",
|
"_email-BoZeA2tF.js",
|
||||||
"index.html",
|
"index.html",
|
||||||
"_MetricGrid-R-_JZS_i.js",
|
"_MetricGrid-COFDfeGs.js",
|
||||||
"_vendor-element-B5S5pUKo.js",
|
"_vendor-element-B5S5pUKo.js",
|
||||||
"_vendor-vue-CVxSw_oJ.js",
|
"_vendor-vue-CVxSw_oJ.js",
|
||||||
"_vendor-axios-B9ygI19o.js",
|
"_vendor-axios-B9ygI19o.js",
|
||||||
@@ -133,13 +133,13 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"src/pages/FeedbacksPage.vue": {
|
"src/pages/FeedbacksPage.vue": {
|
||||||
"file": "assets/FeedbacksPage-BgrVN8tx.js",
|
"file": "assets/FeedbacksPage-DadToBbu.js",
|
||||||
"name": "FeedbacksPage",
|
"name": "FeedbacksPage",
|
||||||
"src": "src/pages/FeedbacksPage.vue",
|
"src": "src/pages/FeedbacksPage.vue",
|
||||||
"isDynamicEntry": true,
|
"isDynamicEntry": true,
|
||||||
"imports": [
|
"imports": [
|
||||||
"index.html",
|
"index.html",
|
||||||
"_MetricGrid-R-_JZS_i.js",
|
"_MetricGrid-COFDfeGs.js",
|
||||||
"_vendor-element-B5S5pUKo.js",
|
"_vendor-element-B5S5pUKo.js",
|
||||||
"_vendor-vue-CVxSw_oJ.js",
|
"_vendor-vue-CVxSw_oJ.js",
|
||||||
"_vendor-axios-B9ygI19o.js",
|
"_vendor-axios-B9ygI19o.js",
|
||||||
@@ -150,13 +150,13 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"src/pages/LogsPage.vue": {
|
"src/pages/LogsPage.vue": {
|
||||||
"file": "assets/LogsPage-D86va6oN.js",
|
"file": "assets/LogsPage-CsJ25c1g.js",
|
||||||
"name": "LogsPage",
|
"name": "LogsPage",
|
||||||
"src": "src/pages/LogsPage.vue",
|
"src": "src/pages/LogsPage.vue",
|
||||||
"isDynamicEntry": true,
|
"isDynamicEntry": true,
|
||||||
"imports": [
|
"imports": [
|
||||||
"_users-DoPbHko8.js",
|
"_users-B3RByMlV.js",
|
||||||
"_tasks-DaPM55hg.js",
|
"_tasks-D5YLLzN-.js",
|
||||||
"index.html",
|
"index.html",
|
||||||
"_vendor-element-B5S5pUKo.js",
|
"_vendor-element-B5S5pUKo.js",
|
||||||
"_vendor-vue-CVxSw_oJ.js",
|
"_vendor-vue-CVxSw_oJ.js",
|
||||||
@@ -168,17 +168,17 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"src/pages/ReportPage.vue": {
|
"src/pages/ReportPage.vue": {
|
||||||
"file": "assets/ReportPage-T1JNMZd3.js",
|
"file": "assets/ReportPage-mvWNEhXv.js",
|
||||||
"name": "ReportPage",
|
"name": "ReportPage",
|
||||||
"src": "src/pages/ReportPage.vue",
|
"src": "src/pages/ReportPage.vue",
|
||||||
"isDynamicEntry": true,
|
"isDynamicEntry": true,
|
||||||
"imports": [
|
"imports": [
|
||||||
"_vendor-element-B5S5pUKo.js",
|
"_vendor-element-B5S5pUKo.js",
|
||||||
"index.html",
|
"index.html",
|
||||||
"_email-DX46gPSl.js",
|
"_email-BoZeA2tF.js",
|
||||||
"_tasks-DaPM55hg.js",
|
"_tasks-D5YLLzN-.js",
|
||||||
"_system-CeJP0y2Z.js",
|
"_system-Dluvi0rE.js",
|
||||||
"_MetricGrid-R-_JZS_i.js",
|
"_MetricGrid-COFDfeGs.js",
|
||||||
"_vendor-vue-CVxSw_oJ.js",
|
"_vendor-vue-CVxSw_oJ.js",
|
||||||
"_vendor-misc-BeoNyvBp.js",
|
"_vendor-misc-BeoNyvBp.js",
|
||||||
"_vendor-axios-B9ygI19o.js"
|
"_vendor-axios-B9ygI19o.js"
|
||||||
@@ -188,13 +188,13 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"src/pages/SecurityPage.vue": {
|
"src/pages/SecurityPage.vue": {
|
||||||
"file": "assets/SecurityPage-BtFrxpZs.js",
|
"file": "assets/SecurityPage-DgYgSgTK.js",
|
||||||
"name": "SecurityPage",
|
"name": "SecurityPage",
|
||||||
"src": "src/pages/SecurityPage.vue",
|
"src": "src/pages/SecurityPage.vue",
|
||||||
"isDynamicEntry": true,
|
"isDynamicEntry": true,
|
||||||
"imports": [
|
"imports": [
|
||||||
"index.html",
|
"index.html",
|
||||||
"_MetricGrid-R-_JZS_i.js",
|
"_MetricGrid-COFDfeGs.js",
|
||||||
"_vendor-element-B5S5pUKo.js",
|
"_vendor-element-B5S5pUKo.js",
|
||||||
"_vendor-vue-CVxSw_oJ.js",
|
"_vendor-vue-CVxSw_oJ.js",
|
||||||
"_vendor-axios-B9ygI19o.js",
|
"_vendor-axios-B9ygI19o.js",
|
||||||
@@ -205,7 +205,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"src/pages/SettingsPage.vue": {
|
"src/pages/SettingsPage.vue": {
|
||||||
"file": "assets/SettingsPage-BFVngq9z.js",
|
"file": "assets/SettingsPage-za1oQElD.js",
|
||||||
"name": "SettingsPage",
|
"name": "SettingsPage",
|
||||||
"src": "src/pages/SettingsPage.vue",
|
"src": "src/pages/SettingsPage.vue",
|
||||||
"isDynamicEntry": true,
|
"isDynamicEntry": true,
|
||||||
@@ -217,16 +217,16 @@
|
|||||||
"_vendor-misc-BeoNyvBp.js"
|
"_vendor-misc-BeoNyvBp.js"
|
||||||
],
|
],
|
||||||
"css": [
|
"css": [
|
||||||
"assets/SettingsPage-qQfORNZC.css"
|
"assets/SettingsPage-BAa-Qu3q.css"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"src/pages/SystemPage.vue": {
|
"src/pages/SystemPage.vue": {
|
||||||
"file": "assets/SystemPage-eaCcaVxM.js",
|
"file": "assets/SystemPage-D_lad_h_.js",
|
||||||
"name": "SystemPage",
|
"name": "SystemPage",
|
||||||
"src": "src/pages/SystemPage.vue",
|
"src": "src/pages/SystemPage.vue",
|
||||||
"isDynamicEntry": true,
|
"isDynamicEntry": true,
|
||||||
"imports": [
|
"imports": [
|
||||||
"_system-CeJP0y2Z.js",
|
"_system-Dluvi0rE.js",
|
||||||
"index.html",
|
"index.html",
|
||||||
"_vendor-element-B5S5pUKo.js",
|
"_vendor-element-B5S5pUKo.js",
|
||||||
"_vendor-vue-CVxSw_oJ.js",
|
"_vendor-vue-CVxSw_oJ.js",
|
||||||
@@ -238,12 +238,12 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"src/pages/UsersPage.vue": {
|
"src/pages/UsersPage.vue": {
|
||||||
"file": "assets/UsersPage-o8CptFMp.js",
|
"file": "assets/UsersPage-CMgBpiWX.js",
|
||||||
"name": "UsersPage",
|
"name": "UsersPage",
|
||||||
"src": "src/pages/UsersPage.vue",
|
"src": "src/pages/UsersPage.vue",
|
||||||
"isDynamicEntry": true,
|
"isDynamicEntry": true,
|
||||||
"imports": [
|
"imports": [
|
||||||
"_users-DoPbHko8.js",
|
"_users-B3RByMlV.js",
|
||||||
"index.html",
|
"index.html",
|
||||||
"_vendor-element-B5S5pUKo.js",
|
"_vendor-element-B5S5pUKo.js",
|
||||||
"_vendor-vue-CVxSw_oJ.js",
|
"_vendor-vue-CVxSw_oJ.js",
|
||||||
|
|||||||
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
@@ -1 +1 @@
|
|||||||
import{_}from"./index-BMIn4N2u.js";import{aj as c,n as s,q as t,K as r,a3 as u,y as p,t as o,G as l,L as y,E as h,D as i,H as v,J as n,I as k,x as f}from"./vendor-vue-CVxSw_oJ.js";const b={class:"metric-top"},x={key:0,class:"metric-icon"},g={class:"metric-label"},B={class:"metric-value"},C={key:0,class:"metric-hint app-muted"},N={__name:"MetricGrid",props:{items:{type:Array,default:()=>[]},loading:{type:Boolean,default:!1},minWidth:{type:Number,default:180}},setup(a){return(V,D)=>{const d=c("el-icon"),m=c("el-skeleton");return t(),s("div",{class:"metric-grid",style:f({"--metric-min":`${a.minWidth}px`})},[(t(!0),s(r,null,u(a.items,e=>(t(),s("div",{key:e?.key||e?.label,class:p(["metric-card",`metric-tone--${e?.tone||"blue"}`])},[o("div",b,[e?.icon?(t(),s("div",x,[y(d,null,{default:h(()=>[(t(),i(v(e.icon)))]),_:2},1024)])):l("",!0),o("div",g,n(e?.label||"-"),1)]),o("div",B,[a.loading?(t(),i(m,{key:0,rows:1,animated:""})):(t(),s(r,{key:1},[k(n(e?.value??0),1)],64))]),e?.hint||e?.sub?(t(),s("div",C,n(e?.hint||e?.sub),1)):l("",!0)],2))),128))],4)}}},w=_(N,[["__scopeId","data-v-00e217d4"]]);export{w as M};
|
import{_}from"./index-BwP1dZnj.js";import{aj as c,n as s,q as t,K as r,a3 as u,y as p,t as o,G as l,L as y,E as h,D as i,H as v,J as n,I as k,x as f}from"./vendor-vue-CVxSw_oJ.js";const b={class:"metric-top"},x={key:0,class:"metric-icon"},g={class:"metric-label"},B={class:"metric-value"},C={key:0,class:"metric-hint app-muted"},N={__name:"MetricGrid",props:{items:{type:Array,default:()=>[]},loading:{type:Boolean,default:!1},minWidth:{type:Number,default:180}},setup(a){return(V,D)=>{const d=c("el-icon"),m=c("el-skeleton");return t(),s("div",{class:"metric-grid",style:f({"--metric-min":`${a.minWidth}px`})},[(t(!0),s(r,null,u(a.items,e=>(t(),s("div",{key:e?.key||e?.label,class:p(["metric-card",`metric-tone--${e?.tone||"blue"}`])},[o("div",b,[e?.icon?(t(),s("div",x,[y(d,null,{default:h(()=>[(t(),i(v(e.icon)))]),_:2},1024)])):l("",!0),o("div",g,n(e?.label||"-"),1)]),o("div",B,[a.loading?(t(),i(m,{key:0,rows:1,animated:""})):(t(),s(r,{key:1},[k(n(e?.value??0),1)],64))]),e?.hint||e?.sub?(t(),s("div",C,n(e?.hint||e?.sub),1)):l("",!0)],2))),128))],4)}}},w=_(N,[["__scopeId","data-v-00e217d4"]]);export{w as M};
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
1
static/admin/assets/SettingsPage-BAa-Qu3q.css
Normal file
1
static/admin/assets/SettingsPage-BAa-Qu3q.css
Normal file
@@ -0,0 +1 @@
|
|||||||
|
.page-stack[data-v-fb202365]{display:flex;flex-direction:column;gap:14px;min-width:0}.card[data-v-fb202365]{border-radius:var(--app-radius);border:1px solid var(--app-border);background:var(--app-card-bg);box-shadow:var(--app-shadow-soft)}.section-title[data-v-fb202365]{margin:0 0 12px;font-size:15px;font-weight:800;letter-spacing:.2px}.help[data-v-fb202365]{margin-top:10px;font-size:12px;color:var(--app-muted)}.help-alert[data-v-fb202365]{margin-bottom:12px}
|
||||||
File diff suppressed because one or more lines are too long
@@ -1 +0,0 @@
|
|||||||
.page-stack[data-v-bb93be75]{display:flex;flex-direction:column;gap:14px;min-width:0}.card[data-v-bb93be75]{border-radius:var(--app-radius);border:1px solid var(--app-border);background:var(--app-card-bg);box-shadow:var(--app-shadow-soft)}.section-title[data-v-bb93be75]{margin:0 0 12px;font-size:15px;font-weight:800;letter-spacing:.2px}.help[data-v-bb93be75]{margin-top:10px;font-size:12px;color:var(--app-muted)}.help-alert[data-v-bb93be75]{margin-bottom:12px}
|
|
||||||
1
static/admin/assets/SettingsPage-za1oQElD.js
Normal file
1
static/admin/assets/SettingsPage-za1oQElD.js
Normal file
File diff suppressed because one or more lines are too long
@@ -1,4 +1,4 @@
|
|||||||
import{f as Ce,u as ne}from"./system-CeJP0y2Z.js";import{a as C,_ as Se}from"./index-BMIn4N2u.js";import{E as me,a as m}from"./vendor-element-B5S5pUKo.js";import{r as n,c as le,l as Pe,R as Ie,o as Ae,aj as p,ap as Ne,F as De,q as P,n as I,t as o,L as a,E as s,I as f,G as ae,y as Ke,J as te}from"./vendor-vue-CVxSw_oJ.js";import"./vendor-axios-B9ygI19o.js";import"./vendor-misc-BeoNyvBp.js";async function ue(r={},c={}){const{data:v}=await C.get("/kdocs/status",{params:r,...c});return v}async function Ee(r={}){const c={force:!0,...r},{data:v}=await C.post("/kdocs/qr",c);return v}async function Le(){const{data:r}=await C.post("/kdocs/clear-login",{});return r}async function Qe(){const{data:r}=await C.get("/proxy/config");return r}async function Te(r){const{data:c}=await C.post("/proxy/config",r);return c}async function qe(r){const{data:c}=await C.post("/proxy/test",r);return c}const Be={class:"page-stack"},$e={class:"config-grid"},Re={class:"row-actions"},Me={class:"row-actions"},Fe={class:"row-actions"},he={class:"section-head"},ze={class:"status-inline app-muted"},He={key:0,class:"status-dots","aria-hidden":"true"},Ge={class:"kdocs-inline"},Oe={class:"kdocs-range"},je={class:"row-actions"},Je={key:0,class:"help"},We={key:1,class:"help"},Xe={class:"kdocs-qr"},Ye=["src"],Ze={__name:"SystemPage",setup(r){const c=n(!1),v=n(2),A=n(1),N=n(3),D=n(120),S=n(!1),_=n(""),K=n(3),E=n(!1),L=n(10),Q=n(7),T=n(!1),q=n(""),B=n(""),$=n(""),R=n(0),M=n("A"),F=n("D"),h=n(0),z=n(0),H=n(!1),G=n(""),y=n({}),k=n(!1),b=n(""),oe=n(!1),x=n(!1),w=n(!1),U=n(!1),O=n(!1),j=n("");let J=null;const de=le(()=>x.value||w.value||U.value),se=le(()=>O.value||x.value||oe.value),W=le(()=>{if(se.value)return"检测中";const l=y.value||{};return l?.logged_in===!0||l?.last_login_ok===!0?"已登录":l?.logged_in===!1||l?.last_login_ok===!1||l?.login_required===!0?"未登录":l?.last_error?"异常":"未知"}),ce=le(()=>se.value?"is-checking":W.value==="已登录"?"is-online":W.value==="未登录"?"is-offline":W.value==="异常"?"is-error":"is-unknown");function d(l){if(!l){j.value="";return}const e=new Date().toLocaleTimeString("zh-CN",{hour12:!1});j.value=`${l} (${e})`}async function ve(){c.value=!0;try{const[l,e]=await Promise.all([Ce(),Qe()]);v.value=l.max_concurrent_global??2,A.value=l.max_concurrent_per_account??1,N.value=l.max_screenshot_concurrent??3,D.value=l.db_slow_query_ms??120,E.value=(l.auto_approve_enabled??0)===1,L.value=l.auto_approve_hourly_limit??10,Q.value=l.auto_approve_vip_days??7,S.value=(e.proxy_enabled??0)===1,_.value=e.proxy_api_url||"",K.value=e.proxy_expire_minutes??3,T.value=(l.kdocs_enabled??0)===1,q.value=l.kdocs_doc_url||"",B.value=l.kdocs_default_unit||"",$.value=l.kdocs_sheet_name||"",R.value=l.kdocs_sheet_index??0,M.value=(l.kdocs_unit_column||"A").toUpperCase(),F.value=(l.kdocs_image_column||"D").toUpperCase(),h.value=l.kdocs_row_start??0,z.value=l.kdocs_row_end??0,H.value=(l.kdocs_admin_notify_enabled??0)===1,G.value=l.kdocs_admin_notify_email||""}catch{}finally{c.value=!1}pe()}async function pe(){if(!(O.value||x.value)){O.value=!0;try{const l=await ue({},{__silent:!0,__no_retry:!0,timeout:8e3});y.value=l||{}}catch{}finally{O.value=!1}}}async function fe(){const l={max_concurrent_global:Number(v.value),max_concurrent_per_account:Number(A.value),max_screenshot_concurrent:Number(N.value),db_slow_query_ms:Number(D.value)};try{await me.confirm(`确定更新并发配置吗?
|
import{f as Ce,u as ne}from"./system-Dluvi0rE.js";import{a as C,_ as Se}from"./index-BwP1dZnj.js";import{E as me,a as m}from"./vendor-element-B5S5pUKo.js";import{r as n,c as le,l as Pe,R as Ie,o as Ae,aj as p,ap as Ne,F as De,q as P,n as I,t as o,L as a,E as s,I as f,G as ae,y as Ke,J as te}from"./vendor-vue-CVxSw_oJ.js";import"./vendor-axios-B9ygI19o.js";import"./vendor-misc-BeoNyvBp.js";async function ue(r={},c={}){const{data:v}=await C.get("/kdocs/status",{params:r,...c});return v}async function Ee(r={}){const c={force:!0,...r},{data:v}=await C.post("/kdocs/qr",c);return v}async function Le(){const{data:r}=await C.post("/kdocs/clear-login",{});return r}async function Qe(){const{data:r}=await C.get("/proxy/config");return r}async function Te(r){const{data:c}=await C.post("/proxy/config",r);return c}async function qe(r){const{data:c}=await C.post("/proxy/test",r);return c}const Be={class:"page-stack"},$e={class:"config-grid"},Re={class:"row-actions"},Me={class:"row-actions"},Fe={class:"row-actions"},he={class:"section-head"},ze={class:"status-inline app-muted"},He={key:0,class:"status-dots","aria-hidden":"true"},Ge={class:"kdocs-inline"},Oe={class:"kdocs-range"},je={class:"row-actions"},Je={key:0,class:"help"},We={key:1,class:"help"},Xe={class:"kdocs-qr"},Ye=["src"],Ze={__name:"SystemPage",setup(r){const c=n(!1),v=n(2),A=n(1),N=n(3),D=n(120),S=n(!1),_=n(""),K=n(3),E=n(!1),L=n(10),Q=n(7),T=n(!1),q=n(""),B=n(""),$=n(""),R=n(0),M=n("A"),F=n("D"),h=n(0),z=n(0),H=n(!1),G=n(""),y=n({}),k=n(!1),b=n(""),oe=n(!1),x=n(!1),w=n(!1),U=n(!1),O=n(!1),j=n("");let J=null;const de=le(()=>x.value||w.value||U.value),se=le(()=>O.value||x.value||oe.value),W=le(()=>{if(se.value)return"检测中";const l=y.value||{};return l?.logged_in===!0||l?.last_login_ok===!0?"已登录":l?.logged_in===!1||l?.last_login_ok===!1||l?.login_required===!0?"未登录":l?.last_error?"异常":"未知"}),ce=le(()=>se.value?"is-checking":W.value==="已登录"?"is-online":W.value==="未登录"?"is-offline":W.value==="异常"?"is-error":"is-unknown");function d(l){if(!l){j.value="";return}const e=new Date().toLocaleTimeString("zh-CN",{hour12:!1});j.value=`${l} (${e})`}async function ve(){c.value=!0;try{const[l,e]=await Promise.all([Ce(),Qe()]);v.value=l.max_concurrent_global??2,A.value=l.max_concurrent_per_account??1,N.value=l.max_screenshot_concurrent??3,D.value=l.db_slow_query_ms??120,E.value=(l.auto_approve_enabled??0)===1,L.value=l.auto_approve_hourly_limit??10,Q.value=l.auto_approve_vip_days??7,S.value=(e.proxy_enabled??0)===1,_.value=e.proxy_api_url||"",K.value=e.proxy_expire_minutes??3,T.value=(l.kdocs_enabled??0)===1,q.value=l.kdocs_doc_url||"",B.value=l.kdocs_default_unit||"",$.value=l.kdocs_sheet_name||"",R.value=l.kdocs_sheet_index??0,M.value=(l.kdocs_unit_column||"A").toUpperCase(),F.value=(l.kdocs_image_column||"D").toUpperCase(),h.value=l.kdocs_row_start??0,z.value=l.kdocs_row_end??0,H.value=(l.kdocs_admin_notify_enabled??0)===1,G.value=l.kdocs_admin_notify_email||""}catch{}finally{c.value=!1}pe()}async function pe(){if(!(O.value||x.value)){O.value=!0;try{const l=await ue({},{__silent:!0,__no_retry:!0,timeout:8e3});y.value=l||{}}catch{}finally{O.value=!1}}}async function fe(){const l={max_concurrent_global:Number(v.value),max_concurrent_per_account:Number(A.value),max_screenshot_concurrent:Number(N.value),db_slow_query_ms:Number(D.value)};try{await me.confirm(`确定更新并发配置吗?
|
||||||
|
|
||||||
全局并发数: ${l.max_concurrent_global}
|
全局并发数: ${l.max_concurrent_global}
|
||||||
单账号并发数: ${l.max_concurrent_per_account}
|
单账号并发数: ${l.max_concurrent_per_account}
|
||||||
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
|
|||||||
import{c as s,a as e}from"./index-BMIn4N2u.js";const n=s(async()=>{const{data:a}=await e.get("/email/stats");return a},1e4);async function i(){const{data:a}=await e.get("/email/settings");return a}async function r(a){const{data:t}=await e.post("/email/settings",a);return n.clear(),t}async function o(a={}){return n.run(a)}async function l(a){const{data:t}=await e.get("/email/logs",{params:a});return t}async function u(a){const{data:t}=await e.post("/email/logs/cleanup",{days:a});return n.clear(),t}export{l as a,i as b,u as c,o as f,r as u};
|
import{c as s,a as e}from"./index-BwP1dZnj.js";const n=s(async()=>{const{data:a}=await e.get("/email/stats");return a},1e4);async function i(){const{data:a}=await e.get("/email/settings");return a}async function r(a){const{data:t}=await e.post("/email/settings",a);return n.clear(),t}async function o(a={}){return n.run(a)}async function l(a){const{data:t}=await e.get("/email/logs",{params:a});return t}async function u(a){const{data:t}=await e.post("/email/logs/cleanup",{days:a});return n.clear(),t}export{l as a,i as b,u as c,o as f,r as u};
|
||||||
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
|
|||||||
import{c as s,a}from"./index-BMIn4N2u.js";const e=s(async()=>{const{data:t}=await a.get("/system/config");return t},15e3);async function o(t={}){return e.run(t)}async function r(t){const{data:n}=await a.post("/system/config",t);return e.clear(),n}export{o as f,r as u};
|
import{c as s,a}from"./index-BwP1dZnj.js";const e=s(async()=>{const{data:t}=await a.get("/system/config");return t},15e3);async function o(t={}){return e.run(t)}async function r(t){const{data:n}=await a.post("/system/config",t);return e.clear(),n}export{o as f,r as u};
|
||||||
@@ -1 +1 @@
|
|||||||
import{c as s,a}from"./index-BMIn4N2u.js";const c=s(async()=>{const{data:t}=await a.get("/server/info");return t},3e4),o=s(async()=>{const{data:t}=await a.get("/docker_stats");return t},8e3),u=s(async()=>{const{data:t}=await a.get("/request_metrics");return t},1e4),i=s(async()=>{const{data:t}=await a.get("/slow_sql_metrics");return t},1e4),e=s(async()=>{const{data:t}=await a.get("/task/stats");return t},4e3),r=s(async()=>{const{data:t}=await a.get("/task/running");return t},2e3);async function g(t={}){return c.run(t)}async function y(t={}){return o.run(t)}async function d(t={}){return u.run(t)}async function k(t={}){return i.run(t)}async function l(t={}){return e.run(t)}async function w(t={}){return r.run(t)}async function _(t){const{data:n}=await a.get("/task/logs",{params:t});return n}async function h(t){const{data:n}=await a.post("/task/logs/clear",{days:t});return e.clear(),r.clear(),n}export{w as a,g as b,y as c,d,k as e,l as f,_ as g,h};
|
import{c as s,a}from"./index-BwP1dZnj.js";const c=s(async()=>{const{data:t}=await a.get("/server/info");return t},3e4),o=s(async()=>{const{data:t}=await a.get("/docker_stats");return t},8e3),u=s(async()=>{const{data:t}=await a.get("/request_metrics");return t},1e4),i=s(async()=>{const{data:t}=await a.get("/slow_sql_metrics");return t},1e4),e=s(async()=>{const{data:t}=await a.get("/task/stats");return t},4e3),r=s(async()=>{const{data:t}=await a.get("/task/running");return t},2e3);async function g(t={}){return c.run(t)}async function y(t={}){return o.run(t)}async function d(t={}){return u.run(t)}async function k(t={}){return i.run(t)}async function l(t={}){return e.run(t)}async function w(t={}){return r.run(t)}async function _(t){const{data:n}=await a.get("/task/logs",{params:t});return n}async function h(t){const{data:n}=await a.post("/task/logs/clear",{days:t});return e.clear(),r.clear(),n}export{w as a,g as b,y as c,d,k as e,l as f,_ as g,h};
|
||||||
@@ -1 +1 @@
|
|||||||
import{a as t}from"./index-BMIn4N2u.js";async function n(){const{data:s}=await t.get("/users");return s}async function o(s){const{data:a}=await t.post(`/users/${s}/approve`);return a}async function c(s){const{data:a}=await t.post(`/users/${s}/reject`);return a}async function i(s){const{data:a}=await t.delete(`/users/${s}`);return a}async function u(s,a){const{data:e}=await t.post(`/users/${s}/vip`,{days:a});return e}async function p(s){const{data:a}=await t.delete(`/users/${s}/vip`);return a}async function d(s,a){const{data:e}=await t.post(`/users/${s}/reset_password`,{new_password:a});return e}export{o as a,p as b,d as c,i as d,n as f,c as r,u as s};
|
import{a as t}from"./index-BwP1dZnj.js";async function n(){const{data:s}=await t.get("/users");return s}async function o(s){const{data:a}=await t.post(`/users/${s}/approve`);return a}async function c(s){const{data:a}=await t.post(`/users/${s}/reject`);return a}async function i(s){const{data:a}=await t.delete(`/users/${s}`);return a}async function u(s,a){const{data:e}=await t.post(`/users/${s}/vip`,{days:a});return e}async function p(s){const{data:a}=await t.delete(`/users/${s}/vip`);return a}async function d(s,a){const{data:e}=await t.post(`/users/${s}/reset_password`,{new_password:a});return e}export{o as a,p as b,d as c,i as d,n as f,c as r,u as s};
|
||||||
@@ -5,7 +5,7 @@
|
|||||||
<link rel="icon" type="image/svg+xml" href="./vite.svg" />
|
<link rel="icon" type="image/svg+xml" href="./vite.svg" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
<title>后台管理 - 知识管理平台</title>
|
<title>后台管理 - 知识管理平台</title>
|
||||||
<script type="module" crossorigin src="./assets/index-BMIn4N2u.js"></script>
|
<script type="module" crossorigin src="./assets/index-BwP1dZnj.js"></script>
|
||||||
<link rel="modulepreload" crossorigin href="./assets/vendor-vue-CVxSw_oJ.js">
|
<link rel="modulepreload" crossorigin href="./assets/vendor-vue-CVxSw_oJ.js">
|
||||||
<link rel="modulepreload" crossorigin href="./assets/vendor-misc-BeoNyvBp.js">
|
<link rel="modulepreload" crossorigin href="./assets/vendor-misc-BeoNyvBp.js">
|
||||||
<link rel="modulepreload" crossorigin href="./assets/vendor-element-B5S5pUKo.js">
|
<link rel="modulepreload" crossorigin href="./assets/vendor-element-B5S5pUKo.js">
|
||||||
|
|||||||
@@ -193,7 +193,7 @@
|
|||||||
"name": "vendor-vue"
|
"name": "vendor-vue"
|
||||||
},
|
},
|
||||||
"index.html": {
|
"index.html": {
|
||||||
"file": "assets/app-CfFNNMbF.js",
|
"file": "assets/app-Cm7xb8k5.js",
|
||||||
"name": "app",
|
"name": "app",
|
||||||
"src": "index.html",
|
"src": "index.html",
|
||||||
"isEntry": true,
|
"isEntry": true,
|
||||||
@@ -224,7 +224,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"src/layouts/AppLayout.vue": {
|
"src/layouts/AppLayout.vue": {
|
||||||
"file": "assets/AppLayout-BVxPO9-W.js",
|
"file": "assets/AppLayout-CJ_Pqzl7.js",
|
||||||
"name": "AppLayout",
|
"name": "AppLayout",
|
||||||
"src": "src/layouts/AppLayout.vue",
|
"src": "src/layouts/AppLayout.vue",
|
||||||
"isDynamicEntry": true,
|
"isDynamicEntry": true,
|
||||||
@@ -242,7 +242,7 @@
|
|||||||
"_vendor-axios-B9ygI19o.js"
|
"_vendor-axios-B9ygI19o.js"
|
||||||
],
|
],
|
||||||
"css": [
|
"css": [
|
||||||
"assets/AppLayout-eF3aodBF.css"
|
"assets/AppLayout-B8xVcK25.css"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"src/pages/AccountsPage.vue": {
|
"src/pages/AccountsPage.vue": {
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,2 +1,2 @@
|
|||||||
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./LoginPage-D5iXLq7p.js","./vendor-vue-DxN60LNb.js","./style-CEbARg1o.js","./style-BHGuKLUF.css","./LoginPage-DTj5KeC4.css","./RegisterPage-4xFnBJCQ.js","./el-button-DWxIvzz-.js","./el-button-DF1Fi_iE.css","./el-card-DfVpO1U5.js","./el-card-BqOrgVp1.css","./el-alert-DB2IQLpH.js","./http-CdvgQxJu.js","./vendor-axios-B9ygI19o.js","./http-D6B3r8CH.css","./el-alert-B-NgiIln.css","./auth-CX9p6ZYg.js","./password-7ryi82gE.js","./RegisterPage-BOcNcW5D.css","./ResetPasswordPage-lX7l6Nbu.js","./ResetPasswordPage-DybfLMAw.css","./VerifyResultPage-bifpPyoE.js","./VerifyResultPage-efSXaaKI.css","./AppLayout-BVxPO9-W.js","./user-Bl59IefW.js","./el-overlay-C_JJBVfE.js","./el-overlay-Bd56Lw6C.css","./user-B7bO5p8k.css","./settings-Ddo8isuv.js","./isArrayLikeObject-BjIRF-cS.js","./AppLayout-eF3aodBF.css","./AccountsPage-DnOxRP7e.js","./accounts-3bM7Wy59.js","./accounts-D_6SYB2i.css","./el-select-B0VMg2td.js","./el-select-D_oyzAZN.css","./vendor-realtime-CA1CrNgP.js","./AccountsPage-iiBFNme8.css","./SchedulesPage-TUv7nqYq.js","./el-pagination-BY1uI-wO.js","./el-pagination-B1FwbX1n.css","./SchedulesPage-BIuHs5oJ.css","./ScreenshotsPage-7CRd3Hlo.js","./ScreenshotsPage-30dzddw-.css"])))=>i.map(i=>d[i]);
|
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./LoginPage-D5iXLq7p.js","./vendor-vue-DxN60LNb.js","./style-CEbARg1o.js","./style-BHGuKLUF.css","./LoginPage-DTj5KeC4.css","./RegisterPage-4xFnBJCQ.js","./el-button-DWxIvzz-.js","./el-button-DF1Fi_iE.css","./el-card-DfVpO1U5.js","./el-card-BqOrgVp1.css","./el-alert-DB2IQLpH.js","./http-CdvgQxJu.js","./vendor-axios-B9ygI19o.js","./http-D6B3r8CH.css","./el-alert-B-NgiIln.css","./auth-CX9p6ZYg.js","./password-7ryi82gE.js","./RegisterPage-BOcNcW5D.css","./ResetPasswordPage-lX7l6Nbu.js","./ResetPasswordPage-DybfLMAw.css","./VerifyResultPage-bifpPyoE.js","./VerifyResultPage-efSXaaKI.css","./AppLayout-CJ_Pqzl7.js","./user-Bl59IefW.js","./el-overlay-C_JJBVfE.js","./el-overlay-Bd56Lw6C.css","./user-B7bO5p8k.css","./settings-Ddo8isuv.js","./isArrayLikeObject-BjIRF-cS.js","./AppLayout-B8xVcK25.css","./AccountsPage-DnOxRP7e.js","./accounts-3bM7Wy59.js","./accounts-D_6SYB2i.css","./el-select-B0VMg2td.js","./el-select-D_oyzAZN.css","./vendor-realtime-CA1CrNgP.js","./AccountsPage-iiBFNme8.css","./SchedulesPage-TUv7nqYq.js","./el-pagination-BY1uI-wO.js","./el-pagination-B1FwbX1n.css","./SchedulesPage-BIuHs5oJ.css","./ScreenshotsPage-7CRd3Hlo.js","./ScreenshotsPage-30dzddw-.css"])))=>i.map(i=>d[i]);
|
||||||
import{_ as v}from"./style-CEbARg1o.js";import{r as g,c as R,o as y,a as A,b as L,d as w,e as k}from"./vendor-vue-DxN60LNb.js";const V={};function O(p,l){const a=g("RouterView");return y(),R(a)}const T=v(V,[["render",O]]),b="modulepreload",D=function(p,l){return new URL(p,l).href},f={},r=function(l,a,u){let _=Promise.resolve();if(a&&a.length>0){let P=function(e){return Promise.all(e.map(s=>Promise.resolve(s).then(c=>({status:"fulfilled",value:c}),c=>({status:"rejected",reason:c}))))};const n=document.getElementsByTagName("link"),t=document.querySelector("meta[property=csp-nonce]"),h=t?.nonce||t?.getAttribute("nonce");_=P(a.map(e=>{if(e=D(e,u),e in f)return;f[e]=!0;const s=e.endsWith(".css"),c=s?'[rel="stylesheet"]':"";if(u)for(let i=n.length-1;i>=0;i--){const m=n[i];if(m.href===e&&(!s||m.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${e}"]${c}`))return;const o=document.createElement("link");if(o.rel=s?"stylesheet":b,s||(o.as="script"),o.crossOrigin="",o.href=e,h&&o.setAttribute("nonce",h),document.head.appendChild(o),s)return new Promise((i,m)=>{o.addEventListener("load",i),o.addEventListener("error",()=>m(new Error(`Unable to preload CSS for ${e}`)))})}))}function d(n){const t=new Event("vite:preloadError",{cancelable:!0});if(t.payload=n,window.dispatchEvent(t),!t.defaultPrevented)throw n}return _.then(n=>{for(const t of n||[])t.status==="rejected"&&d(t.reason);return l().catch(d)})},I=()=>r(()=>import("./LoginPage-D5iXLq7p.js"),__vite__mapDeps([0,1,2,3,4]),import.meta.url),S=()=>r(()=>import("./RegisterPage-4xFnBJCQ.js"),__vite__mapDeps([5,6,1,7,8,9,10,11,12,13,14,15,16,2,3,17]),import.meta.url),$=()=>r(()=>import("./ResetPasswordPage-lX7l6Nbu.js"),__vite__mapDeps([18,6,1,7,8,9,10,11,12,13,14,15,16,2,3,19]),import.meta.url),E=()=>r(()=>import("./VerifyResultPage-bifpPyoE.js"),__vite__mapDeps([20,6,1,7,8,9,2,3,21]),import.meta.url),C=()=>r(()=>import("./AppLayout-BVxPO9-W.js"),__vite__mapDeps([22,6,1,7,23,11,12,13,10,14,24,25,26,27,16,2,3,28,29]),import.meta.url),B=()=>r(()=>import("./AccountsPage-DnOxRP7e.js"),__vite__mapDeps([30,6,1,7,24,11,12,13,25,10,14,23,26,31,32,33,34,8,9,27,35,2,3,36]),import.meta.url),N=()=>r(()=>import("./SchedulesPage-TUv7nqYq.js"),__vite__mapDeps([37,6,1,7,24,11,12,13,25,10,14,33,34,23,26,31,32,38,39,8,9,2,3,28,40]),import.meta.url),j=()=>r(()=>import("./ScreenshotsPage-7CRd3Hlo.js"),__vite__mapDeps([41,6,1,7,24,11,12,13,25,38,33,34,39,8,9,2,3,42]),import.meta.url),q=[{path:"/",redirect:"/login"},{path:"/login",name:"login",component:I},{path:"/register",name:"register",component:S},{path:"/reset-password/:token",name:"reset_password",component:$},{path:"/api/verify-email/:token",name:"verify_email",component:E},{path:"/api/verify-bind-email/:token",name:"verify_bind_email",component:E},{path:"/app",component:C,children:[{path:"",redirect:"/app/accounts"},{path:"accounts",name:"accounts",component:B},{path:"schedules",name:"schedules",component:N},{path:"screenshots",name:"screenshots",component:j}]},{path:"/:pathMatch(.*)*",redirect:"/login"}],x=A({history:L(),routes:q});w(T).use(k()).use(x).mount("#app");
|
import{_ as v}from"./style-CEbARg1o.js";import{r as g,c as R,o as y,a as A,b as L,d as w,e as k}from"./vendor-vue-DxN60LNb.js";const V={};function O(p,l){const a=g("RouterView");return y(),R(a)}const T=v(V,[["render",O]]),b="modulepreload",D=function(p,l){return new URL(p,l).href},f={},r=function(l,a,u){let _=Promise.resolve();if(a&&a.length>0){let P=function(e){return Promise.all(e.map(s=>Promise.resolve(s).then(c=>({status:"fulfilled",value:c}),c=>({status:"rejected",reason:c}))))};const n=document.getElementsByTagName("link"),t=document.querySelector("meta[property=csp-nonce]"),h=t?.nonce||t?.getAttribute("nonce");_=P(a.map(e=>{if(e=D(e,u),e in f)return;f[e]=!0;const s=e.endsWith(".css"),c=s?'[rel="stylesheet"]':"";if(u)for(let i=n.length-1;i>=0;i--){const m=n[i];if(m.href===e&&(!s||m.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${e}"]${c}`))return;const o=document.createElement("link");if(o.rel=s?"stylesheet":b,s||(o.as="script"),o.crossOrigin="",o.href=e,h&&o.setAttribute("nonce",h),document.head.appendChild(o),s)return new Promise((i,m)=>{o.addEventListener("load",i),o.addEventListener("error",()=>m(new Error(`Unable to preload CSS for ${e}`)))})}))}function d(n){const t=new Event("vite:preloadError",{cancelable:!0});if(t.payload=n,window.dispatchEvent(t),!t.defaultPrevented)throw n}return _.then(n=>{for(const t of n||[])t.status==="rejected"&&d(t.reason);return l().catch(d)})},I=()=>r(()=>import("./LoginPage-D5iXLq7p.js"),__vite__mapDeps([0,1,2,3,4]),import.meta.url),S=()=>r(()=>import("./RegisterPage-4xFnBJCQ.js"),__vite__mapDeps([5,6,1,7,8,9,10,11,12,13,14,15,16,2,3,17]),import.meta.url),$=()=>r(()=>import("./ResetPasswordPage-lX7l6Nbu.js"),__vite__mapDeps([18,6,1,7,8,9,10,11,12,13,14,15,16,2,3,19]),import.meta.url),E=()=>r(()=>import("./VerifyResultPage-bifpPyoE.js"),__vite__mapDeps([20,6,1,7,8,9,2,3,21]),import.meta.url),C=()=>r(()=>import("./AppLayout-CJ_Pqzl7.js"),__vite__mapDeps([22,6,1,7,23,11,12,13,10,14,24,25,26,27,16,2,3,28,29]),import.meta.url),B=()=>r(()=>import("./AccountsPage-DnOxRP7e.js"),__vite__mapDeps([30,6,1,7,24,11,12,13,25,10,14,23,26,31,32,33,34,8,9,27,35,2,3,36]),import.meta.url),N=()=>r(()=>import("./SchedulesPage-TUv7nqYq.js"),__vite__mapDeps([37,6,1,7,24,11,12,13,25,10,14,33,34,23,26,31,32,38,39,8,9,2,3,28,40]),import.meta.url),j=()=>r(()=>import("./ScreenshotsPage-7CRd3Hlo.js"),__vite__mapDeps([41,6,1,7,24,11,12,13,25,38,33,34,39,8,9,2,3,42]),import.meta.url),q=[{path:"/",redirect:"/login"},{path:"/login",name:"login",component:I},{path:"/register",name:"register",component:S},{path:"/reset-password/:token",name:"reset_password",component:$},{path:"/api/verify-email/:token",name:"verify_email",component:E},{path:"/api/verify-bind-email/:token",name:"verify_bind_email",component:E},{path:"/app",component:C,children:[{path:"",redirect:"/app/accounts"},{path:"accounts",name:"accounts",component:B},{path:"schedules",name:"schedules",component:N},{path:"screenshots",name:"screenshots",component:j}]},{path:"/:pathMatch(.*)*",redirect:"/login"}],x=A({history:L(),routes:q});w(T).use(k()).use(x).mount("#app");
|
||||||
@@ -4,7 +4,7 @@
|
|||||||
<meta charset="UTF-8" />
|
<meta charset="UTF-8" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0" />
|
||||||
<title>知识管理平台</title>
|
<title>知识管理平台</title>
|
||||||
<script type="module" crossorigin src="./assets/app-CfFNNMbF.js"></script>
|
<script type="module" crossorigin src="./assets/app-Cm7xb8k5.js"></script>
|
||||||
<link rel="modulepreload" crossorigin href="./assets/style-CEbARg1o.js">
|
<link rel="modulepreload" crossorigin href="./assets/style-CEbARg1o.js">
|
||||||
<link rel="modulepreload" crossorigin href="./assets/vendor-vue-DxN60LNb.js">
|
<link rel="modulepreload" crossorigin href="./assets/vendor-vue-DxN60LNb.js">
|
||||||
<link rel="stylesheet" crossorigin href="./assets/style-BHGuKLUF.css">
|
<link rel="stylesheet" crossorigin href="./assets/style-BHGuKLUF.css">
|
||||||
|
|||||||
Reference in New Issue
Block a user