Commit 4cf29477 authored by 高铭波's avatar 高铭波

缓存图片优化

埋点问题修复
登录模块优化
parent feb6bf37
......@@ -38,9 +38,7 @@ export default {
"接单操作须知有助你快速了解充电桩安装业务,提高接单效率,请认真查看及学习。",
},
},
// 授权用户信息
authUserInfo: "",
// 退出登录
logout: false,
navHeight: 0, //导航栏高度
rpxScreenHeight: 0, // 照相视框高度
......@@ -153,14 +151,10 @@ export default {
wxAppNo: that.globalData.wxAppNo, // 自营平台小程序
};
let result = await that.$u.api.loginWechatAuth(params);
console.log("result", result)
if (
result &&
result.code == 200 &&
result.data &&
result.data.token
) {
that.setUserData(result.data);
if (result && result.code == 200 && result.data && result.data.token) {
login.setUserData(result.data, this);
this.profileSet(this)
this.profileAppend(this)
} else {
uni.navigateTo({
url: "pages/login/index",
......@@ -174,25 +168,6 @@ export default {
}
});
},
setUserData(userInfo, that) {
let self = that ? that : this
if (userInfo && userInfo.token) {
// 如果已经登录则直接获取相关信息
self.$u.vuex("vuex_token", userInfo.token);
self.$u.vuex("vuex_user", userInfo);
self.$u.vuex("vuex_wx_uid", userInfo.wxopenid);
this.track('auth_login', {
auth_token: userInfo.token,
auth_user: userInfo,
auth_wx_uid: userInfo.wxopenid
});
} else {
self.$u.vuex("vuex_token", "");
self.$u.vuex("vuex_user", null);
self.$u.vuex("vuex_wx_uid", "");
}
self.$u.vuex("vuex_settled", null);
},
/* 版本更新 */
async updateApp() {
......@@ -229,41 +204,32 @@ export default {
AnalysysAgent.track("self_support_" + event, properties);
}
},
identify(userInfo, openid, unionid = null) {
// 设备身份表示
profileSet(vm) {
// 设备身份标识
if (AnalysysAgent) {
let setProfile = {
openid: openid,
unionid: unionid,
};
setProfile = Object.assign(setProfile, userInfo);
AnalysysAgent.profileSet(setProfile);
let user = vm.$u.deepClone(vm.vuex_user);
let profile = vm.$u.deepClone(vm.vuex_auth_user);
profile.openid = user.wxopenid || profile.openid
profile.unionid = user.unionid || profile.unionid || null
AnalysysAgent.profileSet(profile);
}
},
setUserId(userId) {
// 用户id设置
profileAppend(vm) {
if (AnalysysAgent) {
AnalysysAgent.alias(userId + "");
}
},
setUser(user) {
let user = vm.$u.deepClone(vm.vuex_user);
// 用户id设置
AnalysysAgent.alias(user.id + "");
// 用户附加属性
if (AnalysysAgent) {
let userInfo = {
mobile: user.mobile,
userfrom_id: user.uid,
let profile = {
userfrom: "自营平台",
avatar: user.avatar,
nickname: user.nickname,
username: user.username,
wxhuid: user.wxhuid,
id: user.id,
money: user.money,
score: user.score,
mobile: user.mobile,
loginName: user.loginName,
source: user.score,
};
Object.keys(userInfo).map((key) => {
if (key && userInfo[key]) {
AnalysysAgent.profileAppend(key, userInfo[key]);
Object.keys(profile).map((key) => {
if (key && profile[key]) {
AnalysysAgent.profileAppend(key, profile[key]);
}
});
}
......
......@@ -18,8 +18,12 @@ let learnApiFun = function(vm){
/* 获取考试结果 */
let getExamResult = async (examId, params = {}) => await vm.$u.post(sysApiUrl + '/wxh-worker-rest/rest/exam/serviceRule/userExamInfo/' + vm.vuex_token + '?examId=' + examId, params);
/* 申请考试 */
let applyExam = async (examId, params = {}) => await vm.$u.post(sysApiUrl + '/wxh-worker-rest/rest/exam/serviceRule/' + vm.vuex_token + '?examId=' + examId, params);
/* 获取下一题 */
let getNextQuestion = async (userExamId, questionId, userAnswerIds, params = {}) => await vm.$u.post(sysApiUrl + '/wxh-worker-rest/rest/exam/serviceRule/next/' + vm.vuex_token + '?userExamId=' + userExamId + '&questionId=' + questionId + '&userAnswerIds=' + (userAnswerIds || "9999"), params);
const learnApi = {
getTrainingNoticeList,CourseList,ChapterDetails,CourseSection,updateLearnCourses,getExamResult
getTrainingNoticeList,CourseList,ChapterDetails,CourseSection,updateLearnCourses,getExamResult,applyExam,getNextQuestion
}
return learnApi
}
......
......@@ -32,6 +32,7 @@
</template>
<script>
import util from '@/utils/util.js'
export default {
props: {
type: { // exclusive:专属; mine:我的页面客服; pop:弹窗;
......@@ -44,13 +45,14 @@
},
computed: {
cusQrcode() {
return process.uniEnv.qn_base_url + (this.isMine ? 'erweima-rk.png' : 'dingdanzhushou-n.png')
let src = this.isMine ? 'erweima-rk.png' : 'dingdanzhushou-n.png';
return util.imageCache(this, src)
},
kefuzxiaoxiImage() {
return process.uniEnv.qn_base_url + 'kefuzxiaoxi.png'
return util.imageCache(this, 'kefuzxiaoxi.png')
},
minekefutuImage() {
return process.uniEnv.qn_base_url + this.imageName
return util.imageCache(this, this.imageName)
},
imageName() {
return this.isMine ? 'kefufuwu-n.png' : 'kefutuzs.png'
......
......@@ -98,7 +98,7 @@
<text class="font-default-color" :class="{'font-active-color':courselist[2].percent}" v-text="courselist[2].status"></text>
</view>
</view>
<!-- <view class="learn-class1 u-margin-left-30" @click="goPlay(courselist[3])">
<view class="learn-class1 u-margin-left-30" @click="goPlay(courselist[3])">
<image class="learn-img" :src="courselist[3].pic" mode=""></image>
<image class="bofang" :src="bofang" mode=""></image>
<view class="learn-desc">
......@@ -114,7 +114,7 @@
</u-line-progress>
<text class="font-default-color" :class="{'font-active-color':courselist[3].percent}" v-text="courselist[3].status"></text>
</view>
</view> -->
</view>
</view>
</scroll-view>
</swiper-item>
......@@ -192,15 +192,15 @@ var json = {
id: 173,
sectionId: "",
},
// {
// title: "充电桩安装要点提示",
// desc: "在充电装安装过程中需要着重注意的要点",
// pic: process.uniEnv.qn_base_url + "cdz-3x-v2.png",
// percent: 0,
// status: "",
// id: 173,
// sectionId: "",
// },
{
title: "充电桩安装要点提示",
desc: "在充电装安装过程中需要着重注意的要点",
pic: process.uniEnv.qn_base_url + "cdz-3x-v2.png",
percent: 0,
status: "",
id: 173,
sectionId: "",
},
],
test: [
{
......@@ -230,15 +230,15 @@ var json = {
id: 151,
sectionId: "",
},
// {
// title: "充电桩安装要点提示",
// desc: "在充电装安装过程中需要着重注意的要点",
// pic: process.uniEnv.qn_base_url + "cdz-3x-v2.png",
// percent: 0,
// status: "",
// id: 151,
// sectionId: "",
// },
{
title: "充电桩安装要点提示",
desc: "在充电装安装过程中需要着重注意的要点",
pic: process.uniEnv.qn_base_url + "cdz-3x-v2.png",
percent: 0,
status: "",
id: 151,
sectionId: "",
},
],
prod: [
{
......@@ -268,15 +268,15 @@ var json = {
id: 599,
sectionId: "",
},
// {
// title: "学习-我的模块",
// desc: "学习-我的模块",
// pic: process.uniEnv.qn_base_url + "yaodiantishi.png",
// percent: 0,
// status: "",
// id: 600,
// sectionId: "",
// },
{
title: "学习-我的模块",
desc: "学习-我的模块",
pic: process.uniEnv.qn_base_url + "yaodiantishi.png",
percent: 0,
status: "",
id: 600,
sectionId: "",
},
],
};
......@@ -419,16 +419,16 @@ export default {
id: courseListJson[2].id,
sectionId: courseListJson[2].sectionId,
}
// ,
// {
// title: courseListJson[3].title,
// desc: courseListJson[3].desc,
// percent: courseListJson[3].percent,
// status: courseListJson[3].status,
// pic: courseListJson[3].pic,
// id: courseListJson[3].id,
// sectionId: courseListJson[3].sectionId,
// },
,
{
title: courseListJson[3].title,
desc: courseListJson[3].desc,
percent: courseListJson[3].percent,
status: courseListJson[3].status,
pic: courseListJson[3].pic,
id: courseListJson[3].id,
sectionId: courseListJson[3].sectionId,
},
],
examList: [
{
......@@ -695,8 +695,7 @@ export default {
let length = this.examList.length;
for (let i = 0; i < length; i++) {
let examId = this.examList[i].id;
this.$u.api
.getExamResult(examId)
this.$u.api.getExamResult(examId)
.then((res) => {
if (res.code != 200) {
console.log("getUserExamInfo 200 err");
......
......@@ -37,6 +37,8 @@
</template>
<script>
import util from '@/utils/util.js'
import login from "@/utils/login.js";
const app = getApp();
export default {
data() {
......@@ -121,10 +123,10 @@
return this.avatar || this.placeholderImage
},
wodebeijingImage() {
return this.qnPath + 'wodebeijing.png'
return util.imageCache(this, 'wodebeijing.png')
},
placeholderImage() {
return this.qnPath + 'touxiang.png'
return util.imageCache(this, 'touxiang.png')
},
headImageStyle() {
return this.avatar ? 'width:136rpx; height:136rpx;border-radius:68rpx' : 'width:144rpx; height:144rpx;border-radius:72rpx'
......@@ -174,7 +176,7 @@
this.$u.route({url: "pages/login/index"})
},
logout() {
app.setUserData({}, this)
login.setUserData({}, this);
app.globalData.logout = true
},
async allowLogin() {
......
This diff is collapsed.
......@@ -39,9 +39,11 @@ export default {
onLoad(param) {
getApp().trackPage('学习开始考试页')
this.examId = param.examId;
this.getExamResult();
// this.getUserExamInfo();
},
onShow() {
this.getExamResult();
},
onUnload() {
uni.switchTab({
url: '/pages/index/learn'
......@@ -67,23 +69,14 @@ export default {
});
},
getExamResult() {
uni.request({
url:
process.uniEnv.systemUrl.apiUrl +
"/wxh-worker-rest/rest/exam/serviceRule/userExamInfo/" +
this.vuex_token +
"?examId=" +
this.examId,
method: "POST",
header: {
"Content-Type": "application/x-www-from-urlencoded",
},
success: (res) => {
let examId = this.examId;
this.$u.api.getExamResult(examId)
.then((res) => {
uni.hideLoading();
if (res.data.code == 200) {
if (res.data.data.ruleDisc) {
var str = res.data.data.ruleDisc;
this.userExamId = res.data.data.id;
if (res.code == 200) {
if (res.data.ruleDisc) {
var str = res.data.ruleDisc;
this.userExamId = res.data.id;
let strArr = str.split("(")[0].split(",");
this.title = strArr[0];
......@@ -92,7 +85,13 @@ export default {
this.ruleDisc = strArr[3];
}
}
},
})
.catch((err) => {
uni.hideLoading();
uni.showToast({
icon: "none",
title: "获取考试信息失败",
});
});
},
},
......
......@@ -459,6 +459,7 @@
overflow: hidden;
background: #fff;
margin-top: 30rpx;
white-space: nowrap;
}
.scroll_box scroll-view {
......@@ -471,7 +472,7 @@
width: 280rpx;
height: 150rpx;
margin-right: 23rpx;
display: inline-grid;
display: inline-block;
background-color: #F4F5F7;
border-radius: 12rpx;
padding: 20rpx;
......
......@@ -45,15 +45,15 @@ export default {
bindTitle: '立即绑定',
bindPhone: '绑定手机',
bindTips: '首次登录的用户需绑定手机才可接单',
code: ''
code: '',
}
},
computed: {
logo() {
return this.qnPath + 'logo.png'
return util.imageCache(this, 'logo.png')
},
logo2() {
return this.qnPath + 'logo-2.png'
return util.imageCache(this, 'logo-2.png')
},
},
onLoad(e) {
......@@ -61,7 +61,7 @@ export default {
},
onShow() {
// 微信授权过用户信息,则无需重复授权
if (app.globalData.authUserInfo) {
if (this.vuex_auth_user && Object.keys(this.vuex_auth_user).length) {
this.needAuth = false
}
this.getCode()
......@@ -81,9 +81,7 @@ export default {
desc: '用于授权登录',
success: function (res) {
const userInfo = res.userInfo;
app.globalData.authUserInfo = userInfo
app.globalData.authUserInfo.nickName = app.globalData.authUserInfo.nickName || ''
app.globalData.authUserInfo.avatarUrl = app.globalData.authUserInfo.avatarUrl || ''
that.$u.vuex('vuex_auth_user', userInfo)
uni.showLoading({
title: '授权中..',
mask: true
......@@ -115,8 +113,8 @@ export default {
authLogin() {
var that = this
let params = {
nickname: app.globalData.authUserInfo.nickName,
avatar: app.globalData.authUserInfo.avatarUrl,
nickname: this.vuex_auth_user.nickName || '',
avatar: this.vuex_auth_user.avatarUrl || '',
}
login.appLogin().then(res => {
params.code = res.code
......@@ -124,7 +122,10 @@ export default {
}).then(res => {
uni.hideLoading();
if (res && res.code == 200 && res.data && res.data.token) {
app.setUserData(res.data, that)
login.setUserData(res.data, that)
app.track('auth_login', {mobile: res.data.mobile});
app.profileSet(that)
app.profileAppend(that)
that.goBackPage()
} else {
that.setLoginStatus()
......@@ -146,8 +147,8 @@ export default {
});
} else if(e.detail.encryptedData && e.detail.iv) {
let params = {
nickname: app.globalData.authUserInfo.nickName,
avatar: app.globalData.authUserInfo.avatarUrl,
nickname: this.vuex_auth_user.nickName || '',
avatar: this.vuex_auth_user.avatarUrl || '',
encryptedData: e.detail.encryptedData,
iv: e.detail.iv,
}
......@@ -160,6 +161,9 @@ export default {
uni.hideLoading()
if (res) {
app.setUserData(res.data, that)
app.track('signup_login', {mobile: res.data.mobile});
app.profileSet(that)
app.profileAppend(that)
app.getBaseInfo(that)
that.goBackPage()
} else {
......@@ -200,12 +204,14 @@ export default {
toLogin(params) {
login.appLogin().then(res => {
params.code = res.code
console.log("params3", params)
return login.signup(params);
}).then(res => {
uni.hideLoading()
if (res) {
app.setUserData(res.data, this)
login.setUserData(res.data, this)
app.track('signup_login', {mobile: res.data.mobile});
app.profileSet(this)
app.profileAppend(this)
app.getBaseInfo(this)
this.goBackPage()
} else {
......@@ -253,7 +259,7 @@ export default {
title: '登录页'
});
} else {
if(!app.globalData.authUserInfo) {
if(!this.vuex_auth_user || !Object.keys(this.vuex_auth_user).length) {
this.needAuth = true
uni.setNavigationBarTitle({
title: '授权页'
......
......@@ -56,6 +56,7 @@
<script>
let now = new Date(new Date().toLocaleDateString()).getTime();
import util from '@/utils/util.js'
import Statement from "@/components/mine/statement.vue"
export default {
components: {
......@@ -109,7 +110,7 @@
return process.uniEnv.qn_base_url
},
qianbaobeijing() {
return this.imageUrl + 'qianbaobeijing.png'
return util.imageCache(this, 'qianbaobeijing.png')
},
buttonStyle() {
return {
......
......@@ -44,6 +44,7 @@
<script>
let now = new Date(new Date().toLocaleDateString()).getTime();
import util from '@/utils/util.js'
import Settlement from "@/components/mine/settlement.vue"
const baseinfo = {totalAmount: 0, payableRecordExtendDtos: []}
export default {
......@@ -64,7 +65,7 @@
},
computed: {
liushuibeijingImage() {
return this.imageUrl + 'liushuibeijing.png'
return util.imageCache(this, 'liushuibeijing.png')
},
imageUrl() {
return process.uniEnv.qn_base_url
......@@ -73,7 +74,7 @@
return this.loading || this.info.payableRecordExtendDtos && this.info.payableRecordExtendDtos.length
},
banner() {
return this.imageUrl + 'receipt.png'
return util.imageCache(this, 'receipt.png')
},
},
onLoad() {
......
......@@ -45,6 +45,7 @@
<script>
let now = new Date(new Date().toLocaleDateString()).getTime();
const baseinfo = {expectedAmount: 0, settledAmount: 0, statementList: []}
import util from '@/utils/util.js'
import Statement from "@/components/mine/statement.vue"
export default {
components: {
......@@ -84,13 +85,13 @@
},
liushuibeijingImage() {
return this.imageUrl + 'liushuibeijing.png'
return util.imageCache(this, 'liushuibeijing.png')
},
imageUrl() {
return process.uniEnv.qn_base_url
},
banner() {
return this.imageUrl + 'receipt.png'
return util.imageCache(this, 'receipt.png')
},
hasInfo() {
return this.loading || this.data.statementList && this.data.statementList.length
......
......@@ -12,7 +12,7 @@ try {
}
// 需要永久存储,且下次APP启动需要取出的,在state中的变量名
let saveStateKeys = ['vuex_user', 'vuex_wx_uid', 'vuex_token', 'uploadTask'];
let saveStateKeys = ['vuex_user', 'vuex_wx_uid', 'vuex_token', 'vuex_cache', 'uploadTask'];
// 保存变量到本地存储中
const saveLifeData = function(key, value) {
......@@ -32,11 +32,14 @@ const store = new Vuex.Store({
// 如果上面从本地获取的lifeData对象下有对应的属性,就赋值给state中对应的变量
vuex_user: lifeData.vuex_user ? lifeData.vuex_user : {},
vuex_token: lifeData.vuex_token ? lifeData.vuex_token : '',
vuex_cache: lifeData.vuex_cache ? lifeData.vuex_cache : {},
vuex_version: '1.0.1',
vuex_config: {},
// 入驻信息
vuex_settled: null,
vuex_wx_uid: lifeData.vuex_wx_uid || 0,
// 授权用户信息
vuex_auth_user: {},
// 上传队列
uploadTask: lifeData.uploadTask ? lifeData.uploadTask : []
},
......
......@@ -116,11 +116,29 @@ function login(provider) {
});
}
/**
* 初始化用户信息
* @param {Object} userInfo 用户信息
* @param {Object} vm Vue对象实例
*/
function setUserData(userInfo, vm) {
if (userInfo && userInfo.token) {
// 如果已经登录则直接获取相关信息
vm.$u.vuex("vuex_token", userInfo.token);
vm.$u.vuex("vuex_user", userInfo);
vm.$u.vuex("vuex_wx_uid", userInfo.wxopenid);
} else {
vm.$u.vuex("vuex_token", "");
vm.$u.vuex("vuex_user", null);
vm.$u.vuex("vuex_wx_uid", "");
}
vm.$u.vuex("vuex_settled", null);
}
module.exports = {
appLogin: appLogin,
authorization: authorization,
signup: signup,
oauth: oauth
oauth: oauth,
setUserData,
}
\ No newline at end of file
var t = function(t) {
import md5Libs from "uview-ui/libs/function/md5";
var t = function (t) {
return (t = t.toString())[1] ? t : "0" + t;
};
......@@ -18,35 +19,64 @@ var t = function(t) {
// }
// }
const getOpenid = function(){
const getOpenid = function () {
const app = getApp()
let openid = app && app.globalData && app.globalData.openid || ''
if(!openid){
if (!openid) {
openid = uni.getStorageSync('openid')
}
return openid
}
const setOpenid = function(openid){
const setOpenid = function (openid) {
const app = getApp()
uni.setStorageSync('openid',openid)
if(app && app.globalData){
uni.setStorageSync('openid', openid)
if (app && app.globalData) {
app.globalData.openid = openid
}
}
/**
* ====图片本地缓存====
* @param {Object} vm 当前vue实例
* @param {Object} src 图片地址
* @param {Object} host 图片前缀,默认使用qn_base_url
*/
const imageCache = function (vm, src, host) {
host = host || process.uniEnv.qn_base_url
let image_url = host + src
let image_name = md5Libs.md5(image_url)
var arr = Object.keys(vm.vuex_cache);
if (vm.vuex_cache && arr.length && arr.includes(image_name)) {
// call_back(vm.vuex_cache[image_name])
return vm.vuex_cache[image_name]
} else {
// 本地没有缓存 需要下载
uni.downloadFile({
url: image_url,
success: (res) => {
if (res.statusCode === 200) {
// call_back(res.tempFilePath)
vm.$u.vuex(`vuex_cache.${image_name}`, res.tempFilePath)
}
}
});
return image_url
}
}
module.exports = {
formatTime: function(n) {
formatTime: function (n) {
var e = n.getFullYear(), r = n.getMonth() + 1, o = n.getDate(), i = n.getHours(), u = n.getMinutes(), a = n.getSeconds();
return [ e, r, o ].map(t).join("-") + " " + [ i, u, a ].map(t).join(":");
return [e, r, o].map(t).join("-") + " " + [i, u, a].map(t).join(":");
},
throttle: function(t, n) {
throttle: function (t, n) {
null != n && null != n || (n = 1500);
var e = null;
return function() {
return function () {
var r = +new Date();
console.log(r + "," + e + "," + new Date()), (r - e > n || !e) && (t(), e = r);
};
},
formatLonLat: function(t, n) {
formatLonLat: function (t, n) {
if (void 0 === t || "" == t) return "";
if (t += "", 0 == n) return parseFloat(t).toFixed(6);
var e = t.indexOf("."), r = e < 0 ? t : t.substring(0, e), o = 0, i = 0;
......@@ -58,4 +88,5 @@ module.exports = {
// setToken,
getOpenid,
setOpenid,
imageCache,
};
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment