@hashtagcms/admin-ui-kit 1.0.6
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/LICENSE +21 -0
- package/README.md +83 -0
- package/dist/admin-ui-kit.min.css +14 -0
- package/dist/admin-ui-kit.min.js +2 -0
- package/dist/admin-ui-kit.min.js.LICENSE.txt +175 -0
- package/package.json +53 -0
- package/packages/components/README.md +92 -0
- package/packages/components/package.json +28 -0
- package/packages/components/src/action-bar.vue +237 -0
- package/packages/components/src/category-platform.vue +97 -0
- package/packages/components/src/category-settings.vue +815 -0
- package/packages/components/src/cms-module-dropdown.vue +78 -0
- package/packages/components/src/downlods.vue +21 -0
- package/packages/components/src/file-uploader.vue +188 -0
- package/packages/components/src/frontend-module-creator.vue +599 -0
- package/packages/components/src/global-site-button.vue +94 -0
- package/packages/components/src/homepage.vue +1087 -0
- package/packages/components/src/html-slot.vue +23 -0
- package/packages/components/src/image-gallery.vue +144 -0
- package/packages/components/src/index.js +53 -0
- package/packages/components/src/info-boxes.vue +68 -0
- package/packages/components/src/info-popup.vue +121 -0
- package/packages/components/src/language-button.vue +80 -0
- package/packages/components/src/language-copier.vue +177 -0
- package/packages/components/src/left-nav.vue +159 -0
- package/packages/components/src/library/copy-paste.vue +186 -0
- package/packages/components/src/library/info-box.vue +102 -0
- package/packages/components/src/library/left-menu-show-hide.vue +47 -0
- package/packages/components/src/library/loader.vue +141 -0
- package/packages/components/src/library/modal-box.vue +136 -0
- package/packages/components/src/library/split-button.vue +127 -0
- package/packages/components/src/library/timer-button.vue +43 -0
- package/packages/components/src/library/toast-box.vue +53 -0
- package/packages/components/src/menu-sorter.vue +265 -0
- package/packages/components/src/module-creator.vue +650 -0
- package/packages/components/src/module-permission.vue +334 -0
- package/packages/components/src/pagination.vue +125 -0
- package/packages/components/src/platform-button.vue +118 -0
- package/packages/components/src/search-bar.vue +144 -0
- package/packages/components/src/site-button.vue +42 -0
- package/packages/components/src/site-cloner.vue +150 -0
- package/packages/components/src/sitewise-copier.vue +234 -0
- package/packages/components/src/sitewise-data.vue +347 -0
- package/packages/components/src/sorter.vue +239 -0
- package/packages/components/src/tabular-view.vue +824 -0
- package/packages/components/src/title-bar.vue +76 -0
- package/packages/components/src/top-nav.vue +96 -0
- package/packages/helpers/README.md +88 -0
- package/packages/helpers/package.json +20 -0
- package/packages/helpers/src/admin-config.js +9 -0
- package/packages/helpers/src/common.js +89 -0
- package/packages/helpers/src/dashboard.js +16 -0
- package/packages/helpers/src/editor.js +163 -0
- package/packages/helpers/src/error-message-handler.js +50 -0
- package/packages/helpers/src/event-bus.js +4 -0
- package/packages/helpers/src/form.js +4 -0
- package/packages/helpers/src/fx.js +106 -0
- package/packages/helpers/src/humanize.js +14 -0
- package/packages/helpers/src/map.js +3 -0
- package/packages/styles/README.md +37 -0
- package/packages/styles/package.json +15 -0
- package/packages/styles/src/_action-bar.scss +35 -0
- package/packages/styles/src/_admin.scss +22 -0
- package/packages/styles/src/_animate.scss +1579 -0
- package/packages/styles/src/_badges.scss +34 -0
- package/packages/styles/src/_category-list.scss +14 -0
- package/packages/styles/src/_common.scss +163 -0
- package/packages/styles/src/_info-box.scss +96 -0
- package/packages/styles/src/_left-nav.scss +59 -0
- package/packages/styles/src/_loader.scss +82 -0
- package/packages/styles/src/_menu-sorter.scss +39 -0
- package/packages/styles/src/_model-creator.scss +48 -0
- package/packages/styles/src/_module-permission.scss +25 -0
- package/packages/styles/src/_page-manager.scss +63 -0
- package/packages/styles/src/_popover-modal.scss +20 -0
- package/packages/styles/src/_table-grid.scss +39 -0
- package/packages/styles/src/_toast.scss +20 -0
- package/packages/styles/src/_variables.scss +37 -0
- package/packages/styles/src/app.scss +2 -0
|
@@ -0,0 +1,599 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div>
|
|
3
|
+
<form
|
|
4
|
+
id="addEditFrm"
|
|
5
|
+
:action="saveURL"
|
|
6
|
+
class="form-group"
|
|
7
|
+
method="post"
|
|
8
|
+
role="form"
|
|
9
|
+
v-on:keyup="hideErrorMessage($event)"
|
|
10
|
+
v-on:submit.prevent="createModule"
|
|
11
|
+
>
|
|
12
|
+
<div class="form-group row mb-3">
|
|
13
|
+
<label class="col-sm-2" for="name">Name</label>
|
|
14
|
+
<div class="col-sm-7">
|
|
15
|
+
<input
|
|
16
|
+
@blur="fillCopiedData"
|
|
17
|
+
id="name"
|
|
18
|
+
v-model="form.name"
|
|
19
|
+
class="form-control"
|
|
20
|
+
name="name"
|
|
21
|
+
placeholder="Module name"
|
|
22
|
+
required
|
|
23
|
+
type="text"
|
|
24
|
+
/>
|
|
25
|
+
<label
|
|
26
|
+
><input
|
|
27
|
+
v-model="conventional"
|
|
28
|
+
type="checkbox"
|
|
29
|
+
@click="goConventional()"
|
|
30
|
+
/>
|
|
31
|
+
Go Conventional</label
|
|
32
|
+
>
|
|
33
|
+
<div class="text text-danger">{{ this.errors.name }}</div>
|
|
34
|
+
</div>
|
|
35
|
+
</div>
|
|
36
|
+
|
|
37
|
+
<div class="form-group row mb-3">
|
|
38
|
+
<label class="col-sm-2" for="alias">Alias</label>
|
|
39
|
+
<div class="col-sm-7">
|
|
40
|
+
<input
|
|
41
|
+
id="alias"
|
|
42
|
+
v-model="form.alias"
|
|
43
|
+
class="form-control"
|
|
44
|
+
name="alias"
|
|
45
|
+
placeholder="Alias"
|
|
46
|
+
required
|
|
47
|
+
type="text"
|
|
48
|
+
/>
|
|
49
|
+
<div class="text text-danger">{{ this.errors.alias }}</div>
|
|
50
|
+
</div>
|
|
51
|
+
</div>
|
|
52
|
+
|
|
53
|
+
<div class="form-group row mb-3">
|
|
54
|
+
<label class="col-sm-2" for="view_name">View Name</label>
|
|
55
|
+
<div class="col-sm-7">
|
|
56
|
+
<input
|
|
57
|
+
id="view_name"
|
|
58
|
+
v-model="form.view_name"
|
|
59
|
+
class="form-control"
|
|
60
|
+
name="view_name"
|
|
61
|
+
placeholder="View name"
|
|
62
|
+
required
|
|
63
|
+
type="text"
|
|
64
|
+
/>
|
|
65
|
+
<div class="text text-danger">{{ this.errors.view_name }}</div>
|
|
66
|
+
</div>
|
|
67
|
+
</div>
|
|
68
|
+
|
|
69
|
+
<div class="form-group row mb-3">
|
|
70
|
+
<label class="col-sm-2" for="cache_group">Cache Group</label>
|
|
71
|
+
<div class="col-sm-7">
|
|
72
|
+
<input
|
|
73
|
+
id="cache_group"
|
|
74
|
+
v-model="form.cache_group"
|
|
75
|
+
class="form-control"
|
|
76
|
+
maxlength="60"
|
|
77
|
+
name="cache_group"
|
|
78
|
+
placeholder="Cache Category"
|
|
79
|
+
type="text"
|
|
80
|
+
/>
|
|
81
|
+
|
|
82
|
+
<div class="text text-danger">{{ this.errors.cache_group }}</div>
|
|
83
|
+
</div>
|
|
84
|
+
</div>
|
|
85
|
+
|
|
86
|
+
<div class="form-group row mb-3">
|
|
87
|
+
<label class="col-sm-2" for="individual_cache"
|
|
88
|
+
>Is Individual Cache?</label
|
|
89
|
+
>
|
|
90
|
+
<label class="col-sm-7">
|
|
91
|
+
<input
|
|
92
|
+
id="individual_cache"
|
|
93
|
+
v-model="form.individual_cache"
|
|
94
|
+
name="individual_cache"
|
|
95
|
+
type="checkbox"
|
|
96
|
+
/>
|
|
97
|
+
</label>
|
|
98
|
+
</div>
|
|
99
|
+
|
|
100
|
+
<div class="form-group row mb-3">
|
|
101
|
+
<label class="col-sm-2" for="data_type">Data Type</label>
|
|
102
|
+
<div class="col-sm-7">
|
|
103
|
+
<select
|
|
104
|
+
id="data_type"
|
|
105
|
+
v-model="form.data_type"
|
|
106
|
+
class="form-select select-big"
|
|
107
|
+
name="data_type"
|
|
108
|
+
@change="checkForService(form.data_type)"
|
|
109
|
+
>
|
|
110
|
+
<option value="">Select</option>
|
|
111
|
+
<option v-for="dataType in allDataTypes" :value="dataType">
|
|
112
|
+
{{ dataType }}
|
|
113
|
+
</option>
|
|
114
|
+
</select>
|
|
115
|
+
<div class="text text-danger">{{ this.errors.data_type }}</div>
|
|
116
|
+
<div
|
|
117
|
+
v-show="form.data_type != '' && this.dataTypesInfo[form.data_type]"
|
|
118
|
+
class="alert alert-info"
|
|
119
|
+
v-html="this.dataTypesInfo[form.data_type] || ''"
|
|
120
|
+
></div>
|
|
121
|
+
</div>
|
|
122
|
+
</div>
|
|
123
|
+
|
|
124
|
+
<div class="form-group row mb-3">
|
|
125
|
+
<label class="col-sm-2" for="data_handler">Data Handler</label>
|
|
126
|
+
<label class="col-sm-7">
|
|
127
|
+
<textarea
|
|
128
|
+
id="data_handler"
|
|
129
|
+
v-model="form.data_handler"
|
|
130
|
+
class="form-control input"
|
|
131
|
+
mb-2s="5"
|
|
132
|
+
name="data_handler"
|
|
133
|
+
placeholder="Query or Service URL or filteration for this module"
|
|
134
|
+
row
|
|
135
|
+
v-bind:style="fluidCol"
|
|
136
|
+
/>
|
|
137
|
+
</label>
|
|
138
|
+
</div>
|
|
139
|
+
|
|
140
|
+
<div v-show="showServiceForm">
|
|
141
|
+
<div class="form-group row mb-3">
|
|
142
|
+
<label class="col-sm-2" for="method_type">Method Type</label>
|
|
143
|
+
<div class="col-sm-7">
|
|
144
|
+
<select
|
|
145
|
+
id="method_type"
|
|
146
|
+
v-model="form.method_type"
|
|
147
|
+
class="form-select select-big"
|
|
148
|
+
name="method_type"
|
|
149
|
+
>
|
|
150
|
+
<option value="">Select</option>
|
|
151
|
+
<option
|
|
152
|
+
v-for="methodType in allMethodTypes"
|
|
153
|
+
:value="methodType.value"
|
|
154
|
+
>
|
|
155
|
+
{{ methodType.name }}
|
|
156
|
+
</option>
|
|
157
|
+
</select>
|
|
158
|
+
<div class="text text-danger">{{ this.errors.data_type }}</div>
|
|
159
|
+
</div>
|
|
160
|
+
</div>
|
|
161
|
+
<div class="form-group row mb-3">
|
|
162
|
+
<label class="col-sm-2" for="service_params">Service Params</label>
|
|
163
|
+
<div class="col-sm-7">
|
|
164
|
+
<input
|
|
165
|
+
id="service_params"
|
|
166
|
+
v-model="form.service_params"
|
|
167
|
+
class="form-control"
|
|
168
|
+
name="service_params"
|
|
169
|
+
placeholder="Service Params"
|
|
170
|
+
type="text"
|
|
171
|
+
/>
|
|
172
|
+
<div class="text text-danger">{{ this.errors.service_params }}</div>
|
|
173
|
+
</div>
|
|
174
|
+
</div>
|
|
175
|
+
<div class="form-group row mb-3">
|
|
176
|
+
<label class="col-sm-2" for="service_params">Service Headers</label>
|
|
177
|
+
<div class="col-sm-7">
|
|
178
|
+
<textarea
|
|
179
|
+
id="headers"
|
|
180
|
+
v-model="form.headers"
|
|
181
|
+
class="form-control input"
|
|
182
|
+
name="headers"
|
|
183
|
+
placeholder="Service header as json"
|
|
184
|
+
rows="5"
|
|
185
|
+
/>
|
|
186
|
+
<div class="text text-danger">{{ this.errors.headers }}</div>
|
|
187
|
+
</div>
|
|
188
|
+
</div>
|
|
189
|
+
</div>
|
|
190
|
+
|
|
191
|
+
<div class="form-group row mb-3">
|
|
192
|
+
<label class="col-sm-2" for="data_key_map">Data Key Map</label>
|
|
193
|
+
<label class="col-sm-7">
|
|
194
|
+
<textarea
|
|
195
|
+
id="data_key_map"
|
|
196
|
+
v-model="form.data_key_map"
|
|
197
|
+
class="form-control input"
|
|
198
|
+
name="data_key_map"
|
|
199
|
+
placeholder="key to be replaced in comma seperated. ie: :site_id, :lang_id "
|
|
200
|
+
rows="5"
|
|
201
|
+
v-bind:style="fluidCol"
|
|
202
|
+
/>
|
|
203
|
+
</label>
|
|
204
|
+
</div>
|
|
205
|
+
|
|
206
|
+
<div class="form-group row mb-3">
|
|
207
|
+
<label class="col-sm-2" for="is_seo_module"
|
|
208
|
+
>Use this module as seo module</label
|
|
209
|
+
>
|
|
210
|
+
<label class="col-sm-7">
|
|
211
|
+
<input
|
|
212
|
+
id="is_seo_module"
|
|
213
|
+
v-model="form.is_seo_module"
|
|
214
|
+
name="is_seo_module"
|
|
215
|
+
type="checkbox"
|
|
216
|
+
/>
|
|
217
|
+
</label>
|
|
218
|
+
</div>
|
|
219
|
+
|
|
220
|
+
<div class="form-group row mb-3">
|
|
221
|
+
<label class="col-sm-2" for="is_mandatory">Is Mandatory?</label>
|
|
222
|
+
<label class="col-sm-7">
|
|
223
|
+
<input
|
|
224
|
+
id="is_mandatory"
|
|
225
|
+
v-model="form.is_mandatory"
|
|
226
|
+
name="is_mandatory"
|
|
227
|
+
type="checkbox"
|
|
228
|
+
/>
|
|
229
|
+
</label>
|
|
230
|
+
</div>
|
|
231
|
+
|
|
232
|
+
<div class="form-group row mb-3">
|
|
233
|
+
<label class="col-sm-2" for="shared">Is Shared?</label>
|
|
234
|
+
<label class="col-sm-7">
|
|
235
|
+
<input
|
|
236
|
+
id="shared"
|
|
237
|
+
v-model="form.shared"
|
|
238
|
+
name="shared"
|
|
239
|
+
type="checkbox"
|
|
240
|
+
/>
|
|
241
|
+
</label>
|
|
242
|
+
</div>
|
|
243
|
+
<div class="form-group row mb-3">
|
|
244
|
+
<label class="col-sm-2" for="linked_module">Linked Module Alias</label>
|
|
245
|
+
<label class="col-sm-7">
|
|
246
|
+
<input
|
|
247
|
+
id="linked_module"
|
|
248
|
+
v-model="form.linked_module"
|
|
249
|
+
name="linked_module"
|
|
250
|
+
type="text"
|
|
251
|
+
class="form-control"
|
|
252
|
+
/>
|
|
253
|
+
</label>
|
|
254
|
+
</div>
|
|
255
|
+
|
|
256
|
+
<div class="form-group row mb-3">
|
|
257
|
+
<label class="col-sm-2" for="live_edit">Live Edit?</label>
|
|
258
|
+
<label class="col-sm-7">
|
|
259
|
+
<input
|
|
260
|
+
id="live_edit"
|
|
261
|
+
v-model="form.live_edit"
|
|
262
|
+
name="live_edit"
|
|
263
|
+
type="checkbox"
|
|
264
|
+
/>
|
|
265
|
+
</label>
|
|
266
|
+
</div>
|
|
267
|
+
|
|
268
|
+
<div v-show="showQueryForm" class="form-group row mb-3">
|
|
269
|
+
<fieldset class="border">
|
|
270
|
+
<legend>Query Service Properties</legend>
|
|
271
|
+
<div class="form-group">
|
|
272
|
+
<label class="col-sm-2" for="query_statement" v-bind:style="sFont"
|
|
273
|
+
>Query</label
|
|
274
|
+
>
|
|
275
|
+
|
|
276
|
+
<label class="col-sm-7">
|
|
277
|
+
<textarea
|
|
278
|
+
id="query_statement"
|
|
279
|
+
v-model="form.query_statement"
|
|
280
|
+
class="form-control input"
|
|
281
|
+
name="query_statement"
|
|
282
|
+
rows="5"
|
|
283
|
+
v-bind:style="fluidCol"
|
|
284
|
+
/>
|
|
285
|
+
</label>
|
|
286
|
+
</div>
|
|
287
|
+
|
|
288
|
+
<div class="form-group row mb-3">
|
|
289
|
+
<label class="col-sm-2" for="query_as" v-bind:style="sFont"
|
|
290
|
+
>Get query data as</label
|
|
291
|
+
>
|
|
292
|
+
<div class="col-sm-7">
|
|
293
|
+
<select
|
|
294
|
+
id="query_as"
|
|
295
|
+
v-model="form.query_as"
|
|
296
|
+
class="form-select select-big"
|
|
297
|
+
name="query_as"
|
|
298
|
+
>
|
|
299
|
+
<option value="">Select</option>
|
|
300
|
+
<option
|
|
301
|
+
v-for="queryData in allQueryDataTypes"
|
|
302
|
+
:value="queryData.value"
|
|
303
|
+
>
|
|
304
|
+
{{ queryData.name }}
|
|
305
|
+
</option>
|
|
306
|
+
</select>
|
|
307
|
+
<div class="text text-danger">{{ this.errors.query_as }}</div>
|
|
308
|
+
</div>
|
|
309
|
+
</div>
|
|
310
|
+
</fieldset>
|
|
311
|
+
</div>
|
|
312
|
+
|
|
313
|
+
<div class="form-group row mb-3">
|
|
314
|
+
<label class="col-sm-2" for="description"
|
|
315
|
+
>Description or different database connection name if it is a query
|
|
316
|
+
module</label
|
|
317
|
+
>
|
|
318
|
+
<label class="col-sm-7">
|
|
319
|
+
<textarea
|
|
320
|
+
id="description"
|
|
321
|
+
v-model="form.description"
|
|
322
|
+
class="form-control input"
|
|
323
|
+
name="description"
|
|
324
|
+
rows="5"
|
|
325
|
+
v-bind:style="fluidCol"
|
|
326
|
+
/>
|
|
327
|
+
</label>
|
|
328
|
+
</div>
|
|
329
|
+
<div v-show="this.showAllUpdateSection" class="form-group row mb-3">
|
|
330
|
+
<label class="col-sm-2" for="update_inAllSites"
|
|
331
|
+
>Update in all sites?</label
|
|
332
|
+
>
|
|
333
|
+
<label class="col-sm-7">
|
|
334
|
+
<input
|
|
335
|
+
id="update_inAllSites"
|
|
336
|
+
v-model="form.update_inAllSites"
|
|
337
|
+
name="update_inAllSites"
|
|
338
|
+
type="checkbox"
|
|
339
|
+
/>
|
|
340
|
+
<div class="alert alert-info">
|
|
341
|
+
Be careful by clicking this checkbox. Content will be updated in all
|
|
342
|
+
sites based on alias. If you are changing alias it will be updated
|
|
343
|
+
only in this site.
|
|
344
|
+
</div>
|
|
345
|
+
</label>
|
|
346
|
+
</div>
|
|
347
|
+
<div class="row mb-3">
|
|
348
|
+
<div
|
|
349
|
+
v-show="typeof errorMessage === 'string' && errorMessage !== ''"
|
|
350
|
+
class="alert alert-danger"
|
|
351
|
+
>
|
|
352
|
+
{{ errorMessage }}
|
|
353
|
+
</div>
|
|
354
|
+
<div class="form-group center-align">
|
|
355
|
+
<input
|
|
356
|
+
class="btn btn-success btn-from-submit"
|
|
357
|
+
name="submit"
|
|
358
|
+
type="submit"
|
|
359
|
+
value="Save"
|
|
360
|
+
/>
|
|
361
|
+
<a :href="dataBackUrl" class="btn btn-outline-secondary">Back</a>
|
|
362
|
+
</div>
|
|
363
|
+
</div>
|
|
364
|
+
</form>
|
|
365
|
+
</div>
|
|
366
|
+
</template>
|
|
367
|
+
|
|
368
|
+
<script>
|
|
369
|
+
import { Toast, PasteFromClipboard, IsJson } from "@hashtagcms/helpers/common";
|
|
370
|
+
import Form from "@hashtagcms/helpers/form";
|
|
371
|
+
|
|
372
|
+
export default {
|
|
373
|
+
mounted() {
|
|
374
|
+
if (this.dataActionPerformed === "edit") {
|
|
375
|
+
this.setFormData(this.formData);
|
|
376
|
+
} else {
|
|
377
|
+
this.form.site_id = this.dataSiteId;
|
|
378
|
+
}
|
|
379
|
+
},
|
|
380
|
+
props: [
|
|
381
|
+
"dataControllerName",
|
|
382
|
+
"dataBackUrl",
|
|
383
|
+
"dataSite",
|
|
384
|
+
"dataResults",
|
|
385
|
+
"dataActionPerformed",
|
|
386
|
+
"dataDataTypes",
|
|
387
|
+
"dataDataTypesInfo",
|
|
388
|
+
"dataFormAction",
|
|
389
|
+
"dataSiteId",
|
|
390
|
+
],
|
|
391
|
+
data() {
|
|
392
|
+
return {
|
|
393
|
+
sFont: {
|
|
394
|
+
"font-size": "14px",
|
|
395
|
+
},
|
|
396
|
+
fluidCol: {
|
|
397
|
+
width: "100%",
|
|
398
|
+
},
|
|
399
|
+
allQueryDataTypes: [
|
|
400
|
+
{ name: "param", value: "param" },
|
|
401
|
+
{ name: "data", value: "data" },
|
|
402
|
+
],
|
|
403
|
+
conventional: false,
|
|
404
|
+
formData:
|
|
405
|
+
typeof this.dataResults != "undefined"
|
|
406
|
+
? JSON.parse(this.dataResults)
|
|
407
|
+
: [],
|
|
408
|
+
siteData:
|
|
409
|
+
typeof this.dataSite !== "undefined" ? JSON.parse(this.dataSite) : [],
|
|
410
|
+
showExtraData: {},
|
|
411
|
+
allDataTypes:
|
|
412
|
+
typeof this.dataDataTypes != "undefined"
|
|
413
|
+
? JSON.parse(this.dataDataTypes)
|
|
414
|
+
: [],
|
|
415
|
+
allMethodTypes: [
|
|
416
|
+
{ name: "GET", value: "GET" },
|
|
417
|
+
{ name: "POST", value: "POST" },
|
|
418
|
+
],
|
|
419
|
+
form: new Form({
|
|
420
|
+
id: 0,
|
|
421
|
+
name: "",
|
|
422
|
+
icon_css: "",
|
|
423
|
+
alias: "",
|
|
424
|
+
view_name: "",
|
|
425
|
+
cache_group: "",
|
|
426
|
+
data_type: "",
|
|
427
|
+
method_type: "",
|
|
428
|
+
data_handler: "",
|
|
429
|
+
data_key_map: "",
|
|
430
|
+
query_statement: "",
|
|
431
|
+
query_as: "",
|
|
432
|
+
description: "",
|
|
433
|
+
site_id: 1,
|
|
434
|
+
is_seo_module: 0,
|
|
435
|
+
individual_cache: 0,
|
|
436
|
+
shared: 0,
|
|
437
|
+
update_inAllSites: 0,
|
|
438
|
+
is_mandatory: 0,
|
|
439
|
+
service_params: "",
|
|
440
|
+
actionPerformed: this.dataActionPerformed,
|
|
441
|
+
backURL: this.dataBackUrl,
|
|
442
|
+
headers: "",
|
|
443
|
+
live_edit: 0,
|
|
444
|
+
linked_module: "",
|
|
445
|
+
}),
|
|
446
|
+
errors: {},
|
|
447
|
+
cacheData: {},
|
|
448
|
+
sortable: null,
|
|
449
|
+
sortingInterval: -1,
|
|
450
|
+
errorMessage: "",
|
|
451
|
+
dataTypesInfo:
|
|
452
|
+
typeof this.dataDataTypesInfo != "undefined"
|
|
453
|
+
? JSON.parse(this.dataDataTypesInfo)
|
|
454
|
+
: [],
|
|
455
|
+
saveURL: this.dataFormAction,
|
|
456
|
+
};
|
|
457
|
+
},
|
|
458
|
+
computed: {
|
|
459
|
+
showQueryForm: function () {
|
|
460
|
+
return this.form.data_type.toLowerCase().indexOf("queryservice") > -1;
|
|
461
|
+
},
|
|
462
|
+
showServiceForm: function () {
|
|
463
|
+
return this.form.data_type.toLowerCase().indexOf("service") > -1;
|
|
464
|
+
},
|
|
465
|
+
showAllUpdateSection: function () {
|
|
466
|
+
return this.dataActionPerformed === "edit" && this.siteData.length > 1;
|
|
467
|
+
},
|
|
468
|
+
},
|
|
469
|
+
methods: {
|
|
470
|
+
fillCopiedData() {
|
|
471
|
+
PasteFromClipboard()
|
|
472
|
+
.then((res) => {
|
|
473
|
+
if (IsJson(this.form.name)) {
|
|
474
|
+
this.setFormData(JSON.parse(this.form.name));
|
|
475
|
+
}
|
|
476
|
+
})
|
|
477
|
+
.catch((res) => {
|
|
478
|
+
console.log("unable to paste");
|
|
479
|
+
});
|
|
480
|
+
},
|
|
481
|
+
goConventional(arg) {
|
|
482
|
+
//wanted to go conventional
|
|
483
|
+
if (this.conventional === false) {
|
|
484
|
+
let name = this.form.name;
|
|
485
|
+
this.form.title = name;
|
|
486
|
+
this.form.alias = ("MODULE_" + name.toUpperCase()).replace(/\s/g, "_");
|
|
487
|
+
this.form.view_name = name.toLowerCase().replace(/\s/g, "-");
|
|
488
|
+
}
|
|
489
|
+
},
|
|
490
|
+
setFormData(data) {
|
|
491
|
+
let data_length = Object.keys(data).length;
|
|
492
|
+
let form = document.querySelector("#addEditFrm");
|
|
493
|
+
for (let a in data) {
|
|
494
|
+
//setting document values
|
|
495
|
+
let val = data[a];
|
|
496
|
+
//setting form values;
|
|
497
|
+
if (
|
|
498
|
+
typeof this.form[a] !== "undefined" &&
|
|
499
|
+
typeof this.form[a] !== "function"
|
|
500
|
+
) {
|
|
501
|
+
this.form[a] = val;
|
|
502
|
+
}
|
|
503
|
+
|
|
504
|
+
let ele = form[a] || document.getElementById(a);
|
|
505
|
+
|
|
506
|
+
if (ele) {
|
|
507
|
+
let eleType = ele.type;
|
|
508
|
+
// to make it visible for checkbox and radio
|
|
509
|
+
if (
|
|
510
|
+
(eleType === "checkbox" || eleType === "radio") &&
|
|
511
|
+
eleType !== "submit"
|
|
512
|
+
) {
|
|
513
|
+
this.form[a] = val === 1;
|
|
514
|
+
}
|
|
515
|
+
}
|
|
516
|
+
}
|
|
517
|
+
},
|
|
518
|
+
checkForService(dataType) {
|
|
519
|
+
let self = this;
|
|
520
|
+
this.showExtraData["show"] =
|
|
521
|
+
dataType !== "" &&
|
|
522
|
+
(dataType.indexOf("Service") > -1 || dataType.indexOf("service") > -1);
|
|
523
|
+
},
|
|
524
|
+
createModule() {
|
|
525
|
+
let $this = this;
|
|
526
|
+
|
|
527
|
+
preCheck(this);
|
|
528
|
+
|
|
529
|
+
this.form
|
|
530
|
+
.post(this.saveURL)
|
|
531
|
+
.then((response) => {
|
|
532
|
+
this.resetForm(response);
|
|
533
|
+
})
|
|
534
|
+
.catch((response) => {
|
|
535
|
+
this.showError(response);
|
|
536
|
+
});
|
|
537
|
+
|
|
538
|
+
function preCheck() {
|
|
539
|
+
$this.form.is_seo_module = $this.form.is_seo_module
|
|
540
|
+
? $this.form.is_seo_module
|
|
541
|
+
: 0;
|
|
542
|
+
$this.form.individual_cache = $this.form.individual_cache
|
|
543
|
+
? $this.form.individual_cache
|
|
544
|
+
: 0;
|
|
545
|
+
$this.form.update_inAllSites = $this.form.update_inAllSites
|
|
546
|
+
? $this.form.update_inAllSites
|
|
547
|
+
: 0;
|
|
548
|
+
$this.form.is_mandatory = $this.form.is_mandatory
|
|
549
|
+
? $this.form.is_mandatory
|
|
550
|
+
: 0;
|
|
551
|
+
$this.form.service_params = $this.form.service_params
|
|
552
|
+
? $this.form.service_params
|
|
553
|
+
: "";
|
|
554
|
+
$this.form.shared = $this.form.shared ? $this.form.shared : 0;
|
|
555
|
+
$this.form.live_edit = $this.form.live_edit ? $this.form.live_edit : 0;
|
|
556
|
+
}
|
|
557
|
+
},
|
|
558
|
+
showError(res) {
|
|
559
|
+
for (let i in res.errors) {
|
|
560
|
+
if (res.errors.hasOwnProperty(i)) {
|
|
561
|
+
this.errors[i] = res.errors[i][0];
|
|
562
|
+
}
|
|
563
|
+
}
|
|
564
|
+
|
|
565
|
+
this.errorMessage = res.message;
|
|
566
|
+
},
|
|
567
|
+
hideErrorMessage(event) {
|
|
568
|
+
let name = event.target.getAttribute("name");
|
|
569
|
+
this.errors[name] = "";
|
|
570
|
+
|
|
571
|
+
if (this.errorMessage !== "") {
|
|
572
|
+
this.errorMessage = "";
|
|
573
|
+
}
|
|
574
|
+
},
|
|
575
|
+
resetForm(response) {
|
|
576
|
+
//console.log("response.isSaved ",response.isSaved);
|
|
577
|
+
if (!isTrue(response.isSaved)) {
|
|
578
|
+
this.errorMessage = {};
|
|
579
|
+
Toast.show(this, "There is some error...");
|
|
580
|
+
this.errorMessage = response.message;
|
|
581
|
+
} else {
|
|
582
|
+
this.errorMessage = "";
|
|
583
|
+
|
|
584
|
+
let action = this.dataActionPerformed.toUpperCase();
|
|
585
|
+
|
|
586
|
+
Toast.show(this, "Saved...");
|
|
587
|
+
|
|
588
|
+
if (isTrue(response.isSaved)) {
|
|
589
|
+
window.location.href = response.backURL;
|
|
590
|
+
}
|
|
591
|
+
}
|
|
592
|
+
|
|
593
|
+
function isTrue(isSaved) {
|
|
594
|
+
return isSaved.toString() === "true" || isSaved.toString() === "1";
|
|
595
|
+
}
|
|
596
|
+
},
|
|
597
|
+
},
|
|
598
|
+
};
|
|
599
|
+
</script>
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<select
|
|
3
|
+
@click="init(true)"
|
|
4
|
+
name="site_combo"
|
|
5
|
+
class="form-select"
|
|
6
|
+
id="site_combo"
|
|
7
|
+
@change="setSite"
|
|
8
|
+
v-model="currentSite"
|
|
9
|
+
>
|
|
10
|
+
<option v-for="site in sites" :value="site.id">
|
|
11
|
+
{{ site.name }}
|
|
12
|
+
</option>
|
|
13
|
+
</select>
|
|
14
|
+
</template>
|
|
15
|
+
|
|
16
|
+
<script>
|
|
17
|
+
import AdminConfig from "@hashtagcms/helpers/admin-config";
|
|
18
|
+
import SplitButton from "./library/split-button.vue";
|
|
19
|
+
|
|
20
|
+
import SecureLS from "secure-ls";
|
|
21
|
+
|
|
22
|
+
export default {
|
|
23
|
+
components: {
|
|
24
|
+
"split-button": SplitButton,
|
|
25
|
+
},
|
|
26
|
+
props: ["dataSites", "dataCurrentSite", "dataSupportedSites", "dataIsAdmin"],
|
|
27
|
+
mounted() {
|
|
28
|
+
this.init();
|
|
29
|
+
},
|
|
30
|
+
data() {
|
|
31
|
+
return {
|
|
32
|
+
sites:
|
|
33
|
+
typeof this.dataSites == "undefined" ? [] : JSON.parse(this.dataSites),
|
|
34
|
+
currentSite:
|
|
35
|
+
typeof this.dataCurrentSite == "undefined"
|
|
36
|
+
? 1
|
|
37
|
+
: parseInt(this.dataCurrentSite),
|
|
38
|
+
supportedSite:
|
|
39
|
+
typeof this.dataSupportedSites == "undefined"
|
|
40
|
+
? []
|
|
41
|
+
: JSON.parse(this.dataSupportedSites),
|
|
42
|
+
};
|
|
43
|
+
},
|
|
44
|
+
methods: {
|
|
45
|
+
init(force = false) {
|
|
46
|
+
let $this = this;
|
|
47
|
+
//$this.sites = [{name:"Please wait...", id:0}];
|
|
48
|
+
let ls = new SecureLS();
|
|
49
|
+
let allSites = ls.get("allSites");
|
|
50
|
+
|
|
51
|
+
if (allSites.length === 0 || force === true) {
|
|
52
|
+
let siteController = AdminConfig.admin_path(`site/getSitesForUsers`);
|
|
53
|
+
axios
|
|
54
|
+
.get(siteController, { withCredentials: false })
|
|
55
|
+
.then(function (response) {
|
|
56
|
+
$this.sites = response.data;
|
|
57
|
+
|
|
58
|
+
ls.set("allSites", JSON.stringify($this.sites));
|
|
59
|
+
// $this.$refs.site_combo.setData($this.sites);
|
|
60
|
+
})
|
|
61
|
+
.catch(function (error) {
|
|
62
|
+
console.log(error);
|
|
63
|
+
});
|
|
64
|
+
} else {
|
|
65
|
+
$this.sites = JSON.parse(allSites);
|
|
66
|
+
}
|
|
67
|
+
},
|
|
68
|
+
hasSites() {
|
|
69
|
+
//has language greater than one
|
|
70
|
+
return this.sites != null && this.sites.length > 1;
|
|
71
|
+
},
|
|
72
|
+
parseSite: function (row) {
|
|
73
|
+
// console.log("parseSite");
|
|
74
|
+
//console.log(row);
|
|
75
|
+
return { label: row.name, value: row.id };
|
|
76
|
+
},
|
|
77
|
+
setSite(data) {
|
|
78
|
+
let ajaxController = AdminConfig.admin_path(
|
|
79
|
+
`ajax/setSiteId/${this.currentSite}`,
|
|
80
|
+
);
|
|
81
|
+
axios
|
|
82
|
+
.get(ajaxController)
|
|
83
|
+
.then(function (response) {
|
|
84
|
+
//console.log(response);
|
|
85
|
+
//window.location.reload();
|
|
86
|
+
window.location.href = window.location.pathname;
|
|
87
|
+
})
|
|
88
|
+
.catch(function (error) {
|
|
89
|
+
console.log(error);
|
|
90
|
+
});
|
|
91
|
+
},
|
|
92
|
+
},
|
|
93
|
+
};
|
|
94
|
+
</script>
|