maintenancePlan-detail.vue 7.57 KB
<template>
	<view class="device-detail-page">
		<!-- 公共组件-每个页面必须引入 -->
		<public-module></public-module>
		<u-sticky :bgColor="bgColor">
			<u-tabs :list="list.map(item=>({...item,name:$t(item.name)}))" :current="currentTab" :lineWidth="30" @click=" handleTabClick " :activeStyle="{activeColor}"
				:inactiveStyle="inActiveColor" :scrollable="isScrollable" itemStyle="padding: 0 11px;display:flex;flex-direction:row;align-items:center;justify-content:center;height:44px" />
		</u-sticky>
		<view class="mt-3">
			<view class="basic-box" v-show="currentTab == 0">
				<view class="basic-header">
					<view class="u-flex">
						<view class="basic-text text-clip ml-2">
							{{ listDetail.preserveCode }}
						</view>
						<view v-if="listDetail.status" class="basic-text-status ml-2" :style="{ color: planType[listDetail.status].color}">
							{{ listDetail.status ? planType[listDetail.status].name : '' }}
						</view>
					</view>
				</view>
				<view class="detail">
					<view class="detail-item">
						<view class="detail-label">{{ $t('deviceInspect.preserveCode') }}</view>
						<view class="detail-value">{{ listDetail.preserveCode}}</view>
					</view>
					<u-line length="90%" margin="0 auto"></u-line>
					<view class="detail-item">
						<view class="detail-label">{{ $t('deviceInspect.preserveName') }}</view>
						<view class="detail-value">{{ listDetail.preserveName}}</view>
					</view>
					<u-line length="90%" margin="0 auto"></u-line>
					<view class="detail-item">
						<view class="detail-label">{{ $t('deviceInspect.frequency') }}</view>
						<view class="detail-value">{{ listDetail.frequency }}</view>
					</view>
					<u-line length="90%" margin="0 auto"></u-line>
					<view class="detail-item">
						<view class="detail-label">{{ $t('deviceInspect.times') }}</view>
						<view class="detail-value">{{ listDetail.times }}</view>
					</view>
				</view>
			</view>
			<view class="record-box" v-show="currentTab == 1">
				<!-- 列表分页 -->
				<mescroll-body ref="mescrollRef" @init="mescrollInit" :up="upOption" :down="downOption" @down="downCallback"
					@up="upCallback">
					<page-list :list="listData" @openDeviceDetail="openDeviceDetail"></page-list>
					<mescroll-empty v-if="!listData.length" />
				</mescroll-body>
			</view>
			
		</view>
	</view>
</template>

<script>
import fTabbar from "@/components/module/f-tabbar/f-tabbar";
import MescrollMixin from '@/uni_modules/mescroll-uni/components/mescroll-uni/mescroll-mixins.js';
import api from '@/api/index.js'
import {planType,preserveType} from '@/pages/deviceInspect/enum/index.js'
import { list } from './config/data.js'
import baseUrl from '@/config/baseUrl.js'
import pageList from '@/components/common/page-list'


export default {
	mixins: [MescrollMixin], // 使用mixin (在main.js注册全局组件)
	components: {
		fTabbar,
		pageList
		
	},
	data() {
		return {
			bgColor: '#fff',
			activeColor: {
				fontWeight: 'bold',
				color: '#333',
			},
			inActiveColor: {
				color: '#999',
			},
			listDetail:{},
			list,
			currentTab: 0,
			isScrollable: false,
			planType,
			downOption: {
				auto: false //是否在初始化后,自动执行downCallback; 默认true
			},
			upOption: {
				isBounce: false,
				auto: false // 不自动加载
			},
			page: {
				num: 0,
				size: 10
			},
			startDate:'', //开始时间
			endDate:'', //结束时间
			preservePlanId:'', //保养计划id
			preserveBy:'', //保养人id
			preserveStatus:'', //状态
			deviceId:'', //设备id
			listData:[]
			
		};
	},
	onUnload() {
		
	},
	async onLoad(options) {
		// 隐藏原生的tabbar
		uni.hideTabBar();
		if (getApp().getBindNot()) {
			return
		}
		let id = options.id
		const res =	await api.deviceInspectApi.getMaintenancePlanDetail(id)	
		if (!res) return
		this.listDetail = {...res}
		
	
	},
	onShow(){
		this.$nextTick(()=>{
			uni.setNavigationBarTitle({
				title:this.$t('menu.maintenancePlanDetail')
			})
		})
		
		
	},
	watch: {
		currentTab: {
			immediate: true,
			handler(val) {
				if(val == 1){
					this.page.num = 1
					this.loadData(this.page.num);
				}
				
			}
		},
		
		
		
	},
	
	methods: {
		handleTabClick({index}) {
			this.currentTab = index;
		},
		
		formatImage(url) {
			return baseUrl.baseImgUrl + url
		},
		//下拉刷新
		downCallback() {
			if (getApp().getBindNot()) {
				setTimeout(() => {
					this.mescroll.endByPage(0, 0)
				}, 200)
				return
			}
			this.listData = [];
			this.page.num = 1;
			this.loadData(this.page.num);
			this.resetQuery();
		},
		//上拉加载
		upCallback() {
			if (getApp().getBindNot()) {
				setTimeout(() => {
					this.mescroll.endByPage(0, 0)
				}, 200)
				return
			}
			this.page.num += 1;
			this.loadData(this.page.num);
		},
		//获取列表
		async loadData(pageNo,params={}) {	
			try {
				let httpData = {
					page: pageNo,
					pageSize: 10,
				};
				const httpPostData = {
					startDate:this.startDate, //开始时间
					endDate:this.endDate, //结束时间
					preservePlanId:this.listDetail.id, //保养计划id
		            preserveBy:this.preserveBy, //保养人id
					preserveStatus:this.preserveStatus, //状态
					deviceId:'', //设备id
					...params
				}
				const {
					total,
					items
				} = await api.deviceInspectApi.getMaintenanceRecordListApi(httpData, httpPostData)	
				
				let data = items
				let newList  = data.map((item)=>{
					return {
						id:item.id,
						title:item.recordCode,
						status:item.preserveStatus ? preserveType[item.preserveStatus].name : '',
						iconUrl:item.preserveStatus ? preserveType[item.preserveStatus].iconUrl : '',
						color:item.preserveStatus ? preserveType[item.preserveStatus].color : '',
						child:[
							{
								label:'deviceInspect.preserveDate',
								name:item.preserveDate
							},
							{
								label:'deviceInspect.preserveByName',
								name:item.preserveByName
							},
							{
								label:'deviceInspect.preserveStatus',
								name:item.preserveStatus ? preserveType[item.preserveStatus].name :''
							}
							
						],
						detail:{
							...item
						}
					}
				})
				uni.stopPullDownRefresh();
				this.mescroll.endByPage(items.length); //必传参数(当前页的数据个数, 总页数)
				if (pageNo == 1) {
					this.listData = newList;
				} else {
					this.listData = this.listData.concat(newList);
				}
					
					
			} catch {
				this.mescroll.endErr();
			}
		},
		
		
	},
};
</script>

<style lang="scss" scoped>
.device-detail-page {
	min-height: 100vh;
	background-color: #f8f9fa;
	// padding: 0 30rpx;
	.mt-3{
		// padding: 0 30rpx;
		margin-top: 0;
		.basic-box{
			margin-top: 30rpx;
			padding: 0 30rpx;
		}
		.record-box{
			// padding: 0 30rpx 0 15rpx;
		}
	}
	.basic-header {
		display: flex;
		justify-content: space-between;
		align-items: center;
		height: 140rpx;
		background-color: #fff;
		border-radius: 20rpx;
		padding-left: 40rpx;
		padding-right:20rpx;
		
	
		.basic-text {
			width: 370rpx;
		}
	
		.cu-item {
			background: #3388ff;
			border-radius: 12px;
			width: 120rpx;
			height: 48rpx;
			text-align: center;
			line-height: 40rpx;
	
			text {
				font-size: 12px;
				font-family: PingFangSC-Regular, PingFang SC;
				font-weight: 400;
				color: #ffffff;
			}
		}
	
		.basic-text-status {
			font-size: 14px;
		}
	}
	.detail {
		background-color: #fff;
		margin-top: 30rpx;
		border-radius: 20rpx;
		width: 690rpx;
	
		.detail-item {
			padding: 30rpx;
			display: flex;
			align-items: center;
	
			.detail-label {
				color: #333;
				font-size: 15px;
			}
	
			.detail-value {
				color: #666;
				font-size: 14px;
				margin-left: 30rpx;
				.detail-img{
					width: 60rpx;
					height: 60rpx;
				}
			}
		}
	}
}
</style>