设备终端定位查询,电子围栏、电子区域接口联调\

main
xuechunyuan 2 years ago
parent cb38e05a02
commit dbb6c528f8
  1. 4
      src/App.vue
  2. 58
      src/api/rails/rails.js
  3. 12
      src/api/wirelessintrusion/wirelessintrusion.js
  4. 21
      src/router/axios.js
  5. 2
      src/views/alarmcenter/index.vue
  6. 387
      src/views/alarmcenter/peopleposition/list.vue
  7. 64
      src/views/map/index.vue
  8. 444
      src/views/rails/arealist.vue
  9. 129
      src/views/rails/list.vue
  10. 16
      src/views/wirelessintrusion/device/list.vue
  11. 2
      src/views/wirelessintrusion/warn/record.vue

@ -102,10 +102,10 @@ export default {
this.reconnect();//
},
websocketsend(messsage) {
that.websocket.send(messsage)
this.websocket.send(messsage)
},
closeWebSocket() { // websocket
that.websocket.close()
this.websocket.close()
},
},
computed: {}

@ -5,7 +5,7 @@ const baseUrl = process.env.NODE_ENV === 'production' ? 'http://182.139.182.190:
//围栏列表
export const getRailsList = (token, params) => {
return request({
url: baseUrl + '/api/electronicFence/getRails',
url: baseUrl + '/api/electronicFencePlatform/rail/page',
method: 'get',
headers: {
Authorization: token
@ -28,7 +28,7 @@ export const railsDetail = (token, id) => {
//围栏删除
export const railsDelete = (token, data) => {
return request({
url: baseUrl + '/api/electronicFence/rails',
url: baseUrl + '/api/electronicFencePlatform/deleteRail',
method: 'delete',
headers: {
Authorization: token
@ -40,7 +40,7 @@ export const railsDelete = (token, data) => {
//围栏新增
export const railsAdd = (token, data) => {
return request({
url: baseUrl + '/api/electronicFence/rails',
url: baseUrl + '/api/electronicFencePlatform/rail',
method: 'post',
headers: {
Authorization: token
@ -52,7 +52,45 @@ export const railsAdd = (token, data) => {
//围栏编辑
export const railsUpdate = (token, data) => {
return request({
url: baseUrl + '/api/electronicFence/edit',
url: baseUrl + '/api/electronicFencePlatform/editRail',
method: 'put',
headers: {
Authorization: token
},
data: data,
authorization: false
})
}
///////////////////////////////////////////////////////////////////////////////////////////
//电子区域列表
export const getRegionRailsList = (token, params) => {
return request({
url: baseUrl + '/api/electronicFencePlatform/region/page',
method: 'get',
headers: {
Authorization: token
},
params: params,
authorization: false
})
}
//电子区域删除
export const regionDelete = (token, data) => {
return request({
url: baseUrl + '/api/electronicFencePlatform/deleteRegion',
method: 'delete',
headers: {
Authorization: token
},
data: data,
authorization: false
})
}
//电子区域新增
export const regionAdd = (token, data) => {
return request({
url: baseUrl + '/api/electronicFencePlatform/region',
method: 'post',
headers: {
Authorization: token
@ -61,4 +99,16 @@ export const railsUpdate = (token, data) => {
authorization: false
})
}
//电子区域编辑
export const regionUpdate = (token, data) => {
return request({
url: baseUrl + '/api/electronicFencePlatform/editRegion',
method: 'put',
headers: {
Authorization: token
},
data: data,
authorization: false
})
}

@ -146,4 +146,16 @@ export const alarmInfoUpdate = (data) => {
method: 'post',
data: data
})
}
//定位设备列表
export const terminalList = (token, params) => {
return request({
url: baseUrl + '/api/deviceTerminal/device/terminal',
method: 'get',
headers: {
Authorization: token
},
params: params,
authorization: false
})
}

@ -72,9 +72,9 @@ axios.interceptors.response.use(res => {
//如果在白名单里则自行catch逻辑处理
if (statusWhiteList.includes(status)) return Promise.reject(res);
//如果是401则跳转到登录页面
if (status === 401 && message.indexOf('/api/electronicFence') < 0 && message.indexOf('/system/dict/data/type/node_type') < 0 && message.indexOf('/system/dict/data/type/device_status') < 0 && message.indexOf('/api/bizDevice/list') < 0) store.dispatch('FedLogOut').then(() => router.push({path: '/login'}));
if (status === 401 && checkWhiteList(message)) store.dispatch('FedLogOut').then(() => router.push({path: '/login'}));
// 如果请求为非200否者默认统一处理
if (status !== 200 && message.indexOf('/api/electronicFence') < 0 && message.indexOf('/system/dict/data/type/node_type') < 0 && message.indexOf('/system/dict/data/type/device_status') < 0 && message.indexOf('/api/bizDevice/list') < 0) {
if (status !== 200 && checkWhiteList(message)) {
Message({
message: message,
type: 'error'
@ -87,4 +87,21 @@ axios.interceptors.response.use(res => {
return Promise.reject(new Error(error));
});
const whiteList = [
'/api/electronicFence',
'/system/dict/data/type/node_type',
'/system/dict/data/type/device_status',
'/api/bizDevice/list',
'/api/deviceTerminal/device/terminal',
'/api/electronicFencePlatform',
'/api/electronicFencePlatform'
];//物联网平台白名单接口
function checkWhiteList(message) {
let ret = true;
whiteList.map(item => {
ret = message.indexOf(item) < 0 ? false : true;
})
return ret;
}
export default axios;

@ -271,7 +271,7 @@ export default {
//
handleExport() {
let values = {
deviceType: func.toStr(this.query.deviceType)
deviceType: func.toStr(this.query.type)
};
if (this.query.releaseTimeRange) {
values = {

@ -1,342 +1,251 @@
<template>
<basic-container>
<avue-crud :option="option" :table-loading="loading" :data="data" :page.sync="page" ref="crud" @row-del="rowDel"
v-model="form" :permission="permissionList" @row-update="rowUpdate" @row-save="rowSave" :before-open="beforeOpen"
@search-change="searchChange" @search-reset="searchReset" @selection-change="selectionChange"
<avue-crud :option="option" :table-loading="loading" :data="data" ref="crud" :page.sync="page"
:permission="permissionList" @search-change="searchChange" @search-reset="searchReset"
@current-change="currentChange" @size-change="sizeChange" @refresh-change="refreshChange" @on-load="onLoad">
<template #menu="{ row, index }">
<el-button type="text" icon="el-icon-view" size="small" @click="rowView(row, index)">详情
</el-button>
<el-button type="text" icon="el-icon-map-location" :disabled="row.x == null" size="small" @click="rowMap(row, index)">地图定位
</el-button>
</template>
</avue-crud>
<!-- 地图定位 -->
<el-dialog v-if="dialogVisible" :visible.sync="dialogVisible" modal="false" append-to-body fullscreen>
<MapView :name="sn" :x="x" :y="y"></MapView>
</el-dialog>
</basic-container>
</template>
<script>
import { bizLogin, bizDeviceList, bizDeviceStatus, bizNodeType } from "@/api/wirelessintrusion/wirelessintrusion";
import { bizLogin, terminalList } from "@/api/wirelessintrusion/wirelessintrusion";
import { mapGetters } from "vuex";
import { dateFormat } from "../../../util/date";
import MapView from "../../map/index.vue";
export default {
components: {
MapView
},
data() {
return {
form: {},
query: {},
loading: true,
page: {
pageSize: 10,
currentPage: 1,
size: 10,
current: 1,
total: 0
},
selectionList: [],
option: {
height: 'auto',
calcHeight: 30,
dialogWidth: 950,
tip: false,
searchShow: true,
searchMenuSpan: 6,
border: true,
index: true,
selection: false,
viewBtn: true,
editBtn: false,
delBtn: false,
addBtn: false,
dialogClickModal: false,
menuWidth: 180,
column: [
{
label: "设备名称",
prop: "name",
span: 12,
},
{
label:"sn编号",
prop: "sn",
search: true,
formatter: (val, value, label) => {
return val.name + '/' + val.remark
},
labelWidth: 120
hide: true
},
{
label: "备注名称",
prop: "remark",
span: 12,
hide: true,
viewDisplay: true,
labelWidth: 120
label: "建筑 id",
prop: "buildId",
},
{
label: "设备所属产品",
prop: "name",
span: 12,
labelWidth: 120
label: "楼层",
prop: "floorNo",
},
{
label: "节点类型",
label: "x坐标",
prop: "x",
},
{
label: "y坐标",
prop: "y",
},
{
label: "工作状态",
type: "select",
dicData: [],
props: {
label: "dictLabel",
value: "dictValue"
},
search: true,
prop: "node",
labelWidth: 120,
viewDisplay: false
dicData: [
{value:'work', label:"工作"},{value:'sleep', label:"休眠"}
],
prop: "workStatus",
},
{
label: "节点类型",
prop: "nodeLabel",
labelWidth: 120,
hide: true,
viewDisplay: true
label: "通信状态",
type: "select",
dicData: [
{value:0, label:"在线"},{value:1, label:"离线"}
],
prop: "communicateStatus",
},
{
label: "网关信息",
prop: "gateway",
formatter: (val, value, label) => {
return val.gateway || '-'
label: "最后一次通信时间",
labelWidth: 150,
prop: "lastCommunicateTime",
span: 24,
formatter: (data, value) => {
return dateFormat(new Date(data.lastCommunicateTime))
},
labelWidth: 120
hide: true
},
{
label: "设备状态",
type: "select",
dicData: [],
props: {
label: "dictLabel",
value: "dictValue"
label: "最后一次配置时间",
labelWidth: 150,
prop: "lastConfigTime",
span: 24,
formatter: (data, value) => {
return dateFormat(new Date(data.lastConfigTime))
},
search: true,
prop: "status",
labelWidth: 120,
viewDisplay: false,
},
hide: true
},
{
label: "节点类型",
prop: "statusLabel",
labelWidth: 120,
hide: true,
viewDisplay: true
label: "最后一次定位时间",
labelWidth: 150,
prop: "lastLocateTime",
span: 24,
formatter: (data, value) => {
return dateFormat(new Date(data.lastLocateTime))
},
hide:true
},
{
label: "创建时间时间",
label: "创建时间",
prop: "createTime",
labelWidth: 120,
hide: true,
viewDisplay: true,
}, {
label: "最后上线时间",
prop: "lastOnline",
labelWidth: 120
formatter: (data, value) => {
return dateFormat(new Date(data.createTime))
}
},
{
label: "更新时间",
prop: "updateTime",
formatter: (data, value) => {
return dateFormat(new Date(data.updateTime))
},
hide:true
}
]
},
data: [],
nodeType: [],//
submitLoading: false,
buildingId: 202861,
//
dialogVisible: false,
sn: '',
x: 0,
y: 0,
floorNo: 1
};
},
computed: {
...mapGetters(["permission"]),
...mapGetters(["userInfo", "permission"]),
permissionList() {
return {
addBtn: this.vaildData(this.permission.notice_add, false),
viewBtn: this.vaildData(this.permission.notice_view, false),
delBtn: this.vaildData(this.permission.notice_delete, false),
editBtn: this.vaildData(this.permission.notice_edit, false)
addBtn: false,
viewBtn: false,
delBtn: true,
editBtn: false
};
},
ids() {
let ids = [];
this.selectionList.forEach(ele => {
ids.push(ele.id);
});
return ids.join(",");
}
},
mounted() {
},
methods: {
//
loadDict() {
let token = window.sessionStorage.getItem('bizToken');
if (token == 'undefined' || !token) {
bizLogin({ appKey: 'Arf7bd4f26', appSecret: 'kb207044c8' }).then(res => {
window.sessionStorage.setItem('bizToken', res.data.data.token);
bizDeviceStatus(res.data.data.token).then(res => {
const column = this.findObject(this.option.column, "status");
column.dicData = res.data.data;
})
bizNodeType(res.data.data.token).then(res => {
const column = this.findObject(this.option.column, "node");
column.dicData = res.data.data;
})
})
} else {
bizDeviceStatus(token).then(res => {
if(res.data.code == 401){
window.sessionStorage.removeItem('bizToken');
this.loadDict();
}
else if(res.data.code == 200){
const column = this.findObject(this.option.column, "status");
column.dicData = res.data.data;
}
})
bizNodeType(token).then(res => {
const column = this.findObject(this.option.column, "node");
column.dicData = res.data.data;
})
}
//
rowView(row, index) {
this.$refs.crud.rowView(row, index);
},
//
renderLabel(node,col) {
const column = this.findObject(this.option.column, col);
let idx = column.dicData.findIndex(item => item.dictValue == node);
return idx > -1 ? column.dicData[idx].dictLabel : '';
//
rowMap(row, index) {
if(row.x && row.y) {
this.sn = row.sn;
this.x = row.x;
this.y = row.y;
this.floorNo = row.floorNo;
console.log(this.sn,this.x,this.y)
this.dialogVisible = true;
}
},
// rowSave(row, done, loading) {
// add(row).then(() => {
// this.onLoad(this.page);
// this.$message({
// type: "success",
// message: "!"
// });
// done();
// }, error => {
// window.console.log(error);
// loading();
// });
// },
// rowUpdate(row, index, done, loading) {
// update(row).then(() => {
// this.onLoad(this.page);
// this.$message({
// type: "success",
// message: "!"
// });
// done();
// }, error => {
// window.console.log(error);
// loading();
// });
// },
// rowDel(row) {
// this.$confirm("?", {
// confirmButtonText: "",
// cancelButtonText: "",
// type: "warning"
// })
// .then(() => {
// return remove(row.id);
// })
// .then(() => {
// this.onLoad(this.page);
// this.$message({
// type: "success",
// message: "!"
// });
// });
// },
searchReset() {
this.query = {};
this.onLoad(this.page);
},
searchChange(params, done) {
this.query = params;
this.page.currentPage = 1;
this.page.current = 1;
this.onLoad(this.page, params);
done();
},
selectionChange(list) {
this.selectionList = list;
},
selectionClear() {
this.selectionList = [];
this.$refs.crud.toggleSelection();
},
// handleDelete() {
// if (this.selectionList.length === 0) {
// this.$message.warning("");
// return;
// }
// this.$confirm("?", {
// confirmButtonText: "",
// cancelButtonText: "",
// type: "warning"
// })
// .then(() => {
// return remove(this.ids);
// })
// .then(() => {
// this.onLoad(this.page);
// this.$message({
// type: "success",
// message: "!"
// });
// this.$refs.crud.toggleSelection();
// });
// },
beforeOpen(done, type) {
console.log(this.form)
if (["edit", "view"].includes(type)) {
// let token = window.sessionStorage.getItem('bizToken');
// if (token == 'undefined') {
// bizDeviceDetail(this.form.id).then(res => {
// this.form = res.data.data;
// });
// }
}
done();
},
currentChange(currentPage) {
this.page.currentPage = currentPage;
currentChange(current) {
this.page.current = current;
},
sizeChange(pageSize) {
this.page.pageSize = pageSize;
sizeChange(size) {
this.page.size = size;
},
refreshChange() {
this.onLoad(this.page, this.query);
},
onLoad(page, params = {}) {
let values = {
...params,
...this.query,
pid: 98
};
let token = window.sessionStorage.getItem('bizToken');
if (token == 'undefined' || !token) {
bizLogin({ appKey: 'Arf7bd4f26', appSecret: 'kb207044c8' }).then(res => {
window.sessionStorage.setItem('bizToken', res.data.data.token);
this.loading = true;
bizDeviceList(res.data.data.token, { ...values, pageSize: page.pageSize, pageNo: page.currentPage }).then(res2 => {
const data = res2.data;
this.page.total = data.total;
this.data = data.records;
terminalList(res.data.data.token, Object.assign(params, this.query, { page: page.currentPage, size: page.pageSize, buildingIds: this.buildingId })).then(res2 => {
this.loading = false;
if (res2.data.code == 401) {
window.sessionStorage.removeItem('bizToken');
this.onLoad(this.page);
}
else {
const data = res2.data.data;
this.page.total = data.totalElements;
this.data = data.content;
}
}, err => {
this.loading = false;
this.selectionClear();
});
})
} else {
}
else {
this.loading = true;
bizDeviceList(token, { ...values, pageSize: page.pageSize, pageNo: page.currentPage }).then(res2 => {
terminalList(token, Object.assign(params, this.query, { page: page.currentPage, size: page.pageSize, buildingIds: this.buildingId })).then(res2 => {
this.loading = false;
this.selectionClear();
if(res2.data.code == 401){
console.log(res2.data.code)
if (res2.data.code == 401) {
window.sessionStorage.removeItem('bizToken');
this.onLoad();
this.onLoad(this.page);
}
else if(res2.data.code == 200){
const data = res2.data;
this.page.total = data.total;
data.rows.map(item => {
item.node = item.bizProduct.node;
item.nodeLabel = this.renderLabel(item.node,'node');
item.statusLabel = this.renderLabel(item.status,'status')
})
this.data = data.rows;
else {
const data = res2.data.data;
this.page.total = data.totalElements;
this.data = data.content;
}
}, err => {
this.loading = false;
this.selectionClear();
});
}
}
},
}
};
</script>
<style></style>
<style lang="scss" scoped>
.el-table {
width: 100% !important;
border: 1px solid #D6D8DF;
}
.el-table th.el-table__cell {
background: #F7F8FA;
}
</style>

@ -8,6 +8,24 @@
import Img from "@/assets/image/position_icon.png";
export default {
name: "map",
props: {
sn: {
type: String,
default: '1918FA08DD37'
},
floorNo: {
type: Number,
default: 3
},
x: {
type: Number,
default: 345
},
y: {
type: Number,
default: 268
}
},
data() {
return {
};
@ -17,6 +35,7 @@ export default {
window.map = null;
},
mounted() {
console.log('点位标注', this.sn);
window.map = new jsmapbase.JSMap({
container: 'mapContainer',
mapServerURL: 'data/map'
@ -34,26 +53,31 @@ export default {
}//x,y
});
window.map.addControl(floorControl);
console.log('点位标注')
//
var imagerMarker = new jsmapbase.JSImageMarker({
id: 'iamgeMareker1',//id
image: Img,//
position: new jsmapbase.JSPoint(120.61988850529002, 31.37531834395683, 0),//
width: 55,//-
height: 55,//-
floorId: 1,//id
offset: jsmapbase.JSControlPosition.RIGHT_BOTTOM,//
depthTest: false,//
show: true, //
properties: {
name: 'test'
},//
callback: (node) => {
console.log(node);
}//
});
window.map.addMarker(imagerMarker);
if(this.sn && this.floorNo && this.x && this.y) {
window.map._map.focusFloorId = this.floorNo;
let tool = new jsmapbase.JSMapCoordTool(window.map);
let pixel = tool.screenToMapCoordinate({x: this.x, y: this.y});
console.log(this.x);
//
var imagerMarker = new jsmapbase.JSImageMarker({
id: 'iamgeMareker1',//id
image: Img,//
position: new jsmapbase.JSPoint(pixel, 0),//
width: 55,//-
height: 55,//-
floorId: this.floorNo,//id
offset: jsmapbase.JSControlPosition.RIGHT_BOTTOM,//
depthTest: false,//
show: true, //
properties: {
name: 'test'
},//
callback: (node) => {
console.log(node);
}//
});
window.map.addMarker(imagerMarker);
}
});
},
methods: {

@ -0,0 +1,444 @@
<template>
<basic-container>
<avue-crud :option="option" :table-loading="loading" :data="data" ref="crud" :page.sync="page"
:permission="permissionList" @search-change="searchChange" @search-reset="searchReset"
@current-change="currentChange" @size-change="sizeChange" @refresh-change="refreshChange" @on-load="onLoad">
<template slot="menuLeft">
<el-button type="primary" size="small" icon="el-icon-plus" plain @click="rowAdd">新增
</el-button>
</template>
<template #menu="{ row, index }">
<el-button type="text" icon="el-icon-view" size="small" @click="rowView(row)">详情
</el-button>
<el-button type="text" icon="el-icon-edit" size="small" @click="rowEdit(row)">编辑
</el-button>
<el-button type="text" icon="el-icon-delete" size="small" @click="rowDel(row)">删除
</el-button>
</template>
</avue-crud>
<!-- 新增 编辑 详情 -->
<el-dialog :title="title" :visible.sync="dialogVisible" :append-to-body="true" :close-on-click-modal="false"
:close-on-press-escape="false" width="800px">
<el-form ref="addForm" :model="addForm" :rules="rules" label-width="80px">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="建筑ID" prop="buildingId">
<el-input v-model="addForm.buildingId" placeholder="请输入建筑ID" disabled maxlength="10" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="区域名称" prop="name">
<el-input v-model="addForm.name" placeholder="请输入围栏名称" :disabled="type == 'view'" maxlength="30" />
</el-form-item>
</el-col>
</el-row><el-form-item label="">
<el-table class="table_box" ref="multipleTable" row-key="_id" :data="tableData" tooltip-effect="dark"
style="width: 100%" @selection-change="handleSelectionChange" size="small">
<el-table-column type="selection" width="55" align="center" reserve-selection :selectable="selectable">
</el-table-column>
<el-table-column prop="name" label="围栏名称"></el-table-column>
<el-table-column prop="floorNo" label="楼层编号">
</el-table-column>
<el-table-column prop="type" label="围栏类型">
<template slot-scope="scope">
{{ scope.row.type == 0 ? '当前楼层' : scope.row.type == 1 ? '当前楼层' : ''}}
</template>
</el-table-column>
</el-table>
<div class="page_box">
<el-pagination @current-change="handleCurrentRailsChange"
:current-page="diaPage.currentPage" background
layout="total, prev, pager, next, jumper" :total="diaPage.total">
</el-pagination>
</div>
</el-form-item>
<el-row :gutter="20">
<el-col :span="24">
<el-form-item label="备注" prop="remark">
<el-input v-model="addForm.remark" placeholder="请输入备注" :disabled="type == 'view'" maxlength="200"
show-word-limit />
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="dialogVisible = false"> </el-button>
<el-button v-if="type != 'view'" type="primary" @click="submitForm" :loading="submitLoading">确认</el-button>
</div>
</el-dialog>
</basic-container>
</template>
<script>
import { bizLogin } from "@/api/wirelessintrusion/wirelessintrusion";
import { getRegionRailsList, regionDelete, regionAdd, regionUpdate, getRailsList } from "@/api/rails/rails";
import { mapGetters } from "vuex";
import { dateFormat } from "../../util/date"
export default {
data() {
return {
addForm: {
points: []
},
rules: {
floorNo: [
{ required: true, message: '请输入楼层', trigger: 'blur' },
],
name: [
{ required: true, message: '请输入围栏名称', trigger: 'blur' },
],
x: [
{ required: true, message: '请输入坐标x', trigger: 'blur' },
],
y: [
{ required: true, message: '请输入坐标y', trigger: 'blur' },
]
},
dialogVisible: false,
title: '电子区域新增',
type: 'add',
query: {},
loading: true,
page: {
size: 10,
current: 1,
total: 0
},
option: {
height: 'auto',
calcHeight: 30,
tip: false,
searchShow: true,
searchMenuSpan: 6,
border: true,
index: true,
selection: false,
viewBtn: false,
delBtn: false,
dialogClickModal: false,
column: [
{
label: "区域名称",
prop: "name",
},
{
label: "建筑 id",
prop: "buildingId",
},
{
label: "楼层",
prop: "floorNo",
},
{
label: "备注",
prop: "remark",
overHide: true
},
]
},
data: [],
submitLoading: false,
buildingId: 202861,//id
//
tableData: [],
multipleSelection: [],
selectedArr: [],
diaPage: {
pageSize: 10,
currentPage: 1,
total: 10,
},
};
},
computed: {
...mapGetters(["userInfo", "permission"]),
permissionList() {
return {
addBtn: false,
viewBtn: false,
delBtn: true,
editBtn: false
};
},
},
methods: {
//
handleSelectionChange(val) {
this.multipleSelection = val;
},
//
rowView(row) {
this.addForm = row;
this.title = '围栏详情';
this.type = 'view';
this.dialogVisible = true;
// this.$refs.addForm.resetFields();
this.diaPage.currentPage = 1;
this.$nextTick(() => {
this.queryRailsList(this.diaPage);
})
},
//
rowAdd(row) {
this.addForm = {
buildingId: this.buildingId,
railIds: [],
remark: ''
};
this.title = '围栏新增';
this.type = 'add';
this.multipleSelection = [];
this.diaPage.currentPage = 1;
this.dialogVisible = true;
// this.$refs.addForm.resetFields();
this.$nextTick(() => {
this.queryRailsList(this.diaPage);
})
},
//
rowEdit(row) {
this.addForm = row;
this.addForm.railIds = row.rails;
this.title = '围栏编辑';
this.type = 'edit';
this.dialogVisible = true;
// this.$refs.addForm.resetFields();
},
//
submitForm() {
this.$refs['addForm'].validate((valid) => {
if (valid) {
let token = window.sessionStorage.getItem('bizToken');
if (token == 'undefined' || !token) {
return;
}
if (this.multipleSelection.length < 1) {
this.$message({
type: "error",
message: "请选择电子围栏!"
});
return;
}
this.submitLoading = true;
console.log(this.addForm.id)
this.addForm.railIds = this.multipleSelection.map(item => {return item._id});
console.log(this.addForm);
if (this.addForm.id != undefined) {
regionUpdate(token, this.addForm).then(res => {
this.submitLoading = false;
if (res.data.code == 401) {
window.sessionStorage.removeItem('bizToken');
bizLogin({ appKey: 'Arf7bd4f26', appSecret: 'kb207044c8' }).then(res2 => {
window.sessionStorage.setItem('bizToken', res2.data.data.token);
this.submitForm();
})
}
else if (res.data.code == 0) {
this.dialogVisible = false;
this.onLoad(this.page);
this.$message({
type: "success",
message: "操作成功!"
});
}
}, err => {
this.submitLoading = false;
})
} else {
regionAdd(token, this.addForm).then(res => {
this.submitLoading = false;
if (res.data.code == 401) {
window.sessionStorage.removeItem('bizToken');
bizLogin({ appKey: 'Arf7bd4f26', appSecret: 'kb207044c8' }).then(res2 => {
window.sessionStorage.setItem('bizToken', res2.data.data.token);
this.submitForm();
})
}
else if (res.data.code == 0) {
this.dialogVisible = false;
this.onLoad(this.page);
this.$message({
type: "success",
message: "操作成功!"
});
}
}, err => {
this.submitLoading = false;
})
}
}
})
},
//
addPoint() {
this.addForm.coordinates.push({ "x": 0, "y": 0 });
},
//
deletePoint(index) {
this.addForm.coordinates.splice(index, 1);
},
rowDel(row) {
this.$confirm("确定将选择数据删除?", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
})
.then(() => {
let token = window.sessionStorage.getItem('bizToken');
if (token == 'undefined' || !token) {
return;
}
regionDelete(token, { "buildingId": row.buildingId, "ids": [row.id] }).then(res => {
if (res.data.code == 401) {
window.sessionStorage.removeItem('bizToken');
bizLogin({ appKey: 'Arf7bd4f26', appSecret: 'kb207044c8' }).then(res2 => {
window.sessionStorage.setItem('bizToken', res2.data.data.token);
this.rowDel(row);
})
}
});
})
.then(() => {
this.onLoad(this.page);
this.$message({
type: "success",
message: "操作成功!"
});
});
},
searchReset() {
this.query = {};
this.onLoad(this.page);
},
searchChange(params, done) {
this.query = params;
this.page.current = 1;
this.onLoad(this.page, params);
done();
},
currentChange(current) {
this.page.current = current;
},
sizeChange(size) {
this.page.size = size;
},
refreshChange() {
this.onLoad(this.page, this.query);
},
onLoad(page, params = {}) {
let token = window.sessionStorage.getItem('bizToken');
if (token == 'undefined' || !token) {
bizLogin({ appKey: 'Arf7bd4f26', appSecret: 'kb207044c8' }).then(res => {
window.sessionStorage.setItem('bizToken', res.data.data.token);
this.loading = true;
getRegionRailsList(res.data.data.token, Object.assign(params, this.query, { page: page.currentPage, size: page.pageSize, buildingId: this.buildingId })).then(res2 => {
this.loading = false;
if (res2.data.code == 401) {
window.sessionStorage.removeItem('bizToken');
this.onLoad(this.page);
}
else {
const data = res2.data.data;
this.page.total = data.totalElements;
this.data = data.content;
}
}, err => {
this.loading = false;
});
})
}
else {
this.loading = true;
getRegionRailsList(token, Object.assign(params, this.query, { page: page.currentPage, size: page.pageSize, buildingId: this.buildingId })).then(res2 => {
this.loading = false;
if (res2.data.code == 401) {
window.sessionStorage.removeItem('bizToken');
this.onLoad(this.page);
}
else {
const data = res2.data.data;
this.page.total = data.totalElements;
this.data = data.content;
}
}, err => {
this.loading = false;
});
}
},
//
queryRailsList(page, params = {}) {
let values = {
...params
};
let token = window.sessionStorage.getItem('bizToken');
if (token == 'undefined' || !token) {
bizLogin({ appKey: 'Arf7bd4f26', appSecret: 'kb207044c8' }).then(res => {
window.sessionStorage.setItem('bizToken', res.data.data.token);
getRailsList(res.data.data.token, { ...values, size: page.pageSize, page: page.currentPage, buildingId: this.buildingId }).then(res2 => {
const data = res2.data.data;
this.diaPage.total = data.totalElements;
this.tableData = data.content;
this.$refs.multipleTable.clearSelection();
let multipleSelection = this.addForm.railIds ? this.addForm.railIds.split(",") : [];
if (multipleSelection.length > 0) { //
this.$nextTick(() => {
this.tableData.forEach(row => { //
multipleSelection.forEach(item => { //
if (row._id === parseInt(item)) {
this.$refs.multipleTable.toggleRowSelection(row, true); //
}
});
})
})
}
});
})
} else {
getRailsList(token, { ...values, size: page.pageSize, page: page.currentPage, buildingId: this.buildingId }).then(res2 => {
if (res2.data.code == 401) {
window.sessionStorage.removeItem('bizToken');
this.queryRailsList();
}
else if (res2.data.code == 0) {
const data = res2.data.data;
this.diaPage.total = data.totalElements;
this.tableData = data.content;
this.$refs.multipleTable.clearSelection();
let multipleSelection = this.addForm.railIds ? this.addForm.railIds.split(",") : [];
if (multipleSelection.length > 0) { //
this.$nextTick(() => {
this.tableData.forEach(row => { //
multipleSelection.forEach(item => { //
if (row._id === parseInt(item)) {
this.$refs.multipleTable.toggleRowSelection(row, true); //
}
});
})
})
}
}
}, err => {
});
}
},
//
handleCurrentRailsChange(current) {
this.diaPage.currentPage = current;
this.queryRailsList(this.diaPage);
},
}
};
</script>
<style lang="scss" scoped>
.el-table {
width: 100% !important;
border: 1px solid #D6D8DF;
}
.el-table th.el-table__cell {
background: #F7F8FA;
}
</style>

@ -22,48 +22,41 @@
<el-form ref="addForm" :model="addForm" :rules="rules" label-width="80px">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="建筑ID" prop="buildId">
<el-input v-model="addForm.buildId" placeholder="请输入建筑ID" :disabled="type == 'view'" maxlength="10" />
<el-form-item label="建筑ID" prop="buildingId">
<el-input v-model="addForm.buildingId" placeholder="请输入建筑ID" disabled maxlength="10" />
</el-form-item>
<el-form-item label="围栏名称" prop="name">
<el-input v-model="addForm.name" placeholder="请输入围栏名称" :disabled="type == 'view'" maxlength="30" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="楼层" prop="floorNo">
<el-form-item label="围栏类型" prop="type">
<el-select v-model="addForm.type" placeholder="请选择" :disabled="type == 'view'">
<el-option value="0" label="跨楼层"></el-option>
<el-option value="1" label="当前楼层"></el-option>
</el-select>
</el-form-item>
<el-form-item label="楼层" prop="floorNo" :rules="addForm.type == 1 ? rules.floorNo : [{ required: false }]">
<el-input v-model="addForm.floorNo" placeholder="请输入楼层" :disabled="type == 'view'" maxlength="10" />
</el-form-item>
</el-col>
</el-row>
<el-form-item label="围栏点位">
<div style="">
<el-button @click="addPoint" type="text" icon="el-icon-plus" size="small" style="float:right;" v-if="type != 'view'">新增</el-button>
<el-button @click="addPoint" type="text" icon="el-icon-plus" size="small" style="float:right;"
v-if="type != 'view'">新增</el-button>
</div>
<el-table class="table_box" :data="addForm.points" tooltip-effect="dark" border style="width: 100%">
<!-- <el-table-column label="id">
<template slot-scope="{row,$index}">
<el-form-item :prop="`points.${$index}.id`" label-width="0" :rules="rules.id">
<el-input v-model="row.id" placeholder="请输入id" :disabled="type == 'view'" maxlength="10" />
</el-form-item>
</template>
</el-table-column>
<el-table-column label="围栏id">
<template slot-scope="{row,$index}">
<el-form-item :prop="`points.${$index}.railId`" label-width="0" :rules="rules.railId">
<el-input v-model="row.railId" placeholder="请输入围栏id" :disabled="type == 'view'" maxlength="10" />
</el-form-item>
</template>
</el-table-column> -->
<el-table class="table_box" :data="addForm.coordinates" tooltip-effect="dark" border style="width: 100%">
<el-table-column label="坐标x">
<template slot-scope="{row,$index}">
<el-form-item :prop="`points.${$index}.x`" label-width="0" :rules="rules.x">
<el-form-item :prop="`coordinates.${$index}.x`" label-width="0" :rules="rules.x">
<el-input v-model="row.x" placeholder="请输入坐标x" :disabled="type == 'view'" maxlength="10" />
</el-form-item>
</template>
</el-table-column>
<el-table-column label="坐标y">
<template slot-scope="{row,$index}">
<el-form-item :prop="`points.${$index}.y`" label-width="0" :rules="rules.x">
<el-form-item :prop="`coordinates.${$index}.y`" label-width="0" :rules="rules.x">
<el-input v-model="row.y" placeholder="请输入坐标y" :disabled="type == 'view'" maxlength="10" />
</el-form-item>
</template>
@ -75,6 +68,14 @@
</el-table-column>
</el-table>
</el-form-item>
<el-row :gutter="20">
<el-col :span="24">
<el-form-item label="备注" prop="remark">
<el-input v-model="addForm.remark" placeholder="请输入备注" :disabled="type == 'view'" maxlength="200"
show-word-limit />
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="dialogVisible = false"> </el-button>
@ -97,21 +98,12 @@ export default {
points: []
},
rules: {
buildId: [
{ required: true, message: '请输入建筑id', trigger: 'blur' },
],
floorNo: [
{ required: true, message: '请输入楼层', trigger: 'blur' },
],
name: [
{ required: true, message: '请输入围栏名称', trigger: 'blur' },
],
// id: [
// { required: true, message: 'id', trigger: 'blur' },
// ],
// railId: [
// { required: true, message: 'id', trigger: 'blur' },
// ],
x: [
{ required: true, message: '请输入坐标x', trigger: 'blur' },
],
@ -145,39 +137,33 @@ export default {
{
label: "围栏名称",
prop: "name",
search: true,
slot: true,
},
{
label: "围栏类型",
type: "select",
dicData: [
{ value: '0', label: '跨楼层' }, { value: '1', label: '当前楼层' }
],
prop: "type",
},
{
label: "建筑 id",
prop: "buildId",
prop: "buildingId",
},
{
label: "楼层",
prop: "floorNo",
},
{
label: "中心点",
prop: "centerPoint",
},
{
label: "创建时间",
prop: "createTime",
formatter: (data, value) => {
return dateFormat(new Date(data.createTime))
}
label: "备注",
prop: "remark",
overHide: true
},
{
label: "更新时间",
prop: "updateTime",
formatter: (data, value) => {
return dateFormat(new Date(data.updateTime))
}
}
]
},
data: [],
submitLoading: false,
buildingId: 202861,//id
};
},
computed: {
@ -203,7 +189,8 @@ export default {
//
rowAdd(row) {
this.addForm = {
points: [{ "x": 0, "y": 0 }]
coordinates: [{ "x": 0, "y": 0 }],
buildingId: this.buildingId
};
this.title = '围栏新增';
this.type = 'add';
@ -226,10 +213,17 @@ export default {
if (token == 'undefined' || !token) {
return;
}
if (this.addForm.coordinates.length < 3) {
this.$message({
type: "error",
message: "点位集合至少是三个!"
});
return;
}
this.submitLoading = true;
console.log(this.addForm.id)
if (this.addForm.id != undefined) {
railsUpdate(token, this.addForm ).then(res => {
console.log(this.addForm._id)
if (this.addForm._id != undefined) {
railsUpdate(token, { ...this.addForm, id: this.addForm._id}).then(res => {
this.submitLoading = false;
if (res.data.code == 401) {
window.sessionStorage.removeItem('bizToken');
@ -238,7 +232,7 @@ export default {
this.submitForm();
})
}
else if (res.data.status == 200) {
else if (res.data.code == 0) {
this.dialogVisible = false;
this.onLoad(this.page);
this.$message({
@ -250,7 +244,7 @@ export default {
this.submitLoading = false;
})
} else {
railsAdd(token, this.addForm ).then(res => {
railsAdd(token, this.addForm).then(res => {
this.submitLoading = false;
if (res.data.code == 401) {
window.sessionStorage.removeItem('bizToken');
@ -259,7 +253,7 @@ export default {
this.submitForm();
})
}
else if (res.data.status == 200) {
else if (res.data.code == 0) {
this.dialogVisible = false;
this.onLoad(this.page);
this.$message({
@ -276,11 +270,11 @@ export default {
},
//
addPoint() {
this.addForm.points.push({ "x": 0, "y": 0 });
this.addForm.coordinates.push({ "x": 0, "y": 0 });
},
//
deletePoint(index) {
this.addForm.points.splice(index, 1);
this.addForm.coordinates.splice(index, 1);
},
rowDel(row) {
this.$confirm("确定将选择数据删除?", {
@ -293,7 +287,7 @@ export default {
if (token == 'undefined' || !token) {
return;
}
railsDelete(token, { "buildId": row.buildId, "railIds": [row.id] }).then(res => {
railsDelete(token, { "buildingId": row.buildingId, "ids": [row._id] }).then(res => {
if (res.data.code == 401) {
window.sessionStorage.removeItem('bizToken');
bizLogin({ appKey: 'Arf7bd4f26', appSecret: 'kb207044c8' }).then(res2 => {
@ -331,22 +325,21 @@ export default {
this.onLoad(this.page, this.query);
},
onLoad(page, params = {}) {
console.log(page)
let token = window.sessionStorage.getItem('bizToken');
if (token == 'undefined' || !token) {
bizLogin({ appKey: 'Arf7bd4f26', appSecret: 'kb207044c8' }).then(res => {
window.sessionStorage.setItem('bizToken', res.data.data.token);
this.loading = true;
getRailsList(res.data.data.token, Object.assign(params, this.query, { current: page.currentPage, size: page.pageSize })).then(res2 => {
getRailsList(res.data.data.token, Object.assign(params, this.query, { page: page.currentPage, size: page.pageSize, buildingId: this.buildingId })).then(res2 => {
this.loading = false;
if (res2.data.code == 401) {
window.sessionStorage.removeItem('bizToken');
this.onLoad(this.page);
}
else {
const data = res2.data;
this.page.total = data.total;
this.data = data.records;
const data = res2.data.data;
this.page.total = data.totalElements;
this.data = data.content;
}
}, err => {
this.loading = false;
@ -355,16 +348,16 @@ export default {
}
else {
this.loading = true;
getRailsList(token, Object.assign(params, this.query, { current: page.currentPage, size: page.pageSize })).then(res2 => {
getRailsList(token, Object.assign(params, this.query, { page: page.currentPage, size: page.pageSize, buildingId: this.buildingId })).then(res2 => {
this.loading = false;
if (res2.data.code == 401) {
window.sessionStorage.removeItem('bizToken');
this.onLoad(this.page);
}
else {
const data = res2.data;
this.page.total = data.total;
this.data = data.records;
const data = res2.data.data;
this.page.total = data.totalElements;
this.data = data.content;
}
}, err => {
this.loading = false;

@ -56,7 +56,17 @@ export default {
prop: "name1",
span: 12,
formatter: (val, value, label) => {
return val.name + '/' + val.remark
return val.name
},
labelWidth: 120,
viewDisplay: false,
},
{
label: "备注",
prop: "remark1",
span: 12,
formatter: (val, value, label) => {
return val.remark
},
labelWidth: 120,
viewDisplay: false,
@ -73,7 +83,8 @@ export default {
prop: "remark",
span: 12,
hide: true,
labelWidth: 120
labelWidth: 120,
overHidde: true
},
{
label: "设备所属产品",
@ -99,6 +110,7 @@ export default {
prop: "position",
span: 12,
labelWidth: 120,
minWidth: 200
},
{
label: "经纬度",

@ -360,7 +360,7 @@ export default {
//
handleExport() {
let values = {
deviceType: func.toStr(this.query.deviceType)
deviceType: func.toStr(this.query.type)
};
if (this.query.releaseTimeRange) {
values = {

Loading…
Cancel
Save