import { postDeviceGroupGetDeviceGroupList, postDeviceGroupGetDeviceGroupTree, } from '@/services/device/DeviceGroup'; import { postGetProjectByGroupId } from '@/services/project/Project'; import { postModelVersionGetModelVersionListByIds } from '@/services/resource/ModelVersion'; import { FormattedMessage } from '@@/exports'; import { RedoOutlined } from '@ant-design/icons'; import type { ActionType } from '@ant-design/pro-components'; import { PageContainer, ProCard, ProColumns, ProDescriptions, ProList, ProTable, } from '@ant-design/pro-components'; import { useAccess, useIntl } from '@umijs/max'; import { Button, Tag, message } from 'antd'; import { DataNode } from 'antd/es/tree'; import React, { useEffect, useRef, useState } from 'react'; import ProjectCard from './components/ProjectCard'; import UpdateForm from './components/UpdateForm'; const AlgorithmSetting: React.FC = () => { /** * @en-US Pop-up window of new window * @zh-CN 新建窗口的弹窗 * */ /** * @en-US International configuration * @zh-CN 国际化配置 * */ const access = useAccess(); const intl = useIntl(); const projectCardListRef = useRef(null); const actionRef = useRef(); const [updateModalOpen, setUpdateModalOpen] = useState(false); const [hasInit, setHasInit] = useState(false); const [nodeTreeData, setNodeTreeData] = React.useState([]); const [selectNodes, setSelectNodes] = React.useState([]); const [currentRow, setCurrentRow] = useState(); const [currentCard, setCurrentCard] = useState(); const [selectedRowsState, setSelectedRows] = useState([]); const [tabs, setTabs] = useState([]); const [cardActionProps, setCardActionProps] = useState<'actions' | 'extra'>('extra'); const [modelVersionData, setModelVersionData] = useState([]); const [projectData, setProjectData] = useState({}); const handleUpdateModal = () => { if (updateModalOpen) { setUpdateModalOpen(false); setCurrentCard(undefined); } else { setUpdateModalOpen(true); } }; const [tab, setTab] = useState(''); const columns1: ProColumns[] = [ { title: , dataIndex: 'name', hideInSearch: true, }, ]; const columns = [ { title: , dataIndex: 'id', sorter: true, }, { title: , dataIndex: 'name', hideInSearch: true, }, { title: , dataIndex: 'code', hideInSearch: true, }, { title: , dataIndex: 'address', hideInSearch: true, }, { title: ( ), dataIndex: 'telephone', hideInSearch: true, }, { title: , dataIndex: 'lon', hideInSearch: true, }, { title: , dataIndex: 'lat', hideInSearch: true, }, { title: ( ), dataIndex: 'managerName', hideInSearch: true, }, { title: ( ), dataIndex: 'managerPhone', hideInSearch: true, }, { title: , dataIndex: 'isEnable', filters: true, onFilter: true, hideInSearch: true, valueType: 'switch', }, { title: , dataIndex: 'remark', hideInSearch: true, }, { title: ( ), dataIndex: 'createTime', sorter: true, hideInSearch: true, valueType: 'dateTime', }, { title: ( ), dataIndex: 'updateTime', sorter: true, hideInSearch: true, valueType: 'dateTime', }, ]; // TODO 操作左侧网点数据节点, 项目列表数据变更 function fetchProjectByGroupId(record: Record) { // console.log('clickTreeNode', projectCardListRef.current) postGetProjectByGroupId({ id: record.id }).then((resp) => { let tab_data = (resp?.data?.list || []).map((v: any) => { let model_data = ([...v?.models] || []).map((item: any) => ({ title: ( <> ), actions: [ , ], content: , })); // console.log(88, model_data); // setProjectData({...projectData, [v.id]: v}) return { label: `项目:${v.name}`, key: v.id, children: ( ghost={true} itemCardProps={{ ghost: true, // headStyle: {background: 'red', padding: 0, margin: 0}, bodyStyle: {padding: 0, margin: 0}, }} pagination={{ defaultPageSize: 6, showSizeChanger: false, }} showActions="hover" grid={{gutter: 8, xs: 1, md: 2, xl: 3, xxl: 4}} metas={{ title: {}, type: {}, content: {}, actions: { cardActionProps, }, }} headerTitle="项目模型列表" dataSource={model_data} /> ), }; }); if (tab_data.length) { setTab(tab_data[0].key); } setTabs(tab_data); }); } // TODO 操作项目列表数据类别切换, 项目列表数据变更 function changeProjectTab(key: React.SetStateAction) { let model_ids = projectData[key]?.inferConfig?.models || []; postModelVersionGetModelVersionListByIds({ ids: model_ids }).then((resp) => { let version_model_data = (resp?.data?.list || []).map((item: Record) => { return { title: '苏胜天算法模型', subTitle: 经典算法, actions: [ , ], avatar: 'https://gw.alipayobjects.com/zos/antfincdn/UCSiy1j6jx/xingzhuang.svg', content: , }; }); setModelVersionData(version_model_data); console.log(99, modelVersionData); }); setTab(key); } useEffect(() => { postDeviceGroupGetDeviceGroupTree() .then((resp) => { setNodeTreeData(resp.data.tree); setHasInit(true); }) .catch(() => { message.error(intl.formatMessage({ id: 'common.failure', defaultMessage: '$$$' })); }); }, []); return ( } onClick={() => { setSelectNodes([]); actionRef.current?.reload(); }} > 重置 } > headerTitle={intl.formatMessage({ id: 'pages.searchTable.title', defaultMessage: '$$$', })} options={{ search: true, fullScreen: false, setting: false, density: false, reload: false, }} actionRef={actionRef} search={false} rowKey="key" onRow={(record) => { return { onClick: () => { if (record.id) { setCurrentRow(record); fetchProjectByGroupId(record); } }, }; }} pagination={{ showSizeChanger: false, pageSize: 10, }} columnsState={{ persistenceKey: 'device_group_list', persistenceType: 'localStorage', }} request={async (params = {}, sort) => { const { current, ...rest } = params; const reqParams = { page: 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 postDeviceGroupGetDeviceGroupList({ ...reqParams, name: params?.keyword || '', }); return { data: resp.data.list.map((v: API.DeviceGroup) => { return { ...v, key: v.id }; }), success: resp.success, total: resp.data.total, current: resp.data.page, pageSize: resp.data.pageSize, }; }} columns={columns1} rowSelection={{ onChange: (_, selectedRows) => { // setSelectedRows(selectedRows); }, }} /> { changeProjectTab(key); }, }} > ); }; export default AlgorithmSetting;