199 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
			
		
		
	
	
			199 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
| <template>
 | |
|   <ai-detail class="statistics">
 | |
|     <template slot="title">
 | |
|       <ai-title title="监测数据" isShowBack isShowBottomBorder @onBackClick="cancel(false)"></ai-title>
 | |
|     </template>
 | |
|     <template slot="content">
 | |
|       <div class="statistics-wrapper">
 | |
|         <div class="statistics-wrapper__title">
 | |
|           <span :class="[currIndex === 0 ? 'active' : '']" @click="search.current = 1, currIndex = 0, getList()">体温</span>
 | |
|           <span :class="[currIndex === 1 ? 'active' : '']" @click="search.current = 1, currIndex = 1, getList()">心率</span>
 | |
|           <span :class="[currIndex === 2 ? 'active' : '']" @click="search.current = 1, currIndex = 2, getList()">血压</span>
 | |
|           <span :class="[currIndex === 3 ? 'active' : '']" @click="search.current = 1, currIndex = 3, getList()">血氧</span>
 | |
|         </div>
 | |
|         <div class="statistics-wrapper__body">
 | |
|           <div style="padding: 16px;">
 | |
|             <ai-search-bar>
 | |
|               <template #left>
 | |
|                 <el-date-picker
 | |
|                   @change="search.current = 1, getList()"
 | |
|                   v-model="search.createTimeRange"
 | |
|                   type="daterange"
 | |
|                   size="small"
 | |
|                   value-format="yyyy-MM-dd"
 | |
|                   range-separator="至"
 | |
|                   start-placeholder="开始日期"
 | |
|                   end-placeholder="结束日期">
 | |
|                 </el-date-picker>
 | |
|               </template>
 | |
|             </ai-search-bar>
 | |
|             <ai-table
 | |
|               class="detail-table__table"
 | |
|               :border="true"
 | |
|               style="margin-top: 4px;"
 | |
|               :tableData="tableData"
 | |
|               :col-configs="colConfigs"
 | |
|               :total="total"
 | |
|               :stripe="false"
 | |
|               :current.sync="search.current"
 | |
|               :size.sync="search.size"
 | |
|               @getList="getList">
 | |
|             </ai-table>
 | |
|           </div>
 | |
|         </div>
 | |
|       </div>
 | |
|     </template>
 | |
|   </ai-detail>
 | |
| </template>
 | |
| 
 | |
| <script>
 | |
|   export default {
 | |
|     name: 'Statistics',
 | |
| 
 | |
|     props: {
 | |
|       instance: Function,
 | |
|       dict: Object,
 | |
|       params: Object
 | |
|     },
 | |
| 
 | |
|     data () {
 | |
|       return {
 | |
|         currIndex: 0,
 | |
|         search: {
 | |
|           name: '',
 | |
|           current: 1,
 | |
|           size: 10,
 | |
|           createTimeRange: []
 | |
|         },
 | |
|         tableData: [],
 | |
|         total: 0
 | |
|       }
 | |
|     },
 | |
| 
 | |
|     computed: {
 | |
|       colConfigs () {
 | |
|         return [
 | |
|           {prop: 'deviceName', label: '姓名', align: 'center' },
 | |
|           {prop: 'deviceMID', label: '设备号', width: 280, align: 'center' },
 | |
|           {prop: 'itemValue', label: this.getLabel(), align: 'center' },
 | |
|           {prop: 'sampleTime', label: '更新时间', align: 'center' },
 | |
|           {
 | |
|             prop: 'abnormalStatus',
 | |
|             align: 'center',
 | |
|             label: '是否异常',
 | |
|             render: (h, { row }) => {
 | |
|               return h('span', {
 | |
|                 style: {
 | |
|                   color: this.getStatusColor(row.abnormalStatus)
 | |
|                 }
 | |
|               }, this.getStatus(row.abnormalStatus))
 | |
|             }
 | |
|           }
 | |
|         ]
 | |
|       }
 | |
|     },
 | |
| 
 | |
|     mounted () {
 | |
|       this.getList()
 | |
|     },
 | |
|     methods: {
 | |
|       getList () {
 | |
|         this.instance.post(`/app/appintelligentguardianshipdevice/queryMonitorList?deviceId=${this.params.id}&item=${this.currIndex}`, null, {
 | |
|           params: {
 | |
|             ...this.search,
 | |
|             createTimeRange: (this.search.createTimeRange && this.search.createTimeRange.length) ? this.search.createTimeRange.join(',') : ','
 | |
|           }
 | |
|         }).then(res => {
 | |
|           if (res.code == 0) {
 | |
|             this.tableData = res.data.records
 | |
|             this.total = res.data.total
 | |
|           }
 | |
|         })
 | |
|       },
 | |
| 
 | |
|       getStatusColor (status) {
 | |
|         if (!status && status !== '0') return ''
 | |
| 
 | |
|         return {
 | |
|           '0': '#2EA222',
 | |
|           '1': '#F46',
 | |
|           '2': '#F46'
 | |
|         }[status]
 | |
|       },
 | |
| 
 | |
|       getStatus (status) {
 | |
|         if (!status && status !== '0') return ''
 | |
| 
 | |
|         return {
 | |
|           '0': '正常',
 | |
|           '1': '异常',
 | |
|           '2': '异常'
 | |
|         }[status]
 | |
|       },
 | |
| 
 | |
|       getLabel () {
 | |
|         return ['体温(℃)', '心率', '血压', '血氧'][this.currIndex]
 | |
|       },
 | |
| 
 | |
|       cancel (isRefresh) {
 | |
|         this.$emit('change', {
 | |
|           type: 'list',
 | |
|           isRefresh: !!isRefresh
 | |
|         })
 | |
|       }
 | |
|     }
 | |
|   }
 | |
| </script>
 | |
| 
 | |
| <style scoped lang="scss">
 | |
|   .statistics {
 | |
|     ::v-deep .ai-table .el-table__header tr th:first-child .cell, ::v-deep .ai-table .el-table__body tr td:first-child .cell {
 | |
|       padding: 0!important;
 | |
|     }
 | |
| 
 | |
|     * {
 | |
|       box-sizing: border-box;
 | |
|       font-weight: normal;
 | |
|       font-style: normal;
 | |
|     }
 | |
|     .statistics-wrapper {
 | |
|       background: #FFFFFF;
 | |
|       box-shadow: 0px 4px 6px -2px rgba(15, 15, 21, 0.15);
 | |
|       border-radius: 2px;
 | |
| 
 | |
|       .statistics-wrapper__title {
 | |
|         display: flex;
 | |
|         align-items: center;
 | |
|         height: 56px;
 | |
|         padding: 0 16px;
 | |
|         border-bottom: 1px solid #EEEEEE;
 | |
| 
 | |
|         span {
 | |
|           height: 56px;
 | |
|           line-height: 56px;
 | |
|           margin-right: 32px;
 | |
|           color: #888888;
 | |
|           font-size: 16px;
 | |
|           font-weight: 600;
 | |
|           cursor: pointer;
 | |
|           user-select: none;
 | |
|           border-bottom: 3px solid transparent;
 | |
| 
 | |
|           &:last-child {
 | |
|             margin-right: 0;
 | |
|           }
 | |
| 
 | |
|           &.active {
 | |
|             color: #222222;
 | |
|             border-color: #2266FF;
 | |
|           }
 | |
|         }
 | |
|       }
 | |
| 
 | |
|       .statistics-wrapper__body--list {
 | |
|         padding: 0 40px 20px;
 | |
|     }
 | |
|     }
 | |
|   }
 | |
| </style>
 |