diff --git a/src/App.js b/src/App.js index d67c3c926..4c5c53f5a 100644 --- a/src/App.js +++ b/src/App.js @@ -47,6 +47,10 @@ const ProjectDetail = Loadable({ loader: () => import("./forge/Main/DetailAdaptor"), loading: Loading, }); +const Information = Loadable({ + loader: () => import('./forge/Information/index'), + loading: Loading, +}) //forge安全设置 const Security = Loadable({ loader: () => import('./forge/SecuritySetting/Index'), @@ -156,7 +160,7 @@ const Topic = Loadable({ }) // 此处仅维护前端可能的一级路由,不用进行项目或者组织判断的字段。 -const keyWord = ["explore", "settings", "setting", "mulan", "wiki", "issues", "setting", "trending", "code", "projects", "pulls", "mine", "login", "register", "email", "export", "nopage", "404", "403", "500", "501", "search", "organize", "login", "register", "resetPassword", "aboutus","educoder", "glcc","bindlogin", "softbot"]; +const keyWord = ["explore", "settings", "setting", "mulan", "wiki", "issues", "setting", "trending", "code", "projects", "pulls", "mine", "login", "register", "email", "export", "nopage", "404", "403", "500", "501", "search", "organize", "login", "register", "resetPassword", "aboutus","educoder", "glcc","bindlogin", "softbot","information"]; class App extends Component { constructor(props) { @@ -376,6 +380,14 @@ class App extends Component { )} > + { + return () + } + }> + + + + + {name} + {title} + + + ) +} +export default DefaultImg; \ No newline at end of file diff --git a/src/forge/Information/Component/hot.jsx b/src/forge/Information/Component/hot.jsx new file mode 100644 index 000000000..69833ef86 --- /dev/null +++ b/src/forge/Information/Component/hot.jsx @@ -0,0 +1,25 @@ +import React from 'react'; + +function Hot({list , title}){ + return( +
+

{title}

+ { + list && list.length>0 && +
    + { + list.map((i,k)=>{ + return( +
  • + {k+1} + {i.name} +
  • + ) + }) + } +
+ } +
+ ) +} +export default Hot; \ No newline at end of file diff --git a/src/forge/Information/Component/publicBanner.jsx b/src/forge/Information/Component/publicBanner.jsx new file mode 100644 index 000000000..e0cbc2db9 --- /dev/null +++ b/src/forge/Information/Component/publicBanner.jsx @@ -0,0 +1,49 @@ +import React , { useState , useEffect } from 'react'; +import { Menu } from 'antd'; +import Menu1 from '../img/menu1.png'; +import Menu2 from '../img/menu2.png'; +import Menu3 from '../img/menu3.png'; +import Menu4 from '../img/menu4.png'; +import Menu5 from '../img/menu5.png'; +import { Link } from 'react-router-dom'; + + + +function PublicBanner(props){ + const [ key , setKey ] = useState("1"); + const { pathname } = props.history.location; + + useEffect(()=>{ + if(pathname){ + const info = /\/information\/[0-9]{0,}\/news/g; + if(pathname === '/information'){ + setKey("1"); + } + if(pathname === '/information/projects'){ + setKey("2"); + } + if(info.test(pathname)){ + setKey("4"); + } + } + },[pathname]) + + return( +
+
+

主标题文案内容占一行

+

专区副标题文案内容专区副标题文案内容专区副标题文案内容专区副标题文案内容专区副标题文案内容专区副标题文案内容专区副标题文案内容

+
+
+ + 首页 + 开源项目 + 资源发布 + 领域资讯 + Sig小组 + +
+
+ ) +} +export default PublicBanner; \ No newline at end of file diff --git a/src/forge/Information/Pages/main.jsx b/src/forge/Information/Pages/main.jsx new file mode 100644 index 000000000..fc4a4d63b --- /dev/null +++ b/src/forge/Information/Pages/main.jsx @@ -0,0 +1,130 @@ +import React , { useState , useEffect } from 'react'; +import Banner from '../Component/publicBanner'; +import { Menu } from 'antd'; +import Hot from '../Component/hot'; +import { Box , LongWidth } from '../../Component/layout'; +import { Link } from 'react-router-dom'; +import guideArrow from '../img/guideArrow.png'; +import axios from 'axios'; +import shijian from '../img/shijian.png'; +import liulan from '../img/liulan.png'; +import emptydata from '../../Images/nodata.png'; +import DefaultImg from '../Component/defaultImg'; + + +function Main(props){ + const [ key , setKey ] = useState("1"); + const [ mainList , setMainList ] = useState(undefined); + const [ hotList , setHotList ] = useState(undefined); + const { deptId } = props.match.params; + + + useEffect(()=>{ + if(deptId) { + getMainList(); + getHotList(); + } + },[deptId]) + + function getMainList(){ + const url = `/cms/doc/open/dept/${deptId}/docOverviewList`; + axios.get(url).then(result=>{ + if(result){ + setMainList(result.data.rows); + } + }).catch(error=>{}) + } + + function getHotList(){ + const url = `/cms/doc/open/dept/${deptId}/hotDocList`; + axios.get(url,{ + params:{pageSize:15,pageNum:1} + }).then(result=>{ + if(result){ + setHotList(result.data.rows); + } + }).catch(error=>{}) + } + + function clickTab(k,idName){ + setKey(k); + } + + return( +
+ +
+

领域资讯

+ { + mainList && mainList.length>0 && + + { + mainList.map((i,k)=>{ + return( + clickTab(`${k+1}`,`main_card_item_${k+1}`)}>{i.name} + ) + }) + } + + } +
+ + + { + mainList && mainList.length>0 && + mainList.map((i,k)=>{ + return( +
+
+ {i.name} + 更多 +
+
+ { + i.cmsDocList && i.cmsDocList.length>0 ? + i.cmsDocList.map((j,e)=>{ + return( +
+ {e===0 && + ( + i.headImg ? + + : + + ) + } +
+ {j.name} +

+ {j.summary} +

+
+ {j.publishTime} + {j.visits} +
+
+
+ ) + }) + : +
+ +

暂无数据~

+
+ } +
+
+ ) + }) + } +
+
+ +
+
+
+
+
+ ) +} +export default Main; \ No newline at end of file diff --git a/src/forge/Information/Pages/newsDetail.jsx b/src/forge/Information/Pages/newsDetail.jsx new file mode 100644 index 000000000..08dc2b3c5 --- /dev/null +++ b/src/forge/Information/Pages/newsDetail.jsx @@ -0,0 +1,58 @@ +import React,{ useState , useEffect } from 'react'; +import { Breadcrumb , Divider } from 'antd'; +import liulan from '../img/liulan.png'; +import Banner from '../Component/publicBanner'; +import RenderHtml from '../../../components/render-html'; +import { Base64 } from 'js-base64'; +import axios from 'axios'; + +function NewsDetail(props){ + const { deptId , cateId , id } = props.match.params; + const [ detail , setDetail ] = useState(undefined); + const [ cmsDir , setCmsDir ] = useState(undefined); + + useEffect(()=>{ + if(id){ + getDetails(); + } + },[id]) + + function getDetails(){ + const url = `/cms/doc/open/${id}`; + axios.get(url).then(result=>{ + if(result){ + let data = result.data.data; + setDetail(data); + setCmsDir(data.cmsDir); + } + }).catch(error=>{}) + } + return( +
+ + { + detail && +
+ + 领域资讯 + { cmsDir && {cmsDir.name} } + 正文 + +
+
+

{detail.name}

+
    + { cmsDir &&
  • {cmsDir.name}
  • } + { cmsDir &&
  • 发布于{cmsDir.createdAt}
  • } + { detail.visits &&
  • {detail.visits}
  • } +
+
+ + +
+
+ } +
+ ) +} +export default NewsDetail; \ No newline at end of file diff --git a/src/forge/Information/Pages/newsList.jsx b/src/forge/Information/Pages/newsList.jsx new file mode 100644 index 000000000..9e762bdbd --- /dev/null +++ b/src/forge/Information/Pages/newsList.jsx @@ -0,0 +1,156 @@ +import React , { useEffect , useState } from 'react'; +import PublicBanner from '../Component/publicBanner'; +import { Box , LongWidth } from '../../Component/layout'; +import { Menu , Breadcrumb , Pagination } from 'antd'; +import Hot from '../Component/hot'; +import axios from 'axios'; +import shijian from '../img/shijian.png'; +import liulan from '../img/liulan.png'; +import DefaultImg from '../Component/defaultImg'; +import emptydata from '../../Images/nodata.png'; + +function NewsList(props){ + const { deptId , cateId } = props.match.params; + const [ pageNum , setPageNum ] = useState(1); + const [ total , setTotal ] = useState(0); + const pageSize = 15; + const [ columnList , setColumnList ] = useState(undefined); + const [ hostList , setHotList ] = useState(undefined); + const [ mainList , setMainList ] = useState(undefined); + const [ details , setDetails ] = useState(undefined); + + useEffect(()=>{ + if(deptId && cateId){ + getMainList(); + } + },[deptId,cateId,pageNum]) + + useEffect(()=>{ + if(deptId && cateId){ + getMainList(); + getHotList(); + getColumnList(); + getColumnDetail(); + } + },[deptId,cateId]) + + function getColumnDetail(){ + const url = `/cms/doc/open/dir/${cateId}`; + axios.get(url).then(result=>{ + if(result){ + setDetails(result.data.data); + } + }).catch(error=>{}) + } + + function getColumnList(){ + const url = `/cms/doc/open/dept/${deptId}/dirList`; + axios.get(url).then(result=>{ + if(result){ + setColumnList(result.data.rows); + setTotal(result.data.total); + } + }).catch(error=>{}) + } + + function getMainList(){ + const url = `/cms/doc/open/dir/${cateId}/docList`; + axios.get(url,{ + params:{ + pageNum,pageSize + } + }).then(result=>{ + if(result){ + setMainList(result.data.rows); + } + }).catch(error=>{}) + } + + function getHotList(){ + const url = `/cms/doc/open/dir/${cateId}/hotDocList`; + axios.get(url,{ + params:{ + pageNum:1,pageSize:15 + } + }).then(result=>{ + if(result){ + setHotList(result.data.rows); + } + }).catch(errror=>{}) + } + + return( +
+ +
+ + 领域资讯 + {details && details.name} + +

{details && details.name}

+ + { + columnList && columnList.length>0 && +
+ + { + columnList.map((i,k)=>{ + return( + {i.name} + ) + }) + } + +
+ } +
+ +
+ { + mainList && mainList.length>0 ? + mainList.map((i,k)=>{ + return( +
+ { + i.headImg ? + + : + + } +
+ {i.name} +

+ {i.summary} +

+
+ {i.publishTime} + {i.visits} +
+
+
+ ) + }) + : +
+ +

暂无数据~

+
+ } + { + total > pageSize && +
+ {setPageNum(p)}}/> +
+ } +
+
+
+ +
+
+
+
+
+ ) +} +export default NewsList; \ No newline at end of file diff --git a/src/forge/Information/Pages/projectSource.jsx b/src/forge/Information/Pages/projectSource.jsx new file mode 100644 index 000000000..b1fab2a18 --- /dev/null +++ b/src/forge/Information/Pages/projectSource.jsx @@ -0,0 +1,71 @@ +import React , { useEffect , useState } from 'react'; +import Banner from '../Component/publicBanner'; +import { Box , LongWidth } from '../../Component/layout'; +import { Input , Dropdown , Menu } from 'antd'; +import { Link } from 'react-router-dom'; +const { Search } = Input + +function ProjectSource(props){ + const menu = ( + + 更新时间排序 + 创建时间排序 + fork数量排序 + 点赞数量排序 + + ) + return( +
+ +
+

开源项目

+ +
    +
  • 项目分类
  • +
  • 全部分类
  • +
  • 项目分类
  • +
  • 项目分类
  • +
+ +
+
+ 搜索} + /> + + 排序 + +
+
+
+ +
+

+ GitLink/React-Build +

    +
  • 333
  • +
  • 22
  • +
  • 31
  • +
+

+
+ Gitlink平台,前端编译好的文件,直接将该文件放入后端项目中的public/react/build/目录下即可,如果没有build目录,直接将该入后端项目中的public/react/build/目录下即可,如果没有build目录,直接将该文件放入后端项直接将该文件放入后端 +
+
    +
  • html
  • +
  • javascript
  • +
+
+
+
+
+
+
+
+
+ ) +} +export default ProjectSource; diff --git a/src/forge/Information/img/back1.png b/src/forge/Information/img/back1.png new file mode 100644 index 000000000..0e1e413b2 Binary files /dev/null and b/src/forge/Information/img/back1.png differ diff --git a/src/forge/Information/img/back2.png b/src/forge/Information/img/back2.png new file mode 100644 index 000000000..01bbc652f Binary files /dev/null and b/src/forge/Information/img/back2.png differ diff --git a/src/forge/Information/img/back3.png b/src/forge/Information/img/back3.png new file mode 100644 index 000000000..d55bd4485 Binary files /dev/null and b/src/forge/Information/img/back3.png differ diff --git a/src/forge/Information/img/banner.png b/src/forge/Information/img/banner.png new file mode 100644 index 000000000..3b092d2f2 Binary files /dev/null and b/src/forge/Information/img/banner.png differ diff --git a/src/forge/Information/img/color1.png b/src/forge/Information/img/color1.png new file mode 100644 index 000000000..41736614b Binary files /dev/null and b/src/forge/Information/img/color1.png differ diff --git a/src/forge/Information/img/color2.png b/src/forge/Information/img/color2.png new file mode 100644 index 000000000..fa14475d0 Binary files /dev/null and b/src/forge/Information/img/color2.png differ diff --git a/src/forge/Information/img/color3.png b/src/forge/Information/img/color3.png new file mode 100644 index 000000000..113b25fab Binary files /dev/null and b/src/forge/Information/img/color3.png differ diff --git a/src/forge/Information/img/color4.png b/src/forge/Information/img/color4.png new file mode 100644 index 000000000..0d562a849 Binary files /dev/null and b/src/forge/Information/img/color4.png differ diff --git a/src/forge/Information/img/defaultImg.png b/src/forge/Information/img/defaultImg.png new file mode 100644 index 000000000..7f92be1b8 Binary files /dev/null and b/src/forge/Information/img/defaultImg.png differ diff --git a/src/forge/Information/img/guide.png b/src/forge/Information/img/guide.png new file mode 100644 index 000000000..a929e0345 Binary files /dev/null and b/src/forge/Information/img/guide.png differ diff --git a/src/forge/Information/img/guideArrow.png b/src/forge/Information/img/guideArrow.png new file mode 100644 index 000000000..e575db4c4 Binary files /dev/null and b/src/forge/Information/img/guideArrow.png differ diff --git a/src/forge/Information/img/liulan.png b/src/forge/Information/img/liulan.png new file mode 100644 index 000000000..f204baf09 Binary files /dev/null and b/src/forge/Information/img/liulan.png differ diff --git a/src/forge/Information/img/mainbanner.png b/src/forge/Information/img/mainbanner.png new file mode 100644 index 000000000..04e9f166c Binary files /dev/null and b/src/forge/Information/img/mainbanner.png differ diff --git a/src/forge/Information/img/menu1.png b/src/forge/Information/img/menu1.png new file mode 100644 index 000000000..357586cb9 Binary files /dev/null and b/src/forge/Information/img/menu1.png differ diff --git a/src/forge/Information/img/menu2.png b/src/forge/Information/img/menu2.png new file mode 100644 index 000000000..b2cebfdac Binary files /dev/null and b/src/forge/Information/img/menu2.png differ diff --git a/src/forge/Information/img/menu3.png b/src/forge/Information/img/menu3.png new file mode 100644 index 000000000..af54d49bf Binary files /dev/null and b/src/forge/Information/img/menu3.png differ diff --git a/src/forge/Information/img/menu4.png b/src/forge/Information/img/menu4.png new file mode 100644 index 000000000..9515e8ad8 Binary files /dev/null and b/src/forge/Information/img/menu4.png differ diff --git a/src/forge/Information/img/menu5.png b/src/forge/Information/img/menu5.png new file mode 100644 index 000000000..2b6cea3f7 Binary files /dev/null and b/src/forge/Information/img/menu5.png differ diff --git a/src/forge/Information/img/shijian.png b/src/forge/Information/img/shijian.png new file mode 100644 index 000000000..61b38d55b Binary files /dev/null and b/src/forge/Information/img/shijian.png differ diff --git a/src/forge/Information/img/subbanner.png b/src/forge/Information/img/subbanner.png new file mode 100644 index 000000000..ee538c5b4 Binary files /dev/null and b/src/forge/Information/img/subbanner.png differ diff --git a/src/forge/Information/index.jsx b/src/forge/Information/index.jsx new file mode 100644 index 000000000..4eb7bf71d --- /dev/null +++ b/src/forge/Information/index.jsx @@ -0,0 +1,83 @@ +import React ,{ useEffect } from "react"; + +import { Route, Switch } from "react-router-dom"; +import { withRouter } from "react-router"; + +import { SnackbarHOC } from "educoder"; +import { CNotificationHOC } from "../../modules/courses/common/CNotificationHOC"; +import { TPMIndexHOC } from "../../modules/tpm/TPMIndexHOC"; +import Loadable from "react-loadable"; +import Loading from "../../Loading"; +import axios from 'axios'; +import { isDev } from 'educoder'; +import './index.scss'; + +const ProjectSource = Loadable({ + loader: () => import("./Pages/projectSource"), + loading: Loading, +}); +const NewsDetail = Loadable({ + loader: () => import("./Pages/newsDetail"), + loading: Loading, +}); +const NewsList = Loadable({ + loader: () => import("./Pages/newsList"), + loading: Loading, +}); +const Main = Loadable({ + loader: () => import("./Pages/main"), + loading: Loading, +}); +function Index(props){ + useEffect(()=>{ + axios.interceptors.request.use( + config => { + var localproxy = "https://testgetway.gitlink.org.cn"; + var proxy = ""; + let url = "/api" +config.url; + if(isDev){ + url = localproxy + url ; + }else{ + url = proxy + url; + } + config.url =url; + return config; + }, + err => { + return Promise.reject(err); + } + ) + },[]) + return( +
+ + ( + + )} + > + ( + + )} + > + ( + + )} + > + ( +
+ )} + > + +
+ ) +} +export default withRouter((CNotificationHOC()(SnackbarHOC()(TPMIndexHOC(Index)))) +); \ No newline at end of file diff --git a/src/forge/Information/index.scss b/src/forge/Information/index.scss new file mode 100644 index 000000000..143900ab5 --- /dev/null +++ b/src/forge/Information/index.scss @@ -0,0 +1,492 @@ +.information_main{ + background-color:#f3f5f8; + .ant-breadcrumb{ + font-size: 15px; + margin-bottom: 20px; + .ant-breadcrumb-link{ + color: #466aff; + } + & > span:last-child .ant-breadcrumb-link{ + color: rgba(76, 88, 118, 1); + } + } + .in_title{ + height:44px; + line-height:44px; + font-weight:500; + color:#1f2329; + font-size:32px; + text-align:center; + } + .in_banner{ + background-image: url(./img/mainbanner.png); + background-size: 100% 100%; + // background-color:linear-gradient(270deg,#262a35 0%,rgba(38, 42, 53, 0.26) 42.94%,#262a35 100%); + height: 600px; + position: relative; + padding-bottom: 88px; + &>div{ + display: flex; + width: 1200px; + margin: 0px auto; + flex-direction: column; + justify-content: center; + height: 100%; + .main_t{ + color:#78d0f5; + font-size:40px; + line-height: 40px; + height: 40px; + } + .sub_t{ + margin-top: 35px; + max-width:536px; + line-height:40px; + color:rgba(225,225,225,0.9); + font-size:16px; + } + } + .bannerMenus{ + position: absolute; + width: 100%; + bottom: 0px; + background-color:rgba(54, 66, 101, .5); + height: 88px; + .ant-menu{ + width: 1200px; + margin:0px auto; + background-color: transparent; + height: 100%; + font-size: 16px; + color: #fff; + border-bottom: none!important; + li{ + height: 88px; + line-height: 88px; + border-bottom: none!important; + padding:0px ; + margin-right: 100px!important; + img{ + margin-right: 10px; + } + &.ant-menu-item-selected a,a{ + color: #fff!important; + } + &.ant-menu-item-selected::after{ + content:""; + position: absolute; + width: 100%; + left: 0px; + height: 4px; + bottom: 1px; + background-color: #466aff; + } + } + } + } + } + .main_content{ + padding: 40px 0px 80px; + .ant-menu{ + height: 40px; + line-height: 30px; + border:none!important; + display: flex; + align-items: center; + justify-content: center; + margin: 30px 0px 35px!important; + background-color: transparent; + li{ + border: none!important; + font-size: 16px; + padding:0px ; + margin:0px 28px!important; + &.ant-menu-item-selected::after{ + content:""; + position: absolute; + width: 100%; + left: 0px; + height: 2px; + bottom: -5px; + background-color: #466aff; + } + } + } + } + .short_width{ + width: 371px; + margin-left: 30px; + background-color: #fff; + .hot_title{ + height: 69px; + line-height: 69px; + border-bottom: 1px solid rgba(170, 175, 190, 0.31); + font-weight:700; + color:#1f2329; + font-size:18px; + margin:0px 25px 10px!important; + } + ul{ + padding-bottom: 50px; + li{ + display: flex; + height: 47px; + padding:0px 25px; + align-items: center; + &:hover{ + background-color:rgba(243, 245, 248, 1) ; + } + a{ + color:#1f2329; + font-size:14px; + flex: 1; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + } + &:hover{ + color: #466aff; + } + span{ + display: block; + width:22px; + text-align: center; + color: #fff; + height:22px; + line-height:22px; + background-color:#466aff; + opacity: 0.3; + border-radius:2px; + margin-right: 7px; + } + } + } + } + .radius4{ + border-radius: 4px; + } + .main_card{ + background-color: #fff; + padding:25px; + margin-bottom: 25px; + .main_card_item{ + display: flex; + padding:24px 0px; + border-bottom: 1px solid rgba(170, 175, 190, 0.15); + &:last-child{ + border-bottom: none; + } + & >div >img{ + margin-right: 20px; + height: 117px; + max-width: 184px; + border-radius: 3px; + } + .sub_desc{ + line-height: 26px; + height: 52px; + color: #4c5876; + margin-bottom: 8px!important; + &.task-hide{ + height: 26px; + } + } + .sub_info{ + height: 18px; + line-height: 18px; + font-size: 13px; + color: #8d95ac; + span{ + margin-right: 40px; + img{ + margin-right: 5px; + } + } + } + .sub_name{ + height:25px; + color:#1f2329; + font-size:18px; + margin-bottom: 14px; + position: relative; + display: block; + line-height: 25px; + &.sub_i{ + padding-left: 18px; + &::before{ + content: ""; + position: absolute; + width: 8px; + height: 8px; + left: 0px; + top:7px; + border-radius: 50%; + background-color: #07a583; + } + } + } + } + } + .guide{ + display: flex; + justify-content: space-between; + align-items: center; + border-bottom: 1px dashed rgba(70, 106, 255, 0.48); + margin-bottom: 5px; + span{ + display: block; + width: 113px; + height: 30px; + line-height: 30px; + padding-left: 9px; + color: #fff; + font-size:17px; + background-image: url(./img/guide.png); + background-size: 100% 100%; + } + a{ + color:#466aff; + font-size:14px; + img{ + margin-left: 6px; + } + } + } +} +.info_news_list{ + .column_menu{ + width: 90px; + background-color: #fff; + padding:10px 15px; + box-sizing: border-box; + margin-right: 25px; + border-radius: 8px; + margin-bottom: 80px; + min-height: 420px; + .ant-menu{ + li{ + padding:0px!important; + border:none!important; + } + } + } + .column_content{ + flex: 1; + display: flex; + justify-content: flex-start; + background-color: #fff; + padding-right: 29px; + .main_card{ + padding-right: 0px; + } + .short_width{ + width: 321px; + ul li{ + padding:0px 0px 0px 8px; + } + } + .hot_title{ + margin:0px 0px 10px 8px !important; + } + } +} +.defaultBox{ + position: relative; + width: 184px; + height: 117px; + margin-right: 20px; + img{ + position: absolute; + left: 0px; + top:0px; + height: 100%; + &.back{ + width: 100%; + z-index: 1; + } + &.color{ + z-index: 2; + } + } + .d_name{ + position: absolute; + z-index: 3; + width: 124px; + left: 0px; + height: 100%; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + color: #fff; + font-size: 15px; + line-height: 22px; + span{ + display: block; + height: 22px; + line-height: 22px; + margin:3px 0px!important; + } + } +} +.boxmain{ + width: 1200px; + margin:0px auto; +} +.detail_news_all{ + .detail_banners{ + background-image: url(./img/subbanner.png); + background-size: 100% 100%; + height: 260px; + position: relative; + padding-bottom: 88px; + display: flex; + justify-content: center; + flex-direction: column; + .main_t{ + height:50px; + line-height:50px; + font-weight:500; + color:#ffffff; + font-size:36px; + margin-bottom: 30px!important; + } + .sub_t{ + height:21px; + line-height:21px; + color:rgba(255, 255, 255, 0.73); + font-size:15px; + } + } + .info_text{ + background-color: #fff; + border-radius: 4px; + padding:30px 35px 50px; + .info_text_main{ + .i_name{ + color:#1f2329; + font-size:22px; + height: 30px; + line-height: 30px; + margin-bottom: 14px!important; + } + .i_ul_value{ + display: flex; + align-items: center; + li{ + color:#4c5876; + height: 20px; + line-height: 20px; + margin-right: 25px; + } + } + } + } +} +.in_pro{ + padding-bottom: 80px; + .in_list{ + padding:30px 30px 30px 35px; + background-color: #fff; + margin-top: 42px; + .in_list_menu{ + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 5px; + } + .in_list_box{ + &>div{ + display: flex; + align-items: flex-start; + padding:20px 0px; + .author_img{ + width: 66px; + height: 66px; + border-radius: 10px; + margin-right: 20px; + } + .in_b_main{ + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 15px!important; + &>a{ + font-weight:700; + color:#1f2329; + font-size:16px; + height: 22px; + line-height: 22px; + } + &>ul{ + font-weight:500; + color:#5e6685; + font-size:15px; + display: flex; + align-items: center; + li{ + margin-left: 30px; + display: flex; + align-items: center; + height: 22px; + } + } + } + .in_b_desc{ + color: #4c5876; + line-height: 26px; + max-height: 52px; + } + .in_b_tag{ + margin-top: 10px; + display: flex; + align-items: center; + li{ + height:24px; + line-height:24px; + background-color:rgba(70, 106, 255, 0.12); + border-radius:2px; + margin-right: 12px; + color:#466aff; + font-size:13px; + padding:0px 7px; + } + } + } + } + } + .in_pro_menu{ + margin-top: 42px; + width: 250px; + margin-right: 30px; + background-color: #fff; + padding:10px 0px; + li{ + height: 60px; + line-height: 60px; + position: relative; + padding-left: 34px; + font-size:16px; + font-weight:500; + cursor: pointer; + color:#3d485d; + &.u_t{ + font-weight:700; + color:#1f2329; + font-size:18px; + } + &.active{ + color:#466aff; + background-image:linear-gradient(89.9deg,rgba(70, 106, 255, 0) 0%,rgba(70, 106, 255, 0.09) 100%); + } + &.active::after{ + position: absolute; + right: 0px; + height: 100%; + content: ""; + width: 3px; + background-color: #466aff; + } + } + } +} \ No newline at end of file