add global interceptor for all request

This commit is contained in:
zhl 2021-12-13 17:21:35 +08:00
parent 1b39bb3f9c
commit f13017fa7c
7 changed files with 86 additions and 9 deletions

View File

@ -1,5 +1,7 @@
<script lang="ts">
import Vue from 'vue';
require('api/request');
export default Vue.extend({
mpType: 'app',
onLaunch() {

30
src/api/game.ts Normal file
View File

@ -0,0 +1,30 @@
export const searchGames = (params: any) => {
return new Promise((resolve, reject) => {
uni.request({
url: 'request/games',
success: (res) => {
resolve && resolve(res.data);
},
fail: (err) => {
reject && reject(err)
}
});
})
}
export const checkWord = (params: any) => {
return new Promise((resolve, reject) => {
uni.request({
url: '/check_local/' + encodeURIComponent(params.word),
success: (res) => {
resolve && resolve(res.data);
},
fail: (err) => {
reject && reject(err)
}
});
})
}

24
src/api/request.ts Normal file
View File

@ -0,0 +1,24 @@
const host_base = 'https://dirty.kingsome.cn'
uni.addInterceptor('request', {
invoke(args) {
// request 触发前拼接 url
args.url = host_base + args.url
if (false) {
args.header = {
...args.header,
token: 'xxx'
}
}
},
success(args) {
// 请求成功后修改code值为1
args.data.code = 1
},
fail(err) {
console.log('interceptor-fail',err)
},
complete(res) {
console.log('interceptor-complete',res)
}
})

View File

@ -2,7 +2,7 @@
<uni-card mode="style" @click="onClick(gData.gameId)">
<template v-slot:cover>
<view class="custom-cover" @click="onClick(gData.gameId)">
<image class="cover-image" mode="aspectFill" :src="gData.cover">
<image class="cover-image" mode="aspectFill" :src="gData.banner">
</image>
<view class="cover-tag">
<text class="uni-subtitle uni-white">20%折扣</text>

View File

@ -1,7 +1,10 @@
<template>
<view class="s-game-cell">
<view class="left-part">
<img src="https://vkceyugu.cdn.bspapp.com/VKCEYUGU-dc-site/094a9dc0-50c0-11eb-b680-7980c8a877b8.jpg">
<image
src="https://vkceyugu.cdn.bspapp.com/VKCEYUGU-dc-site/094a9dc0-50c0-11eb-b680-7980c8a877b8.jpg"
mode="aspectFit"
></image>
</view>
<view class="right-part">
<view class="title-view">
@ -14,8 +17,8 @@
<uni-tag v-for="tag in tagList" :text="tag" inverted="true" type="error"></uni-tag>
</view>
<view class="price-view">
<view>游戏英文名</view>
<view class="price">100</view>
<view class="price">¥100</view>
<view>¥150(日本)</view>
<uni-tag text="25%折扣" type="error"></uni-tag>
</view>
</view>
@ -45,12 +48,14 @@ export default class extends Vue{
width: 100%;
padding: 5px;
}
uni-image{
height: auto;
}
.left-part{
width: 25%;
display: flex;
}
.left-part img{
max-width: 150px;
}
.right-part {
width: 75%;
margin-left: 5px;

View File

@ -2,5 +2,13 @@ export interface IGameInfo{
gameId: string
name: string
ename: string
cover: string
platform?: number
tags?: string[]
icon?: string
banner?: string
price?: number
originPrice?: number,
priceCountry?: string,
discountLeftTime?: string,
cutOff?: number
}

View File

@ -12,6 +12,7 @@
import { Component, Vue } from 'vue-property-decorator'
import BigImgCell from '@/components/BigImgCell/index.vue'
import { IGameInfo } from '@/modules/gameinfo'
import { checkWord } from '@/api/game'
@Component({
name: 'Index',
@ -25,10 +26,17 @@ export default class extends Vue{
private games: IGameInfo[] = []
onLoad() {
checkWord({word: '毛岸英'})
.then(res => {
console.log(res)
})
.catch(err => {
console.log(err)
})
for (let i = 0; i < 10; i++) {
this.games.push({
gameId: i + '',
cover: 'https://vkceyugu.cdn.bspapp.com/VKCEYUGU-dc-site/094a9dc0-50c0-11eb-b680-7980c8a877b8.jpg',
banner: 'https://vkceyugu.cdn.bspapp.com/VKCEYUGU-dc-site/094a9dc0-50c0-11eb-b680-7980c8a877b8.jpg',
name: '测试游戏' + i,
ename: 'test game ' + i
})