import cuid from "cuid"; // import getDb from "../dbServer.mjs"; import {getDb} from "funjia-server/lib/funjia-server.mjs"; import _ from "lodash"; const getDynamic = (router) => { router.post('/api/dynamic/list/:tableName', async (ctx) => { // 设置头类型, 如果不设置,会直接下载该页面 ctx.type = 'application/json'; const db = await getDb(); const body = ctx.request.body; const data = db.data[ctx.params.tableName]?.filter((item) => { let isMatch = true; for (let field in body) { if (["page", "pageSize"].includes(field)) { continue; } if (typeof (item[field]) == "string") { isMatch = item[field]?.indexOf?.(body[field]) > -1; } else if (typeof (item[field]) == "number") { isMatch = item[field] == body[field]; } if (!isMatch) break; } return isMatch; }); const { page, pageSize } = body; let batchData = data; if (page && pageSize) { batchData = data.slice((page - 1) * pageSize, page * pageSize); } ctx.body = { code: 0, data: batchData || [], total: data.length }; }); router.get('/api/dynamic/:tableName', async (ctx) => { // 设置头类型, 如果不设置,会直接下载该页面 ctx.type = 'application/json'; const db = await getDb(); const data = db.data[ctx.params.tableName]; const query = ctx.request.query; console.log("参数:", query, ctx.request.body, ctx.query); let detail = {}; if (query.id && data) { detail = data.find((item) => { return item.id == query.id; }); } ctx.body = { code: 0, data: detail || {} }; }); router.post('/api/dynamic/add/:tableName', async (ctx) => { ctx.type = 'application/json'; const tableName=ctx.params.tableName; const db = await getDb(); // You can also use this syntax if you prefer if (!db.data[tableName]) db.data[tableName] = []; const dynamic = db.data[tableName]; const data = ctx.request.body; console.log("add:", data); data.id = cuid(); data.createTime = new Date(); dynamic.push(data) // Write db.data content to db.json await db.write() ctx.body = { code: 0, }; }); router.post('/api/dynamic/upd/:tableName', async (ctx) => { ctx.type = 'application/json'; const tableName=ctx.params.tableName; const db = await getDb(); // You can also use this syntax if you prefer if (!db.data[tableName]) db.data = { dynamic: [] } const dynamic = db.data[tableName]; const data = ctx.request.body; const id = data.id; console.log("数据Id:", id); if (id && dynamic) { const currentDetail = dynamic.find(item => item.id == id); if (currentDetail) { _.merge(currentDetail, data); } // Write db.data content to db.json await db.write() } ctx.body = { code: 0, }; }); router.post('/api/dynamic/delete/:tableName', async (ctx) => { ctx.type = 'application/json'; const tableName=ctx.params.tableName; const db = await getDb(); // You can also use this syntax if you prefer if (!db.data[tableName]) db.data = { [tableName]: [] } const dynamic = db.data[tableName]; const data = ctx.request.body; const ids = data.ids; if (ids?.length > 0 && dynamic) { let id = null; for (let i = 0; i < ids.length; i++) { id = ids[i]; const idx = dynamic.findIndex(item => item.id == id); if (idx != -1) { dynamic.splice(idx, 1); } } // Write db.data content to db.json await db.write() } ctx.body = { code: 0, }; }); } export default getDynamic;