@simitgroup/simpleapp-generator 1.4.2-alpha → 1.5.1-alpha
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -1
- package/dist/buildinschemas/autoincreament.d.ts.map +1 -1
- package/dist/buildinschemas/autoincreament.js +1 -0
- package/dist/buildinschemas/autoincreament.js.map +1 -1
- package/dist/buildinschemas/docnoformat.d.ts.map +1 -1
- package/dist/buildinschemas/docnoformat.js +1 -0
- package/dist/buildinschemas/docnoformat.js.map +1 -1
- package/dist/buildinschemas/permission.d.ts.map +1 -1
- package/dist/buildinschemas/permission.js +1 -8
- package/dist/buildinschemas/permission.js.map +1 -1
- package/dist/framework.d.ts.map +1 -1
- package/dist/framework.js +4 -2
- package/dist/framework.js.map +1 -1
- package/dist/generate.js +6 -4
- package/dist/generate.js.map +1 -1
- package/dist/processors/bpmnbuilder.d.ts.map +1 -1
- package/dist/processors/bpmnbuilder.js +10 -4
- package/dist/processors/bpmnbuilder.js.map +1 -1
- package/dist/processors/jsonschemabuilder.d.ts.map +1 -1
- package/dist/processors/jsonschemabuilder.js +9 -0
- package/dist/processors/jsonschemabuilder.js.map +1 -1
- package/package.json +1 -1
- package/src/buildinschemas/autoincreament.ts +1 -0
- package/src/buildinschemas/docnoformat.ts +1 -0
- package/src/buildinschemas/permission.ts +1 -8
- package/src/framework.ts +5 -4
- package/src/generate.ts +7 -6
- package/src/processors/bpmnbuilder.ts +10 -5
- package/src/processors/jsonschemabuilder.ts +10 -0
- package/templates/basic/nest/apischema.ts.eta +5 -0
- package/templates/basic/nest/controller.ts.eta +31 -12
- package/templates/basic/nest/resolver.ts.eta +124 -0
- package/templates/basic/nest/service.ts.eta +0 -6
- package/templates/nest/.env._eta +7 -7
- package/templates/nest/src/app.module.ts.eta +24 -21
- package/templates/nest/src/app.resolver.ts.eta +9 -0
- package/templates/nest/src/cloudapi/cloudapi.module.ts._eta +15 -0
- package/templates/nest/src/cloudapi/cloudapi.service.ts._eta +15 -0
- package/templates/nest/src/simpleapp/apischemas/index.ts._eta +15 -1
- package/templates/nest/src/simpleapp/generate/commons/decorators/appuser.decorator.ts.eta +11 -5
- package/templates/nest/src/simpleapp/generate/commons/interceptors/response.interceptor.ts.eta +44 -39
- package/templates/nest/src/simpleapp/generate/commons/middlewares/tenant.middleware.ts.eta +16 -4
- package/templates/nest/src/simpleapp/generate/commons/robotuser.service.ts.eta +112 -0
- package/templates/nest/src/simpleapp/generate/commons/roles/roles.guard.ts.eta +24 -12
- package/templates/nest/src/simpleapp/generate/commons/user.context.ts.eta +4 -1
- package/templates/nest/src/simpleapp/generate/processors/simpleapp.processor.ts.eta +12 -5
- package/templates/nest/src/simpleapp/generate/types/index.ts.eta +1 -1
- package/templates/nest/src/simpleapp/generate/types/schema.type.ts.eta +191 -0
- package/templates/nest/src/simpleapp/generate/types/simpleapp.type.ts.eta +200 -5
- package/templates/nest/src/simpleapp/generate/types/workflow.type.ts.eta +15 -0
- package/templates/nest/src/simpleapp/generate/workflow/workflow.config.ts.eta +3 -3
- package/templates/nest/src/simpleapp/generate/workflow/workflow.controller.ts.eta +8 -6
- package/templates/nest/src/simpleapp/generate/workflow/workflow.service.ts.eta +60 -23
- package/templates/nest/src/simpleapp/resolvers/readme.md.eta +1 -0
- package/templates/nest/src/simpleapp/simpleapp.module.ts.eta +13 -3
- package/templates/nest/src/simpleapp/types/index.ts._eta +6 -0
- package/templates/nest/src/simpleapp/workflows/listeners/simpleapp.listener.ts.eta +31 -0
- package/templates/nuxt/app.vue._eta +8 -2
- package/templates/nuxt/assets/primevue/passthrough.ts._eta +1 -1
- package/templates/nuxt/components/renderer/RendererMoney.vue.eta +21 -12
- package/templates/nuxt/composables/graphquery.generate.ts.eta +26 -0
- package/templates/nuxt/composables/refreshDocumentList.generate.ts.eta +7 -6
- package/templates/nuxt/layouts/mobile.vue._eta +2 -2
- package/templates/nuxt/nuxt.config.ts._eta +8 -0
- package/templates/nuxt/pages/[xorg]/index.vue._eta +9 -0
- package/templates/nuxt/pages/[xorg]/mobile/index.vue._eta +2 -15
- package/templates/nuxt/pages/picktenant.vue._eta +3 -1
- package/templates/nuxt/simpleapp/generate/clients/SimpleAppClient.ts.eta +2 -0
- package/templates/nuxt/types/events.ts.eta +4 -3
- package/templates/project/workflows/bpmn/{suspendcustomer.bpmn._eta → sayhello.bpmn._eta} +6 -36
- package/tsconfig.tsbuildinfo +1 -1
- package/templates/nest/src/simpleapp/workflows/listeners/simpleapp.listener.ts._eta +0 -26
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file was automatically generated by simpleapp generator. Every
|
|
3
|
+
* MODIFICATION OVERRIDE BY GENERATEOR
|
|
4
|
+
* last change 2024-04-15
|
|
5
|
+
* Author: Ks Tan
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
export type WorkflowCatalogue = {
|
|
9
|
+
<%for(let i=0; i<it.allbpmn.length;i++){ %>
|
|
10
|
+
<% const bpmn = it.allbpmn[i] %>
|
|
11
|
+
<%=bpmn%>:any,
|
|
12
|
+
<%}%>
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export type WorkflowName = keyof WorkflowCatalogue
|
|
@@ -20,7 +20,7 @@ let _this: WorkflowConfig; //we need another variable to access WorkflowConfig
|
|
|
20
20
|
class MyDataStore extends DataStore {
|
|
21
21
|
constructor(bpmnserver) {
|
|
22
22
|
super(bpmnserver);
|
|
23
|
-
console.log('this.dbConfiguration ', this.db);
|
|
23
|
+
//console.log('this.dbConfiguration ', this.db);
|
|
24
24
|
}
|
|
25
25
|
}
|
|
26
26
|
|
|
@@ -65,8 +65,8 @@ export class WorkflowConfig {
|
|
|
65
65
|
},
|
|
66
66
|
appDelegate: (server: BPMNServer) =>
|
|
67
67
|
_this.workflowdelegate.setServer(server),
|
|
68
|
-
userService: (server: BPMNServer) =>
|
|
69
|
-
_this.workflowUserService.setServer(server),
|
|
68
|
+
//userService: (server: BPMNServer) =>
|
|
69
|
+
//_this.workflowUserService.setServer(server),
|
|
70
70
|
dataStore: function (server: BPMNServer) {
|
|
71
71
|
return new MyDataStore(server);
|
|
72
72
|
},
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* This file was automatically generated by simpleapp generator. Every
|
|
3
3
|
* MODIFICATION OVERRIDE BY GENERATEOR
|
|
4
|
-
* last change 2024-
|
|
4
|
+
* last change 2024-04-15
|
|
5
5
|
* Author: Ks Tan
|
|
6
6
|
*/
|
|
7
7
|
import {
|
|
@@ -15,6 +15,7 @@ import {
|
|
|
15
15
|
Delete,
|
|
16
16
|
HttpCode,
|
|
17
17
|
} from '@nestjs/common';
|
|
18
|
+
|
|
18
19
|
import { WorkflowService } from './workflow.service';
|
|
19
20
|
import { UserTaskActors } from './workflow.type';
|
|
20
21
|
import { Roles } from '../commons/roles/roles.decorator';
|
|
@@ -29,6 +30,7 @@ import {
|
|
|
29
30
|
import { ApiTags, ApiBody, ApiResponse, ApiOperation } from '@nestjs/swagger';
|
|
30
31
|
import { AppUser } from '../commons/decorators/appuser.decorator';
|
|
31
32
|
import { UserContext } from '../commons/user.context';
|
|
33
|
+
import { WorkflowName } from '../types';
|
|
32
34
|
@ApiTags('workflow')
|
|
33
35
|
@Controller('workflow')
|
|
34
36
|
export class WorkflowController {
|
|
@@ -210,7 +212,7 @@ export class WorkflowController {
|
|
|
210
212
|
})
|
|
211
213
|
async newWorkflowDefinitions(
|
|
212
214
|
@AppUser() appuser: UserContext,
|
|
213
|
-
@Param('workflowname') workflowname:
|
|
215
|
+
@Param('workflowname') workflowname: WorkflowName,
|
|
214
216
|
@Body() xml: string,
|
|
215
217
|
) {
|
|
216
218
|
return await this.workflowService.newWorkflowDefinitions(
|
|
@@ -234,7 +236,7 @@ export class WorkflowController {
|
|
|
234
236
|
})
|
|
235
237
|
async updateWorkflowDefinition(
|
|
236
238
|
@AppUser() appuser: UserContext,
|
|
237
|
-
@Param('workflowname') workflowname:
|
|
239
|
+
@Param('workflowname') workflowname: WorkflowName,
|
|
238
240
|
@Body() xml: string,
|
|
239
241
|
) {
|
|
240
242
|
return await this.workflowService.updateWorkflowDefinition(
|
|
@@ -254,7 +256,7 @@ export class WorkflowController {
|
|
|
254
256
|
})
|
|
255
257
|
async readWorkflowDefinition(
|
|
256
258
|
@AppUser() appuser: UserContext,
|
|
257
|
-
@Param('workflowname') workflowname:
|
|
259
|
+
@Param('workflowname') workflowname: WorkflowName,
|
|
258
260
|
) {
|
|
259
261
|
return await this.workflowService.readWorkflowDefinition(
|
|
260
262
|
appuser,
|
|
@@ -271,7 +273,7 @@ export class WorkflowController {
|
|
|
271
273
|
})
|
|
272
274
|
async dropWorkflowDefinition(
|
|
273
275
|
@AppUser() appuser: UserContext,
|
|
274
|
-
@Param('workflowname') workflowname:
|
|
276
|
+
@Param('workflowname') workflowname: WorkflowName,
|
|
275
277
|
) {
|
|
276
278
|
return await this.workflowService.deleteWorkflowDefinition(
|
|
277
279
|
appuser,
|
|
@@ -344,7 +346,7 @@ export class WorkflowController {
|
|
|
344
346
|
})
|
|
345
347
|
async startWorkflow(
|
|
346
348
|
@AppUser() appuser: UserContext,
|
|
347
|
-
@Param('workflowname') workflowname:
|
|
349
|
+
@Param('workflowname') workflowname: WorkflowName,
|
|
348
350
|
@Body() data: any,
|
|
349
351
|
) {
|
|
350
352
|
return await this.workflowService.startWorkflow(
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
+
import { error } from 'console';
|
|
1
2
|
/**
|
|
2
3
|
* This file was automatically generated by simpleapp generator. Every
|
|
3
4
|
* MODIFICATION OVERRIDE BY GENERATEOR
|
|
4
|
-
* last change 2024-
|
|
5
|
+
* last change 2024-04-19
|
|
5
6
|
* Author: Ks Tan
|
|
6
7
|
*/
|
|
7
8
|
import { WorkflowConfig } from './workflow.config';
|
|
@@ -30,9 +31,11 @@ import {
|
|
|
30
31
|
Logger as bpmnlogger,
|
|
31
32
|
BPMN_TYPE,
|
|
32
33
|
EXECUTION_EVENT,
|
|
34
|
+
ILogger,
|
|
33
35
|
} from 'bpmn-server';
|
|
34
36
|
// import { configuration } from './configuration';
|
|
35
37
|
import { UserContext } from '../commons/user.context';
|
|
38
|
+
import { WorkflowName } from '../types';
|
|
36
39
|
//import * as formschemas from '../../workflow/formschema';
|
|
37
40
|
export {
|
|
38
41
|
WorkflowSettingApiSchema,
|
|
@@ -47,7 +50,23 @@ export class WorkflowService {
|
|
|
47
50
|
private workflowconfig: WorkflowConfig,
|
|
48
51
|
private eventEmitter: EventEmitter2,
|
|
49
52
|
) {
|
|
50
|
-
|
|
53
|
+
const config = this.workflowconfig.getConfig()
|
|
54
|
+
class HiddenLogger implements ILogger{
|
|
55
|
+
setOptions(){}
|
|
56
|
+
clear(){}
|
|
57
|
+
get(){ return [] as any[]}
|
|
58
|
+
debug(){}
|
|
59
|
+
warn(){}
|
|
60
|
+
info(){}
|
|
61
|
+
reportError(err:any){
|
|
62
|
+
console.log("report Error:",err )
|
|
63
|
+
}
|
|
64
|
+
async save(filename:any){}
|
|
65
|
+
log(){}
|
|
66
|
+
error(err: any){console.log("Error:",err )
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
this.bpmnServer = new BPMNServer(config, new HiddenLogger());
|
|
51
70
|
this.bpmnServer.listener.on(
|
|
52
71
|
'all',
|
|
53
72
|
async (event) => await this.applyEventListener(event),
|
|
@@ -110,7 +129,7 @@ export class WorkflowService {
|
|
|
110
129
|
*/
|
|
111
130
|
async newWorkflowDefinitions(
|
|
112
131
|
appuser: UserContext,
|
|
113
|
-
workflowName:
|
|
132
|
+
workflowName: WorkflowName,
|
|
114
133
|
xml: string,
|
|
115
134
|
) {
|
|
116
135
|
throw new BadRequestException(
|
|
@@ -124,13 +143,19 @@ export class WorkflowService {
|
|
|
124
143
|
);
|
|
125
144
|
}
|
|
126
145
|
|
|
127
|
-
async readWorkflowDefinition(
|
|
146
|
+
async readWorkflowDefinition(
|
|
147
|
+
appuser: UserContext,
|
|
148
|
+
workflowname: WorkflowName,
|
|
149
|
+
) {
|
|
128
150
|
throw new BadRequestException(
|
|
129
151
|
`readWorkflowDefinition is not supported yet`,
|
|
130
152
|
);
|
|
131
153
|
}
|
|
132
154
|
|
|
133
|
-
async deleteWorkflowDefinition(
|
|
155
|
+
async deleteWorkflowDefinition(
|
|
156
|
+
appuser: UserContext,
|
|
157
|
+
workflowname: WorkflowName,
|
|
158
|
+
) {
|
|
134
159
|
throw new BadRequestException(
|
|
135
160
|
`deleteWorkflowDefinition is not supported yet`,
|
|
136
161
|
);
|
|
@@ -138,7 +163,7 @@ export class WorkflowService {
|
|
|
138
163
|
|
|
139
164
|
async updateWorkflowDefinition(
|
|
140
165
|
appuser: UserContext,
|
|
141
|
-
workflowname:
|
|
166
|
+
workflowname: WorkflowName,
|
|
142
167
|
xml: string,
|
|
143
168
|
) {
|
|
144
169
|
throw new BadRequestException(
|
|
@@ -193,21 +218,20 @@ export class WorkflowService {
|
|
|
193
218
|
data: any,
|
|
194
219
|
) {
|
|
195
220
|
try {
|
|
196
|
-
|
|
197
221
|
const response = await this.bpmnServer.engine.invoke(
|
|
198
222
|
{ 'items.id': taskId, 'items.status': 'wait' },
|
|
199
223
|
data,
|
|
200
224
|
appuser.getUid(),
|
|
201
|
-
{appuser:appuser}
|
|
225
|
+
{ appuser: appuser },
|
|
202
226
|
);
|
|
203
227
|
return {
|
|
204
|
-
parentKeys:Object.keys(response),
|
|
205
|
-
parentId:response.id,
|
|
206
|
-
data:response.instance.data,
|
|
228
|
+
parentKeys: Object.keys(response),
|
|
229
|
+
parentId: response.id,
|
|
230
|
+
data: response.instance.data,
|
|
207
231
|
// parentId:response,
|
|
208
|
-
input:response.item.input,
|
|
209
|
-
vars:response.item.vars,
|
|
210
|
-
id:response.item.id,
|
|
232
|
+
input: response.item.input,
|
|
233
|
+
vars: response.item.vars,
|
|
234
|
+
id: response.item.id,
|
|
211
235
|
status: response.item.status,
|
|
212
236
|
};
|
|
213
237
|
} catch (e) {
|
|
@@ -313,12 +337,26 @@ export class WorkflowService {
|
|
|
313
337
|
* @returns workflowsummary
|
|
314
338
|
*/
|
|
315
339
|
@OnEvent('workflow.start')
|
|
316
|
-
async startWorkflow(
|
|
340
|
+
async startWorkflow(
|
|
341
|
+
appuser: UserContext,
|
|
342
|
+
workflowName: WorkflowName,
|
|
343
|
+
data?: any,
|
|
344
|
+
) {
|
|
345
|
+
//run as event, it wont have transaction
|
|
346
|
+
appuser.setDBSession(undefined);
|
|
347
|
+
|
|
348
|
+
if (!data) data = {};
|
|
349
|
+
|
|
350
|
+
//sometimes data is Mongoose object instead of pure data, need serialize and deserialize to remove that
|
|
351
|
+
data = JSON.parse(JSON.stringify(data));
|
|
352
|
+
|
|
317
353
|
try {
|
|
318
354
|
// console.log('startWorkflow started: ', workflowName);
|
|
355
|
+
|
|
319
356
|
data.tenantId = appuser.getTenantId();
|
|
320
357
|
data.orgId = appuser.getOrgId();
|
|
321
358
|
data.branchId = appuser.getBranchId();
|
|
359
|
+
|
|
322
360
|
const result = await this.bpmnServer.engine.start(
|
|
323
361
|
workflowName,
|
|
324
362
|
data,
|
|
@@ -457,13 +495,12 @@ export class WorkflowService {
|
|
|
457
495
|
const elementProps = event.context.item.element.def;
|
|
458
496
|
// const usertaskinput = event.context.item.input ?? null;
|
|
459
497
|
const data = event.context.instance.data;
|
|
460
|
-
const vars = {}
|
|
461
|
-
Object.assign(vars,event.context.item.input);
|
|
462
|
-
event.context.item.input={}
|
|
498
|
+
const vars = {};
|
|
499
|
+
Object.assign(vars, event.context.item.input);
|
|
500
|
+
event.context.item.input = {};
|
|
463
501
|
const options = event.context.options;
|
|
464
502
|
switch (elementType) {
|
|
465
503
|
case BPMN_TYPE.UserTask:
|
|
466
|
-
|
|
467
504
|
let usertaskeventtype: UserTaskEventType;
|
|
468
505
|
if (eventType == EXECUTION_EVENT.node_start)
|
|
469
506
|
usertaskeventtype = 'start';
|
|
@@ -475,7 +512,7 @@ export class WorkflowService {
|
|
|
475
512
|
usertaskeventtype = 'invoked';
|
|
476
513
|
else if (eventType == EXECUTION_EVENT.node_wait)
|
|
477
514
|
usertaskeventtype = 'wait';
|
|
478
|
-
|
|
515
|
+
// console.log("event-------=================================",eventType,usertaskeventtype)
|
|
479
516
|
if (usertaskeventtype) {
|
|
480
517
|
const props: UserTaskData = {
|
|
481
518
|
workflowName: workflowName,
|
|
@@ -492,9 +529,9 @@ export class WorkflowService {
|
|
|
492
529
|
followUpDate: event.context.item.followUpDate,
|
|
493
530
|
priority: event.context.item.priority,
|
|
494
531
|
formKey: elementProps.formKey,
|
|
495
|
-
},
|
|
532
|
+
},
|
|
496
533
|
data: data,
|
|
497
|
-
vars:vars,
|
|
534
|
+
vars: vars,
|
|
498
535
|
options: options,
|
|
499
536
|
};
|
|
500
537
|
this.eventEmitter.emit(
|
|
@@ -518,7 +555,7 @@ export class WorkflowService {
|
|
|
518
555
|
elementId: elementId,
|
|
519
556
|
elementName: elementName,
|
|
520
557
|
data: data,
|
|
521
|
-
vars:vars,
|
|
558
|
+
vars: vars,
|
|
522
559
|
options: options,
|
|
523
560
|
};
|
|
524
561
|
this.eventEmitter.emit(
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
graphql resolver
|
|
@@ -8,11 +8,12 @@ import { Module } from '@nestjs/common';
|
|
|
8
8
|
import { MongooseModule } from '@nestjs/mongoose';
|
|
9
9
|
import {DocNumberFormatGenerator} from './generate/commons/docnogenerator.service'
|
|
10
10
|
import { AuditTrail } from './generate/commons/audittrail.service';
|
|
11
|
-
|
|
11
|
+
import { CloudApiModule } from 'src/cloudapi/cloudapi.module';
|
|
12
12
|
// auto import modules
|
|
13
13
|
<% for(let i=0;i<it.modules.length; i++){ %>
|
|
14
14
|
<% let obj = it.modules[i]%>
|
|
15
15
|
import { <%= obj.docname %>Service } from './services/<%= obj.doctype %>.service';
|
|
16
|
+
import { <%= obj.docname %>Resolver } from './generate/resolvers/<%= obj.doctype %>.resolver';
|
|
16
17
|
import { <%= obj.docname %>Controller } from './generate/controllers/<%= obj.doctype %>.controller';
|
|
17
18
|
import { <%= obj.docname %>MongoSchema } from './generate/models/<%= obj.doctype %>.model';
|
|
18
19
|
<%}%>
|
|
@@ -23,6 +24,7 @@ import { WorkflowDelegate } from './generate/workflow/workflow.delegate';
|
|
|
23
24
|
import { WorkflowConfig } from './generate/workflow/workflow.config';
|
|
24
25
|
import { WorkflowService } from './generate/workflow/workflow.service';
|
|
25
26
|
import { WorkflowUserService } from './generate/workflow/workflow.userservice';
|
|
27
|
+
import { SimpleAppRobotUserService } from './generate/commons/robotuser.service';
|
|
26
28
|
<%for(let i=0; i<it.allbpmn.length;i++){%>
|
|
27
29
|
<%let bpmn = it.allbpmn[i]%>
|
|
28
30
|
import { <%=capitalizeFirstLetter(bpmn)%>ListenerService } from 'src/simpleapp/workflows/listeners/<%=bpmn%>.listener';
|
|
@@ -36,6 +38,7 @@ import { <%=capitalizeFirstLetter(bpmn)%>ListenerService } from 'src/simpleapp/w
|
|
|
36
38
|
|
|
37
39
|
@Module({
|
|
38
40
|
imports: [
|
|
41
|
+
CloudApiModule,
|
|
39
42
|
MongooseModule.forFeature([
|
|
40
43
|
<% for(let i=0;i<it.modules.length; i++){ %>
|
|
41
44
|
<% let obj = it.modules[i]%>
|
|
@@ -45,12 +48,19 @@ import { <%=capitalizeFirstLetter(bpmn)%>ListenerService } from 'src/simpleapp/w
|
|
|
45
48
|
],
|
|
46
49
|
controllers: [<% for(let i=0;i<it.modules.length; i++){ %><%= it.modules[i].docname %>Controller,<%}%> ProfileController,WorkflowController],
|
|
47
50
|
providers: [
|
|
48
|
-
|
|
51
|
+
SimpleAppRobotUserService,
|
|
52
|
+
AuditTrail,DocNumberFormatGenerator,<% for(let i=0;i<it.modules.length; i++){ %>
|
|
53
|
+
<%= it.modules[i].docname %>Service,
|
|
54
|
+
<%= it.modules[i].docname %>Resolver,
|
|
55
|
+
<%}%> ProfileService,WorkflowDelegate,WorkflowConfig,WorkflowService,WorkflowUserService,
|
|
49
56
|
<%for(let i=0; i<it.allbpmn.length;i++){%>
|
|
50
57
|
<%let bpmn = it.allbpmn[i]%>
|
|
51
58
|
<%=capitalizeFirstLetter(bpmn)%>ListenerService,
|
|
52
59
|
<%}%>
|
|
53
60
|
],
|
|
54
|
-
exports:[AuditTrail,DocNumberFormatGenerator,<% for(let i=0;i<it.modules.length; i++){
|
|
61
|
+
exports:[SimpleAppRobotUserService,AuditTrail,DocNumberFormatGenerator,<% for(let i=0;i<it.modules.length; i++){ %>
|
|
62
|
+
<%= it.modules[i].docname %>Service,
|
|
63
|
+
<%= it.modules[i].docname %>Resolver,
|
|
64
|
+
<%}%> ProfileService,WorkflowDelegate,WorkflowConfig,WorkflowService,WorkflowUserService,]
|
|
55
65
|
})
|
|
56
66
|
export class GenerateModule {}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file was automatically generated by simpleapp generator.
|
|
3
|
+
* DONT CHANGE THIS FILE !!
|
|
4
|
+
* MODIFICATION OVERRIDE BY GENERATEOR
|
|
5
|
+
* last change 2024-03-19
|
|
6
|
+
* Author: Ks Tan
|
|
7
|
+
*/
|
|
8
|
+
import { Inject, Injectable, Logger } from '@nestjs/common';
|
|
9
|
+
import { InjectModel } from '@nestjs/mongoose';
|
|
10
|
+
import { Model } from 'mongoose';
|
|
11
|
+
import { UserContext } from 'src/simpleapp/generate/commons/user.context';
|
|
12
|
+
import { User } from 'src/simpleapp/services/user.service';
|
|
13
|
+
import { Permission } from 'src/simpleapp/services/perm.service';
|
|
14
|
+
import { SimpleAppRobotUserService } from 'src/simpleapp/generate/commons/robotuser.service';
|
|
15
|
+
|
|
16
|
+
@Injectable()
|
|
17
|
+
export class SimpleAppListenerService {
|
|
18
|
+
private systemAccessToken: string;
|
|
19
|
+
private expired: string;
|
|
20
|
+
logger = new Logger();
|
|
21
|
+
@InjectModel('User') private readonly usermodel: Model<User>;
|
|
22
|
+
@InjectModel('Permission') private readonly permmodel: Model<Permission>;
|
|
23
|
+
@Inject(SimpleAppRobotUserService)
|
|
24
|
+
private robotuser:SimpleAppRobotUserService;
|
|
25
|
+
|
|
26
|
+
constructor() {}
|
|
27
|
+
|
|
28
|
+
prepareAppUser(data: any) {
|
|
29
|
+
return this.robotuser.prepareAppUser(data)
|
|
30
|
+
}
|
|
31
|
+
}
|
|
@@ -13,13 +13,15 @@
|
|
|
13
13
|
/**
|
|
14
14
|
* This file was automatically generated by simpleapp generator. Every
|
|
15
15
|
* MODIFICATION OVERRIDE BY GENERATEOR
|
|
16
|
-
* last change
|
|
16
|
+
* last change 2024-03-17
|
|
17
17
|
* Author: Ks Tan
|
|
18
18
|
*/
|
|
19
|
+
|
|
19
20
|
watch(()=>useRoute().params['xorg'],async (newval,oldvalue)=>{
|
|
20
21
|
await reloadUserStore()
|
|
21
22
|
if(getPathPara('xorg','')!=''){
|
|
22
23
|
if(!getUserProfile()?.currentGroup) goTo('pickgroup')
|
|
24
|
+
setGraphqlServer()
|
|
23
25
|
}
|
|
24
26
|
})
|
|
25
27
|
|
|
@@ -36,6 +38,10 @@ const getLayout = ()=>{
|
|
|
36
38
|
onMounted(()=>{
|
|
37
39
|
const currentgroup = useCookie('currentGroup').value
|
|
38
40
|
//if no xorg, no enforce pick group
|
|
39
|
-
if(getCurrentXorg()
|
|
41
|
+
if(getCurrentXorg()){
|
|
42
|
+
if (!currentgroup)goTo('pickgroup')
|
|
43
|
+
setGraphqlServer()
|
|
44
|
+
}
|
|
45
|
+
|
|
40
46
|
})
|
|
41
47
|
</script>
|
|
@@ -21,7 +21,7 @@ const CustomTailwind = usePassThrough(
|
|
|
21
21
|
// buttonContainer:{class:'hidden'},
|
|
22
22
|
},
|
|
23
23
|
card:{
|
|
24
|
-
root:{class:'bg-white dark:bg-gray-800 shadow p-
|
|
24
|
+
root:{class:'bg-white dark:bg-gray-800 shadow p-2 rounded-2xl'},
|
|
25
25
|
// title:{class:''},
|
|
26
26
|
// header:{class:''}
|
|
27
27
|
},
|
|
@@ -1,11 +1,13 @@
|
|
|
1
|
-
|
|
2
1
|
<template>
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
}
|
|
8
|
-
|
|
2
|
+
<span v-if="typeof modelValue=='undefined' || typeof modelValue=='string' ">-</span>
|
|
3
|
+
<span v-else-if="showCurrency">
|
|
4
|
+
{{
|
|
5
|
+
currenyValue
|
|
6
|
+
}}</span
|
|
7
|
+
>
|
|
8
|
+
<span v-else>
|
|
9
|
+
{{ modelValue.toLocaleString(useI18n().defaultLocale, options) }}</span
|
|
10
|
+
>
|
|
9
11
|
</template>
|
|
10
12
|
<script lang="ts" setup>
|
|
11
13
|
/**
|
|
@@ -14,12 +16,19 @@
|
|
|
14
16
|
* last change 2024-02-04
|
|
15
17
|
* author: Ks Tan
|
|
16
18
|
*/
|
|
17
|
-
|
|
19
|
+
const currenyValue = computed(()=>{
|
|
20
|
+
if(modelValue.value === undefined) return '-'
|
|
21
|
+
return Intl.NumberFormat(useI18n().defaultLocale, {
|
|
22
|
+
// style: "currency",
|
|
23
|
+
// currency: getUserProfile()?.currency ?? '',
|
|
24
|
+
// currencyDisplay: "symbol",
|
|
25
|
+
}).format(modelValue.value)
|
|
26
|
+
})
|
|
18
27
|
const options = {
|
|
19
|
-
style:
|
|
28
|
+
style: "decimal", // Other options: 'currency', 'percent', etc.
|
|
20
29
|
minimumFractionDigits: 2,
|
|
21
30
|
maximumFractionDigits: 2,
|
|
22
31
|
};
|
|
23
|
-
const modelValue = defineModel<number>({required:true})
|
|
24
|
-
const props = defineProps<{showCurrency?:boolean}>()
|
|
25
|
-
</script>
|
|
32
|
+
const modelValue = defineModel<number>({ required: true });
|
|
33
|
+
const props = defineProps<{ showCurrency?: boolean }>();
|
|
34
|
+
</script>
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file was automatically generated by simpleapp generator. Every
|
|
3
|
+
* MODIFICATION OVERRIDE BY GENERATEOR
|
|
4
|
+
* last change 2024-03-13
|
|
5
|
+
* Author: Ks Tan
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { createHttpLink, } from '@apollo/client/core';
|
|
9
|
+
|
|
10
|
+
export const setGraphqlServer=()=>{
|
|
11
|
+
const apolloclient = useNuxtApp().$apollo.defaultClient
|
|
12
|
+
const newlink = createHttpLink({
|
|
13
|
+
uri: `${useRuntimeConfig().public.API_URL}/${getCurrentXorg()}/graphql`,
|
|
14
|
+
})
|
|
15
|
+
apolloclient.setLink(newlink)
|
|
16
|
+
apolloclient.defaultOptions={
|
|
17
|
+
|
|
18
|
+
query:{
|
|
19
|
+
fetchPolicy: 'no-cache',
|
|
20
|
+
errorPolicy: 'all'
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export const graphquery=async<T>(qqlstr: typeof gql) =>(await useAsyncQuery<T>(qqlstr)).data
|
|
@@ -1,19 +1,20 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* This file was automatically generated by simpleapp generator. Every
|
|
3
3
|
* MODIFICATION OVERRIDE BY GENERATEOR
|
|
4
|
-
* last change 2024-
|
|
4
|
+
* last change 2024-04-15
|
|
5
5
|
* Author: Ks Tan
|
|
6
6
|
*/
|
|
7
|
-
|
|
8
|
-
export const
|
|
7
|
+
import {SimpleAppDocumentType} from '~/types'
|
|
8
|
+
export const refreshDocumentList = (docName:SimpleAppDocumentType)=>useNuxtApp().$event('RefreshDocumentList',{documentName:docName})
|
|
9
|
+
export const refreshDocument = (docName:SimpleAppDocumentType)=>useNuxtApp().$event('RefreshDocument',docName)
|
|
9
10
|
|
|
10
|
-
export const listenDocument = (docName:
|
|
11
|
+
export const listenDocument = (docName:SimpleAppDocumentType,callback:Function) =>{
|
|
11
12
|
useNuxtApp().$listen('RefreshDocument',async (eventdocname:string)=>{
|
|
12
13
|
if(eventdocname==docName) await callback()
|
|
13
14
|
})
|
|
14
15
|
}
|
|
15
|
-
export const listenDocumentList = (docName:
|
|
16
|
+
export const listenDocumentList = (docName:SimpleAppDocumentType,callback:Function) =>{
|
|
16
17
|
useNuxtApp().$listen('RefreshDocumentList',async (eventdata)=>{
|
|
17
18
|
if(eventdata.documentName == docName) await callback()
|
|
18
19
|
})
|
|
19
|
-
}
|
|
20
|
+
}
|
|
@@ -23,9 +23,9 @@
|
|
|
23
23
|
|
|
24
24
|
<HeaderButtonMenuPicker v-model="showMenu"></HeaderButtonMenuPicker>
|
|
25
25
|
<HeaderButtonProfile v-model="showProfile"/>
|
|
26
|
-
|
|
26
|
+
|
|
27
27
|
</div>
|
|
28
|
-
|
|
28
|
+
<UserInvitation/>
|
|
29
29
|
<!-- <HeaderBar class="border flex flex-row h-10 fixed left-0 w-full justify justify-between top-0 z-50 bg-white dark:bg-gray-800"/> -->
|
|
30
30
|
|
|
31
31
|
</div>
|
|
@@ -50,6 +50,7 @@ devServer: {
|
|
|
50
50
|
'dayjs-nuxt',
|
|
51
51
|
'@sidebase/nuxt-auth',
|
|
52
52
|
'nuxt-primevue',
|
|
53
|
+
'@nuxtjs/apollo',
|
|
53
54
|
// '@nuxtjs/pwa', //cannot turn on, will cause nuxt cant start
|
|
54
55
|
// "nuxt-security", //temporary avoid nuxt-security cause cors
|
|
55
56
|
'@vueuse/nuxt',
|
|
@@ -89,6 +90,13 @@ devServer: {
|
|
|
89
90
|
],
|
|
90
91
|
defaultLocale: "en",
|
|
91
92
|
},
|
|
93
|
+
apollo: {
|
|
94
|
+
clients: {
|
|
95
|
+
default: {
|
|
96
|
+
httpEndpoint: process.env.API_URL
|
|
97
|
+
}
|
|
98
|
+
},
|
|
99
|
+
},
|
|
92
100
|
primevue: {
|
|
93
101
|
|
|
94
102
|
options: {
|
|
@@ -16,4 +16,13 @@
|
|
|
16
16
|
* author: Ks Tan
|
|
17
17
|
*/
|
|
18
18
|
useNuxtApp().$event('SetTitle',t('home'))
|
|
19
|
+
|
|
20
|
+
onMounted(()=>{
|
|
21
|
+
if(!getUserStore()?.currency || !getUserStore()?.country){
|
|
22
|
+
const id=getUserStore().orgRecordId
|
|
23
|
+
onScreenEditDocument<Organization>('organization',id, async (actionName:FormCrudEvent,data:Organization)=>{
|
|
24
|
+
|
|
25
|
+
})
|
|
26
|
+
}
|
|
27
|
+
})
|
|
19
28
|
</script>
|
|
@@ -1,19 +1,6 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<
|
|
3
|
-
<client-only>
|
|
4
|
-
<title>{{ getUserProfile()?.branchName }}</title>
|
|
5
|
-
</client-only>
|
|
6
|
-
<h1 class="border text-3xl text-center m-20 p-20">
|
|
7
|
-
{{ t("createYourContentHere") }}
|
|
8
|
-
</h1>
|
|
9
|
-
</div>
|
|
2
|
+
<IndexPage></IndexPage>
|
|
10
3
|
</template>
|
|
11
4
|
<script lang="ts" setup>
|
|
12
|
-
|
|
13
|
-
* This file was automatically generated by simpleapp generator during initialization. It is changable.
|
|
14
|
-
* --remove-this-line-to-prevent-override--
|
|
15
|
-
* last change 2024-02-22
|
|
16
|
-
* author: Ks Tan
|
|
17
|
-
*/
|
|
18
|
-
useNuxtApp().$event('SetTitle',t('home'))
|
|
5
|
+
import IndexPage from '../index.vue'
|
|
19
6
|
</script>
|
|
@@ -2,7 +2,9 @@
|
|
|
2
2
|
<div class="flex flex-col w-full">
|
|
3
3
|
<TextTitle class="text-center p-2">{{ t("pickYourDatabase") }}</TextTitle>
|
|
4
4
|
<div class="flex flex-col">
|
|
5
|
+
|
|
5
6
|
<div class="p-4">
|
|
7
|
+
{{ t('welcome ') }} {{ getUserProfile()?.fullName }}
|
|
6
8
|
<UserButtonCreateTenant></UserButtonCreateTenant>
|
|
7
9
|
</div>
|
|
8
10
|
<UserTenantPicker></UserTenantPicker>
|
|
@@ -13,7 +15,7 @@
|
|
|
13
15
|
/**
|
|
14
16
|
* This file was automatically generated by simpleapp generator.
|
|
15
17
|
* --remove-this-line-to-prevent-override--
|
|
16
|
-
* last change 2023-
|
|
18
|
+
* last change 2023-04-17
|
|
17
19
|
* author: Ks Tan
|
|
18
20
|
*/
|
|
19
21
|
</script>
|
|
@@ -68,6 +68,7 @@ export class SimpleAppClient<
|
|
|
68
68
|
return await this.docapi.runFindOne(id,this.axios)
|
|
69
69
|
.then((res: AxiosResponse) => {
|
|
70
70
|
// if(this.event){this.event('info:getById',res.data)}
|
|
71
|
+
this.data.value={} as TData
|
|
71
72
|
Object.assign(this.data.value, res.data);
|
|
72
73
|
return res;
|
|
73
74
|
}).catch((res:any)=>{
|
|
@@ -100,6 +101,7 @@ export class SimpleAppClient<
|
|
|
100
101
|
// summary:'Record create successfully',
|
|
101
102
|
// status:NotificationStatus.success
|
|
102
103
|
// })
|
|
104
|
+
this.data.value = {} as TData
|
|
103
105
|
this.data.value = { ...res.data };
|
|
104
106
|
holdScreenEnd()
|
|
105
107
|
return res.data;
|