CusFormItem.vue 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. <template>
  2. <FormItem :label="item.type !== 'divider' ? item.label : ''" :name="item.prop" :rules="item.rules">
  3. <template v-if="item.type === 'divider'">
  4. <Divider style="margin: 0">{{ item.label }}</Divider>
  5. </template>
  6. <template v-else-if="item.type === 'input'">
  7. <Input v-model:value="model" v-bind="item?.fieldProps"/>
  8. </template>
  9. <template v-else-if="item.type === 'select'">
  10. <Select v-model:value="model" v-bind="item?.fieldProps"></Select>
  11. </template>
  12. <template v-else-if="item.type === 'inputNumber'">
  13. <InputNumber v-model:value="model" v-bind="item?.fieldProps" style="width: 100%"/>
  14. </template>
  15. <template v-else-if="item.type === 'image'">
  16. <Image v-model:value="model" v-bind="item?.fieldProps"/>
  17. </template>
  18. <template v-else-if="item.type === 'checkboxGroup'">
  19. <CheckboxGroup v-model:value="model" v-bind="item?.fieldProps">
  20. </CheckboxGroup>
  21. </template>
  22. <template v-else-if="item.type === 'backgroundSelect'">
  23. <BackgroundSelect v-model:background="model" v-bind="item?.fieldProps"/>
  24. </template>
  25. <template v-else-if="item.type === 'colorSelect'">
  26. <ColorSelect v-model:value="model" v-bind="item?.fieldProps"/>
  27. </template>
  28. <template v-else-if="item.type === 'colorScheme'">
  29. <ColorScheme v-model:value="model" v-bind="item?.fieldProps"/>
  30. </template>
  31. <template v-else-if="item.type === 'radioGroup'">
  32. <RadioGroup v-model:value="model" size="small" v-bind="item?.fieldProps">
  33. </RadioGroup>
  34. </template>
  35. <template v-else-if="item.type === 'position'">
  36. <Position v-model:value="model" v-bind="item?.fieldProps"/>
  37. </template>
  38. <template v-else-if="item.type === 'fontStyle'">
  39. <FontStyle v-model:value="model" v-bind="item?.fieldProps"/>
  40. </template>
  41. <template v-else-if="item.type === 'slider'">
  42. <FormItemRest>
  43. <CusSlider v-model:value="model" v-bind="item?.fieldProps"/>
  44. </FormItemRest>
  45. </template>
  46. <!-- 提示 -->
  47. <template v-if="item.tip">
  48. <Tooltip :title="item.tip">
  49. <InfoCircleOutlined style="color: #666"/>
  50. </Tooltip>
  51. </template>
  52. </FormItem>
  53. </template>
  54. <script setup lang="ts">
  55. import { IFormItem } from "./type";
  56. import { defineProps, defineEmits, ref, watch } from "vue";
  57. import {
  58. FormItem,
  59. FormItemRest,
  60. Input,
  61. Select,
  62. InputNumber,
  63. CheckboxGroup,
  64. Image,
  65. Divider,
  66. RadioGroup,
  67. Tooltip
  68. } from "ant-design-vue";
  69. import { InfoCircleOutlined } from "@ant-design/icons-vue";
  70. import BackgroundSelect from "./BackgroundSelect.vue";
  71. import ColorSelect from "./ColorSelect.vue";
  72. import ColorScheme from "./ColorScheme.vue";
  73. import Position from "./Position.vue";
  74. import FontStyle from "./FontStyle.vue";
  75. import CusSlider from "./CusSlider.vue";
  76. const props = defineProps<{item: IFormItem, modelValue: any}>();
  77. const emit = defineEmits(["update:modelValue"]);
  78. const model = ref(props.modelValue);
  79. watch(
  80. () => model.value,
  81. () => {
  82. emit("update:modelValue", model.value);
  83. }
  84. )
  85. </script>
  86. <style lang="less" scoped>
  87. :deep(.ant-divider-inner-text ){
  88. font-size: 12px;
  89. color: #666;
  90. }
  91. </style>