├── .babelrc ├── .gitignore ├── src ├── index.js └── components │ ├── VueFormMaker.js │ └── utils.js ├── webpack.config.js ├── demo.md ├── package.json ├── LICENSE ├── demo ├── time.html ├── inputNumber.html ├── colorPicker.html ├── rate.html ├── slider.html ├── upload.html ├── checkbox.html ├── date.html ├── button.html ├── radio.html ├── switch.html ├── select.html ├── 栅格系统.html ├── cascader.html ├── input.html └── form.html ├── README.md ├── dist ├── vue-form-maker.js ├── cityData2Level.js └── vue-form-maker.js.map └── doc.md /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": ["env"], 3 | "plugins": ["transform-object-rest-spread"] 4 | } -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules/ 3 | npm-debug.log* 4 | yarn-debug.log* 5 | yarn-error.log* 6 | 7 | # Editor directories and files 8 | .idea 9 | .vscode 10 | *.suo 11 | *.ntvs* 12 | *.njsproj 13 | *.sln 14 | -------------------------------------------------------------------------------- /src/index.js: -------------------------------------------------------------------------------- 1 | import VueFormMaker from './components/VueFormMaker' 2 | 3 | const install = function(Vue, opts = {}) { 4 | Vue.component('VueFormMaker', VueFormMaker) 5 | } 6 | 7 | const API = { 8 | install, 9 | version: '1.0.4', 10 | } 11 | 12 | if (typeof window !== 'undefined' && window.Vue) { 13 | install(window.Vue) 14 | } 15 | 16 | export default API 17 | -------------------------------------------------------------------------------- /webpack.config.js: -------------------------------------------------------------------------------- 1 | const path = require('path') 2 | const UglifyJSPlugin = require('uglifyjs-webpack-plugin') 3 | 4 | module.exports = { 5 | entry: './src/index.js', 6 | plugins: [ 7 | new UglifyJSPlugin({ 8 | sourceMap: true 9 | }) 10 | ], 11 | devtool: 'source-map', 12 | module: { 13 | rules: [ 14 | { 15 | test: /\.js$/, 16 | exclude: /node_modules/, 17 | use: { 18 | loader: 'babel-loader', 19 | options: { 20 | presets: ['env'] 21 | } 22 | } 23 | } 24 | ] 25 | }, 26 | output: { 27 | filename: 'vue-form-maker.js', 28 | path: path.resolve(__dirname, 'dist'), 29 | library: 'VueFormMaker', 30 | libraryTarget: 'umd' 31 | } 32 | } -------------------------------------------------------------------------------- /demo.md: -------------------------------------------------------------------------------- 1 | # DEMO 2 | 3 | 如果在线DEMO打不开 请将项目克隆到本地 打开DEMO文件夹里的HTML文件 即可在本地查看DEMO 4 | 5 | * [form](https://jsrun.net/yJXKp/edit) 6 | * [表单联动DEMO](http://jsrun.net/bk2Kp/edit) 7 | * [栅格系统DEMO](https://jsrun.net/GxXKp/edit) 8 | * [input](https://jsrun.net/qxXKp/edit) 9 | * [radio](https://jsrun.net/XHXKp/edit) 10 | * [checkbox](https://jsrun.net/VHXKp/edit) 11 | * [switch](https://jsrun.net/8HXKp/edit) 12 | * [select](https://jsrun.net/THXKp/edit) 13 | * [slider](https://jsrun.net/UHXKp/edit) 14 | * [datePicker](https://jsrun.net/dHXKp/edit) 15 | * [timePicker](https://jsrun.net/FHXKp/edit) 16 | * [cascader](https://jsrun.net/xHXKp/edit) 17 | * [inputNumber](https://jsrun.net/GHXKp/edit) 18 | * [rate](https://jsrun.net/HHXKp/edit) 19 | * [upload](https://jsrun.net/5HXKp/edit) 20 | * [colorPicker](https://jsrun.net/jGXKp/edit) 21 | * [button](https://jsrun.net/nHXKp/edit) 22 | 23 | 注意:iView上传组件最后的例子实现不了 24 | 25 | 更多例子请查看[iView](https://www.iviewui.com/components/input) 26 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vue-form-maker", 3 | "version": "1.0.4", 4 | "description": "Vue动态生成表单", 5 | "main": "dist/vue-form-maker.js", 6 | "scripts": { 7 | "build": "webpack --config webpack.config.js --mode production" 8 | }, 9 | "repository": { 10 | "type": "git", 11 | "url": "git+https://github.com/woai3c/vue-form-maker.git" 12 | }, 13 | "keywords": [ 14 | "vue-form-maker", 15 | "vue", 16 | "form", 17 | "iview" 18 | ], 19 | "author": "bin", 20 | "license": "MIT", 21 | "bugs": { 22 | "url": "https://github.com/woai3c/vue-form-maker/issues" 23 | }, 24 | "homepage": "https://github.com/woai3c/vue-form-maker#readme", 25 | "dependencies": { 26 | "view-design": "^4.0.2" 27 | }, 28 | "devDependencies": { 29 | "babel-core": "^6.26.3", 30 | "babel-loader": "^7.1.5", 31 | "babel-plugin-transform-object-rest-spread": "^6.26.0", 32 | "babel-preset-env": "^1.7.0", 33 | "uglifyjs-webpack-plugin": "^2.2.0", 34 | "webpack": "^4.27.1", 35 | "webpack-cli": "^3.1.2" 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 bin 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /demo/time.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | time-demo 6 | 7 | 15 | 16 | 17 |
18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 45 | 46 | -------------------------------------------------------------------------------- /demo/inputNumber.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | inputNumber-demo 6 | 7 | 15 | 16 | 17 |
18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 41 | 42 | -------------------------------------------------------------------------------- /demo/colorPicker.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | colorPicker-demo 6 | 7 | 15 | 16 | 17 |
18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 51 | 52 | -------------------------------------------------------------------------------- /demo/rate.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | rate-demo 6 | 7 | 15 | 16 | 17 |
18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 50 | 51 | -------------------------------------------------------------------------------- /demo/slider.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | slider-demo 6 | 7 | 15 | 16 | 17 |
18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 56 | 57 | -------------------------------------------------------------------------------- /demo/upload.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | upload-demo 6 | 7 | 15 | 16 | 17 |
18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 51 | 52 | -------------------------------------------------------------------------------- /demo/checkbox.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | checkbox-demo 6 | 7 | 15 | 16 | 17 |
18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 60 | 61 | -------------------------------------------------------------------------------- /demo/date.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | slider-demo 6 | 7 | 15 | 16 | 17 |
18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 60 | 61 | -------------------------------------------------------------------------------- /src/components/VueFormMaker.js: -------------------------------------------------------------------------------- 1 | import componentObj from './utils' 2 | 3 | export default { 4 | props: { 5 | options: { 6 | type: Object, 7 | required: true 8 | } 9 | }, 10 | render(h) { 11 | const options = this.options 12 | const formData = options.formData 13 | if (!options.formItem) { 14 | return h('div') 15 | } 16 | 17 | const components = options.formItem.map(item => { 18 | let func = componentObj[item.type] 19 | let subComponent = func? func.call(this, h, formData, item, this) : null 20 | let component = componentObj.formItem(h, item, subComponent) 21 | 22 | return componentObj.col(h, item, component) 23 | }) 24 | 25 | if (options.submit) { 26 | processSubmitOrReset(components, h, formData, options.submit, this, 'submit') 27 | } 28 | 29 | if (options.reset) { 30 | processSubmitOrReset(components, h, formData, options.reset, this, 'reset') 31 | } 32 | 33 | return h('Form', { 34 | ref: 'form', 35 | props: { 36 | model: formData, 37 | ...options.formProps 38 | }, 39 | class: 'vue-generate-form' 40 | }, [ 41 | h('Row', { 42 | props: options.rowProps 43 | }, components) 44 | ]) 45 | } 46 | } 47 | 48 | function processSubmitOrReset(components, h, formData, obj, vm, type) { 49 | let subComponent = componentObj[type](h, formData, obj, vm) 50 | let component = componentObj.formItem(h, obj, subComponent) 51 | components.push(componentObj.col(h, obj, component)) 52 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## 简介 2 | Vue 动态生成表单组件,可以根据数据配置表单,使用的UI库是[iView](https://www.iviewui.com/)。 3 | 4 | 有问题或BUG欢迎提 [issues](https://github.com/woai3c/vue-form-maker/issues) 5 | 6 | 7 | * [文档](https://github.com/woai3c/vue-form-maker/blob/master/doc.md) 8 | * [在线DEMO](https://github.com/woai3c/vue-form-maker/blob/master/demo.md) 9 | ## 表单组件 10 | * Input 输入框 11 | * Button 按钮 12 | * Radio 单选框 13 | * Checkbox 多选框 14 | * Icon 图标 15 | * Switch 开关 16 | * Select 选择器 17 | * Slider 滑块 18 | * DatePicker 日期选择器 19 | * TimePicker 时间选择器 20 | * Cascader 级联选择器 21 | * InputNumber 数字输入框 22 | * Rate 评分 23 | * Upload 上传 24 | * ColorPicker 颜色选择器 25 | 26 | ## 使用 27 | ### 在单文件组件中引用 28 | ``` 29 | npm i vue-form-maker 30 | ``` 31 | 32 | ``` 33 | import VueFormMaker from 'vue-form-maker' 34 | import ViewUI from 'view-design'; 35 | import 'view-design/dist/styles/iview.css'; 36 | // 如需使用城市数据 可以这样引用 37 | // 省 市 县 38 | import 'vue-form-maker/dist/cityData3Level' 39 | // 省 市 40 | import 'vue-form-maker/dist/cityData2Level' 41 | // 城市数据文件定义了一个全局变量cityData 在项目里直接使用cityData即可 42 | 43 | Vue.use(ViewUI) 44 | Vue.use(VueFormMaker) 45 | ``` 46 | ``` 47 | 53 | ``` 54 | 55 | ### 在HTML文件中直接引用 56 | 使用的是dist目录中的`vue-form-maker.js` 57 | ``` 58 | 59 | ``` 60 | ``` 61 |
62 | 63 | 64 |
65 | ``` 66 | ``` 67 | 68 | 69 | 70 | ``` 71 | 72 | ## License 73 | MIT 74 | -------------------------------------------------------------------------------- /demo/button.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | button-demo 6 | 7 | 15 | 16 | 17 |
18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 74 | 75 | -------------------------------------------------------------------------------- /demo/radio.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | radio-demo 6 | 7 | 15 | 16 | 17 |
18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 81 | 82 | -------------------------------------------------------------------------------- /demo/switch.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | switch-demo 6 | 7 | 15 | 16 | 17 |
18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 90 | 91 | -------------------------------------------------------------------------------- /demo/select.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | select-demo 6 | 7 | 15 | 16 | 17 |
18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 94 | 95 | -------------------------------------------------------------------------------- /demo/栅格系统.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 栅格系统demo 6 | 7 | 15 | 16 | 17 |
18 | 19 |
20 | 21 | 22 | 23 | 24 | 99 | 100 | -------------------------------------------------------------------------------- /demo/cascader.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | cascader-demo 6 | 7 | 15 | 16 | 17 |
18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 97 | 98 | -------------------------------------------------------------------------------- /demo/input.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | input-demo 6 | 7 | 15 | 16 | 17 |
18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 127 | 128 | -------------------------------------------------------------------------------- /demo/form.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | form-demo 6 | 7 | 15 | 16 | 17 |
18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 162 | 163 | -------------------------------------------------------------------------------- /dist/vue-form-maker.js: -------------------------------------------------------------------------------- 1 | !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.VueFormMaker=t():e.VueFormMaker=t()}(window,(function(){return function(e){var t={};function o(r){if(t[r])return t[r].exports;var n=t[r]={i:r,l:!1,exports:{}};return e[r].call(n.exports,n,n.exports,o),n.l=!0,n.exports}return o.m=e,o.c=t,o.d=function(e,t,r){o.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},o.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},o.t=function(e,t){if(1&t&&(e=o(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(o.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)o.d(r,n,function(t){return e[t]}.bind(null,n));return r},o.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(t,"a",t),t},o.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},o.p="",o(o.s=0)}([function(e,t,o){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(e){return e&&e.__esModule?e:{default:e}}(o(1)),n=function(e){arguments.length>1&&void 0!==arguments[1]&&arguments[1],e.component("VueFormMaker",r.default)},s={install:n,version:"1.0.4"};"undefined"!=typeof window&&window.Vue&&n(window.Vue),t.default=s},function(e,t,o){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=Object.assign||function(e){for(var t=1;t1&&void 0!==arguments[1]?arguments[1]:{},o=arguments[2],s=arguments[3],u=o.key?o.key:"",p=[];return o.children&&(p=o.children.map((function(o){var r=void 0;if("span"==o.type)r=e("span",{slot:o.slot},[o.text]);else{var l=n[o.type];r=l?l.call(s,e,t,o,s):null}return r}))),e("Input",{props:r({value:u?t[u]:""},o.props),style:o.style,on:r({},l(o.events,s),{input:function(e){u&&(t[u]=e)}}),slot:o.slot},p)},button:function(e){arguments.length>1&&void 0!==arguments[1]&&arguments[1];var t=arguments[2];return arguments[3],e("Button",{props:t.props,slot:t.slot,style:t.style,on:t.events},[t.text])},buttonGroup:function(e){arguments.length>1&&void 0!==arguments[1]&&arguments[1];var t=arguments[2],o=(arguments[3],t.children.map((function(t){return e("Button",{props:t.props?t.props:t,slot:t.slot,style:t.style,on:t.events},[t.text])})));return e("ButtonGroup",{props:t.props,style:t.style,slot:t.slot},[o])},reset:function(e){arguments.length>1&&void 0!==arguments[1]&&arguments[1];var t=arguments[2],o=arguments[3];return e("Button",{props:t.props,style:t.style,slot:t.slot,on:{click:function(){o.$refs.form.resetFields()}}},[t.text])},submit:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},o=arguments[2],n=arguments[3],s=[],l=e("Button",{props:o.props,style:o.style,on:{click:function(){n.$refs.form.validate((function(e){e?o.success.call(n,t):o.fail.call(n,t)}))}}},[o.text]);if(s.push(l),o.reset){var u=e("Button",{props:o.reset.props,style:r({marginLeft:"10px"},o.style),on:{click:function(){n.$refs.form.resetFields()}}},[o.reset.text]);s.push(u)}return e("div",s)},icon:s,radio:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},o=arguments[2],n=arguments[3],s=o.key?o.key:"";return e("Radio",{props:r({value:!!s&&t[s]},o.props),style:o.style,slot:o.slot,on:r({},l(o.events,n),{input:function(e){s&&(t[s]=e)}})},[o.text])},radioGroup:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},o=arguments[2],n=arguments[3],s=[],u=o.key?o.key:"";return o.children&&(s=o.children.map((function(t){return e("Radio",{props:t.props?t.props:t},[t.text])}))),e("RadioGroup",{props:r({value:u?t[u]:""},o.props),style:o.style,slot:o.slot,on:r({},l(o.events,n),{input:function(e){u&&(t[u]=e)}})},[s])},checkbox:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},o=arguments[2],n=arguments[3],s=o.key?o.key:"";return e("Checkbox",{props:r({value:s?t[s]:""},o.props),style:o.style,slot:o.slot,on:r({},l(o.events,n),{input:function(e){s&&(t[s]=e)}})},[o.text])},checkboxGroup:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},o=arguments[2],n=arguments[3],s=[],u=o.key?o.key:"";return o.children&&(s=o.children.map((function(t){return e("Checkbox",{props:t.props?t.props:t},[t.text])}))),e("CheckboxGroup",{props:r({value:u?t[u]:[]},o.props),style:o.style,slot:o.slot,on:r({},l(o.events,n),{input:function(e){u&&(t[u]=e)}})},[s])},switch:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},o=arguments[2],n=arguments[3],u=o.key?o.key:"",p=[];return o.children&&(p=o.children.map((function(o){var r=void 0;return"icon"==o.type?r=s(e,t,o):"span"==o.type&&(r=e("span",{slot:o.slot},[o.text])),r}))),e("i-switch",{props:r({value:!!u&&t[u]},o.props),style:o.style,slot:o.slot,on:r({},l(o.events,n),{input:function(e){u&&(t[u]=e)}})},p)},select:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},o=arguments[2],n=arguments[3],s=o.key?o.key:"",u=[];return o.children&&(u=o.children.map((function(t){return"optionGroup"==t.type?e("OptionGroup",{props:t.props?t.props:t},t.children.map((function(t){return e("Option",{props:t.props?t.props:t})}))):e("Option",{props:t.props?t.props:t})}))),e("Select",{props:r({value:t[s]},o.props),style:o.style,on:r({},l(o.events,n),{input:function(e){s&&(t[s]=e)}}),slot:o.slot},u)},slider:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},o=arguments[2],n=arguments[3],s=o.key?o.key:"";return e("Slider",{props:r({value:t[s]},o.props),style:o.style,slot:o.slot,on:r({},l(o.events,n),{input:function(e){s&&(t[s]=e)}})})},date:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},o=arguments[2],n=arguments[3],s=o.key?o.key:"",u=o.props.type;return e("DatePicker",{props:r({value:s?t[s]:""},o.props),style:o.style,slot:o.slot,on:r({},l(o.events,n),{input:function(e){s&&(u.includes("datetime")?Array.isArray(e)?t[s]=e?e.map((function(e){return e?e.toLocaleDateString()+" "+e.toTimeString().split(" ")[0]:""})):[]:t[s]=e?e.toLocaleDateString()+" "+e.toTimeString().split(" ")[0]:"":Array.isArray(e)?t[s]=e?e.map((function(e){return e?e.toLocaleDateString():""})):[]:t[s]=e?e.toLocaleDateString():"")}})})},time:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},o=arguments[2],n=arguments[3],s=o.key?o.key:"";return e("TimePicker",{props:r({value:s?t[s]:""},o.props),style:o.style,slot:o.slot,on:r({},l(o.events,n),{input:function(e){s&&(t[s]=e)}})})},cascader:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},o=arguments[2],n=arguments[3],s=o.key?o.key:"";return e("Cascader",{props:r({value:s?t[s]:[]},o.props),style:o.style,slot:o.slot,on:r({},l(o.events,n),{input:function(e){s&&(t[s]=e)}})})},inputNumber:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},o=arguments[2],n=arguments[3],s=o.key?o.key:"";return e("InputNumber",{props:r({value:s?t[s]:null},o.props),style:o.style,slot:o.slot,on:r({},l(o.events,n),{input:function(e){s&&(t[s]=e)}})})},rate:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},o=arguments[2],n=arguments[3],s=o.key?o.key:"";return e("Rate",{props:r({value:s?t[s]:0},o.props),slot:o.slot,style:o.style,on:r({},l(o.events,n),{input:function(e){s&&(t[s]=e)}})})},upload:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},o=arguments[2],r=arguments[3],s=[];return o.children&&(s=o.children.map((function(o){var s=n[o.type];return s?s.call(r,e,t,o,r):null}))),e("Upload",{props:o.props,style:o.style,slot:o.slot},s)},colorPicker:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},o=arguments[2],n=arguments[3],s=o.key?o.key:"";return e("ColorPicker",{props:r({value:s?t[s]:""},o.props),style:o.style,slot:o.slot,on:r({},l(o.events,n),{input:function(e){s&&(t[s]=e)}})})},col:function(e,t,o){return e("Col",{props:{span:t.span,push:t.push,pull:t.pull,offset:t.offset,order:t.order,"class-name":t["class-name"]||t.className,xs:t.xs,sm:t.sm,md:t.md,lg:t.lg}},[o])},formItem:function(e,t,o){return e("FormItem",{class:t.className,props:{label:t.label,rules:t.rules,prop:t.key?t.key:"","label-width":t["label-width"]||t.labelWidth,"label-for":t["label-for"]||t.labelFor,error:t.error,"show-message":t["show-message"]||t.showMessage}},[o])}};function s(e){arguments.length>1&&void 0!==arguments[1]&&arguments[1];var t=arguments[2];return arguments[3],e("Icon",{props:t.props,style:t.style,slot:t.slot})}function l(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments[1],o={};for(var r in e)o[r]=e[r].bind(t);return o}t.default=n}])})); 2 | //# sourceMappingURL=vue-form-maker.js.map -------------------------------------------------------------------------------- /dist/cityData2Level.js: -------------------------------------------------------------------------------- 1 | cityData=[{"value":"北京市","label":"北京市","children":[{"value":"东城区","label":"东城区"},{"value":"西城区","label":"西城区"},{"value":"朝阳区","label":"朝阳区"},{"value":"丰台区","label":"丰台区"},{"value":"石景山区","label":"石景山区"},{"value":"海淀区","label":"海淀区"},{"value":"门头沟区","label":"门头沟区"},{"value":"房山区","label":"房山区"},{"value":"通州区","label":"通州区"},{"value":"顺义区","label":"顺义区"},{"value":"昌平区","label":"昌平区"},{"value":"大兴区","label":"大兴区"},{"value":"怀柔区","label":"怀柔区"},{"value":"平谷区","label":"平谷区"},{"value":"密云区","label":"密云区"},{"value":"延庆区","label":"延庆区"}]},{"value":"天津市","label":"天津市","children":[{"value":"和平区","label":"和平区"},{"value":"河东区","label":"河东区"},{"value":"河西区","label":"河西区"},{"value":"南开区","label":"南开区"},{"value":"河北区","label":"河北区"},{"value":"红桥区","label":"红桥区"},{"value":"东丽区","label":"东丽区"},{"value":"西青区","label":"西青区"},{"value":"津南区","label":"津南区"},{"value":"北辰区","label":"北辰区"},{"value":"武清区","label":"武清区"},{"value":"宝坻区","label":"宝坻区"},{"value":"滨海新区","label":"滨海新区"},{"value":"宁河区","label":"宁河区"},{"value":"静海区","label":"静海区"},{"value":"蓟州区","label":"蓟州区"}]},{"value":"河北省","label":"河北省","children":[{"value":"石家庄市","label":"石家庄市"},{"value":"唐山市","label":"唐山市"},{"value":"秦皇岛市","label":"秦皇岛市"},{"value":"邯郸市","label":"邯郸市"},{"value":"邢台市","label":"邢台市"},{"value":"保定市","label":"保定市"},{"value":"张家口市","label":"张家口市"},{"value":"承德市","label":"承德市"},{"value":"沧州市","label":"沧州市"},{"value":"廊坊市","label":"廊坊市"},{"value":"衡水市","label":"衡水市"},{"value":"定州市","label":"定州市"},{"value":"辛集市","label":"辛集市"}]},{"value":"山西省","label":"山西省","children":[{"value":"太原市","label":"太原市"},{"value":"大同市","label":"大同市"},{"value":"阳泉市","label":"阳泉市"},{"value":"长治市","label":"长治市"},{"value":"晋城市","label":"晋城市"},{"value":"朔州市","label":"朔州市"},{"value":"晋中市","label":"晋中市"},{"value":"运城市","label":"运城市"},{"value":"忻州市","label":"忻州市"},{"value":"临汾市","label":"临汾市"},{"value":"吕梁市","label":"吕梁市"}]},{"value":"内蒙古自治区","label":"内蒙古自治区","children":[{"value":"呼和浩特市","label":"呼和浩特市"},{"value":"包头市","label":"包头市"},{"value":"乌海市","label":"乌海市"},{"value":"赤峰市","label":"赤峰市"},{"value":"通辽市","label":"通辽市"},{"value":"鄂尔多斯市","label":"鄂尔多斯市"},{"value":"呼伦贝尔市","label":"呼伦贝尔市"},{"value":"巴彦淖尔市","label":"巴彦淖尔市"},{"value":"乌兰察布市","label":"乌兰察布市"},{"value":"兴安盟","label":"兴安盟"},{"value":"锡林郭勒盟","label":"锡林郭勒盟"},{"value":"阿拉善盟","label":"阿拉善盟"}]},{"value":"辽宁省","label":"辽宁省","children":[{"value":"沈阳市","label":"沈阳市"},{"value":"大连市","label":"大连市"},{"value":"鞍山市","label":"鞍山市"},{"value":"抚顺市","label":"抚顺市"},{"value":"本溪市","label":"本溪市"},{"value":"丹东市","label":"丹东市"},{"value":"锦州市","label":"锦州市"},{"value":"营口市","label":"营口市"},{"value":"阜新市","label":"阜新市"},{"value":"辽阳市","label":"辽阳市"},{"value":"盘锦市","label":"盘锦市"},{"value":"铁岭市","label":"铁岭市"},{"value":"朝阳市","label":"朝阳市"},{"value":"葫芦岛市","label":"葫芦岛市"}]},{"value":"吉林省","label":"吉林省","children":[{"value":"长春市","label":"长春市"},{"value":"吉林市","label":"吉林市"},{"value":"四平市","label":"四平市"},{"value":"辽源市","label":"辽源市"},{"value":"通化市","label":"通化市"},{"value":"白山市","label":"白山市"},{"value":"松原市","label":"松原市"},{"value":"白城市","label":"白城市"},{"value":"延边朝鲜族自治州","label":"延边朝鲜族自治州"}]},{"value":"黑龙江省","label":"黑龙江省","children":[{"value":"哈尔滨市","label":"哈尔滨市"},{"value":"齐齐哈尔市","label":"齐齐哈尔市"},{"value":"鸡西市","label":"鸡西市"},{"value":"鹤岗市","label":"鹤岗市"},{"value":"双鸭山市","label":"双鸭山市"},{"value":"大庆市","label":"大庆市"},{"value":"伊春市","label":"伊春市"},{"value":"佳木斯市","label":"佳木斯市"},{"value":"七台河市","label":"七台河市"},{"value":"牡丹江市","label":"牡丹江市"},{"value":"黑河市","label":"黑河市"},{"value":"绥化市","label":"绥化市"},{"value":"大兴安岭地区","label":"大兴安岭地区"}]},{"value":"上海市","label":"上海市","children":[{"value":"黄浦区","label":"黄浦区"},{"value":"徐汇区","label":"徐汇区"},{"value":"长宁区","label":"长宁区"},{"value":"静安区","label":"静安区"},{"value":"普陀区","label":"普陀区"},{"value":"虹口区","label":"虹口区"},{"value":"杨浦区","label":"杨浦区"},{"value":"闵行区","label":"闵行区"},{"value":"宝山区","label":"宝山区"},{"value":"嘉定区","label":"嘉定区"},{"value":"浦东新区","label":"浦东新区"},{"value":"金山区","label":"金山区"},{"value":"松江区","label":"松江区"},{"value":"青浦区","label":"青浦区"},{"value":"奉贤区","label":"奉贤区"},{"value":"崇明区","label":"崇明区"}]},{"value":"江苏省","label":"江苏省","children":[{"value":"南京市","label":"南京市"},{"value":"无锡市","label":"无锡市"},{"value":"徐州市","label":"徐州市"},{"value":"常州市","label":"常州市"},{"value":"苏州市","label":"苏州市"},{"value":"南通市","label":"南通市"},{"value":"连云港市","label":"连云港市"},{"value":"淮安市","label":"淮安市"},{"value":"盐城市","label":"盐城市"},{"value":"扬州市","label":"扬州市"},{"value":"镇江市","label":"镇江市"},{"value":"泰州市","label":"泰州市"},{"value":"宿迁市","label":"宿迁市"}]},{"value":"浙江省","label":"浙江省","children":[{"value":"杭州市","label":"杭州市"},{"value":"宁波市","label":"宁波市"},{"value":"温州市","label":"温州市"},{"value":"嘉兴市","label":"嘉兴市"},{"value":"湖州市","label":"湖州市"},{"value":"绍兴市","label":"绍兴市"},{"value":"金华市","label":"金华市"},{"value":"衢州市","label":"衢州市"},{"value":"舟山市","label":"舟山市"},{"value":"台州市","label":"台州市"},{"value":"丽水市","label":"丽水市"}]},{"value":"安徽省","label":"安徽省","children":[{"value":"合肥市","label":"合肥市"},{"value":"芜湖市","label":"芜湖市"},{"value":"蚌埠市","label":"蚌埠市"},{"value":"淮南市","label":"淮南市"},{"value":"马鞍山市","label":"马鞍山市"},{"value":"淮北市","label":"淮北市"},{"value":"铜陵市","label":"铜陵市"},{"value":"安庆市","label":"安庆市"},{"value":"黄山市","label":"黄山市"},{"value":"滁州市","label":"滁州市"},{"value":"阜阳市","label":"阜阳市"},{"value":"宿州市","label":"宿州市"},{"value":"六安市","label":"六安市"},{"value":"亳州市","label":"亳州市"},{"value":"池州市","label":"池州市"},{"value":"宣城市","label":"宣城市"}]},{"value":"福建省","label":"福建省","children":[{"value":"福州市","label":"福州市"},{"value":"厦门市","label":"厦门市"},{"value":"莆田市","label":"莆田市"},{"value":"三明市","label":"三明市"},{"value":"泉州市","label":"泉州市"},{"value":"漳州市","label":"漳州市"},{"value":"南平市","label":"南平市"},{"value":"龙岩市","label":"龙岩市"},{"value":"宁德市","label":"宁德市"}]},{"value":"江西省","label":"江西省","children":[{"value":"南昌市","label":"南昌市"},{"value":"景德镇市","label":"景德镇市"},{"value":"萍乡市","label":"萍乡市"},{"value":"九江市","label":"九江市"},{"value":"新余市","label":"新余市"},{"value":"鹰潭市","label":"鹰潭市"},{"value":"赣州市","label":"赣州市"},{"value":"吉安市","label":"吉安市"},{"value":"宜春市","label":"宜春市"},{"value":"抚州市","label":"抚州市"},{"value":"上饶市","label":"上饶市"}]},{"value":"山东省","label":"山东省","children":[{"value":"济南市","label":"济南市"},{"value":"青岛市","label":"青岛市"},{"value":"淄博市","label":"淄博市"},{"value":"枣庄市","label":"枣庄市"},{"value":"东营市","label":"东营市"},{"value":"烟台市","label":"烟台市"},{"value":"潍坊市","label":"潍坊市"},{"value":"济宁市","label":"济宁市"},{"value":"泰安市","label":"泰安市"},{"value":"威海市","label":"威海市"},{"value":"日照市","label":"日照市"},{"value":"莱芜市","label":"莱芜市"},{"value":"临沂市","label":"临沂市"},{"value":"德州市","label":"德州市"},{"value":"聊城市","label":"聊城市"},{"value":"滨州市","label":"滨州市"},{"value":"菏泽市","label":"菏泽市"}]},{"value":"河南省","label":"河南省","children":[{"value":"郑州市","label":"郑州市"},{"value":"开封市","label":"开封市"},{"value":"洛阳市","label":"洛阳市"},{"value":"平顶山市","label":"平顶山市"},{"value":"安阳市","label":"安阳市"},{"value":"鹤壁市","label":"鹤壁市"},{"value":"新乡市","label":"新乡市"},{"value":"焦作市","label":"焦作市"},{"value":"濮阳市","label":"濮阳市"},{"value":"许昌市","label":"许昌市"},{"value":"漯河市","label":"漯河市"},{"value":"三门峡市","label":"三门峡市"},{"value":"南阳市","label":"南阳市"},{"value":"商丘市","label":"商丘市"},{"value":"信阳市","label":"信阳市"},{"value":"周口市","label":"周口市"},{"value":"驻马店市","label":"驻马店市"},{"value":"济源市","label":"济源市"}]},{"value":"湖北省","label":"湖北省","children":[{"value":"武汉市","label":"武汉市"},{"value":"黄石市","label":"黄石市"},{"value":"十堰市","label":"十堰市"},{"value":"宜昌市","label":"宜昌市"},{"value":"襄阳市","label":"襄阳市"},{"value":"鄂州市","label":"鄂州市"},{"value":"荆门市","label":"荆门市"},{"value":"孝感市","label":"孝感市"},{"value":"荆州市","label":"荆州市"},{"value":"黄冈市","label":"黄冈市"},{"value":"咸宁市","label":"咸宁市"},{"value":"随州市","label":"随州市"},{"value":"恩施土家族苗族自治州","label":"恩施土家族苗族自治州"},{"value":"仙桃市","label":"仙桃市"},{"value":"潜江市","label":"潜江市"},{"value":"天门市","label":"天门市"},{"value":"神农架林区","label":"神农架林区"}]},{"value":"湖南省","label":"湖南省","children":[{"value":"长沙市","label":"长沙市"},{"value":"株洲市","label":"株洲市"},{"value":"湘潭市","label":"湘潭市"},{"value":"衡阳市","label":"衡阳市"},{"value":"邵阳市","label":"邵阳市"},{"value":"岳阳市","label":"岳阳市"},{"value":"常德市","label":"常德市"},{"value":"张家界市","label":"张家界市"},{"value":"益阳市","label":"益阳市"},{"value":"郴州市","label":"郴州市"},{"value":"永州市","label":"永州市"},{"value":"怀化市","label":"怀化市"},{"value":"娄底市","label":"娄底市"},{"value":"湘西土家族苗族自治州","label":"湘西土家族苗族自治州"}]},{"value":"广东省","label":"广东省","children":[{"value":"广州市","label":"广州市"},{"value":"韶关市","label":"韶关市"},{"value":"深圳市","label":"深圳市"},{"value":"珠海市","label":"珠海市"},{"value":"汕头市","label":"汕头市"},{"value":"佛山市","label":"佛山市"},{"value":"江门市","label":"江门市"},{"value":"湛江市","label":"湛江市"},{"value":"茂名市","label":"茂名市"},{"value":"肇庆市","label":"肇庆市"},{"value":"惠州市","label":"惠州市"},{"value":"梅州市","label":"梅州市"},{"value":"汕尾市","label":"汕尾市"},{"value":"河源市","label":"河源市"},{"value":"阳江市","label":"阳江市"},{"value":"清远市","label":"清远市"},{"value":"东莞市","label":"东莞市"},{"value":"中山市","label":"中山市"},{"value":"潮州市","label":"潮州市"},{"value":"揭阳市","label":"揭阳市"},{"value":"云浮市","label":"云浮市"}]},{"value":"广西壮族自治区","label":"广西壮族自治区","children":[{"value":"南宁市","label":"南宁市"},{"value":"柳州市","label":"柳州市"},{"value":"桂林市","label":"桂林市"},{"value":"梧州市","label":"梧州市"},{"value":"北海市","label":"北海市"},{"value":"防城港市","label":"防城港市"},{"value":"钦州市","label":"钦州市"},{"value":"贵港市","label":"贵港市"},{"value":"玉林市","label":"玉林市"},{"value":"百色市","label":"百色市"},{"value":"贺州市","label":"贺州市"},{"value":"河池市","label":"河池市"},{"value":"来宾市","label":"来宾市"},{"value":"崇左市","label":"崇左市"}]},{"value":"海南省","label":"海南省","children":[{"value":"海口市","label":"海口市"},{"value":"三亚市","label":"三亚市"},{"value":"三沙市","label":"三沙市"},{"value":"儋州市","label":"儋州市"},{"value":"五指山市","label":"五指山市"},{"value":"琼海市","label":"琼海市"},{"value":"文昌市","label":"文昌市"},{"value":"万宁市","label":"万宁市"},{"value":"东方市","label":"东方市"},{"value":"定安县","label":"定安县"},{"value":"屯昌县","label":"屯昌县"},{"value":"澄迈县","label":"澄迈县"},{"value":"临高县","label":"临高县"},{"value":"白沙黎族自治县","label":"白沙黎族自治县"},{"value":"昌江黎族自治县","label":"昌江黎族自治县"},{"value":"乐东黎族自治县","label":"乐东黎族自治县"},{"value":"陵水黎族自治县","label":"陵水黎族自治县"},{"value":"保亭黎族苗族自治县","label":"保亭黎族苗族自治县"},{"value":"琼中黎族苗族自治县","label":"琼中黎族苗族自治县"}]},{"value":"重庆市","label":"重庆市","children":[{"value":"万州区","label":"万州区"},{"value":"涪陵区","label":"涪陵区"},{"value":"渝中区","label":"渝中区"},{"value":"大渡口区","label":"大渡口区"},{"value":"江北区","label":"江北区"},{"value":"沙坪坝区","label":"沙坪坝区"},{"value":"九龙坡区","label":"九龙坡区"},{"value":"南岸区","label":"南岸区"},{"value":"北碚区","label":"北碚区"},{"value":"綦江区","label":"綦江区"},{"value":"大足区","label":"大足区"},{"value":"渝北区","label":"渝北区"},{"value":"巴南区","label":"巴南区"},{"value":"黔江区","label":"黔江区"},{"value":"长寿区","label":"长寿区"},{"value":"江津区","label":"江津区"},{"value":"合川区","label":"合川区"},{"value":"永川区","label":"永川区"},{"value":"南川区","label":"南川区"},{"value":"璧山区","label":"璧山区"},{"value":"铜梁区","label":"铜梁区"},{"value":"潼南区","label":"潼南区"},{"value":"荣昌区","label":"荣昌区"},{"value":"开州区","label":"开州区"},{"value":"梁平县","label":"梁平县"},{"value":"城口县","label":"城口县"},{"value":"丰都县","label":"丰都县"},{"value":"垫江县","label":"垫江县"},{"value":"武隆县","label":"武隆县"},{"value":"忠县","label":"忠县"},{"value":"云阳县","label":"云阳县"},{"value":"奉节县","label":"奉节县"},{"value":"巫山县","label":"巫山县"},{"value":"巫溪县","label":"巫溪县"},{"value":"石柱土家族自治县","label":"石柱土家族自治县"},{"value":"秀山土家族苗族自治县","label":"秀山土家族苗族自治县"},{"value":"酉阳土家族苗族自治县","label":"酉阳土家族苗族自治县"},{"value":"彭水苗族土家族自治县","label":"彭水苗族土家族自治县"}]},{"value":"四川省","label":"四川省","children":[{"value":"成都市","label":"成都市"},{"value":"自贡市","label":"自贡市"},{"value":"攀枝花市","label":"攀枝花市"},{"value":"泸州市","label":"泸州市"},{"value":"德阳市","label":"德阳市"},{"value":"绵阳市","label":"绵阳市"},{"value":"广元市","label":"广元市"},{"value":"遂宁市","label":"遂宁市"},{"value":"内江市","label":"内江市"},{"value":"乐山市","label":"乐山市"},{"value":"南充市","label":"南充市"},{"value":"眉山市","label":"眉山市"},{"value":"宜宾市","label":"宜宾市"},{"value":"广安市","label":"广安市"},{"value":"达州市","label":"达州市"},{"value":"雅安市","label":"雅安市"},{"value":"巴中市","label":"巴中市"},{"value":"资阳市","label":"资阳市"},{"value":"阿坝藏族羌族自治州","label":"阿坝藏族羌族自治州"},{"value":"甘孜藏族自治州","label":"甘孜藏族自治州"},{"value":"凉山彝族自治州","label":"凉山彝族自治州"}]},{"value":"贵州省","label":"贵州省","children":[{"value":"贵阳市","label":"贵阳市"},{"value":"六盘水市","label":"六盘水市"},{"value":"遵义市","label":"遵义市"},{"value":"安顺市","label":"安顺市"},{"value":"毕节市","label":"毕节市"},{"value":"铜仁市","label":"铜仁市"},{"value":"黔西南布依族苗族自治州","label":"黔西南布依族苗族自治州"},{"value":"黔东南苗族侗族自治州","label":"黔东南苗族侗族自治州"},{"value":"黔南布依族苗族自治州","label":"黔南布依族苗族自治州"}]},{"value":"云南省","label":"云南省","children":[{"value":"昆明市","label":"昆明市"},{"value":"曲靖市","label":"曲靖市"},{"value":"玉溪市","label":"玉溪市"},{"value":"保山市","label":"保山市"},{"value":"昭通市","label":"昭通市"},{"value":"丽江市","label":"丽江市"},{"value":"普洱市","label":"普洱市"},{"value":"临沧市","label":"临沧市"},{"value":"楚雄彝族自治州","label":"楚雄彝族自治州"},{"value":"红河哈尼族彝族自治州","label":"红河哈尼族彝族自治州"},{"value":"文山壮族苗族自治州","label":"文山壮族苗族自治州"},{"value":"西双版纳傣族自治州","label":"西双版纳傣族自治州"},{"value":"大理白族自治州","label":"大理白族自治州"},{"value":"德宏傣族景颇族自治州","label":"德宏傣族景颇族自治州"},{"value":"怒江傈僳族自治州","label":"怒江傈僳族自治州"},{"value":"迪庆藏族自治州","label":"迪庆藏族自治州"}]},{"value":"西藏自治区","label":"西藏自治区","children":[{"value":"拉萨市","label":"拉萨市"},{"value":"日喀则市","label":"日喀则市"},{"value":"昌都市","label":"昌都市"},{"value":"林芝市","label":"林芝市"},{"value":"山南市","label":"山南市"},{"value":"那曲地区","label":"那曲地区"},{"value":"阿里地区","label":"阿里地区"}]},{"value":"陕西省","label":"陕西省","children":[{"value":"西安市","label":"西安市"},{"value":"铜川市","label":"铜川市"},{"value":"宝鸡市","label":"宝鸡市"},{"value":"咸阳市","label":"咸阳市"},{"value":"渭南市","label":"渭南市"},{"value":"延安市","label":"延安市"},{"value":"汉中市","label":"汉中市"},{"value":"榆林市","label":"榆林市"},{"value":"安康市","label":"安康市"},{"value":"商洛市","label":"商洛市"}]},{"value":"甘肃省","label":"甘肃省","children":[{"value":"兰州市","label":"兰州市"},{"value":"嘉峪关市","label":"嘉峪关市"},{"value":"金昌市","label":"金昌市"},{"value":"白银市","label":"白银市"},{"value":"天水市","label":"天水市"},{"value":"武威市","label":"武威市"},{"value":"张掖市","label":"张掖市"},{"value":"平凉市","label":"平凉市"},{"value":"酒泉市","label":"酒泉市"},{"value":"庆阳市","label":"庆阳市"},{"value":"定西市","label":"定西市"},{"value":"陇南市","label":"陇南市"},{"value":"临夏回族自治州","label":"临夏回族自治州"},{"value":"甘南藏族自治州","label":"甘南藏族自治州"}]},{"value":"青海省","label":"青海省","children":[{"value":"西宁市","label":"西宁市"},{"value":"海东市","label":"海东市"},{"value":"海北藏族自治州","label":"海北藏族自治州"},{"value":"黄南藏族自治州","label":"黄南藏族自治州"},{"value":"海南藏族自治州","label":"海南藏族自治州"},{"value":"果洛藏族自治州","label":"果洛藏族自治州"},{"value":"玉树藏族自治州","label":"玉树藏族自治州"},{"value":"海西蒙古族藏族自治州","label":"海西蒙古族藏族自治州"}]},{"value":"宁夏回族自治区","label":"宁夏回族自治区","children":[{"value":"银川市","label":"银川市"},{"value":"石嘴山市","label":"石嘴山市"},{"value":"吴忠市","label":"吴忠市"},{"value":"固原市","label":"固原市"},{"value":"中卫市","label":"中卫市"}]},{"value":"新疆维吾尔自治区","label":"新疆维吾尔自治区","children":[{"value":"乌鲁木齐市","label":"乌鲁木齐市"},{"value":"克拉玛依市","label":"克拉玛依市"},{"value":"吐鲁番市","label":"吐鲁番市"},{"value":"哈密市","label":"哈密市"},{"value":"昌吉回族自治州","label":"昌吉回族自治州"},{"value":"博尔塔拉蒙古自治州","label":"博尔塔拉蒙古自治州"},{"value":"巴音郭楞蒙古自治州","label":"巴音郭楞蒙古自治州"},{"value":"阿克苏地区","label":"阿克苏地区"},{"value":"克孜勒苏柯尔克孜自治州","label":"克孜勒苏柯尔克孜自治州"},{"value":"喀什地区","label":"喀什地区"},{"value":"和田地区","label":"和田地区"},{"value":"伊犁哈萨克自治州","label":"伊犁哈萨克自治州"},{"value":"塔城地区","label":"塔城地区"},{"value":"阿勒泰地区","label":"阿勒泰地区"},{"value":"石河子市","label":"石河子市"},{"value":"阿拉尔市","label":"阿拉尔市"},{"value":"图木舒克市","label":"图木舒克市"},{"value":"五家渠市","label":"五家渠市"},{"value":"铁门关市","label":"铁门关市"}]}] -------------------------------------------------------------------------------- /src/components/utils.js: -------------------------------------------------------------------------------- 1 | const componentObj = { 2 | input: generateInputComponent, 3 | button: generateButtonComponent, 4 | buttonGroup: generateButtonGroupComponent, 5 | reset: generateResetComponent, 6 | submit: generateSubmitComponent, 7 | icon: generateIconComponent, 8 | radio: generateRadioComponent, 9 | radioGroup: generateRadioGroupComponent, 10 | checkbox: generateCheckboxComponent, 11 | checkboxGroup: generateCheckboxGroupComponent, 12 | switch: generateSwitchComponent, 13 | select: generateSelectComponent, 14 | slider: generateSliderComponent, 15 | date: generateDateComponent, 16 | time: generateTimeComponent, 17 | cascader: generateCascaderComponent, 18 | inputNumber: generateInputNumberComponent, 19 | rate: generateRateComponent, 20 | upload: generateUploadComponent, 21 | colorPicker: generateColorPickerComponent, 22 | col: generateColComponent, 23 | formItem: generateFormItemComponent, 24 | } 25 | 26 | function generateInputComponent(h, formData = {}, obj, vm) { 27 | const key = obj.key? obj.key : '' 28 | let children = [] 29 | 30 | if (obj.children) { 31 | children = obj.children.map(item => { 32 | let component 33 | if (item.type == 'span') { 34 | component = h('span', { 35 | slot: item.slot 36 | }, [item.text]) 37 | } else { 38 | let func = componentObj[item.type] 39 | component = func? func.call(vm, h, formData, item, vm) : null 40 | } 41 | return component 42 | }) 43 | } 44 | 45 | return h('Input', { 46 | props: { 47 | value: key? formData[key] : '', 48 | ...obj.props 49 | }, 50 | style: obj.style, 51 | on: { 52 | ...translateEvents(obj.events, vm), 53 | input(val) { 54 | if (key) { 55 | formData[key] = val 56 | } 57 | } 58 | }, 59 | slot: obj.slot 60 | }, children) 61 | } 62 | 63 | function generateButtonComponent(h, formData = {}, obj, vm) { 64 | return h('Button', { 65 | props: obj.props, 66 | slot: obj.slot, 67 | style: obj.style, 68 | on: obj.events 69 | }, [obj.text]) 70 | } 71 | 72 | function generateButtonGroupComponent(h, formData = {}, obj, vm) { 73 | const components = obj.children.map(item => { 74 | return h('Button', { 75 | props: item.props? item.props : item, 76 | slot: item.slot, 77 | style: item.style, 78 | on: item.events 79 | }, [item.text]) 80 | }) 81 | 82 | return h('ButtonGroup', { 83 | props: obj.props, 84 | style: obj.style, 85 | slot: obj.slot, 86 | }, [components]) 87 | } 88 | 89 | function generateSubmitComponent(h, formData = {}, obj, vm) { 90 | const components = [] 91 | const submit = h('Button', { 92 | props: obj.props, 93 | style: obj.style, 94 | on: { 95 | click() { 96 | vm.$refs['form'].validate((valid) => { 97 | if (valid) { 98 | obj.success.call(vm, formData) 99 | } else { 100 | obj.fail.call(vm, formData) 101 | } 102 | }) 103 | } 104 | } 105 | }, [obj.text]) 106 | 107 | components.push(submit) 108 | 109 | if (obj.reset) { 110 | const reset = h('Button', { 111 | props: obj.reset.props, 112 | style: { 113 | marginLeft: '10px', 114 | ...obj.style, 115 | }, 116 | on: { 117 | click() { 118 | vm.$refs['form'].resetFields() 119 | } 120 | } 121 | }, [obj.reset.text]) 122 | 123 | components.push(reset) 124 | } 125 | 126 | return h('div', components) 127 | } 128 | 129 | function generateResetComponent(h, formData = {}, obj, vm) { 130 | return h('Button', { 131 | props: obj.props, 132 | style: obj.style, 133 | slot: obj.slot, 134 | on: { 135 | click() { 136 | vm.$refs['form'].resetFields() 137 | } 138 | } 139 | }, [obj.text]) 140 | } 141 | 142 | function generateIconComponent(h, formData = {}, obj, vm) { 143 | return h('Icon', { 144 | props: obj.props, 145 | style: obj.style, 146 | slot: obj.slot, 147 | }) 148 | } 149 | 150 | function generateRadioComponent(h, formData = {}, obj, vm) { 151 | const key = obj.key? obj.key : '' 152 | 153 | return h('Radio', { 154 | props: { 155 | value: key? formData[key] : false, 156 | ...obj.props 157 | }, 158 | style: obj.style, 159 | slot: obj.slot, 160 | on: { 161 | ...translateEvents(obj.events, vm), 162 | input(val) { 163 | if (key) { 164 | formData[key] = val 165 | } 166 | } 167 | } 168 | }, [obj.text]) 169 | } 170 | 171 | 172 | function generateRadioGroupComponent(h, formData = {}, obj, vm) { 173 | let components = [] 174 | const key = obj.key? obj.key : '' 175 | if (obj.children) { 176 | components = obj.children.map(child => { 177 | return h('Radio', { 178 | props: child.props? child.props : child 179 | }, [child.text]) 180 | }) 181 | } 182 | 183 | return h('RadioGroup', { 184 | props: { 185 | value: key? formData[key] : '', 186 | ...obj.props 187 | }, 188 | style: obj.style, 189 | slot: obj.slot, 190 | on: { 191 | ...translateEvents(obj.events, vm), 192 | input(val) { 193 | if (key) { 194 | formData[key] = val 195 | } 196 | } 197 | } 198 | }, [components]) 199 | } 200 | 201 | 202 | function generateCheckboxComponent(h, formData = {}, obj, vm) { 203 | const key = obj.key? obj.key : '' 204 | 205 | return h('Checkbox', { 206 | props: { 207 | value: key? formData[key] : '', 208 | ...obj.props 209 | }, 210 | style: obj.style, 211 | slot: obj.slot, 212 | on: { 213 | ...translateEvents(obj.events, vm), 214 | input(val) { 215 | if (key) { 216 | formData[key] = val 217 | } 218 | } 219 | } 220 | }, [obj.text]) 221 | 222 | } 223 | 224 | function generateCheckboxGroupComponent(h, formData = {}, obj, vm) { 225 | let components = [] 226 | const key = obj.key? obj.key : '' 227 | 228 | if (obj.children) { 229 | components = obj.children.map(child => { 230 | return h('Checkbox', { 231 | props: child.props? child.props : child 232 | }, [child.text]) 233 | }) 234 | } 235 | 236 | return h('CheckboxGroup', { 237 | props: { 238 | value: key? formData[key] : [], 239 | ...obj.props 240 | }, 241 | style: obj.style, 242 | slot: obj.slot, 243 | on: { 244 | ...translateEvents(obj.events, vm), 245 | input(val) { 246 | if (key) { 247 | formData[key] = val 248 | } 249 | } 250 | } 251 | }, [components]) 252 | } 253 | 254 | function generateSwitchComponent(h, formData = {}, obj, vm) { 255 | const key = obj.key? obj.key : '' 256 | 257 | let components = [] 258 | if (obj.children) { 259 | components = obj.children.map(item => { 260 | let temp 261 | if (item.type == 'icon') { 262 | temp = generateIconComponent(h, formData, item) 263 | } else if (item.type == 'span') { 264 | temp = h('span', { 265 | slot: item.slot, 266 | }, [item.text]) 267 | } 268 | 269 | return temp 270 | }) 271 | } 272 | 273 | return h('i-switch', { 274 | props: { 275 | value: key? formData[key] : false, 276 | ...obj.props 277 | }, 278 | style: obj.style, 279 | slot: obj.slot, 280 | on: { 281 | ...translateEvents(obj.events, vm), 282 | input(val) { 283 | if (key) { 284 | formData[key] = val 285 | } 286 | } 287 | }, 288 | }, components) 289 | } 290 | 291 | function generateSelectComponent(h, formData = {}, obj, vm) { 292 | const key = obj.key? obj.key : '' 293 | 294 | let components = [] 295 | 296 | if (obj.children) { 297 | components = obj.children.map(item => { 298 | if (item.type == 'optionGroup') { 299 | return h('OptionGroup', { 300 | props: item.props? item.props : item 301 | }, item.children.map(child => { 302 | return h('Option', { 303 | props: child.props? child.props : child 304 | }) 305 | })) 306 | } else { 307 | return h('Option', { 308 | props: item.props? item.props : item 309 | }) 310 | } 311 | }) 312 | } 313 | 314 | return h('Select', { 315 | props: { 316 | value: formData[key], 317 | ...obj.props 318 | }, 319 | style: obj.style, 320 | on: { 321 | ...translateEvents(obj.events, vm), 322 | input(val) { 323 | if (key) { 324 | formData[key] = val 325 | } 326 | } 327 | }, 328 | slot: obj.slot 329 | }, components) 330 | } 331 | 332 | function generateSliderComponent(h, formData = {}, obj, vm) { 333 | const key = obj.key? obj.key : '' 334 | 335 | return h('Slider', { 336 | props: { 337 | value: formData[key], 338 | ...obj.props 339 | }, 340 | style: obj.style, 341 | slot: obj.slot, 342 | on: { 343 | ...translateEvents(obj.events, vm), 344 | input(val) { 345 | if (key) { 346 | formData[key] = val 347 | } 348 | } 349 | } 350 | }) 351 | } 352 | 353 | 354 | function generateDateComponent(h, formData = {}, obj, vm) { 355 | const key = obj.key? obj.key : '' 356 | const type = obj.props.type 357 | return h('DatePicker', { 358 | props: { 359 | value: key? formData[key] : '', 360 | ...obj.props 361 | }, 362 | style: obj.style, 363 | slot: obj.slot, 364 | on: { 365 | ...translateEvents(obj.events, vm), 366 | input(date) { 367 | if (key) { 368 | if (type.includes('datetime')) { 369 | if (Array.isArray(date)) { 370 | formData[key] = date? date.map(item => item? item.toLocaleDateString() 371 | + ' ' + item.toTimeString().split(' ')[0] : '') : [] 372 | } else { 373 | formData[key] = date? date.toLocaleDateString() + ' ' + date.toTimeString().split(' ')[0] : '' 374 | } 375 | } else { 376 | if (Array.isArray(date)) { 377 | formData[key] = date? date.map(item => item? item.toLocaleDateString() : '') : [] 378 | } else { 379 | formData[key] = date? date.toLocaleDateString() : '' 380 | } 381 | } 382 | } 383 | }, 384 | } 385 | }) 386 | } 387 | 388 | function generateTimeComponent(h, formData = {}, obj, vm) { 389 | const key = obj.key? obj.key : '' 390 | 391 | return h('TimePicker', { 392 | props: { 393 | value: key? formData[key] : '', 394 | ...obj.props 395 | }, 396 | style: obj.style, 397 | slot: obj.slot, 398 | on: { 399 | ...translateEvents(obj.events, vm), 400 | input(val) { 401 | if (key) { 402 | formData[key] = val 403 | } 404 | } 405 | } 406 | }) 407 | } 408 | 409 | function generateCascaderComponent(h, formData = {}, obj, vm) { 410 | const key = obj.key? obj.key : '' 411 | 412 | return h('Cascader', { 413 | props: { 414 | value: key? formData[key] : [], 415 | ...obj.props 416 | }, 417 | style: obj.style, 418 | slot: obj.slot, 419 | on: { 420 | ...translateEvents(obj.events, vm), 421 | input(val) { 422 | if (key) { 423 | formData[key] = val 424 | } 425 | } 426 | } 427 | }) 428 | } 429 | 430 | function generateInputNumberComponent(h, formData = {}, obj, vm) { 431 | const key = obj.key? obj.key : '' 432 | 433 | return h('InputNumber', { 434 | props: { 435 | value: key? formData[key] : null, 436 | ...obj.props 437 | }, 438 | style: obj.style, 439 | slot: obj.slot, 440 | on: { 441 | ...translateEvents(obj.events, vm), 442 | input(val) { 443 | if (key) { 444 | formData[key] = val 445 | } 446 | } 447 | } 448 | }) 449 | } 450 | 451 | function generateRateComponent(h, formData = {}, obj, vm) { 452 | const key = obj.key? obj.key : '' 453 | 454 | return h('Rate', { 455 | props: { 456 | value: key? formData[key] : 0, 457 | ...obj.props 458 | }, 459 | slot: obj.slot, 460 | style: obj.style, 461 | on: { 462 | ...translateEvents(obj.events, vm), 463 | input(val) { 464 | if (key) { 465 | formData[key] = val 466 | } 467 | } 468 | } 469 | }) 470 | } 471 | 472 | function generateUploadComponent(h, formData = {}, obj, vm) { 473 | let components = [] 474 | 475 | if (obj.children) { 476 | components = obj.children.map(item => { 477 | let func = componentObj[item.type] 478 | return func? func.call(vm, h, formData, item, vm) : null 479 | }) 480 | } 481 | return h('Upload', { 482 | props: obj.props, 483 | style: obj.style, 484 | slot: obj.slot, 485 | }, components) 486 | } 487 | 488 | function generateColorPickerComponent(h, formData = {}, obj, vm) { 489 | const key = obj.key? obj.key : '' 490 | 491 | return h('ColorPicker', { 492 | props: { 493 | value: key? formData[key] : '', 494 | ...obj.props 495 | }, 496 | style: obj.style, 497 | slot: obj.slot, 498 | on: { 499 | ...translateEvents(obj.events, vm), 500 | input(val) { 501 | if (key) { 502 | formData[key] = val 503 | } 504 | } 505 | } 506 | }) 507 | } 508 | 509 | function generateColComponent(h, obj, component) { 510 | return h('Col', { 511 | props: { 512 | span: obj.span, 513 | push: obj.push, 514 | pull: obj.pull, 515 | offset: obj.offset, 516 | order: obj.order, 517 | 'class-name': obj['class-name'] || obj['className'], 518 | xs: obj.xs, 519 | sm: obj.sm, 520 | md: obj.md, 521 | lg: obj.lg, 522 | }, 523 | }, [component]) 524 | } 525 | 526 | function generateFormItemComponent(h, obj, component) { 527 | return h('FormItem', { 528 | class: obj.className, 529 | props: { 530 | label: obj.label, 531 | rules: obj.rules, 532 | prop: obj.key? obj.key : '', 533 | 'label-width':obj['label-width'] || obj['labelWidth'], 534 | 'label-for': obj['label-for'] || obj['labelFor'], 535 | error: obj.error, 536 | 'show-message': obj['show-message'] || obj['showMessage'], 537 | } 538 | }, [component]) 539 | } 540 | 541 | 542 | function translateEvents(events = {}, vm) { 543 | const result = {} 544 | for (let event in events) { 545 | result[event] = events[event].bind(vm) 546 | } 547 | 548 | return result 549 | } 550 | 551 | export default componentObj -------------------------------------------------------------------------------- /doc.md: -------------------------------------------------------------------------------- 1 | # 文档 2 | 3 | 由于render函数不支持Vue的v-指令 所以iView的文档中有写明支持v-model的 都不要使用 所有表单数据都必须在formData里定义并设定初始值 4 | 5 | **注意事项** 6 | 7 | 某些组件(例如 button) iview 并没有提供类似于 `on-click` 这样的事件。这时,可以使用 DOM 元素原生事件代替,例如 `click` 8 | ```js 9 | type: 'button', 10 | text: '按钮', 11 | props: { 12 | type: 'primary', 13 | icon: 'ios-search' 14 | }, 15 | events: { 16 | click() { 17 | alert(1) 18 | } 19 | } 20 | ``` 21 | 22 | * [整体布局](#整体布局) 23 | * [表单数据](#表单数据) 24 | * [表单验证](#表单验证) 25 | * [Input输入框](#Input输入框) 26 | * [Radio单选框](#Radio单选框) 27 | * [Checkbox多选框](#Checkbox多选框) 28 | * [Button按钮](#Button按钮) 29 | * [Switch开关](#Switch开关) 30 | * [Select选择器](#Select选择器) 31 | * [Slider滑块](#Slider滑块) 32 | * [DatePicker日期选择器](#DatePicker日期选择器) 33 | * [TimePicker时间选择器](#TimePicker时间选择器) 34 | * [Cascader级联选择](#Cascader级联选择) 35 | * [InputNumber数字输入框](#InputNumber数字输入框) 36 | * [Rate评分](#Rate评分) 37 | * [Upload上传](#Upload上传) 38 | * [ColorPicker颜色选择器](#ColorPicker颜色选择器) 39 | 40 | ## 整体布局 41 | [iView栅格系统](https://www.iviewui.com/components/grid) 42 | 43 | [栅格系统在线DEMO](https://jsrun.net/GxXKp/edit) 44 | ``` 45 |
46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 |