| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155 |
- <template>
- <el-form ref="form" :model="form" label-width="130px" v-if="form && form.type">
- <!-- Text component form items -->
- <text-form-items
- v-if="form.type === 'h5-text'"
- :config="form"
- @update:config="updateFormConfig"
- />
- <!-- Image component form items -->
- <image-form-items
- v-if="form.type === 'h5-image'"
- :config="form"
- />
- <!-- Sep component form items -->
- <sep-form-items
- v-if="form.type === 'h5-sep'"
- :config="form"
- />
- <!-- Countdown component form items -->
- <countdown-form-items
- v-if="form.type === 'h5-countdown'"
- :config="form"
- @update:config="updateFormConfig"
- />
- <!-- Form component form items -->
- <form-form-items
- v-if="form.type === 'h5-form'"
- :config="form"
- @update:config="updateFormConfig"
- />
- <!-- Link Button component form items -->
- <link-button-form-items
- v-if="form.type === 'h5-link-button'"
- :config="form"
- @update:config="updateFormConfig"
- />
- <!-- Add Wechat Button component form items -->
- <add-wechat-button-form-items
- v-if="form.type === 'h5-add-wechat-button'"
- :config="form"
- @update:config="updateFormConfig"
- />
- <!-- Qrcode component form items -->
- <qrcode-form-items
- v-if="form.type === 'h5-qrcode'"
- :config="form"
- @update:config="updateFormConfig"
- />
- <chat-form-items
- v-if="form.type === 'h5-chat'"
- :config="form"
- @update:config="updateFormConfig"
- />
- <!-- Common form items for all components -->
- <common-form-items
- :config="form"
- :index="index"
- :list="list"
- @bottom-change="handleBottomChange"
- @update:config="updateFormConfig"
- />
- </el-form>
- </template>
- <script>
- import TextFormItems from './config-item/h5-text-config.vue';
- import ImageFormItems from './config-item/h5-image-config.vue';
- import SepFormItems from './config-item/h5-sep-config.vue';
- import CommonFormItems from './config-item/common-config.vue';
- import CountdownFormItems from './config-item/h5-countdown-config.vue';
- import FormFormItems from './config-item/h5-form-config.vue';
- import LinkButtonFormItems from './config-item/h5-link-button-config.vue';
- import AddWechatButtonFormItems from './config-item/h5-add-wechat-button-config.vue';
- import QrcodeFormItems from './config-item/h5-qrcode-config.vue';
- import ChatFormItems from './config-item/h5-chat-config.vue'
- export default {
- name: 'FormWrapper',
- components: {
- TextFormItems,
- ImageFormItems,
- SepFormItems,
- CommonFormItems,
- CountdownFormItems,
- FormFormItems,
- LinkButtonFormItems,
- AddWechatButtonFormItems,
- QrcodeFormItems,
- ChatFormItems
- },
- props: {
- form: {
- type: Object,
- default: () => ({})
- },
- index: {
- type: Number,
- default: -1
- },
- list: {
- type: Array,
- default: () => []
- }
- },
- methods: {
- updateFormConfig(newConfig) {
- console.log("更新表单配置...");
- // Update form config
- this.$emit('update:form', newConfig);
- },
- handleBottomChange() {
- // Check if another item is already fixed to bottom
- let hasFooter = this.list.some((item, idx) =>
- idx !== this.index && item.classText && item.classText.includes('footer')
- );
- if(hasFooter) {
- alert('全局只能允许有一个在底部!');
- this.form.fixe = false;
- return;
- }
- // Update the class
- let className = "footer";
- if (this.form.fixe) {
- this.addClassToItem(className);
- } else {
- this.removeClassFromItem(className);
- }
- },
- addClassToItem(className) {
- if (!this.form.classText.includes(className)) {
- this.form.classText.push(className);
- }
- },
- removeClassFromItem(className) {
- this.form.classText = this.form.classText.filter(cls => cls !== className);
- }
- }
- }
- </script>
- <style>
- .el-form-item__label{
- text-align: center !important;
- }
- </style>
|