From cadd0ee0387c7c4af4b6d8eb10641ef006174837 Mon Sep 17 00:00:00 2001
From: 648540858 <648540858@qq.com>
Date: 星期五, 04 三月 2022 15:29:56 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/wvp-pro-record' into wvp-28181-2.0
---
src/main/java/com/genersoft/iot/vmp/gb28181/event/record/RecordEndEventListener.java | 43 ++++++++
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java | 15 ++-
src/main/java/com/genersoft/iot/vmp/storager/dao/ParentPlatformMapper.java | 6 +
src/main/resources/all-application.yml | 2
src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStoragerImpl.java | 6 +
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommander.java | 2
src/main/java/com/genersoft/iot/vmp/storager/IVideoManagerStorager.java | 3
src/main/java/com/genersoft/iot/vmp/gb28181/event/record/RecordEndEvent.java | 32 ++++++
src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/platform/PlatformController.java | 5 +
src/main/java/com/genersoft/iot/vmp/storager/dao/dto/ChannelSourceInfo.java | 22 ++++
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommanderFroPlatform.java | 2
web_src/src/components/control.vue | 26 ++--
src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/record/GBRecordController.java | 2
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/query/cmd/RecordInfoQueryMessageHandler.java | 113 ++++++++++++++++++++++
14 files changed, 257 insertions(+), 22 deletions(-)
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/event/record/RecordEndEvent.java b/src/main/java/com/genersoft/iot/vmp/gb28181/event/record/RecordEndEvent.java
new file mode 100644
index 0000000..cfd2985
--- /dev/null
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/event/record/RecordEndEvent.java
@@ -0,0 +1,32 @@
+package com.genersoft.iot.vmp.gb28181.event.record;
+
+import com.genersoft.iot.vmp.gb28181.bean.DeviceAlarm;
+import com.genersoft.iot.vmp.gb28181.bean.RecordInfo;
+import org.springframework.context.ApplicationEvent;
+
+/**
+ * @description: 褰曞儚鏌ヨ缁撴潫鏃堕棿
+ * @author: pan
+ * @data: 2022-02-23
+ */
+
+public class RecordEndEvent extends ApplicationEvent {
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+
+ public RecordEndEvent(Object source) {
+ super(source);
+ }
+
+ private RecordInfo recordInfo;
+
+ public RecordInfo getRecordInfo() {
+ return recordInfo;
+ }
+
+ public void setRecordInfo(RecordInfo recordInfo) {
+ this.recordInfo = recordInfo;
+ }
+}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/event/record/RecordEndEventListener.java b/src/main/java/com/genersoft/iot/vmp/gb28181/event/record/RecordEndEventListener.java
new file mode 100644
index 0000000..d7b33f2
--- /dev/null
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/event/record/RecordEndEventListener.java
@@ -0,0 +1,43 @@
+package com.genersoft.iot.vmp.gb28181.event.record;
+
+import com.genersoft.iot.vmp.gb28181.bean.RecordItem;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.context.ApplicationListener;
+import org.springframework.stereotype.Component;
+import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
+
+import java.io.IOException;
+import java.util.*;
+
+/**
+ * @description: 褰曞儚鏌ヨ缁撴潫鏃堕棿
+ * @author: pan
+ * @data: 2022-02-23
+ */
+
+@Component
+public class RecordEndEventListener implements ApplicationListener<RecordEndEvent> {
+
+ private final static Logger logger = LoggerFactory.getLogger(RecordEndEventListener.class);
+
+ private static Map<String, SseEmitter> sseEmitters = new Hashtable<>();
+
+ public void addSseEmitters(String browserId, SseEmitter sseEmitter) {
+ sseEmitters.put(browserId, sseEmitter);
+ }
+
+ public interface RecordEndEventHandler{
+ void handler(List<RecordItem> recordItems);
+ }
+
+ private Map<String, RecordEndEventHandler> handlerMap = new HashMap<>();
+ @Override
+ public void onApplicationEvent(RecordEndEvent event) {
+ if (logger.isDebugEnabled()) {
+ logger.debug("褰曞儚鏌ヨ瀹屾垚浜嬩欢瑙﹀彂锛宒eviceId锛歿}, channelId: {}, 褰曞儚鏁伴噺{}鏉�", event.getRecordInfo().getDeviceId(),
+ event.getRecordInfo().getChannelId(), event.getRecordInfo().getRecordList().size() );
+ }
+
+ }
+}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommander.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommander.java
index 5859d65..67be247 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommander.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommander.java
@@ -258,7 +258,7 @@
* @param endTime 缁撴潫鏃堕棿,鏍煎紡瑕佹眰锛歽yyy-MM-dd HH:mm:ss
* @param sn
*/
- boolean recordInfoQuery(Device device, String channelId, String startTime, String endTime, int sn, SipSubscribe.Event errorEvent);
+ boolean recordInfoQuery(Device device, String channelId, String startTime, String endTime, int sn, Integer Secrecy, String type, SipSubscribe.Event okEvent, SipSubscribe.Event errorEvent);
/**
* 鏌ヨ鎶ヨ淇℃伅
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java
index 734fe23..7af5c51 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java
@@ -1196,8 +1196,13 @@
* @param endTime 缁撴潫鏃堕棿,鏍煎紡瑕佹眰锛歽yyy-MM-dd HH:mm:ss
*/
@Override
- public boolean recordInfoQuery(Device device, String channelId, String startTime, String endTime, int sn, SipSubscribe.Event errorEvent) {
-
+ public boolean recordInfoQuery(Device device, String channelId, String startTime, String endTime, int sn, Integer secrecy, String type, SipSubscribe.Event okEvent, SipSubscribe.Event errorEvent) {
+ if (secrecy == null) {
+ secrecy = 0;
+ }
+ if (type == null) {
+ type = "all";
+ }
try {
StringBuffer recordInfoXml = new StringBuffer(200);
@@ -1208,9 +1213,9 @@
recordInfoXml.append("<DeviceID>" + channelId + "</DeviceID>\r\n");
recordInfoXml.append("<StartTime>" + DateUtil.yyyy_MM_dd_HH_mm_ssToISO8601(startTime) + "</StartTime>\r\n");
recordInfoXml.append("<EndTime>" + DateUtil.yyyy_MM_dd_HH_mm_ssToISO8601(endTime) + "</EndTime>\r\n");
- recordInfoXml.append("<Secrecy>0</Secrecy>\r\n");
+ recordInfoXml.append("<Secrecy> "+ secrecy + " </Secrecy>\r\n");
// 澶у崕NVR瑕佹眰蹇呴』澧炲姞涓�涓�间负all鐨勬枃鏈厓绱犺妭鐐筎ype
- recordInfoXml.append("<Type>all</Type>\r\n");
+ recordInfoXml.append("<Type>" + type+"</Type>\r\n");
recordInfoXml.append("</Query>\r\n");
String tm = Long.toString(System.currentTimeMillis());
@@ -1221,7 +1226,7 @@
Request request = headerProvider.createMessageRequest(device, recordInfoXml.toString(),
"z9hG4bK-ViaRecordInfo-" + tm, "fromRec" + tm, null, callIdHeader);
- transmitRequest(device, request, errorEvent);
+ transmitRequest(device, request, errorEvent, okEvent);
} catch (SipException | ParseException | InvalidArgumentException e) {
e.printStackTrace();
return false;
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommanderFroPlatform.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommanderFroPlatform.java
index 5dcffe7..caa5cab 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommanderFroPlatform.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommanderFroPlatform.java
@@ -91,7 +91,7 @@
sipSubscribe.addErrorSubscribe(callIdHeader.getCallId(), (event)->{
if (event != null) {
- logger.info("鍚戜笂绾у钩鍙� [ {} ] 娉ㄥ唽鍙戠敓閿欒锛� {} ",
+ logger.info("鍚戜笂绾у钩鍙� [ {} ] 娉ㄥ唽鍙戜笂閿欒锛� {} ",
parentPlatform.getServerGBId(),
event.msg);
}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/query/cmd/RecordInfoQueryMessageHandler.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/query/cmd/RecordInfoQueryMessageHandler.java
new file mode 100644
index 0000000..08a5d77
--- /dev/null
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/query/cmd/RecordInfoQueryMessageHandler.java
@@ -0,0 +1,113 @@
+package com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.query.cmd;
+
+import com.genersoft.iot.vmp.conf.SipConfig;
+import com.genersoft.iot.vmp.gb28181.bean.*;
+import com.genersoft.iot.vmp.gb28181.event.EventPublisher;
+import com.genersoft.iot.vmp.gb28181.transmit.callback.DeferredResultHolder;
+import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommander;
+import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommanderFroPlatform;
+import com.genersoft.iot.vmp.gb28181.transmit.event.request.SIPRequestProcessorParent;
+import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.IMessageHandler;
+import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.query.QueryMessageHandler;
+import com.genersoft.iot.vmp.gb28181.utils.DateUtil;
+import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
+import com.genersoft.iot.vmp.storager.dao.dto.ChannelSourceInfo;
+import com.genersoft.iot.vmp.vmanager.gb28181.platform.bean.ChannelReduce;
+import org.dom4j.Element;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.InitializingBean;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import javax.sip.InvalidArgumentException;
+import javax.sip.RequestEvent;
+import javax.sip.SipException;
+import javax.sip.header.FromHeader;
+import javax.sip.message.Response;
+import java.text.ParseException;
+import java.util.List;
+
+@Component
+public class RecordInfoQueryMessageHandler extends SIPRequestProcessorParent implements InitializingBean, IMessageHandler {
+
+ private Logger logger = LoggerFactory.getLogger(RecordInfoQueryMessageHandler.class);
+ private final String cmdType = "RecordInfo";
+
+ @Autowired
+ private QueryMessageHandler queryMessageHandler;
+
+ @Autowired
+ private IVideoManagerStorager storager;
+
+ @Autowired
+ private SIPCommanderFroPlatform cmderFroPlatform;
+
+ @Autowired
+ private SIPCommander commander;
+
+ @Autowired
+ private SipConfig config;
+
+ @Autowired
+ private EventPublisher publisher;
+
+ @Override
+ public void afterPropertiesSet() throws Exception {
+ queryMessageHandler.addHandler(cmdType, this);
+ }
+
+ @Override
+ public void handForDevice(RequestEvent evt, Device device, Element element) {
+
+ }
+
+ @Override
+ public void handForPlatform(RequestEvent evt, ParentPlatform parentPlatform, Element rootElement) {
+
+ String key = DeferredResultHolder.CALLBACK_CMD_CATALOG + parentPlatform.getServerGBId();
+ FromHeader fromHeader = (FromHeader) evt.getRequest().getHeader(FromHeader.NAME);
+ try {
+ // 鍥炲200 OK
+ responseAck(evt, Response.OK);
+ Element snElement = rootElement.element("SN");
+ int sn = Integer.parseInt(snElement.getText());
+ Element deviceIDElement = rootElement.element("DeviceID");
+ String channelId = deviceIDElement.getText();
+ Element startTimeElement = rootElement.element("StartTime");
+ String startTime = startTimeElement.getText();
+ Element endTimeElement = rootElement.element("EndTime");
+ String endTime = endTimeElement.getText();
+ Element secrecyElement = rootElement.element("Secrecy");
+ int secrecy = Integer.parseInt(secrecyElement.getText());
+ Element typeElement = rootElement.element("Type");
+ String type = typeElement.getText();
+ // 纭鏄洿鎾繕鏄浗鏍囷紝 鍥芥爣鐩存帴璇锋眰涓嬬骇锛岀洿鎾姹傚綍鍍忕鐞嗘湇鍔�
+ List<ChannelSourceInfo> channelSources = storager.getChannelSource(parentPlatform.getServerGBId(), channelId);
+ if (channelSources.get(0).getCount() > 0) { // 鍥芥爣
+ // 鍚戝浗鏍囪澶囪姹傚綍鍍忔暟鎹�
+ Device device = storager.queryVideoDeviceByPlatformIdAndChannelId(parentPlatform.getServerGBId(), channelId);
+ commander.recordInfoQuery(device, channelId, DateUtil.ISO8601Toyyyy_MM_dd_HH_mm_ss(startTime),
+ DateUtil.ISO8601Toyyyy_MM_dd_HH_mm_ss(endTime), sn, secrecy, type, (eventResult -> {
+ // 鏌ヨ鎴愬姛
+
+ }),(eventResult -> {
+ // 鏌ヨ澶辫触
+
+ }));
+
+ }else if (channelSources.get(0).getCount() > 0) { // 鐩存挱娴�
+ // TODO
+ }else { // 閿欒鐨勮姹�
+
+ }
+ } catch (SipException e) {
+ e.printStackTrace();
+ } catch (InvalidArgumentException e) {
+ e.printStackTrace();
+ } catch (ParseException e) {
+ e.printStackTrace();
+ }
+
+ }
+}
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/IVideoManagerStorager.java b/src/main/java/com/genersoft/iot/vmp/storager/IVideoManagerStorager.java
index 723e9f1..710219e 100644
--- a/src/main/java/com/genersoft/iot/vmp/storager/IVideoManagerStorager.java
+++ b/src/main/java/com/genersoft/iot/vmp/storager/IVideoManagerStorager.java
@@ -5,6 +5,7 @@
import com.genersoft.iot.vmp.media.zlm.dto.StreamProxyItem;
import com.genersoft.iot.vmp.media.zlm.dto.StreamPushItem;
import com.genersoft.iot.vmp.service.bean.GPSMsgInfo;
+import com.genersoft.iot.vmp.storager.dao.dto.ChannelSourceInfo;
import com.genersoft.iot.vmp.vmanager.bean.DeviceChannelTree;
import com.genersoft.iot.vmp.vmanager.gb28181.platform.bean.ChannelReduce;
import com.github.pagehelper.PageInfo;
@@ -475,4 +476,6 @@
void delRelationByPlatformId(String serverGBId);
PlatformCatalog queryDefaultCatalogInPlatform(String platformId);
+
+ List<ChannelSourceInfo> getChannelSource(String platformId, String gbId);
}
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/dao/ParentPlatformMapper.java b/src/main/java/com/genersoft/iot/vmp/storager/dao/ParentPlatformMapper.java
index ca8a72b..bb44325 100644
--- a/src/main/java/com/genersoft/iot/vmp/storager/dao/ParentPlatformMapper.java
+++ b/src/main/java/com/genersoft/iot/vmp/storager/dao/ParentPlatformMapper.java
@@ -1,6 +1,7 @@
package com.genersoft.iot.vmp.storager.dao;
import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
+import com.genersoft.iot.vmp.storager.dao.dto.ChannelSourceInfo;
import org.apache.ibatis.annotations.*;
import org.springframework.stereotype.Repository;
@@ -86,4 +87,9 @@
"WHERE serverGBId=#{platformId}"+
"</script>"})
int setDefaultCatalog(String platformId, String catalogId);
+
+ @Select("select 'channel' as name, count(pgc.platformId) count from platform_gb_channel pgc where pgc.platformId=#{platformId} and pgc.channelId =#{gbId} " +
+ "union " +
+ "select 'stream' as name, count(pgs.platformId) count from platform_gb_stream pgs left join gb_stream gs on pgs.gbStreamId = gs.id where pgs.platformId=#{platformId} and gs.gbId = #{gbId}")
+ List<ChannelSourceInfo> getChannelSource(String platformId, String gbId);
}
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/dao/dto/ChannelSourceInfo.java b/src/main/java/com/genersoft/iot/vmp/storager/dao/dto/ChannelSourceInfo.java
new file mode 100644
index 0000000..e8b91e7
--- /dev/null
+++ b/src/main/java/com/genersoft/iot/vmp/storager/dao/dto/ChannelSourceInfo.java
@@ -0,0 +1,22 @@
+package com.genersoft.iot.vmp.storager.dao.dto;
+
+public class ChannelSourceInfo {
+ private String name;
+ private int count;
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public int getCount() {
+ return count;
+ }
+
+ public void setCount(int count) {
+ this.count = count;
+ }
+}
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStoragerImpl.java b/src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStoragerImpl.java
index 08f4b26..464b788 100644
--- a/src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStoragerImpl.java
+++ b/src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStoragerImpl.java
@@ -14,6 +14,7 @@
import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
import com.genersoft.iot.vmp.storager.dao.*;
+import com.genersoft.iot.vmp.storager.dao.dto.ChannelSourceInfo;
import com.genersoft.iot.vmp.utils.node.ForestNodeMerger;
import com.genersoft.iot.vmp.vmanager.bean.DeviceChannelTree;
import com.genersoft.iot.vmp.vmanager.gb28181.platform.bean.ChannelReduce;
@@ -1104,4 +1105,9 @@
public PlatformCatalog queryDefaultCatalogInPlatform(String platformId) {
return catalogMapper.selectDefaultByPlatFormId(platformId);
}
+
+ @Override
+ public List<ChannelSourceInfo> getChannelSource(String platformId, String gbId) {
+ return platformMapper.getChannelSource(platformId, gbId);
+ }
}
diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/platform/PlatformController.java b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/platform/PlatformController.java
index 78b5d53..8fed6dd 100644
--- a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/platform/PlatformController.java
+++ b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/platform/PlatformController.java
@@ -137,6 +137,11 @@
wvpResult.setMsg("missing parameters");
return new ResponseEntity<>(wvpResult, HttpStatus.BAD_REQUEST);
}
+ if (parentPlatform.getServerPort()< 0 || parentPlatform.getServerPort() > 65535){
+ wvpResult.setCode(-1);
+ wvpResult.setMsg("error severPort");
+ return new ResponseEntity<>(wvpResult, HttpStatus.BAD_REQUEST);
+ }
ParentPlatform parentPlatformOld = storager.queryParentPlatByServerGBId(parentPlatform.getServerGBId());
if (parentPlatformOld != null) {
diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/record/GBRecordController.java b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/record/GBRecordController.java
index a8675e8..e565981 100644
--- a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/record/GBRecordController.java
+++ b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/record/GBRecordController.java
@@ -64,7 +64,7 @@
RequestMessage msg = new RequestMessage();
msg.setId(uuid);
msg.setKey(key);
- cmder.recordInfoQuery(device, channelId, startTime, endTime, sn, (eventResult -> {
+ cmder.recordInfoQuery(device, channelId, startTime, endTime, sn, null, null, null, (eventResult -> {
msg.setData("鏌ヨ褰曞儚澶辫触, status: " + eventResult.statusCode + ", message: " + eventResult.msg );
resultHolder.invokeResult(msg);
}));
diff --git a/src/main/resources/all-application.yml b/src/main/resources/all-application.yml
index f383629..f3f1fb3 100644
--- a/src/main/resources/all-application.yml
+++ b/src/main/resources/all-application.yml
@@ -1,7 +1,7 @@
-# 姝ら厤缃枃浠跺彧鏄敤浣滃睍绀烘墍鏈夐厤缃」锛� 涓嶅彲涓嶇洿鎺ヤ娇鐢�
+# 姝ら厤缃枃浠跺彧鏄敤浣滃睍绀烘墍鏈夐厤缃」锛� 涓嶅彲鐩存帴浣跨敤
spring:
diff --git a/web_src/src/components/control.vue b/web_src/src/components/control.vue
index 4928077..3651593 100644
--- a/web_src/src/components/control.vue
+++ b/web_src/src/components/control.vue
@@ -37,8 +37,20 @@
</el-popover>
<el-popover placement="bottom" width="900" height="300" trigger="click">
<div style="height: 600px;overflow:auto; padding: 20px">
+ <el-descriptions title="鍥芥爣閰嶇疆" border column="1">
+ <template slot="extra">
+ <el-button style="float: right;" type="primary" size="mini" icon="el-icon-document-copy" title="鐐瑰嚮鎷疯礉" v-clipboard="JSON.stringify(wvpServerConfig.sip)" @success="$message({type:'success', message:'鎴愬姛鎷疯礉鍒扮矘璐存澘'})"></el-button>
+ </template>
+ <el-descriptions-item v-for="(value, key, index) in wvpServerConfig.sip">
+ <template slot="label">
+ {{ getNameFromKey(key) }}
+ </template>
+ {{ value }}
+ </el-descriptions-item>
+ </el-descriptions>
- <el-descriptions title="鍩虹閰嶇疆" border column="1">
+ <div style="margin-top: 1rem">
+ <el-descriptions title="鍩虹閰嶇疆" border column="1">
<template slot="extra">
<el-button style="float: right;" type="primary" size="mini" icon="el-icon-document-copy" title="鐐瑰嚮鎷疯礉" v-clipboard="JSON.stringify(wvpServerConfig.base)" @success="$message({type:'success', message:'鎴愬姛鎷疯礉鍒扮矘璐存澘'})"></el-button>
</template>
@@ -68,18 +80,6 @@
</div>
</div>
- </el-descriptions-item>
- </el-descriptions>
- <div style="margin-top: 1rem">
- <el-descriptions title="鍥芥爣閰嶇疆" border column="1">
- <template slot="extra">
- <el-button style="float: right;" type="primary" size="mini" icon="el-icon-document-copy" title="鐐瑰嚮鎷疯礉" v-clipboard="JSON.stringify(wvpServerConfig.sip)" @success="$message({type:'success', message:'鎴愬姛鎷疯礉鍒扮矘璐存澘'})"></el-button>
- </template>
- <el-descriptions-item v-for="(value, key, index) in wvpServerConfig.sip" :key="key">
- <template slot="label">
- {{ getNameFromKey(key) }}
- </template>
- {{ value }}
</el-descriptions-item>
</el-descriptions>
</div>
--
Gitblit v1.8.0