| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180 |
- <template>
- <iframe class="ifr" id="ifr" :src="`program/index.html?token=${token}`" frameborder="0"></iframe>
- <router-view class="fix-root" :userInfo="userInfo" />
- <template v-if="!$route.meta.outoflist">
- <Vmenu @clickIntro="isShowIntro = true" />
- <div @click="isShowIntegralDetail = true" class="integral-area">
- <img :src="`${config.cdn_url}images/icon_integral.png`" alt="">
- <span>积分:{{ point }}</span>
- </div>
- </template>
- <teleport to='#app'>
- <Transition>
- <Introduce v-if="isShowIntro" @close="isShowIntro = false" />
- </Transition>
- <Transition>
- <IntegralDetail v-if="isShowIntegralDetail" @close="isShowIntegralDetail = false" />
- </Transition>
- </teleport>
- </template>
- <script setup>
- import Vmenu from "@/components/Vmenu.vue";
- import Introduce from "@/components/Introduce.vue";
- import IntegralDetail from '@/components/Integral-detail.vue'
- import { ref, onMounted, reactive } from 'vue'
- import http from '@/api/http.js'
- import utils from '@/utils/index.js'
- let token = utils.getQueryByName('token')
- const isShowIntro = ref(false)
- const isShowIntegralDetail = ref(false)
- const point = ref(0)
- let userInfo = reactive({})
- const root = document.documentElement;
- root.style.setProperty('--bgImage', `url(${config.cdn_url}images/background.jpg)`);
- onMounted(async () => {
- let result = (await http.get('cms/wxUser/getUserInfo')).data;
- let info = result.data
- userInfo = info
- point.value = info.point
- })
- </script>
- <style lang="scss">
- @import "@/assets/style/reset.css";
- @import "@/assets/style/my-reset.css";
- html,
- body {
- height: 100%;
- overscroll-behavior: none;
- overflow: hidden;
- }
- #app {
- font-family: Avenir, Helvetica, Arial, sans-serif;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
- width: 100%;
- height: 100%;
- position: relative;
- background-image: var(--bgImage);
- background-size: cover;
- background-repeat: no-repeat;
- background-position: center bottom;
- .integral-area {
- position: absolute;
- right: 0;
- bottom: 40px;
- background: linear-gradient(270deg, #C1A97A 0%, rgba(193, 169, 122, 0) 100%);
- display: flex;
- align-items: center;
- padding: 0 20px 0 50px;
- z-index: 9;
- >span {
- color: #fff;
- margin-left: 10px;
- font-size: 14px;
- }
- }
- .ifr {
- width: 100%;
- height: 100%;
- position: fixed;
- left: 0%;
- top: 0;
- }
- .fix-root {
- pointer-events: none;
- * {
- pointer-events: auto;
- }
- }
- }
- * {
- user-select: none;
- -webkit-touch-callout: none;
- }
- /* 垃圾360浏览器不支持not() */
- input,
- textarea {
- user-select: initial;
- }
- ::-webkit-scrollbar {
- background: rgba(193, 169, 122, 0.5);
- width: 0.3rem;
- height: 0.3rem;
- }
- /*宽度是对垂直滚动条而言,高度是对水平滚动条而言*/
- ::-webkit-scrollbar-thumb {
- background: #fff;
- border-radius: 0.15rem;
- }
- ::-webkit-scrollbar-corner {
- background: rgba(193, 169, 122, 0.5);
- }
- .fade-out-leave-active {
- transition: opacity 1s;
- }
- .fade-out-leave-to {
- opacity: 0;
- }
- .animation-show-hide {
- animation: show-hide 1.8s infinite;
- }
- @keyframes show-hide {
- 0% {
- opacity: 0;
- }
- 50% {
- opacity: 1;
- }
- 100% {
- opacity: 0;
- }
- }
- i {
- font-style: italic;
- }
- .viewer-container {
- background-color: rgba(0, 0, 0, 80%) !important;
- }
- .v-enter-active,
- .v-leave-active {
- transition: opacity 0.5s ease;
- }
- .v-enter-from,
- .v-leave-to {
- opacity: 0;
- }
- </style>
|