Commit fbca9085171298f416a76a28c56bb779d939d343

Authored by lichao
1 parent 177df08c

提交12-9

Too many changes to show.

To preserve performance only 9 of 11 files are displayed.

garbage-removal/src/apis/order.js
... ... @@ -211,3 +211,12 @@ export async function insertRandomCopyByTypeAndOrderId(params) {
211 211 export async function selectGarOrderCar(orderNo) {
212 212 return await request.get(`/order/selectGarOrderCar/${orderNo}`);
213 213 }
  214 +
  215 +export async function deleteDriverByOrderNo(orderNo, carCode) {
  216 + return await request.post(`/order/deleteDriverByOrderNo`, null, {
  217 + params: {
  218 + orderNo,
  219 + carCode
  220 + }
  221 + });
  222 +}
... ...
garbage-removal/src/components/liu-delivery-time/liu-delivery-time.vue
... ... @@ -125,143 +125,69 @@ const getFutureDays = () => {
125 125  
126 126  
127 127 const getTimeList = () => {
128   - const timeList = [{
129   - time: '00:00-01:00',
130   - start: '00:00',
131   - end: '01:00',
132   - timeStr:'22-07'
133   - },{
134   - time: '01:00-02:00',
135   - start: '01:00',
136   - end: '02:00',
137   - timeStr:'22-07'
138   - },{
139   - time: '02:00-03:00',
140   - start: '02:00',
141   - end: '03:00',
142   - timeStr:'22-07'
143   - },{
144   - time: '03:00-04:00',
145   - start: '03:00',
146   - end: '04:00',
147   - timeStr:'22-07'
148   - },{
149   - time: '04:00-05:00',
150   - start: '04:00',
151   - end: '05:00',
152   - timeStr:'22-07'
153   - },{
154   - time: '05:00-06:00',
155   - start: '05:00',
156   - end: '06:00',
157   - timeStr:'22-07'
158   - },{
159   - time: '06:00-07:00',
160   - start: '06:00',
161   - end: '07:00',
162   - timeStr:'22-07'
163   - },{
164   - time: '07:00-08:00',
165   - start: '07:00',
166   - end: '08:00',
167   - timeStr:'07-08'
168   - },{
169   - time: '08:00-09:00',
170   - start: '08:00',
171   - end: '09:00',
172   - timeStr:'08-09'
173   - },{
174   - time: '09:00-10:00',
175   - start: '09:00',
176   - end: '10:00',
177   - timeStr:'09-10'
178   - },
179   - {
180   - time: '10:00-11:00',
181   - start: '10:00',
182   - end: '11:00',
183   - timeStr:'10-11'
184   - },
185   - {
186   - time: '11:00-12:00',
187   - start: '11:00',
188   - end: '12:00',
189   - timeStr:'11-12'
190   - },
191   - {
192   - time: '12:00-13:00',
193   - start: '12:00',
194   - end: '13:00',
195   - timeStr:'12-13'
196   - },
197   - {
198   - time: '13:00-14:00',
199   - start: '13:00',
200   - end: '14:00',
201   - timeStr:'13-14'
202   - },
203   - {
204   - time: '14:00-15:00',
205   - start: '14:00',
206   - end: '15:00',
207   - timeStr:'14-15'
208   - },
209   - {
210   - time: '15:00-16:00',
211   - start: '15:00',
212   - end: '16:00',
213   - timeStr:'15-16'
214   - },
215   - {
216   - time: '16:00-17:00',
217   - start: '16:00',
218   - end: '17:00',
219   - timeStr:'16-17'
220   - },
221   - {
222   - time: '17:00-18:00',
223   - start: '17:00',
224   - end: '18:00',
225   - timeStr:'17-18'
226   - },
227   - {
228   - time: '18:00-19:00',
229   - start: '18:00',
230   - end: '19:00',
231   - timeStr:'18-19'
232   - },
233   - {
234   - time: '19:00-20:00',
235   - start: '19:00',
236   - end: '20:00',
237   - timeStr:'19-20'
238   - },
239   - {
240   - time: '20:00-21:00',
241   - start: '20:00',
242   - end: '21:00',
243   - timeStr:'20-21'
244   - },
245   - {
246   - time: '21:00-22:00',
247   - start: '21:00',
248   - end: '22:00',
249   - timeStr:'21-22'
250   - },
251   - {
252   - time: '22:00-23:00',
253   - start: '22:00',
254   - end: '23:00',
255   - timeStr:'22-07'
256   - },
257   - {
258   - time: '23:00-24:00',
259   - start: '23:00',
260   - end: '24:00',
261   - timeStr:'22-07'
262   - }
263   - ];
264   - return timeList
  128 + const timeList = [{
  129 + time: '00:00-02:00',
  130 + start: '00:00',
  131 + end: '02:00',
  132 + timeStr:'22-07'
  133 + },{
  134 + time: '02:00-04:00',
  135 + start: '02:00',
  136 + end: '04:00',
  137 + timeStr:'22-07'
  138 + },{
  139 + time: '04:00-06:00',
  140 + start: '04:00',
  141 + end: '06:00',
  142 + timeStr:'22-07'
  143 + },{
  144 + time: '06:00-08:00',
  145 + start: '06:00',
  146 + end: '08:00',
  147 + timeStr:'22-07'
  148 + },{
  149 + time: '08:00-10:00',
  150 + start: '08:00',
  151 + end: '10:00',
  152 + timeStr:'07-08'
  153 + },{
  154 + time: '10:00-12:00',
  155 + start: '10:00',
  156 + end: '12:00',
  157 + timeStr:'10-11'
  158 + },{
  159 + time: '12:00-14:00',
  160 + start: '12:00',
  161 + end: '14:00',
  162 + timeStr:'12-13'
  163 + },{
  164 + time: '14:00-16:00',
  165 + start: '14:00',
  166 + end: '16:00',
  167 + timeStr:'14-15'
  168 + },{
  169 + time: '16:00-18:00',
  170 + start: '16:00',
  171 + end: '18:00',
  172 + timeStr:'16-17'
  173 + },{
  174 + time: '18:00-20:00',
  175 + start: '18:00',
  176 + end: '20:00',
  177 + timeStr:'18-19'
  178 + },{
  179 + time: '20:00-22:00',
  180 + start: '20:00',
  181 + end: '22:00',
  182 + timeStr:'20-21'
  183 + },{
  184 + time: '22:00-24:00',
  185 + start: '22:00',
  186 + end: '24:00',
  187 + timeStr:'22-07'
  188 + }
  189 + ];
  190 + return timeList
265 191 }
266 192  
267 193 /**
... ... @@ -271,12 +197,15 @@ const getTimeList = () => {
271 197 * @param {*} skip 跳过几个
272 198 */
273 199 const getCurrentDayTimeList = (startTime, hours, skip) => {
274   - const timeList = getTimeList();
275   - // 因为从9点开始所以从9点开始截取
276   - // let startIndex = startTime + skip;
277   - let abs = startTime > hours ? 1 : -1;
278   - let index = startTime - hours >= skip ? 0 : (startTime - hours) * abs + skip;
279   - return timeList.slice(index, timeList.length + 1)
  200 + const timeList = getTimeList();
  201 + // 计算当前小时所属的时间段索引
  202 + // 每个时间段是2小时,从00:00-02:00开始
  203 + let index = Math.floor(hours / 2) + 1; // 加1是为了跳过已过期的时间段
  204 + // 确保不会超出数组范围
  205 + if (index >= timeList.length) {
  206 + return []; // 如果没有可选时间段,返回空数组
  207 + }
  208 + return timeList.slice(index, timeList.length)
280 209 }
281 210 const open = () => {
282 211 isShow.value = true;
... ...
garbage-removal/src/manifest.json
... ... @@ -28,7 +28,14 @@
28 28 "<uses-permission android:name=\"android.permission.VIBRATE\"/>",
29 29 "<uses-permission android:name=\"android.permission.READ_LOGS\"/>",
30 30 "<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
31   - "<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
  31 + "<uses-feature android:name=\"android.permission.ACCESS_FINE_LOCATION\"/>",
  32 + "<uses-feature android:name=\"android.permission.ACCESS_COARSE_LOCATION\"/>",
  33 + "<uses-feature android:name=\"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS\"/>",
  34 + "<uses-feature android:name=\"android.hardware.location.gps\"/>",
  35 + "<uses-feature android:name=\"android.hardware.location.network\"/>",
  36 + "<uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\"/>",
  37 + "<uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\"/>",
  38 + "<uses-permission android:name=\"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS\"/>",
32 39 "<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
33 40 "<uses-permission android:name=\"android.permission.CAMERA\"/>",
34 41 "<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>",
... ... @@ -58,7 +65,7 @@
58 65 "appid" : "wx6c12c068d07c46f8",
59 66 "permission" : {
60 67 "scope.userLocation" : {
61   - "desc" : "你的位置信息将用于小程序位置接口的"
  68 + "desc" : "为了给您提供准确的地址定位服务"
62 69 }
63 70 },
64 71 "libVersion" : "latest",
... ... @@ -71,9 +78,13 @@
71 78 "router" : {
72 79 "mode" : "history"
73 80 },
74   - "sdkConfigs" : {
75   - "maps" : {}
76   - }
  81 + "sdkConfigs" : {
  82 + "maps" : {
  83 + "qqmap": {
  84 + "key": "XICBZ-ALWKT-2KPXZ-VCBL7-XMRYO-2QFS4"
  85 + }
  86 + }
  87 + }
77 88 },
78 89 "mp-alipay" : {
79 90 "usingComponents" : true
... ...
garbage-removal/src/pages/change-password/index.vue
... ... @@ -5,17 +5,6 @@
5 5 <view class="title">修改密码</view>
6 6  
7 7 <view class="input-wrapper">
8   - <u-icon name="account" size="36" color="#909399" class="input-icon"></u-icon>
9   - <input
10   - class="login-input"
11   - type="text"
12   - v-model="formData.phone"
13   - placeholder="请输入手机号"
14   - placeholder-class="placeholder-style"
15   - />
16   - </view>
17   -
18   - <view class="input-wrapper">
19 8 <u-icon name="lock" size="36" color="#909399" class="input-icon"></u-icon>
20 9 <input
21 10 class="login-input"
... ... @@ -49,10 +38,6 @@
49 38 </view>
50 39  
51 40 <button @tap="handleChangePassword" class="submit-btn">确认修改</button>
52   -
53   - <view class="back-to-login">
54   - <text class="link" @click="backToLogin">返回登录</text>
55   - </view>
56 41 </view>
57 42 </view>
58 43 </template>
... ... @@ -103,10 +88,6 @@ const getCaptcha = () =&gt; {
103 88 // 修改密码
104 89 const handleChangePassword = () => {
105 90 // 表单验证
106   - if (!proxy.$u.test.mobile(formData.value.phone)) {
107   - proxy.$u.toast("请输入正确的手机号");
108   - return;
109   - }
110 91  
111 92 if (!formData.value.oldPassword) {
112 93 proxy.$u.toast("请输入原密码");
... ... @@ -125,7 +106,6 @@ const handleChangePassword = () =&gt; {
125 106  
126 107 // 调用修改密码接口
127 108 const params = {
128   - tel: formData.value.phone,
129 109 oldPassword: formData.value.oldPassword,
130 110 newPassword: formData.value.newPassword,
131 111 };
... ...
garbage-removal/src/pages/home-info/address/addSite.vue
... ... @@ -162,739 +162,99 @@ const submit = () =&gt; {
162 162 }
163 163  
164 164 /**
165   - * 打开地图选择地址
  165 + * 打开地图选择地址(自动定位到当前位置,修复 startCompass:fail 问题)
166 166 */
167 167 const chooseAddressDetail = () => {
168   - console.log('打开地图选择地址');
169   - takeLocation();
170   -
171   - // 创建选择方式的模态框
172   - const choiceContainer = document.createElement('div');
173   - choiceContainer.id = 'choiceContainer';
174   - choiceContainer.style.cssText = ` position: fixed;
175   - top: 0;
176   - left: 0;
177   - width: 100%;
178   - height: 100%;
179   - background: rgba(0, 0, 0, 0.5);
180   - z-index: 9999;
181   - display: flex;
182   - justify-content: center;
183   - align-items: center;
184   - `;
185   -
186   - const choiceBox = document.createElement('div');
187   - choiceBox.style.cssText = ` background: white;
188   - padding: 20px;
189   - border-radius: 8px;
190   - text-align: center;
191   - width: 80%;
192   - max-width: 300px;
193   - box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
194   - `;
195   -
196   - const title = document.createElement('h3');
197   - title.innerText = '请选择地址输入方式';
198   - title.style.cssText = ` margin-top: 0;
199   - color: #333;
200   - font-size: 18px;
201   - `;
202   -
203   - const mapBtn = document.createElement('button');
204   - mapBtn.innerText = '地图选择';
205   - mapBtn.style.cssText = ` display: block;
206   - width: 100%;
207   - padding: 12px;
208   - margin: 10px 0;
209   - background: #19a97c;
210   - color: white;
211   - border: none;
212   - border-radius: 4px;
213   - cursor: pointer;
214   - font-size: 16px;
215   - transition: background 0.3s;
216   - `;
217   -
218   - mapBtn.onmouseover = function() {
219   - mapBtn.style.background = '#13966a';
220   - };
221   -
222   - mapBtn.onmouseout = function() {
223   - mapBtn.style.background = '#19a97c';
224   - };
225   -
226   - const manualBtn = document.createElement('button');
227   - manualBtn.innerText = '手动输入';
228   - manualBtn.style.cssText = ` display: block;
229   - width: 100%;
230   - padding: 12px;
231   - margin: 10px 0;
232   - background: #409eff;
233   - color: white;
234   - border: none;
235   - border-radius: 4px;
236   - cursor: pointer;
237   - font-size: 16px;
238   - transition: background 0.3s;
239   - `;
240   -
241   - manualBtn.onmouseover = function() {
242   - manualBtn.style.background = '#3388e6';
243   - };
244   -
245   - manualBtn.onmouseout = function() {
246   - manualBtn.style.background = '#409eff';
247   - };
248   -
249   - const cancelBtn = document.createElement('button');
250   - cancelBtn.innerText = '取消';
251   - cancelBtn.style.cssText = ` display: block;
252   - width: 100%;
253   - padding: 12px;
254   - margin: 10px 0;
255   - background: #ff4d4f;
256   - color: white;
257   - border: none;
258   - border-radius: 4px;
259   - cursor: pointer;
260   - font-size: 16px;
261   - transition: background 0.3s;
262   - `;
263   -
264   - cancelBtn.onmouseover = function() {
265   - cancelBtn.style.background = '#e63939';
266   - };
267   -
268   - cancelBtn.onmouseout = function() {
269   - cancelBtn.style.background = '#ff4d4f';
270   - };
271   -
272   - choiceBox.appendChild(title);
273   - choiceBox.appendChild(mapBtn);
274   - choiceBox.appendChild(manualBtn);
275   - choiceBox.appendChild(cancelBtn);
276   - choiceContainer.appendChild(choiceBox);
277   - document.body.appendChild(choiceContainer);
278   -
279   - // 地图选择按钮事件
280   - mapBtn.onclick = function() {
281   - document.body.removeChild(choiceContainer);
282   -
283   - // 地图选择方式
284   - let coordinate = 'gcj02';
285   -
286   - // 创建一个模态框来显示地图
287   - const mapContainer = document.createElement('div');
288   - mapContainer.id = 'mapContainerWrapper';
289   - mapContainer.style.cssText = ` position: fixed;
290   - top: 0;
291   - left: 0;
292   - width: 100%;
293   - height: 100%;
294   - background: white;
295   - z-index: 9999;
296   - `;
297   -
298   - // 创建顶部工具栏
299   - const toolbar = document.createElement('div');
300   - toolbar.style.cssText = ` position: absolute;
301   - top: 0;
302   - left: 0;
303   - width: 100%;
304   - height: 50px;
305   - background: #fff;
306   - box-shadow: 0 2px 4px rgba(0,0,0,0.1);
307   - z-index: 10000;
308   - display: flex;
309   - align-items: center;
310   - padding: 0 15px;
311   - box-sizing: border-box;
312   - `;
313   -
314   - const titleText = document.createElement('div');
315   - titleText.innerText = '请选择地址';
316   - titleText.style.cssText = ` flex: 1;
317   - text-align: center;
318   - font-size: 16px;
319   - font-weight: bold;
320   - color: #333;
321   - `;
322   -
323   - // 创建关闭按钮
324   - const closeBtn = document.createElement('button');
325   - closeBtn.innerText = '✕';
326   - closeBtn.style.cssText = ` width: 30px;
327   - height: 30px;
328   - background: #ff4d4f;
329   - color: white;
330   - border: none;
331   - border-radius: 50%;
332   - cursor: pointer;
333   - font-size: 16px;
334   - display: flex;
335   - align-items: center;
336   - justify-content: center;
337   - `;
338   -
339   - toolbar.appendChild(titleText);
340   - toolbar.appendChild(closeBtn);
341   -
342   - // 创建地图容器
343   - const mapElement = document.createElement('div');
344   - mapElement.id = 'mapContainer';
345   - mapElement.style.cssText = ` width: 100%;
346   - height: 100%;
347   - margin-top: 50px;
348   - `;
349   -
350   - mapContainer.appendChild(toolbar);
351   - mapContainer.appendChild(mapElement);
352   - document.body.appendChild(mapContainer);
353   -
354   - // 加载腾讯地图API
355   - const script = document.createElement('script');
356   - script.src = 'https://map.qq.com/api/js?v=2.exp&key=XICBZ-ALWKT-2KPXZ-VCBL7-XMRYO-2QFS4&callback=initMap';
357   -
358   - // 定义全局回调函数
359   - window.initMap = function() {
360   - // 初始化地图,设置默认位置为长沙
361   - const center = new qq.maps.LatLng(28.198265, 112.984353); // 长沙市坐标
362   - const map = new qq.maps.Map(mapElement, {
363   - center: center,
364   - zoom: 15
365   - });
366   - window.currentMapInstance = map;
367   - // 地图初始化完成后自动获取当前位置
368   - setTimeout(() => {
369   - takeLocation();
370   - }, 500);
371   -
372   - // 添加点击事件监听器
373   - qq.maps.event.addListener(map, 'click', function(event) {
374   - const lat = event.latLng.getLat();
375   - const lng = event.latLng.getLng();
376   -
377   - // 使用腾讯地图逆解析API获取地址信息
378   - const key = "XICBZ-ALWKT-2KPXZ-VCBL7-XMRYO-2QFS4";
379   - const url = `https://apis.map.qq.com/ws/geocoder/v1/?key=${key}&location=${lat},${lng}&output=jsonp`;
380   -
381   - // 创建script标签实现JSONP
382   - const jsonpScript = document.createElement('script');
383   - const callbackName = 'jsonp_callback_' + Math.round(100000 * Math.random());
384   -
385   - // 定义全局回调函数
386   - window[callbackName] = function(data) {
387   - // 清理
388   - delete window[callbackName];
389   - document.body.removeChild(jsonpScript);
390   -
391   - if (data.status === 0) {
392   - const component = data.result.address_component;
393   - const address = data.result.address;
394   -
395   - // 创建确认选择的模态框
396   - const confirmContainer = document.createElement('div');
397   - confirmContainer.style.cssText = ` position: fixed;
398   - top: 0;
399   - left: 0;
400   - width: 100%;
401   - height: 100%;
402   - background: rgba(0, 0, 0, 0.5);
403   - z-index: 10001;
404   - display: flex;
405   - justify-content: center;
406   - align-items: center;
407   - `;
408   -
409   - const confirmBox = document.createElement('div');
410   - confirmBox.style.cssText = ` background: white;
411   - padding: 20px;
412   - border-radius: 8px;
413   - text-align: center;
414   - width: 80%;
415   - max-width: 300px;
416   - box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
417   - `;
418   -
419   - const confirmTitle = document.createElement('h3');
420   - confirmTitle.innerText = '确认地址';
421   - confirmTitle.style.cssText = ` margin-top: 0;
422   - color: #333;
423   - `;
424   -
425   - const confirmText = document.createElement('p');
426   - confirmText.innerText = address;
427   - confirmText.style.cssText = ` color: #666;
428   - font-size: 14px;
429   - line-height: 1.5;
430   - margin: 10px 0;
431   - `;
432   -
433   - const confirmBtn = document.createElement('button');
434   - confirmBtn.innerText = '确认';
435   - confirmBtn.style.cssText = ` display: inline-block;
436   - width: 45%;
437   - padding: 10px;
438   - margin: 5px;
439   - background: #19a97c;
440   - color: white;
441   - border: none;
442   - border-radius: 4px;
443   - cursor: pointer;
444   - font-size: 14px;
445   - `;
446   -
447   - const cancelConfirmBtn = document.createElement('button');
448   - cancelConfirmBtn.innerText = '取消';
449   - cancelConfirmBtn.style.cssText = ` display: inline-block;
450   - width: 45%;
451   - padding: 10px;
452   - margin: 5px;
453   - background: #ff4d4f;
454   - color: white;
455   - border: none;
456   - border-radius: 4px;
457   - cursor: pointer;
458   - font-size: 14px;
459   - `;
460   -
461   - confirmBox.appendChild(confirmTitle);
462   - confirmBox.appendChild(confirmText);
463   - confirmBox.appendChild(confirmBtn);
464   - confirmBox.appendChild(cancelConfirmBtn);
465   - confirmContainer.appendChild(confirmBox);
466   - document.body.appendChild(confirmContainer);
467   -
468   - // 确认按钮事件
469   - confirmBtn.onclick = function() {
470   - addressInfo.garLongitude = lng;
471   - addressInfo.garLatitude = lat;
472   - addressInfo.garCoordinate = coordinate;
473   -
474   - if (component.province == "湖南省") {
475   - addressInfo.addressDetail = address.replace(component.province + component.city + component.district, "");
476   - addressInfo.addressArea = component.province + '-' + component.city + '-' + component.district;
477   - } else {
478   - addressInfo.addressDetail = address;
479   - }
480   -
481   - // 关闭所有模态框
482   - document.body.removeChild(confirmContainer);
483   - document.body.removeChild(mapContainer);
484   - // 清理全局函数
485   - delete window.initMap;
486   - };
487   -
488   - // 取消确认按钮事件
489   - cancelConfirmBtn.onclick = function() {
490   - document.body.removeChild(confirmContainer);
491   - };
492   - } else {
493   - // 创建错误提示的模态框
494   - const errorContainer = document.createElement('div');
495   - errorContainer.style.cssText = ` position: fixed;
496   - top: 0;
497   - left: 0;
498   - width: 100%;
499   - height: 100%;
500   - background: rgba(0, 0, 0, 0.5);
501   - z-index: 10001;
502   - display: flex;
503   - justify-content: center;
504   - align-items: center;
505   - `;
506   -
507   - const errorBox = document.createElement('div');
508   - errorBox.style.cssText = ` background: white;
509   - padding: 20px;
510   - border-radius: 8px;
511   - text-align: center;
512   - width: 80%;
513   - max-width: 300px;
514   - box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
515   - `;
516   -
517   - const errorTitle = document.createElement('h3');
518   - errorTitle.innerText = '提示';
519   - errorTitle.style.cssText = ` margin-top: 0;
520   - color: #333;
521   - `;
522   -
523   - const errorText = document.createElement('p');
524   - errorText.innerText = '地址解析失败,请重新选择';
525   - errorText.style.cssText = ` color: #666;
526   - font-size: 14px;
527   - margin: 10px 0;
528   - `;
529   -
530   - const okBtn = document.createElement('button');
531   - okBtn.innerText = '确定';
532   - okBtn.style.cssText = ` display: inline-block;
533   - width: 100%;
534   - padding: 10px;
535   - margin: 5px 0;
536   - background: #409eff;
537   - color: white;
538   - border: none;
539   - border-radius: 4px;
540   - cursor: pointer;
541   - font-size: 14px;
542   - `;
543   -
544   - errorBox.appendChild(errorTitle);
545   - errorBox.appendChild(errorText);
546   - errorBox.appendChild(okBtn);
547   - errorContainer.appendChild(errorBox);
548   - document.body.appendChild(errorContainer);
549   -
550   - // 确定按钮事件
551   - okBtn.onclick = function() {
552   - document.body.removeChild(errorContainer);
553   - };
554   - }
555   - };
556   -
557   - // 设置错误处理
558   - jsonpScript.onerror = function() {
559   - // 清理
560   - delete window[callbackName];
561   - document.body.removeChild(jsonpScript);
562   -
563   - // 创建错误提示的模态框
564   - const errorContainer = document.createElement('div');
565   - errorContainer.style.cssText = ` position: fixed;
566   - top: 0;
567   - left: 0;
568   - width: 100%;
569   - height: 100%;
570   - background: rgba(0, 0, 0, 0.5);
571   - z-index: 10001;
572   - display: flex;
573   - justify-content: center;
574   - align-items: center;
575   - `;
576   -
577   - const errorBox = document.createElement('div');
578   - errorBox.style.cssText = ` background: white;
579   - padding: 20px;
580   - border-radius: 8px;
581   - text-align: center;
582   - width: 80%;
583   - max-width: 300px;
584   - box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
585   - `;
586   -
587   - const errorTitle = document.createElement('h3');
588   - errorTitle.innerText = '提示';
589   - errorTitle.style.cssText = ` margin-top: 0;
590   - color: #333;
591   - `;
592   -
593   - const errorText = document.createElement('p');
594   - errorText.innerText = '地址解析失败,请重新选择';
595   - errorText.style.cssText = ` color: #666;
596   - font-size: 14px;
597   - margin: 10px 0;
598   - `;
599   -
600   - const okBtn = document.createElement('button');
601   - okBtn.innerText = '确定';
602   - okBtn.style.cssText = ` display: inline-block;
603   - width: 100%;
604   - padding: 10px;
605   - margin: 5px 0;
606   - background: #409eff;
607   - color: white;
608   - border: none;
609   - border-radius: 4px;
610   - cursor: pointer;
611   - font-size: 14px;
612   - `;
613   -
614   - errorBox.appendChild(errorTitle);
615   - errorBox.appendChild(errorText);
616   - errorBox.appendChild(okBtn);
617   - errorContainer.appendChild(errorBox);
618   - document.body.appendChild(errorContainer);
619   -
620   - // 确定按钮事件
621   - okBtn.onclick = function() {
622   - document.body.removeChild(errorContainer);
623   - };
624   - };
625   -
626   - jsonpScript.src = url + '&callback=' + callbackName;
627   - document.body.appendChild(jsonpScript);
628   - });
629   -
630   - // 添加当前位置定位功能
631   - if (navigator.geolocation) {
632   - navigator.geolocation.getCurrentPosition(
633   - (position) => {
634   - const lat = position.coords.latitude;
635   - const lng = position.coords.longitude;
636   - const pos = new qq.maps.LatLng(lat, lng);
637   - map.setCenter(pos);
638   - },
639   - (error) => {
640   - console.log('获取当前位置失败', error);
641   - }
642   - );
643   - }
644   - };
645   -
646   - // 关闭按钮事件
647   - closeBtn.onclick = function() {
648   - document.body.removeChild(mapContainer);
649   - // 清理全局函数
650   - delete window.initMap;
651   - };
652   -
653   - document.body.appendChild(script);
654   - };
655   -
656   - // 手动输入按钮事件
657   - manualBtn.onclick = function() {
658   - document.body.removeChild(choiceContainer);
659   -
660   - // 创建自定义输入框模态框
661   - const inputContainer = document.createElement('div');
662   - inputContainer.style.cssText = ` position: fixed;
663   - top: 0;
664   - left: 0;
665   - width: 100%;
666   - height: 100%;
667   - background: rgba(0, 0, 0, 0.5);
668   - z-index: 9999;
669   - display: flex;
670   - justify-content: center;
671   - align-items: center;
672   - `;
673   -
674   - const inputBox = document.createElement('div');
675   - inputBox.style.cssText = ` background: white;
676   - padding: 20px;
677   - border-radius: 8px;
678   - text-align: center;
679   - width: 80%;
680   - max-width: 300px;
681   - box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
682   - `;
683   -
684   - const inputTitle = document.createElement('h3');
685   - inputTitle.innerText = '请输入详细地址';
686   - inputTitle.style.cssText = ` margin-top: 0;
687   - color: #333;
688   - `;
689   -
690   - const inputField = document.createElement('input');
691   - inputField.type = 'text';
692   - inputField.placeholder = '请输入详细地址';
693   - inputField.style.cssText = ` width: 100%;
694   - padding: 10px;
695   - margin: 10px 0;
696   - border: 1px solid #ddd;
697   - border-radius: 4px;
698   - box-sizing: border-box;
699   - font-size: 14px;
700   - `;
701   -
702   - const submitBtn = document.createElement('button');
703   - submitBtn.innerText = '确定';
704   - submitBtn.style.cssText = ` display: inline-block;
705   - width: 45%;
706   - padding: 10px;
707   - margin: 5px;
708   - background: #19a97c;
709   - color: white;
710   - border: none;
711   - border-radius: 4px;
712   - cursor: pointer;
713   - font-size: 14px;
714   - `;
715   -
716   - const cancelInputBtn = document.createElement('button');
717   - cancelInputBtn.innerText = '取消';
718   - cancelInputBtn.style.cssText = ` display: inline-block;
719   - width: 45%;
720   - padding: 10px;
721   - margin: 5px;
722   - background: #ff4d4f;
723   - color: white;
724   - border: none;
725   - border-radius: 4px;
726   - cursor: pointer;
727   - font-size: 14px;
728   - `;
729   -
730   - inputBox.appendChild(inputTitle);
731   - inputBox.appendChild(inputField);
732   - inputBox.appendChild(submitBtn);
733   - inputBox.appendChild(cancelInputBtn);
734   - inputContainer.appendChild(inputBox);
735   - document.body.appendChild(inputContainer);
736   -
737   - // 确定按钮事件
738   - submitBtn.onclick = function() {
739   - const manualAddress = inputField.value.trim();
740   - if (manualAddress) {
741   - addressInfo.addressDetail = manualAddress;
742   - document.body.removeChild(inputContainer);
743   - } else {
744   - // 创建提示模态框
745   - const tipContainer = document.createElement('div');
746   - tipContainer.style.cssText = ` position: fixed;
747   - top: 0;
748   - left: 0;
749   - width: 100%;
750   - height: 100%;
751   - background: rgba(0, 0, 0, 0.5);
752   - z-index: 10000;
753   - display: flex;
754   - justify-content: center;
755   - align-items: center;
756   - `;
757   -
758   - const tipBox = document.createElement('div');
759   - tipBox.style.cssText = ` background: white;
760   - padding: 20px;
761   - border-radius: 8px;
762   - text-align: center;
763   - width: 80%;
764   - max-width: 300px;
765   - box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
766   - `;
767   -
768   - const tipText = document.createElement('p');
769   - tipText.innerText = '请输入详细地址';
770   - tipText.style.cssText = ` color: #666;
771   - font-size: 14px;
772   - margin: 10px 0;
773   - `;
774   -
775   - const okBtn = document.createElement('button');
776   - okBtn.innerText = '确定';
777   - okBtn.style.cssText = ` display: inline-block;
778   - width: 100%;
779   - padding: 10px;
780   - margin: 5px 0;
781   - background: #409eff;
782   - color: white;
783   - border: none;
784   - border-radius: 4px;
785   - cursor: pointer;
786   - font-size: 14px;
787   - `;
788   -
789   - tipBox.appendChild(tipText);
790   - tipBox.appendChild(okBtn);
791   - tipContainer.appendChild(tipBox);
792   - document.body.appendChild(tipContainer);
793   -
794   - // 确定按钮事件
795   - okBtn.onclick = function() {
796   - document.body.removeChild(tipContainer);
797   - };
798   - }
799   - };
800   -
801   - // 取消按钮事件
802   - cancelInputBtn.onclick = function() {
803   - document.body.removeChild(inputContainer);
804   - };
805   -
806   - // 回车键确认
807   - inputField.addEventListener('keypress', function(e) {
808   - if (e.key === 'Enter') {
809   - submitBtn.click();
810   - }
811   - });
812   -
813   - // 聚焦到输入框
814   - setTimeout(() => {
815   - inputField.focus();
816   - }, 100);
817   - };
818   -
819   - // 取消按钮事件
820   - cancelBtn.onclick = function() {
821   - document.body.removeChild(choiceContainer);
822   - };
823   -}
824   -
825   -// 定义定位回调函数
826   -const takeLocationCallBack = (lngLat) => {
827   - const ll = lngLat.split(",");
828   - console.log("定位结果:", ll);
829   -
830   - if (ll.length >= 2) {
831   - const longitude = parseFloat(ll[0]);
832   - const latitude = parseFloat(ll[1]);
833   -
834   - // 在地图上定位到当前位置
835   - const mapContainer = document.getElementById('mapContainer');
836   - if (mapContainer && window.qq && qq.maps && window.currentMapInstance) {
837   - const pos = new qq.maps.LatLng(latitude, longitude);
838   - window.currentMapInstance.setCenter(pos);
839   - window.currentMapInstance.setZoom(17); // 放大一些以便更好地查看位置
840   -
841   - // 清除之前的标记(如果有的话)
842   - if (window.currentLocationMarker) {
843   - window.currentLocationMarker.setMap(null);
844   - }
845   -
846   - // 添加新的当前位置标记
847   - window.currentLocationMarker = new qq.maps.Marker({
848   - position: pos,
849   - map: window.currentMapInstance
  168 + console.log('打开地图选择地址(自动定位)');
  169 +
  170 + // 1. 先获取当前位置的经纬度(关键:统一坐标系为 gcj02,关闭 altitude 避免额外权限)
  171 + uni.getLocation({
  172 + type: 'gcj02', // 必须使用 gcj02(腾讯/高德地图标准,避免坐标系不匹配)
  173 + altitude: false, // 关闭海拔获取,减少权限要求
  174 + isHighAccuracy: false, // 关闭高精度定位(降低硬件依赖)
  175 + success: (locationRes) => {
  176 + console.log('当前位置经纬度:', locationRes);
  177 + const { latitude, longitude } = locationRes;
  178 +
  179 + // 2. 打开地图选择器(移除可能触发指南针的参数)
  180 + uni.chooseLocation({
  181 + latitude: latitude,
  182 + longitude: longitude,
  183 + scale: 16,
  184 + name: addressInfo.addressDetail || '',
  185 + address: addressInfo.addressArea || '',
  186 + success: (res) => {
  187 + addressInfo.addressDetail = res.name;
  188 + addressInfo.garLongitude = res.longitude;
  189 + addressInfo.garLatitude = res.latitude;
  190 + },
  191 + fail: (err) => {
  192 + console.error('地图选择失败:', err);
  193 + handleLocationError(err);
  194 + }
850 195 });
  196 + },
  197 + fail: (err) => {
  198 + console.error('获取当前位置失败:', err);
  199 + handleLocationError(err);
  200 + }
  201 + });
  202 +};
851 203  
852   - // 创建或更新信息窗口
853   - if (!window.currentLocationInfoWindow) {
854   - window.currentLocationInfoWindow = new qq.maps.InfoWindow({
855   - map: window.currentMapInstance
856   - });
  204 +/**
  205 + * 统一处理定位/地图错误
  206 + */
  207 +const handleLocationError = (err) => {
  208 + const errMsg = err.errMsg || '';
  209 +
  210 + // 1. 处理权限拒绝
  211 + if (errMsg.includes('auth deny') || errMsg.includes('permission denied')) {
  212 + uni.showModal({
  213 + title: '授权提示',
  214 + content: '需要获取您的位置权限才能自动定位,请在设置中开启',
  215 + confirmText: '去设置',
  216 + cancelText: '手动输入',
  217 + success: (modalRes) => {
  218 + if (modalRes.confirm) {
  219 + uni.openSetting(); // 打开系统设置
  220 + } else {
  221 + // 手动输入地址(隐藏地图选择,直接让用户输入)
  222 + uni.showToast({ title: '请手动输入详细地址', icon: 'none' });
  223 + }
857 224 }
858   -
859   - // 设置信息窗口内容并打开
860   - window.currentLocationInfoWindow.setContent('<div style="padding:10px;">您的当前位置</div>');
861   - window.currentLocationInfoWindow.setPosition(pos);
862   - window.currentLocationInfoWindow.open();
863   - }
864   - } else {
865   - uni.showToast({
866   - title: '定位结果异常',
867   - icon: 'none'
868 225 });
869 226 }
870   -}
871 227  
872   -const takeLocation = () => {
873   - // 调用原生接口获取定位
874   - if (window.JsInterface && typeof window.JsInterface.takeLocation === 'function') {
875   - window.JsInterface.takeLocation();
876   - } else {
877   - // 如果没有原生接口,使用uni.getLocation作为备选方案
878   - uni.getLocation({
879   - type: 'gcj02',
880   - success: function (res) {
881   - // 直接处理结果
882   - handleLocationResult(res.longitude, res.latitude);
883   - },
884   - fail: function (err) {
885   - console.error('定位失败:', err);
886   - uni.showToast({
887   - title: '定位失败',
888   - icon: 'none'
  228 + // 2. 处理指南针失败(startCompass:fail)
  229 + else if (errMsg.includes('startCompass:fail')) {
  230 + uni.showModal({
  231 + title: '提示',
  232 + content: '当前设备不支持指南针功能,将为您打开地图手动选择地址',
  233 + showCancel: false,
  234 + success: () => {
  235 + // 降级方案:不传递初始经纬度,直接打开地图
  236 + uni.chooseLocation({
  237 + success: (res) => {
  238 + addressInfo.addressDetail = res.name;
  239 + addressInfo.garLongitude = res.longitude;
  240 + addressInfo.garLatitude = res.latitude;
  241 + },
  242 + fail: () => {
  243 + uni.showToast({ title: '地图选择失败,请手动输入地址', icon: 'none' });
  244 + }
889 245 });
890 246 }
891 247 });
892 248 }
893   -}
  249 +
  250 + // 3. 其他错误(网络/设备问题)
  251 + else {
  252 + uni.showToast({ title: '定位失败,请手动输入地址', icon: 'none' });
  253 + }
  254 +};
894 255  
895 256 onMounted(() => {
896 257 proxy.$refs.addressFrom.setRules(rules)
897   - window.takeLocationCallBack = takeLocationCallBack
898 258 })
899 259  
900 260 onLoad((options) => {
... ...
garbage-removal/src/pages/home-info/clean/index.vue
... ... @@ -71,7 +71,7 @@
71 71  
72 72 <view class="company-clean-container-car-main-content-type">
73 73 <view class="company-clean-container-car-main-content-type-price-area">
74   - <text style="color: red;">*</text>添加车辆数量:
  74 + <text style="color: red;">*</text>预估车辆数(趟):
75 75 </view>
76 76 <view style=" width:100%;display:flex; color:#909399; align-items: center;">
77 77 <u-number-box :min="0" :max="9999" integer buttonSize="46" :inputWidth="100"
... ...
garbage-removal/src/pages/home/index.vue
... ... @@ -45,10 +45,12 @@
45 45 <u-dropdown active-color="#19a97c">
46 46 <u-dropdown-item :height="'240rpx'" :placement="'left'" v-model="registrationAreaValue"
47 47 @change="handleDropdownAreaChange" :title="'所属区域'" :options="dropdownOptions[0]"></u-dropdown-item>
  48 +
48 49 <u-dropdown-item :placement="'center'" v-model="carTypeValue" @change="handleDropdownCarChange"
49 50 :title="'车辆类型'" :options="dropdownOptions[1]"></u-dropdown-item>
  51 +
50 52 <u-dropdown-item :placement="'right'" v-model="sortValue" @change="handleDropdownSortChange"
51   - :title="dropdownOptions[2][sortValue].label" :options="dropdownOptions[2]"></u-dropdown-item>
  53 + :title="'排序'" :options="dropdownOptions[2]"></u-dropdown-item>
52 54 </u-dropdown>
53 55 </view>
54 56 </view>
... ... @@ -158,18 +160,14 @@ const carTypeValue = ref(&#39;&#39;)
158 160 const carTypeRealValue = ref('')
159 161 const dropdownOptions = ref([
160 162 [{
161   - label: '芙蓉区',
162   - value: '芙蓉区',
  163 + label: '湘江新区',
  164 + value: '湘江新区'
163 165 },
164 166 {
165 167 label: '天心区',
166 168 value: '天心区'
167 169 },
168 170 {
169   - label: '岳麓区',
170   - value: '岳麓区'
171   - },
172   - {
173 171 label: '开福区',
174 172 value: '开福区'
175 173 },
... ... @@ -194,25 +192,25 @@ const dropdownOptions = ref([
194 192 value: '宁乡市'
195 193 },
196 194 {
197   - label: '湘江新区',
198   - value: '湘江新区'
  195 + label: '芙蓉区',
  196 + value: '芙蓉区'
199 197 }
200 198 ], [{
201 199 label: '暂未开放',
202 200 value: '暂未开放',
203 201 },]
204 202 , [{
205   - label: '距离排序',
  203 + label: '距离优先',
206 204 value: 0,
207 205 },
208   - {
209   - label: '清运排序',
210   - value: 1
211   - },
212   - {
213   - label: '评价排序',
214   - value: 2
215   - }]
  206 + {
  207 + label: '运量优先',
  208 + value: 1
  209 + },
  210 + {
  211 + label: '评分优先',
  212 + value: 2
  213 + }]
216 214 ])
217 215  
218 216 // 信息指南
... ... @@ -417,11 +415,27 @@ onShow(() =&gt; {
417 415  
418 416 const updateOrderBadge = async () => {
419 417 try {
420   - const res = await getOrderCountByType(0);
421   - await uni.setTabBarBadge({
422   - index: 1, // 订单tab在tabBar中的索引
423   - text: String(res.data.data.total)
424   - });
  418 + // 获取待清运订单数量(type=0)
  419 + const pendingRes = await getOrderCountByType(0);
  420 + const pendingCount = pendingRes.data.data.total || 0;
  421 +
  422 + // 获取清运中订单数量(type=1)
  423 + const processingRes = await getOrderCountByType(1);
  424 + const processingCount = processingRes.data.data.total || 0;
  425 +
  426 + // 计算总数
  427 + const totalCount = pendingCount + processingCount;
  428 +
  429 + if (totalCount > 0) {
  430 + await uni.setTabBarBadge({
  431 + index: 1, // 订单tab在tabBar中的索引
  432 + text: String(totalCount)
  433 + });
  434 + } else {
  435 + await uni.removeTabBarBadge({
  436 + index: 1
  437 + });
  438 + }
425 439 } catch (error) {
426 440 console.error('获取订单数量失败:', error);
427 441 }
... ...
garbage-removal/src/pages/login/code.vue
... ... @@ -97,7 +97,6 @@
97 97  
98 98 <view class="alternative">
99 99 <!-- <text class="link" @click="toRegister">立即注册</text>-->
100   - <text class="link" @click="toChangePassword">修改密码</text>
101 100 </view>
102 101 </view>
103 102 </view>
... ...
garbage-removal/src/pages/order-info/order-disposal/scan-detail/index.vue
... ... @@ -228,31 +228,44 @@
228 228 const handlerInputChange = (val) => {
229 229 console.log(val);
230 230 }
231   - const handlerSubmit = async () => {
232   - // 校验参数
233   - let params = {
234   - ...details.value,
235   - fillImageList: fileList.value.map((item) => item.url),
236   - garOrderHandlerCompanyName: details.value.garOrderCompanyName,
237   - garOrderHandlerCompanyId: details.value.garOrderCompanyId,
238   - // 添加定位信息
239   - latitude: location.value.latitude,
240   - longitude: location.value.longitude,
241   - transportDistance : details.value.transportDistance
242   - }
243   - if (validateParams(params)) {
244   - await askTransport(params).then((res) => {
245   - console.log(res);
246   - if (res.data.code == 200) {
247   - // 修改提示框,添加跳转到订单页面的选项
248   - uni.$u.toast("当前趟次记录完毕!")
249   - }
250   - }).catch((err) => {
251   - uni.$u.toast("当前趟次记录失败")
252   - })
253   - }
254 231  
255   - }
  232 + const handlerSubmit = async () => {
  233 + // 校验参数
  234 + let params = {
  235 + ...details.value,
  236 + fillImageList: fileList.value.map((item) => item.url),
  237 + garOrderHandlerCompanyName: details.value.garOrderCompanyName,
  238 + garOrderHandlerCompanyId: details.value.garOrderCompanyId,
  239 + // 添加定位信息
  240 + latitude: location.value.latitude,
  241 + longitude: location.value.longitude,
  242 + transportDistance : details.value.transportDistance
  243 + }
  244 + if (validateParams(params)) {
  245 + // 添加确认提醒对话框
  246 + uni.showModal({
  247 + title: '确认提交',
  248 + content: `请确认以下信息:\n\n车辆载重:${params.garCarryingWeight} 吨\n\n确认无误后点击确定提交`,
  249 + success: function (res) {
  250 + if (res.confirm) {
  251 + // 用户点击确定
  252 + askTransport(params).then((res) => {
  253 + console.log(res);
  254 + if (res.data.code == 200) {
  255 + // 修改提示框,添加跳转到订单页面的选项
  256 + uni.$u.toast("当前趟次记录完毕!")
  257 + }
  258 + }).catch((err) => {
  259 + uni.$u.toast("当前趟次记录失败")
  260 + })
  261 + } else if (res.cancel) {
  262 + // 用户点击取消
  263 + console.log('用户点击取消');
  264 + }
  265 + }
  266 + });
  267 + }
  268 + }
256 269  
257 270 const validateParams = (params) => {
258 271 if (!params.garOrderHandlerName) {
... ...