You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

248 lines
7.9 KiB
TypeScript

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

/*
* @Author: donghao donghao@supervision.ltd
* @Date: 2024-04-22 15:23:36
* @LastEditors: donghao donghao@supervision.ltd
* @LastEditTime: 2024-06-25 10:00:13
* @FilePath: \general-ai-platform-web\src\pages\Node\BusinessModel\index.tsx
* @Description: 业务模型
* @交互说明
* 1、业务模型列表的分页展示
* 2、新增、更新、删除模型功能
* 3. 模型详情展示
*/
import TableActionCard from '@/components/TableActionCard';
import IsDelete from '@/components/TableActionCard/isDelete';
import { useBusinessInfo } from '@/hooks/useBusinessInfo';
import {
apiModelDeploymentDelete,
apiModelDeploymentInfo,
apiModelDeploymentList,
} from '@/services/business/model';
import { isSuccessApi } from '@/utils/forApi';
import { ExclamationCircleFilled } from '@ant-design/icons';
import type { ActionType, ProColumns } from '@ant-design/pro-components';
import { ProCard, ProTable } from '@ant-design/pro-components';
import { FormattedMessage, useIntl } from '@umijs/max';
import { Button, message } from 'antd';
import { useRef, useState } from 'react';
import { proTablePaginationOptions } from '../../../../config/defaultTable';
import CreateForm from './components/createForm';
import DetailCard from './components/detailCard';
const BusinessModel: React.FC = () => {
const intl = useIntl();
const { getStoreBusinessInfo } = useBusinessInfo();
const actionRef = useRef<ActionType>();
const [commInfo] = useState<Record<string, any>>({ ...getStoreBusinessInfo() }); // 通用信息
const [createModalOpen, setCreateModalOpen] = useState<boolean>(false);
// const [updateModalOpen, setUpdateModalOpen] = useState<boolean>(false);
const [detailModalOpen, setDetailModalOpen] = useState<boolean>(false); // 编辑窗口是否打开
const [currentRow, setCurrentRow] = useState<Record<string, any>>({});
// 动态设置每页数量
const [currentPageSize, setCurrentPageSize] = useState<number>(10);
/**新增 编辑 详情 删除 */
// 新增
const handleCreateModal = () => {
setCreateModalOpen(!createModalOpen);
};
// 编辑
// const handleUpdateModal = () => {
// setUpdateModalOpen(!updateModalOpen);
// };
// 详情
const handleDetailModal = () => {
setDetailModalOpen(!detailModalOpen);
};
// 设备节点信息
async function loadDetail(record) {
const resp = await apiModelDeploymentInfo({ id: record?.model_id });
if (isSuccessApi(resp) && resp?.data) {
setCurrentRow({ ...resp?.data, id: record?.model_id });
}
}
function reloadList() {
actionRef.current?.reload();
}
// 业务模型列表信息
const columns: ProColumns<Record<string, any>>[] = [
{
title: <FormattedMessage id="business_model.table.list.name" defaultMessage="名称" />,
dataIndex: 'model_name',
hideInSearch: true,
key: 'fixedName',
fixed: 'left',
width: '40%',
},
{
title: (
<FormattedMessage id="business_model.table.list.createTime" defaultMessage="创建时间" />
),
dataIndex: 'create_time',
hideInSearch: true,
valueType: 'dateTime',
},
{
title: <FormattedMessage id="pages.searchTable.titleOption" defaultMessage="Operating" />,
dataIndex: 'option',
valueType: 'option',
fixed: 'right',
key: 'option',
render: (_, record) => [
<TableActionCard
key="TableActionCardRef"
renderActions={[
{
key: 'updateDetail',
renderDom: (
<Button
key="updateDetail"
type="link"
size="small"
onClick={() => {
loadDetail(record);
setDetailModalOpen(true);
}}
>
<FormattedMessage id="pages.searchTable.updateDetail" defaultMessage="查看" />
</Button>
),
},
// TODO 062502 编辑接口在新建交互完善后对接
{
key: 'destroy',
renderDom: (
<IsDelete
deleteApi={async () => {
console.log('删除成功');
const resp = apiModelDeploymentDelete({ id: record.id });
if (isSuccessApi(resp)) {
reloadList();
message.success(
intl.formatMessage({
id: 'common.action.success',
defaultMessage: '$$$',
}),
);
} else {
message.error(
resp?.meta?.message ||
intl.formatMessage({
id: 'common.action.failure',
defaultMessage: '$$$',
}),
);
}
}}
></IsDelete>
),
},
]}
></TableActionCard>,
],
},
];
return (
<div className="businessModel_page gn_head_card">
<ProCard
className="gn_card_wrap pb-[16px]"
title={
<span className="head3">
<FormattedMessage id="business_model.table.title" defaultMessage="标题" />
</span>
}
extra={
<Button
type="primary"
onClick={() => {
setCreateModalOpen(true);
}}
>
<FormattedMessage id="business_model.table.list.add.name" defaultMessage="新增" />
</Button>
}
>
<div
className="pb-[12px]"
style={{
color: '#FAAD14',
}}
>
<ExclamationCircleFilled />
<span className="pl-[8px]"></span>
</div>
<ProTable
className="gn_pro_table"
cardProps={{
bodyStyle: { padding: 0 },
}}
//
search={false}
options={{ fullScreen: false, setting: false, density: false, reload: false }}
actionRef={actionRef}
rowKey="id"
onDataSourceChange={(data) => {
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 = {}) => {
const { current, ...rest } = params;
const reqParams = {
pageNo: current,
entity_id: commInfo.id,
...rest,
};
let resp = await apiModelDeploymentList({ ...reqParams });
if (!isSuccessApi(resp)) {
return { data: [], success: true };
}
console.log(resp, 'getModelVersionList_resp');
return {
data: resp.data?.data,
success: resp.success,
total: resp.data.count,
current: current,
pageSize: currentPageSize,
};
}}
columns={columns}
/>
</ProCard>
<CreateForm
createModalOpen={createModalOpen}
handleModal={handleCreateModal}
commInfo={commInfo}
reload={reloadList}
/>
<DetailCard
info={currentRow}
detailModalOpen={detailModalOpen}
handleModal={handleDetailModal}
/>
</div>
);
};
export default BusinessModel;