chore: sync current WechatHookBot workspace

This commit is contained in:
2026-03-09 15:48:45 +08:00
parent 4016c1e6eb
commit 9119e2307d
195 changed files with 24438 additions and 17498 deletions

View File

@@ -0,0 +1,67 @@
window.useApi = function useApi() {
async function request(url, options = {}, extra = {}) {
const { silent = false, skipAuthRedirect = false } = extra;
try {
const mergedHeaders = {
'Content-Type': 'application/json',
...(options.headers || {}),
};
const res = await fetch(url, {
credentials: 'same-origin',
...options,
headers: mergedHeaders,
});
let json = null;
try {
json = await res.json();
} catch (e) {
if (!silent) ElementPlus.ElMessage.error('服务端返回格式错误');
return null;
}
if (res.status === 401) {
if (!skipAuthRedirect) {
window.dispatchEvent(new CustomEvent('webui-auth-required'));
}
if (!silent) ElementPlus.ElMessage.error(json.error || '未登录或会话已过期');
return null;
}
if (!json.ok) {
if (!silent) ElementPlus.ElMessage.error(json.error || '请求失败');
return null;
}
return json;
} catch (e) {
if (!silent) ElementPlus.ElMessage.error('网络请求失败');
return null;
}
}
return {
getAuthStatus: () => request('/api/auth/status', {}, { silent: true, skipAuthRedirect: true }),
login: (username, password) => request('/api/auth/login', {
method: 'POST', body: JSON.stringify({ username, password })
}, { skipAuthRedirect: true }),
logout: () => request('/api/auth/logout', { method: 'POST' }, { silent: true }),
changeCredentials: (payload) => request('/api/auth/change-credentials', {
method: 'POST', body: JSON.stringify(payload)
}),
getConfig: () => request('/api/config'),
saveConfig: (data) => request('/api/config', {
method: 'POST', body: JSON.stringify({ data })
}),
getPlugins: () => request('/api/plugins'),
togglePlugin: (name, enable) => request('/api/plugins/toggle', {
method: 'POST', body: JSON.stringify({ name, enable })
}),
getPluginConfig: (name) =>
request(`/api/plugins/${encodeURIComponent(name)}/config`),
savePluginConfig: (name, data) =>
request(`/api/plugins/${encodeURIComponent(name)}/config`, {
method: 'POST', body: JSON.stringify({ data })
}),
};
};