chore: 初始提交 - 移除所有硬编码凭据,统一从环境变量读取

This commit is contained in:
yangxiangyuan
2026-06-11 17:10:58 +08:00
commit c223c79b36
1699 changed files with 313940 additions and 0 deletions
+62
View File
@@ -0,0 +1,62 @@
// 简易同步器:与 IIS API 交互
const SyncAPI = (function () {
const base = AppConfig.API_BASE_URL; // 例如 /Api/Events.ashx
async function listByMonth(year, month) {
await (window.Auth && Auth.ensure ? Auth.ensure() : Promise.resolve());
try {
if (window.UI && UI.appendGlobalModalLog) UI.appendGlobalModalLog('开始调用 listByMonth');
} catch (_) {}
const url = `${base}?year=${year}&month=${month}&_ts=${Date.now()}`;
const resp = await fetch(url, { cache: 'no-store', credentials: 'include' });
const j = await resp.json();
if (!j.ok) throw new Error(j.error || 'listByMonth failed');
try {
const count = Array.isArray(j.data) ? j.data.length : 0;
if (window.UI && UI.appendGlobalModalLog) UI.appendGlobalModalLog('listByMonth 返回成功,数量=' + count);
} catch (_) {}
return j.data || [];
}
async function upsertEvent(ev) {
await (window.Auth && Auth.ensure ? Auth.ensure() : Promise.resolve());
try {
if (window.UI && UI.appendGlobalModalLog) UI.appendGlobalModalLog('开始调用 upsertEvent');
} catch (_) {}
const resp = await fetch(base, {
method: 'POST',
headers: { 'Content-Type': 'text/plain' },
credentials: 'include',
body: JSON.stringify(ev),
});
const j = await resp.json();
if (!j.ok) throw new Error(j.error || 'upsert failed');
try {
if (window.UI && UI.appendGlobalModalLog) UI.appendGlobalModalLog('upsertEvent 返回成功');
} catch (_) {}
}
async function deleteEvent(id) {
await (window.Auth && Auth.ensure ? Auth.ensure() : Promise.resolve());
const url = `${base}?id=${encodeURIComponent(id)}`;
try {
const resp = await fetch(url, { method: 'DELETE', credentials: 'include' });
if (resp.ok) {
const j = await resp.json();
if (!j.ok) throw new Error(j.error || 'delete failed');
return;
}
if (resp.status !== 405) {
const t = await resp.text();
throw new Error(t || 'delete failed');
}
} catch (e) {}
const resp2 = await fetch(`${url}&_method=DELETE`, { method: 'POST', headers: { 'Content-Type': 'text/plain' }, credentials: 'include', body: '' });
const j2 = await resp2.json();
if (!j2.ok) throw new Error(j2.error || 'delete failed');
}
return { listByMonth, upsertEvent, deleteEvent };
})();
window.SyncAPI = SyncAPI;