Add KDocs action feedback
This commit is contained in:
@@ -44,6 +44,10 @@ const kdocsStatus = ref({})
|
||||
const kdocsQrOpen = ref(false)
|
||||
const kdocsQrImage = ref('')
|
||||
const kdocsPolling = ref(false)
|
||||
const kdocsStatusLoading = ref(false)
|
||||
const kdocsQrLoading = ref(false)
|
||||
const kdocsClearLoading = ref(false)
|
||||
const kdocsActionHint = ref('')
|
||||
let kdocsPollingTimer = null
|
||||
|
||||
const weekdaysOptions = [
|
||||
@@ -71,12 +75,24 @@ const scheduleWeekdayDisplay = computed(() =>
|
||||
.map((d) => weekdayNames[Number(d)] || d)
|
||||
.join('、'),
|
||||
)
|
||||
const kdocsActionBusy = computed(
|
||||
() => kdocsStatusLoading.value || kdocsQrLoading.value || kdocsClearLoading.value,
|
||||
)
|
||||
|
||||
function normalizeBrowseType(value) {
|
||||
if (String(value) === '注册前未读') return '注册前未读'
|
||||
return '应读'
|
||||
}
|
||||
|
||||
function setKdocsHint(message) {
|
||||
if (!message) {
|
||||
kdocsActionHint.value = ''
|
||||
return
|
||||
}
|
||||
const time = new Date().toLocaleTimeString('zh-CN', { hour12: false })
|
||||
kdocsActionHint.value = `${message} (${time})`
|
||||
}
|
||||
|
||||
async function loadAll() {
|
||||
loading.value = true
|
||||
try {
|
||||
@@ -250,10 +266,16 @@ async function saveKdocsConfig() {
|
||||
}
|
||||
|
||||
async function refreshKdocsStatus() {
|
||||
if (kdocsStatusLoading.value) return
|
||||
kdocsStatusLoading.value = true
|
||||
setKdocsHint('正在刷新状态')
|
||||
try {
|
||||
kdocsStatus.value = await fetchKdocsStatus({ live: 1 })
|
||||
setKdocsHint('状态已刷新')
|
||||
} catch {
|
||||
// handled by interceptor
|
||||
setKdocsHint('刷新失败,请稍后重试')
|
||||
} finally {
|
||||
kdocsStatusLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
@@ -264,6 +286,7 @@ async function pollKdocsStatus() {
|
||||
const loggedIn = status?.logged_in === true || status?.last_login_ok === true
|
||||
if (loggedIn) {
|
||||
ElMessage.success('扫码成功,已登录')
|
||||
setKdocsHint('扫码成功,已登录')
|
||||
kdocsQrOpen.value = false
|
||||
stopKdocsPolling()
|
||||
}
|
||||
@@ -275,6 +298,7 @@ async function pollKdocsStatus() {
|
||||
function startKdocsPolling() {
|
||||
stopKdocsPolling()
|
||||
kdocsPolling.value = true
|
||||
setKdocsHint('扫码检测中')
|
||||
pollKdocsStatus()
|
||||
kdocsPollingTimer = setInterval(pollKdocsStatus, 2000)
|
||||
}
|
||||
@@ -288,31 +312,48 @@ function stopKdocsPolling() {
|
||||
}
|
||||
|
||||
async function onFetchKdocsQr() {
|
||||
if (kdocsQrLoading.value) return
|
||||
kdocsQrLoading.value = true
|
||||
setKdocsHint('正在获取二维码')
|
||||
try {
|
||||
kdocsQrImage.value = ''
|
||||
const res = await fetchKdocsQr()
|
||||
kdocsQrImage.value = res?.qr_image || ''
|
||||
if (!kdocsQrImage.value) {
|
||||
if (res?.logged_in) {
|
||||
ElMessage.success('当前已登录,无需扫码')
|
||||
setKdocsHint('当前已登录,无需扫码')
|
||||
await refreshKdocsStatus()
|
||||
return
|
||||
}
|
||||
ElMessage.warning('未获取到二维码')
|
||||
setKdocsHint('未获取到二维码')
|
||||
return
|
||||
}
|
||||
setKdocsHint('二维码已获取')
|
||||
kdocsQrOpen.value = true
|
||||
} catch {
|
||||
// handled by interceptor
|
||||
setKdocsHint('获取二维码失败')
|
||||
} finally {
|
||||
kdocsQrLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
async function onClearKdocsLogin() {
|
||||
if (kdocsClearLoading.value) return
|
||||
kdocsClearLoading.value = true
|
||||
setKdocsHint('正在清除登录态')
|
||||
try {
|
||||
await clearKdocsLogin()
|
||||
kdocsQrOpen.value = false
|
||||
kdocsQrImage.value = ''
|
||||
ElMessage.success('登录态已清除')
|
||||
setKdocsHint('登录态已清除')
|
||||
await refreshKdocsStatus()
|
||||
} catch {
|
||||
// handled by interceptor
|
||||
setKdocsHint('清除登录态失败')
|
||||
} finally {
|
||||
kdocsClearLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
@@ -535,9 +576,31 @@ onMounted(loadAll)
|
||||
|
||||
<div class="row-actions">
|
||||
<el-button type="primary" @click="saveKdocsConfig">保存表格配置</el-button>
|
||||
<el-button @click="refreshKdocsStatus">刷新状态</el-button>
|
||||
<el-button type="success" plain @click="onFetchKdocsQr">获取二维码</el-button>
|
||||
<el-button type="danger" plain @click="onClearKdocsLogin">清除登录</el-button>
|
||||
<el-button
|
||||
:loading="kdocsStatusLoading"
|
||||
:disabled="kdocsActionBusy && !kdocsStatusLoading"
|
||||
@click="refreshKdocsStatus"
|
||||
>
|
||||
刷新状态
|
||||
</el-button>
|
||||
<el-button
|
||||
type="success"
|
||||
plain
|
||||
:loading="kdocsQrLoading"
|
||||
:disabled="kdocsActionBusy && !kdocsQrLoading"
|
||||
@click="onFetchKdocsQr"
|
||||
>
|
||||
获取二维码
|
||||
</el-button>
|
||||
<el-button
|
||||
type="danger"
|
||||
plain
|
||||
:loading="kdocsClearLoading"
|
||||
:disabled="kdocsActionBusy && !kdocsClearLoading"
|
||||
@click="onClearKdocsLogin"
|
||||
>
|
||||
清除登录
|
||||
</el-button>
|
||||
</div>
|
||||
|
||||
<div class="help">
|
||||
@@ -548,6 +611,7 @@ onMounted(loadAll)
|
||||
· 待上传 {{ kdocsStatus.queue_size || 0 }}
|
||||
<span v-if="kdocsStatus.last_error">· 最近错误:{{ kdocsStatus.last_error }}</span>
|
||||
</div>
|
||||
<div v-if="kdocsActionHint" class="help">操作提示:{{ kdocsActionHint }}</div>
|
||||
</el-card>
|
||||
|
||||
<el-dialog v-model="kdocsQrOpen" title="扫码登录" width="min(420px, 92vw)">
|
||||
|
||||
@@ -1,34 +1,34 @@
|
||||
{
|
||||
"_email-CANx8Tja.js": {
|
||||
"file": "assets/email-CANx8Tja.js",
|
||||
"_email-BBYDqLKN.js": {
|
||||
"file": "assets/email-BBYDqLKN.js",
|
||||
"name": "email",
|
||||
"imports": [
|
||||
"index.html"
|
||||
]
|
||||
},
|
||||
"_system-CM-zje4U.js": {
|
||||
"file": "assets/system-CM-zje4U.js",
|
||||
"_system-BDTy0cf_.js": {
|
||||
"file": "assets/system-BDTy0cf_.js",
|
||||
"name": "system",
|
||||
"imports": [
|
||||
"index.html"
|
||||
]
|
||||
},
|
||||
"_tasks-MT8n16Cr.js": {
|
||||
"file": "assets/tasks-MT8n16Cr.js",
|
||||
"_tasks-CeZTKYlS.js": {
|
||||
"file": "assets/tasks-CeZTKYlS.js",
|
||||
"name": "tasks",
|
||||
"imports": [
|
||||
"index.html"
|
||||
]
|
||||
},
|
||||
"_users-BfTiBX13.js": {
|
||||
"file": "assets/users-BfTiBX13.js",
|
||||
"_users-CWMQV7em.js": {
|
||||
"file": "assets/users-CWMQV7em.js",
|
||||
"name": "users",
|
||||
"imports": [
|
||||
"index.html"
|
||||
]
|
||||
},
|
||||
"index.html": {
|
||||
"file": "assets/index-DD_NUvZR.js",
|
||||
"file": "assets/index-BDEpmftQ.js",
|
||||
"name": "index",
|
||||
"src": "index.html",
|
||||
"isEntry": true,
|
||||
@@ -48,7 +48,7 @@
|
||||
]
|
||||
},
|
||||
"src/pages/AnnouncementsPage.vue": {
|
||||
"file": "assets/AnnouncementsPage-DJV9obay.js",
|
||||
"file": "assets/AnnouncementsPage-D9Qeb7XP.js",
|
||||
"name": "AnnouncementsPage",
|
||||
"src": "src/pages/AnnouncementsPage.vue",
|
||||
"isDynamicEntry": true,
|
||||
@@ -60,12 +60,12 @@
|
||||
]
|
||||
},
|
||||
"src/pages/EmailPage.vue": {
|
||||
"file": "assets/EmailPage-D-tsUWFT.js",
|
||||
"file": "assets/EmailPage-wPg_LfpQ.js",
|
||||
"name": "EmailPage",
|
||||
"src": "src/pages/EmailPage.vue",
|
||||
"isDynamicEntry": true,
|
||||
"imports": [
|
||||
"_email-CANx8Tja.js",
|
||||
"_email-BBYDqLKN.js",
|
||||
"index.html"
|
||||
],
|
||||
"css": [
|
||||
@@ -73,7 +73,7 @@
|
||||
]
|
||||
},
|
||||
"src/pages/FeedbacksPage.vue": {
|
||||
"file": "assets/FeedbacksPage-DZUE-vHi.js",
|
||||
"file": "assets/FeedbacksPage-DZkgKcO5.js",
|
||||
"name": "FeedbacksPage",
|
||||
"src": "src/pages/FeedbacksPage.vue",
|
||||
"isDynamicEntry": true,
|
||||
@@ -85,13 +85,13 @@
|
||||
]
|
||||
},
|
||||
"src/pages/LogsPage.vue": {
|
||||
"file": "assets/LogsPage-CdMEmjzm.js",
|
||||
"file": "assets/LogsPage-CjnNneeo.js",
|
||||
"name": "LogsPage",
|
||||
"src": "src/pages/LogsPage.vue",
|
||||
"isDynamicEntry": true,
|
||||
"imports": [
|
||||
"_users-BfTiBX13.js",
|
||||
"_tasks-MT8n16Cr.js",
|
||||
"_users-CWMQV7em.js",
|
||||
"_tasks-CeZTKYlS.js",
|
||||
"index.html"
|
||||
],
|
||||
"css": [
|
||||
@@ -99,22 +99,22 @@
|
||||
]
|
||||
},
|
||||
"src/pages/ReportPage.vue": {
|
||||
"file": "assets/ReportPage-DAW30JOI.js",
|
||||
"file": "assets/ReportPage-CuHgaMnw.js",
|
||||
"name": "ReportPage",
|
||||
"src": "src/pages/ReportPage.vue",
|
||||
"isDynamicEntry": true,
|
||||
"imports": [
|
||||
"index.html",
|
||||
"_email-CANx8Tja.js",
|
||||
"_tasks-MT8n16Cr.js",
|
||||
"_system-CM-zje4U.js"
|
||||
"_email-BBYDqLKN.js",
|
||||
"_tasks-CeZTKYlS.js",
|
||||
"_system-BDTy0cf_.js"
|
||||
],
|
||||
"css": [
|
||||
"assets/ReportPage-Q8rCsG8A.css"
|
||||
]
|
||||
},
|
||||
"src/pages/SecurityPage.vue": {
|
||||
"file": "assets/SecurityPage-C21EbRZb.js",
|
||||
"file": "assets/SecurityPage-hp7dnVAc.js",
|
||||
"name": "SecurityPage",
|
||||
"src": "src/pages/SecurityPage.vue",
|
||||
"isDynamicEntry": true,
|
||||
@@ -126,7 +126,7 @@
|
||||
]
|
||||
},
|
||||
"src/pages/SettingsPage.vue": {
|
||||
"file": "assets/SettingsPage-BM2ulFCL.js",
|
||||
"file": "assets/SettingsPage-DfeoFZRa.js",
|
||||
"name": "SettingsPage",
|
||||
"src": "src/pages/SettingsPage.vue",
|
||||
"isDynamicEntry": true,
|
||||
@@ -138,25 +138,25 @@
|
||||
]
|
||||
},
|
||||
"src/pages/SystemPage.vue": {
|
||||
"file": "assets/SystemPage-D5R5QCv7.js",
|
||||
"file": "assets/SystemPage-CMSxrPFY.js",
|
||||
"name": "SystemPage",
|
||||
"src": "src/pages/SystemPage.vue",
|
||||
"isDynamicEntry": true,
|
||||
"imports": [
|
||||
"_system-CM-zje4U.js",
|
||||
"_system-BDTy0cf_.js",
|
||||
"index.html"
|
||||
],
|
||||
"css": [
|
||||
"assets/SystemPage-5z0b5M8t.css"
|
||||
"assets/SystemPage-DHDS5_BP.css"
|
||||
]
|
||||
},
|
||||
"src/pages/UsersPage.vue": {
|
||||
"file": "assets/UsersPage-DxOwX5c9.js",
|
||||
"file": "assets/UsersPage-CPdD81iA.js",
|
||||
"name": "UsersPage",
|
||||
"src": "src/pages/UsersPage.vue",
|
||||
"isDynamicEntry": true,
|
||||
"imports": [
|
||||
"_users-BfTiBX13.js",
|
||||
"_users-CWMQV7em.js",
|
||||
"index.html"
|
||||
],
|
||||
"css": [
|
||||
|
||||
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
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
|
||||
import{a as m,_ as B,r as p,f as u,g as T,h as P,j as r,m as a,w as l,q as x,L as i,K as b}from"./index-DD_NUvZR.js";async function C(o){const{data:s}=await m.put("/admin/username",{new_username:o});return s}async function S(o){const{data:s}=await m.put("/admin/password",{new_password:o});return s}async function U(){const{data:o}=await m.post("/logout");return o}const A={class:"page-stack"},E={__name:"SettingsPage",setup(o){const s=p(""),d=p(""),n=p(!1);function k(t){const e=String(t||"");return e.length<8?{ok:!1,message:"密码长度至少8位"}:e.length>128?{ok:!1,message:"密码长度不能超过128个字符"}:!/[a-zA-Z]/.test(e)||!/\d/.test(e)?{ok:!1,message:"密码必须包含字母和数字"}:{ok:!0,message:""}}async function f(){try{await U()}catch{}finally{window.location.href="/yuyx"}}async function V(){const t=s.value.trim();if(!t){i.error("请输入新用户名");return}try{await b.confirm(`确定将管理员用户名修改为「${t}」吗?修改后需要重新登录。`,"修改用户名",{confirmButtonText:"确认修改",cancelButtonText:"取消",type:"warning"})}catch{return}n.value=!0;try{await C(t),i.success("用户名修改成功,请重新登录"),s.value="",setTimeout(f,1200)}catch{}finally{n.value=!1}}async function h(){const t=d.value;if(!t){i.error("请输入新密码");return}const e=k(t);if(!e.ok){i.error(e.message);return}try{await b.confirm("确定修改管理员密码吗?修改后需要重新登录。","修改密码",{confirmButtonText:"确认修改",cancelButtonText:"取消",type:"warning"})}catch{return}n.value=!0;try{await S(t),i.success("密码修改成功,请重新登录"),d.value="",setTimeout(f,1200)}catch{}finally{n.value=!1}}return(t,e)=>{const g=u("el-input"),w=u("el-form-item"),v=u("el-form"),y=u("el-button"),_=u("el-card");return P(),T("div",A,[e[7]||(e[7]=r("div",{class:"app-page-title"},[r("h2",null,"设置"),r("span",{class:"app-muted"},"管理员账号设置")],-1)),a(_,{shadow:"never","body-style":{padding:"16px"},class:"card"},{default:l(()=>[e[3]||(e[3]=r("h3",{class:"section-title"},"修改管理员用户名",-1)),a(v,{"label-width":"120px"},{default:l(()=>[a(w,{label:"新用户名"},{default:l(()=>[a(g,{modelValue:s.value,"onUpdate:modelValue":e[0]||(e[0]=c=>s.value=c),placeholder:"输入新用户名",disabled:n.value},null,8,["modelValue","disabled"])]),_:1})]),_:1}),a(y,{type:"primary",loading:n.value,onClick:V},{default:l(()=>[...e[2]||(e[2]=[x("保存用户名",-1)])]),_:1},8,["loading"])]),_:1}),a(_,{shadow:"never","body-style":{padding:"16px"},class:"card"},{default:l(()=>[e[5]||(e[5]=r("h3",{class:"section-title"},"修改管理员密码",-1)),a(v,{"label-width":"120px"},{default:l(()=>[a(w,{label:"新密码"},{default:l(()=>[a(g,{modelValue:d.value,"onUpdate:modelValue":e[1]||(e[1]=c=>d.value=c),type:"password","show-password":"",placeholder:"输入新密码",disabled:n.value},null,8,["modelValue","disabled"])]),_:1})]),_:1}),a(y,{type:"primary",loading:n.value,onClick:h},{default:l(()=>[...e[4]||(e[4]=[x("保存密码",-1)])]),_:1},8,["loading"]),e[6]||(e[6]=r("div",{class:"help"},"建议使用更强密码(至少8位且包含字母与数字)。",-1))]),_:1})])}}},M=B(E,[["__scopeId","data-v-12a26d11"]]);export{M as default};
|
||||
import{a as m,_ as B,r as p,f as u,g as T,h as P,j as r,m as a,w as l,q as x,L as i,K as b}from"./index-BDEpmftQ.js";async function C(o){const{data:s}=await m.put("/admin/username",{new_username:o});return s}async function S(o){const{data:s}=await m.put("/admin/password",{new_password:o});return s}async function U(){const{data:o}=await m.post("/logout");return o}const A={class:"page-stack"},E={__name:"SettingsPage",setup(o){const s=p(""),d=p(""),n=p(!1);function k(t){const e=String(t||"");return e.length<8?{ok:!1,message:"密码长度至少8位"}:e.length>128?{ok:!1,message:"密码长度不能超过128个字符"}:!/[a-zA-Z]/.test(e)||!/\d/.test(e)?{ok:!1,message:"密码必须包含字母和数字"}:{ok:!0,message:""}}async function f(){try{await U()}catch{}finally{window.location.href="/yuyx"}}async function V(){const t=s.value.trim();if(!t){i.error("请输入新用户名");return}try{await b.confirm(`确定将管理员用户名修改为「${t}」吗?修改后需要重新登录。`,"修改用户名",{confirmButtonText:"确认修改",cancelButtonText:"取消",type:"warning"})}catch{return}n.value=!0;try{await C(t),i.success("用户名修改成功,请重新登录"),s.value="",setTimeout(f,1200)}catch{}finally{n.value=!1}}async function h(){const t=d.value;if(!t){i.error("请输入新密码");return}const e=k(t);if(!e.ok){i.error(e.message);return}try{await b.confirm("确定修改管理员密码吗?修改后需要重新登录。","修改密码",{confirmButtonText:"确认修改",cancelButtonText:"取消",type:"warning"})}catch{return}n.value=!0;try{await S(t),i.success("密码修改成功,请重新登录"),d.value="",setTimeout(f,1200)}catch{}finally{n.value=!1}}return(t,e)=>{const g=u("el-input"),w=u("el-form-item"),v=u("el-form"),y=u("el-button"),_=u("el-card");return P(),T("div",A,[e[7]||(e[7]=r("div",{class:"app-page-title"},[r("h2",null,"设置"),r("span",{class:"app-muted"},"管理员账号设置")],-1)),a(_,{shadow:"never","body-style":{padding:"16px"},class:"card"},{default:l(()=>[e[3]||(e[3]=r("h3",{class:"section-title"},"修改管理员用户名",-1)),a(v,{"label-width":"120px"},{default:l(()=>[a(w,{label:"新用户名"},{default:l(()=>[a(g,{modelValue:s.value,"onUpdate:modelValue":e[0]||(e[0]=c=>s.value=c),placeholder:"输入新用户名",disabled:n.value},null,8,["modelValue","disabled"])]),_:1})]),_:1}),a(y,{type:"primary",loading:n.value,onClick:V},{default:l(()=>[...e[2]||(e[2]=[x("保存用户名",-1)])]),_:1},8,["loading"])]),_:1}),a(_,{shadow:"never","body-style":{padding:"16px"},class:"card"},{default:l(()=>[e[5]||(e[5]=r("h3",{class:"section-title"},"修改管理员密码",-1)),a(v,{"label-width":"120px"},{default:l(()=>[a(w,{label:"新密码"},{default:l(()=>[a(g,{modelValue:d.value,"onUpdate:modelValue":e[1]||(e[1]=c=>d.value=c),type:"password","show-password":"",placeholder:"输入新密码",disabled:n.value},null,8,["modelValue","disabled"])]),_:1})]),_:1}),a(y,{type:"primary",loading:n.value,onClick:h},{default:l(()=>[...e[4]||(e[4]=[x("保存密码",-1)])]),_:1},8,["loading"]),e[6]||(e[6]=r("div",{class:"help"},"建议使用更强密码(至少8位且包含字母与数字)。",-1))]),_:1})])}}},M=B(E,[["__scopeId","data-v-12a26d11"]]);export{M as default};
|
||||
@@ -1 +0,0 @@
|
||||
.page-stack[data-v-5af0394e]{display:flex;flex-direction:column;gap:12px}.card[data-v-5af0394e]{border-radius:var(--app-radius);border:1px solid var(--app-border)}.section-title[data-v-5af0394e]{margin:0 0 12px;font-size:14px;font-weight:800}.kdocs-qr[data-v-5af0394e]{display:flex;flex-direction:column;align-items:center;gap:12px}.kdocs-qr img[data-v-5af0394e]{width:260px;max-width:100%;border:1px solid var(--app-border);border-radius:8px;padding:8px;background:#fff}.help[data-v-5af0394e]{margin-top:6px;font-size:12px;color:var(--app-muted)}.row-actions[data-v-5af0394e]{display:flex;flex-wrap:wrap;gap:10px}
|
||||
17
static/admin/assets/SystemPage-CMSxrPFY.js
Normal file
17
static/admin/assets/SystemPage-CMSxrPFY.js
Normal file
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/SystemPage-DHDS5_BP.css
Normal file
1
static/admin/assets/SystemPage-DHDS5_BP.css
Normal file
@@ -0,0 +1 @@
|
||||
.page-stack[data-v-682b6c42]{display:flex;flex-direction:column;gap:12px}.card[data-v-682b6c42]{border-radius:var(--app-radius);border:1px solid var(--app-border)}.section-title[data-v-682b6c42]{margin:0 0 12px;font-size:14px;font-weight:800}.kdocs-qr[data-v-682b6c42]{display:flex;flex-direction:column;align-items:center;gap:12px}.kdocs-qr img[data-v-682b6c42]{width:260px;max-width:100%;border:1px solid var(--app-border);border-radius:8px;padding:8px;background:#fff}.help[data-v-682b6c42]{margin-top:6px;font-size:12px;color:var(--app-muted)}.row-actions[data-v-682b6c42]{display:flex;flex-wrap:wrap;gap:10px}
|
||||
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
|
||||
import{a as n}from"./index-DD_NUvZR.js";async function i(){const{data:a}=await n.get("/email/settings");return a}async function e(a){const{data:t}=await n.post("/email/settings",a);return t}async function c(){const{data:a}=await n.get("/email/stats");return a}async function o(a){const{data:t}=await n.get("/email/logs",{params:a});return t}async function l(a){const{data:t}=await n.post("/email/logs/cleanup",{days:a});return t}export{o as a,i as b,l as c,c as f,e as u};
|
||||
import{a as n}from"./index-BDEpmftQ.js";async function i(){const{data:a}=await n.get("/email/settings");return a}async function e(a){const{data:t}=await n.post("/email/settings",a);return t}async function c(){const{data:a}=await n.get("/email/stats");return a}async function o(a){const{data:t}=await n.get("/email/logs",{params:a});return t}async function l(a){const{data:t}=await n.post("/email/logs/cleanup",{days:a});return t}export{o as a,i as b,l as c,c as f,e as u};
|
||||
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
|
||||
import{a}from"./index-DD_NUvZR.js";async function s(){const{data:t}=await a.get("/system/config");return t}async function c(t){const{data:e}=await a.post("/system/config",t);return e}async function o(){const{data:t}=await a.post("/schedule/execute",{});return t}export{o as e,s as f,c as u};
|
||||
import{a}from"./index-BDEpmftQ.js";async function s(){const{data:t}=await a.get("/system/config");return t}async function c(t){const{data:e}=await a.post("/system/config",t);return e}async function o(){const{data:t}=await a.post("/schedule/execute",{});return t}export{o as e,s as f,c as u};
|
||||
@@ -1 +1 @@
|
||||
import{a}from"./index-DD_NUvZR.js";async function c(){const{data:t}=await a.get("/server/info");return t}async function e(){const{data:t}=await a.get("/docker_stats");return t}async function o(){const{data:t}=await a.get("/task/stats");return t}async function r(){const{data:t}=await a.get("/task/running");return t}async function i(t){const{data:s}=await a.get("/task/logs",{params:t});return s}async function f(t){const{data:s}=await a.post("/task/logs/clear",{days:t});return s}export{r as a,c as b,e as c,i as d,f as e,o as f};
|
||||
import{a}from"./index-BDEpmftQ.js";async function c(){const{data:t}=await a.get("/server/info");return t}async function e(){const{data:t}=await a.get("/docker_stats");return t}async function o(){const{data:t}=await a.get("/task/stats");return t}async function r(){const{data:t}=await a.get("/task/running");return t}async function i(t){const{data:s}=await a.get("/task/logs",{params:t});return s}async function f(t){const{data:s}=await a.post("/task/logs/clear",{days:t});return s}export{r as a,c as b,e as c,i as d,f as e,o as f};
|
||||
@@ -1 +1 @@
|
||||
import{a as t}from"./index-DD_NUvZR.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-BDEpmftQ.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" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>后台管理 - 知识管理平台</title>
|
||||
<script type="module" crossorigin src="./assets/index-DD_NUvZR.js"></script>
|
||||
<script type="module" crossorigin src="./assets/index-BDEpmftQ.js"></script>
|
||||
<link rel="stylesheet" crossorigin href="./assets/index-DxTKnDeo.css">
|
||||
</head>
|
||||
<body>
|
||||
|
||||
Reference in New Issue
Block a user