Files
template-10519/src/hjm/list.tsx
赵忠林 96b75c6cab fix(user): 优化实名认证审核流程并修复权限控制问题
- 重构 onPass 和 onReject 方法,添加异常处理和 Promise 确保操作顺序
- 修复实名认证状态显示问题,当 statusText 为空时显示默认状态文本
- 更新权限检查逻辑,将固定存储检查改为角色权限动态验证
- 修复组织机构筛选逻辑,区分站点角色和商户角色的数据权限范围
- 添加商户角色的多组织机构查询支持,完善数据隔离机制
2026-01-13 15:29:12 +08:00

160 lines
4.0 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import {useEffect, useState, CSSProperties} from "react";
import {Search} from '@nutui/icons-react-taro'
import {Button, Input, InfiniteLoading} from '@nutui/nutui-react-taro'
import {pageHjmCar} from "@/api/hjm/hjmCar";
import {HjmCar} from "@/api/hjm/hjmCar/model";
import Taro from '@tarojs/taro'
import './location.scss'
import BestSellers from "./BestSellers";
import {getUserInfo} from "@/api/layout";
const InfiniteUlStyle: CSSProperties = {
height: '80vh',
width: '100%',
padding: '0',
overflowY: 'auto',
overflowX: 'hidden',
}
/**
* 文章终极列表
* @constructor
*/
const List = () => {
const [keywords, setKeywords] = useState<string>('')
const [list, setList] = useState<HjmCar[]>([])
const [page, setPage] = useState(1)
const [hasMore, setHasMore] = useState(true)
const [loading, setLoading] = useState(false)
const onKeywords = (keywords: string) => {
setKeywords(keywords)
}
const loadList = async (pageNum: number, isRefresh = false) => {
if (loading) return;
setLoading(true)
// 搜索条件
const where = {status: 1, deleted: 0, keywords, page: pageNum, limit: 10}
// 读取用户信息
const user = await getUserInfo();
// 判断身份
const roleCode = Taro.getStorageSync('RoleCode');
if(roleCode == 'kuaidiyuan'){
// @ts-ignore
where.driverId = user.userId;
}
if(roleCode == 'zhandian' && user.merchants == null){
// @ts-ignore
where.organizationId = user.organizationId;
}
if(roleCode == 'kuaidi'){
// @ts-ignore
where.organizationParentId = user.organizationId;
}
if(roleCode == 'Installer'){
// @ts-ignore
where.installerId = user.userId;
}
if(user.merchants != null){
// @ts-ignore
where.organizationIds = user.merchants;
}
if(roleCode == 'user'){
setLoading(false)
return false;
}
// 获取车辆列表
try {
const res = await pageHjmCar(where);
if (res?.list && res?.list.length > 0) {
if (isRefresh) {
setList(res.list);
} else {
setList(prevList => [...prevList, ...res.list]);
}
setHasMore(res.list.length >= 10); // 如果返回的数据少于10条说明没有更多了
} else {
if (isRefresh) {
setList([]);
}
setHasMore(false);
}
} catch (error) {
console.error('获取车辆列表失败:', error);
if (isRefresh) {
setList([]);
}
setHasMore(false);
} finally {
setLoading(false);
}
}
const reload = async () => {
setPage(1);
await loadList(1, true);
}
const loadMore = async () => {
if (!hasMore || loading) return;
const nextPage = page + 1;
setPage(nextPage);
await loadList(nextPage);
}
useEffect(() => {
reload()
}, [])
return (
<>
<div className={'fixed z-20 top-5 left-0 w-full'}>
<div className={'px-4'}>
<div
style={{
display: 'flex',
alignItems: 'center',
background: '#fff',
padding: '0 10px',
borderRadius: '20px'
}}
>
<Search/>
<Input
placeholder="车辆编号"
value={keywords}
onChange={onKeywords}
onConfirm={reload}
/>
<div
className={'flex items-center'}
>
<Button type="warning" onClick={reload}>
</Button>
</div>
</div>
</div>
</div>
<div style={InfiniteUlStyle} id="scroll">
<InfiniteLoading
target="scroll"
className={'w-full fixed left-0 top-20'}
hasMore={hasMore}
onLoadMore={loadMore}
loadingText="加载中..."
loadMoreText="没有更多了"
>
<BestSellers data={list}/>
</InfiniteLoading>
</div>
</>
)
}
export default List