moyan-mfw-extension-document 1.1.10-beta.27

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.
Files changed (80) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +89 -0
  3. package/database/migrations/20260623000000-document.ts +68 -0
  4. package/package.json +94 -0
  5. package/src/backend/dist/api-response.d.ts +12 -0
  6. package/src/backend/dist/api-response.d.ts.map +1 -0
  7. package/src/backend/dist/api-response.js +10 -0
  8. package/src/backend/dist/api-response.js.map +1 -0
  9. package/src/backend/dist/controller/document-pub.controller.d.ts +21 -0
  10. package/src/backend/dist/controller/document-pub.controller.d.ts.map +1 -0
  11. package/src/backend/dist/controller/document-pub.controller.js +73 -0
  12. package/src/backend/dist/controller/document-pub.controller.js.map +1 -0
  13. package/src/backend/dist/controller/document.controller.d.ts +68 -0
  14. package/src/backend/dist/controller/document.controller.d.ts.map +1 -0
  15. package/src/backend/dist/controller/document.controller.js +204 -0
  16. package/src/backend/dist/controller/document.controller.js.map +1 -0
  17. package/src/backend/dist/document.module.d.ts +7 -0
  18. package/src/backend/dist/document.module.d.ts.map +1 -0
  19. package/src/backend/dist/document.module.js +37 -0
  20. package/src/backend/dist/document.module.js.map +1 -0
  21. package/src/backend/dist/dto/document.dto.d.ts +71 -0
  22. package/src/backend/dist/dto/document.dto.d.ts.map +1 -0
  23. package/src/backend/dist/dto/document.dto.js +365 -0
  24. package/src/backend/dist/dto/document.dto.js.map +1 -0
  25. package/src/backend/dist/dto/index.d.ts +3 -0
  26. package/src/backend/dist/dto/index.d.ts.map +1 -0
  27. package/src/backend/dist/dto/index.js +19 -0
  28. package/src/backend/dist/dto/index.js.map +1 -0
  29. package/src/backend/dist/dto/res/document-response.dto.d.ts +40 -0
  30. package/src/backend/dist/dto/res/document-response.dto.d.ts.map +1 -0
  31. package/src/backend/dist/dto/res/document-response.dto.js +166 -0
  32. package/src/backend/dist/dto/res/document-response.dto.js.map +1 -0
  33. package/src/backend/dist/entities/document-ext.entity.d.ts +16 -0
  34. package/src/backend/dist/entities/document-ext.entity.d.ts.map +1 -0
  35. package/src/backend/dist/entities/document-ext.entity.js +58 -0
  36. package/src/backend/dist/entities/document-ext.entity.js.map +1 -0
  37. package/src/backend/dist/entities/document.entity.d.ts +32 -0
  38. package/src/backend/dist/entities/document.entity.d.ts.map +1 -0
  39. package/src/backend/dist/entities/document.entity.js +148 -0
  40. package/src/backend/dist/entities/document.entity.js.map +1 -0
  41. package/src/backend/dist/index.d.ts +11 -0
  42. package/src/backend/dist/index.d.ts.map +1 -0
  43. package/src/backend/dist/index.js +30 -0
  44. package/src/backend/dist/index.js.map +1 -0
  45. package/src/backend/dist/service/document-ext.service.d.ts +22 -0
  46. package/src/backend/dist/service/document-ext.service.d.ts.map +1 -0
  47. package/src/backend/dist/service/document-ext.service.js +77 -0
  48. package/src/backend/dist/service/document-ext.service.js.map +1 -0
  49. package/src/backend/dist/service/document.service.d.ts +42 -0
  50. package/src/backend/dist/service/document.service.d.ts.map +1 -0
  51. package/src/backend/dist/service/document.service.js +257 -0
  52. package/src/backend/dist/service/document.service.js.map +1 -0
  53. package/src/frontend/dist/components/document-manager/DocumentDetail.vue.d.ts +19 -0
  54. package/src/frontend/dist/components/document-manager/DocumentDetail.vue.d.ts.map +1 -0
  55. package/src/frontend/dist/components/document-manager/DocumentForm.vue.d.ts +28 -0
  56. package/src/frontend/dist/components/document-manager/DocumentForm.vue.d.ts.map +1 -0
  57. package/src/frontend/dist/components/document-manager/api.d.ts +85 -0
  58. package/src/frontend/dist/components/document-manager/api.d.ts.map +1 -0
  59. package/src/frontend/dist/components/document-manager/index.vue.d.ts +34 -0
  60. package/src/frontend/dist/components/document-manager/index.vue.d.ts.map +1 -0
  61. package/src/frontend/dist/components/document-manager/mod.d.ts +6 -0
  62. package/src/frontend/dist/components/document-manager/mod.d.ts.map +1 -0
  63. package/src/frontend/dist/components/document-manager/types.d.ts +178 -0
  64. package/src/frontend/dist/components/document-manager/types.d.ts.map +1 -0
  65. package/src/frontend/dist/index.d.ts +6 -0
  66. package/src/frontend/dist/index.d.ts.map +1 -0
  67. package/src/frontend/dist/index.mjs +615 -0
  68. package/src/frontend/dist/style.css +1 -0
  69. package/src/shared/dist/constants.d.ts +40 -0
  70. package/src/shared/dist/constants.d.ts.map +1 -0
  71. package/src/shared/dist/constants.js +46 -0
  72. package/src/shared/dist/constants.js.map +1 -0
  73. package/src/shared/dist/index.d.ts +7 -0
  74. package/src/shared/dist/index.d.ts.map +1 -0
  75. package/src/shared/dist/index.js +13 -0
  76. package/src/shared/dist/index.js.map +1 -0
  77. package/src/shared/dist/permission-values.d.ts +15 -0
  78. package/src/shared/dist/permission-values.d.ts.map +1 -0
  79. package/src/shared/dist/permission-values.js +20 -0
  80. package/src/shared/dist/permission-values.js.map +1 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Moyan
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,89 @@
1
+ # moyan-mfw-extension-document
2
+
3
+ MFW 通用文档管理扩展包,提供前后端统一的文档管理能力。后端基于 `simple-document` 重新设计,核心改动是引入 **EAV 扩展表**(取代原 `expand: any` JSON blob),业务方可按 `docKey`(文档类型)约定一组 `extKey`,为不同文档类型挂载任意自定义字段,无需改 schema。
4
+
5
+ ## 功能
6
+
7
+ - 通用文档主表 `mfw_document`(精简 + 统计字段),支持图文/视频
8
+ - **EAV 扩展表 `mfw_document_ext`**:键值结构挂载自定义字段(本次重新设计核心)
9
+ - 提供 4 个高内聚、开箱即用的前端组件(无路由页面):
10
+ - `MfwDocumentForm` 文档表单/编辑器(内嵌富文本编辑器)
11
+ - `MfwDocumentList` 文档列表
12
+ - `MfwDocumentDetail` 文档详情/预览
13
+ - `MfwDocumentGroupSelect` 分组/分类选择器
14
+ - 提供后端 CRUD / 分页 / 公开接口 / 统计计数 / EAV 字段读写接口
15
+ - 基于 RBAC 权限控制
16
+
17
+ ## 安装
18
+
19
+ ```bash
20
+ npm install moyan-mfw-extension-document
21
+ ```
22
+
23
+ ## 使用
24
+
25
+ ### 后端
26
+
27
+ 在业务 `backend/src/app.modules.ts` 中引入:
28
+
29
+ ```typescript
30
+ import { DocumentModule } from 'moyan-mfw-extension-document/backend';
31
+
32
+ @Module({
33
+ imports: [DocumentModule],
34
+ })
35
+ export class AppModule {}
36
+ ```
37
+
38
+ 在业务 `backend/src/main.ts` 中收集权限标签:
39
+
40
+ ```typescript
41
+ import { DOCUMENT_PERMISSION_VALUES } from 'moyan-mfw-extension-document/backend';
42
+
43
+ createBaseBackendApp({
44
+ permissionValues: [...DOCUMENT_PERMISSION_VALUES],
45
+ // ...
46
+ });
47
+ ```
48
+
49
+ 模块自动注册路由前缀 `ext/document`。
50
+
51
+ ### 前端
52
+
53
+ ```typescript
54
+ import {
55
+ MfwDocumentForm,
56
+ MfwDocumentList,
57
+ MfwDocumentDetail,
58
+ MfwDocumentGroupSelect,
59
+ } from 'moyan-mfw-extension-document/frontend';
60
+ import { DocumentType, ExtValueType } from 'moyan-mfw-extension-document/shared';
61
+ ```
62
+
63
+ 组件内部直连 `/api/ext/document/*`,封装加载/提交/分页/删除逻辑,通过 `expose` 暴露控制方法,开箱即用。
64
+
65
+ ### 共享
66
+
67
+ ```typescript
68
+ import {
69
+ DocumentType,
70
+ DocumentStatus,
71
+ ExtValueType,
72
+ DOCUMENT_PERMISSION_VALUES,
73
+ } from 'moyan-mfw-extension-document/shared';
74
+ ```
75
+
76
+ ## EAV 扩展表设计
77
+
78
+ `mfw_document_ext` 采用 EAV(Entity-Attribute-Value)键值结构:
79
+
80
+ | 列 | 类型 | 说明 |
81
+ |---|---|---|
82
+ | `id` | bigint PK | 主键 |
83
+ | `document_id` | bigint | 外键→`mfw_document.id` |
84
+ | `ext_key` | varchar(128) | 属性键 |
85
+ | `ext_value` | json | 属性值 `{ data: any }` |
86
+ | `value_type` | varchar(16) | 值类型(string/number/boolean/json) |
87
+ | `description` | varchar(256) | 描述 |
88
+
89
+ 业务方按 `docKey`(文档类型)约定一组 `extKey`,在前端 `MfwDocumentForm` 通过 `extFields` 配置驱动渲染,即可为不同文档类型挂载任意自定义字段。
@@ -0,0 +1,68 @@
1
+ /**
2
+ * @fileoverview 文档管理表迁移
3
+ * @description 创建 mfw_document 主表与 mfw_document_ext EAV 扩展表
4
+ */
5
+
6
+ import { MigrationInterface, QueryRunner } from 'typeorm';
7
+
8
+ export class Document20260623000000 implements MigrationInterface {
9
+ name = 'Document20260623000000';
10
+
11
+ public async up(queryRunner: QueryRunner): Promise<void> {
12
+ await queryRunner.query(`
13
+ CREATE TABLE \`mfw_document\` (
14
+ \`id\` bigint NOT NULL AUTO_INCREMENT,
15
+ \`app_id\` bigint DEFAULT NULL COMMENT '应用 ID,NULL 表示全局',
16
+ \`doc_key\` varchar(64) NOT NULL COMMENT '文档类型标识',
17
+ \`only_key\` varchar(64) NOT NULL COMMENT '唯一业务键',
18
+ \`doc_group\` varchar(64) DEFAULT NULL COMMENT '文档分组',
19
+ \`title\` varchar(256) NOT NULL COMMENT '标题',
20
+ \`content\` longtext NOT NULL COMMENT '正文',
21
+ \`summary\` text COMMENT '摘要',
22
+ \`type\` varchar(16) NOT NULL DEFAULT '图文' COMMENT '类型:图文/视频',
23
+ \`images\` json DEFAULT NULL COMMENT '图片 URL 列表',
24
+ \`video\` text COMMENT '视频 URL',
25
+ \`tags\` varchar(512) DEFAULT NULL COMMENT '标签',
26
+ \`status\` tinyint NOT NULL DEFAULT '0' COMMENT '状态:0=草稿 1=已发布 2=已下线',
27
+ \`virtual_pageviews\` int NOT NULL DEFAULT '0' COMMENT '虚拟浏览量',
28
+ \`pageviews\` int NOT NULL DEFAULT '0' COMMENT '浏览量',
29
+ \`counter_1\` int NOT NULL DEFAULT '0' COMMENT '通用计数器 1',
30
+ \`counter_2\` int NOT NULL DEFAULT '0' COMMENT '通用计数器 2',
31
+ \`counter_3\` int NOT NULL DEFAULT '0' COMMENT '通用计数器 3',
32
+ \`announcement_start_time\` varchar(32) DEFAULT NULL COMMENT '公告开始时间',
33
+ \`announcement_end_time\` varchar(32) DEFAULT NULL COMMENT '公告结束时间',
34
+ \`sort_order\` int DEFAULT NULL COMMENT '排序',
35
+ \`created_at\` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
36
+ \`update_at\` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
37
+ \`delete_at\` datetime DEFAULT NULL,
38
+ PRIMARY KEY (\`id\`),
39
+ UNIQUE KEY \`uk_only_key\` (\`only_key\`, \`delete_at\`),
40
+ KEY \`idx_app_dockey\` (\`app_id\`, \`doc_key\`),
41
+ KEY \`idx_doc_group\` (\`doc_group\`),
42
+ KEY \`idx_sort_order\` (\`sort_order\`)
43
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
44
+ `);
45
+
46
+ await queryRunner.query(`
47
+ CREATE TABLE \`mfw_document_ext\` (
48
+ \`id\` bigint NOT NULL AUTO_INCREMENT,
49
+ \`document_id\` bigint NOT NULL COMMENT '文档 ID',
50
+ \`ext_key\` varchar(128) NOT NULL COMMENT '扩展属性键',
51
+ \`ext_value\` json NOT NULL COMMENT '扩展属性值 {data: any}',
52
+ \`value_type\` varchar(16) NOT NULL DEFAULT 'string' COMMENT '值类型:string/number/boolean/json',
53
+ \`description\` varchar(256) DEFAULT NULL COMMENT '描述',
54
+ \`created_at\` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
55
+ \`update_at\` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
56
+ \`delete_at\` datetime DEFAULT NULL,
57
+ PRIMARY KEY (\`id\`),
58
+ UNIQUE KEY \`uk_doc_key\` (\`document_id\`, \`ext_key\`, \`delete_at\`),
59
+ KEY \`idx_document_id\` (\`document_id\`)
60
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
61
+ `);
62
+ }
63
+
64
+ public async down(queryRunner: QueryRunner): Promise<void> {
65
+ await queryRunner.query('DROP TABLE `mfw_document_ext`');
66
+ await queryRunner.query('DROP TABLE `mfw_document`');
67
+ }
68
+ }
package/package.json ADDED
@@ -0,0 +1,94 @@
1
+ {
2
+ "name": "moyan-mfw-extension-document",
3
+ "version": "1.1.10-beta.27",
4
+ "description": "MFW 通用文档管理扩展包",
5
+ "readme": "# moyan-mfw-extension-document\n\nMFW 通用文档管理扩展包,提供前后端统一的文档管理能力。",
6
+ "exports": {
7
+ "./backend": {
8
+ "types": "./src/backend/dist/index.d.ts",
9
+ "import": "./src/backend/dist/index.js",
10
+ "require": "./src/backend/dist/index.js"
11
+ },
12
+ "./backend/*": {
13
+ "types": "./src/backend/dist/*.d.ts",
14
+ "import": "./src/backend/dist/*.js",
15
+ "require": "./src/backend/dist/*"
16
+ },
17
+ "./frontend": {
18
+ "types": "./src/frontend/dist/index.d.ts",
19
+ "import": "./src/frontend/dist/index.mjs",
20
+ "require": "./src/frontend/dist/index.mjs"
21
+ },
22
+ "./frontend/*": {
23
+ "types": "./src/frontend/dist/*.d.ts",
24
+ "import": "./src/frontend/dist/*",
25
+ "require": "./src/frontend/dist/*"
26
+ },
27
+ "./shared": {
28
+ "types": "./src/shared/dist/index.d.ts",
29
+ "import": "./src/shared/dist/index.js",
30
+ "require": "./src/shared/dist/index.js"
31
+ },
32
+ "./shared/*": {
33
+ "types": "./src/shared/dist/*.d.ts",
34
+ "import": "./src/shared/dist/*",
35
+ "require": "./src/shared/dist/*"
36
+ }
37
+ },
38
+ "typesVersions": {
39
+ "*": {
40
+ "*": [
41
+ "./src/*/dist/*.d.ts",
42
+ "./src/*/dist/index.d.ts"
43
+ ]
44
+ }
45
+ },
46
+ "scripts": {
47
+ "build:shared": "pnpm --filter @internal/document-shared build",
48
+ "build:backend": "pnpm --filter moyan-mfw-base run build:shared && pnpm --filter moyan-mfw-base run build:backend && pnpm --filter @internal/document-backend build",
49
+ "build:frontend": "pnpm --filter @internal/document-frontend build",
50
+ "build": "pnpm run build:shared && pnpm run build:backend && pnpm run build:frontend",
51
+ "dev:backend": "pnpm --filter @internal/document-backend dev",
52
+ "dev:frontend": "pnpm --filter @internal/document-frontend dev",
53
+ "typecheck:shared": "pnpm --filter @internal/document-shared typecheck",
54
+ "typecheck:backend": "pnpm --filter @internal/document-backend typecheck",
55
+ "typecheck:frontend": "pnpm --filter @internal/document-frontend typecheck",
56
+ "typecheck": "pnpm run typecheck:shared && pnpm run typecheck:backend && pnpm run typecheck:frontend",
57
+ "verify:dist": "node scripts/verify-dist.mjs",
58
+ "verify": "pnpm run verify:dist"
59
+ },
60
+ "license": "MIT",
61
+ "keywords": [
62
+ "moyan",
63
+ "mfw",
64
+ "extension",
65
+ "document",
66
+ "文档管理"
67
+ ],
68
+ "files": [
69
+ "./src/backend/dist",
70
+ "./src/frontend/dist",
71
+ "./src/shared/dist",
72
+ "./database/migrations",
73
+ "./README.md",
74
+ "./LICENSE"
75
+ ],
76
+ "peerDependencies": {
77
+ "@element-plus/icons-vue": ">=2.0.0",
78
+ "@nestjs/common": ">=9.0.0",
79
+ "@nestjs/core": ">=9.0.0",
80
+ "@nestjs/typeorm": ">=9.0.0",
81
+ "@nestjs/swagger": ">=6.0.0",
82
+ "class-transformer": ">=0.5.0",
83
+ "class-validator": ">=0.14.0",
84
+ "typeorm": ">=0.3.0",
85
+ "vue": ">=3.3.0",
86
+ "vue-router": ">=4.0.0",
87
+ "element-plus": ">=2.0.0",
88
+ "moyan-mfw-base": ">=1.0.0"
89
+ },
90
+ "dependencies": {},
91
+ "engines": {
92
+ "node": ">=20.0.0"
93
+ }
94
+ }
@@ -0,0 +1,12 @@
1
+ export declare const ApiResponseUtil: {
2
+ success: (data: unknown, message: string) => {
3
+ code: number;
4
+ data: unknown;
5
+ message: string;
6
+ };
7
+ error: (message: string, code?: number) => {
8
+ code: number;
9
+ message: string;
10
+ };
11
+ };
12
+ //# sourceMappingURL=api-response.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-response.d.ts","sourceRoot":"","sources":["../src/api-response.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,eAAe,EAAyB;IACnD,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,KAAK;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9F,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,KAAK;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CAC9E,CAAC"}
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ApiResponseUtil = void 0;
4
+ /**
5
+ * @fileoverview API 响应工具包装
6
+ * @description base-backend 的 ApiResponseUtil 被声明为 export type,通过 require 获取运行时值
7
+ */
8
+ const bb = require('moyan-mfw-base/backend');
9
+ exports.ApiResponseUtil = bb.ApiResponseUtil;
10
+ //# sourceMappingURL=api-response.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-response.js","sourceRoot":"","sources":["../src/api-response.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACH,MAAM,EAAE,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAAC;AAChC,QAAA,eAAe,GAAG,EAAE,CAAC,eAGjC,CAAC"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * @fileoverview 文档公开接口控制器
3
+ * @description 无需认证即可访问的公开文档接口(仅返回已发布文档)
4
+ */
5
+ import { DocumentService } from '../service/document.service';
6
+ import { DocumentListQueryDto } from '../dto';
7
+ export declare class DocumentPubController {
8
+ private readonly service;
9
+ constructor(service: DocumentService);
10
+ getPublicListByKey(query: DocumentListQueryDto): Promise<{
11
+ code: number;
12
+ data: unknown;
13
+ message: string;
14
+ }>;
15
+ getPublicByOnlyKey(onlyKey: string): Promise<{
16
+ code: number;
17
+ data: unknown;
18
+ message: string;
19
+ }>;
20
+ }
21
+ //# sourceMappingURL=document-pub.controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"document-pub.controller.d.ts","sourceRoot":"","sources":["../../src/controller/document-pub.controller.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAuB,MAAM,QAAQ,CAAC;AAGnE,qBAEa,qBAAqB;IACpB,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,eAAe;IAM/C,kBAAkB,CAAU,KAAK,EAAE,oBAAoB;;;;;IAWvD,kBAAkB,CAAmB,OAAO,EAAE,MAAM;;;;;CAQ3D"}
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ /**
3
+ * @fileoverview 文档公开接口控制器
4
+ * @description 无需认证即可访问的公开文档接口(仅返回已发布文档)
5
+ */
6
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
7
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
8
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
9
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
10
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
11
+ };
12
+ var __metadata = (this && this.__metadata) || function (k, v) {
13
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
14
+ };
15
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
16
+ return function (target, key) { decorator(target, key, paramIndex); }
17
+ };
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ exports.DocumentPubController = void 0;
20
+ const common_1 = require("@nestjs/common");
21
+ const swagger_1 = require("@nestjs/swagger");
22
+ const backend_1 = require("moyan-mfw-base/backend");
23
+ const api_response_1 = require("../api-response");
24
+ const document_service_1 = require("../service/document.service");
25
+ const dto_1 = require("../dto");
26
+ const shared_1 = require("moyan-mfw-extension-document/shared");
27
+ let DocumentPubController = class DocumentPubController {
28
+ service;
29
+ constructor(service) {
30
+ this.service = service;
31
+ }
32
+ async getPublicListByKey(query) {
33
+ query.status = shared_1.DocumentStatus.PUBLISHED;
34
+ const result = await this.service.getList(query);
35
+ return api_response_1.ApiResponseUtil.success(result, '查询成功');
36
+ }
37
+ async getPublicByOnlyKey(onlyKey) {
38
+ const doc = await this.service.getOneByOnlyKey(onlyKey, true);
39
+ if (doc.status !== shared_1.DocumentStatus.PUBLISHED) {
40
+ return api_response_1.ApiResponseUtil.success(null, '文档不存在');
41
+ }
42
+ const extFields = await this.service.getExtFields(doc.id);
43
+ return api_response_1.ApiResponseUtil.success({ ...doc, extFields }, '查询成功');
44
+ }
45
+ };
46
+ exports.DocumentPubController = DocumentPubController;
47
+ __decorate([
48
+ (0, common_1.Get)('listByKey'),
49
+ (0, backend_1.Public)(),
50
+ (0, swagger_1.ApiOperation)({ summary: '公开按 docKey 列已发布文档' }),
51
+ (0, swagger_1.ApiResponse)({ status: 200, description: '查询成功', type: [dto_1.DocumentResponseDto] }),
52
+ __param(0, (0, common_1.Query)()),
53
+ __metadata("design:type", Function),
54
+ __metadata("design:paramtypes", [dto_1.DocumentListQueryDto]),
55
+ __metadata("design:returntype", Promise)
56
+ ], DocumentPubController.prototype, "getPublicListByKey", null);
57
+ __decorate([
58
+ (0, common_1.Get)(':onlyKey'),
59
+ (0, backend_1.Public)(),
60
+ (0, swagger_1.ApiOperation)({ summary: '公开按 onlyKey 查询已发布文档' }),
61
+ (0, swagger_1.ApiParam)({ name: 'onlyKey', description: '唯一业务键' }),
62
+ (0, swagger_1.ApiResponse)({ status: 200, description: '查询成功', type: dto_1.DocumentResponseDto }),
63
+ __param(0, (0, common_1.Param)('onlyKey')),
64
+ __metadata("design:type", Function),
65
+ __metadata("design:paramtypes", [String]),
66
+ __metadata("design:returntype", Promise)
67
+ ], DocumentPubController.prototype, "getPublicByOnlyKey", null);
68
+ exports.DocumentPubController = DocumentPubController = __decorate([
69
+ (0, swagger_1.ApiTags)('ext-document-pub', '文档公开接口'),
70
+ (0, common_1.Controller)('pub'),
71
+ __metadata("design:paramtypes", [document_service_1.DocumentService])
72
+ ], DocumentPubController);
73
+ //# sourceMappingURL=document-pub.controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"document-pub.controller.js","sourceRoot":"","sources":["../../src/controller/document-pub.controller.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;AAEH,2CAA+D;AAC/D,6CAA+E;AAC/E,oDAAgD;AAChD,kDAAkD;AAClD,kEAA8D;AAC9D,gCAAmE;AACnE,gEAAqE;AAI9D,IAAM,qBAAqB,GAA3B,MAAM,qBAAqB;IACH;IAA7B,YAA6B,OAAwB;QAAxB,YAAO,GAAP,OAAO,CAAiB;IAAG,CAAC;IAMnD,AAAN,KAAK,CAAC,kBAAkB,CAAU,KAA2B;QAC3D,KAAK,CAAC,MAAM,GAAG,uBAAc,CAAC,SAAS,CAAC;QACxC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACjD,OAAO,8BAAe,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjD,CAAC;IAOK,AAAN,KAAK,CAAC,kBAAkB,CAAmB,OAAe;QACxD,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAC9D,IAAI,GAAG,CAAC,MAAM,KAAK,uBAAc,CAAC,SAAS,EAAE,CAAC;YAC5C,OAAO,8BAAe,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAChD,CAAC;QACD,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC1D,OAAO,8BAAe,CAAC,OAAO,CAAC,EAAE,GAAG,GAAG,EAAE,SAAS,EAAE,EAAE,MAAM,CAAC,CAAC;IAChE,CAAC;CACF,CAAA;AA1BY,sDAAqB;AAO1B;IAJL,IAAA,YAAG,EAAC,WAAW,CAAC;IAChB,IAAA,gBAAM,GAAE;IACR,IAAA,sBAAY,EAAC,EAAE,OAAO,EAAE,mBAAmB,EAAE,CAAC;IAC9C,IAAA,qBAAW,EAAC,EAAE,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,yBAAmB,CAAC,EAAE,CAAC;IACrD,WAAA,IAAA,cAAK,GAAE,CAAA;;qCAAQ,0BAAoB;;+DAI5D;AAOK;IALL,IAAA,YAAG,EAAC,UAAU,CAAC;IACf,IAAA,gBAAM,GAAE;IACR,IAAA,sBAAY,EAAC,EAAE,OAAO,EAAE,qBAAqB,EAAE,CAAC;IAChD,IAAA,kBAAQ,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC;IACnD,IAAA,qBAAW,EAAC,EAAE,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,yBAAmB,EAAE,CAAC;IACnD,WAAA,IAAA,cAAK,EAAC,SAAS,CAAC,CAAA;;;;+DAOzC;gCAzBU,qBAAqB;IAFjC,IAAA,iBAAO,EAAC,kBAAkB,EAAE,QAAQ,CAAC;IACrC,IAAA,mBAAU,EAAC,KAAK,CAAC;qCAEsB,kCAAe;GAD1C,qBAAqB,CA0BjC"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * @fileoverview 文档管理控制器
3
+ * @description 处理文档管理的 HTTP 请求(认证接口)
4
+ */
5
+ import { DocumentService } from '../service/document.service';
6
+ import { DocumentExtService } from '../service/document-ext.service';
7
+ import { CreateDocumentDto, UpdateDocumentDto, DocumentListQueryDto, CounterUpdateDto, BatchUpdateExtDto } from '../dto';
8
+ export declare class DocumentController {
9
+ private readonly service;
10
+ private readonly extService;
11
+ constructor(service: DocumentService, extService: DocumentExtService);
12
+ getList(query: DocumentListQueryDto): Promise<{
13
+ code: number;
14
+ data: unknown;
15
+ message: string;
16
+ }>;
17
+ getListByKey(query: DocumentListQueryDto): Promise<{
18
+ code: number;
19
+ data: unknown;
20
+ message: string;
21
+ }>;
22
+ getDocGroupDict(docKey?: string, appId?: string): Promise<{
23
+ code: number;
24
+ data: unknown;
25
+ message: string;
26
+ }>;
27
+ getByOnlyKey(onlyKey: string): Promise<{
28
+ code: number;
29
+ data: unknown;
30
+ message: string;
31
+ }>;
32
+ getExtFields(id: string): Promise<{
33
+ code: number;
34
+ data: unknown;
35
+ message: string;
36
+ }>;
37
+ getOne(id: string): Promise<{
38
+ code: number;
39
+ data: unknown;
40
+ message: string;
41
+ }>;
42
+ create(dto: CreateDocumentDto): Promise<{
43
+ code: number;
44
+ data: unknown;
45
+ message: string;
46
+ }>;
47
+ updateTotals(dto: CounterUpdateDto): Promise<{
48
+ code: number;
49
+ data: unknown;
50
+ message: string;
51
+ }>;
52
+ batchUpdateExt(id: string, dto: BatchUpdateExtDto): Promise<{
53
+ code: number;
54
+ data: unknown;
55
+ message: string;
56
+ }>;
57
+ update(id: string, dto: UpdateDocumentDto): Promise<{
58
+ code: number;
59
+ data: unknown;
60
+ message: string;
61
+ }>;
62
+ delete(id: string): Promise<{
63
+ code: number;
64
+ data: unknown;
65
+ message: string;
66
+ }>;
67
+ }
68
+ //# sourceMappingURL=document.controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"document.controller.d.ts","sourceRoot":"","sources":["../../src/controller/document.controller.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAUH,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,oBAAoB,EACpB,gBAAgB,EAChB,iBAAiB,EAGlB,MAAM,QAAQ,CAAC;AAEhB,qBAEa,kBAAkB;IAE3B,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,UAAU;gBADV,OAAO,EAAE,eAAe,EACxB,UAAU,EAAE,kBAAkB;IAO3C,OAAO,CAAU,KAAK,EAAE,oBAAoB;;;;;IAS5C,YAAY,CAAU,KAAK,EAAE,oBAAoB;;;;;IAUjD,eAAe,CACF,MAAM,CAAC,EAAE,MAAM,EAChB,KAAK,CAAC,EAAE,MAAM;;;;;IAY1B,YAAY,CAAmB,OAAO,EAAE,MAAM;;;;;IAU9C,YAAY,CAAc,EAAE,EAAE,MAAM;;;;;IAUpC,MAAM,CAAc,EAAE,EAAE,MAAM;;;;;IAS9B,MAAM,CAAS,GAAG,EAAE,iBAAiB;;;;;IAQrC,YAAY,CAAS,GAAG,EAAE,gBAAgB;;;;;IAS1C,cAAc,CAAc,EAAE,EAAE,MAAM,EAAU,GAAG,EAAE,iBAAiB;;;;;IAUtE,MAAM,CAAc,EAAE,EAAE,MAAM,EAAU,GAAG,EAAE,iBAAiB;;;;;IAS9D,MAAM,CAAc,EAAE,EAAE,MAAM;;;;;CAIrC"}