修复已知问题

This commit is contained in:
2025-06-07 12:22:27 +08:00
parent 7ff3e3f064
commit de0f6c43b1
9 changed files with 285 additions and 345 deletions

View File

@@ -1,37 +1,55 @@
import {useEffect, useState} from "react";
import {InfiniteLoading, Loading, Empty, Button, Input} from '@nutui/nutui-react-taro'
import {Search, Plus} from '@nutui/icons-react-taro'
import React, {useEffect, useState} from "react";
import {
Loading,
Empty,
Button,
Input,
Tag,
Image,
Space
} from '@nutui/nutui-react-taro'
import {Search, Calendar, Truck, File} from '@nutui/icons-react-taro'
import Taro from '@tarojs/taro'
import {pageHjmCar} from "@/api/hjm/hjmCar";
import {HjmCar} from "@/api/hjm/hjmCar/model";
import BestSellers from "./BestSellers";
import {pageHjmBxLog} from "@/api/hjm/hjmBxLog";
import {HjmBxLog} from "@/api/hjm/hjmBxLog/model";
/**
* 一键报险 - 车辆列表页面
* @constructor
* 报险记录列表页面
*/
const InsuranceList = () => {
const [list, setList] = useState<HjmCar[]>([])
const Bx: React.FC = () => {
const [list, setList] = useState<HjmBxLog[]>([])
const [loading, setLoading] = useState<boolean>(false)
const [keywords, setKeywords] = useState<string>('')
const [refreshing, setRefreshing] = useState<boolean>(false)
console.log(refreshing)
// 获取状态显示
const getStatusDisplay = (status?: number) => {
switch (status) {
case 0:
return {text: '待审核', color: '#faad14', bgColor: '#fffbe6'}
case 1:
return {text: '已通过', color: '#52c41a', bgColor: '#f6ffed'}
case 2:
return {text: '已驳回', color: '#ff4d4f', bgColor: '#fff2f0'}
default:
return {text: '未知', color: '#8c8c8c', bgColor: '#f5f5f5'}
}
}
const reload = async (showLoading = true) => {
try {
if (showLoading) setLoading(true)
setRefreshing(true)
// 获取车辆列表 - 只获取正常状态的车辆
const res = await pageHjmCar({
status: 1,
keywords: keywords.trim() || undefined
const res = await pageHjmBxLog({
keywords: keywords.trim()
})
setList(res?.list || [])
} catch (error) {
console.error('获取车辆列表失败:', error)
console.error('获取报险记录失败:', error)
Taro.showToast({
title: '获取车辆列表失败',
title: '获取报险记录失败',
icon: 'error'
})
} finally {
@@ -54,6 +72,12 @@ const InsuranceList = () => {
})
}
const viewDetail = (item: HjmBxLog) => {
Taro.navigateTo({
url: `/hjm/bx/bx-detail?id=${item.id}`
})
}
useEffect(() => {
reload()
}, [])
@@ -66,6 +90,7 @@ const InsuranceList = () => {
top: '20px',
left: 0,
right: 0,
display: "none",
zIndex: 20,
padding: '0 16px',
backgroundColor: '#f5f5f5'
@@ -80,7 +105,7 @@ const InsuranceList = () => {
}}>
<Search size={16} color="#999"/>
<Input
placeholder="搜索车辆编号或快递公司"
placeholder="搜索报险记录"
value={keywords}
onChange={onKeywordsChange}
onConfirm={onSearch}
@@ -102,9 +127,9 @@ const InsuranceList = () => {
</div>
</div>
{/* 车辆列表 */}
{/* 报险记录列表 */}
<div style={{
marginTop: '80px',
marginTop: '10px',
paddingBottom: '80px'
}}>
{loading && list.length === 0 ? (
@@ -117,19 +142,122 @@ const InsuranceList = () => {
<Loading type="spinner">...</Loading>
</div>
) : list.length === 0 ? (
<Empty description="暂无车辆数据">
<Button type="primary" onClick={() => reload()}>
<Empty description="暂无报险记录">
<Button type="primary" onClick={onAddInsurance}>
</Button>
</Empty>
) : (
<InfiniteLoading
style={{width: '100%'}}
hasMore={false}
onLoadMore={() => {}}
>
<BestSellers data={list} onRefresh={() => reload(false)}/>
</InfiniteLoading>
<div style={{padding: '0 16px'}}>
{list.map((item, index) => {
const statusDisplay = getStatusDisplay(item.status)
return (
<div
key={index}
style={{
backgroundColor: '#fff',
borderRadius: '12px',
padding: '16px',
marginBottom: '12px',
boxShadow: '0 2px 8px rgba(0,0,0,0.06)',
border: '1px solid #f0f0f0'
}}
onClick={() => viewDetail(item)}
>
<div style={{
display: 'flex',
justifyContent: 'space-between',
alignItems: 'flex-start',
marginBottom: '12px'
}}>
<div style={{flex: 1}}>
<div style={{
display: 'flex',
alignItems: 'center',
gap: '8px',
marginBottom: '8px'
}}>
<File size={16} color="#1890ff"/>
<span style={{
fontSize: '16px',
fontWeight: 'bold',
color: '#262626'
}}>
#{item.id}
</span>
</div>
<Space direction="vertical">
<div style={{
display: 'flex',
alignItems: 'center',
gap: '8px'
}}>
<Truck size={14} color="#8c8c8c"/>
<span style={{fontSize: '13px', color: '#8c8c8c'}}>
{item.carNo}
</span>
</div>
<div style={{
display: 'flex',
alignItems: 'center',
gap: '8px'
}}>
<Calendar size={14} color="#8c8c8c"/>
<span style={{fontSize: '13px', color: '#8c8c8c'}}>
{item.createTime}
</span>
</div>
</Space>
</div>
<Tag
color={statusDisplay.color}
style={{
backgroundColor: statusDisplay.bgColor,
border: `1px solid ${statusDisplay.color}`,
fontSize: '12px'
}}
>
{statusDisplay.text}
</Tag>
</div>
{/* 事故照片预览 */}
{item.image && (
<div style={{marginBottom: '12px'}}>
<Image
src={item.image}
width="60"
height="60"
radius="6px"
mode="aspectFill"
/>
</div>
)}
{/* 备注信息 */}
{item.comments && (
<div style={{
backgroundColor: '#f8f9fa',
padding: '8px 12px',
borderRadius: '6px',
fontSize: '13px',
color: '#595959',
lineHeight: '1.4'
}}>
{item.comments.length > 50
? `${item.comments.substring(0, 50)}...`
: item.comments
}
</div>
)}
</div>
)
})}
</div>
)}
</div>
@@ -152,11 +280,11 @@ const InsuranceList = () => {
boxShadow: '0 4px 12px rgba(0,0,0,0.15)'
}}
>
<Plus size={24}/>
+
</Button>
</div>
</>
)
}
export default InsuranceList
export default Bx