Commit cc73a66b authored by wuhao's avatar wuhao 🎯

asder

parent 9c8a6218
...@@ -123,14 +123,12 @@ export default [ ...@@ -123,14 +123,12 @@ export default [
component: '@/pages/index', component: '@/pages/index',
routes: [ routes: [
{ {
path: '/cgx/cgxpt',
name: '南京智能制造装备产业促进会产供需平台', name: '南京智能制造装备产业促进会产供需平台',
component: '@/pages/index', path: 'http://www.jsiea.com/cgx/#/welcome',
}, },
{ {
path: '/cgx/lim',
name: '江苏省智能装备产业联盟数控机床产供需平台', name: '江苏省智能装备产业联盟数控机床产供需平台',
component: '@/pages/index', path: 'http://njime.cn/cgx/#/welcome',
}, },
], ],
}, },
......
...@@ -80,6 +80,18 @@ body, ...@@ -80,6 +80,18 @@ body,
background-size: 400% 400%; background-size: 400% 400%;
animation: bgmove 20s linear 0s infinite alternate forwards; animation: bgmove 20s linear 0s infinite alternate forwards;
} }
.bglightc {
background-image: linear-gradient(
145deg,
#bee9ff 0%,
#99dbff 25%,
#ffc4f1 50%,
#99dbff 75%,
#bee9ff 100%
);
background-size: 400% 400%;
animation: bgmove 20s linear 0s infinite alternate forwards;
}
@keyframes bgmove { @keyframes bgmove {
0% { 0% {
...@@ -969,3 +981,31 @@ body, ...@@ -969,3 +981,31 @@ body,
} }
} }
} }
.olik {
> div {
overflow-x: hidden;
margin-right: -15px !important;
margin-bottom: -15px !important;
}
> div:last-child {
right: 17px !important;
opacity: 0.8 !important;
display: block !important;
}
}
.ant-modal-confirm-content {
margin-left: 0 !important;
margin-top: 1rem !important;
}
.submit {
* {
font-size: 0.6rem;
}
b {
color: #f74249;
}
label {
display: block;
margin-bottom: 0.6rem;
}
}
import React, { useState, useRef, useMemo, useEffect } from 'react'; import React, { useState, useRef, useMemo, useEffect } from 'react';
import styles from './index.less'; import styles from './index.less';
import { Menu, Grid, Drawer, Tooltip, Row, Col } from 'antd'; import {
Menu,
Grid,
Drawer,
Tooltip,
Row,
Col,
Input,
Modal,
message,
} from 'antd';
import { history, Helmet } from 'umi'; import { history, Helmet } from 'umi';
import routes from '../../routes'; import routes from '../../routes';
import { import {
...@@ -11,13 +21,14 @@ import { ...@@ -11,13 +21,14 @@ import {
} from '@ant-design/icons'; } from '@ant-design/icons';
import { Scrollbars } from 'react-custom-scrollbars'; import { Scrollbars } from 'react-custom-scrollbars';
import Footer from './footer'; import Footer from './footer';
import { doFetch } from '@/utils/doFetch';
const { useBreakpoint } = Grid; const { useBreakpoint } = Grid;
const colc = { xs: 24, sm: 24, md: 12, lg: 12, xl: 12, xxl: 12 }, const col = { xs: 24, sm: 24, md: 12, lg: 5, xl: 5, xxl: 5 },
col = { xs: 24, sm: 24, md: 10, lg: 10, xl: 10, xxl: 10 }, cola = { xs: 24, sm: 24, md: 24, lg: 4, xl: 4, xxl: 4 },
cold = { xs: 24, sm: 24, md: 8, lg: 8, xl: 8, xxl: 8 }, cold = { xs: 24, sm: 24, md: 8, lg: 8, xl: 8, xxl: 8 },
colds = { xs: 24, sm: 24, md: 12, lg: 8, xl: 8, xxl: 8 }, colds = { xs: 24, sm: 24, md: 24, lg: 16, xl: 16, xxl: 16 },
cols = { xs: 24, sm: 24, md: 14, lg: 14, xl: 14, xxl: 14 }; cols = { xs: 24, sm: 24, md: 14, lg: 14, xl: 14, xxl: 14 };
const mapTree = (org) => { const mapTree = (org) => {
...@@ -43,8 +54,12 @@ const MenuRender = ({ arrs, mode, activeKey }) => { ...@@ -43,8 +54,12 @@ const MenuRender = ({ arrs, mode, activeKey }) => {
mode={mode ?? 'horizontal'} mode={mode ?? 'horizontal'}
activeKey={activeKey} activeKey={activeKey}
items={arrs} items={arrs}
onClick={({ item, key, keyPath, domEvent }) => { onClick={({ items, key, keyPath, domEvent }) => {
history.push(key); if (key.includes('http')) {
window.open(key);
} else {
history.push(key);
}
}} }}
/> />
); );
...@@ -54,6 +69,10 @@ function Layout({ children, location }) { ...@@ -54,6 +69,10 @@ function Layout({ children, location }) {
const [collspan, setcollspan] = useState(false); const [collspan, setcollspan] = useState(false);
const scrollRef = useRef(); const scrollRef = useRef();
const screens = useBreakpoint(); const screens = useBreakpoint();
const [vals, setvals] = useState({});
const [colls, setcolls] = useState(false);
const [changes, setchanges] = useState(false);
const arrs = useMemo(() => { const arrs = useMemo(() => {
let arr = []; let arr = [];
routes.map((org) => { routes.map((org) => {
...@@ -72,6 +91,29 @@ function Layout({ children, location }) { ...@@ -72,6 +91,29 @@ function Layout({ children, location }) {
}); });
}, [location.pathname]); }, [location.pathname]);
function setval(key, val) {
setvals((s) => ({
...s,
[key]: val,
}));
}
const styled = useMemo(() => {
if (changes) {
return {
width: '100%',
};
} else {
return {
position: 'fixed',
bottom: 0,
left: 0,
width: '100%',
zIndex: 222,
};
}
}, [changes]);
return ( return (
<div className={styles.container}> <div className={styles.container}>
<Helmet encodeSpecialCharacters={false}> <Helmet encodeSpecialCharacters={false}>
...@@ -116,7 +158,33 @@ function Layout({ children, location }) { ...@@ -116,7 +158,33 @@ function Layout({ children, location }) {
}} }}
/> />
<Tooltip title="产品演示" placement="bottom"> <Tooltip title="产品演示" placement="bottom">
<PlayCircleFilled style={{ fontSize: 20, color: '#000000' }} /> <PlayCircleFilled
style={{ fontSize: 20, color: '#000000' }}
onClick={async () => {
let res = await doFetch({
url: '/video/detail',
params: {},
});
Modal.info({
title: '产品演示',
width: '66vw',
content: (
<video
src={res?.data?.data?.videoUrl}
style={{ width: '100%' }}
controls
autoPlay
/>
),
okButtonProps: {
style: {
display: 'none',
},
},
maskClosable: true,
});
}}
/>
</Tooltip> </Tooltip>
</div> </div>
) : ( ) : (
...@@ -134,6 +202,27 @@ function Layout({ children, location }) { ...@@ -134,6 +202,27 @@ function Layout({ children, location }) {
color: '#fff', color: '#fff',
cursor: 'pointer', cursor: 'pointer',
}} }}
onClick={async () => {
let res = await doFetch({ url: '/video/detail', params: {} });
Modal.info({
title: '产品演示',
width: '66vw',
content: (
<video
src={res?.data?.data?.videoUrl}
style={{ width: '100%' }}
controls
autoPlay
/>
),
okButtonProps: {
style: {
display: 'none',
},
},
maskClosable: true,
});
}}
> >
<PlayCircleFilled <PlayCircleFilled
style={{ fontSize: 20, color: '#ffffff', marginRight: 6 }} style={{ fontSize: 20, color: '#ffffff', marginRight: 6 }}
...@@ -145,26 +234,203 @@ function Layout({ children, location }) { ...@@ -145,26 +234,203 @@ function Layout({ children, location }) {
</div> </div>
</header> </header>
<Scrollbars <Scrollbars
thumbMinSize={10} thumbMinSize={100}
autoHide autoHide
style={{ style={{
width: '100%', width: '100%',
height: 'calc(100vh - 80px)', height: 'calc( 100vh - 80px )',
overflowX: 'hidden', overflowX: 'hidden',
position: 'relative',
}} }}
hideTracksWhenNotNeeded={true} hideTracksWhenNotNeeded
ref={scrollRef} ref={scrollRef}
className="olik"
onScroll={(e) => {
let divheight = document.getElementById('webFooter').clientHeight;
if (
e.target.scrollTop <
e.target.firstChild.clientHeight - divheight
) {
setchanges(false);
} else {
setchanges(true);
}
}}
> >
<div className="content">{children}</div> <div className="content">{children}</div>
<div className={styles.navbar}> <div className={styles.navbar} style={styled}>
<Row> {colls && (
<Col {...cold}> <Row
<PhoneFilled /> style={{
width: '100%',
marginBottom: '1rem',
}}
className="submit"
gutter={36}
>
<Col {...col} style={{ margin: '0.3rem 0' }}>
<label htmlFor="contact">
<b>*</b> 联系人
</label>
<Input
name="contact"
value={vals.contact}
onChange={(e) => {
setval('contact', e.target.value);
}}
/>
</Col>
<Col {...col} style={{ margin: '0.3rem 0' }}>
<label htmlFor="telephone">
<b>*</b> 联系方式
</label>
<Input
name="telephone"
value={vals.telephone}
onChange={(e) => {
setval('telephone', e.target.value);
}}
/>
</Col>
<Col {...col} style={{ margin: '0.3rem 0' }}>
<label htmlFor="companyName">
<b>*</b> 公司名称
</label>
<Input
name="companyName"
value={vals.companyName}
onChange={(e) => {
setval('companyName', e.target.value);
}}
/>
</Col>
<Col {...col} style={{ margin: '0.3rem 0' }}>
<label htmlFor="trade">所属行业(选填)</label>
<Input
name="trade"
value={vals.trade}
onChange={(e) => {
setval('trade', e.target.value);
}}
/>
</Col>
<Col
{...cola}
style={{
display: 'flex',
justifyContent: 'center',
alignItems: 'flex-end',
margin: '0.3rem 0',
}}
>
<div
className={`${styles.diybtn} bglightc`}
style={{
color: '#ffffff',
textShadow: '0px 0px 2px #999999',
}}
onClick={() => {
if (!vals.contact || !vals.telephone || !vals.companyName) {
message.warn('请填写必填项!');
return;
}
doFetch({
url: '/customerAdvice/add',
params: { ...vals },
}).then((res) => {
if (res.code == '0000') {
message.success(
'我们已收到您的申请,稍后将有专员联系您...',
);
}
});
}}
>
提交
</div>
</Col>
</Row>
)}
<Row
gutter={36}
style={{
width: '100%',
}}
>
<Col
{...cola}
className="center"
style={{ fontSize: '0.8rem', margin: '0.3rem 0' }}
>
<div
className="center"
style={{
marginRight: 18,
border: '1px solid rgba(1, 92, 172, 1)',
color: 'rgba(1, 92, 172, 1)',
width: '1.5rem',
height: '1.5rem',
borderRadius: '50%',
}}
>
<PhoneFilled rotate={90} />
</div>
025-86111901
</Col>
<Col
{...colds}
className="center"
style={{
fontSize: '0.8rem',
cursor: 'pointer',
margin: '0.3rem 0',
}}
onClick={() => {
Modal.info({
title: '添加微信',
content: (
<img
src={require('@/assets/qrcode.png')}
style={{ width: '100%' }}
/>
),
okButtonProps: {
style: { display: 'none' },
},
maskClosable: true,
});
}}
>
<div
className="center"
style={{
marginRight: 18,
color: 'rgba(1, 92, 172, 1)',
backgroundColor: 'rgba(69, 176, 53, 1)',
width: '1.5rem',
height: '1.5rem',
borderRadius: '50%',
}}
>
<WechatFilled style={{ color: '#FFFFFF' }} />
</div>
微信咨询
</Col> </Col>
<Col {...cold}> <Col
<WechatFilled /> {...cola}
className="center"
style={{ fontSize: '0.8rem', margin: '0.3rem 0' }}
>
<div
className={styles.diybtn}
onClick={() => {
setcolls(!colls);
}}
>
{!colls ? '免费体验' : '取消'}
</div>
</Col> </Col>
<Col {...cold}></Col>
</Row> </Row>
</div> </div>
<Footer></Footer> <Footer></Footer>
......
...@@ -80,3 +80,22 @@ ...@@ -80,3 +80,22 @@
} }
} }
} }
.navbar {
padding: 1rem !important;
border-top: 1px solid #f0f0f0 !important;
background-color: #ffffff;
}
.diybtn {
font-size: 0.8rem !important;
letter-spacing: 2px;
width: 6rem;
height: 2rem;
background-color: aliceblue;
border-radius: 6rem;
display: flex;
justify-content: center;
align-items: center;
cursor: pointer;
color: #000000;
}
import styles from './index.less'; import styles from './index.less';
import { Link, useModel } from 'umi'; import { Link, history } from 'umi';
import React, { useState, useEffect, useRef } from 'react'; import React, { useState, useEffect, useRef } from 'react';
import { Carousel, Button, Row, Col, Card, Tooltip, Grid } from 'antd'; import { Carousel, Button, Row, Col, Card, Tooltip, Grid } from 'antd';
import { doFetch } from '@/utils/doFetch'; import { doFetch } from '@/utils/doFetch';
...@@ -38,32 +38,32 @@ const production = { ...@@ -38,32 +38,32 @@ const production = {
{ {
title: 'MES智能制造管理系统', title: 'MES智能制造管理系统',
desc: '南高智能制造管理系统(MES) 是应用于生产制造车间的生产信息化管理系统。', desc: '南高智能制造管理系统(MES) 是应用于生产制造车间的生产信息化管理系统。',
detail: '', detail: '/factory/typea/mes',
}, },
{ {
title: 'WMS智能仓储管理系统', title: 'WMS智能仓储管理系统',
desc: '南高智能仓储管理系统(WMS)是应用于仓储作业管理的仓储信息化管理系统。', desc: '南高智能仓储管理系统(WMS)是应用于仓储作业管理的仓储信息化管理系统。',
detail: '', detail: '/factory/typea/wms',
}, },
{ {
title: 'EMS设备运维管理系统', title: 'EMS设备运维管理系统',
desc: '设备管理系统提供公有云、私有云两种部署方式,可为企业提供定制化开发服务,投入少、见效快。 ', desc: '设备管理系统提供公有云、私有云两种部署方式,可为企业提供定制化开发服务,投入少、见效快。 ',
detail: '', detail: '/factory/typea/ems',
}, },
{ {
title: 'IOT数据采集系统', title: 'IOT数据采集系统',
desc: '组合各种物联网硬件采集多种数据,通过南高工业互联网平台,可上实现数据监测和设备控制。', desc: '组合各种物联网硬件采集多种数据,通过南高工业互联网平台,可上实现数据监测和设备控制。',
detail: '', detail: '/factory/typea/iot',
}, },
{ {
title: 'PLM产品生命周期管理系统', title: 'PLM产品生命周期管理系统',
desc: '依托领先产品技术及解决方案,为企业提供了一整套全方位的数字化产品生命周期管理平台。', desc: '依托领先产品技术及解决方案,为企业提供了一整套全方位的数字化产品生命周期管理平台。',
detail: '', detail: '/factory/typea/plm',
}, },
{ {
title: 'PDM产品数据管理系统', title: 'PDM产品数据管理系统',
desc: '南高智能仓储管理系统(WMS)是应用于仓储作业管理的仓储信息化管理系统。', desc: '南高智能仓储管理系统(WMS)是应用于仓储作业管理的仓储信息化管理系统。',
detail: '', detail: '/factory/typea/pdm',
}, },
], ],
l: [ l: [
...@@ -304,7 +304,15 @@ function IndexPage({ route }) { ...@@ -304,7 +304,15 @@ function IndexPage({ route }) {
<div className="textcontainer"> <div className="textcontainer">
<h2>{item.title}</h2> <h2>{item.title}</h2>
<p className="twoline">{item.desc}</p> <p className="twoline">{item.desc}</p>
<Button className="btn">查看详情</Button> <Button
className="btn"
size="large"
onClick={() => {
history.push(item.detail);
}}
>
查看详情
</Button>
</div> </div>
</div> </div>
); );
...@@ -348,6 +356,9 @@ function IndexPage({ route }) { ...@@ -348,6 +356,9 @@ function IndexPage({ route }) {
ghost ghost
style={{ margin: '0 auto', display: 'block' }} style={{ margin: '0 auto', display: 'block' }}
size="large" size="large"
onClick={() => {
history.push('/about/insert');
}}
> >
查看详情 查看详情
</Button> </Button>
...@@ -421,6 +432,9 @@ function IndexPage({ route }) { ...@@ -421,6 +432,9 @@ function IndexPage({ route }) {
ghost ghost
style={{ margin: '0 auto', display: 'block' }} style={{ margin: '0 auto', display: 'block' }}
size="large" size="large"
onClick={() => {
history.push('/together');
}}
> >
查看详情 查看详情
</Button> </Button>
...@@ -472,6 +486,14 @@ function IndexPage({ route }) { ...@@ -472,6 +486,14 @@ function IndexPage({ route }) {
></div> ></div>
} }
hoverable hoverable
onClick={() => {
history.push({
pathname: '/about/newsdetail',
query: {
id: zixun?.data[0]?.id,
},
});
}}
> >
<Meta <Meta
title={ title={
...@@ -533,6 +555,14 @@ function IndexPage({ route }) { ...@@ -533,6 +555,14 @@ function IndexPage({ route }) {
className="secitem" className="secitem"
key={it.id} key={it.id}
style={{ marginBottom: '1rem' }} style={{ marginBottom: '1rem' }}
onClick={() => {
history.push({
pathname: '/about/newsdetail',
query: {
id: it?.id,
},
});
}}
> >
<div <div
className="spread" className="spread"
......
...@@ -67,13 +67,23 @@ function Together() { ...@@ -67,13 +67,23 @@ function Together() {
作为“江苏省智能装备产业联盟”和“南京市智能制造装备产业促进会”的秘书长单位,南高智能一直积极地推动并联合与产业相关的政府部门、科研院所、优秀企业代表等,致力于建立真正全连接的产业生态,将拥有智能制造共同理念的参与者联合起来,成为未来整个智能制造产业生态建设的驱动者和践行者。 作为“江苏省智能装备产业联盟”和“南京市智能制造装备产业促进会”的秘书长单位,南高智能一直积极地推动并联合与产业相关的政府部门、科研院所、优秀企业代表等,致力于建立真正全连接的产业生态,将拥有智能制造共同理念的参与者联合起来,成为未来整个智能制造产业生态建设的驱动者和践行者。
</p> </p>
<div className="centerl"> <div className="centerl">
<Card hoverable> <Card
hoverable
onClick={() => {
window.open('http://www.jsiea.com/');
}}
>
<img src={require(`@/assets/icon1.png`)} alt="" /> <img src={require(`@/assets/icon1.png`)} alt="" />
<span style={{ fontSize: '0.6rem', marginTop: 12 }}> <span style={{ fontSize: '0.6rem', marginTop: 12 }}>
江苏省智能装备产业联盟 江苏省智能装备产业联盟
</span> </span>
</Card> </Card>
<Card hoverable> <Card
hoverable
onClick={() => {
window.open('http://njime.cn/');
}}
>
<img src={require(`@/assets/icon2.png`)} alt="" /> <img src={require(`@/assets/icon2.png`)} alt="" />
<span style={{ fontSize: '0.6rem', marginTop: 12 }}> <span style={{ fontSize: '0.6rem', marginTop: 12 }}>
南京市智能制造装备产业促进会 南京市智能制造装备产业促进会
......
...@@ -106,7 +106,6 @@ request.interceptors.response.use(async (response, options) => { ...@@ -106,7 +106,6 @@ request.interceptors.response.use(async (response, options) => {
message.warn(data?.msg); message.warn(data?.msg);
if (data?.code == '0001' && window.location.href.indexOf('login') == -1) { if (data?.code == '0001' && window.location.href.indexOf('login') == -1) {
localStorage.clear(); localStorage.clear();
history.replace('/user/login');
} }
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment