Files
prod/frontend/dist/assets/TeamStoryView-KqctY9Vy.js
T
2026-10-27 15:18:26 +07:00

1 line
14 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{At as e,Bn as t,Cn as n,Ct as r,Jt as i,Ot as a,Qt as o,St as s,Tt as c,Vn as l,Xt as u,Zt as d,cn as f,gt as p,kt as m,sn as h,u as g,vn as _,wt as v,xt as y,zn as b,zt as ee}from"./client-DrrW410h.js";import{n as x,r as te,t as ne}from"./ui-BXphkCO3.js";import{t as re}from"./Button-VP0HlDWp.js";import{t as S}from"./_plugin-vue_export-helper-2ZWAS1ss.js";import{n as ie,t as ae}from"./PlaceBlock-rRE4IOP9.js";import{t as C}from"./Input-B0pT-V_P.js";import{t as w}from"./Alert-CKEVYkKu.js";import{t as T}from"./Flex-C50LOLeC.js";import{t as oe}from"./Rate-DzWTiM8f.js";import{t as se}from"./QrCode-BtvoRbPn.js";import{D as E,dt as D,i as ce,o as le,r as ue}from"./index-CvfVA1ID.js";import{t as O}from"./HeaderText-BIRJQexj.js";import{t as de}from"./useDeviceContext-BaGiXmRj.js";import{t as k}from"./MessagePaper-B4rdZ1RT.js";var A={xmlns:`http://www.w3.org/2000/svg`,"xmlns:xlink":`http://www.w3.org/1999/xlink`,viewBox:`0 0 24 24`},j=e({name:`ContactMailRound`,render:function(e,t){return i(),c(`svg`,A,t[0]||=[s(`path`,{d:`M21 8V7l-3 2l-3-2v1l2.72 1.82a.5.5 0 0 0 .55 0L21 8zm1-5H2C.9 3 0 3.9 0 5v14c0 1.1.9 2 2 2h20c1.1 0 1.99-.9 1.99-2L24 5c0-1.1-.9-2-2-2zM8 6c1.66 0 3 1.34 3 3s-1.34 3-3 3s-3-1.34-3-3s1.34-3 3-3zm6 12H2v-1c0-2 4-3.1 6-3.1s6 1.1 6 3.1v1zm7.5-6h-7c-.28 0-.5-.22-.5-.5v-5c0-.28.22-.5.5-.5h7c.28 0 .5.22.5.5v5c0 .28-.22.5-.5.5z`,fill:`currentColor`},null,-1)])}}),M={xmlns:`http://www.w3.org/2000/svg`,"xmlns:xlink":`http://www.w3.org/1999/xlink`,viewBox:`0 0 512 512`},N=e({name:`Footsteps`,render:function(e,t){return i(),c(`svg`,M,t[0]||=[s(`path`,{d:`M133.83 361.27c-22.61 0-41-8.17-54.79-24.39s-22.84-40.29-28.11-75.31c-7.76-51.61-.06-95.11 21.68-122.48c12.8-16.12 29.6-25.44 48.58-26.94c16.25-1.3 40.54 5.29 64 44c14.69 24.24 25.86 56.44 30.65 88.34c5.79 38.51 1.48 66.86-13.18 86.65c-11.64 15.72-29.54 25.46-53.21 29a106.46 106.46 0 0 1-15.62 1.13z`,fill:`currentColor`},null,-1),s(`path`,{d:`M173 496c-13.21 0-26.6-4.23-38.66-12.36a79.79 79.79 0 0 1-33.52-50.6c-2.85-14.66-1.14-26.31 5.22-35.64c10.33-15.15 28.87-18.56 48.49-22.18c2.07-.38 4.17-.76 6.3-1.17c4.52-.86 9.14-2 13.62-3.11c16.78-4.14 34.14-8.43 48.47 1.75c9.59 6.8 15 18.36 16.62 35.32c1.84 19.57-2.36 39.1-11.83 55c-10.19 17.11-25.47 28.42-43 31.86A61 61 0 0 1 173 496z`,fill:`currentColor`},null,-1),s(`path`,{d:`M378.17 265.27a106.69 106.69 0 0 1-15.6-1.2c-23.66-3.5-41.56-13.25-53.2-29c-14.66-19.79-19-48.13-13.18-86.65c4.79-31.93 15.93-64.1 30.55-88.25c23.34-38.57 47.66-45.26 64-44.08c18.92 1.38 35.69 10.57 48.51 26.6c21.89 27.37 29.65 71 21.86 122.84c-5.27 35-14.2 58.95-28.11 75.31s-32.22 24.43-54.83 24.43z`,fill:`currentColor`},null,-1),s(`path`,{d:`M339 400a61 61 0 0 1-11.68-1.13c-17.56-3.44-32.84-14.75-43-31.86c-9.47-15.9-13.67-35.43-11.83-55c1.6-17 7-28.52 16.62-35.33c14.33-10.17 31.69-5.89 48.47-1.74c4.48 1.1 9.1 2.24 13.62 3.11l6.29 1.17c19.63 3.61 38.17 7 48.5 22.17c6.36 9.33 8.07 21 5.22 35.64a79.78 79.78 0 0 1-33.52 50.61C365.56 395.78 352.17 400 339 400z`,fill:`currentColor`},null,-1)])}}),P={},F={class:`belt-block`};function I(e,t){return i(),c(`div`,null,[t[0]||=s(`div`,{class:`shadow shadow-top`},null,-1),t[1]||=s(`div`,{class:`shadow shadow-bottom`},null,-1),s(`div`,F,[d(e.$slots,`default`,{},void 0,!0)])])}var L=S(P,[[`render`,I],[`__scopeId`,`data-v-bec154c5`]]),R={},z={class:`plate-block`},B={class:`metal-plate-block`};function V(e,t){return i(),c(`div`,z,[s(`div`,B,[d(e.$slots,`default`,{},void 0,!0)]),t[0]||=s(`div`,{class:`pin pin-top-left`},null,-1),t[1]||=s(`div`,{class:`pin pin-top-right`},null,-1),t[2]||=s(`div`,{class:`pin pin-bottom-right`},null,-1),t[3]||=s(`div`,{class:`pin pin-bottom-left`},null,-1)])}var H=S(R,[[`render`,V],[`__scopeId`,`data-v-4833fe7e`]]),U={class:`form-custom`},W={class:`center-block-700`},G={class:`controller`},K={class:`counters-block`},q={class:`counter-block`},J={class:`places-text`},fe={class:`counter-block`},Y={class:`places-text`},X={class:`game-input`},Z=[`placeholder`,`disabled`],Q=[`aria-busy`,`disabled`],pe=S(e({__name:`GameInputForm`,props:{addAction:{type:Function},allPlacesCount:{},newPlacesCount:{},gameStatus:{}},setup(e){let t=e,o=_(``),d=_(!1);async function g(){if(!(d.value||t.gameStatus!=`run`||o.value.length==0)){d.value=!0;try{await t.addAction(o.value)&&(o.value=``)}finally{d.value=!1}}}function y(e){e%=100;let t=Math.floor(e/10)%10,n=e%10,r=`–`,i=`–`;return t>0&&(r=String(t)),(n>0||t>0)&&(i=String(n)),[r,i]}return(_,b)=>(i(),c(`div`,U,[m(L,{class:`input-form`},{default:h(()=>[m(H,{class:`controller-metal controller-metal-left`}),m(H,{class:`controller-metal controller-metal-right`}),s(`div`,W,[s(`div`,G,[s(`div`,K,[s(`div`,q,[s(`div`,J,[m(n(x),{class:`icon-for-counter`},{default:h(()=>[m(n(N))]),_:1})]),(i(!0),c(p,null,u(y(e.allPlacesCount),(e,t)=>(i(),c(`div`,{key:t,class:`places-text places-text-number`},l(e),1))),128))]),s(`div`,fe,[s(`div`,Y,[m(n(x),{class:`icon-for-counter`},{default:h(()=>[m(n(j))]),_:1})]),(i(!0),c(p,null,u(y(e.newPlacesCount),(e,t)=>(i(),c(`div`,{key:t,class:`places-text places-text-number`},l(e),1))),128))])]),s(`div`,X,[f(s(`input`,{id:`run`,class:`game-input-run`,"onUpdate:modelValue":b[0]||=e=>o.value=e,type:`text`,placeholder:t.gameStatus==`run`?`Место назначения`:`Ходы запрещены`,disabled:t.gameStatus!=`run`||d.value},null,8,Z),[[D,o.value]])]),b[3]||=s(`div`,{class:`game-button-run-shadow`},null,-1),s(`button`,{class:`game-button-run`,type:`submit`,"aria-busy":d.value,disabled:t.gameStatus!=`run`||o.value.length==0||d.value,onClick:g},[t.gameStatus==`run`?(i(),r(O,{key:0},{default:h(()=>[a(l(d.value?`Отправляем…`:`Поехали`),1)]),_:1})):v(``,!0),t.gameStatus==`pause`||t.gameStatus==`draft`?(i(),r(O,{key:1},{default:h(()=>[...b[1]||=[a(`Ждём`,-1)]]),_:1})):v(``,!0),t.gameStatus==`finish`?(i(),r(O,{key:2},{default:h(()=>[...b[2]||=[a(`Всё`,-1)]]),_:1})):v(``,!0)],8,Q)])])]),_:1})]))}}),[[`__scopeId`,`data-v-b5d098e6`]]),me={key:1,class:`center-block-custom`},he={class:`width700`},ge={key:0,class:`width700`},_e=[`disabled`],ve={key:1,class:`width700`},ye={class:`question-text`},be={class:`qr-main-block-text`},xe={class:`qr-block`},Se={key:4,class:`edit-panel`},$=S(e({__name:`TeamStoryPage`,setup(e){let d=le(),f=ne(),x=ce(),S=te(),D=g(),O=String(D.params.id),A=D.query.password;de(()=>({teamID:O,password:typeof A==`string`?A:void 0}));let j=_(0),M=_([]),N=_(``),P=0,F=0,I=!1,L=_(),R=_({introduction:void 0,places:[],questions:[]}),z=_({ID:void 0,name:void 0,description:void 0,startAt:void 0,status:void 0,format:void 0,location:void 0,scenario:void 0,teams:void 0,export:void 0,wifiName:void 0,wifiPassword:void 0}),B=_(``),V=y(()=>z.value?.teams?.find(e=>e.ID===O)?.name),H=y(()=>f.environment===`prod`&&z.value?.export?.state===`ready`),U=`game-review-${O}`,W=_(localStorage.getItem(U)===`1`),G=_(0),K=_(0),q=_(``),J=_(!1),fe=window.location.href,Y=()=>{let e=L.value;return e?e.scrollHeight-e.scrollTop-e.clientHeight<1:!1};async function X(e=!1){let t=++P;F++;let n;try{n=await x.GetTeamStory({ID:O,password:A})}catch(e){return t===P?(N.value=`Не удалось загрузить дело. Попробуйте обновить страницу.`,console.error(`Failed to load team story:`,e),!1):!1}finally{F--}if(t!==P)return!1;let r=R.value;N.value=``,z.value=n.game;let i=Y();i&&(j.value=0);let a=R.value.places.length;R.value={background:n.story.background,introduction:n.story.introduction,places:n.story.places?.map((e,t)=>({place:e,mode:r?.places[t]?.mode||`show`}))||[],questions:n.story.questions||[]},M.value=n.actions||[];let o=R.value.places.length;if(o>a&&a!=0&&(j.value+=o-a),await ee(),e){let e=L.value,t=e?.querySelectorAll(`.story-place`),n=t?.item(t.length-1);e&&n&&e.scrollTo({top:e.scrollTop+n.getBoundingClientRect().top-e.getBoundingClientRect().top,behavior:`instant`}),j.value=0}else if(i&&a!=0){let e=L.value;if(!e)return!1;e.scrollTop=e.scrollHeight}return!0}f.load().catch(e=>{S.error(`Не удалось загрузить сведения сервера`),console.error(`Failed to load server information:`,e)}),X(),$();async function Z(e){if(I)return!1;I=!0,P++;try{return await x.AddTeamAction({ID:O,password:A,code:e}),B.value=``,await X(!0)||S.error(`Ход сохранён, но не удалось обновить дело. Обновите страницу.`),!0}catch(e){return S.error(e instanceof Error?e.message:`Не удалось сделать ход`),!1}finally{I=!1}}let Q=_({});async function $(){let e;try{e=await x.GetTeamAnswers({ID:O,password:A})}catch(e){N.value=`Не удалось загрузить ответы команды. Попробуйте обновить страницу.`,console.error(`Failed to load team answers:`,e);return}N.value=``;let t={};for(let n of e.answers||[])t[n.questionCode||``]=n.answer||``;Q.value=t}async function Ce(){await x.SubmitTeamAnswers({ID:O,password:A,answers:(R.value.questions||[]).map(e=>({questionCode:e.code,answer:Q.value[e.code||``]||``}))}),S.success(`Ответы сохранены`),await $()}let we=y(()=>z.value?.format!==`offline`&&(z.value?.status==`run`||z.value?.status==`pause`)),Te=y(()=>z.value?.format!==`offline`&&(R.value.questions?.length||0)>0),Ee={Input:{border:`1px dashed black`,borderDisabled:`1px dashed black`,borderFocus:`1px solid black`,borderHover:`1px dashed black`,boxShadowFocus:`0 0 0 1px black`,caretColor:`black`,color:`transparent`,colorDisabled:`transparent`,colorFocus:`transparent`,fontSizeMedium:`18px`,placeholderColor:`black`,placeholderColorDisabled:`black`,textColor:`black`,textColorDisabled:`black`},Rate:{itemColor:`black`,itemColorHover:`#b8860b`,itemColorActive:`#b8860b`}};async function De(){if(!G.value||!K.value||q.value.trim()===``){S.error(`Поставьте оценки и напишите отзыв`);return}J.value=!0,await x.CreateGameReview({gameID:Number(z.value?.ID),teamID:O,password:A,rating:G.value,difficulty:K.value,text:q.value.trim()}),J.value=!1,W.value=!0,localStorage.setItem(U,`1`),S.success(`Спасибо за отзыв`)}async function Oe(){await x.DeleteLastTeamAction({ID:O}),await X(),B.value=``}return ue(()=>{!I&&F===0&&X()},2e3),(e,f)=>{let g=o(`n-space`);return i(),c(p,null,[R.value.background&&!H.value?(i(),c(`div`,{key:0,class:`case-background`,style:t({backgroundImage:`url(${JSON.stringify(R.value.background)})`}),"aria-hidden":`true`},null,4)):v(``,!0),H.value?(i(),c(`div`,me,[s(`div`,he,[m(n(w),{type:`error`,role:`alert`},{default:h(()=>[...f[4]||=[a(` Подключитесь к Wi-Fi организатора и обновите страницу. `,-1)]]),_:1})])])):(i(),c(`div`,{key:2,class:b([`center-block-custom bottom-margin smooth-scroll`,{"game-finished":z.value?.status===`finish`}]),ref_key:`scrollContainer`,ref:L},[z.value?.status===`finish`?(i(),c(`div`,ge,[m(k,{role:`status`},{default:h(()=>[...f[5]||=[s(`div`,{class:`font`},`Игра завершена. Спасибо за участие!`,-1)]]),_:1}),W.value?v(``,!0):(i(),r(k,{key:0,class:`review-block`},{default:h(()=>[f[8]||=s(`div`,{class:`font`},`Оцените игру`,-1),f[9]||=s(`hr`,{class:`questions-hr`},null,-1),m(n(E),{"theme-overrides":Ee},{default:h(()=>[f[6]||=s(`div`,{class:`review-rating font`},`Оценка`,-1),m(n(oe),{value:G.value,"onUpdate:value":f[0]||=e=>G.value=e,count:5,class:`review-rate`},null,8,[`value`]),f[7]||=s(`div`,{class:`review-rating font`},`Сложность`,-1),m(n(oe),{value:K.value,"onUpdate:value":f[1]||=e=>K.value=e,count:3,class:`review-rate`},null,8,[`value`]),m(n(C),{value:q.value,"onUpdate:value":f[2]||=e=>q.value=e,class:`review-input`,type:`textarea`,autosize:{minRows:4,maxRows:8},placeholder:`Расскажите, как прошла игра`},null,8,[`value`]),m(n(T),{justify:`end`,class:`questions-actions`},{default:h(()=>[s(`button`,{type:`button`,class:`paper-button`,disabled:J.value,onClick:De},` Отправить отзыв `,8,_e)]),_:1})]),_:1})]),_:1}))])):(i(),c(`div`,ve,[N.value?(i(),r(n(w),{key:0,type:`error`,role:`alert`},{default:h(()=>[a(l(N.value),1)]),_:1})):v(``,!0),m(pe,{addAction:Z,allPlacesCount:R.value.places.length,newPlacesCount:j.value,gameStatus:z.value?.status||``},null,8,[`allPlacesCount`,`newPlacesCount`,`gameStatus`]),z.value?.format!==`offline`&&z.value?.status&&z.value.status!=`draft`&&R.value.introduction&&(R.value.introduction.text||R.value.introduction.audio)?(i(),r(ie,{key:1,introduction:R.value.introduction,mode:`show`},null,8,[`introduction`])):v(``,!0),Te.value&&z.value?.status&&z.value.status!=`draft`?(i(),r(k,{key:2,class:`questions-block`},{default:h(()=>[f[10]||=s(`div`,{class:`font`},`Вопросы дела`,-1),f[11]||=s(`hr`,{class:`questions-hr`},null,-1),f[12]||=s(`p`,{class:`questions-hint font`},` Ответьте на вопросы дела. Ответы можно менять, пока игра идёт. `,-1),m(n(E),{"theme-overrides":Ee},{default:h(()=>[(i(!0),c(p,null,u(R.value.questions,e=>(i(),c(`div`,{key:e.code,class:`question-item font`},[s(`div`,ye,l(e.code)+`: `+l(e.text),1),m(n(C),{value:Q.value[e.code||``],"onUpdate:value":t=>Q.value[e.code||``]=t,type:`textarea`,autosize:{minRows:2,maxRows:6},disabled:!we.value,placeholder:`Ваш ответ...`},null,8,[`value`,`onUpdate:value`,`disabled`])]))),128)),we.value?(i(),r(n(T),{key:0,justify:`end`,class:`questions-actions`},{default:h(()=>[s(`button`,{type:`button`,class:`paper-button`,onClick:f[3]||=e=>Ce()},` Сохранить ответы `)]),_:1})):v(``,!0)]),_:1})]),_:1})):v(``,!0),(i(!0),c(p,null,u(R.value.places,(e,t)=>(i(),c(`div`,{key:`${z.value?.format}:${e.place.code}`,class:`story-place`},[m(ae,{place:e.place,mode:e.mode,"onUpdate:mode":t=>e.mode=t,mcp:n(d).hasRole(`author`)&&M.value[t]?.mcp,addAction:Z},null,8,[`place`,`mode`,`onUpdate:mode`,`mcp`])]))),128)),R.value.places.length==0&&z.value?.status==`draft`?(i(),r(k,{key:3,class:`qr-main-block`},{default:h(()=>[m(g,{vertical:``},{default:h(()=>[s(`p`,be,[s(`strong`,null,l(V.value),1)]),f[13]||=s(`h2`,{class:`qr-main-block-text`},`Код для подключения`,-1),s(`div`,xe,[m(n(se),{value:n(fe),size:300,padding:0},null,8,[`value`])]),f[14]||=s(`p`,{class:`qr-main-block-text`},`Игра скоро начнется`,-1)]),_:1})]),_:1})):v(``,!0),n(d).hasRole(`author`)&&R.value.places.length>0?(i(),c(`div`,Se,[m(n(T),{justify:`end`},{default:h(()=>[m(n(re),{onClick:Oe},{default:h(()=>[...f[15]||=[a(`Удалить последний ход`,-1)]]),_:1})]),_:1})])):v(``,!0)]))],2))],64)}}}),[[`__scopeId`,`data-v-9262e863`]]),Ce=e({__name:`TeamStoryView`,setup(e){let t=g();return(e,a)=>(i(),r($,{key:n(t).fullPath}))}});export{Ce as default};