feat(project): init

This commit is contained in:
2026-02-03 18:05:47 +08:00
commit f37a119eff
188 changed files with 29246 additions and 0 deletions

View File

@@ -0,0 +1,139 @@
import httpFetch from "@/api/fetch"
import {
LabelResult,
LoginInfo,
RequestLabelResult,
ServerResponse,
} from "./typing"
import { usePermissionStore } from "../../store/auth"
export const BASE_LABEL_API = "https://label.cowarobot.com"
// 获取标注结果
export const getLabelResult = (task_id: number) => {
return httpFetch<{
task_id: number
results: LabelResult[]
}>({
url:
BASE_LABEL_API +
`/api/v1/label_server/task/label_result?task_id=${task_id}`,
method: "get",
headerAttr: {
["Token"]: usePermissionStore.getState().token,
["Refresh-Token"]: usePermissionStore.getState().refresh_token,
},
})
}
export const saveLabelResult = (data: RequestLabelResult) => {
return httpFetch({
url: BASE_LABEL_API + "/api/v1/label_server/task/label_result",
method: "post",
body: JSON.stringify(data),
})
}
export const getServerImage = async (data: {
data_names: string[]
/**
* 0-图片 1-点云
*/
data_type: number
flag?: number
project_id: number
}) => {
return new Promise((resolve, reject) => {
httpFetch<ServerResponse>({
url: BASE_LABEL_API + "/api/v1/label_server/data/list",
method: "post",
body: JSON.stringify(data),
headerAttr: {
["Token"]: usePermissionStore.getState().token,
["Refresh-Token"]: usePermissionStore.getState().refresh_token,
},
}).then((res) => {
if (res.proxy) {
reject({ proxy: res.proxy, params: data })
} else {
if (res.data_list && res.data_list.length) {
const { image_data } = res.data_list[0]
resolve({ image_data })
}
}
})
})
.then(({ image_data }: any) => {
return image_data
})
.catch(async ({ proxy, params }) => {
try {
const res = await httpFetch<ServerResponse>({
url: `/http://${proxy}:9112/api/v1/label_sync/get_data_list`,
method: "post",
body: JSON.stringify(params),
})
return res.data.data_list?.[0].image_data || ""
} catch (error: unknown) {
console.log(error)
const res = await httpFetch<ServerResponse>({
url: BASE_LABEL_API + "/api/v1/label_server/data/list",
method: "post",
body: JSON.stringify({ ...params, flag: 1 }),
headerAttr: {
["Token"]: usePermissionStore.getState().token,
["Refresh-Token"]: usePermissionStore.getState().refresh_token,
},
})
return res.data_list?.[0].image_data || ""
}
})
}
// 获取标注图片
export const getLabelImage = (activeImage: string, path: string) => {
return httpFetch<any>({
url:
BASE_LABEL_API +
`/api/v1/label_server/data/image?data_name=${encodeURIComponent(
activeImage
)}&project_path=${encodeURIComponent(path)}`,
method: "get",
headerAttr: {
responseType: "blob",
},
})
}
// 辅助标注
export const getAuxiliaryAnnotation = (data: any) => {
return httpFetch<any>({
url: BASE_LABEL_API + "/api/model_server/sam2/sa",
method: "post",
body: JSON.stringify(data),
headerAttr: {
responseType: "arraybuffer",
},
})
}
// 模型标注 追踪
export const getTrackingAuxiliaryAnnotation = (data: any) => {
return httpFetch<any>({
url: BASE_LABEL_API + "/api/model_server/sam2/vos",
method: "post",
body: JSON.stringify(data),
headerAttr: {
responseType: "arraybuffer",
},
})
}
// 用户登录
export const userLogin = (data: { name: string; password: string }) => {
return httpFetch<LoginInfo>({
url: BASE_LABEL_API + "/api/v1/label_server/user/login",
method: "post",
body: JSON.stringify(data),
})
}

View File

@@ -0,0 +1,167 @@
export interface LabelResult {
data_name: string
image_objects?: ImageObjects
pc_box_objects?: { [key: string]: any }[]
pc_segment_objects?: { [key: string]: any }[]
pc_vegetation_objects?: { [key: string]: any }[]
}
export interface ImageObjects {
annotations: Annotation[]
categories: Category[]
desc?: Desc
image_groups: ImageGroups
images: Images
key_frame?: boolean
label1_ts?: number
label1_uid?: number
review1_ts?: number
review1_uid?: number
review2_ts?: number
review2_uid?: number
}
export interface Annotation {
bbox?: number[]
category_id: number
comment?: Comment[]
create_timestamp: number
first_modified_timestamp: number
first_modified_uid: number
hollow_segmentation?: Array<Array<number[]>>
id: number
image_id: number
key_points?: KeyPoint[]
last_modified_timestamp: number
last_modified_uid: number
line_segment?: Array<Array<number[]>>
prelabel: boolean
rect?: number[]
segmentation?: Array<Array<number[]>>
sub_attributes?: { [key: string]: any }
uid: number
}
export interface Comment {
check_box_comments: string[]
comment_type: number
date: number
scene_info: SceneInfo
text_comments: string[]
times: number
turn: number
uid: number
}
export interface SceneInfo {
phi?: number
point_idx?: number[]
theta?: number
type: number
vfov_factor?: number
x?: number
x_offset?: number
y?: number
y_offset?: number
z?: number
zoom?: number
}
export interface KeyPoint {
attributes?: { [key: string]: any }
point: [number, number]
}
export interface Category {
id: number
name: string
supercategory: string
}
export interface Desc {
meta_operation: string[]
other_desc: string
}
export interface ImageGroups {
// "01J4GZMQ2G8KKQVF52S6EXBGRA": string;
}
export interface Images {
file_name: string
height: number
id: number
width: number
}
export interface RequestLabelResult {
label_object_size: { [key: string]: any }
results: LabelResult[]
task_id: number
uid: number
work_load: WorkLoad
work_time: { [key: string]: any }
}
export interface WorkLoad {
comment_size: number
dynamic_size: { [key: number]: number }
key_frame_size: { [key: number]: number }
object_size: { [key: number]: number }
prelabel_modify_size: { [key: number]: number }
question_size: { [key: number]: number }
review_dynamic_size: { [key: number]: number }
review_key_frame_size: { [key: number]: number }
review_question_size: { [key: number]: number }
review_size: number
review_static_size: { [key: number]: number }
static_size: { [key: number]: number }
work_time: number
}
export interface ServerResponse {
data_list?: DataList[]
proxy?: string
[property: string]: any
}
export interface DataList {
data_name: string
data_type: string
image_data?: string
pointcloud_data?: PointcloudDatum[]
[property: string]: any
}
export interface PointcloudDatum {
intensity: number
time_offset: number
x: number
y: number
z: number
[property: string]: any
}
export interface AuxiliaryParams {
project_id: number
file_name: string
image_hw: [number, number]
points_and_box: Array<[number, number]>
tags: number[]
clear_previous_state?: boolean
}
interface UserInfo {
uid: number
name: string
all_projects: { [x: number]: number[] }
collect_projects: number[]
group_name: string
work_status: number
base_city: string
}
export interface LoginInfo extends UserInfo {
token: string
refresh_token: string
}

View File

@@ -0,0 +1,283 @@
import httpFetch from "@/api/fetch"
import { usePermissionStore } from "../../store/auth"
import { BASE_LABEL_API } from "../label"
import { Project, ProjectDetail, ReviewUsers } from "./typing"
// 获取项目列表
export const getProjectList = (data: Project.ListRequest) => {
return httpFetch<Project.ListResponse>({
url: BASE_LABEL_API + "/api/v1/label_server/project/list",
method: "post",
body: JSON.stringify(data),
headerAttr: {
["Token"]: usePermissionStore.getState().token,
["Refresh-Token"]: usePermissionStore.getState().refresh_token,
},
})
}
// 获取项目详情
export const getProjectDetailById = (id: number) => {
return httpFetch<ProjectDetail.DataProps>({
url: BASE_LABEL_API + `/api/v1/label_server/project/detail/${id}`,
method: "get",
headerAttr: {
["Token"]: usePermissionStore.getState().token,
["Refresh-Token"]: usePermissionStore.getState().refresh_token,
},
})
}
// 校验项目源数据
export const checkLabelDataSource = (data: Project.CheckRequest) => {
return httpFetch<Project.CheckResponse>({
url: BASE_LABEL_API + "/api/v1/label_server/project/check_data",
method: "post",
body: JSON.stringify(data),
headerAttr: {
["Token"]: usePermissionStore.getState().token,
["Refresh-Token"]: usePermissionStore.getState().refresh_token,
},
})
}
// 创建项目
export const projectAdd = (data: Project.CreateProps) => {
return httpFetch({
url: BASE_LABEL_API + "/api/v1/label_server/project/add",
method: "post",
body: JSON.stringify(data),
headerAttr: {
["Token"]: usePermissionStore.getState().token,
["Refresh-Token"]: usePermissionStore.getState().refresh_token,
},
})
}
// 审核项目
export const projectReview = (data: Project.CreateProps) => {
return httpFetch({
url: BASE_LABEL_API + "/api/v1/label_server/project/review",
method: "post",
body: JSON.stringify(data),
headerAttr: {
["Token"]: usePermissionStore.getState().token,
["Refresh-Token"]: usePermissionStore.getState().refresh_token,
},
})
}
// 配置项目
export const projectConfig = (data: Project.ConfigProps) => {
return httpFetch({
url: BASE_LABEL_API + "/api/v1/label_server/project/config",
method: "post",
body: JSON.stringify(data),
headerAttr: {
["Token"]: usePermissionStore.getState().token,
["Refresh-Token"]: usePermissionStore.getState().refresh_token,
},
})
}
// 编辑项目
export const projectEditById = (data: any, id: number) => {
return httpFetch({
url: BASE_LABEL_API + `/api/v1/label_server/project/edit/${id}`,
method: "post",
body: JSON.stringify(data),
headerAttr: {
["Token"]: usePermissionStore.getState().token,
["Refresh-Token"]: usePermissionStore.getState().refresh_token,
},
})
}
// 审核试标项目
export const projectPreLabelReview = (data: Project.PreLabelProps) => {
return httpFetch({
url: BASE_LABEL_API + "/api/v1/label_server/project/prototype_review",
method: "post",
body: JSON.stringify(data),
headerAttr: {
["Token"]: usePermissionStore.getState().token,
["Refresh-Token"]: usePermissionStore.getState().refresh_token,
},
})
}
// 提交验收
export const projectDeliver = (data: { project_id: number }) => {
return httpFetch({
url: BASE_LABEL_API + "/api/v1/label_server/project/deliver",
method: "post",
body: JSON.stringify(data),
headerAttr: {
["Token"]: usePermissionStore.getState().token,
["Refresh-Token"]: usePermissionStore.getState().refresh_token,
},
})
}
// 完成项目
export const projectAccept = (data: { project_id: number; pass: boolean }) => {
return httpFetch({
url: BASE_LABEL_API + "/api/v1/label_server/project/accept",
method: "post",
body: JSON.stringify(data),
headerAttr: {
["Token"]: usePermissionStore.getState().token,
["Refresh-Token"]: usePermissionStore.getState().refresh_token,
},
})
}
// 收藏项目
export const projectCollect = (data: {
project_id: number
is_collect: boolean
}) => {
return httpFetch({
url: BASE_LABEL_API + "/api/v1/label_server/project/collect",
method: "post",
body: JSON.stringify(data),
headerAttr: {
["Token"]: usePermissionStore.getState().token,
["Refresh-Token"]: usePermissionStore.getState().refresh_token,
},
})
}
// 获取项目抽检比例
export const getReviewScaleList = (params: { project_id: number }) => {
return httpFetch<any[]>({
url: BASE_LABEL_API + "/api/v1/label_server/review_scale/list",
method: "get",
data: params,
headerAttr: {
["Token"]: usePermissionStore.getState().token,
["Refresh-Token"]: usePermissionStore.getState().refresh_token,
},
})
}
// 保存抽检比例
export const saveUserReviewScale = (data: Project.ReviewScaleProps) => {
return httpFetch({
url: BASE_LABEL_API + "/api/v1/label_server/review_scale/save",
method: "post",
body: JSON.stringify(data),
headerAttr: {
["Token"]: usePermissionStore.getState().token,
["Refresh-Token"]: usePermissionStore.getState().refresh_token,
},
})
}
export const getProjectDetail = (id: number) => {
return httpFetch<Project.DetailResponse>({
url: BASE_LABEL_API + `/api/v1/label_server/project/detail/${id}`,
method: "get",
headerAttr: {
["Token"]: usePermissionStore.getState().token,
["Refresh-Token"]: usePermissionStore.getState().refresh_token,
},
})
}
// 重新生成Embedding
export const regenerateProjectEmbedding = (data: { project_id: number }) => {
return httpFetch({
url: BASE_LABEL_API + `/api/v1/label_server/project/regenerate_embedding`,
method: "post",
body: JSON.stringify(data),
headerAttr: {
["Token"]: usePermissionStore.getState().token,
["Refresh-Token"]: usePermissionStore.getState().refresh_token,
},
})
}
// 获取个人参与项目
export const getPersonProjectDashBoard = () => {
return httpFetch<any>({
url:
BASE_LABEL_API + `/api/v1/label_server/data_statistics/personal_project`,
method: "get",
headerAttr: {
["Token"]: usePermissionStore.getState().token,
["Refresh-Token"]: usePermissionStore.getState().refresh_token,
},
})
}
// 获取个人看板数据
export const getCurrentPersonData = (params: { date: string }) => {
return httpFetch<{
label_data_size: number
label_work_time: number
review1_data_size: number
review1_work_time: number
review2_data_size: number
review2_work_time: number
}>({
url:
BASE_LABEL_API +
"/api/v1/label_server/data_statistics/personal_dashboard",
method: "GET",
data: params,
headerAttr: {
["Token"]: usePermissionStore.getState().token,
["Refresh-Token"]: usePermissionStore.getState().refresh_token,
},
})
}
/* ****************************** Options ****************************** */
// 获取项目所属业务列表
export const getProjectTypeList = () => {
return httpFetch<string[]>({
url: BASE_LABEL_API + "/api/v1/label_server/project/type_list",
method: "get",
headerAttr: {
["Token"]: usePermissionStore.getState().token,
["Refresh-Token"]: usePermissionStore.getState().refresh_token,
},
})
}
// 获取项目管理员列表
export const getProjectAdminList = () => {
return httpFetch<Array<{ label: string; value: number }>>({
url: BASE_LABEL_API + "/api/v1/label_server/project/admin_list",
method: "get",
headerAttr: {
["Token"]: usePermissionStore.getState().token,
["Refresh-Token"]: usePermissionStore.getState().refresh_token,
},
})
}
// 获取项目审核员
export const getProjectReviewers = () => {
return httpFetch<ReviewUsers>({
url: BASE_LABEL_API + "/api/v1/label_server/project/reviewer_map",
method: "get",
headerAttr: {
["Token"]: usePermissionStore.getState().token,
["Refresh-Token"]: usePermissionStore.getState().refresh_token,
},
})
}
// 获取用户有权限的项目
export const getSelfProjectList = () => {
return httpFetch<Array<{ label: string; value: number }>>({
url: BASE_LABEL_API + "/api/v1/label_server/project/self",
method: "get",
headerAttr: {
["Token"]: usePermissionStore.getState().token,
["Refresh-Token"]: usePermissionStore.getState().refresh_token,
},
})
}

View File

@@ -0,0 +1,466 @@
export namespace Project {
export interface DataProps {
key: React.Key
id: number // 项目ID
name: string // 项目名称
is_collect: boolean // 是否收藏
project_type?: string // 所属业务
label_schema_name?: string // 标注方案
label_schema_version?: string
status: number // 项目状态
labeled_scale?: number // 标注完成比例
reviewed_scale?: number // 审核完成比例
data_size?: number // 总数据量
rate_speed?: number // 额定倍速
create_user: string // 创建人
owner: string // 项目负责人
label_process?: string[] // 工序
admin_user: number[] // 标注管理员id
data_source?: string // 数据源
remarks?: string // 备注
// reviewer_user?: string; // 审核人
// reviewer_comment?: string; // 审核意见
create_at?: string // 创建时间
update_at?: string // 更新时间
modify?: number //0=可以发起变更,无变更 1=正在变更,无变更 2=可以发起变更,有变更 3=正在变更,有变更
}
export interface CheckRequest {
project_type: string
nfs_path: string
flag: number
}
export interface CheckResponse {
data_size: number
error_code: number
}
export interface CreateProps {
admin_user: string[]
create_user: string
data_size: number
data_source: string
label_schema_name: string
label_schema_version: string
project_name: string
project_type: string
related_task?: number[]
remarks?: string
[property: string]: any
}
export interface ReviewProps {
pass: boolean
project_id: number
project_name: string
review_comment?: string
review_user: string
test_proportion?: number
}
export interface ListRequest {
admin_user?: string
create_user?: string
end_date?: string
page_number: number
page_size: number
project_id?: number
project_name?: string
project_type?: string
review_user?: string
start_date?: string
status?: number[]
[property: string]: any
}
export interface ListResponse {
project_list: DataProps[]
total_pages: number
total_items: number
}
export interface LabelConfig {
acquire_mode: number
acquire_size: number
avg_remind_threshold: number
dynamic_label_speed: number
filter_pre_label: boolean
fix_remind_threshold: number
label_accuracy_rate: number
label_update_month: number
max_size: number
pre_label_confirm: boolean
static_label_speed: number
}
export interface Review1Config {
acquire_mode: number
acquire_size: number
dynamic_review1_speed: number
end_date?: string
filter_label_first_sub: boolean
filter_objs: boolean
filter_rework: boolean
filter_task_batch: boolean
filter_track_user: boolean
is_rework?: boolean
label_first_sub_end_date?: string
label_first_sub_start_date?: string
max_objs?: number
max_size: number
min_objs?: number
review1_accuracy_rate: number
review1_update_month: number
start_date?: string
static_review1_speed: number
track_user_list?: number[]
}
export interface Review2Config {
acquire_mode: number
acquire_size: number
dynamic_review2_speed: number
end_date?: string
filter_objs: boolean
filter_review1_first_sub: boolean
filter_review1_user: boolean
filter_rework: boolean
filter_task_batch: boolean
filter_track_user: boolean
is_rework?: boolean
max_objs?: number
max_size: number
min_objs?: number
review1_first_sub_end_date?: string
review1_first_sub_start_date?: string
review1_user_list?: number[]
review2_update_month: number
start_date?: string
static_review2_speed: number
track_user_list?: number[]
}
export interface ConfigProps {
admin_user?: number[]
check_frame?: boolean
check_task?: boolean
comment_rule?: { [key: string]: any }
default_pose?: string
is_lock_object?: boolean
label_config?: LabelConfig
label_users?: number[]
modifiable_types?: string[]
project_id: number
project_name?: string
project_remark?: string
review1_config?: Review1Config
review1_users?: number[]
review2_config?: Review2Config
review2_users?: number[]
user_grade?: { [key: string]: any }
}
// 试标审核
export interface PreLabelProps {
id: number
review_user: string
action: number // 1-试标完成2-试标通过3-试标不通过
detail?: string
}
export interface ReviewScaleProps {
frame_scale?: number
grade?: string
project_id: number
task_scale?: number
uids: number[]
}
/**
* DetailResponse
*/
export interface DetailResponse {
admin_user: string[]
alarm_threshold: AlarmThreshold
check_frame: boolean
check_task: boolean
comment_rule: CommentRule
create_at: string
create_user: string
data_size: number
default_pose: null
id: number
is_lock_object: boolean
label_process: LabelProcess
label_schema_list: LabelSchemaList[]
label_type: number
labeled_multiplier: LabeledMultiplier
modifiable_types: string[]
name: string
project_progress: ProjectProgress
remarks: string
rpath: string
status: number
task_size: number
user_grade: UserGrade
}
export interface AlarmThreshold {
avg_remind_threshold: number
fix_remind_threshold: number
}
export interface CommentRule {
check_box_rules: {
create_date: string
create_user: string
text: string
}[]
text_rules: string[]
}
export interface LabelProcess {
filter_pre_label: boolean
filter_task_info: string[]
pre_label_confirm: boolean
step_detail: StepDetail[]
}
export interface StepDetail {
acquire_mode: number
acquire_size: number
action: number
max_size: number
user_list: number[]
}
export interface LabelSchemaList {
bbox_range: number[]
bbox_size: number[]
bbox_type: number
category_id: number
color: [number, number, number]
label_class: string
label_type: number
radius: number
sensor_list: string[]
sub_attributes: string[]
sub_attributes_describe: SubAttributesDescribe[]
super_category: string
}
export interface SubAttributesDescribe {
chinese_name: string
english_name: string
isrequired: number
optional_item: string[]
round_id: number
select_mode: number
}
export interface LabeledMultiplier {
dynamic_label_speed: null
dynamic_review1_speed: null
dynamic_review2_speed: null
label_accuracy_rate: null
label_update_month: null
review1_accuracy_rate: null
review1_update_month: null
review2_update_month: null
static_label_speed: null
static_review1_speed: null
static_review2_speed: null
}
export interface ProjectProgress {
normal_labeled_task_size: number
normal_reviewed1_task_size: number
normal_reviewed2_task_size: number
rework_labeled_task_size: number
rework_reviewed1_task_size: number
rework_reviewed2_task_size: number
unlabeled_task_size: number
}
export interface UserGrade {
A: {
frame: number
task: number
}
B: {
frame: number
task: number
}
C: {
frame: number
task: number
}
}
/**
* DetailResponse
*/
}
export interface ReviewUsers {
reviewer1: string[]
reviewer2: string[]
reviewer3: string[]
}
export namespace ProjectDetail {
export interface DataProps {
admin_user: number[]
alarm_threshold: AlarmThreshold
check_frame: boolean
check_task: boolean
comment_rule: CommentRule
create_at: string
create_user: string
data_size: number
default_pose: null
id: number
is_lock_object: boolean
label_process: LabelProcess
label_schema_list: LabelSchemaList[]
label_type: number
labeled_multiplier: LabeledMultiplier
modifiable_types: string[]
name: string
project_progress: ProjectProgress
remarks: string
rpath: string
status: number
task_size: number
user_grade: UserGrade
[property: string]: any
}
export interface AlarmThreshold {
avg_remind_threshold: number
fix_remind_threshold: number
[property: string]: any
}
export interface CommentRule {
check_box_rules: string[]
text_rules: string[]
[property: string]: any
}
export interface LabelProcess {
filter_pre_label: boolean
filter_task_info: FilterTaskInfo[]
pre_label_confirm: boolean
step_detail: StepDetail[]
[property: string]: any
}
export interface FilterTaskInfo {
action: number
end_date: string
filter_label_first_sub: boolean
filter_objs: boolean
filter_review1_first_sub: boolean
filter_review1_user: boolean
filter_rework: boolean
filter_task_batch: boolean
filter_track_user: boolean
is_rework: boolean
label_first_sub_end_date: string
label_first_sub_start_date: string
max_objs: number
min_objs: number
review1_first_sub_end_date: string
review1_first_sub_start_date: string
review1_user_list: number[]
start_date: string
track_user_list: number[]
[property: string]: any
}
export interface StepDetail {
acquire_mode: number
acquire_size: number
action: number
max_size: number
user_list: number[]
[property: string]: any
}
export interface LabelSchemaList {
bbox_range: number[]
bbox_size: number[]
bbox_type: number
category_id: number
color: number[]
label_class: string
label_type: number
radius: number
sensor_list: string[]
sub_attributes: string[]
sub_attributes_describe: SubAttributesDescribe[]
super_category: string
[property: string]: any
}
export interface SubAttributesDescribe {
chinese_name: string
english_name: string
isrequired: number
optional_item: string[]
round_id: number
select_mode: number
[property: string]: any
}
export interface LabeledMultiplier {
dynamic_label_speed: number
dynamic_review1_speed: number
dynamic_review2_speed: number
label_accuracy_rate: number
label_update_month: number
review1_accuracy_rate: number
review1_update_month: number
review2_update_month: number
static_label_speed: number
static_review1_speed: number
static_review2_speed: number
[property: string]: any
}
export interface ProjectProgress {
normal_labeled_task_size: number
normal_reviewed1_task_size: number
normal_reviewed2_task_size: number
rework_labeled_task_size: number
rework_reviewed1_task_size: number
rework_reviewed2_task_size: number
unlabeled_task_size: number
[property: string]: any
}
export interface UserGrade {
A: A
B: B
C: C
[property: string]: any
}
export interface A {
frame: number
task: number
[property: string]: any
}
export interface B {
frame: number
task: number
[property: string]: any
}
export interface C {
frame: number
task: number
[property: string]: any
}
}

View File

@@ -0,0 +1,86 @@
import httpFetch from "@/api/fetch"
import { usePermissionStore } from "../../store/auth"
import { BASE_LABEL_API } from "../label"
import { Scheme } from "./typing"
// 获取标注方案列表
export const getLabelSchemeList = (params: Scheme.ListRequest) => {
return httpFetch<Scheme.ListResponse>({
url: BASE_LABEL_API + "/api/v1/label_server/label_schema/list",
method: "get",
data: params,
headerAttr: {
["Token"]: usePermissionStore.getState().token,
["Refresh-Token"]: usePermissionStore.getState().refresh_token,
},
})
}
// 新增标注方案
export const addNewPlan = (data: Scheme.CreateProps) => {
return httpFetch({
url: BASE_LABEL_API + "/api/v1/label_server/label_schema/add",
method: "post",
body: JSON.stringify(data),
headerAttr: {
["Token"]: usePermissionStore.getState().token,
["Refresh-Token"]: usePermissionStore.getState().refresh_token,
},
})
}
// 获取某一标注方案版本列表
export const getAllVersionByName = (name: string) => {
return httpFetch<Scheme.VersionListResponse>({
url:
BASE_LABEL_API +
`/api/v1/label_server/label_schema/version/list?name=${name}`,
method: "get",
headerAttr: {
["Token"]: usePermissionStore.getState().token,
["Refresh-Token"]: usePermissionStore.getState().refresh_token,
},
})
}
// 删除标注方案
export const deleteLabelPlan = (data: { name: string; version?: string }) => {
return httpFetch({
url: BASE_LABEL_API + "/api/v1/label_server/label_schema/delete",
method: "delete",
body: JSON.stringify(data),
headerAttr: {
["Token"]: usePermissionStore.getState().token,
["Refresh-Token"]: usePermissionStore.getState().refresh_token,
},
})
}
// 保存错词库
export const saveWrongWordList = (data: {
data: { error: string; correct: string }[]
}) => {
return httpFetch({
url: BASE_LABEL_API + "/api/v1/label_server/error_repository/save",
method: "post",
body: JSON.stringify(data),
headerAttr: {
["Token"]: usePermissionStore.getState().token,
["Refresh-Token"]: usePermissionStore.getState().refresh_token,
},
})
}
// 查询错词库
export const getWrongWordList = () => {
return httpFetch<{
data: { error: string; correct: string }[]
}>({
url: BASE_LABEL_API + "/api/v1/label_server/error_repository/query",
method: "get",
headerAttr: {
["Token"]: usePermissionStore.getState().token,
["Refresh-Token"]: usePermissionStore.getState().refresh_token,
},
})
}

View File

@@ -0,0 +1,45 @@
export namespace Scheme {
export interface ListRequest {
create_user?: string
end_date?: string
name?: string
page_number?: number
page_size?: number
start_date?: string
}
interface ListDataProps {
name: string
create_at: string
create_user: string
version_size: number
}
export interface ListResponse {
label_schema_list: ListDataProps[]
number_of_items: number
number_of_pages: number
}
export interface CreateProps {
create_user: string
flag: number // 0-新增标注方案 1-新增标注方案版本
json: any[]
name: string
version: string
version_desc: string
}
interface VersionListDataProps {
id: number
version: string
version_desc: string
create_at: string
create_user: string
json: any[]
}
export interface VersionListResponse {
label_schema_version_list: VersionListDataProps[]
}
}

View File

@@ -0,0 +1,110 @@
import httpFetch from "@/api/fetch"
import { usePermissionStore } from "../../store/auth"
import { BASE_LABEL_API } from "../label"
import { Task } from "./typing"
// 获取任务列表
export const getTaskList = (data: Task.ListRequest) => {
return httpFetch<Task.ListResponse>({
url: BASE_LABEL_API + "/api/v1/label_server/task/list",
method: "post",
body: JSON.stringify(data),
headerAttr: {
["Token"]: usePermissionStore.getState().token,
["Refresh-Token"]: usePermissionStore.getState().refresh_token,
},
})
}
// 领取任务
export const taskAcquire = (data: Task.AcquireReqProps) => {
return httpFetch<Task.ListResponse>({
url: BASE_LABEL_API + "/api/v1/label_server/task/acquire",
method: "post",
body: JSON.stringify(data),
headerAttr: {
["Token"]: usePermissionStore.getState().token,
["Refresh-Token"]: usePermissionStore.getState().refresh_token,
},
})
}
// 调度任务
export const taskDispatch = (data: Task.DispatchReqProps) => {
return httpFetch({
url: BASE_LABEL_API + "/api/v1/label_server/task/dispatch",
method: "post",
body: JSON.stringify(data),
headerAttr: {
["Token"]: usePermissionStore.getState().token,
["Refresh-Token"]: usePermissionStore.getState().refresh_token,
},
})
}
// 释放任务
export const taskRelease = (data: Task.ReleaseReqProps) => {
return httpFetch({
url: BASE_LABEL_API + "/api/v1/label_server/task/release",
method: "post",
body: JSON.stringify(data),
headerAttr: {
["Token"]: usePermissionStore.getState().token,
["Refresh-Token"]: usePermissionStore.getState().refresh_token,
},
})
}
// 获取下一个任务
export const getNextTaskId = (data: Task.NextReqProps) => {
return httpFetch<Task.NextResProps>({
url: BASE_LABEL_API + "/api/v1/label_server/task/next",
method: "post",
body: JSON.stringify(data),
headerAttr: {
["Token"]: usePermissionStore.getState().token,
["Refresh-Token"]: usePermissionStore.getState().refresh_token,
},
})
}
// 提交任务
export const taskCommit = (data: Task.CommitReqProps) => {
return httpFetch({
url: BASE_LABEL_API + "/api/v1/label_server/task/commit",
method: "post",
body: JSON.stringify(data),
headerAttr: {
["Token"]: usePermissionStore.getState().token,
["Refresh-Token"]: usePermissionStore.getState().refresh_token,
},
})
}
// 获取任务的工作流程
export const getTaskWorkFlow = (id: number) => {
return httpFetch<any[]>({
url: BASE_LABEL_API + `/api/v1/label_server/task/workflow/${id}`,
method: "get",
headerAttr: {
["Token"]: usePermissionStore.getState().token,
["Refresh-Token"]: usePermissionStore.getState().refresh_token,
},
})
}
// 获取个人任务列表
export const getUserTaskList = (params: {
page_size: number
page_number: number
}) => {
return httpFetch<{ simple_task_list: any[]; total_items: number }>({
url: BASE_LABEL_API + `/api/v1/label_server/task/list_by_user`,
method: "GET",
data: params,
headerAttr: {
["Token"]: usePermissionStore.getState().token,
["Refresh-Token"]: usePermissionStore.getState().refresh_token,
},
})
}

View File

@@ -0,0 +1,159 @@
export namespace Task {
export interface DataProps {
id: number
create_date: string
data_name: {
name: [string]
related_images: []
}[]
project_id: number
project_name: string
project_uuid: string
label_status: number
current_uid?: number
current_username?: string
label_user?: number
label_username?: string
review_user1?: number
review1_username?: string
review_user2?: number
review2_username?: string
rejected: boolean
work_time: {
label_work_time: number
first_review_work_time: number
second_review_work_time: number
}
label_object_size: {
object_size: number
valid_size: number
first_comment_size: number
second_comment_size: number
new_size: number
prelabel_size: number
prelabel_modify_size: number
dynamic_size: number
static_size: number
review_size: number
review_dynamic_size: number
review_static_size: number
key_frame_size: number
question_size: number
total_qa_group_size: number
single_qa_group_size: number
multiple_qa_group_size: number
new_qa_group_size: number
new_single_qa_group_size: number
new_multiple_qa_group_size: number
review_question_size: number
comment_question_size: number
}
first_commit_label_time?: string
first_commit_review1_time?: string
reject_times: number
review_rate: {
review1_rate: number
review2_rate: number
}
label_first_work_time: number
review1_first_work_time: number
review2_first_work_time: number
first_reject_label_time?: string
}
export interface ListRequest {
current_uid?: number[]
data_name?: string
first_commit_label_time_end?: string
first_commit_label_time_start?: string
first_commit_review1_time_end?: string
first_commit_review1_time_start?: string
get_data: boolean
id?: number[]
label_status?: number[]
label_user?: number[]
order_by?: string
page_number: number
page_size: number
project_id?: number[]
rejected?: boolean
review_user1?: number[]
review_user2?: number[]
}
export interface SizeProps {
object_size: number
valid_size: number
first_comment_size: number
second_comment_size: number
new_size: number
prelabel_size: number
prelabel_modify_size: number
dynamic_size: number
static_size: number
review_size: number
review_dynamic_size: number
review_static_size: number
key_frame_size: number
question_size: number
total_qa_group_size: number
single_qa_group_size: number
multiple_qa_group_size: number
new_qa_group_size: number
new_single_qa_group_size: number
new_multiple_qa_group_size: number
review_question_size: number
comment_question_size: number
}
export interface ListResponse {
task_list: DataProps[]
total_items: number
total_pages: number
total_size: SizeProps
}
export interface AcquireReqProps {
uid: number
project_id: number
label_action: 1 | 2 | 3 // 1-领取标注任务 2-领取审核任务 3-领取复审任务
}
export interface DispatchReqProps {
operation_uid: number
reject: boolean
task_ids: number[]
task_status_dst: number
task_status_src: number
uid_dst: number | null
uid_src: number | null
}
export interface ReleaseReqProps {
operation_uid: number
reject: boolean
task_ids: number[]
task_status: number
uid: number
}
export interface NextReqProps {
project_id: number
task_status: number
rejected: boolean
last_task_id: number
}
export interface NextResProps {
project_id: number
task_id: number | null
}
export interface CommitReqProps {
task_id: number
uid: number
commit_action: number //1-提交标注 2-提交审核1 3-提交审核2 4-驳回 5-无法标注
work_time: number
comment_question_size?: number
}
}