Showing
6 changed files
with
42 additions
and
27 deletions
@@ -110,7 +110,7 @@ | @@ -110,7 +110,7 @@ | ||
110 | fill: none; | 110 | fill: none; |
111 | stroke: white; | 111 | stroke: white; |
112 | stroke-dasharray: 6% 29%; | 112 | stroke-dasharray: 6% 29%; |
113 | - stroke-width: 5px; | 113 | + stroke-width: 3px; |
114 | stroke-dashoffset: 0%; | 114 | stroke-dashoffset: 0%; |
115 | animation: stroke-offset 5.5s infinite linear; | 115 | animation: stroke-offset 5.5s infinite linear; |
116 | } | 116 | } |
@@ -53,9 +53,9 @@ const getTitle = computed(() => { | @@ -53,9 +53,9 @@ const getTitle = computed(() => { | ||
53 | </p> | 53 | </p> |
54 | </div> | 54 | </div> |
55 | </template> | 55 | </template> |
56 | - <span :class="prefixCls"> | 56 | + <span :class="prefixCls" class="flex items-center"> |
57 | <component :is="slot as RendererElement" v-if="slots?.default" /> | 57 | <component :is="slot as RendererElement" v-if="slots?.default" /> |
58 | - <Icon v-if="!slots?.default" icon="ph:question" class="svg:text-base" /> | 58 | + <Icon v-if="!slots?.default" icon="ph:question" class="cursor-pointer text-base" /> |
59 | </span> | 59 | </span> |
60 | </Tooltip> | 60 | </Tooltip> |
61 | </template> | 61 | </template> |
@@ -253,7 +253,7 @@ export default defineComponent({ | @@ -253,7 +253,7 @@ export default defineComponent({ | ||
253 | return renderLabel | 253 | return renderLabel |
254 | 254 | ||
255 | return ( | 255 | return ( |
256 | - <span> | 256 | + <span class='flex items-center'> |
257 | {renderLabel} | 257 | {renderLabel} |
258 | <BasicHelp placement="top" class="mx-1" text={getHelpMessage} {...helpComponentProps} /> | 258 | <BasicHelp placement="top" class="mx-1" text={getHelpMessage} {...helpComponentProps} /> |
259 | </span> | 259 | </span> |
@@ -28,7 +28,6 @@ const [registerForm, formActionType] = useForm({ | @@ -28,7 +28,6 @@ const [registerForm, formActionType] = useForm({ | ||
28 | schemas: formSchemas, | 28 | schemas: formSchemas, |
29 | showActionButtonGroup: false, | 29 | showActionButtonGroup: false, |
30 | layout: FormLayoutEnum.VERTICAL, | 30 | layout: FormLayoutEnum.VERTICAL, |
31 | - labelWidth: 70, | ||
32 | getPopupContainer: () => document.body, | 31 | getPopupContainer: () => document.body, |
33 | fieldMapToTime: [[AlarmListFieldsEnum.ALARM_LIST_QUERY_DATE, [AlarmListFieldsEnum.START_TIME, AlarmListFieldsEnum.END_TIME], DateFormatEnum.X]], | 32 | fieldMapToTime: [[AlarmListFieldsEnum.ALARM_LIST_QUERY_DATE, [AlarmListFieldsEnum.START_TIME, AlarmListFieldsEnum.END_TIME], DateFormatEnum.X]], |
34 | }) | 33 | }) |
@@ -82,7 +81,7 @@ onMounted(async () => { | @@ -82,7 +81,7 @@ onMounted(async () => { | ||
82 | </script> | 81 | </script> |
83 | 82 | ||
84 | <template> | 83 | <template> |
85 | - <div class="m-1 w-full"> | 84 | + <div class="m-1 w-full alarm-list-config-from"> |
86 | <Divider orientation="left" class="!text-sm"> | 85 | <Divider orientation="left" class="!text-sm"> |
87 | 数据绑定 | 86 | 数据绑定 |
88 | </Divider> | 87 | </Divider> |
@@ -95,6 +94,14 @@ onMounted(async () => { | @@ -95,6 +94,14 @@ onMounted(async () => { | ||
95 | </div> | 94 | </div> |
96 | </template> | 95 | </template> |
97 | 96 | ||
98 | -<style> | ||
99 | - | 97 | +<style lang="less" scoped> |
98 | +// .alarm-list-config-form { | ||
99 | +// :deep(.ant-picker-input.ant-picker-input-active) { | ||
100 | +// >input { | ||
101 | +// overflow: hidden; | ||
102 | +// text-overflow: ellipsis; | ||
103 | +// white-space: nowrap; | ||
104 | +// } | ||
105 | +// } | ||
106 | +// } | ||
100 | </style> | 107 | </style> |
@@ -133,6 +133,14 @@ export const formSchemas: FormSchema[] = [ | @@ -133,6 +133,14 @@ export const formSchemas: FormSchema[] = [ | ||
133 | label: AlarmListFieldsNameEnum.ALARM_LIST_INTERVAL, | 133 | label: AlarmListFieldsNameEnum.ALARM_LIST_INTERVAL, |
134 | component: ComponentEnum.INPUT_NUMBER, | 134 | component: ComponentEnum.INPUT_NUMBER, |
135 | required: false, | 135 | required: false, |
136 | + componentProps: { | ||
137 | + min: 0, | ||
138 | + }, | ||
139 | + renderComponentContent: () => { | ||
140 | + return { | ||
141 | + addonAfter: () => '秒', | ||
142 | + } | ||
143 | + }, | ||
136 | }, | 144 | }, |
137 | { | 145 | { |
138 | field: AlarmListFieldsEnum.ALARM_LIST_POLLING, | 146 | field: AlarmListFieldsEnum.ALARM_LIST_POLLING, |
@@ -140,5 +148,13 @@ export const formSchemas: FormSchema[] = [ | @@ -140,5 +148,13 @@ export const formSchemas: FormSchema[] = [ | ||
140 | component: ComponentEnum.INPUT_NUMBER, | 148 | component: ComponentEnum.INPUT_NUMBER, |
141 | defaultValue: 30, | 149 | defaultValue: 30, |
142 | required: false, | 150 | required: false, |
151 | + componentProps: { | ||
152 | + min: 1, | ||
153 | + }, | ||
154 | + renderComponentContent: () => { | ||
155 | + return { | ||
156 | + addonAfter: () => '秒', | ||
157 | + } | ||
158 | + }, | ||
143 | }, | 159 | }, |
144 | ] | 160 | ] |
1 | <script setup lang="ts"> | 1 | <script setup lang="ts"> |
2 | import { computed, nextTick, onMounted, reactive, unref } from 'vue' | 2 | import { computed, nextTick, onMounted, reactive, unref } from 'vue' |
3 | -import { Divider, Tag } from 'ant-design-vue' | 3 | +import { Tag } from 'ant-design-vue' |
4 | +import { useIntervalFn } from '@vueuse/core' | ||
4 | import { ScrollList } from './ScrollList' | 5 | import { ScrollList } from './ScrollList' |
5 | import { fetchAlarmList } from '@/api/alarm' | 6 | import { fetchAlarmList } from '@/api/alarm' |
6 | import type { AlarmListItemType } from '@/api/alarm/model' | 7 | import type { AlarmListItemType } from '@/api/alarm/model' |
@@ -14,10 +15,6 @@ const props = defineProps<{ | @@ -14,10 +15,6 @@ const props = defineProps<{ | ||
14 | config: CreateComponentType | 15 | config: CreateComponentType |
15 | }>() | 16 | }>() |
16 | 17 | ||
17 | -const getCellBounds = computed( | ||
18 | - () => props.config.cellBounds || { width: 290, height: 230, x: 0, y: 0 }, | ||
19 | -) | ||
20 | - | ||
21 | const contentDataStore = useContentDataStore() | 18 | const contentDataStore = useContentDataStore() |
22 | 19 | ||
23 | const initOptions = reactive<{ | 20 | const initOptions = reactive<{ |
@@ -67,7 +64,7 @@ onMounted(async () => { | @@ -67,7 +64,7 @@ onMounted(async () => { | ||
67 | // 预览模式 | 64 | // 预览模式 |
68 | await initFetchAlarmList() | 65 | await initFetchAlarmList() |
69 | if (initOptions.polling) | 66 | if (initOptions.polling) |
70 | - setInterval(initFetchAlarmList, initOptions.polling * 1000) | 67 | + useIntervalFn(initFetchAlarmList, (initOptions.polling || 30) * 1000) |
71 | } | 68 | } |
72 | else { | 69 | else { |
73 | const statusList = Object.values(AlarmStatusEnum) | 70 | const statusList = Object.values(AlarmStatusEnum) |
@@ -90,16 +87,13 @@ onMounted(async () => { | @@ -90,16 +87,13 @@ onMounted(async () => { | ||
90 | <div class="seamless-scroll w-full h-full flex justify-center items-center overflow-y-scroll"> | 87 | <div class="seamless-scroll w-full h-full flex justify-center items-center overflow-y-scroll"> |
91 | <ScrollList | 88 | <ScrollList |
92 | v-model="initOptions.scroll" :single-wait-time="initOptions.interval" :list="initOptions.alarmList" | 89 | v-model="initOptions.scroll" :single-wait-time="initOptions.interval" :list="initOptions.alarmList" |
93 | - :limit-scroll-num="10" :is-rem-unit="true" :delay="10" :wheel="true" hover :style="{ | ||
94 | - width: `${getCellBounds.width}px`, | ||
95 | - height: `${getCellBounds.height}px`, | ||
96 | - }" | 90 | + :is-rem-unit="true" :delay="10" :wheel="true" hover |
97 | > | 91 | > |
98 | - <div v-for="(item, index) in initOptions.alarmList" :key="index" class="flex flex-col items-start h-15 px-2"> | ||
99 | - <p class="text-xs"> | 92 | + <div v-for="(item, index) in initOptions.alarmList" :key="index" class="flex flex-col items-start p-2 border-gray-600 border-b border-solid border-t-transparent border-l-transparent border-r-transparent"> |
93 | + <div class="text-xs mb-2"> | ||
100 | <span>设备:</span> | 94 | <span>设备:</span> |
101 | <span class="ml-1">{{ item.deviceAlias || item.deviceName }}</span> | 95 | <span class="ml-1">{{ item.deviceAlias || item.deviceName }}</span> |
102 | - </p> | 96 | + </div> |
103 | <div class="flex items-center justify-between -mt-2 text-xs"> | 97 | <div class="flex items-center justify-between -mt-2 text-xs"> |
104 | <span>时间:</span> | 98 | <span>时间:</span> |
105 | <span class="ml-1">{{ item.startTs }}</span> | 99 | <span class="ml-1">{{ item.startTs }}</span> |
@@ -107,19 +101,17 @@ onMounted(async () => { | @@ -107,19 +101,17 @@ onMounted(async () => { | ||
107 | {{ AlarmStatusNameEnum[item.status] }} | 101 | {{ AlarmStatusNameEnum[item.status] }} |
108 | </Tag> | 102 | </Tag> |
109 | </div> | 103 | </div> |
110 | - <Divider class="mt-2 divider" /> | ||
111 | </div> | 104 | </div> |
112 | </ScrollList> | 105 | </ScrollList> |
113 | </div> | 106 | </div> |
114 | </template> | 107 | </template> |
115 | 108 | ||
116 | <style scoped lang="less"> | 109 | <style scoped lang="less"> |
117 | -.seamless-scroll::-webkit-scrollbar { | ||
118 | - display: none; | 110 | +.seamless-scroll { |
111 | + | ||
112 | + ::-webkit-scrollbar { | ||
113 | + display: none; | ||
119 | 114 | ||
120 | - .divider { | ||
121 | - height: 0.3px; | ||
122 | - background-color: black; | ||
123 | } | 115 | } |
124 | } | 116 | } |
125 | </style> | 117 | </style> |