vue-form-generator example
https://github.com/icebob/vue-form-generator
HTML
<script src="https://unpkg.com/[email protected]"></script>
<link rel="stylesheet" href="https://unpkg.com/[email protected]/dist/vfg.css">
<script src="https://unpkg.com/[email protected]/dist/vue.min.js"></script>
<div id="app">
<floatingsidebox
:model="model"
:schema="schema"
:form-options="formOptions"
title="Demo of vue-form-generator"
></floatingsidebox>
<floatingsidebox
:model="model"
:schema="schema"
:form-options="formOptions"
title="Yay - a second component"
></floatingsidebox>
</div>
CSS
html {
font-family: Tahoma;
font-size: 14px;
}
body {
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
font-size: 14px;
line-height: 1.42857143;
color: #333;
}
h1 {
text-align: center;
font-size: 36px;
margin-top: 20px;
margin-bottom: 10px;
font-weight: 500;
}
fieldset {
border: 0;
}
.floating-sidebox {
margin-bottom: 20px;
background-color: #fff;
border: 1px solid transparent;
border-radius: 4px;
-webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .05);
box-shadow: 0 1px 1px rgba(0, 0, 0, .05);
border-color: #ddd;
}
.sidebox-header {
color: #333;
background-color: #f5f5f5;
border-color: #ddd;
padding: 10px 15px;
border-bottom: 1px solid transparent;
border-top-left-radius: 3px;
border-top-right-radius: 3px;
}
.sidebox-content {
padding: 15px;
}
.sidebox-center {
}
.floating-sidebox-close {
}
.floating-sidebox-overlay {
}
JavaScript
Vue.component('floatingsidebox', {
template: `
<div class="component-wrap">
<div class="floating-sidebox">
<div class="sidebox-header">
<div class="sidebox-center">
<h1 class="text-center">{{ title }}</h1>
</div>
</div>
<div class="sidebox-content">
<div class="sidebox-center">
<!-- This is the actual content. Above container code is common for all forms. -->
<vue-form-generator :schema="schema" :model="model" :options="formOptions"></vue-form-generator>
</div>
</div>
<div class="floating-sidebox-close" @click="cancel"></div>
</div>
<div class="floating-sidebox-overlay"></div>
</div>
`,
props: ['model', 'schema', 'formOptions', 'title'],
methods: {
cancel: function () {
},
},
components: {
"vue-form-generator": VueFormGenerator.component
}
});
var vm = new Vue({
el: "#app",
data: {
model: {
id: 1,
name: "John Doe",
email: "[email protected]",
status: true
},
schema: {
fields: [{
type: "input",
inputType: "text",
label: "Name",
model: "name",
readonly: false,
featured: true,
required: true,
disabled: false,
placeholder: "User's name",
validator: VueFormGenerator.validators.string
}, {
type: "input",
inputType: "email",
label: "E-mail",
model: "email",
placeholder: "User's e-mail address",
validator: VueFormGenerator.validators.email
}, {
type: "switch",
label: "Status",
model: "status",
multi: true,
readonly: false,
featured: false,
disabled:...