.map-container { position: relative; width: 100%; height: 100vh; background-color: #f5f5f5; } /* 用户登录控制区 */ .user-controls { position: absolute; top: 20rpx; right: 20rpx; z-index: 10; } .login-btn { background-color: #1aad19; color: white; font-size: 32rpx; padding: 20rpx 40rpx; border-radius: 40rpx; border: none; font-weight: bold; box-shadow: 0 4rpx 12rpx rgba(26, 173, 25, 0.3); } .login-btn:active { background-color: #179b16; transform: scale(0.98); } /* 未登录提示 */ .not-logged-in-tip { position: absolute; top: 120rpx; right: 20rpx; background-color: rgba(255, 255, 255, 0.95); color: #333; font-size: 26rpx; padding: 15rpx 25rpx; border-radius: 15rpx; box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.1); max-width: 500rpx; z-index: 9; } .user-avatar-small { width: 80rpx; height: 80rpx; border-radius: 50%; overflow: hidden; position: relative; } .avatar-image-small { width: 100%; height: 100%; } /* 管理员徽章 */ .admin-badge { position: absolute; top: -10rpx; right: -10rpx; background-color: #ff4d4f; color: white; font-size: 20rpx; padding: 5rpx 10rpx; border-radius: 15rpx; min-width: 50rpx; text-align: center; } /* 主地图组件 */ .map { width: 100%; height: 100%; } /* 地图功能按钮 */ .map-controls { position: absolute; bottom: 200rpx; right: 30rpx; z-index: 10; display: flex; flex-direction: column; gap: 20rpx; } /* 右侧控制按钮容器 */ .right-controls-container { position: absolute; top: 20rpx; right: 30rpx; z-index: 10; display: flex; flex-direction: column; gap: 20rpx; } .control-btn { width: 80rpx; height: 80rpx; background-color: white; border-radius: 50%; display: flex; align-items: center; justify-content: center; box-shadow: 0 2rpx 10rpx rgba(0, 0, 0, 0.1); } .control-btn image { width: 40rpx; height: 40rpx; } /* 测试底部弹窗按钮 */ .test-modal-btn { background-color: #1890ff; color: white; } .test-modal-btn text { font-size: 24rpx; text-align: center; font-weight: bold; } /* 底部弹窗内容 */ .modal-content { padding: 30rpx; background-color: #fff; border-radius: 30rpx; overflow: hidden; position: relative; z-index: 1; } /* 头部信息样式 */ .modal-header { margin-bottom: 20rpx; } .modal-title { font-size: 36rpx; font-weight: bold; margin-bottom: 10rpx; color: #333; } .modal-subtitle { font-size: 28rpx; color: #666; margin-bottom: 20rpx; } /* 基础信息区域 */ .modal-basic-info { margin-bottom: 20rpx; } /* 详情信息区域 */ .modal-detail-info { transition: all 0.3s ease-in-out; } /* 货运人员头部样式 */ .delivery-person-header { display: flex; align-items: center; gap: 20rpx; margin-bottom: 20rpx; } .delivery-person-avatar { width: 120rpx; height: 120rpx; border-radius: 50%; overflow: hidden; background-color: #f5f5f5; } .delivery-person-avatar image { width: 100%; height: 100%; } .person-info-header { flex: 1; } /* 信息项样式 */ .detail-item { display: flex; justify-content: space-between; align-items: center; padding: 16rpx 0; border-bottom: 1rpx solid #f0f0f0; } .detail-item:last-child { border-bottom: none; } .detail-label { font-size: 28rpx; color: #666; } .detail-value { font-size: 28rpx; color: #333; text-align: right; } /* 状态徽章样式 */ .status-badge { padding: 6rpx 20rpx; border-radius: 20rpx; font-size: 24rpx; font-weight: 500; } .status-idle { background-color: #e6f7ff; color: #1890ff; } .status-busy { background-color: #fff2e8; color: #fa8c16; } .status-delivering { background-color: #f6ffed; color: #52c41a; } .status-offline { background-color: #f5f5f5; color: #8c8c8c; } /* 分割线样式 */ .section-divider { height: 1rpx; background-color: #f0f0f0; margin: 20rpx 0; } .modal-features { margin-bottom: 40rpx; flex: 1; } .feature-item { font-size: 26rpx; color: #333; margin-bottom: 15rpx; line-height: 1.5; } .modal-footer { margin-top: auto; } .btn-confirm { background-color: #1890ff; color: white; font-size: 28rpx; border-radius: 50rpx; margin-top: 20rpx; } /* 位置信息显示 */ .location-info { position: absolute; bottom: 80rpx; left: 30rpx; background-color: rgba(255, 255, 255, 0.8); padding: 15rpx 20rpx; border-radius: 10rpx; font-size: 24rpx; z-index: 10; max-width: 600rpx; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } /* 通用面板样式 */ .user-panel, .delivery-person-panel, .order-panel { position: absolute; background-color: white; border-radius: 24rpx; box-shadow: 0 8rpx 30rpx rgba(0, 0, 0, 0.2); z-index: 100; width: 680rpx; max-height: 800rpx; overflow-y: auto; transform: scale(0.95); opacity: 0; animation: panelShow 0.3s ease-out forwards; } /* 面板显示动画 */ @keyframes panelShow { to { transform: scale(1); opacity: 1; } } .panel-header, .user-panel-header { display: flex; justify-content: space-between; align-items: center; padding: 30rpx 30rpx 20rpx; border-bottom: 1rpx solid #f0f0f0; } .panel-title, .user-panel-title { font-size: 36rpx; font-weight: 600; color: #222; } .close-btn { font-size: 48rpx; color: #999; width: 48rpx; height: 48rpx; display: flex; align-items: center; justify-content: center; border-radius: 50%; transition: all 0.2s; } .close-btn:active { color: #666; background-color: #f5f5f5; } .panel-content, .user-panel-content { padding: 20rpx 30rpx 30rpx; } /* 用户信息面板 */ .user-panel { top: 50%; left: 50%; transform: translate(-50%, -50%); } .user-avatar { width: 160rpx; height: 160rpx; border-radius: 50%; overflow: hidden; margin: 0 auto 20rpx; } .avatar-image { width: 100%; height: 100%; } .user-info { text-align: center; } .user-name { font-size: 34rpx; font-weight: 600; color: #222; margin-bottom: 12rpx; display: block; letter-spacing: 1rpx; } .user-id, .user-gender, .user-role { font-size: 26rpx; color: #666; margin-bottom: 8rpx; display: block; line-height: 1.5; } /* 货运人员信息面板 */ .delivery-person-panel { width: 680rpx; max-height: 80vh; border-radius: 24rpx; } .delivery-person-info { display: flex; gap: 20rpx; margin-bottom: 30rpx; padding-bottom: 20rpx; border-bottom: 1rpx solid #eee; } /* 新的货运人员信息布局 */ .delivery-person-info-new { display: flex; justify-content: space-between; align-items: flex-start; margin-bottom: 30rpx; padding-bottom: 20rpx; border-bottom: 1rpx solid #eee; } .info-details-left { flex: 1; margin-right: 20rpx; } .delivery-person-avatar-right { width: 60rpx; height: 60rpx; border-radius: 50%; overflow: hidden; flex-shrink: 0; box-shadow: 0 4rpx 10rpx rgba(0, 0, 0, 0.1); } .delivery-person-avatar { width: 60rpx; height: 60rpx; border-radius: 50%; overflow: hidden; flex-shrink: 0; } .delivery-person-avatar image { width: 100%; height: 100%; } .info-details { flex: 1; } .delivery-person-name { font-size: 32rpx; font-weight: 600; color: #222; margin-bottom: 12rpx; display: block; letter-spacing: 1rpx; } .delivery-person-phone, .delivery-person-status, .delivery-person-location { font-size: 24rpx; color: #666; margin-bottom: 8rpx; display: block; line-height: 1.5; } .delivery-person-status { color: #07c160; font-weight: 500; } /* 订单列表样式 - 仅保留一个版本 */ .orders-section, .assign-section { margin-bottom: 20rpx; } /* 订单滑动视图 */ .orders-scroll-view, .pending-orders-scroll-view { border-radius: 12rpx; background-color: #f9f9f9; padding: 10rpx; } /* 订单列表项 */ .order-item { background-color: white; padding: 20rpx; border-radius: 12rpx; margin-bottom: 10rpx; transition: all 0.2s; border: 1rpx solid transparent; box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.05); } .order-item:active { background-color: #f0f0f0; transform: scale(0.98); box-shadow: 0 1rpx 4rpx rgba(0, 0, 0, 0.05); } .section-title { font-size: 28rpx; font-weight: 600; color: #222; margin-bottom: 15rpx; display: block; padding-left: 10rpx; border-left: 6rpx solid #07c160; } .orders-list, .pending-orders-list { display: flex; flex-direction: column; gap: 15rpx; } .order-basic-info { display: flex; justify-content: space-between; align-items: center; margin-bottom: 10rpx; } .order-id { font-size: 26rpx; color: #333; } .order-status { font-size: 22rpx; color: white; background-color: #07c160; padding: 4rpx 12rpx; border-radius: 15rpx; } .order-route-info { font-size: 24rpx; color: #666; } .route-text { font-size: 24rpx; color: #666; } /* 待指派订单样式 */ .pending-order-item { background-color: #fff9e6; padding: 20rpx; border-radius: 12rpx; border: 1rpx solid #ffd700; transition: all 0.2s; } .pending-order-item:active { transform: scale(0.98); } .pending-order-info { display: flex; justify-content: space-between; align-items: center; } .pending-order-route { font-size: 24rpx; color: #666; flex: 1; margin-right: 10rpx; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .assign-btn { font-size: 24rpx; min-width: 120rpx; background-color: #07c160; color: white; border: none; border-radius: 8rpx; transition: all 0.2s; } .assign-btn:active { background-color: #06b356; transform: scale(0.95); } /* 订单详情面板 */ .order-panel { width: 680rpx; max-height: 900rpx; } .order-details { display: flex; flex-direction: column; gap: 20rpx; } .order-basic-details { display: flex; justify-content: space-between; align-items: center; padding-bottom: 15rpx; border-bottom: 1rpx solid #eee; } .order-detail-id { font-size: 28rpx; font-weight: bold; color: #333; } .order-detail-status { font-size: 24rpx; color: white; background-color: #1989fa; padding: 6rpx 15rpx; border-radius: 15rpx; } /* 路线点信息 */ .route-point-info { padding: 20rpx; background-color: #f9f9f9; border-radius: 12rpx; transition: all 0.2s; position: relative; } .route-point-info::before { content: ''; position: absolute; left: 20rpx; top: 40rpx; width: 12rpx; height: 12rpx; border-radius: 50%; background-color: #07c160; } .route-point-label { font-size: 26rpx; font-weight: bold; color: #333; margin-bottom: 10rpx; display: block; } .route-point-details { display: flex; flex-direction: column; gap: 8rpx; } .route-point-name { font-size: 24rpx; color: #333; font-weight: bold; } .route-point-address { font-size: 22rpx; color: #666; line-height: 1.3; } .route-point-coordinate { font-size: 20rpx; color: #999; } /* 货物信息 */ .cargo-info { padding: 15rpx; background-color: #f0f9ff; border-radius: 10rpx; } .cargo-info-label { font-size: 26rpx; font-weight: bold; color: #333; margin-bottom: 10rpx; display: block; } .cargo-info-detail { font-size: 24rpx; color: #666; margin-bottom: 8rpx; display: block; } /* 遮罩层样式 */ .overlay { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background-color: rgba(0, 0, 0, 0.4); z-index: 90; backdrop-filter: blur(4rpx); animation: fadeIn 0.2s ease-out; } /* 淡入动画 */ @keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } } /* 取消路线按钮 */ .cancel-route-btn { position: absolute; bottom: 20rpx; right: 20rpx; background-color: #ff4d4f; color: white; padding: 12rpx 24rpx; border-radius: 20rpx; font-size: 24rpx; box-shadow: 0 2rpx 8rpx rgba(255, 77, 79, 0.3); transition: all 0.2s; min-width: 120rpx; text-align: center; } .cancel-route-btn:active { background-color: #ff7875; transform: scale(0.95); } /* 滚动条样式 */ ::-webkit-scrollbar { width: 8rpx; height: 8rpx; } ::-webkit-scrollbar-track { background: #f1f1f1; border-radius: 4rpx; } ::-webkit-scrollbar-thumb { background: #ccc; border-radius: 4rpx; } ::-webkit-scrollbar-thumb:hover { background: #aaa; } /* 修改昵称按钮样式 */ .btn-change-nickname { background-color: #f0f0f0; color: #333; font-size: 24rpx; padding: 10rpx 30rpx; margin-top: 15rpx; border: none; border-radius: 20rpx; font-weight: normal; } .btn-change-nickname:active { background-color: #e0e0e0; } /* 昵称修改对话框样式 */ .dialog-overlay { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background-color: rgba(0, 0, 0, 0.5); display: flex; align-items: center; justify-content: center; z-index: 9999; animation: fadeIn 0.3s ease-out; } @keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } } .dialog-container { width: 600rpx; background-color: white; border-radius: 24rpx; box-shadow: 0 8rpx 30rpx rgba(0, 0, 0, 0.3); transform: scale(0.9); opacity: 0; animation: scaleIn 0.3s ease-out forwards; } @keyframes scaleIn { to { transform: scale(1); opacity: 1; } } .dialog-header { display: flex; justify-content: space-between; align-items: center; padding: 30rpx 30rpx 20rpx; border-bottom: 1rpx solid #f0f0f0; } .dialog-title { font-size: 36rpx; font-weight: 600; color: #222; } .dialog-content { padding: 30rpx; } .nickname-input { width: 100%; height: 80rpx; border: 1rpx solid #ddd; border-radius: 10rpx; padding: 0 20rpx; font-size: 30rpx; box-sizing: border-box; } .nickname-input:focus { border-color: #07c160; outline: none; } .dialog-tip { display: block; font-size: 24rpx; color: #999; margin-top: 15rpx; } .dialog-footer { display: flex; justify-content: space-between; padding: 20rpx 30rpx 30rpx; gap: 20rpx; } .dialog-footer .btn-cancel, .dialog-footer .btn-confirm { flex: 1; height: 80rpx; line-height: 80rpx; border-radius: 10rpx; font-size: 32rpx; display: flex; align-items: center; justify-content: center; } .dialog-footer .btn-cancel { background-color: #f5f5f5; color: #333; } .dialog-footer .btn-confirm { background-color: #07c160; color: white; } /* 申请对话框样式 - 优化版 */ .apply-dialog-overlay { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background-color: rgba(0, 0, 0, 0.7); display: flex; justify-content: center; align-items: center; z-index: 10000; /* 提高层级,确保在最顶层 */ animation: fadeIn 0.3s ease; } .apply-dialog-container { background: linear-gradient(135deg, #ffffff 0%, #f8f9fa 100%); border-radius: 24rpx; width: 680rpx; max-width: 85vw; max-height: 80vh; box-shadow: 0 20rpx 60rpx rgba(0, 0, 0, 0.3); overflow: hidden; display: flex; flex-direction: column; animation: slideUp 0.4s ease; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); } .apply-dialog-header { padding: 40rpx 40rpx 20rpx; background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white; position: relative; text-align: center; } .apply-dialog-title { font-size: 36rpx; font-weight: 600; margin-bottom: 10rpx; display: block; } .apply-dialog-subtitle { font-size: 26rpx; opacity: 0.9; display: block; } .apply-dialog-actions { position: absolute; top: 30rpx; right: 30rpx; display: flex; gap: 15rpx; align-items: center; } .fullscreen-toggle { width: 50rpx; height: 50rpx; border-radius: 50%; background: rgba(255, 255, 255, 0.2); display: flex; align-items: center; justify-content: center; font-size: 28rpx; color: white; transition: all 0.3s ease; } .fullscreen-toggle:active { background: rgba(255, 255, 255, 0.3); transform: scale(0.95); } .apply-close-btn { width: 50rpx; height: 50rpx; border-radius: 50%; background: rgba(255, 255, 255, 0.2); display: flex; align-items: center; justify-content: center; font-size: 32rpx; color: white; transition: all 0.3s ease; } .apply-close-btn:active { background: rgba(255, 255, 255, 0.3); transform: scale(0.95); } .apply-dialog-content { flex: 1; max-height: 400rpx; padding: 40rpx; } .apply-form { display: flex; flex-direction: column; gap: 40rpx; align-items: center; } .apply-form-group { position: relative; } .apply-form-label { display: block; font-size: 30rpx; font-weight: 500; color: #2d3748; margin-bottom: 20rpx; } .apply-form-input { width: 100%; height: 90rpx; border: none; border-radius: 12rpx; padding: 0 25rpx; font-size: 30rpx; background: #f7fafc; box-sizing: border-box; transition: all 0.3s ease; } .apply-form-input:focus { background: #edf2f7; box-shadow: 0 0 0 3rpx rgba(66, 153, 225, 0.3); } .apply-form-placeholder { color: #a0aec0 !important; font-size: 28rpx; } .apply-form-underline { height: 2rpx; background: linear-gradient(90deg, #667eea 0%, #764ba2 100%); margin-top: 5rpx; transform: scaleX(0); transition: transform 0.3s ease; } .apply-form-input:focus + .apply-form-underline { transform: scaleX(1); } .apply-dialog-footer { padding: 30rpx 40rpx 40rpx; display: flex; gap: 20rpx; background: #f8f9fa; border-top: 1rpx solid #e2e8f0; } .apply-btn-cancel { flex: 1; height: 80rpx; background: #e2e8f0; color: #4a5568; border: none; border-radius: 12rpx; font-size: 30rpx; font-weight: 500; transition: all 0.3s ease; } .apply-btn-cancel:active { background: #cbd5e0; transform: translateY(2rpx); } .apply-btn-confirm { flex: 1; height: 80rpx; background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white; border: none; border-radius: 12rpx; font-size: 30rpx; font-weight: 500; transition: all 0.3s ease; } .apply-btn-confirm:active { transform: translateY(2rpx); box-shadow: 0 4rpx 12rpx rgba(102, 126, 234, 0.4); } /* 全屏模式样式 */ .fullscreen-overlay { background-color: rgba(0, 0, 0, 0.9); padding: 0; } .fullscreen-dialog { width: 100vw; height: 100vh; max-width: none; max-height: none; border-radius: 0; animation: none; position: fixed; top: 0; left: 0; transform: none; } .fullscreen-dialog .apply-dialog-header { padding: 60rpx 40rpx 30rpx; background: linear-gradient(135deg, #4a5568 0%, #2d3748 100%); } .fullscreen-dialog .apply-dialog-title { font-size: 42rpx; } .fullscreen-dialog .apply-dialog-subtitle { font-size: 32rpx; } .fullscreen-dialog .apply-dialog-content { max-height: none; flex: 1; padding: 60rpx 40rpx; } .fullscreen-dialog .apply-form { gap: 60rpx; } .fullscreen-dialog .apply-form-label { font-size: 36rpx; margin-bottom: 30rpx; } .fullscreen-dialog .apply-form-input { height: 120rpx; font-size: 36rpx; border-radius: 16rpx; } .fullscreen-dialog .apply-dialog-footer { padding: 40rpx 60rpx 60rpx; } .fullscreen-dialog .apply-btn-cancel, .fullscreen-dialog .apply-btn-confirm { height: 100rpx; font-size: 36rpx; border-radius: 16rpx; } /* 动画效果 */ @keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } } @keyframes slideUp { from { opacity: 0; transform: translateY(50rpx) scale(0.95); } to { opacity: 1; transform: translateY(0) scale(1); } } /* 底部栏样式 - 占据界面四分之一并可滑动全屏 */ .bottom-bar { position: fixed; bottom: 0; left: 0; right: 0; height: 25vh; /* 初始高度为界面的四分之一 */ background-color: white; border-top-left-radius: 12px; border-top-right-radius: 12px; box-shadow: 0 -2px 10px rgba(0, 0, 0, 0.1); z-index: 9999; /* 提高层级确保在地图之上 */ overflow: hidden; transform: translateZ(0); /* 创建新的渲染层 */ -webkit-transform: translateZ(0); /* 兼容微信小程序 */ transition: height 0.3s ease-in-out; /* 平滑过渡动画 */ } /* 基础底部栏样式 */ .bottom-bar-basic { padding: 16px; position: relative; height: 100%; } .bottom-bar-content { padding-right: 30px; } .bottom-bar-title { font-size: 18px; font-weight: bold; color: #333; margin-bottom: 4px; } .bottom-bar-subtitle { font-size: 14px; color: #666; margin-bottom: 2px; } .bottom-bar-info { font-size: 14px; color: #999; } .bottom-bar-toggle { position: absolute; top: 50%; right: 16px; transform: translateY(-50%); width: 24px; height: 24px; display: flex; align-items: center; justify-content: center; } .toggle-icon { width: 12px; height: 6px; background-color: #999; border-radius: 3px; transition: all 0.3s; } /* 全屏展开样式 */ .bottom-bar.fullscreen { height: 100vh; /* 全屏高度 */ } .bottom-bar-fullscreen { height: 100%; background-color: white; overflow: hidden; } .fullscreen-content { height: 100%; display: flex; flex-direction: column; } .fullscreen-header { padding: 16px; border-bottom: 1px solid #eee; } .fullscreen-title { font-size: 20px; font-weight: bold; color: #333; } .fullscreen-body { flex: 1; overflow-y: auto; padding: 16px; } /* 向上滑动提示 */ .slide-hint { text-align: center; color: #999; font-size: 24rpx; margin-top: 20rpx; padding-top: 20rpx; border-top: 1rpx solid #f0f0f0; animation: pulse 2s infinite; position: relative; } .slide-hint::after { content: ''; position: absolute; bottom: -30rpx; left: 50%; transform: translateX(-50%); width: 60rpx; height: 10rpx; background-color: #e0e0e0; border-radius: 5rpx; } /* 订单区域样式 */ .orders-section { margin-top: 20rpx; } .section-title { font-size: 32rpx; font-weight: bold; color: #333; margin-bottom: 20rpx; } .orders-scroll-view { height: 300rpx; } .orders-list { padding: 0 10rpx; } .order-item { padding: 20rpx 0; border-bottom: 1rpx solid #f0f0f0; } .order-item:last-child { border-bottom: none; } .order-route-info { margin-bottom: 10rpx; } .route-text { font-size: 28rpx; color: #333; } .order-cargo-info { margin-top: 10rpx; } .cargo-text { font-size: 26rpx; color: #666; } /* 待指派订单样式 */ .assign-section { margin-top: 20rpx; } .pending-orders-scroll-view { height: 300rpx; } .pending-orders-list { padding: 0 10rpx; } .pending-order-item { padding: 20rpx 0; border-bottom: 1rpx solid #f0f0f0; } .pending-order-item:last-child { border-bottom: none; } .pending-order-info { display: flex; justify-content: space-between; align-items: center; } .pending-order-route { font-size: 28rpx; color: #333; flex: 1; margin-right: 20rpx; } .assign-btn { font-size: 24rpx; padding: 0 30rpx; } /* 仓库弹窗外部样式类 */ .warehouse-modal-content { padding: 30rpx; background-color: #fff; border-radius: 30rpx; overflow: hidden; position: relative; z-index: 100; } /* 货运人员弹窗外部样式类 */ .delivery-modal-content { padding: 30rpx; background-color: #fff; border-radius: 30rpx; overflow: hidden; position: relative; z-index: 100; } @keyframes pulse { 0% { opacity: 0.7; } 50% { opacity: 1; } 100% { opacity: 0.7; } } /* 员工管理按钮样式 */ .staff-management-btn { width: 80rpx; height: 80rpx; border-radius: 50%; background-color: white; display: flex; align-items: center; justify-content: center; box-shadow: 0 2rpx 10rpx rgba(0, 0, 0, 0.1); } .staff-management-btn:active { background-color: #f5f5f5; transform: scale(0.98); } .staff-management-btn image { width: 40rpx; height: 40rpx; }