页面树结构

版本比较

标识

  • 该行被添加。
  • 该行被删除。
  • 格式已经改变。

...

代码块
languageyml
config:
  ignore:
  info:
    part-web:
      name: modeler
      cname: 建模端
      forms: {
		helloControl.vue: from/single }
      dependencies: {}

form:标签的格式是:“vue文件名:控件归属类别”,其中归属类别有:

信息

布局:form/layout
单对象控件:form/single
多对象控件:form/multi
时间序列:form/timeseries
模型点选控件:form/model
可视化控件:form/visual
布局:form/layout

注:如果需要引用第三方依赖,可以写在assemble-to.yaml中指定,填写要求为【依赖名:^依赖版本】,这个写法和npm-package中的依赖声明方法是一致的,如:

代码块
languageyml
dependencies: 
{	vue-calendar-component: ^2.8.2}

调试阶段,在命令行内输入devAssemble即可实现开发阶段的自动装配,如果需要清除则输入devClear即可:

...

代码块
languagexml
<template>
	<!--
      建模时的预览前端,即插件的实际显示样式,:addinName="name"和ref="main"一般情况不可去除不可去除
	-->
	<section v-if="t_preview" :addinName="name" ref="main">
		<!-- 在画布区的显示内容 -->
		<span
			style="
				font-size: 50px;
				display: flex;
				justify-content: center;
				align-items: center;"
		>Hello World!</span>
		<span v-show="t_edit" ref="edit"></span>
	</section>
	<section v-else :addinName="name">
		<span style="text-align: center;">
			<div class="form-addin-icon">
				<!-- 控件拖放区图标的样式 -->
				<i class="iconfont">&#xe6a4;</i>
			</div>
			<!-- 在控件拖放区图标的名字 -->
			<div class="form-addin-name">入门控件</div>
		</span>
	</section>
</template>


首先,在第一个section标签中:首先,在第一个section标签中,t

t_preview:是一个开关变量,表单编辑工具将用其控制是否显示成图标样式,建模端的插件分为预览态和图标态,通过t_preview来区分,:addinName="name"和ref="main"一般情况不可去除。

在本章的例子中只需要显示一个居中的hello world!,所以放入了一个span标签并且手动设置了一个样式。

其次,在第一个section标签中,出现的另一个<span>依赖于t_edit变量控制,这是为了在控件被点击以后在右侧的配置区里展示的样子,在入门插件里没有任何配置项,所以只是给出一个空标签即可,在后续表单控件的进阶开发中将介绍如何利用DWF自动提供标准配置的编辑框。

...

此外,控件的id通过name属性返回,需要返回一个的函数是必须实现的,在methods内部需要实现:

...

  • getFormName:如果控件需要绑定DWF数据模型中的数据属性则通过此函数返回名称。
  • setArgs,getArgs:用于设置控件展示的参数,表单建模工具在读入表单配置对应的JSON或者在保存的时候会调用这两个函数。getAllow:是否允许控件内部拖入其他控件,这个函数的返回值决定了控件是否是一个容器。
  • getEditBox:当需要显示配置区的设置项的时候会调用此函数,此时是将配置区显示出来的时候。

最后,表单控件的函数和vue整个生命周期函数调用的顺序是: created -> setDisplayType -> setArgs -> mounted如果需要提前加载某些数据可以在create()里增加,在本章的例子中无需实现create和mounted。

...

代码块
export default {
	// Vue数据绑定的时候要求返回的结果
	data() {
		return {
			// 插件的名字
			name: "helloControl",
			// 表示是否已经进入画布区
			t_preview: falsetrue,
			// 是否显示控件的属性编辑区
			t_edit: false,
			// 属性配置项,按需设置
			args: {},
		};
	},
	methods: {
		//* 默认不用变化,返回编辑框供建模工具绘制,当控件拖入画布区以后被点击的时候触发
		在建模的时候传入,提示控件是在画布区还是在控件列表中getEditBox() {
		0:表示在画布区,已经被拖入
		1:表示在控件区,准备被拖入
		2: 表示在拖动中,还未放下	this.t_edit = true;
		*/
		setDisplayType(type	return this.$refs.edit;
		},
		// 现有表单加载在画布区加载控件的时候,会将之前的配置传入
		setArgs(args) {
			iffor (type == 0) this.t_preview = true;var i in args) {
				this.args[i] = args[i];
			}
			return this;
		},
		// 默认不用变化,返回编辑框供建模工具绘制,当控件拖入画布区以后被点击的时候触发表单保存的时候将控件的设置合并到表单自身的JSON中
		getEditBoxgetArgs() {
			this.t_edit = true;
			returnreturn this.$refs.editargs;
		},
		// 当插件无法直接通过style设置高度时,使用setHeight方法设置高度返回控件绑定的目标属性,如果没有绑定返回undefined或者null
		setHeightgetFormName() {
			ifreturn (!this.$refs.main) returnargs.name;
		},
		// 现有表单加载在画布区加载控件的时候,会将之前的配置传入
		setArgs(args) {
			for (var i in args) {
				this.args[i] = args[i];
			}
			return this;
		},
		// 表单保存的时候将控件的设置合并到表单自身的JSON中
		getArgs() {
			return this.args;
		},
		// 是否允许其他子控件拖入,如果不允许则返回null
		getAllow() {
			return null;
		},
		// 返回控件绑定的目标属性,如果没有绑定返回undefined或者null
		getFormName() {
			return null;
		},
	},
};

控件的<style>标签

如果需要一些特殊的样式可以如下设置,本章的入门控件由于无需设置所以直接置空即可:

代码块
<style>
</style>

最终合并结果

上述代码合并到helloControl.vue文件中的的结果如下:

代码块
<template>
	<!--
      建模时的预览前端,即插件的实际显示样式
      :addinName="name"和ref="main"一般情况不可去除
	-->
	<section v-if="t_preview" :addinName="name" ref="main">
		<!-- 在画布区的显示内容 -->
		<span
			style="
				font-size: 50px;
				display: flex;
				justify-content: center;
				align-items: center;"
		>Hello World!</span>
		<span v-show="t_edit" ref="edit"></span>
	</section>
	<section v-else :addinName="name">
		<span style="text-align: center;">
			<div class="form-addin-icon">
				<!-- 控件拖放区图标的样式 -->
				<i class="iconfont"></i>
			</div>
			<!-- 在控件拖放区图标的名字 -->
			<div class="form-addin-name">入门控件</div>
		</span>
	</section>
</template>

<script>
export default {
	// Vue数据绑定的时候要求返回的结果
	data() {
		return {
			// 插件的名字
			name: "helloControl",
			// 表示是否已经进入画布区
			t_preview: false,
			// 是否显示控件的属性编辑区
			t_edit: false,
			// 属性配置项,按需设置
			args: {},
		};
	},
	methods: {
		/*
		在建模的时候传入,提示控件是在画布区还是在控件列表中
		0:表示在画布区,已经被拖入
		1:表示在控件区,准备被拖入
		2: 表示在拖动中,还未放下
		*/
		setDisplayType(type) {
			if (type == 0) this.t_preview = true;
			return this;
		},},
};

控件的<style>标签

如果需要一些特殊的样式可以如下设置,本章的入门控件由于无需设置所以直接置空即可:

代码块
<style>
</style>

最终合并结果

上述代码合并到helloControl.vue文件中的的结果如下:

代码块
<template>
	<!--
      建模时的预览前端,即插件的实际显示样式
      :addinName="name"和ref="main"一般情况不可去除
	-->
	<section v-if="t_preview" :addinName="name" ref="main">
		<!-- 在画布区的显示内容 -->
		<span
			style="
				font-size: 50px;
				display: flex;
				justify-content: center;
				align-items: center;"
		>Hello World!</span>
		<span v-show="t_edit" ref="edit"></span>
	</section>
	<section v-else :addinName="name">
		<span style="text-align: center;">
			<div class="form-addin-icon">
				<!-- 控件拖放区图标的样式 -->
				<i class="iconfont"></i>
			</div>
			<!-- 在控件拖放区图标的名字 -->
			<div class="form-addin-name">入门控件</div>
		</span>
	</section>
</template>

<script>
export default {
	// Vue数据绑定的时候要求返回的结果
	data() {
		return {
			// 插件的名字
			name: "helloControl",
			// 表示是否已经进入画布区
			t_preview: true,
			// 是否显示控件的属性编辑区
			t_edit: false,
			// 属性配置项,按需设置
			args: {},
		};
	},
	methods: {
		// 默认不用变化,返回编辑框供建模工具绘制,当控件拖入画布区以后被点击的时候触发
		getEditBox() {
			this.t_edit = true;
			return this.$refs.edit;
		},
		// 当插件无法直接通过style设置高度时,使用setHeight方法设置高度
		setHeight() {edit = true;
			ifreturn (!this.$refs.main) returnedit;
		},
		// 现有表单加载在画布区加载控件的时候,会将之前的配置传入
		setArgs(args) {
			for (var i in args) {
				this.args[i] = args[i];
			}
			return this;
		},
		// 表单保存的时候将控件的设置合并到表单自身的JSON中
		getArgs() {
			return this.args;
		},
		// 是否允许其他子控件拖入,如果不允许则返回null
		getAllow() {
			return null;
		},
		// 返回控件绑定的目标属性,如果没有绑定返回undefined或者null
		getFormName() {
			return nullthis.args.name;
		},
	},
};
</script>

<style>
</style>

...

代码块
languageyml
config:
  ignore:
  info:
    part-web:
      name: modeler
      cname: 建模端
      forms: {
		helloControl.vue: from/single }
      dependencies: {}


2.2 控件的应用端

应用端<template>标签

...

  • template标签中,需要提供画布预览、编辑区和图标状态的标签。
  • script标签中
    • data()返回需要给出一些基本属性:name,args,此外为了和标签配合,需要设置一些控制变量,例如t_preview,t_edit。 
    • 需要提供如下的一些函数实现:setDisplayType,getFormName,setArgs,getArgs,getAllow,getEditBox。

在应用端,需要注意的实现要点如下:

...