import { ScrollView, Text, View } from '@tarojs/components' import classnames from 'classnames' import type { FC } from 'react' import { useCallback, useMemo, useState } from 'react' import Iconfont from '../iconfont/iconfont' import InfiniteScroll from '../infiniteScroll' import LoadMore, { LoadMoreStatus } from '../LoadMore' import styles from './index.module.scss' export interface ColumnsType { title: string dataIndex: string width: string key: string render?: (text?: string, record?: RecordType, index?: number) => React.ReactNode ellipsis?: boolean | { isEllipsis: boolean; rows: number } } export interface RecordType { key: string [Property: string]: any } export interface TablePropsType { columns: ColumnsType[] dataSource?: { list: RecordType[]; total: number } onLoadMore?: () => void height?: number moreText?: string loadingText?: string noMoreText?: string emptyText?: string safeAreaInsetBottom?: boolean } const Table: FC = (props) => { const { columns, dataSource, onLoadMore, height = 400, moreText = '查看更多', loadingText = '加载中', noMoreText = '没有更多了', emptyText = '暂无数据', safeAreaInsetBottom = true } = props const handleShowMore = () => { onLoadMore && onLoadMore() } const getColumnStyle = useCallback((columnConfig: ColumnsType) => { const columnStyle = {} if (typeof columnConfig.ellipsis === 'boolean' && columnConfig.ellipsis) { columnStyle[styles.ellipsis_1] = true } if (typeof columnConfig.ellipsis === 'object' && columnConfig.ellipsis.isEllipsis) { const rows = columnConfig.ellipsis.rows if (rows === 2) { columnStyle[styles.ellipsis_2] = true } else { columnStyle[styles.ellipsis_1] = true } } return columnStyle }, []) const loadMoreComponent = useMemo(() => { if (dataSource) { if (dataSource.list.length === 0 && dataSource.list.length === dataSource.total) { return } else if (dataSource.list.length < dataSource.total) { return } else if (dataSource.list.length >= dataSource.total) { return } } else { return } }, [dataSource]) const sourceContainer = () => { return ( <> {!!dataSource?.list?.length && dataSource.list.map((source) => { return ( {columns.map((column, key) => { if (column.render) { return ( {/* 判断表头是不是有render 有就执行render */} {column.render(source[column.dataIndex])} ) } else { return ( { source[column.dataIndex] // 根据表头填数据 } ) } })} ) })} {loadMoreComponent} ) } return ( {columns.map((column) => { return ( {column.title} ) })} {sourceContainer()} ) } export default Table