meeglesdk 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +191 -0
- package/dist/client.d.ts +186 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +197 -0
- package/dist/client.js.map +1 -0
- package/dist/core/base-service.d.ts +156 -0
- package/dist/core/base-service.d.ts.map +1 -0
- package/dist/core/base-service.js +240 -0
- package/dist/core/base-service.js.map +1 -0
- package/dist/core/errors.d.ts +181 -0
- package/dist/core/errors.d.ts.map +1 -0
- package/dist/core/errors.js +250 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/rate-limiter.d.ts +72 -0
- package/dist/core/rate-limiter.d.ts.map +1 -0
- package/dist/core/rate-limiter.js +269 -0
- package/dist/core/rate-limiter.js.map +1 -0
- package/dist/core/request.d.ts +270 -0
- package/dist/core/request.d.ts.map +1 -0
- package/dist/core/request.js +842 -0
- package/dist/core/request.js.map +1 -0
- package/dist/core/token-manager.d.ts +134 -0
- package/dist/core/token-manager.d.ts.map +1 -0
- package/dist/core/token-manager.js +412 -0
- package/dist/core/token-manager.js.map +1 -0
- package/dist/helpers/auth.d.ts +7 -0
- package/dist/helpers/auth.d.ts.map +1 -0
- package/dist/helpers/auth.js +19 -0
- package/dist/helpers/auth.js.map +1 -0
- package/dist/index.d.ts +72 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +61 -0
- package/dist/index.js.map +1 -0
- package/dist/service/auth/index.d.ts +96 -0
- package/dist/service/auth/index.d.ts.map +1 -0
- package/dist/service/auth/index.js +163 -0
- package/dist/service/auth/index.js.map +1 -0
- package/dist/service/config/basic.d.ts +37 -0
- package/dist/service/config/basic.d.ts.map +1 -0
- package/dist/service/config/basic.js +54 -0
- package/dist/service/config/basic.js.map +1 -0
- package/dist/service/config/config.d.ts +27 -0
- package/dist/service/config/config.d.ts.map +1 -0
- package/dist/service/config/config.js +34 -0
- package/dist/service/config/config.js.map +1 -0
- package/dist/service/config/field.d.ts +50 -0
- package/dist/service/config/field.d.ts.map +1 -0
- package/dist/service/config/field.js +74 -0
- package/dist/service/config/field.js.map +1 -0
- package/dist/service/config/relation.d.ts +53 -0
- package/dist/service/config/relation.d.ts.map +1 -0
- package/dist/service/config/relation.js +66 -0
- package/dist/service/config/relation.js.map +1 -0
- package/dist/service/config/resource.d.ts +59 -0
- package/dist/service/config/resource.d.ts.map +1 -0
- package/dist/service/config/resource.js +75 -0
- package/dist/service/config/resource.js.map +1 -0
- package/dist/service/config/role.d.ts +55 -0
- package/dist/service/config/role.d.ts.map +1 -0
- package/dist/service/config/role.js +90 -0
- package/dist/service/config/role.js.map +1 -0
- package/dist/service/config/template.d.ts +65 -0
- package/dist/service/config/template.d.ts.map +1 -0
- package/dist/service/config/template.js +95 -0
- package/dist/service/config/template.js.map +1 -0
- package/dist/service/measure/index.d.ts +26 -0
- package/dist/service/measure/index.d.ts.map +1 -0
- package/dist/service/measure/index.js +36 -0
- package/dist/service/measure/index.js.map +1 -0
- package/dist/service/measure/query.d.ts +56 -0
- package/dist/service/measure/query.d.ts.map +1 -0
- package/dist/service/measure/query.js +86 -0
- package/dist/service/measure/query.js.map +1 -0
- package/dist/service/space/relation.d.ts +63 -0
- package/dist/service/space/relation.d.ts.map +1 -0
- package/dist/service/space/relation.js +102 -0
- package/dist/service/space/relation.js.map +1 -0
- package/dist/service/space/space.d.ts +81 -0
- package/dist/service/space/space.d.ts.map +1 -0
- package/dist/service/space/space.js +110 -0
- package/dist/service/space/space.js.map +1 -0
- package/dist/service/tenant/tenant.d.ts +52 -0
- package/dist/service/tenant/tenant.d.ts.map +1 -0
- package/dist/service/tenant/tenant.js +75 -0
- package/dist/service/tenant/tenant.js.map +1 -0
- package/dist/service/user/group.d.ts +47 -0
- package/dist/service/user/group.d.ts.map +1 -0
- package/dist/service/user/group.js +70 -0
- package/dist/service/user/group.js.map +1 -0
- package/dist/service/user/query.d.ts +25 -0
- package/dist/service/user/query.d.ts.map +1 -0
- package/dist/service/user/query.js +26 -0
- package/dist/service/user/query.js.map +1 -0
- package/dist/service/user/search.d.ts +25 -0
- package/dist/service/user/search.d.ts.map +1 -0
- package/dist/service/user/search.js +26 -0
- package/dist/service/user/search.js.map +1 -0
- package/dist/service/user/user.d.ts +37 -0
- package/dist/service/user/user.d.ts.map +1 -0
- package/dist/service/user/user.js +46 -0
- package/dist/service/user/user.js.map +1 -0
- package/dist/service/view/query.d.ts +52 -0
- package/dist/service/view/query.d.ts.map +1 -0
- package/dist/service/view/query.js +76 -0
- package/dist/service/view/query.js.map +1 -0
- package/dist/service/view/view.d.ts +76 -0
- package/dist/service/view/view.d.ts.map +1 -0
- package/dist/service/view/view.js +108 -0
- package/dist/service/view/view.js.map +1 -0
- package/dist/service/workitem/attachment.d.ts +143 -0
- package/dist/service/workitem/attachment.d.ts.map +1 -0
- package/dist/service/workitem/attachment.js +231 -0
- package/dist/service/workitem/attachment.js.map +1 -0
- package/dist/service/workitem/batch.d.ts +135 -0
- package/dist/service/workitem/batch.d.ts.map +1 -0
- package/dist/service/workitem/batch.js +146 -0
- package/dist/service/workitem/batch.js.map +1 -0
- package/dist/service/workitem/chat.d.ts +42 -0
- package/dist/service/workitem/chat.d.ts.map +1 -0
- package/dist/service/workitem/chat.js +50 -0
- package/dist/service/workitem/chat.js.map +1 -0
- package/dist/service/workitem/comment.d.ts +139 -0
- package/dist/service/workitem/comment.d.ts.map +1 -0
- package/dist/service/workitem/comment.js +180 -0
- package/dist/service/workitem/comment.js.map +1 -0
- package/dist/service/workitem/review.d.ts +44 -0
- package/dist/service/workitem/review.d.ts.map +1 -0
- package/dist/service/workitem/review.js +49 -0
- package/dist/service/workitem/review.js.map +1 -0
- package/dist/service/workitem/search.d.ts +213 -0
- package/dist/service/workitem/search.d.ts.map +1 -0
- package/dist/service/workitem/search.js +242 -0
- package/dist/service/workitem/search.js.map +1 -0
- package/dist/service/workitem/subtask.d.ts +193 -0
- package/dist/service/workitem/subtask.d.ts.map +1 -0
- package/dist/service/workitem/subtask.js +247 -0
- package/dist/service/workitem/subtask.js.map +1 -0
- package/dist/service/workitem/workItem.d.ts +225 -0
- package/dist/service/workitem/workItem.d.ts.map +1 -0
- package/dist/service/workitem/workItem.js +310 -0
- package/dist/service/workitem/workItem.js.map +1 -0
- package/dist/service/workitem/workflow.d.ts +214 -0
- package/dist/service/workitem/workflow.d.ts.map +1 -0
- package/dist/service/workitem/workflow.js +281 -0
- package/dist/service/workitem/workflow.js.map +1 -0
- package/dist/service/workitem/workhour.d.ts +63 -0
- package/dist/service/workitem/workhour.d.ts.map +1 -0
- package/dist/service/workitem/workhour.js +93 -0
- package/dist/service/workitem/workhour.js.map +1 -0
- package/dist/types/auth.d.ts +115 -0
- package/dist/types/auth.d.ts.map +1 -0
- package/dist/types/auth.js +6 -0
- package/dist/types/auth.js.map +1 -0
- package/dist/types/common.d.ts +354 -0
- package/dist/types/common.d.ts.map +1 -0
- package/dist/types/common.js +14 -0
- package/dist/types/common.js.map +1 -0
- package/dist/types/config.d.ts +305 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +6 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/index.d.ts +13 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +13 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/measure.d.ts +55 -0
- package/dist/types/measure.d.ts.map +1 -0
- package/dist/types/measure.js +6 -0
- package/dist/types/measure.js.map +1 -0
- package/dist/types/space.d.ts +164 -0
- package/dist/types/space.d.ts.map +1 -0
- package/dist/types/space.js +6 -0
- package/dist/types/space.js.map +1 -0
- package/dist/types/tenant.d.ts +106 -0
- package/dist/types/tenant.d.ts.map +1 -0
- package/dist/types/tenant.js +6 -0
- package/dist/types/tenant.js.map +1 -0
- package/dist/types/user.d.ts +110 -0
- package/dist/types/user.d.ts.map +1 -0
- package/dist/types/user.js +6 -0
- package/dist/types/user.js.map +1 -0
- package/dist/types/view.d.ts +162 -0
- package/dist/types/view.d.ts.map +1 -0
- package/dist/types/view.js +6 -0
- package/dist/types/view.js.map +1 -0
- package/dist/types/workitem.d.ts +1523 -0
- package/dist/types/workitem.d.ts.map +1 -0
- package/dist/types/workitem.js +6 -0
- package/dist/types/workitem.js.map +1 -0
- package/package.json +43 -0
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 工作流服务
|
|
3
|
+
* 100% 参考 Meego API 文档
|
|
4
|
+
*
|
|
5
|
+
* 提供工作项工作流相关功能:
|
|
6
|
+
* - 状态流转(状态流工作项)
|
|
7
|
+
* - 节点完成/回滚(节点流工作项)
|
|
8
|
+
* - 更新节点/排期
|
|
9
|
+
* - 获取流转必填信息
|
|
10
|
+
* - 获取工作流详情
|
|
11
|
+
*/
|
|
12
|
+
import { BaseService, type ServiceRequestOptions } from '../../core/base-service.js';
|
|
13
|
+
import type { StateChangeRequest, NodeOperateRequest, UpdateNodeRequest, TransitionRequiredInfoRequest, TransitionRequiredInfo, WorkflowInfo, WbsViewQueryParams, WbsViewRequest, WbsWorkItem } from '../../types/workitem.js';
|
|
14
|
+
/** API 路径 */
|
|
15
|
+
export declare const API_PATHS: {
|
|
16
|
+
/** 获取工作流详情 */
|
|
17
|
+
WORKFLOW_QUERY: string;
|
|
18
|
+
/** 状态流转(状态流工作项) */
|
|
19
|
+
STATE_CHANGE: string;
|
|
20
|
+
/** 节点完成/回滚(节点流工作项) */
|
|
21
|
+
NODE_OPERATE: string;
|
|
22
|
+
/** 更新节点/排期 */
|
|
23
|
+
NODE_UPDATE: string;
|
|
24
|
+
/** 获取流转必填信息 */
|
|
25
|
+
TRANSITION_REQUIRED_INFO: string;
|
|
26
|
+
/** 获取工作流详情(WBS) */
|
|
27
|
+
WBS_VIEW: string;
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* 工作流服务
|
|
31
|
+
*
|
|
32
|
+
* 提供工作项工作流相关功能
|
|
33
|
+
*/
|
|
34
|
+
export declare class WorkflowService extends BaseService {
|
|
35
|
+
/**
|
|
36
|
+
* 获取工作流详情
|
|
37
|
+
*
|
|
38
|
+
* 获取工作项实例的工作流详情,包含节点信息、流转信息等
|
|
39
|
+
*
|
|
40
|
+
* @param projectKey 空间 ID 或域名
|
|
41
|
+
* @param workItemTypeKey 工作项类型
|
|
42
|
+
* @param workItemId 工作项 ID
|
|
43
|
+
* @param options 请求选项
|
|
44
|
+
* @returns 工作流详情
|
|
45
|
+
*
|
|
46
|
+
* @example
|
|
47
|
+
* ```typescript
|
|
48
|
+
* const workflow = await client.workItem.workflow.query('my-project', 'story', 123456);
|
|
49
|
+
* console.log('当前状态:', workflow.current_nodes);
|
|
50
|
+
* console.log('可用流转:', workflow.transitions);
|
|
51
|
+
* ```
|
|
52
|
+
*/
|
|
53
|
+
query(projectKey: string, workItemTypeKey: string, workItemId: number, options?: ServiceRequestOptions<WorkflowInfo>): Promise<WorkflowInfo>;
|
|
54
|
+
/**
|
|
55
|
+
* 状态流转(状态流工作项)
|
|
56
|
+
*
|
|
57
|
+
* 用于"状态流"类型的工作项进行状态流转
|
|
58
|
+
*
|
|
59
|
+
* @param projectKey 空间 ID 或域名
|
|
60
|
+
* @param workItemTypeKey 工作项类型
|
|
61
|
+
* @param workItemId 工作项 ID
|
|
62
|
+
* @param request 流转请求
|
|
63
|
+
* @param options 请求选项
|
|
64
|
+
*
|
|
65
|
+
* @example
|
|
66
|
+
* ```typescript
|
|
67
|
+
* // 基本状态流转
|
|
68
|
+
* await client.workItem.workflow.stateChange('my-project', 'story', 123456, {
|
|
69
|
+
* transition_id: 12345,
|
|
70
|
+
* });
|
|
71
|
+
*
|
|
72
|
+
* // 流转时同时更新字段
|
|
73
|
+
* await client.workItem.workflow.stateChange('my-project', 'story', 123456, {
|
|
74
|
+
* transition_id: 12345,
|
|
75
|
+
* fields: [
|
|
76
|
+
* { field_key: 'priority', field_value: 'P0' }
|
|
77
|
+
* ],
|
|
78
|
+
* role_owners: [
|
|
79
|
+
* { role_key: 'developer', owner: ['user123'] }
|
|
80
|
+
* ]
|
|
81
|
+
* });
|
|
82
|
+
* ```
|
|
83
|
+
*/
|
|
84
|
+
stateChange(projectKey: string, workItemTypeKey: string, workItemId: number, request: StateChangeRequest, options?: ServiceRequestOptions<void>): Promise<void>;
|
|
85
|
+
/**
|
|
86
|
+
* 节点完成/回滚(节点流工作项)
|
|
87
|
+
*
|
|
88
|
+
* 用于"节点流"类型的工作项完成或回滚节点
|
|
89
|
+
*
|
|
90
|
+
* @param projectKey 空间 ID 或域名
|
|
91
|
+
* @param workItemTypeKey 工作项类型
|
|
92
|
+
* @param workItemId 工作项 ID
|
|
93
|
+
* @param nodeId 目标节点 ID
|
|
94
|
+
* @param request 操作请求
|
|
95
|
+
* @param options 请求选项
|
|
96
|
+
*
|
|
97
|
+
* @example
|
|
98
|
+
* ```typescript
|
|
99
|
+
* // 完成节点
|
|
100
|
+
* await client.workItem.workflow.operateNode('my-project', 'story', 123456, 'dev_node', {
|
|
101
|
+
* action: 'confirm',
|
|
102
|
+
* node_owners: ['user123'],
|
|
103
|
+
* node_schedule: {
|
|
104
|
+
* points: 3,
|
|
105
|
+
* estimate_start_date: 1724169600000,
|
|
106
|
+
* estimate_end_date: 1724428799999,
|
|
107
|
+
* }
|
|
108
|
+
* });
|
|
109
|
+
*
|
|
110
|
+
* // 回滚节点
|
|
111
|
+
* await client.workItem.workflow.operateNode('my-project', 'story', 123456, 'dev_node', {
|
|
112
|
+
* action: 'rollback',
|
|
113
|
+
* rollback_reason: '需要重新开发',
|
|
114
|
+
* });
|
|
115
|
+
* ```
|
|
116
|
+
*/
|
|
117
|
+
operateNode(projectKey: string, workItemTypeKey: string, workItemId: number, nodeId: string, request: NodeOperateRequest, options?: ServiceRequestOptions<void>): Promise<void>;
|
|
118
|
+
/**
|
|
119
|
+
* 更新节点信息(节点流工作项)
|
|
120
|
+
*
|
|
121
|
+
* 更新节点的负责人、排期、字段等信息
|
|
122
|
+
*
|
|
123
|
+
* @param projectKey 空间 ID 或域名
|
|
124
|
+
* @param workItemTypeKey 工作项类型
|
|
125
|
+
* @param workItemId 工作项 ID
|
|
126
|
+
* @param nodeId 目标节点 ID
|
|
127
|
+
* @param request 更新请求
|
|
128
|
+
* @param options 请求选项
|
|
129
|
+
*
|
|
130
|
+
* @example
|
|
131
|
+
* ```typescript
|
|
132
|
+
* // 更新节点负责人和排期
|
|
133
|
+
* await client.workItem.workflow.updateNode('my-project', 'story', 123456, 'dev_node', {
|
|
134
|
+
* node_owners: ['user123', 'user456'],
|
|
135
|
+
* node_schedule: {
|
|
136
|
+
* points: 5,
|
|
137
|
+
* estimate_start_date: 1724169600000,
|
|
138
|
+
* estimate_end_date: 1724428799999,
|
|
139
|
+
* }
|
|
140
|
+
* });
|
|
141
|
+
*
|
|
142
|
+
* // 差异化排期(按人汇总)
|
|
143
|
+
* await client.workItem.workflow.updateNode('my-project', 'story', 123456, 'dev_node', {
|
|
144
|
+
* node_owners: ['user123', 'user456'],
|
|
145
|
+
* schedules: [
|
|
146
|
+
* { owner: 'user123', points: 3, estimate_start_date: 1724169600000, estimate_end_date: 1724300799999 },
|
|
147
|
+
* { owner: 'user456', points: 2, estimate_start_date: 1724300800000, estimate_end_date: 1724428799999 },
|
|
148
|
+
* ]
|
|
149
|
+
* });
|
|
150
|
+
* ```
|
|
151
|
+
*/
|
|
152
|
+
updateNode(projectKey: string, workItemTypeKey: string, workItemId: number, nodeId: string, request: UpdateNodeRequest, options?: ServiceRequestOptions<void>): Promise<void>;
|
|
153
|
+
/**
|
|
154
|
+
* 获取流转必填信息
|
|
155
|
+
*
|
|
156
|
+
* 在进行状态流转或节点完成操作之前,获取目标节点/状态所需的必填信息
|
|
157
|
+
*
|
|
158
|
+
* @param request 查询请求
|
|
159
|
+
* @param options 请求选项
|
|
160
|
+
* @returns 流转必填信息
|
|
161
|
+
*
|
|
162
|
+
* @example
|
|
163
|
+
* ```typescript
|
|
164
|
+
* // 获取完整必填信息
|
|
165
|
+
* const requiredInfo = await client.workItem.workflow.getTransitionRequiredInfo({
|
|
166
|
+
* project_key: 'my-project',
|
|
167
|
+
* work_item_id: 123456,
|
|
168
|
+
* state_key: 'dev_done',
|
|
169
|
+
* });
|
|
170
|
+
*
|
|
171
|
+
* // 检查必填字段
|
|
172
|
+
* if (requiredInfo.form_items) {
|
|
173
|
+
* for (const item of requiredInfo.form_items) {
|
|
174
|
+
* if (!item.finished) {
|
|
175
|
+
* console.log('未完成:', item.key);
|
|
176
|
+
* }
|
|
177
|
+
* }
|
|
178
|
+
* }
|
|
179
|
+
*
|
|
180
|
+
* // 仅查询未完成的必填项
|
|
181
|
+
* const unfinished = await client.workItem.workflow.getTransitionRequiredInfo({
|
|
182
|
+
* project_key: 'my-project',
|
|
183
|
+
* work_item_id: 123456,
|
|
184
|
+
* state_key: 'dev_done',
|
|
185
|
+
* mode: 'unfinished',
|
|
186
|
+
* });
|
|
187
|
+
* ```
|
|
188
|
+
*/
|
|
189
|
+
getTransitionRequiredInfo(request: TransitionRequiredInfoRequest, options?: ServiceRequestOptions<TransitionRequiredInfo>): Promise<TransitionRequiredInfo>;
|
|
190
|
+
/**
|
|
191
|
+
* 获取工作流详情(WBS 视图)
|
|
192
|
+
*
|
|
193
|
+
* 获取工作项的 WBS 视图信息,包含完整的工作分解结构
|
|
194
|
+
*
|
|
195
|
+
* @param projectKey 空间 ID 或域名
|
|
196
|
+
* @param workItemTypeKey 工作项类型
|
|
197
|
+
* @param workItemId 工作项 ID
|
|
198
|
+
* @param options 请求选项
|
|
199
|
+
* @returns WBS 工作项信息
|
|
200
|
+
*
|
|
201
|
+
* @example
|
|
202
|
+
* ```typescript
|
|
203
|
+
* const wbsView = await client.workItem.workflow.getWbsView('my-project', 'story', 123456);
|
|
204
|
+
* console.log('工作分解结构:', wbsView);
|
|
205
|
+
* ```
|
|
206
|
+
*/
|
|
207
|
+
getWbsView(projectKey: string, workItemTypeKey: string, workItemId: number, params?: {
|
|
208
|
+
/** 查询参数(如 need_union_deliverable) */
|
|
209
|
+
query?: WbsViewQueryParams;
|
|
210
|
+
/** 请求体(expand 等扩展参数) */
|
|
211
|
+
body?: WbsViewRequest;
|
|
212
|
+
}, options?: ServiceRequestOptions<WbsWorkItem>): Promise<WbsWorkItem>;
|
|
213
|
+
}
|
|
214
|
+
//# sourceMappingURL=workflow.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow.d.ts","sourceRoot":"","sources":["../../../src/service/workitem/workflow.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,WAAW,EAAE,KAAK,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACrF,OAAO,KAAK,EACV,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EACjB,6BAA6B,EAC7B,sBAAsB,EACtB,YAAY,EACZ,kBAAkB,EAClB,cAAc,EACd,WAAW,EACZ,MAAM,yBAAyB,CAAC;AAEjC,aAAa;AACb,eAAO,MAAM,SAAS;IACpB,cAAc;;IAEd,mBAAmB;;IAEnB,sBAAsB;;IAEtB,cAAc;;IAEd,eAAe;;IAEf,mBAAmB;;CAEpB,CAAC;AAEF;;;;GAIG;AACH,qBAAa,eAAgB,SAAQ,WAAW;IAC9C;;;;;;;;;;;;;;;;;OAiBG;IACG,KAAK,CACT,UAAU,EAAE,MAAM,EAClB,eAAe,EAAE,MAAM,EACvB,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,qBAAqB,CAAC,YAAY,CAAC,GAC5C,OAAO,CAAC,YAAY,CAAC;IAYxB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6BG;IACG,WAAW,CACf,UAAU,EAAE,MAAM,EAClB,eAAe,EAAE,MAAM,EACvB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,kBAAkB,EAC3B,OAAO,CAAC,EAAE,qBAAqB,CAAC,IAAI,CAAC,GACpC,OAAO,CAAC,IAAI,CAAC;IAYhB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA+BG;IACG,WAAW,CACf,UAAU,EAAE,MAAM,EAClB,eAAe,EAAE,MAAM,EACvB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,kBAAkB,EAC3B,OAAO,CAAC,EAAE,qBAAqB,CAAC,IAAI,CAAC,GACpC,OAAO,CAAC,IAAI,CAAC;IAahB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAiCG;IACG,UAAU,CACd,UAAU,EAAE,MAAM,EAClB,eAAe,EAAE,MAAM,EACvB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,iBAAiB,EAC1B,OAAO,CAAC,EAAE,qBAAqB,CAAC,IAAI,CAAC,GACpC,OAAO,CAAC,IAAI,CAAC;IAahB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAmCG;IACG,yBAAyB,CAC7B,OAAO,EAAE,6BAA6B,EACtC,OAAO,CAAC,EAAE,qBAAqB,CAAC,sBAAsB,CAAC,GACtD,OAAO,CAAC,sBAAsB,CAAC;IAIlC;;;;;;;;;;;;;;;;OAgBG;IACG,UAAU,CACd,UAAU,EAAE,MAAM,EAClB,eAAe,EAAE,MAAM,EACvB,UAAU,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE;QACP,qCAAqC;QACrC,KAAK,CAAC,EAAE,kBAAkB,CAAC;QAC3B,wBAAwB;QACxB,IAAI,CAAC,EAAE,cAAc,CAAC;KACvB,EACD,OAAO,CAAC,EAAE,qBAAqB,CAAC,WAAW,CAAC,GAC3C,OAAO,CAAC,WAAW,CAAC;CAgCxB"}
|
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 工作流服务
|
|
3
|
+
* 100% 参考 Meego API 文档
|
|
4
|
+
*
|
|
5
|
+
* 提供工作项工作流相关功能:
|
|
6
|
+
* - 状态流转(状态流工作项)
|
|
7
|
+
* - 节点完成/回滚(节点流工作项)
|
|
8
|
+
* - 更新节点/排期
|
|
9
|
+
* - 获取流转必填信息
|
|
10
|
+
* - 获取工作流详情
|
|
11
|
+
*/
|
|
12
|
+
import { BaseService } from '../../core/base-service.js';
|
|
13
|
+
/** API 路径 */
|
|
14
|
+
export const API_PATHS = {
|
|
15
|
+
/** 获取工作流详情 */
|
|
16
|
+
WORKFLOW_QUERY: '/open_api/:project_key/work_item/:work_item_type_key/:work_item_id/workflow/query',
|
|
17
|
+
/** 状态流转(状态流工作项) */
|
|
18
|
+
STATE_CHANGE: '/open_api/:project_key/workflow/:work_item_type_key/:work_item_id/node/state_change',
|
|
19
|
+
/** 节点完成/回滚(节点流工作项) */
|
|
20
|
+
NODE_OPERATE: '/open_api/:project_key/workflow/:work_item_type_key/:work_item_id/node/:node_id/operate',
|
|
21
|
+
/** 更新节点/排期 */
|
|
22
|
+
NODE_UPDATE: '/open_api/:project_key/workflow/:work_item_type_key/:work_item_id/node/:node_id',
|
|
23
|
+
/** 获取流转必填信息 */
|
|
24
|
+
TRANSITION_REQUIRED_INFO: '/open_api/work_item/transition_required_info/get',
|
|
25
|
+
/** 获取工作流详情(WBS) */
|
|
26
|
+
WBS_VIEW: '/open_api/:project_key/work_item/:work_item_type_key/:work_item_id/wbs_view',
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* 工作流服务
|
|
30
|
+
*
|
|
31
|
+
* 提供工作项工作流相关功能
|
|
32
|
+
*/
|
|
33
|
+
export class WorkflowService extends BaseService {
|
|
34
|
+
/**
|
|
35
|
+
* 获取工作流详情
|
|
36
|
+
*
|
|
37
|
+
* 获取工作项实例的工作流详情,包含节点信息、流转信息等
|
|
38
|
+
*
|
|
39
|
+
* @param projectKey 空间 ID 或域名
|
|
40
|
+
* @param workItemTypeKey 工作项类型
|
|
41
|
+
* @param workItemId 工作项 ID
|
|
42
|
+
* @param options 请求选项
|
|
43
|
+
* @returns 工作流详情
|
|
44
|
+
*
|
|
45
|
+
* @example
|
|
46
|
+
* ```typescript
|
|
47
|
+
* const workflow = await client.workItem.workflow.query('my-project', 'story', 123456);
|
|
48
|
+
* console.log('当前状态:', workflow.current_nodes);
|
|
49
|
+
* console.log('可用流转:', workflow.transitions);
|
|
50
|
+
* ```
|
|
51
|
+
*/
|
|
52
|
+
async query(projectKey, workItemTypeKey, workItemId, options) {
|
|
53
|
+
return this.post(API_PATHS.WORKFLOW_QUERY, {}, {
|
|
54
|
+
...options,
|
|
55
|
+
pathParams: {
|
|
56
|
+
project_key: projectKey,
|
|
57
|
+
work_item_type_key: workItemTypeKey,
|
|
58
|
+
work_item_id: String(workItemId),
|
|
59
|
+
...options?.pathParams,
|
|
60
|
+
},
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* 状态流转(状态流工作项)
|
|
65
|
+
*
|
|
66
|
+
* 用于"状态流"类型的工作项进行状态流转
|
|
67
|
+
*
|
|
68
|
+
* @param projectKey 空间 ID 或域名
|
|
69
|
+
* @param workItemTypeKey 工作项类型
|
|
70
|
+
* @param workItemId 工作项 ID
|
|
71
|
+
* @param request 流转请求
|
|
72
|
+
* @param options 请求选项
|
|
73
|
+
*
|
|
74
|
+
* @example
|
|
75
|
+
* ```typescript
|
|
76
|
+
* // 基本状态流转
|
|
77
|
+
* await client.workItem.workflow.stateChange('my-project', 'story', 123456, {
|
|
78
|
+
* transition_id: 12345,
|
|
79
|
+
* });
|
|
80
|
+
*
|
|
81
|
+
* // 流转时同时更新字段
|
|
82
|
+
* await client.workItem.workflow.stateChange('my-project', 'story', 123456, {
|
|
83
|
+
* transition_id: 12345,
|
|
84
|
+
* fields: [
|
|
85
|
+
* { field_key: 'priority', field_value: 'P0' }
|
|
86
|
+
* ],
|
|
87
|
+
* role_owners: [
|
|
88
|
+
* { role_key: 'developer', owner: ['user123'] }
|
|
89
|
+
* ]
|
|
90
|
+
* });
|
|
91
|
+
* ```
|
|
92
|
+
*/
|
|
93
|
+
async stateChange(projectKey, workItemTypeKey, workItemId, request, options) {
|
|
94
|
+
await this.post(API_PATHS.STATE_CHANGE, request, {
|
|
95
|
+
...options,
|
|
96
|
+
pathParams: {
|
|
97
|
+
project_key: projectKey,
|
|
98
|
+
work_item_type_key: workItemTypeKey,
|
|
99
|
+
work_item_id: String(workItemId),
|
|
100
|
+
...options?.pathParams,
|
|
101
|
+
},
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* 节点完成/回滚(节点流工作项)
|
|
106
|
+
*
|
|
107
|
+
* 用于"节点流"类型的工作项完成或回滚节点
|
|
108
|
+
*
|
|
109
|
+
* @param projectKey 空间 ID 或域名
|
|
110
|
+
* @param workItemTypeKey 工作项类型
|
|
111
|
+
* @param workItemId 工作项 ID
|
|
112
|
+
* @param nodeId 目标节点 ID
|
|
113
|
+
* @param request 操作请求
|
|
114
|
+
* @param options 请求选项
|
|
115
|
+
*
|
|
116
|
+
* @example
|
|
117
|
+
* ```typescript
|
|
118
|
+
* // 完成节点
|
|
119
|
+
* await client.workItem.workflow.operateNode('my-project', 'story', 123456, 'dev_node', {
|
|
120
|
+
* action: 'confirm',
|
|
121
|
+
* node_owners: ['user123'],
|
|
122
|
+
* node_schedule: {
|
|
123
|
+
* points: 3,
|
|
124
|
+
* estimate_start_date: 1724169600000,
|
|
125
|
+
* estimate_end_date: 1724428799999,
|
|
126
|
+
* }
|
|
127
|
+
* });
|
|
128
|
+
*
|
|
129
|
+
* // 回滚节点
|
|
130
|
+
* await client.workItem.workflow.operateNode('my-project', 'story', 123456, 'dev_node', {
|
|
131
|
+
* action: 'rollback',
|
|
132
|
+
* rollback_reason: '需要重新开发',
|
|
133
|
+
* });
|
|
134
|
+
* ```
|
|
135
|
+
*/
|
|
136
|
+
async operateNode(projectKey, workItemTypeKey, workItemId, nodeId, request, options) {
|
|
137
|
+
await this.post(API_PATHS.NODE_OPERATE, request, {
|
|
138
|
+
...options,
|
|
139
|
+
pathParams: {
|
|
140
|
+
project_key: projectKey,
|
|
141
|
+
work_item_type_key: workItemTypeKey,
|
|
142
|
+
work_item_id: String(workItemId),
|
|
143
|
+
node_id: nodeId,
|
|
144
|
+
...options?.pathParams,
|
|
145
|
+
},
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* 更新节点信息(节点流工作项)
|
|
150
|
+
*
|
|
151
|
+
* 更新节点的负责人、排期、字段等信息
|
|
152
|
+
*
|
|
153
|
+
* @param projectKey 空间 ID 或域名
|
|
154
|
+
* @param workItemTypeKey 工作项类型
|
|
155
|
+
* @param workItemId 工作项 ID
|
|
156
|
+
* @param nodeId 目标节点 ID
|
|
157
|
+
* @param request 更新请求
|
|
158
|
+
* @param options 请求选项
|
|
159
|
+
*
|
|
160
|
+
* @example
|
|
161
|
+
* ```typescript
|
|
162
|
+
* // 更新节点负责人和排期
|
|
163
|
+
* await client.workItem.workflow.updateNode('my-project', 'story', 123456, 'dev_node', {
|
|
164
|
+
* node_owners: ['user123', 'user456'],
|
|
165
|
+
* node_schedule: {
|
|
166
|
+
* points: 5,
|
|
167
|
+
* estimate_start_date: 1724169600000,
|
|
168
|
+
* estimate_end_date: 1724428799999,
|
|
169
|
+
* }
|
|
170
|
+
* });
|
|
171
|
+
*
|
|
172
|
+
* // 差异化排期(按人汇总)
|
|
173
|
+
* await client.workItem.workflow.updateNode('my-project', 'story', 123456, 'dev_node', {
|
|
174
|
+
* node_owners: ['user123', 'user456'],
|
|
175
|
+
* schedules: [
|
|
176
|
+
* { owner: 'user123', points: 3, estimate_start_date: 1724169600000, estimate_end_date: 1724300799999 },
|
|
177
|
+
* { owner: 'user456', points: 2, estimate_start_date: 1724300800000, estimate_end_date: 1724428799999 },
|
|
178
|
+
* ]
|
|
179
|
+
* });
|
|
180
|
+
* ```
|
|
181
|
+
*/
|
|
182
|
+
async updateNode(projectKey, workItemTypeKey, workItemId, nodeId, request, options) {
|
|
183
|
+
await this.put(API_PATHS.NODE_UPDATE, request, {
|
|
184
|
+
...options,
|
|
185
|
+
pathParams: {
|
|
186
|
+
project_key: projectKey,
|
|
187
|
+
work_item_type_key: workItemTypeKey,
|
|
188
|
+
work_item_id: String(workItemId),
|
|
189
|
+
node_id: nodeId,
|
|
190
|
+
...options?.pathParams,
|
|
191
|
+
},
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* 获取流转必填信息
|
|
196
|
+
*
|
|
197
|
+
* 在进行状态流转或节点完成操作之前,获取目标节点/状态所需的必填信息
|
|
198
|
+
*
|
|
199
|
+
* @param request 查询请求
|
|
200
|
+
* @param options 请求选项
|
|
201
|
+
* @returns 流转必填信息
|
|
202
|
+
*
|
|
203
|
+
* @example
|
|
204
|
+
* ```typescript
|
|
205
|
+
* // 获取完整必填信息
|
|
206
|
+
* const requiredInfo = await client.workItem.workflow.getTransitionRequiredInfo({
|
|
207
|
+
* project_key: 'my-project',
|
|
208
|
+
* work_item_id: 123456,
|
|
209
|
+
* state_key: 'dev_done',
|
|
210
|
+
* });
|
|
211
|
+
*
|
|
212
|
+
* // 检查必填字段
|
|
213
|
+
* if (requiredInfo.form_items) {
|
|
214
|
+
* for (const item of requiredInfo.form_items) {
|
|
215
|
+
* if (!item.finished) {
|
|
216
|
+
* console.log('未完成:', item.key);
|
|
217
|
+
* }
|
|
218
|
+
* }
|
|
219
|
+
* }
|
|
220
|
+
*
|
|
221
|
+
* // 仅查询未完成的必填项
|
|
222
|
+
* const unfinished = await client.workItem.workflow.getTransitionRequiredInfo({
|
|
223
|
+
* project_key: 'my-project',
|
|
224
|
+
* work_item_id: 123456,
|
|
225
|
+
* state_key: 'dev_done',
|
|
226
|
+
* mode: 'unfinished',
|
|
227
|
+
* });
|
|
228
|
+
* ```
|
|
229
|
+
*/
|
|
230
|
+
async getTransitionRequiredInfo(request, options) {
|
|
231
|
+
return this.post(API_PATHS.TRANSITION_REQUIRED_INFO, request, options);
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* 获取工作流详情(WBS 视图)
|
|
235
|
+
*
|
|
236
|
+
* 获取工作项的 WBS 视图信息,包含完整的工作分解结构
|
|
237
|
+
*
|
|
238
|
+
* @param projectKey 空间 ID 或域名
|
|
239
|
+
* @param workItemTypeKey 工作项类型
|
|
240
|
+
* @param workItemId 工作项 ID
|
|
241
|
+
* @param options 请求选项
|
|
242
|
+
* @returns WBS 工作项信息
|
|
243
|
+
*
|
|
244
|
+
* @example
|
|
245
|
+
* ```typescript
|
|
246
|
+
* const wbsView = await client.workItem.workflow.getWbsView('my-project', 'story', 123456);
|
|
247
|
+
* console.log('工作分解结构:', wbsView);
|
|
248
|
+
* ```
|
|
249
|
+
*/
|
|
250
|
+
async getWbsView(projectKey, workItemTypeKey, workItemId, params, options) {
|
|
251
|
+
// GET 请求在 fetch 中不能携带 body,将 expand 映射到 query 以保持兼容
|
|
252
|
+
const expandQuery = params?.body?.expand
|
|
253
|
+
? {
|
|
254
|
+
need_union_deliverable: params.body.expand.need_union_deliverable,
|
|
255
|
+
need_wbs_relation_chain_path: params.body.expand.need_wbs_relation_chain_path,
|
|
256
|
+
need_wbs_relation_chain_entity: params.body.expand.need_wbs_relation_chain_entity,
|
|
257
|
+
}
|
|
258
|
+
: {};
|
|
259
|
+
const mergedQuery = {
|
|
260
|
+
...expandQuery,
|
|
261
|
+
...(params?.query ?? {}),
|
|
262
|
+
...(options?.query ?? {}),
|
|
263
|
+
};
|
|
264
|
+
return this.requestHandler.request({
|
|
265
|
+
method: 'GET',
|
|
266
|
+
path: API_PATHS.WBS_VIEW,
|
|
267
|
+
pathParams: {
|
|
268
|
+
project_key: projectKey,
|
|
269
|
+
work_item_type_key: workItemTypeKey,
|
|
270
|
+
work_item_id: String(workItemId),
|
|
271
|
+
...options?.pathParams,
|
|
272
|
+
},
|
|
273
|
+
query: Object.keys(mergedQuery).length > 0 ? mergedQuery : undefined,
|
|
274
|
+
auth: options?.auth,
|
|
275
|
+
idempotencyKey: options?.idempotencyKey,
|
|
276
|
+
timeout: options?.timeout,
|
|
277
|
+
skipRetry: options?.skipRetry,
|
|
278
|
+
});
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
//# sourceMappingURL=workflow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow.js","sourceRoot":"","sources":["../../../src/service/workitem/workflow.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 工时登记服务
|
|
3
|
+
* 100% 参考 Meego API 文档
|
|
4
|
+
*/
|
|
5
|
+
import { BaseService, type ServiceRequestOptions } from '../../core/base-service.js';
|
|
6
|
+
import type { CreateWorkHourRecordRequest, UpdateWorkHourRecordRequest, DeleteWorkHourRecordRequest, ListWorkHourRecordsRequest, WorkHourRecord } from '../../types/workitem.js';
|
|
7
|
+
import type { PaginatedResult } from '../../types/common.js';
|
|
8
|
+
/** API 路径 */
|
|
9
|
+
export declare const API_PATHS: {
|
|
10
|
+
/** 创建实际工时 */
|
|
11
|
+
CREATE: string;
|
|
12
|
+
/** 更新实际工时(批量) */
|
|
13
|
+
UPDATE: string;
|
|
14
|
+
/** 删除实际工时(批量) */
|
|
15
|
+
DELETE: string;
|
|
16
|
+
/** 获取工作项的工时记录列表 */
|
|
17
|
+
LIST: string;
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* 工时登记服务
|
|
21
|
+
*/
|
|
22
|
+
export declare class WorkHourService extends BaseService {
|
|
23
|
+
/**
|
|
24
|
+
* 创建工时登记记录
|
|
25
|
+
*
|
|
26
|
+
* @param projectKey 空间 ID 或域名
|
|
27
|
+
* @param workItemTypeKey 工作项类型 key
|
|
28
|
+
* @param workItemId 工作项 ID
|
|
29
|
+
* @param request 创建请求
|
|
30
|
+
* @param options 请求选项
|
|
31
|
+
* @returns 新建工时记录列表
|
|
32
|
+
*/
|
|
33
|
+
create(projectKey: string, workItemTypeKey: string, workItemId: number, request: CreateWorkHourRecordRequest, options?: ServiceRequestOptions<WorkHourRecord[]>): Promise<WorkHourRecord[]>;
|
|
34
|
+
/**
|
|
35
|
+
* 更新工时登记记录
|
|
36
|
+
*
|
|
37
|
+
* @param projectKey 空间 ID 或域名
|
|
38
|
+
* @param workItemTypeKey 工作项类型 key
|
|
39
|
+
* @param workItemId 工作项 ID
|
|
40
|
+
* @param request 更新请求
|
|
41
|
+
* @param options 请求选项
|
|
42
|
+
*/
|
|
43
|
+
update(projectKey: string, workItemTypeKey: string, workItemId: number, request: UpdateWorkHourRecordRequest, options?: ServiceRequestOptions<void>): Promise<void>;
|
|
44
|
+
/**
|
|
45
|
+
* 删除工时登记记录
|
|
46
|
+
*
|
|
47
|
+
* @param projectKey 空间 ID 或域名
|
|
48
|
+
* @param workItemTypeKey 工作项类型 key
|
|
49
|
+
* @param workItemId 工作项 ID
|
|
50
|
+
* @param request 删除请求
|
|
51
|
+
* @param options 请求选项
|
|
52
|
+
*/
|
|
53
|
+
deleteRecords(projectKey: string, workItemTypeKey: string, workItemId: number, request: DeleteWorkHourRecordRequest, options?: ServiceRequestOptions<void>): Promise<void>;
|
|
54
|
+
/**
|
|
55
|
+
* 获取工作项的工时登记记录列表
|
|
56
|
+
*
|
|
57
|
+
* @param request 查询请求
|
|
58
|
+
* @param options 请求选项
|
|
59
|
+
* @returns 分页的工时记录列表
|
|
60
|
+
*/
|
|
61
|
+
list(request: ListWorkHourRecordsRequest, options?: ServiceRequestOptions<WorkHourRecord>): Promise<PaginatedResult<WorkHourRecord>>;
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=workhour.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workhour.d.ts","sourceRoot":"","sources":["../../../src/service/workitem/workhour.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,WAAW,EAAE,KAAK,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACrF,OAAO,KAAK,EACV,2BAA2B,EAC3B,2BAA2B,EAC3B,2BAA2B,EAC3B,0BAA0B,EAC1B,cAAc,EACf,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE7D,aAAa;AACb,eAAO,MAAM,SAAS;IACpB,aAAa;;IAEb,iBAAiB;;IAEjB,iBAAiB;;IAEjB,mBAAmB;;CAEpB,CAAC;AAEF;;GAEG;AACH,qBAAa,eAAgB,SAAQ,WAAW;IAC9C;;;;;;;;;OASG;IACG,MAAM,CACV,UAAU,EAAE,MAAM,EAClB,eAAe,EAAE,MAAM,EACvB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,2BAA2B,EACpC,OAAO,CAAC,EAAE,qBAAqB,CAAC,cAAc,EAAE,CAAC,GAChD,OAAO,CAAC,cAAc,EAAE,CAAC;IAY5B;;;;;;;;OAQG;IACG,MAAM,CACV,UAAU,EAAE,MAAM,EAClB,eAAe,EAAE,MAAM,EACvB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,2BAA2B,EACpC,OAAO,CAAC,EAAE,qBAAqB,CAAC,IAAI,CAAC,GACpC,OAAO,CAAC,IAAI,CAAC;IAYhB;;;;;;;;OAQG;IACG,aAAa,CACjB,UAAU,EAAE,MAAM,EAClB,eAAe,EAAE,MAAM,EACvB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,2BAA2B,EACpC,OAAO,CAAC,EAAE,qBAAqB,CAAC,IAAI,CAAC,GACpC,OAAO,CAAC,IAAI,CAAC;IAYhB;;;;;;OAMG;IACG,IAAI,CACR,OAAO,EAAE,0BAA0B,EACnC,OAAO,CAAC,EAAE,qBAAqB,CAAC,cAAc,CAAC,GAC9C,OAAO,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC;CAG5C"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 工时登记服务
|
|
3
|
+
* 100% 参考 Meego API 文档
|
|
4
|
+
*/
|
|
5
|
+
import { BaseService } from '../../core/base-service.js';
|
|
6
|
+
/** API 路径 */
|
|
7
|
+
export const API_PATHS = {
|
|
8
|
+
/** 创建实际工时 */
|
|
9
|
+
CREATE: '/open_api/:project_key/work_item/:work_item_type_key/:work_item_id/work_hour_record',
|
|
10
|
+
/** 更新实际工时(批量) */
|
|
11
|
+
UPDATE: '/open_api/:project_key/work_item/:work_item_type_key/:work_item_id/work_hour_record',
|
|
12
|
+
/** 删除实际工时(批量) */
|
|
13
|
+
DELETE: '/open_api/:project_key/work_item/:work_item_type_key/:work_item_id/work_hour_record',
|
|
14
|
+
/** 获取工作项的工时记录列表 */
|
|
15
|
+
LIST: '/open_api/work_item/man_hour/records',
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* 工时登记服务
|
|
19
|
+
*/
|
|
20
|
+
export class WorkHourService extends BaseService {
|
|
21
|
+
/**
|
|
22
|
+
* 创建工时登记记录
|
|
23
|
+
*
|
|
24
|
+
* @param projectKey 空间 ID 或域名
|
|
25
|
+
* @param workItemTypeKey 工作项类型 key
|
|
26
|
+
* @param workItemId 工作项 ID
|
|
27
|
+
* @param request 创建请求
|
|
28
|
+
* @param options 请求选项
|
|
29
|
+
* @returns 新建工时记录列表
|
|
30
|
+
*/
|
|
31
|
+
async create(projectKey, workItemTypeKey, workItemId, request, options) {
|
|
32
|
+
return this.post(API_PATHS.CREATE, request, {
|
|
33
|
+
...options,
|
|
34
|
+
pathParams: {
|
|
35
|
+
project_key: projectKey,
|
|
36
|
+
work_item_type_key: workItemTypeKey,
|
|
37
|
+
work_item_id: String(workItemId),
|
|
38
|
+
...options?.pathParams,
|
|
39
|
+
},
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* 更新工时登记记录
|
|
44
|
+
*
|
|
45
|
+
* @param projectKey 空间 ID 或域名
|
|
46
|
+
* @param workItemTypeKey 工作项类型 key
|
|
47
|
+
* @param workItemId 工作项 ID
|
|
48
|
+
* @param request 更新请求
|
|
49
|
+
* @param options 请求选项
|
|
50
|
+
*/
|
|
51
|
+
async update(projectKey, workItemTypeKey, workItemId, request, options) {
|
|
52
|
+
await this.put(API_PATHS.UPDATE, request, {
|
|
53
|
+
...options,
|
|
54
|
+
pathParams: {
|
|
55
|
+
project_key: projectKey,
|
|
56
|
+
work_item_type_key: workItemTypeKey,
|
|
57
|
+
work_item_id: String(workItemId),
|
|
58
|
+
...options?.pathParams,
|
|
59
|
+
},
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* 删除工时登记记录
|
|
64
|
+
*
|
|
65
|
+
* @param projectKey 空间 ID 或域名
|
|
66
|
+
* @param workItemTypeKey 工作项类型 key
|
|
67
|
+
* @param workItemId 工作项 ID
|
|
68
|
+
* @param request 删除请求
|
|
69
|
+
* @param options 请求选项
|
|
70
|
+
*/
|
|
71
|
+
async deleteRecords(projectKey, workItemTypeKey, workItemId, request, options) {
|
|
72
|
+
await this.deleteWithBody(API_PATHS.DELETE, request, {
|
|
73
|
+
...options,
|
|
74
|
+
pathParams: {
|
|
75
|
+
project_key: projectKey,
|
|
76
|
+
work_item_type_key: workItemTypeKey,
|
|
77
|
+
work_item_id: String(workItemId),
|
|
78
|
+
...options?.pathParams,
|
|
79
|
+
},
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* 获取工作项的工时登记记录列表
|
|
84
|
+
*
|
|
85
|
+
* @param request 查询请求
|
|
86
|
+
* @param options 请求选项
|
|
87
|
+
* @returns 分页的工时记录列表
|
|
88
|
+
*/
|
|
89
|
+
async list(request, options) {
|
|
90
|
+
return this.postPaginated(API_PATHS.LIST, request, options);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=workhour.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workhour.js","sourceRoot":"","sources":["../../../src/service/workitem/workhour.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,WAAW,EAA8B,MAAM,4BAA4B,CAAC;AAUrF,aAAa;AACb,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,aAAa;IACb,MAAM,EAAE,qFAAqF;IAC7F,iBAAiB;IACjB,MAAM,EAAE,qFAAqF;IAC7F,iBAAiB;IACjB,MAAM,EAAE,qFAAqF;IAC7F,mBAAmB;IACnB,IAAI,EAAE,sCAAsC;CAC7C,CAAC;AAEF;;GAEG;AACH,MAAM,OAAO,eAAgB,SAAQ,WAAW;IAC9C;;;;;;;;;OASG;IACH,KAAK,CAAC,MAAM,CACV,UAAkB,EAClB,eAAuB,EACvB,UAAkB,EAClB,OAAoC,EACpC,OAAiD;QAEjD,OAAO,IAAI,CAAC,IAAI,CAAmB,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE;YAC5D,GAAG,OAAO;YACV,UAAU,EAAE;gBACV,WAAW,EAAE,UAAU;gBACvB,kBAAkB,EAAE,eAAe;gBACnC,YAAY,EAAE,MAAM,CAAC,UAAU,CAAC;gBAChC,GAAG,OAAO,EAAE,UAAU;aACvB;SACF,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,MAAM,CACV,UAAkB,EAClB,eAAuB,EACvB,UAAkB,EAClB,OAAoC,EACpC,OAAqC;QAErC,MAAM,IAAI,CAAC,GAAG,CAAO,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE;YAC9C,GAAG,OAAO;YACV,UAAU,EAAE;gBACV,WAAW,EAAE,UAAU;gBACvB,kBAAkB,EAAE,eAAe;gBACnC,YAAY,EAAE,MAAM,CAAC,UAAU,CAAC;gBAChC,GAAG,OAAO,EAAE,UAAU;aACvB;SACF,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,aAAa,CACjB,UAAkB,EAClB,eAAuB,EACvB,UAAkB,EAClB,OAAoC,EACpC,OAAqC;QAErC,MAAM,IAAI,CAAC,cAAc,CAAO,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE;YACzD,GAAG,OAAO;YACV,UAAU,EAAE;gBACV,WAAW,EAAE,UAAU;gBACvB,kBAAkB,EAAE,eAAe;gBACnC,YAAY,EAAE,MAAM,CAAC,UAAU,CAAC;gBAChC,GAAG,OAAO,EAAE,UAAU;aACvB;SACF,CAAC,CAAC;IACL,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,IAAI,CACR,OAAmC,EACnC,OAA+C;QAE/C,OAAO,IAAI,CAAC,aAAa,CAAiB,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAC9E,CAAC;CACF"}
|