Commit f69ff7a9 authored by Administrator's avatar Administrator

SD接口增加模型名称,可更换模型

parent e42888b1
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* 相关接口 * 相关接口
*/ */
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[] = [], task_id: string = "-", encrypt: string = "false"): Promise<string> { submitLLM(prompt: string, llm: string = "gpt", history: Wm.PromptHistory[] = [], task_id: string = "-", encrypt: string = "false"): Promise<string> {
...@@ -22,7 +22,7 @@ export default { ...@@ -22,7 +22,7 @@ export default {
}) })
.catch((err: any) => { .catch((err: any) => {
console.log(`err = ${JSON.stringify(err)}`); console.log(`err = ${JSON.stringify(err)}`);
return Promise.reject(`与LLM通讯失败${JSON.stringify(err.message)}`); return Promise.reject(`与LLM通讯失败`);
}); });
}, },
...@@ -37,7 +37,8 @@ export default { ...@@ -37,7 +37,8 @@ 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" encrypt: string = "false",
model: string = ""
): 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提示词不能为空");
...@@ -54,6 +55,7 @@ export default { ...@@ -54,6 +55,7 @@ export default {
height: height, height: height,
cfg_scale: cfg_scale, cfg_scale: cfg_scale,
encrypt: encrypt, encrypt: encrypt,
model: model,
} }
return request.post('/text2video/text2img', post_data) return request.post('/text2video/text2img', post_data)
.then((res: any) => { .then((res: any) => {
...@@ -67,7 +69,7 @@ export default { ...@@ -67,7 +69,7 @@ export default {
}) })
.catch((err: any) => { .catch((err: any) => {
console.log(`err = ${JSON.stringify(err)}`); console.log(`err = ${JSON.stringify(err)}`);
return Promise.reject(`与 stable-diffusion-webui Api 通讯失败${JSON.stringify(err.message)}`); return Promise.reject(`与 stable-diffusion-webui Api 通讯失败`);
}); });
}, },
...@@ -88,7 +90,7 @@ export default { ...@@ -88,7 +90,7 @@ export default {
}) })
.catch((err: any) => { .catch((err: any) => {
console.log(`err = ${JSON.stringify(err)}`); console.log(`err = ${JSON.stringify(err)}`);
return Promise.reject(`gen_video接口通讯失败${JSON.stringify(err.message)}`); return Promise.reject(`gen_video接口通讯失败`);
}); });
}, },
...@@ -109,7 +111,7 @@ export default { ...@@ -109,7 +111,7 @@ export default {
}) })
.catch((err: any) => { .catch((err: any) => {
console.log(`err = ${JSON.stringify(err)}`); console.log(`err = ${JSON.stringify(err)}`);
return Promise.reject(`与pwd_check接口通讯失败${JSON.stringify(err.message)}`); return Promise.reject(`与pwd_check接口通讯失败`);
}); });
}, },
...@@ -130,7 +132,7 @@ export default { ...@@ -130,7 +132,7 @@ export default {
}) })
.catch((err: any) => { .catch((err: any) => {
console.log(`err = ${JSON.stringify(err)}`); console.log(`err = ${JSON.stringify(err)}`);
return Promise.reject(`与翻译接口通讯失败${JSON.stringify(err.message)}`); return Promise.reject(`与翻译接口通讯失败`);
}); });
}, },
...@@ -148,7 +150,7 @@ export default { ...@@ -148,7 +150,7 @@ export default {
}) })
.catch((err: any) => { .catch((err: any) => {
console.log(`err = ${JSON.stringify(err)}`); console.log(`err = ${JSON.stringify(err)}`);
return Promise.reject(`add_text_to_img接口通讯失败${JSON.stringify(err.message)}`); return Promise.reject(`add_text_to_img接口通讯失败`);
}); });
}, },
...@@ -166,7 +168,7 @@ export default { ...@@ -166,7 +168,7 @@ export default {
}) })
.catch((err: any) => { .catch((err: any) => {
console.log(`err = ${JSON.stringify(err)}`); console.log(`err = ${JSON.stringify(err)}`);
return Promise.reject(`与Test Api通讯失败${JSON.stringify(err.message)}`); return Promise.reject(`与Test Api通讯失败`);
}); });
}, },
} }
...@@ -314,6 +314,7 @@ export const useManyValues = () => { ...@@ -314,6 +314,7 @@ export const useManyValues = () => {
const sd_paras = { const sd_paras = {
dreamshaperXL_v21TurboDPMSDE: { dreamshaperXL_v21TurboDPMSDE: {
model: "dreamshaperXL_v21TurboDPMSDE.safetensors",
sampler_index: "DPM++ SDE Karras", sampler_index: "DPM++ SDE Karras",
seed: "-1", seed: "-1",
steps: "6", steps: "6",
...@@ -321,6 +322,7 @@ export const useManyValues = () => { ...@@ -321,6 +322,7 @@ export const useManyValues = () => {
sd_prompt_prefix: sd_prompt_prefix sd_prompt_prefix: sd_prompt_prefix
}, },
juggernautXL_v9Rdphoto2Lightning: { juggernautXL_v9Rdphoto2Lightning: {
model: "juggernautXL_v9Rdphoto2Lightning.safetensors",
sampler_index: "Euler", sampler_index: "Euler",
seed: "-1", seed: "-1",
steps: "8", steps: "8",
......
...@@ -612,6 +612,7 @@ const onDrawOne = async (item: any) => { ...@@ -612,6 +612,7 @@ 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 model = sd_model.model;
const sd_img = await text2videoService.submitSD( const sd_img = await text2videoService.submitSD(
form.task_id, form.task_id,
item.编号, item.编号,
...@@ -623,7 +624,8 @@ const onDrawOne = async (item: any) => { ...@@ -623,7 +624,8 @@ const onDrawOne = async (item: any) => {
utils.aesEncrypt(seed), utils.aesEncrypt(seed),
utils.aesEncrypt(steps), utils.aesEncrypt(steps),
utils.aesEncrypt(cfg_scale), utils.aesEncrypt(cfg_scale),
"true" "true",
utils.aesEncrypt(model),
); );
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;
...@@ -1301,8 +1303,12 @@ const onSelectCoverChange = (value: any) => { ...@@ -1301,8 +1303,12 @@ const onSelectCoverChange = (value: any) => {
<el-input v-model="form.chatgpt_prompt" :autosize="true" type="textarea" /> <el-input v-model="form.chatgpt_prompt" :autosize="true" type="textarea" />
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" @click="onSubmitGpt">生成文案({{ wen_an_llm.name }}</el-button> <el-button type="primary" @click="onSubmitGpt"
<el-button type="danger" @click="marketingTemplateVisible = true">通过营销模板生成文案</el-button> >生成文案({{ wen_an_llm.name }}</el-button
>
<el-button type="danger" @click="marketingTemplateVisible = true"
>通过营销模板生成文案</el-button
>
</el-form-item> </el-form-item>
<el-form-item label="文案"> <el-form-item label="文案">
<template v-if="marketing_template.result2"> <template v-if="marketing_template.result2">
...@@ -1317,33 +1323,62 @@ const onSelectCoverChange = (value: any) => { ...@@ -1317,33 +1323,62 @@ const onSelectCoverChange = (value: any) => {
</el-form-item> </el-form-item>
<!-- 角色 --> <!-- 角色 -->
<el-form-item> <el-form-item>
<el-button type="primary" @click="onAdaptRoles">推理角色({{ role_llm.name }})</el-button> <el-button type="primary" @click="onAdaptRoles"
<el-button type="primary" @click="onAdaptRolesKeywords">推理角色关键词({{ role_keywords_llm.name }})</el-button> >推理角色({{ role_llm.name }})</el-button
>
<el-button type="primary" @click="onAdaptRolesKeywords"
>推理角色关键词({{ role_keywords_llm.name }})</el-button
>
<el-button plain @click="clean_roles">清空总角色列表</el-button> <el-button plain @click="clean_roles">清空总角色列表</el-button>
</el-form-item> </el-form-item>
<el-form-item label="角色"> <el-form-item label="角色">
<el-table :data="form.chatgpt_answer_roles" border style="width: 100%; z-index: calc(var(--el-table-index) -1)"> <el-table
:data="form.chatgpt_answer_roles"
border
style="width: 100%; z-index: calc(var(--el-table-index) -1)"
>
<el-table-column prop="角色" label="角色" width="300"> <el-table-column prop="角色" label="角色" width="300">
<template v-slot="scope"> <template v-slot="scope">
<el-input v-model="scope.row.角色" :autosize="true" type="textarea"></el-input> <el-input
v-model="scope.row.角色"
:autosize="true"
type="textarea"
></el-input>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="属性" label="属性" width="300"> <el-table-column prop="属性" label="属性" width="300">
<template v-slot="scope"> <template v-slot="scope">
<el-select v-model="scope.row.属性" filterable allow-create :reserve-keyword="false"> <el-select
<el-option v-for="item in default_data.role_attribute_options" :key="item.value" :label="item.label" v-model="scope.row.属性"
:value="item.value" /> filterable
allow-create
:reserve-keyword="false"
>
<el-option
v-for="item in default_data.role_attribute_options"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select> </el-select>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="角色关键词" label="角色关键词"> <el-table-column prop="角色关键词" label="角色关键词">
<template v-slot="scope"> <template v-slot="scope">
<el-input v-model="scope.row.角色关键词" :autosize="true" type="textarea"></el-input> <el-input
v-model="scope.row.角色关键词"
:autosize="true"
type="textarea"
></el-input>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="角色关键词英文" label="角色关键词英文"> <el-table-column prop="角色关键词英文" label="角色关键词英文">
<template v-slot="scope"> <template v-slot="scope">
<el-input v-model="scope.row.角色关键词英文" :autosize="true" type="textarea"></el-input> <el-input
v-model="scope.row.角色关键词英文"
:autosize="true"
type="textarea"
></el-input>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
...@@ -1351,32 +1386,57 @@ const onSelectCoverChange = (value: any) => { ...@@ -1351,32 +1386,57 @@ const onSelectCoverChange = (value: any) => {
<!-- 分镜 --> <!-- 分镜 -->
<el-form-item> <el-form-item>
<el-button type="primary" @click="onAdapt">分镜</el-button> <el-button type="primary" @click="onAdapt">分镜</el-button>
<el-button type="primary" @click="onAdaptScene">推理场景({{ tuili_llm.name }})</el-button> <el-button type="primary" @click="onAdaptScene"
<el-button type="primary" @click="onAdaptSceneRoles">推理场景中的角色({{ tuili_keyword_llm.name }})</el-button> >推理场景({{ tuili_llm.name }})</el-button
>
<el-button type="primary" @click="onAdaptSceneRoles"
>推理场景中的角色({{ tuili_keyword_llm.name }})</el-button
>
<el-button type="primary" @click="onDraw">绘图</el-button> <el-button type="primary" @click="onDraw">绘图</el-button>
<el-button plain @click="clean_scenes">清空分镜列表</el-button> <el-button plain @click="clean_scenes">清空分镜列表</el-button>
</el-form-item> </el-form-item>
<el-form-item label="分镜"> <el-form-item label="分镜">
<el-table :data="form.adapt_result_json" border style="width: 100%; z-index: calc(var(--el-table-index) -1)"> <el-table
:data="form.adapt_result_json"
border
style="width: 100%; z-index: calc(var(--el-table-index) -1)"
>
<el-table-column prop="编号" label="编号" width="55" /> <el-table-column prop="编号" label="编号" width="55" />
<el-table-column prop="场景描述" label="场景描述"> <el-table-column prop="场景描述" label="场景描述">
<template v-slot="scope"> <template v-slot="scope">
<el-input v-model="scope.row.场景描述" :autosize="true" type="textarea"></el-input> <el-input
v-model="scope.row.场景描述"
:autosize="true"
type="textarea"
></el-input>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="场景关键词" label="场景关键词"> <el-table-column prop="场景关键词" label="场景关键词">
<template v-slot="scope"> <template v-slot="scope">
<el-text class="mx-1" size="small">{{ scope.row.场景关键词 }}</el-text> <el-text class="mx-1" size="small">{{ scope.row.场景关键词 }}</el-text>
<hr style="border: none; border-top: 1px dashed #999; margin: 5px 0;"> <hr style="border: none; border-top: 1px dashed #999; margin: 5px 0" />
<el-input v-model="scope.row.场景关键词英文" :autosize="true" type="textarea"></el-input> <el-input
v-model="scope.row.场景关键词英文"
:autosize="true"
type="textarea"
></el-input>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="角色" label="角色"> <el-table-column prop="角色" label="角色">
<template v-slot="scope"> <template v-slot="scope">
<el-text class="mx-1" size="small">{{ scope.row.info }}</el-text> <el-text class="mx-1" size="small">{{ scope.row.info }}</el-text>
<hr style="border: none; border-top: 1px dashed #999; margin: 5px 0;"> <hr style="border: none; border-top: 1px dashed #999; margin: 5px 0" />
<el-select v-model="scope.row.角色" placeholder="" @change="onItemRolesChange(scope.row)"> <el-select
<el-option v-for="item in scope.row.roles" :key="item" :label="item" :value="item"> v-model="scope.row.角色"
placeholder=""
@change="onItemRolesChange(scope.row)"
>
<el-option
v-for="item in scope.row.roles"
:key="item"
:label="item"
:value="item"
>
<span style="float: left">{{ item }}</span> <span style="float: left">{{ item }}</span>
</el-option> </el-option>
</el-select> </el-select>
...@@ -1386,15 +1446,26 @@ const onSelectCoverChange = (value: any) => { ...@@ -1386,15 +1446,26 @@ const onSelectCoverChange = (value: any) => {
<el-table-column prop="角色关键词" label="角色关键词"> <el-table-column prop="角色关键词" label="角色关键词">
<template v-slot="scope"> <template v-slot="scope">
<el-text class="mx-1" size="small">{{ scope.row.角色关键词 }}</el-text> <el-text class="mx-1" size="small">{{ scope.row.角色关键词 }}</el-text>
<hr style="border: none; border-top: 1px dashed #999; margin: 5px 0;"> <hr style="border: none; border-top: 1px dashed #999; margin: 5px 0" />
<el-input v-model="scope.row.角色关键词英文" :autosize="true" type="textarea"></el-input> <el-input
v-model="scope.row.角色关键词英文"
:autosize="true"
type="textarea"
></el-input>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="本镜配图" label="本镜配图" width="300"> <el-table-column prop="本镜配图" label="本镜配图" width="300">
<template v-slot="scope"> <template v-slot="scope">
<div> <div>
<el-image :src="scope.row.本镜配图" :zoom-rate="1.2" :max-scale="1.5" :min-scale="0.5" <el-image
:preview-src-list="[scope.row.本镜配图]" fit="cover" :hide-on-click-modal="true" /> :src="scope.row.本镜配图"
:zoom-rate="1.2"
:max-scale="1.5"
:min-scale="0.5"
:preview-src-list="[scope.row.本镜配图]"
fit="cover"
:hide-on-click-modal="true"
/>
</div> </div>
</template> </template>
</el-table-column> </el-table-column>
...@@ -1405,184 +1476,420 @@ const onSelectCoverChange = (value: any) => { ...@@ -1405,184 +1476,420 @@ const onSelectCoverChange = (value: any) => {
</template> </template>
--> -->
<template v-slot="scope"> <template v-slot="scope">
<div style="margin: 5px 0"><el-button type="primary" size="small" @click="onAdaptOneScene(scope.row)">推理场景</el-button></div> <div style="margin: 5px 0">
<div style="margin: 5px 0"><el-button type="primary" size="small" @click="onAdaptOneSceneRoles(scope.row)">推理角色</el-button></div> <el-button type="primary" size="small" @click="onAdaptOneScene(scope.row)"
<div style="margin: 5px 0"><el-button type="primary" size="small" @click="onDrawOne(scope.row)">绘图</el-button></div> >推理场景</el-button
<el-upload ref="upload" :show-file-list="false" :limit="1" >
</div>
<div style="margin: 5px 0">
<el-button
type="primary"
size="small"
@click="onAdaptOneSceneRoles(scope.row)"
>推理角色</el-button
>
</div>
<div style="margin: 5px 0">
<el-button type="primary" size="small" @click="onDrawOne(scope.row)"
>绘图</el-button
>
</div>
<el-upload
ref="upload"
:show-file-list="false"
:limit="1"
accept=".png,.PNG,.jpg,.JPG,.jpeg,.JPEG,.gif,.GIF,.bmp,.BMP" accept=".png,.PNG,.jpg,.JPG,.jpeg,.JPEG,.gif,.GIF,.bmp,.BMP"
:action="actionUrl" :on-success="handleUploadSuccess" :on-exceed="handleUploadExceed" :action="actionUrl"
:on-error="handleUploadError" :data="{ width: form.img_size.width, height: form.img_size.height }" :on-success="handleUploadSuccess"
:before-upload="handleBeforeUpload"> :on-exceed="handleUploadExceed"
<el-button type="primary" size="small" @click="onClickUpload(scope.row)">上传图片</el-button> :on-error="handleUploadError"
:data="{ width: form.img_size.width, height: form.img_size.height }"
:before-upload="handleBeforeUpload"
>
<el-button type="primary" size="small" @click="onClickUpload(scope.row)"
>上传图片</el-button
>
</el-upload> </el-upload>
<!-- <div style="margin: 5px 0"><el-button plain size="small" @click="onClearOnePic(scope.row)">清除图片</el-button></div> --> <!-- <div style="margin: 5px 0"><el-button plain size="small" @click="onClearOnePic(scope.row)">清除图片</el-button></div> -->
<div style="margin: 5px 0"><el-button plain size="small" @click="showsdprompt(scope.row)">debug</el-button></div> <div style="margin: 5px 0">
<el-dialog v-model=dialogVisible width="80%"> <el-button plain size="small" @click="showsdprompt(scope.row)"
>debug</el-button
>
</div>
<el-dialog v-model="dialogVisible" width="80%">
<p>{{ dialogData }}</p> <p>{{ dialogData }}</p>
<template #footer> <template #footer>
<div class="dialog-footer"> <div class="dialog-footer">
<el-button type="primary" @click="dialogVisible = false">ok</el-button> <el-button type="primary" @click="dialogVisible = false"
>ok</el-button
>
</div> </div>
</template> </template>
</el-dialog> </el-dialog>
<div style="margin: 10px 0"><el-button type="danger" size="small" @click="onDeleteOne(scope.row)">删除本镜</el-button></div> <div style="margin: 10px 0">
<el-button type="danger" size="small" @click="onDeleteOne(scope.row)"
>删除本镜</el-button
>
</div>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
</el-form-item> </el-form-item>
<el-form-item label="封面图片"> <el-form-item label="封面图片">
<el-switch v-model="cover_backcover.if_need_cover_pic" active-value="true" inactive-value="false" /> <el-switch
v-model="cover_backcover.if_need_cover_pic"
active-value="true"
inactive-value="false"
/>
</el-form-item> </el-form-item>
<div v-if="JSON.parse(cover_backcover.if_need_cover_pic.toLowerCase())"> <div v-if="JSON.parse(cover_backcover.if_need_cover_pic.toLowerCase())">
<el-form-item> <el-form-item>
<!-- :style="{ width: String(parseInt(form.img_size.width) / 3)+'px', height: String(parseInt(form.img_size.height) / 3)+'px' }" --> <!-- :style="{ width: String(parseInt(form.img_size.width) / 3)+'px', height: String(parseInt(form.img_size.height) / 3)+'px' }" -->
<div :style="{ width: String(parseInt(form.img_size.width) / 3)+'px' }" class="dashed-div"> <div
:style="{ width: String(parseInt(form.img_size.width) / 3) + 'px' }"
class="dashed-div"
>
<el-image :src="cover_backcover.cover_pic" /> <el-image :src="cover_backcover.cover_pic" />
</div> </div>
<div :style="{ width: String(parseInt(form.img_size.width) / 3)+'px' }" class="dashed-div" style="margin-left: 20px;"> <div
:style="{ width: String(parseInt(form.img_size.width) / 3) + 'px' }"
class="dashed-div"
style="margin-left: 20px"
>
<el-image :src="cover_backcover.cover_pic_with_text" /> <el-image :src="cover_backcover.cover_pic_with_text" />
</div> </div>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-upload ref="upload_cover" :show-file-list="false" :limit="1" <el-upload
ref="upload_cover"
:show-file-list="false"
:limit="1"
accept=".png,.PNG,.jpg,.JPG,.jpeg,.JPEG,.gif,.GIF,.bmp,.BMP" accept=".png,.PNG,.jpg,.JPG,.jpeg,.JPEG,.gif,.GIF,.bmp,.BMP"
:action="actionUrl" :on-success="MarketingTemplateUploadCoverPicSuccess" :on-exceed="handleMarketingTemplateUploadCoverPicExceed" :action="actionUrl"
:on-error="handleUploadError" :data="{ width: form.img_size.width, height: form.img_size.height }" :on-success="MarketingTemplateUploadCoverPicSuccess"
:before-upload="handleBeforeUpload"> :on-exceed="handleMarketingTemplateUploadCoverPicExceed"
:on-error="handleUploadError"
:data="{ width: form.img_size.width, height: form.img_size.height }"
:before-upload="handleBeforeUpload"
>
<el-button type="primary" size="small">上传图片</el-button> <el-button type="primary" size="small">上传图片</el-button>
</el-upload> </el-upload>
<span style="margin-left:12px;">或使用第</span> <span style="margin-left: 12px">或使用第</span>
<el-select size="small" v-model="cover_backcover.cover_pic_use_scene" placeholder="选择" style="width: 60px;" @change="onSelectCoverChange"> <el-select
<el-option v-for="item in form.adapt_result_json" :key="item.编号" :label="item.编号" :value="item.编号"> size="small"
v-model="cover_backcover.cover_pic_use_scene"
placeholder="选择"
style="width: 60px"
@change="onSelectCoverChange"
>
<el-option
v-for="item in form.adapt_result_json"
:key="item.编号"
:label="item.编号"
:value="item.编号"
>
<span style="float: left">{{ item.编号 }}</span> <span style="float: left">{{ item.编号 }}</span>
</el-option> </el-option>
</el-select> </el-select>
<span>帧做封面</span> <span>帧做封面</span>
<el-button type="danger" size="small" @click="onClearMarketingTemplatePic('cover')" style="margin-left: 12px;">清除图片</el-button> <el-button
type="danger"
size="small"
@click="onClearMarketingTemplatePic('cover')"
style="margin-left: 12px"
>清除图片</el-button
>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<div style="width: 100%;"> <div style="width: 100%">
<el-button type="primary" size="small" @click="onAddMarketingTemplatePicText('cover', 'add', 0)">增加文字</el-button> <el-button
type="primary"
size="small"
@click="onAddMarketingTemplatePicText('cover', 'add', 0)"
>增加文字</el-button
>
<!-- <el-button type="success" size="small" @click="onMarketingTemplateAddTextToPic('cover')">预览</el-button> --> <!-- <el-button type="success" size="small" @click="onMarketingTemplateAddTextToPic('cover')">预览</el-button> -->
</div> </div>
<div v-for="(pic_title, index) in cover_backcover.cover_pic_titles" :key="index" class="dashed-div" style="width: 100%;"> <div
<el-input v-model="pic_title.text" :autosize="true" type="textarea" @change="onMarketingTemplateAddTextToPic('cover')"></el-input> v-for="(pic_title, index) in cover_backcover.cover_pic_titles"
<span style="margin-left:10px;">字体颜色:</span> :key="index"
<el-color-picker v-model="pic_title.color" @change="onMarketingTemplateAddTextToPic('cover')"/> class="dashed-div"
<span style="margin-left:30px;">字体背景:</span> style="width: 100%"
<el-color-picker v-model="pic_title.bg_color" @change="onMarketingTemplateAddTextToPic('cover')"/> >
<span style="margin-left:30px;">字体大小:</span> <el-input
<el-input-number v-model="pic_title.font_size" :min="1" :max="100" controls-position="right" @change="onMarketingTemplateAddTextToPic('cover')"/> v-model="pic_title.text"
<span style="margin-left:30px;">在图片上的位置:</span> :autosize="true"
<el-slider v-model="pic_title.position" :step="0.01" :min="0" :max="1" show-input vertical height="100px" style="margin-top: 10px;" type="textarea"
@change="onMarketingTemplateAddTextToPic('cover')"/> @change="onMarketingTemplateAddTextToPic('cover')"
<el-button type="danger" size="small" @click="onAddMarketingTemplatePicText('cover', 'del', index)" style="margin-left: 80px;">删除文字</el-button> ></el-input>
<span style="margin-left: 10px">字体颜色:</span>
<el-color-picker
v-model="pic_title.color"
@change="onMarketingTemplateAddTextToPic('cover')"
/>
<span style="margin-left: 30px">字体背景:</span>
<el-color-picker
v-model="pic_title.bg_color"
@change="onMarketingTemplateAddTextToPic('cover')"
/>
<span style="margin-left: 30px">字体大小:</span>
<el-input-number
v-model="pic_title.font_size"
:min="1"
:max="100"
controls-position="right"
@change="onMarketingTemplateAddTextToPic('cover')"
/>
<span style="margin-left: 30px">在图片上的位置:</span>
<el-slider
v-model="pic_title.position"
:step="0.01"
:min="0"
:max="1"
show-input
vertical
height="100px"
style="margin-top: 10px"
@change="onMarketingTemplateAddTextToPic('cover')"
/>
<el-button
type="danger"
size="small"
@click="onAddMarketingTemplatePicText('cover', 'del', index)"
style="margin-left: 80px"
>删除文字</el-button
>
</div> </div>
</el-form-item> </el-form-item>
</div> </div>
<el-form-item label="封底图片"> <el-form-item label="封底图片">
<el-switch v-model="cover_backcover.if_need_product_pic" active-value="true" inactive-value="false" /> <el-switch
v-model="cover_backcover.if_need_product_pic"
active-value="true"
inactive-value="false"
/>
</el-form-item> </el-form-item>
<div v-if="JSON.parse(cover_backcover.if_need_product_pic.toLowerCase())"> <div v-if="JSON.parse(cover_backcover.if_need_product_pic.toLowerCase())">
<el-form-item> <el-form-item>
<!-- :style="{ width: String(parseInt(form.img_size.width) / 3)+'px', height: String(parseInt(form.img_size.height) / 3)+'px' }" --> <!-- :style="{ width: String(parseInt(form.img_size.width) / 3)+'px', height: String(parseInt(form.img_size.height) / 3)+'px' }" -->
<div :style="{ width: String(parseInt(form.img_size.width) / 3)+'px' }" class="dashed-div"> <div
:style="{ width: String(parseInt(form.img_size.width) / 3) + 'px' }"
class="dashed-div"
>
<el-image :src="cover_backcover.product_pic" /> <el-image :src="cover_backcover.product_pic" />
</div> </div>
<div :style="{ width: String(parseInt(form.img_size.width) / 3)+'px' }" class="dashed-div" style="margin-left: 20px;"> <div
:style="{ width: String(parseInt(form.img_size.width) / 3) + 'px' }"
class="dashed-div"
style="margin-left: 20px"
>
<el-image :src="cover_backcover.product_pic_with_text" /> <el-image :src="cover_backcover.product_pic_with_text" />
</div> </div>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-upload ref="upload_product" :show-file-list="false" :limit="1" <el-upload
ref="upload_product"
:show-file-list="false"
:limit="1"
accept=".png,.PNG,.jpg,.JPG,.jpeg,.JPEG,.gif,.GIF,.bmp,.BMP" accept=".png,.PNG,.jpg,.JPG,.jpeg,.JPEG,.gif,.GIF,.bmp,.BMP"
:action="actionUrl" :on-success="MarketingTemplateUploadProductPicSuccess" :on-exceed="handleMarketingTemplateUploadProductPicExceed" :action="actionUrl"
:on-error="handleUploadError" :data="{ width: form.img_size.width, height: form.img_size.height }" :on-success="MarketingTemplateUploadProductPicSuccess"
:before-upload="handleBeforeUpload"> :on-exceed="handleMarketingTemplateUploadProductPicExceed"
:on-error="handleUploadError"
:data="{ width: form.img_size.width, height: form.img_size.height }"
:before-upload="handleBeforeUpload"
>
<el-button type="primary" size="small">上传图片</el-button> <el-button type="primary" size="small">上传图片</el-button>
</el-upload> </el-upload>
<el-button type="danger" size="small" @click="onClearMarketingTemplatePic('product')" style="margin-left: 12px;">清除图片</el-button> <el-button
type="danger"
size="small"
@click="onClearMarketingTemplatePic('product')"
style="margin-left: 12px"
>清除图片</el-button
>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<div style="width: 100%;"> <div style="width: 100%">
<el-button type="primary" size="small" @click="onAddMarketingTemplatePicText('product', 'add', 0)">增加文字</el-button> <el-button
type="primary"
size="small"
@click="onAddMarketingTemplatePicText('product', 'add', 0)"
>增加文字</el-button
>
<!-- <el-button type="success" size="small" @click="onMarketingTemplateAddTextToPic('product')">预览</el-button> --> <!-- <el-button type="success" size="small" @click="onMarketingTemplateAddTextToPic('product')">预览</el-button> -->
</div> </div>
<div v-for="(pic_title, index) in cover_backcover.product_pic_titles" :key="index" class="dashed-div" style="width: 100%;"> <div
<el-input v-model="pic_title.text" :autosize="true" type="textarea" @change="onMarketingTemplateAddTextToPic('product')"></el-input> v-for="(pic_title, index) in cover_backcover.product_pic_titles"
<span style="margin-left:10px;">字体颜色:</span> :key="index"
<el-color-picker v-model="pic_title.color" @change="onMarketingTemplateAddTextToPic('product')"/> class="dashed-div"
<span style="margin-left:30px;">字体背景:</span> style="width: 100%"
<el-color-picker v-model="pic_title.bg_color" @change="onMarketingTemplateAddTextToPic('product')"/> >
<span style="margin-left:30px;">字体大小:</span> <el-input
<el-input-number v-model="pic_title.font_size" :min="1" :max="100" controls-position="right" @change="onMarketingTemplateAddTextToPic('product')"/> v-model="pic_title.text"
<span style="margin-left:30px;">在图片上的位置:</span> :autosize="true"
<el-slider v-model="pic_title.position" :step="0.01" :min="0" :max="1" show-input vertical height="100px" style="margin-top: 10px;" type="textarea"
@change="onMarketingTemplateAddTextToPic('product')"/> @change="onMarketingTemplateAddTextToPic('product')"
<el-button type="danger" size="small" @click="onAddMarketingTemplatePicText('product', 'del', index)" style="margin-left: 80px;">删除文字</el-button> ></el-input>
<span style="margin-left: 10px">字体颜色:</span>
<el-color-picker
v-model="pic_title.color"
@change="onMarketingTemplateAddTextToPic('product')"
/>
<span style="margin-left: 30px">字体背景:</span>
<el-color-picker
v-model="pic_title.bg_color"
@change="onMarketingTemplateAddTextToPic('product')"
/>
<span style="margin-left: 30px">字体大小:</span>
<el-input-number
v-model="pic_title.font_size"
:min="1"
:max="100"
controls-position="right"
@change="onMarketingTemplateAddTextToPic('product')"
/>
<span style="margin-left: 30px">在图片上的位置:</span>
<el-slider
v-model="pic_title.position"
:step="0.01"
:min="0"
:max="1"
show-input
vertical
height="100px"
style="margin-top: 10px"
@change="onMarketingTemplateAddTextToPic('product')"
/>
<el-button
type="danger"
size="small"
@click="onAddMarketingTemplatePicText('product', 'del', index)"
style="margin-left: 80px"
>删除文字</el-button
>
</div> </div>
</el-form-item> </el-form-item>
<el-form-item label="封底旁白"> <el-form-item label="封底旁白">
<el-input v-model="cover_backcover.product_pic_speech" :autosize="true" type="textarea"></el-input> <el-input
v-model="cover_backcover.product_pic_speech"
:autosize="true"
type="textarea"
></el-input>
</el-form-item> </el-form-item>
</div> </div>
<!-- 生成视频 --> <!-- 生成视频 -->
<el-form-item label="视频设置"> <el-form-item label="视频设置">
<span style="margin: 0 20px 0 0">TTS语速:</span> <span style="margin: 0 20px 0 0">TTS语速:</span>
<el-slider v-model="voice_rate" show-input :min="-50" :max="50" :marks="default_data.marks" <el-slider
style="width: 900px" /> v-model="voice_rate"
show-input
:min="-50"
:max="50"
:marks="default_data.marks"
style="width: 900px"
/>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<span style="margin: 0 20px 0 0">TTS音量:</span> <span style="margin: 0 20px 0 0">TTS音量:</span>
<el-slider v-model="voice_volume" show-input :min="-80" :max="80" :marks="default_data.marks" <el-slider
style="width: 900px" /> v-model="voice_volume"
show-input
:min="-80"
:max="80"
:marks="default_data.marks"
style="width: 900px"
/>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<span style="margin: 20px 20px 0 0">TTS语音:</span> <span style="margin: 20px 20px 0 0">TTS语音:</span>
<el-select v-model="voice" placeholder="Select" style="width: 400px; margin-top: 20px;"> <el-select
<el-option v-for="item in default_data.voices" :key="item.value" :label="item.value" :value="item.value"> v-model="voice"
placeholder="Select"
style="width: 400px; margin-top: 20px"
>
<el-option
v-for="item in default_data.voices"
:key="item.value"
:label="item.value"
:value="item.value"
>
<span style="float: left">{{ item.value }}</span> <span style="float: left">{{ item.value }}</span>
<span style=" <span
float: right; style="float: right; color: var(--el-text-color-secondary); font-size: 13px"
color: var(--el-text-color-secondary); >{{ item.label }}</span
font-size: 13px; >
">{{ item.label }}</span>
</el-option> </el-option>
</el-select> </el-select>
<audio :src="'src/assets/edge-tts-voices/' + voice + '.mp3'" controls <audio
style="height: 30px; margin: 20px 0 0 10px;"></audio> :src="'src/assets/edge-tts-voices/' + voice + '.mp3'"
controls
style="height: 30px; margin: 20px 0 0 10px"
></audio>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<span style="margin: 0 20px 0 0">背景音乐:</span> <span style="margin: 0 20px 0 0">背景音乐:</span>
<el-select v-model="bgm" placeholder="无" style="width: 400px;"> <el-select v-model="bgm" placeholder="无" style="width: 400px">
<el-option v-for="item in default_data.bgm" :key="item.value" :label="item.value" :value="item.value"> <el-option
v-for="item in default_data.bgm"
:key="item.value"
:label="item.value"
:value="item.value"
>
<span style="float: left">{{ item.label }}</span> <span style="float: left">{{ item.label }}</span>
<span style=" <span
float: right; style="float: right; color: var(--el-text-color-secondary); font-size: 13px"
color: var(--el-text-color-secondary); >{{ item.value }}</span
font-size: 13px; >
">{{ item.value }}</span>
</el-option> </el-option>
</el-select> </el-select>
<audio :src="'src/assets/bgm/' + bgm + '.mp3'" controls style="height: 30px; margin-left:10px;"></audio> <audio
:src="'src/assets/bgm/' + bgm + '.mp3'"
controls
style="height: 30px; margin-left: 10px"
></audio>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<span style="margin: 0 20px 0 0">背景音量:</span> <span style="margin: 0 20px 0 0">背景音量:</span>
<el-slider v-model="bgm_volume" show-input :step="0.1" :min="0" :max="2" :marks="default_data.bgm_volume_marks" <el-slider
style="width: 600px" /> v-model="bgm_volume"
show-input
:step="0.1"
:min="0"
:max="2"
:marks="default_data.bgm_volume_marks"
style="width: 600px"
/>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<span style="margin: 20px 20px 20px 0">字幕合成:</span> <span style="margin: 20px 20px 20px 0">字幕合成:</span>
<el-switch v-model="form.if_need_subtitle" active-value="true" inactive-value="false" /> <el-switch
v-model="form.if_need_subtitle"
active-value="true"
inactive-value="false"
/>
<div v-if="JSON.parse(form.if_need_subtitle.toLowerCase())"> <div v-if="JSON.parse(form.if_need_subtitle.toLowerCase())">
<span style="margin-left:30px;">字体颜色:</span> <span style="margin-left: 30px">字体颜色:</span>
<el-color-picker v-model="sub_font_color" /> <el-color-picker v-model="sub_font_color" />
<span style="margin-left:30px;">字体背景:</span> <span style="margin-left: 30px">字体背景:</span>
<el-color-picker v-model="sub_bg_color" /> <el-color-picker v-model="sub_bg_color" />
<span style="margin-left:30px;">字体大小:</span> <span style="margin-left: 30px">字体大小:</span>
<el-input-number v-model="sub_font_size" :min="1" :max="50" controls-position="right" /> <el-input-number
<span style="margin-left:30px;">在屏幕上的位置:</span> v-model="sub_font_size"
<el-slider v-model="sub_position" :step="0.1" :min="0" :max="1" show-input vertical height="100px" /> :min="1"
:max="50"
controls-position="right"
/>
<span style="margin-left: 30px">在屏幕上的位置:</span>
<el-slider
v-model="sub_position"
:step="0.1"
:min="0"
:max="1"
show-input
vertical
height="100px"
/>
</div> </div>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
...@@ -1593,12 +1900,23 @@ const onSelectCoverChange = (value: any) => { ...@@ -1593,12 +1900,23 @@ const onSelectCoverChange = (value: any) => {
</el-form-item> </el-form-item>
</el-form> </el-form>
<!-- 授权密码框 --> <!-- 授权密码框 -->
<el-dialog v-model=pwdCheckDialogVisible title="请输入密码" width="20%" :close-on-click-modal="false" <el-dialog
:close-on-press-escape="false" :show-close="false"> v-model="pwdCheckDialogVisible"
title="请输入密码"
width="20%"
:close-on-click-modal="false"
:close-on-press-escape="false"
:show-close="false"
>
<el-form :model="form"> <el-form :model="form">
<el-form-item label="密码"> <el-form-item label="密码">
<el-input v-model="pwdCheckValue" autocomplete="off" type="password" show-password <el-input
@keyup.enter="onPwdCheckDialog()" /> v-model="pwdCheckValue"
autocomplete="off"
type="password"
show-password
@keyup.enter="onPwdCheckDialog()"
/>
</el-form-item> </el-form-item>
</el-form> </el-form>
...@@ -1610,8 +1928,16 @@ const onSelectCoverChange = (value: any) => { ...@@ -1610,8 +1928,16 @@ const onSelectCoverChange = (value: any) => {
</el-dialog> </el-dialog>
<!-- 营销模板 --> <!-- 营销模板 -->
<el-dialog v-model=marketingTemplateVisible title="营销模板" width="60%" height="500" :close-on-click-modal="false" <el-dialog
:close-on-press-escape="true" :show-close="true" :lock-scroll="true"> v-model="marketingTemplateVisible"
title="营销模板"
width="60%"
height="500"
:close-on-click-modal="false"
:close-on-press-escape="true"
:show-close="true"
:lock-scroll="true"
>
<!-- <!--
<el-tabs v-model="activeTab"> <el-tabs v-model="activeTab">
<el-tab-pane label="商品" name="first">User</el-tab-pane> <el-tab-pane label="商品" name="first">User</el-tab-pane>
...@@ -1623,38 +1949,72 @@ const onSelectCoverChange = (value: any) => { ...@@ -1623,38 +1949,72 @@ const onSelectCoverChange = (value: any) => {
--> -->
<el-form :model="marketing_template"> <el-form :model="marketing_template">
<el-form-item label="商品名称"> <el-form-item label="商品名称">
<el-input v-model="marketing_template.product_name" :autosize="true" type="textarea"></el-input> <el-input
v-model="marketing_template.product_name"
:autosize="true"
type="textarea"
></el-input>
</el-form-item> </el-form-item>
<el-form-item label="商品描述"> <el-form-item label="商品描述">
<el-input v-model="marketing_template.product_description" :autosize="true" type="textarea"></el-input> <el-input
v-model="marketing_template.product_description"
:autosize="true"
type="textarea"
></el-input>
</el-form-item> </el-form-item>
<el-form-item label="目标群体"> <el-form-item label="目标群体">
<el-input v-model="marketing_template.target_people" :autosize="true" type="textarea"></el-input> <el-input
v-model="marketing_template.target_people"
:autosize="true"
type="textarea"
></el-input>
</el-form-item> </el-form-item>
<el-form-item label="文案主角"> <el-form-item label="文案主角">
<el-input v-model="marketing_template.text_role" :autosize="true" type="textarea"></el-input> <el-input
v-model="marketing_template.text_role"
:autosize="true"
type="textarea"
></el-input>
</el-form-item> </el-form-item>
<el-form-item label="文案风格"> <el-form-item label="文案风格">
<el-input v-model="marketing_template.text_style" :autosize="true" type="textarea"></el-input> <el-input
v-model="marketing_template.text_style"
:autosize="true"
type="textarea"
></el-input>
</el-form-item> </el-form-item>
<el-form-item label="故事类型"> <el-form-item label="故事类型">
<el-input v-model="marketing_template.story_type" :autosize="true" type="textarea"></el-input> <el-input
v-model="marketing_template.story_type"
:autosize="true"
type="textarea"
></el-input>
</el-form-item> </el-form-item>
<el-form-item label="参考信息"> <el-form-item label="参考信息">
<el-input v-model="marketing_template.reference" :autosize="true" type="textarea"></el-input> <el-input
v-model="marketing_template.reference"
:autosize="true"
type="textarea"
></el-input>
</el-form-item> </el-form-item>
<el-form-item label="文案字数"> <el-form-item label="文案字数">
<el-input-number v-model="marketing_template.words_num" :min="100" :max="500" controls-position="right"/> <el-input-number
v-model="marketing_template.words_num"
:min="100"
:max="500"
controls-position="right"
/>
</el-form-item> </el-form-item>
</el-form> </el-form>
<template #footer> <template #footer>
<div class="dialog-footer"> <div class="dialog-footer">
<el-button @click="marketingTemplateVisible = false">取消</el-button> <el-button @click="marketingTemplateVisible = false">取消</el-button>
<el-button type="primary" @click="onMarketingTemplateSubmitGpt()">提交</el-button> <el-button type="primary" @click="onMarketingTemplateSubmitGpt()"
>提交</el-button
>
</div> </div>
</template> </template>
</el-dialog> </el-dialog>
</main> </main>
</template> </template>
......
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