zouyaoji / vue-cesium

🎉 Vue 3.x components for CesiumJS.
https://zouyaoji.top/vue-cesium
MIT License
1.47k stars 317 forks source link

[Bug Report] 绘制控件,在可编辑模式下,【点】类型的mouseover事件会停止渲染 #256

Closed HNQX closed 2 years ago

HNQX commented 2 years ago

VueCesium version

3.0.17

OS/Browsers version

win11

Vue version

3.2.37

Cesium version

1.96.0

Reproduction Link

https://zouyaoji.top/vue-cesium/#/zh-CN/component/analyses/vc-drawings

Steps to reproduce

打开【可编辑】模式,鼠标移动到【点】上

What is Expected?

期待无报错

What is actually happening?

报错,停止渲染

PS:VIDEO

HNQX commented 2 years ago

好像pixelSize一定要声明,否则就会报错 pointOpts: { pixelSize: 8, onClick(){ console.log(123213); } }

zouyaoji commented 2 years ago

嗯 得传。 其实这个问题也困扰我很久了,比较方便的应该是不传,然后组件内部去merge默认属性,因为配置对象还是有好几层,只能但内部深度merge,但这样会导致 props 响应式丢失。一直也没想好完美解决方案。

目前是 vue-cesium 把一些默认配置导出了,用的时候先导入默认配置,然后通过 Object.assgin({}, defaultProps, 你自定义的)来传进去。

zouyaoji commented 2 years ago

举个例子吧

import { editorOptsDefault, pointDrawingDefault } from 'vue-cesium/es/composables/use-drawing/defaultOpts'

const pinDrawingOpts = {
  billboardOpts: {
    image: '/images/pin.svg',
    scale: 0.25
  },
  editorOpts: Object.assign({}, pointDrawingDefault.editorOpts, {
    custom: Object.assign({}, editorOptsDefault, {
      icon: 'label',
      tooltip: {
        tip: '编辑文本'
      },
      callback: (index, polyline) => {
        $q.dialog({
          title: '提示',
          message: '请输入文本',
          prompt: {
            model:
              drawingsRef.value.getDrawingActionInstances()[0].cmpRef.value.renderDatas.value[index].labelOpts.text ||
              '',
            isValid: val => val.length > 0, // << here is the magic
            type: 'text' // optional
          },
          cancel: true,
          persistent: true
        }).onOk(data => {
          drawingsRef.value.getDrawingActionInstances()[0].cmpRef.value.renderDatas.value[index].labelOpts.text = data
        })
      }
    })
  })
}