齐鲁医院物联网系统
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

409 lines
14 KiB

<template>
<basic-container>
<avue-crud :option="option" :table-loading="loading" :data="data" :page.sync="page" ref="crud"
: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" icon="el-icon-plus" size="small" @click="handleAdd">新增</el-button>
</template>
<template #menu="{ row, index, size }">
<el-button type="text" :size="size" icon="el-icon-view" @click="$refs.crud.rowEdit(row, index)">详情</el-button>
<el-button type="text" :size="size" icon="el-icon-edit" @click="$refs.crud.rowEdit(row, index)">编辑</el-button>
<el-button type="text" :size="size" icon="el-icon-delete" @click="$refs.crud.rowDel(row, index)">删除</el-button>
</template>
</avue-crud>
<!-- 关联摄像头/手持终端 -->
<el-dialog title="报警点设置" :visible.sync="dialogVisible" :append-to-body="true" :close-on-click-modal="false"
:close-on-press-escape="false" custom-class="dia_box">
<el-form ref="form" v-model="addForm" label-width="100px" :rules="rules">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="报警点:" prop="warnName">
<el-input v-model="addForm.warnName" placeholder="请输入" :readonly="isDetail ? true : false" maxlength="30">
</el-input>
</el-form-item>
<el-form-item label="经度:" prop="longitude">
<el-input v-model="addForm.longitude" placeholder="请输入" :readonly="isDetail ? true : false" maxlength="30">
</el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="所在区域:" prop="warnAddress">
<el-input v-model="addForm.warnAddress" placeholder="请输入" :readonly="isDetail ? true : false" maxlength="30">
</el-input>
</el-form-item>
<el-form-item label="纬度:" prop="latitude">
<el-input v-model="addForm.latitude" placeholder="请输入" :readonly="isDetail ? true : false" maxlength="30">
</el-input>
</el-form-item>
</el-col>
</el-row>
<el-tabs v-model="deviceType" type="card" @tab-click="handleClick">
<el-tab-pane label="摄像头" name="1">
<el-table class="table_box" ref="multipleTable" :data="tableData" tooltip-effect="dark" style="width: 100%" height="250px"
@selection-change="(data) => selectionChange(data, '1')" row-key="id" :size="small">
<el-table-column type="selection" width="55" align="center" :reserve-selection="true">
</el-table-column>
<el-table-column prop="name" label="设备名称">
</el-table-column>
<el-table-column prop="imei" label="设备编号">
</el-table-column>
<el-table-column prop="deviceType" label="设备大类">
</el-table-column>
<el-table-column prop="deviceArea" label="所在区域">
</el-table-column>
<el-table-column prop="position" label="安装位置">
</el-table-column>
</el-table>
<div class="page_box">
<el-pagination @size-change="handleSizeChange1" @current-change="handleCurrentChange1"
:current-page="page1.currentPage" :page-sizes="[10, 20, 30, 40]" :page-size="page1.pageSize" background
layout="total, sizes, prev, pager, next, jumper" :total="page1.total">
</el-pagination>
</div>
</el-tab-pane>
<el-tab-pane label="手持终端" name="2">
<el-table class="table_box" ref="multipleTable2" :data="tableData2" tooltip-effect="dark" style="width: 100%;" height="250px"
@selection-change="(data) => selectionChange(data, '2')" row-key="id" :size="small">
<el-table-column type="selection" width="55" align="center" :reserve-selection="true">
</el-table-column>
<el-table-column prop="name" label="设备名称">
</el-table-column>
<el-table-column prop="imei" label="设备编号">
</el-table-column>
<el-table-column prop="deviceType" label="设备大类">
</el-table-column>
<el-table-column prop="deviceArea" label="所在区域">
</el-table-column>
<el-table-column prop="position" label="安装位置">
</el-table-column>
</el-table>
<div class="page_box">
<el-pagination @size-change="handleSizeChange2" @current-change="handleCurrentChange2"
:current-page="page2.currentPage2" :page-sizes="[10, 20, 30, 40]" :page-size="page2.pageSize" background
layout="total, sizes, prev, pager, next, jumper" :total="page2.total">
</el-pagination>
</div>
</el-tab-pane>
</el-tabs>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="dialogVisible = false"> </el-button>
<el-button type="primary" @click="submitForm"> </el-button>
</div>
</el-dialog>
</basic-container>
</template>
<script>
import { bizLogin, bizDeviceList, bizDeviceStatus, bizNodeType } from "@/api/wirelessintrusion/wirelessintrusion";
import { mapGetters } from "vuex";
export default {
data() {
return {
addForm: {},
rules: {
warnName: [
{ required: true, message: '请输入报警点名称', trigger: 'blur' }
],
warnAddress: [
{ required: true, message: '请输入报警位置', trigger: 'blur' }
],
longitude: [
{ required: true, message: '请输入经度', trigger: 'blur' }
],
latitude: [
{ required: true, message: '请输入纬度', trigger: 'blur' }
]
},
query: {},
loading: true,
page: {
pageSize: 10,
currentPage: 1,
total: 0
},
selectionList: [],
selectionList2: [],
option: {
height: 'auto',
calcHeight: 30,
dialogWidth: 950,
tip: false,
searchShow: true,
searchMenuSpan: 6,
border: true,
index: false,
viewBtn: false,
editBtn: false,
delBtn: false,
addBtn: false,
dialogClickModal: false,
column: [
{
label: "报警点",
prop: "name",
search: true,
},
{
label: "所在区域",
prop: "remark",
search: true,
},
{
label: "经纬度",
prop: "name",
},
{
label: "关联摄像头",
prop: "node",
},
{
label: "关联手持终端",
prop: "nodeLabel",
},
{
label: "创建时间",
prop: "createTime",
labelWidth: 120,
}, {
label: "最后更新时间",
prop: "lastOnline",
},
]
},
dialogVisible: false,
deviceType: '1',//关联设备类型
data: [],
//摄像头设备
page1: {
pageSize: 10,
currentPage: 1,
total: 0,
},
tableData: [],
//手持终端设备
page2: {
pageSize: 10,
currentPage: 1,
total: 0,
},
tableData2: [],
nodeType: [],//节点类型
};
},
computed: {
...mapGetters(["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)
};
},
},
mounted() {
},
methods: {
//新增弹框
handleAdd() {
this.addForm = {};
this.deviceType = '1';
this.selectionList = [];
this.selectionList2 = [];
this.dialogVisible = true;
this.queryDeviceList();
},
//切换设备类型
handleClick(item) {
this.queryDeviceList();
},
//设备查询
queryDeviceList() {
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);
if (this.deviceType == '1') {
bizDeviceList(res.data.data.token, { pageSize: this.page1.pageSize, pageNum: this.page1.currentPage }).then(res2 => {
const data = res2.data;
this.page1.total = data.total;
this.tableData = data.rows;
});
} else {
bizDeviceList(res.data.data.token, { pageSize: this.page1.pageSize, pageNum: this.page1.currentPage, pid: 98 }).then(res2 => {
const data = res2.data;
this.page2.total = data.total;
this.tableData2 = data.rows;
});
}
})
} else {
if (this.deviceType == '1') {
bizDeviceList(token, { pageSize: this.page1.pageSize, pageNum: this.page1.currentPage }).then(res2 => {
const data = res2.data;
this.page1.total = data.total;
this.tableData = data.rows;
});
} else {
bizDeviceList(token, { pageSize: this.page1.pageSize, pageNum: this.page1.currentPage, pid: 98 }).then(res2 => {
const data = res2.data;
this.page2.total = data.total;
this.tableData2 = data.rows;
});
}
}
},
//新增、编辑
submitForm() {
this.$refs.form.valid((valid) => {
if(valid) {
}
})
},
rowDel(row) {
this.$confirm("确定将选择数据删除?", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
})
.then(() => {
})
.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.onLoad(this.page, params);
done();
},
selectionChange(list, type) {
if (type == '2') {
this.selectionList2 = list;
}
else {
this.selectionList = list;
}
},
currentChange(currentPage) {
this.page.currentPage = currentPage;
},
sizeChange(pageSize) {
this.page.pageSize = pageSize;
},
refreshChange() {
this.onLoad(this.page, this.query);
},
onLoad(page, params = {}) {
this.loading = false;
// 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;
// this.loading = false;
// });
// })
// } else {
// this.loading = true;
// bizDeviceList(token, { ...values, pageSize: page.pageSize, pageNo: page.currentPage }).then(res2 => {
// this.loading = false;
// this.selectionClear();
// if (res2.data.code == 401) {
// console.log(res2.data.code)
// window.sessionStorage.removeItem('bizToken');
// this.onLoad();
// }
// 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;
// }
// }, err => {
// this.loading = false;
// });
// }
},
//摄像头
handleCurrentChange1(currentPage) {
this.page1.currentPage = currentPage;
this.queryDeviceList();
},
handleSizeChange1(pageSize) {
this.page1.currentPage = 1;
this.page1.pageSize = pageSize;
this.queryDeviceList();
},
//手持终端
handleCurrentChange2(currentPage) {
this.page2.currentPage = currentPage;
this.queryDeviceList();
},
handleSizeChange2(pageSize) {
this.page2.currentPage = 1;
this.page2.pageSize = pageSize;
this.queryDeviceList();
},
}
};
</script>
<style lang="scss" scoped>
.dia_box {
height: 700px;
overflow: auto;
.el-table {
width: 100% !important;
border: 1px solid #D6D8DF;
}
.el-table th.el-table__cell {
background: #F7F8FA;
}
.dialog-footer {
width: 100%;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
}
.page_box {
width: 90%;
margin-left: 9%;
display: flex;
align-items: center;
justify-content: center;
margin-top: 15px;
}
}
</style>