vanField.vue 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. <template>
  2. <left-skeleton @save="save" @deleteFunc="deleteFunc">
  3. <el-form :model="form" v-if="defaultForm">
  4. <el-form-item label="组件名称">
  5. <el-input v-model="form.label" />
  6. </el-form-item>
  7. <el-form-item label="默认提示">
  8. <el-input v-model="form.placeholder" />
  9. </el-form-item>
  10. <el-form-item label="是否必填">
  11. <el-switch v-model="form.isRequired" />
  12. </el-form-item>
  13. <el-form-item label="参数key值">
  14. <el-input v-model="form.key" />
  15. </el-form-item>
  16. </el-form>
  17. <div v-else>
  18. <el-form :model="form">
  19. <el-form-item label="组件名称">
  20. <el-input v-model="form.label" />
  21. </el-form-item>
  22. <el-form-item label="是否必填">
  23. <el-switch v-model="form.isRequired" />
  24. </el-form-item>
  25. <el-form-item label="参数key值">
  26. <el-input v-model="form.key" />
  27. </el-form-item>
  28. </el-form>
  29. <component
  30. v-for="(item, index) in form.child_list"
  31. :key="index"
  32. :is="H5EditorObj[item.type]"
  33. :item="item"
  34. :index="index + ''"
  35. @change="seacechange"
  36. ></component>
  37. </div>
  38. </left-skeleton>
  39. </template>
  40. <script setup>
  41. import { defineProps, inject, ref } from 'vue';
  42. import leftSkeleton from '../H5Editor/leftSkeleton.vue';
  43. import vanRadioGroup from './van_radio_group';
  44. import vanUploader from './van_uploader';
  45. const H5EditorObj = {
  46. 'van-radio-group': vanRadioGroup,
  47. 'van-uploader': vanUploader,
  48. };
  49. const saveComponents = inject('saveComponents');
  50. const deleteItemComponents = inject('deleteItemComponents');
  51. const props = defineProps({
  52. item: Object,
  53. index: String,
  54. });
  55. const item = JSON.parse(JSON.stringify(props.item.item));
  56. const defaultForm = ref(false);
  57. const formSele = {};
  58. if (!item.child_list || !item.child_list.length) {
  59. defaultForm.value = true;
  60. formSele.label = item.attr.label;
  61. formSele.placeholder = item.attr.placeholder;
  62. formSele.isRequired = item.attr.isRequired;
  63. } else {
  64. defaultForm.value = false;
  65. formSele.child_list = item.child_list;
  66. formSele.label = item.attr.label;
  67. formSele.isRequired = item.attr.isRequired;
  68. }
  69. const form = ref(formSele);
  70. // 获取子组件内更新的数据
  71. const seacechange = (item, index) => {
  72. console.log(item, index, form.value.child_list);
  73. form.value.child_list[index] = item;
  74. };
  75. const save = () => {
  76. if (defaultForm.value) {
  77. item.attr.label = form.value.label;
  78. item.attr.placeholder = form.value.placeholder;
  79. item.attr.isRequired = form.value.isRequired;
  80. } else {
  81. item.child_list = form.value.child_list;
  82. item.attr.label = form.value.label;
  83. item.attr.isRequired = form.value.isRequired;
  84. }
  85. saveComponents({ item, index: props.index });
  86. };
  87. const deleteFunc = () => {
  88. /**
  89. * 1.删除本地
  90. * 2.删除远程
  91. */
  92. deleteItemComponents(props.index);
  93. };
  94. </script>
  95. <style scoped></style>