@bildvitta/quasar-ui-asteroid 2.16.0 → 3.0.0-alpha.2
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/dist/api/QasActions.json +40 -0
- package/dist/api/QasActionsMenu.json +64 -0
- package/dist/api/QasAlert.json +40 -0
- package/dist/api/QasAppBar.json +52 -0
- package/dist/api/QasAppMenu.json +38 -0
- package/dist/api/QasAvatar.json +44 -0
- package/dist/api/QasBox.json +16 -0
- package/dist/api/QasBreakline.json +32 -0
- package/dist/api/QasBtn.json +16 -0
- package/dist/api/QasCard.json +52 -0
- package/dist/api/QasCheckboxGroup.json +38 -0
- package/dist/api/QasCopy.json +29 -0
- package/dist/api/QasDateTimeInput.json +60 -0
- package/dist/api/QasDebugger.json +13 -0
- package/dist/api/QasDelete.json +64 -0
- package/dist/api/QasDialog.json +109 -0
- package/dist/api/QasDialogRouter.json +31 -0
- package/dist/api/QasField.json +56 -0
- package/dist/api/QasFilters.json +111 -0
- package/dist/api/QasFormGenerator.json +92 -0
- package/dist/api/QasFormView.json +228 -0
- package/dist/api/QasGallery.json +54 -0
- package/dist/api/QasGridGenerator.json +108 -0
- package/dist/api/QasInput.json +40 -0
- package/dist/api/QasLabel.json +40 -0
- package/dist/api/QasLayout.json +47 -0
- package/dist/api/QasListItems.json +72 -0
- package/dist/api/QasListView.json +161 -0
- package/dist/api/QasMap.json +41 -0
- package/dist/api/QasNestedFields.json +223 -0
- package/dist/api/QasNumericInput.json +68 -0
- package/dist/api/QasPageHeader.json +36 -0
- package/dist/api/QasPasswordInput.json +121 -0
- package/dist/api/QasPasswordStrengthChecker.json +126 -0
- package/dist/api/QasProfile.json +74 -0
- package/dist/api/QasResizer.json +34 -0
- package/dist/api/QasSearchBox.json +91 -0
- package/dist/api/QasSelect.json +88 -0
- package/dist/api/QasSelectList.json +134 -0
- package/dist/api/QasSignaturePad.json +63 -0
- package/dist/api/QasSignatureUploader.json +41 -0
- package/dist/api/QasSingleView.json +147 -0
- package/dist/api/QasSortable.json +80 -0
- package/dist/api/QasTableGenerator.json +56 -0
- package/dist/api/QasTabsGenerator.json +90 -0
- package/dist/api/QasTextTruncate.json +38 -0
- package/dist/api/QasTransfer.json +70 -0
- package/dist/api/QasUploader.json +143 -0
- package/dist/asteroid.cjs.css +1 -0
- package/dist/asteroid.cjs.js +9307 -0
- package/dist/asteroid.cjs.min.js +6 -0
- package/dist/asteroid.esm.css +1 -0
- package/dist/asteroid.esm.js +9298 -0
- package/dist/asteroid.esm.min.js +6 -0
- package/dist/asteroid.umd.css +1 -0
- package/dist/asteroid.umd.js +9301 -0
- package/dist/asteroid.umd.min.js +6 -0
- package/dist/vetur/asteroid-attributes.json +1178 -0
- package/dist/vetur/asteroid-tags.json +535 -0
- package/package.json +41 -56
- package/src/assets/logo-modular.svg +1 -1
- package/src/asteroid.js +1 -0
- package/src/components/actions/QasActions.vue +45 -0
- package/src/components/actions/QasActions.yml +24 -0
- package/src/components/actions-menu/QasActionsMenu.vue +41 -14
- package/src/components/actions-menu/QasActionsMenu.yml +63 -0
- package/src/components/alert/QasAlert.vue +90 -0
- package/src/components/alert/QasAlert.yml +33 -0
- package/src/components/app-bar/QasAppBar.vue +16 -13
- package/src/components/app-bar/QasAppBar.yml +51 -0
- package/src/components/app-menu/QasAppMenu.vue +10 -12
- package/src/components/app-menu/QasAppMenu.yml +32 -0
- package/src/components/avatar/QasAvatar.vue +17 -9
- package/src/components/avatar/QasAvatar.yml +38 -0
- package/src/components/box/QasBox.vue +12 -4
- package/src/components/box/QasBox.yml +13 -0
- package/src/components/breakline/QasBreakline.vue +37 -0
- package/src/components/breakline/QasBreakline.yml +25 -0
- package/src/components/btn/QasBtn.vue +27 -24
- package/src/components/btn/QasBtn.yml +13 -0
- package/src/components/card/QasCard.vue +32 -33
- package/src/components/card/QasCard.yml +42 -0
- package/src/components/checkbox-group/QasCheckboxGroup.vue +50 -17
- package/src/components/checkbox-group/QasCheckboxGroup.yml +30 -0
- package/src/components/copy/QasCopy.vue +22 -11
- package/src/components/copy/QasCopy.yml +20 -0
- package/src/components/date-time-input/QasDateTimeInput.vue +18 -26
- package/src/components/date-time-input/QasDateTimeInput.yml +54 -0
- package/src/components/debugger/QasDebugger.vue +2 -0
- package/src/components/debugger/QasDebugger.yml +10 -0
- package/src/components/delete/QasDelete.vue +43 -16
- package/src/components/delete/QasDelete.yml +52 -0
- package/src/components/dialog/QasDialog.vue +63 -67
- package/src/components/dialog/QasDialog.yml +86 -0
- package/src/components/dialog-router/QasDialogRouter.vue +14 -4
- package/src/components/dialog-router/QasDialogRouter.yml +23 -0
- package/src/components/field/QasField.vue +21 -24
- package/src/components/field/QasField.yml +31 -0
- package/src/components/filters/QasFilters.vue +33 -26
- package/src/components/filters/QasFilters.yml +91 -0
- package/src/components/form-generator/QasFormGenerator.vue +13 -15
- package/src/components/form-generator/QasFormGenerator.yml +64 -0
- package/src/components/form-view/QasFormView.vue +129 -69
- package/src/components/form-view/QasFormView.yml +179 -0
- package/src/components/gallery/QasGallery.vue +47 -30
- package/src/components/gallery/QasGallery.yml +51 -0
- package/src/components/grid-generator/QasGridGenerator.vue +15 -7
- package/src/components/grid-generator/QasGridGenerator.yml +73 -0
- package/src/components/index.js +0 -0
- package/src/components/input/QasInput.vue +43 -36
- package/src/components/input/QasInput.yml +32 -0
- package/src/components/label/QasLabel.vue +14 -15
- package/src/components/label/QasLabel.yml +28 -0
- package/src/components/layout/QasLayout.vue +13 -21
- package/src/components/layout/QasLayout.yml +38 -0
- package/src/components/list-items/QasListItems.vue +15 -12
- package/src/components/list-items/QasListItems.yml +57 -0
- package/src/components/list-view/QasListView.vue +57 -31
- package/src/components/list-view/QasListView.yml +132 -0
- package/src/components/map/QasMap.vue +15 -31
- package/src/components/map/QasMap.yml +33 -0
- package/src/components/nested-fields/QasNestedFields.vue +57 -47
- package/src/components/nested-fields/QasNestedFields.yml +180 -0
- package/src/components/numeric-input/QasNumericInput.vue +31 -22
- package/src/components/numeric-input/QasNumericInput.yml +51 -0
- package/src/components/page-header/QasPageHeader.vue +20 -11
- package/src/components/page-header/QasPageHeader.yml +24 -0
- package/src/components/password-input/QasPasswordInput.vue +24 -21
- package/src/components/password-input/QasPasswordInput.yml +103 -0
- package/src/components/password-strength-checker/QasPasswordStrengthChecker.vue +51 -34
- package/src/components/password-strength-checker/QasPasswordStrengthChecker.yml +103 -0
- package/src/components/profile/QasProfile.vue +15 -13
- package/src/components/profile/QasProfile.yml +60 -0
- package/src/components/resizer/QasResizer.vue +3 -3
- package/src/components/resizer/QasResizer.yml +23 -0
- package/src/components/search-box/QasSearchBox.vue +50 -21
- package/src/components/search-box/QasSearchBox.yml +76 -0
- package/src/components/select/QasSelect.vue +51 -50
- package/src/components/select/QasSelect.yml +62 -0
- package/src/components/select-list/QasSelectList.vue +72 -53
- package/src/components/select-list/QasSelectList.yml +116 -0
- package/src/components/signature-pad/QasSignaturePad.vue +60 -40
- package/src/components/signature-pad/QasSignaturePad.yml +53 -0
- package/src/components/signature-uploader/QasSignatureUploader.vue +19 -17
- package/src/components/signature-uploader/QasSignatureUploader.yml +36 -0
- package/src/components/single-view/QasSingleView.vue +41 -22
- package/src/components/single-view/QasSingleView.yml +116 -0
- package/src/components/sortable/QasSortable.vue +51 -30
- package/src/components/sortable/QasSortable.yml +65 -0
- package/src/components/table-generator/QasTableGenerator.vue +112 -21
- package/src/components/table-generator/QasTableGenerator.yml +46 -0
- package/src/components/tabs-generator/QasTabsGenerator.vue +37 -25
- package/src/components/tabs-generator/QasTabsGenerator.yml +67 -0
- package/src/components/text-truncate/QasTextTruncate.vue +25 -17
- package/src/components/text-truncate/QasTextTruncate.yml +32 -0
- package/src/components/transfer/QasTransfer.vue +48 -49
- package/src/components/transfer/QasTransfer.yml +59 -0
- package/src/components/uploader/QasUploader.vue +169 -48
- package/src/components/uploader/QasUploader.yml +117 -0
- package/src/css/background.scss +1 -1
- package/src/css/border.scss +7 -6
- package/src/css/design-system.scss +0 -43
- package/src/css/fonts.scss +2 -28
- package/src/css/opacity.scss +0 -4
- package/src/css/set-brand.scss +15 -0
- package/src/css/transitions.scss +1 -1
- package/src/helpers/add-counter-suffix.js +3 -0
- package/src/helpers/{base64ToBlob.js → base-64-to-blob.js} +0 -0
- package/src/helpers/{constructObject.js → construct-object.js} +0 -0
- package/src/helpers/filter-object.js +8 -6
- package/src/helpers/filters.js +8 -4
- package/src/helpers/{greatestCommonDivisor.js → get-greatest-common-divisor.js} +0 -0
- package/src/helpers/get-slot-children-text.js +15 -0
- package/src/helpers/images.js +28 -0
- package/src/helpers/index.js +11 -59
- package/src/helpers/{isLocalDevelopment.js → is-local-development.js} +0 -0
- package/src/helpers/set-scroll-on-grab.js +61 -0
- package/src/index.cjs.js +1 -0
- package/src/index.esm.js +4 -0
- package/src/index.scss +19 -21
- package/src/index.umd.js +2 -0
- package/src/mixins/context.js +1 -1
- package/src/mixins/dialog-router.js +17 -0
- package/src/mixins/form.js +4 -12
- package/src/mixins/generator.js +14 -14
- package/src/mixins/index.js +2 -8
- package/src/mixins/password.js +73 -11
- package/src/mixins/screen.js +8 -6
- package/src/mixins/view.js +62 -22
- package/src/plugins/dialog/Dialog.js +14 -0
- package/src/plugins/dialog/Dialog.yml +10 -0
- package/src/plugins/index.js +4 -2
- package/src/plugins/{NotifyError.js → notify-error/NotifyError.js} +0 -0
- package/src/plugins/notify-error/NotifyError.yml +11 -0
- package/src/plugins/{NotifySuccess.js → notify-success/NotifySuccess.js} +3 -3
- package/src/plugins/notify-success/NotifySuccess.yml +11 -0
- package/src/store/history.js +43 -0
- package/src/store/index.js +1 -0
- package/src/vue-plugin.js +185 -0
- package/.babelrc +0 -12
- package/.storybook/main.js +0 -35
- package/.storybook/preview.js +0 -26
- package/debug.log +0 -1
- package/index.js +0 -4
- package/jest-setup.js +0 -1
- package/jest.config.json +0 -22
- package/postcss.config.js +0 -5
- package/src/components/Introduction.stories.mdx +0 -12
- package/src/components/actions-menu/QasActionsMenu.stories.js +0 -73
- package/src/components/app-bar/QasAppBar.stories.js +0 -84
- package/src/components/app-menu/QasAppMenu.stories.js +0 -66
- package/src/components/apps-menu/QasAppsMenu.spec.js +0 -58
- package/src/components/apps-menu/QasAppsMenu.stories.js +0 -54
- package/src/components/apps-menu/QasAppsMenu.vue +0 -48
- package/src/components/avatar/QasAvatar.spec.js +0 -14
- package/src/components/avatar/QasAvatar.stories.js +0 -52
- package/src/components/box/QasBox.spec.js +0 -18
- package/src/components/box/QasBox.stories.js +0 -35
- package/src/components/break-line/QasBreakLine.stories.js +0 -57
- package/src/components/break-line/QasBreakLine.vue +0 -52
- package/src/components/btn/QasBtn.stories.js +0 -45
- package/src/components/btn-actions/QasBtnActions.stories.js +0 -77
- package/src/components/btn-actions/QasBtnActions.vue +0 -54
- package/src/components/card/QasCard.stories.js +0 -126
- package/src/components/checkbox-group/QasCheckboxGroup.stories.js +0 -59
- package/src/components/copy/QasCopy.stories.js +0 -41
- package/src/components/date-time-input/QasDateTimeInput.stories.js +0 -67
- package/src/components/debugger/QasDebugger.stories.js +0 -33
- package/src/components/delete/QasDelete.stories.js +0 -80
- package/src/components/dialog/QasDialog.stories.js +0 -139
- package/src/components/dialog-router/QasDialogRouter.stories.js +0 -38
- package/src/components/field/QasField.stories.js +0 -181
- package/src/components/filters/QasFilters.stories.js +0 -121
- package/src/components/form-generator/QasFormGenerator.stories.js +0 -115
- package/src/components/form-view/QasFormView.stories.js +0 -236
- package/src/components/gallery/QasGallery.stories.js +0 -91
- package/src/components/grid-generator/QasGridGenerator.stories.js +0 -142
- package/src/components/input/QasInput.stories.js +0 -78
- package/src/components/label/QasLabel.stories.js +0 -60
- package/src/components/layout/QasLayout.stories.js +0 -104
- package/src/components/list-items/QasListItems.stories.js +0 -135
- package/src/components/list-view/QasListView.stories.js +0 -168
- package/src/components/map/QasMap.stories.js +0 -75
- package/src/components/nested-fields/QasNestedFields.stories.js +0 -255
- package/src/components/numeric-input/QasNumericInput.stories.js +0 -92
- package/src/components/page-header/QasPageHeader.stories.js +0 -61
- package/src/components/password-input/QasPasswordInput.stories.js +0 -76
- package/src/components/password-strength-checker/QasPasswordStrengthChecker.stories.js +0 -54
- package/src/components/profile/QasProfile.stories.js +0 -131
- package/src/components/resizer/QasResizer.stories.js +0 -43
- package/src/components/search-box/QasSearchBox.stories.js +0 -111
- package/src/components/select/QasSelect.stories.js +0 -113
- package/src/components/select-list/QasSelectList.stories.js +0 -153
- package/src/components/signature-pad/QasSignaturePad.stories.js +0 -51
- package/src/components/signature-uploader/QasSignatureUploader.stories.js +0 -69
- package/src/components/single-view/QasSingleView.stories.js +0 -130
- package/src/components/sortable/QasSortable.stories.js +0 -80
- package/src/components/table-generator/QasTableGenerator.stories.js +0 -120
- package/src/components/tabs-generator/QasTabsGenerator.stories.js +0 -145
- package/src/components/text-truncate/QasTextTruncate.stories.js +0 -55
- package/src/components/tip/QasTip.stories.js +0 -57
- package/src/components/tip/QasTip.vue +0 -68
- package/src/components/tooltip/QasTooltip.stories.js +0 -63
- package/src/components/tooltip/QasTooltip.vue +0 -81
- package/src/components/transfer/QasTransfer.stories.js +0 -118
- package/src/components/uploader/QasCustomUploader.vue +0 -120
- package/src/components/uploader/QasUploader.stories.js +0 -139
- package/src/directives/Test.js +0 -13
- package/src/helpers/historyHandler.js +0 -52
- package/src/helpers/label.js +0 -3
- package/src/index.js +0 -249
- package/src/mixins/map-markers.js +0 -26
- package/src/mixins/unsaved-changes.js +0 -24
- package/src/mixins/uploader.js +0 -30
- package/src/mocks/json/user.json +0 -27
- package/src/mocks/json/users-new.json +0 -23
- package/src/mocks/json/users.json +0 -97
- package/src/mocks/storeModule.js +0 -71
- package/src/pages/Forbidden.vue +0 -6
- package/src/pages/NotFound.vue +0 -6
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<div :id="fieldName" class="qas-nested-fields">
|
|
3
3
|
<div class="text-left">
|
|
4
|
-
<qas-label v-if="useSingleLabel" :label="
|
|
4
|
+
<qas-label v-if="useSingleLabel" :label="fieldLabel" />
|
|
5
5
|
</div>
|
|
6
6
|
|
|
7
7
|
<div>
|
|
8
|
-
<component :is="
|
|
8
|
+
<component :is="componentTag" ref="inputContent" name="fade" tag="div">
|
|
9
9
|
<div v-for="(row, index) in nested" :id="`row-${index}`" :key="index" class="full-width">
|
|
10
|
-
<component :is="
|
|
10
|
+
<component :is="componentTag" name="fade" tag="div">
|
|
11
11
|
<div v-if="!row[destroyKey]" :key="index" class="col-12 q-mt-md">
|
|
12
12
|
<div>
|
|
13
13
|
<div class="flex items-center justify-between q-py-xs">
|
|
@@ -21,21 +21,25 @@
|
|
|
21
21
|
|
|
22
22
|
<div ref="formGenerator" class="col-12 justify-between q-col-gutter-x-md row">
|
|
23
23
|
<slot :errors="transformedErrors" :fields="children" :index="index" name="fields" :update-value="updateValuesFromInput">
|
|
24
|
-
<qas-form-generator v-model="nested[index]" :class="formClasses" :columns="formColumns" :errors="transformedErrors[index]" :fields="children" :fields-
|
|
25
|
-
<template v-for="(slot, key) in $
|
|
26
|
-
<slot :
|
|
24
|
+
<qas-form-generator v-model="nested[index]" :class="formClasses" :columns="formColumns" :errors="transformedErrors[index]" :fields="children" :fields-props="fieldsProps" @update:model-value="updateValuesFromInput($event, index)">
|
|
25
|
+
<template v-for="(slot, key) in $slots" #[key]="scope">
|
|
26
|
+
<slot v-bind="scope" :errors="transformedErrors" :index="index" :name="key" />
|
|
27
27
|
</template>
|
|
28
28
|
</qas-form-generator>
|
|
29
29
|
</slot>
|
|
30
30
|
|
|
31
31
|
<div v-if="useInlineActions" class="flex items-center qas-nested-fields__actions">
|
|
32
|
-
<
|
|
33
|
-
|
|
32
|
+
<div class="col-auto">
|
|
33
|
+
<qas-btn v-if="useDuplicate" color="primary" flat icon="o_content_copy" round @click="add(row)" />
|
|
34
|
+
</div>
|
|
35
|
+
<div class="col-auto">
|
|
36
|
+
<qas-btn v-if="showDestroyBtn" color="negative" flat icon="o_cancel" round @click="destroy(index, row)" />
|
|
37
|
+
</div>
|
|
34
38
|
</div>
|
|
35
39
|
</div>
|
|
36
40
|
|
|
37
41
|
<div class="col-12">
|
|
38
|
-
<slot :index="index" :model
|
|
42
|
+
<slot :fields="children" :index="index" :model="nested[index]" name="custom-fields" :update-value="updateValuesFromInput" />
|
|
39
43
|
</div>
|
|
40
44
|
</div>
|
|
41
45
|
</div>
|
|
@@ -43,30 +47,34 @@
|
|
|
43
47
|
</div>
|
|
44
48
|
</component>
|
|
45
49
|
|
|
46
|
-
<
|
|
47
|
-
<
|
|
48
|
-
<
|
|
50
|
+
<div class="q-mt-md">
|
|
51
|
+
<slot :add="add" name="add-input">
|
|
52
|
+
<div v-if="useInlineActions" class="cursor-pointer items-center q-col-gutter-x-md q-mt-md row" @click="add()">
|
|
53
|
+
<div class="col">
|
|
54
|
+
<qas-input class="disabled no-pointer-events" hide-bottom-space :label="addInputLabel" outlined @focus="add()" />
|
|
55
|
+
</div>
|
|
49
56
|
|
|
50
|
-
|
|
51
|
-
|
|
57
|
+
<div class="col-auto">
|
|
58
|
+
<qas-btn color="green" flat icon="o_add_circle_outline" round />
|
|
59
|
+
</div>
|
|
52
60
|
</div>
|
|
53
|
-
</div>
|
|
54
61
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
62
|
+
<div v-else class="q-mt-lg">
|
|
63
|
+
<qas-btn class="full-width q-py-sm" icon="o_add" outline @click="add()">{{ addInputLabel }}</qas-btn>
|
|
64
|
+
</div>
|
|
65
|
+
</slot>
|
|
66
|
+
</div>
|
|
59
67
|
</div>
|
|
60
68
|
</div>
|
|
61
69
|
</template>
|
|
62
70
|
|
|
63
71
|
<script>
|
|
64
|
-
import QasBtn from '../btn/QasBtn'
|
|
65
|
-
import QasFormGenerator from '../form-generator/QasFormGenerator'
|
|
66
|
-
import QasInput from '../input/QasInput'
|
|
67
|
-
import QasLabel from '../label/QasLabel'
|
|
68
|
-
import { constructObject } from '../../helpers'
|
|
72
|
+
import QasBtn from '../btn/QasBtn.vue'
|
|
73
|
+
import QasFormGenerator from '../form-generator/QasFormGenerator.vue'
|
|
74
|
+
import QasInput from '../input/QasInput.vue'
|
|
75
|
+
import QasLabel from '../label/QasLabel.vue'
|
|
69
76
|
|
|
77
|
+
import { constructObject } from '../../helpers'
|
|
70
78
|
import { extend } from 'quasar'
|
|
71
79
|
import { camelize } from 'humps'
|
|
72
80
|
|
|
@@ -126,11 +134,6 @@ export default {
|
|
|
126
134
|
default: () => ({})
|
|
127
135
|
},
|
|
128
136
|
|
|
129
|
-
fieldsEvents: {
|
|
130
|
-
type: Object,
|
|
131
|
-
default: () => ({})
|
|
132
|
-
},
|
|
133
|
-
|
|
134
137
|
fieldsProps: {
|
|
135
138
|
type: Object,
|
|
136
139
|
default: () => ({})
|
|
@@ -191,12 +194,19 @@ export default {
|
|
|
191
194
|
type: Boolean
|
|
192
195
|
},
|
|
193
196
|
|
|
194
|
-
|
|
197
|
+
useRemoveOnDestroy: {
|
|
198
|
+
type: Boolean,
|
|
199
|
+
default: true
|
|
200
|
+
},
|
|
201
|
+
|
|
202
|
+
modelValue: {
|
|
195
203
|
type: Array,
|
|
196
204
|
default: () => []
|
|
197
205
|
}
|
|
198
206
|
},
|
|
199
207
|
|
|
208
|
+
emits: ['update:modelValue'],
|
|
209
|
+
|
|
200
210
|
data () {
|
|
201
211
|
return {
|
|
202
212
|
nested: []
|
|
@@ -204,7 +214,7 @@ export default {
|
|
|
204
214
|
},
|
|
205
215
|
|
|
206
216
|
computed: {
|
|
207
|
-
|
|
217
|
+
fieldLabel () {
|
|
208
218
|
return this.field?.label
|
|
209
219
|
},
|
|
210
220
|
|
|
@@ -234,16 +244,16 @@ export default {
|
|
|
234
244
|
},
|
|
235
245
|
|
|
236
246
|
transformedErrors () {
|
|
237
|
-
return constructObject(this.fieldName, this.errors)
|
|
247
|
+
return Array.isArray(this.errors) ? this.errors : constructObject(this.fieldName, this.errors)
|
|
238
248
|
},
|
|
239
249
|
|
|
240
|
-
|
|
250
|
+
componentTag () {
|
|
241
251
|
return this.useAnimation ? 'transition-group' : 'div'
|
|
242
252
|
}
|
|
243
253
|
},
|
|
244
254
|
|
|
245
255
|
watch: {
|
|
246
|
-
|
|
256
|
+
modelValue: {
|
|
247
257
|
handler (value) {
|
|
248
258
|
this.nested = extend(true, [], value)
|
|
249
259
|
},
|
|
@@ -251,8 +261,8 @@ export default {
|
|
|
251
261
|
},
|
|
252
262
|
|
|
253
263
|
field: {
|
|
254
|
-
handler (
|
|
255
|
-
!this.
|
|
264
|
+
handler () {
|
|
265
|
+
!this.modelValue.length && this.setDefaultNestedValue()
|
|
256
266
|
},
|
|
257
267
|
immediate: true
|
|
258
268
|
}
|
|
@@ -267,7 +277,7 @@ export default {
|
|
|
267
277
|
this.setFocus()
|
|
268
278
|
})
|
|
269
279
|
|
|
270
|
-
return this.
|
|
280
|
+
return this.updateModelValue()
|
|
271
281
|
},
|
|
272
282
|
|
|
273
283
|
setFocus () {
|
|
@@ -277,31 +287,31 @@ export default {
|
|
|
277
287
|
return firstElementToBeFocused?.focus && firstElementToBeFocused.focus()
|
|
278
288
|
},
|
|
279
289
|
|
|
280
|
-
|
|
281
|
-
return this.$emit('
|
|
290
|
+
updateModelValue (value) {
|
|
291
|
+
return this.$emit('update:modelValue', value || this.nested)
|
|
282
292
|
},
|
|
283
293
|
|
|
284
294
|
destroy (index, row) {
|
|
285
|
-
|
|
286
|
-
? this.nested.splice(index, 1
|
|
287
|
-
: this.nested.splice(index, 1)
|
|
295
|
+
this.useRemoveOnDestroy
|
|
296
|
+
? this.nested.splice(index, 1)
|
|
297
|
+
: this.nested.splice(index, 1, { [this.destroyKey]: true, ...row })
|
|
288
298
|
|
|
289
|
-
return this.
|
|
299
|
+
return this.updateModelValue()
|
|
290
300
|
},
|
|
291
301
|
|
|
292
302
|
updateValuesFromInput (value, index) {
|
|
293
303
|
this.nested.splice(index, 1, value)
|
|
294
304
|
|
|
295
|
-
return this.
|
|
305
|
+
return this.updateModelValue(null, index)
|
|
296
306
|
},
|
|
297
307
|
|
|
298
|
-
|
|
308
|
+
setDefaultNestedValue () {
|
|
299
309
|
this.nested.splice(0, 0, { ...this.rowObject })
|
|
300
310
|
},
|
|
301
311
|
|
|
302
312
|
setScroll () {
|
|
303
313
|
const elements = this.$refs.inputContent.children
|
|
304
|
-
const element = elements[elements.length - 1]
|
|
314
|
+
const element = elements[elements.length - 1]
|
|
305
315
|
const { top } = element.getBoundingClientRect()
|
|
306
316
|
const pageOffset = window.pageYOffset
|
|
307
317
|
|
|
@@ -316,7 +326,7 @@ export default {
|
|
|
316
326
|
return this.useIndexLabel ? `${this.rowLabel} ${rowKey + 1}` : this.rowLabel
|
|
317
327
|
}
|
|
318
328
|
|
|
319
|
-
return this.
|
|
329
|
+
return this.fieldLabel
|
|
320
330
|
}
|
|
321
331
|
}
|
|
322
332
|
}
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
type: component
|
|
2
|
+
|
|
3
|
+
meta:
|
|
4
|
+
desc: Componente para gerar dinamicamente campos nested.
|
|
5
|
+
|
|
6
|
+
props:
|
|
7
|
+
add-input-label:
|
|
8
|
+
desc: Rótulo do input de adicionar novos campos.
|
|
9
|
+
default: Inserir novo campo
|
|
10
|
+
type: Boolean
|
|
11
|
+
|
|
12
|
+
btn-destroy-props:
|
|
13
|
+
desc: Props do botão de excluir linha contendo os campos.
|
|
14
|
+
default: "{ label: 'Remover', o_cancel, flat: true, dense: true }"
|
|
15
|
+
debugger: true
|
|
16
|
+
type: Object
|
|
17
|
+
|
|
18
|
+
btn-duplicate-props:
|
|
19
|
+
desc: Props do botão de duplicar linha contendo os campos.
|
|
20
|
+
default: "{ label: 'Duplicar', o_content_copy, flat: true, dense: true, hideMobileLabel: true }"
|
|
21
|
+
debugger: true
|
|
22
|
+
type: Object
|
|
23
|
+
|
|
24
|
+
destroy-key:
|
|
25
|
+
desc: Quando excluímos uma "row" e propriedade "useRemoveOnDestroy" for "false", adicionamos uma propriedade para saber que é para ser deletada, com esta prop você escolhe como se chamará essa chave.
|
|
26
|
+
default: destroyed
|
|
27
|
+
type: String
|
|
28
|
+
|
|
29
|
+
model-value:
|
|
30
|
+
desc: Model do componente
|
|
31
|
+
default: []
|
|
32
|
+
type: Array
|
|
33
|
+
examples: [v-model="value"]
|
|
34
|
+
model: true
|
|
35
|
+
|
|
36
|
+
errors:
|
|
37
|
+
desc: Propriedade de erros para mostrar nos campos gerados.
|
|
38
|
+
default: {}
|
|
39
|
+
type: [Array, Object]
|
|
40
|
+
|
|
41
|
+
field:
|
|
42
|
+
desc: Field contendo informações necessárias para a criação do campo correspondente.
|
|
43
|
+
default: {}
|
|
44
|
+
required: true
|
|
45
|
+
type: Object
|
|
46
|
+
examples: ["{ name: 'meuNested', type: 'nested', label: 'Campo nested', children: [...] }"]
|
|
47
|
+
|
|
48
|
+
fields-props:
|
|
49
|
+
desc: Propriedade para repassar propriedades para cada campo individualmente.
|
|
50
|
+
default: {}
|
|
51
|
+
type: Object
|
|
52
|
+
examples: ["{ name: { dense: true, onClick: () => alert('Estou sendo clicado') } }"]
|
|
53
|
+
|
|
54
|
+
form-columns:
|
|
55
|
+
desc: Colunas do grid de cada campo.
|
|
56
|
+
default: {}
|
|
57
|
+
type: Object
|
|
58
|
+
examples: ["{ name: { sm: 6, md: 12 } }", "[{ sm: 6, md: 12 }]"]
|
|
59
|
+
|
|
60
|
+
form-gutter:
|
|
61
|
+
desc: Espaçamento entre cada campo.
|
|
62
|
+
default: md
|
|
63
|
+
type: String
|
|
64
|
+
examples: [xs, sm, md, lg, xl]
|
|
65
|
+
|
|
66
|
+
row-label:
|
|
67
|
+
desc: Rótulo entre cada linha (row).
|
|
68
|
+
type: String
|
|
69
|
+
|
|
70
|
+
row-object:
|
|
71
|
+
desc: Objeto contendo valores iniciais do model de cada linha (row).
|
|
72
|
+
default: {}
|
|
73
|
+
type: Object
|
|
74
|
+
examples: ["{ name: '', cities: [] }"]
|
|
75
|
+
|
|
76
|
+
use-animation:
|
|
77
|
+
desc: Controla a animação na hora de setar o scroll.
|
|
78
|
+
default: true
|
|
79
|
+
type: Boolean
|
|
80
|
+
|
|
81
|
+
use-destroy-always:
|
|
82
|
+
desc: Controla o botão de remover em todas linhas (row), incluindo a primeira.
|
|
83
|
+
type: Boolean
|
|
84
|
+
|
|
85
|
+
use-duplicate:
|
|
86
|
+
desc: Controla o botão de duplicar linha.
|
|
87
|
+
default: true
|
|
88
|
+
type: Boolean
|
|
89
|
+
|
|
90
|
+
use-index-label:
|
|
91
|
+
desc: Se tiver "rowLabel" esta prop controla se cada label da linha vai ter o index como sufixo.
|
|
92
|
+
type: Boolean
|
|
93
|
+
|
|
94
|
+
use-inline-actions:
|
|
95
|
+
desc: Controla o comportamento referente aos estilos das ações de duplicar/adicionar/remover
|
|
96
|
+
type: Boolean
|
|
97
|
+
|
|
98
|
+
use-single-label:
|
|
99
|
+
desc: Se o valor for "true", então vai exibir apenas uma label referente a todas linhas (row) e não uma por linha
|
|
100
|
+
type: Boolean
|
|
101
|
+
|
|
102
|
+
use-remove-on-destroy:
|
|
103
|
+
desc: Se o valor for "true" o valor do model será removido senão será adicionar uma flag como `destroyed` por exemplo.
|
|
104
|
+
default: true
|
|
105
|
+
type: Boolean
|
|
106
|
+
|
|
107
|
+
slots:
|
|
108
|
+
fields:
|
|
109
|
+
desc: Substitui o "QasFormGenerator".
|
|
110
|
+
scope:
|
|
111
|
+
fields:
|
|
112
|
+
desc: Campos atuais.
|
|
113
|
+
default: {}
|
|
114
|
+
type: Object
|
|
115
|
+
|
|
116
|
+
index:
|
|
117
|
+
desc: Index atual dos campos
|
|
118
|
+
type: Number
|
|
119
|
+
|
|
120
|
+
errors:
|
|
121
|
+
desc: Index atual dos campos
|
|
122
|
+
type: Number
|
|
123
|
+
|
|
124
|
+
'updateValue -> function(value, index)':
|
|
125
|
+
desc: Função para atualizar o model, passando o novo valor e o index.
|
|
126
|
+
type: Function
|
|
127
|
+
examples: ["updateValue({ name: 'novo valor' }, 2)"]
|
|
128
|
+
|
|
129
|
+
'field-[nome-da-chave]':
|
|
130
|
+
desc: Repassa todos os slots e escopos do "QasFormGenerator".
|
|
131
|
+
scope:
|
|
132
|
+
index:
|
|
133
|
+
desc: Index atual dos campos
|
|
134
|
+
type: Number
|
|
135
|
+
|
|
136
|
+
errors:
|
|
137
|
+
desc: Index atual dos campos
|
|
138
|
+
type: Number
|
|
139
|
+
|
|
140
|
+
'updateValue -> function(value, index)':
|
|
141
|
+
desc: Função para atualizar o model, passando o novo valor e o index.
|
|
142
|
+
type: Function
|
|
143
|
+
examples: ["updateValue({ name: 'novo valor' }, 2)"]
|
|
144
|
+
|
|
145
|
+
custom-fields:
|
|
146
|
+
desc: Slot para adicionar um campo customizado.
|
|
147
|
+
scope:
|
|
148
|
+
fields:
|
|
149
|
+
desc: Campos atuais.
|
|
150
|
+
default: {}
|
|
151
|
+
type: Object
|
|
152
|
+
|
|
153
|
+
index:
|
|
154
|
+
desc: Index atual dos campos
|
|
155
|
+
type: Number
|
|
156
|
+
|
|
157
|
+
errors:
|
|
158
|
+
desc: Index atual dos campos
|
|
159
|
+
type: Number
|
|
160
|
+
|
|
161
|
+
'updateValue -> function(value, index)':
|
|
162
|
+
desc: Função para atualizar o model, passando o novo valor e o index.
|
|
163
|
+
type: Function
|
|
164
|
+
examples: ["updateValue({ name: 'novo valor' }, 2)"]
|
|
165
|
+
|
|
166
|
+
add-input:
|
|
167
|
+
desc: Slot para acessar campo de adicionar.
|
|
168
|
+
scope:
|
|
169
|
+
'add -> function(row)':
|
|
170
|
+
desc: Função para adicionar novos campos no model.
|
|
171
|
+
type: Function
|
|
172
|
+
examples: ["add({ name: 'novo valor' })"]
|
|
173
|
+
|
|
174
|
+
events:
|
|
175
|
+
'@update:model-value -> function (value)':
|
|
176
|
+
desc: Dispara toda vez que o model é atualizado, também utilizado para v-model.
|
|
177
|
+
params:
|
|
178
|
+
value:
|
|
179
|
+
desc: Novo valor do v-model
|
|
180
|
+
type: String
|
|
@@ -1,22 +1,24 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<
|
|
3
|
-
<
|
|
4
|
-
<
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
</q-field>
|
|
8
|
-
</div>
|
|
2
|
+
<q-field v-model="model" outlined>
|
|
3
|
+
<template #control="{ emitValue, floatingLabel, id, value }">
|
|
4
|
+
<input v-show="floatingLabel" :id="id" ref="input" class="q-field__input" :model-value="value" @input="emitValue($event.target.value)">
|
|
5
|
+
</template>
|
|
6
|
+
</q-field>
|
|
9
7
|
</template>
|
|
10
8
|
|
|
11
9
|
<script>
|
|
10
|
+
import AutoNumeric from 'autonumeric'
|
|
11
|
+
|
|
12
12
|
const defaultModes = {
|
|
13
|
-
integer: ['commaDecimalCharDotSeparator', 'integer'],
|
|
14
13
|
decimal: 'commaDecimalCharDotSeparator',
|
|
15
|
-
|
|
16
|
-
money: 'Brazilian'
|
|
14
|
+
integer: ['commaDecimalCharDotSeparator', 'integer'],
|
|
15
|
+
money: 'Brazilian',
|
|
16
|
+
percent: 'percentageEU2dec'
|
|
17
17
|
}
|
|
18
18
|
|
|
19
19
|
export default {
|
|
20
|
+
name: 'QasNumericInput',
|
|
21
|
+
|
|
20
22
|
props: {
|
|
21
23
|
allowNegative: {
|
|
22
24
|
default: true,
|
|
@@ -44,19 +46,27 @@ export default {
|
|
|
44
46
|
validator: value => ['integer', 'decimal', 'percent', 'money'].includes(value)
|
|
45
47
|
},
|
|
46
48
|
|
|
49
|
+
modelValue: {
|
|
50
|
+
default: '',
|
|
51
|
+
type: [String, Number],
|
|
52
|
+
validator: value => {
|
|
53
|
+
return (
|
|
54
|
+
typeof value === 'number' ||
|
|
55
|
+
typeof value === 'string' ||
|
|
56
|
+
value === '' ||
|
|
57
|
+
value === null
|
|
58
|
+
)
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
|
|
47
62
|
preset: {
|
|
48
63
|
default: false,
|
|
49
64
|
type: [Boolean, String]
|
|
50
|
-
},
|
|
51
|
-
|
|
52
|
-
value: {
|
|
53
|
-
default: '',
|
|
54
|
-
validator (value) {
|
|
55
|
-
return typeof value === 'number' || typeof value === 'string' || value === '' || value === null
|
|
56
|
-
}
|
|
57
65
|
}
|
|
58
66
|
},
|
|
59
67
|
|
|
68
|
+
emits: ['update:modelValue'],
|
|
69
|
+
|
|
60
70
|
data () {
|
|
61
71
|
return {
|
|
62
72
|
autoNumeric: null
|
|
@@ -70,17 +80,16 @@ export default {
|
|
|
70
80
|
|
|
71
81
|
model: {
|
|
72
82
|
get () {
|
|
73
|
-
return this.
|
|
83
|
+
return this.modelValue
|
|
74
84
|
},
|
|
75
85
|
|
|
76
86
|
set () {
|
|
77
|
-
this.$emit('
|
|
87
|
+
this.$emit('update:modelValue', this.autoNumeric.getNumber())
|
|
78
88
|
}
|
|
79
89
|
}
|
|
80
90
|
},
|
|
81
91
|
|
|
82
92
|
async created () {
|
|
83
|
-
const AutoNumeric = (await import('autonumeric')).default
|
|
84
93
|
const autoNumericPredefinedOptions = AutoNumeric.getPredefinedOptions()
|
|
85
94
|
|
|
86
95
|
let option = this.preset || this.defaultMode
|
|
@@ -110,12 +119,12 @@ export default {
|
|
|
110
119
|
Object.assign(options, this.autonumericProps)
|
|
111
120
|
|
|
112
121
|
this.$nextTick(() => {
|
|
113
|
-
this.$refs.input.value = this.
|
|
122
|
+
this.$refs.input.value = this.modelValue
|
|
114
123
|
this.autoNumeric = new AutoNumeric(this.$refs.input, options)
|
|
115
124
|
})
|
|
116
125
|
},
|
|
117
126
|
|
|
118
|
-
|
|
127
|
+
beforeUnmount () {
|
|
119
128
|
this.autoNumeric.remove()
|
|
120
129
|
}
|
|
121
130
|
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
type: component
|
|
2
|
+
|
|
3
|
+
mixins:
|
|
4
|
+
- quasar/dist/api/QField.json
|
|
5
|
+
|
|
6
|
+
meta:
|
|
7
|
+
desc: Componente de input para decimal, inteiro, dinheiro e porcentagem.
|
|
8
|
+
|
|
9
|
+
props:
|
|
10
|
+
allow-negative:
|
|
11
|
+
desc: Controla se pode ou não números negativos.
|
|
12
|
+
default: true
|
|
13
|
+
type: Boolean
|
|
14
|
+
|
|
15
|
+
allow-positive:
|
|
16
|
+
desc: Controla se pode ou não números positivos.
|
|
17
|
+
default: true
|
|
18
|
+
type: Boolean
|
|
19
|
+
|
|
20
|
+
autonumeric-props:
|
|
21
|
+
desc: Opções do autonumeric (http://autonumeric.org/guide).
|
|
22
|
+
default: {}
|
|
23
|
+
type: Object
|
|
24
|
+
|
|
25
|
+
decimal-places:
|
|
26
|
+
desc: Quantidade de casas decimais.
|
|
27
|
+
default: 2
|
|
28
|
+
type: Number
|
|
29
|
+
|
|
30
|
+
mode:
|
|
31
|
+
desc: Modo do componente.
|
|
32
|
+
default: integer
|
|
33
|
+
type: String
|
|
34
|
+
examples: [integer, decimal, percent, money]
|
|
35
|
+
|
|
36
|
+
model-value:
|
|
37
|
+
desc: Model do componente, usado para v-model, sempre que alterado transforma o valor para "Number".
|
|
38
|
+
default: ''
|
|
39
|
+
type: [String, Number]
|
|
40
|
+
model: true
|
|
41
|
+
|
|
42
|
+
preset:
|
|
43
|
+
desc: Propriedade preset serve para usar configuração de predefinição/nacionalidade da moeda pré setada pelo autonumeric (Brasil é o padrão).
|
|
44
|
+
type: [Boolean, String]
|
|
45
|
+
|
|
46
|
+
events:
|
|
47
|
+
'@update:model-value -> function (value)':
|
|
48
|
+
desc: Dispara toda vez que o model é atualizado, também utilizado para v-model.
|
|
49
|
+
params:
|
|
50
|
+
value:
|
|
51
|
+
desc: Novo valor do v-model
|
|
@@ -6,28 +6,29 @@
|
|
|
6
6
|
{{ title }}
|
|
7
7
|
</q-toolbar-title>
|
|
8
8
|
|
|
9
|
-
<q-breadcrumbs v-if="
|
|
10
|
-
<q-breadcrumbs-el v-for="item in transformedBreadcrumbs" :key="item.label" :label="item.label" :to="item.route" />
|
|
9
|
+
<q-breadcrumbs v-if="useBreadcrumbs" class="text-caption" separator-color="grey-7">
|
|
10
|
+
<q-breadcrumbs-el v-for="(item, index) in transformedBreadcrumbs" :key="item.label" :class="getBreadcrumbsClass(index)" :label="item.label" :to="item.route" />
|
|
11
11
|
</q-breadcrumbs>
|
|
12
12
|
</div>
|
|
13
|
-
|
|
14
13
|
<slot />
|
|
15
14
|
</q-toolbar>
|
|
16
15
|
</template>
|
|
17
16
|
|
|
18
17
|
<script>
|
|
19
|
-
import { castArray
|
|
20
|
-
import { history,
|
|
18
|
+
import { castArray } from 'lodash-es'
|
|
19
|
+
import { history, getPreviousRoute } from '../../store/history'
|
|
21
20
|
|
|
22
21
|
export default {
|
|
22
|
+
name: 'QasPageHeader',
|
|
23
|
+
|
|
23
24
|
props: {
|
|
24
25
|
breadcrumbs: {
|
|
25
26
|
default: '',
|
|
26
|
-
type: [Array,
|
|
27
|
+
type: [Array, String]
|
|
27
28
|
},
|
|
28
29
|
|
|
29
|
-
|
|
30
|
-
default:
|
|
30
|
+
useBreadcrumbs: {
|
|
31
|
+
default: true,
|
|
31
32
|
type: Boolean
|
|
32
33
|
},
|
|
33
34
|
|
|
@@ -60,8 +61,10 @@ export default {
|
|
|
60
61
|
item.route = { name: item.routeName }
|
|
61
62
|
}
|
|
62
63
|
|
|
63
|
-
|
|
64
|
-
|
|
64
|
+
const historyList = history.list
|
|
65
|
+
|
|
66
|
+
if (historyList.length && item?.route?.name) {
|
|
67
|
+
const previous = historyList.find(history => history.name === item.route.name)
|
|
65
68
|
item.route.query = previous ? previous.query : null
|
|
66
69
|
}
|
|
67
70
|
|
|
@@ -72,7 +75,13 @@ export default {
|
|
|
72
75
|
|
|
73
76
|
methods: {
|
|
74
77
|
back () {
|
|
75
|
-
this.$router.push(
|
|
78
|
+
this.$router.push(getPreviousRoute(this.$route))
|
|
79
|
+
},
|
|
80
|
+
|
|
81
|
+
getBreadcrumbsClass (index) {
|
|
82
|
+
const lastIndex = this.transformedBreadcrumbs.length - 1
|
|
83
|
+
|
|
84
|
+
return lastIndex === index ? 'text-grey-7' : 'text-primary'
|
|
76
85
|
}
|
|
77
86
|
},
|
|
78
87
|
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
type: component
|
|
2
|
+
|
|
3
|
+
mixins:
|
|
4
|
+
- quasar/dist/api/QToolbar.json
|
|
5
|
+
|
|
6
|
+
meta:
|
|
7
|
+
desc: Componente para cabeçalho de páginas com breadcrumbs e botão de voltar baseado no histórico de navegação dentro da aplicação.
|
|
8
|
+
|
|
9
|
+
props:
|
|
10
|
+
breadcrumbs:
|
|
11
|
+
desc: Configurações do QBreadcrumbs (https://quasar.dev/vue-components/breadcrumbs#introduction).
|
|
12
|
+
type: [Array, String]
|
|
13
|
+
|
|
14
|
+
use-breadcrumbs:
|
|
15
|
+
desc: Habilita ou não o breadcrumbs.
|
|
16
|
+
type: [Array, String]
|
|
17
|
+
|
|
18
|
+
title:
|
|
19
|
+
desc: Título do cabeçalho.
|
|
20
|
+
type: String
|
|
21
|
+
|
|
22
|
+
root:
|
|
23
|
+
desc: Rota raiz do breadcrumbs.
|
|
24
|
+
type: [Object, String]
|