解决了EditableProTable和echarts图表展示两个不常见问题

26 阅读1分钟

1、EditableProTable表头加过滤

除了类似Table里的filterDropdown,必须要加一个多余的filters才行,才能在request里捕捉到filter

  <EditableProTable
          controlled
          scroll={{ x: 'max-content' }}
          size="small"
          rowKey="id"
          toolBarRender={false}
          title={() =>
            `UNI扩容10GE端口规模${uniExpandScale || 0}G,NNI扩容需求(含组网、OLT)${
              nniExpandScale || 0
            }G`
          }
          columns={
            tableStructMap && tableStructMap[TableName] && tableStructMap[TableName].struct
              ? tableStructMap[TableName]?.struct
                  .sort((a: any, b: any) => a.colid - b.colid)
                  .map((col: { content: string; columnName: string }) => {
                    if (col.columnName !== 'demand_expansion') {
                      return {
                        title: col.content,
                        dataIndex: col.columnName,
                        key: col.columnName,
                        readonly: true,
                        align: 'center',
                        sorter: (a: any, b: any) => a[col.columnName] - b[col.columnName],
                        filters: [
                          {
                            text: 'London',
                            value: 'London',
                          },
                          {
                            text: 'New York',
                            value: 'New York',
                          },
                        ],
                        filterIcon: (filtered: boolean) => (
                          <FilterOutlined style={{ color: filtered ? '#1890ff' : undefined }} />
                        ),
                        filterDropdown: ({
                          setSelectedKeys,
                          selectedKeys,
                          confirm,
                          clearFilters,
                        }) => (
                          <div style={{ padding: 8, maxWidth: 300 }}>
                            <div className={styles['filter-entry-item']}>
                              {getColumnFilterEntryComponent(col, {
                                setSelectedKeys,
                                selectedKeys,
                                confirm,
                              })}
                            </div>
                            <div className={styles['filter-action']}>
                              <Button
                                type="primary"
                                onClick={() => confirm()}
                                icon={<SearchOutlined />}
                                size="small"
                                style={{ width: 80 }}
                              >
                                搜索
                              </Button>
                              <Button
                                onClick={() => {
                                  if (clearFilters) {
                                    clearFilters();
                                    // confirm();
                                  }
                                }}
                                size="small"
                                style={{ width: 80 }}
                              >
                                重置
                              </Button>
                            </div>
                          </div>
                        ),
                      };
                    } else {
                      return {
                        title: col.content,
                        dataIndex: col.columnName,
                        key: col.columnName,
                        align: 'center',
                        sorter: (a: any, b: any) => a[col.columnName] - b[col.columnName],
                        filterIcon: (filtered: boolean) => (
                          <FilterOutlined style={{ color: filtered ? '#1890ff' : undefined }} />
                        ),
                        filterDropdown: ({
                          setSelectedKeys,
                          selectedKeys,
                          confirm,
                          clearFilters,
                        }) => (
                          <div style={{ padding: 8, maxWidth: 300 }}>
                            <div className={styles['filter-entry-item']}>
                              {getColumnFilterEntryComponent(col, {
                                setSelectedKeys,
                                selectedKeys,
                                confirm,
                              })}
                            </div>
                            <div className={styles['filter-action']}>
                              <Button
                                type="primary"
                                onClick={() => confirm()}
                                icon={<SearchOutlined />}
                                size="small"
                                style={{ width: 80 }}
                              >
                                搜索
                              </Button>
                              <Button
                                onClick={() => {
                                  if (clearFilters) {
                                    clearFilters();
                                    // confirm();
                                  }
                                }}
                                size="small"
                                style={{ width: 80 }}
                              >
                                重置
                              </Button>
                            </div>
                          </div>
                        ),
                        renderFormItem: (item: any, config: any) => {
                          const { fieldProps, formItemProps } = config;
                          return (
                            <InputNumber
                              // 组件的配置
                              {...fieldProps}
                              {...formItemProps}
                              // 自定义配置
                              min={0}
                              max={100000000}
                              placeholder="请输入"
                            />
                          );
                        },
                      };
                    }
                  })
                  .concat([
                    {
                      title: '操作',
                      valueType: 'option',
                      width: 100,
                      fixed: 'right',
                      render: (text, record, _, action) => [
                        <a
                          key="editable"
                          onClick={() => {
                            action?.startEditable?.(record.id);
                          }}
                        >
                          编辑
                        </a>,
                      ],
                    },
                  ])
              : []
          }
          recordCreatorProps={false}
          editable={{
            type: 'multiple',
            editableKeys,
            onSave: async (rowKey, data, row) => {
              await waitTime(200);
              updateKpiItem(row);
            },
            onChange: setEditableRowKeys,
            actionRender: (row, config, dom) => [dom.save, dom.cancel],
          }}
          value={tableDataList}
          onChange={(list: any) => {
            console.log('xxx4', list);
            setTableDataList(list);
          }}
          pagination={{
            defaultCurrent: 1,
            total: totalCount,
            pageSize: defaultSize,
            showSizeChanger: false,
            showTotal: (total) => `共${total} 条数据`,
            onChange: (page) => {
              setPageNum(page);
            },
          }}
          request={async (
            //触发排序事件
            // 第一个参数 params 查询表单和 params 参数的结合
            // 第一个参数中一定会有 pageSize 和  current ,这两个参数是 antd 的规范
            params: T & {
              pageSize: number;
              current: number;
            },
            sort,
            filter,
          ) => {
            console.log('sort', sort, filter);
            const target = Object.values(sort);
            if (target && target.length && target[0]) {
              const result = {
                columnsKey: Object.keys(sort)[0],
                orderBy: target[0] === 'ascend' ? 'asc' : 'desc',
              };
              setSorterMap(result);
            } else {
              setSorterMap({});
            }

            setFilterMap(filter);
          }}
        />

2、echarts x轴分组展示

image.png

blog.csdn.net/chch87/arti…