Browse Source

upload

master
HolyKnightIX 2 years ago
parent
commit
c8c56690fa
14 changed files with 387 additions and 119 deletions
  1. +50
    -12
      miniprogram/app.js
  2. +2
    -1
      miniprogram/app.json
  3. +59
    -15
      miniprogram/pages/index/index.js
  4. +1
    -0
      miniprogram/pages/index/index.json
  5. +42
    -16
      miniprogram/pages/index/index.less
  6. +14
    -18
      miniprogram/pages/index/index.wxml
  7. +151
    -0
      miniprogram/pages/payOrder/payOrder.js
  8. +4
    -0
      miniprogram/pages/payOrder/payOrder.json
  9. +26
    -0
      miniprogram/pages/payOrder/payOrder.less
  10. +13
    -0
      miniprogram/pages/payOrder/payOrder.wxml
  11. +17
    -6
      miniprogram/utils/request.js
  12. +2
    -1
      project.private.config.json
  13. +6
    -1
      tsconfig.json
  14. +0
    -49
      yarn.lock

+ 50
- 12
miniprogram/app.js View File

@@ -1,31 +1,69 @@
// import Request from '../miniprogram/utils/request.js'
const request = require('./utils/request')

App({
globalData: {
},
onLaunch() {
const appId = 'wxf288a9b8167ff2ca'
// 展示本地存储能力
const logs = wx.getStorageSync('logs') || []
logs.unshift(Date.now())
wx.setStorageSync('logs', logs)

const that = this
// 登录
wx.login({
success: res => {
// 发送 res.code 到后台换取 openId, sessionKey, unionId
console.log(res.code)
doLogin(res.code)
},
})

const doLogin = () => {
Request.get({
url: '/login'
/**
* @description 登录
* @param {*} loginData {code , appid}
* @returns token , sessionKey , openId
*/
const doLogin = code => {
const data = {
code,
appId: request.appId
}
request.post({
url: '/api/user/login',
data
}).then(res => {
console.log(res);
console.log(res, 'loginSuccess');
// 存储数据
request.setHead(res.data.token, res.data.tenantId)
wx.setStorageSync('sessionKey', res.data.sessionKey)
that.globalData.sessionKey = res.data.sessionKey
wx.setStorageSync('openId', res.data.openId)
that.globalData.openId = res.data.openId
wx.setStorageSync('AccessToken', res.data.token)
that.globalData.AccessToken = res.data.token

// 检查用户信息
checkUserInfo()
}).catch(err => {
console.log(err);
wx.showToast()
wx.showToast({
title: '网络错误,请稍后再试',
icon: 'none'
})
})
}

/**
* @description 检查用户信息
* @returns userInfo
*/
const checkUserInfo = () => {
request.get({
url: '/api/user/userinfo'
}).then(res => {
console.log(res, 'userinfo');
const userInfo = res.data
that.globalData.userInfo = userInfo
// 请求完成后的回调,在index.js中调用防止异步
that.userInfoCallback(res)
}).catch(err => {
console.log(err, 'err');
})
}
},

+ 2
- 1
miniprogram/app.json View File

@@ -1,7 +1,8 @@
{
"pages": [
"pages/index/index",
"pages/logs/logs"
"pages/logs/logs",
"pages/payOrder/payOrder"
],
"window": {
"backgroundTextStyle": "light",


+ 59
- 15
miniprogram/pages/index/index.js View File

@@ -1,16 +1,14 @@
// index.ts
// 获取应用实例
const app = getApp()
import Request from '../../utils/request'
import request from '../../utils/request'

Page({
data: {
motto: 'Hello World',
userInfo: {},
hasUserInfo: false,
canIUse: wx.canIUse('button.open-type.getUserInfo'),
canIUseGetUserProfile: false,
canIUseOpenData: wx.canIUse('open-data.type.userAvatarUrl') && wx.canIUse('open-data.type.userNickName') // 如需尝试获取用户信息可改为false
canIUseOpenData: wx.canIUse('open-data.type.userAvatarUrl') && wx.canIUse('open-data.type.userNickName'),
isPhone: false
},
// 事件处理函数
bindViewTap() {
@@ -19,10 +17,12 @@ Page({
})
},
onLoad() {
// @ts-ignore
if (wx.getUserProfile) {
this.setData({
canIUseGetUserProfile: true
const that = this
app.userInfoCallback = res => {
console.log(res, 'userInfoCallback')
that.setData({
userInfo: res.data,
isPhone: that.data.userInfo.phone ? true : false
})
}

@@ -41,13 +41,57 @@ Page({
})
},

// 获取手机号授权
getUserPhone(e) {
const sessionKey = wx.getStorageSync('sessionKey')
this.doGetUserPhone(e.detail.encryptedData, e.detail.iv, sessionKey, request.appId)
},

/** 获取手机号授权 */
doGetUserPhone(encryptedData, iv, sessionKey, appId) {
request.post({
url: '/api/user/getUserPhone',
data: {
encryptedData,
iv,
sessionKey,
appId
}
}).then(res => {
console.log(res, 'getUserPhone');
wx.showToast({
title: '申请成功!',
icon: 'success'
})
this.checkUserInfo()
}).catch(err => {
console.log(err, 'err');
})
},

getUserInfo(e) {
// 不推荐使用getUserInfo获取用户信息,预计自2021年4月13日起,getUserInfo将不再弹出弹窗,并直接返回匿名的用户个人信息
console.log(e)
this.setData({
userInfo: e.detail.userInfo,
hasUserInfo: true
// 购买会员
goToBuy() {
const userInfo = JSON.stringify(this.data.userInfo)
wx.navigateTo({
url: `/pages/payOrder/payOrder?userInfo=${userInfo}`,
})
},

/**
* @description 检查用户信息
* @returns userInfo
*/
checkUserInfo() {
request.get({
url: '/api/user/userinfo'
}).then(res => {
console.log(res, 'userinfo');
this.setData({
userInfo: res.data,
isPhone: this.data.userInfo.phone ? true : false
})
}).catch(err => {
console.log(err, 'err');
})
}
})

+ 1
- 0
miniprogram/pages/index/index.json View File

@@ -1,3 +1,4 @@
{
"navigationBarTitleText": "首页",
"usingComponents": {}
}

+ 42
- 16
miniprogram/pages/index/index.less View File

@@ -1,19 +1,45 @@
/**index.wxss**/
.userinfo {
display: flex;
flex-direction: column;
align-items: center;
color: #aaa;
}
.content {
padding: 50rpx 0;

.userinfo-avatar {
overflow: hidden;
width: 128rpx;
height: 128rpx;
margin: 20rpx;
border-radius: 50%;
}
.logo {
width: 500rpx;
height: 120rpx;
line-height: 120rpx;
text-align: center;
color: #ffffff;
font-size: 50rpx;
background-color: red;
margin: auto;
}

.usermotto {
margin-top: 200px;
.introduction {
width: 600rpx;
height: 900rpx;
background-color: #79f779;
margin: 50rpx auto;
padding-top: 20rpx;

.title {
text-align: center;
font-size: 45rpx;
color: #585858;
margin-bottom: 40rpx;
}

.contain {
width: 500rpx;
height: 650rpx;
background-color: #00ffc8;
text-indent: 1cm;
margin: auto;
padding-top: 20rpx;
}
}

.buttons {
.userPhone {
text-align: center;
margin-bottom: 25rpx;
}
}
}

+ 14
- 18
miniprogram/pages/index/index.wxml View File

@@ -1,23 +1,19 @@
<!--index.wxml-->
<view class="container">
<view class="userinfo">
<block wx:if="{{canIUseOpenData}}">
<view class="userinfo-avatar" bindtap="bindViewTap">
<open-data type="userAvatarUrl"></open-data>
</view>
<open-data type="userNickName"></open-data>
</block>
<block wx:elif="{{!hasUserInfo}}">
<button wx:if="{{canIUseGetUserProfile}}" bindtap="getUserProfile"> 获取头像昵称 </button>
<button wx:elif="{{canIUse}}" open-type="getUserInfo" bindgetuserinfo="getUserInfo"> 获取头像昵称 </button>
<view wx:else> 请使用1.4.4及以上版本基础库 </view>
<view class="content">
<view class="logo">
GPT-Agent
</view>
<view class="introduction">
<view class="title">简介</view>
<view class="contain">正文部分</view>
</view>
<view class="buttons">
<block wx:if="{{!userInfo.phone}}">
<button type="primary" open-type="getPhoneNumber" bindgetphonenumber="getUserPhone">申请使用</button>
</block>
<block wx:else>
<image bindtap="bindViewTap" class="userinfo-avatar" src="{{userInfo.avatarUrl}}" mode="cover"></image>
<text class="userinfo-nickname">{{userInfo.nickName}}</text>
<view class="userPhone">当前用户:{{userInfo.phone}}</view>
<button type="primary" bindtap="goToBuy">购买会员</button>
</block>
</view>
<view class="usermotto">
<text class="user-motto">{{motto}}</text>
</view>
</view>
</view>

+ 151
- 0
miniprogram/pages/payOrder/payOrder.js View File

@@ -0,0 +1,151 @@
const app = getApp()
import request from '../../utils/request'

Page({

/**
* 页面的初始数据
*/
data: {
userInfo: {},
orderList: [
{
salePrice: '¥30',
orignPrice: '¥60',
effectiveTime: '30',
show: true
},
{
salePrice: '¥30',
orignPrice: '¥60',
effectiveTime: '30',
show: false
},
{
salePrice: '¥30',
orignPrice: '¥60',
effectiveTime: '30',
show: false
},
{
salePrice: '¥30',
orignPrice: '¥60',
effectiveTime: '30',
show: false
},
{
salePrice: '¥30',
orignPrice: '¥60',
effectiveTime: '30',
show: false
},
{
salePrice: '¥30',
orignPrice: '¥60',
effectiveTime: '30',
show: false
},
]
},

/**
* 生命周期函数--监听页面加载
*/
onLoad(options) {
this.setData({
userInfo: JSON.parse(options.userInfo)
})
},

createPayOrder() {
request.post({
url: '/api/pay/createPayOrder',
data: {
appId: request.appId
}
}).then(res => {
console.log(res, 'createPayOrder');
this.requestPayment(res.data.data)
}).catch(err => {
console.log(err, 'err');
})
},

requestPayment(data) {
wx.requestPayment({
timeStamp: data.timeStamp,
nonceStr: data.nonceStr,
package: data.package,
signType: data.signType ? data.signType : "MD5",
paySign: data.paySign,
success: res => {
wx.showLoading({
title: '订单正在处理中...',
})
setTimeout(() => {
wx.hideLoading();
}, 2000);
},
fail: res => {
wx.hideLoading();
wx.showToast({
title: '支付失败',
icon: 'error'
})
/**
* 支付失败,需要更新订单的状态
*/
},
complete: res => { }
});
},

/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady() {

},

/**
* 生命周期函数--监听页面显示
*/
onShow() {

},

/**
* 生命周期函数--监听页面隐藏
*/
onHide() {

},

/**
* 生命周期函数--监听页面卸载
*/
onUnload() {

},

/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh() {

},

/**
* 页面上拉触底事件的处理函数
*/
onReachBottom() {

},

/**
* 用户点击右上角分享
*/
onShareAppMessage() {

}
})

+ 4
- 0
miniprogram/pages/payOrder/payOrder.json View File

@@ -0,0 +1,4 @@
{
"navigationBarTitleText": "购买会员",
"usingComponents": {}
}

+ 26
- 0
miniprogram/pages/payOrder/payOrder.less View File

@@ -0,0 +1,26 @@
.content {
padding: 50rpx 0;

.backGround {
width: 600rpx;
height: 200rpx;
line-height: 200rpx;
color: #ffffff;
text-align: center;
font-size: 60rpx;
background-color: red;
margin: auto;
}

.orderList {
width: 600rpx;
margin: 50rpx auto;

.btn {
display: inline-block;
width: 280rpx;
margin-right: 22rpx;
margin-top: 20rpx;
}
}
}

+ 13
- 0
miniprogram/pages/payOrder/payOrder.wxml View File

@@ -0,0 +1,13 @@
<!--pages/payOrder.wxml-->
<view class="content">
<view class="backGround">购买会员</view>
<view class="orderList">
<block wx:for="{{orderList}}" wx:key="index">
<button class="btn" type="primary" disabled="{{!item.show}}" bindtap="createPayOrder">
<view>售价:{{item.salePrice}}</view>
<view>原价:{{item.orignPrice}}</view>
<view>时长:{{item.effectiveTime}}天</view>
</button>
</block>
</view>
</view>

+ 17
- 6
miniprogram/utils/request.js View File

@@ -1,6 +1,6 @@
const url = 'https://gpttest.malls.iformall.com/C'

class Request {
class request {
constructor(address) {
if (address) {
this.address = address;
@@ -18,15 +18,25 @@ class Request {
*/
headers = {
"Content-Type": "application/json;charset=UTF-8",
token: ""
token: "",
tenantId: ""
};
/**
* 设置token
* @param {*} token
* @description 设置请求头
* @param {*} data token , tenantId
*/
setToken(token) {
setHead(token, tenantId) {
this.headers.token = token;
this.headers.tenantId = tenantId;
}

/**
* @description 小程序appId
* @returns {string} wxf288a9b8167ff2ca
*/
appId = 'wxf288a9b8167ff2ca';


/**
* @description get
* @param {*}param url & param
@@ -90,6 +100,7 @@ class Request {
});
});
}

/**
* 过滤 请求信息
* @param {*} res
@@ -117,4 +128,4 @@ class Request {
/** 日志 */
log(url, body, headers) { }
}
module.exports = new Request();
module.exports = new request();

+ 2
- 1
project.private.config.json View File

@@ -5,5 +5,6 @@
"compileHotReLoad": true,
"urlCheck": false
},
"libVersion": "2.31.0"
"libVersion": "2.31.0",
"condition": {}
}

+ 6
- 1
tsconfig.json View File

@@ -25,7 +25,12 @@
]
},
"include": [
"./**/*.ts", "miniprogram/app.js", "miniprogram/utils/util.js", "miniprogram/pages/logs/logs.js", "miniprogram/pages/index/index.js",
"./**/*.ts",
"miniprogram/app.js",
"miniprogram/utils/util.js",
"miniprogram/pages/logs/logs.js",
"miniprogram/pages/index/index.js",
"miniprogram/pages/payOrder/payOrder.js",
],
"exclude": [
"node_modules"


+ 0
- 49
yarn.lock View File

@@ -2,52 +2,3 @@
# yarn lockfile v1


axios-miniprogram-adapter@^0.3.5:
version "0.3.5"
resolved "https://registry.yarnpkg.com/axios-miniprogram-adapter/-/axios-miniprogram-adapter-0.3.5.tgz#b02fbf61ec8899703c24eaa75fecd384509cacbd"
integrity sha512-ZAudH+aTi0QPIy8IQm26F0nxKoTFa/mNhDfxGkG5ndsQe4RVnyyb6f50tIT13nHtNepAjZo9i+UGmTbke5+lbQ==
dependencies:
axios "^0.19.2"

axios@0.26.0:
version "0.26.0"
resolved "https://registry.yarnpkg.com/axios/-/axios-0.26.0.tgz#9a318f1c69ec108f8cd5f3c3d390366635e13928"
integrity sha512-lKoGLMYtHvFrPVt3r+RBMp9nh34N0M8zEfCWqdWZx6phynIEhQqAdydpyBAAG211zlhX9Rgu08cOamy6XjE5Og==
dependencies:
follow-redirects "^1.14.8"

axios@^0.19.2:
version "0.19.2"
resolved "https://registry.yarnpkg.com/axios/-/axios-0.19.2.tgz#3ea36c5d8818d0d5f8a8a97a6d36b86cdc00cb27"
integrity sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA==
dependencies:
follow-redirects "1.5.10"

debug@=3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261"
integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==
dependencies:
ms "2.0.0"

follow-redirects@1.5.10:
version "1.5.10"
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.10.tgz#7b7a9f9aea2fdff36786a94ff643ed07f4ff5e2a"
integrity sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==
dependencies:
debug "=3.1.0"

follow-redirects@^1.14.8:
version "1.15.2"
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13"
integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==

miniprogram-api-typings@^2.8.3-1:
version "2.12.0"
resolved "https://registry.yarnpkg.com/miniprogram-api-typings/-/miniprogram-api-typings-2.12.0.tgz#7a29c90f3e5efa36588422d1f01e22d3394aaaa1"
integrity sha512-ibvbqeslVFur0IAvTxLMvsbtvVcMo6gwvOnj0YZHV7aeDLu091VQRrETT2QuiG9P6aZWRcxeNGJChRKVPCp9VQ==

ms@2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==

Loading…
Cancel
Save