@drax/crud-vue 0.26.0 → 0.28.0
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 +7 -7
- package/src/EntityCrud.ts +38 -1
- package/src/components/Crud.vue +13 -3
- package/src/components/CrudFilters.vue +15 -11
- package/src/components/CrudFormField.vue +1 -1
- package/src/components/CrudList.vue +33 -11
- package/src/components/buttons/CrudCreateButton.vue +0 -1
- package/src/components/buttons/CrudUpdateButton.vue +1 -1
- package/src/components/buttons/CrudViewButton.vue +1 -1
- package/src/composables/UseCrud.ts +1 -0
- package/src/stores/UseCrudStore.ts +5 -0
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"publishConfig": {
|
|
4
4
|
"access": "public"
|
|
5
5
|
},
|
|
6
|
-
"version": "0.
|
|
6
|
+
"version": "0.28.0",
|
|
7
7
|
"type": "module",
|
|
8
8
|
"main": "./src/index.ts",
|
|
9
9
|
"module": "./src/index.ts",
|
|
@@ -24,16 +24,16 @@
|
|
|
24
24
|
"format": "prettier --write src/"
|
|
25
25
|
},
|
|
26
26
|
"dependencies": {
|
|
27
|
-
"@drax/common-front": "^0.
|
|
28
|
-
"@drax/crud-front": "^0.
|
|
29
|
-
"@drax/crud-share": "^0.
|
|
30
|
-
"@drax/media-vue": "^0.
|
|
27
|
+
"@drax/common-front": "^0.28.0",
|
|
28
|
+
"@drax/crud-front": "^0.28.0",
|
|
29
|
+
"@drax/crud-share": "^0.28.0",
|
|
30
|
+
"@drax/media-vue": "^0.28.0"
|
|
31
31
|
},
|
|
32
32
|
"peerDependencies": {
|
|
33
33
|
"pinia": "^2.2.2",
|
|
34
34
|
"vue": "^3.5.7",
|
|
35
35
|
"vue-i18n": "^9.14.0",
|
|
36
|
-
"vuetify": "^3.
|
|
36
|
+
"vuetify": "^3.9.2"
|
|
37
37
|
},
|
|
38
38
|
"devDependencies": {
|
|
39
39
|
"@rushstack/eslint-patch": "^1.8.0",
|
|
@@ -64,5 +64,5 @@
|
|
|
64
64
|
"vue-tsc": "^2.1.10",
|
|
65
65
|
"vuetify": "^3.8.2"
|
|
66
66
|
},
|
|
67
|
-
"gitHead": "
|
|
67
|
+
"gitHead": "062c6d15dbbf8b6e337869549ab0bdbc27200a9e"
|
|
68
68
|
}
|
package/src/EntityCrud.ts
CHANGED
|
@@ -30,7 +30,8 @@ class EntityCrud implements IEntityCrud {
|
|
|
30
30
|
key: 'actions',
|
|
31
31
|
sortable: false,
|
|
32
32
|
align: 'center',
|
|
33
|
-
minWidth: '190px'
|
|
33
|
+
minWidth: '190px',
|
|
34
|
+
fixed: 'end'
|
|
34
35
|
},
|
|
35
36
|
]
|
|
36
37
|
}
|
|
@@ -211,6 +212,42 @@ class EntityCrud implements IEntityCrud {
|
|
|
211
212
|
return true
|
|
212
213
|
}
|
|
213
214
|
|
|
215
|
+
get containerFluid(){
|
|
216
|
+
return false
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
get cardDensity() : 'default' | 'comfortable' | 'compact' {
|
|
220
|
+
return 'default'
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
get cardClass() : string {
|
|
224
|
+
return 'rounded-xl'
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
get toolbarDensity() : 'default' | 'comfortable' | 'compact' {
|
|
228
|
+
return 'default'
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
get toolbarClass() : string {
|
|
232
|
+
return 'bg-primary'
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
get tableDensity() : 'default' | 'comfortable' | 'compact' {
|
|
236
|
+
return 'default'
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
get headerProps(){
|
|
240
|
+
return { class: 'bg-primary' }
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
get tableStriped() : null | 'odd' | 'even' {
|
|
244
|
+
return 'even'
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
get footerClass(){
|
|
248
|
+
return 'bg-primary'
|
|
249
|
+
}
|
|
250
|
+
|
|
214
251
|
|
|
215
252
|
}
|
|
216
253
|
|
package/src/components/Crud.vue
CHANGED
|
@@ -22,14 +22,14 @@ onBeforeMount(() => {
|
|
|
22
22
|
prepareFilters()
|
|
23
23
|
})
|
|
24
24
|
|
|
25
|
-
const emit = defineEmits(['created', 'updated', 'deleted', 'viewed','canceled'])
|
|
25
|
+
const emit = defineEmits(['created', 'updated', 'deleted', 'viewed', 'canceled'])
|
|
26
26
|
|
|
27
27
|
|
|
28
28
|
</script>
|
|
29
29
|
|
|
30
30
|
<template>
|
|
31
|
-
<v-container fluid class="mt-5">
|
|
32
|
-
<v-card>
|
|
31
|
+
<v-container :fluid="entity.containerFluid" class="mt-5">
|
|
32
|
+
<v-card :class="entity.cardClass" :density="entity.cardDensity">
|
|
33
33
|
|
|
34
34
|
<crud-list
|
|
35
35
|
:entity="entity"
|
|
@@ -50,6 +50,16 @@ const emit = defineEmits(['created', 'updated', 'deleted', 'viewed','canceled'])
|
|
|
50
50
|
</slot>
|
|
51
51
|
</template>
|
|
52
52
|
|
|
53
|
+
<template v-for="iFilter in entity.filters"
|
|
54
|
+
:key="iFilter.name"
|
|
55
|
+
v-slot:[`filter.${iFilter.name}`]="{filter, filterIndex}"
|
|
56
|
+
>
|
|
57
|
+
<slot v-if="$slots[`filter.${iFilter.name}`]"
|
|
58
|
+
:name="`filter.${iFilter.name}`"
|
|
59
|
+
v-bind="{filter, filterIndex}"
|
|
60
|
+
/>
|
|
61
|
+
</template>
|
|
62
|
+
|
|
53
63
|
<template v-for="header in entity.headers" :key="header.key" v-slot:[`item.${header.key}`]="{item, value}">
|
|
54
64
|
<slot :name="`item.${header.key}`" v-bind="{item, value}">
|
|
55
65
|
{{ (Array.isArray(value) && value.length > 0) || !Array.isArray(value) ? value : '' }}
|
|
@@ -76,17 +76,21 @@ const emit = defineEmits(['applyFilter', 'clearFilter'])
|
|
|
76
76
|
:lg="filter.lg ? filter.lg : 4"
|
|
77
77
|
:xl="filter.xl ? filter.xl : 3"
|
|
78
78
|
>
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
79
|
+
|
|
80
|
+
<slot :name="`filter.${filter.name}`" v-bind="{filter, filterIndex: index}">
|
|
81
|
+
<crud-form-field
|
|
82
|
+
:field="filter"
|
|
83
|
+
:entity="entity"
|
|
84
|
+
v-model="valueModel[index].value"
|
|
85
|
+
:clearable="true"
|
|
86
|
+
density="compact"
|
|
87
|
+
variant="outlined"
|
|
88
|
+
:prepend-inner-icon="icon(filter)"
|
|
89
|
+
hide-details disable-rules
|
|
90
|
+
@updateValue="onUpdateValue"
|
|
91
|
+
/>
|
|
92
|
+
</slot>
|
|
93
|
+
|
|
90
94
|
</v-col>
|
|
91
95
|
|
|
92
96
|
</v-row>
|
|
@@ -310,7 +310,7 @@ defineEmits(['updateValue'])
|
|
|
310
310
|
:append-inner-icon="appendInnerIcon"
|
|
311
311
|
|
|
312
312
|
>
|
|
313
|
-
<template v-if="field.endOfDay" v-slot:append-inner>
|
|
313
|
+
<template v-if="field.endOfDay && field.showEndOfDayChip !== false" v-slot:append-inner>
|
|
314
314
|
<v-chip size="small">23:59</v-chip>
|
|
315
315
|
</template>
|
|
316
316
|
</v-date-input>
|
|
@@ -53,7 +53,9 @@ defineEmits(['import', 'export', 'create', 'update', 'delete', 'view', 'edit'])
|
|
|
53
53
|
|
|
54
54
|
<template>
|
|
55
55
|
<v-data-table-server
|
|
56
|
-
|
|
56
|
+
:density="entity.tableDensity"
|
|
57
|
+
:striped="entity.tableStriped"
|
|
58
|
+
:header-props="entity.headerProps"
|
|
57
59
|
v-if="hasPermission(entity.permissions.view)"
|
|
58
60
|
v-model:items-per-page="itemsPerPage"
|
|
59
61
|
:items-per-page-options="[5, 10, 20, 50]"
|
|
@@ -68,8 +70,15 @@ defineEmits(['import', 'export', 'create', 'update', 'delete', 'view', 'edit'])
|
|
|
68
70
|
item-value="name"
|
|
69
71
|
@update:options="doPaginate"
|
|
70
72
|
>
|
|
73
|
+
|
|
74
|
+
<template v-slot:bottom>
|
|
75
|
+
<v-data-table-footer :class="entity.footerClass"
|
|
76
|
+
:items-per-page-options="[5, 10, 20, 50]"
|
|
77
|
+
></v-data-table-footer>
|
|
78
|
+
</template>
|
|
79
|
+
|
|
71
80
|
<template v-slot:top>
|
|
72
|
-
<v-toolbar density="
|
|
81
|
+
<v-toolbar :class="entity.toolbarClass" :density="entity.toolbarDensity">
|
|
73
82
|
<v-toolbar-title>
|
|
74
83
|
{{ te(`${entity.name.toLowerCase()}.crud`) ? t(`${entity.name.toLowerCase()}.crud`) : entity.name }}
|
|
75
84
|
</v-toolbar-title>
|
|
@@ -101,7 +110,7 @@ defineEmits(['import', 'export', 'create', 'update', 'delete', 'view', 'edit'])
|
|
|
101
110
|
:entity="entity"
|
|
102
111
|
/>
|
|
103
112
|
|
|
104
|
-
<v-card>
|
|
113
|
+
<v-card variant="flat">
|
|
105
114
|
<v-card-text v-if="entity.searchEnable">
|
|
106
115
|
<crud-search
|
|
107
116
|
v-model="search"
|
|
@@ -110,23 +119,36 @@ defineEmits(['import', 'export', 'create', 'update', 'delete', 'view', 'edit'])
|
|
|
110
119
|
|
|
111
120
|
<v-card-text class="pt-0">
|
|
112
121
|
<slot name="filters" v-bind="{filters}"></slot>
|
|
122
|
+
|
|
113
123
|
<crud-filters
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
124
|
+
v-if="!$slots.filters"
|
|
125
|
+
:entity="entity"
|
|
126
|
+
v-model="filters"
|
|
127
|
+
:action-buttons="entity.filterButtons"
|
|
128
|
+
@clearFilter="clearFilters()"
|
|
129
|
+
@applyFilter="applyFilters()"
|
|
130
|
+
>
|
|
131
|
+
|
|
132
|
+
<template v-for="iFilter in entity.filters"
|
|
133
|
+
:key="iFilter.name"
|
|
134
|
+
v-slot:[`filter.${iFilter.name}`]="{filter, filterIndex}"
|
|
135
|
+
>
|
|
136
|
+
<slot v-if="$slots[`filter.${iFilter.name}`]"
|
|
137
|
+
:name="`filter.${iFilter.name}`"
|
|
138
|
+
v-bind="{filter, filterIndex}"
|
|
139
|
+
/>
|
|
140
|
+
</template>
|
|
141
|
+
</crud-filters>
|
|
121
142
|
</v-card-text>
|
|
122
143
|
|
|
123
144
|
</v-card>
|
|
124
145
|
|
|
146
|
+
<v-divider></v-divider>
|
|
125
147
|
</template>
|
|
126
148
|
|
|
127
149
|
|
|
128
150
|
<template v-for="header in entity.headers" :key="header.key" v-slot:[`item.${header.key}`]="{item, value}">
|
|
129
|
-
<slot :name="`item.${header.key}`" v-bind="{item, value}">
|
|
151
|
+
<slot v-if="$slots[`item.${header.key}`]" :name="`item.${header.key}`" v-bind="{item, value}">
|
|
130
152
|
{{ value }}
|
|
131
153
|
</slot>
|
|
132
154
|
</template>
|