Files
prod/frontend/dist/assets/GamesView-qXfQemHN.js
T
2026-10-27 10:22:58 +07:00

1 line
9.3 KiB
JavaScript

import{Bn as e,Ct as t,Dt as n,Ot as r,Sn as i,St as a,Yt as o,_n as s,bt as c,ht as l,kt as u,on as d,qt as f,u as ee,wt as p,xt as m}from"./client-Cla4nwje.js";import{t as h}from"./Card-CrMmjCG9.js";import{i as g,r as te,t as _}from"./ui-BA7-de63.js";import{t as v}from"./Modal-CN5nME2y.js";import{t as ne}from"./DatePicker-9AZnBsvW.js";import{t as y}from"./Button-VoKvEQ76.js";import{t as b}from"./Select-B9I1NLMN.js";import{t as x}from"./_plugin-vue_export-helper-B7eW7EFJ.js";import{t as re}from"./Upload-B0CETZ5G.js";import{t as S}from"./Input-DzFzi-R9.js";import{t as C}from"./Alert-fL3Q-g2e.js";import{t as w}from"./Space-CJfXe_1I.js";import{t as ie}from"./Flex-DuV0IffR.js";import{i as ae,o as oe,pt as se}from"./index-7v6g2BIQ.js";import{t as ce}from"./HeaderMenu-DU5PaOxU.js";import{t as le}from"./binary_client-PuN2iwOn.js";import{t as T}from"./datetime-BJNH0M1T.js";var ue={class:`center-block-custom`},de={class:`width1200`},fe=[`onClick`],E={class:`game-title`},pe={class:`game-description`},me={key:2,class:`game-date`},he={key:3,class:`game-date`},D={key:4,class:`game-actions`},ge={key:0},_e={key:0,class:`create-hint`},ve={key:1,class:`create-hint`},O=x(u({__name:`GamesPage`,setup(u){let x=ae(),O=te(),k=ee(),A=s([]),ye=_(),j=oe(),M=le(),N=c(()=>j.hasAnyRole([`admin`,`organizer`,`author`])),P=c(()=>ye.environment===`venue`&&j.hasAnyRole([`admin`,`organizer`,`developer`])),F=s(!1),I=s([]),L=s(null),R=s(``),z=s(!1),B=s(!1);function be(){I.value=[],L.value=null,R.value=``,F.value=!0}function xe({fileList:e}){z.value||(I.value=e.slice(-1),R.value=``,L.value=null)}async function Se(){if(!P.value||z.value)return;let e=I.value[0]?.file;if(!e||e.size===0){R.value=`Выберите непустой ZIP-файл`;return}if(!e.name.toLowerCase().endsWith(`.zip`)){R.value=`Выберите файл с расширением .zip`;return}if(e.size>1024**3){R.value=`Размер пакета не должен превышать 1 ГиБ`;return}z.value=!0,R.value=``;try{L.value=await M.uploadGamePackage(e),await V()}catch(e){R.value=e instanceof Error?e.message:`Не удалось импортировать игру`}finally{z.value=!1}}async function Ce(){let e=L.value?.gameID;if(!(!e||B.value)){B.value=!0,R.value=``;try{if(!(await x.GetGame({ID:e})).game?.ID)throw Error(`Импортированная игра недоступна или удалена. Повторный импорт пакета не восстанавливает удалённую игру.`);await k.push(`/games/`+e)}catch(e){R.value=e instanceof Error?e.message:`Не удалось проверить доступность игры`}finally{B.value=!1}}}async function V(){try{A.value=[];let e=await x.GetGames({});A.value=e.games||[]}catch(e){O.error(e instanceof Error?e.message:`Не удалось загрузить игры`)}}V();async function we(e){k.push(`/games/`+e)}function Te(e){k.push(`/games/`+e+`/results`)}let H=s(!1),U=s(``),W=s(`online`),G=s(``),K=s(``),q=s(null),J=s(null),Y=s(!1),X=s(!1),Z=s(!1),Q=s([]),$=c(()=>Q.value.filter(e=>e.status==`public`&&e.ID!=null).map(e=>({label:e.name||``,value:e.ID})));async function Ee(){X.value=!0,Z.value=!1;try{let e=await x.GetScenariosCatalog({});Q.value=e.scenarios||[]}catch(e){Z.value=!0,O.error(e instanceof Error?e.message:`Не удалось загрузить сценарии`)}finally{X.value=!1}}function De(){U.value=``,W.value=`online`,G.value=``,K.value=``,q.value=null,J.value=null,H.value=!0,Ee()}async function Oe(){let e=U.value.trim(),t=q.value,n=J.value;if(!(e==``||t==null||n==null)){Y.value=!0;try{let r=await x.AddGame({name:e,description:G.value,location:K.value.trim(),format:W.value,startAt:new Date(n).toISOString(),scenarioID:t});O.success(`Игра создана`),H.value=!1,k.push(`/games/`+r.ID)}catch(e){O.error(e instanceof Error?e.message:`Не удалось создать игру`)}finally{Y.value=!1}}}return(s,c)=>(f(),p(l,null,[m(`div`,ue,[m(`div`,de,[P.value?(f(),a(i(y),{key:0,onClick:be},{default:d(()=>[...c[12]||=[n(`Импорт игры`,-1)]]),_:1})):t(``,!0),N.value?(f(),p(`div`,{key:1,class:`game-block game-block-hover`,onClick:c[0]||=e=>De()},[...c[13]||=[m(`div`,{class:`game-create-content`},[m(`span`,{class:`game-create-plus`},`+`),m(`span`,null,`Создать игру`)],-1)]])):t(``,!0),(f(!0),p(l,null,o(A.value,o=>(f(),p(`div`,{key:o.ID,class:`game-block`,onClick:e=>we(o.ID)},[m(`div`,E,e(o.name)+` — `+e(o.format===`offline`?`Offline`:`Online`),1),o.export?.state===`preparing`?(f(),a(i(g),{key:0,type:`warning`,size:`small`},{default:d(()=>[...c[14]||=[n(` Подготовка офлайн-пакета `,-1)]]),_:1})):o.export?.state===`ready`?(f(),a(i(g),{key:1,type:`info`,size:`small`},{default:d(()=>[...c[15]||=[n(` Игра в офлайн-режиме `,-1)]]),_:1})):t(``,!0),m(`div`,pe,e(o.description),1),i(T)(o.startAt)?(f(),p(`div`,me,` Начало: `+e(i(T)(o.startAt)),1)):t(``,!0),o.location?(f(),p(`div`,he,`Место: `+e(o.location),1)):t(``,!0),N.value&&o.status==`finish`?(f(),p(`div`,D,[r(i(y),{size:`small`,ghost:``,onClick:se(e=>Te(o.ID),[`stop`])},{default:d(()=>[...c[16]||=[n(`Результаты`,-1)]]),_:1},8,[`onClick`])])):t(``,!0)],8,fe))),128))])]),r(i(v),{show:F.value,"onUpdate:show":c[2]||=e=>F.value=e,"mask-closable":!z.value,"close-on-esc":!z.value},{default:d(()=>[r(i(h),{style:{width:`min(94vw, 600px)`},title:`Импорт игры`,bordered:!1,role:`dialog`,"aria-modal":`true`},{"header-extra":d(()=>[r(i(y),{disabled:z.value,"aria-label":`Закрыть импорт`,onClick:c[1]||=e=>F.value=!1},{default:d(()=>[...c[17]||=[n(`Закрыть`,-1)]]),_:1},8,[`disabled`])]),default:d(()=>[r(i(w),{vertical:``},{default:d(()=>[c[22]||=m(`p`,null,`Выберите один ZIP-пакет размером до 1 ГиБ. Содержимое проверит сервер.`,-1),r(i(re),{"file-list":I.value,"default-upload":!1,max:1,accept:`.zip`,disabled:z.value,onChange:xe},{default:d(()=>[r(i(y),{disabled:z.value},{default:d(()=>[...c[18]||=[n(`Выбрать ZIP`,-1)]]),_:1},8,[`disabled`])]),_:1},8,[`file-list`,`disabled`]),I.value[0]?.file?(f(),p(`p`,ge,e(I.value[0].name)+` — `+e(I.value[0].file.size.toLocaleString(`ru-RU`))+` байт `,1)):t(``,!0),z.value?(f(),a(i(C),{key:1,type:`info`,role:`status`},{default:d(()=>[...c[19]||=[n(`Импортируем пакет…`,-1)]]),_:1})):t(``,!0),R.value?(f(),a(i(C),{key:2,type:`error`,role:`alert`},{default:d(()=>[n(e(R.value),1)]),_:1})):t(``,!0),L.value?(f(),a(i(C),{key:3,type:`success`,role:`status`},{default:d(()=>[n(e(L.value.repeated?`Пакет уже импортирован`:`Игра импортирована`),1)]),_:1})):t(``,!0),L.value?(f(),a(i(y),{key:4,loading:B.value,disabled:B.value,onClick:Ce},{default:d(()=>[...c[20]||=[n(`Открыть игру`,-1)]]),_:1},8,[`loading`,`disabled`])):(f(),a(i(y),{key:5,loading:z.value,disabled:z.value||!I.value.length||!P.value,onClick:Se},{default:d(()=>[...c[21]||=[n(`Загрузить пакет`,-1)]]),_:1},8,[`loading`,`disabled`]))]),_:1})]),_:1})]),_:1},8,[`show`,`mask-closable`,`close-on-esc`]),r(i(v),{show:H.value,"onUpdate:show":c[11]||=e=>H.value=e},{default:d(()=>[r(i(h),{style:{width:`min(94vw, 600px)`},title:`Создание игры`,bordered:!1,size:`huge`,role:`dialog`,"aria-modal":`true`},{"header-extra":d(()=>[r(i(y),{onClick:c[3]||=e=>H.value=!1},{default:d(()=>[...c[23]||=[n(` x `,-1)]]),_:1})]),footer:d(()=>[r(i(ie),{justify:`end`},{default:d(()=>[r(i(y),{onClick:c[10]||=e=>Oe(),loading:Y.value,disabled:U.value.trim().length==0||q.value==null||J.value==null||Y.value},{default:d(()=>[...c[30]||=[n(` Создать `,-1)]]),_:1},8,[`loading`,`disabled`])]),_:1})]),default:d(()=>[r(i(w),{vertical:``},{default:d(()=>[c[24]||=m(`p`,null,`Название`,-1),r(i(S),{value:U.value,"onUpdate:value":c[4]||=e=>U.value=e,type:`text`,placeholder:`Дело №0 "Следствие ведут овечки"`},null,8,[`value`]),c[25]||=m(`p`,null,`Формат игры`,-1),r(i(b),{value:W.value,"onUpdate:value":c[5]||=e=>W.value=e,options:[{label:`Online`,value:`online`},{label:`Offline`,value:`offline`}],"aria-label":`Формат игры`},null,8,[`value`]),c[26]||=m(`p`,null,`Описание`,-1),r(i(S),{value:G.value,"onUpdate:value":c[6]||=e=>G.value=e,type:`textarea`,placeholder:`Убийство пастуха...`},null,8,[`value`]),c[27]||=m(`p`,null,`Место проведения`,-1),r(i(S),{value:K.value,"onUpdate:value":c[7]||=e=>K.value=e,type:`text`,placeholder:`Оставьте пустым для онлайн-игры`},null,8,[`value`]),c[28]||=m(`p`,null,`Сценарий (дело из каталога)`,-1),r(i(b),{value:q.value,"onUpdate:value":c[8]||=e=>q.value=e,options:$.value,placeholder:`Выберите дело из каталога`},null,8,[`value`,`options`]),X.value?(f(),p(`p`,_e,`Загружаем сценарии...`)):$.value.length==0?(f(),p(`p`,ve,e(Z.value?`Не удалось загрузить список сценариев`:`В каталоге пока нет опубликованных сценариев`),1)):t(``,!0),c[29]||=m(`p`,null,`Дата и время проведения`,-1),r(i(ne),{value:J.value,"onUpdate:value":c[9]||=e=>J.value=e,type:`datetime`},null,8,[`value`])]),_:1})]),_:1})]),_:1},8,[`show`]),r(ce,{active:`games`})],64))}}),[[`__scopeId`,`data-v-e8cd7764`]]),k=u({__name:`GamesView`,setup(e){return(e,t)=>(f(),a(O))}});export{k as default};