调度APP 1-6功能

This commit is contained in:
sunhaoyuan 2025-10-17 15:25:04 +08:00
parent 7c6c40dd52
commit 25dbbe17b2
21 changed files with 88568 additions and 12360 deletions

View File

@ -2,7 +2,7 @@
"version" : "1.0",
"configurations" : [
{
"playground" : "custom",
"playground" : "standard",
"type" : "uni-app:app-android"
},
{

View File

@ -52,11 +52,12 @@
<text class="infoValue">{{ orderData.source || '暂无数据' }}</text>
</view>
<view class="infoRow">
<text class="infoLabel">故障车经办人</text>
<!-- <text class="infoLabel">故障车经办人</text> -->
<text class="infoLabel">客户</text>
<text class="infoValue">{{ orderData.connectionName || '暂无数据' }}</text>
</view>
<view class="infoRow">
<text class="infoLabel">经办人电话</text>
<text class="infoLabel">客户电话</text>
<text class="infoValue">{{ orderData.connectionPhone || '暂无数据' }}</text>
</view>
<view class="infoRow">
@ -87,7 +88,8 @@
<text class="infoValue">{{ orderData.licenseNum || '暂无数据' }}</text>
</view>
<view class="infoRow">
<text class="infoLabel">故障车经办人</text>
<!-- <text class="infoLabel">故障车经办人</text> -->
<text class="infoLabel">客户</text>
<text class="infoValue">{{ orderData.connectionName || '暂无数据' }}</text>
</view>
<view class="infoRow">

View File

@ -26,6 +26,63 @@
@click.stop="editOrder">编辑工单</view>
</view>
</view>
<view class="orderInfoContainer" v-if="isExpanded === false && activeTab === -1">
<!-- <view class="orderInfoContainer" v-if="!isExpanded"> -->
<view class="infoRow">
<text class="infoLabel">开始时间:</text>
<text class="infoValue">{{ formatTimestamp(orderData.rescueStartTime) || '暂无数据' }}</text>
</view>
<view class="infoRow">
<text class="infoLabel">完成时间:</text>
<text class="infoValue">{{ formatTimestamp(orderData.rescueEndTime) || '暂无数据' }}</text>
</view>
<view class="infoRow">
<text class="infoLabel">调度</text>
<text class="infoValue">{{ orderData.secondDispatchName || '暂无数据' }}</text>
</view>
<view class="infoRow">
<text class="infoLabel">司机</text>
<text class="infoValue">{{ orderData.driverName || '暂无数据' }}</text>
</view>
<view class="infoRow">
<text class="infoLabel">救援车辆</text>
<text class="infoValue">{{ orderData.driverCarNum || '暂无数据' }}</text>
</view>
<view class="infoRow">
<text class="infoLabel">渠道</text>
<text class="infoValue">{{ orderData.channel || '暂无数据' }}</text>
</view>
<view class="infoRow">
<text class="infoLabel">来源</text>
<text class="infoValue">{{ orderData.source || '暂无数据' }}</text>
</view>
<view class="infoRow">
<text class="infoLabel">救援类型</text>
<text class="infoValue">{{ orderData.rescueTypeStr || '暂无数据' }}</text>
</view>
<view class="infoRow">
<text class="infoLabel">客户姓名</text>
<text class="infoValue">{{ orderData.connectionName || '暂无数据' }}</text>
</view>
<view class="infoRow">
<text class="infoLabel">客户电话</text>
<text class="infoValue">{{ orderData.connectionPhone || '暂无数据' }}</text>
</view>
<view class="infoRow">
<text class="infoLabel">客户车牌号</text>
<text class="infoValue">{{ orderData.licenseNum || '暂无数据' }}</text>
</view>
<view class="infoRow">
<text class="infoLabel">救援状态</text>
<text class="infoValue">{{ orderData.rescueStatusStr || '暂无数据' }}</text>
</view>
<view class="infoRow">
<text class="infoLabel">财务状态</text>
<text class="infoValue">{{ orderData.orderStatusStr || '暂无数据' }}</text>
</view>
</view>
<view class="orderInfoContainer" v-if="activeTab === 0 || isExpanded">
<view class="infoRow">
<text class="infoLabel" style="color: black; font-weight: bold; font-size: 32rpx;">司机信息</text>
@ -76,11 +133,13 @@
<text class="infoValue">{{ orderData.source || '暂无数据' }}</text>
</view>
<view class="infoRow">
<text class="infoLabel">故障车经办人</text>
<!-- <text class="infoLabel">故障车经办人</text> -->
<text class="infoLabel">客户</text>
<text class="infoValue">{{ orderData.connectionName || '暂无数据' }}</text>
</view>
<view class="infoRow">
<text class="infoLabel">经办人电话</text>
<!-- <text class="infoLabel">经办人电话</text> -->
<text class="infoLabel">客户电话</text>
<text class="infoValue">{{ orderData.connectionPhone || '暂无数据' }}</text>
</view>
<view class="infoRow">
@ -114,7 +173,8 @@
<text class="infoValue">{{ orderData.licenseNum || '暂无数据' }}</text>
</view>
<view class="infoRow">
<text class="infoLabel">故障车经办人</text>
<!-- <text class="infoLabel">故障车经办人</text> -->
<text class="infoLabel">客户</text>
<text class="infoValue">{{ orderData.connectionName || '暂无数据' }}</text>
</view>
<view class="infoRow">
@ -615,6 +675,9 @@
},
toggleExpand() {
this.isExpanded = !this.isExpanded;
if (!this.isExpanded) {
this.$emit('update:activeTab', -1);
}
},
onPinpaiConfirm(e) {

View File

@ -1,7 +1,8 @@
// 应用全局配置
module.exports = {
// baseUrl: 'https://www.nuoyunr.com/admin-api',
baseUrl: 'http://192.168.1.8:48080/admin-api',
// baseUrl: 'http://192.168.1.8:48080/admin-api',
baseUrl: 'http://localhost:48080/admin-api',
imagesUrl: 'http://shequ.0315e.com/static/images/pages/',
baseImageUrl: 'https://www.nuoyunr.com/minio',
baseImageUrlNew: 'https://www.nuoyunr.com/minio/',
@ -28,4 +29,4 @@ module.exports = {
}
]
}
}
}

View File

@ -5,6 +5,7 @@
"versionName" : "1.0.0",
"versionCode" : "100",
"transformPx" : false,
"sassImplementationName": "node-sass",
/* 5+App */
"app-plus" : {
"usingComponents" : true,

484
package-lock.json generated
View File

@ -1,6 +1,472 @@
{
"name": "lanan-app",
"lockfileVersion": 2,
"requires": true,
"lockfileVersion": 1,
"packages": {
"": {
"dependencies": {
"uview-ui": "^2.0.36",
"weapp-qrcode": "^1.0.0"
},
"devDependencies": {
"sass": "^1.69.5",
"sass-loader": "^10.4.1"
}
},
"node_modules/@types/json-schema": {
"version": "7.0.15",
"resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
"integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
"dev": true
},
"node_modules/ajv": {
"version": "6.12.6",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
"integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
"dev": true,
"dependencies": {
"fast-deep-equal": "^3.1.1",
"fast-json-stable-stringify": "^2.0.0",
"json-schema-traverse": "^0.4.1",
"uri-js": "^4.2.2"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/epoberezkin"
}
},
"node_modules/ajv-keywords": {
"version": "3.5.2",
"resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
"integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
"dev": true,
"peerDependencies": {
"ajv": "^6.9.1"
}
},
"node_modules/anymatch": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
"integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
"dev": true,
"dependencies": {
"normalize-path": "^3.0.0",
"picomatch": "^2.0.4"
},
"engines": {
"node": ">= 8"
}
},
"node_modules/big.js": {
"version": "5.2.2",
"resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
"integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==",
"dev": true,
"engines": {
"node": "*"
}
},
"node_modules/binary-extensions": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
"integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
"dev": true,
"engines": {
"node": ">=8"
}
},
"node_modules/braces": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
"integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
"dev": true,
"dependencies": {
"fill-range": "^7.0.1"
},
"engines": {
"node": ">=8"
}
},
"node_modules/chokidar": {
"version": "3.5.3",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
"integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
"dev": true,
"funding": [
{
"type": "individual",
"url": "https://paulmillr.com/funding/"
}
],
"dependencies": {
"anymatch": "~3.1.2",
"braces": "~3.0.2",
"glob-parent": "~5.1.2",
"is-binary-path": "~2.1.0",
"is-glob": "~4.0.1",
"normalize-path": "~3.0.0",
"readdirp": "~3.6.0"
},
"engines": {
"node": ">= 8.10.0"
},
"optionalDependencies": {
"fsevents": "~2.3.2"
}
},
"node_modules/emojis-list": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
"integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==",
"dev": true,
"engines": {
"node": ">= 4"
}
},
"node_modules/extend": {
"version": "3.0.2",
"resolved": "https://registry.npmmirror.com/extend/-/extend-3.0.2.tgz",
"integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
},
"node_modules/fast-deep-equal": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
"dev": true
},
"node_modules/fast-json-stable-stringify": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
"integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
"dev": true
},
"node_modules/fill-range": {
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
"integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
"dev": true,
"dependencies": {
"to-regex-range": "^5.0.1"
},
"engines": {
"node": ">=8"
}
},
"node_modules/fsevents": {
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
"integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
"dev": true,
"hasInstallScript": true,
"optional": true,
"os": [
"darwin"
],
"engines": {
"node": "^8.16.0 || ^10.6.0 || >=11.0.0"
}
},
"node_modules/glob-parent": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
"dev": true,
"dependencies": {
"is-glob": "^4.0.1"
},
"engines": {
"node": ">= 6"
}
},
"node_modules/immutable": {
"version": "4.3.4",
"resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.4.tgz",
"integrity": "sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA==",
"dev": true
},
"node_modules/is-binary-path": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
"integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
"dev": true,
"dependencies": {
"binary-extensions": "^2.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/is-extglob": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
"integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/is-glob": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
"integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
"dev": true,
"dependencies": {
"is-extglob": "^2.1.1"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/is-number": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
"dev": true,
"engines": {
"node": ">=0.12.0"
}
},
"node_modules/json-schema-traverse": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
"integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
"dev": true
},
"node_modules/json5": {
"version": "2.2.3",
"resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
"integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
"dev": true,
"bin": {
"json5": "lib/cli.js"
},
"engines": {
"node": ">=6"
}
},
"node_modules/klona": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz",
"integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==",
"dev": true,
"engines": {
"node": ">= 8"
}
},
"node_modules/loader-utils": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz",
"integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==",
"dev": true,
"dependencies": {
"big.js": "^5.2.2",
"emojis-list": "^3.0.0",
"json5": "^2.1.2"
},
"engines": {
"node": ">=8.9.0"
}
},
"node_modules/lru-cache": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
"integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
"dev": true,
"dependencies": {
"yallist": "^4.0.0"
},
"engines": {
"node": ">=10"
}
},
"node_modules/neo-async": {
"version": "2.6.2",
"resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
"integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
"dev": true
},
"node_modules/normalize-path": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/picomatch": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
"dev": true,
"engines": {
"node": ">=8.6"
},
"funding": {
"url": "https://github.com/sponsors/jonschlinkert"
}
},
"node_modules/punycode": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
"integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
"dev": true,
"engines": {
"node": ">=6"
}
},
"node_modules/readdirp": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
"integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
"dev": true,
"dependencies": {
"picomatch": "^2.2.1"
},
"engines": {
"node": ">=8.10.0"
}
},
"node_modules/sass": {
"version": "1.69.5",
"resolved": "https://registry.npmjs.org/sass/-/sass-1.69.5.tgz",
"integrity": "sha512-qg2+UCJibLr2LCVOt3OlPhr/dqVHWOa9XtZf2OjbLs/T4VPSJ00udtgJxH3neXZm+QqX8B+3cU7RaLqp1iVfcQ==",
"dev": true,
"dependencies": {
"chokidar": ">=3.0.0 <4.0.0",
"immutable": "^4.0.0",
"source-map-js": ">=0.6.2 <2.0.0"
},
"bin": {
"sass": "sass.js"
},
"engines": {
"node": ">=14.0.0"
}
},
"node_modules/sass-loader": {
"version": "10.4.1",
"resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-10.4.1.tgz",
"integrity": "sha512-aX/iJZTTpNUNx/OSYzo2KsjIUQHqvWsAhhUijFjAPdZTEhstjZI9zTNvkTTwsx+uNUJqUwOw5gacxQMx4hJxGQ==",
"dev": true,
"dependencies": {
"klona": "^2.0.4",
"loader-utils": "^2.0.0",
"neo-async": "^2.6.2",
"schema-utils": "^3.0.0",
"semver": "^7.3.2"
},
"engines": {
"node": ">= 10.13.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/webpack"
},
"peerDependencies": {
"fibers": ">= 3.1.0",
"node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0",
"sass": "^1.3.0",
"webpack": "^4.36.0 || ^5.0.0"
},
"peerDependenciesMeta": {
"fibers": {
"optional": true
},
"node-sass": {
"optional": true
},
"sass": {
"optional": true
}
}
},
"node_modules/schema-utils": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz",
"integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==",
"dev": true,
"dependencies": {
"@types/json-schema": "^7.0.8",
"ajv": "^6.12.5",
"ajv-keywords": "^3.5.2"
},
"engines": {
"node": ">= 10.13.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/webpack"
}
},
"node_modules/semver": {
"version": "7.5.4",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
"integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
"dev": true,
"dependencies": {
"lru-cache": "^6.0.0"
},
"bin": {
"semver": "bin/semver.js"
},
"engines": {
"node": ">=10"
}
},
"node_modules/source-map-js": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
"integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/to-regex-range": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
"integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
"dev": true,
"dependencies": {
"is-number": "^7.0.0"
},
"engines": {
"node": ">=8.0"
}
},
"node_modules/uri-js": {
"version": "4.4.1",
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
"integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
"dev": true,
"dependencies": {
"punycode": "^2.1.0"
}
},
"node_modules/uview-ui": {
"version": "2.0.36",
"resolved": "https://registry.npmjs.org/uview-ui/-/uview-ui-2.0.36.tgz",
"integrity": "sha512-ASSZT6M8w3GTO1eFPbsgEFV0U5UujK+8pTNr+MSUbRNcRMC1u63DDTLJVeArV91kWM0bfAexK3SK9pnTqF9TtA==",
"engines": {
"HBuilderX": "^3.1.0"
}
},
"node_modules/weapp-qrcode": {
"version": "1.0.0",
"resolved": "https://registry.npmmirror.com/weapp-qrcode/-/weapp-qrcode-1.0.0.tgz",
"integrity": "sha512-4sa3W0rGDVJ9QaeZpAKlAuUxVyjhDwiUqHyGK/jJMsRMXnhb4yO8qWU/pZruMo+iT5J6CraS67lDMFb1VY+RaA==",
"dependencies": {
"extend": "^3.0.2"
}
},
"node_modules/yallist": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
"dev": true
}
},
"dependencies": {
"@types/json-schema": {
"version": "7.0.15",
@ -24,7 +490,8 @@
"version": "3.5.2",
"resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
"integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
"dev": true
"dev": true,
"requires": {}
},
"anymatch": {
"version": "3.1.3",
@ -79,6 +546,11 @@
"integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==",
"dev": true
},
"extend": {
"version": "3.0.2",
"resolved": "https://registry.npmmirror.com/extend/-/extend-3.0.2.tgz",
"integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
},
"fast-deep-equal": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
@ -296,6 +768,14 @@
"resolved": "https://registry.npmjs.org/uview-ui/-/uview-ui-2.0.36.tgz",
"integrity": "sha512-ASSZT6M8w3GTO1eFPbsgEFV0U5UujK+8pTNr+MSUbRNcRMC1u63DDTLJVeArV91kWM0bfAexK3SK9pnTqF9TtA=="
},
"weapp-qrcode": {
"version": "1.0.0",
"resolved": "https://registry.npmmirror.com/weapp-qrcode/-/weapp-qrcode-1.0.0.tgz",
"integrity": "sha512-4sa3W0rGDVJ9QaeZpAKlAuUxVyjhDwiUqHyGK/jJMsRMXnhb4yO8qWU/pZruMo+iT5J6CraS67lDMFb1VY+RaA==",
"requires": {
"extend": "^3.0.2"
}
},
"yallist": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",

View File

@ -34,6 +34,13 @@
"navigationStyle": "custom"
}
},
{
"path": "pages/rescue/businessManage",
"style": {
"navigationBarTitleText": "业务管理",
"navigationStyle": "custom"
}
},
{
"path": "pages/details/details",
@ -279,4 +286,4 @@
"backgroundColor": "#F8F8F8"
},
"uniIdRouter": {}
}
}

View File

@ -30,7 +30,7 @@
<view class="box-title">订单处于待开始请耐心等待</view>
</view>
<view class="c-box" style="margin-bottom: 20rpx;">
<view class="box-title_driver">
<!-- <view class="box-title_driver">
<text style="margin-bottom: 14rpx;">调度姓名:
<text
style="margin-left: 20rpx;">{{detailsinfo.rescueInfo.secondDispatchName || '暂无数据'}}</text></text>
@ -38,6 +38,63 @@
style="margin-left: 20rpx;">{{detailsinfo.rescueInfo.secondDispatchPhone}}</text></text>
<text>是否出发现场: <text
style="margin-left: 20rpx;">{{detailsinfo.rescueInfo.isDispatchedToScene != null ? (detailsinfo.rescueInfo.isDispatchedToScene == 1 ? '是' : '否') : '暂无数据'}}</text></text>
</view> -->
<view class="box-title_driver">
<view class="infoRow">
<text class="infoLabel">开始时间:</text>
<text class="infoValue">{{ formatTimestamp(detailsinfo.rescueInfo.rescueStartTime) || '暂无数据' }}</text>
</view>
<view class="infoRow">
<text class="infoLabel">完成时间:</text>
<text class="infoValue">{{ formatTimestamp(detailsinfo.rescueInfo.rescueEndTime) || '暂无数据' }}</text>
</view>
<view class="infoRow">
<text class="infoLabel">调度</text>
<text class="infoValue">{{ detailsinfo.rescueInfo.secondDispatchName || '暂无数据' }}</text>
</view>
<view class="infoRow">
<text class="infoLabel">司机</text>
<text class="infoValue">{{ detailsinfo.rescueInfo.driverName || '暂无数据' }}</text>
</view>
<view class="infoRow">
<text class="infoLabel">救援车辆</text>
<text class="infoValue">{{ detailsinfo.rescueInfo.driverCarNum || '暂无数据' }}</text>
</view>
<view class="infoRow">
<text class="infoLabel">渠道</text>
<text class="infoValue">{{ detailsinfo.rescueInfo.channel || '暂无数据' }}</text>
</view>
<view class="infoRow">
<text class="infoLabel">来源</text>
<text class="infoValue">{{ detailsinfo.rescueInfo.source || '暂无数据' }}</text>
</view>
<view class="infoRow">
<text class="infoLabel">救援类型</text>
<text class="infoValue">{{ detailsinfo.rescueInfo.rescueTypeStr || '暂无数据' }}</text>
</view>
<view class="infoRow">
<text class="infoLabel">客户姓名</text>
<text class="infoValue">{{ detailsinfo.rescueInfo.connectionName || '暂无数据' }}</text>
</view>
<view class="infoRow">
<text class="infoLabel">客户电话</text>
<text class="infoValue">{{ detailsinfo.rescueInfo.connectionPhone || '暂无数据' }}</text>
</view>
<view class="infoRow">
<text class="infoLabel">客户车牌号</text>
<text class="infoValue">{{ detailsinfo.rescueInfo.licenseNum || '暂无数据' }}</text>
</view>
<view class="infoRow">
<text class="infoLabel">救援状态</text>
<text class="infoValue">{{ detailsinfo.rescueInfo.rescueStatusStr || '暂无数据' }}</text>
</view>
<view class="infoRow">
<text class="infoLabel">财务状态</text>
<text class="infoValue">{{ detailsinfo.rescueInfo.orderStatusStr || '暂无数据' }}</text>
</view>
</view>
</view>
@ -201,6 +258,19 @@
loop: this.isLoop
})
}, */
//
formatTimestamp(timestamp) {
if (!timestamp) return null;
const date = new Date(timestamp);
const year = date.getFullYear();
const month = (date.getMonth() + 1).toString().padStart(2, '0');
const day = date.getDate().toString().padStart(2, '0');
const hours = date.getHours().toString().padStart(2, '0');
const minutes = date.getMinutes().toString().padStart(2, '0');
return `${year}-${month}-${day} ${hours}:${minutes}`;
},
previewImage(url, type = 'images') {
//
this.generateImageList();

View File

@ -150,6 +150,26 @@
:showAction="false"></u-search>
</view>
</view>
<view class="filter-section" style="padding: 0 10rpx;" v-if="hasRole('ddzx')">
<text>渠道</text>
<view class="options">
<view class="select-field" @click="showPicker('channel')">
<text
class="select-text">{{ queryParams.channel ? getSelectedLabel('channel', queryParams.channel) : '请选择渠道' }}</text>
<u-icon name="arrow-down" size="14" color="#999"></u-icon>
</view>
</view>
</view>
<view class="filter-section" style="padding: 0 10rpx;" v-if="hasRole('ddzx')">
<text>来源</text>
<view class="options">
<view class="select-field" @click="showPicker('source')">
<text
class="select-text">{{ queryParams.source ? getSelectedLabel('source', queryParams.source) : '请选择来源' }}</text>
<u-icon name="arrow-down" size="14" color="#999"></u-icon>
</view>
</view>
</view>
<view class="filter-section" style="padding: 0 10rpx;" v-if="hasRole('ddzx')">
<text>调度</text>
<view class="options">
@ -301,6 +321,10 @@
</view>
<lzc-picker ref="lzcPickerRescueStatus" :pickerList="jyStatusOptions" pickerTittle="选择救援状态"
@change="onPickerConfirm('rescueStatus', $event)"></lzc-picker>
<lzc-picker ref="lzcPickerChannel" :pickerList="channelOptions" pickerTittle="选择渠道"
@change="onPickerConfirm('channel', $event)"></lzc-picker>
<lzc-picker ref="lzcPickerSource" :pickerList="sourceOptions" pickerTittle="选择来源"
@change="onPickerConfirm('source', $event)"></lzc-picker>
<lzc-picker ref="lzcPickerDispatcher" :pickerList="dispatcherOptions" pickerTittle="选择调度"
@change="onPickerConfirm('secondDispatchId', $event)"></lzc-picker>
<lzc-picker ref="lzcPickerRescueType" :pickerList="jyTypeOptions" pickerTittle="选择救援类型"
@ -319,7 +343,7 @@
</template>
<script>
import OrderCardVue from '../../components/orderCard/StatisticsInfoOrderCard.vue';
// import OrderCardVue from '../../components/orderCard/StatisticsInfoOrderCard.vue';
import request from '../../utils/request';
import CategoryList from '../../components/categoryList/CategoryList.vue';
import lzcPicker from '@/components/lzc-picker/lzc-picker.vue';
@ -384,6 +408,9 @@
driverCarNum: null,
faultType: null,
phenomenon: null,
channel: null,
channelId: null,
source: null
},
rescueStatusList: [{
text: "已接单",
@ -441,6 +468,8 @@
dispatcherOptions: [], //
rescueDriverOptions: [],
rescueCarOptions: [],
channelOptions: [],
sourceOptions: [],
countNum: {
jyzNum: 0,
@ -456,7 +485,7 @@
};
},
components: {
OrderCardVue,
// OrderCardVue,
CategoryList,
lzcPicker,
},
@ -591,6 +620,12 @@
let pickerRef = '';
switch (type) {
case 'channel':
pickerRef = 'lzcPickerChannel';
break;
case 'source':
pickerRef = 'lzcPickerSource';
break;
case 'rescueStatus':
pickerRef = 'lzcPickerRescueStatus';
break;
@ -634,6 +669,16 @@
async loadPickerOptions(type) {
switch (type) {
case 'channel':
if (this.channelOptions.length === 0) {
await this.loadChannelOptions();
}
break;
case 'source':
if (this.sourceOptions.length === 0) {
await this.loadSourceOptions();
}
break;
case 'rescueStatus':
if (this.jyStatusOptions.length === 0) {
await this.loadjyStatusOptions();
@ -679,6 +724,8 @@
this.queryParams.driverId = selectedItem.id
} else if (field == 'rescueCar') {
this.queryParams.driverCarNum = selectedItem.value
}else if(field == 'channel') {
this.queryParams.channelId = selectedItem.id
}
//
this.queryParams[field] = selectedItem.value;
@ -694,6 +741,12 @@
getSelectedLabel(type, value) {
let options = [];
switch (type) {
case 'channel':
options = this.channelOptions;
break;
case 'source':
options = this.sourceOptions;
break;
case 'rescueStatus':
options = this.jyStatusOptions;
break;
@ -887,6 +940,8 @@
driverCarNum: null,
faultType: null,
phenomenon: null,
channel: null,
source: null
};
this.searchText = '';
this.searchKeyword = null;
@ -935,6 +990,40 @@
}
})
},
//
async loadChannelOptions() {
return new Promise((resolve, reject) => {
request({
url: '/rescue-channel-source/channelList',
method: 'get',
}).then((res) => {
this.channelOptions = res.data.map(item => ({
nickname: item.name, //
value: item.name, //
id: item.id, // ID
label: item.name //
}));
resolve();
}).catch(reject);
});
},
//
async loadSourceOptions() {
return new Promise((resolve, reject) => {
request({
url: '/rescue-channel-source/sourceList',
method: 'get',
}).then((res) => {
this.sourceOptions = res.data.map(item => ({
nickname: item.name, //
value: item.name, //
id: item.id, // ID
label: item.name //
}));
resolve();
}).catch(reject);
});
},
//
loadDispatcherOptions() {
@ -1120,6 +1209,7 @@
await this.loadPhenomenonOptions()
await this.loadRescueDriverOptions()
await this.loadRescueCarOptions()
await this.loadChannelOptions()
},
getCountNum() {

View File

@ -5,7 +5,31 @@
<uni-icons size="28" type="plus" color="#fff" @click="goupdata('')"></uni-icons>
</template>
</VNavigationBar>
<scroll-view class="carManangeScrollView" scroll-y @scrolltolower="scrolltolower">
<!-- 顶部统计条 -->
<view class="statsContainer">
<!-- 车辆总数单独一行 -->
<view class="totalStatsRow">
<view class="totalStatCard">
<view class="totalStatValue">{{ statsOverview.totalCars || 0 }}</view>
<view class="totalStatLabel">车辆总数</view>
</view>
</view>
<!-- 分类统计一行最多4个 -->
<view class="categoryStatsGrid">
<view
class="categoryStatCard"
v-for="(count, category) in statsOverview.categoryCount"
:key="category"
>
<view class="categoryStatValue">{{ count }}</view>
<view class="categoryStatLabel">{{ category }}</view>
</view>
</view>
</view>
<view class="ail">
<view class="_box" v-for="(item,index) in carList" :key="index" @click="goupdata(item.id)">
<view class="_box-content">
@ -19,13 +43,13 @@
<view class="cph">{{item.rescueCarNum}}</view>
</view>
<view class="right-top">
<view class="timesize">保养到期里程:</view>
<view class="time">{{item.carMaintenanceMileage}}</view>
</view>
<!-- <view class="right-top">
<view class="timesize">保养到期时间:</view>
<view class="time">{{item.carKeepTime}}</view>
</view>
<view class="right-top">
<view class="timesize">保险到期时间:</view>
<view class="time">{{item.carInsuranceTime}}</view>
</view>
</view> -->
<view class="right-top">
<view class="timesize">年检到期时间:</view>
<view class="time">{{item.carCheckTime}}</view>
@ -42,8 +66,6 @@
<tabBar msg="1"></tabBar>
<!-- <view class="anniu" @click="goupdata('')">
<u-icon name="plus" color="#fff" size="34"></u-icon>
</view> -->
</view>
</template>
@ -59,18 +81,61 @@
},
data() {
return {
baseUrl: this.$baseImageUrlNew,
carList: [],
searchName: null,
pageNum: 1,
pageSize: 10,
totalNum: '',
statsOverview: {
totalCars: 0,
categoryCount: {}
}
}
},
onShow() {
this.getCarList()
this.getStatsData()
// this.loadStatsData()
},
methods: {
//
getCategoryIcon(category) {
const iconMap = {
'大拖车': '🚛',
'小拖车': '🚐',
'皮卡': '🛻',
'清障车': '🚨',
'吊车': '🏗️',
'救援车': '🚑',
'工程车': '🚜',
'货车': '📦'
};
//
return iconMap[category] || '🚙';
},
//
async getStatsData() {
try {
const res = await request({
url: "/system/rescueCar/getStats",
method: 'get'
})
this.statsOverview = res.data
} catch (error) {
console.error('获取统计数据失败:', error)
uni.showToast({
title: '统计数据获取失败',
icon: 'none'
})
} finally {
this.statsLoading = false
}
},
scrolltolower() {
if (this.carList.length >= this.totalNum) {
uni.showToast({
@ -116,6 +181,94 @@
</script>
<style scoped lang="scss">
.statsContainer {
padding: 20rpx;
background: #f8f9fa;
}
//
.totalStatsRow {
margin-bottom: 20rpx;
}
.totalStatCard {
background: white;
border-radius: 12rpx;
padding: 30rpx;
text-align: center;
box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.06);
}
.totalStatValue {
font-size: 48rpx;
font-weight: bold;
color: #333;
line-height: 1.2;
}
.totalStatLabel {
font-size: 28rpx;
color: #666;
margin-top: 8rpx;
}
//
.categoryStatsGrid {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 16rpx;
}
.categoryStatCard {
background: white;
border-radius: 12rpx;
padding: 20rpx 12rpx;
text-align: center;
box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.06);
min-height: 100rpx;
display: flex;
flex-direction: column;
justify-content: center;
}
.categoryStatValue {
font-size: 32rpx;
font-weight: bold;
color: #333;
line-height: 1.2;
}
.categoryStatLabel {
font-size: 22rpx;
color: #666;
margin-top: 6rpx;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
// 3
@media (max-width: 750rpx) {
.categoryStatsGrid {
grid-template-columns: repeat(3, 1fr);
}
}
// 2
@media (max-width: 600rpx) {
.categoryStatsGrid {
grid-template-columns: repeat(2, 1fr);
}
}
.carManageContent {
height: 100%;
display: flex;
@ -236,4 +389,4 @@
bottom: 30px;
right: 15px;
}
</style>
</style>

View File

@ -47,10 +47,15 @@
</view>
</view>
<view class="dis_">
<view class="">保养到期里程</view>
<view class="right_"> <input placeholder-class="inputPlaceholder" type="text" placeholder="请输入"
v-model="carInfo.carMaintenanceMileage" /> </view>
</view>
<!-- <view class="dis_">
<view class="">保养到期时间</view>
<view class="right_" @click="seletTime('by')"> {{carInfo.carKeepTime||'请选择'}}
</view>
</view>
</view> -->
<view class="dis_">
<view class="">保险到期时间</view>
<view class="right_" @click="seletTime('bx')"> {{carInfo.carInsuranceTime||'请选择'}}
@ -114,6 +119,8 @@
imageList1: [],
imageList2: [],
carInfo: {
carModel:"", //
carMaintenanceMileage:"", //
rescueCarType: "", //
rescueCarNum: "", //
rescueCarBrand: "", //
@ -273,6 +280,7 @@
},
cancel() {
this.show = false
this.carColorShow = false
},
confirmtime(e) {
this.showtime = false
@ -548,4 +556,4 @@
align-items: center;
justify-content: center;
}
</style>
</style>

View File

@ -80,16 +80,18 @@
</view>
</view>
<view class="jyxx-tinput">
<view class="text1">故障车经办人</view>
<!-- <view class="text1">故障车经办人</view> -->
<view class="text1">客户</view>
<view class="you">
<input type="text" placeholder-style="color: #929292;font-size:24rpx" placeholder="请输入故障车经办人"
<input type="text" placeholder-style="color: #929292;font-size:24rpx" placeholder="请输入客户姓名"
v-model="connectionName">
</view>
</view>
<view class="jyxx-tinput">
<view class="text1">经办人手机号</view>
<!-- <view class="text1">经办人手机号</view> -->
<view class="text1">客户手机号</view>
<view class="you">
<input type="text" placeholder-style="color: #929292;font-size:24rpx" placeholder="请输入经办人手机号"
<input type="text" placeholder-style="color: #929292;font-size:24rpx" placeholder="请输入客户手机号"
v-model="connectionPhone">
</view>
</view>
@ -392,13 +394,13 @@
isKouChe: '0',
show: false,
value1: Number(new Date()),
rescueLongitude: '',
rescueLatitude: '',
rescueLongitude: '117.063239',
rescueLatitude: '36.683392',
connectionName: '',
connectionPhone: '',
carOwner: '',
carOwnerPhone: '',
rescuePosition: '',
rescuePosition: '山东省济南市历城区洪楼南路1号(百花摄影图片社)阿水大杯茶(洪楼广场店)',
rescueDetail: '',
rescueType: '',
baseUrl: this.$baseUrl,
@ -459,11 +461,11 @@
province: '',
city: '',
area: '',
four: '',
four: '山东省济南市历城区洪楼南路1号(百花摄影图片社)阿水大杯茶(洪楼广场店)',
province1: '',
city1: '',
area1: '',
four1: '',
four1: '山东省济南市历城区花园路136号印象城5号楼515商铺',
shows: false,
kcname: '',
columns: [
@ -638,6 +640,31 @@
return
}
/* 车辆类型校验*/
if (this.carzhi === null) {
uni.showToast({ title: '请选择车辆类型', icon: 'none' })
return
}
/* 是否新能源校验*/
if (this.ifNewEnergy === '') {
uni.showToast({ title: '请选择故障车辆是否为新能源', icon: 'none' })
return
}
/* 故障类型校验*/
if (!this.selectedFaultTypeId) {
uni.showToast({ title: '请选择故障类型', icon: 'none' })
return
}
//
if (!this.selectedChannelId) {
uni.showToast({
title: '请选择业务渠道',
icon: 'none'
})
return
}
if (this.feeType === null) {
uni.showToast({
title: '请选择收费类型',
@ -645,6 +672,7 @@
})
return
}
// if (this.connectionName == "") {
// uni.showToast({
// title: '',
@ -941,7 +969,11 @@
this.selectedChannelId = null;
this.selectedChannelName = '';
this.selectedSourceId = null;
console.log('selectedChannelId',this.selectedChannelId)
console.log('selectedChannelId',item.id)
} else {
console.log('selectedChannelId',this.selectedChannelId)
console.log('selectedChannelId',item.id)
this.selectedChannelId = item.id;
this.selectedChannelName = item.name;
this.selectedSourceId = null;
@ -1583,4 +1615,4 @@
font-size: 24rpx;
color: #666;
}
</style>
</style>

View File

@ -215,7 +215,7 @@
<view style="display: flex;flex-direction: column;row-gap: 10px;" v-else>
<order-card-new :status="1" @deleteOk="deleteOrderHandle" @revokeOk="revokeOrderHandle"
@refresh="getlist" v-for="(item, index) in orderList" :key="index" :orderData="item"
:activeTab="activeTab"></order-card-new>
:activeTab="activeTab" @update:activeTab="activeTab = $event"></order-card-new>
</view>
</view>
@ -276,7 +276,8 @@
homeHeaderMenuHeight: 50,
homeHeaderMenuLeft: 0,
// #endif
activeTab: 1, //
// activeTab: 1, //
activeTab: -1, //
busiTypeList: [{
label: '拖车',
icon: require('@/static/icons/order/tuoche.png')
@ -300,7 +301,9 @@
],
topMenuList: [{
title: '业务管理',
/* path: '/pages/rescue/historylist?id=1', */
// path: '/pages/rescue/historylist?id=1',
// path: '/pages/rescue/historylist',
path: '/pages/rescue/businessManage',
icon: require('@/static/icons/homeTopMenu/icon_business.png')
},
{
@ -1775,4 +1778,4 @@
transform: rotate(360deg);
}
}
</style>
</style>

File diff suppressed because one or more lines are too long

View File

@ -1,8 +1,8 @@
var isReady=false;var onReadyCallbacks=[];
var isServiceReady=false;var onServiceReadyCallbacks=[];
var __uniConfig = {"pages":["pages/index/index","pages/rescue/rescue","pages/rescue/trafficPolice","pages/rescue/PoliceOder","pages/my/my","pages/details/details","pages/message/message","pages/Detain/Detain","pages/move/move","pages/rescue/order","pages/rescue/initiate","pages/rescue/historylist","pages/select/select","pages/login/login","pages/login/register","pages/login/forgot","pages/my/carManage","pages/my/carManageForm","pages/my/carlist","pages/my/StatisticsInfo"],"window":{"navigationBarTextStyle":"black","navigationBarTitleText":"蓝安汽车","navigationBarBackgroundColor":"#F8F8F8","backgroundColor":"#F8F8F8"},"darkmode":false,"nvueCompiler":"uni-app","nvueStyleCompiler":"uni-app","renderer":"auto","splashscreen":{"alwaysShowBeforeRender":true,"autoclose":false},"appname":"蓝安救援","compilerVersion":"4.15","entryPagePath":"pages/index/index","networkTimeout":{"request":60000,"connectSocket":60000,"uploadFile":60000,"downloadFile":60000}};
var __uniRoutes = [{"path":"/pages/index/index","meta":{"isQuit":true},"window":{"navigationBarTitleText":"蓝安汽车","navigationStyle":"custom"}},{"path":"/pages/rescue/rescue","meta":{},"window":{"navigationBarTitleText":"道路救援首页","navigationStyle":"custom"}},{"path":"/pages/rescue/trafficPolice","meta":{},"window":{"navigationBarTitleText":"交警首页","navigationStyle":"custom"}},{"path":"/pages/rescue/PoliceOder","meta":{},"window":{"navigationBarTitleText":"交警点击救援跳转","navigationStyle":"custom"}},{"path":"/pages/my/my","meta":{},"window":{"navigationBarTitleText":"我的","navigationStyle":"custom"}},{"path":"/pages/details/details","meta":{},"window":{"navigationBarTitleText":"救援详情","navigationStyle":"custom"}},{"path":"/pages/message/message","meta":{},"window":{"navigationBarTitleText":"消息","navigationStyle":"custom"}},{"path":"/pages/Detain/Detain","meta":{},"window":{"navigationBarTitleText":"扣车","navigationStyle":"custom"}},{"path":"/pages/move/move","meta":{},"window":{"navigationBarTitleText":"运力","navigationStyle":"custom"}},{"path":"/pages/rescue/order","meta":{},"window":{"navigationBarTitleText":"下单页-前","navigationStyle":"custom"}},{"path":"/pages/rescue/initiate","meta":{},"window":{"navigationBarTitleText":"下单页","navigationStyle":"custom"}},{"path":"/pages/rescue/historylist","meta":{},"window":{"navigationBarTitleText":"历史订单列表","navigationStyle":"custom"}},{"path":"/pages/select/select","meta":{},"window":{"navigationBarTitleText":"选择身份","navigationStyle":"custom"}},{"path":"/pages/login/login","meta":{},"window":{"navigationBarTitleText":"登录","navigationStyle":"custom"}},{"path":"/pages/login/register","meta":{},"window":{"navigationBarTitleText":"注册","navigationStyle":"custom"}},{"path":"/pages/login/forgot","meta":{},"window":{"navigationBarTitleText":"忘记密码","navigationStyle":"custom"}},{"path":"/pages/my/carManage","meta":{},"window":{"navigationBarTitleText":"","navigationStyle":"custom"}},{"path":"/pages/my/carManageForm","meta":{},"window":{"navigationBarTitleText":"","navigationStyle":"custom"}},{"path":"/pages/my/carlist","meta":{},"window":{"navigationBarTitleText":"","navigationStyle":"custom"}},{"path":"/pages/my/StatisticsInfo","meta":{},"window":{"navigationBarTitleText":"","navigationStyle":"custom"}}];
var __uniConfig = {"pages":["pages/index/index","pages/rescue/rescue","pages/rescue/trafficPolice","pages/rescue/PoliceOder","pages/my/my","pages/rescue/businessManage","pages/details/details","pages/details/dispatchDetails","pages/message/message","pages/Detain/Detain","pages/move/move","pages/rescue/order","pages/rescue/initiate","pages/rescue/initiateEdit","pages/rescue/initiateSurvey","pages/rescue/historylist","pages/select/select","pages/login/login","pages/login/register","pages/login/forgot","pages/my/carManage","pages/my/carManageForm","pages/my/carlist","pages/my/StatisticsInfo","pages/internal/index","pages/internal/NewstaffManagement","pages/internal/rescueManage","pages/internal/reportList","pages/internal/reportDetals","pages/internal/rescueAdd","pages/internal/addStaff","pages/internal/deviceManage","pages/internal/informationManage","pages/internal/informationAdd","pages/my/revoke","pages/process/dispatchProcess","pages/process/dispatchAgentDriverExecute","pages/my/classificationInfo"],"window":{"navigationBarTextStyle":"black","navigationBarTitleText":"蓝安汽车","navigationBarBackgroundColor":"#F8F8F8","backgroundColor":"#F8F8F8"},"darkmode":false,"nvueCompiler":"uni-app","nvueStyleCompiler":"uni-app","renderer":"auto","splashscreen":{"alwaysShowBeforeRender":true,"autoclose":false},"appname":"蓝安救援","compilerVersion":"4.76","entryPagePath":"pages/index/index","networkTimeout":{"request":60000,"connectSocket":60000,"uploadFile":60000,"downloadFile":60000}};
var __uniRoutes = [{"path":"/pages/index/index","meta":{"isQuit":true},"window":{"navigationBarTitleText":"蓝安汽车","navigationStyle":"custom"}},{"path":"/pages/rescue/rescue","meta":{},"window":{"navigationBarTitleText":"道路救援首页","navigationStyle":"custom"}},{"path":"/pages/rescue/trafficPolice","meta":{},"window":{"navigationBarTitleText":"交警首页","navigationStyle":"custom"}},{"path":"/pages/rescue/PoliceOder","meta":{},"window":{"navigationBarTitleText":"交警点击救援跳转","navigationStyle":"custom"}},{"path":"/pages/my/my","meta":{},"window":{"navigationBarTitleText":"我的","navigationStyle":"custom"}},{"path":"/pages/rescue/businessManage","meta":{},"window":{"navigationBarTitleText":"业务管理","navigationStyle":"custom"}},{"path":"/pages/details/details","meta":{},"window":{"navigationBarTitleText":"救援详情","navigationStyle":"custom"}},{"path":"/pages/details/dispatchDetails","meta":{},"window":{"navigationBarTitleText":"调度流程","navigationStyle":"custom"}},{"path":"/pages/message/message","meta":{},"window":{"navigationBarTitleText":"消息","navigationStyle":"custom"}},{"path":"/pages/Detain/Detain","meta":{},"window":{"navigationBarTitleText":"扣车","navigationStyle":"custom"}},{"path":"/pages/move/move","meta":{},"window":{"navigationBarTitleText":"运力","navigationStyle":"custom"}},{"path":"/pages/rescue/order","meta":{},"window":{"navigationBarTitleText":"下单页-前","navigationStyle":"custom"}},{"path":"/pages/rescue/initiate","meta":{},"window":{"navigationBarTitleText":"下单页","navigationStyle":"custom"}},{"path":"/pages/rescue/initiateEdit","meta":{},"window":{"navigationBarTitleText":"修改工单页","navigationStyle":"custom"}},{"path":"/pages/rescue/initiateSurvey","meta":{},"window":{"navigationBarTitleText":"现场查勘工单页","navigationStyle":"custom"}},{"path":"/pages/rescue/historylist","meta":{},"window":{"navigationBarTitleText":"历史订单列表","navigationStyle":"custom"}},{"path":"/pages/select/select","meta":{},"window":{"navigationBarTitleText":"选择身份","navigationStyle":"custom"}},{"path":"/pages/login/login","meta":{},"window":{"navigationBarTitleText":"登录","navigationStyle":"custom"}},{"path":"/pages/login/register","meta":{},"window":{"navigationBarTitleText":"注册","navigationStyle":"custom"}},{"path":"/pages/login/forgot","meta":{},"window":{"navigationBarTitleText":"忘记密码","navigationStyle":"custom"}},{"path":"/pages/my/carManage","meta":{},"window":{"navigationBarTitleText":"","navigationStyle":"custom"}},{"path":"/pages/my/carManageForm","meta":{},"window":{"navigationBarTitleText":"","navigationStyle":"custom"}},{"path":"/pages/my/carlist","meta":{},"window":{"navigationBarTitleText":"","navigationStyle":"custom"}},{"path":"/pages/my/StatisticsInfo","meta":{},"window":{"navigationBarTitleText":"","navigationStyle":"custom"}},{"path":"/pages/internal/index","meta":{},"window":{"navigationBarTitleText":"","navigationStyle":"custom"}},{"path":"/pages/internal/NewstaffManagement","meta":{},"window":{"navigationBarTitleText":"","navigationStyle":"custom"}},{"path":"/pages/internal/rescueManage","meta":{},"window":{"navigationBarTitleText":"","navigationStyle":"custom"}},{"path":"/pages/internal/reportList","meta":{},"window":{"navigationBarTitleText":"","navigationStyle":"custom"}},{"path":"/pages/internal/reportDetals","meta":{},"window":{"navigationBarTitleText":"","navigationStyle":"custom"}},{"path":"/pages/internal/rescueAdd","meta":{},"window":{"navigationBarTitleText":"","navigationStyle":"custom"}},{"path":"/pages/internal/addStaff","meta":{},"window":{"navigationBarTitleText":"","navigationStyle":"custom"}},{"path":"/pages/internal/deviceManage","meta":{},"window":{"navigationBarTitleText":"","navigationStyle":"custom"}},{"path":"/pages/internal/informationManage","meta":{},"window":{"navigationBarTitleText":"","navigationStyle":"custom"}},{"path":"/pages/internal/informationAdd","meta":{},"window":{"navigationBarTitleText":"","navigationStyle":"custom"}},{"path":"/pages/my/revoke","meta":{},"window":{"navigationBarTitleText":"","navigationStyle":"custom"}},{"path":"/pages/process/dispatchProcess","meta":{},"window":{"navigationBarTitleText":"","navigationStyle":"custom"}},{"path":"/pages/process/dispatchAgentDriverExecute","meta":{},"window":{"navigationBarTitleText":"","navigationStyle":"custom"}},{"path":"/pages/my/classificationInfo","meta":{},"window":{"navigationBarTitleText":""}}];
__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}}}});

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -120,6 +120,48 @@ export async function getDictDataById(id) {
}
return data;
}
export function getDateRange(type) {
const now = new Date()
let start, end
if (type === 'week') {
// 获取本周的开始(周一)和结束(周日)
const day = now.getDay() || 7 // Sunday 为 0设为 7
start = new Date(now)
start.setDate(now.getDate() - day + 1)
end = new Date(start)
end.setDate(start.getDate() + 6)
} else if (type === 'month') {
// 获取本月的开始和结束
start = new Date(now.getFullYear(), now.getMonth(), 1)
end = new Date(now.getFullYear(), now.getMonth() + 1, 0) // 本月最后一天
}else if (type === 'day') {
// 获取当天的开始和结束00:00:00 到 23:59:59
start = new Date(now)
start.setHours(0, 0, 0, 0)
end = new Date(now)
end.setHours(23, 59, 59, 999)
} else {
console.warn('不支持的类型:', type)
return []
}
return [
formatDateCus(start),
formatDateCus(end)
]
}
export function formatDateCus(date) {
const y = date.getFullYear()
const m = (date.getMonth() + 1).toString().padStart(2, '0')
const d = date.getDate().toString().padStart(2, '0')
return `${y}-${m}-${d}`
}
export {
getWXStatusHeight,
}