VectorData.jsx 8.96 KB
Newer Older
1
import { Space, Table, Button, Popconfirm, notification, Spin, Input } from 'antd';
2
import React, { useState, useEffect } from 'react';
皮倩雯's avatar
皮倩雯 committed
3
import styles from '../SchemeConfig.less';
4
import {
皮倩雯's avatar
皮倩雯 committed
5 6 7 8
  GetVectorService,
  deleteVectorService,
  getSolutionList,
  updatePublishedMetaData,
9
} from '@/services/webConfig/api';
皮倩雯's avatar
皮倩雯 committed
10 11
import AddModal from './AddModal';
import PreviewModal from './VectorPreviewModal';
皮倩雯's avatar
皮倩雯 committed
12
import MeteDataModal from './MeteDataModal';
13
const VectorData = props => {
皮倩雯's avatar
皮倩雯 committed
14 15 16 17
  const [treeLoading, setTreeLoading] = useState(false); // 弹窗显示
  const [tileData, setTileData] = useState([]); // table表格数据
  const [visible, setVisible] = useState(false); // 弹窗
  const [previewVisible, setPreviewVisible] = useState(false); // 预览弹窗
皮倩雯's avatar
皮倩雯 committed
18
  const [meteDataVisible, setMeteDataVisible] = useState(false); // 预览弹窗
皮倩雯's avatar
皮倩雯 committed
19 20
  const [flag, setFlag] = useState(0); // 更新list
  const [loading, setLoading] = useState([]); // 更新状态
21
  const [allLoading, setAllLoading] = useState(false); // 更新状态
皮倩雯's avatar
皮倩雯 committed
22 23 24 25
  const [type, setType] = useState(''); // 弹窗类型
  const [solutionNames, setSolutionNames] = useState('');
  const [formObj, setFormObj] = useState({ user: 'admin', password: 'geoserver' });
  const [currentMetaData, setCurrentMetaData] = useState(null);
26 27
  const [searchValue, setSearchValue] = useState('');
  const { Search } = Input;
皮倩雯's avatar
皮倩雯 committed
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
  const columns = [
    {
      title: '服务名',
      dataIndex: 'ServiceName',
      key: 'ServiceName',
      align: 'center',
    },
    {
      title: 'IP',
      dataIndex: 'GISServerIP',
      key: 'GISServerIP',
      align: 'center',
    },
    {
      title: '端口',
      dataIndex: 'GISServerPort',
      key: 'GISServerPort',
      align: 'center',
    },
    {
      title: '工程名',
      dataIndex: 'GISServerProjectName',
      key: 'GISServerProjectName',
      align: 'center',
    },
    {
      title: '发布时间',
皮倩雯's avatar
皮倩雯 committed
55 56
      dataIndex: 'PublishTime',
      key: 'PublishTime',
皮倩雯's avatar
皮倩雯 committed
57 58 59 60 61
      align: 'center',
    },
    {
      title: '编辑',
      align: 'center',
62
      width: 260,
皮倩雯's avatar
皮倩雯 committed
63 64
      render: (text, record, index) => (
        <Space>
皮倩雯's avatar
皮倩雯 committed
65 66 67
          <Button type="primary" size="small" onClick={() => metadata(record)}>
            元数据
          </Button>
皮倩雯's avatar
皮倩雯 committed
68 69 70 71 72 73
          <Button type="primary" size="small" onClick={() => previewMetaData(record, index)}>
            预览
          </Button>
          <Button
            type="primary"
            size="small"
74
            loading={loading[index] || allLoading}
皮倩雯's avatar
皮倩雯 committed
75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
            onClick={() => enterLoading(record, index)}
          >
            更新
          </Button>
          <div onClick={e => e.stopPropagation()}>
            <Popconfirm
              title="是否删除该矢量数据?"
              okText="确认"
              cancelText="取消"
              onConfirm={() => {
                delConfirm(record);
              }}
            >
              <Button size="small" danger>
                删除
              </Button>
            </Popconfirm>
          </div>
        </Space>
      ),
    },
  ];
97
  // 更新
皮倩雯's avatar
皮倩雯 committed
98 99 100 101 102 103 104 105 106
  const enterLoading = (record, index) => {
    const newLoadings = [...loading];
    newLoadings[index] = true;
    setLoading(newLoadings);
    let query = {
      serviceName: record.ServiceName,
      _version: 9999,
      solution: solutionNames,
    };
107

皮倩雯's avatar
皮倩雯 committed
108 109
    updatePublishedMetaData(query)
      .then(res => {
110
        const newLoadings = [...loading];
皮倩雯's avatar
皮倩雯 committed
111 112 113 114 115 116 117 118 119 120 121 122 123 124 125
        newLoadings[index] = false;
        setLoading(newLoadings);
        if (res.success) {
          setFlag(flag + 1);
          notification.success({
            message: '提示',
            duration: 3,
            description: '更新元数据成功',
          });
        } else {
          notification.error({
            message: '提示',
            duration: 3,
            description: '更新元数据失败',
          });
126
        }
皮倩雯's avatar
皮倩雯 committed
127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142
      })
      .catch(err => {
        const newLoadings = [...loading];
        newLoadings[index] = false;
        setLoading(newLoadings);
        notification.error({
          message: '提示',
          duration: 3,
          description: '服务无法访问',
        });
      });
  };
  const previewMetaData = record => {
    setCurrentMetaData(record);
    setPreviewVisible(true);
  };
143

皮倩雯's avatar
皮倩雯 committed
144 145 146 147 148
  const metadata = record => {
    setCurrentMetaData(record);
    setMeteDataVisible(true);
  };

皮倩雯's avatar
皮倩雯 committed
149 150 151 152
  const solutionName = () => {
    getSolutionList({
      _version: 9999,
    }).then(res => {
153
      setSolutionNames(res.data.currentSolution);
皮倩雯's avatar
皮倩雯 committed
154 155 156 157 158 159 160 161 162 163 164 165
    });
  };
  const onSubmit = prop => {
    setVisible(false);
    setFlag(flag + 1);
  };
  const delConfirm = record => {
    console.log(' record.ServiceName', record.ServiceName.split('.'));
    let query = {
      serviceName: record.ServiceName.split('.')[0],
      _version: 9999,
      solution: solutionNames,
166
    };
皮倩雯's avatar
皮倩雯 committed
167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188
    deleteVectorService(query).then(res => {
      if (res.success) {
        setFlag(flag + 1);
        notification.success({
          message: '提示',
          duration: 3,
          description: '删除元数据成功',
        });
      } else {
        notification.error({
          message: '提示',
          duration: 3,
          description: '删除元数据失败',
        });
      }
    });
  };
  const handleAdd = () => {
    setType('add');
    setVisible(true);
  };
  useEffect(() => {
189
    renderTile({ info: searchValue });
皮倩雯's avatar
皮倩雯 committed
190 191
  }, [flag]);
  // 获取瓦片数据配置数据
192
  const renderTile = (params = { info: '' }) => {
皮倩雯's avatar
皮倩雯 committed
193 194
    setTreeLoading(true);
    solutionName();
195
    GetVectorService(params).then(res => {
皮倩雯's avatar
皮倩雯 committed
196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212
      if (res.msg === 'Ok') {
        let arr = [];
        res.data.VectorList.map(item => {
          arr.push(false);
        });
        setLoading(arr);
        setTreeLoading(false);
        setTileData(res.data.VectorList);
      } else {
        setTreeLoading(false);
        notification.error({
          message: '获取失败',
          description: res.message,
        });
      }
    });
  };
213 214 215 216 217 218 219 220
  // 搜索
  const handleSearch = text => {
    setFlag(flag + 1);
  };
  // 搜索框改变时存储输入的值
  const handleChange = e => {
    setSearchValue(e.target.value);
  };
221

222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253
  const updateAll = async () => {
    let query = {
      version: 9999,
      solution: solutionNames,
    };
    for (const [index,item] of tileData.entries()) {
      setAllLoading(true);
      query.serviceName = item.ServiceName;
      let res = null;
      res = await updatePublishedMetaData(query);
      if (res.success) {
        setAllLoading(false);
        notification.success({
          message: '提示',
          duration: 1,
          // description: `${item.ServiceName}更新辣`,
          description: `更新元数据成功`,
        });
      } else {
        setAllLoading(false);
        notification.error({
          message: '提示',
          duration: 3,
          description: '更新元数据失败',
        });
      }
      if(index === tileData.length-1) {
        setFlag(flag + 1)
      }
    }
  };

皮倩雯's avatar
皮倩雯 committed
254 255
  return (
    <>
256
      <div className={styles.pipeNetwork}>
257 258
        <Spin tip="loading..." spinning={treeLoading}>
          <div className={styles.tileBtn}>
259 260 261 262 263 264 265 266 267 268
            <span style={{ marginLeft: '20px', marginRight: '5px' }}>快速检索</span>
            <Search
              allowClear
              placeholder="请输入服务名或工程名"
              onSearch={handleSearch}
              onChange={handleChange}
              value={searchValue}
              enterButton
              style={{ width: '300px', marginRight: '20px' }}
            />
269 270 271 272 273 274 275 276 277 278
            <Button
              type="primary"
              onClick={() => {
                updateAll();
              }}
              loading={allLoading}
              style={{ marginRight: '20px' }}
            >
              批量更新
            </Button>
279 280 281 282 283 284 285 286 287
            <Button
              type="primary"
              onClick={() => {
                handleAdd();
              }}
            >
              新增
            </Button>
          </div>
288
          <div style={{ height: 'calc(100% - 51px)', width: '100%' }}>
289 290 291 292 293
            <Table
              columns={columns}
              dataSource={tileData}
              bordered
              rowKey="CreateTime"
294
              scroll={{ y: 'calc(100% - 70px)' }}
295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312
              pagination={{
                showTotal: (total, range) => `第${range[0]}-${range[1]} 条/共 ${total} 条`,
              }}
            />
          </div>
          <AddModal
            visible={visible}
            onCancel={() => setVisible(false)}
            callBackSubmit={onSubmit}
            type={type}
            formObj={formObj}
            solutionNames={solutionNames}
          />
          <PreviewModal
            visible={previewVisible}
            onCancel={() => setPreviewVisible(false)}
            metaData={currentMetaData}
          />
皮倩雯's avatar
皮倩雯 committed
313 314 315 316 317
          <MeteDataModal
            visible={meteDataVisible}
            onCancel={() => setMeteDataVisible(false)}
            metaData={currentMetaData}
          />
318 319
        </Spin>
      </div>
皮倩雯's avatar
皮倩雯 committed
320 321 322 323
    </>
  );
};
export default VectorData;