@yimou6/common-ui 1.13.26 → 1.13.28

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 (63) 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 +14 -14
  4. package/cdn/index.cdn.mjs.map +1 -1
  5. package/cdn/index.css +1 -1
  6. package/es/components/geoMark/index.d.ts +28 -29
  7. package/es/components/geoMark/src/assets/default.png.mjs.map +1 -0
  8. package/es/components/geoMark/src/assets/waring.png.mjs.map +1 -0
  9. package/es/components/geoMark/src/assets//346/226/260/345/274/271/346/241/206.png.mjs.map +1 -0
  10. package/es/components/geoMark/src/assets//347/201/255/347/201/253/345/231/250.png.mjs.map +1 -0
  11. package/es/components/geoMark/src/floor.vue2.mjs.map +1 -0
  12. package/es/components/geoMark/src/geoMark.vue.d.ts +28 -29
  13. package/es/components/geoMark/src/geoMark.vue2.mjs +227 -218
  14. package/es/components/geoMark/src/geoMark.vue2.mjs.map +1 -1
  15. package/es/components/geoMark/src/openMap.vue.d.ts +20 -21
  16. package/es/components/geoMark/src/openMap.vue2.mjs +11 -13
  17. package/es/components/geoMark/src/openMap.vue2.mjs.map +1 -1
  18. package/es/components/tzj-player/src/yunzhiyan.mjs +22 -19
  19. package/es/components/tzj-player/src/yunzhiyan.mjs.map +1 -1
  20. package/lib/components/geoMark/index.d.ts +28 -29
  21. package/lib/components/geoMark/src/assets/default.png.js.map +1 -0
  22. package/lib/components/geoMark/src/assets/waring.png.js.map +1 -0
  23. package/lib/components/geoMark/src/assets//346/226/260/345/274/271/346/241/206.png.js.map +1 -0
  24. package/lib/components/geoMark/src/assets//347/201/255/347/201/253/345/231/250.png.js.map +1 -0
  25. package/lib/components/geoMark/src/floor.vue2.js.map +1 -0
  26. package/lib/components/geoMark/src/geoMark.vue.d.ts +28 -29
  27. package/lib/components/geoMark/src/geoMark.vue2.js +227 -218
  28. package/lib/components/geoMark/src/geoMark.vue2.js.map +1 -1
  29. package/lib/components/geoMark/src/openMap.vue.d.ts +20 -21
  30. package/lib/components/geoMark/src/openMap.vue2.js +11 -13
  31. package/lib/components/geoMark/src/openMap.vue2.js.map +1 -1
  32. package/lib/components/tzj-player/src/yunzhiyan.js +22 -19
  33. package/lib/components/tzj-player/src/yunzhiyan.js.map +1 -1
  34. package/package.json +1 -1
  35. package/theme-default/i-geo-mark-utils.css +1 -0
  36. package/theme-default/i-geo-mark.css +1 -1
  37. package/theme-default/index.css +1 -1
  38. package/es/components/geoMark/src/default.png.mjs.map +0 -1
  39. package/es/components/geoMark/src/floorRight/floor.vue2.mjs.map +0 -1
  40. package/es/components/geoMark/src/waring.png.mjs.map +0 -1
  41. package/es/components/geoMark/src//346/226/260/345/274/271/346/241/206.png.mjs.map +0 -1
  42. package/es/components/geoMark/src//347/201/255/347/201/253/345/231/250.png.mjs.map +0 -1
  43. package/lib/components/geoMark/src/default.png.js.map +0 -1
  44. package/lib/components/geoMark/src/floorRight/floor.vue2.js.map +0 -1
  45. package/lib/components/geoMark/src/waring.png.js.map +0 -1
  46. package/lib/components/geoMark/src//346/226/260/345/274/271/346/241/206.png.js.map +0 -1
  47. package/lib/components/geoMark/src//347/201/255/347/201/253/345/231/250.png.js.map +0 -1
  48. /package/es/components/geoMark/src/{default.png.mjs → assets/default.png.mjs} +0 -0
  49. /package/es/components/geoMark/src/{waring.png.mjs → assets/waring.png.mjs} +0 -0
  50. /package/es/components/geoMark/src/{ → assets/}/346/226/260/345/274/271/346/241/206.png.mjs" +0 -0
  51. /package/es/components/geoMark/src/{ → assets/}/347/201/255/347/201/253/345/231/250.png.mjs" +0 -0
  52. /package/es/components/geoMark/src/{floorRight/floor.vue.d.ts → floor.vue.d.ts} +0 -0
  53. /package/es/components/geoMark/src/{floorRight/floor.vue.mjs → floor.vue.mjs} +0 -0
  54. /package/es/components/geoMark/src/{floorRight/floor.vue.mjs.map → floor.vue.mjs.map} +0 -0
  55. /package/es/components/geoMark/src/{floorRight/floor.vue2.mjs → floor.vue2.mjs} +0 -0
  56. /package/lib/components/geoMark/src/{default.png.js → assets/default.png.js} +0 -0
  57. /package/lib/components/geoMark/src/{waring.png.js → assets/waring.png.js} +0 -0
  58. /package/lib/components/geoMark/src/{ → assets/}/346/226/260/345/274/271/346/241/206.png.js" +0 -0
  59. /package/lib/components/geoMark/src/{ → assets/}/347/201/255/347/201/253/345/231/250.png.js" +0 -0
  60. /package/lib/components/geoMark/src/{floorRight/floor.vue.d.ts → floor.vue.d.ts} +0 -0
  61. /package/lib/components/geoMark/src/{floorRight/floor.vue.js → floor.vue.js} +0 -0
  62. /package/lib/components/geoMark/src/{floorRight/floor.vue.js.map → floor.vue.js.map} +0 -0
  63. /package/lib/components/geoMark/src/{floorRight/floor.vue2.js → floor.vue2.js} +0 -0
@@ -30,17 +30,17 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
30
30
  extent: { type: Array, default: /* @__PURE__ */ __name(() => [0, 0, 1024, 968], "default") },
31
31
  configMenuItems: { type: Array, default: /* @__PURE__ */ __name(() => [], "default") },
32
32
  activatedBottomBar: { type: String, default: "" },
33
- _waring: { type: [String, Number, null], default: null },
33
+ waring: { type: [String, Number, null], default: null },
34
34
  activatedPositionOverlayWaring: { type: Array, default: /* @__PURE__ */ __name(() => [], "default") },
35
35
  activatedPositionOverlay: { type: Array, default: /* @__PURE__ */ __name(() => [], "default") },
36
36
  activatedPropertiesOverlay: { type: Object, default: /* @__PURE__ */ __name(() => ({}), "default") },
37
- list_title: { type: String, default: "" },
37
+ listTitle: { type: String, default: "" },
38
38
  alarmType: { type: String, default: "" },
39
39
  svgOverlay: { type: String, default: "" },
40
40
  waringIcon: { type: String, default: "" },
41
- FnUpdateDrawFeature: { type: Function, default: void 0 },
42
- FnUpdateDrawFeature2: { type: Function, default: void 0 },
43
- FnOverrideStyle: { type: Function, default: void 0 }
41
+ fnUpdateDrawFeature: { type: Function, default: void 0 },
42
+ fnUpdateDrawFeature2: { type: Function, default: void 0 },
43
+ fnOverrideStyle: { type: Function, default: void 0 }
44
44
  },
45
45
  emits: [
46
46
  "ready",
@@ -69,7 +69,6 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
69
69
  const mapRef = ref(null);
70
70
  const viewRef = ref(null);
71
71
  const vectorSourceRef = ref(null);
72
- const drawRef = ref(null);
73
72
  const currentImageUrl = toRef(props, "imgUrl");
74
73
  const pixelProjection = new Projection({
75
74
  code: "xkcd-image",
@@ -160,7 +159,7 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
160
159
  const refreshFeaturesUsingIcon = /* @__PURE__ */ __name(() => {
161
160
  var _a;
162
161
  const source = (_a = vectorSourceRef.value) == null ? void 0 : _a.source;
163
- const fn = props.FnOverrideStyle;
162
+ const fn = props.fnOverrideStyle;
164
163
  if (!source || typeof fn !== "function") return;
165
164
  source.getFeatures().forEach((feature) => {
166
165
  if (feature.get("code")) {
@@ -347,16 +346,15 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
347
346
  key: 1,
348
347
  type: "Polygon",
349
348
  "stop-click": true,
350
- onDrawend: __props.FnUpdateDrawFeature
349
+ onDrawend: __props.fnUpdateDrawFeature
351
350
  }, null, 8, ["onDrawend"])) : createCommentVNode("v-if", true),
352
351
  createCommentVNode(" \u9003\u751F\u8DEF\u7EBF "),
353
352
  __props.activatedBottomBar === "\u9003\u751F\u8DEF\u7EBF" ? (openBlock(), createBlock(unref(OlDrawInteraction), {
354
353
  key: 2,
355
- ref_key: "drawRef",
356
- ref: drawRef,
354
+ ref: "drawRef",
357
355
  type: "LineString",
358
356
  "stop-click": true,
359
- onDrawend: __props.FnUpdateDrawFeature2
357
+ onDrawend: __props.fnUpdateDrawFeature2
360
358
  }, null, 8, ["onDrawend"])) : createCommentVNode("v-if", true),
361
359
  createCommentVNode(" \u533A\u57DF\u8BBE\u7F6E\u5438\u9644 "),
362
360
  __props.activatedBottomBar === "\u533A\u57DF\u8BBE\u7F6E" ? (openBlock(), createBlock(unref(OlSnapInteraction), { key: 3 })) : createCommentVNode("v-if", true)
@@ -367,7 +365,7 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
367
365
  512
368
366
  /* NEED_PATCH */
369
367
  ),
370
- createVNode(unref(OlStyle), { "override-style-function": __props.FnOverrideStyle }, null, 8, ["override-style-function"])
368
+ createVNode(unref(OlStyle), { "override-style-function": __props.fnOverrideStyle }, null, 8, ["override-style-function"])
371
369
  ]),
372
370
  _: 1
373
371
  /* STABLE */
@@ -375,7 +373,7 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
375
373
  createCommentVNode(" \u7F16\u8F91 / \u533A\u57DF\u6A21\u677F "),
376
374
  __props.activatedBottomBar === "\u7F16\u8F91" || __props.activatedBottomBar === "\u533A\u57DF\u6A21\u677F" ? (openBlock(), createBlock(unref(OlTransformInteraction), { key: 0 })) : createCommentVNode("v-if", true),
377
375
  createCommentVNode(" \u8B66\u544A\u6C14\u6CE1\uFF1AactivatedPositionOverlayWaring \u4E3A\u544A\u8B66\u8BBE\u5907\u5750\u6807 "),
378
- __props._waring && __props.activatedPositionOverlayWaring && __props.activatedPositionOverlayWaring.length > 0 ? (openBlock(), createBlock(unref(OlOverlay), {
376
+ __props.waring && __props.activatedPositionOverlayWaring && __props.activatedPositionOverlayWaring.length > 0 ? (openBlock(), createBlock(unref(OlOverlay), {
379
377
  key: 1,
380
378
  position: __props.activatedPositionOverlayWaring,
381
379
  "auto-pan": true,
@@ -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 list_title: { 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 drawRef = 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 container = document.getElementById(\"ypc-map-container\");\n if (!container) return;\n const view = viewRef.value?.view;\n if (view && typeof view.fit === \"function\") {\n view.fit(props.extent as unknown as Extent, {\n size: [container.clientWidth, container.clientHeight],\n padding: [10, 10, 10, 10],\n constrainResolution: false,\n nearest: false,\n });\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// 着色目标色: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 container = document.getElementById(\"ypc-map-container\");\n if (!container) return;\n const view = viewRef.value?.view;\n if (view && typeof view.fit === \"function\") {\n view.fit(props.extent as unknown as Extent, {\n size: [container.clientWidth, container.clientHeight],\n padding: [10, 10, 10, 10],\n constrainResolution: false,\n nearest: false,\n });\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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"}
@@ -4,21 +4,24 @@ var __defProp = Object.defineProperty;
4
4
  var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
5
5
  function getAccessKey() {
6
6
  if (typeof localStorage !== "undefined") {
7
- return localStorage.getItem("YZYAK") || "F169AE4D261B4E17BAE7872BB1450CF33227";
7
+ return localStorage.getItem("YZYAK") || "";
8
8
  }
9
- return "F169AE4D261B4E17BAE7872BB1450CF33227";
9
+ return "";
10
10
  }
11
11
  __name(getAccessKey, "getAccessKey");
12
12
  function getSecretKey() {
13
13
  if (typeof localStorage !== "undefined") {
14
- return localStorage.getItem("YZYSK") || "65B84A07533A463BA14F7AC179C0D4BB5362";
14
+ return localStorage.getItem("YZYSK") || "";
15
15
  }
16
- return "65B84A07533A463BA14F7AC179C0D4BB5362";
16
+ return "";
17
17
  }
18
18
  __name(getSecretKey, "getSecretKey");
19
- const ACCESS_KEY = getAccessKey();
20
- const SECRET_KEY = getSecretKey();
21
- function sign(headers, params, sk = SECRET_KEY) {
19
+ function sign(headers, params, sk = getSecretKey()) {
20
+ if (!sk) {
21
+ console.warn(
22
+ "[tzj-player] \u7B7E\u540D\u5BC6\u94A5 YZYSK \u4E3A\u7A7A\uFF0C\u7B7E\u540D\u7ED3\u679C\u5C06\u4E0D\u88AB\u670D\u52A1\u7AEF\u8BA4\u53EF\uFF0C\u8BF7\u786E\u8BA4\u5DF2\u5199\u5165 localStorage"
23
+ );
24
+ }
22
25
  const obj = Object.assign({}, headers, params);
23
26
  const keys = Object.keys(obj).sort();
24
27
  let str = "";
@@ -39,10 +42,10 @@ async function GetYunZhiYanDeviceChannel(deviceId) {
39
42
  const headers = {
40
43
  algorithm: "HmacSHA256",
41
44
  requestTime: Date.now(),
42
- accessKey: ACCESS_KEY
45
+ accessKey: getAccessKey()
43
46
  };
44
47
  const params = { deviceId };
45
- headers.sign = sign(headers, params, SECRET_KEY);
48
+ headers.sign = sign(headers, params);
46
49
  const controller = new AbortController();
47
50
  const timeoutId = setTimeout(() => controller.abort(), 1e4);
48
51
  const response = await fetch("/vsuap-platform-api/v1/device/queryChannel", {
@@ -93,10 +96,10 @@ async function GetYunZhiYanDeviceVideoUrl(deviceId, channelCodeId) {
93
96
  const headers = {
94
97
  algorithm: "HmacSHA256",
95
98
  requestTime: Date.now(),
96
- accessKey: ACCESS_KEY
99
+ accessKey: getAccessKey()
97
100
  };
98
101
  const params = { deviceId, channelCodeId };
99
- headers.sign = sign(headers, params, SECRET_KEY);
102
+ headers.sign = sign(headers, params);
100
103
  const controller = new AbortController();
101
104
  const timeoutId = setTimeout(() => controller.abort(), 1e4);
102
105
  const response = await fetch("/vsuap-platform-api/v1/device/playOn", {
@@ -147,10 +150,10 @@ async function GetYunZhiYanOpenVoiceIntercom(deviceId) {
147
150
  const headers = {
148
151
  algorithm: "HmacSHA256",
149
152
  requestTime: Date.now(),
150
- accessKey: ACCESS_KEY
153
+ accessKey: getAccessKey()
151
154
  };
152
155
  const params = { deviceId, deviceType: "1", enableAudioSign: "1" };
153
- headers.sign = sign(headers, params, SECRET_KEY);
156
+ headers.sign = sign(headers, params);
154
157
  const controller = new AbortController();
155
158
  const timeoutId = setTimeout(() => controller.abort(), 1e4);
156
159
  const response = await fetch("/vsuap-platform-api/v1/device/broadcastOn", {
@@ -201,10 +204,10 @@ async function GetYunZhiYanUserPlaySecretKey(taskId) {
201
204
  const headers = {
202
205
  algorithm: "HmacSHA256",
203
206
  requestTime: Date.now(),
204
- accessKey: ACCESS_KEY
207
+ accessKey: getAccessKey()
205
208
  };
206
209
  const params = {};
207
- headers.sign = sign(headers, params, SECRET_KEY);
210
+ headers.sign = sign(headers, params);
208
211
  const controller = new AbortController();
209
212
  const timeoutId = setTimeout(() => controller.abort(), 1e4);
210
213
  const response = await fetch(
@@ -259,10 +262,10 @@ async function GetYunZhiYanCloseVoiceIntercom(deviceId, taskId) {
259
262
  const headers = {
260
263
  algorithm: "HmacSHA256",
261
264
  requestTime: Date.now(),
262
- accessKey: ACCESS_KEY
265
+ accessKey: getAccessKey()
263
266
  };
264
267
  const params = { deviceId, taskId };
265
- headers.sign = sign(headers, params, SECRET_KEY);
268
+ headers.sign = sign(headers, params);
266
269
  const controller = new AbortController();
267
270
  const timeoutId = setTimeout(() => controller.abort(), 1e4);
268
271
  const response = await fetch("/vsuap-platform-api/v1/device/broadcastOff", {
@@ -308,10 +311,10 @@ async function GetYunZhiYanDeviceRecordList(deviceId, channelCodeId, startTime,
308
311
  const headers = {
309
312
  algorithm: "HmacSHA256",
310
313
  requestTime: Date.now(),
311
- accessKey: ACCESS_KEY
314
+ accessKey: getAccessKey()
312
315
  };
313
316
  const params = { deviceId, channelCodeId, startTime, endTime };
314
- headers.sign = sign(headers, params, SECRET_KEY);
317
+ headers.sign = sign(headers, params);
315
318
  const controller = new AbortController();
316
319
  const timeoutId = setTimeout(() => controller.abort(), 1e4);
317
320
  const response = await fetch("/vsuap-platform-api/v1/device/recordList", {
@@ -1 +1 @@
1
- {"version":3,"file":"yunzhiyan.mjs","sources":["../../../../../../../packages/components/tzj-player/src/yunzhiyan.ts"],"sourcesContent":["import CryptoJS from \"crypto-js\";\n\n/**\n * 获取访问密钥,支持 SSR 环境\n */\nfunction getAccessKey(): string {\n if (typeof localStorage !== \"undefined\") {\n return (\n localStorage.getItem(\"YZYAK\") || \"F169AE4D261B4E17BAE7872BB1450CF33227\"\n );\n }\n return \"F169AE4D261B4E17BAE7872BB1450CF33227\";\n}\n\n/**\n * 获取签名密钥,支持 SSR 环境\n */\nfunction getSecretKey(): string {\n if (typeof localStorage !== \"undefined\") {\n return (\n localStorage.getItem(\"YZYSK\") || \"65B84A07533A463BA14F7AC179C0D4BB5362\"\n );\n }\n return \"65B84A07533A463BA14F7AC179C0D4BB5362\";\n}\n\nconst ACCESS_KEY = getAccessKey();\nconst SECRET_KEY = getSecretKey();\n\n/**\n * 签名函数\n * @param headers 请求头参数\n * @param params 请求参数\n * @param sk 签名密钥\n * @returns string 签名结果\n */\nexport function sign(\n headers: Record<string, string | number>,\n params: Record<string, any>,\n sk: string = SECRET_KEY,\n): string {\n const obj = Object.assign({}, headers, params);\n const keys = Object.keys(obj).sort();\n let str = \"\";\n // 拼接字符串\n keys.forEach((key, index) => {\n str += `${key}=\"${obj[key]}\"`;\n if (index !== keys.length - 1) {\n str += \"&\";\n }\n });\n console.log(\"未加签的字符串\", str);\n // 加密\n const hash = CryptoJS.HmacSHA256(str, sk);\n console.log(\"加签后的字符串\", hash.toString(CryptoJS.enc.Hex));\n return hash.toString(CryptoJS.enc.Hex);\n}\n/**\n * 获取云智眼设备通道ID\n * @param deviceId 设备ID\n * @returns Promise<string | false> 成功返回通道ID,失败返回false\n */\nexport async function GetYunZhiYanDeviceChannel(\n deviceId: string,\n): Promise<string | false> {\n try {\n const headers: Record<string, string | number> = {\n algorithm: \"HmacSHA256\",\n requestTime: Date.now(),\n accessKey: ACCESS_KEY,\n };\n const params = { deviceId };\n headers.sign = sign(headers, params, SECRET_KEY);\n\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), 10000); // 10秒超时\n\n const response = await fetch(\"/vsuap-platform-api/v1/device/queryChannel\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n ...headers,\n },\n body: JSON.stringify(params),\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n if (!response.ok) {\n console.error(`HTTP错误: ${response.status} ${response.statusText}`);\n return false;\n }\n\n const res = await response.json();\n const { code, data } = res;\n\n if (\n code === 200 &&\n Array.isArray(data) &&\n data.length > 0 &&\n data[0].channelCodeId\n ) {\n return data[0].channelCodeId || \"\";\n } else {\n console.error(\n `业务错误: code=${code}, message=${res.message || \"未知错误\"}`,\n );\n return false;\n }\n } catch (error) {\n if (error instanceof Error) {\n if (error.name === \"AbortError\") {\n console.error(\"请求超时: GetYunZhiYanDeviceChannel\");\n } else if (error.name === \"TypeError\") {\n console.error(\"网络错误: GetYunZhiYanDeviceChannel\", error.message);\n } else {\n console.error(\n \"JSON解析错误或其他错误: GetYunZhiYanDeviceChannel\",\n error.message,\n );\n }\n } else {\n console.error(\"未知错误: GetYunZhiYanDeviceChannel\", error);\n }\n return false;\n }\n}\n\n/**\n * 获取云智眼设备视频播放地址\n * @param deviceId 设备ID\n * @param channelCodeId 通道ID\n * @returns Promise<string | false> 成功返回视频播放地址,失败返回false\n */\nexport async function GetYunZhiYanDeviceVideoUrl(\n deviceId: string,\n channelCodeId: string,\n): Promise<string | false> {\n try {\n const headers: Record<string, string | number> = {\n algorithm: \"HmacSHA256\",\n requestTime: Date.now(),\n accessKey: ACCESS_KEY,\n };\n const params = { deviceId, channelCodeId };\n headers.sign = sign(headers, params, SECRET_KEY);\n\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), 10000); // 10秒超时\n\n const response = await fetch(\"/vsuap-platform-api/v1/device/playOn\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n ...headers,\n },\n body: JSON.stringify(params),\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n if (!response.ok) {\n console.error(`HTTP错误: ${response.status} ${response.statusText}`);\n return false;\n }\n\n const res = await response.json();\n const { code, data } = res;\n\n if (code === 200) {\n return data?.flv || \"\";\n } else {\n console.error(\n `业务错误: code=${code}, message=${res.message || \"未知错误\"}`,\n );\n return false;\n }\n } catch (error) {\n if (error instanceof Error) {\n if (error.name === \"AbortError\") {\n console.error(\"请求超时: GetYunZhiYanDeviceVideoUrl\");\n } else if (error.name === \"TypeError\") {\n console.error(\"网络错误: GetYunZhiYanDeviceVideoUrl\", error.message);\n } else {\n console.error(\n \"JSON解析错误或其他错误: GetYunZhiYanDeviceVideoUrl\",\n error.message,\n );\n }\n } else {\n console.error(\"未知错误: GetYunZhiYanDeviceVideoUrl\", error);\n }\n return false;\n }\n}\n\n/**\n * 获取语音对讲地址信息\n */\n/**\n * 获取语音对讲地址信息\n * @param deviceId 设备ID\n * @returns Promise<any | false> 成功返回对讲信息,失败返回false\n */\nexport async function GetYunZhiYanOpenVoiceIntercom(\n deviceId: string,\n): Promise<any | false> {\n try {\n const headers: Record<string, any> = {\n algorithm: \"HmacSHA256\",\n requestTime: Date.now(),\n accessKey: ACCESS_KEY,\n };\n const params = { deviceId, deviceType: \"1\", enableAudioSign: \"1\" };\n headers.sign = sign(headers, params, SECRET_KEY);\n\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), 10000); // 10秒超时\n\n const response = await fetch(\"/vsuap-platform-api/v1/device/broadcastOn\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n ...headers,\n },\n body: JSON.stringify(params),\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n if (!response.ok) {\n console.error(`HTTP错误: ${response.status} ${response.statusText}`);\n return false;\n }\n\n const res = await response.json();\n const { code, data } = res;\n\n if (code === 200) {\n return data;\n } else {\n console.error(\n `业务错误: code=${code}, message=${res.message || \"未知错误\"}`,\n );\n return false;\n }\n } catch (error) {\n if (error instanceof Error) {\n if (error.name === \"AbortError\") {\n console.error(\"请求超时: GetYunZhiYanOpenVoiceIntercom\");\n } else if (error.name === \"TypeError\") {\n console.error(\"网络错误: GetYunZhiYanOpenVoiceIntercom\", error.message);\n } else {\n console.error(\n \"JSON解析错误或其他错误: GetYunZhiYanOpenVoiceIntercom\",\n error.message,\n );\n }\n } else {\n console.error(\"未知错误: GetYunZhiYanOpenVoiceIntercom\", error);\n }\n return false;\n }\n}\n\n/**\n * 获取语音对讲地址\n * @param taskId 任务ID\n * @returns Promise<string | false> 成功返回加密后的密钥,失败返回false\n */\nexport async function GetYunZhiYanUserPlaySecretKey(\n taskId: string,\n): Promise<string | false> {\n try {\n const headers: Record<string, string | number> = {\n algorithm: \"HmacSHA256\",\n requestTime: Date.now(),\n accessKey: ACCESS_KEY,\n };\n const params = {};\n headers.sign = sign(headers, params, SECRET_KEY);\n\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), 10000); // 10秒超时\n\n const response = await fetch(\n \"/vsuap-platform-api/v1/user/queryPlaySecretKey\",\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n ...headers,\n },\n body: JSON.stringify(params),\n signal: controller.signal,\n },\n );\n\n clearTimeout(timeoutId);\n\n if (!response.ok) {\n console.error(`HTTP错误: ${response.status} ${response.statusText}`);\n return false;\n }\n\n const res = await response.json();\n const { code, data } = res;\n\n if (code === 200) {\n const playSecretKey = data.playSecretKey;\n return CryptoJS.MD5(taskId + playSecretKey).toString();\n } else {\n console.error(\n `业务错误: code=${code}, message=${res.message || \"未知错误\"}`,\n );\n return false;\n }\n } catch (error) {\n if (error instanceof Error) {\n if (error.name === \"AbortError\") {\n console.error(\"请求超时: GetYunZhiYanUserPlaySecretKey\");\n } else if (error.name === \"TypeError\") {\n console.error(\"网络错误: GetYunZhiYanUserPlaySecretKey\", error.message);\n } else {\n console.error(\n \"JSON解析错误或其他错误: GetYunZhiYanUserPlaySecretKey\",\n error.message,\n );\n }\n } else {\n console.error(\"未知错误: GetYunZhiYanUserPlaySecretKey\", error);\n }\n return false;\n }\n}\n\n/**\n * 关闭语音对讲\n * @param deviceId 设备ID\n * @param taskId 任务ID\n * @returns Promise<any | false> 成功返回响应数据,失败返回false\n */\nexport async function GetYunZhiYanCloseVoiceIntercom(\n deviceId: string,\n taskId: string,\n): Promise<any | false> {\n try {\n const headers: Record<string, any> = {\n algorithm: \"HmacSHA256\",\n requestTime: Date.now(),\n accessKey: ACCESS_KEY,\n };\n const params = { deviceId, taskId };\n headers.sign = sign(headers, params, SECRET_KEY);\n\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), 10000); // 10秒超时\n\n const response = await fetch(\"/vsuap-platform-api/v1/device/broadcastOff\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n ...headers,\n },\n body: JSON.stringify(params),\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n if (!response.ok) {\n console.error(`HTTP错误: ${response.status} ${response.statusText}`);\n return false;\n }\n\n const res = await response.json();\n return res;\n } catch (error) {\n if (error instanceof Error) {\n if (error.name === \"AbortError\") {\n console.error(\"请求超时: GetYunZhiYanCloseVoiceIntercom\");\n } else if (error.name === \"TypeError\") {\n console.error(\n \"网络错误: GetYunZhiYanCloseVoiceIntercom\",\n error.message,\n );\n } else {\n console.error(\n \"JSON解析错误或其他错误: GetYunZhiYanCloseVoiceIntercom\",\n error.message,\n );\n }\n } else {\n console.error(\"未知错误: GetYunZhiYanCloseVoiceIntercom\", error);\n }\n return false;\n }\n}\n\n/**\n * 查询设备云端录像信息\n * @param deviceId 设备ID\n * @param channelCodeId 通道编码 ID\n * @param startTime 范围查询的开始时间, 13 位时间戳\n * @param endTime 范围查询的结束时间, 13 位时间戳(开始时间与结束时间最大间隔 7 天)\n * @returns Promise<string | false> 成功返回通道ID,失败返回false\n */\nexport async function GetYunZhiYanDeviceRecordList(\n deviceId: string,\n channelCodeId: string | number,\n startTime: string | number,\n endTime: string | number,\n): Promise<any[]> {\n try {\n const headers: Record<string, string | number> = {\n algorithm: \"HmacSHA256\",\n requestTime: Date.now(),\n accessKey: ACCESS_KEY,\n };\n const params = { deviceId, channelCodeId, startTime, endTime };\n headers.sign = sign(headers, params, SECRET_KEY);\n\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), 10000); // 10秒超时\n\n const response = await fetch(\"/vsuap-platform-api/v1/device/recordList\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n ...headers,\n },\n body: JSON.stringify(params),\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n const res = await response.json();\n const { code, data } = res;\n\n if (code === 200 && Array.isArray(data)) {\n return data || [];\n } else {\n console.error(\n `业务错误: code=${code}, message=${res.message || \"未知错误\"}`,\n );\n return [];\n }\n } catch (error) {\n return [];\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"yunzhiyan.mjs","sources":["../../../../../../../packages/components/tzj-player/src/yunzhiyan.ts"],"sourcesContent":["import CryptoJS from \"crypto-js\";\n\n/**\n * 获取访问密钥,支持 SSR 环境\n */\nfunction getAccessKey(): string {\n if (typeof localStorage !== \"undefined\") {\n return localStorage.getItem(\"YZYAK\") || \"\";\n }\n return \"\";\n}\n\n/**\n * 获取签名密钥,支持 SSR 环境\n */\nfunction getSecretKey(): string {\n if (typeof localStorage !== \"undefined\") {\n return localStorage.getItem(\"YZYSK\") || \"\";\n }\n return \"\";\n}\n\n/**\n * 签名函数\n * @param headers 请求头参数\n * @param params 请求参数\n * @param sk 签名密钥\n * @returns string 签名结果\n */\nexport function sign(\n headers: Record<string, string | number>,\n params: Record<string, any>,\n sk: string = getSecretKey(),\n): string {\n if (!sk) {\n console.warn(\n \"[tzj-player] 签名密钥 YZYSK 为空,签名结果将不被服务端认可,请确认已写入 localStorage\",\n );\n }\n const obj = Object.assign({}, headers, params);\n const keys = Object.keys(obj).sort();\n let str = \"\";\n // 拼接字符串\n keys.forEach((key, index) => {\n str += `${key}=\"${obj[key]}\"`;\n if (index !== keys.length - 1) {\n str += \"&\";\n }\n });\n console.log(\"未加签的字符串\", str);\n // 加密\n const hash = CryptoJS.HmacSHA256(str, sk);\n console.log(\"加签后的字符串\", hash.toString(CryptoJS.enc.Hex));\n return hash.toString(CryptoJS.enc.Hex);\n}\n/**\n * 获取云智眼设备通道ID\n * @param deviceId 设备ID\n * @returns Promise<string | false> 成功返回通道ID,失败返回false\n */\nexport async function GetYunZhiYanDeviceChannel(\n deviceId: string,\n): Promise<string | false> {\n try {\n const headers: Record<string, string | number> = {\n algorithm: \"HmacSHA256\",\n requestTime: Date.now(),\n accessKey: getAccessKey(),\n };\n const params = { deviceId };\n headers.sign = sign(headers, params);\n\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), 10000); // 10秒超时\n\n const response = await fetch(\"/vsuap-platform-api/v1/device/queryChannel\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n ...headers,\n },\n body: JSON.stringify(params),\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n if (!response.ok) {\n console.error(`HTTP错误: ${response.status} ${response.statusText}`);\n return false;\n }\n\n const res = await response.json();\n const { code, data } = res;\n\n if (\n code === 200 &&\n Array.isArray(data) &&\n data.length > 0 &&\n data[0].channelCodeId\n ) {\n return data[0].channelCodeId || \"\";\n } else {\n console.error(\n `业务错误: code=${code}, message=${res.message || \"未知错误\"}`,\n );\n return false;\n }\n } catch (error) {\n if (error instanceof Error) {\n if (error.name === \"AbortError\") {\n console.error(\"请求超时: GetYunZhiYanDeviceChannel\");\n } else if (error.name === \"TypeError\") {\n console.error(\"网络错误: GetYunZhiYanDeviceChannel\", error.message);\n } else {\n console.error(\n \"JSON解析错误或其他错误: GetYunZhiYanDeviceChannel\",\n error.message,\n );\n }\n } else {\n console.error(\"未知错误: GetYunZhiYanDeviceChannel\", error);\n }\n return false;\n }\n}\n\n/**\n * 获取云智眼设备视频播放地址\n * @param deviceId 设备ID\n * @param channelCodeId 通道ID\n * @returns Promise<string | false> 成功返回视频播放地址,失败返回false\n */\nexport async function GetYunZhiYanDeviceVideoUrl(\n deviceId: string,\n channelCodeId: string,\n): Promise<string | false> {\n try {\n const headers: Record<string, string | number> = {\n algorithm: \"HmacSHA256\",\n requestTime: Date.now(),\n accessKey: getAccessKey(),\n };\n const params = { deviceId, channelCodeId };\n headers.sign = sign(headers, params);\n\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), 10000); // 10秒超时\n\n const response = await fetch(\"/vsuap-platform-api/v1/device/playOn\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n ...headers,\n },\n body: JSON.stringify(params),\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n if (!response.ok) {\n console.error(`HTTP错误: ${response.status} ${response.statusText}`);\n return false;\n }\n\n const res = await response.json();\n const { code, data } = res;\n\n if (code === 200) {\n return data?.flv || \"\";\n } else {\n console.error(\n `业务错误: code=${code}, message=${res.message || \"未知错误\"}`,\n );\n return false;\n }\n } catch (error) {\n if (error instanceof Error) {\n if (error.name === \"AbortError\") {\n console.error(\"请求超时: GetYunZhiYanDeviceVideoUrl\");\n } else if (error.name === \"TypeError\") {\n console.error(\"网络错误: GetYunZhiYanDeviceVideoUrl\", error.message);\n } else {\n console.error(\n \"JSON解析错误或其他错误: GetYunZhiYanDeviceVideoUrl\",\n error.message,\n );\n }\n } else {\n console.error(\"未知错误: GetYunZhiYanDeviceVideoUrl\", error);\n }\n return false;\n }\n}\n\n/**\n * 获取语音对讲地址信息\n */\n/**\n * 获取语音对讲地址信息\n * @param deviceId 设备ID\n * @returns Promise<any | false> 成功返回对讲信息,失败返回false\n */\nexport async function GetYunZhiYanOpenVoiceIntercom(\n deviceId: string,\n): Promise<any | false> {\n try {\n const headers: Record<string, any> = {\n algorithm: \"HmacSHA256\",\n requestTime: Date.now(),\n accessKey: getAccessKey(),\n };\n const params = { deviceId, deviceType: \"1\", enableAudioSign: \"1\" };\n headers.sign = sign(headers, params);\n\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), 10000); // 10秒超时\n\n const response = await fetch(\"/vsuap-platform-api/v1/device/broadcastOn\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n ...headers,\n },\n body: JSON.stringify(params),\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n if (!response.ok) {\n console.error(`HTTP错误: ${response.status} ${response.statusText}`);\n return false;\n }\n\n const res = await response.json();\n const { code, data } = res;\n\n if (code === 200) {\n return data;\n } else {\n console.error(\n `业务错误: code=${code}, message=${res.message || \"未知错误\"}`,\n );\n return false;\n }\n } catch (error) {\n if (error instanceof Error) {\n if (error.name === \"AbortError\") {\n console.error(\"请求超时: GetYunZhiYanOpenVoiceIntercom\");\n } else if (error.name === \"TypeError\") {\n console.error(\"网络错误: GetYunZhiYanOpenVoiceIntercom\", error.message);\n } else {\n console.error(\n \"JSON解析错误或其他错误: GetYunZhiYanOpenVoiceIntercom\",\n error.message,\n );\n }\n } else {\n console.error(\"未知错误: GetYunZhiYanOpenVoiceIntercom\", error);\n }\n return false;\n }\n}\n\n/**\n * 获取语音对讲地址\n * @param taskId 任务ID\n * @returns Promise<string | false> 成功返回加密后的密钥,失败返回false\n */\nexport async function GetYunZhiYanUserPlaySecretKey(\n taskId: string,\n): Promise<string | false> {\n try {\n const headers: Record<string, string | number> = {\n algorithm: \"HmacSHA256\",\n requestTime: Date.now(),\n accessKey: getAccessKey(),\n };\n const params = {};\n headers.sign = sign(headers, params);\n\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), 10000); // 10秒超时\n\n const response = await fetch(\n \"/vsuap-platform-api/v1/user/queryPlaySecretKey\",\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n ...headers,\n },\n body: JSON.stringify(params),\n signal: controller.signal,\n },\n );\n\n clearTimeout(timeoutId);\n\n if (!response.ok) {\n console.error(`HTTP错误: ${response.status} ${response.statusText}`);\n return false;\n }\n\n const res = await response.json();\n const { code, data } = res;\n\n if (code === 200) {\n const playSecretKey = data.playSecretKey;\n return CryptoJS.MD5(taskId + playSecretKey).toString();\n } else {\n console.error(\n `业务错误: code=${code}, message=${res.message || \"未知错误\"}`,\n );\n return false;\n }\n } catch (error) {\n if (error instanceof Error) {\n if (error.name === \"AbortError\") {\n console.error(\"请求超时: GetYunZhiYanUserPlaySecretKey\");\n } else if (error.name === \"TypeError\") {\n console.error(\"网络错误: GetYunZhiYanUserPlaySecretKey\", error.message);\n } else {\n console.error(\n \"JSON解析错误或其他错误: GetYunZhiYanUserPlaySecretKey\",\n error.message,\n );\n }\n } else {\n console.error(\"未知错误: GetYunZhiYanUserPlaySecretKey\", error);\n }\n return false;\n }\n}\n\n/**\n * 关闭语音对讲\n * @param deviceId 设备ID\n * @param taskId 任务ID\n * @returns Promise<any | false> 成功返回响应数据,失败返回false\n */\nexport async function GetYunZhiYanCloseVoiceIntercom(\n deviceId: string,\n taskId: string,\n): Promise<any | false> {\n try {\n const headers: Record<string, any> = {\n algorithm: \"HmacSHA256\",\n requestTime: Date.now(),\n accessKey: getAccessKey(),\n };\n const params = { deviceId, taskId };\n headers.sign = sign(headers, params);\n\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), 10000); // 10秒超时\n\n const response = await fetch(\"/vsuap-platform-api/v1/device/broadcastOff\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n ...headers,\n },\n body: JSON.stringify(params),\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n if (!response.ok) {\n console.error(`HTTP错误: ${response.status} ${response.statusText}`);\n return false;\n }\n\n const res = await response.json();\n return res;\n } catch (error) {\n if (error instanceof Error) {\n if (error.name === \"AbortError\") {\n console.error(\"请求超时: GetYunZhiYanCloseVoiceIntercom\");\n } else if (error.name === \"TypeError\") {\n console.error(\n \"网络错误: GetYunZhiYanCloseVoiceIntercom\",\n error.message,\n );\n } else {\n console.error(\n \"JSON解析错误或其他错误: GetYunZhiYanCloseVoiceIntercom\",\n error.message,\n );\n }\n } else {\n console.error(\"未知错误: GetYunZhiYanCloseVoiceIntercom\", error);\n }\n return false;\n }\n}\n\n/**\n * 查询设备云端录像信息\n * @param deviceId 设备ID\n * @param channelCodeId 通道编码 ID\n * @param startTime 范围查询的开始时间, 13 位时间戳\n * @param endTime 范围查询的结束时间, 13 位时间戳(开始时间与结束时间最大间隔 7 天)\n * @returns Promise<string | false> 成功返回通道ID,失败返回false\n */\nexport async function GetYunZhiYanDeviceRecordList(\n deviceId: string,\n channelCodeId: string | number,\n startTime: string | number,\n endTime: string | number,\n): Promise<any[]> {\n try {\n const headers: Record<string, string | number> = {\n algorithm: \"HmacSHA256\",\n requestTime: Date.now(),\n accessKey: getAccessKey(),\n };\n const params = { deviceId, channelCodeId, startTime, endTime };\n headers.sign = sign(headers, params);\n\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), 10000); // 10秒超时\n\n const response = await fetch(\"/vsuap-platform-api/v1/device/recordList\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n ...headers,\n },\n body: JSON.stringify(params),\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n const res = await response.json();\n const { code, data } = res;\n\n if (code === 200 && Array.isArray(data)) {\n return data || [];\n } else {\n console.error(\n `业务错误: code=${code}, message=${res.message || \"未知错误\"}`,\n );\n return [];\n }\n } catch (error) {\n return [];\n }\n}\n"],"names":[],"mappings":"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"}