蓝牙上报功能页面

This commit is contained in:
熊丽君
2021-06-02 14:18:29 +08:00
parent d034b94553
commit f7f48330be
5 changed files with 695 additions and 10 deletions

View File

@ -0,0 +1,23 @@
import request from '@/utils/request';
// 蓝牙上报
export function bluetoothList(data) {
return request({
url:
'/bluetooth/list?pageNum=' + data.pageNum + '&pageSize=' + data.pageSize,
method: 'post',
data
});
}
export function bluetoothInfo(params) {
return request({
url: '/bluetooth/info',
params
});
}
export function bluetoothExport(params) {
return request({
url: '/bluetooth/export',
params
});
}

View File

@ -0,0 +1,384 @@
<template>
<section class="app-container">
<el-form
:size="size"
:model="queryParams"
:inline="true"
ref="queryForm"
v-show="showSearch"
label-width="68px"
>
<el-form-item label="是否返厂">
<el-select
v-model="queryParams.isFactory"
clearable
placeholder="请选择"
>
<el-option
v-for="item in handleStatusList"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-button
type="cyan"
icon="el-icon-search"
size="mini"
@click="getReportDetail"
>
查询
</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery"
>重置</el-button
>
</el-form-item>
</el-form>
<el-row style="margin-bottom:20px;text-align: right;">
<el-button type="primary" @click="exportExcel" style="margin-right:20px"
>报表导出</el-button
>
<right-toolbar
class="mb8"
:showSearch.sync="showSearch"
@queryTable="getReportDetail"
></right-toolbar>
</el-row>
<!-- v-loading="loading" -->
<el-table :data="tableHeader" class="table_header" v-loading="loading">
<el-table-column align="center" label="上报信息">
<el-table-column
label="上报列表"
:render-header="renderHeaderDate"
v-if="tableData.length"
></el-table-column>
</el-table-column>
</el-table>
<el-table :data="tableData" default-expand-all>
<el-table-column type="expand" fixed>
<template slot-scope="props">
<span
style="margin-right:10px"
v-for="(key, value, index) in props.row.historicalFault.faults"
:key="value + index"
>
{{ value }}:{{ key }}
</span>
<span
style="margin-right:10px"
v-for="(key, value, index) in props.row.historicalFault.balanceMap"
:key="value + index"
>
{{ value }}:{{ key }}
</span>
<span style="margin-right:10px">
{{ props.row.bleBatteryFaultInfo }}
</span>
</template>
</el-table-column>
<el-table-column
align="center"
label="序号"
type="index"
width="55"
></el-table-column>
<el-table-column
align="center"
label="城市"
prop="cityVal"
></el-table-column>
<el-table-column
align="center"
label="设备SN"
prop="devicesSN"
></el-table-column>
<el-table-column
align="center"
label="硬件版本"
prop="versionNum"
></el-table-column>
<el-table-column
align="center"
label="版本信息"
prop="versionInfo"
></el-table-column>
<el-table-column align="center" label="是否返厂" prop="devicesSN">
<template slot-scope="scope">
{{ scope.row.isFactory == 0 ? '否' : '是' }}
</template>
</el-table-column>
<el-table-column
align="center"
label="获取数据时间"
prop="timeNow"
></el-table-column>
<el-table-column align="center" label="电池基本信息">
<el-table-column
align="center"
label="电池状态"
prop="bleBatteryBasicInfo.batteryStatus"
></el-table-column>
<el-table-column
align="center"
label="总电压"
prop="bleBatteryBasicInfo.totalVoltage"
></el-table-column>
<el-table-column
align="center"
label="总电流"
prop="bleBatteryBasicInfo.totalCurrent"
></el-table-column>
<el-table-column
align="center"
label="电池控制"
prop="bleBatteryBasicInfo.batteryControl"
></el-table-column>
<el-table-column
align="center"
label="SOC"
prop="bleBatteryBasicInfo.SOC"
></el-table-column>
<el-table-column
align="center"
label="SOH"
prop="bleBatteryBasicInfo.SOH"
></el-table-column>
<el-table-column
align="center"
label="速度"
prop="bleBatteryBasicInfo.speed"
></el-table-column>
<el-table-column
align="center"
label="MOS温度"
prop="bleBatteryBasicInfo.MOStemp"
></el-table-column>
<el-table-column
align="center"
label="电芯串数"
prop="bleBatteryBasicInfo.batteryCellNumber"
></el-table-column>
<el-table-column
align="center"
label="最低温度"
prop="bleBatteryBasicInfo.lowestCellTemp"
></el-table-column>
<el-table-column
align="center"
label="最高温度"
prop="bleBatteryBasicInfo.highestCellTemp"
></el-table-column>
<el-table-column
align="center"
label="环境温度"
prop="bleBatteryBasicInfo.ambientTemp"
></el-table-column>
<el-table-column
align="center"
label="BMS状态"
prop="bleBatteryBasicInfo.BMSstatus"
></el-table-column>
<el-table-column
align="center"
label="故障标记"
prop="bleBatteryBasicInfo.faultMark"
></el-table-column>
<el-table-column
align="center"
label="模组总压"
prop="bleBatteryBasicInfo.modTotalCurrent"
></el-table-column>
<el-table-column
align="center"
label="DET"
prop="bleBatteryBasicInfo.DET"
></el-table-column>
</el-table-column>
<el-table-column align="center" label="电芯电压模拟量">
<el-table-column
align="center"
:label="index < 19 ? 'C' + (index + 1) : '蓝牙电量'"
prop="cellAnalog"
v-for="(item, index) in 20"
:key="index"
>
<template slot-scope="scope">
{{ scope.row.cellAnalog[index] }}
</template>
</el-table-column>
<el-table-column
align="center"
label="压差"
prop="pressure"
></el-table-column>
</el-table-column>
<el-table-column align="center" label="历史故障">
<el-table-column
align="center"
label="时间"
prop="historicalFault.date"
></el-table-column>
<el-table-column
align="center"
label="总电压"
prop="historicalFault.totalVoltage"
></el-table-column>
<el-table-column
align="center"
label="总电流"
prop="historicalFault.totalCurrent"
></el-table-column>
<el-table-column
align="center"
label="温度"
prop="historicalFault.humidity"
></el-table-column>
<el-table-column
align="center"
label="SOC"
prop="historicalFault.SOC"
></el-table-column>
<el-table-column
align="center"
:label="item + '路温度'"
prop="historicalFault.tempList"
v-for="(item, index) in 5"
:key="index"
>
<template slot-scope="scope">
{{ (scope.row.historicalFault.tempList[index] - 2731) / 10 }}°C
</template>
</el-table-column>
<el-table-column
align="center"
:label="'电压' + item"
prop="historicalFault.cellVoltageList"
v-for="(item, index) in 16"
:key="index + 'x'"
>
<template slot-scope="scope">
{{ scope.row.historicalFault.cellVoltageList[index] }}mV
</template>
</el-table-column>
</el-table-column>
</el-table>
</section>
</template>
<script>
import {
bluetoothInfo,
bluetoothExport
} from '@/api/dataReport/bluetoothReport';
export default {
name: 'ReportDetail',
data() {
return {
// 显示搜索条件
showSearch: true,
// 遮罩层
loading: true,
tableHeader: [],
tableData: [],
queryParams: {
reportedId: this.$route.query.id
},
total: 0,
handleStatusList: [
{ label: '否', value: '0' },
{ label: '是', value: '1' }
]
};
},
methods: {
renderHeaderDate() {
return (
<section>
<div class="table_content">
<span>上报号{this.tableData[0].reportedId}</span>
<span>上传时间{this.tableData[0].reportedTime}</span>
<span>仓库{this.tableData[0].warehouseVal}</span>
<span>上报人{this.tableData[0].username}</span>
<span>总设备数{this.tableData[0].deviceNum}</span>
<span>返厂数{this.tableData[0].factoryNum}</span>
</div>
</section>
);
},
getReportDetail() {
this.loading = true;
bluetoothInfo(this.queryParams).then(({ code, data, message }) => {
if (code !== 200) return this.$message.error(message);
// this.tableHeader = data.find((item, index) => {
// return index == 0;
// });
// this.tableData = data.filter((item, index) => {
// return index != 0;
// });
this.tableData = data;
this.loading = false;
});
},
resetQuery() {
this.queryParams = { reportedId: this.$route.query.id };
},
/** 导出按钮操作 */
exportExcel() {
const queryParams = this.queryParams;
this.$confirm('是否确认导出所有用户数据项?', '警告', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
})
.then(function() {
return bluetoothExport(queryParams);
})
.then(response => {
this.download(response.msg);
});
}
},
created() {
let { id } = this.$route.query;
if (!id) {
this.msgError('无ID');
this.$router.go(-1);
return;
}
this.queryParams.reportedId = id;
this.getReportDetail();
}
};
</script>
<style lang="scss" scoped>
.demo-table-expand {
font-size: 0;
}
.demo-table-expand label {
width: 90px;
color: #99a9bf;
}
.demo-table-expand .el-form-item {
margin-right: 0;
margin-bottom: 0;
width: 100%;
}
.table_content {
display: flex;
justify-content: space-around;
span {
flex: 1;
}
}
.table_header {
width: 100%;
/deep/.el-table__body-wrapper {
display: none;
}
}
</style>

View File

@ -0,0 +1,167 @@
<template>
<section class="app-container">
<el-form
:size="size"
:model="queryParams"
:inline="true"
ref="queryForm"
v-show="showSearch"
label-width="68px"
>
<el-form-item label="上报号">
<el-input
v-model="queryParams.reportedId"
placeholder="请输入上报号"
clearable
style="width: 240px"
@keyup.enter.native="getBleReportList"
/>
</el-form-item>
<el-form-item label="处理人">
<el-input
v-model="queryParams.username"
placeholder="请输入处理人"
clearable
style="width: 240px"
@keyup.enter.native="getBleReportList"
/>
</el-form-item>
<el-form-item>
<el-button
type="cyan"
icon="el-icon-search"
size="mini"
@click="getBleReportList"
>
查询
</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery"
>重置</el-button
>
</el-form-item>
</el-form>
<right-toolbar
class="mb8"
:showSearch.sync="showSearch"
@queryTable="getBleReportList"
></right-toolbar>
<el-table v-loading="loading" :data="bleReportList" style="width: 100%">
<el-table-column
prop="reportedId"
align="center"
label="上报号"
min-width="180"
>
</el-table-column>
<el-table-column
prop="reportedTime"
align="center"
label="上传时间"
min-width="180"
></el-table-column>
<el-table-column
prop="cityVal"
align="center"
label="城市"
min-width="180"
>
</el-table-column>
<el-table-column
prop="warehouseVal"
align="center"
label="仓库"
min-width="180"
>
</el-table-column>
<el-table-column
prop="username"
align="center"
label="上报人"
min-width="180"
>
</el-table-column>
<el-table-column
prop="deviceNum"
align="center"
label="总设备数"
min-width="180"
>
</el-table-column>
<el-table-column
prop="factoryNum"
align="center"
label="返厂数"
min-width="180"
>
</el-table-column>
<el-table-column align="center" label="操作" min-width="180">
<template slot-scope="scope">
<el-button
type="text"
size="mini"
@click="handleDetail(scope.row.reportedId)"
>
设备数据
</el-button>
</template>
</el-table-column>
</el-table>
<!-- 分页 -->
<pagination
v-show="total > 0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getBleReportList"
/>
</section>
</template>
<script>
import { bluetoothList } from '@/api/dataReport/bluetoothReport';
export default {
name: 'bluetoothReport',
data() {
return {
bleReportList: [],
// 显示搜索条件
showSearch: true,
// 查询参数
queryParams: {
pageNum: 1,
pageSize: 10
},
total: 0,
// 遮罩层
loading: true
};
},
created() {
this.getBleReportList();
},
methods: {
getBleReportList() {
this.loading = true;
bluetoothList(this.queryParams).then(({ code, total, rows, message }) => {
if (code !== 200) return this.$message.error(message);
this.bleReportList = rows;
this.total = total;
this.loading = false;
});
},
/** 重置按钮操作 */
resetQuery() {
this.queryParams = { pageNum: 1, pageSize: 10 };
},
handleDetail(id) {
console.log(id);
this.$router.push({
path: '/dataReport/bluetoothReport/detail',
query: { id }
});
}
}
};
</script>
<style lang="scss" scoped></style>

View File

@ -0,0 +1,102 @@
<template>
<section class="app-container">
<el-row style="margin-bottom:20px;text-align: right;">
<el-button type="primary" @click="handleExport">报表导出</el-button>
</el-row>
<el-table v-loading="loading" :data="tableData" style="width: 100%">
<el-table-column prop="deviceId" align="center" label="设备SN">
</el-table-column>
<el-table-column prop="deviceName" align="center" label="设备名称">
</el-table-column>
<el-table-column prop="projectName" align="center" label="项目名称">
</el-table-column>
<el-table-column prop="deviceType" align="center" label="类型">
<template slot-scope="scope">{{
getDeviceTypeLabel(scope.row.deviceType)
}}</template>
</el-table-column>
<el-table-column prop="productName" align="center" label="产品SN">
</el-table-column>
<el-table-column prop="proName" align="center" label="省份">
</el-table-column>
<el-table-column prop="cityName" align="center" label="市">
</el-table-column>
<el-table-column prop="disName" align="center" label="区">
</el-table-column>
</el-table>
<pagination
v-show="total > 0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getDeviceList"
/>
</section>
</template>
<script>
import { list } from '@/api/hardware/device';
import { exportEquipment } from '@/api/hardware/device';
// import { exportExcelTxt } from '@/api/work/orderHistory';
export default {
name: 'DeviceData',
data() {
return {
queryParams: {
pageNum: 1,
pageSize: 10
},
// 遮罩层
loading: true,
// 总条数
total: 0,
tableData: [],
dialogVisible: false,
deviceTypeList: [
{ label: '锐能设备', value: 'rn' },
{ label: '铁塔设备', value: 'tt' }
]
};
},
methods: {
getDeviceList() {
this.loading = true;
list(this.queryParams).then(({ code, rows, total, message }) => {
if (code !== 200) return this.$message.error(message);
this.tableData = rows;
this.total = total;
this.loading = false;
});
},
getDeviceTypeLabel(deviceType) {
let snap = '';
this.deviceTypeList.map(v => {
if (v.value == deviceType) {
snap = v.label;
}
});
return snap;
},
/** 导出按钮操作 */
handleExport() {
const queryParams = this.queryParams;
this.$confirm('是否确认导出所有用户数据项?', '警告', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
})
.then(function() {
return exportEquipment(queryParams);
})
.then(response => {
this.download(response.msg);
});
}
},
created() {
this.getDeviceList();
}
};
</script>
<style lang="scss" scoped></style>

View File

@ -71,7 +71,11 @@
></el-table-column>
<el-table-column align="center" label="地区" min-width="150">
<template slot-scope="scope">
{{ scope.row.workInfo.proName + scope.row.workInfo.cityName + scope.row.workInfo.disName }}
{{
scope.row.workInfo.proName +
scope.row.workInfo.cityName +
scope.row.workInfo.disName
}}
</template>
</el-table-column>
<el-table-column
@ -81,11 +85,7 @@
min-width="180"
>
</el-table-column>
<el-table-column
align="center"
label="告警等级"
min-width="100"
>
<el-table-column align="center" label="告警等级" min-width="100">
<template slot-scope="scope">
{{ scope.row.workInfo.warningLevel | toChinaNum }}
</template>
@ -173,11 +173,20 @@ export default {
this.loading = false;
});
},
/** 导出按钮操作 */
exportExcel() {
exportExcelTxt({ id: this.id }).then(({ code, msg }) => {
if (code !== 200) return this.$message.error(msg);
this.download(msg);
});
const id = this.id;
this.$confirm('是否确认导出所有用户数据项?', '警告', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
})
.then(function() {
return exportExcelTxt({ id });
})
.then(response => {
this.download(response.msg);
});
}
},
created() {