1.2.15 • Published 5 years ago

vue-form-layer v1.2.15

Weekly downloads
5
License
MIT
Repository
github
Last release
5 years ago

form-line 表单

解决:复杂布局、多重标记(前后端校验、标记信息等)方案。 特点:高度灵活性、可控性、扩展性。

演示

github pages

npm 安装

npm i vue-form-layer -S

使用

import VueFormLayer from 'vue-form-layer'
import 'vue-form-layer/dist/vue-form-layer.css'

Vue.use(VueFormLayer)

// 或者直接使用script导入
<script src="https://unpkg.com/vue-form-layer/dist/vue-form-layer.min.js"></script>
<script src="https://unpkg.com/vue-form-layer/dist/vue-form-layer.css"></script>

基本布局

<vue-form :model="form">
    <vue-form-line 
    :cols="[{ label: '名字' },
    { label: '年龄' }]">
        <input type="text" v-model="form.name">
        <input type="text" v-model="form.age">
    </vue-form-line>
</vue-form>

增加图层

<vue-form :model="form" :layer="layer">
    <vue-form-line 
    :cols="[{ label: '名字', prop: '/form/name' },
            { label: '年龄', prop: '/form/age'}]">
        <input type="text" v-model="form.name">
        <input type="text" v-model="form.age">
    </vue-form-line>
</vue-form>
<script>
export default {
  data () {
    return {
      form: {},
      layer: [
        {
          id: "layer-1",
          show: true,
          data: [
            {
              prop: "/form/name",
              data: "我是名字"
            },
            {
              prop: "/form/age",
              data: "我是年龄"
            }
          ]
        },
      ]
    }
  }
}
</script>

自定义显示模板

<vue-form :model="form" :layer="layer">
    <vue-form-line 
    :cols="[{ label: '名字', prop: '/form/name' },
            { label: '年龄', prop: '/form/age'}]">
        <input type="text" v-model="form.name">
        <input type="text" v-model="form.age">
    </vue-form-line>
</vue-form>
<script>
export default {
  data () {
    var templateFn = data => {
      return 
        // your component
        // vue1.0支持 this.$createElement("component", { attrs: { data: data } });
        
        // vue2.0支持jsx
        // 可以直接写 <component data={data}></component>
        // 或者写引入的组件
        
        // 不支持的可以
            npm install\
            babel-plugin-syntax-jsx\
            babel-plugin-transform-vue-jsx\
            babel-helper-vue-jsx-merge-props\
            babel-preset-es2015\
          --save-dev
        // .babelrc
            {
              "presets": ["es2015"],
              "plugins": ["transform-vue-jsx"]
            }
        // 然后就可以愉快地写jsx了
    };
    return {
      form: {},
      layer: [
        {
          id: "layer-1",
          show: true,
          data: [
            {
              prop: "/form/name",
              template: templateFn,
              data: // your show data
            },
            {
              prop: "/form/age",
              data: "我是年龄"
            }
          ]
        },
      ]
    }
  }
}
</script>

自定义校验

<vue-form :model="form" ref="form" :layer="layer">
    <vue-form-line 
    :cols="[{ label: '名字', prop: '/form/name' },
            { label: '年龄', prop: '/form/age'}]">
        <input type="text" v-model="form.name" @blur="recalculateField('/form/name')">
        <input type="text" v-model="form.age" @blur="recalculateField('/form/age')">
    </vue-form-line>
</vue-form>
<script>
export default {
  data () {
    const successValidate = {
      disabled: true,
      referenceBorderColor: "#67c23a"
    };
    const errorValidate = message => {
      return {
        message: message,
        disabled: false,
        referenceBorderColor: "#F56C6C"
      };
    };
    const recalculateName = value => {
      if (value === "") {
        return errorValidate("name is required");
      } else {
        return successValidate;
      }
    };
    const recalculateAge = value => {
      if (value === "") {
        return errorValidate("age is required");
      } else if (value < 18) {
        return errorValidate("age not less then 18");
      } else {
        return successValidate;
      }
    };
    return {
      form: {},
      layer: [
        {
          id: "layer-1",
          show: true,
          view: {
            disabled: true
          },
          data: [
            {
              prop: "/form/name",
              recalculate: recalculateName,
              data: ""
            },
            {
              prop: "/form/age",
              recalculate: recalculateAge,
              data: ""
            }
          ]
        },
      ]
    }
  },
  methods: {
    recalculateField(prop) {
      this.$refs['form'].recalculateField('layer-1', prop);
    }
  }
}
</script>

vue-form Attributes

参数说明类型可选值默认值
modelform对象,用于重算及重置object/array--
layer图层数组array--
label-width表单域标签的宽度string--
labelPositionlabel的位置stringleft/right/topright
line-heightform-item 内label及content行高string-'32px'
rowledgeform-item 行距string-'24px'
item-gutterform-item 之间的间隔number-0
response表单响应式,只在手机端生效boolean-true

vue-form Methods

方法名说明参数
changeShow改变图层展示状态图层ID
recalculate对整个表单进行重算的方法,参数id是进行重算的图层ID,第二个参数是回调函数Function(id, callback: Function(boolean))
recalculateField对部分表单字段进行重算的方法,参数 (id: 图层id, prop: item prop),不传参数则进行全局重算id: string, prop: string
clearCalculate移除表单项的重算结果。参数 (id: 图层id, prop: 传入待移除的表单项的 prop 属性组成的数组,如不传则移除整个表单的重算结果)id: string,props: array
resetFields对表单进行重置,将所有字段值重置为初始值并移除重算结果。参数 (id: 图层id, prop: 传入待移除的表单项的 prop 属性组成的数组,如不传则移除整个表单进行重置)props: array

vue-form Events

事件名称说明回调参数
show显示时触发prop
hide隐藏时触发prop

vue-form layer 图层 array

参数说明类型可选值默认值
id图层idstring--
show图层是否展示boolean-true
view图层默认配置object--
data图层item配置object--

layer view 图层默认配置 object

参数说明类型可选值默认值
typelayer 展示类型stringpopover/textpopover
effectlayer 主题或颜色,如果传入色值则主题颜色为该色值stringlight/dark/info/errorlight
borderColorlayer 的border颜色string-"#ccc"
referenceBorderColorreference 的border颜色string--
recalculatelayer 默认重算规则 (value) => {return {effect: 主题颜色, disabled: 是否禁用, referenceBorderColor: reference边框颜色}function--
placementlayer 展示位置stringtop/right/bottom/lefttop
targetlayer 默认为default(传入form-line的dom),target存在时会修改触发目标,(data) => {return 模板/组件 },多个图层同时指向default时,排列显示string/functionwhy/warndefault
disabledlayer 是否禁用boolean-false
triggerlayer 触发方式stringhover/focus/clickhover
hideDelaylayer 隐藏延时number-200
showAlwayslayer 是否总是显示boolean-false
enterablelayer为popover时,鼠标是否可移入boolean-false
visible-arrowlayer为popover时,是否显示箭头boolean-true
template数据展示模板 (data, prop, show) => {return 模板/组件 }, 回调参数data是数据,回调参数prop是模板位置,回调读书show是模板所在图层展示状态function-top

layer data 图层item配置 array

参数说明类型可选值默认值
prop使用该配置的prop字段,如不传则该配置不会作用于任何字段---
data展示数据,传入模板template则通过模板展示数据,object/array类型需要传模板string/object/array--
recalculate字段重算规则 (value) => {return {message: 展示文字,effect: 主题颜色, disabled: 是否禁用, borderColor: 边框颜色}function--

vue-form-line Attributes

参数说明类型默认值
colsitem布局配置array[]
spanform-line在一行分成24份中所占的份数number24
label-width表单域标签的宽度string-
label子节点并排展示时使用,form-line设置label后,子节点设置的label将失效string-
required子节点并排展示时使用booleanfalse

cols item布局配置

参数说明类型默认值
spanitem在form-line分成24份中所占的份数number24
labelitem label名number-
prop校验的字段,在需要校验时是必须的string-
label-width表单域标签的宽度string"80px"
required是否必填(只提供样式,校验规则要在图层定义)booleanfalse

版本

1.2.14

2018-4-22

  • 迁移到 rollup,优化组件打包,支持esm格式。

  • form 增加 isTable 属性,以更少的node渲染 table,提高渲染性能。

1.2.13

2018-4-8

  • 图层使用懒加载,在鼠标移入reference或重算时加载,提高组件渲染性能。

1.2.11

2018-4-8

  • form增加line-height属性。

历史版本

1.2.15

5 years ago

1.2.14

5 years ago

1.2.13

5 years ago

1.2.12

5 years ago

1.2.11

5 years ago

1.2.10

5 years ago

1.2.9

5 years ago

1.2.8

5 years ago

1.2.7

5 years ago

1.2.6

5 years ago

1.2.5

5 years ago

1.2.4

5 years ago

1.2.3

5 years ago

1.2.2

5 years ago

1.2.1

5 years ago

1.2.0

5 years ago

1.1.9

5 years ago

1.1.8

5 years ago

1.1.7

5 years ago

1.1.6

5 years ago

1.1.5

5 years ago

1.1.3

5 years ago

1.1.2

6 years ago

1.1.1

6 years ago

1.1.0

6 years ago

1.0.9

6 years ago

1.0.8

6 years ago

1.0.7

6 years ago

1.0.6

6 years ago

1.0.5

6 years ago

1.0.4

6 years ago

1.0.3

6 years ago

1.0.2

6 years ago

1.0.1

6 years ago

1.0.0

6 years ago