projectMessage.jsx 6.24 KB
/*
 * @Description:
 * @Author: leizhe
 * @Date: 2022-01-13 10:47:32
 * @LastEditTime: 2022-10-09 14:07:11
 * @LastEditors: dengchao 754083046@qq.com
 */
/* eslint-disable indent */
import { Button, Spin, Empty, Input, notification } from 'antd';
import React, { useState, useEffect } from 'react';
import { OrderedListOutlined } from '@ant-design/icons';
import styles from '../SchemeConfig.less';
import { GetMaplayerByTerminalType, GettMaplayer } from '@/services/webConfig/api';
import AddModal from './AddModal';
import Cards from './components/card';
import SortModal from './SortModal';

const VectorData = props => {
  const [treeLoading, setTreeLoading] = useState(false); // 弹窗显示
  const [tileData, setTileData] = useState([]); // 页面初始化数据
  const [nameData, setNameData] = useState([]);
  const [visible, setVisible] = useState(false); // 弹窗
  const [flag, setFlag] = useState(0); // 状态更新
  const [cardFlag, setCardFlag] = useState(false); // 状态更新
  const [type, setType] = useState(''); // 弹窗类型
  const [formObj, setFormObj] = useState({});
  const [keepData, setKeepData] = useState([]);
  const [sortVisible, setSortVisible] = useState(false);
  const [searchValue, setSearchValue] = useState('');
  const { Search } = Input;

  const onSubmit = prop => {
    setVisible(false);
    setFlag(flag + 1);
  };
  const onDeletebaseMap = value => {
    setCardFlag(false);
    setFlag(flag + 1);
  };
  const handleAdd = () => {
    setType('schemeAdd');
    setVisible(true);
  };
  useEffect(() => {
    renderTile({ filter: searchValue });
  }, [flag]);

  // 获取瓦片数据配置数据
  const renderTile = (params = { filter: '' }) => {
    setTreeLoading(true);
    GetMaplayerByTerminalType({
      terminalType: 'scheme',
      isBaseMap: false,
      ...params,
    })
      .then(resdata => {
        if (resdata.code == '0') {
          GettMaplayer({ terminalType: 'base', isBaseMap: true }).then(res => {
            if (res.code == '0') {
              let arr = [];
              res.data.general.baseMap.layers.map(i => {
                arr.push(i.servicename);
              });
              setKeepData(arr);
              let list = [];
              resdata.data.map((j, index) => {
                let data = [];
                let aa = [];
                j.baseMap.map(k => {
                  if (arr.indexOf(k) != -1) {
                    data.push(k);
                  } else {
                    aa.push(k);
                  }
                });
                list.push(j.schemename);
                let bb = aa.concat(data);
                let i = bb.indexOf(j.baseMap[j.defaultBaseMap]);
                resdata.data[index].defaultOldBaseMap = j.baseMap;
                resdata.data[index].baseMap = bb;
                resdata.data[index].defaultBaseMap = i;
              });
              setNameData(list);
              setTileData(resdata.data);
              setTreeLoading(false);
            }
          });
        } else {
          setTreeLoading(false);
        }
      })
      .catch(err => {
        if (err.message.indexOf('timeout') !== -1) {
          notification.error({
            message: '提示',
            duration: 3,
            description: '请求超时',
          });
        } else {
          notification.error({
            message: '提示',
            duration: 3,
            description: err.message,
          });
        }
        setTreeLoading(false);
      });
  };
  useEffect(() => {
    setCardFlag(true);
  }, [tileData]);

  const onOK = () => {
    setFlag(flag + 1);
  };

  const handleSort = () => {
    setSortVisible(true);
  };
  // 搜索
  const handleSearch = text => {
    setFlag(flag + 1);
  };
  // 搜索框改变时存储输入的值
  const handleChange = e => {
    setSearchValue(e.target.value);
  };

  return (
    <>
      <div className={styles.tileBtn}>
        <span style={{ marginLeft: '20px', marginRight: '5px' }}>快速检索</span>
        <Search
          allowClear
          placeholder="请输入方案名或管网"
          onSearch={handleSearch}
          onChange={handleChange}
          value={searchValue}
          enterButton
          style={{ width: '300px', marginRight: '20px' }}
        />
        <Button
          icon={<OrderedListOutlined className={styles.icon} />}
          onClick={() => {
            handleSort();
          }}
          style={{
            verticalAlign: 'middle',
            marginRight: '10px',
          }}
        >
          排序
        </Button>
        <Button
          type="primary"
          onClick={() => {
            handleAdd();
          }}
        >
          新增
        </Button>
      </div>
      <div className={styles.schemeBox}>
        <Spin tip="loading..." spinning={treeLoading}>
          <div style={{ height: 'calc(100%)', width: '100%' }}>
            <div className={styles.cardsList}>
              {/* {console.log(tileData)} */}
              {tileData.length > 0 ? (
                tileData.map((item, index) => (
                  <div
                    className={styles.cardItem}
                    key={index}
                    span={5}
                    offset={2}
                    style={{ marginBottom: '1rem' }}
                  >
                    <Cards
                      item={item}
                      cardFlag={cardFlag}
                      deletebaseMaps={onDeletebaseMap}
                      keepData={keepData}
                      nameData={nameData}
                    />
                  </div>
                ))
              ) : (
                <Empty image={Empty.PRESENTED_IMAGE_SIMPLE} style={{ margin: 'auto' }} />
              )}
            </div>
            <AddModal
              visible={visible}
              onCancel={() => setVisible(false)}
              callBackSubmit={onSubmit}
              type={type}
              formObj={formObj}
              keepData={keepData}
              nameData={nameData}
            />
            <SortModal
              title="调整顺序"
              visible={sortVisible}
              sortData={tileData}
              onCancel={() => setSortVisible(false)}
              callBackSubmit={onOK}
            />
          </div>
        </Spin>
      </div>
    </>
  );
};
export default VectorData;