/* * @Author: donghao donghao@supervision.ltd * @Date: 2024-04-07 14:02:00 * @LastEditors: donghao donghao@supervision.ltd * @LastEditTime: 2024-06-25 14:31:24 * @FilePath: \general-ai-manage\src\pages\ModelIndex\ModelIndex.tsx * @Description: 模型列表首页 * @交互说明 * 1. 模型列表分页展示、关键词检索 * 2. 新增、删除(模型)功能 * 3. 更新模型分类功能 * 4. 模型详情配置入口 * */ import { CommButton } from '@/components/Button'; import CategorizeUpdate from '@/components/CategorizeUpdate'; import TableActionCard from '@/components/TableActionCard'; import IsDelete from '@/components/TableActionCard/isDelete'; import { apiModelClassificationAdd, apiModelClassificationDelete, apiModelClassificationList, apiModelDelete, apiModelInfo, apiModelList, } from '@/services/business/model'; import { isSuccessApi } from '@/utils/forApi'; import { ReactComponent as ResetIcon } from '/public/home/reset_icon.svg'; import { ReactComponent as SearchIcon } from '/public/home/search_icon.svg'; import { SearchOutlined } from '@ant-design/icons'; import type { ActionType, ProColumns } from '@ant-design/pro-components'; import { ProCard, ProForm, ProFormText, ProTable } from '@ant-design/pro-components'; import { Access, FormattedMessage, history, useAccess, useIntl } from '@umijs/max'; import { Button, message } from 'antd'; import React, { useEffect, useRef, useState } from 'react'; import { proTableCommonOptions, proTableDefaultOptions, proTablePaginationOptions, } from '../../../../config/defaultTable'; import CreateForm from './components/createForm'; import UpdateForm from './components/updateForm'; import './index.less'; const ModelIndex: React.FC = () => { const access = useAccess(); // eslint-disable-next-line react-hooks/rules-of-hooks const intl = useIntl(); const actionRef = useRef(); const [querysData, setQuerysData] = useState>({}); // 列表查询参数 const [createModalOpen, setCreateModalOpen] = useState(false); const [updateModalOpen, setUpdateModalOpen] = useState(false); const [currentRow, setCurrentRow] = useState>({}); // 设置分类 const [industryOpen, setIndustryOpen] = useState(false); // const [categoryFkIdIds, setCategoryFkIdIds] = useState([]); // 动态设置每页数量 const [currentPageSize, setCurrentPageSize] = useState(10); const [form] = ProForm.useForm(); // form 对象 /**新增 设置行业分类 删除 */ // 新增 const handleCreateModal = () => { setCreateModalOpen(!createModalOpen); }; // 编辑 const handleUpdateModal = () => { setUpdateModalOpen(!updateModalOpen); }; // 设置行业分类 const handleSetIndustry = () => { setIndustryOpen(!industryOpen); }; // 模型信息 async function loadDetail(record) { const resp = await apiModelInfo({ id: record?.id }); if (isSuccessApi(resp) && resp?.data) { setCurrentRow({ ...resp?.data, id: record?.id }); } } function reloadList() { actionRef.current?.reload(); } // const [showDetail, setShowDetail] = useState(false); const columns: ProColumns>[] = [ { title: , dataIndex: 'name', hideInSearch: true, key: 'fixedName', fixed: 'left', }, { title: , dataIndex: 'model_type', hideInSearch: true, render: (dom, record) => { let activeName = 'active_primary'; switch (record.model_type) { case '机器学习': activeName = 'active3'; break; default: activeName = 'active_primary'; break; } return (
{dom}
); }, }, { title: , dataIndex: 'classification_name', hideInSearch: true, }, { title: ( ), dataIndex: 'default_version', hideInSearch: true, render: (dom, record) => (
{record?.default_version ? V : <>} {dom}
), }, { title: , dataIndex: 'update_time', sorter: true, hideInSearch: true, valueType: 'dateTime', render: (dom, record) => { if (record.update_time === 'None') { return '-'; } return dom; }, }, { title: , dataIndex: 'option', valueType: 'option', fixed: 'right', key: 'option', render: (_, record) => [ { // setCurrentRow(record); history.push(`/home/model-detail/${record.id}`); }} > ), }, { key: 'update', renderDom: ( ), }, { key: 'destroy', renderDom: ( { console.log('删除成功'); apiModelDelete({ id: record.id }).then(() => { message.success( intl.formatMessage({ id: 'common.action.success', defaultMessage: '$$$', }), ); reloadList(); }); }} > ), }, ]} >, ], }, ]; // 筛选查询 useEffect(() => { if (actionRef) { reloadList(); } }, [actionRef, querysData]); return (
(
} buttonLabel={ } > } buttonLabel={ } onClick={() => { form.resetFields(); // 点击重置按钮时重置表单数据 setQuerysData(() => {}); // 清空筛选项 }} >
), }} onFinish={async (values) => { console.log(values, 'filter_finish_values'); setQuerysData(() => values); return true; }} > } labelClassName="label_set_1" fieldProps={{ style: { width: 280, }, prefix: , }} name="name" placeholder="请输入模型名称" />
} extra={ } >
{ console.log(data, 'onDataSourceChange_data'); // let CategoryFkIdIds: any = data.map((v) => { // return v.categoryFkId; // }); // setCategoryFkIdIds(CategoryFkIdIds); }} pagination={{ ...proTablePaginationOptions, pageSize: currentPageSize, onChange: (pageNo, pageSize) => setCurrentPageSize(pageSize), }} columnsState={{ persistenceKey: 'algorithm_model_list', persistenceType: 'localStorage', }} request={async (params = {}, sort) => { const { current, ...rest } = params; const reqParams = { pageNo: current, desc: false, orderKey: '', ...rest, }; if (sort && Object.keys(sort).length) { reqParams.orderKey = Object.keys(sort)[0]; let sort_select = sort[reqParams.orderKey]; reqParams.desc = sort_select === 'descend'; } let resp = await apiModelList({ ...reqParams, ...querysData }); if (!isSuccessApi(resp)) { return { data: [], success: true }; } return { data: resp.data.data, success: resp.success, total: resp.data.count, current: current, pageSize: currentPageSize, }; }} columns={columns} />
{ let resp = await apiModelClassificationList(); return { data: resp.data, }; }} beforeCloseRequest={async (params, successRes) => { let resp = await apiModelClassificationDelete({ id: params.id }); if (isSuccessApi(resp)) { successRes(resp); } }} beforeAddRequest={async (params, successRes) => { let resp = await apiModelClassificationAdd({ name: params }); if (isSuccessApi(resp)) { successRes(resp); } }} modalFormProps={{ categorizeFormProps: { label: ( ), name: 'industry', }, categorizeModelProps: { title: intl.formatMessage({ id: 'model_index.table.list.setIndustry', defaultMessage: '新建', }), }, }} /> ); }; export default ModelIndex;