uniapp+<script setup lang=“ts“>解决有数据与暂无数据切换显示,有数据加载时暂无数据闪现(先加载空数据)问题

声明showEmpty 为false,在接口返回处判断有数据时设置showEmpty 为false,接口返回数据为空则判断showEmpty 为true (这样就解决有数据的时候会闪现暂无数据的问题啦)

复制代码
<!--
 * @Date: 2024-02-26 03:38:52
 * @LastEditTime: 2025-06-05 09:02:58
 * @Description: 救援详情页面
-->
<template>
    <view class="consolidated-order">
        <view class="consolidated-order-filter">
            <view class="consolidated-order-filter-cont flex-center-between">
                <select-date ref="dateRef" @change-date="changeDate" />
                <select-time ref="timeRef" @change-time="changeTime" />
                <select-goods ref="goodsRef" @change-goods="changeGoods" />
            </view>
        </view>
        <scroll-view
            v-if="!showEmpty"
            scroll-with-animation
            :scroll-y="true"
            :show-scrollbar="false"
            class="consolidated-cont"
        >
            <view class="service-order-item-box">
                <view v-for="(item, index) in splicingOrdersList" :key="index" class="service-order-item">
                    <view class="service-order-item-time"
                        >{{ timeFormat(item.departureTime) }} - {{ timeFormat(item.arriveTime) }}</view
                    >
                    <view
                        v-for="(item1, index1) in item.flyRecordModelList"
                        :key="index1"
                        class="service-order-item-cont flex-center-start"
                    >
                        <view class="cont-left flex-center-between">
                            <view class="fly-no-box fly-no-yellow flex-center-start">
                                <view class="fly-no-text">架次</view
                                ><view class="fly-no-num">{{ item1.flyNo || '--' }}</view></view
                            >
                            <view class="fly-id">飞行记录ID:{{ item1.id }}</view>
                        </view>
                        <view class="cont-right flex-center-start">
                            <view class="balance-num">空位:{{ item1.balanceNum }}人</view>
                            <view class="service-order-item-btn" @click="splicingOrders(item1)">拼单</view>
                        </view>
                    </view>
                </view>
            </view>
        </scroll-view>
        <!-- 拼单空状态 -->
        <view v-if="showEmpty" class="empty-wrap">
            <empty-block :image-src="EMPTY_PNG" text="还没有拼单信息哦" />
        </view>
    </view>
</template>

<script setup lang="ts">
import config from '@/../config/config';
import { qryCanJoinFly, combineServerOrder } from '@/services/api-order';
import { timeFormat } from '@/utils/DateUtils';
import { onLoad } from '@dcloudio/uni-app';
import { computed, ref, onMounted } from 'vue';
const EMPTY_PNG = `${config.assetPath}/images/book/empty-order.png`;
import { useStore } from 'vuex';
const store = useStore();
const openId = computed(() => store.state.userStore?.userInfo.openId);
const changeDate = (e) => {};
const changeTime = (e) => {};
const changeGoods = (e) => {};
const splicingOrdersList = ref();
const orderNoVal = ref();
const showEmpty = ref(false); //是否显示空状态
// 拼单列表
const getCanJoinFly = async () => {
    // ATO24080900075466有数据
    await qryCanJoinFly({
        orderNo: orderNoVal.value,
    }).then((res) => {
        if (res?.code == 0 && res?.data) {
           if (res?.data.length <= 0) {
                showEmpty.value = true; //没有数据的时候展示空状态
            } else {
                showEmpty.value = false; //有数据则正常展示数据
            }
            splicingOrdersList.value = res?.data;
        }
    });
};
const splicingOrders = (item) => {
    uni.showModal({
        title: '',
        content: '是否选择拼机',
        confirmText: '确认',
        success: (data) => {
            if (data.confirm) {
                let params = {
                    orderNo: orderNoVal.value,
                    combineFlyId: item.id,
                    openId: openId.value,
                };
                combineServerOrder(params).then((res) => {
                    if (res?.code == 0) {
                        uni.showToast({
                            title: '拼机成功',
                            icon: 'success',
                        });
                    }
                });
            } else if (data.cancel) {
                console.log('用户取消了操作');
            }
        },
    });
};
onLoad((option) => {
    orderNoVal.value = option.orderNo || '';
});
onMounted(() => {
    getCanJoinFly();
});
</script>

<style lang="scss">
@import './index.scss';
</style>

有数据

空状态

相关推荐
小白呀白1 小时前
【uni-app】树形结构数据选择框
前端·javascript·uni-app
云虎软件朱总2 小时前
配送跑腿系统:构建高并发、低延迟的同城配送系统架构解析
java·系统架构·uni-app
开发者小天3 小时前
uniapp中封装底部跳转方法
前端·javascript·uni-app
Q_Q19632884753 小时前
python+uniapp基于微信小程序的医院陪诊预约系统
开发语言·spring boot·python·微信小程序·django·flask·uni-app
2501_915909064 小时前
Python 爬虫 HTTPS 实战,requests httpx aiohttp 抓取技巧、证书问题与抓包调试全流程
爬虫·python·ios·小程序·https·uni-app·iphone
Sun Peng7 小时前
【uniapp】uniapp+uview-ui+mixins实现搜索+上拉加载+加载动画功能:
ui·uni-app
00后程序员张7 小时前
iOS 开发环境搭建完整指南 Xcode 安装配置、iOS 开发工具选择、ipa 打包与 App Store 上架实战经验
android·macos·ios·小程序·uni-app·iphone·xcode
Q_Q5110082858 小时前
python+springboot+uniapp基于微信小程序的停车场管理系统 弹窗提示和车牌识别
vue.js·spring boot·python·django·flask·uni-app·node.js
慎思笃行_11 小时前
uniapp 无线连接 手机基座
智能手机·uni-app
00后程序员张12 小时前
App 上架全流程指南,iOS 应用发布步骤、ipa 文件上传工具、TestFlight 分发与 App Store 审核经验分享
android·ios·小程序·https·uni-app·iphone·webview