Files
evening_detective_frontend/dist/assets/ScenariosEditorView-CdqtVRvp.js
T
2026-09-03 01:28:39 +07:00

1 line
18 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import{E as e,Et as t,S as n,T as r,U as i,V as a,W as o,Z as s,a as c,b as l,ct as u,p as d,rt as f,v as p,w as m,x as h,y as g}from"./vue-router-CyfP71JJ.js";import{t as _}from"./Input-DZU-Go3a.js";import{t as v}from"./Modal-CNI9T3gF.js";import{n as y,t as ee}from"./use-message-BogQuslR.js";import{n as te,t as ne}from"./Upload-B27p2tkz.js";import{t as re}from"./Card-DLG50fM0.js";import{n as b,t as x}from"./PlaceBlock-DZefW4Qc.js";import{t as S}from"./Tag-B7XapiC1.js";import{t as C}from"./Alert-BIy5vvGu.js";import{t as w}from"./Space-BvgvIjkZ.js";import{t as T}from"./Flex-DDWM9KY-.js";import{t as E}from"./text-BQdtX5-W.js";import{t as D}from"./index-CIGUcMwT.js";import{a as ie,i as ae,n as O,r as oe,t as se}from"./HeaderMenu-BCz0PYuC.js";import{t as k}from"./Settings-BX8XQBVz.js";import{t as A}from"./IntroBlock-BhD3IrgD.js";import{t as j}from"./archive_client-CRY_AwSZ.js";var M={key:1,class:`place-block`},N={class:`message-header`},P={class:`message-content`},F={key:0},I={key:1,class:`intro-empty`},L={key:3,class:`place-block`},R={class:`slot-block`},z=O(e({__name:`QuestionBlock`,props:{newQuestionCode:{type:String},newQuestionText:{type:String},newQuestionAnswer:{type:String},question:{type:Object},mode:{type:String,required:!0}},emits:[`update:newQuestionCode`,`update:newQuestionText`,`update:newQuestionAnswer`,`update:mode`],setup(e,{emit:i}){let c=e,l=i,f=e=>{l(`update:newQuestionCode`,e)},p=e=>{l(`update:newQuestionText`,e)},v=e=>{l(`update:newQuestionAnswer`,e)},y=e=>{l(`update:mode`,e)};return(i,l)=>(a(),n(d,null,[e.mode==`mini-add`?(a(),n(`div`,{key:0,class:`place-block-hover show-editor-block`,onClick:l[0]||=e=>y(`add`)},[...l[5]||=[g(`p`,{class:`place-image-plus`},`+`,-1)]])):h(``,!0),e.mode==`add`?(a(),n(`div`,M,[r(u(w),{vertical:``},{default:s(()=>[r(u(b),null,{default:s(()=>[r(u(_),{style:{width:`25%`},value:e.newQuestionCode,"onUpdate:value":f,type:`text`,placeholder:`В-1`},null,8,[`value`]),r(u(_),{style:{width:`75%`},value:e.newQuestionText,"onUpdate:value":p,type:`text`,placeholder:`Кто украл пастуха?`},null,8,[`value`])]),_:1}),r(u(_),{value:e.newQuestionAnswer,"onUpdate:value":v,type:`textarea`,autosize:{minRows:2},placeholder:`Правильный ответ (виден только автору и организаторам)`},null,8,[`value`]),o(i.$slots,`default`,{},void 0,!0)]),_:3})])):h(``,!0),e.mode==`show-editor`?(a(),n(`div`,{key:2,class:`place-block-hover show-editor-block`,onClick:l[1]||=e=>y(`edit`)},[g(`div`,N,t(c.question?.code)+`: `+t(c.question?.text),1),l[6]||=g(`hr`,{class:`hr`},null,-1),g(`div`,P,[c.question?.answer?(a(),n(`span`,F,`Ответ: `+t(c.question.answer),1)):(a(),n(`span`,I,`Ответ не задан`))])])):h(``,!0),e.mode==`edit`?(a(),n(`div`,L,[r(u(w),{vertical:``},{default:s(()=>[r(u(b),null,{default:s(()=>[r(u(_),{style:{width:`25%`},value:c.question.code,"onUpdate:value":l[2]||=e=>c.question.code=e,type:`text`,placeholder:`В-1`},null,8,[`value`]),r(u(_),{style:{width:`75%`},value:c.question.text,"onUpdate:value":l[3]||=e=>c.question.text=e,type:`text`,placeholder:`Кто украл пастуха?`},null,8,[`value`])]),_:1}),l[8]||=g(`p`,{class:`settings-header`},`Правильный ответ`,-1),r(u(_),{value:c.question.answer,"onUpdate:value":l[4]||=e=>c.question.answer=e,type:`textarea`,autosize:{minRows:2},placeholder:`Правильный ответ (виден только автору и организаторам)`},null,8,[`value`]),r(u(E),{class:`hint`,depth:`3`},{default:s(()=>[...l[7]||=[m(` Смена кода вопроса не переносит ответы команд, отправленные под старым кодом. `,-1)]]),_:1}),g(`div`,R,[o(i.$slots,`default`,{},void 0,!0)])]),_:3})])):h(``,!0)],64))}}),[[`__scopeId`,`data-v-610ec2d2`]]),ce={class:`center-block-custom`},le={class:`width700`},ue={class:`places-container`},de={class:`settings-block`},B=O(e({__name:`ScenariosEditorPage`,setup(e){let o=ie(),b=ae(),O=j(),M=c().params.id,N=f(!1),P=f(``),F=f(``),I=f(!1),L=ee(),R=f([]),B=f({id:void 0,name:void 0,story:void 0,author:void 0,status:void 0,updatedAt:void 0,createdAt:void 0,publishedAt:void 0}),V=f({text:``,audio:``}),H=f(`show-editor`),fe=p(()=>B.value.story?.places||[]),pe=p(()=>B.value.story?.questions||[]);async function U(e){let t=await b.GetFullScenario({id:e});if(t.error!=``){L.error(t.error);return}B.value=t.scenario,B.value.story?.places?.forEach(e=>{let t=e;t.oldCode=t.code,t.mode=`show-editor`}),B.value.story?.questions?.forEach(e=>{let t=e;t.oldCode=t.code,t.mode=`show-editor`}),V.value=B.value.story?.introduction||{text:``,audio:``},H.value=`show-editor`}U(Number(M));async function me(e){let t=await b.DeleteScenario({id:e});if(t.error!=``){L.error(t.error);return}D.push(`/scenarios`)}async function he(e){let t=await b.PublicScenario({id:e});if(t.error!=``){L.error(t.error);return}await U(Number(M)),P.value=``,N.value=!1}async function ge(e,t){let n=new Date().toISOString(),r=await b.AddGame({name:(`Тестовая игра: `+e).trim(),description:`Тестовая игра`,startAt:n,scenarioId:t});if(r.error!=``){L.error(r.error);return}let i=await b.AddTeam({name:`Тестовая команда`,gameId:r.id});if(i.error!=``){L.error(i.error);return}D.push(`/team-story/`+i.id+`?password=`+i.password)}async function _e(e){let t=await b.DraftScenario({id:e});if(t.error!=``){L.error(t.error);return}await U(Number(M)),P.value=``,N.value=!1}async function ve(){I.value=!0;try{let{blob:e,filename:t}=await O.downloadScenarioArchive(B.value.id),n=URL.createObjectURL(e),r=document.createElement(`a`);r.href=n,r.download=t,document.body.appendChild(r),r.click(),r.remove(),setTimeout(()=>URL.revokeObjectURL(n),1e3),L.success(`Архив сценария скачан`)}catch(e){L.error(e instanceof Error?e.message:`Не удалось скачать архив`)}finally{I.value=!1}}async function W(e,t){if(!e)return{filename:``,fileType:``};let n=await e.arrayBuffer(),r=new Uint8Array(n),i=await b.UploadFile({filename:t,data:be(r)});return i.error==``?{filename:i.filename||``,fileType:i.file_type||``}:(L.error(i.error),{filename:``,fileType:``})}async function ye(){let e=``;if(R.value&&R.value.length>0){let t=R.value[0].file||null;if(t==null)return;let n=await W(t,`scenarios_`+B.value.id+`_`+t.name);if(n.filename===``)return;e=n.filename}let t=await b.UpdateScenario({id:B.value.id,name:B.value.name,description:B.value.description,image:e});if(t.error!=``){L.error(t.error);return}await U(Number(M)),N.value=!1}function be(e){let t=xe(e);return btoa(t)}function xe(e){let t=``;for(let n=0;n<e.length;n+=5e4){let r=e.slice(n,n+5e4);t+=String.fromCharCode(...r)}return t}let G=f(``),K=f(``),q=f(``),J=f(`mini-add`);async function Se(){let e=await b.AddScenarioPlace({id:B.value.id,place:{code:G.value,name:K.value,text:q.value,image:void 0,hidden:void 0,applications:void 0,doors:void 0,keys:void 0}});if(e.error!=``){L.error(e.error);return}await U(Number(M)),G.value=``,K.value=``,q.value=``,J.value=`add`}async function Ce(){G.value=``,K.value=``,q.value=``,J.value=`mini-add`}async function we(e,t){for(let n of t.doors||[])if(e.story?.places?.find(e=>e.code==n.code)==null){let t=await b.AddScenarioPlace({id:e.id,place:{code:n.code,name:n.name,text:void 0,image:void 0,hidden:!0,applications:void 0,doors:void 0,keys:void 0}});if(t.error!=``){L.error(t.error);return}}}async function Te(e){await U(Number(M)),e.mode=`show-editor`}async function Ee(e){if(e.fileList&&e.fileList.length>0){let t=e.fileList[0].file||null;if(t==null)return;let n=await W(t,`scenarios_`+B.value.id+`_place_`+e.code+`_`+t.name);if(n.filename===``)return;e.image=n.filename}let t=e.applications||[];for(let n of t){if(!n.fileList||n.fileList.length==0)continue;let t=n.fileList[0].file||null;if(t==null)continue;let r=await W(t,`scenarios_`+B.value.id+`_place_`+e.code+`_app_`+t.name);if(r.filename===``)return;n.image=r.filename,n.file_type=r.fileType}await we(B.value,e);let n=await b.UpdateScenarioPlace({id:B.value.id,code:e.oldCode,place:e});if(n.error!=``){L.error(n.error);return}await U(Number(M)),e.mode=`show-editor`}async function De(e){let t=await b.DeleteScenarioPlace({id:B.value.id,code:e.oldCode});if(t.error!=``){L.error(t.error);return}await U(Number(M))}let Y=f(``),X=f(``),Z=f(``),Q=f(`mini-add`);async function Oe(){let e=await b.AddScenarioQuestion({id:B.value.id,question:{code:Y.value,text:X.value,answer:Z.value}});if(e.error!=``){L.error(e.error);return}await U(Number(M)),Y.value=``,X.value=``,Z.value=``,Q.value=`add`}async function ke(){Y.value=``,X.value=``,Z.value=``,Q.value=`mini-add`}async function Ae(e){let t=await b.UpdateScenarioQuestion({id:B.value.id,code:e.oldCode,question:{code:e.code,text:e.text,answer:e.answer}});if(t.error!=``){L.error(t.error);return}await U(Number(M)),e.mode=`show-editor`}async function $(e){await U(Number(M)),e.mode=`show-editor`}async function je(e){let t=await b.DeleteScenarioQuestion({id:B.value.id,code:e.oldCode});if(t.error!=``){L.error(t.error);return}await U(Number(M))}function Me(e){return e&&e.split(`/`).pop()||``}async function Ne(){let e=``;if(V.value.fileList&&V.value.fileList.length>0){let t=V.value.fileList[0].file||null;if(t==null||(e=(await W(t,`scenarios_`+B.value.id+`_intro_`+t.name)).filename,e===``))return}else e=Me(V.value.audio);let t=await b.UpdateScenarioIntro({id:B.value.id,introduction:{text:V.value.text,audio:e}});if(t.error!=``){L.error(t.error);return}await U(Number(M))}async function Pe(){await U(Number(M))}function Fe(){let e=[{text:`Настя, ты просто ослепительна сегодня!`,nameForm:`Настя`},{text:`У Насти невероятный вкус!`,nameForm:`Насти`},{text:`Настенька, твоя улыбка делает мир ярче.`,nameForm:`Настенька`},{text:`С Настей всегда интересно общаться.`,nameForm:`Настей`},{text:`Настя, ты — источник вдохновения для всех вокруг.`,nameForm:`Настя`},{text:`Мне нравится, как Настя смотрит на мир.`,nameForm:`Настя`},{text:`Настюха, ты супер!`,nameForm:`Настюха`},{text:`Талант Насти поражает!`,nameForm:`Насти`},{text:`Настя, твоя энергия заряжает батарейки!`,nameForm:`Настя`},{text:`С Настей хочется проводить каждую минуту.`,nameForm:`Настей`},{text:`Настенька, ты — самое красивое, что случилось в этом мире.`,nameForm:`Настенька`},{text:`У Насти золотое сердце.`,nameForm:`Насти`}];return e[Math.floor(Math.random()*e.length)].text}return(e,c)=>(a(),n(d,null,[g(`div`,ce,[g(`div`,le,[g(`div`,ue,[B.value.status==`public`?(a(),l(u(C),{key:0,title:`Сценарий опубликован`,type:`warning`,style:{"margin-bottom":`20px`}},{default:s(()=>[...c[30]||=[m(` Не рекомендуется редактировать сценарий когда он опубликован. `,-1)]]),_:1})):h(``,!0),u(o).user?.id==2?(a(),l(u(C),{key:1,title:Fe(),type:`info`,style:{"margin-bottom":`20px`}},null,8,[`title`])):h(``,!0),g(`div`,de,[m(` Точек: `+t(B.value.story?.places?.length)+`, Вопросов: `+t(B.value.story?.questions?.length)+` `,1),r(u(y),{quaternary:``,onClick:c[0]||=e=>N.value=!0,class:`settings-button`},{default:s(()=>[r(u(oe),{class:`settings-icon`},{default:s(()=>[r(u(k))]),_:1}),c[31]||=m(` Настройки `,-1)]),_:1})]),r(A,{introduction:V.value,mode:H.value,"onUpdate:mode":c[3]||=e=>H.value=e},{default:s(()=>[r(u(T),{justify:`end`},{default:s(()=>[r(u(y),{onClick:c[1]||=e=>Pe()},{default:s(()=>[...c[32]||=[m(`Отмена`,-1)]]),_:1}),r(u(y),{onClick:c[2]||=e=>Ne()},{default:s(()=>[...c[33]||=[m(`Сохранить вступление`,-1)]]),_:1})]),_:1})]),_:1},8,[`introduction`,`mode`]),c[44]||=g(`div`,{class:`questions-header`},`Вопросы дела`,-1),r(z,{mode:Q.value,"onUpdate:mode":c[6]||=e=>Q.value=e,newQuestionCode:Y.value,"onUpdate:newQuestionCode":c[7]||=e=>Y.value=e,newQuestionText:X.value,"onUpdate:newQuestionText":c[8]||=e=>X.value=e,newQuestionAnswer:Z.value,"onUpdate:newQuestionAnswer":c[9]||=e=>Z.value=e},{default:s(()=>[r(u(T),{justify:`end`},{default:s(()=>[r(u(y),{onClick:c[4]||=e=>ke()},{default:s(()=>[...c[34]||=[m(`Отмена`,-1)]]),_:1}),r(u(y),{onClick:c[5]||=e=>Oe(),disabled:!Y.value},{default:s(()=>[...c[35]||=[m(`Добавить вопрос`,-1)]]),_:1},8,[`disabled`])]),_:1})]),_:1},8,[`mode`,`newQuestionCode`,`newQuestionText`,`newQuestionAnswer`]),(a(!0),n(d,null,i(pe.value,e=>(a(),l(z,{question:e,mode:e.mode,"onUpdate:mode":t=>e.mode=t,key:e.oldCode??e.code??``},{default:s(()=>[r(u(T),{justify:`end`},{default:s(()=>[r(u(y),{onClick:t=>je(e),type:`error`,ghost:``},{default:s(()=>[...c[36]||=[m(`Удалить`,-1)]]),_:1},8,[`onClick`]),r(u(y),{onClick:t=>$(e)},{default:s(()=>[...c[37]||=[m(`Отмена`,-1)]]),_:1},8,[`onClick`]),r(u(y),{onClick:t=>Ae(e),disabled:e.code==``},{default:s(()=>[...c[38]||=[m(`Сохранить`,-1)]]),_:1},8,[`onClick`,`disabled`])]),_:2},1024)]),_:2},1032,[`question`,`mode`,`onUpdate:mode`]))),128)),r(x,{mode:J.value,"onUpdate:mode":c[12]||=e=>J.value=e,newPlaceCode:G.value,"onUpdate:newPlaceCode":c[13]||=e=>G.value=e,newPlaceName:K.value,"onUpdate:newPlaceName":c[14]||=e=>K.value=e,newPlaceText:q.value,"onUpdate:newPlaceText":c[15]||=e=>q.value=e},{default:s(()=>[r(u(T),{justify:`end`},{default:s(()=>[r(u(y),{onClick:c[10]||=e=>Ce()},{default:s(()=>[...c[39]||=[m(`Отмена`,-1)]]),_:1}),r(u(y),{onClick:c[11]||=e=>Se(),disabled:!G.value},{default:s(()=>[...c[40]||=[m(`Добавить точку`,-1)]]),_:1},8,[`disabled`])]),_:1})]),_:1},8,[`mode`,`newPlaceCode`,`newPlaceName`,`newPlaceText`]),(a(!0),n(d,null,i(fe.value,e=>(a(),l(x,{place:e,mode:e.mode,"onUpdate:mode":t=>e.mode=t,key:e.oldCode??e.code??``},{default:s(()=>[r(u(T),{justify:`end`},{default:s(()=>[r(u(y),{onClick:t=>De(e),type:`error`,ghost:``},{default:s(()=>[...c[41]||=[m(`Удалить`,-1)]]),_:1},8,[`onClick`]),r(u(y),{onClick:t=>Te(e)},{default:s(()=>[...c[42]||=[m(`Отмена`,-1)]]),_:1},8,[`onClick`]),r(u(y),{onClick:t=>Ee(e),disabled:e.code==``},{default:s(()=>[...c[43]||=[m(`Сохранить`,-1)]]),_:1},8,[`onClick`,`disabled`])]),_:2},1024)]),_:2},1032,[`place`,`mode`,`onUpdate:mode`]))),128))])])]),r(u(v),{show:N.value,"onUpdate:show":c[29]||=e=>N.value=e},{default:s(()=>[r(u(re),{style:{width:`600px`},title:`Настройки сценария`,bordered:!1,size:`huge`,role:`dialog`,"aria-modal":`true`},{"header-extra":s(()=>[r(u(y),{onClick:c[16]||=e=>N.value=!1},{default:s(()=>[...c[45]||=[m(` x `,-1)]]),_:1})]),footer:s(()=>[...c[69]||=[]]),default:s(()=>[r(u(w),{vertical:``},{default:s(()=>[c[58]||=g(`p`,null,`Название`,-1),r(u(_),{value:B.value.name,"onUpdate:value":c[17]||=e=>B.value.name=e,type:`text`,placeholder:`Дело №0 "Следствие ведут овечки"`},null,8,[`value`]),c[59]||=g(`p`,{class:`settings-header`},`Описание`,-1),r(u(_),{value:B.value.description,"onUpdate:value":c[18]||=e=>B.value.description=e,type:`textarea`,placeholder:`Убийство пастуха...`},null,8,[`value`]),c[60]||=g(`p`,{class:`settings-header`},`Картинка`,-1),r(u(_),{value:B.value.image,"onUpdate:value":c[19]||=e=>B.value.image=e,type:`text`,placeholder:`default_scenario.png`,disabled:``},null,8,[`value`]),r(u(ne),{"directory-dnd":``,max:1,"file-list":R.value,"onUpdate:fileList":c[20]||=e=>R.value=e},{default:s(()=>[r(u(te),null,{default:s(()=>[r(u(E),{style:{"font-size":`16px`}},{default:s(()=>[...c[46]||=[m(` Щелкните или перетащите файл в эту область для загрузки `,-1)]]),_:1})]),_:1})]),_:1},8,[`file-list`]),r(u(y),{onClick:c[21]||=e=>ye(),ghost:``},{default:s(()=>[...c[47]||=[m(` Сохранить изменения `,-1)]]),_:1}),c[61]||=g(`hr`,{class:`settings-hr`},null,-1),c[62]||=g(`p`,{class:`settings-header`},`Архив сценария`,-1),c[63]||=g(`p`,{class:`settings-hint`},` Скачайте сценарий ZIP-архивом (scenario.json + изображения) и импортируйте его в другом аккаунте. `,-1),r(u(y),{loading:I.value,disabled:!B.value.id,ghost:``,onClick:c[22]||=e=>ve()},{default:s(()=>[...c[48]||=[m(` Скачать архив (.zip) `,-1)]]),_:1},8,[`loading`,`disabled`]),c[64]||=g(`hr`,{class:`settings-hr`},null,-1),c[65]||=g(`p`,null,`Создать тестовую игру`,-1),r(u(y),{onClick:c[23]||=e=>ge(B.value.name||``,B.value.id),ghost:``},{default:s(()=>[...c[49]||=[m(` Создать игру `,-1)]]),_:1}),c[66]||=g(`hr`,{class:`settings-hr`},null,-1),c[67]||=g(`p`,null,`Публикация`,-1),g(`p`,null,[B.value.status==`public`?(a(),l(u(S),{key:0,bordered:!1,type:`success`,class:`status-block`},{default:s(()=>[...c[50]||=[m(` Опубликовано `,-1)]]),_:1})):h(``,!0),B.value.status==`draft`?(a(),l(u(S),{key:1,bordered:!1,type:`warning`,class:`status-block`},{default:s(()=>[...c[51]||=[m(` В разработке `,-1)]]),_:1})):h(``,!0)]),g(`p`,null,[c[52]||=m(` Введите название сценария `,-1),r(u(E),{class:`name-text`,strong:``},{default:s(()=>[m(t(B.value.name),1)]),_:1})]),r(u(_),{value:P.value,"onUpdate:value":c[24]||=e=>P.value=e,type:`text`,placeholder:`Дело №0 "Следствие ведут овечки"`},null,8,[`value`]),B.value.status==`public`?h(``,!0):(a(),l(u(y),{key:0,onClick:c[25]||=e=>he(B.value.id),ghost:``,disabled:P.value!=B.value.name},{default:s(()=>[...c[53]||=[m(` Опубликовать сценарий `,-1)]]),_:1},8,[`disabled`])),B.value.status==`draft`?h(``,!0):(a(),l(u(y),{key:1,onClick:c[26]||=e=>_e(B.value.id),ghost:``,disabled:P.value!=B.value.name},{default:s(()=>[...c[54]||=[m(` Снять сценарий с публикации `,-1)]]),_:1},8,[`disabled`])),c[68]||=g(`hr`,{class:`settings-hr`},null,-1),g(`p`,null,[c[55]||=m(` Введите название сценария `,-1),r(u(E),{class:`name-text`,strong:``},{default:s(()=>[m(t(B.value.name),1)]),_:1}),c[56]||=m(` чтобы удалить его `,-1)]),r(u(_),{value:F.value,"onUpdate:value":c[27]||=e=>F.value=e,type:`text`,placeholder:`Дело №0 "Следствие ведут овечки"`},null,8,[`value`]),r(u(y),{onClick:c[28]||=e=>me(B.value.id),type:`error`,ghost:``,disabled:F.value!=B.value.name},{default:s(()=>[...c[57]||=[m(` Удалить сценарий `,-1)]]),_:1},8,[`disabled`])]),_:1})]),_:1})]),_:1},8,[`show`]),r(se,{active:`scenarios`})],64))}}),[[`__scopeId`,`data-v-07f1e670`]]),V=e({__name:`ScenariosEditorView`,setup(e){return(e,t)=>(a(),l(B))}});export{V as default};