parent
bb13fc02c1
commit
842a217234
@ -1,29 +0,0 @@
|
|||||||
.page {
|
|
||||||
background-color: #fff;
|
|
||||||
width: 1200px;
|
|
||||||
margin: 0 auto;
|
|
||||||
min-height: 600px;
|
|
||||||
overflow: hidden;
|
|
||||||
padding-bottom: 20px;
|
|
||||||
.name {
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
margin-bottom: 50px;
|
|
||||||
margin-top: 30px;
|
|
||||||
|
|
||||||
b {
|
|
||||||
width: 6px;
|
|
||||||
height: 20px;
|
|
||||||
background: #464f66;
|
|
||||||
border-radius: 4px;
|
|
||||||
display: inline-block;
|
|
||||||
margin-right: 4px;
|
|
||||||
}
|
|
||||||
|
|
||||||
span {
|
|
||||||
font-size: 24px;
|
|
||||||
font-weight: 500;
|
|
||||||
color: #232b40;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,182 +0,0 @@
|
|||||||
import styles from './index.less';
|
|
||||||
import { Input, Button, Row, Form, Select, message } from 'antd';
|
|
||||||
import { FC } from 'react';
|
|
||||||
import { connect, Dispatch, BasicInfoModelState } from 'umi';
|
|
||||||
import Fetch from '@/utils/fetch';
|
|
||||||
|
|
||||||
interface PageProps {
|
|
||||||
basic: BasicInfoModelState;
|
|
||||||
dispatch: Dispatch;
|
|
||||||
}
|
|
||||||
|
|
||||||
const Page: FC<PageProps> = ({ basic, dispatch }) => {
|
|
||||||
const [form] = Form.useForm();
|
|
||||||
const { certificateInfo } = basic;
|
|
||||||
const { step } = certificateInfo;
|
|
||||||
|
|
||||||
console.log(certificateInfo, 'certificateInfo');
|
|
||||||
|
|
||||||
const handleValuesChange = (v: any) => {
|
|
||||||
dispatch({
|
|
||||||
type: 'basic/setCertificateInfo',
|
|
||||||
payload: v,
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
const testLink = async () => {
|
|
||||||
const res = await Fetch('/openi/resource/dbTestConnection', {
|
|
||||||
method: 'post',
|
|
||||||
data: {
|
|
||||||
dbType: certificateInfo.dbType,
|
|
||||||
dbDrive: certificateInfo.dbDrive,
|
|
||||||
dbIp: certificateInfo.dbIp,
|
|
||||||
dbPort: certificateInfo.dbPort,
|
|
||||||
dbName: certificateInfo.dbName,
|
|
||||||
dbUser: certificateInfo.dbUser,
|
|
||||||
dbPasswd: certificateInfo.dbPasswd,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
if (res.result === 'success') {
|
|
||||||
const data = res?.data?.[0];
|
|
||||||
dispatch({
|
|
||||||
type: 'basic/setCertificateInfo',
|
|
||||||
payload: {
|
|
||||||
dbIsConn: data?.isConn,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
message.error(res.errorMsg);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
return (
|
|
||||||
<div
|
|
||||||
style={{ display: step === 1 ? 'block' : 'none' }}
|
|
||||||
className={styles.page}
|
|
||||||
>
|
|
||||||
<div className={styles.name}>
|
|
||||||
<b /> <span>数据库配置</span>
|
|
||||||
</div>
|
|
||||||
<Form
|
|
||||||
form={form}
|
|
||||||
colon={false}
|
|
||||||
layout="horizontal"
|
|
||||||
labelCol={{ span: 5 }}
|
|
||||||
size="large"
|
|
||||||
wrapperCol={{ span: 14 }}
|
|
||||||
onValuesChange={handleValuesChange}
|
|
||||||
onFinish={() => {
|
|
||||||
dispatch({
|
|
||||||
type: 'basic/setCertificateInfo',
|
|
||||||
payload: { step: 2 },
|
|
||||||
});
|
|
||||||
}}
|
|
||||||
>
|
|
||||||
<Form.Item
|
|
||||||
label="数据库类型"
|
|
||||||
name="dbType"
|
|
||||||
rules={[
|
|
||||||
{
|
|
||||||
required: true,
|
|
||||||
message: `请输入数据库类型`,
|
|
||||||
},
|
|
||||||
]}
|
|
||||||
>
|
|
||||||
<Select>
|
|
||||||
<Select.Option key={'ORACEL'}>ORACEL</Select.Option>
|
|
||||||
<Select.Option key={'SQL'}>SQL</Select.Option>
|
|
||||||
<Select.Option key={'SERVER'}>SERVER</Select.Option>
|
|
||||||
</Select>
|
|
||||||
</Form.Item>
|
|
||||||
<Form.Item
|
|
||||||
label="数据库驱动"
|
|
||||||
name="dbDrive"
|
|
||||||
rules={[
|
|
||||||
{
|
|
||||||
required: true,
|
|
||||||
message: `请输入数据库驱动`,
|
|
||||||
},
|
|
||||||
]}
|
|
||||||
>
|
|
||||||
<Input />
|
|
||||||
</Form.Item>
|
|
||||||
<Form.Item
|
|
||||||
label="IP地址"
|
|
||||||
name="dbIp"
|
|
||||||
rules={[
|
|
||||||
{
|
|
||||||
required: true,
|
|
||||||
message: `请输入IP地址`,
|
|
||||||
},
|
|
||||||
]}
|
|
||||||
>
|
|
||||||
<Input />
|
|
||||||
</Form.Item>
|
|
||||||
<Form.Item
|
|
||||||
label="端口号"
|
|
||||||
name="dbPort"
|
|
||||||
rules={[
|
|
||||||
{
|
|
||||||
required: true,
|
|
||||||
message: `请输入端口号`,
|
|
||||||
},
|
|
||||||
]}
|
|
||||||
>
|
|
||||||
<Input />
|
|
||||||
</Form.Item>
|
|
||||||
<Form.Item
|
|
||||||
label="数据库名"
|
|
||||||
name="dbName"
|
|
||||||
rules={[
|
|
||||||
{
|
|
||||||
required: true,
|
|
||||||
message: `请输入数据库名`,
|
|
||||||
},
|
|
||||||
]}
|
|
||||||
>
|
|
||||||
<Input />
|
|
||||||
</Form.Item>
|
|
||||||
<Form.Item
|
|
||||||
label="数据库用户名"
|
|
||||||
name="dbUser"
|
|
||||||
rules={[
|
|
||||||
{
|
|
||||||
required: true,
|
|
||||||
message: `请输入数据库用户名`,
|
|
||||||
},
|
|
||||||
]}
|
|
||||||
>
|
|
||||||
<Input />
|
|
||||||
</Form.Item>
|
|
||||||
<Form.Item
|
|
||||||
label="数据库密码"
|
|
||||||
name="dbPasswd"
|
|
||||||
rules={[
|
|
||||||
{
|
|
||||||
required: true,
|
|
||||||
message: `请输入数据库密码`,
|
|
||||||
},
|
|
||||||
]}
|
|
||||||
>
|
|
||||||
<Input.Password autoComplete="new-password" />
|
|
||||||
</Form.Item>
|
|
||||||
</Form>
|
|
||||||
<Row justify="end">
|
|
||||||
<Button onClick={testLink} type="primary">
|
|
||||||
测试链接
|
|
||||||
</Button>
|
|
||||||
<Button
|
|
||||||
type="primary"
|
|
||||||
ghost
|
|
||||||
onClick={() => form.submit()}
|
|
||||||
className="ml20"
|
|
||||||
>
|
|
||||||
下一步
|
|
||||||
</Button>
|
|
||||||
</Row>
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
export default connect(({ basic }: { basic: BasicInfoModelState }) => ({
|
|
||||||
basic,
|
|
||||||
}))(Page);
|
|
@ -1,51 +0,0 @@
|
|||||||
.page {
|
|
||||||
background-color: #fff;
|
|
||||||
width: 1200px;
|
|
||||||
margin: 0 auto;
|
|
||||||
min-height: 600px;
|
|
||||||
overflow: hidden;
|
|
||||||
padding-bottom: 20px;
|
|
||||||
.name {
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
margin-bottom: 50px;
|
|
||||||
margin-top: 30px;
|
|
||||||
|
|
||||||
b {
|
|
||||||
width: 6px;
|
|
||||||
height: 20px;
|
|
||||||
background: #464f66;
|
|
||||||
border-radius: 4px;
|
|
||||||
display: inline-block;
|
|
||||||
margin-right: 4px;
|
|
||||||
}
|
|
||||||
|
|
||||||
span {
|
|
||||||
font-size: 24px;
|
|
||||||
font-weight: 500;
|
|
||||||
color: #232b40;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.title {
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
margin-left: 60px;
|
|
||||||
margin-bottom: 30px;
|
|
||||||
|
|
||||||
b {
|
|
||||||
width: 4px;
|
|
||||||
height: 14px;
|
|
||||||
background: #464f66;
|
|
||||||
border-radius: 4px;
|
|
||||||
display: inline-block;
|
|
||||||
margin-right: 4px;
|
|
||||||
}
|
|
||||||
|
|
||||||
span {
|
|
||||||
font-size: 18px;
|
|
||||||
font-weight: 500;
|
|
||||||
color: #464f66;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,169 +0,0 @@
|
|||||||
import styles from './index.less';
|
|
||||||
import { Input, Button, Row, Form } from 'antd';
|
|
||||||
import { FC } from 'react';
|
|
||||||
import { connect, Dispatch, BasicInfoModelState } from 'umi';
|
|
||||||
|
|
||||||
interface PageProps {
|
|
||||||
basic: BasicInfoModelState;
|
|
||||||
dispatch: Dispatch;
|
|
||||||
}
|
|
||||||
|
|
||||||
const Page: FC<PageProps> = ({ basic, dispatch }) => {
|
|
||||||
const [form] = Form.useForm();
|
|
||||||
const { certificateInfo } = basic;
|
|
||||||
const { step } = certificateInfo;
|
|
||||||
|
|
||||||
console.log(certificateInfo, 'certificateInfo');
|
|
||||||
|
|
||||||
const handleValuesChange = (v: any) => {
|
|
||||||
dispatch({
|
|
||||||
type: 'basic/setCertificateInfo',
|
|
||||||
payload: v,
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
return (
|
|
||||||
<div
|
|
||||||
style={{ display: step === 2 ? 'block' : 'none' }}
|
|
||||||
className={styles.page}
|
|
||||||
>
|
|
||||||
<div className={styles.name}>
|
|
||||||
<b /> <span>发布配置</span>
|
|
||||||
</div>
|
|
||||||
<Form
|
|
||||||
form={form}
|
|
||||||
colon={false}
|
|
||||||
layout="horizontal"
|
|
||||||
labelCol={{ span: 5 }}
|
|
||||||
size="large"
|
|
||||||
wrapperCol={{ span: 14 }}
|
|
||||||
onValuesChange={handleValuesChange}
|
|
||||||
onFinish={() => {
|
|
||||||
dispatch({
|
|
||||||
type: 'basic/setCertificateInfo',
|
|
||||||
payload: { step: 3 },
|
|
||||||
});
|
|
||||||
}}
|
|
||||||
>
|
|
||||||
<div className={styles.title}>
|
|
||||||
<b /> <span>数据库配置</span>
|
|
||||||
</div>
|
|
||||||
<Form.Item
|
|
||||||
label="服务器地址"
|
|
||||||
name="targetIp"
|
|
||||||
rules={[
|
|
||||||
{
|
|
||||||
required: true,
|
|
||||||
message: `请输入服务器地址`,
|
|
||||||
},
|
|
||||||
]}
|
|
||||||
>
|
|
||||||
<Input />
|
|
||||||
</Form.Item>
|
|
||||||
<Form.Item
|
|
||||||
label="服务器端口"
|
|
||||||
name="targetPort"
|
|
||||||
rules={[
|
|
||||||
{
|
|
||||||
required: true,
|
|
||||||
message: `请输入服务器端口`,
|
|
||||||
},
|
|
||||||
]}
|
|
||||||
>
|
|
||||||
<Input />
|
|
||||||
</Form.Item>
|
|
||||||
<Form.Item
|
|
||||||
label="用户DN"
|
|
||||||
name="targetUserdn"
|
|
||||||
rules={[
|
|
||||||
{
|
|
||||||
required: true,
|
|
||||||
message: `请输入用户DN`,
|
|
||||||
},
|
|
||||||
]}
|
|
||||||
>
|
|
||||||
<Input />
|
|
||||||
</Form.Item>
|
|
||||||
<Form.Item
|
|
||||||
label="用户口令"
|
|
||||||
name="targetPasswd"
|
|
||||||
rules={[
|
|
||||||
{
|
|
||||||
required: true,
|
|
||||||
message: `请输入用户口令`,
|
|
||||||
},
|
|
||||||
]}
|
|
||||||
>
|
|
||||||
<Input.Password autoComplete="new-password" />
|
|
||||||
</Form.Item>
|
|
||||||
<div className={styles.title}>
|
|
||||||
<b /> <span>用户证书发布配置</span>
|
|
||||||
</div>
|
|
||||||
<Form.Item
|
|
||||||
label="文件路径"
|
|
||||||
name="certUrl"
|
|
||||||
rules={[
|
|
||||||
{
|
|
||||||
required: true,
|
|
||||||
message: `请输入文件路径`,
|
|
||||||
},
|
|
||||||
]}
|
|
||||||
>
|
|
||||||
<Input />
|
|
||||||
</Form.Item>
|
|
||||||
<div className={styles.title}>
|
|
||||||
<b /> <span>CRL发布配置</span>
|
|
||||||
</div>
|
|
||||||
<Form.Item
|
|
||||||
label="CRL发布点中的证书数量"
|
|
||||||
name="certNum"
|
|
||||||
rules={[
|
|
||||||
{
|
|
||||||
required: true,
|
|
||||||
message: `请输入CRL发布点中的证书数量`,
|
|
||||||
},
|
|
||||||
]}
|
|
||||||
>
|
|
||||||
<Input />
|
|
||||||
</Form.Item>
|
|
||||||
<Form.Item
|
|
||||||
label="CRL发布周期"
|
|
||||||
name="certCycle"
|
|
||||||
rules={[
|
|
||||||
{
|
|
||||||
required: true,
|
|
||||||
message: `请输入CRL发布周期`,
|
|
||||||
},
|
|
||||||
]}
|
|
||||||
>
|
|
||||||
<Input />
|
|
||||||
</Form.Item>
|
|
||||||
</Form>
|
|
||||||
<Row justify="end">
|
|
||||||
<Button
|
|
||||||
onClick={() => {
|
|
||||||
dispatch({
|
|
||||||
type: 'basic/setCertificateInfo',
|
|
||||||
payload: { step: 1 },
|
|
||||||
});
|
|
||||||
}}
|
|
||||||
type="primary"
|
|
||||||
ghost
|
|
||||||
>
|
|
||||||
上一步
|
|
||||||
</Button>
|
|
||||||
<Button
|
|
||||||
type="primary"
|
|
||||||
ghost
|
|
||||||
onClick={() => form.submit()}
|
|
||||||
className="ml20"
|
|
||||||
>
|
|
||||||
下一步
|
|
||||||
</Button>
|
|
||||||
</Row>
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
export default connect(({ basic }: { basic: BasicInfoModelState }) => ({
|
|
||||||
basic,
|
|
||||||
}))(Page);
|
|
@ -1,48 +0,0 @@
|
|||||||
.page {
|
|
||||||
background-color: #fff;
|
|
||||||
width: 1200px;
|
|
||||||
margin: 0 auto;
|
|
||||||
min-height: 600px;
|
|
||||||
overflow: hidden;
|
|
||||||
padding-bottom: 20px;
|
|
||||||
|
|
||||||
.name {
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
margin-bottom: 50px;
|
|
||||||
margin-top: 30px;
|
|
||||||
|
|
||||||
b {
|
|
||||||
width: 6px;
|
|
||||||
height: 20px;
|
|
||||||
background: #464f66;
|
|
||||||
border-radius: 4px;
|
|
||||||
display: inline-block;
|
|
||||||
margin-right: 4px;
|
|
||||||
}
|
|
||||||
|
|
||||||
span {
|
|
||||||
font-size: 24px;
|
|
||||||
font-weight: 500;
|
|
||||||
color: #232b40;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.row {
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: center;
|
|
||||||
padding: 30px 0;
|
|
||||||
|
|
||||||
sup {
|
|
||||||
color: red;
|
|
||||||
margin-top: 13px;
|
|
||||||
margin-right: 4px;
|
|
||||||
font-size: 14px;
|
|
||||||
}
|
|
||||||
button {
|
|
||||||
margin-left: 30px;
|
|
||||||
margin-right: 10px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,71 +0,0 @@
|
|||||||
.page {
|
|
||||||
background-color: #fff;
|
|
||||||
width: 1200px;
|
|
||||||
margin: 0 auto;
|
|
||||||
min-height: 600px;
|
|
||||||
overflow: hidden;
|
|
||||||
padding-bottom: 20px;
|
|
||||||
|
|
||||||
.name {
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
margin-bottom: 50px;
|
|
||||||
margin-top: 30px;
|
|
||||||
|
|
||||||
b {
|
|
||||||
width: 6px;
|
|
||||||
height: 20px;
|
|
||||||
background: #464f66;
|
|
||||||
border-radius: 4px;
|
|
||||||
display: inline-block;
|
|
||||||
margin-right: 4px;
|
|
||||||
}
|
|
||||||
|
|
||||||
span {
|
|
||||||
font-size: 24px;
|
|
||||||
font-weight: 500;
|
|
||||||
color: #232b40;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.title {
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
margin-left: 60px;
|
|
||||||
margin-bottom: 10px;
|
|
||||||
|
|
||||||
b {
|
|
||||||
width: 4px;
|
|
||||||
height: 14px;
|
|
||||||
background: #464f66;
|
|
||||||
border-radius: 4px;
|
|
||||||
display: inline-block;
|
|
||||||
margin-right: 4px;
|
|
||||||
}
|
|
||||||
|
|
||||||
span {
|
|
||||||
font-size: 18px;
|
|
||||||
font-weight: 500;
|
|
||||||
color: #464f66;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.row {
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: center;
|
|
||||||
padding: 15px 0;
|
|
||||||
|
|
||||||
span {
|
|
||||||
margin: 0 10px;
|
|
||||||
width: 50%;
|
|
||||||
font-size: 14px;
|
|
||||||
color: #333;
|
|
||||||
}
|
|
||||||
|
|
||||||
span:first-child {
|
|
||||||
text-align: right;
|
|
||||||
color: #464f66;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,106 +0,0 @@
|
|||||||
import styles from './index.less';
|
|
||||||
import { Button, Row, message } from 'antd';
|
|
||||||
import { FC } from 'react';
|
|
||||||
import Fetch from '@/utils/fetch';
|
|
||||||
import { connect, Dispatch, BasicInfoModelState, history } from 'umi';
|
|
||||||
|
|
||||||
interface PageProps {
|
|
||||||
basic: BasicInfoModelState;
|
|
||||||
dispatch: Dispatch;
|
|
||||||
}
|
|
||||||
|
|
||||||
const Page: FC<PageProps> = ({ basic, dispatch }) => {
|
|
||||||
const { certificateInfo } = basic;
|
|
||||||
const { step, result } = certificateInfo;
|
|
||||||
|
|
||||||
const handleClick = async () => {
|
|
||||||
const res = await Fetch('/openi/resource/openCertNow', {
|
|
||||||
method: 'post',
|
|
||||||
data: certificateInfo,
|
|
||||||
});
|
|
||||||
if (res.result === 'success') {
|
|
||||||
message.success('开通证书系统成功');
|
|
||||||
history.replace('/basic/login');
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
return (
|
|
||||||
<div
|
|
||||||
style={{ display: step === 4 ? 'block' : 'none' }}
|
|
||||||
className={styles.page}
|
|
||||||
>
|
|
||||||
<div className={styles.name}>
|
|
||||||
<b /> <span>发布配置</span>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div className={styles.title}>
|
|
||||||
<b /> <span>ECCDSA359颁发机构信息</span>
|
|
||||||
</div>
|
|
||||||
<div className={styles.row}>
|
|
||||||
<span>颁发证书主题</span>
|
|
||||||
<span>{result?.[0]}</span>
|
|
||||||
</div>
|
|
||||||
<div className={styles.row}>
|
|
||||||
<span>证书序列号</span>
|
|
||||||
<span>{result?.[1]}</span>
|
|
||||||
</div>
|
|
||||||
<div className={styles.row}>
|
|
||||||
<span>证书主题</span>
|
|
||||||
<span>{result?.[2]}</span>
|
|
||||||
</div>
|
|
||||||
<div className={styles.row}>
|
|
||||||
<span>起始时间</span>
|
|
||||||
<span>{result?.[3]}</span>
|
|
||||||
</div>
|
|
||||||
<div className={styles.row}>
|
|
||||||
<span>结束时间</span>
|
|
||||||
<span>{result?.[4]}</span>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div className={styles.title}>
|
|
||||||
<b /> <span>ECCDSA281颁发机构信息</span>
|
|
||||||
</div>
|
|
||||||
<div className={styles.row}>
|
|
||||||
<span>颁发证书主题</span>
|
|
||||||
<span>{result?.[5]}</span>
|
|
||||||
</div>
|
|
||||||
<div className={styles.row}>
|
|
||||||
<span>证书序列号</span>
|
|
||||||
<span>{result?.[6]}</span>
|
|
||||||
</div>
|
|
||||||
<div className={styles.row}>
|
|
||||||
<span>证书主题</span>
|
|
||||||
<span>{result?.[7]}</span>
|
|
||||||
</div>
|
|
||||||
<div className={styles.row}>
|
|
||||||
<span>起始时间</span>
|
|
||||||
<span>{result?.[8]}</span>
|
|
||||||
</div>
|
|
||||||
<div className={styles.row}>
|
|
||||||
<span>结束时间</span>
|
|
||||||
<span>{result?.[9]}</span>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<Row justify="end">
|
|
||||||
<Button
|
|
||||||
onClick={() => {
|
|
||||||
dispatch({
|
|
||||||
type: 'basic/setCertificateInfo',
|
|
||||||
payload: { step: 3 },
|
|
||||||
});
|
|
||||||
}}
|
|
||||||
type="primary"
|
|
||||||
ghost
|
|
||||||
>
|
|
||||||
上一步
|
|
||||||
</Button>
|
|
||||||
<Button type="primary" ghost className="ml20" onClick={handleClick}>
|
|
||||||
确认
|
|
||||||
</Button>
|
|
||||||
</Row>
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
export default connect(({ basic }: { basic: BasicInfoModelState }) => ({
|
|
||||||
basic,
|
|
||||||
}))(Page);
|
|
@ -1,4 +0,0 @@
|
|||||||
.page {
|
|
||||||
background-color: #fff;
|
|
||||||
margin-top: 20px;
|
|
||||||
}
|
|
@ -1,18 +0,0 @@
|
|||||||
import styles from './index.less';
|
|
||||||
import { FC } from 'react';
|
|
||||||
import Step1 from './Step1';
|
|
||||||
import Step2 from './Step2';
|
|
||||||
import Step3 from './Step3';
|
|
||||||
import Step4 from './Step4';
|
|
||||||
|
|
||||||
const Page: FC<{}> = () => {
|
|
||||||
return (
|
|
||||||
<div className={styles.page}>
|
|
||||||
<Step1 />
|
|
||||||
<Step2 />
|
|
||||||
<Step3 />
|
|
||||||
<Step4 />
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
export default Page;
|
|
After Width: | Height: | Size: 9.9 MiB |
After Width: | Height: | Size: 706 KiB |
@ -0,0 +1,211 @@
|
|||||||
|
.page {
|
||||||
|
height: 100vh;
|
||||||
|
background: url('./img/bg.png') no-repeat center center;
|
||||||
|
background-size: cover;
|
||||||
|
overflow: hidden;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
|
||||||
|
.red {
|
||||||
|
color: #ff3f41;
|
||||||
|
}
|
||||||
|
|
||||||
|
.box {
|
||||||
|
width: 902px;
|
||||||
|
height: 611px;
|
||||||
|
background: #ffffff;
|
||||||
|
border-radius: 20px;
|
||||||
|
display: flex;
|
||||||
|
background: url('./img/c.png') no-repeat center center;
|
||||||
|
background-size: cover;
|
||||||
|
|
||||||
|
.one {
|
||||||
|
width: 100%;
|
||||||
|
height: 470px;
|
||||||
|
margin-top: 130px;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
> div {
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: bold;
|
||||||
|
color: #ffffff;
|
||||||
|
margin-top: 50px;
|
||||||
|
padding-right: 110px;
|
||||||
|
}
|
||||||
|
|
||||||
|
aside {
|
||||||
|
display: flex;
|
||||||
|
margin-top: 50px;
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: bold;
|
||||||
|
color: #ffffff;
|
||||||
|
|
||||||
|
ul {
|
||||||
|
padding-left: 15px;
|
||||||
|
|
||||||
|
li {
|
||||||
|
list-style: none;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
cursor: pointer;
|
||||||
|
|
||||||
|
b {
|
||||||
|
display: inline-block;
|
||||||
|
width: 18px;
|
||||||
|
height: 18px;
|
||||||
|
background: #376042;
|
||||||
|
border: 2px solid #2fffdb;
|
||||||
|
border-radius: 50%;
|
||||||
|
margin-right: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.a {
|
||||||
|
position: relative;
|
||||||
|
|
||||||
|
&::after {
|
||||||
|
content: '';
|
||||||
|
width: 10px;
|
||||||
|
height: 10px;
|
||||||
|
position: absolute;
|
||||||
|
background-color: #2fffdb;
|
||||||
|
border-radius: 50%;
|
||||||
|
right: 2px;
|
||||||
|
top: 2px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
button {
|
||||||
|
width: 208px;
|
||||||
|
height: 42px;
|
||||||
|
background: rgba(22, 93, 255, 0.5);
|
||||||
|
border-radius: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
> b {
|
||||||
|
color: #fff;
|
||||||
|
margin-top: 76px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.two {
|
||||||
|
width: 100%;
|
||||||
|
height: 470px;
|
||||||
|
margin-top: 130px;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
> span {
|
||||||
|
font-size: 22px;
|
||||||
|
font-weight: bold;
|
||||||
|
color: #ffffff;
|
||||||
|
margin-top: 38px;
|
||||||
|
}
|
||||||
|
|
||||||
|
> div {
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: bold;
|
||||||
|
color: #ffffff;
|
||||||
|
margin-top: 52px;
|
||||||
|
}
|
||||||
|
|
||||||
|
input {
|
||||||
|
width: 208px;
|
||||||
|
height: 40px;
|
||||||
|
border-radius: 4px;
|
||||||
|
border: 2px solid #2fffdb;
|
||||||
|
margin-top: 30px;
|
||||||
|
background-color: transparent;
|
||||||
|
color: #2fffdb;
|
||||||
|
}
|
||||||
|
|
||||||
|
button {
|
||||||
|
width: 208px;
|
||||||
|
height: 42px;
|
||||||
|
border-radius: 4px;
|
||||||
|
margin-top: 70px;
|
||||||
|
background: rgba(22, 93, 255, 0.5);
|
||||||
|
}
|
||||||
|
|
||||||
|
aside {
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: bold;
|
||||||
|
color: #ffffff;
|
||||||
|
margin-top: 66px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.three {
|
||||||
|
width: 100%;
|
||||||
|
height: 470px;
|
||||||
|
margin-top: 130px;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
> span {
|
||||||
|
font-size: 22px;
|
||||||
|
font-weight: bold;
|
||||||
|
color: #ffffff;
|
||||||
|
margin-top: 38px;
|
||||||
|
}
|
||||||
|
|
||||||
|
> div {
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: bold;
|
||||||
|
color: #ffffff;
|
||||||
|
margin-top: 52px;
|
||||||
|
}
|
||||||
|
|
||||||
|
p {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
margin-top: 10px;
|
||||||
|
|
||||||
|
input {
|
||||||
|
width: 160px;
|
||||||
|
height: 40px;
|
||||||
|
border-radius: 4px;
|
||||||
|
border: 2px solid #2fffdb;
|
||||||
|
background-color: transparent;
|
||||||
|
color: #2fffdb;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn {
|
||||||
|
width: 40px;
|
||||||
|
height: 40px;
|
||||||
|
background: #2fffdb;
|
||||||
|
border-radius: 4px;
|
||||||
|
border: 2px solid #2fffdb;
|
||||||
|
color: #10291d;
|
||||||
|
margin-left: 10px;
|
||||||
|
line-height: 38px;
|
||||||
|
text-align: center;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
> button {
|
||||||
|
width: 208px;
|
||||||
|
height: 42px;
|
||||||
|
border-radius: 4px;
|
||||||
|
margin-top: 70px;
|
||||||
|
background: rgba(22, 93, 255, 0.5);
|
||||||
|
}
|
||||||
|
|
||||||
|
aside {
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: bold;
|
||||||
|
color: #ffffff;
|
||||||
|
margin-top: 66px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in new issue