feat(search, header) reworked header and search

This commit is contained in:
Matej Glasnák committed 2025-11-19 03:43:21 +01:00
1 parent e0d6ae57b3
commit 4f8c8499c2
242 files changed
+21094 -2061

No files matched your search

+105 -31
View File
@@ -15,9 +15,9 @@
<div class="d-flex justify-space-between align-center modal-header">
<h1>{{ subtask?.id ? 'Upraviť sub task' : 'Vytvoriť sub task' }}</h1>
<v-icon
@click.stop="closeModal()"
icon="mdi-close"
size="large"
@click.stop="closeModal()"
></v-icon>
</div>
@@ -26,16 +26,16 @@
v-model="subtask.project_code"
label="Kód projektu"
:value="subtask.project_code"
@focus="onInputFocus"
class="modal-input"
variant="solo"
disabled
@focus="onInputFocus"
></v-text-field>
<v-autocomplete
v-model="subtask.master_task_id"
:custom-filter="customFilter"
:match-any="true"
v-model="subtask.master_task_id"
label="Master task"
:class="{ error: v$.subtask.master_task_id.$errors.length }"
:items="enrichedMastertasks"
@@ -49,22 +49,21 @@
<v-text-field
v-model="subtask.title"
@focus="onInputFocus"
class="modal-input"
label="Názov subtasku"
variant="solo"
@focus="onInputFocus"
></v-text-field>
<div class="splitted-inputs">
<!-- TODO: Bialko validacie -->
<div
@click="openDatepicker('datepicker-01')"
class="datepicker-wrapper"
@click="openDatepicker('datepicker-01')"
>
<Datepicker
v-model="subtask.deadline"
@open="onDateOpen"
ref="datepicker-01"
v-model="subtask.deadline"
:auto-apply="true"
:min-date="new Date()"
class="modal-input left datepicker-input"
@@ -75,23 +74,24 @@
placeholder="Deadline"
:class="{ error: v$.subtask.deadline.$errors?.length }"
:validations="v$.subtask.deadline"
@open="onDateOpen"
/>
</div>
<v-text-field
v-model="subtask._deadline_time"
class="modal-input right"
variant="solo"
v-model="subtask._deadline_time"
label="Čas"
append-inner-icon="mdi-clock-outline"
type="time"
@focus="onInputFocus"
:class="{ error: v$.subtask._deadline_time.$errors.length }"
:hint="
v$.subtask._deadline_time.$errors
? errorUtils.parseErrors(v$.subtask._deadline_time.$errors)
: null
"
@focus="onInputFocus"
/>
</div>
@@ -136,9 +136,9 @@
</svg>
<v-autocomplete
v-model="subtask.employee_id"
:custom-filter="customFilter"
:match-any="true"
v-model="subtask.employee_id"
label="Priradený"
:items="enrichedEmployees"
item-title="_fullName"
@@ -179,9 +179,9 @@
:class="{ 'hide-arrow': employee?.id }"
>
<v-autocomplete
v-model="employee.id"
:custom-filter="customFilter"
:match-any="true"
v-model="employee.id"
label="Priradený"
:items="enrichedEmployees"
item-title="_fullName"
@@ -238,18 +238,18 @@
<A-timeblock
v-for="(timeblock, index) in editableTimeblocks"
:key="index"
@updateTimeblock="(val) => updateTimeblock(val, index)"
@removeTimeblock="removeTimeblock(index)"
:ref="`timetable-${index}`"
:timeblock="timeblock"
:deletable="index > 0"
:editable="true"
:ref="`timetable-${index}`"
:prevent-input-focus="preventInputFocus"
:on-input-focus="onInputFocus"
:on-date-open="onDateOpen"
:index="index"
@updateTimeblock="(val) => updateTimeblock(val, index)"
@removeTimeblock="removeTimeblock(index)"
/>
<div class="end-button w-100" v-if="!subtask.id">
<div v-if="!subtask.id" class="end-button w-100">
<button @click="addTimeblock">Pridať časový blok</button>
</div>
</div>
@@ -268,15 +268,15 @@
<Z-files-upload
class="mt-15 files"
:files="subtask.files"
@files-uploaded="filesUploaded"
:is-saving="isSaving"
@files-uploaded="filesUploaded"
/>
</v-card-actions>
<v-btn class="button primary" v-if="!isSaving" @click="save()">{{
<v-btn v-if="!isSaving" class="button primary" @click="save()">{{
subtask.id ? 'UPRAVIŤ' : 'VYTVORIŤ'
}}</v-btn>
<v-btn class="button primary disabled" v-else disabled>{{
<v-btn v-else class="button primary disabled" disabled>{{
$t('Ukladám...')
}}</v-btn>
</v-card>
@@ -289,10 +289,10 @@
</div>
<v-icon
@click.stop="closeModal()"
icon="mdi-close"
size="large"
class="pb-5"
@click.stop="closeModal()"
></v-icon>
</div>
<div
@@ -325,14 +325,14 @@
<div class="d-flex justify-start align-center mt-8">
<v-btn
class="done-btn"
v-if="!subtask.is_finished"
class="done-btn"
@click.stop="showCompleteTaskModal()"
>Dokončiť</v-btn
>
<v-btn
class="button secondary"
v-else
class="button secondary"
@click.stop="showCompleteTaskModal()"
>Znovu otvoriť</v-btn
>
@@ -351,12 +351,11 @@
import Datepicker from '@vuepic/vue-datepicker';
import ZFilesUpload from '@/plugins/tm@_components/z-files-upload.vue';
import useVuelidate from '@vuelidate/core';
import { required, requiredIf, optional } from '@vuelidate/validators';
import { required } from '@vuelidate/validators';
import errorUtils from '@/plugins/lib@auth/_utils/error.utils';
import { QuillEditor } from '@vueup/vue-quill';
import VuetifyFixFocusMixin from '@/plugins/tm@modal/_mixins/vuetify-fix-focus';
import SelectsMixin from '../master-task/_mixins/selects.mixin';
import * as FileSaver from 'file-saver';
import tmUtils from '@/plugins/tm@_utils/tm.utils';
import moment from 'moment';
import '@vueup/vue-quill/dist/vue-quill.snow.css';
@@ -368,9 +367,6 @@ import { mapGetters } from 'vuex';
import modalMixin from '@/plugins/tm@modal/_mixins/modal.mixin';
export default {
emits: ['close', 'refresh'],
mixins: [VuetifyFixFocusMixin, SelectsMixin, AutocompleteMixin, modalMixin],
components: {
ZTaskReadonlyInfo,
ATimeblock,
@@ -379,6 +375,8 @@ export default {
// ATaskTimeblocks,
QuillEditor,
},
mixins: [VuetifyFixFocusMixin, SelectsMixin, AutocompleteMixin, modalMixin],
emits: ['close', 'refresh'],
data() {
return {
@@ -637,7 +635,13 @@ export default {
throw new Error('subtaskData is null or undefined');
}
} catch (error) {
console.error('Error parsing subtaskData:', error);
/* eslint-disable */ console.error(
...oo_tx(
`3261980582_640_12_640_62_11`,
'Error parsing subtaskData:',
error,
),
);
this.subtask = {
master_task: mastertask,
employees: [{}],
@@ -668,7 +672,13 @@ export default {
this.$toast.error(this.$parseError(error));
if (process.env.NODE_ENV === 'development')
console.log('[z-task-modal.vue] Error: ', error);
/* eslint-disable */ console.log(
...oo_oo(
`3261980582_671_10_671_58_4`,
'[z-task-modal.vue] Error: ',
error,
),
);
}
},
@@ -785,7 +795,13 @@ export default {
this.$toast.error(this.$parseError(error));
if (process.env.NODE_ENV === 'development')
console.log('[z-task-modal.vue] Error: ', error);
/* eslint-disable */ console.log(
...oo_oo(
`3261980582_788_10_788_58_4`,
'[z-task-modal.vue] Error: ',
error,
),
);
} finally {
this.isSaving = false;
}
@@ -818,7 +834,9 @@ export default {
_mergeDeadlineTimeDate() {
const date = new Date(this.subtask.deadline);
console.log('z-task-modal', this.subtask);
/* eslint-disable */ console.log(
...oo_oo(`3261980582_821_6_821_47_4`, 'z-task-modal', this.subtask),
);
const timeParts = this.subtask._deadline_time.split(':');
date.setHours(parseInt(timeParts[0]));
@@ -958,7 +976,9 @@ export default {
...val,
employees: employees && employees.length > 0 ? employees : [{}],
};
console.log('subtaskData', subtaskData);
/* eslint-disable */ console.log(
...oo_oo(`3261980582_961_10_961_49_4`, 'subtaskData', subtaskData),
);
localStorage.setItem('subtaskData', JSON.stringify(subtaskData));
}
},
@@ -966,6 +986,60 @@ 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>