Commit 9442c37ce73497a66d540f035e58201b54656e49
1 parent
d4fe0fb3
优化级联添加通道流程
Showing
20 changed files
with
606 additions
and
350 deletions
src/main/java/com/genersoft/iot/vmp/service/IGbStreamService.java
| @@ -17,7 +17,7 @@ public interface IGbStreamService { | @@ -17,7 +17,7 @@ public interface IGbStreamService { | ||
| 17 | * @param count | 17 | * @param count |
| 18 | * @return | 18 | * @return |
| 19 | */ | 19 | */ |
| 20 | - PageInfo<GbStream> getAll(Integer page, Integer count, String platFormId); | 20 | + PageInfo<GbStream> getAll(Integer page, Integer count, String platFormId, String catalogId,String query,Boolean pushing,String mediaServerId); |
| 21 | 21 | ||
| 22 | 22 | ||
| 23 | /** | 23 | /** |
src/main/java/com/genersoft/iot/vmp/service/impl/GbStreamServiceImpl.java
| @@ -52,9 +52,9 @@ public class GbStreamServiceImpl implements IGbStreamService { | @@ -52,9 +52,9 @@ public class GbStreamServiceImpl implements IGbStreamService { | ||
| 52 | private EventPublisher eventPublisher; | 52 | private EventPublisher eventPublisher; |
| 53 | 53 | ||
| 54 | @Override | 54 | @Override |
| 55 | - public PageInfo<GbStream> getAll(Integer page, Integer count, String platFormId) { | 55 | + public PageInfo<GbStream> getAll(Integer page, Integer count, String platFormId, String catalogId, String query, Boolean pushing, String mediaServerId) { |
| 56 | PageHelper.startPage(page, count); | 56 | PageHelper.startPage(page, count); |
| 57 | - List<GbStream> all = gbStreamMapper.selectAll(platFormId); | 57 | + List<GbStream> all = gbStreamMapper.selectAll(platFormId, catalogId, query, pushing, mediaServerId); |
| 58 | return new PageInfo<>(all); | 58 | return new PageInfo<>(all); |
| 59 | } | 59 | } |
| 60 | 60 | ||
| @@ -70,6 +70,7 @@ public class GbStreamServiceImpl implements IGbStreamService { | @@ -70,6 +70,7 @@ public class GbStreamServiceImpl implements IGbStreamService { | ||
| 70 | boolean result = false; | 70 | boolean result = false; |
| 71 | TransactionStatus transactionStatus = dataSourceTransactionManager.getTransaction(transactionDefinition); | 71 | TransactionStatus transactionStatus = dataSourceTransactionManager.getTransaction(transactionDefinition); |
| 72 | ParentPlatform parentPlatform = platformMapper.getParentPlatByServerGBId(platformId); | 72 | ParentPlatform parentPlatform = platformMapper.getParentPlatByServerGBId(platformId); |
| 73 | + if (catalogId == null) catalogId = parentPlatform.getCatalogId(); | ||
| 73 | try { | 74 | try { |
| 74 | List<DeviceChannel> deviceChannelList = new ArrayList<>(); | 75 | List<DeviceChannel> deviceChannelList = new ArrayList<>(); |
| 75 | for (GbStream gbStream : gbStreams) { | 76 | for (GbStream gbStream : gbStreams) { |
src/main/java/com/genersoft/iot/vmp/storager/IVideoManagerStorager.java
| @@ -239,7 +239,7 @@ public interface IVideoManagerStorager { | @@ -239,7 +239,7 @@ public interface IVideoManagerStorager { | ||
| 239 | /** | 239 | /** |
| 240 | * 查询通道信息,不区分设备(已关联平台或全部) | 240 | * 查询通道信息,不区分设备(已关联平台或全部) |
| 241 | */ | 241 | */ |
| 242 | - PageInfo<ChannelReduce> queryAllChannelList(int page, int count, String query, Boolean online, Boolean channelType, String platformId, Boolean inPlatform); | 242 | + PageInfo<ChannelReduce> queryAllChannelList(int page, int count, String query, Boolean online, Boolean channelType, String platformId, String catalogId); |
| 243 | 243 | ||
| 244 | /** | 244 | /** |
| 245 | * 查询设备的通道信息 | 245 | * 查询设备的通道信息 |
src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceChannelMapper.java
| @@ -93,28 +93,31 @@ public interface DeviceChannelMapper { | @@ -93,28 +93,31 @@ public interface DeviceChannelMapper { | ||
| 93 | void startPlay(String deviceId, String channelId, String streamId); | 93 | void startPlay(String deviceId, String channelId, String streamId); |
| 94 | 94 | ||
| 95 | 95 | ||
| 96 | + | ||
| 96 | @Select(value = {" <script>" + | 97 | @Select(value = {" <script>" + |
| 97 | - "SELECT * FROM ( "+ | ||
| 98 | - " SELECT dc.channelId, dc.deviceId, dc.name, de.manufacturer, de.hostAddress, " + | ||
| 99 | - "(SELECT count(0) FROM device_channel WHERE parentId=dc.channelId) as subCount, " + | ||
| 100 | - "(SELECT pc.platformId FROM platform_gb_channel pc WHERE pc.deviceId=dc.deviceId AND pc.channelId = dc.channelId AND pc.platformId = #{platformId}) as platformId, " + | ||
| 101 | - "(SELECT pc.catalogId FROM platform_gb_channel pc WHERE pc.deviceId=dc.deviceId AND pc.channelId = dc.channelId AND pc.platformId = #{platformId} ) as catalogId " + | ||
| 102 | - "FROM device_channel dc " + | ||
| 103 | - "LEFT JOIN device de ON dc.deviceId = de.deviceId " + | ||
| 104 | - " WHERE 1=1 " + | ||
| 105 | - " <if test='query != null'> AND (dc.channelId LIKE '%${query}%' OR dc.name LIKE '%${query}%' OR dc.name LIKE '%${query}%')</if> " + | ||
| 106 | - " <if test='online == true' > AND dc.status=1</if> " + | ||
| 107 | - " <if test='online == false' > AND dc.status=0</if> " + | ||
| 108 | - ") dcr" + | 98 | + "SELECT dc.channelId, "+ |
| 99 | + "dc.deviceId, " + | ||
| 100 | + "dc.name, " + | ||
| 101 | + "de.manufacturer, " + | ||
| 102 | + "de.hostAddress, " + | ||
| 103 | + "(SELECT count(0) FROM device_channel WHERE parentId = dc.channelId) as subCount, " + | ||
| 104 | + "pgc.platformId as platformId, " + | ||
| 105 | + "pgc.catalogId as catalogId " + | ||
| 106 | + "FROM device_channel dc " + | ||
| 107 | + "LEFT JOIN device de ON dc.deviceId = de.deviceId " + | ||
| 108 | + "LEFT JOIN platform_gb_channel pgc on de.deviceId = pgc.deviceId and pgc.channelId = dc.channelId " + | ||
| 109 | + "LEFT JOIN device_channel dc2 ON dc2.deviceId = de.deviceId AND dc2.parentId = dc.channelId " + | ||
| 109 | " WHERE 1=1 " + | 110 | " WHERE 1=1 " + |
| 110 | - " <if test='hasSubChannel!= null and hasSubChannel == true' > AND subCount >0</if> " + | ||
| 111 | - " <if test='hasSubChannel!= null and hasSubChannel == false' > AND subCount=0</if> " + | ||
| 112 | - " <if test='platformId != null and inPlatform == true ' > AND platformId='${platformId}'</if> " + | ||
| 113 | - " <if test='platformId != null and inPlatform == false ' > AND (platformId != '${platformId}' OR platformId is NULL ) </if> " + | ||
| 114 | - " ORDER BY deviceId, channelId ASC" + | 111 | + " <if test='query != null'> AND (dc.channelId LIKE '%${query}%' OR dc.name LIKE '%${query}%' OR dc.name LIKE '%${query}%')</if> " + |
| 112 | + " <if test='online == true' > AND dc.status=1</if> " + | ||
| 113 | + " <if test='online == false' > AND dc.status=0</if> " + | ||
| 114 | + " <if test='hasSubChannel!= null and hasSubChannel == true' > AND dc2.channelId is not null</if> " + | ||
| 115 | + " <if test='hasSubChannel!= null and hasSubChannel == false' > AND dc2.channelId is null</if> " + | ||
| 116 | + " <if test='catalogId == null ' > AND pgc.platformId is null AND pgc.catalogId is null</if> " + | ||
| 117 | + " <if test='catalogId != null ' > AND pgc.platformId =#{platformId} AND pgc.catalogId = #{catalogId}</if> " + | ||
| 118 | + " ORDER BY dc.deviceId, dc.channelId ASC" + | ||
| 115 | " </script>"}) | 119 | " </script>"}) |
| 116 | - | ||
| 117 | - List<ChannelReduce> queryChannelListInAll(String query, Boolean online, Boolean hasSubChannel, String platformId, Boolean inPlatform); | 120 | + List<ChannelReduce> queryChannelListInAll(String query, Boolean online, Boolean hasSubChannel, String platformId, String catalogId); |
| 118 | 121 | ||
| 119 | @Select("SELECT * FROM device_channel WHERE channelId=#{channelId}") | 122 | @Select("SELECT * FROM device_channel WHERE channelId=#{channelId}") |
| 120 | List<DeviceChannel> queryChannelByChannelId( String channelId); | 123 | List<DeviceChannel> queryChannelByChannelId( String channelId); |
src/main/java/com/genersoft/iot/vmp/storager/dao/GbStreamMapper.java
| @@ -37,10 +37,20 @@ public interface GbStreamMapper { | @@ -37,10 +37,20 @@ public interface GbStreamMapper { | ||
| 37 | @Delete("DELETE FROM gb_stream WHERE app=#{app} AND stream=#{stream}") | 37 | @Delete("DELETE FROM gb_stream WHERE app=#{app} AND stream=#{stream}") |
| 38 | int del(String app, String stream); | 38 | int del(String app, String stream); |
| 39 | 39 | ||
| 40 | - @Select("SELECT gs.*, pgs.platformId AS platformId, pgs.catalogId AS catalogId FROM gb_stream gs " + | ||
| 41 | - "LEFT JOIN platform_gb_stream pgs ON gs.app = pgs.app AND gs.stream = pgs.stream AND (pgs.platformId = #{platformId} OR pgs.platformId is null)" + | ||
| 42 | - "order by gs.id asc ") | ||
| 43 | - List<GbStream> selectAll(String platformId); | 40 | + @Select("<script> "+ |
| 41 | + "SELECT gs.*, pgs.platformId AS platformId, pgs.catalogId AS catalogId FROM gb_stream gs " + | ||
| 42 | + "LEFT JOIN platform_gb_stream pgs ON gs.app = pgs.app AND gs.stream = pgs.stream " + | ||
| 43 | + "WHERE " + | ||
| 44 | + "1=1 " + | ||
| 45 | + " <if test='catalogId != null'> AND pgs.platformId = #{platformId} AND pgs.catalogId = #{catalogId}</if> " + | ||
| 46 | + " <if test='catalogId == null'> AND pgs.platformId is null AND pgs.catalogId is null</if> " + | ||
| 47 | + " <if test='query != null'> AND (gs.app LIKE '%${query}%' OR gs.stream LIKE '%${query}%' OR gs.gbId LIKE '%${query}%' OR gs.name LIKE '%${query}%')</if> " + | ||
| 48 | + " <if test='pushing == true' > AND gs.status=1</if>" + | ||
| 49 | + " <if test='pushing == false' > AND gs.status=0</if>" + | ||
| 50 | + " <if test='mediaServerId != null' > AND gs.mediaServerId=#{mediaServerId} </if>" + | ||
| 51 | + " order by gs.id asc " + | ||
| 52 | + "</script>") | ||
| 53 | + List<GbStream> selectAll(String platformId, String catalogId, String query, Boolean pushing, String mediaServerId); | ||
| 44 | 54 | ||
| 45 | @Select("SELECT * FROM gb_stream WHERE app=#{app} AND stream=#{stream}") | 55 | @Select("SELECT * FROM gb_stream WHERE app=#{app} AND stream=#{stream}") |
| 46 | StreamProxyItem selectOne(String app, String stream); | 56 | StreamProxyItem selectOne(String app, String stream); |
src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStoragerImpl.java
| @@ -575,16 +575,16 @@ public class VideoManagerStoragerImpl implements IVideoManagerStorager { | @@ -575,16 +575,16 @@ public class VideoManagerStoragerImpl implements IVideoManagerStorager { | ||
| 575 | 575 | ||
| 576 | @Override | 576 | @Override |
| 577 | public PageInfo<ChannelReduce> queryAllChannelList(int page, int count, String query, Boolean online, | 577 | public PageInfo<ChannelReduce> queryAllChannelList(int page, int count, String query, Boolean online, |
| 578 | - Boolean channelType, String platformId, Boolean inPlatform) { | 578 | + Boolean channelType, String platformId, String catalogId) { |
| 579 | PageHelper.startPage(page, count); | 579 | PageHelper.startPage(page, count); |
| 580 | - List<ChannelReduce> all = deviceChannelMapper.queryChannelListInAll(query, online, channelType, platformId, inPlatform); | 580 | + List<ChannelReduce> all = deviceChannelMapper.queryChannelListInAll(query, online, channelType, platformId, catalogId); |
| 581 | return new PageInfo<>(all); | 581 | return new PageInfo<>(all); |
| 582 | } | 582 | } |
| 583 | 583 | ||
| 584 | @Override | 584 | @Override |
| 585 | public List<ChannelReduce> queryChannelListInParentPlatform(String platformId) { | 585 | public List<ChannelReduce> queryChannelListInParentPlatform(String platformId) { |
| 586 | 586 | ||
| 587 | - return deviceChannelMapper.queryChannelListInAll(null, null, null, platformId, true); | 587 | + return deviceChannelMapper.queryChannelListInAll(null, null, null, platformId, null); |
| 588 | } | 588 | } |
| 589 | 589 | ||
| 590 | @Override | 590 | @Override |
src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/gbStream/GbStreamController.java
| @@ -12,6 +12,7 @@ import io.swagger.annotations.ApiOperation; | @@ -12,6 +12,7 @@ import io.swagger.annotations.ApiOperation; | ||
| 12 | import org.slf4j.Logger; | 12 | import org.slf4j.Logger; |
| 13 | import org.slf4j.LoggerFactory; | 13 | import org.slf4j.LoggerFactory; |
| 14 | import org.springframework.beans.factory.annotation.Autowired; | 14 | import org.springframework.beans.factory.annotation.Autowired; |
| 15 | +import org.springframework.util.StringUtils; | ||
| 15 | import org.springframework.web.bind.annotation.*; | 16 | import org.springframework.web.bind.annotation.*; |
| 16 | 17 | ||
| 17 | @Api(tags = "视频流关联到级联平台") | 18 | @Api(tags = "视频流关联到级联平台") |
| @@ -40,15 +41,33 @@ public class GbStreamController { | @@ -40,15 +41,33 @@ public class GbStreamController { | ||
| 40 | @ApiImplicitParams({ | 41 | @ApiImplicitParams({ |
| 41 | @ApiImplicitParam(name = "page", value = "当前页", required = true , dataTypeClass = Integer.class), | 42 | @ApiImplicitParam(name = "page", value = "当前页", required = true , dataTypeClass = Integer.class), |
| 42 | @ApiImplicitParam(name = "count", value = "每页条数", required = true , dataTypeClass = Integer.class), | 43 | @ApiImplicitParam(name = "count", value = "每页条数", required = true , dataTypeClass = Integer.class), |
| 43 | - @ApiImplicitParam(name = "platformId", value = "平台ID", required = true , dataTypeClass = Integer.class), | 44 | + @ApiImplicitParam(name = "platformId", value = "平台ID", required = true , dataTypeClass = String.class), |
| 45 | + @ApiImplicitParam(name = "catalogId", value = "目录ID", required = false , dataTypeClass = String.class), | ||
| 46 | + @ApiImplicitParam(name="query", value = "查询内容", required = false , dataTypeClass = String.class), | ||
| 47 | + @ApiImplicitParam(name="pushing", value = "是否正在推流", required = false , dataTypeClass = Boolean.class), | ||
| 48 | + @ApiImplicitParam(name="mediaServerId", value = "流媒体ID", required = false , dataTypeClass = String.class), | ||
| 49 | + | ||
| 44 | }) | 50 | }) |
| 45 | @GetMapping(value = "/list") | 51 | @GetMapping(value = "/list") |
| 46 | @ResponseBody | 52 | @ResponseBody |
| 47 | public PageInfo<GbStream> list(@RequestParam(required = true)Integer page, | 53 | public PageInfo<GbStream> list(@RequestParam(required = true)Integer page, |
| 48 | @RequestParam(required = true)Integer count, | 54 | @RequestParam(required = true)Integer count, |
| 49 | - @RequestParam(required = true)String platformId){ | 55 | + @RequestParam(required = true)String platformId, |
| 56 | + @RequestParam(required = false)String catalogId, | ||
| 57 | + @RequestParam(required = false)String query, | ||
| 58 | + @RequestParam(required = false)Boolean pushing, | ||
| 59 | + @RequestParam(required = false)String mediaServerId){ | ||
| 60 | + if (StringUtils.isEmpty(catalogId)) { | ||
| 61 | + catalogId = null; | ||
| 62 | + } | ||
| 63 | + if (StringUtils.isEmpty(query)) { | ||
| 64 | + query = null; | ||
| 65 | + } | ||
| 66 | + if (StringUtils.isEmpty(mediaServerId)) { | ||
| 67 | + mediaServerId = null; | ||
| 68 | + } | ||
| 50 | 69 | ||
| 51 | - return gbStreamService.getAll(page, count, platformId); | 70 | + return gbStreamService.getAll(page, count, platformId, catalogId, query, pushing, mediaServerId); |
| 52 | } | 71 | } |
| 53 | 72 | ||
| 54 | 73 |
src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/platform/PlatformController.java
| @@ -65,6 +65,25 @@ public class PlatformController { | @@ -65,6 +65,25 @@ public class PlatformController { | ||
| 65 | result.put("password", sipConfig.getPassword()); | 65 | result.put("password", sipConfig.getPassword()); |
| 66 | return new ResponseEntity<>(result, HttpStatus.OK); | 66 | return new ResponseEntity<>(result, HttpStatus.OK); |
| 67 | } | 67 | } |
| 68 | + /** | ||
| 69 | + * 获取级联服务器信息 | ||
| 70 | + * @return | ||
| 71 | + */ | ||
| 72 | + @ApiOperation("获取国标服务的配置") | ||
| 73 | + @GetMapping("/info/{id}") | ||
| 74 | + public ResponseEntity<WVPResult<ParentPlatform>> getPlatform(@PathVariable String id) { | ||
| 75 | + ParentPlatform parentPlatform = storager.queryParentPlatByServerGBId(id); | ||
| 76 | + WVPResult<ParentPlatform> wvpResult = new WVPResult<>(); | ||
| 77 | + if (parentPlatform != null) { | ||
| 78 | + wvpResult.setCode(0); | ||
| 79 | + wvpResult.setMsg("success"); | ||
| 80 | + wvpResult.setData(parentPlatform); | ||
| 81 | + }else { | ||
| 82 | + wvpResult.setCode(-1); | ||
| 83 | + wvpResult.setMsg("未查询到此平台"); | ||
| 84 | + } | ||
| 85 | + return new ResponseEntity<>(wvpResult, HttpStatus.OK); | ||
| 86 | + } | ||
| 68 | 87 | ||
| 69 | /** | 88 | /** |
| 70 | * 分页查询级联平台 | 89 | * 分页查询级联平台 |
| @@ -282,29 +301,33 @@ public class PlatformController { | @@ -282,29 +301,33 @@ public class PlatformController { | ||
| 282 | @ApiImplicitParam(name = "page", value = "当前页", dataTypeClass = Integer.class), | 301 | @ApiImplicitParam(name = "page", value = "当前页", dataTypeClass = Integer.class), |
| 283 | @ApiImplicitParam(name = "count", value = "每页条数", dataTypeClass = Integer.class), | 302 | @ApiImplicitParam(name = "count", value = "每页条数", dataTypeClass = Integer.class), |
| 284 | @ApiImplicitParam(name = "platformId", value = "上级平台ID", dataTypeClass = String.class), | 303 | @ApiImplicitParam(name = "platformId", value = "上级平台ID", dataTypeClass = String.class), |
| 304 | + @ApiImplicitParam(name = "catalogId", value = "目录ID", dataTypeClass = String.class), | ||
| 285 | @ApiImplicitParam(name = "query", value = "查询内容", dataTypeClass = String.class), | 305 | @ApiImplicitParam(name = "query", value = "查询内容", dataTypeClass = String.class), |
| 286 | @ApiImplicitParam(name = "online", value = "是否在线", dataTypeClass = Boolean.class), | 306 | @ApiImplicitParam(name = "online", value = "是否在线", dataTypeClass = Boolean.class), |
| 287 | - @ApiImplicitParam(name = "choosed", value = "是否已选中", dataTypeClass = Boolean.class), | ||
| 288 | @ApiImplicitParam(name = "channelType", value = "通道类型", dataTypeClass = Boolean.class), | 307 | @ApiImplicitParam(name = "channelType", value = "通道类型", dataTypeClass = Boolean.class), |
| 289 | }) | 308 | }) |
| 290 | @GetMapping("/channel_list") | 309 | @GetMapping("/channel_list") |
| 291 | @ResponseBody | 310 | @ResponseBody |
| 292 | public PageInfo<ChannelReduce> channelList(int page, int count, | 311 | public PageInfo<ChannelReduce> channelList(int page, int count, |
| 293 | @RequestParam(required = false) String platformId, | 312 | @RequestParam(required = false) String platformId, |
| 313 | + @RequestParam(required = false) String catalogId, | ||
| 294 | @RequestParam(required = false) String query, | 314 | @RequestParam(required = false) String query, |
| 295 | @RequestParam(required = false) Boolean online, | 315 | @RequestParam(required = false) Boolean online, |
| 296 | - @RequestParam(required = false) Boolean choosed, | ||
| 297 | @RequestParam(required = false) Boolean channelType){ | 316 | @RequestParam(required = false) Boolean channelType){ |
| 298 | 317 | ||
| 299 | // if (logger.isDebugEnabled()) { | 318 | // if (logger.isDebugEnabled()) { |
| 300 | // logger.debug("查询所有所有通道API调用"); | 319 | // logger.debug("查询所有所有通道API调用"); |
| 301 | // } | 320 | // } |
| 302 | - PageInfo<ChannelReduce> channelReduces = null; | ||
| 303 | - if (platformId != null ) { | ||
| 304 | - channelReduces = storager.queryAllChannelList(page, count, query, online, channelType, platformId, choosed); | ||
| 305 | - }else { | ||
| 306 | - channelReduces = storager.queryAllChannelList(page, count, query, online, channelType, null, false); | 321 | + if(StringUtils.isEmpty(platformId)) { |
| 322 | + platformId = null; | ||
| 323 | + } | ||
| 324 | + if(StringUtils.isEmpty(query)) { | ||
| 325 | + query = null; | ||
| 326 | + } | ||
| 327 | + if(StringUtils.isEmpty(platformId) || StringUtils.isEmpty(catalogId)) { | ||
| 328 | + catalogId = null; | ||
| 307 | } | 329 | } |
| 330 | + PageInfo<ChannelReduce> channelReduces = storager.queryAllChannelList(page, count, query, online, channelType, platformId, catalogId); | ||
| 308 | 331 | ||
| 309 | return channelReduces; | 332 | return channelReduces; |
| 310 | } | 333 | } |
| @@ -371,11 +394,11 @@ public class PlatformController { | @@ -371,11 +394,11 @@ public class PlatformController { | ||
| 371 | } | 394 | } |
| 372 | List<PlatformCatalog> platformCatalogList = storager.getChildrenCatalogByPlatform(platformId, parentId); | 395 | List<PlatformCatalog> platformCatalogList = storager.getChildrenCatalogByPlatform(platformId, parentId); |
| 373 | // 查询下属的国标通道 | 396 | // 查询下属的国标通道 |
| 374 | - List<PlatformCatalog> catalogsForChannel = storager.queryChannelInParentPlatformAndCatalog(platformId, parentId); | 397 | +// List<PlatformCatalog> catalogsForChannel = storager.queryChannelInParentPlatformAndCatalog(platformId, parentId); |
| 375 | // 查询下属的直播流通道 | 398 | // 查询下属的直播流通道 |
| 376 | - List<PlatformCatalog> catalogsForStream = storager.queryStreamInParentPlatformAndCatalog(platformId, parentId); | ||
| 377 | - platformCatalogList.addAll(catalogsForChannel); | ||
| 378 | - platformCatalogList.addAll(catalogsForStream); | 399 | +// List<PlatformCatalog> catalogsForStream = storager.queryStreamInParentPlatformAndCatalog(platformId, parentId); |
| 400 | +// platformCatalogList.addAll(catalogsForChannel); | ||
| 401 | +// platformCatalogList.addAll(catalogsForStream); | ||
| 379 | WVPResult<List<PlatformCatalog>> result = new WVPResult<>(); | 402 | WVPResult<List<PlatformCatalog>> result = new WVPResult<>(); |
| 380 | result.setCode(0); | 403 | result.setCode(0); |
| 381 | result.setMsg("success"); | 404 | result.setMsg("success"); |
web_src/index.html
| @@ -4,6 +4,7 @@ | @@ -4,6 +4,7 @@ | ||
| 4 | <meta charset="utf-8"> | 4 | <meta charset="utf-8"> |
| 5 | <meta name="viewport" content="width=device-width,initial-scale=1.0"> | 5 | <meta name="viewport" content="width=device-width,initial-scale=1.0"> |
| 6 | <title>国标28181</title> | 6 | <title>国标28181</title> |
| 7 | + <link rel="shortcut icon" href="static/favicon.ico" type="image/x-icon"> | ||
| 7 | <link rel="stylesheet" type="text/css" href="./static/css/iconfont.css"> | 8 | <link rel="stylesheet" type="text/css" href="./static/css/iconfont.css"> |
| 8 | <link rel="stylesheet" type="text/css" href="./static/css/login.css"> | 9 | <link rel="stylesheet" type="text/css" href="./static/css/login.css"> |
| 9 | </head> | 10 | </head> |
web_src/src/components/PushVideoList.vue
| @@ -35,11 +35,7 @@ | @@ -35,11 +35,7 @@ | ||
| 35 | <devicePlayer ref="devicePlayer"></devicePlayer> | 35 | <devicePlayer ref="devicePlayer"></devicePlayer> |
| 36 | <addStreamTOGB ref="addStreamTOGB"></addStreamTOGB> | 36 | <addStreamTOGB ref="addStreamTOGB"></addStreamTOGB> |
| 37 | <el-table ref="pushListTable" :data="pushList" border style="width: 100%" :height="winHeight" @selection-change="handleSelectionChange" :row-key="(row)=> row.app + row.stream"> | 37 | <el-table ref="pushListTable" :data="pushList" border style="width: 100%" :height="winHeight" @selection-change="handleSelectionChange" :row-key="(row)=> row.app + row.stream"> |
| 38 | - <el-table-column | ||
| 39 | - align="center" | ||
| 40 | - type="selection" | ||
| 41 | - :reserve-selection="true" | ||
| 42 | - width="55"> | 38 | + <el-table-column align="center" type="selection" :reserve-selection="true" width="55"> |
| 43 | </el-table-column> | 39 | </el-table-column> |
| 44 | <el-table-column prop="name" label="名称" align="center"> | 40 | <el-table-column prop="name" label="名称" align="center"> |
| 45 | </el-table-column> | 41 | </el-table-column> |
web_src/src/components/UiHeader.vue
| @@ -3,7 +3,7 @@ | @@ -3,7 +3,7 @@ | ||
| 3 | <el-menu router :default-active="activeIndex" menu-trigger="click" background-color="#545c64" text-color="#fff" active-text-color="#ffd04b" mode="horizontal"> | 3 | <el-menu router :default-active="activeIndex" menu-trigger="click" background-color="#545c64" text-color="#fff" active-text-color="#ffd04b" mode="horizontal"> |
| 4 | <el-menu-item index="/">控制台</el-menu-item> | 4 | <el-menu-item index="/">控制台</el-menu-item> |
| 5 | <el-menu-item index="/live">实时监控</el-menu-item> | 5 | <el-menu-item index="/live">实时监控</el-menu-item> |
| 6 | - <el-menu-item index="/deviceList">设备列表</el-menu-item> | 6 | + <el-menu-item index="/deviceList">国标设备</el-menu-item> |
| 7 | <el-menu-item index="/pushVideoList">推流列表</el-menu-item> | 7 | <el-menu-item index="/pushVideoList">推流列表</el-menu-item> |
| 8 | <el-menu-item index="/streamProxyList">拉流代理</el-menu-item> | 8 | <el-menu-item index="/streamProxyList">拉流代理</el-menu-item> |
| 9 | <el-menu-item index="/cloudRecord">云端录像</el-menu-item> | 9 | <el-menu-item index="/cloudRecord">云端录像</el-menu-item> |
web_src/src/components/dialog/catalogEdit.vue
| @@ -77,8 +77,7 @@ export default { | @@ -77,8 +77,7 @@ export default { | ||
| 77 | }) | 77 | }) |
| 78 | .then((res)=> { | 78 | .then((res)=> { |
| 79 | if (res.data.code === 0) { | 79 | if (res.data.code === 0) { |
| 80 | - console.log("添加/修改成功") | ||
| 81 | - if (this.submitCallback)this.submitCallback() | 80 | + if (this.submitCallback)this.submitCallback(this.form) |
| 82 | }else { | 81 | }else { |
| 83 | this.$message({ | 82 | this.$message({ |
| 84 | showClose: true, | 83 | showClose: true, |
web_src/src/components/dialog/chooseChannel.vue
| @@ -8,7 +8,7 @@ | @@ -8,7 +8,7 @@ | ||
| 8 | <el-tab-pane label="目录结构" name="catalog"> | 8 | <el-tab-pane label="目录结构" name="catalog"> |
| 9 | <el-container> | 9 | <el-container> |
| 10 | <el-main v-bind:style="{backgroundColor: '#FFF', maxHeight: winHeight + 'px'}"> | 10 | <el-main v-bind:style="{backgroundColor: '#FFF', maxHeight: winHeight + 'px'}"> |
| 11 | - <chooseChannelForCatalog ref="chooseChannelForCatalog" :platformId=platformId :platformName=platformName :defaultCatalogId=defaultCatalogId :catalogIdChange="catalogIdChange"></chooseChannelForCatalog> | 11 | + <chooseChannelForCatalog ref="chooseChannelForCatalog" :platformId=platformId :platformName=platformName :defaultCatalogId=defaultCatalogId :catalogIdChange="catalogIdChange" ></chooseChannelForCatalog> |
| 12 | </el-main> | 12 | </el-main> |
| 13 | </el-container> | 13 | </el-container> |
| 14 | </el-tab-pane> | 14 | </el-tab-pane> |
| @@ -20,14 +20,14 @@ | @@ -20,14 +20,14 @@ | ||
| 20 | <el-tab-pane label="国标通道" name="gbChannel"> | 20 | <el-tab-pane label="国标通道" name="gbChannel"> |
| 21 | <el-container> | 21 | <el-container> |
| 22 | <el-main style="background-color: #FFF;"> | 22 | <el-main style="background-color: #FFF;"> |
| 23 | - <chooseChannelForGb ref="chooseChannelForGb" :catalogId="catalogId" :platformId=platformId :updateChoosedCallback="updateChooseChannelCallback"></chooseChannelForGb> | 23 | + <chooseChannelForGb ref="chooseChannelForGb" :catalogId="catalogId" :catalogName="catalogName" :platformId=platformId ></chooseChannelForGb> |
| 24 | </el-main> | 24 | </el-main> |
| 25 | </el-container> | 25 | </el-container> |
| 26 | </el-tab-pane> | 26 | </el-tab-pane> |
| 27 | <el-tab-pane label="直播流通道" name="streamchannel"> | 27 | <el-tab-pane label="直播流通道" name="streamchannel"> |
| 28 | <el-container> | 28 | <el-container> |
| 29 | <el-main style="background-color: #FFF;"> | 29 | <el-main style="background-color: #FFF;"> |
| 30 | - <chooseChannelFoStream ref="chooseChannelFoStream" :catalogId="catalogId" :platformId=platformId :updateChoosedCallback="updateChooseChannelCallback"></chooseChannelFoStream> | 30 | + <chooseChannelFoStream ref="chooseChannelFoStream" :catalogId="catalogId" :catalogName="catalogName" :currentCatalogId="currentCatalogId" :platformId=platformId ></chooseChannelFoStream> |
| 31 | </el-main> | 31 | </el-main> |
| 32 | </el-container> | 32 | </el-container> |
| 33 | </el-tab-pane> | 33 | </el-tab-pane> |
| @@ -61,6 +61,8 @@ export default { | @@ -61,6 +61,8 @@ export default { | ||
| 61 | catalogTabActiveName: "catalog", | 61 | catalogTabActiveName: "catalog", |
| 62 | platformId: "", | 62 | platformId: "", |
| 63 | catalogId: "", | 63 | catalogId: "", |
| 64 | + catalogName: "", | ||
| 65 | + currentCatalogId: "", | ||
| 64 | platformName: "", | 66 | platformName: "", |
| 65 | defaultCatalogId: "", | 67 | defaultCatalogId: "", |
| 66 | showDialog: false, | 68 | showDialog: false, |
| @@ -108,14 +110,10 @@ export default { | @@ -108,14 +110,10 @@ export default { | ||
| 108 | console.log(error); | 110 | console.log(error); |
| 109 | }); | 111 | }); |
| 110 | }, | 112 | }, |
| 111 | - catalogIdChange: function (id) { | ||
| 112 | - console.log("中间模块收到: " + id) | 113 | + catalogIdChange: function (id, name) { |
| 113 | this.catalogId = id; | 114 | this.catalogId = id; |
| 115 | + this.catalogName = name; | ||
| 114 | }, | 116 | }, |
| 115 | - updateChooseChannelCallback (id){ | ||
| 116 | - console.log("中间模块收到选择通道变化: " + id) | ||
| 117 | - this.$refs.chooseChannelForCatalog.refreshCatalogById(id) | ||
| 118 | - } | ||
| 119 | } | 117 | } |
| 120 | }; | 118 | }; |
| 121 | </script> | 119 | </script> |
web_src/src/components/dialog/chooseChannelForCatalog.vue
| @@ -7,19 +7,21 @@ | @@ -7,19 +7,21 @@ | ||
| 7 | empty-text="未知节点" | 7 | empty-text="未知节点" |
| 8 | node-key="id" | 8 | node-key="id" |
| 9 | default-expand-all | 9 | default-expand-all |
| 10 | - :highlight-current="true" | 10 | + :highlight-current="false" |
| 11 | :expand-on-click-node="false" | 11 | :expand-on-click-node="false" |
| 12 | :props="props" | 12 | :props="props" |
| 13 | :load="loadNode" | 13 | :load="loadNode" |
| 14 | @node-contextmenu="contextmenuEventHandler" | 14 | @node-contextmenu="contextmenuEventHandler" |
| 15 | + @node-click="nodeClickHandler" | ||
| 15 | lazy> | 16 | lazy> |
| 16 | <span class="custom-tree-node" slot-scope="{ node, data }" style="width: 100%"> | 17 | <span class="custom-tree-node" slot-scope="{ node, data }" style="width: 100%"> |
| 17 | - <el-radio v-if="node.data.type === 0" style="margin-right: 0" v-model="chooseId" :label="node.data.id">{{''}}</el-radio> | 18 | + <el-radio v-if="node.data.type === 0 || node.data.type === -1" style="margin-right: 0" v-model="chooseId" :label="node.data.id">{{''}}</el-radio> |
| 19 | + <span v-if="node.data.type === -1 && node.level === 1" style="font-size: 12px" class="iconfont icon-ziyuan"></span> | ||
| 18 | <span v-if="node.data.type === 0 && node.level === 1" class="el-icon-s-home"></span> | 20 | <span v-if="node.data.type === 0 && node.level === 1" class="el-icon-s-home"></span> |
| 19 | <span v-if="node.data.type === 0 && node.level > 1" class="el-icon-folder-opened"></span> | 21 | <span v-if="node.data.type === 0 && node.level > 1" class="el-icon-folder-opened"></span> |
| 20 | <span v-if="node.data.type === 1" class="iconfont icon-shexiangtou"></span> | 22 | <span v-if="node.data.type === 1" class="iconfont icon-shexiangtou"></span> |
| 21 | <span v-if="node.data.type === 2" class="iconfont icon-zhibo"></span> | 23 | <span v-if="node.data.type === 2" class="iconfont icon-zhibo"></span> |
| 22 | - <span style="padding-left: 1px">{{ node.label }}</span> | 24 | + <span style=" padding-left: 1px">{{ node.label }}</span> |
| 23 | <span> | 25 | <span> |
| 24 | <i style="margin-left: 5rem; color: #9d9d9d; padding-right: 20px" v-if="node.data.id === defaultCatalogIdSign">默认</i> | 26 | <i style="margin-left: 5rem; color: #9d9d9d; padding-right: 20px" v-if="node.data.id === defaultCatalogIdSign">默认</i> |
| 25 | </span> | 27 | </span> |
| @@ -42,7 +44,7 @@ export default { | @@ -42,7 +44,7 @@ export default { | ||
| 42 | this.defaultCatalogIdSign = this.defaultCatalogId; | 44 | this.defaultCatalogIdSign = this.defaultCatalogId; |
| 43 | this.initData(); | 45 | this.initData(); |
| 44 | setTimeout(()=>{ | 46 | setTimeout(()=>{ |
| 45 | - if (this.catalogIdChange)this.catalogIdChange(this.defaultCatalogId); | 47 | + if (this.catalogIdChange)this.catalogIdChange(this.defaultCatalogId, this.platformName); |
| 46 | }, 100) | 48 | }, 100) |
| 47 | 49 | ||
| 48 | }, | 50 | }, |
| @@ -59,6 +61,7 @@ export default { | @@ -59,6 +61,7 @@ export default { | ||
| 59 | defaultCatalogIdSign: null, | 61 | defaultCatalogIdSign: null, |
| 60 | chooseNode: null, | 62 | chooseNode: null, |
| 61 | chooseId: "", | 63 | chooseId: "", |
| 64 | + chooseName: "", | ||
| 62 | catalogTree: null, | 65 | catalogTree: null, |
| 63 | contextmenuShow: false | 66 | contextmenuShow: false |
| 64 | 67 | ||
| @@ -69,10 +72,6 @@ export default { | @@ -69,10 +72,6 @@ export default { | ||
| 69 | console.log(newData) | 72 | console.log(newData) |
| 70 | this.initData() | 73 | this.initData() |
| 71 | }, | 74 | }, |
| 72 | - chooseId(newData, oldData){ | ||
| 73 | - console.log("发送: " + newData) | ||
| 74 | - if (this.catalogIdChange)this.catalogIdChange(newData); | ||
| 75 | - }, | ||
| 76 | }, | 75 | }, |
| 77 | methods: { | 76 | methods: { |
| 78 | initData: function () { | 77 | initData: function () { |
| @@ -123,9 +122,12 @@ export default { | @@ -123,9 +122,12 @@ export default { | ||
| 123 | editCatalog: function (data, node){ | 122 | editCatalog: function (data, node){ |
| 124 | let that = this; | 123 | let that = this; |
| 125 | // 打开添加弹窗 | 124 | // 打开添加弹窗 |
| 126 | - that.$refs.catalogEdit.openDialog(true, data.id, data.name, data.parentId, (data)=>{ | 125 | + that.$refs.catalogEdit.openDialog(true, data.id, data.name, data.parentId, (newData)=>{ |
| 127 | node.parent.loaded = false | 126 | node.parent.loaded = false |
| 128 | node.parent.expand(); | 127 | node.parent.expand(); |
| 128 | + if (data.id === this.chooseId && newData.name !== data.name) { | ||
| 129 | + if (this.catalogIdChange)this.catalogIdChange(this.chooseId, newData.name); | ||
| 130 | + } | ||
| 129 | }); | 131 | }); |
| 130 | 132 | ||
| 131 | }, | 133 | }, |
| @@ -172,11 +174,17 @@ export default { | @@ -172,11 +174,17 @@ export default { | ||
| 172 | }, | 174 | }, |
| 173 | loadNode: function(node, resolve){ | 175 | loadNode: function(node, resolve){ |
| 174 | if (node.level === 0) { | 176 | if (node.level === 0) { |
| 175 | - resolve([{ | ||
| 176 | - name: this.platformName, | ||
| 177 | - id: this.platformId, | ||
| 178 | - type: 0 | ||
| 179 | - }]); | 177 | + resolve([ |
| 178 | + { | ||
| 179 | + name: "未分配", | ||
| 180 | + id: null, | ||
| 181 | + type: -1 | ||
| 182 | + },{ | ||
| 183 | + name: this.platformName, | ||
| 184 | + id: this.platformId, | ||
| 185 | + type: 0 | ||
| 186 | + } | ||
| 187 | + ]); | ||
| 180 | } | 188 | } |
| 181 | if (node.level >= 1){ | 189 | if (node.level >= 1){ |
| 182 | this.getCatalog(node.data.id, resolve) | 190 | this.getCatalog(node.data.id, resolve) |
| @@ -291,6 +299,11 @@ export default { | @@ -291,6 +299,11 @@ export default { | ||
| 291 | 299 | ||
| 292 | return false; | 300 | return false; |
| 293 | }, | 301 | }, |
| 302 | + nodeClickHandler: function (data, node, tree){ | ||
| 303 | + this.chooseId = data.id; | ||
| 304 | + this.chooseName = data.name; | ||
| 305 | + if (this.catalogIdChange)this.catalogIdChange(this.chooseId, this.chooseName); | ||
| 306 | + } | ||
| 294 | } | 307 | } |
| 295 | }; | 308 | }; |
| 296 | </script> | 309 | </script> |
web_src/src/components/dialog/chooseChannelForGb.vue
| 1 | <template> | 1 | <template> |
| 2 | <div id="chooseChannelForGb" > | 2 | <div id="chooseChannelForGb" > |
| 3 | - <div style="background-color: #FFFFFF; margin-bottom: 1rem; position: relative; padding: 0.5rem; text-align: left;font-size: 14px;"> | 3 | + <div style="font-size: 17px; color: #606060; white-space: nowrap; line-height: 30px; font-family: monospace;"> |
| 4 | + <span v-if="catalogId == null">{{catalogName}}的直播流</span> | ||
| 5 | + <span v-if="catalogId != null">{{catalogName}}({{catalogId}})的直播流</span> | ||
| 6 | + </div> | ||
| 7 | + <div style="background-color: #FFFFFF; position: relative; padding: 0.5rem; text-align: left;font-size: 14px;"> | ||
| 4 | 搜索: <el-input @input="search" style="margin-right: 1rem; width: auto;" size="mini" placeholder="关键字" prefix-icon="el-icon-search" v-model="searchSrt" clearable> </el-input> | 8 | 搜索: <el-input @input="search" style="margin-right: 1rem; width: auto;" size="mini" placeholder="关键字" prefix-icon="el-icon-search" v-model="searchSrt" clearable> </el-input> |
| 5 | 9 | ||
| 6 | 通道类型: <el-select size="mini" @change="search" style="margin-right: 1rem; width:6rem" v-model="channelType" placeholder="请选择" default-first-option> | 10 | 通道类型: <el-select size="mini" @change="search" style="margin-right: 1rem; width:6rem" v-model="channelType" placeholder="请选择" default-first-option> |
| @@ -9,21 +13,18 @@ | @@ -9,21 +13,18 @@ | ||
| 9 | <el-option label="子目录" value="true"></el-option> | 13 | <el-option label="子目录" value="true"></el-option> |
| 10 | </el-select> | 14 | </el-select> |
| 11 | 15 | ||
| 12 | - 选择状态: <el-select size="mini" style="margin-right: 1rem; width:6rem" v-model="choosed" @change="search" placeholder="请选择" default-first-option> | ||
| 13 | - <el-option label="全部" value=""></el-option> | ||
| 14 | - <el-option label="已选择" value="true"></el-option> | ||
| 15 | - <el-option label="未选择" value="false"></el-option> | ||
| 16 | - </el-select> | ||
| 17 | - | ||
| 18 | 在线状态: <el-select size="mini" style="margin-right: 1rem; width:6rem" @change="search" v-model="online" placeholder="请选择" default-first-option> | 16 | 在线状态: <el-select size="mini" style="margin-right: 1rem; width:6rem" @change="search" v-model="online" placeholder="请选择" default-first-option> |
| 19 | <el-option label="全部" value=""></el-option> | 17 | <el-option label="全部" value=""></el-option> |
| 20 | <el-option label="在线" value="true"></el-option> | 18 | <el-option label="在线" value="true"></el-option> |
| 21 | <el-option label="离线" value="false"></el-option> | 19 | <el-option label="离线" value="false"></el-option> |
| 22 | </el-select> | 20 | </el-select> |
| 23 | - | ||
| 24 | -<!-- <el-checkbox @change="shareAllCheckedChange">全部共享</el-checkbox>--> | 21 | + <el-button v-if="catalogId !== null" icon="el-icon-delete" size="mini" style="margin-right: 1rem;" :disabled="gbChannels.length === 0 || multipleSelection.length === 0" type="danger" @click="batchDel">批量移除</el-button> |
| 22 | + <el-button v-if="catalogId === null" icon="el-icon-plus" size="mini" style="margin-right: 1rem;" :disabled="gbChannels.length === 0 || multipleSelection.length === 0" @click="batchAdd">批量添加</el-button> | ||
| 25 | </div> | 23 | </div> |
| 26 | - <el-table ref="gbChannelsTable" :data="gbChannels" border style="width: 100%" :height="winHeight"> | 24 | + |
| 25 | + <el-table ref="gbChannelsTable" :data="gbChannels" border style="width: 100%" :height="winHeight" :row-key="(row)=> row.deviceId + row.channelId" @selection-change="handleSelectionChange"> | ||
| 26 | + <el-table-column align="center" type="selection" :reserve-selection="true" width="55"> | ||
| 27 | + </el-table-column> | ||
| 27 | <el-table-column prop="channelId" label="通道编号" width="180" align="center"> | 28 | <el-table-column prop="channelId" label="通道编号" width="180" align="center"> |
| 28 | </el-table-column> | 29 | </el-table-column> |
| 29 | <el-table-column prop="name" label="通道名称" show-overflow-tooltip align="center"> | 30 | <el-table-column prop="name" label="通道名称" show-overflow-tooltip align="center"> |
| @@ -50,10 +51,12 @@ | @@ -50,10 +51,12 @@ | ||
| 50 | </el-table> | 51 | </el-table> |
| 51 | <el-pagination style="float: right;margin-top: 1rem;" @size-change="handleSizeChange" @current-change="currentChange" :current-page="currentPage" :page-size="count" :page-sizes="[10, 20, 30, 50]" layout="total, sizes, prev, pager, next" :total="total"> | 52 | <el-pagination style="float: right;margin-top: 1rem;" @size-change="handleSizeChange" @current-change="currentChange" :current-page="currentPage" :page-size="count" :page-sizes="[10, 20, 30, 50]" layout="total, sizes, prev, pager, next" :total="total"> |
| 52 | </el-pagination> | 53 | </el-pagination> |
| 54 | + <getCatalog ref="getCatalog" :platformId="platformId" ></getCatalog> | ||
| 53 | </div> | 55 | </div> |
| 54 | </template> | 56 | </template> |
| 55 | 57 | ||
| 56 | <script> | 58 | <script> |
| 59 | +import getCatalog from './getCatalog' | ||
| 57 | export default { | 60 | export default { |
| 58 | name: 'chooseChannelForGb', | 61 | name: 'chooseChannelForGb', |
| 59 | computed: { | 62 | computed: { |
| @@ -65,10 +68,13 @@ export default { | @@ -65,10 +68,13 @@ export default { | ||
| 65 | // }; | 68 | // }; |
| 66 | // } | 69 | // } |
| 67 | }, | 70 | }, |
| 68 | - props: ['platformId','catalogId', 'updateChoosedCallback'], | 71 | + props: ['platformId','catalogId', 'catalogName'], |
| 69 | created() { | 72 | created() { |
| 70 | this.initData(); | 73 | this.initData(); |
| 71 | }, | 74 | }, |
| 75 | + components: { | ||
| 76 | + getCatalog, | ||
| 77 | + }, | ||
| 72 | data() { | 78 | data() { |
| 73 | return { | 79 | return { |
| 74 | gbChannels: [], | 80 | gbChannels: [], |
| @@ -80,7 +86,8 @@ export default { | @@ -80,7 +86,8 @@ export default { | ||
| 80 | currentPage: 1, | 86 | currentPage: 1, |
| 81 | count: 10, | 87 | count: 10, |
| 82 | total: 0, | 88 | total: 0, |
| 83 | - eventEnanle: false, | 89 | + eventEnable: false, |
| 90 | + multipleSelection: [], | ||
| 84 | winHeight: window.innerHeight - 400, | 91 | winHeight: window.innerHeight - 400, |
| 85 | 92 | ||
| 86 | }; | 93 | }; |
| @@ -88,8 +95,10 @@ export default { | @@ -88,8 +95,10 @@ export default { | ||
| 88 | watch:{ | 95 | watch:{ |
| 89 | platformId(newData, oldData){ | 96 | platformId(newData, oldData){ |
| 90 | console.log(newData) | 97 | console.log(newData) |
| 91 | - this.initData() | ||
| 92 | - | 98 | + this.getChannelList() |
| 99 | + }, | ||
| 100 | + catalogId(newData, oldData){ | ||
| 101 | + this.getChannelList() | ||
| 93 | }, | 102 | }, |
| 94 | }, | 103 | }, |
| 95 | methods: { | 104 | methods: { |
| @@ -105,28 +114,24 @@ export default { | @@ -105,28 +114,24 @@ export default { | ||
| 105 | console.log(val) | 114 | console.log(val) |
| 106 | this.initData(); | 115 | this.initData(); |
| 107 | }, | 116 | }, |
| 108 | - rowcheckedChange: function (val, row) { | ||
| 109 | - console.log(val) | ||
| 110 | - console.log(row) | ||
| 111 | - }, | ||
| 112 | add: function (row) { | 117 | add: function (row) { |
| 113 | - console.log(row) | ||
| 114 | - row.catalogId = this.catalogId | ||
| 115 | - row.platformId = this.platformId | ||
| 116 | - this.$axios({ | ||
| 117 | - method:"post", | ||
| 118 | - url:"/api/platform/update_channel_for_gb", | ||
| 119 | - data:{ | ||
| 120 | - platformId: this.platformId, | ||
| 121 | - channelReduces: [row], | ||
| 122 | - catalogId: this.catalogId | ||
| 123 | - } | ||
| 124 | - }).then((res)=>{ | ||
| 125 | - console.log("保存成功") | ||
| 126 | - if(this.updateChoosedCallback)this.updateChoosedCallback(this.catalogId) | ||
| 127 | - }).catch(function (error) { | ||
| 128 | - console.log(error); | ||
| 129 | - }); | 118 | + this.getCatalogFromUser((catalogId)=> { |
| 119 | + this.$axios({ | ||
| 120 | + method:"post", | ||
| 121 | + url:"/api/platform/update_channel_for_gb", | ||
| 122 | + data:{ | ||
| 123 | + platformId: this.platformId, | ||
| 124 | + channelReduces: [row], | ||
| 125 | + catalogId: catalogId | ||
| 126 | + } | ||
| 127 | + }).then((res)=>{ | ||
| 128 | + console.log("保存成功") | ||
| 129 | + this.getChannelList(); | ||
| 130 | + }).catch(function (error) { | ||
| 131 | + console.log(error); | ||
| 132 | + }); | ||
| 133 | + }) | ||
| 134 | + | ||
| 130 | }, | 135 | }, |
| 131 | remove: function (row) { | 136 | remove: function (row) { |
| 132 | console.log(row) | 137 | console.log(row) |
| @@ -140,91 +145,87 @@ export default { | @@ -140,91 +145,87 @@ export default { | ||
| 140 | } | 145 | } |
| 141 | }).then((res)=>{ | 146 | }).then((res)=>{ |
| 142 | console.log("移除成功") | 147 | console.log("移除成功") |
| 143 | - if(this.updateChoosedCallback)this.updateChoosedCallback(row.catalogId) | ||
| 144 | - row.platformId = null; | ||
| 145 | - row.catalogId = null | 148 | + this.getChannelList(); |
| 146 | }).catch(function (error) { | 149 | }).catch(function (error) { |
| 147 | console.log(error); | 150 | console.log(error); |
| 148 | }); | 151 | }); |
| 149 | }, | 152 | }, |
| 150 | - checkedChange: function (val) { | ||
| 151 | - let that = this; | ||
| 152 | - if (!that.eventEnanle) { | ||
| 153 | - return; | ||
| 154 | - } | ||
| 155 | - let newData = {}; | ||
| 156 | - let addData = []; | ||
| 157 | - let delData = []; | ||
| 158 | - if (val.length > 0) { | ||
| 159 | - for (let i = 0; i < val.length; i++) { | ||
| 160 | - const element = val[i]; | ||
| 161 | - let key = element.deviceId + "_" + element.channelId; | ||
| 162 | - newData[key] = element; | ||
| 163 | - if (!!!that.gbChoosechannel[key]){ | ||
| 164 | - addData.push(element) | ||
| 165 | - }else{ | ||
| 166 | - delete that.gbChoosechannel[key] | ||
| 167 | - } | ||
| 168 | - } | ||
| 169 | - | ||
| 170 | - let oldKeys = Object.keys(that.gbChoosechannel); | ||
| 171 | - if (oldKeys.length > 0) { | ||
| 172 | - for (let i = 0; i < oldKeys.length; i++) { | ||
| 173 | - const key = oldKeys[i]; | ||
| 174 | - delData.push(that.gbChoosechannel[key]) | ||
| 175 | - } | ||
| 176 | - } | ||
| 177 | - | ||
| 178 | - }else{ | ||
| 179 | - let oldKeys = Object.keys(that.gbChoosechannel); | ||
| 180 | - if (oldKeys.length > 0) { | ||
| 181 | - for (let i = 0; i < oldKeys.length; i++) { | ||
| 182 | - const key = oldKeys[i]; | ||
| 183 | - delData.push(that.gbChoosechannel[key]) | ||
| 184 | - } | ||
| 185 | - } | ||
| 186 | - } | ||
| 187 | - | ||
| 188 | - that.gbChoosechannel = newData; | ||
| 189 | - if (Object.keys(addData).length >0) { | ||
| 190 | - that.$axios({ | ||
| 191 | - method:"post", | ||
| 192 | - url:"/api/platform/update_channel_for_gb", | ||
| 193 | - data:{ | ||
| 194 | - platformId: that.platformId, | ||
| 195 | - channelReduces: addData, | ||
| 196 | - catalogId: that.catalogId | ||
| 197 | - } | ||
| 198 | - }).then((res)=>{ | ||
| 199 | - console.log("保存成功") | ||
| 200 | - if(that.updateChoosedCallback)that.updateChoosedCallback(that.catalogId) | ||
| 201 | - }).catch(function (error) { | ||
| 202 | - console.log(error); | ||
| 203 | - }); | ||
| 204 | - } | ||
| 205 | - if (delData.length >0) { | ||
| 206 | - that.$axios({ | ||
| 207 | - method:"delete", | ||
| 208 | - url:"/api/platform/del_channel_for_gb", | ||
| 209 | - data:{ | ||
| 210 | - platformId: that.platformId, | ||
| 211 | - channelReduces: delData | ||
| 212 | - } | ||
| 213 | - }).then((res)=>{ | ||
| 214 | - console.log("移除成功") | ||
| 215 | - let nodeIds = new Array(); | ||
| 216 | - for (let i = 0; i < delData.length; i++) { | ||
| 217 | - nodeIds.push(delData[i].channelId) | ||
| 218 | - } | ||
| 219 | - if(that.updateChoosedCallback)that.updateChoosedCallback(null, nodeIds) | ||
| 220 | - }).catch(function (error) { | ||
| 221 | - console.log(error); | ||
| 222 | - }); | ||
| 223 | - } | ||
| 224 | - }, | ||
| 225 | - shareAllCheckedChange: function (val) { | ||
| 226 | - | ||
| 227 | - }, | 153 | + // checkedChange: function (val) { |
| 154 | + // let that = this; | ||
| 155 | + // if (!that.eventEnable) { | ||
| 156 | + // return; | ||
| 157 | + // } | ||
| 158 | + // let newData = {}; | ||
| 159 | + // let addData = []; | ||
| 160 | + // let delData = []; | ||
| 161 | + // if (val.length > 0) { | ||
| 162 | + // for (let i = 0; i < val.length; i++) { | ||
| 163 | + // const element = val[i]; | ||
| 164 | + // let key = element.deviceId + "_" + element.channelId; | ||
| 165 | + // newData[key] = element; | ||
| 166 | + // if (!!!that.gbChoosechannel[key]){ | ||
| 167 | + // addData.push(element) | ||
| 168 | + // }else{ | ||
| 169 | + // delete that.gbChoosechannel[key] | ||
| 170 | + // } | ||
| 171 | + // } | ||
| 172 | + // | ||
| 173 | + // let oldKeys = Object.keys(that.gbChoosechannel); | ||
| 174 | + // if (oldKeys.length > 0) { | ||
| 175 | + // for (let i = 0; i < oldKeys.length; i++) { | ||
| 176 | + // const key = oldKeys[i]; | ||
| 177 | + // delData.push(that.gbChoosechannel[key]) | ||
| 178 | + // } | ||
| 179 | + // } | ||
| 180 | + // | ||
| 181 | + // }else{ | ||
| 182 | + // let oldKeys = Object.keys(that.gbChoosechannel); | ||
| 183 | + // if (oldKeys.length > 0) { | ||
| 184 | + // for (let i = 0; i < oldKeys.length; i++) { | ||
| 185 | + // const key = oldKeys[i]; | ||
| 186 | + // delData.push(that.gbChoosechannel[key]) | ||
| 187 | + // } | ||
| 188 | + // } | ||
| 189 | + // } | ||
| 190 | + // | ||
| 191 | + // that.gbChoosechannel = newData; | ||
| 192 | + // if (Object.keys(addData).length >0) { | ||
| 193 | + // that.$axios({ | ||
| 194 | + // method:"post", | ||
| 195 | + // url:"/api/platform/update_channel_for_gb", | ||
| 196 | + // data:{ | ||
| 197 | + // platformId: that.platformId, | ||
| 198 | + // channelReduces: addData, | ||
| 199 | + // catalogId: that.catalogId | ||
| 200 | + // } | ||
| 201 | + // }).then((res)=>{ | ||
| 202 | + // console.log("保存成功") | ||
| 203 | + // }).catch(function (error) { | ||
| 204 | + // console.log(error); | ||
| 205 | + // }); | ||
| 206 | + // } | ||
| 207 | + // if (delData.length >0) { | ||
| 208 | + // that.$axios({ | ||
| 209 | + // method:"delete", | ||
| 210 | + // url:"/api/platform/del_channel_for_gb", | ||
| 211 | + // data:{ | ||
| 212 | + // platformId: that.platformId, | ||
| 213 | + // channelReduces: delData | ||
| 214 | + // } | ||
| 215 | + // }).then((res)=>{ | ||
| 216 | + // console.log("移除成功") | ||
| 217 | + // let nodeIds = new Array(); | ||
| 218 | + // for (let i = 0; i < delData.length; i++) { | ||
| 219 | + // nodeIds.push(delData[i].channelId) | ||
| 220 | + // } | ||
| 221 | + // }).catch(function (error) { | ||
| 222 | + // console.log(error); | ||
| 223 | + // }); | ||
| 224 | + // } | ||
| 225 | + // }, | ||
| 226 | + // shareAllCheckedChange: function (val) { | ||
| 227 | + // | ||
| 228 | + // }, | ||
| 228 | getChannelList: function () { | 229 | getChannelList: function () { |
| 229 | let that = this; | 230 | let that = this; |
| 230 | 231 | ||
| @@ -236,7 +237,7 @@ export default { | @@ -236,7 +237,7 @@ export default { | ||
| 236 | count: that.count, | 237 | count: that.count, |
| 237 | query: that.searchSrt, | 238 | query: that.searchSrt, |
| 238 | online: that.online, | 239 | online: that.online, |
| 239 | - choosed: that.choosed, | 240 | + catalogId: that.catalogId, |
| 240 | platformId: that.platformId, | 241 | platformId: that.platformId, |
| 241 | channelType: that.channelType | 242 | channelType: that.channelType |
| 242 | } | 243 | } |
| @@ -248,20 +249,7 @@ export default { | @@ -248,20 +249,7 @@ export default { | ||
| 248 | // 防止出现表格错位 | 249 | // 防止出现表格错位 |
| 249 | that.$nextTick(() => { | 250 | that.$nextTick(() => { |
| 250 | that.$refs.gbChannelsTable.doLayout(); | 251 | that.$refs.gbChannelsTable.doLayout(); |
| 251 | - // 默认选中 | ||
| 252 | - var chooseGBS = []; | ||
| 253 | - for (let i = 0; i < res.data.list.length; i++) { | ||
| 254 | - const row = res.data.list[i]; | ||
| 255 | - console.log(row.platformId) | ||
| 256 | - if (row.platformId == that.platformId) { | ||
| 257 | - that.$refs.gbChannelsTable.toggleRowSelection(row, true); | ||
| 258 | - chooseGBS.push(row) | ||
| 259 | - that.gbChoosechannel[row.deviceId+ "_" + row.channelId] = row; | ||
| 260 | - | ||
| 261 | - } | ||
| 262 | - } | ||
| 263 | - that.eventEnanle = true; | ||
| 264 | - // that.checkedChange(chooseGBS) | 252 | + that.eventEnable = true; |
| 265 | }) | 253 | }) |
| 266 | console.log(that.gbChoosechannel) | 254 | console.log(that.gbChoosechannel) |
| 267 | }) | 255 | }) |
| @@ -276,10 +264,55 @@ export default { | @@ -276,10 +264,55 @@ export default { | ||
| 276 | handleGBSelectionChange: function() { | 264 | handleGBSelectionChange: function() { |
| 277 | this.initData(); | 265 | this.initData(); |
| 278 | }, | 266 | }, |
| 279 | - // catalogIdChange: function(id) { | ||
| 280 | - // this.catalogId = id; | ||
| 281 | - // console.log("通道选择模块收到: " + id) | ||
| 282 | - // }, | 267 | + batchDel: function() { |
| 268 | + this.$confirm(`确认这${this.multipleSelection.length}个通道吗?`, '提示', { | ||
| 269 | + confirmButtonText: '确定', | ||
| 270 | + cancelButtonText: '取消', | ||
| 271 | + type: 'warning' | ||
| 272 | + }).then(() => { | ||
| 273 | + this.$axios({ | ||
| 274 | + method:"delete", | ||
| 275 | + url:"/api/platform/del_channel_for_gb", | ||
| 276 | + data:{ | ||
| 277 | + platformId: this.platformId, | ||
| 278 | + channelReduces: this.multipleSelection | ||
| 279 | + } | ||
| 280 | + }).then((res)=>{ | ||
| 281 | + console.log("移除成功") | ||
| 282 | + this.$refs.gbChannelsTable.clearSelection() | ||
| 283 | + this.getChannelList(); | ||
| 284 | + }).catch(function (error) { | ||
| 285 | + console.log(error); | ||
| 286 | + }); | ||
| 287 | + }).catch(() => { | ||
| 288 | + }); | ||
| 289 | + }, | ||
| 290 | + batchAdd: function() { | ||
| 291 | + this.getCatalogFromUser((catalogId)=> { | ||
| 292 | + | ||
| 293 | + this.$axios({ | ||
| 294 | + method: "post", | ||
| 295 | + url: "/api/platform/update_channel_for_gb", | ||
| 296 | + data: { | ||
| 297 | + platformId: this.platformId, | ||
| 298 | + channelReduces: this.multipleSelection, | ||
| 299 | + catalogId: catalogId, | ||
| 300 | + } | ||
| 301 | + }).then((res) => { | ||
| 302 | + console.log("保存成功") | ||
| 303 | + this.$refs.gbChannelsTable.clearSelection() | ||
| 304 | + this.getChannelList(); | ||
| 305 | + }).catch(function (error) { | ||
| 306 | + console.log(error); | ||
| 307 | + }); | ||
| 308 | + }); | ||
| 309 | + }, | ||
| 310 | + handleSelectionChange: function (val) { | ||
| 311 | + this.multipleSelection = val; | ||
| 312 | + }, | ||
| 313 | + getCatalogFromUser(callback){ | ||
| 314 | + this.$refs.getCatalog.openDialog(callback) | ||
| 315 | + }, | ||
| 283 | } | 316 | } |
| 284 | }; | 317 | }; |
| 285 | </script> | 318 | </script> |
web_src/src/components/dialog/chooseChannelForStream.vue
| 1 | <template> | 1 | <template> |
| 2 | <div id="chooseChannelFoStream" > | 2 | <div id="chooseChannelFoStream" > |
| 3 | - <el-table ref="gbStreamsTable" :data="gbStreams" border style="width: 100%" :height="winHeight"> | 3 | + <div style="font-size: 17px; color: #606060; white-space: nowrap; line-height: 30px; font-family: monospace;"> |
| 4 | + <span v-if="catalogId == null">{{catalogName}}的直播流</span> | ||
| 5 | + <span v-if="catalogId != null">{{catalogName}}({{catalogId}})的直播流</span> | ||
| 6 | + </div> | ||
| 7 | + <div style="background-color: #FFFFFF; margin-bottom: 1rem; position: relative; padding: 0.5rem; text-align: left;font-size: 14px;"> | ||
| 8 | + | ||
| 9 | + 搜索: <el-input @input="getChannelList" style="margin-right: 1rem; width: auto;" size="mini" placeholder="关键字" prefix-icon="el-icon-search" v-model="searchSrt" clearable> </el-input> | ||
| 10 | + | ||
| 11 | +<!-- 流媒体: <el-select size="mini" @change="getChannelList" style="margin-right: 1rem;" v-model="mediaServerId" placeholder="请选择" default-first-option>--> | ||
| 12 | +<!-- <el-option label="全部" value=""></el-option>--> | ||
| 13 | +<!-- <el-option--> | ||
| 14 | +<!-- v-for="item in mediaServerList"--> | ||
| 15 | +<!-- :key="item.id"--> | ||
| 16 | +<!-- :label="item.id"--> | ||
| 17 | +<!-- :value="item.id">--> | ||
| 18 | +<!-- </el-option>--> | ||
| 19 | +<!-- </el-select>--> | ||
| 20 | + 推流状态: <el-select size="mini" style="margin-right: 1rem;" @change="getChannelList" v-model="pushing" placeholder="请选择" default-first-option> | ||
| 21 | + <el-option label="全部" value=""></el-option> | ||
| 22 | + <el-option label="推流进行中" value="true"></el-option> | ||
| 23 | + <el-option label="推流未进行" value="false"></el-option> | ||
| 24 | + </el-select> | ||
| 25 | + <el-button v-if="catalogId !== null" icon="el-icon-delete" size="mini" style="margin-right: 1rem;" :disabled="gbStreams.length === 0 || multipleSelection.length === 0" type="danger" @click="batchDel">批量移除</el-button> | ||
| 26 | + <el-button v-if="catalogId === null" icon="el-icon-plus" size="mini" style="margin-right: 1rem;" :disabled="gbStreams.length === 0 || multipleSelection.length === 0" @click="batchAdd">批量添加</el-button> | ||
| 27 | + </div> | ||
| 28 | + <el-table ref="gbStreamsTable" :data="gbStreams" border style="width: 100%" :height="winHeight" :row-key="(row)=> row.app + row.stream" @selection-change="handleSelectionChange"> | ||
| 29 | + <el-table-column align="center" type="selection" :reserve-selection="true" width="55"> | ||
| 30 | + </el-table-column> | ||
| 4 | <el-table-column prop="name" label="名称" show-overflow-tooltip align="center"> | 31 | <el-table-column prop="name" label="名称" show-overflow-tooltip align="center"> |
| 5 | </el-table-column> | 32 | </el-table-column> |
| 6 | <el-table-column prop="app" label="应用名" show-overflow-tooltip align="center"> | 33 | <el-table-column prop="app" label="应用名" show-overflow-tooltip align="center"> |
| @@ -20,18 +47,21 @@ | @@ -20,18 +47,21 @@ | ||
| 20 | <el-table-column label="操作" width="100" align="center" fixed="right" > | 47 | <el-table-column label="操作" width="100" align="center" fixed="right" > |
| 21 | <template slot-scope="scope"> | 48 | <template slot-scope="scope"> |
| 22 | <el-button-group> | 49 | <el-button-group> |
| 23 | - <el-button size="mini" icon="el-icon-plus" v-if="!scope.row.platformId" @click="add(scope.row)">添加</el-button> | ||
| 24 | - <el-button size="mini" icon="el-icon-delete" v-if="scope.row.platformId" type="danger" @click="remove(scope.row)">移除</el-button> | 50 | + <el-button size="mini" icon="el-icon-plus" v-if="!scope.row.platformId" @click="add(scope.row, scope)">添加</el-button> |
| 51 | + <el-button size="mini" icon="el-icon-delete" v-if="scope.row.platformId" type="danger" @click="remove(scope.row, scope)">移除</el-button> | ||
| 25 | </el-button-group> | 52 | </el-button-group> |
| 26 | </template> | 53 | </template> |
| 27 | </el-table-column> | 54 | </el-table-column> |
| 28 | </el-table> | 55 | </el-table> |
| 29 | <el-pagination style="float: right;margin-top: 1rem;" @size-change="handleSizeChange" @current-change="currentChange" :current-page="currentPage" :page-size="count" :page-sizes="[10, 20, 30, 50]" layout="total, sizes, prev, pager, next" :total="total"> | 56 | <el-pagination style="float: right;margin-top: 1rem;" @size-change="handleSizeChange" @current-change="currentChange" :current-page="currentPage" :page-size="count" :page-sizes="[10, 20, 30, 50]" layout="total, sizes, prev, pager, next" :total="total"> |
| 30 | </el-pagination> | 57 | </el-pagination> |
| 58 | + <getCatalog ref="getCatalog" :platformId="platformId" ></getCatalog> | ||
| 31 | </div> | 59 | </div> |
| 32 | </template> | 60 | </template> |
| 33 | 61 | ||
| 34 | <script> | 62 | <script> |
| 63 | +import MediaServer from './../service/MediaServer' | ||
| 64 | +import getCatalog from './getCatalog' | ||
| 35 | export default { | 65 | export default { |
| 36 | name: 'chooseChannelFoStream', | 66 | name: 'chooseChannelFoStream', |
| 37 | computed: { | 67 | computed: { |
| @@ -43,73 +73,81 @@ export default { | @@ -43,73 +73,81 @@ export default { | ||
| 43 | // }; | 73 | // }; |
| 44 | // } | 74 | // } |
| 45 | }, | 75 | }, |
| 46 | - props: ['platformId', 'catalogId', 'updateChoosedCallback'], | 76 | + props: ['platformId', 'catalogId', 'catalogName'], |
| 47 | created() { | 77 | created() { |
| 48 | this.initData(); | 78 | this.initData(); |
| 49 | }, | 79 | }, |
| 80 | + components: { | ||
| 81 | + getCatalog, | ||
| 82 | + }, | ||
| 50 | data() { | 83 | data() { |
| 51 | return { | 84 | return { |
| 52 | gbStreams: [], | 85 | gbStreams: [], |
| 53 | gbChoosechannel:{}, | 86 | gbChoosechannel:{}, |
| 54 | - searchSrt: "", | ||
| 55 | channelType: "", | 87 | channelType: "", |
| 56 | online: "", | 88 | online: "", |
| 57 | choosed: "", | 89 | choosed: "", |
| 58 | currentPage: 1, | 90 | currentPage: 1, |
| 59 | count: 10, | 91 | count: 10, |
| 60 | total: 0, | 92 | total: 0, |
| 61 | - eventEnanle: false, | 93 | + searchSrt: "", |
| 94 | + pushing: "", | ||
| 95 | + mediaServerId: "", | ||
| 96 | + mediaServerList: [], | ||
| 97 | + mediaServerObj : new MediaServer(), | ||
| 98 | + eventEnable: false, | ||
| 99 | + multipleSelection: [], | ||
| 62 | winHeight: window.innerHeight - 350, | 100 | winHeight: window.innerHeight - 350, |
| 63 | 101 | ||
| 64 | }; | 102 | }; |
| 65 | }, | 103 | }, |
| 66 | watch:{ | 104 | watch:{ |
| 67 | platformId(newData, oldData){ | 105 | platformId(newData, oldData){ |
| 68 | - console.log(newData) | ||
| 69 | - this.initData() | ||
| 70 | - | 106 | + this.getChannelList() |
| 107 | + }, | ||
| 108 | + catalogId(newData, oldData){ | ||
| 109 | + this.getChannelList() | ||
| 71 | }, | 110 | }, |
| 72 | }, | 111 | }, |
| 73 | methods: { | 112 | methods: { |
| 74 | initData: function() { | 113 | initData: function() { |
| 114 | + this.mediaServerObj.getOnlineMediaServerList((data)=>{ | ||
| 115 | + this.mediaServerList = data.data; | ||
| 116 | + }) | ||
| 75 | this.getChannelList(); | 117 | this.getChannelList(); |
| 76 | }, | 118 | }, |
| 77 | currentChange: function (val) { | 119 | currentChange: function (val) { |
| 78 | this.currentPage = val; | 120 | this.currentPage = val; |
| 79 | - this.initData(); | 121 | + this.getChannelList(); |
| 80 | }, | 122 | }, |
| 81 | handleSizeChange: function (val) { | 123 | handleSizeChange: function (val) { |
| 82 | this.count = val; | 124 | this.count = val; |
| 83 | console.log(val) | 125 | console.log(val) |
| 84 | - this.initData(); | 126 | + this.getChannelList(); |
| 85 | 127 | ||
| 86 | }, | 128 | }, |
| 87 | - rowcheckedChanage: function (val, row) { | ||
| 88 | - console.log(val) | ||
| 89 | - console.log(row) | ||
| 90 | - }, | ||
| 91 | - add: function (row) { | ||
| 92 | - console.log(row) | ||
| 93 | - row.catalogId = this.catalogId | ||
| 94 | - row.platformId = this.platformId | ||
| 95 | - this.$axios({ | ||
| 96 | - method:"post", | ||
| 97 | - url:"/api/gbStream/add", | ||
| 98 | - data:{ | ||
| 99 | - platformId: this.platformId, | ||
| 100 | - catalogId: this.catalogId, | ||
| 101 | - gbStreams: [row], | ||
| 102 | - } | ||
| 103 | - }).then((res)=>{ | ||
| 104 | - console.log("保存成功") | ||
| 105 | - if(this.updateChoosedCallback)this.updateChoosedCallback(this.catalogId) | ||
| 106 | - }).catch(function (error) { | ||
| 107 | - console.log(error); | ||
| 108 | - }); | ||
| 109 | - }, | ||
| 110 | - remove: function (row) { | ||
| 111 | - console.log(row) | 129 | + add: function (row, scope) { |
| 130 | + this.getCatalogFromUser((catalogId)=>{ | ||
| 131 | + this.$axios({ | ||
| 132 | + method:"post", | ||
| 133 | + url:"/api/gbStream/add", | ||
| 134 | + data:{ | ||
| 135 | + platformId: this.platformId, | ||
| 136 | + catalogId: catalogId, | ||
| 137 | + gbStreams: [row], | ||
| 138 | + } | ||
| 139 | + }).then((res)=>{ | ||
| 140 | + console.log("保存成功") | ||
| 141 | + // this.gbStreams.splice(scope.$index,1) | ||
| 142 | + this.getChannelList(); | ||
| 143 | + }).catch(function (error) { | ||
| 144 | + console.log(error); | ||
| 145 | + }); | ||
| 146 | + }) | ||
| 147 | + | ||
| 112 | 148 | ||
| 149 | + }, | ||
| 150 | + remove: function (row, scope) { | ||
| 113 | this.$axios({ | 151 | this.$axios({ |
| 114 | method:"delete", | 152 | method:"delete", |
| 115 | url:"/api/gbStream/del", | 153 | url:"/api/gbStream/del", |
| @@ -119,92 +157,12 @@ export default { | @@ -119,92 +157,12 @@ export default { | ||
| 119 | } | 157 | } |
| 120 | }).then((res)=>{ | 158 | }).then((res)=>{ |
| 121 | console.log("移除成功") | 159 | console.log("移除成功") |
| 122 | - if(this.updateChoosedCallback)this.updateChoosedCallback(row.catalogId) | ||
| 123 | - row.platformId = null; | ||
| 124 | - row.catalogId = null | 160 | + // this.gbStreams.splice(scope.$index,1) |
| 161 | + this.getChannelList(); | ||
| 125 | }).catch(function (error) { | 162 | }).catch(function (error) { |
| 126 | console.log(error); | 163 | console.log(error); |
| 127 | }); | 164 | }); |
| 128 | }, | 165 | }, |
| 129 | - checkedChanage: function (val) { | ||
| 130 | - var that = this; | ||
| 131 | - if (!that.eventEnanle) { | ||
| 132 | - return; | ||
| 133 | - } | ||
| 134 | - | ||
| 135 | - var newData = {}; | ||
| 136 | - var addData = []; | ||
| 137 | - var delData = []; | ||
| 138 | - if (val.length > 0) { | ||
| 139 | - for (let i = 0; i < val.length; i++) { | ||
| 140 | - const element = val[i]; | ||
| 141 | - var key = element.app + "_" + element.stream; | ||
| 142 | - newData[key] = element; | ||
| 143 | - if (!!!that.gbChoosechannel[key]){ | ||
| 144 | - addData.push(element) | ||
| 145 | - }else{ | ||
| 146 | - delete that.gbChoosechannel[key] | ||
| 147 | - } | ||
| 148 | - } | ||
| 149 | - | ||
| 150 | - var oldKeys = Object.keys(that.gbChoosechannel); | ||
| 151 | - if (oldKeys.length > 0) { | ||
| 152 | - for (let i = 0; i < oldKeys.length; i++) { | ||
| 153 | - const key = oldKeys[i]; | ||
| 154 | - delData.push(that.gbChoosechannel[key]) | ||
| 155 | - } | ||
| 156 | - } | ||
| 157 | - | ||
| 158 | - }else{ | ||
| 159 | - var oldKeys = Object.keys(that.gbChoosechannel); | ||
| 160 | - if (oldKeys.length > 0) { | ||
| 161 | - for (let i = 0; i < oldKeys.length; i++) { | ||
| 162 | - const key = oldKeys[i]; | ||
| 163 | - delData.push(that.gbChoosechannel[key]) | ||
| 164 | - } | ||
| 165 | - } | ||
| 166 | - } | ||
| 167 | - | ||
| 168 | - that.gbChoosechannel = newData; | ||
| 169 | - if (Object.keys(addData).length >0) { | ||
| 170 | - console.log(addData) | ||
| 171 | - that.$axios({ | ||
| 172 | - method:"post", | ||
| 173 | - url:"/api/gbStream/add", | ||
| 174 | - data:{ | ||
| 175 | - platformId: that.platformId, | ||
| 176 | - catalogId: that.catalogId, | ||
| 177 | - gbStreams: addData, | ||
| 178 | - } | ||
| 179 | - }).then((res)=>{ | ||
| 180 | - console.log("保存成功") | ||
| 181 | - if(this.updateChoosedCallback)this.updateChoosedCallback(this.catalogId) | ||
| 182 | - }).catch(function (error) { | ||
| 183 | - console.log(error); | ||
| 184 | - }); | ||
| 185 | - } | ||
| 186 | - if (Object.keys(delData).length >0) { | ||
| 187 | - console.log(delData) | ||
| 188 | - that.$axios({ | ||
| 189 | - method:"delete", | ||
| 190 | - url:"/api/gbStream/del", | ||
| 191 | - data:{ | ||
| 192 | - platformId: that.platformId, | ||
| 193 | - gbStreams: delData, | ||
| 194 | - } | ||
| 195 | - }).then((res)=>{ | ||
| 196 | - console.log("移除成功") | ||
| 197 | - if(this.updateChoosedCallback)this.updateChoosedCallback(this.catalogId) | ||
| 198 | - }).catch(function (error) { | ||
| 199 | - console.log(error); | ||
| 200 | - }); | ||
| 201 | - | ||
| 202 | - } | ||
| 203 | - | ||
| 204 | - }, | ||
| 205 | - shareAllCheckedChanage: function (val) { | ||
| 206 | - this.chooseChanage(null, val) | ||
| 207 | - }, | ||
| 208 | getChannelList: function () { | 166 | getChannelList: function () { |
| 209 | let that = this; | 167 | let that = this; |
| 210 | 168 | ||
| @@ -215,10 +173,10 @@ export default { | @@ -215,10 +173,10 @@ export default { | ||
| 215 | page: that.currentPage, | 173 | page: that.currentPage, |
| 216 | count: that.count, | 174 | count: that.count, |
| 217 | query: that.searchSrt, | 175 | query: that.searchSrt, |
| 218 | - online: that.online, | ||
| 219 | - choosed: that.choosed, | 176 | + pushing: that.online, |
| 220 | platformId: that.platformId, | 177 | platformId: that.platformId, |
| 221 | - channelType: that.channelType | 178 | + catalogId: that.catalogId, |
| 179 | + mediaServerId: that.mediaServerId | ||
| 222 | } | 180 | } |
| 223 | }) | 181 | }) |
| 224 | .then(function (res) { | 182 | .then(function (res) { |
| @@ -229,29 +187,62 @@ export default { | @@ -229,29 +187,62 @@ export default { | ||
| 229 | that.$nextTick(() => { | 187 | that.$nextTick(() => { |
| 230 | that.$refs.gbStreamsTable.doLayout(); | 188 | that.$refs.gbStreamsTable.doLayout(); |
| 231 | // 默认选中 | 189 | // 默认选中 |
| 232 | - var chooseGBS = []; | ||
| 233 | - for (let i = 0; i < res.data.list.length; i++) { | ||
| 234 | - const row = res.data.list[i]; | ||
| 235 | - console.log(row.platformId) | ||
| 236 | - if (row.platformId == that.platformId) { | ||
| 237 | - that.$refs.gbStreamsTable.toggleRowSelection(row, true); | ||
| 238 | - chooseGBS.push(row) | ||
| 239 | - that.gbChoosechannel[row.app+ "_" + row.stream] = row; | ||
| 240 | - | ||
| 241 | - } | ||
| 242 | - } | ||
| 243 | - that.eventEnanle = true; | ||
| 244 | - // that.checkedChanage(chooseGBS) | 190 | + that.eventEnable = true; |
| 245 | }) | 191 | }) |
| 246 | - console.log(that.gbChoosechannel) | ||
| 247 | }) | 192 | }) |
| 248 | .catch(function (error) { | 193 | .catch(function (error) { |
| 249 | console.log(error); | 194 | console.log(error); |
| 250 | }); | 195 | }); |
| 251 | 196 | ||
| 252 | }, | 197 | }, |
| 253 | - handleGBSelectionChange: function() { | ||
| 254 | - this.initData(); | 198 | + batchDel: function() { |
| 199 | + this.$confirm(`确认这${this.multipleSelection.length}个通道吗?`, '提示', { | ||
| 200 | + confirmButtonText: '确定', | ||
| 201 | + cancelButtonText: '取消', | ||
| 202 | + type: 'warning' | ||
| 203 | + }).then(() => { | ||
| 204 | + this.$axios({ | ||
| 205 | + method:"delete", | ||
| 206 | + url:"/api/gbStream/del", | ||
| 207 | + data:{ | ||
| 208 | + platformId: this.platformId, | ||
| 209 | + gbStreams: this.multipleSelection, | ||
| 210 | + } | ||
| 211 | + }).then((res)=>{ | ||
| 212 | + console.log("移除成功") | ||
| 213 | + this.$refs.gbStreamsTable.clearSelection() | ||
| 214 | + this.getChannelList(); | ||
| 215 | + }).catch(function (error) { | ||
| 216 | + console.log(error); | ||
| 217 | + }); | ||
| 218 | + }).catch(() => { | ||
| 219 | + }); | ||
| 220 | + | ||
| 221 | + }, | ||
| 222 | + batchAdd: function() { | ||
| 223 | + this.getCatalogFromUser((catalogId)=>{ | ||
| 224 | + this.$axios({ | ||
| 225 | + method:"post", | ||
| 226 | + url:"/api/gbStream/add", | ||
| 227 | + data:{ | ||
| 228 | + platformId: this.platformId, | ||
| 229 | + catalogId: catalogId, | ||
| 230 | + gbStreams: this.multipleSelection, | ||
| 231 | + } | ||
| 232 | + }).then((res)=>{ | ||
| 233 | + console.log("保存成功") | ||
| 234 | + this.$refs.gbStreamsTable.clearSelection() | ||
| 235 | + this.getChannelList(); | ||
| 236 | + }).catch(function (error) { | ||
| 237 | + console.log(error); | ||
| 238 | + }); | ||
| 239 | + }) | ||
| 240 | + }, | ||
| 241 | + getCatalogFromUser(callback){ | ||
| 242 | + this.$refs.getCatalog.openDialog(callback) | ||
| 243 | + }, | ||
| 244 | + handleSelectionChange: function (val) { | ||
| 245 | + this.multipleSelection = val; | ||
| 255 | }, | 246 | }, |
| 256 | } | 247 | } |
| 257 | }; | 248 | }; |
web_src/src/components/dialog/getCatalog.vue
0 → 100644
| 1 | +<template> | ||
| 2 | +<div id="getCatalog" > | ||
| 3 | + | ||
| 4 | + <el-dialog title="选择要添加到的节点" v-if="showDialog" width="50%" :append-to-body="true" :close-on-click-modal="false" :visible.sync="showDialog" :destroy-on-close="true" @close="close()" center> | ||
| 5 | + <div> | ||
| 6 | + <el-tree class="el-scrollbar" | ||
| 7 | + ref="tree" | ||
| 8 | + id="catalogTree" | ||
| 9 | + empty-text="未知节点" | ||
| 10 | + node-key="id" | ||
| 11 | + default-expand-all | ||
| 12 | + :highlight-current="false" | ||
| 13 | + :expand-on-click-node="false" | ||
| 14 | + :props="props" | ||
| 15 | + :load="loadNode" | ||
| 16 | + @node-click="nodeClickHandler" | ||
| 17 | + lazy> | ||
| 18 | + <span class="custom-tree-node" slot-scope="{ node, data }" style="width: 100%"> | ||
| 19 | + <el-radio v-if="node.data.type === 0 || node.data.type === -1" style="margin-right: 0" v-model="chooseId" :label="node.data.id">{{''}}</el-radio> | ||
| 20 | + <span v-if="node.data.type === -1 && node.level === 1" style="font-size: 12px" class="iconfont icon-ziyuan"></span> | ||
| 21 | + <span v-if="node.data.type === 0 && node.level === 1" class="el-icon-s-home"></span> | ||
| 22 | + <span v-if="node.data.type === 0 && node.level > 1" class="el-icon-folder-opened"></span> | ||
| 23 | + <span v-if="node.data.type === 1" class="iconfont icon-shexiangtou"></span> | ||
| 24 | + <span v-if="node.data.type === 2" class="iconfont icon-zhibo"></span> | ||
| 25 | + <span style=" padding-left: 1px">{{ node.label }}</span> | ||
| 26 | + <span> | ||
| 27 | + <i style="margin-left: 5rem; color: #9d9d9d; padding-right: 20px" v-if="node.data.id === defaultCatalogIdSign">默认</i> | ||
| 28 | + </span> | ||
| 29 | + </span> | ||
| 30 | + </el-tree> | ||
| 31 | + </div> | ||
| 32 | + <div style="float: right; height: 13rem"> | ||
| 33 | + <el-button type="primary" size="mini" @click="submit()" >确认</el-button> | ||
| 34 | + <el-button @click="close()" size="mini">取消</el-button> | ||
| 35 | + </div> | ||
| 36 | + </el-dialog> | ||
| 37 | + | ||
| 38 | +</div> | ||
| 39 | +</template> | ||
| 40 | + | ||
| 41 | + | ||
| 42 | +<script> | ||
| 43 | + | ||
| 44 | +export default { | ||
| 45 | + name: 'getCatalog', | ||
| 46 | + beforeCreate(){ | ||
| 47 | + | ||
| 48 | + }, | ||
| 49 | + created() { | ||
| 50 | + this.chooseId = this.defaultCatalogId; | ||
| 51 | + this.defaultCatalogIdSign = this.defaultCatalogId; | ||
| 52 | + this.initData(); | ||
| 53 | + setTimeout(()=>{ | ||
| 54 | + if (this.catalogIdChange)this.catalogIdChange(this.defaultCatalogId); | ||
| 55 | + }, 100) | ||
| 56 | + | ||
| 57 | + }, | ||
| 58 | + props: ['platformId'], | ||
| 59 | + data() { | ||
| 60 | + return { | ||
| 61 | + props: { | ||
| 62 | + label: 'name', | ||
| 63 | + children: 'children', | ||
| 64 | + isLeaf: 'leaf' | ||
| 65 | + }, | ||
| 66 | + platformName: null, | ||
| 67 | + defaultCatalogId: null, | ||
| 68 | + catalogIdResult: null, | ||
| 69 | + showDialog: false, | ||
| 70 | + defaultCatalogIdSign: null, | ||
| 71 | + chooseNode: null, | ||
| 72 | + chooseId: "", | ||
| 73 | + catalogTree: null, | ||
| 74 | + contextmenuShow: false, | ||
| 75 | + | ||
| 76 | + }; | ||
| 77 | + }, | ||
| 78 | + methods: { | ||
| 79 | + openDialog(catalogIdResult) { | ||
| 80 | + this.showDialog = true | ||
| 81 | + this.catalogIdResult = catalogIdResult | ||
| 82 | + }, | ||
| 83 | + initData: function () { | ||
| 84 | + this.getCatalog(); | ||
| 85 | + }, | ||
| 86 | + | ||
| 87 | + getCatalog: function(parentId, callback) { | ||
| 88 | + let that = this; | ||
| 89 | + this.$axios({ | ||
| 90 | + method:"get", | ||
| 91 | + url:`/api/platform/catalog`, | ||
| 92 | + params: { | ||
| 93 | + platformId: that.platformId, | ||
| 94 | + parentId: parentId | ||
| 95 | + } | ||
| 96 | + }) | ||
| 97 | + .then((res)=> { | ||
| 98 | + if (res.data.code === 0) { | ||
| 99 | + if (typeof(callback) === 'function') { | ||
| 100 | + callback(res.data.data) | ||
| 101 | + } | ||
| 102 | + } | ||
| 103 | + }) | ||
| 104 | + .catch(function (error) { | ||
| 105 | + console.log(error); | ||
| 106 | + }); | ||
| 107 | + | ||
| 108 | + }, | ||
| 109 | + loadNode: function(node, resolve){ | ||
| 110 | + | ||
| 111 | + | ||
| 112 | + | ||
| 113 | + if (node.level === 0) { | ||
| 114 | + this.$axios({ | ||
| 115 | + method:"get", | ||
| 116 | + url:`/api/platform/info/` + this.platformId, | ||
| 117 | + }) | ||
| 118 | + .then((res)=> { | ||
| 119 | + if (res.data.code === 0) { | ||
| 120 | + this.platformName = res.data.data.name; | ||
| 121 | + this.defaultCatalogId = res.data.data.catalogId; | ||
| 122 | + resolve([ | ||
| 123 | + { | ||
| 124 | + name: "未分配", | ||
| 125 | + id: null, | ||
| 126 | + type: -1 | ||
| 127 | + },{ | ||
| 128 | + name: this.platformName, | ||
| 129 | + id: this.platformId, | ||
| 130 | + type: 0 | ||
| 131 | + } | ||
| 132 | + ]); | ||
| 133 | + } | ||
| 134 | + }) | ||
| 135 | + .catch(function (error) { | ||
| 136 | + console.log(error); | ||
| 137 | + }); | ||
| 138 | + } | ||
| 139 | + if (node.level >= 1){ | ||
| 140 | + this.getCatalog(node.data.id, resolve) | ||
| 141 | + } | ||
| 142 | + }, | ||
| 143 | + nodeClickHandler: function (data, node, tree){ | ||
| 144 | + this.chooseId = data.id; | ||
| 145 | + }, | ||
| 146 | + close: function() { | ||
| 147 | + this.showDialog = false; | ||
| 148 | + }, | ||
| 149 | + submit: function() { | ||
| 150 | + if (this.catalogIdResult)this.catalogIdResult(this.chooseId) | ||
| 151 | + this.showDialog = false; | ||
| 152 | + }, | ||
| 153 | + } | ||
| 154 | +}; | ||
| 155 | +</script> | ||
| 156 | + | ||
| 157 | +<style> | ||
| 158 | +#catalogTree{ | ||
| 159 | + display: inline-block; | ||
| 160 | +} | ||
| 161 | +</style> |
web_src/static/css/iconfont.css
| 1 | @font-face { | 1 | @font-face { |
| 2 | font-family: "iconfont"; /* Project id 1291092 */ | 2 | font-family: "iconfont"; /* Project id 1291092 */ |
| 3 | - src: url('iconfont.woff2?t=1640922722742') format('woff2'), | ||
| 4 | - url('iconfont.woff?t=1640922722742') format('woff'), | ||
| 5 | - url('iconfont.ttf?t=1640922722742') format('truetype'); | 3 | + src: url('iconfont.woff2?t=1644809302709') format('woff2'), |
| 4 | + url('iconfont.woff?t=1644809302709') format('woff'), | ||
| 5 | + url('iconfont.ttf?t=1644809302709') format('truetype'); | ||
| 6 | } | 6 | } |
| 7 | 7 | ||
| 8 | .iconfont { | 8 | .iconfont { |
| @@ -13,6 +13,14 @@ | @@ -13,6 +13,14 @@ | ||
| 13 | -moz-osx-font-smoothing: grayscale; | 13 | -moz-osx-font-smoothing: grayscale; |
| 14 | } | 14 | } |
| 15 | 15 | ||
| 16 | +.icon-ziyuan:before { | ||
| 17 | + content: "\e7d5"; | ||
| 18 | +} | ||
| 19 | + | ||
| 20 | +.icon-shexiangtou1:before { | ||
| 21 | + content: "\e7d4"; | ||
| 22 | +} | ||
| 23 | + | ||
| 16 | .icon-wxbzhuye:before { | 24 | .icon-wxbzhuye:before { |
| 17 | content: "\e7d1"; | 25 | content: "\e7d1"; |
| 18 | } | 26 | } |
web_src/static/css/iconfont.woff2
No preview for this file type
web_src/static/favicon.ico
0 → 100644
No preview for this file type