Commit 760dd9a89e6044220bfce2087f3fc3d3e5f6d234
Merge branch 'ft' into 'main_dev'
perf(external/Componse): 修复摄像头更改源地址无法切换播放问题合并ww代码 See merge request yunteng/thingskit-view!28
Showing
8 changed files
with
99 additions
and
70 deletions
| ... | ... | @@ -30,7 +30,7 @@ |
| 30 | 30 | <collapse-item name="信息" :expanded="true"> |
| 31 | 31 | <setting-item-box name="文字" :alone="true"> |
| 32 | 32 | <setting-item> |
| 33 | - <n-input v-model:value="optionData.animat.text" size="small"></n-input> | |
| 33 | + <n-input v-model:value="optionData.dataset" size="small"></n-input> | |
| 34 | 34 | </setting-item> |
| 35 | 35 | </setting-item-box> |
| 36 | 36 | </collapse-item> | ... | ... |
| 1 | 1 | <template> |
| 2 | -<!-- 10 | |
| 3 | -0,2 54,2 60,4 75,4 81,6 216,6 225,4 240,4 245.3,2 300,2 | |
| 4 | -90,8 210,8 | |
| 5 | -20 | |
| 6 | -0,4 54,4 60,8 75,8 81,12 216,12 225,8 240,8 245.3,4 300,4 | |
| 7 | -90,16 210,16 | |
| 8 | -30 | |
| 9 | -0,6 54,6 60,12 75,12 81,18 216,18 225,12 240,12 245.3,6 300,6 | |
| 10 | -90,24 210,24 | |
| 11 | -40 | |
| 12 | -0,8 54,8 60,16 75,16 81,24 216,24 225,16 240,16 245.3,8 300,8 --> | |
| 13 | -<!-- 200 200 | |
| 14 | -60,160 140,160 --> | |
| 15 | - | |
| 16 | 2 | <div class="go-animat"> |
| 17 | 3 | <div class="go-svg" :style="{ marginLeft: animat.x + 'px', marginTop: animat.y + 'px' }"> |
| 18 | 4 | <svg :width="w" :height="h"> |
| 19 | 5 | <polyline |
| 20 | 6 | fill="transparent" |
| 21 | 7 | stroke-width="3" |
| 22 | - :points="`0,${h / 5} ${w / 5.555555555555556},${h / 5} ${w / 5},${h/2.5} ${w / 4},${h/2.5} ${w / 3.703703703703704},${h/1.666666666666667} ${ | |
| 23 | - w / 1.388888888888889 | |
| 24 | - },${h/1.666666666666667} ${w / 1.333333333333333},${h/2.5} ${w / 1.25},${h/2.5} ${w / 1.219512195121951},${h / 5} ${w},${h / 5}`" | |
| 8 | + :points="`0,${h / 5} ${w / 5.555555555555556},${h / 5} ${w / 5},${h / 2.5} ${w / 4},${h / 2.5} ${ | |
| 9 | + w / 3.703703703703704 | |
| 10 | + },${h / 1.666666666666667} ${w / 1.388888888888889},${h / 1.666666666666667} ${w / 1.333333333333333},${ | |
| 11 | + h / 2.5 | |
| 12 | + } ${w / 1.25},${h / 2.5} ${w / 1.219512195121951},${h / 5} ${w},${h / 5}`" | |
| 25 | 13 | :stroke="animat.colors[0]" |
| 26 | 14 | > |
| 27 | 15 | <animate |
| ... | ... | @@ -40,7 +28,7 @@ |
| 40 | 28 | <polyline |
| 41 | 29 | fill="transparent" |
| 42 | 30 | stroke-width="2" |
| 43 | - :points="`${w / 3.333333333333333},${h/1.25} ${w / 1.428571428571429},${h/1.25}`" | |
| 31 | + :points="`${w / 3.333333333333333},${h / 1.25} ${w / 1.428571428571429},${h / 1.25}`" | |
| 44 | 32 | :stroke="animat.colors[1]" |
| 45 | 33 | > |
| 46 | 34 | <animate |
| ... | ... | @@ -60,7 +48,7 @@ |
| 60 | 48 | </div> |
| 61 | 49 | <div class="go-text" :style="{ top: animat.textPos.y + '%', left: animat.textPos.x + '%' }"> |
| 62 | 50 | <n-gradient-text :size="animat.size" :gradient="animat.gradient"> |
| 63 | - {{ animat.text }} | |
| 51 | + {{ dataset }} | |
| 64 | 52 | </n-gradient-text> |
| 65 | 53 | </div> |
| 66 | 54 | </div> |
| ... | ... | @@ -78,7 +66,7 @@ const props = defineProps({ |
| 78 | 66 | |
| 79 | 67 | const { w, h } = toRefs(props.chartConfig.attr) |
| 80 | 68 | |
| 81 | -const { animat } = toRefs(props.chartConfig.option) | |
| 69 | +const { animat, dataset } = toRefs(props.chartConfig.option) | |
| 82 | 70 | </script> |
| 83 | 71 | |
| 84 | 72 | <style lang="scss" scoped> | ... | ... |
| ... | ... | @@ -4,7 +4,7 @@ import { CameraConfig } from './index' |
| 4 | 4 | import cloneDeep from 'lodash/cloneDeep' |
| 5 | 5 | |
| 6 | 6 | export const option = { |
| 7 | - dataset: 'http://113.204.115.250:83/openUrl/4itVrfG/live.m3u8' | |
| 7 | + dataset: 'http://113.204.115.250:83/openUrl/vCJagUM/live.m3u8' | |
| 8 | 8 | } |
| 9 | 9 | |
| 10 | 10 | export default class Config extends PublicConfigClass implements CreateComponentType { | ... | ... |
| 1 | 1 | <template> |
| 2 | 2 | <div class="go-content-box" :style="{ width: w + 'px', height: h + 'px' }"> |
| 3 | 3 | <video id="my-player" ref="videoRef" class="video-js my-video"> |
| 4 | - <source :src="props.chartConfig.option.dataset" /> | |
| 4 | + <source :src="dataset" /> | |
| 5 | 5 | </video> |
| 6 | 6 | </div> |
| 7 | 7 | </template> |
| 8 | 8 | <script setup lang="ts"> |
| 9 | -import { PropType, onMounted, ref, watch, toRefs, unref } from 'vue' | |
| 9 | +import { PropType, onMounted, ref, watch, toRefs, onUnmounted } from 'vue' | |
| 10 | 10 | import { CreateComponentType } from '@/packages/index.d' |
| 11 | 11 | import videojs from 'video.js' |
| 12 | 12 | import type { VideoJsPlayerOptions } from 'video.js' |
| ... | ... | @@ -21,44 +21,49 @@ const props = defineProps({ |
| 21 | 21 | |
| 22 | 22 | const { w, h } = toRefs(props.chartConfig.attr) |
| 23 | 23 | |
| 24 | +const { dataset } = toRefs(props.chartConfig.option) | |
| 25 | + | |
| 24 | 26 | // video标签 |
| 25 | 27 | const videoRef = ref<HTMLElement | null>(null) |
| 26 | 28 | |
| 27 | 29 | // video实例对象 |
| 28 | 30 | let videoPlayer: videojs.Player | null = null |
| 29 | 31 | |
| 32 | +//options配置 | |
| 33 | +const options: VideoJsPlayerOptions = { | |
| 34 | + language: 'zh-CN', // 设置语言 | |
| 35 | + controls: true, // 是否显示控制条 | |
| 36 | + preload: 'auto', // 预加载 | |
| 37 | + autoplay: true, // 是否自动播放 | |
| 38 | + fluid: false, // 自适应宽高 | |
| 39 | + src: dataset?.value, // 要嵌入的视频源的源 URL | |
| 40 | + userActions: { | |
| 41 | + hotkeys: true | |
| 42 | + } | |
| 43 | +} | |
| 44 | + | |
| 30 | 45 | // 初始化videojs |
| 31 | 46 | const initVideo = () => { |
| 32 | - const options: VideoJsPlayerOptions = { | |
| 33 | - language: 'zh-CN', // 设置语言 | |
| 34 | - controls: true, // 是否显示控制条 | |
| 35 | - preload: 'auto', // 预加载 | |
| 36 | - autoplay: true, // 是否自动播放 | |
| 37 | - fluid: false, // 自适应宽高 | |
| 38 | - src: props.chartConfig.option.dataset, // 要嵌入的视频源的源 URL | |
| 39 | - userActions: { | |
| 40 | - hotkeys: true | |
| 41 | - } | |
| 42 | - } | |
| 43 | 47 | if (videoRef.value) { |
| 44 | 48 | // 创建 video 实例 |
| 45 | - videoPlayer = videojs(unref(videoRef) as HTMLElement, options, onPlayerReady) | |
| 49 | + videoPlayer = videojs(videoRef.value, options) | |
| 46 | 50 | } |
| 47 | 51 | } |
| 48 | 52 | |
| 49 | -// video初始化完成的回调函数 | |
| 50 | -const onPlayerReady = () => {} | |
| 51 | - | |
| 52 | 53 | onMounted(() => { |
| 53 | 54 | initVideo() |
| 54 | 55 | }) |
| 55 | 56 | |
| 57 | +onUnmounted(() => { | |
| 58 | + videoPlayer?.dispose() | |
| 59 | +}) | |
| 60 | + | |
| 56 | 61 | watch( |
| 57 | 62 | () => props.chartConfig.option.dataset, |
| 58 | 63 | newData => { |
| 59 | - console.log(newData) | |
| 60 | 64 | props.chartConfig.option.dataset = newData |
| 61 | - initVideo() | |
| 65 | + videoPlayer?.src(newData) | |
| 66 | + videoPlayer?.play() | |
| 62 | 67 | } |
| 63 | 68 | ) |
| 64 | 69 | </script> | ... | ... |
| ... | ... | @@ -4,10 +4,16 @@ import { Title1Config } from './index' |
| 4 | 4 | import cloneDeep from 'lodash/cloneDeep' |
| 5 | 5 | |
| 6 | 6 | export const option = { |
| 7 | - /** | |
| 8 | - * Naive UI Date Picker部分属性 | |
| 9 | - */ | |
| 10 | - dataset: '我是标题' | |
| 7 | + dataset: '我是标题', | |
| 8 | + attribute: { | |
| 9 | + linearColors: ['#0559A3', '#0654A3', '#2AFFFF', '#2AFFFF','#2affff',' #2affff','#16d9d9'], | |
| 10 | + fontSize: 20, | |
| 11 | + fontPos: { | |
| 12 | + x: 0, | |
| 13 | + y: 20 | |
| 14 | + }, | |
| 15 | + fontColor: '#2AFFFF' | |
| 16 | + } | |
| 11 | 17 | } |
| 12 | 18 | |
| 13 | 19 | export default class Config extends PublicConfigClass implements CreateComponentType { | ... | ... |
| 1 | 1 | <template> |
| 2 | 2 | <CollapseItem name="配置" :expanded="true"> |
| 3 | 3 | <SettingItemBox name="标题"> |
| 4 | - <SettingItem name="标题"> | |
| 4 | + <SettingItem name="内容"> | |
| 5 | 5 | <n-input v-model:value="optionData.dataset" /> |
| 6 | 6 | </SettingItem> |
| 7 | + <SettingItem name="大小"> | |
| 8 | + <n-input v-model:value="optionData.attribute.fontSize" /> | |
| 9 | + </SettingItem> | |
| 10 | + <SettingItem name="颜色"> | |
| 11 | + <n-color-picker size="small" :modes="['hex']" v-model:value="optionData.attribute.fontColor"></n-color-picker> | |
| 12 | + </SettingItem> | |
| 13 | + <SettingItem name="x轴位置"> | |
| 14 | + <n-input v-model:value="optionData.attribute.fontPos.x" /> | |
| 15 | + </SettingItem> | |
| 16 | + <SettingItem name="y轴位置"> | |
| 17 | + <n-input v-model:value="optionData.attribute.fontPos.y" /> | |
| 18 | + </SettingItem> | |
| 19 | + </SettingItemBox> | |
| 20 | + <SettingItemBox | |
| 21 | + :name="`装饰颜色-${index + 1}`" | |
| 22 | + v-for="(item, index) in optionData.attribute.linearColors" | |
| 23 | + :key="index" | |
| 24 | + > | |
| 25 | + <SettingItem name="颜色"> | |
| 26 | + <n-color-picker | |
| 27 | + size="small" | |
| 28 | + :modes="['hex']" | |
| 29 | + v-model:value="optionData.attribute.linearColors[index]" | |
| 30 | + ></n-color-picker> | |
| 31 | + </SettingItem> | |
| 32 | + <SettingItem> | |
| 33 | + <n-button | |
| 34 | + size="small" | |
| 35 | + @click="optionData.attribute.linearColors[index] = optionData.attribute.linearColors[index]" | |
| 36 | + > | |
| 37 | + 恢复默认 | |
| 38 | + </n-button> | |
| 39 | + </SettingItem> | |
| 7 | 40 | </SettingItemBox> |
| 8 | 41 | </CollapseItem> |
| 9 | 42 | </template> | ... | ... |
| ... | ... | @@ -3,19 +3,18 @@ |
| 3 | 3 | <svg |
| 4 | 4 | xmlns="http://www.w3.org/2000/svg" |
| 5 | 5 | xmlns:xlink="http://www.w3.org/1999/xlink" |
| 6 | - width="492" | |
| 7 | - height="30" | |
| 8 | - viewBox="0 0 492 30" | |
| 6 | + :width="w" | |
| 7 | + :height="h" | |
| 9 | 8 | fill="none" |
| 10 | 9 | > |
| 11 | 10 | <defs> |
| 12 | 11 | <linearGradient id="linear_0" x1="0%" y1="50%" x2="100%" y2="50%" gradientUnits="objectBoundingBox"> |
| 13 | - <stop offset="0" stop-color="#0559A3" stop-opacity="1" /> | |
| 14 | - <stop offset="1" stop-color="#0654A3" stop-opacity="0" /> | |
| 12 | + <stop offset="0" :stop-color="attribute.linearColors[0]" stop-opacity="1" /> | |
| 13 | + <stop offset="1" :stop-color="attribute.linearColors[1]" stop-opacity="0" /> | |
| 15 | 14 | </linearGradient> |
| 16 | 15 | <linearGradient id="linear_1" x1="0%" y1="50%" x2="100%" y2="50%" gradientUnits="objectBoundingBox"> |
| 17 | - <stop offset="0" stop-color="#2AFFFF" stop-opacity="0" /> | |
| 18 | - <stop offset="1" stop-color="#2AFFFF" stop-opacity="0.2" /> | |
| 16 | + <stop offset="0" :stop-color="attribute.linearColors[2]" stop-opacity="0" /> | |
| 17 | + <stop offset="1" :stop-color="attribute.linearColors[3]" stop-opacity="0.2" /> | |
| 19 | 18 | </linearGradient> |
| 20 | 19 | </defs> |
| 21 | 20 | <g opacity="1" transform="translate(0 0) rotate(0 246 15)"> |
| ... | ... | @@ -25,16 +24,16 @@ |
| 25 | 24 | fill="url(#linear_0)" |
| 26 | 25 | transform="translate(0 0) rotate(0 246 15)" |
| 27 | 26 | opacity="1" |
| 28 | - d="M0,30L492,30L492,0L0,0L0,30Z " | |
| 27 | + :d="`M0,${h / 2.933333333333333} L${w},${h / 2.933333333333333} L${w},0 L0,0 L0,${h / 2.933333333333333} Z`" | |
| 29 | 28 | /> |
| 30 | 29 | <g opacity="1" transform="translate(34 2) rotate(0 46 13)"> |
| 31 | 30 | <text> |
| 32 | 31 | <tspan |
| 33 | - x="0" | |
| 34 | - y="20" | |
| 35 | - font-size="20" | |
| 32 | + :x="attribute.fontPos.x" | |
| 33 | + :y="attribute.fontPos.y" | |
| 34 | + :font-size="attribute.fontSize" | |
| 36 | 35 | line-height="0" |
| 37 | - fill="#2AFFFF" | |
| 36 | + :fill="attribute.fontColor" | |
| 38 | 37 | opacity="1" |
| 39 | 38 | font-family="YouSheBiaoTiHei" |
| 40 | 39 | letter-spacing="0" |
| ... | ... | @@ -49,32 +48,32 @@ |
| 49 | 48 | style="fill: #2affff" |
| 50 | 49 | transform="translate(0 0) rotate(0 0.5 15)" |
| 51 | 50 | opacity="1" |
| 52 | - d="M0,30L1,30L1,0L0,0L0,30Z " | |
| 51 | + :d="`M0,${h / 2.933333333333333}L1,${h / 2.933333333333333}L1,0L0,0L0,${h / 2.933333333333333}Z`" | |
| 53 | 52 | /> |
| 54 | - <g opacity="1" transform="translate(14 8) rotate(0 6.5 7)"> | |
| 53 | + <g opacity="1" :transform="`translate(14 8) rotate(0 6.5 7)`"> | |
| 55 | 54 | <path |
| 56 | 55 | id="矩形 22" |
| 57 | 56 | fill-rule="evenodd" |
| 58 | - style="fill: #2affff" | |
| 57 | + :style="{ fill: attribute.linearColors[4] }" | |
| 59 | 58 | transform="translate(2 0) rotate(0 5.5 3.5)" |
| 60 | 59 | opacity="1" |
| 61 | - d="M6,7L11,7L5,0L0,0L6,7Z " | |
| 60 | + :d="`M6,7 L11,7 L5,0 L0,0 L6,7 Z`" | |
| 62 | 61 | /> |
| 63 | 62 | <path |
| 64 | 63 | id="圆形 7" |
| 65 | 64 | fill-rule="evenodd" |
| 66 | - style="fill: #2affff" | |
| 65 | + :style="{ fill: attribute.linearColors[5] }" | |
| 67 | 66 | transform="translate(0 5) rotate(0 2 2)" |
| 68 | 67 | opacity="1" |
| 69 | - d="M2,0C0.9,0 0,0.9 0,2C0,3.1 0.9,4 2,4C3.1,4 4,3.1 4,2C4,0.9 3.1,0 2,0Z " | |
| 68 | + :d="`M2,0 C0.9,0 0,0.9 0,2 C0,3.1 0.9,4 2,4 C3.1,4 4,3.1 4,2 C4,0.9 3.1,0 2,0 Z`" | |
| 70 | 69 | /> |
| 71 | 70 | <path |
| 72 | 71 | id="矩形 22" |
| 73 | 72 | fill-rule="evenodd" |
| 74 | - style="fill: #16d9d9" | |
| 73 | + :style="{ fill: attribute.linearColors[6] }" | |
| 75 | 74 | transform="translate(2 7) rotate(0 5.5 3.5)" |
| 76 | 75 | opacity="1" |
| 77 | - d="M6,0L0,7L5,7L11,0L6,0Z " | |
| 76 | + :d="`M6,0L0,7L5,7L11,0L6,0Z `" | |
| 78 | 77 | /> |
| 79 | 78 | </g> |
| 80 | 79 | <g opacity="1" transform="translate(396 2) rotate(0 46.5 13.5)"> |
| ... | ... | @@ -102,15 +101,13 @@ const props = defineProps({ |
| 102 | 101 | } |
| 103 | 102 | }) |
| 104 | 103 | |
| 105 | -const { dataset } = toRefs(props.chartConfig.option) | |
| 104 | +const { dataset, attribute } = toRefs(props.chartConfig.option) | |
| 106 | 105 | |
| 107 | 106 | const { w, h } = toRefs(props.chartConfig.attr) |
| 108 | 107 | </script> |
| 109 | 108 | |
| 110 | 109 | <style lang="scss" scoped> |
| 111 | 110 | .go-content-box { |
| 112 | - width: v-bind('w + "px"'); | |
| 113 | - height: v-bind('h + "px"'); | |
| 114 | 111 | display: flex; |
| 115 | 112 | align-items: center; |
| 116 | 113 | justify-content: center; | ... | ... |