vue3-components-plus 3.0.20 → 3.0.21

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 (73) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +19 -174
  3. package/dist/ComponentDemo/DialogDemo.vue +2 -2
  4. package/dist/ComponentDemo/FormDemo.vue +133 -6
  5. package/dist/ComponentDemo/NsTableDemo/index.vue +29 -31
  6. package/dist/api/types.d.ts +116 -116
  7. package/dist/vue3-components-plus.css +1 -1
  8. package/dist/vue3-components-plus.d.ts +0 -2
  9. package/dist/vue3-components-plus.js +365 -2141
  10. package/dist/vue3-components-plus.umd.cjs +1 -1
  11. package/package.json +1 -1
  12. package/vue3-components-plus.d.ts +0 -2
  13. package/dist/ComponentDemo/DynamicFormCascadeAsyncDemo.vue +0 -337
  14. package/dist/ComponentDemo/DynamicFormCascadeDemo.vue +0 -263
  15. package/dist/ComponentDemo/DynamicFormPlusDemo.vue +0 -176
  16. package/dist/ComponentDemo/FormDemo copy.vue +0 -714
  17. package/dist/ComponentDemo/TestFormConfig.js +0 -129
  18. package/dist/ComponentDemo/VideoDemo.vue +0 -303
  19. package/dist/cdn/ezuikit/ezuikit.js +0 -27
  20. package/dist/cdn/ezuikit/ezuikit_static/PlayCtrlWasm/playCtrl1/HasSIMD/Decoder.js +0 -168
  21. package/dist/cdn/ezuikit/ezuikit_static/PlayCtrlWasm/playCtrl1/NoSIMD/Decoder.js +0 -168
  22. package/dist/cdn/ezuikit/ezuikit_static/PlayCtrlWasm/playCtrl3/hasWorker/HasSIMD/Decoder.js +0 -21
  23. package/dist/cdn/ezuikit/ezuikit_static/PlayCtrlWasm/playCtrl3/hasWorker/HasSIMD/Decoder.wasm +0 -0
  24. package/dist/cdn/ezuikit/ezuikit_static/PlayCtrlWasm/playCtrl3/hasWorker/HasSIMD/Decoder.worker.js +0 -1
  25. package/dist/cdn/ezuikit/ezuikit_static/PlayCtrlWasm/playCtrl3/hasWorker/NoSIMD/Decoder.js +0 -21
  26. package/dist/cdn/ezuikit/ezuikit_static/PlayCtrlWasm/playCtrl3/hasWorker/NoSIMD/Decoder.wasm +0 -0
  27. package/dist/cdn/ezuikit/ezuikit_static/PlayCtrlWasm/playCtrl3/hasWorker/NoSIMD/Decoder.worker.js +0 -1
  28. package/dist/cdn/ezuikit/ezuikit_static/PlayCtrlWasm/playCtrl3/noWorker/Decoder.js +0 -21
  29. package/dist/cdn/ezuikit/ezuikit_static/PlayCtrlWasm/playCtrl3/noWorker/Decoder.wasm +0 -0
  30. package/dist/cdn/ezuikit/ezuikit_static/css/component.css +0 -1257
  31. package/dist/cdn/ezuikit/ezuikit_static/css/inspectTheme.css +0 -354
  32. package/dist/cdn/ezuikit/ezuikit_static/css/theme copy.css +0 -126
  33. package/dist/cdn/ezuikit/ezuikit_static/css/theme.css +0 -140
  34. package/dist/cdn/ezuikit/ezuikit_static/imgs/bg.png +0 -0
  35. package/dist/cdn/ezuikit/ezuikit_static/imgs/bg.svg +0 -33
  36. package/dist/cdn/ezuikit/ezuikit_static/imgs/empty.png +0 -0
  37. package/dist/cdn/ezuikit/ezuikit_static/imgs/end.png +0 -0
  38. package/dist/cdn/ezuikit/ezuikit_static/imgs/fallback.svg +0 -52
  39. package/dist/cdn/ezuikit/ezuikit_static/imgs/start.png +0 -0
  40. package/dist/cdn/ezuikit/ezuikit_static/rec/datepicker.js +0 -1522
  41. package/dist/cdn/ezuikit/ezuikit_static/rec/datepicker.min.css +0 -36
  42. package/dist/cdn/ezuikit/ezuikit_static/rec/datepicker.zh-CN.js +0 -19
  43. package/dist/cdn/ezuikit/ezuikit_static/rec/jquery.min.js +0 -2
  44. package/dist/cdn/ezuikit/ezuikit_static/speed/speed.css +0 -145
  45. package/dist/cdn/ezuikit/ezuikit_static/talk/adapeter.js +0 -5497
  46. package/dist/cdn/ezuikit/ezuikit_static/talk/janus.js +0 -3507
  47. package/dist/cdn/ezuikit/ezuikit_static/talk/tts-v4.js +0 -343
  48. package/dist/cdn/ezuikit.js +0 -27
  49. package/dist/cdn/h5player/h5player.min.js +0 -313
  50. package/dist/cdn/h5player/playctrl1/DecodeWorker.js +0 -642
  51. package/dist/cdn/h5player/playctrl1/Decoder.js +0 -1
  52. package/dist/cdn/h5player/playctrl1simd/DecodeWorker.js +0 -642
  53. package/dist/cdn/h5player/playctrl1simd/Decoder.js +0 -1
  54. package/dist/cdn/h5player/playctrl2/Decoder.js +0 -21
  55. package/dist/cdn/h5player/playctrl2/Decoder.wasm +0 -0
  56. package/dist/cdn/h5player/playctrl2/Decoder.worker.js +0 -1
  57. package/dist/cdn/h5player/playctrl3/Decoder.js +0 -21
  58. package/dist/cdn/h5player/playctrl3/Decoder.wasm +0 -0
  59. package/dist/cdn/h5player/playctrl3/Decoder.worker.js +0 -1
  60. package/dist/cdn/h5player/talk/AudioInterCom.js +0 -21
  61. package/dist/cdn/h5player/talk/AudioInterCom.wasm +0 -0
  62. package/dist/cdn/h5player/talkW/AudioInterCom.js +0 -21
  63. package/dist/cdn/h5player/talkW/AudioInterCom.wasm +0 -0
  64. package/dist/cdn/h5player/talkW/AudioInterCom.worker.js +0 -1
  65. package/dist/cdn/h5player/transform/libSystemTransform.js +0 -6525
  66. package/dist/cdn/h5player/transform/libSystemTransform.wasm +0 -0
  67. package/dist/cdn/h5player/transform/systemTransform-worker.js +0 -120
  68. package/dist/cdn/md5.js +0 -254
  69. package/dist/js/EasyPlayer-decode.js +0 -1
  70. package/dist/js/EasyPlayer-lib.js +0 -1
  71. package/dist/js/EasyPlayer-pro.js +0 -1
  72. package/dist/js/EasyPlayer-pro.wasm +0 -0
  73. package/dist/js/EasyPlayer-snap.wasm +0 -0
@@ -2,12 +2,12 @@ var __defProp = Object.defineProperty;
2
2
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3
3
  var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
4
4
  var _a2;
5
- import { defineComponent, openBlock, createElementBlock, createElementVNode, reactive, withDirectives, normalizeStyle, Fragment, renderList, toDisplayString, vShow, nextTick, useCssVars, unref, inject, ref as ref$1, watch, onMounted, normalizeClass, renderSlot, createCommentVNode, createBlock, isRef, onUnmounted, onBeforeUnmount, resolveDirective, resolveComponent, createVNode, withCtx, resolveDynamicComponent, createTextVNode, useSlots, provide, computed, Teleport, defineAsyncComponent, createSlots, mergeProps, toHandlers, createApp, render, useAttrs, watchEffect, getCurrentInstance, shallowRef, createStaticVNode, Transition, vModelText, withModifiers, normalizeProps, guardReactiveProps, onUpdated, h as h$2 } from "vue";
5
+ import { defineComponent, openBlock, createElementBlock, createElementVNode, ref as ref$1, watch, normalizeClass, nextTick, useCssVars, computed, defineAsyncComponent, reactive, onMounted, onUnmounted, resolveComponent, createBlock, createSlots, withCtx, resolveDynamicComponent, mergeProps, toHandlers, Fragment, createTextVNode, toDisplayString, unref, createCommentVNode, createVNode, createApp, render, useAttrs, watchEffect, withDirectives, vShow, renderSlot, resolveDirective, renderList, normalizeStyle, getCurrentInstance, shallowRef, onBeforeUnmount, createStaticVNode, Transition, vModelText, withModifiers, normalizeProps, guardReactiveProps, onUpdated, h as h$2 } from "vue";
6
6
  import { ElMessage, ElImage } from "element-plus";
7
7
  import VuePdfApp from "vue3-pdf-app";
8
8
  import axios from "axios";
9
9
  /*! Element Plus Icons Vue v2.3.2 */
10
- var _sfc_main$m = /* @__PURE__ */ defineComponent({
10
+ var _sfc_main$f = /* @__PURE__ */ defineComponent({
11
11
  name: "AddLocation",
12
12
  __name: "add-location",
13
13
  setup(__props) {
@@ -29,7 +29,7 @@ var _sfc_main$m = /* @__PURE__ */ defineComponent({
29
29
  })
30
30
  ]));
31
31
  }
32
- }), add_location_default = _sfc_main$m;
32
+ }), add_location_default = _sfc_main$f;
33
33
  var _sfc_main2 = /* @__PURE__ */ defineComponent({
34
34
  name: "Aim",
35
35
  __name: "aim",
@@ -5172,2109 +5172,6 @@ const ElementPlusIconsVue = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object
5172
5172
  ZoomIn: zoom_in_default,
5173
5173
  ZoomOut: zoom_out_default
5174
5174
  }, Symbol.toStringTag, { value: "Module" }));
5175
- const _hoisted_1$f = { class: "right-box-2" };
5176
- const _hoisted_2$c = ["onClick"];
5177
- const _sfc_main$l = /* @__PURE__ */ defineComponent({
5178
- __name: "videoRightMenu",
5179
- props: {
5180
- rightMenus: {
5181
- type: Array,
5182
- default: () => []
5183
- },
5184
- sacle_x: {
5185
- type: Number,
5186
- default: 1
5187
- },
5188
- sacle_y: {
5189
- type: Number,
5190
- default: 1
5191
- }
5192
- },
5193
- setup(__props, { expose: __expose }) {
5194
- const props = __props;
5195
- function rightHandler(rightAction) {
5196
- var _a3;
5197
- (_a3 = rightAction == null ? void 0 : rightAction.callback) == null ? void 0 : _a3.call(rightAction, state.rightTargetData);
5198
- }
5199
- const state = reactive({
5200
- rightShow: false,
5201
- // 右键菜单是否正在显示
5202
- rightTargetData: null,
5203
- // 右键菜单正在操作的 tab
5204
- rightStyle: {
5205
- // 右键菜单的 style 样式
5206
- left: "0px",
5207
- // 坐标x
5208
- top: "0px",
5209
- // 坐标y
5210
- maxHeight: "0px"
5211
- // 右键菜单的最高高度 (控制是否展开)
5212
- }
5213
- });
5214
- const right_showMenu = function(tab, event) {
5215
- state.rightTargetData = tab;
5216
- const e6 = event || window.event;
5217
- state.rightStyle.left = e6.clientX / props.sacle_x + 1 + "px";
5218
- state.rightStyle.top = e6.clientY / props.sacle_y + "px";
5219
- state.rightShow = true;
5220
- nextTick(function() {
5221
- var _a3, _b;
5222
- const foxHeight = (_a3 = document.querySelector(".right-box-2")) == null ? void 0 : _a3.offsetHeight;
5223
- state.rightStyle.maxHeight = foxHeight + "px";
5224
- (_b = document.querySelector(".right-box")) == null ? void 0 : _b.focus();
5225
- });
5226
- };
5227
- const right_closeMenu = function() {
5228
- state.rightStyle.maxHeight = "0px";
5229
- state.rightShow = false;
5230
- };
5231
- const right_closeMenu2 = function() {
5232
- state.rightStyle.maxHeight = "0px";
5233
- };
5234
- __expose({ right_showMenu });
5235
- return (_ctx, _cache) => {
5236
- return withDirectives((openBlock(), createElementBlock("div", {
5237
- class: "right-box",
5238
- style: normalizeStyle(state.rightStyle),
5239
- tabindex: "-1",
5240
- onBlur: _cache[0] || (_cache[0] = ($event) => right_closeMenu2())
5241
- }, [
5242
- createElementVNode("div", _hoisted_1$f, [
5243
- (openBlock(true), createElementBlock(Fragment, null, renderList(__props.rightMenus, (item, index2) => {
5244
- return openBlock(), createElementBlock("div", {
5245
- key: index2,
5246
- onClick: () => {
5247
- right_closeMenu();
5248
- rightHandler(item);
5249
- }
5250
- }, toDisplayString(item == null ? void 0 : item.name), 9, _hoisted_2$c);
5251
- }), 128))
5252
- ])
5253
- ], 36)), [
5254
- [vShow, state.rightShow]
5255
- ]);
5256
- };
5257
- }
5258
- });
5259
- const _export_sfc = (sfc, props) => {
5260
- const target = sfc.__vccOpts || sfc;
5261
- for (const [key, val] of props) {
5262
- target[key] = val;
5263
- }
5264
- return target;
5265
- };
5266
- const ComRightMenu = /* @__PURE__ */ _export_sfc(_sfc_main$l, [["__scopeId", "data-v-644f5340"]]);
5267
- const _hoisted_1$e = { class: "split-icon-container" };
5268
- const _hoisted_2$b = ["onClick"];
5269
- const _hoisted_3$9 = { class: "video-view-bg" };
5270
- const _sfc_main$k = /* @__PURE__ */ defineComponent({
5271
- __name: "SplitIcon",
5272
- props: {
5273
- type: {
5274
- type: Number,
5275
- default: 1
5276
- },
5277
- width: {
5278
- type: String,
5279
- default: "20px"
5280
- },
5281
- height: {
5282
- type: String,
5283
- default: "20px"
5284
- },
5285
- isVideo: {
5286
- type: Boolean,
5287
- default: false
5288
- }
5289
- },
5290
- setup(__props) {
5291
- useCssVars((_ctx) => ({
5292
- "v5a2a7a44": unref(_w),
5293
- "v5a2a7a62": unref(_h2),
5294
- "v6f72a330": mixWidth.value,
5295
- "v6ce9eb3a": heightComputed.value
5296
- }));
5297
- const props = __props;
5298
- const videoUrlKey = inject("videoUrlKey");
5299
- const activeIndex = inject("activeIndex");
5300
- const fouceIndex = inject("fouceIndex");
5301
- const videoInfos = inject("videoInfos");
5302
- const checkFouceIndex = (index2) => {
5303
- if (!props.isVideo) {
5304
- return false;
5305
- }
5306
- return fouceIndex.value == index2;
5307
- };
5308
- const _w = props.width;
5309
- const _h2 = props.height;
5310
- const isFirst = ref$1(false);
5311
- const onlyOne = ref$1(false);
5312
- const mixWidth = ref$1("100%");
5313
- const count = ref$1(1);
5314
- const isActive = ref$1(false);
5315
- function iconClick(index2) {
5316
- if (!props.isVideo) {
5317
- activeIndex.value = props.type;
5318
- } else {
5319
- fouceIndex.value = index2;
5320
- }
5321
- }
5322
- const heightComputed = ref$1("100%");
5323
- watch(
5324
- () => activeIndex.value,
5325
- () => {
5326
- isActive.value = activeIndex.value == props.type;
5327
- heightComputed.value = (100 / Number(activeIndex.value)).toFixed(2) + "%";
5328
- },
5329
- { immediate: true }
5330
- );
5331
- watch(
5332
- () => props.type,
5333
- () => {
5334
- if (props.type == 1) {
5335
- isFirst.value = true;
5336
- if (props.isVideo) {
5337
- onlyOne.value = true;
5338
- }
5339
- } else {
5340
- onlyOne.value = false;
5341
- }
5342
- count.value = Math.pow(props.type, 2);
5343
- mixWidth.value = (100 / props.type).toFixed(2) + "%";
5344
- const resetInfo = new Array(count.value).fill(null).map((_3, index2) => ({
5345
- index: index2,
5346
- [videoUrlKey]: ""
5347
- }));
5348
- fouceIndex.value = 0;
5349
- videoInfos.value = resetInfo;
5350
- },
5351
- { immediate: true }
5352
- );
5353
- onMounted(() => {
5354
- if (props.isVideo) {
5355
- console.log("video初始化");
5356
- }
5357
- });
5358
- return (_ctx, _cache) => {
5359
- return openBlock(), createElementBlock("div", _hoisted_1$e, [
5360
- (openBlock(true), createElementBlock(Fragment, null, renderList(__props.isVideo ? unref(videoInfos) : count.value, (videoInfo) => {
5361
- return openBlock(), createElementBlock("div", {
5362
- key: videoInfo,
5363
- class: normalizeClass([
5364
- "icon-item",
5365
- isFirst.value ? "first" : "",
5366
- isActive.value ? "active" : "",
5367
- __props.isVideo ? "video" : "",
5368
- onlyOne.value ? "only-one" : "",
5369
- checkFouceIndex(videoInfo.index) ? "fouce" : ""
5370
- ]),
5371
- onClick: ($event) => iconClick(videoInfo.index)
5372
- }, [
5373
- createElementVNode("div", _hoisted_3$9, [
5374
- __props.isVideo ? renderSlot(_ctx.$slots, "video-view-slot", {
5375
- key: 0,
5376
- index: videoInfo.index,
5377
- url: videoInfo[unref(videoUrlKey)],
5378
- info: videoInfo == null ? void 0 : videoInfo.info
5379
- }, void 0, true) : createCommentVNode("", true)
5380
- ])
5381
- ], 10, _hoisted_2$b);
5382
- }), 128))
5383
- ]);
5384
- };
5385
- }
5386
- });
5387
- const SplitIcon = /* @__PURE__ */ _export_sfc(_sfc_main$k, [["__scopeId", "data-v-5efe1bd4"]]);
5388
- const _hoisted_1$d = { class: "split-box" };
5389
- const _hoisted_2$a = ["onClick"];
5390
- const _sfc_main$j = /* @__PURE__ */ defineComponent({
5391
- __name: "index",
5392
- props: {
5393
- videoSplitUseIcon: {
5394
- type: Boolean,
5395
- default: false
5396
- }
5397
- },
5398
- setup(__props) {
5399
- const getIconClass = (index2, activeIndex2) => {
5400
- let iconClass = "";
5401
- if (index2 == 0) {
5402
- iconClass = "icon-yiping";
5403
- } else if (index2 == 1) {
5404
- iconClass = "icon-siping";
5405
- } else if (index2 == 2) {
5406
- iconClass = "icon-jiuping";
5407
- }
5408
- if (activeIndex2 != index2 + 1) {
5409
- iconClass += "-moren";
5410
- }
5411
- return iconClass;
5412
- };
5413
- const splitIconCount = ref$1(3);
5414
- const activeIndex = inject("activeIndex");
5415
- return (_ctx, _cache) => {
5416
- return openBlock(), createElementBlock("div", _hoisted_1$d, [
5417
- _cache[1] || (_cache[1] = createElementVNode("span", { class: "split-text" }, "分屏:", -1)),
5418
- !__props.videoSplitUseIcon ? (openBlock(true), createElementBlock(Fragment, { key: 0 }, renderList(splitIconCount.value, (item) => {
5419
- return openBlock(), createBlock(SplitIcon, {
5420
- type: item,
5421
- key: item,
5422
- activeIndex: unref(activeIndex),
5423
- "onUpdate:activeIndex": _cache[0] || (_cache[0] = ($event) => isRef(activeIndex) ? activeIndex.value = $event : null)
5424
- }, null, 8, ["type", "activeIndex"]);
5425
- }), 128)) : (openBlock(), createElementBlock(Fragment, { key: 1 }, renderList(3, (_3, index2) => {
5426
- return createElementVNode("i", {
5427
- key: index2,
5428
- class: normalizeClass(["martrix_iconfont", getIconClass(index2, unref(activeIndex))]),
5429
- onClick: ($event) => activeIndex.value = index2 + 1
5430
- }, null, 10, _hoisted_2$a);
5431
- }), 64))
5432
- ]);
5433
- };
5434
- }
5435
- });
5436
- const SplitIconGroup = /* @__PURE__ */ _export_sfc(_sfc_main$j, [["__scopeId", "data-v-e9d24ad3"]]);
5437
- const _sfc_main$i = /* @__PURE__ */ defineComponent({
5438
- __name: "EasyPlay",
5439
- props: {
5440
- videoUrl: {
5441
- type: String,
5442
- default: ""
5443
- },
5444
- hasAudio: {
5445
- type: Boolean,
5446
- default: false
5447
- },
5448
- MSE: {
5449
- type: Boolean,
5450
- default: true
5451
- },
5452
- WCS: {
5453
- type: Boolean,
5454
- default: true
5455
- },
5456
- WASM: {
5457
- type: Boolean,
5458
- default: true
5459
- },
5460
- WASMSIMD: {
5461
- type: Boolean,
5462
- default: true
5463
- },
5464
- loadTimeReplay: {
5465
- type: Number,
5466
- default: 3
5467
- },
5468
- isLive: {
5469
- type: Boolean,
5470
- default: true
5471
- },
5472
- digitalZoom: {
5473
- type: Boolean,
5474
- default: true
5475
- },
5476
- stretch: {
5477
- type: Boolean,
5478
- default: true
5479
- },
5480
- watermark: {
5481
- type: String,
5482
- default: ""
5483
- },
5484
- playerIndex: {
5485
- type: Number,
5486
- default: -1
5487
- }
5488
- },
5489
- emits: ["dblclick", "error", "urlError", "videoOriginalInfo"],
5490
- setup(__props, { emit: __emit }) {
5491
- const props = __props;
5492
- console.info("----------初始化----------");
5493
- const emits = __emit;
5494
- const videoModel = inject("videoModel");
5495
- console.warn("播放模式===>", videoModel);
5496
- const easyRef = ref$1();
5497
- const player = ref$1();
5498
- const playerInfo = reactive({
5499
- config: {
5500
- hasAudio: true,
5501
- isLive: true,
5502
- MSE: false,
5503
- WCS: false
5504
- },
5505
- isPlay: false
5506
- });
5507
- watch(
5508
- () => props.videoUrl,
5509
- async (nv) => {
5510
- if (nv) {
5511
- onReplay(nv);
5512
- } else {
5513
- await onDestroy();
5514
- }
5515
- },
5516
- { immediate: true }
5517
- );
5518
- function onPlayer(videoUrl) {
5519
- playerInfo.isPlay = true;
5520
- setTimeout(
5521
- (url) => {
5522
- if (player.value) {
5523
- player.value.play(url).then(() => {
5524
- }).catch((e6) => {
5525
- console.warn("播放错误:", e6);
5526
- emits("urlError");
5527
- });
5528
- }
5529
- },
5530
- 200,
5531
- videoUrl
5532
- );
5533
- }
5534
- function onDestroy() {
5535
- try {
5536
- return new Promise((resolve2) => {
5537
- try {
5538
- if (player.value) {
5539
- player.value.destroy();
5540
- player.value = null;
5541
- }
5542
- } catch (error) {
5543
- console.warn("销毁失败:", error);
5544
- }
5545
- setTimeout(() => {
5546
- resolve2();
5547
- }, 100);
5548
- });
5549
- } catch (error) {
5550
- setTimeout(() => {
5551
- console.error("888==>onDestroy失败:", error);
5552
- resolve();
5553
- }, 100);
5554
- }
5555
- }
5556
- function onReplay(videoUrl) {
5557
- onDestroy().then(() => {
5558
- setTimeout(() => {
5559
- try {
5560
- playCreate(videoUrl);
5561
- } catch (error) {
5562
- console.warn("播放容器错误:", error);
5563
- }
5564
- }, 200);
5565
- });
5566
- }
5567
- async function playCreate(videoUrl) {
5568
- let container = easyRef.value;
5569
- if (container) {
5570
- createPlay(container);
5571
- onPlayer(videoUrl);
5572
- } else {
5573
- setTimeout(async () => {
5574
- container = easyRef.value;
5575
- await nextTick();
5576
- createPlay(container);
5577
- onPlayer(videoUrl);
5578
- }, 500);
5579
- }
5580
- }
5581
- function createPlay(container) {
5582
- player.value = new EasyPlayerPro(container, {
5583
- stretch: !props.stretch,
5584
- MSE: props.MSE,
5585
- WCS: props.WCS,
5586
- WASM: props.WASM,
5587
- WASMSIMD: props.WASMSIMD,
5588
- isLive: props.isLive,
5589
- loadTimeReplay: -1,
5590
- hasAudio: props.hasAudio,
5591
- bufferTime: 3
5592
- // 缓存时长
5593
- });
5594
- player.value.on("videoInfo", (videoOriginalInfo) => {
5595
- try {
5596
- console.log("视频原始信息:", videoOriginalInfo);
5597
- emits("videoOriginalInfo", videoOriginalInfo);
5598
- } catch (error) {
5599
- console.warn("视频原始信息错误:", error);
5600
- }
5601
- });
5602
- player.value.on("timeout", () => {
5603
- console.error("播放器超时");
5604
- appendLoading();
5605
- });
5606
- player.value.on("error", () => {
5607
- console.error("播放器异常");
5608
- appendLoading();
5609
- });
5610
- appendLoading();
5611
- }
5612
- function appendLoading() {
5613
- setTimeout(async () => {
5614
- const container = easyRef.value;
5615
- await nextTick();
5616
- if (container.querySelector(".easyplayer-loading-text")) {
5617
- container.querySelector(".easyplayer-loading-text").innerHTML = "加载中...";
5618
- }
5619
- const rightMenus = container.querySelector(".easyplayer-controls-right");
5620
- const fullBtn = rightMenus == null ? void 0 : rightMenus.querySelector(".easyplayer-controls-item-wrap:last-child");
5621
- if (!!fullBtn) {
5622
- const fullscreenBtn = document.createElement("span");
5623
- fullscreenBtn.setAttribute("title", "全屏");
5624
- fullscreenBtn.innerHTML = "全屏";
5625
- fullscreenBtn.style.marginLeft = "8px";
5626
- fullscreenBtn.style.fontSize = "14px";
5627
- fullscreenBtn.style.zoom = "0.8";
5628
- fullscreenBtn.style.position = "relative";
5629
- fullscreenBtn.style.top = "-1px";
5630
- fullscreenBtn.addEventListener("click", doEmits);
5631
- fullBtn.replaceChildren(fullscreenBtn);
5632
- }
5633
- }, 200);
5634
- }
5635
- function doEmits() {
5636
- emits("dblclick", props.playerIndex);
5637
- }
5638
- onUnmounted(() => {
5639
- onDestroy();
5640
- console.warn("卸载成功");
5641
- });
5642
- return (_ctx, _cache) => {
5643
- return openBlock(), createElementBlock("div", {
5644
- class: "easy-player-view",
5645
- ref_key: "easyRef",
5646
- ref: easyRef
5647
- }, null, 512);
5648
- };
5649
- }
5650
- });
5651
- const EasyPlayView = /* @__PURE__ */ _export_sfc(_sfc_main$i, [["__scopeId", "data-v-1a2b8584"]]);
5652
- class hkVideo {
5653
- constructor(options) {
5654
- __publicField(this, "hkVideoInfo");
5655
- this.hkVideoInfo = reactive({
5656
- open: false,
5657
- player: null,
5658
- splitNum: options.splitNum || 1,
5659
- width: options.width || "500px",
5660
- height: options.height || "500px",
5661
- currentPlayUrl: "",
5662
- mode: options.mode || 1
5663
- // 0普通模式, 1高级模式
5664
- });
5665
- this.createPlayer(options);
5666
- }
5667
- // 创建视频容器
5668
- createPlayer(options) {
5669
- this.hkVideoInfo.player = new window.JSPlugin({
5670
- szId: options.divId,
5671
- szBasePath: options.szBasePath,
5672
- //"/bigScreen/cdn/h5player",
5673
- iMaxSplit: 1,
5674
- iCurrentSplit: 1,
5675
- openDebug: true,
5676
- oStyle: {
5677
- borderSelect: "none"
5678
- }
5679
- });
5680
- window.addEventListener("resize", () => {
5681
- this.hkVideoInfo.player.JS_Resize();
5682
- });
5683
- this.hkVideoInfo.player.JS_SetConnectTimeOut(this.hkVideoInfo.player.currentWindowIndex, 6e3).then(
5684
- () => {
5685
- },
5686
- (err) => {
5687
- console.error("播放6000秒超时");
5688
- }
5689
- );
5690
- this.hkVideoInfo.player.JS_SetWindowControlCallback({
5691
- windowEventSelect: function(iWndIndex) {
5692
- console.log("windowSelect callback: ", iWndIndex);
5693
- if (options.windowEventSelect) options.windowEventSelect(iWndIndex);
5694
- },
5695
- pluginErrorHandler: function(iWndIndex, iErrorCode, oError) {
5696
- console.log("海康播放器-插件错误回调: ", iWndIndex, iErrorCode, oError);
5697
- if (options.pluginErrorHandler) options.pluginErrorHandler(iWndIndex);
5698
- },
5699
- windowEventOver: function(iWndIndex) {
5700
- },
5701
- windowEventOut: function(iWndIndex) {
5702
- },
5703
- windowEventUp: function(iWndIndex) {
5704
- },
5705
- windowFullCcreenChange: function(bFull) {
5706
- console.log("海康播放器-全屏切换回调: ", bFull);
5707
- },
5708
- firstFrameDisplay: function(iWndIndex, iWidth, iHeight) {
5709
- console.log("海康播放器-首帧显示回调: ", iWndIndex, iWidth, iHeight);
5710
- if (options.firstFrameDisplay) options.firstFrameDisplay(iWndIndex, iWidth, iHeight);
5711
- },
5712
- performanceLack: function() {
5713
- console.log("海康播放器-性能不足回调");
5714
- },
5715
- InterruptStream: (iWndIndex, interruptTime) => {
5716
- console.log("断流事件回调: " + iWndIndex + "interrupt time:" + interruptTime);
5717
- if (this.hkVideoInfo.currentPlayUrl) {
5718
- console.log("检测到断流,尝试重新播放:", this.hkVideoInfo.currentPlayUrl);
5719
- this.realplay(this.hkVideoInfo.currentPlayUrl, iWndIndex);
5720
- }
5721
- }
5722
- });
5723
- console.log("海康播放器-视频初始化");
5724
- }
5725
- // 开始播放
5726
- realplay(playURL, index2) {
5727
- console.warn("视频播放地址:", playURL);
5728
- this.hkVideoInfo.currentPlayUrl = playURL;
5729
- this.hkVideoInfo.player.JS_Play(playURL, { playURL, mode: this.hkVideoInfo.mode }, index2).then(
5730
- () => {
5731
- console.log("开始播放");
5732
- },
5733
- (e6) => {
5734
- console.error("海康播放器- error", e6);
5735
- }
5736
- );
5737
- }
5738
- // 停止预览
5739
- stop(index2) {
5740
- this.hkVideoInfo.player.JS_Stop(index2).then(
5741
- () => {
5742
- console.log("停止预览");
5743
- },
5744
- (e6) => {
5745
- console.error(e6);
5746
- }
5747
- );
5748
- }
5749
- // 停止预览
5750
- stopAll() {
5751
- this.hkVideoInfo.player.JS_StopRealPlayAll().then(
5752
- () => {
5753
- console.log("停止预览");
5754
- },
5755
- (e6) => {
5756
- console.error(e6);
5757
- }
5758
- );
5759
- }
5760
- // 切换分屏
5761
- changeSplitNum(splitNum) {
5762
- this.hkVideoInfo.player.JS_ArrangeWindow(splitNum).then(
5763
- () => {
5764
- console.log(`切换分屏 success`);
5765
- },
5766
- (e6) => {
5767
- console.error(e6);
5768
- }
5769
- );
5770
- }
5771
- // 全屏
5772
- wholeFullScreen() {
5773
- this.hkVideoInfo.player.JS_FullScreenDisplay(true).then(
5774
- () => {
5775
- console.log(`wholeFullScreen success`);
5776
- },
5777
- (e6) => {
5778
- console.error(e6);
5779
- }
5780
- );
5781
- }
5782
- // 设置播放容器的宽高并监听窗口大小变化
5783
- reSize(width, height) {
5784
- this.hkVideoInfo.player.JS_Resize(width, height);
5785
- }
5786
- }
5787
- const _hoisted_1$c = ["id"];
5788
- const _hoisted_2$9 = ["id"];
5789
- const _hoisted_3$8 = {
5790
- class: "video-mask",
5791
- "element-loading-text": "加载中..."
5792
- };
5793
- const _sfc_main$h = /* @__PURE__ */ defineComponent({
5794
- __name: "HKPlay",
5795
- props: {
5796
- // divId: {
5797
- // type: String,
5798
- // default: "video",
5799
- // },
5800
- hkPath: {
5801
- type: Object,
5802
- default: null
5803
- },
5804
- splitNum: {
5805
- type: Number,
5806
- default: 1
5807
- },
5808
- videoList: {
5809
- type: Array
5810
- },
5811
- videoUrl: {
5812
- type: String,
5813
- default: ""
5814
- },
5815
- playerIndex: {
5816
- type: Number,
5817
- default: -1
5818
- }
5819
- },
5820
- emits: ["dblclick", "error", "urlError", "videoOriginalInfo"],
5821
- setup(__props, { expose: __expose, emit: __emit }) {
5822
- const videoRandomId = parseInt(Math.random() * 999999999 + "");
5823
- const hkPath = inject("hkPath");
5824
- const videoModel = inject("videoModel");
5825
- console.warn("播放模式===>", videoModel);
5826
- const emits = __emit;
5827
- const props = __props;
5828
- const videoBtnRef = ref$1();
5829
- ref$1();
5830
- const splitNum = ref$1(1);
5831
- const currentIndex = ref$1(-1);
5832
- const hkVideoObj = ref$1();
5833
- const ysyVideoObj = ref$1(null);
5834
- const videoListNew = ref$1([]);
5835
- const isNext = ref$1(true);
5836
- ref$1("");
5837
- ref$1("0");
5838
- const showBtn = ref$1(false);
5839
- const btnTime = ref$1();
5840
- const videoLoading = ref$1(true);
5841
- watch(
5842
- () => props.videoUrl,
5843
- (val) => {
5844
- changeVideo(val);
5845
- },
5846
- { immediate: true }
5847
- );
5848
- function mouseoverHandler() {
5849
- showBtn.value = true;
5850
- if (btnTime.value) {
5851
- clearTimeout(btnTime.value);
5852
- }
5853
- }
5854
- function mouseleaveHandler() {
5855
- btnTime.value = setTimeout(() => {
5856
- showBtn.value = false;
5857
- }, 1e3);
5858
- }
5859
- function doEmits() {
5860
- emits("dblclick", props.playerIndex);
5861
- }
5862
- onMounted(() => {
5863
- currentIndex.value = -1;
5864
- videoListNew.value = [];
5865
- isNext.value = true;
5866
- splitNum.value = props.splitNum;
5867
- nextTick(() => {
5868
- initVideo();
5869
- });
5870
- setTimeout(() => {
5871
- videoLoading.value = false;
5872
- }, 30 * 1e3);
5873
- });
5874
- onBeforeUnmount(() => {
5875
- closeAllVideo();
5876
- });
5877
- const initVideo = async () => {
5878
- const { divId, clientWidth, clientHeight } = getVideoDom();
5879
- hkVideoObj.value = new hkVideo({
5880
- divId,
5881
- splitNum: 1,
5882
- width: clientWidth,
5883
- height: clientHeight,
5884
- szBasePath: props.hkPath || hkPath,
5885
- windowEventSelect: changeIndex,
5886
- pluginErrorHandler,
5887
- firstFrameDisplay
5888
- });
5889
- };
5890
- function changeVideo(url) {
5891
- nextTick(() => {
5892
- if (!hkVideoObj.value) initVideo();
5893
- console.log("海康视频信息");
5894
- nextTick(() => {
5895
- if (!hkVideoObj.value) {
5896
- setTimeout(() => {
5897
- hkVideoObj.value.realplay(url, 0);
5898
- }, 200);
5899
- } else {
5900
- hkVideoObj.value.realplay(url, 0);
5901
- }
5902
- });
5903
- });
5904
- }
5905
- const changeIndex = (index2) => {
5906
- console.log(index2, "index");
5907
- if (splitNum.value !== 1) {
5908
- currentIndex.value = index2;
5909
- isNext.value = false;
5910
- }
5911
- };
5912
- const pluginErrorHandler = (index2) => {
5913
- console.log("播放超时");
5914
- videoLoading.value = false;
5915
- };
5916
- const firstFrameDisplay = (iWndIndex, iWidth, iHeight) => {
5917
- console.log("海康开始播放");
5918
- videoLoading.value = false;
5919
- emits("videoOriginalInfo", {
5920
- width: iWidth,
5921
- height: iHeight
5922
- });
5923
- };
5924
- const getVideoDom = () => {
5925
- const dom = {
5926
- divId: `hk-${videoRandomId}`,
5927
- clientWidth: document.getElementById(`parent-hk-${videoRandomId}`).clientWidth,
5928
- clientHeight: document.getElementById(`parent-hk-${videoRandomId}`).clientHeight
5929
- };
5930
- console.log("视频容器信息", dom);
5931
- return dom;
5932
- };
5933
- const resize = () => {
5934
- nextTick(() => {
5935
- const dom = getVideoDom();
5936
- if (hkVideoObj.value != null) hkVideoObj.value.reSize(dom.clientWidth, dom.clientHeight);
5937
- if (ysyVideoObj.value != null) ysyVideoObj.value.reSize(dom.clientWidth, dom.clientHeight);
5938
- });
5939
- };
5940
- const closeAllVideo = () => {
5941
- stopHk();
5942
- videoListNew.value = [];
5943
- };
5944
- const stopHk = () => {
5945
- if (hkVideoObj.value) {
5946
- hkVideoObj.value.stopAll();
5947
- }
5948
- hkVideoObj.value = null;
5949
- };
5950
- __expose({
5951
- splitNum,
5952
- closeAllVideo,
5953
- resize,
5954
- changeIndex
5955
- });
5956
- return (_ctx, _cache) => {
5957
- const _directive_loading = resolveDirective("loading");
5958
- return openBlock(), createElementBlock("div", {
5959
- class: "rv-container",
5960
- id: `parent-hk-${unref(videoRandomId)}`,
5961
- onMouseover: mouseoverHandler,
5962
- onMouseleave: mouseleaveHandler
5963
- }, [
5964
- createElementVNode("div", {
5965
- class: "video-container",
5966
- id: `hk-${unref(videoRandomId)}`
5967
- }, null, 8, _hoisted_2$9),
5968
- withDirectives(createElementVNode("div", _hoisted_3$8, null, 512), [
5969
- [_directive_loading, videoLoading.value]
5970
- ]),
5971
- withDirectives(createElementVNode("div", {
5972
- ref_key: "videoBtnRef",
5973
- ref: videoBtnRef,
5974
- class: "video-button",
5975
- style: { "position": "absolute", "bottom": "0", "left": "0", "width": "100%", "background": "rgba(255, 255, 255, 0.3)" }
5976
- }, [
5977
- createElementVNode("div", { style: { "display": "flex", "align-items": "center", "justify-content": "flex-end", "width": "100%", "height": "100%" } }, [
5978
- createElementVNode("span", {
5979
- title: "全屏",
5980
- class: "full-title",
5981
- onClick: doEmits
5982
- }, "全屏")
5983
- ])
5984
- ], 512), [
5985
- [vShow, showBtn.value]
5986
- ])
5987
- ], 40, _hoisted_1$c);
5988
- };
5989
- }
5990
- });
5991
- const HKPlayView = /* @__PURE__ */ _export_sfc(_sfc_main$h, [["__scopeId", "data-v-a962f649"]]);
5992
- const _hoisted_1$b = { class: "split-box" };
5993
- const _hoisted_2$8 = ["onMouseover", "onMouseleave"];
5994
- const _hoisted_3$7 = {
5995
- key: 0,
5996
- class: "no-signal"
5997
- };
5998
- const _hoisted_4$4 = {
5999
- key: 2,
6000
- class: "ctrl-box"
6001
- };
6002
- const _hoisted_5$3 = { class: "ctrl-left" };
6003
- const _hoisted_6 = { class: "ctrl-btn-speed" };
6004
- const _hoisted_7 = { class: "ctrl-right" };
6005
- const _sfc_main$g = /* @__PURE__ */ defineComponent({
6006
- __name: "index",
6007
- props: {
6008
- videoErrorMaxCount: {
6009
- type: Number,
6010
- default: 3
6011
- },
6012
- videoConfig: {
6013
- type: Object,
6014
- default: () => {
6015
- }
6016
- }
6017
- },
6018
- emits: ["removeVideo", "errorVideo", "urlError", "videoOriginalInfo"],
6019
- setup(__props, { emit: __emit }) {
6020
- const injectedSlots = inject("slots");
6021
- const videoModelsInfo = ref$1({
6022
- easyplayer: {
6023
- name: "easyplayer",
6024
- player: EasyPlayView
6025
- },
6026
- hk: {
6027
- name: "hk",
6028
- player: HKPlayView
6029
- }
6030
- });
6031
- const videoModel = inject("videoModel");
6032
- const activeIndex = inject("activeIndex");
6033
- const videoCtrlFun = inject("videoCtrlFun");
6034
- const showVideoCtrls = inject("showVideoCtrls");
6035
- const slidValue = inject("slidValue");
6036
- const hasFullScreen = inject("hasFullScreen");
6037
- const emits = __emit;
6038
- const videoDivRefs = ref$1({});
6039
- const videoPlayerRefs = ref$1({});
6040
- const closeBtnStatusList = ref$1([]);
6041
- const showClose = inject("showClose") + "" === "true";
6042
- const isFullScreen = ref$1(false);
6043
- function getVideoModel(info) {
6044
- var _a3, _b, _c2, _d;
6045
- if (!!(info == null ? void 0 : info.videoModel)) {
6046
- return (_b = (_a3 = videoModelsInfo.value) == null ? void 0 : _a3[info.videoModel]) == null ? void 0 : _b.player;
6047
- }
6048
- return (_d = (_c2 = videoModelsInfo.value) == null ? void 0 : _c2[videoModel]) == null ? void 0 : _d.player;
6049
- }
6050
- function messageHandler(e6, index2) {
6051
- emits("errorVideo", index2, false);
6052
- }
6053
- function urlErrorHandler(e6, index2) {
6054
- emits("urlError", index2);
6055
- }
6056
- function videoOriginalInfoHandler(e6, index2) {
6057
- emits("videoOriginalInfo", e6, index2);
6058
- }
6059
- function videoDivRefHandler(el2, index2) {
6060
- if (el2) {
6061
- videoDivRefs.value[index2] = el2;
6062
- }
6063
- }
6064
- function videoPlayerRefHandler(el2, index2) {
6065
- if (el2) {
6066
- videoPlayerRefs.value[index2] = el2;
6067
- }
6068
- }
6069
- function showCloseBtnHandler(index2) {
6070
- closeBtnStatusList.value[index2] = true;
6071
- }
6072
- function hideCloseBtnHandler(index2) {
6073
- closeBtnStatusList.value[index2] = false;
6074
- }
6075
- let clickCtrlStatus = false;
6076
- const speakStatue = ref$1(false);
6077
- const ctrlInfoByMousedown = ref$1();
6078
- function ctrlHandler(type2, info) {
6079
- var _a3, _b, _c2, _d, _e, _f, _g, _h2, _i, _j;
6080
- clickCtrlStatus = true;
6081
- ctrlInfoByMousedown.value = info;
6082
- if (type2 === "left") {
6083
- (_a3 = videoCtrlFun == null ? void 0 : videoCtrlFun.toLeft) == null ? void 0 : _a3.call(videoCtrlFun, info);
6084
- } else if (type2 === "right") {
6085
- (_b = videoCtrlFun == null ? void 0 : videoCtrlFun.toRight) == null ? void 0 : _b.call(videoCtrlFun, info);
6086
- } else if (type2 === "top") {
6087
- (_c2 = videoCtrlFun == null ? void 0 : videoCtrlFun.toTop) == null ? void 0 : _c2.call(videoCtrlFun, info);
6088
- } else if (type2 === "bottom") {
6089
- (_d = videoCtrlFun == null ? void 0 : videoCtrlFun.toBottom) == null ? void 0 : _d.call(videoCtrlFun, info);
6090
- } else if (type2 === "zoom-in") {
6091
- (_e = videoCtrlFun == null ? void 0 : videoCtrlFun.changeZoom) == null ? void 0 : _e.call(videoCtrlFun, info, 1, slidValue.value);
6092
- } else if (type2 === "zoom-out") {
6093
- (_f = videoCtrlFun == null ? void 0 : videoCtrlFun.changeZoom) == null ? void 0 : _f.call(videoCtrlFun, info, -1, slidValue.value);
6094
- } else if (type2 === "speak") {
6095
- speakStatue.value = true;
6096
- (_g = videoCtrlFun == null ? void 0 : videoCtrlFun.toSpeak) == null ? void 0 : _g.call(videoCtrlFun, info);
6097
- } else if (type2 === "scan") {
6098
- (_h2 = videoCtrlFun == null ? void 0 : videoCtrlFun.toScan) == null ? void 0 : _h2.call(videoCtrlFun, info);
6099
- } else if (type2 === "cruise") {
6100
- (_i = videoCtrlFun == null ? void 0 : videoCtrlFun.toCruise) == null ? void 0 : _i.call(videoCtrlFun, info);
6101
- } else if (type2 === "call") {
6102
- (_j = videoCtrlFun == null ? void 0 : videoCtrlFun.toCall) == null ? void 0 : _j.call(videoCtrlFun, info);
6103
- }
6104
- }
6105
- function stopHandler() {
6106
- var _a3;
6107
- if (clickCtrlStatus) {
6108
- (_a3 = videoCtrlFun == null ? void 0 : videoCtrlFun.stop) == null ? void 0 : _a3.call(videoCtrlFun, ctrlInfoByMousedown.value);
6109
- }
6110
- clickCtrlStatus = false;
6111
- speakStatue.value = false;
6112
- ctrlInfoByMousedown.value = null;
6113
- }
6114
- function slidHandler(info) {
6115
- var _a3;
6116
- (_a3 = videoCtrlFun == null ? void 0 : videoCtrlFun.speed) == null ? void 0 : _a3.call(videoCtrlFun, info, slidValue.value);
6117
- }
6118
- function toggleFullScreen(index2) {
6119
- var _a3, _b;
6120
- try {
6121
- if (hasFullScreen + "" === "false") {
6122
- ElMessage.info("当前视频不支持全屏");
6123
- return;
6124
- }
6125
- } catch (error) {
6126
- console.error(`配置是否全屏失败:`, error);
6127
- }
6128
- let target = null;
6129
- try {
6130
- target = index2 == null ? void 0 : index2.currentTarget;
6131
- } catch (error) {
6132
- console.error(`全屏/退出失败,`, error);
6133
- }
6134
- if (!target) {
6135
- target = (_a3 = videoDivRefs.value) == null ? void 0 : _a3[index2];
6136
- }
6137
- if (!document.fullscreenElement) {
6138
- isFullScreen.value = true;
6139
- if (target) {
6140
- target.requestFullscreen();
6141
- }
6142
- } else {
6143
- isFullScreen.value = false;
6144
- (_b = document == null ? void 0 : document.exitFullscreen) == null ? void 0 : _b.call(document);
6145
- }
6146
- }
6147
- function handleFullscreenChange() {
6148
- if (!document.fullscreenElement) {
6149
- isFullScreen.value = false;
6150
- } else {
6151
- isFullScreen.value = true;
6152
- }
6153
- nextTick(() => {
6154
- const eles = document.querySelectorAll('[title="全屏"]');
6155
- if (isFullScreen.value) {
6156
- eles.forEach((ele) => {
6157
- ele.innerHTML = "退出全屏";
6158
- });
6159
- } else {
6160
- eles.forEach((ele) => {
6161
- ele.innerHTML = "全屏";
6162
- });
6163
- }
6164
- });
6165
- }
6166
- function closeVideoHandler(index2) {
6167
- emits("removeVideo", index2, false);
6168
- isFullScreen.value = false;
6169
- }
6170
- onMounted(() => {
6171
- document.addEventListener("fullscreenchange", handleFullscreenChange);
6172
- document.addEventListener("mouseup", stopHandler);
6173
- });
6174
- onUnmounted(() => {
6175
- document.removeEventListener("fullscreenchange", handleFullscreenChange);
6176
- document.removeEventListener("mouseup", stopHandler);
6177
- });
6178
- return (_ctx, _cache) => {
6179
- const _component_el_button = resolveComponent("el-button");
6180
- const _component_CaretLeft = resolveComponent("CaretLeft");
6181
- const _component_el_icon = resolveComponent("el-icon");
6182
- const _component_CaretTop = resolveComponent("CaretTop");
6183
- const _component_CaretRight = resolveComponent("CaretRight");
6184
- const _component_CaretBottom = resolveComponent("CaretBottom");
6185
- const _component_Microphone = resolveComponent("Microphone");
6186
- const _component_el_slider = resolveComponent("el-slider");
6187
- const _component_ZoomIn = resolveComponent("ZoomIn");
6188
- const _component_ZoomOut = resolveComponent("ZoomOut");
6189
- const _component_Files = resolveComponent("Files");
6190
- const _component_MapLocation = resolveComponent("MapLocation");
6191
- const _component_VideoCamera = resolveComponent("VideoCamera");
6192
- return openBlock(), createElementBlock("div", _hoisted_1$b, [
6193
- createVNode(SplitIcon, {
6194
- type: unref(activeIndex),
6195
- activeIndex: unref(activeIndex),
6196
- "onUpdate:activeIndex": _cache[1] || (_cache[1] = ($event) => isRef(activeIndex) ? activeIndex.value = $event : null),
6197
- width: "100%",
6198
- height: "100%",
6199
- isVideo: true
6200
- }, {
6201
- "video-view-slot": withCtx(({ index: index2, url, info }) => {
6202
- var _a3;
6203
- return [
6204
- createElementVNode("div", {
6205
- class: "live-player-box",
6206
- ref: (el2) => videoDivRefHandler(el2, index2),
6207
- onDblclick: toggleFullScreen,
6208
- onMouseover: ($event) => showCloseBtnHandler(index2),
6209
- onMouseleave: ($event) => hideCloseBtnHandler(index2)
6210
- }, [
6211
- !url ? (openBlock(), createElementBlock("span", _hoisted_3$7, "无信号")) : (openBlock(), createBlock(resolveDynamicComponent(getVideoModel(info)), {
6212
- key: 1,
6213
- ref: (el2) => videoPlayerRefHandler(el2, index2),
6214
- videoUrl: url,
6215
- MSE: __props.videoConfig.MSE,
6216
- WCS: __props.videoConfig.WCS,
6217
- WASM: __props.videoConfig.WASM,
6218
- WASMSIMD: __props.videoConfig.WASMSIMD,
6219
- loadTimeReplay: __props.videoErrorMaxCount,
6220
- stretch: __props.videoConfig.stretch,
6221
- hasAudio: __props.videoConfig.hasAudio,
6222
- isLive: __props.videoConfig.isLive,
6223
- playerIndex: index2,
6224
- hkPath: info == null ? void 0 : info.hkPath,
6225
- onDblclick: toggleFullScreen,
6226
- onError: ($event) => messageHandler($event, index2),
6227
- onUrlError: ($event) => urlErrorHandler($event, index2),
6228
- onVideoOriginalInfo: ($event) => videoOriginalInfoHandler($event, index2)
6229
- }, null, 40, ["videoUrl", "MSE", "WCS", "WASM", "WASMSIMD", "loadTimeReplay", "stretch", "hasAudio", "isLive", "playerIndex", "hkPath", "onError", "onUrlError", "onVideoOriginalInfo"])),
6230
- withDirectives(createVNode(_component_el_button, {
6231
- onClick: ($event) => closeVideoHandler(index2),
6232
- type: "info",
6233
- class: "close-btn"
6234
- }, {
6235
- default: withCtx(() => [..._cache[2] || (_cache[2] = [
6236
- createTextVNode("关闭", -1)
6237
- ])]),
6238
- _: 1
6239
- }, 8, ["onClick"]), [
6240
- [vShow, closeBtnStatusList.value[index2] && !!url && showClose]
6241
- ]),
6242
- unref(showVideoCtrls) ? withDirectives((openBlock(), createElementBlock("div", _hoisted_4$4, [
6243
- createElementVNode("div", _hoisted_5$3, [
6244
- createVNode(_component_el_icon, {
6245
- class: "ctrl-btn left",
6246
- onMousedown: ($event) => ctrlHandler("left", info)
6247
- }, {
6248
- default: withCtx(() => [
6249
- createVNode(_component_CaretLeft)
6250
- ]),
6251
- _: 1
6252
- }, 8, ["onMousedown"]),
6253
- createVNode(_component_el_icon, {
6254
- class: "ctrl-btn top",
6255
- onMousedown: ($event) => ctrlHandler("top", info)
6256
- }, {
6257
- default: withCtx(() => [
6258
- createVNode(_component_CaretTop)
6259
- ]),
6260
- _: 1
6261
- }, 8, ["onMousedown"]),
6262
- createVNode(_component_el_icon, {
6263
- class: "ctrl-btn right",
6264
- onMousedown: ($event) => ctrlHandler("right", info)
6265
- }, {
6266
- default: withCtx(() => [
6267
- createVNode(_component_CaretRight)
6268
- ]),
6269
- _: 1
6270
- }, 8, ["onMousedown"]),
6271
- createVNode(_component_el_icon, {
6272
- class: "ctrl-btn bottom",
6273
- onMousedown: ($event) => ctrlHandler("bottom", info)
6274
- }, {
6275
- default: withCtx(() => [
6276
- createVNode(_component_CaretBottom)
6277
- ]),
6278
- _: 1
6279
- }, 8, ["onMousedown"]),
6280
- createVNode(_component_el_icon, {
6281
- class: normalizeClass(["ctrl-btn speak", [speakStatue.value ? "running" : ""]]),
6282
- onMousedown: ($event) => ctrlHandler("speak", info)
6283
- }, {
6284
- default: withCtx(() => [
6285
- createVNode(_component_Microphone)
6286
- ]),
6287
- _: 1
6288
- }, 8, ["class", "onMousedown"]),
6289
- createElementVNode("div", _hoisted_6, [
6290
- _cache[3] || (_cache[3] = createElementVNode("span", { class: "speed-title" }, "速度:", -1)),
6291
- createVNode(_component_el_slider, {
6292
- class: "slid-btn",
6293
- modelValue: unref(slidValue),
6294
- "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => isRef(slidValue) ? slidValue.value = $event : null),
6295
- step: 5,
6296
- max: 255,
6297
- "show-tooltip": false,
6298
- onChange: ($event) => slidHandler(info)
6299
- }, null, 8, ["modelValue", "onChange"])
6300
- ])
6301
- ]),
6302
- createElementVNode("div", _hoisted_7, [
6303
- createVNode(_component_el_icon, {
6304
- class: "ctrl-btn zoom-in",
6305
- onMousedown: ($event) => ctrlHandler("zoom-in", info)
6306
- }, {
6307
- default: withCtx(() => [
6308
- createVNode(_component_ZoomIn)
6309
- ]),
6310
- _: 1
6311
- }, 8, ["onMousedown"]),
6312
- createVNode(_component_el_icon, {
6313
- class: "ctrl-btn zoom-out",
6314
- onMousedown: ($event) => ctrlHandler("zoom-out", info)
6315
- }, {
6316
- default: withCtx(() => [
6317
- createVNode(_component_ZoomOut)
6318
- ]),
6319
- _: 1
6320
- }, 8, ["onMousedown"]),
6321
- createVNode(_component_el_icon, {
6322
- class: "ctrl-btn scan",
6323
- onMousedown: ($event) => ctrlHandler("scan", info)
6324
- }, {
6325
- default: withCtx(() => [
6326
- createVNode(_component_Files)
6327
- ]),
6328
- _: 1
6329
- }, 8, ["onMousedown"]),
6330
- createVNode(_component_el_icon, {
6331
- class: "ctrl-btn cruise",
6332
- onMousedown: ($event) => ctrlHandler("cruise", info)
6333
- }, {
6334
- default: withCtx(() => [
6335
- createVNode(_component_MapLocation)
6336
- ]),
6337
- _: 1
6338
- }, 8, ["onMousedown"]),
6339
- createVNode(_component_el_icon, {
6340
- class: "ctrl-btn call",
6341
- onMousedown: ($event) => ctrlHandler("call", info)
6342
- }, {
6343
- default: withCtx(() => [
6344
- createVNode(_component_VideoCamera)
6345
- ]),
6346
- _: 1
6347
- }, 8, ["onMousedown"])
6348
- ])
6349
- ], 512)), [
6350
- [vShow, (unref(activeIndex) == 1 || isFullScreen.value) && closeBtnStatusList.value[index2] && !!url]
6351
- ]) : createCommentVNode("", true),
6352
- ((_a3 = unref(injectedSlots)) == null ? void 0 : _a3["video-player-cover"]) ? (openBlock(), createBlock(resolveDynamicComponent(unref(injectedSlots)["video-player-cover"]), { key: 3 })) : createCommentVNode("", true)
6353
- ], 40, _hoisted_2$8)
6354
- ];
6355
- }),
6356
- _: 1
6357
- }, 8, ["type", "activeIndex"])
6358
- ]);
6359
- };
6360
- }
6361
- });
6362
- const SplitVideoGroup = /* @__PURE__ */ _export_sfc(_sfc_main$g, [["__scopeId", "data-v-d238d0e7"]]);
6363
- const ctrlApis = {
6364
- fnUrl: "http://199.10.11.47:9091/videoTest/wvpFunction",
6365
- commandUrl: "http://199.10.11.47:9091/videoTest/wvpMove",
6366
- speakUrl: "http://199.10.11.47:19091/videoTest/wvpSpeak"
6367
- };
6368
- const _hoisted_1$a = { class: "video-player-view" };
6369
- const _hoisted_2$7 = { class: "video-tree" };
6370
- const _hoisted_3$6 = { class: "player-container" };
6371
- const _sfc_main$f = /* @__PURE__ */ defineComponent({
6372
- __name: "index",
6373
- props: {
6374
- // 视频类型, easyplayer / hk
6375
- videoModel: {
6376
- type: String,
6377
- default: "easyplayer"
6378
- },
6379
- hkPath: {
6380
- type: String,
6381
- default: "/js/h5player"
6382
- },
6383
- // 显示视频关闭按钮
6384
- showClose: {
6385
- type: Boolean,
6386
- default: true
6387
- },
6388
- // 是否支持全屏
6389
- hasFullScreen: {
6390
- type: Boolean,
6391
- default: true
6392
- },
6393
- // 显示树
6394
- showTree: {
6395
- type: Boolean,
6396
- default: true
6397
- },
6398
- // 树数据
6399
- treeData: {
6400
- type: Array,
6401
- default: () => [],
6402
- required: true
6403
- },
6404
- // !!!树节点key
6405
- treeNodeKey: {
6406
- type: String,
6407
- default: "label"
6408
- },
6409
- // 树节点展开
6410
- treeExpandedKeys: {
6411
- type: Array,
6412
- default: () => []
6413
- },
6414
- // 树节点属性 (videoUrlKey值要和treeData中的播放地址key一致, 默认为url)
6415
- treeOptions: {
6416
- type: Object,
6417
- default: () => ({
6418
- icontype: "icontype",
6419
- background: "background",
6420
- videoUrlKey: "url",
6421
- children: "children",
6422
- label: "label"
6423
- })
6424
- },
6425
- // 显示分屏按钮
6426
- showVideoSplit: {
6427
- type: Boolean,
6428
- default: true
6429
- },
6430
- // 分屏使用图标
6431
- videoSplitUseIcon: {
6432
- type: Boolean,
6433
- default: true
6434
- },
6435
- // 显示方向控制按钮
6436
- showVideoCtrls: {
6437
- type: Boolean,
6438
- default: false
6439
- },
6440
- // 禁止控制按钮默认请求行为(默认false,true则不使用组件的发送请求仅调用自定义回调函数)
6441
- stopVideoCtrlMethods: {
6442
- type: Boolean,
6443
- default: false
6444
- },
6445
- // 分屏模式: 1: 单屏, 2: 四屏, 3: 九屏
6446
- videoSplitType: {
6447
- type: Number,
6448
- default: 1
6449
- },
6450
- // 播放模式: 1: 单击,2: 双击
6451
- videoPlayModel: {
6452
- type: Number,
6453
- default: 1
6454
- },
6455
- // 单个视频错误最大次数
6456
- videoErrorMaxCount: {
6457
- type: Number,
6458
- default: 3
6459
- },
6460
- // easyplayer配置 (默认一般不修改)
6461
- videoConfig: {
6462
- type: Object,
6463
- default: () => {
6464
- return {
6465
- MSE: true,
6466
- WCS: true,
6467
- WASM: true,
6468
- WASMSIMD: true,
6469
- isLive: true,
6470
- hasAudio: false,
6471
- stretch: false
6472
- };
6473
- }
6474
- },
6475
- // 获取、设置打开的播放视频信息
6476
- videoInfos: {
6477
- type: Array,
6478
- default: () => [
6479
- {
6480
- index: 0
6481
- }
6482
- ]
6483
- },
6484
- // !!! 单点播放
6485
- videoSingleUrl: {
6486
- type: Boolean,
6487
- default: false
6488
- },
6489
- // !!! 已经在播放的是否关闭后再点击打开(需要单点播 videoSingleUrl:true)
6490
- videoSingleClose: {
6491
- type: Boolean,
6492
- default: false
6493
- },
6494
- hasVideoRightMenu: {
6495
- type: Boolean,
6496
- default: false
6497
- },
6498
- // 回调函数后是否继续执行默认播放操作
6499
- callbackContinueExecute: {
6500
- type: Boolean,
6501
- default: true
6502
- },
6503
- // 回调函数
6504
- treeClick: {
6505
- type: Function,
6506
- default: null
6507
- },
6508
- treeDBClick: {
6509
- type: Function,
6510
- default: null
6511
- },
6512
- treeRightMenu: {
6513
- type: Function,
6514
- default: null
6515
- },
6516
- treeExpand: {
6517
- type: Function,
6518
- default: null
6519
- },
6520
- videoError: {
6521
- type: Function,
6522
- default: null
6523
- }
6524
- },
6525
- emits: [
6526
- "videoOriginalInfo",
6527
- "up",
6528
- "down",
6529
- "left",
6530
- "right",
6531
- "zoomin",
6532
- "zoomout",
6533
- "stop",
6534
- "speed",
6535
- "speak",
6536
- "scan",
6537
- "cruise",
6538
- "call",
6539
- "changeSplit"
6540
- ],
6541
- setup(__props, { expose: __expose, emit: __emit }) {
6542
- const slots = useSlots();
6543
- provide("slots", slots);
6544
- const props = __props;
6545
- const treeRef = ref$1();
6546
- let videoErrorInfos = {};
6547
- const emit = __emit;
6548
- const getTreeNodeIcon = (iconType) => {
6549
- if (iconType === "on") {
6550
- return "online";
6551
- } else if (iconType === "off") {
6552
- return "offline";
6553
- }
6554
- return "";
6555
- };
6556
- const activeIndex = ref$1(props.videoSplitType);
6557
- const fouceIndex = ref$1(0);
6558
- const slidValue = ref$1(50);
6559
- const videoCtrlFun = {
6560
- speed: (info, slidValue2) => {
6561
- console.log("speed: ", slidValue2);
6562
- ctrlCommand("speed", info, slidValue2);
6563
- },
6564
- toTop: (info) => {
6565
- console.log("up");
6566
- ctrlCommand("up", info);
6567
- },
6568
- toBottom: (info) => {
6569
- console.log("down");
6570
- ctrlCommand("down", info);
6571
- },
6572
- toLeft: (info) => {
6573
- console.log("left");
6574
- ctrlCommand("left", info);
6575
- },
6576
- toRight: (info) => {
6577
- console.log("right");
6578
- ctrlCommand("right", info);
6579
- },
6580
- stop: (info) => {
6581
- console.log("stop");
6582
- ctrlCommand("stop", info);
6583
- },
6584
- changeZoom: (info, type2, speed) => {
6585
- console.log("changeZoom: ", type2);
6586
- if (type2 > 0) {
6587
- ctrlCommand("zoomin", info, speed);
6588
- } else if (type2 < 0) {
6589
- ctrlCommand("zoomout", info, speed);
6590
- }
6591
- },
6592
- toSpeak: (info) => {
6593
- ctrlSpeak("speak", info);
6594
- },
6595
- toScan: (info) => {
6596
- ctrlFunction("scan", info);
6597
- },
6598
- toCruise: (info) => {
6599
- ctrlFunction("cruise", info);
6600
- },
6601
- toCall: (info) => {
6602
- ctrlFunction("call", info);
6603
- }
6604
- };
6605
- function ctrlSpeak(type2, info, value = null) {
6606
- emit(type2, info, value);
6607
- if (props.stopVideoCtrlMethods) {
6608
- return;
6609
- }
6610
- const params = objectToString({
6611
- url: " ",
6612
- deviceId: (info == null ? void 0 : info.deviceId) ? info.deviceId : "",
6613
- channelId: (info == null ? void 0 : info.channelId) ? info.channelId : ""
6614
- });
6615
- fetch(`${ctrlApis == null ? void 0 : ctrlApis.speakUrl}?${params}`);
6616
- }
6617
- function ctrlFunction(type2, info, value = null) {
6618
- emit(type2, info, value);
6619
- if (props.stopVideoCtrlMethods) {
6620
- return;
6621
- }
6622
- const params = objectToString({
6623
- url: " ",
6624
- deviceId: (info == null ? void 0 : info.deviceId) ? info.deviceId : "",
6625
- channelId: (info == null ? void 0 : info.channelId) ? info.channelId : "",
6626
- functionType: type2
6627
- });
6628
- fetch(`${ctrlApis == null ? void 0 : ctrlApis.fnUrl}?${params}`);
6629
- }
6630
- function ctrlCommand(type2, info, value = null) {
6631
- emit(type2, info, value);
6632
- if (props.stopVideoCtrlMethods) {
6633
- return;
6634
- }
6635
- const params = objectToString({
6636
- url: " ",
6637
- deviceId: (info == null ? void 0 : info.deviceId) ? info.deviceId : "",
6638
- channelId: (info == null ? void 0 : info.channelId) ? info.channelId : "",
6639
- command: type2,
6640
- horizonSpeed: slidValue.value,
6641
- verticalSpeed: slidValue.value,
6642
- zoomSpeed: slidValue.value
6643
- });
6644
- fetch(`${ctrlApis == null ? void 0 : ctrlApis.commandUrl}?${params}`);
6645
- }
6646
- const videoInfos = ref$1([{ index: 0, [props.treeOptions.videoUrlKey]: "" }]);
6647
- watch(
6648
- () => props.videoInfos,
6649
- (nv) => {
6650
- console.log("传入的videoInfos----->", nv);
6651
- nextTick(() => {
6652
- const changeNv = checkVideoInfos(JSON.parse(JSON.stringify(nv)));
6653
- videoInfos.value = changeNv;
6654
- videoErrorInfos = {};
6655
- });
6656
- },
6657
- { immediate: true, deep: true }
6658
- );
6659
- watch(
6660
- () => videoInfos.value,
6661
- (nv) => {
6662
- console.log("播放数据:", nv);
6663
- },
6664
- { immediate: true, deep: true }
6665
- );
6666
- watch(
6667
- () => props.videoSplitType,
6668
- (nv) => {
6669
- console.log("分屏方式:", nv);
6670
- activeIndex.value = nv;
6671
- videoErrorInfos = {};
6672
- },
6673
- { immediate: true }
6674
- );
6675
- provide("videoModel", props.videoModel);
6676
- provide("hkPath", props.hkPath);
6677
- provide("videoUrlKey", props.treeOptions.videoUrlKey);
6678
- provide("activeIndex", activeIndex);
6679
- provide("fouceIndex", fouceIndex);
6680
- provide("videoInfos", videoInfos);
6681
- provide("videoCtrlFun", videoCtrlFun);
6682
- provide("showVideoCtrls", props.showVideoCtrls);
6683
- provide("slidValue", slidValue);
6684
- provide("showClose", props.showClose);
6685
- provide("hasFullScreen", props.hasFullScreen + "" === "false" ? false : true);
6686
- watch(
6687
- () => activeIndex.value,
6688
- (nv) => {
6689
- emit("changeSplit", nv);
6690
- }
6691
- );
6692
- function objectToString(obj) {
6693
- return Object.keys(obj).map((key) => `${encodeURIComponent(key)}=${encodeURIComponent(obj[key])}`).join("&");
6694
- }
6695
- function checkVideoInfos(data) {
6696
- const differenceCount = Math.pow(activeIndex.value, 2);
6697
- data.sort((a, b3) => a.index - b3.index);
6698
- data = data.filter((item) => item.index <= differenceCount - 1);
6699
- for (let i3 = 0; i3 < differenceCount; i3++) {
6700
- if (!data.some((item) => item.index === i3)) {
6701
- data.push({ index: i3, [props.treeOptions.videoUrlKey]: "" });
6702
- }
6703
- }
6704
- data.sort((a, b3) => a.index - b3.index);
6705
- return data;
6706
- }
6707
- const comRightMenuRef = ref$1(null);
6708
- const rightMenus = ref$1([
6709
- {
6710
- name: "打开监控",
6711
- callback: openVideo
6712
- }
6713
- ]);
6714
- function openVideo(val) {
6715
- if (val == null ? void 0 : val[props.treeOptions.videoUrlKey]) {
6716
- setVideoUrl(val[props.treeOptions.videoUrlKey], true, fouceIndex.value, val);
6717
- }
6718
- }
6719
- const treeExpand = computed(() => {
6720
- return props.treeExpand || treeExpandHandler;
6721
- });
6722
- const treeRightMenu = (event, val) => {
6723
- if (!props.hasVideoRightMenu) {
6724
- return;
6725
- }
6726
- if (props.treeRightMenu) {
6727
- props.treeRightMenu(event, val);
6728
- if (props.callbackContinueExecute) {
6729
- treeRightMenuHandler(event, val);
6730
- }
6731
- } else {
6732
- treeRightMenuHandler(event, val);
6733
- }
6734
- };
6735
- const dbClickInfo = {
6736
- dbTime: 200,
6737
- timeOut: null
6738
- };
6739
- function treeNodeAction(val) {
6740
- if (!dbClickInfo.timeOut) {
6741
- dbClickInfo.timeOut = setTimeout(() => {
6742
- dbClickInfo.timeOut = null;
6743
- if (props.treeClick) {
6744
- props.treeClick(val);
6745
- if (props.callbackContinueExecute) {
6746
- treeNodeClickHandler(val);
6747
- }
6748
- } else {
6749
- treeNodeClickHandler(val);
6750
- }
6751
- }, dbClickInfo.dbTime);
6752
- } else {
6753
- clearTimeout(dbClickInfo.timeOut);
6754
- dbClickInfo.timeOut = null;
6755
- if (props.treeDBClick) {
6756
- props.treeDBClick(val);
6757
- if (props.callbackContinueExecute) {
6758
- treeNodeDBClickHandler(val);
6759
- }
6760
- } else {
6761
- treeNodeDBClickHandler(val);
6762
- }
6763
- }
6764
- }
6765
- function treeNodeClickHandler(val) {
6766
- console.log("单击");
6767
- if (props.videoPlayModel == 1) {
6768
- defalutPlay(val);
6769
- }
6770
- }
6771
- function treeNodeDBClickHandler(val) {
6772
- console.log("双击");
6773
- defalutPlay(val);
6774
- }
6775
- function defalutPlay(val) {
6776
- if (val == null ? void 0 : val[props.treeOptions.videoUrlKey]) {
6777
- setVideoUrl(val == null ? void 0 : val[props.treeOptions.videoUrlKey], true, fouceIndex.value, val);
6778
- }
6779
- }
6780
- function treeRightMenuHandler(event, val) {
6781
- console.log("右键菜单");
6782
- comRightMenuRef.value.right_showMenu(val, event);
6783
- }
6784
- function treeExpandHandler() {
6785
- console.log("展开");
6786
- }
6787
- const getCurrentVideoUrl = ref$1({});
6788
- function setVideoUrl(url, toNext = true, index2 = fouceIndex.value, treeNodeInfo = null) {
6789
- var _a3, _b, _c2;
6790
- getCurrentVideoUrl.value = {
6791
- url,
6792
- toNext,
6793
- index: index2,
6794
- treeNodeInfo
6795
- };
6796
- if (index2 == -1) {
6797
- index2 = fouceIndex.value;
6798
- }
6799
- const currentVideoInfo = videoInfos.value.find((item) => item.index === index2);
6800
- if (fouceIndex.value != index2) {
6801
- fouceIndex.value = index2;
6802
- }
6803
- if (currentVideoInfo) {
6804
- if (treeNodeInfo && props.videoSingleUrl) {
6805
- const treeNodeInfoPlaying = (_a3 = videoInfos.value) == null ? void 0 : _a3.find(
6806
- (item) => {
6807
- var _a4;
6808
- return ((_a4 = item.info) == null ? void 0 : _a4[props.treeNodeKey]) === (treeNodeInfo == null ? void 0 : treeNodeInfo[props.treeNodeKey]);
6809
- }
6810
- );
6811
- if (treeNodeInfoPlaying) {
6812
- treeNodeInfoPlaying[props.treeOptions.videoUrlKey] = "";
6813
- delete treeNodeInfoPlaying.info;
6814
- if (props.videoSingleClose) {
6815
- return;
6816
- }
6817
- }
6818
- }
6819
- currentVideoInfo[props.treeOptions.videoUrlKey] = "";
6820
- delete currentVideoInfo.info;
6821
- setTimeout(() => {
6822
- currentVideoInfo[props.treeOptions.videoUrlKey] = url;
6823
- if (treeNodeInfo) {
6824
- currentVideoInfo.info = treeNodeInfo;
6825
- }
6826
- }, 250);
6827
- }
6828
- const maxCount = ((_b = Object.values(videoInfos.value)[Object.values(videoInfos.value).length - 1]) == null ? void 0 : _b.index) > Math.pow(activeIndex.value, 2) ? Math.pow(activeIndex.value, 2) - 1 : (_c2 = Object.values(videoInfos.value)[Object.values(videoInfos.value).length - 1]) == null ? void 0 : _c2.index;
6829
- if (maxCount > fouceIndex.value && toNext) {
6830
- fouceIndex.value++;
6831
- }
6832
- }
6833
- function removeVideo(index2, toNext = true) {
6834
- setVideoUrl("", toNext, index2);
6835
- try {
6836
- delete videoOriginalInfos.value[index2];
6837
- } catch (error) {
6838
- console.warn("删除视频原始信息:", error);
6839
- }
6840
- }
6841
- function errorVideo(index2, toNext = true) {
6842
- var _a3, _b;
6843
- console.warn("播放失败:", index2);
6844
- if (props.videoErrorMaxCount <= 0) {
6845
- removeVideo(index2, toNext);
6846
- (_a3 = props.videoError) == null ? void 0 : _a3.call(props, index2);
6847
- } else {
6848
- if (videoErrorInfos[index2] == null || videoErrorInfos[index2] == void 0) {
6849
- videoErrorInfos[index2] = { errors: 1 };
6850
- } else {
6851
- videoErrorInfos[index2] = { errors: videoErrorInfos[index2].errors + 1 };
6852
- }
6853
- console.warn("部分视频播放失败:", JSON.stringify(videoErrorInfos));
6854
- for (const [k, v] of Object.entries(videoErrorInfos)) {
6855
- if (v.errors >= props.videoErrorMaxCount) {
6856
- v.errors = 0;
6857
- removeVideo(index2, toNext);
6858
- (_b = props.videoError) == null ? void 0 : _b.call(props, index2);
6859
- console.info(`关闭失败视频:${k}, (失败次数: ${v.errors})`);
6860
- }
6861
- }
6862
- }
6863
- }
6864
- function urlError(index2) {
6865
- console.warn("【url错误】播放失败");
6866
- removeVideo(index2);
6867
- }
6868
- const videoOriginalInfos = ref$1({});
6869
- function videoOriginalInfo(originalInfo, index2) {
6870
- videoOriginalInfos.value[index2] = originalInfo;
6871
- emit("videoOriginalInfo", videoOriginalInfos.value);
6872
- }
6873
- function checkTreeNodeIsPlayHandler(data) {
6874
- var _a3;
6875
- let isPlay = false;
6876
- for (let i3 = 0; i3 < videoInfos.value.length; i3++) {
6877
- const selectTreeNode = videoInfos.value[i3];
6878
- const nodeKey = data == null ? void 0 : data[props == null ? void 0 : props.treeNodeKey];
6879
- if ((selectTreeNode == null ? void 0 : selectTreeNode.info) && nodeKey && nodeKey == ((_a3 = selectTreeNode.info) == null ? void 0 : _a3[props == null ? void 0 : props.treeNodeKey])) {
6880
- isPlay = true;
6881
- break;
6882
- }
6883
- }
6884
- if (isPlay) {
6885
- return "tree-node-playing";
6886
- } else {
6887
- return "";
6888
- }
6889
- }
6890
- function getOriginalInfo() {
6891
- return videoOriginalInfos.value;
6892
- }
6893
- __expose({ setVideoUrl, removeVideo, fouceIndex, videoInfos, treeRef, getOriginalInfo });
6894
- return (_ctx, _cache) => {
6895
- const _component_el_tree = resolveComponent("el-tree");
6896
- const _directive_sline = resolveDirective("sline");
6897
- return openBlock(), createElementBlock("div", _hoisted_1$a, [
6898
- __props.showTree ? renderSlot(_ctx.$slots, "video-tree", { key: 0 }, () => [
6899
- createElementVNode("div", _hoisted_2$7, [
6900
- createVNode(_component_el_tree, {
6901
- class: "tree-view",
6902
- ref_key: "treeRef",
6903
- ref: treeRef,
6904
- "node-key": __props.treeNodeKey,
6905
- data: __props.treeData,
6906
- "expand-on-click-node": false,
6907
- props: __props.treeOptions,
6908
- "default-expanded-keys": __props.treeExpandedKeys,
6909
- onNodeClick: treeNodeAction,
6910
- onNodeContextmenu: treeRightMenu,
6911
- onNodeExpand: treeExpand.value
6912
- }, {
6913
- default: withCtx(({ node, data }) => [
6914
- createElementVNode("div", {
6915
- class: "tree-node",
6916
- style: normalizeStyle({
6917
- background: (data == null ? void 0 : data[__props.treeOptions.background]) ? `url(${data[__props.treeOptions.background]}) no-repeat top left / 100% 100%` : ""
6918
- })
6919
- }, [
6920
- createElementVNode("span", {
6921
- class: normalizeClass(["tree-node-icon", getTreeNodeIcon(data == null ? void 0 : data[__props.treeOptions.icontype])])
6922
- }, null, 2),
6923
- withDirectives((openBlock(), createElementBlock("span", {
6924
- class: normalizeClass(["tree-node-title", { "tree-node-playing": checkTreeNodeIsPlayHandler(data) }])
6925
- }, [
6926
- createTextVNode(toDisplayString(data[__props.treeOptions.label]), 1)
6927
- ], 2)), [
6928
- [_directive_sline]
6929
- ])
6930
- ], 4)
6931
- ]),
6932
- _: 1
6933
- }, 8, ["node-key", "data", "props", "default-expanded-keys", "onNodeExpand"])
6934
- ])
6935
- ], true) : createCommentVNode("", true),
6936
- createElementVNode("div", _hoisted_3$6, [
6937
- __props.showVideoSplit ? renderSlot(_ctx.$slots, "video-player-head", { key: 0 }, () => [
6938
- createVNode(SplitIconGroup, {
6939
- class: "video-player-head",
6940
- videoSplitUseIcon: __props.videoSplitUseIcon
6941
- }, null, 8, ["videoSplitUseIcon"])
6942
- ], true) : createCommentVNode("", true),
6943
- renderSlot(_ctx.$slots, "video-player-view", {
6944
- videoConfig: __props.videoConfig,
6945
- videoInfos: videoInfos.value,
6946
- activeIndex: activeIndex.value,
6947
- fouceIndex: fouceIndex.value,
6948
- getCurrentVideoUrl: getCurrentVideoUrl.value
6949
- }, () => [
6950
- createVNode(SplitVideoGroup, {
6951
- class: normalizeClass(["video-player-center", !__props.showTree ? "no-tree" : ""]),
6952
- videoConfig: __props.videoConfig,
6953
- videoErrorMaxCount: __props.videoErrorMaxCount,
6954
- onRemoveVideo: removeVideo,
6955
- onErrorVideo: errorVideo,
6956
- onUrlError: urlError,
6957
- onVideoOriginalInfo: videoOriginalInfo
6958
- }, null, 8, ["class", "videoConfig", "videoErrorMaxCount"])
6959
- ], true),
6960
- renderSlot(_ctx.$slots, "video-player-foot", {}, void 0, true)
6961
- ]),
6962
- (openBlock(), createBlock(Teleport, { to: "body" }, [
6963
- createVNode(ComRightMenu, {
6964
- ref_key: "comRightMenuRef",
6965
- ref: comRightMenuRef,
6966
- rightMenus: rightMenus.value
6967
- }, null, 8, ["rightMenus"])
6968
- ]))
6969
- ]);
6970
- };
6971
- }
6972
- });
6973
- const NsVideo = /* @__PURE__ */ _export_sfc(_sfc_main$f, [["__scopeId", "data-v-7def3a14"]]);
6974
- function registerDirective(app2) {
6975
- app2.directive("sline", {
6976
- mounted(el2) {
6977
- el2.style.whiteSpace = "nowrap";
6978
- el2.style.overflow = "hidden";
6979
- el2.style.textOverflow = "ellipsis";
6980
- el2.style.display = "inline-block";
6981
- el2.style.maxWidth = "100%";
6982
- }
6983
- });
6984
- app2.directive("permission", {
6985
- mounted(el2, binding) {
6986
- var _a3, _b, _c2, _d, _e, _f;
6987
- let btnsPermission = [];
6988
- try {
6989
- if (sessionStorage.getItem("btnsPermission")) {
6990
- Array.isArray(JSON.parse(sessionStorage.getItem("btnsPermission"))) ? btnsPermission = JSON.parse(sessionStorage.getItem("btnsPermission")) : null;
6991
- } else if (localStorage.getItem("btnsPermission")) {
6992
- Array.isArray(JSON.parse(localStorage.getItem("btnsPermission"))) ? btnsPermission = JSON.parse(localStorage.getItem("btnsPermission")) : null;
6993
- }
6994
- } catch (e6) {
6995
- btnsPermission = [];
6996
- }
6997
- if (btnsPermission.length === 0) {
6998
- if (app2.config.globalProperties.$btnsPermission) {
6999
- btnsPermission = app2.config.globalProperties.$btnsPermission;
7000
- } else if (binding.instance && binding.instance.$.appContext.app.config.globalProperties.$btnsPermission) {
7001
- btnsPermission = binding.instance.$.appContext.app.config.globalProperties.$btnsPermission;
7002
- } else if (binding.instance && ((_a3 = binding.instance.$.provides) == null ? void 0 : _a3.btnsPermission)) {
7003
- btnsPermission = binding.instance.$.provides.btnsPermission;
7004
- } else if (binding.instance && ((_c2 = (_b = binding.instance.$.parent) == null ? void 0 : _b.provides) == null ? void 0 : _c2.btnsPermission)) {
7005
- btnsPermission = binding.instance.$.parent.provides.btnsPermission;
7006
- }
7007
- }
7008
- const selector = ((_d = binding.modifiers) == null ? void 0 : _d["class"]) ? "class" : ((_e = binding.modifiers) == null ? void 0 : _e["id"]) ? "id" : "id";
7009
- const isDisplayNone = (_f = binding.modifiers) == null ? void 0 : _f["display"];
7010
- if (selector === "id") {
7011
- if (!(btnsPermission == null ? void 0 : btnsPermission.includes(el2.getAttribute(selector)))) {
7012
- if (isDisplayNone) {
7013
- el2.style.display = "none";
7014
- } else {
7015
- el2.style.visibility = "hidden";
7016
- el2.style.pointerEvents = "none";
7017
- }
7018
- } else {
7019
- el2.style.pointerEvents = "auto";
7020
- }
7021
- } else if (selector === "class") {
7022
- if ((btnsPermission == null ? void 0 : btnsPermission.filter((item) => Array.from(el2.classList).includes(item)).length) === 0) {
7023
- if (isDisplayNone) {
7024
- el2.style.display = "none";
7025
- } else {
7026
- el2.style.visibility = "hidden";
7027
- el2.style.pointerEvents = "none";
7028
- }
7029
- } else {
7030
- el2.style.pointerEvents = "auto";
7031
- }
7032
- }
7033
- }
7034
- });
7035
- app2.directive("length", {
7036
- mounted(el2, binding) {
7037
- var _a3, _b, _c2;
7038
- const config = parseBindingValue(binding);
7039
- let isComposing = false;
7040
- const getInputElement = () => {
7041
- return el2.tagName === "INPUT" ? el2 : el2.querySelector("input");
7042
- };
7043
- const handleCompositionStart = () => {
7044
- isComposing = true;
7045
- };
7046
- const handleCompositionEnd = (e6) => {
7047
- var _a4, _b2, _c3;
7048
- isComposing = false;
7049
- if (((_a4 = binding.modifiers) == null ? void 0 : _a4.number) || ((_b2 = binding.modifiers) == null ? void 0 : _b2.range) || ((_c3 = binding.modifiers) == null ? void 0 : _c3.regex)) {
7050
- handleInput(e6);
7051
- }
7052
- };
7053
- const handleInput = (e6) => {
7054
- var _a4, _b2, _c3;
7055
- const inputEl2 = e6.target;
7056
- if (isComposing) {
7057
- return;
7058
- }
7059
- const oldValue = inputEl2.value;
7060
- let newValue = oldValue;
7061
- if ((_a4 = binding.modifiers) == null ? void 0 : _a4.range) {
7062
- newValue = formatRangeInput(oldValue, config);
7063
- } else if ((_b2 = binding.modifiers) == null ? void 0 : _b2.number) {
7064
- newValue = formatNumberInput(oldValue, config.maxLength);
7065
- } else if (((_c3 = binding.modifiers) == null ? void 0 : _c3.regex) && config.pattern) {
7066
- newValue = formatRegexInput(oldValue, config.maxLength, config.pattern);
7067
- } else {
7068
- newValue = oldValue.slice(0, config.maxLength);
7069
- }
7070
- if (newValue !== oldValue) {
7071
- inputEl2.value = newValue;
7072
- const event = new Event("input", { bubbles: true });
7073
- inputEl2.dispatchEvent(event);
7074
- }
7075
- };
7076
- const inputEl = getInputElement();
7077
- if (inputEl) {
7078
- inputEl.addEventListener("compositionstart", handleCompositionStart);
7079
- inputEl.addEventListener("compositionend", handleCompositionEnd);
7080
- inputEl.addEventListener("input", handleInput);
7081
- if (inputEl.value) {
7082
- if ((_a3 = binding.modifiers) == null ? void 0 : _a3.range) {
7083
- inputEl.value = formatRangeInput(inputEl.value, config);
7084
- } else if ((_b = binding.modifiers) == null ? void 0 : _b.number) {
7085
- inputEl.value = formatNumberInput(inputEl.value, config.maxLength);
7086
- } else if (((_c2 = binding.modifiers) == null ? void 0 : _c2.regex) && config.pattern) {
7087
- inputEl.value = formatRegexInput(inputEl.value, config.maxLength, config.pattern);
7088
- } else {
7089
- inputEl.value = inputEl.value.slice(0, config.maxLength);
7090
- }
7091
- }
7092
- }
7093
- el2._lengthDirectiveHandlers = {
7094
- compositionstart: handleCompositionStart,
7095
- compositionend: handleCompositionEnd,
7096
- input: handleInput,
7097
- inputElement: inputEl
7098
- };
7099
- },
7100
- unmounted(el2) {
7101
- const handlers = el2._lengthDirectiveHandlers;
7102
- if (handlers && handlers.inputElement) {
7103
- handlers.inputElement.removeEventListener("compositionstart", handlers.compositionstart);
7104
- handlers.inputElement.removeEventListener("compositionend", handlers.compositionend);
7105
- handlers.inputElement.removeEventListener("input", handlers.input);
7106
- delete el2._lengthDirectiveHandlers;
7107
- }
7108
- },
7109
- updated(el2, binding) {
7110
- updatedCheck(el2, binding);
7111
- }
7112
- });
7113
- app2.directive("event-unuse", {
7114
- mounted(el2) {
7115
- el2.style.pointerEvents = "none";
7116
- }
7117
- });
7118
- app2.directive("event-use", {
7119
- mounted(el2) {
7120
- el2.style.pointerEvents = "auto";
7121
- }
7122
- });
7123
- }
7124
- function parseBindingValue(binding) {
7125
- const defaultConfig = { maxLength: 50, pattern: null, min: null, max: null, int: false };
7126
- if (!binding.value) {
7127
- return defaultConfig;
7128
- }
7129
- if (typeof binding.value === "number") {
7130
- return { ...defaultConfig, maxLength: binding.value };
7131
- }
7132
- if (typeof binding.value === "object") {
7133
- return {
7134
- maxLength: binding.value.maxLength || defaultConfig.maxLength,
7135
- pattern: binding.value.pattern || null,
7136
- min: binding.value.min || null,
7137
- max: binding.value.max || null,
7138
- int: binding.value.int || false
7139
- };
7140
- }
7141
- return defaultConfig;
7142
- }
7143
- function formatRegexInput(value, maxLength, pattern) {
7144
- let result = "";
7145
- for (let i3 = 0; i3 < value.length && result.length < maxLength; i3++) {
7146
- const char = value[i3];
7147
- const testValue = result + char;
7148
- if (pattern.test(testValue)) {
7149
- result += char;
7150
- }
7151
- }
7152
- return result;
7153
- }
7154
- function updatedCheck(el2, binding) {
7155
- const config = parseBindingValue(binding);
7156
- const els = el2.querySelectorAll("input, textarea");
7157
- els.forEach((element) => {
7158
- var _a3, _b, _c2;
7159
- if (element == null ? void 0 : element.value) {
7160
- if ((_a3 = binding.modifiers) == null ? void 0 : _a3.range) {
7161
- element.value = formatRangeInput(element.value, config);
7162
- element.dispatchEvent(new Event("input"));
7163
- } else if ((_b = binding.modifiers) == null ? void 0 : _b.number) {
7164
- element.value = formatNumberInput(element.value, config.maxLength);
7165
- element.dispatchEvent(new Event("input"));
7166
- } else if (((_c2 = binding.modifiers) == null ? void 0 : _c2.regex) && config.pattern) {
7167
- element.value = formatRegexInput(element.value, config.maxLength, config.pattern);
7168
- element.dispatchEvent(new Event("input"));
7169
- } else {
7170
- element.value = element.value.slice(0, config.maxLength);
7171
- element.dispatchEvent(new Event("input"));
7172
- }
7173
- }
7174
- });
7175
- }
7176
- function formatNumberInput(value, maxLength, allowNegative = true) {
7177
- let result = "";
7178
- let hasMinus = false;
7179
- let hasDot = false;
7180
- for (let i3 = 0; i3 < value.length; i3++) {
7181
- const char = value[i3];
7182
- if (char === "-") {
7183
- if (allowNegative && i3 === 0 && !hasMinus) {
7184
- result += char;
7185
- hasMinus = true;
7186
- }
7187
- continue;
7188
- }
7189
- if (char === ".") {
7190
- if (i3 !== 0 && !hasDot && (i3 === 0 || result[i3 - 1] !== "-")) {
7191
- result += char;
7192
- hasDot = true;
7193
- }
7194
- continue;
7195
- }
7196
- if (/^\d$/.test(char)) {
7197
- const currentResult = hasMinus ? result.slice(1) : result;
7198
- if (currentResult === "0" && char !== "0" && !hasDot) {
7199
- result = hasMinus ? "-" : "";
7200
- }
7201
- result += char;
7202
- }
7203
- }
7204
- return result.slice(0, maxLength);
7205
- }
7206
- function formatIntegerInput(value, maxLength, config) {
7207
- let result = "";
7208
- let hasMinus = false;
7209
- const allowNegative = config.min !== null && config.min < 0;
7210
- for (let i3 = 0; i3 < value.length; i3++) {
7211
- const char = value[i3];
7212
- if (char === "-") {
7213
- if (allowNegative && i3 === 0 && !hasMinus) {
7214
- result += char;
7215
- hasMinus = true;
7216
- }
7217
- continue;
7218
- }
7219
- if (/^\d$/.test(char)) {
7220
- const currentResult = hasMinus ? result.slice(1) : result;
7221
- if (currentResult === "0" && char !== "0") {
7222
- result = hasMinus ? "-" : "";
7223
- }
7224
- result += char;
7225
- }
7226
- }
7227
- return result.slice(0, maxLength);
7228
- }
7229
- function formatRangeInput(value, config) {
7230
- if (config.int) {
7231
- let result2 = formatIntegerInput(value, config.maxLength || 50, config);
7232
- if (config.min === null && config.max === null) {
7233
- return result2;
7234
- }
7235
- if (result2 === "" || result2 === "-") {
7236
- return result2;
7237
- }
7238
- const numValue2 = parseInt(result2, 10);
7239
- if (isNaN(numValue2)) {
7240
- return "";
7241
- }
7242
- if (config.min !== null && numValue2 < config.min) {
7243
- return Math.ceil(config.min).toString();
7244
- }
7245
- if (config.max !== null && numValue2 > config.max) {
7246
- return Math.floor(config.max).toString();
7247
- }
7248
- return result2;
7249
- }
7250
- const allowNegative = config.min !== null && config.min < 0;
7251
- let result = formatNumberInput(value, config.maxLength || 50, allowNegative);
7252
- if (config.min === null && config.max === null) {
7253
- return result;
7254
- }
7255
- if (result === "" || result === "-" || result === ".") {
7256
- return result;
7257
- }
7258
- const numValue = parseFloat(result);
7259
- if (isNaN(numValue)) {
7260
- return "";
7261
- }
7262
- if (config.min !== null && numValue < config.min) {
7263
- return config.min.toString();
7264
- }
7265
- if (config.max !== null && numValue > config.max) {
7266
- return config.max.toString();
7267
- }
7268
- return result;
7269
- }
7270
- NsVideo.install = (app2) => {
7271
- app2.component(NsVideo.name, NsVideo);
7272
- try {
7273
- registerDirective(app2);
7274
- } catch (error) {
7275
- console.warn("组件库注册指令失败:", error);
7276
- }
7277
- };
7278
5175
  let Element$1 = class Element2 {
7279
5176
  constructor(tag, className = "") {
7280
5177
  if (typeof tag === "string") {
@@ -46879,6 +44776,13 @@ const _sfc_main$e = /* @__PURE__ */ defineComponent({
46879
44776
  };
46880
44777
  }
46881
44778
  });
44779
+ const _export_sfc = (sfc, props) => {
44780
+ const target = sfc.__vccOpts || sfc;
44781
+ for (const [key, val] of props) {
44782
+ target[key] = val;
44783
+ }
44784
+ return target;
44785
+ };
46882
44786
  const ExcelComp = /* @__PURE__ */ _export_sfc(_sfc_main$e, [["__scopeId", "data-v-1aba0d50"]]);
46883
44787
  var freeGlobal = typeof global == "object" && global && global.Object === Object && global;
46884
44788
  var freeSelf = typeof self == "object" && self && self.Object === Object && self;
@@ -47597,7 +45501,7 @@ const _sfc_main$c = /* @__PURE__ */ defineComponent({
47597
45501
  title: props.dialogTitle,
47598
45502
  // 任何组件添加 $emit('close') 时,会触发关闭弹出框事件
47599
45503
  dom: ExcelComp,
47600
- // 也可以通过异步方式:import("@/views/VideoDemo.vue") 和 () => import("@/views/VideoDemo.vue")
45504
+ // 也可以通过异步方式:import("@/views/xx.vue") 和 () => import("@/views/xx.vue")
47601
45505
  option: {
47602
45506
  // dom对应的自定义组件props属性
47603
45507
  ...attrs,
@@ -50234,9 +48138,9 @@ function keyBy(array, by) {
50234
48138
  }, {});
50235
48139
  }
50236
48140
  function blobToBase64(blob) {
50237
- return new Promise((resolve2, reject) => {
48141
+ return new Promise((resolve, reject) => {
50238
48142
  const reader = new FileReader();
50239
- reader.onloadend = () => resolve2(reader.result);
48143
+ reader.onloadend = () => resolve(reader.result);
50240
48144
  reader.onerror = () => reject();
50241
48145
  reader.readAsDataURL(blob);
50242
48146
  });
@@ -55539,6 +53443,302 @@ const _sfc_main$7 = /* @__PURE__ */ defineComponent({
55539
53443
  }
55540
53444
  });
55541
53445
  const NsFormTitle = /* @__PURE__ */ _export_sfc(_sfc_main$7, [["__scopeId", "data-v-a0ddcbf6"]]);
53446
+ function registerDirective(app2) {
53447
+ app2.directive("sline", {
53448
+ mounted(el2) {
53449
+ el2.style.whiteSpace = "nowrap";
53450
+ el2.style.overflow = "hidden";
53451
+ el2.style.textOverflow = "ellipsis";
53452
+ el2.style.display = "inline-block";
53453
+ el2.style.maxWidth = "100%";
53454
+ }
53455
+ });
53456
+ app2.directive("permission", {
53457
+ mounted(el2, binding) {
53458
+ var _a3, _b, _c2, _d, _e, _f;
53459
+ let btnsPermission = [];
53460
+ try {
53461
+ if (sessionStorage.getItem("btnsPermission")) {
53462
+ Array.isArray(JSON.parse(sessionStorage.getItem("btnsPermission"))) ? btnsPermission = JSON.parse(sessionStorage.getItem("btnsPermission")) : null;
53463
+ } else if (localStorage.getItem("btnsPermission")) {
53464
+ Array.isArray(JSON.parse(localStorage.getItem("btnsPermission"))) ? btnsPermission = JSON.parse(localStorage.getItem("btnsPermission")) : null;
53465
+ }
53466
+ } catch (e6) {
53467
+ btnsPermission = [];
53468
+ }
53469
+ if (btnsPermission.length === 0) {
53470
+ if (app2.config.globalProperties.$btnsPermission) {
53471
+ btnsPermission = app2.config.globalProperties.$btnsPermission;
53472
+ } else if (binding.instance && binding.instance.$.appContext.app.config.globalProperties.$btnsPermission) {
53473
+ btnsPermission = binding.instance.$.appContext.app.config.globalProperties.$btnsPermission;
53474
+ } else if (binding.instance && ((_a3 = binding.instance.$.provides) == null ? void 0 : _a3.btnsPermission)) {
53475
+ btnsPermission = binding.instance.$.provides.btnsPermission;
53476
+ } else if (binding.instance && ((_c2 = (_b = binding.instance.$.parent) == null ? void 0 : _b.provides) == null ? void 0 : _c2.btnsPermission)) {
53477
+ btnsPermission = binding.instance.$.parent.provides.btnsPermission;
53478
+ }
53479
+ }
53480
+ const selector = ((_d = binding.modifiers) == null ? void 0 : _d["class"]) ? "class" : ((_e = binding.modifiers) == null ? void 0 : _e["id"]) ? "id" : "id";
53481
+ const isDisplayNone = (_f = binding.modifiers) == null ? void 0 : _f["display"];
53482
+ if (selector === "id") {
53483
+ if (!(btnsPermission == null ? void 0 : btnsPermission.includes(el2.getAttribute(selector)))) {
53484
+ if (isDisplayNone) {
53485
+ el2.style.display = "none";
53486
+ } else {
53487
+ el2.style.visibility = "hidden";
53488
+ el2.style.pointerEvents = "none";
53489
+ }
53490
+ } else {
53491
+ el2.style.pointerEvents = "auto";
53492
+ }
53493
+ } else if (selector === "class") {
53494
+ if ((btnsPermission == null ? void 0 : btnsPermission.filter((item) => Array.from(el2.classList).includes(item)).length) === 0) {
53495
+ if (isDisplayNone) {
53496
+ el2.style.display = "none";
53497
+ } else {
53498
+ el2.style.visibility = "hidden";
53499
+ el2.style.pointerEvents = "none";
53500
+ }
53501
+ } else {
53502
+ el2.style.pointerEvents = "auto";
53503
+ }
53504
+ }
53505
+ }
53506
+ });
53507
+ app2.directive("length", {
53508
+ mounted(el2, binding) {
53509
+ var _a3, _b, _c2;
53510
+ const config = parseBindingValue(binding);
53511
+ let isComposing = false;
53512
+ const getInputElement = () => {
53513
+ return el2.tagName === "INPUT" ? el2 : el2.querySelector("input");
53514
+ };
53515
+ const handleCompositionStart = () => {
53516
+ isComposing = true;
53517
+ };
53518
+ const handleCompositionEnd = (e6) => {
53519
+ var _a4, _b2, _c3;
53520
+ isComposing = false;
53521
+ if (((_a4 = binding.modifiers) == null ? void 0 : _a4.number) || ((_b2 = binding.modifiers) == null ? void 0 : _b2.range) || ((_c3 = binding.modifiers) == null ? void 0 : _c3.regex)) {
53522
+ handleInput(e6);
53523
+ }
53524
+ };
53525
+ const handleInput = (e6) => {
53526
+ var _a4, _b2, _c3;
53527
+ const inputEl2 = e6.target;
53528
+ if (isComposing) {
53529
+ return;
53530
+ }
53531
+ const oldValue = inputEl2.value;
53532
+ let newValue = oldValue;
53533
+ if ((_a4 = binding.modifiers) == null ? void 0 : _a4.range) {
53534
+ newValue = formatRangeInput(oldValue, config);
53535
+ } else if ((_b2 = binding.modifiers) == null ? void 0 : _b2.number) {
53536
+ newValue = formatNumberInput(oldValue, config.maxLength);
53537
+ } else if (((_c3 = binding.modifiers) == null ? void 0 : _c3.regex) && config.pattern) {
53538
+ newValue = formatRegexInput(oldValue, config.maxLength, config.pattern);
53539
+ } else {
53540
+ newValue = oldValue.slice(0, config.maxLength);
53541
+ }
53542
+ if (newValue !== oldValue) {
53543
+ inputEl2.value = newValue;
53544
+ const event = new Event("input", { bubbles: true });
53545
+ inputEl2.dispatchEvent(event);
53546
+ }
53547
+ };
53548
+ const inputEl = getInputElement();
53549
+ if (inputEl) {
53550
+ inputEl.addEventListener("compositionstart", handleCompositionStart);
53551
+ inputEl.addEventListener("compositionend", handleCompositionEnd);
53552
+ inputEl.addEventListener("input", handleInput);
53553
+ if (inputEl.value) {
53554
+ if ((_a3 = binding.modifiers) == null ? void 0 : _a3.range) {
53555
+ inputEl.value = formatRangeInput(inputEl.value, config);
53556
+ } else if ((_b = binding.modifiers) == null ? void 0 : _b.number) {
53557
+ inputEl.value = formatNumberInput(inputEl.value, config.maxLength);
53558
+ } else if (((_c2 = binding.modifiers) == null ? void 0 : _c2.regex) && config.pattern) {
53559
+ inputEl.value = formatRegexInput(inputEl.value, config.maxLength, config.pattern);
53560
+ } else {
53561
+ inputEl.value = inputEl.value.slice(0, config.maxLength);
53562
+ }
53563
+ }
53564
+ }
53565
+ el2._lengthDirectiveHandlers = {
53566
+ compositionstart: handleCompositionStart,
53567
+ compositionend: handleCompositionEnd,
53568
+ input: handleInput,
53569
+ inputElement: inputEl
53570
+ };
53571
+ },
53572
+ unmounted(el2) {
53573
+ const handlers = el2._lengthDirectiveHandlers;
53574
+ if (handlers && handlers.inputElement) {
53575
+ handlers.inputElement.removeEventListener("compositionstart", handlers.compositionstart);
53576
+ handlers.inputElement.removeEventListener("compositionend", handlers.compositionend);
53577
+ handlers.inputElement.removeEventListener("input", handlers.input);
53578
+ delete el2._lengthDirectiveHandlers;
53579
+ }
53580
+ },
53581
+ updated(el2, binding) {
53582
+ updatedCheck(el2, binding);
53583
+ }
53584
+ });
53585
+ app2.directive("event-unuse", {
53586
+ mounted(el2) {
53587
+ el2.style.pointerEvents = "none";
53588
+ }
53589
+ });
53590
+ app2.directive("event-use", {
53591
+ mounted(el2) {
53592
+ el2.style.pointerEvents = "auto";
53593
+ }
53594
+ });
53595
+ }
53596
+ function parseBindingValue(binding) {
53597
+ const defaultConfig = { maxLength: 50, pattern: null, min: null, max: null, int: false };
53598
+ if (!binding.value) {
53599
+ return defaultConfig;
53600
+ }
53601
+ if (typeof binding.value === "number") {
53602
+ return { ...defaultConfig, maxLength: binding.value };
53603
+ }
53604
+ if (typeof binding.value === "object") {
53605
+ return {
53606
+ maxLength: binding.value.maxLength || defaultConfig.maxLength,
53607
+ pattern: binding.value.pattern || null,
53608
+ min: binding.value.min || null,
53609
+ max: binding.value.max || null,
53610
+ int: binding.value.int || false
53611
+ };
53612
+ }
53613
+ return defaultConfig;
53614
+ }
53615
+ function formatRegexInput(value, maxLength, pattern) {
53616
+ let result = "";
53617
+ for (let i3 = 0; i3 < value.length && result.length < maxLength; i3++) {
53618
+ const char = value[i3];
53619
+ const testValue = result + char;
53620
+ if (pattern.test(testValue)) {
53621
+ result += char;
53622
+ }
53623
+ }
53624
+ return result;
53625
+ }
53626
+ function updatedCheck(el2, binding) {
53627
+ const config = parseBindingValue(binding);
53628
+ const els = el2.querySelectorAll("input, textarea");
53629
+ els.forEach((element) => {
53630
+ var _a3, _b, _c2;
53631
+ if (element == null ? void 0 : element.value) {
53632
+ if ((_a3 = binding.modifiers) == null ? void 0 : _a3.range) {
53633
+ element.value = formatRangeInput(element.value, config);
53634
+ element.dispatchEvent(new Event("input"));
53635
+ } else if ((_b = binding.modifiers) == null ? void 0 : _b.number) {
53636
+ element.value = formatNumberInput(element.value, config.maxLength);
53637
+ element.dispatchEvent(new Event("input"));
53638
+ } else if (((_c2 = binding.modifiers) == null ? void 0 : _c2.regex) && config.pattern) {
53639
+ element.value = formatRegexInput(element.value, config.maxLength, config.pattern);
53640
+ element.dispatchEvent(new Event("input"));
53641
+ } else {
53642
+ element.value = element.value.slice(0, config.maxLength);
53643
+ element.dispatchEvent(new Event("input"));
53644
+ }
53645
+ }
53646
+ });
53647
+ }
53648
+ function formatNumberInput(value, maxLength, allowNegative = true) {
53649
+ let result = "";
53650
+ let hasMinus = false;
53651
+ let hasDot = false;
53652
+ for (let i3 = 0; i3 < value.length; i3++) {
53653
+ const char = value[i3];
53654
+ if (char === "-") {
53655
+ if (allowNegative && i3 === 0 && !hasMinus) {
53656
+ result += char;
53657
+ hasMinus = true;
53658
+ }
53659
+ continue;
53660
+ }
53661
+ if (char === ".") {
53662
+ if (i3 !== 0 && !hasDot && (i3 === 0 || result[i3 - 1] !== "-")) {
53663
+ result += char;
53664
+ hasDot = true;
53665
+ }
53666
+ continue;
53667
+ }
53668
+ if (/^\d$/.test(char)) {
53669
+ const currentResult = hasMinus ? result.slice(1) : result;
53670
+ if (currentResult === "0" && char !== "0" && !hasDot) {
53671
+ result = hasMinus ? "-" : "";
53672
+ }
53673
+ result += char;
53674
+ }
53675
+ }
53676
+ return result.slice(0, maxLength);
53677
+ }
53678
+ function formatIntegerInput(value, maxLength, config) {
53679
+ let result = "";
53680
+ let hasMinus = false;
53681
+ const allowNegative = config.min !== null && config.min < 0;
53682
+ for (let i3 = 0; i3 < value.length; i3++) {
53683
+ const char = value[i3];
53684
+ if (char === "-") {
53685
+ if (allowNegative && i3 === 0 && !hasMinus) {
53686
+ result += char;
53687
+ hasMinus = true;
53688
+ }
53689
+ continue;
53690
+ }
53691
+ if (/^\d$/.test(char)) {
53692
+ const currentResult = hasMinus ? result.slice(1) : result;
53693
+ if (currentResult === "0" && char !== "0") {
53694
+ result = hasMinus ? "-" : "";
53695
+ }
53696
+ result += char;
53697
+ }
53698
+ }
53699
+ return result.slice(0, maxLength);
53700
+ }
53701
+ function formatRangeInput(value, config) {
53702
+ if (config.int) {
53703
+ let result2 = formatIntegerInput(value, config.maxLength || 50, config);
53704
+ if (config.min === null && config.max === null) {
53705
+ return result2;
53706
+ }
53707
+ if (result2 === "" || result2 === "-") {
53708
+ return result2;
53709
+ }
53710
+ const numValue2 = parseInt(result2, 10);
53711
+ if (isNaN(numValue2)) {
53712
+ return "";
53713
+ }
53714
+ if (config.min !== null && numValue2 < config.min) {
53715
+ return Math.ceil(config.min).toString();
53716
+ }
53717
+ if (config.max !== null && numValue2 > config.max) {
53718
+ return Math.floor(config.max).toString();
53719
+ }
53720
+ return result2;
53721
+ }
53722
+ const allowNegative = config.min !== null && config.min < 0;
53723
+ let result = formatNumberInput(value, config.maxLength || 50, allowNegative);
53724
+ if (config.min === null && config.max === null) {
53725
+ return result;
53726
+ }
53727
+ if (result === "" || result === "-" || result === ".") {
53728
+ return result;
53729
+ }
53730
+ const numValue = parseFloat(result);
53731
+ if (isNaN(numValue)) {
53732
+ return "";
53733
+ }
53734
+ if (config.min !== null && numValue < config.min) {
53735
+ return config.min.toString();
53736
+ }
53737
+ if (config.max !== null && numValue > config.max) {
53738
+ return config.max.toString();
53739
+ }
53740
+ return result;
53741
+ }
55542
53742
  var type;
55543
53743
  var hasRequiredType;
55544
53744
  function requireType() {
@@ -79289,10 +77489,12 @@ const _sfc_main = {
79289
77489
  }
79290
77490
  );
79291
77491
  const initSearchAndLoad = () => {
79292
- if (searchRef.value && props.showSearch) {
79293
- const initialFormData = searchRef.value.getFormData();
79294
- emit("search", initialFormData);
79295
- }
77492
+ nextTick(() => {
77493
+ if (searchRef.value && props.showSearch) {
77494
+ const initialFormData = searchRef.value.getFormData();
77495
+ emit("search", initialFormData);
77496
+ }
77497
+ });
79296
77498
  };
79297
77499
  __expose({
79298
77500
  searchRef,
@@ -79527,7 +77729,7 @@ const _sfc_main = {
79527
77729
  };
79528
77730
  }
79529
77731
  };
79530
- const NsTableContainer = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-71f8c8d5"]]);
77732
+ const NsTableContainer = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-3f45ef27"]]);
79531
77733
  NsTableContainer.install = (app2) => {
79532
77734
  app2.component("NsTableContainer", NsTableContainer);
79533
77735
  };
@@ -79544,7 +77746,7 @@ function detectBrowser() {
79544
77746
  const glob = typeof global !== "undefined" ? global : typeof window !== "undefined" ? window : typeof WorkerGlobalScope !== "undefined" ? self : {};
79545
77747
  const Konva$2 = {
79546
77748
  _global: glob,
79547
- version: "10.2.0",
77749
+ version: "10.2.3",
79548
77750
  isBrowser: detectBrowser(),
79549
77751
  isUnminified: /param/.test((function(param) {
79550
77752
  }).toString()),
@@ -81143,6 +79345,9 @@ const DD = {
81143
79345
  nodesToFireEvents.push(node);
81144
79346
  });
81145
79347
  nodesToFireEvents.forEach((node) => {
79348
+ if (!node.getStage()) {
79349
+ return;
79350
+ }
81146
79351
  node.fire("dragmove", {
81147
79352
  type: "dragmove",
81148
79353
  target: node,
@@ -81771,12 +79976,15 @@ let Node$1 = class Node2 {
81771
79976
  this._filterUpToDate = true;
81772
79977
  return filterCanvas;
81773
79978
  }
81774
- on(evtStr, handler) {
79979
+ on(...args) {
79980
+ const evtStr = args[0];
79981
+ const selectorOrHandler = args[1];
79982
+ args[2];
81775
79983
  if (this._cache) {
81776
79984
  this._cache.delete(ALL_LISTENERS);
81777
79985
  }
81778
- if (arguments.length === 3) {
81779
- return this._delegate.apply(this, arguments);
79986
+ if (args.length === 3) {
79987
+ return this._delegate.apply(this, args);
81780
79988
  }
81781
79989
  const events = evtStr.split(SPACE$1);
81782
79990
  for (let n = 0; n < events.length; n++) {
@@ -81787,7 +79995,7 @@ let Node$1 = class Node2 {
81787
79995
  if (!this.eventListeners[baseEvent]) {
81788
79996
  this.eventListeners[baseEvent] = [];
81789
79997
  }
81790
- this.eventListeners[baseEvent].push({ name, handler });
79998
+ this.eventListeners[baseEvent].push({ name, handler: selectorOrHandler });
81791
79999
  }
81792
80000
  return this;
81793
80001
  }
@@ -81845,12 +80053,18 @@ let Node$1 = class Node2 {
81845
80053
  handler.call(targets[i3], evt);
81846
80054
  }
81847
80055
  });
80056
+ return this;
81848
80057
  }
81849
80058
  remove() {
81850
80059
  if (this.isDragging()) {
81851
80060
  this.stopDrag();
81852
80061
  }
81853
80062
  DD._dragElements.delete(this._id);
80063
+ DD._dragElements.forEach((elem, key) => {
80064
+ if (this.isAncestorOf(elem.node)) {
80065
+ DD._dragElements.delete(key);
80066
+ }
80067
+ });
81854
80068
  this._remove();
81855
80069
  return this;
81856
80070
  }
@@ -82472,13 +80686,13 @@ let Node$1 = class Node2 {
82472
80686
  return url;
82473
80687
  }
82474
80688
  toImage(config) {
82475
- return new Promise((resolve2, reject) => {
80689
+ return new Promise((resolve, reject) => {
82476
80690
  try {
82477
80691
  const callback = config === null || config === void 0 ? void 0 : config.callback;
82478
80692
  if (callback)
82479
80693
  delete config.callback;
82480
80694
  Util._urlToImage(this.toDataURL(config), function(img) {
82481
- resolve2(img);
80695
+ resolve(img);
82482
80696
  callback === null || callback === void 0 ? void 0 : callback(img);
82483
80697
  });
82484
80698
  } catch (err) {
@@ -82487,13 +80701,13 @@ let Node$1 = class Node2 {
82487
80701
  });
82488
80702
  }
82489
80703
  toBlob(config) {
82490
- return new Promise((resolve2, reject) => {
80704
+ return new Promise((resolve, reject) => {
82491
80705
  try {
82492
80706
  const callback = config === null || config === void 0 ? void 0 : config.callback;
82493
80707
  if (callback)
82494
80708
  delete config.callback;
82495
80709
  this.toCanvas(config).toBlob((blob) => {
82496
- resolve2(blob);
80710
+ resolve(blob);
82497
80711
  callback === null || callback === void 0 ? void 0 : callback(blob);
82498
80712
  }, config === null || config === void 0 ? void 0 : config.mimeType, config === null || config === void 0 ? void 0 : config.quality);
82499
80713
  } catch (err) {
@@ -82698,7 +80912,8 @@ let Node$1 = class Node2 {
82698
80912
  y: pos.y - ap.y
82699
80913
  },
82700
80914
  dragStatus: "ready",
82701
- pointerId
80915
+ pointerId,
80916
+ startEvent: evt
82702
80917
  });
82703
80918
  }
82704
80919
  startDrag(evt, bubbleEvent = true) {
@@ -82710,7 +80925,7 @@ let Node$1 = class Node2 {
82710
80925
  this.fire("dragstart", {
82711
80926
  type: "dragstart",
82712
80927
  target: this,
82713
- evt: evt && evt.evt
80928
+ evt: elem.startEvent && elem.startEvent.evt || evt && evt.evt
82714
80929
  }, bubbleEvent);
82715
80930
  }
82716
80931
  _setDragPosition(evt, elem) {
@@ -82841,7 +81056,7 @@ Node$1.protoListenerMap = /* @__PURE__ */ new Map();
82841
81056
  Node$1.prototype.nodeType = "Node";
82842
81057
  Node$1.prototype._attrsAffectingSize = [];
82843
81058
  Node$1.prototype.eventListeners = {};
82844
- Node$1.prototype.on.call(Node$1.prototype, TRANSFORM_CHANGE_STR$1, function() {
81059
+ Node$1.prototype.on(TRANSFORM_CHANGE_STR$1, function() {
82845
81060
  if (this._batchingTransformChange) {
82846
81061
  this._needClearTransformCache = true;
82847
81062
  return;
@@ -82849,13 +81064,13 @@ Node$1.prototype.on.call(Node$1.prototype, TRANSFORM_CHANGE_STR$1, function() {
82849
81064
  this._clearCache(TRANSFORM);
82850
81065
  this._clearSelfAndDescendantCache(ABSOLUTE_TRANSFORM);
82851
81066
  });
82852
- Node$1.prototype.on.call(Node$1.prototype, "visibleChange.konva", function() {
81067
+ Node$1.prototype.on("visibleChange.konva", function() {
82853
81068
  this._clearSelfAndDescendantCache(VISIBLE);
82854
81069
  });
82855
- Node$1.prototype.on.call(Node$1.prototype, "listeningChange.konva", function() {
81070
+ Node$1.prototype.on("listeningChange.konva", function() {
82856
81071
  this._clearSelfAndDescendantCache(LISTENING);
82857
81072
  });
82858
- Node$1.prototype.on.call(Node$1.prototype, "opacityChange.konva", function() {
81073
+ Node$1.prototype.on("opacityChange.konva", function() {
82859
81074
  this._clearSelfAndDescendantCache(ABSOLUTE_OPACITY);
82860
81075
  });
82861
81076
  const addGetterSetter = Factory.addGetterSetter;
@@ -84349,11 +82564,11 @@ Shape.prototype._centroid = false;
84349
82564
  Shape.prototype.nodeType = "Shape";
84350
82565
  _registerNode(Shape);
84351
82566
  Shape.prototype.eventListeners = {};
84352
- Shape.prototype.on.call(Shape.prototype, "shadowColorChange.konva shadowBlurChange.konva shadowOffsetChange.konva shadowOpacityChange.konva shadowEnabledChange.konva", _clearHasShadowCache);
84353
- Shape.prototype.on.call(Shape.prototype, "shadowColorChange.konva shadowOpacityChange.konva shadowEnabledChange.konva", _clearGetShadowRGBACache);
84354
- Shape.prototype.on.call(Shape.prototype, "fillPriorityChange.konva fillPatternImageChange.konva fillPatternRepeatChange.konva fillPatternScaleXChange.konva fillPatternScaleYChange.konva fillPatternOffsetXChange.konva fillPatternOffsetYChange.konva fillPatternXChange.konva fillPatternYChange.konva fillPatternRotationChange.konva", _clearFillPatternCache);
84355
- Shape.prototype.on.call(Shape.prototype, "fillPriorityChange.konva fillLinearGradientColorStopsChange.konva fillLinearGradientStartPointXChange.konva fillLinearGradientStartPointYChange.konva fillLinearGradientEndPointXChange.konva fillLinearGradientEndPointYChange.konva", _clearLinearGradientCache);
84356
- Shape.prototype.on.call(Shape.prototype, "fillPriorityChange.konva fillRadialGradientColorStopsChange.konva fillRadialGradientStartPointXChange.konva fillRadialGradientStartPointYChange.konva fillRadialGradientEndPointXChange.konva fillRadialGradientEndPointYChange.konva fillRadialGradientStartRadiusChange.konva fillRadialGradientEndRadiusChange.konva", _clearRadialGradientCache);
82567
+ Shape.prototype.on("shadowColorChange.konva shadowBlurChange.konva shadowOffsetChange.konva shadowOpacityChange.konva shadowEnabledChange.konva", _clearHasShadowCache);
82568
+ Shape.prototype.on("shadowColorChange.konva shadowOpacityChange.konva shadowEnabledChange.konva", _clearGetShadowRGBACache);
82569
+ Shape.prototype.on("fillPriorityChange.konva fillPatternImageChange.konva fillPatternRepeatChange.konva fillPatternScaleXChange.konva fillPatternScaleYChange.konva fillPatternOffsetXChange.konva fillPatternOffsetYChange.konva fillPatternXChange.konva fillPatternYChange.konva fillPatternRotationChange.konva", _clearFillPatternCache);
82570
+ Shape.prototype.on("fillPriorityChange.konva fillLinearGradientColorStopsChange.konva fillLinearGradientStartPointXChange.konva fillLinearGradientStartPointYChange.konva fillLinearGradientEndPointXChange.konva fillLinearGradientEndPointYChange.konva", _clearLinearGradientCache);
82571
+ Shape.prototype.on("fillPriorityChange.konva fillRadialGradientColorStopsChange.konva fillRadialGradientStartPointXChange.konva fillRadialGradientStartPointYChange.konva fillRadialGradientEndPointXChange.konva fillRadialGradientEndPointYChange.konva fillRadialGradientStartRadiusChange.konva fillRadialGradientEndRadiusChange.konva", _clearRadialGradientCache);
84357
82572
  Factory.addGetterSetter(Shape, "stroke", void 0, getStringOrGradientValidator());
84358
82573
  Factory.addGetterSetter(Shape, "strokeWidth", 2, getNumberValidator());
84359
82574
  Factory.addGetterSetter(Shape, "fillAfterStrokeEnabled", false);
@@ -88293,7 +86508,7 @@ class TextPath extends Shape {
88293
86508
  });
88294
86509
  width += chars[i3].width;
88295
86510
  }
88296
- const { height } = this._getTextSize(this.attrs.text);
86511
+ const { width: fullTextWidth, height } = this._getTextSize(this.attrs.text);
88297
86512
  this.textWidth = width;
88298
86513
  this.textHeight = height;
88299
86514
  this.glyphInfo = [];
@@ -88303,6 +86518,7 @@ class TextPath extends Shape {
88303
86518
  const letterSpacing = this.letterSpacing();
88304
86519
  const align = this.align();
88305
86520
  const kerningFunc = this.kerningFunc();
86521
+ const kerningAdjustment = Math.max(0, width - fullTextWidth);
88306
86522
  const textWidth = Math.max(this.textWidth + ((this.attrs.text || "").length - 1) * letterSpacing, 0);
88307
86523
  let offset = 0;
88308
86524
  if (align === "center") {
@@ -88322,7 +86538,8 @@ class TextPath extends Shape {
88322
86538
  const numberOfSpaces = this.text().split(" ").length - 1;
88323
86539
  glyphWidth += (this.pathLength - textWidth) / numberOfSpaces;
88324
86540
  }
88325
- const charEndPoint = this._getPointAtLength(offsetToGlyph + glyphWidth);
86541
+ const charEndLength = offsetToGlyph + glyphWidth;
86542
+ const charEndPoint = this._getPointAtLength(charEndLength > this.pathLength && charEndLength - this.pathLength <= kerningAdjustment ? this.pathLength : charEndLength);
88326
86543
  if (!charEndPoint) {
88327
86544
  return;
88328
86545
  }
@@ -88532,6 +86749,7 @@ class Transformer extends Group {
88532
86749
  super(config);
88533
86750
  this._movingAnchorName = null;
88534
86751
  this._transforming = false;
86752
+ this._elementsCreated = false;
88535
86753
  this._createElements();
88536
86754
  this._handleMouseMove = this._handleMouseMove.bind(this);
88537
86755
  this._handleMouseUp = this._handleMouseUp.bind(this);
@@ -88747,6 +86965,7 @@ class Transformer extends Group {
88747
86965
  this._createAnchor(name);
88748
86966
  });
88749
86967
  this._createAnchor("rotater");
86968
+ this._elementsCreated = true;
88750
86969
  }
88751
86970
  _createAnchor(name) {
88752
86971
  const anchor = new Rect({
@@ -89324,6 +87543,13 @@ class Transformer extends Group {
89324
87543
  this._removeEvents();
89325
87544
  return this;
89326
87545
  }
87546
+ add(...children) {
87547
+ if (this._elementsCreated) {
87548
+ Util.error("You cannot add external nodes to the Transformer. Use tr.nodes([node]) instead.");
87549
+ return this;
87550
+ }
87551
+ return super.add(...children);
87552
+ }
89327
87553
  toObject() {
89328
87554
  return Node$1.prototype.toObject.call(this);
89329
87555
  }
@@ -91196,7 +89422,7 @@ function debounce(fn2, delay) {
91196
89422
  }
91197
89423
  async function loadAccess(url, tag = null, isModel = false) {
91198
89424
  const type2 = url.endsWith(".js") ? "js" : "css";
91199
- return new Promise((resolve2) => {
89425
+ return new Promise((resolve) => {
91200
89426
  const htmlEle = document.createElement(type2 == "js" ? "script" : "link");
91201
89427
  htmlEle.setAttribute("data-dynamic", "true");
91202
89428
  if (tag) {
@@ -91215,11 +89441,11 @@ async function loadAccess(url, tag = null, isModel = false) {
91215
89441
  htmlEle.rel = "stylesheet";
91216
89442
  }
91217
89443
  htmlEle.onload = () => {
91218
- resolve2(true);
89444
+ resolve(true);
91219
89445
  };
91220
89446
  htmlEle.onerror = () => {
91221
89447
  console.error(`加载失败: ${url}`);
91222
- resolve2(false);
89448
+ resolve(false);
91223
89449
  };
91224
89450
  document.head.appendChild(htmlEle);
91225
89451
  });
@@ -93999,7 +92225,6 @@ async function getEncryptSm2(publicKey, originalArr = [], isAdd04 = false, ciphe
93999
92225
  return encryptArrs;
94000
92226
  }
94001
92227
  const components = {
94002
- NsVideo,
94003
92228
  NsExcel: _sfc_main$c,
94004
92229
  NsPdf,
94005
92230
  NsWord,
@@ -94069,7 +92294,6 @@ export {
94069
92294
  NsSearch,
94070
92295
  NsTable,
94071
92296
  NsTableContainer,
94072
- NsVideo,
94073
92297
  NsWord,
94074
92298
  autoScaleInit,
94075
92299
  closeAllNsDialog,