commit
33fba05a38
@ -8,6 +8,7 @@ import com.genersoft.iot.vmp.gb28181.bean.Device;
|
|||||||
import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel;
|
import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel;
|
||||||
import com.genersoft.iot.vmp.gb28181.event.subscribe.catalog.CatalogEvent;
|
import com.genersoft.iot.vmp.gb28181.event.subscribe.catalog.CatalogEvent;
|
||||||
import com.genersoft.iot.vmp.utils.DateUtil;
|
import com.genersoft.iot.vmp.utils.DateUtil;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.apache.commons.lang3.math.NumberUtils;
|
import org.apache.commons.lang3.math.NumberUtils;
|
||||||
import org.dom4j.Attribute;
|
import org.dom4j.Attribute;
|
||||||
import org.dom4j.Document;
|
import org.dom4j.Document;
|
||||||
@ -214,8 +215,11 @@ public class XmlUtil {
|
|||||||
return deviceChannel;
|
return deviceChannel;
|
||||||
}
|
}
|
||||||
Element nameElement = itemDevice.element("Name");
|
Element nameElement = itemDevice.element("Name");
|
||||||
if (nameElement != null) {
|
// 当通道名称为空时,设置通道名称为通道编码,避免级联时因通道名称为空导致上级接收通道失败
|
||||||
|
if (nameElement != null && StringUtils.isNotBlank(nameElement.getText())) {
|
||||||
deviceChannel.setName(nameElement.getText());
|
deviceChannel.setName(nameElement.getText());
|
||||||
|
} else {
|
||||||
|
deviceChannel.setName(channelId);
|
||||||
}
|
}
|
||||||
if(channelId.length() <= 8) {
|
if(channelId.length() <= 8) {
|
||||||
deviceChannel.setHasAudio(false);
|
deviceChannel.setHasAudio(false);
|
||||||
|
@ -6,7 +6,6 @@ import com.genersoft.iot.vmp.gb28181.bean.DeviceChannelInPlatform;
|
|||||||
import com.genersoft.iot.vmp.vmanager.gb28181.platform.bean.ChannelReduce;
|
import com.genersoft.iot.vmp.vmanager.gb28181.platform.bean.ChannelReduce;
|
||||||
import com.genersoft.iot.vmp.web.gb28181.dto.DeviceChannelExtend;
|
import com.genersoft.iot.vmp.web.gb28181.dto.DeviceChannelExtend;
|
||||||
import org.apache.ibatis.annotations.*;
|
import org.apache.ibatis.annotations.*;
|
||||||
import org.apache.ibatis.annotations.Param;
|
|
||||||
import org.springframework.stereotype.Repository;
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -31,7 +30,7 @@ public interface DeviceChannelMapper {
|
|||||||
@Update(value = {" <script>" +
|
@Update(value = {" <script>" +
|
||||||
"UPDATE wvp_device_channel " +
|
"UPDATE wvp_device_channel " +
|
||||||
"SET update_time=#{updateTime}" +
|
"SET update_time=#{updateTime}" +
|
||||||
"<if test='name != null'>, name=#{name}</if>" +
|
", custom_name=#{name}" +
|
||||||
"<if test='manufacture != null'>, manufacture=#{manufacture}</if>" +
|
"<if test='manufacture != null'>, manufacture=#{manufacture}</if>" +
|
||||||
"<if test='model != null'>, model=#{model}</if>" +
|
"<if test='model != null'>, model=#{model}</if>" +
|
||||||
"<if test='owner != null'>, owner=#{owner}</if>" +
|
"<if test='owner != null'>, owner=#{owner}</if>" +
|
||||||
@ -49,12 +48,12 @@ public interface DeviceChannelMapper {
|
|||||||
"<if test='ipAddress != null'>, ip_address=#{ipAddress}</if>" +
|
"<if test='ipAddress != null'>, ip_address=#{ipAddress}</if>" +
|
||||||
"<if test='port != null'>, port=#{port}</if>" +
|
"<if test='port != null'>, port=#{port}</if>" +
|
||||||
"<if test='password != null'>, password=#{password}</if>" +
|
"<if test='password != null'>, password=#{password}</if>" +
|
||||||
"<if test='PTZType != null'>, ptz_type=#{PTZType}</if>" +
|
"<if test='PTZType != null'>, custom_ptz_type=#{PTZType}</if>" +
|
||||||
"<if test='status != null'>, status=#{status}</if>" +
|
"<if test='status != null'>, status=#{status}</if>" +
|
||||||
"<if test='streamId != null'>, stream_id=#{streamId}</if>" +
|
"<if test='streamId != null'>, stream_id=#{streamId}</if>" +
|
||||||
"<if test='hasAudio != null'>, has_audio=#{hasAudio}</if>" +
|
"<if test='hasAudio != null'>, has_audio=#{hasAudio}</if>" +
|
||||||
"<if test='longitude != null'>, longitude=#{longitude}</if>" +
|
", custom_longitude=#{longitude}" +
|
||||||
"<if test='latitude != null'>, latitude=#{latitude}</if>" +
|
", custom_latitude=#{latitude}" +
|
||||||
"<if test='longitudeGcj02 != null'>, longitude_gcj02=#{longitudeGcj02}</if>" +
|
"<if test='longitudeGcj02 != null'>, longitude_gcj02=#{longitudeGcj02}</if>" +
|
||||||
"<if test='latitudeGcj02 != null'>, latitude_gcj02=#{latitudeGcj02}</if>" +
|
"<if test='latitudeGcj02 != null'>, latitude_gcj02=#{latitudeGcj02}</if>" +
|
||||||
"<if test='longitudeWgs84 != null'>, longitude_wgs84=#{longitudeWgs84}</if>" +
|
"<if test='longitudeWgs84 != null'>, longitude_wgs84=#{longitudeWgs84}</if>" +
|
||||||
@ -67,7 +66,43 @@ public interface DeviceChannelMapper {
|
|||||||
|
|
||||||
@Select(value = {" <script>" +
|
@Select(value = {" <script>" +
|
||||||
"SELECT " +
|
"SELECT " +
|
||||||
"dc.* " +
|
"dc.id, " +
|
||||||
|
"dc.channel_id, " +
|
||||||
|
"COALESCE(dc.custom_name, dc.name) AS name, " +
|
||||||
|
"dc.manufacture, " +
|
||||||
|
"dc.model, " +
|
||||||
|
"dc.owner, " +
|
||||||
|
"dc.civil_code, " +
|
||||||
|
"dc.block, " +
|
||||||
|
"dc.address, " +
|
||||||
|
"dc.parent_id, " +
|
||||||
|
"dc.safety_way, " +
|
||||||
|
"dc.register_way, " +
|
||||||
|
"dc.cert_num, " +
|
||||||
|
"dc.certifiable, " +
|
||||||
|
"dc.err_code, " +
|
||||||
|
"dc.end_time, " +
|
||||||
|
"dc.secrecy, " +
|
||||||
|
"dc.ip_address, " +
|
||||||
|
"dc.port, " +
|
||||||
|
"dc.password, " +
|
||||||
|
"COALESCE(dc.custom_ptz_type, dc.ptz_type) AS ptz_type, " +
|
||||||
|
"dc.status, " +
|
||||||
|
"COALESCE(dc.custom_longitude, dc.longitude) AS longitude, " +
|
||||||
|
"COALESCE(dc.custom_latitude, dc.latitude) AS latitude, " +
|
||||||
|
"dc.stream_id, " +
|
||||||
|
"dc.device_id, " +
|
||||||
|
"dc.parental, " +
|
||||||
|
"dc.has_audio, " +
|
||||||
|
"dc.create_time, " +
|
||||||
|
"dc.update_time, " +
|
||||||
|
"dc.sub_count, " +
|
||||||
|
"dc.longitude_gcj02, " +
|
||||||
|
"dc.latitude_gcj02, " +
|
||||||
|
"dc.longitude_wgs84, " +
|
||||||
|
"dc.latitude_wgs84, " +
|
||||||
|
"dc.business_group_id, " +
|
||||||
|
"dc.gps_time " +
|
||||||
"from " +
|
"from " +
|
||||||
"wvp_device_channel dc " +
|
"wvp_device_channel dc " +
|
||||||
"WHERE " +
|
"WHERE " +
|
||||||
@ -154,7 +189,7 @@ public interface DeviceChannelMapper {
|
|||||||
" dc.id,\n" +
|
" dc.id,\n" +
|
||||||
" dc.channel_id,\n" +
|
" dc.channel_id,\n" +
|
||||||
" dc.device_id,\n" +
|
" dc.device_id,\n" +
|
||||||
" dc.name,\n" +
|
" COALESCE(dc.custom_name, dc.name) AS name,\n" +
|
||||||
" de.manufacturer,\n" +
|
" de.manufacturer,\n" +
|
||||||
" de.host_address,\n" +
|
" de.host_address,\n" +
|
||||||
" dc.sub_count,\n" +
|
" dc.sub_count,\n" +
|
||||||
@ -392,10 +427,10 @@ public interface DeviceChannelMapper {
|
|||||||
@Select("select * from wvp_device_channel where device_id=#{deviceId} and SUBSTRING(channel_id, 11, 3)=#{typeCode}")
|
@Select("select * from wvp_device_channel where device_id=#{deviceId} and SUBSTRING(channel_id, 11, 3)=#{typeCode}")
|
||||||
List<DeviceChannel> getBusinessGroups(@Param("deviceId") String deviceId, @Param("typeCode") String typeCode);
|
List<DeviceChannel> getBusinessGroups(@Param("deviceId") String deviceId, @Param("typeCode") String typeCode);
|
||||||
|
|
||||||
@Select("select dc.id, dc.channel_id, dc.device_id, dc.name, dc.manufacture,dc.model,dc.owner, pc.civil_code,dc.block, " +
|
@Select("select dc.id, dc.channel_id, dc.device_id, COALESCE(dc.custom_name, dc.name) AS name, dc.manufacture,dc.model,dc.owner, pc.civil_code,dc.block, " +
|
||||||
" dc.address, '0' as parental,'0' as channel_type, pc.id as parent_id, dc.safety_way, dc.register_way,dc.cert_num, dc.certifiable, " +
|
" dc.address, '0' as parental,'0' as channel_type, pc.id as parent_id, dc.safety_way, dc.register_way,dc.cert_num, dc.certifiable, " +
|
||||||
" dc.err_code,dc.end_time, dc.secrecy, dc.ip_address, dc.port, dc.ptz_type, dc.password, dc.status, " +
|
" dc.err_code,dc.end_time, dc.secrecy, dc.ip_address, dc.port, COALESCE(dc.custom_ptz_type, dc.ptz_type) AS ptz_type, dc.password, dc.status, " +
|
||||||
" dc.longitude_wgs84 as longitude, dc.latitude_wgs84 as latitude, pc.business_group_id " +
|
" COALESCE(dc.custom_longitude, dc.longitude) AS longitude, COALESCE(dc.custom_latitude, dc.latitude) AS latitude, pc.business_group_id " +
|
||||||
" from wvp_device_channel dc" +
|
" from wvp_device_channel dc" +
|
||||||
" LEFT JOIN wvp_platform_gb_channel pgc on dc.id = pgc.device_channel_id" +
|
" LEFT JOIN wvp_platform_gb_channel pgc on dc.id = pgc.device_channel_id" +
|
||||||
" LEFT JOIN wvp_platform_catalog pc on pgc.catalog_id = pc.id and pgc.platform_id = pc.platform_id" +
|
" LEFT JOIN wvp_platform_catalog pc on pgc.catalog_id = pc.id and pgc.platform_id = pc.platform_id" +
|
||||||
@ -457,7 +492,44 @@ public interface DeviceChannelMapper {
|
|||||||
void clearPlay(String deviceId);
|
void clearPlay(String deviceId);
|
||||||
// 设备主子码流逻辑END
|
// 设备主子码流逻辑END
|
||||||
@Select(value = {" <script>" +
|
@Select(value = {" <script>" +
|
||||||
"select * " +
|
"SELECT id,\n" +
|
||||||
|
" channel_id,\n" +
|
||||||
|
" COALESCE(custom_name, name) AS name,\n" +
|
||||||
|
" custom_name,\n" +
|
||||||
|
" manufacture,\n" +
|
||||||
|
" model,\n" +
|
||||||
|
" owner,\n" +
|
||||||
|
" civil_code,\n" +
|
||||||
|
" block,\n" +
|
||||||
|
" address,\n" +
|
||||||
|
" parent_id,\n" +
|
||||||
|
" safety_way,\n" +
|
||||||
|
" register_way,\n" +
|
||||||
|
" cert_num,\n" +
|
||||||
|
" certifiable,\n" +
|
||||||
|
" err_code,\n" +
|
||||||
|
" end_time,\n" +
|
||||||
|
" secrecy,\n" +
|
||||||
|
" ip_address,\n" +
|
||||||
|
" port,\n" +
|
||||||
|
" password,\n" +
|
||||||
|
" COALESCE(custom_ptz_type, ptz_type) AS ptz_type,\n" +
|
||||||
|
" status,\n" +
|
||||||
|
" COALESCE(custom_longitude, longitude) AS longitude,\n" +
|
||||||
|
" COALESCE(custom_latitude, latitude) AS latitude,\n" +
|
||||||
|
" stream_id,\n" +
|
||||||
|
" device_id,\n" +
|
||||||
|
" parental,\n" +
|
||||||
|
" has_audio,\n" +
|
||||||
|
" create_time,\n" +
|
||||||
|
" update_time,\n" +
|
||||||
|
" sub_count,\n" +
|
||||||
|
" longitude_gcj02,\n" +
|
||||||
|
" latitude_gcj02,\n" +
|
||||||
|
" longitude_wgs84,\n" +
|
||||||
|
" latitude_wgs84,\n" +
|
||||||
|
" business_group_id,\n" +
|
||||||
|
" gps_time\n" +
|
||||||
"from wvp_device_channel " +
|
"from wvp_device_channel " +
|
||||||
"where device_id=#{deviceId}" +
|
"where device_id=#{deviceId}" +
|
||||||
" <if test='parentId != null and parentId != deviceId'> and parent_id = #{parentId} </if>" +
|
" <if test='parentId != null and parentId != deviceId'> and parent_id = #{parentId} </if>" +
|
||||||
|
@ -44,12 +44,24 @@
|
|||||||
<DeviceTree ref="deviceTree" :device="device" :onlyCatalog="true" :clickEvent="treeNodeClickEvent"></DeviceTree>
|
<DeviceTree ref="deviceTree" :device="device" :onlyCatalog="true" :clickEvent="treeNodeClickEvent"></DeviceTree>
|
||||||
</el-aside>
|
</el-aside>
|
||||||
<el-main style="padding: 5px;">
|
<el-main style="padding: 5px;">
|
||||||
<el-table ref="channelListTable" :data="deviceChannelList" :height="winHeight" style="width: 100%" header-row-class-name="table-header">
|
<el-table ref="channelListTable" :data="deviceChannelList" :height="winHeight" style="width: 100%"
|
||||||
|
header-row-class-name="table-header">
|
||||||
<el-table-column prop="channelId" label="通道编号" min-width="200">
|
<el-table-column prop="channelId" label="通道编号" min-width="200">
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column prop="deviceId" label="设备编号" min-width="200">
|
<el-table-column prop="deviceId" label="设备编号" min-width="200">
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column prop="name" label="通道名称" min-width="200">
|
<el-table-column prop="name" label="通道名称" min-width="200">
|
||||||
|
<template v-slot:default="scope">
|
||||||
|
<el-input
|
||||||
|
v-show="scope.row.edit"
|
||||||
|
v-model="scope.row.name"
|
||||||
|
placeholder="通道名称"
|
||||||
|
:maxlength="255"
|
||||||
|
show-word-limit
|
||||||
|
clearable
|
||||||
|
/>
|
||||||
|
<span v-show="!scope.row.edit">{{ scope.row.name }}</span>
|
||||||
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="快照" min-width="120">
|
<el-table-column label="快照" min-width="120">
|
||||||
<template v-slot:default="scope">
|
<template v-slot:default="scope">
|
||||||
@ -70,12 +82,32 @@
|
|||||||
<el-table-column prop="manufacture" label="厂家" min-width="120">
|
<el-table-column prop="manufacture" label="厂家" min-width="120">
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="位置信息" min-width="200">
|
<el-table-column label="位置信息" min-width="200">
|
||||||
<template slot-scope="scope">
|
<template v-slot:default="scope">
|
||||||
<span v-if="scope.row.longitude*scope.row.latitude > 0">{{ scope.row.longitude }},<br>{{ scope.row.latitude }}</span>
|
<el-input
|
||||||
<span v-if="scope.row.longitude*scope.row.latitude === 0">无</span>
|
v-show="scope.row.edit"
|
||||||
|
v-model="scope.row.location"
|
||||||
|
placeholder="例:117.234,36.378"
|
||||||
|
:maxlength="30"
|
||||||
|
show-word-limit
|
||||||
|
clearable
|
||||||
|
/>
|
||||||
|
<span v-show="!scope.row.edit">{{ scope.row.location }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column prop="PTZType" label="云台类型" min-width="120">
|
||||||
|
<template v-slot:default="scope">
|
||||||
|
<el-select v-show="scope.row.edit" v-model="scope.row.PTZType"
|
||||||
|
placeholder="云台类型" filterable>
|
||||||
|
<el-option
|
||||||
|
v-for="(value, key) in ptzTypes"
|
||||||
|
:key="key"
|
||||||
|
:label="value"
|
||||||
|
:value="key"
|
||||||
|
/>
|
||||||
|
</el-select>
|
||||||
|
<div v-show="!scope.row.edit">{{ scope.row.PTZTypeText }}</div>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column prop="PTZTypeText" label="云台类型" min-width="120"/>
|
|
||||||
<el-table-column label="开启音频" min-width="120">
|
<el-table-column label="开启音频" min-width="120">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<el-switch @change="updateChannel(scope.row)" v-model="scope.row.hasAudio" active-color="#409EFF">
|
<el-switch @change="updateChannel(scope.row)" v-model="scope.row.hasAudio" active-color="#409EFF">
|
||||||
@ -92,18 +124,44 @@
|
|||||||
</el-table-column>
|
</el-table-column>
|
||||||
|
|
||||||
|
|
||||||
<el-table-column label="操作" min-width="280" fixed="right">
|
<el-table-column label="操作" min-width="340" fixed="right">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<el-button size="medium" v-bind:disabled="device == null || device.online === 0" icon="el-icon-video-play" type="text" @click="sendDevicePush(scope.row)">播放</el-button>
|
<el-button size="medium" v-bind:disabled="device == null || device.online === 0" icon="el-icon-video-play"
|
||||||
<el-button size="medium" v-bind:disabled="device == null || device.online === 0" icon="el-icon-switch-button" type="text" style="color: #f56c6c" v-if="!!scope.row.streamId"
|
type="text" @click="sendDevicePush(scope.row)">播放
|
||||||
|
</el-button>
|
||||||
|
<el-button size="medium" v-bind:disabled="device == null || device.online === 0"
|
||||||
|
icon="el-icon-switch-button"
|
||||||
|
type="text" style="color: #f56c6c" v-if="!!scope.row.streamId"
|
||||||
@click="stopDevicePush(scope.row)">停止
|
@click="stopDevicePush(scope.row)">停止
|
||||||
</el-button>
|
</el-button>
|
||||||
<el-divider direction="vertical"></el-divider>
|
<el-divider direction="vertical"></el-divider>
|
||||||
<el-button size="medium" icon="el-icon-s-open" type="text" v-if="scope.row.subCount > 0 || scope.row.parental === 1"
|
<el-button
|
||||||
|
v-if="scope.row.edit"
|
||||||
|
size="medium"
|
||||||
|
type="text"
|
||||||
|
icon="el-icon-edit-outline"
|
||||||
|
@click="handleSave(scope.row)"
|
||||||
|
>
|
||||||
|
保存
|
||||||
|
</el-button>
|
||||||
|
<el-button
|
||||||
|
v-else
|
||||||
|
size="medium"
|
||||||
|
type="text"
|
||||||
|
icon="el-icon-edit"
|
||||||
|
@click="handleEdit(scope.row)"
|
||||||
|
>
|
||||||
|
编辑
|
||||||
|
</el-button>
|
||||||
|
<el-divider direction="vertical"></el-divider>
|
||||||
|
<el-button size="medium" icon="el-icon-s-open" type="text"
|
||||||
|
v-if="scope.row.subCount > 0 || scope.row.parental === 1"
|
||||||
@click="changeSubchannel(scope.row)">查看
|
@click="changeSubchannel(scope.row)">查看
|
||||||
</el-button>
|
</el-button>
|
||||||
<el-divider v-if="scope.row.subCount > 0 || scope.row.parental === 1" direction="vertical"></el-divider>
|
<el-divider v-if="scope.row.subCount > 0 || scope.row.parental === 1" direction="vertical"></el-divider>
|
||||||
<el-button size="medium" v-bind:disabled="device == null || device.online === 0" icon="el-icon-video-camera" type="text" @click="queryRecords(scope.row)">设备录像
|
<el-button size="medium" v-bind:disabled="device == null || device.online === 0"
|
||||||
|
icon="el-icon-video-camera"
|
||||||
|
type="text" @click="queryRecords(scope.row)">设备录像
|
||||||
</el-button>
|
</el-button>
|
||||||
<el-button size="medium" v-bind:disabled="device == null || device.online === 0" icon="el-icon-cloudy"
|
<el-button size="medium" v-bind:disabled="device == null || device.online === 0" icon="el-icon-cloudy"
|
||||||
type="text" @click="queryCloudRecords(scope.row)">云端录像
|
type="text" @click="queryCloudRecords(scope.row)">云端录像
|
||||||
@ -163,7 +221,14 @@ export default {
|
|||||||
beforeUrl: "/deviceList",
|
beforeUrl: "/deviceList",
|
||||||
isLoging: false,
|
isLoging: false,
|
||||||
showTree: false,
|
showTree: false,
|
||||||
loadSnap: {}
|
loadSnap: {},
|
||||||
|
ptzTypes: {
|
||||||
|
0: "未知",
|
||||||
|
1: "球机",
|
||||||
|
2: "半球",
|
||||||
|
3: "固定枪机",
|
||||||
|
4: "遥控枪机"
|
||||||
|
}
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -227,6 +292,14 @@ export default {
|
|||||||
if (res.data.code === 0) {
|
if (res.data.code === 0) {
|
||||||
that.total = res.data.data.total;
|
that.total = res.data.data.total;
|
||||||
that.deviceChannelList = res.data.data.list;
|
that.deviceChannelList = res.data.data.list;
|
||||||
|
that.deviceChannelList.forEach(e => {
|
||||||
|
e.PTZType = e.PTZType + "";
|
||||||
|
that.$set(e, "edit", false);
|
||||||
|
that.$set(e, "location", "");
|
||||||
|
if (e.longitude && e.latitude) {
|
||||||
|
that.$set(e, "location", e.longitude + "," + e.latitude);
|
||||||
|
}
|
||||||
|
});
|
||||||
// 防止出现表格错位
|
// 防止出现表格错位
|
||||||
that.$nextTick(() => {
|
that.$nextTick(() => {
|
||||||
that.$refs.channelListTable.doLayout();
|
that.$refs.channelListTable.doLayout();
|
||||||
@ -367,6 +440,14 @@ export default {
|
|||||||
if (res.data.code === 0) {
|
if (res.data.code === 0) {
|
||||||
this.total = res.data.data.total;
|
this.total = res.data.data.total;
|
||||||
this.deviceChannelList = res.data.data.list;
|
this.deviceChannelList = res.data.data.list;
|
||||||
|
this.deviceChannelList.forEach(e => {
|
||||||
|
e.PTZType = e.PTZType + "";
|
||||||
|
this.$set(e, "edit", false);
|
||||||
|
this.$set(e, "location", "");
|
||||||
|
if (e.longitude && e.latitude) {
|
||||||
|
this.$set(e, "location", e.longitude + "," + e.latitude);
|
||||||
|
}
|
||||||
|
});
|
||||||
// 防止出现表格错位
|
// 防止出现表格错位
|
||||||
this.$nextTick(() => {
|
this.$nextTick(() => {
|
||||||
this.$refs.channelListTable.doLayout();
|
this.$refs.channelListTable.doLayout();
|
||||||
@ -439,8 +520,66 @@ export default {
|
|||||||
this.parentChannelId = data.channelId;
|
this.parentChannelId = data.channelId;
|
||||||
}
|
}
|
||||||
this.initData();
|
this.initData();
|
||||||
|
},
|
||||||
|
// 保存
|
||||||
|
handleSave(row) {
|
||||||
|
if (row.location) {
|
||||||
|
const segements = row.location.split(",");
|
||||||
|
if (segements.length !== 2) {
|
||||||
|
this.$message.warning("位置信息格式有误,例:117.234,36.378");
|
||||||
|
return;
|
||||||
|
} else {
|
||||||
|
row.longitude = parseFloat(segements[0]);
|
||||||
|
row.latitude = parseFloat(segements[1]);
|
||||||
|
if (!(row.longitude && row.latitude)) {
|
||||||
|
this.$message.warning("位置信息格式有误,例:117.234,36.378");
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
delete row.longitude;
|
||||||
|
delete row.latitude;
|
||||||
|
}
|
||||||
|
Object.keys(row).forEach(key => {
|
||||||
|
const value = row[key];
|
||||||
|
if (value === null || value === undefined || (typeof value === "string" && value.trim() === "")) {
|
||||||
|
delete row[key];
|
||||||
|
}
|
||||||
|
});
|
||||||
|
this.$axios({
|
||||||
|
method: 'post',
|
||||||
|
url: `/api/device/query/channel/update/${this.deviceId}`,
|
||||||
|
params: row
|
||||||
|
}).then(response => {
|
||||||
|
if (response.data.code === 0) {
|
||||||
|
this.$message.success("修改成功!");
|
||||||
|
this.initData();
|
||||||
|
} else {
|
||||||
|
this.$message.error("修改失败!");
|
||||||
|
}
|
||||||
|
}).catch(_ => {
|
||||||
|
this.$message.error("修改失败!");
|
||||||
|
})
|
||||||
|
},
|
||||||
|
// 是否正在编辑
|
||||||
|
isEdit() {
|
||||||
|
let editing = false;
|
||||||
|
this.deviceChannelList.forEach(e => {
|
||||||
|
if (e.edit) {
|
||||||
|
editing = true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return editing;
|
||||||
|
},
|
||||||
|
// 编辑
|
||||||
|
handleEdit(row) {
|
||||||
|
if (this.isEdit()) {
|
||||||
|
this.$message.warning('请保存当前编辑项!');
|
||||||
|
} else {
|
||||||
|
row.edit = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
Loading…
Reference in New Issue
Block a user