diff --git a/src/components/form_elements/formbuilder.js b/src/components/form_elements/formbuilder.js index e991acb..1ed4fec 100644 --- a/src/components/form_elements/formbuilder.js +++ b/src/components/form_elements/formbuilder.js @@ -342,19 +342,19 @@ export const FormBuilder = new Vue({ } }, methods: { - deleteElement(index) { - vm.$store.activeForm = []; + deleteElement(index, form) { + vm.$store.activeField = []; vm.$store.activeTabForFields = "elements"; - vm.$delete(vm.$store.forms, index); + vm.$delete(form, index); }, - cloneElement(index, form) { - var cloned = _.cloneDeep(form) // clone deep lodash - vm.$store.forms.splice(index, 0, cloned) + cloneElement(index, field, form) { + var cloned = _.cloneDeep(field) // clone deep lodash + form.splice(index, 0, cloned) }, - editElementProperties(form) { - vm.$store.activeForm = form; + editElementProperties(field) { + vm.$store.activeField = field; vm.$store.activeTabForFields = "properties"; } } diff --git a/src/components/form_elements/properties/HtmlAdvancedProps.vue b/src/components/form_elements/properties/HtmlAdvancedProps.vue index f4fb1db..5ba13b2 100644 --- a/src/components/form_elements/properties/HtmlAdvancedProps.vue +++ b/src/components/form_elements/properties/HtmlAdvancedProps.vue @@ -1,13 +1,13 @@ <template> -<el-form-item label="Html Content" v-show="activeForm.hasOwnProperty('htmlContent')"> - <el-input :rows="16" type="textarea" v-model="activeForm.htmlContent">{{activeForm.htmlContent}}</el-input> +<el-form-item label="Html Content" v-show="activeField.hasOwnProperty('htmlContent')"> + <el-input :rows="16" type="textarea" v-model="activeField.htmlContent">{{activeField.htmlContent}}</el-input> </el-form-item> </template> <script> export default { name: 'HtmlAdvancedProp', - store: ['activeForm'] + store: ['activeField'] } </script> diff --git a/src/components/form_elements/properties/NumberInputAdvancedProps.vue b/src/components/form_elements/properties/NumberInputAdvancedProps.vue index 93f2489..d9b3ec6 100644 --- a/src/components/form_elements/properties/NumberInputAdvancedProps.vue +++ b/src/components/form_elements/properties/NumberInputAdvancedProps.vue @@ -3,19 +3,19 @@ <el-row> <el-col :span="8"> <el-form-item label="Disabled"> - <el-switch v-model="activeForm.disabled"></el-switch> + <el-switch v-model="activeField.disabled"></el-switch> </el-form-item> </el-col> <el-col :span="8"> <el-form-item label="Step"> - <el-input-number v-model="activeForm.step" controls-position="right"></el-input-number> + <el-input-number v-model="activeField.step" controls-position="right"></el-input-number> </el-form-item> </el-col> <el-col :span="8"> <el-form-item label="Step Strictly"> - <el-switch v-model="activeForm.stepStrictly"></el-switch> + <el-switch v-model="activeField.stepStrictly"></el-switch> </el-form-item> </el-col> </el-row> @@ -24,10 +24,10 @@ <el-form-item label="Min Value"> <el-row> <el-col :span="6"> - <el-switch v-model="activeForm.hasMinValue"></el-switch> + <el-switch v-model="activeField.hasMinValue"></el-switch> </el-col> <el-col :span="18"> - <el-input-number v-show="activeForm.hasMinValue" v-model="activeForm.mix" controls-position="right"></el-input-number> + <el-input-number v-show="activeField.hasMinValue" v-model="activeField.mix" controls-position="right"></el-input-number> </el-col> </el-row> </el-form-item> @@ -36,10 +36,10 @@ <el-form-item label="Max Value"> <el-row> <el-col :span="6"> - <el-switch v-model="activeForm.hasMaxValue"></el-switch> + <el-switch v-model="activeField.hasMaxValue"></el-switch> </el-col> <el-col :span="18"> - <el-input-number v-show="activeForm.hasMaxValue" v-model="activeForm.max" controls-position="right"></el-input-number> + <el-input-number v-show="activeField.hasMaxValue" v-model="activeField.max" controls-position="right"></el-input-number> </el-col> </el-row> </el-form-item> @@ -50,6 +50,6 @@ <script> export default { name: 'RatingAdvancedProp', - store: ['activeForm'] + store: ['activeField'] } </script> diff --git a/src/components/form_elements/properties/OptionsAdvancedProps.vue b/src/components/form_elements/properties/OptionsAdvancedProps.vue index 00e2906..9649fc5 100644 --- a/src/components/form_elements/properties/OptionsAdvancedProps.vue +++ b/src/components/form_elements/properties/OptionsAdvancedProps.vue @@ -3,30 +3,30 @@ <el-row> <el-col :span="6"> <el-form-item label="Remote Data Source"> - <el-switch v-model="activeForm.isFromUrl">{{activeForm.htmlContent}}</el-switch> + <el-switch v-model="activeField.isFromUrl">{{activeField.htmlContent}}</el-switch> </el-form-item> </el-col> <el-col :span="18"> - <el-form-item label="Url" v-show="activeForm.isFromUrl" prop="dataUrl"> - <el-input v-model="activeForm.dataUrl"></el-input> + <el-form-item label="Url" v-show="activeField.isFromUrl" prop="dataUrl"> + <el-input v-model="activeField.dataUrl"></el-input> </el-form-item> </el-col> </el-row> - <el-row v-show="activeForm.isFromUrl"> + <el-row v-show="activeField.isFromUrl"> <el-col :span="4"> - <el-form-item label="Fetch Data" v-show="activeForm.labelField"> + <el-form-item label="Fetch Data" v-show="activeField.labelField"> <el-button type="success" plain @click="fetchData">Fetch Data</el-button> </el-form-item> </el-col> <el-col :span="10"> - <el-form-item label="Label Field" v-show="activeForm.labelField"> - <el-input v-model="activeForm.labelField"></el-input> + <el-form-item label="Label Field" v-show="activeField.labelField"> + <el-input v-model="activeField.labelField"></el-input> </el-form-item> </el-col> <el-col :span="10"> - <el-form-item label="Value Field" v-show="activeForm.valueField"> - <el-input v-model="activeForm.valueField"></el-input> + <el-form-item label="Value Field" v-show="activeField.valueField"> + <el-input v-model="activeField.valueField"></el-input> </el-form-item> </el-col> </el-row> @@ -38,12 +38,12 @@ import fetchData from '@/api/fetch-data'; export default { name: 'SelectListAdvancedProp', - store: ['activeForm'], + store: ['activeField'], methods: { fetchData() { - let dataUrl = this.activeForm.dataUrl; - let valueField = this.activeForm.valueField; - let labelField = this.activeForm.labelField; + let dataUrl = this.activeField.dataUrl; + let valueField = this.activeField.valueField; + let labelField = this.activeField.labelField; if (!dataUrl) { this.$message.error('Url can not be empty'); return; @@ -59,7 +59,7 @@ export default { let promise = fetchData.fetchOptionsData(dataUrl, labelField, valueField); promise.then((data) => { - this.activeForm.options = data; + this.activeField.options = data; }); this.$message({ showClose: true, diff --git a/src/components/form_elements/properties/Properties.vue b/src/components/form_elements/properties/Properties.vue index d9195e4..5ce018b 100644 --- a/src/components/form_elements/properties/Properties.vue +++ b/src/components/form_elements/properties/Properties.vue @@ -3,30 +3,30 @@ <el-form :model="fieldProperties" :rules="rules" :label-position="labelPosition" ref="fieldProperties"> <el-row> <el-col :span="12"> - <el-form-item label="Label Name" v-show="activeForm.hasOwnProperty('label')"> - <el-input v-model="activeForm.label">{{activeForm.label}}</el-input> + <el-form-item label="Label Name" v-show="activeField.hasOwnProperty('label')"> + <el-input v-model="activeField.label">{{activeField.label}}</el-input> </el-form-item> </el-col> <el-col :span="12"> - <el-form-item label="Label Width - px" v-show="activeForm.hasOwnProperty('label')"> - <el-input-number v-model="activeForm.labelWidth" :min="30" :max="1000" controls-position="right"></el-input-number> + <el-form-item label="Label Width - px" v-show="activeField.hasOwnProperty('label')"> + <el-input-number v-model="activeField.labelWidth" :min="30" :max="1000" controls-position="right"></el-input-number> </el-form-item> </el-col> </el-row> - <el-form-item label="Height - px" v-show="activeForm.hasOwnProperty('fieldType') && activeForm['fieldType'] == 'Carousel'"> - <el-input-number v-model="activeForm.controlHeight" controls-position="right"></el-input-number> + <el-form-item label="Height - px" v-show="activeField.hasOwnProperty('fieldType') && activeField['fieldType'] == 'Carousel'"> + <el-input-number v-model="activeField.controlHeight" controls-position="right"></el-input-number> </el-form-item> <!-- Show only when 'isPlacehodlerVisible' key exist --> - <el-form-item label="Placeholder" v-show="activeForm.hasOwnProperty('isPlaceholderVisible') && activeForm['isPlaceholderVisible'] == true"> + <el-form-item label="Placeholder" v-show="activeField.hasOwnProperty('isPlaceholderVisible') && activeField['isPlaceholderVisible'] == true"> <el-row> <el-col :span="5"> - <el-switch v-model="activeForm.isPlaceholderVisible"></el-switch> + <el-switch v-model="activeField.isPlaceholderVisible"></el-switch> </el-col> <el-col :span="19 "> - <el-input v-show="activeForm.isPlaceholderVisible" v-model="activeForm.placeholder"> - {{activeForm.placeholder}} + <el-input v-show="activeField.isPlaceholderVisible" v-model="activeField.placeholder"> + {{activeField.placeholder}} </el-input> </el-col> </el-row> @@ -34,73 +34,73 @@ <el-row> <el-col :span="12"> - <el-form-item label="Required field?" v-show="activeForm.hasOwnProperty('isRequired')"> - <el-switch v-model="activeForm.isRequired"></el-switch> + <el-form-item label="Required field?" v-show="activeField.hasOwnProperty('isRequired')"> + <el-switch v-model="activeField.isRequired"></el-switch> </el-form-item> </el-col> <el-col :span="12"> - <el-form-item label="Layout - Max value is 24" v-show="activeForm.hasOwnProperty('span')"> - <el-input-number v-model="activeForm.span" :min="1" :max="24" controls-position="right"></el-input-number> + <el-form-item label="Layout - Max value is 24" v-show="activeField.hasOwnProperty('span')"> + <el-input-number v-model="activeField.span" :min="1" :max="24" controls-position="right"></el-input-number> </el-form-item> </el-col> </el-row> - <el-form-item label="Button text" v-show="activeForm.hasOwnProperty('buttonText')"> - <el-input v-model="activeForm.buttonText"> - {{activeForm.buttonText}} + <el-form-item label="Button text" v-show="activeField.hasOwnProperty('buttonText')"> + <el-input v-model="activeField.buttonText"> + {{activeField.buttonText}} </el-input> </el-form-item> - <el-form-item label="Code view" v-show="activeForm.hasOwnProperty('fieldText')"> - <el-input v-model="activeForm.fieldText" type="textarea" :rows="10"> - {{activeForm.fieldText}} + <el-form-item label="Code view" v-show="activeField.hasOwnProperty('fieldText')"> + <el-input v-model="activeField.fieldText" type="textarea" :rows="10"> + {{activeField.fieldText}} </el-input> </el-form-item> - <!-- <el-form-item label="Helpblock" v-show="activeForm.hasOwnProperty('isHelpBlockVisible')"> - <el-switch v-model="activeForm.isHelpBlockVisible"></el-switch> - <el-input v-show="activeForm.isHelpBlockVisible" v-model="activeForm.helpBlockText"> - {{activeForm.helpBlockText}} + <!-- <el-form-item label="Helpblock" v-show="activeField.hasOwnProperty('isHelpBlockVisible')"> + <el-switch v-model="activeField.isHelpBlockVisible"></el-switch> + <el-input v-show="activeField.isHelpBlockVisible" v-model="activeField.helpBlockText"> + {{activeField.helpBlockText}} </el-input> </el-form-item> --> <el-row> <el-col :span="12"> - <el-form-item label="Active Text" v-show="activeForm.hasOwnProperty('activeText')"> - <el-input v-model="activeForm.activeText">{{activeForm.activeText}}</el-input> + <el-form-item label="Active Text" v-show="activeField.hasOwnProperty('activeText')"> + <el-input v-model="activeField.activeText">{{activeField.activeText}}</el-input> </el-form-item> </el-col> <el-col :span="12"> - <el-form-item label="Inactive Text" v-show="activeForm.hasOwnProperty('inActiveText')"> - <el-input v-model="activeForm.inActiveText">{{activeForm.inActiveText}}</el-input> + <el-form-item label="Inactive Text" v-show="activeField.hasOwnProperty('inActiveText')"> + <el-input v-model="activeField.inActiveText">{{activeField.inActiveText}}</el-input> </el-form-item> </el-col> </el-row> - <el-form-item label="uploadURL" v-show="activeForm.hasOwnProperty('uploadURL')"> - <el-input v-model="activeForm.uploadURL">{{activeForm.uploadURL}}</el-input> + <el-form-item label="uploadURL" v-show="activeField.hasOwnProperty('uploadURL')"> + <el-input v-model="activeField.uploadURL">{{activeField.uploadURL}}</el-input> </el-form-item> - <el-form-item label="Items" v-show="activeForm.hasOwnProperty('items')"> - <li v-for="(item, index) in activeForm.items" :key="index" class="properties__optionslist"> + <el-form-item label="Items" v-show="activeField.hasOwnProperty('items')"> + <li v-for="(item, index) in activeField.items" :key="index" class="properties__optionslist"> <el-row :gutter="5"> <el-col :span="20"> <el-input v-model="item.url">{{item.url}}</el-input> </el-col> <el-col :span="4"> - <el-button v-show="activeForm.items.length > 1"> + <el-button @click="deleteOption(activeField.items, index)" v-show="activeField.items.length > 1"> <i class="el-icon-error"></i> </el-button> </el-col> </el-row> </li> - <el-button type="text" @click="addItem(activeForm.items)"> + <el-button type="text" @click="addItem(activeField.items)"> <i class="el-icon-plus"></i> Add more </el-button> </el-form-item> - <el-form-item label="Options" v-if="!activeForm.isFromUrl && activeForm.options"> + <el-form-item label="Options" v-if="!activeField.isFromUrl && activeField.options"> <ul class="properties__optionsul"> <li class="properties__optionslist"> <el-row :gutter="5"> @@ -114,7 +114,7 @@ </el-col> </el-row> </li> - <li v-for="(item, index) in activeForm.options" :key="index" class="properties__optionslist"> + <li v-for="(item, index) in activeField.options" :key="index" class="properties__optionslist"> <el-row :gutter="5"> <el-col :span="10"> <el-input v-model="item.optionLabel">{{item.optionLabel}}</el-input> @@ -123,20 +123,20 @@ <el-input v-model="item.optionValue">{{item.optionValue}}</el-input> </el-col> <el-col :span="4"> - <el-button @click="deleteOption(activeForm.options, index)" v-show="activeForm.options.length > 1"> + <el-button @click="deleteOption(activeField.options, index)" v-show="activeField.options.length > 1"> <i class="el-icon-error"></i> </el-button> </el-col> </el-row> </li> </ul> - <el-button type="text" @click="addOption(activeForm.options)"> + <el-button type="text" @click="addOption(activeField.options)"> <i class="el-icon-plus"></i> Add more </el-button> </el-form-item> - <el-form-item label="Table Columns" v-show="activeForm.fieldType === 'TableComponent'"> + <el-form-item label="Table Columns" v-show="activeField.fieldType === 'TableComponent'"> <ul class="properties__optionsul"> <li class="properties__optionslist"> <el-row :gutter="5"> @@ -153,7 +153,7 @@ </el-col> </el-row> </li> - <li v-for="(column, index) in activeForm.tableColumns" :key="index" class="properties__optionslist"> + <li v-for="(column, index) in activeField.tableColumns" :key="index" class="properties__optionslist"> <el-row :gutter="5"> <el-col :span="7"> <el-input v-model="column.prop">{{column.prop}}</el-input> @@ -165,34 +165,34 @@ <el-input @change="columnWidth" v-model="column.width">{{column.width}}</el-input> </el-col> <el-col :span="3"> - <el-button @click="deleteColumn(activeForm.tableColumns, index, column.prop)" v-show="activeForm.tableColumns.length > 1"> + <el-button @click="deleteColumn(activeField.tableColumns, index, column.prop)" v-show="activeField.tableColumns.length > 1"> <i class="el-icon-error"></i> </el-button> </el-col> </el-row> </li> </ul> - <el-button type="text" @click="addColumn(activeForm.tableColumns)"> + <el-button type="text" @click="addColumn(activeField.tableColumns)"> <i class="el-icon-plus"></i> Add more </el-button> </el-form-item> - <el-form-item label="Html Content" v-show="activeForm.hasOwnProperty('htmlContent')"> - <el-input :rows="10" type="textarea" v-model="activeForm.htmlContent">{{activeForm.htmlContent}}</el-input> + <el-form-item label="Html Content" v-show="activeField.hasOwnProperty('htmlContent')"> + <el-input :rows="10" type="textarea" v-model="activeField.htmlContent">{{activeField.htmlContent}}</el-input> </el-form-item> - <el-button v-show="activeForm.hasOwnProperty('advancedOptions')" @click="advancedPropsVisible = true" style="width: 100%;" type="success"> + <el-button v-show="activeField.hasOwnProperty('advancedOptions')" @click="advancedPropsVisible = true" style="width: 100%;" type="success"> Advanced Options </el-button> <el-dialog :close-on-click-modal="false" title="Advanced Options" :visible.sync="advancedPropsVisible"> <el-form ref="OptionsForm" :rules="dialogRules"> - <rating-advanced-props v-if="activeForm.fieldType === 'Rating'"></rating-advanced-props> - <text-input-advanced-props v-if="activeForm.fieldType === 'TextInput'"></text-input-advanced-props> - <html-advanced-props v-if="activeForm.fieldType === 'HtmlComponent'"></html-advanced-props> - <number-input-advanced-props v-if="activeForm.fieldType === 'NumberInput'"></number-input-advanced-props> - <select-list-advanced-props v-if="activeForm.fieldType === 'SelectList'"></select-list-advanced-props> - <options-advanced-props v-if="activeForm.fieldType === 'RadioButton' || activeForm.fieldType === 'Checkbox'"></options-advanced-props> + <rating-advanced-props v-if="activeField.fieldType === 'Rating'"></rating-advanced-props> + <text-input-advanced-props v-if="activeField.fieldType === 'TextInput'"></text-input-advanced-props> + <html-advanced-props v-if="activeField.fieldType === 'HtmlComponent'"></html-advanced-props> + <number-input-advanced-props v-if="activeField.fieldType === 'NumberInput'"></number-input-advanced-props> + <select-list-advanced-props v-if="activeField.fieldType === 'SelectList'"></select-list-advanced-props> + <options-advanced-props v-if="activeField.fieldType === 'RadioButton' || activeField.fieldType === 'Checkbox'"></options-advanced-props> </el-form> <div slot="footer" class="dialog-footer"> <el-button type="primary" @click="confirmForm">Confirm</el-button> @@ -221,7 +221,7 @@ export default { OptionsAdvancedProps, SelectListAdvancedProps }, - store: ['activeForm'], // Get the form data from Home + store: ['activeField'], // Get the form data from Home data() { return { labelPosition: 'top', @@ -236,8 +236,8 @@ export default { } }, mounted() { - console.log("activeform ->", this.activeForm) - console.log("activeForm.hasOwnProperty('span') ->", this.activeForm.hasOwnProperty('span')) + console.log("activeField ->", this.activeField) + console.log("activeField.hasOwnProperty('span') ->", this.activeField.hasOwnProperty('span')) }, methods: { deleteOption(option, index) { @@ -257,7 +257,7 @@ export default { }, deleteColumn(column, index, prop) { this.$delete(column, index) - this.activeForm.tableDatas.forEach(function(ele) { + this.activeField.tableDatas.forEach(function(ele) { delete ele[prop]; }) }, diff --git a/src/components/form_elements/properties/RatingAdvancedProps.vue b/src/components/form_elements/properties/RatingAdvancedProps.vue index a077a45..a5d96db 100644 --- a/src/components/form_elements/properties/RatingAdvancedProps.vue +++ b/src/components/form_elements/properties/RatingAdvancedProps.vue @@ -4,8 +4,8 @@ <el-col :span="24"> <el-form-item label="Colors"> <el-row :gutter="3"> - <el-col :span="7" v-for="(color, index) in activeForm.colors" :key="index"> - <el-input v-model="activeForm.colors[index]"></el-input> + <el-col :span="7" v-for="(color, index) in activeField.colors" :key="index"> + <el-input v-model="activeField.colors[index]"></el-input> </el-col> </el-row> </el-form-item> @@ -15,22 +15,22 @@ <el-row> <el-col :span="12"> <el-form-item label="Show Text"> - <el-switch @change="showTextChange" v-model="activeForm.showText"></el-switch> + <el-switch @change="showTextChange" v-model="activeField.showText"></el-switch> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="Disabled"> - <el-switch v-model="activeForm.disabled"></el-switch> + <el-switch v-model="activeField.disabled"></el-switch> </el-form-item> </el-col> </el-row> <el-row> <el-col :span="24"> - <el-form-item label="Texts" v-show="activeForm.showText"> + <el-form-item label="Texts" v-show="activeField.showText"> <el-row :gutter="3"> - <el-col :span="4" v-for="(text, index) in activeForm.texts" :key="index"> - <el-input v-model="activeForm.texts[index]"></el-input> + <el-col :span="4" v-for="(text, index) in activeField.texts" :key="index"> + <el-input v-model="activeField.texts[index]"></el-input> </el-col> </el-row> </el-form-item> @@ -40,12 +40,12 @@ <el-row> <el-col :span="12"> <el-form-item label="Show Score"> - <el-switch @change="showScoreChange" v-model="activeForm.showScore"></el-switch> + <el-switch @change="showScoreChange" v-model="activeField.showScore"></el-switch> </el-form-item> </el-col> <el-col :span="12"> - <el-form-item label="Score Unit" v-show="activeForm.showScore"> - <el-input v-model="activeForm.scoreUnit"></el-input> + <el-form-item label="Score Unit" v-show="activeField.showScore"> + <el-input v-model="activeField.scoreUnit"></el-input> </el-form-item> </el-col> </el-row> @@ -56,7 +56,7 @@ export default { name: 'RatingAdvancedProp', - store: ['activeForm'], + store: ['activeField'], data() { return { name: '' @@ -64,13 +64,13 @@ export default { }, methods: { showTextChange(value) { - if (value && this.activeForm.showScore) { - this.activeForm.showScore = false; + if (value && this.activeField.showScore) { + this.activeField.showScore = false; } }, showScoreChange(value) { - if (value && this.activeForm.showText) { - this.activeForm.showText = false; + if (value && this.activeField.showText) { + this.activeField.showText = false; } } } diff --git a/src/components/form_elements/properties/SelectListAdvancedProps.vue b/src/components/form_elements/properties/SelectListAdvancedProps.vue index 8b0ad82..9e03e00 100644 --- a/src/components/form_elements/properties/SelectListAdvancedProps.vue +++ b/src/components/form_elements/properties/SelectListAdvancedProps.vue @@ -4,38 +4,38 @@ <el-row> <el-col :span="8"> <el-form-item label="Disabled"> - <el-switch v-model="activeForm.disabled"></el-switch> + <el-switch v-model="activeField.disabled"></el-switch> </el-form-item> </el-col> <el-col :span="8"> <el-form-item label="Clearable"> - <el-switch v-model="activeForm.clearable"></el-switch> + <el-switch v-model="activeField.clearable"></el-switch> </el-form-item> </el-col> <el-col :span="8"> <el-form-item label="Multiple"> - <el-switch v-model="activeForm.multiple"></el-switch> + <el-switch v-model="activeField.multiple"></el-switch> </el-form-item> </el-col> </el-row> <el-row> <el-col :span="8"> <el-form-item label="Filterable"> - <el-switch v-model="activeForm.filterable"></el-switch> + <el-switch v-model="activeField.filterable"></el-switch> </el-form-item> </el-col> <el-col :span="8"> <el-form-item label="Remote Search"> - <el-switch @change="remoteChange" v-model="activeForm.remote"></el-switch> + <el-switch @change="remoteChange" v-model="activeField.remote"></el-switch> </el-form-item> </el-col> <el-col :span="8"> <el-form-item label="Multiple"> - <el-switch v-model="activeForm.multiple"></el-switch> + <el-switch v-model="activeField.multiple"></el-switch> </el-form-item> </el-col> </el-row> @@ -47,15 +47,15 @@ import OptionsAdvancedProps from './OptionsAdvancedProps'; export default { name: 'SelectListAdvancedProp', - store: ['activeForm'], + store: ['activeField'], components: { OptionsAdvancedProps }, methods: { remoteChange(value) { if (value) { - this.activeForm.filterable = true; - this.activeForm.isFromUrl = true; + this.activeField.filterable = true; + this.activeField.isFromUrl = true; } } } diff --git a/src/components/form_elements/properties/TextInputAdvancedProps.vue b/src/components/form_elements/properties/TextInputAdvancedProps.vue index 95f3ab4..fcc5e29 100644 --- a/src/components/form_elements/properties/TextInputAdvancedProps.vue +++ b/src/components/form_elements/properties/TextInputAdvancedProps.vue @@ -3,17 +3,17 @@ <el-row> <el-col :span="8"> <el-form-item label="Password"> - <el-switch @change="passwordChange" v-model="activeForm.showPassword"></el-switch> + <el-switch @change="passwordChange" v-model="activeField.showPassword"></el-switch> </el-form-item> </el-col> <el-col :span="8"> <el-form-item label="Disabled"> - <el-switch v-model="activeForm.disabled"></el-switch> + <el-switch v-model="activeField.disabled"></el-switch> </el-form-item> </el-col> <el-col :span="8"> <el-form-item label="Clearable"> - <el-switch v-model="activeForm.clearable"></el-switch> + <el-switch v-model="activeField.clearable"></el-switch> </el-form-item> </el-col> </el-row> @@ -21,12 +21,12 @@ <el-row> <el-col :span="12"> <el-form-item label="Prepend"> - <el-input v-model="activeForm.prepend"></el-input> + <el-input v-model="activeField.prepend"></el-input> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="Append"> - <el-input v-model="activeForm.append"></el-input> + <el-input v-model="activeField.append"></el-input> </el-form-item> </el-col> </el-row> @@ -34,12 +34,12 @@ <el-row> <el-col :span="12"> <el-form-item label="Show Word Limit"> - <el-switch @change="showWordLimitChange" v-model="activeForm.showWordLimit"></el-switch> + <el-switch @change="showWordLimitChange" v-model="activeField.showWordLimit"></el-switch> </el-form-item> </el-col> <el-col :span="12"> - <el-form-item label="Word Limit" v-show="activeForm.showWordLimit"> - <el-input-number :min="1" v-model="activeForm.maxlength"></el-input-number> + <el-form-item label="Word Limit" v-show="activeField.showWordLimit"> + <el-input-number :min="1" v-model="activeField.maxlength"></el-input-number> </el-form-item> </el-col> </el-row> @@ -49,7 +49,7 @@ <script> export default { name: 'RatingAdvancedProp', - store: ['activeForm'], + store: ['activeField'], data() { return { name: '' @@ -58,12 +58,12 @@ export default { methods: { passwordChange(value) { if (value) { - this.activeForm.showWordLimit = false; + this.activeField.showWordLimit = false; } }, showWordLimitChange(value) { if (value) { - this.activeForm.showPassword = false; + this.activeField.showPassword = false; } } } diff --git a/src/store.js b/src/store.js index 826289b..82409c2 100644 --- a/src/store.js +++ b/src/store.js @@ -1,5 +1,5 @@ export default { forms: [], - activeForm: [], + activeField: [], activeTabForFields: 'elements' } diff --git a/src/views/Home.vue b/src/views/Home.vue index 0f1ac7c..40a4d42 100644 --- a/src/views/Home.vue +++ b/src/views/Home.vue @@ -1,35 +1,59 @@ <template> <div> <el-container> - <el-main> + <el-main class="el-main-left"> <div class="wrapper--forms"> <el-form> <el-row> - <draggable :list="forms" class="dragArea" :group="{ name:'formbuilder', pull:false, put:true }" :sort="true" ghost-class="sortable__ghost"> - <!-- The form elements starts (on the right) --> - <!-- <div> --> - <el-col v-for="(form, index) in forms" :key="index" v-bind="form" :span="form.span" class="form__group" :class="{ 'is--active': form === activeForm }"> - <span class="form__selectedlabel">{{ form.fieldType }}</span> - - <div @click="editElementProperties(form)"> - <!-- <label class="form__label" v-model="form.label" v-show="form.hasOwnProperty('label')">{{ form.label }}</label> --> - <component :is="form.fieldType" :currentField="form" class="form__field"> - </component> - </div> - - <!-- Actions list --> - <div class="form__actiongroup"> - <el-button circle size="mini" icon="el-icon-rank" class="form__actionitem--move"></el-button> - - <el-button-group class="form__actionlist"> - <el-button size="mini" icon="el-icon-plus" @click="cloneElement(index, form)" v-show="!form.isUnique"></el-button> - <el-button size="mini" icon="el-icon-delete" @click="deleteElement(index)"></el-button> - </el-button-group> - </div> - </el-col> - <!-- </div> --> - </draggable> + <el-button style="margin-bottom: 10px;" type="primary" @click="addSection">Add Section</el-button> </el-row> + + <el-row v-if="forms.length === 0"> + <div class="empty-section">Please add Sections</div> + </el-row> + + <template v-for="(eachFormObj, eachFormIndex) in forms"> + <div :key="`div-${eachFormIndex}`" class="section-block"> + <div class="source"> + <el-row> + <el-col :span="18"> + <el-input placeholder="Please input section title" v-model="eachFormObj.title" style="width: 100%;"></el-input> + </el-col> + <el-col :span="6"> + <el-button type="danger" round style="float: right" @click="deleteSection(eachFormIndex, eachFormObj.title)">Delete Section</el-button> + </el-col> + </el-row> + </div> + <div class="meta"> + <el-row> + <draggable :list="eachFormObj.fields" class="dragArea" :group="{ name:'formbuilder', pull:false, put:true }" :sort="true" ghost-class="sortable__ghost"> + <!-- The form elements starts (on the right) --> + <!-- <div> --> + <el-col v-for="(field, index) in eachFormObj.fields" :key="index" v-bind="field" :span="field.span" class="form__group" :class="{ 'is--active': field === activeField }"> + <span class="form__selectedlabel">{{ field.fieldType }}</span> + + <div @click="editElementProperties(field)"> + <!-- <label class="form__label" v-model="form.label" v-show="form.hasOwnProperty('label')">{{ form.label }}</label> --> + <component :is="field.fieldType" :currentField="field" class="form__field"> + </component> + </div> + + <!-- Actions list --> + <div class="form__actiongroup"> + <el-button circle size="mini" icon="el-icon-rank" class="form__actionitem--move"></el-button> + + <el-button-group class="form__actionlist"> + <el-button size="mini" icon="el-icon-plus" @click="cloneElement(index, field, eachFormObj.fields)" v-show="!field.isUnique"></el-button> + <el-button size="mini" icon="el-icon-delete" @click="deleteElement(index, eachFormObj.fields)"></el-button> + </el-button-group> + </div> + </el-col> + <!-- </div> --> + </draggable> + </el-row> + </div> + </div> + </template> </el-form> </div> @@ -42,11 +66,11 @@ </el-tab-pane> <el-tab-pane name="properties" label="Properties"> - <properties v-show="Object.keys($store.activeForm).length > 0"></properties> + <properties v-show="Object.keys($store.activeField).length > 0"></properties> </el-tab-pane> </el-tabs> - <!--{{ $store.activeForm }}--> + <!--{{ $store.activeField }}--> </el-aside> </el-container> </div> @@ -59,7 +83,7 @@ import { export default { name: 'Home', - store: ['forms', 'activeForm', 'activeTabForFields'], + store: ['forms', 'activeField', 'activeTabForFields'], data() { return { sortElementOptions: FormBuilder.$data.sortElementOptions @@ -67,19 +91,37 @@ export default { }, mounted() { console.log("form ->", this.forms) - console.log("activeform ->", this.activeForm) + console.log("activeField ->", this.activeField) }, components: FormBuilder.$options.components, methods: { - deleteElement(index) { - FormBuilder.deleteElement(index) + deleteElement(index, form) { + FormBuilder.deleteElement(index, form) }, - cloneElement(index, form) { - FormBuilder.cloneElement(index, form) + cloneElement(index, field, form) { + FormBuilder.cloneElement(index, field, form) }, - editElementProperties(form) { + editElementProperties(field) { console.log("form ->", this.forms) - FormBuilder.editElementProperties(form) + console.log("activeField ->", this.activeField) + FormBuilder.editElementProperties(field) + }, + addSection() { + const formObj = { + title: "", + fields: [] + }; + this.forms.push(formObj); + }, + deleteSection(formIndex, formTitle) { + this.$confirm(`Are you sure to delete the section ${formTitle}?`, 'Warning', { + confirmButtonText: 'OK', + cancelButtonText: 'Cancel', + type: 'warning' + }).then(() => { + this.$delete(this.forms, formIndex); + }); + } } } @@ -87,15 +129,27 @@ export default { <!-- Add "scoped" attribute to limit CSS to this component only --> <style lang="scss" scoped> +.empty-section { + text-align: center; + font-size: 40px; + background: linear-gradient(to bottom,#FFF,#409EFF); + -webkit-text-fill-color: transparent; + -webkit-background-clip: text; +} + .dragArea { margin-left: auto; margin-right: auto; position: relative; min-height: 10px; - height: calc(60vh); + height: calc(30vh); z-index: 2; } +.el-main-left { + height: calc(90vh); +} + .form__selectedlabel { display: none; background: #ECF5FF; @@ -156,4 +210,19 @@ export default { } } } + +.section-block { + border: 1px solid #ebebeb; + border-radius: 3px; +} + +.section-block .source { + padding: 10px +} + +.section-block .meta { + background-color: #fafafa; + border-top: 1px solid #eaeefb; +} + </style> diff --git a/src/views/Preview.vue b/src/views/Preview.vue index 3bc2cda..24fe1de 100644 --- a/src/views/Preview.vue +++ b/src/views/Preview.vue @@ -3,18 +3,21 @@ <el-container> <el-main :style="cssProps"> <el-form> - <el-row> - <div class="wrapper--forms"> - <el-col v-for="(form, index) in forms" :key="index" :span="form.span" v-bind="form" class="form__group"> - <!-- <label class="form__label" v-model="form.label" v-show="form.hasOwnProperty('label')">{{ form.label }}</label> --> - <component :is="form.fieldType" :currentField="form" class="form__field"> - </component> - <!-- <small class="form__helpblock" v-model="form.helpBlockText" v-show="form.isHelpBlockVisible"> - {{ form.helpBlockText }} - </small> --> - </el-col> - </div> - </el-row> + <template v-for="(eachFormObj, eachFormIndex) in forms"> + <el-divider :key="`divider-${eachFormIndex}`">{{ eachFormObj.title }}</el-divider> + <el-row :key="`row-${eachFormIndex}`"> + <div class="wrapper--forms"> + <el-col v-for="(field, index) in eachFormObj.fields" :key="index" :span="field.span" v-bind="field" class="form__group"> + <!-- <label class="form__label" v-model="form.label" v-show="form.hasOwnProperty('label')">{{ form.label }}</label> --> + <component :is="field.fieldType" :currentField="field" class="form__field"> + </component> + <!-- <small class="form__helpblock" v-model="form.helpBlockText" v-show="form.isHelpBlockVisible"> + {{ form.helpBlockText }} + </small> --> + </el-col> + </div> + </el-row> + </template> </el-form> </el-main> </el-container>