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