@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
|
@@ -3,7 +3,7 @@ import {SchemaType,RESTMethods,IsolationType} from '../type'
|
|
|
3
3
|
export const branch:SchemaType ={
|
|
4
4
|
type: "object",
|
|
5
5
|
"x-simpleapp-config":{
|
|
6
|
-
isolationType:IsolationType.
|
|
6
|
+
isolationType:IsolationType.org,
|
|
7
7
|
documentType:'branch',
|
|
8
8
|
documentName:'branch',
|
|
9
9
|
// pageType:"crud",
|
|
@@ -16,8 +16,8 @@ export const branch:SchemaType ={
|
|
|
16
16
|
_id:{type:'string'},
|
|
17
17
|
created:{type:'string'},
|
|
18
18
|
updated:{type:'string'},
|
|
19
|
-
|
|
20
|
-
|
|
19
|
+
createdBy:{type:'string'},
|
|
20
|
+
updatedBy:{type:'string'},
|
|
21
21
|
tenantId: {type:'integer',default:1,minimum:1 },
|
|
22
22
|
orgId: {type:'integer',default:1,minimum:1 },
|
|
23
23
|
branchId: {type:'integer',default:1,minimum:1 },
|
|
@@ -3,7 +3,7 @@ import {SchemaType,RESTMethods,IsolationType} from '../type'
|
|
|
3
3
|
export const docnoformat:SchemaType ={
|
|
4
4
|
type: "object",
|
|
5
5
|
"x-simpleapp-config":{
|
|
6
|
-
isolationType:IsolationType.
|
|
6
|
+
isolationType:IsolationType.org,
|
|
7
7
|
documentType:'docno',
|
|
8
8
|
documentName:'docnoformat',
|
|
9
9
|
pageType:"crud",
|
|
@@ -12,8 +12,8 @@ export const docnoformat:SchemaType ={
|
|
|
12
12
|
additionalAutoCompleteFields: ['default'],
|
|
13
13
|
additionalApis:[{
|
|
14
14
|
"action":"listDocFormats",
|
|
15
|
-
"
|
|
16
|
-
"
|
|
15
|
+
"entryPoint":"/listdocformats/:doctype",
|
|
16
|
+
"requiredRole":["User"],
|
|
17
17
|
"method":RESTMethods.get,
|
|
18
18
|
"execute":"listDocFormats",
|
|
19
19
|
"description":"get list of document format for 1 doctype"
|
|
@@ -23,8 +23,8 @@ export const docnoformat:SchemaType ={
|
|
|
23
23
|
_id:{type:'string'},
|
|
24
24
|
created:{type:'string'},
|
|
25
25
|
updated:{type:'string'},
|
|
26
|
-
|
|
27
|
-
|
|
26
|
+
createdBy:{type:'string'},
|
|
27
|
+
updatedBy:{type:'string'},
|
|
28
28
|
tenantId: {type:'integer',default:1,minimum:1 },
|
|
29
29
|
orgId: {type:'integer',default:1,minimum:1 },
|
|
30
30
|
branchId: {type:'integer',default:1,minimum:1 },
|
|
@@ -17,8 +17,8 @@ export const organization:SchemaType ={
|
|
|
17
17
|
_id:{type:'string'},
|
|
18
18
|
created:{type:'string'},
|
|
19
19
|
updated:{type:'string'},
|
|
20
|
-
|
|
21
|
-
|
|
20
|
+
createdBy:{type:'string'},
|
|
21
|
+
updatedBy:{type:'string'},
|
|
22
22
|
tenantId: {type:'integer',default:1,minimum:1 },
|
|
23
23
|
orgId: {type:'integer',default:1,minimum:1 },
|
|
24
24
|
branchId: {type:'integer',default:1,minimum:0 },
|
|
@@ -26,7 +26,7 @@ export const organization:SchemaType ={
|
|
|
26
26
|
orgName: {type: "string",},
|
|
27
27
|
active: {type: "boolean","default":true,},
|
|
28
28
|
description: {type: "string",format:"text",},
|
|
29
|
-
|
|
29
|
+
timeZone: {"type": "string","examples": ["Asia/Kuala_Lumpur"]
|
|
30
30
|
}
|
|
31
31
|
}
|
|
32
32
|
}
|
|
@@ -5,11 +5,11 @@ export const permission:SchemaType ={
|
|
|
5
5
|
"x-simpleapp-config":{
|
|
6
6
|
documentType:'perm',
|
|
7
7
|
documentName:'permission',
|
|
8
|
-
isolationType:IsolationType.
|
|
8
|
+
isolationType:IsolationType.org,
|
|
9
9
|
additionalApis:[{
|
|
10
10
|
action:"listUser",
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
entryPoint:"listuser",
|
|
12
|
+
requiredRole:["SuperAdmin"],
|
|
13
13
|
method:RESTMethods.get,
|
|
14
14
|
execute:"listUser",
|
|
15
15
|
description:"Get current permissionlist lookup user info"
|
|
@@ -19,8 +19,8 @@ export const permission:SchemaType ={
|
|
|
19
19
|
_id:{type:'string'},
|
|
20
20
|
created:{type:'string'},
|
|
21
21
|
updated:{type:'string'},
|
|
22
|
-
|
|
23
|
-
|
|
22
|
+
createdBy:{type:'string'},
|
|
23
|
+
updatedBy:{type:'string'},
|
|
24
24
|
tenantId: {type:'integer',default:1,minimum:0},
|
|
25
25
|
orgId: {type:'integer',default:1,minimum:0 },
|
|
26
26
|
branchId: {type:'integer',default:1,minimum:0 },
|
|
@@ -16,8 +16,8 @@ export const tenant:SchemaType ={
|
|
|
16
16
|
_id:{type:'string'},
|
|
17
17
|
created:{type:'string'},
|
|
18
18
|
updated:{type:'string'},
|
|
19
|
-
|
|
20
|
-
|
|
19
|
+
createdBy:{type:'string'},
|
|
20
|
+
updatedBy:{type:'string'},
|
|
21
21
|
tenantId: {type:'integer',default:1,minimum:0 },
|
|
22
22
|
orgId: {type:'integer',default:1,minimum:0 },
|
|
23
23
|
branchId: {type:'integer',default:1,minimum:0 },
|
|
@@ -7,8 +7,7 @@ export const user:SchemaType ={
|
|
|
7
7
|
documentName:'user',
|
|
8
8
|
pageType:'crud',
|
|
9
9
|
isolationType:IsolationType.tenant,
|
|
10
|
-
uniqueKey:'email',
|
|
11
|
-
uniqueKeys:[['tenantId','uid']],
|
|
10
|
+
uniqueKey:'email',
|
|
12
11
|
documentTitle:'fullname',
|
|
13
12
|
requiredRoles:["SuperUser"],
|
|
14
13
|
additionalAutoCompleteFields:['uid']
|
|
@@ -17,13 +16,13 @@ export const user:SchemaType ={
|
|
|
17
16
|
_id:{type:'string'},
|
|
18
17
|
created:{type:'string'},
|
|
19
18
|
updated:{type:'string'},
|
|
20
|
-
|
|
21
|
-
|
|
19
|
+
createdBy:{type:'string'},
|
|
20
|
+
updatedBy:{type:'string'},
|
|
22
21
|
tenantId: {type:'integer',default:1,minimum:0 },
|
|
23
22
|
orgId: {type:'integer',default:1,minimum:0 },
|
|
24
23
|
branchId: {type:'integer',default:1,minimum:0 },
|
|
25
24
|
uid: {type: "string",},
|
|
26
|
-
|
|
25
|
+
fullName: {type: "string",minLength:3},
|
|
27
26
|
email: {type: "string",minLength:10,format: "email"},
|
|
28
27
|
active: {type: "boolean",default:true},
|
|
29
28
|
description: {type:"string"},
|
package/src/generate.ts
CHANGED
|
@@ -255,9 +255,9 @@ const generateSchema = ( docname: string,
|
|
|
255
255
|
}
|
|
256
256
|
}
|
|
257
257
|
const mapfiles = {
|
|
258
|
-
'pages.
|
|
258
|
+
'pages.new.vue.eta': {
|
|
259
259
|
to:`pages/[xorg]/${docname}`,
|
|
260
|
-
as:'
|
|
260
|
+
as:'new.vue',
|
|
261
261
|
validate: validateWritePage
|
|
262
262
|
},
|
|
263
263
|
'pages.[id].vue.eta': {
|
|
@@ -15,9 +15,7 @@ import {
|
|
|
15
15
|
ChildModels,
|
|
16
16
|
SchemaModel,
|
|
17
17
|
TypeForeignKey,
|
|
18
|
-
TypeForeignKeyCatalogue,
|
|
19
|
-
DocSetting,
|
|
20
|
-
|
|
18
|
+
TypeForeignKeyCatalogue,
|
|
21
19
|
} from '../type';
|
|
22
20
|
const log: Logger<ILogObj> = new Logger();
|
|
23
21
|
const configname = "x-simpleapp-config"
|
|
@@ -25,8 +23,8 @@ const FOREIGNKEY_PROPERTY = 'x-foreignkey'
|
|
|
25
23
|
const COMPULSORYFIELDS={ _id:{type:'string'},
|
|
26
24
|
created:{type:'string'},
|
|
27
25
|
updated:{type:'string'},
|
|
28
|
-
|
|
29
|
-
|
|
26
|
+
createdBy:{type:'string'},
|
|
27
|
+
updatedBy:{type:'string'},
|
|
30
28
|
tenantId: {type:'integer',default:1,minimum:1 },
|
|
31
29
|
orgId: {type:'integer',default:1,minimum:1 },
|
|
32
30
|
branchId: {type:'integer',default:1,minimum:1 },
|
|
@@ -212,11 +210,11 @@ const genSchema = async (
|
|
|
212
210
|
if(!childprops['updated']){
|
|
213
211
|
childprops['updated']={type:'string',description:'iso8601 or empty'}
|
|
214
212
|
}
|
|
215
|
-
if(!childprops['
|
|
216
|
-
childprops['
|
|
213
|
+
if(!childprops['createdBy']){
|
|
214
|
+
childprops['createdBy']={type:'string'}
|
|
217
215
|
}
|
|
218
|
-
if(!childprops['
|
|
219
|
-
childprops['
|
|
216
|
+
if(!childprops['updatedBy']){
|
|
217
|
+
childprops['updatedBy']={type:'string'}
|
|
220
218
|
}
|
|
221
219
|
if(!childprops['_id']){
|
|
222
220
|
childprops['_id']={type:'string'}
|
|
@@ -119,8 +119,8 @@ const processObject = (doctype: string,
|
|
|
119
119
|
jsondata.properties['doctype'] = {type: 'string', default:doctype, examples: [doctype],description: 'Control value, dont edit it',};
|
|
120
120
|
jsondata.properties['created'] = {type: 'string',description: 'Control value, dont edit it',};
|
|
121
121
|
jsondata.properties['updated'] = {type: 'string',description: 'Control value, dont edit it',};
|
|
122
|
-
jsondata.properties['
|
|
123
|
-
jsondata.properties['
|
|
122
|
+
jsondata.properties['createdBy'] = {type: 'string',description: 'Control value, dont edit it',};
|
|
123
|
+
jsondata.properties['updatedBy'] = {type: 'string',description: 'Control value, dont edit it',};
|
|
124
124
|
|
|
125
125
|
if(doctype !='tenant'){
|
|
126
126
|
jsondata.properties['tenantId'] = {type: 'number',description: 'Control value, dont edit it',};
|
|
@@ -306,11 +306,11 @@ const genSchema = (docname: string,schematype: string,jsondata: JsonSchemaProper
|
|
|
306
306
|
if(!childprops['updated']){
|
|
307
307
|
childprops['updated']={type:'string',description:'iso8601 or empty'}
|
|
308
308
|
}
|
|
309
|
-
if(!childprops['
|
|
309
|
+
if(!childprops['createdBy']){
|
|
310
310
|
childprops['createdby']={type:'string'}
|
|
311
311
|
}
|
|
312
|
-
if(!childprops['
|
|
313
|
-
childprops['
|
|
312
|
+
if(!childprops['updatedBy']){
|
|
313
|
+
childprops['updatedBy']={type:'string'}
|
|
314
314
|
}
|
|
315
315
|
if(!childprops['_id']){
|
|
316
316
|
childprops['_id']={type:'string'}
|
package/src/type.ts
CHANGED
|
@@ -93,19 +93,19 @@ foreignkeys: MyForeignKey
|
|
|
93
93
|
|
|
94
94
|
}
|
|
95
95
|
|
|
96
|
-
export type DocSetting = {
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
}
|
|
96
|
+
// export type DocSetting = {
|
|
97
|
+
// docName:string,
|
|
98
|
+
// docType:string,
|
|
99
|
+
// colDocNo:string,
|
|
100
|
+
// colDocLabel:string,
|
|
101
|
+
// collectionName:string,
|
|
102
|
+
// autoCompleteFields:string[],
|
|
103
|
+
// docStatusSettings:DocumentStatus[],
|
|
104
|
+
// apiSettings:DocumentApi[],
|
|
105
|
+
// // requireautocomplete:boolean
|
|
106
|
+
// isolationType:string
|
|
107
|
+
// foreignKeys: MyForeignKey
|
|
108
|
+
// }
|
|
109
109
|
|
|
110
110
|
export type DocumentStatus = {
|
|
111
111
|
status:string //'CO', 'V', 'CL', 'D' and etc
|
|
@@ -116,9 +116,9 @@ export type DocumentStatus = {
|
|
|
116
116
|
export enum RESTMethods {'post'='post','get'='get', 'delete'='delete','put'='put', 'patch'='patch'}
|
|
117
117
|
export type DocumentApi = {
|
|
118
118
|
action:string //api action name
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
119
|
+
entryPoint:string //api entry point example:':id', ':id/confirm'
|
|
120
|
+
queryPara?:string[] //what query parameter wish to accept, example: ['description','date']
|
|
121
|
+
requiredRole?: string[] // what special user role wish to allow for this api, example: ['SuperUser']
|
|
122
122
|
method:RESTMethods
|
|
123
123
|
execute:string, //what service class method name to execute, example: 'ping','getDocumentName'
|
|
124
124
|
description:string //description of api
|
|
@@ -126,8 +126,8 @@ export type DocumentApi = {
|
|
|
126
126
|
export enum IsolationType {"none"="none" , "tenant"="tenant","org"="org", "branch"="branch"}
|
|
127
127
|
// export type ImportLibs = {"lib":string,"as":string}
|
|
128
128
|
export type Formula = {
|
|
129
|
-
|
|
130
|
-
|
|
129
|
+
jsonPath:string //example: "$.subtotal","$.details[*]"
|
|
130
|
+
formula:string //example "jslib.getDocumentSubTotal(@F{$.details})"
|
|
131
131
|
}
|
|
132
132
|
|
|
133
133
|
export type SchemaConfig = {
|
|
@@ -158,8 +158,8 @@ export type SchemaFields = {
|
|
|
158
158
|
branchId: SimpleAppJSONSchema7
|
|
159
159
|
created: SimpleAppJSONSchema7
|
|
160
160
|
updated: SimpleAppJSONSchema7
|
|
161
|
-
|
|
162
|
-
|
|
161
|
+
createdBy: SimpleAppJSONSchema7
|
|
162
|
+
updatedBy: SimpleAppJSONSchema7
|
|
163
163
|
[key:string]:SimpleAppJSONSchema7 | SimpleAppJSONSchema7[] | undefined
|
|
164
164
|
|
|
165
165
|
}
|
|
@@ -126,17 +126,17 @@ export class <%= it.typename %>Controller extends SimpleAppAbstractController<
|
|
|
126
126
|
|
|
127
127
|
<% for(let i=0;i<it.apiSettings.length;i++){%>
|
|
128
128
|
<% let api = it.apiSettings[i] %>
|
|
129
|
-
<%~ `@${capitalizeFirstLetter(api.method)}('${api.
|
|
129
|
+
<%~ `@${capitalizeFirstLetter(api.method)}('${api.entryPoint}')`%>
|
|
130
130
|
<%if(superadmindoctype.includes(it.doctype)){%>
|
|
131
131
|
@Roles(Role.SuperAdmin,Role.<%= `${it.typename}_${api.action}`%>,
|
|
132
|
-
<%if(api.
|
|
133
|
-
<% for(let r=0;r<api.
|
|
132
|
+
<%if(api.requiredRole && api.requiredRole.length>0) { %>
|
|
133
|
+
<% for(let r=0;r<api.requiredRole.length;r++){%>Role.<%=api.requiredRole[r]%>,<%}%>
|
|
134
134
|
<%}%>
|
|
135
135
|
)
|
|
136
136
|
<%}else{%>
|
|
137
137
|
@Roles(Role.SuperAdmin,Role.SuperUser,Role.<%= `${it.typename}_${api.action}`%>,
|
|
138
|
-
<%if(api.
|
|
139
|
-
<% for(let r=0;r<api.
|
|
138
|
+
<%if(api.requiredRole && api.requiredRole.length>0) { %>
|
|
139
|
+
<% for(let r=0;r<api.requiredRole.length;r++){%>Role.<%=api.requiredRole[r]%>,<%}%>
|
|
140
140
|
<%}%>
|
|
141
141
|
)
|
|
142
142
|
<%}%>
|
|
@@ -144,13 +144,13 @@ export class <%= it.typename %>Controller extends SimpleAppAbstractController<
|
|
|
144
144
|
@ApiResponse({status: 200,description: '<%=api.description%>' ,type: Object })
|
|
145
145
|
@ApiResponse({status: 418,description: 'undefine bpmn,setDocumentStatus or bpmn'})
|
|
146
146
|
@ApiOperation({ operationId: '<%=api.execute ??api.action%>' })
|
|
147
|
-
<% if(api.
|
|
148
|
-
<%for(let q=0;q<api.
|
|
149
|
-
@ApiQuery({name: "<%=api['
|
|
147
|
+
<% if(api.queryPara && api.queryPara.length>0) {%>
|
|
148
|
+
<%for(let q=0;q<api.queryPara.length; q++){%>
|
|
149
|
+
@ApiQuery({name: "<%=api['queryPara'][q]%>",required: false,type: String})
|
|
150
150
|
<%}%>
|
|
151
151
|
<%}%>
|
|
152
|
-
async <%=api.execute??api.action %>(@AppUser() appuser: UserContext,@Res() res:Response,<% if(api.
|
|
153
|
-
<%let subpath = api.
|
|
152
|
+
async <%=api.execute??api.action %>(@AppUser() appuser: UserContext,@Res() res:Response,<% if(api.entryPoint && api.entryPoint.includes(':')) {%>
|
|
153
|
+
<%let subpath = api.entryPoint.split('/')%>
|
|
154
154
|
<% for(let a=0;a<subpath.length;a++){%>
|
|
155
155
|
<%const partstr = subpath[a]%>
|
|
156
156
|
<%if(partstr.includes(':')){%>
|
|
@@ -159,16 +159,16 @@ export class <%= it.typename %>Controller extends SimpleAppAbstractController<
|
|
|
159
159
|
<%}%>
|
|
160
160
|
<%}%>
|
|
161
161
|
<%}%>
|
|
162
|
-
<% if(api.
|
|
163
|
-
<%for(let q=0;q<api.
|
|
164
|
-
<% const qp = api['
|
|
162
|
+
<% if(api.queryPara && api.queryPara.length>0) {%>
|
|
163
|
+
<%for(let q=0;q<api.queryPara.length; q++){%>
|
|
164
|
+
<% const qp = api['queryPara'][q] %>
|
|
165
165
|
@Query('<%=qp%>') <%=qp%>: string,
|
|
166
166
|
<%}%>
|
|
167
167
|
<%}%>
|
|
168
168
|
){
|
|
169
169
|
<%if(api.execute){%>
|
|
170
|
-
const result = await this.service.<%=api.execute%>(appuser,<% if(api.
|
|
171
|
-
<%let subpath = api.
|
|
170
|
+
const result = await this.service.<%=api.execute%>(appuser,<% if(api.entryPoint && api.entryPoint.includes(':')) {%>
|
|
171
|
+
<%let subpath = api.entryPoint.split('/')%>
|
|
172
172
|
<% for(let a=0;a<subpath.length;a++){%>
|
|
173
173
|
<%const partstr = subpath[a]%>
|
|
174
174
|
<%if(partstr.includes(':')){%>
|
|
@@ -177,9 +177,9 @@ export class <%= it.typename %>Controller extends SimpleAppAbstractController<
|
|
|
177
177
|
<%}%>
|
|
178
178
|
<%}%>
|
|
179
179
|
<%}%>
|
|
180
|
-
<% if(api.
|
|
181
|
-
<%for(let q=0;q<api.
|
|
182
|
-
<%= api['
|
|
180
|
+
<% if(api.queryPara && api.queryPara.length>0) {%>
|
|
181
|
+
<%for(let q=0;q<api.queryPara.length; q++){%>
|
|
182
|
+
<%= api['queryPara'][q] %>,
|
|
183
183
|
<%}%>
|
|
184
184
|
<%}%>
|
|
185
185
|
)
|
|
@@ -59,7 +59,7 @@ export class <%= it.typename %>Processor extends SimpleAppService<<%= it.typenam
|
|
|
59
59
|
// <%~ JSON.stringify(fml) %>
|
|
60
60
|
//const tmp = jsopbj.query(vdata,fieldpath).filter((item:string)=>item!='')
|
|
61
61
|
|
|
62
|
-
jsopbj.apply(data, '<%~ fml.
|
|
62
|
+
jsopbj.apply(data, '<%~ fml.jsonPath %>', function(value:any) { return <%~fml.formula %> });
|
|
63
63
|
|
|
64
64
|
<%}) %>
|
|
65
65
|
<%} %>
|
|
@@ -6,14 +6,9 @@
|
|
|
6
6
|
* last change 2023-09-09
|
|
7
7
|
* author: Ks Tan
|
|
8
8
|
*/
|
|
9
|
-
<% const skipcolumns = ['_id','
|
|
10
|
-
|
|
11
|
-
import
|
|
12
|
-
import MultiTextRender from '~/components/renderers/MultiTextRender.vue'
|
|
13
|
-
import BooleanRender from '~/components/renderers/BooleanRender.vue'
|
|
14
|
-
import DateRender from '~/components/renderers/DateRender.vue'
|
|
15
|
-
import ForeignKeyRender from '~/components/renderers/ForeignKeyRender.vue'
|
|
16
|
-
|
|
9
|
+
<% const skipcolumns = ['_id','createdBy','created','updatedBy','updated','orgId','branchId','tenantId','doctype'] %>
|
|
10
|
+
|
|
11
|
+
import { CellSetting } from "~/types";
|
|
17
12
|
const {$<%= it.typename %>Doc } = useNuxtApp();
|
|
18
13
|
const doc = $<%= it.typename %>Doc()
|
|
19
14
|
const data = doc.getReactiveData();
|
|
@@ -29,13 +24,13 @@ definePageMeta({
|
|
|
29
24
|
<%} else if(['string','number','integer'].indexOf(obj.type)>=0){%>'<%=key%>',
|
|
30
25
|
<%} else if(obj.type =='object' && obj['x-foreignkey'] ){%>
|
|
31
26
|
{
|
|
32
|
-
title:'<%=
|
|
27
|
+
title:t('<%=key%>'),
|
|
33
28
|
field:'<%=key%>',
|
|
34
|
-
|
|
35
|
-
|
|
29
|
+
rendererName:'RendererForeignKey',
|
|
30
|
+
rendererSetting:{collection:'<%=obj["x-foreignkey"]%>' }
|
|
36
31
|
},
|
|
37
32
|
<%}%>
|
|
38
|
-
<%})%>],
|
|
33
|
+
<%})%>] as CellSetting[],
|
|
39
34
|
sorts:[
|
|
40
35
|
<%if(it.jsonschema['x-simpleapp-config'] && it.jsonschema['x-simpleapp-config']['uniqueKey']){%>
|
|
41
36
|
['<%=it.jsonschema['x-simpleapp-config']['uniqueKey']%>','asc'],
|
|
@@ -57,19 +52,19 @@ const exitRecord = ()=>{
|
|
|
57
52
|
}
|
|
58
53
|
|
|
59
54
|
watch(()=> useRoute().fullPath ,(newvalue,oldvalue)=>{
|
|
60
|
-
visible.value =
|
|
55
|
+
visible.value = useRoute().params.id || useRoute().fullPath.includes("/new") ? true : false;
|
|
61
56
|
})
|
|
62
57
|
|
|
63
58
|
onNuxtReady(()=>{
|
|
64
|
-
visible.value = useRoute().params.id ? true : false;
|
|
59
|
+
visible.value = useRoute().params.id || useRoute().fullPath.includes('/new') ? true : false;
|
|
65
60
|
})
|
|
66
61
|
</script>
|
|
67
62
|
<template>
|
|
68
63
|
<div>
|
|
69
|
-
<Button class="
|
|
64
|
+
<Button class="btn btn-primary" v-if="canPerform(String(useRoute().meta.name),'create')" @click="newData">New</Button>
|
|
70
65
|
<Dialog v-model:visible="visible"
|
|
71
|
-
:pt="{root:{class:'w-full h-full bg-white'}}"
|
|
72
|
-
modal :header="doc.getDocName()"
|
|
66
|
+
:pt="{ root: { class: 'w-full h-full bg-white' } , headertitle:{class:'m-2 ml-6 text-2xl font-bold'}}"
|
|
67
|
+
modal :header="t(doc.getDocName())"
|
|
73
68
|
:autoZIndex="false"
|
|
74
69
|
@update:visible="exitRecord"
|
|
75
70
|
>
|