项目中集成variant form 表单设计器

1.安装

npm install vform-builds

2.min.js中全局引入

import Vue from 'vue'
import App from './App.vue'
 
import ElementUI from 'element-ui'  //引入element-ui库
import VForm from 'vform-builds'  //引入VForm库
 
import 'element-ui/lib/theme-chalk/index.css'  //引入element-ui样式
import 'vform-builds/dist/VFormDesigner.css'  //引入VForm样式
 
Vue.config.productionTip = false
 
Vue.use(ElementUI)  //全局注册element-ui
Vue.use(VForm)  //全局注册VForm(同时注册了v-form-designer和v-form-render组件)
 
new Vue({
  render: h => h(App),
}).$mount('#app')

3.你要放置的页面

<template>
  <div>
    <v-form-designer ref="vfDesigner" :designer-config="designerConfig">
      <template #customToolButtons>
        <el-button @click="save" type="text"  icon="el-icon-plus">保存</el-button>
      </template>
    </v-form-designer>
  </div>
</template>
 
<script>
 
  export default {
    data() {
      return {
        designerConfig: {
          // 是否显示语言切换菜单
          languageMenu: false,
          // 是否显示GitHub、文档等外部链接
          externalLink: false,
          // 是否显示表单模板
          formTemplates: true,
          // 是否禁止修改唯一名称
          widgetNameReadonly: false,
          // 是否显示组件事件属性折叠面板
          eventCollapse: true,
          // 是否显示清空设计器按钮
          clearDesignerButton: true,
          // 是否显示预览表单按钮
          previewFormButton: true,
          // 是否显示导入JSON按钮
          importJsonButton: false,
          // 是否显示导出JSON器按钮
          exportJsonButton: false,
          // 是否显示导出代码按钮
          exportCodeButton: false,
          // 是否显示生成SFC按钮
          generateSFCButton: false,
          // 工具按钮栏最大宽度(单位px)
          toolbarMaxWidth: 180,
          // 工具栏按钮最小宽度(单位px)
          toolbarMinWidth: 180,
          // 表单设计器预设CSS代码
          presetCssCode: '',
        },
      }
    },
    mounted() {
     var jsonStr = "{\"widgetList\":[{\"type\":\"input\",\"icon\":\"text-field\",\"formItemFlag\":true,\"options\":{\"name\":\"name\",\"label\":\"姓名\",\"labelAlign\":\"\",\"type\":\"text\",\"defaultValue\":\"\",\"placeholder\":\"\",\"columnWidth\":\"200px\",\"size\":\"\",\"labelWidth\":null,\"labelHidden\":false,\"readonly\":false,\"disabled\":false,\"hidden\":false,\"clearable\":true,\"showPassword\":false,\"required\":false,\"requiredHint\":\"\",\"validation\":\"\",\"validationHint\":\"\",\"customClass\":\"\",\"labelIconClass\":null,\"labelIconPosition\":\"rear\",\"labelTooltip\":null,\"minLength\":null,\"maxLength\":null,\"showWordLimit\":false,\"prefixIcon\":\"\",\"suffixIcon\":\"\",\"appendButton\":false,\"appendButtonDisabled\":false,\"buttonIcon\":\"el-icon-search\",\"onCreated\":\"\",\"onMounted\":\"\",\"onInput\":\"\",\"onChange\":\"\",\"onFocus\":\"\",\"onBlur\":\"\",\"onValidate\":\"\",\"onAppendButtonClick\":\"\"},\"id\":\"input90030\"},{\"type\":\"radio\",\"icon\":\"radio-field\",\"formItemFlag\":true,\"options\":{\"name\":\"sex\",\"label\":\"性别\",\"labelAlign\":\"\",\"defaultValue\":2,\"columnWidth\":\"200px\",\"size\":\"\",\"displayStyle\":\"inline\",\"buttonStyle\":false,\"border\":false,\"labelWidth\":null,\"labelHidden\":false,\"disabled\":false,\"hidden\":false,\"optionItems\":[{\"label\":\"男\",\"value\":1},{\"label\":\"女\",\"value\":2}],\"required\":false,\"requiredHint\":\"\",\"validation\":\"\",\"validationHint\":\"\",\"customClass\":\"\",\"labelIconClass\":null,\"labelIconPosition\":\"rear\",\"labelTooltip\":\"\",\"onCreated\":\"\",\"onMounted\":\"\",\"onChange\":\"\",\"onValidate\":\"\"},\"id\":\"radio100459\"}],\"formConfig\":{\"modelName\":\"formData\",\"refName\":\"vForm\",\"rulesName\":\"rules\",\"labelWidth\":80,\"labelPosition\":\"left\",\"size\":\"\",\"labelAlign\":\"label-left-align\",\"cssCode\":\"\",\"customClass\":\"\",\"functions\":\"\",\"layoutType\":\"PC\",\"onFormCreated\":\"\",\"onFormMounted\":\"\",\"onFormDataChange\":\"\"}}";
      this.$refs.vfDesigner.setFormJson(JSON.parse(jsonStr))
    },
    beforeDestroy() {
      this.$refs.vfDesigner.clearDesigner()
    },
    methods: {
      async save() {
        const jsonStr = JSON.stringify(this.$refs.vfDesigner.getFormJson());
        console.log(jsonStr);
        alert(jsonStr);
      }
    },
  }
</script>
 
<style lang="scss" scoped>
  body {
    margin: 0; /* 如果页面出现垂直滚动条,则加入此行CSS以消除之 */
  }
 
  #app .app-main{
    .main-container{
      margin-left:0px;
    }
  }
 
  /* 隐藏head头部 */
  ::v-deep .main-header {
    display: none !important;
  }
 
  /* 隐藏pc mobile按钮组 */
  ::v-deep .left-toolbar .el-button-group {
    display: none;
  }
 
  /* 隐藏组件层次结构树 */
  ::v-deep .left-toolbar [title='组件层次结构树'] {
    display: none;
  }
 
</style>

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值