|
@@ -3,79 +3,82 @@
|
|
|
<el-form :inline="true" :model="formInline">
|
|
|
<el-form-item label="选择查询时间">
|
|
|
<el-date-picker
|
|
|
- v-model="formInline.dateRange"
|
|
|
- type="datetimerange"
|
|
|
- align="right"
|
|
|
- unlink-panels
|
|
|
- range-separator="至"
|
|
|
- start-placeholder="开始日期"
|
|
|
- end-placeholder="结束日期"
|
|
|
- popper-class="history-date-picker"
|
|
|
- :append-to-body="false"
|
|
|
- :picker-options="pickerOptions"
|
|
|
- :clearable="false"
|
|
|
+ v-model="formInline.dateRange"
|
|
|
+ type="datetimerange"
|
|
|
+ align="right"
|
|
|
+ unlink-panels
|
|
|
+ range-separator="至"
|
|
|
+ start-placeholder="开始日期"
|
|
|
+ end-placeholder="结束日期"
|
|
|
+ popper-class="history-date-picker"
|
|
|
+ :append-to-body="false"
|
|
|
+ :picker-options="pickerOptions"
|
|
|
+ :clearable="false"
|
|
|
>
|
|
|
</el-date-picker>
|
|
|
</el-form-item>
|
|
|
<el-form-item>
|
|
|
<el-button @click="fetchData">查询</el-button>
|
|
|
</el-form-item>
|
|
|
+ <el-button style="margin-left: 20px" @click="handleDownload">导出Excel表格</el-button>
|
|
|
</el-form>
|
|
|
<el-table
|
|
|
- :data="tableData"
|
|
|
- :header-cell-style="{
|
|
|
+ :data="tableData"
|
|
|
+ :header-cell-style="{
|
|
|
background: '#BFBFBF',
|
|
|
boxShadow: 'inset grey 0px -1px',
|
|
|
color: '#333333',
|
|
|
borderColor: '#eaeaea',
|
|
|
fontSize: '20px',
|
|
|
}"
|
|
|
- :cell-style="{
|
|
|
+ :cell-style="{
|
|
|
borderColor: '#919191',
|
|
|
fontSize: '20px',
|
|
|
backgroundColor: '#ebebeb',
|
|
|
fontWeight: '500',
|
|
|
height: '48px',
|
|
|
}"
|
|
|
- :row-class-name="tableRowClassName"
|
|
|
- row-key="id"
|
|
|
- border
|
|
|
- stripe
|
|
|
- style="width: 100%">
|
|
|
+ :row-class-name="tableRowClassName"
|
|
|
+ row-key="id"
|
|
|
+ border
|
|
|
+ stripe
|
|
|
+ style="width: 100%">
|
|
|
<el-table-column
|
|
|
- v-for="(item, index) in tableColumns"
|
|
|
- :key="index"
|
|
|
- :prop="item.prop"
|
|
|
- :label="item.label"
|
|
|
- :width="item.width"
|
|
|
- :class-name="index === 0 ? 'warn-column' : 'warn-row'"
|
|
|
- align="center"
|
|
|
+ v-for="(item, index) in tableColumns"
|
|
|
+ :key="index"
|
|
|
+ :prop="item.prop"
|
|
|
+ :label="item.label"
|
|
|
+ :width="item.width"
|
|
|
+ :class-name="index === 0 ? 'warn-column' : 'warn-row'"
|
|
|
+ align="center"
|
|
|
/>
|
|
|
</el-table>
|
|
|
<div style="float: right;margin-top: 8px">
|
|
|
<el-pagination
|
|
|
- @size-change="handleSizeChange"
|
|
|
- @current-change="handleCurrentChange"
|
|
|
- :current-page="paginationOption.currentPage"
|
|
|
- :page-sizes="[10, 30, 50, 100]"
|
|
|
- :page-size="paginationOption.pageSize"
|
|
|
- layout="total, sizes, prev, pager, next, jumper"
|
|
|
- :total="paginationOption.total">
|
|
|
+ @size-change="handleSizeChange"
|
|
|
+ @current-change="handleCurrentChange"
|
|
|
+ :current-page="paginationOption.currentPage"
|
|
|
+ :page-sizes="[10, 30, 50, 100]"
|
|
|
+ :page-size="paginationOption.pageSize"
|
|
|
+ layout="total, sizes, prev, pager, next, jumper"
|
|
|
+ :total="paginationOption.total">
|
|
|
</el-pagination>
|
|
|
</div>
|
|
|
</div>
|
|
|
</template>
|
|
|
|
|
|
<script>
|
|
|
-import { findCollectEntityWarnRecord } from '@/api/WarnRecord'
|
|
|
+import {findCollectEntityWarnRecord} from '@/api/WarnRecord'
|
|
|
import moment from 'moment'
|
|
|
+import {saveJsonToExcel} from "@/utils/utilsExcel";
|
|
|
|
|
|
export default {
|
|
|
name: 'ShowWarnModal',
|
|
|
props: {
|
|
|
collectEntity: {
|
|
|
type: Object,
|
|
|
- default: () => {}
|
|
|
+ default: () => {
|
|
|
+ }
|
|
|
},
|
|
|
},
|
|
|
data() {
|
|
@@ -152,6 +155,50 @@ export default {
|
|
|
}
|
|
|
},
|
|
|
methods: {
|
|
|
+ handleDownload() {
|
|
|
+
|
|
|
+ // 要保留的字段
|
|
|
+ const includeFields = ['warnTime', 'desc', 'warnTypeText', 'currentValue', 'limitValue'];
|
|
|
+
|
|
|
+ // 过滤掉不需要的字段,保留需要的字段
|
|
|
+ const filteredData = this.tableData.map(item => {
|
|
|
+ // 只保留includeFields中的字段
|
|
|
+ let filteredItem = {};
|
|
|
+ includeFields.forEach(key => {
|
|
|
+ if (item.hasOwnProperty(key)) {
|
|
|
+ filteredItem[key] = item[key]; // 保留指定字段
|
|
|
+ }
|
|
|
+ });
|
|
|
+ return filteredItem;
|
|
|
+ });
|
|
|
+ // 自定义字段顺序
|
|
|
+ const customOrder = ['warnTime', 'desc', 'warnTypeText', 'currentValue', 'limitValue'];
|
|
|
+
|
|
|
+ // 对filteredData中的字段进行排序
|
|
|
+ const sortedData = filteredData.map(item => {
|
|
|
+ let sortedItem = {};
|
|
|
+ customOrder.forEach(key => {
|
|
|
+ if (item.hasOwnProperty(key)) {
|
|
|
+ sortedItem[key] = item[key]; // 按顺序添加字段
|
|
|
+ }
|
|
|
+ });
|
|
|
+ return sortedItem;
|
|
|
+ });
|
|
|
+
|
|
|
+ const customHeaders = ["时间", "对象名", "报警类型", "当前值", "界限值"];
|
|
|
+
|
|
|
+ // 获取当前时间(UTC时间)
|
|
|
+ const now = new Date();
|
|
|
+
|
|
|
+ // 将时间调整为北京时间(UTC + 8小时)
|
|
|
+ const timestamp = new Date(now.getTime() + 8 * 60 * 60 * 1000)
|
|
|
+ .toISOString()
|
|
|
+ .replace(/[-T:.]/g, ''); // 格式化为不含特殊符号的时间戳
|
|
|
+
|
|
|
+ // 拼接文件名
|
|
|
+ const filename = `报警记录_${timestamp}.xlsx`;
|
|
|
+ saveJsonToExcel(sortedData, filename, customHeaders)
|
|
|
+ },
|
|
|
fetchData() {
|
|
|
const tagIds = this.collectEntity.tagList.map(e => e.id)
|
|
|
const params = {
|
|
@@ -177,7 +224,7 @@ export default {
|
|
|
}
|
|
|
})
|
|
|
},
|
|
|
- tableRowClassName({ row, rowIndex }) {
|
|
|
+ tableRowClassName({row, rowIndex}) {
|
|
|
const warnEvent = this.tableData[rowIndex].warnEvent
|
|
|
if (warnEvent === 1) {
|
|
|
return 'warning-produce'
|
|
@@ -209,207 +256,210 @@ export default {
|
|
|
</script>
|
|
|
|
|
|
<style lang="less" scoped>
|
|
|
- .show-warn-modal {
|
|
|
- /deep/ .el-table {
|
|
|
- box-shadow: 0.05rem 0.05rem 0.1rem #AAA7A7, 0.05rem 0.05rem 0.1rem #FFFFFF;
|
|
|
+.show-warn-modal {
|
|
|
+ /deep/ .el-table {
|
|
|
+ box-shadow: 0.05rem 0.05rem 0.1rem #AAA7A7, 0.05rem 0.05rem 0.1rem #FFFFFF;
|
|
|
|
|
|
- .cell {
|
|
|
- white-space: pre-line;
|
|
|
- }
|
|
|
+ .cell {
|
|
|
+ white-space: pre-line;
|
|
|
}
|
|
|
+ }
|
|
|
|
|
|
- /deep/ .el-table--border, .el-table--group {
|
|
|
- border-radius: 10px;
|
|
|
- }
|
|
|
+ /deep/ .el-table--border, .el-table--group {
|
|
|
+ border-radius: 10px;
|
|
|
+ }
|
|
|
|
|
|
- /deep/ .el-table__row {
|
|
|
- .warn-column {
|
|
|
- background-color: #d9d9d9 !important;
|
|
|
- box-shadow: inset #BFBFBF -1px -1px !important;
|
|
|
- }
|
|
|
+ /deep/ .el-table__row {
|
|
|
+ .warn-column {
|
|
|
+ background-color: #d9d9d9 !important;
|
|
|
+ box-shadow: inset #BFBFBF -1px -1px !important;
|
|
|
+ }
|
|
|
|
|
|
- .warn-row {
|
|
|
- }
|
|
|
+ .warn-row {
|
|
|
}
|
|
|
+ }
|
|
|
+
|
|
|
+ /deep/ .el-table .warning-produce {
|
|
|
+ color: #45c4ff;
|
|
|
+ }
|
|
|
+
|
|
|
+ /deep/ .el-table .warning-end {
|
|
|
+ color: #d2262e;
|
|
|
+ }
|
|
|
|
|
|
- /deep/ .el-table .warning-produce {
|
|
|
- color: #45c4ff;
|
|
|
+ /deep/ .el-table .warning-answer {
|
|
|
+ color: #24d393;
|
|
|
+ }
|
|
|
+
|
|
|
+ /deep/ .el-input__inner {
|
|
|
+ background-color: #ebebeb;
|
|
|
+ box-shadow: inset 0.1rem 0.1rem 0.1rem #AAA7A7, inset -0.1rem -0.1rem 0.1rem #FFFFFF;
|
|
|
+ border: none;
|
|
|
+ font-size: 16px;
|
|
|
+ color: #333333;
|
|
|
+ }
|
|
|
+
|
|
|
+ /deep/ .el-select-dropdown__item.selected {
|
|
|
+ font-weight: normal;
|
|
|
+ color: #FFFFFF;
|
|
|
+ background-color: #A20D13;
|
|
|
+ border-radius: 5px;
|
|
|
+ box-shadow: inset 0.2rem 0.2rem 0.5rem #6E090C, inset -0.2rem -0.2rem 0.5rem #C71016;
|
|
|
+ }
|
|
|
+
|
|
|
+ /deep/ .history-date-picker {
|
|
|
+ left: 10% !important;
|
|
|
+ background-color: #EBEBEB;
|
|
|
+ box-shadow: 0.05rem 0.05rem 0.1rem #AAA7A7, -0.05rem -0.05rem 0.1rem #FFFFFF;
|
|
|
+
|
|
|
+ .el-picker-panel__sidebar {
|
|
|
+ position: absolute;
|
|
|
+ top: 0;
|
|
|
+ bottom: 0;
|
|
|
+ width: 110px;
|
|
|
+ border-right: 1px solid #e4e4e4;
|
|
|
+ box-sizing: border-box;
|
|
|
+ padding-top: 6px;
|
|
|
+ background-color: transparent;
|
|
|
+ overflow: auto;
|
|
|
}
|
|
|
|
|
|
- /deep/ .el-table .warning-end {
|
|
|
- color: #d2262e;
|
|
|
+ .today {
|
|
|
+ div {
|
|
|
+ span {
|
|
|
+ color: #A20D13;
|
|
|
+ font-weight: bolder;
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
- /deep/ .el-table .warning-answer {
|
|
|
- color: #24d393;
|
|
|
+ .start-date, .end-date {
|
|
|
+ div {
|
|
|
+ span {
|
|
|
+ color: #A20D13;
|
|
|
+ font-weight: bolder;
|
|
|
+ background-color: #EBEBEB;
|
|
|
+ box-shadow: 0.05rem 0.05rem 0.1rem #AAA7A7, -0.05rem -0.05rem 0.1rem #FFFFFF;
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
- /deep/ .el-input__inner {
|
|
|
+ .el-picker-panel__footer {
|
|
|
+ border-top: 1px solid #e4e4e4;
|
|
|
+ padding: 4px;
|
|
|
+ text-align: right;
|
|
|
background-color: #ebebeb;
|
|
|
- box-shadow: inset 0.1rem 0.1rem 0.1rem #AAA7A7, inset -0.1rem -0.1rem 0.1rem #FFFFFF;
|
|
|
- border: none;
|
|
|
- font-size: 16px;
|
|
|
- color: #333333;
|
|
|
+ position: relative;
|
|
|
+ font-size: 0;
|
|
|
}
|
|
|
|
|
|
- /deep/ .el-select-dropdown__item.selected {
|
|
|
- font-weight: normal;
|
|
|
- color: #FFFFFF;
|
|
|
- background-color: #A20D13;
|
|
|
+ .el-picker-panel__shortcut {
|
|
|
+ display: block;
|
|
|
+ width: 90%;
|
|
|
+ border: 0;
|
|
|
border-radius: 5px;
|
|
|
- box-shadow: inset 0.2rem 0.2rem 0.5rem #6E090C, inset -0.2rem -0.2rem 0.5rem #C71016;
|
|
|
+ background-color: transparent;
|
|
|
+ line-height: 28px;
|
|
|
+ font-size: 14px;
|
|
|
+ color: #606266;
|
|
|
+ padding-left: 12px;
|
|
|
+ text-align: left;
|
|
|
+ outline: 0;
|
|
|
+ cursor: pointer;
|
|
|
+ margin: 8px 5px;
|
|
|
+ box-shadow: 0.1rem 0.1rem 0.1rem #aaa7a7, -0.1rem -0.1rem 0.1rem #ffffff;
|
|
|
}
|
|
|
|
|
|
- /deep/ .history-date-picker {
|
|
|
- left: 10% !important;
|
|
|
- background-color: #EBEBEB;
|
|
|
- box-shadow: 0.05rem 0.05rem 0.1rem #AAA7A7, -0.05rem -0.05rem 0.1rem #FFFFFF;
|
|
|
-
|
|
|
- .el-picker-panel__sidebar {
|
|
|
- position: absolute;
|
|
|
- top: 0;
|
|
|
- bottom: 0;
|
|
|
- width: 110px;
|
|
|
- border-right: 1px solid #e4e4e4;
|
|
|
- box-sizing: border-box;
|
|
|
- padding-top: 6px;
|
|
|
- background-color: transparent;
|
|
|
- overflow: auto;
|
|
|
- }
|
|
|
-
|
|
|
- .today {
|
|
|
- div {
|
|
|
- span {
|
|
|
- color: #A20D13;
|
|
|
- font-weight: bolder;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
+ .el-button--text {
|
|
|
+ color: #A20D13;
|
|
|
+ }
|
|
|
|
|
|
- .start-date, .end-date {
|
|
|
- div {
|
|
|
- span {
|
|
|
- color: #A20D13;
|
|
|
- font-weight: bolder;
|
|
|
- background-color: #EBEBEB;
|
|
|
- box-shadow: 0.05rem 0.05rem 0.1rem #AAA7A7, -0.05rem -0.05rem 0.1rem #FFFFFF;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
+ .el-button--default {
|
|
|
+ color: #FFF;
|
|
|
+ background-color: #A20D13;
|
|
|
+ }
|
|
|
|
|
|
- .el-picker-panel__footer {
|
|
|
- border-top: 1px solid #e4e4e4;
|
|
|
- padding: 4px;
|
|
|
- text-align: right;
|
|
|
- background-color: #ebebeb;
|
|
|
- position: relative;
|
|
|
- font-size: 0;
|
|
|
- }
|
|
|
+ .el-button.is-plain:focus, .el-button.is-plain:hover {
|
|
|
+ border-color: transparent;
|
|
|
+ color: #FFF;
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
- .el-picker-panel__shortcut {
|
|
|
- display: block;
|
|
|
- width: 90%;
|
|
|
- border: 0;
|
|
|
- border-radius: 5px;
|
|
|
- background-color: transparent;
|
|
|
- line-height: 28px;
|
|
|
- font-size: 14px;
|
|
|
- color: #606266;
|
|
|
- padding-left: 12px;
|
|
|
- text-align: left;
|
|
|
- outline: 0;
|
|
|
- cursor: pointer;
|
|
|
- margin: 8px 5px;
|
|
|
- box-shadow: 0.1rem 0.1rem 0.1rem #aaa7a7, -0.1rem -0.1rem 0.1rem #ffffff;
|
|
|
- }
|
|
|
+ /deep/ .popper__arrow {
|
|
|
+ display: none;
|
|
|
+ }
|
|
|
|
|
|
- .el-button--text {
|
|
|
- color: #A20D13;
|
|
|
- }
|
|
|
+ /deep/ .el-range-editor .el-range-input {
|
|
|
+ line-height: 1;
|
|
|
+ background-color: transparent;
|
|
|
+ }
|
|
|
|
|
|
- .el-button--default {
|
|
|
- color: #FFF;
|
|
|
- background-color: #A20D13;
|
|
|
- }
|
|
|
+ /deep/ .el-date-editor .el-range__icon {
|
|
|
+ color: inherit;
|
|
|
+ }
|
|
|
|
|
|
- .el-button.is-plain:focus, .el-button.is-plain:hover {
|
|
|
- border-color: transparent;
|
|
|
- color: #FFF;
|
|
|
- }
|
|
|
- }
|
|
|
+ .el-button {
|
|
|
+ border: none;
|
|
|
+ background-color: #EBEBEB;
|
|
|
+ box-shadow: 0.05rem 0.1rem 0.1rem #AAA7A7, -0.05rem -0.1rem 0.1rem #FFFFFF;
|
|
|
+ }
|
|
|
|
|
|
- /deep/ .popper__arrow {
|
|
|
- display: none;
|
|
|
- }
|
|
|
+ .el-button:active {
|
|
|
+ color: #FFF;
|
|
|
+ border: none;
|
|
|
+ background-color: #A20D13;
|
|
|
+ box-shadow: inset 0.1rem 0.1rem 0.2rem #6E090C, inset -0.1rem -0.1rem 0.2rem #c7494d;
|
|
|
+ }
|
|
|
|
|
|
- /deep/ .el-range-editor .el-range-input {
|
|
|
- line-height: 1;
|
|
|
- background-color: transparent;
|
|
|
- }
|
|
|
+ .el-button:focus, .el-button:hover {
|
|
|
+ color: #606266;
|
|
|
+ border-color: transparent;
|
|
|
+ /*background-color: #A20D13;*/
|
|
|
+ }
|
|
|
|
|
|
- /deep/ .el-date-editor .el-range__icon {
|
|
|
- color: inherit;
|
|
|
+ /deep/ .el-pagination {
|
|
|
+ .btn-prev {
|
|
|
+ background: inherit !important;
|
|
|
+ background-color: #EBEBEB;
|
|
|
+ box-shadow: 0.05rem 0.1rem 0.1rem #AAA7A7, -0.05rem -0.1rem 0.1rem #FFFFFF;
|
|
|
}
|
|
|
|
|
|
- .el-button {
|
|
|
- border: none;
|
|
|
+ .btn-next {
|
|
|
background-color: #EBEBEB;
|
|
|
box-shadow: 0.05rem 0.1rem 0.1rem #AAA7A7, -0.05rem -0.1rem 0.1rem #FFFFFF;
|
|
|
}
|
|
|
|
|
|
- .el-button:active {
|
|
|
- color: #FFF;
|
|
|
- border: none;
|
|
|
- background-color: #A20D13;
|
|
|
- box-shadow: inset 0.1rem 0.1rem 0.2rem #6E090C, inset -0.1rem -0.1rem 0.2rem #c7494d;
|
|
|
- }
|
|
|
+ /*
|
|
|
+ .btn-prev:active, .btn-next:active {
|
|
|
+ color: #FFF;
|
|
|
+ border: none;
|
|
|
+ background-color: #A20D13 !important;
|
|
|
+ box-shadow: inset 0.1rem 0.1rem 0.2rem #6E090C, inset -0.1rem -0.1rem 0.2rem #c7494d;
|
|
|
+ }*/
|
|
|
|
|
|
- .el-button:focus, .el-button:hover {
|
|
|
- color: #606266;
|
|
|
- border-color: transparent;
|
|
|
- /*background-color: #A20D13;*/
|
|
|
+ button:hover {
|
|
|
+ color: #c7494d;
|
|
|
}
|
|
|
|
|
|
- /deep/.el-pagination {
|
|
|
- .btn-prev {
|
|
|
- background: inherit !important;
|
|
|
- background-color: #EBEBEB;
|
|
|
- box-shadow: 0.05rem 0.1rem 0.1rem #AAA7A7, -0.05rem -0.1rem 0.1rem #FFFFFF;
|
|
|
- }
|
|
|
- .btn-next {
|
|
|
+ .el-pager {
|
|
|
+ li {
|
|
|
+ padding: 0 4px;
|
|
|
+ background: #FFF;
|
|
|
+ font-size: 13px;
|
|
|
+ min-width: 35.5px;
|
|
|
+ height: 28px;
|
|
|
+ line-height: 28px;
|
|
|
+ box-sizing: border-box;
|
|
|
+ text-align: center;
|
|
|
background-color: #EBEBEB;
|
|
|
box-shadow: 0.05rem 0.1rem 0.1rem #AAA7A7, -0.05rem -0.1rem 0.1rem #FFFFFF;
|
|
|
- }/*
|
|
|
- .btn-prev:active, .btn-next:active {
|
|
|
- color: #FFF;
|
|
|
- border: none;
|
|
|
- background-color: #A20D13 !important;
|
|
|
- box-shadow: inset 0.1rem 0.1rem 0.2rem #6E090C, inset -0.1rem -0.1rem 0.2rem #c7494d;
|
|
|
- }*/
|
|
|
-
|
|
|
- button:hover {
|
|
|
- color: #c7494d;
|
|
|
}
|
|
|
|
|
|
- .el-pager {
|
|
|
- li {
|
|
|
- padding: 0 4px;
|
|
|
- background: #FFF;
|
|
|
- font-size: 13px;
|
|
|
- min-width: 35.5px;
|
|
|
- height: 28px;
|
|
|
- line-height: 28px;
|
|
|
- box-sizing: border-box;
|
|
|
- text-align: center;
|
|
|
- background-color: #EBEBEB;
|
|
|
- box-shadow: 0.05rem 0.1rem 0.1rem #AAA7A7, -0.05rem -0.1rem 0.1rem #FFFFFF;
|
|
|
- }
|
|
|
-
|
|
|
- li.active, li:hover {
|
|
|
- color: #c7494d;
|
|
|
- cursor: default;
|
|
|
- }
|
|
|
+ li.active, li:hover {
|
|
|
+ color: #c7494d;
|
|
|
+ cursor: default;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+}
|
|
|
</style>
|