Files
cn-rdms-web/src/typings/api/product.d.ts

429 lines
11 KiB
TypeScript
Raw Normal View History

declare namespace Api {
/**
* namespace Product
*
* backend api module: "project/product"
*/
namespace Product {
type ProductStatusCode = 'active' | 'paused' | 'archived' | 'abandoned';
type ProductStatusActionCode = 'pause' | 'resume' | 'archive' | 'abandon';
type ProductMemberStatus = 0 | 1;
interface PageParams {
pageNo: number;
pageSize: number;
}
interface PageResult<T = any> {
total: number;
list: T[];
}
interface Product {
/** 产品 ID */
id: string;
/** 产品编码 */
code: string;
/** 产品方向字典值 */
directionCode: string;
/** 产品名称 */
name: string;
/** 产品经理用户 ID */
managerUserId: string;
/** 产品描述 */
description?: string | null;
/** 产品状态编码 */
statusCode: ProductStatusCode;
/** 最近一次状态动作原因 */
lastStatusReason?: string | null;
/** 备注 */
remark?: string | null;
/** 创建时间 */
createTime: string;
/** 更新时间 */
updateTime: string;
}
interface ProductSettingBaseInfo {
/** 产品 ID */
id: string;
/** 产品编码 */
code: string;
/** 产品方向字典值 */
directionCode: string;
/** 产品名称 */
name: string;
/** 产品经理用户 ID */
managerUserId: string;
/** 产品经理昵称 */
managerUserNickname: string;
/** 产品描述 */
description?: string | null;
/** 当前产品状态 */
statusCode: ProductStatusCode;
/** 最近一次状态动作原因 */
lastStatusReason?: string | null;
}
interface ProductLifecycleAction {
actionCode: ProductStatusActionCode;
actionName: string;
needReason: boolean;
}
interface ProductLifecycleInfo {
statusCode: ProductStatusCode;
lastStatusReason?: string | null;
availableActions: ProductLifecycleAction[];
}
interface ProductSettings {
baseInfo: ProductSettingBaseInfo;
lifecycle: ProductLifecycleInfo;
}
interface ProductMember {
/** 团队关系 ID */
id: string;
/** 用户 ID */
userId: string;
/** 用户昵称 */
userNickname: string;
/** 角色 ID */
roleId: string;
/** 角色名称 */
roleName: string;
/** 角色编码 */
roleCode: string;
/** 是否当前产品经理 */
managerFlag: boolean;
/** 成员状态 */
status: ProductMemberStatus;
/** 加入时间 */
joinedTime: string;
/** 退出时间 */
leftTime?: string | null;
/** 备注 */
remark?: string | null;
}
type ProductActivityType = 'status' | 'product' | 'member';
type ProductActivityActionType =
| 'create'
| 'change_manager'
| 'pause'
| 'resume'
| 'archive'
| 'abandon'
| 'add_member'
| 'update_member'
| 'remove_member';
interface ProductActivityTimelinePageParams extends PageParams {
/** 分类 */
activityType?: ProductActivityType | null;
/** 动作编码数组,多选时按重复 query 参数传递 */
actionTypes?: ProductActivityActionType[] | null;
/** 开始时间,格式 yyyy-MM-dd HH:mm:ss */
startTime?: string | null;
/** 结束时间,格式 yyyy-MM-dd HH:mm:ss */
endTime?: string | null;
}
interface ProductActivityTimelineItem {
/** 动态唯一标识 */
id: string;
/** 动态类型 */
type: ProductActivityType;
/** 动作编码 */
actionType: ProductActivityActionType;
/** 动作中文名称 */
actionName: string;
/** 操作人用户 ID */
operatorUserId?: string | null;
/** 操作人名称 */
operatorName: string;
/** 目标用户 ID成员类动态使用 */
targetUserId?: string | null;
/** 目标用户名称,成员类动态使用 */
targetUserName?: string | null;
/** 动态发生时间,毫秒时间戳 */
occurredAt: number;
/** 可直接展示的摘要文案 */
summary: string;
/** 原因说明 */
reason?: string | null;
/** 原状态编码 */
fromStatus?: ProductStatusCode | null;
/** 目标状态编码 */
toStatus?: ProductStatusCode | null;
/** 补充明细,当前为 JSON 字符串 */
details?: string | null;
}
type ProductSearchParams = CommonType.RecordNullable<
Pick<PageParams, 'pageNo' | 'pageSize'> &
Pick<Product, 'directionCode' | 'managerUserId' | 'statusCode'> & {
keyword: string;
updateTime: string[];
}
>;
type SaveProductParams = Pick<Product, 'directionCode' | 'name' | 'managerUserId'> & {
code?: string | null;
description?: string | null;
remark?: string | null;
};
type UpdateProductParams = { id: string } & SaveProductParams;
interface ChangeProductStatusParams {
id: string;
actionCode: ProductStatusActionCode;
reason?: string | null;
}
interface DeleteProductParams {
id: string;
productName: string;
reason: string;
}
type UpdateProductSettingBaseInfoParams = Pick<ProductSettingBaseInfo, 'directionCode' | 'name'> & {
description?: string | null;
};
interface CreateProductMemberParams {
userId: string;
roleId: string;
remark?: string | null;
previousManagerUserId?: string | null;
previousManagerRoleId?: string | null;
}
interface UpdateProductMemberParams {
roleId: string;
remark?: string | null;
reason?: string | null;
previousManagerUserId?: string | null;
previousManagerRoleId?: string | null;
}
interface InactiveProductMemberParams {
reason?: string | null;
}
// ========== 产品需求相关类型定义 ==========
/** 需求状态编码 */
type RequirementStatusCode =
| 'pending_confirm'
| 'pending_review'
| 'pending_dispatch'
| 'implementing'
| 'accepted'
| 'closed'
| 'rejected'
| 'cancelled';
/** 需求来源类型 */
type RequirementSourceType = 'manual' | 'work_order';
/** 需求优先级 */
type RequirementPriority = 0 | 1 | 2 | 3;
/** 是否需要评审 */
type RequirementReviewRequired = 0 | 1;
// ========== 需求实体 ==========
interface Requirement {
/** 需求编号 */
id: string;
/** 产品 ID */
productId: string;
/** 父需求编号0表示顶级需求 */
parentId: string;
/** 所属模块编号 */
moduleId: string;
/** 是否需要评审0不需要1需要 */
reviewRequired: RequirementReviewRequired;
/** 需求标题 */
title: string;
/** 需求描述(富文本) */
description?: string | null;
/** 需求分类字典值 */
category: string;
/** 需求分类名称 */
categoryName?: string | null;
/** 来源类型 */
sourceType: RequirementSourceType;
/** 来源业务ID */
sourceBizId?: string | null;
/** 优先级0低 1中 2高 3紧急 */
priority: RequirementPriority;
/** 优先级名称 */
priorityName?: string | null;
/** 当前状态编码 */
statusCode: RequirementStatusCode;
/** 当前状态名称 */
statusName?: string | null;
/** 最近一次状态动作原因 */
lastStatusReason?: string | null;
/** 提出人用户编号 */
proposerId: string;
/** 提出人用户姓名 */
proposerNickname?: string | null;
/** 当前处理人用户编号 */
currentHandlerUserId?: string | null;
/** 当前处理人姓名 */
currentHandlerUserNickname?: string | null;
/** 默认实现项目编号 */
implementProjectId?: string | null;
/** 实现项目名称 */
implementProjectName?: string | null;
/** 预期完成时间 */
completionDate: string;
/** 排序值 */
sort: number;
/** 创建时间 */
createTime: string;
/** 更新时间 */
updateTime: string;
/** 子需求列表(树形结构) */
children?: Requirement[];
/** 是否为终态 */
terminal?: boolean;
}
// ========== 需求模块实体 ==========
interface RequirementModule {
/** 模块编号 */
id: string | undefined;
/** 父模块编号0表示顶级 */
parentId: string | undefined;
/** 所属产品编号 */
productId: string;
/** 模块名称 */
moduleName: string;
/** 模块说明 */
remark?: string | null;
/** 图标 */
icon?: string | null;
/** 排序值 */
sort: number;
/** 子模块列表 */
children?: RequirementModule[];
}
// ========== 需求生命周期 ==========
interface RequirementLifecycleAction {
actionCode: string;
actionName: string;
toStatusCode: string;
toStatusName: string;
needReason: boolean;
}
interface RequirementLifecycleInfo {
statusCode: RequirementStatusCode;
statusName?: string | null;
lastStatusReason?: string | null;
terminal: boolean;
allowEdit: boolean;
availableActions: RequirementLifecycleAction[];
}
// ========== 请求参数类型 ==========
/** 需求分页查询参数 */
type RequirementSearchParams = CommonType.RecordNullable<
Pick<PageParams, 'pageNo' | 'pageSize'> &
Pick<
Requirement,
'moduleId' | 'category' | 'priority' | 'statusCode' | 'currentHandlerUserId' | 'sourceType'
> & {
productId: string;
title?: string;
}
>;
/** 创建需求参数 */
type SaveRequirementParams = Pick<
Requirement,
| 'productId'
| 'moduleId'
| 'reviewRequired'
| 'title'
| 'description'
| 'category'
| 'priority'
| 'proposerId'
| 'currentHandlerUserId'
| 'implementProjectId'
| 'completionDate'
| 'sort'
>;
/** 更新需求参数 */
type UpdateRequirementParams = { id: string } & SaveRequirementParams;
/** 变更需求状态参数 */
interface ChangeRequirementStatusParams {
id: string;
productId: string;
actionCode: string;
reason?: string | null;
implementProjectId?: string | null;
}
/** 关闭需求参数 */
interface CloseRequirementParams {
id: string;
productId: string;
reason: string;
}
/** 拆分需求参数 */
type SplitRequirementParams = Pick<
Requirement,
| 'parentId'
| 'productId'
| 'moduleId'
| 'reviewRequired'
| 'title'
| 'description'
| 'category'
| 'priority'
| 'proposerId'
| 'currentHandlerUserId'
| 'completionDate'
| 'sort'
>;
/** 删除需求参数 */
interface DeleteRequirementParams {
id: string;
productId: string;
}
// ========== 模块请求参数 ==========
/** 保存模块参数 */
type SaveRequirementModuleParams = Pick<
RequirementModule,
'id' | 'productId' | 'parentId' | 'moduleName' | 'remark' | 'icon' | 'sort'
>;
/** 删除模块参数 */
interface DeleteRequirementModuleParams {
id: string | undefined;
productId: string;
}
}
}