|
@@ -1,38 +1,38 @@
|
|
-import React, { useCallback, useEffect, useMemo } from "react";
|
|
|
|
-import styles from "./index.module.scss";
|
|
|
|
-import { Table } from "antd";
|
|
|
|
-import ImageLazy from "../ImageLazy";
|
|
|
|
|
|
+import React, { useCallback, useEffect, useMemo } from 'react'
|
|
|
|
+import styles from './index.module.scss'
|
|
|
|
+import { Table } from 'antd'
|
|
|
|
+import ImageLazy from '../ImageLazy'
|
|
|
|
|
|
type Props = {
|
|
type Props = {
|
|
- yHeight?: number; //设置表格的高度
|
|
|
|
- list: any; //表格数据
|
|
|
|
- columnsTemp: any[][]; //表格展示
|
|
|
|
- total?: number; //总数
|
|
|
|
- pageNum?: number;
|
|
|
|
- pageSize?: number;
|
|
|
|
- pagingInfo?: any | boolean;
|
|
|
|
- onChange?: (pageNum: number, pageSize: number) => void;
|
|
|
|
- lastBtn?: any;
|
|
|
|
- classKey?: string; //一个组件多次使用的时候要传递,分别设置style
|
|
|
|
|
|
+ yHeight?: number //设置表格的高度
|
|
|
|
+ list: any //表格数据
|
|
|
|
+ columnsTemp: any[][] //表格展示
|
|
|
|
+ total?: number //总数
|
|
|
|
+ pageNum?: number
|
|
|
|
+ pageSize?: number
|
|
|
|
+ pagingInfo?: any | boolean
|
|
|
|
+ onChange?: (pageNum: number, pageSize: number) => void
|
|
|
|
+ lastBtn?: any
|
|
|
|
+ classKey?: string //一个组件多次使用的时候要传递,分别设置style
|
|
// 表格简单的合并
|
|
// 表格简单的合并
|
|
- merge?: { type: string; num: number; loc: "rowSpan" | "colSpan" };
|
|
|
|
|
|
+ merge?: { type: string; num: number; loc: 'rowSpan' | 'colSpan' }
|
|
// 定制化表头
|
|
// 定制化表头
|
|
- myTitle?: { name: string; Com: React.ReactNode };
|
|
|
|
|
|
+ myTitle?: { name: string; Com: React.ReactNode }
|
|
// 为空的定制字段
|
|
// 为空的定制字段
|
|
- isNull?: string;
|
|
|
|
-};
|
|
|
|
|
|
+ isNull?: string
|
|
|
|
+}
|
|
|
|
|
|
// 表格内容定制化
|
|
// 表格内容定制化
|
|
const tableComObj = (key: string, val: string[]) => {
|
|
const tableComObj = (key: string, val: string[]) => {
|
|
const obj = {
|
|
const obj = {
|
|
A: (
|
|
A: (
|
|
- <a href={val[1]} target="_blank" title={val[1]} rel="noreferrer">
|
|
|
|
|
|
+ <a href={val[1]} target='_blank' title={val[1]} rel='noreferrer'>
|
|
{val[0]}
|
|
{val[0]}
|
|
</a>
|
|
</a>
|
|
- ),
|
|
|
|
- };
|
|
|
|
- return Reflect.get(obj, key);
|
|
|
|
-};
|
|
|
|
|
|
+ )
|
|
|
|
+ }
|
|
|
|
+ return Reflect.get(obj, key)
|
|
|
|
+}
|
|
|
|
|
|
function MyTable({
|
|
function MyTable({
|
|
yHeight,
|
|
yHeight,
|
|
@@ -43,33 +43,31 @@ function MyTable({
|
|
pageSize = 10,
|
|
pageSize = 10,
|
|
pagingInfo = {
|
|
pagingInfo = {
|
|
showQuickJumper: true,
|
|
showQuickJumper: true,
|
|
- position: ["bottomCenter"],
|
|
|
|
- showSizeChanger: true,
|
|
|
|
|
|
+ position: ['bottomCenter'],
|
|
|
|
+ showSizeChanger: true
|
|
},
|
|
},
|
|
onChange,
|
|
onChange,
|
|
lastBtn = [],
|
|
lastBtn = [],
|
|
- classKey = "",
|
|
|
|
|
|
+ classKey = '',
|
|
merge,
|
|
merge,
|
|
myTitle,
|
|
myTitle,
|
|
- isNull = "(空)",
|
|
|
|
|
|
+ isNull = '(空)'
|
|
}: Props) {
|
|
}: Props) {
|
|
useEffect(() => {
|
|
useEffect(() => {
|
|
- const dom = document.querySelector(
|
|
|
|
- `.MyTable${classKey} .ant-table-body`
|
|
|
|
- ) as HTMLDivElement;
|
|
|
|
|
|
+ const dom = document.querySelector(`.MyTable${classKey} .ant-table-body`) as HTMLDivElement
|
|
|
|
|
|
- if (dom && yHeight) dom.style.height = yHeight + "px";
|
|
|
|
- }, [classKey, yHeight]);
|
|
|
|
|
|
+ if (dom && yHeight) dom.style.height = yHeight + 'px'
|
|
|
|
+ }, [classKey, yHeight])
|
|
|
|
|
|
// 页码变化
|
|
// 页码变化
|
|
const paginationChange = useCallback(
|
|
const paginationChange = useCallback(
|
|
() => (pageNum: number, pageSize: number) => {
|
|
() => (pageNum: number, pageSize: number) => {
|
|
if (onChange) {
|
|
if (onChange) {
|
|
- onChange(pageNum, pageSize);
|
|
|
|
|
|
+ onChange(pageNum, pageSize)
|
|
}
|
|
}
|
|
},
|
|
},
|
|
[onChange]
|
|
[onChange]
|
|
- );
|
|
|
|
|
|
+ )
|
|
|
|
|
|
const dataChangeFu = useCallback(
|
|
const dataChangeFu = useCallback(
|
|
(v: any) => {
|
|
(v: any) => {
|
|
@@ -82,41 +80,44 @@ function MyTable({
|
|
*/
|
|
*/
|
|
|
|
|
|
const obj = {
|
|
const obj = {
|
|
- index: (_: any, __: any, index: number) =>
|
|
|
|
- index + 1 + (pageNum - 1) * pageSize,
|
|
|
|
|
|
+ index: (_: any, __: any, index: number) => index + 1 + (pageNum - 1) * pageSize,
|
|
txt: (item: any) => item[v[2]] || isNull,
|
|
txt: (item: any) => item[v[2]] || isNull,
|
|
img: (item: any) => (
|
|
img: (item: any) => (
|
|
- <div className="tableImgAuto">
|
|
|
|
- <ImageLazy width={60} height={60} src={item[v[2]] || item.thumb} />
|
|
|
|
|
|
+ <div className='tableImgAuto'>
|
|
|
|
+ <ImageLazy
|
|
|
|
+ width={60}
|
|
|
|
+ height={60}
|
|
|
|
+ src={item[v[2]] || item.thumb}
|
|
|
|
+ srcBig={item.thumbPc}
|
|
|
|
+ />
|
|
</div>
|
|
</div>
|
|
),
|
|
),
|
|
- txtChange: (item: any) =>
|
|
|
|
- Reflect.get(v[3], item[v[2]]) || v[4] || isNull,
|
|
|
|
|
|
+ txtChange: (item: any) => Reflect.get(v[3], item[v[2]]) || v[4] || isNull,
|
|
text: (item: any) => {
|
|
text: (item: any) => {
|
|
- let tempCom: any = item[v[2]] || isNull;
|
|
|
|
|
|
+ let tempCom: any = item[v[2]] || isNull
|
|
|
|
|
|
if (tempCom.length >= v[3]) {
|
|
if (tempCom.length >= v[3]) {
|
|
- tempCom = tempCom.substring(0, v[3]) + "...";
|
|
|
|
|
|
+ tempCom = tempCom.substring(0, v[3]) + '...'
|
|
}
|
|
}
|
|
|
|
|
|
if (v[4]) {
|
|
if (v[4]) {
|
|
- tempCom = tableComObj(v[4], [tempCom, item[v[2]]]);
|
|
|
|
|
|
+ tempCom = tableComObj(v[4], [tempCom, item[v[2]]])
|
|
} else if (item[v[2]].length >= v[3]) {
|
|
} else if (item[v[2]].length >= v[3]) {
|
|
tempCom = (
|
|
tempCom = (
|
|
- <span style={{ cursor: "pointer" }} title={item[v[2]]}>
|
|
|
|
|
|
+ <span style={{ cursor: 'pointer' }} title={item[v[2]]}>
|
|
{tempCom}
|
|
{tempCom}
|
|
</span>
|
|
</span>
|
|
- );
|
|
|
|
|
|
+ )
|
|
}
|
|
}
|
|
|
|
|
|
- return tempCom;
|
|
|
|
- },
|
|
|
|
- };
|
|
|
|
|
|
+ return tempCom
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
|
|
- return Reflect.get(obj, v[0]);
|
|
|
|
|
|
+ return Reflect.get(obj, v[0])
|
|
},
|
|
},
|
|
[isNull, pageNum, pageSize]
|
|
[isNull, pageNum, pageSize]
|
|
- );
|
|
|
|
|
|
+ )
|
|
|
|
|
|
const columns = useMemo(() => {
|
|
const columns = useMemo(() => {
|
|
const arr: any = columnsTemp.map((v: any) => ({
|
|
const arr: any = columnsTemp.map((v: any) => ({
|
|
@@ -126,21 +127,21 @@ function MyTable({
|
|
merge && v.includes(merge.type)
|
|
merge && v.includes(merge.type)
|
|
? // {rowSpan:3}
|
|
? // {rowSpan:3}
|
|
(item: any, index: number) => ({
|
|
(item: any, index: number) => ({
|
|
- rowSpan: index === 0 ? merge.num : 0,
|
|
|
|
|
|
+ rowSpan: index === 0 ? merge.num : 0
|
|
})
|
|
})
|
|
- : "",
|
|
|
|
- }));
|
|
|
|
|
|
+ : ''
|
|
|
|
+ }))
|
|
|
|
|
|
- return arr;
|
|
|
|
- }, [columnsTemp, dataChangeFu, merge, myTitle]);
|
|
|
|
|
|
+ return arr
|
|
|
|
+ }, [columnsTemp, dataChangeFu, merge, myTitle])
|
|
|
|
|
|
return (
|
|
return (
|
|
<Table
|
|
<Table
|
|
className={`${styles.MyTable} MyTable${classKey}`}
|
|
className={`${styles.MyTable} MyTable${classKey}`}
|
|
- scroll={{ y: yHeight ? yHeight : "" }}
|
|
|
|
|
|
+ scroll={{ y: yHeight ? yHeight : '' }}
|
|
dataSource={list}
|
|
dataSource={list}
|
|
columns={[...columns, ...lastBtn]}
|
|
columns={[...columns, ...lastBtn]}
|
|
- rowKey="id"
|
|
|
|
|
|
+ rowKey='id'
|
|
pagination={
|
|
pagination={
|
|
pagingInfo
|
|
pagingInfo
|
|
? {
|
|
? {
|
|
@@ -148,14 +149,14 @@ function MyTable({
|
|
current: pageNum,
|
|
current: pageNum,
|
|
pageSize: pageSize,
|
|
pageSize: pageSize,
|
|
total: total,
|
|
total: total,
|
|
- onChange: paginationChange(),
|
|
|
|
|
|
+ onChange: paginationChange()
|
|
}
|
|
}
|
|
: false
|
|
: false
|
|
}
|
|
}
|
|
/>
|
|
/>
|
|
- );
|
|
|
|
|
|
+ )
|
|
}
|
|
}
|
|
|
|
|
|
-const MemoMyTable = React.memo(MyTable);
|
|
|
|
|
|
+const MemoMyTable = React.memo(MyTable)
|
|
|
|
|
|
-export default MemoMyTable;
|
|
|
|
|
|
+export default MemoMyTable
|