@bildvitta/quasar-ui-asteroid 3.20.0-beta.2 → 3.20.0-beta.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +3 -3
- package/src/asteroid.js +8 -1
- package/src/components/actions/QasActions.vue +12 -2
- package/src/components/actions-menu/QasActionsMenu.vue +18 -5
- package/src/components/alert/QasAlert.vue +89 -64
- package/src/components/app-user/QasAppUser.vue +2 -1
- package/src/components/board-generator/QasBoardGenerator.vue +883 -162
- package/src/components/board-generator/QasBoardGenerator.yml +83 -2
- package/src/components/board-generator/private/PvBoardGeneratorCardsContainer.vue +25 -0
- package/src/components/box/QasBox.vue +16 -3
- package/src/components/box/QasBox.yml +10 -0
- package/src/components/btn/QasBtn.vue +27 -5
- package/src/components/btn/QasBtn.yml +10 -1
- package/src/components/btn-dropdown/QasBtnDropdown.vue +13 -1
- package/src/components/card/QasCard.vue +97 -25
- package/src/components/card/QasCard.yml +10 -0
- package/src/components/card-image/QasCardImage.vue +10 -1
- package/src/components/card-image/QasCardImage.yml +5 -0
- package/src/components/chart-view/QasChartView.vue +4 -3
- package/src/components/chart-view/QasChartView.yml +5 -0
- package/src/components/checkbox/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -0
- package/src/components/copy/QasCopy.vue +6 -1
- package/src/components/copy/QasCopy.yml +5 -0
- package/src/components/date-time-input/QasDateTimeInput.vue +30 -6
- package/src/components/dialog/QasDialog.vue +308 -91
- package/src/components/dialog/QasDialog.yml +51 -23
- package/src/components/dialog/composables/use-cancel.js +1 -1
- package/src/components/dialog/composables/use-dynamic-components.js +2 -2
- package/src/components/dialog/composables/use-ok.js +1 -0
- package/src/components/dialog-router/QasDialogRouter.vue +1 -1
- package/src/components/drawer/QasDrawer.vue +76 -26
- package/src/components/drawer/QasDrawer.yml +10 -0
- package/src/components/expansion-item/QasExpansionItem.yml +5 -0
- package/src/components/filters/QasFilters.vue +2 -1
- package/src/components/filters/private/PvFiltersActions.vue +79 -13
- package/src/components/form-generator/QasFormGenerator.vue +8 -1
- package/src/components/form-generator/QasFormGenerator.yml +10 -0
- package/src/components/form-view/QasFormView.vue +20 -11
- package/src/components/form-view/QasFormView.yml +6 -0
- package/src/components/gallery/composables/use-delete.js +2 -3
- package/src/components/gallery/private/PvGalleryCarouselDialog.vue +8 -7
- package/src/components/grid-item/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -0
- package/src/components/header/QasHeader.vue +66 -11
- package/src/components/header/QasHeader.yml +16 -1
- package/src/components/infinite-scroll/QasInfiniteScroll.vue +1 -1
- package/src/components/label/QasLabel.vue +3 -1
- package/src/components/layout/QasLayout.vue +16 -1
- package/src/components/layout/private/PvLayoutNotificationsDrawer.vue +2 -1
- package/src/components/layout/private/PvLayoutOverlayDrawer.vue +4 -2
- package/src/components/lazy-loading-components/QasLazyLoadingComponents.vue +262 -0
- package/src/components/lazy-loading-components/QasLazyLoadingComponents.yml +49 -0
- package/src/components/list-view/QasListView.vue +12 -4
- package/src/components/list-view/QasListView.yml +12 -0
- package/src/components/page-header/QasPageHeader.vue +49 -3
- package/src/components/page-header/QasPageHeader.yml +5 -0
- package/src/components/router-link/QasRouterLink.vue +72 -0
- package/src/components/router-link/QasRouterLink.yml +24 -0
- package/src/components/search-box/QasSearchBox.vue +1 -1
- package/src/components/select/QasSelect.vue +8 -1
- package/src/components/select-list-dialog/QasSelectListDialog.vue +39 -20
- package/src/components/select-list-dialog/QasSelectListDialog.yml +14 -2
- package/src/components/signature-uploader/QasSignatureUploader.vue +5 -18
- package/src/components/single-view/QasSingleView.vue +2 -2
- package/src/components/skeleton/QasSkeleton.vue +139 -0
- package/src/components/skeleton/QasSkeleton.yml +48 -0
- package/src/components/sortable/QasSortable.vue +1 -1
- package/src/components/stepper/QasStepper.vue +24 -2
- package/src/components/table-generator/QasTableGenerator.vue +186 -35
- package/src/components/table-generator/QasTableGenerator.yml +6 -1
- package/src/components/tabs-generator/QasTabsGenerator.vue +14 -3
- package/src/components/tabs-generator/QasTabsGenerator.yml +5 -1
- package/src/components/text-truncate/QasTextTruncate.vue +61 -12
- package/src/components/text-truncate/QasTextTruncate.yml +5 -0
- package/src/components/toggle-visibility/QasToggleVisibility.vue +2 -1
- package/src/components/tooltip/QasTooltip.vue +6 -1
- package/src/components/tree-generator/QasTreeGenerator.vue +4 -6
- package/src/components/uploader/QasUploader.vue +12 -2
- package/src/composables/private/use-view.js +1 -1
- package/src/composables/use-overlay-navigation.js +116 -10
- package/src/composables/use-screen.js +17 -1
- package/src/css/components/button.scss +82 -3
- package/src/css/components/item.scss +6 -0
- package/src/css/utils/background.scss +5 -0
- package/src/css/utils/border.scss +6 -0
- package/src/css/utils/container.scss +4 -3
- package/src/css/utils/text.scss +9 -0
- package/src/helpers/copy-to-clipboard.js +2 -1
- package/src/helpers/filters.js +1 -1
- package/src/helpers/promise-handler.js +2 -1
- package/src/helpers/set-scroll-gradient.js +31 -8
- package/src/helpers/set-scroll-on-grab.js +10 -3
- package/src/index.scss +1 -0
- package/src/mixins/search-filter.js +7 -1
- package/src/plugins/delete/Delete.js +7 -9
- package/src/plugins/delete/Delete.yml +1 -1
- package/src/plugins/dialog/Dialog.yml +1 -1
- package/src/plugins/notify-error/NotifyError.yml +1 -1
- package/src/plugins/notify-success/NotifySuccess.yml +1 -1
- package/src/plugins/screen/Screen.js +17 -1
- package/src/plugins/screen/Screen.yml +5 -1
- package/src/vue-plugin.js +5 -7
- package/src/plugins/index.js +0 -5
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bildvitta/quasar-ui-asteroid",
|
|
3
3
|
"description": "Asteroid",
|
|
4
|
-
"version": "3.20.0-beta.
|
|
4
|
+
"version": "3.20.0-beta.20",
|
|
5
5
|
"author": "Bild & Vitta <systemteam@bild.com.br>",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"main": "./src/asteroid.js",
|
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
"@bildvitta/composables": "^1.0.0-beta.7",
|
|
46
46
|
"@bildvitta/store-adapter": "^1.0.0",
|
|
47
47
|
"autonumeric": "4.10.9",
|
|
48
|
-
"axios": "
|
|
48
|
+
"axios": "1.4.0",
|
|
49
49
|
"date-fns": "^2.30.0",
|
|
50
50
|
"pdfjs-dist": "4.3.136",
|
|
51
51
|
"debug": "^4.3.4",
|
|
@@ -55,7 +55,7 @@
|
|
|
55
55
|
"lodash-es": "^4.17.21",
|
|
56
56
|
"pica": "^9.0.1",
|
|
57
57
|
"signature_pad": "^4.1.5",
|
|
58
|
-
"sortablejs": "
|
|
58
|
+
"sortablejs": "1.15.7"
|
|
59
59
|
},
|
|
60
60
|
"peerDependencies": {
|
|
61
61
|
"@quasar/extras": "^1.16.0",
|
package/src/asteroid.js
CHANGED
|
@@ -4,7 +4,13 @@ export * from './helpers'
|
|
|
4
4
|
export * from './mixins'
|
|
5
5
|
export * from './vue-plugin'
|
|
6
6
|
export * from './composables'
|
|
7
|
-
|
|
7
|
+
|
|
8
|
+
// plugins
|
|
9
|
+
export { default as Delete } from './plugins/delete/Delete.js'
|
|
10
|
+
export { default as Dialog } from './plugins/dialog/Dialog.js'
|
|
11
|
+
export { default as NotifyError } from './plugins/notify-error/NotifyError.js'
|
|
12
|
+
export { default as NotifySuccess } from './plugins/notify-success/NotifySuccess.js'
|
|
13
|
+
export { default as Screen } from './plugins/screen/Screen.js'
|
|
8
14
|
|
|
9
15
|
// components
|
|
10
16
|
export const QasActions = defineAsyncComponent(() => import('./components/actions/QasActions.vue'))
|
|
@@ -72,6 +78,7 @@ export const QasSignaturePad = defineAsyncComponent(() => import('./components/s
|
|
|
72
78
|
export const QasSignatureUploader = defineAsyncComponent(() => import('./components/signature-uploader/QasSignatureUploader.vue'))
|
|
73
79
|
export const QasSingleView = defineAsyncComponent(() => import('./components/single-view/QasSingleView.vue'))
|
|
74
80
|
export const QasSortable = defineAsyncComponent(() => import('./components/sortable/QasSortable.vue'))
|
|
81
|
+
export const QasSkeleton = defineAsyncComponent(() => import('./components/skeleton/QasSkeleton.vue'))
|
|
75
82
|
export const QasStatus = defineAsyncComponent(() => import('./components/status/QasStatus.vue'))
|
|
76
83
|
export const QasStepper = defineAsyncComponent(() => import('./components/stepper/QasStepper.vue'))
|
|
77
84
|
export const QasStepperFormView = defineAsyncComponent(() => import('./components/stepper-form-view/QasStepperFormView.vue'))
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<div
|
|
2
|
+
<div :class="classes">
|
|
3
3
|
<div v-if="hasTertiaryButton" :class="columnClasses">
|
|
4
4
|
<slot name="tertiary">
|
|
5
5
|
<qas-btn v-bind="formattedButtonsProps.tertiary" class="full-width" />
|
|
@@ -24,6 +24,7 @@
|
|
|
24
24
|
import useScreen from '../../composables/use-screen'
|
|
25
25
|
import { FlexAlign } from '../../enums/Align'
|
|
26
26
|
import { Spacing } from '../../enums/Spacing'
|
|
27
|
+
import { gutterValidator } from '../../helpers/private/gutter-validator'
|
|
27
28
|
|
|
28
29
|
import QasBtn from '../btn/QasBtn.vue'
|
|
29
30
|
|
|
@@ -41,7 +42,7 @@ const props = defineProps({
|
|
|
41
42
|
gutter: {
|
|
42
43
|
default: '',
|
|
43
44
|
type: String,
|
|
44
|
-
validator: value => !value ||
|
|
45
|
+
validator: value => !value || gutterValidator(value)
|
|
45
46
|
},
|
|
46
47
|
|
|
47
48
|
primaryButtonProps: {
|
|
@@ -54,6 +55,12 @@ const props = defineProps({
|
|
|
54
55
|
default: () => ({})
|
|
55
56
|
},
|
|
56
57
|
|
|
58
|
+
spacingTop: {
|
|
59
|
+
type: String,
|
|
60
|
+
default: Spacing.Sm,
|
|
61
|
+
validator: value => Object.values(Spacing).includes(value)
|
|
62
|
+
},
|
|
63
|
+
|
|
57
64
|
tertiaryButtonProps: {
|
|
58
65
|
type: Object,
|
|
59
66
|
default: () => ({})
|
|
@@ -81,6 +88,9 @@ const classes = computed(() => {
|
|
|
81
88
|
return [
|
|
82
89
|
!screen.isSmall && 'items-center',
|
|
83
90
|
|
|
91
|
+
// espaçamento superior
|
|
92
|
+
`q-mt-${props.spacingTop}`,
|
|
93
|
+
|
|
84
94
|
// alinhamento
|
|
85
95
|
`justify-${props.align}`,
|
|
86
96
|
|
|
@@ -6,11 +6,11 @@
|
|
|
6
6
|
<q-item v-bind="getItemProps(item)" :key="key" active-class="primary" clickable data-cy="actions-menu-list-item" @click="setClickHandler(item)">
|
|
7
7
|
<q-item-section avatar>
|
|
8
8
|
<q-spinner v-if="item.loading" size="sm" />
|
|
9
|
-
<q-icon v-else :name="item.icon" />
|
|
9
|
+
<q-icon v-else :class="getMagicAiClasses(item)" :name="item.icon" />
|
|
10
10
|
</q-item-section>
|
|
11
11
|
|
|
12
12
|
<q-item-section>
|
|
13
|
-
<q-item-label>
|
|
13
|
+
<q-item-label :class="getMagicAiClasses(item)">
|
|
14
14
|
{{ item.label }}
|
|
15
15
|
</q-item-label>
|
|
16
16
|
</q-item-section>
|
|
@@ -49,8 +49,6 @@ const SPLIT_SIZE = 2
|
|
|
49
49
|
|
|
50
50
|
defineOptions({ name: 'QasActionsMenu' })
|
|
51
51
|
|
|
52
|
-
const qas = inject('qas')
|
|
53
|
-
|
|
54
52
|
const props = defineProps({
|
|
55
53
|
buttonProps: {
|
|
56
54
|
default: () => ({}),
|
|
@@ -81,6 +79,10 @@ const props = defineProps({
|
|
|
81
79
|
type: Object
|
|
82
80
|
},
|
|
83
81
|
|
|
82
|
+
skeleton: {
|
|
83
|
+
type: Boolean
|
|
84
|
+
},
|
|
85
|
+
|
|
84
86
|
splitName: {
|
|
85
87
|
default: '',
|
|
86
88
|
type: String
|
|
@@ -100,6 +102,10 @@ const props = defineProps({
|
|
|
100
102
|
}
|
|
101
103
|
})
|
|
102
104
|
|
|
105
|
+
// globals
|
|
106
|
+
const qas = inject('qas')
|
|
107
|
+
const isInsideTableGenerator = inject('isTableGenerator', false)
|
|
108
|
+
|
|
103
109
|
// refs
|
|
104
110
|
const menuModel = ref(false)
|
|
105
111
|
|
|
@@ -152,7 +158,9 @@ const primaryKey = computed(() => {
|
|
|
152
158
|
const defaultButtonPropsList = computed(() => {
|
|
153
159
|
const defaultButtonPropsList = {
|
|
154
160
|
useHoverOnWhiteColor: true,
|
|
155
|
-
|
|
161
|
+
|
|
162
|
+
// se estiver dentro do QasTableGenerator, sempre mostra o label.
|
|
163
|
+
useLabelOnSmallScreen: isInsideTableGenerator
|
|
156
164
|
}
|
|
157
165
|
|
|
158
166
|
const normalizedButtonPropsList = {}
|
|
@@ -181,6 +189,7 @@ const btnDropdownProps = computed(() => {
|
|
|
181
189
|
return {
|
|
182
190
|
buttonsPropsList: defaultButtonPropsList.value,
|
|
183
191
|
disable: props.disable,
|
|
192
|
+
skeleton: props.skeleton,
|
|
184
193
|
useSplit: hasSplit.value,
|
|
185
194
|
useAutoClose: !hasActiveLoading.value
|
|
186
195
|
}
|
|
@@ -277,6 +286,10 @@ function getItemProps (item) {
|
|
|
277
286
|
}
|
|
278
287
|
}
|
|
279
288
|
|
|
289
|
+
function getMagicAiClasses ({ useMagicAiColor }) {
|
|
290
|
+
return { 'text-magic-ai': useMagicAiColor }
|
|
291
|
+
}
|
|
292
|
+
|
|
280
293
|
function handleMenuModel (newValue, oldValue) {
|
|
281
294
|
// Fecha o menu após o estado de loading do item passar de true para false
|
|
282
295
|
if (oldValue && !newValue) {
|
|
@@ -133,83 +133,108 @@ const component = computed(() => {
|
|
|
133
133
|
})
|
|
134
134
|
|
|
135
135
|
const textComponent = computed(() => {
|
|
136
|
-
//
|
|
137
|
-
const
|
|
138
|
-
|
|
139
|
-
|
|
136
|
+
// Configuração dos tokens suportados
|
|
137
|
+
const tokens = [
|
|
138
|
+
{
|
|
139
|
+
type: 'LINK',
|
|
140
|
+
regex: /\[(.*?)\]/g,
|
|
141
|
+
extractContent: match => match.replace(/\[(.*?)\]/, '$1'),
|
|
142
|
+
render: (content, index) => {
|
|
143
|
+
const isButtonPropsArray = Array.isArray(props.buttonProps)
|
|
144
|
+
const isRouterPropsArray = Array.isArray(props.routerLinkProps)
|
|
145
|
+
|
|
146
|
+
const buttonPropsForIndex = isButtonPropsArray
|
|
147
|
+
? props.buttonProps[index]
|
|
148
|
+
: props.buttonProps
|
|
149
|
+
|
|
150
|
+
const routerLinkPropsForIndex = isRouterPropsArray
|
|
151
|
+
? props.routerLinkProps[index]
|
|
152
|
+
: props.routerLinkProps
|
|
153
|
+
|
|
154
|
+
const hasButtonProps = buttonPropsForIndex && !!Object.keys(buttonPropsForIndex).length
|
|
155
|
+
|
|
156
|
+
if (hasButtonProps) {
|
|
157
|
+
return h(QasBtn, {
|
|
158
|
+
variant: 'tertiary',
|
|
159
|
+
label: content,
|
|
160
|
+
...buttonPropsForIndex
|
|
161
|
+
})
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
return h(RouterLink, {
|
|
165
|
+
...routerLinkPropsForIndex,
|
|
166
|
+
class: 'text-primary text-subtitle1 qas-alert__link'
|
|
167
|
+
}, {
|
|
168
|
+
default: () => content
|
|
169
|
+
})
|
|
170
|
+
}
|
|
171
|
+
},
|
|
172
|
+
{
|
|
173
|
+
type: 'BOLD',
|
|
174
|
+
regex: /\*\*(.*?)\*\*/g,
|
|
175
|
+
extractContent: match => match.replace(/\*\*(.*?)\*\*/, '$1'),
|
|
176
|
+
render: content => h('strong', { class: 'text-weight-bold' }, content)
|
|
177
|
+
}
|
|
178
|
+
]
|
|
179
|
+
|
|
180
|
+
// Encontra todos os matches de todos os tipos de token
|
|
181
|
+
const allMatches = []
|
|
182
|
+
|
|
183
|
+
tokens.forEach(token => {
|
|
184
|
+
const matches = props.text.match(token.regex) || []
|
|
185
|
+
|
|
186
|
+
matches.forEach(match => {
|
|
187
|
+
allMatches.push({
|
|
188
|
+
type: token.type,
|
|
189
|
+
match,
|
|
190
|
+
content: token.extractContent(match),
|
|
191
|
+
render: token.render
|
|
192
|
+
})
|
|
193
|
+
})
|
|
194
|
+
})
|
|
140
195
|
|
|
141
|
-
|
|
196
|
+
// Se não há matches, retorna texto simples
|
|
197
|
+
if (!allMatches.length) {
|
|
198
|
+
return h('span', props.text)
|
|
199
|
+
}
|
|
142
200
|
|
|
143
201
|
let processedText = props.text
|
|
144
202
|
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
*/
|
|
149
|
-
matches.forEach((match, index) => {
|
|
150
|
-
processedText = processedText.replace(match, `$${index}`)
|
|
203
|
+
// Substitui cada match por um placeholder único
|
|
204
|
+
allMatches.forEach((matchData, index) => {
|
|
205
|
+
processedText = processedText.replace(matchData.match, `$${matchData.type}_${index}`)
|
|
151
206
|
})
|
|
152
207
|
|
|
153
|
-
//
|
|
154
|
-
const parts = processedText.split(
|
|
155
|
-
|
|
156
|
-
const placeholders = processedText.match(/\$\d+/g) || []
|
|
157
|
-
|
|
208
|
+
// Separa o texto em partes
|
|
209
|
+
const parts = processedText.split(/(\$\w+_\d+)/)
|
|
158
210
|
const result = []
|
|
159
211
|
|
|
160
|
-
parts.forEach(
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
// Pega o texto original do match. Ex: '[Clique aqui]'
|
|
168
|
-
const match = matches[placeholderIndex]
|
|
169
|
-
|
|
170
|
-
// Remove os colchetes do match. Ex: [Clique aqui] para Clique aqui
|
|
171
|
-
const routerLabel = match.replaceAll(/[[\]]/g, '')
|
|
172
|
-
|
|
173
|
-
// Determina as props do botão/link baseado no índice
|
|
174
|
-
const isButtonPropsArray = Array.isArray(props.buttonProps)
|
|
175
|
-
const isRouterPropsArray = Array.isArray(props.routerLinkProps)
|
|
176
|
-
|
|
177
|
-
const buttonPropsForIndex = isButtonPropsArray
|
|
178
|
-
? props.buttonProps[placeholderIndex]
|
|
179
|
-
: props.buttonProps
|
|
212
|
+
parts.forEach(part => {
|
|
213
|
+
// Se a parte é texto normal, adiciona como string
|
|
214
|
+
if (!part.startsWith('$')) {
|
|
215
|
+
if (part) result.push(part)
|
|
216
|
+
return
|
|
217
|
+
}
|
|
180
218
|
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
219
|
+
// Se é um placeholder, encontra o match correspondente
|
|
220
|
+
const placeholderMatch = part.match(/\$(\w+)_(\d+)/)
|
|
221
|
+
if (!placeholderMatch) return
|
|
184
222
|
|
|
185
|
-
|
|
223
|
+
const [, type, indexStr] = placeholderMatch
|
|
224
|
+
const index = parseInt(indexStr)
|
|
186
225
|
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
{
|
|
191
|
-
...routerLinkPropsForIndex,
|
|
192
|
-
class: 'text-primary text-subtitle1 qas-alert__link'
|
|
193
|
-
},
|
|
194
|
-
{
|
|
195
|
-
default: () => routerLabel
|
|
196
|
-
}
|
|
197
|
-
)
|
|
198
|
-
}
|
|
226
|
+
// Encontra o match data correspondente
|
|
227
|
+
const matchData = allMatches[index]
|
|
228
|
+
if (!matchData || matchData.type !== type) return
|
|
199
229
|
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
label: routerLabel,
|
|
206
|
-
...buttonPropsForIndex
|
|
207
|
-
}
|
|
208
|
-
)
|
|
209
|
-
}
|
|
230
|
+
// Conta quantos matches do mesmo tipo vieram antes (para o índice das props)
|
|
231
|
+
const typeIndex = allMatches
|
|
232
|
+
.slice(0, index)
|
|
233
|
+
.filter(m => m.type === type)
|
|
234
|
+
.length
|
|
210
235
|
|
|
211
|
-
|
|
212
|
-
|
|
236
|
+
// Renderiza o componente
|
|
237
|
+
result.push(matchData.render(matchData.content, typeIndex))
|
|
213
238
|
})
|
|
214
239
|
|
|
215
240
|
return h('span', result)
|
|
@@ -76,7 +76,8 @@ import useNotifications from '../../composables/use-notifications'
|
|
|
76
76
|
import useQueryCache from '../../composables/use-query-cache'
|
|
77
77
|
import useScreen from '../../composables/use-screen'
|
|
78
78
|
|
|
79
|
-
import
|
|
79
|
+
import NotifySuccess from '../../plugins/notify-success/NotifySuccess.js'
|
|
80
|
+
import NotifyError from '../../plugins/notify-error/NotifyError.js'
|
|
80
81
|
|
|
81
82
|
import { ref, computed, watch, inject } from 'vue'
|
|
82
83
|
import { useRouter } from 'vue-router'
|