Commit 34748e22 authored by wuhao's avatar wuhao 🎯

aser

parent 2d860ac1
......@@ -3,6 +3,14 @@ import routes from './routes';
export default defineConfig({
antd: {
dark: false,
compact: true,
},
locale: {
// default zh-CN
default: 'zh-CN',
antd: true,
// default true, when it is true, will use `navigator.language` overwrite default
baseNavigator: true,
},
nodeModulesTransform: {
type: 'none',
......
......@@ -24,15 +24,22 @@ export default [
component: '@/pages/about/honer',
},
{
path: '/about/join',
name: '加入南高',
component: '@/pages/index',
path: '/about/news',
name: '南高资讯',
component: '@/pages/about/news',
},
{
path: '/about/news',
path: '/about/newsdetail',
name: '南高资讯',
component: '@/pages/index',
component: '@/pages/about/newsdetail',
hideInMenu: true,
},
{
path: '/about/join',
name: '加入南高',
component: '@/pages/about/join',
},
{
path: '/about/contact',
name: '联系我们',
......
export async function getInitialState() {
return {
a: 1,
};
}
......@@ -26,6 +26,10 @@ body,
.ant-drawer-body {
padding: 0 !important;
}
.centerl {
display: flex;
align-items: center;
}
.center {
display: flex;
justify-content: center;
......@@ -269,6 +273,13 @@ body,
.ant-menu-title-content {
font-size: 16px !important;
}
.sections {
padding: 2rem;
position: relative;
.ant-card-body {
background-color: #f0f0f0;
}
}
.section {
padding: 2rem;
position: relative;
......@@ -377,7 +388,7 @@ body,
}
&:hover {
.textcontainer {
background-color: @primary-color;
background-color: #1890ff;
padding: 16px;
position: absolute;
bottom: 0px;
......@@ -431,7 +442,7 @@ body,
}
li.slick-active {
button {
background-color: @primary-color !important;
background-color: #1890ff !important;
height: 6px !important;
width: 46px !important;
border-radius: 8px !important;
......@@ -476,3 +487,21 @@ body,
}
}
}
.ant-pagination-total-text {
line-height: 30px !important;
}
.html {
img {
max-width: 100%;
margin: 0 auto;
display: block;
}
}
.hoverable {
cursor: pointer;
font-size: 0.6rem;
transition: all 0.4s;
&:hover {
color: #1890ff !important;
}
}
......@@ -13,13 +13,13 @@ const tabs = [
component: '@/pages/index',
},
{
path: '/about/join',
name: '加入南高',
path: '/about/news',
name: '南高资讯',
component: '@/pages/index',
},
{
path: '/about/news',
name: '南高资讯',
path: '/about/join',
name: '加入南高',
component: '@/pages/index',
},
{
......
import React, { useState, useEffect } from 'react';
import styles from './index.less';
import { Row, Col } from 'antd';
import { Row, Col, Image } from 'antd';
import { useRequest } from 'ahooks';
import { doFetch } from '@/utils/doFetch';
import { EyeFilled } from '@ant-design/icons';
const col = { xs: 24, sm: 24, md: 12, lg: 12, xl: 12, xxl: 12 };
function Insert() {
const { data, loading } = useRequest(async () => {
let zizhi = await doFetch({ url: '/honor/list', params: { type: '1' } });
let honer = await doFetch({ url: '/honor/list', params: { type: '2' } });
let hangye = await doFetch({ url: '/honor/list', params: { type: '3' } });
let zhishi = await doFetch({ url: '/honor/list', params: { type: '4' } });
return {
zizhi: zizhi?.data?.dataList,
honer: honer?.data?.dataList,
hangye: hangye?.data?.dataList,
zhishi: zhishi?.data?.dataList,
};
});
return (
<div>
<div className="section">
......@@ -17,110 +33,131 @@ function Insert() {
>
企业资质
</h2>
<p className={styles.intro}>
江苏南高智能装备创新中心有限公司是由东南大学牵头,联合地方政府和省内高档数控机床及成套装备行业的数家龙头企业共同创立的专注于数控机床及成套装备领域的高新技术企业。
</p>
<p className={styles.intro}>
江苏南高是<b>“江苏省智能装备产业联盟”</b>
<b>“南京智能制造装备产业促进会”</b>的秘书长单位。
</p>
<p className={styles.intro}>
江苏南高是<b>“江苏省高档数控机床及成套装备创新中心”</b>的运营主体。
</p>
<p className={styles.intro}>
公司拥有自主知识产权的MOM制造运营管理系统,MES制造执行系统,WMS智能仓储系统,IOT工业互联网平台以及智能网关,结合数字孪生、机器视觉、AI、5G等新兴技术,帮助制造业企业打造数字化智慧工厂,累计服务合同到账收入超过5000万元。
</p>
</div>
<div className="section">
<Row>
<Col {...col}>
<div
className="img"
style={{
backgroundImage: `url(${require('@/assets/insert1.png')})`,
width: '100%',
height: '100%',
minHeight: 330,
paddingBottom: '1rem',
}}
></div>
</Col>
<Col {...col} className={styles.format}>
<h2>江苏省数控机床及成套装备创新中心</h2>
<p>
江苏省高档数控机床及成套装备创新中心于2018年2月被批准成为省制造业创新中心试点单位。
</p>
<div>中心任务</div>
<p>
1、开展行业基础和共性技术研究,提高高档数控机床及成套装备行业的技术水平;
<br />
2、促进重大科技成果的转化,高端技术人才的培养;
<br />
3、整合行业资源,为行业企业提供技术服务;
<br />
4、形成具有全球影响力的制造业创新中心,引领产业发展。
<br />
</p>
<p>
创新中心围绕数控机床的五大研究领域(机床智能化设计;机床制造技术;机床整机技术;机床运维技术;机床关键部件技术),设立了19个研究室,拥有一支由院士领衔的200多人的一流研发团队。
</p>
<div>核心功能</div>
<p>
<span>数控机床共性技术研发中心</span>
<span>中试与成果孵化基地</span>
<span>数控机床行业智库</span>
</p>
</Col>
</Row>
<Image.PreviewGroup>
<div className={styles?.column}>
{data?.zizhi?.map((it, i) => {
return (
<div className={styles?.item}>
<Image
preview={{
mask: (
<>
<EyeFilled></EyeFilled> &nbsp;预览
</>
),
}}
src={it.picUrl}
alt=""
/>
<div className={styles?.title}>{it?.name}</div>
</div>
);
})}
</div>
</Image.PreviewGroup>
</div>
<div className="section">
<h2 className="title" style={{ color: '#3064c9' }}>
管理团队
</h2>
<p className={styles.intro}>
创新中心实行企业化运作,由董事会行使重大决策权,管理团队负责中心的具体运营管理。公司董事长兼任公司法人,决定公司和创新中心的重大决策。公司总经理担任创新中心主任,负责创新中心的技术研究和公司的日常管理。
</p>
<img
className={styles.introimg}
src={require('@/assets/insert2.jpg')}
alt=""
/>
<h2 className="title" style={{ color: '#3064c9' }}>
研究室主任
<h2
style={{
textAlign: 'center',
marginBottom: '1.4rem',
fontSize: '1.2rem',
}}
>
行业担当
</h2>
<img
className={styles.introimg}
src={require('@/assets/insert3.jpg')}
alt=""
/>
<Image.PreviewGroup>
<div className={styles?.column}>
{data?.hangye?.map((it, i) => {
return (
<div className={styles?.item}>
<Image
preview={{
mask: (
<>
<EyeFilled></EyeFilled> &nbsp;预览
</>
),
}}
src={it.picUrl}
alt=""
/>
<div className={styles?.title}>{it?.name}</div>
</div>
);
})}
</div>
</Image.PreviewGroup>
</div>
<div className="section">
<h2 className="title">研究领域</h2>
<img
className={styles.introimg}
src={require('@/assets/insert4.jpg')}
alt=""
/>
<h2
style={{
textAlign: 'center',
marginBottom: '1.4rem',
fontSize: '1.2rem',
}}
>
政府荣誉
</h2>
<Image.PreviewGroup>
<div className={styles?.column}>
{data?.honer?.map((it, i) => {
return (
<div className={styles?.item}>
<Image
preview={{
mask: (
<>
<EyeFilled></EyeFilled> &nbsp;预览
</>
),
}}
src={it.picUrl}
alt=""
/>
<div className={styles?.title}>{it?.name}</div>
</div>
);
})}
</div>
</Image.PreviewGroup>
</div>
<div className="section">
<h2 className="title">我们的投资人</h2>
<div className={styles?.ibo}>
{new Array(7).fill('').map((it, i) => {
return (
<img
src={require(`@/assets/ibo/tz${i + 1}.png`)}
alt=""
style={{ height: 68, width: 'auto', display: 'block' }}
/>
);
})}
</div>
<h2
style={{
textAlign: 'center',
marginBottom: '1.4rem',
fontSize: '1.2rem',
}}
>
知识产权
</h2>
<Image.PreviewGroup>
<div className={styles?.column}>
{data?.zhishi?.map((it, i) => {
return (
<div className={styles?.item}>
<Image
preview={{
mask: (
<>
<EyeFilled></EyeFilled> &nbsp;预览
</>
),
}}
src={it.picUrl}
alt=""
/>
<div className={styles?.title}>{it?.name}</div>
</div>
);
})}
</div>
</Image.PreviewGroup>
</div>
<img
src={require(`@/assets/inserts.jpg`)}
alt=""
style={{ width: '100%', display: 'block' }}
/>
</div>
);
}
......
......@@ -38,3 +38,73 @@
flex-wrap: wrap;
margin: 0 auto;
}
.column {
column-span: all !important;
}
@media (min-width: 400px) {
.column {
column-count: 1; // two columns on larger phones
column-gap: 12px;
}
.rt {
width: 0px;
overflow: hidden;
border-left: #ddd solid 1px;
}
}
@media (min-width: 768px) {
.column {
column-count: 2; // two columns on larger phones
column-gap: 12px;
}
.rt {
width: 140px;
border-left: #ddd solid 1px;
}
}
@media (min-width: 992px) {
.column {
column-count: 3; // three columns on...you get it
column-gap: 12px;
}
}
@media (min-width: 1200px) {
.column {
column-count: 4; // three columns on...you get it
column-gap: 12px;
}
}
@media (min-width: 1660px) {
.column {
column-count: 6; // three columns on...you get it
column-gap: 12px;
}
}
.item {
display: inline-block;
box-sizing: border-box;
width: 100%;
padding-bottom: 12px;
overflow: hidden;
float: left;
img {
width: 100%;
}
.title {
display: flex;
justify-content: center;
align-items: center;
width: 100%;
padding: 8px 12px 0 12px;
text-align: center;
}
}
import React, { useState, useEffect } from 'react';
import styles from './index.less';
import { Row, Col, Image, Pagination, Card, Tag } from 'antd';
import { useRequest } from 'ahooks';
import { doFetch } from '@/utils/doFetch';
import { EyeFilled } from '@ant-design/icons';
import { history } from 'umi';
const col = { xs: 24, sm: 12, md: 12, lg: 8, xl: 8, xxl: 6 };
const { Meta } = Card;
function Join() {
const { data, loading } = useRequest(async () => {
let data = await doFetch({
url: '/recruit/limitList',
params: { limitNum: 1000 },
});
return data?.data?.dataList;
});
const onChange = (pageIndex, pageSize) => {
setpage({
pageIndex,
pageSize,
});
};
return (
<div className="section">
<h2 className="title">招聘岗位</h2>
<p style={{ textAlign: 'center', fontSize: '0.6rem' }}>
如果您对我们感兴趣,欢迎投递简历至
<a href="mailto:chenjie@jsnangao.com" target="_blank">
chenjie@jsnangao.com
</a>
,邮件主题格式:<a>岗位名称+姓名+学校+学历,</a>更多招聘信息请详询:
<a href="tel:025-52187179">025-52187179</a>,期待您的加入!
</p>
<Row gutter={24}>
{data?.map?.((it, i) => {
return (
<Col {...col} style={{ marginBottom: 24 }}>
<Card
hoverable
style={{
width: '100%',
}}
onClick={() => {
history.push({
pathname: '/about/newsdetail',
query: {
id: it.id,
},
});
}}
>
<p
style={{
fontSize: '0.8rem',
width: '100%',
marginTop: '1rem',
}}
className="spread"
>
<span>{it?.positionName}</span>
<span style={{ color: 'rgba(255, 103, 47, 1)' }}>
{it?.salary}
</span>
</p>
<div className="centerl">
{it.positionDepartment && (
<Tag
color="blue"
style={{ fontSize: '0.6rem', padding: '0.2rem' }}
>
{it.positionDepartment}
</Tag>
)}
{it.education && (
<Tag
color="cyan"
style={{ fontSize: '0.6rem', padding: '0.2rem' }}
>
{it.education}
</Tag>
)}
{it.wordExperience && (
<Tag
color="geekblue"
style={{ fontSize: '0.6rem', padding: '0.2rem' }}
>
{it.wordExperience}
</Tag>
)}
</div>
<div className="centerl" style={{ marginTop: '1rem' }}>
<div
style={{
backgroundColor: '#f0f0f0',
padding: '6px 12px',
fontSize: '0.6rem',
display: 'inline-block',
width: '4rem',
}}
classNam="center"
>
<span>
<span
style={{
fontSize: '1.2rem',
color: 'rgba(12, 100, 201, 1)',
marginRight: 6,
}}
>
{it?.hiringNum}
</span>
</span>
<br />
<span>招聘人数</span>
</div>
<div
style={{
backgroundColor: '#f0f0f0',
padding: '6px 12px',
fontSize: '0.6rem',
display: 'inline-block',
marginLeft: '1rem',
}}
classNam="center"
>
<span>工作地点</span>
<br />
<span
style={{
fontSize: '0.4rem',
color: 'rgba(12, 100, 201, 1)',
marginRight: 6,
}}
>
{it?.workAddress}
</span>
</div>
</div>
</Card>
</Col>
);
})}
</Row>
</div>
);
}
export default Join;
import React, { useState, useEffect } from 'react';
import styles from './index.less';
import { Row, Col, Image, Pagination, Card } from 'antd';
import { useRequest } from 'ahooks';
import { doFetch } from '@/utils/doFetch';
import { EyeFilled } from '@ant-design/icons';
import { history } from 'umi';
const col = { xs: 24, sm: 12, md: 12, lg: 8, xl: 8, xxl: 6 };
const { Meta } = Card;
function Insert() {
const [page, setpage] = useState({ pageIndex: 1, pageSize: 10 });
const [total, settotal] = useState();
const { data, loading } = useRequest(
async () => {
let data = await doFetch({
url: '/realTimeInfo/page',
params: page,
});
settotal(data?.data?.page?.total);
return data?.data?.page?.records;
},
{
refreshDeps: [page],
},
);
const onChange = (pageIndex, pageSize) => {
setpage({
pageIndex,
pageSize,
});
};
return (
<div className="sections">
<Row gutter={24}>
{data?.map?.((it, i) => {
return (
<Col {...col} style={{ marginBottom: 24 }}>
<Card
hoverable
bordered={false}
style={{
width: '100%',
}}
cover={
<div
style={{
backgroundImage: `url(${it?.picUrl})`,
height: '288px',
}}
className="img"
/>
}
onClick={() => {
history.push({
pathname: '/about/newsdetail',
query: {
id: it.id,
},
});
}}
>
<Meta
title={
<span style={{ fontSize: '0.8rem' }}>{it?.title}</span>
}
description={
<span style={{ fontSize: '0.6rem' }}>
{it?.releaseTime}
</span>
}
/>
</Card>
</Col>
);
})}
</Row>
<div className="center">
<Pagination
current={page?.pageIndex}
showQuickJumper
total={total}
onChange={onChange}
showTotal={(total, range) =>
`${total} 条中的 ${range[0]}-${range[1]}`
}
/>
</div>
</div>
);
}
export default Insert;
import React, { useState, useEffect } from 'react';
import styles from './index.less';
import { Row, Col, Image, Pagination, Card, Divider } from 'antd';
import { useRequest } from 'ahooks';
import { doFetch } from '@/utils/doFetch';
import { EyeFilled } from '@ant-design/icons';
import { history } from 'umi';
const col = { xs: 24, sm: 12, md: 12, lg: 8, xl: 8, xxl: 6 };
const { Meta } = Card;
function Insert({ location: { query } }) {
const [curid, setcurid] = useState(query.id);
const { data, loading } = useRequest(
async () => {
let data = await doFetch({
url: '/realTimeInfo/detail',
params: { id: curid },
});
return data?.data?.data;
},
{
refreshDeps: [curid],
},
);
const prev = useRequest(
async () => {
let data = await doFetch({
url: '/realTimeInfo/getRealTimePrevAndNext',
params: { id: curid },
});
return data?.data?.data;
},
{
refreshDeps: [curid],
},
);
return (
<div className="section">
<h2 className="title">{data?.title}</h2>
<p style={{ textAlign: 'center', fontSize: '0.6rem' }}>
{data?.releaseTime}
</p>
<div
dangerouslySetInnerHTML={{ __html: data?.informationContent }}
style={{ fontSize: '0.6rem' }}
className="html"
></div>
<Divider></Divider>
<p
className="hoverable"
onClick={() => {
prev?.data?.prev?.id && setcurid(prev?.data?.prev?.id);
}}
>
上一篇:{' '}
{prev?.data?.prev?.title ?? (
<span style={{ color: '#999999' }}>已是第一篇</span>
)}
</p>
<p
className="hoverable"
onClick={() => {
prev?.data?.next?.id && setcurid(prev?.data?.next?.id);
}}
>
下一篇: {prev?.data?.next?.title ?? '已是最后一篇'}
</p>
</div>
);
}
export default Insert;
import styles from './index.less';
import { Link, useModel } from 'umi';
import React, { useState, useEffect, useRef } from 'react';
import { Carousel, Button, Row, Col, Card, Tooltip } from 'antd';
import { useWindowSize } from '@/utils/windowsize';
import { Carousel, Button, Row, Col, Card, Tooltip, Grid } from 'antd';
import { doFetch } from '@/utils/doFetch';
import { useRequest } from 'ahooks';
import { Palette } from 'color-thief-react';
......@@ -10,6 +9,9 @@ import { CaretRightOutlined, ArrowRightOutlined } from '@ant-design/icons';
import dayjs from 'dayjs';
import relativeTime from 'dayjs/plugin/relativeTime';
import 'dayjs/locale/zh-cn';
const { useBreakpoint } = Grid;
dayjs.extend(relativeTime).locale('zh-cn');
// match: 与客户端页面 props 中的 match 保持一致,有当前路由的相关数据。
......@@ -109,7 +111,8 @@ function spArr(arr, num) {
}
return newArr;
}
function getHtmlPlainText(html_str) {
function getHtmlPlainText(html_str = '') {
//提取字符串中的文字
let re = new RegExp('<[^<>]+>', 'g');
let text = html_str.replace(re, '');
......@@ -121,9 +124,8 @@ function getHtmlPlainText(html_str) {
function IndexPage({ route }) {
// const { initialState, loading, error, refresh, setInitialState } =
// useModel('@@initialState');
const cauref = useRef();
const { width, height } = useWindowSize(); //设备宽高
const screens = useBreakpoint();
const [currindex, setcurrindex] = useState(0);
const [type, settype] = useState('r');
const { data } = useRequest(async () => {
......@@ -135,7 +137,6 @@ function IndexPage({ route }) {
let res = await doFetch({ url: '/realTimeInfo/limitList', params: {} });
return res?.data?.dataList ?? [];
});
console.log(zixun?.data);
//autoplay
return (
<div>
......@@ -173,8 +174,8 @@ function IndexPage({ route }) {
<div
className={styles.banner}
style={{
width,
height: (980 / 1920) * width,
width: '100vw',
height: `${(980 / 1920) * 100}vw`,
backgroundImage: `url(${it.picUrl})`,
}}
>
......@@ -205,13 +206,6 @@ function IndexPage({ route }) {
{it.enableBtn == 1 && (
<Button
ghost
size={
width < 780
? 'small'
? width < 1366
: 'middle'
: 'large'
}
style={{
...curtransition,
transition: 'all 1.45s',
......@@ -297,7 +291,7 @@ function IndexPage({ route }) {
: require(`@/assets/l${i + 1}.jpg`);
return it;
}),
width < 500 ? 1 : width < 798 ? 2 : 3,
!screens.sm ? 1 : !screens.lg ? 2 : !screens.xl ? 3 : 3,
).map((it, i) => {
return (
<div key={it.picurl}>
......
import { useState, useEffect } from 'react';
export const useWindowSize = () => {
// 第一步:声明能够体现视口大小变化的状态
const [windowSize, setWindowSize] = useState({
width: window.innerWidth,
height: window.innerHeight,
});
// 第二步:通过生命周期 Hook 声明回调的绑定和解绑逻辑
useEffect(() => {
const updateSize = () =>
setWindowSize({
width: window.innerWidth,
height: window.innerHeight,
});
window?.addEventListener('resize', updateSize);
return () => window.removeEventListener('resize', updateSize);
}, []);
return windowSize;
};
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