@yimou6/common-ui 1.14.0 → 1.14.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. package/cdn/index.cdn.js +14 -14
  2. package/cdn/index.cdn.js.map +1 -1
  3. package/cdn/index.cdn.mjs +16 -16
  4. package/cdn/index.cdn.mjs.map +1 -1
  5. package/es/components/geoMark/index.d.ts +1 -0
  6. package/es/components/geoMark/src/geoMark.vue.d.ts +1 -0
  7. package/es/components/geoMark/src/geoMark.vue2.mjs.map +1 -1
  8. package/es/components/geoMark/src/openMap.vue.d.ts +1 -0
  9. package/es/components/geoMark/src/openMap.vue2.mjs +4 -1
  10. package/es/components/geoMark/src/openMap.vue2.mjs.map +1 -1
  11. package/es/components/tzj-player/index.d.ts +285 -6
  12. package/es/components/tzj-player/src/ctyun-player.mjs +9 -4
  13. package/es/components/tzj-player/src/ctyun-player.mjs.map +1 -1
  14. package/es/components/tzj-player/src/tzj-player.vue.d.ts +285 -6
  15. package/es/components/tzj-player/src/yunzhiyanPlayer.vue.d.ts +0 -6
  16. package/es/components/tzj-player/src/yunzhiyanPlayer.vue2.mjs +6 -144
  17. package/es/components/tzj-player/src/yunzhiyanPlayer.vue2.mjs.map +1 -1
  18. package/lib/components/geoMark/index.d.ts +1 -0
  19. package/lib/components/geoMark/src/geoMark.vue.d.ts +1 -0
  20. package/lib/components/geoMark/src/geoMark.vue2.js.map +1 -1
  21. package/lib/components/geoMark/src/openMap.vue.d.ts +1 -0
  22. package/lib/components/geoMark/src/openMap.vue2.js +4 -1
  23. package/lib/components/geoMark/src/openMap.vue2.js.map +1 -1
  24. package/lib/components/tzj-player/index.d.ts +285 -6
  25. package/lib/components/tzj-player/src/ctyun-player.js +9 -4
  26. package/lib/components/tzj-player/src/ctyun-player.js.map +1 -1
  27. package/lib/components/tzj-player/src/tzj-player.vue.d.ts +285 -6
  28. package/lib/components/tzj-player/src/yunzhiyanPlayer.vue.d.ts +0 -6
  29. package/lib/components/tzj-player/src/yunzhiyanPlayer.vue2.js +5 -143
  30. package/lib/components/tzj-player/src/yunzhiyanPlayer.vue2.js.map +1 -1
  31. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"openMap.vue2.mjs","sources":["../../../../../../../packages/components/geoMark/src/openMap.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport DragPan from \"ol/interaction/DragPan\";\nimport Projection from \"ol/proj/Projection\";\nimport { Icon, Style } from \"ol/style\";\n// @ts-nocheck\nimport { nextTick, onMounted, ref, toRef, watch } from \"vue\";\nimport {\n Interactions as _Interactions,\n Layers as _Layers,\n Map as _Map,\n MapControls as _MapControls,\n Sources as _Sources,\n Styles as _Styles,\n} from \"vue3-openlayers\";\nimport type { Extent } from \"ol/extent\";\nimport \"ol/ol.css\";\n\n/**\n * openMap —— 重新实现的楼层图组件(替代丢失源码的 gkestor-battlefield-cesium-plus)\n *\n * 通过 vue3-openlayers 渲染一张静态楼层影像,并在其上叠加矢量图层,\n * 支持绘制(区域/逃生路线)、编辑、吸附、变换等交互。\n *\n * 关键点:\n * 1. 地图坐标系使用「像素」单位,坐标与图片像素一一对应,\n * 因此内部始终使用自建的像素投影(xkcd-image / pixels),\n * 忽略外部传入的 projection(如 EPSG:3857),否则楼层图坐标会错乱。\n * 2. center / zoom / size / extent / imgUrl 均与父组件双向联动,\n * 图片切换时会自动重设视图。\n */\nconst props = defineProps({\n apiKey: { type: String, default: \"\" },\n // 外部传入的中心点。图片切换后组件会以图片中心重置视图;外部显式修改 center 时立即生效\n center: { type: Array, default: () => [0, 0] },\n // 外部传入的缩放级别。首次加载/切换图片时组件会按图片 extent 自动适配(fit),\n // 之后外部显式修改 zoom 时立即生效并覆盖自动适配结果\n zoom: { type: Number, default: 1 },\n // 外部传入的投影(保留接口兼容,实际不使用,改用内部像素投影)\n projection: { type: [String, Object], default: undefined },\n imgUrl: { type: String, default: \"\" },\n // 图片的像素尺寸 [width, height],与 extent(图片的坐标范围)配套使用。\n // 原生 ol/source/ImageStatic 用它定义图片渲染分辨率;当 extent 宽高比与图片实际\n // 像素宽高比不一致时,该值可作图片真实像素尺寸用于拉伸矫正。\n // 注意:vue3-openlayers 的 ol-source-image-static 未暴露 imageSize 属性,\n // 实际渲染范围由 extent 决定,size 主要作为元数据保留(与父组件同步维护)\n size: { type: Array, default: () => [1024, 968] },\n extent: { type: Array, default: () => [0, 0, 1024, 968] },\n configMenuItems: { type: Array, default: () => [] },\n activatedBottomBar: { type: String, default: \"\" },\n waring: { type: [String, Number, null] as any, default: null },\n activatedPositionOverlayWaring: { type: Array, default: () => [] },\n activatedPositionOverlay: { type: Array, default: () => [] },\n activatedPropertiesOverlay: { type: Object, default: () => ({}) },\n listTitle: { type: String, default: \"\" },\n alarmType: { type: String, default: \"\" },\n svgOverlay: { type: String, default: \"\" },\n waringIcon: { type: String, default: \"\" },\n fnUpdateDrawFeature: { type: Function, default: undefined },\n fnUpdateDrawFeature2: { type: Function, default: undefined },\n fnOverrideStyle: { type: Function, default: undefined },\n});\nconst emit = defineEmits([\n \"ready\",\n \"featuresChanged\",\n \"customPointerMove\",\n \"customContextMenu\",\n \"customPostCompose\",\n]);\n// 组件擦除为 any:避免具体 ol 组件类型进入 _sfc_main 返回类型触发 TS2742/TS7056\nconst OlMap: any = _Map.OlMap;\nconst OlOverlay: any = _Map.OlOverlay;\nconst OlView: any = _Map.OlView;\nconst OlImageLayer: any = _Layers.OlImageLayer;\nconst OlVectorLayer: any = _Layers.OlVectorLayer;\nconst OlSourceImageStatic: any = _Sources.OlSourceImageStatic;\nconst OlSourceVector: any = _Sources.OlSourceVector;\nconst OlContextMenuControl: any = _MapControls.OlContextMenuControl;\nconst OlZoomControl: any = _MapControls.OlZoomControl;\nconst OlDrawInteraction: any = _Interactions.OlDrawInteraction;\nconst OlModifyInteraction: any = _Interactions.OlModifyInteraction;\nconst OlSnapInteraction: any = _Interactions.OlSnapInteraction;\nconst OlTransformInteraction: any = _Interactions.OlTransformInteraction;\nconst OlStyle: any = _Styles.OlStyle;\n\nconst mapRef = ref<any>(null);\nconst viewRef = ref<any>(null);\nconst vectorSourceRef = ref<any>(null);\nconst currentImageUrl = toRef(props, \"imgUrl\");\n\n// 内部像素投影:使地图坐标与图片像素一一对应\nconst pixelProjection: any = new Projection({\n code: \"xkcd-image\",\n units: \"pixels\",\n extent: props.extent as unknown as Extent,\n});\n\n// 图片尺寸变化时,同步投影的 extent\nwatch(\n () => props.extent,\n (extent) => {\n if (extent && pixelProjection) {\n pixelProjection.setExtent(extent as unknown as Extent);\n }\n // 图片范围更新后重新适配视图,确保图片按新尺寸正确显示(无需二次操作)\n nextTick(() => {\n // eslint-disable-next-line no-use-before-define\n calculateAutoZoom();\n });\n },\n);\n\n// 外部传入的 zoom 变化时直接同步到视图,保证外部控制立即生效\nwatch(\n () => props.zoom,\n (val) => {\n const view = viewRef.value?.view;\n if (view && typeof val === \"number\" && !Number.isNaN(val)) {\n view.setZoom(val);\n }\n },\n);\n\n// 外部传入的 center 变化时直接同步到视图,保证外部控制立即生效\nwatch(\n () => props.center,\n (val) => {\n const view = viewRef.value?.view;\n if (view && Array.isArray(val) && val.length === 2) {\n view.setCenter(val);\n }\n },\n);\n\nconst getVectorSource = () => vectorSourceRef.value?.source;\nconst getMap = () => mapRef.value?.map;\nconst getView = () => viewRef.value?.view;\n\n// 状态图标处理缓存:key = `${src}#${mode}`,value = 处理后图片的 dataURL。\n// 同一张图片的同一状态只处理一次,后续 createIcon 直接读缓存,避免重复做像素级转换。\n// 仅放内存、不写 localStorage:图标源有限且体积小(几十 KB/张),会话级缓存完全无压力;\n// localStorage 有 5MB 配额、base64 膨胀约 37%、且同步 I/O 阻塞主线程,没有必要持久化。\nconst iconColorCache = new Map<string, string>();\n// 正在处理的缓存 key,防止同一 src+状态被并发重复触发\nconst iconColorPending = new Set<string>();\n\n// 着色目标色:0 故障=橙、1 报警=红\nconst STATE_COLORS: Record<string, { r: number; g: number; b: number }> = {\n orange: { r: 255, g: 140, b: 0 },\n red: { r: 230, g: 30, b: 30 },\n};\n// 设备状态 → 处理模式:0 故障=orange、1 报警=red、4 离线=gray;\n// 2(正常)及其它(-1 未启用/缺失)返回 null,直接使用原图,不产生新图与缓存。\nconst getIconMode = (state: unknown): string | null => {\n const s = Number(state);\n if (s === 0) return \"orange\";\n if (s === 1) return \"red\";\n if (s === 4) return \"gray\";\n return null;\n};\n\n// 同步创建设备图标样式(style 函数必须同步 return):\n// 1) 状态为 0/1/4:优先使用按状态处理后的缓存图;缓存未就绪时先用原图占位,\n// 同时异步处理,完成后写缓存并刷新当前图层要素使图标更新;\n// 2) 状态为 2(正常)及其它:直接使用原图 src,不做任何处理。\nconst createIcon = (src: string, scale: number, state?: unknown): any => {\n const mode = getIconMode(state);\n let effectiveSrc = src;\n if (mode) {\n const key = `${src}#${mode}`;\n effectiveSrc = iconColorCache.get(key) || src;\n if (!iconColorCache.has(key) && !iconColorPending.has(key)) {\n iconColorPending.add(key);\n processIcon(key, src, mode, (result: string) => {\n iconColorCache.set(key, result);\n iconColorPending.delete(key);\n // eslint-disable-next-line no-use-before-define\n refreshFeaturesUsingIcon();\n });\n }\n }\n return new Style({\n image: new Icon({\n src: effectiveSrc,\n anchor: [0.5, 1],\n anchorXUnits: \"fraction\",\n anchorYUnits: \"fraction\",\n scale,\n }),\n });\n};\n\n// 某张按状态处理后的图片就绪后,重设当前图层所有设备要素的样式,\n// 使仍使用原图占位的图标切换到处理后的状态图。\n// 依赖 index.vue 传入的 fnOverrideStyle(其内部会再次调用 createIcon 读取缓存)。\nconst refreshFeaturesUsingIcon = (): void => {\n const source = vectorSourceRef.value?.source;\n const fn = props.fnOverrideStyle;\n if (!source || typeof fn !== \"function\") return;\n source.getFeatures().forEach((feature: any) => {\n if (feature.get(\"code\")) {\n fn(feature);\n }\n });\n};\n\n// 将图片异步处理为 dataURL:mode=gray 灰度化;mode=orange/red 按目标色着色。\n// 着色保留原图亮度层次(亮部更接近目标色、暗部更暗),透明区域保持不变。\n// 失败(如跨域导致 canvas 被污染)时仅移除 pending,回退继续使用原图。\nfunction processIcon(\n key: string,\n imageSrc: string,\n mode: string,\n callback: (dataUrl: string) => void,\n): void {\n const img = new Image();\n img.crossOrigin = \"anonymous\";\n img.onload = () => {\n try {\n const canvas = document.createElement(\"canvas\");\n canvas.width = img.width;\n canvas.height = img.height;\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) return;\n // 1. 绘制原图\n ctx.drawImage(img, 0, 0);\n // 2. 获取像素数据,按状态处理(透明度通道保持不变)\n const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);\n const data = imageData.data;\n const tint = STATE_COLORS[mode];\n for (let i = 0; i < data.length; i += 4) {\n const lum = 0.299 * data[i] + 0.587 * data[i + 1] + 0.114 * data[i + 2];\n if (tint) {\n // 着色:用亮度调制目标色,保留图标明暗层次\n const factor = 0.4 + 0.6 * (lum / 255);\n data[i] = tint.r * factor;\n data[i + 1] = tint.g * factor;\n data[i + 2] = tint.b * factor;\n } else {\n // 离线:标准灰度\n data[i] = lum;\n data[i + 1] = lum;\n data[i + 2] = lum;\n }\n }\n // 3. 写回 canvas 并导出 dataURL\n ctx.putImageData(imageData, 0, 0);\n callback(canvas.toDataURL(\"image/png\"));\n } catch (error) {\n iconColorPending.delete(key);\n }\n };\n img.onerror = () => {\n iconColorPending.delete(key);\n };\n img.src = imageSrc;\n}\n\nconst clearSource = () => vectorSourceRef.value?.source?.clear();\nconst addFeature = (feature: any) =>\n vectorSourceRef.value?.source?.addFeature(feature);\nconst addFeatures = (features: any[]) =>\n vectorSourceRef.value?.source?.addFeatures(features);\nconst removeFeature = (feature: any) =>\n vectorSourceRef.value?.source?.removeFeature(feature);\nconst getFeatures = () =>\n vectorSourceRef.value?.source\n ? vectorSourceRef.value.source.getFeatures()\n : [];\nconst getZoom = () => mapRef.value?.map?.getView()?.getZoom();\nconst setZoom = (zoom: number) => mapRef.value?.map?.getView()?.setZoom(zoom);\n\nconst calculateAutoZoom = () => {\n const view = viewRef.value?.view;\n if (!view || typeof view.fit !== \"function\") return;\n // 屏幕显示大小必须取 size(底图像素尺寸),而不是容器 DOM 尺寸。\n // 这样 fit 后 resolution≈1,1 地图单位 = 1 CSS 像素,图片按 size 里的大小显示(如 800×600),\n // 不会因为用了容器尺寸而被撑满整个视口,也保证点位坐标与图片像素一一对应。\n const [width, height] = props.size as number[];\n if (!width || !height) return;\n view.fit(props.extent as unknown as Extent, {\n size: [width, height],\n padding: [10, 10, 10, 10],\n constrainResolution: false,\n nearest: false,\n });\n};\n\n// 绘制模式下,地图拖拽平移(DragPan)会与绘制交互冲突,\n// 导致按住鼠标拖动放置顶点时底图跟着平移,因此绘制期间禁用 DragPan。\nconst isDrawingMode = (): boolean =>\n props.activatedBottomBar === \"区域绘制\" ||\n props.activatedBottomBar === \"逃生路线\";\n\nconst setDragPanActive = (active: boolean): void => {\n const map = mapRef.value?.map;\n if (!map) return;\n map\n .getInteractions()\n .getArray()\n .forEach((interaction: any) => {\n if (interaction instanceof DragPan) {\n interaction.setActive(active);\n }\n });\n};\n\n// 切换底部栏按钮时,同步 DragPan 的启用/禁用状态\nwatch(\n () => props.activatedBottomBar,\n () => {\n setDragPanActive(!isDrawingMode());\n },\n);\n\ndefineExpose({\n getVectorSource,\n getMap,\n getView,\n createIcon,\n clearSource,\n addFeature,\n addFeatures,\n removeFeature,\n getFeatures,\n getZoom,\n setZoom,\n calculateAutoZoom,\n});\n\nonMounted(() => {\n nextTick(() => {\n emit(\"ready\");\n const map = mapRef.value?.map;\n if (map) {\n map.on(\"postcompose\", (e: any) => emit(\"customPostCompose\", e));\n map.on(\"pointermove\", (e: any) => emit(\"customPointerMove\", e));\n map.on(\"contextmenu\", (e: any) => emit(\"customContextMenu\", e));\n setDragPanActive(!isDrawingMode());\n }\n });\n});\n</script>\n\n<template>\n <OlMap ref=\"mapRef\" class=\"w-full\" style=\"height: 100%\">\n <OlView\n ref=\"viewRef\"\n :center=\"center\"\n :zoom=\"zoom\"\n :projection=\"pixelProjection\"\n />\n\n <OlZoomControl />\n\n <OlContextMenuControl :items=\"configMenuItems\" />\n\n <!-- 底图静态影像层:key 绑定 imgUrl+extent,二者任一变化即整体销毁重建影像层。\n 因为 OL ImageStatic 的 imageExtent 在构造后不可变,vue3-openlayers 只能靠重建 source\n 来应用新 extent;若不加 key,重建/图片异步加载期间会短暂以旧 imageExtent 渲染,\n 导致首帧图标与底图错位(再次点击楼层后才对齐) -->\n <OlImageLayer\n id=\"xkcd\"\n :key=\"`${currentImageUrl}|${extent.join(',')}`\"\n :z-index=\"-1\"\n >\n <OlSourceImageStatic\n :url=\"currentImageUrl\"\n :image-extent=\"extent\"\n :projection=\"pixelProjection\"\n />\n </OlImageLayer>\n\n <!-- 矢量图层 -->\n <OlVectorLayer :z-index=\"1\">\n <OlSourceVector ref=\"vectorSourceRef\">\n <!-- 区域设置 -->\n <OlModifyInteraction v-if=\"activatedBottomBar === '区域设置'\" />\n <!-- 区域绘制 -->\n <OlDrawInteraction\n v-if=\"activatedBottomBar === '区域绘制'\"\n type=\"Polygon\"\n :stop-click=\"true\"\n @drawend=\"fnUpdateDrawFeature\"\n />\n <!-- 逃生路线 -->\n <OlDrawInteraction\n v-if=\"activatedBottomBar === '逃生路线'\"\n ref=\"drawRef\"\n type=\"LineString\"\n :stop-click=\"true\"\n @drawend=\"fnUpdateDrawFeature2\"\n />\n <!-- 区域设置吸附 -->\n <OlSnapInteraction v-if=\"activatedBottomBar === '区域设置'\" />\n </OlSourceVector>\n\n <OlStyle :override-style-function=\"fnOverrideStyle\" />\n </OlVectorLayer>\n\n <!-- 编辑 / 区域模板 -->\n <OlTransformInteraction\n v-if=\"activatedBottomBar === '编辑' || activatedBottomBar === '区域模板'\"\n />\n\n <!-- 警告气泡:activatedPositionOverlayWaring 为告警设备坐标 -->\n <OlOverlay\n v-if=\"\n waring &&\n activatedPositionOverlayWaring &&\n activatedPositionOverlayWaring.length > 0\n \"\n :position=\"activatedPositionOverlayWaring\"\n :auto-pan=\"true\"\n :anchor=\"[0.5, 1]\"\n :offset=\"[-50, -30]\"\n >\n <div\n class=\"waring-bubble flex flex-col justify-start text-white flex-nowrap\"\n >\n <img :src=\"waringIcon\" alt=\"\" class=\"absolute w-full h-full\" />\n </div>\n </OlOverlay>\n\n <!-- 位置气泡(插槽) -->\n <OlOverlay\n v-if=\"activatedPositionOverlay.length > 0\"\n :position=\"activatedPositionOverlay\"\n :offset=\"[-175, -255]\"\n :auto-pan=\"true\"\n >\n <slot name=\"overlay\" />\n </OlOverlay>\n </OlMap>\n</template>\n"],"names":["_Map","_Layers","_Sources","_MapControls","_Interactions","_Styles","_createBlock","_unref","_createVNode","_createCommentVNode","_createElementVNode","_renderSlot"],"mappings":"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"}
1
+ {"version":3,"file":"openMap.vue2.mjs","sources":["../../../../../../../packages/components/geoMark/src/openMap.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport DragPan from \"ol/interaction/DragPan\";\nimport Projection from \"ol/proj/Projection\";\nimport { Icon, Style } from \"ol/style\";\n// @ts-nocheck\nimport { nextTick, onMounted, ref, toRef, watch } from \"vue\";\nimport {\n Interactions as _Interactions,\n Layers as _Layers,\n Map as _Map,\n MapControls as _MapControls,\n Sources as _Sources,\n Styles as _Styles,\n} from \"vue3-openlayers\";\nimport type { Extent } from \"ol/extent\";\nimport \"ol/ol.css\";\n\n/**\n * openMap —— 重新实现的楼层图组件(替代丢失源码的 gkestor-battlefield-cesium-plus)\n *\n * 通过 vue3-openlayers 渲染一张静态楼层影像,并在其上叠加矢量图层,\n * 支持绘制(区域/逃生路线)、编辑、吸附、变换等交互。\n *\n * 关键点:\n * 1. 地图坐标系使用「像素」单位,坐标与图片像素一一对应,\n * 因此内部始终使用自建的像素投影(xkcd-image / pixels),\n * 忽略外部传入的 projection(如 EPSG:3857),否则楼层图坐标会错乱。\n * 2. center / zoom / size / extent / imgUrl 均与父组件双向联动,\n * 图片切换时会自动重设视图。\n */\nconst props = defineProps({\n apiKey: { type: String, default: \"\" },\n // 外部传入的中心点。图片切换后组件会以图片中心重置视图;外部显式修改 center 时立即生效\n center: { type: Array, default: () => [0, 0] },\n // 外部传入的缩放级别。首次加载/切换图片时组件会按图片 extent 自动适配(fit),\n // 之后外部显式修改 zoom 时立即生效并覆盖自动适配结果\n zoom: { type: Number, default: 1 },\n // 外部传入的投影(保留接口兼容,实际不使用,改用内部像素投影)\n projection: { type: [String, Object], default: undefined },\n imgUrl: { type: String, default: \"\" },\n // 图片的像素尺寸 [width, height],与 extent(图片的坐标范围)配套使用。\n // 原生 ol/source/ImageStatic 用它定义图片渲染分辨率;当 extent 宽高比与图片实际\n // 像素宽高比不一致时,该值可作图片真实像素尺寸用于拉伸矫正。\n // 注意:vue3-openlayers 的 ol-source-image-static 未暴露 imageSize 属性,\n // 实际渲染范围由 extent 决定,size 主要作为元数据保留(与父组件同步维护)\n size: { type: Array, default: () => [1024, 968] },\n extent: { type: Array, default: () => [0, 0, 1024, 968] },\n configMenuItems: { type: Array, default: () => [] },\n activatedBottomBar: { type: String, default: \"\" },\n waring: { type: [String, Number, null] as any, default: null },\n activatedPositionOverlayWaring: { type: Array, default: () => [] },\n activatedPositionOverlay: { type: Array, default: () => [] },\n activatedPropertiesOverlay: { type: Object, default: () => ({}) },\n listTitle: { type: String, default: \"\" },\n alarmType: { type: String, default: \"\" },\n svgOverlay: { type: String, default: \"\" },\n waringIcon: { type: String, default: \"\" },\n fnUpdateDrawFeature: { type: Function, default: undefined },\n fnUpdateDrawFeature2: { type: Function, default: undefined },\n fnOverrideStyle: { type: Function, default: undefined },\n});\nconst emit = defineEmits([\n \"ready\",\n \"featuresChanged\",\n \"customPointerMove\",\n \"customContextMenu\",\n \"customPostCompose\",\n]);\n// 组件擦除为 any:避免具体 ol 组件类型进入 _sfc_main 返回类型触发 TS2742/TS7056\nconst OlMap: any = _Map.OlMap;\nconst OlOverlay: any = _Map.OlOverlay;\nconst OlView: any = _Map.OlView;\nconst OlImageLayer: any = _Layers.OlImageLayer;\nconst OlVectorLayer: any = _Layers.OlVectorLayer;\nconst OlSourceImageStatic: any = _Sources.OlSourceImageStatic;\nconst OlSourceVector: any = _Sources.OlSourceVector;\nconst OlContextMenuControl: any = _MapControls.OlContextMenuControl;\nconst OlZoomControl: any = _MapControls.OlZoomControl;\nconst OlDrawInteraction: any = _Interactions.OlDrawInteraction;\nconst OlModifyInteraction: any = _Interactions.OlModifyInteraction;\nconst OlSnapInteraction: any = _Interactions.OlSnapInteraction;\nconst OlTransformInteraction: any = _Interactions.OlTransformInteraction;\nconst OlStyle: any = _Styles.OlStyle;\n\nconst mapRef = ref<any>(null);\nconst viewRef = ref<any>(null);\nconst vectorSourceRef = ref<any>(null);\nconst currentImageUrl = toRef(props, \"imgUrl\");\n\n// 内部像素投影:使地图坐标与图片像素一一对应\nconst pixelProjection: any = new Projection({\n code: \"xkcd-image\",\n units: \"pixels\",\n extent: props.extent as unknown as Extent,\n});\n\n// 图片尺寸变化时,同步投影的 extent\nwatch(\n () => props.extent,\n (extent) => {\n if (extent && pixelProjection) {\n pixelProjection.setExtent(extent as unknown as Extent);\n }\n // 图片范围更新后重新适配视图,确保图片按新尺寸正确显示(无需二次操作)\n nextTick(() => {\n // eslint-disable-next-line no-use-before-define\n calculateAutoZoom();\n });\n },\n);\n\n// 外部传入的 zoom 变化时直接同步到视图,保证外部控制立即生效\nwatch(\n () => props.zoom,\n (val) => {\n const view = viewRef.value?.view;\n if (view && typeof val === \"number\" && !Number.isNaN(val)) {\n view.setZoom(val);\n }\n },\n);\n\n// 外部传入的 center 变化时直接同步到视图,保证外部控制立即生效\nwatch(\n () => props.center,\n (val) => {\n const view = viewRef.value?.view;\n if (view && Array.isArray(val) && val.length === 2) {\n view.setCenter(val);\n }\n },\n);\n\nconst getVectorSource = () => vectorSourceRef.value?.source;\nconst getMap = () => mapRef.value?.map;\nconst getView = () => viewRef.value?.view;\n\n// 状态图标处理缓存:key = `${src}#${mode}`,value = 处理后图片的 dataURL。\n// 同一张图片的同一状态只处理一次,后续 createIcon 直接读缓存,避免重复做像素级转换。\n// 仅放内存、不写 localStorage:图标源有限且体积小(几十 KB/张),会话级缓存完全无压力;\n// localStorage 有 5MB 配额、base64 膨胀约 37%、且同步 I/O 阻塞主线程,没有必要持久化。\nconst iconColorCache = new Map<string, string>();\n// 正在处理的缓存 key,防止同一 src+状态被并发重复触发\nconst iconColorPending = new Set<string>();\n\n// 设备图标基准高度(px)。最终高度 = ICON_SIZE * scale,宽度按原图宽高比自动计算(不变形)。\n// scale 作为「高度倍率」保留(告警/编辑=1、普通=0.8),故标点高度会随 scale 变化,见 createIcon。\nconst ICON_SIZE = 40;\n\n// 着色目标色:0 故障=橙、1 报警=红\nconst STATE_COLORS: Record<string, { r: number; g: number; b: number }> = {\n orange: { r: 255, g: 140, b: 0 },\n red: { r: 230, g: 30, b: 30 },\n};\n// 设备状态 → 处理模式:0 故障=orange、1 报警=red、4 离线=gray;\n// 2(正常)及其它(-1 未启用/缺失)返回 null,直接使用原图,不产生新图与缓存。\nconst getIconMode = (state: unknown): string | null => {\n const s = Number(state);\n if (s === 0) return \"orange\";\n if (s === 1) return \"red\";\n if (s === 4) return \"gray\";\n return null;\n};\n\n// 同步创建设备图标样式(style 函数必须同步 return):\n// 1) 状态为 0/1/4:优先使用按状态处理后的缓存图;缓存未就绪时先用原图占位,\n// 同时异步处理,完成后写缓存并刷新当前图层要素使图标更新;\n// 2) 状态为 2(正常)及其它:直接使用原图 src,不做任何处理。\nconst createIcon = (src: string, scale: number, state?: unknown): any => {\n const mode = getIconMode(state);\n let effectiveSrc = src;\n if (mode) {\n const key = `${src}#${mode}`;\n effectiveSrc = iconColorCache.get(key) || src;\n if (!iconColorCache.has(key) && !iconColorPending.has(key)) {\n iconColorPending.add(key);\n processIcon(key, src, mode, (result: string) => {\n iconColorCache.set(key, result);\n iconColorPending.delete(key);\n // eslint-disable-next-line no-use-before-define\n refreshFeaturesUsingIcon();\n });\n }\n }\n return new Style({\n image: new Icon({\n src: effectiveSrc,\n anchor: [0.5, 1],\n anchorXUnits: \"fraction\",\n anchorYUnits: \"fraction\",\n // 高度 = ICON_SIZE * scale,宽度按原图宽高比自动计算(不变形)。\n // 注意:Icon 的 height 与 scale 选项不能同时使用,因此把 scale 折进 height(标量 → 直接乘高度)。\n height: ICON_SIZE * scale,\n }),\n });\n};\n\n// 某张按状态处理后的图片就绪后,重设当前图层所有设备要素的样式,\n// 使仍使用原图占位的图标切换到处理后的状态图。\n// 依赖 index.vue 传入的 fnOverrideStyle(其内部会再次调用 createIcon 读取缓存)。\nconst refreshFeaturesUsingIcon = (): void => {\n const source = vectorSourceRef.value?.source;\n const fn = props.fnOverrideStyle;\n if (!source || typeof fn !== \"function\") return;\n source.getFeatures().forEach((feature: any) => {\n if (feature.get(\"code\")) {\n fn(feature);\n }\n });\n};\n\n// 将图片异步处理为 dataURL:mode=gray 灰度化;mode=orange/red 按目标色着色。\n// 着色保留原图亮度层次(亮部更接近目标色、暗部更暗),透明区域保持不变。\n// 失败(如跨域导致 canvas 被污染)时仅移除 pending,回退继续使用原图。\nfunction processIcon(\n key: string,\n imageSrc: string,\n mode: string,\n callback: (dataUrl: string) => void,\n): void {\n const img = new Image();\n img.crossOrigin = \"anonymous\";\n img.onload = () => {\n try {\n const canvas = document.createElement(\"canvas\");\n canvas.width = img.width;\n canvas.height = img.height;\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) return;\n // 1. 绘制原图\n ctx.drawImage(img, 0, 0);\n // 2. 获取像素数据,按状态处理(透明度通道保持不变)\n const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);\n const data = imageData.data;\n const tint = STATE_COLORS[mode];\n for (let i = 0; i < data.length; i += 4) {\n const lum = 0.299 * data[i] + 0.587 * data[i + 1] + 0.114 * data[i + 2];\n if (tint) {\n // 着色:用亮度调制目标色,保留图标明暗层次\n const factor = 0.4 + 0.6 * (lum / 255);\n data[i] = tint.r * factor;\n data[i + 1] = tint.g * factor;\n data[i + 2] = tint.b * factor;\n } else {\n // 离线:标准灰度\n data[i] = lum;\n data[i + 1] = lum;\n data[i + 2] = lum;\n }\n }\n // 3. 写回 canvas 并导出 dataURL\n ctx.putImageData(imageData, 0, 0);\n callback(canvas.toDataURL(\"image/png\"));\n } catch (error) {\n iconColorPending.delete(key);\n }\n };\n img.onerror = () => {\n iconColorPending.delete(key);\n };\n img.src = imageSrc;\n}\n\nconst clearSource = () => vectorSourceRef.value?.source?.clear();\nconst addFeature = (feature: any) =>\n vectorSourceRef.value?.source?.addFeature(feature);\nconst addFeatures = (features: any[]) =>\n vectorSourceRef.value?.source?.addFeatures(features);\nconst removeFeature = (feature: any) =>\n vectorSourceRef.value?.source?.removeFeature(feature);\nconst getFeatures = () =>\n vectorSourceRef.value?.source\n ? vectorSourceRef.value.source.getFeatures()\n : [];\nconst getZoom = () => mapRef.value?.map?.getView()?.getZoom();\nconst setZoom = (zoom: number) => mapRef.value?.map?.getView()?.setZoom(zoom);\n\nconst calculateAutoZoom = () => {\n const view = viewRef.value?.view;\n if (!view || typeof view.fit !== \"function\") return;\n // 屏幕显示大小必须取 size(底图像素尺寸),而不是容器 DOM 尺寸。\n // 这样 fit 后 resolution≈1,1 地图单位 = 1 CSS 像素,图片按 size 里的大小显示(如 800×600),\n // 不会因为用了容器尺寸而被撑满整个视口,也保证点位坐标与图片像素一一对应。\n const [width, height] = props.size as number[];\n if (!width || !height) return;\n view.fit(props.extent as unknown as Extent, {\n size: [width, height],\n padding: [10, 10, 10, 10],\n constrainResolution: false,\n nearest: false,\n });\n};\n\n// 绘制模式下,地图拖拽平移(DragPan)会与绘制交互冲突,\n// 导致按住鼠标拖动放置顶点时底图跟着平移,因此绘制期间禁用 DragPan。\nconst isDrawingMode = (): boolean =>\n props.activatedBottomBar === \"区域绘制\" ||\n props.activatedBottomBar === \"逃生路线\";\n\nconst setDragPanActive = (active: boolean): void => {\n const map = mapRef.value?.map;\n if (!map) return;\n map\n .getInteractions()\n .getArray()\n .forEach((interaction: any) => {\n if (interaction instanceof DragPan) {\n interaction.setActive(active);\n }\n });\n};\n\n// 切换底部栏按钮时,同步 DragPan 的启用/禁用状态\nwatch(\n () => props.activatedBottomBar,\n () => {\n setDragPanActive(!isDrawingMode());\n },\n);\n\ndefineExpose({\n getVectorSource,\n getMap,\n getView,\n createIcon,\n clearSource,\n addFeature,\n addFeatures,\n removeFeature,\n getFeatures,\n getZoom,\n setZoom,\n calculateAutoZoom,\n});\n\nonMounted(() => {\n nextTick(() => {\n emit(\"ready\");\n const map = mapRef.value?.map;\n if (map) {\n map.on(\"postcompose\", (e: any) => emit(\"customPostCompose\", e));\n map.on(\"pointermove\", (e: any) => emit(\"customPointerMove\", e));\n map.on(\"contextmenu\", (e: any) => emit(\"customContextMenu\", e));\n setDragPanActive(!isDrawingMode());\n }\n });\n});\n</script>\n\n<template>\n <OlMap ref=\"mapRef\" class=\"w-full\" style=\"height: 100%\">\n <OlView\n ref=\"viewRef\"\n :center=\"center\"\n :zoom=\"zoom\"\n :projection=\"pixelProjection\"\n />\n\n <OlZoomControl />\n\n <OlContextMenuControl :items=\"configMenuItems\" />\n\n <!-- 底图静态影像层:key 绑定 imgUrl+extent,二者任一变化即整体销毁重建影像层。\n 因为 OL ImageStatic 的 imageExtent 在构造后不可变,vue3-openlayers 只能靠重建 source\n 来应用新 extent;若不加 key,重建/图片异步加载期间会短暂以旧 imageExtent 渲染,\n 导致首帧图标与底图错位(再次点击楼层后才对齐) -->\n <OlImageLayer\n id=\"xkcd\"\n :key=\"`${currentImageUrl}|${extent.join(',')}`\"\n :z-index=\"-1\"\n >\n <OlSourceImageStatic\n :url=\"currentImageUrl\"\n :image-extent=\"extent\"\n :projection=\"pixelProjection\"\n />\n </OlImageLayer>\n\n <!-- 矢量图层 -->\n <OlVectorLayer :z-index=\"1\">\n <OlSourceVector ref=\"vectorSourceRef\">\n <!-- 区域设置 -->\n <OlModifyInteraction v-if=\"activatedBottomBar === '区域设置'\" />\n <!-- 区域绘制 -->\n <OlDrawInteraction\n v-if=\"activatedBottomBar === '区域绘制'\"\n type=\"Polygon\"\n :stop-click=\"true\"\n @drawend=\"fnUpdateDrawFeature\"\n />\n <!-- 逃生路线 -->\n <OlDrawInteraction\n v-if=\"activatedBottomBar === '逃生路线'\"\n ref=\"drawRef\"\n type=\"LineString\"\n :stop-click=\"true\"\n @drawend=\"fnUpdateDrawFeature2\"\n />\n <!-- 区域设置吸附 -->\n <OlSnapInteraction v-if=\"activatedBottomBar === '区域设置'\" />\n </OlSourceVector>\n\n <OlStyle :override-style-function=\"fnOverrideStyle\" />\n </OlVectorLayer>\n\n <!-- 编辑 / 区域模板 -->\n <OlTransformInteraction\n v-if=\"activatedBottomBar === '编辑' || activatedBottomBar === '区域模板'\"\n />\n\n <!-- 警告气泡:activatedPositionOverlayWaring 为告警设备坐标 -->\n <OlOverlay\n v-if=\"\n waring &&\n activatedPositionOverlayWaring &&\n activatedPositionOverlayWaring.length > 0\n \"\n :position=\"activatedPositionOverlayWaring\"\n :auto-pan=\"true\"\n :anchor=\"[0.5, 1]\"\n :offset=\"[-50, -30]\"\n >\n <div\n class=\"waring-bubble flex flex-col justify-start text-white flex-nowrap\"\n >\n <img :src=\"waringIcon\" alt=\"\" class=\"absolute w-full h-full\" />\n </div>\n </OlOverlay>\n\n <!-- 位置气泡(插槽) -->\n <OlOverlay\n v-if=\"activatedPositionOverlay.length > 0\"\n :position=\"activatedPositionOverlay\"\n :offset=\"[-175, -255]\"\n :auto-pan=\"true\"\n >\n <slot name=\"overlay\" />\n </OlOverlay>\n </OlMap>\n</template>\n"],"names":["_Map","_Layers","_Sources","_MapControls","_Interactions","_Styles","_createBlock","_unref","_createVNode","_createCommentVNode","_createElementVNode","_renderSlot"],"mappings":"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"}
@@ -134,7 +134,6 @@ export declare const ITzjPlayer: import("../../types").SFCWithInstall<import("vu
134
134
  showBottomBar: import("vue").Ref<boolean, boolean>;
135
135
  playerRef: import("vue").ShallowRef<any, any>;
136
136
  isPlaying: import("vue").Ref<boolean, boolean>;
137
- isFullscreen: import("vue").Ref<boolean, boolean>;
138
137
  isVolumeMuted: import("vue").Ref<boolean, boolean>;
139
138
  audioMsg: import("vue").Ref<{
140
139
  type: string;
@@ -147,13 +146,8 @@ export declare const ITzjPlayer: import("../../types").SFCWithInstall<import("vu
147
146
  msg: string;
148
147
  }>;
149
148
  initPlayer: () => Promise<void>;
150
- playerPlay: () => void;
151
- playerPause: () => void;
152
- playerScreenShot: () => void;
153
- playerFullscreen: (fullscreen: boolean) => void;
154
149
  handleVideoInfo: () => void;
155
150
  handleMute: (mute: boolean) => void;
156
- handleSetMute: (volume: number) => void;
157
151
  EasyPlayer: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
158
152
  url: {
159
153
  type: StringConstructor;
@@ -880,6 +874,291 @@ export declare const ITzjPlayer: import("../../types").SFCWithInstall<import("vu
880
874
  areaName: string;
881
875
  platformTypeName: string;
882
876
  pauseMode: number;
877
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any> | import("vue").DefineComponent<import("vue").ExtractPropTypes<{
878
+ url: {
879
+ type: StringConstructor;
880
+ default: string;
881
+ };
882
+ accessToken: {
883
+ type: StringConstructor;
884
+ default: string;
885
+ };
886
+ areaName: {
887
+ type: StringConstructor;
888
+ default: string;
889
+ };
890
+ deviceSerial: {
891
+ type: StringConstructor;
892
+ default: string;
893
+ };
894
+ platformTypeName: {
895
+ type: StringConstructor;
896
+ default: string;
897
+ };
898
+ debug: {
899
+ type: BooleanConstructor;
900
+ default: boolean;
901
+ };
902
+ pauseMode: {
903
+ type: NumberConstructor;
904
+ default: number;
905
+ validator: (value: number) => boolean;
906
+ };
907
+ }>, {
908
+ props: import("@vue/shared").LooseRequired<Readonly<import("vue").ExtractPropTypes<{
909
+ url: {
910
+ type: StringConstructor;
911
+ default: string;
912
+ };
913
+ accessToken: {
914
+ type: StringConstructor;
915
+ default: string;
916
+ };
917
+ areaName: {
918
+ type: StringConstructor;
919
+ default: string;
920
+ };
921
+ deviceSerial: {
922
+ type: StringConstructor;
923
+ default: string;
924
+ };
925
+ platformTypeName: {
926
+ type: StringConstructor;
927
+ default: string;
928
+ };
929
+ debug: {
930
+ type: BooleanConstructor;
931
+ default: boolean;
932
+ };
933
+ pauseMode: {
934
+ type: NumberConstructor;
935
+ default: number;
936
+ validator: (value: number) => boolean;
937
+ };
938
+ }>> & Readonly<{}> & {}>;
939
+ videoUrl: import("vue").Ref<string, string>;
940
+ errorMsg: import("vue").Ref<string, string>;
941
+ showBottomBar: import("vue").Ref<boolean, boolean>;
942
+ playerRef: import("vue").ShallowRef<any, any>;
943
+ isPlaying: import("vue").Ref<boolean, boolean>;
944
+ isVolumeMuted: import("vue").Ref<boolean, boolean>;
945
+ audioMsg: import("vue").Ref<{
946
+ type: string;
947
+ msg: string;
948
+ }, {
949
+ type: string;
950
+ msg: string;
951
+ } | {
952
+ type: string;
953
+ msg: string;
954
+ }>;
955
+ initPlayer: () => Promise<void>;
956
+ handleVideoInfo: () => void;
957
+ handleMute: (mute: boolean) => void;
958
+ EasyPlayer: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
959
+ url: {
960
+ type: StringConstructor;
961
+ default: string;
962
+ };
963
+ accessToken: {
964
+ type: StringConstructor;
965
+ default: string;
966
+ };
967
+ areaName: {
968
+ type: StringConstructor;
969
+ default: string;
970
+ };
971
+ deviceSerial: {
972
+ type: StringConstructor;
973
+ default: string;
974
+ };
975
+ platformTypeName: {
976
+ type: StringConstructor;
977
+ default: string;
978
+ };
979
+ debug: {
980
+ type: BooleanConstructor;
981
+ default: boolean;
982
+ };
983
+ pauseMode: {
984
+ type: NumberConstructor;
985
+ default: number;
986
+ validator: (value: number) => boolean;
987
+ };
988
+ }>, {
989
+ props: import("@vue/shared").LooseRequired<Readonly<import("vue").ExtractPropTypes<{
990
+ url: {
991
+ type: StringConstructor;
992
+ default: string;
993
+ };
994
+ accessToken: {
995
+ type: StringConstructor;
996
+ default: string;
997
+ };
998
+ areaName: {
999
+ type: StringConstructor;
1000
+ default: string;
1001
+ };
1002
+ deviceSerial: {
1003
+ type: StringConstructor;
1004
+ default: string;
1005
+ };
1006
+ platformTypeName: {
1007
+ type: StringConstructor;
1008
+ default: string;
1009
+ };
1010
+ debug: {
1011
+ type: BooleanConstructor;
1012
+ default: boolean;
1013
+ };
1014
+ pauseMode: {
1015
+ type: NumberConstructor;
1016
+ default: number;
1017
+ validator: (value: number) => boolean;
1018
+ };
1019
+ }>> & Readonly<{
1020
+ onPlay?: ((...args: any[]) => any) | undefined;
1021
+ onPause?: ((...args: any[]) => any) | undefined;
1022
+ onError?: ((...args: any[]) => any) | undefined;
1023
+ onVideoInfo?: ((...args: any[]) => any) | undefined;
1024
+ onTimeout?: ((...args: any[]) => any) | undefined;
1025
+ onMute?: ((...args: any[]) => any) | undefined;
1026
+ }> & {}>;
1027
+ emits: (event: "error" | "play" | "pause" | "videoInfo" | "timeout" | "mute", ...args: any[]) => void;
1028
+ slots: Readonly<{
1029
+ [name: string]: import("vue").Slot<any> | undefined;
1030
+ }>;
1031
+ customBar: import("vue").ComputedRef<import("vue").Slot<any> | undefined>;
1032
+ player: any;
1033
+ id: string;
1034
+ playerRef: import("vue").ShallowRef<HTMLDivElement | undefined, HTMLDivElement | undefined>;
1035
+ playSuccess: import("vue").Ref<boolean, boolean>;
1036
+ playUrl: import("vue").Ref<string, string>;
1037
+ videoInfo: import("vue").Ref<any, any>;
1038
+ eventHandlers: import("vue").Ref<Map<string, Function> & Omit<Map<string, Function>, keyof Map<any, any>>, Map<string, Function> | (Map<string, Function> & Omit<Map<string, Function>, keyof Map<any, any>>)>;
1039
+ waitTimer: number | null;
1040
+ restartTimer: import("vue").Ref<number | null, number | null>;
1041
+ pauseCycleTimer: import("vue").Ref<number | null, number | null>;
1042
+ resizeObserver: ResizeObserver | null;
1043
+ createRetryCount: number;
1044
+ MAX_CREATE_RETRY: number;
1045
+ isUnmounted: boolean;
1046
+ play: (url?: string) => void;
1047
+ playerPause: () => void;
1048
+ playerScreenShot: () => void;
1049
+ formatUrl: (url: string) => string;
1050
+ initPlayer: (url: string) => Promise<void>;
1051
+ removePlayerDom: () => void;
1052
+ createPlayerDom: () => Promise<HTMLDivElement>;
1053
+ createPlayer: () => Promise<void>;
1054
+ startPlayer: () => Promise<void>;
1055
+ destroy: (flag?: boolean) => void;
1056
+ }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, ("error" | "play" | "pause" | "videoInfo" | "timeout" | "mute")[], "error" | "play" | "pause" | "videoInfo" | "timeout" | "mute", import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
1057
+ url: {
1058
+ type: StringConstructor;
1059
+ default: string;
1060
+ };
1061
+ accessToken: {
1062
+ type: StringConstructor;
1063
+ default: string;
1064
+ };
1065
+ areaName: {
1066
+ type: StringConstructor;
1067
+ default: string;
1068
+ };
1069
+ deviceSerial: {
1070
+ type: StringConstructor;
1071
+ default: string;
1072
+ };
1073
+ platformTypeName: {
1074
+ type: StringConstructor;
1075
+ default: string;
1076
+ };
1077
+ debug: {
1078
+ type: BooleanConstructor;
1079
+ default: boolean;
1080
+ };
1081
+ pauseMode: {
1082
+ type: NumberConstructor;
1083
+ default: number;
1084
+ validator: (value: number) => boolean;
1085
+ };
1086
+ }>> & Readonly<{
1087
+ onPlay?: ((...args: any[]) => any) | undefined;
1088
+ onPause?: ((...args: any[]) => any) | undefined;
1089
+ onError?: ((...args: any[]) => any) | undefined;
1090
+ onVideoInfo?: ((...args: any[]) => any) | undefined;
1091
+ onTimeout?: ((...args: any[]) => any) | undefined;
1092
+ onMute?: ((...args: any[]) => any) | undefined;
1093
+ }>, {
1094
+ url: string;
1095
+ accessToken: string;
1096
+ debug: boolean;
1097
+ deviceSerial: string;
1098
+ areaName: string;
1099
+ platformTypeName: string;
1100
+ pauseMode: number;
1101
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
1102
+ ErrorPage: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
1103
+ videoName: {
1104
+ type: StringConstructor;
1105
+ default: string;
1106
+ };
1107
+ message: {
1108
+ type: StringConstructor;
1109
+ default: string;
1110
+ };
1111
+ }>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
1112
+ videoName: {
1113
+ type: StringConstructor;
1114
+ default: string;
1115
+ };
1116
+ message: {
1117
+ type: StringConstructor;
1118
+ default: string;
1119
+ };
1120
+ }>> & Readonly<{}>, {
1121
+ message: string;
1122
+ videoName: string;
1123
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
1124
+ }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
1125
+ url: {
1126
+ type: StringConstructor;
1127
+ default: string;
1128
+ };
1129
+ accessToken: {
1130
+ type: StringConstructor;
1131
+ default: string;
1132
+ };
1133
+ areaName: {
1134
+ type: StringConstructor;
1135
+ default: string;
1136
+ };
1137
+ deviceSerial: {
1138
+ type: StringConstructor;
1139
+ default: string;
1140
+ };
1141
+ platformTypeName: {
1142
+ type: StringConstructor;
1143
+ default: string;
1144
+ };
1145
+ debug: {
1146
+ type: BooleanConstructor;
1147
+ default: boolean;
1148
+ };
1149
+ pauseMode: {
1150
+ type: NumberConstructor;
1151
+ default: number;
1152
+ validator: (value: number) => boolean;
1153
+ };
1154
+ }>> & Readonly<{}>, {
1155
+ url: string;
1156
+ accessToken: string;
1157
+ debug: boolean;
1158
+ deviceSerial: string;
1159
+ areaName: string;
1160
+ platformTypeName: string;
1161
+ pauseMode: number;
883
1162
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any> | import("vue").DefineComponent<import("vue").ExtractPropTypes<{
884
1163
  url: {
885
1164
  type: StringConstructor;
@@ -5,16 +5,16 @@ var __defProp = Object.defineProperty;
5
5
  var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
6
6
  function getAccessKey() {
7
7
  if (typeof localStorage !== "undefined") {
8
- return localStorage.getItem("CTYUNAK") || "9XCW5FIP7RX85ZZ9FJDD";
8
+ return localStorage.getItem("CTYUNAK") || "";
9
9
  }
10
- return "9XCW5FIP7RX85ZZ9FJDD";
10
+ return "";
11
11
  }
12
12
  __name(getAccessKey, "getAccessKey");
13
13
  function getSecretKey() {
14
14
  if (typeof localStorage !== "undefined") {
15
- return localStorage.getItem("CTYUNSK") || "qTBbJjIo8RZmDMqAN7OQlg1O13j6R5OjYx40nLrK";
15
+ return localStorage.getItem("CTYUNSK") || "";
16
16
  }
17
- return "qTBbJjIo8RZmDMqAN7OQlg1O13j6R5OjYx40nLrK";
17
+ return "";
18
18
  }
19
19
  __name(getSecretKey, "getSecretKey");
20
20
  const AK = getAccessKey();
@@ -52,6 +52,11 @@ ${HashedRequestPayload}`;
52
52
  ${RequestTimestamp}
53
53
  ${CredentialScope}
54
54
  ${HashedCanonicalRequest}`;
55
+ if (!AK || !SK) {
56
+ console.warn(
57
+ "[tzj-player] \u5929\u7FFC\u4E91\u7B7E\u540D\u5BC6\u94A5 CTYUNAK / CTYUNSK \u4E3A\u7A7A\uFF0C\u7B7E\u540D\u7ED3\u679C\u5C06\u4E0D\u88AB\u670D\u52A1\u7AEF\u8BA4\u53EF\uFF0C\u8BF7\u786E\u8BA4\u5DF2\u5199\u5165 localStorage"
58
+ );
59
+ }
55
60
  const dateString = formatTimestamp(timestamp);
56
61
  const secretKey = `CT${SK}`;
57
62
  const SecretDate = CryptoJS.HmacSHA256(dateString, secretKey);
@@ -1 +1 @@
1
- {"version":3,"file":"ctyun-player.mjs","sources":["../../../../../../../packages/components/tzj-player/src/ctyun-player.ts"],"sourcesContent":["import axios from \"axios\";\nimport CryptoJS from \"crypto-js\";\n\n/**\n * 获取访问密钥,支持 SSR 环境\n */\nfunction getAccessKey(): string {\n if (typeof localStorage !== \"undefined\") {\n return localStorage.getItem(\"CTYUNAK\") || \"9XCW5FIP7RX85ZZ9FJDD\";\n }\n return \"9XCW5FIP7RX85ZZ9FJDD\";\n}\n\n/**\n * 获取签名密钥,支持 SSR 环境\n */\nfunction getSecretKey(): string {\n if (typeof localStorage !== \"undefined\") {\n return (\n localStorage.getItem(\"CTYUNSK\") ||\n \"qTBbJjIo8RZmDMqAN7OQlg1O13j6R5OjYx40nLrK\"\n );\n }\n return \"qTBbJjIo8RZmDMqAN7OQlg1O13j6R5OjYx40nLrK\";\n}\n\nconst AK = getAccessKey();\nconst SK = getSecretKey();\n\n/**\n * 获取UNIX时间戳,精确到秒\n */\nfunction getUnixTimestamp() {\n return Math.floor(Date.now() / 1000);\n}\n\n/**\n * 将UNIX时间戳转成YYYY-MM-DD格式\n */\nfunction formatTimestamp(timestamp: number) {\n const date = new Date(timestamp * 1000);\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, \"0\");\n const day = String(date.getDate()).padStart(2, \"0\");\n return `${year}-${month}-${day}`;\n}\n\n/**\n * 拼接规范请求串\n * @param HTTPRequestMethod 请求方法\n * @param CanonicalURI 请求 URI\n * @param CanonicalQueryString 请求参数\n * @param CanonicalHeaders\n * @param SignedHeaders\n * @param body 请求体\n * @param timestamp 时间戳\n */\nfunction sign(\n HTTPRequestMethod: \"GET\" | \"POST\",\n CanonicalURI: string,\n CanonicalQueryString: string = \"\",\n CanonicalHeaders: string | Record<string, any> = \"\",\n SignedHeaders: string | number = \"\",\n body: Record<string, any> | null,\n timestamp: number,\n) {\n // 拼接规范请求串\n const HashedRequestPayload = CryptoJS.SHA256(\n body ? JSON.stringify(body) : \"\",\n ).toString(CryptoJS.enc.Hex);\n const CanonicalRequest = `${HTTPRequestMethod}\\n${CanonicalURI}\\n${CanonicalQueryString}\\n${CanonicalHeaders}\\n\\n${SignedHeaders}\\n${\n HashedRequestPayload\n }`;\n // console.log(\"\\n--- CanonicalRequest ---\");\n // console.log(CanonicalRequest);\n\n // 拼接待签名字符串\n const Algorithm = \"CT-HMAC-SHA256\";\n const RequestTimestamp = timestamp;\n const CredentialScope = `${formatTimestamp(timestamp)}/vss`;\n const HashedCanonicalRequest = CryptoJS.SHA256(CanonicalRequest).toString(\n CryptoJS.enc.Hex,\n );\n const StringToSign = `${Algorithm}\\n${RequestTimestamp}\\n${CredentialScope}\\n${HashedCanonicalRequest}`;\n // console.log(\"\\n--- StringToSign ---\");\n // console.log(StringToSign);\n\n // 计算签名\n // 第一步:计算SecretDate\n const dateString = formatTimestamp(timestamp);\n const secretKey = `CT${SK}`;\n const SecretDate = CryptoJS.HmacSHA256(dateString, secretKey);\n // console.log(\"\\n--- SecretDate ---\");\n // console.log(SecretDate.toString(CryptoJS.enc.Hex));\n\n // 第二步:计算SigningKey\n const SigningKey = CryptoJS.HmacSHA256(\"vss\", SecretDate);\n // console.log(\"\\n--- SigningKey ---\");\n // console.log(SigningKey.toString(CryptoJS.enc.Hex));\n\n // 第三步:计算最终签名\n const Signature = CryptoJS.HmacSHA256(StringToSign, SigningKey).toString(\n CryptoJS.enc.Hex,\n );\n // console.log(\"\\n--- Signature ---\");\n // console.log(Signature);\n\n // 构建Authorization头\n return `${Algorithm} Credential=${AK}/${CredentialScope}, SignedHeaders=${SignedHeaders}, Signature=${Signature}`;\n}\n\nexport async function ctyunRequest(\n method: \"GET\" | \"POST\",\n url: string,\n params?: {\n query?: Record<string, any> | null;\n body?: Record<string, any> | null;\n },\n): Promise<any> {\n const timestamp = getUnixTimestamp();\n // const timestamp = 1756374060;\n let queryString = \"\";\n let uri = url;\n if (params && params?.query) {\n const temp = params.query;\n queryString = Object.keys(temp)\n .map((key) => `${key}=${temp[key]}`)\n .join(\"&\");\n uri = `${uri}?${queryString}`;\n }\n const Authorization = sign(\n method,\n url,\n queryString,\n `host:vssapi.ctyun.cn\\ntimestamp:${timestamp}`,\n \"host;timestamp\",\n params?.body || null,\n timestamp,\n );\n return new Promise((resolve, reject) => {\n axios({\n method,\n url: `/ctyun${uri}`,\n headers: {\n Authorization,\n Version: \"2021-11-25\",\n Timestamp: timestamp,\n },\n data: params?.body,\n })\n .then((res) => {\n // console.log(res);\n resolve(res.data);\n })\n .catch((err) => {\n // console.log(err);\n if (err.status === 403) {\n resolve(err.response?.data);\n } else {\n reject(err.response?.data);\n }\n });\n });\n}\n\n/**\n * 通过设备ID获取播放流地址\n */\nexport async function GetCtyunDeviceVideoUrl(\n deviceId: string,\n): Promise<string> {\n try {\n // 参数校验\n if (!deviceId) {\n console.warn(\"Device ID is required\");\n return \"\";\n }\n\n const result = await ctyunRequest(\n \"GET\",\n `/devices/${deviceId}/live/stream`,\n {\n query: {\n StreamNum: 1,\n },\n },\n );\n console.log(result);\n // 检查响应状态\n if (!result || result.statusCode !== 200) {\n console.error(\"Failed to get device video stream\", result);\n return \"\";\n }\n\n // 安全地提取播放URL\n const liveStream = result.returnObj?.LiveStreams?.[0];\n const flvUrl = liveStream?.PlayUrl?.FlvUrl;\n\n console.log(flvUrl);\n if (flvUrl) {\n return flvUrl;\n }\n\n console.warn(\"No FLV URL found in response\", result);\n return \"\";\n } catch (error) {\n console.error(\"Error getting device video URL:\", error);\n return \"\";\n }\n}\n\n/**\n * 获取语音对讲WebSocket地址\n */\nexport async function GetCtyunDeviceAudioUrl(deviceId: string): Promise<any> {\n try {\n // 参数校验\n if (!deviceId) {\n console.warn(\"Device ID is required\");\n return {};\n }\n\n const result = await ctyunRequest(\n \"POST\",\n `/devices/${deviceId}/startTalk`,\n {\n body: {\n // 传输优先级 tcp/udp\n TransPriority: \"tcp\",\n // 接入协议\n InProtocol: \"gb28181\",\n },\n },\n );\n console.log(result);\n // 检查响应状态\n if (!result || result.statusCode !== 200) {\n console.error(\"Failed to get device audio stream\", result);\n return {};\n }\n if (result?.returnObj) {\n return result?.returnObj;\n }\n\n console.warn(\"No FLV URL found in response\", result);\n return {\n audioUrl: \"\",\n audioKey: \"\",\n };\n } catch (error) {\n console.error(\"Error getting device audio URL:\", error);\n return {\n audioUrl: \"\",\n audioKey: \"\",\n };\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ctyun-player.mjs","sources":["../../../../../../../packages/components/tzj-player/src/ctyun-player.ts"],"sourcesContent":["import axios from \"axios\";\nimport CryptoJS from \"crypto-js\";\n\n/**\n * 获取访问密钥,支持 SSR 环境\n */\nfunction getAccessKey(): string {\n if (typeof localStorage !== \"undefined\") {\n return localStorage.getItem(\"CTYUNAK\") || \"\";\n }\n return \"\";\n}\n\n/**\n * 获取签名密钥,支持 SSR 环境\n */\nfunction getSecretKey(): string {\n if (typeof localStorage !== \"undefined\") {\n return localStorage.getItem(\"CTYUNSK\") || \"\";\n }\n return \"\";\n}\n\nconst AK = getAccessKey();\nconst SK = getSecretKey();\n\n/**\n * 获取UNIX时间戳,精确到秒\n */\nfunction getUnixTimestamp() {\n return Math.floor(Date.now() / 1000);\n}\n\n/**\n * 将UNIX时间戳转成YYYY-MM-DD格式\n */\nfunction formatTimestamp(timestamp: number) {\n const date = new Date(timestamp * 1000);\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, \"0\");\n const day = String(date.getDate()).padStart(2, \"0\");\n return `${year}-${month}-${day}`;\n}\n\n/**\n * 拼接规范请求串\n * @param HTTPRequestMethod 请求方法\n * @param CanonicalURI 请求 URI\n * @param CanonicalQueryString 请求参数\n * @param CanonicalHeaders\n * @param SignedHeaders\n * @param body 请求体\n * @param timestamp 时间戳\n */\nfunction sign(\n HTTPRequestMethod: \"GET\" | \"POST\",\n CanonicalURI: string,\n CanonicalQueryString: string = \"\",\n CanonicalHeaders: string | Record<string, any> = \"\",\n SignedHeaders: string | number = \"\",\n body: Record<string, any> | null,\n timestamp: number,\n) {\n // 拼接规范请求串\n const HashedRequestPayload = CryptoJS.SHA256(\n body ? JSON.stringify(body) : \"\",\n ).toString(CryptoJS.enc.Hex);\n const CanonicalRequest = `${HTTPRequestMethod}\\n${CanonicalURI}\\n${CanonicalQueryString}\\n${CanonicalHeaders}\\n\\n${SignedHeaders}\\n${\n HashedRequestPayload\n }`;\n // console.log(\"\\n--- CanonicalRequest ---\");\n // console.log(CanonicalRequest);\n\n // 拼接待签名字符串\n const Algorithm = \"CT-HMAC-SHA256\";\n const RequestTimestamp = timestamp;\n const CredentialScope = `${formatTimestamp(timestamp)}/vss`;\n const HashedCanonicalRequest = CryptoJS.SHA256(CanonicalRequest).toString(\n CryptoJS.enc.Hex,\n );\n const StringToSign = `${Algorithm}\\n${RequestTimestamp}\\n${CredentialScope}\\n${HashedCanonicalRequest}`;\n // console.log(\"\\n--- StringToSign ---\");\n // console.log(StringToSign);\n\n // 计算签名\n if (!AK || !SK) {\n console.warn(\n \"[tzj-player] 天翼云签名密钥 CTYUNAK / CTYUNSK 为空,签名结果将不被服务端认可,请确认已写入 localStorage\",\n );\n }\n // 第一步:计算SecretDate\n const dateString = formatTimestamp(timestamp);\n const secretKey = `CT${SK}`;\n const SecretDate = CryptoJS.HmacSHA256(dateString, secretKey);\n // console.log(\"\\n--- SecretDate ---\");\n // console.log(SecretDate.toString(CryptoJS.enc.Hex));\n\n // 第二步:计算SigningKey\n const SigningKey = CryptoJS.HmacSHA256(\"vss\", SecretDate);\n // console.log(\"\\n--- SigningKey ---\");\n // console.log(SigningKey.toString(CryptoJS.enc.Hex));\n\n // 第三步:计算最终签名\n const Signature = CryptoJS.HmacSHA256(StringToSign, SigningKey).toString(\n CryptoJS.enc.Hex,\n );\n // console.log(\"\\n--- Signature ---\");\n // console.log(Signature);\n\n // 构建Authorization头\n return `${Algorithm} Credential=${AK}/${CredentialScope}, SignedHeaders=${SignedHeaders}, Signature=${Signature}`;\n}\n\nexport async function ctyunRequest(\n method: \"GET\" | \"POST\",\n url: string,\n params?: {\n query?: Record<string, any> | null;\n body?: Record<string, any> | null;\n },\n): Promise<any> {\n const timestamp = getUnixTimestamp();\n // const timestamp = 1756374060;\n let queryString = \"\";\n let uri = url;\n if (params && params?.query) {\n const temp = params.query;\n queryString = Object.keys(temp)\n .map((key) => `${key}=${temp[key]}`)\n .join(\"&\");\n uri = `${uri}?${queryString}`;\n }\n const Authorization = sign(\n method,\n url,\n queryString,\n `host:vssapi.ctyun.cn\\ntimestamp:${timestamp}`,\n \"host;timestamp\",\n params?.body || null,\n timestamp,\n );\n return new Promise((resolve, reject) => {\n axios({\n method,\n url: `/ctyun${uri}`,\n headers: {\n Authorization,\n Version: \"2021-11-25\",\n Timestamp: timestamp,\n },\n data: params?.body,\n })\n .then((res) => {\n // console.log(res);\n resolve(res.data);\n })\n .catch((err) => {\n // console.log(err);\n if (err.status === 403) {\n resolve(err.response?.data);\n } else {\n reject(err.response?.data);\n }\n });\n });\n}\n\n/**\n * 通过设备ID获取播放流地址\n */\nexport async function GetCtyunDeviceVideoUrl(\n deviceId: string,\n): Promise<string> {\n try {\n // 参数校验\n if (!deviceId) {\n console.warn(\"Device ID is required\");\n return \"\";\n }\n\n const result = await ctyunRequest(\n \"GET\",\n `/devices/${deviceId}/live/stream`,\n {\n query: {\n StreamNum: 1,\n },\n },\n );\n console.log(result);\n // 检查响应状态\n if (!result || result.statusCode !== 200) {\n console.error(\"Failed to get device video stream\", result);\n return \"\";\n }\n\n // 安全地提取播放URL\n const liveStream = result.returnObj?.LiveStreams?.[0];\n const flvUrl = liveStream?.PlayUrl?.FlvUrl;\n\n console.log(flvUrl);\n if (flvUrl) {\n return flvUrl;\n }\n\n console.warn(\"No FLV URL found in response\", result);\n return \"\";\n } catch (error) {\n console.error(\"Error getting device video URL:\", error);\n return \"\";\n }\n}\n\n/**\n * 获取语音对讲WebSocket地址\n */\nexport async function GetCtyunDeviceAudioUrl(deviceId: string): Promise<any> {\n try {\n // 参数校验\n if (!deviceId) {\n console.warn(\"Device ID is required\");\n return {};\n }\n\n const result = await ctyunRequest(\n \"POST\",\n `/devices/${deviceId}/startTalk`,\n {\n body: {\n // 传输优先级 tcp/udp\n TransPriority: \"tcp\",\n // 接入协议\n InProtocol: \"gb28181\",\n },\n },\n );\n console.log(result);\n // 检查响应状态\n if (!result || result.statusCode !== 200) {\n console.error(\"Failed to get device audio stream\", result);\n return {};\n }\n if (result?.returnObj) {\n return result?.returnObj;\n }\n\n console.warn(\"No FLV URL found in response\", result);\n return {\n audioUrl: \"\",\n audioKey: \"\",\n };\n } catch (error) {\n console.error(\"Error getting device audio URL:\", error);\n return {\n audioUrl: \"\",\n audioKey: \"\",\n };\n }\n}\n"],"names":[],"mappings":"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"}