Code Monkey home page Code Monkey logo

f-render's Introduction

f-render | 基于 ElementUI 的表单设计器

MIT npm bundle size npm Netlify Status gitub pages Star on GitHub

介绍

f-render 是基于 vue-ele-form 开发的可视化表单设计工具, 适用于 各种流程引擎和动态表单项目,大大节省你的开发时间;

f-render 演示图

注意

注意,此设计器不是独立存在的,是依托于 vue-ele-form,在使用前请务必阅读 vue-ele-form 的文档

特性

  • 组件方式:以组件方式接入,1 分钟轻松接入;
  • 体积小:Gzip 压缩后 100k 左右;
  • 易扩展:可以在不更改源码的情况下增删改属性、组件;

Demo

https://dream2023.gitee.io/f-render/

教程

虽然 f-render 可以做到在不更改源码的情况下实现大量的定制化,但是依然有不少人希望能够根据公司的需求进行二次开发。

所以我推出了一个从 0 实现整个项目的 教程,如果感兴趣 f-render 的实现过程和思考,可以点击 从 0 实现可视化表单组件 进行学习。

1 分钟快速接入

第 1 步:安装

yarn add element-ui  # npm install element-ui -S
yarn add vue-ele-form # npm install vue-ele-form -S
yarn add f-render # npm install f-render -S

第 2 步:注册

// vue-ele-form 的注册可参考:https://www.yuque.com/chaojie-vjiel/vbwzgu/xl46cd
import EleForm from "vue-ele-form";
import FRender from "f-render";
import ElementUI from "element-ui";
import "element-ui/lib/theme-chalk/index.css";

Vue.use(ElementUI);
Vue.use(EleForm);
Vue.component("f-render", FRender);

第 3 步:使用

<template>
  <f-render
    @save="handleSave"
    :loading="loading"
    height="calc(100vh - 60px)"
    :config="formConfig"
  />
</template>

<script>
  export default {
    data() {
      return {
        loading: false,
        formConfig: {}
      };
    },
    methods: {
      handleSave(res) {
        // 这里是保存到 localStorage,你可以保存到服务器
        localStorage.setItem("form-config", res);
        this.$message.success("保存成功啦~");
      }
    },
    mounted() {
      // 模拟异步加载
      this.loading = true;
      setTimeout(() => {
        this.loading = false;
        this.formConfig = localStorage.getItem("form-config") || "";
      }, 1000);
    }
  };
</script>

用户模式

我们把动态表单分为两个阶段:

  • 首先是设计阶段:通过拖拽设计表单;
  • 然后是用户阶段:将设计好的表单以纯表单的形式让用户填写。

我们别分称这两个阶段的表单为设计模式和用户模式。设计模式的表单配置我们已经讲了,下面看用户模式下的表单配置:

基于 f-render 的配置

通过属性 pure, 可以直接做为表单使用,其数据提交方式同 vue-ele-form 一样,具体可查看文档

<template>
  <f-render
    v-model="formData"
    :request-fn="handleSubmit"
    @request-success="handleSuccess"
    :config="formConfig"
    pure
  />
</template>

<script>
  export default {
    data() {
      return {
        formData: {},
        formConfig: ""
      };
    },
    methods: {
      handleSubmit(data) {
        // eslint-disable-next-line no-console
        console.log(data);
        return Promise.resolve();
      },
      handleSuccess() {
        this.$message.success("创建成功");
      }
    },
    mounted() {
      // 模拟异步加载
      this.loading = true;
      setTimeout(() => {
        this.loading = false;
        this.formConfig = localStorage.getItem("form-config") || "";
      }, 1000);
    }
  };
</script>

基于 vue-ele-form 的配置

如果你的可视化设计和表单使用,不再一个系统,可以直接使用 vue-ele-form,不必安装 f-render,具体如下:

<template>
  <ele-form
    v-model="formData"
    :request-fn="handleSubmit"
    @request-success="handleSuccess"
    v-if="formConfig"
    v-bind="formConfig"
  />
</template>

<script>
  export default {
    data() {
      return {
        formData: {},
        formConfig: null
      };
    },
    methods: {
      handleSubmit(data) {
        // eslint-disable-next-line no-console
        console.log(data);
        return Promise.resolve();
      },
      handleSuccess() {
        this.$message.success("创建成功");
      }
    },
    mounted() {
      // 模拟异步加载
      setTimeout(() => {
        try {
          // 这里必须对字符串进行反序列化
          this.formConfig = eval(`(${localStorage.getItem("form-config")})`);
        } catch {
          this.$message.error("数据解析失败");
        }
      }, 1000);
    }
  };
</script>

定制化

新增官方扩展组件(以富文本扩展为例)

安装组件

yarn add vue-ele-form-quill-editor

注册组件

Vue.component("quill-editor", EleFormQuillEditor);

配置属性

<template>
  <!-- 省略其它属性 -->
  <f-render :comps="comps" />
</template>

<script>
  // 默认配置
  import comps from "f-render/src/fixtures/comps";
  // 富文本配置
  import quillEditor from "f-render/src/fixtures/extends/quill-editor";
  // 可以更改显示组件位置,默认为 10
  // 这里更改为 2,显示更靠前
  quillEditor.sort = 2;

  export default {
    data() {
      return {
        // 拼接上即可
        comps: comps.concat(quillEditor)
      };
    }
  };
</script>

新增自定义组件

创建组件并全局注册

需要根据 vue-ele-form 文档创建自定义组件,并注册。

书写配置

你可以参考源码中的配置,一下是范例和属性说明:

// custom-url.js
export default {
  // 假如这个组件叫 url(必填)
  type: "custom-url",
  // 默认标签名(必填)
  label: "URL",
  // 用于排序,值越小,越靠前
  sort: 1,
  // 属性配置
  config: {
    // 属性配置说明地址(可省略)
    url: "https://www.xxx.com",
    // 组件属性配置(不知道啥是组件属性,可以看一下界面右侧)
    attrs: {
      // config 配置 参考 FormDesc:
      // https://www.yuque.com/chaojie-vjiel/vbwzgu/iw5dzf#KOPkD
      config: {
        // max 为属性名
        max: {
          type: "number",
          label: "最大输入长度"
        },
        name: {
          type: "input",
          label: "原生 name",
          // 必填
          required: true
        }
        // ....
      },
      // 默认值,如果在配置文件里设置了,则每个组件都会携带
      data: {
        name: "url"
      }
    },
    // 表单项配置,是 FormDesc 中非 attrs 的其它配置,
    // 具体可看:https://www.yuque.com/chaojie-vjiel/vbwzgu/iw5dzf#hl4pm
    common: {
      config: {
        // 默认值
        default: {
          type: "input",
          label: "默认值"
        }
      },
      data: {}
    }
  }
};

合并配置并传入

<template>
  <!-- 省略其它属性 -->
  <f-render :comps="comps" />
</template>

<script>
  import comps from "f-render/src/fixtures/comps";
  import customUrl from "some/path/custom-url";
  export default {
    data() {
      return {
        comps: comps.concat(customUrl)
      };
    }
  };
</script>

定制化原组件配置 & 表单配置

  • 组件配置目录:f-render/src/fixtures/comps.js
  • 表单配置目录:f-render/src/fixtures/form-props.js
  • 表单项通用属性配置:f-render/src/fixtures/form-item-common.js
  • 扩展组件目录:f-render/src/fixtures/extends/[扩展组件名].js

如果你想修改组件属性或者表单的属性,减少或者增加组件,可以将上述文件拷贝到自己的项目目录,参考上述配置说明,进行更改,并传入即可:

<!-- formProps 是表单属性 -->
<!-- comps 是组件列表和属性 -->
<!-- formItemCommon 是表单项通用属性配置 -->
<f-render
  :form-props="formProps"
  :comps="comps"
  :form-item-common="formItemCommon"
/>

具体而言,如果想让每个 input 组件都携带 clearable: true 的属性,我们可以这样操作:

<template>
  <!-- 其它属性省略 -->
  <!-- 将更改后的 comps 传递过去即可 -->
  <f-render :comps="comps" />
</template>

<script>
  import comps from "f-render/src/fixtures/comps";
  // 查找 input 组件,当然你也可以看源码,直接查看索引
  const inputIndex = comps.findIndex(item => item.type === "input");
  // 更改 config.attrs.data 值即可
  comps[inputIndex].config.attrs.data = { clearable: true };

  export default {
    data() {
      return {
        comps
      };
    }
  };
</script>

定制化右侧 Tabs

我们可以通过 isShowRight 属性来控制右侧面板是否显示,通过 rightTabs 来定制具体显示的面板名称,具体如下:

<template>
  <!-- 定制化右侧 tabs -->
  <f-render :right-tabs="tabs" />
</template>

<script>
  export default {
    data() {
      return {
        tabs: [
          { label: "表单项属性配置", name: "form-item-common" },
          { label: "组件属性配置", name: "form-item-attrs" }
          // 注释下面的内容,就可以不显示
          // { label: "表单配置", name: "form-props" }
        ]
      };
    }
  };
</script>

样式定制化

直接进行样式覆盖即可,注意不要加 scoped,否则覆盖不成功

二次开发

如果仅通过属性样式定制化已无法满足的你和你产品经理的要求,那就需要进行定制化开发,我个人觉得代码整体还是非常简单的,你可以 clone 代码或者下载后(建议用gitee),进行相应的更改,更改后有两种处理方式:

  • 直接放到项目目录里,并将安装 dependencies 的依赖复制到项目,进行开发即可;
  • 直接开发,然后发布到公司私服,如果是开源,则可以发到 GitHub 或者 gitee,然后安装自己的即可

具体的细节,开头提的教程里会有详细的过程,希望大家可以支持一下。

f-render 问答集锦

Props 说明

props: {
  // 表单内容
  config: {
    type: [Object, String],
    required: true
  },
  // 设计器整体高度
  height: {
    type: [String, Number],
    default: "400px"
  },
  // 保存格式
  saveFormat: {
    type: String,
    default: "string",
    validator(val) {
      return ["object", "string"].includes(val);
    }
  },
  // 是否纯净(用于显示表单)
  pure: Boolean,
  // 表单配置
  formProps: {
    type: Object,
    default: () => formProps
  },
  // 表单项配置
  formItemCommon: {
    type: Object,
    default: () => formItemCommonDefault
  },
  // 组件列表
  comps: {
    type: Array,
    default: () => comps
  },
  // 操作配置
  operations: {
    type: Array,
    default: () => ["preview", "data", "code", "batch", "clear", "save"]
  },
  // 是否显示右侧
  isShowRight: {
    type: Boolean,
    default: true
  },
  // 右侧属性面板 Tabs
  rightTabs: {
    type: Array,
    default: () => [
      { label: "表单项属性配置", name: "form-item-common" },
      { label: "组件属性配置", name: "form-item-attrs" },
      { label: "表单配置", name: "form-props" }
    ]
  },
  // 是否在加载
  loading: Boolean,

  // 表单相关(pure 为 true 时), 同 vue-ele-form
  // https://www.yuque.com/chaojie-vjiel/vbwzgu/dyw8a7
  requestFn: Function,
  isLoading: Boolean,
  formError: Object,
  // ....
},

插槽

  • left:左侧组件列表
  • main: 中间区域
  • main-header: 头部操作区
  • main-content: 表单设计区
  • right: 右侧属性配置区

举例:

<template>
  <f-render>
    <!-- 左侧插槽 -->
    <template v-slot:left="{frender}">
      <div>
        <div>left</div>
        <div>{{frender.comps}}</div>
      </div>
    </template>
  </f-render>
  <template></template
></template>

其中 frender 数据是 f-render 组件数据的集合,具体都有哪些数据,可以参考源码,其它插槽均有此参数。

生态

Project Status Description
vue-ele-form npm 接基于 ElementUI 的数据驱动表单
f-render npm 专为 vue-ele-form 开发的可视化表单设计工具
vue-ele-form-json-editor npm JSON 编辑器(vue-ele-form 扩展)
vue-ele-form-upload-file npm upload 文件上传组件(vue-ele-form 扩展)
vue-ele-form-image-uploader npm 上传图片增强组件(vue-ele-form 扩展)
vue-ele-form-tree-select npm 树形选择框组件(vue-ele-form 扩展)
vue-ele-form-table-editor npm 表格编辑器(vue-ele-form 扩展)
vue-ele-form-dynamic npm 动态表单(vue-ele-form 扩展)
vue-ele-form-video-uploader npm 上传视频增强组件(vue-ele-form 扩展)
vue-ele-form-quill-editor npm 富文本编辑器(vue-ele-form 扩展)
vue-ele-form-markdown-editor npm markdown 编辑器(vue-ele-form 扩展)
vue-ele-form-bmap npm 百度地图组件(vue-ele-form 扩展)
vue-ele-form-codemirror npm 代码编辑器(vue-ele-form-gallery 扩展)
vue-ele-form-gallery npm 图片/视频展示组件(vue-ele-form 扩展)
vue-ele-form-data-editor npm 轻量级数据编辑器(vue-ele-form 扩展)

特别感谢赞助者

优客服
圣捷远创
damonnie
xzusoft
seeenter
高亢

如果您觉得对您有所帮助, 可以请作者喝一杯咖啡, 让开源走的更远, 点击进入码云赞赏一下, 并加入下面交流群, 将链接发送给我

Contributors ✨

Thanks goes to these wonderful people (emoji key):


张超杰

📖 💻 🤔

Wisen

💻

IWANABETHATGUY

💻

This project follows the all-contributors specification. Contributions of any kind welcome!

f-render's People

Contributors

allcontributors[bot] avatar dependabot[bot] avatar dream2023 avatar iwanabethatguy avatar ljspace avatar mowangjuanzi avatar wisenl avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

f-render's Issues

拖拽生成表单时,有多个radio标签,切换展示内容没有变化

Bug report(问题描述)

Steps to reproduce(问题复现步骤)

Screenshot or Gif(截图或动态图)

image

Link to minimal reproduction(最小可在线还原 demo)

Other relevant information(格外信息)

  • Vue version:2.6.10
  • f-render version:4.12.3
  • ElementUI version:2.13.2
  • vue-ele-form version:0.8.56

在创建表单时,同一类表单组件的placeholder属性没有单独保存

Bug report(问题描述)

比如添加2个单行输入框,改动其中一个输入框的placeholder属性后,另一输入框的placeholder属性也会跟着变动。该问题只出现在创建表单的时候,更新表单无该问题。

Steps to reproduce(问题复现步骤)

  1. 添加2个单行输入框
  2. 修改其中1个输入框的placeholder属性

Other relevant information(格外信息)

  • Vue version: 2.6.10
  • f-render version: 4.12.1
  • ElementUI version: 2.13.2
  • vue-ele-form version: 0.8.53

【bug】生成的“上传图片控件”报错

版本信息

  • vue:2.6.1
  • vue-ele-form: 0.8.25

我的代码

<template>
  <div class="home">
    <ele-form
      :formDesc="formDesc"
      v-model="formData"
      :request-fn="handleRequest"
      @request-success="handleRequestSuccess"
    ></ele-form>
  </div>
</template>

<script lang="ts">
// @ is an alias to /src
import Vue from 'vue'
import Component from 'vue-class-component'

@Component({})
export default class Home extends Vue {
    formData = {}
    formDesc = {
      account: {
        label: "账户名称",
        type: "input",
        required: true
      },
      icon: {
        label: "上传图标",
        type: "image-uploader",
        attrs: {
          name: "dsdsds",
          drag: true,
          fileType: [],
          action: "https:\u002F\u002Fwww.mocky.io\u002Fv2\u002F5cc8019d300000980a055e76"
        }
      },
    }
    
    handleRequest (data: string) {
      console.log(data)
      return Promise.resolve()
    }
    handleRequestSuccess () {
      this.$message.success('发送成功')
    }
}
</script>

报错

image

排版样式上有问题

image
上面四个每个宽度为6,再拖一个宽度为6的组件,跑到最右边去了,期望应该是左边开始。如果能有行的概念就好了 现在是列,列高度比其他的列高就会出现这个问题。望作者大大解决一下,之前提过的。

可以封装 <el-row> 实现行容器的组件吗

你好! 是否可以考虑实现 <el-row> 行容器这个东西, 或者是把<el-row> 也单独封装成一个组件, 比如现在需要布一个这个样子的局, 就是一行和另一行不对齐的情况:

+--------+-------+
| 输入框  |       |
+--------+       |
| 输入框  | 图片框 |
+--------+       |
| 输入框  |       |
+--------+-------+

假设这里的输入框和图片框的宽度都是 12, 现在使用 #10 中给出的解决方法, 使用 layout 控制宽度的话会变成这样:

+--------+-------+
| 输入框  |       |
+--------+       |
         | 图片框 |
         |       |
         |       |
+--------+-------+
| 输入框  | 输入框 |
+--------+-------+

如果用行容器这种模式的话可以变成是一行, 左右各有一个宽 12 的行容器, 左边的行容器里有 3 个输入框, 每个宽度都是 24, 右边的是一个图片框, 这样的话正好两边就是一样高的, 最后生成的代码应该类似这样:

<row>
    <row span="12">
        <input />
        <input />
        <input />
    </row>
    
    <row span="12">
        <image/>
    </row>
</row>

第二个图那个错位的布局使用的 formDesc:

{
  key_1587437729999: {
    label: "单行输入框",
    type: "input",
    layout: 12
  },
  key_1587437739302: {
    label: "上传图片",
    type: "image-uploader",
    attrs: {
      fileType: [],
      action: "https:\u002F\u002Fwww.mocky.io\u002Fv2\u002F5cc8019d300000980a055e76"
    },
    layout: 12
  },
  key_1587437746662: {
    label: "单行输入框",
    type: "input",
    layout: 12
  },
  key_1587437760580: {
    label: "单行输入框",
    type: "input",
    layout: 12
  }
}

批量添加的input属性配置 会和拖拽生产的input 错乱

问题描述 : 批量添加的input属性配置会错乱
批量添加生成的input 会 把拖拽生产的input的表单项属性配置 覆盖 (错乱)

问题复现步骤:

  1. 先拖拽一个input放入展示中
    2.点击批量添加 添加方式, 逐个新增 表单项 :1 ,label:1 ,选择type:input 点击提交
    3.此刻 批量添加生产的input 的 属性配置会显示 第一个拖拽生成input的配置 依次都会错乱
    1
    2
    3
    4
    5
    麻烦大佬有时间可以解决一下 谢谢了

期望添加一个布局容器

Feature request(新功能建议)

隔壁的 avue-form-design 有个布局功能很赞,建议吸收进来,能很好的将表单分区,视觉上更加清晰。

English translation?

Hi there,

your repo look really interesting. Maybe you could add an englisch translation?

Best regards,
Berti

富文本属性配置报错

import comps from "f-render/fixtures/comps";
// 富文本配置
import quillEditor from "f-render/fixtures/extends/quill-editor";
富文本属性配置报错

These dependencies were not found:

  • f-render/fixtures/comps in ./node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/babel-loader/lib!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/FormDesign.vue?vue&type=script&lang=js&
  • f-render/fixtures/extends/quill-editor in ./node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/babel-loader/lib!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/FormDesign.vue?vue&type=script&lang=js&

To install them, you can run: npm install --save f-render/fixtures/comps f-render/fixtures/extends/quill-editor

运行npm install --save f-render/fixtures/comps f-render/fixtures/extends/quill-editor也不行

【bug】在可视化配置中的“表单配置”中的“isDialog: 是否为弹窗”选项启用后生成的代码错误

应该生成:

<template>
  <ele-form-dialog
    :formDesc="formDesc"
    v-model="formData"
    :request-fn="handleRequest"
    @request-success="handleRequestSuccess"
    :visible.sync="dialogFormVisible"
  ></ele-form-dialog>
</template>

<script>
export default {
  data () {
    return {
      dialogFormVisible: false,
      formData: {},
      formDesc: {
        name: {
          label: "单行输入框",
          type: "input",
          attrs: {
            placeholder: "请输入分类名称"
          },
          required: true,
          tip: ""
        }
      }
    }
  },
  methods: {
    handleRequest (data) {
      console.log(data)
      return Promise.resolve()
    },
    handleRequestSuccess () {
      this.$message.success('发送成功')
    }
  }
}
</script>

现在生成:

<template>
  // 应该在接口改动之后网页端忘记改了
  <ele-form
    :isDialog="true"
    :formDesc="formDesc"
    v-model="formData"
    :request-fn="handleRequest"
    @request-success="handleRequestSuccess"
  ></ele-form>
</template>

<script>
export default {
  data () {
    return {
      formData: {},
      formDesc: {
        name: {
          label: "单行输入框",
          type: "input",
          attrs: {
            placeholder: "请输入分类名称"
          },
          required: true,
          tip: ""
        }
      }
    }
  },
  methods: {
    handleRequest (data) {
      console.log(data)
      return Promise.resolve()
    },
    handleRequestSuccess () {
      this.$message.success('发送成功')
    }
  }
}
</script>

希望能支持移动端排版

现在项目一般只做pc端的需求比较少,很多时候都要跨端,需要做成自适应的网页。希望项目能支持移动端的预览调试。

感谢作者🙏

希望能增加一个选择本地文件的组件

有的项目是用electron,可以直接利用electron API选择本地图片使用,而不需要上传行为。

虽然可以参考文档自定义组件,但是没法利用vue-ele-form-generator产生文件列表的schema,挺不方便的。

规则编辑会相互影响

创建多个字段,给一个字段添加规则,剩余字段也会被添加上一样的规则
删除一个规则配置,其他字段也会被删除规则配置
Sep-04-2020 11-36-25

select组件如何配置post请求,并且配置参数?

Question(提问)

Steps to reproduce(问题复现步骤)

Screenshot or Gif(截图或动态图)

Link to minimal reproduction(最小可在线还原 demo)

Other relevant information(格外信息)

  • Vue version:
  • f-render version:
  • ElementUI version:
  • vue-ele-form version:

建议修改弹窗的关闭时机

批量添加表单时,modal在点击其他地方时自动消失了,有时误触,弹窗关闭了,且没有保存之前的数据。

计划如何做各个组件的联动

场景一
有两个组件, 是否组件和input组件
如果选择是,则input 可以编辑,否则 反之;

场景二
有两个组件, 是否组件和单选组件
如果选择是,则单选组件的选项用A数据源,否这用B数据源

可以分享一下你的思路吗

有没有iview版本的

项目一开始的时候,没有用element ui ,刚开始还没开始写前端,现在项目中期了,没法改,请问作者有iview ui 版本没有?

f-render 的 select 组件的 options 属性无法指定 url。

Bug report(问题描述)

f-render 的 select 组件的 options 属性无法指定 url,参考文档options讲解 ,配置了 :options-fn 后然后设置 options 表单设计器直接报错。

Steps to reproduce(问题复现步骤)

Screenshot or Gif(截图或动态图)

image

image

Link to minimal reproduction(最小可在线还原 demo)

Other relevant information(格外信息)

  • Vue version:
  • f-render version:4.5.0
  • ElementUI version:2.13.2
  • vue-ele-form version:0.8.35

CentOS Linux release 7.0.1406 (Core) 非GUI运行fgen -p prot启动后访问报404

操系统版本:
CentOS Linux release 7.0.1406 (Core)
复现步骤:
[root@Template vue-ele-form-generator]# fgen -p 8888
Running at http://localhost:8888
[root@Template ~]# curl http://localhost:8888

<style> body { margin: 0; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; cursor: default; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; -webkit-font-smoothing: antialiased; text-rendering: optimizeLegibility; position: absolute; top: 0; left: 0; right: 0; bottom: 0; display: flex; flex-direction: column; } main, aside, section { display: flex; justify-content: center; align-items: center; flex-direction: column; } main { height: 100%; } aside { background: #000; flex-shrink: 1; padding: 30px 20px; } aside p { margin: 0; color: #999999; font-size: 14px; line-height: 24px; } aside a { color: #fff; text-decoration: none; } section span { font-size: 24px; font-weight: 500; display: block; border-bottom: 1px solid #EAEAEA; text-align: center; padding-bottom: 20px; width: 100px; } section p { font-size: 14px; font-weight: 400; } section span + p { margin: 20px 0 0 0; } @media (min-width: 768px) { section { height: 40px; flex-direction: row; } section span, section p { height: 100%; line-height: 40px; } section span { border-bottom: 0; border-right: 1px solid #EAEAEA; padding: 0 20px 0 0; width: auto; } section span + p { margin: 0; padding-left: 20px; } aside { padding: 50px 0; } aside p { max-width: 520px; text-align: center; } } </style> **
404

The requested path could not be found

**

el-input-number联动问题

配置el-input-number联动,作者线上环境直接卡死,开发环境,报错
代码:

{
  "formDesc": {
    "key_1594776474600": {
      "options": [
        {
          "text": "选项1",
          "value": 1
        },
        {
          "text": "选项2",
          "value": 2
        },
        {
          "text": "选项3",
          "value": 3
        }
      ],
      "label": "选择器",
      "type": "select"
    },
    "key_1594776729232": {
      "label": "数字",
      "type": "number",
      "attrs": {
        "min": 2,
        "max": 11
      },
      "default": 0,
        "vif":(data) => data.key_1594776474600 == 1
    }
  }
}

开发环境报错如下:
image

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.