mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-07-23 09:52:22 +00:00
5 lines
123 KiB
JavaScript
5 lines
123 KiB
JavaScript
import t from"../../../../../index.ci.php/public/js/components/primevue/config/config.esm.min.js";import e from"../../../../../index.ci.php/public/js/components/primevue/toast/toast.esm.min.js";import i from"../../../../../index.ci.php/public/js/components/primevue/confirmdialog/confirmdialog.esm.min.js";import r from"../../../../../index.ci.php/public/js/components/primevue/confirmationservice/confirmationservice.esm.min.js";const n={emits:["dataFetched"],props:{refresh:{type:Boolean},apiFunction:{required:!0,type:Function},apiFunctionParameters:{}},watch:{refresh:function(t,e){this.fetchData()}},data:function(){return{loading:!1,error:!1,errorMessage:null}},created:function(){this.fetchData()},methods:{fetchData:function(){if(this.loading=!0,this.error=!1,this.errorMessage=null,"function"==typeof this.apiFunction){let t=this.apiFunction(this.apiFunctionParameters);t instanceof Promise?t.then(this.successHandler).catch(this.errorHandler).finally(this.finallyHandler):this.setError("The called apiFunction does not return a Promise")}else this.setError("Property apiFunction is not a function")},setError:function(t){this.loading=!1,this.error=!0,this.errorMessage=t},successHandler:function(t){this.$emit("dataFetched",t?t.data:void 0)},errorHandler:function(t){t.response?.data?.retval?this.setError(t.response.data.retval):t.data?.message?this.setError(t.data.message):this.setError(t.message)},finallyHandler:function(){this.loading=!1}},template:'\n\t\t<slot v-if="loading" name="loading">\n\t\t\t<div class="fetch-loader">Loading...</div>\n\t\t</slot>\n\t\t<slot v-else-if="error" name="error" :error-message="errorMessage">\n\t\t\t<div class="fetch-error">{{ errorMessage }}</div>\n\t\t</slot>\n\t\t<slot v-else></slot>\n\t'};var s={getHeader:t=>({method:"get",url:"/api/frontend/v1/navigation/header",params:{navigation_page:t}}),getMenu:t=>({method:"get",url:"/api/frontend/v1/navigation/menu",params:{navigation_page:t}})};const a={components:{CoreFetchCmpt:n},props:{addHeaderMenuEntries:Object,addSideMenuEntries:Object,hideTopMenu:Boolean,leftNavCssClasses:{type:String,default:"navbar navbar-left-side"}},data:()=>({headerMenu:{},sideMenu:{}}),computed:{headerMenuEntries(){let t=this.headerMenu?{...this.headerMenu}:{};return null!=this.headerMenu&&null!=this.addHeaderMenuEntries&&Object.keys(this.addHeaderMenuEntries).length>0&&(t[this.addHeaderMenuEntries.description]=this.addHeaderMenuEntries),t},sideMenuEntries(){let t=this.sideMenu?{...this.sideMenu}:{};return null!=this.sideMenu&&null!=this.addSideMenuEntries&&Object.keys(this.addSideMenuEntries).length>0&&(t[this.addSideMenuEntries.description]=this.addSideMenuEntries),t}},methods:{getNavigationPage:()=>FHC_JS_DATA_STORAGE_OBJECT.called_path+"/"+FHC_JS_DATA_STORAGE_OBJECT.called_method,fetchCmptApiFunctionHeader(){return this.$api.call(s.getHeader(this.getNavigationPage()))},fetchCmptApiFunctionSideMenu(){return this.$api.call(s.getMenu(this.getNavigationPage()))},fetchCmptDataFetchedHeader(t){this.headerMenu=t||{}},fetchCmptDataFetchedMenu(t){this.sideMenu=t||{}},getDataBsToggle:t=>t.children?"dropdown":null},template:'\n\t\t\x3c!-- Load head menu --\x3e\n\t\t<core-fetch-cmpt v-bind:api-function="fetchCmptApiFunctionHeader" @data-fetched="fetchCmptDataFetchedHeader"></core-fetch-cmpt>\n\t\t\x3c!-- Load side menu --\x3e\n\t\t<core-fetch-cmpt v-bind:api-function="fetchCmptApiFunctionSideMenu" @data-fetched="fetchCmptDataFetchedMenu"></core-fetch-cmpt>\n\n\t\t\x3c!-- Top menu --\x3e\n\t\t<nav class="navbar navbar-expand-lg navbar-header" v-if="!hideTopMenu">\n\t\t\t<ul class="navbar-nav">\n\t\t\t\t\x3c!-- 1st level --\x3e\n\t\t\t\t<template v-for="header in headerMenuEntries">\n\t\t\t\t\t<li class="nav-item dropdown">\n\t\t\t\t\t\t<a class="nav-link header-menu-link-entry"\n\t\t\t\t\t\t\tv-bind:data-bs-toggle="this.getDataBsToggle(header)"\n\t\t\t\t\t\t\tv-bind:class="{ \'dropdown-toggle\': header.children }"\n\t\t\t\t\t\t\tv-bind:href="header.link"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<i class="fa-solid fa-fw header-menu-icon" v-bind:class="\'fa-\' + header.icon" v-if="header.icon"></i> {{ header.description }}\n\t\t\t\t\t\t</a>\n\t\t\t\t\t\t<ul class="dropdown-menu" v-if="header.children">\n\t\t\t\t\t\t\t\x3c!-- 2nd level --\x3e\n\t\t\t\t\t\t\t<template v-for="child in header.children">\n\t\t\t\t\t\t\t\t<li><a class="dropdown-item" v-bind:href="child.link">{{ child.description }}</a></li>\n\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</li>\n\t\t\t\t</template>\n\t\t\t</ul>\n\t\t\t<slot></slot>\n\t\t</nav>\n\n\t\t\x3c!-- Left side menu --\x3e\n\t\t<nav :class="leftNavCssClasses">\n\t\t\t<ul class="navbar-nav">\n\t\t\t\t\x3c!-- 1st level --\x3e\n\t\t\t\t<template v-for="menu in sideMenuEntries">\n\t\t\t\t\t<li class="nav-item">\n\t\t\t\t\t\t<a class="nav-link left-side-menu-link-entry" v-bind:href="menu.link" @click=menu.onClickCall>\n\t\t\t\t\t\t\t<i class="fa fa-fw" v-bind:class="\'fa-\'+ menu.icon"></i> {{ menu.description }}\n\t\t\t\t\t\t</a>\n\t\t\t\t\t\t<ul class="nav-link left-side-menu-second-level" v-if="menu.children">\n\t\t\t\t\t\t\t\x3c!-- 2nd level --\x3e\n\t\t\t\t\t\t\t<template v-for="child in menu.children">\n\t\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t\t\t<a class="nav-link left-side-menu-link-entry" v-bind:href="child.link" @click=child.onClickCall>\n\t\t\t\t\t\t\t\t\t\t  {{ child.description }}\n\t\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\t\t<a\n\t\t\t\t\t\t\t\t\t\tclass="nav-link left-side-menu-link-entry"\n\t\t\t\t\t\t\t\t\t\tv-bind:class="child.subscriptLinkClass"\n\t\t\t\t\t\t\t\t\t\tv-if="child.subscriptDescription"\n\t\t\t\t\t\t\t\t\t\tv-bind:href="child.link"\n\t\t\t\t\t\t\t\t\t\t@click=child.onClickSubscriptCall\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{{ child.subscriptDescription }}\n\t\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</li>\n\t\t\t\t</template>\n\t\t\t</ul>\n\t\t</nav>\n\t'};var o={name:"BootstrapModal",data:()=>({modal:null,fullscreen:!1}),props:{backdrop:{type:[Boolean,String],default:!0,validator:t=>["static",!0,!1].includes(t)},focus:{type:Boolean,default:!0},keyboard:{type:Boolean,default:!0},noCloseBtn:Boolean,dialogClass:[String,Array,Object],headerClass:{type:[String,Array,Object],default:""},bodyClass:{type:[String,Array,Object],default:"px-4 py-5"},footerClass:{type:[String,Array,Object],default:""},allowFullscreenExpand:{type:Boolean,default:!1}},emits:["hideBsModal","hiddenBsModal","hidePreventedBsModal","showBsModal","shownBsModal","toggleFullscreen"],methods:{dispose(){return this.modal.dispose()},handleUpdate(){return this.modal.handleUpdate()},hide(){return this.modal.hide()},show(t){return this.modal.show(t)},toggle(){return this.modal.toggle()},toggleFullscreen(){this.fullscreen=!this.fullscreen,this.$emit("toggleFullscreen")}},mounted(){this.$refs.modal&&(this.modal=new bootstrap.Modal(this.$refs.modal,{backdrop:this.backdrop,focus:this.focus,keyboard:this.keyboard}))},popup(t,e,i,r){const n=this,s={};void 0!==t&&(s.default=()=>t),void 0!==i&&(s.title=()=>i),void 0!==r&&(s.footer=()=>r);let a=!1;return"undefined"!=typeof primevue&&(a=!0),new Promise((t,i)=>{const r=Vue.createApp({name:"ModalTmpApp",setup:()=>()=>Vue.h(n,{class:"fade",...e,ref:"modal","onHidden.bs.modal":r.unmount},s),mounted(){this.$refs.modal.show()},beforeUnmount(){this.$refs.modal&&(!1!==this.$refs.modal.result?t(this.$refs.modal.result):i())},unmounted(){o.parentElement.removeChild(o)}}),o=document.createElement("div");a&&r.use(primevue.config.default,{zIndex:{overlay:9999}}),Promise.resolve().then(function(){return ut}).then(t=>{r.use(t.default),r.mount(o),document.body.appendChild(o)})})},template:'<div ref="modal" class="bootstrap-modal modal" tabindex="-1" @[`hide.bs.modal`]="$emit(\'hideBsModal\')" @[`hidden.bs.modal`]="$emit(\'hiddenBsModal\')" @[`hidePrevented.bs.modal`]="$emit(\'hidePreventedBsModal\')" @[`show.bs.modal`]="$emit(\'showBsModal\')" @[`shown.bs.modal`]="$emit(\'shownBsModal\')">\n\t\t<div class="modal-dialog" :class="fullscreen ? \'modal-fullscreen\' : dialogClass">\n\t\t\t<div class="modal-content">\n\t\t\t\t<div v-if="$slots.title" class="modal-header" :class="headerClass">\n\t\t\t\t\t<h5 class="modal-title"><slot name="title"/></h5>\n\t\t\t\t\t<div class="d-flex align-items-center ms-auto gap-2">\n\t\t\t\t\t\t<button \n\t\t\t\t\t\t\ttype="button" \n\t\t\t\t\t\t\tclass="btn mb-1" \n\t\t\t\t\t\t\tv-if="allowFullscreenExpand" \n\t\t\t\t\t\t\t@click="toggleFullscreen"\n\t\t\t\t\t\t\t:aria-label="fullscreen ? \'Exit Fullscreen\' : \'Enter Fullscreen\'"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<i v-if="!fullscreen" class="fa-solid fa-expand"></i>\n\t\t\t\t\t\t\t<i v-else class="fa-solid fa-compress"></i>\n\t\t\t\t\t\t</button>\n\t\t\t\t\t\t<button v-if="!noCloseBtn" type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>\n\t\t\t\t\t</div>\n\t\t\t\t\t<slot name="modal-header-content"></slot>\n\t\t\t\t</div>\n\t\t\t\t<div class="modal-body" :class="bodyClass">\n\t\t\t\t\t<slot></slot>\n\t\t\t\t</div>\n\t\t\t\t<div v-if="$slots.footer" class="modal-footer" :class="footerClass">\n\t\t\t\t\t<slot name="footer"/>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</div>'},d={name:"BootstrapAlert",components:{BsModal:o},mixins:[o],props:{dialogClass:{type:[String,Array,Object],default:"modal-dialog-centered"},onHideBsModal:Function,onHiddenBsModal:Function,onHidePreventedBsModal:Function,onShowBsModal:Function,onShownBsModal:Function},data:()=>({result:!0}),mounted(){this.modal=this.$refs.modalContainer.modal},popup(t,e){return o.popup.bind(this)(t,e)},template:'<bs-modal ref="modalContainer" class="bootstrap-alert" v-bind="$props">\n\t\t<template v-slot:default>\n\t\t\t<slot></slot>\n\t\t</template>\n\t\t<template v-slot:footer>\n\t\t\t<button type="button" class="btn btn-primary" data-bs-dismiss="modal">OK</button>\n\t\t</template>\n\t</bs-modal>'},l={name:"BootstrapPrompt",mixins:[d],props:{placeholder:String,default:String},data:()=>({value:"",result:!1}),created(){this.default&&(this.value=this.default)},popup(t,e){return"string"==typeof e&&(e={default:e}),d.popup.bind(this)(t,e)},template:'<bs-modal ref="modalContainer" class="bootstrap-prompt" v-bind="$props">\n\t\t<template v-slot:default>\n\t\t\t<slot></slot>\n\t\t\t<div>\n\t\t\t\t<input ref="input" type="text" class="form-control" :placeholder="placeholder" v-model="value">\n\t\t\t</div>\n\t\t</template>\n\t\t<template v-slot:footer>\n\t\t\t<button type="button" class="btn btn-primary" @click="result=value;this.hide()">OK</button>\n\t\t\t<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cancel</button>\n\t\t</template>\n\t</bs-modal>'},p={name:"BootstrapConfirm",mixins:[d],data:()=>({result:!1}),popup(t,e){return d.popup.bind(this)(t,e)},template:'<bs-modal ref="modalContainer" class="bootstrap-confirm" v-bind="$props">\n\t\t<template v-slot:default>\n\t\t\t<slot></slot>\n\t\t</template>\n\t\t<template v-slot:footer>\n\t\t\t<button type="button" class="btn btn-primary" @click="result=true;this.hide()">OK</button>\n\t\t\t<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cancel</button>\n\t\t</template>\n\t</bs-modal>'},h={emits:["change","delete"],props:{dashboard_id:Number,dashboard_kurzbz:String,beschreibung:String},data(){return{kurzbz:this.dashboard_kurzbz,desc:this.beschreibung}},methods:{sendDelete(){p.popup("Sure?").then(()=>this.$emit("delete",this.dashboard_id)).catch()}},template:'<div class="dashboard-admin-edit px-3">\n\t\t<div class="mb-3">\n\t\t\t<label for="dashboard-admin-edit-kurzbz">Kurz Bezeichnung</label>\n\t\t\t<input id="dashboard-admin-edit-kurzbz" type="text" class="form-control" v-model="kurzbz">\n\t\t</div>\n\t\t<div class="mb-3">\n\t\t\t<label for="dashboard-admin-edit-beschreibung">Beschreibung</label>\n\t\t\t<textarea id="dashboard-admin-edit-beschreibung" class="form-control" v-model="desc"></textarea>\n\t\t</div>\n\t\t<div>\n\t\t\t<button class="btn btn-danger" @click="sendDelete">Delete</button>\n\t\t\t<button class="btn btn-primary" @click="$emit(\'change\', {dashboard_id,dashboard_kurzbz:kurzbz,beschreibung:desc})">Update</button>\n\t\t</div>\n\t</div>'},u={emits:["change","assignWidgets"],props:{dashboard_id:Number,widgets:Array},computed:{apiurl:()=>FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/dashboard"},methods:{sendChange(t){let e=!this.widgets.find(e=>e.widget_id==t).allowed;axios.post(this.apiurl+"/Widget/setAllowed",{dashboard_id:this.dashboard_id,widget_id:t,action:e?"add":"delete"}).catch(t=>console.error("ERROR: "+t))}},created(){axios.get(this.apiurl+"/Widget/getAll",{params:{dashboard_id:this.dashboard_id}}).then(t=>{this.$emit("assignWidgets",t.data.retval.map(t=>({...t,setup:JSON.parse(t.setup),arguments:JSON.parse(t.arguments),allowed:!!t.allowed})))}).catch(t=>console.error("ERROR:",t))},template:'\n\t<div class="dashboard-admin-widgets">\n\t\t<div v-for="widget in widgets" :key="widget.widget_id" class="form-check form-switch">\n\t\t\t<input class="form-check-input" type="checkbox" role="switch" :id="\'dashboard-admin-widgets-\' + widget.widget_id" v-model="widget.allowed" @input.prevent="sendChange(widget.widget_id)">\n\t\t\t<label class="form-check-label" :for="\'dashboard-admin-widgets-\' + widget.widget_id">{{(widget.setup && widget.setup.name) || widget.widget_kurzbz}}</label>\n\t\t</div>\n\t</div>'},c={name:"GridItem",components:{},inject:{},props:{item:Object,active:Boolean},emits:["mouseDown","mouseUp","startMove","startResize","dragging","endDrag","dropDrag","item","touchStart","touchEnd"],data:()=>({dragAction:"",dragging:!1}),computed:{},methods:{registerDragAction(t){if(this.$emit("mouseDown",t),t.target.hasAttribute("drag-action"))this.dragAction=t.target.getAttribute("drag-action");else{let e=t.target.closest("[drag-action]");this.dragAction=e?e.getAttribute("drag-action"):""}},tryDragStart(t,e){let i=this.dragAction||t.target.getAttribute("drag-action");if(i){if(this.dragging=!0,"move"==i)return this.$emit("startMove",t,e);if("resize"==i)return this.$emit("startResize",t,e)}},touchDragEnd(t){this.dragging&&(this.dragging=!1,this.$emit("touchEnd",t))},touchStart(t){this.$emit("touchStart",t),this.registerDragAction(t),this.tryDragStart(t,this.item)},touchMove(t){this.dragging&&(t.preventDefault(),this.$emit("dragging",t))}},template:'\n\t<div class="drop-grid-item"\n\t\t@mousedown="registerDragAction"\n\t\t@mouseup="$emit(\'mouseUp\', $event)"\n\t\t@touchstart="touchStart"\n\t\t@touchend="touchDragEnd"\n\t\t@dragstart="tryDragStart($event, item)"\n\t\t@drag="$emit(\'dragging\',$event)"\n\t\t@touchmove="touchMove"\n\t\t@dragend="$emit(\'endDrag\', $event); dragging = false"\n\t\t:draggable="active && !item.placeholder">\n\t\t<slot v-bind="item"></slot>\n\t</div>'};class g{constructor(t){t.w?(this.w=t.w,this.h=t.h,this.data=[...t.data],this.grid=[...t.grid]):(this.w=t,this.h=1,this.data=[],this.grid=[])}isFreeSlot(t,e){const i=e*this.w+t;return!this.grid[i]&&0!==this.grid[i]}getMaxY(){return this.data.reduce((t,e)=>(e?.y>t&&(t=e.y),t),0)}getFreeSlots(){const t=[];let e=this.getMaxY(),i=this.w*(e+1);for(let t=0;t<i;t++)this.grid[t]||0===this.grid[t]||(this.grid[t]=void 0);for(let e=0;e<this.grid.length;e++)if(!this.grid[e]&&0!==this.grid[e]){let i=e%this.w,r=Math.floor(e/this.w);t.push({x:i,y:r})}return t}add(t,e){let i=this.getItemsInFrame(t.frame);if(!i.length)return t.frame.forEach(e=>this.grid[e]=t.index),this.data[t.index]=t,this.h=Math.max(this.h,t.y+t.h),[];{const r=new g(this);t.frame.forEach(t=>r.grid[t]=-1);const n=r.tryMoving(i,e);if(n.length){const e=n.sort((t,e)=>(void 0===t.cost&&(t.cost=t.moves.reduce((t,e)=>t*e.cost,1)),void 0===e.cost&&(e.cost=e.moves.reduce((t,e)=>t*e.cost,1)),t.cost>e.cost)),i=[];return e[0].moves.forEach(t=>{const e={...this.data[t.index]};e.x+=t.x,e.y+=t.y,e.frame=this.getItemFrame(e),this.h=Math.max(this.h,e.y+e.h),this.remove(e),e.frame.forEach(t=>this.grid[t]=e.index),this.data[t.index]=e,i[t.index]={index:e.index,x:e.x,y:e.y}}),t.frame.forEach(e=>this.grid[e]=t.index),this.data[t.index]=t,i}console.error("FATAL","can't arrange item on grid")}}move(t,e,i){if(t.data.place[this.w]?.pinned)return[];if(t.x==e&&t.y==i)return[];let r;this.remove(t),t.x==e?r=i-t.y>0?0:3:t.y==i&&(r=e-t.x>0?1:2);const n=Array.isArray(t.frame)?[...t.frame]:[t.frame],s={...t};s.x=e,s.y=i,s.frame=this.getItemFrame(s);let a=this.getItemsInFrame(s.frame);if(a.some(t=>this.data[t]?.data.place[this.w]?.pinned))return[];let o=a.map(t=>this.data[t]),d=o.map(t=>t.frame).flat();if(!d.some(t=>!s.frame.includes(t))&&!d.some(t=>n.includes(t))){let r=[],s=[];for(let t of n){if(s.includes(t))continue;let e=o.shift();e&&(s=[...s,...this.getItemFrame({...e,...this.getSingleFramePosition(t)})],r[e.index]={index:e.index,...this.getSingleFramePosition(t)})}return r[t.index]={index:t.index,x:e,y:i},r}const l=this.add(s,r);return l[t.index]={index:t.index,x:e,y:i},l}resize(t,e,i){if(t.w==e&&t.h==i)return[];this.remove(t);const r={...t};r.w=e,r.h=i,r.frame=this.getItemFrame(r);const n=this.add(r);return n&&(n[t.index]={index:t.index,w:e,h:i,x:t.x,y:t.y,resize:!0}),n}tryMoving(t,e){if(Array.isArray(t)){t.forEach(t=>this.remove({index:t}));let i=[{grid:this,moves:[]}];return t.forEach(t=>{let r=[];i.forEach(i=>{i.grid.tryMoving(t,e).forEach(t=>{i.moves,t.moves=[...t.moves,...i.moves],r.push(t)})}),i=r}),i}const i=[0,3,1,2];this.remove({index:t});const r=1+.2*(this.data[t].weight||0);return i.reduce((i,n)=>{let s=this.tryMovingInDirection(n,t,1,(e===n?.5:1+.1*n)*r);return s?[...i,...s]:i},[]).filter(t=>t)}tryMovingInDirection(t,e,i,r){const n={index:e,x:0,y:0,cost:r};let s;switch(t){case 0:if(this.data[e].data?.place[this.w]?.pinned||this.data[e].y-i<0)return!1;s=this.data[e].frame.map(t=>t-this.w*i),n.y=-i;break;case 3:if(this.data[e].data?.place[this.w]?.pinned)return!1;this.data[e].y+this.data[e].h+i>this.h&&(r+=.4),s=this.data[e].frame.map(t=>t+this.w*i),n.y=i;break;case 1:if(this.data[e].data?.place[this.w]?.pinned||this.data[e].x-i<0)return!1;s=this.data[e].frame.map(t=>t-i),n.x=-i;break;case 2:if(this.data[e].data?.place[this.w]?.pinned||this.data[e].x+this.data[e].w+i>this.w)return!1;s=this.data[e].frame.map(t=>t+i),n.x=i}const a=this.getItemsInFrame(s);if(a.includes(-1))return this.tryMovingInDirection(t,e,i+1,r);const o=new g(this);if(s.forEach(t=>o.grid[t]=-1),!a.length)return[{grid:o,moves:[n]}];const d=o.tryMoving(a).map(t=>t.moves.unshift(n)&&t);return!!d.length&&d}clearWeights(){this.data.forEach(t=>t.weight=void 0)}getItemsInFrame(t){return t.map(t=>this.grid[t]).filter((t,e,i)=>(t||0===t)&&i.indexOf(t)===e)}remove(t){this.grid=this.grid.map(e=>e!=t.index?e:void 0)}getItemFrame(t){const e=[];for(let i=0;i<t.w;i++)for(let r=0;r<t.h;r++)e.push(i+t.x+(r+t.y)*this.w);return e}getSingleFramePosition(t){return{x:t%this.w,y:Math.floor(t/this.w)}}debug(){return this.grid}}var f={name:"Grid",components:{GridItem:c},props:{cols:Number,items:Array,itemsSetup:Object,resizeLimit:Function,active:{type:Boolean,default:!0},marginForExtraRow:{type:Number,default:0},additionalRow:{type:Boolean,default:!1}},emits:["rearrangeItems","newItem","gridHeight","draggedItem","update:additionalRow"],data:()=>({x:-1,y:-1,clientX:0,clientY:0,mode:0,grid:null,dragGrid:null,permUpdates:[],positionUpdates:null,fixedPositionUpdates:null,draggedOffset:[0,0],draggedItem:null,draggedNode:null,reorderedItems:[],clonedWidget:null}),inject:{sectionName:{type:String,default:""}},computed:{additionalRowComputed:{get(){return this.additionalRow},set(t){this.$emit("update:additionalRow",t)}},items_hashmap(){let t={};return this.items.forEach(e=>{if(this.reorderedItems.length>0&&this.needsReordering(e)){let t=this.reorderedItems.filter(t=>t.data.widgetid==e.widgetid)?.pop();t&&(e.x=t.x,e.y=t.y)}t[`x${e.x}y${e.y}`]=e}),t},items_placeholders(){let t=[],e=this.cols,i=this.rows,r={};for(let n=0;n<i;n++)for(let i=0;i<e;i++){if(Object.keys(r).length&&r[`x${i}y${n}`])continue;let e=this.items_hashmap[`x${i}y${n}`];if(e){let t=i+e.w-1,s=n+e.h-1;if(i!=t||n!=s)for(let e=n;e<=s;e++)for(let s=i;s<=t;s++)s==i&&e==n||(r[`x${s}y${e}`]=!0)}else t.push({x:i,y:n,w:1,h:1,placeholder:!0,data:{id:"placeholder_"+String(t.length).padStart(4,"0")}})}return t},placedItems_withPlaceholders(){return[...this.placedItems,...this.items_placeholders]},rows(){return this.additionalRowComputed?this.grid?this.grid.h+1:1:this.grid?this.grid.h:1},gridStyle(){const t=this.active?this.marginForExtraRow:0;return{"--fhc-dg-row-height":100/(this.rows+t)+"%","--fhc-dg-col-width":100/this.cols+"%","--fhc-dg-item-padding-horizontal":"0.25%","--fhc-dg-item-padding-top":"0.5%","padding-bottom":100*(this.rows+t)/this.cols+"%"}},indexedItems(){return this.items.map((t,e)=>({index:e,x:t.x,y:t.y,w:t.w,h:t.h,weight:t.weight||0,data:t}))},prePlacedItems(){return this.fixedPositionUpdates?this.indexedItems.map(t=>this.fixedPositionUpdates[t.index]?{index:t.index,weight:t.weight,data:t.data,x:void 0===this.fixedPositionUpdates[t.index].x?t.x:this.fixedPositionUpdates[t.index].x,y:void 0===this.fixedPositionUpdates[t.index].y?t.y:this.fixedPositionUpdates[t.index].y,w:void 0===this.fixedPositionUpdates[t.index].w?t.w:this.fixedPositionUpdates[t.index].w,h:void 0===this.fixedPositionUpdates[t.index].h?t.h:this.fixedPositionUpdates[t.index].h}:t):this.indexedItems},placedItems(){if(!this.positionUpdates)return this.prePlacedItems;let t=this.prePlacedItems.map(t=>{if(!this.positionUpdates[t.index])return t;let e=this.positionUpdates[t.index]?.h-t.h,i=this.positionUpdates[t.index]?.w-t.w;return{resize:this.positionUpdates[t.index]?.resize,index:t.index,weight:t.weight,data:t.data,x:void 0===this.positionUpdates[t.index].x?t.x:this.positionUpdates[t.index].x,y:void 0===this.positionUpdates[t.index].y?t.y:this.positionUpdates[t.index].y,w:i>0||void 0===this.positionUpdates[t.index].w?t.w:this.positionUpdates[t.index].w,h:e>0||void 0===this.positionUpdates[t.index].h?t.h:this.positionUpdates[t.index].h}}),e=[];return t.forEach(t=>{if(t.resize){let i={...t,w:void 0===this.positionUpdates[t.index].w?t.w:this.positionUpdates[t.index].w,h:void 0===this.positionUpdates[t.index].h?t.h:this.positionUpdates[t.index].h,resizeOverlay:!0,blank:!0};e.push(i)}}),[...t,...e]},showEmptyTileHover(){return!(!this.active||!this.grid||0!=this.mode||this.x<0||this.y<0||this.x>=this.cols||this.y>=this.rows)&&this.grid.isFreeSlot(this.x,this.y)},widgetSetup(){if(this.widgetsSetup)return this.widgetsSetup.reduce((t,e)=>(t[e.widget_id]=e,t),{})}},watch:{active(t){t||this.dragCancel()},cols(){this.dragCancel()},rows:{handler(t){this.$emit("gridHeight",t)},immediate:!0},indexedItems:{handler(t){this.dragCancel();const e=this.createNewGrid(t);this.fixedPositionUpdates=e,e.length&&this.$emit("rearrangeItems",e.filter(t=>t))},immediate:!0,deep:!0}},methods:{needsReordering(t){return!t?.data?.place[this.cols]},toggleDraggedItemOverlay(t){this.draggedNode&&(t?this.draggedNode.firstElementChild.classList.add("dashboard-item-overlay"):this.draggedNode.firstElementChild.classList.remove("dashboard-item-overlay"))},dragging(t){if(1==this.mode){this.toggleDraggedItemOverlay(!0);const t=this.$refs.container.getBoundingClientRect(),e=this.clonedWidget.getBoundingClientRect();let i=this.clientY-20,r=this.clientX-15;const n=0,s=t.height-e.height,a=0,o=t.width-e.width,d=Math.max(n,Math.min(s,i)),l=Math.max(a,Math.min(o,r));this.clonedWidget.style.top=`${d}px`,this.clonedWidget.style.left=`${l}px`}},createNewGrid(t){this.grid=new g(this.cols);const e=[];let i=[...t].sort((t,e)=>this.needsReordering(t)&&this.needsReordering(e)?0:this.needsReordering(t)?999:this.needsReordering(e)?-999:t.weight>e.weight),r=[];return i.forEach(i=>{let n=this.grid.getFreeSlots();if(this.needsReordering(i)){let t=n.shift();t?(i.x=t.x,i.y=t.y):(i.x=0,i.y=this.grid.h),r.push(i)}if(i.x+i.w>this.cols){let t,r=this.cols-i.x;this.resizeLimit&&([r]=this.resizeLimit(i.data,r,i.h)),r<1&&(r=1),r>this.cols&&(r=this.cols),i.x+r>this.cols&&(t=this.cols-r),r==i.w&&(r=void 0),e[i.index]={item:i.data,x:t,w:r}}i.frame=this.grid.getItemFrame(i),this.convertGridResultToUpdate(this.grid.add(i),e,t)}),this.reorderedItems=r,this.grid.clearWeights(),e},convertGridResultToUpdate(t,e,i){t&&(i||(i=this.indexedItems),t.forEach(t=>{let r={item:i[t.index].data};void 0!==t.x&&(r.x=t.x),void 0!==t.y&&(r.y=t.y),void 0!==t.w&&(r.w=t.w),void 0!==t.h&&(r.h=t.h),e[t.index]=r}))},mouseLeave(){},updateCursor(t){if(!this.active)return this.x=this.y=-1,!1;const e=this.active?this.marginForExtraRow:0,i=this.$refs.container.getBoundingClientRect();t.clientX||t.clientY||!t.touches||(t.clientX=t.touches[0].clientX,t.clientY=t.touches[0].clientY),this.clientX=t.clientX-i.left,this.clientY=t.clientY-i.top;const r=Math.floor(this.cols*(t.clientX-i.left)/this.$refs.container.clientWidth),n=Math.floor((this.rows+e)*(t.clientY-i.top)/this.$refs.container.clientHeight);return(this.x!=r||this.y!=n)&&(this.x=r,this.y=n,!0)},_dragStart(t,e){t.dataTransfer&&(t.dataTransfer.setDragImage(t.target,-99999,-99999),t.dataTransfer.dropEffect="move",t.dataTransfer.effectAllowed="move")},startMove(t,e){this.active&&(this.mode=1,this.draggedItem=e,this.$emit("draggedItem",e),setTimeout(()=>{this.draggedNode=t.target.closest(".drop-grid-item");let e=t.target.closest(".drop-grid-item")?.cloneNode(!0);e.style.zIndex=5,e.classList.add("widgetClone"),this.$refs.container.appendChild(e);e.querySelector("[style='display: none;']").style.removeProperty("display"),this.clonedWidget=e},0),this.draggedOffset=[e.x-this.x,e.y-this.y],this._dragStart(t,e))},startResize(t,e){this.active&&(this.mode=2,this.draggedItem=e,this.$emit("draggedItem",e),this._dragStart(t))},dragOver(t){if(this.y+1>this.rows&&(1==this.mode||2==this.mode)&&this.dragCancel(),!this.active)return this.dragCancel();if(this.checkPinnedWidgetAnimation(),2==this.mode&&this.checkWidgetSizeLimitAnimation(),this.updateCursor(t))switch(this.mode){case 1:{t.preventDefault(),this.dragGrid=new g(this.grid);let e=this.x+this.draggedOffset[0],i=this.y+this.draggedOffset[1];e<0?(this.draggedOffset[0]+=e,e=0):e+this.draggedItem.w>this.cols&&(this.draggedOffset[0]+=this.cols-this.draggedItem.w-e,e=this.cols-this.draggedItem.w),i<0&&(this.draggedOffset[1]+=i,i=0),this.positionUpdates=this.dragGrid.move(this.draggedItem,e,i);break}case 2:{t.preventDefault(),this.dragGrid=new g(this.grid);let e=Math.min(this.cols-this.draggedItem.x,Math.max(1,this.x-this.draggedItem.x+1)),i=Math.max(1,this.y-this.draggedItem.y+1);this.resizeLimit&&([e,i]=this.resizeLimit(this.draggedItem.data,e,i)),this.positionUpdates=this.dragGrid.resize(this.draggedItem,e,i);break}}},dragCancel(){this.removeWidgetClones(),this.additionalRowComputed=!1,this.toggleDraggedItemOverlay(!1),this.mode=0,this.positionUpdates=null,this.draggedOffset=[0,0],this.draggedItem=null,this.$emit("draggedItem",null),this.draggedNode=null},dragEnd(){if(this.removeWidgetClones(),this.toggleDraggedItemOverlay(!1),0==this.mode)return;document.getElementById(this.draggedItem.data.widgetid).classList.remove("border-danger"),Array.from(document.getElementsByClassName("denied-dragging-animation"))?.forEach(t=>{t.classList.remove("denied-dragging-animation")}),this.mode=0;let t=[];this.convertGridResultToUpdate(this.positionUpdates,t),t=this._updateFixedPositions(t),t.length&&this.$emit("rearrangeItems",t.filter(t=>t)),this.draggedItem=null,this.draggedNode=null,this.$emit("draggedItem",null)},_updateFixedPositions(t){t.forEach((t,e)=>{this.fixedPositionUpdates[e]?this.fixedPositionUpdates[e]={...this.fixedPositionUpdates[e],...t}:this.fixedPositionUpdates[e]=t});let e=this.createNewGrid(this.prePlacedItems);return e.length?(e.forEach((e,i)=>t[i]=e),this._updateFixedPositions(t)):t},emptyTileClicked(){this.additionalRowComputed=!1,this.$emit("newItem",this.x,this.y)},updateCursorOnMouseMove(t){0==this.mode&&this.updateCursor(t)},checkPinnedWidgetAnimation(){let t=[];switch(this.mode){case 2:for(let e=this.draggedItem.x;e<=this.x;e++)for(let i=this.draggedItem.y;i<=this.y;i++)this.items.forEach(r=>{r.x==e&&r.y==i&&t.push(r)});break;case 1:t=this.items.filter(t=>t.x==this.x&&t.y==this.y)}Array.from(document.getElementsByClassName("denied-dragging-animation"))?.forEach(t=>{t.classList.remove("denied-dragging-animation")}),t.forEach(t=>{if(t.place[this.cols]&&t.place[this.cols].pinned){let e=document.getElementById(t.widgetid).querySelector("[pinned='true']");e.classList.contains("denied-dragging-animation")||e.classList.add("denied-dragging-animation")}})},checkWidgetSizeLimitAnimation(){let t=this.itemsSetup[this.draggedItem.data.widget],e=t.width.max??t.width,i=t.width.min??t.width,r=t.height.max??t.height,n=t.height.min??t.height,s=document.getElementById(this.draggedItem.data.widgetid),a=this.x-this.draggedItem.x+1,o=this.y-this.draggedItem.y+1;a>0&&(a>e||a<i)||o>0&&(o>r||o<n)?s.classList.add("border-danger"):s.classList.remove("border-danger")},removeWidgetClones(){let t=Array.from(document.getElementsByClassName("widgetClone"));for(let e=0;e<t.length;e++)this.$refs.container.removeChild(t[e])},mouseDown(){this.mode=3},mouseUp(){this.mode=0}},template:'\n\t<div\n\t\tref="container"\n\t\tclass="drop-grid position-relative h-0"\n\t\t:style="gridStyle"\n\t\t@touchmove="dragOver"\n\t\t@touchend="dragCancel"\n\t\t@dragover.prevent="dragOver"\n\t\t@drop="dragEnd($event)"\n\t\t@mousemove="updateCursorOnMouseMove"\n\t\t@mouseleave="mouseLeave">\n\t\t<TransitionGroup tag="div">\n\t\t\t<grid-item\n\t\t\t\tref="gridItems"\n\t\t\t\tv-for="(item,index) in ((mode != 1 && mode != 2) && active ? placedItems_withPlaceholders : placedItems)"\n\t\t\t\t:key="item.data.id"\n\t\t\t\t:item="item"\n\t\t\t\t@start-move="startMove"\n\t\t\t\t@mouse-down="mouseDown"\n\t\t\t\t@mouse-up="mouseUp"\n\t\t\t\t@start-resize="startResize"\n\t\t\t\t@dragging="dragging"\n\t\t\t\t@end-drag="dragEnd"\n\t\t\t\t@touch-end="dragEnd();mouseUp();"\n\t\t\t\t@touch-start="updateCursorOnMouseMove($event); mouseDown();"\n\t\t\t\tclass="position-absolute"\n\t\t\t\t:active="active"\n\t\t\t\t:style="{\n\t\t\t\t\tzIndex: item.resizeOverlay ? 1 : \'auto\',\n\t\t\t\t\ttop: \'calc(\' + item.y + \' * var(--fhc-dg-row-height))\',\n\t\t\t\t\tleft: \'calc(\' + item.x + \' * var(--fhc-dg-col-width))\',\n\t\t\t\t\twidth: \'calc(\' + item.w + \' * var(--fhc-dg-col-width))\',\n\t\t\t\t\theight: \'calc(\' + item.h + \' * var(--fhc-dg-row-height))\',\n\t\t\t\t\tpaddingTop: \'var(--fhc-dg-item-padding-top)\',\n\t\t\t\t\tpaddingLeft: \'var(--fhc-dg-item-padding-horizontal)\',\n\t\t\t\t\tpaddingRight: \'var(--fhc-dg-item-padding-horizontal)\'\n\t\t\t\t}">\n\t\t\t\t<template v-slot="item">\n\t\t\t\t\t<slot v-bind="{...item, ...item.data, index:index}" :x="item.x" :y="item.y" ></slot>\n\t\t\t\t</template>\n\t\t\t</grid-item>\n\t\t</TransitionGroup>\n\t\t\n\t</div>'};let m={},v={},A=FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/dashboard/Widget";var b={getWidget:t=>m[t],loadWidget:t=>m[t]?Promise.resolve(m[t]):v[t]?v[t]:A?(v[t]=new Promise((e,i)=>{axios.get(A,{params:{id:t}}).then(i=>{m[t]=i.data.retval,v[t]=void 0,e(m[t])}).catch(t=>i(t.response.data.retval.error))}),v[t]):Promise.reject("Widget could not be loaded because there is no path yet!"),setPath(t){A=t}},_={name:"Item",components:{BsModal:o,HeightTransition:{data:()=>({}),methods:{onEnter(t,e){t.style.height="0",t.style.height=t.scrollHeight+"px"},onLeave(t,e){t.style.height=t.scrollHeight+"px",t.style.height="0"}},template:'\n\t\t<Transition name="height" @enter="onEnter" @leave="onLeave">\n\t\t\t<slot>\n\t\t\t</slot>\n\t\t</Transition>\n\t'}},data:()=>({component:"",arguments:null,target:!1,widget:null,tmpConfig:{},isLoading:!1,hasConfig:!1,sharedData:null}),emits:["change","remove","dragstart","resizestart","configOpened","configClosed","pinItem","unPinItem"],props:["id","widgetID","config","width","height","custom","hidden","editMode","loading","item_data","place","setup","dragstate","resizeOverlay","additionalRow"],computed:{maxHeight(){return this.setup?.height?.max},maxWidth(){return"[object Number]"==Object.prototype.toString.call(this.setup?.width)?this.setup?.width:this.setup?.width?.max},minHeight(){return this.setup?.height?.min},minWidth(){return this.setup?.width?.min},isResizeable(){return this.maxWidth>1||this.maxHeight>1},isPinned(){return!!this.place?.pinned},ready(){return this.component&&null!==this.arguments}},methods:{unpin(){if(!this.editMode)return;let t={item:this.item_data,x:this.item_data.x,y:this.item_data.y};this.$emit("unPinItem",[t])},pinItem(){let t={item:this.item_data,x:this.item_data.x,y:this.item_data.y};this.$emit("pinItem",[t])},getWidgetC4Link:t=>FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+t.setup.cis4link,handleShowBsModal(){this.$emit("configOpened")},handleHideBsModal(){this.$emit("configClosed")},mouseDown(t){this.target=t.target},startDrag(t){this.$refs.dragHandle.contains(this.target)?this.$emit("dragstart",t):this.isResizeable&&this.$refs.resizeHandle.contains(this.target)&&this.isResizeable?this.$emit("resizestart",t):t.preventDefault()},openConfig(){this.tmpConfig={...this.arguments},this.$refs.config.show()},setConfig(t){this.hasConfig=t},changeConfig(){this.isLoading=!0;let t={...this.tmpConfig};this.sendChangeConfig(t)},changeConfigManually(){let t={...this.arguments};this.sendChangeConfig(t)},sendChangeConfig(t){for(var e in t)this.widget.arguments[e]==t[e]&&delete t[e];this.$emit("change",t)}},watch:{config(){this.arguments={...this.widget?.arguments,...this.config},this.tmpConfig={...this.arguments},this.$refs.config&&this.$refs.config.hide(),this.isLoading=!1}},async created(){this.widget=await b.loadWidget(this.id);let t=(await import(this.widget.setup.file)).default;this.$options.components["widget"+this.widget.widget_id]=t,this.component="widget"+this.widget.widget_id,this.arguments={...this.widget.arguments,...this.config},this.tmpConfig={...this.arguments}},template:'\n\t<div v-if="loading">\n\t\t<div class="d-flex justify-content-center align-items-center h-100">\n\t\t\t<i class="fa-solid fa-spinner fa-pulse fa-3x"></i>\n\t\t</div>\n\t</div>\n\t<div v-else-if="!hidden || editMode" :id="widgetID" class="dashboard-item card overflow-hidden h-100 position-relative" :class="{\'hiddenWidget\':hidden, \'draggedItem\':dragstate, \'dashboard-item-overlay\':resizeOverlay, [arguments?.className]:arguments && arguments.className}">\n\t<div v-show="!dragstate" class="h-100 card border-0">\n\t\t<div v-if="widget" class="card-header d-flex ps-0 pe-2 align-items-center">\n\t\t\t<Transition>\n\t\t\t\t<span type="button" v-if="editMode && !isPinned" drag-action="move" class="col-auto mx-2 px-2 cursor-move" aria-label="move widget" v-tooltip="{showDelay:1000, value:\'move widget\'}"><i class="fa-solid fa-grip-vertical" aria-hidden="true"></i></span>\n\t\t\t</Transition>\n\t\t\t<span class="col mx-2 px-2">{{ widget.setup.name }}</span>\n\t\t\t<template v-if="isPinned">\n\t\t\t\t<div type="button" role="button" v-if="editMode" pinned="true" @click="unpin" title="unpin item" aria-label="unpin item" class="pin cursor-pointer col-auto me-2">\n\t\t\t\t\t<i class="fa-solid fa-thumbtack " aria-hidden="true"></i>\n\t\t\t\t</div>\n\t\t\t\t<div v-else class="col-auto me-2">\n\t\t\t\t\t<i class="fa-solid fa-thumbtack "></i>\n\t\t\t\t</div>\n\t\t\t</template>\n\t\t\t<template v-else>\n\t\t\t\t<div type="button" role="button" v-if="editMode" class="col-auto me-2 pin" @click="pinItem" aria-label="pin item" title="pin item">\n\t\t\t\t\t<i class="fa-solid fa-thumbtack" aria-hidden="true" style="color:lightgray;"></i>\n\t\t\t\t</div>\n\t\t\t</template>\n\t\t\t<a type="button" v-if="widget.setup.cis4link" :href="getWidgetC4Link(widget)" aria-label="widget link" v-tooltip="{showDelay:1000, value:\'widget link\'}" class="col-auto ms-auto ">\n \t\t<i class="fa fa-arrow-up-right-from-square me-1" aria-hidden="true"></i>\n \t</a>\n\t\t\t<a type="button" v-if="hasConfig" class="col-auto px-1" href="#" @click.prevent="openConfig" aria-label="configure widget" v-tooltip="{showDelay:1000,value:\'configure widget\'}"><i class="fa-solid fa-gear" aria-hidden="true"></i></a>\n\t\t\t<a type="button" v-if="custom && editMode" class="col-auto px-1" aria-label="delete widget" v-tooltip="{showDelay:1000,value:\'delete widget\'}" href="#" @click.prevent="$emit(\'remove\')">\n\t\t\t\t<i class="fa-solid fa-trash" aria-hidden="true"></i>\n\t\t\t</a>\n\t\t\t<Transition>\n\t\t\t\t<div v-if="!custom && editMode" class="col-auto px-1 form-switch">\n\t\t\t\t\t<input class="form-check-input ms-0" type="checkbox" role="switch" aria-label="toggle widget" id="flexSwitchCheckChecked" :checked="!hidden" @input="$emit(\'remove\', hidden)">\n\t\t\t\t</div>\n\t\t\t</Transition>\n\t\t</div>\n\t\t<div v-if="ready" class="card-body overflow-hidden p-0">\n\t\t\t<component :is="component" v-model:shared-data="sharedData" :config="arguments" :width="width" :height="height" @setConfig="setConfig" @change="changeConfigManually"></component>\n\t\t</div>\n\t\t<div v-else class="card-body overflow-hidden text-center d-flex flex-column justify-content-center"><i class="fa-solid fa-spinner fa-pulse fa-3x"></i></div>\n\t\t<bs-modal v-if="hasConfig" ref="config" @hideBsModal="handleHideBsModal" @showBsModal="handleShowBsModal">\n\t\t\t<template v-slot:title>\n\t\t\t\t{{ widget ? \'Config for \' + widget.setup.name : \'\' }}\n\t\t\t</template>\n\t\t\t<template v-slot:default>\n\t\t\t\t<component v-if="ready && !isLoading" :is="component" v-model:shared-data="sharedData" :config="tmpConfig" @change="changeConfig" :configMode="true"></component>\n\t\t\t\t<div v-else class="text-center"><i class="fa-solid fa-spinner fa-pulse fa-3x"></i></div>\n\t\t\t</template>\n\t\t\t<template v-if="!widget?.setup?.hideFooter" v-slot:footer>\n\t\t\t\t<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>\n\t\t\t\t<button type="button" class="btn btn-primary" @click="changeConfig">Save changes</button>\n\t\t\t</template>\n\t\t</bs-modal>\n\t\t<height-transition>\n\t\t\t<div v-if="editMode && isResizeable && !isPinned " class="card-footer d-flex justify-content-end p-0">\n\t\t\t\t<template v-if="maxWidth < 2">\n\t\t\t\t\t<span type="button" drag-action="resize" class="col-auto px-1 cursor-ns-resize" aria-label="resize widget" v-tooltip="{showDelay:1000, value:\'resize widget\'}">\n\t\t\t\t\t\t<i class="fa-solid fa-up-down pe-2" aria-hidden="true"></i>\n\t\t\t\t\t</span>\n\t\t\t\t</template>\n\t\t\t\t<template v-else-if="maxHeight < 2">\n\t\t\t\t\t<span type="button" drag-action="resize" class="col-auto px-1 cursor-ew-resize" aria-label="resize widget" v-tooltip="{showDelay:1000, value:\'resize widget\'}">\n\t\t\t\t\t\t<i class="fa-solid fa-left-right pe-2" aria-hidden="true"></i>\n\t\t\t\t\t</span>\n\t\t\t\t</template>\n\t\t\t\t<template v-else>\n\t\t\t\t\t<span type="button" drag-action="resize" class="col-auto px-1 cursor-nw-resize" aria-label="resize widget" v-tooltip="{showDelay:1000, value:\'resize widget\'}">\n\t\t\t\t\t\t<i class="fa-solid fa-up-right-and-down-left-from-center mirror-x" aria-hidden="true"></i>\n\t\t\t\t\t</span>\n\t\t\t\t</template>\n\t\t\t</div>\n\t\t</height-transition>\n\t\t</div>\n\t</div>'},y={data:()=>({}),props:{widget:{type:Object,required:!0}},methods:{path:t=>"/"==t[0]?FHC_JS_DATA_STORAGE_OBJECT.app_root+t:t},emits:["select"],template:'\n\t<div class="card h-100" @click="$emit(\'select\',widget.widget_id);">\n\t\t<img class="card-img-top widget-icon" :src="path(widget.setup.icon)" :alt="\'pictogram for \' + (widget.setup.name || widget.widget_kurzbz)">\n\t\t<div class="card-body">\n\t\t\t<h5 class="card-title">{{ widget.setup.name || widget.widget_kurzbz }}</h5>\n\t\t\t<p class="card-text">{{ widget.beschreibung }}</p>\n\t\t</div>\n\t</div>'},$={name:"Section",components:{DropGrid:f,DashboardItem:_,WidgetIcon:y},inject:{widgetsSetup:{type:Array,default:[]},adminMode:{type:Boolean,default:!1},editMode:{type:Boolean,default:!1}},props:["name","widgets"],emits:["widgetAdd","widgetUpdate","widgetRemove"],data:()=>({configOpened:!1,gridWidth:1,gridHeight:null,draggedItem:null,additionalRow:!1}),provide(){return{editModeIsActive:Vue.computed(()=>this.editModeIsActive),sectionName:Vue.computed(()=>this.name)}},computed:{computedWidgetsSetup(){return this.widgetsSetup?this.widgetsSetup.reduce((t,e)=>(t[e.widget_id]=e.setup,t),{}):{}},editModeIsActive(){return(this.editMode||this.adminMode)&&!this.configOpened},getSectionStyle:()=>"margin-bottom: 8px;",items(){return this.widgets.map(t=>(!t?.widgetid&&t?.id&&(t.widgetid=t.id),{...t,reorder:!1,...t.place[this.gridWidth]||{reorder:!0,x:0,y:0,w:1,h:1}}))}},methods:{sectionNameTranslation(){switch(this.name){case"general":case"custom":return this.$p.t("dashboard",this.name);default:return this.name}},showSectionInformation(){return"general"==this.name?this.$p.t("dashboard","dashboardGeneralSectionDescription"):"custom"==this.name?this.$p.t("dashboard","dashboardCustomSectionDescription"):this.$p.t("dashboard","dashboardSectionDescription",[this.name])},handleConfigOpened(){this.configOpened=!0},handleConfigClosed(){this.configOpened=!1},checkResizeLimit(t,e,i){let r=b.getWidget(t.widget);if(r){let t=r.setup.width;t.max?t.min=t.min||1:t={min:t,max:t},e<t.min&&(e=t.min),e>t.max&&(e=t.max);let n=r.setup.height;n.max?n.min=n.min||1:n={min:n,max:n},i<n.min&&(i=n.min),i>n.max&&(i=n.max)}return[e,i]},removeWidget(t,e){if(t.custom)p.popup("Are you sure you want to delete this widget?").then(()=>this.$emit("widgetRemove",this.name,t.id));else{let i={};i[t.id]={hidden:!e},this.updatePreset(i)}},saveConfig(t,e){let i={};i[e.id]={config:t},this.updatePreset(i)},updatePositions(t,e=!1){let i={};t.forEach(t=>{let r={...t.item};r.placeholder||(r.place[this.gridWidth]||(r.place[this.gridWidth]={x:0,y:0,w:1,h:1}),delete r.x,delete r.y,delete r.w,delete r.h,delete r.place[this.gridWidth].pinned,void 0!==t.x&&(r.place[this.gridWidth].x=t.x),void 0!==t.y&&(r.place[this.gridWidth].y=t.y),void 0!==t.w&&(r.place[this.gridWidth].w=t.w),void 0!==t.h&&(r.place[this.gridWidth].h=t.h),e&&(r.place[this.gridWidth].pinned=!0),i[r.id]=r)}),this.updatePreset(i)},updatePreset(t){let e={};e[this.name]=t,this.$emit("widgetUpdate",this.name,e)}},mounted(){let t=this,e=t.$refs.container;t.gridWidth=parseInt(window.getComputedStyle(e).getPropertyValue("--fhc-dashboard-grid-size")),window.addEventListener("resize",()=>{t.gridWidth=parseInt(window.getComputedStyle(e).getPropertyValue("--fhc-dashboard-grid-size"))})},template:'\n\t<div class="dashboard-section position-relative pb-3 border-bottom" ref="container" :style="getSectionStyle">\n\t\t<h4 v-if="editModeIsActive" class=" mb-2">\n\t\t\t<i v-tooltip="showSectionInformation(name)" class="fa-solid fa-circle-info section-info" ></i>\n\t\t\t{{sectionNameTranslation()}}:\n\t\t</h4>\n\t\t<button v-tooltip="$p.t(\'dashboard\',\'addLine\')" v-if="!additionalRow && editModeIsActive" @click="additionalRow=true" class="btn btn-outline-secondary rounded-circle newGridRow d-flex justify-content-center align-items-center">+</button>\n\t\t<drop-grid v-model:cols="gridWidth" v-model:additionalRow="additionalRow" :items="items" :itemsSetup="computedWidgetsSetup" :active="editModeIsActive" :resize-limit="checkResizeLimit" :margin-for-extra-row=".01" @draggedItem="draggedItem=$event" @rearrange-items="updatePositions" @gridHeight="gridHeight=$event" >\n\t\t\t<template #default="item">\n\t\t\t\t<div v-if="item.placeholder" class="empty-tile-hover" @pointerdown="$emit(\'widgetAdd\', name, { widget: 1, config: {}, place: {[gridWidth]: {x:item.x,y:item.y,w:1,h:1}}, custom: 1 })"></div>\n\t\t\t\t<dashboard-item \n\t\t\t\t\tv-else\n\t\t\t\t\t:id="item.widget"\n\t\t\t\t\t:dragstate="item.blank || (item.widgetid && item.widgetid == draggedItem?.data.widgetid)"\n\t\t\t\t\t:resizeOverlay="item.resizeOverlay"\n\t\t\t\t\t:widgetID="item.id"\n\t\t\t\t\t:width="item.w"\n\t\t\t\t\t:height="item.h"\n\t\t\t\t\t:item_data="{config:item.config, custom:item.custom, h:item.h, w:item.w,id:item.id,reorder:item.reorder,place:item.place,widget:item.widget,widgetid:item.widgetid,x:item.x,y:item.y}"\n\t\t\t\t\t:loading="item.loading"\n\t\t\t\t\t:config="item.config"\n\t\t\t\t\t:custom="item.custom"\n\t\t\t\t\t:hidden="item.hidden"\n\t\t\t\t\t:editMode="editModeIsActive"\n\t\t\t\t\t:place="item.place[gridWidth]"\n\t\t\t\t\t:setup="computedWidgetsSetup[item.widget]"\n\t\t\t\t\t@change="saveConfig($event, item)"\n\t\t\t\t\t@remove="removeWidget(item, $event)"\n\t\t\t\t\t@config-opened="handleConfigOpened"\n\t\t\t\t\t@config-closed="handleConfigClosed"\n\t\t\t\t\t@pinItem="updatePositions($event,true)"\n\t\t\t\t\t@unPinItem="updatePositions">\n\t\t\t\t</dashboard-item>\n\t\t\t\t\n\t\t\t</template>\n\t\t\t\n\t\t</drop-grid>\n\t</div>'},w={components:{BsModal:o,WidgetIcon:y},props:["widgets"],data:()=>({callbacks:{}}),methods:{getWidget(){return new Promise((t,e)=>{this.callbacks={resolve:t,reject:e},this.$refs.modal.show()})},close(){this.callbacks.reject&&this.callbacks.reject(),this.callbacks={}},pick(t){this.callbacks.resolve&&this.callbacks.resolve(t),this.callbacks={},this.$refs.modal.hide()}},template:'<div class="dashboard-widget-picker">\n\t\t<bs-modal ref="modal" class="fade" :dialog-class="{\'modal-fullscreen-sm-down\': 1, \'modal-xl\': widgets && widgets.length > 0}" @hiddenBsModal="close">\n\t\t\t<template v-slot:title>Create new widget</template>\n\t\t\t<template v-slot:default>\n\t\t\t\t<div v-if="widgets" class="row g-2">\n\t\t\t\t\t<div v-if="!widgets.length">\n\t\t\t\t\t\tNo Widgets available\n\t\t\t\t\t</div>\n\t\t\t\t\t<div v-for="widget in widgets" :key="widget.widget_id" class="widget-icon-container col-sm-6 col-md-4 col-lg-3 col-xl-2">\n\t\t\t\t\t\t<widget-icon @select="pick" :widget="widget" ></widget-icon>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div v-else class="text-center"><i class="fa-solid fa-spinner fa-pulse fa-3x"></i></div>\n\t\t\t</template>\n\t\t</bs-modal>\n\t</div>'},C={mergeDeep(...t){const e=t=>t&&"object"==typeof t;return t.reduce((t,i)=>(Object.keys(i).forEach(r=>{const n=t[r],s=i[r];Array.isArray(n)&&Array.isArray(s)?t[r]=n.concat(...s):e(n)&&e(s)?t[r]=this.mergeDeep(n,s):t[r]=s}),t),{})}},S={components:{DashboardAdminEdit:h,DashboardAdminWidgets:u,DashboardAdminPresets:{components:{DashboardSection:$,DashboardWidgetPicker:w},props:{dashboard:String,widgets:Array},data:()=>({funktionen:{},sections:[],tmpLoading:""}),computed:{apiurl:()=>FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/dashboard",pickerWidgets(){return this.widgets.filter(t=>t.allowed)}},methods:{widgetAdd(t,e){this.$refs.widgetpicker.getWidget().then(i=>{e.widget=i,delete e.custom,e.preset=1;let r={...e};r.loading=!0,this.sections.forEach(e=>{e.name==t&&e.widgets.push(r)}),axios.post(this.apiurl+"/Config/addWidgetsToPreset",{db:this.dashboard,funktion_kurzbz:t,widgets:[e]}).then(i=>{let n=Object.keys(i.data.retval.data[t].widgets).pop();e.id=n,e.custom=1,this.sections.forEach(i=>{i.name==t&&(i.widgets.splice(i.widgets.indexOf(r),1),i.widgets.push(e))})}).catch(t=>{console.error("ERROR: ",t),alert("ERROR: "+t.response.data.retval)})}).catch(()=>{})},widgetUpdate(t,e){for(var i in e=e[t]){for(var r in this.sections)if(this.sections[r].name==t){for(var n in this.sections[r].widgets)if(this.sections[r].widgets[n].id==i){for(var s in e[i]=C.mergeDeep(this.sections[r].widgets[n],e[i]),{_x:1,_y:1,_w:1,_h:1,index:1,id:1})e[i][s]&&delete e[i][s];break}break}e[i].widgetid=i,delete e[i].custom}axios.post(this.apiurl+"/Config/addWidgetsToPreset",{db:this.dashboard,funktion_kurzbz:t,widgets:e}).then(()=>{this.sections.forEach(i=>{i.name==t&&i.widgets.forEach((t,r)=>{e[t.id]&&(e[t.id].id=t.id,e[t.id].index=t.index,i.widgets[r]=e[t.id],i.widgets[r].custom=1)})})}).catch(t=>{console.error("ERROR: ",t),alert("ERROR: "+t.response.data.retval)})},widgetRemove(t,e){axios.post(this.apiurl+"/Config/removeWidgetFromPreset",{db:this.dashboard,funktion_kurzbz:t,widgetid:e}).then(()=>{this.sections.forEach(i=>{i.name==t&&(i.widgets=i.widgets.filter(t=>t.id!=e))})}).catch(t=>{console.error("ERROR: ",t),alert("ERROR: "+t.response.data.retval)})},loadSections(t){let e=Array.from(t.target.querySelectorAll("option:checked"),t=>t.value);this.sections=[],this.tmpLoading=e.join("###"),axios.get(this.apiurl+"/Config/presetBatch",{params:{db:this.dashboard,funktionen:e}}).then(t=>{if(this.tmpLoading===e.join("###"))for(var i in t.data.retval){let e=[];for(var r in t.data.retval[i])t.data.retval[i][r].id=r,t.data.retval[i][r].custom=1,e.push(t.data.retval[i][r]);this.sections.push({name:i,widgets:e})}}).catch(t=>console.error("ERROR:",t))}},created(){axios.get(this.apiurl+"/Config/funktionen").then(t=>{this.funktionen={general:"GENERAL"},t.data.retval.forEach(t=>{this.funktionen[t.funktion_kurzbz]=t.beschreibung})}).catch(t=>console.error("ERROR:",t))},watch:{dashboard(){this.loadSections({target:this.$refs.funktionenList})}},template:'<div class="dashboard-admin-presets">\n\t\t<div class="row">\n\t\t\t<div class="col-3">\n\t\t\t\t<select ref="funktionenList" style="height:30em" class="form-control" multiple @input="loadSections">\n\t\t\t\t\t<option v-for="name,id in funktionen" :key="id" :value="id">{{ name }}</option>\n\t\t\t\t</select>\n\t\t\t</div>\n\t\t\t<div class="col-9">\n\t\t\t\t<dashboard-section v-for="section in sections" :key="section.name" :name="section.name" :widgets="section.widgets" @widget-add="widgetAdd" @widget-update="widgetUpdate" @widget-remove="widgetRemove"></dashboard-section>\n\t\t\t</div>\n\t\t</div>\n\t\t<dashboard-widget-picker ref="widgetpicker" :widgets="pickerWidgets"></dashboard-widget-picker>\n\t</div>'}},provide:()=>({adminMode:!0}),data:()=>({dashboards:[],current:-1,widgets:[]}),computed:{apiurl:()=>FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/dashboard",dashboard(){return this.dashboards.find(t=>t.dashboard_id==this.current)}},methods:{dashboardAdd(){let t="";l.popup("New Dashboard name").then(e=>(t=e,axios.post(this.apiurl+"/Dashboard/create",{dashboard_kurzbz:e}))).then(e=>{let i={dashboard_id:e.data.retval,dashboard_kurzbz:t,beschreibung:""};this.dashboards.push(i),this.current=i.dashboard_id}).catch(t=>void 0!==t?console.error("ERROR:",t):0)},dashboardUpdate(t){axios.post(this.apiurl+"/Dashboard/update",t).then(()=>{let e=this.dashboards.find(e=>e.dashboard_id==t.dashboard_id);e.dashboard_kurzbz=t.dashboard_kurzbz,e.beschreibung=t.beschreibung}).catch(t=>console.error("ERROR:",t))},dashboardDelete(t){axios.post(this.apiurl+"/Dashboard/delete",{dashboard_id:t}).then(()=>{this.current=-1,this.dashboards=this.dashboards.filter(e=>e.dashboard_id!=t)}).catch(t=>console.error("ERROR:",t))},assignWidgets(t){this.widgets=t}},created(){axios.get(this.apiurl+"/Dashboard").then(t=>{this.dashboards=t.data.retval}).catch(t=>console.error("ERROR:",t))},template:'<div class="dashboard-admin">\n\t\t<div class="input-group">\n\t\t\t<label for="dashbaord-select" class="input-group-text">Dashboard:</label>\n\t\t\t<select id="dashbaord-select" class="form-select" v-model="current">\n\t\t\t\t<option v-for="dashboard in dashboards" :key="dashboard.dashboard_id" :value="dashboard.dashboard_id">{{dashboard.dashboard_kurzbz}}</option>\n\t\t\t</select>\n\t\t\t<button class="btn btn-outline-secondary" type="button" @click="dashboardAdd"><i class="fa-solid fa-plus"></i></button>\n\t\t</div>\n\t\t<div v-if="dashboard">\n\t\t\t<ul class="nav nav-tabs mt-3" role="tablist">\n\t\t\t\t<li class="nav-item" role="presentation">\n\t\t\t\t\t<button class="nav-link" id="edit-tab" data-bs-toggle="tab" data-bs-target="#edit" type="button" role="tab" aria-controls="edit" aria-selected="false">Edit</button>\n\t\t\t\t</li>\n\t\t\t\t<li class="nav-item" role="presentation">\n\t\t\t\t\t<button class="nav-link active" id="widgets-tab" data-bs-toggle="tab" data-bs-target="#widgets" type="button" role="tab" aria-controls="widgets" aria-selected="true">Widgets</button>\n\t\t\t\t</li>\n\t\t\t\t<li class="nav-item" role="presentation">\n\t\t\t\t\t<button class="nav-link" id="presets-tab" data-bs-toggle="tab" data-bs-target="#presets" type="button" role="tab" aria-controls="presets" aria-selected="false">Presets</button>\n\t\t\t\t</li>\n\t\t\t</ul>\n\t\t\t<div class="tab-content pt-3">\n\t\t\t\t<div class="tab-pane fade" id="edit" role="tabpanel" aria-labelledby="edit-tab">\n\t\t\t\t\t<dashboard-admin-edit v-bind="dashboard" :key="dashboard.dashboard_id" @change="dashboardUpdate($event)" @delete="dashboardDelete($event)"></dashboard-admin-edit>\n\t\t\t\t</div>\n\t\t\t\t<div class="tab-pane fade show active" id="widgets" role="tabpanel" aria-labelledby="widgets-tab">\n\t\t\t\t\t<dashboard-admin-widgets :key="dashboard.dashboard_id" :dashboard_id="dashboard.dashboard_id" :widgets="widgets" @change="test" @assign-widgets="assignWidgets"></dashboard-admin-widgets>\n\t\t\t\t</div>\n\t\t\t\t<div class="tab-pane fade" id="presets" role="tabpanel" aria-labelledby="presets-tab">\n\t\t\t\t\t<dashboard-admin-presets :dashboard="dashboard.dashboard_kurzbz" :widgets="widgets"></dashboard-admin-presets>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</div>'},z={search(t,e){return this.$fhcApi.post("/api/frontend/v1/searchbar/search",t,e)},searchAdvanced(t,e){return this.$fhcApi.post("/api/frontend/v1/searchbar/searchAdvanced",t,e)},searchdummy(t){return this.$fhcApi.post("public/js/apps/api/dummyapi.php/Search",t)}},E={loadCategory(t){return this.$fhcApi.get("/api/frontend/v1/phrasen/loadModule/"+t)},setLanguage(t,e){const i={categories:t,language:e};return this.$fhcApi.post("/api/frontend/v1/phrasen/setLanguage",i)},getLanguage(){return this.$fhcApi.get("/api/frontend/v1/phrasen/getLanguage",{})},getActiveDbLanguages(){return this.$fhcApi.get("/api/frontend/v1/phrasen/getAllLanguages",{})}},k={getHeader(t){return this.$fhcApi.get("/api/frontend/v1/navigation/header",{navigation_page:t})},getMenu:function(t){return this.$fhcApi.get("/api/frontend/v1/navigation/menu",{navigation_page:t})}},P={saveCustomFilter(t){return this.$fhcApi.post("/api/frontend/v1/filter/saveCustomFilter",{filterUniqueId:t.filterUniqueId,filterType:t.filterType,customFilterName:t.customFilterName})},removeCustomFilter(t){return this.$fhcApi.post("/api/frontend/v1/filter/removeCustomFilter",{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterId:t.filterId})},applyFilterFields(t){return this.$fhcApi.post("/api/frontend/v1/filter/applyFilterFields",{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterFields:t.filterFields})},addFilterField(t){return this.$fhcApi.post("/api/frontend/v1/filter/addFilterField",{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterField:t.filterField})},removeFilterField(t){return this.$fhcApi.post("/api/frontend/v1/filter/removeFilterField",{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterField:t.filterField})},getFilterById(t){return this.$fhcApi.get("/api/frontend/v1/filter/getFilter",{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterId:t.filterId})},getFilter(t){return this.$fhcApi.get("/api/frontend/v1/filter/getFilter",{filterUniqueId:t.filterUniqueId,filterType:t.filterType})}},T={abmeldung:{getDetails(t,e){const i="/api/frontend/v1/studstatus/abmeldung/"+(void 0!==t?"getDetailsForAntrag/"+t:"getDetailsForNewAntrag/"+e);return this.$fhcApi.get(i)},create(t,e,i){return this.$fhcApi.post("/api/frontend/v1/studstatus/abmeldung/createAntrag",{studiensemester:t,prestudent_id:e,grund:i},{errorHandling:"strict"})},cancel(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/abmeldung/cancelAntrag",{antrag_id:t.studierendenantrag_id},{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/abmeldung/cancelAntrag",{antrag_id:t})}},unterbrechung:{getDetails(t,e){const i="/api/frontend/v1/studstatus/unterbrechung/"+(void 0!==t?"getDetailsForAntrag/"+t:"getDetailsForNewAntrag/"+e);return this.$fhcApi.get(i)},create(t,e,i,r,n){return this.$fhcApi.post("/api/frontend/v1/studstatus/unterbrechung/createAntrag",{studiensemester:t,prestudent_id:e,grund:i,datum_wiedereinstieg:r,attachment:n},{errorHandling:"strict"})},cancel(t){return this.$fhcApi.post("/api/frontend/v1/studstatus/unterbrechung/cancelAntrag",{antrag_id:t},{errorHandling:"strict"})}},wiederholung:{getDetails(t){const e="/api/frontend/v1/studstatus/wiederholung/getDetailsForNewAntrag/"+t;return this.$fhcApi.get(e)},getLvs(t){const e="/api/frontend/v1/studstatus/wiederholung/getLvs/"+t;return this.$fhcApi.get(e)},create(t,e){return this.$fhcApi.post("/api/frontend/v1/studstatus/wiederholung/createAntrag",{prestudent_id:t,studiensemester:e},{errorHandling:"strict"})},cancel(t,e){return this.$fhcApi.post("/api/frontend/v1/studstatus/wiederholung/cancelAntrag",{prestudent_id:t,studiensemester:e},{errorHandling:"strict"})},saveLvs(t,e){return this.$fhcApi.post("/api/frontend/v1/studstatus/wiederholung/saveLvs",{forbiddenLvs:t,mandatoryLvs:e})}},leitung:{getStgs(){return this.$fhcApi.get("/api/frontend/v1/studstatus/leitung/getActiveStgs")},getAntraege(t,e,i){return this.$fhcApi.get("/api/frontend/v1/studstatus/leitung/getAntraege/"+t).then(t=>t.data)},getHistory(t){return this.$fhcApi.get("/api/frontend/v1/studstatus/leitung/getHistory/"+t)},getPrestudents(t,e){return this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/getPrestudents",{query:t},{signal:e,timeout:3e4})},approve(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/approveAntrag",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/approveAntrag",t)},reject(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/rejectAntrag",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/rejectAntrag",t)},reopen(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/reopenAntrag",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/reopenAntrag",t)},pause(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/pauseAntrag",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/pauseAntrag",t)},unpause(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/unpauseAntrag",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/unpauseAntrag",t)},object(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/objectAntrag",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/objectAntrag",t)},approveObjection(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/approveObjection",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/approveObjection",t)},denyObjection(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/denyObjection",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/denyObjection",t)}}},x={getView:function(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/Profil/getView/${t}`,{})},fotoSperre:function(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/Profil/fotoSperre/${t}`,{})},isStudent:function(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Profil/isStudent",{uid:t})},isMitarbeiter:function(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/Profil/isMitarbeiter/${t}`,{})},getZustellAdresse:function(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Profil/getZustellAdresse",{})},getZustellKontakt:function(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Profil/getZustellKontakt",{})},getGemeinden:function(t,e){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/Profil/getGemeinden/${t}/${e}`,{})},getAllNationen:function(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Profil/getAllNationen",{})}},O={
|
|
//! API calls for profil update requests
|
|
getStatus:function(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/getStatus",{})},getTopic:function(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/getTopic",{})},acceptProfilRequest:function({profil_update_id:t,uid:e,status_message:i,topic:r,requested_change:n}){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/acceptProfilRequest",{profil_update_id:t,uid:e,status_message:i,topic:r,requested_change:n})},denyProfilRequest:function({profil_update_id:t,uid:e,topic:i,status_message:r}){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/denyProfilRequest",{profil_update_id:t,uid:e,topic:i,status_message:r})},insertFile:function(t,e=null){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/ProfilUpdate/insertFile/${e}`,t)},getProfilRequestFiles:function(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/ProfilUpdate/getProfilRequestFiles/${t}`,{})},selectProfilRequest:function(t=null,e=null){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/selectProfilRequest",{...t?{uid:t}:{},...e?{id:e}:{}})},insertProfilRequest:function(t,e,i=null){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/insertProfilRequest",{topic:t,payload:e,...i?{fileID:i}:{}})},updateProfilRequest:function(t,e,i,r=null){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/updateProfilRequest",{topic:t,payload:e,ID:i,...r?{fileID:r}:{}})},deleteProfilRequest:function(t){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/deleteProfilRequest",{requestID:t})}},D={getRoomInfo(t,e,i){return this.$fhcApi.post("/api/frontend/v1/LvPlan/getRoomplan",{ort_kurzbz:t,start_date:e,end_date:i})},getStunden(){return this.$fhcApi.get("/api/frontend/v1/LvPlan/Stunden",{})},getOrtReservierungen(t,e,i){return this.$fhcApi.post(`/api/frontend/v1/LvPlan/getReservierungen/${t}`,{start_date:e,end_date:i})},getLvPlanReservierungen(t,e){return this.$fhcApi.post("/api/frontend/v1/LvPlan/getReservierungen",{start_date:t,end_date:e})},getLehreinheitStudiensemester(t){return this.$fhcApi.get(`/api/frontend/v1/LvPlan/getLehreinheitStudiensemester/${t}`,{})},studiensemesterDateInterval(t){return this.$fhcApi.get(`/api/frontend/v1/LvPlan/studiensemesterDateInterval/${t}`,{})},LvPlanEvents(t,e,i){return this.$fhcApi.get("/api/frontend/v1/LvPlan/LvPlanEvents",{start_date:t,end_date:e,lv_id:i})}},R={verband:{get(){return this.$fhcApi.get("api/frontend/v1/stv/verband")},favorites:{get(){return this.$fhcApi.get("api/frontend/v1/stv/favorites")},set(t){return this.$fhcApi.post("api/frontend/v1/stv/favorites/set",{favorites:t})}}},students:{uid(t,e){let i="api/frontend/v1/stv/students/"+encodeURIComponent(e)+"/uid/"+encodeURIComponent(t);return this.$fhcApi.getUri(i)},prestudent(t,e){let i="api/frontend/v1/stv/students/"+encodeURIComponent(e)+"/prestudent/"+encodeURIComponent(t);return this.$fhcApi.getUri(i)},person(t,e){let i="api/frontend/v1/stv/students/"+encodeURIComponent(e)+"/person/"+encodeURIComponent(t);return this.$fhcApi.getUri(i)},verband(t){return this.$fhcApi.getUri("api/frontend/v1/stv/students/"+t)}},filter:{getStg(){return this.$fhcApi.get("api/frontend/v1/stv/filter/getStg")},setStg(t){return this.$fhcApi.post("api/frontend/v1/stv/filter/setStg",{studiengang_kz:t})}},konto:{tabulatorConfig(t,e){return t.ajaxURL="api/frontend/v1/stv/konto/get",t.ajaxParams=()=>({person_id:e.modelValue.person_id||e.modelValue.map(t=>t.person_id),only_open:e.filter,studiengang_kz:e.studiengang_kz_intern?e.stg_kz:""}),t.ajaxRequestFunc=(t,e,i)=>this.$fhcApi.post(t,i,e),t.ajaxResponse=(t,e,i)=>i.data,t},checkDoubles(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/konto/checkDoubles",e,{confirmErrorHandler:t=>!0})},insert(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/konto/insert",e)},counter(t){return this.$fhcApi.post("api/frontend/v1/stv/konto/counter",t)},edit(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/konto/update",e)},delete(t){return this.$fhcApi.post("api/frontend/v1/stv/konto/delete",{buchungsnr:t})},getBuchungstypen(){return this.$fhcApi.get("api/frontend/v1/stv/konto/getBuchungstypen")}},group:{getGruppen(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/Gruppen/getGruppen/"+i.id)},deleteGroup(t){return this.$fhcApi.post("api/frontend/v1/stv/Gruppen/deleteGruppe/",t)}},kontakt:{getAdressen(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getAdressen/"+i.id)},addNewAddress(t,e,i){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/addNewAddress/"+e,i)},loadAddress(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/loadAddress/",{address_id:t})},updateAddress(t,e,i){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/updateAddress/"+e,i)},deleteAddress(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/deleteAddress/",{address_id:t})},getPlaces(t){return this.$fhcApi.get("api/frontend/v1/stv/address/getPlaces/"+t)},getFirmen(t){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getFirmen/"+t)},getNations(){return this.$fhcApi.get("api/frontend/v1/stv/address/getNations/")},getAdressentypen(){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getAdressentypen/")},getBankverbindung(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getBankverbindung/"+i.id)},addNewBankverbindung(t,e,i){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/addNewBankverbindung/"+e,i)},loadBankverbindung(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/loadBankverbindung/",{bankverbindung_id:t})},updateBankverbindung(t,e,i){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/updateBankverbindung/"+e,i)},deleteBankverbindung(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/deleteBankverbindung/",{bankverbindung_id:t})},getKontakte(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getKontakte/"+i.id)},addNewContact(t,e,i){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/addNewContact/"+e,i)},loadContact(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/loadContact/",{kontakt_id:t})},updateContact(t,e,i){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/updateContact/"+e,i)},deleteContact(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/deleteContact/",{kontakt_id:t})},getStandorteByFirma(t){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getStandorteByFirma/"+t)},getKontakttypen(){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getKontakttypen/")}},prestudent:{get(t,e){return this.$fhcApi.post("api/frontend/v1/stv/prestudent/get/"+encodeURIComponent(t)+"/"+encodeURIComponent(e))},updatePrestudent(t,e,i){return this.$fhcApi.post(t,"api/frontend/v1/stv/prestudent/updatePrestudent/"+e,i)},getBezeichnungZGV(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBezeichnungZGV/")},getBezeichnungMZgv(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBezeichnungMZgv/")},getBezeichnungDZgv(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBezeichnungDZgv/")},getStgs(){return this.$fhcApi.get("api/frontend/v1/stv/lists/getStgs/")},getAusbildung(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getAusbildung/")},getAufmerksamdurch(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getAufmerksamdurch/")},getBerufstaetigkeit(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBerufstaetigkeit/")},getTypenStg(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getTypenStg/")},getBisstandort(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBisstandort/")},getHistoryPrestudent(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/status/getHistoryPrestudent/"+i.id)},getMaxSem(t){return this.$fhcApi.post("api/frontend/v1/stv/status/getMaxSemester/",{studiengang_kzs:t})},advanceStatus({prestudent_id:t,status_kurzbz:e,studiensemester_kurzbz:i,ausbildungssemester:r}){return this.$fhcApi.post("api/frontend/v1/stv/status/advanceStatus/"+t+"/"+e+"/"+i+"/"+r)},confirmStatus({prestudent_id:t,status_kurzbz:e,studiensemester_kurzbz:i,ausbildungssemester:r}){return this.$fhcApi.post("api/frontend/v1/stv/status/confirmStatus/"+t+"/"+e+"/"+i+"/"+r)},isLastStatus(t){return this.$fhcApi.get("api/frontend/v1/stv/status/isLastStatus/"+t)},deleteStatus({prestudent_id:t,status_kurzbz:e,studiensemester_kurzbz:i,ausbildungssemester:r}){return this.$fhcApi.post("api/frontend/v1/stv/status/deleteStatus/"+t+"/"+e+"/"+i+"/"+r)},getLastBismeldestichtag(){return this.$fhcApi.get("api/frontend/v1/stv/status/getLastBismeldestichtag/")},getHistoryPrestudents(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getHistoryPrestudents/"+i.id)}},status:{insertStatus(t,e,i){return this.$fhcApi.post(t,"api/frontend/v1/stv/status/insertStatus/"+e,i)},loadStatus({prestudent_id:t,status_kurzbz:e,studiensemester_kurzbz:i,ausbildungssemester:r}){return this.$fhcApi.post("api/frontend/v1/stv/status/loadStatus/"+t+"/"+e+"/"+i+"/"+r)},updateStatus(t,{prestudent_id:e,status_kurzbz:i,studiensemester_kurzbz:r,ausbildungssemester:n},s){return this.$fhcApi.post(t,"api/frontend/v1/stv/status/updateStatus/"+e+"/"+i+"/"+r+"/"+n,s)},getStudienplaene(t){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getStudienplaene/"+t)},getStudiengang(t){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getStudiengang/"+t)},getStatusgruende(){return this.$fhcApi.get("api/frontend/v1/stv/status/getStatusgruende/")},getStati(){return this.$fhcApi.get("api/frontend/v1/stv/lists/getStati/")},addStudent(t,e){return this.$fhcApi.post("api/frontend/v1/stv/status/addStudent/"+t,e,{errorHeader:t})},changeStatus(t,e){return this.$fhcApi.post("api/frontend/v1/stv/status/changeStatus/"+t,e,{errorHeader:t})},getStatusarray(){return this.$fhcApi.get("api/frontend/v1/stv/status/getStatusarray/")}},details:{get(t,e){let i="api/frontend/v1/stv/student/get/"+encodeURIComponent(t)+"/"+encodeURIComponent(e);return this.$fhcApi.post(i)},save(t,e,i,r){let n="api/frontend/v1/stv/student/save/"+encodeURIComponent(e)+"/"+encodeURIComponent(i);return this.$fhcApi.post(t,n,r)}},exam:{getPruefungen(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getPruefungen/"+i.id)},loadPruefung(t){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/loadPruefung/"+t)},getTypenPruefungen(){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getTypenPruefungen")},getAllLehreinheiten(t){return this.$fhcApi.post("api/frontend/v1/stv/pruefung/getAllLehreinheiten/",t)},getLvsByStudent(t){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getLvsByStudent/"+t)},getLvsandLesByStudent(t,e){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getLvsandLesByStudent/"+t+"/"+e)},getLvsAndMas(t){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getLvsAndMas/"+t)},getMitarbeiterLv(t){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getMitarbeiterLv/"+t)},getNoten(){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getNoten")},checkZeugnisnoteLv(t){return this.$fhcApi.post("api/frontend/v1/stv/pruefung/checkZeugnisnoteLv/",t)},addPruefung(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/pruefung/insertPruefung/",e)},updatePruefung(t,e,i){return this.$fhcApi.post(t,"api/frontend/v1/stv/pruefung/updatePruefung/"+e,i)},deletePruefung(t){return this.$fhcApi.post("api/frontend/v1/stv/pruefung/deletePruefung/"+t)}},abschlusspruefung:{getAbschlusspruefung(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getAbschlusspruefung/"+i.id)},addNewAbschlusspruefung(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/abschlusspruefung/insertAbschlusspruefung/",e)},loadAbschlusspruefung(t){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/loadAbschlusspruefung/",{id:t})},updateAbschlusspruefung(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/abschlusspruefung/updateAbschlusspruefung/",e)},deleteAbschlusspruefung(t){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/deleteAbschlusspruefung/",{id:t})},getTypenAbschlusspruefung(){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getTypenAbschlusspruefung/")},getTypenAntritte(){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getTypenAntritte/")},getBeurteilungen(){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getBeurteilungen/")},getAkadGrade(t){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/getAkadGrade/",{studiengang_kz:t})},getTypStudiengang(t){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/getTypStudiengang/",{studiengang_kz:t})},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getMitarbeiter/"+t)},getPruefer(t){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getPruefer/"+t)},getNoten(){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getNoten/")},checkForExistingExams(t){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/checkForExistingExams/",{uids:t})}},grades:{list(){return this.$fhcApi.get("api/frontend/v1/stv/grades/list")},getCertificate(t,e){let i="api/frontend/v1/stv/grades/getCertificate/"+encodeURIComponent(t);return e&&(i=i+"/"+encodeURIComponent(e)),this.$fhcApi.get(i)},getTeacherProposal(t,e){let i="api/frontend/v1/stv/grades/getTeacherProposal/"+encodeURIComponent(t);return e&&(i=i+"/"+encodeURIComponent(e)),this.$fhcApi.get(i)},getRepeaterGrades(t,e){let i="api/frontend/v1/stv/grades/getRepeaterGrades/"+encodeURIComponent(t);return e&&(i=i+"/"+encodeURIComponent(e)),this.$fhcApi.get(i)},updateCertificate({lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:i,note:r,lehrveranstaltung_bezeichnung:n}){return this.$fhcApi.post("api/frontend/v1/stv/grades/updateCertificate",{lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:i,note:r},{errorHeader:n})},deleteCertificate({lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:i,lehrveranstaltung_bezeichnung:r}){return this.$fhcApi.post("api/frontend/v1/stv/grades/deleteCertificate",{lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:i},{errorHeader:r})},copyTeacherProposalToCertificate({lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:i,lehrveranstaltung_bezeichnung:r}){return this.$fhcApi.post("api/frontend/v1/stv/grades/copyTeacherProposalToCertificate",{lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:i},{errorHeader:r})},copyRepeaterGradeToCertificate({studierendenantrag_lehrveranstaltung_id:t,lv_bezeichnung:e}){return this.$fhcApi.post("api/frontend/v1/stv/grades/copyRepeaterGradeToCertificate",{studierendenantrag_lehrveranstaltung_id:t},{errorHeader:e})},getGradeFromPoints(t,e,i,r){const n=r?{errorHandling:!1}:{};return this.$fhcApi.post("api/frontend/v1/stv/grades/getGradeFromPoints",{points:t,lehrveranstaltung_id:e,studiensemester_kurzbz:i},n)}},mobility:{getMobilitaeten(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getMobilitaeten/"+i.id)},getProgramsMobility(){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getProgramsMobility/")},addNewMobility(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/mobility/insertMobility/",e)},loadMobility(t){return this.$fhcApi.get("api/frontend/v1/stv/mobility/loadMobility/"+t)},updateMobility(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/mobility/updateMobility/",e)},deleteMobility(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/deleteMobility/"+t)},getLVList(t){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getLVList/"+t)},getAllLehreinheiten(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/getAllLehreinheiten/",t)},getLvsandLesByStudent(t){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getLvsandLesByStudent/"+t)},getPurposes(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getPurposes/"+i.id)},getSupports(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getSupports/"+i.id)},getListPurposes(){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getListPurposes/")},getListSupports(){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getListSupports/")},deleteMobilityPurpose(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/deleteMobilityPurpose/"+t.bisio_id,t)},addMobilityPurpose(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/addMobilityPurpose/"+t.bisio_id,t)},deleteMobilitySupport(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/deleteMobilitySupport/"+t.bisio_id,t)},addMobilitySupport(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/addMobilitySupport/"+t.bisio_id,t)}},archiv:{tabulatorConfig(t,e){return t.ajaxURL="api/frontend/v1/stv/archiv/get",t.ajaxParams=()=>({person_id:e.modelValue.person_id||e.modelValue.map(t=>t.person_id)}),t.ajaxRequestFunc=(t,e,i)=>this.$fhcApi.post(t,i,e),t.ajaxResponse=(t,e,i)=>i.data,t},getArchivVorlagen(){return this.$fhcApi.post("api/frontend/v1/stv/archiv/getArchivVorlagen")},archive(t){return this.$fhcApi.post("api/frontend/v1/documents/archive",t)},archiveSigned(t){return this.$fhcApi.post("api/frontend/v1/documents/archiveSigned",t)},update(t){return this.$fhcApi.post("api/frontend/v1/stv/archiv/update",t)},delete({akte_id:t,studiengang_kz:e}){return this.$fhcApi.post("api/frontend/v1/stv/archiv/delete",{akte_id:t,studiengang_kz:e})}},documents:{getDocumentsUnaccepted(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/dokumente/getDocumentsUnaccepted/"+i.id+"/"+i.studiengang_kz)},getDocumentsAccepted(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/dokumente/getDocumentsAccepted/"+i.id+"/"+i.studiengang_kz)},deleteZuordnung(t){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/deleteZuordnung/"+t.prestudent_id+"/"+t.dokument_kurzbz)},createZuordnung(t){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/createZuordnung/"+t.prestudent_id+"/"+t.dokument_kurzbz)},loadAkte(t){return this.$fhcApi.get("api/frontend/v1/stv/dokumente/loadAkte/"+t)},getDoktypen(){return this.$fhcApi.get("api/frontend/v1/stv/dokumente/getDoktypen/")},updateFile(t,e){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/updateAkte/"+t,e)},deleteFile(t){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/deleteAkte/"+t)},uploadFile(t,e){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/uploadDokument/"+t,e)}},exemptions:{getAnrechnungen(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getAnrechnungen/"+i.id)},getLehrveranstaltungen(t){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getLehrveranstaltungen/"+t)},getBegruendungen(){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getBegruendungen/")},getLvsKompatibel(t){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getLvsKompatibel/"+t)},getLektoren(t){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getLektoren/"+t)},addNewAnrechnung(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/anrechnungen/insertAnrechnung/",e)},loadAnrechnung(t){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/loadAnrechnung/"+t)},editAnrechnung(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/anrechnungen/updateAnrechnung/",e)},deleteAnrechnung(t){return this.$fhcApi.post("api/frontend/v1/stv/anrechnungen/deleteAnrechnung/"+t)}},jointstudies:{getStudies(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getStudien/"+i.id)},getTypenMobility(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getTypenMobility/")},getStudiensemester(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getStudiensemester/")},getStudyprograms(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getStudienprogramme/")},getListPartner(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getPartnerfirmen/")},getStatiPrestudent(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getStatiPrestudent/")},loadStudy(t){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/loadStudie/"+t)},insertStudy(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/GemeinsameStudien/insertStudie/",e)},updateStudy(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/GemeinsameStudien/updateStudie/",e)},deleteStudy(t){return this.$fhcApi.post("api/frontend/v1/stv/GemeinsameStudien/deleteStudie/"+t)}},courselist:{getCourselist(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/LvTermine/getStundenplan/"+i.student_uid+"/"+i.start_date+"/"+i.end_date+"/"+i.group_consecutiveHours+"/"+i.dbStundenplanTable)},getStudiensemester(){return this.$fhcApi.get("api/frontend/v1/stv/LvTermine/getStudiensemester/")}},configStudent(){return this.$fhcApi.get("api/frontend/v1/stv/config/student")},configStudents(){return this.$fhcApi.get("api/frontend/v1/stv/config/students")}},F={getNotizen(t,e,i){return this.$fhcApi.get("api/frontend/v1/notiz/notizPerson/getNotizen/"+i.id+"/"+i.type)},getUid(){return this.$fhcApi.get("api/frontend/v1/notiz/notizPerson/getUid/")},addNewNotiz(t,e,i){return this.$fhcApi.post(t,"api/frontend/v1/notiz/notizPerson/addNewNotiz/"+e,i)},loadNotiz(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizPerson/loadNotiz/",{notiz_id:t})},loadDokumente(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizPerson/loadDokumente/",{notiz_id:t})},deleteNotiz(t,e,i){return this.$fhcApi.post("api/frontend/v1/notiz/notizPerson/deleteNotiz/",{notiz_id:t,type_id:e,id:i})},updateNotiz(t,e,i){return this.$fhcApi.post(t,"api/frontend/v1/notiz/notizPerson/updateNotiz/"+e,i)},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/notiz/notizPerson/getMitarbeiter/"+t)},isBerechtigt(t,e){return this.$fhcApi.get("api/frontend/v1/notiz/notizPerson/isBerechtigt/")}},M={getNotizen(t,e,i){return this.$fhcApi.get("api/frontend/v1/notiz/notizPrestudent/getNotizen/"+i.id+"/"+i.type)},getUid(){return this.$fhcApi.get("api/frontend/v1/notiz/notizPrestudent/getUid/")},addNewNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizPrestudent/addNewNotiz/"+t,e)},loadNotiz(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizPrestudent/loadNotiz/",{notiz_id:t})},loadDokumente(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizPrestudent/loadDokumente/",{notiz_id:t})},deleteNotiz(t,e,i){return this.$fhcApi.post("api/frontend/v1/notiz/notizPrestudent/deleteNotiz/",{notiz_id:t,type_id:e,id:i})},updateNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizPrestudent/updateNotiz/"+t,e)},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/notiz/notizPrestudent/getMitarbeiter/"+t)}},B={getNotizen(t,e,i){return this.$fhcApi.get("api/frontend/v1/notiz/notizMitarbeiter/getNotizen/"+i.id+"/"+i.type)},getUid(){return this.$fhcApi.get("api/frontend/v1/notiz/notizMitarbeiter/getUid/")},addNewNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizMitarbeiter/addNewNotiz/"+t,e)},loadNotiz(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizMitarbeiter/loadNotiz/",{notiz_id:t})},loadDokumente(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizMitarbeiter/loadDokumente/",{notiz_id:t})},deleteNotiz(t,e,i){return this.$fhcApi.post("api/frontend/v1/notiz/notizMitarbeiter/deleteNotiz/",{notiz_id:t,type_id:e,id:i})},updateNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizMitarbeiter/updateNotiz/"+t,e)},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/notiz/notizMitarbeiter/getMitarbeiter/"+t)}},N={getNotizen(t,e,i){return this.$fhcApi.get("api/frontend/v1/notiz/NotizProjekt/getNotizen/"+i.id+"/"+i.type)},getUid(){return this.$fhcApi.get("api/frontend/v1/notiz/NotizProjekt/getUid/")},addNewNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/NotizProjekt/addNewNotiz/"+t,e)},loadNotiz(t){return this.$fhcApi.post("api/frontend/v1/notiz/NotizProjekt/loadNotiz/",{notiz_id:t})},loadDokumente(t){return this.$fhcApi.post("api/frontend/v1/notiz/NotizProjekt/loadDokumente/",{notiz_id:t})},deleteNotiz(t,e,i){return this.$fhcApi.post("api/frontend/v1/notiz/NotizProjekt/deleteNotiz/",{notiz_id:t,type_id:e,id:i})},updateNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/NotizProjekt/updateNotiz/"+t,e)},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/notiz/NotizProjekt/getMitarbeiter/"+t)}},H={person:F,prestudent:M,mitarbeiter:B,anrechnung:{getNotizen(t,e,i){return this.$fhcApi.get("api/frontend/v1/notiz/notizAnrechnung/getNotizen/"+i.id+"/"+i.type)},getUid(){return this.$fhcApi.get("api/frontend/v1/notiz/notizAnrechnung/getUid/")},addNewNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizAnrechnung/addNewNotiz/"+t,e)},loadNotiz(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizAnrechnung/loadNotiz/",{notiz_id:t})},loadDokumente(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizAnrechnung/loadDokumente/",{notiz_id:t})},deleteNotiz(t,e,i){return this.$fhcApi.post("api/frontend/v1/notiz/notizAnrechnung/deleteNotiz/",{notiz_id:t,type_id:e,id:i})},updateNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizAnrechnung/updateNotiz/"+t,e)},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/notiz/notizAnrechnung/getMitarbeiter/"+t)}},bestellung:{getNotizen(t,e,i){return this.$fhcApi.get("api/frontend/v1/notiz/notizBestellung/getNotizen/"+i.id+"/"+i.type)},getUid(){return this.$fhcApi.get("api/frontend/v1/notiz/notizBestellung/getUid/")},addNewNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizBestellung/addNewNotiz/"+t,e)},loadNotiz(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizBestellung/loadNotiz/",{notiz_id:t})},loadDokumente(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizBestellung/loadDokumente/",{notiz_id:t})},deleteNotiz(t,e,i){return this.$fhcApi.post("api/frontend/v1/notiz/notizBestellung/deleteNotiz/",{notiz_id:t,type_id:e,id:i})},updateNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizBestellung/updateNotiz/"+t,e)},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/notiz/notizBestellung/getMitarbeiter/"+t)}},lehreinheit:{getNotizen(t,e,i){return this.$fhcApi.get("api/frontend/v1/notiz/notizLehreinheit/getNotizen/"+i.id+"/"+i.type)},getUid(){return this.$fhcApi.get("api/frontend/v1/notiz/notizLehreinheit/getUid/")},addNewNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizLehreinheit/addNewNotiz/"+t,e)},loadNotiz(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizLehreinheit/loadNotiz/",{notiz_id:t})},loadDokumente(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizLehreinheit/loadDokumente/",{notiz_id:t})},deleteNotiz(t,e,i){return this.$fhcApi.post("api/frontend/v1/notiz/notizLehreinheit/deleteNotiz/",{notiz_id:t,type_id:e,id:i})},updateNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizLehreinheit/updateNotiz/"+t,e)},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/notiz/notizLehreinheit/getMitarbeiter/"+t)}},projekt:N,projektphase:{getNotizen(t,e,i){return this.$fhcApi.get("api/frontend/v1/notiz/notizProjektphase/getNotizen/"+i.id+"/"+i.type)},getUid(){return this.$fhcApi.get("api/frontend/v1/notiz/notizProjektphase/getUid/")},addNewNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizProjektphase/addNewNotiz/"+t,e)},loadNotiz(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizProjektphase/loadNotiz/",{notiz_id:t})},loadDokumente(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizProjektphase/loadDokumente/",{notiz_id:t})},deleteNotiz(t,e,i){return this.$fhcApi.post("api/frontend/v1/notiz/notizProjektphase/deleteNotiz/",{notiz_id:t,type_id:e,id:i})},updateNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizProjektphase/updateNotiz/"+t,e)},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/notiz/notizProjektphase/getMitarbeiter/"+t)}},projekttask:{getNotizen(t,e,i){return this.$fhcApi.get("api/frontend/v1/notiz/notizProjekttask/getNotizen/"+i.id+"/"+i.type)},getUid(){return this.$fhcApi.get("api/frontend/v1/notiz/notizProjekttask/getUid/")},addNewNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizProjekttask/addNewNotiz/"+t,e)},loadNotiz(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizProjekttask/loadNotiz/",{notiz_id:t})},loadDokumente(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizProjekttask/loadDokumente/",{notiz_id:t})},deleteNotiz(t,e,i){return this.$fhcApi.post("api/frontend/v1/notiz/notizProjekttask/deleteNotiz/",{notiz_id:t,type_id:e,id:i})},updateNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizProjekttask/updateNotiz/"+t,e)},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/notiz/notizProjekttask/getMitarbeiter/"+t)}}},L={person:{getAllBetriebsmittel(t,e,i){return this.$fhcApi.get("api/frontend/v1/betriebsmittel/betriebsmittelP/getAllBetriebsmittel/"+i.type+"/"+i.id)},addNewBetriebsmittel(t,e,i){return this.$fhcApi.post(t,"api/frontend/v1/betriebsmittel/betriebsmittelP/addNewBetriebsmittel/"+e,i)},loadBetriebsmittel(t){return this.$fhcApi.post("api/frontend/v1/betriebsmittel/betriebsmittelP/loadBetriebsmittel/"+t)},updateBetriebsmittel(t,e,i){return this.$fhcApi.post(t,"api/frontend/v1/betriebsmittel/betriebsmittelP/updateBetriebsmittel/"+e,i)},deleteBetriebsmittel(t){return this.$fhcApi.post("api/frontend/v1/betriebsmittel/betriebsmittelP/deleteBetriebsmittel/"+t)},getTypenBetriebsmittel(){return this.$fhcApi.get("api/frontend/v1/betriebsmittel/betriebsmittelP/getTypenBetriebsmittel/")},loadInventarliste(t){return this.$fhcApi.get("api/frontend/v1/betriebsmittel/betriebsmittelP/loadInventarliste/"+t)}}},I={updatePersonUnrulyStatus(t,e){try{const i={person_id:t,unruly:e},r="/api/frontend/v1/checkperson/CheckPerson/updatePersonUnrulyStatus";return this.$fhcApi.post(r,i,null)}catch(t){throw t}},filterPerson(t,e=""){try{const i=e+"/api/frontend/v1/checkperson/CheckPerson/filterPerson";return axios.post(i,t)}catch(t){throw t}}},J={getContentID(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Ort/ContentID",{ort_kurzbz:t})},getRooms(t,e,i,r,n=0){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Ort/getRooms",{datum:t,von:e,bis:i,typ:r,personenanzahl:n})},getRoomTypes(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Ort/getTypes")}},U={content(t,e=null,i=null,r=null){return this.$fhcApi.get("/api/frontend/v1/Cms/content",{content_id:t,...e?{version:e}:{},...i?{sprache:i}:{},...r?{sichtbar:r}:{}})},getNews(t=1,e=10,i){return this.$fhcApi.get("/api/frontend/v1/Cms/getNews",{page:t,page_size:e,sprache:i})},news(t){return this.$fhcApi.get("/api/frontend/v1/Cms/news",{limit:t})},getNewsRowCount:function(){return this.$fhcApi.get("/api/frontend/v1/Cms/getNewsRowCount",{})},getNewsExtra:function(){return this.$fhcApi.get("/api/frontend/v1/Cms/getStudiengangInfoForNews",{})}},j={getStudentenMail(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Lehre/lvStudentenMail",{lehreinheit_id:t})},getLvInfo(t,e){return this.$fhcApi.get(`/api/frontend/v1/Lehre/LV/${t}/${e}`,{})},getStudentPruefungen(t){return this.$fhcApi.get(`/api/frontend/v1/Lehre/Pruefungen/${t}`,{})}},G={getLvMenu(t,e){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/LvMenu/getLvMenu/${t}/${e}`,{})}},W={person:{getMessages(t,e,i){return this.$fhcApi.get("api/frontend/v1/messages/messages/getMessages/"+i.id+"/"+i.type+"/"+i.size+"/"+i.page)},getVorlagen(){return this.$fhcApi.get("api/frontend/v1/messages/messages/getVorlagen/")},getMsgVarsLoggedInUser(){return this.$fhcApi.get("api/frontend/v1/messages/messages/getMsgVarsLoggedInUser/")},getMessageVarsPerson(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getMessageVarsPerson/"+t.id+"/"+t.type_id)},getMsgVarsPrestudent(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getMsgVarsPrestudent/"+t.id+"/"+t.type_id)},getPersonId(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getPersonId/"+t.id+"/"+t.type_id)},getUid(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getUid/"+t.id+"/"+t.type_id)},getDataVorlage(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getDataVorlage/"+t)},getNameOfDefaultRecipient(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getNameOfDefaultRecipient/"+t.id+"/"+t.type_id)},getPreviewText(t,e){return this.$fhcApi.post("api/frontend/v1/messages/messages/getPreviewText/"+t.id+"/"+t.type_id,e)},getReplyData(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getReplyData/"+t)},sendMessageFromModalContext(t,e,i){return this.$fhcApi.post(t,"api/frontend/v1/messages/messages/sendMessage/"+e,i)},sendMessage(t,e){return this.$fhcApi.post("api/frontend/v1/messages/messages/sendMessage/"+t,e)},deleteMessage(t){return this.$fhcApi.post("api/frontend/v1/messages/messages/deleteMessage/"+t)}}},V={getVorlagen(){return this.$fhcApi.get("api/frontend/v1/vorlagen/vorlagen/getVorlagen/")},getVorlagenByLoggedInUser(){return this.$fhcApi.get("api/frontend/v1/vorlagen/vorlagen/getVorlagenByLoggedInUser/")}},q={getStudiensemester:function(){return this.$fhcApi.get("/components/Cis/Mylv/Studiensemester",{})},getAllStudienSemester:function(t=void 0,e=void 0,i=void 0,r=void 0){return this.$fhcApi.get("/api/frontend/v1/Studium/getStudienAllSemester",{studiensemester:t,studiengang:e,semester:i,studienplan:r})},getStudiengaengeForStudienSemester:function(t){return this.$fhcApi.get(`/api/frontend/v1/Studium/getStudiengaengeForStudienSemester/${t}`,{})},getStudienplaeneBySemester:function(t,e){return this.$fhcApi.get("/api/frontend/v1/Studium/getStudienplaeneBySemester",{studiengang:t,studiensemester:e})},getLvPlanForStudiensemester:function(t,e){return this.$fhcApi.get(`/api/frontend/v1/LvPlan/getLvPlanForStudiensemester/${t}/${e}`,{})},getLvEvaluierungInfo:function(t,e){return this.$fhcApi.get(`/api/frontend/v1/Studium/getLvEvaluierungInfo/${t}/${e}`,{})}},Z={search:z,phrasen:E,navigation:k,dashboard:{async getViewData(){return this.$fhcApi.get("/api/frontend/v1/Cis4FhcApi/getViewData",null,null)}},filter:P,studstatus:T,profil:x,profilUpdate:O,lvPlan:D,bookmark:{getBookmarks:function(){return this.$fhcApi.get("/api/frontend/v1/Bookmark/getBookmarks",{})},delete:function(t){return this.$fhcApi.get(`/api/frontend/v1/Bookmark/delete/${t}`,{})},update:function({bookmark_id:t,url:e,title:i,tag:r=null}){return this.$fhcApi.post(`/api/frontend/v1/Bookmark/update/${t}`,{url:e,title:i})},insert:function({url:t,title:e,tag:i}){return this.$fhcApi.post("/api/frontend/v1/Bookmark/insert",{url:t,title:e,tag:i})}},stv:R,notiz:H,betriebsmittel:L,checkperson:I,ampeln:{open:function(){return this.$fhcApi.get("/api/frontend/v1/Ampeln/open",{})},all:function(){return this.$fhcApi.get("/api/frontend/v1/Ampeln/all",{})},confirm:function(t){return this.$fhcApi.get(`/api/frontend/v1/Ampeln/confirm/${t}`,{})}},ort:J,cms:U,lehre:j,addons:G,messages:W,vorlagen:V,addons:G,studiengang:{studiengangInformation:function(){return this.$fhcApi.get("/api/frontend/v1/Studgang/getStudiengangInfo",{})},getStudiengangByKz:function(t){return this.$fhcApi.get("/api/frontend/v1/organisation/StudiengangEP/getStudiengangByKz",{studiengang_kz:t})}},menu:{getMenu:function(){return this.$fhcApi.get("/api/frontend/v1/CisMenu/getMenu",{})}},authinfo:{getAuthUID(){return this.$fhcApi.get("/api/frontend/v1/AuthInfo/getAuthUID",{})},getAuthInfo(){return this.$fhcApi.get("/api/frontend/v1/AuthInfo/getAuthInfo",{})}},vertraege:{person:{getAllVertraege(t,e,i){return this.$fhcApi.get("api/frontend/v1/vertraege/vertraege/getAllVertraege/"+i.person_id)},getAllContractsNotAssigned(t,e,i){return this.$fhcApi.get("api/frontend/v1/vertraege/vertraege/getAllContractsNotAssigned/"+i.person_id)},getAllContractsAssigned(t,e,i){return this.$fhcApi.get("api/frontend/v1/vertraege/vertraege/getAllContractsAssigned/"+i.person_id+"/"+i.vertrag_id)},getAllContractsNotAssigned2(t){return this.$fhcApi.get("api/frontend/v1/vertraege/vertraege/getAllContractsNotAssigned/"+t)},getStatiOfContract(t,e,i){return this.$fhcApi.get("api/frontend/v1/vertraege/vertraege/getStatiOfContract/"+i.vertrag_id)},getAllContractTypes(){return this.$fhcApi.get("api/frontend/v1/vertraege/vertraege/getAllContractTypes/")},getAllContractStati(){return this.$fhcApi.get("api/frontend/v1/vertraege/vertraege/getAllContractStati/")},addNewContract(t,e){return this.$fhcApi.post(t,"api/frontend/v1/vertraege/vertraege/addNewContract/",e)},loadContract(t){return this.$fhcApi.post("api/frontend/v1/vertraege/vertraege/loadContract/"+t)},updateContract(t,e){return this.$fhcApi.post(t,"api/frontend/v1/vertraege/vertraege/updateContract/",e)},deleteContract(t){return this.$fhcApi.post("api/frontend/v1/vertraege/vertraege/deleteContract/"+t)},loadContractStatus(t){return this.$fhcApi.post("api/frontend/v1/vertraege/vertraege/loadContractStatus/"+t.vertrag_id,t)},insertContractStatus(t,e){return this.$fhcApi.post(t,"api/frontend/v1/vertraege/vertraege/insertContractStatus/"+e.vertrag_id,e)},updateContractStatus(t,e){return this.$fhcApi.post(t,"api/frontend/v1/vertraege/vertraege/updateContractStatus/"+e.vertrag_id,e)},deleteContractStatus(t){return this.$fhcApi.post("api/frontend/v1/vertraege/vertraege/deleteContractStatus/"+t.vertrag_id,t)},deleteLehrauftrag(t){return this.$fhcApi.post("api/frontend/v1/vertraege/vertraege/deleteLehrauftrag/"+t.vertrag_id,t)},deleteBetreuung(t){return this.$fhcApi.post("api/frontend/v1/vertraege/vertraege/deleteBetreuung/"+t.vertrag_id,t)},getMitarbeiter(t){return this.$fhcApi.post("api/frontend/v1/vertraege/vertraege/getMitarbeiter/")},getHeader(t){return this.$fhcApi.post("api/frontend/v1/vertraege/vertraege/getHeader/"+t)},getPersonAbteilung(t){return this.$fhcApi.post("api/frontend/v1/vertraege/vertraege/getPersonAbteilung/"+t)},getLeitungOrg(t){return this.$fhcApi.post("api/frontend/v1/vertraege/vertraege/getLeitungOrg/"+t)},getMitarbeiterUid(t){return this.$fhcApi.get("api/frontend/v1/vertraege/vertraege/getMitarbeiterUid/"+t)}},configPrintDocument(){return this.$fhcApi.get("api/frontend/v1/vertraege/config/printDocument")}},studium:q,language:{getAll(){return this.$fhcApi.get("/api/frontend/v1/language/get")}}},K={install:(t,e)=>{if(t.config.globalProperties.$fhcApi)return void(e?.factory&&(console.warn("$fhcApi is DEPRECATED!"),t.config.globalProperties.$fhcApi.factory.addEndpoints(e.factory)));function i(t,e,i,r){if("string"==typeof t&&void 0===r)[e,i,r]=[t,e,i],t=void 0;else if(t){if("object"!=typeof t)throw new TypeError("Parameter 1 of _get_config must be an object or a string");void 0===e&&void 0===i&&void 0===r&&(r=t,t=void 0)}if(t){if(!t.clearValidation||!t.setFeedback)throw new TypeError("'form' is not a Form Component");t={clearValidation:t.clearValidation,setFeedback:t.setFeedback},r?r.form=t:r={form:t}}return[e,i,r]}function r(t){const e=t.data;return delete t.data,e.meta?e.meta.response=t:e.meta={response:t},e}FHC_JS_DATA_STORAGE_OBJECT.app_root,FHC_JS_DATA_STORAGE_OBJECT.ci_router;const n=axios.create({timeout:5e5,baseURL:FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/"});n.interceptors.request.use(t=>{if("post"!=t.method||!t.data)return t;if(t.data instanceof FormData)return t;if(!Object.values(t.data).every(t=>!(t instanceof FileList)&&(!Array.isArray(t)||t.every(t=>!(t instanceof File))))){const e=Object.entries(t.data).reduce((t,[e,i])=>{if(i instanceof FileList)for(const r of i)t.FormData.append(e+(i.length>1?"[]":""),r);else Array.isArray(i)?i.every(t=>!(t instanceof File))?t.jsondata[e]=i:i.forEach(r=>t.FormData.append(e+(i.length>1?"[]":""),r)):t.jsondata[e]=i;return t},{FormData:new FormData,jsondata:{}});e.FormData.append("_jsondata",JSON.stringify(e.jsondata)),t.data=e.FormData}return t}),n.interceptors.response.use(e=>("off"==e.config?.errorHandling||!1===e.config?.errorHandling||"fail"==e.config?.errorHandling||e.data.errors&&(e.data.errors=e.data.errors.filter(i=>(e.config[i.type+"ErrorHandler"]||t.config.globalProperties.$fhcApi._defaultErrorHandlers[i.type])(i,e.config))),r(e)),e=>"ERR_CANCELED"==e.code?Promise.reject({handled:!0,...e}):"off"==e.config?.errorHandling||!1===e.config?.errorHandling||"success"==e.config?.errorHandling?Promise.reject(e):e.response?404==e.response.status?(t.config.globalProperties.$fhcAlert.alertDefault("error",e.message,e.request.responseURL,!0),Promise.reject({handled:!0,...e})):(e.response.data.errors=e.response.data.errors.filter(i=>(e.config[i.type+"ErrorHandler"]||t.config.globalProperties.$fhcApi._defaultErrorHandlers[i.type])(i,e.config)),e.response.data.errors.length?Promise.reject(e):Promise.reject({handled:!0,...e})):e.request?(t.config.globalProperties.$fhcAlert.alertDefault("error",e.message,e.request.responseURL),Promise.reject({handled:!0,...e})):(t.config.globalProperties.$fhcAlert.alertError(e.message),Promise.reject({handled:!0,...e}))),t.config.globalProperties.$fhcApi={getUri:t=>(console.warn("$fhcApi.getUri is DEPRECATED! Use $api.getUri instead."),n.getUri({url:t})),get:(t,e,r,s)=>(console.warn("$fhcApi.get is DEPRECATED! Use $api.get instead."),[e,r,s]=i(t,e,r,s),r&&(s?s.params=r:s={params:r}),n.get(e,s)),post:(t,e,r,s)=>(console.warn("$fhcApi.post is DEPRECATED! Use $api.post instead."),[e,r,s]=i(t,e,r,s),n.post(e,r,s)),_defaultErrorHandlers:{validation(e,i){const r=t.config.globalProperties.$fhcAlert;return i?.form?(i.form.clearValidation(),i.form.setFeedback(!1,e.messages),!1):Array.isArray(e.messages)?(e.messages.forEach(r.alertError),!1):"object"!=typeof e.messages||(i?.errorHeader?Object.values(e.messages).forEach(e=>r.alertDefault("error",Array.isArray(i.errorHeader)?t.config.globalProperties.$p.t.apply(null,i.errorHeader):i.errorHeader,e,!0)):Object.entries(e.messages).forEach(([t,e])=>r.alertDefault("error",t,e,!0)),!1)},general(e,i){const r=t.config.globalProperties.$fhcAlert;i?.form?i.form.setFeedback(!1,e.message):i?.errorHeader?r.alertDefault("error",Array.isArray(i.errorHeader)?t.config.globalProperties.$p.t.apply(null,i.errorHeader):i.errorHeader,e.message,!0):r.alertError(e.message)},php(e){const i=t.config.globalProperties.$fhcAlert;var r="";switch(r+="Message: "+e.message+"\n\n",r+="Filename: "+e.filename+"\n",r+="Line Number: "+e.line+"\n",e.backtrace&&e.backtrace.length&&(r+="\nBacktrace: ",e.backtrace.forEach(t=>{r+="\n\tFile: "+t.file+"\n",r+="\tLine: "+t.line+"\n",r+="\tFunction: "+t.function+"\n"})),e.severity){case"Warning":case"Core Warning":case"Compile Warning":case"User Warning":i.alertDefault("warn","PHP "+e.severity,r,!0);break;case"Notice":case"User Notice":case"Runtime Notice":i.alertDefault("info","PHP "+e.severity,r,!0);break;default:r="Type: PHP "+e.severity+"\n\n"+r,i.alertSystemError(r)}},exception(e){const i=t.config.globalProperties.$fhcAlert;var r="";r+="Type: "+e.class+"\n\n",r+="Message: "+e.message+"\n\n",r+="Filename: "+e.filename+"\n",r+="Line Number: "+e.line+"\n",e.backtrace&&e.backtrace.length&&(r+="\nBacktrace: ",e.backtrace.forEach(t=>{r+="\n\tFile: "+t.file+"\n",r+="\tLine: "+t.line+"\n",r+="\tFunction: "+t.function+"\n"})),i.alertSystemError(r)},db(e){const i=t.config.globalProperties.$fhcAlert;var r="";void 0!==e.heading&&(r+=e.heading+"\n\n"),void 0!==e.code&&(r+="Code: "+e.code+"\n\n"),void 0!==e.sql&&(r+="SQL: "+e.sql+"\n\n"),void 0!==e.message?r+="Message: "+e.message+"\n\n":void 0!==e.messages&&(r+="Messages: "+e.messages.join("\n\t")+"\n\n"),void 0!==e.filename&&(r+="Filename: "+e.filename+"\n"),void 0!==e.line&&(r+="Line Number: "+e.line+"\n"),i.alertSystemError(r)},auth(e,i){const r=t.config.globalProperties.$fhcAlert;var n="";n+="Controller name: "+e.controller+"\n",n+="Method name: "+e.method+"\n",n+="Required permissions: "+e.required_permissions,i?.errorHeader?r.alertDefault("error",Array.isArray(i.errorHeader)?t.config.globalProperties.$p.t.apply(null,i.errorHeader):i.errorHeader,e.message,!0):r.alertDefault("error",e.message,n)}}};class s{constructor(e,i){void 0===i?(this.$fhcApi={getUri:e=>(console.warn("$fhcApi.factory is DEPRECATED!"),t.config.globalProperties.$fhcApi.getUri(e)),get:(e,i,r,n)=>(console.warn("$fhcApi.factory is DEPRECATED!"),t.config.globalProperties.$fhcApi.get(e,i,r,n)),post:(e,i,r,n)=>(console.warn("$fhcApi.factory is DEPRECATED!"),t.config.globalProperties.$fhcApi.post(e,i,r,n))},Object.defineProperty(this.$fhcApi,"factory",{get:()=>(console.warn("$fhcApi.factory is DEPRECATED!"),t.config.globalProperties.$fhcApi.factory)}),t.config.globalProperties.$fhcApi.factory=this):Object.defineProperty(this,"$fhcApi",{get(){return(i||this).$fhcApi}}),this.addEndpoints(e,!0)}addEndpoints(t,e){Object.keys(t).forEach(e=>{Object.defineProperty(this,e,{get(){return"function"==typeof t[e]?t[e].bind(this):new s(t[e],this.$fhcApi.factory)}})}),e||console.warn("$fhcApi.factory.addEndpoints() is DEPRECATED!")}}const a=new s(Z);e?.factory&&(console.warn("$fhcApi is DEPRECATED!"),a.addEndpoints(e.factory)),t.config.globalProperties.$fhcApi.factory=a,t.provide("$fhcApi",t.config.globalProperties.$fhcApi)}};const Y="error",X="retval",Q={get:function(t,e,i=null){return Q._axiosCall(t,e,"get",i)},post:function(t,e,i=null){return Q._axiosCall(t,e,"post",i)},isSuccess:function(t){return!("object"!=typeof t||!t.hasOwnProperty(Y)||!t.hasOwnProperty(X)||0!=t.error)},isError:function(t){return!Q.isSuccess(t)},hasData:function(t){return!(!Q.isSuccess(t)||!("object"==typeof t[X]&&Object.keys(t[X]).length>0||"array"==typeof t[X]&&t[X].length>0||"string"==typeof t[X]&&""!=t[X].trim()||"number"==typeof t[X]))},getData:function(t){return Q.hasData(t)?t[X]:null},getError:function(t){return"object"==typeof t&&Object.keys(t).length>0&&t.hasOwnProperty(X)?t[X]:"Generic error"},getErrorCode:function(t){return"object"==typeof t&&t.hasOwnProperty(Y)?t[Y]:1},_generateRouterURI:function(t){var e=null;return"undefined"!=typeof FHC_JS_DATA_STORAGE_OBJECT&&(e=FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/"+t),e},_printDebug:function(t,e,i){},_axiosCall:function(t,e,i,r){let n={method:i,url:Q._generateRouterURI(t),timeout:5e3};if("get"==i?n.params=e:n.data=e,"object"==typeof r)for(var s in r)n[s]=r[s];return axios(n)}},tt=document.createElement("div"),et=Vue.createApp({name:"FhcAlertApp",components:{PvToast:e,PvConfirm:i},methods:{mailToUrl:t=>"mailto:"+FHC_JS_DATA_STORAGE_OBJECT.systemerror_mailto+"?subject=Meldung%20Systemfehler&body="+("\n\t\t\t\tDanke, dass Sie uns den Fehler melden. %0D%0A %0D%0A\n\t\t\t\tBitte beschreiben Sie uns ausführlich das Problem.%0D%0A\n\t\t\t\tBsp: Ich habe X ausgewählt und Y angelegt. Beim Speichern erhielt ich die Fehlermeldung. [Optional: Ich habe den Browser Z verwendet.]%0D%0A\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A\n\t\t\t\tPROBLEM: ... %0D%0A %0D%0A %0D%0A\n\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A\n\t\t\t\tFehler URL: "+FHC_JS_DATA_STORAGE_OBJECT.called_path+"/"+FHC_JS_DATA_STORAGE_OBJECT.called_method+"%0D%0A\n\t\t\t\tFehler Meldung: "+t.message.detail+"%0D%0A\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A %0D%0A\n\t\t\t\tWir kümmern uns um eine rasche Behebung des Problems!"),openMessagecard(t){bootstrap.Collapse.getOrCreateInstance(t.target.getAttribute("href")).toggle()}},unmounted(){tt.parentElement.removeChild(tt)},computed:{showmaillink:function(){return""!==FHC_JS_DATA_STORAGE_OBJECT.systemerror_mailto}},template:'\n\t<pv-toast ref="toast" class="fhc-alert" :base-z-index="99999">\n\t\t<template #message="{ message }">\n\t\t\t\x3c!--span :class="slotProps.iconClass"></span--\x3e\n\t\t\t<div class="p-toast-message-text">\n\t\t\t\t<span class="p-toast-summary">{{ message.summary }}</span>\n\t\t\t\t<div v-if="message.detail && message.html" class="p-toast-detail" v-html="message.detail"></div>\n\t\t\t\t<div v-else-if="message.detail" class="p-toast-detail">{{ message.detail }}</div>\n\t\t\t</div>\n\t\t</template>\n\t</pv-toast>\n\t<pv-toast ref="alert" class="fhc-alert" :base-z-index="99999" position="center">\n\t\t<template #message="slotProps">\n\t\t\t<i class="fa fa-circle-exclamation fa-2xl mt-3"></i>\n\t\t\t<div class="p-toast-message-text">\n\t\t\t\t<span class="p-toast-summary">{{slotProps.message.summary}}</span>\n\t\t\t\t<div class="p-toast-detail my-3">Sorry! Ein interner technischer Fehler ist aufgetreten.</div>\n\t\t\t\t<div class="d-flex justify-content-between align-items-center">\n\t\t\t\t\t<a\n\t\t\t\t\t\tclass="align-bottom flex-fill me-2"\n\t\t\t\t\t\tdata-bs-toggle="collapse"\n\t\t\t\t\t\t:href="\'#fhcAlertCollapseMessageCard\' + slotProps.message.id"\n\t\t\t\t\t\trole="button"\n\t\t\t\t\t\taria-expanded="false"\n\t\t\t\t\t\t:aria-controls="\'fhcAlertCollapseMessageCard\' + slotProps.message.id"\n\t\t\t\t\t\t@click="openMessagecard"\n\t\t\t\t\t\t>\n\t\t\t\t\t\tFehler anzeigen\n\t\t\t\t\t</a>\n\t\t\t\t\t<a\n\t\t\t\t\t\tv-if="showmaillink"\n\t\t\t\t\t\tclass="btn btn-primary flex-fill"\n\t\t\t\t\t\ttarget="_blank"\n\t\t\t\t\t\t:href="mailToUrl(slotProps)"\n\t\t\t\t\t\t>\n\t\t\t\t\t\tFehler melden\n\t\t\t\t\t</a>\n\t\t\t\t</div>\n\t\t\t\t<div ref="messageCard" :id="\'fhcAlertCollapseMessageCard\' + slotProps.message.id" class="collapse mt-3">\n\t\t\t\t\t<div class="card card-body text-body small alertCollapseText">\n\t\t\t\t\t\t{{slotProps.message.detail}}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</template>\n\t</pv-toast>\n\t<pv-confirm group="fhcAlertConfirm"></pv-confirm>'});et.use(t),et.use(r);const it=et.mount(tt);document.body.appendChild(tt);var rt={install:(t,e)=>{t.config.globalProperties.$p||t.use(ht);const i={alertSuccess(t){if(Array.isArray(t))return t.forEach(this.alertSuccess);it.$refs.toast.add({severity:"success",summary:"Info",detail:t,life:1e3})},alertInfo(t){if(Array.isArray(t))return t.forEach(this.alertInfo);it.$refs.toast.add({severity:"info",summary:"Info",detail:t,life:3e3})},alertWarning(t){if(Array.isArray(t))return t.forEach(this.alertWarning);it.$refs.toast.add({severity:"warn",summary:"Achtung",detail:t})},alertError(t){if(Array.isArray(t))return t.forEach(this.alertError);it.$refs.toast.add({severity:"error",summary:"Achtung",detail:t})},alertSystemError(e){if(Array.isArray(e))return e.forEach(this.alertSystemError);it.$refs.alert.add({severity:"error",summary:Vue.computed(()=>t.config.globalProperties.$p.t("alert/systemerror")),detail:e})},confirmDelete:()=>new Promise((e,i)=>{it.$confirm.require({group:"fhcAlertConfirm",header:Vue.computed(()=>t.config.globalProperties.$p.t("alert/attention")),message:Vue.computed(()=>t.config.globalProperties.$p.t("alert/confirm_delete")),acceptLabel:Vue.computed(()=>t.config.globalProperties.$p.t("ui/loeschen")),acceptClass:"p-button-danger",rejectLabel:Vue.computed(()=>t.config.globalProperties.$p.t("ui/abbrechen")),rejectClass:"p-button-secondary",accept(){e(!0)},reject(){e(!1)}})}),confirm:e=>new Promise((i,r)=>{it.$confirm.require({group:e?.group??"fhcAlertConfirm",header:e?.header??Vue.computed(()=>t.config.globalProperties.$p.t("alert/attention")),message:e?.message??"",acceptLabel:e?.acceptLabel??"Ok",acceptClass:e?.acceptClass??"btn btn-primary",rejectLabel:e?.rejectLabel??Vue.computed(()=>t.config.globalProperties.$p.t("ui/abbrechen")),rejectClass:e?.rejectClass??"btn btn-outline-secondary",accept(){i(!0)},reject(){i(!1)}})}),alertDefault(t,e,i,r=!1,n=!1){let s={severity:t,summary:e,detail:i,html:n};r||(s.life=3e3),it.$refs.toast.add(s)},alertMultiple(t,e="info",i="Info",r=!1,n=!1){return!!t.every(t=>"string"==typeof t)&&(t.forEach(t=>this.alertDefault(e,i,t,r,n)),!0)},handleSystemError(t){if(!t.hasOwnProperty("name")||t.name.toLowerCase()!=="AbortError".toLowerCase()){if("string"==typeof t)return i.alertSystemError(t);if(Array.isArray(t)&&t.every(t=>"string"==typeof t))return t.every(i.alertSystemError);if(!t.hasOwnProperty("handled")||!t.handled){if("object"==typeof t&&null!==t){let e="";return t.hasOwnProperty("response")&&t.response?.data?.retval?e+="Error Message: "+(t.response.data.retval.message||t.response.data.retval)+"\r\n":t.hasOwnProperty("message")&&(e+="Error Message: "+t.message.toUpperCase()+"\r\n"),t.hasOwnProperty("config")&&t.config.hasOwnProperty("url")&&(e+="Error ConfigURL: "+t.config.url+"\r\n"),t.hasOwnProperty("stack")&&(e+="Error Stack: "+t.stack+"\r\n"),""==e&&(e="Error Message: "+JSON.stringify(t)+"\r\n"),e+="Error Controller Path: "+FHC_JS_DATA_STORAGE_OBJECT.called_path+"/"+FHC_JS_DATA_STORAGE_OBJECT.called_method,i.alertSystemError(e)}i.alertSystemError("alertSystemError throws Generic Error\r\nError Controller Path: "+FHC_JS_DATA_STORAGE_OBJECT.called_path+"/"+FHC_JS_DATA_STORAGE_OBJECT.called_method)}}},handleSystemMessage(t){if("string"==typeof t)return i.alertWarning(t);if(Array.isArray(t)){if(t.every(t=>"string"==typeof t))return t.every(i.alertWarning);if(t.every(t=>"object"==typeof t)&&null!==msg)return t.every(t=>{t.hasOwnProperty("data")&&t.data.hasOwnProperty("retval")?i.alertWarning(JSON.stringify(t.data.retval)):i.alertSystemError(JSON.stringify(t))})}"object"!=typeof t||null===t?i.alertSystemError("alertSystemError throws Generic Error\r\nError Controller Path: "+FHC_JS_DATA_STORAGE_OBJECT.called_path+"/"+FHC_JS_DATA_STORAGE_OBJECT.called_method):t.hasOwnProperty("data")&&t.data.hasOwnProperty("retval")?i.alertWarning(JSON.stringify(t.data.retval)):i.alertSystemError(JSON.stringify(t))},resetFormValidation(t){const e=new Event("fhc-form-reset");t.querySelectorAll(["[data-fhc-form-validate],[data-fhc-form-error]"]).forEach(t=>t.dispatchEvent(e))},handleFormValidation(t,e){if(void 0===e){if(t&&t.nodeType===Node.ELEMENT_NODE)return e=>i.handleFormValidation(e,t)}else if(400==t?.response?.status){let r=Q.getError(t.response.data);"object"!=typeof r&&(r=t.response.data),i.resetFormValidation(e);const n=Object.entries(r).filter(([t,i])=>{const r=e.querySelector('[data-fhc-form-validate="'+t+'"]');return!r||(r.dispatchEvent(new CustomEvent("fhc-form-invalidate",{detail:i})),!1)}).map(t=>t[1]),s=e.querySelector("[data-fhc-form-error]");return void(s&&n.length?s.dispatchEvent(new CustomEvent("fhc-form-error",{detail:n})):n.forEach(i.alertError))}if(400==t?.response?.status){let e=Q.getError(t.response.data);i.alertError("object"==typeof e?Object.values(e):e)}else i.handleSystemError(t)}};t.config.globalProperties.$fhcAlert=i,t.provide("$fhcAlert",t.config.globalProperties.$fhcAlert)}},nt={install:(t,e)=>{if(t.config.globalProperties.$api)return;function i(t,e){Array.isArray(t)?t.forEach(e):Object.entries(t).forEach(([t,i])=>i.forEach(i=>e(i,t)))}t.config.globalProperties.$fhcAlert||t.use(rt);let r={success:!0,fail:!0,combine:{form:["validation","general"],toast:["validation","general","not_found","site_failed"]},handler:{form(t,e){t.clearValidation(),e.forEach(e=>t.setFeedback(!1,e.messages||e.message))},async toast(e){const i=t.config.globalProperties.$p;if(!i)return Promise.reject("Phrasen plugin not loaded!");async function r(t){t=t.reduce((t,e)=>{switch(e.type){case"not_found":case"site_failed":e.message?t[e.message]=[e.url]:t._default=[e.url];break;case"general":t._default||(t._default=[]),t._default.push(e.message);break;case"validation":Object.entries(e.messages).forEach(([e,i])=>{t[e]||(t[e]=[]),Array.isArray(i)?t[e].push(...i):t[e].push(i)})}return t},{});let e=0;const r=await Promise.all(Object.entries(t).sort((t,e)=>["_default"].indexOf(e[0])-["_default"].indexOf(t[0])).map(async([t,r])=>{if("_default"==t){await i.loadCategory("dashboard");t='<dt class="d-none">'+i.t("dashboard/general")+"</dt>"}else t="<dt>"+t+"</dt>";return e+=r.length,t+"<dd>"+r.join("</dd><dd>")+"</dd>"}));return{counter:e,msgs:r}}let n,s;Array.isArray(e)?({counter:n,msgs:s}=await r(e)):({counter:n,msgs:s}=await Object.entries(e).reduce(async(t,[e,i])=>{const n=await t,{counter:s,msgs:a}=await r(i);return n.counter+=s,n.msgs.push("<dt>"+e+"</dt><dd><dl>"+a.join("")+"</dl></dd>"),n},Promise.resolve({counter:0,msgs:[]}))),await i.loadCategory("ui");const a=i.t("ui/n_errors",{n:n});t.config.globalProperties.$fhcAlert.alertDefault("error",a,"<dl>"+s.join("")+"</dl>",!0,!0)},php(e){i(e,(e,i)=>{var r="";switch(r+="Message: "+e.message+"\n\n",r+="Filename: "+e.filename+"\n",r+="Line Number: "+e.line+"\n",e.backtrace&&e.backtrace.length&&(r+="\nBacktrace: ",e.backtrace.forEach(t=>{r+="\n\tFile: "+t.file+"\n",r+="\tLine: "+t.line+"\n",r+="\tFunction: "+t.function+"\n"})),e.severity){case"Warning":case"Core Warning":case"Compile Warning":case"User Warning":i?i+=": PHP "+e.severity:i="PHP "+e.severity,t.config.globalProperties.$fhcAlert.alertDefault("warn",i,r,!0);break;case"Notice":case"User Notice":case"Runtime Notice":i?i+=": PHP "+e.severity:i="PHP "+e.severity,t.config.globalProperties.$fhcAlert.alertDefault("info",i,r,!0);break;default:r="Type: PHP "+e.severity+"\n\n"+r,i&&(r=i+"\n\n"+r),t.config.globalProperties.$fhcAlert.alertSystemError(r)}})},exception(e){i(e,(e,i)=>{var r="";i&&(r+=i+"\n\n"),r+="Type: "+e.class+"\n\n",r+="Message: "+e.message+"\n\n",r+="Filename: "+e.filename+"\n",r+="Line Number: "+e.line+"\n",e.backtrace&&e.backtrace.length&&(r+="\nBacktrace: ",e.backtrace.forEach(t=>{r+="\n\tFile: "+t.file+"\n",r+="\tLine: "+t.line+"\n",r+="\tFunction: "+t.function+"\n"})),t.config.globalProperties.$fhcAlert.alertSystemError(r)})},db(e){i(e,(e,i)=>{var r="";i&&(r+=i+"\n\n"),void 0!==e.heading&&(r+=e.heading+"\n\n"),void 0!==e.code&&(r+="Code: "+e.code+"\n\n"),void 0!==e.sql&&(r+="SQL: "+e.sql+"\n\n"),void 0!==e.message?r+="Message: "+e.message+"\n\n":void 0!==e.messages&&(r+="Messages: "+e.messages.join("\n\t")+"\n\n"),void 0!==e.filename&&(r+="Filename: "+e.filename+"\n"),void 0!==e.line&&(r+="Line Number: "+e.line+"\n"),t.config.globalProperties.$fhcAlert.alertSystemError(r)})},auth(e){i(e,(e,i)=>{i?i+=": "+e.message:i=e.message;var r="";r+="Controller name: "+e.controller+"\n",r+="Method name: "+e.method+"\n",r+="Required permissions: "+e.required_permissions,t.config.globalProperties.$fhcAlert.alertDefault("error",i,r,!0)})}}};function n(t,e,i,r){if("string"==typeof t&&void 0===r)[e,i,r]=[t,e,i],t=void 0;else if(t){if("object"!=typeof t)throw new TypeError("Parameter 1 of _get_config must be an object or a string");void 0===e&&void 0===i&&void 0===r&&(r=t,t=void 0)}if(t){if(!t.clearValidation||!t.setFeedback)throw new TypeError("'form' is not a Form Component");t={clearValidation:t.clearValidation,setFeedback:t.setFeedback},r?r.form=t:r={form:t}}return[e,i,r]}function s(t){if("string"==typeof t.data||t.data instanceof String)return s({data:t});const e=t.data;return delete t.data,e?(e.meta?e.meta.response=t:e.meta={response:t},e):{meta:{response:t},data:null}}function a(t){if(!1===t||"off"===t)return{...r,success:!1,fail:!1};if(!t||!0===t)return{...r};if("success"===t)return{...r,fail:!1};if("fail"===t)return{...r,success:!1};const{success:e,fail:i,handler:n,combine:s}=t;return t={...r},Object.entries({fail:i,success:e}).forEach(([e,i])=>{void 0!==i&&(t[e]=i)}),Object.entries({handler:n,combine:s}).forEach(([e,i])=>{void 0!==i&&(t[e]={...t[e],...i})}),t}function o(t){const e=a(t?.errorHandling);if(t?.form){const i=e.handler.form;e.handler={...e.handler,form:e=>i(t.form,e)}}else e.combine={...e.combine,form:[]};return e}function d(t){return t.response?404==t.response.status?[{type:"not_found",message:t.message,url:t.request.responseURL}]:null==t.response.data.errors?[]:t.response.data.errors:t.request?[{type:"site_failed",message:t.message,url:t.request.responseURL}]:[{type:"script",message:t.message}]}function l(t,e){const i={},r=[];if(null==e)return{};for(;e.length;)r.push(e.pop());for(var n of r){let r=n.type,a=null;for(var s in t.combine){let e=t.combine[s].includes(r),i=t.handler[s];if(e&&i&&(a=s,"form"==a))break}a&&(r=a);t.handler[r]?(i[r]||(i[r]=[]),Array.isArray(n)?i[r].push(...n):i[r].push(n)):e.push(n)}return i}void 0!==e?.errorHandling&&(r=a(e.errorHandling));const p=axios.create({timeout:5e5,baseURL:FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/"});p.interceptors.request.use(t=>{if("post"!=t.method||!t.data)return t;if(t.data instanceof FormData)return t;if(!Object.values(t.data).every(t=>!(t instanceof FileList)&&(!Array.isArray(t)||t.every(t=>!(t instanceof File))))){const e=Object.entries(t.data).reduce((t,[e,i])=>{if(i instanceof FileList)for(const r of i)t.FormData.append(e+(i.length>1?"[]":""),r);else Array.isArray(i)?i.every(t=>!(t instanceof File))?t.jsondata[e]=i:i.forEach(r=>t.FormData.append(e+(i.length>1?"[]":""),r)):t.jsondata[e]=i;return t},{FormData:new FormData,jsondata:{}});e.FormData.append("_jsondata",JSON.stringify(e.jsondata)),t.data=e.FormData}return t}),p.interceptors.response.use(e=>("off"==e.config?.errorHandling||!1===e.config?.errorHandling||"fail"==e.config?.errorHandling||e.data.errors&&(e.data.errors=e.data.errors.filter(i=>(e.config[i.type+"ErrorHandler"]||t.config.globalProperties.$api._defaultErrorHandlers[i.type])(i,e.config))),s(e)),t=>{if("ERR_CANCELED"==t.code)return Promise.reject({handled:!0,...t});const e=o(t.config);if(!e.fail)return Promise.reject(t);const i=d(t),r=l(e,i);for(var n in r)e.handler[n](r[n]);return i.length?Promise.reject(t):Promise.reject({handled:!0,...t})}),t.config.globalProperties.$api={getUri:t=>p.getUri({url:t}),get:(t,e,i,r)=>([e,i,r]=n(t,e,i,r),i&&(r?r.params=i:r={params:i}),p.get(e,r)),post:(t,e,i,r)=>([e,i,r]=n(t,e,i,r),p.post(e,i,r)),call(e,i,r){if(Array.isArray(e)){const s=t.config.globalProperties.$api;return Promise.allSettled(e.map((t,e)=>(Array.isArray(t)||(t=["#"+e,t]),s.call(t[1],{errorHeader:t[0],errorHandling:!1})))).then(t=>{const[,,e]=n(r,void 0,void 0,i||{}),s=o(e);if(!s.success&&!s.fail)return t;const a={};for(var p of t){const[t,e]="fulfilled"===p.status?[s.success,p.value]:[s.fail,p.reason];if(!t)return;const i=l(s,d(e));for(var h in i)a[h]?a[h][e.config.errorHeader]=i[h]:a[h]={[e.config.errorHeader]:i[h]}}for(var u in a)s.handler[u](a[u]);return t})}let{method:s,url:a,params:p,config:h}=e;return void 0!==i&&(h=i),s||(s="get"),s.toLowerCase&&(s=s.toLowerCase()),"get"==s?this.get(r,a,p,h):"post"==s?this.post(r,a,p,h):void console.error("FhcApi: method not allowed:",s)},getErrorHandler:t=>o(t)},t.provide("$api",t.config.globalProperties.$api)}},st={loadCategory:t=>({method:"get",url:"/api/frontend/v1/phrasen/loadModule/"+t}),setLanguage:(t,e)=>({method:"post",url:"/api/frontend/v1/phrasen/setLanguage",params:{categories:t,language:e}}),getLanguage:()=>({method:"get",url:"/api/frontend/v1/phrasen/getLanguage"}),getActiveDbLanguages:()=>({method:"get",url:"/api/frontend/v1/phrasen/getAllLanguages"})};const at=Vue.reactive({}),ot={};let dt=Vue.ref(FHC_JS_DATA_STORAGE_OBJECT.user_language),lt=Vue.computed(()=>dt.value?FHC_JS_DATA_STORAGE_OBJECT.server_languages.find(t=>t.sprache==dt.value).LC_Time:null);const pt={user_language:dt,user_locale:lt,setLanguage(t){const e=Object.keys(at);return this.config.globalProperties.$api.call(st.setLanguage(e,t)).then(e=>(e.data.forEach(t=>{at[t.category][t.phrase]=t.text}),dt.value=t,e))},loadCategory(t){return Array.isArray(t)?Promise.all(t.map(this.config.globalProperties.$p.loadCategory)):(ot[t]||(ot[t]=this.config.globalProperties.$api.call(st.loadCategory(t)).then(e=>e?.data?function(t,e){return t.filter(t=>t.category==e).reduce((t,e)=>(t[e.phrase]||(t[e.phrase]=e.text),t),{})}(e.data,t):{}).then(e=>{at[t]=e})),ot[t])},t_ref(t,e,i){return console.warn("deprecated"),Vue.computed(()=>this.t(t,e,i))},t(t,e,i){if(void 0===i&&(Array.isArray(t)&&2==t.length||t.split&&2==t.split("/").length)&&(i=e,[t,e]=t.split?t.split("/"):t),void 0===e)return console.error("invalid input",t,e,i),"";let r=Vue.computed(()=>at[t]?function(t,e,i){let r=at[t][e];return r?(i&&(r=r.replace(/\{([^}]*)\}/g,(t,e)=>void 0===i[e]?t:i[e])),r):"<< PHRASE "+e+">>"}(t,e,i):"");return at[t]||this.loadCategory(t),r.value}};var ht={install(t,e){t.config.globalProperties.$fhcApi||t.use(K),t.config.globalProperties.$api||t.use(nt),t.config.globalProperties.$p={t:pt.t,loadCategory:e=>pt.loadCategory.call(t,e),setLanguage:e=>pt.setLanguage.call(t,e),user_language:dt,user_locale:lt,t_ref:pt.t_ref},t.provide("$p",t.config.globalProperties.$p)}},ut=Object.freeze({__proto__:null,default:ht,user_locale:lt});const ct=Vue.createApp({name:"AdminApp",data:()=>({appSideMenuEntries:{}}),components:{CoreNavigationCmpt:a,DashboardAdmin:S}});ct.use(ht),ct.mount("#main");
|
|
//# sourceMappingURL=Admin.js.map
|