199 lines
5.8 KiB
Vue
199 lines
5.8 KiB
Vue
<template>
|
||
<view>
|
||
<scroll-view
|
||
scroll-x="true"
|
||
class="tabScroll"
|
||
:scroll-into-view="scrollinto"
|
||
:scroll-with-animation="true"
|
||
>
|
||
<view
|
||
v-for="(item, index) in tabBars"
|
||
:key="index"
|
||
:id="'tab' + index"
|
||
class="scroll-row-item"
|
||
@click="changeTab(index)"
|
||
>
|
||
<view :class="tabIndex == index ? 'scroll-row-item-act' : ''">
|
||
<text class="line"></text>
|
||
{{ item.name }}
|
||
<text class="num">{{ item.num }}</text>
|
||
</view>
|
||
</view>
|
||
</scroll-view>
|
||
<view class="homeSwiper">
|
||
<view v-if="tabIndex === 0 || tabIndex === 1">
|
||
<view v-if="itemData.length > 0">
|
||
<view
|
||
class="boxBg"
|
||
v-for="(item, index) in itemData.slice(0, 3)"
|
||
:key="index"
|
||
v-if="tabIndex === 0"
|
||
>
|
||
<view class="tabList">
|
||
<view class="item" @click.stop="handleDetail(item.id)">
|
||
<view class="titInfo">
|
||
{{ item.name }}
|
||
<text>{{ item.phone }}</text>
|
||
<icon
|
||
class="phone"
|
||
@click.stop="handlePhone($event, item.phone)"
|
||
></icon>
|
||
<icon class="note" @click.stop="handleNote"></icon>
|
||
</view>
|
||
<view class="address">{{ item.address }}</view>
|
||
<view class="distance">{{ item.distance }}公里</view>
|
||
<view class="time"
|
||
>预约取件时间:{{
|
||
taskTimeFormat(item.estimatedStartTime)
|
||
}}
|
||
至 {{ overTimeFormat(item.estimatedEndTime) }}</view
|
||
>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
<!-- 待派件 -->
|
||
<view
|
||
class="boxBg"
|
||
v-for="(item, index) in itemData.slice(0, 3)"
|
||
:key="index"
|
||
v-if="tabIndex === 1"
|
||
>
|
||
<view class="tabList">
|
||
<view class="item" @click.stop="handleDetail(item.id)">
|
||
<view class="titInfo">
|
||
{{ item.name }}
|
||
<text>{{ item.phone }}</text>
|
||
<icon
|
||
class="phone"
|
||
@click.stop="handlePhone($event, item.phone)"
|
||
></icon>
|
||
<icon class="note" @click.stop="handleNote"></icon>
|
||
</view>
|
||
<view class="address">{{ item.address }}</view>
|
||
<view class="address">{{ item.distance }}公里</view>
|
||
<view class="time">运单号:{{ item.transportOrderId }}</view>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
<view class="moreInfo" v-if="itemData.length > 3" @click="handleMore">
|
||
查看更多
|
||
<icon></icon>
|
||
</view>
|
||
</view>
|
||
|
||
<!-- 无数据显示 -->
|
||
<view v-if="itemData.length === 0"
|
||
><EmptyPage :emptyInfo="emptyInfo"></EmptyPage
|
||
></view>
|
||
<!-- end -->
|
||
</view>
|
||
<!-- 拨打手机弹层 -->
|
||
<Phone ref="phone" :phoneData="phoneData"></Phone>
|
||
<!-- end -->
|
||
</view>
|
||
</template>
|
||
|
||
<script setup>
|
||
import { ref } from "vue";
|
||
import { useStore } from "vuex";
|
||
// 处理事件封装的方法
|
||
import { taskTimeFormat, overTimeFormat } from "@/utils/index.js";
|
||
//组件
|
||
// 无数据
|
||
import EmptyPage from "@/components/uni-empty-page/index.vue";
|
||
import Phone from "@/components/uni-phone/index.vue";
|
||
// 获取父组件值、方法
|
||
const props = defineProps({
|
||
itemData: {
|
||
type: Array,
|
||
default: () => [],
|
||
},
|
||
tabBars: {
|
||
type: Array,
|
||
default: () => [],
|
||
},
|
||
});
|
||
// ------定义变量------
|
||
const store = useStore(); //设置、获取数据
|
||
let scrollinto = ref("tab0"); //tab切换
|
||
let tabIndex = ref(0); //当前tab
|
||
const phone = ref();
|
||
const emptyInfo = ref("- 空空如也,无运单记录 -");
|
||
|
||
const emit = defineEmits("getTabIndex");
|
||
const phoneData = ref("");
|
||
|
||
// ------定义方法------
|
||
// tab选项卡切换轮播
|
||
const changeTab = (index) => {
|
||
// 点击的还是当前数据的时候直接return
|
||
if (tabIndex.value == index) {
|
||
return;
|
||
}
|
||
tabIndex.value = index;
|
||
emit("getTabIndex", index);
|
||
// 滑动
|
||
scrollinto.value = "tab" + index;
|
||
};
|
||
|
||
// 触发选项卡事件
|
||
const onChangeSwiperTab = (e) => {
|
||
changeTab(e.detail.current);
|
||
};
|
||
// 进入详情
|
||
const handleDetail = (id) => {
|
||
// 把任务id用vuex的方法存储,方便其他页面调用
|
||
store.commit("user/setTaskId", id);
|
||
store.commit("user/setNewType", null);
|
||
// 进入取件详情页
|
||
if (tabIndex.value === 0) {
|
||
// 由于取件详情地址和派件详情地址样式一致,所以用类型 1取件,2派件区分开
|
||
store.commit("user/setTaskType", 1);
|
||
store.commit("user/setDetailType", 0);
|
||
store.commit("setFootStatus", 1); //修改底部tab当前标签
|
||
uni.redirectTo({
|
||
url: "/pages/details/index",
|
||
});
|
||
} else {
|
||
// 进入派件详情页
|
||
// 由于取件详情地址和派件详情地址样式一致,所以用类型 1取件,2派件区分开
|
||
store.commit("user/setTaskType", 2);
|
||
store.commit("user/setDetailType", 0);
|
||
store.commit("setFootStatus", 3); //修改底部tab当前标签
|
||
uni.redirectTo({
|
||
url: "/pages/details/waybill",
|
||
});
|
||
}
|
||
};
|
||
// 进入待取件待派件页面
|
||
const handleMore = () => {
|
||
if (tabIndex.value === 0) {
|
||
uni.redirectTo({
|
||
url: "/pages/pickup/index",
|
||
});
|
||
} else {
|
||
uni.redirectTo({
|
||
url: "/pages/delivery/index",
|
||
});
|
||
}
|
||
};
|
||
// 拨打电话弹层
|
||
const handlePhone = (e, val) => {
|
||
// 阻止事件冒泡
|
||
e.stopPropagation();
|
||
phoneData.value = val;
|
||
phone.value.dialogOpen();
|
||
};
|
||
// 发短信
|
||
const handleNote = () => {
|
||
uni.showToast({
|
||
title: "程序员哥哥正在实现中",
|
||
duration: 1000,
|
||
icon: "none",
|
||
});
|
||
};
|
||
</script>
|
||
|
||
<style src="../index.scss" lang="scss"></style>
|