flying-monkey/pagesA/dataQuery/projectDetails.vue

489 lines
11 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<template>
<view class="content">
<statusNav returnColor="#c2c2c2" navBarTitle="项目详情"></statusNav>
<container-subgroup-two>
<view slot="content" style="margin: 0 -30rpx;">
<view class="head-top">
<view class="details-head">
<view class="swiper-head">
<swiper class="swiper" @change="changeAutoplay" :autoplay="autoplay" :interval="interval" circular>
<swiper-item v-for="(item,index) in projectObj.completed_img" :key="index">
<view class="swiper-item uni-bg-red">
<image class="img" :src="item" mode="aspectFill"></image>
</view>
</swiper-item>
</swiper>
<view class="indication-point fon24 disjcac">{{index}}/{{imgNum}}</view>
</view>
<view class="title">{{projectObj.project_name}}</view>
<view class="code">{{projectObj.project_number}}</view>
<view class="address">
<image class="img" src="../../static/iocn/im.png" mode=""></image>
<view class="text">{{projectObj.address}}</view>
</view>
</view>
<view class="last-date">
<view class="last-date-content">
<image class="icon" src="../../static/iocn/gzzt.png" mode=""></image>
<view class="text">最近一次维保时间:{{projectObj.downtime}}</view>
</view>
</view>
</view>
<view class="project-message-title">
<view class="icon"></view>
<view class="text">项目概况</view>
</view>
<view class="project-message-content">
<view class="li" v-for="(item,index) in projectGK" :key="index">
<view class="title-one">{{item.name}}</view>
<view class="text">{{item.value}}</view>
</view>
</view>
<view class="project-message-title">
<view class="icon"></view>
<view class="text">项目材料</view>
</view>
<view class="project-materials-content">
<view class="project-materials-title">
<view class="text">名称</view>
<view class="text">品牌</view>
<view class="text">型号</view>
<view class="text">批次</view>
<view class="text">尺寸</view>
<view class="text">数量</view>
</view>
<view class="project-material-box">
<view class="project-materials-text" v-for="(item,index) in project_material" :key="index">
<view class="text clips2">{{item.name}}</view>
<view class="text clips2">{{item.brand}}</view>
<view class="text clips2">{{item.model}}</view>
<view class="text clips2">{{item.batch}}</view>
<view class="text clips2">{{item.size}}</view>
<view class="text clips2">{{item.quantity}}</view>
</view>
</view>
</view>
<view class="record-nav">
<view class="li" @click="recordNav(index)" :class="item.state?'on':'mo'"
v-for="(item,index) in recordState">
{{item.title}}
</view>
</view>
<view class="record-content">
<view class="title">过程追踪</view>
<view class="list">
<view class="li pad-z40 fon27 col9" :class="index==0 ? 'activeTrack' : ''" v-for="(item,index) in recordList" :key="index">
<view class="disac fw line-h60">
<view class="text">{{item.value}}</view>
<view class="date">{{item.time}}</view>
</view>
</view>
<pitera v-if="recordList.length==0" :textStr="nomoreText"></pitera>
</view>
</view>
</view>
</container-subgroup-two>
</view>
</template>
<script>
import containerSubgroupTwo from '@/components/containers/container-subgroup-two.vue';
import statusNav from "../../components/status-nav.vue"
import pitera from '@/components/nothing/pitera.vue';
export default {
components: {
statusNav,
containerSubgroupTwo,
pitera
},
data() {
return {
autoplay: true,
interval: 3000,
index: 1,
recordState: [{
title: '维保记录',
state: true
},
{
title: '保养记录',
state: false
},
{
title: '巡检记录',
state: false
},
],
projectObj:'',
imgNum:0,//图片数量
typeId:1,//记录类型 1维修记录 2:保养记录 3: 巡检记录
list_rows:200,
page:1,
recordList:[],//记录列表
nomoreText:'',
projectId: "",//项目id
projectGK:[],//项目概况
project_material:[]//项目材料
}
},
onLoad(op) {
if(op.id!=undefined) {
this.projectId = op.id
this.getData(this.projectId);
this.getRecord();
}
},
methods: {
// 查询维保记录、保养记录、巡检记录
getRecord(){
let params = {
project_id: this.projectId,
type_id: this.typeId, //记录类型 1维修记录 2:保养记录 3: 巡检记录
list_rows: this.list_rows,
page:this.page
}
this.$requst.get('/universal/api.project/recording',params).then(res=>{
if(res.code) {
this.recordList = res.data.data;
} else {
this.nomoreText = res.msg;
}
})
},
changeAutoplay(data) {
this.index = data.detail.current - 0 + 1
},
getData(id) {
this.$requst.get('/universal/api.project/project_info', {
project_id: id,
}).then(res => {
if (res.code) {
this.projectObj = res.data;
this.imgNum = this.projectObj.completed_img.length;
this.projectGK = this.projectObj.project_overview_min;//项目概况
this.project_material = this.projectObj.project_material;//项目材料
} else {
}
})
},
recordNav(index) {
if(index==0) this.typeId = 1;
if(index==1) this.typeId = 2;
if(index==2) this.typeId = 3;
for (var i = 0; i < this.recordState.length; i++) {
this.recordState[i].state = false
}
this.recordState[index].state = true
this.getRecord();
}
}
}
</script>
<style>
page {
background-color: #F7F7F7;
}
.project-material-box {
max-height: 520rpx;
overflow: hidden;
overflow-y: scroll;
}
.project-material-box::-webkit-scrollbar{
display: none;
}
.swiper {
width: 100%;
height: 500rpx;
}
.swiper .img {
height: 500rpx;
width: 100%;
}
.details-head {
width: 725rpx;
margin: auto;
padding: 24rpx 12rpx;
box-sizing: border-box;
height: 682rpx;
background-color: #FFFFFF;
border-radius: 20rpx;
}
.swiper-head {
position: relative;
}
.indication-point {
width: 102rpx;
height: 46rpx;
border-radius: 26rpx 0 0 0;
right: 0px;
bottom: 0rpx;
text-align: center;
color: #fff;
position: absolute;
background-color: #e64545;
}
.details-head .title {
font-size: 28rpx;
padding: 13rpx 0rpx;
}
.details-head .code {
font-size: 24rpx;
padding: 0rpx 0rpx 13rpx 0rpx;
color: #ff8800;
}
.address {
display: flex;
align-items: center;
}
.address .img {
width: 18rpx;
margin-right: 14rpx;
height: 24rpx;
}
.address .text {
font-size: 24rpx;
color: #666666;
}
.last-date {
/* width: 100%; */
padding: 10rpx 13rpx 10rpx;
box-shadow: 0rpx 5rpx 3rpx rgba(0, 0, 0, 0.1);
}
.last-date-content {
/* width: 100%; */
height: 57rpx;
display: flex;
padding: 0 20rpx;
align-items: center;
border-radius: 10rpx;
background: linear-gradient(to right, #FFEBEB, #F7F7F7);
}
.last-date-content .icon {
width: 30rpx;
height: 30rpx;
margin-right: 20rpx;
}
.last-date-content .text {
font-size: 22rpx;
color: #333333;
}
.project-message-title {
display: flex;
padding: 0 33rpx;
align-items: center;
border-top: 2rpx solid #ebebeb;
border-bottom: 2rpx solid #ebebeb;
padding-top: 23rpx;
background-color: #FFFFFF;
padding-bottom: 21rpx;
}
.project-message-title .icon {
width: 8rpx;
height: 27rpx;
margin-right: 15rpx;
border-radius: 50rpx;
background: linear-gradient(#00A2e9, #bbe6f9);
}
.project-message-title .text {
font-size: 26rpx
}
.project-message-content {
display: flex;
padding: 30rpx 25rpx 0rpx;
flex-wrap: wrap;
margin-bottom: 8rpx;
background-color: #FFFFFF;
justify-content: space-between;
}
.project-message-content .title-one {
color: #4d4c4c;
font-size: 24rpx;
font-weight: bold;
display: flex;
justify-content: space-between;
}
.project-message-content .li {
display: flex;
margin-bottom: 31rpx;
margin-right: 20rpx;
}
.project-message-content .title {
color: #4d4c4c;
font-weight: bold;
font-size: 24rpx
}
.project-message-content .text {
color: #4d4c4c;
font-size: 24rpx
}
.record-nav {
padding: 33rpx 50rpx 33rpx;
display: flex;
margin-top: 10rpx;
background-color: #FFFFFF;
justify-content: space-between;
border-bottom: 4rpx solid #D5D4D4;
}
.record-nav .li {
font-size: 24rpx;
width: 128rpx;
text-align: center;
font-weight: bold;
position: relative;
}
.record-nav .on {
color: #00B1FF;
}
.record-nav .mo {
color: #000000;
}
.record-nav .on::after,.record-nav .mo::after {
content: "";
display: block;
width: 100%;
height: 4rpx;
position: absolute;
/* #ifdef APP-PLUS || MP-WEIXIN */
top: 68rpx;
/* #endif */
/* #ifdef H5 */
top: 65rpx;
/* #endif */
left: 0rpx;
}
.record-nav .on::after{
background-color: #00B1FF;
}
.record-content {
padding: 0 52rpx;
padding-top: 33rpx;
padding-bottom: 40rpx;
background-color: #FFFFFF;
}
.record-content .title {
color: #333333;
margin-left: 12rpx;
font-size: 30rpx;
margin-bottom: 40rpx;
}
.record-content .list .li {
position: relative;
display: flex;
align-items: center;
padding-top: 20rpx;
border-left: 2rpx solid #999999;
}
.record-content .list .li::before {
content: '';
display: block;
position: absolute;
left: -8rpx;
width: 14rpx;
height: 14rpx;
background-color: #999999;
border-radius: 100%;
}
.record-content .list .activeTrack {
color: #0084ff;
padding-top: 0rpx;
}
.record-content .list .activeTrack::before {
background-color: rgba(0, 132, 255, .5);
top: -4rpx;
width: 22rpx;
height: 22rpx;
left: -12rpx;
z-index: 1;
}
.record-content .list .activeTrack::after {
content: '';
display: block;
position: absolute;
top: 0;
left: -8rpx;
width: 14rpx;
height: 14rpx;
background-color: #999999;
border-radius: 100%;
}
.record-content .list .activeTrack .line-h60 {
margin-top: -26rpx;
margin-bottom: 20rpx;
}
.record-content .list .date {
margin-left: 20rpx;
}
.project-materials-title {
display: flex;
color: #00a2e9;
font-size: 24rpx;
background-color: #FFFFFF;
border-bottom: 2rpx solid #EDEDED;
font-weight: bold;
padding: 26rpx 20rpx;
justify-content: space-between;
}
.project-materials-title .text {
width: 16%;
text-align: center;
}
.project-materials-text {
display: flex;
background-color: #FFFFFF;
border-bottom: 2rpx solid #EDEDED;
padding: 26rpx 20rpx;
font-size: 24rpx;
justify-content: space-between;
}
.project-materials-text .text {
width: 16%;
text-align: center;
}
</style>