Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
W
web-ci-test
概览
概览
详情
活动
周期分析
版本库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
test-ci
web-ci-test
Commits
59b2ef32
提交
59b2ef32
authored
6月 30, 2023
作者:
龚洪江
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
修复:论坛,招投标,新闻等缺陷修复
上级
f515c921
隐藏空白字符变更
内嵌
并排
正在显示
27 个修改的文件
包含
447 行增加
和
77 行删除
+447
-77
index.tsx
components/NavHeader/joinModal/index.tsx
+11
-7
index.tsx
components/NavHeader/publishModal/index.tsx
+6
-1
[id].page.tsx
pages/equipmentLeasing/detail/[id].page.tsx
+1
-1
index.page.tsx
pages/equipmentLeasing/index.page.tsx
+1
-1
index.tsx
pages/forum/api/index.tsx
+13
-12
index.tsx
pages/forum/components/publishMessage/index.tsx
+1
-1
index.module.scss
pages/forum/index.module.scss
+1
-0
index.page.tsx
pages/forum/index.page.tsx
+41
-27
index.ts
pages/home/waterfallFlowBody/api/index.ts
+1
-0
index.tsx
pages/home/waterfallFlowBody/index.tsx
+4
-3
styled.tsx
pages/home/waterfallFlowBody/styled.tsx
+1
-1
[id].page.tsx
pages/projectInfo/caseArticle/[id].page.tsx
+4
-4
index.module.scss
pages/projectInfo/caseArticle/index.module.scss
+6
-0
index.ts
pages/projectInfo/components/bids/api/index.ts
+1
-0
index.module.scss
pages/projectInfo/components/bids/index.module.scss
+8
-1
index.tsx
pages/projectInfo/components/bids/index.tsx
+15
-4
index.module.scss
pages/projectInfo/components/cases/index.module.scss
+3
-1
index.tsx
pages/projectInfo/components/cases/index.tsx
+3
-1
index.module.scss
pages/projectInfo/components/news/index.module.scss
+8
-1
index.tsx
pages/projectInfo/components/news/index.tsx
+14
-6
[id].page.tsx
pages/projectInfo/newsArticle/[id].page.tsx
+4
-4
index.tsx
pages/projectInfo/newsArticle/api/index.tsx
+0
-1
[id].page.tsx
pages/projectInfo/tenderProjectsDetail/[id].page.tsx
+129
-0
index.tsx
pages/projectInfo/tenderProjectsDetail/api/index.tsx
+29
-0
bk.png
pages/projectInfo/tenderProjectsDetail/assets/bk.png
+0
-0
index.module.scss
pages/projectInfo/tenderProjectsDetail/index.module.scss
+40
-0
money.ts
utils/money.ts
+102
-0
没有找到文件。
components/NavHeader/joinModal/index.tsx
浏览文件 @
59b2ef32
...
...
@@ -5,6 +5,7 @@ import { useContext, useEffect, useState } from 'react';
import
api
,
{
ListTagResp
}
from
'./api'
;
import
{
useRouter
}
from
'next/router'
;
import
{
UserContext
}
from
'~/lib/userProvider'
;
import
commonApi
from
'~/api'
;
const
imgs
=
[
require
(
'./assets/生产制造商.png'
),
...
...
@@ -26,7 +27,7 @@ type Props = {
export
default
function
JoinModal
(
props
:
Props
)
{
const
router
=
useRouter
();
const
[
tagList
,
setTagList
]
=
useState
<
ListTagResp
[]
>
([]);
const
{
userInfo
}
=
useContext
(
UserContext
);
const
{
userInfo
,
setUserInfo
}
=
useContext
(
UserContext
);
useEffect
(()
=>
{
api
.
listTag
().
then
((
res
)
=>
{
...
...
@@ -35,12 +36,15 @@ export default function JoinModal(props: Props) {
},
[]);
const
onClickTag
=
(
item
:
ListTagResp
)
=>
{
if
(
userInfo
!
.
companyAuthStatus
)
{
router
.
replace
({
pathname
:
'/JoinPolicy'
,
query
:
{
tagId
:
item
.
id
}
});
props
.
onCancel
&&
props
.
onCancel
();
}
else
{
router
.
push
(
'/certification'
);
}
commonApi
.
userInfo
().
then
((
res
)
=>
{
setUserInfo
(
res
.
result
);
if
(
res
.
result
!
.
companyAuthStatus
)
{
router
.
replace
({
pathname
:
'/JoinPolicy'
,
query
:
{
tagId
:
item
.
id
}
});
props
.
onCancel
&&
props
.
onCancel
();
}
else
{
router
.
push
(
'/certification'
);
}
});
};
return
(
<
Modal
...
...
components/NavHeader/publishModal/index.tsx
浏览文件 @
59b2ef32
...
...
@@ -106,7 +106,12 @@ export default function PublishModal(props: Props) {
name=
'requireDescription'
rules=
{
[{
required
:
true
,
message
:
'请输入需求描述!'
}]
}
>
<
Input
.
TextArea
placeholder=
'项目需求描述'
style=
{
{
height
:
162
}
}
></
Input
.
TextArea
>
<
Input
.
TextArea
placeholder=
'项目需求描述'
style=
{
{
height
:
162
}
}
maxLength=
{
256
}
showCount
></
Input
.
TextArea
>
</
Form
.
Item
>
<
Form
.
Item
>
<
Button
...
...
pages/equipmentLeasing/detail/[id].page.tsx
浏览文件 @
59b2ef32
...
...
@@ -214,7 +214,7 @@ export default function EquipmentLeasingDetail() {
<
span
className=
'menoy-right'
>
/天起
</
span
>
</
div
>
)
:
(
<
div
className=
'menoy'
>
暂无
报价
</
div
>
<
div
className=
'menoy'
>
获取
报价
</
div
>
)
}
<
div
className=
'classification'
>
...
...
pages/equipmentLeasing/index.page.tsx
浏览文件 @
59b2ef32
...
...
@@ -47,7 +47,7 @@ export default function EquipmentLeasing(props: Props) {
<
span
className=
'unit'
>
/天起
</
span
>
</
div
>
)
:
(
<
div
className=
'unit'
>
暂无
报价
</
div
>
<
div
className=
'unit'
>
获取
报价
</
div
>
)
}
</
div
>
</
div
>
...
...
pages/forum/api/index.tsx
浏览文件 @
59b2ef32
...
...
@@ -15,9 +15,9 @@ export interface Dynamic {
lat
:
number
;
lon
:
number
;
mediaVO
:
{
picture
:
string
[]
;
videoU
rl
:
string
;
};
type
:
number
;
u
rl
:
string
;
}
[]
;
likesCount
:
number
;
commentCount
:
number
;
likes
:
boolean
;
...
...
@@ -44,18 +44,19 @@ export interface CommentParams {
export
interface
ByDynamicResp
{
id
:
number
;
dynamicId
:
number
;
parentId
:
number
;
userId
:
number
;
content
:
string
;
description
:
string
;
likesCount
:
number
;
create
Time
:
string
;
dynamicPublish
Time
:
string
;
children
:
ByDynamicResp
[];
userBaseInfo
VO
:
{
userBaseInfo
:
{
id
:
number
;
nickName
:
string
;
userImg
:
string
;
};
mediaVO
:
{
type
:
number
;
url
:
string
};
}
export
interface
dynamicDetail
extends
ByDynamicResp
{
commentAndReplyVO
:
ByDynamicResp
[];
}
export
default
{
...
...
@@ -73,9 +74,9 @@ export default {
return
request
(
'/release/dynamic/comment'
,
'post'
,
params
);
},
//
根据动态查看评论
byDynamic
(
params
:
{
dynamicId
:
number
}):
Promise
<
Response
<
Array
<
ByDynamicResp
>
>>
{
return
request
(
'/release/dynamic/
byDynamic
'
,
'get'
,
params
);
//
动态详情
byDynamic
(
params
:
{
dynamicId
:
number
}):
Promise
<
Response
<
dynamicDetail
>>
{
return
request
(
'/release/dynamic/
dynamicDetails
'
,
'get'
,
params
);
},
//点赞或取消点赞
...
...
pages/forum/components/publishMessage/index.tsx
浏览文件 @
59b2ef32
...
...
@@ -136,7 +136,7 @@ export default function PublishMessage(props: Props) {
allowClear
showCount
placeholder=
'输入内容'
maxLength=
{
100
}
maxLength=
{
256
}
style=
{
{
height
:
120
,
resize
:
'none'
}
}
></
Input
.
TextArea
>
</
Form
.
Item
>
...
...
pages/forum/index.module.scss
浏览文件 @
59b2ef32
...
...
@@ -60,6 +60,7 @@
margin-bottom
:
16px
;
padding-right
:
10px
;
line-height
:
1
.2
;
word-break
:
break-all
;
}
}
...
...
pages/forum/index.page.tsx
浏览文件 @
59b2ef32
...
...
@@ -81,7 +81,7 @@ export default function Forum() {
})
.
then
((
res
)
=>
{
if
(
res
?.
code
===
'200'
)
{
item
.
commentList
=
res
.
result
||
[];
item
.
commentList
=
res
.
result
?.
commentAndReplyVO
||
[];
}
const
temp
=
[...
list
];
setList
(
temp
);
...
...
@@ -169,28 +169,40 @@ export default function Forum() {
<
div
className=
{
styles
.
name
}
>
{
item
.
userBaseInfo
?.
nickName
}
</
div
>
<
div
className=
{
styles
.
desc
}
>
{
item
.
description
}
</
div
>
<
div
className=
{
styles
.
imgs
}
>
<
Image
.
PreviewGroup
preview=
{
{
onChange
:
(
current
,
prev
)
=>
console
.
log
(
`current index: ${current}, prev index: ${prev}`
),
}
}
>
<
Space
size=
{
6
}
wrap
>
{
item
?.
mediaVO
?.
picture
?.
map
((
img
)
=>
{
return
(
<
Image
key=
{
img
}
alt=
''
className=
'img'
width=
{
132
}
height=
{
132
}
src=
{
img
}
fallback=
{
errImg
}
/>
);
})
}
</
Space
>
</
Image
.
PreviewGroup
>
<
Space
size=
{
6
}
wrap
>
{
item
?.
mediaVO
?.
map
((
v
,
index
:
number
)
=>
v
.
type
===
0
?
(
<
Image
key=
{
index
}
alt=
''
className=
'img'
width=
{
132
}
height=
{
132
}
src=
{
v
.
url
}
fallback=
{
errImg
}
/>
)
:
(
<
video
src=
{
v
.
url
}
controls
style=
{
{
width
:
'132px'
,
height
:
'132px'
}
}
/>
),
)
}
</
Space
>
{
/*<Image.PreviewGroup*/
}
{
/*>*/
}
{
/* <Space size={6} wrap>*/
}
{
/* {item?.mediaVO*/
}
{
/* ?.filter((v) => v.type === 0)*/
}
{
/* ?.map((img, index: number) => {*/
}
{
/* return (*/
}
{
/* );*/
}
{
/* })}*/
}
{
/* </Space>*/
}
{
/*</Image.PreviewGroup>*/
}
</
div
>
<
div
className=
{
styles
.
ctrls
}
>
<
div
className=
{
styles
.
ctrlsItem
}
onClick=
{
()
=>
openComment
(
item
)
}
>
...
...
@@ -253,17 +265,19 @@ export default function Forum() {
return
(
<
div
key=
{
comment
.
id
}
className=
{
styles
.
commentItem
}
>
<
div
className=
{
styles
.
commentHeadImg
}
>
<
Image
src=
{
comment
.
userBaseInfo
VO
?.
userImg
}
></
Image
>
<
Image
src=
{
comment
.
userBaseInfo
?.
userImg
}
></
Image
>
</
div
>
<
div
className=
{
styles
.
info
}
>
<
div
className=
{
styles
.
nameWrap
}
>
<
div
className=
{
styles
.
commentName
}
>
{
comment
.
userBaseInfo
VO
?.
nickName
}
:
{
comment
.
userBaseInfo
?.
nickName
}
:
<
div
className=
{
styles
.
date
}
>
{
moment
(
comment
.
create
Time
).
format
(
'YYYY-MM-DD'
)
}
{
moment
(
comment
.
dynamicPublish
Time
).
format
(
'YYYY-MM-DD'
)
}
</
div
>
</
div
>
<
div
className=
{
styles
.
commentContent
}
>
{
comment
.
content
}
</
div
>
<
div
className=
{
styles
.
commentContent
}
>
{
comment
.
description
}
</
div
>
</
div
>
</
div
>
</
div
>
...
...
pages/home/waterfallFlowBody/api/index.ts
浏览文件 @
59b2ef32
...
...
@@ -116,6 +116,7 @@ export interface NewsTenderType {
tenderPrice
:
number
;
createTime
:
string
;
apply
:
number
;
tenderTitle
:
string
;
}
export
interface
ListPageNewsInfoResp
{
...
...
pages/home/waterfallFlowBody/index.tsx
浏览文件 @
59b2ef32
...
...
@@ -17,6 +17,7 @@ import api, {
listNewsApi
,
mallApi
,
}
from
'./api'
;
import
{
bigNumberTransform
}
from
'~/utils/money'
;
interface
ColumnsType
{
title
:
string
;
...
...
@@ -428,15 +429,15 @@ export default function WaterfallFlowBody() {
<
div
className=
'body'
>
{
list
?.
map
((
item
)
=>
(
<
div
key=
{
item
.
id
}
className=
'body-item'
>
<
div
className=
'item-label'
title=
{
item
.
tender
Content
}
>
{
item
.
tender
Content
}
<
div
className=
'item-label'
title=
{
item
.
tender
Title
}
>
{
item
.
tender
Title
}
<
div
className=
'label-bottom'
>
{
item
.
tenderPrice
}
</
div
>
</
div
>
<
div
className=
{
`item-right ${item.apply ? 'apply' : ''}`
}
onClick=
{
()
=>
handleTenderApply
(
item
)
}
>
<
div
className=
'left'
>
{
`${item.tenderPrice}W`
}
</
div
>
<
div
className=
'left'
>
{
bigNumberTransform
(
item
.
tenderPrice
*
10000
,
true
)
}
</
div
>
{
item
.
apply
?
(
<
div
className=
'right'
>
已申请
</
div
>
)
:
(
...
...
pages/home/waterfallFlowBody/styled.tsx
浏览文件 @
59b2ef32
...
...
@@ -294,12 +294,12 @@ export const Box = styled.div`
height: 22px;
line-height: 22px;
font-size: 11px;
font-family: PingFangSC-Medium, PingFang SC;
font-weight: 500;
color: #ff4500;
text-align: center;
left: 4px;
top: 0;
white-space: nowrap;
}
.right {
width: 48px;
...
...
pages/projectInfo/caseArticle/[id].page.tsx
浏览文件 @
59b2ef32
import
{
RightOutlined
}
from
'@ant-design/icons'
;
import
{
Col
,
Row
,
Space
,
Image
}
from
'antd'
;
import
{
Col
,
Row
}
from
'antd'
;
import
{
useRouter
}
from
'next/router'
;
import
{
useEffect
,
useState
}
from
'react'
;
import
errImg
from
'~/assets/errImg'
;
import
Layout
from
'~/components/layout'
;
import
newsApi
,
{
Item
}
from
'../components/news/api'
;
import
api
,
{
DetailsResp
}
from
'./api'
;
...
...
@@ -70,11 +69,12 @@ export default function CaseArticle() {
<
Col
flex=
'auto'
>
<
div
className=
{
styles
.
font1
}
>
{
data
?.
caseTitle
}
</
div
>
<
div
className=
{
styles
.
font2
}
style=
{
{
marginTop
:
18
,
marginBottom
:
41
}
}
>
{
data
?.
createTime
&&
Moment
(
data
?.
createTime
).
format
(
'YYYY-MM-DD'
)
}
·
{
' '
}
{
data
?.
caseAuthor
}
{
data
?.
createTime
&&
Moment
(
data
?.
createTime
).
format
(
'YYYY-MM-DD'
)
}
·
作者:
{
data
?.
caseAuthor
||
'不详'
}
</
div
>
<
div
style=
{
{
lineHeight
:
1.5
}
}
className=
{
styles
.
richText
}
dangerouslySetInnerHTML=
{
{
__html
:
data
?.
caseContents
||
''
}
}
></
div
>
</
Col
>
...
...
pages/projectInfo/caseArticle/index.module.scss
浏览文件 @
59b2ef32
...
...
@@ -37,3 +37,9 @@
.ellipse1
{
@include
ellipsis
(
1
);
}
.richText
{
img
{
max-width
:
100%
;
height
:
auto
;
}
}
pages/projectInfo/components/bids/api/index.ts
浏览文件 @
59b2ef32
...
...
@@ -25,6 +25,7 @@ export interface Item {
tenderPrice
:
number
;
createTime
:
string
;
apply
:
0
|
1
;
tenderTitle
:
string
;
}
export
interface
ApplyParams
{
...
...
pages/projectInfo/components/bids/index.module.scss
浏览文件 @
59b2ef32
...
...
@@ -8,7 +8,14 @@
border-bottom
:
1px
dashed
RGBA
(
222
,
222
,
222
,
1
);
justify-content
:
space-between
;
align-items
:
center
;
cursor
:
pointer
;
&
:hover
{
.info
{
.title
{
color
:
red
;
}
}
}
.info
{
.title
{
font-size
:
14px
;
...
...
pages/projectInfo/components/bids/index.tsx
浏览文件 @
59b2ef32
...
...
@@ -3,6 +3,8 @@ import { useState, useEffect, useContext } from 'react';
import
{
UserContext
}
from
'~/lib/userProvider'
;
import
api
,
{
Item
}
from
'./api'
;
import
styles
from
'./index.module.scss'
;
import
{
bigNumberTransform
}
from
'~/utils/money'
;
import
{
useRouter
}
from
'next/router'
;
type
Props
=
{
params
?:
{
...
...
@@ -14,6 +16,7 @@ type Props = {
};
export
default
function
Bids
(
props
:
Props
)
{
const
router
=
useRouter
();
const
[
list
,
setList
]
=
useState
<
Array
<
Item
>>
([]);
const
[
pageParams
,
setPageParams
]
=
useState
({
pageNo
:
1
,
...
...
@@ -78,24 +81,32 @@ export default function Bids(props: Props) {
setNeedLogin
(
true
);
}
};
//招标项目详情
const
toTenderProjectsDetail
=
(
item
:
Item
)
=>
{
router
.
push
(
'/projectInfo/tenderProjectsDetail/'
+
item
.
tenderNewsId
);
};
return
(
<
Spin
spinning=
{
loading
}
delay=
{
500
}
>
<
div
className=
{
styles
.
bids
}
style=
{
{
height
:
610
}
}
>
{
list
.
map
((
item
)
=>
{
return
(
<
div
className=
{
styles
.
item
}
key=
{
item
.
id
}
>
<
div
className=
{
styles
.
item
}
key=
{
item
.
id
}
onClick=
{
()
=>
toTenderProjectsDetail
(
item
)
}
>
<
div
className=
{
styles
.
info
}
>
<
div
className=
{
styles
.
title
}
>
{
item
.
tender
Content
}
</
div
>
<
div
className=
{
styles
.
title
}
>
{
item
.
tender
Title
}
</
div
>
</
div
>
{
item
.
apply
?
(
<
Button
type=
'primary'
disabled
className=
{
`${styles.btn} ${styles.disabled}`
}
>
<
div
className=
{
styles
.
text1
}
>
{
item
.
tenderPrice
}
万
</
div
>
<
div
className=
{
styles
.
text1
}
>
{
bigNumberTransform
(
item
.
tenderPrice
*
10000
,
true
)
}
</
div
>
<
div
className=
{
styles
.
text2
}
>
已申请
</
div
>
</
Button
>
)
:
(
<
Button
type=
'primary'
className=
{
styles
.
btn
}
>
<
div
className=
{
styles
.
text1
}
>
{
item
.
tenderPrice
}
万
</
div
>
<
div
className=
{
styles
.
text1
}
>
{
bigNumberTransform
(
item
.
tenderPrice
*
10000
,
true
)
}
</
div
>
<
div
className=
{
styles
.
text2
}
onClick=
{
()
=>
onApply
(
item
)
}
>
商务合作
</
div
>
...
...
pages/projectInfo/components/cases/index.module.scss
浏览文件 @
59b2ef32
...
...
@@ -11,11 +11,13 @@
align-items
:
center
;
.info
{
flex
:
1
;
.title
{
font-size
:
14px
;
font-family
:
MicrosoftYaHeiUI-Bold
,
MicrosoftYaHeiUI
;
color
:
#3c3e42
;
width
:
649px
;
white-space
:
nowrap
;
text-overflow
:
ellipsis
;
@include
ellipsis
(
1
);
}
.desc
{
...
...
pages/projectInfo/components/cases/index.tsx
浏览文件 @
59b2ef32
...
...
@@ -70,7 +70,9 @@ export default function Cases(props: Props) {
<
div
className=
{
styles
.
title
}
>
<
Button
type=
'link'
style=
{
{
padding
:
'0 0'
}
}
style=
{
{
padding
:
'0 0'
,
}
}
onClick=
{
()
=>
Router
.
push
(
'/projectInfo/caseArticle/'
+
item
.
id
)
}
>
{
item
.
caseTitle
}
...
...
pages/projectInfo/components/news/index.module.scss
浏览文件 @
59b2ef32
...
...
@@ -11,7 +11,14 @@
display
:
flex
;
border-bottom
:
1px
dashed
RGBA
(
222
,
222
,
222
,
1
);
align-items
:
center
;
cursor
:
pointer
;
&
:hover
{
.info
{
.title
{
color
:
red
;
}
}
}
.logo
{
width
:
120px
;
height
:
80px
;
...
...
pages/projectInfo/components/news/index.tsx
浏览文件 @
59b2ef32
...
...
@@ -3,8 +3,7 @@ import styles from './index.module.scss';
import
Image
from
'next/image'
;
import
{
useState
,
useEffect
,
useContext
}
from
'react'
;
import
api
,
{
Item
}
from
'./api'
;
import
Router
from
'next/router'
;
import
Moment
from
'moment'
;
import
Router
,
{
useRouter
}
from
'next/router'
;
import
{
UserContext
}
from
'~/lib/userProvider'
;
type
Props
=
{
...
...
@@ -17,6 +16,7 @@ type Props = {
};
export
default
function
News
(
props
:
Props
)
{
const
router
=
useRouter
();
const
[
loading
,
setLoading
]
=
useState
(
false
);
const
[
list
,
setList
]
=
useState
<
Array
<
Item
>>
([]);
const
[
pageParams
,
setPageParams
]
=
useState
({
...
...
@@ -73,14 +73,17 @@ export default function News(props: Props) {
setNeedLogin
(
true
);
}
};
//新闻点击
const
newsClick
=
(
item
:
Item
)
=>
{
router
.
push
(
'/projectInfo/newsArticle/'
+
item
.
id
);
};
return
(
<
Spin
spinning=
{
loading
}
delay=
{
500
}
>
<
Row
justify=
'space-between'
style=
{
{
height
:
606
}
}
>
<
Col
className=
{
styles
.
new
}
>
{
list
.
map
((
item
)
=>
{
return
(
<
div
className=
{
styles
.
item
}
key=
{
item
.
id
}
>
<
div
className=
{
styles
.
item
}
key=
{
item
.
id
}
onClick=
{
()
=>
newsClick
(
item
)
}
>
<
Image
className=
{
styles
.
logo
}
src=
{
item
.
surfaceImg
}
...
...
@@ -90,9 +93,14 @@ export default function News(props: Props) {
></
Image
>
<
div
className=
{
styles
.
info
}
>
<
div
className=
{
styles
.
title
}
>
{
item
.
newsTitle
}
</
div
>
<
div
className=
{
styles
.
desc
}
>
{
item
.
newsContents
}
</
div
>
<
div
className=
{
styles
.
desc
}
dangerouslySetInnerHTML=
{
{
__html
:
item
.
newsContents
.
replace
(
/<img
(?:(?!\/
>
)
.|
\n)
*
?\/
>/gm
,
''
)
||
''
,
}
}
></
div
>
<
div
className=
{
styles
.
date
}
>
{
Moment
().
format
(
'yyyy-MM-DD'
)
}
·
{
item
.
newsAuthor
}
{
item
.
createTime
}
· 作者:
{
item
.
newsAuthor
}
</
div
>
</
div
>
{
/*<Button*/
}
...
...
pages/projectInfo/newsArticle/[id].page.tsx
浏览文件 @
59b2ef32
import
{
RightOutlined
}
from
'@ant-design/icons'
;
import
{
Col
,
Row
,
Space
,
Image
}
from
'antd'
;
import
{
Col
,
Row
}
from
'antd'
;
import
{
useRouter
}
from
'next/router'
;
import
{
useEffect
,
useState
}
from
'react'
;
import
errImg
from
'~/assets/errImg'
;
import
Layout
from
'~/components/layout'
;
import
newsApi
,
{
Item
}
from
'../components/news/api'
;
import
api
,
{
DetailsResp
}
from
'./api'
;
...
...
@@ -70,11 +69,12 @@ export default function CaseArticle() {
<
Col
flex=
'auto'
>
<
div
className=
{
styles
.
font1
}
>
{
data
?.
newsTitle
}
</
div
>
<
div
className=
{
styles
.
font2
}
style=
{
{
marginTop
:
18
,
marginBottom
:
41
}
}
>
{
data
?.
createTime
&&
Moment
(
data
?.
createTime
).
format
(
'YYYY-MM-DD'
)
}
·
{
' '
}
{
data
?.
newsAuthor
}
{
data
?.
createTime
&&
Moment
(
data
?.
createTime
).
format
(
'YYYY-MM-DD'
)
}
·
作者:
{
data
?.
newsAuthor
||
'不详'
}
</
div
>
<
div
style=
{
{
lineHeight
:
1.5
}
}
className=
{
styles
.
richText
}
dangerouslySetInnerHTML=
{
{
__html
:
data
?.
newsContents
||
''
}
}
></
div
>
</
Col
>
...
...
pages/projectInfo/newsArticle/api/index.tsx
浏览文件 @
59b2ef32
...
...
@@ -3,7 +3,6 @@ import request, { Response } from '~/api/request';
export
interface
DetailsParams
{
id
:
number
;
}
export
interface
DetailsResp
{
id
:
number
;
newsTitle
?:
string
;
...
...
pages/projectInfo/tenderProjectsDetail/[id].page.tsx
0 → 100644
浏览文件 @
59b2ef32
import
{
RightOutlined
}
from
'@ant-design/icons'
;
import
{
Col
,
Row
}
from
'antd'
;
import
{
useRouter
}
from
'next/router'
;
import
{
useEffect
,
useState
}
from
'react'
;
import
Layout
from
'~/components/layout'
;
import
newsApi
,
{
Item
}
from
'../components/news/api'
;
import
api
,
{
DetailsResp
}
from
'./api'
;
import
styles
from
'./index.module.scss'
;
import
Moment
from
'moment'
;
export
default
function
TenderProjectsDetail
()
{
const
router
=
useRouter
();
const
[
data
,
setData
]
=
useState
<
DetailsResp
>
();
const
[
newsList
,
setNewList
]
=
useState
<
Item
[]
>
([]);
//获取案例详情
useEffect
(()
=>
{
const
id
=
Number
(
router
.
query
.
id
);
if
(
id
)
{
api
.
details
({
tenderNewsId
:
id
,
pageNo
:
1
,
pageSize
:
10
,
})
.
then
((
res
)
=>
{
setData
(
res
.
result
?.
list
[
0
]);
});
}
},
[
router
]);
//获取新闻列表
useEffect
(()
=>
{
newsApi
.
listNewsPage
({
pageNo
:
1
,
pageSize
:
10
,
})
.
then
((
res
)
=>
{
setNewList
(
res
.
result
?.
list
||
[]);
});
},
[]);
const
fontColor
=
(
i
:
number
)
=>
{
switch
(
i
)
{
case
0
:
return
{
color
:
'#ff2c46'
,
};
case
1
:
return
{
color
:
'#FF6602'
,
};
case
2
:
return
{
color
:
'#FAA910'
,
};
default
:
return
{
color
:
'#9295A3'
,
};
}
};
return
(
<
Layout
layoutStyle=
{
{
backgroundColor
:
'#fff'
}
}
>
<
div
style=
{
{
paddingTop
:
29
}
}
>
<
Row
justify=
'space-between'
wrap=
{
false
}
>
<
Col
flex=
'auto'
>
<
div
className=
{
styles
.
font1
}
>
{
data
?.
tenderTitle
}
</
div
>
<
div
className=
{
styles
.
font2
}
style=
{
{
marginTop
:
18
,
marginBottom
:
41
}
}
>
{
data
?.
createTime
&&
Moment
(
data
?.
createTime
).
format
(
'YYYY-MM-DD'
)
}
</
div
>
<
div
style=
{
{
lineHeight
:
1.5
}
}
className=
{
styles
.
richText
}
dangerouslySetInnerHTML=
{
{
__html
:
data
?.
tenderContent
||
''
}
}
></
div
>
</
Col
>
<
Col
>
<
div
className=
{
styles
.
newsBox
}
>
<
Row
className=
{
styles
.
font4
}
align=
'middle'
style=
{
{
paddingTop
:
16
,
paddingLeft
:
20
}
}
>
行业新闻
<
RightOutlined
style=
{
{
fontSize
:
16
,
marginLeft
:
9
}
}
/>
</
Row
>
<
Row
gutter=
{
10
}
style=
{
{
marginTop
:
8
}
}
>
<
Col
span=
{
24
}
>
{
newsList
.
map
((
item
,
i
)
=>
{
return
(
<
Row
key=
{
item
.
id
}
justify=
'space-between'
align=
'middle'
style=
{
{
cursor
:
'pointer'
}
}
onClick=
{
()
=>
{
router
.
push
(
'/projectInfo/newsArticle/'
+
item
.
id
);
}
}
>
<
Col
className=
{
`${styles.font3}`
}
style=
{
{
margin
:
'6px 23px 6px 19px'
,
width
:
'100%'
}
}
>
<
Row
wrap=
{
false
}
>
<
Col
span=
{
2
}
style=
{
{
textAlign
:
'center'
,
...
fontColor
(
i
)
}
}
>
{
i
+
1
}
</
Col
>
<
Col
span=
{
22
}
className=
{
styles
.
ellipse1
}
>
{
item
.
newsTitle
}
</
Col
>
</
Row
>
</
Col
>
</
Row
>
);
})
}
</
Col
>
</
Row
>
</
div
>
</
Col
>
</
Row
>
</
div
>
</
Layout
>
);
}
pages/projectInfo/tenderProjectsDetail/api/index.tsx
0 → 100644
浏览文件 @
59b2ef32
import
request
,
{
Response
}
from
'~/api/request'
;
import
{
Item
}
from
'~/pages/projectInfo/components/news/api'
;
export
interface
DetailsParams
{
tenderNewsId
:
number
;
pageNo
:
number
;
pageSize
:
number
;
}
export
interface
DetailsResp
{
id
:
number
;
tenderTitle
?:
string
;
tenderPrice
?:
number
;
tenderContent
?:
string
;
createTime
?:
string
;
}
export
interface
ListTenderPageResp
{
pageNo
:
number
;
pageSize
:
number
;
list
:
DetailsResp
[];
totalCount
:
number
;
totalPage
:
number
;
}
export
default
{
//招标详情
details
(
params
:
DetailsParams
):
Promise
<
Response
<
ListTenderPageResp
>>
{
return
request
(
'/release/tender/info'
,
'get'
,
params
);
},
};
pages/projectInfo/tenderProjectsDetail/assets/bk.png
0 → 100644
浏览文件 @
59b2ef32
7.9 KB
pages/projectInfo/tenderProjectsDetail/index.module.scss
0 → 100644
浏览文件 @
59b2ef32
@import
"~/styles/mixins.scss"
;
.font1
{
font-size
:
36px
;
font-family
:
MicrosoftYaHeiUI-Bold
,
MicrosoftYaHeiUI
;
font-weight
:
bold
;
color
:
#000000
;
line-height
:
50px
;
}
.font2
{
font-size
:
12px
;
font-family
:
MicrosoftYaHei
;
color
:
#333333
;
line-height
:
16px
;
}
.font3
{
font-size
:
14px
;
font-family
:
MicrosoftYaHei
;
color
:
#323232
;
line-height
:
19px
;
}
.font4
{
font-size
:
16px
;
font-family
:
MicrosoftYaHeiUI-Bold
,
MicrosoftYaHeiUI
;
font-weight
:
bold
;
color
:
#000000
;
line-height
:
20px
;
}
.newsBox
{
width
:
384px
;
}
.ellipse1
{
@include
ellipsis
(
1
);
}
\ No newline at end of file
utils/money.ts
0 → 100644
浏览文件 @
59b2ef32
// @ts-nocheck
/* eslint-disable */
export
const
formatCurrency
=
(
s
,
n
)
=>
{
n
=
n
>
0
&&
n
<=
20
?
n
:
2
s
=
`
${
parseFloat
(
`
${
s
}
`
.
replace
(
/
[^\d\.
-
]
/g
,
''
)).
toFixed
(
n
)}
`
const
l
=
s
.
split
(
'.'
)[
0
].
split
(
''
).
reverse
()
const
r
=
s
.
split
(
'.'
)[
1
]
let
t
=
''
for
(
let
i
=
0
;
i
<
l
.
length
;
i
++
)
{
t
+=
l
[
i
]
+
((
i
+
1
)
%
3
==
0
&&
i
+
1
!=
l
.
length
?
','
:
''
)
}
return
t
.
split
(
''
).
reverse
().
join
(
''
)
}
// 格式化千分位并补零
export
const
moneyFormat
=
(
num
)
=>
{
if
(
Number
(
num
).
toString
()
!==
'NaN'
)
{
// 添加千分符
let
_n
=
Number
(
num
).
toLocaleString
()
if
(
_n
.
indexOf
(
'.'
)
!==
-
1
)
{
_n
=
`
${
_n
}
00`
}
else
{
_n
=
`
${
_n
}
.00`
}
// 因为有千分符所以,返回数据为字符串格式,无法做运算操作,适合做直接显示使用
return
_n
.
substring
(
0
,
_n
.
indexOf
(
'.'
)
+
3
)
}
// console.log('参数格式有误')
}
// 金额大数字转换
export
const
bigNumberTransform
=
(
value
,
type
)
=>
{
const
newValue
=
[
''
,
''
,
''
]
let
fr
=
1000
let
num
=
3
let
text1
=
''
let
text2
=
''
let
fm
=
1
if
(
value
==
''
||
value
==
null
||
isNaN
(
value
))
{
return
!
type
?
newValue
:
''
}
if
(
value
<
0
)
{
value
=
Math
.
abs
(
value
)
text2
=
'-'
}
while
(
value
/
fr
>=
1
)
{
fr
*=
10
num
+=
1
// console.log('数字', value / fr, 'num:', num)
}
if
(
num
<=
4
)
{
// 千
newValue
[
0
]
=
value
newValue
[
1
]
=
''
}
else
if
(
num
<=
8
)
{
// 万
// text1 = parseInt(num - 4) / 3 > 1 ? '千万' : '万'
text1
=
'万'
// tslint:disable-next-line:no-shadowed-variable
fm
=
text1
===
'万'
?
10000
:
10000000
if
(
value
%
fm
===
0
)
{
newValue
[
0
]
=
`
${
parseInt
(
value
/
fm
)}
`
}
else
{
newValue
[
0
]
=
`
${
parseFloat
(
value
/
fm
).
toFixed
(
2
)}
`
}
newValue
[
1
]
=
text1
}
else
{
// 亿 if (num <= 16)
// text1 = (num - 8) / 3 > 1 ? '千亿' : '亿'
text1
=
'亿'
text1
=
(
num
-
8
)
/
4
>
1
?
'万亿'
:
text1
text1
=
(
num
-
8
)
/
7
>
1
?
'千万亿'
:
text1
text1
=
(
num
-
8
)
/
10
>
1
?
'亿亿'
:
text1
// tslint:disable-next-line:no-shadowed-variable
fm
=
1
if
(
text1
===
'亿'
)
{
fm
=
100000000
}
else
if
(
text1
===
'千亿'
)
{
fm
=
100000000000
}
else
if
(
text1
===
'万亿'
)
{
fm
=
1000000000000
}
else
if
(
text1
===
'千万亿'
)
{
fm
=
1000000000000000
}
else
{
fm
=
1000000000000000000
}
if
(
value
%
fm
===
0
)
{
newValue
[
0
]
=
`
${
parseInt
(
value
/
fm
)}
`
}
else
{
newValue
[
0
]
=
`
${
parseFloat
(
value
/
fm
).
toFixed
(
2
)}
`
}
newValue
[
1
]
=
text1
}
if
(
value
<
1000
)
{
newValue
[
0
]
=
`
${
value
}
`
newValue
[
1
]
=
''
}
newValue
[
0
]
=
text2
?
text2
+
newValue
[
0
]
:
newValue
[
0
]
return
!
type
?
newValue
:
newValue
[
0
]
+
newValue
[
1
]
}
// 格式化金额
export
const
formatMoney
=
(
money
)
=>
{
return
money
?.
toLocaleString
()
}
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论