app
MrShi
4 天以前 db632e8a141d60915c38f0ee6c9a2a65d088c158
app
已添加62个文件
已删除42个文件
已修改7个文件
37784 ■■■■■ 文件已修改
app/main.js 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/pages.json 56 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/pages/guide-page/guide-page.vue 136 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/pages/index/index.vue 1631 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/pages/login/login.vue 288 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/pages/message/message.vue 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/pages/order/order.vue 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/static/image/background.png 补丁 | 查看 | 原始文档 | blame | 历史
app/static/image/default_nodata_grey@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
app/static/image/ic_biaosuda@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
app/static/image/ic_c1all@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
app/static/image/ic_call@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
app/static/image/ic_cancle@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
app/static/image/ic_close2@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
app/static/image/ic_close@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
app/static/image/ic_daohang@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
app/static/image/ic_jisuda@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
app/static/image/ic_shaixuan@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
app/static/image/ic_shaixuan_sel@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
app/static/image/login_bg@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
app/static/image/login_ic_account@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
app/static/image/login_ic_account_sel@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
app/static/image/login_ic_code@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
app/static/image/login_ic_code_sel@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
app/static/tabbar/nav_gongdan@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
app/static/tabbar/nav_gongdan_sel@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
app/static/tabbar/nav_home_sel@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
app/static/tabbar/nav_home_sel@2x1.png 补丁 | 查看 | 原始文档 | blame | 历史
app/static/tabbar/nav_jiancha@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
app/static/tabbar/nav_jiancha_sel@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
app/static/tabbar/nav_mine@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
app/static/tabbar/nav_mine@2x1.png 补丁 | 查看 | 原始文档 | blame | 历史
app/static/tabbar/nav_order@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
app/static/tabbar/nav_order@2x1.png 补丁 | 查看 | 原始文档 | blame | 历史
app/static/tabbar/nav_shangbao@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
app/static/tabbar/nav_shangbao_sel@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
app/static/tabbar/nav_tubiao@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
app/static/tabbar/nav_tubiao_sel@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
app/static/tabbar/nav_xiaoxi@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
app/static/tabbar/nav_xiaoxi@2x1.png 补丁 | 查看 | 原始文档 | blame | 历史
app/uni_modules/native-tts/android/.gradle/8.9/checksums/checksums.lock 补丁 | 查看 | 原始文档 | blame | 历史
app/uni_modules/native-tts/android/.gradle/8.9/dependencies-accessors/gc.properties 补丁 | 查看 | 原始文档 | blame | 历史
app/uni_modules/native-tts/android/.gradle/8.9/fileChanges/last-build.bin 补丁 | 查看 | 原始文档 | blame | 历史
app/uni_modules/native-tts/android/.gradle/8.9/fileHashes/fileHashes.lock 补丁 | 查看 | 原始文档 | blame | 历史
app/uni_modules/native-tts/android/.gradle/8.9/gc.properties 补丁 | 查看 | 原始文档 | blame | 历史
app/uni_modules/native-tts/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock 补丁 | 查看 | 原始文档 | blame | 历史
app/uni_modules/native-tts/android/.gradle/buildOutputCleanup/cache.properties 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/uni_modules/native-tts/android/.gradle/vcs-1/gc.properties 补丁 | 查看 | 原始文档 | blame | 历史
app/unpackage/dist/dev/app-plus/app-config-service.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/unpackage/dist/dev/app-plus/app-service.js 7647 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/unpackage/dist/dev/app-plus/app-view.js 5625 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/unpackage/dist/dev/app-plus/manifest.json 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/unpackage/dist/dev/app-plus/static/image/background.png 补丁 | 查看 | 原始文档 | blame | 历史
app/unpackage/dist/dev/app-plus/static/image/default_nodata_grey@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
app/unpackage/dist/dev/app-plus/static/image/ic_biaosuda@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
app/unpackage/dist/dev/app-plus/static/image/ic_c1all@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
app/unpackage/dist/dev/app-plus/static/image/ic_call@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
app/unpackage/dist/dev/app-plus/static/image/ic_cancle@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
app/unpackage/dist/dev/app-plus/static/image/ic_close2@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
app/unpackage/dist/dev/app-plus/static/image/ic_close@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
app/unpackage/dist/dev/app-plus/static/image/ic_daohang@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
app/unpackage/dist/dev/app-plus/static/image/ic_jisuda@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
app/unpackage/dist/dev/app-plus/static/image/ic_shaixuan@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
app/unpackage/dist/dev/app-plus/static/image/ic_shaixuan_sel@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
app/unpackage/dist/dev/app-plus/static/image/login_bg@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
app/unpackage/dist/dev/app-plus/static/image/login_ic_account@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
app/unpackage/dist/dev/app-plus/static/image/login_ic_account_sel@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
app/unpackage/dist/dev/app-plus/static/image/login_ic_code@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
app/unpackage/dist/dev/app-plus/static/image/login_ic_code_sel@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
app/unpackage/dist/dev/app-plus/static/tabbar/nav_gongdan@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
app/unpackage/dist/dev/app-plus/static/tabbar/nav_gongdan_sel@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
app/unpackage/dist/dev/app-plus/static/tabbar/nav_home_sel@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
app/unpackage/dist/dev/app-plus/static/tabbar/nav_home_sel@2x1.png 补丁 | 查看 | 原始文档 | blame | 历史
app/unpackage/dist/dev/app-plus/static/tabbar/nav_jiancha@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
app/unpackage/dist/dev/app-plus/static/tabbar/nav_jiancha_sel@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
app/unpackage/dist/dev/app-plus/static/tabbar/nav_mine@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
app/unpackage/dist/dev/app-plus/static/tabbar/nav_mine@2x1.png 补丁 | 查看 | 原始文档 | blame | 历史
app/unpackage/dist/dev/app-plus/static/tabbar/nav_order@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
app/unpackage/dist/dev/app-plus/static/tabbar/nav_order@2x1.png 补丁 | 查看 | 原始文档 | blame | 历史
app/unpackage/dist/dev/app-plus/static/tabbar/nav_shangbao@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
app/unpackage/dist/dev/app-plus/static/tabbar/nav_shangbao_sel@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
app/unpackage/dist/dev/app-plus/static/tabbar/nav_tubiao@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
app/unpackage/dist/dev/app-plus/static/tabbar/nav_tubiao_sel@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
app/unpackage/dist/dev/app-plus/static/tabbar/nav_xiaoxi@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
app/unpackage/dist/dev/app-plus/static/tabbar/nav_xiaoxi@2x1.png 补丁 | 查看 | 原始文档 | blame | 历史
app/unpackage/dist/dev/mp-weixin/app.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/unpackage/dist/dev/mp-weixin/app.json 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/unpackage/dist/dev/mp-weixin/app.wxss 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/unpackage/dist/dev/mp-weixin/common/main.js 171 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/unpackage/dist/dev/mp-weixin/common/main.wxss 291 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/unpackage/dist/dev/mp-weixin/common/runtime.js 158 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/unpackage/dist/dev/mp-weixin/common/vendor.js 21099 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/unpackage/dist/dev/mp-weixin/pages/index/index.js 214 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/unpackage/dist/dev/mp-weixin/pages/index/index.json 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/unpackage/dist/dev/mp-weixin/pages/index/index.wxml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/unpackage/dist/dev/mp-weixin/pages/index/index.wxss 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/unpackage/dist/dev/mp-weixin/pages/mine/mine.js 214 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/unpackage/dist/dev/mp-weixin/pages/mine/mine.json 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/unpackage/dist/dev/mp-weixin/pages/mine/mine.wxml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/unpackage/dist/dev/mp-weixin/pages/mine/mine.wxss 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/unpackage/dist/dev/mp-weixin/static/bg_a.png 补丁 | 查看 | 原始文档 | blame | 历史
app/unpackage/dist/dev/mp-weixin/static/bg_b.png 补丁 | 查看 | 原始文档 | blame | 历史
app/unpackage/dist/dev/mp-weixin/static/logo.png 补丁 | 查看 | 原始文档 | blame | 历史
app/unpackage/dist/dev/mp-weixin/static/tabbar/nav_gongdan@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
app/unpackage/dist/dev/mp-weixin/static/tabbar/nav_gongdan_sel@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
app/unpackage/dist/dev/mp-weixin/static/tabbar/nav_jiancha@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
app/unpackage/dist/dev/mp-weixin/static/tabbar/nav_jiancha_sel@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
app/unpackage/dist/dev/mp-weixin/static/tabbar/nav_shangbao@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
app/unpackage/dist/dev/mp-weixin/static/tabbar/nav_shangbao_sel@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
app/unpackage/dist/dev/mp-weixin/static/tabbar/nav_tubiao@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
app/unpackage/dist/dev/mp-weixin/static/tabbar/nav_tubiao_sel@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
app/main.js
@@ -3,7 +3,6 @@
import uView from "uview-ui";
import store from './store/index.js'
import './uni.promisify.adaptor'
// import Vconsole from 'vconsole'
Vue.config.productionTip = false
App.mpType = 'app'
@@ -11,7 +10,6 @@
 
Vue.prototype.$baseUrl = 'http://192.168.1.54:10011/'
Vue.prototype.$store = store;
// Vue.prototype.$vConsole= new Vconsole()
const app = new Vue({
    store,
app/pages.json
@@ -4,10 +4,20 @@
    },
    "pages": [
        {
            "path": "pages/guide-page/guide-page",
            "style": {
                "app-plus": {
                    "titleNView": false
                }
            }
        },
        {
            "path": "pages/index/index",
            "style": {
                "navigationBarTitleText": "首页",
                "navigationBarBackgroundColor": "#ffffff"
                "navigationStyle": "custom",
                "app-plus": {
                    "titleNView": false
                }
            }
        },
        {
@@ -15,6 +25,26 @@
            "style": {
                "navigationBarTitleText": "我的",
                "navigationBarBackgroundColor": "#ffffff"
            }
        },
        {
            "path": "pages/order/order",
            "style": {
                "navigationBarTitleText": "订单"
            }
        },
        {
            "path": "pages/message/message",
            "style": {
                "navigationBarTitleText": "消息"
            }
        },
        {
            "path": "pages/login/login",
            "style": {
                "app-plus": {
                    "titleNView": false
                }
            }
        }
    ],
@@ -32,14 +62,26 @@
        "list": [
            {
                "pagePath": "pages/index/index",
                "iconPath": "static/tabbar/nav_jiancha@2x.png",
                "selectedIconPath": "static/tabbar/nav_jiancha_sel@2x.png",
                "text": "首页"
                "iconPath": "static/tabbar/nav_home_sel@2x.png",
                "selectedIconPath": "static/tabbar/nav_home_sel@2x1.png",
                "text": "大厅"
            },
            {
                "pagePath": "pages/order/order",
                "iconPath": "static/tabbar/nav_order@2x.png",
                "selectedIconPath": "static/tabbar/nav_order@2x1.png",
                "text": "订单"
            },
            {
                "pagePath": "pages/message/message",
                "iconPath": "static/tabbar/nav_xiaoxi@2x.png",
                "selectedIconPath": "static/tabbar/nav_xiaoxi@2x1.png",
                "text": "消息"
            },
            {
                "pagePath": "pages/mine/mine",
                "iconPath": "static/tabbar/nav_jiancha@2x.png",
                "selectedIconPath": "static/tabbar/nav_jiancha_sel@2x.png",
                "iconPath": "static/tabbar/nav_mine@2x.png",
                "selectedIconPath": "static/tabbar/nav_mine@2x1.png",
                "text": "我的"
            }
        ]
app/pages/guide-page/guide-page.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,136 @@
<template>
    <view class="guide-page">
        <swiper class="guide-page__swiper" :current="current" circular @change="handleSwiperChange">
            <swiper-item v-for="(item, index) in guideList" :key="index">
                <view class="guide-page__slide">
                    <image class="guide-page__image" :src="item.url" mode="heightFix"></image>
                </view>
            </swiper-item>
        </swiper>
        <view class="guide-page__dots">
            <view
                v-for="(item, index) in guideList"
                :key="item.id"
                class="guide-page__dot"
                :class="{ 'guide-page__dot--active': current === index }"
            ></view>
        </view>
        <view class="guide-page__footer">
            <view class="guide-page__action">
                <button class="guide-page__button" hover-class="guide-page__button--hover" @click="jump">立即体验</button>
            </view>
        </view>
    </view>
</template>
<script>
    export default {
        data() {
            return {
                current: 0,
                guideList: [
                    { id: 1, background: '#d9d9d9', url: '/static/image/background.png' },
                    { id: 2, background: '#d9d9d9', url: '/static/image/background.png' },
                    { id: 3, background: '#d9d9d9', url: '/static/image/background.png' },
                    { id: 4, background: '#d9d9d9', url: '/static/image/background.png' }
                ]
            };
        },
        methods: {
            handleSwiperChange(event) {
                this.current = event.detail.current;
            },
            jump() {
                uni.navigateTo({
                    url: '/pages/login/login'
                })
            }
        }
    };
</script>
<style lang="scss" scoped>
    .guide-page {
        position: relative;
        min-height: 100vh;
        background: #d9d9d9;
        &__swiper {
            height: 100vh;
        }
        &__slide {
            height: 100vh;
        }
        &__image {
            display: block;
            width: 100%;
            height: 100%;
        }
        &__footer {
            position: absolute;
            left: 0;
            right: 0;
            bottom: 0;
            padding: 24rpx 0 calc(env(safe-area-inset-bottom) + 30rpx);
            background: #ffffff;
        }
        &__dots {
            position: absolute;
            left: 0;
            right: 0;
            bottom: calc(env(safe-area-inset-bottom) + 154rpx);
            display: flex;
            justify-content: center;
            align-items: center;
            gap: 18rpx;
        }
        &__dot {
            width: 14rpx;
            height: 14rpx;
            border-radius: 50%;
            background: rgba(255, 255, 255, 0.58);
            transition: all 0.2s ease;
            &--active {
                width: 18rpx;
                height: 18rpx;
                background: #ffffff;
                box-shadow: 0 0 0 4rpx rgba(255, 255, 255, 0.18);
            }
        }
        &__action {
            padding: 0 0 8rpx;
        }
        &__button {
            width: 330rpx;
            height: 74rpx;
            line-height: 74rpx;
            border: 0;
            border-radius: 999rpx;
            background: linear-gradient(180deg, #2d7fff 0%, #2369f3 100%);
            box-shadow: 0 16rpx 32rpx rgba(35, 105, 243, 0.24);
            font-size: 30rpx;
            font-weight: 600;
            color: #ffffff;
            padding: 0;
            &::after {
                border: 0;
            }
            &--hover {
                opacity: 0.92;
                transform: translateY(2rpx);
            }
        }
    }
</style>
app/pages/index/index.vue
@@ -1,6 +1,313 @@
<template>
    <view style="padding: 40rpx;">
        <button @click="speak('订单已收到,开始播报')">开始播报</button>
    <view class="hall-page">
        <view class="hall-page__header" :style="{ paddingTop: statusBarHeight + 'px' }">
            <view class="hall-page__user-row">
                <view class="hall-page__user">
                    <image class="hall-page__avatar" src="/static/image/login_bg@2x.png" mode="aspectFill"></image>
                    <text class="hall-page__name">汤子新</text>
                </view>
                <view class="hall-page__status">
                    <view class="hall-page__status-dot"></view>
                    <text class="hall-page__status-text">接单中</text>
                    <text class="hall-page__status-arrow">▼</text>
                </view>
                <view class="hall-page__user" style="opacity: 0;">
                    <image class="hall-page__avatar" src="/static/image/login_bg@2x.png" mode="aspectFill"></image>
                    <text class="hall-page__name">汤子新</text>
                </view>
            </view>
            <view class="hall-page__stats">
                <view v-for="item in stats" :key="item.label" class="hall-page__stat-item">
                    <text class="hall-page__stat-value">{{ item.value }}</text>
                    <text class="hall-page__stat-label">{{ item.label }}</text>
                </view>
            </view>
            <view class="hall-page__tabs">
                <view v-for="tab in tabs" :key="tab.value" class="hall-page__tab" :class="{ 'hall-page__tab--active': activeTab === tab.value }" @click="activeTab = tab.value">
                    <text class="hall-page__tab-text">{{ tab.label }}</text>
                    <text v-if="tab.count" class="hall-page__tab-count">{{ tab.count }}</text>
                    <view v-if="activeTab === tab.value" class="hall-page__tab-line"></view>
                </view>
                <view class="hall-page__filter" @click="toggleFilterPopup(true)">
                    <text class="hall-page__filter-text" :class="{ 'hall-page__filter-text--active': showFilterPopup }">筛选</text>
                    <image :src="showFilterPopup ? '/static/image/ic_shaixuan_sel@2x.png' : '/static/image/ic_shaixuan@2x.png'" mode="widthFix" class="hall-page__filter-icon"></image>
                </view>
            </view>
        </view>
        <view v-if="showFilterPopup" class="filter-popup" :style="{ top: headerHeight + 'px', bottom: tabbarHeight + 'px' }" @click="toggleFilterPopup(false)">
            <view class="filter-popup__panel" @click.stop>
                <view v-for="section in filterSections" :key="section.key" class="filter-popup__section">
                    <text class="filter-popup__title">{{ section.title }}</text>
                    <view class="filter-popup__options">
                        <view
                            v-for="option in section.options"
                            :key="option"
                            class="filter-popup__option"
                            :class="{ 'filter-popup__option--active': selectedFilters[section.key] === option }"
                            @click="selectFilter(section.key, option)"
                        >
                            <text class="filter-popup__option-text">{{ option }}</text>
                        </view>
                    </view>
                </view>
                <view class="filter-popup__actions">
                    <button class="filter-popup__button filter-popup__button--reset" hover-class="filter-popup__button--hover" @click="resetFilters">重置</button>
                    <button class="filter-popup__button filter-popup__button--confirm" hover-class="filter-popup__button--hover" @click="confirmFilters">确认</button>
                </view>
            </view>
        </view>
        <scroll-view class="hall-page__body" scroll-y :style="bodyStyle">
            <view v-if="currentOrderList.length" class="hall-page__list">
                <view v-for="item in currentOrderList" :key="item.id" class="order-card" @click="openDetailPopup(item)">
                    <view class="order-card__head">
                        <view class="order-card__time">
                            <text class="order-card__time-main">{{ item.time }}</text>
                            <text class="order-card__time-sub">送达</text>
                        </view>
                        <view v-if="activeTab === 'hall'" class="order-card__price-wrap">
                            <text v-if="item.serialNo" class="order-card__serial">#{{ item.serialNo }}</text>
                            <text class="order-card__price">{{ item.price }}</text>
                        </view>
                        <view v-else class="order-card__price-wrap order-card__price-wrap--serial-only">
                            <text v-if="item.serialNo" class="order-card__serial">#{{ item.serialNo }}</text>
                        </view>
                    </view>
                    <view class="order-card__meta">
                        <view class="order-card__tags">
                            <view v-for="tag in item.tags" :key="tag.text" class="order-card__tag-wrap">
                                <image
                                    v-if="getTagImage(tag.text)"
                                    class="order-card__tag-icon"
                                    :src="getTagImage(tag.text)"
                                    mode="widthFix"
                                ></image>
                                <text v-else class="order-card__tag" :class="tag.type ? 'order-card__tag--' + tag.type : ''">{{ tag.text }}</text>
                            </view>
                        </view>
                        <text v-if="activeTab === 'hall'" class="order-card__extra">含加急¥{{ item.extra }}</text>
                    </view>
                    <view class="order-card__route">
                        <view class="order-card__route-side">
                            <text class="order-card__distance-top">{{ item.distanceTop }}</text>
                            <view class="order-card__line"></view>
                            <text class="order-card__distance-bottom">{{ item.distanceBottom }}</text>
                        </view>
                        <view class="order-card__route-main">
                            <view class="order-card__route-item">
                                <view class="order-card__route-texts">
                                    <text class="order-card__route-title">{{ item.fromName }}</text>
                                    <text class="order-card__route-desc">{{ item.fromAddress }}</text>
                                </view>
                                <image src="/static/image/ic_daohang@2x.png" mode="widthFix" class="order-card__nav"></image>
                            </view>
                            <view class="order-card__route-item order-card__route-item--destination">
                                <view class="order-card__route-texts">
                                    <text class="order-card__route-title">{{ item.toName }}</text>
                                    <text class="order-card__route-desc">{{ item.toAddress }}</text>
                                </view>
                                <image src="/static/image/ic_daohang@2x.png" mode="widthFix" class="order-card__nav"></image>
                            </view>
                        </view>
                    </view>
                    <view class="order-card__goods">
                        <text class="order-card__goods-text">{{ item.goods }}</text>
                        <text class="order-card__goods-arrow">⌄</text>
                    </view>
                    <view class="order-card__actions" :class="'order-card__actions--' + activeTab">
                        <template v-if="activeTab === 'pickup'">
                            <view class="order-card__icon-actions">
                                <view class="order-card__icon-action" @click.stop="show = true">
                                <image class="order-card__action-icon" src="/static/image/ic_cancle@2x.png" mode="aspectFit"></image>
                                    <text class="order-card__action-text">取消</text>
                                </view>
                                <view class="order-card__icon-action" @click.stop>
                                    <image class="order-card__action-icon" src="/static/image/ic_call@2x.png" mode="aspectFit"></image>
                                    <text class="order-card__action-text">联系</text>
                                </view>
                            </view>
                            <button class="order-card__button order-card__button--code" hover-class="order-card__button--hover" @click.stop="show1 = true">取货码</button>
                        </template>
                        <template v-else-if="activeTab === 'delivering'">
                            <view class="order-card__icon-actions order-card__icon-actions--single">
                                <view class="order-card__icon-action" @click.stop>
                                    <image class="order-card__action-icon" src="/static/image/ic_call@2x.png" mode="aspectFit"></image>
                                    <text class="order-card__action-text">联系</text>
                                </view>
                            </view>
                            <button class="order-card__button order-card__button--code" hover-class="order-card__button--hover" @click.stop>存件码</button>
                        </template>
                        <button v-else class="order-card__button" hover-class="order-card__button--hover" @click.stop="openDetailPopup(item)">立即抢单</button>
                    </view>
                </view>
            </view>
            <view v-else class="hall-page__empty">
                <image class="hall-page__empty-icon" src="/static/image/default_nodata_grey@2x.png" mode="aspectFit"></image>
            </view>
        </scroll-view>
        <!-- å–消订单 -->
        <u-modal
            :show="show"
            showCancelButton
            @cancel="show = false"
            cancelColor="#666666"
            confirmColor="#0055FF"
            title="取消订单确认">
            <view style="text-align: center;color: #333333;font-size: 28rpx;font-weight: 400;">
                æ‚¨ä»Šæ—¥è¿˜å¯å–消 X æ¬¡è®¢å•,次数用尽后今日将无法接单,是否确认取消?
            </view>
        </u-modal>
        <!-- å–货码 -->
        <u-popup :show="show1" round="20" mode="bottom">
            <view class="qrcode">
                <view class="qrcode-title">
                    <image src="/static/image/ic_close@2x.png" mode="widthFix" style="opacity: 0;"></image>
                    <text>取货码</text>
                    <image src="/static/image/ic_close@2x.png" mode="widthFix" @click="show1 = false"></image>
                </view>
                <view class="qrcode-image">
                    <image src="/static/logo.png" mode="widthFix"></image>
                </view>
                <view class="qrcode-btn" hover-class="qrcode-btn--hover" @click="show1 = false">关闭</view>
            </view>
        </u-popup>
        <!-- è®¢å•详情 -->
        <u-popup :show="showOrderDetail" round="20" mode="bottom" :overlayStyle="{ background: 'rgba(0, 0, 0, 0.32)' }" @close="showOrderDetail = false">
            <view class="order-detail" :style="{ height: 'calc(100vh - ' + statusBarHeight + 'px)' }">
                <scroll-view class="order-detail__scroll" scroll-y>
                    <view v-if="isStatusDetail" class="order-detail__map-section">
                        <view class="order-detail__map">
                            <image class="order-detail__map-image" mode="aspectFill"></image>
                            <view class="order-detail__map-bubble">{{ detailOrder.mapTips }}</view>
                        </view>
                        <view class="order-detail__status-bar">
                            <view class="order-detail__status-left">
                                <image class="order-detail__status-icon" mode="aspectFit"></image>
                                <text class="order-detail__status-name">{{ detailOrder.statusText }}</text>
                            </view>
                            <view class="order-detail__status-right">
                                <text v-if="detailOrder.showCancelTag" class="order-detail__cancel-tag">取消订单</text>
                                <text class="order-detail__status-no">#{{ detailOrder.serialNo }}</text>
                            </view>
                        </view>
                    </view>
                    <view class="order-detail__content">
                        <view class="order-detail__head">
                            <view class="order-detail__time-wrap">
                                <text class="order-detail__time">{{ detailOrder.time }}</text>
                                <text class="order-detail__time-sub">送达</text>
                            </view>
                            <view class="order-detail__price-wrap">
                                <text class="order-detail__price">{{ detailOrder.price }}</text>
                                <text class="order-detail__extra">含加急¥{{ detailOrder.extra }}</text>
                            </view>
                        </view>
                        <view v-if="isStatusDetail" class="order-detail__qrcode-section">
                            <view class="order-detail__qrcode-box">
                                <image class="order-detail__qrcode-image" src="/static/logo.png" mode="aspectFit"></image>
                            </view>
                            <text class="order-detail__qrcode-value">{{ detailOrder.qrcodeValue }}</text>
                            <text class="order-detail__qrcode-label">{{ detailOrder.qrcodeLabel }}</text>
                        </view>
                        <view class="order-detail__tags">
                            <view v-for="tag in detailOrder.tags" :key="tag.text" class="order-detail__tag-wrap">
                                <image
                                    v-if="getTagImage(tag.text)"
                                    class="order-detail__tag-icon"
                                    :src="getTagImage(tag.text)"
                                    mode="widthFix"
                                ></image>
                                <text v-else class="order-detail__tag" :class="tag.type ? 'order-detail__tag--' + tag.type : ''">{{ tag.text }}</text>
                            </view>
                        </view>
                        <view class="order-detail__route">
                            <view class="order-detail__route-side">
                                <text class="order-detail__distance-top">{{ detailOrder.distanceTop }}</text>
                                <view class="order-detail__line"></view>
                                <text class="order-detail__distance-bottom">{{ detailOrder.distanceBottom }}</text>
                            </view>
                            <view class="order-detail__route-main">
                                <view class="order-detail__route-item">
                                    <view class="order-detail__route-texts">
                                        <text class="order-detail__route-title">{{ detailOrder.fromName }}</text>
                                        <text class="order-detail__route-desc">{{ detailOrder.fromAddress }}</text>
                                    </view>
                                    <view class="order-detail__route-actions">
                                        <image class="order-detail__route-icon" src="/static/image/ic_c1all@2x.png" mode="aspectFit"></image>
                                        <image class="order-detail__route-icon" src="/static/image/ic_daohang@2x.png" mode="aspectFit"></image>
                                    </view>
                                </view>
                                <view class="order-detail__route-item order-detail__route-item--destination">
                                    <view class="order-detail__route-texts">
                                        <text class="order-detail__route-title">{{ detailOrder.toName }}</text>
                                        <text class="order-detail__route-desc">{{ detailOrder.toAddress }}</text>
                                    </view>
                                    <view class="order-detail__route-actions">
                                        <image class="order-detail__route-icon order-detail__route-icon--phone" src="/static/image/ic_c1all@2x.png" mode="aspectFit"></image>
                                        <image class="order-detail__route-icon" src="/static/image/ic_daohang@2x.png" mode="aspectFit"></image>
                                    </view>
                                </view>
                            </view>
                        </view>
                        <view class="order-detail__section">
                            <text class="order-detail__section-title">客户信息</text>
                            <view class="order-detail__customer">
                                <text class="order-detail__customer-text">{{ detailOrder.customer.name }}(手机号{{ detailOrder.customer.phone }})</text>
                                <image class="order-detail__customer-icon" src="/static/image/ic_c1all@2x.png" mode="aspectFit"></image>
                            </view>
                        </view>
                        <view class="order-detail__section">
                            <text class="order-detail__section-title">物品清单(共{{ detailOrder.goodsList.length }}件)</text>
                            <view class="order-detail__goods-list">
                                <view v-for="goods in detailOrder.goodsList" :key="goods.name" class="order-detail__goods-item">
                                    <text class="order-detail__goods-name">{{ goods.name }}</text>
                                    <text class="order-detail__goods-count">x{{ goods.count }}</text>
                                </view>
                            </view>
                        </view>
                        <view class="order-detail__section order-detail__section--photos">
                            <text class="order-detail__section-title">物品信息</text>
                            <text class="order-detail__goods-category">{{ detailOrder.goodsCategory }}</text>
                            <view class="order-detail__photos">
                                <view v-for="(photo, index) in detailOrder.photos" :key="index" class="order-detail__photo-item">
                                    <image class="order-detail__photo" :src="photo" mode="aspectFill"></image>
                                </view>
                            </view>
                        </view>
                    </view>
                </scroll-view>
                <view class="order-detail__footer">
                    <view class="order-detail__cancel" @click="showOrderDetail = false">
                        <image class="order-detail__cancel-icon" src="/static/image/ic_close2@2x.png" mode="aspectFit"></image>
                    </view>
                    <button v-if="!isStatusDetail" class="order-detail__confirm" hover-class="order-detail__confirm--hover">确认抢单</button>
                    <button v-else class="order-detail__confirm order-detail__confirm--status" hover-class="order-detail__confirm--hover">
                        <image class="order-detail__confirm-icon" mode="aspectFit"></image>
                        <text>{{ detailPopupType === 'pickup' ? '拍照取货' : '拍照送达' }}</text>
                    </button>
                </view>
            </view>
        </u-popup>
    </view>
</template>
@@ -8,7 +315,206 @@
    export default {
        data() {
            return {
                tts: null // åŽŸç”ŸTTS对象
                tts: null,
                show: false,
                show1: false,
                showOrderDetail: false,
                detailPopupType: 'hall',
                statusBarHeight: 0,
                headerHeight: 0,
                tabbarHeight: 0,
                scrollHeight: 0,
                showFilterPopup: false,
                activeTab: 'hall',
                filterSections: [
                    { key: 'sort', title: '排序', options: ['综合排序', '离我最近'] },
                    { key: 'level', title: '物品等级', options: ['不限', '普通物品', '贵重物品', '大件物品', '特殊物品', '其他物品'] },
                    { key: 'distance', title: '位置范围', options: ['不限', '500m', '1km', '2km', '3km', '4km', '5km', '6km', '7km'] }
                ],
                selectedFilters: {
                    sort: '综合排序',
                    level: '不限',
                    distance: '不限'
                },
                detailOrder: {
                    time: '45分钟内',
                    price: 'Â¥20.5',
                    extra: '3.0',
                    serialNo: 1,
                    statusText: '抢单大厅',
                    qrcodeValue: '767889',
                    qrcodeLabel: '取货码',
                    mapTips: '剩余3.2km,约4分钟',
                    showCancelTag: false,
                    tags: [
                        { text: '标速达', type: 'blue' },
                        { text: '贵重物品', type: 'orange' }
                    ],
                    distanceTop: '349m',
                    distanceBottom: '12.5km',
                    fromName: '中铁快运南站旗舰店',
                    fromAddress: '莲花路200号莲花产业园F栋401',
                    toName: '佳苑巴黎都市3期10栋301室',
                    toAddress: '洞庭湖路与湖北路交叉口西150ç±³',
                    customer: {
                        name: '刘先生',
                        phone: '2878'
                    },
                    goodsList: [
                        { name: '大件行李', count: 1 },
                        { name: '中件行李', count: 2 },
                        { name: '小件行李', count: 3 },
                        { name: '背包', count: 2 }
                    ],
                    goodsCategory: '文件',
                    photos: ['/static/logo.png', '/static/logo.png', '/static/logo.png']
                },
                stats: [
                    { value: '4.2', label: '服务分' },
                    { value: '234.3', label: '今日预计佣金' },
                    { value: '13', label: '今日接单' }
                ],
                tabs: [
                    { label: '抢单大厅', value: 'hall' },
                    { label: '待取货', value: 'pickup', count: 2 },
                    { label: '配送中', value: 'delivering', count: 2 }
                ],
                orderList: [
                    {
                        id: 1,
                        time: '45分钟内',
                        price: 'Â¥20.5',
                        extra: '3.0',
                        tags: [
                            { text: '极速达', type: 'blue' },
                            { text: '贵重物品', type: 'orange' }
                        ],
                        distanceTop: '349m',
                        distanceBottom: '12.5km',
                        fromName: '中铁快运南站旗舰店',
                        fromAddress: '莲花路200号莲花产业园F栋401',
                        toName: '佳苑巴黎都市3期10栋301室',
                        toAddress: '洞庭湖路与湖北路交叉口西150ç±³',
                        goods: '大件行李*1、中件行李*2、小件行李*3、背包*1'
                    },
                    {
                        id: 2,
                        time: '45分钟内',
                        price: 'Â¥20.5',
                        extra: '3.0',
                        tags: [
                            { text: '极速达', type: 'red' },
                            { text: '大件物品', type: 'blue-light' }
                        ],
                        distanceTop: '349m',
                        distanceBottom: '12.5km',
                        fromName: '中铁快运南站旗舰店(合肥南站北广场',
                        fromAddress: '莲花路200号莲花产业园F栋401',
                        toName: '佳苑巴黎都市3期10栋301室',
                        toAddress: '洞庭湖路与湖北路交叉口西150ç±³',
                        goods: '大件行李*1'
                    },
                    {
                        id: 3,
                        time: '45分钟内',
                        price: 'Â¥20.5',
                        extra: '3.0',
                        tags: [
                            { text: '极速达', type: 'red' },
                            { text: '大件物品', type: 'blue-light' }
                        ],
                        distanceTop: '349m',
                        distanceBottom: '12.5km',
                        fromName: '中铁快运南站旗舰店(合肥南站北广场',
                        fromAddress: '莲花路200号莲花产业园F栋401',
                        toName: '佳苑巴黎都市3期10栋301室',
                        toAddress: '洞庭湖路与湖北路交叉口西150ç±³',
                        goods: '大件行李*1'
                    }
                ],
                pickupOrderList: [
                    {
                        id: 101,
                        serialNo: 1,
                        statusText: '待取货',
                        qrcodeValue: '767889',
                        qrcodeLabel: '取货码',
                        mapTips: '剩余3.2km,约4分钟',
                        showCancelTag: true,
                        time: '45分钟内',
                        price: 'Â¥20.5',
                        extra: '3.0',
                        tags: [
                            { text: '标速达', type: 'blue' },
                            { text: '贵重物品', type: 'orange' }
                        ],
                        distanceTop: '349m',
                        distanceBottom: '12.5km',
                        fromName: '中铁快运南站旗舰店',
                        fromAddress: '莲花路200号莲花产业园F栋401',
                        toName: '小铁无忧存',
                        toAddress: '洞庭湖路与湖北路交叉口西150ç±³',
                        goods: '大件行李*1、中件行李*2、小件行李*3、背包*1'
                    }
                ],
                deliveringOrderList: [
                    {
                        id: 201,
                        serialNo: 1,
                        statusText: '配送中',
                        qrcodeValue: '767889',
                        qrcodeLabel: '存件码',
                        mapTips: '剩余3.2km,约4分钟',
                        showCancelTag: false,
                        time: '45分钟内',
                        price: 'Â¥20.5',
                        extra: '3.0',
                        tags: [
                            { text: '标速达', type: 'blue' },
                            { text: '贵重物品', type: 'orange' }
                        ],
                        distanceTop: '349m',
                        distanceBottom: '12.5km',
                        fromName: '中铁快运南站旗舰店',
                        fromAddress: '莲花路200号莲花产业园F栋401',
                        toName: '小铁无忧存',
                        toAddress: '洞庭湖路与湖北路交叉口西150ç±³',
                        goods: '大件行李*1、中件行李*2、小件行李*3、背包*1'
                    }
                ]
            }
        },
        onLoad() {
            const systemInfo = uni.getSystemInfoSync()
            const safeBottom = systemInfo.safeAreaInsets ? systemInfo.safeAreaInsets.bottom || 0 : 0
            const windowHeight = systemInfo.windowHeight || 0
            this.statusBarHeight = systemInfo.statusBarHeight || 0
            this.headerHeight = this.statusBarHeight + uni.upx2px(308)
            this.tabbarHeight = uni.upx2px(100) + safeBottom
            this.scrollHeight = Math.max(windowHeight - this.headerHeight, 0)
        },
        computed: {
            isStatusDetail() {
                return this.detailPopupType === 'pickup' || this.detailPopupType === 'delivering'
            },
            currentOrderList() {
                const orderMap = {
                    hall: this.orderList,
                    pickup: this.pickupOrderList,
                    delivering: this.deliveringOrderList
                }
                return orderMap[this.activeTab] || []
            },
            bodyStyle() {
                return {
                    marginTop: this.headerHeight + 'px',
                    height: this.scrollHeight + 'px'
                }
            }
        },
@@ -17,7 +523,51 @@
        },
        methods: {
            // ========== åˆå§‹åŒ–安卓原生语音 ==========
            openDetailPopup(item) {
                this.detailPopupType = this.activeTab
                this.detailOrder = {
                    ...this.detailOrder,
                    ...item,
                    customer: item.customer || this.detailOrder.customer,
                    goodsList: item.goodsList || this.detailOrder.goodsList,
                    goodsCategory: item.goodsCategory || this.detailOrder.goodsCategory,
                    photos: item.photos || this.detailOrder.photos
                }
                this.showOrderDetail = true
            },
            toggleFilterPopup(show) {
                this.showFilterPopup = show
            },
            selectFilter(key, option) {
                this.selectedFilters = {
                    ...this.selectedFilters,
                    [key]: option
                }
            },
            resetFilters() {
                this.selectedFilters = {
                    sort: '综合排序',
                    level: '不限',
                    distance: '不限'
                }
            },
            confirmFilters() {
                this.showFilterPopup = false
            },
            getTagImage(tagText) {
                const tagImageMap = {
                    '极速达': '/static/image/ic_jisuda@2x.png',
                    '标速达': '/static/image/ic_biaosuda@2x.png'
                }
                return tagImageMap[tagText] || ''
            },
            initTTS() {
                if (uni.getSystemInfoSync().platform !== 'android') {
                    console.log('仅支持安卓')
@@ -44,7 +594,6 @@
                }
            },
            // ========== è¯­éŸ³æ’­æŠ¥ï¼ˆæ ¸å¿ƒæ–¹æ³•) ==========
            speak(text) {
                if (!this.tts) {
                    uni.showToast({
@@ -62,13 +611,11 @@
                }
            },
            // åœæ­¢æ’­æŠ¥
            stopSpeak() {
                if (this.tts) this.tts.stop()
            }
        },
        // é¡µé¢é”€æ¯æ—¶å…³é—­è¯­éŸ³
        onUnload() {
            if (this.tts) {
                this.tts.stop()
@@ -76,4 +623,1072 @@
            }
        }
    }
</script>
</script>
<style lang="scss" scoped>
    .hall-page {
        position: relative;
        height: 100vh;
        background: #f5f6f8;
        overflow: hidden;
        .qrcode {
            padding: 36rpx 30rpx;
            box-sizing: border-box;
            .qrcode-title {
                width: 100%;
                display: flex;
                align-items: center;
                justify-content: space-between;
                image {
                    width: 28rpx;
                    height: 28rpx;
                }
                text {
                    font-weight: 600;
                    font-size: 32rpx;
                    color: #111111;
                }
            }
            .qrcode-image {
                width: 100%;
                display: flex;
                align-items: center;
                justify-content: center;
                margin-top: 60rpx;
                image {
                    width: 400rpx;
                    height: 400rpx;
                }
            }
            .qrcode-btn {
                width: 100%;
                height: 88rpx;
                line-height: 88rpx;
                text-align: center;
                background: #106EFA;
                border-radius: 50rpx;
                font-weight: bold;
                font-size: 32rpx;
                color: #FFFFFF;
                margin-top: 68rpx;
                &--hover {
                    opacity: 0.92;
                    transform: translateY(2rpx);
                }
            }
        }
        .order-detail {
            display: flex;
            flex-direction: column;
            background: #ffffff;
            border-top-left-radius: 28rpx;
            border-top-right-radius: 28rpx;
            overflow: hidden;
            &__scroll {
                flex: 1;
                min-height: 0;
            }
            &__map-section {
                background: #ffffff;
            }
            &__map {
                position: relative;
                height: 330rpx;
                background: linear-gradient(180deg, #eef5ff 0%, #dbe9ff 100%);
                overflow: hidden;
            }
            &__map-image {
                width: 100%;
                height: 100%;
                opacity: 0.2;
            }
            &__map-bubble {
                position: absolute;
                left: 26rpx;
                bottom: 44rpx;
                padding: 12rpx 18rpx;
                border-radius: 12rpx;
                background: rgba(255, 255, 255, 0.96);
                box-shadow: 0 10rpx 20rpx rgba(33, 92, 182, 0.08);
                font-size: 26rpx;
                font-weight: 500;
                color: #2f6ff2;
            }
            &__status-bar {
                display: flex;
                justify-content: space-between;
                align-items: center;
                padding: 0 24rpx;
                height: 92rpx;
                background: #d9e8ff;
            }
            &__status-left,
            &__status-right {
                display: flex;
                align-items: center;
            }
            &__status-icon {
                width: 28rpx;
                height: 28rpx;
                margin-right: 12rpx;
                border-radius: 6rpx;
                background: #7ea7ef;
            }
            &__status-name,
            &__status-no {
                font-size: 34rpx;
                font-weight: 700;
                color: #2b3139;
            }
            &__cancel-tag {
                padding: 8rpx 16rpx;
                margin-right: 18rpx;
                border: 2rpx solid #6ea6ff;
                border-radius: 999rpx;
                font-size: 24rpx;
                color: #1d73ff;
                background: rgba(255, 255, 255, 0.72);
            }
            &__content {
                padding: 28rpx 24rpx 36rpx;
            }
            &__head {
                display: flex;
                justify-content: space-between;
                align-items: flex-start;
            }
            &__time-wrap {
                display: flex;
                align-items: center;
            }
            &__time {
                font-size: 42rpx;
                font-weight: 700;
                color: #ff8d27;
            }
            &__time-sub {
                margin-left: 8rpx;
                font-size: 28rpx;
                color: #a4a9b2;
            }
            &__price-wrap {
                display: flex;
                flex-direction: column;
                align-items: flex-end;
            }
            &__price {
                font-size: 44rpx;
                font-weight: 700;
                color: #ff3b30;
            }
            &__extra {
                margin-top: 6rpx;
                font-size: 24rpx;
                color: #a0a5af;
            }
            &__tags {
                display: flex;
                align-items: center;
                flex-wrap: wrap;
                gap: 10rpx;
                margin-top: 14rpx;
            }
            &__tag-wrap {
                display: flex;
                align-items: center;
            }
            &__tag-icon {
                width: 108rpx;
                height: 40rpx;
            }
            &__tag {
                padding: 4rpx 10rpx;
                border-radius: 8rpx;
                font-size: 22rpx;
                line-height: 1.2;
                border: 1rpx solid #2473f5;
                color: #2473f5;
                &--orange {
                    border-color: #ff9c45;
                    background: #ff9c45;
                    color: #ffffff;
                }
            }
            &__route {
                display: flex;
                margin-top: 20rpx;
                padding-bottom: 26rpx;
                border-bottom: 1rpx solid #edf0f3;
            }
            &__route-side {
                width: 64rpx;
                display: flex;
                flex-direction: column;
                align-items: center;
                flex-shrink: 0;
            }
            &__distance-top,
            &__distance-bottom {
                font-size: 22rpx;
                font-weight: 600;
                color: #555b66;
                text-align: center;
            }
            &__line {
                position: relative;
                width: 4rpx;
                flex: 1;
                min-height: 92rpx;
                margin: 10rpx 0;
                border-radius: 999rpx;
                background: #d8dbe1;
                &::before,
                &::after {
                    content: '';
                    position: absolute;
                    left: 50%;
                    transform: translateX(-50%);
                    width: 14rpx;
                    height: 14rpx;
                    border-radius: 50%;
                    background: #6a6f79;
                }
                &::before {
                    top: -4rpx;
                }
                &::after {
                    bottom: -4rpx;
                }
            }
            &__route-main {
                flex: 1;
            }
            &__route-item {
                display: flex;
                justify-content: space-between;
                align-items: flex-start;
                gap: 18rpx;
                &--destination {
                    margin-top: 24rpx;
                }
            }
            &__route-texts {
                flex: 1;
                min-width: 0;
            }
            &__route-title {
                display: block;
                font-size: 40rpx;
                font-weight: 700;
                color: #2d3139;
                line-height: 1.3;
            }
            &__route-desc {
                display: block;
                margin-top: 8rpx;
                font-size: 28rpx;
                color: #9ea4ae;
                line-height: 1.4;
            }
            &__route-actions {
                display: flex;
                align-items: center;
                gap: 12rpx;
                flex-shrink: 0;
            }
            &__route-icon,
            &__customer-icon {
                width: 48rpx;
                height: 48rpx;
                border: 2rpx dashed #c9ced6;
                border-radius: 8rpx;
                background: #f7f8fa;
            }
            &__cancel-icon {
                width: 40rpx;
                height: 40rpx;
            }
            &__qrcode-section {
                display: flex;
                flex-direction: column;
                align-items: center;
                padding: 34rpx 0 8rpx;
                border-bottom: 1rpx solid #edf0f3;
            }
            &__qrcode-box {
                width: 260rpx;
                height: 260rpx;
                padding: 16rpx;
                border: 2rpx solid #edf0f3;
                border-radius: 12rpx;
                box-sizing: border-box;
            }
            &__qrcode-image {
                width: 100%;
                height: 100%;
            }
            &__qrcode-value {
                margin-top: 18rpx;
                font-size: 44rpx;
                font-weight: 700;
                color: #31363f;
            }
            &__qrcode-label {
                margin-top: 8rpx;
                font-size: 26rpx;
                color: #b0b4bc;
            }
            &__section {
                padding: 28rpx 0;
                border-bottom: 1rpx solid #edf0f3;
                &--photos {
                    border-bottom: 0;
                }
            }
            &__section-title {
                display: block;
                font-size: 32rpx;
                font-weight: 700;
                color: #2b3139;
            }
            &__customer {
                margin-top: 28rpx;
                display: flex;
                justify-content: space-between;
                align-items: center;
                gap: 20rpx;
            }
            &__customer-text {
                flex: 1;
                font-size: 32rpx;
                color: #41464f;
                line-height: 1.5;
            }
            &__goods-list {
                margin-top: 22rpx;
            }
            &__goods-item {
                display: flex;
                justify-content: space-between;
                align-items: center;
                padding: 10rpx 0;
            }
            &__goods-name {
                font-size: 32rpx;
                color: #41464f;
            }
            &__goods-count {
                font-size: 30rpx;
                color: #a1a6af;
            }
            &__goods-category {
                display: block;
                margin-top: 24rpx;
                font-size: 32rpx;
                color: #41464f;
            }
            &__photos {
                display: flex;
                gap: 16rpx;
                margin-top: 22rpx;
            }
            &__photo-item {
                width: 120rpx;
                height: 120rpx;
                border-radius: 12rpx;
                overflow: hidden;
                background: #f3f5f8;
            }
            &__photo {
                width: 100%;
                height: 100%;
            }
            &__footer {
                display: flex;
                align-items: center;
                gap: 18rpx;
                padding: 18rpx 24rpx calc(env(safe-area-inset-bottom) + 18rpx);
                background: #ffffff;
                box-shadow: 0 -8rpx 24rpx rgba(16, 27, 49, 0.04);
            }
            &__cancel {
                width: 176rpx;
                height: 100rpx;
                border-radius: 50rpx;
                background: #E5E5E5;
                display: flex;
                justify-content: center;
                align-items: center;
                flex-shrink: 0;
            }
            &__confirm {
                flex: 1;
                display: flex;
                justify-content: center;
                align-items: center;
                gap: 14rpx;
                height: 100rpx;
                line-height: 100rpx;
                border-radius: 50rpx;
                background: #106EFA;
                font-size: 36rpx;
                font-weight: 600;
                color: #ffffff;
                border: 0;
                padding: 0;
                &::after {
                    border: 0;
                }
                &--hover {
                    opacity: 0.92;
                }
            }
            &__confirm-icon {
                width: 32rpx;
                height: 32rpx;
                flex-shrink: 0;
            }
        }
        &__header {
            position: fixed;
            left: 0;
            top: 0;
            right: 0;
            z-index: 10;
            background: linear-gradient(180deg, #2473f5 0%, #1e6fef 100%);
            box-shadow: 0 12rpx 24rpx rgba(36, 115, 245, 0.08);
        }
        &__user-row {
            display: flex;
            justify-content: space-between;
            align-items: center;
            padding: 20rpx 24rpx 0;
        }
        &__user {
            display: flex;
            align-items: center;
            gap: 14rpx;
        }
        &__avatar {
            width: 42rpx;
            height: 42rpx;
            border-radius: 50%;
            border: 2rpx solid rgba(255, 255, 255, 0.7);
        }
        &__name {
            font-size: 28rpx;
            font-weight: 500;
            color: #ffffff;
        }
        &__status {
            display: flex;
            align-items: center;
            padding: 10rpx 16rpx;
            border-radius: 999rpx;
            background: rgba(255, 255, 255, 0.16);
            backdrop-filter: blur(10rpx);
        }
        &__status-dot {
            width: 14rpx;
            height: 14rpx;
            border-radius: 50%;
            background: #32d74b;
            margin-right: 10rpx;
        }
        &__status-text,
        &__status-arrow {
            font-size: 24rpx;
            color: #ffffff;
        }
        &__status-arrow {
            font-size: 18rpx;
            margin-left: 8rpx;
        }
        &__stats {
            display: flex;
            justify-content: space-between;
            padding: 34rpx 36rpx 28rpx;
        }
        &__stat-item {
            display: flex;
            flex-direction: column;
            align-items: center;
            min-width: 160rpx;
        }
        &__stat-value {
            font-size: 52rpx;
            line-height: 1;
            font-weight: 700;
            color: #ffffff;
        }
        &__stat-label {
            margin-top: 12rpx;
            font-size: 26rpx;
            color: rgba(255, 255, 255, 0.86);
        }
        &__tabs {
            display: flex;
            align-items: center;
            height: 88rpx;
            padding: 0 18rpx;
            background: #ffffff;
        }
        &__tab {
            position: relative;
            display: flex;
            align-items: center;
            justify-content: center;
            height: 100%;
            padding: 0 18rpx;
            font-size: 32rpx;
            color: #8b9099;
        }
        &__tab--active {
            color: #242933;
            font-weight: 700;
        }
        &__tab-text {
            font-size: inherit;
            color: inherit;
        }
        &__tab-count {
            margin-left: 6rpx;
            font-size: 28rpx;
            color: #8b9099;
        }
        &__tab-line {
            position: absolute;
            left: 18rpx;
            right: 18rpx;
            bottom: 0;
            height: 5rpx;
            border-radius: 999rpx;
            background: #2473f5;
        }
        &__filter {
            margin-left: auto;
            display: flex;
            align-items: center;
            gap: 6rpx;
            padding-right: 10rpx;
        }
        &__filter-text {
            font-size: 28rpx;
            color: #9aa1ab;
            &--active {
                color: #106efa;
            }
        }
        &__filter-icon {
            width: 28rpx;
            height: 28rpx;
        }
        &__body {
            box-sizing: border-box;
            background-color: #F6F9FF;
        }
        &__list {
            padding: 22rpx 30rpx calc(22rpx + env(safe-area-inset-bottom)) 30rpx;
        }
        &__empty {
            display: flex;
            justify-content: center;
            align-items: center;
            height: 100%;
            padding-bottom: env(safe-area-inset-bottom);
            box-sizing: border-box;
        }
        &__empty-icon {
            width: 320rpx;
            height: 320rpx;
        }
    }
    .filter-popup {
        position: fixed;
        left: 0;
        right: 0;
        z-index: 20;
        background: rgba(0, 0, 0, 0.24);
        &__panel {
            height: 100%;
            padding: 22rpx 0 26rpx;
            background: #ffffff;
            border-bottom-left-radius: 28rpx;
            border-bottom-right-radius: 28rpx;
            box-sizing: border-box;
            overflow-y: auto;
        }
        &__section {
            padding: 0 18rpx;
            margin-bottom: 28rpx;
        }
        &__title {
            display: block;
            margin-bottom: 20rpx;
            font-size: 28rpx;
            font-weight: 700;
            color: #252b33;
        }
        &__options {
            display: flex;
            flex-wrap: wrap;
            gap: 18rpx 20rpx;
        }
        &__option {
            display: flex;
            justify-content: center;
            align-items: center;
            width: 226rpx;
            height: 74rpx;
            border-radius: 10rpx;
            background: #f5f5f5;
            border: 2rpx solid transparent;
            box-sizing: border-box;
            &--active {
                background: #edf5ff;
                border-color: #3d8cff;
            }
        }
        &__option-text {
            font-size: 28rpx;
            color: #4b515a;
            .filter-popup__option--active & {
                font-weight: 600;
                color: #2678ff;
            }
        }
        &__actions {
            display: flex;
            gap: 24rpx;
            padding: 8rpx 18rpx 0;
        }
        &__button {
            flex: 1;
            height: 92rpx;
            line-height: 92rpx;
            border-radius: 999rpx;
            font-size: 34rpx;
            font-weight: 700;
            border: 0;
            padding: 0;
            &::after {
                border: 0;
            }
            &--reset {
                background: #ebebeb;
                color: #777d86;
            }
            &--confirm {
                background: linear-gradient(180deg, #2d82ff 0%, #206ef6 100%);
                color: #ffffff;
            }
            &--hover {
                opacity: 0.92;
            }
        }
    }
    .order-card {
        margin-bottom: 20rpx;
        padding: 20rpx;
        border-radius: 24rpx;
        background: #ffffff;
        box-shadow: 0 10rpx 24rpx rgba(26, 44, 81, 0.04);
        &__head {
            display: flex;
            justify-content: space-between;
            align-items: flex-start;
        }
        &__time-main {
            font-size: 42rpx;
            font-weight: 700;
            color: #ff8d27;
        }
        &__time-sub {
            margin-left: 8rpx;
            font-size: 28rpx;
            color: #a3a8b2;
        }
        &__price-wrap {
            display: flex;
            flex-direction: column;
            align-items: center;
            gap: 8rpx;
            &--serial-only {
                justify-content: flex-start;
                min-width: 54rpx;
            }
        }
        &__serial {
            font-size: 38rpx;
            font-weight: 700;
            line-height: 1;
            color: #2c3139;
        }
        &__price {
            font-size: 44rpx;
            font-weight: 700;
            color: #ff3b30;
        }
        &__meta {
            display: flex;
            justify-content: space-between;
            align-items: center;
            gap: 16rpx;
            margin-top: 12rpx;
        }
        &__extra {
            flex-shrink: 0;
            font-size: 24rpx;
            color: #a0a5af;
        }
        &__tags {
            display: flex;
            flex: 1;
            flex-wrap: wrap;
            gap: 10rpx;
        }
        &__tag-wrap {
            display: flex;
            align-items: center;
        }
        &__tag-icon {
            width: 108rpx;
            height: 40rpx;
        }
        &__tag {
            padding: 4rpx 10rpx;
            border-radius: 8rpx;
            font-size: 22rpx;
            line-height: 1.2;
            border: 1rpx solid #2473f5;
            color: #2473f5;
            &--orange {
                border-color: #ff9c45;
                background: #ff9c45;
                color: #ffffff;
            }
            &--red {
                border-color: #ff6c57;
                color: #ff6c57;
            }
            &--blue-light {
                border-color: #74a9ff;
                color: #74a9ff;
            }
        }
        &__route {
            display: flex;
            margin-top: 20rpx;
        }
        &__route-side {
            width: 64rpx;
            display: flex;
            flex-direction: column;
            align-items: center;
            flex-shrink: 0;
        }
        &__distance-top,
        &__distance-bottom {
            font-size: 22rpx;
            font-weight: 600;
            color: #555b66;
            text-align: center;
        }
        &__line {
            position: relative;
            width: 4rpx;
            flex: 1;
            min-height: 86rpx;
            margin: 10rpx 0;
            border-radius: 999rpx;
            background: #d8dbe1;
            &::before,
            &::after {
                content: '';
                position: absolute;
                left: 50%;
                transform: translateX(-50%);
                width: 14rpx;
                height: 14rpx;
                border-radius: 50%;
                background: #6a6f79;
            }
            &::before {
                top: -4rpx;
            }
            &::after {
                bottom: -4rpx;
            }
        }
        &__route-main {
            flex: 1;
        }
        &__route-item {
            display: flex;
            justify-content: space-between;
            align-items: flex-start;
            gap: 16rpx;
            &--destination {
                margin-top: 20rpx;
            }
        }
        &__route-texts {
            flex: 1;
            min-width: 0;
        }
        &__route-title {
            display: block;
            font-size: 40rpx;
            font-weight: 700;
            color: #2d3139;
            line-height: 1.3;
        }
        &__route-desc {
            display: block;
            margin-top: 8rpx;
            font-size: 28rpx;
            color: #9ea4ae;
            line-height: 1.4;
        }
        &__nav {
            width: 48rpx;
            height: 48rpx;
            flex-shrink: 0;
        }
        &__goods {
            display: flex;
            justify-content: space-between;
            align-items: center;
            height: 70rpx;
            padding: 0 20rpx;
            margin-top: 20rpx;
            border-radius: 16rpx;
            background: #f4f5f7;
        }
        &__goods-text {
            flex: 1;
            font-size: 28rpx;
            color: #7a818d;
            white-space: nowrap;
            overflow: hidden;
            text-overflow: ellipsis;
        }
        &__goods-arrow {
            margin-left: 12rpx;
            font-size: 24rpx;
            color: #a4a9b1;
        }
        &__button {
            margin-top: 24rpx;
            width: 100%;
            height: 88rpx;
            line-height: 88rpx;
            border-radius: 999rpx;
            background: linear-gradient(180deg, #2b7fff 0%, #1f6ff3 100%);
            font-size: 34rpx;
            font-weight: 700;
            color: #ffffff;
            border: 0;
            padding: 0;
            &::after {
                border: 0;
            }
            &--hover {
                opacity: 0.92;
            }
        }
        &__actions {
            margin-top: 24rpx;
            &--pickup,
            &--delivering {
                display: flex;
                align-items: center;
                gap: 22rpx;
            }
        }
        &__icon-actions {
            display: flex;
            align-items: center;
            gap: 20rpx;
            flex-shrink: 0;
            &--single {
                gap: 0;
            }
        }
        &__icon-action {
            display: flex;
            flex-direction: column;
            align-items: center;
            justify-content: center;
            width: 74rpx;
        }
        &__action-icon {
            width: 40rpx;
            height: 40rpx;
            border-radius: 8rpx;
            background: #f7f8fa;
        }
        &__action-text {
            margin-top: 8rpx;
            font-size: 26rpx;
            line-height: 1;
            color: #5b616b;
        }
        &__button--code {
            flex: 1;
            margin-top: 0;
        }
    }
</style>
app/pages/login/login.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,288 @@
<template>
    <view class="login-page">
        <image class="login-page__bg" src="/static/image/login_bg@2x.png" mode="aspectFill"></image>
        <view></view>
        <view class="login-page__content">
            <view class="login-card">
                <view class="login-card__tabs">
                    <view
                        v-for="item in tabs"
                        :key="item.value"
                        class="login-card__tab"
                        :style="{
                            backgroundImage: returnBackgroundImg(item.value, activeTab === item.value)
                        }"
                        :class="{ 'login-card__tab--active': activeTab === item.value }"
                        @click="activeTab = item.value"
                    >
                        <text class="login-card__tab-text">{{ item.label }}</text>
                        <view v-if="activeTab === item.value" class="login-card__tab-line"></view>
                    </view>
                </view>
                <view class="login-card__form">
                    <view v-if="activeTab === 'account'" class="login-card__group">
                        <view class="login-card__field">
                            <input v-model="form.mobile" class="login-card__input" type="number" placeholder="请输入手机号" placeholder-style="color: #c5cad4;" />
                        </view>
                        <view class="login-card__field">
                            <input v-model="form.password" class="login-card__input" password placeholder="请输入密码" placeholder-style="color: #c5cad4;" />
                        </view>
                    </view>
                    <view v-else class="login-card__group">
                        <view class="login-card__field">
                            <input v-model="form.mobile" class="login-card__input" type="number" placeholder="请输入手机号" placeholder-style="color: #c5cad4;" />
                        </view>
                        <view class="login-card__field login-card__field--code">
                            <input v-model="form.code" class="login-card__input" type="number" placeholder="请输入验证码" placeholder-style="color: #c5cad4;" />
                            <text class="login-card__code-btn">获取验证码</text>
                        </view>
                    </view>
                    <button class="login-card__submit" hover-class="login-card__submit--hover" @click="login">登录</button>
                </view>
                <view class="login-card__agreement">
                    <view class="login-card__agreement-icon"></view>
                    <text class="login-card__agreement-text">登录即代表您同意<text>《用户协议》</text>及<text>《用户隐私政策》</text></text>
                </view>
            </view>
        </view>
    </view>
</template>
<script>
    export default {
        data() {
            return {
                activeTab: 'account',
                tabs: [
                    { label: '账号登录', value: 'account' },
                    { label: '验证码登录', value: 'code' }
                ],
                form: {
                    mobile: '',
                    password: '',
                    code: ''
                }
            };
        },
        methods: {
            returnBackgroundImg(value, active) {
                if (value === 'account' && !active) {
                    return "url('/static/image/login_ic_account@2x.png')"
                } else if (value === 'account' && active) {
                    return "url('/static/image/login_ic_account_sel@2x.png')"
                } else if (value === 'code' && !active) {
                    return "url('/static/image/login_ic_code@2x.png')"
                } else if (value === 'code' && active) {
                    return "url('/static/image/login_ic_code_sel@2x.png')"
                }
            },
            login() {
                uni.switchTab({
                    url: '/pages/index/index'
                })
            }
        }
    };
</script>
<style lang="scss" scoped>
    .login-page {
        position: relative;
        height: 100vh;
        background: linear-gradient(180deg, #cfe6ff 0%, #a7c6ff 100%);
        display: flex;
        flex-direction: column;
        justify-content: space-between;
        &__bg {
            position: absolute;
            left: 0;
            top: 0;
            right: 0;
            bottom: 0;
            width: 100vw;
            height: 100vh;
        }
        &__content {
            position: relative;
            z-index: 1;
            height: 88vh;
            box-sizing: border-box;
            padding: 180rpx 40rpx 20rpx 40rpx;
        }
    }
    .login-card {
        position: relative;
        height: calc(100% - 15rpx);
        box-sizing: border-box;
        border-radius: 40rpx;
        background: rgba(255, 255, 255, 0.95);
        box-shadow: 0 24rpx 70rpx rgba(69, 124, 219, 0.16);
        overflow: hidden;
        &__tabs {
            display: flex;
            align-items: stretch;
            background: rgba(228, 236, 247, 0.8);
        }
        &__tab {
            flex: 1;
            display: flex;
            flex-direction: column;
            align-items: center;
            justify-content: center;
            height: 100rpx;
            border-bottom-left-radius: 28rpx;
            border-bottom-right-radius: 28rpx;
            background-repeat: no-repeat;
            background-size: 100% 100%;
            position: relative;
            &--active {
                flex: 1.3;
                // background: #ffffff;
            }
            .login-card__tab-line {
                position: absolute;
                bottom: 10rpx;
                left: 50%;
                transform: translate(0, -55%);
                width: 36rpx;
                height: 8rpx;
                margin-top: 10rpx;
                border-radius: 999rpx;
                background: #1f74ff;
                z-index: 999;
            }
        }
        &__tab-text {
            font-size: 34rpx;
            font-weight: 400;
            color: #666666;
            .login-card__tab--active & {
                color: #222222;
            }
        }
        &__tab-line {
            width: 36rpx;
            height: 8rpx;
            margin-top: 10rpx;
            border-radius: 999rpx;
            background: #1f74ff;
        }
        &__form {
            padding: 46rpx 36rpx 0;
        }
        &__group {
            display: flex;
            flex-direction: column;
            gap: 26rpx;
        }
        &__field {
            display: flex;
            align-items: center;
            height: 96rpx;
            padding: 0 34rpx;
            border-radius: 48rpx;
            background: #f3f6fb;
            &--code {
                justify-content: space-between;
                gap: 20rpx;
            }
        }
        &__input {
            flex: 1;
            height: 98rpx;
            font-size: 30rpx;
            color: #31343a;
            background: transparent;
        }
        &__code-btn {
            flex-shrink: 0;
            font-size: 26rpx;
            font-weight: 600;
            color: #1f74ff;
        }
        &__submit {
            margin-top: 40rpx;
            width: 100%;
            height: 98rpx;
            line-height: 98rpx;
            border: 0;
            border-radius: 50rpx;
            background: #106EFA;
            font-size: 32rpx;
            font-weight: 600;
            color: #ffffff;
            padding: 0;
            &::after {
                border: 0;
            }
            &--hover {
                opacity: 0.94;
            }
        }
        &__agreement {
            position: absolute;
            left: 36rpx;
            right: 36rpx;
            bottom: calc(env(safe-area-inset-bottom) + 40rpx);
            display: flex;
            align-items: flex-start;
            gap: 10rpx;
        }
        &__agreement-icon {
            position: relative;
            flex-shrink: 0;
            width: 28rpx;
            height: 28rpx;
            margin-top: 8rpx;
            border-radius: 50%;
            background: #1f74ff;
            &::after {
                content: '';
                position: absolute;
                left: 8rpx;
                top: 4rpx;
                width: 9rpx;
                height: 13rpx;
                border-right: 3rpx solid #ffffff;
                border-bottom: 3rpx solid #ffffff;
                transform: rotate(38deg);
            }
        }
        &__agreement-text {
            font-size: 24rpx;
            line-height: 1.6;
            color: #555555;
            text {
                color: #106EFA;
            }
        }
    }
</style>
app/pages/message/message.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
<template>
    <view>
    </view>
</template>
<script>
    export default {
        data() {
            return {
            };
        }
    }
</script>
<style lang="scss">
</style>
app/pages/order/order.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
<template>
    <view>
    </view>
</template>
<script>
    export default {
        data() {
            return {
            };
        }
    }
</script>
<style lang="scss">
</style>
app/static/image/background.png
app/static/image/default_nodata_grey@2x.png
app/static/image/ic_biaosuda@2x.png
app/static/image/ic_c1all@2x.png
app/static/image/ic_call@2x.png
app/static/image/ic_cancle@2x.png
app/static/image/ic_close2@2x.png
app/static/image/ic_close@2x.png
app/static/image/ic_daohang@2x.png
app/static/image/ic_jisuda@2x.png
app/static/image/ic_shaixuan@2x.png
app/static/image/ic_shaixuan_sel@2x.png
app/static/image/login_bg@2x.png
app/static/image/login_ic_account@2x.png
app/static/image/login_ic_account_sel@2x.png
app/static/image/login_ic_code@2x.png
app/static/image/login_ic_code_sel@2x.png
app/static/tabbar/nav_gongdan@2x.png
Binary files differ
app/static/tabbar/nav_gongdan_sel@2x.png
Binary files differ
app/static/tabbar/nav_home_sel@2x.png
app/static/tabbar/nav_home_sel@2x1.png
app/static/tabbar/nav_jiancha@2x.png
Binary files differ
app/static/tabbar/nav_jiancha_sel@2x.png
Binary files differ
app/static/tabbar/nav_mine@2x.png
app/static/tabbar/nav_mine@2x1.png
app/static/tabbar/nav_order@2x.png
app/static/tabbar/nav_order@2x1.png
app/static/tabbar/nav_shangbao@2x.png
Binary files differ
app/static/tabbar/nav_shangbao_sel@2x.png
Binary files differ
app/static/tabbar/nav_tubiao@2x.png
Binary files differ
app/static/tabbar/nav_tubiao_sel@2x.png
Binary files differ
app/static/tabbar/nav_xiaoxi@2x.png
app/static/tabbar/nav_xiaoxi@2x1.png
app/uni_modules/native-tts/android/.gradle/8.9/checksums/checksums.lock
Binary files differ
app/uni_modules/native-tts/android/.gradle/8.9/dependencies-accessors/gc.properties
app/uni_modules/native-tts/android/.gradle/8.9/fileChanges/last-build.bin
Binary files differ
app/uni_modules/native-tts/android/.gradle/8.9/fileHashes/fileHashes.lock
Binary files differ
app/uni_modules/native-tts/android/.gradle/8.9/gc.properties
app/uni_modules/native-tts/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock
Binary files differ
app/uni_modules/native-tts/android/.gradle/buildOutputCleanup/cache.properties
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,2 @@
#Wed Apr 22 17:09:11 CST 2026
gradle.version=8.9
app/uni_modules/native-tts/android/.gradle/vcs-1/gc.properties
app/unpackage/dist/dev/app-plus/app-config-service.js
@@ -1,8 +1,8 @@
var isReady=false;var onReadyCallbacks=[];
var isServiceReady=false;var onServiceReadyCallbacks=[];
var __uniConfig = {"pages":["pages/index/index","pages/mine/mine"],"window":{"navigationBarTextStyle":"black","navigationBarTitleText":"uni-app","navigationBarBackgroundColor":"#F8F8F8","backgroundColor":"#F8F8F8"},"tabBar":{"color":"#999999","selectedColor":"#222222","borderStyle":"black","backgroundColor":"#fff","list":[{"pagePath":"pages/index/index","iconPath":"static/tabbar/nav_jiancha@2x.png","selectedIconPath":"static/tabbar/nav_jiancha_sel@2x.png","text":"首页"},{"pagePath":"pages/mine/mine","iconPath":"static/tabbar/nav_jiancha@2x.png","selectedIconPath":"static/tabbar/nav_jiancha_sel@2x.png","text":"我的"}]},"darkmode":false,"nvueCompiler":"uni-app","nvueStyleCompiler":"uni-app","renderer":"auto","splashscreen":{"alwaysShowBeforeRender":true,"autoclose":false},"appname":"高铁站行李寄存","compilerVersion":"5.06","entryPagePath":"pages/index/index","networkTimeout":{"request":60000,"connectSocket":60000,"uploadFile":60000,"downloadFile":60000}};
var __uniRoutes = [{"path":"/pages/index/index","meta":{"isQuit":true,"isTabBar":true},"window":{"navigationBarTitleText":"首页","navigationBarBackgroundColor":"#ffffff"}},{"path":"/pages/mine/mine","meta":{"isQuit":true,"isTabBar":true},"window":{"navigationBarTitleText":"我的","navigationBarBackgroundColor":"#ffffff"}}];
var __uniConfig = {"pages":["pages/guide-page/guide-page","pages/index/index","pages/mine/mine","pages/order/order","pages/message/message","pages/login/login"],"window":{"navigationBarTextStyle":"black","navigationBarTitleText":"uni-app","navigationBarBackgroundColor":"#F8F8F8","backgroundColor":"#F8F8F8"},"tabBar":{"color":"#999999","selectedColor":"#222222","borderStyle":"black","backgroundColor":"#fff","list":[{"pagePath":"pages/index/index","iconPath":"static/tabbar/nav_home_sel@2x.png","selectedIconPath":"static/tabbar/nav_home_sel@2x1.png","text":"大厅"},{"pagePath":"pages/order/order","iconPath":"static/tabbar/nav_order@2x.png","selectedIconPath":"static/tabbar/nav_order@2x1.png","text":"订单"},{"pagePath":"pages/message/message","iconPath":"static/tabbar/nav_xiaoxi@2x.png","selectedIconPath":"static/tabbar/nav_xiaoxi@2x1.png","text":"消息"},{"pagePath":"pages/mine/mine","iconPath":"static/tabbar/nav_mine@2x.png","selectedIconPath":"static/tabbar/nav_mine@2x1.png","text":"我的"}]},"darkmode":false,"nvueCompiler":"uni-app","nvueStyleCompiler":"uni-app","renderer":"auto","splashscreen":{"alwaysShowBeforeRender":true,"autoclose":false},"appname":"高铁站行李寄存","compilerVersion":"5.07","entryPagePath":"pages/guide-page/guide-page","networkTimeout":{"request":60000,"connectSocket":60000,"uploadFile":60000,"downloadFile":60000}};
var __uniRoutes = [{"path":"/pages/guide-page/guide-page","meta":{"isQuit":true},"window":{"titleNView":false}},{"path":"/pages/index/index","meta":{"isQuit":true,"isTabBar":true},"window":{"navigationStyle":"custom","titleNView":false}},{"path":"/pages/mine/mine","meta":{"isQuit":true,"isTabBar":true},"window":{"navigationBarTitleText":"我的","navigationBarBackgroundColor":"#ffffff"}},{"path":"/pages/order/order","meta":{"isQuit":true,"isTabBar":true},"window":{"navigationBarTitleText":"订单"}},{"path":"/pages/message/message","meta":{"isQuit":true,"isTabBar":true},"window":{"navigationBarTitleText":"消息"}},{"path":"/pages/login/login","meta":{},"window":{"titleNView":false}}];
__uniConfig.onReady=function(callback){if(__uniConfig.ready){callback()}else{onReadyCallbacks.push(callback)}};Object.defineProperty(__uniConfig,"ready",{get:function(){return isReady},set:function(val){isReady=val;if(!isReady){return}const callbacks=onReadyCallbacks.slice(0);onReadyCallbacks.length=0;callbacks.forEach(function(callback){callback()})}});
__uniConfig.onServiceReady=function(callback){if(__uniConfig.serviceReady){callback()}else{onServiceReadyCallbacks.push(callback)}};Object.defineProperty(__uniConfig,"serviceReady",{get:function(){return isServiceReady},set:function(val){isServiceReady=val;if(!isServiceReady){return}const callbacks=onServiceReadyCallbacks.slice(0);onServiceReadyCallbacks.length=0;callbacks.forEach(function(callback){callback()})}});
service.register("uni-app-config",{create(a,b,c){if(!__uniConfig.viewport){var d=b.weex.config.env.scale,e=b.weex.config.env.deviceWidth,f=Math.ceil(e/d);Object.assign(__uniConfig,{viewport:f,defaultFontSize:Math.round(f/20)})}return{instance:{__uniConfig:__uniConfig,__uniRoutes:__uniRoutes,global:void 0,window:void 0,document:void 0,frames:void 0,self:void 0,location:void 0,navigator:void 0,localStorage:void 0,history:void 0,Caches:void 0,screen:void 0,alert:void 0,confirm:void 0,prompt:void 0,fetch:void 0,XMLHttpRequest:void 0,WebSocket:void 0,webkit:void 0,print:void 0}}}});
app/unpackage/dist/dev/app-plus/app-service.js
ÎļþÌ«´ó
app/unpackage/dist/dev/app-plus/app-view.js
ÎļþÌ«´ó
app/unpackage/dist/dev/app-plus/manifest.json
@@ -1 +1 @@
{"@platforms":["android","iPhone","iPad"],"id":"__UNI__965A7DA","name":"高铁站行李寄存","version":{"name":"1.0.0","code":"100"},"description":"","launch_path":"__uniappview.html","developer":{"name":"","email":"","url":""},"permissions":{"Push":{},"UniNView":{"description":"UniNView原生渲染"}},"plus":{"useragent":{"value":"uni-app","concatenate":true},"splashscreen":{"target":"id:1","autoclose":true,"waiting":true,"delay":0},"popGesture":"close","launchwebview":{"id":"1","kernel":"WKWebview"},"statusbar":{"immersed":"supportedDevice","style":"dark","background":"#F8F8F8"},"usingComponents":true,"nvueStyleCompiler":"uni-app","compilerVersion":3,"distribute":{"icons":{"android":{"hdpi":""}},"google":{"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\"/>","<uses-permission android:name=\"android.permission.INTERNET\"/>","<uses-permission android:name=\"android.permission.MODIFY_AUDIO_SETTINGS\"/>"]},"apple":{"dSYMs":false},"plugins":{"push":{"unipush":{"version":"2","offline":true,"honor":{},"meizu":{},"mi":{},"vivo":{},"oppo":{},"hms":{}}},"audio":{"mp3":{"description":"Android平台录音支持MP3格式文件"}}}},"uniStatistics":{"enable":false},"allowsInlineMediaPlayback":true,"safearea":{"background":"#fff","bottom":{"offset":"auto"}},"uni-app":{"compilerVersion":"5.06","control":"uni-v3","nvueCompiler":"uni-app","renderer":"auto","nvue":{"flex-direction":"column"},"nvueLaunchMode":"normal"},"tabBar":{"color":"#999999","selectedColor":"#222222","borderStyle":"rgba(0,0,0,0.4)","backgroundColor":"#fff","list":[{"pagePath":"pages/index/index","iconPath":"static/tabbar/nav_jiancha@2x.png","selectedIconPath":"static/tabbar/nav_jiancha_sel@2x.png","text":"首页"},{"pagePath":"pages/mine/mine","iconPath":"static/tabbar/nav_jiancha@2x.png","selectedIconPath":"static/tabbar/nav_jiancha_sel@2x.png","text":"我的"}],"height":"50px","child":["lauchwebview"],"selected":0},"launch_path":"__uniappview.html"},"locale":"zh-Hans"}
{"@platforms":["android","iPhone","iPad"],"id":"__UNI__965A7DA","name":"高铁站行李寄存","version":{"name":"1.0.0","code":"100"},"description":"","launch_path":"__uniappview.html","developer":{"name":"","email":"","url":""},"permissions":{"Push":{},"UniNView":{"description":"UniNView原生渲染"}},"plus":{"useragent":{"value":"uni-app","concatenate":true},"splashscreen":{"target":"id:1","autoclose":true,"waiting":true,"delay":0},"popGesture":"close","launchwebview":{"id":"1","kernel":"WKWebview"},"statusbar":{"immersed":"supportedDevice","style":"dark","background":"#F8F8F8"},"usingComponents":true,"nvueStyleCompiler":"uni-app","compilerVersion":3,"distribute":{"icons":{"android":{"hdpi":""}},"google":{"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\"/>","<uses-permission android:name=\"android.permission.INTERNET\"/>","<uses-permission android:name=\"android.permission.MODIFY_AUDIO_SETTINGS\"/>"]},"apple":{"dSYMs":false},"plugins":{"push":{"unipush":{"version":"2","offline":true,"honor":{},"meizu":{},"mi":{},"vivo":{},"oppo":{},"hms":{}}},"audio":{"mp3":{"description":"Android平台录音支持MP3格式文件"}}}},"uniStatistics":{"enable":false},"allowsInlineMediaPlayback":true,"safearea":{"background":"#fff","bottom":{"offset":"auto"}},"uni-app":{"compilerVersion":"5.07","control":"uni-v3","nvueCompiler":"uni-app","renderer":"auto","nvue":{"flex-direction":"column"},"nvueLaunchMode":"normal"},"tabBar":{"color":"#999999","selectedColor":"#222222","borderStyle":"rgba(0,0,0,0.4)","backgroundColor":"#fff","list":[{"pagePath":"pages/index/index","iconPath":"static/tabbar/nav_home_sel@2x.png","selectedIconPath":"static/tabbar/nav_home_sel@2x1.png","text":"大厅"},{"pagePath":"pages/order/order","iconPath":"static/tabbar/nav_order@2x.png","selectedIconPath":"static/tabbar/nav_order@2x1.png","text":"订单"},{"pagePath":"pages/message/message","iconPath":"static/tabbar/nav_xiaoxi@2x.png","selectedIconPath":"static/tabbar/nav_xiaoxi@2x1.png","text":"消息"},{"pagePath":"pages/mine/mine","iconPath":"static/tabbar/nav_mine@2x.png","selectedIconPath":"static/tabbar/nav_mine@2x1.png","text":"我的"}],"height":"50px"},"launch_path":"__uniappview.html"},"locale":"zh-Hans"}
app/unpackage/dist/dev/app-plus/static/image/background.png
app/unpackage/dist/dev/app-plus/static/image/default_nodata_grey@2x.png
app/unpackage/dist/dev/app-plus/static/image/ic_biaosuda@2x.png
app/unpackage/dist/dev/app-plus/static/image/ic_c1all@2x.png
app/unpackage/dist/dev/app-plus/static/image/ic_call@2x.png
app/unpackage/dist/dev/app-plus/static/image/ic_cancle@2x.png
app/unpackage/dist/dev/app-plus/static/image/ic_close2@2x.png
app/unpackage/dist/dev/app-plus/static/image/ic_close@2x.png
app/unpackage/dist/dev/app-plus/static/image/ic_daohang@2x.png
app/unpackage/dist/dev/app-plus/static/image/ic_jisuda@2x.png
app/unpackage/dist/dev/app-plus/static/image/ic_shaixuan@2x.png
app/unpackage/dist/dev/app-plus/static/image/ic_shaixuan_sel@2x.png
app/unpackage/dist/dev/app-plus/static/image/login_bg@2x.png
app/unpackage/dist/dev/app-plus/static/image/login_ic_account@2x.png
app/unpackage/dist/dev/app-plus/static/image/login_ic_account_sel@2x.png
app/unpackage/dist/dev/app-plus/static/image/login_ic_code@2x.png
app/unpackage/dist/dev/app-plus/static/image/login_ic_code_sel@2x.png
app/unpackage/dist/dev/app-plus/static/tabbar/nav_gongdan@2x.png
Binary files differ
app/unpackage/dist/dev/app-plus/static/tabbar/nav_gongdan_sel@2x.png
Binary files differ
app/unpackage/dist/dev/app-plus/static/tabbar/nav_home_sel@2x.png
app/unpackage/dist/dev/app-plus/static/tabbar/nav_home_sel@2x1.png
app/unpackage/dist/dev/app-plus/static/tabbar/nav_jiancha@2x.png
Binary files differ
app/unpackage/dist/dev/app-plus/static/tabbar/nav_jiancha_sel@2x.png
Binary files differ
app/unpackage/dist/dev/app-plus/static/tabbar/nav_mine@2x.png
app/unpackage/dist/dev/app-plus/static/tabbar/nav_mine@2x1.png
app/unpackage/dist/dev/app-plus/static/tabbar/nav_order@2x.png
app/unpackage/dist/dev/app-plus/static/tabbar/nav_order@2x1.png
app/unpackage/dist/dev/app-plus/static/tabbar/nav_shangbao@2x.png
Binary files differ
app/unpackage/dist/dev/app-plus/static/tabbar/nav_shangbao_sel@2x.png
Binary files differ
app/unpackage/dist/dev/app-plus/static/tabbar/nav_tubiao@2x.png
Binary files differ
app/unpackage/dist/dev/app-plus/static/tabbar/nav_tubiao_sel@2x.png
Binary files differ
app/unpackage/dist/dev/app-plus/static/tabbar/nav_xiaoxi@2x.png
app/unpackage/dist/dev/app-plus/static/tabbar/nav_xiaoxi@2x1.png
app/unpackage/dist/dev/mp-weixin/app.js
ÎļþÒÑɾ³ý
app/unpackage/dist/dev/mp-weixin/app.json
ÎļþÒÑɾ³ý
app/unpackage/dist/dev/mp-weixin/app.wxss
ÎļþÒÑɾ³ý
app/unpackage/dist/dev/mp-weixin/common/main.js
ÎļþÒÑɾ³ý
app/unpackage/dist/dev/mp-weixin/common/main.wxss
ÎļþÒÑɾ³ý
app/unpackage/dist/dev/mp-weixin/common/runtime.js
ÎļþÒÑɾ³ý
app/unpackage/dist/dev/mp-weixin/common/vendor.js
ÎļþÒÑɾ³ý
app/unpackage/dist/dev/mp-weixin/pages/index/index.js
ÎļþÒÑɾ³ý
app/unpackage/dist/dev/mp-weixin/pages/index/index.json
ÎļþÒÑɾ³ý
app/unpackage/dist/dev/mp-weixin/pages/index/index.wxml
ÎļþÒÑɾ³ý
app/unpackage/dist/dev/mp-weixin/pages/index/index.wxss
ÎļþÒÑɾ³ý
app/unpackage/dist/dev/mp-weixin/pages/mine/mine.js
ÎļþÒÑɾ³ý
app/unpackage/dist/dev/mp-weixin/pages/mine/mine.json
ÎļþÒÑɾ³ý
app/unpackage/dist/dev/mp-weixin/pages/mine/mine.wxml
ÎļþÒÑɾ³ý
app/unpackage/dist/dev/mp-weixin/pages/mine/mine.wxss
ÎļþÒÑɾ³ý
app/unpackage/dist/dev/mp-weixin/static/bg_a.png
Binary files differ
app/unpackage/dist/dev/mp-weixin/static/bg_b.png
Binary files differ
app/unpackage/dist/dev/mp-weixin/static/logo.png
Binary files differ
app/unpackage/dist/dev/mp-weixin/static/tabbar/nav_gongdan@2x.png
Binary files differ
app/unpackage/dist/dev/mp-weixin/static/tabbar/nav_gongdan_sel@2x.png
Binary files differ
app/unpackage/dist/dev/mp-weixin/static/tabbar/nav_jiancha@2x.png
Binary files differ
app/unpackage/dist/dev/mp-weixin/static/tabbar/nav_jiancha_sel@2x.png
Binary files differ
app/unpackage/dist/dev/mp-weixin/static/tabbar/nav_shangbao@2x.png
Binary files differ
app/unpackage/dist/dev/mp-weixin/static/tabbar/nav_shangbao_sel@2x.png
Binary files differ
app/unpackage/dist/dev/mp-weixin/static/tabbar/nav_tubiao@2x.png
Binary files differ
app/unpackage/dist/dev/mp-weixin/static/tabbar/nav_tubiao_sel@2x.png
Binary files differ