From 15669173497dce16b5d0f17bf4bef36c0d87115c Mon Sep 17 00:00:00 2001
From: zhouwenxuan <1175765986@qq.com>
Date: 星期三, 30 八月 2023 17:23:44 +0800
Subject: [PATCH] 气体管理/区域管理

---
 src/views/system/user/index.vue                               |    2 
 src/views/basicDataManage/areaManage/component/areaDialog.vue |   62 ++++++++++
 src/views/basicDataManage/areaManage/index.vue                |   91 +++++++++-----
 src/api/basicDataManage/gasManage/index.ts                    |   24 ++++
 src/api/basicDataManage/areaManage/index.ts                   |   43 +++++++
 src/types/areaManage.d.ts                                     |    3 
 src/router/index.ts                                           |    2 
 src/types/gasManage.d.ts                                      |    2 
 src/views/basicDataManage/gasManage/component/gasDialog.vue   |   39 +++++
 src/views/basicDataManage/gasManage/index.vue                 |   50 +++++++-
 10 files changed, 268 insertions(+), 50 deletions(-)

diff --git a/src/api/basicDataManage/areaManage/index.ts b/src/api/basicDataManage/areaManage/index.ts
new file mode 100644
index 0000000..3398402
--- /dev/null
+++ b/src/api/basicDataManage/areaManage/index.ts
@@ -0,0 +1,43 @@
+import request from '/@/utils/request';
+
+export function areaManageApi() {
+    return {
+
+        //区域分页列表
+        getAreaPage: (data: object) => {
+            return request({
+                url: import.meta.env.VITE_API_URL + `/region/page`,
+                method: 'post',
+                data: data
+            });
+        },
+
+        //区域新增
+        addArea: (data: object) => {
+            return request({
+                url: import.meta.env.VITE_API_URL + `/region/add`,
+                method: 'post',
+                data: data
+            });
+        },
+
+        //区域删除
+        delArea: (data: object) => {
+            return request({
+                url: import.meta.env.VITE_API_URL + `/region/del`,
+                method: 'post',
+                data: data
+            });
+        },
+
+        //区域修改
+        editArea: (data: object) => {
+            return request({
+                url: import.meta.env.VITE_API_URL + `/region/update`,
+                method: 'post',
+                data: data
+            });
+        },
+
+    };
+}
\ No newline at end of file
diff --git a/src/api/basicDataManage/gasManage/index.ts b/src/api/basicDataManage/gasManage/index.ts
new file mode 100644
index 0000000..c37b56e
--- /dev/null
+++ b/src/api/basicDataManage/gasManage/index.ts
@@ -0,0 +1,24 @@
+import request from '/@/utils/request';
+
+export function gasManageApi() {
+    return {
+
+        //气体分页列表
+        getGasPage: (data: object) => {
+            return request({
+                url: import.meta.env.VITE_API_URL + `/gasCategory/page`,
+                method: 'post',
+                data: data
+            });
+        },
+
+        //气体新增
+        addGas: (data: object) => {
+            return request({
+                url: import.meta.env.VITE_API_URL + `/gasCategory/add`,
+                method: 'post',
+                data: data
+            });
+        },
+    };
+}
diff --git a/src/router/index.ts b/src/router/index.ts
index 38316aa..efe48a5 100644
--- a/src/router/index.ts
+++ b/src/router/index.ts
@@ -85,7 +85,7 @@
         } else {
             const storesRoutesList = useRoutesList(pinia);
             const { routesList } = storeToRefs(storesRoutesList);
-            if (routesList.value.length === 0) {
+            if ( routesList.value && routesList.value.length === 0) {
                 // 后端控制路由:路由数据初始化,防止刷新时丢失
                 await initBackEndControlRoutes();
                 // 动态添加路由:防止非首页刷新时跳转回首页的问题
diff --git a/src/types/areaManage.d.ts b/src/types/areaManage.d.ts
index a432465..f4067b1 100644
--- a/src/types/areaManage.d.ts
+++ b/src/types/areaManage.d.ts
@@ -13,7 +13,7 @@
             pageIndex: number;
             pageSize: number;
             searchParams:{
-                areaName: string
+                name: string
             }
         };
     }
@@ -24,6 +24,7 @@
     title: string;
     isShowUserDialog: boolean;
     areaForm: {
+        id: string;
         areaName: string;
         areaLngLat: Array<LngLat>;
         areaColor: string;
diff --git a/src/types/gasManage.d.ts b/src/types/gasManage.d.ts
index 94b7f7b..5f4fe45 100644
--- a/src/types/gasManage.d.ts
+++ b/src/types/gasManage.d.ts
@@ -14,7 +14,7 @@
             pageIndex: number;
             pageSize: number;
             searchParams:{
-                gasName: string
+                name: string
             }
         };
     }
diff --git a/src/views/basicDataManage/areaManage/component/areaDialog.vue b/src/views/basicDataManage/areaManage/component/areaDialog.vue
index 2223cf0..0b5c743 100644
--- a/src/views/basicDataManage/areaManage/component/areaDialog.vue
+++ b/src/views/basicDataManage/areaManage/component/areaDialog.vue
@@ -5,7 +5,7 @@
             v-model="state.isShowUserDialog"
             width="600px"
         >
-            <el-form :model="state.areaForm" size="default" ref="areaRef" :rules="state.areaFormRules" label-width="110px">
+            <el-form :model="state.areaForm" size="default" ref="areaRef" :rules="state.title == '查看区域' ? '' :state.areaFormRules" label-width="110px">
                 <el-form-item label="区域名称:" prop="areaName">
                     <el-input v-model.trim="state.areaForm.areaName" :disabled="state.disabled" ></el-input>
                 </el-form-item>
@@ -65,6 +65,8 @@
 import {reactive, ref} from "vue";
 import { AreaState } from "/@/types/areaManage";
 import lngDialog from "./lngDialog.vue";
+import {areaManageApi} from "/@/api/basicDataManage/areaManage";
+import {ElMessage} from "element-plus/es";
 
 const areaRef = ref();
 const lngRef = ref();
@@ -74,6 +76,7 @@
     title: '',
     isShowUserDialog: false,
     areaForm: {
+        id: '',
         areaName: '',
         areaLngLat: [],
         areaColor: '',
@@ -86,6 +89,7 @@
 });
 const openDialog = (type: string, value: any) => {
     state.isShowUserDialog = true;
+    reset();
     if (type === '新增') {
         state.disabled = false;
         state.title = '新增区域';
@@ -99,7 +103,60 @@
         state.areaForm = JSON.parse(JSON.stringify(value));
     }
 };
-const onSubmit = () => {
+const onSubmit = async () => {
+    if(state.title == '新增区域' || state.title == '修改区域') {
+        const valid = areaRef.value.validate();
+        if(valid){
+            if(state.title == '新增区域'){
+                const param = {
+                    name: state.areaForm.areaName,
+                    color: state.areaForm.areaColor,
+                    regionLngLats: state.areaForm.areaLngLat.map(item => {
+                        return {
+                            lng: item.lng,
+                            lat: item.lat
+                        }
+                    })
+                }
+                let res = await  areaManageApi().addArea(param);
+                if(res.data.code == 100) {
+                    ElMessage({
+                        type: 'success',
+                        message: '新增成功'
+                    });
+                }else {
+                    ElMessage({
+                        type: 'warning',
+                        message: res.data.msg
+                    });
+                }
+            }else if(state.title == '修改区域'){
+                const param = {
+                    id: state.areaForm.id,
+                    name: state.areaForm.areaName,
+                    color: state.areaForm.areaColor,
+                    regionLngLats: state.areaForm.areaLngLat.map(item => {
+                        return {
+                            lng: item.lng,
+                            lat: item.lat
+                        }
+                    })
+                }
+                let res = await areaManageApi().editArea(param);
+                if(res.data.code == 100) {
+                    ElMessage({
+                        type: 'success',
+                        message: '修改成功'
+                    });
+                }else {
+                    ElMessage({
+                        type: 'warning',
+                        message: res.data.msg
+                    });
+                }
+            }
+        }
+    }
     console.log("form",state.areaForm)
     areaRef.value.clearValidate();
     state.isShowUserDialog = false;
@@ -115,6 +172,7 @@
 }
 const reset = () => {
     state.areaForm = {
+        id: '',
         areaName: '',
         areaLngLat: [],
         areaColor: '',
diff --git a/src/views/basicDataManage/areaManage/index.vue b/src/views/basicDataManage/areaManage/index.vue
index 9af8277..3a003a1 100644
--- a/src/views/basicDataManage/areaManage/index.vue
+++ b/src/views/basicDataManage/areaManage/index.vue
@@ -3,10 +3,10 @@
         <el-card shadow="hover">
             <div class="system-menu-search mb15">
                 <el-form :inline="true" >
-                    <el-form-item label="气体名称:">
-                        <el-input  v-model="state.tableData.listQuery.searchParams.areaName"  placeholder="区域名称" ></el-input>
+                    <el-form-item label="区域名称:">
+                        <el-input  v-model="state.tableData.listQuery.searchParams.name"  placeholder="区域名称" ></el-input>
                     </el-form-item>
-                    <el-button size="default" type="primary" class="ml10">
+                    <el-button size="default" type="primary" class="ml10" @click="search()">
                         <el-icon>
                             <ele-Search />
                         </el-icon>
@@ -32,7 +32,7 @@
                 <el-table-column align="center"  label="区域经纬度">
                     <template #default="scope">
                         <div v-for="(item, index) in scope.row.areaLngLat" :key="index">
-                            [{{item.lng}},{{item.lat}}]
+                            [ {{item.lng}} , {{item.lat}} ]
                         </div>
                     </template>
                 </el-table-column>
@@ -65,44 +65,57 @@
 </template>
 
 <script setup lang="ts">
-import {reactive, ref} from "vue";
+import {reactive, ref, onMounted} from "vue";
 import { TableDataState } from "/@/types/areaManage";
 import areaDialog from "./component/areaDialog.vue";
 import {ElMessage, ElMessageBox} from "element-plus";
+import {areaManageApi} from "/@/api/basicDataManage/areaManage";
 
 const areaRef = ref();
 const state = reactive<TableDataState>({
     tableData: {
-        data: [
-            // {
-            //     id: 'xxx',
-            //     areaName: 'xxx',
-            //     areaLngLat: [
-            //         {
-            //             lng: '11',
-            //             lat:'22'
-            //         },
-            //         {
-            //             lng: '11',
-            //             lat:'22'
-            //         }
-            //     ],
-            //     areaColor: "#ffffff"
-            // }
-        ],
+        data: [],
         total: 0,
         loading: false,
         listQuery: {
             pageIndex: 1,
             pageSize: 10,
             searchParams:{
-                areaName:''
+                name: ''
             }
         }
     }
 });
 
-const initAreaData = () => {
+//页面加载
+onMounted(() => {
+    initAreaData();
+});
+
+const initAreaData = async () => {
+    let res = await areaManageApi().getAreaPage(state.tableData.listQuery);
+    if(res.data.code == 100) {
+        if(res.data.data && res.data.data.length > 0) {
+            state.tableData.data = res.data.data.map((item: any) => {
+                return {
+                    id: item.id,
+                    areaName: item.name,
+                    areaLngLat: item.regionLngLats,
+                    areaColor: item.color
+                }
+            });
+        }else {
+            state.tableData.data = [];
+        }
+        state.tableData.total = res.data.total;
+        state.tableData.listQuery.pageIndex = res.data.pageIndex;
+        state.tableData.listQuery.pageSize = res.data.pageSize;
+    }else {
+        ElMessage({
+            type: 'warning',
+            message: res.data.msg
+        });
+    }
     console.log("数据列表")
 };
 const onHandleSizeChange = (val: number) => {
@@ -125,17 +138,31 @@
             confirmButtonText: '确定',
             cancelButtonText: '取消',
             type: 'warning',
-        }
-    )
-        .then(() => {
-            ElMessage({
-                type: 'success',
-                message: '删除成功',
-            })
+        })
+        .then( async() => {
+            let res = await areaManageApi().delArea({id: val.id});
+            if(res.data.code == 100) {
+                ElMessage({
+                    type: 'success',
+                    message: '删除成功',
+                });
+                reset();
+            }else {
+                ElMessage({
+                    type: 'warning',
+                    message: res.data.msg
+                });
+            }
         })
 };
+const search = () => {
+    state.tableData.listQuery.pageIndex = 1;
+    initAreaData();
+}
 const reset = () => {
-    state.tableData.listQuery.searchParams.areaName = '';
+    state.tableData.listQuery.pageIndex = 1;
+    state.tableData.listQuery.searchParams.name = '';
+    initAreaData();
 }
 </script>
 <style scoped lang="scss">
diff --git a/src/views/basicDataManage/gasManage/component/gasDialog.vue b/src/views/basicDataManage/gasManage/component/gasDialog.vue
index 1878d0a..d4b57cc 100644
--- a/src/views/basicDataManage/gasManage/component/gasDialog.vue
+++ b/src/views/basicDataManage/gasManage/component/gasDialog.vue
@@ -5,7 +5,7 @@
             v-model="state.isShowUserDialog"
             width="500px"
         >
-            <el-form :model="state.gasForm" size="default" ref="gasRef" :rules="state.gasFormRules" label-width="110px">
+            <el-form :model="state.gasForm" size="default" ref="gasRef" :rules="state.title == '新增气体' ? state.gasFormRules : ''" label-width="110px">
                 <el-form-item label="气体名称:" prop="gasName">
                     <el-input v-model.trim="state.gasForm.gasName" :disabled="state.disabled" ></el-input>
                 </el-form-item>
@@ -32,6 +32,8 @@
 <script setup lang="ts">
 import {reactive, ref} from "vue";
 import { GasState } from "/@/types/gasManage";
+import {gasManageApi} from "/@/api/basicDataManage/gasManage";
+import {ElMessage} from "element-plus";
 
 const gasRef = ref();
 const emit = defineEmits(["getGasData"]);
@@ -69,10 +71,37 @@
         state.gasForm = JSON.parse(JSON.stringify(value));
     }
 };
-const onSubmit = () => {
-    gasRef.value.clearValidate();
-    state.isShowUserDialog = false;
-    emit('getGasData');
+const onSubmit = async () => {
+        if(state.title == '新增气体'){
+            const valid = await gasRef.value.validate();
+            if(valid) {
+                const param = {
+                    molecularFormula: state.gasForm.gasMolecularFormula,
+                    name: state.gasForm.gasName,
+                    unit: state.gasForm.gasUnit,
+                    threshold: state.gasForm.gasThreshold
+                }
+                let res = await gasManageApi().addGas(param);
+                if (res.data.code === 100) {
+                    ElMessage({
+                        type: 'success',
+                        message: '新增成功'
+                    });
+                    gasRef.value.clearValidate();
+                    state.isShowUserDialog = false;
+                    emit('getGasData');
+                } else {
+                    ElMessage({
+                        type: 'warning',
+                        message: res.data.msg
+                    });
+                }
+            }
+        }else {
+            gasRef.value.clearValidate();
+            state.isShowUserDialog = false;
+            emit('getGasData');
+        }
 };
 
 const handleClose = () => {
diff --git a/src/views/basicDataManage/gasManage/index.vue b/src/views/basicDataManage/gasManage/index.vue
index d80628e..b803281 100644
--- a/src/views/basicDataManage/gasManage/index.vue
+++ b/src/views/basicDataManage/gasManage/index.vue
@@ -4,9 +4,9 @@
             <div class="system-menu-search mb15">
                 <el-form :inline="true" >
                     <el-form-item label="气体名称:">
-                        <el-input  v-model="state.tableData.listQuery.searchParams.gasName"  placeholder="气体名称" ></el-input>
+                        <el-input  v-model="state.tableData.listQuery.searchParams.name"  placeholder="气体名称" ></el-input>
                     </el-form-item>
-                    <el-button size="default" type="primary" class="ml10">
+                    <el-button size="default" type="primary" class="ml10" @click="search()">
                         <el-icon>
                             <ele-Search />
                         </el-icon>
@@ -60,9 +60,11 @@
 </template>
 
 <script setup lang="ts">
-import {reactive, ref} from "vue";
+import {onMounted, reactive, ref} from "vue";
 import { TableDataState } from "/@/types/gasManage";
 import gasDialog from "./component/gasDialog.vue";
+import { gasManageApi } from "/@/api/basicDataManage/gasManage";
+import {ElMessage} from "element-plus";
 
 const gasRef = ref();
 const state = reactive<TableDataState>({
@@ -74,14 +76,42 @@
             pageIndex: 1,
             pageSize: 10,
             searchParams:{
-                gasName:''
+                name :''
             }
         }
     }
 });
+//页面加载
+onMounted(() => {
+    initGasData();
+});
 
-const initGasData = () => {
-    console.log("数据列表")
+const initGasData = async () => {
+    let res = await gasManageApi().getGasPage(state.tableData.listQuery);
+    console.log("res",res)
+    if (res.data.code === 100) {
+        if(res.data.data && res.data.data.length > 0){
+            state.tableData.data = res.data.data.map((item: any) => {
+                return {
+                    id: item.id,
+                    gasName: item.name,
+                    gasMolecularFormula: item.molecularFormula,
+                    gasThreshold: item.threshold,
+                    gasUnit: item.unit
+                }
+            });
+        }else {
+            state.tableData.data = [];
+        }
+        state.tableData.total = res.data.total;
+        state.tableData.listQuery.pageIndex = res.data.pageIndex;
+        state.tableData.listQuery.pageSize = res.data.pageSize;
+    } else {
+        ElMessage({
+            type: 'warning',
+            message: res.data.msg
+        });
+    }
 };
 const onHandleSizeChange = (val: number) => {
     state.tableData.listQuery.pageSize = val;
@@ -95,8 +125,14 @@
 const openDialog = (type: string, value: any) => {
     gasRef.value.openDialog(type, value);
 };
+const search = () => {
+    state.tableData.listQuery.pageIndex = 1;
+    initGasData();
+}
 const reset = () => {
-    state.tableData.listQuery.searchParams.gasName = '';
+    state.tableData.listQuery.searchParams.name = '';
+    state.tableData.listQuery.pageIndex = 1;
+    initGasData();
 }
 </script>
 <style scoped lang="scss">
diff --git a/src/views/system/user/index.vue b/src/views/system/user/index.vue
index b662ae7..04ac9fb 100644
--- a/src/views/system/user/index.vue
+++ b/src/views/system/user/index.vue
@@ -253,7 +253,7 @@
             initUserTableData();
             initRoleTableData();
             getRoleData();
-            getExpertsData();
+            // getExpertsData();
             getDepList()
         });
         return {

--
Gitblit v1.9.2