Showing
5 changed files
with
86 additions
and
11 deletions
| ... | ... | @@ -8,6 +8,7 @@ |
| 8 | 8 | import { UpdateTime } from '/@/views/visual/commonComponents/UpdateTime'; |
| 9 | 9 | import { useDataFetch } from '../../../hook/socket/useSocket'; |
| 10 | 10 | import { DataFetchUpdateFn } from '../../../hook/socket/useSocket.type'; |
| 11 | + import { useComponentScale } from '../../../hook/useComponentScale'; | |
| 11 | 12 | |
| 12 | 13 | const props = defineProps<{ |
| 13 | 14 | config: ComponentPropsConfigType<typeof option>; |
| ... | ... | @@ -91,6 +92,8 @@ |
| 91 | 92 | }; |
| 92 | 93 | |
| 93 | 94 | useDataFetch(props, updateFn); |
| 95 | + | |
| 96 | + const { getRatio } = useComponentScale(props); | |
| 94 | 97 | </script> |
| 95 | 98 | |
| 96 | 99 | <template> |
| ... | ... | @@ -134,15 +137,21 @@ |
| 134 | 137 | |
| 135 | 138 | <div |
| 136 | 139 | class="absolute w-full h-full top-0 left-0 text-center text-lg flex items-center justify-center" |
| 137 | - :style="{ color: getDesign.fontColor, fontSize: getDesign.valueSize + 'px' }" | |
| 140 | + :style="{ | |
| 141 | + color: getDesign.fontColor, | |
| 142 | + fontSize: (getRatio ? getRatio * getDesign.valueSize : getDesign.valueSize) + 'px', | |
| 143 | + }" | |
| 138 | 144 | > |
| 139 | 145 | <div>{{ currentValue }}</div> |
| 140 | 146 | <div class="ml-1">{{ getDesign.unit }}</div> |
| 141 | 147 | </div> |
| 142 | 148 | <div |
| 143 | - class="text-gray-500 text-sm truncate" | |
| 149 | + class="text-gray-500" | |
| 144 | 150 | style="flex: 0 0 20px" |
| 145 | - :style="{ fontSize: getDesign.fontSize + 'px' }" | |
| 151 | + :style="{ | |
| 152 | + fontSize: (getRatio ? getRatio * getDesign.fontSize : getDesign.fontSize) + 'px', | |
| 153 | + height: (getRatio ? getRatio * getDesign.fontSize : getDesign.fontSize) + 'px', | |
| 154 | + }" | |
| 146 | 155 | >{{ getDesign.attribute || '属性' }}</div |
| 147 | 156 | > |
| 148 | 157 | <UpdateTime v-show="getDesign.showTime" :time="time" /> | ... | ... |
| ... | ... | @@ -8,6 +8,7 @@ |
| 8 | 8 | import { UpdateTime } from '/@/views/visual/commonComponents/UpdateTime'; |
| 9 | 9 | import { useDataFetch } from '../../../hook/socket/useSocket'; |
| 10 | 10 | import { DataFetchUpdateFn } from '../../../hook/socket/useSocket.type'; |
| 11 | + import { useComponentScale } from '../../../hook/useComponentScale'; | |
| 11 | 12 | |
| 12 | 13 | const props = defineProps<{ |
| 13 | 14 | config: ComponentPropsConfigType<typeof option>; |
| ... | ... | @@ -81,6 +82,8 @@ |
| 81 | 82 | }; |
| 82 | 83 | |
| 83 | 84 | useDataFetch(props, updateFn); |
| 85 | + | |
| 86 | + const { getRatio } = useComponentScale(props); | |
| 84 | 87 | </script> |
| 85 | 88 | |
| 86 | 89 | <template> |
| ... | ... | @@ -127,7 +130,10 @@ |
| 127 | 130 | </svg> |
| 128 | 131 | <div |
| 129 | 132 | class="absolute w-full h-full top-0 left-0 text-center text-lg flex items-center justify-center" |
| 130 | - :style="{ color: getDesign.fontColor, fontSize: getDesign.valueSize + 'px' }" | |
| 133 | + :style="{ | |
| 134 | + color: getDesign.fontColor, | |
| 135 | + fontSize: (getRatio ? getRatio * getDesign.valueSize : getDesign.valueSize) + 'px', | |
| 136 | + }" | |
| 131 | 137 | > |
| 132 | 138 | <div>{{ currentValue }}</div> |
| 133 | 139 | <div class="ml-1">{{ getDesign.unit }}</div> |
| ... | ... | @@ -135,7 +141,10 @@ |
| 135 | 141 | <div |
| 136 | 142 | class="text-gray-500" |
| 137 | 143 | style="flex: 0 0 20px" |
| 138 | - :style="{ fontSize: getDesign.fontSize + 'px', height: getDesign.fontSize + 'px' }" | |
| 144 | + :style="{ | |
| 145 | + fontSize: (getRatio ? getRatio * getDesign.fontSize : getDesign.fontSize) + 'px', | |
| 146 | + height: (getRatio ? getRatio * getDesign.fontSize : getDesign.fontSize) + 'px', | |
| 147 | + }" | |
| 139 | 148 | >{{ getDesign.attribute || '属性' }}</div |
| 140 | 149 | > |
| 141 | 150 | <UpdateTime v-show="getDesign.showTime" :time="time" /> | ... | ... |
| ... | ... | @@ -13,6 +13,8 @@ export const option: PublicPresetOptions = { |
| 13 | 13 | [ComponentConfigFieldEnum.FONT_COLOR]: '#', |
| 14 | 14 | [ComponentConfigFieldEnum.SHOW_DEVICE_NAME]: false, |
| 15 | 15 | [ComponentConfigFieldEnum.SHOW_TIME]: false, |
| 16 | + [ComponentConfigFieldEnum.FONT_SIZE]: 14, | |
| 17 | + [ComponentConfigFieldEnum.VALUE_SIZE]: 20, | |
| 16 | 18 | }; |
| 17 | 19 | |
| 18 | 20 | export default class Config extends PublicConfigClass implements CreateComponentType { | ... | ... |
| ... | ... | @@ -20,6 +20,45 @@ |
| 20 | 20 | component: 'Checkbox', |
| 21 | 21 | }, |
| 22 | 22 | { |
| 23 | + field: ComponentConfigFieldEnum.FONT_SIZE, | |
| 24 | + label: '文本字体大小', | |
| 25 | + component: 'InputNumber', | |
| 26 | + defaultValue: 14, | |
| 27 | + componentProps: { | |
| 28 | + min: 0, | |
| 29 | + max: 100, | |
| 30 | + formatter: (e) => { | |
| 31 | + const value = e.replace(/^0/g, ''); | |
| 32 | + if (value) { | |
| 33 | + return value.replace(/^0/g, ''); | |
| 34 | + } else { | |
| 35 | + return 0; | |
| 36 | + } | |
| 37 | + }, | |
| 38 | + }, | |
| 39 | + }, | |
| 40 | + { | |
| 41 | + field: ComponentConfigFieldEnum.MAX_NUMBER, | |
| 42 | + label: '最大值', | |
| 43 | + component: 'InputNumber', | |
| 44 | + defaultValue: 100, | |
| 45 | + componentProps: ({ formActionType }) => { | |
| 46 | + const { setFieldsValue } = formActionType; | |
| 47 | + return { | |
| 48 | + placeholder: '请输入最大值', | |
| 49 | + min: 100, | |
| 50 | + onChange: async (e) => { | |
| 51 | + if (!e) { | |
| 52 | + await nextTick(); | |
| 53 | + setFieldsValue({ | |
| 54 | + [ComponentConfigFieldEnum.MAX_NUMBER]: 100, | |
| 55 | + }); | |
| 56 | + } | |
| 57 | + }, | |
| 58 | + }; | |
| 59 | + }, | |
| 60 | + }, | |
| 61 | + { | |
| 23 | 62 | field: ComponentConfigFieldEnum.SHOW_TIME, |
| 24 | 63 | label: '显示时间', |
| 25 | 64 | component: 'Checkbox', | ... | ... |
| ... | ... | @@ -8,6 +8,7 @@ |
| 8 | 8 | import { UpdateTime } from '/@/views/visual/commonComponents/UpdateTime'; |
| 9 | 9 | import { useDataFetch } from '../../../hook/socket/useSocket'; |
| 10 | 10 | import { DataFetchUpdateFn } from '../../../hook/socket/useSocket.type'; |
| 11 | + import { useComponentScale } from '../../../hook/useComponentScale'; | |
| 11 | 12 | |
| 12 | 13 | const props = defineProps<{ |
| 13 | 14 | config: ComponentPropsConfigType<typeof option>; |
| ... | ... | @@ -37,13 +38,20 @@ |
| 37 | 38 | |
| 38 | 39 | const getDesign = computed(() => { |
| 39 | 40 | const { persetOption, option } = props.config; |
| 40 | - const { fontColor: presetFontColor, showTime: persetShowTime } = persetOption || {}; | |
| 41 | + const { | |
| 42 | + fontColor: presetFontColor, | |
| 43 | + showTime: persetShowTime, | |
| 44 | + fontSize: persetFontSize, | |
| 45 | + valueSize: persetValueSize, | |
| 46 | + } = persetOption || {}; | |
| 41 | 47 | const { componentInfo, attribute, attributeName, attributeRename } = option || {}; |
| 42 | - const { fontColor, showTime } = componentInfo || {}; | |
| 48 | + const { fontColor, showTime, fontSize, valueSize } = componentInfo || {}; | |
| 43 | 49 | return { |
| 44 | 50 | fontColor: fontColor ?? presetFontColor, |
| 45 | 51 | attribute: attributeRename || attributeName || attribute, |
| 46 | 52 | showTime: showTime ?? persetShowTime, |
| 53 | + fontSize: fontSize || persetFontSize || 14, | |
| 54 | + valueSize: valueSize || persetValueSize || 20, | |
| 47 | 55 | }; |
| 48 | 56 | }); |
| 49 | 57 | |
| ... | ... | @@ -58,6 +66,8 @@ |
| 58 | 66 | }; |
| 59 | 67 | |
| 60 | 68 | useDataFetch(props, updateFn); |
| 69 | + | |
| 70 | + const { getRatio } = useComponentScale(props); | |
| 61 | 71 | </script> |
| 62 | 72 | |
| 63 | 73 | <template> |
| ... | ... | @@ -252,15 +262,21 @@ |
| 252 | 262 | <div class="absolute w-full h-full flex justify-center items-center bg-transparent"> |
| 253 | 263 | <div |
| 254 | 264 | class="transform translate-x-full text-lg text-gray-500" |
| 255 | - :style="{ color: getDesign.fontColor }" | |
| 265 | + :style="{ | |
| 266 | + color: getDesign.fontColor, | |
| 267 | + fontSize: (getRatio ? getRatio * getDesign.valueSize : getDesign.valueSize) + 'px', | |
| 268 | + }" | |
| 256 | 269 | > |
| 257 | 270 | <span>{{ currentValue }}</span> |
| 258 | 271 | <span>{{ '℃' }}</span> |
| 259 | 272 | </div> |
| 260 | 273 | </div> |
| 261 | - <div class="text-gray-500 text-sm truncate" style="flex: 0 0 20px">{{ | |
| 262 | - getDesign.attribute || '属性' | |
| 263 | - }}</div> | |
| 274 | + <div | |
| 275 | + class="text-gray-500" | |
| 276 | + style="flex: 0 0 20px" | |
| 277 | + :style="{ fontSize: (getRatio ? getRatio * getDesign.fontSize : getDesign.fontSize) + 'px' }" | |
| 278 | + >{{ getDesign.attribute || '属性' }}</div | |
| 279 | + > | |
| 264 | 280 | <UpdateTime v-show="getDesign.showTime" :time="time" /> |
| 265 | 281 | </main> |
| 266 | 282 | </template> | ... | ... |