feat(label): add label page
This commit is contained in:
4
components/label/api/const.ts
Normal file
4
components/label/api/const.ts
Normal file
@@ -0,0 +1,4 @@
|
||||
export const BASE_LABEL_API =
|
||||
process.env.NEXT_PUBLIC_ENV === "production"
|
||||
? "https://label.cowarobot.com"
|
||||
: "https://label.softtest.cowarobot.com"
|
||||
49
components/label/api/daily/index.ts
Normal file
49
components/label/api/daily/index.ts
Normal file
@@ -0,0 +1,49 @@
|
||||
import httpFetch from "@/api/fetch"
|
||||
import { Daily } from "./typing"
|
||||
import { BASE_LABEL_API } from "../const"
|
||||
|
||||
export const getSelfDailyWorkList = (data: Daily.Request) => {
|
||||
return httpFetch<Daily.Response>({
|
||||
url: BASE_LABEL_API + "/api/v1/label_server/daily_work/list/self",
|
||||
method: "POST",
|
||||
body: JSON.stringify(data),
|
||||
})
|
||||
}
|
||||
export const getTeamDailyWorkList = (data: Daily.Request) => {
|
||||
return httpFetch<Daily.Response>({
|
||||
url: BASE_LABEL_API + "/api/v1/label_server/daily_work/list/team",
|
||||
method: "POST",
|
||||
body: JSON.stringify(data),
|
||||
})
|
||||
}
|
||||
|
||||
export const addDailyWorkData = (data: Daily.CreateProps) => {
|
||||
return httpFetch({
|
||||
url: BASE_LABEL_API + "/api/v1/label_server/daily_work/add",
|
||||
method: "POST",
|
||||
body: JSON.stringify(data),
|
||||
})
|
||||
}
|
||||
|
||||
export const editDailyWorkData = (data: Daily.CreateProps, id: number) => {
|
||||
return httpFetch({
|
||||
url: BASE_LABEL_API + `/api/v1/label_server/daily_work/edit/${id}`,
|
||||
method: "put",
|
||||
body: JSON.stringify(data),
|
||||
})
|
||||
}
|
||||
|
||||
export const deleteDailyWorkData = (id: number) => {
|
||||
return httpFetch({
|
||||
url: BASE_LABEL_API + `/api/v1/label_server/daily_work/delete/${id}`,
|
||||
method: "delete",
|
||||
})
|
||||
}
|
||||
|
||||
export const lockDailyWorkData = (lock_status: boolean, id: number) => {
|
||||
return httpFetch({
|
||||
url: BASE_LABEL_API + `/api/v1/label_server/daily_work/lock/${id}`,
|
||||
method: "put",
|
||||
body: JSON.stringify({ lock_status }),
|
||||
})
|
||||
}
|
||||
84
components/label/api/daily/typing.ts
Normal file
84
components/label/api/daily/typing.ts
Normal file
@@ -0,0 +1,84 @@
|
||||
export namespace Daily {
|
||||
export interface Request {
|
||||
date_end?: string
|
||||
date_start?: string
|
||||
/**
|
||||
* 0-个人日报 1-团队日报
|
||||
*/
|
||||
flag?: number
|
||||
name?: string
|
||||
order_by?: string
|
||||
page_number?: number
|
||||
page_size?: number
|
||||
[property: string]: any
|
||||
}
|
||||
|
||||
export interface Summary {
|
||||
total_work_time: number
|
||||
total_standard_size: number
|
||||
total_completed_size: number
|
||||
total_residual_size: number
|
||||
total_residual_work_time: number
|
||||
}
|
||||
|
||||
export interface Response {
|
||||
daily_work_list: DailyWorkList[]
|
||||
total_items: number
|
||||
total_pages: number
|
||||
total_summary: Summary
|
||||
[property: string]: any
|
||||
}
|
||||
|
||||
export interface DailyWorkList {
|
||||
accounting_type?: string | null
|
||||
actual_type?: string
|
||||
completed_size?: number
|
||||
date?: string
|
||||
end_time?: string
|
||||
id?: number
|
||||
leader_name?: string | null
|
||||
leader_uid?: number | null
|
||||
lock_status?: boolean
|
||||
obj_type?: number | null
|
||||
performance_accounting?: boolean | null
|
||||
project_id?: number | null
|
||||
project_name?: string | null
|
||||
rate?: number
|
||||
remarks?: string | null
|
||||
residual_pm?: boolean | null
|
||||
residual_size?: number
|
||||
residual_work_time?: number
|
||||
set_type?: string
|
||||
standard_size?: number
|
||||
start_time?: string
|
||||
uid?: number
|
||||
username?: string
|
||||
work_time?: number
|
||||
work_type?: string | null
|
||||
[property: string]: any
|
||||
}
|
||||
|
||||
export interface CreateProps {
|
||||
accounting_type?: string
|
||||
actual_type: string
|
||||
completed_size?: number
|
||||
date: string
|
||||
end_time?: string
|
||||
leader_uid?: number
|
||||
obj_type?: number
|
||||
performance_accounting?: boolean
|
||||
project_id?: number
|
||||
rate?: number
|
||||
remarks?: string
|
||||
residual_pm?: boolean
|
||||
residual_size?: number
|
||||
residual_work_time?: number
|
||||
set_type: string
|
||||
standard_size?: number
|
||||
start_time?: string
|
||||
uid: number
|
||||
work_time?: number
|
||||
work_type?: string
|
||||
[property: string]: any
|
||||
}
|
||||
}
|
||||
142
components/label/api/label/index.ts
Normal file
142
components/label/api/label/index.ts
Normal file
@@ -0,0 +1,142 @@
|
||||
import httpFetch from "@/api/fetch"
|
||||
import { BASE_LABEL_API } from "../const"
|
||||
import {
|
||||
LabelResult,
|
||||
LoginInfo,
|
||||
RequestLabelResult,
|
||||
ServerResponse,
|
||||
} from "./typing"
|
||||
|
||||
// 获取标注结果
|
||||
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",
|
||||
})
|
||||
}
|
||||
|
||||
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-点云 2-视频
|
||||
*/
|
||||
data_type: number
|
||||
flag?: number
|
||||
project_id: number
|
||||
}) => {
|
||||
const res = await httpFetch<ServerResponse>({
|
||||
url: BASE_LABEL_API + "/api/v1/label_server/data/list",
|
||||
method: "POST",
|
||||
body: JSON.stringify(data),
|
||||
})
|
||||
|
||||
if (res.proxy) {
|
||||
throw new Error(`get_data_list requires proxy=${res.proxy}`)
|
||||
}
|
||||
|
||||
const first = res.data_list?.[0]
|
||||
if (!first) {
|
||||
throw new Error(
|
||||
`get_data_list empty data_list, data_name=${data.data_names?.[0] || ""}`
|
||||
)
|
||||
}
|
||||
|
||||
const payload =
|
||||
data.data_type === 0
|
||||
? first.image_data
|
||||
: data.data_type === 2
|
||||
? first.video_data
|
||||
: first.pointcloud_data
|
||||
|
||||
if (payload == null) {
|
||||
throw new Error(
|
||||
`get_data_list missing payload type=${data.data_type}, data_name=${first.data_name || data.data_names?.[0] || ""}`
|
||||
)
|
||||
}
|
||||
if (typeof payload === "string" && !payload.trim()) {
|
||||
throw new Error(
|
||||
`get_data_list empty payload type=${data.data_type}, data_name=${first.data_name || data.data_names?.[0] || ""}`
|
||||
)
|
||||
}
|
||||
|
||||
return payload
|
||||
// .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 }),
|
||||
// })
|
||||
// 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),
|
||||
})
|
||||
}
|
||||
171
components/label/api/label/typing.ts
Normal file
171
components/label/api/label/typing.ts
Normal file
@@ -0,0 +1,171 @@
|
||||
export interface LabelResult {
|
||||
data_name: string
|
||||
image_objects?: ImageObjects
|
||||
video_objects?: {
|
||||
[key: string]: 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
|
||||
video_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
|
||||
}
|
||||
198
components/label/api/project/index.ts
Normal file
198
components/label/api/project/index.ts
Normal file
@@ -0,0 +1,198 @@
|
||||
import httpFetch from "@/api/fetch"
|
||||
import { Project, ProjectDetail, ReviewUsers } from "./typing"
|
||||
import { BASE_LABEL_API } from "../const"
|
||||
|
||||
// 获取项目列表
|
||||
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),
|
||||
})
|
||||
}
|
||||
|
||||
// 获取项目详情
|
||||
export const getProjectDetailById = (id: number) => {
|
||||
return httpFetch<ProjectDetail.DataProps>({
|
||||
url: BASE_LABEL_API + `/api/v1/label_server/project/detail/${id}`,
|
||||
method: "GET",
|
||||
})
|
||||
}
|
||||
|
||||
// 校验项目源数据
|
||||
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),
|
||||
})
|
||||
}
|
||||
|
||||
// 创建项目
|
||||
export const projectAdd = (data: Project.CreateProps) => {
|
||||
return httpFetch({
|
||||
url: BASE_LABEL_API + "/api/v1/label_server/project/add",
|
||||
method: "POST",
|
||||
body: JSON.stringify(data),
|
||||
})
|
||||
}
|
||||
|
||||
// 审核项目
|
||||
export const projectReview = (data: Project.CreateProps) => {
|
||||
return httpFetch({
|
||||
url: BASE_LABEL_API + "/api/v1/label_server/project/review",
|
||||
method: "POST",
|
||||
body: JSON.stringify(data),
|
||||
})
|
||||
}
|
||||
|
||||
// 配置项目
|
||||
export const projectConfig = (data: Project.ConfigProps) => {
|
||||
return httpFetch({
|
||||
url: BASE_LABEL_API + "/api/v1/label_server/project/config",
|
||||
method: "POST",
|
||||
body: JSON.stringify(data),
|
||||
})
|
||||
}
|
||||
|
||||
// 编辑项目
|
||||
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),
|
||||
})
|
||||
}
|
||||
|
||||
// 审核试标项目
|
||||
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),
|
||||
})
|
||||
}
|
||||
|
||||
// 提交验收
|
||||
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),
|
||||
})
|
||||
}
|
||||
|
||||
// 完成项目
|
||||
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),
|
||||
})
|
||||
}
|
||||
|
||||
// 收藏项目
|
||||
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),
|
||||
})
|
||||
}
|
||||
|
||||
// 获取项目抽检比例
|
||||
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,
|
||||
})
|
||||
}
|
||||
|
||||
// 保存抽检比例
|
||||
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),
|
||||
})
|
||||
}
|
||||
|
||||
export const getProjectDetail = (id: number) => {
|
||||
return httpFetch<Project.DetailResponse>({
|
||||
url: BASE_LABEL_API + `/api/v1/label_server/project/detail/${id}`,
|
||||
method: "GET",
|
||||
})
|
||||
}
|
||||
|
||||
// 重新生成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),
|
||||
})
|
||||
}
|
||||
|
||||
// 获取个人参与项目
|
||||
export const getPersonProjectDashBoard = () => {
|
||||
return httpFetch<Array<Project.PersonProjectDashboardResponseItem>>({
|
||||
url:
|
||||
BASE_LABEL_API + `/api/v1/label_server/data_statistics/personal_project`,
|
||||
method: "GET",
|
||||
})
|
||||
}
|
||||
|
||||
// 获取个人看板数据
|
||||
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,
|
||||
})
|
||||
}
|
||||
|
||||
/* ****************************** Options ****************************** */
|
||||
// 获取项目所属业务列表
|
||||
export const getProjectTypeList = () => {
|
||||
return httpFetch<string[]>({
|
||||
url: BASE_LABEL_API + "/api/v1/label_server/project/type_list",
|
||||
method: "GET",
|
||||
})
|
||||
}
|
||||
|
||||
// 获取项目管理员列表
|
||||
export const getProjectAdminList = () => {
|
||||
return httpFetch<Array<{ label: string; value: number }>>({
|
||||
url: BASE_LABEL_API + "/api/v1/label_server/project/admin_list",
|
||||
method: "GET",
|
||||
})
|
||||
}
|
||||
|
||||
// 获取项目审核员
|
||||
export const getProjectReviewers = () => {
|
||||
return httpFetch<ReviewUsers>({
|
||||
url: BASE_LABEL_API + "/api/v1/label_server/project/reviewer_map",
|
||||
method: "GET",
|
||||
})
|
||||
}
|
||||
|
||||
// 获取用户有权限的项目
|
||||
export const getSelfProjectList = () => {
|
||||
return httpFetch<Array<{ label: string; value: number }>>({
|
||||
url: BASE_LABEL_API + "/api/v1/label_server/project/self",
|
||||
method: "GET",
|
||||
})
|
||||
}
|
||||
474
components/label/api/project/typing.ts
Normal file
474
components/label/api/project/typing.ts
Normal file
@@ -0,0 +1,474 @@
|
||||
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 PersonProjectDashboardResponseItem {
|
||||
project_id: number
|
||||
project_label_type: string
|
||||
project_name: string
|
||||
project_type: string
|
||||
work_time: number
|
||||
}
|
||||
}
|
||||
|
||||
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
|
||||
}
|
||||
}
|
||||
61
components/label/api/scheme/index.ts
Normal file
61
components/label/api/scheme/index.ts
Normal file
@@ -0,0 +1,61 @@
|
||||
import httpFetch from "@/api/fetch"
|
||||
import { Scheme } from "./typing"
|
||||
import { BASE_LABEL_API } from "../const"
|
||||
|
||||
// 获取标注方案列表
|
||||
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,
|
||||
})
|
||||
}
|
||||
|
||||
// 新增标注方案
|
||||
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),
|
||||
})
|
||||
}
|
||||
|
||||
// 获取某一标注方案版本列表
|
||||
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",
|
||||
})
|
||||
}
|
||||
|
||||
// 删除标注方案
|
||||
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),
|
||||
})
|
||||
}
|
||||
|
||||
// 保存错词库
|
||||
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),
|
||||
})
|
||||
}
|
||||
|
||||
// 查询错词库
|
||||
export const getWrongWordList = () => {
|
||||
return httpFetch<{
|
||||
data: { error: string; correct: string }[]
|
||||
}>({
|
||||
url: BASE_LABEL_API + "/api/v1/label_server/error_repository/query",
|
||||
method: "GET",
|
||||
})
|
||||
}
|
||||
45
components/label/api/scheme/typing.ts
Normal file
45
components/label/api/scheme/typing.ts
Normal 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[]
|
||||
}
|
||||
}
|
||||
66
components/label/api/sync/index.ts
Normal file
66
components/label/api/sync/index.ts
Normal file
@@ -0,0 +1,66 @@
|
||||
import httpFetch from "@/api/fetch"
|
||||
import { BASE_LABEL_API } from "../const"
|
||||
import { Params, Response } from "./typing"
|
||||
|
||||
// 获取同步服务列表
|
||||
export const getDataSyncServerList = (params: Params.ServerRequest) => {
|
||||
return httpFetch<Response.SyncServerRes>({
|
||||
url: BASE_LABEL_API + "/api/v1/label_server/data_sync/list",
|
||||
method: "GET",
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
|
||||
// 更新同步服务所在地
|
||||
export const updateSyncServerLocation = (location: string, id: number) => {
|
||||
return httpFetch({
|
||||
url: BASE_LABEL_API + `/api/v1/label_server/data_sync/update/${id}`,
|
||||
method: "PUT",
|
||||
body: JSON.stringify({ location }),
|
||||
})
|
||||
}
|
||||
|
||||
// 获取所有同步服务
|
||||
export const getAllSyncServerList = () => {
|
||||
return httpFetch<
|
||||
{
|
||||
id: number
|
||||
ip: string
|
||||
is_online: 0 | 1
|
||||
}[]
|
||||
>({
|
||||
url: BASE_LABEL_API + "/api/v1/label_server/data_sync/all",
|
||||
method: "GET",
|
||||
})
|
||||
}
|
||||
|
||||
// 获取同步任务列表
|
||||
export const getDataSyncTaskList = (params: Params.TaskRequest) => {
|
||||
return httpFetch<Response.SyncTaskRes>({
|
||||
url: BASE_LABEL_API + "/api/v1/label_server/data_sync/sync_task_list",
|
||||
method: "GET",
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
|
||||
// 新增同步任务
|
||||
export const newSyncTask = (data: {
|
||||
project_id: number
|
||||
sync_server_id: number
|
||||
}) => {
|
||||
return httpFetch<any>({
|
||||
url: BASE_LABEL_API + "/api/v1/label_server/data_sync/add_sync_task",
|
||||
method: "POST",
|
||||
body: JSON.stringify(data),
|
||||
})
|
||||
}
|
||||
|
||||
// 更新同步任务状态
|
||||
export const updateSyncTaskStatus = (id: number, status: number) => {
|
||||
return httpFetch({
|
||||
url:
|
||||
BASE_LABEL_API + `/api/v1/label_server/data_sync/update_sync_task/${id}`,
|
||||
method: "PUT",
|
||||
body: JSON.stringify({ status }),
|
||||
})
|
||||
}
|
||||
64
components/label/api/sync/typing.ts
Normal file
64
components/label/api/sync/typing.ts
Normal file
@@ -0,0 +1,64 @@
|
||||
export interface TimeFilter {
|
||||
start_date: string
|
||||
end_date: string
|
||||
}
|
||||
|
||||
export namespace Params {
|
||||
export interface ServerRequest {
|
||||
is_online?: boolean
|
||||
location?: string
|
||||
page_number: number
|
||||
page_size: number
|
||||
[property: string]: any
|
||||
}
|
||||
|
||||
export interface TaskRequest {
|
||||
location?: string
|
||||
page_number: number
|
||||
page_size: number
|
||||
project_id?: number
|
||||
status?: number
|
||||
sync_server_id?: number
|
||||
[property: string]: any
|
||||
}
|
||||
}
|
||||
|
||||
export namespace Response {
|
||||
export interface SyncServerRes {
|
||||
sync_servers: SyncServer[]
|
||||
total_items: number
|
||||
total_pages: number
|
||||
[property: string]: any
|
||||
}
|
||||
|
||||
export interface SyncServer {
|
||||
create_at?: string
|
||||
id?: number
|
||||
ip?: string
|
||||
is_online?: boolean
|
||||
location?: string
|
||||
update_at?: string
|
||||
[property: string]: any
|
||||
}
|
||||
|
||||
export interface SyncTaskRes {
|
||||
sync_tasks: SyncTask[]
|
||||
total_items: number
|
||||
total_pages: number
|
||||
[property: string]: any
|
||||
}
|
||||
|
||||
export interface SyncTask {
|
||||
create_at?: string
|
||||
id?: number
|
||||
ip?: string
|
||||
location?: string
|
||||
project_id?: number
|
||||
project_name?: string
|
||||
status?: number
|
||||
sync_server_id?: number
|
||||
update_at?: string
|
||||
uuid?: string
|
||||
[property: string]: any
|
||||
}
|
||||
}
|
||||
77
components/label/api/task/index.ts
Normal file
77
components/label/api/task/index.ts
Normal file
@@ -0,0 +1,77 @@
|
||||
import httpFetch from "@/api/fetch"
|
||||
import { Task } from "./typing"
|
||||
import { BASE_LABEL_API } from "../const"
|
||||
|
||||
// 获取任务列表
|
||||
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),
|
||||
})
|
||||
}
|
||||
|
||||
// 领取任务
|
||||
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),
|
||||
})
|
||||
}
|
||||
|
||||
// 调度任务
|
||||
export const taskDispatch = (data: Task.DispatchReqProps) => {
|
||||
return httpFetch({
|
||||
url: BASE_LABEL_API + "/api/v1/label_server/task/dispatch",
|
||||
method: "POST",
|
||||
body: JSON.stringify(data),
|
||||
})
|
||||
}
|
||||
|
||||
// 释放任务
|
||||
export const taskRelease = (data: Task.ReleaseReqProps) => {
|
||||
return httpFetch({
|
||||
url: BASE_LABEL_API + "/api/v1/label_server/task/release",
|
||||
method: "POST",
|
||||
body: JSON.stringify(data),
|
||||
})
|
||||
}
|
||||
|
||||
// 获取下一个任务
|
||||
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),
|
||||
})
|
||||
}
|
||||
|
||||
// 提交任务
|
||||
export const taskCommit = (data: Task.CommitReqProps) => {
|
||||
return httpFetch({
|
||||
url: BASE_LABEL_API + "/api/v1/label_server/task/commit",
|
||||
method: "POST",
|
||||
body: JSON.stringify(data),
|
||||
})
|
||||
}
|
||||
|
||||
// 获取任务的工作流程
|
||||
export const getTaskWorkFlow = (id: number) => {
|
||||
return httpFetch<any[]>({
|
||||
url: BASE_LABEL_API + `/api/v1/label_server/task/workflow/${id}`,
|
||||
method: "GET",
|
||||
})
|
||||
}
|
||||
|
||||
// 获取个人任务列表
|
||||
export const getUserTaskList = (params: {
|
||||
page_size: number
|
||||
page_number: number
|
||||
}) => {
|
||||
return httpFetch<Task.ResGetUserTaskList>({
|
||||
url: BASE_LABEL_API + `/api/v1/label_server/task/list_by_user`,
|
||||
method: "GET",
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
179
components/label/api/task/typing.ts
Normal file
179
components/label/api/task/typing.ts
Normal file
@@ -0,0 +1,179 @@
|
||||
export namespace Task {
|
||||
export interface DataProps {
|
||||
id: number
|
||||
create_date: string
|
||||
data_type?: number
|
||||
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 {
|
||||
data_type?: number
|
||||
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?: number
|
||||
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
|
||||
}
|
||||
|
||||
export interface ResGetUserTaskList {
|
||||
simple_task_list: SimpleTaskItem[]
|
||||
total_items: number
|
||||
total_pages: number
|
||||
}
|
||||
|
||||
export interface SimpleTaskItem {
|
||||
id: number
|
||||
label_status: number
|
||||
label_type: number
|
||||
label_username?: string
|
||||
project_id: number
|
||||
project_name: string
|
||||
rejected: boolean
|
||||
review1_username?: string
|
||||
review2_username?: string
|
||||
}
|
||||
}
|
||||
98
components/label/api/user/index.ts
Normal file
98
components/label/api/user/index.ts
Normal file
@@ -0,0 +1,98 @@
|
||||
import httpFetch from "@/api/fetch"
|
||||
import { BASE_LABEL_API } from "../const"
|
||||
import { Organization, User } from "./typing"
|
||||
|
||||
// 获取用户列表
|
||||
export const getUserList = (data: User.ListRequest) => {
|
||||
return httpFetch<User.ListResponse>({
|
||||
url: BASE_LABEL_API + "/api/v1/label_server/user/list",
|
||||
method: "POST",
|
||||
body: JSON.stringify({ ...data, tenant: "cowarobot" }),
|
||||
})
|
||||
}
|
||||
|
||||
// 新增用户
|
||||
export const userAdd = (data: User.CreateProps) => {
|
||||
return httpFetch({
|
||||
url: BASE_LABEL_API + "/api/v1/label_server/user/add",
|
||||
method: "POST",
|
||||
body: JSON.stringify(data),
|
||||
})
|
||||
}
|
||||
|
||||
// 批量导入用户
|
||||
export const userImport = (data: { user_infos: any[] }) => {
|
||||
return httpFetch<string[]>({
|
||||
url: BASE_LABEL_API + "/api/v1/label_server/user/batch_add",
|
||||
method: "POST",
|
||||
body: JSON.stringify(data),
|
||||
})
|
||||
}
|
||||
|
||||
// 编辑用户
|
||||
export const userEditById = (data: User.EditProps, id: number) => {
|
||||
return httpFetch({
|
||||
url: BASE_LABEL_API + `/api/v1/label_server/user/edit/${id}`,
|
||||
method: "PUT",
|
||||
body: JSON.stringify(data),
|
||||
})
|
||||
}
|
||||
|
||||
// 编辑用户组织
|
||||
export const userUpdateGroup = (data: User.UpdateGroupProps) => {
|
||||
return httpFetch({
|
||||
url: BASE_LABEL_API + `/api/v1/label_server/user/update/group`,
|
||||
method: "POST",
|
||||
body: JSON.stringify(data),
|
||||
})
|
||||
}
|
||||
|
||||
// 获取用户组织树
|
||||
export const getUserGroupTree = () => {
|
||||
return httpFetch<Organization.Response[]>({
|
||||
url: BASE_LABEL_API + "/api/v1/label_server/user/group/tree",
|
||||
method: "GET",
|
||||
})
|
||||
}
|
||||
|
||||
// 新增用户组
|
||||
export const userGroupAdd = (data: Organization.CreateProps) => {
|
||||
return httpFetch({
|
||||
url: BASE_LABEL_API + "/api/v1/label_server/user/group/add",
|
||||
method: "POST",
|
||||
body: JSON.stringify(data),
|
||||
})
|
||||
}
|
||||
|
||||
// 修改用户密码
|
||||
export const modifyUserPassword = (data: {
|
||||
old_password: string
|
||||
new_password: string
|
||||
}) => {
|
||||
return httpFetch({
|
||||
url: BASE_LABEL_API + "/api/v1/label_server/user/modify_password",
|
||||
method: "PUT",
|
||||
body: JSON.stringify(data),
|
||||
})
|
||||
}
|
||||
|
||||
/* ****************************** Options ****************************** */
|
||||
interface Option {
|
||||
label: string
|
||||
value: string
|
||||
}
|
||||
// 获取所有用户组
|
||||
export const getUserGroupAll = () => {
|
||||
return httpFetch<Array<Option>>({
|
||||
url: BASE_LABEL_API + `/api/v1/label_server/user/group/all`,
|
||||
method: "GET",
|
||||
})
|
||||
}
|
||||
|
||||
// 获取所有用户
|
||||
export const getUserAll = () => {
|
||||
return httpFetch<Array<Option>>({
|
||||
url: BASE_LABEL_API + "/api/v1/label_server/user/all",
|
||||
method: "GET",
|
||||
})
|
||||
}
|
||||
76
components/label/api/user/typing.ts
Normal file
76
components/label/api/user/typing.ts
Normal file
@@ -0,0 +1,76 @@
|
||||
export namespace User {
|
||||
export interface UserInfo {
|
||||
uid: number
|
||||
name: string
|
||||
all_projects: { [x: number]: number[] }
|
||||
collect_projects: number[]
|
||||
group_name: string
|
||||
group_uuid: string
|
||||
work_status: number
|
||||
base_city: string
|
||||
}
|
||||
|
||||
export interface LoginInfo extends UserInfo {
|
||||
token: string
|
||||
refresh_token: string
|
||||
}
|
||||
|
||||
export interface ListRequest {
|
||||
name?: string
|
||||
page_number?: number
|
||||
page_size?: number
|
||||
}
|
||||
|
||||
export interface ListResponse {
|
||||
user_list: UserInfo[]
|
||||
total_pages: number
|
||||
total_items: number
|
||||
}
|
||||
|
||||
export interface CreateProps {
|
||||
user_name: string
|
||||
group_uuid: string
|
||||
base_city: string
|
||||
}
|
||||
|
||||
export interface EditProps {
|
||||
user_name?: string
|
||||
password?: string
|
||||
group_uuid?: string
|
||||
base_city?: string
|
||||
work_status?: number
|
||||
}
|
||||
|
||||
export interface UpdateGroupProps {
|
||||
user_id: number
|
||||
group_uuid: string
|
||||
}
|
||||
}
|
||||
|
||||
export namespace Organization {
|
||||
export interface CreateProps {
|
||||
group_name: string
|
||||
leader_uid: number
|
||||
parent_group_uuid: string
|
||||
}
|
||||
|
||||
interface Member {
|
||||
base_city: string
|
||||
id: number
|
||||
name: string
|
||||
work_status: number
|
||||
}
|
||||
|
||||
export interface Response {
|
||||
children?: Response[]
|
||||
create_at?: string
|
||||
create_user?: string
|
||||
group_uuid: string
|
||||
leader_uid?: number
|
||||
leader_name?: string
|
||||
members?: Member[]
|
||||
name: string
|
||||
parent_group_uuid: string
|
||||
[key: string]: boolean | string | number | Response[] | Member[] | undefined
|
||||
}
|
||||
}
|
||||
65
components/label/api/workload/index.ts
Normal file
65
components/label/api/workload/index.ts
Normal file
@@ -0,0 +1,65 @@
|
||||
import httpFetch from "@/api/fetch"
|
||||
import { BASE_LABEL_API } from "../const"
|
||||
import { TimeFilter, WorkLoad } from "./typing"
|
||||
|
||||
// 标注工作量统计
|
||||
export const getLabelStatisticsList = (params: TimeFilter) => {
|
||||
return httpFetch<WorkLoad.LabelResponse>({
|
||||
url: BASE_LABEL_API + "/api/v1/label_server/workload/label_statistics/list",
|
||||
method: "GET",
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
|
||||
// 审核1工作量统计
|
||||
export const getReview1StatisticsList = (params: TimeFilter) => {
|
||||
return httpFetch<WorkLoad.Review1Response>({
|
||||
url:
|
||||
BASE_LABEL_API + "/api/v1/label_server/workload/review1_statistics/list",
|
||||
method: "GET",
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
|
||||
// 审核2工作量统计
|
||||
export const getReview2StatisticsList = (params: TimeFilter) => {
|
||||
return httpFetch<WorkLoad.Review2Response>({
|
||||
url:
|
||||
BASE_LABEL_API + "/api/v1/label_server/workload/review2_statistics/list",
|
||||
method: "GET",
|
||||
data: params,
|
||||
})
|
||||
}
|
||||
|
||||
// 结算表格列表
|
||||
export const getDownloadLog = () => {
|
||||
return httpFetch<any[]>({
|
||||
url: BASE_LABEL_API + "/api/v1/label_server/workload/settlement_form/list",
|
||||
method: "GET",
|
||||
})
|
||||
}
|
||||
|
||||
// 导出结算表格
|
||||
export const exportSettlementForm = (params: {
|
||||
year: number
|
||||
month: number
|
||||
}) => {
|
||||
return httpFetch<Blob>({
|
||||
url:
|
||||
BASE_LABEL_API + "/api/v1/label_server/workload/settlement_form/export",
|
||||
method: "GET",
|
||||
data: params,
|
||||
isDownload: true,
|
||||
})
|
||||
}
|
||||
|
||||
// 下载结算表格
|
||||
export const downloadSettlementForm = (params: { id: number }) => {
|
||||
return httpFetch<Blob>({
|
||||
url:
|
||||
BASE_LABEL_API + "/api/v1/label_server/workload/settlement_form/download",
|
||||
method: "GET",
|
||||
data: params,
|
||||
isDownload: true,
|
||||
})
|
||||
}
|
||||
107
components/label/api/workload/typing.ts
Normal file
107
components/label/api/workload/typing.ts
Normal file
@@ -0,0 +1,107 @@
|
||||
export interface TimeFilter {
|
||||
start_date: string
|
||||
end_date: string
|
||||
}
|
||||
|
||||
export namespace WorkLoad {
|
||||
export interface LabelData {
|
||||
commented_question_size: number
|
||||
commented_size: number
|
||||
commit_label_1: number
|
||||
commit_reviewed_1: number
|
||||
confirmed_prelabel_size: number
|
||||
dynamic_size: number
|
||||
group_name?: string
|
||||
key_frame_size: number
|
||||
object_size: number
|
||||
prelabel_object_size: number
|
||||
project_id: number
|
||||
project_name: string
|
||||
project_type: string
|
||||
question_size: number
|
||||
rejected_label_1: number
|
||||
reviewed_question_size: number
|
||||
reviewed_size: number
|
||||
static_size: number
|
||||
total_reviewed_size: number
|
||||
uid: number
|
||||
user_name: string
|
||||
work_time: number
|
||||
[property: string]: any
|
||||
}
|
||||
|
||||
export interface LabelResponse {
|
||||
all: LabelData[]
|
||||
order_by_group_name: any[]
|
||||
order_by_project_name: any[]
|
||||
order_by_project_type: any[]
|
||||
order_by_user_name: any[]
|
||||
}
|
||||
|
||||
export interface Review1Data {
|
||||
comment_size: number
|
||||
commented_size: number
|
||||
commit_review_1: number
|
||||
commit_reviewed_2: number
|
||||
confirmed_prelabel_size: number
|
||||
group_name?: string
|
||||
object_size: number
|
||||
prelabel_object_size: number
|
||||
project_id: number
|
||||
project_name: string
|
||||
project_type: string
|
||||
reject_review_1: number
|
||||
rejected_review_1: number
|
||||
review_dynamic_size: number
|
||||
review_key_frame_size: number
|
||||
review_question_size: number
|
||||
review_size: number
|
||||
review_static_size: number
|
||||
reviewed_size: number
|
||||
total_review_size: number
|
||||
total_reviewed_size: number
|
||||
uid: number
|
||||
user_name: string
|
||||
work_time: number
|
||||
[property: string]: any
|
||||
}
|
||||
|
||||
export interface Review1Response {
|
||||
all: Review1Data[]
|
||||
order_by_group_name: any[]
|
||||
order_by_project_name: any[]
|
||||
order_by_project_type: any[]
|
||||
order_by_user_name: any[]
|
||||
}
|
||||
|
||||
export interface Review2Data {
|
||||
comment_size: number
|
||||
commit_review_2: number
|
||||
confirmed_prelabel_size: number
|
||||
group_name?: string
|
||||
object_size: number
|
||||
prelabel_object_size: number
|
||||
project_id: number
|
||||
project_name: string
|
||||
project_type: string
|
||||
reject_review_2: number
|
||||
review_dynamic_size: number
|
||||
review_key_frame_size: number
|
||||
review_question_size: number
|
||||
review_size: number
|
||||
review_static_size: number
|
||||
total_review_size: number
|
||||
uid: number
|
||||
user_name: string
|
||||
work_time: number
|
||||
[property: string]: any
|
||||
}
|
||||
|
||||
export interface Review2Response {
|
||||
all: Review2Data[]
|
||||
order_by_group_name: any[]
|
||||
order_by_project_name: any[]
|
||||
order_by_project_type: any[]
|
||||
order_by_user_name: any[]
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user