From e29932c247871e8921b210e311c8ea4a57d721ce Mon Sep 17 00:00:00 2001
From: zhouwx <1175765986@qq.com>
Date: 星期三, 26 二月 2025 17:29:17 +0800
Subject: [PATCH] bug修改

---
 .env.development                                                                   |    5 
 src/views/hazardousChemicals/avoidWarning/components/avoidDialog.vue               |  192 ++++++++++++++++++++++++
 src/views/hazardousChemicals/systemManage/classifyInfoTable/index.vue              |    2 
 src/views/hazardousChemicals/electronicWarehouse/components/rawWarehouseRecord.vue |    2 
 src/views/hazardousChemicals/avoidWarning/index.vue                                |  197 +++++++++++++++---------
 src/api/hazardousChemicals/avoid.js                                                |   25 +++
 src/views/hazardousChemicals/electronicWarehouse/components/rawTable.vue           |    4 
 src/views/hazardousChemicals/electronicWarehouse/components/rawDetail.vue          |    2 
 8 files changed, 349 insertions(+), 80 deletions(-)

diff --git a/.env.development b/.env.development
index c2994dd..19560f9 100644
--- a/.env.development
+++ b/.env.development
@@ -11,7 +11,10 @@
 VITE_APP_RESOURCE_API = 'http://192.168.2.16:9000/trainexam/'
 
 #董
-VITE_APP_BASE_API = 'http://192.168.2.24:8083/api'
+#VITE_APP_BASE_API = 'http://192.168.2.24:8083/api'
+
+#贺
+VITE_APP_BASE_API = 'http://192.168.2.11:5812/api'
 
 #线上
 #VITE_APP_BASE_API = 'http://47.108.222.15:8001/api'
diff --git a/src/api/hazardousChemicals/avoid.js b/src/api/hazardousChemicals/avoid.js
new file mode 100644
index 0000000..5b1ea1c
--- /dev/null
+++ b/src/api/hazardousChemicals/avoid.js
@@ -0,0 +1,25 @@
+import request from '@/utils/request'
+
+export function getAvoidInfoPage(params) {
+    return request({
+        url: '/taBooWarning/pageList',
+        method: 'get',
+        params: params
+    })
+}
+
+export function getAvoidList(params) {
+    return request({
+        url: '/taBooWarning/list',
+        method: 'get',
+        params: params
+    })
+}
+
+export function handleAvoid(data) {
+    return request({
+        url: '/taBooWarning/entryTransfer',
+        method: 'post',
+        data: data
+    })
+}
diff --git a/src/views/hazardousChemicals/avoidWarning/components/avoidDialog.vue b/src/views/hazardousChemicals/avoidWarning/components/avoidDialog.vue
new file mode 100644
index 0000000..dde3ef0
--- /dev/null
+++ b/src/views/hazardousChemicals/avoidWarning/components/avoidDialog.vue
@@ -0,0 +1,192 @@
+<template>
+  <div class="notice">
+    <el-dialog
+        v-model="dialogVisible"
+        :title="title"
+        width="500px"
+        :before-close="handleClose"
+        :close-on-press-escape="false"
+        :close-on-click-modal="false"
+    >
+      <el-form :model="state.form" size="default" ref="busRef" :rules="state.formRules" label-width="150px" >
+        <el-form-item label="危化品品名:" prop="basicName" >
+          <el-input disabled v-model.trim="state.form.basicName" ></el-input>
+        </el-form-item>
+        <el-form-item label="相忌危化品:" prop="hazmatBasicName" >
+          <el-input disabled v-model.trim="state.form.tabooBasicName" ></el-input>
+        </el-form-item>
+        <el-form-item label="仓库:" prop="warehouseName" >
+          <el-select
+              clearable
+              v-model="state.form.warehouseName"
+              filterable
+              remote
+              reserve-keyword
+              placeholder="请输入所入仓库"
+              remote-show-suffix
+              :remote-method="getWareHouseList"
+              style="width: 100%"
+              @change="selectWareValue"
+          >
+            <el-option
+                v-for="item in state.wareHouseList"
+                :key="item.id"
+                :label="item.name"
+                :value="item.name"
+            />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="存储柜:" prop="cupboardId" >
+          <el-select
+              v-model="state.form.cupboardId"
+              placeholder="请选择存储柜"
+              style="width: 100%"
+          >
+            <el-option
+                v-for="item in state.cupList"
+                :key="item.id"
+                :label="item.cupboardName"
+                :value="item.id"
+            />
+          </el-select>
+        </el-form-item>
+      </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 {getCupById, getWarehouse} from "@/api/hazardousChemicals/warehouse";
+import {handleAvoid} from "@/api/hazardousChemicals/avoid";
+const dialogVisible = ref(false);
+const title = ref("");
+const busRef = ref();
+const length = ref()
+const emit = defineEmits(["getList"]);
+const state = reactive({
+  form: {
+    id: '',
+    tabooBasicName: '',
+    warehouseName: '',
+    warehouseId: '',
+    cupboardId: ''
+  },
+  formRules:{
+    warehouseName: [{ required: true, trigger: "blur", message: '请选择仓库' }],
+    cupboardId: [{ required: true, trigger: "blur", message: '请选择存储柜' }],
+  },
+})
+
+
+const openDialog = async (value) => {
+  await getWareHouseList("")
+  await getCupList(value.warehouseId)
+  title.value = '相忌报警处理'
+  state.form = JSON.parse(JSON.stringify(value));
+  dialogVisible.value = true;
+}
+
+const onSubmit = async () => {
+  const valid = await busRef.value.validate();
+  if(valid){
+    const param = {
+      cupboardId: state.form.cupboardId,
+      id: state.form.id,
+      warehouseId:state.form.warehouseId
+    }
+    const res = await handleAvoid(param)
+    if(res.code === 200){
+      ElMessage({
+        type: 'success',
+        message: '处理成功'
+      });
+    }else{
+      ElMessage.warning(res.message)
+    }
+    emit("getList")
+    busRef.value.clearValidate();
+    reset();
+    dialogVisible.value = false;
+  }
+}
+const getWareHouseList = async (val) => {
+  let param = {}
+  if(val != ""){
+    param = {
+      name: val
+    }
+  }else {
+    param = {
+      pageNum: 1,
+      pageSize: 10
+    }
+  }
+  const res = await getWarehouse(param)
+  if(res.code == 200){
+    state.wareHouseList = res.data.list.map(item => {
+      return {
+        ...item,
+        children: item.warehouseCupboards && item.warehouseCupboards.length>0 ? item.warehouseCupboards : null
+      }
+    })
+  }else{
+    ElMessage.warning(res.message)
+  }
+}
+const selectWareValue = (val) => {
+  state.form.cupboardId = null
+  state.wareHouseList.forEach(item => {
+    if(item.name === val){
+      state.form.warehouseId = item.id
+      getCupList(item.id)
+    }
+  })
+}
+const getCupList = async (val) => {
+  const res = await getCupById(val)
+  if(res.code == 200) {
+    state.cupList = res.data
+  }else {
+    ElMessage.warning(res.message)
+  }
+}
+
+const handleClose = () => {
+  busRef.value.clearValidate();
+  reset();
+  dialogVisible.value = false;
+  emit("getList")
+}
+const reset = () => {
+  state.form = {
+    id: '',
+    hazmatBasicName: '',
+    warehouseName: '',
+    cupboardId: ''
+  }
+}
+defineExpose({
+  openDialog
+});
+
+</script>
+
+<style scoped lang="scss">
+.notice{
+  :deep(.el-form .el-form-item__label) {
+    font-size: 15px;
+  }
+  .file {
+    display: flex;
+    flex-direction: column;
+    align-items: flex-start;
+  }
+}
+</style>
diff --git a/src/views/hazardousChemicals/avoidWarning/index.vue b/src/views/hazardousChemicals/avoidWarning/index.vue
index 9cb4d7b..0502bb2 100644
--- a/src/views/hazardousChemicals/avoidWarning/index.vue
+++ b/src/views/hazardousChemicals/avoidWarning/index.vue
@@ -1,120 +1,136 @@
 <template>
   <div class="app-container">
 <!--    卡片部分-->
-    <div style="margin-bottom: 10px;display: flex;align-items: center;justify-content: space-between">
-      <div style="font-weight: 600;font-size: 22px">实时报警状态</div>
+    <div style="margin-bottom: 10px;display: flex;align-items: center;justify-content: space-between" >
+      <div style="font-weight: 600;font-size: 20px">实时报警状态</div>
       <div style="display: flex;align-items: center">
-        <div class="card-item-red title-font">
-          <el-icon><WarnTriangleFilled /></el-icon>
+        <div class="title-font" style="cursor: pointer" :class="cardQueryParams.warningType == '' ? 'card-item-blue-titleChoose' : 'card-item-blue-title'"  @click="chooseType('')">
+          全部
+        </div>
+        <div class=" title-font" style="cursor: pointer" :class="cardQueryParams.warningType == 1 ? 'card-item-red-titleChoose' : 'card-item-red-title'"  @click="chooseType('red')">
+          <el-icon style="margin-right: 3px"><WarnTriangleFilled /></el-icon>
           高危报警
         </div>
-        <div class="card-item-yellow title-font">
-          <el-icon><WarningFilled /></el-icon>
+        <div class=" title-font" style="cursor: pointer" :class="cardQueryParams.warningType == 2 ? 'card-item-yellow-titleChoose' : 'card-item-yellow-title'" @click="chooseType('yellow')">
+          <el-icon style="margin-right: 3px"><WarningFilled /></el-icon>
           中等风险
         </div>
       </div>
     </div>
-    <el-scrollbar max-height="420px" style="padding-right: 10px;overflow-x: hidden;">
+    <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">
-          <el-card class="card-item " :class= "item.level == 1 ? 'card-item-red' : 'card-item-yellow' "  shadow="always">{{ item.name }}</el-card>
+          <el-card class="card-item " :class= "item.warningType == 1 ? 'card-item-red' : 'card-item-yellow' "  shadow="always">
+            <div style="display: flex;align-items: center;justify-content: space-between">
+                {{item.basicName}}
+              <el-tag :color="item.warningType == 1 ? '#FBACAC' : '#FBD59A'" :type="item.warningType == 1 ? 'danger' : 'warning'">{{ item.warningType == 1 ? '危险' : '警告'  }}</el-tag>
+            </div>
+            <div style="margin-top: 10px">相忌试剂:{{ item.tabooBasicName }}</div>
+            <div style="margin-top: 10px">存储位置:{{item.warehouseName}}——{{item.cupboardName}}</div>
+            <el-button style="margin-top: 15px;float: right;color: white;margin-bottom: 5px" :color="item.warningType == 1 ? '#ef8a8a' : '#efb965'" @click="handle(item)">立即处理</el-button>
+
+          </el-card>
         </el-col>
       </el-row>
     </el-scrollbar>
+    <el-empty v-else></el-empty>
 <!--    表格部分-->
-    <div style="font-weight: 600;font-size: 22px;margin-top: 25px">最近报警记录</div>
+    <div style="font-weight: 600;font-size: 20px;margin-top: 25px">最近报警记录</div>
     <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="name" align="center"  />
-        <el-table-column label="相忌试剂" prop="remark" align="center" />
-        <el-table-column label="储存位置" prop="remark" align="center" />
-        <el-table-column label="风险等级" prop="remark" align="center" />
-        <el-table-column label="处理状态" prop="remark" align="center" />
-        <el-table-column label="处理人" prop="remark" align="center" />
+        <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="储存位置" align="center" >
+          <template  #default="scope">
+            <span>{{scope.row.warehouseName}}——{{scope.row.cupboardName}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="风险等级"  align="center" >
+          <template #default="scope">
+            <el-tag type="danger" v-if="scope.row.warningType == 1">高危</el-tag>
+            <el-tag type="warning" v-else>中等</el-tag>
+          </template>
+        </el-table-column>
+        <el-table-column label="处理状态"  align="center" >
+          <template #default="scope">
+            <span>{{scope.row.state == 0 ? '未处理' : '已处理'}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="处理人" prop="updateBy" align="center" />
       </el-table>
       <pagination
           v-show="total > 0"
           :total="total"
           v-model:page="queryParams.pageNum"
           v-model:limit="queryParams.pageSize"
-          @pagination="getList"
+          @pagination="getListAll"
       />
     </div>
+    <avoid-dialog ref="avoidRef" @getList="getListAll"></avoid-dialog>
   </div>
 </template>
 
 <script setup>
-import {reactive, ref, toRefs} from "vue";
+import {onMounted, reactive, ref, toRefs} from "vue";
 import {getWarehouse} from "@/api/hazardousChemicals/warehouse";
 import {ElMessage} from "element-plus";
-
+import avoidDialog from './components/avoidDialog.vue'
+import {getAvoidInfoPage, getAvoidList} from "@/api/hazardousChemicals/avoid";
+const avoidRef = ref(null)
 const state = reactive({
   queryParams: {
     pageNum: 1,
     pageSize: 5,
-    name: ''
+    warningType: ''
+  },
+  cardQueryParams: {
+    warningType: ''
   },
   total: 0,
-  dataList: [
-    {
-      id: 1,
-      name: '硫酸与氢氧化钠',
-      address: 'S区-1号柜',
-      level: 1, //1-低危 2-中危 3-高危
-    },
-    {
-      id: 1,
-      name: '硫酸与氢氧化钠',
-      address: 'S区-1号柜',
-      level: 2, //1-低危 2-中危 3-高危
-    },
-    {
-      id: 1,
-      name: '硫酸与氢氧化钠',
-      address: 'S区-1号柜',
-      level: 1, //1-低危 2-中危 3-高危
-    },
-    {
-      id: 1,
-      name: '硫酸与氢氧化钠',
-      address: 'S区-1号柜',
-      level: 1, //1-低危 2-中危 3-高危
-    },
-    {
-      id: 1,
-      name: '硫酸与氢氧化钠',
-      address: 'S区-1号柜',
-      level: 2, //1-低危 2-中危 3-高危
-    },
-    {
-      id: 1,
-      name: '硫酸与氢氧化钠',
-      address: 'S区-1号柜',
-      level: 1, //1-低危 2-中危 3-高危
-    },
-    {
-      id: 1,
-      name: '硫酸与氢氧化钠',
-      address: 'S区-1号柜',
-      level: 2, //1-低危 2-中危 3-高危
-    },
-
-  ],
+  dataList: [],
   tableList: []
 });
-const { queryParams, total, dataList } = toRefs(state);
+const { queryParams,cardQueryParams, total, dataList } = toRefs(state);
 const loading = ref(false);
-const getList = async () => {
+onMounted(()=>{
+  getListPage()
+  getList()
+})
+const getListPage = async () => {
   loading.value = true
-  // const res = await getWarehouse(data.queryParams)
-  // if(res.code == 200){
-  //   data.dataList = res.data.list
-  //   data.total = res.data.total
-  // }else{
-  //   ElMessage.warning(res.message)
-  // }
+  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
+}
+const getList = async () => {
+  const res = await getAvoidList(state.cardQueryParams)
+  if(res.code == 200){
+    state.dataList = res.data
+  }else{
+    ElMessage.warning(res.message)
+  }
+}
+const handle = (val) => {
+  avoidRef.value.openDialog(val);
+}
+
+const chooseType = (type) => {
+  state.queryParams.warningType = type == 'red' ? 1 : type == '' ? '' :2
+  state.cardQueryParams.warningType = type == 'red' ? 1 : type == '' ? '' :2
+  getListPage()
+  getList()
+
+}
+const getListAll = () => {
+  getListPage()
+  getList()
 }
 
 </script>
@@ -122,8 +138,9 @@
 <style scoped lang="scss">
 .app-container{
   .card-item{
-    height: 180px;
+    //height: 160px;
     margin-bottom: 10px;
+    //min-width: 300px;
   }
   .title-font{
     display:flex;
@@ -134,16 +151,46 @@
     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;
     left: 0;
diff --git a/src/views/hazardousChemicals/electronicWarehouse/components/rawDetail.vue b/src/views/hazardousChemicals/electronicWarehouse/components/rawDetail.vue
index d24f7aa..f2233a0 100644
--- a/src/views/hazardousChemicals/electronicWarehouse/components/rawDetail.vue
+++ b/src/views/hazardousChemicals/electronicWarehouse/components/rawDetail.vue
@@ -64,6 +64,8 @@
         </template>
       </el-table-column>
       <el-table-column label="所在仓库" prop="warehouseName" align="center" />
+      <el-table-column label="存储柜" prop="cupboardName" align="center" />
+
       <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="180" >
         <template #default="scope">
           <el-button link type="primary" v-if="scope.row.state ===0 || scope.row.state === 1" @click="editNum(scope.row)">零头修改</el-button>
diff --git a/src/views/hazardousChemicals/electronicWarehouse/components/rawTable.vue b/src/views/hazardousChemicals/electronicWarehouse/components/rawTable.vue
index ab349a6..2ce5fb6 100644
--- a/src/views/hazardousChemicals/electronicWarehouse/components/rawTable.vue
+++ b/src/views/hazardousChemicals/electronicWarehouse/components/rawTable.vue
@@ -63,8 +63,8 @@
         </template>
       </el-table-column>
       <el-table-column label="安全库存" prop="hazmatBasic.safeNum" align="center" width="120" />
-      <el-table-column label="所在仓库" prop="warehouseName" align="center" >
-      </el-table-column>
+      <el-table-column label="所在仓库" prop="warehouseName" align="center" />
+      <el-table-column label="存储柜" prop="cupboardName" align="center" />
       <el-table-column label="创建时间" prop="hazmatBasic.createTime" align="center" width="120" />
 <!--      <el-table-column label="状态" prop="state" align="center">-->
 <!--        <template #default="scope">-->
diff --git a/src/views/hazardousChemicals/electronicWarehouse/components/rawWarehouseRecord.vue b/src/views/hazardousChemicals/electronicWarehouse/components/rawWarehouseRecord.vue
index 811e2ec..7aefb53 100644
--- a/src/views/hazardousChemicals/electronicWarehouse/components/rawWarehouseRecord.vue
+++ b/src/views/hazardousChemicals/electronicWarehouse/components/rawWarehouseRecord.vue
@@ -13,7 +13,7 @@
         <el-table-column label="时间" prop="createTime" align="center" width="120" />
         <el-table-column label="类型" prop="state" align="center">
           <template #default="scope">
-            <span>{{scope.row.state ===0 ? '批量导入' : scope.row.state ===1 ? '取用' :scope.row.state ===2 ? '归还': scope.row.state ===3 ? '标签作废' : ''}}</span>
+            <span>{{scope.row.state ===0 ? '批量导入' : scope.row.state ===1 ? '取用' :scope.row.state ===2 ? '归还': scope.row.state ===3 ? '标签作废' : scope.row.state ===5 ? '相忌转入' : scope.row.state ===6 ? '相忌转出' : ''}}</span>
 
           </template>
         </el-table-column>
diff --git a/src/views/hazardousChemicals/systemManage/classifyInfoTable/index.vue b/src/views/hazardousChemicals/systemManage/classifyInfoTable/index.vue
index 9ab366b..ff7a1e0 100644
--- a/src/views/hazardousChemicals/systemManage/classifyInfoTable/index.vue
+++ b/src/views/hazardousChemicals/systemManage/classifyInfoTable/index.vue
@@ -40,7 +40,7 @@
       <el-table-column label="品名" prop="secientificName" align="center"  />
       <el-table-column label="别名" prop="aliasName" align="center" />
       <el-table-column label="CAS号" prop="cas" align="center" />
-      <el-table-column label="危险性类别" prop="riskType" >
+      <el-table-column label="危险性类别" prop="riskType" align="center" >
         <template #default="scope">
           <div v-html="scope.row.riskType.split('\n').join('<br/>')"></div>
         </template>

--
Gitblit v1.9.2