Commit c44a27b8896b68ea494e014034af3d545add8d01
Merge branch 'fix/video-component' into 'main_dev'
fix: 视频组件视频流为必选&&视频新增loading加载 See merge request yunteng/thingskit-scada!222
Showing
2 changed files
with
63 additions
and
51 deletions
... | ... | @@ -66,9 +66,13 @@ const [register, { getFieldsValue, validate, setFieldsValue }] = useForm({ |
66 | 66 | field: VideoFormFieldsEnum.VIDEO_ID, |
67 | 67 | label: VideoFormFieldsNameEnum.VIDEO_ID, |
68 | 68 | component: ComponentEnum.API_SELECT, |
69 | + required: true, | |
69 | 70 | componentProps: ({ formModel }) => { |
70 | 71 | return { |
71 | - api: getCameraList, | |
72 | + api: async (params: Record<'organizationId', string>) => { | |
73 | + if (!params.organizationId) return [] | |
74 | + return await getCameraList(params) | |
75 | + }, | |
72 | 76 | params: { |
73 | 77 | organizationId: formModel[ContentDataFieldsEnum.ORG_ID], |
74 | 78 | }, |
... | ... | @@ -167,9 +171,10 @@ createPublicFormContext(nodeDataActinType) |
167 | 171 | |
168 | 172 | <style lang="less" scoped> |
169 | 173 | .form-container { |
174 | + @apply text-sm; | |
175 | + | |
176 | + :deep(.ant-divider) { | |
170 | 177 | @apply text-sm; |
171 | - :deep(.ant-divider) { | |
172 | - @apply text-sm; | |
173 | - } | |
174 | 178 | } |
179 | +} | |
175 | 180 | </style> | ... | ... |
1 | 1 | <script setup lang="ts"> |
2 | +import { Spin } from 'ant-design-vue' | |
2 | 3 | import { computed, nextTick, onMounted, onUnmounted, ref, toRaw, unref } from 'vue' |
3 | 4 | import 'video.js/dist/video-js.css' |
4 | 5 | |
... | ... | @@ -21,6 +22,7 @@ const props = defineProps<{ |
21 | 22 | // 获取节点数据 |
22 | 23 | const contentDataStore = useContentDataStore() |
23 | 24 | const { getResult } = useFingerprint() |
25 | +const loading = ref(false) | |
24 | 26 | |
25 | 27 | const getOptions = computed<VideoJsPlayerOptions>(() => { |
26 | 28 | const { config } = props || {} |
... | ... | @@ -47,53 +49,58 @@ const playSource = ref<Record<'src' | 'type', string>>( |
47 | 49 | |
48 | 50 | // 数据绑定获取的url |
49 | 51 | const handleGetVideoPlay = async () => { |
50 | - const { dataSourceJson } = unref(videoConfig)[0] || {} | |
51 | - const { videoOption } = dataSourceJson || {} | |
52 | - const { id, accessMode, videoUrl, deviceId, channelId } = videoOption || {} | |
53 | - let type = getVideoTypeByUrl(videoUrl!) | |
54 | - let playUrl = videoUrl | |
55 | - | |
56 | - // 判断是否是流媒体播放 | |
57 | - if (accessMode === VideoAccessModeEnum.Streaming && id) { | |
58 | - const { data: { url } = { url: '' } } = await getStreamingPlayUrl(id!) | |
59 | - playUrl = url | |
60 | - playUrl && (type = getVideoTypeByUrl(playUrl!)) | |
61 | - } | |
62 | - else if (accessMode === VideoAccessModeEnum.GBT28181 && deviceId && channelId) { | |
63 | - const { | |
64 | - data: { flv }, | |
65 | - } = await getVideoControlStart({ channelId, deviceId }) | |
52 | + try { | |
53 | + loading.value = true | |
54 | + const { dataSourceJson } = unref(videoConfig)[0] || {} | |
55 | + const { videoOption } = dataSourceJson || {} | |
56 | + const { id, accessMode, videoUrl, deviceId, channelId } = videoOption || {} | |
57 | + let type = getVideoTypeByUrl(videoUrl!) | |
58 | + let playUrl = videoUrl | |
59 | + // 判断是否是流媒体播放 | |
60 | + if (accessMode === VideoAccessModeEnum.Streaming && id) { | |
61 | + const { data: { url } = { url: '' } } = await getStreamingPlayUrl(id!) | |
62 | + playUrl = url | |
63 | + playUrl && (type = getVideoTypeByUrl(playUrl!)) | |
64 | + } | |
65 | + else if (accessMode === VideoAccessModeEnum.GBT28181 && deviceId && channelId) { | |
66 | + const { | |
67 | + data: { flv }, | |
68 | + } = await getVideoControlStart({ channelId, deviceId }) | |
66 | 69 | |
67 | - playUrl = flv | |
68 | - type = VideoPlayerType.flv | |
69 | - } | |
70 | + playUrl = flv | |
71 | + type = VideoPlayerType.flv | |
72 | + } | |
70 | 73 | |
71 | - // 判断是否是rtsp播放 | |
72 | - if (isRtspProtocol(videoUrl!)) { | |
73 | - const result = await getResult() | |
74 | - const { visitorId } = result | |
75 | - playUrl = getFlvPlayUrl(playUrl!, visitorId) | |
76 | - withToken.value = true | |
77 | - } | |
74 | + // 判断是否是rtsp播放 | |
75 | + if (isRtspProtocol(videoUrl!)) { | |
76 | + const result = await getResult() | |
77 | + const { visitorId } = result | |
78 | + playUrl = getFlvPlayUrl(playUrl!, visitorId) | |
79 | + withToken.value = true | |
80 | + } | |
78 | 81 | |
79 | - playSource.value = { | |
80 | - src: playUrl!, | |
81 | - type, | |
82 | - } | |
82 | + playSource.value = { | |
83 | + src: playUrl!, | |
84 | + type, | |
85 | + } | |
83 | 86 | |
84 | - const instance = unref(basicVideoPlayEl)?.customInit((options) => { | |
85 | - if (unref(withToken)) { | |
86 | - (options as any).flvjs.config.headers = { | |
87 | - 'X-Authorization': `Bearer ${isShareMode() ? getShareJwtToken() : getJwtToken()}`, | |
87 | + const instance = unref(basicVideoPlayEl)?.customInit((options) => { | |
88 | + if (unref(withToken)) { | |
89 | + (options as any).flvjs.config.headers = { | |
90 | + 'X-Authorization': `Bearer ${isShareMode() ? getShareJwtToken() : getJwtToken()}`, | |
91 | + } | |
88 | 92 | } |
89 | - } | |
90 | - return { | |
91 | - ...options, | |
92 | - sources: [toRaw(unref(playSource))], | |
93 | - } as VideoJsPlayerOptions | |
94 | - }) | |
93 | + return { | |
94 | + ...options, | |
95 | + sources: [toRaw(unref(playSource))], | |
96 | + } as VideoJsPlayerOptions | |
97 | + }) | |
95 | 98 | |
96 | - instance?.play() | |
99 | + instance?.play() | |
100 | + } | |
101 | + finally { | |
102 | + loading.value = false | |
103 | + } | |
97 | 104 | } |
98 | 105 | |
99 | 106 | // 默认播放 |
... | ... | @@ -135,12 +142,12 @@ onUnmounted(async () => { |
135 | 142 | |
136 | 143 | <template> |
137 | 144 | <div class="w-full h-full flex justify-center items-center"> |
138 | - <!-- <Spin :spinning="loading" wrapper-class-name="video-spin" class="w-full h-full"> --> | |
139 | - <BasicVideoPlay | |
140 | - ref="basicVideoPlayEl" :options="getOptions" :with-token="withToken" | |
141 | - :immediate-init-on-mounted="false" | |
142 | - /> | |
143 | - <!-- </Spin> --> | |
145 | + <Spin :spinning="loading"> | |
146 | + <BasicVideoPlay | |
147 | + ref="basicVideoPlayEl" :options="getOptions" :with-token="withToken" | |
148 | + :immediate-init-on-mounted="false" | |
149 | + /> | |
150 | + </Spin> | |
144 | 151 | </div> |
145 | 152 | </template> |
146 | 153 | ... | ... |