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
陈智峰
jinfa-platform
Commits
0cfef8dc
Commit
0cfef8dc
authored
Oct 22, 2020
by
Bill
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
对接发票接口
parent
271b7458
Show whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
490 additions
and
356 deletions
+490
-356
index.tsx
...pages/balance/accountsReceivable/settlementList/index.tsx
+99
-81
logisticsDetail.tsx
...nce/accountsReceivable/settlementList/logisticsDetail.tsx
+18
-93
productNoticeSettlementDetail.tsx
...ceivable/settlementList/productNoticeSettlementDetail.tsx
+16
-93
index.tsx
...alance/accountsReceivable/settlementList/schema/index.tsx
+152
-0
index.tsx
src/pages/balance/components/SchemaRadio/index.tsx
+11
-1
index.less
src/pages/balance/settleRules/corporateAccount/index.less
+11
-3
index.tsx
src/pages/balance/settleRules/corporateAccount/index.tsx
+50
-13
index.tsx
src/pages/balance/settleRules/receipt/index.tsx
+65
-24
info.tsx
src/pages/balance/settleRules/receipt/info.tsx
+68
-48
No files found.
src/pages/balance/accountsReceivable/settlementList/index.tsx
View file @
0cfef8dc
...
...
@@ -6,98 +6,115 @@
import
React
,
{
useRef
}
from
'react'
;
import
{
PageHeaderWrapper
}
from
'@ant-design/pro-layout'
import
{
Card
,
Button
}
from
'antd'
;
import
{
Card
,
Button
,
Modal
,
DatePicker
,
Tag
,
Space
}
from
'antd'
;
import
NiceForm
from
'@/components/NiceForm'
;
import
{
FORM_FILTER_PATH
}
from
'@/formSchema/const'
;
import
{
ISchema
,
createFormActions
}
from
'@formily/antd'
;
import
{
StandardTable
}
from
'god'
;
import
{
useStateFilterSearchLinkageEffect
}
from
'@/formSchema/effects/useFilterSearch'
;
import
{
useAsyncInitSelect
}
from
'@/formSchema/effects/useAsyncInitSelect'
;
import
{
schema
}
from
'./schema'
;
import
ModalContainer
from
'../../components/ModalContainer'
;
import
ConfirmAccount
from
'../../components/ConfirmAccount'
;
import
Voucher
from
'../../components/Voucher'
;
const
formActions
=
createFormActions
();
const
schema
:
ISchema
=
{
type
:
'object'
,
properties
:
{
megaLayout
:
{
type
:
'object'
,
'x-component'
:
'mega-layout'
,
properties
:
{
name
:
{
type
:
'string'
,
'x-component'
:
'Search'
,
'x-component-props'
:
{
placeholder
:
'搜索'
,
align
:
'flex-left'
,
tip
:
'输入通知单号、通知单摘要进行搜索'
,
},
},
[
FORM_FILTER_PATH
]:
{
type
:
'object'
,
'x-component'
:
'mega-layout'
,
'x-component-props'
:
{
grid
:
true
,
full
:
true
,
autoRow
:
true
,
columns
:
6
,
},
properties
:
{
name
:
{
type
:
'string'
,
default
:
undefined
,
enum
:
[],
'x-component-props'
:
{
placeholder
:
'加工企业名称(全部)'
,
allowClear
:
true
,
},
},
time
:
{
type
:
'string'
,
default
:
undefined
,
enum
:
[],
'x-component-props'
:
{
placeholder
:
'单据时间(全部)'
,
allowClear
:
true
,
},
},
outerStatus
:
{
type
:
'string'
,
default
:
undefined
,
enum
:
[],
'x-component-props'
:
{
placeholder
:
'外部状态(全部)'
,
allowClear
:
true
,
},
},
innerStatus
:
{
type
:
'string'
,
default
:
undefined
,
enum
:
[],
'x-component-props'
:
{
placeholder
:
'内部状态(全部)'
,
allowClear
:
true
,
},
},
submit
:
{
'x-component'
:
'Submit'
,
'x-mega-props'
:
{
span
:
1
,
},
'x-component-props'
:
{
children
:
'查询'
,
},
},
},
},
},
},
},
};
const
formActions
=
createFormActions
();
const
SettlementList
=
()
=>
{
const
ref
=
useRef
<
any
>
({})
const
fetchListData
=
async
(
params
)
=>
{
return
{}
return
{
data
:
[{
id
:
1
}],
totalCount
:
1
}
}
const
columns
=
[
{
title
:
'结算单号'
,
dataIndex
:
'num'
},
{
title
:
'结算日期'
,
dataIndex
:
'num'
},
{
title
:
'结算方式'
,
dataIndex
:
'num'
},
{
title
:
'总单数'
,
dataIndex
:
'num'
},
{
title
:
'代收金额'
,
dataIndex
:
'num'
},
{
title
:
'佣金'
,
dataIndex
:
'num'
},
{
title
:
'结算金额'
,
dataIndex
:
'num'
},
{
title
:
'结算日期'
,
dataIndex
:
'num'
},
{
title
:
'支付方式'
,
dataIndex
:
'payMethod'
},
{
title
:
'结算状态'
,
dataIndex
:
'status'
,
render
:
(
text
,
record
)
=>
{
return
(
<
Tag
>
待对账
</
Tag
>
)
}
},
{
title
:
'操作'
,
render
:
(
text
,
record
)
=>
{
return
(
<>
<
ModalContainer
>
{
({
visible
,
show
,
cancel
})
=>
{
return
(
<>
<
Modal
width=
{
400
}
title=
"确认对账完成"
visible=
{
visible
}
onCancel=
{
cancel
}
onOk=
{
()
=>
handleConfirm
(
cancel
)
}
>
<
ConfirmAccount
/>
</
Modal
>
<
div
onClick=
{
show
}
>
确认对账完成
</
div
>
</>
)
}
}
</
ModalContainer
>
<
ModalContainer
>
{
({
visible
,
show
,
cancel
})
=>
{
return
(
<>
<
Modal
width=
{
548
}
title=
"查看付款凭证"
onCancel=
{
cancel
}
visible=
{
visible
}
footer=
{
null
}
>
<
Voucher
/>
</
Modal
>
<
div
onClick=
{
show
}
>
查看付款凭证
</
div
>
</>
)
}
}
</
ModalContainer
>
<
ModalContainer
>
{
({
visible
,
show
,
cancel
})
=>
{
return
(
<>
<
Modal
width=
{
548
}
title=
"确认付款凭证"
onCancel=
{
cancel
}
visible=
{
visible
}
footer=
{
(
<
Space
>
<
Button
>
取消
</
Button
>
<
Button
>
确认未到款
</
Button
>
<
Button
>
确认到款
</
Button
>
</
Space
>
)
}
>
<
Voucher
/>
</
Modal
>
<
div
onClick=
{
show
}
>
确认付款凭证
</
div
>
</>
)
}
}
</
ModalContainer
>
</>
)
}
}
]
/**
* 确认对账
* @param cancel 关闭回调函数
*/
const
handleConfirm
=
(
cancel
)
=>
{
console
.
log
(
123
)
cancel
();
}
return
(
<
PageHeaderWrapper
>
...
...
@@ -106,11 +123,12 @@ const SettlementList = () => {
tableProps=
{
{
rowKey
:
'id'
,
}
}
columns=
{
[]
}
columns=
{
columns
}
currentRef=
{
ref
}
fetchTableData=
{
(
params
:
any
)
=>
fetchListData
(
params
)
}
controlRender=
{
<
NiceForm
components=
{
{
DatePicker
}
}
actions=
{
formActions
}
expressionScope=
{
{}
}
effects=
{
(
$
,
actions
)
=>
{
...
...
src/pages/balance/accountsReceivable/settlementList/logisticsDetail.tsx
View file @
0cfef8dc
...
...
@@ -15,99 +15,23 @@ import { ISchema, createFormActions } from '@formily/antd';
import
{
StandardTable
}
from
'god'
;
import
{
useStateFilterSearchLinkageEffect
}
from
'@/formSchema/effects/useFilterSearch'
;
import
{
useAsyncInitSelect
}
from
'@/formSchema/effects/useAsyncInitSelect'
;
import
{
detailSchema
}
from
'./schema'
const
formActions
=
createFormActions
();
const
schema
:
ISchema
=
{
type
:
'object'
,
properties
:
{
megaLayout
:
{
type
:
'object'
,
'x-component'
:
'mega-layout'
,
properties
:
{
topLayout
:
{
type
:
'object'
,
'x-component'
:
'Mega-Layout'
,
'x-component-props'
:
{
grid
:
true
,
},
properties
:
{
ctl
:
{
type
:
'object'
,
'x-component'
:
'Children'
,
'x-component-props'
:
{
children
:
'{{exportBtn}}'
,
},
},
search
:
{
type
:
'string'
,
'x-component'
:
'Search'
,
'x-component-props'
:
{
placeholder
:
'搜索'
,
},
},
},
},
[
FORM_FILTER_PATH
]:
{
type
:
'object'
,
'x-component'
:
'flex-layout'
,
'x-component-props'
:
{
colStyle
:
{
marginLeft
:
20
,
},
},
properties
:
{
name
:
{
type
:
'string'
,
default
:
undefined
,
enum
:
[],
'x-component-props'
:
{
placeholder
:
'加工企业名称(全部)'
,
allowClear
:
true
,
},
},
time
:
{
type
:
'string'
,
default
:
undefined
,
enum
:
[],
'x-component-props'
:
{
placeholder
:
'单据时间(全部)'
,
allowClear
:
true
,
},
},
outerStatus
:
{
type
:
'string'
,
default
:
undefined
,
enum
:
[],
'x-component-props'
:
{
placeholder
:
'外部状态(全部)'
,
allowClear
:
true
,
},
},
innerStatus
:
{
type
:
'string'
,
default
:
undefined
,
enum
:
[],
'x-component-props'
:
{
placeholder
:
'内部状态(全部)'
,
allowClear
:
true
,
},
},
submit
:
{
'x-component'
:
'Submit'
,
'x-mega-props'
:
{
span
:
1
,
},
'x-component-props'
:
{
children
:
'查询'
,
},
},
},
},
},
},
},
};
const
columns
=
[
{
title
:
'单据号'
,
dataIndex
:
'no'
},
{
title
:
'单据摘要'
,
dataIndex
:
'desc'
},
{
title
:
'单据类型'
,
dataIndex
:
'type'
},
{
title
:
'单据时间'
,
dataIndex
:
'time'
},
{
title
:
'总箱数'
,
dataIndex
:
'box'
},
{
title
:
'总重量'
,
dataIndex
:
'weight'
},
{
title
:
'总体积'
,
dataIndex
:
'volumn'
},
{
title
:
'接单金额'
,
dataIndex
:
'price'
},
{
title
:
'支付时间'
,
dataIndex
:
'payTime'
},
{
title
:
'结算金额'
,
dataIndex
:
'payPrice'
},
]
const
logisticsDetail
:
React
.
FC
=
()
=>
{
const
ref
=
useRef
<
any
>
({});
...
...
@@ -125,7 +49,8 @@ const logisticsDetail: React.FC = () => {
title=
{
<
AvatarWrap
info=
{
{
name
:
"通知单号:"
aloneTxt
:
'单'
,
name
:
"结算单号:"
}
}
extra=
{
(
<
span
style=
{
{
fontSize
:
12
,
fontWeight
:
'normal'
}
}
>
{
"TPTY12"
}
</
span
>
...
...
@@ -155,7 +80,7 @@ const logisticsDetail: React.FC = () => {
tableProps=
{
{
rowKey
:
'id'
,
}
}
columns=
{
[]
}
columns=
{
columns
}
currentRef=
{
ref
}
fetchTableData=
{
(
params
:
any
)
=>
fetchListData
(
params
)
}
controlRender=
{
...
...
@@ -175,7 +100,7 @@ const logisticsDetail: React.FC = () => {
// fetchSelectOptions,
// );
}
}
schema=
{
s
chema
}
schema=
{
detailS
chema
}
onSubmit=
{
values
=>
ref
.
current
.
reload
(
values
)
}
/>
}
...
...
src/pages/balance/accountsReceivable/settlementList/productNoticeSettlementDetail.tsx
View file @
0cfef8dc
...
...
@@ -15,99 +15,22 @@ import { ISchema, createFormActions } from '@formily/antd';
import
{
StandardTable
}
from
'god'
;
import
{
useStateFilterSearchLinkageEffect
}
from
'@/formSchema/effects/useFilterSearch'
;
import
{
useAsyncInitSelect
}
from
'@/formSchema/effects/useAsyncInitSelect'
;
import
{
detailSchema
}
from
'./schema'
const
formActions
=
createFormActions
();
const
columns
=
[
{
title
:
'单据号'
,
dataIndex
:
'no'
},
{
title
:
'单据摘要'
,
dataIndex
:
'desc'
},
{
title
:
'单据类型'
,
dataIndex
:
'type'
},
{
title
:
'单据时间'
,
dataIndex
:
'time'
},
{
title
:
'单据总额'
,
dataIndex
:
'total'
},
{
title
:
'收货批次'
,
dataIndex
:
'batch'
},
{
title
:
'收货时间'
,
dataIndex
:
'receiveTime'
},
{
title
:
'收货数量'
,
dataIndex
:
'receiveCount'
},
{
title
:
'加工单价'
,
dataIndex
:
'unitPrice'
},
{
title
:
'结算金额'
,
dataIndex
:
'payPrice'
},
]
const
schema
:
ISchema
=
{
type
:
'object'
,
properties
:
{
megaLayout
:
{
type
:
'object'
,
'x-component'
:
'mega-layout'
,
properties
:
{
topLayout
:
{
type
:
'object'
,
'x-component'
:
'Mega-Layout'
,
'x-component-props'
:
{
grid
:
true
,
},
properties
:
{
ctl
:
{
type
:
'object'
,
'x-component'
:
'Children'
,
'x-component-props'
:
{
children
:
'{{exportBtn}}'
,
},
},
search
:
{
type
:
'string'
,
'x-component'
:
'Search'
,
'x-component-props'
:
{
placeholder
:
'搜索'
,
},
},
},
},
[
FORM_FILTER_PATH
]:
{
type
:
'object'
,
'x-component'
:
'flex-layout'
,
'x-component-props'
:
{
colStyle
:
{
marginLeft
:
20
,
},
},
properties
:
{
name
:
{
type
:
'string'
,
default
:
undefined
,
enum
:
[],
'x-component-props'
:
{
placeholder
:
'加工企业名称(全部)'
,
allowClear
:
true
,
},
},
time
:
{
type
:
'string'
,
default
:
undefined
,
enum
:
[],
'x-component-props'
:
{
placeholder
:
'单据时间(全部)'
,
allowClear
:
true
,
},
},
outerStatus
:
{
type
:
'string'
,
default
:
undefined
,
enum
:
[],
'x-component-props'
:
{
placeholder
:
'外部状态(全部)'
,
allowClear
:
true
,
},
},
innerStatus
:
{
type
:
'string'
,
default
:
undefined
,
enum
:
[],
'x-component-props'
:
{
placeholder
:
'内部状态(全部)'
,
allowClear
:
true
,
},
},
submit
:
{
'x-component'
:
'Submit'
,
'x-mega-props'
:
{
span
:
1
,
},
'x-component-props'
:
{
children
:
'查询'
,
},
},
},
},
},
},
},
};
const
ProductNoticeSettlementDetail
:
React
.
FC
=
()
=>
{
const
ref
=
useRef
<
any
>
({});
...
...
@@ -155,7 +78,7 @@ const ProductNoticeSettlementDetail: React.FC = () => {
tableProps=
{
{
rowKey
:
'id'
,
}
}
columns=
{
[]
}
columns=
{
columns
}
currentRef=
{
ref
}
fetchTableData=
{
(
params
:
any
)
=>
fetchListData
(
params
)
}
controlRender=
{
...
...
@@ -175,7 +98,7 @@ const ProductNoticeSettlementDetail: React.FC = () => {
// fetchSelectOptions,
// );
}
}
schema=
{
s
chema
}
schema=
{
detailS
chema
}
onSubmit=
{
values
=>
ref
.
current
.
reload
(
values
)
}
/>
}
...
...
src/pages/balance/accountsReceivable/settlementList/schema/index.tsx
0 → 100644
View file @
0cfef8dc
/*
* @Author: Bill
* @Date: 2020-10-22 09:52:10
* @Description: 应收账款结算 schema集合
*/
import
{
FORM_FILTER_PATH
}
from
'@/formSchema/const'
;
import
{
ISchema
,
createFormActions
}
from
'@formily/antd'
;
/**
* 应收账款 index.tsx 列表页schema
*/
export
const
schema
:
ISchema
=
{
type
:
'object'
,
properties
:
{
megaLayout
:
{
type
:
'object'
,
'x-component'
:
'mega-layout'
,
properties
:
{
name
:
{
type
:
'string'
,
'x-component'
:
'Search'
,
'x-component-props'
:
{
placeholder
:
'搜索'
,
align
:
'flex-left'
,
tip
:
'输入通知单号、通知单摘要进行搜索'
,
},
},
[
FORM_FILTER_PATH
]:
{
type
:
'object'
,
'x-component'
:
'mega-layout'
,
'x-component-props'
:
{
grid
:
true
,
full
:
true
,
autoRow
:
true
,
columns
:
6
,
},
properties
:
{
startTime
:
{
type
:
'string'
,
'x-component'
:
'DatePicker'
,
'x-component-props'
:
{
allowClear
:
true
}
},
endTime
:
{
type
:
'string'
,
'x-component'
:
'DatePicker'
,
'x-component-props'
:
{
allowClear
:
true
}
},
status
:
{
type
:
'string'
,
enum
:
[],
'x-component-props'
:
{
placeholder
:
'结算状态(全部)'
,
allowClear
:
true
,
},
},
// submit: {
// 'x-component': 'Submit',
// 'x-mega-props': {
// span: 1,
// },
// 'x-component-props': {
// children: '查询',
// },
// },
},
},
},
},
},
};
/**
* 应收账款管理--物流单结算明细详情, 生产通知单结算明细
*/
export
const
detailSchema
:
ISchema
=
{
type
:
'object'
,
properties
:
{
megaLayout
:
{
type
:
'object'
,
'x-component'
:
'mega-layout'
,
properties
:
{
topLayout
:
{
type
:
'object'
,
'x-component'
:
'Mega-Layout'
,
'x-component-props'
:
{
grid
:
true
,
},
properties
:
{
ctl
:
{
type
:
'object'
,
'x-component'
:
'Children'
,
'x-component-props'
:
{
children
:
'{{exportBtn}}'
,
},
},
search
:
{
type
:
'string'
,
'x-component'
:
'Search'
,
'x-component-props'
:
{
placeholder
:
'搜索'
,
},
},
},
},
[
FORM_FILTER_PATH
]:
{
type
:
'object'
,
'x-component'
:
'flex-layout'
,
'x-component-props'
:
{
colStyle
:
{
marginLeft
:
20
,
},
},
properties
:
{
orderTime
:
{
type
:
'string'
,
enum
:
[],
'x-component-props'
:
{
placeholder
:
'下单时间(全部)'
,
allowClear
:
true
,
},
},
payTime
:
{
type
:
'string'
,
enum
:
[],
'x-component-props'
:
{
placeholder
:
'支付时间(全部)'
,
allowClear
:
true
,
},
},
// submit: {
// 'x-component': 'Submit',
// 'x-mega-props': {
// span: 1,
// },
// 'x-component-props': {
// children: '查询',
// },
// },
},
},
},
},
},
};
\ No newline at end of file
src/pages/balance/components/SchemaRadio/index.tsx
View file @
0cfef8dc
...
...
@@ -4,7 +4,7 @@
* @Description: switch 组件
*/
import
React
from
'react'
;
import
React
,
{
useEffect
}
from
'react'
;
import
{
Radio
}
from
'antd'
;
const
SchemaRadio
=
(
props
)
=>
{
...
...
@@ -15,6 +15,16 @@ const SchemaRadio = (props) => {
props
.
mutators
.
change
(
checked
)
}
useEffect
(()
=>
{
const
componentProps
=
props
.
props
[
'x-component-props'
]
||
{};
const
defaultValue
=
componentProps
.
default
||
{};
if
(
typeof
props
.
initialValue
==
'undefined'
)
{
props
.
mutators
.
change
(
defaultValue
)
}
else
{
props
.
mutators
.
change
(
props
.
initialValue
)
}
},
[
props
.
initialValue
])
return
(
<
Radio
.
Group
onChange=
{
handleChange
}
value=
{
props
.
value
||
componentProps
.
default
}
>
{
...
...
src/pages/balance/settleRules/corporateAccount/index.less
View file @
0cfef8dc
...
...
@@ -3,14 +3,22 @@
@margin-right: 16px;
@color: #909399;
.container {
background: #fff;
margin-bottom: @margin-bottom;
padding: @margin-bottom;
.error {
margin: 0 66px;
color: #ff4d4f;
}
}
.item {
display: flex;
flex-direction: row;
align-items: center;
background-color: #fff;
font-size: @font-size;
padding: @margin-bottom;
margin-bottom: @margin-bottom;
.image {
width: 48px;
...
...
src/pages/balance/settleRules/corporateAccount/index.tsx
View file @
0cfef8dc
...
...
@@ -6,7 +6,9 @@ import { Button, Input, Space } from 'antd';
import
bank
from
'@/assets/imgs/bank.png'
;
import
bank_account
from
'@/assets/imgs/bank_account.png'
;
import
company
from
'@/assets/imgs/company.png'
;
import
config
from
'config/config'
;
import
{
PublicApi
}
from
'@/services/api'
;
import
{
getAuth
}
from
'@/utils/auth'
;
import
{
Prompt
}
from
'umi'
interface
Config
{
name
:
string
,
...
...
@@ -16,64 +18,84 @@ interface Config {
canEdit
:
boolean
,
cacheValue
:
string
,
changeEdit
?:
any
,
pattern
?:
any
,
message
?:
string
}
const
CONFIGS
:
Config
[]
=
[
{
name
:
'账号名称'
,
image
:
company
,
value
:
'
广州市数商云网络科技有限公司
'
,
cacheValue
:
'
广州市数商云网络科技有限公司
'
,
value
:
''
,
cacheValue
:
''
,
isEdit
:
false
,
canEdit
:
false
},
{
name
:
'银行账号'
,
image
:
bank_account
,
value
:
'
6214 7812 3456 7891 1234
'
,
cacheValue
:
'
6214 7812 3456 7891 1234
'
,
value
:
''
,
cacheValue
:
''
,
isEdit
:
false
,
canEdit
:
true
canEdit
:
true
,
pattern
:
/^
([
1-9
]{1})(\d{14}
|
\d{18})
$/
,
message
:
'请输入正确的银行账号'
},
{
name
:
'开户行'
,
image
:
bank
,
value
:
'
中国建设银行广州市分行营业部
'
,
cacheValue
:
'
中国建设银行广州市分行营业部
'
,
value
:
''
,
cacheValue
:
''
,
isEdit
:
false
,
canEdit
:
true
canEdit
:
true
,
pattern
:
/^
[\u
4e00-
\u
9fa5
]{0,50}
|
[
0-9a-zA-Z
]{0,100}
$/
,
message
:
'最多50个汉字'
},
]
const
ItemRender
:
React
.
FC
<
Config
>
=
(
props
)
=>
{
const
{
isEdit
,
name
,
canEdit
,
value
,
image
,
changeEdit
}
=
props
;
const
{
isEdit
,
name
,
canEdit
,
value
,
image
,
changeEdit
,
pattern
,
message
}
=
props
;
const
[
validError
,
setValidError
]
=
useState
(
false
);
// const [inputValue, setInputValue] = useState(value);
const
handleClick
=
(
name
:
string
)
=>
{
changeEdit
(
name
,
{
isEdit
:
true
},
'change'
)
}
// 内容修改
const
handleChange
=
(
value
:
string
,
name
:
string
)
=>
{
if
(
!
pattern
.
test
(
value
))
{
setValidError
(
true
)
}
else
{
setValidError
(
false
)
}
changeEdit
(
name
,
{
value
:
value
},
'change'
)
}
// 取消按钮
const
handleCancel
=
(
name
:
string
)
=>
{
setValidError
(
false
);
changeEdit
(
name
,
{
isEdit
:
false
},
'cancel'
)
}
// 确定提交
const
handleConfirm
=
(
name
:
string
)
=>
{
if
(
validError
)
{
return
}
changeEdit
(
name
,
{
isEdit
:
false
},
'confirm'
);
}
return
(
<
div
className=
{
styles
.
container
}
>
<
div
className=
{
styles
.
item
}
>
<
div
className=
{
styles
.
image
}
>
<
img
src=
{
image
}
className=
{
styles
.
img
}
/>
</
div
>
<
div
className=
{
styles
.
itemName
}
>
{
name
}
</
div
>
<
div
className=
{
styles
.
itemValue
}
>
{
isEdit
?
<
Input
value=
{
value
}
onChange=
{
(
e
)
=>
handleChange
(
e
.
target
.
value
,
name
)
}
/>
:
value
}
{
isEdit
?
<
Input
value=
{
value
}
style=
{
{
width
:
'300px'
}
}
onChange=
{
(
e
)
=>
handleChange
(
e
.
target
.
value
,
name
)
}
/>
:
value
}
</
div
>
{
canEdit
?
!
isEdit
?
<
div
className=
{
styles
.
edit
}
onClick=
{
()
=>
handleClick
(
name
)
}
>
?
<
div
className=
{
styles
.
edit
}
style=
{
{
width
:
'300px'
}
}
onClick=
{
()
=>
handleClick
(
name
)
}
>
<
FormOutlined
/>
</
div
>
:
<
div
>
...
...
@@ -85,27 +107,34 @@ const ItemRender: React.FC<Config> = (props) => {
:
null
}
</
div
>
<
div
className=
{
styles
.
error
}
>
{
validError
?
message
:
''
}
</
div
>
</
div
>
)
}
const
CorporateAccount
=
()
=>
{
const
[
configs
,
setConfigs
]
=
useState
<
Config
[]
>
(
CONFIGS
);
const
[
unsaved
,
setUnsaved
]
=
useState
<
Boolean
>
(
false
)
const
changeEdit
=
(
name
:
string
,
res
:
any
,
type
:
string
)
=>
{
let
temp
=
[...
configs
];
const
index
=
temp
.
findIndex
((
row
)
=>
row
.
name
===
name
);
const
target
=
temp
[
index
];
if
(
type
==
'change'
)
{
setUnsaved
(
true
);
temp
[
index
]
=
{
...
target
,
...
res
,
}
}
else
if
(
type
==
'cancel'
)
{
setUnsaved
(
false
);
temp
[
index
]
=
{
...
target
,
...
res
,
value
:
type
==
'cancel'
?
target
.
cacheValue
:
target
.
value
,
}
}
else
if
(
type
==
'confirm'
)
{
setUnsaved
(
false
);
temp
[
index
]
=
{
...
target
,
...
res
,
...
...
@@ -117,18 +146,26 @@ const CorporateAccount = () => {
}
useEffect
(()
=>
{
const
{
memberId
}
=
getAuth
()
||
{};
// 进行基础赋值, fetchData
async
function
fetchData
()
{
const
res
=
await
PublicApi
.
getSettleAccountsCorporateAccountConfig
({
memberId
:
memberId
});
console
.
log
(
res
);
}
fetchData
();
},
[])
return
(
<
PageHeaderWrapper
>
{
configs
.
map
((
item
:
Config
,
key
)
=>
{
return
(
<
ItemRender
key=
{
item
.
name
}
{
...
item
}
changeEdit=
{
changeEdit
}
/>
<
ItemRender
key=
{
item
.
name
}
{
...
item
}
changeEdit=
{
changeEdit
}
/>
)
})
}
<
Prompt
when=
{
unsaved
}
message=
"信息还未保存,确定离开吗?"
></
Prompt
>
</
PageHeaderWrapper
>
)
}
...
...
src/pages/balance/settleRules/receipt/index.tsx
View file @
0cfef8dc
...
...
@@ -6,64 +6,98 @@
import
React
,
{
useState
,
useEffect
}
from
'react'
;
import
{
PageHeaderWrapper
}
from
'@ant-design/pro-layout'
;
import
{
Row
,
Col
,
Switch
}
from
'antd'
;
import
{
Row
,
Col
,
Switch
,
Popconfirm
}
from
'antd'
;
import
{
FormOutlined
,
DeleteOutlined
,
PlusOutlined
}
from
'@ant-design/icons'
import
styles
from
'./index.less'
;
import
{
history
,
Link
}
from
'umi'
;
import
{
PublicApi
}
from
'@/services/api'
interface
iProps
{
}
enum
Kind
{
common
=
1
,
// 增值税普通发票(默认
special
=
2
// 增值税专用发票
}
enum
ItemIpropType
{
business
=
1
,
//企业
person
=
2
// 个人
}
interface
ItemIprops
{
onRemove
:
any
onRemove
:
(
id
:
number
|
string
)
=>
void
,
id
:
number
,
kind
:
Kind
,
type
:
ItemIpropType
,
invoiceTitle
:
string
,
taxNo
:
string
,
bankOfDeposit
:
string
,
account
:
string
,
addres
:
string
,
tel
:
string
isDefault
:
number
}
const
ReceiptItem
:
React
.
FC
<
ItemIprops
>
=
(
props
)
=>
{
const
{
id
,
kind
,
type
,
invoiceTitle
,
taxNo
,
bankOfDeposit
,
account
,
addres
,
tel
,
isDefault
}
=
props
;
const
handleRouterPush
=
()
=>
{
history
.
push
(
'/memberCenter/balance/settleRules/receiptList/detail'
);
history
.
push
(
`/memberCenter/balance/settleRules/receiptList/detail?id=
${
id
}
`
);
}
const
handleDelete
=
(
id
)
=>
{
console
.
log
(
props
);
const
handleDelete
=
(
id
:
number
|
string
)
=>
{
props
.
onRemove
(
id
);
}
return
(
<
div
className=
{
styles
.
item
}
>
<
div
className=
{
styles
.
controller
}
>
<
div
className=
{
styles
.
edit
}
onClick=
{
handleRouterPush
}
><
FormOutlined
/></
div
>
<
div
className=
{
styles
.
remove
}
onClick=
{
()
=>
handleDelete
(
1
)
}
><
DeleteOutlined
/></
div
>
<
div
className=
{
styles
.
remove
}
>
<
Popconfirm
title=
"确定删除这条信息吗?"
onConfirm=
{
()
=>
handleDelete
(
id
)
}
okText=
"确定"
cancelText=
"取消"
>
<
DeleteOutlined
/>
</
Popconfirm
>
</
div
>
</
div
>
<
Row
className=
{
styles
.
row
}
>
<
Col
span=
{
6
}
>
发票品类
</
Col
>
<
Col
span=
{
18
}
>
增值税
</
Col
>
<
Col
span=
{
6
}
>
开具类型
</
Col
>
<
Col
span=
{
18
}
>
{
type
==
1
?
'企业'
:
'个人'
}
</
Col
>
</
Row
>
<
Row
className=
{
styles
.
row
}
>
<
Col
span=
{
6
}
>
发票种类
</
Col
>
<
Col
span=
{
18
}
>
{
kind
==
1
?
'增值税普通发票'
:
'增值税专用发票'
}
</
Col
>
</
Row
>
<
Row
className=
{
styles
.
row
}
>
<
Col
span=
{
6
}
>
发票抬头
</
Col
>
<
Col
span=
{
18
}
>
广州市数商云网络科技有限公司
</
Col
>
<
Col
span=
{
18
}
>
{
invoiceTitle
}
</
Col
>
</
Row
>
<
Row
className=
{
styles
.
row
}
>
<
Col
span=
{
6
}
>
纳税号
</
Col
>
<
Col
span=
{
18
}
>
914401050651605264E
</
Col
>
<
Col
span=
{
18
}
>
{
taxNo
}
</
Col
>
</
Row
>
<
Row
className=
{
styles
.
row
}
>
<
Col
span=
{
6
}
>
账号
</
Col
>
<
Col
span=
{
18
}
>
6214 71612 3456 71691 1234
</
Col
>
<
Col
span=
{
18
}
>
{
account
}
</
Col
>
</
Row
>
<
Row
className=
{
styles
.
row
}
>
<
Col
span=
{
6
}
>
开户行
</
Col
>
<
Col
span=
{
18
}
>
中国建设银行广州市分行营业部
</
Col
>
<
Col
span=
{
18
}
>
{
bankOfDeposit
}
</
Col
>
</
Row
>
<
Row
className=
{
styles
.
row
}
>
<
Col
span=
{
6
}
>
地址
</
Col
>
<
Col
span=
{
18
}
>
广州市海珠区新港东路234号中州中心
</
Col
>
<
Col
span=
{
18
}
>
{
addres
}
</
Col
>
</
Row
>
<
Row
className=
{
styles
.
row
}
>
<
Col
span=
{
6
}
>
电话
</
Col
>
<
Col
span=
{
18
}
>
136 7627 2729
</
Col
>
<
Col
span=
{
18
}
>
{
tel
}
</
Col
>
</
Row
>
<
Row
>
<
Col
span=
{
6
}
>
是否默认
</
Col
>
<
Col
span=
{
18
}
><
Switch
disabled
checked=
{
tru
e
}
/></
Col
>
<
Col
span=
{
18
}
><
Switch
disabled
checked=
{
isDefault
?
true
:
fals
e
}
/></
Col
>
</
Row
>
</
div
>
)
...
...
@@ -71,13 +105,15 @@ const ReceiptItem: React.FC<ItemIprops> = (props) => {
const
Receipt
:
React
.
FC
<
iProps
>
=
()
=>
{
const
[
list
,
setList
]
=
useState
([]);
const
fetchData
=
async
()
=>
{
const
{
data
}
=
await
PublicApi
.
getSettleAccountsInvoiceMessageList
();
useEffect
(()
=>
{
// fetchData
async
function
fetchData
()
{
return
data
;
}
// fetchData()
useEffect
(()
=>
{
fetchData
().
then
((
data
)
=>
{
setList
(
data
);
})
},
[])
const
handleRouterAdd
=
()
=>
{
...
...
@@ -85,18 +121,23 @@ const Receipt: React.FC<iProps> = () => {
}
// 删除发票
const
remove
=
(
id
:
number
)
=>
{
const
remove
=
async
(
id
:
number
)
=>
{
console
.
log
(
id
);
const
res
=
await
PublicApi
.
postSettleAccountsInvoiceMessageDelete
({
id
});
if
(
res
.
code
==
1000
)
{
const
newList
=
list
.
filter
((
item
)
=>
item
.
id
!==
id
);
setList
(
newList
);
}
}
return
(
<
PageHeaderWrapper
>
<
Row
gutter=
{
24
}
>
{
[
1
,]
.
map
((
item
)
=>
{
list
.
map
((
item
)
=>
{
return
(
<
Col
span=
{
8
}
key=
{
item
}
className=
{
styles
.
margin
}
>
<
ReceiptItem
onRemove=
{
remove
}
/>
<
Col
span=
{
8
}
key=
{
item
.
id
}
className=
{
styles
.
margin
}
>
<
ReceiptItem
onRemove=
{
remove
}
{
...
item
}
/>
</
Col
>
)
})
...
...
src/pages/balance/settleRules/receipt/info.tsx
View file @
0cfef8dc
...
...
@@ -11,6 +11,9 @@ import { PageHeaderWrapper } from '@ant-design/pro-layout';
import
{
Card
,
Switch
,
Button
}
from
'antd'
;
import
SchemaSwitch
from
'../../components/SchemaSwitch'
;
import
SchemaRadio
from
'../../components/SchemaRadio'
;
import
{
PublicApi
}
from
'@/services/api'
;
import
{
usePageStatus
}
from
'@/hooks/usePageStatus'
;
import
{
history
,
Prompt
}
from
'umi'
;
const
formActions
=
createFormActions
();
...
...
@@ -26,9 +29,9 @@ const schema = {
labelAlign
:
'left'
,
},
properties
:
{
consignor
:
{
type
:
{
type
:
'string'
,
title
:
'
发货人
'
,
title
:
'
开具类型
'
,
'x-component'
:
'SchemaRadio'
,
'x-component-props'
:
{
default
:
1
,
...
...
@@ -41,9 +44,9 @@ const schema = {
{
required
:
true
,
message
:
'请选择发货人'
}
]
},
type
:
{
kind
:
{
type
:
'string'
,
title
:
'发
货
种类'
,
title
:
'发
票
种类'
,
'x-component'
:
'SchemaRadio'
,
'x-component-props'
:
{
default
:
1
,
...
...
@@ -54,64 +57,55 @@ const schema = {
},
'x-rules'
:
[
{
required
:
true
,
message
:
'请选择发
货
种类'
}
{
required
:
true
,
message
:
'请选择发
票
种类'
}
]
},
invoiceTitle
:
{
type
:
'string'
,
title
:
'发票抬头'
,
'x-rules'
:
[
{
required
:
true
,
message
:
'请填写发票抬头'
}
{
required
:
true
,
message
:
'请填写发票抬头'
},
{
limitByte
:
true
,
maxByte
:
40
}
],
},
taxN
umber
:
{
taxN
o
:
{
type
:
'string'
,
title
:
'纳税号'
,
'x-rules'
:
[
{
required
:
true
,
message
:
'请填写发票抬头'
}
{
required
:
true
,
message
:
'请填写纳税号'
},
{
limitByte
:
true
,
maxByte
:
20
,
allowChineseTransform
:
false
}
]
},
depositBank
:
{
bankOfDeposit
:
{
type
:
'string'
,
title
:
'开户行'
,
'x-rules'
:
[
{
limitByte
:
true
,
maxByte
:
40
}
]
},
account
:
{
type
:
'string'
,
title
:
'账号'
title
:
'账号'
,
'x-rules'
:
[
{
pattern
:
/^
([
1-9
]{1})(\d{14}
|
\d{18})
$/
,
message
:
'请填写正确的银行账号'
}
]
},
addres
s
:
{
addres
:
{
type
:
'text'
,
title
:
'地址'
,
'x-component'
:
'textarea'
},
phoneLayout
:
{
type
:
'object'
,
'x-mega-props'
:
{
wrapperCol
:
24
},
'x-component'
:
'mega-layout'
,
'x-component-props'
:
{
grid
:
true
,
columns
:
3
,
label
:
'电话'
,
wrapperCol
:
24
},
properties
:
{
areaCode
:
{
type
:
'string'
,
enum
:
[],
'x-component-props'
:
{
}
'x-component'
:
'textarea'
,
'x-rules'
:
[
{
limitByte
:
true
,
maxByte
:
80
}
]
},
phone
:
{
tel
:
{
type
:
'string'
,
'x-mega-props'
:
{
span
:
2
}
}
}
title
:
'电话号码'
,
'x-rules'
:
[
{
limitByte
:
true
,
maxByte
:
80
},
{
pattern
:
/^0
\d{2,3}
-
?\d{7,8}
$/
,
message
:
'请填写正确的电话号码'
}
]
},
isDefault
:
{
type
:
'object'
,
...
...
@@ -126,21 +120,46 @@ const schema = {
const
Info
:
React
.
FC
=
()
=>
{
const
[
initialValue
,
setInitialValue
]
=
useState
({});
const
{
id
,
preview
}
=
usePageStatus
();
const
[
submitLoading
,
setSubmitLoading
]
=
useState
(
false
);
const
[
unsaved
,
setUnsaved
]
=
useState
(
true
);
const
isEdit
=
id
&&
!
preview
;
const
isAdd
=
!
id
&&
!
preview
;
const
isView
=
id
&&
preview
;
const
handleSubmit
=
(
value
)
=>
{
console
.
log
(
value
);
// return value;
const
serviceActions
=
isAdd
?
PublicApi
.
postSettleAccountsInvoiceMessageAdd
:
PublicApi
.
postSettleAccountsInvoiceMessageUpdate
let
tempData
=
{...
value
,
isDefault
:
value
.
isDefault
?
1
:
0
};
const
postData
=
isAdd
?
tempData
:
{...
tempData
,
id
};
setSubmitLoading
(
true
);
setUnsaved
(
false
);
serviceActions
(
postData
).
then
((
data
)
=>
{
setSubmitLoading
(
false
);
if
(
data
.
code
===
1000
)
{
history
.
push
(
'/memberCenter/balance/settleRules/receiptList'
)
}
})
}
useEffect
(()
=>
{
if
(
id
)
{
async
function
fetchData
()
{
setInitialValue
({
consignor
:
2
,
type
:
2
,
address
:
'fuck you'
,
isDefault
:
true
})
const
{
data
}
=
await
PublicApi
.
getSettleAccountsInvoiceMessageDetails
({
id
});
setInitialValue
(
data
)
}
fetchData
()
}
;
},
[
id
])
const
handleCancel
=
()
=>
{
history
.
push
(
'/memberCenter/balance/settleRules/receiptList'
)
}
fetchData
();
},
[])
return
(
<
PageHeaderWrapper
>
...
...
@@ -154,11 +173,12 @@ const Info: React.FC = () => {
schema=
{
schema
}
>
<
FormButtonGroup
offset=
{
4
}
>
<
Submit
>
提交
</
Submit
>
<
Button
>
取消
</
Button
>
<
Submit
loading=
{
submitLoading
}
>
提交
</
Submit
>
<
Button
onClick=
{
handleCancel
}
>
取消
</
Button
>
</
FormButtonGroup
>
</
NiceForm
>
</
Card
>
<
Prompt
when=
{
unsaved
}
message=
{
"内容未保存,确定要离开?"
}
/>
</
PageHeaderWrapper
>
)
...
...
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