Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
J
jinfa-platform
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
linweijiong
jinfa-platform
Commits
f45aad40
Commit
f45aad40
authored
May 19, 2021
by
alwayOnlie
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
‘bug修复
parent
34b51059
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
20 changed files
with
994 additions
and
199 deletions
+994
-199
index.tsx
...ages/contract/components/detailCard/PaymentCard/index.tsx
+82
-0
index.tsx
src/pages/contract/components/detailCard/basic/index.tsx
+81
-0
index.css
src/pages/contract/components/detailCard/index.css
+167
-0
index.less
src/pages/contract/components/detailCard/index.less
+202
-0
DrawerModal.tsx
src/pages/contract/contractexecution/details/DrawerModal.tsx
+101
-0
PopModal.tsx
src/pages/contract/contractexecution/details/PopModal.tsx
+75
-0
detailedList.tsx
...pages/contract/contractexecution/details/detailedList.tsx
+104
-0
index.tsx
src/pages/contract/contractexecution/details/index.tsx
+0
-0
selectProduct.tsx
.../contract/coordination/components/modal/selectProduct.tsx
+2
-2
index.tsx
src/pages/contract/coordination/details/index.tsx
+7
-7
columnsList.tsx
src/pages/contract/funds/details/components/columnsList.tsx
+121
-0
index.tsx
src/pages/contract/funds/details/index.tsx
+8
-152
index.tsx
src/pages/contract/funds/secondpayment/index.tsx
+0
-4
index.tsx
src/pages/contract/funds/submitpayment/index.tsx
+1
-8
addList.tsx
src/pages/contract/manage/add/addList.tsx
+8
-5
FormList.tsx
src/pages/contract/manage/add/components/FormList.tsx
+0
-0
index.tsx
src/pages/contract/manage/examine/index.tsx
+10
-6
index.tsx
src/pages/contract/manage/levelexamine/index.tsx
+8
-5
index.tsx
src/pages/contract/manage/secondaryexamine/index.tsx
+9
-5
index.tsx
src/pages/contract/manage/signacontract/index.tsx
+8
-5
No files found.
src/pages/contract/components/detailCard/PaymentCard/index.tsx
0 → 100644
View file @
f45aad40
/* 这个是付款计划组建 */
import
React
,
{
useState
}
from
'react'
;
import
{
Row
,
Col
,
}
from
'antd'
;
import
style
from
'../index.less'
;
import
{
history
}
from
'umi'
import
{
IAntdSchemaFormProps
}
from
'@formily/antd'
export
interface
Iprops
extends
IAntdSchemaFormProps
{
/* 付款计划数组 */
payPlanList
:
any
,
basics
:
any
,
contractId
:
any
,
}
const
PaymentCard
:
React
.
FC
<
Iprops
>
=
({
payPlanList
,
basics
,
contractId
})
=>
{
/* 非手工单进入请款 */
const
like
=
(
sourceType
)
=>
{
sessionStorage
.
setItem
(
'basics'
,
JSON
.
stringify
(
basics
));
history
.
push
(
'/memberCenter/contract/funds/addbill/Add?applyId='
+
contractId
+
'&sourceType='
+
sourceType
)
}
return
(
<
div
id=
'conditions'
className=
'ant-card ant-card-bordered'
>
<
div
className=
'ant-card-head'
>
<
div
className=
'ant-card-head-wrapper'
>
<
div
className=
'ant-card-head-wrapper'
>
付款计划
</
div
>
</
div
>
</
div
>
<
div
className=
'ant-card-body'
>
<
Row
gutter=
{
[
8
,
8
]
}
>
<
div
className=
{
style
.
warp
}
>
{
payPlanList
.
map
((
item
:
any
,
index
:
number
)
=>
{
return
(
<
div
className=
{
style
.
warp_item
}
key=
{
index
}
>
<
div
className=
{
style
.
title
}
>
付款比例
</
div
>
<
div
className=
{
style
.
proportion
}
>
{
item
.
payRatio
}
%
</
div
>
<
div
style=
{
{
display
:
'flex'
,
justifyContent
:
'space-between'
,
alignItems
:
'center'
}
}
>
<
div
className=
{
style
.
Price
}
>
¥
{
item
.
payAmount
}
</
div
>
<
div
onClick=
{
()
=>
like
(
1
)
}
style=
{
{
cursor
:
'pointer'
,
fontSize
:
12
,
backgroundColor
:
'#00B37A'
,
color
:
'#fff'
,
padding
:
'4px 8px'
}
}
>
请款
</
div
>
</
div
>
<
div
className=
{
style
.
warp_List
}
>
<
div
className=
{
style
.
warp_ListItem
}
>
<
div
className=
{
style
.
label
}
>
付款阶段
</
div
>
<
div
className=
{
style
.
text
}
>
{
item
.
payStage
}
</
div
>
</
div
>
<
div
className=
{
style
.
warp_ListItem
}
>
<
div
className=
{
style
.
label
}
>
预计付款时间:
</
div
>
<
div
className=
{
style
.
text
}
>
{
item
.
expectPayTime
}
</
div
>
</
div
>
<
div
className=
{
style
.
warp_ListItem
}
>
<
div
className=
{
style
.
label
}
>
付款方式:
</
div
>
<
div
className=
{
style
.
text
}
>
{
item
.
payWayName
}
</
div
>
</
div
>
</
div
>
</
div
>
)
})
}
</
div
>
</
Row
>
</
div
>
</
div
>
)
}
PaymentCard
.
defaultProps
=
{
payPlanList
:
[],
basics
:
{},
contractId
:
0
,
}
export
default
PaymentCard
;
src/pages/contract/components/detailCard/basic/index.tsx
0 → 100644
View file @
f45aad40
import
React
,
{
useState
}
from
'react'
;
import
{
Row
,
Col
,
}
from
'antd'
;
import
StatusTag
from
'@/components/StatusTag'
;
import
style
from
'../index.less'
;
import
{
IAntdSchemaFormProps
}
from
'@formily/antd'
import
{
history
}
from
'umi'
export
interface
Iprops
extends
IAntdSchemaFormProps
{
/* 显示隐藏 */
basicInfo
:
any
,
}
const
Basic
:
React
.
FC
<
Iprops
>
=
({
basicInfo
})
=>
{
return
(
<
div
id=
'process'
className=
'ant-card ant-card-bordered'
>
<
div
className=
'ant-card-head'
>
<
div
className=
'ant-card-head-wrapper'
>
<
div
className=
'ant-card-head-wrapper'
>
基本信息
</
div
>
</
div
>
</
div
>
<
div
className=
'ant-card-body'
>
<
Row
gutter=
{
[
8
,
8
]
}
>
<
Col
span=
{
8
}
>
{
basicInfo
.
col1
.
map
((
item
:
any
,
index
:
number
)
=>
(
<
div
className=
{
style
.
list
}
key=
{
`col1_${index + 1}`
}
>
<
h5
className=
{
style
.
listLable
}
>
{
item
.
label
}
</
h5
>
{
item
.
url
?
<
h5
className=
{
style
.
gesture
}
onClick=
{
()
=>
history
.
push
(
item
.
url
)
}
>
{
item
.
extra
}
</
h5
>
:
item
.
label
===
'外部状态:'
?
<
StatusTag
type=
"success"
title=
{
item
.
extra
}
/>
:
<
h5
className=
{
style
.
listContent
}
>
{
item
.
extra
}
</
h5
>
}
</
div
>
))
}
</
Col
>
<
Col
span=
{
8
}
>
{
basicInfo
.
col2
.
map
((
item
:
any
,
index
:
number
)
=>
(
<
div
className=
{
style
.
list
}
key=
{
`col2_${index + 1}`
}
>
<
h5
className=
{
style
.
listLable
}
>
{
item
.
label
}
</
h5
>
{
item
.
url
?
<
h5
className=
{
style
.
gesture
}
onClick=
{
()
=>
history
.
push
(
item
.
url
)
}
>
{
item
.
extra
}
</
h5
>
:
<
h5
className=
{
style
.
listContent
}
>
{
item
.
extra
}
</
h5
>
}
</
div
>
))
}
</
Col
>
<
Col
span=
{
8
}
>
{
basicInfo
.
col3
.
map
((
item
:
any
,
index
:
number
)
=>
(
<
div
className=
{
style
.
list
}
key=
{
`col3_${index + 1}`
}
>
<
h5
className=
{
style
.
listLable
}
>
{
item
.
label
}
</
h5
>
<
h5
className=
{
style
.
listContent
}
>
{
item
.
extra
}
</
h5
>
</
div
>
))
}
</
Col
>
</
Row
>
</
div
>
</
div
>
)
}
Basic
.
defaultProps
=
{
basicInfo
:
{
col1
:
[],
col2
:
[],
col3
:
[],
}
}
export
default
Basic
;
src/pages/contract/components/detailCard/index.css
0 → 100644
View file @
f45aad40
.anchorWrap
:global
.ant-anchor
{
display
:
flex
;
}
.anchorWrap
:global
.ant-anchor
.ant-anchor-ink
{
display
:
none
;
}
.anchorWrap
:global
.ant-anchor
.ant-anchor-link
{
padding
:
14px
0
!important
;
margin
:
0
16px
;
}
.anchorWrap
:global
.ant-anchor
.ant-anchor-link
.ant-anchor-link-title
{
font-size
:
14px
;
color
:
#909399
;
}
.anchorWrap
:global
.ant-anchor
.ant-anchor-link-active
{
position
:
relative
;
border-bottom
:
2px
solid
#00B37A
;
box-sizing
:
border-box
;
}
.anchorWrap
:global
.ant-anchor
.ant-anchor-link-active
.ant-anchor-link-title
{
font-weight
:
500
;
color
:
#303133
;
}
.anchorWrap
.titleBox
{
padding
:
8px
16px
;
}
.anchorWrap
.anchorBox
{
display
:
flex
;
padding
:
0
16px
;
}
/** 卡片样式 */
.card
{
margin
:
24px
;
}
.card
:global
.ant-card
{
margin-bottom
:
24px
;
}
.card
:global
.ant-card
.ant-card-head
>
.ant-card-head-wrapper
{
padding
:
12px
0
;
}
.card
:global
.ant-card
.ant-card-extra
{
padding
:
0
0
;
}
.card
:global
.ant-card
.ant-card-extra
.ant-radio-button-wrapper
{
height
:
24px
;
line-height
:
23px
;
}
.card
:global
.ant-card
.ant-card-extra
.ant-radio-button-wrapper
:hover
{
color
:
#606266
;
}
.card
:global
.ant-card
.ant-card-extra
.ant-radio-button-wrapper-checked
:not
(
.ant-radio-button-wrapper-disabled
)
{
color
:
#fff
;
background
:
#6B778C
;
border-color
:
#6B778C
;
}
.card
:global
.god-table-control
{
margin-bottom
:
0
;
}
.list
{
display
:
flex
;
margin-bottom
:
1.5em
;
}
.list
.listLable
{
flex
:
0
0
25%
;
color
:
#909399
;
}
.listItem
{
display
:
flex
;
}
.listItem
.label
{
flex
:
0.2
;
padding
:
0
16px
;
background
:
linear-gradient
(
270deg
,
#ffffff
0%
,
#daf2e7
100%
);
}
.listItem
.text
{
padding
:
0px
0px
;
flex
:
1
;
}
.listItem
p
{
margin-bottom
:
0
;
}
.warp
{
display
:
flex
;
width
:
100%
;
}
.warp
.warp_item
{
width
:
20%
;
border
:
1px
solid
#F4F5F7
;
border-radius
:
10px
;
padding
:
16px
;
margin-right
:
10px
;
}
.warp
.warp_item
.title
{
font-size
:
12px
;
font-family
:
PingFangSC-Regular
,
PingFang
SC
;
font-weight
:
400
;
color
:
#909399
;
}
.warp
.warp_item
.proportion
{
font-size
:
24px
;
font-family
:
PingFangSC-Medium
,
PingFang
SC
;
font-weight
:
500
;
color
:
#303133
;
padding
:
12px
0
;
}
.warp
.warp_item
.Price
{
font-size
:
16px
;
font-family
:
PingFangSC-Medium
,
PingFang
SC
;
font-weight
:
500
;
color
:
#303133
;
}
.warp
.warp_item
.warp_List
{
margin-top
:
32px
;
}
.warp
.warp_item
.warp_List
.warp_ListItem
{
display
:
flex
;
margin-bottom
:
16px
;
}
.warp
.warp_item
.warp_List
.warp_ListItem
.label
{
font-size
:
12px
;
font-family
:
PingFangSC-Regular
,
PingFang
SC
;
font-weight
:
400
;
color
:
#909399
;
flex
:
0.5
;
}
.warp
.warp_item
.warp_List
.warp_ListItem
.text
{
font-size
:
12px
;
font-family
:
PingFangSC-Regular
,
PingFang
SC
;
font-weight
:
400
;
color
:
#303133
;
flex
:
1
;
}
.upload_item
{
margin-bottom
:
16px
;
display
:
flex
;
align-items
:
center
;
justify-content
:
space-between
;
}
.upload_item
.upload_left
{
display
:
flex
;
align-items
:
center
;
color
:
#303133
;
background-color
:
#fafbfc
;
}
.upload_item
.upload_left
:global
.anticon-file-word
{
color
:
#4279df
;
font-size
:
18px
;
margin-right
:
8px
;
}
.upload_item
.upload_right
{
color
:
#00b37a
;
cursor
:
pointer
;
}
.upload_item
.upload_right
:global
.anticon-delete
{
margin-left
:
19px
;
color
:
#c0c4cc
;
}
.gesture
{
color
:
#00B37A
;
cursor
:
pointer
;
}
.wrapper
:global
.ant-input-search
.ant-input-group
.ant-input
{
padding
:
0px
!important
;
}
.wrapper
:global
.ant-input-search
.ant-input-group-addon
.ant-input-search-button
{
background-color
:
#F7F8FA
;
}
src/pages/contract/components/detailCard/index.less
0 → 100644
View file @
f45aad40
.anchorWrap {
:global {
.ant-anchor {
display: flex;
.ant-anchor-ink {
display: none;
}
.ant-anchor-link {
padding: 14px 0 !important;
margin: 0 16px;
.ant-anchor-link-title {
font-size: 14px;
color: #909399;
}
}
.ant-anchor-link-active {
position: relative;
border-bottom: 2px solid #00B37A;
box-sizing: border-box;
.ant-anchor-link-title {
font-weight: 500;
color: #303133;
}
}
}
}
.titleBox {
padding: 8px 16px;
}
.anchorBox {
display: flex;
padding: 0 16px;
}
}
/** 卡片样式 */
.card {
margin: 24px;
:global {
.ant-card {
margin-bottom: 24px;
.ant-card-head {
> .ant-card-head-wrapper {
padding: 12px 0;
}
}
.ant-card-extra {
padding: 0 0;
.ant-radio-button-wrapper {
height: 24px;
line-height: 23px;
}
.ant-radio-button-wrapper:hover {
color: #606266;
}
.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled) {
color: #fff;
background: #6B778C;
border-color: #6B778C;
}
}
}
.god-table-control {
margin-bottom: 0;
}
}
}
.list {
display: flex;
margin-bottom: 1.5em;
h5 {
}
.listLable {
flex: 0 0 25%;
color: #909399;
}
}
.listItem {
display: flex;
.label {
flex: 0.2;
padding: 0 16px;
background: linear-gradient(270deg, #ffffff 0%, #daf2e7 100%);
}
.text {
padding: 0px 0px;
flex: 1;
}
p {
margin-bottom: 0;
}
}
.warp{
display: flex;
width: 100%;
.warp_item{
width: 20%;
border: 1px solid #F4F5F7;
border-radius: 10px;
padding: 16px;
margin-right: 10px;
.title{
font-size: 12px;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #909399;
}
.proportion{
font-size: 24px;
font-family: PingFangSC-Medium, PingFang SC;
font-weight: 500;
color: #303133;
padding: 12px 0;
}
.Price{
font-size: 16px;
font-family: PingFangSC-Medium, PingFang SC;
font-weight: 500;
color: #303133;
}
.warp_List{
margin-top: 32px;
.warp_ListItem{
display: flex;
margin-bottom: 16px;
.label{
font-size: 12px;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #909399;
flex: 0.5;
}
.text{
font-size: 12px;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #303133;
flex: 1;
}
}
}
}
}
.upload_item {
margin-bottom: 16px;
display: flex;
align-items: center;
justify-content: space-between;
.upload_left {
display: flex;
align-items: center;
color: #303133;
background-color: #fafbfc;
:global {
.anticon-file-word {
color: #4279df;
font-size: 18px;
margin-right: 8px;
}
}
}
.upload_right {
color: #00b37a;
cursor: pointer;
:global {
.anticon-delete {
margin-left: 19px;
color: #c0c4cc;
}
}
}
}
.gesture{
color: #00B37A;
cursor:pointer;
}
.wrapper{
:global {
// 处理高级筛选input和search按钮不对齐问题、search按钮背景
.ant-input-search {
.ant-input-group {
.ant-input {
padding: 0px !important;
}
}
.ant-input-group-addon {
.ant-input-search-button {
background-color: #F7F8FA;
}
}
}
}
}
src/pages/contract/contractexecution/details/DrawerModal.tsx
0 → 100644
View file @
f45aad40
import
React
,
{
useRef
,
useState
}
from
'react'
;
import
{
IAntdSchemaFormProps
}
from
'@formily/antd'
import
{
Button
,
Drawer
,
}
from
'antd'
;
import
{
StandardTable
}
from
'god'
;
import
EyePreview
from
'@/components/EyePreview'
;
import
{
PublicApi
}
from
'@/services/api'
;
export
interface
Iprops
extends
IAntdSchemaFormProps
{
/* 显示隐藏 */
visible
:
any
,
applyId
:
any
,
setDrawerModal
:
Function
}
const
DrawerModal
:
React
.
FC
<
Iprops
>
=
({
visible
,
applyId
,
setDrawerModal
})
=>
{
const
ref
=
useRef
({});
const
[
selectRow
,
setSelectRow
]
=
useState
<
any
[]
>
([])
// 抽屉选择的行数据
const
[
selectedRowKeys
,
setSelectedRowKeys
]
=
useState
<
Array
<
string
>>
([])
const
PaymentList
:
any
=
[
{
title
:
'单据号/摘要'
,
dataIndex
:
'orderNO'
,
align
:
'center'
,
render
:
(
text
:
any
,
record
:
any
)
=>
{
return
(
<
div
>
<
EyePreview
url=
{
`/memberCenter/tranactionAbility/purchaseOrder/readyAddOrder/preview?id=${record.orderId}`
}
>
{
text
}
</
EyePreview
>
<
p
>
{
record
.
orderAbstract
}
</
p
>
</
div
>
);
},
},
{
title
:
'单据类型'
,
dataIndex
:
'orderTypeName'
,
align
:
'center'
,
},
{
title
:
'单据状态'
,
dataIndex
:
'orderStatusName'
,
align
:
'center'
,
},
{
title
:
'单据时间'
,
dataIndex
:
'orderTime'
,
align
:
'center'
,
},
]
/* 查看付款明细————————————————————查看付款明细———————————————————— */
const
rowSelection
:
any
=
{
selectedRowKeys
:
selectedRowKeys
,
onChange
:
(
selectedRowKeys
:
any
,
selectedRows
:
any
)
=>
{
setSelectRow
(
selectedRows
)
setSelectedRowKeys
(
selectedRowKeys
)
}
}
/* 请求查看付款明细 */
const
getPaymentList
=
(
params
)
=>
{
return
new
Promise
((
resolve
,
reject
)
=>
{
PublicApi
.
getContractExecuteExecuteInfoPayDetailInfoPagePayDetail
({
...
params
,
applyId
,
}).
then
(
res
=>
{
if
(
res
.
code
===
1000
)
{
console
.
log
(
res
,
'请求查看付款明细'
)
resolve
(
res
.
data
)
}
})
})
}
return
(
<
Drawer
visible=
{
visible
}
onClose=
{
()
=>
setDrawerModal
()
}
title=
"付款明细"
width=
{
900
}
footer=
{
<
div
style=
{
{
textAlign
:
'right'
,
}
}
>
<
Button
onClick=
{
()
=>
setDrawerModal
()
}
style=
{
{
marginRight
:
8
}
}
>
取消
</
Button
>
<
Button
type=
"primary"
onClick=
{
()
=>
setDrawerModal
()
}
>
确定
</
Button
>
</
div
>
}
destroyOnClose
>
<
StandardTable
tableProps=
{
{
rowKey
:
'id'
,
}
}
columns=
{
PaymentList
}
currentRef=
{
ref
}
rowSelection=
{
rowSelection
}
fetchTableData=
{
(
params
:
any
)
=>
getPaymentList
(
params
)
}
/>
</
Drawer
>
)
}
export
default
DrawerModal
;
src/pages/contract/contractexecution/details/PopModal.tsx
0 → 100644
View file @
f45aad40
import
React
,
{
useEffect
,
useState
,
useRef
}
from
'react'
;
import
{
Modal
,
Form
,
Button
,
Select
}
from
'antd'
;
import
style
from
'./index.less'
;
import
{
history
}
from
'umi'
import
{
IAntdSchemaFormProps
}
from
'@formily/antd'
const
Option
=
Select
.
Option
;
export
interface
Iprops
extends
IAntdSchemaFormProps
{
/* 显示隐藏 */
ModalVisible
:
any
,
payType
:
any
,
selectRowList
:
any
,
contractId
:
any
,
basics
:
any
,
setDrawerPopModal
:
Function
}
const
PopModal
:
React
.
FC
<
Iprops
>
=
({
ModalVisible
,
payType
,
selectRowList
,
contractId
,
basics
,
setDrawerPopModal
,
})
=>
{
const
[
form
]
=
Form
.
useForm
();
/* 确定 */
const
onFinish
=
(
values
:
any
)
=>
{
sessionStorage
.
setItem
(
'basics'
,
JSON
.
stringify
(
basics
))
sessionStorage
.
setItem
(
'list'
,
JSON
.
stringify
(
selectRowList
))
history
.
push
(
'/memberCenter/contract/funds/addbill/Add?applyId='
+
contractId
+
'&sourceType='
+
2
)
}
const
onFinishFailed
=
(
errorInfo
:
any
)
=>
{
console
.
log
(
'Failed:'
,
errorInfo
);
};
return
(
<
Modal
footer=
{
null
}
title=
"提交审核"
visible=
{
ModalVisible
}
onOk=
{
()
=>
setDrawerPopModal
()
}
onCancel=
{
()
=>
setDrawerPopModal
()
}
>
<
Form
name=
"basic"
form=
{
form
}
initialValues=
{
{
remember
:
true
}
}
onFinish=
{
onFinish
}
onFinishFailed=
{
onFinishFailed
}
>
<
Form
.
Item
label=
'选择付款阶段'
initialValue=
{
payType
.
length
!=
0
?
payType
[
0
].
id
:
''
}
name=
"opinion"
rules=
{
[{
required
:
true
,
message
:
'选择付款阶段'
}]
}
>
<
Select
style=
{
{
width
:
'290px'
}
}
>
{
payType
.
map
(
item
=>
(
<
Option
key=
{
item
.
id
}
value=
{
item
.
id
}
>
{
item
.
payStage
}
</
Option
>
))
}
</
Select
>
</
Form
.
Item
>
<
div
style=
{
{
display
:
'flex'
,
justifyContent
:
'flex-end'
}
}
>
<
Button
style=
{
{
marginRight
:
10
}
}
onClick=
{
()
=>
setDrawerPopModal
()
}
>
取消
</
Button
>
<
Button
type=
"primary"
htmlType=
"submit"
>
确定
</
Button
>
</
div
>
</
Form
>
</
Modal
>
)
}
export
default
PopModal
;
src/pages/contract/contractexecution/details/detailedList.tsx
0 → 100644
View file @
f45aad40
import
React
,
{
useRef
}
from
'react'
;
import
{
StandardTable
}
from
'god'
;
import
{
IAntdSchemaFormProps
}
from
'@formily/antd'
import
EyePreview
from
'@/components/EyePreview'
;
import
{
PublicApi
}
from
'@/services/api'
;
export
interface
Iprops
extends
IAntdSchemaFormProps
{
/* 显示隐藏 */
contractId
:
any
,
}
const
DetailedList
:
React
.
FC
<
Iprops
>
=
({
contractId
})
=>
{
const
ref
=
useRef
({});
const
columnsList
:
any
=
[
{
title
:
'请款次数'
,
dataIndex
:
'name'
,
key
:
'name'
,
align
:
'center'
,
render
:
(
text
:
any
,
record
:
any
,
index
:
number
)
=>
{
return
(
<
span
>
{
index
+
1
}
</
span
>
)
},
},
{
title
:
'请款单号/摘要'
,
dataIndex
:
'applyNo'
,
align
:
'center'
,
render
:
(
text
:
any
,
record
:
any
)
=>
{
return
(
<
div
>
<
EyePreview
url=
{
`/memberCenter/contract/funds/bill/details?applyId=${record.id}&type=pageDetailList`
}
>
{
text
}
</
EyePreview
>
<
p
>
{
record
.
applyAbstract
}
</
p
>
</
div
>
);
}
},
{
title
:
'请款时间'
,
dataIndex
:
'applyTime'
,
align
:
'center'
,
},
{
title
:
'请款金额'
,
dataIndex
:
'applyAmount'
,
align
:
'center'
,
render
:
(
text
:
any
,
record
:
any
,
index
:
number
)
=>
{
return
(
<
span
>
¥
{
text
}
</
span
>
)
},
},
{
title
:
'付款时间'
,
dataIndex
:
'payTime'
,
align
:
'center'
,
},
{
title
:
'付款金额'
,
dataIndex
:
'payAmount'
,
align
:
'center'
,
render
:
(
text
:
any
,
record
:
any
,
index
:
number
)
=>
{
return
(
<
span
>
¥
{
text
}
</
span
>
)
},
},
{
title
:
'付款方式'
,
dataIndex
:
'payWayName'
,
align
:
'center'
,
},
];
/* 请款统计 */
const
fetchData
=
(
params
:
any
)
=>
{
return
new
Promise
((
resolve
,
reject
)
=>
{
PublicApi
.
getContractExecutePageListForSummaryByPartyA
({
...
params
,
contractId
,
}).
then
(
res
=>
{
if
(
res
.
code
===
1000
)
{
console
.
log
(
res
,
'这个是什么玩意'
)
resolve
(
res
.
data
)
}
else
{
}
})
})
}
return
(
<
div
id=
'record'
className=
'ant-card ant-card-bordered'
>
<
div
className=
'ant-card-head'
>
<
div
className=
'ant-card-head-wrapper'
>
<
div
className=
'ant-card-head-wrapper'
>
请款统计
</
div
>
</
div
>
</
div
>
<
div
className=
'ant-card-body'
>
<
StandardTable
tableProps=
{
{
rowKey
:
'id'
,
}
}
currentRef=
{
ref
}
columns=
{
columnsList
}
fetchTableData=
{
(
params
:
any
)
=>
fetchData
(
params
)
}
/>
</
div
>
</
div
>
)
}
export
default
DetailedList
;
src/pages/contract/contractexecution/details/index.tsx
View file @
f45aad40
This diff is collapsed.
Click to expand it.
src/pages/contract/coordination/components/modal/selectProduct.tsx
View file @
f45aad40
...
...
@@ -48,7 +48,7 @@ const SelectProduct: React.FC<Iprops> = (props: any) => {
title
:
'品牌'
,
key
:
'brandName'
,
dataIndex
:
'brandName'
,
render
:
(
text
:
any
)
=>
<
span
>
{
(
text
&&
Object
.
keys
(
text
).
length
>
0
)
&&
text
.
name
}
</
span
>
render
:
(
text
:
any
)
=>
<
span
>
{
text
}
</
span
>
},
]
const
fetchGoodsData
=
(
params
:
any
)
=>
{
...
...
@@ -70,7 +70,7 @@ const SelectProduct: React.FC<Iprops> = (props: any) => {
<
Drawer
visible=
{
visible
}
onClose=
{
onclose
}
title=
'选择
货
品'
title=
'选择
商
品'
width=
{
900
}
footer=
{
<
div
...
...
src/pages/contract/coordination/details/index.tsx
View file @
f45aad40
...
...
@@ -81,15 +81,15 @@ const Details = (props: any) => {
let
contractAbstract
=
res
.
data
.
basics
.
contractAbstract
;
const
basicInfo
=
{
col1
:
[
{
label
:
'合同编号
:
'
,
extra
:
basics
.
contractNo
?
basics
.
contractNo
:
''
},
{
label
:
'合同摘要
:
'
,
extra
:
basics
.
contractAbstract
?
basics
.
contractAbstract
:
''
},
{
label
:
'外部状态
:
'
,
extra
:
basics
.
outerStatusName
?
basics
.
outerStatusName
:
''
},
{
label
:
'内部状态
:
'
,
extra
:
basics
.
innerStatusName
?
basics
.
innerStatusName
:
''
},
{
label
:
'合同编号'
,
extra
:
basics
.
contractNo
?
basics
.
contractNo
:
''
},
{
label
:
'合同摘要'
,
extra
:
basics
.
contractAbstract
?
basics
.
contractAbstract
:
''
},
{
label
:
'外部状态'
,
extra
:
basics
.
outerStatusName
?
basics
.
outerStatusName
:
''
},
{
label
:
'内部状态'
,
extra
:
basics
.
innerStatusName
?
basics
.
innerStatusName
:
''
},
],
col2
:
[
{
label
:
'寻源类型
:
'
,
extra
:
basics
.
sourceTypeName
?
basics
.
sourceTypeName
:
''
},
{
label
:
'对应单据
:
'
,
extra
:
basics
.
sourceNo
?
basics
.
sourceNo
:
''
},
{
label
:
'授标会员
:
'
,
extra
:
basics
.
partyBName
?
basics
.
partyBName
:
''
},
{
label
:
'寻源类型'
,
extra
:
basics
.
sourceTypeName
?
basics
.
sourceTypeName
:
''
},
{
label
:
'对应单据'
,
extra
:
basics
.
sourceNo
?
basics
.
sourceNo
:
''
},
{
label
:
'授标会员'
,
extra
:
basics
.
partyBName
?
basics
.
partyBName
:
''
},
{
label
:
'授标金额'
,
extra
:
basics
.
totalAmount
?
basics
.
totalAmount
:
''
},
],
col3
:
[
...
...
src/pages/contract/funds/details/components/columnsList.tsx
0 → 100644
View file @
f45aad40
import
React
,
{
useRef
}
from
'react'
;
import
{
Radio
}
from
'antd'
;
import
{
ColumnType
}
from
'antd/lib/table/interface'
;
import
{
StandardTable
}
from
'god'
;
import
{
IAntdSchemaFormProps
}
from
'@formily/antd'
import
DateRangePickerUnix
from
'@/components/NiceForm/components/DateRangePickerUnix'
import
{
useStateFilterSearchLinkageEffect
}
from
'@/formSchema/effects/useFilterSearch'
import
{
FORM_FILTER_PATH
}
from
'@/formSchema/const'
import
Submit
from
'@/components/NiceForm/components/Submit'
import
{
PublicApi
}
from
'@/services/api'
;
export
interface
Iprops
extends
IAntdSchemaFormProps
{
/* 显示隐藏 */
applyId
:
any
,
}
const
ColumnsList
:
React
.
FC
<
Iprops
>
=
({
applyId
})
=>
{
const
ref
=
useRef
({});
/* 操作人 */
const
columnsList
:
ColumnType
<
any
>
[]
=
[{
title
:
'序号'
,
dataIndex
:
'No'
,
align
:
'center'
,
render
:
(
_
,
item
,
index
)
=>
(
<
p
>
{
index
+
1
}
</
p
>
)
},
{
title
:
'操作角色'
,
dataIndex
:
'operator'
,
align
:
'center'
,
},
{
title
:
'部门'
,
dataIndex
:
'department'
,
align
:
'center'
,
},
{
title
:
'职位'
,
dataIndex
:
'jobTitle'
,
align
:
'center'
,
},
{
title
:
'状态'
,
dataIndex
:
'statusName'
,
align
:
'center'
,
},
{
title
:
'操作'
,
dataIndex
:
'operate'
,
align
:
'center'
,
},
{
title
:
'操作时间'
,
dataIndex
:
'operateTime'
,
align
:
'center'
,
},
{
title
:
'审核意见'
,
dataIndex
:
'opinion'
,
align
:
'center'
,
},
]
// 流转记录
const
fetListData
=
(
params
:
any
)
=>
{
return
new
Promise
((
resolve
,
reject
)
=>
{
PublicApi
.
getContractApplyAmountPageRecordList
({
applyId
,
...
params
}).
then
(
res
=>
{
resolve
(
res
.
data
)
})
})
}
return
(
<
div
id=
'record'
className=
'ant-card ant-card-bordered'
>
<
div
className=
'ant-card-head'
>
<
div
className=
'ant-card-head-wrapper'
>
<
div
className=
'ant-card-head-wrapper'
>
流转记录
</
div
>
<
div
className=
'ant-card-extra'
>
<
Radio
.
Group
defaultValue=
"a"
>
<
Radio
.
Button
value=
"a"
>
内部流转
</
Radio
.
Button
>
</
Radio
.
Group
>
</
div
>
</
div
>
</
div
>
<
div
className=
'ant-card-body'
>
<
StandardTable
tableProps=
{
{
rowKey
:
'id'
,
}
}
columns=
{
columnsList
}
currentRef=
{
ref
}
fetchTableData=
{
(
params
:
any
)
=>
fetListData
(
params
)
}
formilyProps=
{
{
ctx
:
{
inline
:
false
,
effects
:
(
$
,
actions
)
=>
{
useStateFilterSearchLinkageEffect
(
$
,
actions
,
'orderNo'
,
FORM_FILTER_PATH
,
);
},
components
:
{
DateRangePickerUnix
,
Submit
}
}
}
}
/>
</
div
>
</
div
>
)
}
export
default
ColumnsList
;
src/pages/contract/funds/details/index.tsx
View file @
f45aad40
...
...
@@ -3,25 +3,19 @@ import React, { useEffect, useState, useRef } from 'react';
import
{
Anchor
,
Radio
,
Steps
,
Row
,
Col
,
Input
,
Button
,
message
,
Modal
}
from
'antd'
;
import
style
from
'./index.less'
;
import
{
ArrowLeftOutlined
}
from
'@ant-design/icons'
;
import
{
StandardTable
}
from
'god'
;
import
{
ColumnType
}
from
'antd/lib/table/interface'
;
import
{
history
}
from
'umi'
;
import
{
useStateFilterSearchLinkageEffect
}
from
'@/formSchema/effects/useFilterSearch'
import
Submit
from
'@/components/NiceForm/components/Submit'
import
{
FORM_FILTER_PATH
}
from
'@/formSchema/const'
import
{
PublicApi
}
from
'@/services/api'
;
import
DateRangePickerUnix
from
'@/components/NiceForm/components/DateRangePickerUnix'
import
Examine
from
'../../components/examine'
import
Materials
from
'./components/materials'
import
ColumnsList
from
'./components/ColumnsList'
import
Basic
from
'../../components/detailCard/basic'
const
{
Link
}
=
Anchor
;
const
{
Step
}
=
Steps
;
const
activeAnchorClassName
=
'ant-anchor-link-active'
const
{
TextArea
}
=
Input
;
const
BillDetails
=
(
props
:
any
)
=>
{
const
ref
=
useRef
({});
const
[
currLink
,
setCurrLink
]
=
useState
(
activeAnchorClassName
)
const
[
isAllMember
,
setIsAllMember
]
=
useState
(
true
)
const
{
location
:
{
query
:
{
applyId
,
type
}
}
}
=
props
...
...
@@ -128,7 +122,6 @@ const BillDetails = (props: any) => {
PublicApi
.
postContractApplyAmountInvalid
(
res_data
).
then
(
res
=>
{
if
(
res
.
code
===
1000
)
{
handleCancel
()
// ref.current.reload();
}
}).
finally
(()
=>
{
msg
();
...
...
@@ -147,73 +140,11 @@ const BillDetails = (props: any) => {
useEffect
(()
=>
{
setTargetOffset
(
window
.
innerHeight
/
6
);
getDetail
()
let
data
=
{
current
:
1
,
pageSize
:
10
}
// fetchListData(data)
},
[]);
/* 操作人 */
const
columnsList
:
ColumnType
<
any
>
[]
=
[{
title
:
'序号'
,
dataIndex
:
'No'
,
align
:
'center'
,
render
:
(
_
,
item
,
index
)
=>
(
<
p
>
{
index
+
1
}
</
p
>
)
},
{
title
:
'操作角色'
,
dataIndex
:
'operator'
,
align
:
'center'
,
},
{
title
:
'部门'
,
dataIndex
:
'department'
,
align
:
'center'
,
},
{
title
:
'职位'
,
dataIndex
:
'jobTitle'
,
align
:
'center'
,
defaultSortOrder
:
'descend'
,
sorter
:
(
a
,
b
)
=>
a
.
age
-
b
.
age
,
},
{
title
:
'状态'
,
dataIndex
:
'statusName'
,
align
:
'center'
,
},
{
title
:
'操作'
,
dataIndex
:
'operate'
,
align
:
'center'
,
},
{
title
:
'操作时间'
,
dataIndex
:
'operateTime'
,
align
:
'center'
,
},
{
title
:
'审核意见'
,
dataIndex
:
'opinion'
,
align
:
'center'
,
},
]
// 流转记录
const
fetListData
=
(
params
:
any
)
=>
{
return
new
Promise
((
resolve
,
reject
)
=>
{
PublicApi
.
getContractApplyAmountPageRecordList
({
applyId
,
...
params
}).
then
(
res
=>
{
resolve
(
res
.
data
)
})
})
}
const
handleIsAllMemberChange
=
(
v
:
any
)
=>
{
setIsAllMember
(
v
.
target
.
value
)
}
...
...
@@ -284,8 +215,9 @@ const BillDetails = (props: any) => {
<
div
className=
'ant-card-body'
>
<
Steps
progressDot
>
{
StepList
.
map
((
item
:
any
)
=>
(
StepList
.
map
((
item
:
any
,
index
:
number
)
=>
(
<
Step
key=
{
`${index + 1}`
}
title=
{
item
.
taskName
}
description=
{
item
.
roleName
}
status=
{
item
.
isExecute
?
'finish'
:
'wait'
}
...
...
@@ -296,43 +228,7 @@ const BillDetails = (props: any) => {
</
div
>
</
div
>
{
/* 基本信息 */
}
<
div
id=
'process'
className=
'ant-card ant-card-bordered'
>
<
div
className=
'ant-card-head'
>
<
div
className=
'ant-card-head-wrapper'
>
<
div
className=
'ant-card-head-wrapper'
>
基本信息
</
div
>
</
div
>
</
div
>
<
div
className=
'ant-card-body'
>
<
Row
gutter=
{
[
8
,
8
]
}
>
<
Col
span=
{
8
}
>
{
basicInfo
.
col1
.
map
((
item
:
any
,
index
:
number
)
=>
(
<
div
className=
{
style
.
list
}
key=
{
`col1_${index + 1}`
}
>
<
h5
className=
{
style
.
listLable
}
>
{
item
.
label
}
:
</
h5
>
<
h5
className=
{
style
.
listContent
}
>
{
item
.
extra
}
</
h5
>
</
div
>
))
}
</
Col
>
<
Col
span=
{
8
}
>
{
basicInfo
.
col2
.
map
((
item
:
any
,
index
:
number
)
=>
(
<
div
className=
{
style
.
list
}
key=
{
`col2_${index + 1}`
}
>
<
h5
className=
{
style
.
listLable
}
>
{
item
.
label
}
:
</
h5
>
<
h5
className=
{
style
.
listContent
}
>
{
item
.
extra
}
</
h5
>
</
div
>
))
}
</
Col
>
<
Col
span=
{
8
}
>
{
basicInfo
.
col3
.
map
((
item
:
any
,
index
:
number
)
=>
(
<
div
className=
{
style
.
list
}
key=
{
`col3_${index + 1}`
}
>
<
h5
className=
{
style
.
listLable
}
>
{
item
.
label
}
:
</
h5
>
<
h5
className=
{
style
.
listContent
}
>
{
item
.
extra
}
</
h5
>
</
div
>
))
}
</
Col
>
</
Row
>
</
div
>
</
div
>
<
Basic
basicInfo=
{
basicInfo
}
/>
{
/* 采购材料 */
}
<
div
id=
'materials'
className=
'ant-card ant-card-bordered'
>
<
div
className=
'ant-card-head'
>
...
...
@@ -344,49 +240,9 @@ const BillDetails = (props: any) => {
</
div
>
<
Materials
applyId=
{
applyId
}
type=
{
type
}
/>
</
div
>
{
/* 流转记录 */
}
<
div
id=
'record'
className=
'ant-card ant-card-bordered'
>
<
div
className=
'ant-card-head'
>
<
div
className=
'ant-card-head-wrapper'
>
<
div
className=
'ant-card-head-wrapper'
>
流转记录
</
div
>
<
div
className=
'ant-card-extra'
>
<
Radio
.
Group
defaultValue=
"a"
>
<
Radio
.
Button
value=
"a"
>
内部流转
</
Radio
.
Button
>
</
Radio
.
Group
>
</
div
>
</
div
>
</
div
>
<
div
className=
'ant-card-body'
>
<
StandardTable
tableProps=
{
{
rowKey
:
'id'
,
}
}
columns=
{
columnsList
}
currentRef=
{
ref
}
fetchTableData=
{
(
params
:
any
)
=>
fetListData
(
params
)
}
formilyProps=
{
{
ctx
:
{
inline
:
false
,
effects
:
(
$
,
actions
)
=>
{
useStateFilterSearchLinkageEffect
(
$
,
actions
,
'orderNo'
,
FORM_FILTER_PATH
,
);
},
components
:
{
DateRangePickerUnix
,
Submit
}
}
}
}
/>
</
div
>
</
div
>
<
ColumnsList
applyId=
{
applyId
}
/>
</
div
>
<
Modal
title=
"单据作废"
visible=
{
isModalVisible
}
onCancel=
{
handleCancel
}
onOk=
{
oninvalid
}
>
<
Radio
.
Group
onChange=
{
handleIsAllMemberChange
}
defaultValue=
{
isAllMember
}
value=
{
isAllMember
}
>
...
...
src/pages/contract/funds/secondpayment/index.tsx
View file @
f45aad40
...
...
@@ -47,13 +47,11 @@ const Secondpayment: React.FC<{}> = () => {
},
{
title
:
'收款方'
,
dataIndex
:
'payeeMemberName'
,
},
{
title
:
'合同编号'
,
dataIndex
:
'contractNo'
,
render
:
(
text
:
any
,
record
:
any
)
=>
<
EyePreview
// type="button"
url=
{
`/memberCenter/contract/manage/QueryList/QueryListdetails?contractId=${record.contractId}`
}
>
{
text
}
...
...
@@ -179,8 +177,6 @@ const Secondpayment: React.FC<{}> = () => {
type=
"ToBeExamineTwo"
/>
</
PageHeaderWrapper
>
)
}
export
default
Secondpayment
src/pages/contract/funds/submitpayment/index.tsx
View file @
f45aad40
import
React
,
{
useState
,
useRef
,
ReactNode
}
from
'react'
import
React
,
{
useState
,
useRef
}
from
'react'
import
{
PageHeaderWrapper
}
from
'@ant-design/pro-layout'
;
import
{
Card
,
message
}
from
'antd'
;
import
{
SchemaBli
}
from
'../schema'
;
...
...
@@ -22,8 +22,6 @@ const Submitpayment: React.FC<{}> = () => {
const
[
applyId
,
setapplyId
]
=
useState
(
''
);
const
[
selectedRowKeys
,
setSelectedRowKeys
]
=
useState
<
Array
<
string
>>
([])
const
[
selectRow
,
setSelectRow
]
=
useState
<
any
[]
>
([])
// 模态框选择的行数据
//表头
const
columns
:
ColumnType
<
any
>
[]
=
[{
title
:
'请款单号/摘要'
,
dataIndex
:
'applyNo'
,
...
...
@@ -81,7 +79,6 @@ const Submitpayment: React.FC<{}> = () => {
},
{
title
:
'操作'
,
dataIndex
:
'action'
,
render
:
(
text
:
any
,
record
:
any
)
=>
{
return
(
<>
...
...
@@ -97,7 +94,6 @@ const Submitpayment: React.FC<{}> = () => {
duration
:
0
,
});
PublicApi
.
postContractApplyAmountSubmit
({
applyId
}).
then
(
res
=>
{
console
.
log
(
res
);
if
(
res
.
code
===
1000
)
{
getfetchData
({
ExamineFlag
:
false
,
...
...
@@ -123,10 +119,8 @@ const Submitpayment: React.FC<{}> = () => {
})
}
/* 提交审核的回调 */
const
getfetchData
=
(
data
)
=>
{
console
.
log
(
data
)
setExamineFlag
(
data
.
ExamineFlag
)
if
(
data
.
code
===
1000
)
{
ref
.
current
.
reload
()
...
...
@@ -191,7 +185,6 @@ const Submitpayment: React.FC<{}> = () => {
type=
"PageToBeSubmit"
/>
</
PageHeaderWrapper
>
)
}
...
...
src/pages/contract/manage/add/addList.tsx
View file @
f45aad40
...
...
@@ -83,11 +83,14 @@ const addList = () => {
]
return
(
<
div
>
<
EyePreview
url=
{
`/memberCenter/contract/manage/QueryList/QueryListdetails`
}
>
{
text
}
</
EyePreview
>
{
text
&&
<
EyePreview
url=
{
`/memberCenter/contract/manage/QueryList/QueryListdetails`
}
>
{
text
}
</
EyePreview
>
}
<
p
>
{
sourceTypeList
[
record
.
sourceType
]
}
</
p
>
</
div
>
)
...
...
src/pages/contract/manage/add/components/FormList.tsx
View file @
f45aad40
This diff is collapsed.
Click to expand it.
src/pages/contract/manage/examine/index.tsx
View file @
f45aad40
...
...
@@ -83,12 +83,16 @@ const Examine = () => {
]
return
(
<
div
>
<
EyePreview
type=
{
record
.
sourceId
?
'link'
:
'button'
}
url=
{
`/memberCenter/procurementAbility/offter/view?id${record.sourceId}&number${record.sourceNo}`
}
>
{
text
}
</
EyePreview
>
{
text
&&
<
EyePreview
type=
{
record
.
sourceId
?
'link'
:
'button'
}
url=
{
`/memberCenter/procurementAbility/offter/view?id${record.sourceId}&number${record.sourceNo}`
}
>
{
text
}
</
EyePreview
>
}
<
p
>
{
sourceTypeList
[
record
.
sourceType
]
}
</
p
>
</
div
>
)
...
...
src/pages/contract/manage/levelexamine/index.tsx
View file @
f45aad40
...
...
@@ -84,11 +84,14 @@ const Levelexamine = () => {
]
return
(
<
div
>
<
EyePreview
type=
"button"
>
{
text
}
</
EyePreview
>
{
text
&&
<
EyePreview
type=
"button"
>
{
text
}
</
EyePreview
>
}
<
p
>
{
sourceTypeList
[
record
.
sourceType
]
}
</
p
>
</
div
>
)
...
...
src/pages/contract/manage/secondaryexamine/index.tsx
View file @
f45aad40
...
...
@@ -78,11 +78,15 @@ const Secondaryexamine = () => {
]
return
(
<
div
>
<
EyePreview
url=
{
`/memberCenter/contract/manage/QueryList/QueryListdetails`
}
>
{
text
}
</
EyePreview
>
{
text
&&
<
EyePreview
type=
"button"
// url=
{`/
memberCenter
/
contract
/
manage
/
QueryList
/
QueryListdetails
`}
>
{
text
}
</
EyePreview
>
}
<
p
>
{
sourceTypeList
[
record
.
sourceType
]
}
</
p
>
</
div
>
)
...
...
src/pages/contract/manage/signacontract/index.tsx
View file @
f45aad40
...
...
@@ -83,11 +83,14 @@ const Signacontract = () => {
]
return
(
<
div
>
<
EyePreview
url=
{
`/memberCenter/contract/manage/QueryList/QueryListdetails`
}
>
{
text
}
</
EyePreview
>
{
text
&&
<
EyePreview
url=
{
`/memberCenter/contract/manage/QueryList/QueryListdetails`
}
>
{
text
}
</
EyePreview
>
}
<
p
>
{
sourceTypeList
[
record
.
sourceType
]
}
</
p
>
</
div
>
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment