zhouwx
2025-02-26 e29932c247871e8921b210e311c8ea4a57d721ce
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;