Merge branch 'task003/modals-resize' of bitbucket.org:studiotem/jandl-taskmanager-app

This commit is contained in:
Matej Glasnák committed 2025-12-03 13:58:18 +01:00
commit 2f2f450d4b
36 files changed
+1018 -407

No files matched your search

+59 -119
View File
@@ -1,9 +1,8 @@
<template>
<v-dialog
v-model="visible"
max-width="750"
max-height="90%"
height="700px"
:width="modalWidth"
:height="modalHeight"
persistent
>
<W-loadable :content="subtask" class="h-100">
@@ -11,14 +10,14 @@
v-if="editMode"
height="100%"
class="d-flex flex-column scrolling"
style="position: relative"
>
<div class="d-flex justify-space-between align-center modal-header">
<h1>{{ subtask?.id ? 'Upraviť sub task' : 'Vytvoriť sub task' }}</h1>
<v-icon
icon="mdi-close"
size="large"
@click.stop="closeModal()"
></v-icon>
<div class="d-flex align-center">
<a-reset-size-button @reset="resetModalSize" />
<a-close-button @close="closeModal()" />
</div>
</div>
<v-card-actions class="d-flex flex-column modal-content">
@@ -252,7 +251,7 @@
</div>
</div>
<div class="w-100 modal-input">
<div class="w-100 modal-input quill-editor-wrapper">
<QuillEditor
ref="description"
v-model="subtask.description"
@@ -271,57 +270,26 @@
/>
</v-card-actions>
<template v-if="!subtask.id">
<v-btn class="button primary" :disabled="isSaving" @click="save()"
>VYTVORIŤ</v-btn
>
<v-btn
class="button primary outline mt-2"
@click="save(true)"
:disabled="isSaving"
>ULOŽIŤ KONCEPT</v-btn
>
</template>
<template v-else>
<template v-if="subtask.is_draft">
<v-btn
class="button primary"
:disabled="isSaving"
@click="save(true)"
>ULOŽIŤ A PUBLIKOVAŤ</v-btn
>
<v-btn
class="button primary outline mt-2"
@click="save(true)"
:disabled="isSaving"
>ULOŽIŤ KONCEPT</v-btn
>
</template>
<template v-else>
<v-btn class="button primary" :disabled="isSaving" @click="save()"
>UPRAVIŤ</v-btn
>
</template>
</template>
<v-btn v-if="!isSaving" class="button primary" @click="save()">{{
subtask.id ? 'UPRAVIŤ' : 'VYTVORIŤ'
}}</v-btn>
<v-btn v-else class="button primary disabled" disabled>{{
$t('Ukladám...')
}}</v-btn>
<a-resize-handle :current-width="modalWidthPx" :current-height="modalHeightPx" @resize="handleModalResize" @resize-end="handleResizeEnd" />
</v-card>
<v-card v-else height="100%" class="d-flex flex-column scrolling">
<v-card v-else height="100%" class="d-flex flex-column scrolling" style="position: relative">
<div class="d-flex justify-space-between align-center">
<div>
<p>{{ subtask._master_task.project_code }}</p>
<h1>{{ subtask._master_task.name }}</h1>
</div>
<v-icon
icon="mdi-close"
size="large"
class="pb-5"
@click.stop="closeModal()"
></v-icon>
<div class="d-flex align-center">
<a-reset-size-button @reset="resetModalSize" />
<a-close-button class="pb-5" @close="closeModal()" />
</div>
</div>
<div
class="d-flex justify-space-between align-center modal-header border-bottom pb-4"
@@ -370,6 +338,7 @@
</div>
</div>
</v-card-actions>
<a-resize-handle :current-width="modalWidthPx" :current-height="modalHeightPx" @resize="handleModalResize" @resize-end="handleResizeEnd" />
</v-card>
</W-loadable>
</v-dialog>
@@ -393,6 +362,9 @@ import ZTaskReadonlyInfo from './_components/z-task-readonly-info.vue';
import ATimeblock from './_components/a-timeblock.vue';
import { mapGetters } from 'vuex';
import modalMixin from '@/plugins/tm@modal/_mixins/modal.mixin';
import AResizeHandle from '@/plugins/tm@modal/_components/a-resize-handle.vue';
import AResetSizeButton from '@/plugins/tm@modal/_components/a-reset-size-button.vue';
import ACloseButton from '@/plugins/tm@modal/_components/a-close-button.vue';
export default {
components: {
@@ -402,6 +374,9 @@ export default {
ZDatepicker,
// ATaskTimeblocks,
QuillEditor,
AResizeHandle,
AResetSizeButton,
ACloseButton,
},
mixins: [VuetifyFixFocusMixin, SelectsMixin, AutocompleteMixin, modalMixin],
emits: ['close', 'refresh'],
@@ -426,6 +401,7 @@ export default {
},
],
wasFormValidationTriggered: false,
modalName: 'z-task-modal',
};
},
@@ -695,12 +671,12 @@ export default {
throw new Error('subtaskData is null or undefined');
}
} catch (error) {
/* eslint-disable */ console.error(
...oo_tx(
/* eslint-disable */ /* eslint-disable */console.error(
...oo_tx(`721229222_674_33_680_13_11`,...oo_tx(
`3261980582_640_12_640_62_11`,
'Error parsing subtaskData:',
error,
),
)),
);
this.subtask = {
master_task: mastertask,
@@ -732,12 +708,12 @@ export default {
this.$toast.error(this.$parseError(error));
if (process.env.NODE_ENV === 'development')
/* eslint-disable */ console.log(
...oo_oo(
/* eslint-disable */ /* eslint-disable */console.log(
...oo_oo(`721229222_711_31_717_11_4`,...oo_oo(
`3261980582_671_10_671_58_4`,
'[z-task-modal.vue] Error: ',
error,
),
)),
);
}
},
@@ -863,12 +839,12 @@ export default {
this.$toast.error(this.$parseError(error));
if (process.env.NODE_ENV === 'development')
/* eslint-disable */ console.log(
...oo_oo(
/* eslint-disable */ /* eslint-disable */console.log(
...oo_oo(`721229222_842_31_848_11_4`,...oo_oo(
`3261980582_788_10_788_58_4`,
'[z-task-modal.vue] Error: ',
error,
),
)),
);
} finally {
this.isSaving = false;
@@ -902,8 +878,8 @@ export default {
_mergeDeadlineTimeDate() {
const date = new Date(this.subtask.deadline);
/* eslint-disable */ console.log(
...oo_oo(`3261980582_821_6_821_47_4`, 'z-task-modal', this.subtask),
/* eslint-disable */ /* eslint-disable */console.log(
...oo_oo(`721229222_881_27_883_7_4`,...oo_oo(`3261980582_821_6_821_47_4`, 'z-task-modal', this.subtask)),
);
const timeParts = this.subtask._deadline_time.split(':');
@@ -1044,8 +1020,8 @@ export default {
...val,
employees: employees && employees.length > 0 ? employees : [{}],
};
/* eslint-disable */ console.log(
...oo_oo(`3261980582_961_10_961_49_4`, 'subtaskData', subtaskData),
/* eslint-disable */ /* eslint-disable */console.log(
...oo_oo(`721229222_1023_31_1025_11_4`,...oo_oo(`3261980582_961_10_961_49_4`, 'subtaskData', subtaskData)),
);
localStorage.setItem('subtaskData', JSON.stringify(subtaskData));
}
@@ -1054,60 +1030,6 @@ export default {
},
},
};
/* istanbul ignore next */ /* c8 ignore start */ /* eslint-disable */ function oo_cm() {
try {
return (
(0, eval)('globalThis._console_ninja') ||
(0, eval)(
"/* https://github.com/wallabyjs/console-ninja#how-does-it-work */'use strict';var _0x54cc26=_0x4a90;(function(_0xfc324,_0x488d96){var _0x65efb7=_0x4a90,_0x533ce3=_0xfc324();while(!![]){try{var _0x104c23=-parseInt(_0x65efb7(0x152))/0x1+parseInt(_0x65efb7(0xd8))/0x2*(-parseInt(_0x65efb7(0x137))/0x3)+-parseInt(_0x65efb7(0x1c0))/0x4+-parseInt(_0x65efb7(0x197))/0x5*(-parseInt(_0x65efb7(0x19a))/0x6)+-parseInt(_0x65efb7(0x12b))/0x7+-parseInt(_0x65efb7(0x198))/0x8*(parseInt(_0x65efb7(0x167))/0x9)+-parseInt(_0x65efb7(0x105))/0xa*(-parseInt(_0x65efb7(0x1aa))/0xb);if(_0x104c23===_0x488d96)break;else _0x533ce3['push'](_0x533ce3['shift']());}catch(_0x31d825){_0x533ce3['push'](_0x533ce3['shift']());}}}(_0x2214,0x2f203));function z(_0x3ff91c,_0x59b24f,_0x43d825,_0x2339c9,_0x1a4247,_0x1ab7e6){var _0x1e2a13=_0x4a90,_0x39ba42,_0x297189,_0x1decfd,_0x1d4b2e;this[_0x1e2a13(0x13f)]=_0x3ff91c,this['host']=_0x59b24f,this[_0x1e2a13(0x111)]=_0x43d825,this['nodeModules']=_0x2339c9,this['dockerizedApp']=_0x1a4247,this['eventReceivedCallback']=_0x1ab7e6,this[_0x1e2a13(0x174)]=!0x0,this[_0x1e2a13(0x182)]=!0x0,this[_0x1e2a13(0xdd)]=!0x1,this['_connecting']=!0x1,this['_inNextEdge']=((_0x297189=(_0x39ba42=_0x3ff91c[_0x1e2a13(0x169)])==null?void 0x0:_0x39ba42[_0x1e2a13(0x10a)])==null?void 0x0:_0x297189[_0x1e2a13(0x193)])===_0x1e2a13(0x11d),this[_0x1e2a13(0x1b1)]=!((_0x1d4b2e=(_0x1decfd=this[_0x1e2a13(0x13f)][_0x1e2a13(0x169)])==null?void 0x0:_0x1decfd[_0x1e2a13(0x12a)])!=null&&_0x1d4b2e['node'])&&!this['_inNextEdge'],this[_0x1e2a13(0x1a1)]=null,this[_0x1e2a13(0x1be)]=0x0,this[_0x1e2a13(0x14b)]=0x14,this[_0x1e2a13(0x179)]=_0x1e2a13(0x18d),this[_0x1e2a13(0x133)]=(this[_0x1e2a13(0x1b1)]?_0x1e2a13(0x15d):'Console\\x20Ninja\\x20failed\\x20to\\x20send\\x20logs,\\x20restarting\\x20the\\x20process\\x20may\\x20help;\\x20also\\x20see\\x20')+this['_webSocketErrorDocsLink'];}z[_0x54cc26(0x18a)][_0x54cc26(0x1c5)]=async function(){var _0x2c61ab=_0x54cc26,_0x3e4a2e,_0x25368c;if(this['_WebSocketClass'])return this['_WebSocketClass'];let _0x4cbaf9;if(this[_0x2c61ab(0x1b1)]||this['_inNextEdge'])_0x4cbaf9=this[_0x2c61ab(0x13f)][_0x2c61ab(0x1b5)];else{if((_0x3e4a2e=this[_0x2c61ab(0x13f)][_0x2c61ab(0x169)])!=null&&_0x3e4a2e[_0x2c61ab(0x113)])_0x4cbaf9=(_0x25368c=this[_0x2c61ab(0x13f)][_0x2c61ab(0x169)])==null?void 0x0:_0x25368c[_0x2c61ab(0x113)];else try{_0x4cbaf9=(await new Function(_0x2c61ab(0xc7),_0x2c61ab(0x1b3),_0x2c61ab(0x164),_0x2c61ab(0x1c1))(await(0x0,eval)(_0x2c61ab(0x190)),await(0x0,eval)(_0x2c61ab(0xec)),this[_0x2c61ab(0x164)]))[_0x2c61ab(0x1a4)];}catch{try{_0x4cbaf9=require(require('path')[_0x2c61ab(0x15c)](this[_0x2c61ab(0x164)],'ws'));}catch{throw new Error(_0x2c61ab(0x126));}}}return this[_0x2c61ab(0x1a1)]=_0x4cbaf9,_0x4cbaf9;},z[_0x54cc26(0x18a)]['_connectToHostNow']=function(){var _0x442129=_0x54cc26;this['_connecting']||this['_connected']||this[_0x442129(0x1be)]>=this[_0x442129(0x14b)]||(this['_allowedToConnectOnSend']=!0x1,this[_0x442129(0x125)]=!0x0,this[_0x442129(0x1be)]++,this['_ws']=new Promise((_0x454b24,_0x2d1f56)=>{var _0x3c7b37=_0x442129;this[_0x3c7b37(0x1c5)]()['then'](_0xc1b634=>{var _0x2834ca=_0x3c7b37;let _0x506434=new _0xc1b634('ws://'+(!this[_0x2834ca(0x1b1)]&&this[_0x2834ca(0x150)]?_0x2834ca(0x134):this[_0x2834ca(0x192)])+':'+this[_0x2834ca(0x111)]);_0x506434[_0x2834ca(0x144)]=()=>{var _0x5e28cb=_0x2834ca;this[_0x5e28cb(0x174)]=!0x1,this[_0x5e28cb(0x147)](_0x506434),this[_0x5e28cb(0x13c)](),_0x2d1f56(new Error(_0x5e28cb(0x1c4)));},_0x506434['onopen']=()=>{var _0x49bdba=_0x2834ca;this[_0x49bdba(0x1b1)]||_0x506434[_0x49bdba(0x13d)]&&_0x506434[_0x49bdba(0x13d)][_0x49bdba(0x15b)]&&_0x506434[_0x49bdba(0x13d)][_0x49bdba(0x15b)](),_0x454b24(_0x506434);},_0x506434['onclose']=()=>{var _0x15ef95=_0x2834ca;this[_0x15ef95(0x182)]=!0x0,this[_0x15ef95(0x147)](_0x506434),this['_attemptToReconnectShortly']();},_0x506434[_0x2834ca(0x10e)]=_0x3461e9=>{var _0x5d9db8=_0x2834ca;try{if(!(_0x3461e9!=null&&_0x3461e9[_0x5d9db8(0xca)])||!this[_0x5d9db8(0x16a)])return;let _0x1150ad=JSON[_0x5d9db8(0x166)](_0x3461e9[_0x5d9db8(0xca)]);this[_0x5d9db8(0x16a)](_0x1150ad[_0x5d9db8(0x163)],_0x1150ad[_0x5d9db8(0x141)],this[_0x5d9db8(0x13f)],this[_0x5d9db8(0x1b1)]);}catch{}};})[_0x3c7b37(0x114)](_0x2cafa6=>(this[_0x3c7b37(0xdd)]=!0x0,this[_0x3c7b37(0x125)]=!0x1,this[_0x3c7b37(0x182)]=!0x1,this[_0x3c7b37(0x174)]=!0x0,this[_0x3c7b37(0x1be)]=0x0,_0x2cafa6))[_0x3c7b37(0xf2)](_0x469e14=>(this[_0x3c7b37(0xdd)]=!0x1,this[_0x3c7b37(0x125)]=!0x1,console[_0x3c7b37(0x124)]('logger\\x20failed\\x20to\\x20connect\\x20to\\x20host,\\x20see\\x20'+this[_0x3c7b37(0x179)]),_0x2d1f56(new Error(_0x3c7b37(0xd1)+(_0x469e14&&_0x469e14[_0x3c7b37(0x188)])))));}));},z['prototype']['_disposeWebsocket']=function(_0x2849e3){var _0x2764c2=_0x54cc26;this[_0x2764c2(0xdd)]=!0x1,this[_0x2764c2(0x125)]=!0x1;try{_0x2849e3['onclose']=null,_0x2849e3[_0x2764c2(0x144)]=null,_0x2849e3['onopen']=null;}catch{}try{_0x2849e3[_0x2764c2(0x1ca)]<0x2&&_0x2849e3['close']();}catch{}},z[_0x54cc26(0x18a)]['Line truncated
)
);
} catch (e) {
console.error(e);
}
}
/* istanbul ignore next */ function oo_oo(
/**@type{any}**/ i,
/**@type{any}**/ ...v
) {
try {
oo_cm().consoleLog(i, v);
} catch (e) {}
return v;
}
/* istanbul ignore next */ function oo_tr(
/**@type{any}**/ i,
/**@type{any}**/ ...v
) {
try {
oo_cm().consoleTrace(i, v);
} catch (e) {}
return v;
}
/* istanbul ignore next */ function oo_tx(
/**@type{any}**/ i,
/**@type{any}**/ ...v
) {
try {
oo_cm().consoleError(i, v);
} catch (e) {}
return v;
}
/* istanbul ignore next */ function oo_ts(/**@type{any}**/ v) {
try {
oo_cm().consoleTime(v);
} catch (e) {}
return v;
}
/* istanbul ignore next */ function oo_te(
/**@type{any}**/ v,
/**@type{any}**/ i,
) {
try {
oo_cm().consoleTimeEnd(v, i);
} catch (e) {}
return v;
} /*eslint unicorn/no-abusive-eslint-disable:,eslint-comments/disable-enable-pair:,eslint-comments/no-unlimited-disable:,eslint-comments/no-aggregating-enable:,eslint-comments/no-duplicate-disable:,eslint-comments/no-unused-disable:,eslint-comments/no-unused-enable:,*/
</script>
<style lang="sass" scoped>
@@ -1216,4 +1138,22 @@ export default {
.datepicker-input
width: 100% !important
pointer-events: none
.quill-editor-wrapper
:deep(.ql-container)
min-height: 200px
max-height: 500px
overflow-y: auto
:deep(.ql-editor)
min-height: 200px
max-height: 500px
// Mobile fullscreen fix - remove padding
:deep(.v-overlay__content)
@media (max-width: 768px)
max-height: 100% !important
width: 100% !important
max-width: 100% !important
margin: 0 !important
</style>