临时提交

pull/1642/head
648540858 2024-07-26 17:53:10 +08:00
parent a2b00a4f4e
commit b246fd6a20
15 changed files with 263 additions and 156 deletions

View File

@ -2,7 +2,6 @@ package com.genersoft.iot.vmp.gb28181.bean;
import com.genersoft.iot.vmp.gb28181.utils.MessageElement;
import com.genersoft.iot.vmp.gb28181.utils.XmlUtil;
import com.genersoft.iot.vmp.utils.CivilCodeUtil;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
@ -225,11 +224,8 @@ public class DeviceChannel extends CommonGBChannel {
if (ObjectUtils.isEmpty(deviceChannel.getCivilCode())
|| deviceChannel.getCivilCode().length() > 8 ){
deviceChannel.setCivilCode(null);
}else {
if (CivilCodeUtil.INSTANCE.getCivilCodePo(deviceChannel.getCivilCode()) == null) {
deviceChannel.setCivilCode(null);
}
}
// 此处对于不在wvp缓存中的行政区划,默认直接存储.保证即使出现wvp的行政区划缓存过老,也可以通过用户自主创建的方式正常使用系统
}
return XmlUtil.elementDecode(element, DeviceChannel.class);
}

View File

@ -50,8 +50,6 @@ public class RegionTree {
return regionTree;
}
public static RegionTree getInstance(CommonGBChannel channel) {
RegionTree regionTree = new RegionTree();
regionTree.setId(channel.getGbDeviceId());

View File

@ -8,14 +8,13 @@ import com.genersoft.iot.vmp.gb28181.bean.NetworkIdentificationType;
import com.genersoft.iot.vmp.gb28181.service.IGbChannelService;
import com.genersoft.iot.vmp.media.service.IMediaServerService;
import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
import com.genersoft.iot.vmp.vmanager.bean.PageInfo;
import com.github.pagehelper.PageInfo;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.security.SecurityRequirement;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.*;
@ -23,7 +22,7 @@ import java.util.List;
@Tag(name = "全局通道管理")
@Controller
@RestController
@Slf4j
@RequestMapping(value = "/api/common/channel")
public class CommonChannelController {
@ -41,48 +40,41 @@ public class CommonChannelController {
@Operation(summary = "查询通道信息", security = @SecurityRequirement(name = JwtUtils.HEADER))
@Parameter(name = "id", description = "通道的数据库自增Id", required = true)
@GetMapping(value = "/one")
@ResponseBody
public CommonGBChannel getOne(int id){
return channelService.getOne(id);
}
@Operation(summary = "获取行业编码列表", security = @SecurityRequirement(name = JwtUtils.HEADER))
@ResponseBody
@GetMapping("/industry/list")
public List<IndustryCodeType> getIndustryCodeList(){
return channelService.getIndustryCodeList();
}
@Operation(summary = "获取编码列表", security = @SecurityRequirement(name = JwtUtils.HEADER))
@ResponseBody
@GetMapping("/type/list")
public List<DeviceType> getDeviceTypeList(){
return channelService.getDeviceTypeList();
}
@Operation(summary = "获取编码列表", security = @SecurityRequirement(name = JwtUtils.HEADER))
@ResponseBody
@GetMapping("/network/identification/list")
public List<NetworkIdentificationType> getNetworkIdentificationTypeList(){
return channelService.getNetworkIdentificationTypeList();
}
@Operation(summary = "更新通道", security = @SecurityRequirement(name = JwtUtils.HEADER))
@ResponseBody
@PostMapping("/update")
public void update(@RequestBody CommonGBChannel channel){
channelService.update(channel);
}
@Operation(summary = "重置国标通道", security = @SecurityRequirement(name = JwtUtils.HEADER))
@ResponseBody
@PostMapping("/reset")
public void reset(Integer id){
channelService.reset(id);
}
@Operation(summary = "增加通道", security = @SecurityRequirement(name = JwtUtils.HEADER))
@ResponseBody
@PostMapping("/add")
public CommonGBChannel add(@RequestBody CommonGBChannel channel){
channelService.add(channel);
@ -94,8 +86,7 @@ public class CommonChannelController {
@Parameter(name = "count", description = "每页查询数量", required = true)
@Parameter(name = "query", description = "查询内容")
@Parameter(name = "online", description = "是否在线")
@ResponseBody
@PostMapping("/list")
@GetMapping("/list")
public PageInfo<CommonGBChannel> queryList(int page, int count,
@RequestParam(required = false) String query,
@RequestParam(required = false) Boolean online){

View File

@ -78,10 +78,10 @@ public class RegionController {
@Operation(summary = "删除区域")
@Parameter(name = "regionDeviceId", description = "区域编码", required = true)
@ResponseBody
@GetMapping("/delete")
public void delete(String regionDeviceId){
assert regionDeviceId != null;
boolean result = regionService.deleteByDeviceId(regionDeviceId);
@DeleteMapping("/delete")
public void delete(String deviceId){
assert !ObjectUtils.isEmpty(deviceId);
boolean result = regionService.deleteByDeviceId(deviceId);
if (!result) {
throw new ControllerException(ErrorCode.ERROR100.getCode(), "移除失败");
}

View File

@ -1,6 +1,7 @@
package com.genersoft.iot.vmp.gb28181.dao;
import com.genersoft.iot.vmp.gb28181.bean.CommonGBChannel;
import com.genersoft.iot.vmp.gb28181.bean.Region;
import com.genersoft.iot.vmp.gb28181.bean.RegionTree;
import com.genersoft.iot.vmp.gb28181.dao.provider.ChannelProvider;
import org.apache.ibatis.annotations.*;
@ -238,7 +239,7 @@ public interface CommonGBChannelMapper {
" coalesce(wdc.gb_manufacturer, wdc.manufacturer) as gb_manufacturer,\n" +
" coalesce(wdc.gb_model, wdc.model) as gb_model,\n" +
" coalesce(wdc.gb_owner, wdc.owner) as gb_owner,\n" +
" coalesce(wpgc.civil_code, wdc.gb_civil_code, wdc.civil_code) as gb_civil_code,\n" +
" wdc.gb_civil_code,\n" +
" coalesce(wdc.gb_block, wdc.block) as gb_block,\n" +
" coalesce(wdc.gb_address, wdc.address) as gb_address,\n" +
" coalesce(wpgc.parental, wdc.gb_parental, wdc.parental) as gb_parental,\n" +
@ -275,7 +276,7 @@ public interface CommonGBChannelMapper {
@Update(value = {" <script>" +
" UPDATE wvp_device_channel " +
" SET update_time=#{updateTime}, gb_device_id = null, gb_name = null, gb_manufacturer = null," +
" gb_model = null, gb_owner = null, gb_civil_code = null, gb_block = null, gb_address = null," +
" gb_model = null, gb_owner = null, gb_block = null, gb_address = null," +
" gb_parental = null, gb_parent_id = null, gb_safety_way = null, gb_register_way = null, gb_cert_num = null," +
" gb_certifiable = null, gb_err_code = null, gb_end_time = null, gb_secrecy = null, gb_ip_address = null, " +
" gb_port = null, gb_password = null, gb_status = null, gb_longitude = null, gb_latitude = null, " +
@ -314,9 +315,17 @@ public interface CommonGBChannelMapper {
" 1 as type, " +
" true as is_leaf " +
" from wvp_device_channel " +
" where coalesce(gb_civil_code, civil_code) = #{parent} " +
" where gb_civil_code = #{parent} " +
" <if test='query != null'> AND (coalesce(gb_device_id, device_id) LIKE concat('%',#{query},'%') " +
" OR coalesce(gb_name, name) LIKE concat('%',#{query},'%'))</if> " +
" </script>")
List<RegionTree> queryForRegionTreeByCivilCode(@Param("query") String query, @Param("parent") String parent);
@Update(value = {" <script>" +
" UPDATE wvp_device_channel " +
" SET gb_civil_code = null" +
" WHERE gb_civil_code in "+
" <foreach collection='allChildren' item='item' open='(' separator=',' close=')' > #{item.deviceId}</foreach>" +
" </script>"})
int removeCivilCode(List<Region> allChildren);
}

View File

@ -16,12 +16,12 @@ import java.util.List;
@Repository
public interface DeviceChannelMapper {
@Insert("INSERT INTO wvp_device_channel (device_id, device_db_id, name, manufacturer, model, owner, civil_code, block, " +
@Insert("INSERT INTO wvp_device_channel (device_id, device_db_id, name, manufacturer, model, owner, civil_code, gb_civil_code, block, " +
"address, parental, parent_id, safety_way, register_way, cert_num, certifiable, err_code, end_time, secrecy, " +
"ip_address, port, password, status, longitude, latitude, ptz_type, position_type, room_type, use_type, " +
"supply_light_type, direction_type, resolution, business_group_id, download_speed, svc_space_support_mod, " +
"svc_time_support_mode, create_time, update_time, sub_countstream_id, has_audio, gps_time, stream_identification) " +
"VALUES (#{deviceId}, #{deviceDbId}, #{name}, #{manufacturer}, #{model}, #{owner}, #{civilCode}, #{block}," +
"VALUES (#{deviceId}, #{deviceDbId}, #{name}, #{manufacturer}, #{model}, #{owner}, #{civilCode}, #{civilCode}, #{block}," +
"#{address}, #{parental}, #{parentId}, #{safetyWay}, #{registerWay}, #{certNum}, #{certifiable}, #{errCode}, #{endTime}, #{secrecy}, " +
"#{ipAddress}, #{port}, #{password}, #{status}, #{longitude}, #{latitude}, #{ptzType}, #{positionType}, #{roomType}, #{useType}, " +
"#{supplyLightType}, #{directionType}, #{resolution}, #{businessGroupId}, #{downloadSpeed}, #{svcSpaceSupportMod}," +
@ -132,7 +132,7 @@ public interface DeviceChannelMapper {
" coalesce(dc.gb_manufacturer, dc.manufacturer) as manufacturer,\n" +
" coalesce(dc.gb_model, dc.model) as model,\n" +
" coalesce(dc.gb_owner, dc.owner) as owner,\n" +
" coalesce(dc.gb_civil_code, dc.civil_code) as civil_code,\n" +
" gb_civil_code as civil_code,\n" +
" coalesce(dc.gb_block, dc.block) as block,\n" +
" coalesce(dc.gb_address, dc.address) as address,\n" +
" coalesce(dc.gb_parental, dc.parental) as parental,\n" +
@ -169,7 +169,7 @@ public interface DeviceChannelMapper {
"coalesce(dc.gb_device_id, dc.device_id) LIKE concat('%',#{query},'%') " +
"OR coalesce(dc.gb_name, dc.name) LIKE concat('%',#{query},'%') " +
")</if> " +
" <if test='parentChannelId != null'> AND (dc.parent_id=#{parentChannelId} OR dc.civil_code = #{parentChannelId}) </if> " +
" <if test='parentChannelId != null'> AND (dc.parent_id=#{parentChannelId} OR dc.gb_civil_code = #{parentChannelId}) </if> " +
" <if test='online == true' > AND dc.status= true</if>" +
" <if test='online == false' > AND dc.status= false</if>" +
" <if test='hasSubChannel == true' > AND dc.sub_count > 0 </if>" +
@ -197,7 +197,7 @@ public interface DeviceChannelMapper {
" coalesce(gb_manufacturer, manufacturer) as manufacturer,\n" +
" coalesce(gb_model, model) as model,\n" +
" coalesce(gb_owner, owner) as owner,\n" +
" coalesce(gb_civil_code, civil_code) as civil_code,\n" +
" gb_civil_code as civil_code,\n" +
" coalesce(gb_block, block) as block,\n" +
" coalesce(gb_address, address) as address,\n" +
" coalesce(gb_parental, parental) as parental,\n" +
@ -269,7 +269,7 @@ public interface DeviceChannelMapper {
" coalesce(dc.gb_manufacturer, dc.manufacturer) as manufacturer,\n" +
" coalesce(dc.gb_model, dc.model) as model,\n" +
" coalesce(dc.gb_owner, dc.owner) as owner,\n" +
" coalesce(dc.gb_civil_code, dc.civil_code) as civil_code,\n" +
" dc.gb_civil_code as civil_code,\n" +
" coalesce(dc.gb_block, dc.block) as block,\n" +
" coalesce(dc.gb_address, dc.address) as address,\n" +
" coalesce(dc.gb_parental, dc.parental) as parental,\n" +
@ -359,7 +359,7 @@ public interface DeviceChannelMapper {
" coalesce(gb_manufacturer, manufacturer) as manufacturer,\n" +
" coalesce(gb_model, model) as model,\n" +
" coalesce(gb_owner, owner) as owner,\n" +
" coalesce(gb_civil_code, civil_code) as civil_code,\n" +
" gb_civil_code as civil_code,\n" +
" coalesce(gb_block, block) as block,\n" +
" coalesce(gb_address, address) as address,\n" +
" coalesce(gb_parental, parental) as parental,\n" +
@ -396,14 +396,14 @@ public interface DeviceChannelMapper {
@Insert("<script> " +
"insert into wvp_device_channel " +
"(device_id, device_db_id, name, manufacturer, model, owner, civil_code, block, " +
"(device_id, device_db_id, name, manufacturer, model, owner, civil_code, gb_civil_code, block, " +
"address, parental, parent_id, safety_way, register_way, cert_num, certifiable, err_code, end_time, secrecy, " +
"ip_address, port, password, status, longitude, latitude, ptz_type, position_type, room_type, use_type, " +
"supply_light_type, direction_type, resolution, business_group_id, download_speed, svc_space_support_mod, " +
"svc_time_support_mode, create_time, update_time, sub_count, stream_id, has_audio, gps_time, stream_identification) " +
"values " +
"<foreach collection='addChannels' index='index' item='item' separator=','> " +
"(#{item.deviceId}, #{item.deviceDbId}, #{item.name}, #{item.manufacturer}, #{item.model}, #{item.owner}, #{item.civilCode}, #{item.block}, " +
"(#{item.deviceId}, #{item.deviceDbId}, #{item.name}, #{item.manufacturer}, #{item.model}, #{item.owner}, #{item.civilCode}, #{item.gbCivilCode}, #{item.block}, " +
"#{item.address}, #{item.parental}, #{item.parentId}, #{item.safetyWay}, #{item.registerWay}, #{item.certNum}, #{item.certifiable}, #{item.errCode}, #{item.endTime}, #{item.secrecy}, " +
"#{item.ipAddress}, #{item.port}, #{item.password}, #{item.status}, #{item.longitude}, #{item.latitude}, #{item.ptzType}, #{item.positionType}, #{item.roomType}, #{item.useType}, " +
"#{item.supplyLightType}, #{item.directionType}, #{item.resolution}, #{item.businessGroupId}, #{item.downloadSpeed}, #{item.svcSpaceSupportMod}," +
@ -499,7 +499,7 @@ public interface DeviceChannelMapper {
" coalesce(gb_manufacturer, manufacturer) as manufacturer,\n" +
" coalesce(gb_model, model) as model,\n" +
" coalesce(gb_owner, owner) as owner,\n" +
" coalesce(gb_civil_code, civil_code) as civil_code,\n" +
" gb_civil_code as civil_code,\n" +
" coalesce(gb_block, block) as block,\n" +
" coalesce(gb_address, address) as address,\n" +
" coalesce(gb_parental, parental) as parental,\n" +
@ -579,7 +579,7 @@ public interface DeviceChannelMapper {
" coalesce(gb_manufacturer, manufacturer) as manufacturer,\n" +
" coalesce(gb_model, model) as model,\n" +
" coalesce(gb_owner, owner) as owner,\n" +
" coalesce(gb_civil_code, civil_code) as civil_code,\n" +
" gb_civil_code as civil_code,\n" +
" coalesce(gb_block, block) as block,\n" +
" coalesce(gb_address, address) as address,\n" +
" coalesce(gb_parental, parental) as parental,\n" +
@ -652,7 +652,7 @@ public interface DeviceChannelMapper {
" coalesce(gb_manufacturer, manufacturer) as manufacturer,\n" +
" coalesce(gb_model, model) as model,\n" +
" coalesce(gb_owner, owner) as owner,\n" +
" coalesce(gb_civil_code, civil_code) as civil_code,\n" +
" gb_civil_code as civil_code,\n" +
" coalesce(gb_block, block) as block,\n" +
" coalesce(gb_address, address) as address,\n" +
" coalesce(gb_parental, parental) as parental,\n" +
@ -702,7 +702,7 @@ public interface DeviceChannelMapper {
" coalesce(gb_manufacturer, manufacturer) as manufacturer,\n" +
" coalesce(gb_model, model) as model,\n" +
" coalesce(gb_owner, owner) as owner,\n" +
" coalesce(gb_civil_code, civil_code) as civil_code,\n" +
" gb_civil_code as civil_code,\n" +
" coalesce(gb_block, block) as block,\n" +
" coalesce(gb_address, address) as address,\n" +
" coalesce(gb_parental, parental) as parental,\n" +

View File

@ -79,4 +79,13 @@ public interface RegionMapper {
" <if test='query != null'> AND (device_id LIKE concat('%',#{query},'%') OR name LIKE concat('%',#{query},'%'))</if> " +
" </script>")
List<RegionTree> queryForTree(@Param("query") String query, @Param("parentId") String parentId);
@Select("SELECT * from wvp_common_region WHERE device_id = #{deviceId} ")
Region queryOneByDeviceId(@Param("deviceId") String deviceId);
@Delete("<script>" +
" DELETE FROM wvp_common_region WHERE id in " +
" <foreach collection='allChildren' item='item' open='(' separator=',' close=')' > #{item.id}</foreach>" +
" </script>")
void batchDelete(List<Region> allChildren);
}

View File

@ -1,10 +1,7 @@
package com.genersoft.iot.vmp.gb28181.service;
import com.genersoft.iot.vmp.gb28181.bean.CommonGBChannel;
import com.genersoft.iot.vmp.gb28181.bean.DeviceType;
import com.genersoft.iot.vmp.gb28181.bean.IndustryCodeType;
import com.genersoft.iot.vmp.gb28181.bean.NetworkIdentificationType;
import com.genersoft.iot.vmp.vmanager.bean.PageInfo;
import com.genersoft.iot.vmp.gb28181.bean.*;
import com.github.pagehelper.PageInfo;
import java.util.List;
@ -45,4 +42,6 @@ public interface IGbChannelService {
void reset(int id);
PageInfo<CommonGBChannel> queryList(int page, int count, String query, Boolean online);
void removeCivilCode(List<Region> allChildren);
}

View File

@ -35,4 +35,6 @@ public interface IRegionService {
List<RegionTree> queryForTree(String query, String parent);
void syncFromChannel();
boolean delete(int id);
}

View File

@ -8,8 +8,8 @@ import com.genersoft.iot.vmp.gb28181.event.subscribe.catalog.CatalogEvent;
import com.genersoft.iot.vmp.gb28181.service.IGbChannelService;
import com.genersoft.iot.vmp.utils.DateUtil;
import com.genersoft.iot.vmp.vmanager.bean.ErrorCode;
import com.genersoft.iot.vmp.vmanager.bean.PageInfo;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@ -324,4 +324,11 @@ public class GbChannelServiceImpl implements IGbChannelService {
List<CommonGBChannel> all = commonGBChannelMapper.queryList(query, online);
return new PageInfo<>(all);
}
@Override
public void removeCivilCode(List<Region> allChildren) {
commonGBChannelMapper.removeCivilCode(allChildren);
// TODO 是否需要通知上级, 或者等添加新的行政区划时发送更新通知
}
}

View File

@ -1,11 +1,11 @@
package com.genersoft.iot.vmp.gb28181.service.impl;
import com.genersoft.iot.vmp.common.CivilCodePo;
import com.genersoft.iot.vmp.conf.CivilCodeFileConf;
import com.genersoft.iot.vmp.gb28181.bean.Region;
import com.genersoft.iot.vmp.gb28181.bean.RegionTree;
import com.genersoft.iot.vmp.gb28181.dao.CommonGBChannelMapper;
import com.genersoft.iot.vmp.gb28181.dao.RegionMapper;
import com.genersoft.iot.vmp.gb28181.service.IGbChannelService;
import com.genersoft.iot.vmp.gb28181.service.IRegionService;
import com.genersoft.iot.vmp.utils.CivilCodeUtil;
import com.genersoft.iot.vmp.utils.DateUtil;
@ -34,7 +34,7 @@ public class RegionServiceImpl implements IRegionService {
@Autowired
private CivilCodeFileConf civilCodeFileConf;
private IGbChannelService gbChannelService;
@Override
public void add(Region region) {
@ -51,10 +51,33 @@ public class RegionServiceImpl implements IRegionService {
@Override
@Transactional
public boolean deleteByDeviceId(String regionDeviceId) {
Region region = regionMapper.queryOneByDeviceId(regionDeviceId);
// 获取所有子节点
List<Region> allChildren = getAllChildren(regionDeviceId);
allChildren.add(region);
// 设置使用这些节点的通道的civilCode为null,
gbChannelService.removeCivilCode(allChildren);
regionMapper.batchDelete(allChildren);
return true;
}
private List<Region> getAllChildren(String deviceId) {
if (deviceId == null || deviceId.length() >= 8) {
return new ArrayList<>();
}
List<Region> children = regionMapper.getChildren(deviceId);
if (ObjectUtils.isEmpty(children)) {
return children;
}
List<Region> regions = new ArrayList<>(children);
for (Region region : children) {
if (region.getDeviceId().length() < 8) {
regions.addAll(getAllChildren(region.getDeviceId()));
}
}
return regions;
}
@Override
public PageInfo<Region> query(String query, int page, int count) {
PageHelper.startPage(page, count);
@ -140,4 +163,9 @@ public class RegionServiceImpl implements IRegionService {
regionMapper.batchAdd(new ArrayList<>(regionMapForVerification.values()));
}
@Override
public boolean delete(int id) {
return regionMapper.delete(id) > 0;
}
}

View File

@ -3,7 +3,7 @@ package com.genersoft.iot.vmp.vmanager.bean;
import java.util.ArrayList;
import java.util.List;
public class PageInfo<T> {
public class TablePageInfo<T> {
//当前页
private int pageNum;
//每页的数量
@ -19,11 +19,11 @@ public class PageInfo<T> {
private List<T> list;
public PageInfo(List<T> resultData) {
public TablePageInfo(List<T> resultData) {
this.resultData = resultData;
}
public PageInfo() {
public TablePageInfo() {
}
public void startPage(int page, int count) {

View File

@ -10,7 +10,7 @@
</div>
</div>
</div>
<div >
<div>
<vue-easy-tree
ref="veTree"
node-key="id"
@ -19,14 +19,19 @@
style="height: 78vh; padding: 2rem"
:load="loadNode"
:data="treeData"
:default-expanded-keys="['']"
@node-contextmenu="contextmenuEventHandler"
@node-click="nodeClickHandler"
>
<span class="custom-tree-node" slot-scope="{ node, data }">
<span v-if="node.data.type === 0" style="color: #409EFF" class="iconfont icon-bianzubeifen3"></span>
<span v-if="node.data.type === 1" style="color: #409EFF" class="iconfont icon-file-stream2"></span>
<span style=" padding-left: 1px">{{ node.label }}</span>
</span>
<span @click.stop >
<el-radio v-if="node.data.type === 0 && node.level !== 1 " style="margin-right: 0" v-model="chooseId" @input="chooseIdChange" :label="node.data.id">{{''}}</el-radio>
</span>
<span v-if="node.data.type === 0" style="color: #409EFF" class="iconfont icon-bianzubeifen3"></span>
<span v-if="node.data.type === 1" style="color: #409EFF" class="iconfont icon-file-stream2"></span>
<span style=" padding-left: 1px" v-if="node.data.id !==''">{{ node.label }}({{ node.data.id }})</span>
<span style=" padding-left: 1px" v-if="node.data.id ===''">{{ node.label }}</span>
</span>
</vue-easy-tree>
</div>
<regionCode ref="regionCode"></regionCode>
@ -47,13 +52,14 @@ export default {
data() {
return {
searchSrt: "",
chooseId: "",
// props: {
// label: "name",
// },
treeData: [],
}
},
props: ['edit', 'clickEvent', 'contextMenuEvent'],
props: ['edit', 'clickEvent', 'chooseIdChange'],
created() {
// this.$axios({
// method: 'get',
@ -107,7 +113,14 @@ export default {
loadNode: function (node, resolve) {
console.log(22222)
console.log(node)
if (node.level === 0 || node.data.id.length < 8) {
if (node.level === 0) {
resolve([{
id: "",
label: "根资源组",
isLeaf: false,
type: 0
}]);
} else if (node.data.id.length < 8) {
this.$axios({
method: 'get',
url: `/api/region/tree/list`,
@ -115,7 +128,7 @@ export default {
query: this.searchSrt,
parent: node.data.id
}
}).then((res)=> {
}).then((res) => {
if (res.data.code === 0) {
resolve(res.data.data);
}
@ -123,7 +136,7 @@ export default {
}).catch(function (error) {
console.log(error);
});
}else {
} else {
resolve([]);
}
},
@ -176,7 +189,8 @@ export default {
reset: function () {
this.$forceUpdate();
},
contextmenuEventHandler: function (event,data,node,element){
contextmenuEventHandler: function (event, data, node, element) {
console.log(node.level)
if (node.data.type === 1) {
data.parentId = node.parent.data.id;
this.$contextmenu({
@ -187,10 +201,10 @@ export default {
disabled: false,
onClick: () => {
this.$axios({
method:"delete",
url:"/api/platform/catalog/relation/del",
method: "delete",
url: "/api/platform/catalog/relation/del",
data: data
}).then((res)=>{
}).then((res) => {
console.log("移除成功")
node.parent.loaded = false
node.parent.expand();
@ -204,7 +218,7 @@ export default {
customClass: "custom-class", // class
zIndex: 3000, // z-index
});
}else if (node.data.type === 0){
} else if (node.data.type === 0) {
this.$contextmenu({
items: [
{
@ -224,9 +238,9 @@ export default {
}
},
{
label: "修改节点",
label: "重命名",
icon: "el-icon-edit",
disabled: false,
disabled: node.level === 1,
onClick: () => {
this.editCatalog(data, node);
}
@ -234,14 +248,14 @@ export default {
{
label: "删除节点",
icon: "el-icon-delete",
disabled: false,
disabled: node.level === 1,
onClick: () => {
this.$confirm('确定删除?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
this.removeCatalog(data.id, node)
this.removeRegion(data.id, node)
}).catch(() => {
});
@ -276,30 +290,43 @@ export default {
return false;
},
refreshNode: function (node){
removeRegion: function (id, node) {
this.$axios({
method: "delete",
url: `/api/region/delete`,
params: {
deviceId: id,
}
}).then((res) => {
if (res.data.code === 0) {
console.log("移除成功")
node.parent.loaded = false
node.parent.expand();
}
})
.catch(function (error) {
console.log(error);
});
},
refreshNode: function (node) {
node.loaded = false
node.expand();
},
addRegion: function (id, node){
addRegion: function (id, node) {
console.log(node)
this.$refs.regionCode.openDialog(code=>{
console.log(this.form)
console.log("code===> " + code)
this.form.gbDeviceId = code;
console.log("code22===> " + code)
this.$refs.regionCode.openDialog(form => {
node.loaded = false
node.expand();
}, id);
},
nodeClickHandler: function (data, node, tree){
nodeClickHandler: function (data, node, tree) {
console.log(data)
console.log(node)
this.chooseId = data.id;
this.chooseName = data.name;
if (this.catalogIdChange)this.catalogIdChange(this.chooseId, this.chooseName);
// this.chooseId = data.id;
// this.chooseName = data.name;
// if (this.catalogIdChange)this.catalogIdChange(this.chooseId, this.chooseName);
}
},
destroyed() {
@ -325,4 +352,7 @@ export default {
.device-offline {
color: #727272;
}
.custom-tree-node .el-radio__label {
padding-left: 4px !important;
}
</style>

View File

@ -14,39 +14,33 @@
<div class="show-code-item">{{ allVal[0].val }}</div>
<div style="text-align: center">{{ allVal[0].meaning }}</div>
</div>
<el-radio-group v-model="allVal[0].val" @input="deviceChange">
<el-radio v-for="item in regionList" :key="item.deviceId" :label="item.deviceId" style="line-height: 2rem">
{{ item.name }} - {{ item.deviceId }}
</el-radio>
</el-radio-group>
<el-radio v-for="item in regionList" v-model="allVal[0].val" :key="item.deviceId" :name="item.name" :label="item.deviceId" @input="deviceChange(item)" style="line-height: 2rem">
{{ item.name }} - {{ item.deviceId }}
</el-radio>
</el-tab-pane>
<el-tab-pane name="1">
<div slot="label">
<div class="show-code-item">{{ allVal[1].val?allVal[1].val:"--" }}</div>
<div style="text-align: center">{{ allVal[1].meaning }}</div>
</div>
<el-radio-group v-model="allVal[1].val" :disabled="allVal[1].lock" @input="deviceChange">
<el-radio :key="-1" label="" style="line-height: 2rem">
不添加
</el-radio>
<el-radio v-for="item in regionList" :key="item.deviceId" :label="item.deviceId.substring(2)" style="line-height: 2rem">
{{ item.name }} - {{ item.deviceId.substring(2) }}
</el-radio>
</el-radio-group>
<el-radio :key="-1" v-model="allVal[1].val" @input="deviceChange" label="" style="line-height: 2rem">
不添加
</el-radio>
<el-radio v-for="item in regionList" v-model="allVal[1].val" @input="deviceChange(item)" :key="item.deviceId" :label="item.deviceId.substring(2)" style="line-height: 2rem">
{{ item.name }} - {{ item.deviceId.substring(2) }}
</el-radio>
</el-tab-pane>
<el-tab-pane name="2">
<div slot="label">
<div class="show-code-item">{{ allVal[2].val?allVal[2].val:"--" }}</div>
<div style="text-align: center">{{ allVal[2].meaning }}</div>
</div>
<el-radio-group v-model="allVal[2].val" :disabled="allVal[2].lock" @input="deviceChange">
<el-radio :key="-1" label="" style="line-height: 2rem">
不添加
</el-radio>
<el-radio v-for="item in regionList" :key="item.deviceId" :label="item.deviceId.substring(4)" style="line-height: 2rem">
{{ item.name }} - {{ item.deviceId.substring(4) }}
</el-radio>
</el-radio-group>
<el-radio :key="-1" label="" v-model="allVal[2].val" style="line-height: 2rem" @input="deviceChange">
不添加
</el-radio>
<el-radio v-for="item in regionList" v-model="allVal[2].val" @input="deviceChange(item)" :key="item.deviceId" :label="item.deviceId.substring(4)" style="line-height: 2rem">
{{ item.name }} - {{ item.deviceId.substring(4) }}
</el-radio>
</el-tab-pane>
<el-tab-pane name="3">
请手动输入基层接入单位编码,两位数字
@ -136,21 +130,64 @@ export default {
},
methods: {
openDialog: function (endCallBck, parentDeviceId, code, lockContent) {
console.log(code)
console.log(parentDeviceId)
this.showVideoDialog = true
this.activeKey= '0';
this.regionList = []
this.form.parentDeviceId = parentDeviceId
this.getRegionList()
if (typeof code != 'undefined' && code.length === 8) {
console.log(111)
this.allVal[0].val = code.substring(0, 2)
this.allVal[1].val = code.substring(2, 4)
this.allVal[2].val = code.substring(4, 6)
this.allVal[3].val = code.substring(6, 8)
this.allVal = [
{
id: [1, 2],
meaning: '省级编码',
val: '11',
type: '中心编码',
lock: false,
},
{
id: [3, 4],
meaning: '市级编码',
val: '',
type: '中心编码',
lock: false,
},
{
id: [5, 6],
meaning: '区级编码',
val: '',
type: '中心编码',
lock: false,
},
{
id: [7, 8],
meaning: '基层接入单位编码',
val: '',
type: '中心编码',
lock: false,
}
]
if (parentDeviceId) {
console.log(parentDeviceId)
console.log(parentDeviceId.length)
if (parentDeviceId.length >= 2) {
this.allVal[0].val = parentDeviceId.substring(0, 2)
this.activeKey = "1"
}
if (parentDeviceId.length >= 4) {
this.allVal[1].val = parentDeviceId.substring(2, 4)
this.activeKey = "2"
}
if (parentDeviceId.length >= 6) {
this.allVal[2].val = parentDeviceId.substring(4, 6)
this.activeKey = "3"
}
}
this.getRegionList()
// if (typeof code != 'undefined' && code.length === 8) {
// this.allVal[0].val = code.substring(0, 2)
// this.allVal[1].val = code.substring(2, 4)
// this.allVal[2].val = code.substring(4, 6)
// this.allVal[3].val = code.substring(6, 8)
// }
console.log(this.allVal)
this.endCallBck = endCallBck;
},
@ -246,7 +283,8 @@ export default {
closeModel: function (){
this.showVideoDialog = false
},
deviceChange: function (){
deviceChange: function (item){
console.log(item)
let code = this.allVal[0].val
if (this.allVal[1].val) {
code += this.allVal[1].val
@ -263,22 +301,29 @@ export default {
this.allVal[3].val = ""
}
this.form.deviceId = code
if (item) {
this.form.name = item.name
}
},
handleOk: function() {
const code =
this.allVal[0].val +
this.allVal[1].val +
this.allVal[2].val +
this.allVal[3].val +
this.allVal[4].val +
this.allVal[5].val +
this.allVal[6].val +
this.allVal[7].val
console.log(code)
if (this.endCallBck) {
this.endCallBck(code)
}
this.showVideoDialog = false
this.$axios({
method: 'post',
url: "/api/region/add/",
data: this.form
}).then((res) => {
if (res.data.code === 0) {
if (typeof this.endCallBck == "function") {
this.endCallBck(this.form)
}
this.showVideoDialog = false
} else {
this.$message.error(res.data.msg);
}
}).catch((error) => {
this.$message.error(error);
});
}
},
};

View File

@ -2,7 +2,7 @@
<div id="region" style="width: 100%">
<el-container v-loading="loading" >
<el-aside width="400px" >
<RegionTree ref="regionTree" :edit="true" :clickEvent="treeNodeClickEvent"></RegionTree>
<RegionTree ref="regionTree" :edit="true" :clickEvent="treeNodeClickEvent" :chooseIdChange="chooseIdChange"></RegionTree>
</el-aside>
<el-main style="padding: 5px;">
<div class="page-header">
@ -27,7 +27,9 @@
</div>
</div>
<el-table ref="channelListTable" :data="channelList" :height="winHeight" style="width: 100%"
header-row-class-name="table-header">
header-row-class-name="table-header" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55">
</el-table-column>
<el-table-column prop="gbName" label="名称" min-width="180">
</el-table-column>
<el-table-column prop="gbDeviceId" label="编号" min-width="180">
@ -84,27 +86,23 @@ export default {
searchSrt: "",
channelType: "",
online: "",
winHeight: window.innerHeight - 200,
winHeight: window.innerHeight - 180,
currentPage: 1,
count: 15,
total: 0,
loading: false,
loadSnap: {},
regionId: ""
};
},
mounted() {
created() {
this.initData();
},
destroyed() {},
methods: {
initData: function () {
if (typeof (this.parentChannelId) == "undefined" || this.parentChannelId == 0) {
this.getChannelList();
} else {
this.showSubchannels();
}
this.getChannelList();
},
currentChange: function (val) {
this.currentPage = val;
@ -116,28 +114,19 @@ export default {
},
getChannelList: function () {
let that = this;
if (typeof (this.$route.params.deviceId) == "undefined") return;
this.$axios({
method: 'get',
url: `/api/device/query/devices/${this.$route.params.deviceId}/channels`,
url: `/api/common/channel/list`,
params: {
page: that.currentPage,
count: that.count,
query: that.searchSrt,
online: that.online,
channelType: that.channelType
online: that.online
}
}).then(function (res) {
if (res.data.code === 0) {
that.total = res.data.data.total;
that.deviceChannelList = res.data.data.list;
that.deviceChannelList.forEach(e => {
e.ptzType = e.ptzType + "";
that.$set(e, "location", "");
if (e.longitude && e.latitude) {
that.$set(e, "location", e.longitude + "," + e.latitude);
}
});
that.channelList = res.data.data.list;
//
that.$nextTick(() => {
that.$refs.channelListTable.doLayout();
@ -148,7 +137,14 @@ export default {
console.log(error);
});
},
handleSelectionChange: function (val){
console.log(val)
},
add: function (row) {
if (!this.regionId) {
this.$message.info("请选择左侧行政区划节点")
}
},
remove: function (row) {
},
@ -165,13 +161,10 @@ export default {
this.initData();
},
treeNodeClickEvent: function (device, data, isCatalog) {
console.log(device)
if (!!!data.channelId) {
this.parentChannelId = device.deviceId;
} else {
this.parentChannelId = data.channelId;
}
this.initData();
},
chooseIdChange: function (id) {
this.regionId = id;
},
}
};