@d-mok/quasar-app-extension-quasar-axe 2.1.21 → 2.1.23
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/.gitattributes +2 -2
- package/package.json +46 -46
- package/shims-vue.d.ts +5 -5
- package/src/index.js +31 -31
- package/src/install.js +6 -6
- package/src/prompts.js +3 -3
- package/src/templates/src/boot/axe/AutoReg.ts +18 -18
- package/src/templates/src/boot/axe/AutoRoute.ts +40 -40
- package/src/templates/src/boot/axe/Interceptor.ts +86 -86
- package/src/templates/src/boot/axe/components/QxBtn.vue +30 -30
- package/src/templates/src/boot/axe/components/QxBtnIcon.vue +11 -11
- package/src/templates/src/boot/axe/components/QxBtnToggle.vue +42 -42
- package/src/templates/src/boot/axe/components/QxFloatBtn.vue +46 -46
- package/src/templates/src/boot/axe/components/QxImg.vue +22 -22
- package/src/templates/src/boot/axe/components/QxInputAutocomplete.vue +51 -51
- package/src/templates/src/boot/axe/components/QxLayout.vue +123 -123
- package/src/templates/src/boot/axe/components/QxMenuItem.vue +36 -36
- package/src/templates/src/boot/axe/components/QxPlate.vue +151 -151
- package/src/templates/src/boot/axe/components/QxRadio.vue +42 -42
- package/src/templates/src/boot/axe/components/QxSelect.vue +57 -57
- package/src/templates/src/boot/axe/components/QxSignoutBtn.vue +16 -16
- package/src/templates/src/boot/axe/components/QxSortable.vue +65 -65
- package/src/templates/src/boot/axe/components/QxText.vue +37 -37
- package/src/templates/src/boot/axe/components/QxWidget.vue +67 -67
- package/src/templates/src/utils/csv.ts +16 -16
- package/src/templates/src/utils/dialog/advanced.ts +228 -228
- package/src/templates/src/utils/dialog/basic.ts +164 -164
- package/src/templates/src/utils/dialog/custom/dialogBtn.vue +49 -49
- package/src/templates/src/utils/dialog/custom/dialogFile.vue +52 -52
- package/src/templates/src/utils/dialog/custom/dialogForm.vue +128 -128
- package/src/templates/src/utils/dialog/custom/dialogTable.vue +123 -123
- package/src/templates/src/utils/dialog/custom/dialogTextarea.vue +54 -54
- package/src/templates/src/utils/dialog/custom/handson.vue +133 -133
- package/src/templates/src/utils/dialog/custom/schema.ts +96 -96
- package/src/templates/src/utils/dialog/index.ts +4 -4
- package/src/templates/src/utils/dialog/tool.ts +11 -11
- package/src/templates/src/utils/index.ts +20 -20
- package/src/templates/src/utils/notify.ts +35 -35
- package/src/templates/src/utils/puppets/builder/index.ts +226 -226
- package/src/templates/src/utils/puppets/builder/ui.ts +31 -31
- package/src/templates/src/utils/puppets/core/db.ts +127 -127
- package/src/templates/src/utils/puppets/core/index.ts +44 -44
- package/src/templates/src/utils/puppets/entity.ts +39 -39
- package/src/templates/src/utils/puppets/index.ts +2 -2
- package/src/templates/src/utils/puppets/table.ts +212 -212
- package/src/templates/src/utils/puppets/type.ts +15 -15
- package/src/templates/src/utils/supabase.ts +117 -117
- package/src/templates/src/utils/zip.ts +43 -43
- package/src/uninstall.js +5 -5
- package/tsconfig.json +76 -76
|
@@ -1,46 +1,46 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<q-page-sticky
|
|
3
|
-
:position="position"
|
|
4
|
-
:offset="[18, 18]"
|
|
5
|
-
>
|
|
6
|
-
<q-fab
|
|
7
|
-
:color="color"
|
|
8
|
-
:icon="icon"
|
|
9
|
-
:direction="direction"
|
|
10
|
-
glossy
|
|
11
|
-
push
|
|
12
|
-
:vertical-actions-align="align"
|
|
13
|
-
:label="label"
|
|
14
|
-
>
|
|
15
|
-
<q-fab-action
|
|
16
|
-
v-for="ac in actions"
|
|
17
|
-
:color="ac.color"
|
|
18
|
-
:icon="ac.icon"
|
|
19
|
-
:label="ac.label"
|
|
20
|
-
@click="ac.onClick()"
|
|
21
|
-
/>
|
|
22
|
-
</q-fab>
|
|
23
|
-
</q-page-sticky>
|
|
24
|
-
</template>
|
|
25
|
-
|
|
26
|
-
<script lang="ts" setup>
|
|
27
|
-
type action = {
|
|
28
|
-
color: string
|
|
29
|
-
icon: string
|
|
30
|
-
label: string
|
|
31
|
-
onClick: () => void
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
const props = defineProps<{
|
|
35
|
-
position: 'bottom-left' | 'bottom-right'
|
|
36
|
-
color?: string
|
|
37
|
-
icon: string
|
|
38
|
-
label?: string
|
|
39
|
-
actions: action[]
|
|
40
|
-
}>()
|
|
41
|
-
|
|
42
|
-
let direction: 'up' | 'left' | 'right' | 'down' = 'up'
|
|
43
|
-
let align: 'left' | 'right' | 'center' = 'left'
|
|
44
|
-
if (props.position === 'bottom-left') align = 'left'
|
|
45
|
-
if (props.position === 'bottom-right') align = 'right'
|
|
46
|
-
</script>
|
|
1
|
+
<template>
|
|
2
|
+
<q-page-sticky
|
|
3
|
+
:position="position"
|
|
4
|
+
:offset="[18, 18]"
|
|
5
|
+
>
|
|
6
|
+
<q-fab
|
|
7
|
+
:color="color"
|
|
8
|
+
:icon="icon"
|
|
9
|
+
:direction="direction"
|
|
10
|
+
glossy
|
|
11
|
+
push
|
|
12
|
+
:vertical-actions-align="align"
|
|
13
|
+
:label="label"
|
|
14
|
+
>
|
|
15
|
+
<q-fab-action
|
|
16
|
+
v-for="ac in actions"
|
|
17
|
+
:color="ac.color"
|
|
18
|
+
:icon="ac.icon"
|
|
19
|
+
:label="ac.label"
|
|
20
|
+
@click="ac.onClick()"
|
|
21
|
+
/>
|
|
22
|
+
</q-fab>
|
|
23
|
+
</q-page-sticky>
|
|
24
|
+
</template>
|
|
25
|
+
|
|
26
|
+
<script lang="ts" setup>
|
|
27
|
+
type action = {
|
|
28
|
+
color: string
|
|
29
|
+
icon: string
|
|
30
|
+
label: string
|
|
31
|
+
onClick: () => void
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
const props = defineProps<{
|
|
35
|
+
position: 'bottom-left' | 'bottom-right'
|
|
36
|
+
color?: string
|
|
37
|
+
icon: string
|
|
38
|
+
label?: string
|
|
39
|
+
actions: action[]
|
|
40
|
+
}>()
|
|
41
|
+
|
|
42
|
+
let direction: 'up' | 'left' | 'right' | 'down' = 'up'
|
|
43
|
+
let align: 'left' | 'right' | 'center' = 'left'
|
|
44
|
+
if (props.position === 'bottom-left') align = 'left'
|
|
45
|
+
if (props.position === 'bottom-right') align = 'right'
|
|
46
|
+
</script>
|
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<img
|
|
3
|
-
:sizes="100 * (scale ?? 1) + 'px'"
|
|
4
|
-
:srcset="src + ' 100w'"
|
|
5
|
-
:src="src ?? undefined"
|
|
6
|
-
:class="{ border: bordered ?? false }"
|
|
7
|
-
/>
|
|
8
|
-
</template>
|
|
9
|
-
|
|
10
|
-
<script lang="ts" setup>
|
|
11
|
-
const props = defineProps<{
|
|
12
|
-
src: string | undefined
|
|
13
|
-
bordered?: boolean
|
|
14
|
-
scale?: number
|
|
15
|
-
}>()
|
|
16
|
-
</script>
|
|
17
|
-
|
|
18
|
-
<style scoped>
|
|
19
|
-
.border {
|
|
20
|
-
border: 2px solid;
|
|
21
|
-
}
|
|
22
|
-
</style>
|
|
1
|
+
<template>
|
|
2
|
+
<img
|
|
3
|
+
:sizes="100 * (scale ?? 1) + 'px'"
|
|
4
|
+
:srcset="src + ' 100w'"
|
|
5
|
+
:src="src ?? undefined"
|
|
6
|
+
:class="{ border: bordered ?? false }"
|
|
7
|
+
/>
|
|
8
|
+
</template>
|
|
9
|
+
|
|
10
|
+
<script lang="ts" setup>
|
|
11
|
+
const props = defineProps<{
|
|
12
|
+
src: string | undefined
|
|
13
|
+
bordered?: boolean
|
|
14
|
+
scale?: number
|
|
15
|
+
}>()
|
|
16
|
+
</script>
|
|
17
|
+
|
|
18
|
+
<style scoped>
|
|
19
|
+
.border {
|
|
20
|
+
border: 2px solid;
|
|
21
|
+
}
|
|
22
|
+
</style>
|
|
@@ -1,51 +1,51 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<q-select
|
|
3
|
-
:model-value="text"
|
|
4
|
-
use-input
|
|
5
|
-
hide-selected
|
|
6
|
-
fill-input
|
|
7
|
-
hide-dropdown-icon
|
|
8
|
-
input-debounce="0"
|
|
9
|
-
:options="options"
|
|
10
|
-
@filter="filterFn"
|
|
11
|
-
@input-value="setModel"
|
|
12
|
-
v-bind="$attrs"
|
|
13
|
-
>
|
|
14
|
-
</q-select>
|
|
15
|
-
</template>
|
|
16
|
-
|
|
17
|
-
<script lang="ts" setup>
|
|
18
|
-
import { useVModel } from '@vueuse/core'
|
|
19
|
-
import _ from 'lodash'
|
|
20
|
-
import { ref, watch } from 'vue'
|
|
21
|
-
|
|
22
|
-
const props = defineProps<{
|
|
23
|
-
autocomplete: string[]
|
|
24
|
-
modelValue: any
|
|
25
|
-
}>()
|
|
26
|
-
|
|
27
|
-
const emits = defineEmits(['update:modelValue'])
|
|
28
|
-
|
|
29
|
-
const text = useVModel(props, 'modelValue', emits)
|
|
30
|
-
if (!text.value) text.value = null
|
|
31
|
-
|
|
32
|
-
let options = ref<string[]>([])
|
|
33
|
-
|
|
34
|
-
function filterFn(val: any, update: any) {
|
|
35
|
-
if (!val) val = text.value
|
|
36
|
-
update(() => {
|
|
37
|
-
if (!val) {
|
|
38
|
-
options.value = []
|
|
39
|
-
return
|
|
40
|
-
}
|
|
41
|
-
const needle = val.toLowerCase()
|
|
42
|
-
options.value = props.autocomplete.filter(
|
|
43
|
-
v => v.toLowerCase().indexOf(needle) > -1
|
|
44
|
-
)
|
|
45
|
-
})
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
function setModel(val: string) {
|
|
49
|
-
text.value = val
|
|
50
|
-
}
|
|
51
|
-
</script>
|
|
1
|
+
<template>
|
|
2
|
+
<q-select
|
|
3
|
+
:model-value="text"
|
|
4
|
+
use-input
|
|
5
|
+
hide-selected
|
|
6
|
+
fill-input
|
|
7
|
+
hide-dropdown-icon
|
|
8
|
+
input-debounce="0"
|
|
9
|
+
:options="options"
|
|
10
|
+
@filter="filterFn"
|
|
11
|
+
@input-value="setModel"
|
|
12
|
+
v-bind="$attrs"
|
|
13
|
+
>
|
|
14
|
+
</q-select>
|
|
15
|
+
</template>
|
|
16
|
+
|
|
17
|
+
<script lang="ts" setup>
|
|
18
|
+
import { useVModel } from '@vueuse/core'
|
|
19
|
+
import _ from 'lodash'
|
|
20
|
+
import { ref, watch } from 'vue'
|
|
21
|
+
|
|
22
|
+
const props = defineProps<{
|
|
23
|
+
autocomplete: string[]
|
|
24
|
+
modelValue: any
|
|
25
|
+
}>()
|
|
26
|
+
|
|
27
|
+
const emits = defineEmits(['update:modelValue'])
|
|
28
|
+
|
|
29
|
+
const text = useVModel(props, 'modelValue', emits)
|
|
30
|
+
if (!text.value) text.value = null
|
|
31
|
+
|
|
32
|
+
let options = ref<string[]>([])
|
|
33
|
+
|
|
34
|
+
function filterFn(val: any, update: any) {
|
|
35
|
+
if (!val) val = text.value
|
|
36
|
+
update(() => {
|
|
37
|
+
if (!val) {
|
|
38
|
+
options.value = []
|
|
39
|
+
return
|
|
40
|
+
}
|
|
41
|
+
const needle = val.toLowerCase()
|
|
42
|
+
options.value = props.autocomplete.filter(
|
|
43
|
+
v => v.toLowerCase().indexOf(needle) > -1
|
|
44
|
+
)
|
|
45
|
+
})
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
function setModel(val: string) {
|
|
49
|
+
text.value = val
|
|
50
|
+
}
|
|
51
|
+
</script>
|
|
@@ -1,123 +1,123 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<q-layout :view="view">
|
|
3
|
-
<q-header
|
|
4
|
-
v-if="!noHeader"
|
|
5
|
-
elevated
|
|
6
|
-
z-top
|
|
7
|
-
>
|
|
8
|
-
<q-toolbar>
|
|
9
|
-
<q-btn
|
|
10
|
-
flat
|
|
11
|
-
round
|
|
12
|
-
icon="menu"
|
|
13
|
-
aria-label="Menu"
|
|
14
|
-
@click="open = !open"
|
|
15
|
-
/>
|
|
16
|
-
<q-toolbar-title class="text-weight-bolder text-h5">{{
|
|
17
|
-
title
|
|
18
|
-
}}</q-toolbar-title>
|
|
19
|
-
<div
|
|
20
|
-
class="text-h6"
|
|
21
|
-
@click="onClickAppendix?.()"
|
|
22
|
-
:class="{ clickable: onClickAppendix }"
|
|
23
|
-
>
|
|
24
|
-
{{ appendix }}
|
|
25
|
-
</div>
|
|
26
|
-
</q-toolbar>
|
|
27
|
-
</q-header>
|
|
28
|
-
|
|
29
|
-
<q-drawer
|
|
30
|
-
v-model="open"
|
|
31
|
-
elevated
|
|
32
|
-
:show-if-above="showDrawer"
|
|
33
|
-
>
|
|
34
|
-
<q-item-label
|
|
35
|
-
class="text-h6 q-mt-xs"
|
|
36
|
-
header
|
|
37
|
-
>Menu</q-item-label
|
|
38
|
-
>
|
|
39
|
-
<q-separator />
|
|
40
|
-
<q-list separator>
|
|
41
|
-
<qx-menu-item
|
|
42
|
-
v-for="item in items"
|
|
43
|
-
:key="item.title"
|
|
44
|
-
v-bind="item"
|
|
45
|
-
/>
|
|
46
|
-
</q-list>
|
|
47
|
-
<q-separator />
|
|
48
|
-
<qx-menu-item
|
|
49
|
-
v-if="onSignOut"
|
|
50
|
-
icon="logout"
|
|
51
|
-
title="Sign Out"
|
|
52
|
-
:caption="account"
|
|
53
|
-
@click="onSignOut?.()"
|
|
54
|
-
/>
|
|
55
|
-
<q-separator v-if="onSignOut" />
|
|
56
|
-
</q-drawer>
|
|
57
|
-
|
|
58
|
-
<slot name="drawer"></slot>
|
|
59
|
-
|
|
60
|
-
<div
|
|
61
|
-
class="q-my-md q-mx-auto"
|
|
62
|
-
:style="{ 'max-width': width }"
|
|
63
|
-
>
|
|
64
|
-
<q-page-container>
|
|
65
|
-
<router-view
|
|
66
|
-
v-slot="{ Component }"
|
|
67
|
-
:key="$route.fullPath"
|
|
68
|
-
>
|
|
69
|
-
<transition
|
|
70
|
-
enter-active-class="animated fadeIn"
|
|
71
|
-
leave-active-class="animated fadeOut"
|
|
72
|
-
appear
|
|
73
|
-
mode="out-in"
|
|
74
|
-
:duration="200"
|
|
75
|
-
>
|
|
76
|
-
<component :is="Component" />
|
|
77
|
-
</transition>
|
|
78
|
-
</router-view>
|
|
79
|
-
</q-page-container>
|
|
80
|
-
</div>
|
|
81
|
-
</q-layout>
|
|
82
|
-
</template>
|
|
83
|
-
|
|
84
|
-
<script lang="ts" setup>
|
|
85
|
-
import { ref } from 'vue'
|
|
86
|
-
|
|
87
|
-
type item = {
|
|
88
|
-
title: string
|
|
89
|
-
caption?: string
|
|
90
|
-
icon: string
|
|
91
|
-
link: string
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
const props = withDefaults(
|
|
95
|
-
defineProps<{
|
|
96
|
-
title: string
|
|
97
|
-
appendix?: string
|
|
98
|
-
onClickAppendix?: () => void
|
|
99
|
-
items: item[]
|
|
100
|
-
width?: string
|
|
101
|
-
showDrawer?: boolean
|
|
102
|
-
view?: string
|
|
103
|
-
noHeader?: boolean
|
|
104
|
-
onSignOut?: () => void
|
|
105
|
-
account?: string
|
|
106
|
-
}>(),
|
|
107
|
-
{
|
|
108
|
-
appendix: '',
|
|
109
|
-
width: '1200px',
|
|
110
|
-
showDrawer: false,
|
|
111
|
-
view: 'hHh LpR fFf',
|
|
112
|
-
noHeader: false,
|
|
113
|
-
}
|
|
114
|
-
)
|
|
115
|
-
|
|
116
|
-
let open = ref(false)
|
|
117
|
-
</script>
|
|
118
|
-
|
|
119
|
-
<style scoped>
|
|
120
|
-
.clickable {
|
|
121
|
-
cursor: pointer;
|
|
122
|
-
}
|
|
123
|
-
</style>
|
|
1
|
+
<template>
|
|
2
|
+
<q-layout :view="view">
|
|
3
|
+
<q-header
|
|
4
|
+
v-if="!noHeader"
|
|
5
|
+
elevated
|
|
6
|
+
z-top
|
|
7
|
+
>
|
|
8
|
+
<q-toolbar>
|
|
9
|
+
<q-btn
|
|
10
|
+
flat
|
|
11
|
+
round
|
|
12
|
+
icon="menu"
|
|
13
|
+
aria-label="Menu"
|
|
14
|
+
@click="open = !open"
|
|
15
|
+
/>
|
|
16
|
+
<q-toolbar-title class="text-weight-bolder text-h5">{{
|
|
17
|
+
title
|
|
18
|
+
}}</q-toolbar-title>
|
|
19
|
+
<div
|
|
20
|
+
class="text-h6"
|
|
21
|
+
@click="onClickAppendix?.()"
|
|
22
|
+
:class="{ clickable: onClickAppendix }"
|
|
23
|
+
>
|
|
24
|
+
{{ appendix }}
|
|
25
|
+
</div>
|
|
26
|
+
</q-toolbar>
|
|
27
|
+
</q-header>
|
|
28
|
+
|
|
29
|
+
<q-drawer
|
|
30
|
+
v-model="open"
|
|
31
|
+
elevated
|
|
32
|
+
:show-if-above="showDrawer"
|
|
33
|
+
>
|
|
34
|
+
<q-item-label
|
|
35
|
+
class="text-h6 q-mt-xs"
|
|
36
|
+
header
|
|
37
|
+
>Menu</q-item-label
|
|
38
|
+
>
|
|
39
|
+
<q-separator />
|
|
40
|
+
<q-list separator>
|
|
41
|
+
<qx-menu-item
|
|
42
|
+
v-for="item in items"
|
|
43
|
+
:key="item.title"
|
|
44
|
+
v-bind="item"
|
|
45
|
+
/>
|
|
46
|
+
</q-list>
|
|
47
|
+
<q-separator />
|
|
48
|
+
<qx-menu-item
|
|
49
|
+
v-if="onSignOut"
|
|
50
|
+
icon="logout"
|
|
51
|
+
title="Sign Out"
|
|
52
|
+
:caption="account"
|
|
53
|
+
@click="onSignOut?.()"
|
|
54
|
+
/>
|
|
55
|
+
<q-separator v-if="onSignOut" />
|
|
56
|
+
</q-drawer>
|
|
57
|
+
|
|
58
|
+
<slot name="drawer"></slot>
|
|
59
|
+
|
|
60
|
+
<div
|
|
61
|
+
class="q-my-md q-mx-auto"
|
|
62
|
+
:style="{ 'max-width': width }"
|
|
63
|
+
>
|
|
64
|
+
<q-page-container>
|
|
65
|
+
<router-view
|
|
66
|
+
v-slot="{ Component }"
|
|
67
|
+
:key="$route.fullPath"
|
|
68
|
+
>
|
|
69
|
+
<transition
|
|
70
|
+
enter-active-class="animated fadeIn"
|
|
71
|
+
leave-active-class="animated fadeOut"
|
|
72
|
+
appear
|
|
73
|
+
mode="out-in"
|
|
74
|
+
:duration="200"
|
|
75
|
+
>
|
|
76
|
+
<component :is="Component" />
|
|
77
|
+
</transition>
|
|
78
|
+
</router-view>
|
|
79
|
+
</q-page-container>
|
|
80
|
+
</div>
|
|
81
|
+
</q-layout>
|
|
82
|
+
</template>
|
|
83
|
+
|
|
84
|
+
<script lang="ts" setup>
|
|
85
|
+
import { ref } from 'vue'
|
|
86
|
+
|
|
87
|
+
type item = {
|
|
88
|
+
title: string
|
|
89
|
+
caption?: string
|
|
90
|
+
icon: string
|
|
91
|
+
link: string
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
const props = withDefaults(
|
|
95
|
+
defineProps<{
|
|
96
|
+
title: string
|
|
97
|
+
appendix?: string
|
|
98
|
+
onClickAppendix?: () => void
|
|
99
|
+
items: item[]
|
|
100
|
+
width?: string
|
|
101
|
+
showDrawer?: boolean
|
|
102
|
+
view?: string
|
|
103
|
+
noHeader?: boolean
|
|
104
|
+
onSignOut?: () => void
|
|
105
|
+
account?: string
|
|
106
|
+
}>(),
|
|
107
|
+
{
|
|
108
|
+
appendix: '',
|
|
109
|
+
width: '1200px',
|
|
110
|
+
showDrawer: false,
|
|
111
|
+
view: 'hHh LpR fFf',
|
|
112
|
+
noHeader: false,
|
|
113
|
+
}
|
|
114
|
+
)
|
|
115
|
+
|
|
116
|
+
let open = ref(false)
|
|
117
|
+
</script>
|
|
118
|
+
|
|
119
|
+
<style scoped>
|
|
120
|
+
.clickable {
|
|
121
|
+
cursor: pointer;
|
|
122
|
+
}
|
|
123
|
+
</style>
|
|
@@ -1,36 +1,36 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<q-item
|
|
3
|
-
clickable
|
|
4
|
-
:to="link"
|
|
5
|
-
>
|
|
6
|
-
<q-item-section
|
|
7
|
-
v-if="icon"
|
|
8
|
-
avatar
|
|
9
|
-
>
|
|
10
|
-
<q-icon :name="icon" />
|
|
11
|
-
</q-item-section>
|
|
12
|
-
|
|
13
|
-
<q-item-section>
|
|
14
|
-
<q-item-label
|
|
15
|
-
title
|
|
16
|
-
class="text-weight-bold"
|
|
17
|
-
>{{ title }}</q-item-label
|
|
18
|
-
>
|
|
19
|
-
<q-item-label
|
|
20
|
-
caption
|
|
21
|
-
v-if="caption"
|
|
22
|
-
>
|
|
23
|
-
{{ caption }}
|
|
24
|
-
</q-item-label>
|
|
25
|
-
</q-item-section>
|
|
26
|
-
</q-item>
|
|
27
|
-
</template>
|
|
28
|
-
|
|
29
|
-
<script lang="ts" setup>
|
|
30
|
-
defineProps<{
|
|
31
|
-
title: string
|
|
32
|
-
caption?: string
|
|
33
|
-
link?: string
|
|
34
|
-
icon?: string
|
|
35
|
-
}>()
|
|
36
|
-
</script>
|
|
1
|
+
<template>
|
|
2
|
+
<q-item
|
|
3
|
+
clickable
|
|
4
|
+
:to="link"
|
|
5
|
+
>
|
|
6
|
+
<q-item-section
|
|
7
|
+
v-if="icon"
|
|
8
|
+
avatar
|
|
9
|
+
>
|
|
10
|
+
<q-icon :name="icon" />
|
|
11
|
+
</q-item-section>
|
|
12
|
+
|
|
13
|
+
<q-item-section>
|
|
14
|
+
<q-item-label
|
|
15
|
+
title
|
|
16
|
+
class="text-weight-bold"
|
|
17
|
+
>{{ title }}</q-item-label
|
|
18
|
+
>
|
|
19
|
+
<q-item-label
|
|
20
|
+
caption
|
|
21
|
+
v-if="caption"
|
|
22
|
+
>
|
|
23
|
+
{{ caption }}
|
|
24
|
+
</q-item-label>
|
|
25
|
+
</q-item-section>
|
|
26
|
+
</q-item>
|
|
27
|
+
</template>
|
|
28
|
+
|
|
29
|
+
<script lang="ts" setup>
|
|
30
|
+
defineProps<{
|
|
31
|
+
title: string
|
|
32
|
+
caption?: string
|
|
33
|
+
link?: string
|
|
34
|
+
icon?: string
|
|
35
|
+
}>()
|
|
36
|
+
</script>
|