    import { LayerView, showLayerByScale } from '@mapgis/webclient-common'
    import WebTileLayerUtil from '../view/utils/WebTileLayerUtil'
    import LeafletPlugin from '../util/LeafletPlugin'

    class WebTileLayerView extends LayerView {
      /**
       * 添加图层视图
       * @param {LayerEvent} 图层事件
       * @return {Promise<LayerView>} 图层视图
       */
      onAdd() {
        const layer = this.layer
        const innerView = this.innerView
        // 不在比例尺范围内，隐藏图层
        showLayerByScale(this.view, layer)
        this.innerLayer = WebTileLayerUtil.addWebTileLayer(layer, innerView, {
          // 初始化裁剪区
          clippingArea: LeafletPlugin.convertClippingArea(layer.clippingArea)
        })
        this.innerLayer.commonLayerId = layer.id
        return Promise.resolve(this)
      }

      /**
       * 移除图层视图
       * @param {LayerEvent} 图层事件
       * @return {Promise<LayerView>} 图层视图
       */
      onRemove() {
        this.innerView.removeLayer(this.innerLayer)
        return Promise.resolve(this)
      }

      /**
       * 更新图层视图
       * @param {LayerViewUpdateEvent} 图层事件
       * @return {Promise<LayerView>} 图层视图
       */
      onUpdate(event) {
        // 确保有updateContent
        if (event.updateContent) {
          for (let i = 0; i < event.updateContent.length; i++) {
            const updateContent = event.updateContent[i]
            // 有updateContent
            if (updateContent) {
              switch (updateContent.name) {
                // 更新主图层可见性
                case 'visible':
                  // 如果记录了上一次的透明度
                  if (this.layer.hasOwnProperty('lastOpacity')) {
                    this.innerLayer.setOpacity(
                      this.layer.visible ? this.layer.lastOpacity : 0
                    )
                  } else {
                    this.innerLayer.setOpacity(
                      this.layer.visible ? this.layer.opacity : 0
                    )
                  }
                  // 记录上次的透明度
                  this.layer.lastOpacity = this.layer.opacity
                  break
                // 更新透明度
                case 'opacity':
                  this.innerLayer.setOpacity(this.layer.opacity)
                  break
                // 刷新图层
                case 'refresh':
                  this.innerLayer.redraw()
                  break
                // 更新图层顺序
                case 'index':
                  this.innerLayer.setZIndex(this.layer._realIndex)
                  break
                // clipping图层
                case 'clippingArea': {
                  const args = updateContent.params
                  // 解析layout style 此参数键值对
                  const clippingArea = args[0]
                  this.innerLayer.setClippingArea(
                    LeafletPlugin.convertClippingArea(clippingArea)
                  )
                  break
                }
                default:
                  break
              }
            }
          }
        }
        return Promise.resolve(this)
      }
    }
    export default WebTileLayerView