pull/7/head
qsh 1 year ago
parent d74abad722
commit 129b9808fb
  1. 7
      src/App.vue
  2. 7
      src/jtools/api/login.js
  3. 8
      src/jtools/api/vip.js
  4. 4
      src/jtools/request/index.js
  5. 33
      src/jtools/store/user.js
  6. 6
      src/pages/login/login.vue
  7. 124
      src/pages/me/index.vue

@ -1,7 +1,12 @@
<script>
import useUserStore from '@/jtools/store/user'
export default {
onLaunch: function () {
console.log('App Launch')
useUserStore().queryVipList()
if(useUserStore().isLogin) {
useUserStore().getUserInfo()
useUserStore().searchUserVip()
}
},
onShow: function () {
console.log('App Show')

@ -23,4 +23,11 @@ export function logout() {
url: 'driver-api/tdSysUser/loginOut',
method: 'get',
});
}
export function getInfo() {
return request({
url: 'driver-api/tdSysUser/info',
method: 'get',
});
}

@ -6,4 +6,12 @@ export function queryVip(data) {
method: 'POST',
data,
});
}
export function getVipList(data) {
return request({
url: 'driver-api/tdMember/queryMember',
method: 'POST',
data,
});
}

@ -16,7 +16,7 @@ function service(options = {}) {
});
} else {
options.header = {
Authorization: `Bearer ${token}`
Authorization: `${token}`
};
}
}
@ -34,7 +34,7 @@ function service(options = {}) {
resolved(res.data);
} else if(res.data.code != '0000') {
uni.showToast({
title: resp.message,
title: res.data.message,
icon: 'none'
})
resolved(res.data)

@ -1,5 +1,6 @@
import { defineStore } from 'pinia';
import { login,logout } from '@/jtools/api/login';
import { login,logout,getInfo } from '@/jtools/api/login';
import { queryVip,getVipList } from '@/jtools/api/vip'
import constants from '@/jtools/constants';
import storage from '@/jtools/storage';
@ -9,11 +10,13 @@ const useUserStore = defineStore({
token: storage.get('token'),
isLogin: storage.get('isLogin'), // 是否登陆
userInfo: storage.get('userInfo'), // 用户信息
currentCartype: storage.get('carType') || '1001',
vipOnList: [],
vipAllList: []
}),
actions: {
login(params) {
// commit('isLogin', true);
return new Promise(async (resolve, reject) => {
const resp = await login(params);
if (resp.code === '0000') {
@ -40,13 +43,39 @@ const useUserStore = defineStore({
resolve();
})
},
// 获取用户信息
getUserInfo() {
getInfo().then(resp => {
if(resp.code == '0000') {
this.userInfo = resp.data
storage.set('userInfo', resp.data)
}
})
},
resetUserData() {
this.isLogin = false;
this.token = '';
this.userInfo = {}
this.vipOnList = []
storage.remove('isLogin')
storage.remove('token')
storage.remove('userInfo')
},
// 查询当前用户的vip开通情况
searchUserVip() {
queryVip({ carTypeId: this.currentCartype,memberId: null, subject:'' }).then(resp => {
if(resp.code == '0000') {
this.vipOnList = resp.data
}
})
},
// 查询所有的vip
queryVipList() {
getVipList({ carTypeId: this.currentCartype,memberId: null, subject:'' }).then(resp => {
if(resp.code == '0000') {
this.vipAllList = resp.data
}
})
}
},
});

@ -57,19 +57,19 @@
getCode({
phone: this.login.phone
}).then(resp => {
if (resp.code == '0000') {
// if (resp.code == '0000') {
uni.showToast({
title: '发送成功!',
icon: 'none'
})
this.countDown = 60
this.js = setInterval(() => {
this.countDown;
this.countDown--;
if (this.countDown == 0) {
this.clear()
}
}, 1000)
}
// }
})
}
},

@ -8,7 +8,7 @@
<view class="ml12">
<view class="flex ai-c fs18 cor-333 fwb">
<text class="mr10">{{ user.userName }}{{user.userId}}</text>
<image src="/static/image/mine/vip.png" mode="widthFix" style="width: 18px;"></image>
<image v-if="vipOn.length" src="/static/image/mine/vip.png" mode="widthFix" style="width: 18px;"></image>
</view>
<view class="mt5 fs14 cor-666">陪您学车 {{ user.count }}</view>
</view>
@ -26,47 +26,52 @@
<view class="p15lr" style="transform: translateY(-90px);">
<view class="relative mb10" @tap="handleVip">
<image src="/static/image/mine/vip_bg.png" mode="widthFix" style="width: 100%;"></image>
<view class="absolute p15lr p10tb flex ai-c jc-sb" style="left: 0;top: 0;right: 0;height: 40px;">
<view class="absolute p15lr p10tb flex ai-c jc-sb" style="left: 0;top: 0;right: 0;height: 40px;">
<view class="flex ai-c">
<view class="p3 br-p50" style="background-color: #873E1D;">
<image src="/static/image/mine/vip.png" mode="widthFix" style="width: 18px;height: 15px;"></image>
</view>
<text class="ml5 fs16 fwb" style="color: #7E4012FF;">VIP会员</text>
</view>
<text class="fs12" style="color: #7E4012FF;">2024-12-12到期</text>
<text v-if="vipOn.length" class="fs12" style="color: #7E4012FF;">{{expireTime}}到期</text>
</view>
<view class="absolute flex ai-c jc-c" style="left: 0;top: 40px;right: 0;bottom: 0;">
<view class="text-center">
<view class="fs18 fwb" style="color: #7E4012FF;">尊享科目一二三四全部付费权益</view>
<view v-if="vipOn.length" class="fs18 fwb" style="color: #7E4012FF;">{{vipText}}</view>
<view class="study fs16 text-center" style="margin: 25px auto 0;color: #F6E99FFF;">
马上学习
{{ vipOn.length?'马上学习':'开通会员'}}
</view>
</view>
</view>
</view>
<view class="br8 bc-fff p15 z-index2">
<text class="fs16 cor-333">我的驾校</text>
<div class="mt12 flex ai-c jc-sb">
<text class="fs18 cor-000 fwb">合肥八一驾校</text>
<u-button text="切换驾校" shape="circle" @click="handleChangeSchool"></u-button>
</div>
<u-line margin="14px 0 18px 0"></u-line>
<view class="flex ai-c" @tap="handleCallPhone">
<view class="flex ai-c jc-c phone">
<img src="/static/image/mine/phone.png" style="width: 12px;height: 12px;">
<text class="ml2 fs12 cor-fff">客服热线</text>
<view v-if="user.schoolId">
<div class="mt12 flex ai-c jc-sb">
<text class="fs18 cor-000 fwb">{{user.schoolName}}</text>
<u-button text="切换驾校" shape="circle" @click="handleChangeSchool"></u-button>
</div>
<u-line margin="14px 0 18px 0"></u-line>
<view class="flex ai-c" @tap="handleCallPhone">
<view class="flex ai-c jc-c phone">
<img src="/static/image/mine/phone.png" style="width: 12px;height: 12px;">
<text class="ml2 fs12 cor-fff">客服热线</text>
</view>
<text class="ml5 fs26 cor-333 fwb" style="line-height: 26px;">{{user.schoolPhone}}</text>
</view>
<text class="ml5 fs26 cor-333 fwb" style="line-height: 26px;">0551-12345678</text>
</view>
<view v-else class="pt30 pb15">
<u-button text="绑定驾校" shape="circle" @click="handleChangeSchool"></u-button>
</view>
</view>
<view class="mt12 bc-fff br8">
<u-cell-group>
<u-cell size="large" title="我的资料" value="修改" isLink @tap="handleInfo">
<u-cell size="large" title="我的资料" isLink @tap="handleInfo">
<template #icon>
<img src="/static/image/mine/wdzl.png" style="width: 24px;height: 24px;">
</template>
</u-cell>
<u-cell size="large" title="我的体检" value="查看报告" isLink @tap="handleTJ">
<u-cell size="large" title="我的体检" isLink @tap="handleTJ">
<template #icon>
<img src="/static/image/mine/wdtj.png" style="width: 24px;height: 24px;">
</template>
@ -78,7 +83,7 @@
</u-cell>
</u-cell-group>
</view>
<view class="flex ai-c jc-c mt12 br8 bc-fff" style="height: 50px;" @tap="handleLogout">
<view v-if="isLogin" class="flex ai-c jc-c mt12 br8 bc-fff" style="height: 50px;" @tap="handleLogout">
<text class="fs16" style="color: #A09F9F;">退出登录</text>
</view>
</view>
@ -86,7 +91,6 @@
</template>
<script>
import useUserStore from '@/jtools/store/user'
import { queryVip } from '@/jtools/api/vip'
export default {
components: {},
computed: {
@ -94,7 +98,36 @@ export default {
return useUserStore().isLogin
},
user() {
return useUserStore().userInfo
let userInfo = useUserStore().userInfo
return { ...userInfo, count: this.dateDiff(userInfo.createTime) }
},
vipOn() {
return useUserStore().vipOnList
},
expireTime() {
if(this.vipOn.length) {
const t = this.vipOn.reduce((pre, cur) => {
if(Date.parse(pre) > Date.parse(cur.endDate)) {
return cur.endDate
}
return pre
}, '2099-12-31')
return t.split(' ')[0]
}else {
return ''
}
},
vipText() {
if(this.vipOn.length) {
const t = this.vipOn.reduce((pre, cur) => {
return [...pre, ...cur.subjects.split(',').map(it =>['','一','二','三','四'][it])]
}, [])
let val = Array.from(new Set(t))
val = val.length == 4 ? val.join('')+'全部':val.join('')
return `尊享科目${val}付费权益`
}else {
return ''
}
}
},
data() {
@ -102,30 +135,36 @@ export default {
};
},
onShow() {
this.searchVip()
},
methods: {
searchVip() {
queryVip().then(resp => {
if(resp.code == '0000') {
debugger
}
})
},
handleVip() {
uni.navigateTo({
url: '/pages/me/vip'
})
if(this.isLogin) {
if(this.vipOn.length) {
uni.navigateTo({
url: '/pages/me/vip'
})
} else {
uni.navigateTo({
url: '/pages/index/videoVip'
})
}
} else {
this.toLogin()
}
},
handleCallPhone() {
uni.makePhoneCall({
phoneNumber: '17318531354'
phoneNumber: this.user.schoolPhone
})
},
handleChangeSchool() {
uni.navigateTo({
url: '/pages/me/school'
})
if(this.isLogin) {
uni.navigateTo({
url: '/pages/me/school'
})
} else {
this.toLogin()
}
},
handleInfo() {
if(this.isLogin) {
@ -152,7 +191,20 @@ export default {
},
handleLogout() {
useUserStore().logout()
}
},
dateDiff(end){
if(!end) {
return 1
}
today = new Date();
end = new Date(end);
if(end > today){
days = parseInt(Math.abs(end - today) / 1000 / 60 / 60 / 24);
}else{
days = parseInt(Math.abs(end - today) / 1000 / 60 / 60 / 24); // if
}
return days + 1;
},
}
}
</script>

Loading…
Cancel
Save