新的主页

还有几个链接问题
This commit is contained in:
2020-02-15 21:04:26 +08:00
parent b946d6eeed
commit 314ad7653e
63 changed files with 6227 additions and 289 deletions
+47
View File
@@ -0,0 +1,47 @@
import React from 'react';
import { Button } from 'antd';
import QueueAnim from 'rc-queue-anim';
import Texty from 'rc-texty';
import 'rc-texty/assets/index.css';
class Banner extends React.PureComponent {
render() {
const { ...currentProps } = this.props;
const { dataSource } = currentProps;
delete currentProps.dataSource;
delete currentProps.isMobile;
const children = dataSource.textWrapper.children.map((item) => {
const { name, texty, ...$item } = item;
if (name.match('button')) {
return (
<Button type="primary" key={name} {...$item}>
{item.children}
</Button>
);
}
return (
<div key={name} {...$item}>
{texty ? (
<Texty type="mask-bottom">{item.children}</Texty>
) : (
item.children
)}
</div>
);
});
return (
<div {...currentProps} {...dataSource.wrapper}>
<QueueAnim
key="QueueAnim"
type={['bottom', 'top']}
delay={200}
{...dataSource.textWrapper}
>
{children}
</QueueAnim>
</div>
);
}
}
export default Banner;
+40
View File
@@ -0,0 +1,40 @@
import React from 'react';
import OverPack from 'rc-scroll-anim/lib/ScrollOverPack';
import QueueAnim from 'rc-queue-anim';
import TweenOne from 'rc-tween-one';
import { Button } from 'antd';
import { getChildrenToRender } from './utils';
class Content11 extends React.PureComponent {
render() {
const { ...props } = this.props;
const { dataSource } = props;
delete props.dataSource;
delete props.isMobile;
return (
<OverPack {...props} {...dataSource.OverPack}>
<QueueAnim
type="bottom"
leaveReverse
key="page"
delay={[0, 100]}
{...dataSource.titleWrapper}
>
{dataSource.titleWrapper.children.map(getChildrenToRender)}
</QueueAnim>
<TweenOne
key="button"
style={{ textAlign: 'center' }}
{...dataSource.button}
animation={{ y: 30, opacity: 0, type: 'from', delay: 300 }}
>
<Button {...dataSource.button.children.a}>
{dataSource.button.children.a.children}
</Button>
</TweenOne>
</OverPack>
);
}
}
export default Content11;
+94
View File
@@ -0,0 +1,94 @@
import React from 'react';
import QueueAnim from 'rc-queue-anim';
import TweenOne from 'rc-tween-one';
import { Row, Col } from 'antd';
import OverPack from 'rc-scroll-anim/lib/ScrollOverPack';
import { getChildrenToRender } from './utils';
class Content3 extends React.PureComponent {
getDelay = (e, b) => (e % b) * 100 + Math.floor(e / b) * 100 + b * 100;
render() {
const { ...props } = this.props;
const { dataSource, isMobile } = props;
delete props.dataSource;
delete props.isMobile;
let clearFloatNum = 0;
const children = dataSource.block.children.map((item, i) => {
const childObj = item.children;
const delay = isMobile ? i * 50 : this.getDelay(i, 24 / item.md);
const liAnim = {
opacity: 0,
type: 'from',
ease: 'easeOutQuad',
delay,
};
const childrenAnim = { ...liAnim, x: '+=10', delay: delay + 100 };
clearFloatNum += item.md;
clearFloatNum = clearFloatNum > 24 ? 0 : clearFloatNum;
return (
<TweenOne
component={Col}
animation={liAnim}
key={item.name}
{...item}
componentProps={{ md: item.md, xs: item.xs }}
className={
!clearFloatNum
? `${item.className || ''} clear-both`.trim()
: item.className
}
>
<TweenOne
animation={{
x: '-=10',
opacity: 0,
type: 'from',
ease: 'easeOutQuad',
}}
key="img"
{...childObj.icon}
>
<img src={childObj.icon.children} width="100%" alt="img" />
</TweenOne>
<div {...childObj.textWrapper}>
<TweenOne
key="h2"
animation={childrenAnim}
component="h2"
{...childObj.title}
>
{childObj.title.children}
</TweenOne>
<TweenOne
key="p"
animation={{ ...childrenAnim, delay: delay + 200 }}
component="div"
{...childObj.content}
>
{childObj.content.children}
</TweenOne>
</div>
</TweenOne>
);
});
return (
<div {...props} {...dataSource.wrapper}>
<div {...dataSource.page}>
<div {...dataSource.titleWrapper}>
{dataSource.titleWrapper.children.map(getChildrenToRender)}
</div>
<OverPack {...dataSource.OverPack}>
<QueueAnim key="u" type="bottom">
<Row key="row" {...dataSource.block}>
{children}
</Row>
</QueueAnim>
</OverPack>
</div>
</div>
);
}
}
export default Content3;
+61
View File
@@ -0,0 +1,61 @@
import React from 'react';
import { Row, Col } from 'antd';
import { TweenOneGroup } from 'rc-tween-one';
import OverPack from 'rc-scroll-anim/lib/ScrollOverPack';
import { getChildrenToRender } from './utils';
class Content5 extends React.PureComponent {
getChildrenToRender = (data) =>
data.map((item) => {
return (
<Col key={item.name} {...item}>
<div {...item.children.wrapper}>
<span {...item.children.img}>
<img src={item.children.img.children} height="100%" alt="img" />
</span>
<p {...item.children.content}>{item.children.content.children}</p>
</div>
</Col>
);
});
render() {
const { ...props } = this.props;
const { dataSource } = props;
delete props.dataSource;
delete props.isMobile;
const childrenToRender = this.getChildrenToRender(
dataSource.block.children
);
return (
<div {...props} {...dataSource.wrapper}>
<div {...dataSource.page}>
<div key="title" {...dataSource.titleWrapper}>
{dataSource.titleWrapper.children.map(getChildrenToRender)}
</div>
<OverPack
className={`content-template ${props.className}`}
{...dataSource.OverPack}
>
<TweenOneGroup
component={Row}
key="ul"
enter={{
y: '+=30',
opacity: 0,
type: 'from',
ease: 'easeInOutQuad',
}}
leave={{ y: '+=30', opacity: 0, ease: 'easeInOutQuad' }}
{...dataSource.block}
>
{childrenToRender}
</TweenOneGroup>
</OverPack>
</div>
</div>
);
}
}
export default Content5;
+79
View File
@@ -0,0 +1,79 @@
import React from 'react';
import OverPack from 'rc-scroll-anim/lib/ScrollOverPack';
import QueueAnim from 'rc-queue-anim';
import { getChildrenToRender } from './utils';
class Content9 extends React.PureComponent {
getBlockChildren = (block, i) => {
const { isMobile } = this.props;
const item = block.children;
const textWrapper = (
<QueueAnim
key="text"
leaveReverse
delay={isMobile ? [0, 100] : 0}
{...item.textWrapper}
>
<div key="time" {...item.time}>
{item.time.children}
</div>
<h2 key="title" {...item.title}>
<i {...item.icon}>
<img src={item.icon.children} alt="img" />
</i>
{item.title.children}
</h2>
<div key="p" {...item.content}>
{item.content.children}
</div>
</QueueAnim>
);
return (
<OverPack key={i.toString()} {...block}>
{isMobile && textWrapper}
<QueueAnim
className="image-wrapper"
key="image"
type={isMobile ? 'right' : 'bottom'}
leaveReverse
delay={isMobile ? [100, 0] : 0}
{...item.imgWrapper}
>
<div key="image" {...item.img}>
<img src={item.img.children} alt="img" />
</div>
<div key="name" className="name-wrapper">
<div key="name" {...item.name}>
{item.name.children}
</div>
<div key="post" {...item.post}>
{item.post.children}
</div>
</div>
</QueueAnim>
{!isMobile && textWrapper}
</OverPack>
);
};
render() {
const { ...props } = this.props;
const { dataSource } = props;
delete props.dataSource;
delete props.isMobile;
const children = dataSource.block.children.map(this.getBlockChildren);
return (
<div {...props} {...dataSource.wrapper}>
<div {...dataSource.page}>
<div {...dataSource.titleWrapper}>
{dataSource.titleWrapper.children.map(getChildrenToRender)}
</div>
<div {...dataSource.block}>{children}</div>
</div>
</div>
);
}
}
export default Content9;
+70
View File
@@ -0,0 +1,70 @@
import React from 'react';
import QueueAnim from 'rc-queue-anim';
import TweenOne from 'rc-tween-one';
import { Row, Col } from 'antd';
import OverPack from 'rc-scroll-anim/lib/ScrollOverPack';
function Content1(props) {
const { ...tagProps } = props;
const { dataSource, isMobile } = tagProps;
delete tagProps.dataSource;
delete tagProps.isMobile;
const animType = {
queue: isMobile ? 'bottom' : 'right',
one: isMobile
? {
scaleY: '+=0.3',
opacity: 0,
type: 'from',
ease: 'easeOutQuad',
}
: {
x: '-=30',
opacity: 0,
type: 'from',
ease: 'easeOutQuad',
},
};
return (
<div {...tagProps} {...dataSource.wrapper}>
<OverPack {...dataSource.OverPack} component={Row}>
<TweenOne
key="img"
animation={animType.one}
resetStyle
{...dataSource.imgWrapper}
component={Col}
componentProps={{
md: dataSource.imgWrapper.md,
xs: dataSource.imgWrapper.xs,
}}
>
<span {...dataSource.img}>
<img src={dataSource.img.children} width="100%" alt="img" />
</span>
</TweenOne>
<QueueAnim
key="text"
type={animType.queue}
leaveReverse
ease={['easeOutQuad', 'easeInQuad']}
{...dataSource.textWrapper}
component={Col}
componentProps={{
md: dataSource.textWrapper.md,
xs: dataSource.textWrapper.xs,
}}
>
<h2 key="h1" {...dataSource.title}>
{dataSource.title.children}
</h2>
<div key="p" {...dataSource.content}>
{dataSource.content.children}
</div>
</QueueAnim>
</OverPack>
</div>
);
}
export default Content1;
+74
View File
@@ -0,0 +1,74 @@
import React from 'react';
import QueueAnim from 'rc-queue-anim';
import TweenOne from 'rc-tween-one';
import { Row, Col } from 'antd';
import OverPack from 'rc-scroll-anim/lib/ScrollOverPack';
function Content2(props) {
const { ...tagProps } = props;
const { dataSource, isMobile } = tagProps;
delete tagProps.dataSource;
delete tagProps.isMobile;
const animType = {
queue: isMobile ? 'bottom' : 'left',
one: isMobile
? {
scaleY: '+=0.3',
opacity: 0,
type: 'from',
ease: 'easeOutQuad',
}
: {
x: '+=30',
opacity: 0,
type: 'from',
ease: 'easeOutQuad',
},
};
const img = (
<TweenOne
key="img"
animation={animType.one}
resetStyle
{...dataSource.imgWrapper}
component={Col}
componentProps={{
md: dataSource.imgWrapper.md,
xs: dataSource.imgWrapper.xs,
}}
>
<span {...dataSource.img}>
<img src={dataSource.img.children} width="100%" alt="img" />
</span>
</TweenOne>
);
return (
<div {...tagProps} {...dataSource.wrapper}>
<OverPack {...dataSource.OverPack} component={Row}>
{isMobile && img}
<QueueAnim
type={animType.queue}
key="text"
leaveReverse
ease={['easeOutCubic', 'easeInCubic']}
{...dataSource.textWrapper}
component={Col}
componentProps={{
md: dataSource.textWrapper.md,
xs: dataSource.textWrapper.xs,
}}
>
<h2 key="h1" {...dataSource.title}>
{dataSource.title.children}
</h2>
<div key="p" {...dataSource.content}>
{dataSource.content.children}
</div>
</QueueAnim>
{!isMobile && img}
</OverPack>
</div>
);
}
export default Content2;
+156
View File
@@ -0,0 +1,156 @@
import React from 'react';
import OverPack from 'rc-scroll-anim/lib/ScrollOverPack';
import QueueAnim from 'rc-queue-anim';
import { Carousel as AntCarousel, Row, Col } from 'antd';
import TweenOne from 'rc-tween-one';
import Children from 'rc-tween-one/lib/plugin/ChildrenPlugin';
TweenOne.plugins.push(Children);
class Feature6 extends React.PureComponent {
constructor(props) {
super(props);
this.carouselRef = React.createRef();
this.state = {
current: 0,
};
}
onTitleClick = (_, i) => {
const carouselRef = this.carouselRef.current.childRefs.carousel;
carouselRef.goTo(i);
};
onBeforeChange = (_, newIndex) => {
this.setState({
current: newIndex,
});
};
getChildrenToRender = (dataSource) => {
const { current } = this.state;
const { Carousel } = dataSource;
const {
titleWrapper,
children: childWrapper,
wrapper,
...carouselProps
} = Carousel;
const {
barWrapper,
title: titleChild,
...titleWrapperProps
} = titleWrapper;
const titleToRender = [];
const childrenToRender = childWrapper.map((item, ii) => {
const { title, children, ...itemProps } = item;
titleToRender.push(
<div
{...title}
key={ii.toString()}
onClick={(e) => {
this.onTitleClick(e, ii);
}}
className={
ii === current ? `${title.className || ''} active` : title.className
}
>
{title.children}
</div>
);
const childrenItem = children.map(($item, i) => {
const { number, children: child, ...childProps } = $item;
const numberChild = number.children.replace(/[^0-9.-]/g, '');
const { unit, toText, ...numberProps } = number;
return (
<Col {...childProps} key={i.toString()}>
<TweenOne
{...numberProps}
animation={{
Children: {
value: parseFloat(numberChild),
floatLength:
parseFloat(numberChild) -
Math.floor(parseFloat(numberChild)) >
0
? 2
: 0,
formatMoney: true,
},
duration: 1000,
delay: 300,
ease: 'easeInOutCirc',
}}
component="span"
>
0
</TweenOne>
{unit && <span {...unit}>{unit.children}</span>}
<p {...child}>{child.children}</p>
</Col>
);
});
return (
<QueueAnim
type="bottom"
component={Row}
{...itemProps}
key={ii.toString()}
>
{childrenItem}
</QueueAnim>
);
});
const width = 100 / childrenToRender.length;
return (
<QueueAnim
key="queue"
leaveReverse
type="bottom"
delay={[0, 100]}
{...wrapper}
ref={this.carouselRef}
>
<div {...titleWrapperProps} key="title">
<div {...titleChild}>
{titleToRender}
<div
{...barWrapper}
style={{
width: `${width}%`,
left: `${width * current}%`,
}}
>
<em {...barWrapper.children} />
</div>
</div>
</div>
<AntCarousel
{...carouselProps}
key="carousel"
infinite={false}
beforeChange={this.onBeforeChange}
>
{childrenToRender}
</AntCarousel>
</QueueAnim>
);
};
render() {
const { dataSource, isMobile, ...props } = this.props;
return (
<div {...props} {...dataSource.wrapper}>
<div>
<OverPack {...dataSource.OverPack}>
{this.getChildrenToRender(dataSource)}
</OverPack>
</div>
</div>
);
}
}
export default Feature6;
+139
View File
@@ -0,0 +1,139 @@
import React from 'react';
import OverPack from 'rc-scroll-anim/lib/ScrollOverPack';
import QueueAnim from 'rc-queue-anim';
import { Carousel as AntCarousel, Row, Col } from 'antd';
import { getChildrenToRender } from './utils';
class Feature8 extends React.PureComponent {
constructor(props) {
super(props);
this.carouselRef = React.createRef();
this.state = {
current: 0,
};
}
onTitleClick = (_, i) => {
const carouselRef = this.carouselRef.current.childRefs.carousel;
carouselRef.goTo(i);
};
onBeforeChange = (_, newIndex) => {
this.setState({
current: newIndex,
});
};
getChildrenToRender = (dataSource) => {
const { current } = this.state;
const { Carousel, childWrapper: buttonWrapper } = dataSource;
const { children: carouselChild, wrapper, ...carouselProps } = Carousel;
const {
titleWrapper,
children: childWrapper,
...childrenProps
} = carouselChild;
const {
barWrapper,
title: titleChild,
...titleWrapperProps
} = titleWrapper;
const titleToRender = [];
const childrenToRender = childWrapper.map((item, ii) => {
const { title, children: childRow, ...rowProps } = item;
if (childWrapper.length > 1) {
titleToRender.push(
<div
{...title}
key={ii.toString()}
onClick={(e) => {
this.onTitleClick(e, ii);
}}
className={
ii === current
? `${title.className || ''} active`
: title.className
}
>
{title.children}
</div>
);
}
const childrenItem = childRow.map(($item, i) => {
const { children: colChild, arrow, ...colProps } = $item;
const { ...childProps } = colChild;
return (
<Col {...colProps} key={i.toString()}>
<div {...childProps}>
{colChild.children.map(getChildrenToRender)}
</div>
{arrow && (
<div {...arrow}>
<img src={arrow.children} alt="img" />
</div>
)}
</Col>
);
});
return (
<div key={ii.toString()}>
<QueueAnim
component={Row}
type="bottom"
componentProps={{ type: 'flex' }}
{...rowProps}
>
{childrenItem}
</QueueAnim>
</div>
);
});
return (
<QueueAnim
key="queue"
type="bottom"
ref={this.carouselRef}
{...childrenProps}
>
{childWrapper.length > 1 && (
<div {...titleWrapperProps} key="title">
<div {...titleChild}>{titleToRender}</div>
</div>
)}
<AntCarousel
key="carousel"
{...carouselProps}
infinite={false}
beforeChange={this.onBeforeChange}
>
{childrenToRender}
</AntCarousel>
<div key="button" {...buttonWrapper}>
{buttonWrapper.children.map(getChildrenToRender)}
</div>
</QueueAnim>
);
};
render() {
const { dataSource, isMobile, ...props } = this.props;
const { titleWrapper } = dataSource;
return (
<div {...props} {...dataSource.wrapper}>
<div {...dataSource.page}>
<div {...dataSource.titleWrapper}>
{titleWrapper.children.map(getChildrenToRender)}
</div>
<OverPack {...dataSource.OverPack}>
{this.getChildrenToRender(dataSource)}
</OverPack>
</div>
</div>
);
}
}
export default Feature8;
+27
View File
@@ -0,0 +1,27 @@
import React from 'react';
import TweenOne from 'rc-tween-one';
import OverPack from 'rc-scroll-anim/lib/ScrollOverPack';
class Footer extends React.PureComponent {
render() {
const { ...props } = this.props;
const { dataSource } = props;
delete props.dataSource;
delete props.isMobile;
return (
<div {...props} {...dataSource.wrapper}>
<OverPack {...dataSource.OverPack}>
<TweenOne
animation={{ y: '+=30', opacity: 0, type: 'from' }}
key="footer"
{...dataSource.copyright}
>
{dataSource.copyright.children}
</TweenOne>
</OverPack>
</div>
);
}
}
export default Footer;
+136
View File
@@ -0,0 +1,136 @@
import React from 'react';
import TweenOne from 'rc-tween-one';
import { Menu } from 'antd';
import { getChildrenToRender } from './utils';
const { Item, SubMenu } = Menu;
class Header3 extends React.Component {
constructor(props) {
super(props);
this.state = {
phoneOpen: undefined,
};
}
phoneClick = () => {
const phoneOpen = !this.state.phoneOpen;
this.setState({
phoneOpen,
});
};
render() {
const { dataSource, isMobile, ...props } = this.props;
const { phoneOpen } = this.state;
const navData = dataSource.Menu.children;
const navChildren = navData.map((item) => {
const { children: a, subItem, ...itemProps } = item;
if (subItem) {
return (
<SubMenu
key={item.name}
{...itemProps}
title={
<div
{...a}
className={`header3-item-block ${a.className}`.trim()}
>
{a.children.map(getChildrenToRender)}
</div>
}
popupClassName="header3-item-child"
>
{subItem.map(($item, ii) => {
const { children: childItem } = $item;
const child = childItem.href ? (
<a {...childItem}>
{childItem.children.map(getChildrenToRender)}
</a>
) : (
<div {...childItem}>
{childItem.children.map(getChildrenToRender)}
</div>
);
return (
<Item key={$item.name || ii.toString()} {...$item}>
{child}
</Item>
);
})}
</SubMenu>
);
}
return (
<Item key={item.name} {...itemProps}>
<a {...a} className={`header3-item-block ${a.className}`.trim()}>
{a.children.map(getChildrenToRender)}
</a>
</Item>
);
});
const moment = phoneOpen === undefined ? 300 : null;
return (
<TweenOne
component="header"
animation={{ opacity: 0, type: 'from' }}
{...dataSource.wrapper}
{...props}
>
<div
{...dataSource.page}
className={`${dataSource.page.className}${phoneOpen ? ' open' : ''}`}
>
<TweenOne
animation={{ x: -30, type: 'from', ease: 'easeOutQuad' }}
{...dataSource.logo}
>
<img width="100%" src={dataSource.logo.children} alt="img" />
</TweenOne>
{isMobile && (
<div
{...dataSource.mobileMenu}
onClick={() => {
this.phoneClick();
}}
>
<em />
<em />
<em />
</div>
)}
<TweenOne
{...dataSource.Menu}
animation={
isMobile
? {
x: 0,
height: 0,
duration: 300,
onComplete: (e) => {
if (this.state.phoneOpen) {
e.target.style.height = 'auto';
}
},
ease: 'easeInOutQuad',
}
: null
}
moment={moment}
reverse={!!phoneOpen}
>
<Menu
mode={isMobile ? 'inline' : 'horizontal'}
defaultSelectedKeys={['sub0']}
theme="light"
>
{navChildren}
</Menu>
</TweenOne>
</div>
</TweenOne>
);
}
}
export default Header3;
+37
View File
@@ -0,0 +1,37 @@
import React from 'react';
import Link from 'rc-scroll-anim/lib/ScrollLink';
export default function Point(props) {
const { data, size, position, type, stroke } = props;
const children = data.map((item) => {
if (item.match('nav') || item.match('footer')) {
return null;
}
const className = `point ${type} ${stroke} ${size}`.trim();
return (
<Link
key={item}
className={className}
to={item}
toHash={false}
/>
);
}).filter((item) => item);
const wrapperClass = `point-wrapper ${position} ${size}`.trim();
return (
<div
className={wrapperClass}
>
<div>
{children}
</div>
</div>
);
}
Point.defaultProps = {
size: '',
position: '',
type: '',
stroke: '',
};
+1640 -13
View File
File diff suppressed because it is too large Load Diff
+105
View File
@@ -0,0 +1,105 @@
/* eslint no-undef: 0 */
/* eslint arrow-parens: 0 */
import React from 'react';
import { enquireScreen } from 'enquire-js';
import Content11 from './Content11';
import Feature1 from './Feature1';
import Nav3 from './Nav3';
import {
Nav30DataSource,
Content110DataSource,
Feature13DataSource,
Feature11DataSource,
Feature12DataSource,
Footer00DataSource,
} from './data.source';
import './less/antMotionStyle.less';
import Footer0 from './Footer0';
let isMobile;
enquireScreen((b) => {
isMobile = b;
});
const { location } = window;
export default class Page2 extends React.Component {
constructor(props) {
super(props);
this.state = {
isMobile,
show: !location.port, // 如果不是 dva 2.0 请删除
};
}
componentDidMount() {
// 适配手机屏幕;
enquireScreen((b) => {
this.setState({ isMobile: !!b });
});
// dva 2.0 样式在组件渲染之后动态加载,导致滚动组件不生效;线上不影响;
/* 如果不是 dva 2.0 请删除 start */
if (location.port) {
// 样式 build 时间在 200-300ms 之间;
setTimeout(() => {
this.setState({
show: true,
});
}, 500);
}
/* 如果不是 dva 2.0 请删除 end */
}
render() {
const children = [
<Nav3
id="Nav3_0"
key="Nav3_0"
dataSource={Nav30DataSource}
isMobile={this.state.isMobile}
/>,
<Content11
id="Content11_0"
key="Content11_0"
dataSource={Content110DataSource}
isMobile={this.state.isMobile}
/>,
<Feature1
id="Feature1_0"
key="Feature1_0"
dataSource={Feature13DataSource}
isMobile={this.state.isMobile}
/>,
<Feature1
id="Feature1_1"
key="Feature1_1"
dataSource={Feature11DataSource}
isMobile={this.state.isMobile}
/>,
<Feature1
id="Feature1_2"
key="Feature1_2"
dataSource={Feature12DataSource}
isMobile={this.state.isMobile}
/>,
<Footer0
id="Footer0_0"
key="Footer0_0"
dataSource={Footer00DataSource}
isMobile={this.state.isMobile}
/>,
];
return (
<div
className="templates-wrapper"
ref={(d) => {
this.dom = d;
}}
>
{/* 如果不是 dva 2.0 替换成 {children} start */}
{this.state.show && children}
{/* 如果不是 dva 2.0 替换成 {children} end */}
</div>
);
}
}
-67
View File
@@ -1,67 +0,0 @@
/* eslint no-undef: 0 */
/* eslint arrow-parens: 0 */
import React from 'react';
import { enquireScreen } from 'enquire-js';
import Teams1 from './Teams1';
import { Teams10DataSource } from './data.source';
import './less/antMotionStyle.less';
let isMobile;
enquireScreen((b) => {
isMobile = b;
});
const { location } = window;
export default class Home extends React.Component {
constructor(props) {
super(props);
this.state = {
isMobile,
show: !location.port, // 如果不是 dva 2.0 请删除
};
}
componentDidMount() {
// 适配手机屏幕;
enquireScreen((b) => {
this.setState({ isMobile: !!b });
});
// dva 2.0 样式在组件渲染之后动态加载,导致滚动组件不生效;线上不影响;
/* 如果不是 dva 2.0 请删除 start */
if (location.port) {
// 样式 build 时间在 200-300ms 之间;
setTimeout(() => {
this.setState({
show: true,
});
}, 500);
}
/* 如果不是 dva 2.0 请删除 end */
}
render() {
const children = [
<Teams1
id="Teams1_0"
key="Teams1_0"
dataSource={Teams10DataSource}
isMobile={this.state.isMobile}
/>,
];
return (
<div
className="templates-wrapper"
ref={(d) => {
this.dom = d;
}}
>
{/* 如果不是 dva 2.0 替换成 {children} start */}
{this.state.show && children}
{/* 如果不是 dva 2.0 替换成 {children} end */}
</div>
);
}
}
+14 -2
View File
@@ -1,5 +1,17 @@
@import './common.less';
@import './custom.less';
@import './point.less';
@import './content.less';
@import './teams1.less';
@import './edit.less';
@import './nav3.less';
@import './banner3.less';
@import './feature2.less';
@import './feature1.less';
@import './content3.less';
@import './feature8.less';
@import './feature6.less';
@import './content5.less';
@import './content9.less';
@import './footer0.less';
@import './edit.less';
@import'./teams1.less';
@import './content11.less';
+91
View File
@@ -0,0 +1,91 @@
@banner3: banner3;
.@{banner3} {
// 如果在第一屏且导航位置为 relative, 一屏为 height: calc(~"100vh - 64px");
width: 100%;
height: 100vh;
position: relative;
text-align: center;
border-color: #666;
background-image: url("https://gw.alipayobjects.com/zos/rmsportal/xTPkCNNLOnTEbGgVZOpE.jpg");
background-size: cover;
background-attachment: fixed;
background-position: center;
& &-text-wrapper {
display: inline-block;
position: absolute;
top: 0;
bottom: 0;
margin: auto;
left: 0;
right: 0;
color: @template-text-color-light;
max-width: 845px;
height: 500px;
width: 80%;
font-size: 20px;
line-height: 28px;
font-weight: 400;
>.queue-anim-leaving {
position: relative !important;
}
}
& &-slogan {
font-size: 68px;
line-height: 80px;
text-indent: 2px;
font-weight: 600;
margin: 26px auto 38px;
overflow: hidden;
}
& &-name-en {
display: block;
font-size: 14px;
line-height: 32px;
font-weight: 400;
}
& &-name {
font-size: 24px;
overflow: hidden;
opacity: 0.8;
}
& &-button {
display: block;
margin: 72px auto 0;
background: rgb(3, 67, 101);
background: -moz-linear-gradient(left, rgba(3, 67, 101, 1) 0%, rgba(0, 27, 51, 1) 100%);
background: linear-gradient(to right, rgba(3, 67, 101, 1) 0%, rgba(0, 27, 51, 1) 100%);
box-shadow: 0 8px 16px #0a52ab;
border: none;
transition: background .45s @ease-out;
width: 132px;
line-height: 42px;
height: 42px;
border-radius: 42px;
}
& &-time {
font-size: 14px;
line-height: 24px;
margin-top: 24px;
}
}
@media screen and (max-width: 767px) {
.@{banner3} {
background-attachment: inherit;
& &-text-wrapper {
width: 90%;
height: 50%;
}
& &-name-en {
font-size: 12px;
}
& &-slogan {
font-size: 24px;
line-height: 1.5;
margin: 12px 0;
}
& &-name {
font-size: 14px;
}
}
}
+46
View File
@@ -0,0 +1,46 @@
@content11: content11;
.@{content11}-wrapper {
height: 480px;
background: url("https://gw.alipayobjects.com/zos/rmsportal/ZsWYzLOItgeaWDSsXdZd.svg") no-repeat bottom;
background-size: cover;
background-size: 100%;
margin: 0 auto;
overflow: hidden;
padding-top: 96px;
&.home-page-wrapper {
.title-wrapper {
margin-bottom: 32px;
}
}
.button {
box-shadow: 0 8px 16px #0554b7;
background: linear-gradient(to right, #05cbff, #1e5aff) !important;
height: 42px;
line-height: 42px;
font-size: 14px;
border: 0;
border-radius: 21px;
color: #fff;
width: 128px;
padding: 0 15px;
display: inline-block;
transition: transform .3s, box-shadow .3s;
&:hover {
transform: translateY(-4px);
box-shadow: 0 12px 20px #0554b7;
}
&:active {
transform: translateY(4px);
box-shadow: 0 4px 8px #0554b7;
}
}
.title-content {
line-height: 32px;
}
}
@media screen and (max-width: 767px) {
.@{content11}-wrapper {
padding-bottom: 0;
}
}
+52
View File
@@ -0,0 +1,52 @@
@content3: content3;
.@{content3}-wrapper {
min-height: 764px;
.@{content3} {
height: 100%;
overflow: hidden;
& .title-content {
text-align: center;
}
&-block-wrapper {
position: relative;
.@{content3}-block {
display: inline-block;
padding: 48px 24px;
vertical-align: top;
.@{content3}-icon {
display: inline-block;
width: 15%;
vertical-align: top;
}
.@{content3}-text {
width: 85%;
display: inline-block;
padding-left: 8%;
}
&.clear-both {
clear: both;
}
}
}
}
}
@media screen and (max-width: 767px) {
.@{content3}-wrapper {
min-height: 1080px;
.@{content3} {
&-block-wrapper {
margin: 20px auto;
height: auto;
.@{content3}-block {
.@{content3}-title {
font-size: 20px;
}
&.queue-anim-leaving {
position: relative !important;
}
}
}
}
}
}
+69
View File
@@ -0,0 +1,69 @@
@content5: content5;
.@{content5}-wrapper {
background-color: #fafafa;
min-height: 720px;
.@{content5} {
>p {
text-align: center;
}
&-img-wrapper {
margin: 0 auto;
left: 0;
right: 0;
.block {
margin-bottom: 24px;
.content5-block-content {
display: block;
background: #fff;
border-radius: 4px;
padding: 10px;
text-align: center;
position: relative;
overflow: hidden;
.page-pro();
border: none;
transition: box-shadow .3s @ease-out, transform .3s @ease-out;
& > span {
width: 100%;
height: 200px;
display: block;
background: @line-color;
padding: 0px;
}
& p {
width: 100%;
line-height: 30px;
}
&:hover {
& p {
bottom: 0;
}
}
}
}
}
}
}
@media screen and (max-width: 767px) {
.@{content5}-wrapper {
height: 2000px;
overflow: hidden;
.@{content5} {
ul {
li {
display: block;
width: 100%;
padding: 2%;
span {
height: 168px;
}
p {
position: relative;
bottom: 0;
}
}
}
}
}
}
+145
View File
@@ -0,0 +1,145 @@
@content9: content9;
@text-color: rgba(0, 0, 0, 0.85);
@text-color2: #697b8c;
.@{content9}-wrapper {
padding-bottom: 64px;
&.home-page-wrapper {
overflow: initial;
}
.@{content9} {
min-height: 800px;
padding: 64px 0 0;
}
.timeline {
position: relative;
&:before {
display: block;
content: '';
position: absolute;
left: 50%;
top: 0;
width: 0;
height: ~"calc(100% - 108px)";
margin: 34px 0;
border-left: 2px #ebedf0 dashed;
}
}
.block-wrapper {
color: @text-color;
display: flex;
position: relative;
margin-bottom: 70px;
min-height: 160px;
&:last-child {
margin-bottom: 0;
}
}
.image-wrapper,
.text-wrapper {
width: 50%;
}
.image-wrapper {
text-align: center;
.block-img,
.name-wrapper {
float: right;
clear: both;
width: 262px;
margin: auto;
}
.block-img {
height: 98px;
img {
height: 100%;
}
}
.name-wrapper {
margin: 16px 0 0;
.block-name {
font-size: 14px;
margin-bottom: 4px;
}
.block-post {
font-size: 12px;
color: @text-color2;
}
}
}
.text-wrapper {
padding-left: 40px;
.block-time {
font-size: 12px;
color: @text-color2;
line-height: 18px;
min-height: 18px;
}
.block-title {
margin: 8px 0 12px;
font-size: 14px;
position: relative;
min-height: 18px;
}
.block-icon {
position: absolute;
left: -40px;
transform: translateX(~"calc(-50% + 1px)");
}
.block-content {
width: 300px;
color: #314659;
font-size: 12px;
min-height: 18px;
}
}
}
@media screen and (max-width: 767px) {
.@{content9}-wrapper {
padding-bottom: 0;
.@{content9} {
padding: 64px 24px;
}
.timeline {
&:before {
left: 0;
height: 100%;
margin: 0;
}
}
.block-wrapper {
display: block;
min-height: 100px;
margin-bottom: 54px;
}
.image-wrapper,
.text-wrapper {
width: 100%;
}
.image-wrapper {
.block-img {
display: none;
}
.name-wrapper {
text-align: left;
float: left;
width: 100%;
padding-left: 40px;
margin: auto;
}
.block-name, .block-post {
display: inline-block;
}
.block-name {
margin-right: 8px;
}
}
.text-wrapper {
.block-content {
display: none;
}
.block-title {
font-size: 16px;
}
}
}
}
+299 -1
View File
@@ -1,5 +1,253 @@
#Content3_0 .ant-col > .content3-text > .k6bwga0pdy-editor_css {
display: flex;
align-items: flex-start;
opacity: 0.35;
border-top-color: rgba(150, 79, 79, 0);
border-right-color: rgba(134, 55, 55, 0);
border-bottom-color: rgba(134, 55, 55, 0);
border-left-color: rgba(211, 57, 57, 0);
}
#Content3_0 .ant-row > .ant-col > .k6bwkyqmmk8-editor_css {
background-color: rgba(202, 36, 36, 0);
background-image: url('https://zos.alipayobjects.com/rmsportal/gGlUMYGEIvjDOOw.jpg');
background-attachment: scroll;
background-blend-mode: normal;
background-position: 0% 0%;
background-repeat: repeat;
background-size: auto;
background-clip: padding-box;
}
#Content3_0 div > .ant-row > .k6bwib6y3rr-editor_css {
display: block;
font-size: 20px;
font-weight: 400;
color: rgb(42, 128, 202);
text-decoration: line-through;
background-color: rgba(195, 67, 67, 0);
background-image: url('https://zos.alipayobjects.com/rmsportal/gGlUMYGEIvjDOOw.jpg');
background-attachment: scroll;
background-blend-mode: normal;
background-position: 0% 0%;
background-repeat: repeat;
background-size: auto;
background-clip: padding-box;
border-top-style: dashed;
}
#Banner3_1 .banner3-text-wrapper > .ant-btn {
background-color: #cf2892;
background-image: linear-gradient(
0rad,
rgb(255, 0, 0) 10%,
rgb(255, 0, 0) 29.71153846153846%,
#da2626 45.4223076923077%,
white 100%
);
background-attachment: scroll;
background-blend-mode: normal;
background-position: 0% 0%;
background-repeat: repeat;
background-size: auto;
background-clip: padding-box;
}
#Banner3_1 .k6bxcwa6wb-editor_css {
box-shadow: 5px 5px 5px #108ee9;
}
#Banner3_1 .banner3-text-wrapper > .k6bx9bxsgw-editor_css {
background-clip: padding-box;
text-decoration: underline;
text-shadow: 5px 5px 5px rgba(0, 0, 0, 0.35);
}
#Banner3_1 .banner3-text-wrapper > .k6bx9qqmas-editor_css {
color: rgb(255, 0, 0);
margin: 100px 100px;
}
#Banner3_1 .banner3-text-wrapper > .k6bxcnb8hlg-editor_css {
font-family: Tahoma;
font-size: 23px;
font-weight: bold;
color: #e9e9e9;
background-color: rgb(251, 251, 251);
background-image: linear-gradient(
225deg,
#f04134 12.5%,
#00a854 25%,
#108ee9 37.5%,
#f5317f 50%,
#f56a00 62.5%,
#7265e6 75%,
#ffbf00 87.5%,
#00a2ae 99.54%,
#00a2ae 100%,
rgb(0, 27, 51) 100%,
black 100%,
black 100%,
black 100%,
black 100%,
black 100%,
black 100%,
black 100%,
black 100%,
#f04134 100%,
#108ee9 100%,
black 100%
);
background-blend-mode: normal;
background-clip: padding-box;
box-shadow: 0px 8px 16px rgb(171, 21, 10);
}
#Content3_0 .ant-col > .content3-text > .k6bypeippkr-editor_css {
margin: 0px;
}
#Content3_0 .ant-row > .ant-col > .k6byzxwmha-editor_css {
display: none;
}
#Content3_0 .ant-row > .ant-col > .k6byp0r4zad-editor_css {
display: none;
}
#Content3_0 .ant-row > .ant-col > .k6bz0rscbc6-editor_css {
display: none;
}
#Content3_0 .ant-row > .ant-col > .k6byxtosuua-editor_css {
display: none;
}
#Content3_0 .ant-row > .ant-col > .k6bz0x5q5u-editor_css {
display: none;
}
#Content3_0 .home-page > .title-wrapper > .k6byq9vtkee-editor_css {
margin: 0px 0 16px;
}
#Feature2_0 .ant-row > .ant-col > .k6bz79j5xeo-editor_css {
text-align: center;
}
#Feature2_0 .ant-row > .ant-col > .k6bzcb3z43g-editor_css {
}
#Content3_0 .home-page > .title-wrapper > .k6bz1fy4zto-editor_css {
font-size: 15px;
}
#Feature8_0 .ant-col > .feature8-block-child > .k6c0oc6qv0m-editor_css {
font-size: 16px;
padding: 30px;
}
#Feature8_0 div > .ant-row-flex > .k6c0r7negkf-editor_css {
margin: 36px 0px;
padding: 0 60px;
}
#Feature8_0 .ant-col > .feature8-block-child > .k6c0s91863l-editor_css {
margin: 0px;
padding: 20px;
}
#Feature8_0 .ant-col > .feature8-block-child > .k6c0vx6j656-editor_css {
display: none;
}
#Feature8_0 .ant-col > .feature8-block-child > .k6c0s334dxi-editor_css {
display: none;
}
#Feature8_0 .ant-col > .feature8-block-child > .k6c0x19mrup-editor_css {
display: none;
}
#Feature8_0 .ant-col > .feature8-block-child > .k6c0y0a2yx-editor_css {
display: none;
}
#Feature8_0 .ant-col > .feature8-block-child > .k6c0x9xg18b-editor_css {
font-weight: 300;
color: #404040;
}
#Feature8_0 .ant-col > .feature8-block-child > .k6c10o2f0x-editor_css {
display: none;
}
#Feature8_0 .ant-col > .feature8-block-child > .k6c12xz3kb-editor_css {
display: none;
}
#Feature8_0 .ant-col > .feature8-block-child > .k6c0huzztn9-editor_css {
font-size: 20px;
font-weight: 500;
}
#Feature8_0 .ant-col > .feature8-block-child > .k6c169bqlul-editor_css {
font-size: 20px;
}
#Feature8_0 .ant-col > .feature8-block-child > .k6c16ctkdmf-editor_css {
font-size: 20px;
}
#Feature8_0 .ant-col > .feature8-block-child > .k6c17cdd2tk-editor_css {
font-size: 20px;
}
#Feature8_0 .ant-col > .feature8-block-child > .k6c17hbe4aq-editor_css {
font-size: 20px;
}
#Feature8_0 .ant-col > .feature8-block-child > .k6c17kho4rt-editor_css {
font-size: 20px;
}
#Feature8_0 .ant-col > .feature8-block-child > .k6c17nnk41k-editor_css {
font-size: 20px;
}
#Feature8_0 .ant-col > .feature8-block-child > .k6c18wg896n-editor_css {
display: none;
}
#Feature8_0 .ant-col > .feature8-block-child > .k6c18yxsvf-editor_css {
display: none;
}
#Feature8_0 .ant-col > .feature8-block-child > .k6c1dfyt0he-editor_css {
display: none;
}
#Feature8_0 .ant-col > .feature8-block-child > .k6c1dj5lecd-editor_css {
display: none;
}
#Feature8_0 .ant-col > .feature8-block-child > .k6c1crpbwn-editor_css {
font-size: 20px;
text-align: center;
}
#Feature8_0 .ant-col > .feature8-block-child > .k6c1dlcixg-editor_css {
font-size: 20px;
text-align: center;
}
#Feature8_0 .ant-col > .feature8-block-child > .k6c2haip0st-editor_css {
display: none;
}
#Feature8_0 .ant-col > .feature8-block-child > .k6c2h8wti1-editor_css {
display: none;
}
#Feature8_0 .ant-col > .feature8-block-child > .k6c2hgg3bfc-editor_css {
font-size: 20px;
text-align: center;
}
#Feature8_0 .ant-col > .feature8-block-child > .k6c2ijput1f-editor_css {
display: none;
}
#Feature8_0 .ant-col > .feature8-block-child > .k6c2ibp6dfh-editor_css {
display: none;
}
#Feature8_0 .ant-col > .feature8-block-child > .k6c2imvlib-editor_css {
font-size: 20px;
text-align: center;
}
#Content3_0 .k6c2jyfzwv-editor_css {
border-top-width: 1px;
}
#Content3_0 div > .ant-row > .k6c2kk8agk-editor_css {
border-top-style: dashed;
border-right-style: dashed;
border-bottom-style: dashed;
border-left-style: dashed;
border-color: rgba(189, 25, 25, 0);
border-top-width: 1px;
border-right-width: 1px;
border-bottom-width: 1px;
border-left-width: 1px;
}
#Content9_0 .timeline > .block-wrapper > .k6c37bgt0io-editor_css {
width: 100%;
}
#Content9_0 .block-wrapper > .image-wrapper > .k6c3b63w63l-editor_css {
display: none;
}
#Content9_0 .image-wrapper > .name-wrapper > .k6c3bvphdf-editor_css {
display: none;
}
#Content9_0 .image-wrapper > .name-wrapper > .k6c3bgi5wr-editor_css {
font-size: 20px;
}
#Teams1_0 .ant-row > .ant-col > .k6d84n0pi88-editor_css {
width: 20px;
width: 320px;
clear: both;
}
#Teams1_0 .ant-row > .ant-col > .k6d8cd2spqg-editor_css {
@@ -11,3 +259,53 @@
#Teams1_0 .ant-row > .ant-col > .k6d8cnw0kx-editor_css {
font-size: 20px;
}
#Content11_0 .title-wrapper > .k6lxsmos5a-editor_css {
font-size: 18px;
text-align: left;
padding: 0 30px 0 10px;
}
#Content11_0 .title-wrapper > .k6lxlv638d8-editor_css {
font-size: 18px;
text-align: left;
padding: 0 10px;
}
#Content11_0 .title-wrapper > .k6lxnkyb05e-editor_css {
font-size: 18px;
text-align: left;
padding: 0 30px 0 10px;
}
#Content11_0 .title-wrapper > .k6lxrmle9fu-editor_css {
font-size: 18px;
text-align: left;
padding: 0 30px 0 10px;
}
#Content11_0 .title-wrapper > .k6ly1aw82ke-editor_css {
width: 300px;
height: 300px;
position: sticky;
top: 200px;
left: 800px;
}
#Content11_0 .title-wrapper > .k6ly6kbgb-editor_css {
width: 300px;
height: 300px;
position: relative;
left: 100px;
}
#Content11_0 .title-wrapper > .k6lycb5l8ia-editor_css {
height: 120px;
padding: 50px 0px 0px;
}
#Content11_0.k6lxojfwiy-editor_css {
height: 1300px;
padding: 96px 30px 0px 10px;
}
#Feature1_0 .ant-row > .ant-col > .k6lymhkssyk-editor_css {
font-size: 16px;
}
#Feature1_1 .ant-row > .ant-col > .k6lypevq23b-editor_css {
font-size: 16px;
}
#Feature1_2 .ant-row > .ant-col > .k6lyqr8k4ri-editor_css {
font-size: 16px;
}
+76
View File
@@ -0,0 +1,76 @@
@content1: content1;
.@{content1}-wrapper {
height: 360px;
.@{content1} {
height: 100%;
padding: 0 24px;
&-img {
height: 100%;
transform-origin: top;
padding: 0 32px;
display: flex;
align-items: center;
justify-content: center;
span {
display: block;
width: 250px;
img {
display: block;
}
}
}
&-text {
padding: 0 32px;
height: 100%;
.@{content1}-content,
.@{content1}-title {
position: relative !important;
}
.@{content1}-title {
font-size: 32px;
font-weight: normal;
color: #404040;
margin-top: 120px;
}
.content {
margin-top: 20px;
}
}
}
}
@media screen and (max-width: 767px) {
.@{content1}-wrapper {
height: 600px;
.@{content1} {
&-img {
height: 200px;
padding: 0;
text-align: center;
margin-top: 64px;
span {
display: inline-block;
width: 180px;
height: 200px;
line-height: 200px;
margin: auto;
}
}
&-text {
height: auto;
margin-bottom: 20px;
text-align: center;
padding: 0;
.@{content1}-content,
.@{content1}-title {
width: 100%;
top: auto;
}
.@{content1}-title {
margin: 32px auto 16px;
font-size: 24px;
}
}
}
}
}
+76
View File
@@ -0,0 +1,76 @@
@content2: content2;
.@{content2}-wrapper {
height: 360px;
.@{content2} {
height: 100%;
padding: 0 24px;
&-img {
height: 100%;
transform-origin: top;
padding: 0 32px;
display: flex;
align-items: center;
justify-content: center;
span {
display: block;
width: 250px;
img {
display: block;
}
}
}
&-text {
padding: 0 32px;
height: 100%;
.@{content2}-content,
.@{content2}-title {
position: relative !important;
}
.@{content2}-title {
font-size: 32px;
font-weight: normal;
color: #404040;
margin-top: 120px;
}
.@{content2}-content {
margin-top: 20px;
}
}
}
}
@media screen and (max-width: 767px) {
.@{content2}-wrapper {
height: 600px;
.@{content2} {
&-img {
height: 200px;
padding: 0;
text-align: center;
margin-top: 64px;
span {
display: inline-block;
width: 180px;
height: 200px;
line-height: 200px;
margin: auto;
}
}
&-text {
height: auto;
margin-bottom: 20px;
text-align: center;
padding: 0;
.@{content2}-content,
.@{content2}-title {
width: 100%;
top: auto;
}
.@{content2}-title {
margin: 32px auto 16px;
font-size: 24px;
}
}
}
}
}
+118
View File
@@ -0,0 +1,118 @@
@feature6: feature6;
.@{feature6} {
&-wrapper {
min-height: 360px;
margin: 0 auto;
overflow: hidden;
&.home-page-wrapper {
.home-page {
padding: 64px 24px;
}
}
}
&-title {
display: inline-block;
&-wrapper {
text-align: center;
margin-bottom: 48px;
}
&-text {
display: inline-block;
margin: 0 72px;
font-size: 24px;
color: @text-color;
transition: color .45s @ease-in-out;
cursor: pointer;
&.active {
color: @primary-color;
}
}
&-bar {
height: 6px;
background: @primary-color;
width: 20%;
margin: auto;
display: block;
&-wrapper {
position: relative;
margin-top: 8px;
transition: left .45s @ease-in-out;
}
}
}
&-number,
&-text {
text-align: center;
}
&-number {
font-size: 48px;
color: @primary-color;
font-weight: 600;
&-wrapper {
text-align: center;
}
}
&-text {
font-size: 20px;
}
&-unit {
font-size: 16px;
color: @primary-color;
}
.ant-carousel {
.slick-dots-bottom {
bottom: -24px;
}
.slick-dots li {
button {
background: fade(@primary-color, 30);
}
&.slick-active button {
background: @primary-color;
}
}
}
}
@media screen and (max-width: 767px) {
.@{feature6}-wrapper {
padding-bottom: 0;
min-height: 580px;
&.home-page-wrapper {
.home-page {
padding: 56px 24px 64px;
}
}
}
.@{feature6}-title {
&-text {
margin: 0 14px;
}
&-bar {
width: 40%;
}
}
.@{feature6}-number-wrapper {
margin-bottom: 16px;
}
}
+217
View File
@@ -0,0 +1,217 @@
@feature8: feature8;
.@{feature8} {
&-wrapper {
min-height: 680px;
margin: 0 auto;
overflow: hidden;
background-color: fade(#fdfdfd, 30);
background-image: linear-gradient(360deg, fade(#c1daff, 30) 0%, fade(#fdfdfd, 30) 80%);
&.home-page-wrapper {
.home-page {
padding: 64px 24px;
}
}
}
&-title {
&-wrapper {
text-align: center;
margin-bottom: 40px;
}
&-h1 {
font-size: 32px;
color: @text-color;
}
&-content {
margin-top: 16px;
}
}
&-carousel {
width: ~"calc(100% + 72px)";
margin-left: -36px;
}
&-carousel-title {
font-size: 20px;
text-align: center;
&-block {
display: inline-block;
color: fade(@text-color, 45);
transition: color .45s;
padding: 0 40px;
position: relative;
cursor: pointer;
&.active {
color: @text-color;
cursor: auto;
}
&::before {
display: block;
content: '';
width: 1px;
height: 70%;
position: absolute;
top: 0;
right: 0;
bottom: 0;
margin: auto;
background: #d8d8d8;
}
&:last-child {
&::before {
display: none;
}
}
}
}
&-block {
margin-top: 48px;
&-wrapper {
margin-top: 32px;
}
&-row {
padding: 0 36px;
}
&-col {
text-align: center;
margin: 36px 0;
position: relative;
&:last-child {
.@{feature8}-block-arrow {
display: none;
}
}
}
&-child {
padding: 36px 24px 24px;
border-radius: 6px;
height: 100%;
transition: box-shadow @animate-duration @ease-in-out, background @animate-duration @ease-in-out;
&:hover {
background-color: #f6f9ff;
box-shadow: 0 12px 36px fade(#646488, 15);
.@{feature8}-block-content {
opacity: 1;
}
}
}
&-image {
display: inline-block;
}
&-title {
font-size: 16px;
font-weight: 400;
color: @text-color;
margin-top: 16px;
}
&-content {
opacity: 1;
font-size: 14px;
line-height: 22px;
color: fade(@text-color, 65);
margin-top: 36px;
text-align: left;
transition: opacity @animate-duration @ease-in-out;
}
&-arrow {
position: absolute;
right: 0;
width: 16px;
top: 80px;
}
}
&-button {
text-align: center;
&-wrapper {
margin-top: 16px;
}
.ant-btn {
padding: 8px 40px;
border-radius: 20px;
line-height: 1.5;
height: 40px;
border: none;
color: #fff;
background-color: #3c89f6;
background-image: linear-gradient(135deg, #82b5ff 0%, #3c89f6 100%);
box-shadow: 0 9px 22px fade(#5f9bf1, 35);
transition: color .45s @ease-in-out, box-shadow .45s @ease-in-out, transform .45s @ease-in-out;
will-change: transform, box-shadow;
&:hover {
transform: translateY(-5px);
box-shadow: 0 14px 26px fade(#5f9bf1, 40);
}
}
}
}
@media screen and (max-width: 767px) {
.@{feature8} {
&-wrapper {
padding-bottom: 0;
min-height: 1540px;
&.home-page-wrapper {
.home-page {
padding: 56px 24px 64px;
}
}
}
&-carousel-title {
font-size: 16px;
&-block {
padding: 0 8px;
}
}
&-block {
&-child {
width: 80%;
margin: auto;
background-color: #f6f9ff;
box-shadow: 0 12px 36px fade(#646488, 15);
}
&-content {
text-align: center;
}
&-arrow {
bottom: -40px;
top: auto;
left: 0;
right: 0;
margin: auto;
transform: rotate(90deg);
}
}
}
}
+28
View File
@@ -0,0 +1,28 @@
.footer0-wrapper {
background-color: @template-bg-color;
height: 80px;
overflow: hidden;
.footer0 {
height: 100%;
padding: 0 24px;
line-height: 80px;
text-align: center;
color: @template-footer-text-color;
position: relative;
}
}
@media screen and (max-width: 767px) {
.footer0-wrapper {
.footer0 {
font-size: 12px;
&.home-page {
padding: 0;
}
>div {
width: 90%;
margin: auto;
}
}
}
}
+192
View File
@@ -0,0 +1,192 @@
@header3: header3;
.@{header3} {
background: #fff;
width: 100%;
z-index: 1;
box-shadow: 0 4px 6px fade(#000, 5);
position: relative;
top: 0;
.home-page {
padding: 0 0px;
}
&-logo {
display: inline-block;
position: relative;
width: 50px;
line-height: 60px;
& img {
vertical-align: middle;
display: inline-block;
}
& a {
display: block;
}
}
&-menu {
float: right;
.ant-menu-horizontal {
border-bottom: none;
}
.ant-menu {
line-height: 62px;
height: 64px;
background: transparent;
a {
display: block;
}
}
}
&-item {
&-block {
padding: 0 8px;
>* {
display: inline-block;
}
}
}
&-item,
&-item-child,
&-menu {
.ant-menu-sub .ant-menu-item,
.ant-menu-inline .ant-menu-item {
height: auto;
line-height: 1.5;
}
.item {
&-sub-item {
display: block;
padding: 8px 24px;
}
&-image {
float: left;
margin-right: 16px;
margin-top: 4px;
position: relative;
z-index: 1;
}
&-title {
font-size: 14px;
color: @text-color;
margin-left: 46px;
}
&-content {
font-size: 12px;
color: fade(@text-color, 75);
margin-left: 46px;
}
}
}
}
@media screen and (max-width: 767px) {
.@{header3} {
&-logo {
z-index: 101;
}
&.home-page-wrapper .home-page {
padding: 0 24px;
}
&-menu {
height: auto;
float: inherit;
position: relative;
left: -24px;
width: ~"calc(100% + 48px)";
opacity: 0;
transition: opacity .3s @ease-in-out;
background: #fff;
& li {
padding: 0 24px;
&.ant-menu-submenu {
padding: 0;
}
}
.item {
&-sub-item {
padding: 8px 0;
}
}
}
&-mobile-menu {
width: 16px;
height: 14px;
cursor: pointer;
position: absolute;
top: 24px;
right: 24px;
z-index: 100;
em {
display: block;
width: 100%;
height: 2px;
background: @template-nav-bg-color;
margin-top: 4px;
transition: transform .3s @ease-in-out, opacity .3s @ease-in-out;
}
:first-child {
margin-top: 0;
}
}
.ant-menu {
height: auto;
overflow: hidden;
.ant-menu-item-selected {
border: none;
}
}
& .open {
height: auto;
.@{header3}-mobile-menu {
em {
&:nth-child(1) {
transform: translateY(6px) rotate(45deg);
}
&:nth-child(2) {
opacity: 0;
}
&:nth-child(3) {
transform: translateY(-6px) rotate(-45deg);
}
}
}
>.@{header3}-menu {
opacity: 1;
pointer-events: auto;
}
}
&-item-block {
height: 40px;
line-height: 40px;
}
}
}
+61
View File
@@ -0,0 +1,61 @@
@import './custom.less';
@point: point;
.@{point} {
float: left;
width: 8px;
height: 8px;
opacity: .5;
cursor: pointer;
pointer-events: auto;
transition: opacity .3s @ease-out, background .3s @ease-out;
margin: 6px auto;
background: @primary-color;
border-radius: 100%;
&.active {
opacity: 1;
background: @primary-color;
}
&-wrapper {
position: fixed;
z-index: 9998;
top: 0;
right: 16px;
width: 10px;
display: flex;
height: 100%;
align-items: center;
pointer-events: none;
}
&-left {
left: 16px;
}
&-rect {
border-radius: 0;
}
&-prismatic {
border-radius: 0;
transform: rotate(45deg);
}
&-stroke {
border: 2px solid @primary-color;
background: transparent;
}
&-small {
width: 6px;
&.point {
height: 6px;
}
}
&-large {
width: 10px;
&.point {
height: 10px;
}
}
}
@media screen and (max-width: 767px) {
.@{point}-wrapper {
display: none;
}
}
+1 -1
View File
@@ -3,7 +3,7 @@
min-height: 446px;
overflow: hidden;
.@{teams1} {
overflow: hidden;
overflow: visible;
height: 100%;
padding: 64px 24px;
> .title-wrapper {
+161
View File
@@ -0,0 +1,161 @@
/* eslint no-undef: 0 */
/* eslint arrow-parens: 0 */
import React from 'react';
import { enquireScreen } from 'enquire-js';
import Nav3 from './Nav3';
import Banner3 from './Banner3';
import Feature2 from './Feature2';
import Feature1 from './Feature1';
import Content3 from './Content3';
import Feature8 from './Feature8';
import Feature6 from './Feature6';
import Content5 from './Content5';
import Content9 from './Content9';
import Footer0 from './Footer0';
import Point from './Point';
import {
Nav30DataSource,
Banner31DataSource,
Feature20DataSource,
Feature10DataSource,
Content30DataSource,
Feature80DataSource,
Feature60DataSource,
Content50DataSource,
Content90DataSource,
Footer00DataSource,
} from './data.source';
import './less/antMotionStyle.less';
let isMobile;
enquireScreen((b) => {
isMobile = b;
});
const { location } = window;
export default class Home extends React.Component {
constructor(props) {
super(props);
this.state = {
isMobile,
show: !location.port, // 如果不是 dva 2.0 请删除
};
}
componentDidMount() {
// 适配手机屏幕;
enquireScreen((b) => {
this.setState({ isMobile: !!b });
});
// dva 2.0 样式在组件渲染之后动态加载,导致滚动组件不生效;线上不影响;
/* 如果不是 dva 2.0 请删除 start */
if (location.port) {
// 样式 build 时间在 200-300ms 之间;
setTimeout(() => {
this.setState({
show: true,
});
}, 500);
}
/* 如果不是 dva 2.0 请删除 end */
}
render() {
const children = [
<Nav3
id="Nav3_0"
key="Nav3_0"
dataSource={Nav30DataSource}
isMobile={this.state.isMobile}
/>,
<Banner3
id="Banner3_1"
key="Banner3_1"
dataSource={Banner31DataSource}
isMobile={this.state.isMobile}
/>,
<Feature2
id="Feature2_0"
key="Feature2_0"
dataSource={Feature20DataSource}
isMobile={this.state.isMobile}
/>,
<Feature1
id="Feature1_0"
key="Feature1_0"
dataSource={Feature10DataSource}
isMobile={this.state.isMobile}
/>,
<Content3
id="Content3_0"
key="Content3_0"
dataSource={Content30DataSource}
isMobile={this.state.isMobile}
/>,
<Feature8
id="Feature8_0"
key="Feature8_0"
dataSource={Feature80DataSource}
isMobile={this.state.isMobile}
/>,
<Feature6
id="Feature6_0"
key="Feature6_0"
dataSource={Feature60DataSource}
isMobile={this.state.isMobile}
/>,
<Content5
id="Content5_0"
key="Content5_0"
dataSource={Content50DataSource}
isMobile={this.state.isMobile}
/>,
<Content9
id="Content9_0"
key="Content9_0"
dataSource={Content90DataSource}
isMobile={this.state.isMobile}
/>,
<Footer0
id="Footer0_0"
key="Footer0_0"
dataSource={Footer00DataSource}
isMobile={this.state.isMobile}
/>, // 导航和页尾不进入锚点区,如果需要,自行添加;
<Point
key="list"
data={[
'Nav3_0',
'Banner3_1',
'Feature2_0',
'Feature1_0',
'Content3_0',
'Feature8_0',
'Feature6_0',
'Content5_0',
'Content9_0',
'Footer0_0',
]}
/>,
];
return (
<div
className="templates-wrapper"
ref={(d) => {
this.dom = d;
}}
>
{/* 如果不是 dva 2.0 替换成 {children} start */}
{this.state.show && children}
{/* 如果不是 dva 2.0 替换成 {children} end */}
</div>
);
}
}