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
e035996a
Commit
e035996a
authored
Dec 24, 2020
by
XieZhiXiong
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix: 修改售后相关bug
parent
abaf37d3
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
1153 additions
and
1120 deletions
+1153
-1120
index.tsx
src/pages/afterService/components/GoodsDrawer/index.tsx
+6
-1
useBusinessEffects.ts
...mit/components/ExchangeForm/effects/useBusinessEffects.ts
+85
-76
index.tsx
...cation/exchangePrSubmit/components/ExchangeForm/index.tsx
+547
-546
useBusinessEffects.ts
...ubmit/components/RepairForm/effects/useBusinessEffects.ts
+62
-53
index.tsx
...pplication/repairPrSubmit/components/RepairForm/index.tsx
+388
-388
useBusinessEffects.ts
...ubmit/components/ReturnForm/effects/useBusinessEffects.ts
+59
-50
index.tsx
...pplication/returnPrSubmit/components/ReturnForm/index.tsx
+1
-1
index.tsx
...afterService/returnManage/components/DetailInfo/index.tsx
+1
-1
index.tsx
src/pages/afterService/returnManage/returnPrReturn/index.tsx
+2
-2
index.tsx
...ion/stockSellStorage/bills/components/BillsForm/index.tsx
+2
-2
No files found.
src/pages/afterService/components/GoodsDrawer/index.tsx
View file @
e035996a
...
...
@@ -2,7 +2,7 @@
* @Author: XieZhiXiong
* @Date: 2020-11-04 15:09:09
* @LastEditors: XieZhiXiong
* @LastEditTime: 2020-12-2
1 11:44:17
* @LastEditTime: 2020-12-2
4 10:32:10
* @Description: 维修商品抽屉组件
*/
import
React
,
{
useState
,
useEffect
}
from
'react'
;
...
...
@@ -246,6 +246,11 @@ class GoodsDrawer extends React.Component<GoodsDrawerProps, GoodsDrawerState> {
payload
.
push
(
atom
);
});
});
if
(
!
payload
.
length
)
{
this
.
setState
({
loading
:
false
});
return
;
}
processEnumRes
=
await
PublicApi
.
postOrderGetProcessEnum
({
list
:
payload
,
...
...
src/pages/afterService/exchangeApplication/exchangePrSubmit/components/ExchangeForm/effects/useBusinessEffects.ts
View file @
e035996a
/*
* @Author: XieZhiXiong
* @Date: 2020-11-03 18:30:47
* @LastEditors: XieZhiXiong
* @LastEditTime: 2020-12-11 10:29:51
* @Description: 联动逻辑相关
*/
import
{
Modal
}
from
'antd'
;
import
{
FormEffectHooks
,
FormPath
}
from
'@formily/antd'
;
import
{
useLinkageUtils
}
from
'@/utils/formEffectUtils'
;
const
{
onFieldInputChange$
,
onFieldValueChange$
,
}
=
FormEffectHooks
;
export
const
useBusinessEffects
=
(
context
,
actions
)
=>
{
const
{
getFieldValue
,
setFieldValue
,
getFieldState
,
setFieldState
,
}
=
actions
;
const
linkage
=
useLinkageUtils
();
// 联动配送方式
onFieldValueChange$
(
'deliveryType'
).
subscribe
(
fieldState
=>
{
const
{
name
,
value
}
=
fieldState
;
switch
(
value
)
{
// 物流
case
1
:
{
linkage
.
show
(
'shippingAddress'
);
linkage
.
hide
(
'pickupAddress'
);
break
;
};
// 自提
case
2
:
{
linkage
.
hide
(
'shippingAddress'
);
linkage
.
show
(
'pickupAddress'
);
break
;
};
// 无需物流
case
3
:
{
linkage
.
hide
(
'*(shippingAddress,pickupAddress)'
);
break
;
};
default
:
break
};
});
// 校验换货数量
onFieldInputChange$
(
'replaceGoodsList.*.replaceCount'
).
subscribe
(
fieldState
=>
{
const
{
name
,
value
}
=
fieldState
;
// 已换货数量
const
replacedCountValue
=
getFieldState
(
FormPath
.
transform
(
name
,
/
\d
/
,
$1
=>
{
return
`replaceGoodsList.
${
$1
}
.extraData`
}),
state
=>
state
.
value
.
replacedCount
,
);
setFieldState
(
FormPath
.
transform
(
name
,
/
\d
/
,
$1
=>
{
return
`replaceGoodsList.
${
$1
}
.replaceCount`
}),
state
=>
{
if
(
+
value
>
replacedCountValue
)
{
state
.
errors
=
'填写值已超过最大可换货数量,请重新填写'
;
}
else
{
state
.
errors
=
''
;
}
}
);
});
/*
* @Author: XieZhiXiong
* @Date: 2020-11-03 18:30:47
* @LastEditors: XieZhiXiong
* @LastEditTime: 2020-12-24 10:36:02
* @Description: 联动逻辑相关
*/
import
{
Modal
}
from
'antd'
;
import
{
FormEffectHooks
,
FormPath
}
from
'@formily/antd'
;
import
{
useLinkageUtils
}
from
'@/utils/formEffectUtils'
;
const
{
onFieldInputChange$
,
onFieldValueChange$
,
}
=
FormEffectHooks
;
export
const
useBusinessEffects
=
(
context
,
actions
)
=>
{
const
{
getFieldValue
,
setFieldValue
,
getFieldState
,
setFieldState
,
}
=
actions
;
const
linkage
=
useLinkageUtils
();
// 联动配送方式
onFieldValueChange$
(
'deliveryType'
).
subscribe
(
fieldState
=>
{
const
{
name
,
value
}
=
fieldState
;
switch
(
value
)
{
// 物流
case
1
:
{
linkage
.
show
(
'shippingAddress'
);
linkage
.
hide
(
'pickupAddress'
);
break
;
};
// 自提
case
2
:
{
linkage
.
hide
(
'shippingAddress'
);
linkage
.
show
(
'pickupAddress'
);
break
;
};
// 无需物流
case
3
:
{
linkage
.
hide
(
'*(shippingAddress,pickupAddress)'
);
break
;
};
default
:
break
};
});
// 校验换货数量
onFieldInputChange$
(
'replaceGoodsList.*.replaceCount'
).
subscribe
(
fieldState
=>
{
const
{
name
,
value
}
=
fieldState
;
// 已换货数量
const
replacedCountValue
=
getFieldState
(
FormPath
.
transform
(
name
,
/
\d
/
,
$1
=>
{
return
`replaceGoodsList.
${
$1
}
.extraData`
}),
state
=>
state
.
value
.
replacedCount
,
);
setFieldState
(
FormPath
.
transform
(
name
,
/
\d
/
,
$1
=>
{
return
`replaceGoodsList.
${
$1
}
.replaceCount`
}),
state
=>
{
if
(
+
value
>
replacedCountValue
)
{
state
.
errors
=
'填写值已超过最大可换货数量,请重新填写'
;
}
else
{
state
.
errors
=
''
;
}
}
);
});
// 供应会员联动 单据明细
onFieldInputChange$
(
'supplierMember'
).
subscribe
(
fieldState
=>
{
const
replaceGoodsListValue
=
getFieldValue
(
'replaceGoodsList'
);
if
(
replaceGoodsListValue
&&
replaceGoodsListValue
.
length
)
{
setFieldValue
(
'replaceGoodsList'
,
[]);
}
});
}
\ No newline at end of file
src/pages/afterService/exchangeApplication/exchangePrSubmit/components/ExchangeForm/index.tsx
View file @
e035996a
import
React
,
{
useState
,
useEffect
,
useRef
}
from
'react'
;
import
{
Button
,
Card
,
Spin
,
Badge
,
message
}
from
'antd'
;
import
{
ColumnType
}
from
'antd/lib/table/interface'
;
import
{
DeleteOutlined
}
from
'@ant-design/icons'
;
import
{
Radio
,
ArrayTable
}
from
'@formily/antd-components'
;
import
{
history
,
Prompt
}
from
'umi'
;
import
moment
from
'moment'
;
import
{
PageHeaderWrapper
}
from
'@ant-design/pro-layout'
;
import
{
SaveOutlined
,
PlusOutlined
}
from
'@ant-design/icons'
;
import
{
createFormActions
,
FormEffectHooks
}
from
'@formily/antd'
;
import
{
PublicApi
}
from
'@/services/api'
;
import
{
GetAsReplaceGoodsPageReturnedGoodsResponse
}
from
'@/services/AfterServiceApi'
;
import
{
normalizeFiledata
,
FileData
,
isJSONStr
}
from
'@/utils'
;
import
{
PurchaseOrderInsideWorkStateTexts
,
ORDER_TYPE2
}
from
'@/constants'
;
import
ReutrnEle
from
'@/components/ReturnEle'
;
import
StatusTag
from
'@/components/StatusTag'
;
import
NiceForm
from
'@/components/NiceForm'
;
import
GoodsDrawer
from
'../../../../components/GoodsDrawer'
;
import
{
OrderListRes
}
from
'../../../../components/GoodsDrawer/interface'
;
import
AddressFormItem
from
'../../../../components/AddressFormItem'
;
import
{
addBillSchema
}
from
'./schema'
;
import
{
createEffects
}
from
'./effects'
;
import
{
EXCHANGE_OUTER_STATUS_TAG_MAP
,
EXCHANGE_INNER_STATUS_BADGE_MAP
,
}
from
'../../../../constants'
;
const
addSchemaAction
=
createFormActions
();
const
{
onFormInputChange$
,
}
=
FormEffectHooks
;
interface
BillsFormProps
{
id
?:
string
;
// 是否是编辑的
isEdit
?:
boolean
;
};
interface
DetailInfo
{
applyTime
:
string
;
proofFileList
?:
FileData
[];
deliveryAddress
?:
{
[
key
:
string
]:
any
};
shippingAddress
?:
{
[
key
:
string
]:
any
};
pickupAddress
?:
{
[
key
:
string
]:
any
};
supplierMember
?:
{},
outerStatus
?:
number
,
outerStatusName
?:
string
,
innerStatus
?:
number
,
innerStatusName
?:
string
,
deliveryType
?:
number
,
}
const
ExchangeForm
:
React
.
FC
<
BillsFormProps
>
=
({
id
,
isEdit
=
false
,
})
=>
{
const
[
detailInfo
,
setDetailInfo
]
=
useState
<
DetailInfo
>
({
applyTime
:
moment
().
format
(
'YYYY-MM-DD HH:mm:ss'
),
});
const
[
replaceGoodsList
,
setReplaceGoodsList
]
=
useState
<
GetAsReplaceGoodsPageReturnedGoodsResponse
>
({
data
:
[],
totalCount
:
0
});
const
[
unsaved
,
setUnsaved
]
=
useState
(
false
);
const
[
infoLoading
,
setInfoLoading
]
=
useState
(
false
);
const
[
goodsValue
,
setGoodsValue
]
=
useState
([]);
const
[
submitLoading
,
setSubmitLoading
]
=
useState
(
false
);
const
[
visibleGoodsDrawer
,
setVisibleGoodsDrawer
]
=
useState
(
false
);
const
tableColumn
:
ColumnType
<
any
>
[]
=
[
{
title
:
'订单号'
,
dataIndex
:
'orderNo'
,
align
:
'center'
,
},
{
title
:
'订单摘要'
,
dataIndex
:
'orderThe'
,
align
:
'center'
,
},
{
title
:
'供应会员'
,
dataIndex
:
'supplyMembersName'
,
align
:
'center'
,
},
{
title
:
'下单时间'
,
dataIndex
:
'createTime'
,
align
:
'center'
,
},
{
title
:
'订单状态'
,
dataIndex
:
'externalState'
,
align
:
'center'
,
render
:
text
=>
PurchaseOrderInsideWorkStateTexts
[
text
],
},
{
title
:
'订单类型'
,
dataIndex
:
'type'
,
align
:
'center'
,
render
:
text
=>
ORDER_TYPE2
[
text
],
},
];
const
childTableColumn
:
ColumnType
<
any
>
[]
=
[
{
title
:
'商品ID'
,
dataIndex
:
'productId'
,
align
:
'center'
,
},
{
title
:
'商品名称'
,
dataIndex
:
'productName'
,
align
:
'center'
,
},
{
title
:
'品类'
,
dataIndex
:
'category'
,
align
:
'center'
,
},
{
title
:
'品牌'
,
dataIndex
:
'brand'
,
align
:
'center'
,
},
{
title
:
'单位'
,
dataIndex
:
'unit'
,
align
:
'center'
,
},
{
title
:
'订单数量'
,
dataIndex
:
'purchaseCount'
,
align
:
'center'
,
},
{
title
:
'单价'
,
dataIndex
:
'price'
,
align
:
'center'
,
},
{
title
:
'采购金额'
,
dataIndex
:
'price'
,
align
:
'center'
,
},
{
title
:
'已换货数量'
,
dataIndex
:
'returnCount'
,
align
:
'center'
,
},
];
// 根据供应会员获取订单列表
const
getOrderList
=
(
params
):
Promise
<
OrderListRes
>
=>
{
const
supplierMemberValue
=
addSchemaAction
.
getFieldValue
(
'supplierMember'
);
return
new
Promise
((
resolve
,
reject
)
=>
{
PublicApi
.
getOrderOneBatchOrderList
({
...
params
,
supplyMembersId
:
supplierMemberValue
[
0
].
memberId
,
supplyMembersRoleId
:
supplierMemberValue
[
0
].
roleId
,
}).
then
(
res
=>
{
if
(
res
.
code
===
1000
)
{
resolve
(
res
.
data
);
}
reject
();
}).
catch
(()
=>
{
reject
();
});
});
};
// 获取维修申请详情
const
getDetailInfo
=
()
=>
{
if
(
!
id
)
{
return
;
}
setInfoLoading
(
true
);
PublicApi
.
getAsReplaceGoodsGetDetailByConsumer
({
replaceId
:
id
,
}).
then
(
res
=>
{
if
(
res
.
code
===
1000
)
{
const
{
returnGoodsAddress
,
replaceGoodsAddress
,
faultFileList
,
supplierName
,
parentMemberId
,
parentMemberRoleId
,
evaluate
,
goodsDetailList
,
innerTaskList
,
manualReturnGoodsAddress
,
replaceDeliveryGoodsList
,
replaceStatisticsList
,
taskType
,
consumerName
,
outerTaskList
,
replaceBatch
,
replaceId
,
...
rest
}
=
res
.
data
;
addSchemaAction
.
setFieldState
(
'*(supplierMember)'
,
state
=>
{
state
.
props
[
'x-component-props'
].
disabled
=
true
;
}
);
setDetailInfo
({
proofFileList
:
faultFileList
.
map
(
item
=>
normalizeFiledata
(
item
.
filePath
)),
deliveryAddress
:
{
fullAddress
:
replaceGoodsAddress
.
receiveAddress
,
id
:
replaceGoodsAddress
.
receiveId
,
phone
:
replaceGoodsAddress
.
receiveUserTel
,
receiverName
:
replaceGoodsAddress
.
receiveUserName
,
},
// 物流
shippingAddress
:
returnGoodsAddress
.
deliveryType
===
1
?
{
fullAddress
:
returnGoodsAddress
.
sendAddress
,
id
:
returnGoodsAddress
.
sendId
,
phone
:
returnGoodsAddress
.
sendUserTel
,
receiverName
:
returnGoodsAddress
.
sendUserName
,
}
:
undefined
,
// 自提
pickupAddress
:
returnGoodsAddress
.
deliveryType
===
2
?
{
fullAddress
:
returnGoodsAddress
.
sendAddress
,
id
:
returnGoodsAddress
.
sendId
,
phone
:
returnGoodsAddress
.
sendUserTel
,
receiverName
:
returnGoodsAddress
.
sendUserName
,
}
:
undefined
,
deliveryType
:
returnGoodsAddress
.
deliveryType
,
supplierMember
:
supplierName
?
[
{
name
:
supplierName
,
memberId
:
parentMemberId
,
roleId
:
parentMemberRoleId
,
},
]
:
[]
,
...
rest
,
});
setReplaceGoodsList
({
data
:
goodsDetailList
.
map
(
item
=>
({
...
item
,
extraData
:
{
replacedCount
:
item
.
purchaseCount
||
0
,
// 已换货数量,这里取 采购数量判断即可
id
:
item
.
orderRecordId
,
taskType
,
},
})),
totalCount
:
goodsDetailList
.
length
,
});
setGoodsValue
(
goodsDetailList
.
map
(
item
=>
item
.
orderRecordId
));
}
}).
finally
(()
=>
{
setInfoLoading
(
false
);
});
};
useEffect
(()
=>
{
getDetailInfo
();
},
[]);
const
handleAddGoods
=
()
=>
{
const
supplierMemberValue
=
addSchemaAction
.
getFieldValue
(
'supplierMember'
);
if
(
!
supplierMemberValue
||
!
supplierMemberValue
.
length
)
{
message
.
error
(
'请先选择供应会员'
);
return
;
}
setVisibleGoodsDrawer
(
true
);
};
const
TableAddButton
=
isEdit
||
!
id
?
(
<
Button
style=
{
{
marginBottom
:
16
}
}
block
icon=
{
<
PlusOutlined
/>
}
onClick=
{
handleAddGoods
}
type=
"dashed"
>
选择换货商品
</
Button
>
)
:
null
;
const
handleSubmit
=
value
=>
{
const
{
supplierMember
,
deliveryType
,
shippingAddress
=
{},
pickupAddress
=
{},
deliveryAddress
=
{},
proofFileList
=
[],
replaceGoodsList
=
[],
outerStatus
,
outerStatusName
,
innerStatus
,
innerStatusName
,
applyNo
,
applyTime
,
...
rest
}
=
value
;
setSubmitLoading
(
true
);
const
payload
=
{
...
rest
,
replaceId
:
id
||
0
,
supplierMemberId
:
supplierMember
[
0
].
memberId
,
supplierRoleId
:
supplierMember
[
0
].
roleId
,
supplierMemberName
:
supplierMember
[
0
].
name
,
replaceGoodsAddress
:
{
receiveAddress
:
deliveryAddress
.
fullAddress
||
''
,
receiveUserName
:
deliveryAddress
.
receiverName
||
''
,
receiveUserTel
:
deliveryAddress
.
phone
||
''
,
receiveId
:
deliveryAddress
.
id
||
''
,
},
// 配送方式为 1 = 物流 选择 发货地址
returnGoodsAddress
:
{
deliveryType
,
sendAddress
:
deliveryType
===
1
?
shippingAddress
.
fullAddress
:
deliveryType
===
2
?
pickupAddress
.
fullAddress
:
''
,
sendUserName
:
deliveryType
===
1
?
shippingAddress
.
shipperName
:
deliveryType
===
2
?
pickupAddress
.
shipperName
:
''
,
sendUserTel
:
deliveryType
===
1
?
shippingAddress
.
phone
:
deliveryType
===
2
?
pickupAddress
.
phone
:
''
,
sendId
:
deliveryType
===
1
?
shippingAddress
.
id
:
deliveryType
===
2
?
pickupAddress
.
id
:
''
,
},
proofFileList
:
proofFileList
.
filter
(
item
=>
item
.
status
===
'done'
).
map
(
item
=>
({
fileName
:
item
.
name
,
filePath
:
item
.
data
.
url
,
})),
replaceGoodsList
:
replaceGoodsList
.
map
(({
replaceCount
,
brand
,
unit
,
extraData
,
...
rest
})
=>
({
orderRecordId
:
extraData
.
id
,
replaceCount
:
+
replaceCount
,
brand
:
brand
||
''
,
unit
:
unit
||
''
,
...
rest
,
})),
taskType
:
replaceGoodsList
[
0
].
extraData
.
taskType
,
};
PublicApi
.
postAsReplaceGoodsSave
(
payload
)
.
then
(
res
=>
{
if
(
res
.
code
===
1000
)
{
setUnsaved
(
false
);
setTimeout
(()
=>
{
history
.
goBack
();
},
800
);
}
})
.
finally
(()
=>
{
setSubmitLoading
(
false
);
});
};
const
handleRemoveItem
=
(
index
:
number
)
=>
{
const
newGoodsValue
=
[...
goodsValue
];
const
newValue
=
[...
addSchemaAction
.
getFieldValue
(
'replaceGoodsList'
)];
const
deleted
=
newValue
.
splice
(
index
,
1
);
addSchemaAction
.
setFieldValue
(
'replaceGoodsList'
,
newValue
);
newGoodsValue
.
splice
(
newGoodsValue
.
findIndex
(
item
=>
item
===
deleted
[
0
].
id
),
1
);
setGoodsValue
(
newGoodsValue
);
};
// ArrayTable自定义渲染
const
renderListTableRemove
=
(
index
:
number
)
=>
(
<>
<
a
onClick=
{
()
=>
handleRemoveItem
(
index
)
}
style=
{
{
color
:
'#ff4d4f'
,
}
}
>
删除
</
a
>
</>
);
const
beforeUpload
=
file
=>
{
if
(
file
.
size
/
1024
/
1024
>
20
)
{
message
.
warning
(
'图片大小超过20M'
);
return
Promise
.
reject
();
}
};
const
handleGoodsConfirm
=
values
=>
{
const
preValues
=
addSchemaAction
.
getFieldValue
(
'replaceGoodsList'
);
const
value
=
[];
values
.
forEach
(
item
=>
{
const
existing
=
preValues
.
find
(
val
=>
val
.
id
===
item
.
id
);
const
atom
=
existing
?
existing
:
{
orderNo
:
item
.
orderNo
,
productId
:
item
.
productId
,
productName
:
item
.
productName
,
category
:
item
.
category
,
brand
:
item
.
brand
,
unit
:
item
.
unit
,
purchasePrice
:
item
.
price
,
purchaseCount
:
item
.
purchaseCount
,
purchaseAmount
:
+
(
item
.
price
*
item
.
purchaseCount
).
toFixed
(
2
),
replaceReason
:
''
,
extraData
:
{
replacedCount
:
item
.
replaceCount
||
item
.
purchaseCount
||
0
,
// 已换货数量
id
:
item
.
id
,
taskType
:
item
.
processEnum
,
},
};
value
.
push
(
atom
);
});
addSchemaAction
.
setFieldValue
(
'replaceGoodsList'
,
value
);
};
const
handleGoodsChange
=
values
=>
{
setGoodsValue
(
values
);
};
const
OuterStatus
=
(
<
StatusTag
type=
{
EXCHANGE_OUTER_STATUS_TAG_MAP
[
detailInfo
?.
outerStatus
]
}
title=
{
detailInfo
?.
outerStatusName
}
/>
);
const
InnerStatus
=
(
<
Badge
color=
{
EXCHANGE_INNER_STATUS_BADGE_MAP
[
detailInfo
?.
innerStatus
]
}
text=
{
detailInfo
?.
innerStatusName
}
/>
);
return
(
<
Spin
spinning=
{
infoLoading
}
>
<
PageHeaderWrapper
style=
{
{
padding
:
24
,
}
}
onBack=
{
()
=>
history
.
goBack
()
}
backIcon=
{
<
ReutrnEle
description=
"返回"
/>
}
title=
{
!
id
?
'新建换货申请单'
:
isEdit
?
'编辑换货申请单'
:
'查看换货申请单'
}
extra=
{
(
isEdit
||
!
id
)
?
[
<
Button
key=
"1"
type=
"primary"
icon=
{
<
SaveOutlined
/>
}
loading=
{
submitLoading
}
onClick=
{
()
=>
addSchemaAction
.
submit
()
}
>
保存
</
Button
>,
]
:
[]
}
>
<
Card
>
<
NiceForm
initialValues=
{
{
...
detailInfo
,
replaceGoodsList
:
replaceGoodsList
.
data
,
}
}
expressionScope=
{
{
TableAddButton
,
OuterStatus
,
InnerStatus
,
renderListTableRemove
,
beforeUpload
,
}
}
components=
{
{
ArrayTable
,
AddressFormItem
,
}
}
editable=
{
isEdit
||
!
id
}
effects=
{
(
$
,
actions
)
=>
{
createEffects
(
$
,
actions
)
onFormInputChange$
().
subscribe
(()
=>
{
if
(
!
unsaved
)
{
setUnsaved
(
true
);
}
});
}
}
onSubmit=
{
handleSubmit
}
actions=
{
addSchemaAction
}
schema=
{
addBillSchema
}
/>
</
Card
>
<
GoodsDrawer
title=
"选择换货商品"
type=
{
2
}
visible=
{
visibleGoodsDrawer
}
fetchOrderList=
{
getOrderList
}
onClose=
{
()
=>
setVisibleGoodsDrawer
(
false
)
}
onConfirm=
{
handleGoodsConfirm
}
checked=
{
goodsValue
}
onChange=
{
handleGoodsChange
}
nestProps=
{
{
NestColumns
:
[
tableColumn
,
childTableColumn
],
}
}
/>
<
Prompt
when=
{
unsaved
}
message=
"您还有未保存的内容,是否确定要离开?"
/>
</
PageHeaderWrapper
>
</
Spin
>
);
};
export
default
ExchangeForm
;
import
React
,
{
useState
,
useEffect
,
useRef
}
from
'react'
;
import
{
Button
,
Card
,
Spin
,
Badge
,
message
}
from
'antd'
;
import
{
ColumnType
}
from
'antd/lib/table/interface'
;
import
{
DeleteOutlined
}
from
'@ant-design/icons'
;
import
{
Radio
,
ArrayTable
}
from
'@formily/antd-components'
;
import
{
history
,
Prompt
}
from
'umi'
;
import
moment
from
'moment'
;
import
{
PageHeaderWrapper
}
from
'@ant-design/pro-layout'
;
import
{
SaveOutlined
,
PlusOutlined
}
from
'@ant-design/icons'
;
import
{
createFormActions
,
FormEffectHooks
}
from
'@formily/antd'
;
import
{
PublicApi
}
from
'@/services/api'
;
import
{
GetAsReplaceGoodsPageReturnedGoodsResponse
}
from
'@/services/AfterServiceApi'
;
import
{
normalizeFiledata
,
FileData
,
isJSONStr
}
from
'@/utils'
;
import
{
PurchaseOrderInsideWorkStateTexts
,
ORDER_TYPE2
}
from
'@/constants'
;
import
ReutrnEle
from
'@/components/ReturnEle'
;
import
StatusTag
from
'@/components/StatusTag'
;
import
NiceForm
from
'@/components/NiceForm'
;
import
GoodsDrawer
from
'../../../../components/GoodsDrawer'
;
import
{
OrderListRes
}
from
'../../../../components/GoodsDrawer/interface'
;
import
AddressFormItem
from
'../../../../components/AddressFormItem'
;
import
{
addBillSchema
}
from
'./schema'
;
import
{
createEffects
}
from
'./effects'
;
import
{
EXCHANGE_OUTER_STATUS_TAG_MAP
,
EXCHANGE_INNER_STATUS_BADGE_MAP
,
}
from
'../../../../constants'
;
const
addSchemaAction
=
createFormActions
();
const
{
onFormInputChange$
,
}
=
FormEffectHooks
;
interface
BillsFormProps
{
id
?:
string
;
// 是否是编辑的
isEdit
?:
boolean
;
};
interface
DetailInfo
{
applyTime
:
string
;
proofFileList
?:
FileData
[];
deliveryAddress
?:
{
[
key
:
string
]:
any
};
shippingAddress
?:
{
[
key
:
string
]:
any
};
pickupAddress
?:
{
[
key
:
string
]:
any
};
supplierMember
?:
{},
outerStatus
?:
number
,
outerStatusName
?:
string
,
innerStatus
?:
number
,
innerStatusName
?:
string
,
deliveryType
?:
number
,
}
const
ExchangeForm
:
React
.
FC
<
BillsFormProps
>
=
({
id
,
isEdit
=
false
,
})
=>
{
const
[
detailInfo
,
setDetailInfo
]
=
useState
<
DetailInfo
>
({
applyTime
:
moment
().
format
(
'YYYY-MM-DD HH:mm:ss'
),
});
const
[
replaceGoodsList
,
setReplaceGoodsList
]
=
useState
<
GetAsReplaceGoodsPageReturnedGoodsResponse
>
({
data
:
[],
totalCount
:
0
});
const
[
unsaved
,
setUnsaved
]
=
useState
(
false
);
const
[
infoLoading
,
setInfoLoading
]
=
useState
(
false
);
const
[
goodsValue
,
setGoodsValue
]
=
useState
([]);
const
[
submitLoading
,
setSubmitLoading
]
=
useState
(
false
);
const
[
visibleGoodsDrawer
,
setVisibleGoodsDrawer
]
=
useState
(
false
);
const
tableColumn
:
ColumnType
<
any
>
[]
=
[
{
title
:
'订单号'
,
dataIndex
:
'orderNo'
,
align
:
'center'
,
},
{
title
:
'订单摘要'
,
dataIndex
:
'orderThe'
,
align
:
'center'
,
},
{
title
:
'供应会员'
,
dataIndex
:
'supplyMembersName'
,
align
:
'center'
,
},
{
title
:
'下单时间'
,
dataIndex
:
'createTime'
,
align
:
'center'
,
},
{
title
:
'订单状态'
,
dataIndex
:
'externalState'
,
align
:
'center'
,
render
:
text
=>
PurchaseOrderInsideWorkStateTexts
[
text
],
},
{
title
:
'订单类型'
,
dataIndex
:
'type'
,
align
:
'center'
,
render
:
text
=>
ORDER_TYPE2
[
text
],
},
];
const
childTableColumn
:
ColumnType
<
any
>
[]
=
[
{
title
:
'商品ID'
,
dataIndex
:
'productId'
,
align
:
'center'
,
},
{
title
:
'商品名称'
,
dataIndex
:
'productName'
,
align
:
'center'
,
},
{
title
:
'品类'
,
dataIndex
:
'category'
,
align
:
'center'
,
},
{
title
:
'品牌'
,
dataIndex
:
'brand'
,
align
:
'center'
,
},
{
title
:
'单位'
,
dataIndex
:
'unit'
,
align
:
'center'
,
},
{
title
:
'订单数量'
,
dataIndex
:
'purchaseCount'
,
align
:
'center'
,
},
{
title
:
'单价'
,
dataIndex
:
'price'
,
align
:
'center'
,
},
{
title
:
'采购金额'
,
dataIndex
:
'amount'
,
align
:
'center'
,
render
:
(
_
,
record
)
=>
(
record
.
purchaseCount
*
record
.
price
).
toFixed
(
2
),
},
{
title
:
'已换货数量'
,
dataIndex
:
'returnCount'
,
align
:
'center'
,
},
];
// 根据供应会员获取订单列表
const
getOrderList
=
(
params
):
Promise
<
OrderListRes
>
=>
{
const
supplierMemberValue
=
addSchemaAction
.
getFieldValue
(
'supplierMember'
);
return
new
Promise
((
resolve
,
reject
)
=>
{
PublicApi
.
getOrderOneBatchOrderList
({
...
params
,
supplyMembersId
:
supplierMemberValue
[
0
].
memberId
,
supplyMembersRoleId
:
supplierMemberValue
[
0
].
roleId
,
}).
then
(
res
=>
{
if
(
res
.
code
===
1000
)
{
resolve
(
res
.
data
);
}
reject
();
}).
catch
(()
=>
{
reject
();
});
});
};
// 获取维修申请详情
const
getDetailInfo
=
()
=>
{
if
(
!
id
)
{
return
;
}
setInfoLoading
(
true
);
PublicApi
.
getAsReplaceGoodsGetDetailByConsumer
({
replaceId
:
id
,
}).
then
(
res
=>
{
if
(
res
.
code
===
1000
)
{
const
{
returnGoodsAddress
,
replaceGoodsAddress
,
faultFileList
,
supplierName
,
parentMemberId
,
parentMemberRoleId
,
evaluate
,
goodsDetailList
,
innerTaskList
,
manualReturnGoodsAddress
,
replaceDeliveryGoodsList
,
replaceStatisticsList
,
taskType
,
consumerName
,
outerTaskList
,
replaceBatch
,
replaceId
,
...
rest
}
=
res
.
data
;
addSchemaAction
.
setFieldState
(
'*(supplierMember)'
,
state
=>
{
state
.
props
[
'x-component-props'
].
disabled
=
true
;
}
);
setDetailInfo
({
proofFileList
:
faultFileList
.
map
(
item
=>
normalizeFiledata
(
item
.
filePath
)),
deliveryAddress
:
{
fullAddress
:
replaceGoodsAddress
.
receiveAddress
,
id
:
replaceGoodsAddress
.
receiveId
,
phone
:
replaceGoodsAddress
.
receiveUserTel
,
receiverName
:
replaceGoodsAddress
.
receiveUserName
,
},
// 物流
shippingAddress
:
returnGoodsAddress
.
deliveryType
===
1
?
{
fullAddress
:
returnGoodsAddress
.
sendAddress
,
id
:
returnGoodsAddress
.
sendId
,
phone
:
returnGoodsAddress
.
sendUserTel
,
receiverName
:
returnGoodsAddress
.
sendUserName
,
}
:
undefined
,
// 自提
pickupAddress
:
returnGoodsAddress
.
deliveryType
===
2
?
{
fullAddress
:
returnGoodsAddress
.
sendAddress
,
id
:
returnGoodsAddress
.
sendId
,
phone
:
returnGoodsAddress
.
sendUserTel
,
receiverName
:
returnGoodsAddress
.
sendUserName
,
}
:
undefined
,
deliveryType
:
returnGoodsAddress
.
deliveryType
,
supplierMember
:
supplierName
?
[
{
name
:
supplierName
,
memberId
:
parentMemberId
,
roleId
:
parentMemberRoleId
,
},
]
:
[]
,
...
rest
,
});
setReplaceGoodsList
({
data
:
goodsDetailList
.
map
(
item
=>
({
...
item
,
extraData
:
{
replacedCount
:
item
.
purchaseCount
||
0
,
// 已换货数量,这里取 采购数量判断即可
id
:
item
.
orderRecordId
,
taskType
,
},
})),
totalCount
:
goodsDetailList
.
length
,
});
setGoodsValue
(
goodsDetailList
.
map
(
item
=>
item
.
orderRecordId
));
}
}).
finally
(()
=>
{
setInfoLoading
(
false
);
});
};
useEffect
(()
=>
{
getDetailInfo
();
},
[]);
const
handleAddGoods
=
()
=>
{
const
supplierMemberValue
=
addSchemaAction
.
getFieldValue
(
'supplierMember'
);
if
(
!
supplierMemberValue
||
!
supplierMemberValue
.
length
)
{
message
.
error
(
'请先选择供应会员'
);
return
;
}
setVisibleGoodsDrawer
(
true
);
};
const
TableAddButton
=
isEdit
||
!
id
?
(
<
Button
style=
{
{
marginBottom
:
16
}
}
block
icon=
{
<
PlusOutlined
/>
}
onClick=
{
handleAddGoods
}
type=
"dashed"
>
选择换货商品
</
Button
>
)
:
null
;
const
handleSubmit
=
value
=>
{
const
{
supplierMember
,
deliveryType
,
shippingAddress
=
{},
pickupAddress
=
{},
deliveryAddress
=
{},
proofFileList
=
[],
replaceGoodsList
=
[],
outerStatus
,
outerStatusName
,
innerStatus
,
innerStatusName
,
applyNo
,
applyTime
,
...
rest
}
=
value
;
setSubmitLoading
(
true
);
const
payload
=
{
...
rest
,
replaceId
:
id
||
0
,
supplierMemberId
:
supplierMember
[
0
].
memberId
,
supplierRoleId
:
supplierMember
[
0
].
roleId
,
supplierMemberName
:
supplierMember
[
0
].
name
,
replaceGoodsAddress
:
{
receiveAddress
:
deliveryAddress
.
fullAddress
||
''
,
receiveUserName
:
deliveryAddress
.
receiverName
||
''
,
receiveUserTel
:
deliveryAddress
.
phone
||
''
,
receiveId
:
deliveryAddress
.
id
||
''
,
},
// 配送方式为 1 = 物流 选择 发货地址
returnGoodsAddress
:
{
deliveryType
,
sendAddress
:
deliveryType
===
1
?
shippingAddress
.
fullAddress
:
deliveryType
===
2
?
pickupAddress
.
fullAddress
:
''
,
sendUserName
:
deliveryType
===
1
?
shippingAddress
.
shipperName
:
deliveryType
===
2
?
pickupAddress
.
shipperName
:
''
,
sendUserTel
:
deliveryType
===
1
?
shippingAddress
.
phone
:
deliveryType
===
2
?
pickupAddress
.
phone
:
''
,
sendId
:
deliveryType
===
1
?
shippingAddress
.
id
:
deliveryType
===
2
?
pickupAddress
.
id
:
''
,
},
proofFileList
:
proofFileList
.
filter
(
item
=>
item
.
status
===
'done'
).
map
(
item
=>
({
fileName
:
item
.
name
,
filePath
:
item
.
data
.
url
,
})),
replaceGoodsList
:
replaceGoodsList
.
map
(({
replaceCount
,
brand
,
unit
,
extraData
,
...
rest
})
=>
({
orderRecordId
:
extraData
.
id
,
replaceCount
:
+
replaceCount
,
brand
:
brand
||
''
,
unit
:
unit
||
''
,
...
rest
,
})),
taskType
:
replaceGoodsList
[
0
].
extraData
.
taskType
,
};
PublicApi
.
postAsReplaceGoodsSave
(
payload
)
.
then
(
res
=>
{
if
(
res
.
code
===
1000
)
{
setUnsaved
(
false
);
setTimeout
(()
=>
{
history
.
goBack
();
},
800
);
}
})
.
finally
(()
=>
{
setSubmitLoading
(
false
);
});
};
const
handleRemoveItem
=
(
index
:
number
)
=>
{
const
newGoodsValue
=
[...
goodsValue
];
const
newValue
=
[...
addSchemaAction
.
getFieldValue
(
'replaceGoodsList'
)];
const
deleted
=
newValue
.
splice
(
index
,
1
);
addSchemaAction
.
setFieldValue
(
'replaceGoodsList'
,
newValue
);
newGoodsValue
.
splice
(
newGoodsValue
.
findIndex
(
item
=>
item
===
deleted
[
0
].
id
),
1
);
setGoodsValue
(
newGoodsValue
);
};
// ArrayTable自定义渲染
const
renderListTableRemove
=
(
index
:
number
)
=>
(
<>
<
a
onClick=
{
()
=>
handleRemoveItem
(
index
)
}
style=
{
{
color
:
'#ff4d4f'
,
}
}
>
删除
</
a
>
</>
);
const
beforeUpload
=
file
=>
{
if
(
file
.
size
/
1024
/
1024
>
20
)
{
message
.
warning
(
'图片大小超过20M'
);
return
Promise
.
reject
();
}
};
const
handleGoodsConfirm
=
values
=>
{
const
preValues
=
addSchemaAction
.
getFieldValue
(
'replaceGoodsList'
);
const
value
=
[];
values
.
forEach
(
item
=>
{
const
existing
=
preValues
.
find
(
val
=>
val
.
id
===
item
.
id
);
const
atom
=
existing
?
existing
:
{
orderNo
:
item
.
orderNo
,
productId
:
item
.
productId
,
productName
:
item
.
productName
,
category
:
item
.
category
,
brand
:
item
.
brand
,
unit
:
item
.
unit
,
purchasePrice
:
item
.
price
,
purchaseCount
:
item
.
purchaseCount
,
purchaseAmount
:
+
(
item
.
price
*
item
.
purchaseCount
).
toFixed
(
2
),
replaceReason
:
''
,
extraData
:
{
replacedCount
:
item
.
replaceCount
||
item
.
purchaseCount
||
0
,
// 已换货数量
id
:
item
.
id
,
taskType
:
item
.
processEnum
,
},
};
value
.
push
(
atom
);
});
addSchemaAction
.
setFieldValue
(
'replaceGoodsList'
,
value
);
};
const
handleGoodsChange
=
values
=>
{
setGoodsValue
(
values
);
};
const
OuterStatus
=
(
<
StatusTag
type=
{
EXCHANGE_OUTER_STATUS_TAG_MAP
[
detailInfo
?.
outerStatus
]
}
title=
{
detailInfo
?.
outerStatusName
}
/>
);
const
InnerStatus
=
(
<
Badge
color=
{
EXCHANGE_INNER_STATUS_BADGE_MAP
[
detailInfo
?.
innerStatus
]
}
text=
{
detailInfo
?.
innerStatusName
}
/>
);
return
(
<
Spin
spinning=
{
infoLoading
}
>
<
PageHeaderWrapper
style=
{
{
padding
:
24
,
}
}
onBack=
{
()
=>
history
.
goBack
()
}
backIcon=
{
<
ReutrnEle
description=
"返回"
/>
}
title=
{
!
id
?
'新建换货申请单'
:
isEdit
?
'编辑换货申请单'
:
'查看换货申请单'
}
extra=
{
(
isEdit
||
!
id
)
?
[
<
Button
key=
"1"
type=
"primary"
icon=
{
<
SaveOutlined
/>
}
loading=
{
submitLoading
}
onClick=
{
()
=>
addSchemaAction
.
submit
()
}
>
保存
</
Button
>,
]
:
[]
}
>
<
Card
>
<
NiceForm
value=
{
{
...
detailInfo
,
replaceGoodsList
:
replaceGoodsList
.
data
,
}
}
expressionScope=
{
{
TableAddButton
,
OuterStatus
,
InnerStatus
,
renderListTableRemove
,
beforeUpload
,
}
}
components=
{
{
ArrayTable
,
AddressFormItem
,
}
}
editable=
{
isEdit
||
!
id
}
effects=
{
(
$
,
actions
)
=>
{
createEffects
(
$
,
actions
)
onFormInputChange$
().
subscribe
(()
=>
{
if
(
!
unsaved
)
{
setUnsaved
(
true
);
}
});
}
}
onSubmit=
{
handleSubmit
}
actions=
{
addSchemaAction
}
schema=
{
addBillSchema
}
/>
</
Card
>
<
GoodsDrawer
title=
"选择换货商品"
type=
{
2
}
visible=
{
visibleGoodsDrawer
}
fetchOrderList=
{
getOrderList
}
onClose=
{
()
=>
setVisibleGoodsDrawer
(
false
)
}
onConfirm=
{
handleGoodsConfirm
}
checked=
{
goodsValue
}
onChange=
{
handleGoodsChange
}
nestProps=
{
{
NestColumns
:
[
tableColumn
,
childTableColumn
],
}
}
/>
<
Prompt
when=
{
unsaved
}
message=
"您还有未保存的内容,是否确定要离开?"
/>
</
PageHeaderWrapper
>
</
Spin
>
);
};
export
default
ExchangeForm
;
src/pages/afterService/repairApplication/repairPrSubmit/components/RepairForm/effects/useBusinessEffects.ts
View file @
e035996a
/*
* @Author: XieZhiXiong
* @Date: 2020-11-03 18:30:47
* @LastEditors: XieZhiXiong
* @LastEditTime: 2020-11-17 10:32:48
* @Description: 联动逻辑相关
*/
import
{
Modal
}
from
'antd'
;
import
{
FormEffectHooks
,
FormPath
}
from
'@formily/antd'
;
import
{
useLinkageUtils
}
from
'@/utils/formEffectUtils'
;
import
{
}
from
'@/constants'
;
import
{
PublicApi
}
from
'@/services/api'
;
const
{
onFieldInputChange$
,
onFieldValueChange$
,
}
=
FormEffectHooks
;
export
const
useBusinessEffects
=
(
context
,
actions
)
=>
{
const
{
getFieldValue
,
setFieldValue
,
getFieldState
,
setFieldState
,
}
=
actions
;
// const linkage = useLinkageUtils();
// 校验维修数量
onFieldInputChange$
(
'repairGoodsList.*.repairCount'
).
subscribe
(
fieldState
=>
{
const
{
name
,
value
}
=
fieldState
;
// 已维修数量
const
repairedCountValue
=
getFieldState
(
FormPath
.
transform
(
name
,
/
\d
/
,
$1
=>
{
return
`repairGoodsList.
${
$1
}
.extraData`
}),
state
=>
state
.
value
.
repairedCount
,
);
setFieldState
(
FormPath
.
transform
(
name
,
/
\d
/
,
$1
=>
{
return
`repairGoodsList.
${
$1
}
.repairCount`
}),
state
=>
{
if
(
+
value
>
repairedCountValue
)
{
state
.
errors
=
'填写值已超过最大可维修数量,请重新填写'
;
}
else
{
state
.
errors
=
''
;
}
}
);
});
/*
* @Author: XieZhiXiong
* @Date: 2020-11-03 18:30:47
* @LastEditors: XieZhiXiong
* @LastEditTime: 2020-11-17 10:32:48
* @Description: 联动逻辑相关
*/
import
{
Modal
}
from
'antd'
;
import
{
FormEffectHooks
,
FormPath
}
from
'@formily/antd'
;
import
{
useLinkageUtils
}
from
'@/utils/formEffectUtils'
;
import
{
}
from
'@/constants'
;
import
{
PublicApi
}
from
'@/services/api'
;
const
{
onFieldInputChange$
,
onFieldValueChange$
,
}
=
FormEffectHooks
;
export
const
useBusinessEffects
=
(
context
,
actions
)
=>
{
const
{
getFieldValue
,
setFieldValue
,
getFieldState
,
setFieldState
,
}
=
actions
;
// const linkage = useLinkageUtils();
// 校验维修数量
onFieldInputChange$
(
'repairGoodsList.*.repairCount'
).
subscribe
(
fieldState
=>
{
const
{
name
,
value
}
=
fieldState
;
// 已维修数量
const
repairedCountValue
=
getFieldState
(
FormPath
.
transform
(
name
,
/
\d
/
,
$1
=>
{
return
`repairGoodsList.
${
$1
}
.extraData`
}),
state
=>
state
.
value
.
repairedCount
,
);
setFieldState
(
FormPath
.
transform
(
name
,
/
\d
/
,
$1
=>
{
return
`repairGoodsList.
${
$1
}
.repairCount`
}),
state
=>
{
if
(
+
value
>
repairedCountValue
)
{
state
.
errors
=
'填写值已超过最大可维修数量,请重新填写'
;
}
else
{
state
.
errors
=
''
;
}
}
);
});
// 供应会员联动 单据明细
onFieldInputChange$
(
'supplierMember'
).
subscribe
(
fieldState
=>
{
const
replaceGoodsListValue
=
getFieldValue
(
'repairGoodsList'
);
if
(
replaceGoodsListValue
&&
replaceGoodsListValue
.
length
)
{
setFieldValue
(
'repairGoodsList'
,
[]);
}
});
}
\ No newline at end of file
src/pages/afterService/repairApplication/repairPrSubmit/components/RepairForm/index.tsx
View file @
e035996a
import
React
,
{
useState
,
useEffect
,
useRef
}
from
'react'
;
import
{
Button
,
Card
,
Spin
,
Badge
,
message
}
from
'antd'
;
import
{
DeleteOutlined
}
from
'@ant-design/icons'
;
import
{
Radio
,
ArrayTable
}
from
'@formily/antd-components'
;
import
{
history
,
Prompt
}
from
'umi'
;
import
moment
from
'moment'
;
import
{
PageHeaderWrapper
}
from
'@ant-design/pro-layout'
;
import
{
SaveOutlined
,
PlusOutlined
}
from
'@ant-design/icons'
;
import
{
createFormActions
,
FormEffectHooks
}
from
'@formily/antd'
;
import
{
PublicApi
}
from
'@/services/api'
;
import
{
GetAsRepairGoodsPageRepairGoodsResponse
}
from
'@/services/AfterServiceApi'
;
import
{
normalizeFiledata
,
FileData
,
isJSONStr
}
from
'@/utils'
;
import
ReutrnEle
from
'@/components/ReturnEle'
;
import
NiceForm
from
'@/components/NiceForm'
;
import
StatusTag
from
'@/components/StatusTag'
;
import
GoodsDrawer
from
'../../../../components/GoodsDrawer'
;
import
{
OrderListRes
}
from
'../../../../components/GoodsDrawer/interface'
;
import
AddressFormItem
from
'../../../../components/AddressFormItem'
;
import
{
addBillSchema
}
from
'./schema'
;
import
{
createEffects
}
from
'./effects'
;
import
{
REPAIR_OUTER_STATUS_TAG_MAP
,
REPAIR_INNER_STATUS_BADGE_MAP
,
}
from
'../../../../constants'
;
const
addSchemaAction
=
createFormActions
();
const
{
onFormInputChange$
,
}
=
FormEffectHooks
;
interface
DetailInfo
{
applyTime
:
string
;
faultFileList
?:
FileData
[];
repairAddress
?:
{
[
key
:
string
]:
any
}[];
supplierMember
?:
{},
outerStatus
?:
number
,
outerStatusName
?:
string
,
innerStatus
?:
number
,
innerStatusName
?:
string
,
}
interface
BillsFormProps
{
id
?:
string
;
// 是否是编辑的
isEdit
?:
boolean
;
};
const
RepairForm
:
React
.
FC
<
BillsFormProps
>
=
({
id
,
isEdit
=
false
,
})
=>
{
const
[
detailInfo
,
setDetailInfo
]
=
useState
<
DetailInfo
>
({
applyTime
:
moment
().
format
(
'YYYY-MM-DD HH:mm:ss'
),
});
const
[
repairGoodsList
,
setRepairGoodsList
]
=
useState
<
GetAsRepairGoodsPageRepairGoodsResponse
>
({
data
:
[],
totalCount
:
0
});
const
[
unsaved
,
setUnsaved
]
=
useState
(
false
);
const
[
infoLoading
,
setInfoLoading
]
=
useState
(
false
);
const
[
repairGoodsLoading
,
setRepairGoodsLoading
]
=
useState
(
false
);
const
[
goodsValue
,
setGoodsValue
]
=
useState
([]);
const
[
submitLoading
,
setSubmitLoading
]
=
useState
(
false
);
const
[
visibleDrawer
,
setVisibleDrawer
]
=
useState
(
false
);
// 获取维修申请详情
const
getDetailInfo
=
()
=>
{
if
(
!
id
)
{
return
;
}
setInfoLoading
(
true
);
PublicApi
.
getAsRepairGoodsGetDetailByConsumer
({
repairId
:
id
,
}).
then
(
res
=>
{
if
(
res
.
code
===
1000
)
{
const
{
repairAddress
,
faultFileList
,
supplierName
,
parentMemberId
,
parentMemberRoleId
,
...
rest
}
=
res
.
data
;
addSchemaAction
.
setFieldState
(
'*(supplierMember)'
,
state
=>
{
state
.
props
[
'x-component-props'
].
disabled
=
true
;
}
);
setDetailInfo
({
...
detailInfo
,
faultFileList
:
faultFileList
.
map
(
item
=>
normalizeFiledata
(
item
.
filePath
)),
repairAddress
:
isJSONStr
(
repairAddress
)
||
null
,
supplierMember
:
supplierName
?
[
{
name
:
supplierName
,
memberId
:
parentMemberId
,
roleId
:
parentMemberRoleId
,
},
]
:
[]
,
...
rest
,
});
}
}).
finally
(()
=>
{
setInfoLoading
(
false
);
});
};
// 获取维修明细列表
const
getRepairGoods
=
()
=>
{
if
(
!
id
)
{
return
;
}
setRepairGoodsLoading
(
true
);
PublicApi
.
getAsRepairGoodsPageRepairGoods
({
repairId
:
id
,
current
:
`
${
1
}
`
,
pageSize
:
`
${
99999
}
`
,
}).
then
(
res
=>
{
if
(
res
.
code
===
1000
)
{
setRepairGoodsList
(
res
.
data
);
setRepairGoodsList
({
data
:
res
.
data
.
data
.
map
(
item
=>
({
...
item
,
extraData
:
{
id
:
item
.
orderRecordId
,
orderId
:
item
.
orderId
,
repairedCount
:
item
.
purchaseCount
||
0
,
// 已维修数量,这里取 采购数量判断即可
},
})),
totalCount
:
res
.
data
.
totalCount
,
});
setGoodsValue
(
res
.
data
&&
res
.
data
.
data
?
res
.
data
.
data
.
map
(
item
=>
item
.
orderRecordId
)
:
[]);
}
}).
finally
(()
=>
{
setRepairGoodsLoading
(
false
);
});
};
// 根据供应会员获取订单列表
const
getOrderList
=
(
params
):
Promise
<
OrderListRes
>
=>
{
const
supplierMemberValue
=
addSchemaAction
.
getFieldValue
(
'supplierMember'
);
return
new
Promise
((
resolve
,
reject
)
=>
{
PublicApi
.
getOrderOneBatchOrderList
({
...
params
,
supplyMembersId
:
supplierMemberValue
[
0
].
memberId
,
supplyMembersRoleId
:
supplierMemberValue
[
0
].
roleId
,
}).
then
(
res
=>
{
if
(
res
.
code
===
1000
)
{
resolve
(
res
.
data
);
}
reject
();
}).
catch
(()
=>
{
reject
();
});
});
};
useEffect
(()
=>
{
getDetailInfo
();
getRepairGoods
();
},
[]);
const
handleAddGoods
=
()
=>
{
const
supplierMemberValue
=
addSchemaAction
.
getFieldValue
(
'supplierMember'
);
if
(
!
supplierMemberValue
||
!
supplierMemberValue
.
length
)
{
message
.
error
(
'请先选择供应会员'
);
return
;
}
setVisibleDrawer
(
true
);
};
const
TableAddButton
=
isEdit
||
!
id
?
(
<
Button
style=
{
{
marginBottom
:
16
}
}
block
icon=
{
<
PlusOutlined
/>
}
onClick=
{
handleAddGoods
}
type=
"dashed"
>
选择维修商品
</
Button
>
)
:
null
;
const
handleSubmit
=
values
=>
{
const
{
supplierMember
,
faultFileList
=
[],
repairGoodsList
,
repairAddress
,
...
rest
}
=
values
;
setSubmitLoading
(
true
);
const
payload
=
{
repairId
:
id
||
0
,
// 有 id 表示编辑,0表示新增
supplierMemberId
:
supplierMember
[
0
].
memberId
,
supplierRoleId
:
supplierMember
[
0
].
roleId
,
supplierName
:
supplierMember
[
0
].
name
,
repairAddress
:
repairAddress
?
JSON
.
stringify
(
repairAddress
)
:
''
,
faultFileList
:
faultFileList
.
filter
(
item
=>
item
.
status
===
'done'
).
map
(
item
=>
({
fileName
:
item
.
name
,
filePath
:
item
.
data
.
url
,
})),
repairGoodsList
:
repairGoodsList
.
map
(({
repairCount
,
brand
,
unit
,
extraData
,
...
rest
})
=>
({
orderId
:
extraData
.
orderId
,
orderRecordId
:
extraData
.
id
,
repairCount
:
+
repairCount
,
brand
:
brand
||
''
,
unit
:
unit
||
''
,
...
rest
,
})),
...
rest
,
};
PublicApi
.
postAsRepairGoodsSave
(
payload
)
.
then
(
res
=>
{
if
(
res
.
code
===
1000
)
{
setUnsaved
(
false
);
setTimeout
(()
=>
{
history
.
goBack
();
},
800
);
}
})
.
finally
(()
=>
{
setSubmitLoading
(
false
);
});
};
// 删除维修商品项
const
handleRemoveItem
=
(
index
:
number
)
=>
{
const
newGoodsValue
=
[...
goodsValue
];
const
newValue
=
[...
addSchemaAction
.
getFieldValue
(
'repairGoodsList'
)];
const
deleted
=
newValue
.
splice
(
index
,
1
);
addSchemaAction
.
setFieldValue
(
'repairGoodsList'
,
newValue
);
newGoodsValue
.
splice
(
newGoodsValue
.
findIndex
(
item
=>
item
===
deleted
[
0
].
id
),
1
);
setGoodsValue
(
newGoodsValue
);
};
// ArrayTable自定义渲染
const
renderListTableRemove
=
(
index
:
number
)
=>
(
<
Button
shape=
"circle"
icon=
{
<
DeleteOutlined
/>
}
onClick=
{
()
=>
handleRemoveItem
(
index
)
}
/>
);
const
beforeUpload
=
file
=>
{
if
(
file
.
size
/
1024
/
1024
>
20
)
{
message
.
warning
(
'图片大小超过20M'
);
return
Promise
.
reject
();
}
};
const
handleGoodsConfirm
=
values
=>
{
const
preValues
=
addSchemaAction
.
getFieldValue
(
'repairGoodsList'
);
const
value
=
[];
values
.
forEach
(
item
=>
{
const
existing
=
preValues
.
find
(
val
=>
val
.
id
===
item
.
id
);
const
atom
=
existing
?
existing
:
{
orderNo
:
item
.
orderNo
,
productId
:
item
.
productId
,
productName
:
item
.
productName
,
category
:
item
.
category
,
brand
:
item
.
brand
,
unit
:
item
.
unit
,
purchaseCount
:
item
.
purchaseCount
,
repairReason
:
''
,
extraData
:
{
id
:
item
.
id
,
orderId
:
item
.
orderId
,
repairedCount
:
item
.
repairCount
||
item
.
purchaseCount
||
0
,
// 已维修数量
},
};
value
.
push
(
atom
);
});
addSchemaAction
.
setFieldValue
(
'repairGoodsList'
,
value
);
};
const
handleGoodsChange
=
values
=>
{
setGoodsValue
(
values
);
};
const
OuterStatus
=
(
<
StatusTag
type=
{
REPAIR_OUTER_STATUS_TAG_MAP
[
detailInfo
?.
outerStatus
]
}
title=
{
detailInfo
?.
outerStatusName
}
/>
);
const
InnerStatus
=
(
<
Badge
color=
{
REPAIR_INNER_STATUS_BADGE_MAP
[
detailInfo
?.
innerStatus
]
}
text=
{
detailInfo
?.
innerStatusName
}
/>
);
return
(
<
Spin
spinning=
{
infoLoading
||
repairGoodsLoading
}
>
<
PageHeaderWrapper
style=
{
{
padding
:
24
,
}
}
onBack=
{
()
=>
history
.
goBack
()
}
backIcon=
{
<
ReutrnEle
description=
"返回"
/>
}
title=
{
!
id
?
'新建维修申请单'
:
isEdit
?
'编辑维修申请单'
:
'查看维修申请单'
}
extra=
{
(
isEdit
||
!
id
)
?
[
<
Button
key=
"1"
type=
"primary"
icon=
{
<
SaveOutlined
/>
}
loading=
{
submitLoading
}
onClick=
{
()
=>
addSchemaAction
.
submit
()
}
>
保存
</
Button
>,
]
:
[]
}
>
<
Card
>
<
NiceForm
initialValues=
{
{
...
detailInfo
,
repairGoodsList
:
repairGoodsList
.
data
,
}
}
expressionScope=
{
{
TableAddButton
,
OuterStatus
,
InnerStatus
,
renderListTableRemove
,
beforeUpload
,
}
}
components=
{
{
ArrayTable
,
AddressFormItem
,
}
}
editable=
{
isEdit
||
!
id
}
effects=
{
(
$
,
actions
)
=>
{
createEffects
(
$
,
actions
)
onFormInputChange$
().
subscribe
(()
=>
{
if
(
!
unsaved
)
{
setUnsaved
(
true
);
}
});
}
}
onSubmit=
{
handleSubmit
}
actions=
{
addSchemaAction
}
schema=
{
addBillSchema
}
/>
</
Card
>
<
GoodsDrawer
type=
{
4
}
visible=
{
visibleDrawer
}
fetchOrderList=
{
getOrderList
}
onClose=
{
()
=>
setVisibleDrawer
(
false
)
}
onConfirm=
{
handleGoodsConfirm
}
checked=
{
goodsValue
}
onChange=
{
handleGoodsChange
}
/>
<
Prompt
when=
{
unsaved
}
message=
"您还有未保存的内容,是否确定要离开?"
/>
</
PageHeaderWrapper
>
</
Spin
>
);
};
export
default
RepairForm
;
import
React
,
{
useState
,
useEffect
,
useRef
}
from
'react'
;
import
{
Button
,
Card
,
Spin
,
Badge
,
message
}
from
'antd'
;
import
{
DeleteOutlined
}
from
'@ant-design/icons'
;
import
{
Radio
,
ArrayTable
}
from
'@formily/antd-components'
;
import
{
history
,
Prompt
}
from
'umi'
;
import
moment
from
'moment'
;
import
{
PageHeaderWrapper
}
from
'@ant-design/pro-layout'
;
import
{
SaveOutlined
,
PlusOutlined
}
from
'@ant-design/icons'
;
import
{
createFormActions
,
FormEffectHooks
}
from
'@formily/antd'
;
import
{
PublicApi
}
from
'@/services/api'
;
import
{
GetAsRepairGoodsPageRepairGoodsResponse
}
from
'@/services/AfterServiceApi'
;
import
{
normalizeFiledata
,
FileData
,
isJSONStr
}
from
'@/utils'
;
import
ReutrnEle
from
'@/components/ReturnEle'
;
import
NiceForm
from
'@/components/NiceForm'
;
import
StatusTag
from
'@/components/StatusTag'
;
import
GoodsDrawer
from
'../../../../components/GoodsDrawer'
;
import
{
OrderListRes
}
from
'../../../../components/GoodsDrawer/interface'
;
import
AddressFormItem
from
'../../../../components/AddressFormItem'
;
import
{
addBillSchema
}
from
'./schema'
;
import
{
createEffects
}
from
'./effects'
;
import
{
REPAIR_OUTER_STATUS_TAG_MAP
,
REPAIR_INNER_STATUS_BADGE_MAP
,
}
from
'../../../../constants'
;
const
addSchemaAction
=
createFormActions
();
const
{
onFormInputChange$
,
}
=
FormEffectHooks
;
interface
DetailInfo
{
applyTime
:
string
;
faultFileList
?:
FileData
[];
repairAddress
?:
{
[
key
:
string
]:
any
}[];
supplierMember
?:
{},
outerStatus
?:
number
,
outerStatusName
?:
string
,
innerStatus
?:
number
,
innerStatusName
?:
string
,
}
interface
BillsFormProps
{
id
?:
string
;
// 是否是编辑的
isEdit
?:
boolean
;
};
const
RepairForm
:
React
.
FC
<
BillsFormProps
>
=
({
id
,
isEdit
=
false
,
})
=>
{
const
[
detailInfo
,
setDetailInfo
]
=
useState
<
DetailInfo
>
({
applyTime
:
moment
().
format
(
'YYYY-MM-DD HH:mm:ss'
),
});
const
[
repairGoodsList
,
setRepairGoodsList
]
=
useState
<
GetAsRepairGoodsPageRepairGoodsResponse
>
({
data
:
[],
totalCount
:
0
});
const
[
unsaved
,
setUnsaved
]
=
useState
(
false
);
const
[
infoLoading
,
setInfoLoading
]
=
useState
(
false
);
const
[
repairGoodsLoading
,
setRepairGoodsLoading
]
=
useState
(
false
);
const
[
goodsValue
,
setGoodsValue
]
=
useState
([]);
const
[
submitLoading
,
setSubmitLoading
]
=
useState
(
false
);
const
[
visibleDrawer
,
setVisibleDrawer
]
=
useState
(
false
);
// 获取维修申请详情
const
getDetailInfo
=
()
=>
{
if
(
!
id
)
{
return
;
}
setInfoLoading
(
true
);
PublicApi
.
getAsRepairGoodsGetDetailByConsumer
({
repairId
:
id
,
}).
then
(
res
=>
{
if
(
res
.
code
===
1000
)
{
const
{
repairAddress
,
faultFileList
,
supplierName
,
parentMemberId
,
parentMemberRoleId
,
...
rest
}
=
res
.
data
;
addSchemaAction
.
setFieldState
(
'*(supplierMember)'
,
state
=>
{
state
.
props
[
'x-component-props'
].
disabled
=
true
;
}
);
setDetailInfo
({
...
detailInfo
,
faultFileList
:
faultFileList
.
map
(
item
=>
normalizeFiledata
(
item
.
filePath
)),
repairAddress
:
isJSONStr
(
repairAddress
)
||
null
,
supplierMember
:
supplierName
?
[
{
name
:
supplierName
,
memberId
:
parentMemberId
,
roleId
:
parentMemberRoleId
,
},
]
:
[]
,
...
rest
,
});
}
}).
finally
(()
=>
{
setInfoLoading
(
false
);
});
};
// 获取维修明细列表
const
getRepairGoods
=
()
=>
{
if
(
!
id
)
{
return
;
}
setRepairGoodsLoading
(
true
);
PublicApi
.
getAsRepairGoodsPageRepairGoods
({
repairId
:
id
,
current
:
`
${
1
}
`
,
pageSize
:
`
${
99999
}
`
,
}).
then
(
res
=>
{
if
(
res
.
code
===
1000
)
{
setRepairGoodsList
(
res
.
data
);
setRepairGoodsList
({
data
:
res
.
data
.
data
.
map
(
item
=>
({
...
item
,
extraData
:
{
id
:
item
.
orderRecordId
,
orderId
:
item
.
orderId
,
repairedCount
:
item
.
purchaseCount
||
0
,
// 已维修数量,这里取 采购数量判断即可
},
})),
totalCount
:
res
.
data
.
totalCount
,
});
setGoodsValue
(
res
.
data
&&
res
.
data
.
data
?
res
.
data
.
data
.
map
(
item
=>
item
.
orderRecordId
)
:
[]);
}
}).
finally
(()
=>
{
setRepairGoodsLoading
(
false
);
});
};
// 根据供应会员获取订单列表
const
getOrderList
=
(
params
):
Promise
<
OrderListRes
>
=>
{
const
supplierMemberValue
=
addSchemaAction
.
getFieldValue
(
'supplierMember'
);
return
new
Promise
((
resolve
,
reject
)
=>
{
PublicApi
.
getOrderOneBatchOrderList
({
...
params
,
supplyMembersId
:
supplierMemberValue
[
0
].
memberId
,
supplyMembersRoleId
:
supplierMemberValue
[
0
].
roleId
,
}).
then
(
res
=>
{
if
(
res
.
code
===
1000
)
{
resolve
(
res
.
data
);
}
reject
();
}).
catch
(()
=>
{
reject
();
});
});
};
useEffect
(()
=>
{
getDetailInfo
();
getRepairGoods
();
},
[]);
const
handleAddGoods
=
()
=>
{
const
supplierMemberValue
=
addSchemaAction
.
getFieldValue
(
'supplierMember'
);
if
(
!
supplierMemberValue
||
!
supplierMemberValue
.
length
)
{
message
.
error
(
'请先选择供应会员'
);
return
;
}
setVisibleDrawer
(
true
);
};
const
TableAddButton
=
isEdit
||
!
id
?
(
<
Button
style=
{
{
marginBottom
:
16
}
}
block
icon=
{
<
PlusOutlined
/>
}
onClick=
{
handleAddGoods
}
type=
"dashed"
>
选择维修商品
</
Button
>
)
:
null
;
const
handleSubmit
=
values
=>
{
const
{
supplierMember
,
faultFileList
=
[],
repairGoodsList
,
repairAddress
,
...
rest
}
=
values
;
setSubmitLoading
(
true
);
const
payload
=
{
repairId
:
id
||
0
,
// 有 id 表示编辑,0表示新增
supplierMemberId
:
supplierMember
[
0
].
memberId
,
supplierRoleId
:
supplierMember
[
0
].
roleId
,
supplierName
:
supplierMember
[
0
].
name
,
repairAddress
:
repairAddress
?
JSON
.
stringify
(
repairAddress
)
:
''
,
faultFileList
:
faultFileList
.
filter
(
item
=>
item
.
status
===
'done'
).
map
(
item
=>
({
fileName
:
item
.
name
,
filePath
:
item
.
data
.
url
,
})),
repairGoodsList
:
repairGoodsList
.
map
(({
repairCount
,
brand
,
unit
,
extraData
,
...
rest
})
=>
({
orderId
:
extraData
.
orderId
,
orderRecordId
:
extraData
.
id
,
repairCount
:
+
repairCount
,
brand
:
brand
||
''
,
unit
:
unit
||
''
,
...
rest
,
})),
...
rest
,
};
PublicApi
.
postAsRepairGoodsSave
(
payload
)
.
then
(
res
=>
{
if
(
res
.
code
===
1000
)
{
setUnsaved
(
false
);
setTimeout
(()
=>
{
history
.
goBack
();
},
800
);
}
})
.
finally
(()
=>
{
setSubmitLoading
(
false
);
});
};
// 删除维修商品项
const
handleRemoveItem
=
(
index
:
number
)
=>
{
const
newGoodsValue
=
[...
goodsValue
];
const
newValue
=
[...
addSchemaAction
.
getFieldValue
(
'repairGoodsList'
)];
const
deleted
=
newValue
.
splice
(
index
,
1
);
addSchemaAction
.
setFieldValue
(
'repairGoodsList'
,
newValue
);
newGoodsValue
.
splice
(
newGoodsValue
.
findIndex
(
item
=>
item
===
deleted
[
0
].
id
),
1
);
setGoodsValue
(
newGoodsValue
);
};
// ArrayTable自定义渲染
const
renderListTableRemove
=
(
index
:
number
)
=>
(
<
Button
shape=
"circle"
icon=
{
<
DeleteOutlined
/>
}
onClick=
{
()
=>
handleRemoveItem
(
index
)
}
/>
);
const
beforeUpload
=
file
=>
{
if
(
file
.
size
/
1024
/
1024
>
20
)
{
message
.
warning
(
'图片大小超过20M'
);
return
Promise
.
reject
();
}
};
const
handleGoodsConfirm
=
values
=>
{
const
preValues
=
addSchemaAction
.
getFieldValue
(
'repairGoodsList'
);
const
value
=
[];
values
.
forEach
(
item
=>
{
const
existing
=
preValues
.
find
(
val
=>
val
.
id
===
item
.
id
);
const
atom
=
existing
?
existing
:
{
orderNo
:
item
.
orderNo
,
productId
:
item
.
productId
,
productName
:
item
.
productName
,
category
:
item
.
category
,
brand
:
item
.
brand
,
unit
:
item
.
unit
,
purchaseCount
:
item
.
purchaseCount
,
repairReason
:
''
,
extraData
:
{
id
:
item
.
id
,
orderId
:
item
.
orderId
,
repairedCount
:
item
.
repairCount
||
item
.
purchaseCount
||
0
,
// 已维修数量
},
};
value
.
push
(
atom
);
});
addSchemaAction
.
setFieldValue
(
'repairGoodsList'
,
value
);
};
const
handleGoodsChange
=
values
=>
{
setGoodsValue
(
values
);
};
const
OuterStatus
=
(
<
StatusTag
type=
{
REPAIR_OUTER_STATUS_TAG_MAP
[
detailInfo
?.
outerStatus
]
}
title=
{
detailInfo
?.
outerStatusName
}
/>
);
const
InnerStatus
=
(
<
Badge
color=
{
REPAIR_INNER_STATUS_BADGE_MAP
[
detailInfo
?.
innerStatus
]
}
text=
{
detailInfo
?.
innerStatusName
}
/>
);
return
(
<
Spin
spinning=
{
infoLoading
||
repairGoodsLoading
}
>
<
PageHeaderWrapper
style=
{
{
padding
:
24
,
}
}
onBack=
{
()
=>
history
.
goBack
()
}
backIcon=
{
<
ReutrnEle
description=
"返回"
/>
}
title=
{
!
id
?
'新建维修申请单'
:
isEdit
?
'编辑维修申请单'
:
'查看维修申请单'
}
extra=
{
(
isEdit
||
!
id
)
?
[
<
Button
key=
"1"
type=
"primary"
icon=
{
<
SaveOutlined
/>
}
loading=
{
submitLoading
}
onClick=
{
()
=>
addSchemaAction
.
submit
()
}
>
保存
</
Button
>,
]
:
[]
}
>
<
Card
>
<
NiceForm
value=
{
{
...
detailInfo
,
repairGoodsList
:
repairGoodsList
.
data
,
}
}
expressionScope=
{
{
TableAddButton
,
OuterStatus
,
InnerStatus
,
renderListTableRemove
,
beforeUpload
,
}
}
components=
{
{
ArrayTable
,
AddressFormItem
,
}
}
editable=
{
isEdit
||
!
id
}
effects=
{
(
$
,
actions
)
=>
{
createEffects
(
$
,
actions
)
onFormInputChange$
().
subscribe
(()
=>
{
if
(
!
unsaved
)
{
setUnsaved
(
true
);
}
});
}
}
onSubmit=
{
handleSubmit
}
actions=
{
addSchemaAction
}
schema=
{
addBillSchema
}
/>
</
Card
>
<
GoodsDrawer
type=
{
4
}
visible=
{
visibleDrawer
}
fetchOrderList=
{
getOrderList
}
onClose=
{
()
=>
setVisibleDrawer
(
false
)
}
onConfirm=
{
handleGoodsConfirm
}
checked=
{
goodsValue
}
onChange=
{
handleGoodsChange
}
/>
<
Prompt
when=
{
unsaved
}
message=
"您还有未保存的内容,是否确定要离开?"
/>
</
PageHeaderWrapper
>
</
Spin
>
);
};
export
default
RepairForm
;
src/pages/afterService/returnApplication/returnPrSubmit/components/ReturnForm/effects/useBusinessEffects.ts
View file @
e035996a
/*
* @Author: XieZhiXiong
* @Date: 2020-11-03 18:30:47
* @LastEditors: XieZhiXiong
* @LastEditTime: 2020-12-09 16:18:45
* @Description: 联动逻辑相关
*/
import
{
FormEffectHooks
,
FormPath
}
from
'@formily/antd'
;
import
{
useLinkageUtils
}
from
'@/utils/formEffectUtils'
;
const
{
onFieldInputChange$
,
onFieldValueChange$
,
}
=
FormEffectHooks
;
export
const
useBusinessEffects
=
(
context
,
actions
)
=>
{
const
{
getFieldValue
,
setFieldValue
,
getFieldState
,
setFieldState
,
}
=
actions
;
const
linkage
=
useLinkageUtils
();
// 联动配送方式
onFieldValueChange$
(
'deliveryType'
).
subscribe
(
fieldState
=>
{
const
{
name
,
value
}
=
fieldState
;
switch
(
value
)
{
// 物流
case
1
:
{
linkage
.
show
(
'shippingAddress'
);
linkage
.
hide
(
'pickupAddress'
);
break
;
};
// 自提
case
2
:
{
linkage
.
hide
(
'shippingAddress'
);
linkage
.
show
(
'pickupAddress'
);
break
;
};
// 无需物流
case
3
:
{
linkage
.
hide
(
'*(shippingAddress,pickupAddress)'
);
break
;
};
default
:
break
};
});
/*
* @Author: XieZhiXiong
* @Date: 2020-11-03 18:30:47
* @LastEditors: XieZhiXiong
* @LastEditTime: 2020-12-09 16:18:45
* @Description: 联动逻辑相关
*/
import
{
FormEffectHooks
,
FormPath
}
from
'@formily/antd'
;
import
{
useLinkageUtils
}
from
'@/utils/formEffectUtils'
;
const
{
onFieldInputChange$
,
onFieldValueChange$
,
}
=
FormEffectHooks
;
export
const
useBusinessEffects
=
(
context
,
actions
)
=>
{
const
{
getFieldValue
,
setFieldValue
,
getFieldState
,
setFieldState
,
}
=
actions
;
const
linkage
=
useLinkageUtils
();
// 联动配送方式
onFieldValueChange$
(
'deliveryType'
).
subscribe
(
fieldState
=>
{
const
{
name
,
value
}
=
fieldState
;
switch
(
value
)
{
// 物流
case
1
:
{
linkage
.
show
(
'shippingAddress'
);
linkage
.
hide
(
'pickupAddress'
);
break
;
};
// 自提
case
2
:
{
linkage
.
hide
(
'shippingAddress'
);
linkage
.
show
(
'pickupAddress'
);
break
;
};
// 无需物流
case
3
:
{
linkage
.
hide
(
'*(shippingAddress,pickupAddress)'
);
break
;
};
default
:
break
};
});
// 供应会员联动 单据明细
onFieldInputChange$
(
'supplierMember'
).
subscribe
(
fieldState
=>
{
const
replaceGoodsListValue
=
getFieldValue
(
'returnGoodsList'
);
if
(
replaceGoodsListValue
&&
replaceGoodsListValue
.
length
)
{
setFieldValue
(
'returnGoodsList'
,
[]);
}
});
}
\ No newline at end of file
src/pages/afterService/returnApplication/returnPrSubmit/components/ReturnForm/index.tsx
View file @
e035996a
...
...
@@ -557,7 +557,7 @@ const ReturnForm: React.FC<BillsFormProps> = ({
>
<
Card
>
<
NiceForm
initialValues
=
{
{
value
=
{
{
...
detailInfo
,
returnGoodsList
:
returnGoodsList
.
data
,
}
}
...
...
src/pages/afterService/returnManage/components/DetailInfo/index.tsx
View file @
e035996a
...
...
@@ -110,7 +110,7 @@ const DetailInfo: React.FC<DetailInfoProps> = ({
});
PublicApi
.
postAsReturnGoodsSetNeedReturnGoods
({
returnId
:
+
id
,
returnGoodsId
:
record
.
orderRecord
Id
,
returnGoodsId
:
record
.
returnGoods
Id
,
isNeed
:
record
.
isNeedReturn
===
1
?
0
:
1
,
}).
then
(
res
=>
{
if
(
res
.
code
===
1000
)
{
...
...
src/pages/afterService/returnManage/returnPrReturn/index.tsx
View file @
e035996a
...
...
@@ -2,7 +2,7 @@
* @Author: XieZhiXiong
* @Date: 2020-11-05 14:25:41
* @LastEditors: XieZhiXiong
* @LastEditTime: 2020-12-
08 17:32:59
* @LastEditTime: 2020-12-
24 10:04:24
* @Description: 退货申请单查询
*/
import
React
,
{
useState
,
useRef
}
from
'react'
;
...
...
@@ -99,7 +99,7 @@ const ReturnPrReturn: React.FC = () => {
type=
"link"
onClick=
{
()
=>
history
.
push
(
`/memberCenter/afterService/returnManage/returnPrReturn/verify?id=${record.returnId}`
)
}
>
提交审核
退款
</
Button
>
</>
),
...
...
src/pages/transaction/stockSellStorage/bills/components/BillsForm/index.tsx
View file @
e035996a
...
...
@@ -186,7 +186,7 @@ const BillsForm: React.FC<BillsFormProps> = ({
);
setBillInfo
({
transactionTime
:
transactionTime
?
moment
(
transactionTime
).
format
(
'YYYY-MM-DD HH:mm:ss'
)
:
moment
().
format
(
'YYYY-MM-DD HH:mm:ss'
)
,
transactionTime
:
transactionTime
?
moment
(
transactionTime
).
format
(
'YYYY-MM-DD HH:mm:ss'
)
:
''
,
orderNo
:
relevanceInvoicesId
?
[
...
...
@@ -1656,7 +1656,7 @@ const BillsForm: React.FC<BillsFormProps> = ({
>
<
Card
>
<
NiceForm
initialValues
=
{
billInfo
}
value
=
{
billInfo
}
expressionScope=
{
{
TableAddButton
,
renderListTableRemove
,
...
...
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