4.0.48 • Published 6 months ago

wafer-map-trinasolar v4.0.48

Weekly downloads
-
License
MIT
Repository
-
Last release
6 months ago

English | 简体中文

wafer-map

基于React的SVG地图组件

安装和使用

  • 安装

    npm i wafer-map yarn add wafer-map

  • 使用

    import React, { Component } from 'react';
    import WaferMap from 'wafer-map';
    
    class App extends Component {
         render() {
             const mapProps = {
                 mapId: '1',
                 componentWidth: 1920,
                 componentHeight: 1080
             };
     
             return (
                 <div className="App">
                     <WaferMap {...mapProps}/>
                 </div>
             );
         }
    }

    提示: mapId是这张地图的唯一标识.

参数

参数默认值是否必须说明
mapIdtrue地图id
componentWidth1920false地图容器的宽度
componentHeight1080false地图容器的高度
background#dddfalse地图容器的背景色
visibleElement[]false可显示的元素id集合
visibleType[]false可显示的元素类型集合
visibleState[]false可显示的元素状态集合
clickableElement[]false可点击的元素id集合
clickableType[]false可点击的元素类型集合
clickableState[]false可点击的元素状态集合
onClickfalse单选回调方法
onSelectfalse多选回调方法
onClickErrorfalse不可点击事件回调方法
mapZoomtruefalse地图是否可以缩放
mapMovetruefalse地图是否可以移动
multiplefalsefalse是否可以多选
noNamefalsefalse不显示元素上名称
showPathfalsefalse是否显示导引线
markIdfalse被查询或标记的元素id,如: '1'; 如果是多个,可使用字符串数组格式,如 '1', '2'
showStateIds[]false显示不同元素的不同状态,数据结构:{id: 1, state: 'XX', color: '#fff', text: ''}, {}
reloadMapfalse重新加载地图
reloadFinishfalse地图加载完成回调
touchablefalse可触摸控制
deleteIdfalse删除已选的元素id
deleteFinishfalse删除已选元素后的回调
tooltipContentfalse鼠标悬浮在素材上的小气泡内容和样式
elementsColor[]false按照元素id设置颜色,数据结构:{id: 1, color: '#fff'}, {}
pathStartSvgfalse导引线开始图标, 此图标仅包含 svg 内部的元素, 不包含 svg 标签;
pathEndSvgfalse导引线结束图标, 此图标仅包含 svg 内部的元素, 不包含 svg 标签;
pathStylefalse导引线引线样式, 样式设置参考 svg 元素属性
markSvgfalse搜索定位或标记图标, 此图标仅包含 svg 内部的元素, 不包含 svg 标签;
selectedSvgfalse选中图标,此图标仅包含 svg 内部的元素, 不包含 svg 标签;
defaultTooltipKey''气泡里面 可以自定义默认显示取的key,如orgName
getSvgDomfalse获取svg的ViewerDOM回调方法
signatureKeynullfalse签名的key
restfulSignaturefalsefalse控制是否签名,当设置为true时,签名key必须设置有效值
textColor#ffffalse元素显示文字颜色
scaleFactorMax5falsemaximum amount of scale a user can zoom in to
scaleFactorMin0.5falseminimum amount of scale a user can zoom out of
centerEleRate1false设置中心素材放大倍数
centerElement{}false设置中心素材
clickToCenter{}false点击素材剧中放大
clickToCenterfalsefalse是否支持 windows 触摸屏

onClickError返回的错误编码

编码说明
100不显示的元素不能被选中
101元素的id不能被选中
102元素的类型不能被选中
103元素的状态不能被选中
104多选时选中不同类型的元素

方法

方法名参数返回说明
reloadElements更新地图上的元素
clearSelectElement清空已选的元素集合

tooltipContent 的使用样例 tooltipObj 为此方法返回的对象 tooltipContent为null 气泡里的内容为默认defaultTooltipKey属性值,如果defaultTooltipKey属性值为空或者属性不存在,则气泡不显示

tooltipContent = (tooltipObj)=>{ const radius = 5; const width = 150; const height = 45; return ( <path fill="black" fillOpacity="0.7" d={M0 0 l10 10 h ${width / 2 - 10 - radius} a ${radius} ${radius} 90 0 1 ${radius} ${radius} v ${height} a ${radius} ${radius} 90 0 1 ${-radius} ${radius} h ${2 * radius - width} a ${radius} ${radius} 90 0 1 ${-radius} ${-radius} v ${-height} a ${radius} ${radius} 90 0 1 ${radius} ${-radius} h ${width / 2 - 10 - radius} Z} /> <text dy="23" dominantBaseline="text-before-edge" fill="white" textAnchor="middle"

      >
        {tooltipObj.orgName}
      </text>
    </g>
)

}

发布

yarn build
yarn publish

tooltipContent 的使用样例

tipObj为此方法返回的对象

 tooltipContent = (tooltipObj)=>{
    const radius = 5;
    const width = 150;
    const height = 45;
    return (
        <g>
          <path
              fill="black"
              fillOpacity="0.7"
              d={`M0 0 l10 10 h ${width / 2 - 10 - radius}
          a ${radius} ${radius} 90 0 1 ${radius} ${radius} v ${height}
          a ${radius} ${radius} 90 0 1 ${-radius} ${radius} h ${2 * radius - width}
          a ${radius} ${radius} 90 0 1 ${-radius} ${-radius} v ${-height}
          a ${radius} ${radius} 90 0 1 ${radius} ${-radius} h ${width / 2 - 10 - radius} Z`}
          />
          <text
              dy="23"
              dominantBaseline="text-before-edge"
              fill="white"
              textAnchor="middle"
          >
            {tipObj.orgName}
          </text>
        </g>
    )
  }

tipObj对象需要从 getMapStationList这个方法里获取数据存入contentObj对象,获取完整的对象

 *getMapStationList({ payload }, { call, put, select }) {
      const { locationId } = yield select(state => state.swsCommon);
      const param = payload || { locationId };
      const { info } = yield select(state => state.login);
      if (info && info.tenant_id) {
        param.domainId = info.tenant_id;
      }
      const result = yield call(service.getMapStationList, { payload: param });
      if (result && result.code === 0) {
        const onMapList = [];
        const visibleList = [];
        result.data.forEach(item => {
          if (item && item.elementId) {
            visibleList.push(item.elementId);
            onMapList.push({
              id: item.elementId,
              state: item.statusCode,
              color: item.statusColor,
              text: item.userNames || item.stationNum,
              contentObj: item
            });
          }
        });

        yield put({
          type: 'saveOrUpdateData',
          payload: {
            mapStationList: result.data,
            stationsOnMap: onMapList,
            visibleList,
          },
        });
      }
    }