Skip to content

Commit 8b31849

Browse files
author
杨纲
committed
feat: 研发成员账号展示 AI 员工模块
1 parent 8415c4d commit 8b31849

7 files changed

Lines changed: 220 additions & 5 deletions

File tree

ui/src/api/UserAiEmployee.ts

Lines changed: 166 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,166 @@
1+
/* eslint-disable */
2+
/* tslint:disable */
3+
// @ts-nocheck
4+
/*
5+
* ---------------------------------------------------------------
6+
* ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ##
7+
* ## ##
8+
* ## AUTHOR: acacode ##
9+
* ## SOURCE: https://github.com/acacode/swagger-typescript-api ##
10+
* ---------------------------------------------------------------
11+
*/
12+
13+
import request, { ContentType, RequestParams } from "./httpClient";
14+
import {
15+
DomainAIEmployee,
16+
DomainCreateAIEmployeeReq,
17+
DomainListAIEmployeeResp,
18+
DomainUUIDReq,
19+
DomainUpdateAIEmployeeReq,
20+
GetUserAiemployeeInfoParams,
21+
GetUserAiemployeeListParams,
22+
WebResp,
23+
} from "./types";
24+
25+
/**
26+
* @description 获取AI员工列表
27+
*
28+
* @tags User AIEmployee
29+
* @name GetUserAiemployeeList
30+
* @summary 获取AI员工列表
31+
* @request GET:/api/v1/user/aiemployee
32+
* @response `200` `(WebResp & {
33+
data?: DomainListAIEmployeeResp,
34+
35+
})` OK
36+
*/
37+
38+
export const getUserAiemployeeList = (
39+
query: GetUserAiemployeeListParams,
40+
params: RequestParams = {},
41+
) =>
42+
request<
43+
WebResp & {
44+
data?: DomainListAIEmployeeResp;
45+
}
46+
>({
47+
path: `/api/v1/user/aiemployee`,
48+
method: "GET",
49+
query: query,
50+
type: ContentType.Json,
51+
format: "json",
52+
...params,
53+
});
54+
55+
/**
56+
* @description 更新AI员工
57+
*
58+
* @tags User AIEmployee
59+
* @name PutUserAiemployeeUpdate
60+
* @summary 更新AI员工
61+
* @request PUT:/api/v1/user/aiemployee
62+
* @response `200` `(WebResp & {
63+
data?: DomainAIEmployee,
64+
65+
})` OK
66+
*/
67+
68+
export const putUserAiemployeeUpdate = (
69+
param: DomainUpdateAIEmployeeReq,
70+
params: RequestParams = {},
71+
) =>
72+
request<
73+
WebResp & {
74+
data?: DomainAIEmployee;
75+
}
76+
>({
77+
path: `/api/v1/user/aiemployee`,
78+
method: "PUT",
79+
body: param,
80+
type: ContentType.Json,
81+
format: "json",
82+
...params,
83+
});
84+
85+
/**
86+
* @description 创建AI员工
87+
*
88+
* @tags User AIEmployee
89+
* @name PostUserAiemployeeCreate
90+
* @summary 创建AI员工
91+
* @request POST:/api/v1/user/aiemployee
92+
* @response `200` `(WebResp & {
93+
data?: DomainAIEmployee,
94+
95+
})` OK
96+
*/
97+
98+
export const postUserAiemployeeCreate = (
99+
param: DomainCreateAIEmployeeReq,
100+
params: RequestParams = {},
101+
) =>
102+
request<
103+
WebResp & {
104+
data?: DomainAIEmployee;
105+
}
106+
>({
107+
path: `/api/v1/user/aiemployee`,
108+
method: "POST",
109+
body: param,
110+
type: ContentType.Json,
111+
format: "json",
112+
...params,
113+
});
114+
115+
/**
116+
* @description 删除AI员工
117+
*
118+
* @tags User AIEmployee
119+
* @name DeleteUserAiemployeeDelete
120+
* @summary 删除AI员工
121+
* @request DELETE:/api/v1/user/aiemployee
122+
* @response `200` `WebResp` OK
123+
*/
124+
125+
export const deleteUserAiemployeeDelete = (
126+
param: DomainUUIDReq,
127+
params: RequestParams = {},
128+
) =>
129+
request<WebResp>({
130+
path: `/api/v1/user/aiemployee`,
131+
method: "DELETE",
132+
body: param,
133+
type: ContentType.Json,
134+
format: "json",
135+
...params,
136+
});
137+
138+
/**
139+
* @description 获取AI员工详情
140+
*
141+
* @tags User AIEmployee
142+
* @name GetUserAiemployeeInfo
143+
* @summary 获取AI员工详情
144+
* @request GET:/api/v1/user/aiemployee/info
145+
* @response `200` `(WebResp & {
146+
data?: DomainAIEmployee,
147+
148+
})` OK
149+
*/
150+
151+
export const getUserAiemployeeInfo = (
152+
query: GetUserAiemployeeInfoParams,
153+
params: RequestParams = {},
154+
) =>
155+
request<
156+
WebResp & {
157+
data?: DomainAIEmployee;
158+
}
159+
>({
160+
path: `/api/v1/user/aiemployee/info`,
161+
method: "GET",
162+
query: query,
163+
type: ContentType.Json,
164+
format: "json",
165+
...params,
166+
});

ui/src/api/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ export * from './Model'
99
export * from './OpenAiv1'
1010
export * from './SecurityScanning'
1111
export * from './User'
12+
export * from './UserAiEmployee'
1213
export * from './UserDashboard'
1314
export * from './UserGroup'
1415
export * from './UserManage'

ui/src/api/types.ts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1749,6 +1749,27 @@ export interface GetSecurityScanningDetailParams {
17491749
id: string;
17501750
}
17511751

1752+
export interface GetUserAiemployeeListParams {
1753+
/** 下一页标识 */
1754+
next_token?: string;
1755+
/**
1756+
* 分页
1757+
* @min 1
1758+
* @default 1
1759+
*/
1760+
page?: number;
1761+
/**
1762+
* 每页多少条记录
1763+
* @min 1
1764+
* @default 10
1765+
*/
1766+
size?: number;
1767+
}
1768+
1769+
export interface GetUserAiemployeeInfoParams {
1770+
id?: string;
1771+
}
1772+
17521773
export interface GetUserChatInfoParams {
17531774
/** 对话记录ID */
17541775
id: string;

ui/src/components/sidebar/index.tsx

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ const ADMIN_MENUS = [
4141
show: true,
4242
disabled: false,
4343
},
44-
{
44+
{
4545
label: 'AI 员工',
4646
value: '/employee',
4747
pathname: 'employee',
@@ -100,6 +100,14 @@ const USER_MENUS = [
100100
show: true,
101101
disabled: false,
102102
},
103+
{
104+
label: 'AI 员工',
105+
value: '/user/employee',
106+
pathname: '/user/employee',
107+
icon: 'icon-zhanghao',
108+
show: true,
109+
disabled: false,
110+
},
103111
// {
104112
// label: '设置',
105113
// value: '/user/setting',

ui/src/pages/employee/emloyeeModal.tsx

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ import {
55
DomainUpdateAIEmployeeReq,
66
postAiemployeeCreate,
77
putAiemployeeUpdate,
8+
postUserAiemployeeCreate,
9+
putUserAiemployeeUpdate,
810
} from "@/api";
911
import { Ellipsis, message, Modal } from "@c-x/ui";
1012
import { zodResolver } from "@hookform/resolvers/zod";
@@ -25,6 +27,7 @@ import {
2527
import { useEffect, useState } from "react";
2628
import CopyToClipboard from "react-copy-to-clipboard";
2729
import { Controller, useForm } from "react-hook-form";
30+
import { useLocation } from "react-router-dom";
2831
import { z } from "zod";
2932

3033
const formSchema = z.object({
@@ -61,6 +64,8 @@ const EmloyeeModal = ({
6164
const [webhookUrl, setWebhookUrl] = useState<
6265
Pick<DomainAIEmployee, "webhook_url" | "webhook_secret"> | undefined
6366
>();
67+
const { pathname } = useLocation();
68+
const isUser = pathname.startsWith("/user/");
6469
const {
6570
reset,
6671
register,
@@ -74,8 +79,8 @@ const EmloyeeModal = ({
7479
const handleChange = handleSubmit(
7580
async (data) => {
7681
const res = await (record
77-
? putAiemployeeUpdate({ ...data, id: record.id })
78-
: postAiemployeeCreate(data));
82+
? (isUser ? putUserAiemployeeUpdate : putAiemployeeUpdate)({ ...data, id: record.id })
83+
: (isUser ? postUserAiemployeeCreate : postAiemployeeCreate)(data));
7984
onChanged?.(); // 调用回调函数,刷新列表
8085
setWebhookUrl(res);
8186
setWebhookOpen(true);

ui/src/pages/employee/index.tsx

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,10 @@ import Card from "@/components/card";
55
import { Box, Button, Stack } from "@mui/material";
66

77
import { deleteAiemployeeDelete, getAiemployeeList } from "@/api/AiEmployee";
8+
import {
9+
deleteUserAiemployeeDelete,
10+
getUserAiemployeeList,
11+
} from "@/api/UserAiEmployee";
812
import {
913
ConstsRepoPlatform,
1014
DomainAIEmployee,
@@ -13,6 +17,7 @@ import {
1317
import { ColumnsType } from "@c-x/ui/dist/Table";
1418
import dayjs from "dayjs";
1519
import EmloyeeModal from "./emloyeeModal";
20+
import { useLocation } from "react-router-dom";
1621

1722
const gitPlatformIcons = {
1823
[ConstsRepoPlatform.RepoPlatformGitHub]: "icon-github",
@@ -27,6 +32,8 @@ const EmployeeTaskList = () => {
2732
const [loading, setLoading] = useState(false);
2833
const [dataSource, setDataSource] = useState<DomainAIEmployee[]>([]);
2934
const [detail, setDetail] = useState<DomainUpdateAIEmployeeReq | undefined>();
35+
const { pathname } = useLocation();
36+
const isUser = pathname.startsWith("/user/");
3037
const [open, setOpen] = useState(false);
3138
const onClose = () => {
3239
setOpen(false);
@@ -39,7 +46,7 @@ const EmployeeTaskList = () => {
3946

4047
const fetchData = async (params: { page?: number; size?: number }) => {
4148
setLoading(true);
42-
const res = await getAiemployeeList({
49+
const res = await (isUser ? getUserAiemployeeList : getAiemployeeList)({
4350
page: params.page || page,
4451
size: params.size || size,
4552
});
@@ -79,7 +86,9 @@ const EmployeeTaskList = () => {
7986
</>
8087
),
8188
onOk: () => {
82-
deleteAiemployeeDelete({ id: record.id! }).then(() => {
89+
(isUser ? deleteUserAiemployeeDelete : deleteAiemployeeDelete)({
90+
id: record.id!,
91+
}).then(() => {
8392
message.success("删除成功");
8493
fetchData({});
8594
});
@@ -259,6 +268,7 @@ const EmployeeTaskList = () => {
259268
size="small"
260269
sx={{ mb: 2, alignSelf: "flex-end" }}
261270
onClick={() => setOpen(true)}
271+
disabled={isUser && total > 0}
262272
>
263273
创建 AI 员工
264274
</Button>

ui/src/router.tsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,10 @@ const routerConfig = [
116116
path: 'codescan',
117117
element: <UserCodeScan />,
118118
},
119+
{
120+
path: 'employee',
121+
element: <AdminEmployee />,
122+
},
119123
{
120124
path: 'setting',
121125
element: <UserSetting />,

0 commit comments

Comments
 (0)