From f2593d3cf80998a831d07cc94ac49e4f51b04429 Mon Sep 17 00:00:00 2001
From: zhouwx <1175765986@qq.com>
Date: 星期二, 15 四月 2025 16:07:28 +0800
Subject: [PATCH] 接口对接

---
 src/assets/styles/index.scss                                |    4 
 src/views/firework/humiture/index.vue                       |  167 ++------
 src/views/firework/warehouse/components/addRoomDialog.vue   |  231 +++++++++++++
 src/views/firework/warehouse/components/warehouseDialog.vue |  218 ++++--------
 src/views/firework/humiture/components/dataDialog.vue       |   67 ++-
 src/views/firework/warehouse/index.vue                      |   46 +-
 src/api/company/warehouse.js                                |   85 +++++
 src/views/firework/warehouse/components/roomDialog.vue      |  168 +++++++++
 src/components/Pagination/index.vue                         |    4 
 9 files changed, 686 insertions(+), 304 deletions(-)

diff --git a/src/api/company/warehouse.js b/src/api/company/warehouse.js
new file mode 100644
index 0000000..1d710de
--- /dev/null
+++ b/src/api/company/warehouse.js
@@ -0,0 +1,85 @@
+import request from '@/utils/request'
+import {getToken} from "@/utils/auth";
+
+export function getWarehouse(params) {
+    return request({
+        url: '/store/storePageList',
+        method: 'post',
+        data: params
+    })
+}
+
+export function getRoom(params) {
+    return request({
+        url: '/store/storeroomPageList',
+        method: 'post',
+        data: params
+    })
+}
+export function getRoomByCompany(params) {
+    return request({
+        url: '/store/storeroomPageListV2',
+        method: 'post',
+        data: params
+    })
+}
+
+export function getDevice(params) {
+    return request({
+        url: '/store/storeroomDeviceList',
+        method: 'post',
+        data: params
+    })
+}
+
+
+
+export function addWarehouse(data) {
+    return request({
+        url: '/store/addOrUpdateStore',
+        method: 'post',
+        data: data
+    })
+}
+
+export function addRoom(data) {
+    return request({
+        url: '/store/addOrUpdateStoreroom',
+        method: 'post',
+        data: data
+    })
+}
+
+
+
+export function delWarehouse(data) {
+    return request({
+        url: `/store/deleteStore`,
+        method: 'post',
+        params: data
+    })
+}
+
+export function delRoom(data) {
+    return request({
+        url: `/store/deleteStoreroom`,
+        method: 'post',
+        params: data
+    })
+}
+
+export function getHumidity(data) {
+    return request({
+        url: `/store/humidityPageList`,
+        method: 'post',
+        data: data
+    })
+}
+
+export function getTemperature(data) {
+    return request({
+        url: `/store/temperaturePageList`,
+        method: 'post',
+        data: data
+    })
+}
diff --git a/src/assets/styles/index.scss b/src/assets/styles/index.scss
index c28ac66..b84ac11 100644
--- a/src/assets/styles/index.scss
+++ b/src/assets/styles/index.scss
@@ -132,7 +132,7 @@
 }
 
 .pagination-container {
-  margin-top: 30px;
+  margin-top: 15px;
 }
 
 .text-center {
@@ -196,4 +196,4 @@
 
 .blueBg{
   background: #385ca7;
-}
\ No newline at end of file
+}
diff --git a/src/components/Pagination/index.vue b/src/components/Pagination/index.vue
index 38de953..d4b31ad 100644
--- a/src/components/Pagination/index.vue
+++ b/src/components/Pagination/index.vue
@@ -33,7 +33,7 @@
   pageSizes: {
     type: Array,
     default() {
-      return [10, 20, 30, 50]
+      return [5,10, 20, 30, 50]
     }
   },
   // 移动端页码按钮的数量端默认值5
@@ -102,4 +102,4 @@
 .pagination-container.hidden {
   display: none;
 }
-</style>
\ No newline at end of file
+</style>
diff --git a/src/views/firework/humiture/components/dataDialog.vue b/src/views/firework/humiture/components/dataDialog.vue
index c5a2afc..4ed7971 100644
--- a/src/views/firework/humiture/components/dataDialog.vue
+++ b/src/views/firework/humiture/components/dataDialog.vue
@@ -10,17 +10,30 @@
     >
       <el-table v-loading="loading" :data="state.tableList" :border="true">
         <el-table-column label="序号" type="index" align="center" width="80" />
-        <el-table-column label="探测器" prop="createTime" align="center"  />
-        <el-table-column label="浓度值" prop="basicName" align="center" />
-        <el-table-column label="状态" prop="tabooBasicName" align="center" />
-        <el-table-column label="属性" prop="tabooBasicName" align="center" />
-        <el-table-column label="时间" prop="updateBy" align="center" />
+        <el-table-column label="探测器" prop="deviceName" align="center"  />
+        <el-table-column label="浓度值" prop="realValue" align="center" >
+          <template #default="scope">
+            <div>{{scope.row.realValue}}<span v-if="state.type == '温度'">℃</span><span v-else>%RH</span></div>
+          </template>
+        </el-table-column>
+        <el-table-column label="状态" prop="deviceWarning" align="center" >
+          <template #default="scope">
+            <span v-if="scope.row.deviceWarning == 0" style="color: #42b983">正常</span>
+            <span v-else style="color: #ed5565">报警</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="属性"  align="center" >
+          <template #default="scope">
+            <span>{{state.type}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="时间" prop="createDate" align="center" width="120" />
 
       </el-table>
       <pagination
           v-show="total > 0"
           :total="total"
-          v-model:page="queryParams.pageNum"
+          v-model:page="queryParams.pageIndex"
           v-model:limit="queryParams.pageSize"
           @pagination="getList"
       />
@@ -29,33 +42,53 @@
 </template>
 <script setup>
 import {reactive, ref, toRefs} from "vue";
+import {getHumidity, getTemperature} from "@/api/company/warehouse";
 
 const dialogVisible = ref(false);
 const emit = defineEmits(["getList"]);
 const loading = ref(false)
 const state = reactive({
+  type: '',
   tableList: [],
   total: 0,
   queryParams: {
-    pageNum: 1,
-    pageSize: 5,
+    pageIndex: 1,
+    pageSize: 10,
+    filter: {
+      deviceId: null
+    }
   },
 
 })
 const { queryParams, total } = toRefs(state);
 const openDialog = async (type,value) => {
+  state.type = type
+  state.queryParams.filter.deviceId = value.deviceId
+  await getList()
   dialogVisible.value = true;
 }
 const getList = async () => {
-  // loading.value = true
-  // const res = await getAvoidInfoPage(state.queryParams)
-  // if(res.code == 200){
-  //   state.tableList = res.data.list
-  //   state.total = res.data.total
-  // }else{
-  //   ElMessage.warning(res.message)
-  // }
-  // loading.value = false
+  loading.value = true
+  if(state.type == '湿度'){
+    const res = await getHumidity(state.queryParams)
+    if(res.code == 200){
+      state.tableList = res.result.records
+      state.total = res.result.total
+    }else{
+      ElMessage.warning(res.message)
+    }
+    loading.value = false
+  }else {
+    const res = await getTemperature(state.queryParams)
+    if(res.code == 200){
+      state.tableList = res.result.records
+      state.total = res.result.total
+    }else{
+      ElMessage.warning(res.message)
+    }
+    loading.value = false
+  }
+
 }
 const handleClose = () => {
   dialogVisible.value = false;
diff --git a/src/views/firework/humiture/index.vue b/src/views/firework/humiture/index.vue
index dcb763b..01a985c 100644
--- a/src/views/firework/humiture/index.vue
+++ b/src/views/firework/humiture/index.vue
@@ -5,17 +5,13 @@
     <div style="margin-top: 10px">
       <el-table v-loading="loading" :data="state.tableList" :border="true">
         <el-table-column label="序号" type="index" align="center" width="80" />
-        <el-table-column label="仓库" prop="createTime" align="center"  />
-        <el-table-column label="库房" prop="basicName" align="center" />
-        <el-table-column label="温度值" prop="tabooBasicName" align="center" />
-        <el-table-column label="同步时间" prop="updateBy" align="center" />
-        <el-table-column label="湿度值" prop="tabooBasicName" align="center" />
-        <el-table-column label="同步时间" prop="updateBy" align="center" />
+        <el-table-column label="仓库" prop="storeName" align="center"  />
+        <el-table-column label="库房" prop="storeroomName" align="center" />
       </el-table>
       <pagination
           v-show="total > 0"
           :total="total"
-          v-model:page="queryParams.pageNum"
+          v-model:page="queryParams.pageIndex"
           v-model:limit="queryParams.pageSize"
           @pagination="getListAll"
       />
@@ -24,20 +20,20 @@
     <el-scrollbar max-height="420px" style="padding-right: 10px;overflow-x: hidden;" v-if="state.dataList && state.dataList.length >0">
 <!--      <el-row :gutter="20" style="margin-top: 5px;margin-left: 5px">-->
 <!--        <el-col v-for="(item,index) in state.dataList" :key="index" :span="8">-->
-      <div style="display: flex;align-items: center;flex-wrap: wrap">
-        <div v-for="(item,index) in state.dataList" :key="index" style="width: 350px;margin: 20px 30px">
+      <div class="grid-container">
+        <div v-for="(item,index) in state.dataList" :key="index" style="width: 365px;margin: 20px 30px">
           <el-card class="card-item " shadow="always">
             <div style="display: flex;flex-direction: column">
-              <div style="font-size: 18px;font-weight: 700;margin-bottom: 15px">{{item.room}}—{{item.stock}}—{{item.device}}</div>
-              <div style="display: flex;align-items: center">
+              <div style="font-size: 18px;font-weight: 700;margin-bottom: 25px">{{item.storeName}}—{{item.storeroomName}}—{{item.deviceName}}</div>
+              <div style="display: flex;align-items: center;margin-bottom: 15px">
                 <img src="@/assets/images/device.png" />
                 <div style="display: flex;flex-direction: column">
-                  <div style="display: flex;justify-content: space-between;margin-bottom: 10px">
-                    <span>温度:{{item.warm}}</span>
+                  <div style="display: flex;justify-content: space-between;margin-bottom: 10px;align-items: center">
+                    <span>温度:{{item.temperatureValue}}℃</span>
                     <el-button type="primary" plain style="margin-left: 15px" @click="openData('温度',item)">历史数据</el-button>
                   </div>
-                  <div style="display: flex;justify-content: space-between">
-                    <span>湿度:{{item.humidity}}</span>
+                  <div style="display: flex;justify-content: space-between;align-items: center">
+                    <span>湿度:{{item.humidityValue}}%RH</span>
                     <el-button type="primary" plain style="margin-left: 15px" @click="openData('湿度',item)">历史数据</el-button>
                   </div>
                 </div>
@@ -50,7 +46,7 @@
 <!--        </el-col>-->
 <!--      </el-row>-->
     </el-scrollbar>
-    <el-empty v-else></el-empty>
+    <el-empty v-else description="暂无设备数据" ></el-empty>
     <d-dialog ref="dialogRef" @getList="getListAll"></d-dialog>
   </div>
 </template>
@@ -59,86 +55,56 @@
 import {onMounted, reactive, ref, toRefs} from "vue";
 import {ElMessage} from "element-plus";
 import dDialog from './components/dataDialog.vue'
+import {getDevice, getRoomByCompany} from "@/api/company/warehouse";
+import Cookies from "js-cookie";
 
 const dialogRef = ref(null)
 const state = reactive({
   queryParams: {
-    pageNum: 1,
+    pageIndex: 1,
     pageSize: 5,
-    warningType: ''
+    filter: {
+      companyName: ''
+    }
   },
   cardQueryParams: {
-    warningType: ''
+    pageIndex: 1,
+    pageSize: 5,
+    filter: {
+      companyCode : ''
+    }
   },
   total: 0,
-  dataList: [
-    {
-      id: 1,
-      room: '仓库名称',
-      stock: '库存名称',
-      device: '设备1',
-      humidity: '18%RH',
-      warm: '18°'
-    },
-    {
-      id: 1,
-      room: '仓库名称',
-      stock: '库存名称',
-      device: '设备1',
-      humidity: '18%RH',
-      warm: '18°'
-    },
-    {
-      id: 1,
-      room: '仓库名称',
-      stock: '库存名称',
-      device: '设备1',
-      humidity: '18%RH',
-      warm: '18°'
-    },
-    {
-      id: 1,
-      room: '仓库名称',
-      stock: '库存名称',
-      device: '设备1',
-      humidity: '18%RH',
-      warm: '18°'
-    },
-    {
-      id: 1,
-      room: '仓库名称',
-      stock: '库存名称',
-      device: '设备1',
-      humidity: '18%RH',
-      warm: '18°'
-    },
-  ],
+  dataList: [],
   tableList: []
 });
 const { queryParams,cardQueryParams, total, dataList } = toRefs(state);
 const loading = ref(false);
 onMounted(()=>{
+  const info = JSON.parse(Cookies.get('userInfo'))
+  state.queryParams.filter.companyName = info.company
+  state.cardQueryParams.filter.companyCode = info.companynumber
   getListPage()
   getList()
 })
 const getListPage = async () => {
-  // loading.value = true
-  // const res = await getAvoidInfoPage(state.queryParams)
-  // if(res.code == 200){
-  //   state.tableList = res.data.list
-  //   state.total = res.data.total
-  // }else{
-  //   ElMessage.warning(res.message)
-  // }
-  // loading.value = false
+  loading.value = true
+  const res = await getRoomByCompany(state.queryParams)
+  if(res.code == 200){
+    state.tableList = res.result.records
+    state.total = res.result.total
+  }else{
+    ElMessage.warning(res.message)
+  }
+  loading.value = false
 }
 const getList = async () => {
-  // const res = await getAvoidList(state.cardQueryParams)
-  // if(res.code == 200){
-  //   state.dataList = res.data
-  // }else{
-  //   ElMessage.warning(res.message)
-  // }
+  const res = await getDevice(state.cardQueryParams)
+  if(res.code == 200){
+    state.dataList = res.result
+  }else{
+    ElMessage.warning(res.message)
+  }
 }
 const openData = (type,val) => {
   dialogRef.value.openDialog(type,val);
@@ -159,6 +125,14 @@
     margin-bottom: 10px;
     //min-width: 300px;
   }
+  .grid-container{
+    display: grid;
+    grid-template-columns: repeat(auto-fill, minmax(385px, 1fr));
+    gap: 0px;
+    justify-content: start;
+    padding: 15px;
+    background: #f7f7f7;
+  }
   .title-font{
     display:flex;
     align-items: center;
@@ -166,47 +140,6 @@
     font-size: 14px;
     margin-right: 10px;
     border-radius: 5px
-  }
-  .card-item-red{
-    cursor: pointer;
-    color: #f56c6c;
-    background-color: rgb(254, 240.3, 240.3);
-    border: 1px solid rgb(253, 225.6, 225.6);
-  }
-  .card-item-red-title{
-    cursor: pointer;
-    color: #f56c6c;
-    background-color: rgb(254, 240.3, 240.3);
-    border: 1px solid rgb(253, 225.6, 225.6);
-  }
-  .card-item-red-titleChoose{
-    color: #f6d1d1;
-    background-color: #f55d5d;
-  }
-  .card-item-yellow{
-    color: #e6a23c;
-    background-color: rgb(252.5, 245.7, 235.5);
-    border: 1px solid rgb(250, 236.4, 216);
-  }
-  .card-item-yellow-title{
-    cursor: pointer;
-    color: #f1950b;
-    background-color: rgb(252.5, 245.7, 235.5);
-    border: 1px solid rgb(250, 236.4, 216);
-  }
-  .card-item-yellow-titleChoose{
-    color: #f6e7d1;
-    background-color: #f1a902;
-  }
-  .card-item-blue-title{
-    cursor: pointer;
-    color: #409eff;
-    background-color: rgb(235.9, 245.3, 255);
-    border: 1px solid rgb(216.8, 235.6, 255);
-  }
-  .card-item-blue-titleChoose{
-    color: #d7e6f6;
-    background-color: #2da0ef;
   }
   :deep(.is-horizontal) {
     height: 0;
diff --git a/src/views/firework/warehouse/components/addRoomDialog.vue b/src/views/firework/warehouse/components/addRoomDialog.vue
new file mode 100644
index 0000000..0752a24
--- /dev/null
+++ b/src/views/firework/warehouse/components/addRoomDialog.vue
@@ -0,0 +1,231 @@
+<template>
+  <div class="notice">
+    <el-dialog
+        v-model="dialogVisible"
+        width="750px"
+        :before-close="handleClose"
+        :close-on-press-escape="false"
+        :close-on-click-modal="false"
+    >
+      <template #header>
+        <div style="text-align: center; width: 100%;font-size: 18px;font-weight: 600">
+          <span>{{title}}库房</span>
+        </div>
+      </template>
+      <el-form :model="state.form" size="default" ref="busRef" :rules="state.formRules" label-width="117px" >
+        <el-form-item>
+          <div style="font-size: 16px;font-weight: 600;margin-top: -25px;margin-left: -110px;margin-bottom: -15px">库房基本信息</div>
+        </el-form-item>
+        <el-row :gutter="24">
+          <el-col :span="12">
+            <el-form-item label="库房名称:" prop="storeroomName" >
+              <el-input v-model="state.form.storeroomName" placeholder="请输入库房名称"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="仓库编号:" prop="storeNum" >
+              <el-input v-model="state.form.storeNum" disabled ></el-input>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row :gutter="24">
+          <el-col :span="12">
+            <el-form-item label="核定药量:" prop="dosage" >
+              <el-input v-model="state.form.dosage" type="number" min="0" placeholder="请输入核定药量">
+                <template #append>kg</template>
+              </el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="危险等级:" prop="dangerLevel" >
+              <el-select
+                  v-model="state.form.dangerLevel"
+                  placeholder="请选择"
+                  style="width: 100%"
+              >
+                <el-option
+                    v-for="item in state.typeList"
+                    :key="item.id"
+                    :label="item.name"
+                    :value="item.id"
+                />
+              </el-select>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row :gutter="24">
+          <el-col :span="12">
+            <el-form-item label="核定人员数量:" prop="personLimit" >
+              <el-input v-model="state.form.personLimit" placeholder="请输入核定人员数量" @input="state.form.personLimit= state.form.personLimit.replace(/[^\d]/g,'')"></el-input>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+      <template #footer>
+        <span class="dialog-footer">
+            <el-button @click="handleClose" size="default">取 消</el-button>
+            <el-button type="primary"  @click="onSubmit" size="default" v-preReClick>确认</el-button>
+        </span>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+<script setup>
+import {reactive, ref, toRefs} from 'vue'
+import {ElMessage} from "element-plus";
+import {listDept} from "@/api/system/dept";
+import {listUser} from "@/api/system/user";
+import {addTemplate, editTemplate} from "@/api/signAgreement/template";
+import {addType, editType, getSignType} from "@/api/signAgreement/signType";
+import {getInfo} from "@/api/login";
+import {getToken} from "@/utils/auth";
+import {verifyPhone} from "@/utils/validate";
+import Cookies from "js-cookie";
+import {addRoom, addWarehouse} from "@/api/company/warehouse";
+
+const uploadFileUrl = ref(import.meta.env.VITE_APP_BASE_API + "/common/upload"); // 上传文件服务器地址
+const { proxy } = getCurrentInstance();
+const dialogVisible = ref(false);
+const title = ref("");
+const busRef = ref();
+const length = ref()
+const emit = defineEmits(["getList"]);
+const startPhone = ref('');
+const state = reactive({
+  form: {
+    id: '',
+    dangerLevel:null,
+    companyCode: '',
+    storeNum: '',
+    storeroomName: '',
+    personLimit: null,
+    dosage: null
+  },
+  typeList: [
+    {
+      id: 1,
+      name: '1.1级库房'
+    },
+    {
+      id: 2,
+      name: '1.3级库房'
+    },
+    {
+      id: 3,
+      name: '无药库房'
+    },
+  ],
+  storeroomList: [],
+  formRules:{
+    acreage: [{ required: true, trigger: "blur", message:'请输入面积' }],
+    dangerLevel: [{ required: true, trigger: "blur",message:'请选择危险等级' }],
+    dosage: [{ required: true, trigger: "blur", message:'请输入核定药量' }],
+    personLimit: [{ required: true, trigger: "blur", message:'请输入核定人员数量' }],
+    storeroomName: [{ required: true, trigger: "blur", message:'请输入库房名称' }],
+    storeNum: [{ required: true, trigger: "blur", message:'请输入仓库编号' }],
+  },
+})
+
+
+const openDialog = async (type,value) => {
+  title.value = type === 'add' ? '新增' : '编辑'
+  const info = JSON.parse(Cookies.get('userInfo'))
+  state.form.companyCode = info.companynumber
+  if(type === 'edit') {
+    const data = JSON.parse(JSON.stringify(value))
+    Object.keys(state.form).forEach(key => {
+      if(data[key]){
+        state.form[key] = data[key]
+      }
+    })
+
+    state.form.dangerLevel = Number(state.form.dangerLevel)
+  }
+  state.form.storeNum = value.storeNum
+  dialogVisible.value = true;
+}
+
+const onSubmit = async () => {
+  console.log('form',state.form)
+  const valid = await busRef.value.validate();
+
+  if(valid){
+    if(title.value === '新增'){
+      const {id,fileList, ...data} = JSON.parse(JSON.stringify(state.form))
+      const res = await addRoom(data)
+      if(res.code == 200){
+        ElMessage({
+          type: 'success',
+          message: '新增成功'
+        });
+      }else{
+        ElMessage.warning(res.message)
+      }
+      emit("getList")
+      busRef.value.clearValidate();
+      reset();
+      dialogVisible.value = false;
+    }else if(title.value === '编辑'){
+      const {...data} = JSON.parse(JSON.stringify(state.form))
+      const res = await addRoom(data)
+      if(res.code == 200){
+        ElMessage({
+          type: 'success',
+          message: '编辑成功'
+        });
+      }else{
+        ElMessage.warning(res.message)
+      }
+      emit("getList")
+      busRef.value.clearValidate();
+      reset();
+      dialogVisible.value = false;
+    }
+
+  }
+}
+
+
+const handleClose = () => {
+  busRef.value.clearValidate();
+  reset();
+  dialogVisible.value = false;
+  emit("getList")
+}
+const reset = () => {
+  state.form = {
+    id: '',
+    dangerLevel:null,
+    companyCode: '',
+    storeNum: '',
+    storeroomName: '',
+    personLimit: null,
+    dosage: null
+  }
+}
+defineExpose({
+  openDialog
+});
+
+</script>
+
+<style scoped lang="scss">
+.notice{
+  :deep(.el-form .el-form-item__label) {
+    font-size: 15px;
+  }
+  :deep(.el-form-item__content) {
+    width: 100%;
+  }
+  .file {
+    display: flex;
+    flex-direction: column;
+    align-items: flex-start;
+  }
+  .custom-iframe {
+    border: 1px solid #9b9999;
+    /* 隐藏原生滚动条 */
+    overflow: hidden;
+  }
+}
+</style>
diff --git a/src/views/firework/warehouse/components/roomDialog.vue b/src/views/firework/warehouse/components/roomDialog.vue
new file mode 100644
index 0000000..af04773
--- /dev/null
+++ b/src/views/firework/warehouse/components/roomDialog.vue
@@ -0,0 +1,168 @@
+<template>
+  <div class="notice">
+    <el-dialog
+        v-model="dialogVisible"
+        width="750px"
+        :before-close="handleClose"
+        :close-on-press-escape="false"
+        :close-on-click-modal="false"
+    >
+
+        <div style=" width: 100%;font-size: 18px;font-weight: 600;margin-bottom: 20px">
+          <span>库房列表</span>
+          <el-button type="primary" style="margin-left: 15px" @click="addProject('add',{})">新增库房</el-button>
+        </div>
+
+      <!-- 表格数据 -->
+      <el-table v-loading="loading" :data="state.dataList" :border="true">
+        <el-table-column label="序号" type="index" align="center" width="80" />
+        <el-table-column label="库房名称" prop="storeroomName" align="center"  />
+        <el-table-column label="仓库编号" prop="storeNum" align="center" />
+        <el-table-column label="危险等级" prop="dangerLevel" align="center" >
+          <template #default="scope">
+            <span>{{scope.row.dangerLevel == 1 ? '1.1级库房' :scope.row.dangerLevel == 2? '1.3级库房' : '无药库房'}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="核定药量" prop="dosage" align="center" />
+        <el-table-column label="核定人员数量" prop="personLimit" align="center" width="120"/>
+        <el-table-column label="创建人" prop="createBy" align="center" />
+        <el-table-column label="创建时间" prop="createDate" align="center" width="120"/>
+        <el-table-column label="修改人" prop="updateBy" align="center" />
+        <el-table-column label="修改时间" prop="updateDate" align="center"  width="120"/>
+        <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="180">
+          <template #default="scope">
+            <el-button link type="primary" @click="addProject('edit',scope.row)">编辑</el-button>
+            <el-button link type="danger" @click="handleDelete(scope.row)">删除</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <pagination
+          v-show="state.total > 0"
+          :total="state.total"
+          v-model:page="state.queryParams.pageIndex"
+          v-model:limit="state.queryParams.pageSize"
+          @pagination="getList"
+      />
+<!--      <template #footer>-->
+<!--        <span class="dialog-footer">-->
+<!--            <el-button @click="handleClose" size="default">取 消</el-button>-->
+<!--        </span>-->
+<!--      </template>-->
+    </el-dialog>
+    <addRoomDia ref="dialogRef" @getList="getList"></addRoomDia>
+  </div>
+</template>
+<script setup>
+import {reactive, ref, toRefs} from 'vue'
+import {ElMessage, ElMessageBox} from "element-plus";
+import addRoomDia from './addRoomDialog.vue'
+import Cookies from "js-cookie";
+import {addWarehouse, delRoom, delWarehouse, getRoom, getWarehouse} from "@/api/company/warehouse";
+
+const { proxy } = getCurrentInstance();
+const dialogVisible = ref(false);
+const title = ref("");
+const busRef = ref();
+const loading = ref(false);
+const length = ref()
+const dialogRef = ref();
+const emit = defineEmits(["getList"]);
+const state = reactive({
+  dataList: [],
+  total: 0,
+  queryParams: {
+    pageIndex: 1,
+    pageSize: 10,
+    filter: {
+      storeNum: '',
+      companyCode: ''
+    }
+  },
+})
+
+const openDialog = async (value) => {
+  const info = JSON.parse(Cookies.get('userInfo'))
+  state.queryParams.filter.companyCode = info.companynumber
+  state.queryParams.filter.storeNum = value.storeNum
+  await getList()
+  dialogVisible.value = true;
+}
+const getList = async () => {
+  loading.value = true
+  const res = await getRoom(state.queryParams)
+  if(res.code == 200){
+    state.dataList = res.result.records
+    state.total = res.result.total
+  }else{
+    ElMessage.warning(res.message)
+  }
+  loading.value = false
+}
+const handleClose = () => {
+  reset();
+  dialogVisible.value = false;
+  emit("getList")
+}
+const reset = () => {
+  state.queryParams = {
+    pageIndex: 1,
+    pageSize: 10,
+    filter: {
+      storeNum: '',
+      companyCode: ''
+    }
+  }
+  state.dataList = []
+}
+const addProject = (type,value) => {
+  value.storeNum = state.queryParams.filter.storeNum
+  dialogRef.value.openDialog(type,value)
+}
+const handleDelete = (val) => {
+  ElMessageBox.confirm(
+      '确定删除此条数据?',
+      '提示',
+      {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning',
+      })
+      .then( async() => {
+        const param = {
+          id: val.id
+        }
+        const res = await delRoom(param)
+        if(res.code == 200){
+          ElMessage.success('数据删除成功')
+          await getList()
+        }else{
+          ElMessage.warning(res.message)
+        }
+      })
+}
+defineExpose({
+  openDialog
+});
+
+</script>
+
+<style scoped lang="scss">
+.notice{
+  :deep(.el-form .el-form-item__label) {
+    font-size: 15px;
+  }
+  :deep(.el-form-item__content) {
+    width: 100%;
+  }
+  .file {
+    display: flex;
+    flex-direction: column;
+    align-items: flex-start;
+  }
+  .custom-iframe {
+    border: 1px solid #9b9999;
+    /* 隐藏原生滚动条 */
+    overflow: hidden;
+  }
+}
+</style>
diff --git a/src/views/firework/warehouse/components/warehouseDialog.vue b/src/views/firework/warehouse/components/warehouseDialog.vue
index c21769b..11e4932 100644
--- a/src/views/firework/warehouse/components/warehouseDialog.vue
+++ b/src/views/firework/warehouse/components/warehouseDialog.vue
@@ -2,7 +2,7 @@
   <div class="notice">
     <el-dialog
         v-model="dialogVisible"
-        width="900px"
+        width="750px"
         :before-close="handleClose"
         :close-on-press-escape="false"
         :close-on-click-modal="false"
@@ -18,33 +18,37 @@
         </el-form-item>
         <el-row :gutter="24">
           <el-col :span="12">
-            <el-form-item label="仓库名称:" prop="name" >
-              <el-input v-model="state.form.name" placeholder="请输入仓库名称"></el-input>
+            <el-form-item label="仓库名称:" prop="storeName" >
+              <el-input v-model="state.form.storeName" placeholder="请输入仓库名称"></el-input>
             </el-form-item>
           </el-col>
           <el-col :span="12">
-            <el-form-item label="仓库面积:" prop="name" >
-              <el-input v-model="state.form.name" placeholder="请输入仓库面积"></el-input>
+            <el-form-item label="仓库面积:" prop="acreage" >
+              <el-input v-model="state.form.acreage" type="number" min="0" placeholder="请输入仓库面积">
+                <template #append>㎡</template>
+              </el-input>
             </el-form-item>
           </el-col>
         </el-row>
         <el-row :gutter="24">
           <el-col :span="12">
-            <el-form-item label="仓库编号:" prop="name" >
-              <el-input v-model="state.form.name" placeholder="请输入仓库编号"></el-input>
+            <el-form-item label="仓库编号:" prop="storeNum" >
+              <el-input v-model="state.form.storeNum" placeholder="请输入仓库编号"></el-input>
             </el-form-item>
           </el-col>
           <el-col :span="12">
-            <el-form-item label="核定药量:" prop="name" >
-              <el-input v-model="state.form.name" placeholder="请输入核定药量"></el-input>
+            <el-form-item label="核定药量:" prop="dosage" >
+              <el-input v-model="state.form.dosage" type="number" min="0" placeholder="请输入核定药量">
+                <template #append>kg</template>
+              </el-input>
             </el-form-item>
           </el-col>
         </el-row>
         <el-row :gutter="24">
           <el-col :span="12">
-            <el-form-item label="危险等级:" prop="name" >
+            <el-form-item label="危险等级:" prop="dangerLevel" >
               <el-select
-                  v-model="state.form.typeId"
+                  v-model="state.form.dangerLevel"
                   placeholder="请选择"
                   style="width: 100%"
               >
@@ -58,91 +62,12 @@
             </el-form-item>
           </el-col>
           <el-col :span="12">
-            <el-form-item label="核定人员数量:" prop="name" >
-              <el-input v-model="state.form.name" placeholder="请输入核定人员数量"></el-input>
+            <el-form-item label="核定人员数量:" prop="personLimit" >
+              <el-input v-model="state.form.personLimit" placeholder="请输入核定人员数量" @input="state.form.personLimit= state.form.personLimit.replace(/[^\d]/g,'')"></el-input>
             </el-form-item>
           </el-col>
         </el-row>
       </el-form>
-      <div style="display: flex;align-items: center">
-        <div style="font-size: 16px;font-weight: 600;margin: 10px">库房列表</div>
-        <el-button style="margin-left: 10px" type="primary" @click="addRoom">新增库房</el-button>
-      </div>
-      <el-table :data="state.storeroomList" style="width: 100%;margin-top: 15px" border>
-        <el-table-column label="序号" type="index" align="center" width="80" />
-        <el-table-column prop="name" label="库房名称" align="center">
-          <template #default="{ row }">
-            <el-form :model="row" :rules="rules">
-              <el-form-item prop="name">
-                <el-input
-                    v-model="row.name"
-                />
-              </el-form-item>
-            </el-form>
-          </template>
-        </el-table-column>
-        <el-table-column prop="code" label="库房编号" align="center">
-          <template #default="{ row }">
-            <el-form :model="row" :rules="rules">
-              <el-form-item prop="code">
-                <el-input
-                    v-model="row.code"
-                />
-              </el-form-item>
-            </el-form>
-          </template>
-        </el-table-column>
-        <el-table-column prop="area" label="面积" align="center">
-          <template #default="{ row }">
-            <el-form :model="row" :rules="rules">
-              <el-form-item prop="area">
-                <el-input
-                    v-model="row.area"
-                />
-              </el-form-item>
-            </el-form>
-          </template>
-        </el-table-column>
-        <el-table-column prop="level" label="危险等级" align="center">
-          <template #default="{ row }">
-            <el-form :model="row" :rules="rules">
-              <el-form-item prop="level">
-                <el-input
-                    v-model="row.level"
-                />
-              </el-form-item>
-            </el-form>
-          </template>
-        </el-table-column>
-        <el-table-column prop="level" label="核定药量" align="center">
-          <template #default="{ row }">
-            <el-form :model="row" :rules="rules">
-              <el-form-item prop="level">
-                <el-input
-                    v-model="row.level"
-                />
-              </el-form-item>
-            </el-form>
-          </template>
-        </el-table-column>
-        <el-table-column prop="num" label="核定人员" align="center">
-          <template #default="{ row }">
-            <el-form :model="row" :rules="rules" >
-              <el-form-item prop="num" >
-                <el-input
-                    v-model="row.num"
-
-                />
-              </el-form-item>
-            </el-form>
-          </template>
-        </el-table-column>
-        <el-table-column label="操作" align="center" class-name="small-padding fixed-width" >
-          <template #default="scope">
-            <el-button link type="danger" @click="delRoom(scope.row)">删除</el-button>
-          </template>
-        </el-table-column>
-      </el-table>
       <template #footer>
         <span class="dialog-footer">
             <el-button @click="handleClose" size="default">取 消</el-button>
@@ -162,6 +87,8 @@
 import {getInfo} from "@/api/login";
 import {getToken} from "@/utils/auth";
 import {verifyPhone} from "@/utils/validate";
+import Cookies from "js-cookie";
+import {addWarehouse} from "@/api/company/warehouse";
 
 const uploadFileUrl = ref(import.meta.env.VITE_APP_BASE_API + "/common/upload"); // 上传文件服务器地址
 const { proxy } = getCurrentInstance();
@@ -171,66 +98,55 @@
 const length = ref()
 const emit = defineEmits(["getList"]);
 const startPhone = ref('');
-const validateUserPhone = (rule, value, callback)=>{
-  if(value === ''){
-    callback(new Error('请输入手机号'))
-  }else if(state.title == '编辑' && value == startPhone.value){
-    callback()
-  } else{
-    if(!verifyPhone(value)){
-      callback(new Error('手机号格式有误'))
-    }
-  }
-}
 const state = reactive({
   form: {
     id: '',
-    name: '',
-    typeId:null,
-    phone: '',
+    acreage: '',
+    dangerLevel:null,
+    companyCode: '',
+    storeNum: '',
+    storeName: '',
+    personLimit: null,
+    dosage: null
   },
   typeList: [
     {
       id: 1,
-      name: '法定代表人'
+      name: '1.1级库房'
     },
     {
       id: 2,
-      name: '主要负责人'
+      name: '1.3级库房'
     },
     {
       id: 3,
-      name: '安全负责人'
-    },
-    {
-      id: 4,
-      name: '保管员'
-    },
-    {
-      id: 5,
-      name: '守护员'
+      name: '无药库房'
     },
   ],
   storeroomList: [],
   formRules:{
-    name: [{ required: true, trigger: "blur", message:'请输入姓名' }],
-    phone: [{ required: true, trigger: "blur", validator: validateUserPhone }],
-    typeId: [{ required: true, trigger: "blur", message:'请选择人员类型' }],
+    acreage: [{ required: true, trigger: "blur", message:'请输入面积' }],
+    dangerLevel: [{ required: true, trigger: "blur",message:'请选择危险等级' }],
+    dosage: [{ required: true, trigger: "blur", message:'请输入核定药量' }],
+    personLimit: [{ required: true, trigger: "blur", message:'请输入核定人员数量' }],
+    storeName: [{ required: true, trigger: "blur", message:'请输入仓库名称' }],
+    storeNum: [{ required: true, trigger: "blur", message:'请输入仓库编号' }],
   },
 })
-const rules = {
-  name: [
-    { required: true, message: "姓名不能为空", trigger: "blur" },
-  ],
-};
-
 
 
 const openDialog = async (type,value) => {
   title.value = type === 'add' ? '新增' : '编辑'
+  const info = JSON.parse(Cookies.get('userInfo'))
+  state.form.companyCode = info.companynumber
   if(type === 'edit') {
-    state.form = JSON.parse(JSON.stringify(value))
-    startPhone.value = value.phone
+    const data = JSON.parse(JSON.stringify(value))
+    Object.keys(state.form).forEach(key => {
+      if(data[key]){
+        state.form[key] = data[key]
+      }
+    })
+    state.form.dangerLevel = Number(state.form.dangerLevel)
   }
   dialogVisible.value = true;
 }
@@ -242,30 +158,30 @@
   if(valid){
     if(title.value === '新增'){
       const {id,fileList, ...data} = JSON.parse(JSON.stringify(state.form))
-      // const res = await addTemplate(data)
-      // if(res.code === 200){
-      //   ElMessage({
-      //     type: 'success',
-      //     message: '新增成功'
-      //   });
-      // }else{
-      //   ElMessage.warning(res.message)
-      // }
+      const res = await addWarehouse(data)
+      if(res.code == 200){
+        ElMessage({
+          type: 'success',
+          message: '新增成功'
+        });
+      }else{
+        ElMessage.warning(res.message)
+      }
       emit("getList")
       busRef.value.clearValidate();
       reset();
       dialogVisible.value = false;
     }else if(title.value === '编辑'){
       const {...data} = JSON.parse(JSON.stringify(state.form))
-      const res = await editTemplate(data)
-      // if(res.code === 200){
-      //   ElMessage({
-      //     type: 'success',
-      //     message: '编辑成功'
-      //   });
-      // }else{
-      //   ElMessage.warning(res.message)
-      // }
+      const res = await addWarehouse(data)
+      if(res.code == 200){
+        ElMessage({
+          type: 'success',
+          message: '编辑成功'
+        });
+      }else{
+        ElMessage.warning(res.message)
+      }
       emit("getList")
       busRef.value.clearValidate();
       reset();
@@ -304,9 +220,13 @@
 const reset = () => {
   state.form = {
     id: '',
-    name: '',
-    typeId:null,
-    phone: '',
+    acreage: '',
+    dangerLevel:null,
+    companyCode: '',
+    storeNum: '',
+    storeName: '',
+    personLimit: null,
+    dosage: null
   }
   state.storeroomList = []
 }
diff --git a/src/views/firework/warehouse/index.vue b/src/views/firework/warehouse/index.vue
index 52eaff2..d2cf442 100644
--- a/src/views/firework/warehouse/index.vue
+++ b/src/views/firework/warehouse/index.vue
@@ -9,7 +9,7 @@
               icon="Plus"
               @click="addProject('add',{})"
           >
-            新增
+            新增仓库
           </el-button>
         </el-form-item>
         <!--        <el-form-item label="姓名:" >-->
@@ -31,19 +31,24 @@
     <!-- 表格数据 -->
     <el-table v-loading="loading" :data="dataList" :border="true">
       <el-table-column label="序号" type="index" align="center" width="80" />
-      <el-table-column label="仓库名称" prop="name" align="center"  />
-      <el-table-column label="仓库编号" prop="type" align="center" />
-      <el-table-column label="面积" prop="phone" align="center" />
-      <el-table-column label="危险等级" prop="createBy" align="center" />
-      <el-table-column label="核定药量" prop="createBy" align="center" />
-      <el-table-column label="核定人员" prop="updateBy" align="center" />
-      <el-table-column label="创建人" prop="createTime" align="center" />
-      <el-table-column label="创建时间" prop="updateTime" align="center" />
+      <el-table-column label="仓库名称" prop="storeName" align="center"  />
+      <el-table-column label="仓库编号" prop="storeNum" align="center" />
+      <el-table-column label="面积" prop="acreage" align="center" />
+      <el-table-column label="危险等级" prop="dangerLevel" align="center" >
+        <template #default="scope">
+          <span>{{scope.row.dangerLevel == 1 ? '1.1级库房' :scope.row.dangerLevel == 2? '1.3级库房' : '无药库房'}}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="核定药量" prop="dosage" align="center" />
+      <el-table-column label="核定人员数量" prop="personLimit" align="center" width="120"/>
+      <el-table-column label="创建人" prop="createBy" align="center" />
+      <el-table-column label="创建时间" prop="createDate" align="center" width="120"/>
       <el-table-column label="修改人" prop="updateBy" align="center" />
-      <el-table-column label="修改时间" prop="updateTime" align="center" />
-      <el-table-column label="操作" align="center" class-name="small-padding fixed-width" >
+      <el-table-column label="修改时间" prop="updateDate" align="center"  width="120"/>
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="180">
         <template #default="scope">
           <el-button link type="primary" @click="addProject('edit',scope.row)">编辑</el-button>
+          <el-button link type="primary" @click="handleRoom(scope.row)">管理库房</el-button>
           <el-button link type="danger" @click="handleDelete(scope.row)">删除</el-button>
         </template>
       </el-table-column>
@@ -56,6 +61,7 @@
         @pagination="getList"
     />
     <warehouseDialog ref="dialogRef" @getList="getList"></warehouseDialog>
+    <room-dialog ref="roomRef" @getList="getList"></room-dialog>
   </div>
 </template>
 
@@ -63,12 +69,14 @@
 import {getCurrentInstance, onMounted, onUnmounted, reactive, ref, toRefs} from "vue";
 import {ElMessage, ElMessageBox} from "element-plus";
 import warehouseDialog from './components/warehouseDialog.vue'
-import {delTemplate, getTemplate} from "@/api/signAgreement/template";
-import {getWarning} from "@/api/company/warning";
+import roomDialog from './components/roomDialog.vue'
 import Cookies from "js-cookie";
+import {delWarehouse, getWarehouse} from "@/api/company/warehouse";
+import {subPixelOptimize} from "zrender/lib/graphic/helper/subPixelOptimize";
 const { proxy } = getCurrentInstance();
 const loading = ref(false);
 const dialogRef = ref();
+const roomRef = ref()
 const createSignRef = ref();
 const data = reactive({
   queryParams: {
@@ -100,7 +108,7 @@
 }
 const getList = async () => {
   loading.value = true
-  const res = await getWarning(data.queryParams)
+  const res = await getWarehouse(data.queryParams)
   if(res.code == 200){
     data.dataList = res.result.records
     data.total = res.result.total
@@ -132,7 +140,10 @@
         type: 'warning',
       })
       .then( async() => {
-        const res = await delTemplate(val.id)
+        const param = {
+          id: val.id
+        }
+        const res = await delWarehouse(param)
         if(res.code == 200){
           ElMessage.success('数据删除成功')
           await getList()
@@ -142,8 +153,9 @@
       })
 }
 
-
-
+const handleRoom = (val) => {
+  roomRef.value.openDialog(val)
+}
 const getRowKeys = (row) => {
   return row.name
 }

--
Gitblit v1.9.2