diff --git a/components/categoryList/CategoryList.vue b/components/categoryList/CategoryList.vue new file mode 100644 index 0000000..89a7538 --- /dev/null +++ b/components/categoryList/CategoryList.vue @@ -0,0 +1,169 @@ + + + + + \ No newline at end of file diff --git a/pages.json b/pages.json index e03e158..8a11ee4 100644 --- a/pages.json +++ b/pages.json @@ -256,6 +256,12 @@ "navigationBarTitleText": "", "navigationStyle": "custom" } + }, + { + "path": "pages/my/classificationInfo", + "style": { + "navigationBarTitleText": "" + } } /* , { diff --git a/pages/login/login.vue b/pages/login/login.vue index 28473f3..002ad57 100644 --- a/pages/login/login.vue +++ b/pages/login/login.vue @@ -379,6 +379,18 @@ }) }, goselect() { + console.log('执行去救援', this.sfindex); + if (this.sfindex == 'police') { + uni.reLaunch({ + url: '/pages/rescue/trafficPolice' + }) + } else { + uni.reLaunch({ + url: '/pages/my/my' + }) + } + }, + /* goselect() { console.log('执行去救援', this.sfindex); // pages/rescue/trafficPolice if (this.sfindex == 'police') { @@ -395,10 +407,8 @@ url: '/pages/my/my' }) } - } - - }, + }, */ // 验证码方法 sendVerificationCode() { let reg = /^((13[0-9])|(14[0-9])|(15[0-9])|(17[0-9])|(18[0-9]))\d{8}$/; diff --git a/pages/my/StatisticsInfo.vue b/pages/my/StatisticsInfo.vue index 77af881..483d9c2 100644 --- a/pages/my/StatisticsInfo.vue +++ b/pages/my/StatisticsInfo.vue @@ -1,206 +1,1647 @@ - + + .tab-item.active { + font-weight: bold; + border-bottom: 3px solid #fff; + opacity: 1; + } + + .filter-btn { + font-size: 14px; + } + + /* 统计卡片 */ + /* .stat-cards { + display: flex; + justify-content: space-around; + margin: 14rpx 0; + } */ + + .stat-card { + background: #fff; + border-radius: 12rpx; + padding: 4rpx; + flex: 1; + margin: 0 16rpx; + text-align: center; + box-shadow: 0 4rpx 10rpx rgba(0, 0, 0, 0.05); + } + + .stat-num { + font-size: 20px; + font-weight: bold; + color: #333; + } + + .stat-label { + display: block; + margin-top: 6px; + color: #666; + font-size: 14px; + } + + /* 搜索和时间筛选区域 */ + .search-filter-area { + background: #fff; + margin: 0 20rpx; + border-radius: 16rpx; + /* padding: 6rpx 0 10rpx 0; */ + box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.05); + display: flex; + flex-direction: row; + justify-content: space-around; + align-items: center; + } + + .top-icon { + box-sizing: border-box; + width: 100%; + padding: 5px 0; + display: flex; + justify-content: space-between; + align-items: center; + } + + .h-text { + width: 124rpx; + height: 56rpx; + background: rgba(255, 255, 255, 0.2); + border-radius: 28rpx; + font-size: 28rpx; + color: #FFFFFF; + display: flex; + align-items: center; + justify-content: center; + background: #327DFB; + } + + .s-input { + width: 78%; + height: 56rpx; + background: #f5f5f5; + border-radius: 50px; + box-sizing: border-box; + display: flex; + align-items: center; + padding: 0px 10px; + + input { + margin-left: 5px; + flex: 1; + width: 0; + font-size: 14px; + color: #999999; + } + } + + /* 时间筛选选项卡样式 */ + .tab-choose-class { + display: flex; + align-items: center; + justify-content: space-between; + padding: 20rpx 0 16rpx 0; + background-color: #fff; + /* border-bottom: 1rpx solid #F5F5F5; */ + width: 100%; + /* 新增:让容器占满宽度 */ + } + + .tab-content { + font-size: 28rpx; + display: flex; + flex-direction: column; + align-items: center; + flex: 1; + text-align: center; + } + + .tab-name-class { + display: flex; + align-items: center; + } + + .icon-tab { + display: flex; + align-items: center; + justify-content: center; + width: 32rpx; + height: 32rpx; + } + + .icon-tab image { + width: 100%; + height: 100%; + } + + .example-body { + background-color: #fff; + padding: 0 20rpx; + } + + /* 信息选项卡样式 */ + .four-box-header_2 { + width: 100%; + display: flex; + justify-content: space-between; + align-items: center; + padding: 20rpx 0; + } + + .four-box-header_2_right { + width: 60%; + display: flex; + justify-content: space-around; + align-items: center; + } + + .four-box-header_2_right .tab-item { + font-size: 28rpx; + font-weight: normal; + color: #a1a6aa; + position: relative; + padding: 0rpx 20rpx; + cursor: pointer; + transition: all 0.3s ease; + } + + .four-box-header_2_right .tab-item.active { + font-weight: bold; + color: #000000; + } + + .four-box-header_2_right .tab-item.active::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; + } + + /* 订单列表区域 */ + .dil { + background-color: #F7F8FC; + box-sizing: border-box; + padding: 8px 12px 15px 12px; + display: flex; + flex-direction: column; + row-gap: 10px; + } + + .loading-container { + 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; + } + + @keyframes spin { + 0% { + transform: rotate(0deg); + } + + 100% { + transform: rotate(360deg); + } + } + + .ques { + margin: 0px auto; + margin-top: 40px; + width: 80%; + } + + .ques image { + width: 100%; + } + + .loading-more { + display: flex; + justify-content: center; + align-items: center; + padding: 20rpx; + color: #999; + font-size: 26rpx; + } + + .loading-more .mini { + width: 30px; + height: 30px; + border-width: 2px; + margin-right: 10rpx; + } + + .no-more-data { + text-align: center; + padding: 20rpx; + color: #999; + font-size: 26rpx; + } + + /* 分类统计样式 */ + .sub-tabs { + display: flex; + background: #fff; + padding: 10px 0; + justify-content: space-around; + border-bottom: 1px solid #eee; + } + + .sub-tab-item { + font-size: 15px; + color: #666; + padding: 4px 10px; + } + + .sub-tab-item.active { + font-weight: bold; + color: #3a8dff; + border-bottom: 2px solid #3a8dff; + } + + .list-container { + margin: 10px; + } + + .table-header, + .table-row { + display: flex; + align-items: center; + background: #fff; + border-radius: 8px; + padding: 10px; + margin-bottom: 6px; + } + + .table-header { + font-weight: bold; + background: #f0f3f8; + } + + .col-rank { + width: 40px; + text-align: center; + } + + .col-driver { + flex: 1; + display: flex; + align-items: center; + } + + .avatar { + width: 28px; + height: 28px; + border-radius: 50%; + margin-right: 6px; + } + + .col-num, + .col-distance, + .col-money { + width: 80px; + text-align: center; + } + + .scroll_view_style { + flex: 1; + } + + /* 新增选择字段样式 */ + .select-field { + width: 100%; + display: flex; + align-items: center; + justify-content: space-between; + padding: 20rpx; + background: #fff; + border-radius: 8rpx; + border: 1rpx solid #e9ecef; + min-height: 80rpx; + box-sizing: border-box; + } + + .select-text { + font-size: 28rpx; + color: #333; + flex: 1; + } + + .select-field:active { + background: #e9ecef; + } + + .stat-cards-container { + position: relative; + display: flex; + align-items: center; + margin: 14rpx 0; + } + + .stat-cards { + display: flex; + justify-content: space-around; + flex: 1; + } + + .expand-btn { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + width: 60rpx; + height: 80rpx; + margin-right: 20rpx; + background: #fff; + border-radius: 12rpx; + box-shadow: 0 4rpx 10rpx rgba(0, 0, 0, 0.05); + } + + .expand-text { + font-size: 20rpx; + color: #327DFB; + margin-top: 4rpx; + } + + .expanded-cards { + margin-top: 10rpx; + margin-bottom: 20rpx; + } + \ No newline at end of file diff --git a/pages/my/classificationInfo.vue b/pages/my/classificationInfo.vue new file mode 100644 index 0000000..d776c3f --- /dev/null +++ b/pages/my/classificationInfo.vue @@ -0,0 +1,235 @@ + + + + + \ No newline at end of file diff --git a/pages/process/dispatchAgentDriverExecute.vue b/pages/process/dispatchAgentDriverExecute.vue index 1c24278..006a1cf 100644 --- a/pages/process/dispatchAgentDriverExecute.vue +++ b/pages/process/dispatchAgentDriverExecute.vue @@ -526,6 +526,55 @@ + + + + 描述 + + + 节点: + {{ dictLabel }} + + + 救援结束车辆里程数: + + + + 故障车车牌号: + + + + 备注信息: + + + + + + + 图片上传中,请稍候... + + + + 现场图片 + + + + + + + 取消 + + + + {{ isSubmitting ? '处理中...' : '确认' }} + + + + + 转维修信息 @@ -1271,6 +1320,8 @@ currentSupplementItem: null, // 救援开始弹框显示状态 acceptOrderShow: false, + // 确认订单完成显示弹框 + orderCompleteShow: false, startScale: '', uploadingRecord: false, @@ -1813,16 +1864,13 @@ } this.rescueId = id; if (this.recordSteps.length > 0) { - console.log('this.recordSteps', this.recordSteps) - console.log('this.currentStepIndex', this.currentStepIndex) - console.log('this.currentStepIndex - 1', this.currentStepIndex - 1) this.dictValue = this.recordSteps[this.currentStepIndex - 1].value; this.dictLabel = this.recordSteps[this.currentStepIndex - 1].label; - console.log('this.dictValue', this.dictValue) - console.log('this.dictLabel', this.dictLabel) } if (this.currentStepIndex === 2) { this.acceptOrderShow = true; + } else if (this.currentStepIndex === 7) { + this.orderCompleteShow = true } else { this.recordShow = true; } @@ -1836,6 +1884,15 @@ this.ulImages = []; }, + cancelOrderComplete() { + this.orderCompleteShow = false; + this.remark = ''; // 清空备注 + this.fileList1 = []; // 清空图片列表 + this.selectedOption = ''; + this.ulImages = []; + }, + + deletePic(event) { // 从 fileList 中删除 this[`fileList${event.name}`].splice(event.index, 1); @@ -2284,6 +2341,8 @@ if (this.currentStepIndex == 7) { updateData.rescueEndTime = new Date(); updateData.rescueStatus = '4'; + updateData.endScale = this.detailsData.endScale; + updateData.licenseNum = this.detailsData.licenseNum; } // 更新下一步显示 @@ -2304,9 +2363,12 @@ // 刷新订单详情 this.recordShow = false; + if (this.currentStepIndex == 7) { + this.orderCompleteShow = false; + } this.getrescueDetail(this.rescueId); } else { - throw new Error(`API返回错误代码: ${res.code}`); + throw new Error(`错误代码: ${res.code}`); } } catch (error) { @@ -2647,6 +2709,21 @@ }); return; } + if (this.currentStepIndex === 7 && (!this.detailsData.licenseNum || this.detailsData.licenseNum + .trim() === '')) { + uni.showToast({ + title: '请填写故障车车牌号', + icon: 'none' + }) + return + } + if (this.currentStepIndex === 7 && !this.detailsData.endScale) { + uni.showToast({ + title: '请填写车辆里程', + icon: 'none' + }) + return + } if (this.ulImages.length === 0 && this.currentStepIndex != 6) { uni.showToast({ title: '请上传图片',