123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302 |
- <template>
- <view class="page">
- <view class="top">
- <NavigateBar title="个人中心"></NavigateBar>
- <view class="top--desc">
- <view class="top--desc__icon">
- <view class="top--desc__icon-outer">
- <view class="top--desc__icon-inner">
- <u-image :src="userPicPath" width="52rpx" height="52rpx"></u-image>
- </view>
- </view>
- </view>
- <view class="top--desc__word">
- <view class="top--desc__word-name">
- <u-text size="20" :text="userInfo.name" mode="name" format="encrypt" color="#FFFFFF"></u-text>
- </view>
- <view class="top--desc__word-phone">
- <u-text size="16" :text="renderPhoneNumber(userInfo.phone)" mode="name"
- color="#FFFFFF"></u-text>
- </view>
- </view>
- </view>
- </view>
- <view class="middle">
- <view class="middle--item" v-for="(item, index) in itemList" :key="item.src">
- <view class="middle--item__content" @click="navigateTo(item.url, item.text)">
- <view class="middle--item__img">
- <u-image :src="item.src" :width="item.width" :height="item.height" mode="aspectFit"></u-image>
- </view>
- <view class="middle--item__word">{{ item.text }}</view>
- </view>
- </view>
- </view>
- <view class="bottom">
- <u-button text="退出登录" @click="logout" shape="circle" color="#9e97c3"></u-button>
- </view>
- </view>
- </template>
- <script>
- import {
- stringHasText
- } from '../../utils/commonUtils.js'
- import {
- mapState,
- mapMutations
- } from 'vuex'
- import NavigateBar from '../../components/navigateBar/navigate-bar.vue';
- export default {
- components: {
- NavigateBar
- },
- data() {
- return {
- userPicPath: '/static/user.png',
- itemList: [{
- src: "/static/my_order.png",
- text: "我的订单",
- url: '/pages/order/order',
- width: "50rpx",
- height: "60rpx"
- },
- {
- src: "/static/receipt.png",
- text: "预约开票",
- url: '',
- width: "58rpx",
- height: "55rpx"
- },
- {
- src: "/static/front_desk.png",
- text: "联系前台",
- url: '',
- width: "65rpx",
- height: "48rpx"
- },
- {
- src: "/static/user_info.png",
- text: "实名认证",
- url: '/subpkg/myAccount/myAccount',
- width: "73rpx",
- height: "48rpx"
- }
- ]
- };
- },
- computed: {
- ...mapState('m_user', ['userInfo', 'token']),
- ...mapState("m_business", ["currentHotel"]),
- },
- methods: {
- ...mapMutations('m_user', ['updateUserInfo', 'updateToken']),
- ...mapMutations('m_business', ['updateCurrentHotel', 'updateIdCardInfo']),
- navigateTo(url, text) {
- if (url !== '' && url !== null && url !== undefined) {
- if (url === '/pages/order/order') {
- uni.switchTab({
- url: url
- })
- } else {
- uni.navigateTo({
- url: url
- })
- }
- } else {
- if (text === "预约开票") {
- uni.$showMsg('该酒店不支持该服务,请至前台办理')
- } else if (text === "联系前台") {
- uni.showModal({
- title: "联系前台",
- content: `将要拨打前台电话:${this.currentHotel.phone}`,
- success: (res) => {
- if (res.confirm) {
- uni.makePhoneCall({
- phoneNumber: this.currentHotel.phone,
- });
- }
- },
- });
- }
- }
- },
- async logout() {
- console.log(this.token)
- let res = await uni.$http.post('/user/logout')
- console.log(res)
- this.updateUserInfo({
- name: ''
- })
- this.updateToken('')
- // this.updateCurrentHotel({})
- this.updateIdCardInfo([])
- uni.redirectTo({
- url: '/pages/login/login'
- })
- },
- renderPhoneNumber(str) {
- if (!stringHasText(this.userInfo.phone)) return ""
- let strArray = str.split("")
- for (let i = 3; i < 7; i++) {
- strArray[i] = "*"
- }
- let string = strArray.join("")
- // console.log("string", string);
- return string
- }
- },
- onLoad() {
- if (!this.token) {
- uni.redirectTo({
- url: '/pages/login/login'
- })
- }
- },
- // #ifdef MP-WEIXIN
- onShareAppMessage(info) {
- return {
- title: '源享住',
- path: 'pages/login/login',
- imageUrl: "/static/logo.png"
- }
- }
- // #endif
- }
- </script>
- <style>
- .u-button__text {
- color: #FFFFFF;
- }
- page {
- width: 100%;
- height: 100%;
- background-color: #f4f4f4;
- }
- </style>
- <style lang="scss" scoped>
- .page {
- .top {
- width: 100%;
- height: 580rpx;
- background-image: url("/static/mine-top.png");
- background-size: cover;
- background-repeat: no-repeat;
- box-sizing: border-box;
- .top--desc {
- width: 100%;
- display: flex;
- flex-direction: row;
- align-items: center;
- padding: 100rpx 40rpx 0 40rpx;
- .top--desc__icon-outer {
- width: 130rpx;
- height: 130rpx;
- display: flex;
- align-items: center;
- justify-content: center;
- border-radius: 50%;
- background-color: #6c70a1;
- .top--desc__icon-inner {
- width: 110rpx;
- height: 110rpx;
- border-radius: 50%;
- background-color: #FFFFFF;
- display: flex;
- justify-content: center;
- align-items: center;
- }
- }
- .top--desc__word {
- padding-left: 20rpx;
- .top--desc__word-name {
- height: 50rpx;
- display: flex;
- align-items: center;
- }
- .top--desc__word-phone {
- height: 50rpx;
- display: flex;
- align-items: center;
- }
- }
- }
- }
- .middle {
- display: flex;
- flex-direction: row;
- background-color: #FFFFFF;
- margin: 0 20rpx;
- justify-content: space-between;
- padding: 30rpx;
- border-radius: 40rpx;
- transform: translateY(-110rpx);
- .middle--item__content {
- width: 140rpx;
- height: 120rpx;
- display: flex;
- flex-direction: column;
- align-items: center;
- justify-content: space-between;
- .middle--item__img {
- height: 60rpx;
- display: flex;
- align-items: center;
- justify-content: center;
- }
- }
- }
- .my-middle {
- margin-top: 40rpx;
- background-color: white;
- .info-item {
- display: flex;
- justify-content: space-between;
- height: 120rpx;
- line-height: 160rpx;
- border-bottom: 1px solid #F0EFF5;
- margin: 0 40rpx;
- .info-item-left {
- display: flex;
- align-items: center;
- .left-img {
- padding-right: 20rpx;
- display: flex;
- align-items: center;
- justify-content: center;
- }
- }
- .info-item-right {
- display: flex;
- align-items: center;
- color: #AFB2BA;
- }
- }
- }
- .bottom {
- margin: 20rpx;
- transform: translateY(100rpx);
- }
- }
- </style>
|