|
|
@@ -0,0 +1,156 @@
|
|
|
+<template>
|
|
|
+ <card style="font-size: 15px">
|
|
|
+ <van-cell-group>
|
|
|
+ <van-cell :title="data.equipmentName" @click="onTitleClicked">
|
|
|
+ <template #default>
|
|
|
+ <van-tag v-if="data.state == 0" type="success">正常</van-tag>
|
|
|
+ <van-tag v-else-if="data.state == 1" type="warning">异常</van-tag>
|
|
|
+ <van-tag v-else type="primary">未知</van-tag>
|
|
|
+ <van-icon style="margin-left: 10px" :name="expanded ? 'arrow-up' : 'arrow-down'"></van-icon>
|
|
|
+ </template>
|
|
|
+ </van-cell>
|
|
|
+ <van-cell title="所属机构" :value="data.orgName" />
|
|
|
+ <van-cell
|
|
|
+ title="诊断时间"
|
|
|
+ :value="dayjs(data.stateUpdateTime).format('YYYY年M月D日H时m分')"
|
|
|
+ v-if="data.stateUpdateTime"
|
|
|
+ />
|
|
|
+ <van-cell value-class="cell-disklist" v-if="expanded">
|
|
|
+ <template #default>
|
|
|
+ <div v-for="(disk, index) in data.diskInfos" :key="disk.id" class="diskInfo">
|
|
|
+ <div>
|
|
|
+ {{ renderDiskDesc(disk, index) }}
|
|
|
+ </div>
|
|
|
+ <van-progress pivot-text="" :percentage="diskProgress(disk)" :color="progressColor(disk)"> </van-progress>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ </van-cell>
|
|
|
+ </van-cell-group>
|
|
|
+
|
|
|
+ <!-- <van-row>
|
|
|
+ <van-col span="24">
|
|
|
+ <span v-show="expanded" class="cell-channel-item" v-for="channel in data.channels" :key="channel.channelCode">
|
|
|
+ <van-button
|
|
|
+ style="width: 20vw"
|
|
|
+ size="small"
|
|
|
+ v-if="channel.state == 0"
|
|
|
+ type="primary"
|
|
|
+ @click="itemClick(data.hostCode, channel.channelCode)"
|
|
|
+ >
|
|
|
+ {{ '通道' + channel.channelCode }}</van-button
|
|
|
+ >
|
|
|
+ <van-button
|
|
|
+ style="width: 20vw"
|
|
|
+ size="small"
|
|
|
+ v-else-if="channel.state == 1"
|
|
|
+ type="warning"
|
|
|
+ @click="itemClick(data.hostCode, channel.channelCode)"
|
|
|
+ >
|
|
|
+ {{ '通道' + channel.channelCode }}</van-button
|
|
|
+ >
|
|
|
+ <van-button
|
|
|
+ style="width: 20vw"
|
|
|
+ size="small"
|
|
|
+ v-else-if="channel.state == 2 || channel.state == null"
|
|
|
+ type="default"
|
|
|
+ @click="itemClick(data.hostCode, channel.channelCode)"
|
|
|
+ >
|
|
|
+ {{ '通道' + channel.channelCode }}</van-button
|
|
|
+ >
|
|
|
+ </span>
|
|
|
+ </van-col>
|
|
|
+ </van-row> -->
|
|
|
+ </card>
|
|
|
+</template>
|
|
|
+<script>
|
|
|
+import { mapGetters } from 'vuex'
|
|
|
+import Card from '@/components/card/index.vue'
|
|
|
+import dayjs from 'dayjs'
|
|
|
+export default {
|
|
|
+ components: { Card },
|
|
|
+ data() {
|
|
|
+ return {
|
|
|
+ expanded: this.defaultExpanded
|
|
|
+ }
|
|
|
+ },
|
|
|
+ computed: {
|
|
|
+ ...mapGetters(['orgName', 'orgId', 'dictionary'])
|
|
|
+ },
|
|
|
+ watch: {
|
|
|
+ defaultExpanded: {
|
|
|
+ immediate: true,
|
|
|
+ handler: function (v) {
|
|
|
+ this.expanded = v
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ props: {
|
|
|
+ data: {},
|
|
|
+ defaultExpanded: {
|
|
|
+ type: Boolean,
|
|
|
+ default: true
|
|
|
+ }
|
|
|
+ },
|
|
|
+ methods: {
|
|
|
+ dayjs,
|
|
|
+ // itemClick(hostCode, channelCode) {
|
|
|
+ // this.$router.push(`/iot/videoDiagnosis/detail?hostCode=${hostCode}&channelCode=${channelCode}`)
|
|
|
+ // },
|
|
|
+
|
|
|
+ onTitleClicked(){
|
|
|
+ this.expanded=!this.expanded
|
|
|
+ },
|
|
|
+ renderDiskDesc(disk, index) {
|
|
|
+ return `(${index + 1})${(disk.available / 1024).toFixed(0)}G剩余/(共${(disk.total / 1024).toFixed(0)}G)`
|
|
|
+ },
|
|
|
+ diskProgress(disk) {
|
|
|
+ if (!disk.total) {
|
|
|
+ return 0
|
|
|
+ }
|
|
|
+
|
|
|
+ return (((disk.total - disk.available) / disk.total) * 100).toFixed(2)
|
|
|
+ },
|
|
|
+ progressColor(disk) {
|
|
|
+ if (!disk.total) {
|
|
|
+ return 'success'
|
|
|
+ }
|
|
|
+
|
|
|
+ let rate = this.diskProgress(disk)
|
|
|
+ if (rate > 90) {
|
|
|
+ return 'rgb(245,108,108)'
|
|
|
+ } else if (rate > 80) {
|
|
|
+ return 'rgb(230,162,60)'
|
|
|
+ } else {
|
|
|
+ return 'rgb(103,194,58)'
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ async created() {},
|
|
|
+ async mounted() {}
|
|
|
+}
|
|
|
+</script>
|
|
|
+<style lang="scss" scoped>
|
|
|
+.row {
|
|
|
+ height: 8vw;
|
|
|
+ display: flex;
|
|
|
+ flex-direction: row;
|
|
|
+ align-items: center;
|
|
|
+}
|
|
|
+.cell-disklist {
|
|
|
+ width: 100%;
|
|
|
+
|
|
|
+ >div{
|
|
|
+ width: 50%;
|
|
|
+ display: inline-block;
|
|
|
+ margin-bottom: 3vw;
|
|
|
+ }
|
|
|
+
|
|
|
+ >div:nth-child(odd){
|
|
|
+ padding-right: 3vw;
|
|
|
+ }
|
|
|
+ >div:nth-child(even){
|
|
|
+ padding-left: 3vw;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+</style>
|