94 lines
5.0 KiB
TypeScript
94 lines
5.0 KiB
TypeScript
import { addAudit, ensureDatabase, loadConsoleData } from "@/db/store";
|
|
|
|
export const dynamic = "force-dynamic";
|
|
|
|
export async function GET() {
|
|
try {
|
|
return Response.json({ code: 0, data: await loadConsoleData() });
|
|
} catch (error) {
|
|
return Response.json(
|
|
{ code: 5001, message: error instanceof Error ? error.message : "数据库不可用" },
|
|
{ status: 500 },
|
|
);
|
|
}
|
|
}
|
|
|
|
export async function POST(request: Request) {
|
|
const db = await ensureDatabase();
|
|
const body = (await request.json()) as {
|
|
action?: string;
|
|
payload?: Record<string, unknown>;
|
|
};
|
|
const payload = body.payload ?? {};
|
|
const action = body.action ?? "";
|
|
|
|
if (action === "person.toggle") {
|
|
const id = String(payload.id ?? "");
|
|
await db
|
|
.prepare("UPDATE people SET active=CASE active WHEN 1 THEN 0 ELSE 1 END, updated_at=? WHERE id=?")
|
|
.bind(Date.now(), id)
|
|
.run();
|
|
await addAudit("管理员", "人员状态变更", `${id} 启用状态已切换`, "重要");
|
|
} else if (action === "person.workshop") {
|
|
const id = String(payload.id ?? "");
|
|
const workshop = String(payload.workshop ?? "");
|
|
await db.prepare("UPDATE people SET workshop=?, updated_at=? WHERE id=?").bind(workshop, Date.now(), id).run();
|
|
await addAudit("管理员", "修改人员车间", `${id} 调整到 ${workshop}`);
|
|
} else if (action === "person.face") {
|
|
const id = String(payload.id ?? "");
|
|
await db.prepare("UPDATE people SET face_status='已录入', face_version=face_version+1, sync_status='已同步', updated_at=? WHERE id=?").bind(Date.now(), id).run();
|
|
await addAudit("管理员", "更新人脸", `${id} 人脸版本已更新`, "重要");
|
|
} else if (action === "workshop.add") {
|
|
const name = String(payload.name ?? "").trim();
|
|
const location = String(payload.location ?? "—").trim();
|
|
const note = String(payload.note ?? "—").trim();
|
|
if (!name) return Response.json({ code: 1001, message: "车间名称不能为空" }, { status: 400 });
|
|
const row = await db.prepare("SELECT COUNT(*) AS total FROM workshops").first<{ total: number }>();
|
|
const code = `WS-${String(Number(row?.total ?? 0) + 1).padStart(2, "0")}`;
|
|
await db.prepare("INSERT INTO workshops(code,name,location,note) VALUES(?,?,?,?)").bind(code, name, location || "—", note || "—").run();
|
|
await addAudit("管理员", "新增车间", `${code} ${name}`, "重要");
|
|
} else if (action === "workshop.delete") {
|
|
const code = String(payload.code ?? "");
|
|
const workshop = await db.prepare("SELECT name FROM workshops WHERE code=?").bind(code).first<{ name: string }>();
|
|
if (workshop) {
|
|
const used = await db.prepare("SELECT COUNT(*) AS total FROM people WHERE workshop=?").bind(workshop.name).first<{ total: number }>();
|
|
if (Number(used?.total ?? 0) > 0) {
|
|
return Response.json({ code: 4001, message: "该车间仍有关联人员,不能删除" }, { status: 409 });
|
|
}
|
|
await db.prepare("DELETE FROM workshops WHERE code=?").bind(code).run();
|
|
await addAudit("管理员", "删除车间", `${code} ${workshop.name}`, "重要");
|
|
}
|
|
} else if (action === "tag.add") {
|
|
const name = String(payload.name ?? "未命名标签").trim() || "未命名标签";
|
|
const id = `E280-6102-${String(Math.floor(Math.random() * 9000) + 1000)}`;
|
|
await db.prepare("INSERT INTO rfid_tags(id,status,name,last_checked) VALUES(?,'未用',?,NULL)").bind(id, name).run();
|
|
await addAudit("管理员", "新增 RFID", `${id} ${name}`);
|
|
} else if (action === "tag.status") {
|
|
const id = String(payload.id ?? "");
|
|
const status = String(payload.status ?? "未用");
|
|
await db.prepare("UPDATE rfid_tags SET status=?, last_checked=? WHERE id=?").bind(status, Date.now(), id).run();
|
|
await addAudit("管理员", "RFID 状态变更", `${id} → ${status}`);
|
|
} else if (action === "alert.status") {
|
|
const id = String(payload.id ?? "");
|
|
const status = String(payload.status ?? "处理中");
|
|
await db.prepare("UPDATE alerts SET status=? WHERE id=?").bind(status, id).run();
|
|
await addAudit("管理员", "处理告警", `${id} → ${status}`, "重要");
|
|
} else if (action === "settings.save") {
|
|
const entries = Object.entries(payload);
|
|
for (const [key, value] of entries) {
|
|
await db
|
|
.prepare("INSERT INTO settings(key,value,updated_at) VALUES(?,?,?) ON CONFLICT(key) DO UPDATE SET value=excluded.value, updated_at=excluded.updated_at")
|
|
.bind(key, String(value), Date.now())
|
|
.run();
|
|
}
|
|
await addAudit("管理员", "更新系统设置", entries.map(([key]) => key).join("、"), "重要");
|
|
} else if (action === "mes.sync") {
|
|
await db.prepare("UPDATE people SET sync_status='已同步', updated_at=? WHERE sync_status<>'已同步'").bind(Date.now()).run();
|
|
await addAudit("管理员", "同步 MES 人员", "增量同步完成");
|
|
} else {
|
|
return Response.json({ code: 1001, message: "未知操作" }, { status: 400 });
|
|
}
|
|
|
|
return Response.json({ code: 0, message: "操作成功", data: await loadConsoleData() });
|
|
}
|