From 34ec919649adfefeecd0418284dd7b02e9ed49b8 Mon Sep 17 00:00:00 2001 From: 马宇豪 <978517621@qq.com> Date: 星期三, 23 四月 2025 15:42:17 +0800 Subject: [PATCH] 添加批发仓库监测预警 --- src/views/monitorAlert/storeAreaManage/components/deviceDialog.vue | 248 ++++ src/api/monitorAlert.js | 156 ++ src/views/monitorAlert/carPeople/index.vue | 168 +++ src/views/monitorAlert/temperatureHumidity/components/thDialog.vue | 205 +++ src/views/monitorAlert/carPeople/components/carPeopleDialog.vue | 102 + src/views/usermng/warning.vue | 472 ++++---- src/assets/deviceItem.png | 0 src/views/monitorAlert/storeAreaManage/components/addStock.vue | 216 ++++ src/views/monitorAlert/warningInfo/index.vue | 264 ++++ src/views/monitorAlert/storeAreaManage/index.vue | 277 +++++ config/dev.env.js | 11 src/views/monitorAlert/crewInfo/index.vue | 178 +++ src/views/monitorAlert/preWarning/components/preWarningDialog.vue | 102 + src/views/monitorAlert/preWarning/index.vue | 272 +++++ src/views/monitorAlert/temperatureHumidity/index.vue | 305 +++++ src/views/monitorAlert/warningInfo/components/warningInfoDialog.vue | 102 + src/views/monitorAlert/crewInfo/components/crewDialog.vue | 122 ++ 17 files changed, 2,962 insertions(+), 238 deletions(-) diff --git a/config/dev.env.js b/config/dev.env.js index 4007947..992bbc8 100644 --- a/config/dev.env.js +++ b/config/dev.env.js @@ -18,12 +18,15 @@ // IMG_API: '"http://39.104.85.193:4105/upload/"', // // -// BASE_API: '"http://192.168.0.70:8100"', -// IMG_API: '"http://192.168.0.70:8100/upload/"', +// BASE_API: '"http://192.168.0.12:4105"', +// IMG_API: '"http://192.168.0.12:4105/upload/"', +// 贺哥 + BASE_API: '"http://192.168.2.58:8100"', + IMG_API: '"http://192.168.2.58:8100/upload/"', // 正式地址 - BASE_API: '"http://39.104.85.193:4105"', - IMG_API: '"http://39.104.85.193:4105/upload/"', + // BASE_API: '"http://39.104.85.193:4105"', + // IMG_API: '"http://39.104.85.193:4105/upload/"', // IMG_API: '"http://127.0.0.1:8100/upload/"', // IMG_API: '"https://sinanoaq.com:8100/upload/"', // BASE_API: '"http://220.171.99.118:4100"', diff --git a/src/api/monitorAlert.js b/src/api/monitorAlert.js new file mode 100644 index 0000000..1fcc1aa --- /dev/null +++ b/src/api/monitorAlert.js @@ -0,0 +1,156 @@ +import request from '@/utils/request' +import { getToken } from '@/utils/auth' + +export function getOriginalPerson(data){ + return request({ + headers:{ + 'Authorization':getToken() + }, + url:process.env.BASE_API+ '/originalPerson/pageList', + method:'post', + data + }) +} + +export function getOriginalPersonCar(data){ + return request({ + headers:{ + 'Authorization':getToken() + }, + url:process.env.BASE_API+ '/originalPerson/selectOriginalPersonCar', + method:'post', + data + }) +} + +export function getOriginalAlarm(data){ + return request({ + headers:{ + 'Authorization':getToken() + }, + url:process.env.BASE_API+ '/originalAlarm/pageList', + method:'post', + data + }) +} + +export function editAlarmInfo(params){ + return request({ + headers:{ + 'Authorization':getToken() + }, + url:process.env.BASE_API+ '/originalAlarm/editAlarmInfo', + method: 'get', + params: params || {}, + }) +} + +export function getEarlyPush(data){ + return request({ + headers:{ + 'Authorization':getToken() + }, + url:process.env.BASE_API+ '/originalAlarm/earlyPushPageList', + method:'post', + data + }) +} + +export function getStorePageList(data){ + return request({ + headers:{ + 'Authorization':getToken() + }, + url:process.env.BASE_API+ '/store/storePageList', + method:'post', + data + }) +} + +export function getStoreroomPage(data){ + return request({ + headers:{ + 'Authorization':getToken() + }, + url:process.env.BASE_API+ '/store/storeroomPageList', + method:'post', + data + }) +} + +export function getStoreroomPageV2(data){ + return request({ + headers:{ + 'Authorization':getToken() + }, + url:process.env.BASE_API+ '/store/storeroomPageListV2', + method:'post', + data + }) +} + +export function getDevicePageList(data){ + return request({ + headers:{ + 'Authorization':getToken() + }, + url:process.env.BASE_API+ '/store/storeroomDevicePageList', + method:'post', + data + }) +} + +export function getDeviceList(data){ + return request({ + headers:{ + 'Authorization':getToken() + }, + url:process.env.BASE_API+ '\n' + '/store/storeroomDeviceList', + method:'post', + data + }) +} + +export function getTemperaturePage(data){ + return request({ + headers:{ + 'Authorization':getToken() + }, + url:process.env.BASE_API+ '/store/temperaturePageList', + method:'post', + data + }) +} + +export function getHumidityPage(data){ + return request({ + headers:{ + 'Authorization':getToken() + }, + url:process.env.BASE_API+ '/store/humidityPageList', + method:'post', + data + }) +} + +export function addOrUpdateStoreroomDevice(data){ + return request({ + headers:{ + 'Authorization':getToken() + }, + url:process.env.BASE_API+ '/store/addOrUpdateStoreroomDevice', + method:'post', + data + }) +} + +export function deleteStoreroomDevice(data){ + return request({ + headers:{ + 'Authorization':getToken() + }, + url:process.env.BASE_API+ '/store/deleteStoreroomDevice', + method:'post', + params: data + }) +} diff --git a/src/assets/deviceItem.png b/src/assets/deviceItem.png new file mode 100644 index 0000000..93f862d --- /dev/null +++ b/src/assets/deviceItem.png Binary files differ diff --git a/src/views/monitorAlert/carPeople/components/carPeopleDialog.vue b/src/views/monitorAlert/carPeople/components/carPeopleDialog.vue new file mode 100644 index 0000000..57bec78 --- /dev/null +++ b/src/views/monitorAlert/carPeople/components/carPeopleDialog.vue @@ -0,0 +1,102 @@ +<template> + <el-dialog :visible.sync="editDialogVisible" :modal-append-to-body="false" :close-on-click-modal="false" :title="title" center + width="30%"> + <el-form ref="form" :rules="formRules" :model="form" label-width="140px" class="form"> + <el-form-item label="姓名:" prop="name"> + <el-input v-model.trim="form.name"/> + </el-form-item> + <el-form-item label="人员类型:" prop="type"> + <el-select v-model="form.type" placeholder="请选择类型"> + <el-option + v-for="item in typeList" + :key="item.id" + :label="item.name" + :value="item.id"> + </el-option> + </el-select> + </el-form-item> + <el-form-item label="联系方式:" prop="phone"> + <el-input type="number" v-model.number.trim="form.phone"/> + </el-form-item> + </el-form> + <span slot="footer" class="dialog-footer"> + <el-button @click="editDialogVisible = false">取 消</el-button> + <el-button type="primary" @click="confirm()">确 认</el-button> + </span> + </el-dialog> +</template> + +<script> + import {updateStorehouseData} from "../../../../api/warehouse"; + + export default { + name: "crewDialog", + data() { + return { + editDialogVisible: false, + title: '', + typeList: [ + { + id: 1, + name: '' + } + ], + form: {}, + formRules:{ + name:[ + { required: true, message: '请输入姓名', trigger: 'change' }, + ] + } + } + }, + created() { + const t = this + }, + methods: { + open(){ + this.editDialogVisible = true; + }, + confirm(){ + this.$refs.form.validate(async (valid) => { + if (valid) { + // const res = await updateStorehouseData(this.editForm) + // if(res.data.code == 200){ + // this.$message.success('盘库提交成功') + // + // }else{ + // this.$message.warning(res.data.message) + // } + // this.editDialogVisible = false + } + }) + } + } + } +</script> + +<style lang="scss" scoped> + .part-title{ + font-size: 16px; + font-weight: bolder; + } + .selector{ + /deep/ .el-form-item__content{ + margin-left: 0 !important; + } + } + .form{ + .el-form-item{ + display: flex !important; + } + /deep/ .el-form-item__content{ + width: 100%; + margin-left: 0 !important; + } + } + + .numInput{ + /deep/ .el-input__inner{ + padding-right: 0; + } + } +</style> diff --git a/src/views/monitorAlert/carPeople/index.vue b/src/views/monitorAlert/carPeople/index.vue new file mode 100644 index 0000000..6385f47 --- /dev/null +++ b/src/views/monitorAlert/carPeople/index.vue @@ -0,0 +1,168 @@ +<template> + <div class="app-container"> + <div class="filter-container"> + <div style="display: block;"> + <!-- <div class="basic_search" style="margin-right: 10px;padding-top: 10px">--> + <!-- <span>库房列表:</span>--> + <!-- <el-select v-model="listQuery.warehouseId" clearable filterable>--> + <!-- <el-option--> + <!-- v-for="item in warehouseList"--> + <!-- :key="item.id"--> + <!-- :label="item.name"--> + <!-- :value="item.name"--> + <!-- >--> + <!-- </el-option>--> + <!-- </el-select>--> + <!-- </div>--> + <div class="basic_search"> + <span>企业名称:</span> + <el-input v-model.trim="listQuery.filter.companyName" style="width: 300px"/> + </div> + <div class="basic_search" style="margin-right: 10px"> + <el-button style="margin-left: 10px;" type="primary" @click="reset()">重置</el-button> + <el-button style="margin-left: 10px;" type="primary" icon="el-icon-search" @click="search()">查询 + </el-button> + </div> + </div> + </div> + <br> + <div class="table_content"> + <el-table + v-loading="listLoading" + :key="tableKey" + :data="dataList" + border + fit + highlight-current-row + style="width: 100%;" + > + <el-table-column label="序号" type="index" align="center"></el-table-column> + <el-table-column label="企业" prop="companyName" align="center"></el-table-column> + <el-table-column label="人员数量" prop="personCount" align="center"></el-table-column> + <el-table-column label="车辆数量" prop="carCount" align="center"></el-table-column> + <el-table-column label="创建人" prop="createBy" align="center"></el-table-column> + <el-table-column label="修改人" prop="updateBy" align="center"></el-table-column> + <el-table-column label="创建时间" prop="createDate" align="center"></el-table-column> + <el-table-column label="修改时间" prop="updateDate" align="center"></el-table-column> + <el-table-column label="数据采集时间" prop="collectTime" align="center"></el-table-column> + <el-table-column label="数据同步时间" prop="syncTime" align="center"></el-table-column> + <el-table-column label="删除标识" prop="deleteFlag" align="center"> + <template slot-scope="scope"> + {{scope.row.deleteFlag == 1?'是':'否'}} + </template> + </el-table-column> + <!-- <el-table-column label="操作" align="center" width="120" class-name="small-padding fixed-width" fixed="right">--> + <!-- <template slot-scope="scope">--> + <!-- <el-button type="text" @click="openDialog('edit',scope.row)">修改</el-button>--> + <!-- <el-button type="text" @click="deleteData(scope.row)">删除</el-button>--> + <!-- </template>--> + <!-- </el-table-column>--> + </el-table> + <br> + <div style="display: flex;justify-content: right"> + <el-pagination + v-show="recordTotal>0" + :current-page="currentPage" + :page-sizes="[10, 20, 30, 50]" + :page-size="listQuery.pageSize" + :total="recordTotal" + layout="total, sizes, prev, pager, next, jumper" + background + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> + </div> + <car-people-dialog ref="carPeople"></car-people-dialog> + </div> + </div> +</template> + +<script> +import {computePageCount} from "../../../utils"; +import {getOriginalPersonCar} from "../../../api/monitorAlert" +import carPeopleDialog from "./components/carPeopleDialog" + +export default { + name: "carPeople", + components: {carPeopleDialog}, + data() { + return { + tableKey: '', + recordTotal: 0, + currentPage: 1, + warehouseList: [], + listLoading: false, + dataList: [], + listQuery: { + filter: { + companyCode: '', + companyName: '' + }, + pageIndex: 1, + pageSize: 10 + } + } + }, + created() { + this.getDataList() + }, + mounted() { + }, + watch: {}, + methods: { + openDialog(type, data) { + this.$refs.carPeople.open(type, data) + }, + deleteData(data) { + + }, + async getDataList() { + let res = await getOriginalPersonCar(this.listQuery) + if (res.data.code === "200") { + const data = res.data.result + if (Array.isArray(data.records)) { + this.dataList = data.records + this.recordTotal = data.total + this.currentPage = data.current + } else { + this.dataList = [] + } + } else { + this.$message({ + type: 'warning', + message: res.data.message + }) + } + this.listLoading = false + }, + handleSizeChange: function (val) { + this.listQuery.pageSize = val + this.getDataList() + }, + handleCurrentChange: function (val) { + this.listQuery.pageIndex = val + this.getDataList() + }, + reset() { + this.listQuery = { + filter: { + companyName: '' + }, + pageIndex: 1, + pageSize: 10 + } + this.getDataList() + }, + search() { + this.listQuery.pageIndex = 1 + this.getDataList() + } + }, +} +</script> + +<style scoped> +.basic_search { + display: inline-block; +} +</style> diff --git a/src/views/monitorAlert/crewInfo/components/crewDialog.vue b/src/views/monitorAlert/crewInfo/components/crewDialog.vue new file mode 100644 index 0000000..c212b9e --- /dev/null +++ b/src/views/monitorAlert/crewInfo/components/crewDialog.vue @@ -0,0 +1,122 @@ +<template> + <el-dialog :visible.sync="editDialogVisible" :modal-append-to-body="false" :close-on-click-modal="false" :title="title" center + width="30%"> + <el-form ref="form" :rules="formRules" :model="form" label-width="140px" class="form"> + <el-form-item label="姓名:" prop="personName"> + <el-input v-model.trim="form.personName"/> + </el-form-item> + <el-form-item label="人员类型:" prop="type"> + <el-select v-model="form.type" placeholder="请选择类型"> + <el-option + v-for="item in typeList" + :key="item.id" + :label="item.name" + :value="item.id"> + </el-option> + </el-select> + </el-form-item> + <el-form-item label="联系方式:" prop="phone"> + <el-input type="number" v-model.number.trim="form.phone"/> + </el-form-item> + </el-form> + <span slot="footer" class="dialog-footer"> + <el-button @click="editDialogVisible = false">取 消</el-button> + <el-button type="primary" @click="confirm()">确 认</el-button> + </span> + </el-dialog> +</template> + +<script> + import {} from "../../../../api/monitorAlert"; + import Cookies from "js-cookie" + export default { + name: "crewDialog", + data() { + return { + editDialogVisible: false, + title: '', + typeList: [ + { + name: '法定代表人', + value: 1 + }, + { + name: '主要负责人', + value: 2 + }, + { + name: '安全负责人', + value: 3 + }, + { + name: '保管员', + value: 4 + }, + { + name: '守护员', + value: 5 + } + ], + form: { + personName: '', + personType: null, + + }, + formRules:{ + name:[ + { required: true, message: '请输入姓名', trigger: 'change' }, + ] + } + } + }, + created() { + const t = this + }, + methods: { + open(){ + this.editDialogVisible = true; + }, + confirm(){ + this.$refs.form.validate(async (valid) => { + if (valid) { + // const res = await addOriginalPerson(this.editForm) + // if(res.data.code == 200){ + // this.$message.success('盘库提交成功') + // + // }else{ + // this.$message.warning(res.data.message) + // } + this.editDialogVisible = false + } + }) + } + } + } +</script> + +<style lang="scss" scoped> + .part-title{ + font-size: 16px; + font-weight: bolder; + } + .selector{ + /deep/ .el-form-item__content{ + margin-left: 0 !important; + } + } + .form{ + .el-form-item{ + display: flex !important; + } + /deep/ .el-form-item__content{ + width: 100%; + margin-left: 0 !important; + } + } + + .numInput{ + /deep/ .el-input__inner{ + padding-right: 0; + } + } +</style> diff --git a/src/views/monitorAlert/crewInfo/index.vue b/src/views/monitorAlert/crewInfo/index.vue new file mode 100644 index 0000000..0311996 --- /dev/null +++ b/src/views/monitorAlert/crewInfo/index.vue @@ -0,0 +1,178 @@ +<template> + <div class="app-container"> + <div class="filter-container"> + <div> + <div class="basic_search"> + <span>企业名称:</span> + <el-input v-model.trim="listQuery.filter.companyName" style="width: 300px"/> + </div> + <div class="basic_search"> + <el-button style="margin-left: 10px;" type="primary" @click="reset()">重置</el-button> + <el-button style="margin-left: 10px;" type="primary" icon="el-icon-search" @click="search()">查询</el-button> + </div> + </div> + </div> + <br/> + <div class="table_content"> + <el-table + v-loading="listLoading" + :key="tableKey" + :data="dataList" + border + fit + highlight-current-row + style="width: 100%;" + > + <el-table-column label="序号" type="index" align="center"></el-table-column> + <el-table-column label="姓名" prop="personName" align="center"></el-table-column> + <el-table-column label="企业名称" prop="companyName" align="center"></el-table-column> + <el-table-column label="人员类型" prop="personType" align="center"> + <template slot-scope="scope"> + {{getTypeName(scope.row.personType)}} + </template> + </el-table-column> + <el-table-column label="联系方式" prop="mb" align="center"></el-table-column> + <el-table-column label="创建人" prop="createBy" align="center"></el-table-column> + <el-table-column label="修改人" prop="updateBy" align="center"></el-table-column> + <el-table-column label="创建时间" prop="createDate" align="center"></el-table-column> + <el-table-column label="修改时间" prop="updateDate" align="center"></el-table-column> +<!-- <el-table-column label="操作" align="center" width="120" class-name="small-padding fixed-width" fixed="right">--> +<!-- <template slot-scope="scope">--> +<!-- <el-button type="text" @click="openDialog('view',scope.row)">查看</el-button>--> +<!-- <el-button type="text" @click="deleteData(scope.row)">删除</el-button>--> +<!-- </template>--> +<!-- </el-table-column>--> + </el-table> + <br/> + <div style="display: flex;justify-content: right"> + <el-pagination + v-show="recordTotal>0" + :current-page="currentPage" + :page-sizes="[10, 20, 30, 50]" + :page-size="listQuery.pageSize" + :total="recordTotal" + layout="total, sizes, prev, pager, next, jumper" + background + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> + </div> + </div> + <crew-dialog ref="crewDialog"></crew-dialog> + </div> +</template> + +<script> +import {computePageCount} from "../../../utils"; +import {getOriginalPerson} from "../../../api/monitorAlert" +import crewDialog from "./components/crewDialog" +import Cookies from "js-cookie" +export default { + name: "crewInfo", + components: {crewDialog}, + data() { + return { + tableKey: '', + recordTotal: 0, + currentPage: 1, + Cookies: Cookies, + listLoading: false, + dataList: [], + listQuery: { + filter:{ + companyCode: '', + companyName: '' + }, + pageIndex:1, + pageSize:10 + }, + typeList: [ + { + name: '法定代表人', + value: 1 + }, + { + name: '主要负责人', + value: 2 + }, + { + name: '安全负责人', + value: 3 + }, + { + name: '保管员', + value: 4 + }, + { + name: '守护员', + value: 5 + } + ] + } + }, + created() { + this.getDataList() + }, + mounted() { + }, + watch: {}, + methods: { + openDialog(type,data){ + this.$refs.crewDialog.open(type,data) + }, + deleteData(data){ + + }, + getTypeName(type){ + return this.typeList.find(i=>i.value == type).name + }, + async getDataList() { + let res = await getOriginalPerson(this.listQuery) + if (res.data.code === "200") { + const data = res.data.result + if(Array.isArray(data.records)){ + this.dataList = data.records + this.recordTotal = data.total + this.currentPage = data.current + }else{ + this.dataList = [] + } + } else { + this.$message({ + type: 'warning', + message: res.data.message + }) + } + this.listLoading = false + }, + handleSizeChange: function(val) { + this.listQuery.pageSize = val + this.getDataList() + }, + handleCurrentChange: function(val) { + this.listQuery.pageIndex = val + this.getDataList() + }, + reset(){ + this.listQuery = { + filter:{ + companyName: '' + }, + pageIndex:1, + pageSize:10 + } + this.getDataList() + }, + search(){ + this.listQuery.pageIndex = 1 + this.getDataList() + } + } +} +</script> + +<style scoped> +.basic_search { + display: inline-block; +} +</style> diff --git a/src/views/monitorAlert/preWarning/components/preWarningDialog.vue b/src/views/monitorAlert/preWarning/components/preWarningDialog.vue new file mode 100644 index 0000000..57bec78 --- /dev/null +++ b/src/views/monitorAlert/preWarning/components/preWarningDialog.vue @@ -0,0 +1,102 @@ +<template> + <el-dialog :visible.sync="editDialogVisible" :modal-append-to-body="false" :close-on-click-modal="false" :title="title" center + width="30%"> + <el-form ref="form" :rules="formRules" :model="form" label-width="140px" class="form"> + <el-form-item label="姓名:" prop="name"> + <el-input v-model.trim="form.name"/> + </el-form-item> + <el-form-item label="人员类型:" prop="type"> + <el-select v-model="form.type" placeholder="请选择类型"> + <el-option + v-for="item in typeList" + :key="item.id" + :label="item.name" + :value="item.id"> + </el-option> + </el-select> + </el-form-item> + <el-form-item label="联系方式:" prop="phone"> + <el-input type="number" v-model.number.trim="form.phone"/> + </el-form-item> + </el-form> + <span slot="footer" class="dialog-footer"> + <el-button @click="editDialogVisible = false">取 消</el-button> + <el-button type="primary" @click="confirm()">确 认</el-button> + </span> + </el-dialog> +</template> + +<script> + import {updateStorehouseData} from "../../../../api/warehouse"; + + export default { + name: "crewDialog", + data() { + return { + editDialogVisible: false, + title: '', + typeList: [ + { + id: 1, + name: '' + } + ], + form: {}, + formRules:{ + name:[ + { required: true, message: '请输入姓名', trigger: 'change' }, + ] + } + } + }, + created() { + const t = this + }, + methods: { + open(){ + this.editDialogVisible = true; + }, + confirm(){ + this.$refs.form.validate(async (valid) => { + if (valid) { + // const res = await updateStorehouseData(this.editForm) + // if(res.data.code == 200){ + // this.$message.success('盘库提交成功') + // + // }else{ + // this.$message.warning(res.data.message) + // } + // this.editDialogVisible = false + } + }) + } + } + } +</script> + +<style lang="scss" scoped> + .part-title{ + font-size: 16px; + font-weight: bolder; + } + .selector{ + /deep/ .el-form-item__content{ + margin-left: 0 !important; + } + } + .form{ + .el-form-item{ + display: flex !important; + } + /deep/ .el-form-item__content{ + width: 100%; + margin-left: 0 !important; + } + } + + .numInput{ + /deep/ .el-input__inner{ + padding-right: 0; + } + } +</style> diff --git a/src/views/monitorAlert/preWarning/index.vue b/src/views/monitorAlert/preWarning/index.vue new file mode 100644 index 0000000..edd5c2c --- /dev/null +++ b/src/views/monitorAlert/preWarning/index.vue @@ -0,0 +1,272 @@ +<template> + <div class="app-container"> + <div class="filter-container"> + <div style="display: block;"> + <div class="basic_search" style="padding-top: 10px;"> + <span>按时间查询:</span> + <el-date-picker + value-format="yyyy-MM-dd HH:mm:ss" + v-model="validTime" + type="daterange" + :default-time="['00:00:00','23:59:59']" + range-separator="-" + start-placeholder="开始日期" + end-placeholder="结束日期" + > + </el-date-picker> + </div> + <div class="basic_search" style="margin-right: 10px;padding-top: 10px"> + <span>推送状态:</span> + <el-select v-model="listQuery.filter.pushType" clearable filterable> + <el-option key="0" label="未下发" :value="0"></el-option> + <el-option key="1" label="已下发" :value="1"></el-option> + <el-option key="2" label="已反馈" :value="2"></el-option> + </el-select> + </div> + <div class="basic_search"> + <span>区域:</span> + <el-select v-model="listQuery.filter.provinceCode" clearable filterable @change="changeArea('province')"> + <el-option + v-for="item in provinceList" + :key="item.id" + :label="item.name" + :value="item.code" + > + </el-option> + </el-select> + </div> + <div class="basic_search"> + <el-select v-model="listQuery.filter.cityCode" prop="city" clearable filterable @change="changeArea('city')"> + <el-option + v-for="item in cityList" + :key="item.id" + :label="item.name" + :value="item.code" + > + </el-option> + </el-select> + </div> + <div class="basic_search"> + <el-select v-model="listQuery.filter.areaCode" clearable filterable> + <el-option + v-for="item in districtList" + :key="item.id" + :label="item.name" + :value="item.code" + > + </el-option> + </el-select> + </div> + <div class="basic_search" style="margin-right: 10px;padding-top: 10px"> + <span>企业名称:</span> + <el-input v-model.trim="listQuery.filter.companyName" style="width: 300px"/> + </div> + <div class="basic_search" style="margin-right: 10px"> + <el-button style="margin-left: 10px;" type="primary" @click="reset()">重置</el-button> + <el-button style="margin-left: 10px;" type="primary" icon="el-icon-search" @click="search()">查询</el-button> + </div> + </div> + </div> + <div class="table_content"> + <el-table + v-loading="listLoading" + :key="tableKey" + :data="dataList" + border + fit + highlight-current-row + style="width: 100%;" + > + <el-table-column label="序号" type="index" align="center"></el-table-column> + <el-table-column label="企业名称" prop="companyName" align="center"></el-table-column> + <el-table-column label="市(地、州)" prop=cityName"" align="center"></el-table-column> + <el-table-column label="区县" prop="areaName" align="center"></el-table-column> + <el-table-column label="风险等级" prop="riskLevel" align="center"></el-table-column> + <el-table-column label="推送状态" prop="pushType" align="center"> + <template slot-scope="scope"> + {{ scope.row.pushType == 0?'未下发':scope.row.pushType == 1?'已下发':'已反馈' }} + </template> + </el-table-column> + <el-table-column label="推送内容" prop="pushContent" align="center"></el-table-column> + <el-table-column label="反馈意见" prop="feedback" align="center"></el-table-column> + <el-table-column label="创建时间" prop="createDate" align="center"></el-table-column> + <el-table-column label="创建人" prop="createBy" align="center"></el-table-column> + <el-table-column label="更新时间" prop="updateDate" align="center"></el-table-column> + <el-table-column label="更新人" prop="updateBy" align="center"></el-table-column> +<!-- <el-table-column label="操作" align="center" width="120" class-name="small-padding fixed-width" fixed="right">--> +<!-- <template slot-scope="scope">--> +<!-- <el-button type="text" @click="handleBack(scope.row)">提交反馈</el-button>--> +<!-- <el-button type="text" @click="deleteData(scope.row)">标记删除</el-button>--> +<!-- </template>--> +<!-- </el-table-column>--> + </el-table> + <br> + <div style="display: flex;justify-content: right"> + <el-pagination + v-show="recordTotal>0" + :current-page="currentPage" + :page-sizes="[10, 20, 30, 50]" + :page-size="listQuery.pageSize" + :total="recordTotal" + layout="total, sizes, prev, pager, next, jumper" + background + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> + </div> + <pre-warning-dialog ref="preWarningRef"></pre-warning-dialog> + </div> + </div> +</template> + +<script> +import {computePageCount} from "../../../utils"; +import {regionPifaBox} from "../../../api/stock" +import preWarningDialog from "./components/preWarningDialog" +import {getCityListData, getProvinceListData} from "../../../api/area"; +import {getEarlyPush, getOriginalAlarm} from "../../../api/monitorAlert"; + +export default { + name: "preWarning", + components: { preWarningDialog }, + data() { + return { + tableKey: '', + recordTotal: 0, + currentPage: 1, + validTime: [], + areaListQuery: {}, + provinceList: [], + cityList: [], + districtList: [], + listLoading: false, + dataList: [], + listQuery: { + filter:{ + createDateStart: '', + createDateEnd: '', + pushType: null, + companyCode: '', + companyName: '', + provinceCode: '', + cityCode: '', + areaCode: '' + }, + pageIndex:1, + pageSize:10 + }, + } + }, + created() { + this.getProvince() + this.getDataList() + }, + mounted() { + }, + watch: {}, + methods: { + openDialog(type,data){ + this.$refs.preWarningRef.open(type,data) + }, + handleBack(){ + + }, + deleteData(data){ + + }, + async getProvince(){ + let res = await getProvinceListData() + if(res.data.code === "200"){ + this.provinceList = res.data.result.provinceList + } + },//获取省 + async changeArea(value){ + if(value === 'province'){ + this.listQuery.filter.cityCode = '' + this.listQuery.filter.areaCode = '' + this.areaListQuery = { + type: 2, + parenttype: 1, + parentname: this.provinceList.find(i=>i.code == this.listQuery.filter.provinceCode).name + } + let res = await getCityListData(this.areaListQuery) + if(res.data.code === "200"){ + this.cityList = res.data.result + } + }else{ + this.listQuery.filter.areaCode = '' + this.areaListQuery = { + type: 3, + parenttype: 2, + parentname:this.cityList.find(i=>i.code == this.listQuery.filter.cityCode).name + } + let res = await getCityListData(this.areaListQuery) + if(res.data.code === "200"){ + this.districtList = res.data.result + } + } + },//市、镇、街道、委员会 + async getDataList() { + if(this.validTime.length>0){ + this.listQuery.filter.createDateStart = this.validTime[0] + this.listQuery.filter.createDateEnd = this.validTime[1] + } + let res = await getEarlyPush(this.listQuery) + if (res.data.code === "200") { + const data = res.data.result + if(Array.isArray(data.records)){ + this.dataList = data.records + this.recordTotal = data.total + this.currentPage = data.current + }else{ + this.dataList = [] + } + } else { + this.$message({ + type: 'warning', + message: res.data.message + }) + } + this.listLoading = false + }, + handleSizeChange: function(val) { + this.listQuery.pageSize = val + this.getDataList() + }, + handleCurrentChange: function(val) { + this.listQuery.pageIndex = val + this.getDataList() + }, + reset(){ + this.listQuery = { + filter:{ + createDateStart: '', + createDateEnd: '', + pushType: null, + companyCode: '', + companyName: '', + provinceCode: '', + cityCode: '', + areaCode: '' + }, + pageIndex:1, + pageSize:10 + } + this.validTime = [] + this.cityList= [] + this.districtList= [] + this.getDataList() + }, + search(){ + this.listQuery.pageIndex = 1 + this.getDataList() + } + }, +} +</script> + +<style scoped> +.basic_search { + display: inline-block; +} +</style> diff --git a/src/views/monitorAlert/storeAreaManage/components/addStock.vue b/src/views/monitorAlert/storeAreaManage/components/addStock.vue new file mode 100644 index 0000000..f757638 --- /dev/null +++ b/src/views/monitorAlert/storeAreaManage/components/addStock.vue @@ -0,0 +1,216 @@ +<template> + <el-dialog :visible.sync="dialogVisible" :close-on-click-modal="false" :title="dialogTitle" center + width="75%" @close="reset()"> + <el-form ref="dataForm" :rules="dataFormRules" :model="dataForm" label-position="right" label-width="150px" element-loading-text="保存中..."> + <div class="part-title"> + <span>库区基本信息填写</span> + </div> + <el-divider></el-divider> + <div> + <el-row :gutter="20"> + <el-col :span="12"> + <el-form-item label="仓库名称:" prop="storeName" > + <el-input v-model.trim="dataForm.storeName" :readonly="isDisabled"/> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="仓库面积:" prop="acreage" class="numInput"> + <el-input type="number" v-model.number="dataForm.acreage" :readonly="isDisabled"><template slot="append">㎡</template></el-input> + </el-form-item> + </el-col> + </el-row> + + <el-row :gutter="20"> + <el-col :span="12"> + <el-form-item label="仓库编号:" prop="storeNum" > + <el-input v-model.trim="dataForm.storeNum" :readonly="isDisabled"/> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="核药量:" prop="dosage" class="numInput"> + <el-input type="number" v-model.number="dataForm.dosage" :readonly="isDisabled"><template slot="append">kg</template></el-input> + </el-form-item> + </el-col> + </el-row> + + <el-row :gutter="20"> + <el-col :span="12"> + <el-form-item label="危险等级:" prop="dangerLevel" > + <el-input v-model.trim="dataForm.dangerLevel" :readonly="isDisabled"/> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="核定人员:" prop="personLimit" class="numInput"> + <el-input type="number" v-model.number="dataForm.personLimit" :readonly="isDisabled"></el-input> + </el-form-item> + </el-col> + </el-row> + + </div> + <div class="part-title"> + <span>库房列表</span> + </div> + <el-divider></el-divider> + <el-table + :data="storeList" + border + :stripe="false" + style="width: 100%;" + > + <el-table-column label="序号" type="index" align="center"></el-table-column> + <el-table-column label="库房名称" prop="storeroomName" align="center"></el-table-column> + <el-table-column label="库房编号" prop="storeroomNum" align="center"></el-table-column> + <el-table-column label="面积/㎡" prop="acreage" align="center"></el-table-column> + <el-table-column label="危险等级" prop="dangerLevel" align="center"> + <template slot-scope="scope"> + {{ scope.row.dangerLevel == '1'?'1.1级库房':scope.row.dangerLevel == '2'?'1.3级库房': '无药库房'}} + </template> + </el-table-column> + <el-table-column label="核定药量/kg" prop="dosage" align="center"></el-table-column> + <el-table-column label="核定人员" prop="personLimit" align="center"></el-table-column> + <el-table-column label="操作" align="center" width="120" class-name="small-padding fixed-width" + fixed="right"> + <template slot-scope="scope"> + <el-button type="text" @click="openDevice(scope.row)">绑定设备</el-button> + </template> + </el-table-column> + </el-table> + </el-form> + <br> + <span slot="footer" class="dialog-footer"> + <el-button type="primary" @click="dialogVisible = false">关 闭</el-button> + </span> + <device-dialog ref="deviceRef"></device-dialog> + </el-dialog> + +</template> + +<script> + import {mapGetters} from "vuex"; + import {getCityListData, getProvinceListData} from "../../../../api/area"; + import Cookies from 'js-cookie' + import {MessageBox} from "_element-ui@2.14.1@element-ui"; + import {getStoreroomPage, getStoreroomPageV2} from "../../../../api/monitorAlert"; + import deviceDialog from "./deviceDialog"; + export default { + name: "addStock", + components: {deviceDialog}, + data() { + return { + dialogVisible: false, + dialogTitle: '新增库区', + dataForm: {}, + storeList: [], + dataFormRules:{ + reserveName:[{ required: true, message: '请填写库区名称', trigger: 'blur' }], + province:[{ required: true, message: '请选择所在区划', trigger: 'blur' }], + city:[{ required: true, message: '请选择所在区划', trigger: 'blur' }], + area:[{ required: true, message: '请选择所在区划', trigger: 'blur' }], + reserveAddress:[{ required: true, message: '请填写库区地址', trigger: 'blur' }], + square:[{ required: true, message: '请填写库区总面积', trigger: 'blur' }], + effectiveStorageSquare:[{ required: true, message: '请填写库区有效仓储面积', trigger: 'blur' }], + approvedReserves:[{ required: true, message: '请填写库区核定储量', trigger: 'blur' }], + nuclearDose:[{ required: true, message: '请填写库区核药量', trigger: 'blur' }] + }, + isDisabled: false + } + }, + created() { + const t = this + }, + computed: { + ...mapGetters([ + 'userType', + 'username' + ]) + }, + methods: { + open(data){ + this.dialogTitle = '查看仓库' + this.dataForm = data + this.getDataList(data.companyCode,data.storeNum) + this.isDisabled = true + this.dialogVisible = true + }, + isKey(key,obj){ + return key in obj + }, + async getDataList(companyCode,storeNum) { + let res = await getStoreroomPage({ + filter:{ + provinceCode: '', + companyCode: companyCode, + storeNum: storeNum, + companyName: '' + }, + pageIndex:1, + pageSize:9999 + }) + if (res.data.code === "200") { + const data = res.data.result + if(Array.isArray(data.records)){ + this.storeList = data.records + }else{ + this.dataList = [] + } + } else { + this.$message({ + type: 'warning', + message: res.data.message + }) + } + }, + reset(){ + this.$refs.dataForm.resetFields() + this.$refs.dataForm.clearValidate() + this.$emit('refresh') + }, + openDevice(data){ + this.$refs.deviceRef.open(data) + } + } + } +</script> + +<style lang="scss" scoped> + .part-title{ + font-size: 16px; + font-weight: bolder; + } + .selector{ + /deep/ .el-form-item__content{ + margin-left: 0 !important; + } + } + .editForm{ + .el-form-item{ + display: flex !important; + } + /deep/ .el-form-item__content{ + width: 100%; + margin-left: 0 !important; + } + } + + .numInput{ + /deep/ .el-input__inner{ + padding-right: 0; + } + } + tr{ + display: flex; + td{ + flex: 1; + display: flex; + justify-content: center; + padding: 5px; + align-items: center; + } + .w-12{ + flex: 0.5; + } + .w-20{ + flex: 2; + } + } +</style> diff --git a/src/views/monitorAlert/storeAreaManage/components/deviceDialog.vue b/src/views/monitorAlert/storeAreaManage/components/deviceDialog.vue new file mode 100644 index 0000000..0e84d12 --- /dev/null +++ b/src/views/monitorAlert/storeAreaManage/components/deviceDialog.vue @@ -0,0 +1,248 @@ +<template> + <el-dialog :visible.sync="dialogVisible" append-to-body :close-on-click-modal="false" title="设备管理" center width="75%"> + <el-button type="primary" style="margin-bottom: 20px" @click="openAdd('新增设备',{})">绑定设备</el-button> + <el-table + :data="deviceList" + border + :stripe="false" + style="width: 100%;" + > + <el-table-column label="序号" type="index" align="center"></el-table-column> + <el-table-column label="设备名称" prop="deviceName" align="center"></el-table-column> + <el-table-column label="设备ID" prop="deviceId" align="center"></el-table-column> + <el-table-column label="设备类型" prop="deviceId" align="center"> + <template slot-scope="scope"> + {{scope.row.deviceType == 1?'温湿度':'摄像头'}} + </template> + </el-table-column> + <el-table-column label="分组ID" prop="groupId" align="center"></el-table-column> + <el-table-column label="操作" align="center" width="180" class-name="small-padding fixed-width"> + <template slot-scope="scope"> + <el-button type="text" @click="openAdd('修改设备',scope.row)">修改</el-button> + <el-button type="text" style="color: red" @click="delDevice(scope.row)">删除</el-button> + </template> + </el-table-column> + </el-table> + <span slot="footer" class="dialog-footer"> + <el-button type="primary" @click="dialogVisible = false">关 闭</el-button> + </span> + <el-dialog :visible.sync="addVisible" append-to-body :close-on-click-modal="false" :title="title" center width="50%" @close="reset()"> + <el-form ref="form" :rules="formRules" :model="deviceForm" label-width="140px" class="form"> + <el-form-item label="设备名称:" prop="deviceName"> + <el-input v-model.trim="deviceForm.deviceName"/> + </el-form-item> + <el-form-item label="设备ID:" prop="deviceId"> + <el-input v-model.trim="deviceForm.deviceId"/> + </el-form-item> + <el-form-item label="类型:" prop="deviceType"> + <el-select v-model="deviceForm.deviceType" placeholder="请选择类型"> + <el-option key="1" label="温湿度" :value="1"></el-option> + <el-option key="2" label="摄像头" :value="2"></el-option> + </el-select> + </el-form-item> + <el-form-item label="分组ID:" prop="groupId"> + <el-input v-model.trim="deviceForm.groupId"/> + </el-form-item> + </el-form> + <span slot="footer" class="dialog-footer"> + <el-button @click="addVisible = false">取 消</el-button> + <el-button type="primary" @click="confirm()">确 认</el-button> + </span> + </el-dialog> + </el-dialog> +</template> + +<script> + import {mapGetters} from "vuex"; + import {getCityListData, getProvinceListData} from "../../../../api/area"; + // import {saveReserveInfo, getInfoById, editReserveInfo, delStore} from '../../../api/warehouse' + import Cookies from 'js-cookie' + import {MessageBox} from "_element-ui@2.14.1@element-ui"; + import { + addOrUpdateStoreroomDevice, deleteStoreroomDevice, + getDeviceList, + getDevicePageList, + getStoreroomPage, + getStoreroomPageV2 + } from "../../../../api/monitorAlert"; + export default { + name: "deviceDialog", + data() { + return { + dialogVisible: false, + title: '', + addVisible: false, + deviceQuery: { + companyCode: '', + storeNum: '', + storeroomNum: '', + }, + deviceList: [], + deviceForm: { + id: '', + companyCode: '', + deviceId: '', + deviceName: '', + deviceType: null, + groupId: '', + storeNum: '', + storeroomNum: '' + }, + formRules:{ + deviceName:[{ required: true, message: '请输入设备名称', trigger: 'change' },], + deviceId:[{ required: true, message: '请输入设备id', trigger: 'change' },], + deviceType:[{ required: true, message: '请输入设备类型', trigger: 'change' },], + groupId:[{ required: true, message: '请输入分组id', trigger: 'change' },] + } + } + }, + created() { + const t = this + }, + computed: { + ...mapGetters([ + 'userType', + 'username' + ]) + }, + methods: { + open(data){ + const {companyCode,storeNum,storeroomNum} = data + this.deviceQuery = {companyCode,storeNum,storeroomNum} + this.getDataList() + this.dialogVisible = true + }, + isKey(key,obj){ + return key in obj + }, + async getDataList() { + let res = await getDeviceList({ + filter: this.deviceQuery + }) + if (res.data.code === "200") { + if(Array.isArray(res.data.result)){ + this.deviceList = res.data.result + }else{ + this.dataList = [] + } + } else { + this.$message({ + type: 'warning', + message: res.data.message + }) + } + this.listLoading = false + }, + + openAdd(type,data){ + this.addVisible = true + this.title = type + this.deviceForm.companyCode = this.deviceQuery.companyCode + this.deviceForm.storeNum = this.deviceQuery.storeNum + this.deviceForm.storeroomNum = this.deviceQuery.storeroomNum + + console.log(data,'data') + if(type == '修改设备'){ + for(let i in this.deviceForm){ + if(this.isKey(i,data)){ + this.deviceForm[i] =data[i] + } + } + } + }, + + confirm(){ + this.$refs.form.validate(async (valid) => { + if (valid) { + const {id,...data} = this.deviceForm + const res = await addOrUpdateStoreroomDevice(this.title == '新增设备'?data:this.deviceForm) + if(res.data.code == 200){ + if(this.title == '新增设备'){ + this.$message.success('设备新增成功') + }else{ + this.$message.success('设备修改成功') + } + }else{ + this.$message.warning(res.data.message) + } + this.addVisible = false + await this.getDataList() + } + }) + }, + delDevice(data){ + const t = this + t.$confirm('此操作将删除该设备, 是否继续?', '提示', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning' + }).then(async () => { + const res = await deleteStoreroomDevice({id: data.id}) + console.log(res,'res') + if(res.data.code == 200){ + t.$message.success('设备删除成功') + }else{ + t.$message.warning(res.data.message) + } + await this.getDataList() + }) + }, + reset(){ + this.deviceForm={ + id: '', + companyCode: '', + deviceId: '', + deviceName: '', + deviceType: null, + groupId: '', + storeNum: '', + storeroomNum: '' + } + this.$refs.form.clearValidate() + } + } + } +</script> + +<style lang="scss" scoped> + .part-title{ + font-size: 16px; + font-weight: bolder; + } + .selector{ + /deep/ .el-form-item__content{ + margin-left: 0 !important; + } + } + .editForm{ + .el-form-item{ + display: flex !important; + } + /deep/ .el-form-item__content{ + width: 100%; + margin-left: 0 !important; + } + } + + .numInput{ + /deep/ .el-input__inner{ + padding-right: 0; + } + } + tr{ + display: flex; + td{ + flex: 1; + display: flex; + justify-content: center; + padding: 5px; + align-items: center; + } + .w-12{ + flex: 0.5; + } + .w-20{ + flex: 2; + } + } +</style> diff --git a/src/views/monitorAlert/storeAreaManage/index.vue b/src/views/monitorAlert/storeAreaManage/index.vue new file mode 100644 index 0000000..d944ef0 --- /dev/null +++ b/src/views/monitorAlert/storeAreaManage/index.vue @@ -0,0 +1,277 @@ +<template> + <div class="app-container"> + <div class="filter-container"> + <div class="basic_search"> + <span>区域:</span> + <el-select v-model="listQuery.filter.provinceCode" clearable filterable + @change="changeArea('province')"> + <el-option + v-for="item in provinceList" + :key="item.id" + :label="item.name" + :value="item.code" + > + </el-option> + </el-select> + </div> + <div class="basic_search"> + <el-select v-model="listQuery.filter.cityCode" prop="city" clearable filterable + @change="changeArea('city')"> + <el-option + v-for="item in cityList" + :key="item.id" + :label="item.name" + :value="item.code" + > + </el-option> + </el-select> + </div> + <div class="basic_search"> + <el-select v-model="listQuery.filter.areaCode" clearable filterable> + <el-option + v-for="item in districtList" + :key="item.id" + :label="item.name" + :value="item.code" + > + </el-option> + </el-select> + </div> + <div class="basic_search" style="margin-right: 10px;padding-top: 10px"> + <span>企业名称:</span> + <el-input v-model.trim="listQuery.filter.companyName" style="width: 300px"/> + </div> + <div class="basic_search" style="margin-right: 10px"> + <el-button style="margin-left: 10px;" type="primary" @click="reset()">重置</el-button> + <el-button style="margin-left: 10px;" type="primary" icon="el-icon-search" @click="search()">查询 + </el-button> + </div> + </div> + <div class="table_content"> + <el-table + v-loading="listLoading" + :data="dataList" + border + :stripe="false" + style="width: 100%;" + > + <el-table-column label="行政区划" align="center"> + <template slot-scope="scope"> + {{ scope.row.provinceName}} + </template> + </el-table-column> + <el-table-column label="企业名称" prop="companyName" align="center"></el-table-column> + <el-table-column label="仓库名称" prop="storeName" align="center"></el-table-column> + <el-table-column label="仓库编号" prop="storeNum" align="center"></el-table-column> + <el-table-column label="面积/㎡" prop="acreage" align="center"></el-table-column> + <el-table-column label="危险等级" prop="dangerLevel" align="center"> + <template slot-scope="scope"> + {{ scope.row.dangerLevel == '1'?'1.1级库房':scope.row.dangerLevel == '2'?'1.3级库房': '无药库房'}} + </template> + </el-table-column> + <el-table-column label="核定药量/kg" prop="dosage" align="center"></el-table-column> + <el-table-column label="核定人员" prop="personLimit" align="center"></el-table-column> + <el-table-column label="创建人" prop="createBy" align="center"></el-table-column> + <el-table-column label="修改人" prop="updateBy" align="center"></el-table-column> + <el-table-column label="创建时间" prop="createDate" align="center"></el-table-column> + <el-table-column label="修改时间" prop="updateDate" align="center"></el-table-column> + <el-table-column label="操作" align="center" width="120" class-name="small-padding fixed-width" + fixed="right"> + <template slot-scope="scope"> + <el-button type="text" @click="openStock(scope.row)">查看</el-button> + </template> + </el-table-column> + </el-table> + <br> + <div style="display: flex;justify-content: right"> + <el-pagination + v-show="recordTotal>0" + :current-page="currentPage" + :page-sizes="[10, 20, 30, 50]" + :page-size="listQuery.pageSize" + :total="recordTotal" + layout="total, sizes, prev, pager, next, jumper" + background + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> + </div> + <add-stock ref="addStock"></add-stock> + </div> + </div> +</template> + +<script> +import {computePageCount} from "../../../utils"; +import addStock from "./components/addStock" +// import deliverUsage from "./components/deliverUsage" +// import stockRecords from "./components/stockRecords" +// import editStock from "./components/editStock" +// import enterpriseStock from "./components/enterpriseStock" +import Cookies from "js-cookie" +import {getOriginalPerson, getStorePageList} from "../../../api/monitorAlert"; +import {getCityListData, getProvinceListData} from "../../../api/area"; + +export default { + name: "stockManage", + components: {addStock}, + data() { + return { + tableKey: '', + recordTotal: 0, + currentPage: 1, + provinceList: [], + cityList: [], + districtList: [], + areaListQuery: {}, + Cookies: Cookies, + listLoading: false, + dataList: [], + isAdmin: false, + listQuery: { + filter: { + companyCode: '', + companyName: '', + provinceCode: '', + cityCode: '', + areaCode: '' + }, + pageIndex: 1, + pageSize: 10 + } + } + }, + created() { + const t = this + t.getDataList() + t.getProvince() + const roles = JSON.parse(Cookies.get('roles')) + if (roles.find(i => i.name == '管理员' || i.name == '监管部门')) { + this.isAdmin = true + } else { + this.isAdmin = false + } + }, + mounted() { + }, + watch: {}, + methods: { + handleSizeChange: function (val) { + this.listQuery.pageSize = val + this.getDataList() + }, + handleCurrentChange: function (val) { + this.listQuery.pageIndex = val + this.getDataList() + }, + reset() { + this.listQuery = { + filter: { + companyCode: '', + companyName: '', + provinceCode: '', + cityCode: '', + areaCode: '' + }, + pageIndex: 1, + pageSize: 10 + } + this.cityList = [] + this.districtList = [] + this.getDataList() + }, + search() { + this.listQuery.pageIndex = 1 + this.getDataList() + }, + async getProvince() { + let res = await getProvinceListData() + if (res.data.code === "200") { + this.provinceList = res.data.result.provinceList + } + },//获取省 + async changeArea(value) { + if (value === 'province') { + this.listQuery.filter.cityCode = '' + this.listQuery.filter.areaCode = '' + this.areaListQuery = { + type: 2, + parenttype: 1, + parentname: this.provinceList.find(i => i.code == this.listQuery.filter.provinceCode).name + } + let res = await getCityListData(this.areaListQuery) + if (res.data.code === "200") { + this.cityList = res.data.result + } + } else { + this.listQuery.filter.areaCode = '' + this.areaListQuery = { + type: 3, + parenttype: 2, + parentname: this.cityList.find(i => i.code == this.listQuery.filter.cityCode).name + } + let res = await getCityListData(this.areaListQuery) + if (res.data.code === "200") { + this.districtList = res.data.result + } + } + },//市、镇、街道、委员会 + async getDataList() { + const res = await getStorePageList(this.listQuery) + if (res.data.code === "200") { + const data = res.data.result + if (Array.isArray(data.records)) { + this.dataList = data.records + this.recordTotal = data.total + this.currentPage = data.current + } else { + this.dataList = [] + } + } else { + this.$message({ + type: 'warning', + message: res.data.message + }) + } + this.listLoading = false + }, + + openStock(data) { + const t = this + t.$refs.addStock.open(data) + }, + openRecord(row) { + const t = this + t.$refs.stockRecords.open(row) + }, + showEnterprises(row) { + const t = this + t.$refs.enterStock.open(row, '管理') + }, + deliverUsage(row) { + const t = this + t.$refs.deliverUsage.open(row) + }, + + stockEdit(row) { + const t = this + t.$refs.editStock.open(row) + + } + }, +} +</script> +<style> +.el-table .hovered-row { + background: #f5f7fa; +} +</style> +<style scoped> +.basic_search { + display: inline-block; +} + +/deep/ .el-table .el-table__body-wrapper table tr:nth-child(2n) td { + background: #fff !important; +} +</style> diff --git a/src/views/monitorAlert/temperatureHumidity/components/thDialog.vue b/src/views/monitorAlert/temperatureHumidity/components/thDialog.vue new file mode 100644 index 0000000..3c38085 --- /dev/null +++ b/src/views/monitorAlert/temperatureHumidity/components/thDialog.vue @@ -0,0 +1,205 @@ +<template> + <el-dialog :visible.sync="editDialogVisible" :modal-append-to-body="false" :close-on-click-modal="false" :title="title+'历史记录'" center width="75%"> + <div style="display: flex"> + <div class="basic_search"> + <span>按时间查询:</span> + <el-date-picker + value-format="yyyy-MM-dd HH:mm:ss" + v-model="validTime" + type="daterange" + :default-time="['00:00:00','23:59:59']" + range-separator="-" + start-placeholder="开始日期" + end-placeholder="结束日期" + > + </el-date-picker> + </div> + <div class="basic_search" style="margin: 0 10px"> + <span>状态:</span> + <el-select v-model="listQuery.filter.deviceWarning" clearable filterable> + <el-option key="1" label="正常" :value="0"></el-option> + <el-option key="2" label="异常" :value="1"></el-option> + </el-select> + </div> + <div class="basic_search"> + <el-button style="margin-left: 10px;" type="primary" @click="reset()">重置</el-button> + <el-button style="margin-left: 10px;" type="primary" icon="el-icon-search" @click="search()">查询</el-button> + </div> + </div> + <br/> + <div class="table_content"> + <el-table + :key="tableKey" + :data="dataList" + border + fit + highlight-current-row + style="width: 100%;" + > + <el-table-column label="浓度值" prop="realValue" align="center"> + <template slot-scope="scope"> + <span v-if="title == '温度'">{{scope.row.realValue}}℃</span> + <span v-else>{{scope.row.realValue}}%RH</span> + </template> + </el-table-column> + <el-table-column label="状态" prop="deviceWarning" align="center"> + <template slot-scope="scope"> + <el-tag type="success" v-if="scope.row.deviceWarning == 0">正常</el-tag> + <el-tag type="danger" v-else>异常</el-tag> + </template> + </el-table-column> + <el-table-column label="时间" align="center"> + <template slot-scope="scope"> + {{scope.row.syncTime?scope.row.syncTime:scope.row.createDate }} + </template> + </el-table-column> + </el-table> + <br/> + <div style="display: flex;justify-content: right"> + <el-pagination + v-show="recordTotal>0" + :current-page="currentPage" + :page-sizes="[10, 20, 30, 50]" + :page-size="listQuery.pageSize" + :total="recordTotal" + layout="total, sizes, prev, pager, next, jumper" + background + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> + </div> + </div> + <span slot="footer" class="dialog-footer"> + <el-button type="primary" @click="editDialogVisible = false">确 认</el-button> + </span> + </el-dialog> +</template> + +<script> + import {updateStorehouseData} from "../../../../api/warehouse"; + import {getHumidityPage, getOriginalPerson, getTemperaturePage} from "../../../../api/monitorAlert"; + + export default { + name: "thDialog", + data() { + return { + editDialogVisible: false, + title: '', + tableKey: '', + recordTotal: 0, + currentPage: 1, + dataList: [], + validTime: [], + listQuery: { + filter:{ + deviceId: null, + deviceWarning: null, + createDateStart: '', + createDateEnd: '' + }, + pageIndex:1, + pageSize:10 + } + } + }, + created() { + const t = this + }, + methods: { + open(type,data){ + this.editDialogVisible = true + this.dataList = [] + this.listQuery.filter.deviceId = data.deviceId + this.title = type + this.getDataList() + }, + async getDataList() { + this.listQuery.filter.createDateStart = this.validTime[0]?this.validTime[0]:'' + this.listQuery.filter.createDateEnd = this.validTime[1]?this.validTime[1]:'' + if(this.title == '温度'){ + getTemperaturePage(this.listQuery).then((res)=>{ + if(res.data.code == "200"){ + const data = res.data.result + if(Array.isArray(data.records)){ + this.dataList = data.records + this.recordTotal = data.total + this.currentPage = data.current + }else{ + this.dataList = [] + } + }else{ + this.$message({ + type: 'warning', + message: res.data.message + }) + } + }) + }else{ + getHumidityPage(this.listQuery).then((res)=>{ + if(res.data.code == "200"){ + const data = res.data.result + if(Array.isArray(data.records)){ + this.dataList = data.records + }else{ + this.dataList = [] + } + }else{ + this.$message({ + type: 'warning', + message: res.data.message + }) + } + }) + } + }, + handleSizeChange: function(val) { + this.listQuery.pageSize = val + this.getDataList() + }, + handleCurrentChange: function(val) { + this.listQuery.pageIndex = val + this.getDataList() + }, + reset(){ + this.listQuery.filter.deviceWarning = null + this.listQuery.filter.createDateStart = '' + this.listQuery.filter.createDateEnd = '' + this.validTime = [] + this.listQuery.pageIndex = 1 + this.listQuery.pageSize = 10 + this.getDataList() + }, + search(){ + this.listQuery.pageIndex = 1 + this.getDataList() + } + } + } +</script> + +<style lang="scss" scoped> + .part-title{ + font-size: 16px; + font-weight: bolder; + } + .selector{ + /deep/ .el-form-item__content{ + margin-left: 0 !important; + } + } + .form{ + .el-form-item{ + display: flex !important; + } + /deep/ .el-form-item__content{ + width: 100%; + margin-left: 0 !important; + } + } + + .numInput{ + /deep/ .el-input__inner{ + padding-right: 0; + } + } +</style> diff --git a/src/views/monitorAlert/temperatureHumidity/index.vue b/src/views/monitorAlert/temperatureHumidity/index.vue new file mode 100644 index 0000000..b8f6184 --- /dev/null +++ b/src/views/monitorAlert/temperatureHumidity/index.vue @@ -0,0 +1,305 @@ +<template> + <div class="app-container"> + <div class="filter-container"> + <div> + <div class="basic_search"> + <span>企业名称:</span> + <el-input v-model.trim="listQuery.filter.companyName" style="width: 300px"/> + </div> + <div class="basic_search"> + <el-button style="margin-left: 10px;" type="primary" @click="reset()">重置</el-button> + <el-button style="margin-left: 10px;" type="primary" icon="el-icon-search" @click="search()">查询</el-button> + </div> + </div> + </div> + <br/> + <div class="table_content"> + <el-tree :data="dataTree" highlight-current class="left-tree" :props="defaultProps" @node-click="handleNodeClick"></el-tree> + <div class="cardList" v-if="deviceList.length>0"> + <div class="card-item" v-for="(item,index) in deviceList" :key="index"> + <div class="itemTitle"> + {{item.storeName}}-{{item.storeroomName}}-{{item.deviceName }} + </div> + <div class="cont"> + <img :src="deviceItem"> + <div class="rightCont"> + <div class="rightItem"> + <span>温度: {{item.temperatureValue }}℃</span> + <el-button size="mini" plain type="primary" @click="openHistory('温度',item)">历史数据</el-button> + </div> + <div class="rightItem"> + <span>湿度: {{item.humidityValue }}%RH</span> + <el-button size="mini" plain type="primary" @click="openHistory('湿度',item)">历史数据</el-button> + </div> + </div> + </div> + + </div> + </div> + <div class="cardList" v-else> + <div style="color: #999;padding-top: 15px;padding-left: 20px">暂无设备信息...</div> + </div> + <th-dialog ref="thRef"></th-dialog> + </div> + </div> +</template> + +<script> +import thDialog from "./components/thDialog" +import { + getDeviceList, + getDevicePageList, + getOriginalPerson, + getStorePageList, + getStoreroomPageV2 +} from "../../../api/monitorAlert"; +import deviceItem from "../../../assets/deviceItem.png" + +export default { + name: "temperatureHumidity", + components: { thDialog }, + data() { + return { + deviceItem: deviceItem, + tableKey: '', + listLoading: false, + dataList: [], + dataTree: [], + listQuery: { + filter:{ + companyName: '' + }, + pageIndex:1, + pageSize:9999 + }, + defaultProps: { + children: 'children', + label: 'name' + }, + deviceQuery: { + filter:{ + companyCode: '', + storeNum: '', + storeroomNum: '', + deviceType: 1 + } + }, + deviceList: [] + } + }, + created() { + this.getDataList() + this.getDeviceList() + }, + mounted() { + }, + watch: {}, + methods: { + openHistory(type,data){ + this.$refs.thRef.open(type,data) + }, + deleteData(data){ + + }, + handleNodeClick(data) { + this.deviceQuery.filter = { + companyCode: '', + storeNum: '', + storeroomNum: '', + deviceType: 1 + } + if(data.type == 1){ + this.deviceQuery.filter.companyCode = data.code + this.getDeviceList() + }else if(data.type == 2){ + this.deviceQuery.filter.storeNum = data.code + this.getDeviceList() + }else{ + this.deviceQuery.filter.storeroomNum = data.code + this.getDeviceList() + } + }, + async getDataList() { + let res = await getStoreroomPageV2(this.listQuery) + if (res.data.code === "200") { + const data = res.data.result + if(Array.isArray(data.records)){ + this.dataList = data.records + if(data.records.length>0){ + this.dataTree = this.transformToTree(data.records) + }else{ + this.dataTree = [] + } + }else{ + this.dataList = [] + this.dataTree = [] + } + } else { + this.$message({ + type: 'warning', + message: res.data.message + }) + } + this.listLoading = false + }, + + async getDeviceList(){ + let res = await getDeviceList(this.deviceQuery) + if (res.data.code === "200"){ + this.deviceList = res.data.result + }else{ + this.$message({ + type: 'warning', + message: res.data.message + }) + } + }, + + transformToTree(data) { + const tree = []; + const companyMap = new Map() + data.forEach(item => { + const companyKey = item.companyCode; + let companyNode = companyMap.get(companyKey); + if (!companyNode) { + companyNode = { + id: item.companyCode, + code: item.companyCode, + name: item.companyName, + children: [], + type: 1 + }; + companyMap.set(companyKey, companyNode); + tree.push(companyNode); + } + const storeKey = `${companyKey}-${item.storeName}`; + let storeNode = companyNode.children.find(child => child.name === item.storeName); + if (!storeNode) { + storeNode = { + id: storeKey, + code: item.storeNum, + name: item.storeName, + children: [], + type: 2 + }; + companyNode.children.push(storeNode); + } + + const storeroomKey = `${storeKey}-${item.storeroomNum}`; + let storeroomNode = storeNode.children.find(child => child.code === item.storeroomNum); + if (!storeroomNode) { + storeroomNode = { + ...item, // 保留原始数据 + id: storeroomKey, + code: item.storeroomNum, + name: item.storeroomName, + type: 3 + }; + storeNode.children.push(storeroomNode); + } + }); + return tree; + }, + + reset(){ + this.listQuery = { + filter:{ + companyName: '' + }, + pageIndex:1, + pageSize:9999 + } + this.deviceQuery.filter = { + companyCode: '', + storeNum: '', + storeroomNum: '', + deviceType: 1 + } + this.getDataList() + }, + search(){ + this.listQuery.pageIndex = 1 + this.getDataList() + } + }, +} +</script> + +<style lang="scss" scoped> +.basic_search { + display: inline-block; +} + +.table_content{ + display: flex; + align-items: flex-start; + justify-content: space-between; +} + +.left-tree{ + width: 20%; + /deep/.el-tree-node{ + .el-tree-node__content{ + padding: 10px 0; + height: auto; + .el-tree-node__label{ + font-size: 16px; + } + } + } + /deep/.is-current>.el-tree-node__content{ + background-color: #034ea2; + color: #fff; + } +} + +.cardList{ + width: 80%; + padding: 0 10px 10px; + display: grid; + grid-gap: 20px; + grid-template-columns: repeat(2, 1fr); + + .card-item{ + width: 100%; + background: #f5f5f5; + padding: 15px; + border-radius: 8px; + cursor: pointer; + + .itemTitle{ + width: 100%; + font-size: 18px; + font-weight: bolder; + margin-bottom: 10px; + } + .cont{ + width: 100%; + display: flex; + align-items: center; + justify-content: space-between; + + img{ + width: 100px; + height: 100px; + object-fit: cover; + } + .rightCont{ + width: calc(100% - 110px); + display: flex; + flex-direction: column; + justify-content: space-around; + .rightItem{ + display: flex; + justify-content: space-between; + align-items: center; + &:first-of-type{ + margin-bottom: 10px; + } + } + } + } + + } +} +</style> diff --git a/src/views/monitorAlert/warningInfo/components/warningInfoDialog.vue b/src/views/monitorAlert/warningInfo/components/warningInfoDialog.vue new file mode 100644 index 0000000..57bec78 --- /dev/null +++ b/src/views/monitorAlert/warningInfo/components/warningInfoDialog.vue @@ -0,0 +1,102 @@ +<template> + <el-dialog :visible.sync="editDialogVisible" :modal-append-to-body="false" :close-on-click-modal="false" :title="title" center + width="30%"> + <el-form ref="form" :rules="formRules" :model="form" label-width="140px" class="form"> + <el-form-item label="姓名:" prop="name"> + <el-input v-model.trim="form.name"/> + </el-form-item> + <el-form-item label="人员类型:" prop="type"> + <el-select v-model="form.type" placeholder="请选择类型"> + <el-option + v-for="item in typeList" + :key="item.id" + :label="item.name" + :value="item.id"> + </el-option> + </el-select> + </el-form-item> + <el-form-item label="联系方式:" prop="phone"> + <el-input type="number" v-model.number.trim="form.phone"/> + </el-form-item> + </el-form> + <span slot="footer" class="dialog-footer"> + <el-button @click="editDialogVisible = false">取 消</el-button> + <el-button type="primary" @click="confirm()">确 认</el-button> + </span> + </el-dialog> +</template> + +<script> + import {updateStorehouseData} from "../../../../api/warehouse"; + + export default { + name: "crewDialog", + data() { + return { + editDialogVisible: false, + title: '', + typeList: [ + { + id: 1, + name: '' + } + ], + form: {}, + formRules:{ + name:[ + { required: true, message: '请输入姓名', trigger: 'change' }, + ] + } + } + }, + created() { + const t = this + }, + methods: { + open(){ + this.editDialogVisible = true; + }, + confirm(){ + this.$refs.form.validate(async (valid) => { + if (valid) { + // const res = await updateStorehouseData(this.editForm) + // if(res.data.code == 200){ + // this.$message.success('盘库提交成功') + // + // }else{ + // this.$message.warning(res.data.message) + // } + // this.editDialogVisible = false + } + }) + } + } + } +</script> + +<style lang="scss" scoped> + .part-title{ + font-size: 16px; + font-weight: bolder; + } + .selector{ + /deep/ .el-form-item__content{ + margin-left: 0 !important; + } + } + .form{ + .el-form-item{ + display: flex !important; + } + /deep/ .el-form-item__content{ + width: 100%; + margin-left: 0 !important; + } + } + + .numInput{ + /deep/ .el-input__inner{ + padding-right: 0; + } + } +</style> diff --git a/src/views/monitorAlert/warningInfo/index.vue b/src/views/monitorAlert/warningInfo/index.vue new file mode 100644 index 0000000..e629606 --- /dev/null +++ b/src/views/monitorAlert/warningInfo/index.vue @@ -0,0 +1,264 @@ +<template> + <div class="app-container"> + <div class="filter-container"> + <div style="display: block;"> + <div class="basic_search" style="padding-top: 10px;"> + <span>按时间查询:</span> + <el-date-picker + value-format="yyyy-MM-dd HH:mm:ss" + v-model="validTime" + type="daterange" + :default-time="['00:00:00','23:59:59']" + range-separator="-" + start-placeholder="开始日期" + end-placeholder="结束日期" + > + </el-date-picker> + </div> + <div class="basic_search" style="margin-right: 10px;padding-top: 10px"> + <span>状态:</span> + <el-select v-model="listQuery.filter.alarmStatus" clearable filterable> + <el-option key="0" label="全部" value=""></el-option> + <el-option key="1" label="未销警" :value="0"></el-option> + <el-option key="2" label="已销警" :value="1"></el-option> + </el-select> + </div> + <div class="basic_search" style="margin-right: 10px;padding-top: 10px"> + <span>报警类型:</span> + <el-select v-model="listQuery.filter.alarmType" clearable filterable> + <el-option key="1" label="超员作业" :value="1"></el-option> + <el-option key="2" label="堵塞通道" :value="2"></el-option> + <el-option key="3" label="超高超量" :value="3"></el-option> + <el-option key="4" label="非法入侵" :value="4"></el-option> + <el-option key="5" label="摄像头遮挡偏移" :value="5"></el-option> + <el-option key="6" label="温度" :value="6"></el-option> + <el-option key="7" label="湿度" :value="7"></el-option> + </el-select> + </div> + <div class="basic_search"> + <span>企业名称:</span> + <el-input v-model.trim="listQuery.filter.companyName" style="width: 300px"/> + </div> + <div class="basic_search" style="margin-right: 10px"> + <el-button style="margin-left: 10px;" type="primary" @click="reset()">重置</el-button> + <el-button style="margin-left: 10px;" type="primary" icon="el-icon-search" @click="search()">查询</el-button> + </div> + </div> + </div> + <div class="table_content"> + <el-table + :key="tableKey" + :data="dataList" + border + fit + highlight-current-row + style="width: 100%;" + > + <el-table-column label="序号" type="index" align="center"></el-table-column> + <el-table-column label="企业" prop="companyName" align="center"></el-table-column> + <el-table-column label="仓库" prop="storeName" align="center"></el-table-column> + <el-table-column label="库房" prop="storeroomName" align="center"></el-table-column> + <el-table-column label="报警类型" prop="alarmType" align="center"> + <template slot-scope="scope"> + {{getTypeName(scope.row.alarmType)}} + </template> + </el-table-column> + <el-table-column label="报警状态" prop="alarmStatus" align="center"> + <template slot-scope="scope"> + {{ scope.row.alarmStatus == 1?'已销警':'未销警' }} + </template> + </el-table-column> + <el-table-column label="报警图片" prop="alarmFile" align="center"> + <template slot-scope="scope"> + <el-image style="width: 100px; height: 100px" :preview-src-list="[scope.row.alarmFile]" :src="scope.row.alarmFile" fit="cover"></el-image> + </template> + </el-table-column> + <el-table-column label="报警时间" prop="warningDate" align="center"></el-table-column> + <el-table-column label="销警时间" prop="clearDate" align="center"></el-table-column> +<!-- <el-table-column label="操作" align="center" width="120" class-name="small-padding fixed-width" fixed="right">--> +<!-- <template slot-scope="scope">--> +<!-- <el-button type="text" @click="clearWarning(scope.row.id)">销警</el-button>--> +<!-- </template>--> +<!-- </el-table-column>--> + </el-table> + <br> + <div style="display: flex;justify-content: right"> + <el-pagination + v-show="recordTotal>0" + :current-page="currentPage" + :page-sizes="[10, 20, 30, 50]" + :page-size="listQuery.pageSize" + :total="recordTotal" + layout="total, sizes, prev, pager, next, jumper" + background + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> + </div> + <warning-info-dialog ref="warningInfoRef"></warning-info-dialog> + </div> + </div> +</template> + +<script> +import {computePageCount} from "../../../utils"; +import {regionPifaBox} from "../../../api/stock" +import warningInfoDialog from "./components/warningInfoDialog" +import {editAlarmInfo, getOriginalAlarm, getOriginalPerson} from "../../../api/monitorAlert"; + +export default { + name: "warningInfo", + components: { warningInfoDialog }, + data() { + return { + tableKey: '', + recordTotal: 0, + currentPage: 1, + validTime: [], + dataList: [], + listQuery: { + filter:{ + alarmStartTime: '', + alarmEndTime: '', + alarmStatus: null, + companyCode: '', + companyName: '', + alarmType: null + }, + pageIndex:1, + pageSize:10 + }, + typeList: [ + { + name: '超员作业', + value: 1 + }, + { + name: '堵塞通道', + value: 2 + }, + { + name: '超高超量', + value: 3 + }, + { + name: '非法入侵', + value: 4 + }, + { + name: '摄像头遮挡偏移', + value: 5 + }, + { + name: '温度', + value: 6 + }, + { + name: '湿度', + value: 7 + } + ] + } + }, + created() { + this.getDataList() + }, + mounted() { + }, + watch: {}, + methods: { + openDialog(type,data){ + this.$refs.warningInfoRef.open(type,data) + }, + clearWarning(id){ + this.$confirm('确定执行销警操作?', '提示', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning' + }).then(async() => { + let res = await editAlarmInfo({id: id}) + if (res.data.code === "200") { + this.$message({ + type: 'success', + message: res.data.message + }) + } else { + this.$message({ + type: 'warning', + message: res.data.message + }) + } + }).catch(() => { + this.$message({ + type: 'info', + message: '已取消' + }); + }); + }, + getTypeName(type){ + return this.typeList.find(i=>i.value == type).name + }, + async getDataList() { + if(this.validTime.length>0){ + this.listQuery.filter.alarmStartTime = this.validTime[0] + this.listQuery.filter.alarmEndTime = this.validTime[1] + } + let res = await getOriginalAlarm(this.listQuery) + if (res.data.code === "200") { + const data = res.data.result + if(Array.isArray(data.records)){ + this.dataList = data.records.map(item => { + return { + ...item, + alarmFile: process.env.IMG_API + item.alarmFile + } + }) + this.recordTotal = data.total + this.currentPage = data.current + }else{ + this.dataList = [] + } + } else { + this.$message({ + type: 'warning', + message: res.data.message + }) + } + }, + handleSizeChange: function(val) { + this.listQuery.pageSize = val + this.getDataList() + }, + handleCurrentChange: function(val) { + this.listQuery.pageIndex = val + this.getDataList() + }, + reset(){ + this.listQuery = { + filter:{ + alarmStartTime: '', + alarmEndTime: '', + alarmStatus: null, + companyCode: '', + companyName: '', + alarmType: null + }, + pageIndex:1, + pageSize:10 + } + this.validTime = [] + this.getDataList() + }, + search(){ + this.listQuery.pageIndex = 1 + this.getDataList() + } + }, +} +</script> + +<style scoped> +.basic_search { + display: inline-block; +} +</style> diff --git a/src/views/usermng/warning.vue b/src/views/usermng/warning.vue index 2f5b15b..561975c 100644 --- a/src/views/usermng/warning.vue +++ b/src/views/usermng/warning.vue @@ -8,7 +8,8 @@ type="primary" icon="el-icon-refresh" @click="refreshHandle" - >刷新</el-button> + >刷新 + </el-button> <el-select v-model="queryForm.enterprisetype" clearable placeholder="请选择企业类型"> <el-option class="filter-item" @@ -145,7 +146,8 @@ v-if="getBtnPermission('edit')" type="text" @click="showEditHandle(scope.row)" - >编辑</el-button> + >编辑 + </el-button> </template> </el-table-column> </el-table> @@ -182,7 +184,7 @@ label="警告类型:" prop="type" > - {{dataForm.warntype}} + {{ dataForm.warntype }} </el-form-item> <el-form-item label="计算周期(天):" @@ -220,7 +222,8 @@ <el-button type="primary" @click="updateHandle()" - >确认</el-button> + >确认 + </el-button> </div> </el-dialog> <el-dialog @@ -242,13 +245,13 @@ label="警告类型:" prop="type" > - {{dataForm.warntype}} + {{ dataForm.warntype }} </el-form-item> <el-form-item label="企业类型:" prop="type" > - {{dataForm.enterprisetype}} + {{ dataForm.enterprisetype }} </el-form-item> <el-form-item label="预警值:" @@ -280,247 +283,248 @@ <el-button type="primary" @click="updateStockHandle()" - >确认</el-button> + >确认 + </el-button> </div> </el-dialog> - <div style="clear: both;" /> + <div style="clear: both;"/> </div> </template> <script> - import { mapGetters } from 'vuex' - import { getWarningList, editWarningInfo } from '@/api/warning' - import { parseTime, computePageCount } from '@/utils' - import { parseError } from '@/utils/messageDialog' - import Cookies from 'js-cookie' - import { Message, MessageBox } from 'element-ui' - import { dictionaryAllItems } from '@/api/dictionary'; - import { checkBtnPermission } from '@/utils/permission' +import {mapGetters} from 'vuex' +import {getWarningList, editWarningInfo} from '@/api/warning' +import {parseTime, computePageCount} from '@/utils' +import {parseError} from '@/utils/messageDialog' +import Cookies from 'js-cookie' +import {Message, MessageBox} from 'element-ui' +import {dictionaryAllItems} from '@/api/dictionary'; +import {checkBtnPermission} from '@/utils/permission' - export default { - name: 'warning', - filters: { - parseSms(value) { - if (value == 1) { - return '是' - } else { - return '否' - } - }, - }, - computed: { - ...mapGetters([ - 'userType' - ]) - }, - data() { - return { - sort:'id', - order:'asc', - pageSize: 10, - recordTotal: 0, - currentPage: 1, - pageTotal: 0, - tableKey: 0, - warningData: null, - listLoading: true, - queryForm: { - warntype: '', - enterprisetype:'', - }, - enterpriseTypeList:[], - warnTypeList:[], - - dataForm: { - id: '', - warntype: '', - period: '', - enterprisetype: '', - issms: '', - minimum: '', - maximum: '', - }, - dialogFormVisible: false, - dialogStockFormVisible: false, - dataFormRules: { - minimum: [{ required: true, message: '预警值不能为空', trigger: 'blur' }], - maximum: [{ required: true, message: '报警值不能为空', trigger: 'blur' }], - }, - - +export default { + name: 'warning', + filters: { + parseSms(value) { + if (value == 1) { + return '是' + } else { + return '否' } }, - created() { - this.getWarningList() - this.getDictionaryEnterpriseType() - this.getDictionaryWarnType() - }, - methods: { - getWarningList() { - const _this = this - const params = {} - params['sort'] = _this.sort - params['order'] = _this.order - params['pageIndex'] = _this.currentPage - params['pageSize'] = _this.pageSize - for (const i in _this.queryForm) { - if (_this.queryForm[i] != undefined && _this.queryForm[i].toString() != '') { - params[i] = _this.queryForm[i] - } - } - _this.listLoading = true - getWarningList(params).then(response => { - const res = response.data - if (res.code == 200) { - const result = res.result; - _this.recordTotal = result.totalCount - _this.pageSize = result.pageSize - _this.pageTotal = computePageCount(result.totalCount, result.pageSize) - _this.currentPage = result.pageIndex - _this.warningData = result.result - } else { - parseError({ error: res.message, vm: _this }) - } - _this.listLoading = false - }).catch(error => { - _this.listLoading = false - parseError({ error: error, vm: _this }) - }) + }, + computed: { + ...mapGetters([ + 'userType' + ]) + }, + data() { + return { + sort: 'id', + order: 'asc', + pageSize: 10, + recordTotal: 0, + currentPage: 1, + pageTotal: 0, + tableKey: 0, + warningData: null, + listLoading: true, + queryForm: { + warntype: '', + enterprisetype: '', }, - getDictionaryEnterpriseType() { - const _this = this - if (_this.enterpriseTypeList && _this.enterpriseTypeList.length > 0) { - return - } - const params = {} - params['dictionaryType'] = '安全监管分类' - dictionaryAllItems(params).then(response => { - const res = response.data - if (res.code == 200) { - _this.enterpriseTypeList = res.result - } else { - parseError({ error: res.message, vm: _this }) - } - }).catch(error => { - parseError({ error: error, vm: _this }) - }) + enterpriseTypeList: [], + warnTypeList: [], + + dataForm: { + id: '', + warntype: '', + period: '', + enterprisetype: '', + issms: '', + minimum: '', + maximum: '', }, - getDictionaryWarnType() { - const _this = this - if (_this.warnTypeList && _this.warnTypeList.length > 0) { - return - } - const params1 = {} - params1['dictionaryType'] = '警告类型' - dictionaryAllItems(params1).then(response => { - const res = response.data - if (res.code == 200) { - _this.warnTypeList = res.result - } else { - parseError({ error: res.message, vm: _this }) - } - }).catch(error => { - parseError({ error: error, vm: _this }) - }) - }, - refreshHandle: function() { - this.getWarningList() - }, - queryHandle: function() { - this.currentPage = 1 - this.getWarningList() - }, - sortWarningChange: function(param){ - this.sort = param.prop; - this.order = param.order; - this.getWarningList() - }, - handleSizeChange: function(val) { - this.pageSize = val - this.currentPage = 1 - this.getWarningList() - }, - handleCurrentChange: function(val) { - this.currentPage = val - this.getWarningList() - }, - getBtnPermission(btnType) { - return checkBtnPermission(this.userType, btnType) - }, - resetDataForm() { - this.dataForm = { - id: '', - warntype: '', - period: '', - enterprisetype: '', - issms: '', - minimum: '', - maximum: '', - } - }, - showEditHandle: function(row) { - this.resetDataForm() - this.dataForm.id = row.id - this.dataForm.warntype = row.warntype - this.dataForm.period = row.period - this.dataForm.enterprisetype = row.enterprisetype - this.dataForm.issms = row.issms - this.dataForm.minimum = row.minimum - this.dataForm.maximum = row.maximum - if (this.dataForm.warntype == '购买超量'){ - this.dialogFormVisible = true - this.$nextTick(() => { - this.$refs['dataForm'].clearValidate() - }) - }else { - this.dialogStockFormVisible = true - } - }, - updateHandle() { - this.$refs['dataForm'].validate((valid) => { - const _this = this - if (valid) { - editWarningInfo(_this.dataForm).then(response => { - const res = response.data - if (res.code == 200) { - _this.dialogFormVisible = false - _this.$message({ - message: '更新成功', - type: 'success' - }) - _this.getWarningList() - } else { - parseError({ error: res.message, vm: _this }) - } - }).catch(error => { - parseError({ error: error, vm: _this }) - }) - } - }) - }, - updateStockHandle() { - this.$refs['dataForm'].validate((valid) => { - const _this = this - if (valid) { - editWarningInfo(_this.dataForm).then(response => { - const res = response.data - if (res.code == 200) { - _this.dialogStockFormVisible = false - _this.$message({ - message: '更新成功', - type: 'success' - }) - _this.getWarningList() - } else { - parseError({ error: res.message, vm: _this }) - } - }).catch(error => { - parseError({ error: error, vm: _this }) - }) - } - }) + dialogFormVisible: false, + dialogStockFormVisible: false, + dataFormRules: { + minimum: [{required: true, message: '预警值不能为空', trigger: 'blur'}], + maximum: [{required: true, message: '报警值不能为空', trigger: 'blur'}], }, + } + }, + created() { + this.getWarningList() + this.getDictionaryEnterpriseType() + this.getDictionaryWarnType() + }, + methods: { + getWarningList() { + const _this = this + const params = {} + params['sort'] = _this.sort + params['order'] = _this.order + params['pageIndex'] = _this.currentPage + params['pageSize'] = _this.pageSize + for (const i in _this.queryForm) { + if (_this.queryForm[i] != undefined && _this.queryForm[i].toString() != '') { + params[i] = _this.queryForm[i] + } + } + _this.listLoading = true + getWarningList(params).then(response => { + const res = response.data + if (res.code == 200) { + const result = res.result; + _this.recordTotal = result.totalCount + _this.pageSize = result.pageSize + _this.pageTotal = computePageCount(result.totalCount, result.pageSize) + _this.currentPage = result.pageIndex + _this.warningData = result.result + } else { + parseError({error: res.message, vm: _this}) + } + _this.listLoading = false + }).catch(error => { + _this.listLoading = false + parseError({error: error, vm: _this}) + }) + }, + getDictionaryEnterpriseType() { + const _this = this + if (_this.enterpriseTypeList && _this.enterpriseTypeList.length > 0) { + return + } + const params = {} + params['dictionaryType'] = '安全监管分类' + dictionaryAllItems(params).then(response => { + const res = response.data + if (res.code == 200) { + _this.enterpriseTypeList = res.result + } else { + parseError({error: res.message, vm: _this}) + } + }).catch(error => { + parseError({error: error, vm: _this}) + }) + }, + getDictionaryWarnType() { + const _this = this + if (_this.warnTypeList && _this.warnTypeList.length > 0) { + return + } + const params1 = {} + params1['dictionaryType'] = '警告类型' + dictionaryAllItems(params1).then(response => { + const res = response.data + if (res.code == 200) { + _this.warnTypeList = res.result + } else { + parseError({error: res.message, vm: _this}) + } + }).catch(error => { + parseError({error: error, vm: _this}) + }) + }, + refreshHandle: function () { + this.getWarningList() + }, + queryHandle: function () { + this.currentPage = 1 + this.getWarningList() + }, + sortWarningChange: function (param) { + this.sort = param.prop; + this.order = param.order; + this.getWarningList() + }, + handleSizeChange: function (val) { + this.pageSize = val + this.currentPage = 1 + this.getWarningList() + }, + handleCurrentChange: function (val) { + this.currentPage = val + this.getWarningList() + }, + getBtnPermission(btnType) { + return checkBtnPermission(this.userType, btnType) + }, + resetDataForm() { + this.dataForm = { + id: '', + warntype: '', + period: '', + enterprisetype: '', + issms: '', + minimum: '', + maximum: '', + } + }, + showEditHandle: function (row) { + this.resetDataForm() + this.dataForm.id = row.id + this.dataForm.warntype = row.warntype + this.dataForm.period = row.period + this.dataForm.enterprisetype = row.enterprisetype + this.dataForm.issms = row.issms + this.dataForm.minimum = row.minimum + this.dataForm.maximum = row.maximum + if (this.dataForm.warntype == '购买超量') { + this.dialogFormVisible = true + this.$nextTick(() => { + this.$refs['dataForm'].clearValidate() + }) + } else { + this.dialogStockFormVisible = true + } + }, + updateHandle() { + this.$refs['dataForm'].validate((valid) => { + const _this = this + if (valid) { + editWarningInfo(_this.dataForm).then(response => { + const res = response.data + if (res.code == 200) { + _this.dialogFormVisible = false + _this.$message({ + message: '更新成功', + type: 'success' + }) + _this.getWarningList() + } else { + parseError({error: res.message, vm: _this}) + } + }).catch(error => { + parseError({error: error, vm: _this}) + }) + } + }) + }, + updateStockHandle() { + this.$refs['dataForm'].validate((valid) => { + const _this = this + if (valid) { + editWarningInfo(_this.dataForm).then(response => { + const res = response.data + if (res.code == 200) { + _this.dialogStockFormVisible = false + _this.$message({ + message: '更新成功', + type: 'success' + }) + _this.getWarningList() + } else { + parseError({error: res.message, vm: _this}) + } + }).catch(error => { + parseError({error: error, vm: _this}) + }) + } + }) + }, + } +} </script> -- Gitblit v1.9.2