From 69a1b3bf45738f048361ee4ccb6bdc64fce35720 Mon Sep 17 00:00:00 2001
From: MrShi <1878285526@qq.com>
Date: 星期三, 12 三月 2025 11:31:46 +0800
Subject: [PATCH] 更新

---
 h5/pages/staff/task/visitorReport.vue |  527 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 527 insertions(+), 0 deletions(-)

diff --git a/h5/pages/staff/task/visitorReport.vue b/h5/pages/staff/task/visitorReport.vue
new file mode 100644
index 0000000..d8f611e
--- /dev/null
+++ b/h5/pages/staff/task/visitorReport.vue
@@ -0,0 +1,527 @@
+<template>
+  <view class="main_app">
+    <view class="status_wrap">
+      <view class="name">{{ info.createMemberName }}鎻愪氦鐨勮瀹㈡姤澶�</view>
+      <view
+        class="desc"
+        :class="{
+          gray: info.businessStatus == '2' || info.businessStatus == '3' || info.businessStatus == '4',
+        }"
+        >{{ info.info }}</view
+      >
+      <view v-if="info.businessStatus == '0' || info.businessStatus == '1'" class="status">{{
+        statusMap[info.businessStatus]
+      }}</view>
+      <image v-if="info.businessStatus == '2'" src="@/static/ic_passed@2x.png" mode="widthFix" class="status_img"></image>
+      <image v-if="info.businessStatus == '3' || info.businessStatus == '6'" src="@/static/ic_refused@2x.png" mode="widthFix"
+        class="status_img"></image>
+    </view>
+    <!--  -->
+    <view class="emyty"></view>
+    <view class="module_list">
+      <view class="item">
+        <view class="label">琚浜�</view>
+        <view class="value">{{ info.receptMemberName }} {{ info.receptMemberDepartment }}</view>
+      </view>
+      <view class="item">
+        <view class="label">棰勮鍏�/绂诲洯鏃堕棿</view>
+        <view class="value" v-if="info.starttime">{{ info.starttime.slice(5, 16) }} 鑷�
+          {{ info.endtime.slice(5, 16) }}</view>
+      </view>
+      <view class="emyty"></view>
+
+      <view class="item">
+        <view class="label">鑱旂郴浜轰俊鎭�</view>
+        <view class="value">{{ info.name }} {{ info.phone }}</view>
+      </view>
+      <view class="item">
+        <view class="label">鍏ュ洯杞﹁締</view>
+        <view class="value">{{ info.carNos }}</view>
+      </view>
+      <view class="item">
+        <view class="label">闅忚溅浜烘暟</view>
+        <view class="value">{{ info.memberNum }}浜�</view>
+      </view>
+      <view class="item">
+        <view class="label">璁垮鍗曚綅</view>
+        <view class="value">{{ info.companyName }}</view>
+      </view>
+      <view class="item">
+        <view class="label">鏉ヨ浜嬬敱</view>
+        <view class="value">{{ info.reason }}</view>
+      </view>
+    </view>
+    <!-- 娴佺▼ -->
+    <view class="flow_wrap">
+      <view class="flow_title">娴佺▼</view>
+      <view class="list" v-if="
+        info.approveDateVO != null && info.approveDateVO.approveList != null
+      ">
+        <view class="item" v-for="(item, index) in info.approveDateVO.approveList" :key="item.id">
+          <view class="separate"></view>
+          <view class="avatar">
+            <image v-if="item.type == 1" class="img" src="@/static/staff/ic_chaosong@2x.png" />
+            <image v-else-if="item.approveType == 1 || item.approveType == 0" class="img"
+              src="@/static/staff/ic_shenpiren@2x.png" />
+						<image v-else-if="item.faceImg" :src="item.faceImg" class="img"></image>
+            <span v-else class="img_name">{{ item.memberName && item.memberName.slice(0, 1) }}</span>
+            <image v-if="item.status == 2" class="status" src="@/static/staff/liucheng_success@2x.png"
+              mode="widthFix" />
+            <image v-if="item.status == 3" class="status" src="@/static/staff/liucheng_fail@2x.png" mode="widthFix" />
+          </view>
+          <view class="content">
+            <view class="head">
+              <view class="event">{{ item.title }}</view>
+              <view class="time">{{ item.checkDate }}</view>
+            </view>
+            <view class="name_wrap">
+              <text>{{ item.memberName
+                }}<text :class="{ status: item.statusInfo == '澶勭悊涓�' || item.status == '1' }" v-if="item.statusInfo">({{
+                  item.statusInfo }})</text></text>
+            </view>
+            <view v-if="item.checkInfo" class="remark">{{
+              item.checkInfo
+              }}</view>
+            <!-- 鎶勯�佷汉 -->
+            <view v-if="item.approveType == 0 || item.type == 1 || item.approveType == 1" class="children">
+              <view class="child" v-for="child in item.approveList" :key="child.id">
+                <image v-if="child.faceImg" class="child_img" :src="child.faceImg" />
+                <view v-else class="child_name">{{ child.memberName && child.memberName.slice(0, 1) }}</view>
+                <view>{{ child.memberName }}</view>
+              </view>
+            </view>
+          </view>
+        </view>
+      </view>
+    </view>
+    <view class="emyty"></view>
+    <view v-if="
+      info.approveDateVO != null &&
+      info.approveDateVO.canBeApproved != null &&
+      info.approveDateVO.canBeApproved == 1
+    " class="main_footer">
+      <view class="btn" @click="handleSub(3)">鎷掔粷</view>
+      <view class="btn agree" @click="handleSub(2)">鍚屾剰</view>
+    </view>
+
+    <u-popup :show="showApprModal" :round="10" :safeAreaInsetBottom="true" mode="bottom" @close="showApprModal = false">
+      <view class="appr_modal">
+        <view class="title">{{ param.status == 2 ? "鍚屾剰" : "鎷掔粷" }}</view>
+        <textarea v-model="param.checkInfo" :placeholder="param.status == 2 ? '鍚屾剰璇存槑锛岄潪蹇呭~' : '鎷掔粷璇存槑锛屽繀濉�'
+          " placeholder-class="placeholder9" />
+        <view class="main_footer">
+          <view class="btn" @click="showApprModal = false">鍙栨秷</view>
+          <view class="btn agree" @click="onSubmit">鎻愪氦</view>
+        </view>
+      </view>
+    </u-popup>
+  </view>
+</template>
+
+<script>
+import {
+  getVisitedReDetail, // 璁垮棰勭害璇︽儏
+  carUseBookAppr
+} from '@/api'
+export default {
+  data() {
+    return {
+      showApprModal: false,
+      param: {},
+      info: {},
+
+      id: '',
+      type: '',
+      infoStatus: '',
+      cateList: [
+        { name: '璁垮鐢宠', id: 0 },
+        { name: '璁垮鎶ュ', id: 1 },
+        { name: '鐢ㄨ溅鐢宠', id: 2 },
+        { name: '闅愭偅闅忔墜鎷�', id: 3 },
+        { name: '鐗╂祦杞︾敵璇�', id: 4 },
+      ],
+      statusMap: {
+        0: '寰呭鎵�',
+        1: '瀹℃壒涓�',
+        2: '宸查�氳繃',
+        3: '宸叉嫆缁�',
+        4: '宸插彇娑�',
+      }
+    }
+  },
+  onLoad(op) {
+		uni.setStorageSync('ywinfo',{})
+    this.id = op.id
+    this.getDetail()
+  },
+  methods: {
+    getDetail() {
+      const { id } = this
+      getVisitedReDetail({ id }).then(res => {
+        this.info = res.data
+        if (this.info.approveDateVO && this.info.approveDateVO.approveList.length > 0) {
+          this.info.approveDateVO.approveList.forEach(item => {
+            if (item.approveList && item.approveList.length == 1 && item.type !== 1) {
+              item.title = item.approveList[0].title
+              item.faceImg = item.approveList[0].faceImg
+              item.memberName = item.approveList[0].memberName
+              item.statusInfo = item.approveList[0].statusInfo
+              item.status = item.approveList[0].status
+              item.approveList = []
+            }
+          })
+        }
+      })
+    },
+    onSubmit() {
+      const { param, info } = this
+      if (param.status == '3' && !param.checkInfo) {
+        return uni.showToast({
+          title: '璇疯緭鍏ユ嫆缁濊鏄�',
+          icon: 'none'
+        })
+      }
+      carUseBookAppr({
+        status: param.status,
+        objType: 2,
+        objId: this.id,
+        // driverId: param.driverId,
+        checkInfo: param.checkInfo
+      }).then(res => {
+        if (res.code === 200) {
+          this.showApprModal = false
+          setTimeout(() => {
+            uni.showToast({
+              title: '鎿嶄綔鎴愬姛',
+              icon: 'success'
+            })
+          })
+          uni.navigateBack()
+        }
+      })
+    },
+    handleSub(status) {
+      // this.param.flag = 
+      this.param = {
+        status
+      }
+      this.showApprModal = true
+      this.showApprModal = true
+    },
+  },
+}
+</script>
+<style>
+page {
+  background-color: #f7f7f7;
+}
+</style>
+<style lang="scss">
+.main_app {
+  background-color: #fff;
+  padding-bottom: 0;
+
+  .flow_wrap {
+  	padding: 30rpx 0;
+  
+  	.flow_title {
+  		font-weight: 600;
+  		font-size: 32rpx;
+  		color: #222222;
+  		margin-bottom: 24rpx;
+  	}
+  
+  	.list {
+  		.item {
+  			display: flex;
+  			margin-bottom: 48rpx;
+  			position: relative;
+  
+  			.separate {
+  				position: absolute;
+  				width: 4rpx;
+  				height: 100%;
+  				background-color: #eeeeee;
+  				left: 40rpx;
+  				transform: translate(-50%, 0);
+  				top: 80rpx;
+  			}
+  
+  			.avatar {
+  				width: 80rpx;
+  				height: 80rpx;
+  				position: relative;
+  				margin-right: 20rpx;
+  				display: flex;
+  				align-items: center;
+  				justify-content: center;
+  
+  				.img {
+  					width: 80rpx;
+  					height: 80rpx;
+  					border-radius: 50%;
+  				}
+  
+  				.img_name {
+  					font-size: 32rpx;
+  					color: #FFFFFF;
+  				}
+  
+  				.status {
+  					width: 28rpx;
+  					height: 28rpx;
+  					border-radius: 50%;
+  					position: absolute;
+  					right: 0;
+  					bottom: 0;
+  				}
+  			}
+  
+  			.content {
+  				flex: 1;
+  
+  				.head {
+  					display: flex;
+  					justify-content: space-between;
+  					margin-bottom: 4rpx;
+  
+  					.event {
+  						font-size: 30rpx;
+  					}
+  
+  					.time {
+  						font-size: 26rpx;
+  						color: #999999;
+  					}
+  				}
+  
+  				.name_wrap {
+  					font-size: 26rpx;
+  					color: #777777;
+  
+  					.status {
+  						color: $uni-color-primary;
+  					}
+  				}
+  
+  				.children {
+  					display: flex;
+  					flex-wrap: wrap;
+  					margin-top: 12rpx;
+  
+  					.child {
+  						display: flex;
+  						flex-direction: column;
+  						justify-content: center;
+  						align-items: center;
+  						margin-right: 12rpx;
+  						font-size: 26rpx;
+  						color: #777777;
+  
+  						.child_img {
+  							width: 48rpx;
+  							height: 48rpx;
+  							border-radius: 50%;
+  							margin-bottom: 2rpx;
+  						}
+  
+  						.child_name {
+  							margin-bottom: 2rpx;
+  							width: 48rpx;
+  							height: 48rpx;
+  							text-align: center;
+  							justify-content: center;
+  							padding-top: 4rpx;
+  							font-size: 28rpx;
+  							border-radius: 50%;
+  							color: #FFFFFF;
+  							background-color: $uni-color-primary;
+  						}
+  					}
+  				}
+  
+  				.remark {
+  					margin-top: 12rpx;
+  					background-color: #f7f7f7;
+  					padding: 14rpx 20rpx;
+  					border-radius: 8rpx;
+  					font-size: 26rpx;
+  					color: #666666;
+  					line-height: 36rpx;
+  				}
+  			}
+  
+  			.carbon {
+  				display: flex;
+  				width: 590rpx;
+  				overflow-x: auto;
+  				margin-top: 12rpx;
+  
+  				.carbon_item {
+  					text-align: center;
+  					flex-shrink: 0;
+  					width: 100rpx;
+  
+  					image {
+  						width: 60rpx;
+  						height: 60rpx;
+  						margin: 0 auto;
+  					}
+  
+  					view {
+  						font-size: 26rpx;
+  						color: #777777;
+  					}
+  				}
+  			}
+  
+  			&:nth-last-child(1) {
+  				.separate {
+  					height: 0;
+  				}
+  			}
+  		}
+  	}
+  }
+
+  .module_list {
+    .item {
+      padding: 30rpx 0;
+      border-bottom: 1rpx solid #e5e5e5;
+
+      .label {
+        font-size: 26rpx;
+        color: #666666;
+        margin-bottom: 20rpx;
+      }
+
+      .value {
+        font-size: 30rpx;
+        display: flex;
+        align-items: center;
+
+        .avatar {
+          margin-right: 20rpx;
+          width: 120rpx;
+          height: 120rpx;
+          border-radius: 8rpx;
+          border: 2rpx solid #e5e5e5;
+        }
+
+        .info {
+          flex: 1;
+          display: flex;
+          flex-direction: column;
+          justify-content: space-between;
+          font-size: 26rpx;
+          color: #666666;
+
+          .name {
+            font-size: 30rpx;
+            color: #333333;
+          }
+        }
+      }
+    }
+  }
+
+  .status_wrap {
+    position: relative;
+    padding: 30rpx 0;
+
+    .name {
+      font-weight: 600;
+      font-size: 32rpx;
+      margin-bottom: 20rpx;
+      color: #222222;
+    }
+
+    .desc {
+      font-size: 26rpx;
+      color: #ed4545;
+    }
+
+    .gray {
+      color: #999999;
+    }
+
+    .status {
+      position: absolute;
+      right: -30rpx;
+      top: 0;
+      height: 60rpx;
+      line-height: 60rpx;
+      padding: 0 32rpx;
+      border-radius: 0rpx 0rpx 0rpx 30rpx;
+      background-color: #e9edff;
+      color: $uni-color-primary;
+    }
+
+    .status_img {
+      position: absolute;
+      right: 0rpx;
+      top: 20rpx;
+      width: 120rpx;
+    }
+  }
+
+  .main_footer {
+    padding-bottom: 64rpx;
+    display: flex;
+    justify-content: space-between;
+    width: 100%;
+    left: 0;
+    display: flex;
+    justify-content: space-between;
+    background: #ffffff;
+
+    .btn {
+      width: 336rpx;
+      height: 88rpx;
+      line-height: 88rpx;
+      background: #ffffff;
+      border-radius: 44rpx;
+      border: 1rpx solid #999999;
+      font-size: 32rpx;
+      text-align: center;
+      margin: 16rpx 0;
+    }
+
+    .agree {
+      background: $uni-color-primary;
+      color: #fff;
+      border: 1rpx solid $uni-color-primary;
+    }
+  }
+
+  .appr_modal {
+    padding: 36rpx 30rpx 0;
+
+    .title {
+      font-weight: 600;
+      font-size: 32rpx;
+      color: #222222;
+      margin-bottom: 40rpx;
+      text-align: center;
+    }
+
+    textarea {
+      box-sizing: border-box;
+      width: 690rpx;
+      background-color: #f7f7f7;
+      font-size: 28rpx;
+      color: #333333;
+      padding: 24rpx;
+      border-radius: 8rpx;
+      margin-bottom: 30rpx;
+    }
+  }
+
+  .emyty {
+    width: 750rpx;
+    height: 20rpx;
+    background-color: #f7f7f7;
+    margin: 0 -30rpx;
+  }
+}
+</style>

--
Gitblit v1.9.3