联调 #7

Merged
qiushanhe merged 1 commits from dev-qsh into master 1 year ago
  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> <script>
import useUserStore from '@/jtools/store/user'
export default { export default {
onLaunch: function () { onLaunch: function () {
console.log('App Launch') useUserStore().queryVipList()
if(useUserStore().isLogin) {
useUserStore().getUserInfo()
useUserStore().searchUserVip()
}
}, },
onShow: function () { onShow: function () {
console.log('App Show') console.log('App Show')

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

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

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

@ -1,5 +1,6 @@
import { defineStore } from 'pinia'; 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 constants from '@/jtools/constants';
import storage from '@/jtools/storage'; import storage from '@/jtools/storage';
@ -9,11 +10,13 @@ const useUserStore = defineStore({
token: storage.get('token'), token: storage.get('token'),
isLogin: storage.get('isLogin'), // 是否登陆 isLogin: storage.get('isLogin'), // 是否登陆
userInfo: storage.get('userInfo'), // 用户信息 userInfo: storage.get('userInfo'), // 用户信息
currentCartype: storage.get('carType') || '1001',
vipOnList: [],
vipAllList: []
}), }),
actions: { actions: {
login(params) { login(params) {
// commit('isLogin', true);
return new Promise(async (resolve, reject) => { return new Promise(async (resolve, reject) => {
const resp = await login(params); const resp = await login(params);
if (resp.code === '0000') { if (resp.code === '0000') {
@ -40,13 +43,39 @@ const useUserStore = defineStore({
resolve(); resolve();
}) })
}, },
// 获取用户信息
getUserInfo() {
getInfo().then(resp => {
if(resp.code == '0000') {
this.userInfo = resp.data
storage.set('userInfo', resp.data)
}
})
},
resetUserData() { resetUserData() {
this.isLogin = false; this.isLogin = false;
this.token = ''; this.token = '';
this.userInfo = {} this.userInfo = {}
this.vipOnList = []
storage.remove('isLogin') storage.remove('isLogin')
storage.remove('token') storage.remove('token')
storage.remove('userInfo') 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({ getCode({
phone: this.login.phone phone: this.login.phone
}).then(resp => { }).then(resp => {
if (resp.code == '0000') { // if (resp.code == '0000') {
uni.showToast({ uni.showToast({
title: '发送成功!', title: '发送成功!',
icon: 'none' icon: 'none'
}) })
this.countDown = 60 this.countDown = 60
this.js = setInterval(() => { this.js = setInterval(() => {
this.countDown; this.countDown--;
if (this.countDown == 0) { if (this.countDown == 0) {
this.clear() this.clear()
} }
}, 1000) }, 1000)
} // }
}) })
} }
}, },

@ -8,7 +8,7 @@
<view class="ml12"> <view class="ml12">
<view class="flex ai-c fs18 cor-333 fwb"> <view class="flex ai-c fs18 cor-333 fwb">
<text class="mr10">{{ user.userName }}{{user.userId}}</text> <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>
<view class="mt5 fs14 cor-666">陪您学车 {{ user.count }}</view> <view class="mt5 fs14 cor-666">陪您学车 {{ user.count }}</view>
</view> </view>
@ -26,47 +26,52 @@
<view class="p15lr" style="transform: translateY(-90px);"> <view class="p15lr" style="transform: translateY(-90px);">
<view class="relative mb10" @tap="handleVip"> <view class="relative mb10" @tap="handleVip">
<image src="/static/image/mine/vip_bg.png" mode="widthFix" style="width: 100%;"></image> <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="flex ai-c">
<view class="p3 br-p50" style="background-color: #873E1D;"> <view class="p3 br-p50" style="background-color: #873E1D;">
<image src="/static/image/mine/vip.png" mode="widthFix" style="width: 18px;height: 15px;"></image> <image src="/static/image/mine/vip.png" mode="widthFix" style="width: 18px;height: 15px;"></image>
</view> </view>
<text class="ml5 fs16 fwb" style="color: #7E4012FF;">VIP会员</text> <text class="ml5 fs16 fwb" style="color: #7E4012FF;">VIP会员</text>
</view> </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>
<view class="absolute flex ai-c jc-c" style="left: 0;top: 40px;right: 0;bottom: 0;"> <view class="absolute flex ai-c jc-c" style="left: 0;top: 40px;right: 0;bottom: 0;">
<view class="text-center"> <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;"> <view class="study fs16 text-center" style="margin: 25px auto 0;color: #F6E99FFF;">
马上学习 {{ vipOn.length?'马上学习':'开通会员'}}
</view> </view>
</view> </view>
</view> </view>
</view> </view>
<view class="br8 bc-fff p15 z-index2"> <view class="br8 bc-fff p15 z-index2">
<text class="fs16 cor-333">我的驾校</text> <text class="fs16 cor-333">我的驾校</text>
<div class="mt12 flex ai-c jc-sb"> <view v-if="user.schoolId">
<text class="fs18 cor-000 fwb">合肥八一驾校</text> <div class="mt12 flex ai-c jc-sb">
<u-button text="切换驾校" shape="circle" @click="handleChangeSchool"></u-button> <text class="fs18 cor-000 fwb">{{user.schoolName}}</text>
</div> <u-button text="切换驾校" shape="circle" @click="handleChangeSchool"></u-button>
<u-line margin="14px 0 18px 0"></u-line> </div>
<view class="flex ai-c" @tap="handleCallPhone"> <u-line margin="14px 0 18px 0"></u-line>
<view class="flex ai-c jc-c phone"> <view class="flex ai-c" @tap="handleCallPhone">
<img src="/static/image/mine/phone.png" style="width: 12px;height: 12px;"> <view class="flex ai-c jc-c phone">
<text class="ml2 fs12 cor-fff">客服热线</text> <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> </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> </view>
<view class="mt12 bc-fff br8"> <view class="mt12 bc-fff br8">
<u-cell-group> <u-cell-group>
<u-cell size="large" title="我的资料" value="修改" isLink @tap="handleInfo"> <u-cell size="large" title="我的资料" isLink @tap="handleInfo">
<template #icon> <template #icon>
<img src="/static/image/mine/wdzl.png" style="width: 24px;height: 24px;"> <img src="/static/image/mine/wdzl.png" style="width: 24px;height: 24px;">
</template> </template>
</u-cell> </u-cell>
<u-cell size="large" title="我的体检" value="查看报告" isLink @tap="handleTJ"> <u-cell size="large" title="我的体检" isLink @tap="handleTJ">
<template #icon> <template #icon>
<img src="/static/image/mine/wdtj.png" style="width: 24px;height: 24px;"> <img src="/static/image/mine/wdtj.png" style="width: 24px;height: 24px;">
</template> </template>
@ -78,7 +83,7 @@
</u-cell> </u-cell>
</u-cell-group> </u-cell-group>
</view> </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> <text class="fs16" style="color: #A09F9F;">退出登录</text>
</view> </view>
</view> </view>
@ -86,7 +91,6 @@
</template> </template>
<script> <script>
import useUserStore from '@/jtools/store/user' import useUserStore from '@/jtools/store/user'
import { queryVip } from '@/jtools/api/vip'
export default { export default {
components: {}, components: {},
computed: { computed: {
@ -94,7 +98,36 @@ export default {
return useUserStore().isLogin return useUserStore().isLogin
}, },
user() { 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() { data() {
@ -102,30 +135,36 @@ export default {
}; };
}, },
onShow() { onShow() {
this.searchVip()
}, },
methods: { methods: {
searchVip() {
queryVip().then(resp => {
if(resp.code == '0000') {
debugger
}
})
},
handleVip() { handleVip() {
uni.navigateTo({ if(this.isLogin) {
url: '/pages/me/vip' if(this.vipOn.length) {
}) uni.navigateTo({
url: '/pages/me/vip'
})
} else {
uni.navigateTo({
url: '/pages/index/videoVip'
})
}
} else {
this.toLogin()
}
}, },
handleCallPhone() { handleCallPhone() {
uni.makePhoneCall({ uni.makePhoneCall({
phoneNumber: '17318531354' phoneNumber: this.user.schoolPhone
}) })
}, },
handleChangeSchool() { handleChangeSchool() {
uni.navigateTo({ if(this.isLogin) {
url: '/pages/me/school' uni.navigateTo({
}) url: '/pages/me/school'
})
} else {
this.toLogin()
}
}, },
handleInfo() { handleInfo() {
if(this.isLogin) { if(this.isLogin) {
@ -152,7 +191,20 @@ export default {
}, },
handleLogout() { handleLogout() {
useUserStore().logout() 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> </script>

Loading…
Cancel
Save