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 loginWechatAuth = async (params = {}) => await vm.$u.post('/wxapp/unify/authorization', params)
let payOrder = async (params = {}) => await vm.$u.post('/pay/order', params)
const commonApi = {
loginWechatAuth
loginWechatAuth,
payOrder
}
return commonApi
}
......
......@@ -6,7 +6,7 @@ const install = (Vue, vm) => {
Vue.prototype.$u.http.setConfig({
baseUrl: systemApiUrl,
header: {
channel: 'Applets',
'channel': 'Applets',
'content-type': 'application/json; charset=utf-8',
},
loadingTime: 0,
......@@ -17,6 +17,7 @@ const install = (Vue, vm) => {
Vue.prototype.$u.http.interceptor.request = (config) => {
// 引用token
// const token = vm.vuex_token
config.header.token = vm.vuex_token
// const reg = /\?\w+/
// if(config.url.indexOf('access-token=') >=0 && config.params['access-token']){
// // 给默认参数增加access-token (Java端)
......@@ -26,7 +27,6 @@ const install = (Vue, vm) => {
// config.url += '?access-token=' + token
// }
// }
// 最后需要将config进行return
return config;
// 如果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>
<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="lists">正确答案:{{ answer }}</view>
<view class="lists">解释说明:{{ explain }}</view>
......@@ -28,7 +28,7 @@ export default {
},
computed: {
title() {
return this.type === 'right' ? '答对了' : '答错了'
return '试题详解:'
}
},
data() {
......
......@@ -32,11 +32,18 @@ export default {
lists: []
}
},
watch: {
answerList(newValue, oldValue) {
if (newValue.length > 0) {
this.lists = newValue.map((v) => {
v.checked = false
return v
})
}
},
},
created() {
this.lists = this.answerList ? this.answerList.map((v) => {
v.checked = false
return v
}) : []
},
methods: {
select(index) {
......@@ -60,7 +67,7 @@ export default {
padding: 10rpx 0;
width: 100%;
.icons {
padding: 5rpx 20rpx 0rpx 20rpx;
padding: 5rpx 20rpx 0rpx 0;
}
.text {
flex: 1;
......
......@@ -14,7 +14,7 @@
<block v-if="swiperType == 'lite'">
<view
class="pageSwiperItem"
:style="{ width: screenWidth + 'px', height: i != 1 ? '100vh' : '' }"
:style="{ width: screenWidth + 'px', height: i != 1 ? 'auto' : '' }"
v-for="(item, i) in 3"
:key="i"
v-show="!waitShow"
......@@ -249,7 +249,6 @@ export default {
top: 0;
width: 100%;
height: 100%;
background: #f8f8f8;
}
.pyh-pageSwiperMask-text {
width: 750rpx;
......
......@@ -55,7 +55,7 @@
/* 快应用特有相关 */
"mp-weixin" : {
/* 微信小程序特有相关 */
"appid" : "wxfd20fa0ca340284b",
"appid" : "wxd1d6eede324b0465",
"setting" : {
"urlCheck" : false,
"es6" : true
......
......@@ -48,6 +48,16 @@
{
"root": "pages/learn",
"pages": [
{
"path": "answer",
"name": "learnAnswer",
"style": {
"navigationBarTitleText": "答题",
"navigationStyle": "custom",
"enablePullDownRefresh": false,
"disableScroll": true
}
},
{
"path": "detail",
"name": "learnDetail",
......@@ -120,6 +130,24 @@
"enablePullDownRefresh": false,
"disableScroll": true
}
},
{
"path": "info",
"name": "mineInfo",
"style": {
"navigationBarTitleText": "个人信息",
"enablePullDownRefresh": false,
"disableScroll": true
}
},
{
"path": "bank",
"name": "mineBank",
"style": {
"navigationBarTitleText": "我的题库",
"enablePullDownRefresh": false,
"disableScroll": true
}
}
]
}
......
<template>
<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 class="u-m-r-10">
<u-avatar :src="avatar" size="140"></u-avatar>
</view>
<view class="u-flex-1">
<view class="u-font-18 u-p-b-20">{{ nikeName }}</view>
<view class="u-font-14 u-tips-color">累计刷题俩999次</view>
</view>
</view>
<view class="u-m-t-20">
<u-cell-group>
<u-cell-item icon="star" title="个人信息" value="完善度40%"></u-cell-item>
<u-cell-item icon="photo" title="我的题库"></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>
<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 class="u-m-r-10">
<u-avatar :src="avatar" size="140"></u-avatar>
</view>
<view class="u-flex-1">
<view class="u-font-18 u-p-b-20">{{ nikeName }}</view>
<view class="u-font-14 u-tips-color">累计刷题俩999次</view>
</view>
</view>
<view class="u-m-t-20">
<u-cell-group>
<u-cell-item
icon="star"
title="个人信息"
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>
<script>
export default {
data() {
return {
pic:'https://uviewui.com/common/logo.png',
show:true
}
},
computed: {
avatar() {
return this.userInfo.avatarUrl || this.pic
},
nikeName() {
return this.userInfo.nickName || '未登录'
}
},
onLoad() {
},
methods: {
login() {
this.$u.route({
url: 'pages/login/index'
})
},
toUrl(url) {
this.$u.route({
url: url
})
},
logout() {
this.$u.vuex('vuex_token', '')
this.$u.vuex('userInfo', {})
}
}
}
export default {
data() {
return {
pic: 'https://uviewui.com/common/logo.png',
show: true,
}
},
computed: {
avatar() {
return this.userInfo.avatarUrl || this.pic
},
nikeName() {
return this.userInfo.nickName || '未登录'
},
},
onLoad() {},
methods: {
login() {
this.$u.route({
url: 'pages/login/index',
})
},
toUrl(url) {
this.$u.route({
url: url,
})
},
logout() {
this.$u.vuex('vuex_token', '')
this.$u.vuex('openId', '')
this.$u.vuex('userInfo', {})
},
},
}
</script>
<style lang="scss">
page{
background-color: #ededed;
page {
background-color: #ededed;
}
.camera{
width: 54px;
height: 44px;
&:active{
background-color: #ededed;
}
.camera {
width: 54px;
height: 44px;
&:active {
background-color: #ededed;
}
}
.user-box{
background-color: #fff;
.user-box {
background-color: #fff;
}
</style>
\ No newline at end of file
</style>
<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 {
}
this.$u.api.loginWechatAuth(data).then((res) => {
this.$u.vuex('vuex_token', res.token)
this.$u.vuex('openId', res.openId)
this.$u.vuex('userInfo', userInfo)
this.$u.route({
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>
<view class="content">
<view>
<text class="title">{{title}}</text>
<view class="kf-body">
<!-- <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>
</template>
......@@ -10,7 +22,9 @@
export default {
data() {
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() {
......@@ -23,11 +37,15 @@
</script>
<style>
page{
background-color: rgb(229, 229, 236);
}
.content {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
padding: 130rpx 30rpx 0rpx 30rpx;
}
.logo {
......@@ -45,4 +63,22 @@
font-size: 36rpx;
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>
......@@ -12,7 +12,7 @@ try{
}
// 需要永久存储,且下次APP启动需要取出的,在state中的变量名
let saveStateKeys = ['userInfo', 'vuex_token'];
let saveStateKeys = ['userInfo', 'vuex_token', 'openId'];
// 保存变量到本地存储中
const saveLifeData = function(key, value){
......@@ -34,6 +34,7 @@ const store = new Vuex.Store({
// 加上vuex_前缀,是防止变量名冲突,也让人一目了然
userInfo: lifeData.userInfo ? lifeData.userInfo : {},
vuex_token: lifeData.vuex_token ? lifeData.vuex_token : '',
openId: lifeData.openId ? lifeData.openId : '',
// 如果vuex_version无需保存到本地永久存储,无需lifeData.vuex_version方式
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