Compare commits
2 Commits
Author | SHA1 | Date |
---|---|---|
文武 | 950f5bfee7 | 4 months ago |
文武 | 2f27bea9c6 | 4 months ago |
@ -0,0 +1,46 @@ |
|||||
|
workspace: |
||||
|
base: /project |
||||
|
path: src/demo |
||||
|
|
||||
|
branches: [ master,develop,uat ] |
||||
|
|
||||
|
|
||||
|
pipeline: |
||||
|
|
||||
|
install: |
||||
|
image: node:16-alpine |
||||
|
commands: |
||||
|
- yarn install # 也可以使用 npm install |
||||
|
|
||||
|
build: |
||||
|
image: node:16-alpine |
||||
|
commands: |
||||
|
- yarn run build |
||||
|
when: |
||||
|
event: push |
||||
|
branch: develop |
||||
|
|
||||
|
docker-dev: |
||||
|
image: plugins/docker |
||||
|
repo: registry.cn-shenzhen.aliyuncs.com/ax-stor/ax-bkb-seller |
||||
|
registry: registry.cn-shenzhen.aliyuncs.com |
||||
|
use_cache: true |
||||
|
dockerfile: Dockerfile |
||||
|
secrets: [ docker_username, docker_password ] |
||||
|
tags: bindex-web |
||||
|
when: |
||||
|
branch: develop |
||||
|
|
||||
|
deploy-dev: |
||||
|
image: appleboy/drone-ssh |
||||
|
host: 1.92.109.79 |
||||
|
username: root |
||||
|
password: |
||||
|
from_secret: ssh_password |
||||
|
port: 22 # 可选,指定 SSH 端口,默认为 22 |
||||
|
script: |
||||
|
- docker rm -f bindex-web |
||||
|
- docker pull registry.cn-shenzhen.aliyuncs.com/ax-stor/ax-bkb-seller:bindex-web |
||||
|
- docker run --name=bindex-web -p 30104:83 -d registry.cn-shenzhen.aliyuncs.com/ax-stor/ax-bkb-seller:bindex-web |
||||
|
when: |
||||
|
branch: develop |
@ -0,0 +1,14 @@ |
|||||
|
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. |
||||
|
|
||||
|
# dependencies |
||||
|
/node_modules |
||||
|
|
||||
|
# production |
||||
|
/dist |
||||
|
|
||||
|
# misc |
||||
|
.DS_Store |
||||
|
npm-debug.log* |
||||
|
|
||||
|
# umi |
||||
|
.umi |
@ -0,0 +1,29 @@ |
|||||
|
|
||||
|
export default { |
||||
|
hash: true, |
||||
|
// exportStatic: {
|
||||
|
// htmlSuffix: true,
|
||||
|
// dynamicRoot: true,
|
||||
|
// },
|
||||
|
title:"长沙一个地球网络科技有限公司", |
||||
|
antd: {}, |
||||
|
targets: { |
||||
|
ie: 11, |
||||
|
}, |
||||
|
// 路由
|
||||
|
routes: [ |
||||
|
{ |
||||
|
exact: true, |
||||
|
path: '/', |
||||
|
redirect: '/index', |
||||
|
}, |
||||
|
{ |
||||
|
path: '/index', |
||||
|
component: '@/pages/Index', |
||||
|
}, |
||||
|
{ |
||||
|
path: '/download', |
||||
|
component: '@/pages/Download', |
||||
|
}, |
||||
|
], |
||||
|
} |
@ -0,0 +1,8 @@ |
|||||
|
FROM registry.cn-shanghai.aliyuncs.com/lj-go/nginx |
||||
|
LABEL maintainer "wenwu" |
||||
|
|
||||
|
WORKDIR /react |
||||
|
COPY . /react |
||||
|
COPY dist /usr/share/nginx/html/ |
||||
|
COPY nginxDev.conf /etc/nginx/conf.d/default.conf |
||||
|
EXPOSE 83 |
@ -1,3 +0,0 @@ |
|||||
# bkb-landingpage |
|
||||
|
|
||||
bkb 首页 |
|
@ -0,0 +1,9 @@ |
|||||
|
server { |
||||
|
listen 80; |
||||
|
server_name _; |
||||
|
root /data/app; |
||||
|
|
||||
|
location / { |
||||
|
try_files $uri $uri/ /index.html; |
||||
|
} |
||||
|
} |
@ -0,0 +1,28 @@ |
|||||
|
server { |
||||
|
listen 83; |
||||
|
root /usr/share/nginx/html/; |
||||
|
include /etc/nginx/default.d/*.conf; |
||||
|
|
||||
|
|
||||
|
location / { |
||||
|
index index.html index.htm; |
||||
|
error_page 405 =200 /index.html; |
||||
|
try_files $uri $uri/ /index.html; |
||||
|
} |
||||
|
|
||||
|
location /api/ { |
||||
|
proxy_pass http://1.92.109.79:30201/; |
||||
|
} |
||||
|
|
||||
|
location /minio/ { |
||||
|
proxy_pass https://ax-api.sumweal.com/minio/; |
||||
|
} |
||||
|
|
||||
|
error_page 404 /404.html; |
||||
|
location = /40x.html { |
||||
|
} |
||||
|
|
||||
|
error_page 500 502 503 504 /50x.html; |
||||
|
location = /50x.html { |
||||
|
} |
||||
|
} |
@ -0,0 +1,43 @@ |
|||||
|
{ |
||||
|
"name": "landing-test", |
||||
|
"private": true, |
||||
|
"scripts": { |
||||
|
"start": "umi dev", |
||||
|
"build": "umi build", |
||||
|
"lint": "eslint --ext .jsx src && npm run lint:style", |
||||
|
"lint:style": "stylelint \"src/Home/**/*.less\" --syntax less", |
||||
|
"gh-pages": "gh-pages -d dist" |
||||
|
}, |
||||
|
"dependencies": { |
||||
|
"enquire-js": "^0.2.1", |
||||
|
"rc-banner-anim": "^2.1.0", |
||||
|
"rc-queue-anim": "^1.6.7", |
||||
|
"rc-scroll-anim": "^2.5.6", |
||||
|
"rc-texty": "^0.2.0", |
||||
|
"rc-tween-one": "^2.2.14", |
||||
|
"react-sublime-video": "^0.2.5", |
||||
|
"react": "^16.6.0", |
||||
|
"react-dom": "^16.6.0" |
||||
|
}, |
||||
|
"devDependencies": { |
||||
|
"babel-eslint": "^10.0.1", |
||||
|
"eslint": "^6.0.0", |
||||
|
"eslint-config-airbnb": "^18.0.0", |
||||
|
"eslint-loader": "^3.0.2", |
||||
|
"eslint-plugin-babel": "^5.1.0", |
||||
|
"eslint-plugin-compat": "^3.1.1", |
||||
|
"eslint-plugin-import": "^2.14.0", |
||||
|
"eslint-plugin-jsx-a11y": "^6.1.2", |
||||
|
"eslint-plugin-markdown": "^1.0.0-beta.6", |
||||
|
"eslint-plugin-react": "^7.11.1", |
||||
|
"eslint-tinker": "^0.5.0", |
||||
|
"extract-text-webpack-plugin": "^3.0.2", |
||||
|
"gh-pages": "^2.0.1", |
||||
|
"husky": "^1.3.1", |
||||
|
"stylelint": "^9.4.0", |
||||
|
"stylelint-config-prettier": "^4.0.0", |
||||
|
"stylelint-config-standard": "^18.0.0", |
||||
|
"umi": "^3.0.0", |
||||
|
"@umijs/preset-react": "^1.4.5" |
||||
|
} |
||||
|
} |
@ -0,0 +1,40 @@ |
|||||
|
import React from 'react'; |
||||
|
import { Button } from 'antd'; |
||||
|
import { DownOutlined } from '@ant-design/icons'; |
||||
|
import QueueAnim from 'rc-queue-anim'; |
||||
|
import TweenOne from 'rc-tween-one'; |
||||
|
import { isImg } from './utils'; |
||||
|
|
||||
|
class Banner extends React.PureComponent { |
||||
|
render() { |
||||
|
const { ...currentProps } = this.props; |
||||
|
const { dataSource } = currentProps; |
||||
|
delete currentProps.dataSource; |
||||
|
delete currentProps.isMobile; |
||||
|
return ( |
||||
|
<div {...currentProps} {...dataSource.wrapper}> |
||||
|
<QueueAnim |
||||
|
key="QueueAnim" |
||||
|
type={['bottom', 'top']} |
||||
|
delay={200} |
||||
|
{...dataSource.textWrapper} |
||||
|
> |
||||
|
|
||||
|
</QueueAnim> |
||||
|
<TweenOne |
||||
|
animation={{ |
||||
|
y: '-=20', |
||||
|
yoyo: true, |
||||
|
repeat: -1, |
||||
|
duration: 1000, |
||||
|
}} |
||||
|
className="banner0-icon" |
||||
|
key="icon" |
||||
|
> |
||||
|
{/* <DownOutlined /> */} |
||||
|
</TweenOne> |
||||
|
</div> |
||||
|
); |
||||
|
} |
||||
|
} |
||||
|
export default Banner; |
@ -0,0 +1,75 @@ |
|||||
|
import React from 'react'; |
||||
|
import { Button } from 'antd'; |
||||
|
import { DownOutlined } from '@ant-design/icons'; |
||||
|
import QueueAnim from 'rc-queue-anim'; |
||||
|
import TweenOne, { TweenOneGroup } from 'rc-tween-one'; |
||||
|
import BannerAnim, { Element } from 'rc-banner-anim'; |
||||
|
import { isImg } from './utils'; |
||||
|
import 'rc-banner-anim/assets/index.css'; |
||||
|
|
||||
|
const { BgElement } = Element; |
||||
|
class Banner extends React.PureComponent { |
||||
|
render() { |
||||
|
const { ...props } = this.props; |
||||
|
const { dataSource } = props; |
||||
|
delete props.dataSource; |
||||
|
delete props.isMobile; |
||||
|
const childrenToRender = dataSource.BannerAnim.children.map((item, i) => { |
||||
|
const elem = item.BannerElement; |
||||
|
const elemClassName = elem.className; |
||||
|
delete elem.className; |
||||
|
const { bg, textWrapper, title, content, button } = item; |
||||
|
return ( |
||||
|
<Element key={i.toString()} {...elem} prefixCls={elemClassName}> |
||||
|
<BgElement key="bg" {...bg} /> |
||||
|
<QueueAnim |
||||
|
type={['bottom', 'top']} |
||||
|
delay={200} |
||||
|
key="text" |
||||
|
{...textWrapper} |
||||
|
> |
||||
|
{/* <div key="logo" {...title}> |
||||
|
{typeof title.children === 'string' && |
||||
|
title.children.match(isImg) ? ( |
||||
|
<img src={title.children} width="100%" alt="img" /> |
||||
|
) : ( |
||||
|
title.children |
||||
|
)} |
||||
|
</div> */} |
||||
|
</QueueAnim> |
||||
|
</Element> |
||||
|
); |
||||
|
}); |
||||
|
return ( |
||||
|
<div {...props} {...dataSource.wrapper}> |
||||
|
<TweenOneGroup |
||||
|
key="bannerGroup" |
||||
|
enter={{ opacity: 0, type: 'from' }} |
||||
|
leave={{ opacity: 0 }} |
||||
|
component="" |
||||
|
> |
||||
|
<div className="banner1-wrapper" key="wrapper"> |
||||
|
<BannerAnim key="BannerAnim" {...dataSource.BannerAnim}> |
||||
|
{childrenToRender} |
||||
|
</BannerAnim> |
||||
|
</div> |
||||
|
</TweenOneGroup> |
||||
|
<TweenOne |
||||
|
animation={{ |
||||
|
y: '-=20', |
||||
|
yoyo: true, |
||||
|
repeat: -1, |
||||
|
duration: 1000, |
||||
|
}} |
||||
|
className="banner1-icon" |
||||
|
style={{ bottom: 40 }} |
||||
|
key="icon" |
||||
|
> |
||||
|
{/* <DownOutlined /> */} |
||||
|
</TweenOne> |
||||
|
</div> |
||||
|
); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
export default Banner; |
@ -0,0 +1,73 @@ |
|||||
|
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 styles from './customer.less'; |
||||
|
|
||||
|
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 className={styles.bg1}> |
||||
|
<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> |
||||
|
</div> |
||||
|
); |
||||
|
} |
||||
|
|
||||
|
export default Content1; |
@ -0,0 +1,79 @@ |
|||||
|
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 styles from "./customer.less" |
||||
|
|
||||
|
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 className={styles.bg3}> |
||||
|
<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} style={{ position: 'relative', paddingLeft: 10 }}> |
||||
|
<span className={styles.circle} /> |
||||
|
{dataSource.content.children} |
||||
|
</div> |
||||
|
<div key="p1" style={{ marginTop: 10, position: 'relative', paddingLeft: 10 }}> |
||||
|
<span className={styles.circle} /> |
||||
|
{dataSource.content.children1} |
||||
|
</div> |
||||
|
</QueueAnim> |
||||
|
</OverPack> |
||||
|
</div> |
||||
|
</div> |
||||
|
|
||||
|
); |
||||
|
} |
||||
|
|
||||
|
export default Content1; |
@ -0,0 +1,79 @@ |
|||||
|
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 styles from './customer.less'; |
||||
|
|
||||
|
|
||||
|
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 className={styles.bg2}> |
||||
|
<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> |
||||
|
</div> |
||||
|
|
||||
|
); |
||||
|
} |
||||
|
|
||||
|
export default Content2; |
@ -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; |
@ -0,0 +1,64 @@ |
|||||
|
.circle { |
||||
|
border-radius: 100%; |
||||
|
width: 8px; |
||||
|
height: 8px; |
||||
|
background-color: #58b0bc; |
||||
|
display: inline-block; |
||||
|
position: absolute; |
||||
|
left: 0px; |
||||
|
top: 5px; |
||||
|
} |
||||
|
|
||||
|
.banner0 { |
||||
|
img { |
||||
|
width: 100%; |
||||
|
height: auto; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
.banner1 { |
||||
|
img { |
||||
|
width: 100%; |
||||
|
height: auto; |
||||
|
} |
||||
|
} |
||||
|
.banner2 { |
||||
|
img { |
||||
|
width: 100%; |
||||
|
height: auto; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
.bg1 { |
||||
|
background-image: url(./images/bg1.png); |
||||
|
background-size: cover; |
||||
|
& > div { |
||||
|
height: 500px; |
||||
|
padding-top: 100px; |
||||
|
padding-bottom: 100px; |
||||
|
box-sizing: content-box; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
.bg2 { |
||||
|
background-image: url(./images/bg2.png); |
||||
|
background-size: cover; |
||||
|
background-color: black; |
||||
|
& > div { |
||||
|
height: 500px; |
||||
|
padding-top: 100px; |
||||
|
padding-bottom: 100px; |
||||
|
box-sizing: content-box; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
.bg3 { |
||||
|
background-image: url(./images/bg3.png); |
||||
|
background-size: cover; |
||||
|
& > div { |
||||
|
height: 500px; |
||||
|
padding-top: 100px; |
||||
|
padding-bottom: 100px; |
||||
|
box-sizing: content-box; |
||||
|
} |
||||
|
} |
@ -0,0 +1,156 @@ |
|||||
|
import React from 'react'; |
||||
|
import icon1Image from './images/icon1.png'; |
||||
|
import icon2Image from './images/icon2.png'; |
||||
|
import icon3Image from './images/icon3.png'; |
||||
|
|
||||
|
|
||||
|
export const Banner10DataSource = { |
||||
|
wrapper: { className: 'banner1' }, |
||||
|
BannerAnim: { |
||||
|
children: [ |
||||
|
{ |
||||
|
name: 'elem0', |
||||
|
BannerElement: { className: 'banner-user-elem' }, |
||||
|
textWrapper: { className: 'banner1-text-wrapper' }, |
||||
|
bg: { |
||||
|
className: 'bg bg0', |
||||
|
style: { 'background-position': 'top' }, |
||||
|
onClick: () => { |
||||
|
window.location.href = 'https://seller-dev.bkbackground.com/login'; |
||||
|
}, |
||||
|
}, |
||||
|
title: { |
||||
|
className: 'banner1-title', |
||||
|
children: |
||||
|
'https://zos.alipayobjects.com/rmsportal/HqnZZjBjWRbjyMr.png', |
||||
|
}, |
||||
|
content: { |
||||
|
className: 'banner1-content', |
||||
|
children: '一个高效的页面动画解决方案', |
||||
|
}, |
||||
|
button: { className: 'banner1-button', children: 'Learn More' }, |
||||
|
}, |
||||
|
{ |
||||
|
name: 'elem1', |
||||
|
BannerElement: { className: 'banner-user-elem' }, |
||||
|
textWrapper: { className: 'banner1-text-wrapper' }, |
||||
|
bg: { |
||||
|
className: 'bg bg1', |
||||
|
style: { 'background-position': 'top' }, |
||||
|
}, |
||||
|
title: { |
||||
|
className: 'banner1-title', |
||||
|
children: |
||||
|
'https://zos.alipayobjects.com/rmsportal/HqnZZjBjWRbjyMr.png', |
||||
|
}, |
||||
|
content: { |
||||
|
className: 'banner1-content', |
||||
|
children: '一个高效的页面动画解决方案', |
||||
|
}, |
||||
|
button: { className: 'banner1-button', children: 'Learn More' }, |
||||
|
}, |
||||
|
], |
||||
|
}, |
||||
|
}; |
||||
|
export const Banner02DataSource = { |
||||
|
wrapper: { className: 'banner0' }, |
||||
|
textWrapper: { className: 'banner0-text-wrapper' }, |
||||
|
title: { |
||||
|
className: 'banner0-title', |
||||
|
children: 'https://zos.alipayobjects.com/rmsportal/HqnZZjBjWRbjyMr.png', |
||||
|
}, |
||||
|
content: { |
||||
|
className: 'banner0-content', |
||||
|
children: '', |
||||
|
}, |
||||
|
button: { className: 'banner0-button', children: 'Learn More' }, |
||||
|
}; |
||||
|
export const Banner00DataSource = { |
||||
|
wrapper: { className: 'banner0' }, |
||||
|
textWrapper: { className: 'banner0-text-wrapper' }, |
||||
|
title: { |
||||
|
className: 'banner0-title', |
||||
|
children: 'https://zos.alipayobjects.com/rmsportal/HqnZZjBjWRbjyMr.png', |
||||
|
}, |
||||
|
content: { |
||||
|
className: 'banner0-content', |
||||
|
children: '', |
||||
|
}, |
||||
|
button: { className: 'banner0-button', children: 'Learn More' }, |
||||
|
}; |
||||
|
export const Banner01DataSource = { |
||||
|
wrapper: { className: 'banner0' }, |
||||
|
textWrapper: { className: 'banner0-text-wrapper' }, |
||||
|
title: { |
||||
|
className: 'banner0-title', |
||||
|
children: 'https://zos.alipayobjects.com/rmsportal/HqnZZjBjWRbjyMr.png', |
||||
|
}, |
||||
|
content: { |
||||
|
className: 'banner0-content', |
||||
|
children: '', |
||||
|
}, |
||||
|
button: { className: 'banner0-button', children: 'Learn More' }, |
||||
|
}; |
||||
|
export const Content10DataSource = { |
||||
|
wrapper: { className: 'home-page-wrapper content1-wrapper' }, |
||||
|
OverPack: { className: 'home-page content1', playScale: 0.3 }, |
||||
|
imgWrapper: { className: 'content1-img', md: 12, xs: 24 }, |
||||
|
img: { |
||||
|
children: icon1Image, |
||||
|
}, |
||||
|
textWrapper: { className: 'content1-text', md: 12, xs: 24 }, |
||||
|
title: { className: 'content1-title', children: '区块链智能合约系统' }, |
||||
|
content: { |
||||
|
className: 'content1-content', |
||||
|
children: |
||||
|
'利用区块链智能合约系统构建网红和供应链的分账模式,打破信任壁垒,完成去中心化的导流销售分账机制', |
||||
|
}, |
||||
|
}; |
||||
|
export const Feature20DataSource = { |
||||
|
wrapper: { className: 'home-page-wrapper content2-wrapper' }, |
||||
|
OverPack: { className: 'home-page content2', playScale: 0.3 }, |
||||
|
imgWrapper: { className: 'content2-img', md: 12, xs: 24 }, |
||||
|
img: { |
||||
|
children: icon2Image, |
||||
|
}, |
||||
|
textWrapper: { className: 'content2-text', md: 12, xs: 24 }, |
||||
|
title: { className: 'content2-title', children: '智能内容生产', style: { color: '#FFFFFF' } }, |
||||
|
content: { |
||||
|
className: 'content2-content', |
||||
|
style: { color: '#999999' }, |
||||
|
children: |
||||
|
'有效接入人工智能等产品功能,在网红内容生产和品牌独立站构建体系中降本增效,让网红可以更轻松生产优质内容为产品导流', |
||||
|
}, |
||||
|
}; |
||||
|
export const Feature10DataSource = { |
||||
|
wrapper: { className: 'home-page-wrapper content1-wrapper' }, |
||||
|
OverPack: { className: 'home-page content1', playScale: 0.3 }, |
||||
|
imgWrapper: { className: 'content1-img', md: 12, xs: 24 }, |
||||
|
img: { |
||||
|
children: icon3Image, |
||||
|
}, |
||||
|
textWrapper: { className: 'content1-text', md: 12, xs: 24 }, |
||||
|
title: { className: 'content1-title', children: '快速构建独立站私域流量' }, |
||||
|
content: { |
||||
|
className: 'content1-content', |
||||
|
children: |
||||
|
'有别于现在主流的电商平台中心化的站内流量体系,BKB可以无上限地为品牌方提供一键生成产品和品牌的独立站', |
||||
|
children1: '导入全球自媒体平台流量帮助建品牌方建立基于独立站的私域流量体系' |
||||
|
}, |
||||
|
}; |
||||
|
|
||||
|
export const Footer00DataSource = { |
||||
|
wrapper: { className: 'home-page-wrapper footer0-wrapper' }, |
||||
|
OverPack: { className: 'home-page footer0', playScale: 0.05 }, |
||||
|
copyright: { |
||||
|
className: 'copyright', |
||||
|
children: ( |
||||
|
<> |
||||
|
<span style={{paddingRight: 20, color:"white"}}>长沙一个地球网络科技有限公司</span> |
||||
|
<span> |
||||
|
<a href="https://beian.miit.gov.cn/#/Integrated/index">湘ICP备2022024531号</a> |
||||
|
</span> |
||||
|
</> |
||||
|
), |
||||
|
}, |
||||
|
}; |
@ -0,0 +1,4 @@ |
|||||
|
# 如何使用: |
||||
|
|
||||
|
- umi 里如何使用[请查看](https://landing.ant.design/docs/use/umi)。 |
||||
|
- 其它脚手架使用[请查看](https://landing.ant.design/docs/use/getting-started)。 |
After Width: | Height: | Size: 1.3 MiB |
After Width: | Height: | Size: 326 KiB |
After Width: | Height: | Size: 1.8 MiB |
After Width: | Height: | Size: 1021 KiB |
After Width: | Height: | Size: 1000 KiB |
After Width: | Height: | Size: 1.2 MiB |
@ -0,0 +1,119 @@ |
|||||
|
/* eslint no-undef: 0 */ |
||||
|
/* eslint arrow-parens: 0 */ |
||||
|
import React from 'react'; |
||||
|
import { enquireScreen } from 'enquire-js'; |
||||
|
|
||||
|
import Banner1 from './Banner1'; |
||||
|
import Banner0 from './Banner0'; |
||||
|
import Content1 from './Content1'; |
||||
|
import Feature2 from './Feature2'; |
||||
|
import Feature1 from './Feature1'; |
||||
|
import styles from './customer.less' |
||||
|
import content1Image from './less/content1.png' |
||||
|
import content2Image from './less/content2.png' |
||||
|
import content3Image from './less/content3.png' |
||||
|
import Footer0 from './Footer0'; |
||||
|
|
||||
|
|
||||
|
import { |
||||
|
Footer00DataSource, |
||||
|
Banner10DataSource, |
||||
|
Banner02DataSource, |
||||
|
Banner00DataSource, |
||||
|
Banner01DataSource, |
||||
|
Content10DataSource, |
||||
|
Feature20DataSource, |
||||
|
Feature10DataSource, |
||||
|
} from './data.source'; |
||||
|
import './less/antMotionStyle.less'; |
||||
|
|
||||
|
let isMobile; |
||||
|
enquireScreen((b) => { |
||||
|
isMobile = b; |
||||
|
}); |
||||
|
|
||||
|
const { location = {} } = typeof window !== 'undefined' ? 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 = [ |
||||
|
<Banner1 |
||||
|
id="Banner1_0" |
||||
|
key="Banner1_0" |
||||
|
dataSource={Banner10DataSource} |
||||
|
isMobile={this.state.isMobile} |
||||
|
/>, |
||||
|
<div className={styles.banner0}> |
||||
|
<img src={content1Image} alt="" /> |
||||
|
</div>, |
||||
|
<div className={styles.banner1}> |
||||
|
<img src={content2Image} alt="" /> |
||||
|
</div>, |
||||
|
<div className={styles.banner2}> |
||||
|
<img src={content3Image} alt="" /> |
||||
|
</div>, |
||||
|
<Content1 |
||||
|
id="Content1_0" |
||||
|
key="Content1_0" |
||||
|
dataSource={Content10DataSource} |
||||
|
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} |
||||
|
/>, |
||||
|
<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> |
||||
|
); |
||||
|
} |
||||
|
} |
@ -0,0 +1,10 @@ |
|||||
|
@import "./common.less"; |
||||
|
@import "./custom.less"; |
||||
|
@import "./content.less"; |
||||
|
@import "./banner1.less"; |
||||
|
@import "./banner0.less"; |
||||
|
@import "./content1.less"; |
||||
|
@import "./feature2.less"; |
||||
|
@import "./feature1.less"; |
||||
|
@import "./edit.less"; |
||||
|
@import "./footer0.less"; |
@ -0,0 +1,84 @@ |
|||||
|
@banner0: banner0; |
||||
|
.@{banner0} { |
||||
|
// 如果在第一屏且导航位置为 relative, 一屏为 height: calc(~"100vh - 64px"); |
||||
|
width: 100%; |
||||
|
height: 100vh; |
||||
|
position: relative; |
||||
|
text-align: center; |
||||
|
border-color: #666; |
||||
|
// background-image: url("https://zos.alipayobjects.com/rmsportal/gGlUMYGEIvjDOOw.jpg"); |
||||
|
background-size: cover; |
||||
|
background-attachment: fixed; |
||||
|
background-position: center; |
||||
|
& &-text-wrapper { |
||||
|
display: inline-block; |
||||
|
position: absolute; |
||||
|
top: 20%; |
||||
|
margin: auto; |
||||
|
left: 0; |
||||
|
right: 0; |
||||
|
font-size: 14px; |
||||
|
color: @template-text-color-light; |
||||
|
width: 550px; |
||||
|
> .queue-anim-leaving { |
||||
|
position: relative !important; |
||||
|
} |
||||
|
} |
||||
|
& &-title { |
||||
|
width: 350px; |
||||
|
left: 30px; |
||||
|
min-height: 60px; |
||||
|
margin: auto; |
||||
|
display: inline-block; |
||||
|
font-size: 40px; |
||||
|
position: relative; |
||||
|
} |
||||
|
& &-content { |
||||
|
margin-bottom: 20px; |
||||
|
word-wrap: break-word; |
||||
|
min-height: 24px; |
||||
|
} |
||||
|
& &-button { |
||||
|
border: 1px solid #fff; |
||||
|
color: #fff; |
||||
|
background: transparent; |
||||
|
box-shadow: 0 0 0 transparent; |
||||
|
font-size: 16px; |
||||
|
height: 40px; |
||||
|
transition: background 0.45s @ease-out, box-shadow 0.45s @ease-out; |
||||
|
&:hover { |
||||
|
color: #fff; |
||||
|
border-color: #fff; |
||||
|
background: rgba(255, 255, 255, 0.1); |
||||
|
box-shadow: 0 0 10px rgba(50, 250, 255, 0.75); |
||||
|
} |
||||
|
&:focus { |
||||
|
color: #fff; |
||||
|
border-color: #fff; |
||||
|
} |
||||
|
&.queue-anim-leaving { |
||||
|
width: auto; |
||||
|
} |
||||
|
} |
||||
|
& &-icon { |
||||
|
bottom: 20px; |
||||
|
font-size: 24px; |
||||
|
position: absolute; |
||||
|
left: 50%; |
||||
|
margin-left: -12px; |
||||
|
color: @template-text-color-light; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
@media screen and (max-width: 767px) { |
||||
|
.@{banner0} { |
||||
|
background-attachment: inherit; |
||||
|
& &-text-wrapper { |
||||
|
width: 90%; |
||||
|
} |
||||
|
& &-title { |
||||
|
width: 90%; |
||||
|
left: 0; |
||||
|
} |
||||
|
} |
||||
|
} |
@ -0,0 +1,126 @@ |
|||||
|
@banner1: banner1; |
||||
|
.@{banner1} { |
||||
|
// 如果在第一屏且导航位置为 relative, 一屏为 height: calc(~"100vh - 64px"); |
||||
|
width: 100%; |
||||
|
height: 100vh; |
||||
|
position: relative; |
||||
|
border-color: #666; |
||||
|
background: #fff; |
||||
|
&-wrapper, |
||||
|
.banner-anim { |
||||
|
height: 100%; |
||||
|
} |
||||
|
& .queue-anim-leaving { |
||||
|
position: relative !important; |
||||
|
} |
||||
|
.banner-user-elem { |
||||
|
height: 100%; |
||||
|
color: #fff; |
||||
|
position: relative; |
||||
|
overflow: hidden; |
||||
|
} |
||||
|
.bg0 { |
||||
|
background: url("./banner1.png") center; |
||||
|
} |
||||
|
.bg1 { |
||||
|
background: url("./banner2.png") center; |
||||
|
} |
||||
|
.bg { |
||||
|
width: 100%; |
||||
|
height: 100%; |
||||
|
position: absolute; |
||||
|
top: 0; |
||||
|
left: 0; |
||||
|
overflow: hidden; |
||||
|
background-size: cover; |
||||
|
} |
||||
|
.banner-user-elem .banner-user-title { |
||||
|
font-size: 22px; |
||||
|
top: 40%; |
||||
|
} |
||||
|
.banner-user-elem .banner-user-text { |
||||
|
top: 40%; |
||||
|
} |
||||
|
& &-text-wrapper { |
||||
|
display: block; |
||||
|
position: relative; |
||||
|
top: 20%; |
||||
|
left: 0; |
||||
|
right: 0; |
||||
|
margin: auto; |
||||
|
font-size: 14px; |
||||
|
color: @template-text-color-light; |
||||
|
width: 550px; |
||||
|
text-align: center; |
||||
|
} |
||||
|
& &-title { |
||||
|
width: 350px; |
||||
|
left: 30px; |
||||
|
margin: auto; |
||||
|
display: inline-block; |
||||
|
font-size: 40px; |
||||
|
position: relative; |
||||
|
} |
||||
|
& &-content { |
||||
|
margin-bottom: 20px; |
||||
|
word-wrap: break-word; |
||||
|
} |
||||
|
& &-button { |
||||
|
border: 1px solid #fff; |
||||
|
color: #fff; |
||||
|
background: transparent; |
||||
|
box-shadow: 0 0 0 transparent; |
||||
|
transition: background 0.45s @ease-out, box-shadow 0.45s @ease-out; |
||||
|
line-height: 36px; |
||||
|
font-size: 16px; |
||||
|
height: 36px; |
||||
|
& span { |
||||
|
text-shadow: 0 0 0 rgba(0, 0, 0, 0); |
||||
|
transition: text-shadow 0.45s @ease-out; |
||||
|
} |
||||
|
&:hover { |
||||
|
color: #fff; |
||||
|
border-color: #fff; |
||||
|
background: rgba(255, 255, 255, 0.1); |
||||
|
box-shadow: 0 0 10px rgba(50, 250, 255, 0.75); |
||||
|
& span { |
||||
|
text-shadow: 1px 1px 3px rgba(0, 0, 0, 0.35); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
&.queue-anim-leaving { |
||||
|
width: auto; |
||||
|
} |
||||
|
} |
||||
|
& &-icon { |
||||
|
bottom: 20px; |
||||
|
font-size: 24px; |
||||
|
position: absolute; |
||||
|
z-index: 10; |
||||
|
left: 50%; |
||||
|
margin-left: -12px; |
||||
|
color: @template-text-color-light; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
.banner-anim-thumb-default span { |
||||
|
width: 10px; |
||||
|
height: 10px; |
||||
|
border-radius: 10px; |
||||
|
background: rgba(255, 255, 255, 0.5); |
||||
|
} |
||||
|
|
||||
|
@media screen and (max-width: 767px) { |
||||
|
.@{banner1} { |
||||
|
& &-text-wrapper { |
||||
|
width: 90%; |
||||
|
.@{banner1}-title { |
||||
|
width: 90%; |
||||
|
left: 0; |
||||
|
} |
||||
|
} |
||||
|
.bg { |
||||
|
background-attachment: inherit; |
||||
|
} |
||||
|
} |
||||
|
} |
After Width: | Height: | Size: 3.0 MiB |
After Width: | Height: | Size: 876 KiB |
@ -0,0 +1,42 @@ |
|||||
|
|
||||
|
// @import "~antd/lib/style/v2-compatible-reset.less"; |
||||
|
|
||||
|
body { |
||||
|
word-wrap: break-word; |
||||
|
} |
||||
|
|
||||
|
body, |
||||
|
div, |
||||
|
dl, |
||||
|
dt, |
||||
|
dd, |
||||
|
ul, |
||||
|
ol, |
||||
|
li, |
||||
|
h1, |
||||
|
h2, |
||||
|
h3, |
||||
|
h4, |
||||
|
h5, |
||||
|
h6 { |
||||
|
margin: 0; |
||||
|
padding: 0; |
||||
|
} |
||||
|
|
||||
|
/* .content-wrapper > .tween-one-leaving, |
||||
|
.queue-anim-leaving { |
||||
|
// position: absolute !important; |
||||
|
// width: 100%; |
||||
|
} */ |
||||
|
|
||||
|
.video { |
||||
|
max-width: 800px; |
||||
|
} |
||||
|
|
||||
|
#react-content { |
||||
|
min-height: 100%; |
||||
|
} |
||||
|
.home-page-wrapper p { |
||||
|
padding: 0; |
||||
|
margin: 0; |
||||
|
} |
@ -0,0 +1,46 @@ |
|||||
|
@template-footer-text-color: #999; |
||||
|
@homepage: home-page; |
||||
|
.@{homepage}-wrapper { |
||||
|
width: 100%; |
||||
|
position: relative; |
||||
|
overflow: hidden; |
||||
|
.@{homepage} { |
||||
|
height: 100%; |
||||
|
max-width: 1200px; |
||||
|
position: relative; |
||||
|
margin: auto; |
||||
|
will-change: transform; |
||||
|
} |
||||
|
.title-wrapper > h1, |
||||
|
> h1 { |
||||
|
font-size: 32px; |
||||
|
color: @text-color; |
||||
|
margin-bottom: 16px; |
||||
|
} |
||||
|
.title-wrapper { |
||||
|
margin: 0 auto 64px; |
||||
|
text-align: center; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
.@{homepage} { |
||||
|
padding: 128px 24px; |
||||
|
} |
||||
|
|
||||
|
@media screen and (max-width: 767px) { |
||||
|
.@{homepage}-wrapper { |
||||
|
.@{homepage} { |
||||
|
padding: 56px 24px; |
||||
|
> h1 { |
||||
|
font-size: 24px; |
||||
|
margin: 0 auto 32px; |
||||
|
&.title-h1 { |
||||
|
margin-bottom: 8px; |
||||
|
} |
||||
|
} |
||||
|
> p { |
||||
|
margin-bottom: 32px; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
@ -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: 100%; |
||||
|
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: 190px; |
||||
|
} |
||||
|
.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; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
After Width: | Height: | Size: 5.0 MiB |
After Width: | Height: | Size: 312 KiB |
After Width: | Height: | Size: 616 KiB |
@ -0,0 +1,35 @@ |
|||||
|
@import "~antd/lib/style/themes/default.less"; |
||||
|
|
||||
|
@line-color: #e9e9e9; |
||||
|
|
||||
|
@shadow-color: rgba(0, 0, 0, 0.15); |
||||
|
|
||||
|
@bottom-bar-bg-color: #262626; |
||||
|
@bottom-bar-line-color: #000; |
||||
|
|
||||
|
@template-bg-color: #001529; |
||||
|
@template-bg-color-light: #ececec; |
||||
|
@template-nav-bg-color: #001529; |
||||
|
@template-text-color: #ccc; |
||||
|
@template-text-title-color: #bcbcbc; |
||||
|
@template-text-color-light: #fff; |
||||
|
@template-footer-text-color: #999; |
||||
|
|
||||
|
@animate-duration: .45s; |
||||
|
|
||||
|
/* 详细页图片或框框的样式; |
||||
|
*/ |
||||
|
.page-shadow() { |
||||
|
box-shadow: 0 5px 8px @shadow-color; |
||||
|
} |
||||
|
|
||||
|
.page-pro() { |
||||
|
border-radius: 6px; |
||||
|
border: 1px solid @line-color; |
||||
|
transform: translateY(0); |
||||
|
transition: transform .3s @ease-out, box-shadow .3s @ease-out; |
||||
|
&:hover { |
||||
|
.page-shadow(); |
||||
|
transform: translateY(-5px); |
||||
|
} |
||||
|
} |
@ -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: 100%; |
||||
|
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: 190px; |
||||
|
} |
||||
|
.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; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
@ -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: 100%; |
||||
|
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: 190px; |
||||
|
} |
||||
|
.@{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; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
@ -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; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
@ -0,0 +1,18 @@ |
|||||
|
|
||||
|
import React from 'react'; |
||||
|
import { Button } from 'antd'; |
||||
|
|
||||
|
export const isImg = /^http(s)?:\/\/([\w-]+\.)+[\w-]+(\/[\w-./?%&=]*)?/; |
||||
|
export const getChildrenToRender = (item, i) => { |
||||
|
let tag = item.name.indexOf('title') === 0 ? 'h1' : 'div'; |
||||
|
tag = item.href ? 'a' : tag; |
||||
|
let children = typeof item.children === 'string' && item.children.match(isImg) |
||||
|
? React.createElement('img', { src: item.children, alt: 'img' }) |
||||
|
: item.children; |
||||
|
if (item.name.indexOf('button') === 0 && typeof item.children === 'object') { |
||||
|
children = React.createElement(Button, { |
||||
|
...item.children |
||||
|
}); |
||||
|
} |
||||
|
return React.createElement(tag, { key: i.toString(), ...item }, children); |
||||
|
}; |
@ -0,0 +1,4 @@ |
|||||
|
@import "./Home/less/antMotionStyle.less"; |
||||
|
|
||||
|
:global { |
||||
|
} |
After Width: | Height: | Size: 607 KiB |
@ -0,0 +1,41 @@ |
|||||
|
/* eslint-disable react/button-has-type */ |
||||
|
/* eslint-disable jsx-a11y/img-redundant-alt */ |
||||
|
import React from 'react'; |
||||
|
import bgPng from './images/bg.png'; |
||||
|
import styles from './index.less'; |
||||
|
|
||||
|
function isAndroid() { |
||||
|
const u = navigator.userAgent; |
||||
|
return u.indexOf('Android') > -1 || u.indexOf('Adr') > -1; |
||||
|
} |
||||
|
|
||||
|
function isIOS() { |
||||
|
const u = navigator.userAgent; |
||||
|
return !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); |
||||
|
} |
||||
|
|
||||
|
export default function Download() { |
||||
|
return ( |
||||
|
<> |
||||
|
<div className={styles.download}> |
||||
|
<img className={styles.bgImage} src={bgPng} alt="background image" /> |
||||
|
<button onClick={() => { |
||||
|
if (isAndroid()) { |
||||
|
window.open( |
||||
|
`http://hn-fm-oss.mangguonews.com/bkb/BKB_release.apk?${new Date().getTime()}`); |
||||
|
} else if(isIOS()) { |
||||
|
window.open( |
||||
|
`https://apps.apple.com/us/app/bkb-app/id6474423781`); |
||||
|
} else { |
||||
|
window.open( |
||||
|
`http://hn-fm-oss.mangguonews.com/bkb/BKB_release.apk?${new Date().getTime()}`); |
||||
|
} |
||||
|
}} |
||||
|
className={styles.button} |
||||
|
> |
||||
|
Download |
||||
|
</button> |
||||
|
</div> |
||||
|
</> |
||||
|
); |
||||
|
} |
@ -0,0 +1,32 @@ |
|||||
|
.download{ |
||||
|
margin: 0 auto; |
||||
|
min-height: 100vh; |
||||
|
height: auto; |
||||
|
overflow-x: hidden; |
||||
|
position: relative; |
||||
|
background-color: #e1f6fe; |
||||
|
.bgImage{ |
||||
|
position: relative; |
||||
|
width: 100%; |
||||
|
height: auto; |
||||
|
} |
||||
|
.button{ |
||||
|
position: fixed; |
||||
|
width: 83vw; |
||||
|
height: 54px; |
||||
|
background: #45B5C4; |
||||
|
border-radius: 2.25rem; |
||||
|
font-family: PingFangSC, PingFang SC; |
||||
|
font-weight: 600; |
||||
|
font-size: 16px; |
||||
|
color: #FFFFFF; |
||||
|
line-height: 54px; |
||||
|
text-align: center; |
||||
|
font-style: normal; |
||||
|
border:none; |
||||
|
bottom: 40px; |
||||
|
z-index: 999; |
||||
|
left: 50%; |
||||
|
transform: translateX(-50%); |
||||
|
} |
||||
|
} |
@ -0,0 +1,4 @@ |
|||||
|
|
||||
|
.normal { |
||||
|
background: #C6F279; |
||||
|
} |
@ -0,0 +1,8 @@ |
|||||
|
import Home from '../../Home'; |
||||
|
|
||||
|
export default function Index() { |
||||
|
return ( |
||||
|
// eslint-disable-next-line react/react-in-jsx-scope |
||||
|
<Home /> |
||||
|
); |
||||
|
} |
@ -0,0 +1,10 @@ |
|||||
|
<!doctype html> |
||||
|
<html> |
||||
|
<head> |
||||
|
<meta charset="utf-8" /> |
||||
|
<title>长沙一个地球网络科技有限公司</title> |
||||
|
</head> |
||||
|
<body> |
||||
|
<div id="root"></div> |
||||
|
</body> |
||||
|
</html> |