任一存 1 rok pred
rodič
commit
c58380459d

+ 1 - 4
README.md

@@ -7,15 +7,12 @@
 appId: wx0bc995dace29b2ba
 
 ## 待办
-商城和反馈 对接接口
-
-登录失效后跳转到登录页
+对接unity(unity功能中只有林场需要登录?)
 
 埋点
 
 真正的登录功能
 
-对接unity(unity功能中只有林场需要登录?)
 
 ### 微信扫码页面url
 https://open.weixin.qq.com/connect/qrconnect?appid=wxaf343d333792a454&redirect_uri=https%3A%2F%2Fsit-wuxicishan.4dage.com%2FPC%2F%23%2Ftab-1&response_type=code&scope=snsapi_login&state=STATE#wechat_redirect

+ 9 - 2
src/App.vue

@@ -110,13 +110,14 @@ import { useStore } from "vuex"
 import StartUp from '@/components/StartUp.vue'
 import FeedBack from "@/components/FeedBack.vue"
 import { ElMessageBox } from 'element-plus'
+import { checkLoginStatusAndProcess, getUserFromStorageIfNeed } from '@/api.js'
 
 const route = useRoute()
 const router = useRouter()
 const store = useStore()
 
-// api.checkLoginStatusAndProcess()
-api.getUserFromStorageIfNeed()
+// checkLoginStatusAndProcess()
+getUserFromStorageIfNeed()
 
 if (store.state.loginStatus === store.getters.loginStatusEnum.notLogin && route.name !== 'LoginView') {
   router.push({
@@ -292,6 +293,12 @@ html, body {
       display: flex;
       align-items: center;
       gap: 55px;
+      @media only screen and (max-width: 1500px) {
+        gap: 20px;
+      }
+      @media only screen and (max-width: 1250px) {
+        gap: 10px;
+      }
       >button{
         font-family: Source Han Sans CN, Source Han Sans CN;
         font-weight: 400;

+ 131 - 84
src/api.js

@@ -1,96 +1,143 @@
 import axios from "axios"
 import store from "@/store/index.js"
+import router from "@/router"
 
+axios.interceptors.response.use(function (response) {
+  // 2xx 范围内的状态码都会触发该函数。
+  if (response.data.code === 5001 || response.data.code === 5002) {
+    store.commit('logoutCallback')
+    router.push({ name: 'LoginView' })
+    return Promise.reject('登录态过期')
+  }
+  return response
+}, function (error) {
+  return error
+})
 
-export default {
-  checkLoginStatusAndProcess: async function() {
-    const lastToken = localStorage.getItem('token')
-    const lastUserInfoStr = localStorage.getItem('userInfo')
-    if (lastToken && lastUserInfoStr) {
-      const res = await axios({
-        method: 'get',
-        url: `${process.env.VUE_APP_DEPLOY_ORIGIN}/api/show/checkLogin`,
-        headers: {
-          token: lastToken,
-        }
-      })
-      if (res?.data?.code === 0 && res?.data?.data) {
-        store.commit('setLoginStatus', store.getters.loginStatusEnum.notLogin)
-        store.commit('setToken', lastToken)
-        store.commit('setUserInfo', JSON.parse(lastUserInfoStr))
-        return true
-      } else {
-        store.commit('logoutCallback')
-        return false
+export async function checkLoginStatusAndProcess() {
+  const lastToken = localStorage.getItem('token')
+  const lastUserInfoStr = localStorage.getItem('userInfo')
+  if (lastToken && lastUserInfoStr) {
+    const res = await axios({
+      method: 'get',
+      url: `${process.env.VUE_APP_DEPLOY_ORIGIN}/api/show/checkLogin`,
+      headers: {
+        token: lastToken,
       }
+    })
+    if (res?.data?.code === 0 && res?.data?.data) {
+      store.commit('setLoginStatus', store.getters.loginStatusEnum.notLogin)
+      store.commit('setToken', lastToken)
+      store.commit('setUserInfo', JSON.parse(lastUserInfoStr))
+      return true
     } else {
       store.commit('logoutCallback')
       return false
     }
-  },
-  getUserFromStorageIfNeed: function() {
-    if (!store.state.token || !store.state.userInfo) {
-      const lastToken = localStorage.getItem('token')
-      const lastUserInfoStr = localStorage.getItem('userInfo')
-      if (lastToken && lastUserInfoStr) {
-        store.commit('setLoginStatus', store.getters.loginStatusEnum.wxUser)
-        store.commit('setToken', lastToken)
-        store.commit('setUserInfo', JSON.parse(lastUserInfoStr))
-      }
+  } else {
+    store.commit('logoutCallback')
+    return false
+  }
+}
+export function getUserFromStorageIfNeed() {
+  if (!store.state.token || !store.state.userInfo) {
+    const lastToken = localStorage.getItem('token')
+    const lastUserInfoStr = localStorage.getItem('userInfo')
+    if (lastToken && lastUserInfoStr) {
+      store.commit('setLoginStatus', store.getters.loginStatusEnum.wxUser)
+      store.commit('setToken', lastToken)
+      store.commit('setUserInfo', JSON.parse(lastUserInfoStr))
     }
-  },
-  getRelicList: function(searchKey, region) {
-    return axios({
-      method: 'get',
-      url: `${process.env.VUE_APP_DEPLOY_ORIGIN}/api/show/visit/getList`,
-      // headers: {
-      //   appId: "CA02F83A5FA162B930AA2F962D202F43B0F6DE0B51AD79FEDB03FA8202BB4909330105B3B347510D87C97060C4288280D4A744E00565A4EC",
-      //   "Content-Type": "application/json",
-      // },
-      params: {
-        type: 'scene',
-        searchKey,
-        region
-      },
-    }).then((res) => {
-      return res.data.data
-    })
-  },
-  submitFeedback: function (name, phone, content, randCode) {
-    return axios({
-      method: 'post',
-      url: `${process.env.VUE_APP_DEPLOY_ORIGIN}/api/cms/game/message`,
-      headers: {
-        token: store.state.token,
-      },
-      data: {
-        name,
-        phone,
-        content,
-        randCode,
-      }
-    }).then((res) => {
-      if (res.data.code !== 0) {
-        throw ('fail')
-      } else {
-        return
-      }
-    })
-  },
-  getPrizeList: function (pageNum, pageSize) {
-    return axios({
-      method: 'post',
-      url: `${process.env.VUE_APP_DEPLOY_ORIGIN}/api/cms/game/prize/pageList`,
-      headers: {
-        token: store.state.token,
-      },
-      data: {
-        pageNum,
-        pageSize,
-        searchKey: '',
-      }
-    }).then((res) => {
-      return res.data.data
-    })
   }
+}
+export function getRelicList(searchKey, region) {
+  return axios({
+    method: 'get',
+    url: `${process.env.VUE_APP_DEPLOY_ORIGIN}/api/show/visit/getList`,
+    // headers: {
+    //   appId: "CA02F83A5FA162B930AA2F962D202F43B0F6DE0B51AD79FEDB03FA8202BB4909330105B3B347510D87C97060C4288280D4A744E00565A4EC",
+    //   "Content-Type": "application/json",
+    // },
+    params: {
+      type: 'scene',
+      searchKey,
+      region
+    },
+  }).then((res) => {
+    return res.data.data
+  })
+}
+export function submitFeedback (name, phone, content, randCode) {
+  return axios({
+    method: 'post',
+    url: `${process.env.VUE_APP_DEPLOY_ORIGIN}/api/cms/game/message`,
+    headers: {
+      token: store.state.token,
+    },
+    data: {
+      name,
+      phone,
+      content,
+      randCode,
+    }
+  }).then((res) => {
+    if (res.data.code !== 0) {
+      throw ('fail')
+    } else {
+      return
+    }
+  })
+}
+export function getPrizeList (pageNum, pageSize) {
+  return axios({
+    method: 'post',
+    url: `${process.env.VUE_APP_DEPLOY_ORIGIN}/api/cms/game/prize/pageList`,
+    headers: {
+      token: store.state.token,
+    },
+    data: {
+      pageNum,
+      pageSize,
+      searchKey: '',
+    }
+  }).then((res) => {
+    return res.data.data
+  })
+}
+export function getMyScore () {
+  return axios({
+    method: 'get',
+    url: `${process.env.VUE_APP_DEPLOY_ORIGIN}/api/cms/game/getPoint`,
+    headers: {
+      token: store.state.token,
+    },
+  }).then((res) => {
+    return res.data.data.total
+  })
+}
+export function getShopContact() {
+  return axios({
+    method: 'post',
+    url: `${process.env.VUE_APP_DEPLOY_ORIGIN}/api/show/getRuleConfig`,
+    headers: {
+      token: store.state.token,
+    },
+  }).then((res) => {
+    if (res.data.data.display === 0) {
+      return res.data.data.rtf
+    } else {
+      return ''
+    }
+  })
+}
+export function getRedeemRecord() {
+  return axios({
+    method: 'get',
+    url: `${process.env.VUE_APP_DEPLOY_ORIGIN}/api/cms/game/point/getList`,
+    headers: {
+      token: store.state.token,
+    },
+  }).then((res) => {
+    return res.data.data
+  })
 }

+ 2 - 1
src/components/FeedBack.vue

@@ -93,6 +93,7 @@ import { useRoute, useRouter } from "vue-router"
 import { useStore } from "vuex"
 import BtnClose from "./BtnClose.vue"
 import { ElMessage } from 'element-plus'
+import { submitFeedback } from '@/api.js'
 
 const route = useRoute()
 const router = useRouter()
@@ -120,7 +121,7 @@ const canSubmit = computed(() => {
 })
 
 function onSubmit() {
-  api.submitFeedback(name.value, contact.value, feedback.value, veriCode.value).then(() => {
+  submitFeedback(name.value, contact.value, feedback.value, veriCode.value).then(() => {
     ElMessage({
       message: '您的反馈已发送',
       type: 'success',

+ 2 - 1
src/components/RelicSearch.vue

@@ -66,6 +66,7 @@ import { ref, computed, watch, onMounted, watchEffect, inject } from "vue"
 import { useRoute, useRouter } from "vue-router"
 import { useStore } from "vuex"
 import BtnClose from '@/components/BtnClose.vue'
+import { getRelicList } from '@/api.js'
 
 const route = useRoute()
 const router = useRouter()
@@ -98,7 +99,7 @@ const activeAreaIdx = ref(0)
 const relicList = ref([])
 
 watchEffect(() => {
-  api.getRelicList(keyword.value, activeAreaIdx.value > 0 ? areaList.value[activeAreaIdx.value] : null).then((res) => {
+  getRelicList(keyword.value, activeAreaIdx.value > 0 ? areaList.value[activeAreaIdx.value] : null).then((res) => {
     console.log('sdfsdf', res)
     relicList.value = res
   })

+ 2 - 1
src/views/HomeView.vue

@@ -203,6 +203,7 @@ import { useElementSize } from '@vueuse/core'
 import OtherRelicDetail from '@/components/OtherRelicDetail.vue'
 import RelicSearch from '@/components/RelicSearch.vue'
 import IframeWrap from '@/components/IframeWrap.vue'
+import { getRelicList } from '@/api.js'
 
 const route = useRoute()
 const router = useRouter()
@@ -211,7 +212,7 @@ const store = useStore()
 const $env = inject('$env')
 
 const otherRelicList = ref([])
-api.getRelicList().then((res) => {
+getRelicList().then((res) => {
   otherRelicList.value = res
 })
 const isShowOtherRelicDetail = ref(false)

+ 36 - 71
src/views/ShopView.vue

@@ -87,8 +87,11 @@
       v-show="tabIdx === 1"
       class="redeem-record-content"
     >
-      <p class="tip">
-        如有疑问,请咨询
+      <p
+        v-show="redeemRecordContact"
+        class="tip"
+      >
+        如有疑问,请咨询 {{ redeemRecordContact }}
       </p>
       <div class="table">
         <div class="row-header">
@@ -100,21 +103,21 @@
         <div class="splitter" />
         <div class="table-content">
           <div
-            v-for="item in items"
+            v-for="item in redeemRecord"
             :key="item.id"
             class="row-data"
           >
             <div>
-              {{ item.time }}
+              {{ item.createTime }}
             </div>
             <div>
               {{ item.type }}
             </div>
             <div>
-              {{ item.coin }}
+              {{ item.score > 0 ? '+' : item.score < 0 ? '-' : '' }}{{ item.score }}
             </div>
             <div>
-              {{ item.desc }}
+              {{ item.description || `(空)` }}
             </div>
           </div>
         </div>
@@ -128,7 +131,7 @@
         alt=""
         draggable="false"
       >
-      <span class="value">4000</span>
+      <span class="value">{{ myScore }}</span>
     </div>
 
     <PrizeRedeem
@@ -144,6 +147,12 @@ import { ref, computed, watch, onMounted, inject } from "vue"
 import { useRoute, useRouter } from "vue-router"
 import { useStore } from "vuex"
 import PrizeRedeem from '@/components/PrizeRedeem.vue'
+import {
+  getMyScore,
+  getShopContact,
+  getPrizeList,
+  getRedeemRecord,
+} from '@/api.js'
 
 const route = useRoute()
 const router = useRouter()
@@ -156,8 +165,18 @@ const {
   windowSizeWhenDesignForRef,
 } = useSizeAdapt(1920, 972)
 
+const myScore = ref(undefined)
+getMyScore().then((res) => {
+  myScore.value = res
+})
+
 const tabIdx = ref(0)
 
+const redeemRecordContact = ref('')
+getShopContact().then((res) => {
+  redeemRecordContact.value = res
+})
+
 /**
  * 一页页的商品
  */
@@ -177,7 +196,7 @@ const total = ref(0)
 const haveNextPage = computed(() => {
   return total.value > ((pageNumber.value + 1) * 8)
 })
-api.getPrizeList(pageNumber.value, 8).then((res) => {
+getPrizeList(pageNumber.value, 8).then((res) => {
   total.value = res.total
   prizeList.value = res.records
 })
@@ -189,66 +208,13 @@ function onClickPrizeItem(prizeItem) {
   isShowRedeem.value = true
 }
 
-const items = ref([
-  {
-    time: '2024-03-30 15:19:01',
-    type: '爱心林场',
-    coin: '+4',
-    desc: '士大夫士大夫'
-  },
-  {
-    time: '2024-03-30 15:19:01',
-    type: '爱心林场',
-    coin: '-4',
-    desc: '士大夫士大夫'
-  },
-  {
-    time: '2024-03-30 15:19:01',
-    type: '爱心林场',
-    coin: '-4',
-    desc: '士大夫士大夫'
-  }, {
-    time: '2024-03-30 15:19:01',
-    type: '爱心林场',
-    coin: '-4',
-    desc: '士大夫士大夫'
-  }, {
-    time: '2024-03-30 15:19:01',
-    type: '爱心林场',
-    coin: '-4',
-    desc: '士大夫士大夫'
-  }, {
-    time: '2024-03-30 15:19:01',
-    type: '爱心林场',
-    coin: '-4',
-    desc: '士大夫士大夫'
-  }, {
-    time: '2024-03-30 15:19:01',
-    type: '爱心林场',
-    coin: '-4',
-    desc: '士大夫士大夫'
-  }, {
-    time: '2024-03-30 15:19:01',
-    type: '爱心林场',
-    coin: '-4',
-    desc: '士大夫士大夫'
-  }, {
-    time: '2024-03-30 15:19:01',
-    type: '爱心林场',
-    coin: '-4',
-    desc: '士大夫士大夫'
-  }, {
-    time: '2024-03-30 15:19:01',
-    type: '爱心林场',
-    coin: '-4',
-    desc: '士大夫士大夫'
-  }, {
-    time: '2024-03-30 15:19:01',
-    type: '爱心林场',
-    coin: '-4',
-    desc: '士大夫士大夫'
-  },
-])
+const redeemRecord = ref([])
+getRedeemRecord().then((res) => {
+  redeemRecord.value = res
+})
+
+
+
 
 </script>
 
@@ -407,8 +373,7 @@ const items = ref([
     flex-direction: column;
     align-items: center;
     >p.tip{
-      margin: 23px;
-      margin-bottom: 14px;
+      margin-top: 23px;
       font-family: Source Han Sans CN, Source Han Sans CN;
       font-weight: 400;
       font-size: 16px;
@@ -416,6 +381,7 @@ const items = ref([
       line-height: 19px;
     }
     >.table{
+      margin-top: 14px;
       flex: 1 0 1px;
       width: 100%;
       margin-bottom: 43px;
@@ -452,7 +418,6 @@ const items = ref([
         flex: 1 0 1px;
         overflow: auto;
         margin-right: 10px;
-        margin-bottom: 20px;
         >.row-data{
           height: 68px;
           display: flex;