Commit fc58922f authored by Facius's avatar Facius

Merge branch 'dev-v1.0.0' of https://git.banshouhui.com/wuzhenzhe/study into dev-v1.0.0

parents d6d247ed c8c06aa3
let commonApiFun = function(vm) { let commonApiFun = function(vm) {
let loginWechatAuth = async (params = {}) => await vm.$u.post('/wxapp/unify/authorization', params) let loginWechatAuth = async (params = {}) => await vm.$u.post('/wxapp/unify/authorization', params)
let payOrder = async (params = {}) => await vm.$u.post('/pay/order', params)
const commonApi = { const commonApi = {
loginWechatAuth loginWechatAuth,
payOrder
} }
return commonApi return commonApi
} }
......
...@@ -6,7 +6,7 @@ const install = (Vue, vm) => { ...@@ -6,7 +6,7 @@ const install = (Vue, vm) => {
Vue.prototype.$u.http.setConfig({ Vue.prototype.$u.http.setConfig({
baseUrl: systemApiUrl, baseUrl: systemApiUrl,
header: { header: {
channel: 'Applets', 'channel': 'Applets',
'content-type': 'application/json; charset=utf-8', 'content-type': 'application/json; charset=utf-8',
}, },
loadingTime: 0, loadingTime: 0,
...@@ -17,6 +17,7 @@ const install = (Vue, vm) => { ...@@ -17,6 +17,7 @@ const install = (Vue, vm) => {
Vue.prototype.$u.http.interceptor.request = (config) => { Vue.prototype.$u.http.interceptor.request = (config) => {
// 引用token // 引用token
// const token = vm.vuex_token // const token = vm.vuex_token
config.header.token = vm.vuex_token
// const reg = /\?\w+/ // const reg = /\?\w+/
// if(config.url.indexOf('access-token=') >=0 && config.params['access-token']){ // if(config.url.indexOf('access-token=') >=0 && config.params['access-token']){
// // 给默认参数增加access-token (Java端) // // 给默认参数增加access-token (Java端)
...@@ -26,7 +27,6 @@ const install = (Vue, vm) => { ...@@ -26,7 +27,6 @@ const install = (Vue, vm) => {
// config.url += '?access-token=' + token // config.url += '?access-token=' + token
// } // }
// } // }
// 最后需要将config进行return // 最后需要将config进行return
return config; return config;
// 如果return一个false值,则会取消本次请求 // 如果return一个false值,则会取消本次请求
......
/*
* A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
* Digest Algorithm, as defined in RFC 1321.
* Version 1.1 Copyright (C) Paul Johnston 1999 - 2002.
* Code also contributed by Greg Holt
* See http://pajhome.org.uk/site/legal.html for details.
*/
/*
* Add integers, wrapping at 2^32. This uses 16-bit operations internally
* to work around bugs in some JS interpreters.
*/
function safe_add(x, y)
{
var lsw = (x & 0xFFFF) + (y & 0xFFFF)
var msw = (x >> 16) + (y >> 16) + (lsw >> 16)
return (msw << 16) | (lsw & 0xFFFF)
}
/*
* Bitwise rotate a 32-bit number to the left.
*/
function rol(num, cnt)
{
return (num << cnt) | (num >>> (32 - cnt))
}
/*
* These functions implement the four basic operations the algorithm uses.
*/
function cmn(q, a, b, x, s, t)
{
return safe_add(rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b)
}
function ff(a, b, c, d, x, s, t)
{
return cmn((b & c) | ((~b) & d), a, b, x, s, t)
}
function gg(a, b, c, d, x, s, t)
{
return cmn((b & d) | (c & (~d)), a, b, x, s, t)
}
function hh(a, b, c, d, x, s, t)
{
return cmn(b ^ c ^ d, a, b, x, s, t)
}
function ii(a, b, c, d, x, s, t)
{
return cmn(c ^ (b | (~d)), a, b, x, s, t)
}
/*
* Calculate the MD5 of an array of little-endian words, producing an array
* of little-endian words.
*/
function coreMD5(x)
{
var a = 1732584193
var b = -271733879
var c = -1732584194
var d = 271733878
for(var i = 0; i < x.length; i += 16)
{
var olda = a
var oldb = b
var oldc = c
var oldd = d
a = ff(a, b, c, d, x[i+ 0], 7 , -680876936)
d = ff(d, a, b, c, x[i+ 1], 12, -389564586)
c = ff(c, d, a, b, x[i+ 2], 17, 606105819)
b = ff(b, c, d, a, x[i+ 3], 22, -1044525330)
a = ff(a, b, c, d, x[i+ 4], 7 , -176418897)
d = ff(d, a, b, c, x[i+ 5], 12, 1200080426)
c = ff(c, d, a, b, x[i+ 6], 17, -1473231341)
b = ff(b, c, d, a, x[i+ 7], 22, -45705983)
a = ff(a, b, c, d, x[i+ 8], 7 , 1770035416)
d = ff(d, a, b, c, x[i+ 9], 12, -1958414417)
c = ff(c, d, a, b, x[i+10], 17, -42063)
b = ff(b, c, d, a, x[i+11], 22, -1990404162)
a = ff(a, b, c, d, x[i+12], 7 , 1804603682)
d = ff(d, a, b, c, x[i+13], 12, -40341101)
c = ff(c, d, a, b, x[i+14], 17, -1502002290)
b = ff(b, c, d, a, x[i+15], 22, 1236535329)
a = gg(a, b, c, d, x[i+ 1], 5 , -165796510)
d = gg(d, a, b, c, x[i+ 6], 9 , -1069501632)
c = gg(c, d, a, b, x[i+11], 14, 643717713)
b = gg(b, c, d, a, x[i+ 0], 20, -373897302)
a = gg(a, b, c, d, x[i+ 5], 5 , -701558691)
d = gg(d, a, b, c, x[i+10], 9 , 38016083)
c = gg(c, d, a, b, x[i+15], 14, -660478335)
b = gg(b, c, d, a, x[i+ 4], 20, -405537848)
a = gg(a, b, c, d, x[i+ 9], 5 , 568446438)
d = gg(d, a, b, c, x[i+14], 9 , -1019803690)
c = gg(c, d, a, b, x[i+ 3], 14, -187363961)
b = gg(b, c, d, a, x[i+ 8], 20, 1163531501)
a = gg(a, b, c, d, x[i+13], 5 , -1444681467)
d = gg(d, a, b, c, x[i+ 2], 9 , -51403784)
c = gg(c, d, a, b, x[i+ 7], 14, 1735328473)
b = gg(b, c, d, a, x[i+12], 20, -1926607734)
a = hh(a, b, c, d, x[i+ 5], 4 , -378558)
d = hh(d, a, b, c, x[i+ 8], 11, -2022574463)
c = hh(c, d, a, b, x[i+11], 16, 1839030562)
b = hh(b, c, d, a, x[i+14], 23, -35309556)
a = hh(a, b, c, d, x[i+ 1], 4 , -1530992060)
d = hh(d, a, b, c, x[i+ 4], 11, 1272893353)
c = hh(c, d, a, b, x[i+ 7], 16, -155497632)
b = hh(b, c, d, a, x[i+10], 23, -1094730640)
a = hh(a, b, c, d, x[i+13], 4 , 681279174)
d = hh(d, a, b, c, x[i+ 0], 11, -358537222)
c = hh(c, d, a, b, x[i+ 3], 16, -722521979)
b = hh(b, c, d, a, x[i+ 6], 23, 76029189)
a = hh(a, b, c, d, x[i+ 9], 4 , -640364487)
d = hh(d, a, b, c, x[i+12], 11, -421815835)
c = hh(c, d, a, b, x[i+15], 16, 530742520)
b = hh(b, c, d, a, x[i+ 2], 23, -995338651)
a = ii(a, b, c, d, x[i+ 0], 6 , -198630844)
d = ii(d, a, b, c, x[i+ 7], 10, 1126891415)
c = ii(c, d, a, b, x[i+14], 15, -1416354905)
b = ii(b, c, d, a, x[i+ 5], 21, -57434055)
a = ii(a, b, c, d, x[i+12], 6 , 1700485571)
d = ii(d, a, b, c, x[i+ 3], 10, -1894986606)
c = ii(c, d, a, b, x[i+10], 15, -1051523)
b = ii(b, c, d, a, x[i+ 1], 21, -2054922799)
a = ii(a, b, c, d, x[i+ 8], 6 , 1873313359)
d = ii(d, a, b, c, x[i+15], 10, -30611744)
c = ii(c, d, a, b, x[i+ 6], 15, -1560198380)
b = ii(b, c, d, a, x[i+13], 21, 1309151649)
a = ii(a, b, c, d, x[i+ 4], 6 , -145523070)
d = ii(d, a, b, c, x[i+11], 10, -1120210379)
c = ii(c, d, a, b, x[i+ 2], 15, 718787259)
b = ii(b, c, d, a, x[i+ 9], 21, -343485551)
a = safe_add(a, olda)
b = safe_add(b, oldb)
c = safe_add(c, oldc)
d = safe_add(d, oldd)
}
return [a, b, c, d]
}
/*
* Convert an array of little-endian words to a hex string.
*/
function binl2hex(binarray)
{
var hex_tab = "0123456789abcdef"
var str = ""
for(var i = 0; i < binarray.length * 4; i++)
{
str += hex_tab.charAt((binarray[i>>2] >> ((i%4)*8+4)) & 0xF) +
hex_tab.charAt((binarray[i>>2] >> ((i%4)*8)) & 0xF)
}
return str
}
/*
* Convert an array of little-endian words to a base64 encoded string.
*/
function binl2b64(binarray)
{
var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
var str = ""
for(var i = 0; i < binarray.length * 32; i += 6)
{
str += tab.charAt(((binarray[i>>5] << (i%32)) & 0x3F) |
((binarray[i>>5+1] >> (32-i%32)) & 0x3F))
}
return str
}
/*
* Convert an 8-bit character string to a sequence of 16-word blocks, stored
* as an array, and append appropriate padding for MD4/5 calculation.
* If any of the characters are >255, the high byte is silently ignored.
*/
function str2binl(str)
{
var nblk = ((str.length + 8) >> 6) + 1 // number of 16-word blocks
var blks = new Array(nblk * 16)
for(var i = 0; i < nblk * 16; i++) blks[i] = 0
for(var i = 0; i < str.length; i++)
blks[i>>2] |= (str.charCodeAt(i) & 0xFF) << ((i%4) * 8)
blks[i>>2] |= 0x80 << ((i%4) * 8)
blks[nblk*16-2] = str.length * 8
return blks
}
/*
* Convert a wide-character string to a sequence of 16-word blocks, stored as
* an array, and append appropriate padding for MD4/5 calculation.
*/
function strw2binl(str)
{
var nblk = ((str.length + 4) >> 5) + 1 // number of 16-word blocks
var blks = new Array(nblk * 16)
for(var i = 0; i < nblk * 16; i++) blks[i] = 0
for(var i = 0; i < str.length; i++)
blks[i>>1] |= str.charCodeAt(i) << ((i%2) * 16)
blks[i>>1] |= 0x80 << ((i%2) * 16)
blks[nblk*16-2] = str.length * 16
return blks
}
/*
* External interface
*/
function hexMD5 (str) { return binl2hex(coreMD5( str2binl(str))) }
function hexMD5w(str) { return binl2hex(coreMD5(strw2binl(str))) }
function b64MD5 (str) { return binl2b64(coreMD5( str2binl(str))) }
function b64MD5w(str) { return binl2b64(coreMD5(strw2binl(str))) }
/* Backward compatibility */
function calcMD5(str) { return binl2hex(coreMD5( str2binl(str))) }
module.exports = {
hexMD5: hexMD5
}
\ No newline at end of file
<template> <template>
<view class="card"> <view class="card">
<u-card :title="title" padding="10" :thumb="thumb"> <u-card :title="title" padding="10" margin="0" :thumb="thumb">
<view class="u-flex content" slot="body"> <view class="u-flex content" slot="body">
<view class="lists">正确答案:{{ answer }}</view> <view class="lists">正确答案:{{ answer }}</view>
<view class="lists">解释说明:{{ explain }}</view> <view class="lists">解释说明:{{ explain }}</view>
...@@ -28,7 +28,7 @@ export default { ...@@ -28,7 +28,7 @@ export default {
}, },
computed: { computed: {
title() { title() {
return this.type === 'right' ? '答对了' : '答错了' return '试题详解:'
} }
}, },
data() { data() {
......
...@@ -32,11 +32,18 @@ export default { ...@@ -32,11 +32,18 @@ export default {
lists: [] lists: []
} }
}, },
watch: {
answerList(newValue, oldValue) {
if (newValue.length > 0) {
this.lists = newValue.map((v) => {
v.checked = false
return v
})
}
},
},
created() { created() {
this.lists = this.answerList ? this.answerList.map((v) => {
v.checked = false
return v
}) : []
}, },
methods: { methods: {
select(index) { select(index) {
...@@ -60,7 +67,7 @@ export default { ...@@ -60,7 +67,7 @@ export default {
padding: 10rpx 0; padding: 10rpx 0;
width: 100%; width: 100%;
.icons { .icons {
padding: 5rpx 20rpx 0rpx 20rpx; padding: 5rpx 20rpx 0rpx 0;
} }
.text { .text {
flex: 1; flex: 1;
......
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
<block v-if="swiperType == 'lite'"> <block v-if="swiperType == 'lite'">
<view <view
class="pageSwiperItem" class="pageSwiperItem"
:style="{ width: screenWidth + 'px', height: i != 1 ? '100vh' : '' }" :style="{ width: screenWidth + 'px', height: i != 1 ? 'auto' : '' }"
v-for="(item, i) in 3" v-for="(item, i) in 3"
:key="i" :key="i"
v-show="!waitShow" v-show="!waitShow"
...@@ -249,7 +249,6 @@ export default { ...@@ -249,7 +249,6 @@ export default {
top: 0; top: 0;
width: 100%; width: 100%;
height: 100%; height: 100%;
background: #f8f8f8;
} }
.pyh-pageSwiperMask-text { .pyh-pageSwiperMask-text {
width: 750rpx; width: 750rpx;
......
...@@ -55,7 +55,7 @@ ...@@ -55,7 +55,7 @@
/* 快应用特有相关 */ /* 快应用特有相关 */
"mp-weixin" : { "mp-weixin" : {
/* 微信小程序特有相关 */ /* 微信小程序特有相关 */
"appid" : "wxfd20fa0ca340284b", "appid" : "wxd1d6eede324b0465",
"setting" : { "setting" : {
"urlCheck" : false, "urlCheck" : false,
"es6" : true "es6" : true
......
...@@ -48,6 +48,16 @@ ...@@ -48,6 +48,16 @@
{ {
"root": "pages/learn", "root": "pages/learn",
"pages": [ "pages": [
{
"path": "answer",
"name": "learnAnswer",
"style": {
"navigationBarTitleText": "答题",
"navigationStyle": "custom",
"enablePullDownRefresh": false,
"disableScroll": true
}
},
{ {
"path": "detail", "path": "detail",
"name": "learnDetail", "name": "learnDetail",
...@@ -120,6 +130,24 @@ ...@@ -120,6 +130,24 @@
"enablePullDownRefresh": false, "enablePullDownRefresh": false,
"disableScroll": true "disableScroll": true
} }
},
{
"path": "info",
"name": "mineInfo",
"style": {
"navigationBarTitleText": "个人信息",
"enablePullDownRefresh": false,
"disableScroll": true
}
},
{
"path": "bank",
"name": "mineBank",
"style": {
"navigationBarTitleText": "我的题库",
"enablePullDownRefresh": false,
"disableScroll": true
}
} }
] ]
} }
......
<template> <template>
<view> <view>
<view class="u-flex user-box u-p-l-30 u-p-t-30 u-p-r-20 u-p-b-30" @tap="login"> <view
<view class="u-m-r-10"> class="u-flex user-box u-p-l-30 u-p-t-30 u-p-r-20 u-p-b-30"
<u-avatar :src="avatar" size="140"></u-avatar> @tap="login"
</view> >
<view class="u-flex-1"> <view class="u-m-r-10">
<view class="u-font-18 u-p-b-20">{{ nikeName }}</view> <u-avatar :src="avatar" size="140"></u-avatar>
<view class="u-font-14 u-tips-color">累计刷题俩999次</view> </view>
</view> <view class="u-flex-1">
</view> <view class="u-font-18 u-p-b-20">{{ nikeName }}</view>
<view class="u-font-14 u-tips-color">累计刷题俩999次</view>
<view class="u-m-t-20"> </view>
<u-cell-group> </view>
<u-cell-item icon="star" title="个人信息" value="完善度40%"></u-cell-item>
<u-cell-item icon="photo" title="我的题库"></u-cell-item> <view class="u-m-t-20">
<u-cell-item icon="coupon" title="联系客服" @tap="toUrl('pages/mine/customer')"></u-cell-item> <u-cell-group>
<u-cell-item icon="coupon" title="退出登录" @tap="logout"></u-cell-item> <u-cell-item
</u-cell-group> icon="star"
</view> title="个人信息"
</view> value="完善度40%"
@tap="toUrl('pages/mine/info')"
></u-cell-item>
<u-cell-item
icon="photo"
title="我的题库"
@tap="toUrl('pages/mine/bank')"
></u-cell-item>
<u-cell-item
icon="coupon"
title="联系客服"
@tap="toUrl('pages/mine/customer')"
></u-cell-item>
<u-cell-item icon="coupon" title="退出登录" @tap="logout"></u-cell-item>
</u-cell-group>
</view>
</view>
</template> </template>
<script> <script>
export default { export default {
data() { data() {
return { return {
pic:'https://uviewui.com/common/logo.png', pic: 'https://uviewui.com/common/logo.png',
show:true show: true,
} }
}, },
computed: { computed: {
avatar() { avatar() {
return this.userInfo.avatarUrl || this.pic return this.userInfo.avatarUrl || this.pic
}, },
nikeName() { nikeName() {
return this.userInfo.nickName || '未登录' return this.userInfo.nickName || '未登录'
} },
}, },
onLoad() { onLoad() {},
methods: {
}, login() {
methods: { this.$u.route({
login() { url: 'pages/login/index',
this.$u.route({ })
url: 'pages/login/index' },
}) toUrl(url) {
}, this.$u.route({
toUrl(url) { url: url,
this.$u.route({ })
url: url },
}) logout() {
}, this.$u.vuex('vuex_token', '')
logout() { this.$u.vuex('openId', '')
this.$u.vuex('vuex_token', '') this.$u.vuex('userInfo', {})
this.$u.vuex('userInfo', {}) },
} },
} }
}
</script> </script>
<style lang="scss"> <style lang="scss">
page{ page {
background-color: #ededed; background-color: #ededed;
} }
.camera{ .camera {
width: 54px; width: 54px;
height: 44px; height: 44px;
&:active{ &:active {
background-color: #ededed; background-color: #ededed;
} }
} }
.user-box{ .user-box {
background-color: #fff; background-color: #fff;
} }
</style> </style>
\ No newline at end of file
<template>
<view class="u-flex answer">
<u-navbar
back-icon-color="#333333"
background="transparent"
titleColor="#191C27"
:border-bottom="false"
title="答题"
title-bold
></u-navbar>
<view class="swiper">
<page-swiper
ref="pageSwiper"
:dataLength="dataLength"
:initIndex="index"
@swiperChange="swiperChange"
:height="psHeight"
>
<view class="u-flex subject">
<view class="type">{{ type[lists[index].type - 1] }}</view>
<view class="title">{{ lists[index].title }}</view>
<view class="content">
<answer-sheet
:answerList="lists[index].answerList"
:multiple="lists[index].type === 3"
@change="answerChange"
></answer-sheet>
</view>
<view class="btn" v-if="lists[index].type === 3">
<u-button type="primary" size="medium" shape="circle">确定</u-button>
</view>
<view class="explain">
<answer-explanation :answer="lists[index].answer" :explain="lists[index].explain"></answer-explanation>
</view>
</view>
</page-swiper>
</view>
<view class="u-flex u-row-around bottom">
<view class="u-flex">
<view class="c-list">
<u-icon name="grid" color="#5A6073" size="40"></u-icon>
<text>1/2887</text>
</view>
</view>
<view class="u-flex">
<view class="c-list ">
<u-icon name="close-circle" color="#FA5A49" size="40"></u-icon>
<text>0</text>
</view>
<view class="c-list u-padding-left-30">
<u-icon name="checkmark-circle" color="#2953FF" size="40"></u-icon>
<text>0</text>
</view>
</view>
<view class="u-flex">
<view class="c-list">
<u-icon name="star" color="#5A6073" size="40"></u-icon>
<text>收藏</text>
</view>
</view>
</view>
</view>
</template>
<script>
import pageSwiper from '@/components/page-swiper/index.vue'
import answerSheet from '@/components/answer-sheet/index.vue'
import answerExplanation from '@/components/answer-explanation/index.vue'
export default {
components: {
pageSwiper,
answerSheet,
answerExplanation
},
data() {
return {
type: ['单选题', '判断题', '多选题'],
dataLength: 0,
index: 0,
lists: [],
answerList: [],
}
},
computed: {
},
created() {
this.lists = [
{
type: 1,
title: '采用QS1电桥测量tanδ的接线方式一般有差接线及和接线。',
answerList: [
{
text: 'A:正确',
},
{
text: 'B:错误',
},
],
answer: 'A',
explain: '极性电介质在外电场作用下,由偶极子分子的转向形成的极化称为偶极子式极化。'
},
{
type: 2,
title: '空气间隙的操作冲击击穿电压数值大小不仅与间隙距离、电极形状、电极极性有关,而且与操作冲击电压波的波前时间的长短有关。',
answerList: [
{
text: 'A:正确',
},
{
text: 'B:错误',
},
],
answer: 'B',
explain: '极性电介质在外电场作用下,由偶极子分子的转向形成的极化称为偶极子式极化。'
},
{
type: 3,
title: '西林电桥采用正接线及反接线时,其测试原理相同',
answerList: [
{
text: 'A:影响',
},
{
text: 'B:影响很小',
},
{
text: 'C:影响很大',
},
{
text: 'D:无影响',
},
],
answer: 'B,C',
explain: '双臂电桥是在单臂电桥的基础上增加特殊机构,以消除测试时连接线和接线柱接触电阻对测量结果的影响。'
}
]
this.dataLength = this.lists.length
},
methods: {
swiperChange(index) {
this.index = index
},
answerChange() {
// this.index++
// this.$refs.pageSwiper.swiperTo(this.index)
},
},
}
</script>
<style lang="scss" scoped>
.answer {
height: 100vh;
flex-direction: column;
background-color: #f8fafd;
background-image: linear-gradient(to top, #f8fafd 0%, #e9f3ff 50%);
background-size: 100% 520rpx;
background-repeat: no-repeat;
.swiper {
width: 100%;
flex: 1;
.subject {
flex-flow: column;
padding: 20rpx;
.type {
width: 100%;
text-align: left;
padding: 20rpx 0;
}
.title {
color: #191C27;
font-size: 32rpx;
line-height: 50rpx;
font-weight: bold;
}
.content, .explain, .btn {
/deep/ .u-card {
background: transparent;
}
width: 100%;
padding-top: 50rpx;
}
.btn {
text-align: center;
/deep/ button {
width: 260rpx;
height: 80rpx;
}
}
.disabled {
/deep/ button {
background: #D4D7DF;
color: #fff;
}
}
}
}
.bottom {
width: 100%;
height: 150rpx;
border-top: 2rpx solid #ccc;
color: #5a6073;
font-size: 28rpx;
.c-list {
display: flex;
text {
padding-left: 10rpx;
}
}
}
}
</style>
<template>
<view>
<u-button type="primary" @click="pay">微信支付测试</u-button>
</view>
</template>
<script>
import md5 from '@/common/md5.js'
export default {
components: {},
data() {
return {
lists: [
{
questionWarehouseId: 1,
amount: 0.01,
count: 1,
},
],
}
},
created() {},
methods: {
pay() {
const data = {
instrtutionId: 1,
orders: JSON.stringify(this.lists),
openId: this.openId,
}
this.$u.api.payOrder(data).then((result) => {
const timeStamp = String(Date.now())
const paySign = md5
.hexMD5(
`appId=wxd1d6eede324b0465&nonceStr=${result.nonce_str}&package=prepay_id=${result.prepay_id}&signType=MD5&timeStamp=${timeStamp}&key=weixiuhui20151a2b3c4d5e6f7g8h9ij`
)
.toUpperCase()
uni.requestPayment({
provider: 'wxpay',
timeStamp: timeStamp,
nonceStr: result.nonce_str,
package: `prepay_id=${result.prepay_id}`,
signType: 'MD5',
paySign: paySign,
success: (res) => {
console.log('success:' + JSON.stringify(res))
this.$u.toast('支付成功')
},
fail: (err) => {
console.log('fail:' + JSON.stringify(err))
this.$u.toast('支付失败')
},
})
})
},
},
}
</script>
<style lang="scss" scoped></style>
...@@ -39,6 +39,7 @@ export default { ...@@ -39,6 +39,7 @@ export default {
} }
this.$u.api.loginWechatAuth(data).then((res) => { this.$u.api.loginWechatAuth(data).then((res) => {
this.$u.vuex('vuex_token', res.token) this.$u.vuex('vuex_token', res.token)
this.$u.vuex('openId', res.openId)
this.$u.vuex('userInfo', userInfo) this.$u.vuex('userInfo', userInfo)
this.$u.route({ this.$u.route({
type: 'back', type: 'back',
......
<template>
<view class="content">
<!-- <text class="title">{{ title }}</text> -->
<my-subject
class="subject-item"
v-for="(item, index) in lists"
:key="index"
:time="item.time"
:status="item.status"
:title="item.title"
:subtitle="item.subtitle"
></my-subject>
</view>
</template>
<script>
import mySubject from '@/components/my-subject/index.vue'
export default {
components: {
mySubject,
},
data() {
return {
title: '我的题库',
lists: [
{
time: '2021.06.25 18:06',
status: '已激活',
title: '高处安装、维护、拆除作业人员',
subtitle: '题库将于48天后到期',
},
{
time: '2021.05.25 14:05',
status: '已绑定',
title: '高处安装、维护、拆除作业人员',
subtitle: '题库将于88天后到期',
},
{
time: '2021.07.25 11:06',
status: '已失效',
title: '高处安装、维护、拆除作业人员',
subtitle: '题库已过期',
},
],
}
},
onLoad() {},
methods: {},
}
</script>
<style>
.content {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
padding: 30rpx;
}
.subject-item {
width: 100%;
margin-bottom: 30rpx;
}
.logo {
height: 200rpx;
width: 200rpx;
margin: 200rpx auto 50rpx auto;
}
.text-area {
display: flex;
justify-content: center;
}
.title {
font-size: 36rpx;
color: #8f8f94;
}
</style>
<template> <template>
<view class="content"> <view class="content">
<view> <view class="kf-body">
<text class="title">{{title}}</text> <!-- <text class="title">{{title}}</text> -->
<view class="name-space">
<view class="head-photo">
<u-avatar :src="avatar"></u-avatar>
</view>
<view>
<view class="nick"><text>aaa</text><u-icon name="server-man"></u-icon></view>
<view class="city"><text>安徽</text><text>合肥</text></view>
</view>
</view>
<view class="erweima">
<u-image width="424rpx" height="424rpx" :src="erweima"></u-image>
</view>
</view> </view>
</view> </view>
</template> </template>
...@@ -10,7 +22,9 @@ ...@@ -10,7 +22,9 @@
export default { export default {
data() { data() {
return { return {
title: '我的客服' title: '我的客服',
avatar:'https://qn-static.banshouhui.com/self-support/avatar.gif',
erweima:"https://qn-static.banshouhui.com/self-support/erweima-bg.png"
} }
}, },
onLoad() { onLoad() {
...@@ -23,11 +37,15 @@ ...@@ -23,11 +37,15 @@
</script> </script>
<style> <style>
page{
background-color: rgb(229, 229, 236);
}
.content { .content {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
padding: 130rpx 30rpx 0rpx 30rpx;
} }
.logo { .logo {
...@@ -45,4 +63,22 @@ ...@@ -45,4 +63,22 @@
font-size: 36rpx; font-size: 36rpx;
color: #8f8f94; color: #8f8f94;
} }
.kf-body{
width: 100%;
height: 700rpx;
background-color: aliceblue;
padding: 50rpx;
}
.name-space{
display: flex;
}
.erweima{
text-align: center;
margin-top: 30rpx;
padding-left: 10%;
}
</style> </style>
...@@ -12,7 +12,7 @@ try{ ...@@ -12,7 +12,7 @@ try{
} }
// 需要永久存储,且下次APP启动需要取出的,在state中的变量名 // 需要永久存储,且下次APP启动需要取出的,在state中的变量名
let saveStateKeys = ['userInfo', 'vuex_token']; let saveStateKeys = ['userInfo', 'vuex_token', 'openId'];
// 保存变量到本地存储中 // 保存变量到本地存储中
const saveLifeData = function(key, value){ const saveLifeData = function(key, value){
...@@ -34,6 +34,7 @@ const store = new Vuex.Store({ ...@@ -34,6 +34,7 @@ const store = new Vuex.Store({
// 加上vuex_前缀,是防止变量名冲突,也让人一目了然 // 加上vuex_前缀,是防止变量名冲突,也让人一目了然
userInfo: lifeData.userInfo ? lifeData.userInfo : {}, userInfo: lifeData.userInfo ? lifeData.userInfo : {},
vuex_token: lifeData.vuex_token ? lifeData.vuex_token : '', vuex_token: lifeData.vuex_token ? lifeData.vuex_token : '',
openId: lifeData.openId ? lifeData.openId : '',
// 如果vuex_version无需保存到本地永久存储,无需lifeData.vuex_version方式 // 如果vuex_version无需保存到本地永久存储,无需lifeData.vuex_version方式
vuex_version: '1.0.1', vuex_version: '1.0.1',
}, },
......
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