Commit b3bd9f09 authored by 毛线's avatar 毛线

save

parent 786ea93e
<template>
<div>
<!-- <audio ref="bgAudio" src="https://kuawai.s3.ap-east-1.amazonaws.com/resource/assets/sound/Innovation.mp3"/> -->
</div>
</template>
<script>
import { mapState, } from 'vuex'
export default {
data() {
const bgAudio = new Audio()
const uiClickAudio = new Audio()
return {
bgAudio,
uiClickAudio,
}
},
computed: {
...mapState('audio', [
'play',
'uiClick',
'uiClickType',
]),
},
watch: {
play() {
this.playBgAudio()
},
uiClick() {
const { uiClickType } = this
switch (uiClickType) {
case 'ui':
this.playClickAudio()
break
default:
this.playClickAudio()
break
}
},
},
mounted() {
this.init()
},
methods: {
init() {
console.log('初始化音频')
this.bgAudio.src = 'https://kuawai.s3.ap-east-1.amazonaws.com/resource/assets/sound/Innovation.mp3' // 背景音乐
this.uiClickAudio.src = 'https://kuawai.s3.ap-east-1.amazonaws.com/resource/assets/sound/ui_click.mp3' // 通用ui点击音乐
},
playBgAudio() {
this.bgAudio.play()
},
// ui点击音效
playClickAudio() {
this.uiClickAudio.currentTime = 0
this.uiClickAudio.play()
},
},
}
</script>
...@@ -28,7 +28,8 @@ ...@@ -28,7 +28,8 @@
</div> </div>
<div class="center-bg"/> <div class="center-bg"/>
<div class="profile"> <div class="profile">
<img src="./static/profile/profile-pic.png" alt="" class="profile-img"> <img v-if="userInfo.avatar" :src="userInfo.avatar | img" alt="" class="profile-img">
<img v-else src="./static/profile/profile-pic.png" alt="" class="profile-img">
<img src="./static/profile/card.png" alt="" class="card-img"> <img src="./static/profile/card.png" alt="" class="card-img">
</div> </div>
</div> </div>
...@@ -80,10 +81,14 @@ export default { ...@@ -80,10 +81,14 @@ export default {
return { return {
quit: () => { quit: () => {
const { name } = this.$route const { name } = this.$route
console.log('quit', name)
switch (name) { switch (name) {
case 'index-game-id': // 如果是游戏页面 case 'index-game-id': // 如果是游戏页面
this.quitGame() this.quitGame()
break break
case 'index':
this.network().quitAccount()
break
} }
}, },
fullScreen: () => { fullScreen: () => {
...@@ -101,6 +106,18 @@ export default { ...@@ -101,6 +106,18 @@ export default {
}, },
} }
}, },
network() {
return {
quitAccount: () => {
this.$request({
url: '/api/player/logout',
method: 'post',
}).then(() => {
this.$router.replace({ path: '/login' })
})
},
}
},
quitGame() { quitGame() {
const { id } = this.$route.params const { id } = this.$route.params
const params = { const params = {
...@@ -111,7 +128,8 @@ export default { ...@@ -111,7 +128,8 @@ export default {
method: 'get', method: 'get',
params, params,
}).then(({ data }) => { }).then(({ data }) => {
this.$router.go(-1) console.log('退出游戏页面')
this.$router.replace('/')
}) })
}, },
}, },
......
import Vue from 'vue'
// 播放声音指令
const audio = Vue.directive('audio', {
// 当被绑定的元素插入到 DOM 中时……
inserted: (el, binding, vnode) => {
el.onclick = () => {
const audioType = el.getAttribute('audio')
vnode.context.$store.commit('audio/UiClick', audioType)
}
}
})
export default { audio }
...@@ -11,7 +11,10 @@ const authBtn = Vue.directive('authBtn', { ...@@ -11,7 +11,10 @@ const authBtn = Vue.directive('authBtn', {
el.parentNode.removeChild(el) el.parentNode.removeChild(el)
} }
}, 300) }, 300)
} },
click: (el, binding) => {
console.log('点击')
},
}) })
export default { authBtn } export default { authBtn }
...@@ -3,12 +3,18 @@ ...@@ -3,12 +3,18 @@
<div :style="style" class="sceen"> <div :style="style" class="sceen">
<nuxt /> <nuxt />
</div> </div>
<!-- 背景音乐组件 -->
<Audio/>
</div> </div>
</template> </template>
<script> <script>
import { mapActions } from 'vuex' import { mapActions } from 'vuex'
import Audio from '@/components/common/audio/index'
export default { export default {
components: {
Audio,
},
data() { data() {
return { return {
zoom: 1, zoom: 1,
...@@ -24,20 +30,19 @@ export default { ...@@ -24,20 +30,19 @@ export default {
}, },
created() { created() {
// this.GetConfig() // this.GetConfig()
this.init() this.initSceen()
window.onresize = () => {
this.initSceen()
}
}, },
methods: { methods: {
...mapActions({ ...mapActions({
GetConfig: 'GetConfig', GetConfig: 'GetConfig',
}), }),
init() { initSceen() {
window.onresize = () => { let zoom = 1
console.log('window.innerWidth', window.innerWidth) zoom = window.innerWidth / 1080
console.log('window.innerHeight', window.innerHeight) this.zoom = zoom
let zoom = 1
zoom = window.innerWidth / 1080
// this.zoom = zoom
}
}, },
}, },
} }
......
import { mapMutations } from 'vuex'
export default { export default {
data() { data() {
return { return {
} }
}, },
methods: { methods: {
...mapMutations('audio', [
'UiClick',
]),
UiClickAudio(type = 'ui') {
console.log('播放点击音乐', type)
this.UiClick(type)
},
pagination: () => { pagination: () => {
return { return {
sizeChange: (val) => { sizeChange: (val) => {
......
...@@ -45,6 +45,7 @@ export default { ...@@ -45,6 +45,7 @@ export default {
{ src: '@/plugins/axios', ssr: true }, { src: '@/plugins/axios', ssr: true },
{ src: '@/plugins/route', ssr: false }, { src: '@/plugins/route', ssr: false },
{ src: './directive/permission', ssr: false }, // 按钮权限全局指令 { src: './directive/permission', ssr: false }, // 按钮权限全局指令
{ src: './directive/audio', ssr: false }, // 播放声音的指令
// '@/plugins/icons', // '@/plugins/icons',
], ],
/* /*
......
<template> <template>
<div class="main-content"> <div class="main-layout">
<Header/> <Header/>
<div> <div class="main-content">
<nuxt-child <nuxt-child
/> />
</div> </div>
...@@ -35,6 +35,9 @@ export default { ...@@ -35,6 +35,9 @@ export default {
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.main-layout {
height: 100%;
}
.main-content { .main-content {
height: 100%; height: 100%;
overflow: auto; overflow: auto;
......
...@@ -10,13 +10,13 @@ ...@@ -10,13 +10,13 @@
</div> </div>
<div class="option-block"> <div class="option-block">
<div class="left-option"> <div class="left-option">
<img src="@/assets/images/temp/game/CREDIT-IN.gif" alt="" class="credit-in btn" @click="creditInShow = true"> <img v-audio src="@/assets/images/temp/game/CREDIT-IN.gif" alt="" class="credit-in btn" @click="creditInShow = true">
<img src="@/assets/images/temp/game/CREDIT-OUT.png" alt="" class="credit-out btn" @click="network().outPoint()"> <img v-audio src="@/assets/images/temp/game/CREDIT-OUT.png" alt="" class="credit-out btn" @click="network().outPoint()">
<!-- credit-in 弹窗 --> <!-- credit-in 弹窗 -->
<div :class="creditInShow ? 'show' : ''" class="credit-in-modal"> <div :class="creditInShow ? 'show' : ''" class="credit-in-modal">
<div class="credit-in-modal-mark" @click="creditInShow = false"/> <div v-audio class="credit-in-modal-mark" @click="creditInShow = false"/>
<div class="credit-in-btn-block"> <div class="credit-in-btn-block">
<div v-for="(item, index) in credistList" :key="index" class="btn" @click="click().upPoint(item)"> <div v-audio v-for="(item, index) in credistList" :key="index" class="btn" @click="click().upPoint(item)">
<img src="@/assets/images/temp/game/credit-in/btn-bg.png" alt="" class="btn-bg"> <img src="@/assets/images/temp/game/credit-in/btn-bg.png" alt="" class="btn-bg">
<div class="value">{{ item }}</div> <div class="value">{{ item }}</div>
<div class="credist">Credist</div> <div class="credist">Credist</div>
...@@ -31,14 +31,14 @@ ...@@ -31,14 +31,14 @@
<!-- 按钮 --> <!-- 按钮 -->
<div class="btn-block"> <div class="btn-block">
<div class="box"> <div class="box">
<div v-for="(item, index) in btnList1" :key="index" class="game-btn btn" @click="click().gameBtn(item)"> <div v-audio v-for="(item, index) in btnList1" :key="index" class="game-btn btn" @click="click().gameBtn(item)">
<div v-if="item.buttonImgN" class="btn"> <div v-if="item.buttonImgN" class="btn">
<img :src="item.buttonImgN | img" alt=""> <img :src="item.buttonImgN | img" alt="">
</div> </div>
</div> </div>
</div> </div>
<div class="box"> <div class="box">
<div v-for="(item, index) in btnList2" :key="index" class="game-btn btn" @click="click().gameBtn(item)"> <div v-audio v-for="(item, index) in btnList2" :key="index" class="game-btn btn" @click="click().gameBtn(item)">
<div v-if="item.buttonImgN" class="btn"> <div v-if="item.buttonImgN" class="btn">
<img :src="item.buttonImgN | img" alt=""> <img :src="item.buttonImgN | img" alt="">
</div> </div>
...@@ -47,9 +47,9 @@ ...@@ -47,9 +47,9 @@
</div> </div>
<!-- play --> <!-- play -->
<img src="@/assets/images/temp/game/play-button.png" alt="" class="play-btn btn" @click="network().button({ buttonValue: 2 })"> <img v-audio src="@/assets/images/temp/game/play-button.png" alt="" class="play-btn btn" @click="network().button({ buttonValue: 2 })">
<!-- 自动下注 --> <!-- 自动下注 -->
<div class="auto"> <div v-audio class="auto">
<img v-show="!isAuto" src="@/assets/images/temp/game/auto-spin-button.png" alt="" class="auto-btn btn" @click="isAuto = !isAuto"> <img v-show="!isAuto" src="@/assets/images/temp/game/auto-spin-button.png" alt="" class="auto-btn btn" @click="isAuto = !isAuto">
<img v-show="isAuto" src="@/assets/images/temp/game/auto-time-button.png" alt="" class="auto-btn btn" @click="isAuto = !isAuto"> <img v-show="isAuto" src="@/assets/images/temp/game/auto-time-button.png" alt="" class="auto-btn btn" @click="isAuto = !isAuto">
</div> </div>
...@@ -268,6 +268,7 @@ export default { ...@@ -268,6 +268,7 @@ export default {
box-sizing: border-box; box-sizing: border-box;
left: 200px; left: 200px;
top: 16px; top: 16px;
background: black;
.bg { .bg {
width: 100%; width: 100%;
height: 100%; height: 100%;
......
<template> <template>
<div style="overflow: auto;"> <div>
<div v-for="(item, index) in deviceList" :key="index" class="box btn" @click="click().joinGasme(item)"> <div v-audio v-for="(item, index) in deviceList" :key="index" class="box btn" @click="click().joinGasme(item)">
<div> <div>
gameNameEn: {{ item.gameNameEn }} gameNameEn: {{ item.gameNameEn }}
</div> </div>
...@@ -42,7 +42,7 @@ export default { ...@@ -42,7 +42,7 @@ export default {
method: 'post', method: 'post',
data, data,
}).then(({ data }) => { }).then(({ data }) => {
this.$router.push(`/game/${id}`) this.$router.replace(`/game/${id}`)
}) })
}, },
} }
......
...@@ -2,13 +2,13 @@ ...@@ -2,13 +2,13 @@
<div> <div>
<input v-model="form.username" type="text" > <input v-model="form.username" type="text" >
<input v-model="form.password" type="text" > <input v-model="form.password" type="text" >
<button @click="click().login()">登录</button> <button v-audio @click="click().login()">登录</button>
<button v-audio>音乐</button>
</div> </div>
</template> </template>
<script> <script>
import { mapState, mapActions } from 'vuex' import { mapState, mapActions, mapMutations } from 'vuex'
export default { export default {
data() { data() {
return { return {
...@@ -23,6 +23,9 @@ export default { ...@@ -23,6 +23,9 @@ export default {
Login: 'Login', Login: 'Login',
GetBaseInfo: 'GetBaseInfo', GetBaseInfo: 'GetBaseInfo',
}), }),
test() {
console.log('test')
},
click() { click() {
return { return {
login: () => { login: () => {
...@@ -36,7 +39,7 @@ export default { ...@@ -36,7 +39,7 @@ export default {
// }) // })
this.Login(data).then((res) => { this.Login(data).then((res) => {
this.GetBaseInfo().then(({ data }) => { this.GetBaseInfo().then(({ data }) => {
this.$router.push({ path: '/' }) this.$router.replace({ path: '/' })
this.loading = false this.loading = false
}).catch(() => { }).catch(() => {
this.loading = false this.loading = false
......
...@@ -4,7 +4,10 @@ import { getToken } from '@/utils/auth' // 验权 ...@@ -4,7 +4,10 @@ import { getToken } from '@/utils/auth' // 验权
const service = ({ $axios, app }, inject) => { const service = ({ $axios, app }, inject) => {
$axios.interceptors.request.use( $axios.interceptors.request.use(
(config) => { (config) => {
config.headers['Authorization'] = getToken() console.log('config', config)
if (!config.url.includes('/api/player/login')) {
config.headers['Authorization'] = getToken()
}
return config return config
}, },
error => Promise.reject(error), error => Promise.reject(error),
...@@ -15,7 +18,7 @@ const service = ({ $axios, app }, inject) => { ...@@ -15,7 +18,7 @@ const service = ({ $axios, app }, inject) => {
const { code, msg, type } = data const { code, msg, type } = data
// console.log('响应拦截器', response.config.url) // console.log('响应拦截器', response.config.url)
if (code !== 0) { if (code !== 0) {
if (code === 10000) { if (code === 401) {
app.store.commit('Logout') app.store.commit('Logout')
return Promise.reject(msg) return Promise.reject(msg)
} }
......
import Vue from 'vue' import Vue from 'vue'
import indexMixins from '@/mixins/index.js'
Vue.mixin(indexMixins)
Vue.filter('img', function(value) { Vue.filter('img', function(value) {
return `${process.env.img_domain}${value}` return `${process.env.img_domain}${value}`
......
export const state = () => ({
play: '',
uiClick: '',
uiClickType: '',
})
export const mutations = {
SetAudioPlay: (state, data) => {
state.play = new Date().getTime()
},
UiClick: (state, type = 'ui') => {
state.play = new Date().getTime()
state.uiClickType = type
state.uiClick = new Date().getTime()
},
}
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