From 34ec919649adfefeecd0418284dd7b02e9ed49b8 Mon Sep 17 00:00:00 2001
From: 马宇豪 <978517621@qq.com>
Date: 星期三, 23 四月 2025 15:42:17 +0800
Subject: [PATCH] 添加批发仓库监测预警

---
 src/views/monitorAlert/storeAreaManage/components/deviceDialog.vue  |  248 ++++
 src/api/monitorAlert.js                                             |  156 ++
 src/views/monitorAlert/carPeople/index.vue                          |  168 +++
 src/views/monitorAlert/temperatureHumidity/components/thDialog.vue  |  205 +++
 src/views/monitorAlert/carPeople/components/carPeopleDialog.vue     |  102 +
 src/views/usermng/warning.vue                                       |  472 ++++----
 src/assets/deviceItem.png                                           |    0 
 src/views/monitorAlert/storeAreaManage/components/addStock.vue      |  216 ++++
 src/views/monitorAlert/warningInfo/index.vue                        |  264 ++++
 src/views/monitorAlert/storeAreaManage/index.vue                    |  277 +++++
 config/dev.env.js                                                   |   11 
 src/views/monitorAlert/crewInfo/index.vue                           |  178 +++
 src/views/monitorAlert/preWarning/components/preWarningDialog.vue   |  102 +
 src/views/monitorAlert/preWarning/index.vue                         |  272 +++++
 src/views/monitorAlert/temperatureHumidity/index.vue                |  305 +++++
 src/views/monitorAlert/warningInfo/components/warningInfoDialog.vue |  102 +
 src/views/monitorAlert/crewInfo/components/crewDialog.vue           |  122 ++
 17 files changed, 2,962 insertions(+), 238 deletions(-)

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

--
Gitblit v1.9.2