搜索结果列表页面开发
This commit is contained in:
218
src/api/issue/index.ts
Normal file
218
src/api/issue/index.ts
Normal file
@@ -0,0 +1,218 @@
|
||||
import request from '@/utils/request';
|
||||
import * as types from '@/api/issue/types';
|
||||
import { reqCatch, reqCatchV2, type catchRt } from '@/utils/catch';
|
||||
|
||||
export function createIssue(data: types.createIssueReqType): Promise<types.createIssueResType> {
|
||||
return request({
|
||||
url: `/api/v1/issue/${data.project_id}/issues`,
|
||||
method: 'post',
|
||||
data
|
||||
});
|
||||
}
|
||||
export function deleteIssue(params: types.createIssueReqType): Promise<types.createIssueResType> {
|
||||
return request({
|
||||
url: `/api/v1/issue/${params.project_id}/issues/${params.issue_iid}`,
|
||||
method: 'delete'
|
||||
});
|
||||
}
|
||||
|
||||
export function updateIssue(data: types.updateIssueReqType): Promise<types.updateIssueResType> {
|
||||
const { project_id, issue_iid } = data;
|
||||
delete data.project_id;
|
||||
delete data.issue_iid;
|
||||
return request({
|
||||
url: `/api/v1/issue/${project_id}/issues/${issue_iid}`,
|
||||
method: 'put',
|
||||
data
|
||||
});
|
||||
}
|
||||
|
||||
// 关闭或打开issue
|
||||
export function updateIssueStat(data: types.updateIssueStatReqType): Promise<types.updateIssueStatResType> {
|
||||
const { project_id, issue_iid } = data;
|
||||
delete data.project_id;
|
||||
delete data.issue_iid;
|
||||
return request({
|
||||
url: `/api/v1/issue/${project_id}/issues/${issue_iid}/close`,
|
||||
method: 'put',
|
||||
data
|
||||
});
|
||||
}
|
||||
|
||||
export function fetchIssue(params: types.fetchIssueReqType): Promise<types.fetchIssueResType> {
|
||||
return request({
|
||||
url: `/api/v1/issue/${params.project_id}/issues/${params.issue_iid}`,
|
||||
method: 'get'
|
||||
});
|
||||
}
|
||||
|
||||
// 项目issue列表
|
||||
export function fetchIssueList(params: types.fetchIssueListReqType): Promise<types.fetchIssueListResType> {
|
||||
return request({
|
||||
url: `/api/v1/issue/${params.project_id}/issues`,
|
||||
method: 'get',
|
||||
params
|
||||
});
|
||||
}
|
||||
|
||||
export function createIssueDiscussions(data: types.createIssueDiscussionsReqType): Promise<types.createIssueDiscussionsResType> {
|
||||
return request({
|
||||
url: `/api/v1/issue/${data.project_id}/issues/${data.issue_iid}/discussions`,
|
||||
method: 'post',
|
||||
data
|
||||
});
|
||||
}
|
||||
|
||||
export function updateIssueDiscussions(data: types.updateIssueDiscussionsReqType): Promise<types.updateIssueDiscussionsResType> {
|
||||
return request({
|
||||
url: `/api/v1/projects/${data.project_id}/issues/${data.issue_iid}/notes/${data.note_id}`,
|
||||
method: 'put',
|
||||
data
|
||||
});
|
||||
}
|
||||
|
||||
export function deleteIssueDiscussions(params: types.deleteIssueDiscussionsReqType): Promise<types.deleteIssueDiscussionsResType> {
|
||||
return request({
|
||||
url: `/api/v1/projects/${params.project_id}/issues/${params.issue_iid}/notes/${params.note_id}`,
|
||||
method: 'delete',
|
||||
params
|
||||
});
|
||||
}
|
||||
|
||||
export function fetchIssueDiscussions(params: types.fetchIssueDiscussionsResType): Promise<types.fetchIssueDiscussionsResType> {
|
||||
return request({
|
||||
url: `/api/v1/issue/${params.project_id}/issues/${params.issue_iid}/discussions`,
|
||||
method: 'get',
|
||||
params
|
||||
});
|
||||
}
|
||||
// 获取issue单条评论
|
||||
export function fetchIssueNote(params: types.fetchIssueDiscussionsResType): Promise<types.fetchIssueDiscussionsResType> {
|
||||
return request({
|
||||
url: `/api/v1/projects/${params.project_id}/issues/${params.issue_iid}/notes/${params.note_id}`,
|
||||
method: 'get'
|
||||
});
|
||||
}
|
||||
|
||||
// 回复issue评论
|
||||
export function freplyIssueDiscussions(data: types.createIssueReqType): Promise<types.createIssueResType> {
|
||||
return request({
|
||||
url: `/api/v1/issue/api/v4/projects/${data.project_id}/issues/${data.issue_iid}/discussions/${data.discussion_id}/notes`,
|
||||
method: 'post',
|
||||
data
|
||||
});
|
||||
}
|
||||
|
||||
// issue参与者
|
||||
export function issueParticipants(data: types.issueParticipantsResType): Promise<types.issueParticipantsReqType> {
|
||||
return request({
|
||||
url: `/api/v1/issue/${data.project_id}/issues/${data.issue_iid}/participants`,
|
||||
method: 'get'
|
||||
});
|
||||
}
|
||||
|
||||
// issue 精选
|
||||
export function pinIssue(params: types.pinIssueReqType): Promise<types.pinIssueResType> {
|
||||
return request({
|
||||
url: `/api/v1/featured/${params.type}`,
|
||||
method: 'post',
|
||||
params
|
||||
});
|
||||
}
|
||||
|
||||
export function deletePinIssue(params: types.deletePinIssueReqType): Promise<types.deletePinIssueResType> {
|
||||
return request({
|
||||
url: `/api/v1/featured/${params.type}`,
|
||||
method: 'delete',
|
||||
params
|
||||
});
|
||||
}
|
||||
|
||||
// 精选排序
|
||||
export function sortPinIssue(data): Promise<types.pinIssueListResType> {
|
||||
const { type, group_id, body } = data;
|
||||
return request({
|
||||
url: `/api/v1/featured/${type}/resort?group_id=${group_id}`,
|
||||
method: 'put',
|
||||
data: body
|
||||
});
|
||||
}
|
||||
|
||||
export function pinIssueList(params: types.pinIssueListReqType): Promise<types.pinIssueListResType> {
|
||||
return request({
|
||||
url: `/api/v1/featured/projects/${params.project_id}/issues`,
|
||||
method: 'get'
|
||||
});
|
||||
}
|
||||
|
||||
// 我的issue列表
|
||||
export function myIssueList(params: types.fetchIssueListReqType): Promise<types.fetchIssueListResType> {
|
||||
return request({
|
||||
url: `/api/v1/issues`,
|
||||
method: 'get',
|
||||
params
|
||||
});
|
||||
}
|
||||
|
||||
// 我的issue列表数量
|
||||
export function myIssueListState(params: types.myIssueListStateReptype): Promise<types.myIssueListStateRestype> {
|
||||
return request({
|
||||
url: `/api/v1/issues/statistics`,
|
||||
method: 'get',
|
||||
params
|
||||
});
|
||||
}
|
||||
// 组织的issue列表
|
||||
export function groupIssueList(params: types.fetchIssueListResType): Promise<types.fetchIssueListResType> {
|
||||
const { group_id } = params;
|
||||
delete params.group_id;
|
||||
return request({
|
||||
url: `/api/v1/groups/${group_id}/issues`,
|
||||
method: 'get',
|
||||
params
|
||||
});
|
||||
}
|
||||
// 获取issue关联的PR列表
|
||||
export function getIssuePRList(params: types.fetchIssueListResType): Promise<types.fetchIssueListResType> {
|
||||
const { project_id, issue_iid } = params;
|
||||
delete params.project_id;
|
||||
delete params.issue_iid;
|
||||
return request({
|
||||
url: `/api/v1/issue/${project_id}/issues/${issue_iid}/linked_merge_requests`,
|
||||
method: 'get',
|
||||
params
|
||||
});
|
||||
}
|
||||
// issue关联PR
|
||||
export function issueRelatePR(data: types.updateIssueReqType): Promise<types.fetchIssueListResType> {
|
||||
return reqCatch(
|
||||
() => request({
|
||||
url: `/api/v1/issue/${data.project_id}/issues/${data.issue_id}/merge_request/${data.merge_request_id}/linked_merge_requests`,
|
||||
method: 'post'
|
||||
})
|
||||
,
|
||||
data
|
||||
);
|
||||
}
|
||||
// issue取消关联PR
|
||||
export function issueDeletePR(params: types.updateIssueReqType): Promise<types.fetchIssueListResType> {
|
||||
return reqCatch(
|
||||
() => request({
|
||||
url: `/api/v1/issue/${params.project_id}/issues/${params.issue_id}/linked_merge_requests/${params.merge_request_id}`,
|
||||
method: 'delete'
|
||||
})
|
||||
,
|
||||
params
|
||||
);
|
||||
}
|
||||
|
||||
// 获取issue模版列表
|
||||
export function fetchIssueTemplateList(project_id: string): Promise<Record<string, any>> {
|
||||
return request({
|
||||
url: `/api/v2/projects/${project_id}/repository/template/issue`,
|
||||
method: 'get',
|
||||
params: {}
|
||||
}).catch((e) => {
|
||||
return { data: [], error_code: e };
|
||||
});
|
||||
}
|
||||
322
src/api/issue/types.ts
Normal file
322
src/api/issue/types.ts
Normal file
@@ -0,0 +1,322 @@
|
||||
export interface createIssueReqType {
|
||||
project_id?: string;
|
||||
issue_iid?: number;
|
||||
title?: string;
|
||||
description?: string;
|
||||
updated_at?: string;
|
||||
state_event?: 'reopen' | 'close';
|
||||
assignee_id?: number;
|
||||
assignee_ids?: string[];
|
||||
milestone_id?: number;
|
||||
labels?: ILabel[] | string[];
|
||||
due_date?: string;
|
||||
confidential?: boolean;
|
||||
discussion_locked?: true;
|
||||
created_at?: string;
|
||||
issue_category?: string;
|
||||
issue_stage?: string;
|
||||
issue_severity?: string;
|
||||
pbi_id?: number;
|
||||
proposer_id?: string[];
|
||||
[propName: string]: any;
|
||||
}
|
||||
|
||||
export interface createIssueResType extends IIssue {
|
||||
[propName: string]: any;
|
||||
}
|
||||
export interface deleteIssueReqType {
|
||||
project_id: string;
|
||||
issue_iid: number;
|
||||
[propName: string]: any;
|
||||
}
|
||||
|
||||
export interface deleteIssueResType {
|
||||
[propName: string]: any;
|
||||
}
|
||||
|
||||
export interface createIssueDiscussionsResType extends IIssue {
|
||||
[propName: string]: any;
|
||||
}
|
||||
|
||||
export interface createIssueDiscussionsReqType {
|
||||
project_id: string;
|
||||
issue_iid: number;
|
||||
[propName: string]: any;
|
||||
}
|
||||
|
||||
export interface fetchIssueResType {
|
||||
project_id: string;
|
||||
issue_iid: number;
|
||||
[propName: string]: any;
|
||||
}
|
||||
|
||||
export interface fetchIssueReqType extends IIssue {
|
||||
[propName: string]: any;
|
||||
}
|
||||
|
||||
export interface fetchIssueListReqType {
|
||||
project_id: string;
|
||||
state?: string;
|
||||
sort?: string;
|
||||
scope?: string;
|
||||
search?: string;
|
||||
page?: number;
|
||||
per_page?: number;
|
||||
[propName: string]: any;
|
||||
}
|
||||
|
||||
export interface fetchIssueListResType extends IIssue {
|
||||
[propName: string]: any;
|
||||
}
|
||||
|
||||
export interface myIssueListStateReptype {
|
||||
state: string;
|
||||
[propName: string]: any;
|
||||
}
|
||||
|
||||
export interface myIssueListStateRestype extends IIssue {
|
||||
[propName: string]: any;
|
||||
}
|
||||
|
||||
export interface issueParticipantsResType {
|
||||
project_id: string;
|
||||
issue_iid: number;
|
||||
[propName: string]: any;
|
||||
}
|
||||
|
||||
export interface issueParticipantsReqType extends IAuthor {
|
||||
[propName: string]: any;
|
||||
}
|
||||
|
||||
export interface fetchIssueDiscussionsResType {
|
||||
project_id: string;
|
||||
issue_iid: number;
|
||||
type: 'user';
|
||||
[propName: string]: any;
|
||||
}
|
||||
|
||||
export interface fetchIssueDiscussionsReqType extends Idiscussions {
|
||||
[propName: string]: any;
|
||||
}
|
||||
|
||||
export interface updateIssueReqType extends createIssueReqType {
|
||||
[propName: string]: any;
|
||||
}
|
||||
|
||||
export interface updateIssueResType extends IIssue {
|
||||
[propName: string]: any;
|
||||
}
|
||||
|
||||
export interface updateIssueStatReqType extends createIssueReqType {
|
||||
discussions?: string;
|
||||
[propName: string]: any;
|
||||
}
|
||||
|
||||
export interface updateIssueStatResType extends IIssue {
|
||||
[propName: string]: any;
|
||||
}
|
||||
|
||||
export interface updateIssueDiscussionsReqType {
|
||||
project_id: string;
|
||||
issue_iid: number;
|
||||
note_id: string;
|
||||
[propName: string]: any;
|
||||
}
|
||||
|
||||
export interface updateIssueDiscussionsResType {
|
||||
[propName: string]: any;
|
||||
}
|
||||
export interface deleteIssueDiscussionsReqType {
|
||||
project_id: string;
|
||||
issue_iid: number;
|
||||
note_id: string;
|
||||
[propName: string]: any;
|
||||
}
|
||||
|
||||
export interface deleteIssueDiscussionsResType {
|
||||
[propName: string]: any;
|
||||
}
|
||||
export interface pinIssueReqType {
|
||||
type: 'project_issue';
|
||||
resource_id: number | string;
|
||||
[propName: string]: any;
|
||||
}
|
||||
|
||||
export interface pinIssueResType {
|
||||
[propName: string]: any;
|
||||
}
|
||||
export interface deletePinIssueReqType {
|
||||
type: 'project_issue';
|
||||
group_id: string;
|
||||
resource_id: string;
|
||||
[propName: string]: any;
|
||||
}
|
||||
|
||||
export interface deletePinIssueResType {
|
||||
[propName: string]: any;
|
||||
}
|
||||
export interface sortPinIssueReqType {
|
||||
type: 'project_issue';
|
||||
group_id: string;
|
||||
body: string;
|
||||
[propName: string]: any;
|
||||
}
|
||||
|
||||
export interface sortPinIssueResType {
|
||||
[propName: string]: any;
|
||||
}
|
||||
export interface pinIssueListReqType {
|
||||
project_id: string;
|
||||
[propName: string]: any;
|
||||
}
|
||||
|
||||
export interface pinIssueListResType {
|
||||
object_id: string,
|
||||
type: string,
|
||||
resource_id: string,
|
||||
nextResource_id: string
|
||||
[propName: string]: any;
|
||||
}
|
||||
|
||||
// 用户
|
||||
export interface IAuthor {
|
||||
id: number;
|
||||
name: string;
|
||||
username: string;
|
||||
state: 'active' | string;
|
||||
avatar_url: string;
|
||||
avatar_path?: string;
|
||||
email?: string;
|
||||
name_cn: string;
|
||||
web_url: string;
|
||||
nick_name?: string;
|
||||
tenant_name?: string;
|
||||
avatar?: string;
|
||||
nickname?: string;
|
||||
is_member?: string;
|
||||
}
|
||||
|
||||
// 项目
|
||||
export interface IProject {
|
||||
id: number;
|
||||
description?: string;
|
||||
name: string;
|
||||
name_with_namespace: string;
|
||||
path: string;
|
||||
path_with_namespace: string;
|
||||
develop_mode?: 'normal' | string;
|
||||
created_at: string;
|
||||
updated_at?: string;
|
||||
archived: false;
|
||||
is_kia: false;
|
||||
ssh_url_to_repo: string;
|
||||
http_url_to_repo: string;
|
||||
web_url: string;
|
||||
readme_url?: string;
|
||||
product_id?: string;
|
||||
product_name?: string;
|
||||
}
|
||||
|
||||
// issue
|
||||
export interface IIssue {
|
||||
id?: number;
|
||||
iid?: number;
|
||||
project_id?: number;
|
||||
title?: string;
|
||||
description?: string;
|
||||
editIng?: boolean;
|
||||
saveIng?: boolean;
|
||||
editText?: string;
|
||||
state?: 'opened' | 'closed' | 'all';
|
||||
created_at?: string;
|
||||
updated_at?: string;
|
||||
closed_at?: string;
|
||||
closed_by?: string;
|
||||
labels?: ILabel[];
|
||||
milestone?: string;
|
||||
assignees?: [];
|
||||
author?: IAuthor;
|
||||
assignee?: string;
|
||||
user_notes_count?: number;
|
||||
merge_requests_count?: number;
|
||||
confidential?: boolean;
|
||||
discussion_locked?: boolean;
|
||||
web_url?: string;
|
||||
time_stats?: {
|
||||
time_estimate?: string
|
||||
total_time_spent?: string
|
||||
human_time_estimate?: string
|
||||
human_total_time_spent?: string
|
||||
};
|
||||
project_path_with_namespace?: string;
|
||||
project?: IProject;
|
||||
root_project_id?: string;
|
||||
subscribed?: boolean;
|
||||
related_merge_request?: string;
|
||||
linked_merge_requests?: [];
|
||||
related_note_params?: null;
|
||||
[propName: string]: any;
|
||||
}
|
||||
|
||||
// 评论
|
||||
export interface INote {
|
||||
id: number | string;
|
||||
type: 'DiscussionNote' | string;
|
||||
body: string;
|
||||
attachment?: null;
|
||||
author: IAuthor;
|
||||
created_at: string;
|
||||
updated_at: string;
|
||||
system?: boolean;
|
||||
noteable_id: number;
|
||||
noteable_type: 'Issue' | string;
|
||||
commit_id?: string;
|
||||
resolvable?: boolean;
|
||||
is_reply?: boolean;
|
||||
resolved_by?: null;
|
||||
noteable_iid: number;
|
||||
discussion_id: string;
|
||||
project: string;
|
||||
diff_file?: null;
|
||||
diff: string;
|
||||
archived: boolean;
|
||||
review_categories?: null;
|
||||
review_categories_cn: string;
|
||||
review_categories_en: string;
|
||||
review_modules?: null;
|
||||
severity: 'suggestion';
|
||||
severity_cn: '建议' | string;
|
||||
severity_en: 'Suggestion' | string;
|
||||
file_path?: string;
|
||||
line?: string;
|
||||
assignee?: string;
|
||||
proposer: IAuthor;
|
||||
}
|
||||
|
||||
// 评论
|
||||
export interface Idiscussions extends INote {
|
||||
id: string | number,
|
||||
individual_note?: boolean,
|
||||
notes: INote[],
|
||||
project_id: number,
|
||||
project_full_path: string,
|
||||
deleted_file?: null,
|
||||
new_file?: null,
|
||||
added_lines?: null,
|
||||
removed_lines?: null,
|
||||
issue?: null,
|
||||
merge_request_version_params?: null,
|
||||
amode?: null,
|
||||
bmode?: null
|
||||
}
|
||||
|
||||
// 标签
|
||||
export interface ILabel {
|
||||
color: string;
|
||||
description: string;
|
||||
expires_at?: string
|
||||
id: number
|
||||
is_expired: boolean;
|
||||
name: string;
|
||||
text_color: string;
|
||||
}
|
||||
Reference in New Issue
Block a user