diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 4d06ff5..c6a118e 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -3,18 +3,18 @@ name: Build and Release
on:
push:
tags:
- - 'v*'
+ - "v*"
workflow_dispatch:
inputs:
version:
- description: 'Version number (e.g., 1.0.0)'
+ description: "Version number (e.g., 1.0.0)"
required: false
type: string
jobs:
build-windows:
runs-on: windows-latest
-
+
steps:
- name: Checkout code
uses: actions/checkout@v4
@@ -22,8 +22,8 @@ jobs:
- name: Setup Node.js
uses: actions/setup-node@v4
with:
- node-version: '24'
- cache: 'yarn'
+ node-version: "24"
+ cache: "yarn"
- name: Install dependencies
run: yarn install --frozen-lockfile
@@ -47,7 +47,7 @@ jobs:
build-macos:
runs-on: macos-latest
-
+
steps:
- name: Checkout code
uses: actions/checkout@v4
@@ -55,8 +55,8 @@ jobs:
- name: Setup Node.js
uses: actions/setup-node@v4
with:
- node-version: '24'
- cache: 'yarn'
+ node-version: "24"
+ cache: "yarn"
- name: Install dependencies
run: yarn install --frozen-lockfile
@@ -82,7 +82,7 @@ jobs:
needs: [build-windows, build-macos]
runs-on: ubuntu-latest
if: startsWith(github.ref, 'refs/tags/')
-
+
permissions:
contents: write
@@ -111,4 +111,4 @@ jobs:
dist/*.zip
dist/*.dmg
env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
\ No newline at end of file
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
diff --git a/.gitignore b/.gitignore
index 9612690..538210a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -43,4 +43,6 @@ db.sqlite
db.sqlite-shm
db.sqlite-wal
-web/*
\ No newline at end of file
+web/*
+
+.devtools
\ No newline at end of file
diff --git a/README.md b/README.md
index 3a60cea..3279f7e 100644
--- a/README.md
+++ b/README.md
@@ -517,9 +517,15 @@ pm2 monit # 监控面板
~~交流群 7~~
-交流群 8:
+~~交流群 8~~
-
+~~交流群 9~~
+
+~~交流群 10~~
+
+交流群 11:
+
+
使用微信扫码添加,二维码过期可提交 Issues 提醒更新
---
@@ -540,11 +546,11 @@ Toonflow 基于 AGPL-3.0 协议开源发布,许可证详情:https://www.gnu.
---
-
+---
# 🙏 致谢
diff --git a/docs/chat10QR.jpg b/docs/chat10QR.jpg
new file mode 100644
index 0000000..28e94a6
Binary files /dev/null and b/docs/chat10QR.jpg differ
diff --git a/docs/chat11QR.jpg b/docs/chat11QR.jpg
new file mode 100644
index 0000000..e01830e
Binary files /dev/null and b/docs/chat11QR.jpg differ
diff --git a/docs/chat9QR.jpg b/docs/chat9QR.jpg
new file mode 100644
index 0000000..f8d1d36
Binary files /dev/null and b/docs/chat9QR.jpg differ
diff --git a/electron-builder.yml b/electron-builder.yml
index 40b752b..0ebf062 100644
--- a/electron-builder.yml
+++ b/electron-builder.yml
@@ -18,6 +18,7 @@ files:
- "!**/*.d.ts"
- "!src/**/*"
- "!scripts/**/*.ts"
+ - "!scripts/*.ts"
asar: true
diff --git a/package.json b/package.json
index 8fd8fad..39b85a6 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "toonflow-app",
- "version": "1.0.6-dev2",
+ "version": "1.0.6",
"description": "Toonflow 是一款 AI 短剧漫剧工具,能够利用 AI 技术将小说自动转化为剧本,并结合 AI 生成的图片和视频,实现高效的短剧创作。",
"author": "HBAI-Ltd ",
"homepage": "https://github.com/HBAI-Ltd/Toonflow-app#readme",
diff --git a/scripts/main.ts b/scripts/main.ts
index a1e2470..a97fb0e 100644
--- a/scripts/main.ts
+++ b/scripts/main.ts
@@ -3,26 +3,26 @@ import path from "path";
import startServe, { closeServe } from "src/app";
function createMainWindow(): void {
- const isDev = process.env.NODE_ENV === "dev" || !app.isPackaged;
- const basePath = isDev ? process.cwd() : app.getAppPath();
-
const win = new BrowserWindow({
width: 900,
height: 600,
show: true,
autoHideMenuBar: true,
- icon: path.join(
- basePath,
- "scripts",
- process.platform === "win32" ? "logo.ico" : "logo.png"
- ),
});
- const htmlPath = path.join(basePath, "scripts", "web", "index.html");
+ // 开发环境和生产环境使用不同的路径
+ const isDev = process.env.NODE_ENV === "dev" || !app.isPackaged;
+ const htmlPath = isDev
+ ? path.join(process.cwd(), "scripts", "web", "index.html")
+ : path.join(app.getAppPath(), "scripts", "web", "index.html");
void win.loadFile(htmlPath);
}
app.whenReady().then(async () => {
createMainWindow();
- await startServe();
+ try {
+ await startServe();
+ } catch (err) {
+ console.error("[服务启动失败]:", err);
+ }
});
app.on("window-all-closed", () => {
diff --git a/scripts/web/index.html b/scripts/web/index.html
index 8476767..f3e04d1 100644
--- a/scripts/web/index.html
+++ b/scripts/web/index.html
@@ -845,7 +845,7 @@ Character number: `+e.characterNumber};cy.prototype.lineNumber=function(){return
`,r:"\r",t:" "};function WGe(e){return e.replace(/\\(.)/g,function(t,n){return WVi[n]||n})}var HVi=Bo.rules.sequence(Bo.rules.tokenOfType("open-square-bracket"),Bo.rules.sequence.cut(),Bo.rules.sequence.capture(VZ),Bo.rules.tokenOfType("equals"),Bo.rules.sequence.capture(jx),Bo.rules.tokenOfType("close-square-bracket")).map(function(e,t){return{name:e,value:t,append:!1}}),zVi=Bo.rules.sequence(Bo.rules.tokenOfType("dot"),Bo.rules.sequence.cut(),Bo.rules.sequence.capture(VZ)).map(function(e){return{name:"class",value:e,append:!0}}),BVi=Bo.rules.firstOf("attribute or class",HVi,zVi);function Ofe(e,t){var n=DVi(t),o=Bo.Parser(),r=o.parseTokens(e,n);return r.isSuccess()?dre.success(r.value()):new dre.Result(null,[dre.warning(VVi(t,r))])}function VVi(e,t){return"Did not understand this style mapping, so ignored it: "+e+`
`+t.errors().map(FVi).join(`
`)}function FVi(e){return"Error was at character number "+e.characterNumber()+": Expected "+e.expected+" but got "+e.actual}var UVi=NVi(),FZ={};FZ.readOptions=ZVi;var HGe=Du,GVi=FZ._defaultStyleMap=["p.Heading1 => h1:fresh","p.Heading2 => h2:fresh","p.Heading3 => h3:fresh","p.Heading4 => h4:fresh","p.Heading5 => h5:fresh","p.Heading6 => h6:fresh","p[style-name='Heading 1'] => h1:fresh","p[style-name='Heading 2'] => h2:fresh","p[style-name='Heading 3'] => h3:fresh","p[style-name='Heading 4'] => h4:fresh","p[style-name='Heading 5'] => h5:fresh","p[style-name='Heading 6'] => h6:fresh","p[style-name='heading 1'] => h1:fresh","p[style-name='heading 2'] => h2:fresh","p[style-name='heading 3'] => h3:fresh","p[style-name='heading 4'] => h4:fresh","p[style-name='heading 5'] => h5:fresh","p[style-name='heading 6'] => h6:fresh","p.Heading => h1:fresh","p[style-name='Heading'] => h1:fresh","r[style-name='Strong'] => strong","p[style-name='footnote text'] => p:fresh","r[style-name='footnote reference'] =>","p[style-name='endnote text'] => p:fresh","r[style-name='endnote reference'] =>","p[style-name='annotation text'] => p:fresh","r[style-name='annotation reference'] =>","p[style-name='Footnote'] => p:fresh","r[style-name='Footnote anchor'] =>","p[style-name='Endnote'] => p:fresh","r[style-name='Endnote anchor'] =>","p:unordered-list(1) => ul > li:fresh","p:unordered-list(2) => ul|ol > li > ul > li:fresh","p:unordered-list(3) => ul|ol > li > ul|ol > li > ul > li:fresh","p:unordered-list(4) => ul|ol > li > ul|ol > li > ul|ol > li > ul > li:fresh","p:unordered-list(5) => ul|ol > li > ul|ol > li > ul|ol > li > ul|ol > li > ul > li:fresh","p:ordered-list(1) => ol > li:fresh","p:ordered-list(2) => ul|ol > li > ol > li:fresh","p:ordered-list(3) => ul|ol > li > ul|ol > li > ol > li:fresh","p:ordered-list(4) => ul|ol > li > ul|ol > li > ul|ol > li > ol > li:fresh","p:ordered-list(5) => ul|ol > li > ul|ol > li > ul|ol > li > ul|ol > li > ol > li:fresh","r[style-name='Hyperlink'] =>","p[style-name='Normal'] => p:fresh","p.Body => p:fresh","p[style-name='Body'] => p:fresh"],YVi=FZ._standardOptions={externalFileAccess:!1,transformDocument:XVi,includeDefaultStyleMap:!0,includeEmbeddedStyleMap:!0};function ZVi(e){return e=e||{},HGe.extend({},YVi,e,{customStyleMap:aSe(e.styleMap),readStyleMap:function(){var t=this.customStyleMap;return this.includeEmbeddedStyleMap&&(t=t.concat(aSe(this.embeddedStyleMap))),this.includeDefaultStyleMap&&(t=t.concat(GVi)),t}})}function aSe(e){return e?HGe.isString(e)?e.split(`
-`).map(function(t){return t.trim()}).filter(function(t){return t!==""&&t.charAt(0)!=="#"}):e:[]}function XVi(e){return e}var zGe={},sSe=Vd,qVi=Tp;zGe.openZip=KVi;function KVi(e){return e.arrayBuffer?sSe.resolve(qVi.openArrayBuffer(e.arrayBuffer)):sSe.reject(new Error("Could not find file in options"))}var BGe={},JVi=WZ(),QVi=PZ();BGe.element=$Vi;function $Vi(e){return function(t){return QVi.elementWithTag(JVi.element(e),[t])}}var eFi=Du,VGe=$2e,Dfe=Efe,tFi=Mfe.DocumentConverter,nFi=xGe.convertElementToRawText,iFi=HZ.readStyle,oFi=FZ.readOptions,UZ=zGe,rFi=Yf.Result;Sk.convertToHtml=lFi;Sk.convertToMarkdown=aFi;Sk.convert=pfe;Sk.extractRawText=dFi;Sk.images=Afe;Sk.transforms=S6;Sk.underline=BGe;Sk.embedStyleMap=hFi;Sk.readEmbeddedStyleMap=sFi;function lFi(e,t){return pfe(e,t)}function aFi(e,t){var n=Object.create(t||{});return n.outputFormat="markdown",pfe(e,n)}function pfe(e,t){return t=oFi(t),UZ.openZip(e).tap(function(n){return Dfe.readStyleMap(n).then(function(o){t.embeddedStyleMap=o})}).then(function(n){return VGe.read(n,e,t).then(function(o){return o.map(t.transformDocument)}).then(function(o){return cFi(o,t)})})}function sFi(e){return UZ.openZip(e).then(Dfe.readStyleMap)}function cFi(e,t){var n=uFi(t.readStyleMap()),o=eFi.extend({},t,{styleMap:n.value}),r=new tFi(o);return e.flatMapThen(function(l){return n.flatMapThen(function(a){return r.convertToHtml(l)})})}function uFi(e){return rFi.combine((e||[]).map(iFi)).map(function(t){return t.filter(function(n){return!!n})})}function dFi(e){return UZ.openZip(e).then(VGe.read).then(function(t){return t.map(nFi)})}function hFi(e,t){return UZ.openZip(e).tap(function(n){return Dfe.writeStyleMap(n,t)}).then(function(n){return n.toArrayBuffer()}).then(function(n){return{toArrayBuffer:function(){return n},toBuffer:function(){return Buffer.from(n)}}})}Sk.styleMapping=function(){throw new Error(`Use a raw string instead of mammoth.styleMapping e.g. "p[style-name='Title'] => h1" instead of mammoth.styleMapping("p[style-name='Title'] => h1")`)};const fFi={class:"purgeNovel"},kFi={class:"data"},gFi={style:{"padding-top":"42px","padding-bottom":"42px","background-color":"#f9fafb"}},mFi={class:"dragIcon"},vFi={class:"formItem"},bFi={class:"uploadWrap"},yFi={class:"footerInfo f ac jb",style:{"margin-top":"8px"}},wFi={class:"charCount"},CFi={key:0,class:"tips warn"},LFi={style:{"margin-top":"16px","text-align":"right"}},xFi={style:{"margin-top":"16px","text-align":"right"}},SFi=_t({__name:"purgeNovel",props:{modelValue:{type:Boolean},modelModifiers:{}},emits:xs(["select"],["update:modelValue"]),setup(e,{emit:t}){const n=ec(e,"modelValue"),o=t,r=be("To1"),l=be(),a=be(""),s=be([]),c=be([]),u=G(()=>{if(!a.value)return[];try{return cWi(a.value).flatMap(g=>g.chapters.map(v=>({index:v.index,reel:g.reel,chapter:v.chapter,chapterData:v.text})))}catch(g){return console.error("解析小说内容出错:",g),[]}}),d=G(()=>c.value.reduce((g,v)=>g+v.chapterData.length,0));async function h(g){const v=await g.arrayBuffer();return g.type==="text/plain"?new TextDecoder().decode(v):(await Sk.extractRawText({arrayBuffer:v})).value}async function k(g){const v=["text/plain","application/vnd.openxmlformats-officedocument.wordprocessingml.document"];if(g.type==="application/msword")return $i.warning(".doc文件不支持解析,请转换为.txt或.docx文件"),!1;if(!v.includes(g.type))return $i.error("不支持的文件类型"),!1;if(g.size>10*1024*1024)return $i.error("文件大小超过10MB,请上传更小的文件"),!1;const w=ZOe.service({lock:!0,text:"文件解析中...",background:"rgba(0,0,0,0.7)"});try{a.value=await h(g)}catch{$i.error("文件解析失败,请重新上传")}finally{w.close()}return!1}function m({records:g}){c.value=g}function b(){if(!c.value.length){$i.warning("请先勾选章节");return}o("select",c.value)}return(g,v)=>{const w=wi("i-upload-one"),L=AIt,x=NU,S=e1,E=Xa,M=ey,T=wi("vxe-column"),j=wi("vxe-table"),O=O3,P=as;return we(),Pe("div",fFi,[i(P,{footer:null,style:{top:"20px"},open:n.value,"onUpdate:open":v[5]||(v[5]=B=>n.value=B),title:"上传小说原文",width:"50%"},{default:nt(()=>[he("div",kFi,[i(O,{activeKey:I(r),"onUpdate:activeKey":v[4]||(v[4]=B=>Wr(r)?r.value=B:null)},{default:nt(()=>[i(M,{key:"To1",tab:"第一步"},{default:nt(()=>[he("div",null,[i(L,{fileList:I(s),"onUpdate:fileList":v[0]||(v[0]=B=>Wr(s)?s.value=B:null),name:"file",multiple:!1,maxCount:1,beforeUpload:k,showUploadList:!0,action:"/"},{default:nt(()=>[he("div",gFi,[he("div",mFi,[i(w,{theme:"outline",size:"32",fill:"#9810fa"})]),v[6]||(v[6]=he("p",{class:"ant-upload-text"},"拖拽小说原文文件到此处或点击上传",-1)),v[7]||(v[7]=he("p",{class:"ant-upload-hint"},"支持 .txt, .docx 格式,建议文件大小不超过 10MB",-1))])]),_:1},8,["fileList"])]),i(x,null,{default:nt(()=>[...v[8]||(v[8]=[mi("或",-1)])]),_:1}),he("div",vFi,[v[9]||(v[9]=he("div",{class:"label"},"直接粘贴小说原文内容",-1)),he("div",bFi,[i(S,{value:I(a),"onUpdate:value":v[1]||(v[1]=B=>Wr(a)?a.value=B:null),placeholder:"请输入小说原文内容","auto-size":{minRows:18,maxRows:18},style:{"background-color":"#f9fafb !important"}},null,8,["value"])]),he("div",yFi,[he("div",null,[he("span",wFi,on(I(a).length)+" 字符",1),I(a).length>0&&I(a).length<100?(we(),Pe("span",CFi,"内容过短,建议至少100字符")):Tt("",!0)]),he("span",null,"已解析 "+on(I(u).length)+" 章节",1)])]),he("div",LFi,[i(E,{type:"primary",style:{"margin-left":"10px"},disabled:!I(a)||!I(u).length,onClick:v[2]||(v[2]=B=>r.value="To2")},{default:nt(()=>[...v[10]||(v[10]=[mi(" 下一步 ",-1)])]),_:1},8,["disabled"])])]),_:1}),i(M,{key:"To2",tab:"第二步","force-render":""},{default:nt(()=>[he("div",null,[i(j,{ref_key:"tableRef",ref:l,"show-footer":"",height:"500","row-config":{isHover:!0},data:I(u),"checkbox-config":{highlight:!0,trigger:"row"},onCheckboxChange:m,onCheckboxAll:m},{default:nt(()=>[i(T,{type:"checkbox",width:"60"}),i(T,{field:"index",title:"章",width:"100"}),i(T,{field:"reel",title:"卷",width:"100"}),i(T,{field:"chapter",title:"章节名称",width:"200","show-header-overflow":"","show-overflow":"title","show-footer-overflow":""}),i(T,{field:"chapterData",title:"章节内容","show-header-overflow":"","show-overflow":"title","show-footer-overflow":""})]),_:1},8,["data"])]),he("div",null,"已勾选:"+on(I(d))+"字(小于200000字)",1),he("div",xFi,[i(E,{style:{"margin-top":"16px"},onClick:v[3]||(v[3]=B=>r.value="To1")},{default:nt(()=>[...v[11]||(v[11]=[mi("上一步",-1)])]),_:1}),i(E,{type:"primary",style:{"margin-left":"10px"},disabled:I(d)>2e5,onClick:b},{default:nt(()=>[...v[12]||(v[12]=[mi("保存",-1)])]),_:1},8,["disabled"])])]),_:1})]),_:1},8,["activeKey"])])]),_:1},8,["open"])])}}}),EFi={class:"overviewMain"},MFi={class:"smSummary jb"},AFi={class:"f"},TFi={class:"actionBtns"},_Fi={class:"editModalContent"},jFi=_t({__name:"index",setup(e){const{projectId:t}=_u($u()),n=be([]),o=be(!1),r=be(!1),l=be({id:-1,index:0,reel:"",chapter:"",chapterData:""}),a=()=>{cr.post("/novel/getNovel",{projectId:t.value}).then(h=>{n.value=h.data})},s=h=>{cr.post("/novel/addNovel",{projectId:t.value,data:h}).then(()=>{a(),o.value=!1})},c=h=>{l.value={...h},r.value=!0},u=()=>{cr.post("/novel/updateNovel",l.value).then(()=>{a(),$i.success("更新成功"),r.value=!1})},d=h=>{cr.post("/novel/delNovel",{id:h.id}).then(()=>{a()})};return ji(a),(h,k)=>{const m=wi("i-file-text"),b=wi("i-optimize"),g=wi("vxe-column"),v=wi("i-edit"),w=wi("i-delete"),L=RE,x=wi("vxe-table"),S=hc,E=Ey,M=e1,T=Tf,j=as;return we(),Pe("div",EFi,[k[9]||(k[9]=he("div",{class:"overviewHeader"},[he("h2",{class:"overviewTitle"},"小说原文"),he("p",{class:"overviewSub"},"查看小说原文")],-1)),he("div",MFi,[he("div",AFi,[i(m,{size:24,class:"smSummaryIcon mr-3"}),k[7]||(k[7]=he("span",{class:"smSummaryTitle"},"原文管理",-1))]),he("button",{class:"smSummaryBtn",onClick:k[0]||(k[0]=O=>o.value=!0)},[i(b,{size:16}),k[8]||(k[8]=mi(" 新增 ",-1))])]),i(x,{ref:"tableRef",data:I(n),"row-config":{isHover:!0},"checkbox-config":{highlight:!0,trigger:"row"},height:"500",style:{"margin-top":"12px"}},{default:nt(()=>[i(g,{field:"index",title:"章",width:"100"}),i(g,{field:"reel",title:"卷",width:"100"}),i(g,{field:"chapter",title:"章节名称",width:"200","show-overflow":"title"}),i(g,{field:"chapterData",title:"章节内容","show-overflow":"title"}),i(g,{title:"操作",width:"100"},{default:nt(({row:O})=>[he("div",TFi,[i(v,{size:"21",onClick:P=>c(O)},null,8,["onClick"]),i(L,{title:"确定要删除吗?","ok-text":"确认","cancel-text":"取消",onConfirm:P=>d(O)},{default:nt(()=>[i(w,{size:"21"})]),_:1},8,["onConfirm"])])]),_:1})]),_:1},8,["data"]),i(SFi,{modelValue:I(o),"onUpdate:modelValue":k[1]||(k[1]=O=>Wr(o)?o.value=O:null),onSelect:s},null,8,["modelValue"]),i(j,{open:I(r),"onUpdate:open":k[6]||(k[6]=O=>Wr(r)?r.value=O:null),width:"60vw",title:"编辑原文",onOk:u},{default:nt(()=>[he("div",_Fi,[i(T,{model:I(l),layout:"vertical"},{default:nt(()=>[i(E,{label:"章",required:""},{default:nt(()=>[i(S,{value:I(l).index,"onUpdate:value":k[2]||(k[2]=O=>I(l).index=O),type:"number"},null,8,["value"])]),_:1}),i(E,{label:"卷",required:""},{default:nt(()=>[i(S,{value:I(l).reel,"onUpdate:value":k[3]||(k[3]=O=>I(l).reel=O)},null,8,["value"])]),_:1}),i(E,{label:"章节名称",required:""},{default:nt(()=>[i(S,{value:I(l).chapter,"onUpdate:value":k[4]||(k[4]=O=>I(l).chapter=O)},null,8,["value"])]),_:1}),i(E,{label:"章节内容",required:""},{default:nt(()=>[i(M,{value:I(l).chapterData,"onUpdate:value":k[5]||(k[5]=O=>I(l).chapterData=O),"auto-size":{minRows:5,maxRows:20}},null,8,["value"])]),_:1})]),_:1},8,["model"])])]),_:1},8,["open"])])}}}),OFi=za(jFi,[["__scopeId","data-v-d4b34dae"]]),oh=[];for(let e=0;e<256;++e)oh.push((e+256).toString(16).slice(1));function DFi(e,t=0){return(oh[e[t+0]]+oh[e[t+1]]+oh[e[t+2]]+oh[e[t+3]]+"-"+oh[e[t+4]]+oh[e[t+5]]+"-"+oh[e[t+6]]+oh[e[t+7]]+"-"+oh[e[t+8]]+oh[e[t+9]]+"-"+oh[e[t+10]]+oh[e[t+11]]+oh[e[t+12]]+oh[e[t+13]]+oh[e[t+14]]+oh[e[t+15]]).toLowerCase()}let hre;const pFi=new Uint8Array(16);function NFi(){if(!hre){if(typeof crypto>"u"||!crypto.getRandomValues)throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");hre=crypto.getRandomValues.bind(crypto)}return hre(pFi)}const RFi=typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto),cSe={randomUUID:RFi};function IFi(e,t,n){var r;e=e||{};const o=e.random??((r=e.rng)==null?void 0:r.call(e))??NFi();if(o.length<16)throw new Error("Random bytes length must be >= 16");return o[6]=o[6]&15|64,o[8]=o[8]&63|128,DFi(o)}function M0(e,t,n){return cSe.randomUUID&&!e?cSe.randomUUID():IFi(e)}const Vm="data:image/png;base64,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",PFi={key:0,class:"ac jb titHeader",style:{background:"#f9faff",height:"60px",display:"flex",width:"100%"}},WFi={style:{"font-weight":"bold","font-size":"18px","margin-left":"24px"}},HFi={style:{"margin-left":"24px"}},zFi={style:{"font-size":"14px"}},BFi={key:0,class:"modelBody",style:{"max-height":"650px",overflow:"auto"}},VFi={class:"footerBtns"},FFi=_t({__name:"addElementDialog",props:xs({type:{},data:{},scriptId:{}},{modelValue:{type:Boolean,default:!1},modelModifiers:{}}),emits:xs(["update"],["update:modelValue"]),setup(e,{emit:t}){const{projectId:n}=_u($u()),o=ec(e,"modelValue"),r=e,l=be("新增");gt(o,k=>{var m;k&&(s.value=r.data,((m=s.value)==null?void 0:m.id)==-1?l.value="新增":l.value="编辑")});const a=be(null),s=be(),c={role:"角色",scene:"场景",props:"道具",storyboard:"分镜"};function u(){o.value=!1}const d=t;function h(){var k;(k=a.value)==null||k.validate().then(async()=>{try{if(!s.value)return;if(s.value.id){const m=await cr.post("/assets/updateAssets",{id:s.value.id,name:s.value.name,intro:s.value.intro??"",type:c[r.type],remark:s.value.remark==null?"":s.value.remark,prompt:s.value.prompt??"",videoPrompt:s.value.videoPrompt??"",duration:Number(s.value.duration)})}else{const m=await cr.post("/assets/addAssets",{projectId:n.value,name:s.value.name,intro:s.value.intro,type:c[r.type],remark:s.value.remark==null?"":s.value.remark,prompt:"",videoPrompt:s.value.videoPrompt??"",scriptId:r.type!="storyboard"?void 0:Number(r.scriptId),duration:s.value.duration})}d("update"),o.value=!1,$i.success("保存成功")}catch(m){m instanceof Error&&$i.error(m.message)}})}return(k,m)=>{const b=wi("i-close"),g=hc,v=Ey,w=e1,L=KD,x=Tf,S=Xa,E=as;return we(),qt(E,{open:o.value,"onUpdate:open":m[5]||(m[5]=M=>o.value=M),wrapClassName:"noHeaderMargin",footer:!1,width:640,dialogClass:"customModal",closable:!1,maskClosable:!1},{title:nt(()=>[I(s)?(we(),Pe("div",PFi,[he("div",null,[he("span",WFi,on(I(s).id?"编辑":"新建")+on(c[r.type]),1),he("div",HFi,[he("span",zFi,on(I(s).id?"编辑":"新建")+"元素信息和素材",1)])]),he("div",{class:"closePoint",onClick:u},[i(b,{theme:"outline",size:"18",fill:"#9913FA"})])])):Tt("",!0)]),default:nt(()=>[I(s)?(we(),Pe("div",BFi,[i(x,{ref_key:"formRef",ref:a,model:I(s),layout:"vertical",style:{"margin-top":"14px"}},{default:nt(()=>[i(v,{name:"name",label:"名称",required:""},{default:nt(()=>[i(g,{value:I(s).name,"onUpdate:value":m[0]||(m[0]=M=>I(s).name=M),placeholder:"例如:古代宫殿大殿"},null,8,["value"])]),_:1}),i(v,{name:"description",label:"详情"},{default:nt(()=>[i(w,{value:I(s).intro,"onUpdate:value":m[1]||(m[1]=M=>I(s).intro=M),placeholder:"内容详情",autoSize:{minRows:3,maxRows:15}},null,8,["value"])]),_:1}),r.type=="storyboard"?(we(),qt(v,{key:0,name:"videoPrompt",label:"视频提示词"},{default:nt(()=>[i(w,{value:I(s).videoPrompt,"onUpdate:value":m[2]||(m[2]=M=>I(s).videoPrompt=M),placeholder:"内容详情",autoSize:{minRows:3,maxRows:15}},null,8,["value"])]),_:1})):Tt("",!0),i(v,{name:"remark",label:"备注"},{default:nt(()=>[i(g,{value:I(s).remark,"onUpdate:value":m[3]||(m[3]=M=>I(s).remark=M),placeholder:"添加备注信息..."},null,8,["value"])]),_:1}),r.type=="storyboard"?(we(),qt(v,{key:1,name:"duration",label:"时长(单位:秒)"},{default:nt(()=>[i(L,{value:I(s).duration,"onUpdate:value":m[4]||(m[4]=M=>I(s).duration=M),placeholder:"时长"},null,8,["value"])]),_:1})):Tt("",!0)]),_:1},8,["model"]),he("div",VFi,[i(S,{onClick:u,shape:"round"},{default:nt(()=>[...m[6]||(m[6]=[mi("取消",-1)])]),_:1}),i(S,{type:"primary",shape:"round",onClick:h,style:{"margin-left":"15px"}},{default:nt(()=>[...m[7]||(m[7]=[mi("保存",-1)])]),_:1})])])):Tt("",!0)]),_:1},8,["open"])}}}),FGe=za(FFi,[["__scopeId","data-v-cc0db377"]]),UFi={class:"modal-header"},GFi={class:"header-left"},YFi={class:"header-icon"},ZFi={class:"modal-content"},XFi={class:"toolbar"},qFi={class:"toolbar-left"},KFi={class:"select-info"},JFi={class:"toolbar-right"},QFi={class:"table-container"},$Fi={class:"table-header"},eUi={key:0,class:"th th-video"},tUi={key:1,class:"th th-duration"},nUi={class:"table-body"},iUi={class:"td td-check"},oUi={class:"td td-name"},rUi={class:"td td-img"},lUi={key:1,class:"img-empty"},aUi={class:"td td-prompt"},sUi={key:0,class:"td td-video"},cUi={key:1,class:"td td-duration"},uUi={key:0,class:"empty-state"},dUi={class:"modal-footer"},hUi=_t({__name:"batchGenereate",props:xs({data:{},type:{},scriptId:{}},{modelValue:{type:Boolean},modelModifiers:{}}),emits:xs(["save"],["update:modelValue"]),setup(e,{emit:t}){const{projectId:n}=_u($u()),o=be(!1),r=be(!1),l=be({}),a=be({}),s=e,c=t,u=ec(e,"modelValue"),d=be(),h=be([]),k=be(!1),m={角色:"role",场景:"scene",分镜:"storyboard",道具:"props"},b=G(()=>h.value.filter(Boolean).length),g=G(()=>h.value.length>0&&h.value.every(Boolean)),v=G(()=>{const O=b.value;return O>0&&O{O?(d.value=JSON.parse(JSON.stringify(s.data)),h.value=Array(s.data.length).fill(!1),k.value=!1,l.value={},a.value={},o.value=!1,r.value=!1):d.value=[]},{immediate:!0});function w(O){const P=O.target.checked;h.value=h.value.map(()=>P)}function L(){var O;return((O=d.value)==null?void 0:O.filter((P,B)=>h.value[B]))||[]}function x(){const O=L();if(O.length===0){$i.error("请选择要保存的项目");return}c("save",O),u.value=!1}async function S(){(r.value||o.value)&&await new Promise(P=>{as.confirm({title:"确认取消",content:"正在生成中,取消后当前任务将终止,是否继续?",okText:"确认取消",cancelText:"继续等待",okButtonProps:{danger:!0},onOk:()=>{k.value=!0,r.value=!1,o.value=!1,P()}})}),u.value=!1}async function E(){const O=L();if(O.length===0){$i.warning("请至少选择一个资产");return}r.value=!0;const P=5;try{for(let B=0;BM(W)))}$i.success("提示词生成完成")}catch(B){B instanceof Error&&B.message!=="已取消生成"&&$i.error(B.message)}finally{r.value=!1}}async function M(O){l.value[O.id]=!0;try{const P=await cr.post("/assets/polishPrompt",{projectId:n.value,assetsId:O.id,type:m[O.type]??"props",name:O.name,describe:O.intro??""}),B=d.value.findIndex(p=>p.id===P.data.assetsId);B!==-1&&!k.value&&(d.value[B].prompt=P.data.prompt)}catch(P){$i.error(`"${O.name}" ${(P==null?void 0:P.message)??"提示词生成失败"}`)}finally{l.value[O.id]=!1}}async function T(){const O=L();if(O.length===0){$i.warning("请至少选择一个资产");return}o.value=!0;const P=5;try{for(let B=0;Bj({id:W.id,name:W.name,prompt:W.prompt,type:m[W.type]??"props"})))}$i.success("图片生成完成")}catch(B){B instanceof Error&&$i.error(B.message)}finally{o.value=!1}}async function j(O){if(d.value){a.value[O.id]=!0;try{const P=await cr.post("/assets/generateAssets",{type:O.type,projectId:n.value,name:O.name,base64:void 0,prompt:O.prompt??"",id:O.id}),B=d.value.findIndex(p=>p.id===P.data.assetsId);B!==-1&&(d.value[B].filePath=P.data.path)}catch{$i.error(`"${O.name}" 图片生成失败`)}finally{a.value[O.id]=!1}}}return(O,P)=>{const B=wi("i-magic-wand"),p=Rf,W=wi("i-close"),R=$x,U=Xa,N=I1,H=wi("i-pic"),z=nk,X=e1,K=KD,Z=wi("i-inbox"),te=as;return we(),qt(te,{open:u.value,"onUpdate:open":P[0]||(P[0]=$=>u.value=$),maskClosable:!1,wrapClassName:"batch-generate-modal",closable:!1,width:"80vw",centered:""},{title:nt(()=>[he("div",UFi,[he("div",GFi,[he("div",YFi,[i(B,{theme:"filled",size:"20"})]),P[1]||(P[1]=he("span",{class:"header-title"},"批量生成",-1)),i(p,{color:"purple"},{default:nt(()=>{var $;return[mi(on((($=d.value)==null?void 0:$.length)||0)+" 项",1)]}),_:1})]),he("button",{class:"close-btn",onClick:S},[i(W,{theme:"outline",size:"18"})])])]),footer:nt(()=>[he("div",dUi,[i(U,{onClick:S},{default:nt(()=>[...P[13]||(P[13]=[mi("取消",-1)])]),_:1}),i(U,{type:"primary",onClick:x,disabled:b.value===0},{default:nt(()=>[mi("保存选中项 ("+on(b.value)+")",1)]),_:1},8,["disabled"])])]),default:nt(()=>{var $,oe;return[he("div",ZFi,[he("div",XFi,[he("div",qFi,[i(R,{checked:g.value,indeterminate:v.value,onChange:w},{default:nt(()=>[...P[2]||(P[2]=[mi("全选",-1)])]),_:1},8,["checked","indeterminate"]),he("span",KFi,[P[3]||(P[3]=mi(" 已选 ",-1)),he("strong",null,on(b.value),1),mi(" / "+on((($=d.value)==null?void 0:$.length)||0)+" 项 ",1)])]),he("div",JFi,[i(U,{onClick:E,loading:r.value,disabled:b.value===0},{default:nt(()=>[...P[4]||(P[4]=[mi("生成提示词",-1)])]),_:1},8,["loading","disabled"]),i(U,{type:"primary",onClick:T,loading:o.value,disabled:b.value===0},{default:nt(()=>[...P[5]||(P[5]=[mi("生成图片",-1)])]),_:1},8,["loading","disabled"])])]),he("div",QFi,[he("div",$Fi,[P[6]||(P[6]=he("div",{class:"th th-check"},null,-1)),P[7]||(P[7]=he("div",{class:"th th-name"},"名称",-1)),P[8]||(P[8]=he("div",{class:"th th-img"},"预览图",-1)),P[9]||(P[9]=he("div",{class:"th th-prompt"},"生图提示词",-1)),s.type==="storyboard"?(we(),Pe("div",eUi,"视频提示词")):Tt("",!0),s.type==="storyboard"?(we(),Pe("div",tUi,"时长")):Tt("",!0)]),he("div",nUi,[(we(!0),Pe(Un,null,_o(d.value,(ce,ve)=>(we(),Pe("div",{key:ce.id,class:Qe(["table-row",{selected:h.value[ve]}])},[he("div",iUi,[i(R,{checked:h.value[ve],"onUpdate:checked":ue=>h.value[ve]=ue},null,8,["checked","onUpdate:checked"])]),he("div",oUi,on(ce.name),1),he("div",rUi,[i(z,{spinning:a.value[ce.id]??!1,tip:"生成中..."},{default:nt(()=>[he("div",{class:Qe(["img-wrapper",{"has-image":ce==null?void 0:ce.filePath}])},[ce!=null&&ce.filePath?(we(),qt(N,{key:0,src:ce.filePath,fallback:I(Vm)},null,8,["src","fallback"])):(we(),Pe("div",lUi,[i(H,{theme:"outline",size:"24"}),P[10]||(P[10]=he("span",null,"待生成",-1))]))],2)]),_:2},1032,["spinning"])]),he("div",aUi,[i(z,{spinning:l.value[ce.id]??!1,tip:"生成中..."},{default:nt(()=>[i(X,{value:ce.prompt,"onUpdate:value":ue=>ce.prompt=ue,"auto-size":{minRows:2,maxRows:6},class:"input-field",placeholder:"输入生图提示词..."},null,8,["value","onUpdate:value"])]),_:2},1032,["spinning"])]),s.type==="storyboard"?(we(),Pe("div",sUi,[i(X,{value:ce.videoPrompt,"onUpdate:value":ue=>ce.videoPrompt=ue,"auto-size":{minRows:2,maxRows:6},class:"input-field",placeholder:"输入视频提示词..."},null,8,["value","onUpdate:value"])])):Tt("",!0),s.type==="storyboard"?(we(),Pe("div",cUi,[i(K,{value:ce.duration,"onUpdate:value":ue=>ce.duration=ue,min:1,step:1,class:"duration-input",placeholder:"秒"},{addonAfter:nt(()=>[...P[11]||(P[11]=[mi("秒",-1)])]),_:1},8,["value","onUpdate:value"])])):Tt("",!0)],2))),128)),(oe=d.value)!=null&&oe.length?Tt("",!0):(we(),Pe("div",uUi,[i(Z,{theme:"outline",size:"48"}),P[12]||(P[12]=he("p",null,"暂无数据",-1))]))])])])]}),_:1},8,["open"])}}}),tD=za(hUi,[["__scopeId","data-v-f3de9392"]]);function fUi(e,t){return hE()?(fE(e,t),!0):!1}function uSe(){const e=new Set,t=l=>{e.delete(l)};return{on:l=>{e.add(l);const a=()=>t(l);return fUi(a),{off:a}},off:t,trigger:(...l)=>Promise.all(Array.from(e).map(a=>a(...l))),clear:()=>{e.clear()}}}const kUi=typeof window<"u"&&typeof document<"u";typeof WorkerGlobalScope<"u"&&globalThis instanceof WorkerGlobalScope;const gUi=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),mUi=kUi?window.document:void 0;function vUi(e){var t;const n=Qb(e);return(t=n==null?void 0:n.$el)!==null&&t!==void 0?t:n}const bUi={multiple:!0,accept:"*",reset:!1,directory:!1};function yUi(e){if(!e)return null;if(e instanceof FileList)return e;const t=new DataTransfer;for(const n of e)t.items.add(n);return t.files}function wUi(e={}){const{document:t=mUi}=e,n=be(yUi(e.initialFiles)),{on:o,trigger:r}=uSe(),{on:l,trigger:a}=uSe(),s=G(()=>{var h;const k=(h=vUi(e.input))!==null&&h!==void 0?h:t?t.createElement("input"):void 0;return k&&(k.type="file",k.onchange=m=>{n.value=m.target.files,r(n.value)},k.oncancel=()=>{a()}),k}),c=()=>{n.value=null,s.value&&s.value.value&&(s.value.value="",r(null))},u=h=>{const k=s.value;k&&(k.multiple=Qb(h.multiple),k.accept=Qb(h.accept),k.webkitdirectory=Qb(h.directory),gUi(h,"capture")&&(k.capture=Qb(h.capture)))},d=h=>{const k=s.value;if(!k)return;const m={...bUi,...e,...h};u(m),Qb(m.reset)&&c(),k.click()};return xl(()=>{u(e)}),{files:Ym(n),open:d,reset:c,onCancel:l,onChange:o}}const CUi={class:"titHeader"},LUi={class:"titleWrapper"},xUi={class:"titleIcon"},SUi={key:0,class:"modelBody"},EUi={class:"modeSwitch"},MUi={class:"contentWrapper"},AUi={class:"leftBody"},TUi={class:"sectionCard"},_Ui={class:"uploadSection"},jUi={class:"sectionHeader"},OUi={class:"namePre"},DUi={key:0,class:"optionalTag"},pUi={key:0,class:"imageDiv pr"},NUi={class:"imageOverlay"},RUi={key:1,class:"uploadPlaceholder"},IUi={class:"uploadIconWrapper"},PUi={class:"promptSection"},WUi={class:"sectionHeader"},HUi={key:0,class:"rightBody"},zUi={class:"sectionCard resultCard"},BUi={class:"sectionHeader"},VUi={class:"resultContent"},FUi={key:1,class:"resultGrid"},UUi=["onClick"],GUi={class:"resultOverlay"},YUi={key:0,class:"selectedBadge"},ZUi={key:1,class:"generatingPlaceholder"},XUi={key:2,class:"errorPlaceholder"},qUi={class:"footerBtns"},KUi=_t({__name:"generateImage",props:xs({data:{}},{modelValue:{type:Boolean,default:!1},modelModifiers:{}}),emits:xs(["update"],["update:modelValue"]),setup(e,{emit:t}){const{projectId:n}=_u($u()),o={角色:"role",场景:"scene",分镜:"storyboard",道具:"props"},r=be(!1),l=e,a=t,s=ec(e,"modelValue"),c=be(!1),u=be(!1),d=O0.PRESENTED_IMAGE_SIMPLE,h=be(2),k=be(),m=be([]),b=be(-1),g=be(!1),v=be(!1),w=be(""),L=G(()=>{var K,Z;return h.value===1?(K=k.value)==null?void 0:K.uploadImage:(Z=k.value)==null?void 0:Z.sampleImage}),x=G(()=>{var K;return o[((K=k.value)==null?void 0:K.type)??"道具"]??"props"}),{open:S,onChange:E,onCancel:M}=wUi({multiple:!1,reset:!0,accept:".png,.jpg,.jpeg"});gt(s,K=>{K&&l.data&&(k.value={...l.data,sampleImage:"",uploadImage:""},P(l.data.id),c.value=!1,u.value=!1),K||O&&clearTimeout(O)});function T(K,Z){if(K.state=="生成中"){$i.warn("生成中");return}b.value=Z}function j(K){v.value=K}let O=-1;async function P(K){var $;const Z=K,{data:te}=await cr.post("/assets/getImage",{assetsId:K});te.tempAssets.filter(oe=>oe.state=="生成中").length>0&&(O=setTimeout(()=>{s.value&&P(Z)},2e3)),Z==(($=k.value)==null?void 0:$.id)&&(te.filePath.length>0?(m.value=[{filePath:te.filePath,state:"生成成功"},...te.tempAssets],b.value=m.value.findIndex(oe=>{var ce;return oe.filePath===((ce=k.value)==null?void 0:ce.filePath)})):(m.value=[...te.tempAssets],b.value=m.value.findIndex(oe=>{var ce,ve;return oe.filePath===((ce=k.value)==null?void 0:ce.filePath)&&((ve=k.value)==null?void 0:ve.filePath.length)>0})))}async function B(){if(!k.value)return;const K=await new Promise(te=>{S(),E($=>te($)),M(()=>te(null))});if(!(K!=null&&K.length))return;const Z=K[0];h.value===1?k.value.uploadImage=URL.createObjectURL(Z):k.value.sampleImage=await z(Z)}function p(){k.value&&(h.value===1?k.value.uploadImage="":k.value.sampleImage="")}function W(K){w.value=K,v.value=!0}function R(){s.value=!1}async function U(){if(!k.value)return;const{id:K,name:Z,intro:te,type:$}=k.value;c.value=!0;try{const{data:oe}=await cr.post("/assets/polishPrompt",{projectId:n.value,assetsId:K,type:o[$??"道具"]??"props",name:Z,describe:te});$i.success("提示词生成成功"),oe.assetsId===k.value.id&&(k.value.prompt=oe.prompt)}catch(oe){$i.error(oe.message??"提示词生成失败")}finally{c.value=!1}}async function N(){var oe;if(!k.value)return;const{id:K,name:Z,sampleImage:te,prompt:$}=k.value;r.value=!0,u.value=!0;try{const ce=cr.post("/assets/generateAssets",{type:x.value,projectId:n.value,name:Z,base64:te||void 0,prompt:$,id:K});setTimeout(()=>{var ue;P(((ue=l.data)==null?void 0:ue.id)??-1),r.value=!1},2e3);const{data:ve}=await ce;await P(((oe=l.data)==null?void 0:oe.id)??-1),$i.success("资产生成成功"),ve.assetsId===k.value.id&&m.value.push({filePath:ve.path,state:"生成成功"})}catch{$i.error("资产生成失败")}finally{u.value=!1}}async function H(){var Z;if(!k.value)return;const K={projectId:n.value,id:k.value.id};if(h.value===1){if(!k.value.uploadImage){$i.error("请上传图片");return}K.base64=await X(k.value.uploadImage)}else{if(b.value===-1){$i.error("请选择生成结果");return}K.prompt=k.value.prompt||"",K.filePath=((Z=m.value[b.value])==null?void 0:Z.filePath)||""}g.value=!0;try{await cr.post("/assets/saveAssets",K),$i.success("保存成功"),a("update"),R()}catch{$i.error("保存失败")}finally{g.value=!1}}function z(K){return new Promise((Z,te)=>{const $=new FileReader;$.onload=()=>Z($.result),$.onerror=te,$.readAsDataURL(K)})}async function X(K){const te=await(await fetch(K)).blob();return z(te)}return(K,Z)=>{const te=wi("i-pic"),$=wi("i-close"),oe=wi("i-upload-one"),ce=qNe,ve=wi("i-robot"),ue=AU,Ce=I1,ke=wi("i-delete"),xe=wi("i-upload-picture"),le=wi("i-magic"),ye=Xa,ae=V0,ee=e1,fe=nk,ge=wi("i-lightning"),Ee=Rf,Le=O0,pe=wi("i-preview-open"),We=wi("i-check"),Ie=wi("i-save"),Be=as;return we(),Pe(Un,null,[i(Be,{open:s.value,"onUpdate:open":Z[2]||(Z[2]=ze=>s.value=ze),wrapClassName:"noHeaderMargin",destroyOnClose:"",footer:!1,width:900,dialogClass:"customModal",closable:!1,maskClosable:!1},{title:nt(()=>[he("div",CUi,[he("div",LUi,[he("div",xUi,[i(te,{class:"icon",theme:"outline",size:"20",fill:"#9913FA"})]),Z[3]||(Z[3]=he("span",{class:"title"},"图片生成",-1))]),i($,{class:"closeBtn",theme:"outline",size:"20",fill:"#666",onClick:R})])]),default:nt(()=>[i(fe,{spinning:r.value,tip:"发送数据中..."},{default:nt(()=>[k.value?(we(),Pe("div",SUi,[he("div",EUi,[i(ue,{value:h.value,"onUpdate:value":Z[0]||(Z[0]=ze=>h.value=ze),"button-style":"solid"},{default:nt(()=>[i(ce,{value:1},{default:nt(()=>[i(oe,{theme:"outline",size:"14"}),Z[4]||(Z[4]=he("span",null,"本地上传",-1))]),_:1}),i(ce,{value:2},{default:nt(()=>[i(ve,{theme:"outline",size:"14"}),Z[5]||(Z[5]=he("span",null,"AI 生成",-1))]),_:1})]),_:1},8,["value"])]),he("div",MUi,[he("div",AUi,[he("div",TUi,[he("div",_Ui,[he("div",jUi,[he("span",OUi,on(h.value===1?"上传图片":"参考图片"),1),h.value===2?(we(),Pe("span",DUi,"可选")):Tt("",!0)]),he("div",{class:"picturePreview",onClick:B},[L.value?(we(),Pe("div",pUi,[i(Ce,{src:L.value,alt:"元素图片",class:"elementImg",fallback:I(Vm)},null,8,["src","fallback"]),he("div",NUi,[i(ke,{class:"deleteBtn",theme:"outline",size:"18",fill:"#fff",onClick:yo(p,["stop"])})])])):(we(),Pe("div",RUi,[he("div",IUi,[i(xe,{theme:"outline",size:"32",fill:"#9913FA"})]),Z[6]||(Z[6]=he("span",{class:"uploadText"},"点击上传",-1))]))])]),h.value===2?(we(),Pe(Un,{key:0},[he("div",PUi,[he("div",WUi,[Z[8]||(Z[8]=he("span",{class:"namePre"},"提示词",-1)),i(ae,{title:"AI 智能生成提示词"},{default:nt(()=>[i(ye,{type:"link",size:"small",class:"magicBtn",onClick:yo(U,["stop"]),loading:c.value},{icon:nt(()=>[i(le,{theme:"outline",size:"14"})]),default:nt(()=>[Z[7]||(Z[7]=mi(" 智能生成 ",-1))]),_:1},8,["loading"])]),_:1})]),i(fe,{spinning:c.value,tip:"提示词生成中..."},{default:nt(()=>[i(ee,{value:k.value.prompt,"onUpdate:value":Z[1]||(Z[1]=ze=>k.value.prompt=ze),autoSize:{minRows:4,maxRows:10},placeholder:"请输入或使用 AI 生成提示词,描述您想要生成的图片内容...",class:"promptTextarea"},null,8,["value"])]),_:1},8,["spinning"])]),i(ye,{type:"primary",block:"",size:"large",class:"generateBtn",onClick:N,loading:u.value},{icon:nt(()=>[i(ge,{theme:"outline",size:"16"})]),default:nt(()=>[Z[9]||(Z[9]=mi(" 开始生成 ",-1))]),_:1},8,["loading"])],64)):Tt("",!0)])]),h.value===2?(we(),Pe("div",HUi,[he("div",zUi,[he("div",BUi,[Z[10]||(Z[10]=he("span",{class:"namePre"},"生成结果",-1)),m.value.length?(we(),qt(Ee,{key:0,color:"purple"},{default:nt(()=>[mi(on(m.value.length)+" 张",1)]),_:1})):Tt("",!0)]),he("div",VUi,[m.value.length?(we(),Pe("div",FUi,[(we(!0),Pe(Un,null,_o(m.value,(ze,Ze)=>(we(),Pe("div",{key:Ze,class:Qe(["resultItem",{selected:b.value===Ze,generating:ze.state==="生成中"}]),onClick:Ke=>T(ze,Ze)},[ze.state==="生成成功"?(we(),Pe(Un,{key:0},[i(Ce,{preview:!1,src:ze.filePath,fallback:I(Vm),class:"resultImg"},null,8,["src","fallback"]),he("div",GUi,[i(pe,{class:"previewBtn",theme:"outline",size:"20",fill:"#fff",onClick:yo(Ke=>W(ze.filePath),["stop"])},null,8,["onClick"])]),b.value===Ze?(we(),Pe("div",YUi,[i(We,{theme:"outline",size:"14",fill:"#fff"})])):Tt("",!0)],64)):ze.state==="生成中"?(we(),Pe("div",ZUi,[i(fe),Z[11]||(Z[11]=he("span",null,"生成中...",-1))])):(we(),Pe("div",XUi,"未知状态"))],10,UUi))),128))])):(we(),qt(Le,{key:0,image:I(d),description:"暂无生成结果"},null,8,["image"]))])])])):Tt("",!0)]),he("div",qUi,[i(ye,{size:"large",onClick:R},{default:nt(()=>[...Z[12]||(Z[12]=[mi("取消",-1)])]),_:1}),i(ye,{type:"primary",size:"large",loading:g.value,onClick:H},{icon:nt(()=>[i(Ie,{theme:"outline",size:"16"})]),default:nt(()=>[Z[13]||(Z[13]=mi(" 保存 ",-1))]),_:1},8,["loading"])])])):Tt("",!0)]),_:1},8,["spinning"])]),_:1},8,["open"]),i(Ce,{width:200,style:{display:"none"},preview:{visible:v.value,onVisibleChange:j},src:w.value},null,8,["preview","src"])],64)}}}),Nfe=za(KUi,[["__scopeId","data-v-9e4ee453"]]),JUi={class:"mainElement"},QUi={class:"ac jb"},$Ui={key:0,class:"buttonGroup f"},eGi={class:"actionBar"},tGi={class:"tableBody"},nGi={key:0,class:"scriptBody"},iGi={class:"gridScript"},oGi={key:1,class:"empty"},rGi={class:"emptyIcon"},lGi={key:1,class:"noImage"},aGi={class:"actionBtns"},sGi=_t({__name:"mainElement",props:xs({way:{},radio:{},batch:{type:Boolean}},{modelValue:{},modelModifiers:{}}),emits:xs(["checkChange","checkAll"],["update:modelValue"]),setup(e,{expose:t,emit:n}){const{projectId:o,currentScriptId:r}=_u($u()),l=e,a=n,s=ec(e,"modelValue"),c={角色:"role",场景:"scene",分镜:"storyboard",道具:"props"},u=[{label:"角色",value:"role"},{label:"场景",value:"scene"},{label:"道具",value:"props"},{label:"分镜",value:"storyboard"}],d=be(),h=be("role"),k=be(),m=be([]),b=be([]),g=be(!1),v=be(!1),w=be(!1),L=be(!1),x=be(!1),S=u,E=G(()=>h.value==="storyboard"),M=G(()=>{var ke;return(ke=S.find(xe=>xe.value===h.value))==null?void 0:ke.label}),T=G(()=>!m.value.length&&E.value),j=ke=>({role:"角色",scene:"场景",props:"道具",storyboard:"分镜"})[ke]??"角色",O=async ke=>{const{data:xe}=await cr.post("/assets/getAssets",{projectId:o.value,type:j(ke)});b.value=xe},P=async()=>{const{data:ke}=await cr.post("/assets/getStoryboard",{projectId:o.value});return ke},B=async ke=>{const{data:xe}=await cr.post("/storyboard/getStoryboard",{projectId:o.value,scriptId:ke});b.value=xe},p=async ke=>{if(b.value=[],h.value=ke,ke==="storyboard"){if(m.value=await P(),m.value.length){const xe=m.value.some(le=>le.id==r.value);(!r.value||!xe)&&(r.value=m.value[0].id),await B(Number(r.value))}}else await O(ke)},W=()=>p(h.value),R=async ke=>{r.value=ke.id,await B(ke.id)},U=async(ke,xe,le)=>{for(let ye=0;ye{if(!ke.length)return $i.warning("请至少选择一个资产");await U(ke,5,async xe=>{await cr.post("/assets/updateAssets",{id:xe.id,name:xe.name,intro:xe.intro??"",type:xe.type,remark:xe.remark??"",prompt:xe.prompt,duration:Number(xe.duration)}),await cr.post("/assets/saveAssets",{id:xe.id,base64:"",filePath:xe.filePath,prompt:xe.prompt,projectId:o.value})}),$i.success("保存成功"),W()},H=async()=>{var ke;if(!((ke=s.value)!=null&&ke.length))return $i.warning("请至少选择一个资产");L.value=!0;try{await U(s.value,5,async xe=>{const{data:le}=await cr.post("/assets/generateAssets",{type:c[xe.type]??"props",projectId:o.value,name:xe.name,prompt:xe.prompt,id:xe.id}),ye=s.value.find(ae=>ae.id===le.assetsId);ye&&(ye.filePath=le.path)}),$i.success("图片批量生成成功")}finally{L.value=!1}},z=async()=>{var ke;if(!((ke=s.value)!=null&&ke.length))return $i.warning("请至少选择一个资产");x.value=!0;try{await U(s.value,5,async xe=>{const{data:le}=await cr.post("/assets/polishPrompt",{projectId:o.value,assetsId:xe.id,type:c[xe.type]??"props",name:xe.name,describe:xe.intro}),ye=s.value.find(ae=>ae.id===le.assetsId);ye&&(ye.prompt=le.prompt)}),$i.success("提示词批量生成成功")}finally{x.value=!1}},X=ke=>{var xe,le;(xe=d.value)==null||xe.setRowHeight(ke.id,300),(le=d.value)==null||le.recalculate()},K=ke=>a("checkChange",ke),Z=ke=>a("checkChange",{checked:!0,row:ke.row}),te=ke=>a("checkAll",ke,h.value,r.value??-1),$=()=>{k.value={id:0,name:"",intro:"",duration:0,filePath:"",type:"",prompt:"",remark:"",videoPrompt:""},g.value=!0},oe=ke=>{k.value={...ke},g.value=!0},ce=ke=>{k.value={...ke},v.value=!0},ve=ke=>{as.confirm({title:"删除",content:"确认是否删除",okText:"确认",cancelText:"取消",onOk:async()=>{await cr.post("/assets/delAssets",{id:ke.id}),$i.success("删除成功"),W()}})};return t({getSelectData:()=>{var ke,xe;return l.way==="radio"?(ke=d.value)==null?void 0:ke.getRadioRecord(!0):(xe=d.value)==null?void 0:xe.getCheckboxRecords(!0)},changeChecked:(ke,xe)=>{var le;return(le=d.value)==null?void 0:le.setCheckboxRow(ke,xe)}}),ji(()=>{l.radio&&(h.value=l.radio),p(h.value)}),(ke,xe)=>{const le=Xa,ye=wi("i-ad-product"),ae=wi("vxe-column"),ee=I1,fe=e1,ge=wi("i-pencil"),Ee=wi("i-magic"),Le=wi("i-delete"),pe=wi("vxe-table");return we(),Pe("div",JUi,[he("div",QUi,[l.radio?Tt("",!0):(we(),Pe("div",$Ui,[l.batch?Tt("",!0):(we(!0),Pe(Un,{key:0},_o(I(S),We=>(we(),qt(le,{key:We.value,onClick:Ie=>p(We.value),type:h.value===We.value?"primary":"default"},{default:nt(()=>[mi(on(We.label),1)]),_:2},1032,["onClick","type"]))),128))])),he("div",eGi,[l.batch?(we(),Pe(Un,{key:0},[i(le,{type:"primary",onClick:z,loading:x.value},{default:nt(()=>[...xe[4]||(xe[4]=[mi("批量润色",-1)])]),_:1},8,["loading"]),i(le,{type:"primary",onClick:H,loading:L.value},{default:nt(()=>[...xe[5]||(xe[5]=[mi("批量生成图片",-1)])]),_:1},8,["loading"])],64)):Tt("",!0),l.way?Tt("",!0):(we(),Pe(Un,{key:1},[i(le,{type:"primary",onClick:xe[0]||(xe[0]=We=>w.value=!0)},{default:nt(()=>[...xe[6]||(xe[6]=[mi("批量生成",-1)])]),_:1}),i(le,{type:"primary",onClick:$,disabled:T.value},{default:nt(()=>[mi("新增"+on(M.value),1)]),_:1},8,["disabled"])],64))])]),he("div",tGi,[E.value?(we(),Pe("div",nGi,[he("div",iGi,[(we(!0),Pe(Un,null,_o(m.value,We=>(we(),qt(le,{key:We.id,type:I(r)===We.id?"primary":"default",size:"large",class:"rounded-xl font-semibold w-full",onClick:Ie=>R(We)},{default:nt(()=>[mi(on(We.name),1)]),_:2},1032,["type","onClick"]))),128))])])):Tt("",!0),b.value.length?(we(),qt(pe,{key:2,ref_key:"tableRef",ref:d,data:b.value,"cell-config":{height:l.batch?300:120},"row-config":{keyField:"id",resizable:!0},"radio-config":{reserve:!0},"checkbox-config":{reserve:!0},onCheckboxAll:te,onCheckboxChange:K,onRadioChange:Z,round:""},{default:nt(()=>[l.way?(we(),qt(ae,{key:0,type:l.way,title:"请选择",width:"100"},null,8,["type"])):Tt("",!0),i(ae,{title:"名称",field:"name",width:"150","show-overflow":"title","edit-render":{name:"input"}}),i(ae,{title:"元素图片",width:"120"},{default:nt(({row:We})=>[We.filePath?(we(),qt(ee,{key:0,src:We.filePath,fallback:I(Vm),class:"elementImage"},null,8,["src","fallback"])):(we(),Pe("div",lGi,"未生成图片"))]),_:1}),i(ae,{title:"详情",field:"intro","show-overflow":"title","edit-render":{name:"textarea"}}),i(ae,{title:"生图提示词",field:"prompt","show-overflow":"title"},Ld({_:2},[l.batch?{name:"default",fn:nt(({row:We})=>[i(fe,{value:We.prompt,"onUpdate:value":Ie=>We.prompt=Ie,"auto-size":{minRows:2,maxRows:12},onClick:Ie=>X(We)},null,8,["value","onUpdate:value","onClick"])]),key:"0"}:void 0]),1024),E.value?(we(),qt(ae,{key:1,title:"视频提示词",field:"videoPrompt","show-overflow":"title"},Ld({_:2},[l.batch?{name:"default",fn:nt(({row:We})=>[i(fe,{value:We.videoPrompt,"onUpdate:value":Ie=>We.videoPrompt=Ie,"auto-size":{minRows:2,maxRows:12},onClick:Ie=>X(We)},null,8,["value","onUpdate:value","onClick"])]),key:"0"}:void 0]),1024)):Tt("",!0),i(ae,{title:"备注",field:"remark","edit-render":{name:"textarea"}}),E.value?(we(),qt(ae,{key:2,title:"时长(单位:秒)",field:"duration"})):Tt("",!0),l.batch?Tt("",!0):(we(),qt(ae,{key:3,title:"操作",width:"auto",fixed:"right"},{default:nt(({row:We})=>[he("div",aGi,[i(ge,{class:"hoverButton edit",onClick:Ie=>oe(We)},null,8,["onClick"]),i(Ee,{class:"hoverButton magic",onClick:Ie=>ce(We)},null,8,["onClick"]),i(Le,{class:"hoverButton delete",onClick:Ie=>ve(We)},null,8,["onClick"])])]),_:1}))]),_:1},8,["data","cell-config"])):(we(),Pe("div",oGi,[he("div",rGi,[i(ye,{size:48})]),xe[7]||(xe[7]=he("h3",{class:"emptyTitle"},"暂无元素",-1)),xe[8]||(xe[8]=he("p",{class:"emptyDesc"},'点击右上角"新增元素"按钮添加场景或道具或根据剧本生成',-1))]))]),i(FGe,{modelValue:g.value,"onUpdate:modelValue":xe[1]||(xe[1]=We=>g.value=We),type:h.value,scriptId:I(r),data:k.value,onUpdate:W},null,8,["modelValue","type","scriptId","data"]),i(Nfe,{modelValue:v.value,"onUpdate:modelValue":xe[2]||(xe[2]=We=>v.value=We),data:k.value,onUpdate:W},null,8,["modelValue","data"]),tD?(we(),qt(tD,{key:0,modelValue:w.value,"onUpdate:modelValue":xe[3]||(xe[3]=We=>w.value=We),data:b.value,type:h.value,"script-id":I(r)??-1,onSave:N},null,8,["modelValue","data","type","script-id"])):Tt("",!0)])}}}),GZ=za(sGi,[["__scopeId","data-v-18666861"]]),cGi={class:"outline-container"},uGi={class:"page-header"},dGi={key:0,class:"outline-list"},hGi={class:"card-header"},fGi={class:"episode-badge"},kGi={class:"card-title"},gGi={class:"card-actions"},mGi={class:"card-body"},vGi={class:"field-group highlight"},bGi={class:"field-value"},yGi={class:"field-group"},wGi={class:"field-value"},CGi={class:"field-group"},LGi={class:"field-value"},xGi={class:"field-group"},SGi={class:"field-value"},EGi={class:"field-group"},MGi={class:"field-value"},AGi={class:"field-group"},TGi={class:"field-value"},_Gi={class:"field-group outline-field"},jGi={class:"field-content"},OGi={key:0,class:"tags-section"},DGi={key:0,class:"tag-group"},pGi={class:"tag-list"},NGi={key:0,class:"custom-tag more"},RGi={key:1,class:"tag-group"},IGi={class:"tag-list"},PGi={key:0,class:"custom-tag more"},WGi={key:1,class:"empty-state"},HGi={class:"form-section"},zGi={class:"chapter-selector"},BGi={class:"selected-text"},VGi={class:"form-section"},FGi={class:"asset-box"},UGi={class:"asset-tags"},GGi={class:"form-section"},YGi={class:"form-section"},ZGi={style:{height:"600px","overflow-y":"auto"}},XGi=_t({__name:"outline",setup(e,{expose:t}){const{projectId:n}=_u($u()),o={scenes:"场景",characters:"角色",props:"道具"},r={characters:"role",scenes:"scene",props:"props"},l=()=>({episodeIndex:0,title:"",chapterRange:[],scenes:[],characters:[],props:[],coreConflict:"",openingHook:"",outline:"",keyEvents:[],emotionalCurve:"",visualHighlights:[],endingHook:"",classicQuotes:[]}),a=be([]),s=be([]),c=be(!1),u=be(null),d=be(null),h=be(!1),k=be(!1),m=be(),b=be(),g=be(),v=G(()=>a.value.map(U=>{try{const N=JSON.parse(U.data);return{...l(),...N,id:U.id,episodeIndex:N.episodeIndex||U.episode}}catch{return{...l(),id:U.id,episodeIndex:U.episode}}}));function w(U){return o[U]||U}function L(U){return(U==null?void 0:U.map(N=>N.name).filter(Boolean).join("、"))||"—"}function x(U){return U!=null&&U.length?[...U].sort((N,H)=>N-H).map(N=>s.value.find(z=>Number(z.index)===N)?`第${N}章`:`第${N}章`).join("、"):"—"}async function S(){try{const U=await cr.post("/outline/getOutline",{projectId:n.value});a.value=U.data||[]}catch{$i.error("获取大纲数据失败")}}async function E(){try{const U=await cr.post("/novel/getNovel",{projectId:n.value});s.value=U.data||[]}catch{$i.error("获取章节列表失败")}}function M(U){h.value=!1,u.value=U,d.value=JSON.parse(JSON.stringify(v.value[U])),c.value=!0}function T(){h.value=!0,u.value=null,d.value={...l(),episodeIndex:v.value.length+1},c.value=!0}function j(){c.value=!1,u.value=null,d.value=null,h.value=!1}async function O(){if(d.value)try{const U=JSON.stringify(d.value);h.value?(await cr.post("/outline/addOutline",{projectId:n.value,data:U}),$i.success("新增成功")):(await cr.post("/outline/updateOutline",{id:d.value.id,projectId:n.value,data:U}),$i.success("保存成功")),S(),j()}catch{$i.error(h.value?"新增失败":"保存失败")}}function P(U){as.warning({title:"高危操作",content:"删除大纲将会删除该大纲下的剧本和独有资产",okText:"确定",cancelText:"取消",closable:!0,onOk:async()=>{await cr.post("/outline/delOutline",{id:U.id,projectId:n.value}),$i.success("删除成功"),S()}})}async function B(U){if(!d.value)return;m.value=r[U],k.value=!0;const N=await new Promise(H=>{g.value=H});d.value[U].push(...N.map(H=>({name:H.name,description:H.intro})))}function p(U,N){var H,z;(z=(H=d.value)==null?void 0:H[U])==null||z.splice(N,1)}function W(){var U;(U=g.value)==null||U.call(g,b.value.getSelectData()),k.value=!1}function R(){}return ji(()=>{S(),E()}),t({getData:S}),(U,N)=>{const H=wi("i-plus"),z=Xa,X=wi("i-edit"),K=wi("i-delete"),Z=LRe,te=OIe,$=KD,oe=Ey,ce=hc,ve=wi("i-close"),ue=e1,Ce=bd,ke=Tf,xe=as;return we(),Pe("div",cGi,[he("div",uGi,[N[13]||(N[13]=he("div",{class:"header-content"},[he("h1",{class:"page-title"},"大纲管理"),he("p",{class:"page-desc"},"每一集的详细内容")],-1)),i(z,{type:"primary",class:"add-btn",onClick:T},{default:nt(()=>[i(H,{size:16}),N[12]||(N[12]=mi(" 新增大纲 ",-1))]),_:1})]),v.value.length?(we(),Pe("div",dGi,[(we(!0),Pe(Un,null,_o(v.value,(le,ye)=>{var ae,ee,fe,ge;return we(),Pe("div",{key:le.id??ye,class:"outline-card"},[he("div",hGi,[he("div",fGi,"第 "+on(le.episodeIndex)+" 集",1),he("div",kGi,on(le.title||"未命名"),1),he("div",gGi,[i(z,{type:"text",size:"small",class:"action-btn",onClick:Ee=>M(ye)},{default:nt(()=>[i(X,{size:16})]),_:1},8,["onClick"]),i(z,{type:"text",size:"small",class:"action-btn danger",onClick:Ee=>P(le)},{default:nt(()=>[i(K,{size:16})]),_:1},8,["onClick"])])]),he("div",mGi,[i(te,{gutter:[16,8]},{default:nt(()=>[i(Z,{span:24},{default:nt(()=>[he("div",vGi,[N[14]||(N[14]=he("span",{class:"field-icon"},"📖",-1)),N[15]||(N[15]=he("span",{class:"field-label"},"章节范围",-1)),he("span",bGi,on(x(le.chapterRange)),1)])]),_:2},1024),i(Z,{span:8},{default:nt(()=>[he("div",yGi,[N[16]||(N[16]=he("span",{class:"field-icon"},"🎬",-1)),N[17]||(N[17]=he("span",{class:"field-label"},"场景",-1)),he("span",wGi,on(L(le.scenes)),1)])]),_:2},1024),i(Z,{span:8},{default:nt(()=>[he("div",CGi,[N[18]||(N[18]=he("span",{class:"field-icon"},"👥",-1)),N[19]||(N[19]=he("span",{class:"field-label"},"角色",-1)),he("span",LGi,on(L(le.characters)),1)])]),_:2},1024),i(Z,{span:8},{default:nt(()=>[he("div",xGi,[N[20]||(N[20]=he("span",{class:"field-icon"},"🎁",-1)),N[21]||(N[21]=he("span",{class:"field-label"},"道具",-1)),he("span",SGi,on(L(le.props)),1)])]),_:2},1024),i(Z,{span:12},{default:nt(()=>[he("div",EGi,[N[22]||(N[22]=he("span",{class:"field-icon"},"🎯",-1)),N[23]||(N[23]=he("span",{class:"field-label"},"核心冲突",-1)),he("span",MGi,on(le.coreConflict||"—"),1)])]),_:2},1024),i(Z,{span:12},{default:nt(()=>[he("div",AGi,[N[24]||(N[24]=he("span",{class:"field-icon"},"⚡",-1)),N[25]||(N[25]=he("span",{class:"field-label"},"黄金3秒",-1)),he("span",TGi,on(le.openingHook||"—"),1)])]),_:2},1024),le.outline?(we(),qt(Z,{key:0,span:24},{default:nt(()=>[he("div",_Gi,[N[26]||(N[26]=he("div",{class:"field-header"},[he("span",{class:"field-icon"},"📝"),he("span",{class:"field-label"},"剧情主干")],-1)),he("p",jGi,on(le.outline),1)])]),_:2},1024)):Tt("",!0)]),_:2},1024),(ae=le.keyEvents)!=null&&ae.length||(ee=le.classicQuotes)!=null&&ee.length?(we(),Pe("div",OGi,[(fe=le.keyEvents)!=null&&fe.length?(we(),Pe("div",DGi,[N[27]||(N[27]=he("span",{class:"tag-label"},"关键节点",-1)),he("div",pGi,[(we(!0),Pe(Un,null,_o(le.keyEvents.slice(0,3),(Ee,Le)=>(we(),Pe("span",{key:Le,class:"custom-tag blue"},on(Ee),1))),128)),le.keyEvents.length>3?(we(),Pe("span",NGi,"+"+on(le.keyEvents.length-3),1)):Tt("",!0)])])):Tt("",!0),(ge=le.classicQuotes)!=null&&ge.length?(we(),Pe("div",RGi,[N[28]||(N[28]=he("span",{class:"tag-label"},"金句",-1)),he("div",IGi,[(we(!0),Pe(Un,null,_o(le.classicQuotes.slice(0,2),(Ee,Le)=>(we(),Pe("span",{key:Le,class:"custom-tag purple"},on(Ee),1))),128)),le.classicQuotes.length>2?(we(),Pe("span",PGi,"+"+on(le.classicQuotes.length-2),1)):Tt("",!0)])])):Tt("",!0)])):Tt("",!0)])])}),128))])):(we(),Pe("div",WGi,[N[30]||(N[30]=he("div",{class:"empty-icon"},"📋",-1)),N[31]||(N[31]=he("p",{class:"empty-text"},"暂无大纲数据",-1)),i(z,{type:"primary",class:"empty-btn",onClick:T},{default:nt(()=>[...N[29]||(N[29]=[mi("创建第一个大纲",-1)])]),_:1})])),i(xe,{open:c.value,"onUpdate:open":N[10]||(N[10]=le=>c.value=le),title:h.value?"新增大纲":"编辑大纲",width:"900px",bodyStyle:{maxHeight:"70vh",overflowY:"auto",padding:"20px"},onOk:O,onCancel:j,okText:"保存",cancelText:"取消",class:"outline-modal"},{default:nt(()=>[d.value?(we(),qt(ke,{key:0,layout:"vertical",model:d.value,class:"outline-form"},{default:nt(()=>[he("div",HGi,[N[33]||(N[33]=he("div",{class:"section-title"},[he("span",{class:"section-icon"},"📌"),mi(" 基础信息 ")],-1)),i(te,{gutter:16},{default:nt(()=>[i(Z,{span:6},{default:nt(()=>[i(oe,{label:"集数"},{default:nt(()=>[i($,{value:d.value.episodeIndex,"onUpdate:value":N[0]||(N[0]=le=>d.value.episodeIndex=le),min:1,style:{width:"100%"}},null,8,["value"])]),_:1})]),_:1}),i(Z,{span:18},{default:nt(()=>[i(oe,{label:"标题"},{default:nt(()=>[i(ce,{value:d.value.title,"onUpdate:value":N[1]||(N[1]=le=>d.value.title=le),maxlength:100,"show-count":"",placeholder:"请输入本集标题"},null,8,["value"])]),_:1})]),_:1}),i(Z,{span:24},{default:nt(()=>[i(oe,{label:"章节范围"},{default:nt(()=>[he("div",zGi,[i(z,{class:"select-btn",onClick:R},{default:nt(()=>[i(H,{size:14}),N[32]||(N[32]=mi(" 选择章节 ",-1))]),_:1}),he("span",BGi,on(x(d.value.chapterRange)||"未选择章节"),1)])]),_:1})]),_:1})]),_:1})]),he("div",VGi,[N[35]||(N[35]=he("div",{class:"section-title"},[he("span",{class:"section-icon"},"🔗"),mi(" 资产关联 ")],-1)),i(te,{gutter:16},{default:nt(()=>[(we(),Pe(Un,null,_o(["scenes","characters","props"],le=>i(Z,{span:8,key:le},{default:nt(()=>[i(oe,{label:w(le)},{default:nt(()=>[he("div",FGi,[he("div",UGi,[(we(!0),Pe(Un,null,_o(d.value[le],(ye,ae)=>(we(),Pe("span",{key:ae,class:"asset-tag"},[mi(on(ye.name)+" ",1),i(ve,{size:12,class:"close-icon",onClick:ee=>p(le,ae)},null,8,["onClick"])]))),128))]),i(z,{type:"dashed",size:"small",class:"add-asset-btn",onClick:ye=>B(le)},{default:nt(()=>[i(H,{size:12}),N[34]||(N[34]=mi(" 添加 ",-1))]),_:1},8,["onClick"])])]),_:2},1032,["label"])]),_:2},1024)),64))]),_:1})]),he("div",GGi,[N[36]||(N[36]=he("div",{class:"section-title"},[he("span",{class:"section-icon"},"🎭"),mi(" 剧情设计 ")],-1)),i(te,{gutter:16},{default:nt(()=>[i(Z,{span:12},{default:nt(()=>[i(oe,{label:"黄金3秒"},{default:nt(()=>[i(ce,{value:d.value.openingHook,"onUpdate:value":N[2]||(N[2]=le=>d.value.openingHook=le),maxlength:100,placeholder:"开头吸引观众的亮点"},null,8,["value"])]),_:1})]),_:1}),i(Z,{span:12},{default:nt(()=>[i(oe,{label:"结尾悬念"},{default:nt(()=>[i(ce,{value:d.value.endingHook,"onUpdate:value":N[3]||(N[3]=le=>d.value.endingHook=le),maxlength:100,placeholder:"结尾留下的悬念"},null,8,["value"])]),_:1})]),_:1}),i(Z,{span:24},{default:nt(()=>[i(oe,{label:"核心冲突"},{default:nt(()=>[i(ce,{value:d.value.coreConflict,"onUpdate:value":N[4]||(N[4]=le=>d.value.coreConflict=le),maxlength:200,placeholder:"本集的核心矛盾点"},null,8,["value"])]),_:1})]),_:1}),i(Z,{span:24},{default:nt(()=>[i(oe,{label:"剧情主干"},{default:nt(()=>[i(ue,{value:d.value.outline,"onUpdate:value":N[5]||(N[5]=le=>d.value.outline=le),"auto-size":{minRows:4,maxRows:8},maxlength:1e3,"show-count":"",placeholder:"详细描述本集剧情走向"},null,8,["value"])]),_:1})]),_:1})]),_:1})]),he("div",YGi,[N[37]||(N[37]=he("div",{class:"section-title"},[he("span",{class:"section-icon"},"💡"),mi(" 补充信息 ")],-1)),i(te,{gutter:16},{default:nt(()=>[i(Z,{span:12},{default:nt(()=>[i(oe,{label:"关键节点"},{default:nt(()=>[i(Ce,{value:d.value.keyEvents,"onUpdate:value":N[6]||(N[6]=le=>d.value.keyEvents=le),mode:"tags",placeholder:"输入后回车添加",style:{width:"100%"}},null,8,["value"])]),_:1})]),_:1}),i(Z,{span:12},{default:nt(()=>[i(oe,{label:"情绪曲线"},{default:nt(()=>[i(ce,{value:d.value.emotionalCurve,"onUpdate:value":N[7]||(N[7]=le=>d.value.emotionalCurve=le),placeholder:"如:低开高走、波浪起伏"},null,8,["value"])]),_:1})]),_:1}),i(Z,{span:12},{default:nt(()=>[i(oe,{label:"视觉重点"},{default:nt(()=>[i(Ce,{value:d.value.visualHighlights,"onUpdate:value":N[8]||(N[8]=le=>d.value.visualHighlights=le),mode:"tags",placeholder:"输入后回车添加",style:{width:"100%"}},null,8,["value"])]),_:1})]),_:1}),i(Z,{span:12},{default:nt(()=>[i(oe,{label:"金句"},{default:nt(()=>[i(Ce,{value:d.value.classicQuotes,"onUpdate:value":N[9]||(N[9]=le=>d.value.classicQuotes=le),mode:"tags",placeholder:"输入后回车添加",style:{width:"100%"}},null,8,["value"])]),_:1})]),_:1})]),_:1})])]),_:1},8,["model"])):Tt("",!0)]),_:1},8,["open","title"]),i(xe,{open:k.value,"onUpdate:open":N[11]||(N[11]=le=>k.value=le),onOk:W,width:"60vw",title:"选择资产",class:"asset-modal"},{default:nt(()=>[he("div",ZGi,[k.value?(we(),qt(GZ,{key:0,ref_key:"mainElementRef",ref:b,way:"checkbox",radio:m.value},null,8,["radio"])):Tt("",!0)])]),_:1},8,["open"])])}}}),qGi=za(XGi,[["__scopeId","data-v-3cac7801"]]),KGi={class:"storyline-container"},JGi={class:"page-header"},QGi={class:"storyline-content"},$Gi={class:"content-card"},eYi={key:0,class:"preview-box"},tYi={class:"preview-text"},nYi={key:1,class:"edit-box"},iYi={key:1,class:"empty-state"},oYi={key:0,class:"action-bar"},rYi={class:"action-btns"},lYi=_t({__name:"storyline",props:{modelValue:{default:""},modelModifiers:{}},emits:xs(["save"],["update:modelValue"]),setup(e,{emit:t}){const n=ec(e,"modelValue"),o=be(!1),r=be(""),l=t;function a(){o.value=!o.value,o.value&&(r.value=n.value)}function s(){o.value=!0}function c(){n.value=r.value,o.value=!1}function u(){l("save",n.value),o.value=!1}return(d,h)=>{const k=wi("i-edit"),m=wi("i-preview-open"),b=Xa,g=e1,v=wi("i-check");return we(),Pe("div",KGi,[he("div",JGi,[h[1]||(h[1]=he("div",{class:"header-content"},[he("h1",{class:"page-title"},"故事线管理"),he("p",{class:"page-desc"},"根据上传的小说原文生成大纲和故事线")],-1)),i(b,{type:"primary",class:"edit-btn",onClick:a},{default:nt(()=>[o.value?(we(),qt(m,{key:1,size:16})):(we(),qt(k,{key:0,size:16})),mi(" "+on(o.value?"预览模式":"编辑故事线"),1)]),_:1})]),he("div",QGi,[he("div",$Gi,[n.value||o.value?(we(),Pe(Un,{key:0},[o.value?(we(),Pe("div",nYi,[h[3]||(h[3]=he("div",{class:"edit-header"},[he("span",{class:"edit-icon"},"✏️"),he("span",{class:"edit-title"},"编辑故事线"),he("span",{class:"edit-tip"},"支持多行输入,描述完整的故事脉络")],-1)),i(g,{value:n.value,"onUpdate:value":h[0]||(h[0]=w=>n.value=w),placeholder:"请输入故事线,包括主要情节、角色发展、冲突转折等...",class:"storyline-textarea","auto-size":{minRows:12,maxRows:24},maxlength:5e3,"show-count":"",onChange:s},null,8,["value"])])):(we(),Pe("div",eYi,[h[2]||(h[2]=he("div",{class:"preview-header"},[he("span",{class:"preview-icon"},"📖"),he("span",{class:"preview-title"},"故事线内容")],-1)),he("div",tYi,on(n.value),1)]))],64)):(we(),Pe("div",iYi,[h[5]||(h[5]=he("div",{class:"empty-icon"},"📝",-1)),h[6]||(h[6]=he("p",{class:"empty-title"},"暂无故事线",-1)),h[7]||(h[7]=he("p",{class:"empty-desc"},'点击上方"编辑故事线"开始创作',-1)),i(b,{type:"primary",class:"empty-btn",onClick:a},{default:nt(()=>[...h[4]||(h[4]=[mi("开始编辑",-1)])]),_:1})]))]),o.value?(we(),Pe("div",oYi,[h[10]||(h[10]=he("div",{class:"action-tips"},null,-1)),he("div",rYi,[i(b,{class:"cancel-btn",onClick:c},{default:nt(()=>[...h[8]||(h[8]=[mi("取消",-1)])]),_:1}),i(b,{type:"primary",class:"save-btn",onClick:u},{default:nt(()=>[i(v,{size:16}),h[9]||(h[9]=mi(" 保存 ",-1))]),_:1})])])):Tt("",!0)])])}}}),aYi=za(lYi,[["__scopeId","data-v-6487204d"]]);function sYi(e,t){let n=0;return function(...o){const r=Date.now();r-n>=t&&(e.apply(this,o),n=r)}}const dSe="data:image/svg+xml,%3csvg%20version='1.1'%20xmlns='http://www.w3.org/2000/svg'%20style='display:%20block;'%20viewBox='0%200%202048%202048'%20width='32'%20height='32'%20preserveAspectRatio='none'%3e%3cpath%20transform='translate(0,0)'%20fill='rgb(171,72,254)'%20d='M%20940.972%20938.532%20C%20968.154%20937.299%20999.342%20937.832%201026.7%20937.934%20C%201008.76%20966.906%20992.521%20998.373%20975.011%201027.58%20C%20953.896%201062.8%20931.782%201097.1%20910.71%201132.47%20C%20895.136%201133.73%20879.656%201133.59%20863.31%201135.09%20C%20787.092%201141.5%20711.761%201155.92%20638.564%201178.11%20C%20572.019%201198.89%20449.284%201253.36%20416.06%201317.18%20C%20409.742%201307.55%20402.55%201298.92%20396.225%201288.61%20C%20374.251%201252.81%20373.041%201222.32%20374.394%201182.15%20C%20366.312%201200.94%20361.205%201214.94%20360.604%201236.01%20C%20358.084%201324.21%20453.617%201386.36%20523.982%201420.66%20C%20542.016%201429.45%20560.036%201439.44%20579.849%201439.44%20C%20620.987%201439.46%20674.461%201430.63%20705.388%201401.13%20C%20738.121%201369.92%20703.885%201342.46%20675.148%201330.66%20C%20612.911%201305.1%20533.195%201307.12%20473.826%201339.07%20C%20449.947%201351.92%20458.182%201360.25%20436.523%201338.68%20C%20502.115%201225.36%20769.457%201168.28%20891.324%201167.92%20C%20880.631%201181.62%20869.431%201205.22%20858.517%201216.82%20C%20825.846%201216.22%20792.547%201218.66%20760.485%201225.97%20C%20744.103%201230.35%20717.997%201236.93%20707.956%201251.86%20C%20700.954%201262.26%20711.907%201272.96%20720.979%201277.2%20C%20751.395%201291.41%20791.573%201292%20822.985%201281.29%20C%20817.604%201287.59%20813.386%201295.09%20808.663%201301.92%20C%20800.283%201314.03%20790.819%201326.16%20783.816%201339.1%20C%20781.105%201344.11%20778.89%201349.33%20777.632%201354.91%20C%20775.4%201364.79%20776.536%201373.84%20782.065%201382.38%20C%20804.636%201417.25%20860.497%201432.74%20898.979%201440.78%20C%20988.868%201459.55%201153.52%201460.93%201232.47%201408.52%20C%201246.58%201399.15%201262.7%201385.77%201265.78%201368.19%20C%201267.55%201358.14%201264.79%201349.97%201259.14%201341.75%20C%201264.38%201332.91%201278.02%201316.1%201284.82%201307.43%20C%201292.22%201298.38%201299.63%201287.79%201306.58%201278.29%20C%201328.8%201279.68%201407.72%201284.61%201415.63%201246.4%20C%201417.91%201235.37%201393.28%201221.86%201384.4%201218.97%20C%201380.24%201217.62%201358.94%201212.45%201356.47%201209.99%20C%201357.33%201204.34%201384.74%201173.95%201391.45%201163.37%20C%201459.13%201181.37%201547.15%201216.93%201600.88%201262.78%20C%201627.31%201285.34%201652.54%201321.11%201653.72%201356.59%20C%201654.22%201371.69%201654.03%201387.51%201653.95%201402.72%20L%201653.94%201475.76%20L%201653.97%201579.44%20C%201653.95%201601.8%201656.32%201627.09%201651.41%201649%20C%201646.5%201670.87%201634.04%201689.35%201619.5%201706.06%20C%201588.41%201741.78%201549.65%201764.5%201507.39%201784.37%20C%201377.44%201845.46%201233.05%201863.77%201091.26%201873.07%20C%201065.5%201874.76%201039.82%201874.64%201014.03%201874.6%20C%20826.259%201874.26%20537.641%201835.01%20393.385%201706.74%20C%20359.587%201676.69%20324.433%201635.36%20321.983%201588.01%20C%20321.269%201574.22%20321.91%201560.24%20321.757%201546.42%20C%20321.223%201498.42%20322.061%201450.48%20321.888%201402.5%20C%20321.784%201373.65%20322.205%201344.7%20321.752%201315.87%20C%20321.206%201281.08%20317.152%201230.6%20325.148%201197.84%20C%20333.054%201165.46%20353.454%201136.01%20375.728%201111.8%20C%20403.859%201081.21%20438.11%201059.74%20474.584%201040.56%20C%20616.022%20966.194%20783.233%20944.885%20940.972%20938.532%20z%20M%201324.2%201803.25%20C%201340.28%201798.25%201409.87%201783.14%201416.31%201773.34%20C%201418.64%201769.78%201418.88%201719.17%201417.08%201713.8%20C%201416.66%201712.54%201416.54%201712.49%201415.9%201711.54%20C%201408.91%201710.78%201361.71%201725.68%201352.07%201728.59%20L%201352.18%201590.18%20C%201352.17%201583.33%201352.43%201543.83%201351.52%201540.23%20C%201349.49%201539.16%201350.39%201539.37%201348.95%201539.17%20C%201331.33%201543.17%201314.25%201547.43%201296.49%201550.89%20C%201289.89%201552.17%201257.49%201557.18%201253.47%201558.85%20C%201251.12%201562.77%201250.03%201611.65%201254.02%201612.39%20C%201271.58%201615.61%201297.83%201606.36%201316.1%201603.01%20C%201315.56%201654.05%201315.71%201705.28%201316.92%201756.3%20C%201317.06%201762.1%201315.81%201800.29%201317.13%201802.78%20C%201319.62%201804.22%201321.29%201803.63%201324.2%201803.25%20z%20M%20546.006%201682.51%20C%20545.308%201645.48%20546.352%201608.34%20545.457%201571.3%20C%20545.194%201560.4%20545.326%201549.55%20545.797%201538.66%20C%20554.046%201542.21%20570.935%201551.05%20578.997%201550.35%20C%20580.723%201549.2%20582.655%201547.82%20582.623%201545.46%20C%20582.408%201529.86%20582.062%201513.6%20582.161%201498.03%20C%20577.119%201495.08%20518.936%201468.45%20513.023%201467.07%20L%20512.981%201734.09%20C%20520.838%201741.42%20596.481%201774.14%20604.079%201771.12%20C%20606.266%201764.31%20605.154%201729.49%20605.186%201719.75%20C%20605.309%201715.25%20605.911%201711.44%20604.112%201707.44%20C%20597.157%201701.08%20557.174%201686.76%20546.006%201682.51%20z%20M%201450.54%201312.46%20C%201414.2%201313.83%201358.25%201325.32%201333.93%201352.44%20C%201293.37%201397.66%201373.67%201432.56%201407.95%201437.74%20C%201431.99%201441.36%201449.9%201445.03%201473.23%201442.97%20C%201482.91%201441.85%201496.53%201441.77%201505.83%201439.14%20C%201537.49%201430.18%201570.68%201412.54%201592.3%201387.32%20C%201606.52%201370.74%201600.43%201356.7%201584.11%201344.83%20C%201545.44%201316.72%201496.95%201311.38%201450.54%201312.46%20z%20M%201076.86%201832.3%20C%201085.72%201827.8%201079.51%201798.44%201081.22%201789.22%20C%201082.05%201784.68%201082.03%201772.51%201079.84%201768.39%20C%201072.95%201764.23%201017.1%201765.14%201007.14%201766.04%20C%201000.89%201774.14%201005.6%201793.85%201004.51%201804.68%20C%201003.86%201811.18%201002.73%201828.94%201007.34%201832.85%20C%201017.82%201835.13%201064.53%201832.91%201076.86%201832.3%20z%20M%20917.919%201830.2%20C%20924.321%201822.25%20918.976%201796.8%20920.441%201785.81%20C%20921.025%201781.43%20920.492%201768.46%20918.655%201764.8%20C%20911.247%201760.86%20855.004%201756.61%20845.063%201757.12%20C%20842.351%201765.4%20845.073%201779.68%20845.03%201789.06%20C%20845.376%201799.5%20842.173%201811.1%20845.872%201821.1%20C%20846.771%201823.53%20852.223%201825.07%20854.394%201825.15%20C%20871.73%201825.82%20901.351%201832.02%20917.919%201830.2%20z%20M%201184.24%201824.9%20C%201196.49%201823.62%201231.14%201821.24%201240.63%201815.74%20C%201243.66%201808.59%201243.39%201797%201243.22%201789.27%20C%201242.97%201777.5%201244.16%201765.05%201241.85%201753.56%20C%201240.98%201749.24%201230.58%201750.99%201228.16%201751.36%20C%201219.08%201752.41%201174.87%201756.02%201169.3%201759.67%20C%201166.53%201768.4%201167.13%201813.74%201168.7%201823.55%20C%201172.4%201827.2%201179.24%201825.43%201184.24%201824.9%20z%20M%20759.354%201811.36%20C%20762.364%201806.83%20761.042%201785.97%20760.825%201779.51%20C%20760.595%201772.66%20763.907%201745.68%20756.596%201743.58%20C%20736.224%201737.74%20709.441%201731.02%20688.455%201728.82%20C%20684.915%201737.44%20687.51%201755.02%20687.107%201764.9%20C%20686.763%201773.33%20684.864%201786.4%20687.926%201793.82%20C%20695.14%201800.17%20748.795%201810.93%20759.354%201811.36%20z%20M%20871.979%201620.08%20C%20875.43%201611.77%20873.709%201594.49%20873.916%201585.04%20C%20874.333%201565.94%20877.275%201563.49%20857.718%201561.29%20C%20836.691%201558.92%20814.77%201556.38%20794.124%201552.77%20C%20793.568%201562.9%20793.43%201595.35%20794.08%201604.41%20C%20795.111%201618.79%20854.394%201618.8%20866.455%201621.39%20C%20867.409%201621.6%20870.915%201620.41%20871.979%201620.08%20z%20M%201024.45%201630.14%20C%201028.73%201623.27%201027.28%201584.15%201026.7%201573.64%20C%201009.64%201570.9%20967.295%201571.45%20947.624%201570.76%20C%20945.962%201580.01%20943.894%201618.15%20948.058%201625.57%20C%20956.823%201631.8%201011.46%201630.76%201024.45%201630.14%20z%20M%20455.284%201699.93%20C%20456.669%201683.08%20455.966%201652.81%20455.937%201635.43%20C%20451.499%201631.01%20407.606%201598.58%20403.495%201597.43%20C%20400.82%201603.48%20401.334%201648.68%20401.896%201656.9%20C%20410.367%201669.97%20441.488%201694.08%20455.284%201699.93%20z%20M%20910.751%201047.52%20C%20919.455%201046.83%20946.733%201046.38%20951.298%201042.85%20C%20955.645%201032.54%20954.082%201018.23%20954.237%201007.21%20C%20954.669%20976.437%20955.713%20977%20926.115%20979.584%20C%20915.754%20980.16%20893.935%20980.021%20885.458%20983.466%20C%20882.074%20988.688%20883.819%201036.57%20884.728%201045.39%20C%20885.306%201051.01%20906.091%201047.56%20910.751%201047.52%20z%20M%20488.4%201148.21%20C%20497.756%201143.32%20529.633%201128.01%20534.879%201120.65%20C%20536.123%201115.38%20535.855%201062.92%20534.085%201059.05%20C%20531.635%201057.56%20532.982%201057.85%20530.119%201057.75%20C%20522.985%201061.07%20485.659%201077.84%20484.76%201082.97%20C%20483.401%201090.72%20482.33%201140.81%20484.78%201146.91%20C%20486.835%201147.94%20486.206%201147.82%20488.4%201148.21%20z%20M%201555.81%201648.95%20C%201551.94%201649.84%201502.98%201676.4%201499.32%201679.36%20C%201497.02%201684.41%201496.54%201740.54%201498.53%201744.57%20C%201513.45%201739.95%201547.36%201721.12%201557.95%201709.06%20C%201558.27%201700.24%201559.54%201654.08%201556.76%201649.61%20L%201555.81%201648.95%20z%20M%20798.442%20990.457%20C%20790.154%20991.047%20744.469%20995.504%20739.917%201001.14%20C%20735.776%201006.27%20737.851%201051.06%20738.417%201059.47%20C%20738.586%201061.98%20740.141%201063.36%20741.95%201064.79%20L%20743.753%201065.08%20C%20752.688%201064.9%20796.515%201059.11%20803.027%201054.61%20C%20807.251%201044.98%20804.859%201029.77%20804.929%201019.07%20C%20804.978%201011.65%20808.421%20991.15%20798.442%20990.457%20z%20M%20600.837%201034.06%20C%20601.489%201043.65%20600.446%201092.4%20603.578%201096.22%20C%20606.823%201097.79%20607.758%201097.4%20611.316%201097.03%20L%20612.524%201096.54%20C%20621.015%201093.18%20629.612%201090.86%20638.387%201088.51%20C%20642.316%201087.46%20653.18%201085.32%20656.163%201083.88%20C%20658.816%201082.62%20660.928%201080.45%20662.111%201077.76%20C%20666.608%201067.58%20662.687%201041.79%20664.044%201029.83%20C%20664.61%201024.83%20664.298%201018.8%20659.599%201016.01%20C%20658.851%201016.05%20655.132%201016.16%20654.653%201016.28%20C%20640.329%201019.29%20612.828%201026.45%20600.837%201034.06%20z%20M%201530.94%201478.4%20C%201530.58%201486.41%201529.06%201528.94%201532.52%201532.88%20L%201535.91%201533%20C%201553.73%201522.33%201573.43%201511.84%201588.23%201497.32%20C%201593.79%201491.86%201593.29%201448.22%201590.85%201445.08%20C%201590.06%201445.01%201587.72%201444.72%201587.02%201444.73%20C%201564.07%201461.99%201553.96%201465.38%201530.94%201478.4%20z%20M%20455.426%201491.18%20C%20458.831%201482.75%20456.413%201448.58%20457.57%201436.49%20C%20447.99%201428.9%20436.86%201421.67%20426.808%201414.54%20C%20422.119%201411.21%20405.02%201396.39%20401.726%201394.93%20C%20397.649%201401.04%20401.427%201414.38%20401.026%201421.96%20C%20400.659%201428.89%20399.465%201436.68%20400.054%201443.6%20C%20404.455%201459.14%20426.027%201472.56%20438.339%201481.58%20C%20443.673%201485.49%20450.179%201489.26%20455.426%201491.18%20z%20M%20724.899%201540.19%20C%20715.518%201536.46%20658.601%201520.64%20649.175%201520.04%20C%20646.529%201524.6%20647.712%201538.69%20648.172%201544.14%20C%20648.871%201552.41%20644.556%201575.14%20653.352%201578.18%20C%20666.306%201582.65%20712.696%201598%20723.96%201595.66%20C%20724.532%201578.2%20725.188%201557.62%20724.899%201540.19%20z%20M%201463.17%201505.03%20C%201454.75%201508.18%201401.58%201524.91%201399.33%201528.1%20C%201397.42%201536.57%201399.38%201545.32%201399.53%201553.94%20C%201399.66%201562.33%201396.97%201573.72%201400.72%201581.37%20C%201403.69%201583.23%201402.12%201582.73%201405.59%201582.94%20C%201415.07%201579.86%201464.2%201565.63%201468.46%201558.13%20C%201470.3%201554.88%201470.12%201512.03%201468.9%201506.97%20L%201467.44%201505.16%20C%201465.96%201505.07%201464.64%201504.91%201463.17%201505.03%20z%20M%201171.89%201566.41%20C%201161.22%201567.42%201109.51%201570.41%201103.34%201572.48%20C%201101.18%201580.12%201101.32%201617.3%201102.34%201625.96%20C%201105.25%201629.31%201107.45%201628.74%201111.75%201628.58%20C%201124.27%201628.61%201170.02%201627.11%201179.14%201621.73%20C%201182.34%201615.66%201183.39%201572%201179.97%201566.53%20C%201176.22%201565.92%201175.55%201566.06%201171.89%201566.41%20z'/%3e%3cpath%20transform='translate(0,0)'%20fill='rgb(171,72,254)'%20d='M%201657.91%20259.802%20C%201662.75%20261.808%201682.88%20275.156%201688.63%20278.863%20C%201681.4%20290.971%201671.53%20304.994%201663.65%20316.961%20C%201646.46%20343.593%201628.86%20369.954%201610.84%20396.035%20C%201580.92%20439.996%201550.93%20486.538%201521.41%20531.033%20L%201439.94%20655.457%20C%201431.36%20668.575%201401.89%20717.981%201392.69%20724.821%20C%201369.63%20724.391%201352.02%20724.859%201332.62%20738.551%20C%201314.34%20751.451%201306.04%20768.752%201306.47%20791.07%20C%201306.76%20806.168%201309.45%20816.512%201318.44%20828.736%20C%201329.04%20842.891%201344.8%20852.282%201362.3%20854.864%20C%201409.5%20861.998%201450.17%20819.16%201438.5%20772.546%20C%201435.36%20759.997%201429.47%20751.801%201421.71%20741.695%20L%201585.92%20480.057%20C%201626.02%20416.546%201667.39%20352.871%201705.21%20287.991%20C%201712.27%20291.939%201735.24%20303.896%201737.61%20310.07%20C%201736.9%20315.381%201735.45%20319.911%201733.89%20325.016%20C%201690.78%20466.883%201653.28%20611.155%201630.78%20757.882%20C%201626.25%20788.684%201622.44%20819.587%201619.36%20850.566%20C%201614.89%20896.966%201624.03%20890.119%201589.16%20924.448%20C%201512.15%20996.547%201432.44%201066.23%201363.58%201146.43%20C%201339.73%201173.63%201320.44%201204.78%201298.21%201233.07%20C%201274.59%201263.12%201253.67%201296.25%201230.09%201325.98%20C%201218.35%201319.5%201207.29%201311.59%201195.86%201304.65%20C%201173.95%201291.35%201152.42%201277.06%201130.57%201263.75%20L%20998.431%201183.12%20C%20979.838%201171.76%20959.812%201160.63%20941.674%201148.87%20C%20957.912%201124.77%20975.862%201093.43%20990.938%201068.08%20C%201012.48%201028.67%201040.73%20989.798%201059.5%20949.166%20C%201096.31%20869.481%201125.74%20785.229%201152.93%20701.835%20C%201158.41%20685.045%201166.05%20657.538%201173.77%20642.685%20C%201177.12%20636.235%201215.59%20613.039%201223.95%20607.164%20C%201258.94%20582.735%201293.68%20557.951%201328.17%20532.815%20C%201444.39%20447.048%201549.83%20355.227%201657.91%20259.802%20z'/%3e%3cpath%20transform='translate(0,0)'%20fill='rgb(171,72,254)'%20d='M%20920.875%201183.92%20C%20934.196%201190.44%20958.666%201207.42%20972.672%201215.94%20L%201104.12%201297.05%20L%201174.97%201340.92%20C%201183.94%201346.59%201203.4%201358.5%201210.59%201365.22%20L%201208.78%201367.57%20C%201190.24%201391.58%201176.64%201400.59%201146.62%201407.74%20C%201128.92%201411.95%201112.81%201415.26%201094.6%201417.58%20C%201042.9%201430.79%20831.943%201422.64%20813.951%201359.26%20C%20820.908%201342.69%20835.418%201322.53%20845.35%201306.77%20C%20861.065%201281.84%20876.647%201256.81%20892.095%201231.71%20C%20901.412%201216.64%20912.656%201199.33%20920.875%201183.92%20z'/%3e%3cpath%20transform='translate(0,0)'%20fill='rgb(171,72,254)'%20d='M%201753.4%20174.051%20C%201757.16%20174.465%201760.78%20174.907%201764.31%20176.35%20C%201768.47%20178.053%201771.57%20181.153%201773.13%20185.405%20C%201777.88%20198.361%201752.78%20269.18%201746.37%20283.173%20C%201737.45%20279.844%201725.51%20272.236%201717.12%20267.125%20C%201706.93%20259.874%201687.15%20248.764%201675.94%20242.166%20C%201680.6%20236.545%201690.69%20227.724%201696.41%20222.441%20C%201711.94%20208.09%201734.34%20182.212%201753.4%20174.051%20z'/%3e%3c/svg%3e",cYi={key:0,class:"notice-message"},uYi={class:"notice-text"},dYi={class:"message-content-wrapper"},hYi=_t({__name:"chatMessage",props:{msg:{},sendApi:{type:Function}},setup(e){const t=be("light"),n=e;Oi({});function o(l){const a=/([\s\S]*?)<\/think>/,s=l.match(a);if(s){const c=s[1].trim(),u=l.replace(a,"").trim();return{thinking:c,content:u}}return{thinking:null,content:l}}const r=G(()=>n.msg.identity!=="assistant"?null:n.msg.data.map((l,a)=>{if(l.type==="text"){const{thinking:s,content:c}=o(l.text);return{type:l.type,text:l.text,thinking:s,content:c,index:a}}return{...l,index:a}}));return(l,a)=>{const s=wi("McMarkdownCard"),c=wi("McBubble");return e.msg.identity==="notice"?(we(),Pe("div",cYi,[he("span",uYi,on(e.msg.data),1)])):(we(),Pe("div",{key:1,class:Qe(["message-wrapper",[e.msg.identity==="user"?"user":"assistant"]])},[he("div",dYi,[e.msg.identity==="assistant"&&r.value?(we(!0),Pe(Un,{key:0},_o(r.value,u=>(we(),Pe("div",{key:u.index},[u.type==="text"?(we(),qt(c,{key:0,avatarConfig:{imgSrc:I(dSe),displayName:e.msg.role},avatarPosition:"top",variant:"bordered"},{default:nt(()=>[i(s,{enableThink:!0,content:u.content,theme:I(t)},null,8,["content","theme"])]),_:2},1032,["avatarConfig"])):Tt("",!0),u.type==="thinking"?(we(),qt(c,{key:1,loading:!0,avatarConfig:{imgSrc:I(dSe),displayName:e.msg.role},avatarPosition:"top"},null,8,["avatarConfig"])):Tt("",!0)]))),128)):(we(!0),Pe(Un,{key:1},_o(e.msg.data,(u,d)=>(we(),Pe("div",{key:d},[u.type==="text"?(we(),qt(c,{key:0,align:"right"},{default:nt(()=>[i(s,{enableThink:!0,content:u.text,theme:I(t)},null,8,["content","theme"])]),_:2},1024)):Tt("",!0),u.type==="image_url"?(we(),qt(c,{key:1,content:u.image_url,align:"right"},null,8,["content"])):Tt("",!0)]))),128))])],2))}}}),fYi=za(hYi,[["__scopeId","data-v-afab5b61"]]),kYi={class:"chat-container"},gYi={class:"input-container"},mYi={class:"action-bar"},vYi={class:"action-left"},bYi={class:"action-btn danger"},yYi=["disabled"],wYi=100,CYi=_t({__name:"index",props:xs({sendApi:{},options:{default:()=>[]},showClearBtn:{type:Boolean,default:!1},canSend:{type:Boolean,default:!0},enterToSend:{type:Boolean,default:!0},autoScroll:{type:Boolean,default:!1}},{modelValue:{default:[]},modelModifiers:{}}),emits:xs(["clean"],["update:modelValue"]),setup(e,{expose:t,emit:n}){const o=be(null),r=ec(e,"modelValue"),l=e,a=n,s=be(""),c=be(null),u=be(null);let d=!0;function h(S){if(S.key==="Enter"&&!S.shiftKey){if(S.preventDefault(),!l.canSend){$i.warning({content:"请等待消息响应完成",duration:1});return}w()}}function k(){o.value&&l.enterToSend&&(o.value.removeEventListener("keydown",h),o.value.addEventListener("keydown",h))}function m(){var S;(S=o.value)==null||S.removeEventListener("keydown",h)}Ur(m);function b({scrollTop:S}){if(!u.value||!c.value)return;const E=u.value.wrapRef;if(!E)return;const M=c.value.scrollHeight,T=E.clientHeight;d=M-S-T{var S;return(S=c.value)==null?void 0:S.clientHeight},()=>{l.autoScroll&&d&&g()});function g(){bt(()=>{u.value&&c.value&&(u.value.setScrollTop(c.value.scrollHeight),d=!0)})}function v(){l.autoScroll&&d&&bt(()=>{var S,E;(E=u.value)==null||E.setScrollTop(((S=c.value)==null?void 0:S.scrollHeight)??0)})}const w=sYi(L,1e3);async function L(){if(!s.value.trim()){$i.warning({content:"请输入内容",duration:1});return}const S=s.value;s.value="",await l.sendApi(S),g()}function x(){a("clean")}return t({scrollBottom:g,smartScrollBottom:v}),(S,E)=>{const M=q0,T=wIe,j=wi("i-clear-format"),O=V0,P=RE,B=wi("i-arrow-circle-up");return we(),Pe("div",kYi,[i(M,{class:"message-area",ref_key:"boxRef",ref:u,onScroll:b},{default:nt(()=>[he("div",{ref_key:"innerRef",ref:c,class:"message-list"},[i(L2,{name:"message"},{default:nt(()=>[(we(!0),Pe(Un,null,_o(r.value,(p,W)=>(we(),Pe("div",{key:W,class:"message-item"},[i(fYi,{sendApi:e.sendApi,msg:p},null,8,["sendApi","msg"])]))),128))]),_:1})],512)]),_:1},512),he("div",gYi,[he("div",{class:"input-wrapper",ref_key:"msgInput",ref:o},[l.options&&l.options.length?(we(),qt(T,{key:0,value:I(s),"onUpdate:value":E[0]||(E[0]=p=>Wr(s)?s.value=p:null),onFocus:k,onBlur:m,class:"message-input",placeholder:"输入 @ 选择图片进行编辑,单次限一张",autofocus:"",options:l.options},null,8,["value","options"])):Zo((we(),Pe("textarea",{key:1,spellcheck:"false",class:"message-input","onUpdate:modelValue":E[1]||(E[1]=p=>Wr(s)?s.value=p:null),placeholder:"输入消息...",onFocus:k,onBlur:m},null,544)),[[lk,I(s)]])],512),he("div",mYi,[he("div",vYi,[l.showClearBtn?(we(),qt(P,{key:0,title:"确定清空所有对话记录?","ok-text":"确定","cancel-text":"取消",onConfirm:x,placement:"topLeft"},{default:nt(()=>[i(O,{title:"清空对话"},{default:nt(()=>[he("button",bYi,[i(j,{theme:"outline",size:"20"})])]),_:1})]),_:1})):Tt("",!0)]),i(O,{title:l.canSend?"发送消息":"请等待响应完成"},{default:nt(()=>[he("button",{class:Qe(["send-btn",{disabled:!l.canSend}]),disabled:!l.canSend,onClick:E[2]||(E[2]=(...p)=>I(w)&&I(w)(...p))},[i(B,{theme:"outline",size:"24",fill:"#fff"})],10,yYi)]),_:1},8,["title"])])])])}}}),UGe=za(CYi,[["__scopeId","data-v-b28a8bb6"]]);class GGe{constructor(t,n={}){fL(this,"ws",null);fL(this,"url");fL(this,"options");fL(this,"timer",null);fL(this,"retries",0);const o=new URL(t,"ws://127.0.0.1:60000"),r=localStorage.getItem("token");r&&o.searchParams.set("token",r),this.url=o.toString(),this.options=n,this.connect()}connect(){this.ws=new WebSocket(this.url),this.ws.onopen=()=>{this.options.onOpen&&this.options.onOpen(),this.retries=0},this.ws.onmessage=t=>{this.options.onMessage&&this.options.onMessage(t.data)},this.ws.onerror=()=>{this.stopTimeout(),this.reconnect()},this.ws.onclose=t=>{this.options.onClose&&this.options.onClose(t),this.stopTimeout()}}stopTimeout(){this.timer&&(clearTimeout(this.timer),this.timer=null)}reconnect(){const t=this.options.maxRetries??10;this.retries{this.retries++,this.connect()},this.options.reconnectInterval??3e3)}send(t){this.ws&&this.ws.send(JSON.stringify(t))}close(){this.stopTimeout(),this.ws&&this.ws.close()}}const LYi={class:"contentWrap"},xYi={class:"conversation"},SYi={class:"workspace"},EYi=_t({__name:"index",setup(e){const{projectId:t}=_u($u()),n=be({}),o={AI1:"故事师",AI2:"大纲师",director:"导演",main:"助手"},r={AI1:"调用故事师",AI2:"调用大纲师",director:"调用导演",getChapter:"获取章节内容",getStoryline:"获取故事线",saveStoryline:"保存故事线",deleteStoryline:"删除故事线",getOutline:"获取大纲",saveOutline:"保存大纲",updateOutline:"更新大纲",deleteOutline:"删除大纲",generateAssets:"生成资产"},l=be("storyline"),a=be(""),s=be([]);be([]),be(!1),be([]),be();const c=be(),u=be(),d=be(!0),h={msgId:null,source:null};function k(){h.msgId=null,h.source=null}function m(K,Z){return h.source!==K&&k(),h.msgId||(H(),h.msgId=M0(),h.source=K,g.value.push({id:h.msgId,identity:"assistant",role:Z,data:[{type:"text",text:""}]})),h.msgId}function b(K){var te;if(!h.msgId||!K)return;const Z=g.value.find($=>$.id===h.msgId);Z&&Array.isArray(Z.data)&&Z.data[0]&&"text"in Z.data[0]&&(Z.data[0].text+=K,(te=u.value)==null||te.smartScrollBottom())}const g=G(()=>{const K=n.value[t.value];return(!K||K.length==0)&&(n.value[t.value]=[{id:M0(),identity:"assistant",role:"助手",data:[{type:"text",text:"欢迎使用Toonflow!请选择小说后开始AI对话来生成小说故事线与大纲。如您需要我开始为您工作您可以跟我说开始"}]}]),n.value[t.value]});async function v(){n.value[t.value]=[]}let w=null,L=null,x=!1;async function S(){var Z;const K=await cr.post("/outline/getStoryline",{projectId:t.value});a.value=(Z=K.data)==null?void 0:Z.content}async function E(){try{await cr.post("/outline/updateStoryline",{projectId:t.value,content:a.value}),await S(),$i.success("保存成功")}catch{$i.error("保存失败")}}function M(){w=new GGe(`/outline/agentsOutline?projectId=${t.value}`,{onOpen:()=>{console.log("WebSocket 连接已建立,等待后端 init 消息...")},onMessage:T,onError:p,onClose:()=>{d.value=!0,x=!1,L=null,w=null}})}function T(K){let Z;try{Z=JSON.parse(K)}catch(te){console.error("WebSocket 消息 JSON 解析失败:",te,K),U("消息格式错误");return}try{["stream","response","response_end","subAgentStream","subAgentEnd"].includes(Z.type)&&H();const oe={init:()=>{console.log("WebSocket 初始化完成"),x=!0,L&&(console.log("发送待处理的消息:",L),w==null||w.send(L),L=null)},stream:ce=>j(ce.data),response_end:()=>{d.value=!0,k()},subAgentStream:ce=>O(ce.data),subAgentEnd:ce=>P(ce.data),toolCall:ce=>B(ce.data),transfer:ce=>{var ue;const ve=(ue=ce.data)==null?void 0:ue.to;k(),U(`${o[ve]||ve} 正在思考`)},setNovelDone:ce=>R("助手",ce.data),notice:ce=>U(ce.data),error:ce=>{d.value=!0,U(`错误:${ce.data}`)},refresh:({data:ce})=>{var ve;ce=="storyline"&&S(),ce=="outline"&&((ve=c.value)==null||ve.getData())}}[Z.type];oe?oe(Z):console.warn("未知的消息类型:",Z.type,Z)}catch(te){console.error("ws 消息处理异常:",te,Z),U("消息处理失败")}}function j(K){K&&(m("main","助手"),b(K))}function O(K){if(!K.text)return;const Z=o[K.agent]||"助手";m(K.agent,Z),b(K.text)}function P(K){var te;const Z=o[K.agent]||"助手";k(),K.agent==="AI1"?(U(`${Z}已完成,故事线已更新至右侧面板`),S(),l.value="storyline"):K.agent==="AI2"&&(U(`${Z}已完成,大纲已更新至右侧面板`),(te=c.value)==null||te.getData(),l.value="outline")}function B(K){k();const Z=K.agent==="main"?"助手":o[K.agent]||K.agent,te=r[K.name]||K.name;let $="";K.args&&(K.name==="getChapter"&&K.args.chapterNumbers?$=`章节 ${K.args.chapterNumbers.join(", ")}`:K.name==="getOutline"&&K.args.simplified!==void 0?$=K.args.simplified?"(简化版)":"(完整版)":K.name==="updateOutline"&&K.args.id?$=`大纲ID: ${K.args.id}`:K.name==="deleteOutline"&&K.args.ids?$=`ID: ${K.args.ids.join(", ")}`:["AI1","AI2","director"].includes(K.name)&&K.args.taskDescription&&($=K.args.taskDescription.length>50?K.args.taskDescription.substring(0,50)+"...":K.args.taskDescription));const oe=$?`🔧 ${Z}正在${te}:${$}`:`🔧 ${Z}正在${te}`;U(oe)}function p(K){d.value=!0,U("WebSocket连接异常,请重试"),w=null}function W(K){var Z;!w||((Z=w.ws)==null?void 0:Z.readyState)!==WebSocket.OPEN?(L=K,x=!1,M()):x?w.send(K):L=K}function R(K,Z){g.value.push({id:M0(),identity:"assistant",role:K,data:[{type:"text",text:Z}]})}function U(K){g.value.push({id:M0(),identity:"notice",data:K})}function N(){g.value.push({id:M0(),identity:"assistant",role:"助手",data:[{type:"thinking",text:"生成中..."}]})}function H(){const K=g.value.findIndex(Z=>Z.identity==="assistant"&&Array.isArray(Z.data)&&Z.data.some(te=>te.type==="thinking"));K!==-1&&g.value.splice(K,1)}async function z(K){g.value.push({id:M0(),identity:"user",data:[{type:"text",text:K}]}),d.value=!1,N(),W({type:"msg",data:{type:"user",data:K}})}ji(()=>{v(),S()}),Ur(()=>{var K;(K=w==null?void 0:w.close)==null||K.call(w)});function X(){W({type:"cleanHistory"}),n.value[t.value]=[{id:M0(),identity:"assistant",role:"助手",data:[{type:"text",text:"欢迎使用Toonflow!请选择小说后开始AI对话来生成小说故事线与大纲。如您需要我开始为您工作您可以跟我说开始"}]}]}return(K,Z)=>{const te=ey,$=O3;return we(),Pe("div",LYi,[he("div",xYi,[i(UGe,{ref_key:"chatRef",ref:u,showClearBtn:"",autoScroll:"",modelValue:I(g),"onUpdate:modelValue":Z[0]||(Z[0]=oe=>Wr(g)?g.value=oe:null),enterToSend:"",canSend:d.value,onClean:X,sendApi:z,style:{height:"100%"}},null,8,["modelValue","canSend"])]),he("div",SYi,[i($,{activeKey:l.value,"onUpdate:activeKey":Z[3]||(Z[3]=oe=>l.value=oe)},{default:nt(()=>[i(te,{key:"storyline",tab:"故事线"},{default:nt(()=>[l.value=="storyline"?(we(),qt(aYi,{key:0,modelValue:a.value,"onUpdate:modelValue":Z[1]||(Z[1]=oe=>a.value=oe),onSave:E},null,8,["modelValue"])):Tt("",!0)]),_:1}),i(te,{key:"outline",tab:"大纲"},{default:nt(()=>[l.value=="outline"?(we(),qt(qGi,{key:0,ref_key:"outlineDomRef",ref:c,modelValue:s.value,"onUpdate:modelValue":Z[2]||(Z[2]=oe=>s.value=oe)},null,8,["modelValue"])):Tt("",!0)]),_:1})]),_:1},8,["activeKey"])])])}}}),MYi=za(EYi,[["__scopeId","data-v-b612e01f"]]),AYi={class:"element-manager"},TYi={class:"header"},_Yi={class:"header-content"},jYi={class:"icon-wrapper"},OYi={key:0,class:"header-stats"},DYi={class:"stat-item"},pYi={class:"stat-value"},NYi={class:"stat-label"},RYi={class:"toolbar"},IYi={key:0,class:"tab-group"},PYi=["onClick"],WYi={class:"actions"},HYi=["disabled"],zYi=["disabled"],BYi=["disabled"],VYi={class:"content-body"},FYi={key:0,class:"script-selector"},UYi={class:"script-label"},GYi={class:"script-list"},YYi=["onClick"],ZYi={key:1,class:"empty-state"},XYi={class:"empty-icon"},qYi={class:"empty-title"},KYi={class:"empty-desc"},JYi={key:2,class:"table-wrapper"},QYi={class:"name-cell"},$Yi={class:"name-text"},eZi={class:"image-cell"},tZi={key:1,class:"no-image"},nZi={class:"desc-text"},iZi={key:1,class:"prompt-text"},oZi={key:1,class:"prompt-text"},rZi={class:"remark-text"},lZi={class:"duration-badge"},aZi={class:"action-cell"},sZi=["onClick"],cZi=["onClick"],uZi=["onClick"],dZi=_t({__name:"index",props:xs({way:{},radio:{},batch:{type:Boolean}},{modelValue:{},modelModifiers:{}}),emits:xs(["checkChange","checkAll"],["update:modelValue"]),setup(e,{expose:t,emit:n}){const{projectId:o,currentScriptId:r}=_u($u()),l=e,a=n,s=ec(e,"modelValue"),c=be(),u=be("role"),d=be(),h=be([]),k=be([]),m=be(!1),b=be(!1),g=be(!1),v=be(!1),w=be(!1),L=be(!1),x=[{label:"角色",value:"role"},{label:"场景",value:"scene"},{label:"道具",value:"props"},{label:"分镜",value:"storyboard"}],S={角色:"role",场景:"scene",分镜:"storyboard",道具:"props"},E=ve=>({role:"角色",scene:"场景",props:"道具",storyboard:"分镜"})[ve]??"角色",M=G(()=>{var ve;return(ve=x.find(ue=>ue.value===u.value))==null?void 0:ve.label}),T=G(()=>!(h.value.length===0&&u.value==="storyboard"));function j(ve){return{role:"i-user",scene:"i-pic",props:"i-gift",storyboard:"i-film"}[ve]||"i-ad-product"}async function O(ve){u.value=ve,L.value=!0;try{ve==="storyboard"?(h.value=await B(),h.value.length?(r.value=h.value[0].id,await p(r.value)):k.value=[]):await P(ve)}finally{L.value=!1}}async function P(ve){const ue=await cr.post("/assets/getAssets",{projectId:o.value,type:E(ve)});k.value=ue.data}async function B(){return(await cr.post("/assets/getStoryboard",{projectId:o.value})).data}async function p(ve){const ue=await cr.post("/storyboard/getStoryboard",{projectId:o.value,scriptId:ve});k.value=ue.data}async function W(ve){r.value=ve.id,await p(ve.id)}function R(ve){a("checkChange",ve)}function U(ve){a("checkAll",ve,u.value,r.value??-1)}function N(){d.value={id:0,name:"",intro:"",duration:0,filePath:"",type:"",prompt:"",remark:"",videoPrompt:""},m.value=!0}function H(ve){d.value={...ve},m.value=!0}function z(ve){d.value={...ve},b.value=!0}function X(ve){as.confirm({title:"确认删除",content:`确定要删除「${ve.name||"该元素"}」吗?此操作不可恢复。`,okText:"删除",cancelText:"取消",okButtonProps:{danger:!0},onOk:async()=>{await cr.post("/assets/delAssets",{id:ve.id}),O(u.value),$i.success("删除成功")}})}async function K(ve,ue,Ce=5){for(let ke=0;ke{await cr.post("/assets/updateAssets",{id:ue.id,name:ue.name,intro:ue.intro??"",type:ue.type,remark:ue.remark??"",prompt:ue.prompt,duration:Number(ue.duration)}),await cr.post("/assets/saveAssets",{id:ue.id,base64:"",filePath:ue.filePath,prompt:ue.prompt,projectId:o.value})}),$i.success("保存成功"),O(u.value)}async function te(){var ve;if(!((ve=s.value)!=null&&ve.length))return $i.warning("请至少选择一个资产");v.value=!0,await K(s.value,async ue=>{try{const Ce=await cr.post("/assets/polishPrompt",{projectId:o.value,assetsId:ue.id,type:S[ue.type]??"props",name:ue.name,describe:ue.intro}),ke=s.value.findIndex(xe=>xe.id===Ce.data.assetsId);ke!==-1&&(s.value[ke].prompt=Ce.data.prompt)}catch(Ce){$i.error(Ce.message??"提示词生成失败")}}),v.value=!1,$i.success("提示词批量生成成功")}async function $(){var ve;if(!((ve=s.value)!=null&&ve.length))return $i.warning("请至少选择一个资产");w.value=!0,await K(s.value,async ue=>{try{const Ce=await cr.post("/assets/generateAssets",{type:S[ue.type]??"props",projectId:o.value,name:ue.name,prompt:ue.prompt,id:ue.id}),ke=s.value.findIndex(xe=>xe.id===Ce.data.assetsId);ke!==-1&&(s.value[ke].filePath=Ce.data.path)}catch{}}),w.value=!1,$i.success("图片批量生成成功")}function oe(){var ve,ue;return l.way==="radio"?(ve=c.value)==null?void 0:ve.getRadioRecord(!0):(ue=c.value)==null?void 0:ue.getCheckboxRecords(!0)}function ce(ve,ue){var Ce;(Ce=c.value)==null||Ce.setCheckboxRow(ve,ue)}return t({getSelectData:oe,changeChecked:ce}),ji(()=>{l.radio&&(u.value=l.radio),O(u.value)}),gt(g,ve=>{ve||O(u.value)}),(ve,ue)=>{const Ce=wi("i-ad-product"),ke=wi("i-magic"),xe=wi("i-pic"),le=wi("i-layers"),ye=wi("i-plus"),ae=wi("i-editor"),ee=wi("vxe-column"),fe=I1,ge=e1,Ee=wi("i-pencil"),Le=wi("i-delete"),pe=wi("vxe-table"),We=nk;return we(),Pe("div",AYi,[he("div",TYi,[he("div",_Yi,[he("div",jYi,[i(Ce,{size:24})]),ue[6]||(ue[6]=he("div",{class:"header-text"},[he("h3",{class:"title"},"资产管理"),he("p",{class:"subtitle"},"管理场景、角色、道具、分镜资源库")],-1))]),I(k).length?(we(),Pe("div",OYi,[he("div",DYi,[he("span",pYi,on(I(k).length),1),he("span",NYi,on(I(M))+"数量",1)])])):Tt("",!0)]),he("div",RYi,[l.radio?Tt("",!0):(we(),Pe("div",IYi,[(we(),Pe(Un,null,_o(x,Ie=>he("button",{key:Ie.value,class:Qe(["tab-btn",{active:I(u)===Ie.value}]),onClick:Be=>O(Ie.value)},[(we(),qt(lr(j(Ie.value)),{size:16})),he("span",null,on(Ie.label),1)],10,PYi)),64))])),he("div",WYi,[l.batch?(we(),Pe(Un,{key:0},[he("button",{class:"action-btn secondary",disabled:I(v),onClick:te},[i(ke,{size:16}),he("span",null,on(I(v)?"处理中...":"批量润色"),1)],8,HYi),he("button",{class:"action-btn primary",disabled:I(w),onClick:$},[i(xe,{size:16}),he("span",null,on(I(w)?"生成中...":"批量生成图片"),1)],8,zYi)],64)):l.way?Tt("",!0):(we(),Pe(Un,{key:1},[he("button",{class:"action-btn secondary",onClick:ue[0]||(ue[0]=Ie=>g.value=!0)},[i(le,{size:16}),ue[7]||(ue[7]=he("span",null,"批量生成",-1))]),he("button",{class:"action-btn primary",disabled:!I(T),onClick:N},[i(ye,{size:16}),he("span",null,"新增"+on(I(M)),1)],8,BYi)],64))])]),he("div",VYi,[i(We,{spinning:I(L),tip:"加载中..."},{default:nt(()=>[I(u)==="storyboard"&&I(h).length?(we(),Pe("div",FYi,[he("div",UYi,[i(ae,{size:16}),ue[8]||(ue[8]=he("span",null,"选择剧本",-1))]),he("div",GYi,[(we(!0),Pe(Un,null,_o(I(h),Ie=>(we(),Pe("button",{key:Ie.id,class:Qe(["script-btn",{active:I(r)===Ie.id}]),onClick:Be=>W(Ie)},on(Ie.name),11,YYi))),128))])])):Tt("",!0),!I(L)&&!I(k).length?(we(),Pe("div",ZYi,[he("div",XYi,[i(Ce,{size:56})]),he("h3",qYi,"暂无"+on(I(M))+"元素",1),he("p",KYi,'点击右上角"新增'+on(I(M))+'"按钮添加,或根据剧本批量生成',1),!l.way&&I(T)?(we(),Pe("button",{key:0,class:"empty-action",onClick:N},[i(ye,{size:18}),he("span",null,"新增"+on(I(M)),1)])):Tt("",!0)])):(we(),Pe("div",JYi,[i(pe,{ref_key:"tableRef",ref:c,data:I(k),"cell-config":{height:l.batch?300:140},"row-config":{keyField:"id",resizable:!0},"radio-config":{reserve:!0},"checkbox-config":{reserve:!0},round:"",stripe:"",onCheckboxAll:U,onCheckboxChange:R},{default:nt(()=>[l.way?(we(),qt(ee,{key:0,type:l.way,title:"选择",width:"80",align:"center"},null,8,["type"])):Tt("",!0),i(ee,{title:"名称",field:"name",width:"160","show-overflow":"title","edit-render":{name:"input"}},{default:nt(({row:Ie})=>[he("div",QYi,[he("span",$Yi,on(Ie.name||"未命名"),1)])]),_:1}),i(ee,{title:"预览图",width:"140",align:"center"},{default:nt(({row:Ie})=>[he("div",eZi,[Ie.filePath?(we(),qt(fe,{key:0,src:Ie.filePath,fallback:I(Vm),class:"preview-image"},null,8,["src","fallback"])):(we(),Pe("div",tZi,[i(xe,{size:24}),ue[9]||(ue[9]=he("span",null,"待生成",-1))]))])]),_:1}),i(ee,{title:"描述",field:"intro","min-width":"180","show-overflow":"title","edit-render":{name:"textarea"}},{default:nt(({row:Ie})=>[he("p",nZi,on(Ie.intro||"暂无描述"),1)]),_:1}),i(ee,{title:"生图提示词",field:"prompt","min-width":"200","show-overflow":"title"},{default:nt(({row:Ie})=>[l.batch?(we(),qt(ge,{key:0,value:Ie.prompt,"onUpdate:value":Be=>Ie.prompt=Be,"auto-size":{minRows:3,maxRows:10},placeholder:"输入生图提示词...",class:"prompt-textarea"},null,8,["value","onUpdate:value"])):(we(),Pe("p",iZi,on(Ie.prompt||"暂无提示词"),1))]),_:1}),I(u)==="storyboard"?(we(),qt(ee,{key:1,title:"视频提示词",field:"videoPrompt","min-width":"200","show-overflow":"title"},{default:nt(({row:Ie})=>[l.batch?(we(),qt(ge,{key:0,value:Ie.videoPrompt,"onUpdate:value":Be=>Ie.videoPrompt=Be,"auto-size":{minRows:3,maxRows:10},placeholder:"输入视频提示词...",class:"prompt-textarea"},null,8,["value","onUpdate:value"])):(we(),Pe("p",oZi,on(Ie.videoPrompt||"暂无提示词"),1))]),_:1})):Tt("",!0),i(ee,{title:"备注",field:"remark",width:"150","edit-render":{name:"textarea"}},{default:nt(({row:Ie})=>[he("p",rZi,on(Ie.remark||"-"),1)]),_:1}),I(u)==="storyboard"?(we(),qt(ee,{key:2,title:"时长",field:"duration",width:"100",align:"center"},{default:nt(({row:Ie})=>[he("span",lZi,on(Ie.duration||0)+"s",1)]),_:1})):Tt("",!0),l.batch?Tt("",!0):(we(),qt(ee,{key:3,title:"操作",width:"140",fixed:"right",align:"center"},{default:nt(({row:Ie})=>[he("div",aZi,[he("button",{class:"icon-btn edit",title:"编辑",onClick:Be=>H(Ie)},[i(Ee,{size:18})],8,sZi),he("button",{class:"icon-btn magic",title:"AI生成",onClick:Be=>z(Ie)},[i(ke,{size:18})],8,cZi),he("button",{class:"icon-btn delete",title:"删除",onClick:Be=>X(Ie)},[i(Le,{size:18})],8,uZi)])]),_:1}))]),_:1},8,["data","cell-config"])]))]),_:1},8,["spinning"])]),i(FGe,{modelValue:I(m),"onUpdate:modelValue":ue[1]||(ue[1]=Ie=>Wr(m)?m.value=Ie:null),type:I(u),scriptId:I(r),data:I(d),onUpdate:ue[2]||(ue[2]=Ie=>O(I(u)))},null,8,["modelValue","type","scriptId","data"]),i(Nfe,{modelValue:I(b),"onUpdate:modelValue":ue[3]||(ue[3]=Ie=>Wr(b)?b.value=Ie:null),data:I(d),onUpdate:ue[4]||(ue[4]=Ie=>O(I(u)))},null,8,["modelValue","data"]),tD?(we(),qt(tD,{key:0,modelValue:I(g),"onUpdate:modelValue":ue[5]||(ue[5]=Ie=>Wr(g)?g.value=Ie:null),data:I(k),type:I(u),"script-id":I(r)??-1,onSave:Z},null,8,["modelValue","data","type","script-id"])):Tt("",!0)])}}}),hZi=za(dZi,[["__scopeId","data-v-09e0f047"]]),hSe="data:image/png;base64,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";function ym(e){const t={};return new Proxy(t,{get(n,o){return o in n?n[o]:e},set(n,o,r){return n[o]=r,!0}})}const fZi=dce("loadingStore",()=>{const e=be(ym(!1)),t=be(ym(!1)),n=be(ym(!1)),o=be(ym(!1)),r=be(ym(!1)),l=be(ym(!1)),a=be(ym(!1)),s=be(ym(!1)),c=be(ym(!1));return{videoGenerateloading:e,assetGenerateloading:t,assetGeneratePromptloading:n,scriptGenerateLoading:o,storeboardGenerateLoading:r,batchGenerateImageLoading:l,batchGenerateStoryboardImageLoading:a,batchGeneratePromptLoading:s,batchGenerateStoryboardPromptLoading:c}},{persist:!1}),kZi={class:"storyboard"},gZi={class:"summary-header"},mZi={class:"summary-left"},vZi={class:"icon-wrapper"},bZi={key:0,class:"count-badge"},yZi=["disabled"],wZi={class:"data-content"},CZi={class:"tabs-wrapper"},LZi={class:"tab-content"},xZi={class:"section-card"},SZi={class:"section-header"},EZi={class:"section-title"},MZi={class:"section-body"},AZi={key:0,class:"element-grid"},TZi=["onClick"],_Zi={class:"element-cover"},jZi={class:"element-overlay"},OZi={class:"element-info"},DZi={class:"element-name"},pZi={class:"element-type"},NZi={class:"type-tag"},RZi={key:1,class:"empty-state"},IZi={class:"empty-icon"},PZi={class:"section-card script-section"},WZi={class:"section-header"},HZi={class:"section-title"},zZi={key:0,class:"word-count"},BZi={class:"section-body"},VZi={key:0,class:"loading-state"},FZi={class:"loading-time"},UZi={class:"notebook"},GZi={class:"line-numbers"},YZi=["onUpdate:modelValue","onInput","onScroll"],ZZi={class:"script-footer"},XZi={key:2,class:"empty-state"},qZi={class:"empty-icon"},KZi=28,fSe=20,JZi=_t({__name:"scriptView",props:{modelValue:{},modelModifiers:{},scriptId:{default:null},scriptIdModifiers:{}},emits:xs(["change","getScriptData"],["update:modelValue","update:scriptId"]),setup(e,{emit:t}){const{projectId:n}=_u($u()),o=t,r=ec(e,"modelValue"),l=ec(e,"scriptId"),{scriptGenerateLoading:a}=_u(fZi()),s=be(!1),c=be(!1),u=be(!1),d=be({}),h=be({}),k=be(),m=be({}),b=be(null),g=G(()=>{var U;return(U=r.value)==null?void 0:U.find(N=>N.id===l.value)}),v=G(()=>{var U;return((U=b.value)==null?void 0:U.element)??[]});Ur(()=>{Object.values(h.value).forEach(clearInterval)});function w(U,N){U&&(m.value[N]=U,bt(()=>{L(U)}))}function L(U){U.style.height="auto";const N=Math.max(U.scrollHeight,fSe*KZi);U.style.height=`${N}px`}function x(U){const N=U?U.split(`
+`).map(function(t){return t.trim()}).filter(function(t){return t!==""&&t.charAt(0)!=="#"}):e:[]}function XVi(e){return e}var zGe={},sSe=Vd,qVi=Tp;zGe.openZip=KVi;function KVi(e){return e.arrayBuffer?sSe.resolve(qVi.openArrayBuffer(e.arrayBuffer)):sSe.reject(new Error("Could not find file in options"))}var BGe={},JVi=WZ(),QVi=PZ();BGe.element=$Vi;function $Vi(e){return function(t){return QVi.elementWithTag(JVi.element(e),[t])}}var eFi=Du,VGe=$2e,Dfe=Efe,tFi=Mfe.DocumentConverter,nFi=xGe.convertElementToRawText,iFi=HZ.readStyle,oFi=FZ.readOptions,UZ=zGe,rFi=Yf.Result;Sk.convertToHtml=lFi;Sk.convertToMarkdown=aFi;Sk.convert=pfe;Sk.extractRawText=dFi;Sk.images=Afe;Sk.transforms=S6;Sk.underline=BGe;Sk.embedStyleMap=hFi;Sk.readEmbeddedStyleMap=sFi;function lFi(e,t){return pfe(e,t)}function aFi(e,t){var n=Object.create(t||{});return n.outputFormat="markdown",pfe(e,n)}function pfe(e,t){return t=oFi(t),UZ.openZip(e).tap(function(n){return Dfe.readStyleMap(n).then(function(o){t.embeddedStyleMap=o})}).then(function(n){return VGe.read(n,e,t).then(function(o){return o.map(t.transformDocument)}).then(function(o){return cFi(o,t)})})}function sFi(e){return UZ.openZip(e).then(Dfe.readStyleMap)}function cFi(e,t){var n=uFi(t.readStyleMap()),o=eFi.extend({},t,{styleMap:n.value}),r=new tFi(o);return e.flatMapThen(function(l){return n.flatMapThen(function(a){return r.convertToHtml(l)})})}function uFi(e){return rFi.combine((e||[]).map(iFi)).map(function(t){return t.filter(function(n){return!!n})})}function dFi(e){return UZ.openZip(e).then(VGe.read).then(function(t){return t.map(nFi)})}function hFi(e,t){return UZ.openZip(e).tap(function(n){return Dfe.writeStyleMap(n,t)}).then(function(n){return n.toArrayBuffer()}).then(function(n){return{toArrayBuffer:function(){return n},toBuffer:function(){return Buffer.from(n)}}})}Sk.styleMapping=function(){throw new Error(`Use a raw string instead of mammoth.styleMapping e.g. "p[style-name='Title'] => h1" instead of mammoth.styleMapping("p[style-name='Title'] => h1")`)};const fFi={class:"purgeNovel"},kFi={class:"data"},gFi={style:{"padding-top":"42px","padding-bottom":"42px","background-color":"#f9fafb"}},mFi={class:"dragIcon"},vFi={class:"formItem"},bFi={class:"uploadWrap"},yFi={class:"footerInfo f ac jb",style:{"margin-top":"8px"}},wFi={class:"charCount"},CFi={key:0,class:"tips warn"},LFi={style:{"margin-top":"16px","text-align":"right"}},xFi={style:{"margin-top":"16px","text-align":"right"}},SFi=_t({__name:"purgeNovel",props:{modelValue:{type:Boolean},modelModifiers:{}},emits:xs(["select"],["update:modelValue"]),setup(e,{emit:t}){const n=ec(e,"modelValue"),o=t,r=be("To1"),l=be(),a=be(""),s=be([]),c=be([]),u=G(()=>{if(!a.value)return[];try{return cWi(a.value).flatMap(g=>g.chapters.map(v=>({index:v.index,reel:g.reel,chapter:v.chapter,chapterData:v.text})))}catch(g){return console.error("解析小说内容出错:",g),[]}}),d=G(()=>c.value.reduce((g,v)=>g+v.chapterData.length,0));async function h(g){const v=await g.arrayBuffer();return g.type==="text/plain"?new TextDecoder().decode(v):(await Sk.extractRawText({arrayBuffer:v})).value}async function k(g){const v=["text/plain","application/vnd.openxmlformats-officedocument.wordprocessingml.document"];if(g.type==="application/msword")return $i.warning(".doc文件不支持解析,请转换为.txt或.docx文件"),!1;if(!v.includes(g.type))return $i.error("不支持的文件类型"),!1;if(g.size>10*1024*1024)return $i.error("文件大小超过10MB,请上传更小的文件"),!1;const w=ZOe.service({lock:!0,text:"文件解析中...",background:"rgba(0,0,0,0.7)"});try{a.value=await h(g)}catch{$i.error("文件解析失败,请重新上传")}finally{w.close()}return!1}function m({records:g}){c.value=g}function b(){if(!c.value.length){$i.warning("请先勾选章节");return}o("select",c.value)}return(g,v)=>{const w=wi("i-upload-one"),L=AIt,x=NU,S=e1,E=Xa,M=ey,T=wi("vxe-column"),j=wi("vxe-table"),O=O3,P=as;return we(),Pe("div",fFi,[i(P,{footer:null,style:{top:"20px"},open:n.value,"onUpdate:open":v[5]||(v[5]=B=>n.value=B),title:"上传小说原文",width:"50%"},{default:nt(()=>[he("div",kFi,[i(O,{activeKey:I(r),"onUpdate:activeKey":v[4]||(v[4]=B=>Wr(r)?r.value=B:null)},{default:nt(()=>[i(M,{key:"To1",tab:"第一步"},{default:nt(()=>[he("div",null,[i(L,{fileList:I(s),"onUpdate:fileList":v[0]||(v[0]=B=>Wr(s)?s.value=B:null),name:"file",multiple:!1,maxCount:1,beforeUpload:k,showUploadList:!0,action:"/"},{default:nt(()=>[he("div",gFi,[he("div",mFi,[i(w,{theme:"outline",size:"32",fill:"#9810fa"})]),v[6]||(v[6]=he("p",{class:"ant-upload-text"},"拖拽小说原文文件到此处或点击上传",-1)),v[7]||(v[7]=he("p",{class:"ant-upload-hint"},"支持 .txt, .docx 格式,建议文件大小不超过 10MB",-1))])]),_:1},8,["fileList"])]),i(x,null,{default:nt(()=>[...v[8]||(v[8]=[mi("或",-1)])]),_:1}),he("div",vFi,[v[9]||(v[9]=he("div",{class:"label"},"直接粘贴小说原文内容",-1)),he("div",bFi,[i(S,{value:I(a),"onUpdate:value":v[1]||(v[1]=B=>Wr(a)?a.value=B:null),placeholder:"请输入小说原文内容","auto-size":{minRows:18,maxRows:18},style:{"background-color":"#f9fafb !important"}},null,8,["value"])]),he("div",yFi,[he("div",null,[he("span",wFi,on(I(a).length)+" 字符",1),I(a).length>0&&I(a).length<100?(we(),Pe("span",CFi,"内容过短,建议至少100字符")):Tt("",!0)]),he("span",null,"已解析 "+on(I(u).length)+" 章节",1)])]),he("div",LFi,[i(E,{type:"primary",style:{"margin-left":"10px"},disabled:!I(a)||!I(u).length,onClick:v[2]||(v[2]=B=>r.value="To2")},{default:nt(()=>[...v[10]||(v[10]=[mi(" 下一步 ",-1)])]),_:1},8,["disabled"])])]),_:1}),i(M,{key:"To2",tab:"第二步","force-render":""},{default:nt(()=>[he("div",null,[i(j,{ref_key:"tableRef",ref:l,"show-footer":"",height:"500","row-config":{isHover:!0},data:I(u),"checkbox-config":{highlight:!0,trigger:"row"},onCheckboxChange:m,onCheckboxAll:m},{default:nt(()=>[i(T,{type:"checkbox",width:"60"}),i(T,{field:"index",title:"章",width:"100"}),i(T,{field:"reel",title:"卷",width:"100"}),i(T,{field:"chapter",title:"章节名称",width:"200","show-header-overflow":"","show-overflow":"title","show-footer-overflow":""}),i(T,{field:"chapterData",title:"章节内容","show-header-overflow":"","show-overflow":"title","show-footer-overflow":""})]),_:1},8,["data"])]),he("div",null,"已勾选:"+on(I(d))+"字(小于200000字)",1),he("div",xFi,[i(E,{style:{"margin-top":"16px"},onClick:v[3]||(v[3]=B=>r.value="To1")},{default:nt(()=>[...v[11]||(v[11]=[mi("上一步",-1)])]),_:1}),i(E,{type:"primary",style:{"margin-left":"10px"},disabled:I(d)>2e5,onClick:b},{default:nt(()=>[...v[12]||(v[12]=[mi("保存",-1)])]),_:1},8,["disabled"])])]),_:1})]),_:1},8,["activeKey"])])]),_:1},8,["open"])])}}}),EFi={class:"overviewMain"},MFi={class:"smSummary jb"},AFi={class:"f"},TFi={class:"actionBtns"},_Fi={class:"editModalContent"},jFi=_t({__name:"index",setup(e){const{projectId:t}=_u($u()),n=be([]),o=be(!1),r=be(!1),l=be({id:-1,index:0,reel:"",chapter:"",chapterData:""}),a=()=>{cr.post("/novel/getNovel",{projectId:t.value}).then(h=>{n.value=h.data})},s=h=>{cr.post("/novel/addNovel",{projectId:t.value,data:h}).then(()=>{a(),o.value=!1})},c=h=>{l.value={...h},r.value=!0},u=()=>{cr.post("/novel/updateNovel",l.value).then(()=>{a(),$i.success("更新成功"),r.value=!1})},d=h=>{cr.post("/novel/delNovel",{id:h.id}).then(()=>{a()})};return ji(a),(h,k)=>{const m=wi("i-file-text"),b=wi("i-optimize"),g=wi("vxe-column"),v=wi("i-edit"),w=wi("i-delete"),L=RE,x=wi("vxe-table"),S=hc,E=Ey,M=e1,T=Tf,j=as;return we(),Pe("div",EFi,[k[9]||(k[9]=he("div",{class:"overviewHeader"},[he("h2",{class:"overviewTitle"},"小说原文"),he("p",{class:"overviewSub"},"查看小说原文")],-1)),he("div",MFi,[he("div",AFi,[i(m,{size:24,class:"smSummaryIcon mr-3"}),k[7]||(k[7]=he("span",{class:"smSummaryTitle"},"原文管理",-1))]),he("button",{class:"smSummaryBtn",onClick:k[0]||(k[0]=O=>o.value=!0)},[i(b,{size:16}),k[8]||(k[8]=mi(" 新增 ",-1))])]),i(x,{ref:"tableRef",data:I(n),"row-config":{isHover:!0},"checkbox-config":{highlight:!0,trigger:"row"},height:"500",style:{"margin-top":"12px"}},{default:nt(()=>[i(g,{field:"index",title:"章",width:"100"}),i(g,{field:"reel",title:"卷",width:"100"}),i(g,{field:"chapter",title:"章节名称",width:"200","show-overflow":"title"}),i(g,{field:"chapterData",title:"章节内容","show-overflow":"title"}),i(g,{title:"操作",width:"100"},{default:nt(({row:O})=>[he("div",TFi,[i(v,{size:"21",onClick:P=>c(O)},null,8,["onClick"]),i(L,{title:"确定要删除吗?","ok-text":"确认","cancel-text":"取消",onConfirm:P=>d(O)},{default:nt(()=>[i(w,{size:"21"})]),_:1},8,["onConfirm"])])]),_:1})]),_:1},8,["data"]),i(SFi,{modelValue:I(o),"onUpdate:modelValue":k[1]||(k[1]=O=>Wr(o)?o.value=O:null),onSelect:s},null,8,["modelValue"]),i(j,{open:I(r),"onUpdate:open":k[6]||(k[6]=O=>Wr(r)?r.value=O:null),width:"60vw",title:"编辑原文",onOk:u},{default:nt(()=>[he("div",_Fi,[i(T,{model:I(l),layout:"vertical"},{default:nt(()=>[i(E,{label:"章",required:""},{default:nt(()=>[i(S,{value:I(l).index,"onUpdate:value":k[2]||(k[2]=O=>I(l).index=O),type:"number"},null,8,["value"])]),_:1}),i(E,{label:"卷",required:""},{default:nt(()=>[i(S,{value:I(l).reel,"onUpdate:value":k[3]||(k[3]=O=>I(l).reel=O)},null,8,["value"])]),_:1}),i(E,{label:"章节名称",required:""},{default:nt(()=>[i(S,{value:I(l).chapter,"onUpdate:value":k[4]||(k[4]=O=>I(l).chapter=O)},null,8,["value"])]),_:1}),i(E,{label:"章节内容",required:""},{default:nt(()=>[i(M,{value:I(l).chapterData,"onUpdate:value":k[5]||(k[5]=O=>I(l).chapterData=O),"auto-size":{minRows:5,maxRows:20}},null,8,["value"])]),_:1})]),_:1},8,["model"])])]),_:1},8,["open"])])}}}),OFi=za(jFi,[["__scopeId","data-v-d4b34dae"]]),oh=[];for(let e=0;e<256;++e)oh.push((e+256).toString(16).slice(1));function DFi(e,t=0){return(oh[e[t+0]]+oh[e[t+1]]+oh[e[t+2]]+oh[e[t+3]]+"-"+oh[e[t+4]]+oh[e[t+5]]+"-"+oh[e[t+6]]+oh[e[t+7]]+"-"+oh[e[t+8]]+oh[e[t+9]]+"-"+oh[e[t+10]]+oh[e[t+11]]+oh[e[t+12]]+oh[e[t+13]]+oh[e[t+14]]+oh[e[t+15]]).toLowerCase()}let hre;const pFi=new Uint8Array(16);function NFi(){if(!hre){if(typeof crypto>"u"||!crypto.getRandomValues)throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");hre=crypto.getRandomValues.bind(crypto)}return hre(pFi)}const RFi=typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto),cSe={randomUUID:RFi};function IFi(e,t,n){var r;e=e||{};const o=e.random??((r=e.rng)==null?void 0:r.call(e))??NFi();if(o.length<16)throw new Error("Random bytes length must be >= 16");return o[6]=o[6]&15|64,o[8]=o[8]&63|128,DFi(o)}function M0(e,t,n){return cSe.randomUUID&&!e?cSe.randomUUID():IFi(e)}const Vm="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAIAAAAiOjnJAAAACXBIWXMAAAsTAAALEwEAmpwYAAALc0lEQVR4nO3da2xTdRzG8Wdr0Y07I5tcEsMoiZc2IJHgLdUXIyESg8QimsgSAjoiiq+UCZpIgo5EIhFiMc7gEjsEZJMOb0EWTJzKJVE0dvICZqckgIUwdbRchP18cY49O+VssMtv3XqeT/qi+/f0nFP2Tc9lpyVPREDU3/KzvQKUmxgWqWBYpIJhkQqGRSoYFqlgWKSCYZEKhkUqGBapYFikgmGRCoZFKhgWqWBYpIJhkQqGRSoYFqlgWKSCYZEKhkUqGBapYFikgmGRCoZFKhgWqWBYpIJhkQqGRSoYFqlgWKSCYZEKhkUqGBapYFikgmGRCoZFKhgWqWBYpIJhkQqGRSoYFqlgWKSCYZEKhkUqGBapYFikgmGRCoZFKhgWqWBYpIJhkQqGRSoYFqlgWKSCYZEKhkUqGBapYFikgmGRCoZFKhgWqWBYpIJhkQqGRSoYFqlgWKSCYZEKhkUqGBapYFikgmGRCoZFKhgWqWBYpIJhkQqGRSoYFqlgWKTCm+0VyJJoFJs34+hRXL7cg2eNHo1167B4ceb4xYvo6MDw4Tc67gbiQmvXCtDLW0mJtLfb5tbQINOmSWmpbN1qG9+50xzftm0gX9wg4b6wvvqq91UBMmmSJJPW3C5ckClTrEe3bDHHIxHxeMzBiRPl/PmsvNYsct+m8O23rfv5+Rg7tgfPveUWvPFG5qZt2DDr/ooVKCjAyJFYsgRXr5qDXi/y8nq5tkNWnohkex0G1oQJ+PNPAPB4sH07ysp68NyRI3HTTZmDn36KhQtt+2p5eUj/q3q92LYNixb1ZZWHIveFVVSEtjYAKCzEsWOYPLkf5rlrFxYvdjgO8HpRU+Ows+8C7jvd0HmrdOlS/8zz8cdRV5e5iSwsxPbt7qwKbgxLyeXLyHjv7+hAe3uW1ib7GFZ/qK3FE0/gwgXb4KVLWLoU776bpXXKMobVZ3V1tmNAjwfeTsfaK1agpiYr65VdDKtvLl7EqlW2Mws7dqC+3nbw+MorSCazsnZZxLD6LP3+5PGgpgYLF2L+fNTWWue3PB4XnsdiWH1TUIB33oHfj9tvtx0DGseJxng47MI/F7rvPNb48Th3DgAKCxGLYerUfpjnv/9CxOHcaVfjLuC+P+lo6PxXnRsZdwFuCkkFwyIVDEtZKuXCcw1gWM7OncMXX2D3brS29mk+n3yCQAB33ona2v5ZsSEky9eDDbyiIvP6u8JCaWlxmKC2Vm691Zxm9Gh59VW5cuU682xrk4YG+egj+flnazCVktJS61o/l2FYduvXO1w1umCBtLV1OcPdu62LSIcNk6VL5exZEZGzZ2XMGHN87Fi9FzQ4MaxOKiu7vCJ59mznt7fOlyCnb36/HD4sV6/K+PHmSFHRwLy4wYNhiYjIlSvyzDO2OEaNsjaIxm3qVPnxR9usHKsybiNGyLp1UlLCsFyjc1jHj4uIJJOycKEti3Hj5Ouv5dQpCQZt40VF8tln5nwyqiookEAgM6+8PIblGumwCgrk9Gn56y8pK7PVMHmyHDpkTtzeLk8+aXvU65WaGtmxw1aV1yvbt0syKStXOr+BMazclw5rzBhpapIHHrAVcNtt8uuvmU9Ztaq7D4R5vRKJWBNHItYiGJaLdH7HKi62/fpnzZLff3d+Vjgsw4Y5VFVYaKvKEIvJvfcyLJe59u3EuJWVmacJuhKNyqhRmc/auNF54lRKnn9e8vMZlms4hhUK2T7f3JXvvss8VLzrLjlyxHniVErGjXNtWPyTDvD009i584auxbv/fuzfj1mzrJGffkJZGT7/3GHiixddeOFomuvDeuklvP8+PJ4bnd7nw759WLDAGjl3DgsWIBLJnNJtV1DauTis/HysW4c33+zxE8eORV0dVq60Rq5cQWWlO69i6IqLw7r5Zixb1svnejzYvBkbNlgbO1d+YqIbLg4LyPyIaU+9+CJ27XLzJya64b5r3jvv+hQU9HVuoRBCIYg4vF0VFFiD7tvfcl9Y6ZguXcK+fXjkkb5uwowd//RnVtO+/9767gb3farCfWHdcw+iUQDo6MCSJSgq0lpQW5v1RjVtmtZSBiv3fa7wm2/w0EMDvdC6OoRCA73QrHLfzvuDD+Kttwb0CO7ll91WFdz4jmVobMSmTTh4EB0diku5+26sWGE7m+oabg2LlLlvU0gDgmGRCoZFKhgWqWBYpIJhkQqGRSoYFqlgWKQip8NqbsaZM72cPpVCczNSqf5fK415Dj45HVYggL17ezl9PI5AAL/8gvXrHb5+rbYWzc0A0NyMvDzz/g06cAB5eX39SrdBz2XXY2UUUFKC4mIsX26NVFejqQkApkwxR374AVu3orHRGjl0COXliEbh93e3rNpalJfbRiIRLF6Mw4fh81lzy1G5GNaZM0gkzPsnTpgxjRiBKVMQCNimNH7T3fvwQ0yfjjlzcPy4ObJ/PwCMHInmZnMw/ZDBWFZ6EQYjslQKW7di0iTbl0fOnHmdRoeiLH9gVkMk4vBZ54oKERFAqqokFpNYTACJRCQeN380RtKPRqPWj9GoRKMSi4mIJJPi83X3HSHpZRmrYcw2vbjGRofpr/32h6EvF8NKJKwyjCBCISus9G/RuF9RcZ1KOt/k/1wiEVt/xlLSt3jcmrJzWOGwBIPi85krcPCgAObEOScXN4XFxSguNu9Pmwa/H+PHdznx6tV44QUAePZZnDyJhgbroUAAVVWYPx/Hj6O9HTNnAkB1NYLBzA2osZTr2rgRLS0AkEph+HAcOwYgV3e2cjGsHmlpwccfA0BTE3w+bN5sji9aBJ8Pra3w+7FnD9asgQjOnMGGDTh/3joIcNzHAlBa6ry4YBBNTYjH4fejqSmHL1nO3bBOnwaAESOuM9mECQgGUV4Onw/LluHvv80d/AkTzP/g3tjdrqwEgL17Mw/0DNdefByLOUy2di0eewzTp2PPHpSUoLoa4XBPXtJQkrthnToF/L+hOXoUd9zhPJnfb77fvPceTp1Ca6u1mZsxA889h3nz0NJi9jR3bmYxr72G+npUVJjb07TSUhw54rC44cOxbBnWrDF/nDevNy9tSMj2Tp6aigoJBs37xo6zOO28G1M6HqkZO+Y+n7njfy1jl9y4XbsPbuy8G3voyaS1uETCdvCYo3L0zHsqhepqPPywNTJ6dJcTr16NWAyxGKqqEAqZ9+fOxYwZANDSgtdfx/Ll2LLF9qzWVjz6KHw+xOPw+TBnTuafj4y3tw8+AIBNm8x5AiguNnetgsF+ea2DU45uCg8cAIDZswFk/r7Tp0wNra349lsA+OcffPklTp40t26RCE6cAIBQyDzG/OMP61mHDuGpp9DSYp6Rb2hAIID77kNDg3V4WFyM335DdTUqKsxt3+rVSKWwaRPq6+HzobwcEyeae3K5J9tvmTqM00XGyU9jk9TYKCIO2zvj0WDQ3HQGg+ZgKGRuB43TVOkNWSxmbjp9Pjl40FpiLGZOXFlpbhaNc6HBoCSTUlVlroMx26oqSSTM6Y0Vyzm5GJbxG01HY0SQSIg4nXnvzDhfmp5DKCSJhPV/CCQSEg6b9ysrzRl2lg7I2H9Kz8EQDluZGuJxszOeeR8a4nGprJRkUpJJs6H0b9c4Y37tfUNjo7mPbzxqfN1tIiFVVeb7SjxudtkNY/pkUsJh2xfmJpMSCmU+12gxF0++85PQpCJHjwop2xgWqWBYpIJhkQqGRSoYFqlgWKSCYZEKhkUqGBapYFikgmGRCoZFKhgWqWBYpIJhkQqGRSoYFqlgWKSCYZEKhkUqGBapYFikgmGRCoZFKhgWqWBYpIJhkQqGRSoYFqlgWKSCYZEKhkUqGBapYFikgmGRCoZFKhgWqWBYpIJhkQqGRSoYFqlgWKSCYZEKhkUqGBapYFikgmGRCoZFKhgWqWBYpIJhkQqGRSr+A9RSZD1Psso/AAAAAElFTkSuQmCC",PFi={key:0,class:"ac jb titHeader",style:{background:"#f9faff",height:"60px",display:"flex",width:"100%"}},WFi={style:{"font-weight":"bold","font-size":"18px","margin-left":"24px"}},HFi={style:{"margin-left":"24px"}},zFi={style:{"font-size":"14px"}},BFi={key:0,class:"modelBody",style:{"max-height":"650px",overflow:"auto"}},VFi={class:"footerBtns"},FFi=_t({__name:"addElementDialog",props:xs({type:{},data:{},scriptId:{}},{modelValue:{type:Boolean,default:!1},modelModifiers:{}}),emits:xs(["update"],["update:modelValue"]),setup(e,{emit:t}){const{projectId:n}=_u($u()),o=ec(e,"modelValue"),r=e,l=be("新增");gt(o,k=>{var m;k&&(s.value=r.data,((m=s.value)==null?void 0:m.id)==-1?l.value="新增":l.value="编辑")});const a=be(null),s=be(),c={role:"角色",scene:"场景",props:"道具",storyboard:"分镜"};function u(){o.value=!1}const d=t;function h(){var k;(k=a.value)==null||k.validate().then(async()=>{try{if(!s.value)return;if(s.value.id){const m=await cr.post("/assets/updateAssets",{id:s.value.id,name:s.value.name,intro:s.value.intro??"",type:c[r.type],remark:s.value.remark==null?"":s.value.remark,prompt:s.value.prompt??"",videoPrompt:s.value.videoPrompt??"",duration:Number(s.value.duration)})}else{const m=await cr.post("/assets/addAssets",{projectId:n.value,name:s.value.name,intro:s.value.intro,type:c[r.type],remark:s.value.remark==null?"":s.value.remark,prompt:"",videoPrompt:s.value.videoPrompt??"",scriptId:r.type!="storyboard"?void 0:Number(r.scriptId),duration:s.value.duration})}d("update"),o.value=!1,$i.success("保存成功")}catch(m){m instanceof Error&&$i.error(m.message)}})}return(k,m)=>{const b=wi("i-close"),g=hc,v=Ey,w=e1,L=KD,x=Tf,S=Xa,E=as;return we(),qt(E,{open:o.value,"onUpdate:open":m[5]||(m[5]=M=>o.value=M),wrapClassName:"noHeaderMargin",footer:!1,width:640,dialogClass:"customModal",closable:!1,maskClosable:!1},{title:nt(()=>[I(s)?(we(),Pe("div",PFi,[he("div",null,[he("span",WFi,on(I(s).id?"编辑":"新建")+on(c[r.type]),1),he("div",HFi,[he("span",zFi,on(I(s).id?"编辑":"新建")+"元素信息和素材",1)])]),he("div",{class:"closePoint",onClick:u},[i(b,{theme:"outline",size:"18",fill:"#9913FA"})])])):Tt("",!0)]),default:nt(()=>[I(s)?(we(),Pe("div",BFi,[i(x,{ref_key:"formRef",ref:a,model:I(s),layout:"vertical",style:{"margin-top":"14px"}},{default:nt(()=>[i(v,{name:"name",label:"名称",required:""},{default:nt(()=>[i(g,{value:I(s).name,"onUpdate:value":m[0]||(m[0]=M=>I(s).name=M),placeholder:"例如:古代宫殿大殿"},null,8,["value"])]),_:1}),i(v,{name:"description",label:"详情"},{default:nt(()=>[i(w,{value:I(s).intro,"onUpdate:value":m[1]||(m[1]=M=>I(s).intro=M),placeholder:"内容详情",autoSize:{minRows:3,maxRows:15}},null,8,["value"])]),_:1}),r.type=="storyboard"?(we(),qt(v,{key:0,name:"videoPrompt",label:"视频提示词"},{default:nt(()=>[i(w,{value:I(s).videoPrompt,"onUpdate:value":m[2]||(m[2]=M=>I(s).videoPrompt=M),placeholder:"内容详情",autoSize:{minRows:3,maxRows:15}},null,8,["value"])]),_:1})):Tt("",!0),i(v,{name:"remark",label:"备注"},{default:nt(()=>[i(g,{value:I(s).remark,"onUpdate:value":m[3]||(m[3]=M=>I(s).remark=M),placeholder:"添加备注信息..."},null,8,["value"])]),_:1}),r.type=="storyboard"?(we(),qt(v,{key:1,name:"duration",label:"时长(单位:秒)"},{default:nt(()=>[i(L,{value:I(s).duration,"onUpdate:value":m[4]||(m[4]=M=>I(s).duration=M),placeholder:"时长"},null,8,["value"])]),_:1})):Tt("",!0)]),_:1},8,["model"]),he("div",VFi,[i(S,{onClick:u,shape:"round"},{default:nt(()=>[...m[6]||(m[6]=[mi("取消",-1)])]),_:1}),i(S,{type:"primary",shape:"round",onClick:h,style:{"margin-left":"15px"}},{default:nt(()=>[...m[7]||(m[7]=[mi("保存",-1)])]),_:1})])])):Tt("",!0)]),_:1},8,["open"])}}}),FGe=za(FFi,[["__scopeId","data-v-cc0db377"]]),UFi={class:"modal-header"},GFi={class:"header-left"},YFi={class:"header-icon"},ZFi={class:"modal-content"},XFi={class:"toolbar"},qFi={class:"toolbar-left"},KFi={class:"select-info"},JFi={class:"toolbar-right"},QFi={class:"table-container"},$Fi={class:"table-header"},eUi={key:0,class:"th th-video"},tUi={key:1,class:"th th-duration"},nUi={class:"table-body"},iUi={class:"td td-check"},oUi={class:"td td-name"},rUi={class:"td td-img"},lUi={key:1,class:"img-empty"},aUi={class:"td td-prompt"},sUi={key:0,class:"td td-video"},cUi={key:1,class:"td td-duration"},uUi={key:0,class:"empty-state"},dUi={class:"modal-footer"},hUi=_t({__name:"batchGenereate",props:xs({data:{},type:{},scriptId:{}},{modelValue:{type:Boolean},modelModifiers:{}}),emits:xs(["save"],["update:modelValue"]),setup(e,{emit:t}){const{projectId:n}=_u($u()),o=be(!1),r=be(!1),l=be({}),a=be({}),s=e,c=t,u=ec(e,"modelValue"),d=be(),h=be([]),k=be(!1),m={角色:"role",场景:"scene",分镜:"storyboard",道具:"props"},b=G(()=>h.value.filter(Boolean).length),g=G(()=>h.value.length>0&&h.value.every(Boolean)),v=G(()=>{const O=b.value;return O>0&&O{O?(d.value=JSON.parse(JSON.stringify(s.data)),h.value=Array(s.data.length).fill(!1),k.value=!1,l.value={},a.value={},o.value=!1,r.value=!1):d.value=[]},{immediate:!0});function w(O){const P=O.target.checked;h.value=h.value.map(()=>P)}function L(){var O;return((O=d.value)==null?void 0:O.filter((P,B)=>h.value[B]))||[]}function x(){const O=L();if(O.length===0){$i.error("请选择要保存的项目");return}c("save",O),u.value=!1}async function S(){(r.value||o.value)&&await new Promise(P=>{as.confirm({title:"确认取消",content:"正在生成中,取消后当前任务将终止,是否继续?",okText:"确认取消",cancelText:"继续等待",okButtonProps:{danger:!0},onOk:()=>{k.value=!0,r.value=!1,o.value=!1,P()}})}),u.value=!1}async function E(){const O=L();if(O.length===0){$i.warning("请至少选择一个资产");return}r.value=!0;const P=5;try{for(let B=0;BM(W)))}$i.success("提示词生成完成")}catch(B){B instanceof Error&&B.message!=="已取消生成"&&$i.error(B.message)}finally{r.value=!1}}async function M(O){l.value[O.id]=!0;try{const P=await cr.post("/assets/polishPrompt",{projectId:n.value,assetsId:O.id,type:m[O.type]??"props",name:O.name,describe:O.intro??""}),B=d.value.findIndex(p=>p.id===P.data.assetsId);B!==-1&&!k.value&&(d.value[B].prompt=P.data.prompt)}catch(P){$i.error(`"${O.name}" ${(P==null?void 0:P.message)??"提示词生成失败"}`)}finally{l.value[O.id]=!1}}async function T(){const O=L();if(O.length===0){$i.warning("请至少选择一个资产");return}o.value=!0;const P=5;try{for(let B=0;Bj({id:W.id,name:W.name,prompt:W.prompt,type:m[W.type]??"props"})))}$i.success("图片生成完成")}catch(B){B instanceof Error&&$i.error(B.message)}finally{o.value=!1}}async function j(O){if(d.value){a.value[O.id]=!0;try{const P=await cr.post("/assets/generateAssets",{type:O.type,projectId:n.value,name:O.name,base64:void 0,prompt:O.prompt??"",id:O.id}),B=d.value.findIndex(p=>p.id===P.data.assetsId);B!==-1&&(d.value[B].filePath=P.data.path)}catch{$i.error(`"${O.name}" 图片生成失败`)}finally{a.value[O.id]=!1}}}return(O,P)=>{const B=wi("i-magic-wand"),p=Rf,W=wi("i-close"),R=$x,U=Xa,N=I1,H=wi("i-pic"),z=nk,X=e1,K=KD,Z=wi("i-inbox"),te=as;return we(),qt(te,{open:u.value,"onUpdate:open":P[0]||(P[0]=$=>u.value=$),maskClosable:!1,wrapClassName:"batch-generate-modal",closable:!1,width:"80vw",centered:""},{title:nt(()=>[he("div",UFi,[he("div",GFi,[he("div",YFi,[i(B,{theme:"filled",size:"20"})]),P[1]||(P[1]=he("span",{class:"header-title"},"批量生成",-1)),i(p,{color:"purple"},{default:nt(()=>{var $;return[mi(on((($=d.value)==null?void 0:$.length)||0)+" 项",1)]}),_:1})]),he("button",{class:"close-btn",onClick:S},[i(W,{theme:"outline",size:"18"})])])]),footer:nt(()=>[he("div",dUi,[i(U,{onClick:S},{default:nt(()=>[...P[13]||(P[13]=[mi("取消",-1)])]),_:1}),i(U,{type:"primary",onClick:x,disabled:b.value===0},{default:nt(()=>[mi("保存选中项 ("+on(b.value)+")",1)]),_:1},8,["disabled"])])]),default:nt(()=>{var $,oe;return[he("div",ZFi,[he("div",XFi,[he("div",qFi,[i(R,{checked:g.value,indeterminate:v.value,onChange:w},{default:nt(()=>[...P[2]||(P[2]=[mi("全选",-1)])]),_:1},8,["checked","indeterminate"]),he("span",KFi,[P[3]||(P[3]=mi(" 已选 ",-1)),he("strong",null,on(b.value),1),mi(" / "+on((($=d.value)==null?void 0:$.length)||0)+" 项 ",1)])]),he("div",JFi,[i(U,{onClick:E,loading:r.value,disabled:b.value===0},{default:nt(()=>[...P[4]||(P[4]=[mi("生成提示词",-1)])]),_:1},8,["loading","disabled"]),i(U,{type:"primary",onClick:T,loading:o.value,disabled:b.value===0},{default:nt(()=>[...P[5]||(P[5]=[mi("生成图片",-1)])]),_:1},8,["loading","disabled"])])]),he("div",QFi,[he("div",$Fi,[P[6]||(P[6]=he("div",{class:"th th-check"},null,-1)),P[7]||(P[7]=he("div",{class:"th th-name"},"名称",-1)),P[8]||(P[8]=he("div",{class:"th th-img"},"预览图",-1)),P[9]||(P[9]=he("div",{class:"th th-prompt"},"生图提示词",-1)),s.type==="storyboard"?(we(),Pe("div",eUi,"视频提示词")):Tt("",!0),s.type==="storyboard"?(we(),Pe("div",tUi,"时长")):Tt("",!0)]),he("div",nUi,[(we(!0),Pe(Un,null,_o(d.value,(ce,ve)=>(we(),Pe("div",{key:ce.id,class:Qe(["table-row",{selected:h.value[ve]}])},[he("div",iUi,[i(R,{checked:h.value[ve],"onUpdate:checked":ue=>h.value[ve]=ue},null,8,["checked","onUpdate:checked"])]),he("div",oUi,on(ce.name),1),he("div",rUi,[i(z,{spinning:a.value[ce.id]??!1,tip:"生成中..."},{default:nt(()=>[he("div",{class:Qe(["img-wrapper",{"has-image":ce==null?void 0:ce.filePath}])},[ce!=null&&ce.filePath?(we(),qt(N,{key:0,src:ce.filePath,fallback:I(Vm)},null,8,["src","fallback"])):(we(),Pe("div",lUi,[i(H,{theme:"outline",size:"24"}),P[10]||(P[10]=he("span",null,"待生成",-1))]))],2)]),_:2},1032,["spinning"])]),he("div",aUi,[i(z,{spinning:l.value[ce.id]??!1,tip:"生成中..."},{default:nt(()=>[i(X,{value:ce.prompt,"onUpdate:value":ue=>ce.prompt=ue,"auto-size":{minRows:2,maxRows:6},class:"input-field",placeholder:"输入生图提示词..."},null,8,["value","onUpdate:value"])]),_:2},1032,["spinning"])]),s.type==="storyboard"?(we(),Pe("div",sUi,[i(X,{value:ce.videoPrompt,"onUpdate:value":ue=>ce.videoPrompt=ue,"auto-size":{minRows:2,maxRows:6},class:"input-field",placeholder:"输入视频提示词..."},null,8,["value","onUpdate:value"])])):Tt("",!0),s.type==="storyboard"?(we(),Pe("div",cUi,[i(K,{value:ce.duration,"onUpdate:value":ue=>ce.duration=ue,min:1,step:1,class:"duration-input",placeholder:"秒"},{addonAfter:nt(()=>[...P[11]||(P[11]=[mi("秒",-1)])]),_:1},8,["value","onUpdate:value"])])):Tt("",!0)],2))),128)),(oe=d.value)!=null&&oe.length?Tt("",!0):(we(),Pe("div",uUi,[i(Z,{theme:"outline",size:"48"}),P[12]||(P[12]=he("p",null,"暂无数据",-1))]))])])])]}),_:1},8,["open"])}}}),tD=za(hUi,[["__scopeId","data-v-f3de9392"]]);function fUi(e,t){return hE()?(fE(e,t),!0):!1}function uSe(){const e=new Set,t=l=>{e.delete(l)};return{on:l=>{e.add(l);const a=()=>t(l);return fUi(a),{off:a}},off:t,trigger:(...l)=>Promise.all(Array.from(e).map(a=>a(...l))),clear:()=>{e.clear()}}}const kUi=typeof window<"u"&&typeof document<"u";typeof WorkerGlobalScope<"u"&&globalThis instanceof WorkerGlobalScope;const gUi=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),mUi=kUi?window.document:void 0;function vUi(e){var t;const n=Qb(e);return(t=n==null?void 0:n.$el)!==null&&t!==void 0?t:n}const bUi={multiple:!0,accept:"*",reset:!1,directory:!1};function yUi(e){if(!e)return null;if(e instanceof FileList)return e;const t=new DataTransfer;for(const n of e)t.items.add(n);return t.files}function wUi(e={}){const{document:t=mUi}=e,n=be(yUi(e.initialFiles)),{on:o,trigger:r}=uSe(),{on:l,trigger:a}=uSe(),s=G(()=>{var h;const k=(h=vUi(e.input))!==null&&h!==void 0?h:t?t.createElement("input"):void 0;return k&&(k.type="file",k.onchange=m=>{n.value=m.target.files,r(n.value)},k.oncancel=()=>{a()}),k}),c=()=>{n.value=null,s.value&&s.value.value&&(s.value.value="",r(null))},u=h=>{const k=s.value;k&&(k.multiple=Qb(h.multiple),k.accept=Qb(h.accept),k.webkitdirectory=Qb(h.directory),gUi(h,"capture")&&(k.capture=Qb(h.capture)))},d=h=>{const k=s.value;if(!k)return;const m={...bUi,...e,...h};u(m),Qb(m.reset)&&c(),k.click()};return xl(()=>{u(e)}),{files:Ym(n),open:d,reset:c,onCancel:l,onChange:o}}const CUi={class:"titHeader"},LUi={class:"titleWrapper"},xUi={class:"titleIcon"},SUi={key:0,class:"modelBody"},EUi={class:"modeSwitch"},MUi={class:"contentWrapper"},AUi={class:"leftBody"},TUi={class:"sectionCard"},_Ui={class:"uploadSection"},jUi={class:"sectionHeader"},OUi={class:"namePre"},DUi={key:0,class:"optionalTag"},pUi={key:0,class:"imageDiv pr"},NUi={class:"imageOverlay"},RUi={key:1,class:"uploadPlaceholder"},IUi={class:"uploadIconWrapper"},PUi={class:"promptSection"},WUi={class:"sectionHeader"},HUi={key:0,class:"rightBody"},zUi={class:"sectionCard resultCard"},BUi={class:"sectionHeader"},VUi={class:"resultContent"},FUi={key:1,class:"resultGrid"},UUi=["onClick"],GUi={class:"resultOverlay"},YUi={key:0,class:"selectedBadge"},ZUi={key:1,class:"generatingPlaceholder"},XUi={key:2,class:"errorPlaceholder"},qUi={class:"footerBtns"},KUi=_t({__name:"generateImage",props:xs({data:{}},{modelValue:{type:Boolean,default:!1},modelModifiers:{}}),emits:xs(["update"],["update:modelValue"]),setup(e,{emit:t}){const{projectId:n}=_u($u()),o={角色:"role",场景:"scene",分镜:"storyboard",道具:"props"},r=be(!1),l=e,a=t,s=ec(e,"modelValue"),c=be(!1),u=be(!1),d=O0.PRESENTED_IMAGE_SIMPLE,h=be(2),k=be(),m=be([]),b=be(-1),g=be(!1),v=be(!1),w=be(""),L=G(()=>{var K,Z;return h.value===1?(K=k.value)==null?void 0:K.uploadImage:(Z=k.value)==null?void 0:Z.sampleImage}),x=G(()=>{var K;return o[((K=k.value)==null?void 0:K.type)??"道具"]??"props"}),{open:S,onChange:E,onCancel:M}=wUi({multiple:!1,reset:!0,accept:".png,.jpg,.jpeg"});gt(s,K=>{K&&l.data&&(k.value={...l.data,sampleImage:"",uploadImage:""},P(l.data.id),c.value=!1,u.value=!1),K||O&&clearTimeout(O)});function T(K,Z){if(K.state=="生成中"){$i.warn("生成中");return}b.value=Z}function j(K){v.value=K}let O=-1;async function P(K){var $;const Z=K,{data:te}=await cr.post("/assets/getImage",{assetsId:K});te.tempAssets.filter(oe=>oe.state=="生成中").length>0&&(O=setTimeout(()=>{s.value&&P(Z)},2e3)),Z==(($=k.value)==null?void 0:$.id)&&(te.filePath.length>0?(m.value=[{filePath:te.filePath,state:"生成成功"},...te.tempAssets],b.value=m.value.findIndex(oe=>{var ce;return oe.filePath===((ce=k.value)==null?void 0:ce.filePath)})):(m.value=[...te.tempAssets],b.value=m.value.findIndex(oe=>{var ce,ve;return oe.filePath===((ce=k.value)==null?void 0:ce.filePath)&&((ve=k.value)==null?void 0:ve.filePath.length)>0})))}async function B(){if(!k.value)return;const K=await new Promise(te=>{S(),E($=>te($)),M(()=>te(null))});if(!(K!=null&&K.length))return;const Z=K[0];h.value===1?k.value.uploadImage=URL.createObjectURL(Z):k.value.sampleImage=await z(Z)}function p(){k.value&&(h.value===1?k.value.uploadImage="":k.value.sampleImage="")}function W(K){w.value=K,v.value=!0}function R(){s.value=!1}async function U(){if(!k.value)return;const{id:K,name:Z,intro:te,type:$}=k.value;c.value=!0;try{const{data:oe}=await cr.post("/assets/polishPrompt",{projectId:n.value,assetsId:K,type:o[$??"道具"]??"props",name:Z,describe:te});$i.success("提示词生成成功"),oe.assetsId===k.value.id&&(k.value.prompt=oe.prompt)}catch(oe){$i.error(oe.message??"提示词生成失败")}finally{c.value=!1}}async function N(){var oe;if(!k.value)return;const{id:K,name:Z,sampleImage:te,prompt:$}=k.value;console.log("%c Line:327 🍖 formData.value","background:#33a5ff",k.value),r.value=!0,u.value=!0;try{const ce=cr.post("/assets/generateAssets",{type:x.value,projectId:n.value,name:Z,base64:te||void 0,prompt:$,id:K});setTimeout(()=>{var ue;P(((ue=l.data)==null?void 0:ue.id)??-1),r.value=!1},2e3);const{data:ve}=await ce;await P(((oe=l.data)==null?void 0:oe.id)??-1),$i.success("资产生成成功"),ve.assetsId===k.value.id&&m.value.push({filePath:ve.path,state:"生成成功"})}catch{$i.error("资产生成失败")}finally{u.value=!1}}async function H(){var Z;if(!k.value)return;const K={projectId:n.value,id:k.value.id};if(h.value===1){if(!k.value.uploadImage){$i.error("请上传图片");return}K.base64=await X(k.value.uploadImage)}else{if(b.value===-1){$i.error("请选择生成结果");return}K.prompt=k.value.prompt||"",K.filePath=((Z=m.value[b.value])==null?void 0:Z.filePath)||""}g.value=!0;try{await cr.post("/assets/saveAssets",K),$i.success("保存成功"),a("update"),R()}catch{$i.error("保存失败")}finally{g.value=!1}}function z(K){return new Promise((Z,te)=>{const $=new FileReader;$.onload=()=>Z($.result),$.onerror=te,$.readAsDataURL(K)})}async function X(K){const te=await(await fetch(K)).blob();return z(te)}return(K,Z)=>{const te=wi("i-pic"),$=wi("i-close"),oe=wi("i-upload-one"),ce=qNe,ve=wi("i-robot"),ue=AU,Ce=I1,ke=wi("i-delete"),xe=wi("i-upload-picture"),le=wi("i-magic"),ye=Xa,ae=V0,ee=e1,fe=nk,ge=wi("i-lightning"),Ee=Rf,Le=O0,pe=wi("i-preview-open"),We=wi("i-check"),Ie=wi("i-save"),Be=as;return we(),Pe(Un,null,[i(Be,{open:s.value,"onUpdate:open":Z[2]||(Z[2]=ze=>s.value=ze),wrapClassName:"noHeaderMargin",destroyOnClose:"",footer:!1,width:900,dialogClass:"customModal",closable:!1,maskClosable:!1},{title:nt(()=>[he("div",CUi,[he("div",LUi,[he("div",xUi,[i(te,{class:"icon",theme:"outline",size:"20",fill:"#9913FA"})]),Z[3]||(Z[3]=he("span",{class:"title"},"图片生成",-1))]),i($,{class:"closeBtn",theme:"outline",size:"20",fill:"#666",onClick:R})])]),default:nt(()=>[i(fe,{spinning:r.value,tip:"发送数据中..."},{default:nt(()=>[k.value?(we(),Pe("div",SUi,[he("div",EUi,[i(ue,{value:h.value,"onUpdate:value":Z[0]||(Z[0]=ze=>h.value=ze),"button-style":"solid"},{default:nt(()=>[i(ce,{value:1},{default:nt(()=>[i(oe,{theme:"outline",size:"14"}),Z[4]||(Z[4]=he("span",null,"本地上传",-1))]),_:1}),i(ce,{value:2},{default:nt(()=>[i(ve,{theme:"outline",size:"14"}),Z[5]||(Z[5]=he("span",null,"AI 生成",-1))]),_:1})]),_:1},8,["value"])]),he("div",MUi,[he("div",AUi,[he("div",TUi,[he("div",_Ui,[he("div",jUi,[he("span",OUi,on(h.value===1?"上传图片":"参考图片"),1),h.value===2?(we(),Pe("span",DUi,"可选")):Tt("",!0)]),he("div",{class:"picturePreview",onClick:B},[L.value?(we(),Pe("div",pUi,[i(Ce,{src:L.value,alt:"元素图片",class:"elementImg",fallback:I(Vm)},null,8,["src","fallback"]),he("div",NUi,[i(ke,{class:"deleteBtn",theme:"outline",size:"18",fill:"#fff",onClick:yo(p,["stop"])})])])):(we(),Pe("div",RUi,[he("div",IUi,[i(xe,{theme:"outline",size:"32",fill:"#9913FA"})]),Z[6]||(Z[6]=he("span",{class:"uploadText"},"点击上传",-1))]))])]),h.value===2?(we(),Pe(Un,{key:0},[he("div",PUi,[he("div",WUi,[Z[8]||(Z[8]=he("span",{class:"namePre"},"提示词",-1)),i(ae,{title:"AI 智能生成提示词"},{default:nt(()=>[i(ye,{type:"link",size:"small",class:"magicBtn",onClick:yo(U,["stop"]),loading:c.value},{icon:nt(()=>[i(le,{theme:"outline",size:"14"})]),default:nt(()=>[Z[7]||(Z[7]=mi(" 智能生成 ",-1))]),_:1},8,["loading"])]),_:1})]),i(fe,{spinning:c.value,tip:"提示词生成中..."},{default:nt(()=>[i(ee,{value:k.value.prompt,"onUpdate:value":Z[1]||(Z[1]=ze=>k.value.prompt=ze),autoSize:{minRows:4,maxRows:10},placeholder:"请输入或使用 AI 生成提示词,描述您想要生成的图片内容...",class:"promptTextarea"},null,8,["value"])]),_:1},8,["spinning"])]),i(ye,{type:"primary",block:"",size:"large",class:"generateBtn",onClick:N,loading:u.value},{icon:nt(()=>[i(ge,{theme:"outline",size:"16"})]),default:nt(()=>[Z[9]||(Z[9]=mi(" 开始生成 ",-1))]),_:1},8,["loading"])],64)):Tt("",!0)])]),h.value===2?(we(),Pe("div",HUi,[he("div",zUi,[he("div",BUi,[Z[10]||(Z[10]=he("span",{class:"namePre"},"生成结果",-1)),m.value.length?(we(),qt(Ee,{key:0,color:"purple"},{default:nt(()=>[mi(on(m.value.length)+" 张",1)]),_:1})):Tt("",!0)]),he("div",VUi,[m.value.length?(we(),Pe("div",FUi,[(we(!0),Pe(Un,null,_o(m.value,(ze,Ze)=>(we(),Pe("div",{key:Ze,class:Qe(["resultItem",{selected:b.value===Ze,generating:ze.state==="生成中"}]),onClick:Ke=>T(ze,Ze)},[(ze.state==="生成成功"||!ze.state)&&ze.filePath?(we(),Pe(Un,{key:0},[i(Ce,{preview:!1,src:ze.filePath,fallback:I(Vm),class:"resultImg"},null,8,["src","fallback"]),he("div",GUi,[i(pe,{class:"previewBtn",theme:"outline",size:"20",fill:"#fff",onClick:yo(Ke=>W(ze.filePath),["stop"])},null,8,["onClick"])]),b.value===Ze?(we(),Pe("div",YUi,[i(We,{theme:"outline",size:"14",fill:"#fff"})])):Tt("",!0)],64)):ze.state==="生成中"?(we(),Pe("div",ZUi,[i(fe),Z[11]||(Z[11]=he("span",null,"生成中...",-1))])):(we(),Pe("div",XUi,"未知状态"))],10,UUi))),128))])):(we(),qt(Le,{key:0,image:I(d),description:"暂无生成结果"},null,8,["image"]))])])])):Tt("",!0)]),he("div",qUi,[i(ye,{size:"large",onClick:R},{default:nt(()=>[...Z[12]||(Z[12]=[mi("取消",-1)])]),_:1}),i(ye,{type:"primary",size:"large",loading:g.value,onClick:H},{icon:nt(()=>[i(Ie,{theme:"outline",size:"16"})]),default:nt(()=>[Z[13]||(Z[13]=mi(" 保存 ",-1))]),_:1},8,["loading"])])])):Tt("",!0)]),_:1},8,["spinning"])]),_:1},8,["open"]),i(Ce,{width:200,style:{display:"none"},preview:{visible:v.value,onVisibleChange:j},src:w.value},null,8,["preview","src"])],64)}}}),Nfe=za(KUi,[["__scopeId","data-v-a2adfecc"]]),JUi={class:"mainElement"},QUi={class:"ac jb"},$Ui={key:0,class:"buttonGroup f"},eGi={class:"actionBar"},tGi={class:"tableBody"},nGi={key:0,class:"scriptBody"},iGi={class:"gridScript"},oGi={key:1,class:"empty"},rGi={class:"emptyIcon"},lGi={key:1,class:"noImage"},aGi={class:"actionBtns"},sGi=_t({__name:"mainElement",props:xs({way:{},radio:{},batch:{type:Boolean}},{modelValue:{},modelModifiers:{}}),emits:xs(["checkChange","checkAll"],["update:modelValue"]),setup(e,{expose:t,emit:n}){const{projectId:o,currentScriptId:r}=_u($u()),l=e,a=n,s=ec(e,"modelValue"),c={角色:"role",场景:"scene",分镜:"storyboard",道具:"props"},u=[{label:"角色",value:"role"},{label:"场景",value:"scene"},{label:"道具",value:"props"},{label:"分镜",value:"storyboard"}],d=be(),h=be("role"),k=be(),m=be([]),b=be([]),g=be(!1),v=be(!1),w=be(!1),L=be(!1),x=be(!1),S=u,E=G(()=>h.value==="storyboard"),M=G(()=>{var ke;return(ke=S.find(xe=>xe.value===h.value))==null?void 0:ke.label}),T=G(()=>!m.value.length&&E.value),j=ke=>({role:"角色",scene:"场景",props:"道具",storyboard:"分镜"})[ke]??"角色",O=async ke=>{const{data:xe}=await cr.post("/assets/getAssets",{projectId:o.value,type:j(ke)});b.value=xe},P=async()=>{const{data:ke}=await cr.post("/assets/getStoryboard",{projectId:o.value});return ke},B=async ke=>{const{data:xe}=await cr.post("/storyboard/getStoryboard",{projectId:o.value,scriptId:ke});b.value=xe},p=async ke=>{if(b.value=[],h.value=ke,ke==="storyboard"){if(m.value=await P(),m.value.length){const xe=m.value.some(le=>le.id==r.value);(!r.value||!xe)&&(r.value=m.value[0].id),await B(Number(r.value))}}else await O(ke)},W=()=>p(h.value),R=async ke=>{r.value=ke.id,await B(ke.id)},U=async(ke,xe,le)=>{for(let ye=0;ye{if(!ke.length)return $i.warning("请至少选择一个资产");await U(ke,5,async xe=>{await cr.post("/assets/updateAssets",{id:xe.id,name:xe.name,intro:xe.intro??"",type:xe.type,remark:xe.remark??"",prompt:xe.prompt,duration:Number(xe.duration)}),await cr.post("/assets/saveAssets",{id:xe.id,base64:"",filePath:xe.filePath,prompt:xe.prompt,projectId:o.value})}),$i.success("保存成功"),W()},H=async()=>{var ke;if(!((ke=s.value)!=null&&ke.length))return $i.warning("请至少选择一个资产");L.value=!0;try{await U(s.value,5,async xe=>{const{data:le}=await cr.post("/assets/generateAssets",{type:c[xe.type]??"props",projectId:o.value,name:xe.name,prompt:xe.prompt,id:xe.id}),ye=s.value.find(ae=>ae.id===le.assetsId);ye&&(ye.filePath=le.path)}),$i.success("图片批量生成成功")}finally{L.value=!1}},z=async()=>{var ke;if(!((ke=s.value)!=null&&ke.length))return $i.warning("请至少选择一个资产");x.value=!0;try{await U(s.value,5,async xe=>{const{data:le}=await cr.post("/assets/polishPrompt",{projectId:o.value,assetsId:xe.id,type:c[xe.type]??"props",name:xe.name,describe:xe.intro}),ye=s.value.find(ae=>ae.id===le.assetsId);ye&&(ye.prompt=le.prompt)}),$i.success("提示词批量生成成功")}finally{x.value=!1}},X=ke=>{var xe,le;(xe=d.value)==null||xe.setRowHeight(ke.id,300),(le=d.value)==null||le.recalculate()},K=ke=>a("checkChange",ke),Z=ke=>a("checkChange",{checked:!0,row:ke.row}),te=ke=>a("checkAll",ke,h.value,r.value??-1),$=()=>{k.value={id:0,name:"",intro:"",duration:0,filePath:"",type:"",prompt:"",remark:"",videoPrompt:""},g.value=!0},oe=ke=>{k.value={...ke},g.value=!0},ce=ke=>{k.value={...ke},v.value=!0},ve=ke=>{as.confirm({title:"删除",content:"确认是否删除",okText:"确认",cancelText:"取消",onOk:async()=>{await cr.post("/assets/delAssets",{id:ke.id}),$i.success("删除成功"),W()}})};return t({getSelectData:()=>{var ke,xe;return l.way==="radio"?(ke=d.value)==null?void 0:ke.getRadioRecord(!0):(xe=d.value)==null?void 0:xe.getCheckboxRecords(!0)},changeChecked:(ke,xe)=>{var le;return(le=d.value)==null?void 0:le.setCheckboxRow(ke,xe)}}),ji(()=>{l.radio&&(h.value=l.radio),p(h.value)}),(ke,xe)=>{const le=Xa,ye=wi("i-ad-product"),ae=wi("vxe-column"),ee=I1,fe=e1,ge=wi("i-pencil"),Ee=wi("i-magic"),Le=wi("i-delete"),pe=wi("vxe-table");return we(),Pe("div",JUi,[he("div",QUi,[l.radio?Tt("",!0):(we(),Pe("div",$Ui,[l.batch?Tt("",!0):(we(!0),Pe(Un,{key:0},_o(I(S),We=>(we(),qt(le,{key:We.value,onClick:Ie=>p(We.value),type:h.value===We.value?"primary":"default"},{default:nt(()=>[mi(on(We.label),1)]),_:2},1032,["onClick","type"]))),128))])),he("div",eGi,[l.batch?(we(),Pe(Un,{key:0},[i(le,{type:"primary",onClick:z,loading:x.value},{default:nt(()=>[...xe[4]||(xe[4]=[mi("批量润色",-1)])]),_:1},8,["loading"]),i(le,{type:"primary",onClick:H,loading:L.value},{default:nt(()=>[...xe[5]||(xe[5]=[mi("批量生成图片",-1)])]),_:1},8,["loading"])],64)):Tt("",!0),l.way?Tt("",!0):(we(),Pe(Un,{key:1},[i(le,{type:"primary",onClick:xe[0]||(xe[0]=We=>w.value=!0)},{default:nt(()=>[...xe[6]||(xe[6]=[mi("批量生成",-1)])]),_:1}),i(le,{type:"primary",onClick:$,disabled:T.value},{default:nt(()=>[mi("新增"+on(M.value),1)]),_:1},8,["disabled"])],64))])]),he("div",tGi,[E.value?(we(),Pe("div",nGi,[he("div",iGi,[(we(!0),Pe(Un,null,_o(m.value,We=>(we(),qt(le,{key:We.id,type:I(r)===We.id?"primary":"default",size:"large",class:"rounded-xl font-semibold w-full",onClick:Ie=>R(We)},{default:nt(()=>[mi(on(We.name),1)]),_:2},1032,["type","onClick"]))),128))])])):Tt("",!0),b.value.length?(we(),qt(pe,{key:2,ref_key:"tableRef",ref:d,data:b.value,"cell-config":{height:l.batch?300:120},"row-config":{keyField:"id",resizable:!0},"radio-config":{reserve:!0},"checkbox-config":{reserve:!0},onCheckboxAll:te,onCheckboxChange:K,onRadioChange:Z,round:""},{default:nt(()=>[l.way?(we(),qt(ae,{key:0,type:l.way,title:"请选择",width:"100"},null,8,["type"])):Tt("",!0),i(ae,{title:"名称",field:"name",width:"150","show-overflow":"title","edit-render":{name:"input"}}),i(ae,{title:"元素图片",width:"120"},{default:nt(({row:We})=>[We.filePath?(we(),qt(ee,{key:0,src:We.filePath,fallback:I(Vm),class:"elementImage"},null,8,["src","fallback"])):(we(),Pe("div",lGi,"未生成图片"))]),_:1}),i(ae,{title:"详情",field:"intro","show-overflow":"title","edit-render":{name:"textarea"}}),i(ae,{title:"生图提示词",field:"prompt","show-overflow":"title"},Ld({_:2},[l.batch?{name:"default",fn:nt(({row:We})=>[i(fe,{value:We.prompt,"onUpdate:value":Ie=>We.prompt=Ie,"auto-size":{minRows:2,maxRows:12},onClick:Ie=>X(We)},null,8,["value","onUpdate:value","onClick"])]),key:"0"}:void 0]),1024),E.value?(we(),qt(ae,{key:1,title:"视频提示词",field:"videoPrompt","show-overflow":"title"},Ld({_:2},[l.batch?{name:"default",fn:nt(({row:We})=>[i(fe,{value:We.videoPrompt,"onUpdate:value":Ie=>We.videoPrompt=Ie,"auto-size":{minRows:2,maxRows:12},onClick:Ie=>X(We)},null,8,["value","onUpdate:value","onClick"])]),key:"0"}:void 0]),1024)):Tt("",!0),i(ae,{title:"备注",field:"remark","edit-render":{name:"textarea"}}),E.value?(we(),qt(ae,{key:2,title:"时长(单位:秒)",field:"duration"})):Tt("",!0),l.batch?Tt("",!0):(we(),qt(ae,{key:3,title:"操作",width:"auto",fixed:"right"},{default:nt(({row:We})=>[he("div",aGi,[i(ge,{class:"hoverButton edit",onClick:Ie=>oe(We)},null,8,["onClick"]),i(Ee,{class:"hoverButton magic",onClick:Ie=>ce(We)},null,8,["onClick"]),i(Le,{class:"hoverButton delete",onClick:Ie=>ve(We)},null,8,["onClick"])])]),_:1}))]),_:1},8,["data","cell-config"])):(we(),Pe("div",oGi,[he("div",rGi,[i(ye,{size:48})]),xe[7]||(xe[7]=he("h3",{class:"emptyTitle"},"暂无元素",-1)),xe[8]||(xe[8]=he("p",{class:"emptyDesc"},'点击右上角"新增元素"按钮添加场景或道具或根据剧本生成',-1))]))]),i(FGe,{modelValue:g.value,"onUpdate:modelValue":xe[1]||(xe[1]=We=>g.value=We),type:h.value,scriptId:I(r),data:k.value,onUpdate:W},null,8,["modelValue","type","scriptId","data"]),i(Nfe,{modelValue:v.value,"onUpdate:modelValue":xe[2]||(xe[2]=We=>v.value=We),data:k.value,onUpdate:W},null,8,["modelValue","data"]),tD?(we(),qt(tD,{key:0,modelValue:w.value,"onUpdate:modelValue":xe[3]||(xe[3]=We=>w.value=We),data:b.value,type:h.value,"script-id":I(r)??-1,onSave:N},null,8,["modelValue","data","type","script-id"])):Tt("",!0)])}}}),GZ=za(sGi,[["__scopeId","data-v-18666861"]]),cGi={class:"outline-container"},uGi={class:"page-header"},dGi={key:0,class:"outline-list"},hGi={class:"card-header"},fGi={class:"episode-badge"},kGi={class:"card-title"},gGi={class:"card-actions"},mGi={class:"card-body"},vGi={class:"field-group highlight"},bGi={class:"field-value"},yGi={class:"field-group"},wGi={class:"field-value"},CGi={class:"field-group"},LGi={class:"field-value"},xGi={class:"field-group"},SGi={class:"field-value"},EGi={class:"field-group"},MGi={class:"field-value"},AGi={class:"field-group"},TGi={class:"field-value"},_Gi={class:"field-group outline-field"},jGi={class:"field-content"},OGi={key:0,class:"tags-section"},DGi={key:0,class:"tag-group"},pGi={class:"tag-list"},NGi={key:0,class:"custom-tag more"},RGi={key:1,class:"tag-group"},IGi={class:"tag-list"},PGi={key:0,class:"custom-tag more"},WGi={key:1,class:"empty-state"},HGi={class:"form-section"},zGi={class:"chapter-selector"},BGi={class:"selected-text"},VGi={class:"form-section"},FGi={class:"asset-box"},UGi={class:"asset-tags"},GGi={class:"form-section"},YGi={class:"form-section"},ZGi={style:{height:"600px","overflow-y":"auto"}},XGi=_t({__name:"outline",setup(e,{expose:t}){const{projectId:n}=_u($u()),o={scenes:"场景",characters:"角色",props:"道具"},r={characters:"role",scenes:"scene",props:"props"},l=()=>({episodeIndex:0,title:"",chapterRange:[],scenes:[],characters:[],props:[],coreConflict:"",openingHook:"",outline:"",keyEvents:[],emotionalCurve:"",visualHighlights:[],endingHook:"",classicQuotes:[]}),a=be([]),s=be([]),c=be(!1),u=be(null),d=be(null),h=be(!1),k=be(!1),m=be(),b=be(),g=be(),v=G(()=>a.value.map(U=>{try{const N=JSON.parse(U.data);return{...l(),...N,id:U.id,episodeIndex:N.episodeIndex||U.episode}}catch{return{...l(),id:U.id,episodeIndex:U.episode}}}));function w(U){return o[U]||U}function L(U){return(U==null?void 0:U.map(N=>N.name).filter(Boolean).join("、"))||"—"}function x(U){return U!=null&&U.length?[...U].sort((N,H)=>N-H).map(N=>s.value.find(z=>Number(z.index)===N)?`第${N}章`:`第${N}章`).join("、"):"—"}async function S(){try{const U=await cr.post("/outline/getOutline",{projectId:n.value});a.value=U.data||[]}catch{$i.error("获取大纲数据失败")}}async function E(){try{const U=await cr.post("/novel/getNovel",{projectId:n.value});s.value=U.data||[]}catch{$i.error("获取章节列表失败")}}function M(U){h.value=!1,u.value=U,d.value=JSON.parse(JSON.stringify(v.value[U])),c.value=!0}function T(){h.value=!0,u.value=null,d.value={...l(),episodeIndex:v.value.length+1},c.value=!0}function j(){c.value=!1,u.value=null,d.value=null,h.value=!1}async function O(){if(d.value)try{const U=JSON.stringify(d.value);h.value?(await cr.post("/outline/addOutline",{projectId:n.value,data:U}),$i.success("新增成功")):(await cr.post("/outline/updateOutline",{id:d.value.id,projectId:n.value,data:U}),$i.success("保存成功")),S(),j()}catch{$i.error(h.value?"新增失败":"保存失败")}}function P(U){as.warning({title:"高危操作",content:"删除大纲将会删除该大纲下的剧本和独有资产",okText:"确定",cancelText:"取消",closable:!0,onOk:async()=>{await cr.post("/outline/delOutline",{id:U.id,projectId:n.value}),$i.success("删除成功"),S()}})}async function B(U){if(!d.value)return;m.value=r[U],k.value=!0;const N=await new Promise(H=>{g.value=H});d.value[U].push(...N.map(H=>({name:H.name,description:H.intro})))}function p(U,N){var H,z;(z=(H=d.value)==null?void 0:H[U])==null||z.splice(N,1)}function W(){var U;(U=g.value)==null||U.call(g,b.value.getSelectData()),k.value=!1}function R(){}return ji(()=>{S(),E()}),t({getData:S}),(U,N)=>{const H=wi("i-plus"),z=Xa,X=wi("i-edit"),K=wi("i-delete"),Z=LRe,te=OIe,$=KD,oe=Ey,ce=hc,ve=wi("i-close"),ue=e1,Ce=bd,ke=Tf,xe=as;return we(),Pe("div",cGi,[he("div",uGi,[N[13]||(N[13]=he("div",{class:"header-content"},[he("h1",{class:"page-title"},"大纲管理"),he("p",{class:"page-desc"},"每一集的详细内容")],-1)),i(z,{type:"primary",class:"add-btn",onClick:T},{default:nt(()=>[i(H,{size:16}),N[12]||(N[12]=mi(" 新增大纲 ",-1))]),_:1})]),v.value.length?(we(),Pe("div",dGi,[(we(!0),Pe(Un,null,_o(v.value,(le,ye)=>{var ae,ee,fe,ge;return we(),Pe("div",{key:le.id??ye,class:"outline-card"},[he("div",hGi,[he("div",fGi,"第 "+on(le.episodeIndex)+" 集",1),he("div",kGi,on(le.title||"未命名"),1),he("div",gGi,[i(z,{type:"text",size:"small",class:"action-btn",onClick:Ee=>M(ye)},{default:nt(()=>[i(X,{size:16})]),_:1},8,["onClick"]),i(z,{type:"text",size:"small",class:"action-btn danger",onClick:Ee=>P(le)},{default:nt(()=>[i(K,{size:16})]),_:1},8,["onClick"])])]),he("div",mGi,[i(te,{gutter:[16,8]},{default:nt(()=>[i(Z,{span:24},{default:nt(()=>[he("div",vGi,[N[14]||(N[14]=he("span",{class:"field-icon"},"📖",-1)),N[15]||(N[15]=he("span",{class:"field-label"},"章节范围",-1)),he("span",bGi,on(x(le.chapterRange)),1)])]),_:2},1024),i(Z,{span:8},{default:nt(()=>[he("div",yGi,[N[16]||(N[16]=he("span",{class:"field-icon"},"🎬",-1)),N[17]||(N[17]=he("span",{class:"field-label"},"场景",-1)),he("span",wGi,on(L(le.scenes)),1)])]),_:2},1024),i(Z,{span:8},{default:nt(()=>[he("div",CGi,[N[18]||(N[18]=he("span",{class:"field-icon"},"👥",-1)),N[19]||(N[19]=he("span",{class:"field-label"},"角色",-1)),he("span",LGi,on(L(le.characters)),1)])]),_:2},1024),i(Z,{span:8},{default:nt(()=>[he("div",xGi,[N[20]||(N[20]=he("span",{class:"field-icon"},"🎁",-1)),N[21]||(N[21]=he("span",{class:"field-label"},"道具",-1)),he("span",SGi,on(L(le.props)),1)])]),_:2},1024),i(Z,{span:12},{default:nt(()=>[he("div",EGi,[N[22]||(N[22]=he("span",{class:"field-icon"},"🎯",-1)),N[23]||(N[23]=he("span",{class:"field-label"},"核心冲突",-1)),he("span",MGi,on(le.coreConflict||"—"),1)])]),_:2},1024),i(Z,{span:12},{default:nt(()=>[he("div",AGi,[N[24]||(N[24]=he("span",{class:"field-icon"},"⚡",-1)),N[25]||(N[25]=he("span",{class:"field-label"},"黄金3秒",-1)),he("span",TGi,on(le.openingHook||"—"),1)])]),_:2},1024),le.outline?(we(),qt(Z,{key:0,span:24},{default:nt(()=>[he("div",_Gi,[N[26]||(N[26]=he("div",{class:"field-header"},[he("span",{class:"field-icon"},"📝"),he("span",{class:"field-label"},"剧情主干")],-1)),he("p",jGi,on(le.outline),1)])]),_:2},1024)):Tt("",!0)]),_:2},1024),(ae=le.keyEvents)!=null&&ae.length||(ee=le.classicQuotes)!=null&&ee.length?(we(),Pe("div",OGi,[(fe=le.keyEvents)!=null&&fe.length?(we(),Pe("div",DGi,[N[27]||(N[27]=he("span",{class:"tag-label"},"关键节点",-1)),he("div",pGi,[(we(!0),Pe(Un,null,_o(le.keyEvents.slice(0,3),(Ee,Le)=>(we(),Pe("span",{key:Le,class:"custom-tag blue"},on(Ee),1))),128)),le.keyEvents.length>3?(we(),Pe("span",NGi,"+"+on(le.keyEvents.length-3),1)):Tt("",!0)])])):Tt("",!0),(ge=le.classicQuotes)!=null&&ge.length?(we(),Pe("div",RGi,[N[28]||(N[28]=he("span",{class:"tag-label"},"金句",-1)),he("div",IGi,[(we(!0),Pe(Un,null,_o(le.classicQuotes.slice(0,2),(Ee,Le)=>(we(),Pe("span",{key:Le,class:"custom-tag purple"},on(Ee),1))),128)),le.classicQuotes.length>2?(we(),Pe("span",PGi,"+"+on(le.classicQuotes.length-2),1)):Tt("",!0)])])):Tt("",!0)])):Tt("",!0)])])}),128))])):(we(),Pe("div",WGi,[N[30]||(N[30]=he("div",{class:"empty-icon"},"📋",-1)),N[31]||(N[31]=he("p",{class:"empty-text"},"暂无大纲数据",-1)),i(z,{type:"primary",class:"empty-btn",onClick:T},{default:nt(()=>[...N[29]||(N[29]=[mi("创建第一个大纲",-1)])]),_:1})])),i(xe,{open:c.value,"onUpdate:open":N[10]||(N[10]=le=>c.value=le),title:h.value?"新增大纲":"编辑大纲",width:"900px",bodyStyle:{maxHeight:"70vh",overflowY:"auto",padding:"20px"},onOk:O,onCancel:j,okText:"保存",cancelText:"取消",class:"outline-modal"},{default:nt(()=>[d.value?(we(),qt(ke,{key:0,layout:"vertical",model:d.value,class:"outline-form"},{default:nt(()=>[he("div",HGi,[N[33]||(N[33]=he("div",{class:"section-title"},[he("span",{class:"section-icon"},"📌"),mi(" 基础信息 ")],-1)),i(te,{gutter:16},{default:nt(()=>[i(Z,{span:6},{default:nt(()=>[i(oe,{label:"集数"},{default:nt(()=>[i($,{value:d.value.episodeIndex,"onUpdate:value":N[0]||(N[0]=le=>d.value.episodeIndex=le),min:1,style:{width:"100%"}},null,8,["value"])]),_:1})]),_:1}),i(Z,{span:18},{default:nt(()=>[i(oe,{label:"标题"},{default:nt(()=>[i(ce,{value:d.value.title,"onUpdate:value":N[1]||(N[1]=le=>d.value.title=le),maxlength:100,"show-count":"",placeholder:"请输入本集标题"},null,8,["value"])]),_:1})]),_:1}),i(Z,{span:24},{default:nt(()=>[i(oe,{label:"章节范围"},{default:nt(()=>[he("div",zGi,[i(z,{class:"select-btn",onClick:R},{default:nt(()=>[i(H,{size:14}),N[32]||(N[32]=mi(" 选择章节 ",-1))]),_:1}),he("span",BGi,on(x(d.value.chapterRange)||"未选择章节"),1)])]),_:1})]),_:1})]),_:1})]),he("div",VGi,[N[35]||(N[35]=he("div",{class:"section-title"},[he("span",{class:"section-icon"},"🔗"),mi(" 资产关联 ")],-1)),i(te,{gutter:16},{default:nt(()=>[(we(),Pe(Un,null,_o(["scenes","characters","props"],le=>i(Z,{span:8,key:le},{default:nt(()=>[i(oe,{label:w(le)},{default:nt(()=>[he("div",FGi,[he("div",UGi,[(we(!0),Pe(Un,null,_o(d.value[le],(ye,ae)=>(we(),Pe("span",{key:ae,class:"asset-tag"},[mi(on(ye.name)+" ",1),i(ve,{size:12,class:"close-icon",onClick:ee=>p(le,ae)},null,8,["onClick"])]))),128))]),i(z,{type:"dashed",size:"small",class:"add-asset-btn",onClick:ye=>B(le)},{default:nt(()=>[i(H,{size:12}),N[34]||(N[34]=mi(" 添加 ",-1))]),_:1},8,["onClick"])])]),_:2},1032,["label"])]),_:2},1024)),64))]),_:1})]),he("div",GGi,[N[36]||(N[36]=he("div",{class:"section-title"},[he("span",{class:"section-icon"},"🎭"),mi(" 剧情设计 ")],-1)),i(te,{gutter:16},{default:nt(()=>[i(Z,{span:12},{default:nt(()=>[i(oe,{label:"黄金3秒"},{default:nt(()=>[i(ce,{value:d.value.openingHook,"onUpdate:value":N[2]||(N[2]=le=>d.value.openingHook=le),maxlength:100,placeholder:"开头吸引观众的亮点"},null,8,["value"])]),_:1})]),_:1}),i(Z,{span:12},{default:nt(()=>[i(oe,{label:"结尾悬念"},{default:nt(()=>[i(ce,{value:d.value.endingHook,"onUpdate:value":N[3]||(N[3]=le=>d.value.endingHook=le),maxlength:100,placeholder:"结尾留下的悬念"},null,8,["value"])]),_:1})]),_:1}),i(Z,{span:24},{default:nt(()=>[i(oe,{label:"核心冲突"},{default:nt(()=>[i(ce,{value:d.value.coreConflict,"onUpdate:value":N[4]||(N[4]=le=>d.value.coreConflict=le),maxlength:200,placeholder:"本集的核心矛盾点"},null,8,["value"])]),_:1})]),_:1}),i(Z,{span:24},{default:nt(()=>[i(oe,{label:"剧情主干"},{default:nt(()=>[i(ue,{value:d.value.outline,"onUpdate:value":N[5]||(N[5]=le=>d.value.outline=le),"auto-size":{minRows:4,maxRows:8},maxlength:1e3,"show-count":"",placeholder:"详细描述本集剧情走向"},null,8,["value"])]),_:1})]),_:1})]),_:1})]),he("div",YGi,[N[37]||(N[37]=he("div",{class:"section-title"},[he("span",{class:"section-icon"},"💡"),mi(" 补充信息 ")],-1)),i(te,{gutter:16},{default:nt(()=>[i(Z,{span:12},{default:nt(()=>[i(oe,{label:"关键节点"},{default:nt(()=>[i(Ce,{value:d.value.keyEvents,"onUpdate:value":N[6]||(N[6]=le=>d.value.keyEvents=le),mode:"tags",placeholder:"输入后回车添加",style:{width:"100%"}},null,8,["value"])]),_:1})]),_:1}),i(Z,{span:12},{default:nt(()=>[i(oe,{label:"情绪曲线"},{default:nt(()=>[i(ce,{value:d.value.emotionalCurve,"onUpdate:value":N[7]||(N[7]=le=>d.value.emotionalCurve=le),placeholder:"如:低开高走、波浪起伏"},null,8,["value"])]),_:1})]),_:1}),i(Z,{span:12},{default:nt(()=>[i(oe,{label:"视觉重点"},{default:nt(()=>[i(Ce,{value:d.value.visualHighlights,"onUpdate:value":N[8]||(N[8]=le=>d.value.visualHighlights=le),mode:"tags",placeholder:"输入后回车添加",style:{width:"100%"}},null,8,["value"])]),_:1})]),_:1}),i(Z,{span:12},{default:nt(()=>[i(oe,{label:"金句"},{default:nt(()=>[i(Ce,{value:d.value.classicQuotes,"onUpdate:value":N[9]||(N[9]=le=>d.value.classicQuotes=le),mode:"tags",placeholder:"输入后回车添加",style:{width:"100%"}},null,8,["value"])]),_:1})]),_:1})]),_:1})])]),_:1},8,["model"])):Tt("",!0)]),_:1},8,["open","title"]),i(xe,{open:k.value,"onUpdate:open":N[11]||(N[11]=le=>k.value=le),onOk:W,width:"60vw",title:"选择资产",class:"asset-modal"},{default:nt(()=>[he("div",ZGi,[k.value?(we(),qt(GZ,{key:0,ref_key:"mainElementRef",ref:b,way:"checkbox",radio:m.value},null,8,["radio"])):Tt("",!0)])]),_:1},8,["open"])])}}}),qGi=za(XGi,[["__scopeId","data-v-3cac7801"]]),KGi={class:"storyline-container"},JGi={class:"page-header"},QGi={class:"storyline-content"},$Gi={class:"content-card"},eYi={key:0,class:"preview-box"},tYi={class:"preview-text"},nYi={key:1,class:"edit-box"},iYi={key:1,class:"empty-state"},oYi={key:0,class:"action-bar"},rYi={class:"action-btns"},lYi=_t({__name:"storyline",props:{modelValue:{default:""},modelModifiers:{}},emits:xs(["save"],["update:modelValue"]),setup(e,{emit:t}){const n=ec(e,"modelValue"),o=be(!1),r=be(""),l=t;function a(){o.value=!o.value,o.value&&(r.value=n.value)}function s(){o.value=!0}function c(){n.value=r.value,o.value=!1}function u(){l("save",n.value),o.value=!1}return(d,h)=>{const k=wi("i-edit"),m=wi("i-preview-open"),b=Xa,g=e1,v=wi("i-check");return we(),Pe("div",KGi,[he("div",JGi,[h[1]||(h[1]=he("div",{class:"header-content"},[he("h1",{class:"page-title"},"故事线管理"),he("p",{class:"page-desc"},"根据上传的小说原文生成大纲和故事线")],-1)),i(b,{type:"primary",class:"edit-btn",onClick:a},{default:nt(()=>[o.value?(we(),qt(m,{key:1,size:16})):(we(),qt(k,{key:0,size:16})),mi(" "+on(o.value?"预览模式":"编辑故事线"),1)]),_:1})]),he("div",QGi,[he("div",$Gi,[n.value||o.value?(we(),Pe(Un,{key:0},[o.value?(we(),Pe("div",nYi,[h[3]||(h[3]=he("div",{class:"edit-header"},[he("span",{class:"edit-icon"},"✏️"),he("span",{class:"edit-title"},"编辑故事线"),he("span",{class:"edit-tip"},"支持多行输入,描述完整的故事脉络")],-1)),i(g,{value:n.value,"onUpdate:value":h[0]||(h[0]=w=>n.value=w),placeholder:"请输入故事线,包括主要情节、角色发展、冲突转折等...",class:"storyline-textarea","auto-size":{minRows:12,maxRows:24},maxlength:5e3,"show-count":"",onChange:s},null,8,["value"])])):(we(),Pe("div",eYi,[h[2]||(h[2]=he("div",{class:"preview-header"},[he("span",{class:"preview-icon"},"📖"),he("span",{class:"preview-title"},"故事线内容")],-1)),he("div",tYi,on(n.value),1)]))],64)):(we(),Pe("div",iYi,[h[5]||(h[5]=he("div",{class:"empty-icon"},"📝",-1)),h[6]||(h[6]=he("p",{class:"empty-title"},"暂无故事线",-1)),h[7]||(h[7]=he("p",{class:"empty-desc"},'点击上方"编辑故事线"开始创作',-1)),i(b,{type:"primary",class:"empty-btn",onClick:a},{default:nt(()=>[...h[4]||(h[4]=[mi("开始编辑",-1)])]),_:1})]))]),o.value?(we(),Pe("div",oYi,[h[10]||(h[10]=he("div",{class:"action-tips"},null,-1)),he("div",rYi,[i(b,{class:"cancel-btn",onClick:c},{default:nt(()=>[...h[8]||(h[8]=[mi("取消",-1)])]),_:1}),i(b,{type:"primary",class:"save-btn",onClick:u},{default:nt(()=>[i(v,{size:16}),h[9]||(h[9]=mi(" 保存 ",-1))]),_:1})])])):Tt("",!0)])])}}}),aYi=za(lYi,[["__scopeId","data-v-6487204d"]]);function sYi(e,t){let n=0;return function(...o){const r=Date.now();r-n>=t&&(e.apply(this,o),n=r)}}const dSe="data:image/svg+xml,%3csvg%20version='1.1'%20xmlns='http://www.w3.org/2000/svg'%20style='display:%20block;'%20viewBox='0%200%202048%202048'%20width='32'%20height='32'%20preserveAspectRatio='none'%3e%3cpath%20transform='translate(0,0)'%20fill='rgb(171,72,254)'%20d='M%20940.972%20938.532%20C%20968.154%20937.299%20999.342%20937.832%201026.7%20937.934%20C%201008.76%20966.906%20992.521%20998.373%20975.011%201027.58%20C%20953.896%201062.8%20931.782%201097.1%20910.71%201132.47%20C%20895.136%201133.73%20879.656%201133.59%20863.31%201135.09%20C%20787.092%201141.5%20711.761%201155.92%20638.564%201178.11%20C%20572.019%201198.89%20449.284%201253.36%20416.06%201317.18%20C%20409.742%201307.55%20402.55%201298.92%20396.225%201288.61%20C%20374.251%201252.81%20373.041%201222.32%20374.394%201182.15%20C%20366.312%201200.94%20361.205%201214.94%20360.604%201236.01%20C%20358.084%201324.21%20453.617%201386.36%20523.982%201420.66%20C%20542.016%201429.45%20560.036%201439.44%20579.849%201439.44%20C%20620.987%201439.46%20674.461%201430.63%20705.388%201401.13%20C%20738.121%201369.92%20703.885%201342.46%20675.148%201330.66%20C%20612.911%201305.1%20533.195%201307.12%20473.826%201339.07%20C%20449.947%201351.92%20458.182%201360.25%20436.523%201338.68%20C%20502.115%201225.36%20769.457%201168.28%20891.324%201167.92%20C%20880.631%201181.62%20869.431%201205.22%20858.517%201216.82%20C%20825.846%201216.22%20792.547%201218.66%20760.485%201225.97%20C%20744.103%201230.35%20717.997%201236.93%20707.956%201251.86%20C%20700.954%201262.26%20711.907%201272.96%20720.979%201277.2%20C%20751.395%201291.41%20791.573%201292%20822.985%201281.29%20C%20817.604%201287.59%20813.386%201295.09%20808.663%201301.92%20C%20800.283%201314.03%20790.819%201326.16%20783.816%201339.1%20C%20781.105%201344.11%20778.89%201349.33%20777.632%201354.91%20C%20775.4%201364.79%20776.536%201373.84%20782.065%201382.38%20C%20804.636%201417.25%20860.497%201432.74%20898.979%201440.78%20C%20988.868%201459.55%201153.52%201460.93%201232.47%201408.52%20C%201246.58%201399.15%201262.7%201385.77%201265.78%201368.19%20C%201267.55%201358.14%201264.79%201349.97%201259.14%201341.75%20C%201264.38%201332.91%201278.02%201316.1%201284.82%201307.43%20C%201292.22%201298.38%201299.63%201287.79%201306.58%201278.29%20C%201328.8%201279.68%201407.72%201284.61%201415.63%201246.4%20C%201417.91%201235.37%201393.28%201221.86%201384.4%201218.97%20C%201380.24%201217.62%201358.94%201212.45%201356.47%201209.99%20C%201357.33%201204.34%201384.74%201173.95%201391.45%201163.37%20C%201459.13%201181.37%201547.15%201216.93%201600.88%201262.78%20C%201627.31%201285.34%201652.54%201321.11%201653.72%201356.59%20C%201654.22%201371.69%201654.03%201387.51%201653.95%201402.72%20L%201653.94%201475.76%20L%201653.97%201579.44%20C%201653.95%201601.8%201656.32%201627.09%201651.41%201649%20C%201646.5%201670.87%201634.04%201689.35%201619.5%201706.06%20C%201588.41%201741.78%201549.65%201764.5%201507.39%201784.37%20C%201377.44%201845.46%201233.05%201863.77%201091.26%201873.07%20C%201065.5%201874.76%201039.82%201874.64%201014.03%201874.6%20C%20826.259%201874.26%20537.641%201835.01%20393.385%201706.74%20C%20359.587%201676.69%20324.433%201635.36%20321.983%201588.01%20C%20321.269%201574.22%20321.91%201560.24%20321.757%201546.42%20C%20321.223%201498.42%20322.061%201450.48%20321.888%201402.5%20C%20321.784%201373.65%20322.205%201344.7%20321.752%201315.87%20C%20321.206%201281.08%20317.152%201230.6%20325.148%201197.84%20C%20333.054%201165.46%20353.454%201136.01%20375.728%201111.8%20C%20403.859%201081.21%20438.11%201059.74%20474.584%201040.56%20C%20616.022%20966.194%20783.233%20944.885%20940.972%20938.532%20z%20M%201324.2%201803.25%20C%201340.28%201798.25%201409.87%201783.14%201416.31%201773.34%20C%201418.64%201769.78%201418.88%201719.17%201417.08%201713.8%20C%201416.66%201712.54%201416.54%201712.49%201415.9%201711.54%20C%201408.91%201710.78%201361.71%201725.68%201352.07%201728.59%20L%201352.18%201590.18%20C%201352.17%201583.33%201352.43%201543.83%201351.52%201540.23%20C%201349.49%201539.16%201350.39%201539.37%201348.95%201539.17%20C%201331.33%201543.17%201314.25%201547.43%201296.49%201550.89%20C%201289.89%201552.17%201257.49%201557.18%201253.47%201558.85%20C%201251.12%201562.77%201250.03%201611.65%201254.02%201612.39%20C%201271.58%201615.61%201297.83%201606.36%201316.1%201603.01%20C%201315.56%201654.05%201315.71%201705.28%201316.92%201756.3%20C%201317.06%201762.1%201315.81%201800.29%201317.13%201802.78%20C%201319.62%201804.22%201321.29%201803.63%201324.2%201803.25%20z%20M%20546.006%201682.51%20C%20545.308%201645.48%20546.352%201608.34%20545.457%201571.3%20C%20545.194%201560.4%20545.326%201549.55%20545.797%201538.66%20C%20554.046%201542.21%20570.935%201551.05%20578.997%201550.35%20C%20580.723%201549.2%20582.655%201547.82%20582.623%201545.46%20C%20582.408%201529.86%20582.062%201513.6%20582.161%201498.03%20C%20577.119%201495.08%20518.936%201468.45%20513.023%201467.07%20L%20512.981%201734.09%20C%20520.838%201741.42%20596.481%201774.14%20604.079%201771.12%20C%20606.266%201764.31%20605.154%201729.49%20605.186%201719.75%20C%20605.309%201715.25%20605.911%201711.44%20604.112%201707.44%20C%20597.157%201701.08%20557.174%201686.76%20546.006%201682.51%20z%20M%201450.54%201312.46%20C%201414.2%201313.83%201358.25%201325.32%201333.93%201352.44%20C%201293.37%201397.66%201373.67%201432.56%201407.95%201437.74%20C%201431.99%201441.36%201449.9%201445.03%201473.23%201442.97%20C%201482.91%201441.85%201496.53%201441.77%201505.83%201439.14%20C%201537.49%201430.18%201570.68%201412.54%201592.3%201387.32%20C%201606.52%201370.74%201600.43%201356.7%201584.11%201344.83%20C%201545.44%201316.72%201496.95%201311.38%201450.54%201312.46%20z%20M%201076.86%201832.3%20C%201085.72%201827.8%201079.51%201798.44%201081.22%201789.22%20C%201082.05%201784.68%201082.03%201772.51%201079.84%201768.39%20C%201072.95%201764.23%201017.1%201765.14%201007.14%201766.04%20C%201000.89%201774.14%201005.6%201793.85%201004.51%201804.68%20C%201003.86%201811.18%201002.73%201828.94%201007.34%201832.85%20C%201017.82%201835.13%201064.53%201832.91%201076.86%201832.3%20z%20M%20917.919%201830.2%20C%20924.321%201822.25%20918.976%201796.8%20920.441%201785.81%20C%20921.025%201781.43%20920.492%201768.46%20918.655%201764.8%20C%20911.247%201760.86%20855.004%201756.61%20845.063%201757.12%20C%20842.351%201765.4%20845.073%201779.68%20845.03%201789.06%20C%20845.376%201799.5%20842.173%201811.1%20845.872%201821.1%20C%20846.771%201823.53%20852.223%201825.07%20854.394%201825.15%20C%20871.73%201825.82%20901.351%201832.02%20917.919%201830.2%20z%20M%201184.24%201824.9%20C%201196.49%201823.62%201231.14%201821.24%201240.63%201815.74%20C%201243.66%201808.59%201243.39%201797%201243.22%201789.27%20C%201242.97%201777.5%201244.16%201765.05%201241.85%201753.56%20C%201240.98%201749.24%201230.58%201750.99%201228.16%201751.36%20C%201219.08%201752.41%201174.87%201756.02%201169.3%201759.67%20C%201166.53%201768.4%201167.13%201813.74%201168.7%201823.55%20C%201172.4%201827.2%201179.24%201825.43%201184.24%201824.9%20z%20M%20759.354%201811.36%20C%20762.364%201806.83%20761.042%201785.97%20760.825%201779.51%20C%20760.595%201772.66%20763.907%201745.68%20756.596%201743.58%20C%20736.224%201737.74%20709.441%201731.02%20688.455%201728.82%20C%20684.915%201737.44%20687.51%201755.02%20687.107%201764.9%20C%20686.763%201773.33%20684.864%201786.4%20687.926%201793.82%20C%20695.14%201800.17%20748.795%201810.93%20759.354%201811.36%20z%20M%20871.979%201620.08%20C%20875.43%201611.77%20873.709%201594.49%20873.916%201585.04%20C%20874.333%201565.94%20877.275%201563.49%20857.718%201561.29%20C%20836.691%201558.92%20814.77%201556.38%20794.124%201552.77%20C%20793.568%201562.9%20793.43%201595.35%20794.08%201604.41%20C%20795.111%201618.79%20854.394%201618.8%20866.455%201621.39%20C%20867.409%201621.6%20870.915%201620.41%20871.979%201620.08%20z%20M%201024.45%201630.14%20C%201028.73%201623.27%201027.28%201584.15%201026.7%201573.64%20C%201009.64%201570.9%20967.295%201571.45%20947.624%201570.76%20C%20945.962%201580.01%20943.894%201618.15%20948.058%201625.57%20C%20956.823%201631.8%201011.46%201630.76%201024.45%201630.14%20z%20M%20455.284%201699.93%20C%20456.669%201683.08%20455.966%201652.81%20455.937%201635.43%20C%20451.499%201631.01%20407.606%201598.58%20403.495%201597.43%20C%20400.82%201603.48%20401.334%201648.68%20401.896%201656.9%20C%20410.367%201669.97%20441.488%201694.08%20455.284%201699.93%20z%20M%20910.751%201047.52%20C%20919.455%201046.83%20946.733%201046.38%20951.298%201042.85%20C%20955.645%201032.54%20954.082%201018.23%20954.237%201007.21%20C%20954.669%20976.437%20955.713%20977%20926.115%20979.584%20C%20915.754%20980.16%20893.935%20980.021%20885.458%20983.466%20C%20882.074%20988.688%20883.819%201036.57%20884.728%201045.39%20C%20885.306%201051.01%20906.091%201047.56%20910.751%201047.52%20z%20M%20488.4%201148.21%20C%20497.756%201143.32%20529.633%201128.01%20534.879%201120.65%20C%20536.123%201115.38%20535.855%201062.92%20534.085%201059.05%20C%20531.635%201057.56%20532.982%201057.85%20530.119%201057.75%20C%20522.985%201061.07%20485.659%201077.84%20484.76%201082.97%20C%20483.401%201090.72%20482.33%201140.81%20484.78%201146.91%20C%20486.835%201147.94%20486.206%201147.82%20488.4%201148.21%20z%20M%201555.81%201648.95%20C%201551.94%201649.84%201502.98%201676.4%201499.32%201679.36%20C%201497.02%201684.41%201496.54%201740.54%201498.53%201744.57%20C%201513.45%201739.95%201547.36%201721.12%201557.95%201709.06%20C%201558.27%201700.24%201559.54%201654.08%201556.76%201649.61%20L%201555.81%201648.95%20z%20M%20798.442%20990.457%20C%20790.154%20991.047%20744.469%20995.504%20739.917%201001.14%20C%20735.776%201006.27%20737.851%201051.06%20738.417%201059.47%20C%20738.586%201061.98%20740.141%201063.36%20741.95%201064.79%20L%20743.753%201065.08%20C%20752.688%201064.9%20796.515%201059.11%20803.027%201054.61%20C%20807.251%201044.98%20804.859%201029.77%20804.929%201019.07%20C%20804.978%201011.65%20808.421%20991.15%20798.442%20990.457%20z%20M%20600.837%201034.06%20C%20601.489%201043.65%20600.446%201092.4%20603.578%201096.22%20C%20606.823%201097.79%20607.758%201097.4%20611.316%201097.03%20L%20612.524%201096.54%20C%20621.015%201093.18%20629.612%201090.86%20638.387%201088.51%20C%20642.316%201087.46%20653.18%201085.32%20656.163%201083.88%20C%20658.816%201082.62%20660.928%201080.45%20662.111%201077.76%20C%20666.608%201067.58%20662.687%201041.79%20664.044%201029.83%20C%20664.61%201024.83%20664.298%201018.8%20659.599%201016.01%20C%20658.851%201016.05%20655.132%201016.16%20654.653%201016.28%20C%20640.329%201019.29%20612.828%201026.45%20600.837%201034.06%20z%20M%201530.94%201478.4%20C%201530.58%201486.41%201529.06%201528.94%201532.52%201532.88%20L%201535.91%201533%20C%201553.73%201522.33%201573.43%201511.84%201588.23%201497.32%20C%201593.79%201491.86%201593.29%201448.22%201590.85%201445.08%20C%201590.06%201445.01%201587.72%201444.72%201587.02%201444.73%20C%201564.07%201461.99%201553.96%201465.38%201530.94%201478.4%20z%20M%20455.426%201491.18%20C%20458.831%201482.75%20456.413%201448.58%20457.57%201436.49%20C%20447.99%201428.9%20436.86%201421.67%20426.808%201414.54%20C%20422.119%201411.21%20405.02%201396.39%20401.726%201394.93%20C%20397.649%201401.04%20401.427%201414.38%20401.026%201421.96%20C%20400.659%201428.89%20399.465%201436.68%20400.054%201443.6%20C%20404.455%201459.14%20426.027%201472.56%20438.339%201481.58%20C%20443.673%201485.49%20450.179%201489.26%20455.426%201491.18%20z%20M%20724.899%201540.19%20C%20715.518%201536.46%20658.601%201520.64%20649.175%201520.04%20C%20646.529%201524.6%20647.712%201538.69%20648.172%201544.14%20C%20648.871%201552.41%20644.556%201575.14%20653.352%201578.18%20C%20666.306%201582.65%20712.696%201598%20723.96%201595.66%20C%20724.532%201578.2%20725.188%201557.62%20724.899%201540.19%20z%20M%201463.17%201505.03%20C%201454.75%201508.18%201401.58%201524.91%201399.33%201528.1%20C%201397.42%201536.57%201399.38%201545.32%201399.53%201553.94%20C%201399.66%201562.33%201396.97%201573.72%201400.72%201581.37%20C%201403.69%201583.23%201402.12%201582.73%201405.59%201582.94%20C%201415.07%201579.86%201464.2%201565.63%201468.46%201558.13%20C%201470.3%201554.88%201470.12%201512.03%201468.9%201506.97%20L%201467.44%201505.16%20C%201465.96%201505.07%201464.64%201504.91%201463.17%201505.03%20z%20M%201171.89%201566.41%20C%201161.22%201567.42%201109.51%201570.41%201103.34%201572.48%20C%201101.18%201580.12%201101.32%201617.3%201102.34%201625.96%20C%201105.25%201629.31%201107.45%201628.74%201111.75%201628.58%20C%201124.27%201628.61%201170.02%201627.11%201179.14%201621.73%20C%201182.34%201615.66%201183.39%201572%201179.97%201566.53%20C%201176.22%201565.92%201175.55%201566.06%201171.89%201566.41%20z'/%3e%3cpath%20transform='translate(0,0)'%20fill='rgb(171,72,254)'%20d='M%201657.91%20259.802%20C%201662.75%20261.808%201682.88%20275.156%201688.63%20278.863%20C%201681.4%20290.971%201671.53%20304.994%201663.65%20316.961%20C%201646.46%20343.593%201628.86%20369.954%201610.84%20396.035%20C%201580.92%20439.996%201550.93%20486.538%201521.41%20531.033%20L%201439.94%20655.457%20C%201431.36%20668.575%201401.89%20717.981%201392.69%20724.821%20C%201369.63%20724.391%201352.02%20724.859%201332.62%20738.551%20C%201314.34%20751.451%201306.04%20768.752%201306.47%20791.07%20C%201306.76%20806.168%201309.45%20816.512%201318.44%20828.736%20C%201329.04%20842.891%201344.8%20852.282%201362.3%20854.864%20C%201409.5%20861.998%201450.17%20819.16%201438.5%20772.546%20C%201435.36%20759.997%201429.47%20751.801%201421.71%20741.695%20L%201585.92%20480.057%20C%201626.02%20416.546%201667.39%20352.871%201705.21%20287.991%20C%201712.27%20291.939%201735.24%20303.896%201737.61%20310.07%20C%201736.9%20315.381%201735.45%20319.911%201733.89%20325.016%20C%201690.78%20466.883%201653.28%20611.155%201630.78%20757.882%20C%201626.25%20788.684%201622.44%20819.587%201619.36%20850.566%20C%201614.89%20896.966%201624.03%20890.119%201589.16%20924.448%20C%201512.15%20996.547%201432.44%201066.23%201363.58%201146.43%20C%201339.73%201173.63%201320.44%201204.78%201298.21%201233.07%20C%201274.59%201263.12%201253.67%201296.25%201230.09%201325.98%20C%201218.35%201319.5%201207.29%201311.59%201195.86%201304.65%20C%201173.95%201291.35%201152.42%201277.06%201130.57%201263.75%20L%20998.431%201183.12%20C%20979.838%201171.76%20959.812%201160.63%20941.674%201148.87%20C%20957.912%201124.77%20975.862%201093.43%20990.938%201068.08%20C%201012.48%201028.67%201040.73%20989.798%201059.5%20949.166%20C%201096.31%20869.481%201125.74%20785.229%201152.93%20701.835%20C%201158.41%20685.045%201166.05%20657.538%201173.77%20642.685%20C%201177.12%20636.235%201215.59%20613.039%201223.95%20607.164%20C%201258.94%20582.735%201293.68%20557.951%201328.17%20532.815%20C%201444.39%20447.048%201549.83%20355.227%201657.91%20259.802%20z'/%3e%3cpath%20transform='translate(0,0)'%20fill='rgb(171,72,254)'%20d='M%20920.875%201183.92%20C%20934.196%201190.44%20958.666%201207.42%20972.672%201215.94%20L%201104.12%201297.05%20L%201174.97%201340.92%20C%201183.94%201346.59%201203.4%201358.5%201210.59%201365.22%20L%201208.78%201367.57%20C%201190.24%201391.58%201176.64%201400.59%201146.62%201407.74%20C%201128.92%201411.95%201112.81%201415.26%201094.6%201417.58%20C%201042.9%201430.79%20831.943%201422.64%20813.951%201359.26%20C%20820.908%201342.69%20835.418%201322.53%20845.35%201306.77%20C%20861.065%201281.84%20876.647%201256.81%20892.095%201231.71%20C%20901.412%201216.64%20912.656%201199.33%20920.875%201183.92%20z'/%3e%3cpath%20transform='translate(0,0)'%20fill='rgb(171,72,254)'%20d='M%201753.4%20174.051%20C%201757.16%20174.465%201760.78%20174.907%201764.31%20176.35%20C%201768.47%20178.053%201771.57%20181.153%201773.13%20185.405%20C%201777.88%20198.361%201752.78%20269.18%201746.37%20283.173%20C%201737.45%20279.844%201725.51%20272.236%201717.12%20267.125%20C%201706.93%20259.874%201687.15%20248.764%201675.94%20242.166%20C%201680.6%20236.545%201690.69%20227.724%201696.41%20222.441%20C%201711.94%20208.09%201734.34%20182.212%201753.4%20174.051%20z'/%3e%3c/svg%3e",cYi={key:0,class:"notice-message"},uYi={class:"notice-text"},dYi={class:"message-content-wrapper"},hYi=_t({__name:"chatMessage",props:{msg:{},sendApi:{type:Function}},setup(e){const t=be("light"),n=e;Oi({});function o(l){const a=/([\s\S]*?)<\/think>/,s=l.match(a);if(s){const c=s[1].trim(),u=l.replace(a,"").trim();return{thinking:c,content:u}}return{thinking:null,content:l}}const r=G(()=>n.msg.identity!=="assistant"?null:n.msg.data.map((l,a)=>{if(l.type==="text"){const{thinking:s,content:c}=o(l.text);return{type:l.type,text:l.text,thinking:s,content:c,index:a}}return{...l,index:a}}));return(l,a)=>{const s=wi("McMarkdownCard"),c=wi("McBubble");return e.msg.identity==="notice"?(we(),Pe("div",cYi,[he("span",uYi,on(e.msg.data),1)])):(we(),Pe("div",{key:1,class:Qe(["message-wrapper",[e.msg.identity==="user"?"user":"assistant"]])},[he("div",dYi,[e.msg.identity==="assistant"&&r.value?(we(!0),Pe(Un,{key:0},_o(r.value,u=>(we(),Pe("div",{key:u.index},[u.type==="text"?(we(),qt(c,{key:0,avatarConfig:{imgSrc:I(dSe),displayName:e.msg.role},avatarPosition:"top",variant:"bordered"},{default:nt(()=>[i(s,{enableThink:!0,content:u.content,theme:I(t)},null,8,["content","theme"])]),_:2},1032,["avatarConfig"])):Tt("",!0),u.type==="thinking"?(we(),qt(c,{key:1,loading:!0,avatarConfig:{imgSrc:I(dSe),displayName:e.msg.role},avatarPosition:"top"},null,8,["avatarConfig"])):Tt("",!0)]))),128)):(we(!0),Pe(Un,{key:1},_o(e.msg.data,(u,d)=>(we(),Pe("div",{key:d},[u.type==="text"?(we(),qt(c,{key:0,align:"right"},{default:nt(()=>[i(s,{enableThink:!0,content:u.text,theme:I(t)},null,8,["content","theme"])]),_:2},1024)):Tt("",!0),u.type==="image_url"?(we(),qt(c,{key:1,content:u.image_url,align:"right"},null,8,["content"])):Tt("",!0)]))),128))])],2))}}}),fYi=za(hYi,[["__scopeId","data-v-afab5b61"]]),kYi={class:"chat-container"},gYi={class:"input-container"},mYi={class:"action-bar"},vYi={class:"action-left"},bYi={class:"action-btn danger"},yYi=["disabled"],wYi=100,CYi=_t({__name:"index",props:xs({sendApi:{},options:{default:()=>[]},showClearBtn:{type:Boolean,default:!1},canSend:{type:Boolean,default:!0},enterToSend:{type:Boolean,default:!0},autoScroll:{type:Boolean,default:!1}},{modelValue:{default:[]},modelModifiers:{}}),emits:xs(["clean"],["update:modelValue"]),setup(e,{expose:t,emit:n}){const o=be(null),r=ec(e,"modelValue"),l=e,a=n,s=be(""),c=be(null),u=be(null);let d=!0;function h(S){if(S.key==="Enter"&&!S.shiftKey){if(S.preventDefault(),!l.canSend){$i.warning({content:"请等待消息响应完成",duration:1});return}w()}}function k(){o.value&&l.enterToSend&&(o.value.removeEventListener("keydown",h),o.value.addEventListener("keydown",h))}function m(){var S;(S=o.value)==null||S.removeEventListener("keydown",h)}Ur(m);function b({scrollTop:S}){if(!u.value||!c.value)return;const E=u.value.wrapRef;if(!E)return;const M=c.value.scrollHeight,T=E.clientHeight;d=M-S-T{var S;return(S=c.value)==null?void 0:S.clientHeight},()=>{l.autoScroll&&d&&g()});function g(){bt(()=>{u.value&&c.value&&(u.value.setScrollTop(c.value.scrollHeight),d=!0)})}function v(){l.autoScroll&&d&&bt(()=>{var S,E;(E=u.value)==null||E.setScrollTop(((S=c.value)==null?void 0:S.scrollHeight)??0)})}const w=sYi(L,1e3);async function L(){if(!s.value.trim()){$i.warning({content:"请输入内容",duration:1});return}const S=s.value;s.value="",await l.sendApi(S),g()}function x(){a("clean")}return t({scrollBottom:g,smartScrollBottom:v}),(S,E)=>{const M=q0,T=wIe,j=wi("i-clear-format"),O=V0,P=RE,B=wi("i-arrow-circle-up");return we(),Pe("div",kYi,[i(M,{class:"message-area",ref_key:"boxRef",ref:u,onScroll:b},{default:nt(()=>[he("div",{ref_key:"innerRef",ref:c,class:"message-list"},[i(L2,{name:"message"},{default:nt(()=>[(we(!0),Pe(Un,null,_o(r.value,(p,W)=>(we(),Pe("div",{key:W,class:"message-item"},[i(fYi,{sendApi:e.sendApi,msg:p},null,8,["sendApi","msg"])]))),128))]),_:1})],512)]),_:1},512),he("div",gYi,[he("div",{class:"input-wrapper",ref_key:"msgInput",ref:o},[l.options&&l.options.length?(we(),qt(T,{key:0,value:I(s),"onUpdate:value":E[0]||(E[0]=p=>Wr(s)?s.value=p:null),onFocus:k,onBlur:m,class:"message-input",placeholder:"输入 @ 选择图片进行编辑,单次限一张",autofocus:"",options:l.options},null,8,["value","options"])):Zo((we(),Pe("textarea",{key:1,spellcheck:"false",class:"message-input","onUpdate:modelValue":E[1]||(E[1]=p=>Wr(s)?s.value=p:null),placeholder:"输入消息...",onFocus:k,onBlur:m},null,544)),[[lk,I(s)]])],512),he("div",mYi,[he("div",vYi,[l.showClearBtn?(we(),qt(P,{key:0,title:"确定清空所有对话记录?","ok-text":"确定","cancel-text":"取消",onConfirm:x,placement:"topLeft"},{default:nt(()=>[i(O,{title:"清空对话"},{default:nt(()=>[he("button",bYi,[i(j,{theme:"outline",size:"20"})])]),_:1})]),_:1})):Tt("",!0)]),i(O,{title:l.canSend?"发送消息":"请等待响应完成"},{default:nt(()=>[he("button",{class:Qe(["send-btn",{disabled:!l.canSend}]),disabled:!l.canSend,onClick:E[2]||(E[2]=(...p)=>I(w)&&I(w)(...p))},[i(B,{theme:"outline",size:"24",fill:"#fff"})],10,yYi)]),_:1},8,["title"])])])])}}}),UGe=za(CYi,[["__scopeId","data-v-b28a8bb6"]]);class GGe{constructor(t,n={}){fL(this,"ws",null);fL(this,"url");fL(this,"options");fL(this,"timer",null);fL(this,"retries",0);const o=new URL(t,"ws://127.0.0.1:60000"),r=localStorage.getItem("token");r&&o.searchParams.set("token",r),this.url=o.toString(),this.options=n,this.connect()}connect(){this.ws=new WebSocket(this.url),this.ws.onopen=()=>{this.options.onOpen&&this.options.onOpen(),this.retries=0},this.ws.onmessage=t=>{this.options.onMessage&&this.options.onMessage(t.data)},this.ws.onerror=()=>{this.stopTimeout(),this.reconnect()},this.ws.onclose=t=>{this.options.onClose&&this.options.onClose(t),this.stopTimeout()}}stopTimeout(){this.timer&&(clearTimeout(this.timer),this.timer=null)}reconnect(){const t=this.options.maxRetries??10;this.retries{this.retries++,this.connect()},this.options.reconnectInterval??3e3)}send(t){this.ws&&this.ws.send(JSON.stringify(t))}close(){this.stopTimeout(),this.ws&&this.ws.close()}}const LYi={class:"contentWrap"},xYi={class:"conversation"},SYi={class:"workspace"},EYi=_t({__name:"index",setup(e){const{projectId:t}=_u($u()),n=be({}),o={AI1:"故事师",AI2:"大纲师",director:"导演",main:"助手"},r={AI1:"调用故事师",AI2:"调用大纲师",director:"调用导演",getChapter:"获取章节内容",getStoryline:"获取故事线",saveStoryline:"保存故事线",deleteStoryline:"删除故事线",getOutline:"获取大纲",saveOutline:"保存大纲",updateOutline:"更新大纲",deleteOutline:"删除大纲",generateAssets:"生成资产"},l=be("storyline"),a=be(""),s=be([]);be([]),be(!1),be([]),be();const c=be(),u=be(),d=be(!0),h={msgId:null,source:null};function k(){h.msgId=null,h.source=null}function m(K,Z){return h.source!==K&&k(),h.msgId||(H(),h.msgId=M0(),h.source=K,g.value.push({id:h.msgId,identity:"assistant",role:Z,data:[{type:"text",text:""}]})),h.msgId}function b(K){var te;if(!h.msgId||!K)return;const Z=g.value.find($=>$.id===h.msgId);Z&&Array.isArray(Z.data)&&Z.data[0]&&"text"in Z.data[0]&&(Z.data[0].text+=K,(te=u.value)==null||te.smartScrollBottom())}const g=G(()=>{const K=n.value[t.value];return(!K||K.length==0)&&(n.value[t.value]=[{id:M0(),identity:"assistant",role:"助手",data:[{type:"text",text:"欢迎使用Toonflow!请选择小说后开始AI对话来生成小说故事线与大纲。如您需要我开始为您工作您可以跟我说开始"}]}]),n.value[t.value]});async function v(){n.value[t.value]=[]}let w=null,L=null,x=!1;async function S(){var Z;const K=await cr.post("/outline/getStoryline",{projectId:t.value});a.value=(Z=K.data)==null?void 0:Z.content}async function E(){try{await cr.post("/outline/updateStoryline",{projectId:t.value,content:a.value}),await S(),$i.success("保存成功")}catch{$i.error("保存失败")}}function M(){w=new GGe(`/outline/agentsOutline?projectId=${t.value}`,{onOpen:()=>{console.log("WebSocket 连接已建立,等待后端 init 消息...")},onMessage:T,onError:p,onClose:()=>{d.value=!0,x=!1,L=null,w=null}})}function T(K){let Z;try{Z=JSON.parse(K)}catch(te){console.error("WebSocket 消息 JSON 解析失败:",te,K),U("消息格式错误");return}try{["stream","response","response_end","subAgentStream","subAgentEnd"].includes(Z.type)&&H();const oe={init:()=>{console.log("WebSocket 初始化完成"),x=!0,L&&(console.log("发送待处理的消息:",L),w==null||w.send(L),L=null)},stream:ce=>j(ce.data),response_end:()=>{d.value=!0,k()},subAgentStream:ce=>O(ce.data),subAgentEnd:ce=>P(ce.data),toolCall:ce=>B(ce.data),transfer:ce=>{var ue;const ve=(ue=ce.data)==null?void 0:ue.to;k(),U(`${o[ve]||ve} 正在思考`)},setNovelDone:ce=>R("助手",ce.data),notice:ce=>U(ce.data),error:ce=>{d.value=!0,U(`错误:${ce.data}`)},refresh:({data:ce})=>{var ve;ce=="storyline"&&S(),ce=="outline"&&((ve=c.value)==null||ve.getData())}}[Z.type];oe?oe(Z):console.warn("未知的消息类型:",Z.type,Z)}catch(te){console.error("ws 消息处理异常:",te,Z),U("消息处理失败")}}function j(K){K&&(m("main","助手"),b(K))}function O(K){if(!K.text)return;const Z=o[K.agent]||"助手";m(K.agent,Z),b(K.text)}function P(K){var te;const Z=o[K.agent]||"助手";k(),K.agent==="AI1"?(U(`${Z}已完成,故事线已更新至右侧面板`),S(),l.value="storyline"):K.agent==="AI2"&&(U(`${Z}已完成,大纲已更新至右侧面板`),(te=c.value)==null||te.getData(),l.value="outline")}function B(K){k();const Z=K.agent==="main"?"助手":o[K.agent]||K.agent,te=r[K.name]||K.name;let $="";K.args&&(K.name==="getChapter"&&K.args.chapterNumbers?$=`章节 ${K.args.chapterNumbers.join(", ")}`:K.name==="getOutline"&&K.args.simplified!==void 0?$=K.args.simplified?"(简化版)":"(完整版)":K.name==="updateOutline"&&K.args.id?$=`大纲ID: ${K.args.id}`:K.name==="deleteOutline"&&K.args.ids?$=`ID: ${K.args.ids.join(", ")}`:["AI1","AI2","director"].includes(K.name)&&K.args.taskDescription&&($=K.args.taskDescription.length>50?K.args.taskDescription.substring(0,50)+"...":K.args.taskDescription));const oe=$?`🔧 ${Z}正在${te}:${$}`:`🔧 ${Z}正在${te}`;U(oe)}function p(K){d.value=!0,U("WebSocket连接异常,请重试"),w=null}function W(K){var Z;!w||((Z=w.ws)==null?void 0:Z.readyState)!==WebSocket.OPEN?(L=K,x=!1,M()):x?w.send(K):L=K}function R(K,Z){g.value.push({id:M0(),identity:"assistant",role:K,data:[{type:"text",text:Z}]})}function U(K){g.value.push({id:M0(),identity:"notice",data:K})}function N(){g.value.push({id:M0(),identity:"assistant",role:"助手",data:[{type:"thinking",text:"生成中..."}]})}function H(){const K=g.value.findIndex(Z=>Z.identity==="assistant"&&Array.isArray(Z.data)&&Z.data.some(te=>te.type==="thinking"));K!==-1&&g.value.splice(K,1)}async function z(K){g.value.push({id:M0(),identity:"user",data:[{type:"text",text:K}]}),d.value=!1,N(),W({type:"msg",data:{type:"user",data:K}})}ji(()=>{v(),S()}),Ur(()=>{var K;(K=w==null?void 0:w.close)==null||K.call(w)});function X(){W({type:"cleanHistory"}),n.value[t.value]=[{id:M0(),identity:"assistant",role:"助手",data:[{type:"text",text:"欢迎使用Toonflow!请选择小说后开始AI对话来生成小说故事线与大纲。如您需要我开始为您工作您可以跟我说开始"}]}]}return(K,Z)=>{const te=ey,$=O3;return we(),Pe("div",LYi,[he("div",xYi,[i(UGe,{ref_key:"chatRef",ref:u,showClearBtn:"",autoScroll:"",modelValue:I(g),"onUpdate:modelValue":Z[0]||(Z[0]=oe=>Wr(g)?g.value=oe:null),enterToSend:"",canSend:d.value,onClean:X,sendApi:z,style:{height:"100%"}},null,8,["modelValue","canSend"])]),he("div",SYi,[i($,{activeKey:l.value,"onUpdate:activeKey":Z[3]||(Z[3]=oe=>l.value=oe)},{default:nt(()=>[i(te,{key:"storyline",tab:"故事线"},{default:nt(()=>[l.value=="storyline"?(we(),qt(aYi,{key:0,modelValue:a.value,"onUpdate:modelValue":Z[1]||(Z[1]=oe=>a.value=oe),onSave:E},null,8,["modelValue"])):Tt("",!0)]),_:1}),i(te,{key:"outline",tab:"大纲"},{default:nt(()=>[l.value=="outline"?(we(),qt(qGi,{key:0,ref_key:"outlineDomRef",ref:c,modelValue:s.value,"onUpdate:modelValue":Z[2]||(Z[2]=oe=>s.value=oe)},null,8,["modelValue"])):Tt("",!0)]),_:1})]),_:1},8,["activeKey"])])])}}}),MYi=za(EYi,[["__scopeId","data-v-b612e01f"]]),AYi={class:"element-manager"},TYi={class:"header"},_Yi={class:"header-content"},jYi={class:"icon-wrapper"},OYi={key:0,class:"header-stats"},DYi={class:"stat-item"},pYi={class:"stat-value"},NYi={class:"stat-label"},RYi={class:"toolbar"},IYi={key:0,class:"tab-group"},PYi=["onClick"],WYi={class:"actions"},HYi=["disabled"],zYi=["disabled"],BYi=["disabled"],VYi={class:"content-body"},FYi={key:0,class:"script-selector"},UYi={class:"script-label"},GYi={class:"script-list"},YYi=["onClick"],ZYi={key:1,class:"empty-state"},XYi={class:"empty-icon"},qYi={class:"empty-title"},KYi={class:"empty-desc"},JYi={key:2,class:"table-wrapper"},QYi={class:"name-cell"},$Yi={class:"name-text"},eZi={class:"image-cell"},tZi={key:1,class:"no-image"},nZi={class:"desc-text"},iZi={key:1,class:"prompt-text"},oZi={key:1,class:"prompt-text"},rZi={class:"remark-text"},lZi={class:"duration-badge"},aZi={class:"action-cell"},sZi=["onClick"],cZi=["onClick"],uZi=["onClick"],dZi=_t({__name:"index",props:xs({way:{},radio:{},batch:{type:Boolean}},{modelValue:{},modelModifiers:{}}),emits:xs(["checkChange","checkAll"],["update:modelValue"]),setup(e,{expose:t,emit:n}){const{projectId:o,currentScriptId:r}=_u($u()),l=e,a=n,s=ec(e,"modelValue"),c=be(),u=be("role"),d=be(),h=be([]),k=be([]),m=be(!1),b=be(!1),g=be(!1),v=be(!1),w=be(!1),L=be(!1),x=[{label:"角色",value:"role"},{label:"场景",value:"scene"},{label:"道具",value:"props"},{label:"分镜",value:"storyboard"}],S={角色:"role",场景:"scene",分镜:"storyboard",道具:"props"},E=ve=>({role:"角色",scene:"场景",props:"道具",storyboard:"分镜"})[ve]??"角色",M=G(()=>{var ve;return(ve=x.find(ue=>ue.value===u.value))==null?void 0:ve.label}),T=G(()=>!(h.value.length===0&&u.value==="storyboard"));function j(ve){return{role:"i-user",scene:"i-pic",props:"i-gift",storyboard:"i-film"}[ve]||"i-ad-product"}async function O(ve){u.value=ve,L.value=!0;try{ve==="storyboard"?(h.value=await B(),h.value.length?(r.value=h.value[0].id,await p(r.value)):k.value=[]):await P(ve)}finally{L.value=!1}}async function P(ve){const ue=await cr.post("/assets/getAssets",{projectId:o.value,type:E(ve)});k.value=ue.data}async function B(){return(await cr.post("/assets/getStoryboard",{projectId:o.value})).data}async function p(ve){const ue=await cr.post("/storyboard/getStoryboard",{projectId:o.value,scriptId:ve});k.value=ue.data}async function W(ve){r.value=ve.id,await p(ve.id)}function R(ve){a("checkChange",ve)}function U(ve){a("checkAll",ve,u.value,r.value??-1)}function N(){d.value={id:0,name:"",intro:"",duration:0,filePath:"",type:"",prompt:"",remark:"",videoPrompt:""},m.value=!0}function H(ve){d.value={...ve},m.value=!0}function z(ve){d.value={...ve},b.value=!0}function X(ve){as.confirm({title:"确认删除",content:`确定要删除「${ve.name||"该元素"}」吗?此操作不可恢复。`,okText:"删除",cancelText:"取消",okButtonProps:{danger:!0},onOk:async()=>{await cr.post("/assets/delAssets",{id:ve.id}),O(u.value),$i.success("删除成功")}})}async function K(ve,ue,Ce=5){for(let ke=0;ke{await cr.post("/assets/updateAssets",{id:ue.id,name:ue.name,intro:ue.intro??"",type:ue.type,remark:ue.remark??"",prompt:ue.prompt,duration:Number(ue.duration)}),await cr.post("/assets/saveAssets",{id:ue.id,base64:"",filePath:ue.filePath,prompt:ue.prompt,projectId:o.value})}),$i.success("保存成功"),O(u.value)}async function te(){var ve;if(!((ve=s.value)!=null&&ve.length))return $i.warning("请至少选择一个资产");v.value=!0,await K(s.value,async ue=>{try{const Ce=await cr.post("/assets/polishPrompt",{projectId:o.value,assetsId:ue.id,type:S[ue.type]??"props",name:ue.name,describe:ue.intro}),ke=s.value.findIndex(xe=>xe.id===Ce.data.assetsId);ke!==-1&&(s.value[ke].prompt=Ce.data.prompt)}catch(Ce){$i.error(Ce.message??"提示词生成失败")}}),v.value=!1,$i.success("提示词批量生成成功")}async function $(){var ve;if(!((ve=s.value)!=null&&ve.length))return $i.warning("请至少选择一个资产");w.value=!0,await K(s.value,async ue=>{try{const Ce=await cr.post("/assets/generateAssets",{type:S[ue.type]??"props",projectId:o.value,name:ue.name,prompt:ue.prompt,id:ue.id}),ke=s.value.findIndex(xe=>xe.id===Ce.data.assetsId);ke!==-1&&(s.value[ke].filePath=Ce.data.path)}catch{}}),w.value=!1,$i.success("图片批量生成成功")}function oe(){var ve,ue;return l.way==="radio"?(ve=c.value)==null?void 0:ve.getRadioRecord(!0):(ue=c.value)==null?void 0:ue.getCheckboxRecords(!0)}function ce(ve,ue){var Ce;(Ce=c.value)==null||Ce.setCheckboxRow(ve,ue)}return t({getSelectData:oe,changeChecked:ce}),ji(()=>{l.radio&&(u.value=l.radio),O(u.value)}),gt(g,ve=>{ve||O(u.value)}),(ve,ue)=>{const Ce=wi("i-ad-product"),ke=wi("i-magic"),xe=wi("i-pic"),le=wi("i-layers"),ye=wi("i-plus"),ae=wi("i-editor"),ee=wi("vxe-column"),fe=I1,ge=e1,Ee=wi("i-pencil"),Le=wi("i-delete"),pe=wi("vxe-table"),We=nk;return we(),Pe("div",AYi,[he("div",TYi,[he("div",_Yi,[he("div",jYi,[i(Ce,{size:24})]),ue[6]||(ue[6]=he("div",{class:"header-text"},[he("h3",{class:"title"},"资产管理"),he("p",{class:"subtitle"},"管理场景、角色、道具、分镜资源库")],-1))]),I(k).length?(we(),Pe("div",OYi,[he("div",DYi,[he("span",pYi,on(I(k).length),1),he("span",NYi,on(I(M))+"数量",1)])])):Tt("",!0)]),he("div",RYi,[l.radio?Tt("",!0):(we(),Pe("div",IYi,[(we(),Pe(Un,null,_o(x,Ie=>he("button",{key:Ie.value,class:Qe(["tab-btn",{active:I(u)===Ie.value}]),onClick:Be=>O(Ie.value)},[(we(),qt(lr(j(Ie.value)),{size:16})),he("span",null,on(Ie.label),1)],10,PYi)),64))])),he("div",WYi,[l.batch?(we(),Pe(Un,{key:0},[he("button",{class:"action-btn secondary",disabled:I(v),onClick:te},[i(ke,{size:16}),he("span",null,on(I(v)?"处理中...":"批量润色"),1)],8,HYi),he("button",{class:"action-btn primary",disabled:I(w),onClick:$},[i(xe,{size:16}),he("span",null,on(I(w)?"生成中...":"批量生成图片"),1)],8,zYi)],64)):l.way?Tt("",!0):(we(),Pe(Un,{key:1},[he("button",{class:"action-btn secondary",onClick:ue[0]||(ue[0]=Ie=>g.value=!0)},[i(le,{size:16}),ue[7]||(ue[7]=he("span",null,"批量生成",-1))]),he("button",{class:"action-btn primary",disabled:!I(T),onClick:N},[i(ye,{size:16}),he("span",null,"新增"+on(I(M)),1)],8,BYi)],64))])]),he("div",VYi,[i(We,{spinning:I(L),tip:"加载中..."},{default:nt(()=>[I(u)==="storyboard"&&I(h).length?(we(),Pe("div",FYi,[he("div",UYi,[i(ae,{size:16}),ue[8]||(ue[8]=he("span",null,"选择剧本",-1))]),he("div",GYi,[(we(!0),Pe(Un,null,_o(I(h),Ie=>(we(),Pe("button",{key:Ie.id,class:Qe(["script-btn",{active:I(r)===Ie.id}]),onClick:Be=>W(Ie)},on(Ie.name),11,YYi))),128))])])):Tt("",!0),!I(L)&&!I(k).length?(we(),Pe("div",ZYi,[he("div",XYi,[i(Ce,{size:56})]),he("h3",qYi,"暂无"+on(I(M))+"元素",1),he("p",KYi,'点击右上角"新增'+on(I(M))+'"按钮添加,或根据剧本批量生成',1),!l.way&&I(T)?(we(),Pe("button",{key:0,class:"empty-action",onClick:N},[i(ye,{size:18}),he("span",null,"新增"+on(I(M)),1)])):Tt("",!0)])):(we(),Pe("div",JYi,[i(pe,{ref_key:"tableRef",ref:c,data:I(k),"cell-config":{height:l.batch?300:140},"row-config":{keyField:"id",resizable:!0},"radio-config":{reserve:!0},"checkbox-config":{reserve:!0},round:"",stripe:"",onCheckboxAll:U,onCheckboxChange:R},{default:nt(()=>[l.way?(we(),qt(ee,{key:0,type:l.way,title:"选择",width:"80",align:"center"},null,8,["type"])):Tt("",!0),i(ee,{title:"名称",field:"name",width:"160","show-overflow":"title","edit-render":{name:"input"}},{default:nt(({row:Ie})=>[he("div",QYi,[he("span",$Yi,on(Ie.name||"未命名"),1)])]),_:1}),i(ee,{title:"预览图",width:"140",align:"center"},{default:nt(({row:Ie})=>[he("div",eZi,[Ie.filePath?(we(),qt(fe,{key:0,src:Ie.filePath,fallback:I(Vm),class:"preview-image"},null,8,["src","fallback"])):(we(),Pe("div",tZi,[i(xe,{size:24}),ue[9]||(ue[9]=he("span",null,"待生成",-1))]))])]),_:1}),i(ee,{title:"描述",field:"intro","min-width":"180","show-overflow":"title","edit-render":{name:"textarea"}},{default:nt(({row:Ie})=>[he("p",nZi,on(Ie.intro||"暂无描述"),1)]),_:1}),i(ee,{title:"生图提示词",field:"prompt","min-width":"200","show-overflow":"title"},{default:nt(({row:Ie})=>[l.batch?(we(),qt(ge,{key:0,value:Ie.prompt,"onUpdate:value":Be=>Ie.prompt=Be,"auto-size":{minRows:3,maxRows:10},placeholder:"输入生图提示词...",class:"prompt-textarea"},null,8,["value","onUpdate:value"])):(we(),Pe("p",iZi,on(Ie.prompt||"暂无提示词"),1))]),_:1}),I(u)==="storyboard"?(we(),qt(ee,{key:1,title:"视频提示词",field:"videoPrompt","min-width":"200","show-overflow":"title"},{default:nt(({row:Ie})=>[l.batch?(we(),qt(ge,{key:0,value:Ie.videoPrompt,"onUpdate:value":Be=>Ie.videoPrompt=Be,"auto-size":{minRows:3,maxRows:10},placeholder:"输入视频提示词...",class:"prompt-textarea"},null,8,["value","onUpdate:value"])):(we(),Pe("p",oZi,on(Ie.videoPrompt||"暂无提示词"),1))]),_:1})):Tt("",!0),i(ee,{title:"备注",field:"remark",width:"150","edit-render":{name:"textarea"}},{default:nt(({row:Ie})=>[he("p",rZi,on(Ie.remark||"-"),1)]),_:1}),I(u)==="storyboard"?(we(),qt(ee,{key:2,title:"时长",field:"duration",width:"100",align:"center"},{default:nt(({row:Ie})=>[he("span",lZi,on(Ie.duration||0)+"s",1)]),_:1})):Tt("",!0),l.batch?Tt("",!0):(we(),qt(ee,{key:3,title:"操作",width:"140",fixed:"right",align:"center"},{default:nt(({row:Ie})=>[he("div",aZi,[he("button",{class:"icon-btn edit",title:"编辑",onClick:Be=>H(Ie)},[i(Ee,{size:18})],8,sZi),he("button",{class:"icon-btn magic",title:"AI生成",onClick:Be=>z(Ie)},[i(ke,{size:18})],8,cZi),he("button",{class:"icon-btn delete",title:"删除",onClick:Be=>X(Ie)},[i(Le,{size:18})],8,uZi)])]),_:1}))]),_:1},8,["data","cell-config"])]))]),_:1},8,["spinning"])]),i(FGe,{modelValue:I(m),"onUpdate:modelValue":ue[1]||(ue[1]=Ie=>Wr(m)?m.value=Ie:null),type:I(u),scriptId:I(r),data:I(d),onUpdate:ue[2]||(ue[2]=Ie=>O(I(u)))},null,8,["modelValue","type","scriptId","data"]),i(Nfe,{modelValue:I(b),"onUpdate:modelValue":ue[3]||(ue[3]=Ie=>Wr(b)?b.value=Ie:null),data:I(d),onUpdate:ue[4]||(ue[4]=Ie=>O(I(u)))},null,8,["modelValue","data"]),tD?(we(),qt(tD,{key:0,modelValue:I(g),"onUpdate:modelValue":ue[5]||(ue[5]=Ie=>Wr(g)?g.value=Ie:null),data:I(k),type:I(u),"script-id":I(r)??-1,onSave:Z},null,8,["modelValue","data","type","script-id"])):Tt("",!0)])}}}),hZi=za(dZi,[["__scopeId","data-v-09e0f047"]]),hSe="data:image/png;base64,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";function ym(e){const t={};return new Proxy(t,{get(n,o){return o in n?n[o]:e},set(n,o,r){return n[o]=r,!0}})}const fZi=dce("loadingStore",()=>{const e=be(ym(!1)),t=be(ym(!1)),n=be(ym(!1)),o=be(ym(!1)),r=be(ym(!1)),l=be(ym(!1)),a=be(ym(!1)),s=be(ym(!1)),c=be(ym(!1));return{videoGenerateloading:e,assetGenerateloading:t,assetGeneratePromptloading:n,scriptGenerateLoading:o,storeboardGenerateLoading:r,batchGenerateImageLoading:l,batchGenerateStoryboardImageLoading:a,batchGeneratePromptLoading:s,batchGenerateStoryboardPromptLoading:c}},{persist:!1}),kZi={class:"storyboard"},gZi={class:"summary-header"},mZi={class:"summary-left"},vZi={class:"icon-wrapper"},bZi={key:0,class:"count-badge"},yZi=["disabled"],wZi={class:"data-content"},CZi={class:"tabs-wrapper"},LZi={class:"tab-content"},xZi={class:"section-card"},SZi={class:"section-header"},EZi={class:"section-title"},MZi={class:"section-body"},AZi={key:0,class:"element-grid"},TZi=["onClick"],_Zi={class:"element-cover"},jZi={class:"element-overlay"},OZi={class:"element-info"},DZi={class:"element-name"},pZi={class:"element-type"},NZi={class:"type-tag"},RZi={key:1,class:"empty-state"},IZi={class:"empty-icon"},PZi={class:"section-card script-section"},WZi={class:"section-header"},HZi={class:"section-title"},zZi={key:0,class:"word-count"},BZi={class:"section-body"},VZi={key:0,class:"loading-state"},FZi={class:"loading-time"},UZi={class:"notebook"},GZi={class:"line-numbers"},YZi=["onUpdate:modelValue","onInput","onScroll"],ZZi={class:"script-footer"},XZi={key:2,class:"empty-state"},qZi={class:"empty-icon"},KZi=28,fSe=20,JZi=_t({__name:"scriptView",props:{modelValue:{},modelModifiers:{},scriptId:{default:null},scriptIdModifiers:{}},emits:xs(["change","getScriptData"],["update:modelValue","update:scriptId"]),setup(e,{emit:t}){const{projectId:n}=_u($u()),o=t,r=ec(e,"modelValue"),l=ec(e,"scriptId"),{scriptGenerateLoading:a}=_u(fZi()),s=be(!1),c=be(!1),u=be(!1),d=be({}),h=be({}),k=be(),m=be({}),b=be(null),g=G(()=>{var U;return(U=r.value)==null?void 0:U.find(N=>N.id===l.value)}),v=G(()=>{var U;return((U=b.value)==null?void 0:U.element)??[]});Ur(()=>{Object.values(h.value).forEach(clearInterval)});function w(U,N){U&&(m.value[N]=U,bt(()=>{L(U)}))}function L(U){U.style.height="auto";const N=Math.max(U.scrollHeight,fSe*KZi);U.style.height=`${N}px`}function x(U){const N=U?U.split(`
`).length:1;return Math.max(N,fSe)}function S(U,N){const H=U.target;L(H)}function E(U,N){var X;const H=U.target,z=(X=H.parentElement)==null?void 0:X.querySelector(".line-numbers");z&&(z.scrollTop=H.scrollTop)}function M(U){const N=Date.now();d.value[U]=0,h.value[U]=setInterval(()=>{d.value[U]=Math.floor((Date.now()-N)/1e3)},1e3)}function T(U){clearInterval(h.value[U]),delete h.value[U],delete d.value[U]}async function j(){try{const{data:U}=await cr.post("/script/geScriptApi",{projectId:n.value});r.value=U}catch{$i.error("获取剧本列表失败")}}async function O(){const U=g.value;if(!U)return;const{id:N,outlineId:H}=U;s.value=!0,a.value[N]=!0,M(N);try{await cr.post("/script/generateScriptApi",{outlineId:H,scriptId:N}),$i.success("生成剧本成功"),o("getScriptData")}catch(z){$i.error(z.message||"生成剧本失败")}finally{s.value=!1,a.value[N]=!1,T(N)}}async function P(){const U=g.value;if(U)try{await cr.post("/script/generateScriptSave",{outlineId:U.outlineId,scriptId:U.id,content:U.content}),$i.success("保存成功")}catch{$i.error("保存失败")}}function B(U){k.value={...U},c.value=!0}async function p(U){b.value=U,await bt(),u.value=!0}function W(U){o("change",Number(U))}async function R(U){const N=U.map(z=>Promise.all([cr.post("/assets/updateAssets",{id:z.id,name:z.name,intro:z.intro,type:z.type,prompt:z.prompt}),cr.post("/assets/saveAssets",{id:z.id,filePath:z.filePath,projectId:n.value,prompt:z.prompt})]).catch(X=>console.error(`保存失败,id: ${z.id}`,X)));await Promise.all(N);const H=[...new Set(U.map(z=>z.type))];await Promise.all(H.map(z=>cr.post("/assets/getAssets",{projectId:n.value,type:z}))),await j()}return gt(r,async U=>{U!=null&&U.length&&(l.value=U[0].id,await bt(),W(l.value),Object.entries(m.value).forEach(([N,H])=>{H&&L(H)}))},{immediate:!0}),gt(l,async()=>{await bt();const U=m.value[l.value];U&&L(U)}),(U,N)=>{var ke,xe;const H=wi("i-file-text"),z=wi("i-optimize"),X=wi("i-peoples"),K=wi("i-lightning"),Z=Xa,te=I1,$=wi("i-edit"),oe=wi("i-inbox"),ce=wi("i-text"),ve=wi("i-save"),ue=ey,Ce=O3;return we(),Pe("div",kZi,[he("div",gZi,[he("div",mZi,[he("div",vZi,[i(H,{size:20,class:"icon"})]),N[4]||(N[4]=he("span",{class:"summary-title"},"剧本统计",-1)),(ke=r.value)!=null&&ke.length?(we(),Pe("span",bZi,on(r.value.length)+" 集",1)):Tt("",!0)]),he("button",{onClick:O,disabled:s.value,class:"generate-btn"},[s.value?(we(),Pe(Un,{key:0},[N[5]||(N[5]=he("span",{class:"btn-spinner"},null,-1)),N[6]||(N[6]=he("span",null,"生成中...",-1))],64)):(we(),Pe(Un,{key:1},[i(z,{size:18}),N[7]||(N[7]=he("span",null,"生成剧本",-1))],64))],8,yZi)]),he("div",wZi,[he("div",CZi,[i(Ce,{activeKey:l.value,"onUpdate:activeKey":N[1]||(N[1]=le=>l.value=le),onChange:W,type:"card"},{default:nt(()=>[(we(!0),Pe(Un,null,_o(r.value,le=>(we(),qt(ue,{key:le.id,tab:le.name},{default:nt(()=>{var ye,ae;return[he("div",LZi,[he("div",xZi,[he("div",SZi,[he("div",EZi,[i(X,{size:18}),N[8]||(N[8]=he("span",null,"关联资产",-1))]),(ye=le.element)!=null&&ye.length?(we(),qt(Z,{key:0,onClick:ee=>p(le),disabled:s.value,size:"small",class:"batch-btn"},{default:nt(()=>[i(K,{size:14}),N[9]||(N[9]=mi(" 批量生成 ",-1))]),_:1},8,["onClick","disabled"])):Tt("",!0)]),he("div",MZi,[(ae=le.element)!=null&&ae.length?(we(),Pe("div",AZi,[(we(!0),Pe(Un,null,_o(le.element,ee=>(we(),Pe("div",{key:ee.id,class:"element-card",onClick:fe=>B(ee)},[he("div",_Zi,[i(te,{onClick:N[0]||(N[0]=yo(()=>{},["stop"])),class:"element-img",src:ee.filePath||I(hSe),fallback:I(hSe),preview:!1},null,8,["src","fallback"]),he("div",jZi,[i($,{size:16})])]),he("div",OZi,[he("div",DZi,on(ee.name),1),he("div",pZi,[he("span",NZi,on(ee.type),1)])])],8,TZi))),128))])):(we(),Pe("div",RZi,[he("div",IZi,[i(oe,{size:32})]),N[10]||(N[10]=he("p",{class:"empty-text"},"该集暂无使用的资产",-1))]))])]),he("div",PZi,[he("div",WZi,[he("div",HZi,[i(ce,{size:18}),N[11]||(N[11]=he("span",null,"剧本内容",-1))]),le.content&&!I(a)[le.id]?(we(),Pe("div",zZi,[i(H,{size:14}),he("span",null,on(le.content.length)+" 字",1)])):Tt("",!0)]),he("div",BZi,[I(a)[le.id]?(we(),Pe("div",VZi,[N[12]||(N[12]=he("div",{class:"loading-spinner"},null,-1)),N[13]||(N[13]=he("p",{class:"loading-text"},"剧本生成中...",-1)),he("p",FZi,"已用时 "+on(d.value[le.id]||0)+" 秒",1)])):le.content?(we(),Pe(Un,{key:1},[he("div",UZi,[he("div",GZi,[(we(!0),Pe(Un,null,_o(x(le.content),ee=>(we(),Pe("div",{key:ee,class:"line-number"},on(ee),1))),128))]),Zo(he("textarea",{"onUpdate:modelValue":ee=>le.content=ee,class:"notebook-textarea",placeholder:"请输入剧本内容...",spellcheck:"false",onInput:ee=>S(ee,le),onScroll:ee=>E(ee,le.id),ref_for:!0,ref:ee=>w(ee,le.id)},null,40,YZi),[[lk,le.content]])]),he("div",ZZi,[N[15]||(N[15]=he("div",{class:"footer-info"},[he("span",{class:"update-hint"},"编辑后请记得保存")],-1)),i(Z,{type:"primary",class:"save-btn",onClick:P},{default:nt(()=>[i(ve,{size:16}),N[14]||(N[14]=mi(" 保存剧本 ",-1))]),_:1})])],64)):(we(),Pe("div",XZi,[he("div",qZi,[i(H,{size:32})]),N[16]||(N[16]=he("p",{class:"empty-text"},"该集暂无剧本内容",-1)),N[17]||(N[17]=he("p",{class:"empty-hint"},"点击上方按钮生成剧本",-1))]))])])])]}),_:2},1032,["tab"]))),128))]),_:1},8,["activeKey"])])]),i(Nfe,{modelValue:c.value,"onUpdate:modelValue":N[2]||(N[2]=le=>c.value=le),data:k.value,onUpdate:j},null,8,["modelValue","data"]),u.value?(we(),qt(tD,{key:0,modelValue:u.value,"onUpdate:modelValue":N[3]||(N[3]=le=>u.value=le),data:v.value,type:"role",scriptId:((xe=b.value)==null?void 0:xe.id)??-1,onSave:R},null,8,["modelValue","data","scriptId"])):Tt("",!0)])}}}),QZi=za(JZi,[["__scopeId","data-v-9795f22e"]]),$Zi={class:"image-card-wrapper"},eXi={class:"image-card-wrapper"},tXi={class:"image-actions"},nXi=["onClick"],iXi={class:"image-actions"},oXi={key:0,class:"selected-overlay"},rXi={style:{height:"700px","overflow-y":"auto"}},lXi=_t({__name:"index",props:{generateImage:{type:Function,default:async()=>""},generatePrompt:{type:Function,default:async()=>"生成提示词"}},emits:["save"],setup(e,{expose:t,emit:n}){const o=n,{projectId:r}=_u($u()),l=be(!1),a=be(!1),s=be("manual"),c=be(!1),u=be(null),d=be(null),h=be(-1),k=be(""),m=be(!1);gt(a,p=>{p&&(l.value=!1)});const b=be({id:-1,filePath:"",otherImgs:[],prompt:"",editPrompt:"",intro:"",generateImg:[]}),g=G(()=>{var R;const p=[];let W=1;return b.value.filePath&&(p.push({value:`图${W}`,label:`图${W}`}),W++),(R=b.value.otherImgs)==null||R.forEach(()=>{p.push({value:`图${W}`,label:`图${W}`}),W++}),p});function v(p){m.value=p}function w(p){k.value=p,v(!0)}async function L(){c.value=!0;try{const p=await new Promise(W=>{d.value=W});b.value.otherImgs.push({id:p.id,filePath:p.filePath})}catch{}}function x(){d.value=null}function S(){if(u.value&&d.value){const p=u.value.getSelectData();d.value(p),c.value=!1,d.value=null}}function E(p){b.value.otherImgs.splice(p,1)}function M(p){b.value.generateImg.splice(p,1),h.value>=b.value.generateImg.length&&(h.value=b.value.generateImg.length-1)}async function T(){var W;if(l.value=!0,b.value.editPrompt.length<5){$i.error("编辑指令必须大于5个字"),l.value=!1;return}const p={"@图1":b.value.id&&b.value.id!==-1?b.value.id:b.value.filePath};b.value.otherImgs.forEach((R,U)=>{p[`@图${U+2}`]=R.id});try{const R=await cr.post("/storyboard/generateStoryboardApi",{filePath:p,prompt:b.value.editPrompt,projectId:r.value,assetsId:b.value.id});b.value.generateImg.push({filePath:R.data.url,id:((W=R.data)==null?void 0:W.id)??void 0}),$i.success("图片生成成功")}catch{}finally{l.value=!1}}function j(p){b.value=JSON.parse(JSON.stringify(p)),b.value.generateImg=[{filePath:b.value.filePath},...b.value.generateImg||[]],h.value=b.value.generateImg.findIndex(W=>W.filePath===p.filePath),a.value=!0}function O(){if(h.value<0||!b.value.generateImg[h.value]){$i.warning("请先选择一张图片");return}o("save",{id:b.value.id,filePath:b.value.generateImg[h.value].filePath,prompt:b.value.editPrompt}),a.value=!1}function P(){h.value=-1}function B(){a.value=!1}return t({doFusionEdit:j}),(p,W)=>{const R=IE,U=wi("i-close"),N=Xa,H=FIt,z=I1,X=Rf,K=LRe,Z=OIe,te=M7,$=wi("i-close-one"),oe=wi("i-preview-open"),ce=wi("i-upload-picture"),ve=wIe,ue=NU,Ce=RE,ke=wi("i-check"),xe=O0,le=as;return we(),Pe(Un,null,[i(le,{open:a.value,"onUpdate:open":W[2]||(W[2]=ye=>a.value=ye),width:"60vw",closable:!1,maskClosable:!1,wrapClassName:"no-header-margin",dialogClass:"custom-modal",afterClose:P},{title:nt(()=>[i(H,{justify:"space-between",align:"center",class:"modal-header"},{default:nt(()=>[i(R,{level:4,style:{margin:"0"}},{default:nt(()=>[...W[4]||(W[4]=[mi("镜头编辑器",-1)])]),_:1}),i(N,{type:"text",onClick:B},{icon:nt(()=>[i(U,{theme:"outline",size:"18",fill:"#9913FA"})]),_:1})]),_:1})]),footer:nt(()=>[i(H,{justify:"end",gap:"middle",class:"modal-footer"},{default:nt(()=>[i(N,{size:"large",onClick:B},{default:nt(()=>[...W[7]||(W[7]=[mi("取消",-1)])]),_:1}),i(N,{size:"large",type:"primary",onClick:O},{default:nt(()=>[...W[8]||(W[8]=[mi("保存",-1)])]),_:1})]),_:1})]),default:nt(()=>[i(H,{class:"modal-content"},{default:nt(()=>[s.value==="manual"?(we(),qt(H,{key:0,vertical:"",gap:"middle",class:"left-panel"},{default:nt(()=>[i(te,{title:"镜头图",bordered:!1,size:"small"},{default:nt(()=>[i(Z,{gutter:[12,12]},{default:nt(()=>[i(K,{span:6},{default:nt(()=>[he("div",$Zi,[i(z,{src:b.value.filePath||"",fallback:I(Vm),class:"scene-image"},null,8,["src","fallback"]),i(X,{color:"cyan",class:"image-tag"},{default:nt(()=>[...W[5]||(W[5]=[mi("图 1",-1)])]),_:1})])]),_:1})]),_:1})]),_:1}),i(te,{title:"其他",bordered:!1,size:"small"},{default:nt(()=>[i(Z,{gutter:[12,12]},{default:nt(()=>[(we(!0),Pe(Un,null,_o(b.value.otherImgs,(ye,ae)=>(we(),qt(K,{span:6,key:ae},{default:nt(()=>[he("div",eXi,[i(z,{preview:!1,src:ye.filePath||"",fallback:I(Vm),class:"scene-image"},null,8,["src","fallback"]),he("div",tXi,[i(N,{type:"text",size:"small",danger:"",onClick:yo(ee=>E(ae),["stop"])},{icon:nt(()=>[i($,{theme:"outline",size:"16",fill:"red"})]),_:1},8,["onClick"]),ye.filePath?(we(),qt(N,{key:0,type:"text",size:"small",onClick:yo(ee=>w(ye.filePath),["stop"])},{icon:nt(()=>[i(oe,{theme:"outline",size:"16",fill:"#9913FA"})]),_:1},8,["onClick"])):Tt("",!0)]),i(X,{color:"cyan",class:"image-tag"},{default:nt(()=>[mi("图 "+on(ae+2),1)]),_:2},1024)])]),_:2},1024))),128)),i(K,{span:6},{default:nt(()=>[he("div",{class:"upload-card",onClick:L},[i(ce,{theme:"outline",size:"36",fill:"#9810fa"})])]),_:1})]),_:1})]),_:1}),i(te,{title:"编辑指令",bordered:!1,size:"small"},{default:nt(()=>[i(ve,{value:b.value.editPrompt,"onUpdate:value":W[0]||(W[0]=ye=>b.value.editPrompt=ye),rows:3,placeholder:"请输入编辑指令,您可以通过@来引用其他图像",options:g.value},null,8,["value","options"]),i(N,{type:"primary",block:"",style:{"margin-top":"12px"},loading:l.value,onClick:T},{default:nt(()=>[...W[6]||(W[6]=[mi("生成图片",-1)])]),_:1},8,["loading"])]),_:1})]),_:1})):Tt("",!0),s.value==="manual"?(we(),qt(ue,{key:1,type:"vertical",style:{height:"100%"}})):Tt("",!0),i(H,{vertical:"",class:"middle-panel"},{default:nt(()=>[b.value.prompt?(we(),qt(te,{key:0,title:"镜头提示词",bordered:!1,size:"small",style:{"margin-bottom":"20px"}},{default:nt(()=>[mi(on(b.value.prompt),1)]),_:1})):Tt("",!0),i(te,{title:"生成结果",bordered:!1,size:"small"},{default:nt(()=>[b.value.generateImg&&b.value.generateImg.length>0?(we(),qt(Z,{key:0,gutter:[12,12]},{default:nt(()=>[(we(!0),Pe(Un,null,_o(b.value.generateImg,(ye,ae)=>(we(),qt(K,{span:8,key:ae},{default:nt(()=>[he("div",{class:Qe(["image-card-wrapper",{"image-selected":h.value===ae}]),onClick:ee=>h.value=ae},[i(z,{preview:!1,src:ye.filePath||"",fallback:I(Vm),class:"scene-image"},null,8,["src","fallback"]),he("div",iXi,[i(Ce,{title:"确定要删除这张图片吗?","ok-text":"确定","cancel-text":"取消",onConfirm:ee=>M(ae)},{default:nt(()=>[i(N,{type:"text",size:"small",danger:"",onClick:W[1]||(W[1]=yo(()=>{},["stop"]))},{icon:nt(()=>[i($,{theme:"outline",size:"16",fill:"#E60076"})]),_:1})]),_:1},8,["onConfirm"]),ye.filePath?(we(),qt(N,{key:0,type:"text",size:"small",onClick:yo(ee=>w(ye.filePath),["stop"])},{icon:nt(()=>[i(oe,{theme:"outline",size:"16",fill:"#9913FA"})]),_:1},8,["onClick"])):Tt("",!0)]),h.value===ae?(we(),Pe("div",oXi,[i(ke,{theme:"outline",size:"70",fill:"#4deb23",strokeLinejoin:"bevel"})])):Tt("",!0)],10,nXi)]),_:2},1024))),128))]),_:1})):(we(),qt(xe,{key:1,description:"请先生成图片"}))]),_:1})]),_:1})]),_:1})]),_:1},8,["open"]),i(z,{width:200,style:{display:"none"},preview:{visible:m.value,onVisibleChange:v},src:k.value||""},null,8,["preview","src"]),i(le,{open:c.value,"onUpdate:open":W[3]||(W[3]=ye=>c.value=ye),width:"60%",closable:!1,onOk:S,onCancel:x},{default:nt(()=>[he("div",rXi,[c.value?(we(),qt(GZ,{key:0,way:"radio",ref_key:"mainElementRef",ref:u},null,512)):Tt("",!0)])]),_:1},8,["open"])],64)}}}),YGe=za(lXi,[["__scopeId","data-v-090152be"]]),aXi=["data-id"],sXi=["onMousedown"],cXi=["title"],uXi={class:"fragmentContent"},dXi={class:"f",style:{gap:"6px"}},hXi={class:"tag"},fXi=["src","onClick"],kXi=["title","onClick"],gXi=["onClick"],mXi={class:"viewer-prompt"},vXi={__name:"draggableCanvas",props:{modelValue:{type:Array,required:!0},generatingIds:{type:[Array,Set],default:()=>[]}},emits:["update:modelValue","generateImage","replaceShot"],setup(e,{expose:t,emit:n}){const o=be(null),r=e,l=n,a=W=>r.generatingIds instanceof Set?r.generatingIds.has(W):Array.isArray(r.generatingIds)&&r.generatingIds.includes(W),s={segmentId:null,cellId:null};function c(W,R){s.segmentId=R,s.cellId=W.id,o.value.doFusionEdit({id:-1,filePath:W.src,otherImgs:[],prompt:W.prompt,editPrompt:"@图1 进行细节优化",intro:"",scriptId:-1,generateImg:[]})}async function u(W){if(s.segmentId&&s.cellId){let R;const U=r.modelValue.map(N=>{if(N.segmentId===s.segmentId){const H=N.cells.map(z=>z.id===s.cellId?(R={...z,src:W.filePath},{...z,src:W.filePath}):z);return{...N,cells:H}}return N});l("update:modelValue",U),l("replaceShot",{segmentId:s.segmentId,cellId:s.cellId,cell:R}),s.cellId=null,s.segmentId=null}}const d=be(null),h=be(null),k=be({x:0,y:0,scale:1,isDragging:!1,startX:0,startY:0,minScale:.2,maxScale:5}),m=be({draggingId:null,startX:0,startY:0,gridStartX:0,gridStartY:0,isActive:!1}),b=W=>{let R,U;return W<=2?(R=W,U=1):W<=4?(R=2,U=Math.ceil(W/2)):(R=3,U=Math.ceil(W/3)),{gridTemplateColumns:`repeat(${R}, max-content)`,gridTemplateRows:`repeat(${U}, 150px)`}},g=G(()=>{const W=20*k.value.scale;return{backgroundSize:`${W}px ${W}px`,backgroundPosition:`${k.value.x}px ${k.value.y}px`}}),v=G(()=>({transform:`translate(${k.value.x}px, ${k.value.y}px) scale(${k.value.scale})`})),w=W=>{(W.target===d.value||W.target===h.value)&&(k.value.isDragging=!0,k.value.startX=W.clientX-k.value.x,k.value.startY=W.clientY-k.value.y)},L=(W,R)=>{m.value.draggingId=R.id||R.segmentId,m.value.startX=W.clientX,m.value.startY=W.clientY,m.value.gridStartX=R.x,m.value.gridStartY=R.y,m.value.isActive=!0,W.stopPropagation()},x=W=>{const R=W.deltaY>0?-.1:.1,U=Math.max(k.value.minScale,Math.min(k.value.maxScale,k.value.scale+R));if(U===k.value.scale)return;const N=d.value.getBoundingClientRect(),H=W.clientX-N.left,z=W.clientY-N.top,X=U/k.value.scale;k.value.x=H-(H-k.value.x)*X,k.value.y=z-(z-k.value.y)*X,k.value.scale=U};t({focusOnGrid:(W,R=300)=>{var oe;const U=r.modelValue.find(ce=>(ce.id||ce.segmentId)===W),N=(oe=h.value)==null?void 0:oe.querySelector(`[data-id="${W}"]`);if(!U||!N||!d.value)return;const H=d.value.getBoundingClientRect(),z=H.width/2-(U.x+N.offsetWidth/2)*k.value.scale,X=H.height/2-(U.y+N.offsetHeight/2)*k.value.scale,K=k.value.x,Z=k.value.y,te=performance.now(),$=ce=>{const ve=Math.min((ce-te)/R,1),ue=1-Math.pow(1-ve,3);k.value.x=K+(z-K)*ue,k.value.y=Z+(X-Z)*ue,ve<1&&requestAnimationFrame($)};requestAnimationFrame($)}});let E=null,M=null,T=10;ji(()=>{E=W=>{if(m.value.draggingId!==null&&m.value.isActive){W.stopPropagation();const R=(W.clientX-m.value.startX)/k.value.scale,U=(W.clientY-m.value.startY)/k.value.scale,N=r.modelValue.map(H=>(H.id||H.segmentId)===m.value.draggingId?{...H,x:m.value.gridStartX+R,y:m.value.gridStartY+U}:H);l("update:modelValue",N);return}k.value.isDragging&&(k.value.x=W.clientX-k.value.startX,k.value.y=W.clientY-k.value.startY)},M=()=>{if(m.value.isActive||k.value.isDragging){if(m.value.draggingId!==null&&m.value.isActive){T++;const W=r.modelValue.map(R=>(R.id||R.segmentId)===m.value.draggingId?{...R,zIndex:T}:R);l("update:modelValue",W)}k.value.isDragging=!1,m.value.draggingId=null,m.value.isActive=!1}},document.addEventListener("mousemove",E),document.addEventListener("mouseup",M)}),Ur(()=>{E&&document.removeEventListener("mousemove",E),M&&document.removeEventListener("mouseup",M)});function j(W,R,U){JOe.prompt("请输入镜头提示词","提示词",{confirmButtonText:"确认",cancelButtonText:"取消",inputValue:R.prompt,inputType:"textarea"}).then(({value:N})=>{if(N!==R.prompt){let H;const z=r.modelValue.map(X=>{if(X.segmentId===U){const K=X.cells.map(Z=>Z.id===R.id?(H={...Z,prompt:N},H):Z);return{...X,cells:K}}return X});l("update:modelValue",z),l("replaceShot",{segmentId:U,cellId:R.id,cell:H})}})}const O=be(""),P=be(""),B=be(!1),p=W=>{B.value=W,P.value=""};return(W,R)=>{const U=_3,N=wi("i-preview-open"),H=nk,z=vue;return we(),Pe(Un,null,[he("div",{class:"viewport",ref_key:"viewportRef",ref:d,style:mo(I(g)),onMousedown:w,onWheel:yo(x,["prevent"])},[he("div",{class:"canvas",ref_key:"canvasRef",ref:h,style:mo(I(v))},[(we(!0),Pe(Un,null,_o(e.modelValue,X=>(we(),Pe("div",{key:X.id||X.segmentId,class:Qe(["gridContainer",{dragging:I(m).draggingId===(X.id||X.segmentId),generating:a(X.id)}]),"data-id":X.id||X.segmentId,style:mo({left:X.x+"px",top:X.y+"px",zIndex:X.zIndex||1})},[he("div",{class:"topMenu fc",onMousedown:yo(K=>L(K,X),["stop"])},[he("div",{class:"gridTitle",title:X.title},on(X.title),9,cXi),he("div",uXi,on(X.fragmentContent),1),he("div",dXi,[(we(!0),Pe(Un,null,_o(X.assetsTags,(K,Z)=>(we(),qt(U,{key:Z},{default:nt(()=>[mi(on(K.text),1)]),_:2},1024))),128))])],40,sXi),i(H,{spinning:a(X.id),tip:"生成中..."},{default:nt(()=>[he("div",{class:"grid",style:mo(b(X.cells.length))},[(we(!0),Pe(Un,null,_o(X.cells,(K,Z)=>(we(),Pe("div",{key:Z,class:"gridItem"},[he("div",hXi,"镜头"+on(Z+1),1),K.src?(we(),Pe(Un,{key:0},[he("img",{src:K.src,loading:"lazy",onClick:te=>c(K,X.segmentId)},null,8,fXi),he("div",{class:"cellPrompt",title:K.prompt,onClick:yo(te=>j(te,K,X.segmentId),["stop"])},on(K.prompt),9,kXi),i(N,{onClick:te=>{O.value=K.src,P.value=K.prompt,B.value=!0},class:"preview",theme:"outline",size:"24"},null,8,["onClick"])],64)):(we(),Pe("div",{key:1,class:"cellText",onClick:te=>j(te,K,X.segmentId),onKeydown:R[0]||(R[0]=Is(yo(te=>te.target.blur(),["prevent"]),["enter"]))},on(K.prompt),41,gXi))]))),128))],4)]),_:2},1032,["spinning"])],14,aXi))),128))],4)],36),i(YGe,{ref_key:"editorRef",ref:o,onSave:u},null,512),I(B)?(we(),qt(z,{key:0,"url-list":[I(O)],"initial-index":0,onClose:R[1]||(R[1]=X=>p(!1)),"zoom-rate":1.2,"min-scale":.1,"max-scale":10},Ld({_:2},[I(P)?{name:"progress",fn:nt(()=>[he("div",mXi,on(I(P)),1)]),key:"0"}:void 0]),1032,["url-list"])):Tt("",!0)],64)}}},bXi=za(vXi,[["__scopeId","data-v-01f08d86"]]),yXi={class:"detection-image"},wXi={class:"modal-header"},CXi={class:"header-left"},LXi={class:"header-icon"},xXi={class:"modal-content"},SXi={class:"toolbar"},EXi={class:"toolbar-left"},MXi={class:"select-info"},AXi={class:"toolbar-right"},TXi={class:"table-wrapper"},_Xi={class:"image-cell"},jXi={class:"prompt-cell"},OXi=["title"],DXi={class:"prompt-cell video"},pXi=["title"],NXi={class:"duration-text"},RXi={class:"modal-footer"},IXi={class:"footer-info"},PXi={class:"footer-actions"},WXi=_t({__name:"detectionImage",props:{imageData:{},imageDataModifiers:{},detectionImageShow:{type:Boolean},detectionImageShowModifiers:{},modalShow:{type:Boolean},modalShowModifiers:{}},emits:xs(["save"],["update:imageData","update:detectionImageShow","update:modalShow"]),setup(e,{emit:t}){const n={trigger:"click",mode:"cell"},o=ec(e,"imageData"),r=ec(e,"detectionImageShow"),l=ec(e,"modalShow"),a=be(),s=be(0),c=t;function u(){var E,M;s.value=((M=(E=a.value)==null?void 0:E.getCheckboxRecords())==null?void 0:M.length)??0}const d=({row:E,column:M})=>{var j,O;const T=M.field;if(T==="videoPrompt"&&E.videoPromptLoading){(j=a.value)==null||j.clearEdit(),$i.warning("正在生成提示词,请稍候");return}T==="prompt"&&E.superScoreLoading&&((O=a.value)==null||O.clearEdit(),$i.warning("正在超分处理,请稍候"))};function h(){var E;return((E=a.value)==null?void 0:E.getCheckboxRecords())??[]}function k(E){var M;return((M=o.value)==null?void 0:M.findIndex(T=>T.id===E))??-1}function m(E,M,T){const j=k(E);j!==-1&&o.value&&(o.value[j][M]=T)}function b(E,M,T){E.forEach(j=>{m(j,M,T)}),v()}function g(E,M){!E||!o.value||(E.forEach(T=>{const j=k(T.id);if(j!==-1&&o.value){const O=o.value[j];T.videoPrompt!==void 0&&(O.videoPrompt=T.videoPrompt),T.prompt!==void 0&&(O.prompt=T.prompt),T.duration!==void 0&&(O.duration=T.duration),T.filePath!==void 0&&(O.filePath=T.filePath),T.type!==void 0&&(O.type=T.type),T.name!==void 0&&(O.name=T.name),T.src!==void 0&&(O.src=T.src),O[M]=!0}}),v())}function v(){bt(()=>{var E;(E=a.value)==null||E.updateData()})}function w(E){const M=new Map;return E.forEach(T=>{M.has(T.segmentId)||M.set(T.segmentId,[]),M.get(T.segmentId).push({id:T.id,prompt:T.prompt,src:T.src})}),Array.from(M.entries()).map(([T,j])=>({segmentId:T,cells:j}))}async function L(){var O,P;const E=h();if(E.length===0){$i.warning("请先选择要超分的图片");return}const M=E.filter(B=>!B.superScoreLoading);if(M.length===0){$i.warning("所选图片正在处理中");return}const T=M.filter(B=>B.isSuperScored);T.length>0&&$i.info(`其中 ${T.length} 张已超分,将重新处理`);const j=M.map(B=>B.id);b(j,"superScoreLoading",!0);try{const B={scriptId:(O=M[0])==null?void 0:O.scriptId,projectId:(P=M[0])==null?void 0:P.projectId,imageList:w(M)},p=await cr.post("/storyboard/batchSuperScoreImage",B);g(p.data,"isSuperScored"),$i.success("超分成功")}catch{$i.error("超分失败")}finally{b(j,"superScoreLoading",!1)}}async function x(){const E=h();if(E.length===0){$i.warning("请先选择要生成提示词的图片");return}const M=E.filter(p=>!p.videoPromptLoading);if(M.length===0){$i.warning("所选图片正在处理中");return}const T=M.filter(p=>p.isVideoPromptGenerated);T.length>0&&$i.info(`其中 ${T.length} 条已生成,将重新处理`);const j=M.map(p=>p.id);b(j,"videoPromptLoading",!0);let O=0,P=0;const B=M.map(p=>cr.post("/storyboard/generateVideoPrompt",{scriptId:p.scriptId,projectId:p.projectId,id:p.id,prompt:p.prompt,src:p.src}).then(W=>{g([W.data],"isVideoPromptGenerated"),m(p.id,"videoPromptLoading",!1),v(),O++}).catch(W=>{var R,U;m(p.id,"videoPromptLoading",!1),v(),P++,console.error(`生成失败 [${p.id}]:`,((U=(R=W==null?void 0:W.response)==null?void 0:R.data)==null?void 0:U.message)||(W==null?void 0:W.message))}));await Promise.all(B),P===0?$i.success(`全部生成成功 (${O} 条)`):O===0?$i.error(`全部生成失败 (${P} 条)`):$i.warning(`成功 ${O} 条,失败 ${P} 条`)}function S(){var E;cr.post("/storyboard/keepStoryboard",{results:(E=o.value)==null?void 0:E.map(M=>({videoPrompt:M.videoPrompt,prompt:M.prompt,duration:M.duration,projectId:M.projectId,filePath:M.filePath,type:M.type,name:M.name,scriptId:M.scriptId,segmentId:M.segmentId,shotIndex:M.shotIndex}))}).then(()=>{$i.success("保存成功"),c("save")}).catch(()=>{$i.error("保存失败")}).finally(()=>{r.value=!1,l.value=!1})}return(E,M)=>{const T=wi("i-export"),j=Rf,O=wi("i-close"),P=wi("i-high-light"),B=Xa,p=wi("i-magic-wand"),W=wi("vxe-column"),R=I1,U=nk,N=wi("vxe-table"),H=wi("i-info"),z=as;return we(),Pe("div",yXi,[i(z,{open:r.value,"onUpdate:open":M[2]||(M[2]=X=>r.value=X),width:"85%",closable:!1,wrapClassName:"detection-modal",centered:"",onOk:S},{title:nt(()=>[he("div",wXi,[he("div",CXi,[he("div",LXi,[i(T,{theme:"filled",size:"20"})]),M[3]||(M[3]=he("span",{class:"header-title"},"导出镜头",-1)),i(j,{color:"purple"},{default:nt(()=>{var X;return[mi(on(((X=o.value)==null?void 0:X.length)||0)+" 个镜头",1)]}),_:1})]),he("button",{class:"close-btn",onClick:M[0]||(M[0]=X=>r.value=!1)},[i(O,{theme:"outline",size:"18"})])])]),footer:nt(()=>[he("div",RXi,[he("div",IXi,[i(H,{theme:"outline",size:"14"}),M[7]||(M[7]=he("span",null,"点击单元格可编辑提示词内容",-1))]),he("div",PXi,[i(B,{onClick:M[1]||(M[1]=X=>r.value=!1)},{default:nt(()=>[...M[8]||(M[8]=[mi("取消",-1)])]),_:1}),i(B,{type:"primary",onClick:S},{default:nt(()=>[...M[9]||(M[9]=[mi("保存并导出",-1)])]),_:1})])])]),default:nt(()=>{var X;return[he("div",xXi,[he("div",SXi,[he("div",EXi,[he("span",MXi,[M[4]||(M[4]=mi(" 已选 ",-1)),he("strong",null,on(s.value),1),mi(" / "+on(((X=o.value)==null?void 0:X.length)||0)+" 项 ",1)])]),he("div",AXi,[i(B,{onClick:L,disabled:s.value===0},{icon:nt(()=>[i(P,{theme:"outline",size:"16"})]),default:nt(()=>[M[5]||(M[5]=mi(" 批量超分图片 ",-1))]),_:1},8,["disabled"]),i(B,{type:"primary",onClick:x,disabled:s.value===0},{icon:nt(()=>[i(p,{theme:"outline",size:"16"})]),default:nt(()=>[M[6]||(M[6]=mi(" 批量生成视频提示词 ",-1))]),_:1},8,["disabled"])])]),he("div",TXi,[i(N,{ref_key:"tableRef",ref:a,height:"520",data:o.value,"edit-config":n,"row-config":{isCurrent:!0,isHover:!0},"checkbox-config":{highlight:!0},stripe:"",round:"",onEditActived:d,onCheckboxChange:u,onCheckboxAll:u},{default:nt(()=>[i(W,{type:"checkbox",width:"50",align:"center"}),i(W,{type:"seq",title:"序号",width:"60",align:"center"}),i(W,{field:"filePath",title:"镜头图片",width:"140",align:"center"},{default:nt(({row:K})=>[he("div",_Xi,[he("div",{class:Qe(["image-wrapper",{loading:K.superScoreLoading}])},[i(U,{spinning:!!K.superScoreLoading,size:"small",tip:"超分中..."},{default:nt(()=>[i(R,{src:K.filePath,"preview-src":K.filePath,width:"100",height:"60",style:{"object-fit":"cover","border-radius":"6px"}},null,8,["src","preview-src"])]),_:2},1032,["spinning"])],2),i(j,{color:K.isSuperScored?"success":"default",size:"small",class:"status-tag"},{default:nt(()=>[mi(on(K.isSuperScored?"已超分":"未超分"),1)]),_:2},1032,["color"])])]),_:1}),i(W,{field:"prompt",title:"图片提示词","min-width":"200","edit-render":{name:"input"}},{default:nt(({row:K})=>[he("div",jXi,[he("span",{class:"prompt-text",title:K.prompt},on(K.prompt||"-"),9,OXi)])]),_:1}),i(W,{field:"videoPrompt",title:"视频提示词","min-width":"240","edit-render":{name:"input"},"show-overflow":""},{default:nt(({row:K})=>[i(U,{spinning:!!K.videoPromptLoading,size:"small",wrapperClassName:"video-prompt-spin"},{default:nt(()=>[he("div",DXi,[he("span",{class:"prompt-text",title:K.videoPrompt},on(K.videoPrompt||"-"),9,pXi)])]),_:2},1032,["spinning"])]),_:1}),i(W,{field:"duration",title:"时长(秒)",width:"100",align:"center"},{default:nt(({row:K})=>[he("span",NXi,on(K.duration||"-"),1)]),_:1})]),_:1},8,["data"])])])]}),_:1},8,["open"])])}}}),HXi=za(WXi,[["__scopeId","data-v-7f3da3fc"]]),zXi={class:"ac jb titHeader",style:{background:"#f9faff",height:"60px",display:"flex",width:"100%"}},BXi={class:"content pr"},VXi={class:"f ac jb"},FXi=_t({__name:"storyboardChat",props:xs({projectId:{},scriptId:{}},{modelValue:{default:!1},modelModifiers:{}}),emits:xs(["save"],["update:modelValue"]),setup(e,{emit:t}){const n=G(()=>{let $=0;for(const oe of z.value)$+=oe.cells.reduce((ce,ve)=>ve.src?ce+1:ce,0);return $}),o=e,r=ec(e,"modelValue"),l=be(null),a=be(!1),s=be([]),c=be(null);let u=null,d=!1,h=null,k=!1;const m={segmentAgent:"片段师",shotAgent:"分镜师",director:"导演",main:"助手"},b=be([{id:M0(),identity:"assistant",role:"助手",data:[{type:"text",text:"欢迎使用Toonflow!我已经收到你的剧本与相关资产,请和我说“开始”启动生成分镜图的制作吧!"}]}]),g=be(!0),v={segmentAgent:"调用片段师",shotAgent:"调用分镜师",director:"调用导演",getScript:"获取剧本",getSegments:"获取片段数据",updateSegments:"更新片段数据",addShots:"添加分镜",updateShots:"更新分镜",deleteShots:"删除分镜",generateShotImage:"生成分镜图",getAssets:"获取素材"},w={msgId:null,source:null};function L($){console.log("Replace shot triggered"),u==null||u.send({type:"replaceShot",data:{segmentId:$.segmentId,cellId:$.cellId,cell:$.cell}})}function x(){w.msgId=null,w.source=null}function S(){const $=b.value.findIndex(oe=>oe.identity==="assistant"&&Array.isArray(oe.data)&&oe.data.some(ce=>ce.type==="thinking"));$!==-1&&b.value.splice($,1)}function E($,oe){return w.source!==$&&x(),w.msgId||(S(),w.msgId=M0(),w.source=$,b.value.push({id:w.msgId,identity:"assistant",role:oe,data:[{type:"text",text:""}]})),w.msgId}function M($){var ce;if(!w.msgId||!$)return;const oe=b.value.find(ve=>ve.id===w.msgId);oe&&Array.isArray(oe.data)&&oe.data[0]&&(oe.data[0].text+=$,(ce=l.value)==null||ce.scrollBottom())}function T(){const $=`/storyboard/chatStoryboard?projectId=${o.projectId}${o.scriptId?`&scriptId=${o.scriptId}`:""}`;u=new GGe($,{onOpen:()=>{console.log("WebSocket 连接已建立,等待后端 init 消息...")},onMessage:async oe=>{var ce;try{const ve=JSON.parse(oe);j(ve)}catch(ve){console.error("ws message parse error",ve),W("消息解析失败")}(ce=l.value)==null||ce.scrollBottom()},onError:oe=>{g.value=!0,W("WebSocket连接异常,请重试"),u=null},onClose:oe=>{g.value=!0,k=!1,h=null,oe.code===500&&(W(oe.reason??"WebSocket连接关闭"),$i.error(oe.reason??"WebSocket连接关闭")),u=null}})}function j($){["stream","response","response_end","subAgentStream","subAgentEnd"].includes($.type)&&S();const ve={init:()=>{console.log("WebSocket 初始化完成"),k=!0,h&&(console.log("发送待处理的消息:",h),u==null||u.send(h),h=null)},stream:ue=>O(ue.data),response_end:()=>{x(),g.value=!0},response:()=>{x(),g.value=!0},subAgentStream:ue=>P(ue.data),subAgentEnd:ue=>B(ue.data),transfer:ue=>{var ke;const Ce=(ke=ue.data)==null?void 0:ke.to;x(),Ce&&m[Ce]&&W(`${m[Ce]} 正在思考`)},toolCall:ue=>p(ue.data),refresh:ue=>{console.log("Refresh:",ue.data)},segmentsUpdated:ue=>{console.log("Segments Updated:",ue.data)},shotsUpdated:ue=>{console.log("Shots Updated:",ue.data),K(ue.data)},shotImageGenerateStart:ue=>{var xe;console.log("Shot Image Generate Start:",ue.data);const Ce=((xe=ue.data)==null?void 0:xe.shotIds)||[];for(const le of Ce)X.value.includes(le)||X.value.push(le);const ke=Ce.map(le=>{const ye=z.value.find(ae=>ae.id===le);return(ye==null?void 0:ye.title)||`分镜 ${le}`}).join("、");W(`🎨 开始为${ke}生成分镜图...`)},shotImageGenerateProgress:ue=>{console.log("Shot Image Generate Progress:",ue.data);const{shotId:Ce,status:ke,message:xe,progress:le}=ue.data||{};if(Ce!==void 0){X.value.includes(Ce)||X.value.push(Ce);const ye=z.value.find(ae=>ae.id===Ce);if(ye&&(ye.generatingStatus={status:ke,message:xe,progress:le}),ke!=="saving"||le===100){const ee={generating:"🎨",splitting:"✂️",saving:"💾"}[ke]||"⏳",fe=(ye==null?void 0:ye.title)||`分镜 ${Ce}`;W(`${ee} ${fe}: ${xe||ke}`)}}},shotImageGenerateComplete:ue=>{var ke;console.log("Shot Image Generate Complete:",ue.data);const Ce=(ke=ue.data)==null?void 0:ke.shotId;if(Ce!==void 0){X.value=X.value.filter(ye=>ye!==Ce);const xe=z.value.find(ye=>ye.id===Ce),le=(xe==null?void 0:xe.title)||`分镜 ${Ce}`;W(`✅ ${le}分镜图生成完成`)}},shotImageGenerateError:ue=>{var xe,le,ye;console.log("Shot Image Generate Error:",ue.data);const Ce=((xe=ue.data)==null?void 0:xe.shotIds)||((le=ue.data)!=null&&le.shotId?[ue.data.shotId]:[]);X.value=X.value.filter(ae=>!Ce.includes(ae));const ke=((ye=ue.data)==null?void 0:ye.error)||"未知错误";W(`❌ 分镜图生成失败: ${ke}`),$i.error(`分镜图生成失败: ${ke}`)},error:ue=>{x(),g.value=!0,W(`错误: ${ue.data}`),$i.error(ue.data)},notice:ue=>W(ue.data)}[$.type];ve?ve($):console.warn("未知的消息类型:",$.type,$)}function O($){$&&(E("main","助手"),M($))}function P($){if(!($!=null&&$.text))return;const oe=m[$.agent]||"助手";E($.agent,oe),M($.text)}function B($){x()}function p($){x();const oe=$.agent?m[$.agent]||$.agent:"助手",ce=v[$.name]||$.name;let ve="";$.args&&$.args.taskDescription&&(ve=$.args.taskDescription.length>50?$.args.taskDescription.substring(0,50)+"...":$.args.taskDescription);const ue=ve?`🔧 ${oe}正在${ce}:${ve}`:`🔧 ${oe}正在${ce}`;W(ue)}function W($){b.value.push({id:M0(),identity:"notice",data:$})}function R(){b.value.push({id:M0(),identity:"assistant",role:"",data:[{type:"thinking",text:"生成中..."}]})}async function U($){var ce;if(!$.trim()){$i.warning("请输入内容");return}d||(window.onbeforeunload=function(ve){return ve.preventDefault(),ve.returnValue="当前任务未完成,退出内容不会保留","当前任务未完成,退出内容不会保留"}),d=!0,g.value=!1,b.value.push({id:M0(),identity:"user",data:[{type:"text",text:$}]});const oe={type:"msg",data:{type:"user",data:$}};!u||((ce=u.ws)==null?void 0:ce.readyState)!==WebSocket.OPEN?(h=oe,k=!1,T()):k?u.send(oe):h=oe,R()}function N(){d?as.confirm({title:"确认退出",content:"当前任务未完成,退出内容不会保留,确定退出吗?",onOk(){H()}}):H()}function H(){r.value=!1,u&&(u.close(),u=null),window.onbeforeunload=null}Ho(()=>{u&&(u.close(),u=null),window.onbeforeunload=null});const z=be([]),X=be([]);function K($){if(!$||!Array.isArray($))return;const oe=$.map((ce,ve)=>{if(ce.x!==0||ce.y!==0)return{...ce,id:ce.id,segmentId:ce.segmentId};const ue=ve%3,Ce=Math.floor(ve/3),ke=50+ue*850,xe=50+Ce*450;return{id:ce.id,segmentId:ce.segmentId,title:ce.title||`分镜 ${ce.segmentId}`,x:ke,y:xe,cells:ce.cells||[],fragmentContent:ce.fragmentContent||"",assetsTags:ce.assetsTags||[]}});z.value=oe,console.log("%c Line:543 🥥 newGridData","background:#6ec1c2",oe),console.log("GridData 已更新:",z.value)}function Z($){cr.post("/storyboard/generateShotImage",{...$,scriptId:o.scriptId,projectId:o.projectId}).then(()=>{console.log("%c Line:516 🍑 修改成功","background:#b03734")})}async function te(){if(!c.value)return;if(n.value==0){$i.warning("请先生成分镜图片");return}const $=z.value.map(oe=>{const ce=oe.cells.filter(ve=>ve.src&&ve.src.trim()!=="");return ce.length?{segmentId:oe.segmentId,cells:ce}:null}).filter(Boolean);if(!$.length)return $i.warning("请先生成图片");try{const oe=[];$.forEach(ce=>{ce==null||ce.cells.forEach((ve,ue)=>{oe.push({id:(ve==null?void 0:ve.id)||"",segmentId:(ce==null?void 0:ce.segmentId)||0,shotIndex:ue+1,videoPrompt:"",prompt:(ve==null?void 0:ve.prompt)||"",duration:"",projectId:o.projectId,filePath:(ve==null?void 0:ve.src)||"",type:"分镜",name:"",scriptId:o.scriptId,src:(ve==null?void 0:ve.src)||""})})}),s.value=oe,r.value=!0,a.value=!0}catch(oe){console.error(oe),$i.error("生成或保存失败")}finally{}}return($,oe)=>{const ce=wi("i-close"),ve=Xa,ue=as;return we(),qt(ue,{footer:null,style:{top:"30px",width:"100vw"},open:r.value,"onUpdate:open":oe[6]||(oe[6]=Ce=>r.value=Ce),maskClosable:!1,wrapClassName:"noHeaderMargin",dialogClass:"customModal",keyboard:!1,closable:!1,width:"90%"},{title:nt(()=>[he("div",zXi,[oe[7]||(oe[7]=he("div",null,[he("span",{style:{"font-weight":"bold","font-size":"18px","margin-left":"24px"}},"分镜图生成")],-1)),he("div",{class:"closePoint",onClick:N},[i(ce,{theme:"outline",size:"18",fill:"#9913FA"})])])]),default:nt(()=>[he("div",BXi,[i(bXi,{modelValue:I(z),"onUpdate:modelValue":oe[0]||(oe[0]=Ce=>Wr(z)?z.value=Ce:null),generatingIds:I(X),onReplaceShot:L,onGenerateImage:Z},null,8,["modelValue","generatingIds"]),he("div",{class:Qe(["chatBox pa",{hoverState:I(z).length>0}])},[i(UGe,{ref_key:"chatRef",ref:l,canSend:I(g),enterToSend:"",sendApi:U,modelValue:I(b),"onUpdate:modelValue":oe[1]||(oe[1]=Ce=>Wr(b)?b.value=Ce:null)},null,8,["canSend","modelValue"]),he("div",VXi,[oe[8]||(oe[8]=he("div",null,null,-1)),i(ve,{class:"btn",type:"primary",onClick:te},{default:nt(()=>[mi("导出全部镜头("+on(I(n))+")",1)]),_:1})])],2)]),i(HXi,{ref_key:"detectionImageRef",ref:c,detectionImageShow:I(a),"onUpdate:detectionImageShow":oe[2]||(oe[2]=Ce=>Wr(a)?a.value=Ce:null),imageData:I(s),"onUpdate:imageData":oe[3]||(oe[3]=Ce=>Wr(s)?s.value=Ce:null),modalShow:r.value,"onUpdate:modalShow":oe[4]||(oe[4]=Ce=>r.value=Ce),onSave:oe[5]||(oe[5]=Ce=>$.$emit("save"))},null,8,["detectionImageShow","imageData","modalShow"])]),_:1},8,["open"])}}}),UXi=za(FXi,[["__scopeId","data-v-2c2a6bbd"]]),GXi={class:"storyboard-image"},YXi={class:"header"},ZXi={class:"title"},XXi={class:"icon-wrapper"},qXi={key:0,class:"count"},KXi=["disabled"],JXi={class:"content"},QXi={key:0,class:"image-grid"},$Xi=["onClick"],eqi={class:"shot-badge"},tqi={class:"cover-wrapper"},nqi={class:"error-placeholder"},iqi={class:"hover-overlay"},oqi={class:"action-btn"},rqi={class:"info-wrapper"},lqi={key:0,class:"card-title"},aqi={class:"card-desc"},sqi={key:1,class:"empty-state"},cqi={class:"empty-icon"},uqi=_t({__name:"storyboardImage",props:{data:{},projectId:{},scriptId:{},disableBtn:{},canGenerate:{type:Boolean}},emits:["save"],setup(e,{emit:t}){const n=t,o=e,r=be(!1),l=be(null);function a(c){var u;(u=l.value)==null||u.doFusionEdit({id:c.id,filePath:c.filePath,scriptId:o.scriptId??void 0,otherImgs:[],prompt:c.prompt||"",intro:c.intro||"",generateImg:c.generateImg||[],editPrompt:""})}function s(c){cr.post("/storyboard/saveStoryboard",c).then(()=>{n("save")})}return(c,u)=>{const d=wi("i-pic"),h=wi("i-optimize"),k=wi("i-error-picture"),m=Q_e,b=wi("i-edit");return we(),Pe("div",GXi,[he("div",YXi,[he("div",ZXi,[he("div",XXi,[i(d,{size:20,class:"icon"})]),u[3]||(u[3]=he("span",null,"生成分镜图",-1)),e.data.length?(we(),Pe("span",qXi,on(e.data.length),1)):Tt("",!0)]),e.canGenerate?(we(),Pe("button",{key:0,disabled:!e.disableBtn,class:"generate-btn",onClick:u[0]||(u[0]=g=>r.value=!0)},[i(h,{size:18}),u[4]||(u[4]=he("span",null,"生成分镜图",-1))],8,KXi)):Tt("",!0)]),he("div",JXi,[e.data.length?(we(),Pe("div",QXi,[(we(!0),Pe(Un,null,_o(e.data,(g,v)=>(we(),Pe("div",{key:g.id,class:"image-card",onClick:w=>a(g)},[he("div",eqi,"片段"+on(g.segmentId)+"-"+on(g.shotIndex)+"镜头",1),he("div",tqi,[i(m,{class:"cover-image",src:g.filePath,fit:"cover"},{placeholder:nt(()=>[...u[5]||(u[5]=[he("div",{class:"loading-placeholder"},[he("div",{class:"loading-spinner"})],-1)])]),error:nt(()=>[he("div",nqi,[i(k,{theme:"outline",size:28,fill:"#ef4444"}),u[6]||(u[6]=he("span",null,"加载失败",-1))])]),_:1},8,["src"]),he("div",iqi,[he("div",oqi,[i(b,{size:20}),u[7]||(u[7]=he("span",null,"编辑",-1))])])]),he("div",rqi,[g.name?(we(),Pe("h4",lqi,on(g.name),1)):Tt("",!0),he("p",aqi,on(g.prompt||"暂无描述"),1)])],8,$Xi))),128))])):(we(),Pe("div",sqi,[he("div",cqi,[i(d,{size:48})]),u[8]||(u[8]=he("p",{class:"empty-title"},"暂无分镜图",-1)),u[9]||(u[9]=he("p",{class:"empty-desc"},"点击上方按钮开始生成分镜图",-1))]))]),r.value?(we(),qt(UXi,{key:0,modelValue:r.value,"onUpdate:modelValue":u[1]||(u[1]=g=>r.value=g),scriptId:e.scriptId,projectId:e.projectId,onSave:u[2]||(u[2]=g=>c.$emit("save"))},null,8,["modelValue","scriptId","projectId"])):Tt("",!0),i(YGe,{ref_key:"storyboardEditorRef",ref:l,onSave:s},null,512)])}}}),dqi=za(uqi,[["__scopeId","data-v-87736700"]]);var ZGe={exports:{}};const hqi=BF(Yqe);/**!
* Sortable 1.14.0
* @author RubaXa
@@ -2087,7 +2087,7 @@ g.stateGroup line {
[`+Xi+"] ",arguments[0])dn+=so+": "+arguments[0][so]+", ";dn=dn.slice(0,-2)}else dn=arguments[Xi];yi.push(dn)}P(Oe+`
Arguments: `+Array.prototype.slice.call(yi).join("")+`
`+new Error().stack),Pt=!1}return ot.apply(this,arguments)},ot)}var p,W={};function R(Oe,ot){l.deprecationHandler!=null&&l.deprecationHandler(Oe,ot),W[Oe]||(P(ot),W[Oe]=!0)}function U(Oe){return Oe instanceof Function||Object.prototype.toString.call(Oe)==="[object Function]"}function N(Oe,ot){var Pt,dn=m({},Oe);for(Pt in ot)k(ot,Pt)&&(s(Oe[Pt])&&s(ot[Pt])?(dn[Pt]={},m(dn[Pt],Oe[Pt]),m(dn[Pt],ot[Pt])):ot[Pt]!=null?dn[Pt]=ot[Pt]:delete dn[Pt]);for(Pt in Oe)k(Oe,Pt)&&!k(ot,Pt)&&s(Oe[Pt])&&(dn[Pt]=m({},dn[Pt]));return dn}function H(Oe){Oe!=null&&this.set(Oe)}l.suppressDeprecationWarnings=!1,l.deprecationHandler=null,p=Object.keys?Object.keys:function(Oe){var ot,Pt=[];for(ot in Oe)k(Oe,ot)&&Pt.push(ot);return Pt};var z={};function X(Oe,ot){var Pt=Oe.toLowerCase();z[Pt]=z[Pt+"s"]=z[ot]=Oe}function K(Oe){return typeof Oe=="string"?z[Oe]||z[Oe.toLowerCase()]:void 0}function Z(Oe){var ot,Pt,dn={};for(Pt in Oe)k(Oe,Pt)&&(ot=K(Pt))&&(dn[ot]=Oe[Pt]);return dn}var te={};function $(Oe,ot){te[Oe]=ot}function oe(Oe,ot,Pt){var dn=""+Math.abs(Oe),yi=ot-dn.length;return(0<=Oe?Pt?"+":"":"-")+Math.pow(10,Math.max(0,yi)).toString().substr(1)+dn}var ce=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,ve=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,ue={},Ce={};function ke(Oe,ot,Pt,dn){var yi=dn;typeof dn=="string"&&(yi=function(){return this[dn]()}),Oe&&(Ce[Oe]=yi),ot&&(Ce[ot[0]]=function(){return oe(yi.apply(this,arguments),ot[1],ot[2])}),Pt&&(Ce[Pt]=function(){return this.localeData().ordinal(yi.apply(this,arguments),Oe)})}function xe(Oe,ot){return Oe.isValid()?(ot=le(ot,Oe.localeData()),ue[ot]=ue[ot]||function(Pt){var dn,yi,Xi,so=Pt.match(ce);for(dn=0,yi=so.length;dnrt(Oe)?(Xi=Oe+1,Vo-rt(Oe)):(Xi=Oe,Vo),{year:Xi,dayOfYear:so}}function rn(Oe,ot,Pt){var dn,yi,Xi=tn(Oe.year(),ot,Pt),so=Math.floor((Oe.dayOfYear()-Xi-1)/7)+1;return so<1?dn=so+En(yi=Oe.year()-1,ot,Pt):so>En(Oe.year(),ot,Pt)?(dn=so-En(Oe.year(),ot,Pt),yi=Oe.year()+1):(yi=Oe.year(),dn=so),{week:dn,year:yi}}function En(Oe,ot,Pt){var dn=tn(Oe,ot,Pt),yi=tn(Oe+1,ot,Pt);return(rt(Oe)-dn+yi)/7}function jn(Oe,ot){return Oe.slice(ot,7).concat(Oe.slice(0,ot))}ke("w",["ww",2],"wo","week"),ke("W",["WW",2],"Wo","isoWeek"),X("week","w"),X("isoWeek","W"),$("week",5),$("isoWeek",5),Ue("w",Ee),Ue("ww",Ee,ae),Ue("W",Ee),Ue("WW",Ee,ae),At(["w","ww","W","WW"],function(Oe,ot,Pt,dn){ot[dn.substr(0,1)]=j(Oe)}),ke("d",0,"do","day"),ke("dd",0,0,function(Oe){return this.localeData().weekdaysMin(this,Oe)}),ke("ddd",0,0,function(Oe){return this.localeData().weekdaysShort(this,Oe)}),ke("dddd",0,0,function(Oe){return this.localeData().weekdays(this,Oe)}),ke("e",0,0,"weekday"),ke("E",0,0,"isoWeekday"),X("day","d"),X("weekday","e"),X("isoWeekday","E"),$("day",11),$("weekday",11),$("isoWeekday",11),Ue("d",Ee),Ue("e",Ee),Ue("E",Ee),Ue("dd",function(Oe,ot){return ot.weekdaysMinRegex(Oe)}),Ue("ddd",function(Oe,ot){return ot.weekdaysShortRegex(Oe)}),Ue("dddd",function(Oe,ot){return ot.weekdaysRegex(Oe)}),At(["dd","ddd","dddd"],function(Oe,ot,Pt,dn){var yi=Pt._locale.weekdaysParse(Oe,dn,Pt._strict);yi!=null?ot.d=yi:g(Pt).invalidWeekday=Oe}),At(["d","e","E"],function(Oe,ot,Pt,dn){ot[dn]=j(Oe)});var ri="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),_i="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),ao="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),Ui=it,un=it,Xn=it;function Vt(){function Oe(ur,nl){return nl.length-ur.length}var ot,Pt,dn,yi,Xi,so=[],Vo=[],Uo=[],Ko=[];for(ot=0;ot<7;ot++)Pt=b([2e3,1]).day(ot),dn=this.weekdaysMin(Pt,""),yi=this.weekdaysShort(Pt,""),Xi=this.weekdays(Pt,""),so.push(dn),Vo.push(yi),Uo.push(Xi),Ko.push(dn),Ko.push(yi),Ko.push(Xi);for(so.sort(Oe),Vo.sort(Oe),Uo.sort(Oe),Ko.sort(Oe),ot=0;ot<7;ot++)Vo[ot]=at(Vo[ot]),Uo[ot]=at(Uo[ot]),Ko[ot]=at(Ko[ot]);this._weekdaysRegex=new RegExp("^("+Ko.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+Uo.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+Vo.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+so.join("|")+")","i")}function Dn(){return this.hours()%12||12}function Ht(Oe,ot){ke(Oe,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),ot)})}function kn(Oe,ot){return ot._meridiemParse}ke("H",["HH",2],0,"hour"),ke("h",["hh",2],0,Dn),ke("k",["kk",2],0,function(){return this.hours()||24}),ke("hmm",0,0,function(){return""+Dn.apply(this)+oe(this.minutes(),2)}),ke("hmmss",0,0,function(){return""+Dn.apply(this)+oe(this.minutes(),2)+oe(this.seconds(),2)}),ke("Hmm",0,0,function(){return""+this.hours()+oe(this.minutes(),2)}),ke("Hmmss",0,0,function(){return""+this.hours()+oe(this.minutes(),2)+oe(this.seconds(),2)}),Ht("a",!0),Ht("A",!1),X("hour","h"),$("hour",13),Ue("a",kn),Ue("A",kn),Ue("H",Ee),Ue("h",Ee),Ue("k",Ee),Ue("HH",Ee,ae),Ue("hh",Ee,ae),Ue("kk",Ee,ae),Ue("hmm",Le),Ue("hmmss",pe),Ue("Hmm",Le),Ue("Hmmss",pe),pt(["H","HH"],3),pt(["k","kk"],function(Oe,ot,Pt){var dn=j(Oe);ot[3]=dn===24?0:dn}),pt(["a","A"],function(Oe,ot,Pt){Pt._isPm=Pt._locale.isPM(Oe),Pt._meridiem=Oe}),pt(["h","hh"],function(Oe,ot,Pt){ot[3]=j(Oe),g(Pt).bigHour=!0}),pt("hmm",function(Oe,ot,Pt){var dn=Oe.length-2;ot[3]=j(Oe.substr(0,dn)),ot[4]=j(Oe.substr(dn)),g(Pt).bigHour=!0}),pt("hmmss",function(Oe,ot,Pt){var dn=Oe.length-4,yi=Oe.length-2;ot[3]=j(Oe.substr(0,dn)),ot[4]=j(Oe.substr(dn,2)),ot[5]=j(Oe.substr(yi)),g(Pt).bigHour=!0}),pt("Hmm",function(Oe,ot,Pt){var dn=Oe.length-2;ot[3]=j(Oe.substr(0,dn)),ot[4]=j(Oe.substr(dn))}),pt("Hmmss",function(Oe,ot,Pt){var dn=Oe.length-4,yi=Oe.length-2;ot[3]=j(Oe.substr(0,dn)),ot[4]=j(Oe.substr(dn,2)),ot[5]=j(Oe.substr(yi))});var Rn,ni=Ne("Hours",!0),Hn={calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},longDateFormat:{LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},invalidDate:"Invalid date",ordinal:"%d",dayOfMonthOrdinalParse:/\d{1,2}/,relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},months:Ot,monthsShort:Yt,week:{dow:0,doy:6},weekdays:ri,weekdaysMin:ao,weekdaysShort:_i,meridiemParse:/[ap]\.?m?\.?/i},Pn={},ki={};function Ni(Oe){return Oe&&Oe.toLowerCase().replace("_","-")}function Qi(Oe){var ot=null;if(!Pn[Oe]&&e&&e.exports)try{ot=Rn._abbr,n(1748)("./"+Oe),Ln(ot)}catch{}return Pn[Oe]}function Ln(Oe,ot){var Pt;return Oe&&((Pt=c(ot)?zt(Oe):Mt(Oe,ot))?Rn=Pt:typeof console<"u"&&console.warn&&console.warn("Locale "+Oe+" not found. Did you forget to load it?")),Rn._abbr}function Mt(Oe,ot){if(ot===null)return delete Pn[Oe],null;var Pt,dn=Hn;if(ot.abbr=Oe,Pn[Oe]!=null)R("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),dn=Pn[Oe]._config;else if(ot.parentLocale!=null)if(Pn[ot.parentLocale]!=null)dn=Pn[ot.parentLocale]._config;else{if((Pt=Qi(ot.parentLocale))==null)return ki[ot.parentLocale]||(ki[ot.parentLocale]=[]),ki[ot.parentLocale].push({name:Oe,config:ot}),null;dn=Pt._config}return Pn[Oe]=new H(N(dn,ot)),ki[Oe]&&ki[Oe].forEach(function(yi){Mt(yi.name,yi.config)}),Ln(Oe),Pn[Oe]}function zt(Oe){var ot;if(Oe&&Oe._locale&&Oe._locale._abbr&&(Oe=Oe._locale._abbr),!Oe)return Rn;if(!a(Oe)){if(ot=Qi(Oe))return ot;Oe=[Oe]}return function(Pt){for(var dn,yi,Xi,so,Vo=0;Vo=dn&&O(so,yi,!0)>=dn-1)break;dn--}Vo++}return Rn}(Oe)}function ln(Oe){var ot,Pt=Oe._a;return Pt&&g(Oe).overflow===-2&&(ot=Pt[1]<0||11kt(Pt[0],Pt[1])?2:Pt[3]<0||24En(nl,Xl,Va)?g(Ko)._overflowWeeks=!0:bu!=null?g(Ko)._overflowWeekday=!0:(ya=Qt(nl,Br,Aa,Xl,Va),Ko._a[0]=ya.year,Ko._dayOfYear=ya.dayOfYear)}(Oe),Oe._dayOfYear!=null&&(Xi=Yn(Oe._a[0],dn[0]),(Oe._dayOfYear>rt(Xi)||Oe._dayOfYear===0)&&(g(Oe)._overflowDayOfYear=!0),Pt=Jt(Xi,0,Oe._dayOfYear),Oe._a[1]=Pt.getUTCMonth(),Oe._a[2]=Pt.getUTCDate()),ot=0;ot<3&&Oe._a[ot]==null;++ot)Oe._a[ot]=so[ot]=dn[ot];for(;ot<7;ot++)Oe._a[ot]=so[ot]=Oe._a[ot]==null?ot===2?1:0:Oe._a[ot];Oe._a[3]===24&&Oe._a[4]===0&&Oe._a[5]===0&&Oe._a[6]===0&&(Oe._nextDay=!0,Oe._a[3]=0),Oe._d=(Oe._useUTC?Jt:function(Ko,ur,nl,Br,Aa,Xl,Va){var ya;return Ko<100&&0<=Ko?(ya=new Date(Ko+400,ur,nl,Br,Aa,Xl,Va),isFinite(ya.getFullYear())&&ya.setFullYear(Ko)):ya=new Date(Ko,ur,nl,Br,Aa,Xl,Va),ya}).apply(null,so),yi=Oe._useUTC?Oe._d.getUTCDay():Oe._d.getDay(),Oe._tzm!=null&&Oe._d.setUTCMinutes(Oe._d.getUTCMinutes()-Oe._tzm),Oe._nextDay&&(Oe._a[3]=24),Oe._w&&Oe._w.d!==void 0&&Oe._w.d!==yi&&(g(Oe).weekdayMismatch=!0)}}var ii=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,ui=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,Gn=/Z|[+-]\d\d(?::?\d\d)?/,li=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/]],Hi=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],bn=/^\/?Date\((\-?\d+)/i;function Oo(Oe){var ot,Pt,dn,yi,Xi,so,Vo=Oe._i,Uo=ii.exec(Vo)||ui.exec(Vo);if(Uo){for(g(Oe).iso=!0,ot=0,Pt=li.length;otPt.valueOf():Pt.valueOf()this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()},ei.isLocal=function(){return!!this.isValid()&&!this._isUTC},ei.isUtcOffset=function(){return!!this.isValid()&&this._isUTC},ei.isUtc=aa,ei.isUTC=aa,ei.zoneAbbr=function(){return this._isUTC?"UTC":""},ei.zoneName=function(){return this._isUTC?"Coordinated Universal Time":""},ei.dates=B("dates accessor is deprecated. Use date instead.",mc),ei.months=B("months accessor is deprecated. Use month instead",mt),ei.years=B("years accessor is deprecated. Use year instead",Wt),ei.zone=B("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",function(Oe,ot){return Oe!=null?(typeof Oe!="string"&&(Oe=-Oe),this.utcOffset(Oe,ot),this):-this.utcOffset()}),ei.isDSTShifted=B("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",function(){if(!c(this._isDSTShifted))return this._isDSTShifted;var Oe={};if(x(Oe,this),(Oe=Do(Oe))._a){var ot=Oe._isUTC?b(Oe._a):Xo(Oe._a);this._isDSTShifted=this.isValid()&&0{function t(r){if(typeof r!="string")throw new TypeError("Path must be a string. Received "+JSON.stringify(r))}function n(r,l){for(var a,s="",c=0,u=-1,d=0,h=0;h<=r.length;++h){if(h2){var k=s.lastIndexOf("/");if(k!==s.length-1){k===-1?(s="",c=0):c=(s=s.slice(0,k)).length-1-s.lastIndexOf("/"),u=h,d=0;continue}}else if(s.length===2||s.length===1){s="",c=0,u=h,d=0;continue}}l&&(s.length>0?s+="/..":s="..",c=2)}else s.length>0?s+="/"+r.slice(u+1,h):s=r.slice(u+1,h),c=h-u-1;u=h,d=0}else a===46&&d!==-1?++d:d=-1}return s}var o={resolve:function(){for(var r,l="",a=!1,s=arguments.length-1;s>=-1&&!a;s--){var c;s>=0?c=arguments[s]:(r===void 0&&(r=process.cwd()),c=r),t(c),c.length!==0&&(l=c+"/"+l,a=c.charCodeAt(0)===47)}return l=n(l,!a),a?l.length>0?"/"+l:"/":l.length>0?l:"."},normalize:function(r){if(t(r),r.length===0)return".";var l=r.charCodeAt(0)===47,a=r.charCodeAt(r.length-1)===47;return(r=n(r,!l)).length!==0||l||(r="."),r.length>0&&a&&(r+="/"),l?"/"+r:r},isAbsolute:function(r){return t(r),r.length>0&&r.charCodeAt(0)===47},join:function(){if(arguments.length===0)return".";for(var r,l=0;l0&&(r===void 0?r=a:r+="/"+a)}return r===void 0?".":o.normalize(r)},relative:function(r,l){if(t(r),t(l),r===l||(r=o.resolve(r))===(l=o.resolve(l)))return"";for(var a=1;ah){if(l.charCodeAt(u+m)===47)return l.slice(u+m+1);if(m===0)return l.slice(u+m)}else c>h&&(r.charCodeAt(a+m)===47?k=m:m===0&&(k=0));break}var b=r.charCodeAt(a+m);if(b!==l.charCodeAt(u+m))break;b===47&&(k=m)}var g="";for(m=a+k+1;m<=s;++m)m!==s&&r.charCodeAt(m)!==47||(g.length===0?g+="..":g+="/..");return g.length>0?g+l.slice(u+k):(u+=k,l.charCodeAt(u)===47&&++u,l.slice(u))},_makeLong:function(r){return r},dirname:function(r){if(t(r),r.length===0)return".";for(var l=r.charCodeAt(0),a=l===47,s=-1,c=!0,u=r.length-1;u>=1;--u)if((l=r.charCodeAt(u))===47){if(!c){s=u;break}}else c=!1;return s===-1?a?"/":".":a&&s===1?"//":r.slice(0,s)},basename:function(r,l){if(l!==void 0&&typeof l!="string")throw new TypeError('"ext" argument must be a string');t(r);var a,s=0,c=-1,u=!0;if(l!==void 0&&l.length>0&&l.length<=r.length){if(l.length===r.length&&l===r)return"";var d=l.length-1,h=-1;for(a=r.length-1;a>=0;--a){var k=r.charCodeAt(a);if(k===47){if(!u){s=a+1;break}}else h===-1&&(u=!1,h=a+1),d>=0&&(k===l.charCodeAt(d)?--d==-1&&(c=a):(d=-1,c=h))}return s===c?c=h:c===-1&&(c=r.length),r.slice(s,c)}for(a=r.length-1;a>=0;--a)if(r.charCodeAt(a)===47){if(!u){s=a+1;break}}else c===-1&&(u=!1,c=a+1);return c===-1?"":r.slice(s,c)},extname:function(r){t(r);for(var l=-1,a=0,s=-1,c=!0,u=0,d=r.length-1;d>=0;--d){var h=r.charCodeAt(d);if(h!==47)s===-1&&(c=!1,s=d+1),h===46?l===-1?l=d:u!==1&&(u=1):l!==-1&&(u=-1);else if(!c){a=d+1;break}}return l===-1||s===-1||u===0||u===1&&l===s-1&&l===a+1?"":r.slice(l,s)},format:function(r){if(r===null||typeof r!="object")throw new TypeError('The "pathObject" argument must be of type Object. Received type '+typeof r);return function(l,a){var s=a.dir||a.root,c=a.base||(a.name||"")+(a.ext||"");return s?s===a.root?s+c:s+"/"+c:c}(0,r)},parse:function(r){t(r);var l={root:"",dir:"",base:"",ext:"",name:""};if(r.length===0)return l;var a,s=r.charCodeAt(0),c=s===47;c?(l.root="/",a=1):a=0;for(var u=-1,d=0,h=-1,k=!0,m=r.length-1,b=0;m>=a;--m)if((s=r.charCodeAt(m))!==47)h===-1&&(k=!1,h=m+1),s===46?u===-1?u=m:b!==1&&(b=1):u!==-1&&(b=-1);else if(!k){d=m+1;break}return u===-1||h===-1||b===0||b===1&&u===h-1&&u===d+1?h!==-1&&(l.base=l.name=d===0&&c?r.slice(1,h):r.slice(d,h)):(d===0&&c?(l.name=r.slice(1,u),l.base=r.slice(1,h)):(l.name=r.slice(d,u),l.base=r.slice(d,h)),l.ext=r.slice(u,h)),d>0?l.dir=r.slice(0,d-1):c&&(l.dir="/"),l},sep:"/",delimiter:":",win32:null,posix:null};o.posix=o,e.exports=o},8218:()=>{},8009:()=>{},5354:()=>{},6878:()=>{},8183:()=>{},1428:()=>{},4551:()=>{},8800:()=>{},1993:()=>{},3069:()=>{},9143:()=>{}},Gse={};function Lf(e){var t=Gse[e];if(t!==void 0)return t.exports;var n=Gse[e]={id:e,loaded:!1,exports:{}};return Sno[e].call(n.exports,n,n.exports,Lf),n.loaded=!0,n.exports}Lf.c=Gse,Lf.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return Lf.d(t,{a:t}),t},Lf.d=(e,t)=>{for(var n in t)Lf.o(t,n)&&!Lf.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},Lf.g=function(){if(typeof globalThis=="object")return globalThis;try{return this||new Function("return this")()}catch{if(typeof window=="object")return window}}(),Lf.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),Lf.r=e=>{typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},Lf.nmd=e=>(e.paths=[],e.children||(e.children=[]),e);var Eno=Lf(Lf.s=8968).Z;const Mno=Object.freeze(Object.defineProperty({__proto__:null,default:Eno},Symbol.toStringTag,{value:"Module"}));
-
+
diff --git a/src/env.ts b/src/env.ts
index 069a4ee..5b209d5 100644
--- a/src/env.ts
+++ b/src/env.ts
@@ -7,13 +7,28 @@ const defaultEnvValues: Record = {
prod: `NODE_ENV=prod\nPORT=60000\nOSSURL=http://127.0.0.1:60000/`,
};
-//加载环境变量
-const env = process.env.NODE_ENV ?? "dev";
+// 判断是否为打包后的 Electron 环境
+const isElectron = typeof process.versions?.electron !== "undefined";
+let isPackaged = false;
+if (isElectron) {
+ const { app } = require("electron");
+ isPackaged = app.isPackaged;
+}
+
+//加载环境变量(打包环境默认使用 prod)
+const env = process.env.NODE_ENV ?? (isPackaged ? "prod" : "dev");
if (!env) {
console.log("[环境变量为空]");
process.exit(1);
} else {
- const envDir = path.resolve("env");
+ // Electron 打包环境使用 userData 目录,开发环境使用项目根目录
+ let envDir: string;
+ if (isElectron) {
+ const { app } = require("electron");
+ envDir = path.join(app.getPath("userData"), "env");
+ } else {
+ envDir = path.resolve("env");
+ }
const envFilePath = path.join(envDir, `.env.${env}`);
// 自动创建 env 目录和文件(.gitignore 可能忽略了这些文件)
diff --git a/src/lib/fixDB.ts b/src/lib/fixDB.ts
index 79df5e8..9c52bcd 100644
--- a/src/lib/fixDB.ts
+++ b/src/lib/fixDB.ts
@@ -29,7 +29,7 @@ export default async (knex: Knex): Promise => {
await addColumn("t_video", "aiConfigId", "integer");
await addColumn("t_config", "modelType", "text");
await addColumn("t_videoConfig", "audioEnabled", "integer");
- await addColumn("t_videoConfig", "errorReason", "text");
+ await addColumn("t_video", "errorReason", "text");
//更正字段
await alterColumnType("t_config", "modelType", "text");
diff --git a/src/router.ts b/src/router.ts
index ae73206..abef8f6 100644
--- a/src/router.ts
+++ b/src/router.ts
@@ -1,160 +1,162 @@
-// @routes-hash 3cfad40b3c8658b442ab766a9323d740
+// @routes-hash a5e432459af85c08bbc13a86444f292c
import { Express } from "express";
import route1 from "./routes/assets/addAssets";
import route2 from "./routes/assets/delAssets";
-import route3 from "./routes/assets/generateAssets";
-import route4 from "./routes/assets/getAssets";
-import route5 from "./routes/assets/getImage";
-import route6 from "./routes/assets/getStoryboard";
-import route7 from "./routes/assets/polishPrompt";
-import route8 from "./routes/assets/saveAssets";
-import route9 from "./routes/assets/updateAssets";
-import route10 from "./routes/index/index";
-import route11 from "./routes/novel/addNovel";
-import route12 from "./routes/novel/delNovel";
-import route13 from "./routes/novel/getNovel";
-import route14 from "./routes/novel/updateNovel";
-import route15 from "./routes/other/clearDatabase";
-import route16 from "./routes/other/deleteAllData";
-import route17 from "./routes/other/getCaptcha";
-import route18 from "./routes/other/login";
-import route19 from "./routes/other/testAI";
-import route20 from "./routes/other/testImage";
-import route21 from "./routes/other/testVideo";
-import route22 from "./routes/outline/addOutline";
-import route23 from "./routes/outline/agentsOutline";
-import route24 from "./routes/outline/delOutline";
-import route25 from "./routes/outline/getHistory";
-import route26 from "./routes/outline/getOutline";
-import route27 from "./routes/outline/getPartScript";
-import route28 from "./routes/outline/getStoryline";
-import route29 from "./routes/outline/setHistory";
-import route30 from "./routes/outline/updateOutline";
-import route31 from "./routes/outline/updateScript";
-import route32 from "./routes/outline/updateStoryline";
-import route33 from "./routes/project/addProject";
-import route34 from "./routes/project/delProject";
-import route35 from "./routes/project/getProject";
-import route36 from "./routes/project/getProjectCount";
-import route37 from "./routes/project/getSingleProject";
-import route38 from "./routes/project/updateProject";
-import route39 from "./routes/prompt/getPrompts";
-import route40 from "./routes/prompt/updatePrompt";
-import route41 from "./routes/script/generateScriptApi";
-import route42 from "./routes/script/generateScriptSave";
-import route43 from "./routes/script/geScriptApi";
-import route44 from "./routes/setting/addModel";
-import route45 from "./routes/setting/configurationModel";
-import route46 from "./routes/setting/delModel";
-import route47 from "./routes/setting/getAiModelMap";
-import route48 from "./routes/setting/getLog";
-import route49 from "./routes/setting/getSetting";
-import route50 from "./routes/setting/getVideoModelList";
-import route51 from "./routes/setting/updateModel";
-import route52 from "./routes/setting/updeteModel";
-import route53 from "./routes/storyboard/batchSuperScoreImage";
-import route54 from "./routes/storyboard/chatStoryboard";
-import route55 from "./routes/storyboard/generateShotImage";
-import route56 from "./routes/storyboard/generateStoryboardApi";
-import route57 from "./routes/storyboard/generateVideoPrompt";
-import route58 from "./routes/storyboard/getStoryboard";
-import route59 from "./routes/storyboard/keepStoryboard";
-import route60 from "./routes/storyboard/saveStoryboard";
-import route61 from "./routes/storyboard/uploadImage";
-import route62 from "./routes/task/getTaskApi";
-import route63 from "./routes/task/taskDetails";
-import route64 from "./routes/user/getUser";
-import route65 from "./routes/video/addVideo";
-import route66 from "./routes/video/addVideoConfig";
-import route67 from "./routes/video/deleteVideoConfig";
-import route68 from "./routes/video/generatePrompt";
-import route69 from "./routes/video/generateVideo";
-import route70 from "./routes/video/getManufacturer";
-import route71 from "./routes/video/getVideo";
-import route72 from "./routes/video/getVideoConfigs";
-import route73 from "./routes/video/getVideoModel";
-import route74 from "./routes/video/getVideoStoryboards";
-import route75 from "./routes/video/reviseVideoStoryboards";
-import route76 from "./routes/video/saveVideo";
-import route77 from "./routes/video/upDateVideoConfig";
+import route3 from "./routes/assets/delAssetsImage";
+import route4 from "./routes/assets/generateAssets";
+import route5 from "./routes/assets/getAssets";
+import route6 from "./routes/assets/getImage";
+import route7 from "./routes/assets/getStoryboard";
+import route8 from "./routes/assets/polishPrompt";
+import route9 from "./routes/assets/saveAssets";
+import route10 from "./routes/assets/updateAssets";
+import route11 from "./routes/index/index";
+import route12 from "./routes/novel/addNovel";
+import route13 from "./routes/novel/delNovel";
+import route14 from "./routes/novel/getNovel";
+import route15 from "./routes/novel/updateNovel";
+import route16 from "./routes/other/clearDatabase";
+import route17 from "./routes/other/deleteAllData";
+import route18 from "./routes/other/getCaptcha";
+import route19 from "./routes/other/login";
+import route20 from "./routes/other/testAI";
+import route21 from "./routes/other/testImage";
+import route22 from "./routes/other/testVideo";
+import route23 from "./routes/outline/addOutline";
+import route24 from "./routes/outline/agentsOutline";
+import route25 from "./routes/outline/delOutline";
+import route26 from "./routes/outline/getHistory";
+import route27 from "./routes/outline/getOutline";
+import route28 from "./routes/outline/getPartScript";
+import route29 from "./routes/outline/getStoryline";
+import route30 from "./routes/outline/setHistory";
+import route31 from "./routes/outline/updateOutline";
+import route32 from "./routes/outline/updateScript";
+import route33 from "./routes/outline/updateStoryline";
+import route34 from "./routes/project/addProject";
+import route35 from "./routes/project/delProject";
+import route36 from "./routes/project/getProject";
+import route37 from "./routes/project/getProjectCount";
+import route38 from "./routes/project/getSingleProject";
+import route39 from "./routes/project/updateProject";
+import route40 from "./routes/prompt/getPrompts";
+import route41 from "./routes/prompt/updatePrompt";
+import route42 from "./routes/script/generateScriptApi";
+import route43 from "./routes/script/generateScriptSave";
+import route44 from "./routes/script/geScriptApi";
+import route45 from "./routes/setting/addModel";
+import route46 from "./routes/setting/configurationModel";
+import route47 from "./routes/setting/delModel";
+import route48 from "./routes/setting/getAiModelMap";
+import route49 from "./routes/setting/getLog";
+import route50 from "./routes/setting/getSetting";
+import route51 from "./routes/setting/getVideoModelList";
+import route52 from "./routes/setting/updateModel";
+import route53 from "./routes/setting/updeteModel";
+import route54 from "./routes/storyboard/batchSuperScoreImage";
+import route55 from "./routes/storyboard/chatStoryboard";
+import route56 from "./routes/storyboard/generateShotImage";
+import route57 from "./routes/storyboard/generateStoryboardApi";
+import route58 from "./routes/storyboard/generateVideoPrompt";
+import route59 from "./routes/storyboard/getStoryboard";
+import route60 from "./routes/storyboard/keepStoryboard";
+import route61 from "./routes/storyboard/saveStoryboard";
+import route62 from "./routes/storyboard/uploadImage";
+import route63 from "./routes/task/getTaskApi";
+import route64 from "./routes/task/taskDetails";
+import route65 from "./routes/user/getUser";
+import route66 from "./routes/video/addVideo";
+import route67 from "./routes/video/addVideoConfig";
+import route68 from "./routes/video/deleteVideoConfig";
+import route69 from "./routes/video/generatePrompt";
+import route70 from "./routes/video/generateVideo";
+import route71 from "./routes/video/getManufacturer";
+import route72 from "./routes/video/getVideo";
+import route73 from "./routes/video/getVideoConfigs";
+import route74 from "./routes/video/getVideoModel";
+import route75 from "./routes/video/getVideoStoryboards";
+import route76 from "./routes/video/reviseVideoStoryboards";
+import route77 from "./routes/video/saveVideo";
+import route78 from "./routes/video/upDateVideoConfig";
export default async (app: Express) => {
app.use("/assets/addAssets", route1);
app.use("/assets/delAssets", route2);
- app.use("/assets/generateAssets", route3);
- app.use("/assets/getAssets", route4);
- app.use("/assets/getImage", route5);
- app.use("/assets/getStoryboard", route6);
- app.use("/assets/polishPrompt", route7);
- app.use("/assets/saveAssets", route8);
- app.use("/assets/updateAssets", route9);
- app.use("/index", route10);
- app.use("/novel/addNovel", route11);
- app.use("/novel/delNovel", route12);
- app.use("/novel/getNovel", route13);
- app.use("/novel/updateNovel", route14);
- app.use("/other/clearDatabase", route15);
- app.use("/other/deleteAllData", route16);
- app.use("/other/getCaptcha", route17);
- app.use("/other/login", route18);
- app.use("/other/testAI", route19);
- app.use("/other/testImage", route20);
- app.use("/other/testVideo", route21);
- app.use("/outline/addOutline", route22);
- app.use("/outline/agentsOutline", route23);
- app.use("/outline/delOutline", route24);
- app.use("/outline/getHistory", route25);
- app.use("/outline/getOutline", route26);
- app.use("/outline/getPartScript", route27);
- app.use("/outline/getStoryline", route28);
- app.use("/outline/setHistory", route29);
- app.use("/outline/updateOutline", route30);
- app.use("/outline/updateScript", route31);
- app.use("/outline/updateStoryline", route32);
- app.use("/project/addProject", route33);
- app.use("/project/delProject", route34);
- app.use("/project/getProject", route35);
- app.use("/project/getProjectCount", route36);
- app.use("/project/getSingleProject", route37);
- app.use("/project/updateProject", route38);
- app.use("/prompt/getPrompts", route39);
- app.use("/prompt/updatePrompt", route40);
- app.use("/script/generateScriptApi", route41);
- app.use("/script/generateScriptSave", route42);
- app.use("/script/geScriptApi", route43);
- app.use("/setting/addModel", route44);
- app.use("/setting/configurationModel", route45);
- app.use("/setting/delModel", route46);
- app.use("/setting/getAiModelMap", route47);
- app.use("/setting/getLog", route48);
- app.use("/setting/getSetting", route49);
- app.use("/setting/getVideoModelList", route50);
- app.use("/setting/updateModel", route51);
- app.use("/setting/updeteModel", route52);
- app.use("/storyboard/batchSuperScoreImage", route53);
- app.use("/storyboard/chatStoryboard", route54);
- app.use("/storyboard/generateShotImage", route55);
- app.use("/storyboard/generateStoryboardApi", route56);
- app.use("/storyboard/generateVideoPrompt", route57);
- app.use("/storyboard/getStoryboard", route58);
- app.use("/storyboard/keepStoryboard", route59);
- app.use("/storyboard/saveStoryboard", route60);
- app.use("/storyboard/uploadImage", route61);
- app.use("/task/getTaskApi", route62);
- app.use("/task/taskDetails", route63);
- app.use("/user/getUser", route64);
- app.use("/video/addVideo", route65);
- app.use("/video/addVideoConfig", route66);
- app.use("/video/deleteVideoConfig", route67);
- app.use("/video/generatePrompt", route68);
- app.use("/video/generateVideo", route69);
- app.use("/video/getManufacturer", route70);
- app.use("/video/getVideo", route71);
- app.use("/video/getVideoConfigs", route72);
- app.use("/video/getVideoModel", route73);
- app.use("/video/getVideoStoryboards", route74);
- app.use("/video/reviseVideoStoryboards", route75);
- app.use("/video/saveVideo", route76);
- app.use("/video/upDateVideoConfig", route77);
+ app.use("/assets/delAssetsImage", route3);
+ app.use("/assets/generateAssets", route4);
+ app.use("/assets/getAssets", route5);
+ app.use("/assets/getImage", route6);
+ app.use("/assets/getStoryboard", route7);
+ app.use("/assets/polishPrompt", route8);
+ app.use("/assets/saveAssets", route9);
+ app.use("/assets/updateAssets", route10);
+ app.use("/index", route11);
+ app.use("/novel/addNovel", route12);
+ app.use("/novel/delNovel", route13);
+ app.use("/novel/getNovel", route14);
+ app.use("/novel/updateNovel", route15);
+ app.use("/other/clearDatabase", route16);
+ app.use("/other/deleteAllData", route17);
+ app.use("/other/getCaptcha", route18);
+ app.use("/other/login", route19);
+ app.use("/other/testAI", route20);
+ app.use("/other/testImage", route21);
+ app.use("/other/testVideo", route22);
+ app.use("/outline/addOutline", route23);
+ app.use("/outline/agentsOutline", route24);
+ app.use("/outline/delOutline", route25);
+ app.use("/outline/getHistory", route26);
+ app.use("/outline/getOutline", route27);
+ app.use("/outline/getPartScript", route28);
+ app.use("/outline/getStoryline", route29);
+ app.use("/outline/setHistory", route30);
+ app.use("/outline/updateOutline", route31);
+ app.use("/outline/updateScript", route32);
+ app.use("/outline/updateStoryline", route33);
+ app.use("/project/addProject", route34);
+ app.use("/project/delProject", route35);
+ app.use("/project/getProject", route36);
+ app.use("/project/getProjectCount", route37);
+ app.use("/project/getSingleProject", route38);
+ app.use("/project/updateProject", route39);
+ app.use("/prompt/getPrompts", route40);
+ app.use("/prompt/updatePrompt", route41);
+ app.use("/script/generateScriptApi", route42);
+ app.use("/script/generateScriptSave", route43);
+ app.use("/script/geScriptApi", route44);
+ app.use("/setting/addModel", route45);
+ app.use("/setting/configurationModel", route46);
+ app.use("/setting/delModel", route47);
+ app.use("/setting/getAiModelMap", route48);
+ app.use("/setting/getLog", route49);
+ app.use("/setting/getSetting", route50);
+ app.use("/setting/getVideoModelList", route51);
+ app.use("/setting/updateModel", route52);
+ app.use("/setting/updeteModel", route53);
+ app.use("/storyboard/batchSuperScoreImage", route54);
+ app.use("/storyboard/chatStoryboard", route55);
+ app.use("/storyboard/generateShotImage", route56);
+ app.use("/storyboard/generateStoryboardApi", route57);
+ app.use("/storyboard/generateVideoPrompt", route58);
+ app.use("/storyboard/getStoryboard", route59);
+ app.use("/storyboard/keepStoryboard", route60);
+ app.use("/storyboard/saveStoryboard", route61);
+ app.use("/storyboard/uploadImage", route62);
+ app.use("/task/getTaskApi", route63);
+ app.use("/task/taskDetails", route64);
+ app.use("/user/getUser", route65);
+ app.use("/video/addVideo", route66);
+ app.use("/video/addVideoConfig", route67);
+ app.use("/video/deleteVideoConfig", route68);
+ app.use("/video/generatePrompt", route69);
+ app.use("/video/generateVideo", route70);
+ app.use("/video/getManufacturer", route71);
+ app.use("/video/getVideo", route72);
+ app.use("/video/getVideoConfigs", route73);
+ app.use("/video/getVideoModel", route74);
+ app.use("/video/getVideoStoryboards", route75);
+ app.use("/video/reviseVideoStoryboards", route76);
+ app.use("/video/saveVideo", route77);
+ app.use("/video/upDateVideoConfig", route78);
}
diff --git a/src/routes/assets/delAssetsImage.ts b/src/routes/assets/delAssetsImage.ts
new file mode 100644
index 0000000..c186af0
--- /dev/null
+++ b/src/routes/assets/delAssetsImage.ts
@@ -0,0 +1,27 @@
+import express from "express";
+import u from "@/utils";
+import { z } from "zod";
+import { success } from "@/lib/responseFormat";
+import { validateFields } from "@/middleware/middleware";
+const router = express.Router();
+
+// 删除资产图片
+export default router.post(
+ "/",
+ validateFields({
+ imageId: z.number().optional(),
+ assetsId: z.number().optional(),
+ }),
+ async (req, res) => {
+ const { imageId, assetsId } = req.body;
+ if (assetsId) {
+ await u.db("t_assets").where("id", assetsId).update({
+ filePath: null,
+ });
+ }
+ if (imageId) {
+ await u.db("t_image").where("id", imageId).delete();
+ }
+ res.status(200).send(success({ message: "删除资产图片成功" }));
+ },
+);
diff --git a/src/routes/setting/getAiModelMap.ts b/src/routes/setting/getAiModelMap.ts
index fa10f51..20ec1ec 100644
--- a/src/routes/setting/getAiModelMap.ts
+++ b/src/routes/setting/getAiModelMap.ts
@@ -8,6 +8,6 @@ export default router.post("/", async (req, res) => {
const configData = await u
.db("t_aiModelMap")
.leftJoin("t_config", "t_aiModelMap.configId", "t_config.id")
- .select("t_aiModelMap.name", "t_config.model", "t_aiModelMap.id", "t_aiModelMap.key");
+ .select("t_aiModelMap.name", "t_config.model", "t_aiModelMap.id", "t_aiModelMap.key", "t_config.manufacturer");
res.status(200).send(success(configData));
});
diff --git a/src/types/database.d.ts b/src/types/database.d.ts
index 67c3c9c..78e03b1 100644
--- a/src/types/database.d.ts
+++ b/src/types/database.d.ts
@@ -1,20 +1,6 @@
-// @db-hash 5a1cbe86324cb073c1931fc53c56725f
+// @db-hash 8ef9e37c14c453b2d95832b971baca8a
//该文件由脚本自动生成,请勿手动修改
-export interface _t_video_old_20260210 {
- 'aiConfigId'?: number | null;
- 'configId'?: number | null;
- 'filePath'?: string | null;
- 'firstFrame'?: string | null;
- 'id'?: number;
- 'model'?: string | null;
- 'prompt'?: string | null;
- 'resolution'?: string | null;
- 'scriptId'?: number | null;
- 'state'?: number | null;
- 'storyboardImgs'?: string | null;
- 'time'?: number | null;
-}
export interface t_aiModelMap {
'configId'?: number | null;
'id'?: number;
@@ -53,6 +39,7 @@ export interface t_config {
'manufacturer'?: string | null;
'model'?: string | null;
'modelType'?: string | null;
+ 'name'?: string | null;
'type'?: string | null;
'userId'?: number | null;
}
@@ -152,12 +139,10 @@ export interface t_video {
'time'?: number | null;
}
export interface t_videoConfig {
- 'aiConfigId'?: number | null;
'audioEnabled'?: number | null;
'createTime'?: number | null;
'duration'?: number | null;
'endFrame'?: string | null;
- 'errorReason'?: string | null;
'id'?: number;
'images'?: string | null;
'manufacturer'?: string | null;
@@ -172,7 +157,6 @@ export interface t_videoConfig {
}
export interface DB {
- "_t_video_old_20260210": _t_video_old_20260210;
"t_aiModelMap": t_aiModelMap;
"t_assets": t_assets;
"t_chatHistory": t_chatHistory;