property.vue 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. <template>
  2. <section class="title-bar">
  3. <el-form label-width="85px" :model="formData" :rules="rules">
  4. <el-form-item label="主标题" prop="title">
  5. <el-input
  6. v-model="formData.title"
  7. placeholder="请输入主标题"
  8. show-word-limit
  9. maxlength="20"
  10. />
  11. </el-form-item>
  12. <el-form-item label="副标题" prop="description">
  13. <el-input
  14. type="textarea"
  15. v-model="formData.description"
  16. placeholder="请输入副标题"
  17. maxlength="50"
  18. show-word-limit
  19. />
  20. </el-form-item>
  21. <el-form-item label="显示位置" prop="position">
  22. <el-radio-group v-model="formData!.position">
  23. <el-tooltip content="居左" placement="top">
  24. <el-radio-button label="left">
  25. <Icon icon="ant-design:align-left-outlined" />
  26. </el-radio-button>
  27. </el-tooltip>
  28. <el-tooltip content="居中" placement="top">
  29. <el-radio-button label="center">
  30. <Icon icon="ant-design:align-center-outlined" />
  31. </el-radio-button>
  32. </el-tooltip>
  33. </el-radio-group>
  34. </el-form-item>
  35. <el-form-item label="标题大小" prop="titleSize">
  36. <el-slider v-model="formData.titleSize" :max="60" :min="10" show-input input-size="small" />
  37. </el-form-item>
  38. <el-form-item label="副标题大小" prop="descriptionSize">
  39. <el-slider
  40. v-model="formData.descriptionSize"
  41. :max="60"
  42. :min="10"
  43. show-input
  44. input-size="small"
  45. />
  46. </el-form-item>
  47. <el-form-item label="标题粗细" prop="titleWeight">
  48. <el-slider
  49. v-model="formData.titleWeight"
  50. :min="100"
  51. :max="900"
  52. :step="100"
  53. show-input
  54. input-size="small"
  55. />
  56. </el-form-item>
  57. <el-form-item label="副标题粗细" prop="descriptionWeight">
  58. <el-slider
  59. v-model="formData.descriptionWeight"
  60. :min="100"
  61. :max="900"
  62. :step="100"
  63. show-input
  64. input-size="small"
  65. />
  66. </el-form-item>
  67. <el-form-item label="标题颜色" prop="titleColor">
  68. <ColorInput v-model="formData.titleColor" />
  69. </el-form-item>
  70. <el-form-item label="副标题颜色" prop="descriptionColor">
  71. <ColorInput v-model="formData.descriptionColor" />
  72. </el-form-item>
  73. <el-form-item label="背景颜色" prop="backgroundColor">
  74. <ColorInput v-model="formData.backgroundColor" />
  75. </el-form-item>
  76. <el-form-item label="底部分割线" prop="showBottomBorder">
  77. <el-switch v-model="formData!.showBottomBorder" />
  78. </el-form-item>
  79. <el-form-item label="查看更多" prop="more.show">
  80. <el-checkbox v-model="formData.more.show" />
  81. </el-form-item>
  82. <!-- 更多样式选择 -->
  83. <template v-if="formData.more.show">
  84. <el-form-item label="样式" prop="more.type">
  85. <el-radio-group v-model="formData.more.type">
  86. <el-radio label="text">文字</el-radio>
  87. <el-radio label="icon">图标</el-radio>
  88. <el-radio label="all">文字+图标</el-radio>
  89. </el-radio-group>
  90. </el-form-item>
  91. <el-form-item label="更多文字" prop="more.text" v-show="formData.more.type !== 'icon'">
  92. <el-input v-model="formData.more.text" />
  93. </el-form-item>
  94. <el-form-item label="跳转链接" prop="more.url">
  95. <el-input v-model="formData.more.url" placeholder="请输入跳转链接" />
  96. </el-form-item>
  97. </template>
  98. </el-form>
  99. </section>
  100. </template>
  101. <script setup lang="ts">
  102. import { TitleBarProperty } from './config'
  103. import { usePropertyForm } from '@/components/DiyEditor/util'
  104. // 导航栏属性面板
  105. defineOptions({ name: 'TitleBarProperty' })
  106. const props = defineProps<{ modelValue: TitleBarProperty }>()
  107. const emit = defineEmits(['update:modelValue'])
  108. const { formData } = usePropertyForm(props.modelValue, emit)
  109. // 表单校验
  110. const rules = {}
  111. </script>
  112. <style scoped lang="scss"></style>