|
3 | 3 | <v-card-title class="card-title table-controls"> |
4 | 4 | <v-layout row wrap> |
5 | 5 | <v-flex xs12 lg4> |
6 | | - <!-- Dialog for creating item --> |
7 | | - <v-tooltip top> |
8 | | - <v-btn fab dark color="green" @click="create()" slot="activator"> |
9 | | - <v-icon>add</v-icon> |
10 | | - </v-btn> |
11 | | - <span>{{ $t('add') }}</span> |
12 | | - </v-tooltip> |
13 | | - <!-- Multiple edit --> |
14 | | - <v-tooltip top> |
15 | | - <v-btn fab small dark color="orange" @click="editSelected()" slot="activator"> |
16 | | - <v-icon>edit</v-icon> |
17 | | - </v-btn> |
18 | | - <span>{{ $t('buttons.editSelected') }}</span> |
19 | | - </v-tooltip> |
20 | | - <!-- suspend/restore record (if soft deletes are enabled) --> |
21 | | - <template v-if="['soft', 'both'].includes(deleteMode)"> |
22 | | - <v-tooltip top> |
23 | | - <v-btn |
24 | | - outline |
25 | | - class="white--text" |
26 | | - fab |
27 | | - small |
28 | | - color="red" |
29 | | - @click="suspendSelected" |
30 | | - slot="activator" |
31 | | - > |
32 | | - <v-icon>undo</v-icon> |
33 | | - </v-btn> |
34 | | - <span>{{ $t('buttons.suspendSelected') }}</span> |
35 | | - </v-tooltip> |
36 | | - <v-tooltip top> |
37 | | - <v-btn |
38 | | - outline |
39 | | - class="white--text" |
40 | | - fab |
41 | | - small |
42 | | - color="green" |
43 | | - @click="restoreSelected" |
44 | | - slot="activator" |
45 | | - > |
46 | | - <v-icon>redo</v-icon> |
47 | | - </v-btn> |
48 | | - <span>{{ $t('buttons.restoreSelected') }}</span> |
49 | | - </v-tooltip> |
50 | | - </template> |
51 | | - <!-- hard delete --> |
52 | | - <v-tooltip top v-if="['hard', 'both'].includes(deleteMode)"> |
53 | | - <v-btn |
54 | | - outline |
55 | | - class="white--text" |
56 | | - fab |
57 | | - small |
58 | | - color="red" |
59 | | - @click="destroySelected" |
60 | | - slot="activator" |
61 | | - > |
62 | | - <v-icon>delete</v-icon> |
63 | | - </v-btn> |
64 | | - <span>{{ $t('buttons.deleteSelected') }}</span> |
65 | | - </v-tooltip> |
66 | | - <!-- Refresh table --> |
67 | | - <v-tooltip top> |
68 | | - <v-btn |
69 | | - outline |
70 | | - class="white--text" |
71 | | - fab |
72 | | - small |
73 | | - color="blue" |
74 | | - @click="refreshTable()" |
75 | | - slot="activator" |
76 | | - > |
77 | | - <v-icon>refresh</v-icon> |
78 | | - </v-btn> |
79 | | - <span>{{ $t('buttons.refreshTable') }}</span> |
80 | | - </v-tooltip> |
| 6 | + <data-table-controls |
| 7 | + :deleteMode="deleteMode" |
| 8 | + @create="create" |
| 9 | + @editSelected="editSelected" |
| 10 | + @suspendSelected="suspendSelected" |
| 11 | + @restoreSelected="restoreSelected" |
| 12 | + @destroySelected="destroySelected" |
| 13 | + @refreshTable="refreshTable" |
| 14 | + ></data-table-controls> |
81 | 15 | </v-flex> |
82 | 16 |
|
83 | 17 | <v-flex xs12 lg8 text-xs-left text-lg-right> |
|
145 | 79 | v-model="selected" |
146 | 80 | select-all="black" |
147 | 81 | :rows-per-page-items="[20, 50, { text: $t('all'), value: -1 }]" |
| 82 | + :pagination.sync="pagination" |
148 | 83 | light |
149 | 84 | :headers="headers" |
150 | 85 | :items="filteredItems" |
|
154 | 89 | :loading="loading" |
155 | 90 | > |
156 | 91 | <template slot="items" slot-scope="props"> |
157 | | - <tr @dblclick="rowDblclickAction(props.item)" :class="activityClass(props.item.meta.active)"> |
158 | | - |
159 | | - |
160 | | - <td> |
161 | | - <v-checkbox hide-details v-model="props.selected" color="black"></v-checkbox> |
162 | | - </td> |
163 | | - |
164 | | - <!-- action buttons --> |
165 | | - <td class="cell-nowrap"> |
166 | | - <!-- edit record --> |
167 | | - <v-tooltip top v-if="editButton"> |
168 | | - <v-btn |
169 | | - fab |
170 | | - small |
171 | | - class="xs white--text" |
172 | | - color="orange" |
173 | | - @click="edit(props.item.meta.id)" |
174 | | - slot="activator" |
175 | | - > |
176 | | - <v-icon>edit</v-icon> |
177 | | - </v-btn> |
178 | | - <span>{{ $t('buttons.edit') }}</span> |
179 | | - </v-tooltip> |
180 | | - <!-- custom buttons --> |
181 | | - <v-tooltip top v-for="(customButton) in customButtons" :key="customButton.name"> |
182 | | - <v-btn |
183 | | - fab |
184 | | - small |
185 | | - class="xs white--text" |
186 | | - :color="customButton.color" |
187 | | - @click="custom(customButton.name, props.item)" |
188 | | - slot="activator" |
189 | | - > |
190 | | - <v-icon>{{ customButton.icon }}</v-icon> |
191 | | - </v-btn> |
192 | | - <span>{{ customButton.text }}</span> |
193 | | - </v-tooltip> |
194 | | - <!-- buttons for open modal with item elements --> |
195 | | - <v-tooltip top v-for="(button, key) in itemElements" :key="key"> |
196 | | - <v-btn |
197 | | - outline |
198 | | - fab |
199 | | - small |
200 | | - class="xs white--text" |
201 | | - :color="button.color" |
202 | | - @click="editItemElements(key, props.item.meta.id)" |
203 | | - slot="activator" |
204 | | - > |
205 | | - <v-icon>{{ button.icon }}</v-icon> |
206 | | - </v-btn> |
207 | | - <span>{{ button.buttonText }}</span> |
208 | | - </v-tooltip> |
209 | | - <!-- suspend/restore record (if soft deletes are enabled) --> |
210 | | - <template v-if="['soft', 'both'].includes(deleteMode)"> |
211 | | - <v-tooltip top v-if="props.item.meta.active == '1'"> |
212 | | - <v-btn |
213 | | - outline |
214 | | - fab |
215 | | - small |
216 | | - class="xs white--text" |
217 | | - color="red" |
218 | | - @click="suspend(props.item.meta.id)" |
219 | | - slot="activator" |
220 | | - > |
221 | | - <v-icon>undo</v-icon> |
222 | | - </v-btn> |
223 | | - <span>{{ $t('buttons.suspend') }}</span> |
224 | | - </v-tooltip> |
225 | | - <v-tooltip top v-else> |
226 | | - <v-btn |
227 | | - outline |
228 | | - fab |
229 | | - small |
230 | | - class="xs white--text" |
231 | | - color="green" |
232 | | - @click="restore(props.item.meta.id)" |
233 | | - slot="activator" |
234 | | - > |
235 | | - <v-icon>redo</v-icon> |
236 | | - </v-btn> |
237 | | - <span>{{ $t('buttons.restore') }}</span> |
238 | | - </v-tooltip> |
239 | | - </template> |
240 | | - <!-- hard delete --> |
241 | | - <v-tooltip top v-if="['hard', 'both'].includes(deleteMode)"> |
242 | | - <v-btn |
243 | | - outline |
244 | | - fab |
245 | | - small |
246 | | - class="xs white--text" |
247 | | - color="red" |
248 | | - @click="destroy(props.item.meta.id)" |
249 | | - slot="activator" |
250 | | - > |
251 | | - <v-icon>delete</v-icon> |
252 | | - </v-btn> |
253 | | - <span>{{ $t('buttons.delete') }}</span> |
254 | | - </v-tooltip> |
255 | | - <!-- file mode --> |
256 | | - <template v-if="fileMode"> |
257 | | - <v-tooltip top> |
258 | | - <v-btn |
259 | | - outline |
260 | | - fab |
261 | | - small |
262 | | - class="xs white--text" |
263 | | - color="blue" |
264 | | - @click="download(props.item)" |
265 | | - slot="activator" |
266 | | - > |
267 | | - <v-icon>file_download</v-icon> |
268 | | - </v-btn> |
269 | | - <span>{{ $t('buttons.download') }}</span> |
270 | | - </v-tooltip> |
271 | | - <v-tooltip top v-if="isImage(props.item.type)"> |
272 | | - <v-btn |
273 | | - outline |
274 | | - fab |
275 | | - small |
276 | | - class="xs white--text" |
277 | | - color="blue" |
278 | | - @click="showImage(props.item)" |
279 | | - slot="activator" |
280 | | - > |
281 | | - <v-icon>search</v-icon> |
282 | | - </v-btn> |
283 | | - <span>{{ $t('buttons.show') }}</span> |
284 | | - </v-tooltip> |
285 | | - </template> |
286 | | - </td> |
287 | | - <!-- table fields --> |
288 | | - <td v-if="key != 'meta'" v-for="(field, key) in props.item" :key="key" max-width="20px !important;"> |
289 | | - <span v-if="columnTextModes[key] == 'html'" v-html="field"></span> |
290 | | - <span v-else-if="columnTextModes[key] == 'cropped'" class="cell-nowrap">{{ field | cropped }}</span> |
291 | | - <span v-else-if="columnTextModes[key] == 'text'">{{ field }}</span> |
292 | | - </td> |
293 | | - </tr> |
| 92 | + <data-table-row |
| 93 | + :props="props" |
| 94 | + :editButton='editButton' |
| 95 | + :customButtons='customButtons' |
| 96 | + :deleteMode='deleteMode' |
| 97 | + :itemElements="itemElements" |
| 98 | + :fileMode="fileMode" |
| 99 | + :columnTextModes="columnTextModes" |
| 100 | + @edit="edit" |
| 101 | + @custom="custom" |
| 102 | + @suspend="suspend" |
| 103 | + @restore="restore" |
| 104 | + @destroy="destroy" |
| 105 | + @editItemElements="editItemElements" |
| 106 | + @download="download" |
| 107 | + @showImage="showImage" |
| 108 | + ></data-table-row> |
| 109 | + </template> |
| 110 | + <template slot="pageText" slot-scope="{ pageStart, pageStop, itemsLength }"> |
| 111 | + <data-table-footer @setPage="setPage" :pagination="pagination" :pageStart="pageStart" :pageStop="pageStop" :itemsLength="itemsLength"></data-table-footer> |
294 | 112 | </template> |
295 | | - <template |
296 | | - slot="pageText" |
297 | | - slot-scope="{ pageStart, pageStop, itemsLength }" |
298 | | - >{{ $t('records') }} {{ pageStart }} - {{ pageStop }} {{ $t('from') }} {{ itemsLength }}</template> |
299 | 113 | </v-data-table> |
300 | 114 | </v-card> |
301 | 115 | </template> |
|
304 | 118 | import MainMixin from "../mixins/datatable-main.js"; |
305 | 119 | import ClientSideFilteringMixin from "../mixins/datatable-client-side-filtering.js"; |
306 | 120 | import HelperMixin from "../mixins/datatable-helper.js"; |
307 | | -import MessagesMixin from "../mixins/datatable-messages.js"; |
308 | 121 | import { mapState, mapGetters, mapMutations, mapActions } from "vuex"; |
309 | 122 |
|
310 | 123 | export default { |
311 | | - mixins: [MainMixin, ClientSideFilteringMixin, HelperMixin, MessagesMixin], |
| 124 | + mixins: [MainMixin, ClientSideFilteringMixin, HelperMixin], |
312 | 125 | data() { |
313 | 126 | return {}; |
314 | 127 | }, |
|
0 commit comments