import React, { PureComponent } from "react"; import ProTable from "@ant-design/pro-table"; import request from "umi-request"; import Resizecell from "./Resizecell"; import { Tooltip } from "antd"; import { doFetch } from "@/utils/doFetch"; import bodyParse from "@/utils/bodyParse"; let defaultsize = localStorage.getItem("size"); //设置缓存 class Mtable extends PureComponent { constructor(props) { super(props); let { columns } = this.props; this.state = { total: 0, size: defaultsize ? defaultsize : "small", columns: columns, valueColumns: {}, }; } actionRefs = React.createRef(); formRefs = React.createRef(); componentWillReceiveProps(nextprops) { if ( JSON.stringify(this.props.extraparams) != JSON.stringify(nextprops.extraparams) || JSON.stringify(this.props.path) != JSON.stringify(nextprops.path) || JSON.stringify(this.props.refreshDep) != JSON.stringify(nextprops.refreshDep) || this.props.columns != nextprops.columns ) { if (nextprops.actionRef) { nextprops.actionRef?.current?.reset(); } else { this.actionRefs?.current?.reset(); } this.initDrage(nextprops); } } componentDidMount() { this.initDrage(); } //初始化操作数据 initDrage = (nextprops) => { let curprops = nextprops ?? this.props; let { extraparams, path, activeTabKey, columns } = curprops; if (!path) return; doFetch({ url: "/ngic-base-business/paFieldScene/queryContro", params: { sceneMark: extraparams ? path + bodyParse(extraparams) : activeTabKey ? path + activeTabKey : path, }, }).then((res) => { if (res.code == "0000") { //datalist:接口返回状态 let datalist = {}; res?.data?.dataList && res.data.dataList.map((it) => { const { fieldKey, fieldWidth, fieldOrder, fieldFixed, fieldShow } = it ?? {}; datalist[fieldKey] = { width: fieldWidth, order: fieldOrder, fixed: fieldKey == "option" || fieldKey == "option_dataindex" ? "right" : fieldFixed, show: fieldShow, }; }); //allcol 默认状态设置 valueColumns 为columns全列设置 let allcol = {}; columns.map((it, i) => { if (it.valueType == "option") { allcol.option = { order: columns.length - 1, show: true, fixed: "right", ...datalist.option, }; } else { allcol[it.key] = { order: i, show: true, ...datalist[it.key], }; } }); //columns 列属性添加 let columnes = columns.map((it, index) => { if (it.valueType == "select" || it.valueType == "checkbox") { if (Array.isArray(it.options)) { it.fieldProps = { options: [...it.options], }; } else { it.request = async function () { let list = await it.options.database(it.options.params); return list.data.dataList; }; } } if (it.valueType == "option") { it.key = "option"; it.dataIndex = "option"; it.fixed = "right"; } let itemwidth = allcol[it.key]?.width ? allcol[it.key].width : it.width ? it.width : 160; return { ...it, width: itemwidth, onHeaderCell: (column) => ({ width: column.width ?? itemwidth, onResize: this.handleResize(index), onResizeStop: this.handleResizeStop(index), }), render: it.render ? it.render : (text, row) => { return ( {row[it.dataIndex] ?? "-"} ); }, }; }); this.setState({ valueColumns: allcol, columns: columnes, }); } }); }; //缩放表格 handleResize = (index) => (e, { size }) => { e.stopImmediatePropagation(); this.setState(({ columns }) => { const nextColumns = [...columns]; nextColumns[index] = { ...nextColumns[index], width: size.width, }; return { columns: nextColumns }; }); }; //更新表格缩放 handleResizeStop = (index) => (e, { size }) => { e.stopImmediatePropagation(); let { extraparams, activeTabKey, path } = this.props; let submitdata = this.state.valueColumns ?? {}, curkey = Object.keys(submitdata)[index]; submitdata[curkey].width = parseInt(size.width); this.setState( { valueColumns: submitdata, }, () => { doFetch({ url: "/ngic-base-business/paFieldScene/save", params: { sceneMark: extraparams ? path + bodyParse(extraparams) : activeTabKey ? path + activeTabKey : path, controList: Object.keys(submitdata).map((it, i) => { return { fieldKey: it, fieldWidth: i == index ? parseInt(size.width) : submitdata[it].width, fieldOrder: submitdata[it].order, fieldFixed: submitdata[it].fixed, fieldShow: submitdata[it].show, }; }), }, }); } ); }; render() { let { pageSize, x, y, style, dataSource, onSearchChange, defaultPageSize, pagination, //分页 rowKey, //行key actionRef, //操作ref formRef, //查询表单ref path, //路径 activeTabKey, //当前tab extraparams, //拓展查询参数 rowSelection, //行选择 tableRender, //表格布局自定义 getDefaultSelected, //获取默认选中的数据 rowClassNameFn, //选中后行样式 showQuickJumper, //false字符串 不显示 expandable, //是否可展开 onRow, } = this.props, { total, size } = this.state; let tabledataProps = dataSource && Array.isArray(dataSource) ? { dataSource, pagination: { showTotal: (total, range) => 共{total}条, showQuickJumper: false, showSizeChanger: true, defaultPageSize: defaultPageSize ? defaultPageSize : 15, pageSizeOptions: [10, 15, 30, 50, 100, 200], total: dataSource.length, }, search: { filterType: "light", //轻量模式 }, toolBarRender: false, } : { request: async (params = {}) => { //表格数据获取 只需要传入url自动获得数据 if (!path) { return; } //设置token let token = localStorage.getItem("TOKENS") ? localStorage.getItem("TOKENS") : "9410b3f7de5d63f2be42d80ec8241d2d"; let headers = { "Content-Type": "application/json", token: token ? token : "", }, newextraparams = extraparams ?? {}; //处理传参 extraparams为除列筛选外的自定义传参 let newparams = { ...params, ...newextraparams, //父组件传参 pageIndex: params.current, pageSize: params.pageSize || pageSize, }; delete newparams.current; if (pagination == "false") { delete newparams.pageIndex; delete newparams.pageSize; } let res = await request("/srwms" + path, { body: JSON.stringify(newparams ? newparams : {}), headers, method: "POST", }); return { data: res.data, total: res?.data?.total || res?.data?.dataList?.length, }; }, pagination: { showTotal: (total, range) => 共{total}条, showQuickJumper: !showQuickJumper ? true : false, showSizeChanger: true, pageSizeOptions: [5, 10, 15, 30, 50, 100, 200], defaultPageSize: pageSize || 15, total, }, search: { filterType: "light", //轻量模式 }, }; return ( { onSearchChange && onSearchChange(params); }} onSizeChange={(size) => { localStorage.setItem("size", size); //设置全局表格规格缓存 this.setState({ size, }); }} columns={this.state.columns} style={style || {}} actionRef={actionRef ? actionRef : this.actionRefs} formRef={formRef ? formRef : this.formRefs} rowKey={rowKey ? rowKey : "id"} //表格每行数据的key dateFormatter="string" postData={(data) => { if (data.page) { this.setState({ total: data.page.total, }); } else { this.setState({ total: data.dataList.length, }); } //分页or不分页获取数据 getDefaultSelected && getDefaultSelected(data); //存在默认选中向上返回选中值 let defaultval = pagination == "false" ? data.dataList : data.page ? data.page.list : []; //分页或不分页的接口返回数据 return defaultval; }} components={{ header: { cell: Resizecell, }, }} rowSelection={rowSelection ? rowSelection : false} tableRender={ tableRender ? (_, dom) => tableRender(_, dom) : (_, dom) => dom } //自定义表格主体 rowClassName={ rowClassNameFn ? (record, index) => rowClassNameFn(record, index) : "" } //自定义行高亮 columnsState={{ value: this.state.valueColumns, onChange: (val, state) => { if (Object.keys(val).length === 0) { console.log(val, valueColumns); let submitdata = { ...s, ...this.state.valueColumns, }; let controList = Object.keys(submitdata).map((it, i) => { return { fieldKey: it, fieldWidth: submitdata[it].width, fieldOrder: i, fieldFixed: submitdata[it].fixed, fieldShow: true, }; }); this.setState( { valueColumns: controList, }, (s) => { if (!this.props.path) return; doFetch({ url: "/ngic-base-business/paFieldScene/save", params: { sceneMark: extraparams ? path + bodyParse(extraparams) : activeTabKey ? path + activeTabKey : path, controList: controList, }, }); } ); } else { let submitdata = { ...this.state.valueColumns, ...val, }; this.setState( { valueColumns: submitdata, }, (state) => { if (!this.props.path) return; doFetch({ url: "/ngic-base-business/paFieldScene/save", params: { sceneMark: extraparams ? path + bodyParse(extraparams) : activeTabKey ? path + activeTabKey : path, controList: Object.keys(submitdata).map((it) => { return { fieldKey: it, fieldWidth: submitdata[it].width, fieldOrder: submitdata[it].order, fieldFixed: submitdata[it].fixed, fieldShow: submitdata[it].show, }; }), }, }); } ); } }, }} scroll={{ x: x ?? 1024, }} {...tabledataProps} {...expandable} onRow={onRow ? (record) => onRow(record) : null} /> ); } } export default Mtable;