Merge branch 'develop' of https://github.com/HBAI-Ltd/Toonflow-app into develop

# Conflicts:
#	src/router.ts
#	src/types/database.d.ts
This commit is contained in:
ACT丶流星雨 2026-04-13 00:56:56 +08:00
commit c3d2e7a02a
5 changed files with 122 additions and 79 deletions

View File

@ -220,6 +220,19 @@ export default async (knex: Knex, forceInit: boolean = false): Promise<void> =>
]); ]);
}, },
}, },
//模型绑定提示词表
{
name: "o_modelPrompt",
builder: (table) => {
table.integer("id").notNullable();
table.string("vendorId");
table.string("model");
table.text("prompt");
table.primary(["id"]);
table.unique(["id"]);
},
initData: async (knex) => {},
},
//小说原文表 //小说原文表
{ {
name: "o_novel", name: "o_novel",

View File

@ -1,4 +1,4 @@
// @routes-hash 0693afa45240a846389e06cf3b11dc91 // @routes-hash 03f1781a722f0e9e08213aec7ac1c10c
import { Express } from "express"; import { Express } from "express";
import route1 from "./routes/agents/clearMemory"; import route1 from "./routes/agents/clearMemory";
@ -123,28 +123,29 @@ import route119 from "./routes/setting/loginConfig/updateUserPwd";
import route120 from "./routes/setting/memoryConfig/delAllMemory"; import route120 from "./routes/setting/memoryConfig/delAllMemory";
import route121 from "./routes/setting/memoryConfig/getMemory"; import route121 from "./routes/setting/memoryConfig/getMemory";
import route122 from "./routes/setting/memoryConfig/sureMemory"; import route122 from "./routes/setting/memoryConfig/sureMemory";
import route123 from "./routes/setting/modelMap/getImageAndVideoModel"; import route123 from "./routes/setting/modelMap/bindingPrompt";
import route124 from "./routes/setting/promptManage/getPrompt"; import route124 from "./routes/setting/modelMap/getImageAndVideoModel";
import route125 from "./routes/setting/promptManage/updatePrompt"; import route125 from "./routes/setting/promptManage/getPrompt";
import route126 from "./routes/setting/skillManagement/getSkillContent"; import route126 from "./routes/setting/promptManage/updatePrompt";
import route127 from "./routes/setting/skillManagement/getSkillList"; import route127 from "./routes/setting/skillManagement/getSkillContent";
import route128 from "./routes/setting/skillManagement/saveSkillContent"; import route128 from "./routes/setting/skillManagement/getSkillList";
import route129 from "./routes/setting/vendorConfig/addVendor"; import route129 from "./routes/setting/skillManagement/saveSkillContent";
import route130 from "./routes/setting/vendorConfig/addVendorModel"; import route130 from "./routes/setting/vendorConfig/addVendor";
import route131 from "./routes/setting/vendorConfig/deleteVendor"; import route131 from "./routes/setting/vendorConfig/addVendorModel";
import route132 from "./routes/setting/vendorConfig/delVendorModel"; import route132 from "./routes/setting/vendorConfig/deleteVendor";
import route133 from "./routes/setting/vendorConfig/enableVendor"; import route133 from "./routes/setting/vendorConfig/delVendorModel";
import route134 from "./routes/setting/vendorConfig/getCodeByLink"; import route134 from "./routes/setting/vendorConfig/enableVendor";
import route135 from "./routes/setting/vendorConfig/getVendorList"; import route135 from "./routes/setting/vendorConfig/getCodeByLink";
import route136 from "./routes/setting/vendorConfig/modelTest"; import route136 from "./routes/setting/vendorConfig/getVendorList";
import route137 from "./routes/setting/vendorConfig/updateCode"; import route137 from "./routes/setting/vendorConfig/modelTest";
import route138 from "./routes/setting/vendorConfig/updateVendorInputs"; import route138 from "./routes/setting/vendorConfig/updateCode";
import route139 from "./routes/setting/vendorConfig/upVendorModel"; import route139 from "./routes/setting/vendorConfig/updateVendorInputs";
import route140 from "./routes/task/getProject"; import route140 from "./routes/setting/vendorConfig/upVendorModel";
import route141 from "./routes/task/getTaskApi"; import route141 from "./routes/task/getProject";
import route142 from "./routes/task/getTaskCategories"; import route142 from "./routes/task/getTaskApi";
import route143 from "./routes/task/taskDetails"; import route143 from "./routes/task/getTaskCategories";
import route144 from "./routes/test/test"; import route144 from "./routes/task/taskDetails";
import route145 from "./routes/test/test";
export default async (app: Express) => { export default async (app: Express) => {
app.use("/api/agents/clearMemory", route1); app.use("/api/agents/clearMemory", route1);
@ -269,26 +270,27 @@ export default async (app: Express) => {
app.use("/api/setting/memoryConfig/delAllMemory", route120); app.use("/api/setting/memoryConfig/delAllMemory", route120);
app.use("/api/setting/memoryConfig/getMemory", route121); app.use("/api/setting/memoryConfig/getMemory", route121);
app.use("/api/setting/memoryConfig/sureMemory", route122); app.use("/api/setting/memoryConfig/sureMemory", route122);
app.use("/api/setting/modelMap/getImageAndVideoModel", route123); app.use("/api/setting/modelMap/bindingPrompt", route123);
app.use("/api/setting/promptManage/getPrompt", route124); app.use("/api/setting/modelMap/getImageAndVideoModel", route124);
app.use("/api/setting/promptManage/updatePrompt", route125); app.use("/api/setting/promptManage/getPrompt", route125);
app.use("/api/setting/skillManagement/getSkillContent", route126); app.use("/api/setting/promptManage/updatePrompt", route126);
app.use("/api/setting/skillManagement/getSkillList", route127); app.use("/api/setting/skillManagement/getSkillContent", route127);
app.use("/api/setting/skillManagement/saveSkillContent", route128); app.use("/api/setting/skillManagement/getSkillList", route128);
app.use("/api/setting/vendorConfig/addVendor", route129); app.use("/api/setting/skillManagement/saveSkillContent", route129);
app.use("/api/setting/vendorConfig/addVendorModel", route130); app.use("/api/setting/vendorConfig/addVendor", route130);
app.use("/api/setting/vendorConfig/deleteVendor", route131); app.use("/api/setting/vendorConfig/addVendorModel", route131);
app.use("/api/setting/vendorConfig/delVendorModel", route132); app.use("/api/setting/vendorConfig/deleteVendor", route132);
app.use("/api/setting/vendorConfig/enableVendor", route133); app.use("/api/setting/vendorConfig/delVendorModel", route133);
app.use("/api/setting/vendorConfig/getCodeByLink", route134); app.use("/api/setting/vendorConfig/enableVendor", route134);
app.use("/api/setting/vendorConfig/getVendorList", route135); app.use("/api/setting/vendorConfig/getCodeByLink", route135);
app.use("/api/setting/vendorConfig/modelTest", route136); app.use("/api/setting/vendorConfig/getVendorList", route136);
app.use("/api/setting/vendorConfig/updateCode", route137); app.use("/api/setting/vendorConfig/modelTest", route137);
app.use("/api/setting/vendorConfig/updateVendorInputs", route138); app.use("/api/setting/vendorConfig/updateCode", route138);
app.use("/api/setting/vendorConfig/upVendorModel", route139); app.use("/api/setting/vendorConfig/updateVendorInputs", route139);
app.use("/api/task/getProject", route140); app.use("/api/setting/vendorConfig/upVendorModel", route140);
app.use("/api/task/getTaskApi", route141); app.use("/api/task/getProject", route141);
app.use("/api/task/getTaskCategories", route142); app.use("/api/task/getTaskApi", route142);
app.use("/api/task/taskDetails", route143); app.use("/api/task/getTaskCategories", route143);
app.use("/api/test/test", route144); app.use("/api/task/taskDetails", route144);
app.use("/api/test/test", route145);
} }

View File

@ -0,0 +1,26 @@
import express from "express";
import { error, success } from "@/lib/responseFormat";
import u from "@/utils";
import { z } from "zod";
import { validateFields } from "@/middleware/middleware";
const router = express.Router();
export default router.post(
"/",
validateFields({
vendorId: z.string(),
model: z.string(),
prompt: z.string(),
}),
async (req, res) => {
const { vendorId, model, prompt } = req.body;
const data = await u.db("o_modelPrompt").where("model", model).andWhere("vendorId", vendorId).select("*").first();
if (data) {
await u.db("o_modelPrompt").where("model", model).andWhere("vendorId", vendorId).update({ prompt });
res.status(200).send(success("绑定成功"));
} else {
await u.db("o_modelPrompt").insert({ vendorId, model, prompt });
res.status(200).send(success("绑定成功"));
}
},
);

View File

@ -1,38 +1,33 @@
import express from "express"; import express from "express";
import u from "@/utils"; import u from "@/utils";
import { z } from "zod";
import { success } from "@/lib/responseFormat"; import { success } from "@/lib/responseFormat";
import { validateFields } from "@/middleware/middleware";
const router = express.Router(); const router = express.Router();
export default router.post( export default router.post("/", async (req, res) => {
"/", const dataList = await u.db("o_vendorConfig").select("id").where("enable", 1);
async (req, res) => { if (!dataList || dataList.length === 0) {
const dataList = await u.db("o_vendorConfig").select("id").where("enable", 1); return res.status(404).send({ error: "模型未找到" });
if (!dataList || dataList.length === 0) { }
return res.status(404).send({ error: "模型未找到" }); const data = await Promise.all(
} dataList.map(async (item) => {
const types = ['image', 'video']; const vendor = u.vendor.getVendor(item.id!);
const modelList = await Promise.all(dataList.map((i) => u.vendor.getModelList(i.id!))); const promptList = await u.db("o_modelPrompt").andWhere("vendorId", vendor.id).select("*");
const result = await Promise.all( const promptMap = new Map(promptList.map((p) => [p.model, p.prompt]));
dataList.map(async (data, index) => { const models = await u.vendor.getModelList(item.id!);
const vendorData = await u.vendor.getVendor(data.id!); const filteredModels = models
console.log("%c Line:20 🌶 vendorData", "background:#42b983", vendorData); .filter((m: any) => m.type === "image" || m.type === "video")
const models = modelList[index]; .map((m: any) => ({
const filtered = name: m.name,
models.filter((item: { type: string }) => types.includes(item.type)); type: m.type as "image" | "video",
console.log("%c Line:30 🍺 vendorData.mode", "background:#42b983", vendorData.mode); model: m.modelName,
prompt: promptMap.get(m.modelName) ?? "",
return filtered.map((item: { name: string; modelName: string; type: string }) => ({ }));
id: data.id, return {
label: item.name, id: item.id,
value: item.modelName, name: vendor.name,
type: item.type, promptList: filteredModels,
name: vendorData.name, };
mode: item.mode }),
})); );
}), res.status(200).send(success(data));
); });
res.status(200).send(success(result.flat()));
},
);

View File

@ -1,4 +1,4 @@
// @db-hash 9248d7bcfe0a1bc57e5b9bc33d8c7d83 // @db-hash 630ea42aa4b21853ca104d1fbdb87706
//该文件由脚本自动生成,请勿手动修改 //该文件由脚本自动生成,请勿手动修改
export interface memories { export interface memories {
@ -88,6 +88,12 @@ export interface o_imageFlow {
'flowData': string; 'flowData': string;
'id'?: number; 'id'?: number;
} }
export interface o_modelPrompt {
'id'?: number;
'model'?: string | null;
'prompt'?: string | null;
'vendorId'?: string | null;
}
export interface o_novel { export interface o_novel {
'chapter'?: string | null; 'chapter'?: string | null;
'chapterData'?: string | null; 'chapterData'?: string | null;
@ -240,6 +246,7 @@ export interface DB {
"o_eventChapter": o_eventChapter; "o_eventChapter": o_eventChapter;
"o_image": o_image; "o_image": o_image;
"o_imageFlow": o_imageFlow; "o_imageFlow": o_imageFlow;
"o_modelPrompt": o_modelPrompt;
"o_novel": o_novel; "o_novel": o_novel;
"o_outline": o_outline; "o_outline": o_outline;
"o_outlineNovel": o_outlineNovel; "o_outlineNovel": o_outlineNovel;