如何控制组件在设计画布只能拖入一次?

[复制链接]
查看: 2594   回复: 6

2

主题

1

回帖

2万

积分

论坛元老

Rank: 8Rank: 8

积分
25257
2023-3-21 11:00:48   显示全部楼层   阅读模式  
如何控制组件在设计画布只能拖入一次?
我知道答案 回答被采纳将会获得200 威望 已有6人回答
回复

使用道具 举报

7

主题

237

回帖

27万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
273291
2023-3-21 11:41:14   显示全部楼层  
当组件从左侧的组件面板拖拽到设计画布上时,会触发draggable组件的move钩子,因此在这里控制即可。
具体查看源码widget-panel\index.vue中的checkContainerMove、checkFieldMove方法。
回复

使用道具 举报

0

主题

2

回帖

82

积分

注册会员

Rank: 2

积分
82
2023-3-21 13:37:04   显示全部楼层  
本帖最后由 vform 于 2023-3-21 14:26 编辑

给不需要拖动的组件加一个class。
在draggable上添加filter
修改拖动的逻辑,不在拖动的时候生成ID
  1. <draggable tag="ul" :list="basicFields" :group="{name: 'dragGroup', pull: 'clone', put: false}"
  2.                      :move="checkFieldMove"
  3.                      filter=".added"
  4.                      :clone="handleFieldWidgetClone" ghost-class="ghost" :sort="false">
  5.             <li v-for="(fld, index) in basicFields" :key="index"
  6.                 class="field-widget-item"
  7.                 :class="{added: widgetRefList.includes(fld.options.name)}"
  8.                 :title="fld.displayName"
  9.                 @dblclick="addFieldByDbClick(fld)">
  10.               <span><svg-icon :icon-class="fld.icon" class-name="color-svg-icon"/>{{ fld.displayName }}</span>
  11.             </li>
  12.           </draggable>
复制代码

data
  1. widgetRefList: []
复制代码
watch
  1. 'designer.widgetList': {
  2.       deep: true,
  3.       handler(val) {
  4.         this.$nextTick(() => {
  5.           this.widgetRefList = Object.keys(this.designer.formWidget.widgetRefList)
  6.         })
  7.       }
  8.     }
复制代码
mount
  1. this.$nextTick(() => {
  2.       this.widgetRefList = Object.keys(this.designer.formWidget.widgetRefList)
  3.     })
复制代码












回复

使用道具 举报

0

主题

1

回帖

91

积分

注册会员

Rank: 2

积分
91
2023-3-21 14:17:06   显示全部楼层  
vform 发表于 2023-3-21 13:37
给不需要拖动的组件加一个class。
在draggable上添加filter

这方法也很6
回复

使用道具 举报

0

主题

2

回帖

82

积分

注册会员

Rank: 2

积分
82
2023-3-21 14:25:49   显示全部楼层  

我修改了拖动的逻辑,不在拖动的时候生成ID,所以可以这么干
回复

使用道具 举报

0

主题

7

回帖

19

积分

新手上路

Rank: 1

积分
19
yyx
2023-9-5 10:05:19   显示全部楼层  
具体查看源码widget-panel\index.vue中的checkContainerMove、checkFieldMove方法。
回复

使用道具 举报

0

主题

10

回帖

36

积分

新手上路

Rank: 1

积分
36
dpl
2023-9-18 08:18:09   显示全部楼层  
问题很赞
回复

使用道具 举报

您需要登录后才可以回帖   登录 注册账号

高级模式