|
@@ -2,11 +2,13 @@ import React, { useState, useCallback, useMemo } from 'react'
|
|
|
import styles from './index.module.scss'
|
|
|
import classNames from 'classnames'
|
|
|
import RelationEcharts from './RelationEcharts/index'
|
|
|
-import { Timeline } from 'antd'
|
|
|
+import { Timeline, Image } from 'antd'
|
|
|
import store from '@/store'
|
|
|
import { MartyrItem, RelationShipItem } from '@/types/api/martyr'
|
|
|
import { ClueItem } from '@/types/api/clue'
|
|
|
import ImageLazy from '@/components/ImageLazy/index'
|
|
|
+import ImageLazyList from '@/components/ImageLazyList/index'
|
|
|
+import imgErr from '@/assets/img/IMGerror.png'
|
|
|
import { baseURL } from '@/utils/http'
|
|
|
|
|
|
type DetailProps = {
|
|
@@ -35,80 +37,117 @@ function Detail({ classN, relationList, martyrDetail }: DetailProps) {
|
|
|
1: '跟进中',
|
|
|
2: '已找到',
|
|
|
3: '未找到',
|
|
|
- 4: '作废',
|
|
|
- }[item.status] as string,
|
|
|
+ 4: '作废'
|
|
|
+ }[item.status] as string
|
|
|
}
|
|
|
})
|
|
|
- .filter(
|
|
|
- (item: ClueItem) => item.status !== '待确定' && item.status !== '作废'
|
|
|
- )
|
|
|
+ .filter((item: ClueItem) => item.status !== '待确定' && item.status !== '作废')
|
|
|
}, [martyrDetail])
|
|
|
|
|
|
return (
|
|
|
<>
|
|
|
<div className={classNames(styles.detail, classN)}>
|
|
|
- <div className={classNames('infoDetailBox', (!martyrDetail?.life.length && !martyrDetail?.relic.length) && 'noInfoDetail')}>
|
|
|
+ <div
|
|
|
+ className={classNames(
|
|
|
+ 'infoDetailBox',
|
|
|
+ !martyrDetail?.life.length && !martyrDetail?.relic.length && 'noInfoDetail'
|
|
|
+ )}
|
|
|
+ >
|
|
|
<div className='infoDetail'>
|
|
|
<div className='scrollContainner'>
|
|
|
+ <div className='title_img'>
|
|
|
+ <img src={require('@/assets/img/ziliao.png')} alt='' draggable='false' />
|
|
|
+ </div>
|
|
|
<div className='mainInfo'>
|
|
|
<div className='left'>
|
|
|
- <img src={martyrDetail?.thumb} alt='' />
|
|
|
+ <img
|
|
|
+ src={martyrDetail?.thumb ? baseURL + martyrDetail?.thumb : imgErr}
|
|
|
+ alt=''
|
|
|
+ />
|
|
|
</div>
|
|
|
<div className='right'>
|
|
|
<div className='name'>
|
|
|
<div className='Name'>{martyrDetail?.name}</div>
|
|
|
<div className='other'>{martyrDetail?.dictPanName}</div>
|
|
|
</div>
|
|
|
- <div className='gender'>{martyrDetail?.gender === 1 ? '男' : '女' || '未知'}|{martyrDetail?.nation}</div>
|
|
|
- <div className='birth'>{martyrDetail?.dateStart}-{martyrDetail?.dateEnd}</div>
|
|
|
- <div className='home'>籍贯:{martyrDetail?.nativeProvince}-{martyrDetail?.nativeCity}-{martyrDetail?.nativeRegion},{martyrDetail?.nativeAddress}</div>
|
|
|
+ <div className='gender'>
|
|
|
+ {martyrDetail?.gender === 1 ? '男' : '女' || '未知'}|
|
|
|
+ {martyrDetail?.nation}
|
|
|
+ </div>
|
|
|
+ <div className='birth'>
|
|
|
+ {martyrDetail?.dateStart}-{martyrDetail?.dateEnd}
|
|
|
+ </div>
|
|
|
+ <div className='home'>
|
|
|
+ 籍贯:{martyrDetail?.nativeProvince}-{martyrDetail?.nativeCity}-
|
|
|
+ {martyrDetail?.nativeRegion},{martyrDetail?.nativeAddress}
|
|
|
+ </div>
|
|
|
<div className='sacrifice'>{`牺牲地:${martyrDetail?.lossProvince}-${martyrDetail?.lossCity}-${martyrDetail?.lossRegion},${martyrDetail?.lossAddress}`}</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
+ <div className='title_img'>
|
|
|
+ <img src={require('@/assets/img/muqu.png')} alt='' draggable='false' />
|
|
|
+ </div>
|
|
|
<div className='vr' onClick={() => window.open(`${martyrDetail?.link}`)}>
|
|
|
<img src={require('@/assets/img/sceneThumb.png')} alt='' />
|
|
|
- <img src={require('@/assets/img/vr.png')} alt="" className="botvr" />
|
|
|
+ <img src={require('@/assets/img/vr.png')} alt='' className='botvr' />
|
|
|
+ </div>
|
|
|
+ <div className='title_img'>
|
|
|
+ <img src={require('@/assets/img/jianjie.png')} alt='' draggable='false' />
|
|
|
</div>
|
|
|
<div className='content'>
|
|
|
<div className='text'>{martyrDetail?.intro}</div>
|
|
|
{(martyrDetail?.img || martyrDetail?.video) && (
|
|
|
<div className='media'>
|
|
|
<>
|
|
|
- {martyrDetail?.img?.map((item: any, index: number) => {
|
|
|
- return (
|
|
|
- <ImageLazy
|
|
|
- width={'32%'}
|
|
|
- height={'70px'}
|
|
|
- src={item.thumb}
|
|
|
- srcBig={item.filePath}
|
|
|
- key={index}
|
|
|
- />
|
|
|
- )
|
|
|
- })}
|
|
|
+ {martyrDetail && (
|
|
|
+ <Image.PreviewGroup>
|
|
|
+ {martyrDetail.img?.map((item: any, index: number) => {
|
|
|
+ return (
|
|
|
+ <Image
|
|
|
+ width={'23%'}
|
|
|
+ height={'140px'}
|
|
|
+ src={baseURL + item.thumb}
|
|
|
+ preview={{
|
|
|
+ src: baseURL + item.filePath
|
|
|
+ }}
|
|
|
+ placeholder={
|
|
|
+ <img src={require('@/assets/img/loading.gif')} alt='' />
|
|
|
+ }
|
|
|
+ key={item.id}
|
|
|
+ />
|
|
|
+ )
|
|
|
+ })}
|
|
|
+ </Image.PreviewGroup>
|
|
|
+ )}
|
|
|
{martyrDetail?.video?.map((item: any, index: number) => {
|
|
|
return (
|
|
|
- <video
|
|
|
- onClick={e => {
|
|
|
- e.stopPropagation()
|
|
|
- lookFileFu(item.filePath)
|
|
|
- }}
|
|
|
- src={baseURL + item.thumb}
|
|
|
- key={index}
|
|
|
- />
|
|
|
+ <div className='videoContainer' key={index}>
|
|
|
+ <video
|
|
|
+ src={baseURL + item.thumb}
|
|
|
+ onClick={e => {
|
|
|
+ e.stopPropagation()
|
|
|
+ lookFileFu(item.filePath)
|
|
|
+ }}
|
|
|
+ />
|
|
|
+ <div className='videoMask'>
|
|
|
+ <img src={require('@/assets/img/play.png')} alt='播放' />
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
)
|
|
|
})}
|
|
|
</>
|
|
|
</div>
|
|
|
)}
|
|
|
</div>
|
|
|
- <div className='relation'>
|
|
|
+ {/* 亲属关系图 */}
|
|
|
+ {/* <div className='relation'>
|
|
|
<div className='title'>
|
|
|
<img src={require('@/assets/img/relationTitle.png')} alt='' />
|
|
|
</div>
|
|
|
<div className='relationPic'>
|
|
|
<RelationEcharts martyrName={martyrDetail?.name} relationList={relationList} />
|
|
|
</div>
|
|
|
- </div>
|
|
|
+ </div> */}
|
|
|
{clueList?.map((item: any) => (
|
|
|
<div className='infoLabel' key={item.id}>
|
|
|
<div className='title'>
|
|
@@ -118,7 +157,9 @@ function Detail({ classN, relationList, martyrDetail }: DetailProps) {
|
|
|
<div>{item.status}</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
- <div className='address'> {item.province + item.city + item.region + item.address}</div>
|
|
|
+ <div className='address'>
|
|
|
+ {item.province + item.city + item.region + item.address}
|
|
|
+ </div>
|
|
|
<div className='labelContent'>{item.remark}</div>
|
|
|
<div className='labelContent'>{item.result}</div>
|
|
|
{(item.img || item.video) && (
|
|
@@ -151,8 +192,8 @@ function Detail({ classN, relationList, martyrDetail }: DetailProps) {
|
|
|
</div>
|
|
|
)}
|
|
|
<div className='updateTime'>{item.updateTime}</div>
|
|
|
- </div>))}
|
|
|
-
|
|
|
+ </div>
|
|
|
+ ))}
|
|
|
</div>
|
|
|
</div>
|
|
|
|
|
@@ -161,7 +202,7 @@ function Detail({ classN, relationList, martyrDetail }: DetailProps) {
|
|
|
<div className='title1'>
|
|
|
<img src={require('@/assets/img/modelPic.png')} alt='' />
|
|
|
</div>
|
|
|
- <div className='modelList' >
|
|
|
+ <div className='modelList'>
|
|
|
{martyrDetail?.relic.map((item: any) => (
|
|
|
<div className='model' key={item.id}>
|
|
|
<img src={item.thumb} alt='' onClick={() => setCurrentRelic(item)} />
|
|
@@ -171,7 +212,6 @@ function Detail({ classN, relationList, martyrDetail }: DetailProps) {
|
|
|
</div>
|
|
|
</div>
|
|
|
))}
|
|
|
-
|
|
|
</div>
|
|
|
<div className='title2'>
|
|
|
<img src={require('@/assets/img/introPic.png')} alt='' />
|
|
@@ -179,19 +219,24 @@ function Detail({ classN, relationList, martyrDetail }: DetailProps) {
|
|
|
<div className='introDetailBox'>
|
|
|
<Timeline
|
|
|
items={martyrDetail?.life?.map((item: any) => {
|
|
|
- const content = JSON.parse(item.rtf);
|
|
|
+ const content = JSON.parse(item.rtf)
|
|
|
console.log(content, '123321')
|
|
|
return {
|
|
|
children: (
|
|
|
<div className='introDetail' key={item.id}>
|
|
|
<div className='year'>{item.date}</div>
|
|
|
- <div dangerouslySetInnerHTML={{ __html: content.txtArr[0].txt }} />
|
|
|
+ <div
|
|
|
+ dangerouslySetInnerHTML={{ __html: content.txtArr[0].txt }}
|
|
|
+ />
|
|
|
<div>
|
|
|
- <img src={baseURL + content.txtArr[0].fileInfo.filePath} alt='' />
|
|
|
+ <img
|
|
|
+ src={baseURL + content.txtArr[0].fileInfo.filePath}
|
|
|
+ alt=''
|
|
|
+ />
|
|
|
</div>
|
|
|
</div>
|
|
|
)
|
|
|
- };
|
|
|
+ }
|
|
|
})}
|
|
|
/>
|
|
|
</div>
|