@simitgroup/simpleapp-generator 1.0.63 → 1.1.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.
Files changed (147) hide show
  1. package/README copy.md +9 -9
  2. package/buildinschemas copy/autoincreament.autoinc.jsonschema.json +1 -1
  3. package/buildinschemas copy/docnoformat.docno.jsonschema.json +2 -2
  4. package/dist/buildinschemas/autoincreament.js +6 -6
  5. package/dist/buildinschemas/branch.js +3 -3
  6. package/dist/buildinschemas/branch.js.map +1 -1
  7. package/dist/buildinschemas/docnoformat.js +5 -5
  8. package/dist/buildinschemas/docnoformat.js.map +1 -1
  9. package/dist/buildinschemas/organization.js +3 -3
  10. package/dist/buildinschemas/permission.js +5 -5
  11. package/dist/buildinschemas/permission.js.map +1 -1
  12. package/dist/buildinschemas/tenant.js +2 -2
  13. package/dist/buildinschemas/user.d.ts.map +1 -1
  14. package/dist/buildinschemas/user.js +3 -4
  15. package/dist/buildinschemas/user.js.map +1 -1
  16. package/dist/generate.js +2 -2
  17. package/dist/generate.js.map +1 -1
  18. package/dist/processors/jsonschemabuilder.d.ts.map +1 -1
  19. package/dist/processors/jsonschemabuilder.js +6 -6
  20. package/dist/processors/jsonschemabuilder.js.map +1 -1
  21. package/dist/type.d.ts +7 -19
  22. package/dist/type.d.ts.map +1 -1
  23. package/docs/backend.md +2 -2
  24. package/docs/jsonschema.md +6 -6
  25. package/package.json +1 -1
  26. package/src/buildinschemas/autoincreament.ts +6 -6
  27. package/src/buildinschemas/branch.ts +3 -3
  28. package/src/buildinschemas/docnoformat.ts +5 -5
  29. package/src/buildinschemas/organization.ts +3 -3
  30. package/src/buildinschemas/permission.ts +5 -5
  31. package/src/buildinschemas/tenant.ts +2 -2
  32. package/src/buildinschemas/user.ts +4 -5
  33. package/src/generate.ts +2 -2
  34. package/src/processors/jsonschemabuilder.ts +7 -9
  35. package/src/processors/jsonschemabuilder.ts-old +5 -5
  36. package/src/type.ts +20 -20
  37. package/templates/basic/nest/controller.ts.eta +18 -18
  38. package/templates/basic/nest/processor.ts.eta +1 -1
  39. package/templates/basic/nuxt/pages.[id].vue.eta +1 -1
  40. package/templates/basic/nuxt/pages.landing.vue.eta +12 -17
  41. package/templates/basic/nuxt/{pages.crud.vue.eta → pages.new.vue.eta} +68 -71
  42. package/templates/basic/nuxt/simpleapp.generate.client.ts.eta +6 -6
  43. package/templates/nest/src/simpleapp/generate/commons/interceptors/response.interceptor.ts.eta +1 -1
  44. package/templates/nest/src/simpleapp/generate/commons/user.context.ts.eta +20 -10
  45. package/templates/nest/src/simpleapp/generate/models/apievent.model.ts.eta +1 -1
  46. package/templates/nest/src/simpleapp/generate/processors/simpleapp.processor.ts.eta +8 -9
  47. package/templates/nest/src/simpleapp/generate/types/apievent.type.ts.eta +1 -1
  48. package/templates/nest/src/simpleapp/profile/profile.service.ts.eta +16 -7
  49. package/templates/nest/src/simpleapp/services/autoinc.service.ts.eta +10 -7
  50. package/templates/nest/src/simpleapp/services/branch.service.ts.eta +2 -2
  51. package/templates/nuxt/assets/css/style.css._eta +32 -0
  52. package/templates/nuxt/assets/primevue/passthrough.ts._eta +9 -2
  53. package/templates/nuxt/components/{DebugDocumentData.vue.eta → debug/DebugDocumentData.vue.eta} +8 -4
  54. package/templates/nuxt/components/{EventNotification.vue.eta → event/EventNotification.vue.eta} +13 -9
  55. package/templates/nuxt/components/{HeaderBar.vue.eta → header/HeaderBar.vue.eta} +6 -6
  56. package/templates/nuxt/components/{SelectBranch.vue.eta → header/HeaderSelectBranch.vue.eta} +2 -2
  57. package/templates/nuxt/components/{ButtonMenuPicker.vue.eta → header/button/HeaderButtonMenuPicker.vue.eta} +3 -3
  58. package/templates/nuxt/components/list/ListView.vue.eta +64 -0
  59. package/templates/nuxt/components/renderer/RendererForeignKey.vue.eta +11 -0
  60. package/templates/nuxt/components/renderer/index.ts.eta +12 -0
  61. package/templates/nuxt/components/simpleApp/SimpleAppDocumentNo.vue.eta +77 -0
  62. package/templates/nuxt/components/{SimpleFieldContainer.vue.eta → simpleApp/SimpleAppFieldContainer.vue.eta} +12 -11
  63. package/templates/nuxt/components/{SimpleAppForm.vue.eta → simpleApp/SimpleAppForm.vue.eta} +5 -4
  64. package/templates/nuxt/components/simpleApp/SimpleAppInput.vue.eta +288 -0
  65. package/templates/nuxt/components/simpleApp/SimpleAppInputTable.vue.eta +56 -0
  66. package/templates/nuxt/components/{SimpleAppAutocomplete.vue.eta → simpleApp/pending/SimpleAppAutocomplete.vue} +14 -3
  67. package/templates/nuxt/components/{SimpleAppAutocompletemulti.vue.eta → simpleApp/pending/SimpleAppAutocompletemulti.vue} +1 -1
  68. package/templates/nuxt/components/{SimpleAppCalendar.vue.eta → simpleApp/pending/SimpleAppCalendar.vue} +1 -1
  69. package/templates/nuxt/components/{SimpleAppCheckbox.vue.eta → simpleApp/pending/SimpleAppCheckbox.vue} +1 -1
  70. package/templates/nuxt/components/{SimpleAppChip.vue.eta → simpleApp/pending/SimpleAppChip.vue} +1 -1
  71. package/templates/nuxt/components/{SimpleAppColor.vue.eta → simpleApp/pending/SimpleAppColor.vue} +1 -1
  72. package/templates/nuxt/components/{SimpleAppDocumentNo.vue.eta → simpleApp/pending/SimpleAppDocumentNo.vue} +1 -1
  73. package/templates/nuxt/components/{SimpleAppEditor.vue.eta → simpleApp/pending/SimpleAppEditor.vue} +1 -1
  74. package/templates/nuxt/components/{SimpleAppInputTable.vue.eta → simpleApp/pending/SimpleAppInputTable.vue} +1 -22
  75. package/templates/nuxt/components/{SimpleAppList.vue.eta → simpleApp/pending/SimpleAppList.vue} +1 -1
  76. package/templates/nuxt/components/{SimpleAppListmulti.vue.eta → simpleApp/pending/SimpleAppListmulti.vue} +1 -1
  77. package/templates/nuxt/components/{SimpleAppNumber.vue.eta → simpleApp/pending/SimpleAppNumber.vue} +12 -1
  78. package/templates/nuxt/components/{SimpleAppPassword.vue.eta → simpleApp/pending/SimpleAppPassword.vue} +1 -1
  79. package/templates/nuxt/components/{SimpleAppRadio.vue.eta → simpleApp/pending/SimpleAppRadio.vue} +1 -1
  80. package/templates/nuxt/components/{SimpleAppRating.vue.eta → simpleApp/pending/SimpleAppRating.vue} +1 -1
  81. package/templates/nuxt/components/{SimpleAppSelect.vue.eta → simpleApp/pending/SimpleAppSelect.vue} +12 -2
  82. package/templates/nuxt/components/{SimpleAppSelectmulti.vue.eta → simpleApp/pending/SimpleAppSelectmulti.vue} +1 -1
  83. package/templates/nuxt/components/{SimpleAppSlider.vue.eta → simpleApp/pending/SimpleAppSlider.vue} +1 -1
  84. package/templates/nuxt/components/{SimpleAppSwitch.vue.eta → simpleApp/pending/SimpleAppSwitch.vue} +1 -1
  85. package/templates/nuxt/components/{SimpleAppText.vue.eta → simpleApp/pending/SimpleAppText.vue} +13 -4
  86. package/templates/nuxt/components/{SimpleAppTextarea.vue.eta → simpleApp/pending/SimpleAppTextarea.vue} +13 -2
  87. package/templates/nuxt/components/{SimpleAppDatatable.vue.eta → table/TableDocuments.vue.eta} +15 -63
  88. package/templates/nuxt/components/{UserProfileListItem.vue.eta → user/UserProfileListItem.vue.eta} +1 -1
  89. package/templates/nuxt/composables/getMenus.generate.ts.eta +4 -1
  90. package/templates/nuxt/composables/getOpenApi.generate.ts.eta +32 -1
  91. package/templates/nuxt/composables/goTo.generate.ts.eta +7 -0
  92. package/templates/nuxt/composables/notifications.generate.ts.eta +1 -1
  93. package/templates/nuxt/composables/stringHelper.generate.ts.eta +1 -0
  94. package/templates/nuxt/layouts/default.vue.eta +1 -1
  95. package/templates/nuxt/layouts/documentlist.vue.eta +24 -8
  96. package/templates/nuxt/layouts/sidelist.vue.eta +68 -0
  97. package/templates/nuxt/layouts/sidelistcrud.vue.eta +1 -1
  98. package/templates/nuxt/nuxt.config.ts.eta +0 -1
  99. package/templates/nuxt/pages/[xorg]/branch/index.vue.etax +2 -2
  100. package/templates/nuxt/pages/[xorg]/docnoformat/{[id].vue.eta → [doctype]/[id].vue.eta} +2 -5
  101. package/templates/nuxt/pages/[xorg]/docnoformat/[doctype]/new.vue.eta +222 -0
  102. package/templates/nuxt/pages/[xorg]/docnoformat/[doctype].vue.eta +33 -0
  103. package/templates/nuxt/pages/[xorg]/docnoformat/index.vue.eta +4 -294
  104. package/templates/nuxt/pages/[xorg]/docnoformat.vue.eta +100 -0
  105. package/templates/nuxt/pages/[xorg]/organization/[bid].vue.eta +14 -0
  106. package/templates/nuxt/pages/[xorg]/organization/[id]/branches/[bid].vue +13 -0
  107. package/templates/nuxt/pages/[xorg]/organization/[id]/branches/new.vue +149 -0
  108. package/templates/nuxt/pages/[xorg]/organization/[id]/index.vue.eta +1 -0
  109. package/templates/nuxt/pages/[xorg]/organization/new.vue.eta +151 -0
  110. package/templates/nuxt/pages/[xorg]/organization.vue.eta +145 -0
  111. package/templates/nuxt/pages/[xorg]/user/index.vue.eta +23 -23
  112. package/templates/nuxt/pages/[xorg]/user.vue.eta +13 -11
  113. package/templates/nuxt/pages/index.vue._eta +2 -2
  114. package/templates/nuxt/plugins/20.simpleapp-userstore.ts.eta +10 -1
  115. package/templates/nuxt/simpleapp/generate/clients/SimpleAppClient.ts.eta +1 -1
  116. package/templates/nuxt/types/documentlist.ts.eta +2 -2
  117. package/templates/nuxt/types/index.ts.eta +2 -1
  118. package/templates/nuxt/types/simpleappinput.ts.eta +39 -0
  119. package/templates/project/jsonschemas/category.json._eta +5 -5
  120. package/templates/project/jsonschemas/customer.json._eta +5 -5
  121. package/templates/project/jsonschemas/invoice.json._eta +7 -7
  122. package/templates/project/jsonschemas/product.json._eta +5 -5
  123. package/tsconfig.tsbuildinfo +1 -1
  124. package/templates/nuxt/components/ListView.vue.eta +0 -52
  125. package/templates/nuxt/components/renderers/ForeignKeyRender.vue.eta +0 -10
  126. package/templates/nuxt/composables/getAutocomplete.generate.ts.eta +0 -32
  127. package/templates/nuxt/pages/[xorg]/organization/index.vue.eta +0 -168
  128. /package/templates/nuxt/components/{EventDecision.vue.eta → event/EventDecision.vue.eta} +0 -0
  129. /package/templates/nuxt/components/{ButtonHome.vue.eta → header/button/HeaderButtonHome.vue.eta} +0 -0
  130. /package/templates/nuxt/components/{ButtonLogout.vue.eta → header/button/HeaderButtonLogout.vue.eta} +0 -0
  131. /package/templates/nuxt/components/{ButtonProfile.vue.eta → header/button/HeaderButtonProfile.vue.eta} +0 -0
  132. /package/templates/nuxt/components/{renderers/BooleanRender.vue.eta → renderer/RendererBoolean.vue.eta} +0 -0
  133. /package/templates/nuxt/components/{renderers/DateRender.vue.eta → renderer/RendererDate.vue.eta} +0 -0
  134. /package/templates/nuxt/components/{renderers/MoneyRender.vue.eta → renderer/RendererMoney.vue.eta} +0 -0
  135. /package/templates/nuxt/components/{renderers/MultiTextRender.vue.eta → renderer/RendererMultiText.vue.eta} +0 -0
  136. /package/templates/nuxt/components/{SimpleAppDynamicInput.vue.eta → simpleApp/pending/SimpleAppDynamicInput.vue} +0 -0
  137. /package/templates/nuxt/components/{SimpleAppValue.vue.eta → simpleApp/pending/SimpleAppValue.vue} +0 -0
  138. /package/templates/nuxt/components/{helper.ts.eta → simpleApp/pending/helper.ts-backup} +0 -0
  139. /package/templates/nuxt/components/{type.ts.eta → simpleApp/pending/type.ts-backup} +0 -0
  140. /package/templates/nuxt/components/{CrudNestedDoc.vue.eta → suspended/CrudNestedDoc.vue.eta} +0 -0
  141. /package/templates/nuxt/components/{CrudSimple.vue.eta → suspended/CrudSimple.vue.eta} +0 -0
  142. /package/templates/nuxt/components/{Menus.vue.eta → suspended/Menus.vue.eta} +0 -0
  143. /package/templates/nuxt/components/{Spinner.vue.eta → suspended/Spinner.vue.eta} +0 -0
  144. /package/templates/nuxt/components/{ButtonCreateTenant.vue.eta → user/UserButtonCreateTenant.vue.eta} +0 -0
  145. /package/templates/nuxt/components/{ButtonPermissionInfo.vue.eta → user/UserButtonPermissionInfo.vue.eta} +0 -0
  146. /package/templates/nuxt/components/{Invitation.vue.eta → user/UserInvitation.vue.eta} +0 -0
  147. /package/templates/nuxt/components/{TenantPicker.vue.eta → user/UserTenantPicker.vue.eta} +0 -0
@@ -1,14 +1,13 @@
1
1
 
2
2
  <template>
3
3
  <FieldContainer :hidelabel="hidelabel" v-model="modelValue" :label="label" :description="description" :setting="setting" :instancepath="instancepath" :error="error" #default="slotprops">
4
-
5
-
6
4
  <InputText v-if="slotprops.error"
7
5
  class="simpleapp-inputfield simpleapp-invalid-input"
8
6
  :id="slotprops.uuid"
9
7
  v-model="modelValue"
10
8
  :path="setting.instancepath"
11
9
  :type="type"
10
+ :readonly="isReadonly"
12
11
  ></InputText>
13
12
  <InputText v-else
14
13
  class="simpleapp-inputfield"
@@ -16,13 +15,14 @@
16
15
  v-model="modelValue"
17
16
  :path="setting.instancepath"
18
17
  :type="type"
18
+ :readonly="isReadonly"
19
19
  ></InputText>
20
20
  </FieldContainer>
21
21
  </template>
22
22
  <script lang="ts" setup>
23
23
  import {computed,watch,ref} from 'vue'
24
24
  import InputText from 'primevue/inputtext';
25
- import FieldContainer from './SimpleFieldContainer.vue'
25
+ import FieldContainer from './SimpleAppFieldContainer.vue'
26
26
  const modelValue = defineModel()
27
27
  const props = withDefaults( defineProps<{
28
28
  label?:string,
@@ -32,11 +32,20 @@ const props = withDefaults( defineProps<{
32
32
  type?:string,
33
33
  instancepath?:string,
34
34
  hidelabel?: boolean
35
+ readonly?: boolean
35
36
  }>(),{type:'text'})
36
37
 
37
38
  // const modelValue = defineModel<{modelValue?:string}>()
38
39
  // console.log(modelValue.value)
39
-
40
+ const isReadonly = computed(()=>{
41
+ if(props.readonly){
42
+ return props.readonly
43
+ }else if(props.setting.readonly){
44
+ return props.setting.readonly
45
+ }else{
46
+ return false
47
+ }
48
+ })
40
49
  const emits = defineEmits(['change'])
41
50
  // const onchange=(e:any)=>{
42
51
  // emits('update:modelValue',e.target.value)
@@ -8,6 +8,7 @@
8
8
  v-bind="$attrs"
9
9
  :autoResize="autoResize"
10
10
  :path="setting.instancepath"
11
+ :readonly="isReadonly"
11
12
  ></Textarea>
12
13
  </FieldContainer>
13
14
  </template>
@@ -15,7 +16,7 @@
15
16
  import {computed,watch,ref} from 'vue'
16
17
  import Textarea from 'primevue/textarea';
17
18
 
18
- import FieldContainer from './SimpleFieldContainer.vue'
19
+ import FieldContainer from './SimpleAppFieldContainer.vue'
19
20
  const modelValue = defineModel()
20
21
  const props = defineProps<{
21
22
  label?:string,
@@ -25,6 +26,16 @@ const props = defineProps<{
25
26
  setting:any,
26
27
  autoResize?:boolean,
27
28
  instancepath?:string,
28
- }>()
29
+ readonly?:boolean
29
30
 
31
+ }>()
32
+ const isReadonly = computed(()=>{
33
+ if(props.readonly){
34
+ return props.readonly
35
+ }else if(props.setting.readonly){
36
+ return props.setting.readonly
37
+ }else{
38
+ return false
39
+ }
40
+ })
30
41
  </script>
@@ -1,59 +1,9 @@
1
- <!-- <template>
2
- <DataTable v-bind="$attrs"
3
- stripedRows
4
- dataKey="_id"
5
- :pt="{
6
- bodyRow:{class:'bg-blue-200'},
7
- wrapper:{class:'bg-red-100'},
8
-
9
- root:{class:'bg-green-100'},
10
- header:{class:'bg-blue-600'},
11
- pagebutton:{class:'bg-red-800'},
12
-
13
- tfoot:{class:'bg-red-800 boder round m-4 gap-4'},
14
- }"
15
-
16
- :value="valueModel"
17
- :filters="filters"
18
- :paginator="true" :rows="20"
19
- :rowsPerPageOptions="[20,40,60,100]"
20
- filterDisplay="row"
21
- >
22
-
23
- <template #empty> <div class="text-center">No record found.</div> </template>
24
- <template #header><slot name="header">
25
- <div class="flex flex-wrap gap-2 align-items-center justify-content-between">
26
- <h4 class="m-0 flex-1">Records</h4>
27
- <span class="p-input-icon-left">
28
- <i class="pi pi-search" />
29
- <InputText v-model="filters['global'].value" placeholder="Search..." />
30
- </span>
31
- </div>
32
-
33
- </slot></template>
34
- <Column v-for="(col,index) in columns" :field="col" :header="camelCaseToWords(col)"></Column>
35
- <slot >
36
-
37
- </slot>
38
- </DataTable>
39
- </template>
40
- <script setup lang="ts">
41
- import { FilterMatchMode } from 'primevue/api';
42
- import DataTable from 'primevue/datatable';
43
- import Column from 'primevue/column';
44
- import {camelCaseToWords} from './helper'
45
- const props = defineProps<{columns:string[]|string[][]}>()
46
- const valueModel = defineModel<Object[]>()
47
- const filters = ref({
48
- 'global': {value: null, matchMode: FilterMatchMode.CONTAINS},
49
- });
50
-
51
- </script> -->
52
1
  <template>
53
2
  <DataTable v-bind="$attrs"
54
3
  stripedRows
55
4
  dataKey="_id"
56
5
  :showGridlines="true"
6
+ size="small"
57
7
  :pt="{
58
8
  // header:{ class:'border bg-gray-100'},
59
9
  headerRow:{ class:'border bg-gray-200'},
@@ -90,9 +40,11 @@ const valueModel = defineModel<Object[]>()
90
40
  </div>
91
41
  </template>
92
42
 
93
- <Column v-for="(col,index) in columns" :field="typeof col == 'string' ? col : col.field">
43
+ <Column v-for="(col,index) in columns" sortable :field="typeof col == 'string' ? col : col.field"
44
+
45
+ >
94
46
  <template v-if="typeof col == 'string'" #header>
95
- <p >{{ col }}</p>
47
+ <p >{{ t(col) }}</p>
96
48
  </template>
97
49
  <template v-else-if="typeof col =='object'" #header>
98
50
  <span>{{ col.title }} </span>
@@ -105,11 +57,11 @@ const valueModel = defineModel<Object[]>()
105
57
  <p >{{ data[col] }}</p>
106
58
  </template>
107
59
  <template v-else-if="typeof col =='object'" #body="{index,data}">
108
- <div v-if="col.component && col.field=='*'">
109
- <component :is="col.component" :value="data" :fields="col.moreFields" :class="col.cssClass" :setting="col.componentSetting"></component>
60
+ <div v-if="col.rendererName && col.field=='*'">
61
+ <component :is="renderComponent[col.rendererName]" :value="data" :fields="col.moreFields" :class="col.cssClass" :setting="col.rendererSetting"></component>
110
62
  </div>
111
- <div v-else-if="col.component && col.field!='*'">
112
- <component :is="col.component" v-model="data[col.field]" :moreFields="col.moreFields" :class="col.cssClass" :setting="col.componentSetting" ></component>
63
+ <div v-else-if="col.rendererName && col.field!='*'">
64
+ <component :is="renderComponent[col.rendererName]" v-model="data[col.field]" :moreFields="col.moreFields" :class="col.cssClass" :setting="col.rendererSetting" ></component>
113
65
  </div>
114
66
  <div v-else class="flex flex-col">
115
67
  <div :class="col.class">{{ data[col.field] }}</div>
@@ -118,11 +70,11 @@ const valueModel = defineModel<Object[]>()
118
70
  <div v-if="typeof f == 'string'" :class="'text-gray-400 text-sm' + f.cssClass??'' ">{{ data[f] }}</div>
119
71
  <!-- additional field define as object -->
120
72
  <div v-else>
121
- <div v-if="f.component && f.field=='*'">
122
- <component :is="f.component" :value="data" :class="f.cssClass" :setting="f.componentSetting"></component>
73
+ <div v-if="f.rendererName && f.field=='*'">
74
+ <component :is="renderComponent[f.rendererName]" :value="data" :class="f.cssClass" :setting="f.rendererSetting"></component>
123
75
  </div>
124
- <div v-else-if="f.component && f.field!='*'">
125
- <component :is="f.component" v-model="data[f.field]" :class="f.cssClass" :setting="f.componentSetting" ></component>
76
+ <div v-else-if="f.rendererName && f.field!='*'">
77
+ <component :is="renderComponent[f.rendererName]" v-model="data[f.field]" :class="f.cssClass" :setting="f.rendererSetting" ></component>
126
78
  </div>
127
79
  <div v-else>
128
80
  <div :class="f.cssClass">{{ data[f.field] }}</div>
@@ -143,11 +95,11 @@ const valueModel = defineModel<Object[]>()
143
95
  </Datatable>
144
96
  </template>
145
97
  <script setup lang="ts">
146
- import {SearchBody,CellSetting} from '~/types'
98
+ import {CellSetting} from '~/types'
147
99
  import { FilterMatchMode } from 'primevue/api';
148
100
  import DataTable from 'primevue/datatable';
149
101
  import Column from 'primevue/column';
150
-
102
+ import renderComponent from '~/components/renderer'
151
103
  const props = defineProps<{
152
104
  value:any[]
153
105
  columns: CellSetting[]
@@ -5,7 +5,7 @@
5
5
  <div class="flex min-w-0 gap-x-4">
6
6
  <img class="h-12 w-12 flex-none rounded-full bg-gray-50" :src="`${getAvatarLink(data.email,32)}`" alt="" />
7
7
  <div class="min-w-0 flex-auto">
8
- <p class="text-sm font-semibold leading-6 text-gray-900">{{ data.fullname }}</p>
8
+ <p class="text-sm font-semibold leading-6 text-gray-900">{{ data.fullName }}</p>
9
9
  <p class="mt-1 truncate text-xs leading-5 text-gray-500">{{ data.email }}</p>
10
10
  </div>
11
11
  </div>
@@ -10,6 +10,9 @@ import {getAllDocuments} from '../simpleapp/generate/commons/documents'
10
10
  export const getDocTypes = ()=>{
11
11
  return getAllDocuments().filter(item=>item.page!='')
12
12
  }
13
+ export const getAllDocFormats = ()=>{
14
+ return getAllDocuments().filter(item=>item.docNumber)
15
+ }
13
16
 
14
17
  export const getPublicResource = (xorg:string) : MenuData[] => {
15
18
  // const xorg = getUserStore().getCurrentXorg()
@@ -44,7 +47,7 @@ export const getMenus =() :MenuData[]=>{
44
47
  // if(m.label)
45
48
 
46
49
  if(getUserStore().haveAccess(keyword)){
47
- const m:MenuData = {label: keyword, url:`/${xorg}/${keyword}`, isolationType:allmenus[i].isolationType}
50
+ const m:MenuData = {label: t(keyword), url:`/${xorg}/${keyword}`, isolationType:allmenus[i].isolationType}
48
51
  allowmenus.push(m)
49
52
  }
50
53
  }
@@ -1,6 +1,37 @@
1
+ /**
2
+ * This file was automatically generated by simpleapp generator during initialization.
3
+ * DO NOT MODIFY IT BY HAND.
4
+ * last change 2023-09-09
5
+ * author: Ks Tan
6
+ */
7
+
1
8
  import * as o from "../simpleapp/generate/openapi";
2
9
  import axios from 'axios'
10
+ export const getDocumentApi = (apiname: string): any => {
11
+ //const { csrf } = useCsrf()
12
+ //axios.defaults.headers.common = {"CSRF-TOKEN": csrf};
13
+ const route = useRoute();
3
14
 
4
- export const getApi=()=>{
15
+ const config: o.Configuration = {
16
+ basePath: `${useRuntimeConfig().public.APP_URL}/api/${route.params.xorg}`,
17
+ isJsonMime: () => true,
18
+ };
19
+ const docsOpenapi: any = {
20
+ <% for(let i=0;i<it.modules.length; i++){ %>
21
+ '<%=it.modules[i].docname.toLowerCase()%>': new o.<%=it.modules[i].doctype.toUpperCase()%>Api(config),
22
+ <%}%>
23
+ };
24
+ if (!docsOpenapi[apiname]) {
25
+ console.error(
26
+ `api for '${apiname}' does not exists, most probably define wrong x-foreignkey`,
27
+ );
28
+ return undefined;
29
+ } else {
30
+ return docsOpenapi[apiname];
31
+ }
32
+ };
33
+
34
+
35
+ export const getAllApi=()=>{
5
36
  return o
6
37
  }
@@ -13,3 +13,10 @@ export const getDocumentUrl = (document:string,id?:string,querystr?:string)=>{
13
13
  export const goTo = (document:string,id?:string,querystr?:string)=>{
14
14
  navigateTo(getDocumentUrl(document,id,querystr))
15
15
  }
16
+
17
+
18
+ export const goBranch = (branchRecordId: string) => {
19
+ const parenturl = getDocumentUrl("organization");
20
+ const branchUrl = `${parenturl}/${branchRecordId}`;
21
+ navigateTo(branchUrl);
22
+ };
@@ -1,6 +1,6 @@
1
1
  import {NotificationStatus} from '~/types'
2
2
  export const getStatusColor = (status:NotificationStatus) => {
3
- console.log("get status color",status)
3
+ //console.log("get status color",status)
4
4
  switch(status){
5
5
  case NotificationStatus.error:
6
6
  return 'bg bg-danger-600 text-white';
@@ -13,3 +13,4 @@ export const getAvatarLink = (email:string, size:number):string=>{
13
13
  }
14
14
 
15
15
  export const toLocalDate = (dateiso8601:string)=> new Date(String(dateiso8601)).toLocaleDateString()
16
+ export const t = (txt:string):string=> camelCaseToWords(txt)
@@ -4,7 +4,7 @@
4
4
  <template>
5
5
  <div>
6
6
  <HeaderBar />
7
- <Invitation/>
7
+ <UserInvitation/>
8
8
  <slot></slot>
9
9
  </div>
10
10
  </template>
@@ -93,7 +93,7 @@ import {SearchBody,CellSetting} from '~/types'
93
93
  tablecolumns.value= !useRoute().meta.columns ? [] : useRoute().meta.columns as CellSetting[]
94
94
  documentName.value = String(useRoute().meta.documentName)
95
95
  const searchbody: SearchBody = {
96
- fields: tablecolumns.value.concat(['created']),
96
+ fields: getWantedFields(tablecolumns.value),
97
97
  sorts: metas.sorts as string[][]
98
98
  }
99
99
  obj = getDocument(documentName.value)
@@ -118,6 +118,24 @@ import {SearchBody,CellSetting} from '~/types'
118
118
  // }
119
119
  }
120
120
 
121
+ const getWantedFields = (selectedCols:CellSetting[]) =>{
122
+ let cols:string[] = []
123
+
124
+ selectedCols.forEach((item)=>{
125
+
126
+ if(typeof item=='string'){
127
+ cols.push(item)
128
+ }else if(typeof item =='object'){
129
+ if(item.field !='*'){
130
+ cols.push(item.field)
131
+ }
132
+ if(item.moreFields && item.moreFields.length>0){
133
+ cols = cols.concat(item.moreFields)
134
+ }
135
+ }
136
+ })
137
+ return cols
138
+ }
121
139
  watch(()=> useRoute().meta ,(newvalue,oldvalue)=>{
122
140
  refresh()
123
141
  })
@@ -130,8 +148,8 @@ watch(()=> useRoute().meta ,(newvalue,oldvalue)=>{
130
148
  <div>
131
149
 
132
150
  <HeaderBar />
133
- <Invitation/>
134
- <SimpleAppDatatable :value="recordlist" :columns="tablecolumns" :title="String(useRoute().meta.name)">
151
+ <UserInvitation/>
152
+ <TableDocuments :value="recordlist" :columns="tablecolumns" :title="String(useRoute().meta.name)">
135
153
  <template #toolbar>
136
154
  <div class="w-full text-left">
137
155
  <slot>
@@ -143,13 +161,11 @@ watch(()=> useRoute().meta ,(newvalue,oldvalue)=>{
143
161
  <Button class="bg-secondary-600 hover:bg-secondary-400 text-white" @click="refresh()" type="button" >Refresh</Button>
144
162
  </template>
145
163
  <Column header=" ">
146
- <template #body="{index,data}">
147
- <NuxtLink :to="getDocumentUrl(String(useRoute().meta.documentName),data._id)">
148
- <Button icon="pi pi-pencil" class="bg-primary-600 hover:bg-primary-400 text-white" >Edit</Button>
149
- </NuxtLink>
164
+ <template #body="{index,data}">
165
+ <Button @click="goTo(String(useRoute().meta.documentName),data._id)" icon="pi pi-pencil" class="btn btn-primary" >Edit</Button>
150
166
  </template>
151
167
  </Column>
152
- </SimpleAppDatatable>
168
+ </TableDocuments>
153
169
  <!--
154
170
  <DebugDocumentData v-model="data"/>
155
171
  -->
@@ -0,0 +1,68 @@
1
+ <script lang="ts" setup>
2
+ /**
3
+ * This file was automatically generated by simpleapp generator during initialization.
4
+ * You may modify it
5
+ * last change 2023-09-09
6
+ * author: Ks Tan
7
+ */
8
+
9
+ import Menus from '~/components/Menus.vue'
10
+ const {$listen,$event} = useNuxtApp()
11
+
12
+
13
+ const documentName = ref(String(useRoute().meta.documentName))
14
+ let obj = getDocument(documentName.value)
15
+
16
+ const list = ref([])
17
+
18
+ $listen("RefreshDocumentList", (data) => {
19
+ if(data.documentName == documentName.value){
20
+ refresh()
21
+ }
22
+ });
23
+
24
+ watch(()=>useRoute().fullPath,()=>{
25
+ refresh()
26
+ })
27
+
28
+ const refresh = async ()=>{
29
+
30
+
31
+ documentName.value = String(useRoute().meta.documentName)
32
+ obj = getDocument(documentName.value)
33
+ list.value = await obj?.search({})
34
+ console.log("refreshrefreshrefresh",documentName.value)
35
+ }
36
+ // // $listen('*',(type:any,data:any)=>{ //simple use case, use any to prevent error
37
+ // $listen('listloaded',(newlist)=>{
38
+ // primarylist.value = newlist
39
+ // })
40
+
41
+ const selectItem=(item:any)=>{
42
+ // $event('',item)
43
+ }
44
+
45
+ refresh()
46
+
47
+ </script>
48
+ <template>
49
+ <div>
50
+ <HeaderBar />
51
+ <UserInvitation/>
52
+ <div class="grid grid-cols-3">
53
+ <div>
54
+ <ListView
55
+ :list="list" :withFilter="true"
56
+ :url="getDocumentUrl('organization')"
57
+ :titleField="String(useRoute().meta.titleField)"
58
+ :subTitleField="String(useRoute().meta.subTitleField)" ></ListView>
59
+
60
+ </div>
61
+ <div class="col-span-2">
62
+ <slot></slot>
63
+ </div>
64
+
65
+ </div>
66
+
67
+ </div>
68
+ </template>
@@ -26,7 +26,7 @@ const selectItem=(item:any)=>{
26
26
  <div>
27
27
 
28
28
  <HeaderBar />
29
- <Invitation/>
29
+ <UserInvitation/>
30
30
  <div class="grid grid-cols-4">
31
31
  <div class="col col-span-1 ">
32
32
  <ListView :list="primarylist" @clickitem="selectItem"></ListView>
@@ -9,7 +9,6 @@ export default defineNuxtConfig({
9
9
  // colorMode: {} ,
10
10
  runtimeConfig:{
11
11
  public:{
12
- SIMPLEAPP_BACKEND_URL: process.env.SIMPLEAPP_BACKEND_URL,
13
12
  APP_URL: process.env.APP_URL,
14
13
  API_URL: process.env.API_URL,
15
14
  DEBUGDATA: process.env.DEBUGDATA,
@@ -20,8 +20,8 @@ const columns = [
20
20
  /* skip system columns doctype*/
21
21
  /* skip system columns created*/
22
22
  /* skip system columns updated*/
23
- /* skip system columns createdby*/
24
- /* skip system columns updatedby*/
23
+ /* skip system columns createdBy*/
24
+ /* skip system columns updatedBy*/
25
25
  /* skip system columns tenantId*/
26
26
  /* skip system columns orgId*/
27
27
  ];
@@ -6,12 +6,9 @@
6
6
  * last change 2023-09-09
7
7
  * author: Ks Tan
8
8
  */
9
- import Index from "./index.vue";
10
- definePageMeta({
11
- layout: 'sidelistcrud',
12
- });
9
+ import Crud from "./new.vue";
13
10
 
14
11
  </script>
15
12
  <template>
16
- <Index />
13
+ <Crud/>
17
14
  </template>