feat(component): 支持动态加载不同类型的配置教程文档

master
钟良源 2 months ago
parent 940c3f0682
commit 4b7f3dc897

@ -1,67 +1,82 @@
import React, { useState } from 'react'; import React, { useState } from 'react';
import styles from './style/index.module.less'; import styles from './style/index.module.less';
import { Button, Input, Radio, Space } from '@arco-design/web-react'; import { Button, Input, Modal, Radio, Space } from '@arco-design/web-react';
import { IconSearch } from '@arco-design/web-react/icon'; import { IconSearch } from '@arco-design/web-react/icon';
import CollapseList from './collapseList'; import CollapseList from './collapseList';
import { startStatusConstant } from '@/const/isdp/componentDeploy'; import { startStatusConstant } from '@/const/isdp/componentDeploy';
import ConfigTutorial from '@/pages/componentDevelopment/componentEnv/configTutorial';
const ComponentDeployment = () => { const ComponentDeployment = () => {
const [searchKeyword, setSearchKeyword] = useState(''); const [searchKeyword, setSearchKeyword] = useState('');
const [selectedStatus, setSelectedStatus] = useState<string | undefined>(undefined); const [selectedStatus, setSelectedStatus] = useState<string | undefined>(undefined);
const [tutorialVisible, setTutorialVisible] = useState(false);
// 状态选项配置 // 状态选项配置
const statusOptions = [ const statusOptions = [
{ label: '全部', value: undefined }, { label: '全部', value: undefined },
{ label: '启用中', value: "RUN" }, { label: '启用中', value: 'RUN' },
{ label: '已下架', value: "STOP" } { label: '已下架', value: 'STOP' }
]; ];
return ( return (
<div className={styles['component-deployment']}> <>
<div className={styles['header']}> <div className={styles['component-deployment']}>
<Radio.Group <div className={styles['header']}>
value={selectedStatus} <Radio.Group
onChange={(value) => setSelectedStatus(value)} value={selectedStatus}
name="button-radio-group" onChange={(value) => setSelectedStatus(value)}
> name="button-radio-group"
{statusOptions.map((item) => {
return (
<Radio key={item.label} value={item.value}>
{({ checked }) => {
return (
<Button tabIndex={-1} key={item.label} shape="round" type={checked ? 'primary' : 'default'}>
{item.label}
</Button>
);
}}
</Radio>
);
})}
</Radio.Group>
<Space>
<Input
prefix={<IconSearch />}
placeholder={'搜索'}
style={{ width: 236 }}
value={searchKeyword}
onChange={(value) => setSearchKeyword(value)}
onPressEnter={() => {
// 触发搜索
}}
/>
<Button
type="primary"
style={{ marginLeft: 5, borderRadius: 4 }}
> >
{statusOptions.map((item) => {
</Button> return (
</Space> <Radio key={item.label} value={item.value}>
</div> {({ checked }) => {
<div className={styles['content']}> return (
<CollapseList searchKeyword={searchKeyword} runStatus={selectedStatus} /> <Button tabIndex={-1} key={item.label} shape="round" type={checked ? 'primary' : 'default'}>
{item.label}
</Button>
);
}}
</Radio>
);
})}
</Radio.Group>
<Space>
<Input
prefix={<IconSearch />}
placeholder={'搜索'}
style={{ width: 236 }}
value={searchKeyword}
onChange={(value) => setSearchKeyword(value)}
onPressEnter={() => {
// 触发搜索
}}
/>
<Button
type="primary"
style={{ marginLeft: 5, borderRadius: 4 }}
onClick={() => setTutorialVisible(true)}
>
</Button>
</Space>
</div>
<div className={styles['content']}>
<CollapseList searchKeyword={searchKeyword} runStatus={selectedStatus} />
</div>
</div> </div>
</div>
<Modal
title="组件实例教程"
visible={tutorialVisible}
onCancel={() => setTutorialVisible(false)}
footer={null}
style={{ top: 20, width: '100%' }}
>
<ConfigTutorial tutorialType="compInstance" />
</Modal>
</>
); );
}; };

@ -1,15 +1,24 @@
import React, { useEffect, useState } from 'react'; import React, { useEffect, useState } from 'react';
import ReactMarkdown from 'react-markdown'; import ReactMarkdown from 'react-markdown';
const ConfigTutorial = () => { type tutorialTypeProps = {
tutorialType: 'env' | 'compInstance';
};
const ConfigTutorial: React.FC<tutorialTypeProps> = ({ tutorialType }) => {
const [markdown, setMarkdown] = useState(''); const [markdown, setMarkdown] = useState('');
useEffect(() => { useEffect(() => {
fetch('/assets/环境配置教程.md') const fileMap = {
env: '/assets/环境配置教程.md',
compInstance: '/assets/组件实例指引.md'
};
fetch(fileMap[tutorialType])
.then(response => response.text()) .then(response => response.text())
.then(text => setMarkdown(text)) .then(text => setMarkdown(text))
.catch(error => console.error('Error loading markdown file:', error)); .catch(error => console.error('Error loading markdown file:', error));
}, []); }, [tutorialType]);
return ( return (
<div style={{ padding: '20px' }}> <div style={{ padding: '20px' }}>

@ -155,7 +155,7 @@ const EnvExtra = ({ currentEnvData }) => {
footer={null} footer={null}
style={{ top: 20, width: '100%' }} style={{ top: 20, width: '100%' }}
> >
<ConfigTutorial /> <ConfigTutorial tutorialType="env" />
</Modal> </Modal>
</> </>
); );

Loading…
Cancel
Save