Browse Source

优化:bug修改及布局优化

haiyang 1 tuần trước cách đây
mục cha
commit
b2fccd4fed

+ 3 - 0
env/.env.development

@@ -4,6 +4,9 @@ NODE_ENV = 'development'
 VITE_DELETE_CONSOLE = false
 # 是否开启sourcemap
 VITE_SHOW_SOURCEMAP = false
+# 是否开启懒加载
+VITE_LAZY_CODE_LOADING = false
+
 
 # 后台请求地址
 VITE_SERVER_BASEURL = 'http://192.168.1.28:8082/jeecg-boot'

+ 2 - 0
env/.env.production

@@ -4,6 +4,8 @@ NODE_ENV = 'production'
 VITE_DELETE_CONSOLE = true
 # 是否开启sourcemap
 VITE_SHOW_SOURCEMAP = false
+# 是否开启懒加载
+VITE_LAZY_CODE_LOADING = true
 
 # 后台请求地址
 # VITE_SERVER_BASEURL = 'https://prod.xxx.com'

+ 140 - 138
manifest.config.ts

@@ -6,159 +6,161 @@ import { loadEnv } from 'vite'
 
 // 手动解析命令行参数获取 mode
 function getMode() {
-  const args = process.argv.slice(2)
-  const modeFlagIndex = args.findIndex(arg => arg === '--mode')
-  return modeFlagIndex !== -1 ? args[modeFlagIndex + 1] : args[0] === 'build' ? 'production' : 'development' // 默认 development
+    const args = process.argv.slice(2)
+    const modeFlagIndex = args.findIndex(arg => arg === '--mode')
+    return modeFlagIndex !== -1 ? args[modeFlagIndex + 1] : args[0] === 'build' ? 'production' : 'development' // 默认 development
 }
 // 获取环境变量的范例
 const env = loadEnv(getMode(), path.resolve(process.cwd(), 'env'))
 const {
-  VITE_APP_TITLE,
-  VITE_UNI_APPID,
-  VITE_WX_APPID,
-  VITE_APP_PUBLIC_BASE,
-  VITE_FALLBACK_LOCALE,
+    VITE_APP_TITLE,
+    VITE_UNI_APPID,
+    VITE_WX_APPID,
+    VITE_APP_PUBLIC_BASE,
+    VITE_FALLBACK_LOCALE,
+    VITE_LAZY_CODE_LOADING
 } = env
 // console.log('manifest.config.ts env:', env)
 
 export default defineManifestConfig({
-  'name': VITE_APP_TITLE,
-  'appid': VITE_UNI_APPID,
-  'description': '',
-  'versionName': '1.0.0',
-  'versionCode': '100',
-  'transformPx': false,
-  'locale': VITE_FALLBACK_LOCALE, // 'zh-Hans'
-  'h5': {
-    router: {
-      base: VITE_APP_PUBLIC_BASE,
-    },
-  },
-  /* 5+App特有相关 */
-  'app-plus': {
-    usingComponents: true,
-    nvueStyleCompiler: 'uni-app',
-    compilerVersion: 3,
-    compatible: {
-      ignoreVersion: true,
+    'name': VITE_APP_TITLE,
+    'appid': VITE_UNI_APPID,
+    'description': '',
+    'versionName': '1.0.0',
+    'versionCode': '100',
+    'transformPx': false,
+    'locale': VITE_FALLBACK_LOCALE, // 'zh-Hans'
+    'h5': {
+        router: {
+            base: VITE_APP_PUBLIC_BASE,
+        },
     },
-    splashscreen: {
-      alwaysShowBeforeRender: true,
-      waiting: true,
-      autoclose: true,
-      delay: 0,
+    /* 5+App特有相关 */
+    'app-plus': {
+        usingComponents: true,
+        nvueStyleCompiler: 'uni-app',
+        compilerVersion: 3,
+        compatible: {
+            ignoreVersion: true,
+        },
+        splashscreen: {
+            alwaysShowBeforeRender: true,
+            waiting: true,
+            autoclose: true,
+            delay: 0,
+        },
+        /* 模块配置 */
+        modules: {},
+        /* 应用发布信息 */
+        distribute: {
+            /* android打包配置 */
+            android: {
+                minSdkVersion: 21,
+                targetSdkVersion: 30,
+                abiFilters: ['armeabi-v7a', 'arm64-v8a'],
+                permissions: [
+                    '<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>',
+                    '<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>',
+                    '<uses-permission android:name="android.permission.VIBRATE"/>',
+                    '<uses-permission android:name="android.permission.READ_LOGS"/>',
+                    '<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>',
+                    '<uses-feature android:name="android.hardware.camera.autofocus"/>',
+                    '<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>',
+                    '<uses-permission android:name="android.permission.CAMERA"/>',
+                    '<uses-permission android:name="android.permission.GET_ACCOUNTS"/>',
+                    '<uses-permission android:name="android.permission.READ_PHONE_STATE"/>',
+                    '<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>',
+                    '<uses-permission android:name="android.permission.WAKE_LOCK"/>',
+                    '<uses-permission android:name="android.permission.FLASHLIGHT"/>',
+                    '<uses-feature android:name="android.hardware.camera"/>',
+                    '<uses-permission android:name="android.permission.WRITE_SETTINGS"/>',
+                ],
+            },
+            /* ios打包配置 */
+            ios: {},
+            /* SDK配置 */
+            sdkConfigs: {},
+            /* 图标配置 */
+            icons: {
+                android: {
+                    hdpi: 'static/app/icons/72x72.png',
+                    xhdpi: 'static/app/icons/96x96.png',
+                    xxhdpi: 'static/app/icons/144x144.png',
+                    xxxhdpi: 'static/app/icons/192x192.png',
+                },
+                ios: {
+                    appstore: 'static/app/icons/1024x1024.png',
+                    ipad: {
+                        'app': 'static/app/icons/76x76.png',
+                        'app@2x': 'static/app/icons/152x152.png',
+                        'notification': 'static/app/icons/20x20.png',
+                        'notification@2x': 'static/app/icons/40x40.png',
+                        'proapp@2x': 'static/app/icons/167x167.png',
+                        'settings': 'static/app/icons/29x29.png',
+                        'settings@2x': 'static/app/icons/58x58.png',
+                        'spotlight': 'static/app/icons/40x40.png',
+                        'spotlight@2x': 'static/app/icons/80x80.png',
+                    },
+                    iphone: {
+                        'app@2x': 'static/app/icons/120x120.png',
+                        'app@3x': 'static/app/icons/180x180.png',
+                        'notification@2x': 'static/app/icons/40x40.png',
+                        'notification@3x': 'static/app/icons/60x60.png',
+                        'settings@2x': 'static/app/icons/58x58.png',
+                        'settings@3x': 'static/app/icons/87x87.png',
+                        'spotlight@2x': 'static/app/icons/80x80.png',
+                        'spotlight@3x': 'static/app/icons/120x120.png',
+                    },
+                },
+            },
+        },
     },
-    /* 模块配置 */
-    modules: {},
-    /* 应用发布信息 */
-    distribute: {
-      /* android打包配置 */
-      android: {
-        minSdkVersion: 21,
-        targetSdkVersion: 30,
-        abiFilters: ['armeabi-v7a', 'arm64-v8a'],
-        permissions: [
-          '<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>',
-          '<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>',
-          '<uses-permission android:name="android.permission.VIBRATE"/>',
-          '<uses-permission android:name="android.permission.READ_LOGS"/>',
-          '<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>',
-          '<uses-feature android:name="android.hardware.camera.autofocus"/>',
-          '<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>',
-          '<uses-permission android:name="android.permission.CAMERA"/>',
-          '<uses-permission android:name="android.permission.GET_ACCOUNTS"/>',
-          '<uses-permission android:name="android.permission.READ_PHONE_STATE"/>',
-          '<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>',
-          '<uses-permission android:name="android.permission.WAKE_LOCK"/>',
-          '<uses-permission android:name="android.permission.FLASHLIGHT"/>',
-          '<uses-feature android:name="android.hardware.camera"/>',
-          '<uses-permission android:name="android.permission.WRITE_SETTINGS"/>',
-        ],
-      },
-      /* ios打包配置 */
-      ios: {},
-      /* SDK配置 */
-      sdkConfigs: {},
-      /* 图标配置 */
-      icons: {
-        android: {
-          hdpi: 'static/app/icons/72x72.png',
-          xhdpi: 'static/app/icons/96x96.png',
-          xxhdpi: 'static/app/icons/144x144.png',
-          xxxhdpi: 'static/app/icons/192x192.png',
+    /* 快应用特有相关 */
+    'quickapp': {},
+    /* 小程序特有相关 */
+    'mp-weixin': {
+        appid: VITE_WX_APPID,
+        setting: {
+            urlCheck: false,
+            // 是否启用 ES6 转 ES5
+            es6: true,
+            minified: true,
         },
-        ios: {
-          appstore: 'static/app/icons/1024x1024.png',
-          ipad: {
-            'app': 'static/app/icons/76x76.png',
-            'app@2x': 'static/app/icons/152x152.png',
-            'notification': 'static/app/icons/20x20.png',
-            'notification@2x': 'static/app/icons/40x40.png',
-            'proapp@2x': 'static/app/icons/167x167.png',
-            'settings': 'static/app/icons/29x29.png',
-            'settings@2x': 'static/app/icons/58x58.png',
-            'spotlight': 'static/app/icons/40x40.png',
-            'spotlight@2x': 'static/app/icons/80x80.png',
-          },
-          iphone: {
-            'app@2x': 'static/app/icons/120x120.png',
-            'app@3x': 'static/app/icons/180x180.png',
-            'notification@2x': 'static/app/icons/40x40.png',
-            'notification@3x': 'static/app/icons/60x60.png',
-            'settings@2x': 'static/app/icons/58x58.png',
-            'settings@3x': 'static/app/icons/87x87.png',
-            'spotlight@2x': 'static/app/icons/80x80.png',
-            'spotlight@3x': 'static/app/icons/120x120.png',
-          },
+        lazyCodeLoading: 'requiredComponents',
+        optimization: {
+            subPackages: true,
         },
-      },
+        // 是否合并组件虚拟节点外层属性,uni-app 3.5.1+ 开始支持。目前仅支持 style、class 属性。
+        // 默认不开启(undefined),这里设置为开启。
+        mergeVirtualHostAttributes: true,
+        // styleIsolation: 'shared',
+        usingComponents: true,
+        // __usePrivacyCheck__: true,
     },
-  },
-  /* 快应用特有相关 */
-  'quickapp': {},
-  /* 小程序特有相关 */
-  'mp-weixin': {
-    appid: VITE_WX_APPID,
-    setting: {
-      urlCheck: false,
-      // 是否启用 ES6 转 ES5
-      es6: true,
-      minified: true,
+    'mp-alipay': {
+        usingComponents: true,
+        styleIsolation: 'shared',
+        optimization: {
+            subPackages: true,
+        },
+        // 解决支付宝小程序开发工具报错 【globalThis is not defined】
+        compileOptions: {
+            globalObjectMode: 'enable',
+            transpile: {
+                script: {
+                    ignore: ['node_modules/**'],
+                },
+            },
+        },
     },
-    optimization: {
-      subPackages: true,
+    'mp-baidu': {
+        usingComponents: true,
     },
-    // 是否合并组件虚拟节点外层属性,uni-app 3.5.1+ 开始支持。目前仅支持 style、class 属性。
-    // 默认不开启(undefined),这里设置为开启。
-    mergeVirtualHostAttributes: true,
-    // styleIsolation: 'shared',
-    usingComponents: true,
-    // __usePrivacyCheck__: true,
-  },
-  'mp-alipay': {
-    usingComponents: true,
-    styleIsolation: 'shared',
-    optimization: {
-      subPackages: true,
+    'mp-toutiao': {
+        usingComponents: true,
     },
-    // 解决支付宝小程序开发工具报错 【globalThis is not defined】
-    compileOptions: {
-      globalObjectMode: 'enable',
-      transpile: {
-        script: {
-          ignore: ['node_modules/**'],
-        },
-      },
+    'uniStatistics': {
+        enable: false,
     },
-  },
-  'mp-baidu': {
-    usingComponents: true,
-  },
-  'mp-toutiao': {
-    usingComponents: true,
-  },
-  'uniStatistics': {
-    enable: false,
-  },
-  'vueVersion': '3',
+    'vueVersion': '3',
 })

+ 0 - 6
pages.config.ts

@@ -28,12 +28,6 @@ export default defineUniPages({
             enhance: true,
             postcss: true,
         },
-        'lazyCodeLoading': 'requiredComponents',
-        // 微信小程序全局分享配置
-        'window': {
-            'enableShareAppMessage': true,
-            'enableShareTimeline': true,
-        },
     },
     // tabbar 的配置统一在 “./src/tabbar/config.ts” 文件中
     'tabBar': tabBar as any,

+ 6 - 6
src/components/mescroll.vue

@@ -153,10 +153,10 @@ export default {
     },
     data() {
         return {
-        mescroll: {optDown:{},optUp:{}}, // mescroll实例
-        viewId: 'id_' + Math.random().toString(36).substr(2,16), // 随机生成mescroll的id(不能数字开头,否则找不到元素)
-        downHight: 0, //下拉刷新: 容器高度
-        downRate: 0, // 下拉比率(inOffset: rate<1; outOffset: rate>=1)
+            mescroll: {optDown:{},optUp:{}}, // mescroll实例
+            viewId: 'id_' + Math.random().toString(36).substr(2,16), // 随机生成mescroll的id(不能数字开头,否则找不到元素)
+            downHight: 0, //下拉刷新: 容器高度
+            downRate: 0, // 下拉比率(inOffset: rate<1; outOffset: rate>=1)
             downLoadType: 0, // 下拉刷新状态: 0(loading前), 1(inOffset), 2(outOffset), 3(showLoading), 4(endDownScroll)
             upLoadType: 0, // 上拉加载状态: 0(loading前), 1loading中, 2没有更多了,显示END文本提示, 3(没有更多了,不显示END文本提示)
             isShowEmpty: false, // 是否显示空布局
@@ -167,8 +167,8 @@ export default {
             windowBottom: 0, // 可使用窗口的底部位置
             windowHeight: 0, // 可使用窗口的高度
             statusBarHeight: 0 // 状态栏高度
-            }
-            },
+        }
+    },
     computed: {
     // 是否使用fixed定位 (当height有值,则不使用)
     isFixed(){

+ 18 - 18
src/pages-A/incomePage/index.vue

@@ -2,11 +2,9 @@
 import { usePagination } from 'alova/client'
 import { reactive, ref, watch } from 'vue'
 import { getCouponIssuerAccountByPageMap } from '@/api/income'
-import { getInviteList } from '@/api/me'
 import CustomNavigationBar from '@/components/CustomNavigationBar.vue'
 import IncomeItem from '@/components/IncomeItem.vue'
 import MescrollUni from '@/components/mescroll.vue'
-import MescrollEmpty from '@/custom-components/custom-mescroll/components/mescroll-empty.vue'
 
 import { changtime, safeAreaInsets } from '@/utils'
 
@@ -48,6 +46,15 @@ const { send, data, pageCount, loading, page, pageSize, isLastPage, refresh, rel
     immediate: false,
 })
 
+watch(() => data.value, (newVal) => {
+    if (newVal.length === 0 && !loading.value) {
+        mescroll.showEmpty()
+    }
+    else {
+        mescroll.removeEmpty()
+    }
+})
+
 // ============ mescroll 配置 ============
 const downOption = reactive({
     use: true,
@@ -70,7 +77,11 @@ const upOption = reactive({
         size: pageSize.value,
     },
     empty: {
-        use: false,
+        use: true,
+        tip: '暂无数据',
+        btnText: '刷新试试',
+        icon: '/static/images/mescroll-empty.png',
+        fixed: false,
     },
     textNoMore: '--- 已经到底了 ---',
     toTop: {
@@ -85,15 +96,6 @@ const upOption = reactive({
     }
 })
 
-const emptyOption = reactive({
-    use: true,
-    tip: '暂无数据',
-    btnText: '刷新试试',
-    icon: '/static/images/mescroll-empty.png',
-    fixed: false,
-    top: '200rpx',
-})
-
 function mescrollInit(ref) {
     mescroll = ref
 }
@@ -131,7 +133,7 @@ onError(() => {
     mescroll.endErr()
 })
 
-onShow(async () => {
+onLoad(async () => {
     await send()
 })
 
@@ -149,7 +151,6 @@ async function tabChange(index) {
 async function pickerConfirm() {
     pickerShow.value = false
     mescroll.scrollTo(0, 0)
-    console.log(mescroll)
     mescroll.hideUpScroll()
     showLoading.value = true
     await reload()
@@ -159,7 +160,7 @@ async function pickerConfirm() {
 
 <template>
     <view class="income-container">
-        <custom-navigation-bar :show-back="true" title="收益" />
+        <custom-navigation-bar :show-back="true" title="收益" :is-shadow="false" />
         <view class="income-content"
             :style="{ marginTop: `calc(${topSafeAreaHeight}px + 88rpx)`, height: `calc(100vh - ${topSafeAreaHeight}px - 88rpx)` }">
             <view class="tabs-container flex">
@@ -183,12 +184,11 @@ async function pickerConfirm() {
             <view class="income-content-list"
                 :style="{ height: `calc(100vh - ${topSafeAreaHeight}px - 88rpx - 88rpx - 72rpx)` }">
                 <mescroll-uni id="mescrollContainer" :down="downOption" :up="upOption" :fixed="false"
-                    @init="mescrollInit" @down="downCallback" @up="upCallback">
+                    :is-show-empty="true" offset="70" @init="mescrollInit" @down="downCallback" @up="upCallback"
+                    @emptyclick="reload">
                     <view v-for="item in data" :key="item.userId" class="income-content-item">
                         <income-item :data="item" :type="activeIndex" />
                     </view>
-                    <mescroll-empty v-if="data.length === 0 && !loading" icon="'none'" tip="暂无数据" :option="emptyOption"
-                        @emptyclick="reload" />
                     <!-- 滚动区域内的loading遮罩 -->
                     <view v-if="showLoading && loading" class="loading-mask">
                         <view class="loading-spinner" />

+ 17 - 15
src/pages-A/invitePage/index.vue

@@ -44,6 +44,15 @@ const { send, data, pageCount, loading, page, pageSize, isLastPage, refresh, rel
     immediate: false,
 })
 
+watch(() => data.value, (newVal) => {
+    if (newVal.length === 0 && !loading.value) {
+        mescroll.showEmpty()
+    }
+    else {
+        mescroll.removeEmpty()
+    }
+})
+
 // ============ mescroll 配置 ============
 const downOption = reactive({
     use: true,
@@ -66,7 +75,11 @@ const upOption = reactive({
         size: pageSize.value,
     },
     empty: {
-        use: false,
+        use: true,
+        tip: '暂无数据',
+        btnText: '刷新试试',
+        icon: '/static/images/mescroll-empty.png',
+        fixed: false,
     },
     textNoMore: '--- 已经到底了 ---',
     toTop: {
@@ -81,15 +94,6 @@ const upOption = reactive({
     }
 })
 
-const emptyOption = reactive({
-    use: true,
-    tip: '暂无数据',
-    btnText: '刷新试试',
-    icon: '/static/images/mescroll-empty.png',
-    fixed: false,
-    top: '200rpx',
-})
-
 function mescrollInit(ref) {
     mescroll = ref
 }
@@ -126,7 +130,7 @@ onError(() => {
     mescroll.endErr()
 })
 
-onShow(async () => {
+onLoad(async () => {
     await send()
 })
 
@@ -194,13 +198,11 @@ function searchChange(value) {
             </view>
             <view class="invite-content-list"
                 :style="{ height: `calc(100vh - ${topSafeAreaHeight}px - 88rpx - 176rpx)` }">
-                <mescroll-uni id="mescrollContainer" :down="downOption" :up="upOption" :fixed="false"
-                    @init="mescrollInit" @down="downCallback" @up="upCallback">
+                <mescroll-uni id="mescrollContainer" :down="downOption" :up="upOption" :fixed="false" offset="70"
+                    @init="mescrollInit" @down="downCallback" @up="upCallback" @emptyclick="reload">
                     <view v-for="item in data" :key="item.userId" class="invite-content-item">
                         <invite-item :data="item" />
                     </view>
-                    <mescroll-empty v-if="data.length === 0 && !loading" icon="'none'" tip="暂无数据" :option="emptyOption"
-                        @emptyclick="reload" />
                     <!-- 滚动区域内的loading遮罩 -->
                     <view v-if="showLoading && loading" class="loading-mask">
                         <view class="loading-spinner" />

+ 3 - 2
src/pages-A/myInviter/index.vue

@@ -1,6 +1,6 @@
 <script lang="ts" setup>
 import { storeToRefs } from 'pinia'
-import { ref } from 'vue'
+import { nextTick, ref } from 'vue'
 import CustomNavigationBar from '@/components/CustomNavigationBar.vue'
 import { useInviteCodeStore } from '@/store/inviteQCCode'
 import { useInviterStore } from '@/store/inviter'
@@ -93,7 +93,8 @@ async function drawQRCode() {
     }
 }
 
-onShow(async () => {
+onLoad(async () => {
+    await nextTick()
     await drawQRCode()
 })
 

+ 2 - 5
src/pages-A/shareFriend/index.vue

@@ -105,11 +105,8 @@ onLoad(async (options) => {
     systemInfo.value = uni.getSystemInfoSync()
 
     // 页面加载后生成分享图片
-    nextTick(() => {
-        setTimeout(() => {
-            generateShareImage()
-        }, 300)
-    })
+    await nextTick()
+    await generateShareImage()
 })
 
 function handleBack() {

+ 2 - 5
src/pages-A/sharePage/index.vue

@@ -142,11 +142,8 @@ onLoad(async (options) => {
     }
 
     // 页面加载后生成分享图片
-    nextTick(() => {
-        setTimeout(() => {
-            generateShareImage()
-        }, 300)
-    })
+    await nextTick()
+    await generateShareImage()
 })
 
 function handleBack() {

+ 35 - 4
src/pages/home/home.vue

@@ -41,7 +41,7 @@ const couponStore = useCouponStore()
 const { couponList, discountVoucherList, loading } = storeToRefs(couponStore)
 
 // 获取首页收益
-const { send: getAccountCountRequest, data: accountCountData } = useRequest(getAccountCount, {
+const { send: getAccountCountRequest, data: accountCountData, loading: accountCountLoading } = useRequest(getAccountCount, {
     immediate: false,
     dependencies: [],
 })
@@ -152,7 +152,12 @@ async function onRefresh() {
                     </view>
                     <view class="home-header-balance-num">
                         <view class="home-header-balance-num-amount">
-                            {{ accountCountData?.balance || 0 }}
+                            <template v-if="accountCountLoading">
+                                <up-loading-icon size="65rpx" mode="semicircle" color="#fff" />
+                            </template>
+                            <template v-else>
+                                {{ accountCountData?.balance || 0 }}
+                            </template>
                         </view>
                     </view>
                 </view>
@@ -206,7 +211,9 @@ async function onRefresh() {
                     <template v-for="item in couponList" :key="item.id">
                         <spend-and-save-coupon :coupon="item" />
                     </template>
-                    <up-loading-icon v-if="loading" class="coupon-content-loading" text="加载中" text-size="18" />
+                    <view v-if="loading" class="coupon-content-loading">
+                        <up-loading-icon text-color="#333" color="#ed6b66" text="加载中" text-size="18" />
+                    </view>
                 </view>
                 <view class="home-header-coupon-btn">
                     <up-button class="home-header-coupon-btn-text" text="查看更多优惠券"
@@ -235,7 +242,9 @@ async function onRefresh() {
                     <template v-for="item in discountVoucherList" :key="item.id">
                         <discount-coupon :coupon="item" />
                     </template>
-                    <up-loading-icon v-if="loading" text="加载中" text-size="18" />
+                    <view v-if="loading" class="home-coupon-content-loading">
+                        <up-loading-icon text-color="#333" color="#ed6b66" text="加载中" text-size="18" />
+                    </view>
                 </view>
             </view>
         </up-pull-refresh>
@@ -460,7 +469,16 @@ async function onRefresh() {
             }
 
             .coupon-content-loading {
+                position: absolute;
+                top: 0;
+                left: 0;
+                width: 100%;
+                height: 100%;
+                display: flex;
+                justify-content: center;
                 align-self: center;
+                background: rgba(255, 232, 206, 0.5);
+                z-index: 1;
             }
         }
 
@@ -528,10 +546,23 @@ async function onRefresh() {
         }
 
         .home-coupon-content {
+            min-height: 209rpx;
             padding-top: 28rpx;
             display: flex;
             flex-direction: column;
             gap: 20rpx;
+            position: relative;
+
+            .home-coupon-content-loading {
+                top: 0;
+                left: 0;
+                width: 100%;
+                height: 100%;
+                display: flex;
+                justify-content: center;
+                align-self: center;
+                z-index: 1;
+            }
         }
     }
 }

+ 0 - 2
src/pages/my/my.vue

@@ -34,8 +34,6 @@ const { send: getShareStateRequest, data: shareStateData, loading: shareStateLoa
     immediate: false,
 })
 
-// 昵称输入值
-const nicknameInput = ref('')
 onShow(async () => {
     console.log('登录判断:', hasLogin.value)
     // 登录后查询收益数据