setPage(p)}}
- />
- {
- detail && detail.paper_content ?
-
-
研究论文
-
{detail && detail.paper_content}
-
- :""
- }
-
-
-
- )
-}
-export default Index;
\ No newline at end of file
diff --git a/src/forge/Information/Pages/dataset/index.jsx b/src/forge/Information/Pages/dataset/index.jsx
deleted file mode 100644
index 2392baaed..000000000
--- a/src/forge/Information/Pages/dataset/index.jsx
+++ /dev/null
@@ -1,69 +0,0 @@
-import React,{ useState, useEffect } from 'react';
-import { Input } from 'antd';
-import { Link } from 'react-router-dom';
-import '../../index.scss';
-import { getDataSet } from '../../api';
-import Nodata from '../../../Nodata';
-
-const { Search } = Input;
-
-function Index(props){
- const { deptId } = props.match.params;
- const { id , temp, history, role, sectionResourceTitle } = props;
- const [ data , setData ] = useState(undefined);
- const [ search , setSearch ] = useState(undefined);
- useEffect(()=>{
- id && Init();
- },[id, search])
-
- function Init(){
- getDataSet({id,search}).then(response=>{
- if(response && response.data){
- setData(response.data.rows);
- }
- }).catch(error=>{})
- }
-
- function onSourceSearch(e){
- setSearch(e);
- }
- return(
-
-
-
- {
- data && data.length > 0 ?
- data.map((item,key)=>{
- return(
-
-
- {item.dataSetName}
- {item.dataSetDescription}
- {/* 2023-09-08 15:54:23 */}
- {item.repositoryName}
-
-
- )
- }):""
- }
- {
- data && data.length === 0 ?
:""
- }
-
-
- )
-}
-export default Index;
\ No newline at end of file
diff --git a/src/forge/Information/Pages/headerPage.jsx b/src/forge/Information/Pages/headerPage.jsx
deleted file mode 100644
index cc21f1535..000000000
--- a/src/forge/Information/Pages/headerPage.jsx
+++ /dev/null
@@ -1,186 +0,0 @@
-import React,{ useState, useEffect } from 'react';
-import img1 from '../img/img1.png';
-import { httpUrl } from '../fetch';
-import guideArrow from '../img/guideArrow.png';
-import { Link } from 'react-router-dom';
-import shijian from '../img/shijian.png';
-import { getHomePageList , gethomePageDocList , getAllList, getPartnerList } from '../api';
-import axios from 'axios';
-import Partner from '../Component/partner';
-
-function HeaderPage(props){
- const [ projectList , setProjectList ] = useState(undefined);
- const [ personList , setPersonList ] = useState(undefined);
- const [ newsList, setNewsList ] = useState(undefined);
- const [ partnerList, setParterList ] = useState(undefined);
- const { deptId } = props.match.params;
- const { data, id, temp } = props;
-
- useEffect(()=>{
- if(id){
- getProjectList();
- getNewsList();
- getPersonList();
- getPartner();
- }
- },[id])
-
- function getPersonList(){
- getHomePageList(id).then(result=>{
- if(result){
- setPersonList(result.data.rows);
- }
- }).catch(error=>{})
- }
-
- function getNewsList(){
- gethomePageDocList(id).then(result=>{
- if(result){
- setNewsList(result.data.rows);
- }
- }).catch(error=>{})
- }
-
- function getProjectList(){
- getAllList(id,{isHomepage:1}).then(result=>{
- if(result){
- setProjectList(result.data.rows);
- }
- }).catch(console.error())
- }
-
- function getPartner(){
- getPartnerList(id).then(result => {
- if(result){
- const array = result.data.rows;
- const newArray = [];
- for(let i in array) {
- let e = array[i]
- if (e.zonePartnersList && e.zonePartnersList.length > 0) {
- e.zonePartnersList[0].typeName = e.typeName;
- }
- if ( e.zonePartnersList.length > 0 ) {
- newArray.push(e.zonePartnersList);
- }
- }
- setParterList(newArray);
- }
- })
- }
- return(
-
- {data &&
{data.firstTitle}
}
- {
- // 专区简介
- data && (data.introductionTitle || data.introductionContent || data.introductionImage) &&
-
-
- {data.introductionTitle &&
{data.introductionTitle}
}
-
-
- {
- data.introductionImage &&
-

- }
-
- }
- {
- // 新闻动态
- data && data.cmsShow === 1 && newsList && newsList.length>0 &&
-
-
{ data.homepageCmsTitle }
-
-
-

-
{newsList[0].name}
-
{newsList[0].summary}
-
-
- {newsList[0].publishTime}
-
-
- 查看详情
-
-
-
-
-
- }
- {
- // 精选项目
- data && data.projectShow === 1 && projectList && projectList.length>0 &&
-
-
{ data.homepageProjectTitle }
- {
-
- {
- projectList.map((i,k)=>{
- return(
-
- {i.projectProperties && i.projectProperties.authorImageUrl &&

}
-
-
- )
- })
- }
-
- }
-
- }
- {
- // 核心贡献者
- data && data.memberShow === 1 && personList && personList.length > 0 &&
-
-
{ data.homepageMemberTitle }
- {
-
- }
-
- }
-
-
- {
- // 合作伙伴
- data && data.partnersShow === 1 && partnerList && partnerList.length > 0 &&
-
-
{ data.homepagePartnersTitle }
-
-
- }
-
- )
-}
-export default HeaderPage;
\ No newline at end of file
diff --git a/src/forge/Information/Pages/headerPageZone1.jsx b/src/forge/Information/Pages/headerPageZone1.jsx
deleted file mode 100644
index c1893c61c..000000000
--- a/src/forge/Information/Pages/headerPageZone1.jsx
+++ /dev/null
@@ -1,295 +0,0 @@
-import React,{ useState, useEffect } from 'react';
-import { httpUrl } from '../fetch';
-
-import img1 from '../img/img1.png';
-import img2 from '../img/img2.png';
-import vision0 from '../img/vision0.png';
-import vision1 from '../img/vision1.png';
-import vision2 from '../img/vision2.png';
-import vision3 from '../img/vision3.png';
-import intro1 from '../img/intro1.png';
-import intro2 from '../img/intro2.png';
-import intro3 from '../img/intro3.png';
-import intro4 from '../img/intro4.png';
-import guideArrow from '../img/guideArrow1.png';
-import ra from '../img/ra.png'
-import title from '../img/title.png'
-import { Link } from 'react-router-dom';
-import shijian from '../img/shijian.png';
-import Nodata from '../../Nodata';
-import Projects from '../Component/projects';
-import Contributor from '../Component/contributor';
-import Partner from '../Component/partner';
-import '../indexZone1.scss'
-import { getProjectsLists, getPartnerList, getHomePageList, gethomePageDocList } from '../api'
-
-function HeaderPage(props){
- const [ projectList , setProjectList ] = useState(undefined);
- const [ personList , setPersonList ] = useState(undefined);
- const [ newsList, setNewsList ] = useState(undefined);
- const [ partnerList, setParterList ] = useState(undefined);
- const { deptId } = props.match.params;
- const { data, id, temp, history } = props;
-
- const vision = [
- {imageUrl: vision0, title: '促进技术创新和应用', content: '通过开源芯片社区的建设,可以让更多的人参与到硬件开发中来,激发大众的创造力和创新精神,从而推动硬件领域的技术创新和实际应用。'},
- {imageUrl: vision1, title: '降低硬件开发成本', content: '通过共享开源芯片设计和资源,可以帮助个人和小型企业降低硬件开发的成本,打破品牌垄断,促进市场竞争。'},
- {imageUrl: vision2, title: '推广教育和普及知识', content: '通过开源芯片社区的建设,可以提供更多的硬件开发教育和知识普及资源,为学生、教师和爱好者等不同群体提供更多的学习机会和平台。'},
- {imageUrl: vision3, title: '加强国际合作和交流', content: '开源芯片社区可以促进国内外的交流和合作,扩大中国在全球开源芯片领域的影响力,推动中外企业和机构之间的技术合作和交流。'}
- ]
-
- const communityInfo = [
- { level: '普通用户', todo: '寻找项目或SIG组' },
- { level: '项目贡献者', todo: '参与项目贡献' },
- { level: '项目开发者', todo: '推动项目发展' },
- { level: '项目管理者', todo: '成为项目领军人物' }
- ]
-
- const growPathInfo = [
- { type: '计划一', plan: '保留chisel语言学习(学习)' },
- { type: '计划二', plan: '小核、SoC快速开发(初级、中级、高级)' },
- { type: '计划三', plan: '果壳项目(初级、中级、高级)' },
- { type: '计划四', plan: '香山贡献参与' }
- ]
-
- const introDetail = [
- { title: '能力阶梯', icon: intro1, desc: '成长体系按照开发者从⼊门到进阶再到⾹⼭顶级项⽬设⽴了⽤户能⼒提升的阶梯式真实项⽬' },
- { title: '贡献分级', icon: intro2, desc: '所有开源项⽬全部为开芯院开源开放的真实项⽬,开发者参与开源项⽬的所有贡献将作为成长等级、知产授权、加⼊⾼级别项⽬(悬赏、获得offer等)、成为核⼼贡献者的参与 依据' },
- { title: '成长认证', icon: intro3, desc: '开发者可以通过完成开源项⽬对应的任务,赢取对应能⼒成长认证,开源项⽬对应的⾼级任务将获得对应等级L2或⾼级别的知识产权授权,同时解锁下⼀级别成长任务' },
- { title: '顶级认证', icon: intro4, desc: '参与顶级项⽬“⾹⼭”的贡献者,将获得中国科学院计算技术研究所副所长、研究员,北京开源芯⽚研究院⾸席科学家,RISC-V国际基⾦会理事会成员包云岗签名贡献者证书' }
- ]
-
-
- useEffect(()=>{
- if(id){
- getProjectList();
- getNewsList();
- getPersonList();
- getPartner();
- }
- },[id])
-
- function getPersonList(){
- getHomePageList(id).then(result=>{
- if(result){
- setPersonList(result.data.rows);
- }
- }).catch(error=>{})
- }
-
- function getNewsList(){
- gethomePageDocList(id).then(result=>{
- if(result){
- setNewsList(result.data.rows);
- }
- }).catch(error=>{})
- }
- function getProjectList(){
- getProjectsLists(id,{ isHomepage:1 }).then(result=>{
- if(result){
- if (result.data.rows.length < 3) {
- setProjectList(result.data.rows)
- } else {
- setProjectList([...result.data.rows, {}]);
- }
- }
- }).catch(error=>{})
- }
-
- function getPartner(){
- getPartnerList(id).then(result => {
- if(result){
- const array = result.data.rows;
- const newArray = [];
- for(let i in array) {
- let e = array[i]
- if (e.zonePartnersList && e.zonePartnersList.length > 0) {
- e.zonePartnersList[0].typeName = e.typeName;
- }
- if ( e.zonePartnersList.length > 0 ) {
- newArray.push(e.zonePartnersList);
- }
- }
- setParterList(newArray);
- }
- })
- }
- return(
-
- {
- // 专区简介
- data && (data.introductionTitle || data.introductionContent || data.introductionImage) &&
-
-
-
{data.introductionTitle}
-
-
- {
- data.introductionImage &&
-

- }
-
- }
-
-
宗旨及愿景
-
- {
- vision.map((i, k) => {
- return (
-
-
-

-
-
{ i.title }
-
{ i.content }
-
- )
- })
- }
-
-
- {
- // 新闻动态
- data && data.cmsShow === 1 && newsList && newsList.length>0 &&
-
-
-
{ data.homepageCmsTitle }
-
-
- 1
- {newsList[0].name}
-
-
{newsList[0].summary}
-
-
-
- {newsList[0].publishTime}
-
- 查看更多
-
-
-
-
-
- }
- {
- // 精选项目
- data && data.projectShow === 1 && projectList && projectList.length > 0 &&
-
-
{ data.homepageProjectTitle }
-
-
- }
- {
- // 核心贡献者
- data && data.memberShow === 1 && personList && personList.length > 0 &&
-
-
{ data.homepageMemberTitle }
-
-
- }
-
-
-
参与社区
-
成为社区成员,尽情发挥您的创意
-
- {
- communityInfo.map((i, k) => {
- return (
-
-
{ i.level }
-
{ i.todo }
-
-
- )
- })
- }
-
-
-
-
-
- {/*
开源芯⽚⽤户成长体系介绍
*/}
-

-
参与开源芯⽚项⽬的开发者需要签署开源贡献者协议
-
建议开发者按照开源项⽬成长路径进⾏参与,稳步提升能⼒,降低跳级参与带来的挑战
-
- {
- growPathInfo.map((i, k) => {
- return (
-
- { k % 2 === 1 &&
}
-
-
{ i.plan }
- { k % 2 === 0 &&
}
-
-
- )
- })
- }
-
-
-
- {
- introDetail.map((i, k) => {
- return (
-
-
-
- { i.title }
-
-
{ i.desc }
-
- )
- })
- }
-
-
-
-
-
-
集萃群智经验 交流心得体会
-
-
- {
- // 合作伙伴
- data && data.partnersShow === 1 && partnerList && partnerList.length > 0 &&
-
-
{ data.homepagePartnersTitle }
-
-
- }
-
-
- )
-}
-export default HeaderPage;
\ No newline at end of file
diff --git a/src/forge/Information/Pages/headerPagebyCCF.jsx b/src/forge/Information/Pages/headerPagebyCCF.jsx
deleted file mode 100644
index d73326d70..000000000
--- a/src/forge/Information/Pages/headerPagebyCCF.jsx
+++ /dev/null
@@ -1,286 +0,0 @@
-import React, { useState, useEffect } from 'react';
-import img1 from '../img/img1.png';
-import { httpUrl } from '../fetch';
-import { Link } from 'react-router-dom';
-import shijian from '../img/shijian.png';
-import xuexi from '../img/xuexiguanli.png';
-import { getHomePageList, gethomePageDocList, getAllList, getNewsAllList, getVIPLists } from '../api';
-import axios from 'axios';
-import Partner from '../Component/partner';
-import MemberList from '../Component/memberList';
-import '../indexZonebyCCF.scss';
-import '../indexZone1.scss';
-import "slick-carousel/slick/slick.css";
-import "slick-carousel/slick/slick-theme.css";
-import Slider from 'react-slick';
-import Left from '../../../home/Img/left.png';
-import Right from '../../../home/Img/right.png';
-
-
-function HeaderPageCCF(props) {
- const [projectList, setProjectList] = useState(undefined);
- const [personList, setPersonList] = useState(undefined);
- const [newsList, setNewsList] = useState(undefined);
- const [partnerList, setParterList] = useState(undefined);
- const { deptId, cateId } = props.match.params;
- const { data, id, temp } = props;
- const [mainList, setMainList] = useState(undefined);
- const [tag,setTag] = useState(0);
- const setting = {
- dots: true,
- infinite: true,
- speed: 2000,
- slidesToShow: 1,
- slidesToScroll: 1,
- pauseOnDotsHover: true,
- autoplaySpeed: 5000,
- pauseOnFocus: true,
- autoplay: true,
- arrows: true,
- prevArrow:
,
- nextArrow:
,
- afterChange: (index)=> setTag(index)
- }
-
- useEffect(() => {
- if (id||cateId) {
- getProjectList();
- getNewsList();
- getPersonList();
- getPartnerList();
- getMainList();
- }
- }, [id,cateId])
-
- function getPersonList() {
- // 不分类
- // getHomePageList(id).then(result => {
- // if (result) {
- // setPersonList(result.data.rows);
- // }
- // }).catch(error => { })
- // 分类获取首页推荐的会员列表
- getVIPLists(id, {isHomepage: 1}).then(response=>{
- if(response){
- const list = response.data.rows && response.data.rows.filter(item=>item.zoneMemberList);
- setPersonList(list);
- }
- })
- }
-
- function getNewsList() {
- gethomePageDocList(id).then(result => {
- if (result) {
- setNewsList(result.data.rows);
- }
- }).catch(error => { })
- }
-
- function getProjectList() {
- getAllList(id, { isHomepage: 1 }).then(result => {
- if (result) {
- setProjectList(result.data.rows);
- }
- }).catch(console.error())
- }
-
- function getPartnerList() {
- const url = `${httpUrl}/zone/open/${id}/partners/list`;
- axios.get(url).then(result => {
- if (result) {
- const array = result.data.rows;
- const newArray = [];
- for (let i in array) {
- let e = array[i]
- if (e.zonePartnersList && e.zonePartnersList.length > 0) {
- e.zonePartnersList[0].typeName = e.typeName;
- }
- if (e.zonePartnersList.length > 0) {
- newArray.push(e.zonePartnersList);
- }
- }
- setParterList(newArray);
- }
- }).catch(error => { })
- }
- function getMainList() {
- getNewsAllList(id).then(result => {
- if (result) {
- let rows = result.data.rows;
- setMainList(rows);
- }
- }).catch(error => { })
- }
- return (
-
- {
- // 新闻动态
- data && data.cmsShow === 1 && newsList && newsList.length >= 0 &&
-
-
{data.homepageCmsTitle}
-
-
-
- {
- newsList && newsList.length > 0 ?
- newsList.map((i, k) => {
- return (
-
-
-

{window.location.href=`/zone/${deptId}/newdetail/${i.id}`}} />
-
-
- )
- })
- :
- ""
- }
-
-
-
-
- {/* 图片下三个栏目 */}
-
- {
- mainList && mainList.length > 0 ?
- mainList.map((i, k) => {
- if (i.name === "开源业内资讯" || i.name === "开源战略工作组" || i.name === "开源活动")
- return (
-
-
-
- {i.name}
-
- {
- i.cmsDocList && i.cmsDocList.length > 0 ?
- i.cmsDocList.map((j, k) => {
- return (
- -
- {j.name}
-
- )
- })
- : ""
- }
-
- )
- })
- :
- ""
- }
-
-
- }
- {
- // 精选项目
- data && data.projectShow === 1 && projectList && projectList.length > 0 &&
-
-
{data.homepageProjectTitle}
- {
-
- {
- projectList.map((i, k) => {
- return (
-
- {i.projectProperties && i.projectProperties.authorImageUrl &&

}
-
-
- )
- })
- }
-
- }
-
- }
- {data &&
{data.firstTitle}
}
- {
- // 专区简介
- data && (data.introductionTitle || data.introductionContent || data.introductionImage) &&
-
-
- {data.introductionTitle &&
{data.introductionTitle}
}
-
-
- {
- data.introductionImage &&
-

- }
-
- }
- {
- // 核心贡献者
- data && data.memberShow === 1 && personList && personList.length > 0 &&
-
-
{data.homepageMemberTitle}
- {/*
*/}
- {personList && personList.map(item=>{
- return
- })}
-
- }
-
-
- {
- // 合作伙伴
- data && data.partnersShow === 1 && partnerList && partnerList.length > 0 &&
-
-
{data.homepagePartnersTitle}
-
-
- }
-
- )
-}
-export default HeaderPageCCF;
\ No newline at end of file
diff --git a/src/forge/Information/Pages/help.jsx b/src/forge/Information/Pages/help.jsx
deleted file mode 100644
index 823a6fdf0..000000000
--- a/src/forge/Information/Pages/help.jsx
+++ /dev/null
@@ -1,254 +0,0 @@
-import React, { useEffect, useState } from 'react';
-import { Box, LongWidth, FlexAJ } from '../../Component/layout';
-import { Affix, Button, Input, message, Spin, Tree } from 'antd';
-import Nodata from '../../Nodata';
-import nodata from '../img/nodata.png';
-import { tempEnum } from '../tempInfo';
-import { findFirstWiki, generateList, getParentKey, getWiki, parseSidebar, wikiPages } from '../../Wiki/api';
-import RenderHtml from '../../../components/render-html';
-import { Base64 } from 'js-base64';
-import { getTocContent } from '../../../common/marked';
-import { splitAndCombine } from '../../Wiki/utils';
-
-const { Search } = Input;
-const { DirectoryTree, TreeNode } = Tree;
-
-function ProjectSource(props) {
- const [loading, setLoading] = useState(false);
- const [wikiList, setWikiList] = useState(undefined);
- const [flattenedMenuList, setFlattenedMenuList] = useState([]);
- const [initMenuList, setInitMenuList] = useState([]);
- const [expandedKeys, setExpandedKeys] = useState(undefined);
- const [wiki, setWiki] = useState(undefined);
- const [wikiDetail, setWikiDetail] = useState(undefined);
- const [autoExpandParent, setAutoExpandParent] = useState(false);
- const [searchValue, setSearchValue] = useState("");
- const [wikiContMenu, setWikiContMenu] = useState(undefined);
- const { temp, history, data, adminUrl } = props;
- let scroller = undefined;
-
- const { owner, identifier, projectId } = (data && data.gitlinkProject) || {};
- const wikiParams = {
- owner,
- repo: identifier,
- projectId
- };
- const reg = /[.,/#!$%^&*;:{}=\-_`~():,。¥;「」|?》《~·【】‘、!]/g;
-
- useEffect(() => {
- if(!owner) return
- // 获取wiki 列表
- wikiPages(wikiParams).then(async res => {
- if (res && res.message === "200") {
- setWikiList(res.data);
- // 解析sidebar获取目录list
- const info = await parseSidebar(res.data, wikiParams);
- if (!info) return
- const { menuList } = info;
- // 默认打开第一个wiki
- const firstWiki = findFirstWiki(menuList);
- if(firstWiki){
- setExpandedKeys(splitAndCombine(firstWiki.key+""));
- setWiki(firstWiki);
- }
- setFlattenedMenuList(generateList(menuList));
- setInitMenuList(menuList);
- } else {
- setWikiList([]);
- }
- })
- }, [owner])
-
- useEffect(() =>{
- if(!wiki){
- return
- }
- // 获取wiki内容
- setLoading(true);
- getWiki({
- pageName: wiki.title_sub,
- ...wikiParams
- }).then(res=>{
- setLoading(false);
- if (res && res.message === "200") {
- setWikiDetail(res.data);
- const tocContent = getTocContent();
- setWikiContMenu(tocContent);
- } else {
- message.error("加载失败")
- }
- })
- }, [wiki && wiki.title_sub])
-
- useEffect(() => {
- if (scroller) {
- scroller.destroy();
- }
- if (!document.querySelector('.wikiContentHC .markdown_anchors')) {
- return;
- }
- require('intersection-observer');
- // 默认第一个高亮
- setTimeout(() => {
- const linkNode = document.querySelectorAll(`.wikiContMenuBox li a`)[0];
- linkNode && (linkNode.className = 'current');
- }, 100);
- const scrollama = require('scrollama');
- scroller = scrollama();
- scroller
- .setup({
- step: '.wikiContentHC .markdown_anchors',
- offset: 0.2,
- })
- .onStepEnter(({ element }) => {
- [].forEach.call(document.querySelectorAll('.wikiContMenuBox li a'), node => {
- node.className = '';
- });
- const currentNode = document.querySelectorAll(`.wikiContMenuBox li a[href="#${element.textContent.toLocaleLowerCase()}"]`)[0];
- if (currentNode) {
- currentNode.className = 'current';
- }
- })
- }, [wikiDetail])
-
- useEffect(() =>{
- // 点击事件
- const handleClick = (event) => {
- let target = event.target;
- if (target.tagName.toUpperCase() === 'A') {
- let ancher = target.getAttribute('href');
- if (ancher && ancher.startsWith('#')) {
- event.preventDefault()
- let viewEl = document.getElementById(ancher.replace(reg,""))
- if (viewEl) {
- viewEl.scrollIntoView(true);
- // 滚动结束后向下偏移170像素
- window.scrollBy(0,-170);
- }
- }
- }
- };
-
- // 滚动
- const scroll = () =>{
- var element = document.getElementById('wikiContMenuBox');
- var scrollTop = document.documentElement.scrollTop||document.body.scrollTop;
- var windowHeight = document.documentElement.clientHeight || document.body.clientHeight;
- var scrollHeight = document.documentElement.scrollHeight||document.body.scrollHeight;
- if(scrollHeight-scrollTop <= windowHeight*1.2){
- const maxElementHeight = (scrollHeight-scrollTop)/2-200;
- element && (element.style.maxHeight = maxElementHeight + 'px');
- }else if(scrollHeight-scrollTop <= windowHeight*1.5){
- const maxElementHeight = (scrollHeight-scrollTop)/2-100;
- element && (element.style.maxHeight = maxElementHeight + 'px');
- }else{
- element && (element.style.maxHeight = '80vh');
- }
- }
-
- document.addEventListener("click", handleClick);
- document.addEventListener("scroll", scroll);
- return () => {
- document.removeEventListener("click", handleClick);
- document.removeEventListener("scroll", scroll);
- };
- }, [])
-
- function changeSearchValue(value) {
- if (value) {
- const va = value.trim();
- // 找到命中搜索的item的父元素
- const expandedKeys = flattenedMenuList.map(item => {
- if (item.title.match(new RegExp(va, 'i'))) {
- return getParentKey(item.key, initMenuList);
- }
- return null;
- }).filter((item, i, self) => item && self.indexOf(item) === i);
- setSearchValue(va);
- setExpandedKeys(splitAndCombine(expandedKeys[0]));
- } else {
- setSearchValue("");
- }
- }
-
- // 收起展开
- function onExpand(expandedKeys) {
- setAutoExpandParent(false);
- setExpandedKeys(expandedKeys);
- }
-
- // 选中节点
- function selectTree(keys,event){
- let {isFile} = event.node.props.dataRef;
- if(isFile){
- setWiki(event.node.props.dataRef);
- }
- }
-
- function renderTreeNodes(data) {
- return data && data.length > 0 && data.map((item) => {
- const matchResult = item.titleStr.match(new RegExp(searchValue, 'i'));
- const title = matchResult ? (
-
- {item.titleStr.substr(0, matchResult.index)}
- {item.titleStr.substring(matchResult.index, matchResult.index+searchValue.length)}
- {item.titleStr.substr(matchResult.index+searchValue.length)}
-
- ) : (
- {item.titleStr}
- );
- return (
-
- {renderTreeNodes(item.children)}
-
- );
- });
- }
-
- const noDataText = adminUrl ? 前往配置 : "正在建设中,敬请期待"
- return (
-
-
-
{data && data.sectionHelperTitle}
-
- {
- wikiList && (wikiList.length > 0 ?
- {/* wiki目录导航 */}
-
-
-
-
- {renderTreeNodes(initMenuList)}
-
-
-
- {/* 内容区 */}
- {wikiDetail &&
-
-
-
-
-
{wikiDetail.name}
- {wikiDetail.commit &&
更新时间:{wikiDetail.commit.author.date || '刚刚'}
}
-
- {adminUrl && }
-
- {wikiDetail.md_content && }
-
- {wikiContMenu && wikiContMenu !== "" &&
-
- }
-
- }
- : (temp === tempEnum.zone1 ? : ))}
-
-
-
- )
-}
-export default ProjectSource;
diff --git a/src/forge/Information/Pages/main.jsx b/src/forge/Information/Pages/main.jsx
deleted file mode 100644
index 68cc8fa38..000000000
--- a/src/forge/Information/Pages/main.jsx
+++ /dev/null
@@ -1,238 +0,0 @@
-import React , { useState , useEffect } from 'react';
-import { Menu , Spin , Skeleton, Button, Dropdown } from 'antd';
-import Hot from '../Component/hot';
-import { Box , FlexAJ, LongWidth } from '../../Component/layout';
-import { Link } from 'react-router-dom';
-import Lists from './newsList';
-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';
-import { getNewsAllList , getNewsHotList } from '../api';
-import { tempConfig, tempEnum } from '../tempInfo';
-import { httpUrl } from '../fetch';
-
-
-function Main(props){
- const [ key , setKey ] = useState("1");
- const [ mainList , setMainList ] = useState(undefined);
- const [ name , setName] = useState(undefined);
- const [ menuH , setMenuH ] = useState(true);
- const [ hotList , setHotList ] = useState(undefined);
- const [ isSpin , setIsSpin ] = useState(true);
- const [ newCateId , setNewCateId ] = useState(undefined);
- const { deptId , cateId } = props.match.params;
- const { id, temp, role, history, sectionCmsTitle } = props;
-
- const menu = (
-
- );
-
-
- useEffect(()=>{
- if(id) {
- setIsSpin(true);
- if (temp === tempEnum.zone) {
- getMainList();
- } else {
- getCateList();
- }
- getHotList();
- }
- },[id])
-
- useEffect(() => {
- if (newCateId) {
- getSubHotList()
- }
- }, [newCateId])
-
- function getMainList(){
- getNewsAllList(id).then(result=>{
- if(result){
- let rows = result.data.rows;
- setMainList(rows);
- if (temp !== tempEnum.zone) {
- selectCate(rows[0].id)
- }
- setTimeout(() => {
- let ele = document.getElementById("menus");
- if(ele){
- let h = ele.clientHeight;
- setMenuH(h>56);
- }
- setIsSpin(false);
- }, 100);
- }
- }).catch(error=>{})
- }
-
- function getCateList() {
- const url = `${httpUrl}/cms/doc/open/zone/${id}/dirList`;
- axios.get(url).then(result=>{
- if(result){
- let rows = result.data.rows;
- setMainList(rows);
- if (temp !== tempEnum.zone) {
- selectCate(rows[0].id)
- }
- setIsSpin(false);
- }
- }).catch(error=>{})
- }
-
- function getHotList(){
- getNewsHotList(id,{
- pageSize:15,pageNum:1
- }).then(result=>{
- if(result){
- setHotList(result.data.rows);
- }
- }).catch(error=>{})
- }
-
- function getSubHotList() {
- const url = `${httpUrl}/cms/doc/open/dir/${newCateId}/hotDocList`;
- axios.get(url,{
- params:{pageSize:15,pageNum:1}
- }).then(result=>{
- if(result){
- setHotList(result.data.rows);
- }
- }).catch(error=>{})
- }
-
- function selectCate(id) {
- setNewCateId(id)
- props.history.push(`/zone/${deptId}/news/${id}`)
- }
-
- return(
-
-
-
-
-
{sectionCmsTitle}
- {role && role.role !== "None" &&
- {role.role === "Member" && }
- {role.role === "Member" ?
-
- : }
-
}
-
- {
- mainList && mainList.length>0 &&
- (
- temp === tempEnum.zone ?
-
- :
-
- {
- mainList.map((i,k)=>{
- if (k <= 4) {
- return(
-
selectCate(i.id)} >{i.name}
- )
- }
- })
- }
-
- )
- }
- {
- !mainList &&
- }
-
-
-
-
-
- {
- cateId ?
-
- :
-
- {
- mainList && mainList.length>0 &&
- mainList.map((i,k)=>{
- return(
-
-
-
{i.name}
- { i.cmsDocList && i.cmsDocList.length> 0 &&
{window.scrollTo(0,400)}}>更多

}
-
-
- {
- i.cmsDocList && i.cmsDocList.length>0 ?
- i.cmsDocList.map((j,e)=>{
- return(
-
{props.history.push(`/zone/${deptId}/newdetail/${j.id}`)}}>
- {e===0 &&
- (
- j.headImg ?
-

- :
-
- )
- }
-
-
{j.name}
-
- {j.summary}
-
-
-
{j.publishTime}
-
{j.visits}
-
-
-
- )
- })
- :
-
-

-
暂无数据~
-
- }
-
-
- )
- })
- }
-
- }
-
-
- {
- hotList && hotList.length>0 &&
-
-
-
- }
-
-
-
-
- )
-}
-export default Main;
\ No newline at end of file
diff --git a/src/forge/Information/Pages/newsCreate.jsx b/src/forge/Information/Pages/newsCreate.jsx
deleted file mode 100644
index 24721d43a..000000000
--- a/src/forge/Information/Pages/newsCreate.jsx
+++ /dev/null
@@ -1,186 +0,0 @@
-import React,{ useState , useEffect } from 'react';
-import { Breadcrumb, Button, Form, Input, message, Select } from 'antd';
-import { getZoneUrl } from 'educoder';
-import MdEditor from '../../../modules/tpm/challengesnew/tpm-md-editor';
-import RichEditor from '../../Component/RichEditor';
-import UploadImage from '../../Team/Component/UploadImage';
-import { tempConfig } from '../tempInfo';
-import '../index.scss';
-import { Base64 } from 'js-base64';
-import { addNewsByDirId, getDirListById, getNewsDetailByAu, updateDoc } from '../api';
-import { httpUrl } from '../fetch';
-
-function NewsCreate(props){
- const {history, id, role, current_user} = props;
- const temp = props.temp;
- const { getFieldDecorator, validateFields , setFieldsValue, setFields } = props.form;
- const { deptId, id: newsId } = props.match.params;
- const pathname = props.location.pathname;
- const [type, setType] = useState(new URLSearchParams(props.location.search.substring(1)).get('type'));
- const [value, setValue] = useState(undefined);
- const [imageUrl, setImageUrl] = useState(undefined)
- const [dirList, setDirList] = useState(undefined);
- const [loading, setLoading] = useState(false);
- const [isEdit, setIsEdit] = useState(false);
- const { sectionCmsTitle } = props.data;
- const layout = {
- labelCol: { span: 2 },
- wrapperCol: { span: 14 },
- };
-
- useEffect(()=>{
- if((role && role.role === "None") || (current_user && !current_user.login)){
- history.push(`/zone/${deptId}`);
- }
- }, [role])
-
- useEffect(()=>{
- id && getDircList();
- },[id])
-
- useEffect(()=>{
- if(pathname){
- if(pathname.endsWith("/edit")){
- setIsEdit(true);
- getNewsDetail();
- }else{
- setIsEdit(false);
- }
- }
- },[pathname])
-
- function getDircList(){
- getDirListById(id).then(res=>{
- if(res){
- setDirList(res.data.rows);
- }
- })
- }
-
- function getNewsDetail() {
- getNewsDetailByAu(newsId).then(res=>{
- if(res && res.data){
- const {name, summary, cmsDir, content, headImg, editorType} = res.data.data;
- setType(editorType === "rich_editor" ? 'richEditor' : 'mdEditor')
- setFieldsValue({
- name,
- summary,
- dirId: cmsDir && cmsDir.id,
- content: Base64.decode(content),
- headImg
- });
- setImageUrl(headImg);
- setValue(Base64.decode(content));
- }
- })
- }
-
- // 新建文章
- function submit(e){
- e.preventDefault();
- validateFields((err, fieldsValue)=>{
- const hasContent = type === "richEditor" && fieldsValue.content === "
"
- if(err || hasContent){
- hasContent && setFields({content: {value:fieldsValue.content,errors:[new Error('请输入内容!')]}});
- return;
- }
- setLoading(true);
- const params = {
- ...fieldsValue,
- editorType: type === "richEditor" ? "rich_editor" : "markdown_editor",
- headImg: imageUrl,
- content: Base64.encode(fieldsValue.content)
- }
- if(isEdit){
- delete params.editorType;
- return updateDoc(newsId, params).then(res=>{
- const {data:{code, msg}} = res;
- setLoading(false);
- if(code === 200){
- message.success("提交成功");
- history.push(`/zone/${deptId}/newdetail/${newsId}`);
- }else{
- message.error(msg || '提交失败,请联系管理员!')
- }
- }).catch(e=>{
- setLoading(false);
- })
- }
- addNewsByDirId(fieldsValue.dirId, params).then(res=>{
- const {data:{code, msg, data}} = res;
- setLoading(false);
- if(code === 200){
- message.success("提交成功");
- history.push(`/zone/${deptId}/newdetail/${data}`);
- }else{
- message.error(msg || '提交失败,请联系管理员!')
- }
- }).catch(e=>{
- setLoading(false);
- })
- })
- }
-
- return(
-
-
- { sectionCmsTitle }
- {isEdit ? '编辑' : '新建'}文章
-
-
-
- {getFieldDecorator("name", {
- rules:[{ required:true,message:"请输入文章标题!" },
- {type: 'string', max: 200, message: "最大长度200"},
- {pattern: /^[^<>[\]/\\]+$/, message: "不能输入特殊字符:< > [ ] / \\"}]
- })(
-
- )}
-
-
- {getFieldDecorator("summary", {
- rules:[{ required:true,message:"请输入概览!" },
- {type: 'string', max: 200, message: "最大长度200"}]
- })(
-
- )}
-
-
- {getFieldDecorator("dirId", {
- rules:[{ required:true,message:"请选择文章所属栏目!" }]
- })(
-
- )}
-
-
- {getFieldDecorator("content",{
- rules:[{required:true,message:"请输入内容!"}],
- })(
- type === "richEditor" ? {setFieldsValue({"content": value})}}/> : {setFieldsValue({"content": value})}}
- imageExpand={false}
- >
- )}
-
-
- setImageUrl(url) } url={ imageUrl ? imageUrl : undefined} action={ getZoneUrl(`/api/cms/common/upload`) } />
-
-
-
-
-
-
-
-
- )
-}
-export default Form.create()(NewsCreate);
\ No newline at end of file
diff --git a/src/forge/Information/Pages/newsDetail.jsx b/src/forge/Information/Pages/newsDetail.jsx
deleted file mode 100644
index 0423cb467..000000000
--- a/src/forge/Information/Pages/newsDetail.jsx
+++ /dev/null
@@ -1,192 +0,0 @@
-import React,{ useState , useEffect, useRef } from 'react';
-import { Badge, Breadcrumb , Divider, Spin } from 'antd';
-import liulan from '../img/liulan.png';
-import RenderHtml from '../../../components/render-html';
-import { Base64 } from 'js-base64';
-import { getNewsDetail } from '../api';
-import { isPhone } from 'educoder';
-import { tempConfig } from '../tempInfo';
-import Acce from '../Component/mobile/accessory';
-import { addMeta, setSeoMeta, configShareForCustom } from 'educoder';
-import CommentList from '../Component/comments/list'
-import { connect } from 'react-redux';
-import { withRouter } from "react-router";
-import { setZoneDetail, setNewsDetail } from '../../../redux/actions/server';
-
-
-function NewsDetail(props){
- const { deptId , id } = props.match.params;
- const [ detail , setDetail ] = useState(props.newsDetail || undefined);
- const [ cmsDir , setCmsDir ] = useState(props.newsDetail ? props.newsDetail.cmsDir : undefined);
- const [ content , setContent]=useState( props.newsDetail ? Base64.decode(props.newsDetail.content) : undefined);
- const [ isSpin , setIsSpin]=useState(false);
- const [ commentReload, setCommentReload] = useState(undefined);
- const temp = props.temp;
- const zonedetail = props.zoneDetail || props.data;
-
- if (__SERVER__ && detail) {
- setMeta()
- }
-
- useEffect(()=>{
- let initialContent = undefined;
- // 设置网页标题
- if(detail){
- const { name, cmsDir} = detail;
- document.title = `${ name }/${ cmsDir.name }`;
- setMeta()
- setTimeout(() => {
- configShareForCustom(detail.name, detail.summary, detail.headImg)
- }, 1000);
- }
- if(isPhone() && zonedetail){
- setTimeout(()=>{
- window.scrollTo(0,1);
- if(detail)
- document.title = detail.name;
- },100);
- initialContent = document.querySelector('meta[name="viewport"]').getAttribute('content');
- document.querySelector('meta[name="viewport"]').setAttribute('content','width=device-width, user-scalable=no,initial-scale=1.0,maximum-scale=1.0,minimum-scale=1.0');
- }
- return()=>{
- if(isPhone()){
- document.querySelector('meta[name="viewport"]').setAttribute('content', initialContent);
- }
- if (zonedetail) {
- setMeta(true)
- }
- }
- },[zonedetail,detail])
-
- useEffect(()=>{
- if(id){
- window.scrollTo(0,isPhone() ? 0 : 450);
- getDetails();
- }
- },[id])
-
- function setMeta(unmount = false) {
- if (unmount) {
- document.title= zonedetail.name;
- setSeoMeta(`${zonedetail.name}`, zonedetail.name, zonedetail.subTitle, `/zone/${deptId}`)
- } else {
- const { name, cmsDir, summary, id} = detail;
- const title = `${ name }/${ cmsDir.name }`;
- const keywords = `${ name },${ cmsDir.name },${ zonedetail.name }`;
- document.title = title;
- setSeoMeta(keywords, title, summary, `/zone/${deptId}/newdetail/${ id }`)
- }
- }
-
- function getDetails(){
- setIsSpin(true)
- getNewsDetail(id).then(result=>{
- if(result){
- let data = result.data.data;
- setDetail(data);
- setCmsDir(data.cmsDir);
- setContent(Base64.decode(data.content));
- setIsSpin(false)
- }
- }).catch(error=>{
- props.history.push(`/zone/${deptId}/news`);
- setIsSpin(false)
- })
- }
-
- return(
-
- {
- isPhone() &&
- }
-
-
- {
- detail &&
-
- {
- isPhone() && zonedetail &&
-
- }
- {
- !isPhone() &&
-
- { zonedetail.sectionCmsTitle }
- { cmsDir && {cmsDir.name} }
- 正文
-
- }
-
-
-
{detail.name}
-
- { cmsDir &&
{ detail.publishUserNickname } }
- { cmsDir && - { detail.isFirstPublish ? '创建于' : '更新于' }{detail.publishTime}
}
- { !!detail.visits &&
{detail.visits} }
- { detail.auditStatus === '2' && }
- { detail.auditStatus === '0' && }
-
-
- { !isPhone() &&
}
- {
- content ?
-
- :
-
暂无详情~
- }
-
- {
- // 审核通过才有评论
- detail.auditStatus === '1' &&
- {setCommentReload(Math.random())}}/>
-
- }
-
-
- }
-
-
- {
- isPhone() &&
- }
-
- )
-}
-
-const mapStateToProps = (state) => {
- const {
- zoneDetail,
- newsDetail
- } = state.zoneReducer;
- return {
- zoneDetail,
- newsDetail
- };
-}
-
-const mapDispatchToProps = (dispatch) => ({
- clearProject: (type) => dispatch(actions.clearProject(type)),
-});
-
-NewsDetail.preFetch = ({ store, match, query }) => {
- return new Promise(async function(resolve, reject) {
- let { dispatch } = store;
- // const { owner,projectsId } = match.params
- const promises = [
- dispatch(setZoneDetail(match.params)),
- dispatch(setNewsDetail(match.params)),
- ];
- const data = await Promise.all(promises);
- resolve({
- code: 200,
- });
- });
-};
-
-export default withRouter(connect(
- mapStateToProps,
- mapDispatchToProps
-)(NewsDetail));
diff --git a/src/forge/Information/Pages/newsList.jsx b/src/forge/Information/Pages/newsList.jsx
deleted file mode 100644
index 67a84e154..000000000
--- a/src/forge/Information/Pages/newsList.jsx
+++ /dev/null
@@ -1,173 +0,0 @@
-import React , { useEffect , useState } from 'react';
-import PublicBanner from '../Component/publicBanner';
-import { Box , LongWidth } from '../../Component/layout';
-import { Menu , Breadcrumb , Pagination , Spin , Tooltip } 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';
-import nodata from '../img/nodata.png';
-import { Link } from 'react-router-dom';
-import { httpUrl } from '../fetch';
-import { tempEnum } from '../tempInfo';
-
-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);
- const [ menuSpin , setMenuSpin ] = useState(true);
- const { id, temp } = props;
-
-
- useEffect(()=>{
- if(id && cateId ){
- setMenuSpin(true);
- getMainList();
- }
- },[id,cateId,pageNum])
-
- // useEffect(()=>{
- // if(pageNum){
- // window.scrollTo(0,400);
- // }
- // },[pageNum])
-
-
- function getColumnDetail(){
- const url = `${httpUrl}/cms/doc/open/dir/${cateId}`;
- axios.get(url).then(result=>{
- if(result){
- setDetails(result.data.data);
- }
- }).catch(error=>{})
- }
-
- function getColumnList(){
- const url = `${httpUrl}/cms/doc/open/zone/${id}/dirList`;
- axios.get(url).then(result=>{
- if(result){
- setColumnList(result.data.rows);
- setTotal(result.data.total);
- setMenuSpin(false);
- }
- }).catch(error=>{})
- }
-
- function getMainList(){
- const url = `${httpUrl}/cms/doc/open/dir/${cateId}/docList`;
- axios.get(url,{
- params:{
- pageNum,pageSize
- }
- }).then(result=>{
- if(result){
- setMainList(result.data.rows);
- setTotal(result.data.total);
- setMenuSpin(false);
- }
- }).catch(error=>{})
- }
-
- function getHotList(){
- const url = `${httpUrl}/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 &&
- //
- // }
- //
- //
- //
- //
-
-
- {
- mainList && mainList.length>0 &&
- mainList.map((i,k)=>{
- return(
-
{props.history.push(`/zone/${deptId}/newdetail/${i.id}`)}} key={k}>
- {
- i.headImg ?
-

- :
-
- }
-
-
{i.name}
-
- {i.summary}
-
-
-
{i.publishTime}
-
{i.visits}
-
-
-
- )
- })
- }
- {
- mainList && mainList.length === 0 &&
-
-

-
暂无数据~
-
- }
- {
- total > pageSize &&
-
- }
-
-
- //
- /* {
- hostList && hostList.length>0 &&
-
-
-
- } */
- /*
-
-
*/
- //
- )
-}
-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
deleted file mode 100644
index c5f5aecb2..000000000
--- a/src/forge/Information/Pages/projectSource.jsx
+++ /dev/null
@@ -1,182 +0,0 @@
-import React , { useEffect , useState } from 'react';
-import Banner from '../Component/publicBanner';
-import { Box , LongWidth } from '../../Component/layout';
-import { Input , Menu , Pagination , Spin } from 'antd';
-import { Link } from 'react-router-dom';
-import Nodata from '../../Nodata';
-import axios from 'axios';
-import { getProjectsLists , getProjectsTypeLists } from '../api';
-import nodata from '../img/nodata.png';
-import { tempEnum } from '../tempInfo';
-
-const { Search } = Input;
-
-function ProjectSource(props){
- const { deptId } = props.match.params;
- const [ typeId , setTypeId ] = useState(0);
- const [ typeList , setTypeList ] = useState(undefined);
- const [ lists , setLists ] = useState(undefined);
- const [ page, setPage ] = useState(1);
- const [ total , setTotal ] = useState(0);
- const pageSize = 20;
- const [ searchName , setSearchName ] = useState(undefined);
- const [ value , setValue ] = useState(undefined);
- const [ loading , setLoading ] = useState(false);
- const { id, temp, sectionProjectTitle } = props;
-
- useEffect(()=>{
- if(id){
- getTypeList();
- }
- },[id])
-
- useEffect(()=>{
- if(id){
- setLoading(true);
- getLists();
- }
- },[id,typeId,page,searchName])
-
- function getLists(){
- getProjectsLists(id,{
- pageNum:page,
- name:searchName,
- pageSize,
- projectTypeId:typeId===0?undefined:typeId
- }).then(result=>{
- if(result){
- setLists(result.data.rows);
- setTotal(result.data.total);
- setLoading(false);
- }
- }).catch(error=>{})
- }
-
-
- function getTypeList(){
- getProjectsTypeLists(id).then(result=>{
- if(result){
- setTypeList(result.data.rows);
- }
- }).catch(error=>{})
- }
- const menu = (
-
- )
-
- function changeValue(e){
- if(!e.target.value && e.target.value !==value){
- setSearchName(e.target.value);
- }
- setValue(e.target.value);
- }
- return(
-
- {/*
*/}
-
-
{sectionProjectTitle}
- { temp === tempEnum.zone1 &&
聚合开源特色项目,搭建硬件开源服务桥梁
}
-
-
- - 项目分类
- - {setTypeId(0)}}>全部分类
- {
- typeList && typeList.length>0 &&
- typeList.map((i,k)=>{
- return(
- - {setTypeId(i.id);window.scrollTo(0,400)}}>{i.name}
- )
- })
- }
-
-
-
-
-
{setSearchName(value)}}
- allowClear={true}
- size={'large'}
- placeholder="请输入项目名称"
- style={{width:645}}
- enterButton={搜索}
- />
- {/*
- 排序
- */}
-
-
- pageSize ?"in_box_line":""}`}>
- {
- lists && lists.length>0 ?
- lists.map((i,k)=>{
- return(
-
- {i.projectProperties &&

}
-
-
- window.open(i.projectURL)}>{i.projectProperties && i.projectProperties.name}
- {
- i.projectProperties &&
-
- {/* - 333
*/}
- { i.projectProperties.praisesCount > 0 && - {i.projectProperties.praisesCount}
}
- { i.projectProperties.forkedCount > 0 && - {i.projectProperties.forkedCount}
}
-
- }
-
- {
- i.projectProperties && i.projectProperties.description &&
-
- {i.projectProperties.description}
-
- }
- {
- i.projectProperties && i.projectProperties.topics &&
-
- {
- i.projectProperties.topics.split(",").map(t=>{
- return(
- - {t}
- )
- })
- }
-
- }
-
- {/* { i.deptName && - {i.deptName}
} */}
- { i.projectType && - {i.projectType}
}
- { i.projectProperties && i.projectProperties.language && - {i.projectProperties.language}
}
- { i.projectProperties && i.projectProperties.timeAgo && - 更新于{i.projectProperties.timeAgo}
}
-
-
-
- )
- })
- :""
- }
- {
- lists && lists.length === 0 && (temp === tempEnum.zone1 ?
:
)
- }
-
-
- {
- total > pageSize &&
-
-
{setPage(page);window.scrollTo(0,0)}} total={total} showQuickJumper/>
-
- }
-
-
-
-
-
- )
-}
-export default ProjectSource;
diff --git a/src/forge/Information/Pages/selfList.jsx b/src/forge/Information/Pages/selfList.jsx
deleted file mode 100644
index f64cb551d..000000000
--- a/src/forge/Information/Pages/selfList.jsx
+++ /dev/null
@@ -1,199 +0,0 @@
-import React,{ useState, useEffect } from 'react';
-import { Breadcrumb , Spin , Pagination , Modal, Button } from 'antd';
-import { Link } from 'react-router-dom';
-import { getNewsMyList , getSourceMyList , delNewsMyList , delSourceMyList } from '../api';
-import moment from 'moment';
-import nodata from '../img/nodata.png';
-import { tempEnum } from '../tempInfo';
-import emptydata from '../../Images/nodata.png';
-import '../index.scss';
-
-
-function SelfList(props){
- const [ status , setStatus ] = useState(1);
- const [ isSpin , setIsSpin ] = useState(true);
- const [ source , setSource ] = useState(undefined);
- const [ list , setList ] = useState(undefined);
- const [ page , setPage ] = useState(1);
- const [ total , setTotal ] = useState(0);
-
- const [ visible ,setVisible ] = useState(false);
- const [ deleId , setDeleId] = useState(undefined);
- const pathname = props.location.pathname;
- const { deptId} = props.match.params;
- const { id , temp , data } = props;
- // const { sectionCmsTitle } = data;
- const sectionCmsTitle = data && data.sectionCmsTitle;
- const limit = 15;
-
- useEffect(()=>{
- if(id){
- setIsSpin(true);
- getFunc(source);
- }
- },[id,source,page])
-
-
- useEffect(()=>{
- if(page===1){
- setIsSpin(true);
- getFunc(source);
- }else{
- setPage(1);
- }
- },[status])
-
- function getFunc(s){
- if(s===true){
- getSource();
- }
- if(s===false){
- getNew();
- }
- }
-
- useEffect(()=>{
- if(pathname){
- if(pathname.indexOf("/source/self")>-1){
- setSource(true);
- }else{
- setSource(false);
- }
- }
- },[pathname])
-
- function getSource(){
- getSourceMyList({
- auditStatus:status,
- zoneId:id,
- pageSize:limit,
- pageNum:page
- }).then(result=>{
- let rows = result.data && result.data.rows;
- if(rows && rows.length>0){
- setList(rows);
- }else{
- setList([]);
- }
- setTotal(result.data.total);
- setIsSpin(false);
- })
- }
-
- function getNew(){
- getNewsMyList(id,{
- auditStatus:status===0 ? 2 : status === 2 ? 0 : 1,
- pageSize:limit,
- pageNum:page
- }).then(result=>{
- let rows = result.data && result.data.rows;
- if(rows && rows.length>0){
- setList(rows);
- }else{
- setList([]);
- }
- setTotal(result.data.total);
- setIsSpin(false);
- })
- }
-
- function cancelFunc(){
- setVisible(false);
- setDeleId(undefined);
- }
- function sureFunc(){
- if(source){
- delSourceMyList(deleId).then(response=>{
- setVisible(false);
- props.showNotification("删除成功!");
- getSource();
- })
- }else{
- delNewsMyList(deleId).then(response=>{
- setVisible(false);
- if(status ===1){
- props.showNotification("提交成功!");
- }else{
- props.showNotification("删除成功!");
- getNew();
- }
- })
- }
- }
-
- return(
-
-
-
-
-
-
确定删除该{source?"资源":"文章"}?
- {(source || (!source && status === 1 && (data && data.docNeedAudit===1))) &&
{source?"删除后所有资源文件将被清除,请谨慎操作":"此操作将提交删除申请,管理员同意申请后该文章将被删除"}
}
-
-
-
-
-
-
-
-
- { sectionCmsTitle }
- 我的{source ? "资源":"文章"}
-
-
- - setStatus(1)} className={status===1?"active":""}>已发布
- - setStatus(0)} className={status===0?"active":""}>待审核
- - setStatus(2)} className={status===2?"active":""}>未通过
-
-
-
-
- {
- list && list.length === 0 &&
-
-

-
暂无数据~
-
- }
- {
- list && list.length > 0 && list.map((i,k)=>{
- return(
- -
-
-
- )
- })
- }
-
- {
- total > limit &&
-
-
{setPage(p);window.scrollTo(0,450)}}/>
-
- }
-
-
-
- )
-}
-export default SelfList;
\ No newline at end of file
diff --git a/src/forge/Information/Pages/source.jsx b/src/forge/Information/Pages/source.jsx
deleted file mode 100644
index 39366af56..000000000
--- a/src/forge/Information/Pages/source.jsx
+++ /dev/null
@@ -1,194 +0,0 @@
-import React , { useEffect , useState } from 'react';
-import { Button, Input , Pagination, Spin, Tag } from 'antd';
-import SourceIcon from '../img/sourceIcon.png';
-import { Link } from 'react-router-dom';
-import axios from 'axios';
-import { getSourceTypeList , getSourceList , getSourceZoneList } from '../api';
-import Nodata from '../../Nodata';
-import ImgGreen from '../img/green_nodata.png';
-import '../indexZone1.scss';
-import { FlexAJ } from '../../Component/layout';
-
-const { Search } = Input;
-
-function Source(props){
- const { deptId } = props.match.params;
- const [ sourceList , setSourceList ] = useState(undefined);
- const [ zoneList , setZoneList ] = useState(undefined);
- const [ typeList , setTypeList ] = useState(undefined);
- const [ chooseZoneId , setChooseZoneId ] = useState(undefined);
- const [ chooseTypeId , setChooseTypeId ] = useState(undefined);
- const [ page , setPage ] = useState(1);
- const [ total , setTotal ] = useState(0);
- const [ search , setSearch ] = useState(undefined);
- const [ isSpin , setIsSpin ] = useState(true);
- const limit = 20;
- const { id , temp, history, role, sectionResourceTitle } = props;
-
- useEffect(()=>{
- id && getLists();
- },[id,chooseTypeId,chooseZoneId,page,search])
-
- useEffect(()=>{
- id && getZoneList();
- id && getTypeList();
- },[id])
-
- function getZoneList(){
- getSourceZoneList(id).then(response=>{
- if(response && response.data){
- setZoneList(response.data.rows);
- }
- }).catch(error=>{})
- }
-
- function getTypeList(){
- getSourceTypeList(id).then(response=>{
- if(response && response.data){
- setTypeList(response.data.rows);
- }
- }).catch(error=>{})
- }
-
- function getLists(){
- setIsSpin(true);
- getSourceList({
- id,pageSize:limit,pageNum:page,searchTypeId:chooseTypeId,domainId:chooseZoneId,name:search
- }).then(response=>{
- if(response){
- setSourceList(response.data.rows);
- setTotal(response.data.total);
- setIsSpin(false);
- }
- }).catch(error=>{})
- }
-
-
- function onSourceSearch(value){
- setSearch(value);
- setPage(1);
- }
-
- function addSource(){
- if(role && role.role === "Manager"){
- window.open(role.resourceManageUrl);
- }else{
- history.push(`/zone/${deptId}/source/add`)
- }
- }
-
- return(
-
-
-
{sectionResourceTitle}
-
-
搜索 :undefined}
- />
- {role && role.role !== "None" &&
- {role.role === "Member" && }
-
-
}
-
-
-
- {
- (zoneList && zoneList.length>0 ) || (typeList && typeList.length >0 ) ?
-
- {
- zoneList && zoneList.length>0 &&
-
- 资源领域
-
-
- {setChooseZoneId(undefined);window.scrollTo(0,450)}} className={!chooseZoneId ?"active":""}>全部
- {
- zoneList.map((i,k)=>{
- return(
- - {setChooseZoneId(i.id);window.scrollTo(0,450)}} className={`${chooseZoneId && chooseZoneId === i.id ? "active":""} task-hide`}>{i.name}
- )
- })
- }
-
-
- }
- {
- typeList && typeList.length>0 &&
-
- 资源类别
-
-
- {setChooseTypeId(undefined);window.scrollTo(0,450)}} className={!chooseTypeId ?"active":""}>全部
- {
- typeList.map((i,k)=>{
- return(
- - {setChooseTypeId(i.id);window.scrollTo(0,450)}} className={`${chooseTypeId && chooseTypeId === i.id ? "active":""} task-hide`}>{i.name}
- )
- })
- }
-
-
- }
-
- :""
- }
-
-
-
- {
- sourceList && sourceList.length > 0 &&
-
- {sourceList.map((i,k)=>{
- return(
-
-
{window.scrollTo(0,450)}} className="task-hide">{i.name}
-
- {i.summary}
-
-
-
- {temp === "zone" && {i.domainName}}
-
-
{i.downloadCount}
-
-
- {temp === "zone1" &&
- {i.domainName}
- {i.zoneResourceTypeList &&
- {i.zoneResourceTypeList.reduce((pre, cur)=>{
- return pre ? `${pre}, ${cur.name}` : cur.name
- }, '')}
- }
-
- }
-
-
- )
- })
- }
-
- }
- {sourceList && sourceList.length === 0 &&
-
-
-
- }
- {
- total > limit &&
-
-
{setPage(p);window.scrollTo(0,450);}} showQuickJumper/>
-
- }
-
-
-
-
- )
-}
-export default Source;
\ No newline at end of file
diff --git a/src/forge/Information/Pages/sourceCreate.jsx b/src/forge/Information/Pages/sourceCreate.jsx
deleted file mode 100644
index 9b99a3f98..000000000
--- a/src/forge/Information/Pages/sourceCreate.jsx
+++ /dev/null
@@ -1,241 +0,0 @@
-import React,{ useState , useEffect } from 'react';
-import { Breadcrumb, Button, Form, Icon, Input, message, Select, Upload } from 'antd';
-import { getZoneUrl } from 'educoder';
-import '../index.scss';
-import { Link } from 'react-router-dom';
-import { getTypeByFileId, getSourceZoneList, addResource, getSourceDetailByAu, updateMyResource } from '../api';
-
-function SourceCreate(props){
- const {history, id, role, current_user} = props;
- const { getFieldDecorator, validateFields , setFieldsValue, setFields } = props.form;
- const { deptId, sourceid} = props.match.params;
- const pathname = props.location.pathname;
- const [ zoneList , setZoneList ] = useState(undefined);
- const [files, setFiles] = useState([]);
- const [loadingBut, setLoadingBut] = useState(false);
- const [isEdit, setIsEdit] = useState(false);
-
- const layout = {
- labelCol: { span: 2 },
- wrapperCol: { span: 14 },
- };
-
- useEffect(()=>{
- if((role && role.role === "None") || (current_user && !current_user.login)){
- history.push(`/zone/${deptId}`);
- }
- }, [role])
-
- useEffect(()=>{
- id && getZoneList();
- },[id])
-
- useEffect(()=>{
- if(pathname){
- if(pathname.endsWith("/edit")){
- setIsEdit(true);
- getSourceDetail();
- }else{
- setIsEdit(false);
- }
- }
- },[pathname])
-
- function getSourceDetail() {
- getSourceDetailByAu(sourceid).then(res=>{
- if(res && res.data){
- const {name, domainId, summary, fileList} = res.data.data;
- const fileMap = fileList.map(item=>{
- const {fileId, fileSizeInfo, fileOriginName, zoneResourceType: {id, name}} = item;
- return {
- uid: fileId,
- status: "done",
- response: {fileId: fileId, fileSize: fileSizeInfo},
- name: fileOriginName,
- zoneResourceType:{id, name}
- }
- })
- setFiles(fileMap);
- setFieldsValue({
- name,
- domainId,
- summary,
- fileList: fileMap
- });
- }
- })
- }
-
- function getZoneList(){
- getSourceZoneList(id).then(response=>{
- if(response && response.data){
- setZoneList(response.data.rows);
- }
- }).catch(error=>{})
- }
-
- // 新建/编辑资源
- function submit(e){
- e.preventDefault();
- validateFields((err, fieldsValue)=>{
- if(err || !files.length){
- !files.length && setFields({fileList: {value:undefined,errors:[new Error('请上传资源附件!')]}});
- return;
- }
- const fileIds = files.map(item=>{return item.response.fileId}).toString();
- const params = {
- ...fieldsValue,
- zoneId: id,
- fileIds
- }
- delete params.fileList;
- if(isEdit){
- delete params.zoneId;
- params.id= parseInt(sourceid, 10);
- updateMyResource(params).then((res)=>{
- const {data:{code, msg}} = res;
- if(code === 200){
- message.success("提交成功");
- history.push(`/zone/${deptId}/source/${sourceid}`);
- }else{
- message.error(msg || '提交失败,请联系管理员!')
- }
- })
- return;
- }
- addResource(params).then((res)=>{
- const {data:{code, msg, data}} = res;
- if(code === 200){
- message.success("提交成功");
- history.push(`/zone/${deptId}/source/${data.id}`);
- }else{
- message.error(msg || '提交失败,请联系管理员!')
- }
- })
- })
- }
-
- function beforeUpload(file){
- if (file.size > 200 * 1024 * 1024) {
- message.error('单个文件限制200MB以内');
- return false;
- }
- if(files){
- const sameNameFIles = files.filter(item=>item.name === file.name);
- if(sameNameFIles.length >= 1){
- message.error("请不要重复上传同名文件!");
- return false;
- }
- }
- return true;
- }
-
- async function onChange({file, fileList: fileListByUpload}){
- if(file && (file.status === "done" || file.status === 'uploading' || file.status === 'removed')){
- setLoadingBut(true);
- const fileList = [...files];
- const index = fileList.findIndex(item=>item.uid === file.uid);
- if(index !== -1){
- fileList[index] = file;
- }else{
- fileList.push(file);
- }
- setFiles(fileList);
- if(!file.response) return
- if(file.response.code !== 200){
- message.error(file.response.msg || '上传失败,请联系管理员!')
- fileList.pop()
- setFiles([...fileList]);
- setLoadingBut(false);
- }else{
- // 获取此附件的资源类别
- await getTypeByFileId(id, file.response.fileId).then((res)=>{
- const {data:{code, data: data1, msg}} = res;
- if(code !== 200){
- return message.error(msg);
- }
- fileList[fileList.length-1].zoneResourceType = {
- id: data1.id,
- name: data1.name
- }
- })
- setFiles([...fileList]);
- setLoadingBut(false);
- }
- }
- }
-
- function deleteFile(uid){
- const fileList = files.filter(item=>item.uid !== uid);
- setFiles(fileList);
- }
-
- return(
-
-
- 资源列表
- {isEdit ? '编辑' : '新建'}资源
-
-
-
- {getFieldDecorator("name", {
- rules:[{ required:true,message:"请输入资源名称!" },
- {type: 'string', max: 200, message: "最大长度200"}]
- })(
-
- )}
-
-
- {getFieldDecorator("domainId", {
- rules:[{ required:true,message:"请选择资源领域!" }]
- })(
-
- )}
-
-
- {getFieldDecorator("summary", {
- rules:[{ required:true,message:"请输入资源简介!" },
- {type: 'string', max: 300, message: "最大长度300"}]
- })(
-
- )}
-
-
可上传多个资源文件,单个文件限制200MB以内 }>
- {getFieldDecorator("fileList", {
- rules:[{ required:true,message:"请上传资源附件!" }]
- })(
-
-
-
- )}
-
- {/* 附件展示 */}
-
- {files && files.map((item, index)=>{
- const {uid, status, response, name, zoneResourceType} = item;
- return
- {status === "uploading" ? : }
- {name}
- {response && response.fileSize}
- {zoneResourceType && zoneResourceType.name}
- {deleteFile(uid)}}/>
-
- })}
-
-
-
-
-
-
-
-
- )
-}
-export default Form.create()(SourceCreate);
\ No newline at end of file
diff --git a/src/forge/Information/Pages/sourceDetail.jsx b/src/forge/Information/Pages/sourceDetail.jsx
deleted file mode 100644
index e9a181069..000000000
--- a/src/forge/Information/Pages/sourceDetail.jsx
+++ /dev/null
@@ -1,98 +0,0 @@
-import React , { useEffect , useState } from 'react';
-import { Badge, Breadcrumb } from 'antd';
-import SourceFile from '../img/sourceFile.png';
-import { getSourceDetail } from '../api';
-import { Link } from 'react-router-dom';
-import { httpUrl } from '../fetch';
-import { AlignCenter, FlexAJ } from '../../Component/layout';
-import SourceIcon from '../img/sourceIcon.png';
-import { addMeta, setSeoMeta } from 'educoder';
-
-
-function SourceDetail(props){
- const { deptId , sourceid } = props.match.params;
- const [ detail , setDetail ] = useState(undefined);
- const zonedetail = props.data;
- const {temp} = props;
-
- useEffect(()=>{
- if(sourceid){
- getDetails();
- }
- },[sourceid])
-
- useEffect(()=>{
- // 设置网页标题
- if(detail){
- const { name, domainName, summary} = detail;
- document.title = `${ name }/${ domainName }`;
- addMeta('Keywords', `${ name },${ domainName },${ summary }`);
- }
- return componentWillUnmount
- }, [detail])
-
- function componentWillUnmount() {
- if (zonedetail) {
- document.title= zonedetail.mainTitle;
- setSeoMeta(`${zonedetail.name},`, zonedetail.name, zonedetail.subTitle, `/zone/${deptId}`)
- }
- }
-
- function getDetails(){
- getSourceDetail(sourceid).then(response=>{
- if(response){
- setDetail(response.data.data);
- }
- }).catch(error=>{})
- }
-
- return(
-
-
- 资源列表
- 详情页
-
- {
- detail &&
-
-
-
-
- {detail.domainName}
- {detail.name}
-
-
-
{detail.downloadCount}
-
-
- {detail.createUser && detail.createUser.avatar &&

}
- {detail.createUser &&
{detail.createUser.nickName}}
-
发布于{detail.updateTime || detail.createTime}
- {detail.auditStatus === '0' &&
}
- {detail.auditStatus === '2' &&
}
-
-
{detail.summary}
- {
- detail.fileList && detail.fileList.length > 0 &&
-
- {
- detail.fileList.map((i,k)=>{
- return(
- -
-
- {i.fileOriginName}
- {i.zoneResourceType.name}
- {i.fileSizeInfo}
- 下载
-
- )
- })
- }
-
- }
-
- }
-
- )
-}
-export default SourceDetail;
diff --git a/src/forge/Information/Pages/zoneVIP.jsx b/src/forge/Information/Pages/zoneVIP.jsx
deleted file mode 100644
index 0351e2ac8..000000000
--- a/src/forge/Information/Pages/zoneVIP.jsx
+++ /dev/null
@@ -1,97 +0,0 @@
-import React , { useState , useEffect } from 'react';
-import Crown from '../img/crown.png';
-import Nodata from '../../Nodata';
-import { Link } from 'react-router-dom';
-import { Spin, Button, Icon } from 'antd';
-import { tempConfig, tempEnum } from '../tempInfo'
-import MemberApply from '../Component/memberApply';
-import { getVIPLists, getAuditStatus, applyJoin } from '../api';
-import nodata from '../img/nodata.png';
-import MemberList from '../Component/memberList';
-
-import '../indexZone1.scss';
-
-const memberStatusEnum = {
- applying: '0',
- isMember: '1',
- notMember: '2'
-}
-
-function ZoneVIP(props){
- const { deptId } = props.match.params;
- const [ vipLists , setVIPLists ] = useState(undefined);
- const [ isSpin , setIsSpin ] = useState(true);
- const [ applyVisible , setApplyVisible ] = useState(false);
- const [ memberStatus , setMemberStatus] = useState(memberStatusEnum.notMember);
- const { id, showNotification, checkIfLogin, showLoginDialog, temp, sectionMemberTitle } = props;
-
- useEffect(()=>{
- if(id){
- setIsSpin(true);
- getLists();
- getMemberStatus();
- }
- },[id])
-
- function getLists(){
- getVIPLists(id).then(response=>{
- if(response){
- setVIPLists(response.data.rows);
- setIsSpin(false);
- }
- }).catch(error=>{setIsSpin(false);})
- }
-
- function getMemberStatus() {
- getAuditStatus(id).then(res => {
- if (res && res.data && res.data.code === 200) {
- setMemberStatus(res.data.data)
- } else {
- setMemberStatus(memberStatusEnum.notMember)
- }
- }).catch(() => { setMemberStatus(memberStatusEnum.notMember) })
- }
-
- function onOk(e) {
- applyJoin(id, e).then(res => {
- if (res && res.data) {
- showNotification(res.data.msg)
- setApplyVisible(!applyVisible)
- if (res.data.code === 200) {
- setMemberStatus(memberStatusEnum.applying)
- }
- }
- })
- }
-
- function apply() {
- if(checkIfLogin()===false){
- showLoginDialog()
- return false;
- }
- setApplyVisible(!applyVisible)
- }
-
- return(
-
-
{ sectionMemberTitle }
-
{ tempConfig[temp].vipDesc }
- { memberStatus === memberStatusEnum.notMember &&
}
- { memberStatus === memberStatusEnum.applying &&
您的申请已提交,请耐心等待管理员审核!
}
-
setApplyVisible(!applyVisible)} current_user={props.current_user}/>
-
-
-
- {
- vipLists && (vipLists.length > 0 ?
:
- {
- temp === tempEnum.zone1 ? :
- }
-
)
- }
-
-
-
- )
-}
-export default ZoneVIP;
\ No newline at end of file
diff --git a/src/forge/Information/api.js b/src/forge/Information/api.js
deleted file mode 100644
index c37b42e9c..000000000
--- a/src/forge/Information/api.js
+++ /dev/null
@@ -1,315 +0,0 @@
-
-import fetch from './fetch';
-
-/**入口页接口***/
-export function getMainInfos(deptId, params) {
- return fetch({
- url: `/zone/open/zoneKey/${deptId}`,
- method: 'get',
- params
- });
-}
-
-export function getCheckZoneRole(id) {
- return fetch({
- url: `/zone/open/zone/${id}/checkZoneRole`,
- method: 'get',
- });
-}
-
-export function getCurrentRole(id) {
- return fetch({
- url: `/zone/zoneFront/${id}/checkCurrentRole`,
- method: 'get',
- });
-}
-
-/********首页接口******/
-export function getHomePageList(id) {
- return fetch({
- url: `/zone/open/${id}/member/homePageList`,
- method: 'get',
- });
-}
-
-export function gethomePageDocList(id) {
- return fetch({
- url: `/cms/doc/open/zone/${id}/homePageDocList`,
- method: 'get',
- });
-}
-export function getAllList(id,params){
- return fetch({
- url:`/zone/open/${id}/project/list`,
- method: 'get',
- params
- })
-}
-
-export function getPartnerList(id){
- return fetch({
- url:`/zone/open/${id}/partners/list`,
- method: 'get',
- })
-}
-
-/**领域资讯 */
-export function getNewsAllList(id,params){
- return fetch({
- url:`/cms/doc/open/zone/${id}/docOverviewList`,
- method: 'get',
- params
- })
-}
-export function getNewsHotList(id,params){
- return fetch({
- url:`/cms/doc/open/zone/${id}/hotDocList`,
- method: 'get',
- params
- })
-}
-export function getNewsDetail(id){
- return fetch({
- url:`/cms/doc/open/${id}`,
- method: 'get',
- })
-}
-export function getNewsMyList(id,params){
- return fetch({
- url:`/cms/doc/zone/${id}/myDocList`,
- method:"get",
- params
- })
-}
-export function delNewsMyList(id){
- return fetch({
- url:`/cms/doc/${id}`,
- method:"delete"
- })
-}
-
-/**开源项目 */
-export function getProjectsLists(id,params){
- return fetch({
- url:`/zone/open/${id}/project/list`,
- method: 'get',
- params
- })
-}
-export function getProjectsTypeLists(id){
- return fetch({
- url:`/zone/open/${id}/projectType/list`,
- method: 'get',
- })
-}
-/**专区会员 */
-export function getVIPLists(id, params){
- return fetch({
- url:`/zone/open/${id}/member/overviewList`,
- method: 'get',
- params
- })
-}
-
-/**会员申请状态 */
-export function getAuditStatus(id){
- return fetch({
- url:`/zone/member/zone/${id}/auditStatus`,
- method: 'get',
- })
-}
-
-/**会员申请状态 */
-export function applyJoin(id,data) {
- return fetch({
- url: `/zone/member/applyToJoin/zone/${id}`,
- method: 'post',
- data: data
- });
-}
-
-// 资源模块
-export function addResource(data) {
- return fetch({
- url: `/zone/zoneFront/addResource`,
- method: 'post',
- data: data
- });
-}
-export function getSourceTypeList(id){
- return fetch({
- url:`/zone/open/${id}/resourceType/list`,
- method: 'get',
- })
-}
-export function getSourceZoneList(id){
- return fetch({
- url:`/zone/open/${id}/resourceDomain/list`,
- method: 'get',
- })
-}
-export function getSourceList(params){
- return fetch({
- url:`/zone/open/${params.id}/resource/list`,
- method: 'get',
- params
- })
-}
-export function getSourceDetail(id){
- return fetch({
- url:`/zone/open/resource/detail/${id}`,
- method: 'get'
- })
-}
-export function getSourceMyList(params){
- return fetch({
- url:`/zone/zoneFront/myResourceList`,
- method:"get",
- params
- })
-}
-export function delSourceMyList(id){
- return fetch({
- url:`/zone/zoneFront/removeResource/${id}`,
- method:"delete"
- })
-}
-
-// 创建专区
-export function postCreateZone(data) {
- return fetch({
- url: `/zone/application`,
- method: 'post',
- data: data
- })
-}
-
-// 根据文件id获取专区下资源类别
-export function getTypeByFileId(zoneId, fileId){
- return fetch({
- url:`/zone/resourceType/zone/${zoneId}/getResourceTypeByFileId/${fileId}`,
- method: 'get'
- })
-}
-
-// 新增领域
-export function addSourceType(data) {
- return fetch({
- url: `/zone/resourceType`,
- method: 'post',
- data: data
- });
-}
-
-// 修改当前文件对应的资源类别
-export function updateResourceTypeByFileId(data) {
- return fetch({
- url: '/zone/resourceType/updateResourceTypeByFileId',
- method: 'PUT',
- data: data
- });
-}
-
-// 获取文章领域列表
-export function getDirListById(id){
- return fetch({
- url:`/cms/doc/open/zone/${id}/dirList`,
- method: 'get'
- })
-}
-
-// 新增文章
-export function addNewsByDirId(dirId, data) {
- return fetch({
- url: `/cms/doc/dir/${dirId}`,
- method: 'post',
- data: data
- });
-}
-
-// 获取文章详细信息(需要用户权限)
-export function getNewsDetailByAu(id){
- return fetch({
- url:`/cms/doc/${id}`,
- method: 'get',
- })
-}
-
-// 修改文章详细信息(需要用户权限)
-export function updateDoc(id, data) {
- return fetch({
- url: `/cms/doc/${id}`,
- method: 'PUT',
- data: data
- });
-}
-
-// 获取资源详细信息(需要用户权限)
-export function getSourceDetailByAu(id){
- return fetch({
- url:`/zone/zoneFront/myResource/${id}`,
- method: 'get',
- })
-}
-
-// 修改资源详细信息(需要用户权限)
-export function updateMyResource(data) {
- return fetch({
- url: `/zone/zoneFront/editResource`,
- method: 'PUT',
- data: data
- });
-}
-
-// 评论相关
-// 评论列表
-export function getCommentList(id, params) {
- return fetch({
- url: `cms/doc/open/${ id }/journalList`,
- method: 'GET',
- params
- })
-}
-
-// 新增评论
-export function addComment(id, data) {
- return fetch({
- url: `cms/docComment/${ id }`,
- method: 'POST',
- data: data
- })
-}
-
-// 编辑评论
-export function editComment(id, data) {
- return fetch({
- url: `cms/docComment/${ id }/${ data.id }`,
- method: 'PUT',
- data: data
- })
-}
-
-// 删除评论
-export function deleteComment(docId, id) {
- return fetch({
- url: `cms/docComment/${ docId }/${ id }`,
- method: 'DELETE',
- })
-}
-
-// 数据集
-export function getDataSet(params) {
- return fetch({
- url: `/zone/open/${params.id}/dataSet/projectList`,
- method: 'GET',
- params
- })
-}
-// /open/dataSet/{projectId}
-export function getDataSetdetail(datasetId,params) {
- return fetch({
- url: `/zone/open/dataSet/${datasetId}`,
- method: 'GET',
- params
- })
-}
\ No newline at end of file
diff --git a/src/forge/Information/img/1.png b/src/forge/Information/img/1.png
deleted file mode 100644
index 49e865855a9568165fb752b885c5b16f9678bfc7..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 255117
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