Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
A
admin-ci-test
概览
概览
详情
活动
周期分析
版本库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
test-ci
admin-ci-test
Commits
41cc802b
提交
41cc802b
authored
10月 12, 2023
作者:
龚洪江
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
功能:破损信息展示
上级
d91b2c60
显示空白字符变更
内嵌
并排
正在显示
4 个修改的文件
包含
184 行增加
和
15 行删除
+184
-15
orderManageType.ts
src/api/interface/orderManageType.ts
+56
-0
index.tsx
...s/orderManage/equipmentOrder/comp/confirmReturn/index.tsx
+75
-8
index.tsx
...orderManage/equipmentOrder/comp/detailPurchaser/index.tsx
+35
-3
index.tsx
src/pages/orderManage/equipmentOrder/index.tsx
+18
-4
没有找到文件。
src/api/interface/orderManageType.ts
浏览文件 @
41cc802b
...
...
@@ -1716,6 +1716,41 @@ type rentReqType = {
*/
status
?:
number
;
};
storeDamageOrder
?:
{
/**
* 创建时间
*/
createTime
?:
Date
;
/**
* 物流编号
*/
expressCode
?:
string
;
/**
* 快递单号
*/
expressNum
?:
string
;
/**
* 图片文件
*/
file
?:
string
;
/**
* id
*/
id
?:
number
;
/**
* 订单id
*/
leaseOrderId
?:
number
;
/**
* 退款原因
*/
reason
?:
string
;
/**
* 归还状态:0已归还 1无需归还
*/
status
?:
number
;
modifiedDeposit
?:
number
;
};
confirmReceipt
?:
{
/**
* 创建时间
...
...
@@ -2017,6 +2052,26 @@ export type rentPfConfirmOrderWareType = InterFunction<
*/
damage
?:
number
;
/**
* 扣除的押金
*/
deductionAmount
?:
number
;
/**
* 物流编码
*/
expressCode
?:
string
;
/**
* 物流单号
*/
expressNum
?:
string
;
/**
* 图片文件
*/
file
?:
string
;
/**
* id
*/
id
?:
number
;
/**
* 订单id
*/
orderId
?:
number
;
...
...
@@ -2027,6 +2082,7 @@ export type rentPfConfirmOrderWareType = InterFunction<
/**
* 归还状态 0已归还 1无需归还(注:发货后申请退款需要传,归还商品的时候不需要)
*/
status
?:
number
;
},
any
>
;
src/pages/orderManage/equipmentOrder/comp/confirmReturn/index.tsx
浏览文件 @
41cc802b
import
{
Form
,
Input
,
Modal
,
ModalProps
,
Radio
,
RadioChangeEvent
,
Button
,
message
}
from
'antd'
;
import
{
Form
,
Input
,
Modal
,
ModalProps
,
Radio
,
RadioChangeEvent
,
Button
,
message
,
InputNumber
,
}
from
'antd'
;
import
React
,
{
FC
,
useState
}
from
'react'
;
import
{
InterDataType
}
from
'~/api/interface'
;
import
{
rentOrderDetailType
}
from
'~/api/interface/orderManageType'
;
import
LogisticsStepModal
from
'~/components/order/productOrder/logisticsStepModal'
;
import
{
OrderManageAPI
}
from
'~/api'
;
import
{
UploadOutlined
}
from
'@ant-design/icons'
;
import
{
UploadFile
}
from
'antd/es/upload/interface'
;
import
{
Uploader
}
from
'~/components/uploader'
;
import
{
isEmptyBol
}
from
'~/utils/validateUtils'
;
// 租赁订单详情返回类型
type
detailType
=
InterDataType
<
rentOrderDetailType
>
;
...
...
@@ -23,11 +37,12 @@ const ConfirmReturn: FC<ModalProps & selfProps> = ({
modalTitle
,
})
=>
{
const
[
form
]
=
Form
.
useForm
<
{
damage
:
number
;
reason
:
string
}
>
();
const
[
is
ShowReason
,
setIsShowReas
on
]
=
useState
<
boolean
>
(
false
);
const
[
is
Dilapidation
,
setIsDilapidati
on
]
=
useState
<
boolean
>
(
false
);
const
[
logisticsStepModalShow
,
setLogisticsStepModalShow
]
=
useState
<
boolean
>
(
false
);
const
[
dilapidationImgList
,
setDilapidationImgList
]
=
useState
<
UploadFile
[]
>
([]);
const
radioChangeEvent
=
(
e
:
RadioChangeEvent
)
=>
{
setIs
ShowReas
on
(
!!
e
.
target
.
value
);
setIs
Dilapidati
on
(
!!
e
.
target
.
value
);
};
// 物流弹窗
const
logisticsStepModalShowClick
=
()
=>
{
...
...
@@ -46,7 +61,8 @@ const ConfirmReturn: FC<ModalProps & selfProps> = ({
if
(
code
===
'200'
)
{
message
.
success
(
'确认归还成功'
);
form
.
resetFields
();
setIsShowReason
(
false
);
setDilapidationImgList
([]);
setIsDilapidation
(
false
);
onOk
();
}
});
...
...
@@ -55,7 +71,31 @@ const ConfirmReturn: FC<ModalProps & selfProps> = ({
const
handleCancel
=
()
=>
{
onCancel
();
form
.
resetFields
();
setIsShowReason
(
false
);
setDilapidationImgList
([]);
setIsDilapidation
(
false
);
};
// 破损图片上传
const
uploadDilapidationImg
=
(
value
:
any
)
=>
{
setDilapidationImgList
(
value
);
form
.
setFieldValue
(
'file'
,
JSON
.
stringify
(
value
.
map
((
v
:
any
)
=>
v
.
url
)));
};
// 破损金额限制
const
priceValidator
=
(
_rule
:
any
,
value
:
any
,
callback
:
any
)
=>
{
if
(
isEmptyBol
(
value
))
{
return
callback
(
new
Error
(
'金额不能为空'
));
}
if
(
value
<
0
)
{
return
callback
(
new
Error
(
'金额不能小于0'
));
}
if
(
value
>
(
currentOrderItem
?.
deposit
||
0
)
*
(
currentOrderItem
?.
wareNum
||
0
))
{
return
callback
(
new
Error
(
`金额不能大于
${(
currentOrderItem
?.
deposit
||
0
)
*
(
currentOrderItem
?.
wareNum
||
0
)}
`,
),
);
}
callback();
};
return (
...
...
@@ -67,10 +107,37 @@ const ConfirmReturn: FC<ModalProps & selfProps> = ({
<Radio value={1}>破损</Radio>
</Radio.Group>
</Form.Item>
{
isShowReason
?
(
<
Form
.
Item
label=
'原因'
name=
'reason'
>
<
Input
.
TextArea
placeholder=
'请输入原因'
maxLength=
{
70
}
showCount
rows=
{
3
}
/>
{isDilapidation ? (
<>
<Form.Item
label='扣除金额'
name='deductionAmount'
rules={[{ required: true, validator: priceValidator }]}
>
<InputNumber placeholder='请输入抵扣金额' style={{ width: '200px' }} />
</Form.Item>
<Form.Item
label='破损图片'
name='file'
rules={[{ required: true, message: '请上传破损图片' }]}
>
<Uploader
listType='picture-card'
fileUpload
onChange={uploadDilapidationImg}
defaultFileList={dilapidationImgList}
>
<UploadOutlined />
</Uploader>
</Form.Item>
<Form.Item
label='破损描述'
name='reason'
rules={[{ required: true, message: '请输入破损描述' }]}
>
<Input.TextArea placeholder='请输入破损描述' maxLength={70} showCount rows={3} />
</Form.Item>
</>
) : (
''
)}
...
...
src/pages/orderManage/equipmentOrder/comp/detailPurchaser/index.tsx
浏览文件 @
41cc802b
...
...
@@ -92,9 +92,10 @@ const DetailPurchaser: React.FC<PropsType> = (props) => {
</
div
>
</>
)
}
{
detail
?.
confirmReceipt
?.
file
?
(
{
detail
?.
confirmReceipt
?
(
<
div
>
<
div
className=
'detail-title'
>
收货信息
</
div
>
{
detail
?.
confirmReceipt
.
file
?
(
<
div
className=
'detail-text'
style=
{
{
display
:
'flex'
}
}
>
<
span
>
图片:
</
span
>
<
div
...
...
@@ -103,11 +104,15 @@ const DetailPurchaser: React.FC<PropsType> = (props) => {
>
{
JSON
.
parse
(
detail
?.
confirmReceipt
.
file
).
map
((
v
:
any
,
index
:
number
)
=>
(
<
div
style=
{
{
marginRight
:
'10px'
,
marginBottom
:
'10px'
}
}
key=
{
index
}
>
<
Image
src=
{
v
.
filePath
}
width=
{
50
}
height=
{
50
}
/>
<
Image
src=
{
v
}
width=
{
50
}
height=
{
50
}
/>
</
div
>
))
}
</
div
>
</
div
>
)
:
(
''
)
}
<
div
className=
'detail-text'
>
描述:
{
detail
?.
confirmReceipt
.
reason
}
</
div
>
</
div
>
)
:
(
''
...
...
@@ -132,7 +137,34 @@ const DetailPurchaser: React.FC<PropsType> = (props) => {
)
:
(
''
)
}
{
detail
?.
storeDamageOrder
?
(
<
div
>
<
div
className=
'detail-title'
>
破损信息
</
div
>
{
detail
?.
storeDamageOrder
.
file
?
(
<
div
className=
'detail-text'
style=
{
{
display
:
'flex'
}
}
>
<
span
>
图片:
</
span
>
<
div
className=
'image-file'
style=
{
{
display
:
'flex'
,
alignItems
:
'center'
,
flexWrap
:
'wrap'
}
}
>
{
JSON
.
parse
(
detail
?.
storeDamageOrder
.
file
).
map
((
v
:
any
,
index
:
number
)
=>
(
<
div
style=
{
{
marginRight
:
'10px'
,
marginBottom
:
'10px'
}
}
key=
{
index
}
>
<
Image
src=
{
v
}
width=
{
50
}
height=
{
50
}
/>
</
div
>
))
}
</
div
>
</
div
>
)
:
(
''
)
}
<
div
className=
'detail-text'
>
扣除金额:¥
{
detail
?.
storeDamageOrder
.
modifiedDeposit
.
toLocaleString
()
}
</
div
>
<
div
className=
'detail-text'
>
描述:
{
detail
?.
storeDamageOrder
.
reason
}
</
div
>
</
div
>
)
:
(
''
)
}
<
LogisticsStepModal
open=
{
logisticsStepModalShow
}
onCancel=
{
logisticsStepModalCancel
}
...
...
src/pages/orderManage/equipmentOrder/index.tsx
浏览文件 @
41cc802b
import
{
useEffect
,
useState
}
from
'react'
;
import
SearchBox
from
'~/components/search-box'
;
import
{
Button
,
Image
,
Table
}
from
'antd'
;
import
{
Button
,
Image
,
Table
,
Tooltip
}
from
'antd'
;
import
{
ColumnsType
}
from
'antd/es/table'
;
import
{
useNavigate
}
from
'react-router-dom'
;
import
qs
from
'query-string'
;
...
...
@@ -13,6 +13,7 @@ import TableItem from '~/components/order/selfTableItem';
import
'./index.scss'
;
import
{
filterObjAttr
}
from
'~/utils'
;
import
dayjs
from
'dayjs'
;
import
{
CommentOutlined
}
from
'@ant-design/icons'
;
// 表格数据类型
type
TableType
=
InterListType
<
rentOrderListType
>
;
...
...
@@ -226,7 +227,19 @@ function EquipmentOrderView() {
<
TableItem
tr=
{
<
div
>
<
div
>
{
record
.
userName
}
</
div
>
<
div
>
{
record
.
userName
||
record
.
nickname
}
(
{
record
.
userAccountId
}
)
</
div
>
<
div
>
{
record
.
phoneNum
}
</
div
>
{
record
.
userRemark
?
(
<
div
>
<
Tooltip
placement=
'top'
title=
{
record
.
userRemark
}
>
<
Button
icon=
{
<
CommentOutlined
/>
}
></
Button
>
</
Tooltip
>
</
div
>
)
:
(
''
)
}
</
div
>
}
/>
...
...
@@ -236,6 +249,7 @@ function EquipmentOrderView() {
title
:
'订单状态'
,
dataIndex
:
'statusCode'
,
align
:
'center'
,
width
:
'10%'
,
render
:
(
text
:
number
)
=>
(
<
TableItem
tr=
{
tranStatusList
.
find
((
v
)
=>
v
.
value
===
String
(
text
))?.
label
}
/>
),
...
...
@@ -402,8 +416,8 @@ function EquipmentOrderView() {
<
ShipmentsOrder
open=
{
deliverVisible
}
currentOrderItem=
{
currentOrderItem
}
onCancel=
{
shipmentsOrder
Ok
}
onOk=
{
shipmentsOrder
Cancel
}
onCancel=
{
shipmentsOrder
Cancel
}
onOk=
{
shipmentsOrder
Ok
}
/>
{
/*确认归还*/
}
<
ConfirmReturn
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论