inl-ui 0.1.38 → 0.1.40

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.
@@ -9153,7 +9153,7 @@ const props$6 = {
9153
9153
  // },
9154
9154
  btns: {
9155
9155
  type: Array,
9156
- default: ["fill", "look", "stream", "direction", "fullScreen", "close"]
9156
+ default: ["fill", "look", "stream", "magnify", "direction", "fullScreen", "close"]
9157
9157
  },
9158
9158
  alarm: {
9159
9159
  default: false,
@@ -9176,6 +9176,7 @@ const VideoBoxV2 = vue.defineComponent({
9176
9176
  const streamHistory = vue.ref("");
9177
9177
  const streams = vue.ref([]);
9178
9178
  const showInfo = vue.ref(true);
9179
+ const magnifyBtn = vue.ref(false);
9179
9180
  const videoBtns = [[{
9180
9181
  text: "lup",
9181
9182
  signal: 25
@@ -9284,6 +9285,74 @@ const VideoBoxV2 = vue.defineComponent({
9284
9285
  let timeout;
9285
9286
  vue.ref(true);
9286
9287
  vue.onBeforeUnmount(() => {});
9288
+ const resetZoom = () => {
9289
+ const chooseFieldDom = document.getElementById("chooseField_" + uuid.value);
9290
+ chooseFieldDom?.remove();
9291
+ const dom = document.getElementById("videoPlayer_" + uuid.value);
9292
+ dom.style.left = "0px";
9293
+ dom.style.top = "0px";
9294
+ dom.style.width = "100%";
9295
+ dom.style.height = "100%";
9296
+ };
9297
+ let boxDom;
9298
+ let playerDom;
9299
+ let newDiv;
9300
+ let begin = {
9301
+ left: 0,
9302
+ top: 0
9303
+ };
9304
+ let mousedownEvent;
9305
+ const mousemoveFun = mousemoveEvent => {
9306
+ newDiv.style.width = Math.abs(mousemoveEvent.offsetX - mousedownEvent.offsetX) - 3 + "px";
9307
+ newDiv.style.height = Math.abs(mousemoveEvent.offsetY - mousedownEvent.offsetY) - 3 + "px";
9308
+ newDiv.style.left = Math.min(mousedownEvent.offsetX, mousemoveEvent.offsetX) + begin.left + "px";
9309
+ newDiv.style.top = Math.min(mousedownEvent.offsetY, mousemoveEvent.offsetY) + begin.top + "px";
9310
+ };
9311
+ const mousedownFun = e => {
9312
+ mousedownEvent = e;
9313
+ begin.left = Number(playerDom.style.left.split("px")[0]);
9314
+ begin.top = Number(playerDom.style.top.split("px")[0]);
9315
+ newDiv = document.createElement("div");
9316
+ newDiv.id = "tempDiv";
9317
+ newDiv.style.left = mousedownEvent.offsetX + begin.left + "px";
9318
+ newDiv.style.top = mousedownEvent.offsetY + begin.top + "px";
9319
+ boxDom.appendChild(newDiv);
9320
+ playerDom?.addEventListener("mousemove", mousemoveFun);
9321
+ };
9322
+ const mouseupFun = mouseupEvent => {
9323
+ playerDom?.removeEventListener("mousemove", mousemoveFun);
9324
+ newDiv.remove();
9325
+ const scaleX = Math.abs(mouseupEvent.pageX - mousedownEvent.pageX) / boxDom.offsetWidth;
9326
+ const scaleY = Math.abs(mouseupEvent.pageY - mousedownEvent.pageY) / boxDom.offsetHeight;
9327
+ const playerLeft = Math.min(mousedownEvent.offsetX, mouseupEvent.offsetX) * -1 / scaleX;
9328
+ const playerTop = Math.min(mousedownEvent.offsetY, mouseupEvent.offsetY) * -1 / scaleY;
9329
+ const playerWidth = playerDom.offsetWidth / scaleX;
9330
+ const playerHeight = playerDom.offsetHeight / scaleY;
9331
+ playerDom.style.left = playerLeft + "px";
9332
+ playerDom.style.top = playerTop + "px";
9333
+ playerDom.style.width = playerWidth + "px";
9334
+ playerDom.style.height = playerHeight + "px";
9335
+ const chooseFieldDom = document.getElementById("chooseField_" + uuid.value);
9336
+ chooseFieldDom.style.width = chooseFieldDom.offsetWidth * scaleX + "px";
9337
+ chooseFieldDom.style.height = chooseFieldDom.offsetHeight * scaleY + "px";
9338
+ const thumbnailDom = document.getElementById("thumbnail_" + uuid.value);
9339
+ chooseFieldDom.style.left = thumbnailDom.offsetWidth * -1 * playerLeft / playerWidth + "px";
9340
+ chooseFieldDom.style.top = thumbnailDom.offsetHeight * -1 * playerTop / playerHeight + "px";
9341
+ };
9342
+ const setZoom = async () => {
9343
+ boxDom = document.getElementById("videoBox_" + uuid.value);
9344
+ playerDom = document.getElementById("videoPlayer_" + uuid.value);
9345
+ if (magnifyBtn.value) {
9346
+ magnifyBtn.value = !magnifyBtn.value;
9347
+ playerDom?.removeEventListener("mousedown", mousedownFun);
9348
+ playerDom?.removeEventListener("mouseup", mouseupFun);
9349
+ resetZoom();
9350
+ return;
9351
+ }
9352
+ magnifyBtn.value = !magnifyBtn.value;
9353
+ playerDom?.addEventListener("mousedown", mousedownFun);
9354
+ playerDom?.addEventListener("mouseup", mouseupFun);
9355
+ };
9287
9356
  const fill = vue.ref("fill");
9288
9357
  vue.watch(() => _prop.camera, val => {
9289
9358
  if (val && Object.keys(val).length != 0) {
@@ -9325,7 +9394,24 @@ const VideoBoxV2 = vue.defineComponent({
9325
9394
  streamType: streamHistory.value || camera.value?.streamType
9326
9395
  };
9327
9396
  }
9328
- }, null) : "", showInfo.value ? vue.createVNode("div", {
9397
+ }, null) : "", magnifyBtn.value ? vue.createVNode("div", {
9398
+ "class": "thumbnail",
9399
+ "id": "thumbnail_" + uuid.value
9400
+ }, [vue.createVNode(VideoPlayerV2, {
9401
+ "ref": player,
9402
+ "domId": UUID(),
9403
+ "camera": camera.value,
9404
+ "cameraConfig": cameraConfig.value,
9405
+ "fill": fill.value,
9406
+ "onChangeStream": () => {
9407
+ cameraConfig.value = {
9408
+ streamType: streamHistory.value || camera.value?.streamType
9409
+ };
9410
+ }
9411
+ }, null), vue.createVNode("div", {
9412
+ "class": "chooseField",
9413
+ "id": "chooseField_" + uuid.value
9414
+ }, null)]) : "", showInfo.value ? vue.createVNode("div", {
9329
9415
  "class": "selectFields"
9330
9416
  }, [[0, 1, 2, 3, 4, 5].map(index => {
9331
9417
  let info = {};
@@ -9387,6 +9473,14 @@ const VideoBoxV2 = vue.defineComponent({
9387
9473
  "src": "/micro-assets/inl/video/stream.png"
9388
9474
  }, null)]
9389
9475
  });
9476
+ case "magnify":
9477
+ return vue.createVNode("img", {
9478
+ "title": "\u653E\u5927",
9479
+ "onClick": e => {
9480
+ setZoom();
9481
+ },
9482
+ "src": "/micro-assets/inl/video/controls/magnify.svg"
9483
+ }, null);
9390
9484
  case "direction":
9391
9485
  return vue.createVNode(vue.resolveComponent("a-popover"), {
9392
9486
  "title": "\u63A7\u5236\u5668",
@@ -9142,7 +9142,7 @@ const props$6 = {
9142
9142
  // },
9143
9143
  btns: {
9144
9144
  type: Array,
9145
- default: ["fill", "look", "stream", "direction", "fullScreen", "close"]
9145
+ default: ["fill", "look", "stream", "magnify", "direction", "fullScreen", "close"]
9146
9146
  },
9147
9147
  alarm: {
9148
9148
  default: false,
@@ -9165,6 +9165,7 @@ const VideoBoxV2 = defineComponent({
9165
9165
  const streamHistory = ref("");
9166
9166
  const streams = ref([]);
9167
9167
  const showInfo = ref(true);
9168
+ const magnifyBtn = ref(false);
9168
9169
  const videoBtns = [[{
9169
9170
  text: "lup",
9170
9171
  signal: 25
@@ -9273,6 +9274,74 @@ const VideoBoxV2 = defineComponent({
9273
9274
  let timeout;
9274
9275
  ref(true);
9275
9276
  onBeforeUnmount(() => {});
9277
+ const resetZoom = () => {
9278
+ const chooseFieldDom = document.getElementById("chooseField_" + uuid.value);
9279
+ chooseFieldDom?.remove();
9280
+ const dom = document.getElementById("videoPlayer_" + uuid.value);
9281
+ dom.style.left = "0px";
9282
+ dom.style.top = "0px";
9283
+ dom.style.width = "100%";
9284
+ dom.style.height = "100%";
9285
+ };
9286
+ let boxDom;
9287
+ let playerDom;
9288
+ let newDiv;
9289
+ let begin = {
9290
+ left: 0,
9291
+ top: 0
9292
+ };
9293
+ let mousedownEvent;
9294
+ const mousemoveFun = mousemoveEvent => {
9295
+ newDiv.style.width = Math.abs(mousemoveEvent.offsetX - mousedownEvent.offsetX) - 3 + "px";
9296
+ newDiv.style.height = Math.abs(mousemoveEvent.offsetY - mousedownEvent.offsetY) - 3 + "px";
9297
+ newDiv.style.left = Math.min(mousedownEvent.offsetX, mousemoveEvent.offsetX) + begin.left + "px";
9298
+ newDiv.style.top = Math.min(mousedownEvent.offsetY, mousemoveEvent.offsetY) + begin.top + "px";
9299
+ };
9300
+ const mousedownFun = e => {
9301
+ mousedownEvent = e;
9302
+ begin.left = Number(playerDom.style.left.split("px")[0]);
9303
+ begin.top = Number(playerDom.style.top.split("px")[0]);
9304
+ newDiv = document.createElement("div");
9305
+ newDiv.id = "tempDiv";
9306
+ newDiv.style.left = mousedownEvent.offsetX + begin.left + "px";
9307
+ newDiv.style.top = mousedownEvent.offsetY + begin.top + "px";
9308
+ boxDom.appendChild(newDiv);
9309
+ playerDom?.addEventListener("mousemove", mousemoveFun);
9310
+ };
9311
+ const mouseupFun = mouseupEvent => {
9312
+ playerDom?.removeEventListener("mousemove", mousemoveFun);
9313
+ newDiv.remove();
9314
+ const scaleX = Math.abs(mouseupEvent.pageX - mousedownEvent.pageX) / boxDom.offsetWidth;
9315
+ const scaleY = Math.abs(mouseupEvent.pageY - mousedownEvent.pageY) / boxDom.offsetHeight;
9316
+ const playerLeft = Math.min(mousedownEvent.offsetX, mouseupEvent.offsetX) * -1 / scaleX;
9317
+ const playerTop = Math.min(mousedownEvent.offsetY, mouseupEvent.offsetY) * -1 / scaleY;
9318
+ const playerWidth = playerDom.offsetWidth / scaleX;
9319
+ const playerHeight = playerDom.offsetHeight / scaleY;
9320
+ playerDom.style.left = playerLeft + "px";
9321
+ playerDom.style.top = playerTop + "px";
9322
+ playerDom.style.width = playerWidth + "px";
9323
+ playerDom.style.height = playerHeight + "px";
9324
+ const chooseFieldDom = document.getElementById("chooseField_" + uuid.value);
9325
+ chooseFieldDom.style.width = chooseFieldDom.offsetWidth * scaleX + "px";
9326
+ chooseFieldDom.style.height = chooseFieldDom.offsetHeight * scaleY + "px";
9327
+ const thumbnailDom = document.getElementById("thumbnail_" + uuid.value);
9328
+ chooseFieldDom.style.left = thumbnailDom.offsetWidth * -1 * playerLeft / playerWidth + "px";
9329
+ chooseFieldDom.style.top = thumbnailDom.offsetHeight * -1 * playerTop / playerHeight + "px";
9330
+ };
9331
+ const setZoom = async () => {
9332
+ boxDom = document.getElementById("videoBox_" + uuid.value);
9333
+ playerDom = document.getElementById("videoPlayer_" + uuid.value);
9334
+ if (magnifyBtn.value) {
9335
+ magnifyBtn.value = !magnifyBtn.value;
9336
+ playerDom?.removeEventListener("mousedown", mousedownFun);
9337
+ playerDom?.removeEventListener("mouseup", mouseupFun);
9338
+ resetZoom();
9339
+ return;
9340
+ }
9341
+ magnifyBtn.value = !magnifyBtn.value;
9342
+ playerDom?.addEventListener("mousedown", mousedownFun);
9343
+ playerDom?.addEventListener("mouseup", mouseupFun);
9344
+ };
9276
9345
  const fill = ref("fill");
9277
9346
  watch(() => _prop.camera, val => {
9278
9347
  if (val && Object.keys(val).length != 0) {
@@ -9314,7 +9383,24 @@ const VideoBoxV2 = defineComponent({
9314
9383
  streamType: streamHistory.value || camera.value?.streamType
9315
9384
  };
9316
9385
  }
9317
- }, null) : "", showInfo.value ? createVNode("div", {
9386
+ }, null) : "", magnifyBtn.value ? createVNode("div", {
9387
+ "class": "thumbnail",
9388
+ "id": "thumbnail_" + uuid.value
9389
+ }, [createVNode(VideoPlayerV2, {
9390
+ "ref": player,
9391
+ "domId": UUID(),
9392
+ "camera": camera.value,
9393
+ "cameraConfig": cameraConfig.value,
9394
+ "fill": fill.value,
9395
+ "onChangeStream": () => {
9396
+ cameraConfig.value = {
9397
+ streamType: streamHistory.value || camera.value?.streamType
9398
+ };
9399
+ }
9400
+ }, null), createVNode("div", {
9401
+ "class": "chooseField",
9402
+ "id": "chooseField_" + uuid.value
9403
+ }, null)]) : "", showInfo.value ? createVNode("div", {
9318
9404
  "class": "selectFields"
9319
9405
  }, [[0, 1, 2, 3, 4, 5].map(index => {
9320
9406
  let info = {};
@@ -9376,6 +9462,14 @@ const VideoBoxV2 = defineComponent({
9376
9462
  "src": "/micro-assets/inl/video/stream.png"
9377
9463
  }, null)]
9378
9464
  });
9465
+ case "magnify":
9466
+ return createVNode("img", {
9467
+ "title": "\u653E\u5927",
9468
+ "onClick": e => {
9469
+ setZoom();
9470
+ },
9471
+ "src": "/micro-assets/inl/video/controls/magnify.svg"
9472
+ }, null);
9379
9473
  case "direction":
9380
9474
  return createVNode(resolveComponent("a-popover"), {
9381
9475
  "title": "\u63A7\u5236\u5668",
@@ -1,3 +1,3 @@
1
- .playVideos{display:flex;flex-direction:column;height:100%;padding-left:20px}.playVideos .operate{display:flex;justify-content:space-between;margin:5px 0}.playVideos .operate .button{cursor:pointer}.playVideos .grid{display:grid;flex:1;overflow:hidden}.playVideos .grid .video{background:#000;border:1px solid hsla(216,7%,59%,.3);height:100%;object-fit:fill;overflow:hidden;width:100%}.playVideos .grid.full{height:100%;left:0;position:fixed;top:0;width:100%;z-index:10}.playVideos .type1{grid-template-columns:1fr;grid-template-rows:1fr}.playVideos .type4{grid-template-columns:1fr 1fr;grid-template-rows:1fr 1fr}.playVideos .type8{grid-template-columns:1fr 1fr 1fr 1fr;grid-template-rows:1fr 1fr 1fr 1fr}.playVideos .type8 .video:first-child{grid-column:1/4;grid-row:1/4}.playVideos .type9{grid-template-columns:1fr 1fr 1fr;grid-template-rows:1fr 1fr 1fr}.playVideos .type13{grid-template-columns:1fr 1fr 1fr 1fr;grid-template-rows:1fr 1fr 1fr 1fr}.playVideos .type13 .video:first-child{grid-column:1/3;grid-row:1/3}.playVideos .type16{grid-template-columns:1fr 1fr 1fr 1fr;grid-template-rows:1fr 1fr 1fr 1fr}@keyframes moveBottom{0%{bottom:0}to{bottom:-66px}}.videoComponent{background:#000;height:100%;position:relative;width:100%}.videoComponent.fill{object-fit:fill}.videoComponent.contain{object-fit:contain}.videoBox{height:100%;overflow:hidden;position:relative}.videoBox .videoStatic{height:100%;object-fit:fill;width:100%}.videoBox.alarm:before{border:2px solid #ea5858;box-shadow:inset 0 0 10px 8px rgba(234,88,88,.5);content:"";height:100%;pointer-events:none;position:absolute;top:0;width:100%;z-index:7}.videoBox:hover .selectFields{animation-duration:1s;animation-fill-mode:both;animation-name:moveBottom}.videoBox:hover .footer-min{display:flex}.videoBox:hover .footer-min .name-min span,.videoBox:hover .footer-min .tool{display:block}.videoBox .selectFields{background:rgba(0,0,0,.3);bottom:0;display:grid;grid-template-columns:1fr 1fr 1fr;grid-template-rows:1fr 1fr;height:66px;position:absolute;width:100%}.videoBox .selectFields .info{border:0;color:#fff;line-height:33px;overflow:hidden;padding:0 5px;text-align:center;text-overflow:ellipsis;white-space:nowrap}.videoBox .selectFields .info .value{font-size:15px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.videoBox .footer-min{align-items:center;backdrop-filter:blur(10px);background:hsla(0,0%,100%,.04);border-radius:4px 4px 0 0;bottom:0;display:none;height:44px;justify-content:space-between;position:absolute;width:100%}.videoBox .footer-min .name-min{align-items:center;display:flex;padding-left:15px}.videoBox .footer-min .name-min span{color:#fff;display:none;font-size:16px;font-weight:600}.videoBox .footer-min .tool{display:none}.videoBox .footer-min .tool img{cursor:pointer;height:20px;margin-right:15px;width:20px}.videoControls{align-items:center;display:flex;flex-direction:column;width:100%}.videoControls .videoControl{height:126px;position:relative;width:126px}.videoControls .videoControl .bg{height:100%;position:relative;width:100%}.videoControls .videoControl img{cursor:pointer;position:absolute}.videoControls .videoControl .up{left:52px;top:14px}.videoControls .videoControl .lup{left:26px;top:26px;transform:rotate(-45deg)}.videoControls .videoControl .rup{left:78px;top:27px;transform:rotate(45deg)}.videoControls .videoControl .left{left:14px;top:52px;transform:rotate(-90deg)}.videoControls .videoControl .right{left:90px;top:52px;transform:rotate(90deg)}.videoControls .videoControl .ldown{left:26px;top:78px;transform:rotate(215deg)}.videoControls .videoControl .down{left:52px;top:90px;transform:rotate(180deg)}.videoControls .videoControl .rdown{left:78px;top:78px;transform:rotate(135deg)}.videoControls .btns{background:#e0e7f2;border-radius:19px;height:28px;margin:8px 8px 0;padding:3px;width:56px}.videoControls .btns img{cursor:pointer;margin-right:1px}
1
+ .playVideos{display:flex;flex-direction:column;height:100%;padding-left:20px}.playVideos .operate{display:flex;justify-content:space-between;margin:5px 0}.playVideos .operate .button{cursor:pointer}.playVideos .grid{display:grid;flex:1;overflow:hidden}.playVideos .grid .video{background:#000;border:1px solid hsla(216,7%,59%,.3);height:100%;object-fit:fill;overflow:hidden;width:100%}.playVideos .grid.full{height:100%;left:0;position:fixed;top:0;width:100%;z-index:10}.playVideos .type1{grid-template-columns:1fr;grid-template-rows:1fr}.playVideos .type4{grid-template-columns:1fr 1fr;grid-template-rows:1fr 1fr}.playVideos .type8{grid-template-columns:1fr 1fr 1fr 1fr;grid-template-rows:1fr 1fr 1fr 1fr}.playVideos .type8 .video:first-child{grid-column:1/4;grid-row:1/4}.playVideos .type9{grid-template-columns:1fr 1fr 1fr;grid-template-rows:1fr 1fr 1fr}.playVideos .type13{grid-template-columns:1fr 1fr 1fr 1fr;grid-template-rows:1fr 1fr 1fr 1fr}.playVideos .type13 .video:first-child{grid-column:1/3;grid-row:1/3}.playVideos .type16{grid-template-columns:1fr 1fr 1fr 1fr;grid-template-rows:1fr 1fr 1fr 1fr}@keyframes moveBottom{0%{bottom:0}to{bottom:-66px}}.videoComponent{background:#000;height:100%;left:0;position:relative;top:0;width:100%}.videoComponent.fill{object-fit:fill}.videoComponent.contain{object-fit:contain}.videoBox{height:100%;overflow:hidden;position:relative}.videoBox .videoStatic{height:100%;object-fit:fill;width:100%}.videoBox .thumbnail{background:#000;height:30%;left:70%;position:absolute;top:70%;width:30%}.videoBox .thumbnail .chooseField{border:1px solid red;height:100%;left:100%;position:absolute;top:100%;width:100%}.videoBox #tempDiv{border:2px solid red;position:absolute}.videoBox.alarm:before{border:2px solid #ea5858;box-shadow:inset 0 0 10px 8px rgba(234,88,88,.5);content:"";height:100%;pointer-events:none;position:absolute;top:0;width:100%;z-index:7}.videoBox:hover .selectFields{animation-duration:1s;animation-fill-mode:both;animation-name:moveBottom}.videoBox:hover .footer-min{display:flex}.videoBox:hover .footer-min .name-min span,.videoBox:hover .footer-min .tool{display:block}.videoBox .selectFields{background:rgba(0,0,0,.3);bottom:0;display:grid;grid-template-columns:1fr 1fr 1fr;grid-template-rows:1fr 1fr;height:66px;position:absolute;width:100%}.videoBox .selectFields .info{border:0;color:#fff;line-height:33px;overflow:hidden;padding:0 5px;text-align:center;text-overflow:ellipsis;white-space:nowrap}.videoBox .selectFields .info .value{font-size:15px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.videoBox .footer-min{align-items:center;backdrop-filter:blur(10px);background:hsla(0,0%,100%,.04);border-radius:4px 4px 0 0;bottom:0;display:none;height:44px;justify-content:space-between;position:absolute;width:100%}.videoBox .footer-min .name-min{align-items:center;display:flex;padding-left:15px}.videoBox .footer-min .name-min span{color:#fff;display:none;font-size:16px;font-weight:600}.videoBox .footer-min .tool{display:none}.videoBox .footer-min .tool img{cursor:pointer;height:20px;margin-right:15px;width:20px}.videoControls{align-items:center;display:flex;flex-direction:column;width:100%}.videoControls .videoControl{height:126px;position:relative;width:126px}.videoControls .videoControl .bg{height:100%;position:relative;width:100%}.videoControls .videoControl img{cursor:pointer;position:absolute}.videoControls .videoControl .up{left:52px;top:14px}.videoControls .videoControl .lup{left:26px;top:26px;transform:rotate(-45deg)}.videoControls .videoControl .rup{left:78px;top:27px;transform:rotate(45deg)}.videoControls .videoControl .left{left:14px;top:52px;transform:rotate(-90deg)}.videoControls .videoControl .right{left:90px;top:52px;transform:rotate(90deg)}.videoControls .videoControl .ldown{left:26px;top:78px;transform:rotate(215deg)}.videoControls .videoControl .down{left:52px;top:90px;transform:rotate(180deg)}.videoControls .videoControl .rdown{left:78px;top:78px;transform:rotate(135deg)}.videoControls .btns{background:#e0e7f2;border-radius:19px;height:28px;margin:8px 8px 0;padding:3px;width:56px}.videoControls .btns img{cursor:pointer;margin-right:1px}
2
2
  .videoAlarmDia.dark{background:linear-gradient(90deg,#3e7eff,#1e4e75 30%,#1e4e75 70%,#3e7eff);padding:1px}.videoAlarmDia.dark .ant-modal-close{color:#fff}.videoAlarmDia.dark .ant-modal-header{background-color:#22396f;border-bottom-color:transparent;padding-left:20px}.videoAlarmDia.dark .ant-modal-header .ant-modal-title{align-items:center;background-image:linear-gradient(90deg,#2852a8 0,rgba(40,82,168,0) 50%);color:#fff;display:flex;height:42px;padding-left:10px}.videoAlarmDia.dark .ant-modal-content{background-color:#22396f}.videoAlarmDia.dark .ant-modal-content .body,.videoAlarmDia.dark .ant-modal-content .body .alarmList .alarm .name,.videoAlarmDia.dark .ant-modal-content .body .alarmList .title,.videoAlarmDia.dark .ant-modal-content .body .themeImg{color:#fff}.videoAlarmDia.dark .ant-modal-content .body .tabs .tabContainer .allTab .tab{background:#ffffff1a;color:#fff}.videoAlarmDia.dark .ant-modal-content .body .tabs .tabContainer .allTab .tab.active{background:#3e7eff;color:#fff}.videoAlarmDia .ant-modal-body{padding-top:18px}.videoAlarmDia .body{display:flex;flex-direction:column;height:660px}.videoAlarmDia .body .title{color:#000;font-size:18px}.videoAlarmDia .body .themeImg{height:18px;margin-right:5px;width:18px}.videoAlarmDia .body .current{align-self:center;display:flex;height:400px;justify-content:center;margin:10px 0 25px;width:750px}.videoAlarmDia .body .current .grid{grid-gap:3px;background-color:transparent;display:grid;height:100%;overflow:hidden;width:100%}.videoAlarmDia .body .current .grid .videoBox{background-color:#000}.videoAlarmDia .body .alarmList{display:flex;flex-wrap:wrap;justify-content:flex-start;max-height:80px;overflow:auto}.videoAlarmDia .body .alarmList .title{font-size:14px;font-weight:600;margin-bottom:10px}.videoAlarmDia .body .alarmList .alarm{align-items:center;border-radius:5px;color:#000;cursor:pointer;height:24px;margin-bottom:10px;margin-right:10px;padding:5px}.videoAlarmDia .body .alarmList .alarm img{height:16px;margin-right:5px;width:16px}.videoAlarmDia .body .alarmList .alarm .name{font-size:14px;white-space:nowrap}.videoAlarmDia .body .alarmList .alarm1{background:rgba(234,88,88,.1);color:#354052}.videoAlarmDia .body .alarmList .alarm2{background:rgba(255,146,20,.1);color:#354052}.videoAlarmDia .body .alarmList .alarm3{background:rgba(255,196,20,.1);color:#354052}.videoAlarmDia .body .alarmList .alarm4{background:rgba(62,126,255,.1);color:#354052}.videoAlarmDia .body .tip{align-items:center;display:flex;margin:0}.videoAlarmDia .body .tip .sumNum{margin-right:16px}.videoAlarmDia .body .tip .timeNum{color:#3e7eff;font-weight:600;margin-right:5px}.videoAlarmDia .body .tabs{align-items:center;display:flex;margin:10px 0 5px}.videoAlarmDia .body .tabs .themeImg{cursor:pointer;overflow:visible}.videoAlarmDia .body .tabs .endIcon{margin-left:10px}.videoAlarmDia .body .tabs .tabContainer{display:flex;overflow:hidden}.videoAlarmDia .body .tabs .tabContainer .allTab{display:flex;height:40px;left:0;position:relative}.videoAlarmDia .body .tabs .tabContainer .allTab .tab{background:#f2f3f8;border-radius:4px;cursor:pointer;font-size:14px;height:32px;line-height:32px;margin-right:10px;padding:0 10px;position:relative;text-align:center;white-space:nowrap}.videoAlarmDia .body .tabs .tabContainer .allTab .tab.active{background:#1d33a2;color:#fff}.videoAlarmDia .body .tabs .tabContainer .allTab .tab.active:after{border:10px solid transparent;border-top-color:#1d33a2;content:"";height:0;left:50%;position:absolute;top:30px;width:0}.videoAlarmDia .body .numLine{align-items:center;display:flex}.videoAlarmDia .body .numLine .cameraNum{color:#3e7eff;font-weight:600}.videoAlarmDia .body .numLine .tipImg{height:18px;margin:0 5px 0 25px;width:18px}.videoAlarmDia .body .numLine .alarmNum{color:#fa4141;font-weight:600}.videoAlarmDia .body .otherAlarm{align-items:center;display:flex}.videoAlarmDia .body .otherAlarm .ant-tag{cursor:pointer;font-size:14px}.videoAlarmDia .body .otherAlarm .tipImg{height:18px;margin-right:5px;width:18px}.videoAlarmDia .body .otherAlarm .annotation{height:12px;margin:2px;width:12px}.videoAlarmDia .body .type1{grid-template-columns:1fr;grid-template-rows:1fr}.videoAlarmDia .body .type4{grid-template-columns:1fr 1fr;grid-template-rows:1fr 1fr}.videoAlarmDia .body .type8{grid-template-columns:1fr 1fr 1fr 1fr;grid-template-rows:1fr 1fr 1fr 1fr}.videoAlarmDia .body .type8 .videoBox:first-child{grid-column:1/4;grid-row:1/4}.videoAlarmDia .body .type9{grid-template-columns:1fr 1fr 1fr;grid-template-rows:1fr 1fr 1fr}.videoAlarmDia .body .type13{grid-template-columns:1fr 1fr 1fr 1fr;grid-template-rows:1fr 1fr 1fr 1fr}.videoAlarmDia .body .type13 .videoBox:first-child{grid-column:1/3;grid-row:1/3}.videoAlarmDia .body .type16{grid-template-columns:1fr 1fr 1fr 1fr;grid-template-rows:1fr 1fr 1fr 1fr}
3
3
  .cloudVideo{height:100%;width:100%}.cloudVideo.noControl .mobile-ez-ptz-container{display:none!important}
@@ -6156,6 +6156,7 @@ function useRouteActive() {
6156
6156
  return isActive;
6157
6157
  }
6158
6158
 
6159
+ exports.WebRtcMt = WebRtcMt;
6159
6160
  exports.playOneWebRtcMt = playOneWebRtcMt;
6160
6161
  exports.useCacheExclude = useCacheExclude;
6161
6162
  exports.useEvent = useEvent;
@@ -116,7 +116,62 @@ type RequetFunction = (...args: any[]) => any;
116
116
  */
117
117
  declare function usePoolingReq(reqFn: RequetFunction, isInterval?: MaybeComputedRef<Boolean>, interval?: number): void;
118
118
 
119
+ interface PlayVideoArgs {
120
+ videoElm: string;
121
+ videoDom?: Document;
122
+ mediaServerAddr: string;
123
+ cameraUserName: string;
124
+ cameraPwd: string;
125
+ cameraIp: string;
126
+ cameraRtspPort: string;
127
+ cameraChannel: string;
128
+ cameraStream: string;
129
+ addRtspProxyUrl: string;
130
+ }
131
+ interface EndpointConfig {
132
+ debug: boolean;
133
+ simulcast: boolean;
134
+ useCamera: boolean;
135
+ audioEnable: boolean;
136
+ videoEnable: boolean;
137
+ recvOnly: boolean;
138
+ }
139
+ interface WebRtc {
140
+ el?: HTMLElement;
141
+ w?: number;
142
+ h?: number;
143
+ autoPlay?: boolean;
144
+ plays: PlayVideoArgs | Array<PlayVideoArgs>;
145
+ endpointConfig?: EndpointConfig;
146
+ }
119
147
  declare const playOneWebRtcMt: (uuid: string, domId: string, dom?: Document, token?: string) => Promise<any>;
148
+ declare class WebRtcMt {
149
+ constructor(opt: WebRtc);
150
+ private opt;
151
+ private dom;
152
+ p_player: any;
153
+ protected playerMap: Map<any, any>;
154
+ protected streamMap: Map<any, any>;
155
+ protected mediaServerAddrMap: Map<any, any>;
156
+ protected config: {
157
+ w: number;
158
+ h: number;
159
+ endpointConfig: {};
160
+ };
161
+ protected createRtspUrl(plays: any): {
162
+ stream: string;
163
+ addRtspProxyUrl: any;
164
+ sdpUrl: any;
165
+ };
166
+ protected init(opt: WebRtc): void;
167
+ protected createVideo(plays: PlayVideoArgs): Promise<unknown>;
168
+ log(type: "err" | "info" | "warn", text: string): void;
169
+ stopPlay(id?: string): void;
170
+ protected playEvent(player: any, videoElm: string, sdpUrl: string): void;
171
+ protected rePlay(videoElm?: string): void;
172
+ protected play(videoElm: string): void;
173
+ startPlay(plays: PlayVideoArgs): void;
174
+ }
120
175
 
121
176
  interface useSelectVo<T> {
122
177
  onSelect: (record: T, selected: boolean) => void;
@@ -138,4 +193,4 @@ declare const useTableSelec: <T>(key?: Key) => useSelectVo<T>;
138
193
  */
139
194
  declare function useRouteActive(): vue.Ref<boolean>;
140
195
 
141
- export { playOneWebRtcMt, useCacheExclude, useEvent, useModalVisible, useNow, usePoolingReq, useQianKunState, useQiankunStateValue, useRouteActive, useTableList, useTableSelec, useZoomAdaptation };
196
+ export { WebRtcMt, playOneWebRtcMt, useCacheExclude, useEvent, useModalVisible, useNow, usePoolingReq, useQianKunState, useQiankunStateValue, useRouteActive, useTableList, useTableSelec, useZoomAdaptation };
@@ -6147,4 +6147,4 @@ function useRouteActive() {
6147
6147
  return isActive;
6148
6148
  }
6149
6149
 
6150
- export { playOneWebRtcMt, useCacheExclude, useEvent, useModalVisible, useNow, usePoolingReq, useQianKunState, useQiankunStateValue, useRouteActive, useTableList, useTableSelec, useZoomAdaptation };
6150
+ export { WebRtcMt, playOneWebRtcMt, useCacheExclude, useEvent, useModalVisible, useNow, usePoolingReq, useQianKunState, useQiankunStateValue, useRouteActive, useTableList, useTableSelec, useZoomAdaptation };
package/dist/index.cjs CHANGED
@@ -45,7 +45,7 @@ var ___default = /*#__PURE__*/_interopDefaultLegacy(_);
45
45
  var dayjs__default = /*#__PURE__*/_interopDefaultLegacy(dayjs);
46
46
  var EZUIKit__default = /*#__PURE__*/_interopDefaultLegacy(EZUIKit);
47
47
 
48
- var version = "0.1.37";
48
+ var version = "0.1.39";
49
49
 
50
50
  const setTheme = theme => {
51
51
  if (theme === "dark") {
@@ -6865,6 +6865,7 @@ var hooks = /*#__PURE__*/Object.freeze({
6865
6865
  useZoomAdaptation: useZoomAdaptation,
6866
6866
  usePoolingReq: usePoolingReq,
6867
6867
  playOneWebRtcMt: playOneWebRtcMt,
6868
+ WebRtcMt: WebRtcMt$1,
6868
6869
  useTableSelec: useTableSelec,
6869
6870
  useRouteActive: useRouteActive
6870
6871
  });
@@ -10156,7 +10157,7 @@ const props$6 = {
10156
10157
  // },
10157
10158
  btns: {
10158
10159
  type: Array,
10159
- default: ["fill", "look", "stream", "direction", "fullScreen", "close"]
10160
+ default: ["fill", "look", "stream", "magnify", "direction", "fullScreen", "close"]
10160
10161
  },
10161
10162
  alarm: {
10162
10163
  default: false,
@@ -10179,6 +10180,7 @@ const VideoBoxV2 = vue.defineComponent({
10179
10180
  const streamHistory = vue.ref("");
10180
10181
  const streams = vue.ref([]);
10181
10182
  const showInfo = vue.ref(true);
10183
+ const magnifyBtn = vue.ref(false);
10182
10184
  const videoBtns = [[{
10183
10185
  text: "lup",
10184
10186
  signal: 25
@@ -10287,6 +10289,74 @@ const VideoBoxV2 = vue.defineComponent({
10287
10289
  let timeout;
10288
10290
  vue.ref(true);
10289
10291
  vue.onBeforeUnmount(() => {});
10292
+ const resetZoom = () => {
10293
+ const chooseFieldDom = document.getElementById("chooseField_" + uuid.value);
10294
+ chooseFieldDom?.remove();
10295
+ const dom = document.getElementById("videoPlayer_" + uuid.value);
10296
+ dom.style.left = "0px";
10297
+ dom.style.top = "0px";
10298
+ dom.style.width = "100%";
10299
+ dom.style.height = "100%";
10300
+ };
10301
+ let boxDom;
10302
+ let playerDom;
10303
+ let newDiv;
10304
+ let begin = {
10305
+ left: 0,
10306
+ top: 0
10307
+ };
10308
+ let mousedownEvent;
10309
+ const mousemoveFun = mousemoveEvent => {
10310
+ newDiv.style.width = Math.abs(mousemoveEvent.offsetX - mousedownEvent.offsetX) - 3 + "px";
10311
+ newDiv.style.height = Math.abs(mousemoveEvent.offsetY - mousedownEvent.offsetY) - 3 + "px";
10312
+ newDiv.style.left = Math.min(mousedownEvent.offsetX, mousemoveEvent.offsetX) + begin.left + "px";
10313
+ newDiv.style.top = Math.min(mousedownEvent.offsetY, mousemoveEvent.offsetY) + begin.top + "px";
10314
+ };
10315
+ const mousedownFun = e => {
10316
+ mousedownEvent = e;
10317
+ begin.left = Number(playerDom.style.left.split("px")[0]);
10318
+ begin.top = Number(playerDom.style.top.split("px")[0]);
10319
+ newDiv = document.createElement("div");
10320
+ newDiv.id = "tempDiv";
10321
+ newDiv.style.left = mousedownEvent.offsetX + begin.left + "px";
10322
+ newDiv.style.top = mousedownEvent.offsetY + begin.top + "px";
10323
+ boxDom.appendChild(newDiv);
10324
+ playerDom?.addEventListener("mousemove", mousemoveFun);
10325
+ };
10326
+ const mouseupFun = mouseupEvent => {
10327
+ playerDom?.removeEventListener("mousemove", mousemoveFun);
10328
+ newDiv.remove();
10329
+ const scaleX = Math.abs(mouseupEvent.pageX - mousedownEvent.pageX) / boxDom.offsetWidth;
10330
+ const scaleY = Math.abs(mouseupEvent.pageY - mousedownEvent.pageY) / boxDom.offsetHeight;
10331
+ const playerLeft = Math.min(mousedownEvent.offsetX, mouseupEvent.offsetX) * -1 / scaleX;
10332
+ const playerTop = Math.min(mousedownEvent.offsetY, mouseupEvent.offsetY) * -1 / scaleY;
10333
+ const playerWidth = playerDom.offsetWidth / scaleX;
10334
+ const playerHeight = playerDom.offsetHeight / scaleY;
10335
+ playerDom.style.left = playerLeft + "px";
10336
+ playerDom.style.top = playerTop + "px";
10337
+ playerDom.style.width = playerWidth + "px";
10338
+ playerDom.style.height = playerHeight + "px";
10339
+ const chooseFieldDom = document.getElementById("chooseField_" + uuid.value);
10340
+ chooseFieldDom.style.width = chooseFieldDom.offsetWidth * scaleX + "px";
10341
+ chooseFieldDom.style.height = chooseFieldDom.offsetHeight * scaleY + "px";
10342
+ const thumbnailDom = document.getElementById("thumbnail_" + uuid.value);
10343
+ chooseFieldDom.style.left = thumbnailDom.offsetWidth * -1 * playerLeft / playerWidth + "px";
10344
+ chooseFieldDom.style.top = thumbnailDom.offsetHeight * -1 * playerTop / playerHeight + "px";
10345
+ };
10346
+ const setZoom = async () => {
10347
+ boxDom = document.getElementById("videoBox_" + uuid.value);
10348
+ playerDom = document.getElementById("videoPlayer_" + uuid.value);
10349
+ if (magnifyBtn.value) {
10350
+ magnifyBtn.value = !magnifyBtn.value;
10351
+ playerDom?.removeEventListener("mousedown", mousedownFun);
10352
+ playerDom?.removeEventListener("mouseup", mouseupFun);
10353
+ resetZoom();
10354
+ return;
10355
+ }
10356
+ magnifyBtn.value = !magnifyBtn.value;
10357
+ playerDom?.addEventListener("mousedown", mousedownFun);
10358
+ playerDom?.addEventListener("mouseup", mouseupFun);
10359
+ };
10290
10360
  const fill = vue.ref("fill");
10291
10361
  vue.watch(() => _prop.camera, val => {
10292
10362
  if (val && Object.keys(val).length != 0) {
@@ -10328,7 +10398,24 @@ const VideoBoxV2 = vue.defineComponent({
10328
10398
  streamType: streamHistory.value || camera.value?.streamType
10329
10399
  };
10330
10400
  }
10331
- }, null) : "", showInfo.value ? vue.createVNode("div", {
10401
+ }, null) : "", magnifyBtn.value ? vue.createVNode("div", {
10402
+ "class": "thumbnail",
10403
+ "id": "thumbnail_" + uuid.value
10404
+ }, [vue.createVNode(VideoPlayerV2, {
10405
+ "ref": player,
10406
+ "domId": UUID(),
10407
+ "camera": camera.value,
10408
+ "cameraConfig": cameraConfig.value,
10409
+ "fill": fill.value,
10410
+ "onChangeStream": () => {
10411
+ cameraConfig.value = {
10412
+ streamType: streamHistory.value || camera.value?.streamType
10413
+ };
10414
+ }
10415
+ }, null), vue.createVNode("div", {
10416
+ "class": "chooseField",
10417
+ "id": "chooseField_" + uuid.value
10418
+ }, null)]) : "", showInfo.value ? vue.createVNode("div", {
10332
10419
  "class": "selectFields"
10333
10420
  }, [[0, 1, 2, 3, 4, 5].map(index => {
10334
10421
  let info = {};
@@ -10390,6 +10477,14 @@ const VideoBoxV2 = vue.defineComponent({
10390
10477
  "src": "/micro-assets/inl/video/stream.png"
10391
10478
  }, null)]
10392
10479
  });
10480
+ case "magnify":
10481
+ return vue.createVNode("img", {
10482
+ "title": "\u653E\u5927",
10483
+ "onClick": e => {
10484
+ setZoom();
10485
+ },
10486
+ "src": "/micro-assets/inl/video/controls/magnify.svg"
10487
+ }, null);
10393
10488
  case "direction":
10394
10489
  return vue.createVNode(vue.resolveComponent("a-popover"), {
10395
10490
  "title": "\u63A7\u5236\u5668",
package/dist/index.d.ts CHANGED
@@ -11,7 +11,7 @@ import { Key } from 'ant-design-vue/lib/table/interface';
11
11
  import * as vue_jsx_runtime from 'vue/jsx-runtime';
12
12
  import * as _ant_design_icons_vue_lib_components_IconFont from '@ant-design/icons-vue/lib/components/IconFont';
13
13
 
14
- var version = "0.1.37";
14
+ var version = "0.1.39";
15
15
 
16
16
  declare const _default$p: {
17
17
  set(theme: string): void;
@@ -492,6 +492,8 @@ declare const hooks_useEvent: typeof useEvent;
492
492
  declare const hooks_useZoomAdaptation: typeof useZoomAdaptation;
493
493
  declare const hooks_usePoolingReq: typeof usePoolingReq;
494
494
  declare const hooks_playOneWebRtcMt: typeof playOneWebRtcMt;
495
+ type hooks_WebRtcMt = WebRtcMt;
496
+ declare const hooks_WebRtcMt: typeof WebRtcMt;
495
497
  declare const hooks_useTableSelec: typeof useTableSelec;
496
498
  declare const hooks_useRouteActive: typeof useRouteActive;
497
499
  declare namespace hooks {
@@ -506,6 +508,7 @@ declare namespace hooks {
506
508
  hooks_useZoomAdaptation as useZoomAdaptation,
507
509
  hooks_usePoolingReq as usePoolingReq,
508
510
  hooks_playOneWebRtcMt as playOneWebRtcMt,
511
+ hooks_WebRtcMt as WebRtcMt,
509
512
  hooks_useTableSelec as useTableSelec,
510
513
  hooks_useRouteActive as useRouteActive,
511
514
  };