<script setup> import { ref, reactive } from "vue"; import { onLoad, } from "@dcloudio/uni-app"; import { getProcessList, getVideoAddress, getProcessContact } from "@/api/work/preFlow.js"; import config from '@/config.js'; const videoPoster = ref(null); let orginalList = []; let processList = ref([]); let lastItem = ref([]); let videoUrl = ref(null); let imageUrl = ref(null); const preViewImage = () => { uni.previewImage({ current: 0, urls: [imageUrl.value], longPressActions: true, }); } let contactValue = reactive({ namePt: null, telPt: null, nameZrr: null, tel: null, nameLead: null, simCode: null }) const getContact = id => { getProcessContact({ id }).then(res => { contactValue.nameLead = res.data.nameLead; contactValue.namePt = res.data.namePt; contactValue.nameZrr = res.data.nameZrr; contactValue.simCode = res.data.simCode; contactValue.tel = res.data.tel; contactValue.telPt = res.data.telPt; }) } // 弹窗显隐 let dialogFlag = ref(false); const dialogShow = id => { dialogFlag.value = true; getContact(id); } const dialogHide = () => { dialogFlag.value = false; } onLoad(() => { getProcessList().then(res => { orginalList = [...res.data.list]; if (res.data.list.length === 0) return; if (res.data.list.length > 1) { res.data.list.length = res.data.list.length - 1; let tempArr = []; for (let i in res.data.list) { tempArr.push(res.data.list[i].list) } processList.value = tempArr; lastItem.value = orginalList[orginalList.length - 1].list; } else { lastItem.value = res.data.list[0].list; } }) const serverAddress = uni.getStorageSync('serverAddress'); const baseUrlIp = serverAddress ? serverAddress : config.baseUrl; videoUrl.value = baseUrlIp + '/projects/outApi/preFlow/vedio'; videoPoster.value = baseUrlIp + '/projects/asset/css/images/video_main.png'; imageUrl.value = baseUrlIp + '/projects/outApi/preFlow/img'; }) </script> <template> <view class="container"> <page-title>办事流程</page-title> <view class="main"> <view class="video-play"> <video :src="videoUrl" :poster="videoPoster"></video> </view> <view class="image-show" @click="preViewImage()"> <image :src="imageUrl"></image> </view> <view class="process-main" v-if="processList.length > 1"> <view class="process-border"></view> <view class="process-list-line"> <view class="process-list" v-for="(item,index) in processList" :key="index"> <view class="process-box"> <view class="process-title"> <view class="process-title-icon"> <view class="process-title-inner">{{index + 1}}</view> </view> 并行审核 </view> <view class="process-items"> <view class="process-item" v-for="(items,indexs) in item" :key="indexs"> <view class="process-item-info"> <view class="process-item-key">文件:</view> <view class="process-item-value">{{items.title ??"--"}}</view> </view> <view class="process-item-info"> <view class="process-item-key">用时:</view> <view class="process-item-value">{{items.num1??"--"}}天至{{items.num2??"--"}}天</view> </view> <view class="process-item-info"> <view class="process-item-key">审核单位 :</view> <view class="process-item-value"> {{items.spUnitDesc??"--"}} <view class="process-item-btn" @click="dialogShow(items.id)">查看</view> </view> </view> <view class="process-item-info"> <view class="process-item-key">科室:</view> <view class="process-item-value">{{items.departDesc??"--"}}</view> </view> <view class="process-item-info"> <view class="process-item-key">备注:</view> <view class="process-item-value">{{items.remark??"--"}}</view> </view> </view> </view> </view> </view> </view> </view> <view class="process-main" v-if="processList.length > 0"> <view class="process-box"> <view class="process-title"> <view class="process-title-icon"> <view class="process-title-inner">{{processList.length + 1}}</view> </view> 并行审核 </view> <view class="process-items"> <view class="process-item" v-for="(items,indexs) in lastItem" :key="indexs"> <view class="process-item-info"> <view class="process-item-key">文件:</view> <view class="process-item-value">{{items.title ??"--"}}</view> </view> <view class="process-item-info"> <view class="process-item-key">用时:</view> <view class="process-item-value">{{items.num1??"--"}}天至{{items.num2??"--"}}天</view> </view> <view class="process-item-info"> <view class="process-item-key">审核单位 :</view> <view class="process-item-value"> {{items.spUnitDesc??"--"}} <view class="process-item-btn" @click="dialogShow(items.id)">查看</view> </view> </view> <view class="process-item-info"> <view class="process-item-key">科室:</view> <view class="process-item-value">{{items.departDesc??"--"}}</view> </view> <view class="process-item-info"> <view class="process-item-key">备注:</view> <view class="process-item-value">{{items.remark??"--"}}</view> </view> </view> </view> </view> </view> </view> <!-- 联系人弹窗 --> <u-popup :show="dialogFlag" :round="20" @close="dialogHide()" mode="center"> <view class="remind-box"> <view class="remind-title"> <view class="remind-title-text">联系人信息</view> </view> <view class="remind-content"> <view class="card no-padding"> <view class="card-item first-card-item"> <view class="card-item-name">项目负责人</view> <view class="card-item-content">{{contactValue.nameZrr ?? "--"}}</view> </view> <view class="card-item"> <view class="card-item-name">项目负责电话</view> <view class="card-item-content">{{contactValue.tel ?? "--"}}</view> </view> <view class="card-item"> <view class="card-item-name">项目分管领导</view> <view class="card-item-content">{{contactValue.nameLead ?? "--"}}</view> </view> <view class="card-item"> <view class="card-item-name">项目分管领导电话</view> <view class="card-item-content">{{contactValue.simCode ?? "--"}}</view> </view> <view class="card-item"> <view class="card-item-name">项目管理平台联系人</view> <view class="card-item-content">{{contactValue.namePt ?? "--"}}</view> </view> <view class="card-item"> <view class="card-item-name">项目管理平台电话</view> <view class="card-item-content">{{contactValue.telPt ?? "--"}}</view> </view> </view> </view> <view class="remind-btns"> <view class="remind-btn" @click="dialogHide()">关闭</view> </view> </view> </u-popup> <!-- 图片预览 --> <!-- <u-popup :show="dialogFlag" :round="20" @close="dialogHide()" mode="center"> <view class="remind-box"> <web-view src="http://192.168.0.143:8080/projects/outApi/preFlow/img"></web-view> </view> </u-popup> --> </view> </template> <style lang="scss" scoped> .main { position: absolute; top: 8%; left: 0; width: 100%; min-height: 92%; padding-top: 68rpx; background-color: #FFF; } .process-main { position: relative; display: flex; width: calc(100% - 68rpx); margin-left: 68rpx; min-height: 500rpx; .process-border { width: 4rpx; background-image: linear-gradient(to bottom, #1763E7 0%, #1763E7 60%, transparent 50%); background-size: 4rpx 40rpx; background-repeat: y-repeat; } .process-box { position: relative; display: flex; justify-content: flex-end; width: 642rpx; margin-bottom: 62rpx; .process-items { margin-top: 24rpx; } } } .process-title { position: absolute; top: -28rpx; left: -28rpx; display: flex; align-items: center; font-weight: 500; color: #1763E7; font-size: 32rpx; .process-title-icon { display: flex; align-items: center; justify-content: center; width: 56rpx; height: 56rpx; margin-right: 30rpx; border: 3rpx solid #1763E7; border-radius: 50%; background-color: #fff; .process-title-inner { display: flex; align-items: center; justify-content: center; width: 40rpx; height: 40rpx; font-weight: 500; color: #FFFFFF; font-size: 32rpx; border-radius: 50%; background-color: #1763E7; text-align: center; } } } .process-item { width: 590rpx; height: 262rpx; border-radius: 16rpx; border: 2rpx solid #E2E2E2; margin-top: 24rpx; padding: 0 32rpx; .process-item-info { display: flex; justify-content: space-between; width: 100%; height: 34rpx; margin: 16rpx 0; font-weight: 400; font-size: 24rpx; .process-item-key { color: #6B768A; } .process-item-value { display: flex; align-items: center; color: #002C78; } .process-item-btn { width: 100rpx; height: 50rpx; margin-left: 16rpx; color: #fff; background-color: #1763E7; line-height: 50rpx; text-align: center; border-radius: 12rpx; } } } .video-play { width: 683rpx; height: 384rpx; margin: 0 auto 50rpx; border-radius: 16rpx; overflow: hidden; video { width: 100%; height: 100%; } } .image-show { width: 683rpx; height: 512rpx; margin: 0 auto 50rpx; border-radius: 16rpx; overflow: hidden; image { width: 100%; height: 100%; } } .remind-box { width: 618rpx; // height: 810rpx; padding: 0 20rpx; overflow: hidden; .remind-title { display: flex; justify-content: center; align-items: center; width: 100%; height: 100rpx; .remind-title-text { font-size: 38rpx; font-weight: 500; color: #3A3333; } } .remind-content { width: 100%; box-sizing: border-box; border-radius: 16rpx; .no-padding { padding: 20rpx 0; } .test { width: 100%; height: 1000rpx; background-color: green; } } .remind-btns { display: flex; justify-content: space-between; align-items: center; width: 100%; height: 92rpx; margin-top: 20rpx; font-size: 30rpx; .remind-btn { width: 100%; height: 64rpx; text-align: center; line-height: 64rpx; font-size: 24rpx; font-weight: 500; color: #FFFFFF; background: #1763E7; border-radius: 39rpx; } } } ::v-deep .u-popup__content { overflow: hidden; } </style>