@yimou6/common-ui 1.13.25 → 1.13.27

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 (67) hide show
  1. package/cdn/index.cdn.js +9 -9
  2. package/cdn/index.cdn.js.map +1 -1
  3. package/cdn/index.cdn.mjs +9 -9
  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/easyPlayer.vue2.mjs +4 -4
  19. package/es/components/tzj-player/src/easyPlayer.vue2.mjs.map +1 -1
  20. package/es/components/tzj-player/src/yunzhiyan.mjs +4 -4
  21. package/es/components/tzj-player/src/yunzhiyan.mjs.map +1 -1
  22. package/lib/components/geoMark/index.d.ts +28 -29
  23. package/lib/components/geoMark/src/assets/default.png.js.map +1 -0
  24. package/lib/components/geoMark/src/assets/waring.png.js.map +1 -0
  25. package/lib/components/geoMark/src/assets//346/226/260/345/274/271/346/241/206.png.js.map +1 -0
  26. package/lib/components/geoMark/src/assets//347/201/255/347/201/253/345/231/250.png.js.map +1 -0
  27. package/lib/components/geoMark/src/floor.vue2.js.map +1 -0
  28. package/lib/components/geoMark/src/geoMark.vue.d.ts +28 -29
  29. package/lib/components/geoMark/src/geoMark.vue2.js +227 -218
  30. package/lib/components/geoMark/src/geoMark.vue2.js.map +1 -1
  31. package/lib/components/geoMark/src/openMap.vue.d.ts +20 -21
  32. package/lib/components/geoMark/src/openMap.vue2.js +11 -13
  33. package/lib/components/geoMark/src/openMap.vue2.js.map +1 -1
  34. package/lib/components/tzj-player/src/easyPlayer.vue2.js +4 -4
  35. package/lib/components/tzj-player/src/easyPlayer.vue2.js.map +1 -1
  36. package/lib/components/tzj-player/src/yunzhiyan.js +4 -4
  37. package/lib/components/tzj-player/src/yunzhiyan.js.map +1 -1
  38. package/package.json +1 -1
  39. package/theme-default/i-geo-mark-utils.css +1 -0
  40. package/theme-default/i-geo-mark.css +1 -1
  41. package/theme-default/index.css +1 -1
  42. package/es/components/geoMark/src/default.png.mjs.map +0 -1
  43. package/es/components/geoMark/src/floorRight/floor.vue2.mjs.map +0 -1
  44. package/es/components/geoMark/src/waring.png.mjs.map +0 -1
  45. package/es/components/geoMark/src//346/226/260/345/274/271/346/241/206.png.mjs.map +0 -1
  46. package/es/components/geoMark/src//347/201/255/347/201/253/345/231/250.png.mjs.map +0 -1
  47. package/lib/components/geoMark/src/default.png.js.map +0 -1
  48. package/lib/components/geoMark/src/floorRight/floor.vue2.js.map +0 -1
  49. package/lib/components/geoMark/src/waring.png.js.map +0 -1
  50. package/lib/components/geoMark/src//346/226/260/345/274/271/346/241/206.png.js.map +0 -1
  51. package/lib/components/geoMark/src//347/201/255/347/201/253/345/231/250.png.js.map +0 -1
  52. /package/es/components/geoMark/src/{default.png.mjs → assets/default.png.mjs} +0 -0
  53. /package/es/components/geoMark/src/{waring.png.mjs → assets/waring.png.mjs} +0 -0
  54. /package/es/components/geoMark/src/{ → assets/}/346/226/260/345/274/271/346/241/206.png.mjs" +0 -0
  55. /package/es/components/geoMark/src/{ → assets/}/347/201/255/347/201/253/345/231/250.png.mjs" +0 -0
  56. /package/es/components/geoMark/src/{floorRight/floor.vue.d.ts → floor.vue.d.ts} +0 -0
  57. /package/es/components/geoMark/src/{floorRight/floor.vue.mjs → floor.vue.mjs} +0 -0
  58. /package/es/components/geoMark/src/{floorRight/floor.vue.mjs.map → floor.vue.mjs.map} +0 -0
  59. /package/es/components/geoMark/src/{floorRight/floor.vue2.mjs → floor.vue2.mjs} +0 -0
  60. /package/lib/components/geoMark/src/{default.png.js → assets/default.png.js} +0 -0
  61. /package/lib/components/geoMark/src/{waring.png.js → assets/waring.png.js} +0 -0
  62. /package/lib/components/geoMark/src/{ → assets/}/346/226/260/345/274/271/346/241/206.png.js" +0 -0
  63. /package/lib/components/geoMark/src/{ → assets/}/347/201/255/347/201/253/345/231/250.png.js" +0 -0
  64. /package/lib/components/geoMark/src/{floorRight/floor.vue.d.ts → floor.vue.d.ts} +0 -0
  65. /package/lib/components/geoMark/src/{floorRight/floor.vue.js → floor.vue.js} +0 -0
  66. /package/lib/components/geoMark/src/{floorRight/floor.vue.js.map → floor.vue.js.map} +0 -0
  67. /package/lib/components/geoMark/src/{floorRight/floor.vue2.js → floor.vue2.js} +0 -0
@@ -34,17 +34,17 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
34
34
  extent: { type: Array, default: /* @__PURE__ */ __name(() => [0, 0, 1024, 968], "default") },
35
35
  configMenuItems: { type: Array, default: /* @__PURE__ */ __name(() => [], "default") },
36
36
  activatedBottomBar: { type: String, default: "" },
37
- _waring: { type: [String, Number, null], default: null },
37
+ waring: { type: [String, Number, null], default: null },
38
38
  activatedPositionOverlayWaring: { type: Array, default: /* @__PURE__ */ __name(() => [], "default") },
39
39
  activatedPositionOverlay: { type: Array, default: /* @__PURE__ */ __name(() => [], "default") },
40
40
  activatedPropertiesOverlay: { type: Object, default: /* @__PURE__ */ __name(() => ({}), "default") },
41
- list_title: { type: String, default: "" },
41
+ listTitle: { type: String, default: "" },
42
42
  alarmType: { type: String, default: "" },
43
43
  svgOverlay: { type: String, default: "" },
44
44
  waringIcon: { type: String, default: "" },
45
- FnUpdateDrawFeature: { type: Function, default: void 0 },
46
- FnUpdateDrawFeature2: { type: Function, default: void 0 },
47
- FnOverrideStyle: { type: Function, default: void 0 }
45
+ fnUpdateDrawFeature: { type: Function, default: void 0 },
46
+ fnUpdateDrawFeature2: { type: Function, default: void 0 },
47
+ fnOverrideStyle: { type: Function, default: void 0 }
48
48
  },
49
49
  emits: [
50
50
  "ready",
@@ -73,7 +73,6 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
73
73
  const mapRef = vue.ref(null);
74
74
  const viewRef = vue.ref(null);
75
75
  const vectorSourceRef = vue.ref(null);
76
- const drawRef = vue.ref(null);
77
76
  const currentImageUrl = vue.toRef(props, "imgUrl");
78
77
  const pixelProjection = new Projection({
79
78
  code: "xkcd-image",
@@ -164,7 +163,7 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
164
163
  const refreshFeaturesUsingIcon = /* @__PURE__ */ __name(() => {
165
164
  var _a;
166
165
  const source = (_a = vectorSourceRef.value) == null ? void 0 : _a.source;
167
- const fn = props.FnOverrideStyle;
166
+ const fn = props.fnOverrideStyle;
168
167
  if (!source || typeof fn !== "function") return;
169
168
  source.getFeatures().forEach((feature) => {
170
169
  if (feature.get("code")) {
@@ -351,16 +350,15 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
351
350
  key: 1,
352
351
  type: "Polygon",
353
352
  "stop-click": true,
354
- onDrawend: __props.FnUpdateDrawFeature
353
+ onDrawend: __props.fnUpdateDrawFeature
355
354
  }, null, 8, ["onDrawend"])) : vue.createCommentVNode("v-if", true),
356
355
  vue.createCommentVNode(" \u9003\u751F\u8DEF\u7EBF "),
357
356
  __props.activatedBottomBar === "\u9003\u751F\u8DEF\u7EBF" ? (vue.openBlock(), vue.createBlock(vue.unref(OlDrawInteraction), {
358
357
  key: 2,
359
- ref_key: "drawRef",
360
- ref: drawRef,
358
+ ref: "drawRef",
361
359
  type: "LineString",
362
360
  "stop-click": true,
363
- onDrawend: __props.FnUpdateDrawFeature2
361
+ onDrawend: __props.fnUpdateDrawFeature2
364
362
  }, null, 8, ["onDrawend"])) : vue.createCommentVNode("v-if", true),
365
363
  vue.createCommentVNode(" \u533A\u57DF\u8BBE\u7F6E\u5438\u9644 "),
366
364
  __props.activatedBottomBar === "\u533A\u57DF\u8BBE\u7F6E" ? (vue.openBlock(), vue.createBlock(vue.unref(OlSnapInteraction), { key: 3 })) : vue.createCommentVNode("v-if", true)
@@ -371,7 +369,7 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
371
369
  512
372
370
  /* NEED_PATCH */
373
371
  ),
374
- vue.createVNode(vue.unref(OlStyle), { "override-style-function": __props.FnOverrideStyle }, null, 8, ["override-style-function"])
372
+ vue.createVNode(vue.unref(OlStyle), { "override-style-function": __props.fnOverrideStyle }, null, 8, ["override-style-function"])
375
373
  ]),
376
374
  _: 1
377
375
  /* STABLE */
@@ -379,7 +377,7 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
379
377
  vue.createCommentVNode(" \u7F16\u8F91 / \u533A\u57DF\u6A21\u677F "),
380
378
  __props.activatedBottomBar === "\u7F16\u8F91" || __props.activatedBottomBar === "\u533A\u57DF\u6A21\u677F" ? (vue.openBlock(), vue.createBlock(vue.unref(OlTransformInteraction), { key: 0 })) : vue.createCommentVNode("v-if", true),
381
379
  vue.createCommentVNode(" \u8B66\u544A\u6C14\u6CE1\uFF1AactivatedPositionOverlayWaring \u4E3A\u544A\u8B66\u8BBE\u5907\u5750\u6807 "),
382
- __props._waring && __props.activatedPositionOverlayWaring && __props.activatedPositionOverlayWaring.length > 0 ? (vue.openBlock(), vue.createBlock(vue.unref(OlOverlay), {
380
+ __props.waring && __props.activatedPositionOverlayWaring && __props.activatedPositionOverlayWaring.length > 0 ? (vue.openBlock(), vue.createBlock(vue.unref(OlOverlay), {
383
381
  key: 1,
384
382
  position: __props.activatedPositionOverlayWaring,
385
383
  "auto-pan": true,
@@ -1 +1 @@
1
- {"version":3,"file":"openMap.vue2.js","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","ref","toRef","watch","nextTick","Style","Icon","onMounted","_createBlock","_unref","_createVNode","_createCommentVNode","_createElementVNode","_renderSlot"],"mappings":"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"}
1
+ {"version":3,"file":"openMap.vue2.js","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","ref","toRef","watch","nextTick","Style","Icon","onMounted","_createBlock","_unref","_createVNode","_createCommentVNode","_createElementVNode","_renderSlot"],"mappings":"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"}
@@ -278,11 +278,11 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
278
278
  debug: true,
279
279
  maxDelay: 300,
280
280
  // 最大容忍延迟300ms,超时自动丢帧追实时画面
281
- reconnect: true,
281
+ reconnect: true
282
282
  // 断线自动重连,单路故障不影响其他8路
283
- // 使用动态拼接的绝对路径
284
- decoderPath: `${isMicro ? window.location.origin : "/"}plugins/easy-player/`,
285
- decoder: "EasyPlayer-decode.js"
283
+ // // 使用动态拼接的绝对路径
284
+ // decoderPath: `${window.location.origin}/plugins/easy-player/`,
285
+ // decoder: "EasyPlayer-decode.js",
286
286
  });
287
287
  createRetryCount = 0;
288
288
  }
@@ -1 +1 @@
1
- {"version":3,"file":"easyPlayer.vue2.js","sources":["../../../../../../../packages/components/tzj-player/src/easyPlayer.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport {\n computed,\n onBeforeUnmount,\n onMounted,\n ref,\n shallowRef,\n useSlots,\n watch,\n} from \"vue\";\nimport { TzjPlayerProps, uuid } from \"./tzj-player\";\n\ndefineOptions({\n name: \"EasyPlayer\",\n});\n\nconst props = defineProps(TzjPlayerProps);\nconst emits = defineEmits([\n \"timeout\",\n \"error\",\n \"play\",\n \"pause\",\n \"mute\",\n \"videoInfo\",\n]);\nconst slots = useSlots();\nconst customBar = computed(() => slots.customBar);\n\nlet player: any = null;\nconst id = uuid();\nconst playerRef = shallowRef<HTMLDivElement>();\nconst playSuccess = ref(true);\nconst playUrl = ref(\"\");\nconst videoInfo = ref<any>(null);\nconst eventHandlers = ref<Map<string, Function>>(new Map());\n// 用于追踪等待 EasyPlayerPro 加载的轮询定时器,防止组件卸载后泄漏\nlet waitTimer: ReturnType<typeof setInterval> | null = null;\n// 用于定时重启播放器的定时器,防止播放器卡死\nconst restartTimer = ref<ReturnType<typeof setInterval> | null>(null);\n// 用于定时暂停播放器的定时器(pauseMode=3时,每60分钟触发一次暂停)\nconst pauseCycleTimer = ref<ReturnType<typeof setInterval> | null>(null);\n// ResizeObserver:监听容器尺寸变化,同步更新播放器 DOM 尺寸\nlet resizeObserver: ResizeObserver | null = null;\n// startPlayer 重试计数,处理 worklet/AbortError 偶发失败\nlet createRetryCount = 0;\nconst MAX_CREATE_RETRY = 3;\n// 标记组件是否已卸载,防止卸载后的异步操作继续执行\nlet isUnmounted = false;\n\nonMounted(() => {\n // 监听容器尺寸变化,同步播放器 DOM 尺寸(防止控件丢失)\n if (typeof ResizeObserver !== \"undefined\" && playerRef.value) {\n resizeObserver = new ResizeObserver((entries) => {\n for (const entry of entries) {\n const { width, height } = entry.contentRect;\n const dom = document.getElementById(id);\n if (dom && width > 0 && height > 0) {\n dom.style.width = `${width}px`;\n dom.style.height = `${height}px`;\n }\n }\n });\n resizeObserver.observe(playerRef.value);\n }\n initPlayer(props.url || \"\");\n});\n\nwatch(\n () => props.url,\n (newUrl: string) => {\n initPlayer(newUrl || \"\");\n },\n);\n\nonBeforeUnmount(() => {\n isUnmounted = true;\n // 清除 ResizeObserver\n if (resizeObserver) {\n resizeObserver.disconnect();\n resizeObserver = null;\n }\n // 清除等待 EasyPlayerPro 加载的轮询定时器,防止卸载后继续创建播放器\n if (waitTimer !== null) {\n clearInterval(waitTimer);\n waitTimer = null;\n }\n // 清除定时暂停的定时器\n if (pauseCycleTimer.value !== null) {\n clearInterval(pauseCycleTimer.value);\n pauseCycleTimer.value = null;\n }\n if (props.debug) {\n console.log(\"组件卸载\");\n }\n playUrl.value = \"\";\n destroy();\n});\n\nconst play = (url?: string) => {\n if (url) {\n initPlayer(url);\n } else {\n if (player) {\n player.play(playUrl.value);\n // pauseMode=3 时,继续播放后重新开始60分钟计时\n if (props.pauseMode === 3) {\n if (pauseCycleTimer.value !== null) {\n clearInterval(pauseCycleTimer.value);\n }\n pauseCycleTimer.value = setInterval(\n () => {\n if (!isUnmounted && player) {\n player.pause?.();\n if (props.debug) {\n console.log(\"pauseMode: 每60分钟定时暂停\");\n }\n }\n },\n 1000 * 60 * 10,\n );\n }\n } else {\n destroy();\n }\n }\n};\n\nconst playerPause = () => {\n if (props.debug) {\n console.log(\"暂停\");\n }\n player?.pause?.();\n};\n\nconst playerScreenShot = () => {\n if (props.debug) {\n console.log(\"截图\");\n }\n player?.screenshot?.(\n `${props.areaName}_${new Date().getTime()}`,\n \"png\",\n 0.5,\n \"download\",\n );\n};\n\ndefineExpose({\n play,\n destroy,\n getPlayer: () => player,\n pause: playerPause,\n screenshot: playerScreenShot,\n isMute: () => {\n return player?.isMute?.();\n },\n setMute: (mute: number) => {\n player?.setMute?.(mute);\n },\n});\n\n/**\n * 格式化URL,确保使用完整的URL\n * @param url - 原始URL\n * @returns 格式化后的URL\n */\nconst formatUrl = (url: string): string => {\n if (!url) return \"\";\n\n // 如果已经是完整URL,直接返回\n if (\n url.startsWith(\"http://\") ||\n url.startsWith(\"https://\") ||\n url.startsWith(\"ws://\")\n ) {\n return url;\n }\n\n // 如果URL以//开头,自动补全协议(根据当前页面协议)\n if (url.startsWith(\"//\")) {\n if (typeof window !== \"undefined\" && window.location) {\n return `${window.location.protocol}${url}`;\n }\n // SSR环境下默认使用https\n return `https:${url}`;\n }\n\n // 检查是否在浏览器环境中,避免SSR环境下的location访问错误\n if (typeof window !== \"undefined\" && window.location) {\n // 如果是相对路径,添加当前域名\n return `${window.location.origin}${url.startsWith(\"/\") ? \"\" : \"/\"}${url}`;\n }\n\n // SSR 环境下返回相对路径\n return url;\n};\n\nasync function initPlayer(url: string) {\n if (props.debug) {\n console.log(\"初始化播放器\", url);\n }\n // 清除上一次可能残留的轮询定时器\n if (waitTimer !== null) {\n clearInterval(waitTimer);\n waitTimer = null;\n }\n removePlayerDom();\n if (url) {\n playUrl.value = formatUrl(url);\n if (props.debug) {\n console.log(\"格式化后的url\", playUrl.value);\n }\n if (typeof window !== \"undefined\" && window?.EasyPlayerPro) {\n createPlayer();\n } else if (typeof window !== \"undefined\") {\n waitTimer = setInterval(() => {\n if (window?.EasyPlayerPro) {\n clearInterval(waitTimer!);\n waitTimer = null;\n // 组件已卸载则不再创建播放器\n if (!isUnmounted) {\n createPlayer();\n }\n }\n }, 100);\n }\n }\n}\n\n/**\n * 移除播放器DOM\n */\nfunction removePlayerDom() {\n if (typeof document !== \"undefined\") {\n const dom = document.getElementById(id);\n dom && dom.remove();\n }\n}\n\n/**\n * 创建播放器DOM\n */\nfunction createPlayerDom(): Promise<HTMLDivElement> {\n removePlayerDom();\n return new Promise((resolve) => {\n if (typeof document === \"undefined\") {\n resolve(null!);\n return;\n }\n // 最大重试帧数,防止无限等待\n let retryCount = 0;\n const MAX_RETRY = 60; // 约 1 秒 (60 * 16ms)\n\n const tryCreate = () => {\n const rect = playerRef.value?.getBoundingClientRect();\n if (!rect || rect.width <= 0 || rect.height <= 0) {\n if (++retryCount < MAX_RETRY) {\n requestAnimationFrame(tryCreate);\n return;\n }\n // 超过最大重试次数,使用 100% 尺寸兜底\n console.warn(\"[EasyPlayer] 容器尺寸获取超时,使用默认尺寸\");\n }\n\n const dom = document.createElement(\"div\");\n dom.id = id;\n // 使用实际尺寸,若获取失败则用 100%\n const rectW = rect?.width ?? 0;\n const rectH = rect?.height ?? 0;\n console.log(\"🚀 ~ rectH:\", rectH);\n const w = rectW > 0 ? rectW : playerRef.value?.offsetWidth || 800;\n const h = rectH > 0 ? rectH : playerRef.value?.offsetHeight || 450;\n\n dom.style.width = `${w}px`;\n dom.style.height =\n props.areaName || props.deviceSerial ? `${h - 32}px` : `${h}px`;\n playerRef.value?.appendChild(dom);\n resolve(dom);\n };\n\n requestAnimationFrame(tryCreate);\n });\n}\n\nasync function createPlayer() {\n if (props.debug) {\n console.log(\"创建播放器\");\n }\n videoInfo.value = null;\n await createPlayerDom();\n // 每30秒重启一次播放器,防止播放器卡死\n if (restartTimer.value !== null) {\n clearInterval(restartTimer.value);\n restartTimer.value = null;\n }\n restartTimer.value = setInterval(\n () => {\n destroy(false);\n setTimeout(() => {\n startPlayer();\n }, 1000 * 20);\n },\n 1000 * 60 * 60,\n );\n startPlayer();\n}\n\nasync function startPlayer() {\n try {\n if (typeof window !== \"undefined\" && typeof document !== \"undefined\") {\n const isMicro = window.__MICRO_APP_ENVIRONMENT__;\n console.log(\"🚀 ~ isMicro:\", isMicro);\n player = new window.EasyPlayerPro(document.getElementById(id), {\n isLive: true, // 是否直播\n hasAudio: false, // 是否解析音频\n bufferTime: 0.2, // 直播监控缓存时长设为0,减少内存堆积\n stretch: true, // 加视频拉伸\n MSE: true, // H.264 走 MSE 硬解\n WCS: true, // H.265 走 WebCodecs 硬解(Chrome 的 MSE 不支持 H265,需靠 WCS 兜底)\n WASM: true, // 硬解不可用时降级 WASM 软解\n debug: true,\n maxDelay: 300, // 最大容忍延迟300ms,超时自动丢帧追实时画面\n reconnect: true, // 断线自动重连,单路故障不影响其他8路\n // 使用动态拼接的绝对路径\n decoderPath: `${isMicro ? window.location.origin : \"/\"}plugins/easy-player/`,\n decoder: \"EasyPlayer-decode.js\",\n });\n // 创建成功,重置重试计数\n createRetryCount = 0;\n }\n if (player) {\n player.play(playUrl.value);\n\n // 根据 pauseMode 处理暂停逻辑\n // pauseMode=2 或 3 时,初始默认暂停\n if (props.pauseMode === 2 || props.pauseMode === 3) {\n // 短暂延迟后暂停,确保播放器已开始播放再暂停\n setTimeout(() => {\n if (!isUnmounted && player) {\n player.pause?.();\n if (props.debug) {\n console.log(\"pauseMode: 初始默认暂停\");\n }\n }\n }, 500);\n }\n\n // pauseMode=3 时,每60分钟触发一次暂停\n if (props.pauseMode === 3) {\n if (pauseCycleTimer.value !== null) {\n clearInterval(pauseCycleTimer.value);\n }\n pauseCycleTimer.value = setInterval(\n () => {\n if (!isUnmounted && player) {\n player.pause?.();\n if (props.debug) {\n console.log(\"pauseMode: 每60分钟定时暂停\");\n }\n }\n },\n 1000 * 60 * 60,\n );\n }\n\n const timeoutHandler = () => {\n props.debug && console.log(\"加载超时\");\n emits(\"timeout\");\n playSuccess.value = false;\n destroy();\n initPlayer(playUrl.value);\n };\n\n const errorHandler = (error?: any) => {\n props.debug && console.log(\"播放异常\", error);\n emits(\"error\", error);\n playSuccess.value = false;\n // destroy();\n };\n\n const playHandler = () => {\n playSuccess.value = true;\n props.debug && console.log(\"播放\");\n emits(\"play\");\n };\n\n const pauseHandler = () => {\n props.debug && console.log(\"暂停\");\n emits(\"pause\");\n };\n\n const videoInfoHandler = (info: any) => {\n props.debug && console.log(\"视频信息\", info);\n videoInfo.value = info;\n emits(\"videoInfo\", info);\n };\n\n const muteHandler = (mute: false) => {\n props.debug && console.log(\"静音\");\n emits(\"mute\", mute);\n };\n\n player.on(\"timeout\", timeoutHandler);\n player.on(\"error\", errorHandler);\n player.on(\"play\", playHandler);\n player.on(\"pause\", pauseHandler);\n player.on(\"videoInfo\", videoInfoHandler);\n player.on(\"mute\", muteHandler);\n\n eventHandlers.value.set(\"timeout\", timeoutHandler);\n eventHandlers.value.set(\"error\", errorHandler);\n eventHandlers.value.set(\"play\", playHandler);\n eventHandlers.value.set(\"pause\", pauseHandler);\n eventHandlers.value.set(\"videoInfo\", videoInfoHandler);\n eventHandlers.value.set(\"mute\", muteHandler);\n }\n } catch (error) {\n const isWorkletError =\n error instanceof DOMException &&\n (error.name === \"AbortError\" ||\n String(error.message).includes(\"worklet\"));\n // worklet 加载偶发失败,自动重试\n if (isWorkletError && createRetryCount < MAX_CREATE_RETRY) {\n createRetryCount++;\n if (props.debug) {\n console.warn(\n `[EasyPlayer] AudioWorklet 加载失败(第 ${createRetryCount}/${MAX_CREATE_RETRY} 次),1秒后重试...`,\n error,\n );\n }\n destroy(false);\n setTimeout(() => {\n if (!isUnmounted) startPlayer();\n }, 1000);\n return;\n }\n console.error(\"创建播放器失败:\", error);\n setTimeout(() => {\n if (!isUnmounted) startPlayer();\n }, 2000);\n }\n}\n\nfunction destroy(flag = true) {\n if (player) {\n eventHandlers.value.forEach((handler, eventName) => {\n player.off(eventName, handler);\n });\n eventHandlers.value.clear();\n player.destroy();\n player = null;\n }\n\n if (flag) {\n // 清除定时重启播放器的定时器\n if (restartTimer.value !== null) {\n clearInterval(restartTimer.value);\n restartTimer.value = null;\n }\n // 清除定时暂停的定时器\n if (pauseCycleTimer.value !== null) {\n clearInterval(pauseCycleTimer.value);\n pauseCycleTimer.value = null;\n }\n removePlayerDom();\n }\n}\n</script>\n\n<template>\n <div\n ref=\"playerRef\"\n class=\"i-tzj-easyPlayer\"\n :class=\"customBar ? 'i-tzj-easyPlayer--custom' : ''\"\n >\n <!-- 播放器底部操作栏 -->\n <slot name=\"customBar\" />\n </div>\n</template>\n"],"names":["useSlots","computed","uuid","shallowRef","ref","onMounted","watch","onBeforeUnmount","_createElementBlock","_normalizeClass","_createCommentVNode","_renderSlot"],"mappings":"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"}
1
+ {"version":3,"file":"easyPlayer.vue2.js","sources":["../../../../../../../packages/components/tzj-player/src/easyPlayer.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport {\n computed,\n onBeforeUnmount,\n onMounted,\n ref,\n shallowRef,\n useSlots,\n watch,\n} from \"vue\";\nimport { TzjPlayerProps, uuid } from \"./tzj-player\";\n\ndefineOptions({\n name: \"EasyPlayer\",\n});\n\nconst props = defineProps(TzjPlayerProps);\nconst emits = defineEmits([\n \"timeout\",\n \"error\",\n \"play\",\n \"pause\",\n \"mute\",\n \"videoInfo\",\n]);\nconst slots = useSlots();\nconst customBar = computed(() => slots.customBar);\n\nlet player: any = null;\nconst id = uuid();\nconst playerRef = shallowRef<HTMLDivElement>();\nconst playSuccess = ref(true);\nconst playUrl = ref(\"\");\nconst videoInfo = ref<any>(null);\nconst eventHandlers = ref<Map<string, Function>>(new Map());\n// 用于追踪等待 EasyPlayerPro 加载的轮询定时器,防止组件卸载后泄漏\nlet waitTimer: ReturnType<typeof setInterval> | null = null;\n// 用于定时重启播放器的定时器,防止播放器卡死\nconst restartTimer = ref<ReturnType<typeof setInterval> | null>(null);\n// 用于定时暂停播放器的定时器(pauseMode=3时,每60分钟触发一次暂停)\nconst pauseCycleTimer = ref<ReturnType<typeof setInterval> | null>(null);\n// ResizeObserver:监听容器尺寸变化,同步更新播放器 DOM 尺寸\nlet resizeObserver: ResizeObserver | null = null;\n// startPlayer 重试计数,处理 worklet/AbortError 偶发失败\nlet createRetryCount = 0;\nconst MAX_CREATE_RETRY = 3;\n// 标记组件是否已卸载,防止卸载后的异步操作继续执行\nlet isUnmounted = false;\n\nonMounted(() => {\n // 监听容器尺寸变化,同步播放器 DOM 尺寸(防止控件丢失)\n if (typeof ResizeObserver !== \"undefined\" && playerRef.value) {\n resizeObserver = new ResizeObserver((entries) => {\n for (const entry of entries) {\n const { width, height } = entry.contentRect;\n const dom = document.getElementById(id);\n if (dom && width > 0 && height > 0) {\n dom.style.width = `${width}px`;\n dom.style.height = `${height}px`;\n }\n }\n });\n resizeObserver.observe(playerRef.value);\n }\n initPlayer(props.url || \"\");\n});\n\nwatch(\n () => props.url,\n (newUrl: string) => {\n initPlayer(newUrl || \"\");\n },\n);\n\nonBeforeUnmount(() => {\n isUnmounted = true;\n // 清除 ResizeObserver\n if (resizeObserver) {\n resizeObserver.disconnect();\n resizeObserver = null;\n }\n // 清除等待 EasyPlayerPro 加载的轮询定时器,防止卸载后继续创建播放器\n if (waitTimer !== null) {\n clearInterval(waitTimer);\n waitTimer = null;\n }\n // 清除定时暂停的定时器\n if (pauseCycleTimer.value !== null) {\n clearInterval(pauseCycleTimer.value);\n pauseCycleTimer.value = null;\n }\n if (props.debug) {\n console.log(\"组件卸载\");\n }\n playUrl.value = \"\";\n destroy();\n});\n\nconst play = (url?: string) => {\n if (url) {\n initPlayer(url);\n } else {\n if (player) {\n player.play(playUrl.value);\n // pauseMode=3 时,继续播放后重新开始60分钟计时\n if (props.pauseMode === 3) {\n if (pauseCycleTimer.value !== null) {\n clearInterval(pauseCycleTimer.value);\n }\n pauseCycleTimer.value = setInterval(\n () => {\n if (!isUnmounted && player) {\n player.pause?.();\n if (props.debug) {\n console.log(\"pauseMode: 每60分钟定时暂停\");\n }\n }\n },\n 1000 * 60 * 10,\n );\n }\n } else {\n destroy();\n }\n }\n};\n\nconst playerPause = () => {\n if (props.debug) {\n console.log(\"暂停\");\n }\n player?.pause?.();\n};\n\nconst playerScreenShot = () => {\n if (props.debug) {\n console.log(\"截图\");\n }\n player?.screenshot?.(\n `${props.areaName}_${new Date().getTime()}`,\n \"png\",\n 0.5,\n \"download\",\n );\n};\n\ndefineExpose({\n play,\n destroy,\n getPlayer: () => player,\n pause: playerPause,\n screenshot: playerScreenShot,\n isMute: () => {\n return player?.isMute?.();\n },\n setMute: (mute: number) => {\n player?.setMute?.(mute);\n },\n});\n\n/**\n * 格式化URL,确保使用完整的URL\n * @param url - 原始URL\n * @returns 格式化后的URL\n */\nconst formatUrl = (url: string): string => {\n if (!url) return \"\";\n\n // 如果已经是完整URL,直接返回\n if (\n url.startsWith(\"http://\") ||\n url.startsWith(\"https://\") ||\n url.startsWith(\"ws://\")\n ) {\n return url;\n }\n\n // 如果URL以//开头,自动补全协议(根据当前页面协议)\n if (url.startsWith(\"//\")) {\n if (typeof window !== \"undefined\" && window.location) {\n return `${window.location.protocol}${url}`;\n }\n // SSR环境下默认使用https\n return `https:${url}`;\n }\n\n // 检查是否在浏览器环境中,避免SSR环境下的location访问错误\n if (typeof window !== \"undefined\" && window.location) {\n // 如果是相对路径,添加当前域名\n return `${window.location.origin}${url.startsWith(\"/\") ? \"\" : \"/\"}${url}`;\n }\n\n // SSR 环境下返回相对路径\n return url;\n};\n\nasync function initPlayer(url: string) {\n if (props.debug) {\n console.log(\"初始化播放器\", url);\n }\n // 清除上一次可能残留的轮询定时器\n if (waitTimer !== null) {\n clearInterval(waitTimer);\n waitTimer = null;\n }\n removePlayerDom();\n if (url) {\n playUrl.value = formatUrl(url);\n if (props.debug) {\n console.log(\"格式化后的url\", playUrl.value);\n }\n if (typeof window !== \"undefined\" && window?.EasyPlayerPro) {\n createPlayer();\n } else if (typeof window !== \"undefined\") {\n waitTimer = setInterval(() => {\n if (window?.EasyPlayerPro) {\n clearInterval(waitTimer!);\n waitTimer = null;\n // 组件已卸载则不再创建播放器\n if (!isUnmounted) {\n createPlayer();\n }\n }\n }, 100);\n }\n }\n}\n\n/**\n * 移除播放器DOM\n */\nfunction removePlayerDom() {\n if (typeof document !== \"undefined\") {\n const dom = document.getElementById(id);\n dom && dom.remove();\n }\n}\n\n/**\n * 创建播放器DOM\n */\nfunction createPlayerDom(): Promise<HTMLDivElement> {\n removePlayerDom();\n return new Promise((resolve) => {\n if (typeof document === \"undefined\") {\n resolve(null!);\n return;\n }\n // 最大重试帧数,防止无限等待\n let retryCount = 0;\n const MAX_RETRY = 60; // 约 1 秒 (60 * 16ms)\n\n const tryCreate = () => {\n const rect = playerRef.value?.getBoundingClientRect();\n if (!rect || rect.width <= 0 || rect.height <= 0) {\n if (++retryCount < MAX_RETRY) {\n requestAnimationFrame(tryCreate);\n return;\n }\n // 超过最大重试次数,使用 100% 尺寸兜底\n console.warn(\"[EasyPlayer] 容器尺寸获取超时,使用默认尺寸\");\n }\n\n const dom = document.createElement(\"div\");\n dom.id = id;\n // 使用实际尺寸,若获取失败则用 100%\n const rectW = rect?.width ?? 0;\n const rectH = rect?.height ?? 0;\n console.log(\"🚀 ~ rectH:\", rectH);\n const w = rectW > 0 ? rectW : playerRef.value?.offsetWidth || 800;\n const h = rectH > 0 ? rectH : playerRef.value?.offsetHeight || 450;\n\n dom.style.width = `${w}px`;\n dom.style.height =\n props.areaName || props.deviceSerial ? `${h - 32}px` : `${h}px`;\n playerRef.value?.appendChild(dom);\n resolve(dom);\n };\n\n requestAnimationFrame(tryCreate);\n });\n}\n\nasync function createPlayer() {\n if (props.debug) {\n console.log(\"创建播放器\");\n }\n videoInfo.value = null;\n await createPlayerDom();\n // 每30秒重启一次播放器,防止播放器卡死\n if (restartTimer.value !== null) {\n clearInterval(restartTimer.value);\n restartTimer.value = null;\n }\n restartTimer.value = setInterval(\n () => {\n destroy(false);\n setTimeout(() => {\n startPlayer();\n }, 1000 * 20);\n },\n 1000 * 60 * 60,\n );\n startPlayer();\n}\n\nasync function startPlayer() {\n try {\n if (typeof window !== \"undefined\" && typeof document !== \"undefined\") {\n const isMicro = window.__MICRO_APP_ENVIRONMENT__;\n console.log(\"🚀 ~ isMicro:\", isMicro);\n player = new window.EasyPlayerPro(document.getElementById(id), {\n isLive: true, // 是否直播\n hasAudio: false, // 是否解析音频\n bufferTime: 0.2, // 直播监控缓存时长设为0,减少内存堆积\n stretch: true, // 加视频拉伸\n MSE: true, // H.264 走 MSE 硬解\n WCS: true, // H.265 走 WebCodecs 硬解(Chrome 的 MSE 不支持 H265,需靠 WCS 兜底)\n WASM: true, // 硬解不可用时降级 WASM 软解\n debug: true,\n maxDelay: 300, // 最大容忍延迟300ms,超时自动丢帧追实时画面\n reconnect: true, // 断线自动重连,单路故障不影响其他8路\n // // 使用动态拼接的绝对路径\n // decoderPath: `${window.location.origin}/plugins/easy-player/`,\n // decoder: \"EasyPlayer-decode.js\",\n });\n // 创建成功,重置重试计数\n createRetryCount = 0;\n }\n if (player) {\n player.play(playUrl.value);\n\n // 根据 pauseMode 处理暂停逻辑\n // pauseMode=2 或 3 时,初始默认暂停\n if (props.pauseMode === 2 || props.pauseMode === 3) {\n // 短暂延迟后暂停,确保播放器已开始播放再暂停\n setTimeout(() => {\n if (!isUnmounted && player) {\n player.pause?.();\n if (props.debug) {\n console.log(\"pauseMode: 初始默认暂停\");\n }\n }\n }, 500);\n }\n\n // pauseMode=3 时,每60分钟触发一次暂停\n if (props.pauseMode === 3) {\n if (pauseCycleTimer.value !== null) {\n clearInterval(pauseCycleTimer.value);\n }\n pauseCycleTimer.value = setInterval(\n () => {\n if (!isUnmounted && player) {\n player.pause?.();\n if (props.debug) {\n console.log(\"pauseMode: 每60分钟定时暂停\");\n }\n }\n },\n 1000 * 60 * 60,\n );\n }\n\n const timeoutHandler = () => {\n props.debug && console.log(\"加载超时\");\n emits(\"timeout\");\n playSuccess.value = false;\n destroy();\n initPlayer(playUrl.value);\n };\n\n const errorHandler = (error?: any) => {\n props.debug && console.log(\"播放异常\", error);\n emits(\"error\", error);\n playSuccess.value = false;\n // destroy();\n };\n\n const playHandler = () => {\n playSuccess.value = true;\n props.debug && console.log(\"播放\");\n emits(\"play\");\n };\n\n const pauseHandler = () => {\n props.debug && console.log(\"暂停\");\n emits(\"pause\");\n };\n\n const videoInfoHandler = (info: any) => {\n props.debug && console.log(\"视频信息\", info);\n videoInfo.value = info;\n emits(\"videoInfo\", info);\n };\n\n const muteHandler = (mute: false) => {\n props.debug && console.log(\"静音\");\n emits(\"mute\", mute);\n };\n\n player.on(\"timeout\", timeoutHandler);\n player.on(\"error\", errorHandler);\n player.on(\"play\", playHandler);\n player.on(\"pause\", pauseHandler);\n player.on(\"videoInfo\", videoInfoHandler);\n player.on(\"mute\", muteHandler);\n\n eventHandlers.value.set(\"timeout\", timeoutHandler);\n eventHandlers.value.set(\"error\", errorHandler);\n eventHandlers.value.set(\"play\", playHandler);\n eventHandlers.value.set(\"pause\", pauseHandler);\n eventHandlers.value.set(\"videoInfo\", videoInfoHandler);\n eventHandlers.value.set(\"mute\", muteHandler);\n }\n } catch (error) {\n const isWorkletError =\n error instanceof DOMException &&\n (error.name === \"AbortError\" ||\n String(error.message).includes(\"worklet\"));\n // worklet 加载偶发失败,自动重试\n if (isWorkletError && createRetryCount < MAX_CREATE_RETRY) {\n createRetryCount++;\n if (props.debug) {\n console.warn(\n `[EasyPlayer] AudioWorklet 加载失败(第 ${createRetryCount}/${MAX_CREATE_RETRY} 次),1秒后重试...`,\n error,\n );\n }\n destroy(false);\n setTimeout(() => {\n if (!isUnmounted) startPlayer();\n }, 1000);\n return;\n }\n console.error(\"创建播放器失败:\", error);\n setTimeout(() => {\n if (!isUnmounted) startPlayer();\n }, 2000);\n }\n}\n\nfunction destroy(flag = true) {\n if (player) {\n eventHandlers.value.forEach((handler, eventName) => {\n player.off(eventName, handler);\n });\n eventHandlers.value.clear();\n player.destroy();\n player = null;\n }\n\n if (flag) {\n // 清除定时重启播放器的定时器\n if (restartTimer.value !== null) {\n clearInterval(restartTimer.value);\n restartTimer.value = null;\n }\n // 清除定时暂停的定时器\n if (pauseCycleTimer.value !== null) {\n clearInterval(pauseCycleTimer.value);\n pauseCycleTimer.value = null;\n }\n removePlayerDom();\n }\n}\n</script>\n\n<template>\n <div\n ref=\"playerRef\"\n class=\"i-tzj-easyPlayer\"\n :class=\"customBar ? 'i-tzj-easyPlayer--custom' : ''\"\n >\n <!-- 播放器底部操作栏 -->\n <slot name=\"customBar\" />\n </div>\n</template>\n"],"names":["useSlots","computed","uuid","shallowRef","ref","onMounted","watch","onBeforeUnmount","_createElementBlock","_normalizeClass","_createCommentVNode","_renderSlot"],"mappings":"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"}
@@ -6,16 +6,16 @@ var __defProp = Object.defineProperty;
6
6
  var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
7
7
  function getAccessKey() {
8
8
  if (typeof localStorage !== "undefined") {
9
- return localStorage.getItem("YZYAK") || "F169AE4D261B4E17BAE7872BB1450CF33227";
9
+ return localStorage.getItem("YZYAK") || "";
10
10
  }
11
- return "F169AE4D261B4E17BAE7872BB1450CF33227";
11
+ return "";
12
12
  }
13
13
  __name(getAccessKey, "getAccessKey");
14
14
  function getSecretKey() {
15
15
  if (typeof localStorage !== "undefined") {
16
- return localStorage.getItem("YZYSK") || "65B84A07533A463BA14F7AC179C0D4BB5362";
16
+ return localStorage.getItem("YZYSK") || "";
17
17
  }
18
- return "65B84A07533A463BA14F7AC179C0D4BB5362";
18
+ return "";
19
19
  }
20
20
  __name(getSecretKey, "getSecretKey");
21
21
  const ACCESS_KEY = getAccessKey();
@@ -1 +1 @@
1
- {"version":3,"file":"yunzhiyan.js","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.js","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\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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yimou6/common-ui",
3
- "version": "1.13.25",
3
+ "version": "1.13.27",
4
4
  "description": "Vue3 Component Library",
5
5
  "author": "yimou6",
6
6
  "license": "MIT",
@@ -0,0 +1 @@
1
+ .w-full{width:100%}.h-full{height:100%}.w-8{width:2rem}.h-8{height:2rem}.\!w-8{width:2rem!important}.h-10{height:2.5rem}.w-52{width:13rem}.relative{position:relative}.absolute{position:absolute}.right-6{right:1.5rem}.bottom-6{bottom:1.5rem}.flex{display:flex}.flex-col{flex-direction:column}.flex-nowrap{flex-wrap:nowrap}.flex-shrink-0{flex-shrink:0}.items-center{align-items:center}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-start{justify-content:flex-start}.justify-items-start{justify-items:start}.grid{display:grid}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.gap-1{gap:.25rem}.gap-2{gap:.5rem}.col-span-1{grid-column:span 1/span 1}.col-span-2{grid-column:span 2/span 2}.col-span-3{grid-column:span 3/span 3}.col-span-4{grid-column:span 4/span 4}.col-span-8{grid-column:span 8/span 8}.mr-2{margin-right:.5rem}.mr-3{margin-right:.75rem}.mr-5{margin-right:1.25rem}.mt-1{margin-top:.25rem}.mt-4{margin-top:1rem}.\!mt-10{margin-top:2.5rem!important}.p-1{padding:.25rem}.p-2{padding:.5rem}.px-3\.5{padding-left:.875rem;padding-right:.875rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.pb-5{padding-bottom:1.25rem}.text-xs{font-size:.75rem;line-height:1rem}.text-white{color:#fff}.text-primary{color:var(--el-color-primary)}.text-center{text-align:center}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.select-none{-webkit-user-select:none;user-select:none}.cursor-pointer{cursor:pointer}.break-words{overflow-wrap:break-word}.overflow-hidden{overflow:hidden}.overflow-x-hidden{overflow-x:hidden}.overflow-y-auto{overflow-y:auto}.border{border-width:1px}.border-gray-300{border-color:#d1d5db}.rounded{border-radius:.25rem}.opacity-80{opacity:.8}
@@ -1 +1 @@
1
- @charset "UTF-8";.measure-result{background:rgba(255,255,255,.9);padding:5px 10px;border-radius:4px;box-shadow:0 2px 4px rgba(0,0,0,.2);font-size:14px;color:#333}.area-display{background:rgba(255,255,255,.9);padding:8px 12px;border-radius:4px;box-shadow:0 2px 6px rgba(0,0,0,.3);font-size:14px;color:#333;cursor:pointer;text-align:center}.area-display div:first-child{font-weight:700;margin-bottom:4px}.alarm-dialog{width:370px;height:280px;padding:20px}.alarm-dialog .alarm-dialog__title{color:#fff;font-size:20px;font-weight:700;display:flex;justify-content:space-between;align-items:center;padding-bottom:10px;border-bottom:1px solid rgba(245,63,63,.4);position:relative}.alarm-dialog .alarm-dialog__title .el-icon{cursor:pointer;color:#f53f3f;font-weight:700}.alarm-dialog .alarm-dialog__title:before{content:"";width:6px;height:3px;position:absolute;bottom:-2px;left:0;background-color:#f53f3f}.alarm-dialog .alarm-dialog__title:after{content:"";width:6px;height:3px;position:absolute;bottom:-2px;right:0;background-color:#f53f3f}.alarm-dialog .alarm-dialog__content{margin-top:20px;width:100%;height:180px;overflow:hidden}.alarm-dialog .alarm-dialog__content .alarm-desc{color:#fff;font-size:14px;width:100%}.alarm-dialog .alarm-dialog__content .alarm-desc-item{height:28px;display:flex;align-items:center;justify-content:flex-start}.alarm-dialog .alarm-dialog__content .alarm-desc span{padding-left:10px}.alarm-dialog .alarm-dialog__content .alarm-video{height:100%;width:100%}.alarm-dialog .alarm-dialog__content .alarm-video video{height:120px;width:100%}.alarm-dialog .alarm-dialog__content .alarm-video .alarm-video-desc{color:#fff;font-size:14px;width:100%}.alarm-dialog .alarm-dialog__content .alarm-video .alarm-video-desc-item{height:28px;display:flex;align-items:center;justify-content:flex-start}.alarm-dialog .alarm-dialog__content .alarm-video .alarm-video-desc-item span+span{margin-left:8px}.alarm-dialog .alarm-dialog__content .alarm-device{height:120px;display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));grid-row-gap:8px}.alarm-dialog .alarm-dialog__content .alarm-device .alarm-device-item{display:flex;height:50px;align-items:center;justify-content:flex-start}.alarm-dialog .alarm-dialog__content .alarm-device .alarm-device-item .el-image{height:50px;width:50px;margin-right:6px}.alarm-dialog .alarm-dialog__content .alarm-device .alarm-device-item>div div:nth-child(1){font-size:14px;color:#fff}.alarm-dialog .alarm-dialog__content .alarm-device .alarm-device-item>div div:nth-child(2){font-size:20px;color:#00d5ff;font-weight:700}.alarm-dialog .alarm-dialog__content .alarm-device-desc{color:#fff;font-size:14px;width:100%}.alarm-dialog .alarm-dialog__content .alarm-device-desc-item{height:28px;display:flex;align-items:center;justify-content:flex-start}.alarm-dialog .alarm-dialog__content .alarm-device-desc-item span+span{margin-left:8px}.alarm-window1{width:700px;height:260px;padding:20px;background-repeat:no-repeat;background-size:100% 100%}.alarm-window1 .alarm-window1__title{color:#fff;font-size:20px;font-weight:700;display:flex;justify-content:space-between;align-items:center;padding-bottom:10px;border-bottom:1px solid rgba(245,63,63,.4);position:relative}.alarm-window1 .alarm-window1__title .el-icon{cursor:pointer;color:#f53f3f;font-weight:700}.alarm-window1 .alarm-window1__title:before{content:"";width:6px;height:3px;position:absolute;bottom:-2px;left:0;background-color:#f53f3f}.alarm-window1 .alarm-window1__title:after{content:"";width:6px;height:3px;position:absolute;bottom:-2px;right:0;background-color:#f53f3f}.alarm-window1 .alarm-window1__content{margin-top:20px;width:300px;height:160px;background-color:rgba(0,0,0,.2)}.alarm-window1 .alarm-window2__info{width:360px;margin-left:20px}.alarm-window1 .alarm-window2__info .alarm-window2__title{font-size:20px;font-weight:700;color:#fff;padding-bottom:10px;border-bottom:1px solid #fff;background:linear-gradient(0deg,#f53f3f 0,#e1af00 100%);-webkit-background-clip:text;-webkit-text-fill-color:transparent}.alarm-window1 .alarm-window2__info .alarm-window2__list{display:flex;flex-direction:column;font-size:14px;color:#fff;margin:10px 0}.alarm-window1 .alarm-window2__info .alarm-tags{display:flex;flex-direction:row;justify-content:flex-start;align-items:flex-start;flex-wrap:wrap;margin-left:-10px;height:120px}.alarm-window1 .alarm-window2__info .alarm-tags .alarm-tag{background:#337ecc 100%;background:linear-gradient(90deg,#337ecc,rgba(51,126,204,.2));color:#fff;font-size:16px;padding:6px 14px;border-radius:4px;cursor:pointer;margin-left:10px}.alarm-window1 .alarm-window2__info .alarm-opera{display:flex;justify-content:space-between}.alarm-window1 .alarm-window2__info .alarm-opera .alarm-normal-btn{border:1px solid #409eff;border-radius:4px;width:110px;height:36px;display:flex;align-items:center;justify-content:center;font-size:16px;color:#fff;cursor:pointer}.alarm-window2{position:relative;width:800px;display:flex;justify-content:flex-start;padding:20px;background:rgba(4,50,86,.9);border:2px solid #409eff;box-sizing:border-box}.alarm-window2 .angle{width:25px;height:25px;border:2px solid #00f0ff;position:absolute}.alarm-window2 .angle.left-top{top:-2px;left:-2px;border-right:none;border-bottom:none}.alarm-window2 .angle.left-bottom{bottom:-2px;left:-2px;border-right:none;border-top:none}.alarm-window2 .angle.right-top{top:-2px;right:-2px;border-left:none;border-bottom:none}.alarm-window2 .angle.right-bottom{bottom:-2px;right:-2px;border-left:none;border-top:none}.alarm-window2 .el-icon{cursor:pointer;position:absolute;top:10px;right:10px;font-weight:700;font-size:20px;color:#fff}.alarm-window2 .alarm-window2__content{width:400px;height:260px;background-color:rgba(0,0,0,.2)}.alarm-window2 .alarm-window2__info{width:360px;margin-left:20px}.alarm-window2 .alarm-window2__info .alarm-window2__title{font-size:20px;font-weight:700;color:#fff;padding-bottom:10px;border-bottom:1px solid #fff;background:linear-gradient(0deg,#f53f3f 0,#e1af00 100%);-webkit-background-clip:text;-webkit-text-fill-color:transparent}.alarm-window2 .alarm-window2__info .alarm-window2__list{display:flex;flex-direction:column;font-size:14px;color:#fff;margin:10px 0}.alarm-window2 .alarm-window2__info .alarm-tags{display:flex;flex-direction:row;justify-content:flex-start;align-items:flex-start;flex-wrap:wrap;margin-left:-10px;height:120px}.alarm-window2 .alarm-window2__info .alarm-tags .alarm-tag{background:#337ecc 100%;background:linear-gradient(90deg,#337ecc,rgba(51,126,204,.2));color:#fff;font-size:16px;padding:6px 14px;border-radius:4px;cursor:pointer;margin-left:10px}.alarm-window2 .alarm-window2__info .alarm-opera{display:flex;justify-content:space-between}.alarm-window2 .alarm-window2__info .alarm-opera .alarm-normal-btn{border:1px solid #409eff;border-radius:4px;width:110px;height:36px;display:flex;align-items:center;justify-content:center;font-size:16px;color:#fff;cursor:pointer}.map-input2:focus-within .input-close-icon,.map-input2:hover .input-close-icon{display:block}.input-close-icon2{cursor:pointer;display:none}.map-container2{min-height:500px}.map-container2 .map-container-inner{position:relative}.map-container2 .map-container-inner #container{position:relative;width:100%;height:500px}.map-container2 .map-container-inner #container :deep(.amap-marker) img{width:25px;height:34px}.map-container2 .map-container-inner #map-search-result{display:none;position:absolute;right:-5px;top:0;width:30%;height:500px;overflow-y:auto}.district2{margin-left:10px;font-size:12px;color:#ccc}.bg-overlay2{position:relative;width:50px;height:50px;background:url(弹框.png);background-size:100% 100%;background-repeat:no-repeat;background-color:transparent}.t-bg-overlay{position:relative;width:350px;height:250px;background-size:100% 80%;background-repeat:no-repeat}.t-bg-overlay2{position:relative;width:100px;height:100px;background-size:100% 80%;background-repeat:no-repeat}.t-overlay-item{z-index:99999!important;height:10px;margin-top:30px;margin-left:38px;font-size:18px;color:#ff0;width:100%}.t-popper{height:350px!important}.t-fold{height:40px!important}.t-unfold{height:auto!important}.ol-attribution{display:none!important}.ol-zoom{display:none!important}.vc-sketch{position:absolute!important;z-index:999999999!important}.open-info-list{height:95%!important}.textx{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.text-gradient2{background:linear-gradient(to right,#fbff00,tomato,#ff8c00);background-clip:text;-webkit-background-clip:text;color:transparent;font-weight:700}.map-input:focus-within .input-close-icon,.map-input:hover .input-close-icon{display:block}.input-close-icon{cursor:pointer;display:none}.map-container{min-height:500px}.map-container .map-container-inner{position:relative}.map-container .map-container-inner #container{position:relative;width:100%;height:500px}.map-container .map-container-inner #container :deep(.amap-marker) img{width:25px;height:34px}.map-container .map-container-inner #map-search-result{display:none;position:absolute;right:-5px;top:0;width:30%;height:500px;overflow-y:auto}.district2{margin-left:10px;font-size:12px;color:#ccc}.bg-overlay2{position:relative;width:50px;height:50px;background:url(弹框.png);background-size:100% 100%;background-repeat:no-repeat;background-color:transparent}.map-input2:focus-within .input-close-icon,.map-input2:hover .input-close-icon{display:block}.input-close-icon2{cursor:pointer;display:none}.map-container2{min-height:500px}.map-container2 .map-container-inner{position:relative}.map-container2 .map-container-inner #container{position:relative;width:100%;height:500px}.map-container2 .map-container-inner #container :deep(.amap-marker) img{width:25px;height:34px}.map-container2 .map-container-inner #map-search-result{display:none;position:absolute;right:-5px;top:0;width:30%;height:500px;overflow-y:auto}.district2{margin-left:10px;font-size:12px;color:#ccc}.bg-overlay2{position:relative;width:50px;height:50px;background:url(弹框.png);background-size:100% 100%;background-repeat:no-repeat;background-color:transparent}
1
+ @charset "UTF-8";.w-full{width:100%}.h-full{height:100%}.w-8{width:2rem}.h-8{height:2rem}.\!w-8{width:2rem!important}.h-10{height:2.5rem}.w-52{width:13rem}.relative{position:relative}.absolute{position:absolute}.right-6{right:1.5rem}.bottom-6{bottom:1.5rem}.flex{display:flex}.flex-col{flex-direction:column}.flex-nowrap{flex-wrap:nowrap}.flex-shrink-0{flex-shrink:0}.items-center{align-items:center}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-start{justify-content:flex-start}.justify-items-start{justify-items:start}.grid{display:grid}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.gap-1{gap:.25rem}.gap-2{gap:.5rem}.col-span-1{grid-column:span 1/span 1}.col-span-2{grid-column:span 2/span 2}.col-span-3{grid-column:span 3/span 3}.col-span-4{grid-column:span 4/span 4}.col-span-8{grid-column:span 8/span 8}.mr-2{margin-right:.5rem}.mr-3{margin-right:.75rem}.mr-5{margin-right:1.25rem}.mt-1{margin-top:.25rem}.mt-4{margin-top:1rem}.\!mt-10{margin-top:2.5rem!important}.p-1{padding:.25rem}.p-2{padding:.5rem}.px-3\.5{padding-left:.875rem;padding-right:.875rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.pb-5{padding-bottom:1.25rem}.text-xs{font-size:.75rem;line-height:1rem}.text-white{color:#fff}.text-primary{color:var(--el-color-primary)}.text-center{text-align:center}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.select-none{-webkit-user-select:none;user-select:none}.cursor-pointer{cursor:pointer}.break-words{overflow-wrap:break-word}.overflow-hidden{overflow:hidden}.overflow-x-hidden{overflow-x:hidden}.overflow-y-auto{overflow-y:auto}.border{border-width:1px}.border-gray-300{border-color:#d1d5db}.rounded{border-radius:.25rem}.opacity-80{opacity:.8}.waring-bubble{position:relative;width:100px;height:100px;background-size:100% 80%;background-repeat:no-repeat}.t-floor{position:absolute;top:50%;left:0;transform:translateY(-50%);width:120px;-webkit-user-select:none;user-select:none;height:80%;overflow:hidden;z-index:9999999!important}.t-floor ul{padding:0;list-style-type:none}.t-floor ul li{box-sizing:border-box;width:70px;height:18px;font-size:18px;border-radius:.5em;margin:.5em;box-shadow:0 0 1em rgba(0,0,0,.2);color:#fff;font-family:sans-serif;text-transform:capitalize;line-height:18px;transition:.3s;cursor:pointer}.t-floor ul li:nth-child(odd){background:linear-gradient(to right,#2ed0e1,#0071fc);text-align:left;padding-left:10%;transform:perspective(500px) rotateY(45deg)}.t-floor ul li:nth-child(even){background:linear-gradient(to left,#2ed0e1,#0071fc);text-align:right;padding-right:10%;transform:perspective(500px) rotateY(-45deg)}.t-floor ul li:nth-child(odd):hover{transform:perspective(200px) rotateY(45deg);padding-left:5%}.t-floor ul li:nth-child(even):hover{transform:perspective(200px) rotateY(-45deg);padding-right:5%}.t-floor li.activeted1{transform:perspective(200px) rotateY(-45deg)!important;padding-right:30%;background:linear-gradient(to right,orange,tomato)!important}.t-floor li.activeted2{transform:perspective(200px) rotateY(45deg)!important;background:linear-gradient(to right,orange,tomato)!important;padding-left:30%}.measure-result{background:rgba(255,255,255,.9);padding:5px 10px;border-radius:4px;box-shadow:0 2px 4px rgba(0,0,0,.2);font-size:14px;color:#333}.area-display{background:rgba(255,255,255,.9);padding:8px 12px;border-radius:4px;box-shadow:0 2px 6px rgba(0,0,0,.3);font-size:14px;color:#333;cursor:pointer;text-align:center}.area-display div:first-child{font-weight:700;margin-bottom:4px}.alarm-dialog{width:370px;height:280px;padding:20px}.alarm-dialog .alarm-dialog__title{color:#fff;font-size:20px;font-weight:700;display:flex;justify-content:space-between;align-items:center;padding-bottom:10px;border-bottom:1px solid rgba(245,63,63,.4);position:relative}.alarm-dialog .alarm-dialog__title .el-icon{cursor:pointer;color:#f53f3f;font-weight:700}.alarm-dialog .alarm-dialog__title:before{content:"";width:6px;height:3px;position:absolute;bottom:-2px;left:0;background-color:#f53f3f}.alarm-dialog .alarm-dialog__title:after{content:"";width:6px;height:3px;position:absolute;bottom:-2px;right:0;background-color:#f53f3f}.alarm-dialog .alarm-dialog__content{margin-top:20px;width:100%;height:180px;overflow:hidden}.alarm-dialog .alarm-dialog__content .alarm-desc{color:#fff;font-size:14px;width:100%}.alarm-dialog .alarm-dialog__content .alarm-desc-item{height:28px;display:flex;align-items:center;justify-content:flex-start}.alarm-dialog .alarm-dialog__content .alarm-desc span{padding-left:10px}.alarm-dialog .alarm-dialog__content .alarm-video{height:100%;width:100%}.alarm-dialog .alarm-dialog__content .alarm-video video{height:120px;width:100%}.alarm-dialog .alarm-dialog__content .alarm-video .alarm-video-desc{color:#fff;font-size:14px;width:100%}.alarm-dialog .alarm-dialog__content .alarm-video .alarm-video-desc-item{height:28px;display:flex;align-items:center;justify-content:flex-start}.alarm-dialog .alarm-dialog__content .alarm-video .alarm-video-desc-item span+span{margin-left:8px}.alarm-dialog .alarm-dialog__content .alarm-device{height:120px;display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));grid-row-gap:8px}.alarm-dialog .alarm-dialog__content .alarm-device .alarm-device-item{display:flex;height:50px;align-items:center;justify-content:flex-start}.alarm-dialog .alarm-dialog__content .alarm-device .alarm-device-item .el-image{height:50px;width:50px;margin-right:6px}.alarm-dialog .alarm-dialog__content .alarm-device .alarm-device-item>div div:nth-child(1){font-size:14px;color:#fff}.alarm-dialog .alarm-dialog__content .alarm-device .alarm-device-item>div div:nth-child(2){font-size:20px;color:#00d5ff;font-weight:700}.alarm-dialog .alarm-dialog__content .alarm-device-desc{color:#fff;font-size:14px;width:100%}.alarm-dialog .alarm-dialog__content .alarm-device-desc-item{height:28px;display:flex;align-items:center;justify-content:flex-start}.alarm-dialog .alarm-dialog__content .alarm-device-desc-item span+span{margin-left:8px}.alarm-window1{width:700px;height:260px;padding:20px;background-repeat:no-repeat;background-size:100% 100%}.alarm-window1 .alarm-window1__title{color:#fff;font-size:20px;font-weight:700;display:flex;justify-content:space-between;align-items:center;padding-bottom:10px;border-bottom:1px solid rgba(245,63,63,.4);position:relative}.alarm-window1 .alarm-window1__title .el-icon{cursor:pointer;color:#f53f3f;font-weight:700}.alarm-window1 .alarm-window1__title:before{content:"";width:6px;height:3px;position:absolute;bottom:-2px;left:0;background-color:#f53f3f}.alarm-window1 .alarm-window1__title:after{content:"";width:6px;height:3px;position:absolute;bottom:-2px;right:0;background-color:#f53f3f}.alarm-window1 .alarm-window1__content{margin-top:20px;width:300px;height:160px;background-color:rgba(0,0,0,.2)}.alarm-window1 .alarm-window2__info{width:360px;margin-left:20px}.alarm-window1 .alarm-window2__info .alarm-window2__title{font-size:20px;font-weight:700;color:#fff;padding-bottom:10px;border-bottom:1px solid #fff;background:linear-gradient(0deg,#f53f3f 0,#e1af00 100%);-webkit-background-clip:text;-webkit-text-fill-color:transparent}.alarm-window1 .alarm-window2__info .alarm-window2__list{display:flex;flex-direction:column;font-size:14px;color:#fff;margin:10px 0}.alarm-window1 .alarm-window2__info .alarm-tags{display:flex;flex-direction:row;justify-content:flex-start;align-items:flex-start;flex-wrap:wrap;margin-left:-10px;height:120px}.alarm-window1 .alarm-window2__info .alarm-tags .alarm-tag{background:#337ecc 100%;background:linear-gradient(90deg,#337ecc,rgba(51,126,204,.2));color:#fff;font-size:16px;padding:6px 14px;border-radius:4px;cursor:pointer;margin-left:10px}.alarm-window1 .alarm-window2__info .alarm-opera{display:flex;justify-content:space-between}.alarm-window1 .alarm-window2__info .alarm-opera .alarm-normal-btn{border:1px solid #409eff;border-radius:4px;width:110px;height:36px;display:flex;align-items:center;justify-content:center;font-size:16px;color:#fff;cursor:pointer}.alarm-window2{position:relative;width:800px;display:flex;justify-content:flex-start;padding:20px;background:rgba(4,50,86,.9);border:2px solid #409eff;box-sizing:border-box}.alarm-window2 .angle{width:25px;height:25px;border:2px solid #00f0ff;position:absolute}.alarm-window2 .angle.left-top{top:-2px;left:-2px;border-right:none;border-bottom:none}.alarm-window2 .angle.left-bottom{bottom:-2px;left:-2px;border-right:none;border-top:none}.alarm-window2 .angle.right-top{top:-2px;right:-2px;border-left:none;border-bottom:none}.alarm-window2 .angle.right-bottom{bottom:-2px;right:-2px;border-left:none;border-top:none}.alarm-window2 .el-icon{cursor:pointer;position:absolute;top:10px;right:10px;font-weight:700;font-size:20px;color:#fff}.alarm-window2 .alarm-window2__content{width:400px;height:260px;background-color:rgba(0,0,0,.2)}.alarm-window2 .alarm-window2__info{width:360px;margin-left:20px}.alarm-window2 .alarm-window2__info .alarm-window2__title{font-size:20px;font-weight:700;color:#fff;padding-bottom:10px;border-bottom:1px solid #fff;background:linear-gradient(0deg,#f53f3f 0,#e1af00 100%);-webkit-background-clip:text;-webkit-text-fill-color:transparent}.alarm-window2 .alarm-window2__info .alarm-window2__list{display:flex;flex-direction:column;font-size:14px;color:#fff;margin:10px 0}.alarm-window2 .alarm-window2__info .alarm-tags{display:flex;flex-direction:row;justify-content:flex-start;align-items:flex-start;flex-wrap:wrap;margin-left:-10px;height:120px}.alarm-window2 .alarm-window2__info .alarm-tags .alarm-tag{background:#337ecc 100%;background:linear-gradient(90deg,#337ecc,rgba(51,126,204,.2));color:#fff;font-size:16px;padding:6px 14px;border-radius:4px;cursor:pointer;margin-left:10px}.alarm-window2 .alarm-window2__info .alarm-opera{display:flex;justify-content:space-between}.alarm-window2 .alarm-window2__info .alarm-opera .alarm-normal-btn{border:1px solid #409eff;border-radius:4px;width:110px;height:36px;display:flex;align-items:center;justify-content:center;font-size:16px;color:#fff;cursor:pointer}.map-input2:focus-within .input-close-icon,.map-input2:hover .input-close-icon{display:block}.input-close-icon2{cursor:pointer;display:none}.map-container2{min-height:500px}.map-container2 .map-container-inner{position:relative}.map-container2 .map-container-inner #container{position:relative;width:100%;height:500px}.map-container2 .map-container-inner #container :deep(.amap-marker) img{width:25px;height:34px}.map-container2 .map-container-inner #map-search-result{display:none;position:absolute;right:-5px;top:0;width:30%;height:500px;overflow-y:auto}.district2{margin-left:10px;font-size:12px;color:#ccc}.bg-overlay2{position:relative;width:50px;height:50px;background:url(弹框.png);background-size:100% 100%;background-repeat:no-repeat;background-color:transparent}.t-bg-overlay{position:relative;width:350px;height:250px;background-size:100% 80%;background-repeat:no-repeat}.t-bg-overlay2{position:relative;width:100px;height:100px;background-size:100% 80%;background-repeat:no-repeat}.t-overlay-item{z-index:99999;margin-top:12px;margin-left:40px;font-size:14px;color:#fff;line-height:1.5;width:calc(100% - 40px)}.t-popper{height:350px}.t-fold{height:44px}.t-unfold{height:calc(100% - 24px)}.t-info-panel{top:12px;right:12px;width:420px;transition:height .25s ease}.t-info-panel .t-info-panel__header{display:flex;align-items:center;justify-content:space-between;height:44px;padding:0 16px;border-bottom:1px solid rgba(0,0,0,.06)}.t-info-panel .t-info-panel__tabs{display:flex;align-items:center;height:100%}.t-info-panel .t-info-panel__tab{display:inline-flex;align-items:center;height:100%;margin-right:20px;cursor:pointer;color:#666;white-space:nowrap;border-bottom:2px solid transparent;transition:color .2s}.t-info-panel .t-info-panel__tab--active{color:var(--el-color-primary);font-weight:500;border-bottom-color:var(--el-color-primary)}.t-info-panel .t-info-panel__fold{cursor:pointer;color:var(--el-color-primary);white-space:nowrap}.t-info-panel .t-info-panel__filters{display:flex;padding:12px 16px 0}.t-info-panel .t-info-panel__row{border-radius:6px;transition:background-color .15s}.t-info-panel .t-info-panel__row:hover{background-color:rgba(0,0,0,.04)}.ol-attribution{display:none}.ol-zoom{display:none}.t-bottom-bar,.t-info-panel,.t-top-bar{position:absolute;z-index:999999999;overflow:hidden;border-radius:10px;border:1px solid rgba(0,0,0,.06);box-shadow:0 6px 20px rgba(0,0,0,.14)}.t-bottom-bar .el-card__body,.t-info-panel .el-card__body,.t-top-bar .el-card__body{padding:0;height:100%}.t-top-bar{top:12px;left:12px}.t-top-bar .t-top-bar__item{display:inline-flex;align-items:center;height:48px;padding:0 16px;color:#333;cursor:pointer;white-space:nowrap;transition:background-color .2s}.t-top-bar .t-top-bar__item .iconfont{margin-right:6px;font-size:16px;color:var(--el-color-primary)}.t-top-bar .t-top-bar__item .t-top-bar__value{margin-left:4px;color:#666;font-weight:500}.t-top-bar .t-top-bar__item+.t-top-bar__item{border-left:1px solid rgba(0,0,0,.06)}.t-top-bar .t-top-bar__item:hover{background-color:rgba(0,0,0,.04)}.t-top-bar .t-top-bar__item--exit{color:var(--el-color-danger)}.t-top-bar .t-top-bar__item--exit:hover{background-color:rgba(245,63,63,.1)}.t-bottom-bar{bottom:20px;left:50%;transform:translateX(-50%)}.t-bottom-bar .t-bottom-bar__inner{display:flex;align-items:center;justify-content:center;height:48px;padding:0 8px}.t-bottom-bar .t-bottom-bar__item{display:inline-flex;align-items:center;height:32px;padding:0 12px;margin-right:4px;border-radius:6px;color:#555;cursor:pointer;white-space:nowrap;transition:all .2s}.t-bottom-bar .t-bottom-bar__item .iconfont{margin-right:5px;font-size:15px}.t-bottom-bar .t-bottom-bar__item:hover{color:#333;background-color:rgba(0,0,0,.05)}.t-bottom-bar .t-bottom-bar__item.t-bbar-active{color:#fff;background-color:var(--el-color-primary)}.t-bottom-bar .t-bottom-bar__item.t-bbar-active .iconfont{color:#fff}.vc-sketch{position:absolute;z-index:999999999}.open-info-list{height:90%}.textx{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.text-gradient2{background:linear-gradient(to right,#fbff00,tomato,#ff8c00);background-clip:text;-webkit-background-clip:text;color:transparent;font-weight:700}.map-input:focus-within .input-close-icon,.map-input:hover .input-close-icon{display:block}.input-close-icon{cursor:pointer;display:none}.map-container{min-height:500px}.map-container .map-container-inner{position:relative}.map-container .map-container-inner #container{position:relative;width:100%;height:500px}.map-container .map-container-inner #container :deep(.amap-marker) img{width:25px;height:34px}.map-container .map-container-inner #map-search-result{display:none;position:absolute;right:-5px;top:0;width:30%;height:500px;overflow-y:auto}.district2{margin-left:10px;font-size:12px;color:#ccc}.bg-overlay2{position:relative;width:50px;height:50px;background:url(弹框.png);background-size:100% 100%;background-repeat:no-repeat;background-color:transparent}.map-input2:focus-within .input-close-icon,.map-input2:hover .input-close-icon{display:block}.input-close-icon2{cursor:pointer;display:none}.map-container2{min-height:500px}.map-container2 .map-container-inner{position:relative}.map-container2 .map-container-inner #container{position:relative;width:100%;height:500px}.map-container2 .map-container-inner #container :deep(.amap-marker) img{width:25px;height:34px}.map-container2 .map-container-inner #map-search-result{display:none;position:absolute;right:-5px;top:0;width:30%;height:500px;overflow-y:auto}.district2{margin-left:10px;font-size:12px;color:#ccc}.bg-overlay2{position:relative;width:50px;height:50px;background:url(弹框.png);background-size:100% 100%;background-repeat:no-repeat;background-color:transparent}