@simitgroup/simpleapp-generator 1.0.63 → 1.0.64
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.js +3 -3
- 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 +3 -3
- 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 +11 -16
- package/templates/basic/nuxt/{pages.crud.vue.eta → pages.new.vue.eta} +22 -9
- 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 -8
- 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 +4 -0
- package/templates/nuxt/assets/primevue/passthrough.ts._eta +2 -1
- package/templates/nuxt/components/{SimpleAppDatatable.vue.eta → DocumentDatatable.vue.eta} +15 -63
- package/templates/nuxt/components/ListView.vue.eta +38 -26
- package/templates/nuxt/components/UserProfileListItem.vue.eta +1 -1
- package/templates/nuxt/components/{EventNotification.vue.eta → event/EventNotification.vue.eta} +1 -1
- 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/renderer/RendererForeignKey.vue.eta +11 -0
- package/templates/nuxt/components/renderer/index.ts.eta +12 -0
- package/templates/nuxt/components/{SimpleAppAutocomplete.vue.eta → simpleApp/SimpleAppAutocomplete.vue.eta} +13 -1
- package/templates/nuxt/components/{SimpleAppAutocompletemulti.vue.eta → simpleApp/SimpleAppAutocompletemulti.vue.eta} +1 -1
- package/templates/nuxt/components/{SimpleAppCalendar.vue.eta → simpleApp/SimpleAppCalendar.vue.eta} +1 -1
- package/templates/nuxt/components/{SimpleAppCheckbox.vue.eta → simpleApp/SimpleAppCheckbox.vue.eta} +1 -1
- package/templates/nuxt/components/{SimpleAppChip.vue.eta → simpleApp/SimpleAppChip.vue.eta} +1 -1
- package/templates/nuxt/components/{SimpleAppColor.vue.eta → simpleApp/SimpleAppColor.vue.eta} +1 -1
- package/templates/nuxt/components/{SimpleAppDocumentNo.vue.eta → simpleApp/SimpleAppDocumentNo.vue.eta} +1 -1
- package/templates/nuxt/components/{SimpleAppEditor.vue.eta → simpleApp/SimpleAppEditor.vue.eta} +1 -1
- package/templates/nuxt/components/{SimpleAppList.vue.eta → simpleApp/SimpleAppList.vue.eta} +1 -1
- package/templates/nuxt/components/{SimpleAppListmulti.vue.eta → simpleApp/SimpleAppListmulti.vue.eta} +1 -1
- package/templates/nuxt/components/{SimpleAppNumber.vue.eta → simpleApp/SimpleAppNumber.vue.eta} +12 -1
- package/templates/nuxt/components/{SimpleAppPassword.vue.eta → simpleApp/SimpleAppPassword.vue.eta} +1 -1
- package/templates/nuxt/components/{SimpleAppRadio.vue.eta → simpleApp/SimpleAppRadio.vue.eta} +1 -1
- package/templates/nuxt/components/{SimpleAppRating.vue.eta → simpleApp/SimpleAppRating.vue.eta} +1 -1
- package/templates/nuxt/components/{SimpleAppSelect.vue.eta → simpleApp/SimpleAppSelect.vue.eta} +12 -2
- package/templates/nuxt/components/{SimpleAppSelectmulti.vue.eta → simpleApp/SimpleAppSelectmulti.vue.eta} +1 -1
- package/templates/nuxt/components/{SimpleAppSlider.vue.eta → simpleApp/SimpleAppSlider.vue.eta} +1 -1
- package/templates/nuxt/components/{SimpleAppSwitch.vue.eta → simpleApp/SimpleAppSwitch.vue.eta} +1 -1
- package/templates/nuxt/components/{SimpleAppText.vue.eta → simpleApp/SimpleAppText.vue.eta} +13 -2
- package/templates/nuxt/components/{SimpleAppTextarea.vue.eta → simpleApp/SimpleAppTextarea.vue.eta} +13 -2
- package/templates/nuxt/composables/getMenus.generate.ts.eta +4 -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/documentlist.vue.eta +23 -7
- package/templates/nuxt/layouts/sidelist.vue.eta +68 -0
- 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 +216 -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 +145 -0
- package/templates/nuxt/pages/[xorg]/organization.vue.eta +130 -0
- package/templates/nuxt/pages/[xorg]/user/index.vue.eta +28 -33
- package/templates/nuxt/pages/[xorg]/user.vue.eta +3 -3
- package/templates/nuxt/plugins/20.simpleapp-userstore.ts.eta +6 -0
- package/templates/nuxt/simpleapp/generate/clients/SimpleAppClient.ts.eta +1 -1
- package/templates/nuxt/types/documentlist.ts.eta +2 -2
- package/templates/project/jsonschemas/category.json._eta +2 -2
- package/templates/project/jsonschemas/customer.json._eta +2 -2
- package/templates/project/jsonschemas/invoice.json._eta +4 -4
- package/templates/project/jsonschemas/product.json._eta +2 -2
- package/tsconfig.tsbuildinfo +1 -1
- package/templates/nuxt/components/renderers/ForeignKeyRender.vue.eta +0 -10
- package/templates/nuxt/pages/[xorg]/organization/index.vue.eta +0 -168
- /package/templates/nuxt/components/{DebugDocumentData.vue.eta → debug/DebugDocumentData.vue.eta} +0 -0
- /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/SimpleAppDynamicInput.vue.eta} +0 -0
- /package/templates/nuxt/components/{SimpleFieldContainer.vue.eta → simpleApp/SimpleAppFieldContainer.vue.eta} +0 -0
- /package/templates/nuxt/components/{SimpleAppForm.vue.eta → simpleApp/SimpleAppForm.vue.eta} +0 -0
- /package/templates/nuxt/components/{SimpleAppInputTable.vue.eta → simpleApp/SimpleAppInputTable.vue.eta} +0 -0
- /package/templates/nuxt/components/{SimpleAppValue.vue.eta → simpleApp/SimpleAppValue.vue.eta} +0 -0
- /package/templates/nuxt/components/{helper.ts.eta → simpleApp/helper.ts.eta} +0 -0
- /package/templates/nuxt/components/{type.ts.eta → simpleApp/type.ts.eta} +0 -0
|
@@ -215,7 +215,7 @@ export class SimpleAppService<T extends { _id?: string }> {
|
|
|
215
215
|
|
|
216
216
|
|
|
217
217
|
Object.assign(pipeline[0]['$match'],isolationFilter);
|
|
218
|
-
console.log("final agg",pipeline)
|
|
218
|
+
//console.log("final agg",pipeline)
|
|
219
219
|
return await this.doc.aggregate(pipeline)
|
|
220
220
|
}catch(err){
|
|
221
221
|
throw new InternalServerErrorException(err);
|
|
@@ -330,12 +330,12 @@ export class SimpleAppService<T extends { _id?: string }> {
|
|
|
330
330
|
}
|
|
331
331
|
}else if(key == 'created'){
|
|
332
332
|
data['created'] = (transtype == 'create' || !data['created']) ? new Date() .toISOString() : data['created']
|
|
333
|
-
}else if(key == '
|
|
334
|
-
data['
|
|
333
|
+
}else if(key == 'createdBy'){
|
|
334
|
+
data['createdBy'] = (transtype == 'create' || !data['createdBy']) ? appuser.getUid() : data['createdBy']
|
|
335
335
|
}else if(key == 'updated'){
|
|
336
336
|
data['updated'] = new Date() .toISOString()
|
|
337
|
-
}else if(key == '
|
|
338
|
-
data['
|
|
337
|
+
}else if(key == 'updatedBy'){
|
|
338
|
+
data['updatedBy'] = appuser.getUid()
|
|
339
339
|
}
|
|
340
340
|
}
|
|
341
341
|
|
|
@@ -422,7 +422,7 @@ export class SimpleAppService<T extends { _id?: string }> {
|
|
|
422
422
|
await this.hook(appuser,HookType.beforeDelete, id);
|
|
423
423
|
this.logger.debug('delete record',this.documentName, id);
|
|
424
424
|
dependency = await this.getRelatedRecords(id);
|
|
425
|
-
console.log('dependency', dependency);
|
|
425
|
+
//console.log('dependency', dependency);
|
|
426
426
|
if (!dependency) {
|
|
427
427
|
let filterIsolation = this.getIsolationFilter(appuser);
|
|
428
428
|
this.polishIsolationFilter(filterIsolation)
|
|
@@ -440,7 +440,7 @@ export class SimpleAppService<T extends { _id?: string }> {
|
|
|
440
440
|
//this.doc.findByIdAndDelete(id);
|
|
441
441
|
return deleteresult;
|
|
442
442
|
} else {
|
|
443
|
-
console.log("reject query",dependency)
|
|
443
|
+
//console.log("reject query",dependency)
|
|
444
444
|
|
|
445
445
|
throw new ForbiddenException('Foreignkey constraint',dependency)
|
|
446
446
|
}
|
|
@@ -609,7 +609,7 @@ export class SimpleAppService<T extends { _id?: string }> {
|
|
|
609
609
|
}
|
|
610
610
|
|
|
611
611
|
keystore[collectionname]= results
|
|
612
|
-
console.log("keystorekeystore",keystore)
|
|
612
|
+
//console.log("keystorekeystore",keystore)
|
|
613
613
|
let addfield={$addFields:{collection:collectionname}}
|
|
614
614
|
|
|
615
615
|
const stagefilter:PipelineStage = {
|
|
@@ -146,7 +146,7 @@ export class ProfileService {
|
|
|
146
146
|
orgId: orgResult.orgId,
|
|
147
147
|
branchId: branchResult.branchId,
|
|
148
148
|
uid: appuser.getUid(),
|
|
149
|
-
|
|
149
|
+
fullName: appuser.getFullname(),
|
|
150
150
|
email: appuser.getEmail(),
|
|
151
151
|
active: true,
|
|
152
152
|
};
|
|
@@ -176,13 +176,22 @@ export class ProfileService {
|
|
|
176
176
|
|
|
177
177
|
this.logger.log(permResult, 'create Permission result');
|
|
178
178
|
|
|
179
|
-
|
|
180
179
|
//tenant owner shall map to userId for that tenant
|
|
181
|
-
|
|
182
|
-
const tenantUpdateData = await this.tenantsvc.findById(
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
180
|
+
|
|
181
|
+
const tenantUpdateData = await this.tenantsvc.findById(
|
|
182
|
+
appuser,
|
|
183
|
+
tenantResult._id,
|
|
184
|
+
);
|
|
185
|
+
this.logger.log(
|
|
186
|
+
tenantUpdateData,
|
|
187
|
+
`update tenant owner(${tenantResult._id})`,
|
|
188
|
+
);
|
|
189
|
+
tenantUpdateData.owner._id = userRecordId;
|
|
190
|
+
const updateTenantOwnerResult = await this.tenantsvc.findIdThenUpdate(
|
|
191
|
+
appuser,
|
|
192
|
+
tenantResult._id,
|
|
193
|
+
tenantUpdateData,
|
|
194
|
+
);
|
|
186
195
|
if (!updateTenantOwnerResult) {
|
|
187
196
|
throw new BadRequestException('Update tenant owner failed');
|
|
188
197
|
}
|
|
@@ -15,9 +15,7 @@ export { Autoincreament } from '../generate/types/autoinc.type';
|
|
|
15
15
|
|
|
16
16
|
@Injectable()
|
|
17
17
|
export class AutoincreamentService extends AutoincreamentProcessor {
|
|
18
|
-
constructor(
|
|
19
|
-
@InjectModel('Autoincreament') mydoc: Model<Autoincreament>,
|
|
20
|
-
) {
|
|
18
|
+
constructor(@InjectModel('Autoincreament') mydoc: Model<Autoincreament>) {
|
|
21
19
|
super(mydoc);
|
|
22
20
|
}
|
|
23
21
|
|
|
@@ -69,18 +67,23 @@ export class AutoincreamentService extends AutoincreamentProcessor {
|
|
|
69
67
|
if (res.length > 0) {
|
|
70
68
|
// console.log("FOUND RESULT------")
|
|
71
69
|
const tmp = res[0];
|
|
72
|
-
const nextno = tmp.
|
|
70
|
+
const nextno = tmp.nextNo;
|
|
73
71
|
data = { collectionName: collection, fieldName: field, nextno: nextno };
|
|
74
72
|
this.findIdThenUpdate(appuser, tmp._id, {
|
|
75
73
|
collectionName: collection,
|
|
76
74
|
fieldName: field,
|
|
77
|
-
|
|
75
|
+
nextNo: tmp.nextNo + 1,
|
|
78
76
|
});
|
|
79
77
|
} else {
|
|
80
78
|
// console.log("CREATE ROW------")
|
|
81
|
-
this.data = { collectionName: collection, fieldName: field,
|
|
79
|
+
this.data = { collectionName: collection, fieldName: field, nextNo: 2 };
|
|
82
80
|
const createResult = await this.create(appuser, this.data);
|
|
83
|
-
data = {
|
|
81
|
+
data = {
|
|
82
|
+
_id: crypto.randomUUID(),
|
|
83
|
+
collectionName: collection,
|
|
84
|
+
fieldName: field,
|
|
85
|
+
nextno: 1,
|
|
86
|
+
};
|
|
84
87
|
}
|
|
85
88
|
|
|
86
89
|
return data;
|
|
@@ -80,8 +80,8 @@ export class BranchService extends BranchProcessor {
|
|
|
80
80
|
const pattern = `${doc.docType}-${branchCode}-[00000]`;
|
|
81
81
|
const formatdata: Docnoformat = {
|
|
82
82
|
_id: crypto.randomUUID(),
|
|
83
|
-
docNoFormatNo: doc.docType
|
|
84
|
-
docNoFormatName: `Default ${doc.docType}`,
|
|
83
|
+
docNoFormatNo: `${doc.docType}-${branchCode}`,
|
|
84
|
+
docNoFormatName: `Default ${doc.docType} - ${branchCode}`,
|
|
85
85
|
docNoType: doc.docType,
|
|
86
86
|
docNoPattern: pattern,
|
|
87
87
|
branch: { _id: recordId, branchId: branchId, label: branchName },
|
|
@@ -23,7 +23,8 @@ const CustomTailwind = usePassThrough(
|
|
|
23
23
|
label:{class: 'text-sm'},
|
|
24
24
|
},
|
|
25
25
|
button:{root:{class: 'focus:outline-none transition duration-150 ease-in-out rounded px-8 py-2 m-1 border'}},
|
|
26
|
-
dialog:{root:{class:['border p-2']}},
|
|
26
|
+
dialog:{root:{class:['border p-2']}},
|
|
27
|
+
// column:{ root:{class:'p-0'},bodyCell:{class:'p-0'}},
|
|
27
28
|
sidebar:{
|
|
28
29
|
root:{class:'w-1/2 bg-white border p-2 h-full'}
|
|
29
30
|
},
|
|
@@ -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[]
|
|
@@ -1,42 +1,54 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<div>
|
|
3
|
-
<
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
<
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
</
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
</
|
|
23
|
-
</
|
|
3
|
+
<div v-if="withFilter">
|
|
4
|
+
<input
|
|
5
|
+
autofocus
|
|
6
|
+
placeholder="search"
|
|
7
|
+
v-model="searchvalue"
|
|
8
|
+
class="w-full border p-2"
|
|
9
|
+
type="search" />
|
|
10
|
+
</div>
|
|
11
|
+
<div class="max-h-screen overflow-auto">
|
|
12
|
+
<ul >
|
|
13
|
+
<li v-for="item in filterlist">
|
|
14
|
+
<div :class="getSelectedCSS(item)">
|
|
15
|
+
<NuxtLink :to="`${url}/${item[idField]}`">
|
|
16
|
+
<div class="mr-2">{{item[titleField] }}</div>
|
|
17
|
+
<div class="font font-bold text-right">{{item[subTitleField]}}</div>
|
|
18
|
+
</NuxtLink>
|
|
19
|
+
</div>
|
|
20
|
+
|
|
21
|
+
</li>
|
|
22
|
+
</ul>
|
|
23
|
+
</div>
|
|
24
24
|
</div>
|
|
25
25
|
</template>
|
|
26
26
|
<script setup lang="ts">
|
|
27
27
|
import {ref} from 'vue'
|
|
28
28
|
import {ListItem} from '~/types/listview'
|
|
29
|
-
const props = defineProps<{
|
|
29
|
+
const props = withDefaults(defineProps<{
|
|
30
|
+
list:any[],
|
|
31
|
+
url:string,
|
|
32
|
+
titleField:string
|
|
33
|
+
idField?:string
|
|
34
|
+
subTitleField:string
|
|
35
|
+
withFilter?:boolean
|
|
36
|
+
}>(),{
|
|
37
|
+
idField:'_id'
|
|
38
|
+
})
|
|
30
39
|
const emit = defineEmits(['clickitem'])
|
|
31
40
|
const searchvalue = ref('')
|
|
32
41
|
const selecteditem =ref('')
|
|
33
42
|
const clickRow=(item:ListItem)=>{
|
|
34
|
-
emit('clickitem',item)
|
|
35
|
-
selecteditem.value = item.code
|
|
43
|
+
// emit('clickitem',item)
|
|
44
|
+
// selecteditem.value = item.code
|
|
36
45
|
}
|
|
37
46
|
const filterlist = computed(()=>{
|
|
38
|
-
const newlist =props.list.filter(item=>
|
|
39
|
-
|
|
47
|
+
const newlist =props.list.filter((item:any)=>
|
|
48
|
+
{
|
|
49
|
+
return String(item[props.titleField]).toLowerCase().includes(searchvalue.value.toLowerCase()) ||
|
|
50
|
+
String(item[props.subTitleField]).toLowerCase().includes(searchvalue.value.toLowerCase())
|
|
51
|
+
})
|
|
40
52
|
|
|
41
53
|
return newlist
|
|
42
54
|
})
|
|
@@ -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>
|
package/templates/nuxt/components/{EventNotification.vue.eta → event/EventNotification.vue.eta}
RENAMED
|
@@ -20,7 +20,7 @@ let resmsg:ToastMessageOptions = {} as ToastMessageOptions
|
|
|
20
20
|
|
|
21
21
|
$listen("Notification",(data:Notification)=>{
|
|
22
22
|
// $listen('*',(type:key of EventType,data:any)=>{
|
|
23
|
-
|
|
23
|
+
|
|
24
24
|
const type:NotificationStatus = data.status
|
|
25
25
|
// let arrupdate = type.split(':')
|
|
26
26
|
// let eventdata = data
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<script setup lang="ts">
|
|
2
|
-
import ButtonMenuPicker from "./ButtonMenuPicker.vue"
|
|
2
|
+
//import ButtonMenuPicker from "./ButtonMenuPicker.vue"
|
|
3
3
|
|
|
4
|
-
import ButtonProfile from './ButtonProfile.vue';
|
|
4
|
+
//import ButtonProfile from './ButtonProfile.vue';
|
|
5
5
|
|
|
6
6
|
|
|
7
7
|
</script>
|
|
@@ -13,22 +13,22 @@ import ButtonProfile from './ButtonProfile.vue';
|
|
|
13
13
|
|
|
14
14
|
<div class="flex-1 flex flex-row gap-2 p-2">
|
|
15
15
|
<div class="">
|
|
16
|
-
<
|
|
16
|
+
<HeaderButtonMenuPicker/>
|
|
17
17
|
|
|
18
18
|
</div>
|
|
19
19
|
<div class="">
|
|
20
|
-
<
|
|
20
|
+
<HeaderButtonHome/>
|
|
21
21
|
</div>
|
|
22
22
|
|
|
23
23
|
</div>
|
|
24
24
|
<div class="flex-1 flex flex-row-reverse gap-2 p-2">
|
|
25
25
|
|
|
26
26
|
<div class=" text-right">
|
|
27
|
-
<
|
|
27
|
+
<HeaderButtonProfile/>
|
|
28
28
|
</div>
|
|
29
29
|
|
|
30
30
|
<div class="">
|
|
31
|
-
<
|
|
31
|
+
<HeaderSelectBranch/>
|
|
32
32
|
</div>
|
|
33
33
|
</div>
|
|
34
34
|
|
package/templates/nuxt/components/{SelectBranch.vue.eta → header/HeaderSelectBranch.vue.eta}
RENAMED
|
@@ -4,7 +4,7 @@ import {ref} from 'vue'
|
|
|
4
4
|
|
|
5
5
|
const selectedbranch = ref(getCurrentXorg())
|
|
6
6
|
const currentTenant=ref(getUserProfile().tenantId)
|
|
7
|
-
|
|
7
|
+
|
|
8
8
|
type Org = {orgId:number, label:string,_id:string}
|
|
9
9
|
const branches = getUserProfile().branches.filter((item:any)=>{return item.branch.tenantId == currentTenant.value})
|
|
10
10
|
const orgList:Org[] = _.uniqBy(branches,'branch.orgId').map((item)=>({
|
|
@@ -24,7 +24,7 @@ const switchXorg = ()=>{
|
|
|
24
24
|
navigateTo(`/${selectedbranch.value}`,{external:true})
|
|
25
25
|
}
|
|
26
26
|
|
|
27
|
-
|
|
27
|
+
|
|
28
28
|
</script>
|
|
29
29
|
<template>
|
|
30
30
|
<div>
|
|
@@ -20,10 +20,10 @@ const selectMenu = (menu:MenuData) =>{
|
|
|
20
20
|
</svg>
|
|
21
21
|
</button>
|
|
22
22
|
|
|
23
|
-
<Dialog v-model:visible="visible" modal header="Pick Document" >
|
|
23
|
+
<Dialog v-model:visible="visible" modal header="Pick Document" :pt="{dialog:{ class:' bg-primary-800 ' }}">
|
|
24
24
|
<div class="">
|
|
25
|
-
<Button v-for="menu in menus" @click="selectMenu(menu)">
|
|
26
|
-
<div v-if="menu.isolationType == 'none'" class="">
|
|
25
|
+
<Button v-for="menu in menus" @click="selectMenu(menu)" >
|
|
26
|
+
<div v-if="menu.isolationType == 'none'" class="text-warning-600 hover:text-warning-500">
|
|
27
27
|
* {{ camelCaseToWords(menu.label) }}
|
|
28
28
|
</div>
|
|
29
29
|
<div v-else class="">{{ camelCaseToWords(menu.label) }}</div>
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<NuxtLink v-if="setting?.collection" :to="getDocumentUrl(setting.collection,modelValue ? modelValue['_id']:'')" class="text-primary-700 hover:text-primary-500 cursor-pointer">
|
|
3
|
+
{{modelValue?.label}}
|
|
4
|
+
</NuxtLink>
|
|
5
|
+
<span v-else>{{modelValue?.label || modelValue}}</span>
|
|
6
|
+
</template>
|
|
7
|
+
<script setup lang="ts">
|
|
8
|
+
const modelValue = defineModel()
|
|
9
|
+
|
|
10
|
+
const props = defineProps<{setting:any}>()
|
|
11
|
+
</script>
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import RendererBoolean from './RendererBoolean.vue'
|
|
2
|
+
import RendererDate from './RendererDate.vue'
|
|
3
|
+
import RendererForeignKey from './RendererForeignKey.vue'
|
|
4
|
+
import RendererMoney from './RendererMoney.vue'
|
|
5
|
+
import RendererMultiText from './RendererMultiText.vue'
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
export default {
|
|
9
|
+
|
|
10
|
+
RendererBoolean,RendererDate,RendererForeignKey,RendererMoney,RendererMultiText
|
|
11
|
+
|
|
12
|
+
};
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
<FieldContainer :hidelabel="hidelabel" v-model="modelValue" :label="label" :description="description" :setting="setting" :instancepath="instancepath" :error="error" #default="slotprops">
|
|
3
3
|
|
|
4
4
|
<div v-if="componentErr!=''" class="input-error">{{componentErr}}</div>
|
|
5
|
+
<span v-else-if="isReadonly" readonly class="readonly-input">{{ selecteditem[optionLabel] }}</span>
|
|
5
6
|
<AutoComplete v-else
|
|
6
7
|
class="simpleapp-inputfield simpleapp-autocomplete flex flex-row "
|
|
7
8
|
:inputId="slotprops.uuid"
|
|
@@ -14,6 +15,7 @@
|
|
|
14
15
|
@complete="getListFromAutocompleteApi"
|
|
15
16
|
:suggestions="list"
|
|
16
17
|
forceSelection
|
|
18
|
+
|
|
17
19
|
:dropdown="dropdown"
|
|
18
20
|
:pt="{
|
|
19
21
|
// root:{class: 'w-full' },
|
|
@@ -29,7 +31,7 @@
|
|
|
29
31
|
|
|
30
32
|
import {computed,watch,ref} from 'vue'
|
|
31
33
|
import AutoComplete from 'primevue/autocomplete';
|
|
32
|
-
import FieldContainer from './
|
|
34
|
+
import FieldContainer from './SimpleAppFieldContainer.vue'
|
|
33
35
|
import {prepareList} from './helper'
|
|
34
36
|
import type {SimpleAppFieldSetting,ListOptionType} from './type'
|
|
35
37
|
import { SimpleAppClient } from '../simpleapp/generate/clients/SimpleAppClient'
|
|
@@ -121,4 +123,14 @@ const capitalizeFirstLetter = (str: string) => {
|
|
|
121
123
|
// const res = str;
|
|
122
124
|
return res;
|
|
123
125
|
};
|
|
126
|
+
|
|
127
|
+
const isReadonly = computed(()=>{
|
|
128
|
+
if(props.readonly){
|
|
129
|
+
return props.readonly
|
|
130
|
+
}else if(props.setting.readonly){
|
|
131
|
+
return props.setting.readonly
|
|
132
|
+
}else{
|
|
133
|
+
return false
|
|
134
|
+
}
|
|
135
|
+
})
|
|
124
136
|
</script>
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
|
|
20
20
|
import {computed,watch,ref} from 'vue'
|
|
21
21
|
import AutoComplete from 'primevue/autocomplete';
|
|
22
|
-
import FieldContainer from './
|
|
22
|
+
import FieldContainer from './SimpleAppFieldContainer.vue'
|
|
23
23
|
import {prepareList} from './helper'
|
|
24
24
|
import type {SimpleAppFieldSetting,ListOptionType} from './type'
|
|
25
25
|
import type { JSONSchema7 } from 'json-schema';
|
package/templates/nuxt/components/{SimpleAppCalendar.vue.eta → simpleApp/SimpleAppCalendar.vue.eta}
RENAMED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
</FieldContainer>
|
|
11
11
|
</template>
|
|
12
12
|
<script setup lang="ts">
|
|
13
|
-
import FieldContainer from './
|
|
13
|
+
import FieldContainer from './SimpleAppFieldContainer.vue'
|
|
14
14
|
import { ref, watch,computed } from "vue"
|
|
15
15
|
import moment from 'moment'
|
|
16
16
|
import Calendar from 'primevue/calendar';
|
package/templates/nuxt/components/{SimpleAppCheckbox.vue.eta → simpleApp/SimpleAppCheckbox.vue.eta}
RENAMED
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
<script lang="ts" setup>
|
|
16
16
|
// import {Ref} from 'vue'
|
|
17
17
|
import Checkbox from 'primevue/checkbox';
|
|
18
|
-
import FieldContainer from './
|
|
18
|
+
import FieldContainer from './SimpleAppFieldContainer.vue'
|
|
19
19
|
|
|
20
20
|
const modelValue = defineModel<boolean>()
|
|
21
21
|
const props = defineProps<{
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
<script lang="ts" setup>
|
|
12
12
|
import {computed,watch,ref} from 'vue'
|
|
13
13
|
import Chips from 'primevue/chips';
|
|
14
|
-
import FieldContainer from './
|
|
14
|
+
import FieldContainer from './SimpleAppFieldContainer.vue'
|
|
15
15
|
// const modelValue = defineModel()
|
|
16
16
|
|
|
17
17
|
const modelValue=defineModel()
|
package/templates/nuxt/components/{SimpleAppColor.vue.eta → simpleApp/SimpleAppColor.vue.eta}
RENAMED
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
import {computed,watch,ref} from 'vue'
|
|
15
15
|
import ColorPicker from 'primevue/colorpicker';
|
|
16
16
|
|
|
17
|
-
import FieldContainer from './
|
|
17
|
+
import FieldContainer from './SimpleAppFieldContainer.vue'
|
|
18
18
|
const modelValue = defineModel()
|
|
19
19
|
const props = defineProps<{
|
|
20
20
|
label?:string,
|
|
@@ -33,7 +33,7 @@ import {ForeignKey} from '~/types'
|
|
|
33
33
|
import OverlayPanel from 'primevue/overlaypanel';
|
|
34
34
|
import {computed,watch,ref} from 'vue'
|
|
35
35
|
import InputText from 'primevue/inputtext';
|
|
36
|
-
import FieldContainer from './
|
|
36
|
+
import FieldContainer from './SimpleAppFieldContainer.vue'
|
|
37
37
|
import {DocNoFormat} from "~/types"
|
|
38
38
|
const selectedformat = ref()
|
|
39
39
|
const op = ref();
|
package/templates/nuxt/components/{SimpleAppEditor.vue.eta → simpleApp/SimpleAppEditor.vue.eta}
RENAMED
|
@@ -16,7 +16,7 @@ import {computed,watch,ref} from 'vue'
|
|
|
16
16
|
import Editor from 'primevue/editor';
|
|
17
17
|
|
|
18
18
|
|
|
19
|
-
import FieldContainer from './
|
|
19
|
+
import FieldContainer from './SimpleAppFieldContainer.vue'
|
|
20
20
|
const modelValue = defineModel()
|
|
21
21
|
const props = defineProps<{
|
|
22
22
|
label?:string,
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
<script lang="ts" setup>
|
|
16
16
|
import {computed,watch,ref} from 'vue'
|
|
17
17
|
import Listbox from 'primevue/listbox';
|
|
18
|
-
import FieldContainer from './
|
|
18
|
+
import FieldContainer from './SimpleAppFieldContainer.vue'
|
|
19
19
|
import {prepareList,simpleArrayToObject} from './helper'
|
|
20
20
|
import type {SimpleAppFieldSetting} from './type'
|
|
21
21
|
import type { JSONSchema7 } from 'json-schema';
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
<script lang="ts" setup>
|
|
17
17
|
import {computed,watch,ref} from 'vue'
|
|
18
18
|
import Listbox from 'primevue/listbox';
|
|
19
|
-
import FieldContainer from './
|
|
19
|
+
import FieldContainer from './SimpleAppFieldContainer.vue'
|
|
20
20
|
import {prepareList,simpleArrayToObject} from './helper'
|
|
21
21
|
import type {SimpleAppFieldSetting} from './type'
|
|
22
22
|
import type { JSONSchema7 } from 'json-schema';
|