Commit 6732a4f7 authored by 文旺-丰林-DEV's avatar 文旺-丰林-DEV

add prompt word type table

parent 655a0f28
......@@ -16,7 +16,18 @@
name: 'prompt',
icon: 'table',
path: '/prompt',
component: './PromptWord',
routes: [
{
path: '/prompt/word',
name: 'word',
component: './PromptWord',
},
{
path: '/prompt/type',
name: 'type',
component: './PromptWordType',
},
],
},
{
name: 'chat',
......
.edit_type {
display: flex;
align-items: center;
span {
width: 70px;
margin-right: 10px;
}
}
.edit_prompt {
display: flex;
align-items: flex-start;
span {
width: 70px;
margin-right: 10px;
}
}
import { Button, Col, Divider, Form, Modal, Row, Input } from 'antd';
import { useEffect } from 'react';
import styles from './index.less';
import type { IFormValue, ITypeFormValue } from '@/pages/PromptWord';
interface IEditPromptModalProps {
open: boolean;
setOpen: (value: boolean) => void;
modalType: 'create' | 'edit' | '';
handleEditPrompt: (value: ITypeFormValue) => void;
oldRow: IFormValue;
loading?: boolean;
handleCreatePrompt: (value: ITypeFormValue) => void;
}
const EditPromptTypeModal = (props: IEditPromptModalProps) => {
const { open, setOpen, modalType, handleEditPrompt, loading, oldRow, handleCreatePrompt } = props;
const [form] = Form.useForm();
useEffect(() => {
if (modalType === 'create') {
form.resetFields();
}
if (modalType === 'edit') {
form.setFieldsValue({
type: oldRow.type,
});
}
}, [open]);
const handleSavePrompt = async () => {
const { type } = form.getFieldsValue();
if (modalType === 'create') {
await handleCreatePrompt({
type,
});
}
if (modalType === 'edit') {
await handleEditPrompt({
type,
});
}
setOpen(false);
};
const layout = {
labelCol: { span: 4 },
wrapperCol: { span: 18 },
};
return (
<Modal
open={open}
centered
confirmLoading={loading}
wrapClassName={styles.modal}
title={modalType === 'create' ? '新增提示类型' : '编辑提示类型'}
okText="保存"
onOk={() => {
setOpen(false);
}}
onCancel={() => {
setOpen(false);
}}
width={574}
footer={null}
>
<Form form={form} name="editAndCrateForm" {...layout} onFinish={handleSavePrompt}>
<Form.Item
label="提示类型"
name={'type'}
rules={[{ required: true, message: '请输入提示类型!' }]}
>
<Input />
</Form.Item>
<Divider />
<Row justify={'end'} gutter={8}>
<Col>
<Form.Item key={'cancelButton'} noStyle={true}>
<Button
key="back"
onClick={() => {
setOpen(false);
}}
>
取消
</Button>
</Form.Item>
</Col>
<Col>
<Form.Item key={'saveButton'} noStyle={true}>
<Button key="submit" type="primary" loading={loading} htmlType="submit">
保存
</Button>
</Form.Item>
</Col>
</Row>
</Form>
</Modal>
);
};
export default EditPromptTypeModal;
export default {
'menu.chat': 'AI助手',
'menu.prompt.type': '提示类型管理',
'menu.prompt.word': '提示词管理',
'menu.prompt': '提示词库',
'menu.welcome': '欢迎',
'menu.user': '用户管理',
'menu.more-blocks': '更多区块',
'menu.home': '首页',
'menu.admin': '账号管理',
'menu.admin.user': '用户管理',
'menu.prompt': '提示词库',
'menu.admin.sub-page': '二级管理页',
'menu.login': '登录',
'menu.register': '注册',
......
......@@ -14,6 +14,7 @@ import {
deletePromptWords,
typePromptWords,
} from '@/services/chatGLM/api';
import moment from 'moment';
interface IPromptList {
id: string;
......@@ -29,6 +30,9 @@ export interface IFormValue {
content: string;
}
export interface ITypeFormValue {
type: string | null;
}
interface ILoading {
editModalLoading: boolean;
createModalLoading: boolean;
......@@ -139,6 +143,7 @@ const PromptWord = () => {
});
setAllLoading({ ...allLoading, editModalLoading: false });
actionRef.current?.reload();
message.success('操作成功');
} catch (error) {
setAllLoading({ ...allLoading, editModalLoading: false });
message.error('编辑提示用语失败,请重试');
......@@ -154,6 +159,7 @@ const PromptWord = () => {
});
setAllLoading({ ...allLoading, createModalLoading: false });
actionRef.current?.reload();
message.success('操作成功');
} catch (error) {
setAllLoading({ ...allLoading, createModalLoading: false });
message.error('新增提示用语失败,请重试');
......
import { PlusOutlined } from '@ant-design/icons';
import { ActionType, PageContainer } from '@ant-design/pro-components';
import { ProTable } from '@ant-design/pro-components';
import { Button, Space, message } from 'antd';
import { isEmpty } from 'lodash';
import { useRef, useState } from 'react';
import styles from './index.less';
import {
pagePromptWordType,
createPromptWordType,
updatePromptWordType,
} from '@/services/chatGLM/api';
import EditPromptTypeModal from '@/components/EditAndAddPromptTypeModal';
import { ITypeFormValue } from '../PromptWord';
interface IPromptList {
id: string;
title?: string;
content: string;
type: string;
creationTime: string;
sequenceNumber: number;
}
export interface IFormValue {
type: string | null;
content: string;
}
interface ILoading {
editModalLoading: boolean;
createModalLoading: boolean;
deleteModalLoading: boolean;
listLoading: boolean;
}
const PromptWordType = () => {
const actionRef = useRef<ActionType>();
const [allLoading, setAllLoading] = useState<ILoading>({
editModalLoading: false,
createModalLoading: false,
deleteModalLoading: false,
listLoading: false,
});
const [editAndAddModalOpen, setEditAndDeleteModalOpen] = useState(false);
const [modalType, setModalType] = useState<'create' | 'edit' | ''>('');
const [currentRow, setCurrentRaw] = useState({} as IPromptList);
const columns: any[] = [
{
title: '提示类型',
key: 'type',
dataIndex: 'type',
ellipsis: true,
search: true,
order: 2,
},
{
title: '创建时间',
width: '25%',
key: 'creationTime',
dataIndex: 'creationTime',
search: false,
},
{
title: '操作',
valueType: 'option',
width: '15%',
key: 'option',
render: (_: unknown, record: IPromptList) => (
<div className={styles.table_action}>
<div
className={styles.table_action_edit}
onClick={() => {
setCurrentRaw(record);
setEditAndDeleteModalOpen(true);
setModalType('edit');
}}
>
<Button size="small" type="link">
编辑
</Button>
</div>
</div>
),
},
];
const handleEditPrompt = async (editValue: ITypeFormValue) => {
setAllLoading({ ...allLoading, editModalLoading: true });
try {
await updatePromptWordType({
id: currentRow.id,
type: editValue.type,
});
setAllLoading({ ...allLoading, editModalLoading: false });
actionRef.current?.reload();
message.success('操作成功');
} catch (error) {
setAllLoading({ ...allLoading, editModalLoading: false });
message.error('编辑提示类型失败,请重试');
}
};
const handleCreatePrompt = async (createValue: ITypeFormValue) => {
setAllLoading({ ...allLoading, createModalLoading: true });
try {
await createPromptWordType({
type: createValue.type,
});
setAllLoading({ ...allLoading, createModalLoading: false });
actionRef.current?.reload();
message.success('操作成功');
} catch (error) {
setAllLoading({ ...allLoading, createModalLoading: false });
message.error('新增提示类型失败,请重试');
}
};
return (
<PageContainer>
<EditPromptTypeModal
open={editAndAddModalOpen}
setOpen={setEditAndDeleteModalOpen}
modalType={modalType}
handleEditPrompt={handleEditPrompt}
oldRow={currentRow}
handleCreatePrompt={handleCreatePrompt}
loading={
modalType === 'create' ? allLoading.createModalLoading : allLoading.editModalLoading
}
/>
<ProTable
request={async (params = { pageSize: 10, current: 0 }) => {
setAllLoading({ ...allLoading, listLoading: true });
const promptListParams = {
filter: params['type'] || '',
pageIndex: (params?.current as number) - 1,
pageSize: params?.pageSize,
};
try {
const response = await pagePromptWordType(promptListParams);
setAllLoading({ ...allLoading, listLoading: false });
return {
data: response.items,
total: response.totalCount,
success: !isEmpty(response),
};
} catch (error) {
setAllLoading({ ...allLoading, listLoading: false });
message.error('请求列表失败,请重试');
return {
data: [],
total: 0,
success: false,
};
}
}}
actionRef={actionRef}
columns={columns}
cardBordered
rowKey="id"
pagination={{
pageSize: 10,
}}
options={false}
headerTitle="账号列表"
toolBarRender={() => [
<Button
key="button"
icon={<PlusOutlined />}
onClick={() => {
setEditAndDeleteModalOpen(true);
setModalType('create');
}}
type="primary"
>
添加提示类型
</Button>,
]}
loading={allLoading.listLoading}
/>
</PageContainer>
);
};
export default PromptWordType;
......@@ -111,6 +111,7 @@ const UserManage = () => {
title: '创建时间',
dataIndex: 'creationTime',
hideInSearch: true,
valueType: 'datetime',
},
{
title: '操作',
......
......@@ -69,77 +69,106 @@ interface ITalkParams {
temperature?: number;
}
const host = 'https://glm-mangement-api.baibaomen.com';
export const CreatedAccount = (params: any): Promise<string> => {
return request('https://glm-mangement-api.baibaomen.com/User/create', {
return request(host + '/User/create', {
method: 'POST',
body: JSON.stringify(params),
});
};
export const getRole = (params?: any): Promise<string> => {
return request('https://glm-mangement-api.baibaomen.com/User/roles', {
return request(host + '/User/roles', {
method: 'POST',
body: JSON.stringify(params),
});
};
export const getUserMessage = (params?: any): Promise<string> => {
return request('https://glm-mangement-api.baibaomen.com/User/page', {
return request(host + '/User/page', {
method: 'POST',
body: JSON.stringify(params),
});
};
export const createPromptWords = (params: any): Promise<any> => {
return request('https://glm-mangement-api.baibaomen.com/PromptWords/create', {
return request(host + '/PromptWords/create', {
method: 'POST',
data: params,
});
};
export const updatePromptWords = (params: any): Promise<any> => {
return request('https://glm-mangement-api.baibaomen.com/PromptWords/update', {
return request(host + '/PromptWords/update', {
method: 'POST',
data: params,
});
};
export const deletePromptWords = (params: any): Promise<any> => {
return request('https://glm-mangement-api.baibaomen.com/PromptWords/delete', {
return request(host + '/PromptWords/delete', {
method: 'POST',
data: params,
});
};
export const pagePromptWords = (params: any): Promise<any> => {
return request('https://glm-mangement-api.baibaomen.com/PromptWords/page', {
return request(host + '/PromptWords/page', {
method: 'POST',
data: params,
});
};
export const createPromptWordType = (params: any): Promise<any> => {
return request(host + '/PromptWordTypes/create', {
method: 'POST',
data: params,
});
};
export const updatePromptWordType = (params: any): Promise<any> => {
return request(host + '/PromptWordTypes/update', {
method: 'POST',
data: params,
});
};
export const deletePromptWordType = (params: any): Promise<any> => {
return request(host + '/PromptWordTypes/delete', {
method: 'POST',
data: params,
});
};
export const pagePromptWordType = (params: any): Promise<any> => {
return request(host + '/PromptWordTypes/page', {
method: 'POST',
data: params,
});
};
export const typePromptWords = (): Promise<any> => {
return request('https://glm-mangement-api.baibaomen.com/PromptWords/type', {
return request(host + '/PromptWordTypes/type', {
method: 'POST',
});
};
export const postDeleteUser = (params?: any): Promise<string> => {
return request('https://glm-mangement-api.baibaomen.com/User/delete', {
return request(host + '/User/delete', {
method: 'POST',
data: params,
});
};
export const postResetUser = (params?: any): Promise<string> => {
return request('https://glm-mangement-api.baibaomen.com/User/reset', {
return request(host + '/User/reset', {
method: 'POST',
body: JSON.stringify(params),
});
};
export const postEditUser = (params?: any): Promise<string> => {
return request('https://glm-mangement-api.baibaomen.com/User/update', {
return request(host + '/User/update', {
method: 'POST',
body: JSON.stringify(params),
});
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment