Commit cbea82d767bcf46256f60eb279233b73a41bd109
1 parent
fa48ff65
perf: camera manage add load faild message
Showing
1 changed file
with
30 additions
and
4 deletions
@@ -12,12 +12,15 @@ | @@ -12,12 +12,15 @@ | ||
12 | import { useDrawer } from '/@/components/Drawer'; | 12 | import { useDrawer } from '/@/components/Drawer'; |
13 | import { PageMode } from './config.data'; | 13 | import { PageMode } from './config.data'; |
14 | import SvgIcon from '/@/components/Icon/src/SvgIcon.vue'; | 14 | import SvgIcon from '/@/components/Icon/src/SvgIcon.vue'; |
15 | + import { isDef } from '/@/utils/is'; | ||
16 | + | ||
17 | + type CameraRecordItem = CameraRecord & { canPlay?: boolean }; | ||
15 | 18 | ||
16 | const emit = defineEmits(['switchMode']); | 19 | const emit = defineEmits(['switchMode']); |
17 | const organizationIdTreeRef = ref(null); | 20 | const organizationIdTreeRef = ref(null); |
18 | const videoContainer = ref<Nullable<HTMLDivElement>>(null); | 21 | const videoContainer = ref<Nullable<HTMLDivElement>>(null); |
19 | const activeKey = ref(PageMode.SPLIT_SCREEN_MODE); | 22 | const activeKey = ref(PageMode.SPLIT_SCREEN_MODE); |
20 | - const cameraList = ref<CameraRecord[]>([]); | 23 | + const cameraList = ref<CameraRecordItem[]>([]); |
21 | const organizationId = ref<Nullable<string>>(null); | 24 | const organizationId = ref<Nullable<string>>(null); |
22 | const loading = ref(false); | 25 | const loading = ref(false); |
23 | const pagination = reactive({ | 26 | const pagination = reactive({ |
@@ -106,8 +109,18 @@ | @@ -106,8 +109,18 @@ | ||
106 | } | 109 | } |
107 | }; | 110 | }; |
108 | 111 | ||
109 | - const handleVideoError = (event) => { | ||
110 | - console.log('video happend error', event); | 112 | + const handleLoadStart = (record: CameraRecordItem) => { |
113 | + const index = unref(cameraList).findIndex((item) => item.id === record.id); | ||
114 | + setTimeout(() => { | ||
115 | + ~index && | ||
116 | + !unref(cameraList).at(index)!.canPlay && | ||
117 | + (unref(cameraList).at(index)!.canPlay = false); | ||
118 | + }, 10000); | ||
119 | + }; | ||
120 | + | ||
121 | + const handleLoadData = (record: CameraRecordItem) => { | ||
122 | + const index = unref(cameraList).findIndex((item) => item.id === record.id); | ||
123 | + ~index && (unref(cameraList).at(index)!.canPlay = true); | ||
111 | }; | 124 | }; |
112 | 125 | ||
113 | const [registerDrawer, { openDrawer }] = useDrawer(); | 126 | const [registerDrawer, { openDrawer }] = useDrawer(); |
@@ -192,12 +205,19 @@ | @@ -192,12 +205,19 @@ | ||
192 | <div class="box-border w-full h-full p-3"> | 205 | <div class="box-border w-full h-full p-3"> |
193 | <div class="bg-yellow-50 w-full h-full overflow-hidden relative video-container"> | 206 | <div class="bg-yellow-50 w-full h-full overflow-hidden relative video-container"> |
194 | <VideoPlay | 207 | <VideoPlay |
195 | - @error="handleVideoError" | 208 | + @loadstart="handleLoadStart(item)" |
209 | + @loadeddata="handleLoadData(item)" | ||
196 | v-bind="options" | 210 | v-bind="options" |
197 | :src="item.videoUrl" | 211 | :src="item.videoUrl" |
198 | :title="item.name" | 212 | :title="item.name" |
199 | /> | 213 | /> |
200 | <div | 214 | <div |
215 | + v-if="isDef(item.canPlay) && !item.canPlay" | ||
216 | + class="video-container-error-msk absolute top-0 left-0 text-lg w-full h-full text-light-50 flex justify-center items-center z-50 bg-black" | ||
217 | + > | ||
218 | + 视频加载出错了! | ||
219 | + </div> | ||
220 | + <div | ||
201 | class="video-container-mask absolute top-0 left-0 z-50 text-lg w-full text-light-50 flex justify-center items-center" | 221 | class="video-container-mask absolute top-0 left-0 z-50 text-lg w-full text-light-50 flex justify-center items-center" |
202 | style="height: 100%; background-color: rgba(0, 0, 0, 0.5)" | 222 | style="height: 100%; background-color: rgba(0, 0, 0, 0.5)" |
203 | > | 223 | > |
@@ -257,6 +277,12 @@ | @@ -257,6 +277,12 @@ | ||
257 | .video-container-mask { | 277 | .video-container-mask { |
258 | opacity: 1; | 278 | opacity: 1; |
259 | } | 279 | } |
280 | + | ||
281 | + .video-container-error-msk { | ||
282 | + // opacity: 0; | ||
283 | + // visibility: hidden; | ||
284 | + color: #000; | ||
285 | + } | ||
260 | } | 286 | } |
261 | } | 287 | } |
262 | </style> | 288 | </style> |