fix: distributed servers info

This commit is contained in:
jialin
2025-06-25 20:29:48 +08:00
parent 3889c1fa71
commit 8751400ae3
23 changed files with 535 additions and 215 deletions
-22
View File
@@ -1,22 +0,0 @@
:local(.delete-modal-content) {
display: flex;
font-size: var(--font-size-middle);
:global {
.anticon {
font-size: 20px;
margin-right: 10px;
color: var(--ant-color-warning);
}
.title {
display: flex;
align-items: center;
}
}
}
:local(.content) {
padding-top: 15px;
padding-left: 30px;
}
+135 -94
View File
@@ -9,9 +9,35 @@ import {
message, message,
type ModalFuncProps type ModalFuncProps
} from 'antd'; } from 'antd';
import { FC, forwardRef, useImperativeHandle, useState } from 'react'; import { createStyles } from 'antd-style';
import { useState } from 'react';
import styled from 'styled-components'; import styled from 'styled-components';
import Styles from './index.less';
const useStyles = createStyles(({ css }) => ({
'delete-modal-content': css`
display: flex;
font-size: var(--font-size-middle);
.anticon {
font-size: 20px;
margin-right: 10px;
color: var(--ant-color-warning);
}
.title {
display: flex;
align-items: center;
font-weight: var(--font-weight-500);
}
`,
content: css`
padding-top: 15px;
padding-left: 30px;
color: var(--ant-color-text-secondary);
white-space: pre-line;
span {
color: var(--ant-color-text);
}
`
}));
const CheckboxWrapper = styled.div` const CheckboxWrapper = styled.div`
margin-top: 20px; margin-top: 20px;
@@ -25,12 +51,8 @@ const CheckboxWrapper = styled.div`
} }
`; `;
interface DeleteModalProps {
ref: any;
}
interface DataOptions { interface DataOptions {
content: string; content?: string;
selection?: boolean; selection?: boolean;
name?: string; name?: string;
okText?: string; okText?: string;
@@ -43,28 +65,33 @@ interface DataOptions {
}; };
} }
const DeleteModal: FC<DeleteModalProps> = forwardRef((props, ref) => { interface Configuration {
checked: boolean;
}
export default function useDeleteModel() {
const intl = useIntl(); const intl = useIntl();
const { styles } = useStyles();
const { saveScrollHeight, restoreScrollHeight } = useBodyScroll(); const { saveScrollHeight, restoreScrollHeight } = useBodyScroll();
const [visible, setVisible] = useState(false); const [visible, setVisible] = useState(false);
const [checked, setChecked] = useState(false); const [configuration, setConfiguration] = useState<Configuration>({
checked: false
});
const [config, setConfig] = useState<ModalFuncProps & DataOptions>({} as any); const [config, setConfig] = useState<ModalFuncProps & DataOptions>({} as any);
useImperativeHandle(ref, () => ({ const show = (data: ModalFuncProps & DataOptions) => {
show: (data: ModalFuncProps & DataOptions) => { saveScrollHeight();
saveScrollHeight(); setConfig(data);
setConfig(data); setConfiguration({
setChecked(data.checkConfig?.defautlChecked || false); checked: data.checkConfig?.defautlChecked || false
setVisible(true); });
}, setVisible(true);
hide: () => { };
setVisible(false);
restoreScrollHeight(); const hide = () => {
}, setVisible(false);
configuration: { restoreScrollHeight();
checked: checked };
}
}));
const handleCancel = () => { const handleCancel = () => {
setVisible(false); setVisible(false);
@@ -94,75 +121,89 @@ const DeleteModal: FC<DeleteModalProps> = forwardRef((props, ref) => {
} }
}; };
return ( const DeleteModal = () => {
<Modal return (
style={{ <Modal
top: '20%' style={{
}} top: '20%'
open={visible}
onOk={handleOk}
onCancel={handleCancel}
destroyOnClose={true}
closeIcon={false}
maskClosable={false}
keyboard={false}
width={460}
styles={{}}
footer={
<Space size={20}>
<Button onClick={handleCancel} size="middle">
{config.cancelText
? intl.formatMessage({ id: config.cancelText })
: intl.formatMessage({ id: 'common.button.cancel' })}
</Button>
<Button type="primary" onClick={handleOk} size="middle">
{config.okText
? intl.formatMessage({ id: config.okText })
: intl.formatMessage({ id: 'common.button.delete' })}
</Button>
</Space>
}
>
<div className={Styles['delete-modal-content']}>
<span className="title">
<ExclamationCircleFilled />
<span>
{config.title
? intl.formatMessage({ id: config.title })
: intl.formatMessage({ id: 'common.title.delete.confirm' })}
</span>
</span>
</div>
<div
className={Styles['content']}
dangerouslySetInnerHTML={{
__html:
config.content &&
intl.formatMessage(
{
id: config.operation || ''
},
{
type: intl.formatMessage({ id: config.content }),
name: config.name
}
)
}} }}
></div> open={visible}
{config.checkConfig && ( onOk={handleOk}
<CheckboxWrapper> onCancel={handleCancel}
<Checkbox destroyOnClose={false}
checked={checked} closeIcon={false}
onChange={(e) => setChecked(e.target.checked)} maskClosable={false}
> keyboard={false}
<span className="check-text"> width={460}
{intl.formatMessage({ id: config.checkConfig?.checkText })} styles={{
footer: {
marginTop: '20px'
}
}}
footer={
<Space size={20}>
<Button onClick={handleCancel} size="middle">
{config.cancelText
? intl.formatMessage({ id: config.cancelText })
: intl.formatMessage({ id: 'common.button.cancel' })}
</Button>
<Button type="primary" onClick={handleOk} size="middle">
{config.okText
? intl.formatMessage({ id: config.okText })
: intl.formatMessage({ id: 'common.button.delete' })}
</Button>
</Space>
}
>
<div className={styles['delete-modal-content']}>
<span className="title">
<ExclamationCircleFilled />
<span>
{config.title
? intl.formatMessage({ id: config.title })
: intl.formatMessage({ id: 'common.title.delete.confirm' })}
</span> </span>
</Checkbox> </span>
</CheckboxWrapper> </div>
)} <div
</Modal> className={styles['content']}
); dangerouslySetInnerHTML={{
}); __html: config.content
? intl.formatMessage(
export default DeleteModal; {
id: config.operation || ''
},
{
type: intl.formatMessage({ id: config.content }),
name: config.name
}
)
: ''
}}
></div>
{config.checkConfig && (
<CheckboxWrapper>
<Checkbox
checked={configuration.checked}
onChange={(e) =>
setConfiguration({
checked: e.target.checked
})
}
>
<span className="check-text">
{intl.formatMessage({ id: config.checkConfig?.checkText })}
</span>
</Checkbox>
</CheckboxWrapper>
)}
</Modal>
);
};
return {
DeleteModal,
show,
hide,
configuration
};
}
+127 -11
View File
@@ -1,8 +1,8 @@
@font-face { @font-face {
font-family: iconfont; /* Project id 4613488 */ font-family: iconfont; /* Project id 4613488 */
src: url('iconfont.woff2?t=1747231573342') format('woff2'), src: url('iconfont.woff2?t=1750854031026') format('woff2'),
url('iconfont.woff?t=1747231573342') format('woff'), url('iconfont.woff?t=1750854031026') format('woff'),
url('iconfont.ttf?t=1747231573342') format('truetype'); url('iconfont.ttf?t=1750854031026') format('truetype');
} }
.iconfont { .iconfont {
@@ -13,6 +13,130 @@
-moz-osx-font-smoothing: grayscale; -moz-osx-font-smoothing: grayscale;
} }
.icon-language::before {
content: "\e679";
}
.icon-help::before {
content: "\e67a";
}
.icon-key-filled::before {
content: "\e67b";
}
.icon-key::before {
content: "\e67d";
}
.icon-resources::before {
content: "\e67e";
}
.icon-users::before {
content: "\e67f";
}
.icon-resources-filled::before {
content: "\e680";
}
.icon-users-filled::before {
content: "\e681";
}
.icon-model::before {
content: "\e676";
}
.icon-model-filled::before {
content: "\e678";
}
.icon-layers-filled::before {
content: "\e671";
}
.icon-layers::before {
content: "\e673";
}
.icon-experiment::before {
content: "\e674";
}
.icon-experiment-filled::before {
content: "\e675";
}
.icon-dashboard::before {
content: "\e66d";
}
.icon-dashboard-filled::before {
content: "\e66e";
}
.icon-expand-left::before {
content: "\ea48";
}
.icon-expand-right::before {
content: "\ea49";
}
.icon-users-fill::before {
content: "\e677";
}
.icon-layers-fill::before {
content: "\e89d";
}
.icon-key-fill::before {
content: "\e80e";
}
.icon-server-fill::before {
content: "\e7a3";
}
.icon-model-fill::before {
content: "\e7b7";
}
.icon-left_panel_close::before {
content: "\e668";
}
.icon-left_panel_open::before {
content: "\e669";
}
.icon-playcircle-fill::before {
content: "\e665";
}
.icon-stopcircle-fill::before {
content: "\e666";
}
.icon-play-speed::before {
content: "\e856";
}
.icon-more::before {
content: "\e62e";
}
.icon-play::before {
content: "\e9f9";
}
.icon-pause::before {
content: "\e713";
}
.icon-dark_theme::before { .icon-dark_theme::before {
content: "\e646"; content: "\e646";
} }
@@ -237,14 +361,6 @@
content: "\e62c"; content: "\e62c";
} }
.icon-stopcircle-fill::before {
content: "\e7cc";
}
.icon-playcircle-fill::before {
content: "\e7cd";
}
.icon-SpeakerSlash::before { .icon-SpeakerSlash::before {
content: "\e661"; content: "\e661";
} }
File diff suppressed because one or more lines are too long
+217 -14
View File
@@ -5,6 +5,223 @@
"css_prefix_text": "icon-", "css_prefix_text": "icon-",
"description": "", "description": "",
"glyphs": [ "glyphs": [
{
"icon_id": "44685190",
"name": "language",
"font_class": "language",
"unicode": "e679",
"unicode_decimal": 59001
},
{
"icon_id": "44685189",
"name": "help",
"font_class": "help",
"unicode": "e67a",
"unicode_decimal": 59002
},
{
"icon_id": "44684306",
"name": "key-filled",
"font_class": "key-filled",
"unicode": "e67b",
"unicode_decimal": 59003
},
{
"icon_id": "44684302",
"name": "key",
"font_class": "key",
"unicode": "e67d",
"unicode_decimal": 59005
},
{
"icon_id": "44684304",
"name": "resources",
"font_class": "resources",
"unicode": "e67e",
"unicode_decimal": 59006
},
{
"icon_id": "44684305",
"name": "users",
"font_class": "users",
"unicode": "e67f",
"unicode_decimal": 59007
},
{
"icon_id": "44684303",
"name": "resources-filled",
"font_class": "resources-filled",
"unicode": "e680",
"unicode_decimal": 59008
},
{
"icon_id": "44684301",
"name": "users-filled",
"font_class": "users-filled",
"unicode": "e681",
"unicode_decimal": 59009
},
{
"icon_id": "44684150",
"name": "model",
"font_class": "model",
"unicode": "e676",
"unicode_decimal": 58998
},
{
"icon_id": "44684149",
"name": "model-filled",
"font_class": "model-filled",
"unicode": "e678",
"unicode_decimal": 59000
},
{
"icon_id": "44684090",
"name": "layers-filled",
"font_class": "layers-filled",
"unicode": "e671",
"unicode_decimal": 58993
},
{
"icon_id": "44684091",
"name": "layers",
"font_class": "layers",
"unicode": "e673",
"unicode_decimal": 58995
},
{
"icon_id": "44684086",
"name": "experiment",
"font_class": "experiment",
"unicode": "e674",
"unicode_decimal": 58996
},
{
"icon_id": "44684085",
"name": "experiment",
"font_class": "experiment-filled",
"unicode": "e675",
"unicode_decimal": 58997
},
{
"icon_id": "44684021",
"name": "dashboard",
"font_class": "dashboard",
"unicode": "e66d",
"unicode_decimal": 58989
},
{
"icon_id": "44684020",
"name": "dashboard-filled",
"font_class": "dashboard-filled",
"unicode": "e66e",
"unicode_decimal": 58990
},
{
"icon_id": "40068272",
"name": "expand-left",
"font_class": "expand-left",
"unicode": "ea48",
"unicode_decimal": 59976
},
{
"icon_id": "40068278",
"name": "expand-right",
"font_class": "expand-right",
"unicode": "ea49",
"unicode_decimal": 59977
},
{
"icon_id": "1350497",
"name": "sq-users",
"font_class": "users-fill",
"unicode": "e677",
"unicode_decimal": 58999
},
{
"icon_id": "13691715",
"name": "layers",
"font_class": "layers-fill",
"unicode": "e89d",
"unicode_decimal": 59549
},
{
"icon_id": "14267903",
"name": "key-skeleton-alt",
"font_class": "key-fill",
"unicode": "e80e",
"unicode_decimal": 59406
},
{
"icon_id": "14341823",
"name": "cloud-server-solid",
"font_class": "server-fill",
"unicode": "e7a3",
"unicode_decimal": 59299
},
{
"icon_id": "40764011",
"name": "icon-model-selected",
"font_class": "model-fill",
"unicode": "e7b7",
"unicode_decimal": 59319
},
{
"icon_id": "44668359",
"name": "left_panel_close_36dp_1F1F1F_FILL0_wght400_GRAD0_o",
"font_class": "left_panel_close",
"unicode": "e668",
"unicode_decimal": 58984
},
{
"icon_id": "44668360",
"name": "left_panel_open_36dp_1F1F1F_FILL0_wght400_GRAD0_op",
"font_class": "left_panel_open",
"unicode": "e669",
"unicode_decimal": 58985
},
{
"icon_id": "44650419",
"name": "play circle-fill",
"font_class": "playcircle-fill",
"unicode": "e665",
"unicode_decimal": 58981
},
{
"icon_id": "44650418",
"name": "stop circle-fill",
"font_class": "stopcircle-fill",
"unicode": "e666",
"unicode_decimal": 58982
},
{
"icon_id": "8592899",
"name": "play-speed",
"font_class": "play-speed",
"unicode": "e856",
"unicode_decimal": 59478
},
{
"icon_id": "10941162",
"name": "more",
"font_class": "more",
"unicode": "e62e",
"unicode_decimal": 58926
},
{
"icon_id": "703373",
"name": "play",
"font_class": "play",
"unicode": "e9f9",
"unicode_decimal": 59897
},
{
"icon_id": "736882",
"name": "pause",
"font_class": "pause",
"unicode": "e713",
"unicode_decimal": 59155
},
{ {
"icon_id": "44028047", "icon_id": "44028047",
"name": "dark_theme", "name": "dark_theme",
@@ -397,20 +614,6 @@
"unicode": "e62c", "unicode": "e62c",
"unicode_decimal": 58924 "unicode_decimal": 58924
}, },
{
"icon_id": "6151140",
"name": "stop circle-fill",
"font_class": "stopcircle-fill",
"unicode": "e7cc",
"unicode_decimal": 59340
},
{
"icon_id": "6151141",
"name": "play circle-fill",
"font_class": "playcircle-fill",
"unicode": "e7cd",
"unicode_decimal": 59341
},
{ {
"icon_id": "23563264", "icon_id": "23563264",
"name": "SpeakerSlash", "name": "SpeakerSlash",
Binary file not shown.
Binary file not shown.
Binary file not shown.
+2 -2
View File
@@ -1,8 +1,8 @@
import { createFromIconfontCN } from '@ant-design/icons'; import { createFromIconfontCN } from '@ant-design/icons';
// import './iconfont/iconfont.js'; import './iconfont/iconfont.js';
const IconFont = createFromIconfontCN({ const IconFont = createFromIconfontCN({
scriptUrl: '//at.alicdn.com/t/c/font_4613488_w50kuuord8o.js' scriptUrl: ''
}); });
export default IconFont; export default IconFont;
-26
View File
@@ -1,26 +0,0 @@
import { useIntl } from '@umijs/max';
import { Modal, message, type ModalFuncProps } from 'antd';
import { useRef } from 'react';
export default function useDeleteModal() {
const intl = useIntl();
const modalRef = useRef<any>();
const showDeleteModal = (config: ModalFuncProps = {}) => {
modalRef.current = Modal.confirm({
...config,
okText: intl.formatMessage({
id: 'common.button.delete'
}),
onCancel: () => {
config.onCancel?.();
modalRef.current.destroy?.();
},
onOk: async () => {
await config.onOk?.();
message.success(intl.formatMessage({ id: 'common.message.success' }));
}
});
};
return { showDeleteModal };
}
+7 -5
View File
@@ -1,3 +1,4 @@
import useDeleteModel from '@/components/delete-modal';
import useSetChunkRequest from '@/hooks/use-chunk-request'; import useSetChunkRequest from '@/hooks/use-chunk-request';
import useTableRowSelection from '@/hooks/use-table-row-selection'; import useTableRowSelection from '@/hooks/use-table-row-selection';
import useTableSort from '@/hooks/use-table-sort'; import useTableSort from '@/hooks/use-table-sort';
@@ -55,7 +56,7 @@ export default function useTableFetch<ListItem>(
perPage: 10, perPage: 10,
search: '' search: ''
}); });
const { DeleteModal, show, hide, configuration } = useDeleteModel();
const { setChunkRequest } = useSetChunkRequest(); const { setChunkRequest } = useSetChunkRequest();
const { updateChunkedList, cacheDataListRef } = useUpdateChunkedList({ const { updateChunkedList, cacheDataListRef } = useUpdateChunkedList({
events: ['UPDATE', 'DELETE', 'INSERT'], events: ['UPDATE', 'DELETE', 'INSERT'],
@@ -203,7 +204,7 @@ export default function useTableFetch<ListItem>(
row: ListItem & { name: string; id: number }, row: ListItem & { name: string; id: number },
options?: any options?: any
) => { ) => {
modalRef.current.show({ show({
content: contentForDelete, content: contentForDelete,
operation: 'common.delete.single.confirm', operation: 'common.delete.single.confirm',
name: row.name, name: row.name,
@@ -211,7 +212,7 @@ export default function useTableFetch<ListItem>(
async onOk() { async onOk() {
console.log('OK'); console.log('OK');
await deleteAPI?.(row.id, { await deleteAPI?.(row.id, {
...modalRef.current?.configuration ...configuration
}); });
fetchData(); fetchData();
} }
@@ -219,7 +220,7 @@ export default function useTableFetch<ListItem>(
}; };
const handleDeleteBatch = (options = {}) => { const handleDeleteBatch = (options = {}) => {
modalRef.current.show({ show({
content: contentForDelete, content: contentForDelete,
operation: 'common.delete.confirm', operation: 'common.delete.confirm',
selection: true, selection: true,
@@ -231,7 +232,7 @@ export default function useTableFetch<ListItem>(
rowSelection.selectedRowKeys, rowSelection.selectedRowKeys,
async (id: any) => { async (id: any) => {
await deleteAPI(id, { await deleteAPI(id, {
...modalRef.current?.configuration configuration
}); });
successIds.push(id); successIds.push(id);
} }
@@ -274,6 +275,7 @@ export default function useTableFetch<ListItem>(
sortOrder, sortOrder,
queryParams, queryParams,
modalRef, modalRef,
DeleteModal,
setQueryParams, setQueryParams,
handleDelete, handleDelete,
handleDeleteBatch, handleDeleteBatch,
+3 -3
View File
@@ -194,13 +194,13 @@ export default {
'common.delete.confirm': 'common.delete.confirm':
'Are you sure you want to delete the selected {type}?', 'Are you sure you want to delete the selected {type}?',
'common.delete.single.confirm': 'common.delete.single.confirm':
'Are you sure you want to delete <span style="font-size: 13px;font-weight: 700">{name}</span>?', 'Are you sure you want to delete? \n <span style="font-size: 13px;font-weight: 700">{name}</span>',
'common.stop.confirm': 'Are you sure you want to stop the selected {type}?', 'common.stop.confirm': 'Are you sure you want to stop the selected {type}?',
'common.stop.single.confirm': 'common.stop.single.confirm':
'Are you sure you want to stop <span style="font-size: 13px;font-weight: 700">{name}</span>?', 'Are you sure you want to stop? \n <span style="font-size: 13px;font-weight: 700">{name}</span>',
'common.start.confirm': 'Are you sure you want to start the selected {type}?', 'common.start.confirm': 'Are you sure you want to start the selected {type}?',
'common.start.single.confirm': 'common.start.single.confirm':
'Are you sure you want to start <span style="font-size: 13px;font-weight: 700">{name}</span>?', 'Are you sure you want to start? \n <span style="font-size: 13px;font-weight: 700">{name}</span>',
'common.filter.name': 'Filter by name', 'common.filter.name': 'Filter by name',
'common.form.password': 'Password', 'common.form.password': 'Password',
'common.form.username': 'Username', 'common.form.username': 'Username',
+1 -1
View File
@@ -70,7 +70,7 @@ export default {
'Waiting for the download to complete...', 'Waiting for the download to complete...',
'resources.filter.worker': 'Filter by worker', 'resources.filter.worker': 'Filter by worker',
'resources.filter.source': 'Filter by Source', 'resources.filter.source': 'Filter by Source',
'resources.modelfiles.delete.tips': 'Also delete the file from disk!', 'resources.modelfiles.delete.tips': 'Also delete the file from disk',
'resources.modelfiles.copy.tips': 'Copy Full Path', 'resources.modelfiles.copy.tips': 'Copy Full Path',
'resources.filter.path': 'Filter by path' 'resources.filter.path': 'Filter by path'
}; };
+1 -1
View File
@@ -71,7 +71,7 @@ export default {
'ダウンロード完了を待っています...', 'ダウンロード完了を待っています...',
'resources.filter.worker': 'ワーカーでフィルタ', 'resources.filter.worker': 'ワーカーでフィルタ',
'resources.filter.source': 'ソースでフィルタ', 'resources.filter.source': 'ソースでフィルタ',
'resources.modelfiles.delete.tips': 'ディスクからファイルも削除します', 'resources.modelfiles.delete.tips': 'ディスクからファイルも削除します',
'resources.modelfiles.copy.tips': 'フルパスをコピー', 'resources.modelfiles.copy.tips': 'フルパスをコピー',
'resources.filter.path': 'パスでフィルタ' 'resources.filter.path': 'パスでフィルタ'
}; };
+1 -1
View File
@@ -69,7 +69,7 @@ export default {
'resources.modelfiles.storagePath.holder': 'Ожидание завершения загрузки...', 'resources.modelfiles.storagePath.holder': 'Ожидание завершения загрузки...',
'resources.filter.worker': 'Фильтровать по узлу', 'resources.filter.worker': 'Фильтровать по узлу',
'resources.filter.source': 'Фильтровать по источнику', 'resources.filter.source': 'Фильтровать по источнику',
'resources.modelfiles.delete.tips': 'Также удалить файл с диска!', 'resources.modelfiles.delete.tips': 'Также удалить файл с диска',
'resources.modelfiles.copy.tips': 'Скопировать полный путь', 'resources.modelfiles.copy.tips': 'Скопировать полный путь',
'resources.filter.path': 'Фильтрация по пути' 'resources.filter.path': 'Фильтрация по пути'
}; };
+6 -6
View File
@@ -185,15 +185,15 @@ export default {
'common.table.user': '用户', 'common.table.user': '用户',
'common.settings.instructions': '操作指引', 'common.settings.instructions': '操作指引',
'common.settings.language': '语言', 'common.settings.language': '语言',
'common.delete.confirm': '删除选中的{type},确定吗?', 'common.delete.confirm': '确定删除选中的{type}吗?',
'common.delete.single.confirm': 'common.delete.single.confirm':
'删除 <span style="font-size: 13px;font-weight: 700">{name}</span>,确定吗?', '确定删除以下内容?\n <span style="font-size: 13px;font-weight: 700">{name}</span>',
'common.stop.confirm': '停止选中的{type},确定吗?', 'common.stop.confirm': '确定停止选中的{type}吗?',
'common.stop.single.confirm': 'common.stop.single.confirm':
'停止 <span style="font-size: 13px;font-weight: 700">{name}</span>,确定吗?', '确定停止 <span style="font-size: 13px;font-weight: 700">{name}</span>',
'common.start.confirm': '启动选中的{type},确定吗?', 'common.start.confirm': '确定启动选中的{type}吗?',
'common.start.single.confirm': 'common.start.single.confirm':
'启动 <span style="font-size: 13px;font-weight: 700">{name}</span>,确定吗?', '确定启动 <span style="font-size: 13px;font-weight: 700">{name}</span>',
'common.filter.name': '名称查询', 'common.filter.name': '名称查询',
'common.form.password': '密码', 'common.form.password': '密码',
'common.form.username': '用户名', 'common.form.username': '用户名',
+1 -1
View File
@@ -68,7 +68,7 @@ export default {
'resources.modelfiles.storagePath.holder': '等待下载完成...', 'resources.modelfiles.storagePath.holder': '等待下载完成...',
'resources.filter.worker': '按 Worker 筛选', 'resources.filter.worker': '按 Worker 筛选',
'resources.filter.source': '按来源筛选', 'resources.filter.source': '按来源筛选',
'resources.modelfiles.delete.tips': '同时从磁盘删除文件', 'resources.modelfiles.delete.tips': '同时从磁盘删除文件',
'resources.modelfiles.copy.tips': '复制完整路径', 'resources.modelfiles.copy.tips': '复制完整路径',
'resources.filter.path': '路径查询' 'resources.filter.path': '路径查询'
}; };
+2 -3
View File
@@ -1,5 +1,4 @@
import AutoTooltip from '@/components/auto-tooltip'; import AutoTooltip from '@/components/auto-tooltip';
import DeleteModal from '@/components/delete-modal';
import PageTools from '@/components/page-tools'; import PageTools from '@/components/page-tools';
import { PageAction } from '@/config'; import { PageAction } from '@/config';
import HotKeys from '@/config/hotkeys'; import HotKeys from '@/config/hotkeys';
@@ -32,7 +31,7 @@ const APIKeys: React.FC = () => {
rowSelection, rowSelection,
queryParams, queryParams,
sortOrder, sortOrder,
modalRef, DeleteModal,
handleDelete, handleDelete,
handleDeleteBatch, handleDeleteBatch,
fetchData, fetchData,
@@ -261,7 +260,7 @@ const APIKeys: React.FC = () => {
onCancel={handleModalCancel} onCancel={handleModalCancel}
onOk={handleModalOk} onOk={handleModalOk}
></AddAPIKeyModal> ></AddAPIKeyModal>
<DeleteModal ref={modalRef}></DeleteModal> <DeleteModal></DeleteModal>
</> </>
); );
}; };
@@ -471,10 +471,24 @@ const InstanceItem: React.FC<InstanceItemProps> = ({
); );
}; };
const renderDistributionInfo = (severList: any[]) => { const renderDistributionInfo = (distributed_servers: Record<string, any>) => {
const { rpc_servers, ray_actors, subordinate_workers } =
distributed_servers;
let severList: any[] = [];
if (rpc_servers?.length > 0) {
severList = rpc_servers;
} else if (ray_actors?.length > 0) {
severList = ray_actors;
} else if (subordinate_workers?.length > 0) {
severList = subordinate_workers;
}
if (!severList.length) { if (!severList.length) {
return null; return null;
} }
return ( return (
<TooltipOverlayScroller <TooltipOverlayScroller
toolTipProps={{ toolTipProps={{
@@ -612,12 +626,7 @@ const InstanceItem: React.FC<InstanceItemProps> = ({
className="flex align-center" className="flex align-center"
> >
{renderOffloadInfo} {renderOffloadInfo}
{renderDistributionInfo( {renderDistributionInfo(instanceData.distributed_servers || {})}
instanceData.distributed_servers?.rpc_servers ||
instanceData.distributed_servers?.ray_actors ||
instanceData.distributed_servers?.subordinate_workers ||
[]
)}
</span> </span>
</Col> </Col>
<Col span={4}> <Col span={4}>
+9 -8
View File
@@ -1,6 +1,6 @@
import { modelsExpandKeysAtom } from '@/atoms/models'; import { modelsExpandKeysAtom } from '@/atoms/models';
import AutoTooltip from '@/components/auto-tooltip'; import AutoTooltip from '@/components/auto-tooltip';
import DeleteModal from '@/components/delete-modal'; import useDeleteModel from '@/components/delete-modal';
import DropDownActions from '@/components/drop-down-actions'; import DropDownActions from '@/components/drop-down-actions';
import DropdownButtons from '@/components/drop-down-buttons'; import DropdownButtons from '@/components/drop-down-buttons';
import { PageSize } from '@/components/logs-viewer/config'; import { PageSize } from '@/components/logs-viewer/config';
@@ -146,6 +146,7 @@ const Models: React.FC<ModelsProps> = ({
loadend, loadend,
total total
}) => { }) => {
const { DeleteModal, show } = useDeleteModel();
const { getGPUList, generateFormValues, gpuDeviceList } = const { getGPUList, generateFormValues, gpuDeviceList } =
useGenerateFormEditInitialValues(); useGenerateFormEditInitialValues();
const { saveScrollHeight, restoreScrollHeight } = useBodyScroll(); const { saveScrollHeight, restoreScrollHeight } = useBodyScroll();
@@ -327,7 +328,7 @@ const Models: React.FC<ModelsProps> = ({
}, [onCancelViewLogs]); }, [onCancelViewLogs]);
const handleDelete = async (row: any) => { const handleDelete = async (row: any) => {
modalRef.current.show({ show({
content: 'models.table.models', content: 'models.table.models',
operation: 'common.delete.single.confirm', operation: 'common.delete.single.confirm',
name: row.name, name: row.name,
@@ -342,7 +343,7 @@ const Models: React.FC<ModelsProps> = ({
}; };
const handleDeleteBatch = () => { const handleDeleteBatch = () => {
modalRef.current.show({ show({
content: 'models.table.models', content: 'models.table.models',
operation: 'common.delete.confirm', operation: 'common.delete.confirm',
selection: true, selection: true,
@@ -406,7 +407,7 @@ const Models: React.FC<ModelsProps> = ({
); );
const handleDeleteInstace = useCallback( const handleDeleteInstace = useCallback(
(row: any) => { (row: any) => {
modalRef.current.show({ show({
content: 'models.instances', content: 'models.instances',
okText: 'common.button.delrecreate', okText: 'common.button.delrecreate',
operation: 'common.delete.single.confirm', operation: 'common.delete.single.confirm',
@@ -487,7 +488,7 @@ const Models: React.FC<ModelsProps> = ({
} }
if (val === 'stop') { if (val === 'stop') {
modalRef.current.show({ show({
content: 'models.instances', content: 'models.instances',
title: 'common.title.stop.confirm', title: 'common.title.stop.confirm',
okText: 'common.button.stop', okText: 'common.button.stop',
@@ -562,7 +563,7 @@ const Models: React.FC<ModelsProps> = ({
}; };
const handleStartBatch = async () => { const handleStartBatch = async () => {
modalRef.current.show({ show({
content: 'models.table.models', content: 'models.table.models',
title: 'common.title.start.confirm', title: 'common.title.start.confirm',
okText: 'common.button.start', okText: 'common.button.start',
@@ -575,7 +576,7 @@ const Models: React.FC<ModelsProps> = ({
}; };
const handleStopBatch = async () => { const handleStopBatch = async () => {
modalRef.current.show({ show({
content: 'models.table.models', content: 'models.table.models',
title: 'common.title.stop.confirm', title: 'common.title.stop.confirm',
okText: 'common.button.stop', okText: 'common.button.stop',
@@ -884,7 +885,7 @@ const Models: React.FC<ModelsProps> = ({
open={openLogModal} open={openLogModal}
onCancel={handleLogModalCancel} onCancel={handleLogModalCancel}
></ViewLogsModal> ></ViewLogsModal>
<DeleteModal ref={modalRef}></DeleteModal> <DeleteModal></DeleteModal>
<APIAccessInfoModal <APIAccessInfoModal
open={apiAccessInfo.show} open={apiAccessInfo.show}
data={apiAccessInfo.data} data={apiAccessInfo.data}
@@ -1,6 +1,5 @@
import { modelsExpandKeysAtom } from '@/atoms/models'; import { modelsExpandKeysAtom } from '@/atoms/models';
import AutoTooltip from '@/components/auto-tooltip'; import AutoTooltip from '@/components/auto-tooltip';
import DeleteModal from '@/components/delete-modal';
import DropdownButtons from '@/components/drop-down-buttons'; import DropdownButtons from '@/components/drop-down-buttons';
import { TooltipOverlayScroller } from '@/components/overlay-scroller'; import { TooltipOverlayScroller } from '@/components/overlay-scroller';
import { FilterBar } from '@/components/page-tools'; import { FilterBar } from '@/components/page-tools';
@@ -294,7 +293,7 @@ const ModelFiles = () => {
dataSource, dataSource,
rowSelection, rowSelection,
queryParams, queryParams,
modalRef, DeleteModal,
fetchData, fetchData,
handleDelete, handleDelete,
handleDeleteBatch, handleDeleteBatch,
@@ -683,7 +682,7 @@ const ModelFiles = () => {
}} }}
></Table> ></Table>
</ConfigProvider> </ConfigProvider>
<DeleteModal ref={modalRef}></DeleteModal> <DeleteModal></DeleteModal>
<DownloadModal <DownloadModal
onCancel={handleDownloadCancel} onCancel={handleDownloadCancel}
onOk={handleDownload} onOk={handleDownload}
+2 -3
View File
@@ -1,5 +1,4 @@
import AutoTooltip from '@/components/auto-tooltip'; import AutoTooltip from '@/components/auto-tooltip';
import DeleteModal from '@/components/delete-modal';
import DropdownButtons from '@/components/drop-down-buttons'; import DropdownButtons from '@/components/drop-down-buttons';
import { FilterBar } from '@/components/page-tools'; import { FilterBar } from '@/components/page-tools';
import ProgressBar from '@/components/progress-bar'; import ProgressBar from '@/components/progress-bar';
@@ -94,7 +93,7 @@ const Workers: React.FC = () => {
dataSource, dataSource,
rowSelection, rowSelection,
queryParams, queryParams,
modalRef, DeleteModal,
handleDelete, handleDelete,
handleDeleteBatch, handleDeleteBatch,
fetchData, fetchData,
@@ -447,7 +446,7 @@ const Workers: React.FC = () => {
/> />
</Table> </Table>
</ConfigProvider> </ConfigProvider>
<DeleteModal ref={modalRef}></DeleteModal> <DeleteModal></DeleteModal>
<AddWorker open={open} onCancel={() => setOpen(false)}></AddWorker> <AddWorker open={open} onCancel={() => setOpen(false)}></AddWorker>
<UpdateLabels <UpdateLabels
open={updateLabelsData.open} open={updateLabelsData.open}
+2 -3
View File
@@ -1,5 +1,4 @@
import AutoTooltip from '@/components/auto-tooltip'; import AutoTooltip from '@/components/auto-tooltip';
import DeleteModal from '@/components/delete-modal';
import DropdownButtons from '@/components/drop-down-buttons'; import DropdownButtons from '@/components/drop-down-buttons';
import PageTools from '@/components/page-tools'; import PageTools from '@/components/page-tools';
import { PageAction } from '@/config'; import { PageAction } from '@/config';
@@ -55,7 +54,7 @@ const Users: React.FC = () => {
rowSelection, rowSelection,
queryParams, queryParams,
sortOrder, sortOrder,
modalRef, DeleteModal,
handleDelete, handleDelete,
handleDeleteBatch, handleDeleteBatch,
fetchData, fetchData,
@@ -321,7 +320,7 @@ const Users: React.FC = () => {
onCancel={handleModalCancel} onCancel={handleModalCancel}
onOk={handleModalOk} onOk={handleModalOk}
></AddModal> ></AddModal>
<DeleteModal ref={modalRef}></DeleteModal> <DeleteModal></DeleteModal>
</> </>
); );
}; };