Commit 28fae881 authored by 周成波's avatar 周成波

参数加密

parent 9c33cb2b
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
"@element-plus/icons-vue": "^2.1.0", "@element-plus/icons-vue": "^2.1.0",
"axios": "^1.6.1", "axios": "^1.6.1",
"bootstrap": "^5.3.3", "bootstrap": "^5.3.3",
"crypto-js": "^4.2.0",
"element-plus": "^2.4.2", "element-plus": "^2.4.2",
"file-saver": "^2.0.5", "file-saver": "^2.0.5",
"pinia": "^2.1.7", "pinia": "^2.1.7",
...@@ -21,6 +22,7 @@ ...@@ -21,6 +22,7 @@
"devDependencies": { "devDependencies": {
"@rushstack/eslint-patch": "^1.3.3", "@rushstack/eslint-patch": "^1.3.3",
"@tsconfig/node18": "^18.2.2", "@tsconfig/node18": "^18.2.2",
"@types/crypto-js": "^4.2.2",
"@types/file-saver": "^2.0.7", "@types/file-saver": "^2.0.7",
"@types/node": "^18.18.9", "@types/node": "^18.18.9",
"@vitejs/plugin-vue": "^4.4.0", "@vitejs/plugin-vue": "^4.4.0",
...@@ -376,6 +378,12 @@ ...@@ -376,6 +378,12 @@
"dev": true, "dev": true,
"license": "MIT" "license": "MIT"
}, },
"node_modules/@types/crypto-js": {
"version": "4.2.2",
"resolved": "https://registry.npmjs.org/@types/crypto-js/-/crypto-js-4.2.2.tgz",
"integrity": "sha512-sDOLlVbHhXpAUAL0YHDUUwDZf3iN4Bwi4W6a0W0b+QcAezUbRtH4FVb+9J4h+XFPW7l/gQ9F8qC7P+Ec4k8QVQ==",
"dev": true
},
"node_modules/@types/estree": { "node_modules/@types/estree": {
"version": "1.0.5", "version": "1.0.5",
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz",
...@@ -1282,6 +1290,11 @@ ...@@ -1282,6 +1290,11 @@
"node": ">= 8" "node": ">= 8"
} }
}, },
"node_modules/crypto-js": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz",
"integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q=="
},
"node_modules/cssesc": { "node_modules/cssesc": {
"version": "3.0.0", "version": "3.0.0",
"resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
......
...@@ -15,6 +15,7 @@ ...@@ -15,6 +15,7 @@
"@element-plus/icons-vue": "^2.1.0", "@element-plus/icons-vue": "^2.1.0",
"axios": "^1.6.1", "axios": "^1.6.1",
"bootstrap": "^5.3.3", "bootstrap": "^5.3.3",
"crypto-js": "^4.2.0",
"element-plus": "^2.4.2", "element-plus": "^2.4.2",
"file-saver": "^2.0.5", "file-saver": "^2.0.5",
"pinia": "^2.1.7", "pinia": "^2.1.7",
...@@ -25,6 +26,7 @@ ...@@ -25,6 +26,7 @@
"devDependencies": { "devDependencies": {
"@rushstack/eslint-patch": "^1.3.3", "@rushstack/eslint-patch": "^1.3.3",
"@tsconfig/node18": "^18.2.2", "@tsconfig/node18": "^18.2.2",
"@types/crypto-js": "^4.2.2",
"@types/file-saver": "^2.0.7", "@types/file-saver": "^2.0.7",
"@types/node": "^18.18.9", "@types/node": "^18.18.9",
"@vitejs/plugin-vue": "^4.4.0", "@vitejs/plugin-vue": "^4.4.0",
......
...@@ -2,13 +2,14 @@ ...@@ -2,13 +2,14 @@
* 相关接口 * 相关接口
*/ */
import request from '@/api/request' import request from '@/api/request'
import { enc } from 'crypto-js';
export default { export default {
submitLLM(prompt: string, llm: string = "gpt", history: Wm.PromptHistory[] = []): Promise<string> { submitLLM(prompt: string, llm: string = "gpt", history: Wm.PromptHistory[] = [], task_id: string = "-", encrypt: string = "false"): Promise<string> {
if (!prompt) { if (!prompt) {
return Promise.reject("输入不能为空"); return Promise.reject("输入不能为空");
} }
const post_data = { source_text: prompt, history: history, llm: llm } const post_data = { source_text: prompt, history: history, llm: llm, task_id: task_id, encrypt: encrypt }
return request.post('/text2video/text2llm', post_data) return request.post('/text2video/text2llm', post_data)
.then((res: any) => { .then((res: any) => {
// console.log(res); // console.log(res);
...@@ -36,6 +37,7 @@ export default { ...@@ -36,6 +37,7 @@ export default {
seed: string = "-1", seed: string = "-1",
steps: string = "25", steps: string = "25",
cfg_scale: string = "9", cfg_scale: string = "9",
encrypt: string = "false"
): Promise<{"domain_image_path": string, "local_image_path": string}> { ): Promise<{"domain_image_path": string, "local_image_path": string}> {
if (!prompt) { if (!prompt) {
return Promise.reject("SD提示词不能为空"); return Promise.reject("SD提示词不能为空");
...@@ -51,6 +53,7 @@ export default { ...@@ -51,6 +53,7 @@ export default {
width: width, width: width,
height: height, height: height,
cfg_scale: cfg_scale, cfg_scale: cfg_scale,
encrypt: encrypt,
} }
return request.post('/text2video/text2img', post_data) return request.post('/text2video/text2img', post_data)
.then((res: any) => { .then((res: any) => {
...@@ -110,11 +113,11 @@ export default { ...@@ -110,11 +113,11 @@ export default {
}); });
}, },
submitTranslateToEn(input_string: string): Promise<string> { submitTranslateToEn(input_string: string, task_id: string = "-", encrypt: string = "false"): Promise<string> {
if (!input_string) { if (!input_string) {
return Promise.reject("输入不能为空"); return Promise.reject("输入不能为空");
} }
const post_data = { input_string: input_string } const post_data = { input_string: input_string, task_id: task_id, encrypt: encrypt }
return request.post('/text2video/translate_to_en', post_data) return request.post('/text2video/translate_to_en', post_data)
.then((res: any) => { .then((res: any) => {
// console.log(res); // console.log(res);
...@@ -148,4 +151,22 @@ export default { ...@@ -148,4 +151,22 @@ export default {
return Promise.reject(`add_text_to_img接口通讯失败:${JSON.stringify(err.message)}`); return Promise.reject(`add_text_to_img接口通讯失败:${JSON.stringify(err.message)}`);
}); });
}, },
submitTest(prompt: string): Promise<string> {
const post_data = { source_text: prompt }
return request.post('/text2video/test', post_data)
.then((res: any) => {
// console.log(res);
if (res && res.code === 0) {
return res.data.result;
} else {
const errorMessage = res ? res.message : "未知错误";
return Promise.reject(errorMessage);
}
})
.catch((err: any) => {
console.log(`err = ${JSON.stringify(err)}`);
return Promise.reject(`与Test Api通讯失败:${JSON.stringify(err.message)}`);
});
},
} }
import _cryptoJs from 'crypto-js';
export default class utils { export default class utils {
// 格式化为json字符串 // 格式化为json字符串
static formatJson(jsonString: string) { static formatJson(jsonString: string) {
...@@ -69,4 +71,15 @@ export default class utils { ...@@ -69,4 +71,15 @@ export default class utils {
return /^[!-\/:-@\[-`{-~\p{P}\p{S}\s]*$/u.test(str); return /^[!-\/:-@\[-`{-~\p{P}\p{S}\s]*$/u.test(str);
} }
// 加密
static aesEncrypt(word: string) {
var key = _cryptoJs.enc.Utf8.parse('e6ef616dc57343248f6b3e98a07e1dde');
var srcs = _cryptoJs.enc.Utf8.parse(word);
var encrypted = _cryptoJs.AES.encrypt(srcs, key, {
mode: _cryptoJs.mode.ECB,
padding: _cryptoJs.pad.Pkcs7
});
return encrypted.toString();
}
} }
...@@ -83,6 +83,9 @@ const marketing_template = reactive({ ...@@ -83,6 +83,9 @@ const marketing_template = reactive({
}); });
onMounted(() => { onMounted(() => {
// 初始化task_id
form.task_id = utils.genDateTimeStr();
console.log(form.task_id)
// 初始化示例数据 // 初始化示例数据
onChangeScreen(form.screen); onChangeScreen(form.screen);
// 初始化密码框 // 初始化密码框
...@@ -97,10 +100,10 @@ const delay = (ms: any) => new Promise(res => setTimeout(res, ms)); ...@@ -97,10 +100,10 @@ const delay = (ms: any) => new Promise(res => setTimeout(res, ms));
const onSubmitGpt = () => { const onSubmitGpt = () => {
text2videoService text2videoService
.submitLLM(form.chatgpt_prompt, wen_an_llm.api) .submitLLM(utils.aesEncrypt(form.chatgpt_prompt), utils.aesEncrypt(wen_an_llm.api), [], form.task_id, "true")
.then((result: string) => { .then((result: string) => {
console.log(form.chatgpt_prompt); // console.log(form.chatgpt_prompt);
console.log(result); // console.log(result);
form.chatgpt_answer = result; form.chatgpt_answer = result;
}) })
.catch((error: any) => { .catch((error: any) => {
...@@ -124,7 +127,7 @@ const onAdaptRoles = async () => { ...@@ -124,7 +127,7 @@ const onAdaptRoles = async () => {
try { try {
form.chatgpt_answer_roles = []; form.chatgpt_answer_roles = [];
const adapt_restrict = `请理解这个故事:“${form.chatgpt_answer}”,给出这个故事中的所有角色,多个角色以逗号分隔。\n要求:只返回角色名称即可,不要添加其他的内容。`; const adapt_restrict = `请理解这个故事:“${form.chatgpt_answer}”,给出这个故事中的所有角色,多个角色以逗号分隔。\n要求:只返回角色名称即可,不要添加其他的内容。`;
let roles = await text2videoService.submitLLM(adapt_restrict, role_llm.api); let roles = await text2videoService.submitLLM(utils.aesEncrypt(adapt_restrict), utils.aesEncrypt(role_llm.api), [], form.task_id, "true");
form.all_roles = roles.replace(/。|(|)/g, '').replace(/、/g, ','); form.all_roles = roles.replace(/。|(|)/g, '').replace(/、/g, ',');
console.log(form.all_roles); console.log(form.all_roles);
const roles_arr = form.all_roles.split(/[,,]/); const roles_arr = form.all_roles.split(/[,,]/);
...@@ -136,7 +139,7 @@ const onAdaptRoles = async () => { ...@@ -136,7 +139,7 @@ const onAdaptRoles = async () => {
// const adapt_attribute_restrict = `根据这个故事:“${form.chatgpt_answer}”,你认为这个角色:“${one_role}”是“${String(attribute_options)}”中的哪一种?请返回选择的结果。\n要求:只返回选择的结果即可,不要添加其他的内容。`; // const adapt_attribute_restrict = `根据这个故事:“${form.chatgpt_answer}”,你认为这个角色:“${one_role}”是“${String(attribute_options)}”中的哪一种?请返回选择的结果。\n要求:只返回选择的结果即可,不要添加其他的内容。`;
// const adapt_attribute_restrict = `你认为这个角色:“${one_role}”是“${String(attribute_options)}”中的哪一种?请返回选择的结果。\n要求:只返回选择的结果即可,不要添加其他的内容。`; // const adapt_attribute_restrict = `你认为这个角色:“${one_role}”是“${String(attribute_options)}”中的哪一种?请返回选择的结果。\n要求:只返回选择的结果即可,不要添加其他的内容。`;
const adapt_attribute_restrict = `故事全文:“${form.chatgpt_answer}”,请理解故事全文,然后判断:“${one_role}”是“${String(attribute_options)}”中的哪一种?请返回选择的结果。\n要求:只返回选择的结果即可,不要添加其他的内容。`; const adapt_attribute_restrict = `故事全文:“${form.chatgpt_answer}”,请理解故事全文,然后判断:“${one_role}”是“${String(attribute_options)}”中的哪一种?请返回选择的结果。\n要求:只返回选择的结果即可,不要添加其他的内容。`;
let attribute = await text2videoService.submitLLM(adapt_attribute_restrict, role_llm.api); let attribute = await text2videoService.submitLLM(utils.aesEncrypt(adapt_attribute_restrict), utils.aesEncrypt(role_llm.api), [], form.task_id, "true");
console.log('dddddddd', attribute) console.log('dddddddd', attribute)
if (attribute_options.includes(attribute)) { if (attribute_options.includes(attribute)) {
form.chatgpt_answer_roles.push({ form.chatgpt_answer_roles.push({
...@@ -194,14 +197,14 @@ const onAdaptRolesKeywords = async () => { ...@@ -194,14 +197,14 @@ const onAdaptRolesKeywords = async () => {
身体(皮毛,羽毛,鳞片,肤色等,可以发挥想象进行补充,没有就不提供)`; 身体(皮毛,羽毛,鳞片,肤色等,可以发挥想象进行补充,没有就不提供)`;
} }
adapt_keyword_restrict = adapt_keyword_restrict + temp_restrict + "。回答限制在30个字左右。"; adapt_keyword_restrict = adapt_keyword_restrict + temp_restrict + "。回答限制在30个字左右。";
let keywords = await text2videoService.submitLLM(adapt_keyword_restrict, role_keywords_llm.api); let keywords = await text2videoService.submitLLM(utils.aesEncrypt(adapt_keyword_restrict), utils.aesEncrypt(role_keywords_llm.api), [], form.task_id, "true");
keywords = keywords.replace(/。/g, '').replace(/、/g, ','); keywords = keywords.replace(/。/g, '').replace(/、/g, ',');
one_role.角色关键词 = keywords; one_role.角色关键词 = keywords;
await delay(100); await delay(100);
// const adapt_attribute_restrict_en = `你现在扮演专业的英语翻译的角色。请将这段文字“${keywords}”翻译为英语。\n要求:只返回英语即可,不要返回其他内容。`; // const adapt_attribute_restrict_en = `你现在扮演专业的英语翻译的角色。请将这段文字“${keywords}”翻译为英语。\n要求:只返回英语即可,不要返回其他内容。`;
// let keywords_en = await text2videoService.submitLLM(adapt_attribute_restrict_en, role_keywords_llm.api); // let keywords_en = await text2videoService.submitLLM(adapt_attribute_restrict_en, role_keywords_llm.api);
let keywords_en = await text2videoService.submitTranslateToEn(keywords); let keywords_en = await text2videoService.submitTranslateToEn(utils.aesEncrypt(keywords), form.task_id, "true");
// console.log(keywords_en) // console.log(keywords_en)
// keywords_en = utils.filterChineseAndPunctuation(keywords_en.replace(/"/g, '')); // keywords_en = utils.filterChineseAndPunctuation(keywords_en.replace(/"/g, ''));
keywords_en = keywords_en.replace(/"/g, ''); keywords_en = keywords_en.replace(/"/g, '');
...@@ -237,8 +240,13 @@ const onAdapt = async () => { ...@@ -237,8 +240,13 @@ const onAdapt = async () => {
}); });
return; return;
} }
form.task_id = utils.genDateTimeStr(); if (!form.task_id) {
console.log(form.task_id) ElMessage({
message: "task_id不能为空,请刷新页面",
type: "error",
});
return;
}
// 按标点拆分成分镜 // 按标点拆分成分镜
const sentences = utils.splitText(form.chatgpt_answer); const sentences = utils.splitText(form.chatgpt_answer);
// console.log(sentences.length) // console.log(sentences.length)
...@@ -323,14 +331,14 @@ const onAdaptOneScene = async (item: any) => { ...@@ -323,14 +331,14 @@ const onAdaptOneScene = async (item: any) => {
const adapt_restrict = `剧本:“${form.chatgpt_answer} const adapt_restrict = `剧本:“${form.chatgpt_answer}
指令: 指令:
作为资深作家,请阅读这个剧本,给出这个场景:“${item.场景描述}”的描述,50个字左右。`; 作为资深作家,请阅读这个剧本,给出这个场景:“${item.场景描述}”的描述,50个字左右。`;
const keywords = await text2videoService.submitLLM(adapt_restrict, tuili_llm.api); const keywords = await text2videoService.submitLLM(utils.aesEncrypt(adapt_restrict), utils.aesEncrypt(tuili_llm.api), [], form.task_id, "true");
console.log(adapt_restrict) // console.log(adapt_restrict)
console.log(keywords) // console.log(keywords)
item.场景关键词 = keywords; item.场景关键词 = keywords;
// const adapt_restrict_en = `你现在扮演专业的英语翻译的角色。请将这段文字“${item.场景描述}”翻译为英语。\n要求:只返回英语即可,不要返回其他内容。`; // const adapt_restrict_en = `你现在扮演专业的英语翻译的角色。请将这段文字“${item.场景描述}”翻译为英语。\n要求:只返回英语即可,不要返回其他内容。`;
// const keywords_en = await text2videoService.submitLLM(adapt_restrict_en, tuili_llm.api); // const keywords_en = await text2videoService.submitLLM(adapt_restrict_en, tuili_llm.api);
let keywords_en = await text2videoService.submitTranslateToEn(keywords); let keywords_en = await text2videoService.submitTranslateToEn(utils.aesEncrypt(keywords), form.task_id, "true");
// console.log(keywords_en) // console.log(keywords_en)
// item.场景关键词英文 = utils.filterChineseAndPunctuation(keywords_en.replace(/"/g, '')); // item.场景关键词英文 = utils.filterChineseAndPunctuation(keywords_en.replace(/"/g, ''));
item.场景关键词英文 = keywords_en.replace(/"/g, ''); item.场景关键词英文 = keywords_en.replace(/"/g, '');
...@@ -403,7 +411,7 @@ const onAdaptOneSceneRoles = async (item: any) => { ...@@ -403,7 +411,7 @@ const onAdaptOneSceneRoles = async (item: any) => {
// 总角色不为空 // 总角色不为空
// const adapt_role_restrict = `请理解这个故事:“${form.chatgpt_answer}”,针对其中的这个场景:“${item.场景描述}”,从所有角色:“${form.all_roles}”中选择本场景的角色,多个角色以逗号分隔。`; // const adapt_role_restrict = `请理解这个故事:“${form.chatgpt_answer}”,针对其中的这个场景:“${item.场景描述}”,从所有角色:“${form.all_roles}”中选择本场景的角色,多个角色以逗号分隔。`;
const adapt_role_restrict = `整个故事(“${form.chatgpt_answer}),\n\n本章节(${item.场景描述}),\n\n角色列表(${form.all_roles}),\n\n请返回给本章节出现的角色。注意:不要发挥想象,必须从角色列表中选出本章节出现过的角色,如果多个用逗号隔开。`; const adapt_role_restrict = `整个故事(“${form.chatgpt_answer}),\n\n本章节(${item.场景描述}),\n\n角色列表(${form.all_roles}),\n\n请返回给本章节出现的角色。注意:不要发挥想象,必须从角色列表中选出本章节出现过的角色,如果多个用逗号隔开。`;
const item_roles_answer = await text2videoService.submitLLM(adapt_role_restrict, tuili_keyword_llm.api); const item_roles_answer = await text2videoService.submitLLM(utils.aesEncrypt(adapt_role_restrict), utils.aesEncrypt(tuili_keyword_llm.api), [], form.task_id, "true");
console.log(`==============${item.编号}===============`) console.log(`==============${item.编号}===============`)
console.log('form.all_roles = ', form.all_roles) console.log('form.all_roles = ', form.all_roles)
item.info = `推理返回:${item_roles_answer}` item.info = `推理返回:${item_roles_answer}`
...@@ -565,11 +573,14 @@ const onDrawOne = async (item: any) => { ...@@ -565,11 +573,14 @@ const onDrawOne = async (item: any) => {
}); });
return; return;
} }
// 翻译+画图
if (!form.task_id) { if (!form.task_id) {
form.task_id = utils.genDateTimeStr(); ElMessage({
console.log(form.task_id) message: "task_id不能为空,请刷新页面",
type: "error",
});
return;
} }
// 翻译+画图
try { try {
item.本镜配图 = "src/assets/loading.gif"; item.本镜配图 = "src/assets/loading.gif";
// let temp_prompt = "" // let temp_prompt = ""
...@@ -592,7 +603,19 @@ const onDrawOne = async (item: any) => { ...@@ -592,7 +603,19 @@ const onDrawOne = async (item: any) => {
const seed = sd_model.seed; const seed = sd_model.seed;
const steps = sd_model.steps; const steps = sd_model.steps;
const cfg_scale = sd_model.cfg_scale; const cfg_scale = sd_model.cfg_scale;
const sd_img = await text2videoService.submitSD(form.task_id, item.编号, sd_prompt, sd_negative_prompt_prefix, form.img_size.width, form.img_size.height, sampler_index, seed, steps, cfg_scale); const sd_img = await text2videoService.submitSD(
form.task_id,
item.编号,
utils.aesEncrypt(sd_prompt),
utils.aesEncrypt(sd_negative_prompt_prefix),
utils.aesEncrypt(form.img_size.width),
utils.aesEncrypt(form.img_size.height),
utils.aesEncrypt(sampler_index),
utils.aesEncrypt(seed),
utils.aesEncrypt(steps),
utils.aesEncrypt(cfg_scale),
"true"
);
item.本镜配图 = sd_img.domain_image_path + "?v=" + utils.genDateTimeStr(); item.本镜配图 = sd_img.domain_image_path + "?v=" + utils.genDateTimeStr();
item.local_image_path = sd_img.local_image_path; item.local_image_path = sd_img.local_image_path;
} catch (error) { } catch (error) {
...@@ -1119,17 +1142,19 @@ const onMarketingTemplateSubmitGpt = async () => { ...@@ -1119,17 +1142,19 @@ const onMarketingTemplateSubmitGpt = async () => {
` `
try { try {
console.log("第一次提问") console.log("第一次提问")
let result1 = await text2videoService.submitLLM(marketing_template.prompt1, wen_an_llm.api); let result1 = await text2videoService.submitLLM(utils.aesEncrypt(marketing_template.prompt1), utils.aesEncrypt(wen_an_llm.api), [], form.task_id, "true");
marketing_template.result1 = result1; marketing_template.result1 = result1;
console.log(marketing_template.prompt1); // console.log(marketing_template.prompt1);
console.log(marketing_template.result1); // console.log(marketing_template.result1);
console.log("第二次带历史提问") console.log("第二次带历史提问")
const history = [{'role': 'user', 'content': marketing_template.prompt1}, {'role': 'assistant', 'content': result1}] const history = [
let result2 = await text2videoService.submitLLM(marketing_template.prompt2, wen_an_llm.api, history); {'role': utils.aesEncrypt('user'), 'content': utils.aesEncrypt(marketing_template.prompt1)},
{'role': utils.aesEncrypt('assistant'), 'content': utils.aesEncrypt(result1)}]
let result2 = await text2videoService.submitLLM(utils.aesEncrypt(marketing_template.prompt2), utils.aesEncrypt(wen_an_llm.api), history, form.task_id, "true");
marketing_template.result2 = result2; marketing_template.result2 = result2;
console.log(JSON.stringify(history), marketing_template.prompt2); // console.log(JSON.stringify(history), marketing_template.prompt2);
console.log(marketing_template.result2); // console.log(marketing_template.result2);
form.chatgpt_answer = result2; form.chatgpt_answer = result2;
marketingTemplateVisible.value = false; marketingTemplateVisible.value = false;
...@@ -1142,6 +1167,24 @@ const onMarketingTemplateSubmitGpt = async () => { ...@@ -1142,6 +1167,24 @@ const onMarketingTemplateSubmitGpt = async () => {
} }
}; };
const onTest = () => {
console.log(form.chatgpt_prompt);
const encrypt_data = utils.aesEncrypt(form.chatgpt_prompt);
console.log(encrypt_data);
text2videoService
.submitTest(encrypt_data)
.then((result: string) => {
console.log(result);
form.chatgpt_answer = result;
})
.catch((error: any) => {
// console.error(error);
ElMessage({
message: error,
type: "error",
});
});
};
</script> </script>
<template> <template>
...@@ -1159,6 +1202,7 @@ const onMarketingTemplateSubmitGpt = async () => { ...@@ -1159,6 +1202,7 @@ const onMarketingTemplateSubmitGpt = async () => {
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="success" @click="clean_demo">清除所有数据</el-button> <el-button type="success" @click="clean_demo">清除所有数据</el-button>
<!-- <el-button type="danger" @click="onTest">测试</el-button> -->
</el-form-item> </el-form-item>
<!-- Prompt到文案 --> <!-- Prompt到文案 -->
<el-form-item label="Prompt"> <el-form-item label="Prompt">
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment