vona-cli-set-api 1.1.143 → 1.1.144

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.
@@ -10,7 +10,9 @@ import { Arg, Controller, Web } from 'vona-module-a-web';
10
10
 
11
11
  import type { Model<%=argv.resourceNameCapitalize%> } from '../model/<%=argv.resourceName%>.ts';
12
12
 
13
+ import { $locale } from '../.metadata/locales.ts';
13
14
  import { Dto<%=argv.resourceNameCapitalize%>Create } from '../dto/<%=argv.resourceName%>Create.tsx';
15
+ import { Dto<%=argv.resourceNameCapitalize%>DeleteBulk } from '../dto/<%=argv.resourceName%>DeleteBulk.tsx';
14
16
  import { Dto<%=argv.resourceNameCapitalize%>SelectReq } from '../dto/<%=argv.resourceName%>SelectReq.tsx';
15
17
  import { Dto<%=argv.resourceNameCapitalize%>SelectRes } from '../dto/<%=argv.resourceName%>SelectRes.tsx';
16
18
  import { Dto<%=argv.resourceNameCapitalize%>Update } from '../dto/<%=argv.resourceName%>Update.tsx';
@@ -18,38 +20,47 @@ import { Dto<%=argv.resourceNameCapitalize%>View } from '../dto/<%=argv.resource
18
20
 
19
21
  export interface IControllerOptions<%=argv.resourceNameCapitalize%> extends IDecoratorControllerOptions {}
20
22
 
21
- @Controller<IControllerOptions<%=argv.resourceNameCapitalize%>>('<%=argv.resourceName%>')
23
+ @Controller<IControllerOptions<%=argv.resourceNameCapitalize%>>('<%=argv.resourceName%>', {
24
+ summary: $locale('<%=argv.resourceNameCapitalize%>Controller'),
25
+ })
22
26
  @Resource()
23
27
  export class Controller<%=argv.resourceNameCapitalize%> extends BeanBase {
24
- @Web.post()
28
+ @Web.post('', { summary: $locale('<%=argv.resourceNameCapitalize%>Create') })
25
29
  @Api.body(v.tableIdentity())
26
30
  @Passport.systemAdmin()
27
31
  async create(@Arg.body() <%=argv.resourceName%>: Dto<%=argv.resourceNameCapitalize%>Create): Promise<TableIdentity> {
28
32
  return (await this.scope.service.<%=argv.resourceName%>.create(<%=argv.resourceName%>)).id;
29
33
  }
30
34
 
31
- @Web.get()
35
+ @Web.get('', { summary: $locale('<%=argv.resourceNameCapitalize%>Select') })
32
36
  @Api.body(Dto<%=argv.resourceNameCapitalize%>SelectRes)
33
37
  @Passport.systemAdmin()
34
38
  async select(@Arg.filter(Dto<%=argv.resourceNameCapitalize%>SelectReq) params: IQueryParams<Model<%=argv.resourceNameCapitalize%>>): Promise<Dto<%=argv.resourceNameCapitalize%>SelectRes> {
35
39
  return await this.scope.service.<%=argv.resourceName%>.select(params);
36
40
  }
37
41
 
38
- @Web.get(':id')
42
+ @Web.get(':id', { summary: $locale('<%=argv.resourceNameCapitalize%>View') })
39
43
  @Api.body(v.optional(), v.object(Dto<%=argv.resourceNameCapitalize%>View))
40
44
  @Passport.systemAdmin()
41
45
  async view(@Arg.param('id', v.tableIdentity()) id: TableIdentity): Promise<Dto<%=argv.resourceNameCapitalize%>View | undefined> {
42
46
  return await this.scope.service.<%=argv.resourceName%>.view(id);
43
47
  }
44
48
 
45
- @Web.patch(':id')
49
+ @Web.patch(':id', { summary: $locale('<%=argv.resourceNameCapitalize%>Update') })
46
50
  @Api.body(z.null())
47
51
  @Passport.systemAdmin()
48
52
  async update(@Arg.param('id', v.tableIdentity()) id: TableIdentity, @Arg.body() <%=argv.resourceName%>: Dto<%=argv.resourceNameCapitalize%>Update): Promise<void> {
49
53
  await this.scope.service.<%=argv.resourceName%>.update(id, <%=argv.resourceName%>);
50
54
  }
51
55
 
52
- @Web.delete(':id')
56
+ @Web.post('bulk/delete', { summary: $locale('BulkDelete') })
57
+ @Api.body(z.null())
58
+ @Passport.systemAdmin()
59
+ async deleteBulk(@Arg.body() command: Dto<%=argv.resourceNameCapitalize%>DeleteBulk): Promise<void> {
60
+ await this.scope.service.<%=argv.resourceName%>.deleteBulk(command.ids);
61
+ }
62
+
63
+ @Web.delete(':id', { summary: $locale('<%=argv.resourceNameCapitalize%>Delete') })
53
64
  @Api.body(z.null())
54
65
  @Passport.systemAdmin()
55
66
  async delete(@Arg.param('id', v.tableIdentity()) id: TableIdentity): Promise<void> {
@@ -0,0 +1,14 @@
1
+ import type { TableIdentity } from 'table-identity';
2
+ import type { IDecoratorDtoOptions } from 'vona-module-a-web';
3
+
4
+ import { Api, v } from 'vona-module-a-openapiutils';
5
+ import { Dto } from 'vona-module-a-web';
6
+ import { z } from 'zod';
7
+
8
+ export interface IDtoOptions<%=argv.resourceNameCapitalize%>DeleteBulk extends IDecoratorDtoOptions {}
9
+
10
+ @Dto<IDtoOptions<%=argv.resourceNameCapitalize%>DeleteBulk>()
11
+ export class Dto<%=argv.resourceNameCapitalize%>DeleteBulk {
12
+ @Api.field(v.required(), z.array(v.tableIdentity()()).min(1).max(100))
13
+ ids: TableIdentity[];
14
+ }
@@ -38,7 +38,13 @@ export interface IDtoOptions<%=argv.resourceNameCapitalize%>SelectResItem extend
38
38
  ],
39
39
  }),
40
40
  ZovaRender.block('basic-page:blockToolbarBulk', {
41
- actions: [ZovaRender.tableActionBulk('basic-table:actionCreate')],
41
+ actions: [
42
+ ZovaRender.tableActionBulk('basic-table:actionCreate'),
43
+ ZovaRender.tableActionBulk('basic-table:actionDeleteBulk', {
44
+ requiresSelection: true,
45
+ selectedMaxIds: 100,
46
+ }),
47
+ ],
42
48
  }),
43
49
  ZovaRender.block('basic-page:blockTable'),
44
50
  ZovaRender.block('basic-page:blockPager'),
@@ -3,6 +3,7 @@ import type { IQueryParams } from 'vona-module-a-orm';
3
3
 
4
4
  import { BeanBase } from 'vona';
5
5
  import { Service } from 'vona-module-a-bean';
6
+ import { Core } from 'vona-module-a-core';
6
7
 
7
8
  import type { Dto<%=argv.resourceNameCapitalize%>Create } from '../dto/<%=argv.resourceName%>Create.tsx';
8
9
  import type { Dto<%=argv.resourceNameCapitalize%>SelectRes } from '../dto/<%=argv.resourceName%>SelectRes.tsx';
@@ -32,4 +33,9 @@ export class Service<%=argv.resourceNameCapitalize%> extends BeanBase {
32
33
  async delete(id: TableIdentity) {
33
34
  return await this.scope.model.<%=argv.resourceName%>.deleteById(id);
34
35
  }
36
+
37
+ @Core.transaction()
38
+ async deleteBulk(ids: TableIdentity[]): Promise<void> {
39
+ await this.scope.model.<%=argv.resourceName%>.deleteBulk(ids);
40
+ }
35
41
  }
@@ -9,6 +9,7 @@ const __resources = {
9
9
  Name: 'Name',
10
10
  Description: 'Description',
11
11
  Operations: 'Operations',
12
+ BulkDelete: 'Bulk Delete',
12
13
  };
13
14
 
14
15
  declare module '@cabloy/cli' {
@@ -30,6 +31,16 @@ export default metadataCustomSnippet({
30
31
  return fs.readFileSync(targetFile).toString('utf8');
31
32
  },
32
33
  async transform({ ast, argv }) {
33
- return locale_transform({ ast, argv, resources: __resources });
34
+ const resource = argv.resourceNameCapitalize;
35
+ const resources = {
36
+ ...__resources,
37
+ [`${resource}Controller`]: `${resource} Management`,
38
+ [`${resource}Create`]: `Create ${resource}`,
39
+ [`${resource}Select`]: `Query ${resource} List`,
40
+ [`${resource}View`]: `View ${resource}`,
41
+ [`${resource}Update`]: `Update ${resource}`,
42
+ [`${resource}Delete`]: `Delete ${resource}`,
43
+ };
44
+ return locale_transform({ ast, argv, resources });
34
45
  },
35
46
  });
@@ -7,12 +7,23 @@ const __resources = {
7
7
  Name: '名称',
8
8
  Description: '描述',
9
9
  Operations: '操作',
10
+ BulkDelete: '批量删除',
10
11
  };
11
12
 
12
13
  export default metadataCustomSnippet({
13
14
  file: 'src/config/locale/zh-cn.ts',
14
15
  language: 'plain',
15
16
  async transform({ ast, argv }) {
16
- return locale_transform({ ast, argv, resources: __resources });
17
+ const resource = argv.resourceNameCapitalize;
18
+ const resources = {
19
+ ...__resources,
20
+ [`${resource}Controller`]: `${resource}管理`,
21
+ [`${resource}Create`]: `创建${resource}`,
22
+ [`${resource}Select`]: `查询${resource}列表`,
23
+ [`${resource}View`]: `查看${resource}`,
24
+ [`${resource}Update`]: `更新${resource}`,
25
+ [`${resource}Delete`]: `删除${resource}`,
26
+ };
27
+ return locale_transform({ ast, argv, resources });
17
28
  },
18
29
  });
@@ -12,6 +12,7 @@ import type { Model<%=argv.resourceNameCapitalize%> } from '../model/<%=argv.res
12
12
 
13
13
  import { $locale } from '../.metadata/locales.ts';
14
14
  import { Dto<%=argv.resourceNameCapitalize%>Create } from '../dto/<%=argv.resourceName%>Create.tsx';
15
+ import { Dto<%=argv.resourceNameCapitalize%>DeleteBulk } from '../dto/<%=argv.resourceName%>DeleteBulk.tsx';
15
16
  import { Dto<%=argv.resourceNameCapitalize%>SelectReq } from '../dto/<%=argv.resourceName%>SelectReq.tsx';
16
17
  import { Dto<%=argv.resourceNameCapitalize%>SelectRes } from '../dto/<%=argv.resourceName%>SelectRes.tsx';
17
18
  import { Dto<%=argv.resourceNameCapitalize%>Update } from '../dto/<%=argv.resourceName%>Update.tsx';
@@ -52,6 +53,13 @@ export class Controller<%=argv.resourceNameCapitalize%> extends BeanBase {
52
53
  await this.scope.service.<%=argv.resourceName%>.update(id, <%=argv.resourceName%>);
53
54
  }
54
55
 
56
+ @Web.post('bulk/delete', { summary: $locale('BulkDelete') })
57
+ @Api.body(z.null())
58
+ @Passport.rbac()
59
+ async deleteBulk(@Arg.body() command: Dto<%=argv.resourceNameCapitalize%>DeleteBulk): Promise<void> {
60
+ await this.scope.service.<%=argv.resourceName%>.deleteBulk(command.ids);
61
+ }
62
+
55
63
  @Web.delete(':id', { summary: $locale('<%=argv.resourceNameCapitalize%>Delete') })
56
64
  @Api.body(z.null())
57
65
  @Passport.rbac()
@@ -0,0 +1,14 @@
1
+ import type { TableIdentity } from 'table-identity';
2
+ import type { IDecoratorDtoOptions } from 'vona-module-a-web';
3
+
4
+ import { Api, v } from 'vona-module-a-openapiutils';
5
+ import { Dto } from 'vona-module-a-web';
6
+ import { z } from 'zod';
7
+
8
+ export interface IDtoOptions<%=argv.resourceNameCapitalize%>DeleteBulk extends IDecoratorDtoOptions {}
9
+
10
+ @Dto<IDtoOptions<%=argv.resourceNameCapitalize%>DeleteBulk>()
11
+ export class Dto<%=argv.resourceNameCapitalize%>DeleteBulk {
12
+ @Api.field(v.required(), z.array(v.tableIdentity()()).min(1).max(100))
13
+ ids: TableIdentity[];
14
+ }
@@ -38,7 +38,13 @@ export interface IDtoOptions<%=argv.resourceNameCapitalize%>SelectResItem extend
38
38
  ],
39
39
  }),
40
40
  ZovaRender.block('start-page:blockToolbarBulk', {
41
- actions: [ZovaRender.tableActionBulk('start-table:actionCreate')],
41
+ actions: [
42
+ ZovaRender.tableActionBulk('start-table:actionCreate'),
43
+ ZovaRender.tableActionBulk('start-table:actionDeleteBulk', {
44
+ requiresSelection: true,
45
+ selectedMaxIds: 100,
46
+ }),
47
+ ],
42
48
  }),
43
49
  ZovaRender.block('start-page:blockTable'),
44
50
  ],
@@ -3,6 +3,7 @@ import type { IQueryParams } from 'vona-module-a-orm';
3
3
 
4
4
  import { BeanBase } from 'vona';
5
5
  import { Service } from 'vona-module-a-bean';
6
+ import { Core } from 'vona-module-a-core';
6
7
 
7
8
  import type { Dto<%=argv.resourceNameCapitalize%>Create } from '../dto/<%=argv.resourceName%>Create.tsx';
8
9
  import type { Dto<%=argv.resourceNameCapitalize%>SelectRes } from '../dto/<%=argv.resourceName%>SelectRes.tsx';
@@ -32,4 +33,9 @@ export class Service<%=argv.resourceNameCapitalize%> extends BeanBase {
32
33
  async delete(id: TableIdentity) {
33
34
  return await this.scope.model.<%=argv.resourceName%>.deleteById(id);
34
35
  }
36
+
37
+ @Core.transaction()
38
+ async deleteBulk(ids: TableIdentity[]): Promise<void> {
39
+ await this.scope.model.<%=argv.resourceName%>.deleteBulk(ids);
40
+ }
35
41
  }
@@ -9,6 +9,7 @@ const __resources = {
9
9
  Name: 'Name',
10
10
  Description: 'Description',
11
11
  Operations: 'Operations',
12
+ BulkDelete: 'Bulk Delete',
12
13
  };
13
14
 
14
15
  declare module '@cabloy/cli' {
@@ -7,6 +7,7 @@ const __resources = {
7
7
  Name: '名称',
8
8
  Description: '描述',
9
9
  Operations: '操作',
10
+ BulkDelete: '批量删除',
10
11
  };
11
12
 
12
13
  export default metadataCustomSnippet({
@@ -7,6 +7,7 @@ const __resources = {
7
7
  Name: 'Name',
8
8
  Description: 'Description',
9
9
  Operations: 'Operations',
10
+ BulkDelete: 'Bulk Delete',
10
11
  };
11
12
  export default metadataCustomSnippet({
12
13
  file: 'src/config/locale/en-us.ts',
@@ -20,6 +21,16 @@ export default metadataCustomSnippet({
20
21
  return fs.readFileSync(targetFile).toString('utf8');
21
22
  },
22
23
  async transform({ ast, argv }) {
23
- return locale_transform({ ast, argv, resources: __resources });
24
+ const resource = argv.resourceNameCapitalize;
25
+ const resources = {
26
+ ...__resources,
27
+ [`${resource}Controller`]: `${resource} Management`,
28
+ [`${resource}Create`]: `Create ${resource}`,
29
+ [`${resource}Select`]: `Query ${resource} List`,
30
+ [`${resource}View`]: `View ${resource}`,
31
+ [`${resource}Update`]: `Update ${resource}`,
32
+ [`${resource}Delete`]: `Delete ${resource}`,
33
+ };
34
+ return locale_transform({ ast, argv, resources });
24
35
  },
25
36
  });
@@ -5,11 +5,22 @@ const __resources = {
5
5
  Name: '名称',
6
6
  Description: '描述',
7
7
  Operations: '操作',
8
+ BulkDelete: '批量删除',
8
9
  };
9
10
  export default metadataCustomSnippet({
10
11
  file: 'src/config/locale/zh-cn.ts',
11
12
  language: 'plain',
12
13
  async transform({ ast, argv }) {
13
- return locale_transform({ ast, argv, resources: __resources });
14
+ const resource = argv.resourceNameCapitalize;
15
+ const resources = {
16
+ ...__resources,
17
+ [`${resource}Controller`]: `${resource}管理`,
18
+ [`${resource}Create`]: `创建${resource}`,
19
+ [`${resource}Select`]: `查询${resource}列表`,
20
+ [`${resource}View`]: `查看${resource}`,
21
+ [`${resource}Update`]: `更新${resource}`,
22
+ [`${resource}Delete`]: `删除${resource}`,
23
+ };
24
+ return locale_transform({ ast, argv, resources });
14
25
  },
15
26
  });
@@ -7,6 +7,7 @@ const __resources = {
7
7
  Name: 'Name',
8
8
  Description: 'Description',
9
9
  Operations: 'Operations',
10
+ BulkDelete: 'Bulk Delete',
10
11
  };
11
12
  export default metadataCustomSnippet({
12
13
  file: 'src/config/locale/en-us.ts',
@@ -5,6 +5,7 @@ const __resources = {
5
5
  Name: '名称',
6
6
  Description: '描述',
7
7
  Operations: '操作',
8
+ BulkDelete: '批量删除',
8
9
  };
9
10
  export default metadataCustomSnippet({
10
11
  file: 'src/config/locale/zh-cn.ts',
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "vona-cli-set-api",
3
- "version": "1.1.143",
4
- "gitHead": "0d57ea1f23db8ecbdbdac13913fdbef3436b8478",
3
+ "version": "1.1.144",
4
+ "gitHead": "8ecb407bf2c0bb2e28592206ca1a39f37ab50902",
5
5
  "description": "vona cli-set-api",
6
6
  "keywords": [
7
7
  "framework",