马宇豪
2025-04-23 34ec919649adfefeecd0418284dd7b02e9ed49b8
添加批发仓库监测预警
已修改2个文件
已添加15个文件
3200 ■■■■■ 文件已修改
config/dev.env.js 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/monitorAlert.js 156 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/deviceItem.png 补丁 | 查看 | 原始文档 | blame | 历史
src/views/monitorAlert/carPeople/components/carPeopleDialog.vue 102 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/monitorAlert/carPeople/index.vue 168 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/monitorAlert/crewInfo/components/crewDialog.vue 122 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/monitorAlert/crewInfo/index.vue 178 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/monitorAlert/preWarning/components/preWarningDialog.vue 102 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/monitorAlert/preWarning/index.vue 272 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/monitorAlert/storeAreaManage/components/addStock.vue 216 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/monitorAlert/storeAreaManage/components/deviceDialog.vue 248 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/monitorAlert/storeAreaManage/index.vue 277 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/monitorAlert/temperatureHumidity/components/thDialog.vue 205 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/monitorAlert/temperatureHumidity/index.vue 305 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/monitorAlert/warningInfo/components/warningInfoDialog.vue 102 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/monitorAlert/warningInfo/index.vue 264 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/usermng/warning.vue 472 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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"',
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
    })
}
src/assets/deviceItem.png
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>