mirror of
https://bitbucket.org/studiotem/jandl-taskmanager-app.git
synced 2026-10-21 14:29:34 +00:00
chore(build): update JavaScript and CSS files, remove obsolete files, and add new assets for improved performance
This commit is contained in:
1 parent
205b3a7e42
commit
5f4ce72dcb
22 files changed
+838
-127
No files matched your search
@@ -37,7 +37,7 @@
|
|||||||
justify-content: space-between
|
justify-content: space-between
|
||||||
|
|
||||||
.left
|
.left
|
||||||
width: 70% !important
|
width: calc(75% - 15px) !important
|
||||||
|
|
||||||
.right
|
.right
|
||||||
width: 25% !important
|
width: calc(25% - 15px) !important
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
<template>
|
||||||
|
<v-btn
|
||||||
|
icon
|
||||||
|
size="small"
|
||||||
|
variant="text"
|
||||||
|
@click="handleClose"
|
||||||
|
class="close-button"
|
||||||
|
>
|
||||||
|
<v-icon icon="mdi-close" size="large"></v-icon>
|
||||||
|
<v-tooltip activator="parent" location="bottom">
|
||||||
|
Close
|
||||||
|
</v-tooltip>
|
||||||
|
</v-btn>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: 'ACloseButton',
|
||||||
|
emits: ['close'],
|
||||||
|
|
||||||
|
methods: {
|
||||||
|
handleClose() {
|
||||||
|
this.$emit('close')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="sass">
|
||||||
|
.close-button
|
||||||
|
opacity: 0.7
|
||||||
|
transition: opacity 0.2s ease
|
||||||
|
|
||||||
|
&:hover
|
||||||
|
opacity: 1
|
||||||
|
</style>
|
||||||
|
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
<template>
|
||||||
|
<v-btn
|
||||||
|
icon
|
||||||
|
size="small"
|
||||||
|
variant="text"
|
||||||
|
@click="handleReset"
|
||||||
|
class="reset-size-button"
|
||||||
|
>
|
||||||
|
<v-icon icon="mdi-arrow-expand-all" size="small"></v-icon>
|
||||||
|
<v-tooltip activator="parent" location="bottom">
|
||||||
|
Reset modal size
|
||||||
|
</v-tooltip>
|
||||||
|
</v-btn>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: 'AResetSizeButton',
|
||||||
|
emits: ['reset'],
|
||||||
|
|
||||||
|
methods: {
|
||||||
|
handleReset() {
|
||||||
|
this.$emit('reset')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="sass">
|
||||||
|
.reset-size-button
|
||||||
|
margin-right: 8px
|
||||||
|
opacity: 0.7
|
||||||
|
transition: opacity 0.2s ease
|
||||||
|
|
||||||
|
&:hover
|
||||||
|
opacity: 1
|
||||||
|
|
||||||
|
@media (max-width: 768px)
|
||||||
|
display: none !important
|
||||||
|
</style>
|
||||||
|
|
||||||
@@ -0,0 +1,166 @@
|
|||||||
|
<template>
|
||||||
|
<div
|
||||||
|
class="modal-resize-handle"
|
||||||
|
@mousedown="startResize"
|
||||||
|
@touchstart="startResize"
|
||||||
|
>
|
||||||
|
<v-icon icon="mdi-resize-bottom-right" size="small"></v-icon>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: 'AResizeHandle',
|
||||||
|
emits: ['resize', 'resize-end'],
|
||||||
|
|
||||||
|
props: {
|
||||||
|
currentWidth: {
|
||||||
|
type: [String, Number],
|
||||||
|
default: '100%',
|
||||||
|
},
|
||||||
|
currentHeight: {
|
||||||
|
type: [String, Number],
|
||||||
|
default: '100%',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
isResizing: false,
|
||||||
|
startX: 0,
|
||||||
|
startY: 0,
|
||||||
|
startWidth: 0,
|
||||||
|
startHeight: 0,
|
||||||
|
};
|
||||||
|
},
|
||||||
|
|
||||||
|
methods: {
|
||||||
|
startResize(event) {
|
||||||
|
// Prevent default to avoid text selection during drag
|
||||||
|
event.preventDefault();
|
||||||
|
|
||||||
|
this.isResizing = true;
|
||||||
|
|
||||||
|
// Store initial position and size
|
||||||
|
if (event.type === 'touchstart') {
|
||||||
|
this.startX = event.touches[0].clientX;
|
||||||
|
this.startY = event.touches[0].clientY;
|
||||||
|
} else {
|
||||||
|
this.startX = event.clientX;
|
||||||
|
this.startY = event.clientY;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Parse current dimensions to pixels
|
||||||
|
this.startWidth = this.parseToPixels(this.currentWidth, 'width');
|
||||||
|
this.startHeight = this.parseToPixels(this.currentHeight, 'height');
|
||||||
|
|
||||||
|
// Add event listeners for move and end
|
||||||
|
document.addEventListener('mousemove', this.handleResize);
|
||||||
|
document.addEventListener('mouseup', this.stopResize);
|
||||||
|
document.addEventListener('touchmove', this.handleResize);
|
||||||
|
document.addEventListener('touchend', this.stopResize);
|
||||||
|
|
||||||
|
// Add cursor style to body
|
||||||
|
document.body.style.cursor = 'nwse-resize';
|
||||||
|
},
|
||||||
|
|
||||||
|
handleResize(event) {
|
||||||
|
if (!this.isResizing) return;
|
||||||
|
|
||||||
|
let clientX, clientY;
|
||||||
|
if (event.type === 'touchmove') {
|
||||||
|
clientX = event.touches[0].clientX;
|
||||||
|
clientY = event.touches[0].clientY;
|
||||||
|
} else {
|
||||||
|
clientX = event.clientX;
|
||||||
|
clientY = event.clientY;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Calculate the difference
|
||||||
|
const deltaX = clientX - this.startX;
|
||||||
|
const deltaY = clientY - this.startY;
|
||||||
|
|
||||||
|
// Calculate new dimensions
|
||||||
|
const newWidth = this.startWidth + deltaX;
|
||||||
|
const newHeight = this.startHeight + deltaY;
|
||||||
|
|
||||||
|
// Emit resize event with new dimensions
|
||||||
|
this.$emit('resize', { width: newWidth, height: newHeight });
|
||||||
|
},
|
||||||
|
|
||||||
|
stopResize() {
|
||||||
|
if (!this.isResizing) return;
|
||||||
|
|
||||||
|
this.isResizing = false;
|
||||||
|
|
||||||
|
// Remove event listeners
|
||||||
|
document.removeEventListener('mousemove', this.handleResize);
|
||||||
|
document.removeEventListener('mouseup', this.stopResize);
|
||||||
|
document.removeEventListener('touchmove', this.handleResize);
|
||||||
|
document.removeEventListener('touchend', this.stopResize);
|
||||||
|
|
||||||
|
// Reset cursor style
|
||||||
|
document.body.style.cursor = '';
|
||||||
|
|
||||||
|
// Emit final resize event
|
||||||
|
this.$emit('resize-end');
|
||||||
|
},
|
||||||
|
|
||||||
|
parseToPixels(value, type) {
|
||||||
|
if (typeof value === 'number') {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Remove 'px' suffix if present
|
||||||
|
const numericValue = parseFloat(value);
|
||||||
|
|
||||||
|
// If it's a percentage, calculate based on viewport
|
||||||
|
if (typeof value === 'string' && value.includes('%')) {
|
||||||
|
const percent = numericValue;
|
||||||
|
return type === 'height'
|
||||||
|
? (window.innerHeight * percent) / 100
|
||||||
|
: (window.innerWidth * percent) / 100;
|
||||||
|
}
|
||||||
|
|
||||||
|
return numericValue || 600; // Fallback to 600px
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
beforeUnmount() {
|
||||||
|
// Clean up event listeners if component is destroyed during resize
|
||||||
|
if (this.isResizing) {
|
||||||
|
this.stopResize();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="sass">
|
||||||
|
.modal-resize-handle
|
||||||
|
position: absolute
|
||||||
|
bottom: 0
|
||||||
|
right: 0
|
||||||
|
width: 32px
|
||||||
|
height: 32px
|
||||||
|
cursor: nwse-resize
|
||||||
|
display: flex
|
||||||
|
align-items: center
|
||||||
|
justify-content: center
|
||||||
|
z-index: 1000
|
||||||
|
background: rgba(0, 0, 0, 0.05)
|
||||||
|
border-radius: 4px 0 0 0
|
||||||
|
transition: background 0.2s ease
|
||||||
|
|
||||||
|
&:hover
|
||||||
|
background: rgba(0, 0, 0, 0.1)
|
||||||
|
|
||||||
|
.v-icon
|
||||||
|
opacity: 0.5
|
||||||
|
transition: opacity 0.2s ease
|
||||||
|
|
||||||
|
&:hover .v-icon
|
||||||
|
opacity: 0.8
|
||||||
|
|
||||||
|
@media (max-width: 768px)
|
||||||
|
display: none !important
|
||||||
|
</style>
|
||||||
@@ -1,12 +1,107 @@
|
|||||||
|
import modalResizeUtils from '@/plugins/tm@modal/_utils/modal-resize.utils'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
modalWidth: '100%',
|
||||||
|
modalHeight: '100%',
|
||||||
|
modalName: '' // Should be set by component
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
computed: {
|
||||||
|
modalWidthPx() {
|
||||||
|
return this.modalWidth
|
||||||
|
},
|
||||||
|
modalHeightPx() {
|
||||||
|
return this.modalHeight
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
mounted() {
|
mounted() {
|
||||||
window.addEventListener('keydown', this.handleKeyDown)
|
window.addEventListener('keydown', this.handleKeyDown)
|
||||||
|
window.addEventListener('resize', this.handleWindowResize)
|
||||||
|
this.initModalSize()
|
||||||
|
},
|
||||||
|
|
||||||
|
beforeUnmount() {
|
||||||
|
window.removeEventListener('keydown', this.handleKeyDown)
|
||||||
|
window.removeEventListener('resize', this.handleWindowResize)
|
||||||
},
|
},
|
||||||
|
|
||||||
methods: {
|
methods: {
|
||||||
handleKeyDown(event) {
|
handleKeyDown(event) {
|
||||||
// if (event.keyCode === 27) this.closeModal()
|
// if (event.keyCode === 27) this.closeModal()
|
||||||
if (event.keyCode === 27) this.visible = false
|
if (event.keyCode === 27) this.visible = false
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initialize modal size from localStorage or defaults
|
||||||
|
*/
|
||||||
|
initModalSize() {
|
||||||
|
if (!this.modalName) {
|
||||||
|
console.warn('Modal name not set for resize functionality')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
const size = modalResizeUtils.getModalSize(this.modalName)
|
||||||
|
this.modalWidth = typeof size.width === 'number' ? `${size.width}px` : size.width
|
||||||
|
this.modalHeight = typeof size.height === 'number' ? `${size.height}px` : size.height
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handle window resize - adjust modal if on mobile
|
||||||
|
*/
|
||||||
|
handleWindowResize() {
|
||||||
|
if (modalResizeUtils.isMobile()) {
|
||||||
|
this.modalWidth = '100%'
|
||||||
|
this.modalHeight = '100%'
|
||||||
|
} else {
|
||||||
|
// Reload stored or default size on desktop
|
||||||
|
this.initModalSize()
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handle modal resize from resize handle
|
||||||
|
*/
|
||||||
|
handleModalResize({ width, height }) {
|
||||||
|
if (modalResizeUtils.isMobile()) {
|
||||||
|
return // Don't resize on mobile
|
||||||
|
}
|
||||||
|
|
||||||
|
const constrained = modalResizeUtils.constrainSize(width, height)
|
||||||
|
this.modalWidth = `${constrained.width}px`
|
||||||
|
this.modalHeight = `${constrained.height}px`
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handle resize end - save to localStorage
|
||||||
|
*/
|
||||||
|
handleResizeEnd() {
|
||||||
|
if (!this.modalName || modalResizeUtils.isMobile()) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Parse current dimensions
|
||||||
|
const width = parseFloat(this.modalWidth)
|
||||||
|
const height = parseFloat(this.modalHeight)
|
||||||
|
|
||||||
|
if (!isNaN(width) && !isNaN(height)) {
|
||||||
|
modalResizeUtils.saveSize(this.modalName, width, height)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reset modal size to defaults
|
||||||
|
*/
|
||||||
|
resetModalSize() {
|
||||||
|
if (!this.modalName) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
modalResizeUtils.resetSize(this.modalName)
|
||||||
|
this.initModalSize()
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,162 @@
|
|||||||
|
interface ModalSize {
|
||||||
|
width: string | number
|
||||||
|
height: string | number
|
||||||
|
}
|
||||||
|
|
||||||
|
interface StoredModalSize {
|
||||||
|
width: number
|
||||||
|
height: number
|
||||||
|
timestamp: number
|
||||||
|
}
|
||||||
|
|
||||||
|
const MOBILE_BREAKPOINT = 768
|
||||||
|
const DEFAULT_DESKTOP_WIDTH_PERCENT = 80
|
||||||
|
const DEFAULT_DESKTOP_MAX_WIDTH = 1440
|
||||||
|
const DEFAULT_DESKTOP_HEIGHT_PERCENT = 90
|
||||||
|
|
||||||
|
export default {
|
||||||
|
/**
|
||||||
|
* Check if the current viewport is mobile
|
||||||
|
*/
|
||||||
|
isMobile(): boolean {
|
||||||
|
return window.innerWidth <= MOBILE_BREAKPOINT
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get default modal size based on viewport
|
||||||
|
*/
|
||||||
|
getDefaultSize(): ModalSize {
|
||||||
|
if (this.isMobile()) {
|
||||||
|
return {
|
||||||
|
width: '100%',
|
||||||
|
height: '100%'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const viewportWidth = window.innerWidth
|
||||||
|
const calculatedWidth = Math.min(
|
||||||
|
(viewportWidth * DEFAULT_DESKTOP_WIDTH_PERCENT) / 100,
|
||||||
|
DEFAULT_DESKTOP_MAX_WIDTH
|
||||||
|
)
|
||||||
|
const calculatedHeight = (window.innerHeight * DEFAULT_DESKTOP_HEIGHT_PERCENT) / 100
|
||||||
|
|
||||||
|
return {
|
||||||
|
width: calculatedWidth,
|
||||||
|
height: calculatedHeight
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get stored modal size from localStorage
|
||||||
|
*/
|
||||||
|
getStoredSize(modalName: string): ModalSize | null {
|
||||||
|
try {
|
||||||
|
const key = `modal-size-${modalName}`
|
||||||
|
const stored = localStorage.getItem(key)
|
||||||
|
|
||||||
|
if (!stored) {
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
|
const parsed: StoredModalSize = JSON.parse(stored)
|
||||||
|
|
||||||
|
// Return stored size if it exists and is valid
|
||||||
|
if (parsed && typeof parsed.width === 'number' && typeof parsed.height === 'number') {
|
||||||
|
return {
|
||||||
|
width: parsed.width,
|
||||||
|
height: parsed.height
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return null
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Error reading stored modal size:', error)
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Save modal size to localStorage
|
||||||
|
*/
|
||||||
|
saveSize(modalName: string, width: number, height: number): void {
|
||||||
|
try {
|
||||||
|
const key = `modal-size-${modalName}`
|
||||||
|
const data: StoredModalSize = {
|
||||||
|
width,
|
||||||
|
height,
|
||||||
|
timestamp: Date.now()
|
||||||
|
}
|
||||||
|
localStorage.setItem(key, JSON.stringify(data))
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Error saving modal size:', error)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reset modal size (clear from localStorage)
|
||||||
|
*/
|
||||||
|
resetSize(modalName: string): void {
|
||||||
|
try {
|
||||||
|
const key = `modal-size-${modalName}`
|
||||||
|
localStorage.removeItem(key)
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Error resetting modal size:', error)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get modal size (stored or default)
|
||||||
|
*/
|
||||||
|
getModalSize(modalName: string): ModalSize {
|
||||||
|
// On mobile, always return 100%
|
||||||
|
if (this.isMobile()) {
|
||||||
|
return {
|
||||||
|
width: '100%',
|
||||||
|
height: '100%'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check for stored size
|
||||||
|
const storedSize = this.getStoredSize(modalName)
|
||||||
|
if (storedSize) {
|
||||||
|
return storedSize
|
||||||
|
}
|
||||||
|
|
||||||
|
// Return default size
|
||||||
|
return this.getDefaultSize()
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Convert size to pixels if percentage, otherwise return as is
|
||||||
|
*/
|
||||||
|
normalizeSize(size: string | number): number {
|
||||||
|
if (typeof size === 'number') {
|
||||||
|
return size
|
||||||
|
}
|
||||||
|
|
||||||
|
// If it's a percentage, calculate pixel value
|
||||||
|
if (size.includes('%')) {
|
||||||
|
const percent = parseFloat(size)
|
||||||
|
return (window.innerWidth * percent) / 100
|
||||||
|
}
|
||||||
|
|
||||||
|
// If it's already pixels, parse it
|
||||||
|
return parseFloat(size)
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constrain size within reasonable bounds
|
||||||
|
*/
|
||||||
|
constrainSize(width: number, height: number): { width: number; height: number } {
|
||||||
|
const minWidth = 400
|
||||||
|
const minHeight = 300
|
||||||
|
const maxWidth = window.innerWidth
|
||||||
|
const maxHeight = window.innerHeight
|
||||||
|
|
||||||
|
return {
|
||||||
|
width: Math.max(minWidth, Math.min(width, maxWidth)),
|
||||||
|
height: Math.max(minHeight, Math.min(height, maxHeight))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@@ -1,10 +1,13 @@
|
|||||||
<template>
|
<template>
|
||||||
<v-dialog v-model="visible" max-width="750" max-height="90%" height="700px" persistent>
|
<v-dialog v-model="visible" :width="modalWidth" :height="modalHeight" persistent>
|
||||||
<W-loadable :content="blocker" class="h-100">
|
<W-loadable :content="blocker" class="h-100">
|
||||||
<v-card height="100%" class="d-flex flex-column">
|
<v-card height="100%" class="d-flex flex-column" style="position: relative">
|
||||||
<div class="d-flex justify-space-between align-center modal-header">
|
<div class="d-flex justify-space-between align-center modal-header">
|
||||||
<h1>{{ blocker.id ? "Upraviť" : "Vytvoriť" }} blocker</h1>
|
<h1>{{ blocker.id ? "Upraviť" : "Vytvoriť" }} blocker</h1>
|
||||||
<v-icon @click.stop="closeModal()" icon="mdi-close" size="large"></v-icon>
|
<div class="d-flex align-center">
|
||||||
|
<a-reset-size-button @reset="resetModalSize" />
|
||||||
|
<a-close-button @close="closeModal()" />
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<v-card-actions class="d-flex flex-column modal-content">
|
<v-card-actions class="d-flex flex-column modal-content">
|
||||||
@@ -30,6 +33,7 @@
|
|||||||
</v-card-actions>
|
</v-card-actions>
|
||||||
|
|
||||||
<v-btn class="button primary" @click="save()">{{ blocker.id ? "UPRAVIŤ" : "VYTVORIŤ" }}</v-btn>
|
<v-btn class="button primary" @click="save()">{{ blocker.id ? "UPRAVIŤ" : "VYTVORIŤ" }}</v-btn>
|
||||||
|
<a-resize-handle @resize="handleModalResize" @resize-end="handleResizeEnd" :current-width="modalWidthPx" :current-height="modalHeightPx" />
|
||||||
</v-card>
|
</v-card>
|
||||||
</W-loadable>
|
</W-loadable>
|
||||||
</v-dialog>
|
</v-dialog>
|
||||||
@@ -45,6 +49,9 @@ import { mapGetters } from "vuex"
|
|||||||
import moment from "moment"
|
import moment from "moment"
|
||||||
import AutocompleteMixin from '@/plugins/tm@_mixins/autocomplete.mixin'
|
import AutocompleteMixin from '@/plugins/tm@_mixins/autocomplete.mixin'
|
||||||
import modalMixin from '@/plugins/tm@modal/_mixins/modal.mixin'
|
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 {
|
export default {
|
||||||
mixins: [VuetifyFixFocusMixin, AutocompleteMixin, modalMixin],
|
mixins: [VuetifyFixFocusMixin, AutocompleteMixin, modalMixin],
|
||||||
@@ -54,6 +61,8 @@ export default {
|
|||||||
components: {
|
components: {
|
||||||
Datepicker,
|
Datepicker,
|
||||||
// ZAutocomplete
|
// ZAutocomplete
|
||||||
|
AResizeHandle,
|
||||||
|
AResetSizeButton, ACloseButton,
|
||||||
},
|
},
|
||||||
|
|
||||||
data() {
|
data() {
|
||||||
@@ -65,7 +74,8 @@ export default {
|
|||||||
datepicker: null,
|
datepicker: null,
|
||||||
starts_at_time: null,
|
starts_at_time: null,
|
||||||
ends_at_time: null,
|
ends_at_time: null,
|
||||||
employee: null
|
employee: null,
|
||||||
|
modalName: 'z-blocker-modal',
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
@@ -1,36 +1,44 @@
|
|||||||
<template>
|
<template>
|
||||||
<v-dialog v-model="visible" max-width="750" persistent>
|
<v-dialog v-model="visible" :width="modalWidth" :height="modalHeight" persistent>
|
||||||
<v-card>
|
<v-card style="position: relative">
|
||||||
<div class="d-flex justify-space-between align-center">
|
<div class="d-flex justify-space-between align-center">
|
||||||
<h1>Ste si istý, že chcete zmazať <b>{{ blocker.name }}</b>?</h1>
|
<h1>Ste si istý, že chcete zmazať <b>{{ blocker.name }}</b>?</h1>
|
||||||
|
|
||||||
<v-icon
|
<div class="d-flex align-center">
|
||||||
@click.stop="closeModal()"
|
<a-reset-size-button @reset="resetModalSize" />
|
||||||
icon="mdi-close"
|
<a-close-button @close="closeModal()" class="mb-15" />
|
||||||
size="large"
|
</div>
|
||||||
class="mb-15"
|
|
||||||
></v-icon>
|
|
||||||
</div>
|
</div>
|
||||||
<v-card-actions class="mt-10 d-flex justify-start align-center mobile-view">
|
<v-card-actions class="mt-10 d-flex justify-start align-center mobile-view">
|
||||||
<v-btn class="button primary half" variant="flat" @click="deleteBlocker()" :disabled="isDeleting">ÁNO</v-btn>
|
<v-btn class="button primary half" variant="flat" @click="deleteBlocker()" :disabled="isDeleting">ÁNO</v-btn>
|
||||||
<v-btn class="button primary half outline" @click.stop="closeModal()">ZRUŠIŤ</v-btn>
|
<v-btn class="button primary half outline" @click.stop="closeModal()">ZRUŠIŤ</v-btn>
|
||||||
</v-card-actions>
|
</v-card-actions>
|
||||||
|
<a-resize-handle @resize="handleModalResize" @resize-end="handleResizeEnd" :current-width="modalWidthPx" :current-height="modalHeightPx" />
|
||||||
</v-card>
|
</v-card>
|
||||||
</v-dialog>
|
</v-dialog>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import modalMixin from '@/plugins/tm@modal/_mixins/modal.mixin'
|
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 {
|
export default {
|
||||||
mixins: [ modalMixin ],
|
mixins: [ modalMixin ],
|
||||||
emits: ['on-blocker-deleted'],
|
emits: ['on-blocker-deleted'],
|
||||||
|
|
||||||
|
components: {
|
||||||
|
AResizeHandle,
|
||||||
|
AResetSizeButton, ACloseButton,
|
||||||
|
},
|
||||||
|
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
visible: false,
|
visible: false,
|
||||||
blocker: null,
|
blocker: null,
|
||||||
isDeleting: false
|
isDeleting: false,
|
||||||
|
modalName: 'z-delete-blocker-modal',
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
@@ -1,33 +1,42 @@
|
|||||||
<template>
|
<template>
|
||||||
<v-dialog v-model="visible" max-width="750" persistent>
|
<v-dialog v-model="visible" :width="modalWidth" :height="modalHeight" persistent>
|
||||||
<v-card>
|
<v-card style="position: relative">
|
||||||
<div class="d-flex justify-space-between align-center">
|
<div class="d-flex justify-space-between align-center">
|
||||||
<h1>Ste si istý, že chcete {{ mastertask.is_finished ? 'znovu otvoriť' : 'dokončiť' }} <b>{{ mastertask?.name }}</b>?</h1>
|
<h1>Ste si istý, že chcete {{ mastertask.is_finished ? 'znovu otvoriť' : 'dokončiť' }} <b>{{ mastertask?.name }}</b>?</h1>
|
||||||
<v-icon
|
<div class="d-flex align-center">
|
||||||
@click.stop="visible = false"
|
<a-reset-size-button @reset="resetModalSize" />
|
||||||
icon="mdi-close"
|
<a-close-button @close="() => visible = false" />
|
||||||
size="large"
|
</div>
|
||||||
></v-icon>
|
|
||||||
</div>
|
</div>
|
||||||
<v-card-actions class="mt-10 d-flex justify-start align-center mobile-view">
|
<v-card-actions class="mt-10 d-flex justify-start align-center mobile-view">
|
||||||
<v-btn class="button primary half" variant="flat" @click="complete()">ÁNO</v-btn>
|
<v-btn class="button primary half" variant="flat" @click="complete()">ÁNO</v-btn>
|
||||||
<v-btn class="button primary half outline" @click.stop="visible = false">ZRUŠIŤ</v-btn>
|
<v-btn class="button primary half outline" @click.stop="visible = false">ZRUŠIŤ</v-btn>
|
||||||
</v-card-actions>
|
</v-card-actions>
|
||||||
|
<a-resize-handle @resize="handleModalResize" @resize-end="handleResizeEnd" :current-width="modalWidthPx" :current-height="modalHeightPx" />
|
||||||
</v-card>
|
</v-card>
|
||||||
</v-dialog>
|
</v-dialog>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import modalMixin from '@/plugins/tm@modal/_mixins/modal.mixin'
|
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 {
|
export default {
|
||||||
mixins: [ modalMixin ],
|
mixins: [ modalMixin ],
|
||||||
emits: ['close', 'master-task-edited'],
|
emits: ['close', 'master-task-edited'],
|
||||||
|
|
||||||
|
components: {
|
||||||
|
AResizeHandle,
|
||||||
|
AResetSizeButton, ACloseButton,
|
||||||
|
},
|
||||||
|
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
visible: false,
|
visible: false,
|
||||||
mastertask: null
|
mastertask: null,
|
||||||
|
modalName: 'z-complete-master-task-modal',
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
@@ -1,36 +1,44 @@
|
|||||||
<template>
|
<template>
|
||||||
<v-dialog v-model="visible" max-width="750" persistent>
|
<v-dialog v-model="visible" :width="modalWidth" :height="modalHeight" persistent>
|
||||||
<v-card>
|
<v-card style="position: relative">
|
||||||
<div class="d-flex justify-space-between align-center">
|
<div class="d-flex justify-space-between align-center">
|
||||||
<h1>Ste si istý, že chcete zmazať <b>{{ mastertask.name }}</b>?</h1>
|
<h1>Ste si istý, že chcete zmazať <b>{{ mastertask.name }}</b>?</h1>
|
||||||
|
|
||||||
<v-icon
|
<div class="d-flex align-center">
|
||||||
@click.stop="closeModal()"
|
<a-reset-size-button @reset="resetModalSize" />
|
||||||
icon="mdi-close"
|
<a-close-button @close="closeModal()" class="mb-15" />
|
||||||
size="large"
|
</div>
|
||||||
class="mb-15"
|
|
||||||
></v-icon>
|
|
||||||
</div>
|
</div>
|
||||||
<v-card-actions class="mt-10 d-flex justify-start align-center mobile-view">
|
<v-card-actions class="mt-10 d-flex justify-start align-center mobile-view">
|
||||||
<v-btn class="button primary half" variant="flat" @click="deleteMasterTask()" :disabled="isDeleting">ÁNO</v-btn>
|
<v-btn class="button primary half" variant="flat" @click="deleteMasterTask()" :disabled="isDeleting">ÁNO</v-btn>
|
||||||
<v-btn class="button primary half outline" @click.stop="closeModal()">ZRUŠIŤ</v-btn>
|
<v-btn class="button primary half outline" @click.stop="closeModal()">ZRUŠIŤ</v-btn>
|
||||||
</v-card-actions>
|
</v-card-actions>
|
||||||
|
<a-resize-handle @resize="handleModalResize" @resize-end="handleResizeEnd" :current-width="modalWidthPx" :current-height="modalHeightPx" />
|
||||||
</v-card>
|
</v-card>
|
||||||
</v-dialog>
|
</v-dialog>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import modalMixin from '@/plugins/tm@modal/_mixins/modal.mixin'
|
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 {
|
export default {
|
||||||
mixins: [ modalMixin ],
|
mixins: [ modalMixin ],
|
||||||
emits: ['on-mastertask-deleted'],
|
emits: ['on-mastertask-deleted'],
|
||||||
|
|
||||||
|
components: {
|
||||||
|
AResizeHandle,
|
||||||
|
AResetSizeButton, ACloseButton,
|
||||||
|
},
|
||||||
|
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
visible: false,
|
visible: false,
|
||||||
mastertask: null,
|
mastertask: null,
|
||||||
isDeleting: false
|
isDeleting: false,
|
||||||
|
modalName: 'z-delete-master-task-modal',
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
@@ -1,9 +1,15 @@
|
|||||||
<template>
|
<template>
|
||||||
<v-dialog v-model="visible" max-width="500" persistent>
|
<v-dialog v-model="visible" :width="modalWidth" :height="modalHeight" persistent>
|
||||||
<v-card>
|
<v-card style="position: relative">
|
||||||
<h1 class="text-h5">
|
<div class="d-flex justify-space-between align-center">
|
||||||
Chcete túto osobu odstrániť z tímu?
|
<h1 class="text-h5">
|
||||||
</h1>
|
Chcete túto osobu odstrániť z tímu?
|
||||||
|
</h1>
|
||||||
|
<div class="d-flex align-center">
|
||||||
|
<a-reset-size-button @reset="resetModalSize" />
|
||||||
|
<a-close-button @close="closeModal()" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<v-card-text>{{ member.name + ' ' + member.surname }} bude odstránený/á z teamu.</v-card-text>
|
<v-card-text>{{ member.name + ' ' + member.surname }} bude odstránený/á z teamu.</v-card-text>
|
||||||
<v-card-actions>
|
<v-card-actions>
|
||||||
<v-btn
|
<v-btn
|
||||||
@@ -22,6 +28,7 @@
|
|||||||
Áno
|
Áno
|
||||||
</v-btn>
|
</v-btn>
|
||||||
</v-card-actions>
|
</v-card-actions>
|
||||||
|
<a-resize-handle @resize="handleModalResize" @resize-end="handleResizeEnd" :current-width="modalWidthPx" :current-height="modalHeightPx" />
|
||||||
</v-card>
|
</v-card>
|
||||||
</v-dialog>
|
</v-dialog>
|
||||||
</template>
|
</template>
|
||||||
@@ -29,14 +36,24 @@
|
|||||||
<script>
|
<script>
|
||||||
import tmUtils from '@/plugins/tm@_utils/tm.utils'
|
import tmUtils from '@/plugins/tm@_utils/tm.utils'
|
||||||
import modalMixin from '@/plugins/tm@modal/_mixins/modal.mixin'
|
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 {
|
export default {
|
||||||
mixins: [ modalMixin ],
|
mixins: [ modalMixin ],
|
||||||
|
|
||||||
|
components: {
|
||||||
|
AResizeHandle,
|
||||||
|
AResetSizeButton, ACloseButton,
|
||||||
|
},
|
||||||
|
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
visible: false,
|
visible: false,
|
||||||
member: null,
|
member: null,
|
||||||
team: null
|
team: null,
|
||||||
|
modalName: 'z-delete-team-member-modal',
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
@@ -1,9 +1,8 @@
|
|||||||
<template>
|
<template>
|
||||||
<v-dialog
|
<v-dialog
|
||||||
v-model="visible"
|
v-model="visible"
|
||||||
max-width="750"
|
:width="modalWidth"
|
||||||
max-height="90%"
|
:height="modalHeight"
|
||||||
height="700px"
|
|
||||||
persistent
|
persistent
|
||||||
>
|
>
|
||||||
<W-loadable :content="mastertask" class="h-100">
|
<W-loadable :content="mastertask" class="h-100">
|
||||||
@@ -11,6 +10,7 @@
|
|||||||
v-if="editMode"
|
v-if="editMode"
|
||||||
height="100%"
|
height="100%"
|
||||||
class="d-flex flex-column scrolling"
|
class="d-flex flex-column scrolling"
|
||||||
|
style="position: relative"
|
||||||
>
|
>
|
||||||
<div class="d-flex justify-space-between align-center modal-header">
|
<div class="d-flex justify-space-between align-center modal-header">
|
||||||
<h1>
|
<h1>
|
||||||
@@ -18,11 +18,10 @@
|
|||||||
mastertask?.id ? 'Upraviť master task' : 'Vytvoriť master task'
|
mastertask?.id ? 'Upraviť master task' : 'Vytvoriť master task'
|
||||||
}}
|
}}
|
||||||
</h1>
|
</h1>
|
||||||
<v-icon
|
<div class="d-flex align-center">
|
||||||
@click.stop="closeModal()"
|
<a-reset-size-button @reset="resetModalSize" />
|
||||||
icon="mdi-close"
|
<a-close-button @close="closeModal()" />
|
||||||
size="large"
|
</div>
|
||||||
></v-icon>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<v-card-actions class="d-flex flex-column modal-content">
|
<v-card-actions class="d-flex flex-column modal-content">
|
||||||
@@ -221,7 +220,7 @@
|
|||||||
</v-btn>
|
</v-btn>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
class="w-100 modal-input"
|
class="w-100 modal-input quill-editor-wrapper"
|
||||||
:class="{ error: v$.mastertask.description.$errors.length }"
|
:class="{ error: v$.mastertask.description.$errors.length }"
|
||||||
>
|
>
|
||||||
<QuillEditor
|
<QuillEditor
|
||||||
@@ -248,17 +247,26 @@
|
|||||||
<v-btn class="button primary disabled" v-else disabled>{{
|
<v-btn class="button primary disabled" v-else disabled>{{
|
||||||
$t('Ukladám...')
|
$t('Ukladám...')
|
||||||
}}</v-btn>
|
}}</v-btn>
|
||||||
|
<a-resize-handle
|
||||||
|
@resize="handleModalResize"
|
||||||
|
@resize-end="handleResizeEnd"
|
||||||
|
:current-width="modalWidthPx"
|
||||||
|
:current-height="modalHeightPx"
|
||||||
|
/>
|
||||||
</v-card>
|
</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 class="d-flex justify-space-between align-center">
|
||||||
<p>{{ mastertask.project_code }}</p>
|
<p>{{ mastertask.project_code }}</p>
|
||||||
<v-icon
|
<div class="d-flex align-center">
|
||||||
@click.stop="closeModal()"
|
<a-reset-size-button @reset="resetModalSize" />
|
||||||
icon="mdi-close"
|
<a-close-button @close="closeModal()" class="pb-5" />
|
||||||
size="large"
|
</div>
|
||||||
class="pb-5"
|
|
||||||
></v-icon>
|
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
class="d-flex justify-space-between align-center modal-header border-bottom pb-4"
|
class="d-flex justify-space-between align-center modal-header border-bottom pb-4"
|
||||||
@@ -306,6 +314,12 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</v-card-actions>
|
</v-card-actions>
|
||||||
|
<a-resize-handle
|
||||||
|
@resize="handleModalResize"
|
||||||
|
@resize-end="handleResizeEnd"
|
||||||
|
:current-width="modalWidthPx"
|
||||||
|
:current-height="modalHeightPx"
|
||||||
|
/>
|
||||||
</v-card>
|
</v-card>
|
||||||
</W-loadable>
|
</W-loadable>
|
||||||
</v-dialog>
|
</v-dialog>
|
||||||
@@ -331,6 +345,9 @@ import ATasksTable from './_components/a-tasks-table.vue';
|
|||||||
import AMastertaskDescription from './_components/a-mastertask-description.vue';
|
import AMastertaskDescription from './_components/a-mastertask-description.vue';
|
||||||
import { mapGetters } from 'vuex';
|
import { mapGetters } from 'vuex';
|
||||||
import AutocompleteMixin from '@/plugins/tm@_mixins/autocomplete.mixin';
|
import AutocompleteMixin from '@/plugins/tm@_mixins/autocomplete.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 {
|
export default {
|
||||||
// MIXINS
|
// MIXINS
|
||||||
@@ -348,6 +365,9 @@ export default {
|
|||||||
ZFilesUpload,
|
ZFilesUpload,
|
||||||
// ZAutocomplete,
|
// ZAutocomplete,
|
||||||
QuillEditor,
|
QuillEditor,
|
||||||
|
AResizeHandle,
|
||||||
|
AResetSizeButton,
|
||||||
|
ACloseButton,
|
||||||
},
|
},
|
||||||
|
|
||||||
data() {
|
data() {
|
||||||
@@ -362,6 +382,7 @@ export default {
|
|||||||
showAddEmployeeInput: false,
|
showAddEmployeeInput: false,
|
||||||
date: null,
|
date: null,
|
||||||
projectCodeSearch: null,
|
projectCodeSearch: null,
|
||||||
|
modalName: 'z-master-task-modal',
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -791,4 +812,22 @@ export default {
|
|||||||
width: 100% !important
|
width: 100% !important
|
||||||
height: 100%
|
height: 100%
|
||||||
pointer-events: none
|
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>
|
</style>
|
||||||
@@ -1,9 +1,12 @@
|
|||||||
<template>
|
<template>
|
||||||
<v-dialog v-model="visible" max-width="750" persistent>
|
<v-dialog v-model="visible" :width="modalWidth" :height="modalHeight" persistent>
|
||||||
<v-card>
|
<v-card style="position: relative">
|
||||||
<div class="d-flex justify-space-between align-center">
|
<div class="d-flex justify-space-between align-center">
|
||||||
<h1>Vytvoriť</h1>
|
<h1>Vytvoriť</h1>
|
||||||
<v-icon @click.stop="closeModal()" icon="mdi-close" size="large"></v-icon>
|
<div class="d-flex align-center">
|
||||||
|
<a-reset-size-button @reset="resetModalSize" />
|
||||||
|
<a-close-button @close="closeModal()" />
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<v-card-actions class="mt-10 d-flex justify-start align-center mobile-view">
|
<v-card-actions class="mt-10 d-flex justify-start align-center mobile-view">
|
||||||
@@ -14,22 +17,32 @@
|
|||||||
>BLOCKER</v-btn
|
>BLOCKER</v-btn
|
||||||
>
|
>
|
||||||
</v-card-actions>
|
</v-card-actions>
|
||||||
|
<a-resize-handle @resize="handleModalResize" @resize-end="handleResizeEnd" :current-width="modalWidthPx" :current-height="modalHeightPx" />
|
||||||
</v-card>
|
</v-card>
|
||||||
</v-dialog>
|
</v-dialog>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import modalMixin from '@/plugins/tm@modal/_mixins/modal.mixin'
|
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 {
|
export default {
|
||||||
emits: ['update', 'data'],
|
emits: ['update', 'data'],
|
||||||
props: ['data'],
|
props: ['data'],
|
||||||
mixins: [ modalMixin ],
|
mixins: [ modalMixin ],
|
||||||
|
|
||||||
|
components: {
|
||||||
|
AResizeHandle,
|
||||||
|
AResetSizeButton, ACloseButton,
|
||||||
|
},
|
||||||
|
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
visible: false,
|
visible: false,
|
||||||
localData: null,
|
localData: null,
|
||||||
|
modalName: 'z-show-menu-modal',
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<v-dialog v-model="visible" max-width="750" persistent>
|
<v-dialog v-model="visible" :width="modalWidth" :height="modalHeight" persistent>
|
||||||
<v-card>
|
<v-card style="position: relative">
|
||||||
<div class="d-flex justify-space-between align-center">
|
<div class="d-flex justify-space-between align-center">
|
||||||
<h1>
|
<h1>
|
||||||
Ste si istý, že chcete
|
Ste si istý, že chcete
|
||||||
@@ -9,11 +9,10 @@
|
|||||||
<b>{{ subtask?.master_task?.name || subtask.master_task }}</b
|
<b>{{ subtask?.master_task?.name || subtask.master_task }}</b
|
||||||
>?
|
>?
|
||||||
</h1>
|
</h1>
|
||||||
<v-icon
|
<div class="d-flex align-center">
|
||||||
@click.stop="closeModal()"
|
<a-reset-size-button @reset="resetModalSize" />
|
||||||
icon="mdi-close"
|
<a-close-button @close="closeModal()" />
|
||||||
size="large"
|
</div>
|
||||||
></v-icon>
|
|
||||||
</div>
|
</div>
|
||||||
<v-card-actions
|
<v-card-actions
|
||||||
class="mt-10 d-flex justify-start align-center mobile-view"
|
class="mt-10 d-flex justify-start align-center mobile-view"
|
||||||
@@ -25,6 +24,7 @@
|
|||||||
>ZRUŠIŤ</v-btn
|
>ZRUŠIŤ</v-btn
|
||||||
>
|
>
|
||||||
</v-card-actions>
|
</v-card-actions>
|
||||||
|
<a-resize-handle @resize="handleModalResize" @resize-end="handleResizeEnd" :current-width="modalWidthPx" :current-height="modalHeightPx" />
|
||||||
</v-card>
|
</v-card>
|
||||||
</v-dialog>
|
</v-dialog>
|
||||||
</template>
|
</template>
|
||||||
@@ -32,15 +32,24 @@
|
|||||||
<script>
|
<script>
|
||||||
import modalMixin from '@/plugins/tm@modal/_mixins/modal.mixin';
|
import modalMixin from '@/plugins/tm@modal/_mixins/modal.mixin';
|
||||||
import moment from 'moment';
|
import moment from 'moment';
|
||||||
|
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 {
|
export default {
|
||||||
mixins: [modalMixin],
|
mixins: [modalMixin],
|
||||||
emits: ['close', 'on-subtask-edited'],
|
emits: ['close', 'on-subtask-edited'],
|
||||||
|
|
||||||
|
components: {
|
||||||
|
AResizeHandle,
|
||||||
|
AResetSizeButton, ACloseButton,
|
||||||
|
},
|
||||||
|
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
visible: false,
|
visible: false,
|
||||||
subtask: null,
|
subtask: null,
|
||||||
|
modalName: 'z-complete-task-modal',
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
@@ -1,36 +1,45 @@
|
|||||||
<template>
|
<template>
|
||||||
<v-dialog v-model="visible" max-width="750" persistent>
|
<v-dialog v-model="visible" :width="modalWidth" :height="modalHeight" persistent>
|
||||||
<v-card>
|
<v-card style="position: relative">
|
||||||
<div class="d-flex justify-space-between align-center">
|
<div class="d-flex justify-space-between align-center">
|
||||||
<h1>Ste si istý, že chcete zmazať sub task z mastertasku <b>{{ subtask.project_code }}</b>?</h1>
|
<h1>Ste si istý, že chcete zmazať sub task z mastertasku <b>{{ subtask.project_code }}</b>?</h1>
|
||||||
|
|
||||||
<v-icon
|
<div class="d-flex align-center">
|
||||||
@click.stop="closeModal()"
|
<a-reset-size-button @reset="resetModalSize" />
|
||||||
icon="mdi-close"
|
<a-close-button @close="closeModal()" class="mb-15" />
|
||||||
size="large"
|
</div>
|
||||||
class="mb-15"
|
|
||||||
></v-icon>
|
|
||||||
</div>
|
</div>
|
||||||
<v-card-actions class="mt-10 d-flex justify-start align-center mobile-view">
|
<v-card-actions class="mt-10 d-flex justify-start align-center mobile-view">
|
||||||
<v-btn class="button primary half" variant="flat" @click="deleteTask()" :disabled="isDeleting">ÁNO</v-btn>
|
<v-btn class="button primary half" variant="flat" @click="deleteTask()" :disabled="isDeleting">ÁNO</v-btn>
|
||||||
<v-btn class="button primary half outline" @click.stop="closeModal()">ZRUŠIŤ</v-btn>
|
<v-btn class="button primary half outline" @click.stop="closeModal()">ZRUŠIŤ</v-btn>
|
||||||
</v-card-actions>
|
</v-card-actions>
|
||||||
|
<a-resize-handle @resize="handleModalResize" @resize-end="handleResizeEnd" :current-width="modalWidthPx" :current-height="modalHeightPx" />
|
||||||
</v-card>
|
</v-card>
|
||||||
</v-dialog>
|
</v-dialog>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import modalMixin from '@/plugins/tm@modal/_mixins/modal.mixin'
|
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 {
|
export default {
|
||||||
mixins: [ modalMixin ],
|
mixins: [ modalMixin ],
|
||||||
emits: ['on-subtask-deleted'],
|
emits: ['on-subtask-deleted'],
|
||||||
|
|
||||||
|
components: {
|
||||||
|
AResizeHandle,
|
||||||
|
AResetSizeButton,
|
||||||
|
ACloseButton,
|
||||||
|
},
|
||||||
|
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
visible: false,
|
visible: false,
|
||||||
subtask: null,
|
subtask: null,
|
||||||
isDeleting: false
|
isDeleting: false,
|
||||||
|
modalName: 'z-delete-task-modal',
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
@@ -1,14 +1,13 @@
|
|||||||
<template>
|
<template>
|
||||||
<v-dialog v-model="visible" max-width="500" persistent>
|
<v-dialog v-model="visible" :width="modalWidth" :height="modalHeight" persistent>
|
||||||
<v-card>
|
<v-card style="position: relative">
|
||||||
<div class="d-flex justify-space-between align-center">
|
<div class="d-flex justify-space-between align-center">
|
||||||
<h4 class="mt-3">Vyberte časový úsek, ktorý chcete odstrániť</h4>
|
<h4 class="mt-3">Vyberte časový úsek, ktorý chcete odstrániť</h4>
|
||||||
|
|
||||||
<v-icon
|
<div class="d-flex align-center">
|
||||||
@click.stop="closeModal()"
|
<a-reset-size-button @reset="resetModalSize" />
|
||||||
icon="mdi-close"
|
<a-close-button @close="closeModal()" />
|
||||||
size="large"
|
</div>
|
||||||
></v-icon>
|
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
v-for="(timeblock, index) in subtask.timeblocks"
|
v-for="(timeblock, index) in subtask.timeblocks"
|
||||||
@@ -33,6 +32,7 @@
|
|||||||
size="medium"
|
size="medium"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
<a-resize-handle @resize="handleModalResize" @resize-end="handleResizeEnd" :current-width="modalWidthPx" :current-height="modalHeightPx" />
|
||||||
</v-card>
|
</v-card>
|
||||||
</v-dialog>
|
</v-dialog>
|
||||||
</template>
|
</template>
|
||||||
@@ -41,17 +41,26 @@
|
|||||||
import modalMixin from '@/plugins/tm@modal/_mixins/modal.mixin';
|
import modalMixin from '@/plugins/tm@modal/_mixins/modal.mixin';
|
||||||
import tmUtils from '@/plugins/tm@_utils/tm.utils';
|
import tmUtils from '@/plugins/tm@_utils/tm.utils';
|
||||||
import moment from 'moment';
|
import moment from 'moment';
|
||||||
|
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 {
|
export default {
|
||||||
mixins: [modalMixin],
|
mixins: [modalMixin],
|
||||||
emits: ['on-subtask-edited'],
|
emits: ['on-subtask-edited'],
|
||||||
|
|
||||||
|
components: {
|
||||||
|
AResizeHandle,
|
||||||
|
AResetSizeButton, ACloseButton,
|
||||||
|
},
|
||||||
|
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
visible: false,
|
visible: false,
|
||||||
subtask: null,
|
subtask: null,
|
||||||
isDeleting: false,
|
isDeleting: false,
|
||||||
tmUtils,
|
tmUtils,
|
||||||
|
modalName: 'z-delete-timeblock-modal',
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
@@ -1,14 +1,13 @@
|
|||||||
<template>
|
<template>
|
||||||
<v-dialog max-width="750" v-model="visible" persistent>
|
<v-dialog :width="modalWidth" :height="modalHeight" v-model="visible" persistent>
|
||||||
<v-card>
|
<v-card style="position: relative">
|
||||||
<div class="d-flex justify-space-between align-center">
|
<div class="d-flex justify-space-between align-center">
|
||||||
<h1>Pridať odpracovaný čas</h1>
|
<h1>Pridať odpracovaný čas</h1>
|
||||||
|
|
||||||
<v-icon
|
<div class="d-flex align-center">
|
||||||
@click.stop="closeModal()"
|
<a-reset-size-button @reset="resetModalSize" />
|
||||||
icon="mdi-close"
|
<a-close-button @close="closeModal()" />
|
||||||
size="large"
|
</div>
|
||||||
></v-icon>
|
|
||||||
</div>
|
</div>
|
||||||
<v-card-actions class="mt-10 d-flex justify-start align-center">
|
<v-card-actions class="mt-10 d-flex justify-start align-center">
|
||||||
<v-text-field
|
<v-text-field
|
||||||
@@ -27,6 +26,7 @@
|
|||||||
/>
|
/>
|
||||||
</v-card-actions>
|
</v-card-actions>
|
||||||
<v-btn @click="submit()" class="button primary mt-5">Potvrdiť</v-btn>
|
<v-btn @click="submit()" class="button primary mt-5">Potvrdiť</v-btn>
|
||||||
|
<a-resize-handle @resize="handleModalResize" @resize-end="handleResizeEnd" :current-width="modalWidthPx" :current-height="modalHeightPx" />
|
||||||
</v-card>
|
</v-card>
|
||||||
</v-dialog>
|
</v-dialog>
|
||||||
</template>
|
</template>
|
||||||
@@ -38,11 +38,20 @@ import { required, numeric, minValue } from '@vuelidate/validators';
|
|||||||
import modalMixin from '@/plugins/tm@modal/_mixins/modal.mixin';
|
import modalMixin from '@/plugins/tm@modal/_mixins/modal.mixin';
|
||||||
import tmUtils from '@/plugins/tm@_utils/tm.utils';
|
import tmUtils from '@/plugins/tm@_utils/tm.utils';
|
||||||
import moment from 'moment';
|
import moment from 'moment';
|
||||||
|
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 {
|
export default {
|
||||||
mixins: [modalMixin],
|
mixins: [modalMixin],
|
||||||
emits: ['close', 'on-subtask-edited'],
|
emits: ['close', 'on-subtask-edited'],
|
||||||
|
|
||||||
|
components: {
|
||||||
|
AResizeHandle,
|
||||||
|
AResetSizeButton,
|
||||||
|
ACloseButton,
|
||||||
|
},
|
||||||
|
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
v$: useVuelidate(),
|
v$: useVuelidate(),
|
||||||
@@ -52,6 +61,7 @@ export default {
|
|||||||
form: {
|
form: {
|
||||||
hours: null,
|
hours: null,
|
||||||
},
|
},
|
||||||
|
modalName: 'z-task-add-time-modal',
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
@@ -1,9 +1,8 @@
|
|||||||
<template>
|
<template>
|
||||||
<v-dialog
|
<v-dialog
|
||||||
v-model="visible"
|
v-model="visible"
|
||||||
max-width="750"
|
:width="modalWidth"
|
||||||
max-height="90%"
|
:height="modalHeight"
|
||||||
height="700px"
|
|
||||||
persistent
|
persistent
|
||||||
>
|
>
|
||||||
<W-loadable :content="subtask" class="h-100">
|
<W-loadable :content="subtask" class="h-100">
|
||||||
@@ -11,14 +10,14 @@
|
|||||||
v-if="editMode"
|
v-if="editMode"
|
||||||
height="100%"
|
height="100%"
|
||||||
class="d-flex flex-column scrolling"
|
class="d-flex flex-column scrolling"
|
||||||
|
style="position: relative"
|
||||||
>
|
>
|
||||||
<div class="d-flex justify-space-between align-center modal-header">
|
<div class="d-flex justify-space-between align-center modal-header">
|
||||||
<h1>{{ subtask?.id ? 'Upraviť sub task' : 'Vytvoriť sub task' }}</h1>
|
<h1>{{ subtask?.id ? 'Upraviť sub task' : 'Vytvoriť sub task' }}</h1>
|
||||||
<v-icon
|
<div class="d-flex align-center">
|
||||||
@click.stop="closeModal()"
|
<a-reset-size-button @reset="resetModalSize" />
|
||||||
icon="mdi-close"
|
<a-close-button @close="closeModal()" />
|
||||||
size="large"
|
</div>
|
||||||
></v-icon>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<v-card-actions class="d-flex flex-column modal-content">
|
<v-card-actions class="d-flex flex-column modal-content">
|
||||||
@@ -254,7 +253,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="w-100 modal-input">
|
<div class="w-100 modal-input quill-editor-wrapper">
|
||||||
<QuillEditor
|
<QuillEditor
|
||||||
ref="description"
|
ref="description"
|
||||||
v-model="subtask.description"
|
v-model="subtask.description"
|
||||||
@@ -279,21 +278,20 @@
|
|||||||
<v-btn class="button primary disabled" v-else disabled>{{
|
<v-btn class="button primary disabled" v-else disabled>{{
|
||||||
$t('Ukladám...')
|
$t('Ukladám...')
|
||||||
}}</v-btn>
|
}}</v-btn>
|
||||||
|
<a-resize-handle @resize="handleModalResize" @resize-end="handleResizeEnd" :current-width="modalWidthPx" :current-height="modalHeightPx" />
|
||||||
</v-card>
|
</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 class="d-flex justify-space-between align-center">
|
||||||
<div>
|
<div>
|
||||||
<p>{{ subtask._master_task.project_code }}</p>
|
<p>{{ subtask._master_task.project_code }}</p>
|
||||||
<h1>{{ subtask._master_task.name }}</h1>
|
<h1>{{ subtask._master_task.name }}</h1>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<v-icon
|
<div class="d-flex align-center">
|
||||||
@click.stop="closeModal()"
|
<a-reset-size-button @reset="resetModalSize" />
|
||||||
icon="mdi-close"
|
<a-close-button @close="closeModal()" class="pb-5" />
|
||||||
size="large"
|
</div>
|
||||||
class="pb-5"
|
|
||||||
></v-icon>
|
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
class="d-flex justify-space-between align-center modal-header border-bottom pb-4"
|
class="d-flex justify-space-between align-center modal-header border-bottom pb-4"
|
||||||
@@ -342,6 +340,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</v-card-actions>
|
</v-card-actions>
|
||||||
|
<a-resize-handle @resize="handleModalResize" @resize-end="handleResizeEnd" :current-width="modalWidthPx" :current-height="modalHeightPx" />
|
||||||
</v-card>
|
</v-card>
|
||||||
</W-loadable>
|
</W-loadable>
|
||||||
</v-dialog>
|
</v-dialog>
|
||||||
@@ -366,6 +365,9 @@ import ZTaskReadonlyInfo from './_components/z-task-readonly-info.vue';
|
|||||||
import ATimeblock from './_components/a-timeblock.vue';
|
import ATimeblock from './_components/a-timeblock.vue';
|
||||||
import { mapGetters } from 'vuex';
|
import { mapGetters } from 'vuex';
|
||||||
import modalMixin from '@/plugins/tm@modal/_mixins/modal.mixin';
|
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 {
|
export default {
|
||||||
emits: ['close', 'refresh'],
|
emits: ['close', 'refresh'],
|
||||||
@@ -378,6 +380,9 @@ export default {
|
|||||||
Datepicker,
|
Datepicker,
|
||||||
// ATaskTimeblocks,
|
// ATaskTimeblocks,
|
||||||
QuillEditor,
|
QuillEditor,
|
||||||
|
AResizeHandle,
|
||||||
|
AResetSizeButton,
|
||||||
|
ACloseButton,
|
||||||
},
|
},
|
||||||
|
|
||||||
data() {
|
data() {
|
||||||
@@ -400,6 +405,7 @@ export default {
|
|||||||
},
|
},
|
||||||
],
|
],
|
||||||
wasFormValidationTriggered: false,
|
wasFormValidationTriggered: false,
|
||||||
|
modalName: 'z-task-modal',
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -1074,4 +1080,22 @@ export default {
|
|||||||
.datepicker-input
|
.datepicker-input
|
||||||
width: 100% !important
|
width: 100% !important
|
||||||
pointer-events: none
|
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>
|
</style>
|
||||||
@@ -1,14 +1,13 @@
|
|||||||
<template>
|
<template>
|
||||||
<v-dialog v-model="visible" max-width="750" persistent>
|
<v-dialog v-model="visible" :width="modalWidth" :height="modalHeight" persistent>
|
||||||
<v-card>
|
<v-card style="position: relative">
|
||||||
<div class="d-flex justify-space-between align-center">
|
<div class="d-flex justify-space-between align-center">
|
||||||
<h1>Sub Task má nedokončené úlohy</h1>
|
<h1>Sub Task má nedokončené úlohy</h1>
|
||||||
|
|
||||||
<v-icon
|
<div class="d-flex align-center">
|
||||||
@click.stop="closeModal()"
|
<a-reset-size-button @reset="resetModalSize" />
|
||||||
icon="mdi-close"
|
<a-close-button @close="closeModal()" />
|
||||||
size="large"
|
</div>
|
||||||
></v-icon>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="card-content">
|
<div class="card-content">
|
||||||
@@ -46,6 +45,7 @@
|
|||||||
>Uzatvoriť všetky</v-btn
|
>Uzatvoriť všetky</v-btn
|
||||||
>
|
>
|
||||||
</div>
|
</div>
|
||||||
|
<a-resize-handle @resize="handleModalResize" @resize-end="handleResizeEnd" :current-width="modalWidthPx" :current-height="modalHeightPx" />
|
||||||
</v-card>
|
</v-card>
|
||||||
</v-dialog>
|
</v-dialog>
|
||||||
</template>
|
</template>
|
||||||
@@ -54,11 +54,19 @@
|
|||||||
import modalMixin from '@/plugins/tm@modal/_mixins/modal.mixin';
|
import modalMixin from '@/plugins/tm@modal/_mixins/modal.mixin';
|
||||||
import tmUtils from '@/plugins/tm@_utils/tm.utils';
|
import tmUtils from '@/plugins/tm@_utils/tm.utils';
|
||||||
import moment from 'moment';
|
import moment from 'moment';
|
||||||
|
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 {
|
export default {
|
||||||
mixins: [modalMixin],
|
mixins: [modalMixin],
|
||||||
emits: ['close', 'on-subtask-edited'],
|
emits: ['close', 'on-subtask-edited'],
|
||||||
|
|
||||||
|
components: {
|
||||||
|
AResizeHandle,
|
||||||
|
AResetSizeButton, ACloseButton,
|
||||||
|
},
|
||||||
|
|
||||||
props: {
|
props: {
|
||||||
mode: {
|
mode: {
|
||||||
type: String,
|
type: String,
|
||||||
@@ -73,6 +81,7 @@ export default {
|
|||||||
subtask: null,
|
subtask: null,
|
||||||
loadingTimeblocks: {},
|
loadingTimeblocks: {},
|
||||||
loadingCloseAll: false,
|
loadingCloseAll: false,
|
||||||
|
modalName: 'z-unable-to-complete-task-modal',
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
@@ -1,27 +1,35 @@
|
|||||||
<template>
|
<template>
|
||||||
<v-dialog v-model="visible" max-width="750" persistent>
|
<v-dialog v-model="visible" :width="modalWidth" :height="modalHeight" persistent>
|
||||||
<v-card>
|
<v-card style="position: relative">
|
||||||
<div class="d-flex justify-space-between align-center">
|
<div class="d-flex justify-space-between align-center">
|
||||||
<h1 v-if="mode === 'edit'">Sub Task zosynchronizovaný z Office365 sa nedá upravovat. Upravte ho vo svojom kalendári a pockajte na zosynchronizovanie s Task Managerom</h1>
|
<h1 v-if="mode === 'edit'">Sub Task zosynchronizovaný z Office365 sa nedá upravovat. Upravte ho vo svojom kalendári a pockajte na zosynchronizovanie s Task Managerom</h1>
|
||||||
<h1 v-else-if="mode === 'delete'">Sub Task zosynchronizovaný z Office365 sa nedá zmazať. Zmažte ho vo svojom kalendári a pockajte na zosynchronizovanie s Task Managerom</h1>
|
<h1 v-else-if="mode === 'delete'">Sub Task zosynchronizovaný z Office365 sa nedá zmazať. Zmažte ho vo svojom kalendári a pockajte na zosynchronizovanie s Task Managerom</h1>
|
||||||
|
|
||||||
<v-icon
|
<div class="d-flex align-center">
|
||||||
@click.stop="closeModal()"
|
<a-reset-size-button @reset="resetModalSize" />
|
||||||
icon="mdi-close"
|
<a-close-button @close="closeModal()" />
|
||||||
size="large"
|
</div>
|
||||||
></v-icon>
|
|
||||||
</div>
|
</div>
|
||||||
|
<a-resize-handle @resize="handleModalResize" @resize-end="handleResizeEnd" :current-width="modalWidthPx" :current-height="modalHeightPx" />
|
||||||
</v-card>
|
</v-card>
|
||||||
</v-dialog>
|
</v-dialog>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import modalMixin from '@/plugins/tm@modal/_mixins/modal.mixin'
|
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 {
|
export default {
|
||||||
mixins: [ modalMixin ],
|
mixins: [ modalMixin ],
|
||||||
emits: ['close', 'on-subtask-edited'],
|
emits: ['close', 'on-subtask-edited'],
|
||||||
|
|
||||||
|
components: {
|
||||||
|
AResizeHandle,
|
||||||
|
AResetSizeButton, ACloseButton,
|
||||||
|
},
|
||||||
|
|
||||||
props: {
|
props: {
|
||||||
mode: {
|
mode: {
|
||||||
type: String,
|
type: String,
|
||||||
@@ -32,7 +40,8 @@ export default {
|
|||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
visible: false,
|
visible: false,
|
||||||
subtask: null
|
subtask: null,
|
||||||
|
modalName: 'z-unable-to-edit-office-task-modal',
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
@@ -1,33 +1,46 @@
|
|||||||
<template>
|
<template>
|
||||||
<v-dialog v-model="visible" max-width="750" persistent>
|
<v-dialog v-model="visible" :width="modalWidth" :height="modalHeight" persistent>
|
||||||
<v-card>
|
<v-card style="position: relative">
|
||||||
<div class="d-flex justify-space-between align-center">
|
<div class="d-flex justify-space-between align-center">
|
||||||
<h1>
|
<h1>
|
||||||
Ste si istý, že chcete zmazať tím <b>{{ team.name }}</b>?
|
Ste si istý, že chcete zmazať tím <b>{{ team.name }}</b>?
|
||||||
</h1>
|
</h1>
|
||||||
<v-icon @click.stop="closeModal()" icon="mdi-close" size="large"></v-icon>
|
<div class="d-flex align-center">
|
||||||
|
<a-reset-size-button @reset="resetModalSize" />
|
||||||
|
<a-close-button @close="closeModal()" />
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<v-card-actions class="mt-10 d-flex justify-start align-center mobile-view">
|
<v-card-actions class="mt-10 d-flex justify-start align-center mobile-view">
|
||||||
<v-btn class="button primary half" variant="flat" @click="deleteTeam()" :disabled="isDeleting">ÁNO</v-btn>
|
<v-btn class="button primary half" variant="flat" @click="deleteTeam()" :disabled="isDeleting">ÁNO</v-btn>
|
||||||
<v-btn class="button primary half outline" @click.stop="closeModal()">ZRUŠIŤ</v-btn>
|
<v-btn class="button primary half outline" @click.stop="closeModal()">ZRUŠIŤ</v-btn>
|
||||||
</v-card-actions>
|
</v-card-actions>
|
||||||
|
<a-resize-handle @resize="handleModalResize" @resize-end="handleResizeEnd" :current-width="modalWidthPx" :current-height="modalHeightPx" />
|
||||||
</v-card>
|
</v-card>
|
||||||
</v-dialog>
|
</v-dialog>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import modalMixin from '@/plugins/tm@modal/_mixins/modal.mixin'
|
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 {
|
export default {
|
||||||
mixins: [ modalMixin ],
|
mixins: [ modalMixin ],
|
||||||
emits: ['update'],
|
emits: ['update'],
|
||||||
|
|
||||||
|
components: {
|
||||||
|
AResizeHandle,
|
||||||
|
AResetSizeButton, ACloseButton,
|
||||||
|
},
|
||||||
|
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
visible: false,
|
visible: false,
|
||||||
team: null,
|
team: null,
|
||||||
isDeleting: false
|
isDeleting: false,
|
||||||
|
modalName: 'z-delete-team-modal',
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
@@ -1,10 +1,13 @@
|
|||||||
<template>
|
<template>
|
||||||
<v-dialog v-model="visible" max-width="750" max-height="90%" height="700px" persistent>
|
<v-dialog v-model="visible" :width="modalWidth" :height="modalHeight" persistent>
|
||||||
<W-loadable :content="team" class="h-100">
|
<W-loadable :content="team" class="h-100">
|
||||||
<v-card height="100%" class="d-flex flex-column">
|
<v-card height="100%" class="d-flex flex-column" style="position: relative">
|
||||||
<div class="d-flex justify-space-between align-center modal-header">
|
<div class="d-flex justify-space-between align-center modal-header">
|
||||||
<h1>{{ team.id ? 'Upraviť tím' : 'Vytvoriť tím' }}</h1>
|
<h1>{{ team.id ? 'Upraviť tím' : 'Vytvoriť tím' }}</h1>
|
||||||
<v-icon @click.stop="closeModal()" icon="mdi-close" size="large"></v-icon>
|
<div class="d-flex align-center">
|
||||||
|
<a-reset-size-button @reset="resetModalSize" />
|
||||||
|
<a-close-button @close="closeModal()" />
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<v-card-actions class="d-flex flex-column modal-content">
|
<v-card-actions class="d-flex flex-column modal-content">
|
||||||
@@ -31,6 +34,7 @@
|
|||||||
</v-card-actions>
|
</v-card-actions>
|
||||||
|
|
||||||
<v-btn class="button primary block" @click="save()">{{ team.id ? 'UPRAVIŤ' : 'VYTVORIŤ' }}</v-btn>
|
<v-btn class="button primary block" @click="save()">{{ team.id ? 'UPRAVIŤ' : 'VYTVORIŤ' }}</v-btn>
|
||||||
|
<a-resize-handle @resize="handleModalResize" @resize-end="handleResizeEnd" :current-width="modalWidthPx" :current-height="modalHeightPx" />
|
||||||
</v-card>
|
</v-card>
|
||||||
</W-loadable>
|
</W-loadable>
|
||||||
</v-dialog>
|
</v-dialog>
|
||||||
@@ -44,6 +48,9 @@ import tmUtils from '@/plugins/tm@_utils/tm.utils'
|
|||||||
import { mapGetters } from 'vuex'
|
import { mapGetters } from 'vuex'
|
||||||
import AutocompleteMixin from '@/plugins/tm@_mixins/autocomplete.mixin'
|
import AutocompleteMixin from '@/plugins/tm@_mixins/autocomplete.mixin'
|
||||||
import modalMixin from '@/plugins/tm@modal/_mixins/modal.mixin'
|
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'
|
||||||
|
|
||||||
const atLeastOne = (value) => value.length
|
const atLeastOne = (value) => value.length
|
||||||
|
|
||||||
@@ -51,13 +58,20 @@ export default {
|
|||||||
mixins: [AutocompleteMixin, modalMixin],
|
mixins: [AutocompleteMixin, modalMixin],
|
||||||
emits: ['close', 'update'],
|
emits: ['close', 'update'],
|
||||||
|
|
||||||
|
components: {
|
||||||
|
AResizeHandle,
|
||||||
|
AResetSizeButton,
|
||||||
|
ACloseButton,
|
||||||
|
},
|
||||||
|
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
visible: false,
|
visible: false,
|
||||||
v$: useVuelidate(),
|
v$: useVuelidate(),
|
||||||
errorUtils,
|
errorUtils,
|
||||||
employeeSelect: null,
|
employeeSelect: null,
|
||||||
team: null
|
team: null,
|
||||||
|
modalName: 'z-team-modal',
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user