添加 agentation 成功

This commit is contained in:
Your Name
2026-01-31 23:16:21 +08:00
parent c9e75030af
commit 52f540a097
44 changed files with 8034 additions and 4 deletions
+106
View File
@@ -0,0 +1,106 @@
/**
* API 封装:baseURL、Token、POST JSON、统一错误与 401 处理
* 依据:backend/API.md,全部 POSTJSONBearer Token
*/
(function (global) {
'use strict';
var BASE_URL = 'http://127.0.0.1:8000';
var TOKEN_KEY = 'pm_token';
var USER_KEY = 'pm_user';
function getToken() {
try {
return localStorage.getItem(TOKEN_KEY) || '';
} catch (e) {
return '';
}
}
function setToken(token) {
try {
if (token) localStorage.setItem(TOKEN_KEY, token);
else localStorage.removeItem(TOKEN_KEY);
} catch (e) {}
}
function getUser() {
try {
var raw = localStorage.getItem(USER_KEY);
return raw ? JSON.parse(raw) : null;
} catch (e) {
return null;
}
}
function setUser(user) {
try {
if (user) localStorage.setItem(USER_KEY, JSON.stringify(user));
else localStorage.removeItem(USER_KEY);
} catch (e) {}
}
function clearAuth() {
setToken('');
setUser(null);
}
/**
* POST /api/xxx 请求
* @param {string} path - 如 '/api/auth/login'
* @param {object} body - 请求体
* @param {boolean} [requireAuth=true] - 是否携带 Token
* @returns {Promise<{ ok: boolean, data?: object, status?: number, message?: string }>}
*/
function post(path, body, requireAuth) {
if (requireAuth === undefined) requireAuth = true;
var url = BASE_URL + path;
var headers = {
'Content-Type': 'application/json',
};
var token = getToken();
if (requireAuth && token) {
headers['Authorization'] = 'Bearer ' + token;
}
return fetch(url, {
method: 'POST',
headers: headers,
body: JSON.stringify(body || {}),
})
.then(function (res) {
return res.text().then(function (text) {
var data = null;
try {
data = text ? JSON.parse(text) : null;
} catch (e) {
data = null;
}
if (res.status === 401) {
clearAuth();
if (typeof global.onAuthRequired === 'function') {
global.onAuthRequired();
}
return { ok: false, status: 401, message: data && data.message ? data.message : '未登录' };
}
if (!res.ok) {
var msg = (data && data.message) || res.statusText || '请求失败';
return { ok: false, status: res.status, data: data, message: msg };
}
return { ok: true, data: data };
});
})
.catch(function (err) {
return { ok: false, message: err && err.message ? err.message : '网络错误' };
});
}
global.API = {
BASE_URL: BASE_URL,
getToken: getToken,
setToken: setToken,
getUser: getUser,
setUser: setUser,
clearAuth: clearAuth,
post: post,
};
})(typeof window !== 'undefined' ? window : this);