Newer
Older
gdtMimiProgram / pages / message / message.vue
dutingting on 23 Mar 2023 8 KB bug修复,需求更改
<!-- 消息 -->
<template>
  <view class="message">
    <!-- <TabBar></TabBar> -->
		<!-- <u-empty 
			:show="!list.length" 
			mode="coupon"  
			width="300"
			height="260"
			text="暂无消息"
			iconColor="#ff7b7c"
			textColor="#333"
			textSize="18"
			icon="http://cdn.uviewui.com/uview/empty/coupon.png"
			marginTop="20">
		</u-empty> -->
    <view class="main" v-for="(item, index) in list" :key="index">
      <view class="date-time">{{ item.messageTime }}</view>
      <view class="card" @click="clickDetail(item.id)">
        <view class="title">
          <!-- <text v-show="isManager">收到新的访客申请</text>
					<text v-show="!isManager" class="text">您的访客信息{{item.status}}</text> -->
          <view class="ui">
            <view class="text">
              <text class="name">{{ item.name }}</text>
              <text class="number">{{ item.number }}</text>
            </view>

            <view :class=" item.status === '未通过' ? 'button-area' : item.status === '已通过' ? 'button-area pass' : 'button-area submit'">
							申请{{ item.status }}
						</view>
          </view>
          <view class="ui-time">
            <text class="start">{{ item.startTime }}</text>
            <text class="text"> 至 </text>
            <text class="end">{{ item.endTime }}</text>
            <!-- <text class="end">{{item.timeData}}</text> -->
          </view>
        </view>
        <!-- <view class="content">
					<text class="content-title">申请者工号:</text>
					<text class="value">{{item.number}}</text>
				</view>
				<view class="content">
					<text>ㅤ访客姓名:</text>
					<text>{{item.name}}</text>
				</view>
				<view class="content">
					<text>ㅤ访问时间:</text>
					<text>{{item.time}}</text>
				</view> -->
        <!-- <view class="detail-area">
					<view class="detail" @click="clickDetail">详ㅤ情</view>
				</view> -->
      </view>
    </view>

   <!-- 获取手机号popup组件 -->
   <GetPhonePopup :popShow="popShow" @closePop="closePop" @refresh="refresh"/>
	 <LoadingList :loading="loading" :nothingMore="nothingMore" />
	 
	 <!-- 返回顶部 -->
	 <u-back-top 
	 	:scroll-top="scrollTop" 
	 	icon="arrow-up" 
	 	duration="200"
	 ></u-back-top>
  </view>
</template>

<script>
import TabBar from "@/components/tabBar/tabBar.vue";
import { js_date_time } from "../../common/formatTime.js";
import { getMessageList } from "@/api/message.js";
import { dateToString, getDateTime } from "@/common/utils.js";
import { verifyPhone } from "@/api/index.js";
import { getLogin, getUserProfile } from "@/utils/auth.js";
import GetPhonePopup from "@/components/base/getphonePopup.vue"
import LoadingList from '@/components/base/LoadingList.vue';
export default {
  components: {
    TabBar, GetPhonePopup, LoadingList
  },
  data() {
    return {
      isManager: false,  //是否是物业管理员
			scrollTop: 0,
      list: [], 
      phone: "",
			popShow: false, //控制授权手机号弹出框
			offset: 1,   //页数
			limit: 10,   //一页几条数据
			nothingMore: false, //上拉加载-没有数据了
			loading: false, //是否显示上拉加载-加载中
    };
  },
  onShow() {
    //获取页面栈
    let pages = getCurrentPages();
    const curPage = pages[pages.length - 1];
    this.currentPagePath = curPage.route;
    uni.setStorageSync("currentPagePath", this.currentPagePath);
    this.phone = uni.getStorageSync("registerPhone");
    this.checkphone()
		this.offset = 1;
  },
	//下拉刷新
	onPullDownRefresh() {
		this.offset = 1;
		this.list = [];
	  this.fetchMessageList().then(() => {
			uni.stopPullDownRefresh(); //停止下拉刷新
		});
	},
	//上滑加载
	onReachBottom() {
		this.getLoadingList();
	},
	// 监听滚动条位置
	onPageScroll(e) {
		this.scrollTop = e.scrollTop;
	},
  mounted() {
		uni.showShareMenu({
			withShareTicket: true,
			menus: ["shareAppMessage"]
		});
    if (uni.getStorageSync("userInfo")) {
      const userInfo = JSON.parse(uni.getStorageSync("userInfo"));
      if (userInfo.salt === "物业人员" || userInfo.salt === '运维人员') {
        this.isManager = true;
      } else {
        this.isManager = false;
      }
    }
  },
	//分享好友
	onShareAppMessage() {
		return {
			title: '环市东院区安防小程序',
			imageUrl: '../../static/share.jpg',
		};
	},
  methods: {
		//跳转消息详情页
    clickDetail(id) {
      wx.navigateTo({
        url: `/pages/checkMessageDetail/checkMessageDetail?id=${id}`,
      });
    },
    //获取消息列表
    async fetchMessageList() {
			if(!this.loading) {
				this.list = [];
			}
			const param = {
				offset: this.offset,
				limit: this.limit
			}
      const res = await getMessageList(param);
			if(res.records && res.records.length) {
				this.nothingMore = false;
				const responseData = res.records.map((item) => {
				  return {
				    id: item.message_id,
				    name: item.visitor_name,
				    number: item.staff_code,
				    timeData: item.apply_time,
				    startTime: dateToString(
				      new Date(item.apply_time.slice(0, item.apply_time.indexOf("-"))),
				      "yyyy-MM-dd"
				    ),
				    endTime: dateToString(
				      new Date(item.apply_time.slice(item.apply_time.indexOf("-") + 1)),
				      "yyyy-MM-dd"
				    ),
				    status:
				      item.visitor_apply_status === "1"
				        ? "已提交"
				        : item.visitor_apply_status === "2"
				        ? "已通过"
				        : "未通过",
				    messageTime: getDateTime(new Date(Number(item.send_time)).getTime()),
				  };
				});
				this.list = this.list.concat(responseData);
			} else {
				this.nothingMore = true;
			} 
    },
    // 验证手机号
		async checkphone() {
      //有电话就去验证
      if (this.phone) {
        const res = await verifyPhone(this.phone);
        if (res === "用户未注册") {
          wx.reLaunch({
            url: "/pages/register/register",
          });
        } else {
          uni.setStorageSync("registerPhone", this.phone);
          getUserProfile();
					this.refresh();
        }
      } else {
        //没有电话就弹出授权
        this.popShow = true;
				console.log('消息页面', this.popShow)
      }
    },
		closePop() {
			this.popShow = false;
		},
		//上拉加载
		async getLoadingList() {
		  if (this.nothingMore) return;
		  this.offset = this.offset + 1;
		  this.loading = true;
		  await this.fetchMessageList();
		  this.loading = false;
		},
		refresh() {
			this.offset = 1;
			this.fetchMessageList();
		}
  },
};
</script>

<style lang="scss" scoped>
.message {
	min-height: 100%;
  padding: 40rpx;
  padding-bottom: 200rpx;
  .date-time {
    display: flex;
    justify-content: center;
    align-items: center;
    margin-top: 40rpx;
    margin-bottom: 20rpx;
    color: #9b9b9b;
  }
  .card {
    padding: 30rpx 32rpx;
    background-color: #fff;
    border-radius: 16rpx;
    margin-bottom: 20rpx;
    .title {
      display: flex;
      // flex-direction: row;
      flex-direction: column;
      // justify-content: space-between;
      // align-items: center;
      font-size: 32rpx;
      .ui {
        display: flex;
        flex-direction: row;
        justify-content: space-between;
        align-items: center;
        .text {
          display: flex;
          flex-direction: row;
          align-items: center;
          .name {
            color: #333;
            font-weight: 500;
            font-size: 36rpx;
            white-space: nowrap;
          }
          .number {
            color: #b1b1b1;
            margin-left: 20rpx;
          }
        }
      }
      .ui-time {
        display: flex;
        flex-direction: row;
        align-items: center;
        color: #b1b1b1;
        margin-top: 30rpx;
        .text {
          margin: 0 20rpx;
        }
      }
      .text {
        // font-weight: 600;
      }
      .button-area {
        padding: 6rpx 16rpx;
        background-color: #f02a0a;
        border-radius: 16rpx;
        color: #ecf9e8;
        font-size: 28rpx;
        white-space: nowrap;
      }
      .pass {
        background-color: #2ebf00;
      }
      .submit {
        background-color: #1076e3;
      }
    }
    .content {
      margin: 32rpx 0;
      .content-title {
        // margin-right: 32rpx;
      }
    }
    .detail-area {
      width: 100%;
      display: flex;
      justify-content: flex-end;
      .detail {
        width: fit-content;
        padding: 10rpx 16rpx;
        background-color: blue;
        border-radius: 16rpx;
        // letter-spacing: 10rpx;
      }
    }
  }
}
</style>
<style lang="scss">
.message {
  .u-popup__content {
    padding: 20rpx 40rpx;
  }
}
</style>