From ae15530766a5b657f3c52c6d22987b3aa9d994da Mon Sep 17 00:00:00 2001 From: lq1405 <2769838458@qq.com> Date: Wed, 13 Nov 2024 12:41:33 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=8F=90=E7=A4=BA=E8=AF=8D?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B=E5=92=8C=E6=8F=90=E7=A4=BA=E8=AF=8D=E9=A2=84?= =?UTF-8?q?=E8=AE=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/routes.ts | 1 + src/access.ts | 1 + src/pages/Machine/ModifyMachine/index.tsx | 2 +- .../BasicOptions/SimpleOptions/index.tsx | 98 +++++++ .../BasicOptions/TrialOptions/index.tsx | 78 +++++ .../LaitoolOptions/BasicOptions/index.tsx | 113 ++----- src/pages/Prompt/ManagePrompt/index.tsx | 153 ---------- src/pages/Prompt/ManagePromptType/index.tsx | 112 ------- .../PromptManagement/ManagePrompt/index.tsx | 162 ++++++++++ src/pages/Prompt/PromptManagement/index.tsx | 277 +++++++++++------- .../ManagePromptType/index.tsx | 142 +++++++++ .../Prompt/PromptTypeManagement/index.tsx | 189 +++++++----- src/services/services/options/optionsTool.ts | 6 +- src/services/services/prompt.ts | 264 ++++++++++------- src/services/typing/prompt.d.ts | 104 +++++-- src/services/typing/user.d.ts | 8 +- src/store/software.ts | 21 +- 17 files changed, 1053 insertions(+), 678 deletions(-) create mode 100644 src/pages/Options/LaitoolOptions/BasicOptions/SimpleOptions/index.tsx create mode 100644 src/pages/Options/LaitoolOptions/BasicOptions/TrialOptions/index.tsx delete mode 100644 src/pages/Prompt/ManagePrompt/index.tsx delete mode 100644 src/pages/Prompt/ManagePromptType/index.tsx create mode 100644 src/pages/Prompt/PromptManagement/ManagePrompt/index.tsx create mode 100644 src/pages/Prompt/PromptTypeManagement/ManagePromptType/index.tsx diff --git a/config/routes.ts b/config/routes.ts index e3fa896..28335a0 100644 --- a/config/routes.ts +++ b/config/routes.ts @@ -59,6 +59,7 @@ export default [ name: 'prompt-management', path: '/prompt/prompt-management', component: './Prompt/PromptManagement/index', + access: 'canPrompt', } ] }, diff --git a/src/access.ts b/src/access.ts index d212ec8..e03f0c0 100644 --- a/src/access.ts +++ b/src/access.ts @@ -57,6 +57,7 @@ export default function access(initialState: { currentUser?: API.CurrentUser } | if (currentUser?.roleNames?.includes("Admin")) { access = { ...access, + canPrompt: true, canUserManagement: true, canEditUser: true, diff --git a/src/pages/Machine/ModifyMachine/index.tsx b/src/pages/Machine/ModifyMachine/index.tsx index 497b4ba..9f261f2 100644 --- a/src/pages/Machine/ModifyMachine/index.tsx +++ b/src/pages/Machine/ModifyMachine/index.tsx @@ -99,7 +99,7 @@ const ModifyMachine: React.FC = ({ id, setFormRef, open }) = label="机器码" name="machineId" > - + diff --git a/src/pages/Options/LaitoolOptions/BasicOptions/SimpleOptions/index.tsx b/src/pages/Options/LaitoolOptions/BasicOptions/SimpleOptions/index.tsx new file mode 100644 index 0000000..1333992 --- /dev/null +++ b/src/pages/Options/LaitoolOptions/BasicOptions/SimpleOptions/index.tsx @@ -0,0 +1,98 @@ +import { GetOptions, getOptionsStringValue, SaveOptions } from '@/services/services/options/optionsTool'; +import { useOptionsStore } from '@/store/options'; +import { useSoftStore } from '@/store/software'; +import { Button, Card, Form, Input } from 'antd'; +import TextArea from 'antd/es/input/TextArea'; +import { message } from 'antd/lib'; +import React, { useEffect } from 'react'; + +const SimpleOptions: React.FC = () => { + + const { setTopSpinning, setTopSpinTip } = useSoftStore(); + const [messageApi, messageHolder] = message.useMessage(); + const { laitoolOptions, setLaitoolOptions } = useOptionsStore(); + const [form] = Form.useForm(); + + + useEffect(() => { + setTopSpinning(true); + setTopSpinTip("加载信息中"); + // 这边加载所有的配音数据 + GetOptions("software").then((res) => { + setLaitoolOptions(res); + form.setFieldsValue({ + LaitoolHomePage: getOptionsStringValue(res, 'LaitoolHomePage', ""), + LaitoolUpdateContent: getOptionsStringValue(res, 'LaitoolUpdateContent', ""), + LaitoolNotice: getOptionsStringValue(res, 'LaitoolNotice', ""), + LaitoolVersion: getOptionsStringValue(res, 'LaitoolVersion', ""), + }); + } + ).catch((err: any) => { + messageApi.error(err.message); + }).finally(() => { + setTopSpinning(false); + }); + + }, []); + + + async function onFinish(values: any): Promise { + setTopSpinning(true); + setTopSpinTip("正在保存通用设置"); + try { + // 这边保存所有的配音数据 + await SaveOptions(values); + // 判断Option中的key是不是在属性上 + for (let key in values) { + setLaitoolOptions(laitoolOptions.map((item: OptionModel.Option) => { + if (item.key === key) { + item.value = values[key] + } + return item + })); + } + messageApi.success('设置成功'); + } catch (error: any) { + messageApi.error(error.message); + } finally { + setTopSpinning(false); + } + } + + return ( +
+
+ + + + + ) + }) + } + const fetchData = async () => { - debugger setLoading(true); + try { + let param: Prompt.PromptQueryCondition = { + ...form.getFieldsValue(), + page: tableParams.pagination?.current, + pageSize: tableParams.pagination?.pageSize + } + let promptRes = await QueryPromptCollection(param); - let promptRes = await getPromptSample("all", tableParams.pagination?.pageSize, tableParams.pagination?.current) - - if (promptRes.code == 1) { - message.success("获取提示词设置成功") - setData(promptRes.data) - setLoading(false); + setData(promptRes.collection); setTableParams({ ...tableParams, pagination: { ...tableParams.pagination, - total: promptRes.data.count, - // 200 is mock data, you should read it from server - // total: data.totalCount, + total: promptRes.total, }, }); - } else { + message.success("获取提示词成功") + } catch (error: any) { + messageApi.error(error.message); + } finally { setLoading(false); - message.error("获取提示词设置失败") } - - - }; + } useEffect(() => { fetchData(); - // 加载提示词类型 - getPrompyType(100, 1).then(res => { - if (res.code == 1) { - setPromptType(res.data) - } else { - message.error("获取提示词类型失败") - } + GetPromptTypeOptions().then((res: Prompt.PromptTypeOptions[]) => { + setPromptTypeOptions(res); + }).catch((error: any) => { + messageApi.error(error.message); }); - }, [ - tableParams.pagination?.current, - tableParams.pagination?.pageSize, - tableParams?.sortOrder, - tableParams?.sortField, - JSON.stringify(tableParams.filters), - ]); + }, [tableParams.pagination?.current, + tableParams.pagination?.pageSize]); - const handleTableChange: TableProps['onChange'] = (pagination, filters, sorter) => { + const handleTableChange = (pagination: any) => { setTableParams({ pagination, - filters, - sortOrder: Array.isArray(sorter) ? undefined : sorter.order, - sortField: Array.isArray(sorter) ? undefined : sorter.field, }); // `dataSource` is useless since `pageSize` changed @@ -161,7 +204,7 @@ const PromptManagement: React.FC = () => { }; return ( - + { - + + + + 启用 + 停用 + + + + + - + + - +
-
- - -
{ onCancel={async () => { setOpen(false) await fetchData() - setFormKey(Date.now().toString()); // 每次打开 Modal 时更新 formKey,强制子组件重新渲染 + resetForm(); // 每次打开 Modal 时更新 formKey,强制子组件重新渲染 }} width={800} footer={null} @@ -231,9 +292,11 @@ const PromptManagement: React.FC = () => { forceRender={true} destroyOnClose={true} > - + - + {messageHolder} + {modalHolder} + ); }; diff --git a/src/pages/Prompt/PromptTypeManagement/ManagePromptType/index.tsx b/src/pages/Prompt/PromptTypeManagement/ManagePromptType/index.tsx new file mode 100644 index 0000000..c7a3bfb --- /dev/null +++ b/src/pages/Prompt/PromptTypeManagement/ManagePromptType/index.tsx @@ -0,0 +1,142 @@ + + +import { AddPromptType, EditPromptType, GetPromptTypeInfo } from '@/services/services/prompt'; +import createSoftStore, { useSoftStore } from '@/store/software'; +import { Button, Col, Form, FormInstance, FormProps, Input, InputNumber, message, Row, Select, Space, Spin, Switch } from 'antd'; +import React from 'react'; +import react, { useEffect, useState } from 'react'; + + +const formItemLayout = { + labelCol: { + xs: { span: 24 }, + sm: { span: 6 }, + }, + wrapperCol: { + xs: { span: 24 }, + sm: { span: 14 }, + }, +}; + +interface PromptManagementProps { + type: string; // Replace 'string' with the actual type of the 'type' prop + setFormRef: (form: FormInstance) => void; + id: string | undefined; + open: boolean; +} + +const PromptManagement: React.FC = ({ type, setFormRef, id, open }) => { + const [form] = Form.useForm(); + const [data, setData] = useState(); + const [messageApi, messageHolder] = message.useMessage(); + const [spinning, setSpinning] = useState(true); + const [spinTip, setSpinTip] = useState('加载中数据中。。。'); + + useEffect(() => { + setFormRef(form); + setData(undefined); + }, [form, setFormRef]); + + // 使用 useEffect 设置表单初始值 + useEffect(() => { + if (type === 'edit') { + setSpinning(true); + // 远程加载数据 + if (id !== undefined && open) { + GetPromptTypeInfo(id).then((res) => { + setData(res); + form.setFieldsValue(res); + messageApi.success('数据加载成功'); + }).catch((error: any) => { + messageApi.error(error.message); + }).finally(() => { + setSpinning(false); + }); + } + } else { + setSpinning(false); + } + data?.status == "enable" ? form.setFieldsValue({ status: true }) : form.setFieldsValue({ status: false }); + }, [type, form, open, setFormRef, id]); + + const onFinish: FormProps['onFinish'] = async (values) => { + try { + setSpinning(true); + setSpinTip("正在修改数据。。。"); + // 处理values + values.status = values.status ? "enable" : "disable"; + if (type == "add") { + let addRes = await AddPromptType(values); + messageApi.success(addRes); + } else if (type == "edit") { + let res = await EditPromptType({ ...values, id: data?.id }); + messageApi.success(res); + } else { + messageApi.error("未知操作类型"); + } + } catch (error: any) { + messageApi.error(error.message); + } finally { + setSpinning(false); + } + }; + + const onFinishFailed: FormProps['onFinishFailed'] = (errorInfo) => { + console.log('Failed:', errorInfo); + }; + + return (<> + {messageHolder} + + +
+ +
+ label="名称" name="name" rules={[{ required: true }]}> + + + label="编码" name="code" rules={[{ required: true }]}> + + + label="创建者" > + + + label="修改者" > + + + label="修改时间" name="updateTime"> + + + + + label="状态" name="status"> + + + label="备注" name="remark"> + + + + + + + + + + ) + +} + +export default PromptManagement; diff --git a/src/pages/Prompt/PromptTypeManagement/index.tsx b/src/pages/Prompt/PromptTypeManagement/index.tsx index d032f6b..947cc22 100644 --- a/src/pages/Prompt/PromptTypeManagement/index.tsx +++ b/src/pages/Prompt/PromptTypeManagement/index.tsx @@ -1,17 +1,14 @@ -import { PageContainer } from '@ant-design/pro-components'; import { useModel } from '@umijs/max'; -import { Card, Form, GetProp, Input, message, Modal, Table, TablePaginationConfig, TableProps, theme } from 'antd'; +import { Card, Form, GetProp, Input, message, Modal, Select, Table, TablePaginationConfig, TableProps, theme } from 'antd'; import React, { useEffect, useState } from 'react'; -import { EllipsisOutlined, PlusOutlined } from '@ant-design/icons'; -import type { ActionType, ProColumns } from '@ant-design/pro-components'; -import { ProTable, TableDropdown } from '@ant-design/pro-components'; -import { Button, Dropdown, Space, Tag } from 'antd'; -import { useRef } from 'react'; -import { ColumnsType, SorterResult } from 'antd/es/table/interface'; -import qs from 'qs'; -import { getPromptSample, getPrompyType } from '@/services/services/prompt'; -import ManagePromptType from '../ManagePromptType'; -import { set } from 'lodash'; +import { Button, Tag } from 'antd'; +import { ColumnsType } from 'antd/es/table/interface'; +import ManagePromptType from './ManagePromptType'; +import TemplateContainer from '@/pages/TemplateContainer'; +import { DeletePromptType, QueryPromptypeCollection } from '@/services/services/prompt'; +import { useFormReset } from '@/hooks/useFormReset'; +import { useSoftStore } from '@/store/software'; +import { PlusOutlined } from '@ant-design/icons'; export const waitTimePromise = async (time: number = 100) => { return new Promise((resolve) => { setTimeout(() => { @@ -25,67 +22,57 @@ export const waitTime = async (time: number = 100) => { }; -interface TableParams { - pagination?: TablePaginationConfig; - sortField?: SorterResult['field']; - sortOrder?: SorterResult['order']; - filters?: Parameters>[1]; -} - -interface TableParams { - pagination?: TablePaginationConfig; - sortField?: SorterResult['field']; - sortOrder?: SorterResult['order']; - filters?: Parameters>[1]; -} - -const getRandomuserParams = (params: TableParams) => ({ - results: params.pagination?.pageSize, - page: params.pagination?.current, - ...params, -}); - - const PromptManagement: React.FC = () => { - const { token } = theme.useToken(); const { initialState } = useModel('@@initialState'); - - const [data, setData] = useState<[Prompt.PromptTypeListItem][]>(); + const [data, setData] = useState(); const [loading, setLoading] = useState(false); const [form] = Form.useForm(); const [open, setOpen] = React.useState(false); - const [type, setType] = useState("add"); - const [editData, setEditData] = useState(); - - const [tableParams, setTableParams] = useState({ + const [promptTypeId, setPromptTypeId] = useState(); + const [messageApi, messageHolder] = message.useMessage(); + const [modal, modalHolder] = Modal.useModal(); + const { setFormRef, resetForm } = useFormReset(); + const { setTopSpinning, setTopSpinTip } = useSoftStore(); + const [tableParams, setTableParams] = useState({ pagination: { current: 1, pageSize: 10, + showQuickJumper: true, + totalBoundaryShowSizeChanger: true, }, }); const fetchData = async () => { setLoading(true); - let promptRes = await getPrompyType(tableParams.pagination?.pageSize, tableParams.pagination?.current) - if (promptRes.code == 1) { - message.success("获取提示词类型成功") - setData(promptRes.data) - setLoading(false); + try { + let params = { + ...form.getFieldsValue(), + pageSize: tableParams.pagination?.pageSize ?? 10, + page: tableParams.pagination?.current ?? 1, + } as Prompt.PromptTypeQueryCondition; + + console.log("fetchData", params) + let promptRes = await QueryPromptypeCollection(params) + setData(promptRes.collection); setTableParams({ ...tableParams, pagination: { ...tableParams.pagination, - total: promptRes.data.count, + total: promptRes.total, }, }); - } else { + + message.success("获取提示词类型成功") + } catch (error: any) { + messageApi.error(error.message); + } finally { setLoading(false); - message.error("获取提示词类型失败") } + }; - const columns: ColumnsType = [ + const columns: ColumnsType = [ { title: '编码', dataIndex: 'code', @@ -102,7 +89,7 @@ const PromptManagement: React.FC = () => { dataIndex: 'status', width: '100px', render: (dom, en) => <> - 启用 + {en.status == "enable" ? '启用' : "停用"} }, { @@ -115,16 +102,61 @@ const PromptManagement: React.FC = () => { width: 220, render: (dom, ent) => <> , - , + }}>编辑 + - }, + } ]; + async function DeletePromptTypeHandle(id: string) { + setTopSpinning(true); + setTopSpinTip("正在删除数据。。。") + try { + // 调用删除的方法 + let res = await DeletePromptType(id, false); + if (res.code == 6001) { + // 提示词,删除失败是不是删除对应的关联的提示词数据 + const confirmed = await modal.confirm({ + title: "删除提示词类型提醒", + content: ( +
+ 正在删除的提示词类型有关联提示词预设数据,是不是同步删除对应的关联数据! +
+ 点击确认,删除相关数据!!! +
+ ), + okText: "确认", + cancelText: "取消" + }) + if (confirmed) { + // 开始删除 + let confirmDelete = await DeletePromptType(id, true); + if (confirmDelete.code != 1) { + throw new Error(confirmDelete.message); + } + } + else { + messageApi.error("取消删除"); + return; + } + } else if (res.code == 1) { + // 删除成功 + } else { + throw new Error(res.message) + } + message.success("删除成功") + setTopSpinning(false); + await fetchData() + } catch (error: any) { + message.error(error.message) + } finally { + setTopSpinning(false); + } + } + useEffect(() => { fetchData(); @@ -136,12 +168,10 @@ const PromptManagement: React.FC = () => { JSON.stringify(tableParams.filters), ]); - const handleTableChange: TableProps['onChange'] = (pagination, filters, sorter) => { + + const handleTableChange = (pagination: TablePaginationConfig) => { setTableParams({ pagination, - filters, - sortOrder: Array.isArray(sorter) ? undefined : sorter.order, - sortField: Array.isArray(sorter) ? undefined : sorter.field, }); // `dataSource` is useless since `pageSize` changed @@ -151,7 +181,7 @@ const PromptManagement: React.FC = () => { }; return ( - + {
- - + label="名称" name="name"> + - - - + label="编码" name="code"> + + + label="状态" name="status"> + + + label="备注" name="remark"> + + + +
-
- - - +
record.id} @@ -212,7 +252,8 @@ const PromptManagement: React.FC = () => { onCancel={async () => { setOpen(false) await fetchData() - setEditData(undefined) + setPromptTypeId(undefined) + resetForm(); }} width={800} footer={null} @@ -220,9 +261,11 @@ const PromptManagement: React.FC = () => { forceRender={true} destroyOnClose > - + - + {messageHolder} + {modalHolder} + ); }; diff --git a/src/services/services/options/optionsTool.ts b/src/services/services/options/optionsTool.ts index 6732a6d..b611144 100644 --- a/src/services/services/options/optionsTool.ts +++ b/src/services/services/options/optionsTool.ts @@ -51,7 +51,7 @@ export function getOptionsValue(options: OptionModel.Option[], keyName: strin * @throws 如果未找到指定键名的选项且未提供默认值时抛出错误。 * @throws 如果处理选项值时发生错误抛出错误。 */ -export function getOptionsStringValue(options: OptionModel.Option[], keyName: string, defaultValue?: string): string { +export function getOptionsStringValue(options: OptionModel.Option[], keyName: string, defaultValue?: string): string | undefined { // if (options.length === 0) { // throw new Error("Options array is empty"); // } @@ -64,7 +64,7 @@ export function getOptionsStringValue(options: OptionModel.Option[], keyName: st } if (isEmpty(option.value)) { - return defaultValue ?? ""; + return defaultValue ?? undefined; } try { @@ -117,7 +117,7 @@ export async function SaveOptions(options: object): Promise { let data: { key: string; value: any; }[] = []; Object.entries(options).reduce((acc, [key, value]) => { - data.push({ key: key, value: value }); + data.push({ key: key, value: value.toString() }); return ""; }, {}); console.log("SaveOptionsDataParams", data) diff --git a/src/services/services/prompt.ts b/src/services/services/prompt.ts index 2d5031d..e8c64cf 100644 --- a/src/services/services/prompt.ts +++ b/src/services/services/prompt.ts @@ -1,79 +1,96 @@ import { request } from '@umijs/max'; import { errorMessage } from './response'; +import { objectToQueryString } from './common'; //#region 提示词数据相关 + /** - * 获取提示词数据 - * @param typeId 提示类型的Id,要是获取全部,就是all - * @param pageSize 每页的大小 - * @param current 当前也 - * @param options 其余请求操作项 + * 获取提示词预设的集合 + * @param param 查询的参数 * @returns */ -export async function getPromptSample(typeId: string, pageSize: number | undefined, current: number | undefined, options?: { [key: string]: any }): Promise { - try { - - return await request(`/api/Prompt/GetPromptString/${typeId}/${pageSize}/${current}`, { - method: 'GET', - ...(options || {}), - }); - } catch (error: any) { - return errorMessage(error.toString()) +export async function QueryPromptCollection(param: Prompt.PromptQueryCondition): Promise { + let query = objectToQueryString(param) + let res = await request>(`/lms/Prompt/QueryPromptStringCollection/?${query}`, { + method: 'GET', + }); + if (res.code != 1) { + throw new Error(res.message); + } + return res.data; +} + +/** + * 获取提示词的详细信息 + * @param id 指定的提示词ID + */ +export async function GetPromptInfo(id: string): Promise { + let res = await request>(`/lms/Prompt/GetPromptInfo/${id}`, { + method: 'GET', + }); + if (res.code != 1) { + throw new Error(res.message); + } + console.log("GetPromptInfo", res.data); + return res.data; +} + + +/** + * 添加提示词数据 + * @param data 提示词数据 + * @returns + */ +export async function AddPrompt(data: Prompt.PromptItem): Promise { + console.log("AddPrompt", data) + let res = await request('/lms/Prompt/AddPrompt', { + method: 'POST', + data: { + name: data.name, + promptTypeId: data.promptTypeId, + promptString: data.promptString, + description: data.description, + remark: data.remark, + status: data.status, + version: data.version, + } + }) + if (res.code != 1) { + throw new Error(res.message); + } + return res.data as string; +} + +/** + * 修改提示词数据 + * @param id 提示词数据ID + * @param params 参数 + */ +export async function ModifyPrompt(id: string, params: Prompt.PromptItem): Promise { + let res = await request(`/lms/Prompt/ModifyPrompt/${id}`, { + method: "POST", + data: { + ...params + } + }) + if (res.code != 1) { + throw new Error(res.message); } } -export async function getPromptDetail(id: string): Promise { - try { - - return await request(`/api/Prompt/GetPromptDetailById/${id}`, { - method: 'GET', - }); - } catch (error: any) { - return errorMessage(error.toString()) +/** + * 删除提示词数据 + * @param id 要删除的提示词ID + */ +export async function DeletePrompt(id: string): Promise { + let res = await request(`/lms/Prompt/DeletePrompt/${id}`, { + method: 'DELETE', + }) + if (res.code != 1) { + throw new Error(res.message); } } -export async function addPrompt(data: Prompt.AddPrompt): Promise { - try { - return await request('/api/Prompt/AddPromptString', { - method: 'POST', - data: { - name: data.name, - promptTypeId: data.promptTypeId, - promptTypeCode: data.promptTypeCode, - promptString: data.promptString, - description: data.description, - remark: data.remark, - } - }); - - } catch (error: any) { - return errorMessage(error.toString()) - } -} - -export async function modifyPrompt(data: Prompt.AddPrompt): Promise { - try { - return await request('/api/Prompt/ModifyPromptString', { - method: 'POST', - data: { - id: data.id, - name: data.name, - promptTypeId: data.promptTypeId, - promptTypeCode: data.promptTypeCode, - promptString: data.promptString, - description: data.description, - remark: data.remark, - status: data.status, - version: data.version, - } - }); - } catch (error: any) { - return errorMessage(error.toString()) - } - - -} //#endregion @@ -85,60 +102,103 @@ export async function modifyPrompt(data: Prompt.AddPrompt): Promise { - try { - return await request(`/api/Prompt/GetPromptType/${pageSize}/${current}`, { - method: 'GET', - }); - } catch (error: any) { - return errorMessage(error.toString()) +export async function QueryPromptypeCollection(param: Prompt.PromptTypeQueryCondition): Promise { + let query = objectToQueryString(param) + console.log("query", query) + let res = await request>(`/lms/Prompt/QueryPromptypeCollection/?${query}`, { + method: 'GET', + }); + if (res.code != 1) { + throw new Error(res.message); } + console.log("QueryPromptypeCollection", res.data); + return res.data; +} + +/** + * 获取所有的提示词类型的ID和Name,可以用作选项 + * @returns + */ +export async function GetPromptTypeOptions(): Promise { + let res = await request>(`/lms/Prompt/GetPromptTypeOptions`, { + method: 'GET', + }); + if (res.code != 1) { + throw new Error(res.message); + } + return res.data; +} + +/** + * 获取提示词类型的详细数据,通过ID + * @param id 提示词类型ID + * @returns + */ +export async function GetPromptTypeInfo(id: string): Promise { + let res = await request>(`/lms/Prompt/GetPromptTypeInfo/${id}`, { + method: 'GET', + }); + if (res.code != 1) { + throw new Error(res.message); + } + return res.data; } /** * 添加提示词类型 * @param data 添加的类型 */ -export async function addPromptType(data: Prompt.AddPromptType): Promise { - try { - let res = await request('/api/Prompt/AddPromptType', { - method: 'POST', - data: { - name: data.name, - code: data.code, - remark: data.remark, - } - }) - return res - - } catch (error: any) { - return errorMessage(error.toString()) +export async function AddPromptType(data: Prompt.AddPromptType): Promise { + let res = await request('/lms/Prompt/AddPromptType', { + method: 'POST', + data: { + name: data.name, + code: data.code, + status: data.status, + remark: data.remark, + } + }) + if (res.code != 1) { + throw new Error(res.message); } + return res.data as string; } /** * 修改提示词类型 * @param data 修改的数据 */ -export async function editPromptType(data: Prompt.AddPromptType): Promise { - try { - - let res = await request('/api/Prompt/ModifyPromptType', { - method: 'POST', - data: { - id: data.id, - name: data.name, - code: data.code, - remark: data.remark, - status: data.status, - } - }) - return res; - - } catch (error: any) { - console.log(error) - return errorMessage("修改提示词数据失败") +export async function EditPromptType(data: Prompt.AddPromptType): Promise { + let id = data.id; + if (id == null || id == undefined) { + throw new Error("修改提示词类型的ID不能为空") } + let res = await request(`/lms/Prompt/ModityPromptType/${id}`, { + method: 'POST', + data: { + name: data.name, + code: data.code, + remark: data.remark, + status: data.status, + } + }) + if (res.code != 1) { + throw new Error(res.message); + } + return res.data as string; +} + +/** + * 删除提示词类型数据,并且关联删除提示词数据 + * @param id 提示词类型ID + * @param deletePrompt 是不是删除对应的提示词数据 + * @returns + */ +export async function DeletePromptType(id: string, deletePrompt: boolean): Promise { + let res = await request(`/lms/Prompt/DeletePromptType/${id}/${deletePrompt}`, { + method: 'DELETE', + }) + return res; } //#endregion \ No newline at end of file diff --git a/src/services/typing/prompt.d.ts b/src/services/typing/prompt.d.ts index 0ebb2ee..8502475 100644 --- a/src/services/typing/prompt.d.ts +++ b/src/services/typing/prompt.d.ts @@ -1,25 +1,6 @@ declare namespace Prompt { - type PromptListItem = { - key: string; - id: string; - name: string; - promptTypeId: string; - promptTypeCode: string; - promptString: string; - description?: string; - remark?: string; - createUser: API.SubUserResponse; - createTime: Date; - updateUser: API.SubUserResponse; - updateTime: Date; - status: string; - version: number; - count: number; - } - - type AddPrompt = { id?: string; name: string; @@ -36,23 +17,89 @@ declare namespace Prompt { version: number; } + //#region 提示词相关 - type PromptTypeListItem = { - key: string; + /** 查询提示词预设的参数模型结构 */ + type PromptQueryCondition = { + page: number; + pageSize: number; + name?: string; + promptTypeId?: string; + status?: string; + remark?: string; + } + + type PromptItem = { + id: string; + name: string; + promptTypeId: string; + promptTypeCode: string; + promptString: string; + description?: string; + remark?: string; + createdUser: UserModel.UserBasic; + createTime: Date; + updatedUser: UserModel.UserBasic; + updateTime: Date; + status: string; + version: number; + promptType: PromptTypeBasic; + + } + + /** 返回的提示词类型的完整数据数据结构 */ + type PromptResponse = { + collection: PromptItem[]; + total: number; + current: number; + } + + //#endregion + + //#region 提示词类型相关 + + interface PromptTypeBasic { id: string; name: string; code: string; remark?: string; status: string; - createUser: API.SubUserResponse; - createTime: Date; - updateUser: API.SubUserResponse; - updateTime: Date; - coubt: number; - label: string; - value: string; } + type PromptTypeOptions = { + id: string; + name: string; + } + + /** 提示词类型的collection的数据结构 */ + interface PromptTypeItem extends PromptTypeBasic { + id: string; + name: string; + code: string; + remark?: string; + status: string; + createdUser: UserModel.UserBasic; + createTime: Date; + updatedUser: UserModel.UserBasic; + updateTime: Date; + } + + /** 查询提示词的参数模型结构 */ + type PromptTypeQueryCondition = { + page: number; + pageSize: number; + name?: string; + code?: string; + status?: string; + remark?: string; + } + + /** 返回的提示词类型的完整数据数据结构 */ + type PromptTypeResponse = { + collection: PromptTypeItem[]; + total: number; + current: number; + } type AddPromptType = { id?: string; @@ -64,4 +111,5 @@ declare namespace Prompt { updateUser: API.SubUserResponse; updateTime: Date; } + //#endregion } \ No newline at end of file diff --git a/src/services/typing/user.d.ts b/src/services/typing/user.d.ts index a5d12b7..54b7f69 100644 --- a/src/services/typing/user.d.ts +++ b/src/services/typing/user.d.ts @@ -29,14 +29,18 @@ declare namespace UserModel { affiliateMoney: number, } - //#region 用户基本的数据信息 - interface UserInfo { + interface UserBasic { id: number; nickName: string; userName: string; avatar?: string; email: string; phoneNumber?: string; + + } + + //#region 用户基本的数据信息 + interface UserInfo extends UserBasic { roleNames: string[]; allDeviceCount: number; agentPercent: number; diff --git a/src/store/software.ts b/src/store/software.ts index bc1723f..6fc66b9 100644 --- a/src/store/software.ts +++ b/src/store/software.ts @@ -1,15 +1,26 @@ import { create } from 'zustand'; import defaultSettings from '../../config/defaultSettings'; -export const useSoftStore = create((set: (arg0: any) => any) => ({ +interface SoftStoreState { + token: string | null; + currentUser: any; + settings: typeof defaultSettings; + topSpinning: boolean; + topSpinTip: string; + setTopSpinning: (spinning: boolean) => void; + setTopSpinTip: (tip: string) => void; +} + +const createSoftStore = (initialState: Partial = {}) => create((set) => ({ token: null, currentUser: null, settings: defaultSettings, - topSpinning: false, - setTopSpinning: (spinning: boolean) => set({ topSpinning: spinning }), - topSpinTip: "加载中...", + setTopSpinning: (spinning: boolean) => set({ topSpinning: spinning }), setTopSpinTip: (tip: string) => set({ topSpinTip: tip }), + ...initialState, // 合并初始状态 +})); -})) as any; +export const useSoftStore = createSoftStore(); +export default createSoftStore; \ No newline at end of file