首页 > 编程知识 正文

拖拽方式生成Vue用户界面

时间:2023-05-05 19:46:39 阅读:103391 作者:1211

前阵子拜访了一些小伙伴,大家都说前端工作太辛苦,开发前端花了很多时间。基于尽可能提高开发效率而不损失灵活性的原则,作者尝试在框架中集成拖拽生成Vue用户界面的功能作为补充,以方便快速生成add-delete-check界面,也可用于大屏显示和简单的网页制作。

00-1010

一、技术原理

目前只实现了基于vue-grid-layout的网格布局,将设计画布上的每个组件动态加载到对应的GridItem中,并根据组件配置绑定对应的prop和事件。

!-src/组件/设计者/视图/vuevisaualdesigner . vue-

网格布局ref=' gridLayout ' class=' editorCanvas ' : layout . sync=' layout '

: col-num=' layout option . colnum ' : row-height=' layout option . row height '

:is-draggable='!preview ' : is-resized='!preview ' @ drago over . native=' onDragOverGrid '

grid-item class=' widgetPanel ' v-for='布局中的项' : x=' item . x ' :y=' item . y ' : w=' item . w '

:h=' item . h ' : I=' item . I ' : key=' item . I '

@ resize=' OnemResize(item)' @ container-resize=' OnemResize(item)'

div v-if='!preview ' class=' widgetOverlay ' @ click=' onSelectWidget(item)'/div

!-动态小部件-

组件: ref=' item . I ' : is=' item . c ' : style=' makeWidgetStyle(item)

v-model=' RunState[item . m]' v-bind=' item . p ' v-on=' item . a '

{{ item.t }}

/组件

/grid-项目

/网格布局

1.1 布局

每个组件的配置在下面的示例中抽象为接口,用于描述组件的属性和相关的布局信息。请注意,它可以分为设计时属性和运行时属性,运行时属性仅在预览和运行时期间动态生成。

//src/runtime/IVueVisual.ts

导出接口IVueLayoutItem {

/* *组件名称eg:输入*/

n:字符串;

/** v-text */

t?字符串;

/** v型*/

m?字符串;

/* *组件propseg : { Size : ' mini ' } */

p:对象;

/* *组件绑定的propseg : { data : ' : data ' } */

b?对象;

/* *设计时事件定义eg 3360 { click 3360 { ivueeventaction } } */

e?对象;

/* *运行时为v-on绑定EG: {Click3360函数()}生成的事件处理程序.}} */

a?对象;

/* * Vue组件在运行时动态加载*/

c?任何;

}

/* *基于网格的布局项目*/

导出接口IVueGridLayoutItem扩展了IVueLayoutItem {

i:字符串;

x:号;

y:号;

w:号;

h:号;

}

00-1010灯光组件和布局只能呈现在界面上,业务数据需要绑定。因此,每个视图模型都有对应的状态设置(即Vue的数据),描述了状态的名称和类型以及对应设置值的操作。在运行时,视图的状态将从后端加载数据,或者根据设置将其设置为默认值。

/* *在设计时查看状态项*/

导出接口IVueState {

Name:字符串;

键入:字符串;

/* *设置状态值的操作,eg:调用服务后设置状态值*/

Value: IVueEventAction

}

00-1010按钮类等一些组件可以绑定相应的事件处理。目前事件处理主要分为LoadData和PostData两类,分别对应从后端读取数据到当前状态,并将当前状态数据提交给后端处理。

导出类型event action=' LoadData ' | ' post data ' | ' RunScript ';

导出接口IVueEventAction {

/* *操作类型,eg:加载数据*/

只读类型:事件操作;

}

导出接口IVueLoadDataAction扩展了IVueEventAction {

/* *状态目标eg: State=LoadService() */

State:字符串;

Service:字符串;//后端服务: eg 3360 sys . order service . list all

serviceargs 3360 any[];//eg3360 [{name :' arg1 ',type :' string ',value :'' cqdzh''}],value是表达式。

}

00-1010可拖放到画布上的组件由全局配置“VueWidgets”定义,该配置可分为全局注册组件和自定义组件。自定义组件可以是代码视图模型,也可以是可视化视图模型。

//自定义小部件配置定义

{

名称' : '表',//组件名称

组件“:”系统。EXTABLE ',//指向自定义视图模型或全局组件名称(EG3360ELINPUT)

图标' : 'fa fa-table ',//工具箱图标

宽度' : 12,//默认网格宽度

高度' : 6,//默认网格高度

道具' : [//组件道具

{

名称' : '列',

类型' : '数组',

默认值' : [],

编辑器“:”sys . extablecolumn editor//指向自定义属性编辑器。

},

{

名称' : '行',

类型' : '数组',

默认' : []

}

]

}

00-1010新建视图模型时注意类型选择:Vue Visual,原代码模式为Vue Code。

设计界面的功能区如下图:所示。

具体操作演示请看短视频。

00-1010作者的非专业前端,这里只是一个参考,希望感兴趣的伙伴继续完善,比如实现自由布局(绝对定位)和组件动画。另一方代码对另一方代码进行文本编码并不容易。作者需要你的支持。请点赞推荐!

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。