feat(users): integrate user info and services APIs into 3-tab detail panel with proper padding

This commit is contained in:
2026-08-12 00:35:59 +08:00
parent 703d4dc583
commit 1a5489a361
17 changed files with 4127 additions and 382 deletions
+302 -27
View File
@@ -50,7 +50,7 @@ export interface paths {
content: {
"application/json": {
/**
* @example all
* @example archived
* @enum {string|null}
*/
state?: "active" | "archived" | "trashed" | "all" | null;
@@ -4371,7 +4371,7 @@ export interface paths {
/** @example architecto */
status?: string | null;
/**
* @example scheduled_booking
* @example manual_selection
* @enum {string|null}
*/
dispatch_mode?: "instant_accept" | "quote" | "scheduled_booking" | "manual_selection" | null;
@@ -4879,12 +4879,12 @@ export interface paths {
content: {
"application/json": {
/**
* @example consumed
* @example confirmed
* @enum {string|null}
*/
status?: "created" | "confirmed" | "started" | "consumed" | "paid" | "fulfilled" | "canceled" | null;
/**
* @example UNPAID
* @example PAID
* @enum {string|null}
*/
payment_status?: "UNPAID" | "PAID" | null;
@@ -5167,7 +5167,7 @@ export interface paths {
* @enum {string|null}
*/
status?: "offline" | "online" | "inactive" | "busy" | null;
/** @example false */
/** @example true */
is_disabled?: boolean | null;
/** @example false */
is_verified?: boolean | null;
@@ -5448,12 +5448,12 @@ export interface paths {
content: {
"application/json": {
/**
* @example public
* @example friends
* @enum {string|null}
*/
visibility?: "public" | "friends" | "private" | null;
/**
* @example blocked
* @example all
* @enum {string|null}
*/
status?: "blocked" | "visible" | "all" | null;
@@ -5779,7 +5779,7 @@ export interface paths {
content: {
"application/json": {
/**
* @example pending
* @example all
* @enum {string|null}
*/
status?: "pending" | "blocked" | "all" | null;
@@ -6158,7 +6158,7 @@ export interface paths {
path: {
/**
* @description The ID of the category.
* @example 5a37db21-5a9a-4438-8b4a-f0c80fc4f29e
* @example 2912b591-09f0-4c14-9190-866abd51cbee
*/
category_id: string;
};
@@ -6181,7 +6181,7 @@ export interface paths {
path: {
/**
* @description The ID of the category.
* @example 5a37db21-5a9a-4438-8b4a-f0c80fc4f29e
* @example 2912b591-09f0-4c14-9190-866abd51cbee
*/
category_id: string;
};
@@ -6204,7 +6204,7 @@ export interface paths {
path: {
/**
* @description The ID of the category.
* @example 5a37db21-5a9a-4438-8b4a-f0c80fc4f29e
* @example 2912b591-09f0-4c14-9190-866abd51cbee
*/
category_id: string;
};
@@ -6281,7 +6281,7 @@ export interface paths {
path: {
/**
* @description The ID of the category.
* @example 5a37db21-5a9a-4438-8b4a-f0c80fc4f29e
* @example 2912b591-09f0-4c14-9190-866abd51cbee
*/
category_id: string;
/**
@@ -6312,7 +6312,7 @@ export interface paths {
path: {
/**
* @description The ID of the category.
* @example 5a37db21-5a9a-4438-8b4a-f0c80fc4f29e
* @example 2912b591-09f0-4c14-9190-866abd51cbee
*/
category_id: string;
/**
@@ -6678,6 +6678,281 @@ export interface paths {
patch?: never;
trace?: never;
};
"/api/admin/v1/users/{uid}/info": {
parameters: {
query?: never;
header?: never;
path: {
/** @example architecto */
uid: string;
};
cookie?: never;
};
/**
* []
* @description
*/
get: {
parameters: {
query?: never;
header?: never;
path: {
/** @example architecto */
uid: string;
};
cookie?: never;
};
requestBody?: never;
responses: {
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": {
/** @example true */
success?: boolean;
data?: {
user?: {
/** @example user */
kind?: string;
/** @example 01HQ8M4Z2A3B5C6D7E8F9G0H1I2J3K4L */
uid?: string;
/** @example [email protected] */
email?: string;
/** @example true */
status?: boolean;
};
profile?: {
/** @example user_profile */
kind?: string;
/** @example 01HQ8M4Z2A3B5C6D7E8F9G0H1I2J3K4L */
user_uid?: string;
/** @example 张三 */
computed_fullname?: string;
};
/** @example [] */
careers?: unknown[];
/** @example [] */
educations?: unknown[];
/** @example [] */
honors?: unknown[];
/**
* @example [
* {
* "kind": "user_address",
* "contact_name": "张三",
* "contact_phone_number": "13800000000"
* }
* ]
*/
addresses?: {
/** @example user_address */
kind?: string;
/** @example 张三 */
contact_name?: string;
/** @example 13800000000 */
contact_phone_number?: string;
}[];
};
};
};
};
403: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": {
/** @example false */
success?: boolean;
/** @example FORBIDDEN */
code?: string;
/** @example 您无权访问此资源。 */
message?: string;
};
};
};
404: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": {
/** @example false */
success?: boolean;
/** @example NOT_FOUND */
code?: string;
/** @example 用户不存在 */
message?: string;
};
};
};
};
};
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/admin/v1/users/{uid}/services": {
parameters: {
query?: never;
header?: never;
path: {
/** @example architecto */
uid: string;
};
cookie?: never;
};
/**
* []
* @description
*/
get: {
parameters: {
query?: never;
header?: never;
path: {
/** @example architecto */
uid: string;
};
cookie?: never;
};
requestBody?: never;
responses: {
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": {
/** @example true */
success?: boolean;
data?: {
/**
* @example [
* {
* "id": 1,
* "kind": "expertise",
* "name": "清洗空调",
* "description": "空调深度清洗",
* "tags": [
* "家电"
* ],
* "user_uid": "01HQ8M4Z2A3B5C6D7E8F9G0H1I2J3K4L",
* "services": [
* {
* "id": 1,
* "kind": "expertise_service",
* "service_type": "onsite",
* "charge_type": "time",
* "price": 12900,
* "currency_code": "CNY",
* "duration": 90,
* "enabled": true
* }
* ]
* }
* ]
*/
expertises?: {
/** @example 1 */
id?: number;
/** @example expertise */
kind?: string;
/** @example 清洗空调 */
name?: string;
/** @example 空调深度清洗 */
description?: string;
/**
* @example [
* "家电"
* ]
*/
tags?: string[];
/** @example 01HQ8M4Z2A3B5C6D7E8F9G0H1I2J3K4L */
user_uid?: string;
/**
* @example [
* {
* "id": 1,
* "kind": "expertise_service",
* "service_type": "onsite",
* "charge_type": "time",
* "price": 12900,
* "currency_code": "CNY",
* "duration": 90,
* "enabled": true
* }
* ]
*/
services?: {
/** @example 1 */
id?: number;
/** @example expertise_service */
kind?: string;
/** @example onsite */
service_type?: string;
/** @example time */
charge_type?: string;
/** @example 12900 */
price?: number;
/** @example CNY */
currency_code?: string;
/** @example 90 */
duration?: number;
/** @example true */
enabled?: boolean;
}[];
}[];
};
};
};
};
403: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": {
/** @example false */
success?: boolean;
/** @example FORBIDDEN */
code?: string;
/** @example 您无权访问此资源。 */
message?: string;
};
};
};
404: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": {
/** @example false */
success?: boolean;
/** @example NOT_FOUND */
code?: string;
/** @example 用户不存在 */
message?: string;
};
};
};
};
};
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/admin/v1/sid/rules": {
parameters: {
query?: never;
@@ -7074,10 +7349,10 @@ export interface paths {
get?: never;
put?: never;
/**
* SID
* [SID] SID
* @description SID
*/
post: operations["SID"];
post: operations["SIDSID"];
delete?: never;
options?: never;
head?: never;
@@ -7143,7 +7418,7 @@ export interface paths {
q?: string | null;
/** @example true */
status?: boolean | null;
/** @example false */
/** @example true */
is_robot?: boolean | null;
/**
* @description Must not be greater than 100 characters.
@@ -8302,7 +8577,7 @@ export interface paths {
content: {
"application/json": {
/**
* @example all
* @example pending
* @enum {string|null}
*/
status?: "pending" | "blocked" | "all" | null;
@@ -8665,11 +8940,11 @@ export interface paths {
content: {
"application/json": {
/**
* @example desktop
* @example android
* @enum {string|null}
*/
platform?: "ios" | "android" | "web" | "desktop" | null;
/** @example false */
/** @example true */
is_online?: boolean | null;
/**
* @description Must be at least 1.
@@ -9039,7 +9314,7 @@ export interface operations {
path: {
/**
* @description The ID of the category.
* @example 5a37db21-5a9a-4438-8b4a-f0c80fc4f29e
* @example 2912b591-09f0-4c14-9190-866abd51cbee
*/
category_id: string;
};
@@ -9055,7 +9330,7 @@ export interface operations {
path: {
/**
* @description The ID of the category.
* @example 5a37db21-5a9a-4438-8b4a-f0c80fc4f29e
* @example 2912b591-09f0-4c14-9190-866abd51cbee
*/
category_id: string;
};
@@ -9071,7 +9346,7 @@ export interface operations {
path: {
/**
* @description The ID of the category.
* @example 5a37db21-5a9a-4438-8b4a-f0c80fc4f29e
* @example 2912b591-09f0-4c14-9190-866abd51cbee
*/
category_id: string;
};
@@ -9389,7 +9664,7 @@ export interface operations {
path: {
/**
* @description The ID of the category.
* @example 5a37db21-5a9a-4438-8b4a-f0c80fc4f29e
* @example 2912b591-09f0-4c14-9190-866abd51cbee
*/
category_id: string;
/**
@@ -9452,7 +9727,7 @@ export interface operations {
path: {
/**
* @description The ID of the category.
* @example 5a37db21-5a9a-4438-8b4a-f0c80fc4f29e
* @example 2912b591-09f0-4c14-9190-866abd51cbee
*/
category_id: string;
/**
@@ -9521,7 +9796,7 @@ export interface operations {
path: {
/**
* @description The ID of the category.
* @example 5a37db21-5a9a-4438-8b4a-f0c80fc4f29e
* @example 2912b591-09f0-4c14-9190-866abd51cbee
*/
category_id: string;
/**
@@ -9617,7 +9892,7 @@ export interface operations {
path: {
/**
* @description The ID of the category.
* @example 5a37db21-5a9a-4438-8b4a-f0c80fc4f29e
* @example 2912b591-09f0-4c14-9190-866abd51cbee
*/
category_id: string;
/**
@@ -9704,7 +9979,7 @@ export interface operations {
};
};
};
SID: {
SIDSID: {
parameters: {
query?: never;
header?: never;