zhouwx
2025-02-26 e29932c247871e8921b210e311c8ea4a57d721ce
bug修改
已修改6个文件
已添加2个文件
429 ■■■■ 文件已修改
.env.development 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/hazardousChemicals/avoid.js 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/hazardousChemicals/avoidWarning/components/avoidDialog.vue 192 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/hazardousChemicals/avoidWarning/index.vue 197 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/hazardousChemicals/electronicWarehouse/components/rawDetail.vue 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/hazardousChemicals/electronicWarehouse/components/rawTable.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/hazardousChemicals/electronicWarehouse/components/rawWarehouseRecord.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/hazardousChemicals/systemManage/classifyInfoTable/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
.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'
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
    })
}
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>
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;
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>
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">-->
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>
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>