diff --git a/src/forge/Information/Pages/sourceDetail.jsx b/src/forge/Information/Pages/sourceDetail.jsx index 775df358f..1a6c7d0f2 100644 --- a/src/forge/Information/Pages/sourceDetail.jsx +++ b/src/forge/Information/Pages/sourceDetail.jsx @@ -1,7 +1,7 @@ import React , { useEffect , useState } from 'react'; import { Badge, Breadcrumb } from 'antd'; import SourceFile from '../img/sourceFile.png'; -import { getSourceDetail } from '../api'; +import { getFileByZone, getSourceDetail } from '../api'; import { Link } from 'react-router-dom'; import { httpUrl } from '../fetch'; import { AlignCenter, FlexAJ } from '../../Component/layout'; @@ -9,11 +9,17 @@ import SourceIcon from '../img/sourceIcon.png'; import { addMeta, setSeoMeta } from 'educoder'; import {getUniqueIdentifier,getUserName,getBrowserPlatform,getBrowserBrand} from '../utils'; import {setZoneVisits} from '../api' +import axios from 'axios'; +import RenderHtml from '../../../components/render-html'; function SourceDetail(props){ const { deptId , sourceid } = props.match.params; const [ detail , setDetail ] = useState(undefined); + const [files, setFiles] = useState([]); + const [mdFiles, setMdFiles] = useState([]); + const [mdContents, setMdContents] = useState(undefined); + const zonedetail = props.data; const {temp} = props; @@ -51,12 +57,51 @@ function SourceDetail(props){ } } - function getDetails(){ - getSourceDetail(sourceid).then(response=>{ - if(response){ + function getDetails() { + getSourceDetail(sourceid).then(response => { + if (response) { setDetail(response.data.data); + const { fileList } = response.data.data; + if (deptId === "NSCC") { + initMDContent(fileList) + }else{ + setFiles(fileList); + } + } - }).catch(error=>{}) + }).catch(error => { }) + } + + async function initMDContent(fileList) { + const mdFileList = fileList.filter(item => + item.fileOriginName && item.fileOriginName.toLowerCase().endsWith('.md') + ); + + const nonMdFiles = fileList.filter(item => + !item.fileOriginName || !item.fileOriginName.toLowerCase().endsWith('.md') + ); + setFiles(nonMdFiles); + + if (mdFileList.length > 0) { + setMdFiles(mdFileList); + + try { + const contents = await Promise.all( + mdFileList.map(async (file) => { + const res = await axios.get(`${httpUrl}/file/open/download/${file.fileId}`, { + responseType: 'text' + }); + return { [file.fileId]: res.data }; + }) + ); + + // 合并所有结果为单个对象 + setMdContents(contents.reduce((acc, item) => ({ ...acc, ...item }), {})); + + } catch (error) { + console.error('获取 md 文件失败:', error); + } + } } return( @@ -84,12 +129,18 @@ function SourceDetail(props){ {detail.auditStatus === '0' && } {detail.auditStatus === '2' && } -
+ {mdContents && Object.keys(mdContents).length > 0 ?
+ {mdFiles.map((file) => ( +
+ +
+ ))} +
:
} { - detail.fileList && detail.fileList.length > 0 && + files && files.length > 0 &&