lanan-app/pages/rescue/rescue.vue

1778 lines
40 KiB
Vue
Raw Normal View History

2024-08-20 20:02:05 +08:00
<!-- 道路救援 首页-->
<template>
<view class="content">
2024-08-22 19:34:47 +08:00
<!-- 顶部 -->
2024-08-23 18:41:57 +08:00
<view class="content-top" :style="{ paddingTop: homeHeaderPaddingTop + 'px' }">
2025-08-29 17:13:05 +08:00
<view style="display: flex; justify-content: start;">
<image class="logo-icon" src="@/static/leftLogo.png" mode="scaleToFill">
2025-09-05 16:49:23 +08:00
2025-08-29 17:13:05 +08:00
</image>
2025-09-05 16:49:23 +08:00
<view class="top-two">
<view class="user-info">
<view class="user-name">{{ userinfo.nickname || '用户昵称'}}</view>
<view class="user-position" v-if="highestWeightRoleName">{{ highestWeightRoleName }}</view>
</view>
<!-- #ifdef APP-PLUS || H5 -->
2025-08-29 17:13:05 +08:00
2025-09-05 16:49:23 +08:00
<view class="real-time">
<text class="date-part">{{currentDate}}</text>
<text class="time-part">{{currentTime}}</text>
</view>
<!-- #endif -->
2024-09-06 09:18:25 +08:00
2025-09-05 16:49:23 +08:00
</view>
2024-08-22 19:34:47 +08:00
</view>
2025-09-05 16:49:23 +08:00
<view class="top-menu">
<view class="top-menu-item" :key="index" v-for="(item, index) in topMenuList"
@click="goToMenuPage(item)" v-if="checkPermi(['rescue_home_page'])">
<image class="top-menu-item-icon" :src="item.icon" mode="aspectFit"></image>
<text>{{ item.title }}</text>
</view>
2024-08-20 20:02:05 +08:00
</view>
2024-08-22 19:34:47 +08:00
</view>
2024-09-06 09:18:25 +08:00
2025-09-05 16:49:23 +08:00
<view class="dil" v-if="checkPermi(['rescue_home_page'])">
<!-- 四个选项 -->
<!-- #ifdef APP-PLUS || H5 -->
<!-- <view style="display: flex; flex-direction: row; align-items: center; justify-content: space-between;"> -->
<view class="four-box-header">
<view class="blue-line"></view>
<text class="four-box-header-title">业务管理</text>
2025-08-29 17:13:05 +08:00
2025-09-05 16:49:23 +08:00
<!-- <view class="four-box-header-extra">
2024-08-22 19:34:47 +08:00
<text style="color: #929292;">待评价</text>
<uni-icons type="right" color="#929292"></uni-icons>
2025-08-29 17:13:05 +08:00
</view> -->
2025-09-05 16:49:23 +08:00
</view>
<!-- <view class="four-box-header-extra" @click="gohistory()">
2025-08-29 17:13:05 +08:00
<text style="color: #929292;">历史订单</text>
<uni-icons type="right" color="#929292"></uni-icons>
2024-08-22 19:34:47 +08:00
</view>
2025-08-29 17:13:05 +08:00
</view> -->
2025-09-05 16:49:23 +08:00
<view class="tab-choose-class">
2025-08-29 17:13:05 +08:00
2025-09-05 16:49:23 +08:00
<view class="tab-content" @click="tabChoose(item, index)"
v-for='(item, index) in ["当日", "当月", "全部", "自定义"]' :key='index'>
2025-08-29 17:13:05 +08:00
2025-09-05 16:49:23 +08:00
<!-- tab 名称信息 -->
<view class='tab-name-class'
:style='{ color: index + 1 == tabValue ? "#101A3E" : "#8D90A6", fontWeight: index + 1 == tabValue ? "bold" : "normal" }'>
{{ item }}
2025-08-29 17:13:05 +08:00
2025-09-05 16:49:23 +08:00
<view class="icon-tab" v-if='index == 3'>
<image src="@/static/icons/homeOrderCard/xialajiantou.svg" mode="scaleToFill"></image>
</view>
2024-08-22 19:34:47 +08:00
</view>
2025-08-29 17:13:05 +08:00
2025-09-05 16:49:23 +08:00
<!-- 名称下 icon -->
<view class="tab-icon"
:style='{ background: index + 1 == tabValue ? "linear-gradient( 180deg, #054DF3 0%, #55A3FF 100%)" : "" }'>
</view>
2024-08-20 20:02:05 +08:00
</view>
</view>
2025-09-05 16:49:23 +08:00
<view class="example-body" v-show="tabValue==4" style="margin-bottom: 16rpx;">
<uni-datetime-picker v-model="range" type="daterange" @maskClick="maskClick" />
2024-08-20 20:02:05 +08:00
</view>
2025-09-05 16:49:23 +08:00
<view class="four-box">
2025-09-24 10:20:09 +08:00
<view class="boxf" @click="goToOrder('null')">
2025-09-05 16:49:23 +08:00
<view class="zi1">
<image class="zi1-icon" src="@/static/icons/homeOrderCard/receivedOrder_new.png"
mode="aspectFit">
</image>
<text>已接单</text>
</view>
<view class="zi2" style="margin-top: 10rpx;">{{yjdNum ? yjdNum : '0'}}</view>
2024-08-20 20:02:05 +08:00
</view>
2025-09-24 10:20:09 +08:00
<view class="boxf" @click="goToOrder(1)">
2025-09-05 16:49:23 +08:00
<view class="zi1">
<image class="zi1-icon" src="@/static/icons/homeOrderCard/jyz_new.png" mode="aspectFit"></image>
<text>救援中</text>
</view>
<view class="zi2" style="margin-top: 10rpx;">{{jyzNum}}</view>
</view>
2025-09-24 10:20:09 +08:00
<view class="boxf" @click="goToOrder(5)">
2025-09-05 16:49:23 +08:00
<view class="zi1">
<image class="zi1-icon" src="@/static/icons/homeOrderCard/ywc_new.png" mode="aspectFit"></image>
<text>已完成</text>
</view>
<view class="zi2" style="margin-top: 10rpx;">{{ywcNum}}</view>
2024-08-20 20:02:05 +08:00
</view>
2025-08-29 17:13:05 +08:00
</view>
2025-09-05 16:49:23 +08:00
<view class="two-box-container">
<view class="two-box">
2025-09-24 10:20:09 +08:00
<view class="boxf2" style="background: linear-gradient(135deg, #E0F0FF 40%, #BBD9FF 100%);">
2025-09-05 16:49:23 +08:00
<view style="display: flex; justify-content: space-between; align-items: center;">
<view class="zi1_1">
<image class="zi1_1-icon" src="@/static/icons/homeOrderCard/ysk_solid.png"
mode="aspectFit">
</image>
<text style="color: #3d6ba0; font-weight: bold; font-size: 30rpx;">应收款</text>
</view>
<uni-icons class="eye-icon" :type="yskShowAmount ? 'eye' : 'eye-slash'"
@click.native.stop.prevent="yskShowAmount = !yskShowAmount"></uni-icons>
2025-08-29 17:13:05 +08:00
</view>
2025-09-05 16:49:23 +08:00
<view class="zi2_2" style="margin-top: 10rpx;">{{ yskShowAmount ? yingskNum : '*****' }}</view>
2025-08-29 17:13:05 +08:00
</view>
2025-09-05 16:49:23 +08:00
<view class="boxf2" style="background: linear-gradient(135deg, #FFF7E0 40%, #FFE7B8 100%);"
2025-09-24 10:20:09 +08:00
@click="goToOrder(3)">
2025-09-05 16:49:23 +08:00
<view style="display: flex; justify-content: space-between; align-items: center;">
<view class="zi1_1">
<image class="zi1_1-icon" src="@/static/icons/homeOrderCard/qucar.png" mode="aspectFit">
</image>
<text style="color: #a97747; font-size: 30rpx; font-weight: bold;">待取车</text>
</view>
<uni-icons class="eye-icon" :type="dqcShowAmount ? 'eye' : 'eye-slash'"
@click.native.stop="dqcShowAmount = !dqcShowAmount"></uni-icons>
2024-08-22 20:13:57 +08:00
</view>
2025-09-05 16:49:23 +08:00
<view class="zi2_2" style="margin-top: 10rpx;">{{ dqcShowAmount ? dqcNum : '*****' }}</view>
2024-08-22 20:13:57 +08:00
</view>
2025-08-29 17:13:05 +08:00
</view>
2024-08-20 20:02:05 +08:00
2025-09-05 16:49:23 +08:00
<view class="two-box">
2025-09-24 10:20:09 +08:00
<view class="boxf2" style="background: linear-gradient(135deg, #E6F8ED 40%, #C8F0D8 100%);">
2025-09-05 16:49:23 +08:00
<view style="display: flex; justify-content: space-between; align-items: center;">
<view class="zi1_1">
<image class="zi1_1-icon" src="@/static/icons/homeOrderCard/yisk_solid.png"
mode="aspectFit">
</image>
<text style="color: #169948; font-size: 30rpx; font-weight: bold;">已收款</text>
</view>
<uni-icons class="eye-icon" :type="yiskShowAmount ? 'eye' : 'eye-slash'"
@click.native.stop="yiskShowAmount = !yiskShowAmount"></uni-icons>
2025-08-29 17:13:05 +08:00
</view>
2025-09-05 16:49:23 +08:00
<view class="zi2_2" style="margin-top: 10rpx;">{{ yiskShowAmount ? yiskNum : '*****' }}</view>
2024-08-20 20:02:05 +08:00
</view>
2025-09-24 10:20:09 +08:00
<view class="boxf2" style="background: linear-gradient(135deg, #F0E9FF 40%, #D9CEFF 100%);">
2025-09-05 16:49:23 +08:00
<view style="display: flex; justify-content: space-between; align-items: center;">
<view class="zi1_1">
<image class="zi1_1-icon" src="@/static/icons/homeOrderCard/dsk_solid.png"
mode="aspectFit">
</image>
<text style="color: #6657da; font-weight: bold; font-size: 30rpx;">待收款</text>
</view>
<uni-icons class="eye-icon" :type="dskShowAmount ? 'eye' : 'eye-slash'"
@click.native.stop="dskShowAmount = !dskShowAmount"></uni-icons>
2025-08-29 17:13:05 +08:00
</view>
2025-09-05 16:49:23 +08:00
<view class="zi2_2" style="margin-top: 10rpx;">{{ dskShowAmount ? dskNum : '*****' }}</view>
2024-08-20 20:02:05 +08:00
</view>
2025-08-29 17:13:05 +08:00
</view>
</view>
2025-09-05 16:49:23 +08:00
<view class="yijian">
<view class="y-left" @click="getyi()">
<view class="">立即救援</view>
</view>
2025-08-29 17:13:05 +08:00
</view>
2025-09-05 16:49:23 +08:00
<!-- #endif -->
<!-- #ifdef MP-WEIXIN -->
<view class="box">
2025-08-29 17:13:05 +08:00
2025-09-05 16:49:23 +08:00
<template v-for="(item, index) in busiTypeList">
<view :key="index" class="xz-box" :class="{ checked: busiType === index + 1 }"
@click="getsxwhat(index + 1)">
<image class="xz-box-icon" :src="item.icon" mode="aspectFit"></image>
<view class="box-wenzi">{{item.label}}</view>
<view class="checkedFlag">
</view>
<uni-icons class="checkedFlagIcon" type="checkmarkempty" size="22" color="#fff"></uni-icons>
2024-08-20 20:02:05 +08:00
</view>
2025-09-05 16:49:23 +08:00
</template>
2025-08-29 17:13:05 +08:00
2025-09-05 16:49:23 +08:00
</view>
<!-- #endif -->
<view class="four-box-header_2">
<view class="four-box-header">
<view class="blue-line"></view>
<text class="four-box-header-title">救援列表</text>
2024-09-06 09:18:25 +08:00
2025-09-05 16:49:23 +08:00
<!-- <view class="four-box-header-extra" @click="gohistory()">
2024-08-22 19:34:47 +08:00
<text style="color: #929292;">历史订单</text>
<uni-icons type="right" color="#929292"></uni-icons>
</view> -->
2025-09-05 16:49:23 +08:00
</view>
<view class="four-box-header_2_right">
<text :class="['tab-item', { active: activeTab === 0 }]" @click="switchTab(0)">司机端</text>
<text :class="['tab-item', { active: activeTab === 1 }]" @click="switchTab(1)">业务端</text>
<text :class="['tab-item', { active: activeTab === 2 }]" @click="switchTab(2)">客户端</text>
</view>
2025-08-29 17:13:05 +08:00
</view>
2024-08-20 20:02:05 +08:00
2025-09-05 16:49:23 +08:00
<view class="tap-box">
2025-09-24 10:20:09 +08:00
<view class="ques" v-if="loading && orderList.length == 0">
<!-- <image src="../../static/quesheng.png" mode="aspectFit"></image> -->
<view class="loading-container">
<view class="loading-spinner"></view>
<text class="loading-text">加载中请稍候...</text>
</view>
</view>
<view class="ques" v-else-if="!loading && orderList.length == 0">
2025-09-05 16:49:23 +08:00
<image src="../../static/quesheng.png" mode="aspectFit"></image>
2025-09-24 10:20:09 +08:00
2025-09-05 16:49:23 +08:00
</view>
2025-09-24 10:20:09 +08:00
2025-09-05 16:49:23 +08:00
<view style="display: flex;flex-direction: column;row-gap: 10px;" v-else>
2025-09-24 10:20:09 +08:00
<order-card-new :status="1" @deleteOk="deleteOrderHandle" @revokeOk="revokeOrderHandle"
@refresh="getlist" v-for="(item, index) in orderList" :key="index" :orderData="item"
2025-09-05 16:49:23 +08:00
:activeTab="activeTab"></order-card-new>
</view>
2024-08-20 20:02:05 +08:00
2025-09-05 16:49:23 +08:00
</view>
<!-- 一键救援 -->
<view style="width: 100%; height: 80px; "></view>
<!-- dibu -->
2024-08-20 20:02:05 +08:00
</view>
2025-09-05 16:49:23 +08:00
<u-modal :show="showDelete" :title="title" :showCancelButton="true"></u-modal>
<u-popup :show="showp" mode="center" :round="10">
<scroll-view scroll-y style="height: 200px;">
<view class="box_">
<view class="title_">车辆提醒</view>
<view class="size_" v-for="(item,index) in warnList" :key="index">{{item}}</view>
</view>
</scroll-view>
<view class="annaiu" @click="showp=false">
<view class="">确定</view>
2024-08-20 20:02:05 +08:00
</view>
2025-09-05 16:49:23 +08:00
</u-popup>
2025-09-24 10:20:09 +08:00
<!-- 悬浮刷新按钮 -->
<view v-if="checkPermi(['rescue_home_page'])" class="floating-refresh-btn" :class="{ rotating: isRefreshing }"
@click="handleRefresh">
<uni-icons type="refreshempty" size="40" color="#fff"></uni-icons>
</view>
2025-09-05 16:49:23 +08:00
<tabBar :msg="msg"></tabBar>
2024-08-20 20:02:05 +08:00
</view>
</template>
<script>
import request from '../../utils/request';
2024-09-06 09:18:25 +08:00
import tabBar from '@/components/tabBar/tabBar.vue'
2024-08-20 20:02:05 +08:00
import {
getToken
} from '@/utils/auth'
2024-09-06 09:18:25 +08:00
// #ifdef APP
2024-08-20 20:02:05 +08:00
const keepAlivePlugin = uni.requireNativePlugin('Ba-KeepAlive')
const jyJPush = uni.requireNativePlugin('JY-JPush');
2024-09-06 09:18:25 +08:00
// #endif
2025-08-29 17:13:05 +08:00
import OrderCardNew from '@/components/orderCard/OrderCardNew.vue'
2025-08-06 18:00:28 +08:00
import {
getWXStatusHeight
2025-09-05 16:41:58 +08:00
} from '@/utils/utils.js';
import {
checkPermi,
checkRole
} from "@/utils/permission"; // 权限判断函数
2024-08-20 20:02:05 +08:00
// import { getWeather } from'../../utils/Weather'
export default {
data() {
return {
2024-08-23 18:41:57 +08:00
// #ifdef MP
homeHeaderPaddingTop: 0,
homeHeaderMenuHeight: 0,
homeHeaderMenuLeft: 0,
// #endif
// #ifdef APP || H5
homeHeaderPaddingTop: uni.upx2px(90),
homeHeaderMenuHeight: 50,
homeHeaderMenuLeft: 0,
// #endif
2025-08-29 17:13:05 +08:00
activeTab: 1, // 新增:当前选中的选项卡索引
2024-08-22 20:13:57 +08:00
busiTypeList: [{
label: '拖车',
icon: require('@/static/icons/order/tuoche.png')
},
{
label: '送油',
icon: require('@/static/icons/order/songyou.png')
},
{
label: '搭电',
icon: require('@/static/icons/order/dadian.png')
},
{
label: '换胎',
icon: require('@/static/icons/order/huantai.png')
},
// {
// label: '扣车',
// icon: require('@/static/icons/order/tuoche.png')
// },
],
2025-08-06 18:00:28 +08:00
topMenuList: [{
2025-08-29 17:13:05 +08:00
title: '业务管理',
/* path: '/pages/rescue/historylist?id=1', */
icon: require('@/static/icons/homeTopMenu/icon_business.png')
2024-08-22 19:34:47 +08:00
},
{
title: '车辆管理',
path: '/pages/my/carManage',
icon: require('@/static/icons/homeTopMenu/icon_clean.png')
},
{
title: '数据统计',
path: '/pages/my/StatisticsInfo',
icon: require('@/static/icons/homeTopMenu/icon_maintain.png')
},
{
title: '消息通知',
path: '/pages/message/message',
icon: require('@/static/icons/homeTopMenu/icon_fitment.png')
}
],
2024-08-20 20:02:05 +08:00
msgSocket: this.$msgSocket,
showp: false,
title: '是否确认删除',
content: '是否确认删除',
dqcNum: 0,
dzfNum: 0,
jyzNum: 0,
ywcNum: 0,
2025-08-06 18:00:28 +08:00
zwxNum: 0,
2025-08-29 17:13:05 +08:00
// 已接单
yjdNum: 0,
// 应收款
yingskNum: 0,
// 已收款
yiskNum: 0,
// 待收款
dskNum: 0,
2024-08-20 20:02:05 +08:00
currentTime: '',
cityName: '济南',
positionInfo: '泸州',
msg: '1',
total: 0,
pageNum: 1, //第几页
pageSize: 10, //一页多少张
totalPages: 0, //总数
2024-08-22 19:34:47 +08:00
orderList: [
// {
// rescueTypeStr: '扣车',
// rescuePosition: '四川省泸州市江阳区酒谷大道四段18号泸州',
// rescueStatus: 2,
// rescueStatusStr: '待救援',
// driverName: '先伟',
// driverCarNum: '川E69752',
// distance: 12800,
// needTime: 26,
// rescueTime: '2024-08-12 08:42'
// }
],
2024-08-20 20:02:05 +08:00
sjlist: [],
showDelete: false,
arrbox: [
// {text:'待支付',id:1},
// {text:'待评价',id:2},
],
keepLive: {
channelId: 'Ba-KeepAlive',
channelName: "Ba-KeepAlive",
title: "蓝安救援正在运行",
content: "蓝安救援正在运行",
dataResult: "",
type: undefined
},
one: true,
2025-08-29 17:13:05 +08:00
warnList: [],
userinfo: {},
currentDateTime: '', // 实时时间变量
timer: null, // 定时器
tabValue: 1,
timeType: "day",
range: [],
yskShowAmount: false,
yiskShowAmount: false,
dskShowAmount: false,
dqcShowAmount: false,
startTimeStr: null,
endTimeStr: null,
currentDate: '',
2025-09-05 16:51:02 +08:00
// currentTime: '',
2025-08-29 17:13:05 +08:00
roleList: [],
positionName: '', // 岗位名称
highestWeightRoleName: '',
2025-09-24 10:20:09 +08:00
isRefreshing: false, // 新增:刷新状态
loading: true, // 加载状态控制
2024-08-20 20:02:05 +08:00
}
},
onLoad() {
2024-08-23 18:41:57 +08:00
// #ifdef MP
2025-08-06 18:00:28 +08:00
const {
barHeight,
barTop,
menuButtonLeft
} = getWXStatusHeight()
console.log('barHeight, barTop, menuButtonLeft: ', barHeight, barTop, menuButtonLeft);
2024-08-23 18:41:57 +08:00
this.homeHeaderPaddingTop = barTop || 0
this.homeHeaderMenuHeight = barHeight
this.homeHeaderMenuLeft = menuButtonLeft - 6
// #endif
2024-09-06 09:18:25 +08:00
this.$startMsgSocket(uni.getStorageSync('userId'))
2025-08-29 17:13:05 +08:00
this.updateDateTime();
this.timer = setInterval(this.updateDateTime, 1000);
2024-09-06 09:18:25 +08:00
// #ifdef APP || H5
2025-08-29 17:13:05 +08:00
// this.register()
2024-09-06 09:18:25 +08:00
this.jyPushStart()
2025-08-29 17:13:05 +08:00
this.updateDateTime();
this.timer = setInterval(this.updateDateTime, 1000);
2024-09-06 09:18:25 +08:00
// #endif
2025-09-24 10:20:09 +08:00
/* // 监听编辑完成事件
uni.$on('refreshHomePage', this.handleRefreshHomePage); */
2024-08-20 20:02:05 +08:00
},
2025-08-29 17:13:05 +08:00
onUnload() {
// 清除定时器
if (this.timer) clearInterval(this.timer);
2025-09-24 10:20:09 +08:00
/* // 移除事件监听避免内存泄漏
uni.$off('refreshHomePage', this.handleRefreshHomePage); */
2025-08-29 17:13:05 +08:00
},
2024-08-20 20:02:05 +08:00
onShow() {
this.timeWeekFormat()
2024-08-24 11:00:51 +08:00
//this.getWarnList()
2024-08-20 20:02:05 +08:00
if (getToken()) {
this.Fourhammers()
this.getlist()
2025-08-29 17:13:05 +08:00
this.userinfo = uni.getStorageSync('userInfo')
this.roleList = uni.getStorageSync('role')
this.highestWeightRoleName = uni.getStorageSync('highestWeightRoleName')
console.log('highestWeightRoleName', this.highestWeightRoleName)
2024-08-20 20:02:05 +08:00
} else {
return
}
},
onReachBottom() {
if (this.pageNum >= this.totalPages) {
uni.showToast({
title: '没有下一页数据',
icon: 'none'
})
} else {
this.pageNum++
this.getlist()
}
},
2025-08-29 17:13:05 +08:00
watch: {
range(newval) {
if (newval && newval.length === 2) {
this.startTimeStr = newval[0];
this.endTimeStr = newval[1];
this.Fourhammers();
}
},
roleList: {
handler(newVal) {
if (newVal && newVal.length > 0) {
this.filterPosition();
} else {
this.positionName = ''; // 设置为空,不显示
}
},
immediate: true // 立即执行一次
}
},
2024-08-20 20:02:05 +08:00
components: {
tabBar,
2025-08-29 17:13:05 +08:00
OrderCardNew
2024-08-20 20:02:05 +08:00
},
methods: {
2025-09-05 16:41:58 +08:00
checkPermi,
checkRole,
2025-08-29 17:13:05 +08:00
// 切换选项卡
switchTab(index) {
this.activeTab = index;
console.log('切换到选项卡:', index);
},
2025-09-24 10:20:09 +08:00
/* // 处理首页刷新
handleRefreshHomePage() {
console.log('收到编辑完成事件,刷新首页数据');
this.pageNum = 1;
this.orderList = [];
this.getlist();
this.Fourhammers();
}, */
// 处理刷新
handleRefresh() {
if (this.isRefreshing) return;
this.isRefreshing = true;
// 刷新数据
this.pageNum = 1;
this.orderList = [];
// 同时调用多个接口刷新数据
Promise.all([
this.getlist(),
this.Fourhammers()
]).then(() => {
this.isRefreshing = false;
uni.showToast({
title: '刷新成功',
icon: 'success',
duration: 1000
});
}).catch(() => {
this.isRefreshing = false;
uni.showToast({
title: '刷新失败',
icon: 'none',
duration: 1000
});
});
},
2025-08-29 17:13:05 +08:00
2024-08-20 20:02:05 +08:00
jyPushStart() {
console.log("jyPushStart", jyJPush);
// 暂时只有安卓支持
jyJPush.registerSDKCallBack(sdkCallBack => {
// 这里会返回regid
console.log("sdk Callback 结果 " + JSON.stringify(sdkCallBack));
})
// 此处只是演示 授权实际应该弹出自己的隐私授权页面或者用uniapp提供的隐私协议
setTimeout(function() {
jyJPush.setAuth({
auth: "1"
}, res => {
console.log("auth 结果 " + JSON.stringify(res));
if (res.errorCode == 0) {
// 安卓需要单独调用
if (uni.getSystemInfoSync().platform == 'android') {
jyJPush.android_init(initRes => {
console.log("init 结果 " + JSON.stringify(initRes));
jyJPush.deleteJYJPushAlias({
// 可以不用传值进去,但是需要配置这项数据
}, result => {
jyJPush.setJYJPushAlias({
userAlias: uni.getStorageSync('userId')
}, result => {
// 设置成功或者失败都会通过这个result回调返回数据数据格式保持极光返回的安卓/iOS数据一致
// 注:若没有返回任何数据,考虑是否初始化完成
console.log('setJYJPushAlias', result);
jyJPush.getJYJPushAlias({
// 可以不用传值进去,但是需要配置这项数据
}, result => {
console.log(
'getJYJPushAlias',
result);
});
});
});
})
}
}
})
}, 5000);
},
msgInfo() {
if (this.msgSocket) {
this.msgSocket.onMessage(res => {
console.log('触发首页的消息回调');
this.singleList = []
this.getthreelist()
this.driverRescuePage()
})
}
},
2024-08-22 19:34:47 +08:00
/**
* 导航菜单跳转
*/
goToMenuPage(item) {
2025-08-29 17:13:05 +08:00
if (!item.path) {
return; // 如果没有path则不进行跳转
}
2024-08-22 19:34:47 +08:00
uni.navigateTo({
url: item.path
})
},
2024-08-20 20:02:05 +08:00
isRunning() { //是否正在运行
keepAlive.isRunning((res) => {
console.log('保活服务验证', res);
});
},
restart() { //重启
keepAlive.restart((res) => {
console.log('重启保活服务', res);
})
},
register() { //注册
2024-08-22 20:13:57 +08:00
// #ifdef APP
2024-08-20 20:02:05 +08:00
console.log('keepAlive', keepAlivePlugin);
keepAlivePlugin.register({
channelId: this.keepLive.channelId,
channelName: this.keepLive.channelName,
title: this.keepLive.title,
content: this.keepLive.content,
},
(res) => {
console.log('保活注册', res);
});
2024-08-22 20:13:57 +08:00
// #endif
2024-08-20 20:02:05 +08:00
},
2024-08-22 19:34:47 +08:00
deleteOrderHandle() {
this.pageNum = 1
this.orderList = []
this.getlist()
},
2025-09-24 10:20:09 +08:00
revokeOrderHandle() {
this.pageNum = 1
this.orderList = []
this.getlist()
},
2024-08-20 20:02:05 +08:00
getWarnList() {
this.warnList = []
request({
url: "/system/rescueCar/warnList",
method: 'get',
}).then(res => {
this.warnList = res.data
if (this.warnList.length > 0) {
this.showp = true
}
})
},
goToOrder(type) {
uni.navigateTo({
url: '/pages/rescue/historylist?id=' + type
})
},
gettel(num) {
uni.makePhoneCall({
phoneNumber: num //仅为示例
});
},
getsxwhat(id) {
uni.navigateTo({
url: '/pages/rescue/initiate?id=' + id + '&isAppointment=' + this.isAppointment
})
},
Fourhammers() {
request({
url: '/app/rescueInfo/getRescueStatistics',
method: 'get',
2025-08-29 17:13:05 +08:00
params: {
timeType: this.timeType,
startTimeStr: this.startTimeStr,
endTimeStr: this.endTimeStr,
}
2024-08-20 20:02:05 +08:00
}).then((res) => {
console.log('四个', res);
this.dqcNum = res.data.dqcNum
this.dzfNum = res.data.dzfNum
this.jyzNum = res.data.jyzNum
this.ywcNum = res.data.ywcNum
2025-08-29 17:13:05 +08:00
this.yjdNum = res.data.yjdNum
this.yingskNum = res.data.yingskNum ? res.data.yingskNum / 100 : 0
this.yiskNum = res.data.yiskNum ? res.data.yiskNum / 100 : 0
this.dskNum = res.data.dskNum ? res.data.dskNum / 100 : 0
2024-08-20 20:02:05 +08:00
})
},
timeWeekFormat() {
//定义一个日期对象;
var dateTime = new Date();
//获得系统年份;
var year = dateTime.getFullYear();
//获得系统月份;
var month = dateTime.getMonth() + 1;
//获得系统当月分天数;
var day = dateTime.getDate();
//获得系统小时;
var hours = dateTime.getHours();
//获得系统分钟;
var minutes = dateTime.getMinutes();
//获得系统秒数;
var second = dateTime.getSeconds();
//获得系统星期几;
var dayCycle = dateTime.getDay();
//使用数组更改日期样式;
var dayCycleArray = ["日", "一", "二", "三", "四", "五", "六"];
for (var i = 0; i < 7; i++) {
if (dayCycle == i) {
//将dayCycleArray的数赋值到系统星期几里面中去;
dayCycle = dayCycleArray[i];
}
}
month < 10 ? month = '0' + month : month;
day < 10 ? day = '0' + day : day;
hours < 10 ? hours = '0' + hours : hours;
minutes < 10 ? minutes = '0' + minutes : minutes;
second < 10 ? second = '0' + second : second;
//打印完整的系统日期;
// this.dateStr = year + '-' + month + '-' + day + ' ';
this.currentTime = '星期' + dayCycle
// this.time = hours + ':' + minutes + ':' + second
},
2025-09-24 10:20:09 +08:00
/* getlist() {
2024-08-20 20:02:05 +08:00
let data = {
rescueStatus: 1,
pageSize: this.pageSize,
pageNum: this.pageNum,
}
request({
url: '/app/rescueInfo/getRescueList',
method: 'get',
params: data
}).then((res) => {
console.log('首页', res);
if (res.code == 200) {
if (this.pageNum != 1) {
this.orderList = this.orderList.concat(res.rows)
} else {
this.orderList = res.rows
}
let total = res.total
this.totalPages = Math.ceil(total / this.pageSize);
}
})
2025-09-24 10:20:09 +08:00
}, */
getlist() {
return new Promise((resolve, reject) => {
this.loading = true;
let data = {
rescueStatus: 1,
pageSize: this.pageSize,
pageNum: this.pageNum,
}
request({
url: '/app/rescueInfo/getRescueList',
method: 'get',
params: data
}).then((res) => {
console.log('首页', res);
if (res.code == 200) {
if (this.pageNum != 1) {
this.orderList = this.orderList.concat(res.rows)
} else {
this.orderList = res.rows
}
let total = res.total
this.totalPages = Math.ceil(total / this.pageSize);
}
resolve(); // 请求完成
}).catch(error => {
console.error('获取列表失败', error);
reject(error);
}).finally(() => {
this.loading = false;
})
});
2024-08-20 20:02:05 +08:00
},
2025-08-29 17:13:05 +08:00
// 更新时间
/* updateDateTime() {
const now = new Date();
const year = now.getFullYear();
const month = String(now.getMonth() + 1).padStart(2, '0');
const day = String(now.getDate()).padStart(2, '0');
const hours = String(now.getHours()).padStart(2, '0');
const minutes = String(now.getMinutes()).padStart(2, '0');
const seconds = String(now.getSeconds()).padStart(2, '0');
this.currentDateTime = `${year}${month}${day}${hours}:${minutes}:${seconds}`;
}, */
updateDateTime() {
const now = new Date();
const year = now.getFullYear();
const month = String(now.getMonth() + 1).padStart(2, '0');
const day = String(now.getDate()).padStart(2, '0');
const hours = String(now.getHours()).padStart(2, '0');
const minutes = String(now.getMinutes()).padStart(2, '0');
const seconds = String(now.getSeconds()).padStart(2, '0');
this.currentDate = `${year}${month}${day}`;
this.currentTime = `${hours}:${minutes}:${seconds}`;
this.currentDateTime = `${this.currentDate} ${this.currentTime}`;
},
maskClick(e) {
console.log('maskClick事件:', e);
},
tabChoose(item, index) {
this.tabValue = index + 1
if (1 == this.tabValue) {
this.timeType = "day"
} else if (2 == this.tabValue) {
this.timeType = "month"
} else if (3 == this.tabValue) {
this.timeType = "all"
} else if (4 == this.tabValue) {
this.timeType = "more"
this.range = []
}
if (4 == this.tabValue) {
if (this.range.length > 0) {
this.startTimeStr = this.range[0]
this.endTimeStr = this.range[1]
this.Fourhammers()
}
} else {
this.Fourhammers()
}
},
filterPosition() {
if (this.roleList && this.roleList.length > 0) {
console.log('roleList', this.roleList)
// 筛选servicePackageId为"jiuyuan"的角色
const filteredRoles = this.roleList.filter(role =>
role.servicePackageId === 'jiuyuan'
);
// 按id正序排序
filteredRoles.sort((a, b) => a.id - b.id);
// 取第一个
if (filteredRoles.length > 0) {
this.positionName = filteredRoles[0].name;
} else {
this.positionName = ''; // 设置为空,不显示
}
} else {
this.positionName = ''; // 设置为空,不显示
}
},
2024-08-20 20:02:05 +08:00
getone() {
this.one = !this.one
},
//一键救援
getyi() {
uni.navigateTo({
url: '/pages/rescue/order'
})
},
goisAppointment() {
uni.navigateTo({
url: '/pages/rescue/order?isAppointment=1'
})
},
getsx() {
uni.navigateTo({
url: '/pages/Detain/Detain'
})
},
//预约
getyue() {
uni.navigateTo({
url: '/pages/rescue/order'
})
},
godetail(id) {
uni.navigateTo({
url: '/pages/details/details?id=' + id
})
},
gohistory() {
uni.navigateTo({
url: '/pages/rescue/historylist?id=1'
})
}
}
}
</script>
<style scoped lang="scss">
.content {
width: 100%;
height: calc(100vh);
2024-08-22 19:34:47 +08:00
background-color: #F7F8FC;
2024-08-20 20:02:05 +08:00
}
.dil {
2025-08-29 17:13:05 +08:00
// background-color: #F7F8FC;
background-color: #f3f5fc;
2024-08-20 20:02:05 +08:00
box-sizing: border-box;
2025-09-24 10:20:09 +08:00
padding: 0 30rpx;
2024-08-22 19:34:47 +08:00
}
2024-09-06 09:18:25 +08:00
2024-08-22 19:34:47 +08:00
.content-top {
padding: 90rpx 40rpx 0;
2025-08-29 17:13:05 +08:00
// background-color: #327DFB;
background: linear-gradient(to bottom, #2a3eff 40%, #1863fd 100%);
border-bottom-left-radius: 6px;
border-bottom-right-radius: 6px;
2024-08-20 20:02:05 +08:00
}
.top-two {
width: 100%;
display: flex;
justify-content: space-between;
align-items: center;
2025-08-29 17:13:05 +08:00
padding: 20rpx 0;
2024-08-20 20:02:05 +08:00
}
.top-left {
2024-08-23 18:41:57 +08:00
height: 58rpx;
2024-08-20 20:02:05 +08:00
box-sizing: border-box;
2024-08-23 18:41:57 +08:00
// border-radius: 50px;
// background-color: #D1EDFF;
2024-08-20 20:02:05 +08:00
display: flex;
justify-content: space-between;
overflow: hidden;
}
.left1 {
2025-08-06 18:00:28 +08:00
width: 112rpx;
height: 58rpx;
2024-08-23 18:41:57 +08:00
background: rgba(255, 255, 255, 0.2);
border-radius: 200rpx 0rpx 0rpx 200rpx;
font-size: 26rpx;
2024-08-20 20:02:05 +08:00
color: white;
font-weight: 400;
text-align: center;
display: flex;
justify-content: center;
align-items: center;
}
.left2 {
2024-08-23 18:41:57 +08:00
width: 146rpx;
height: 58rpx;
background: #FFFFFF;
border-radius: 0rpx 29rpx 29rpx 0rpx;
font-size: 26rpx;
2024-08-20 20:02:05 +08:00
color: #207EFE;
font-weight: 400;
text-align: center;
display: flex;
justify-content: center;
align-items: center;
}
.top-right {
display: flex;
align-items: center;
2024-08-23 18:41:57 +08:00
font-size: 34rpx;
2024-08-20 20:02:05 +08:00
font-weight: 400;
2024-08-22 19:34:47 +08:00
color: #fff;
2024-08-23 18:41:57 +08:00
line-height: 1;
2025-08-06 18:00:28 +08:00
2024-08-23 18:41:57 +08:00
.top-right-icon {
width: 44rpx;
height: 44rpx;
}
2024-08-20 20:02:05 +08:00
}
2024-09-06 09:18:25 +08:00
2024-08-22 19:34:47 +08:00
.top-menu {
2024-08-20 20:02:05 +08:00
display: flex;
justify-content: space-between;
2025-08-29 17:13:05 +08:00
padding: 30rpx 0rpx 36rpx;
2024-08-22 19:34:47 +08:00
}
2025-08-06 18:00:28 +08:00
2024-08-22 19:34:47 +08:00
.top-menu-item {
color: #fff;
display: flex;
flex-direction: column;
align-items: center;
row-gap: 12rpx;
2024-08-23 18:41:57 +08:00
font-size: 28rpx;
2024-08-22 19:34:47 +08:00
}
2025-08-06 18:00:28 +08:00
2024-08-22 19:34:47 +08:00
.top-menu-item-icon {
width: 60rpx;
height: 60rpx;
}
2024-08-20 20:02:05 +08:00
2024-08-22 19:34:47 +08:00
.four-box-header {
2025-08-29 17:13:05 +08:00
display: flex;
justify-content: start;
align-items: center;
padding: 20rpx 0 10rpx 0;
}
.four-box-header_2 {
width: 100%;
2024-08-22 19:34:47 +08:00
display: flex;
justify-content: space-between;
align-items: center;
2025-08-29 17:13:05 +08:00
padding: 20rpx 0;
}
.four-box-header_2_right {
width: 60%;
display: flex;
justify-content: space-around;
align-items: center;
padding: 20rpx 0;
.tab-item {
font-size: 28rpx;
font-weight: normal;
color: #a1a6aa;
position: relative;
padding: 0rpx 20rpx;
cursor: pointer;
transition: all 0.3s ease;
&.active {
font-weight: bold;
color: #000000;
&::after {
content: '';
position: absolute;
bottom: -10rpx;
left: 50%;
transform: translateX(-50%);
width: 33.33%;
height: 6rpx;
background: linear-gradient(90deg, #054DF3 0%, #55A3FF 100%);
border-radius: 3rpx 3rpx 0 0;
}
}
}
2024-08-22 19:34:47 +08:00
}
2025-08-06 18:00:28 +08:00
2024-08-22 19:34:47 +08:00
.four-box-header-title {
font-weight: bold;
}
2025-08-06 18:00:28 +08:00
2024-08-22 19:34:47 +08:00
.four-box-header-extra {
font-size: 24rpx;
}
2025-08-06 18:00:28 +08:00
2024-08-22 19:34:47 +08:00
.four-box {
2025-08-29 17:13:05 +08:00
display: grid;
grid-template-columns: 1fr 1fr 1fr;
gap: 24rpx;
// margin-top: 15px;
width: 100%;
margin-bottom: 20rpx;
}
/* .two-box {
2024-08-22 19:34:47 +08:00
display: grid;
grid-template-columns: 1fr 1fr;
gap: 24rpx;
// margin-top: 15px;
width: 100%;
2025-08-29 17:13:05 +08:00
} */
.two-box-container {
display: flex;
flex-direction: column;
gap: 20rpx;
width: 100%;
}
.two-box {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 18rpx;
width: 100%;
2024-08-20 20:02:05 +08:00
}
2025-08-29 17:13:05 +08:00
2024-08-20 20:02:05 +08:00
.ques {
2025-09-24 10:20:09 +08:00
width: 100%;
margin: 60rpx auto;
2024-08-20 20:02:05 +08:00
image {
width: 100%;
}
}
.boxf {
2025-08-29 17:13:05 +08:00
height: 130rpx;
2024-08-20 20:02:05 +08:00
overflow: hidden;
box-sizing: border-box;
border-radius: 6px;
padding: 12px;
2025-08-29 17:13:05 +08:00
// background-image: url('~@/static/images/homeOrderCard/dzf.png');
// background: rgba(218, 218, 218, 0.2);
background-color: #fdfeff;
2024-08-20 20:02:05 +08:00
background-size: cover;
background-position: center;
2025-08-06 18:00:28 +08:00
display: flex;
flex-direction: column;
justify-content: center;
2025-08-29 17:13:05 +08:00
// 边框
border: 1px solid #badeff;
// 阴影
box-shadow: inset 0 2px 8px rgba(186, 222, 255, 0.3);
/* border: 1px solid rgba(186, 222, 255, 0.6);
box-shadow:
// 内阴影(顶部微亮)
inset 0 2px 4px rgba(255, 255, 255, 0.4),
// 内阴影(底部微暗)
inset 0 -2px 4px rgba(186, 222, 255, 0.4),
// 外阴影:更轻,更小
0 2px 6px rgba(186, 222, 255, 0.3);
backdrop-filter: blur(10px); */
2024-08-20 20:02:05 +08:00
}
.boxf1 {
2024-08-31 01:20:44 +08:00
height: 140rpx;
2024-08-20 20:02:05 +08:00
overflow: hidden;
box-sizing: border-box;
border-radius: 6px;
padding: 12px;
2025-08-29 17:13:05 +08:00
// background-image: url('~@/static/images/homeOrderCard/dqc.png');
background: rgba(218, 218, 218, 0.2);
2024-08-20 20:02:05 +08:00
background-size: cover;
background-position: center;
2025-08-06 18:00:28 +08:00
display: flex;
flex-direction: column;
justify-content: center;
2024-08-20 20:02:05 +08:00
}
.boxf2 {
2025-08-29 17:13:05 +08:00
height: 120rpx;
2024-08-20 20:02:05 +08:00
overflow: hidden;
box-sizing: border-box;
border-radius: 6px;
2025-08-29 17:13:05 +08:00
padding: 2px 12px 2px 12px;
// padding: 8px;
// background-image: url('~@/static/images/homeOrderCard/jyz.png');
background: rgba(218, 218, 218, 0.2);
2024-08-20 20:02:05 +08:00
background-size: cover;
background-position: center;
2025-08-06 18:00:28 +08:00
display: flex;
flex-direction: column;
justify-content: center;
2024-08-20 20:02:05 +08:00
}
.boxf3 {
2024-08-31 01:20:44 +08:00
height: 140rpx;
2024-08-20 20:02:05 +08:00
overflow: hidden;
box-sizing: border-box;
border-radius: 6px;
padding: 12px;
2025-08-29 17:13:05 +08:00
// background-image: url('~@/static/images/homeOrderCard/ywc.png');
background: rgba(218, 218, 218, 0.2);
2024-08-20 20:02:05 +08:00
background-size: cover;
background-position: center;
2025-08-06 18:00:28 +08:00
display: flex;
flex-direction: column;
justify-content: center;
2024-08-20 20:02:05 +08:00
}
.zi1 {
2024-08-22 19:34:47 +08:00
font-size: 24rpx;
color: #333;
display: flex;
align-items: center;
column-gap: 10rpx;
2025-08-06 18:00:28 +08:00
2024-08-22 19:34:47 +08:00
.zi1-icon {
width: 38rpx;
height: 38rpx;
}
2024-08-20 20:02:05 +08:00
}
2025-08-29 17:13:05 +08:00
.zi1_1 {
font-size: 24rpx;
color: #333;
display: flex;
align-items: center;
column-gap: 10rpx;
.zi1_1-icon {
width: 38rpx;
height: 38rpx;
}
}
2024-08-20 20:02:05 +08:00
.zi2 {
width: 100%;
2024-08-22 19:34:47 +08:00
font-size: 40rpx;
2024-08-20 20:02:05 +08:00
font-weight: bold;
2024-08-22 19:34:47 +08:00
color: #000;
2024-08-20 20:02:05 +08:00
}
2025-08-29 17:13:05 +08:00
.zi2_2 {
width: 100%;
font-size: 30rpx;
font-weight: bold;
color: #000;
}
2024-08-20 20:02:05 +08:00
.box-tap {
width: 100%;
display: flex;
align-items: center;
justify-content: space-between;
margin-top: 25px;
}
.tap-left {
display: flex;
}
.tap-right {
display: flex;
align-items: center;
}
.zi3 {
font-size: 14px;
font-weight: 400;
color: #666666;
}
.left-img1 {
width: 65px;
height: 15px;
margin-right: 20px;
// smargin-bottom: 10px;
image {
width: 100%;
height: 100%;
}
}
.gang {
width: 60px;
height: 5px;
border-radius: 50px;
margin-top: 6px;
background: linear-gradient(87deg, #B6E1FF 0%, #339DFF 100%);
}
2025-08-06 18:00:28 +08:00
.tap-box {}
2024-08-20 20:02:05 +08:00
.boxt {
// height: 110px;
width: 100%;
background-color: white;
border-radius: 6px;
margin-top: 14px;
overflow: hidden;
display: flex;
box-sizing: border-box;
padding-bottom: 15px;
}
.boxt-left {
width: 100%;
height: 100%;
}
.left-lan {
width: 50px;
height: 25px;
display: flex;
justify-content: center;
align-items: center;
background-color: #207EFE;
font-size: 14px;
color: white;
border-radius: 0px 0px 6px 0px;
}
.text1 {
margin-left: 24px;
margin-top: 5px;
color: #333333;
font-size: 16px;
font-weight: bold;
color: #333333;
}
.lanzi {
font-weight: bold;
color: #4C98FF;
}
.text2 {
margin-left: 24px;
margin-top: 5px;
color: #333333;
font-size: 16px;
font-weight: 400;
color: #333333;
}
.boxt-right {
width: 50%;
height: 100%;
position: relative;
}
.zhtai {
position: absolute;
top: 10px;
right: 10px;
width: 60px;
height: 25px;
box-sizing: border-box;
background: #FFD7D7;
border-radius: 4px;
display: flex;
justify-content: center;
align-items: center;
color: #FF4C4C;
font-size: 14px;
}
.zhtait {
position: absolute;
top: 50px;
right: 10px;
width: 60px;
height: 25px;
box-sizing: border-box;
background: #d5e8ff;
border-radius: 4px;
display: flex;
justify-content: center;
align-items: center;
color: #53b5ff;
font-size: 14px;
}
.dianhua {
position: absolute;
bottom: -120px;
right: 10px;
display: flex;
font-size: 14px;
font-weight: 400;
color: #3289FF;
}
.dianhuad {
display: flex;
font-size: 14px;
font-weight: 400;
color: #ff1d3b;
}
.ticon {
width: 12px;
height: 13px;
margin-right: 5px;
image {
width: 100%;
height: 100%;
}
}
.yijian {
width: 100%;
overflow: hidden;
display: flex;
justify-content: space-between;
align-items: center;
border-radius: 10px;
height: 40px;
font-size: 16px;
2024-08-22 19:34:47 +08:00
background: #327DFB;
color: #fff;
margin-top: 30rpx;
2024-08-20 20:02:05 +08:00
}
.y-left {
display: flex;
justify-content: center;
align-items: center;
width: 100%;
height: 100%;
border-radius: 10px;
2024-08-22 19:34:47 +08:00
background: #327DFB;
2024-08-20 20:02:05 +08:00
}
.y-right {
width: 30%;
height: 100%;
display: flex;
justify-content: center;
align-items: center;
}
.kou {
position: fixed;
right: 5px;
bottom: 80px;
width: 60px;
height: 60px;
border-radius: 50%;
overflow: hidden;
z-index: 99;
image {
width: 100%;
height: 100%;
}
}
.box {
box-sizing: border-box;
display: flex;
justify-content: space-between;
flex-wrap: wrap;
}
2024-08-22 20:13:57 +08:00
// .xz-box {
// height: 80px;
// width: 48%;
// display: flex;
// justify-content: center;
// align-items: center;
// font-size: 16px;
// font-weight: 400;
// color: #FFFFFF;
// background-size: cover;
// background-position: center;
// margin-top: 20px;
// }
2024-08-20 20:02:05 +08:00
.xz-box {
2024-08-22 20:13:57 +08:00
width: 330rpx;
height: 396rpx;
background: #FFFFFF;
box-shadow: 0rpx 4rpx 8rpx 0rpx rgba(0, 0, 0, 0.06);
border-radius: 16rpx;
2024-08-20 20:02:05 +08:00
display: flex;
2024-08-22 20:13:57 +08:00
flex-direction: column;
2024-08-20 20:02:05 +08:00
justify-content: center;
align-items: center;
font-size: 16px;
font-weight: 400;
color: #FFFFFF;
2024-08-22 20:13:57 +08:00
margin-top: 36rpx;
transition: all ease 400ms;
overflow: hidden;
2024-09-06 09:18:25 +08:00
2024-08-22 20:13:57 +08:00
.checkedFlagIcon {
display: none;
}
2024-09-06 09:18:25 +08:00
2024-08-22 20:13:57 +08:00
&.checked {
box-sizing: border-box;
position: relative;
border: 2rpx solid #478AFA;
2024-09-06 09:18:25 +08:00
2024-08-22 20:13:57 +08:00
.checkedFlag {
background-color: #478AFA;
width: 120rpx;
height: 120rpx;
position: absolute;
right: -60rpx;
bottom: -60rpx;
transform: rotate(45deg);
z-index: 1;
}
2024-09-06 09:18:25 +08:00
2024-08-22 20:13:57 +08:00
.checkedFlagIcon {
display: inline-block;
position: absolute;
z-index: 2;
bottom: 0;
right: 0;
}
}
2024-09-06 09:18:25 +08:00
2024-08-22 20:13:57 +08:00
.xz-box-icon {
width: 130rpx;
height: 130rpx;
margin-bottom: 26rpx;
}
2024-09-06 09:18:25 +08:00
2024-08-22 20:13:57 +08:00
.box-wenzi {
font-size: 28rpx;
color: #000000;
}
2024-08-20 20:02:05 +08:00
}
#y1 {
background-image: url('../../static/tc.png');
}
#y2 {
background-image: url('../../static/sy.png');
}
#y3 {
background-image: url('../../static/dd.png');
}
#y4 {
background-image: url('../../static/ht.png');
}
#y5 {
background-image: url('../../static/kc.png');
}
.box_ {
width: 320px;
border-radius: 8px;
box-sizing: border-box;
padding: 15px;
background: white;
}
.title_ {
width: 100%;
text-align: center;
margin-bottom: 10px;
font-size: 17px;
font-weight: bold;
}
.size_ {
font-size: 16px;
color: #666;
margin: 5px 0px;
text-align: center;
}
.annaiu {
width: 100%;
height: 60px;
border-top: 1px solid #f3f3f3;
box-sizing: border-box;
padding-top: 10px;
display: flex;
align-items: center;
justify-content: center;
font-size: 16px;
color: #244ec6;
}
2025-08-29 17:13:05 +08:00
.user-info {
display: flex;
flex-direction: column;
.user-name {
font-size: 30rpx;
font-weight: bold;
color: #fff;
line-height: 1.2;
}
.user-position {
font-size: 24rpx;
color: rgba(255, 255, 255, 0.8);
line-height: 1.2;
}
}
/* .real-time {
font-size: 28rpx;
color: #fff;
background: rgba(255, 255, 255, 0.2);
padding: 8rpx 16rpx;
border-radius: 40rpx;
} */
.real-time {
display: flex;
align-items: center;
font-size: 26rpx;
color: #fff;
background: rgba(255, 255, 255, 0.2);
// background-color: #7d91ff;
// padding: 8rpx 0;
border-radius: 40rpx;
overflow: hidden;
}
.date-part {
padding: 14rpx 16rpx;
}
.time-part {
padding: 14rpx 20rpx 14rpx 12rpx;
background: #fff;
color: #327DFB;
border-radius: 0 40rpx 40rpx 0;
}
.tab-choose-class {
display: flex;
align-items: center;
justify-content: space-between;
padding: 4rpx 20rpx 16rpx 20rpx;
border-top: 1rpx solid #F5F5F5;
.tab-content {
font-size: 28rpx;
display: flex;
flex-direction: column;
align-items: center;
.tab-name-class {
display: flex;
align-items: center;
.icon-tab {
display: flex;
align-items: center;
justify-content: center;
width: 32rpx;
height: 32rpx;
image {
width: 100%;
height: 100%;
}
}
}
}
.tab-icon {
width: 66rpx;
height: 8rpx;
margin-top: 8rpx;
}
}
.eye-icon {
2025-09-24 10:20:09 +08:00
transform: scale(1.5);
padding: 10rpx;
2025-08-29 17:13:05 +08:00
color: #929292;
}
.blue-line {
width: 8rpx;
height: 32rpx;
background: #054DF3;
border-radius: 4rpx;
margin-right: 20rpx;
}
.bqing_ {
border-radius: 16rpx;
border: 3rpx solid #FFFFFF;
box-sizing: border-box;
color: #FFFFFF;
font-size: 24rpx;
padding: 3px 5px;
margin-top: 5px;
}
// 添加logo样式
.user-name-container {
display: flex;
align-items: center;
gap: 12rpx;
}
.logo-icon {
width: 120rpx;
height: 100rpx;
border-radius: 20%;
margin-right: 20rpx;
}
2025-09-24 10:20:09 +08:00
// 悬浮刷新按钮
.floating-refresh-btn {
position: fixed;
right: 30rpx;
bottom: 180rpx; // 位于底部导航栏上方
width: 100rpx;
height: 100rpx;
background-color: rgba(50, 125, 251, 0.7); // 半透明蓝色
border-radius: 50%;
display: flex;
justify-content: center;
align-items: center;
// box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.2);
z-index: 999;
transition: transform 0.3s, background-color 0.3s;
// 点击效果
&:active {
background-color: rgba(50, 125, 251, 0.9);
transform: scale(0.95);
}
// 旋转动画
&.rotating {
animation: rotate 1s linear infinite;
}
}
// 旋转动画关键帧
@keyframes rotate {
from {
transform: rotate(0deg);
}
to {
transform: rotate(360deg);
}
}
.loading-container {
/* position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: rgba(255, 255, 255, 0.9); */
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
z-index: 9999;
}
.loading-spinner {
position: relative;
width: 60px;
height: 60px;
border: 4px solid #f3f3f3;
border-top: 4px solid #327DFB;
border-radius: 50%;
animation: spin 1s linear infinite;
margin-bottom: 15px;
display: flex;
justify-content: center;
align-items: center;
}
.loading-text {
font-size: 16px;
color: #666;
}
.loading-icon {
width: 35px;
height: 35px;
position: absolute;
}
@keyframes spin {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
</style>