任一存 1 год назад
Родитель
Сommit
20a4199471
37 измененных файлов с 371 добавлено и 87 удалено
  1. 2 1
      game/package.json
  2. BIN
      game/public/unity/antibody-battle/Build/Build.data.unityweb
  3. BIN
      game/public/unity/antibody-battle/TemplateData/bg.jpg
  4. 4 4
      game/public/unity/antibody-battle/index.html
  5. BIN
      game/public/unity/disaster-relief/Build/Build.data.unityweb
  6. BIN
      game/public/unity/disaster-relief/Build/Build.framework.js.unityweb
  7. 1 1
      game/public/unity/disaster-relief/Build/Build.loader.js
  8. BIN
      game/public/unity/disaster-relief/Build/Build.wasm.unityweb
  9. BIN
      game/public/unity/disaster-relief/TemplateData/bg.jpg
  10. 1 1
      game/public/unity/disaster-relief/index.html
  11. BIN
      game/public/unity/enviroment-protection/Build/Build.data.unityweb
  12. BIN
      game/public/unity/enviroment-protection/TemplateData/bg.jpg
  13. 4 4
      game/public/unity/enviroment-protection/index.html
  14. BIN
      game/public/unity/lost-children/Build/H5Game-ChinaSecuritiesMuseumMaze.data.unityweb
  15. BIN
      game/public/unity/lost-children/TemplateData/bg.jpg
  16. 14 0
      game/src/api.js
  17. BIN
      game/src/assets/images/antibody-battle-entry.png
  18. BIN
      game/src/assets/images/cert-name-bottom-line.png
  19. BIN
      game/src/assets/images/certification.jpg
  20. BIN
      game/src/assets/images/disaster-relief-entry.png
  21. BIN
      game/src/assets/images/enviroment-protection.png
  22. BIN
      game/src/assets/images/exam-paper-entry.png
  23. BIN
      game/src/assets/images/lost-children-entry.png
  24. BIN
      game/src/assets/images/pair-up-entry.png
  25. BIN
      game/src/assets/images/plant-tree-entry.png
  26. 1 1
      game/src/store/index.js
  27. 204 18
      game/src/views/CertificationView.vue
  28. 2 2
      game/src/views/ExamPaper2.vue
  29. 4 4
      game/src/views/GameByUnity.vue
  30. 7 7
      game/src/views/HomeView.vue
  31. 19 0
      game/src/views/LoginView.vue
  32. 2 2
      game/src/views/PairUp.vue
  33. 2 2
      game/src/views/PlantTree.vue
  34. 2 3
      game/src/views/RedeemForm.vue
  35. 62 37
      game/src/views/RedeemFormForCertification.vue
  36. 6 0
      game/src/views/ShopForVisitor.vue
  37. 34 0
      game/yarn.lock

+ 2 - 1
game/package.json

@@ -14,14 +14,15 @@
     "clipboard": "^2.0.11",
     "clipboard": "^2.0.11",
     "core-js": "^3.8.3",
     "core-js": "^3.8.3",
     "dayjs": "^1.11.7",
     "dayjs": "^1.11.7",
+    "html2canvas": "^1.4.1",
     "js-base64": "^3.7.5",
     "js-base64": "^3.7.5",
     "lodash": "^4.17.21",
     "lodash": "^4.17.21",
     "mitt": "^3.0.0",
     "mitt": "^3.0.0",
     "v-viewer": "^3.0.11",
     "v-viewer": "^3.0.11",
     "vant": "^4.8.2",
     "vant": "^4.8.2",
     "viewerjs": "^1.11.6",
     "viewerjs": "^1.11.6",
-    "vue-router": "^4.0.3",
     "vue": "^3.2.13",
     "vue": "^3.2.13",
+    "vue-router": "^4.0.3",
     "vuex": "^4.0.0"
     "vuex": "^4.0.0"
   },
   },
   "devDependencies": {
   "devDependencies": {

BIN
game/public/unity/antibody-battle/Build/Build.data.unityweb


BIN
game/public/unity/antibody-battle/TemplateData/bg.jpg


+ 4 - 4
game/public/unity/antibody-battle/index.html

@@ -3,7 +3,7 @@
   <head>
   <head>
     <meta charset="utf-8">
     <meta charset="utf-8">
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-    <title>抗体大作战</title>
+    <title>一起来作战</title>
     <link rel="shortcut icon" href="TemplateData/favicon.ico">
     <link rel="shortcut icon" href="TemplateData/favicon.ico">
     <link rel="stylesheet" href="TemplateData/style.css">
     <link rel="stylesheet" href="TemplateData/style.css">
   </head>
   </head>
@@ -18,7 +18,7 @@
       <div id="unity-warning"> </div>
       <div id="unity-warning"> </div>
       <div id="unity-footer">
       <div id="unity-footer">
         <div id="unity-fullscreen-button"></div>
         <div id="unity-fullscreen-button"></div>
-        <div id="unity-build-title">抗体大作战</div>
+        <div id="unity-build-title">一起来作战</div>
       </div>
       </div>
     </div>
     </div>
     <script>
     <script>
@@ -74,8 +74,8 @@
         codeUrl: buildUrl + "/Build.wasm.unityweb",
         codeUrl: buildUrl + "/Build.wasm.unityweb",
         streamingAssetsUrl: "StreamingAssets",
         streamingAssetsUrl: "StreamingAssets",
         companyName: "4dage",
         companyName: "4dage",
-        productName: "抗体大作战",
-        productVersion: "0.1.4",
+        productName: "一起来作战",
+        productVersion: "0.1.5",
         showBanner: unityShowBanner,
         showBanner: unityShowBanner,
       };
       };
 
 

BIN
game/public/unity/disaster-relief/Build/Build.data.unityweb


BIN
game/public/unity/disaster-relief/Build/Build.framework.js.unityweb


Разница между файлами не показана из-за своего большого размера
+ 1 - 1
game/public/unity/disaster-relief/Build/Build.loader.js


BIN
game/public/unity/disaster-relief/Build/Build.wasm.unityweb


BIN
game/public/unity/disaster-relief/TemplateData/bg.jpg


+ 1 - 1
game/public/unity/disaster-relief/index.html

@@ -3,7 +3,7 @@
   <head>
   <head>
     <meta charset="utf-8">
     <meta charset="utf-8">
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-    <title>应急救灾</title>
+    <title>一起来救灾</title>
     <link rel="shortcut icon" href="TemplateData/favicon.ico">
     <link rel="shortcut icon" href="TemplateData/favicon.ico">
     <link rel="stylesheet" href="TemplateData/style.css">
     <link rel="stylesheet" href="TemplateData/style.css">
     <link rel="manifest" href="manifest.webmanifest">
     <link rel="manifest" href="manifest.webmanifest">

BIN
game/public/unity/enviroment-protection/Build/Build.data.unityweb


BIN
game/public/unity/enviroment-protection/TemplateData/bg.jpg


+ 4 - 4
game/public/unity/enviroment-protection/index.html

@@ -3,7 +3,7 @@
   <head>
   <head>
     <meta charset="utf-8">
     <meta charset="utf-8">
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-    <title>生态保护</title>
+    <title>一起来清理</title>
     <link rel="shortcut icon" href="TemplateData/favicon.ico">
     <link rel="shortcut icon" href="TemplateData/favicon.ico">
     <link rel="stylesheet" href="TemplateData/style.css">
     <link rel="stylesheet" href="TemplateData/style.css">
   </head>
   </head>
@@ -18,7 +18,7 @@
       <div id="unity-warning"> </div>
       <div id="unity-warning"> </div>
       <div id="unity-footer">
       <div id="unity-footer">
         <div id="unity-fullscreen-button"></div>
         <div id="unity-fullscreen-button"></div>
-        <div id="unity-build-title">生态保护</div>
+        <div id="unity-build-title">一起来清理</div>
       </div>
       </div>
     </div>
     </div>
     <script>
     <script>
@@ -74,8 +74,8 @@
         codeUrl: buildUrl + "/Build.wasm.unityweb",
         codeUrl: buildUrl + "/Build.wasm.unityweb",
         streamingAssetsUrl: "StreamingAssets",
         streamingAssetsUrl: "StreamingAssets",
         companyName: "4dage",
         companyName: "4dage",
-        productName: "生态保护",
-        productVersion: "0.1.3",
+        productName: "一起来清理",
+        productVersion: "0.1.4",
         showBanner: unityShowBanner,
         showBanner: unityShowBanner,
       };
       };
 
 

BIN
game/public/unity/lost-children/Build/H5Game-ChinaSecuritiesMuseumMaze.data.unityweb


BIN
game/public/unity/lost-children/TemplateData/bg.jpg


+ 14 - 0
game/src/api.js

@@ -305,6 +305,20 @@ export async function checkCertificationStatus() {
     return res.data.data
     return res.data.data
   }
   }
 }
 }
+export async function getMyCertificationInfo() {
+  const res = await axios({
+    method: 'get',
+    url: `${process.env.VUE_APP_DEPLOY_ORIGIN}/api/cms/game/redeem/info`,
+    headers: {
+      token: store.state.token,
+    },
+  })
+  if (res.data.code !== 0) {
+    throw (`获取证书信息失败:${res.data.msg}`)
+  } else {
+    return res.data.data
+  }
+}
 
 
 export function notifyQuit() {
 export function notifyQuit() {
   console.log('小游戏:调用父窗口的goBackSceneFu方法……')
   console.log('小游戏:调用父窗口的goBackSceneFu方法……')

BIN
game/src/assets/images/antibody-battle-entry.png


BIN
game/src/assets/images/cert-name-bottom-line.png


BIN
game/src/assets/images/certification.jpg


BIN
game/src/assets/images/disaster-relief-entry.png


BIN
game/src/assets/images/enviroment-protection.png


BIN
game/src/assets/images/exam-paper-entry.png


BIN
game/src/assets/images/lost-children-entry.png


BIN
game/src/assets/images/pair-up-entry.png


BIN
game/src/assets/images/plant-tree-entry.png


+ 1 - 1
game/src/store/index.js

@@ -26,7 +26,7 @@ export default createStore({
       // creatorName: "",
       // creatorName: "",
       // description: "完成任一环节(浇水,施肥,除虫,修剪)可得分",
       // description: "完成任一环节(浇水,施肥,除虫,修剪)可得分",
       // id: 3,
       // id: 3,
-      // name: "乡村林场",
+      // name: "一起来植树",
       // rtf: "<p>123</p><p>321</p>",
       // rtf: "<p>123</p><p>321</p>",
       // score: 101,
       // score: 101,
       // second: null,
       // second: null,

+ 204 - 18
game/src/views/CertificationView.vue

@@ -1,19 +1,75 @@
 <template>
 <template>
   <div class="certification-view">
   <div class="certification-view">
-    sfdjslfdjk
-    <button
-      class="return"
-      @click="router.go(-1)"
+    <div
+      ref="certifWrap"
+      class="certif-wrap"
     >
     >
-      返回
-    </button>
+      <img
+        class="certif"
+        src="@/assets/images/certification.jpg"
+        alt=""
+        draggable="false"
+      >
+      <div class="certif-code">
+        {{ certificationCode }}
+      </div>
+      <div class="name">
+        {{ name }}
+      </div>
+      <img
+        class="cert-name-bottom-line"
+        src="@/assets/images/cert-name-bottom-line.png"
+        alt=""
+        draggable="false"
+      >
+      <div class="main-text">
+        业已完成“担当——证券期货基金行业公益力量展”观展任务,实现见证证券期货基金行业公益力量的目标,中国证券博物馆特授予公益合伙人证书。
+      </div>
+      <div class="organization-name">
+        中国证券博物馆
+      </div>
+      <div class="date">
+        {{ date }}
+      </div>
+    </div>
+    <div class="btn-group">
+      <button
+        class="download"
+        @click="onClickDownload"
+      >
+        保存证书
+      </button>
+      <button
+        class="return"
+        @click="router.go(-1)"
+      >
+        返回
+      </button>
+    </div>
+
+
+    <van-loading
+      v-show="isShowLoading"
+      class="loading"
+      type="spinner"
+    />
+
+    <a
+      v-show="false"
+      ref="forDownload"
+      :href="aDownloadHref"
+      download="share.jpg"
+    />
   </div>
   </div>
 </template>
 </template>
 
 
 <script setup>
 <script setup>
-import { ref, computed, watch, onMounted } from "vue"
+import { ref, computed, watch, onMounted, nextTick } from "vue"
 import { useRoute, useRouter } from "vue-router"
 import { useRoute, useRouter } from "vue-router"
 import { useStore } from "vuex"
 import { useStore } from "vuex"
+import { getMyCertificationInfo } from '@/api.js'
+import dayjs from 'dayjs'
+import html2canvas from 'html2canvas'
 
 
 const route = useRoute()
 const route = useRoute()
 const router = useRouter()
 const router = useRouter()
@@ -24,6 +80,40 @@ const {
   windowSizeWhenDesignForRef,
   windowSizeWhenDesignForRef,
 } = useSizeAdapt(390, 752)
 } = useSizeAdapt(390, 752)
 
 
+const certificationCode = ref('')
+const name = ref('')
+const date = ref('')
+
+const isShowLoading = ref(true)
+getMyCertificationInfo().then((res) => {
+  isShowLoading.value = false
+  certificationCode.value = res.description
+  name.value = res.certName
+  date.value = dayjs(res.createTime).format('YYYY年MM月DD日')
+})
+
+const certifWrap = ref(null)
+const aDownloadHref = ref(null)
+const forDownload = ref('')
+
+const onClickDownload = utils.throttle(function() {
+  isShowLoading.value = true
+  nextTick(() => {
+    // #capture 就是我们要获取截图对应的 DOM 元素选择器
+    html2canvas(certifWrap.value, {
+      useCORS: true, // 【重要】开启跨域配置
+      scale: 1920 / certifWrap.value.clientWidth,
+      allowTaint: true, // 允许跨域图片
+      preserveDrawingBuffer: true,
+    }).then((canvas) => {
+      aDownloadHref.value = canvas.toDataURL('image/jpeg', 1.0)
+      nextTick(() => {
+        forDownload.value.click()
+        isShowLoading.value = false
+      })
+    })
+  })
+})
 
 
 </script>
 </script>
 
 
@@ -35,20 +125,116 @@ const {
   width: 100%;
   width: 100%;
   height: 100%;
   height: 100%;
   background-color: rgba(207, 187, 156, 1);
   background-color: rgba(207, 187, 156, 1);
-  >button.return{
+  >.certif-wrap{
+    position: absolute;
+    top: 43%;
+    left: 0;
+    width: calc(390 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
+    transform: translateY(-50%);
+    >img.certif{
+      width: 100%;
+    }
+    >.certif-code{
+      position: absolute;
+      right: calc(43 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
+      top: calc(29 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
+      font-size: calc(6 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
+      font-family: Source Han Serif CN, Source Han Serif CN;
+      font-weight: bold;
+      color: #31271D;
+      line-height: calc(19 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
+    }
+    >.name{
+      position: absolute;
+      left: calc(66 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
+      width: calc(37 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
+      top: calc(130 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
+      font-size: calc(8 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
+      font-family: Source Han Serif CN, Source Han Serif CN;
+      font-weight: bold;
+      color: #31271D;
+      line-height: calc(19 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
+      text-align: center;
+      white-space: pre;
+    }
+    .cert-name-bottom-line{
+      position: absolute;
+      left: calc(66 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
+      top: calc(145 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
+      width: calc(37 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
+    }
+    >.main-text{
+      position: absolute;
+      left: calc(66 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
+      top: calc(149 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
+      width: calc(261 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
+      text-indent: 2em;
+      font-size: calc(8 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
+      font-family: Source Han Serif CN, Source Han Serif CN;
+      font-weight: bold;
+      color: #31271D;
+      line-height: calc(19 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
+    }
+    >.organization-name{
+      position: absolute;
+      right: calc(66 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
+      top: calc(206 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
+      font-size: calc(7 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
+      font-family: Source Han Serif CN, Source Han Serif CN;
+      font-weight: bold;
+      color: #31271D;
+      line-height: calc(19 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
+    }
+    >.date{
+      position: absolute;
+      right: calc(66 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
+      top: calc(217 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
+      font-size: calc(7 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
+      font-family: Source Han Serif CN, Source Han Serif CN;
+      font-weight: bold;
+      color: #31271D;
+      line-height: calc(19 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
+    }
+  }
+  >.btn-group{
     position: absolute;
     position: absolute;
-    width: calc(348 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
-    height: calc(60 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
-    top: calc(630 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
+    bottom: calc(50 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
     left: 50%;
     left: 50%;
     transform: translate(-50%, 0);
     transform: translate(-50%, 0);
-    background-color: #FFE6A5;
-    border-radius: calc(3 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
-    font-size: calc(16 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
-    font-family: Source Han Sans SC, Source Han Sans SC;
-    font-weight: bold;
-    color: #A97C46;
-    line-height: calc(19 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
+    >button.download{
+      width: calc(348 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
+      height: calc(50 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
+      background-color: #FFE6A5;
+      border-radius: calc(3 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
+      font-size: calc(16 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
+      font-family: Source Han Sans SC, Source Han Sans SC;
+      font-weight: bold;
+      color: #A97C46;
+      line-height: calc(19 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
+    }
+    >button.return{
+      margin-top: calc(10 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
+      border: 1px solid #fff;
+      width: calc(348 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
+      height: calc(50 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
+      border-radius: calc(3 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
+      font-size: calc(16 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
+      font-family: Source Han Sans SC, Source Han Sans SC;
+      font-weight: bold;
+      color: #fff;
+      line-height: calc(19 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
+    }
+  }
+  >.loading{
+    position: absolute;
+    left: 0;
+    top: 0;
+    width: 100%;
+    height: 100%;
+    background-color: rgba(0, 0, 0, 0.3);
+    display: flex;
+    justify-content: center;
+    align-items: center;
   }
   }
 }
 }
 </style>
 </style>

+ 2 - 2
game/src/views/ExamPaper2.vue

@@ -127,7 +127,7 @@
 
 
     <GameRule
     <GameRule
       v-show="isShowRule"
       v-show="isShowRule"
-      game-title="助农课堂"
+      game-title="一起来助农"
       :rich-text="store.state.gameRuleList[1].rtf"
       :rich-text="store.state.gameRuleList[1].rtf"
       @close="isShowRule=false"
       @close="isShowRule=false"
     />
     />
@@ -274,7 +274,7 @@ function onClickNext() {
     selectedIdx.value = null
     selectedIdx.value = null
   } else {
   } else {
     if (store.state.loginStatus && !store.state.ifScoreLimitReached && bonusPoint.value !== 0) {
     if (store.state.loginStatus && !store.state.ifScoreLimitReached && bonusPoint.value !== 0) {
-      addScore(bonusPoint.value, '助农课堂').then(() => {
+      addScore(bonusPoint.value, '一起来助农').then(() => {
         getScore().then((res) => {
         getScore().then((res) => {
           store.commit('setScore', res.total)
           store.commit('setScore', res.total)
           store.commit('setIfScoreLimitReached', res.hasOver)
           store.commit('setIfScoreLimitReached', res.hasOver)

+ 4 - 4
game/src/views/GameByUnity.vue

@@ -92,19 +92,19 @@ function onClickReturnHome() {
 
 
 const gameRuleConfigMap = {
 const gameRuleConfigMap = {
   AntibodyBattle: {
   AntibodyBattle: {
-    title: '抗体大作战',
+    title: '一起来作战',
     idxInGameRule: 3,
     idxInGameRule: 3,
   },
   },
   DisasterRelief: {
   DisasterRelief: {
-    title: '应急救灾',
+    title: '一起来救灾',
     idxInGameRule: 4,
     idxInGameRule: 4,
   },
   },
   EnviromentProtection: {
   EnviromentProtection: {
-    title: '生态保护',
+    title: '一起来清理',
     idxInGameRule: 5,
     idxInGameRule: 5,
   },
   },
   LostChildren: {
   LostChildren: {
-    title: '找回走失儿童',
+    title: '一起找儿童',
     idxInGameRule: 6,
     idxInGameRule: 6,
   },
   },
 }
 }

+ 7 - 7
game/src/views/HomeView.vue

@@ -83,7 +83,7 @@
       </button>
       </button>
     </div>
     </div>
     <div class="entry-list">
     <div class="entry-list">
-      <!-- 乡村林场 -->
+      <!-- 一起来植树 -->
       <button
       <button
         class="game-entry plant-tree-entry"
         class="game-entry plant-tree-entry"
         @click="onClickGameEntry(0)"
         @click="onClickGameEntry(0)"
@@ -95,7 +95,7 @@
           draggable="false"
           draggable="false"
         >
         >
       </button>
       </button>
-      <!-- 助农课堂 -->
+      <!-- 一起来助农 -->
       <button
       <button
         class="game-entry exam-paper-entry"
         class="game-entry exam-paper-entry"
         @click="onClickGameEntry(1)"
         @click="onClickGameEntry(1)"
@@ -107,7 +107,7 @@
           draggable="false"
           draggable="false"
         >
         >
       </button>
       </button>
-      <!-- 企业翻翻看 -->
+      <!-- 一起来记录 -->
       <button
       <button
         class="game-entry pair-up-entry"
         class="game-entry pair-up-entry"
         @click="onClickGameEntry(2)"
         @click="onClickGameEntry(2)"
@@ -119,7 +119,7 @@
           draggable="false"
           draggable="false"
         >
         >
       </button>
       </button>
-      <!-- 抗体大作战 -->
+      <!-- 一起来作战 -->
       <button
       <button
         class="game-entry antibody-battle-entry"
         class="game-entry antibody-battle-entry"
         @click="onClickGameEntry(3)"
         @click="onClickGameEntry(3)"
@@ -131,7 +131,7 @@
           draggable="false"
           draggable="false"
         >
         >
       </button>
       </button>
-      <!-- 应急救灾 -->
+      <!-- 一起来救灾 -->
       <button
       <button
         class="game-entry disaster-relief-entry"
         class="game-entry disaster-relief-entry"
         @click="onClickGameEntry(4)"
         @click="onClickGameEntry(4)"
@@ -143,7 +143,7 @@
           draggable="false"
           draggable="false"
         >
         >
       </button>
       </button>
-      <!-- 生态保护 -->
+      <!-- 一起来清理 -->
       <button
       <button
         class="game-entry enviroment-protection"
         class="game-entry enviroment-protection"
         @click="onClickGameEntry(5)"
         @click="onClickGameEntry(5)"
@@ -155,7 +155,7 @@
           draggable="false"
           draggable="false"
         >
         >
       </button>
       </button>
-      <!-- 找回走失儿童 -->
+      <!-- 一起找儿童 -->
       <button
       <button
         class="game-entry lost-children-entry"
         class="game-entry lost-children-entry"
         @click="onClickGameEntry(6)"
         @click="onClickGameEntry(6)"

+ 19 - 0
game/src/views/LoginView.vue

@@ -74,6 +74,12 @@
     >
     >
       暂无账号,去注册
       暂无账号,去注册
     </button>
     </button>
+    <button
+      class="return"
+      @click="$router.go(-1)"
+    >
+      返回
+    </button>
   </div>
   </div>
 </template>
 </template>
 
 
@@ -234,6 +240,19 @@ function submit() {
     line-height: calc(23 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
     line-height: calc(23 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
   }
   }
   >button.sign-up{
   >button.sign-up{
+    margin-top: calc(15 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
+    width: calc(332 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
+    height: calc(56 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
+    background: rgba(197, 161, 108, 0.8);
+    border-radius: calc(10 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
+    font-size: calc(20 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
+    font-family: Source Han Sans SC, Source Han Sans SC;
+    font-weight: 400;
+    color: #FFFFFF;
+    line-height: calc(23 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
+  }
+  >button.return{
+    margin-top: calc(5 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
     font-size: calc(16 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
     font-size: calc(16 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
     font-family: Source Han Sans SC, Source Han Sans SC;
     font-family: Source Han Sans SC, Source Han Sans SC;
     font-weight: 400;
     font-weight: 400;

+ 2 - 2
game/src/views/PairUp.vue

@@ -102,7 +102,7 @@
 
 
     <GameRule
     <GameRule
       v-show="isShowRule"
       v-show="isShowRule"
-      game-title="企业翻翻看"
+      game-title="一起来记录"
       :rich-text="store.state.gameRuleList[2].rtf"
       :rich-text="store.state.gameRuleList[2].rtf"
       @close="isShowRule=false"
       @close="isShowRule=false"
     />
     />
@@ -200,7 +200,7 @@ function replay() {
 watch(isOver, (vNew) => {
 watch(isOver, (vNew) => {
   if (vNew) {
   if (vNew) {
     if (store.state.loginStatus && !store.state.ifScoreLimitReached && bonusPoint.value !== 0) {
     if (store.state.loginStatus && !store.state.ifScoreLimitReached && bonusPoint.value !== 0) {
-      addScore(bonusPoint.value, '企业翻翻看').then(() => {
+      addScore(bonusPoint.value, '一起来记录').then(() => {
         getScore().then((res) => {
         getScore().then((res) => {
           store.commit('setScore', res.total)
           store.commit('setScore', res.total)
           store.commit('setIfScoreLimitReached', res.hasOver)
           store.commit('setIfScoreLimitReached', res.hasOver)

+ 2 - 2
game/src/views/PlantTree.vue

@@ -143,7 +143,7 @@
 
 
     <GameRule
     <GameRule
       v-show="isShowRule"
       v-show="isShowRule"
-      game-title="乡村林场"
+      game-title="一起来植树"
       :rich-text="store.state.gameRuleList[0].rtf"
       :rich-text="store.state.gameRuleList[0].rtf"
       @close="isShowRule=false"
       @close="isShowRule=false"
     />
     />
@@ -268,7 +268,7 @@ watch(isOver, (vNew) => {
     localStorage.setItem(`plant-tree-last-time-${store.state.token}`, (new Date()).getTime())
     localStorage.setItem(`plant-tree-last-time-${store.state.token}`, (new Date()).getTime())
     localStorage.setItem(`plant-tree-last-score-${store.state.token}`, bonusPoint.value)
     localStorage.setItem(`plant-tree-last-score-${store.state.token}`, bonusPoint.value)
     if (store.state.loginStatus && !store.state.ifScoreLimitReached && bonusPoint.value !== 0) {
     if (store.state.loginStatus && !store.state.ifScoreLimitReached && bonusPoint.value !== 0) {
-      addScore(bonusPoint.value, '乡村林场').then(() => {
+      addScore(bonusPoint.value, '一起来植树').then(() => {
         getScore().then((res) => {
         getScore().then((res) => {
           store.commit('setScore', res.total)
           store.commit('setScore', res.total)
           store.commit('setIfScoreLimitReached', res.hasOver)
           store.commit('setIfScoreLimitReached', res.hasOver)

+ 2 - 3
game/src/views/RedeemForm.vue

@@ -64,7 +64,7 @@
         }"
         }"
         @click="submit"
         @click="submit"
       >
       >
-        发起兑换
+        {{ result >= 0 ? '发起兑换' : '积分不足,无法兑换' }}
       </button>
       </button>
       <button
       <button
         class="return"
         class="return"
@@ -293,7 +293,7 @@ function submit() {
       background: #CECECE;
       background: #CECECE;
       pointer-events: none;
       pointer-events: none;
     }
     }
-    >button.over{
+    >button.submit.over{
       pointer-events: none;
       pointer-events: none;
     }
     }
     >button.return{
     >button.return{
@@ -307,7 +307,6 @@ function submit() {
       font-weight: bold;
       font-weight: bold;
       color: #fff;
       color: #fff;
       line-height: calc(19 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
       line-height: calc(19 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
-
     }
     }
   }
   }
 }
 }

+ 62 - 37
game/src/views/RedeemFormForCertification.vue

@@ -39,17 +39,25 @@
       </div>
       </div>
     </div>
     </div>
 
 
-    <button
-      class="submit"
-      :class="{
-        needInfo: !name,
-        notEnough: result < 0,
-        over: haveSubmitted,
-      }"
-      @click="submit"
-    >
-      发起兑换
-    </button>
+    <div class="btn-group">
+      <button
+        class="submit"
+        :class="{
+          needInfo: !name,
+          notEnough: result < 0,
+          over: haveSubmitted,
+        }"
+        @click="submit"
+      >
+        {{ result >= 0 ? '发起兑换' : '积分不足,无法兑换' }}
+      </button>
+      <button
+        class="return"
+        @click="$router.go(-1)"
+      >
+        返回
+      </button>
+    </div>
 
 
     <transition name="fade-in-out">
     <transition name="fade-in-out">
       <NotifyComp
       <NotifyComp
@@ -201,33 +209,50 @@ function submit() {
       }
       }
     }
     }
   }
   }
-  >button.submit{
+  >.btn-group{
     position: absolute;
     position: absolute;
-    width: calc(348 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
-    height: calc(60 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
-    top: calc(630 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
-    left: 50%;
-    transform: translate(-50%, 0);
-    background-color: #FFE6A5;
-    border-radius: calc(3 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
-    font-size: calc(16 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
-    font-family: Source Han Sans SC, Source Han Sans SC;
-    font-weight: bold;
-    color: #A97C46;
-    line-height: calc(19 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
-  }
-  >button.submit.needInfo{
-    opacity: 0.5;
-    pointer-events: none;
-  }
-  >button.submit.notEnough{
-    opacity: 1;
-    color: #7B7B7B;
-    background: #CECECE;
-    pointer-events: none;
-  }
-  >button.over{
-    pointer-events: none;
+    top: calc(620 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
+    width: 100%;
+    left: 0;
+    display: flex;
+    flex-direction: column;
+    align-items: center;
+    >button.submit{
+      width: calc(348 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
+      height: calc(50 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
+      background-color: #FFE6A5;
+      border-radius: calc(3 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
+      font-size: calc(16 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
+      font-family: Source Han Sans SC, Source Han Sans SC;
+      font-weight: bold;
+      color: #A97C46;
+      line-height: calc(19 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
+    }
+    >button.submit.needInfo{
+      opacity: 0.5;
+      pointer-events: none;
+    }
+    >button.submit.notEnough{
+      opacity: 1;
+      color: #7B7B7B;
+      background: #CECECE;
+      pointer-events: none;
+    }
+    >button.submit.over{
+      pointer-events: none;
+    }
+    >button.return{
+      margin-top: calc(10 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
+      border: 1px solid #fff;
+      width: calc(348 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
+      height: calc(50 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
+      border-radius: calc(3 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
+      font-size: calc(16 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
+      font-family: Source Han Sans SC, Source Han Sans SC;
+      font-weight: bold;
+      color: #fff;
+      line-height: calc(19 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
+    }
   }
   }
 }
 }
 </style>
 </style>

+ 6 - 0
game/src/views/ShopForVisitor.vue

@@ -96,6 +96,12 @@ const {
   windowSizeWhenDesignForRef,
   windowSizeWhenDesignForRef,
 } = useSizeAdapt(390, 752)
 } = useSizeAdapt(390, 752)
 
 
+if (store.state.loginStatus) {
+  router.replace({
+    name: 'ShopView'
+  })
+}
+
 /**
 /**
  * 奖品列表
  * 奖品列表
  */
  */

+ 34 - 0
game/yarn.lock

@@ -2144,6 +2144,11 @@ balanced-match@^1.0.0:
   resolved "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
   resolved "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
   integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
   integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
 
 
+base64-arraybuffer@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.npmmirror.com/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz#1c37589a7c4b0746e34bd1feb951da2df01c1bdc"
+  integrity sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==
+
 base64-js@^1.3.1:
 base64-js@^1.3.1:
   version "1.5.1"
   version "1.5.1"
   resolved "https://registry.npmmirror.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
   resolved "https://registry.npmmirror.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
@@ -2646,6 +2651,13 @@ css-declaration-sorter@^6.3.1:
   resolved "https://registry.npmmirror.com/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz#28beac7c20bad7f1775be3a7129d7eae409a3a71"
   resolved "https://registry.npmmirror.com/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz#28beac7c20bad7f1775be3a7129d7eae409a3a71"
   integrity sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==
   integrity sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==
 
 
+css-line-break@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.npmmirror.com/css-line-break/-/css-line-break-2.1.0.tgz#bfef660dfa6f5397ea54116bb3cb4873edbc4fa0"
+  integrity sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w==
+  dependencies:
+    utrie "^1.0.2"
+
 css-loader@^6.5.0:
 css-loader@^6.5.0:
   version "6.8.1"
   version "6.8.1"
   resolved "https://registry.npmmirror.com/css-loader/-/css-loader-6.8.1.tgz#0f8f52699f60f5e679eab4ec0fcd68b8e8a50a88"
   resolved "https://registry.npmmirror.com/css-loader/-/css-loader-6.8.1.tgz#0f8f52699f60f5e679eab4ec0fcd68b8e8a50a88"
@@ -3744,6 +3756,14 @@ html-webpack-plugin@^5.1.0:
     pretty-error "^4.0.0"
     pretty-error "^4.0.0"
     tapable "^2.0.0"
     tapable "^2.0.0"
 
 
+html2canvas@^1.4.1:
+  version "1.4.1"
+  resolved "https://registry.npmmirror.com/html2canvas/-/html2canvas-1.4.1.tgz#7cef1888311b5011d507794a066041b14669a543"
+  integrity sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA==
+  dependencies:
+    css-line-break "^2.1.0"
+    text-segmentation "^1.0.3"
+
 htmlparser2@^6.1.0:
 htmlparser2@^6.1.0:
   version "6.1.0"
   version "6.1.0"
   resolved "https://registry.npmmirror.com/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7"
   resolved "https://registry.npmmirror.com/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7"
@@ -5933,6 +5953,13 @@ terser@^5.10.0, terser@^5.26.0:
     commander "^2.20.0"
     commander "^2.20.0"
     source-map-support "~0.5.20"
     source-map-support "~0.5.20"
 
 
+text-segmentation@^1.0.3:
+  version "1.0.3"
+  resolved "https://registry.npmmirror.com/text-segmentation/-/text-segmentation-1.0.3.tgz#52a388159efffe746b24a63ba311b6ac9f2d7943"
+  integrity sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw==
+  dependencies:
+    utrie "^1.0.2"
+
 text-table@^0.2.0:
 text-table@^0.2.0:
   version "0.2.0"
   version "0.2.0"
   resolved "https://registry.npmmirror.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
   resolved "https://registry.npmmirror.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
@@ -6103,6 +6130,13 @@ utils-merge@1.0.1:
   resolved "https://registry.npmmirror.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713"
   resolved "https://registry.npmmirror.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713"
   integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==
   integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==
 
 
+utrie@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.npmmirror.com/utrie/-/utrie-1.0.2.tgz#d42fe44de9bc0119c25de7f564a6ed1b2c87a645"
+  integrity sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw==
+  dependencies:
+    base64-arraybuffer "^1.0.2"
+
 uuid@^8.3.2:
 uuid@^8.3.2:
   version "8.3.2"
   version "8.3.2"
   resolved "https://registry.npmmirror.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2"
   resolved "https://registry.npmmirror.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2"