| | |
| | | </el-row> |
| | | </div> |
| | | <div> |
| | | <el-row :gutter="20" justify="space-between" style="margin-bottom: 15px"> |
| | | <el-col :xl="12" :lg="12" :md="24" :sm="24" :xs="24"> |
| | | <el-card> |
| | | <span style="font-size: 18px;font-weight: 600;margin-left: 45%">超期预警</span> |
| | | <el-table height="320" v-loading="data.wloading" :data="data.warningData" style="margin-top: 15px"> |
| | | <el-table-column label="序号" type="index" align="center" width="80" /> |
| | | <el-table-column label="生成时间" prop="createTime" align="center" /> |
| | | <el-table-column label="领用人" prop="createName" align="center" /> |
| | | <el-table-column label="领用时间" prop="useTime" align="center" /> |
| | | <el-table-column label="最后流转时间" prop="updateTime" align="center" width="180" /> |
| | | <el-table-column label="处理时间" prop="handleTime" align="center" /> |
| | | <el-table-column label="状态" prop="name" align="center" > |
| | | <template #default="scope"> |
| | | <span>{{scope.row.state === 0 ? '未处理':'已处理'}}</span> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | <pagination |
| | | :total="data.wTotal" |
| | | v-model:page="data.warningQueryParams.pageNum" |
| | | v-model:limit="data.warningQueryParams.pageSize" |
| | | @pagination="getWarningData" |
| | | /> |
| | | <el-row :gutter="20" justify="space-between" > |
| | | <el-col :xl="12" :lg="12" :md="24" :sm="24" :xs="24" style="margin-bottom: 15px"> |
| | | <el-card style="height: 500px;overflow: auto"> |
| | | <span style="font-size: 18px;font-weight: 600;margin-bottom: -5px">危化品动态</span> |
| | | <el-divider style="margin: 15px 0"></el-divider> |
| | | <div style="padding: 10px;" v-if="data.hazmatData && data.hazmatData.length >0"> |
| | | <div v-for="(item,index) in data.hazmatData" :key="index" style="display: flex;flex-direction: column"> |
| | | <div style="display: flex"> |
| | | <img :src="avator" style="width: 25px;height: 25px" /> |
| | | <div style="display: flex;flex-direction: column;margin-left: 20px"> |
| | | <span style="font-size: 16px;font-weight: 600">{{item.description}} |
| | | <span style="color: #03752e" v-if="item.num > 0">{{item.num >0 ? '+' + item.num: item.num}}{{item.unit}}</span> |
| | | <span style="color: #f6828e" v-else>{{item.num}}{{item.unit}}</span> |
| | | </span> |
| | | <span style="font-size: 14px;color: #8a8f97;margin-top: 5px">{{item.updateTime}}</span> |
| | | </div> |
| | | </div> |
| | | <el-divider style="margin: 15px 0" v-if="index != data.hazmatData.length-1"></el-divider> |
| | | </div> |
| | | </div> |
| | | <div v-else> |
| | | <el-empty description="暂无数据" style="margin-top: 10%"></el-empty> |
| | | </div> |
| | | </el-card> |
| | | |
| | | </el-col> |
| | | <el-col :xl="12" :lg="12" :md="24" :sm="24" :xs="24"> |
| | | <el-card> |
| | | <span style="font-size: 18px;font-weight: 600;margin-left: 45%">危化品使用</span> |
| | | <el-table height="320" v-loading="data.hloading" :data="data.hazmatData" style="margin-top: 15px"> |
| | | <el-table-column label="名称" prop="name" align="center" /> |
| | | <el-table-column label="产品编号" prop="hazmatBasic.productSn" align="center" /> |
| | | <el-table-column label="CAS" prop="hazmatBasic.cas" align="center"/> |
| | | <el-table-column label="试剂类型" prop="hazmatBasic.hazmatType" align="center"/> |
| | | <el-table-column label="危险性质" prop="hazmatBasic.hazmatCharacter" align="center"/> |
| | | <el-table-column label="供应商" prop="hazmatBasic.supplier" align="center"/> |
| | | <el-table-column label="厂家" prop="hazmatBasic.manufacturer" align="center"/> |
| | | <el-table-column label="规格" prop="hazmatBasic.hazmatCharacter" align="center"/> |
| | | <el-table-column label="包装" prop="hazmatBasic.metering" align="center"> |
| | | <template #default="scope"> |
| | | <span>{{scope.row.hazmatBasic.metering}}{{scope.row.hazmatBasic.unit}}</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="含税售价" prop="hazmatBasic.price" align="center"/> |
| | | <el-table-column label="每箱数量" prop="hazmatBasic.perBox" align="center"/> |
| | | <el-table-column label="最小包装类型" prop="minPackage" align="center" width="220"> |
| | | <template #default="scope"> |
| | | <span>{{scope.row.hazmatBasic.minPackage == 0 ? '瓶' :scope.row.hazmatBasic.minPackage == 1?'袋':scope.row.hazmatBasic.minPackage == 2?'桶 ':scope.row.hazmatBasic.minPackage == 3?'盒':scope.row.hazmatBasic.minPackage == 4?'箱':'其他'}}</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="安全库存" prop="hazmatBasic.safeNum" align="center"/> |
| | | <el-table-column label="超期阈值(小时)" prop="hazmatBasic.threshold" align="center" width="220"/> |
| | | </el-table> |
| | | <pagination |
| | | :total="data.hTotal" |
| | | v-model:page="data.hazmatQueryParams.pageNum" |
| | | v-model:limit="data.hazmatQueryParams.pageSize" |
| | | @pagination="getHazmatUseData" |
| | | /> |
| | | <el-card style="height: 500px;overflow: auto"> |
| | | <span style="font-size: 18px;font-weight: 600;margin-bottom: -5px">超期预警</span> |
| | | <el-divider style="margin: 15px 0"></el-divider> |
| | | <div style="padding: 10px;" v-if="data.warningData && data.warningData.length >0"> |
| | | <div v-for="(item,index) in data.warningData" :key="index" style="display: flex;flex-direction: column"> |
| | | <div style="display: flex"> |
| | | <img :src="avator" style="width: 25px;height: 25px" /> |
| | | <div style="display: flex;flex-direction: column;margin-left: 20px"> |
| | | <span style="font-size: 16px;font-weight: 600">{{item.description}} |
| | | </span> |
| | | <span style="font-size: 14px;color: #8a8f97;margin-top: 5px">{{item.useTime}}</span> |
| | | </div> |
| | | </div> |
| | | <el-divider style="margin: 15px 0" v-if="index != data.hazmatData.length-1"></el-divider> |
| | | </div> |
| | | </div> |
| | | <div v-else> |
| | | <el-empty description="暂无数据" style="margin-top: 10%"></el-empty> |
| | | </div> |
| | | </el-card> |
| | | </el-col> |
| | | </el-row> |
| | |
| | | </template> |
| | | <script setup> |
| | | import { CountTo } from 'vue3-count-to' |
| | | import img1 from '@/assets/images/file.png' |
| | | import avator from '@/assets/images/avator.png' |
| | | import hazmat from '@/assets/logo/hazmat.png' |
| | | import warehouse from '@/assets/logo/warehouse.png' |
| | | import warning from '@/assets/logo/warning1.png' |
| | |
| | | import {ElMessage} from "element-plus"; |
| | | import {getEntryData, getHazmatUseList, getHoData, getMaxUseData, getUseData} from "@/api/hazardousChemicals/count"; |
| | | import {getWarning} from "@/api/hazardousChemicals/warning"; |
| | | import {getRawFlow} from "@/api/hazardousChemicals/rawRecord"; |
| | | const data = reactive({ |
| | | cardList: [ |
| | | { |
| | |
| | | }, |
| | | ], |
| | | maxUseList: [], |
| | | maxUseName: [], |
| | | useXData: [], |
| | | useYData: [], |
| | | entryXData: [], |
| | |
| | | warningData: [], |
| | | warningQueryParams: { |
| | | pageNum: 1, |
| | | pageSize: 5 |
| | | pageSize: 10 |
| | | }, |
| | | wTotal: 0, |
| | | wloading: false, |
| | |
| | | pageNum: 1, |
| | | pageSize: 10 |
| | | }, |
| | | hazmatData: [] |
| | | hazmatData: [], |
| | | |
| | | }); |
| | | const myChart = shallowRef(null) |
| | |
| | | await useData() |
| | | await maxUseData() |
| | | await getWarningData() |
| | | await getHazmatUseData() |
| | | await getHazmatFlowData() |
| | | }); |
| | | const getWarningData = async () => { |
| | | data.wloading = true |
| | | const res = await getWarning(data.warningQueryParams) |
| | | if(res.code == 200){ |
| | | data.warningData =res.data.list |
| | | data.wTotal = res.data.total |
| | | data.warningData =res.data.list.map(item => { |
| | | return { |
| | | ...item, |
| | | description: `${item.createName} 领用了 ${item.hazmatBasic.name} 状态:${item.state ==0?'未处理':'已处理' }` |
| | | } |
| | | }) |
| | | }else{ |
| | | ElMessage.warning(res.message) |
| | | } |
| | | data.wloading = false |
| | | } |
| | | const getHazmatUseData = async () => { |
| | | const getHazmatFlowData = async () => { |
| | | data.hloading = true |
| | | const res = await getHazmatUseList(data.hazmatQueryParams) |
| | | const res = await getRawFlow(data.hazmatQueryParams) |
| | | if(res.code == 200){ |
| | | data.hazmatData =res.data.list |
| | | data.hTotal = res.data.total |
| | | data.hazmatData =res.data.list.map(item => { |
| | | return { |
| | | ...item, |
| | | unit:item.hazmatBasic.unit, |
| | | description: `${item.user.departName ? item.user.departName +'部门' : ''} ${item.user.name} 进行了 ${item.state ==0?'批量导入': item.state ==1?'取用' :item.state ==2?'归还':item.state ==3?'标签作废' :''} ${item.hazmatBasic.name}` |
| | | } |
| | | }) |
| | | console.log('data.hazmatData',data.hazmatData) |
| | | }else{ |
| | | ElMessage.warning(res.message) |
| | | } |
| | |
| | | name: item.name |
| | | } |
| | | }) |
| | | data.maxUseName = res.data.map(item => item.name) |
| | | await getPieChart() |
| | | }else{ |
| | | ElMessage.warning(res.message) |
| | |
| | | myChart.value.dispose(); |
| | | } |
| | | myChart.value = echarts.init(document.getElementById(pieChart.value)); |
| | | const option = { |
| | | title: { |
| | | text: '近一周频繁使用的危化品量', |
| | | left: 'center' |
| | | }, |
| | | tooltip: { |
| | | trigger: 'item' |
| | | }, |
| | | legend: { |
| | | orient: 'vertical', |
| | | left: 'left' |
| | | }, |
| | | series: [ |
| | | { |
| | | name: 'Access From', |
| | | type: 'pie', |
| | | radius: '50%', |
| | | data: data.maxUseList, |
| | | emphasis: { |
| | | itemStyle: { |
| | | shadowBlur: 10, |
| | | shadowOffsetX: 0, |
| | | shadowColor: 'rgba(0, 0, 0, 0.5)' |
| | | } |
| | | let option; |
| | | option = { |
| | | title: { |
| | | text: '近一周频繁使用的危化品量', |
| | | left: 'center' |
| | | }, |
| | | tooltip: { |
| | | trigger: 'item' |
| | | }, |
| | | legend: { |
| | | orient: 'vertical', |
| | | left: 'left' |
| | | }, |
| | | series: [ |
| | | { |
| | | name: '', |
| | | type: 'pie', |
| | | radius: '50%', |
| | | data: data.maxUseList, |
| | | emphasis: { |
| | | itemStyle: { |
| | | shadowBlur: 10, |
| | | shadowOffsetX: 0, |
| | | shadowColor: 'rgba(0, 0, 0, 0.5)' |
| | | } |
| | | }, |
| | | // showEmptyCircle: false, |
| | | } |
| | | } |
| | | ] |
| | | }; |
| | | ] |
| | | }; |
| | | |
| | | |
| | | |
| | | // 使用刚指定的配置项和数据显示图表。 |
| | | myChart.value.setOption(option,true); |
| | | //自适应宽度 |
| | |
| | | } |
| | | |
| | | } |
| | | |
| | | ::-webkit-scrollbar { |
| | | width: 5px; |
| | | height: 5px; |
| | | background-color: #ffffff; |
| | | opacity: 0; |
| | | } |
| | | ::-webkit-scrollbar-track { |
| | | border-radius: 10px; |
| | | background-color: #ffffff; |
| | | } |
| | | ::-webkit-scrollbar-thumb { |
| | | border-radius: 10px; |
| | | /*-webkit-box-shadow: inset 0 0 6px rgba(154,154,154,.3);*/ |
| | | background-color: #ffffff; |
| | | } |
| | | } |
| | | |
| | | </style> |