11<template >
22 <v-dialog persistent v-model =" details.show" max-width =" 600" style =" position :static !important ;" >
33 <v-card >
4- <v-card-title class = " headline " >
5- {{ details.action == 'multiedit' ? $t('multipleUpdateTitle') : title }}
6- </v-card-title >
4+ <v-card-title
5+ class = " headline "
6+ >{{ details.action == 'multiedit' ? $t('multipleUpdateTitle') : title }} </v-card-title >
77 <v-form v-model =" details.formValid" >
88 <v-card-text class =" details-list" >
9-
10- <div v-for =" (field, i) in fields" :key =" i" v-if =" field.multipleUpdate || details.action != 'multiedit'" >
9+ <div
10+ v-for =" (field, i) in fields"
11+ :key =" i"
12+ v-if =" field.multipleUpdate || details.action != 'multiedit'"
13+ >
1114 <v-layout row wrap >
12- <v-flex class =" sm1" v-if =" details.action == 'multiedit'" >
15+ <v-flex class =" sm1" v-if =" details.action == 'multiedit'" >
1316 <input type =" checkbox" v-model =" field.updateColumn" >
1417 </v-flex >
1518 <v-flex :class =" details.action == 'multiedit' ? 'sm11' : 'sm12'" >
16-
1719 <!-- input -->
18- <v-text-field hide-details :required =" isRequired(field.required)" v-if =" field.type == 'input'" :label =" field.text"
19- v-model =" field.value" ></v-text-field >
20+ <v-text-field
21+ hide-details
22+ :required =" isRequired(field.required)"
23+ v-if =" field.type == 'input'"
24+ :label =" field.text"
25+ v-model =" field.value"
26+ ></v-text-field >
2027
2128 <!-- number -->
22- <v-text-field hide-details :required =" isRequired(field.required)" v-else-if =" field.type == 'number'" :label =" field.text"
23- v-model =" field.value" type =" number" step =" 1" min =" 0" ></v-text-field >
29+ <v-text-field
30+ hide-details
31+ :required =" isRequired(field.required)"
32+ v-else-if =" field.type == 'number'"
33+ :label =" field.text"
34+ v-model =" field.value"
35+ type =" number"
36+ step =" 1"
37+ min =" 0"
38+ ></v-text-field >
2439
2540 <!-- decimal -->
26- <v-text-field hide-details :required =" isRequired(field.required)" v-else-if =" field.type == 'decimal'" :label =" field.text"
27- v-model =" field.value" type =" number" step =" 0.01" min =" 0" ></v-text-field >
41+ <v-text-field
42+ hide-details
43+ :required =" isRequired(field.required)"
44+ v-else-if =" field.type == 'decimal'"
45+ :label =" field.text"
46+ v-model =" field.value"
47+ type =" number"
48+ step =" 0.01"
49+ min =" 0"
50+ ></v-text-field >
2851
2952 <!-- date -->
30- <v-text-field hide-details :required =" isRequired(field.required)" v-else-if =" field.type == 'date'" :label =" field.text"
31- v-model =" field.value" mask =" ####-##-##" return-masked-value ></v-text-field >
53+ <v-text-field
54+ hide-details
55+ :required =" isRequired(field.required)"
56+ v-else-if =" field.type == 'date'"
57+ :label =" field.text"
58+ v-model =" field.value"
59+ mask =" ####-##-##"
60+ return-masked-value
61+ ></v-text-field >
3262
3363 <!-- time -->
34- <v-text-field hide-details :required =" isRequired(field.required)" v-else-if =" field.type == 'time'" :label =" field.text" v-model =" field.value" mask =" ##:##" return-masked-value ></v-text-field >
64+ <v-text-field
65+ hide-details
66+ :required =" isRequired(field.required)"
67+ v-else-if =" field.type == 'time'"
68+ :label =" field.text"
69+ v-model =" field.value"
70+ mask =" ##:##"
71+ return-masked-value
72+ ></v-text-field >
3573
3674 <!-- datetime -->
37- <v-text-field hide-details :required =" isRequired(field.required)" v-else-if =" field.type == 'datetime'" :label =" field.text" v-model =" field.value" mask =" ####-##-## ##:##:##" return-masked-value ></v-text-field >
75+ <v-text-field
76+ hide-details
77+ :required =" isRequired(field.required)"
78+ v-else-if =" field.type == 'datetime'"
79+ :label =" field.text"
80+ v-model =" field.value"
81+ mask =" ####-##-## ##:##:##"
82+ return-masked-value
83+ ></v-text-field >
3884
3985 <!-- text area -->
40- <v-text-field hide-details :required =" isRequired(field.required)" v-else-if =" field.type == 'textarea'" :label =" field.text"
41- v-model =" field.value" multi-line ></v-text-field >
86+ <v-text-field
87+ hide-details
88+ :required =" isRequired(field.required)"
89+ v-else-if =" field.type == 'textarea'"
90+ :label =" field.text"
91+ v-model =" field.value"
92+ multi-line
93+ ></v-text-field >
4294
4395 <!-- file upload -->
4496 <template v-else-if =" field .type == ' file' " >
4597 <v-btn dark class =" blue jbtn-file" >
46- {{ $t('upload') }}<input id =" selectFile" type =" file" @change =" fileSelected" accept =" *" :multiple =" false" :disabled =" false" ref =" fileInput" >
98+ {{ $t('upload') }}
99+ <input
100+ id =" selectFile"
101+ type =" file"
102+ @change =" fileSelected"
103+ accept =" *"
104+ :multiple =" false"
105+ :disabled =" false"
106+ ref =" fileInput"
107+ >
47108 </v-btn >
48109 </template >
49110
50111 <!-- select -->
51112 <template v-else-if =" field .type == ' select' " >
52- <v-select v-if =" field.async"
113+ <v-select
114+ v-if =" field.async"
53115 hide-details
54116 :required =" isRequired(field.required)"
55117 :loading =" searchLoading['search_' + field.name]"
63125 bottom
64126 autocomplete
65127 ></v-select >
66- <v-select v-else
128+ <v-select
129+ v-else
67130 hide-details
68131 :required =" isRequired(field.required)"
69132 :items =" field.list.data"
77140 </template >
78141
79142 <!-- date picker -->
80-
81143 <v-menu
82- v-else-if =" field.type == 'datePicker'"
83- lazy
84- :close-on-content-click =" true"
85- v-model =" field.show"
86- transition =" scale-transition"
87- offset-y
88- full-width
89- :nudge-right =" 40"
90- min-width =" 290px"
91- :return-value.sync =" field.value"
92- >
93- <v-text-field
94- hide-details
95- slot =" activator"
96- :label =" field.text"
97- v-model =" field.value"
98- prepend-icon =" event"
99- ></v-text-field >
100- <v-date-picker v-model =" field.value" no-title scrollable ></v-date-picker >
101- </v-menu >
144+ v-else-if =" field.type == 'datePicker'"
145+ lazy
146+ :close-on-content-click =" true"
147+ v-model =" field.show"
148+ transition =" scale-transition"
149+ offset-y
150+ full-width
151+ :nudge-right =" 40"
152+ min-width =" 290px"
153+ :return-value.sync =" field.value"
154+ >
155+ <v-text-field
156+ hide-details
157+ slot =" activator"
158+ :label =" field.text"
159+ v-model =" field.value"
160+ prepend-icon =" event"
161+ ></v-text-field >
162+ <v-date-picker v-model =" field.value" no-title scrollable ></v-date-picker >
163+ </v-menu >
102164
103165 <!-- rich text editor -->
104166 <template v-else-if =" field .type == ' richTextBox' " >
105167 <label >{{field.text}}</label >
106- <vue-editor id =" editor" v-model =" field.value" :editorOptions =" {bounds: '#editor'}" ></vue-editor >
168+ <vue-editor
169+ id =" editor"
170+ v-model =" field.value"
171+ :editorOptions =" {bounds: '#editor'}"
172+ ></vue-editor >
107173 <br >
108174 </template >
109175
112178 <input type =" checkbox" color =" blue" :label =" field.text" v-model =" field.value" >
113179 <label class =" checkbox-label" >{{field.text}}</label >
114180 </span >
115-
116181 </v-flex >
117182 </v-layout >
118183 </div >
119184 </v-card-text >
120185 <v-card-actions >
121186 <v-spacer ></v-spacer >
122187 <v-btn color =" black" flat =" flat" @click.native =" close()" >{{ $t('buttons.close') }}</v-btn >
123- <v-btn :disabled =" !details.formValid" v-if =" details.action == 'create'" color =" green" flat =" flat" @click =" store()" >{{ $t('buttons.create') }}</v-btn >
124- <v-btn :disabled =" !details.formValid" v-else-if =" details.action == 'edit'" color =" orange" flat =" flat" @click =" update()" >{{ $t('buttons.modify') }}</v-btn >
125- <v-btn :disabled =" !details.formValid" v-else-if =" details.action == 'multiedit'" color =" orange" flat =" flat" @click =" updateSelected()" >{{ $t('buttons.modifySelected') }}</v-btn >
188+ <v-btn
189+ :disabled =" !details.formValid"
190+ v-if =" details.action == 'create'"
191+ color =" green"
192+ flat =" flat"
193+ @click =" store()"
194+ >{{ $t('buttons.create') }}</v-btn >
195+ <v-btn
196+ :disabled =" !details.formValid"
197+ v-else-if =" details.action == 'edit'"
198+ color =" orange"
199+ flat =" flat"
200+ @click =" update()"
201+ >{{ $t('buttons.modify') }}</v-btn >
202+ <v-btn
203+ :disabled =" !details.formValid"
204+ v-else-if =" details.action == 'multiedit'"
205+ color =" orange"
206+ flat =" flat"
207+ @click =" updateSelected()"
208+ >{{ $t('buttons.modifySelected') }}</v-btn >
126209 </v-card-actions >
127210 </v-form >
128211 </v-card >
@@ -147,7 +230,7 @@ export default {
147230 },
148231 searchPhrases: {},
149232 searchLoading: {},
150- searchData: {},
233+ searchData: {}
151234 };
152235 },
153236 created () {
@@ -161,10 +244,9 @@ export default {
161244 if (field .async ) {
162245 this .$set (this .searchPhrases , " search_" + field .name , " " );
163246 this .$set (this .searchLoading , " search_" + field .name , false );
164- this .$set (this .searchData , " search_" + field .name , [])
165- this .$set (field .list , ' oldSearch' , " " )
166- }
167- else {
247+ this .$set (this .searchData , " search_" + field .name , []);
248+ this .$set (field .list , " oldSearch" , " " );
249+ } else {
168250 field .list .data = [];
169251 let selectItems;
170252 Vue .http .get (url).then (response => {
@@ -202,7 +284,7 @@ export default {
202284 watch: {
203285 details: {
204286 handler (val ) {
205- if (val .show == true && val .action == ' edit' ) {
287+ if (val .show == true && val .action == " edit" ) {
206288 for (let field of this .fields ) {
207289 if (field .type == " select" ) {
208290 if (field .async ) {
@@ -239,13 +321,19 @@ export default {
239321 },
240322 searchPhrases: {
241323 handler (val ) {
242- for (let field of this .fields ) {
243- if (field .type == " select" ) {
244- if (field .async ) {
245- let search = val[" search_" + field .name ]
246- if (search != null && search != undefined && search != field .list .oldSearch ) {
247- field .list .oldSearch = search
248- let data
324+ setTimeout (() => {
325+ for (let field of this .fields ) {
326+ if (field .type == " select" && field .async ) {
327+ let search = val[" search_" + field .name ];
328+ let newSearch = this .searchPhrases [" search_" + field .name ];
329+ if (
330+ search != null &&
331+ search != undefined &&
332+ search != field .list .oldSearch &&
333+ search == newSearch
334+ ) {
335+ field .list .oldSearch = search;
336+ let data;
249337 let url = field .url + " /phrase/" + val[" search_" + field .name ];
250338 this .$set (this .searchLoading , " search_" + field .name , true );
251339 Vue .http .get (url).then (response => {
@@ -269,11 +357,11 @@ export default {
269357 data = items;
270358 }
271359 this .$set (this .searchData , " search_" + field .name , data);
272- })
360+ });
273361 }
274362 }
275363 }
276- }
364+ }, 500 );
277365 },
278366 deep: true
279367 }
@@ -339,7 +427,7 @@ export default {
339427 }
340428 },
341429 methods: {
342- ... mapActions (" crud" , [" updateItem" , " storeItem" , " mulitipleItemsUpdate" , ]),
430+ ... mapActions (" crud" , [" updateItem" , " storeItem" , " mulitipleItemsUpdate" ]),
343431 ... mapMutations (" crud" , [" resetItem" ]),
344432 close () {
345433 this .details .show = false ;
@@ -369,11 +457,10 @@ export default {
369457 ]);
370458 },
371459 updateSelected () {
372- let filteredFields = this .fields
373- .filter (field => field .updateColumn )
374- let keyValuePairs = {}
460+ let filteredFields = this .fields .filter (field => field .updateColumn );
461+ let keyValuePairs = {};
375462 for (let field of filteredFields) {
376- keyValuePairs[field .column ] = field .value
463+ keyValuePairs[field .column ] = field .value ;
377464 }
378465 this .mulitipleItemsUpdate ([
379466 {
0 commit comments