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.

120 lines
3.3 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.

import React, { useEffect, useState, useRef } from 'react';
import { Modal, Steps, Select, Grid, Input, Form, Message, Button } from '@arco-design/web-react';
import EnvExtra from '@/pages/componentDevelopment/componentEnv/envExtra';
import FormEditor, { FormEditorInstance } from '@/pages/componentDevelopment/componentEnv/formEditor';
const Step = Steps.Step;
// 定义环境类型选项的接口
interface EnvTypeOption {
id: string | number;
classifyType: string;
classifyName: string;
dictKey: string;
}
// 定义组件 Props 类型
interface AddModalProps {
visible: boolean;
envType: EnvTypeOption[];
setVisible: (visible: boolean) => void;
onOk?: (value) => void;
record?: any; // 添加record属性用于接收外部传入的数据
}
const AddModal = ({ visible, envType, setVisible, onOk, record }: AddModalProps) => {
const [currentStep, setCurrentStep] = useState(1);
const [envTypeOptions, setEnvTypeOptions] = useState<EnvTypeOption[]>([]);
const [confirmLoading, setConfirmLoading] = useState(false);
const [currentEnvData, setCurrentEnvData] = useState<any>({});
const formRef = useRef<FormEditorInstance>(null);
useEffect(() => {
if (envType.length > 0) setEnvTypeOptions(envType);
}, [envType]);
// 当组件接收到record参数时初始化数据并跳转到第二步
useEffect(() => {
if (record && Object.keys(record).length > 0) setCurrentStep(2);
else setCurrentStep(1);
setCurrentEnvData(record);
}, [record, visible]);
const handleOk = () => {
// 当前步骤为1时触发表单提交
if (currentStep === 1) {
formRef.current && formRef.current.handleOk();
return;
}
setVisible(false);
};
const handleCancel = () => {
setVisible(false);
};
const handleStepOneSuccess = (value) => {
setCurrentStep(2);
setCurrentEnvData(value);
onOk && onOk(value);
};
// 返回第一步的处理函数
const handleBackToStepOne = () => {
setCurrentStep(1);
};
return (
<Modal
title="新增环境"
visible={visible}
onOk={handleOk}
onCancel={handleCancel}
autoFocus={false}
focusLock={true}
style={{ width: 1280 }}
okText={currentStep === 1 ? '创建并生成证书' : '完成'}
confirmLoading={confirmLoading}
footer={[
<Button key="cancel" onClick={handleCancel}></Button>,
currentStep === 2 && (
<Button key="back" onClick={handleBackToStepOne}></Button>
),
<Button
key="ok"
type="primary"
loading={confirmLoading}
onClick={handleOk}
>
{currentStep === 1 ? '创建并生成证书' : '完成'}
</Button>
]}
>
<Steps current={currentStep} style={{ maxWidth: 780, margin: '0 auto' }}>
<Step title="基础配置" />
<Step title="配置文件与环境测试" />
</Steps>
{currentStep === 1 && (
<FormEditor
ref={formRef}
record={record}
envTypeOptions={envTypeOptions}
setVisible={setVisible}
setConfirmLoading={setConfirmLoading}
onSuccess={(value) => handleStepOneSuccess(value)}
/>
)}
{currentStep === 2 && (
<EnvExtra
currentEnvData={currentEnvData}
/>
)}
</Modal>
);
};
export default AddModal;