@simitgroup/simpleapp-generator 1.6.3-alpha → 1.6.4-alpha

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.
Files changed (148) hide show
  1. package/dist/buildinschemas/branch.d.ts.map +1 -1
  2. package/dist/buildinschemas/branch.js +1 -0
  3. package/dist/buildinschemas/branch.js.map +1 -1
  4. package/dist/buildinschemas/changehistories.d.ts +3 -0
  5. package/dist/buildinschemas/changehistories.d.ts.map +1 -0
  6. package/dist/buildinschemas/changehistories.js +36 -0
  7. package/dist/buildinschemas/changehistories.js.map +1 -0
  8. package/dist/buildinschemas/index.d.ts +1 -0
  9. package/dist/buildinschemas/index.d.ts.map +1 -1
  10. package/dist/buildinschemas/index.js +3 -1
  11. package/dist/buildinschemas/index.js.map +1 -1
  12. package/dist/buildinschemas/organization.js +2 -2
  13. package/dist/buildinschemas/organization.js.map +1 -1
  14. package/dist/buildinschemas/user.d.ts.map +1 -1
  15. package/dist/buildinschemas/user.js +5 -1
  16. package/dist/buildinschemas/user.js.map +1 -1
  17. package/dist/buildinschemas/webhook.d.ts +3 -0
  18. package/dist/buildinschemas/webhook.d.ts.map +1 -0
  19. package/dist/buildinschemas/webhook.js +33 -0
  20. package/dist/buildinschemas/webhook.js.map +1 -0
  21. package/dist/framework.d.ts.map +1 -1
  22. package/dist/framework.js +3 -2
  23. package/dist/framework.js.map +1 -1
  24. package/dist/generate.js +30 -11
  25. package/dist/generate.js.map +1 -1
  26. package/dist/processors/jsonschemabuilder.d.ts.map +1 -1
  27. package/dist/processors/jsonschemabuilder.js +10 -2
  28. package/dist/processors/jsonschemabuilder.js.map +1 -1
  29. package/dist/type.d.ts +2 -0
  30. package/dist/type.d.ts.map +1 -1
  31. package/package.json +1 -1
  32. package/src/buildinschemas/branch.ts +1 -0
  33. package/src/buildinschemas/changehistories.ts +33 -0
  34. package/src/buildinschemas/index.ts +2 -1
  35. package/src/buildinschemas/organization.ts +2 -2
  36. package/src/buildinschemas/user.ts +5 -1
  37. package/src/buildinschemas/webhook.ts +31 -0
  38. package/src/framework.ts +3 -2
  39. package/src/generate.ts +35 -15
  40. package/src/processors/jsonschemabuilder.ts +10 -2
  41. package/src/type.ts +2 -0
  42. package/templates/basic/nest/controller.ts.eta +23 -2
  43. package/templates/basic/nest/model.ts.eta +9 -1
  44. package/templates/basic/nest/resolver.ts.eta +2 -2
  45. package/templates/basic/nuxt/pages.[id].vue.eta +7 -7
  46. package/templates/basic/nuxt/pages.form.vue.eta +1 -4
  47. package/templates/basic/nuxt/pages.landing.vue.eta +1 -20
  48. package/templates/basic/nuxt/simpleapp.generate.client.ts.eta +8 -1
  49. package/templates/nest/src/simpleapp/generate/apischemas/simpleapp.apischema.ts.eta +2 -0
  50. package/templates/nest/src/simpleapp/generate/commons/dicts/documents.ts.eta +9 -2
  51. package/templates/nest/src/simpleapp/generate/commons/roles/roles.enum.ts.eta +5 -10
  52. package/templates/nest/src/simpleapp/generate/commons/roles/roles.group.ts.eta +1 -0
  53. package/templates/nest/src/simpleapp/generate/commons/runwebhook.service.ts.eta +50 -0
  54. package/templates/nest/src/simpleapp/generate/commons/user.context.ts.eta +13 -3
  55. package/templates/nest/src/simpleapp/generate/controllers/simpleapp.controller.ts.eta +9 -1
  56. package/templates/nest/src/simpleapp/generate/processors/branch.processor.ts.eta +12 -6
  57. package/templates/nest/src/simpleapp/generate/processors/simpleapp.processor.ts.eta +120 -19
  58. package/templates/nest/src/simpleapp/generate/types/schema.type.ts.eta +3 -1
  59. package/templates/nest/src/simpleapp/generate/types/simpleapp.type.ts.eta +1 -0
  60. package/templates/nest/src/simpleapp/profile/profile.controller.ts.eta +19 -0
  61. package/templates/nest/src/simpleapp/profile/profile.service.ts.eta +30 -8
  62. package/templates/nest/src/simpleapp/simpleapp.module.ts.eta +2 -1
  63. package/templates/nuxt/assets/css/calendar.css._eta +3 -0
  64. package/templates/nuxt/assets/css/style.css._eta +1 -1
  65. package/templates/nuxt/assets/images/unknown.png.eta +0 -0
  66. package/templates/nuxt/assets/primevue/passthrough.ts._eta +6 -1
  67. package/templates/nuxt/components/button/ButtonAction.vue._eta +40 -39
  68. package/templates/nuxt/components/button/ButtonDanger.vue._eta +11 -3
  69. package/templates/nuxt/components/button/ButtonDefault.vue._eta +11 -3
  70. package/templates/nuxt/components/button/ButtonPrimary.vue._eta +9 -3
  71. package/templates/nuxt/components/button/ButtonSecondary.vue._eta +33 -0
  72. package/templates/nuxt/components/button/ButtonText.vue._eta +9 -5
  73. package/templates/nuxt/components/button/ButtonWarning.vue._eta +11 -3
  74. package/templates/nuxt/components/calendar/CalendarInput.vue.eta +4 -3
  75. package/templates/nuxt/components/calendar/CalendarSmall.vue.eta +33 -16
  76. package/templates/nuxt/components/chart/card.vue._eta +1 -1
  77. package/templates/nuxt/components/debug/DebugDocumentData.vue.eta +36 -26
  78. package/templates/nuxt/components/event/EventDocumentViewer.vue._eta +36 -13
  79. package/templates/nuxt/components/form/FormBranch.vue._eta +52 -5
  80. package/templates/nuxt/components/form/FormDocnoformat.vue.eta +14 -10
  81. package/templates/nuxt/components/form/FormUser.vue._eta +1 -1
  82. package/templates/nuxt/components/form/user/FormUserPermission.vue.eta +77 -59
  83. package/templates/nuxt/components/header/HeaderSelectBranch.vue.eta +42 -35
  84. package/templates/nuxt/components/image/ImageAvatar.vue.eta._vue +30 -0
  85. package/templates/nuxt/components/image/ImageOrganization.vue.eta.vue +7 -5
  86. package/templates/nuxt/components/image/ImageToBase64Uploader.vue.eta.vue +67 -50
  87. package/templates/nuxt/components/list/ListDocumentTable.vue.eta +20 -12
  88. package/templates/nuxt/components/list/ListView.vue.eta +64 -35
  89. package/templates/nuxt/components/overlay/OverlayPanelWithToolBar.vue.eta +5 -4
  90. package/templates/nuxt/components/overlay/OverlayViewer.vue.eta +8 -8
  91. package/templates/nuxt/components/page/PageDocList.vue.eta +36 -13
  92. package/templates/nuxt/components/renderer/RendererDate.vue.eta +8 -2
  93. package/templates/nuxt/components/renderer/RendererDateTime.vue.eta +7 -1
  94. package/templates/nuxt/components/renderer/RendererDocHistories.vue.eta +56 -0
  95. package/templates/nuxt/components/renderer/RendererForeignKey.vue.eta +9 -8
  96. package/templates/nuxt/components/renderer/RendererLink.vue.eta +7 -4
  97. package/templates/nuxt/components/renderer/RendererMoney.vue.eta +25 -17
  98. package/templates/nuxt/components/renderer/RendererTime.vue.eta +7 -1
  99. package/templates/nuxt/components/renderer/RendererViewer.vue.eta +19 -9
  100. package/templates/nuxt/components/select/SelectTemplate.vue.eta +47 -21
  101. package/templates/nuxt/components/session/SessionBlock.vue.eta +44 -46
  102. package/templates/nuxt/components/simpleApp/SimpleAppAutocomplete.vue.eta +24 -15
  103. package/templates/nuxt/components/simpleApp/SimpleAppCalendarInput.vue.eta +64 -0
  104. package/templates/nuxt/components/simpleApp/SimpleAppChildrenList.vue.eta +16 -8
  105. package/templates/nuxt/components/simpleApp/SimpleAppDocumentNo.vue.eta +8 -8
  106. package/templates/nuxt/components/simpleApp/SimpleAppFieldContainer.vue.eta +1 -1
  107. package/templates/nuxt/components/simpleApp/SimpleAppFormToolBar.vue._eta +66 -22
  108. package/templates/nuxt/components/simpleApp/SimpleAppInput.vue.eta +89 -168
  109. package/templates/nuxt/components/simpleApp/SimpleAppInputTable.vue.eta +43 -40
  110. package/templates/nuxt/components/simpleApp/SimpleAppUserPicker.vue.eta +387 -0
  111. package/templates/nuxt/components/text/TextDocStatus.vue._eta +22 -0
  112. package/templates/nuxt/components/user/UserButtonCreateTenant.vue._eta +13 -15
  113. package/templates/nuxt/components/user/UserButtonPermissionInfo.vue.eta +127 -93
  114. package/templates/nuxt/components/user/UserTenantPicker.vue.eta +1 -1
  115. package/templates/nuxt/composables/date.generate.ts.eta +105 -8
  116. package/templates/nuxt/composables/getDocument.generate.ts.eta +8 -6
  117. package/templates/nuxt/composables/getOpenApi.generate.ts.eta +58 -10
  118. package/templates/nuxt/composables/getUserStore.generate.ts.eta +37 -5
  119. package/templates/nuxt/composables/goTo.generate.ts.eta +14 -1
  120. package/templates/nuxt/composables/graphquery.generate.ts.eta +20 -2
  121. package/templates/nuxt/composables/recently.generate.ts.eta +16 -0
  122. package/templates/nuxt/composables/roles.generate.ts.eta +8 -13
  123. package/templates/nuxt/composables/stringHelper.generate.ts.eta +52 -0
  124. package/templates/nuxt/composables/sysmessage.generate.ts.eta +1 -1
  125. package/templates/nuxt/pages/[xorg]/{organization.vue.eta → organization.vue._eta} +38 -9
  126. package/templates/nuxt/pages/[xorg]/user.vue.eta +12 -9
  127. package/templates/nuxt/pages/login.vue._eta +4 -1
  128. package/templates/nuxt/plugins/20.simpleapp-userstore.ts.eta +45 -26
  129. package/templates/nuxt/plugins/70.recently.ts.eta +55 -0
  130. package/templates/nuxt/providers/my-provider.ts.eta +22 -0
  131. package/templates/nuxt/server/api/[xorg]/{[...].ts.eta → [...].ts._eta} +47 -21
  132. package/templates/nuxt/simpleapp/generate/clients/SimpleAppClient.ts.eta +44 -3
  133. package/templates/nuxt/types/events.ts.eta +3 -2
  134. package/templates/nuxt/types/others.ts.eta +11 -1
  135. package/templates/nuxt/types/schema.ts.eta +3 -1
  136. package/templates/nuxt/types/simpleappinput.ts.eta +1 -1
  137. package/templates/nuxt/types/user.ts.eta +8 -7
  138. package/templates/project/jsonschemas/branch.json._eta +1 -0
  139. package/templates/project/jsonschemas/invoice.json._eta +4 -3
  140. package/templates/project/jsonschemas/organization.json._eta +2 -2
  141. package/templates/project/lang/default._json +3 -2
  142. package/tsconfig.tsbuildinfo +1 -1
  143. package/templates/nuxt/components/image/ImageAvatar.vue.eta.vue +0 -38
  144. /package/templates/nuxt/pages/[xorg]/mobile/docnoformat/{index.vue.eta → index.vue.etaxxx} +0 -0
  145. /package/templates/nuxt/pages/[xorg]/mobile/{index.vue._eta → index.vue._etaxxx} +0 -0
  146. /package/templates/nuxt/pages/[xorg]/mobile/organization/{[id].vue._eta → [id].vue._etaxxx} +0 -0
  147. /package/templates/nuxt/pages/[xorg]/mobile/{pickgroup.vue._eta → pickgroup.vue._etaxxx} +0 -0
  148. /package/templates/nuxt/pages/[xorg]/mobile/user/{index.vue.eta → index.vue.etaxxx} +0 -0
@@ -0,0 +1,387 @@
1
+ <template>
2
+ <div
3
+ v-if="readonly"
4
+ class="p-3 border rounded-lg border-gray-300 dark:border-blue-900/40"
5
+ >
6
+ <div>
7
+ {{ modelValue && modelValue.fullName ? modelValue.fullName : "-" }}
8
+ </div>
9
+ </div>
10
+ <div
11
+ v-else-if="modelValue !== undefined"
12
+ class="p-3 border rounded-lg border-gray-300 dark:border-blue-900/40 relative"
13
+ >
14
+ <div ref="autocompleteinput" readonly>
15
+ {{ modelValue && modelValue.fullName ? modelValue.fullName : "-" }}
16
+ </div>
17
+
18
+ <div
19
+ class="absolute h-full top-0 right-0 text-right text-white z-10 align-middle p-3"
20
+ >
21
+ <a
22
+ class="pi pi-times rounded-full bg-slate-500 p-1 cursor-pointer text-xs"
23
+ @click="clear"
24
+ tabindex="0"
25
+ ></a>
26
+ </div>
27
+ </div>
28
+ <div v-else class="relative">
29
+ <div
30
+ class="absolute h-full top-0 right-10 text-right text-white z-10 align-middle p-3"
31
+ v-if="modelValue?._id"
32
+ >
33
+ <span
34
+ class="pi pi-times rounded-full bg-slate-500 p-1 cursor-pointer text-xs"
35
+ @click="clear"
36
+ ></span>
37
+ </div>
38
+
39
+ <AutoComplete
40
+ v-if="!isMobile()"
41
+ class="w-full"
42
+ v-model="modelValue"
43
+ ref="autocompleteinput"
44
+ forceSelection
45
+ optionLabel="label"
46
+ @focus="setFocus"
47
+ @item-select="pickAutoComplete"
48
+ @complete="getListFromAutocompleteApi"
49
+ :placeholder="placeholdertxt"
50
+ :dropdown="true"
51
+ @clear="clear"
52
+ :dropdown-mode="'current'"
53
+ :readonly="readonly"
54
+ :pt="pt"
55
+ :delay="500"
56
+ :disabled="readonly"
57
+ @click="clickAutocomplete"
58
+ :suggestions="list"
59
+ @blur="onBlurAutocomplete"
60
+ :inputId="inputId"
61
+ :path="setting.instancepath"
62
+ >
63
+ <template #header>
64
+ <slot name="header">
65
+ <div class="flex flex-row font font-bold dark:text-white">
66
+ <div>{{ t("user") }}</div>
67
+ </div>
68
+ </slot>
69
+ </template>
70
+ <template #content>
71
+ <div class="bg-red-300">content</div>
72
+ </template>
73
+ <template #option="{ index, option }">
74
+ <slot name="option" :index="index" :option="option">
75
+ <div class="flex flex-row dark:text-white">
76
+ <div>{{ option.label }}</div>
77
+ </div>
78
+ </slot>
79
+ </template>
80
+ <!-- </slot> -->
81
+ </AutoComplete>
82
+ <div v-else>
83
+ <InputGroup class="w-full flex flex-row">
84
+ <InputText
85
+ :value="modelValue?.label"
86
+ @focus="showAutocompleteDialog(false)"
87
+ :placeholder="placeholdertxt"
88
+ class="rounded-r-none"
89
+ ></InputText>
90
+ <InputGroupAddon
91
+ @click="showAutocompleteDialog(true)"
92
+ v-ripple
93
+ class="bg bg-primary-600 dark:bg-primary-700 text-white rounded-r-lg p-3"
94
+ >
95
+ <i :class="`pi ${modelValue ? 'pi-link' : 'pi-angle-down'}`"></i>
96
+ </InputGroupAddon>
97
+ </InputGroup>
98
+
99
+ <OverlaySideBarCrud
100
+ v-model="mobileVisible"
101
+ closeEventName="autocompleteoverlay"
102
+ >
103
+ <template v-if="mobileListMode == 'list'">
104
+ <mobile-toolbar>
105
+ <template #start>
106
+ <ButtonText @click="mobileVisible = false">
107
+ <i class="pi pi-times"></i>
108
+ </ButtonText>
109
+ </template>
110
+ <template #center>
111
+ <TextTitle class="text-white">{{ t(docname) }}</TextTitle>
112
+ </template>
113
+ <template #end>
114
+ <div></div>
115
+ <!-- <ButtonText @click="openViewer(false)">
116
+ <i class="pi pi-plus"></i>
117
+ </ButtonText> -->
118
+ </template>
119
+ </mobile-toolbar>
120
+ <ListView
121
+ :list="list"
122
+ :withFilter="true"
123
+ :defaultFilterValue="defaultFilterValue"
124
+ idField="_id"
125
+ titleField="code"
126
+ subTitleField="label"
127
+ #default="{ item, index }"
128
+ @click="onClickInMobile"
129
+ >
130
+ <div class="flex flex-row justify-end">
131
+ <div class="flex-1">{{ item.label }}</div>
132
+ </div>
133
+ </ListView>
134
+ </template>
135
+ <template v-else>
136
+ <component
137
+ :is="
138
+ defineAsyncComponent(
139
+ getDocument(setting.fieldsetting['x-foreignkey']).viewer,
140
+ )
141
+ "
142
+ @after="
143
+ async (eventType: FormCrudEvent, data: any, result: any) =>
144
+ await afterRenderMobileForm(eventType, data)
145
+ "
146
+ />
147
+ </template>
148
+ </OverlaySideBarCrud>
149
+ </div>
150
+ </div>
151
+ </template>
152
+ <script setup lang="ts">
153
+ /**
154
+ * This file was automatically generated by simpleapp generator. Every
155
+ * MODIFICATION OVERRIDE BY GENERATEOR
156
+ * last change 2023-10-28
157
+ * Author: Ks Tan
158
+ */
159
+ import { isNull } from "lodash";
160
+ import jsonpath from "jsonpath";
161
+ import {
162
+ AutoCompleteDropdownClickEvent,
163
+ AutoCompleteProps,
164
+ } from "primevue/autocomplete";
165
+ import {
166
+ autocompletetype,
167
+ ForeignKey,
168
+ FormCrudEvent,
169
+ SchemaConfig,
170
+ SchemaType,
171
+ } from "~/types";
172
+ const mobileVisible = ref(false);
173
+ const autocompleteinput = ref<autocompletetype | undefined>();
174
+ const { $event } = useNuxtApp();
175
+ const list = ref<any[]>([]);
176
+ const props = withDefaults(
177
+ defineProps<{
178
+ setting: any;
179
+ allowAddNew?: boolean;
180
+ showNull?: boolean;
181
+ readonly?: boolean;
182
+ placeholder?: string;
183
+ hidelabel?: boolean;
184
+ inputId: string;
185
+ componentProps?: AutoCompleteProps;
186
+ autocompleteFilter?: any;
187
+ pt?: any;
188
+ }>(),
189
+ {
190
+ allowAddNew: true,
191
+ showNull: true,
192
+ },
193
+ );
194
+ const mobileListMode = ref("list");
195
+ const defaultFilterValue = ref("");
196
+ const path = "$" + props.setting.instancepath;
197
+ const modifiedpath = path.replaceAll("/", ".");
198
+ const queryresult = jsonpath.query(props.setting.defaultValue, modifiedpath)[0];
199
+ const remotedoc = getDocument(props.setting.fieldsetting["x-foreignkey"]);
200
+ const schema: SchemaType = <SchemaType>remotedoc?.docClass.getSchema();
201
+ const labelfield = "fullName";
202
+
203
+ const docname = props.setting.fieldsetting["x-foreignkey"];
204
+ const placeholdertxt = computed(() => props.placeholder ?? t(docname));
205
+ const emptyautocomplete = computed(() => undefined); //((): autocompletetype => queryresult);
206
+ const cancelShowList = ref(false);
207
+ const autocompleteitem = ref<autocompletetype | undefined>(
208
+ emptyautocomplete.value,
209
+ );
210
+ const modelValue = defineModel<autocompletetype | undefined>({
211
+ required: true,
212
+ });
213
+ if (modelValue.value && modelValue.value._id) {
214
+ autocompleteitem.value = { ...modelValue.value };
215
+ }
216
+ //clear auto complete auto set value = empty
217
+ const clear = () => {
218
+ autocompleteitem.value = undefined;
219
+ modelValue.value = undefined;
220
+ };
221
+
222
+ //if record picked, click button show record info instead
223
+ const openlink = () => {
224
+ if (modelValue.value?._id) {
225
+ openViewer(true);
226
+ }
227
+ };
228
+
229
+ //recorrect data if lose focus
230
+ const onBlurAutocomplete = () => {
231
+ if (autocompleteitem.value === null) {
232
+ autocompleteitem.value = emptyautocomplete.value;
233
+ }
234
+ if (isNull(modelValue.value)) {
235
+ modelValue.value = autocompleteitem.value;
236
+ } else if (typeof modelValue.value == "object") {
237
+ } else {
238
+ modelValue.value = autocompleteitem.value;
239
+ }
240
+ };
241
+
242
+ const showAutocompleteDialog = (isbutton: boolean) => {
243
+ mobileListMode.value = "list";
244
+ if (modelValue.value && isbutton) {
245
+ openViewer(false);
246
+ } else {
247
+ // if(!modelValue.value && !isbutton ){
248
+ mobileVisible.value = true;
249
+ defaultFilterValue.value =
250
+ modelValue.value && modelValue.value?._id ? modelValue.value.label : "";
251
+ getListFromAutocompleteApi({ query: "" });
252
+ }
253
+ };
254
+ //obtain remote data
255
+ const getListFromAutocompleteApi = (event: any) => {
256
+ const keyword = event?.query ?? "";
257
+ const defaultfilter: any = { active: true, uid: { $ne: "" } };
258
+
259
+ const morefilter = props.autocompleteFilter ?? defaultfilter;
260
+
261
+ getDocumentApi("user")
262
+ .autoComplete(keyword, morefilter)
263
+ .then((res: any) => {
264
+ console.log("Run autocomplete?");
265
+ list.value = res.data;
266
+
267
+ if (props.allowAddNew) {
268
+ list.value = list.value.concat({
269
+ _id: "new",
270
+ uid: "",
271
+ label: "<" + t("new") + ">",
272
+ });
273
+ }
274
+ });
275
+ };
276
+
277
+ //on select
278
+ const pickAutoComplete = (event: any) => {
279
+ if (event.value._id === "") {
280
+ modelValue.value = undefined; //emptyautocomplete.value;
281
+ autocompleteitem.value = undefined; //emptyautocomplete.value;
282
+ } else if (event.value._id === "new") {
283
+ modelValue.value = undefined; // emptyautocomplete.value;
284
+ autocompleteitem.value = undefined; //emptyautocomplete.value;
285
+ if (isMobile()) {
286
+ mobileListMode.value = "form";
287
+ return;
288
+ } else openViewer(false);
289
+ } else if (typeof event.value.query == "undefined") {
290
+ const selecteddata = {
291
+ _id: event.value._id,
292
+ uid: event.value.uid,
293
+ fullName: event.value.label,
294
+ };
295
+
296
+ modelValue.value = selecteddata;
297
+ autocompleteitem.value = selecteddata;
298
+ }
299
+ mobileVisible.value = false;
300
+ };
301
+
302
+ const emits = defineEmits([
303
+ "change",
304
+ "update:modelValue",
305
+ "update:docNoFormat",
306
+ ]);
307
+ watch(modelValue, (newvalue: any) => {
308
+ emitChanges();
309
+ });
310
+ const emitChanges = () => {
311
+ emits("change", modelValue.value);
312
+ };
313
+
314
+ const setFocus = (ev: any) => {
315
+ if (!isMobile()) ev.target.select();
316
+ };
317
+
318
+ //pop up records
319
+ const openViewer = (readonly: boolean) => {
320
+ if (remotedoc) {
321
+ $event("ViewRecord", {
322
+ _id: modelValue.value?._id as string,
323
+ eventId: randomUUID(),
324
+ label: (readonly
325
+ ? modelValue.value?.label
326
+ : `${t("new") + " " + t(docname)}`) as string,
327
+ readonly: readonly,
328
+ viewer: getDocument(docname)?.viewer,
329
+ documentName: docname,
330
+
331
+ //after create, auto copy value into auto complete
332
+ after: async (eventType: FormCrudEvent, data: any) => {
333
+ if (
334
+ eventType == FormCrudEvent.create ||
335
+ eventType == FormCrudEvent.update
336
+ ) {
337
+ autocompleteitem.value = {
338
+ _id: data._id,
339
+ uid: data.uid,
340
+ fullName: data.fullName,
341
+ };
342
+ if (schema["x-simpleapp-config"].additionalAutoCompleteFields) {
343
+ const addfields =
344
+ schema["x-simpleapp-config"].additionalAutoCompleteFields;
345
+ for (let i = 0; i < addfields.length; i++) {
346
+ const fieldname = addfields[i] as string;
347
+ autocompleteitem.value[fieldname] = data[fieldname];
348
+ }
349
+ }
350
+ modelValue.value = { ...autocompleteitem.value };
351
+ emitChanges();
352
+ }
353
+ },
354
+ });
355
+ }
356
+ };
357
+
358
+ const onClickInMobile = (id: string, item: ForeignKey) => {
359
+ pickAutoComplete({ value: item });
360
+ };
361
+
362
+ const afterRenderMobileForm = async (
363
+ eventType: FormCrudEvent,
364
+ data: any,
365
+ result: any,
366
+ ) => {
367
+ console.log("afterRenderMobileForm", eventType);
368
+ if (eventType == FormCrudEvent.create || eventType == FormCrudEvent.update) {
369
+ autocompleteitem.value = {
370
+ _id: data._id,
371
+ uid: data.uid,
372
+ fullName: data.fullName,
373
+ };
374
+
375
+ modelValue.value = { ...autocompleteitem.value };
376
+ emitChanges();
377
+ mobileVisible.value = false;
378
+ } else if (eventType == FormCrudEvent.exit) {
379
+ mobileVisible.value = false;
380
+ }
381
+ };
382
+
383
+ const clickAutocomplete = (a, b) => {
384
+ console.log("clickAutocomplete", a, b);
385
+ return false;
386
+ };
387
+ </script>
@@ -0,0 +1,22 @@
1
+ <template>
2
+ <Tag v-if="!docStatus" severity="secondary">{{ t("unknown") }}</Tag>
3
+ <Tag v-else-if="docStatus == 'confirm'" severity="success">{{
4
+ t(docStatus)
5
+ }}</Tag>
6
+ <Tag v-else-if="docStatus == 'void'" severity="danger">{{
7
+ t(docStatus)
8
+ }}</Tag>
9
+ <Tag v-else-if="docStatus == 'draft'" severity="secondary"
10
+ >{{ t(docStatus) }}
11
+ </Tag>
12
+ <Tag v-else severity="warning">??{{ t(docStatus) }}</Tag>
13
+ </template>
14
+ <script setup lang="ts">
15
+ /**
16
+ * This file was automatically generated by simpleapp generator during initialization. It is changable.
17
+ * --remove-this-line-to-prevent-override--
18
+ * last change 2024-02-22
19
+ * author: Ks Tan
20
+ */
21
+ const props = defineProps<{ docStatus?: string }>();
22
+ </script>
@@ -10,14 +10,14 @@
10
10
  v-model:model-value="data.tenantName"
11
11
  />
12
12
  <div class="p-inputgroup-addon p p-0">
13
- <button
13
+ <Button
14
14
  :label="t('create')"
15
- class="border rounded-tl-none rounded-bl-none btn btn-primary -ml-1 h-full p-3 rounded-r-md"
15
+ class="border rounded-tl-none rounded-bl-none bg bg-primary-600 text-white -ml-1 h-full p-3 rounded-r-md"
16
16
  @click="createTenant"
17
17
  :loading="onhold"
18
18
  >
19
19
  {{ t("create") }}
20
- </button>
20
+ </Button>
21
21
  </div>
22
22
  </div>
23
23
  </form>
@@ -33,24 +33,23 @@
33
33
  */
34
34
  import { ref } from "vue";
35
35
  import { AxiosResponse } from "axios";
36
- import {EventType,NotificationStatus} from "~/types"
36
+ import { EventType, NotificationStatus } from "~/types";
37
37
  const visible = ref(false);
38
38
  const data = ref({
39
39
  tenantName: "",
40
40
  timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone,
41
- utcOffset: new Date().getTimezoneOffset()
41
+ utcOffset: new Date().getTimezoneOffset(),
42
42
  });
43
43
 
44
-
45
-
46
44
  const createtitle = ref("Create My Company");
47
45
  const errCreateTenant = ref();
48
46
  const onhold = ref(false);
49
47
 
50
48
  const createTenant = async () => {
49
+ holdScreenStart()
51
50
  onhold.value = true;
52
51
 
53
- getPorfileApi()
52
+ getProfileApi()
54
53
  .createTenant(data.value)
55
54
  .then((res: AxiosResponse) => {
56
55
  if (res && res.status && res.status == 201) {
@@ -64,17 +63,16 @@ const createTenant = async () => {
64
63
  errCreateTenant.value = err["message"];
65
64
  console.error("errCreateTenant", err.response.data.data);
66
65
 
67
- useNuxtApp().$event('Notification',{
68
- documentName:'tenant',
66
+ useNuxtApp().$event("Notification", {
67
+ documentName: "tenant",
69
68
  status: NotificationStatus.error,
70
- summary:t('createError'),
71
- data:err.response?.data?.data
72
-
73
- })
74
-
69
+ summary: t("createError"),
70
+ data: err.response?.data?.data,
71
+ });
75
72
  })
76
73
  .finally(() => {
77
74
  onhold.value = false;
75
+ holdScreenEnd()
78
76
  });
79
77
  };
80
78
  </script>