@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.
- package/README copy.md +9 -9
- package/buildinschemas copy/autoincreament.autoinc.jsonschema.json +1 -1
- package/buildinschemas copy/docnoformat.docno.jsonschema.json +2 -2
- package/dist/buildinschemas/autoincreament.js +6 -6
- package/dist/buildinschemas/branch.js +3 -3
- package/dist/buildinschemas/branch.js.map +1 -1
- package/dist/buildinschemas/docnoformat.js +5 -5
- package/dist/buildinschemas/docnoformat.js.map +1 -1
- package/dist/buildinschemas/organization.js +3 -3
- package/dist/buildinschemas/permission.js +5 -5
- package/dist/buildinschemas/permission.js.map +1 -1
- package/dist/buildinschemas/tenant.js +2 -2
- package/dist/buildinschemas/user.d.ts.map +1 -1
- package/dist/buildinschemas/user.js +3 -4
- package/dist/buildinschemas/user.js.map +1 -1
- package/dist/generate.js +2 -2
- package/dist/generate.js.map +1 -1
- package/dist/processors/jsonschemabuilder.d.ts.map +1 -1
- package/dist/processors/jsonschemabuilder.js +6 -6
- package/dist/processors/jsonschemabuilder.js.map +1 -1
- package/dist/type.d.ts +7 -19
- package/dist/type.d.ts.map +1 -1
- package/docs/backend.md +2 -2
- package/docs/jsonschema.md +6 -6
- package/package.json +1 -1
- package/src/buildinschemas/autoincreament.ts +6 -6
- package/src/buildinschemas/branch.ts +3 -3
- package/src/buildinschemas/docnoformat.ts +5 -5
- package/src/buildinschemas/organization.ts +3 -3
- package/src/buildinschemas/permission.ts +5 -5
- package/src/buildinschemas/tenant.ts +2 -2
- package/src/buildinschemas/user.ts +4 -5
- package/src/generate.ts +2 -2
- package/src/processors/jsonschemabuilder.ts +7 -9
- package/src/processors/jsonschemabuilder.ts-old +5 -5
- package/src/type.ts +20 -20
- package/templates/basic/nest/controller.ts.eta +18 -18
- package/templates/basic/nest/processor.ts.eta +1 -1
- package/templates/basic/nuxt/pages.[id].vue.eta +1 -1
- package/templates/basic/nuxt/pages.landing.vue.eta +12 -17
- package/templates/basic/nuxt/{pages.crud.vue.eta → pages.new.vue.eta} +68 -71
- package/templates/basic/nuxt/simpleapp.generate.client.ts.eta +6 -6
- package/templates/nest/src/simpleapp/generate/commons/interceptors/response.interceptor.ts.eta +1 -1
- package/templates/nest/src/simpleapp/generate/commons/user.context.ts.eta +20 -10
- package/templates/nest/src/simpleapp/generate/models/apievent.model.ts.eta +1 -1
- package/templates/nest/src/simpleapp/generate/processors/simpleapp.processor.ts.eta +8 -9
- package/templates/nest/src/simpleapp/generate/types/apievent.type.ts.eta +1 -1
- package/templates/nest/src/simpleapp/profile/profile.service.ts.eta +16 -7
- package/templates/nest/src/simpleapp/services/autoinc.service.ts.eta +10 -7
- package/templates/nest/src/simpleapp/services/branch.service.ts.eta +2 -2
- package/templates/nuxt/assets/css/style.css._eta +32 -0
- package/templates/nuxt/assets/primevue/passthrough.ts._eta +9 -2
- package/templates/nuxt/components/{DebugDocumentData.vue.eta → debug/DebugDocumentData.vue.eta} +8 -4
- package/templates/nuxt/components/{EventNotification.vue.eta → event/EventNotification.vue.eta} +13 -9
- package/templates/nuxt/components/{HeaderBar.vue.eta → header/HeaderBar.vue.eta} +6 -6
- package/templates/nuxt/components/{SelectBranch.vue.eta → header/HeaderSelectBranch.vue.eta} +2 -2
- package/templates/nuxt/components/{ButtonMenuPicker.vue.eta → header/button/HeaderButtonMenuPicker.vue.eta} +3 -3
- package/templates/nuxt/components/list/ListView.vue.eta +64 -0
- package/templates/nuxt/components/renderer/RendererForeignKey.vue.eta +11 -0
- package/templates/nuxt/components/renderer/index.ts.eta +12 -0
- package/templates/nuxt/components/simpleApp/SimpleAppDocumentNo.vue.eta +77 -0
- package/templates/nuxt/components/{SimpleFieldContainer.vue.eta → simpleApp/SimpleAppFieldContainer.vue.eta} +12 -11
- package/templates/nuxt/components/{SimpleAppForm.vue.eta → simpleApp/SimpleAppForm.vue.eta} +5 -4
- package/templates/nuxt/components/simpleApp/SimpleAppInput.vue.eta +288 -0
- package/templates/nuxt/components/simpleApp/SimpleAppInputTable.vue.eta +56 -0
- package/templates/nuxt/components/{SimpleAppAutocomplete.vue.eta → simpleApp/pending/SimpleAppAutocomplete.vue} +14 -3
- package/templates/nuxt/components/{SimpleAppAutocompletemulti.vue.eta → simpleApp/pending/SimpleAppAutocompletemulti.vue} +1 -1
- package/templates/nuxt/components/{SimpleAppCalendar.vue.eta → simpleApp/pending/SimpleAppCalendar.vue} +1 -1
- package/templates/nuxt/components/{SimpleAppCheckbox.vue.eta → simpleApp/pending/SimpleAppCheckbox.vue} +1 -1
- package/templates/nuxt/components/{SimpleAppChip.vue.eta → simpleApp/pending/SimpleAppChip.vue} +1 -1
- package/templates/nuxt/components/{SimpleAppColor.vue.eta → simpleApp/pending/SimpleAppColor.vue} +1 -1
- package/templates/nuxt/components/{SimpleAppDocumentNo.vue.eta → simpleApp/pending/SimpleAppDocumentNo.vue} +1 -1
- package/templates/nuxt/components/{SimpleAppEditor.vue.eta → simpleApp/pending/SimpleAppEditor.vue} +1 -1
- package/templates/nuxt/components/{SimpleAppInputTable.vue.eta → simpleApp/pending/SimpleAppInputTable.vue} +1 -22
- package/templates/nuxt/components/{SimpleAppList.vue.eta → simpleApp/pending/SimpleAppList.vue} +1 -1
- package/templates/nuxt/components/{SimpleAppListmulti.vue.eta → simpleApp/pending/SimpleAppListmulti.vue} +1 -1
- package/templates/nuxt/components/{SimpleAppNumber.vue.eta → simpleApp/pending/SimpleAppNumber.vue} +12 -1
- package/templates/nuxt/components/{SimpleAppPassword.vue.eta → simpleApp/pending/SimpleAppPassword.vue} +1 -1
- package/templates/nuxt/components/{SimpleAppRadio.vue.eta → simpleApp/pending/SimpleAppRadio.vue} +1 -1
- package/templates/nuxt/components/{SimpleAppRating.vue.eta → simpleApp/pending/SimpleAppRating.vue} +1 -1
- package/templates/nuxt/components/{SimpleAppSelect.vue.eta → simpleApp/pending/SimpleAppSelect.vue} +12 -2
- package/templates/nuxt/components/{SimpleAppSelectmulti.vue.eta → simpleApp/pending/SimpleAppSelectmulti.vue} +1 -1
- package/templates/nuxt/components/{SimpleAppSlider.vue.eta → simpleApp/pending/SimpleAppSlider.vue} +1 -1
- package/templates/nuxt/components/{SimpleAppSwitch.vue.eta → simpleApp/pending/SimpleAppSwitch.vue} +1 -1
- package/templates/nuxt/components/{SimpleAppText.vue.eta → simpleApp/pending/SimpleAppText.vue} +13 -4
- package/templates/nuxt/components/{SimpleAppTextarea.vue.eta → simpleApp/pending/SimpleAppTextarea.vue} +13 -2
- package/templates/nuxt/components/{SimpleAppDatatable.vue.eta → table/TableDocuments.vue.eta} +15 -63
- package/templates/nuxt/components/{UserProfileListItem.vue.eta → user/UserProfileListItem.vue.eta} +1 -1
- package/templates/nuxt/composables/getMenus.generate.ts.eta +4 -1
- package/templates/nuxt/composables/getOpenApi.generate.ts.eta +32 -1
- package/templates/nuxt/composables/goTo.generate.ts.eta +7 -0
- package/templates/nuxt/composables/notifications.generate.ts.eta +1 -1
- package/templates/nuxt/composables/stringHelper.generate.ts.eta +1 -0
- package/templates/nuxt/layouts/default.vue.eta +1 -1
- package/templates/nuxt/layouts/documentlist.vue.eta +24 -8
- package/templates/nuxt/layouts/sidelist.vue.eta +68 -0
- package/templates/nuxt/layouts/sidelistcrud.vue.eta +1 -1
- package/templates/nuxt/nuxt.config.ts.eta +0 -1
- package/templates/nuxt/pages/[xorg]/branch/index.vue.etax +2 -2
- package/templates/nuxt/pages/[xorg]/docnoformat/{[id].vue.eta → [doctype]/[id].vue.eta} +2 -5
- package/templates/nuxt/pages/[xorg]/docnoformat/[doctype]/new.vue.eta +222 -0
- package/templates/nuxt/pages/[xorg]/docnoformat/[doctype].vue.eta +33 -0
- package/templates/nuxt/pages/[xorg]/docnoformat/index.vue.eta +4 -294
- package/templates/nuxt/pages/[xorg]/docnoformat.vue.eta +100 -0
- package/templates/nuxt/pages/[xorg]/organization/[bid].vue.eta +14 -0
- package/templates/nuxt/pages/[xorg]/organization/[id]/branches/[bid].vue +13 -0
- package/templates/nuxt/pages/[xorg]/organization/[id]/branches/new.vue +149 -0
- package/templates/nuxt/pages/[xorg]/organization/[id]/index.vue.eta +1 -0
- package/templates/nuxt/pages/[xorg]/organization/new.vue.eta +151 -0
- package/templates/nuxt/pages/[xorg]/organization.vue.eta +145 -0
- package/templates/nuxt/pages/[xorg]/user/index.vue.eta +23 -23
- package/templates/nuxt/pages/[xorg]/user.vue.eta +13 -11
- package/templates/nuxt/pages/index.vue._eta +2 -2
- package/templates/nuxt/plugins/20.simpleapp-userstore.ts.eta +10 -1
- package/templates/nuxt/simpleapp/generate/clients/SimpleAppClient.ts.eta +1 -1
- package/templates/nuxt/types/documentlist.ts.eta +2 -2
- package/templates/nuxt/types/index.ts.eta +2 -1
- package/templates/nuxt/types/simpleappinput.ts.eta +39 -0
- package/templates/project/jsonschemas/category.json._eta +5 -5
- package/templates/project/jsonschemas/customer.json._eta +5 -5
- package/templates/project/jsonschemas/invoice.json._eta +7 -7
- package/templates/project/jsonschemas/product.json._eta +5 -5
- package/tsconfig.tsbuildinfo +1 -1
- package/templates/nuxt/components/ListView.vue.eta +0 -52
- package/templates/nuxt/components/renderers/ForeignKeyRender.vue.eta +0 -10
- package/templates/nuxt/composables/getAutocomplete.generate.ts.eta +0 -32
- package/templates/nuxt/pages/[xorg]/organization/index.vue.eta +0 -168
- /package/templates/nuxt/components/{EventDecision.vue.eta → event/EventDecision.vue.eta} +0 -0
- /package/templates/nuxt/components/{ButtonHome.vue.eta → header/button/HeaderButtonHome.vue.eta} +0 -0
- /package/templates/nuxt/components/{ButtonLogout.vue.eta → header/button/HeaderButtonLogout.vue.eta} +0 -0
- /package/templates/nuxt/components/{ButtonProfile.vue.eta → header/button/HeaderButtonProfile.vue.eta} +0 -0
- /package/templates/nuxt/components/{renderers/BooleanRender.vue.eta → renderer/RendererBoolean.vue.eta} +0 -0
- /package/templates/nuxt/components/{renderers/DateRender.vue.eta → renderer/RendererDate.vue.eta} +0 -0
- /package/templates/nuxt/components/{renderers/MoneyRender.vue.eta → renderer/RendererMoney.vue.eta} +0 -0
- /package/templates/nuxt/components/{renderers/MultiTextRender.vue.eta → renderer/RendererMultiText.vue.eta} +0 -0
- /package/templates/nuxt/components/{SimpleAppDynamicInput.vue.eta → simpleApp/pending/SimpleAppDynamicInput.vue} +0 -0
- /package/templates/nuxt/components/{SimpleAppValue.vue.eta → simpleApp/pending/SimpleAppValue.vue} +0 -0
- /package/templates/nuxt/components/{helper.ts.eta → simpleApp/pending/helper.ts-backup} +0 -0
- /package/templates/nuxt/components/{type.ts.eta → simpleApp/pending/type.ts-backup} +0 -0
- /package/templates/nuxt/components/{CrudNestedDoc.vue.eta → suspended/CrudNestedDoc.vue.eta} +0 -0
- /package/templates/nuxt/components/{CrudSimple.vue.eta → suspended/CrudSimple.vue.eta} +0 -0
- /package/templates/nuxt/components/{Menus.vue.eta → suspended/Menus.vue.eta} +0 -0
- /package/templates/nuxt/components/{Spinner.vue.eta → suspended/Spinner.vue.eta} +0 -0
- /package/templates/nuxt/components/{ButtonCreateTenant.vue.eta → user/UserButtonCreateTenant.vue.eta} +0 -0
- /package/templates/nuxt/components/{ButtonPermissionInfo.vue.eta → user/UserButtonPermissionInfo.vue.eta} +0 -0
- /package/templates/nuxt/components/{Invitation.vue.eta → user/UserInvitation.vue.eta} +0 -0
- /package/templates/nuxt/components/{TenantPicker.vue.eta → user/UserTenantPicker.vue.eta} +0 -0
package/templates/nuxt/components/{SimpleAppText.vue.eta → simpleApp/pending/SimpleAppText.vue}
RENAMED
|
@@ -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 './
|
|
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 './
|
|
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>
|
package/templates/nuxt/components/{SimpleAppDatatable.vue.eta → table/TableDocuments.vue.eta}
RENAMED
|
@@ -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"
|
|
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.
|
|
109
|
-
<component :is="col.
|
|
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.
|
|
112
|
-
<component :is="col.
|
|
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.
|
|
122
|
-
<component :is="f.
|
|
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.
|
|
125
|
-
<component :is="f.
|
|
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 {
|
|
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[]
|
package/templates/nuxt/components/{UserProfileListItem.vue.eta → user/UserProfileListItem.vue.eta}
RENAMED
|
@@ -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.
|
|
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
|
-
|
|
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';
|
|
@@ -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
|
|
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
|
-
<
|
|
134
|
-
<
|
|
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
|
-
|
|
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
|
-
</
|
|
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>
|
|
@@ -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
|
|
24
|
-
/* skip system columns
|
|
23
|
+
/* skip system columns createdBy*/
|
|
24
|
+
/* skip system columns updatedBy*/
|
|
25
25
|
/* skip system columns tenantId*/
|
|
26
26
|
/* skip system columns orgId*/
|
|
27
27
|
];
|