@simitgroup/simpleapp-generator 1.4.1-alpha → 1.5.0-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/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 +8 -10
- 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 +11 -11
- 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 +28 -10
- package/templates/basic/nest/resolver.ts.eta +124 -0
- package/templates/basic/nest/service.ts.eta +0 -6
- package/templates/basic/nuxt/pages.landing.vue.eta +4 -2
- package/templates/basic/nuxt/pages.mobile.landing.vue.eta +3 -3
- package/templates/nest/.env._eta +7 -7
- package/templates/nest/src/app.module.ts.eta +22 -21
- package/templates/nest/src/app.resolver.ts.eta +9 -0
- 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/roles/roles.guard.ts.eta +24 -12
- package/templates/nest/src/simpleapp/generate/processors/simpleapp.processor.ts.eta +26 -18
- package/templates/nest/src/simpleapp/generate/types/index.ts.eta +1 -0
- package/templates/nest/src/simpleapp/generate/types/workflow.type.ts.eta +15 -0
- package/templates/nest/src/simpleapp/generate/workflow/workflow.config.ts.eta +2 -2
- package/templates/nest/src/simpleapp/generate/workflow/workflow.controller.ts.eta +8 -6
- package/templates/nest/src/simpleapp/generate/workflow/workflow.service.ts.eta +41 -22
- package/templates/nest/src/simpleapp/resolvers/readme.md.eta +1 -0
- package/templates/nest/src/simpleapp/simpleapp.module.ts.eta +9 -2
- package/templates/nuxt/app.vue._eta +9 -2
- package/templates/nuxt/components/calendar/CalendarByResource.vue.eta +1 -1
- package/templates/nuxt/components/mobile/MobileToolbar.vue.eta +11 -11
- package/templates/nuxt/components/overlay/OverlayHoldscreen.vue._eta +26 -0
- package/templates/nuxt/components/renderer/RendererDate.vue.eta +1 -1
- package/templates/nuxt/components/renderer/RendererDateTime.vue.eta +1 -1
- package/templates/nuxt/components/renderer/RendererForeignKey.vue.eta +7 -7
- package/templates/nuxt/components/renderer/RendererMoney.vue.eta +21 -12
- package/templates/nuxt/components/renderer/RendererTime.vue.eta +13 -0
- package/templates/nuxt/components/simpleApp/SimpleAppInput.vue.eta +11 -10
- package/templates/nuxt/composables/date.generate.ts.eta +10 -3
- package/templates/nuxt/composables/getDocument.generate.ts.eta +4 -4
- package/templates/nuxt/composables/graphquery.generate.ts.eta +26 -0
- package/templates/nuxt/composables/holdscreen.generate.ts.eta +9 -0
- package/templates/nuxt/composables/refreshDocumentList.generate.ts.eta +7 -6
- package/templates/nuxt/layouts/mobile.vue._eta +3 -3
- 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 +17 -3
- package/templates/nuxt/types/calendar.ts.eta +8 -3
- package/templates/nuxt/types/documentlist.ts.eta +13 -1
- package/templates/nuxt/types/events.ts.eta +5 -3
- package/templates/nuxt/types/others.ts.eta +3 -5
- package/templates/project/workflows/bpmn/{suspendcustomer.bpmn._eta → sayhello.bpmn._eta} +6 -36
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -1,13 +1,19 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* This file was automatically generated by simpleapp generator. Every
|
|
3
3
|
* MODIFICATION OVERRIDE BY GENERATEOR
|
|
4
|
-
* last change
|
|
4
|
+
* last change 2024-03-17
|
|
5
5
|
* Author: Ks Tan
|
|
6
6
|
*/
|
|
7
|
-
import {
|
|
7
|
+
import {
|
|
8
|
+
Injectable,
|
|
9
|
+
Inject,
|
|
10
|
+
CanActivate,
|
|
11
|
+
ExecutionContext,
|
|
12
|
+
Scope,
|
|
13
|
+
} from '@nestjs/common';
|
|
8
14
|
import { Reflector } from '@nestjs/core';
|
|
9
|
-
import { Role } from './roles.enum'
|
|
10
|
-
import { ROLES_KEY } from './roles.decorator'
|
|
15
|
+
import { Role } from './roles.enum';
|
|
16
|
+
import { ROLES_KEY } from './roles.decorator';
|
|
11
17
|
import { UserContext } from '../user.context';
|
|
12
18
|
|
|
13
19
|
@Injectable()
|
|
@@ -15,25 +21,31 @@ export class RolesGuard implements CanActivate {
|
|
|
15
21
|
constructor(private reflector: Reflector) {}
|
|
16
22
|
|
|
17
23
|
canActivate(context: ExecutionContext): boolean {
|
|
18
|
-
|
|
19
24
|
const requiredRoles = this.reflector.getAllAndOverride<Role[]>(ROLES_KEY, [
|
|
20
25
|
context.getHandler(),
|
|
21
26
|
context.getClass(),
|
|
22
27
|
]);
|
|
23
28
|
|
|
24
|
-
|
|
29
|
+
let sessionuser:UserContext
|
|
30
|
+
if (context.getType() == 'http') {
|
|
31
|
+
const request = context.switchToHttp().getRequest();
|
|
32
|
+
sessionuser = request['sessionuser'];
|
|
33
|
+
} else if (context.getArgs()[2]) {
|
|
34
|
+
const req = context.getArgs()[2].req;
|
|
35
|
+
sessionuser = req['sessionuser'];
|
|
36
|
+
}
|
|
25
37
|
|
|
26
38
|
if (!requiredRoles) {
|
|
27
39
|
return true;
|
|
28
40
|
}
|
|
29
|
-
|
|
30
|
-
const roles = sessionuser.getRoles()
|
|
31
|
-
if(!roles){
|
|
32
|
-
return false
|
|
41
|
+
|
|
42
|
+
const roles = sessionuser.getRoles();
|
|
43
|
+
if (!roles) {
|
|
44
|
+
return false;
|
|
33
45
|
}
|
|
34
46
|
const result = requiredRoles.some((role) => roles.includes(role));
|
|
35
47
|
|
|
36
|
-
return result
|
|
48
|
+
return result;
|
|
37
49
|
// return true
|
|
38
50
|
}
|
|
39
|
-
}
|
|
51
|
+
}
|
|
@@ -37,6 +37,7 @@ import {
|
|
|
37
37
|
DefaultHooks,
|
|
38
38
|
MoreProjectionType,
|
|
39
39
|
DeleteResultType,
|
|
40
|
+
WorkflowName,
|
|
40
41
|
} from '../types';
|
|
41
42
|
@Injectable()
|
|
42
43
|
export class SimpleAppService<T extends { _id?: string }> {
|
|
@@ -275,29 +276,30 @@ export class SimpleAppService<T extends { _id?: string }> {
|
|
|
275
276
|
|
|
276
277
|
/**
|
|
277
278
|
* create many from array, for performance reason it submit all item in 1 go, so it won't implement hooks
|
|
278
|
-
* @param appuser
|
|
279
|
-
* @param datas
|
|
279
|
+
* @param appuser
|
|
280
|
+
* @param datas
|
|
280
281
|
*/
|
|
281
|
-
async createMany
|
|
282
|
-
if(Array.isArray(datas)){
|
|
283
|
-
for(let i=0
|
|
284
|
-
const data = datas[i]
|
|
282
|
+
async createMany(appuser: UserContext, datas: T[]) {
|
|
283
|
+
if (Array.isArray(datas)) {
|
|
284
|
+
for (let i = 0; i < datas.length; i++) {
|
|
285
|
+
const data = datas[i];
|
|
285
286
|
let isolationFilter: any = { ...appuser.getCreateFilter() };
|
|
286
287
|
isolationFilter = this.polishIsolationFilter(isolationFilter, data);
|
|
287
|
-
|
|
288
|
+
|
|
288
289
|
Object.assign(data, isolationFilter);
|
|
289
290
|
this.reCalculateValue(data);
|
|
290
291
|
await this.validateData(appuser, data);
|
|
291
|
-
this.applyNestedDateTime(appuser, data, 'create');
|
|
292
|
+
this.applyNestedDateTime(appuser, data, 'create');
|
|
292
293
|
}
|
|
293
|
-
const result = await this.doc.insertMany(datas)
|
|
294
|
-
return result
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
294
|
+
const result = await this.doc.insertMany(datas);
|
|
295
|
+
return result;
|
|
296
|
+
} else {
|
|
297
|
+
throw new BadRequestException(
|
|
298
|
+
this.getDocumentType() + ': create many only support array',
|
|
299
|
+
);
|
|
298
300
|
}
|
|
299
301
|
}
|
|
300
|
-
|
|
302
|
+
|
|
301
303
|
async create(appuser: UserContext, data: T) {
|
|
302
304
|
let result;
|
|
303
305
|
if (!data._id) {
|
|
@@ -353,7 +355,7 @@ export class SimpleAppService<T extends { _id?: string }> {
|
|
|
353
355
|
return result as T;
|
|
354
356
|
} catch (err) {
|
|
355
357
|
throw new InternalServerErrorException(
|
|
356
|
-
`createHook ${this.documentType} error: ${err}`,
|
|
358
|
+
`createHook ${this.documentType} error: ${JSON.stringify(err)}`,
|
|
357
359
|
`${this.documentType} createHook error`,
|
|
358
360
|
);
|
|
359
361
|
}
|
|
@@ -555,11 +557,12 @@ export class SimpleAppService<T extends { _id?: string }> {
|
|
|
555
557
|
try {
|
|
556
558
|
const result = await this.doc.findOneAndReplace(isolationFilter, data, {
|
|
557
559
|
session: dbsession,
|
|
560
|
+
new: true,
|
|
558
561
|
});
|
|
559
562
|
appuser.addUpdatedRecordId(this.documentName, data._id);
|
|
560
563
|
if (this.hooks.afterUpdate)
|
|
561
564
|
await this.hooks.afterUpdate(appuser, id, result);
|
|
562
|
-
return await this.findById(appuser, id);
|
|
565
|
+
return result // await this.findById(appuser, id);
|
|
563
566
|
} catch (err) {
|
|
564
567
|
this.logger.error(err);
|
|
565
568
|
throw new InternalServerErrorException(err.message);
|
|
@@ -605,13 +608,14 @@ export class SimpleAppService<T extends { _id?: string }> {
|
|
|
605
608
|
try {
|
|
606
609
|
const result = await this.doc.findOneAndUpdate(isolationFilter, data, {
|
|
607
610
|
session: dbsession,
|
|
611
|
+
new: true,
|
|
608
612
|
});
|
|
609
613
|
|
|
610
614
|
appuser.addUpdatedRecordId(this.documentName, data._id);
|
|
611
615
|
|
|
612
616
|
if (this.hooks.afterUpdate)
|
|
613
617
|
await this.hooks.afterUpdate(appuser, id, result);
|
|
614
|
-
return await this.findById(appuser, id);
|
|
618
|
+
return result //await this.findById(appuser, id);
|
|
615
619
|
} catch (err) {
|
|
616
620
|
throw new InternalServerErrorException(err.message);
|
|
617
621
|
}
|
|
@@ -718,7 +722,11 @@ export class SimpleAppService<T extends { _id?: string }> {
|
|
|
718
722
|
}
|
|
719
723
|
}
|
|
720
724
|
|
|
721
|
-
startWorkflow(
|
|
725
|
+
startWorkflow(
|
|
726
|
+
appuser: UserContext,
|
|
727
|
+
processName: WorkflowName,
|
|
728
|
+
workflowData: any,
|
|
729
|
+
) {
|
|
722
730
|
return this.eventEmitter.emit(
|
|
723
731
|
'workflow.start',
|
|
724
732
|
appuser,
|
|
@@ -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
|
|
@@ -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,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 { WorkflowConfig } from './workflow.config';
|
|
@@ -33,6 +33,7 @@ import {
|
|
|
33
33
|
} from 'bpmn-server';
|
|
34
34
|
// import { configuration } from './configuration';
|
|
35
35
|
import { UserContext } from '../commons/user.context';
|
|
36
|
+
import { WorkflowName } from '../types';
|
|
36
37
|
//import * as formschemas from '../../workflow/formschema';
|
|
37
38
|
export {
|
|
38
39
|
WorkflowSettingApiSchema,
|
|
@@ -110,7 +111,7 @@ export class WorkflowService {
|
|
|
110
111
|
*/
|
|
111
112
|
async newWorkflowDefinitions(
|
|
112
113
|
appuser: UserContext,
|
|
113
|
-
workflowName:
|
|
114
|
+
workflowName: WorkflowName,
|
|
114
115
|
xml: string,
|
|
115
116
|
) {
|
|
116
117
|
throw new BadRequestException(
|
|
@@ -124,13 +125,19 @@ export class WorkflowService {
|
|
|
124
125
|
);
|
|
125
126
|
}
|
|
126
127
|
|
|
127
|
-
async readWorkflowDefinition(
|
|
128
|
+
async readWorkflowDefinition(
|
|
129
|
+
appuser: UserContext,
|
|
130
|
+
workflowname: WorkflowName,
|
|
131
|
+
) {
|
|
128
132
|
throw new BadRequestException(
|
|
129
133
|
`readWorkflowDefinition is not supported yet`,
|
|
130
134
|
);
|
|
131
135
|
}
|
|
132
136
|
|
|
133
|
-
async deleteWorkflowDefinition(
|
|
137
|
+
async deleteWorkflowDefinition(
|
|
138
|
+
appuser: UserContext,
|
|
139
|
+
workflowname: WorkflowName,
|
|
140
|
+
) {
|
|
134
141
|
throw new BadRequestException(
|
|
135
142
|
`deleteWorkflowDefinition is not supported yet`,
|
|
136
143
|
);
|
|
@@ -138,7 +145,7 @@ export class WorkflowService {
|
|
|
138
145
|
|
|
139
146
|
async updateWorkflowDefinition(
|
|
140
147
|
appuser: UserContext,
|
|
141
|
-
workflowname:
|
|
148
|
+
workflowname: WorkflowName,
|
|
142
149
|
xml: string,
|
|
143
150
|
) {
|
|
144
151
|
throw new BadRequestException(
|
|
@@ -193,21 +200,20 @@ export class WorkflowService {
|
|
|
193
200
|
data: any,
|
|
194
201
|
) {
|
|
195
202
|
try {
|
|
196
|
-
|
|
197
203
|
const response = await this.bpmnServer.engine.invoke(
|
|
198
204
|
{ 'items.id': taskId, 'items.status': 'wait' },
|
|
199
205
|
data,
|
|
200
206
|
appuser.getUid(),
|
|
201
|
-
{appuser:appuser}
|
|
207
|
+
{ appuser: appuser },
|
|
202
208
|
);
|
|
203
209
|
return {
|
|
204
|
-
parentKeys:Object.keys(response),
|
|
205
|
-
parentId:response.id,
|
|
206
|
-
data:response.instance.data,
|
|
210
|
+
parentKeys: Object.keys(response),
|
|
211
|
+
parentId: response.id,
|
|
212
|
+
data: response.instance.data,
|
|
207
213
|
// parentId:response,
|
|
208
|
-
input:response.item.input,
|
|
209
|
-
vars:response.item.vars,
|
|
210
|
-
id:response.item.id,
|
|
214
|
+
input: response.item.input,
|
|
215
|
+
vars: response.item.vars,
|
|
216
|
+
id: response.item.id,
|
|
211
217
|
status: response.item.status,
|
|
212
218
|
};
|
|
213
219
|
} catch (e) {
|
|
@@ -313,12 +319,26 @@ export class WorkflowService {
|
|
|
313
319
|
* @returns workflowsummary
|
|
314
320
|
*/
|
|
315
321
|
@OnEvent('workflow.start')
|
|
316
|
-
async startWorkflow(
|
|
322
|
+
async startWorkflow(
|
|
323
|
+
appuser: UserContext,
|
|
324
|
+
workflowName: WorkflowName,
|
|
325
|
+
data?: any,
|
|
326
|
+
) {
|
|
327
|
+
//run as event, it wont have transaction
|
|
328
|
+
appuser.setDBSession(undefined);
|
|
329
|
+
|
|
330
|
+
if (!data ) data = {}
|
|
331
|
+
|
|
332
|
+
//sometimes data is Mongoose object instead of pure data, need serialize and deserialize to remove that
|
|
333
|
+
data=JSON.parse(JSON.stringify(data))
|
|
334
|
+
|
|
317
335
|
try {
|
|
318
336
|
// console.log('startWorkflow started: ', workflowName);
|
|
337
|
+
|
|
319
338
|
data.tenantId = appuser.getTenantId();
|
|
320
339
|
data.orgId = appuser.getOrgId();
|
|
321
340
|
data.branchId = appuser.getBranchId();
|
|
341
|
+
|
|
322
342
|
const result = await this.bpmnServer.engine.start(
|
|
323
343
|
workflowName,
|
|
324
344
|
data,
|
|
@@ -457,13 +477,12 @@ export class WorkflowService {
|
|
|
457
477
|
const elementProps = event.context.item.element.def;
|
|
458
478
|
// const usertaskinput = event.context.item.input ?? null;
|
|
459
479
|
const data = event.context.instance.data;
|
|
460
|
-
const vars = {}
|
|
461
|
-
Object.assign(vars,event.context.item.input);
|
|
462
|
-
event.context.item.input={}
|
|
480
|
+
const vars = {};
|
|
481
|
+
Object.assign(vars, event.context.item.input);
|
|
482
|
+
event.context.item.input = {};
|
|
463
483
|
const options = event.context.options;
|
|
464
484
|
switch (elementType) {
|
|
465
485
|
case BPMN_TYPE.UserTask:
|
|
466
|
-
|
|
467
486
|
let usertaskeventtype: UserTaskEventType;
|
|
468
487
|
if (eventType == EXECUTION_EVENT.node_start)
|
|
469
488
|
usertaskeventtype = 'start';
|
|
@@ -475,7 +494,7 @@ export class WorkflowService {
|
|
|
475
494
|
usertaskeventtype = 'invoked';
|
|
476
495
|
else if (eventType == EXECUTION_EVENT.node_wait)
|
|
477
496
|
usertaskeventtype = 'wait';
|
|
478
|
-
|
|
497
|
+
// console.log("event-------=================================",eventType,usertaskeventtype)
|
|
479
498
|
if (usertaskeventtype) {
|
|
480
499
|
const props: UserTaskData = {
|
|
481
500
|
workflowName: workflowName,
|
|
@@ -492,9 +511,9 @@ export class WorkflowService {
|
|
|
492
511
|
followUpDate: event.context.item.followUpDate,
|
|
493
512
|
priority: event.context.item.priority,
|
|
494
513
|
formKey: elementProps.formKey,
|
|
495
|
-
},
|
|
514
|
+
},
|
|
496
515
|
data: data,
|
|
497
|
-
vars:vars,
|
|
516
|
+
vars: vars,
|
|
498
517
|
options: options,
|
|
499
518
|
};
|
|
500
519
|
this.eventEmitter.emit(
|
|
@@ -518,7 +537,7 @@ export class WorkflowService {
|
|
|
518
537
|
elementId: elementId,
|
|
519
538
|
elementName: elementName,
|
|
520
539
|
data: data,
|
|
521
|
-
vars:vars,
|
|
540
|
+
vars: vars,
|
|
522
541
|
options: options,
|
|
523
542
|
};
|
|
524
543
|
this.eventEmitter.emit(
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
graphql resolver
|
|
@@ -13,6 +13,7 @@ import { AuditTrail } from './generate/commons/audittrail.service';
|
|
|
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
|
<%}%>
|
|
@@ -45,12 +46,18 @@ import { <%=capitalizeFirstLetter(bpmn)%>ListenerService } from 'src/simpleapp/w
|
|
|
45
46
|
],
|
|
46
47
|
controllers: [<% for(let i=0;i<it.modules.length; i++){ %><%= it.modules[i].docname %>Controller,<%}%> ProfileController,WorkflowController],
|
|
47
48
|
providers: [
|
|
48
|
-
AuditTrail,DocNumberFormatGenerator,<% for(let i=0;i<it.modules.length; i++){
|
|
49
|
+
AuditTrail,DocNumberFormatGenerator,<% for(let i=0;i<it.modules.length; i++){ %>
|
|
50
|
+
<%= it.modules[i].docname %>Service,
|
|
51
|
+
<%= it.modules[i].docname %>Resolver,
|
|
52
|
+
<%}%> ProfileService,WorkflowDelegate,WorkflowConfig,WorkflowService,WorkflowUserService,
|
|
49
53
|
<%for(let i=0; i<it.allbpmn.length;i++){%>
|
|
50
54
|
<%let bpmn = it.allbpmn[i]%>
|
|
51
55
|
<%=capitalizeFirstLetter(bpmn)%>ListenerService,
|
|
52
56
|
<%}%>
|
|
53
57
|
],
|
|
54
|
-
exports:[AuditTrail,DocNumberFormatGenerator,<% for(let i=0;i<it.modules.length; i++){
|
|
58
|
+
exports:[AuditTrail,DocNumberFormatGenerator,<% for(let i=0;i<it.modules.length; i++){ %>
|
|
59
|
+
<%= it.modules[i].docname %>Service,
|
|
60
|
+
<%= it.modules[i].docname %>Resolver,
|
|
61
|
+
<%}%> ProfileService,WorkflowDelegate,WorkflowConfig,WorkflowService,WorkflowUserService,]
|
|
55
62
|
})
|
|
56
63
|
export class GenerateModule {}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<NuxtLayout :name="getLayout()">
|
|
3
3
|
<SessionBlock/>
|
|
4
|
+
<OverlayHoldscreen/>
|
|
4
5
|
<EventDocumentViewer></EventDocumentViewer>
|
|
5
6
|
<EventDecision/>
|
|
6
7
|
<EventNotification/>
|
|
@@ -12,13 +13,15 @@
|
|
|
12
13
|
/**
|
|
13
14
|
* This file was automatically generated by simpleapp generator. Every
|
|
14
15
|
* MODIFICATION OVERRIDE BY GENERATEOR
|
|
15
|
-
* last change
|
|
16
|
+
* last change 2024-03-17
|
|
16
17
|
* Author: Ks Tan
|
|
17
18
|
*/
|
|
19
|
+
|
|
18
20
|
watch(()=>useRoute().params['xorg'],async (newval,oldvalue)=>{
|
|
19
21
|
await reloadUserStore()
|
|
20
22
|
if(getPathPara('xorg','')!=''){
|
|
21
23
|
if(!getUserProfile()?.currentGroup) goTo('pickgroup')
|
|
24
|
+
setGraphqlServer()
|
|
22
25
|
}
|
|
23
26
|
})
|
|
24
27
|
|
|
@@ -35,6 +38,10 @@ const getLayout = ()=>{
|
|
|
35
38
|
onMounted(()=>{
|
|
36
39
|
const currentgroup = useCookie('currentGroup').value
|
|
37
40
|
//if no xorg, no enforce pick group
|
|
38
|
-
if(getCurrentXorg()
|
|
41
|
+
if(getCurrentXorg()){
|
|
42
|
+
if (!currentgroup)goTo('pickgroup')
|
|
43
|
+
setGraphqlServer()
|
|
44
|
+
}
|
|
45
|
+
|
|
39
46
|
})
|
|
40
47
|
</script>
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
<div class="text-right"><slot name="end"></slot></div>
|
|
1
|
+
<template>
|
|
2
|
+
<div
|
|
3
|
+
v-bind="$attrs"
|
|
4
|
+
class="w-full bg-gray-800 dark:bg-gray-800 z-20 justify justify-between absolute h h-14 flex flex-row place-items-center opacity-90 dark:text-white text-white"
|
|
5
|
+
>
|
|
6
|
+
<div class="text-left "><slot name="start"></slot></div>
|
|
7
|
+
<div class="flex-1 text-center line-clamp-2">
|
|
8
|
+
<slot name="center"></slot>
|
|
10
9
|
</div>
|
|
11
|
-
<div class="
|
|
12
|
-
|
|
10
|
+
<div class="text-right"><slot name="end"></slot></div>
|
|
11
|
+
</div>
|
|
12
|
+
<div class="h-14"></div>
|
|
13
13
|
</template>
|
|
14
14
|
<script setup lang="ts">
|
|
15
15
|
/**
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<Dialog modal v-model:visible="visible" :closable="false"
|
|
3
|
+
:pt="{
|
|
4
|
+
root:{class:'w-auto'},
|
|
5
|
+
}">
|
|
6
|
+
<div class=" items-center justify-center flex flex-col ">
|
|
7
|
+
<ProgressSpinner />
|
|
8
|
+
</div>
|
|
9
|
+
|
|
10
|
+
</Dialog>
|
|
11
|
+
</template>
|
|
12
|
+
<script lang="ts" setup>
|
|
13
|
+
/**
|
|
14
|
+
* This file was automatically generated by simpleapp generator.
|
|
15
|
+
* --remove-this-line-to-prevent-override--
|
|
16
|
+
* last change 2024-03-13
|
|
17
|
+
* Author: Ks Tan
|
|
18
|
+
*/
|
|
19
|
+
const visible = ref(false)
|
|
20
|
+
onMounted(()=>{
|
|
21
|
+
|
|
22
|
+
useNuxtApp().$listen('HoldScreen',(ishold)=>{
|
|
23
|
+
visible.value=ishold
|
|
24
|
+
})
|
|
25
|
+
})
|
|
26
|
+
</script>
|
|
@@ -14,14 +14,14 @@
|
|
|
14
14
|
/**
|
|
15
15
|
* This file was automatically generated by simpleapp generator during initialization.
|
|
16
16
|
* DONT CHANGE THIS FILE CAUSE IT OVERRIDE
|
|
17
|
-
* last change 2024-
|
|
17
|
+
* last change 2024-04-14
|
|
18
18
|
* author: Ks Tan
|
|
19
19
|
*/
|
|
20
|
-
import { ForeignKey, FormCrudEvent } from "~/types";
|
|
20
|
+
import { ForeignKey, FormCrudEvent, SimpleAppDocumentType } from "~/types";
|
|
21
21
|
|
|
22
|
-
type SettingProp = { collection:
|
|
22
|
+
type SettingProp = { collection: SimpleAppDocumentType; displayField?: string };
|
|
23
23
|
const modelValue = defineModel<ForeignKey>();
|
|
24
|
-
const emits = defineEmits([
|
|
24
|
+
const emits = defineEmits(["after"]);
|
|
25
25
|
const props = defineProps<{ setting: SettingProp }>();
|
|
26
26
|
const displayText = computed(() => {
|
|
27
27
|
const s = props.setting;
|
|
@@ -44,9 +44,9 @@ const viewRecord = () => {
|
|
|
44
44
|
documentName: props.setting.collection,
|
|
45
45
|
viewer: viewer.value,
|
|
46
46
|
readonly: true,
|
|
47
|
-
after: async(actionName:FormCrudEvent,data)=>{
|
|
48
|
-
emits(
|
|
49
|
-
}
|
|
47
|
+
after: async (actionName: FormCrudEvent, data) => {
|
|
48
|
+
emits("after", actionName, data);
|
|
49
|
+
},
|
|
50
50
|
});
|
|
51
51
|
};
|
|
52
52
|
</script>
|
|
@@ -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>
|