StylesSetting.vue 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. <template>
  2. <div v-show="isGroup">
  3. <n-divider n-divider style="margin: 10px 0"></n-divider>
  4. <n-tag type="warning"> 解散分组「 {{ isCanvas ? '滤镜' : '滤镜 / 变换' }} 」也将消失!</n-tag>
  5. </div>
  6. <collapse-item :name="isCanvas ? '滤镜' : '滤镜 / 变换'">
  7. <template #header>
  8. <n-switch v-model:value="chartStyles.filterShow" size="small"></n-switch>
  9. </template>
  10. <setting-item-box name="色相" :alone="true">
  11. <setting-item :name="`值:${chartStyles.hueRotate}deg`">
  12. <!-- 透明度 -->
  13. <n-slider
  14. v-model:value="chartStyles.hueRotate"
  15. :step="3"
  16. :min="0"
  17. :max="360"
  18. :format-tooltip="degFormatTooltip"
  19. ></n-slider>
  20. </setting-item>
  21. </setting-item-box>
  22. <setting-item-box name="饱和度" :alone="true">
  23. <setting-item :name="`值:${(parseFloat(String(chartStyles.saturate)) * 100).toFixed(0)}%`">
  24. <!-- 透明度 -->
  25. <n-slider
  26. v-model:value="chartStyles.saturate"
  27. :step="0.1"
  28. :min="0"
  29. :max="2"
  30. :format-tooltip="sliderFormatTooltip"
  31. ></n-slider>
  32. </setting-item>
  33. </setting-item-box>
  34. <setting-item-box name="对比度" :alone="true">
  35. <setting-item :name="`值:${(parseFloat(String(chartStyles.contrast)) * 100).toFixed(0)}%`">
  36. <!-- 透明度 -->
  37. <n-slider
  38. v-model:value="chartStyles.contrast"
  39. :step="0.1"
  40. :min="0"
  41. :max="2"
  42. :format-tooltip="sliderFormatTooltip"
  43. ></n-slider>
  44. </setting-item>
  45. </setting-item-box>
  46. <setting-item-box name="亮度" :alone="true">
  47. <setting-item :name="`值:${(parseFloat(String(chartStyles.brightness)) * 100).toFixed(0)}%`">
  48. <!-- 透明度 -->
  49. <n-slider
  50. v-model:value="chartStyles.brightness"
  51. :step="0.1"
  52. :min="0"
  53. :max="2"
  54. :format-tooltip="sliderFormatTooltip"
  55. ></n-slider>
  56. </setting-item>
  57. </setting-item-box>
  58. <setting-item-box name="透明度" :alone="true">
  59. <setting-item :name="`值:${(parseFloat(String(chartStyles.opacity)) * 100).toFixed(0)}%`">
  60. <!-- 透明度 -->
  61. <n-slider
  62. v-model:value="chartStyles.opacity"
  63. :step="0.1"
  64. :min="0"
  65. :max="1"
  66. :format-tooltip="sliderFormatTooltip"
  67. ></n-slider>
  68. </setting-item>
  69. </setting-item-box>
  70. <!-- 混合模式 -->
  71. <setting-item-box v-if="!isCanvas" name="混合模式" :alone="true">
  72. <setting-item name="视频组件需要底色透明一般选中滤色">
  73. <n-select size="small" v-model:value="chartStyles.blendMode" :options="BlendModeEnumList"></n-select>
  74. </setting-item>
  75. </setting-item-box>
  76. <!-- 变换 -->
  77. <setting-item-box v-if="!isCanvas" name="旋转°">
  78. <setting-item name="Z轴(平面) - 旋转">
  79. <!-- 透明度 -->
  80. <n-input-number
  81. v-model:value="chartStyles.rotateZ"
  82. :min="0"
  83. :max="360"
  84. size="small"
  85. placeholder="角度"
  86. ></n-input-number>
  87. </setting-item>
  88. <setting-item name="X轴 - 旋转">
  89. <!-- 透明度 -->
  90. <n-input-number
  91. v-model:value="chartStyles.rotateX"
  92. :min="0"
  93. :max="360"
  94. size="small"
  95. placeholder="角度"
  96. ></n-input-number>
  97. </setting-item>
  98. <setting-item name="Y轴 - 旋转">
  99. <!-- 透明度 -->
  100. <n-input-number
  101. v-model:value="chartStyles.rotateY"
  102. :min="0"
  103. :max="360"
  104. size="small"
  105. placeholder="角度"
  106. ></n-input-number>
  107. </setting-item>
  108. </setting-item-box>
  109. <!-- 倾斜 -->
  110. <setting-item-box v-if="!isCanvas" name="倾斜°">
  111. <setting-item name="X轴 - 倾斜">
  112. <n-input-number
  113. v-model:value="chartStyles.skewX"
  114. :min="0"
  115. :max="360"
  116. size="small"
  117. placeholder="角度"
  118. ></n-input-number>
  119. </setting-item>
  120. <setting-item name="Y轴 - 倾斜">
  121. <n-input-number
  122. v-model:value="chartStyles.skewY"
  123. :min="0"
  124. :max="360"
  125. size="small"
  126. placeholder="角度"
  127. ></n-input-number>
  128. </setting-item>
  129. </setting-item-box>
  130. <!-- 提示 -->
  131. <n-tag type="warning"> 若预览时大屏模糊,可以尝试关闭滤镜进行修复 </n-tag>
  132. </collapse-item>
  133. </template>
  134. <script setup lang="ts">
  135. import { PropType } from 'vue'
  136. import { PickCreateComponentType, BlendModeEnumList } from '@/packages/index.d'
  137. import { SettingItemBox, SettingItem, CollapseItem } from '@/components/Pages/ChartItemSetting'
  138. const props = defineProps({
  139. isGroup: {
  140. type: Boolean,
  141. required: false
  142. },
  143. isCanvas: {
  144. type: Boolean,
  145. default: false
  146. },
  147. chartStyles: {
  148. type: Object as PropType<Omit<PickCreateComponentType<'styles'>, 'animations'>>,
  149. required: true
  150. }
  151. })
  152. // 百分比格式化 person
  153. const sliderFormatTooltip = (v: string) => {
  154. return `${(parseFloat(v) * 100).toFixed(0)}%`
  155. }
  156. // 角度格式化
  157. const degFormatTooltip = (v: string) => {
  158. return `${v}deg`
  159. }
  160. </script>
  161. <style lang="scss" scoped></style>