Commit 328547074b5d3bc277cb01134847ccbc4615ad9d

Authored by guzijian
1 parent 38584a8d

feat: 初步修改

Showing 24 changed files with 487 additions and 961 deletions
garbage-removal/src/apis/company.js
@@ -19,3 +19,12 @@ export async function queryEnterpriseList(params) { @@ -19,3 +19,12 @@ export async function queryEnterpriseList(params) {
19 {params:params} 19 {params:params}
20 ); 20 );
21 } 21 }
  22 +
  23 +/**
  24 + * @method 企业详情
  25 + */
  26 +export async function queryEnterpriseById(id) {
  27 + return await request.get(
  28 + `/unit/enterprise/${id}`
  29 + );
  30 +}
garbage-removal/src/pages.json
@@ -45,7 +45,7 @@ @@ -45,7 +45,7 @@
45 "enablePullDownRefresh": false 45 "enablePullDownRefresh": false
46 } 46 }
47 },{ 47 },{
48 - "path": "pages/order/detail/index", 48 + "path": "pages/order/other-home/detail/index",
49 "style": { 49 "style": {
50 "navigationBarTitleText": "派单详情", 50 "navigationBarTitleText": "派单详情",
51 "navigationBarTextStyle": "white", 51 "navigationBarTextStyle": "white",
@@ -53,7 +53,7 @@ @@ -53,7 +53,7 @@
53 "enablePullDownRefresh": false 53 "enablePullDownRefresh": false
54 } 54 }
55 },{ 55 },{
56 - "path": "pages/order/success/index", 56 + "path": "pages/order/other-home/success/index",
57 "style": { 57 "style": {
58 "navigationBarTitleText": "完成派单", 58 "navigationBarTitleText": "完成派单",
59 "navigationBarTextStyle": "white", 59 "navigationBarTextStyle": "white",
@@ -61,7 +61,7 @@ @@ -61,7 +61,7 @@
61 "enablePullDownRefresh": false 61 "enablePullDownRefresh": false
62 } 62 }
63 },{ 63 },{
64 - "path": "pages/order/guest/index", 64 + "path": "pages/order/other-home/guest/index",
65 "style": { 65 "style": {
66 "navigationBarTitleText": "详情", 66 "navigationBarTitleText": "详情",
67 "navigationBarTextStyle": "white", 67 "navigationBarTextStyle": "white",
@@ -69,7 +69,7 @@ @@ -69,7 +69,7 @@
69 "enablePullDownRefresh": false 69 "enablePullDownRefresh": false
70 } 70 }
71 },{ 71 },{
72 - "path": "pages/order/upload/index", 72 + "path": "pages/order/other-home/upload/index",
73 "style": { 73 "style": {
74 "navigationBarTitleText": "上传照片", 74 "navigationBarTitleText": "上传照片",
75 "navigationBarTextStyle": "white", 75 "navigationBarTextStyle": "white",
@@ -77,7 +77,7 @@ @@ -77,7 +77,7 @@
77 "enablePullDownRefresh": false 77 "enablePullDownRefresh": false
78 } 78 }
79 },{ 79 },{
80 - "path": "pages/order/evaluate-info/index", 80 + "path": "pages/order/other-home/evaluate-info/index",
81 "style": { 81 "style": {
82 "navigationBarTitleText": "评价详情", 82 "navigationBarTitleText": "评价详情",
83 "navigationBarTextStyle": "white", 83 "navigationBarTextStyle": "white",
@@ -85,7 +85,7 @@ @@ -85,7 +85,7 @@
85 "enablePullDownRefresh": false 85 "enablePullDownRefresh": false
86 } 86 }
87 },{ 87 },{
88 - "path": "pages/order/evaluate/index", 88 + "path": "pages/order/other-home/evaluate/index",
89 "style": { 89 "style": {
90 "navigationBarTitleText": "写评价", 90 "navigationBarTitleText": "写评价",
91 "navigationBarTextStyle": "white", 91 "navigationBarTextStyle": "white",
garbage-removal/src/pages/home/clean/company-detail/index.vue
@@ -93,6 +93,7 @@ @@ -93,6 +93,7 @@
93 93
94 <script setup> 94 <script setup>
95 import { queryCarList } from '@/apis/carinfo.js'; 95 import { queryCarList } from '@/apis/carinfo.js';
  96 +import { queryEnterpriseById } from '@/apis/company.js';
96 import { onLoad } from '@dcloudio/uni-app'; 97 import { onLoad } from '@dcloudio/uni-app';
97 import { ref } from 'vue'; 98 import { ref } from 'vue';
98 const baseDataList = ref([{ label: '法人' }, { label: '负责人' }, { label: '业务联系电话' }, { label: '道路运输许可证' }, { label: '核准有效期' }, { label: '注册地址' }]); 99 const baseDataList = ref([{ label: '法人' }, { label: '负责人' }, { label: '业务联系电话' }, { label: '道路运输许可证' }, { label: '核准有效期' }, { label: '注册地址' }]);
@@ -130,11 +131,23 @@ const handleContactClick = (val) =&gt; { @@ -130,11 +131,23 @@ const handleContactClick = (val) =&gt; {
130 }).catch(err => { }); 131 }).catch(err => { });
131 } 132 }
132 onLoad((options) => { 133 onLoad((options) => {
133 - companyInfo.value = JSON.parse(options.companyObj);  
134 - userAddress.value = JSON.parse(options.userAddress);  
135 - tel.value = options.tel;  
136 - initData(companyInfo.value);  
137 - queryCarList({ companyId: companyInfo.value.id }).then(res => { 134 + let companyId;
  135 + if (options.companyObj && options.userAddress && options.tel) {
  136 + companyInfo.value = JSON.parse(options.companyObj);
  137 + userAddress.value = JSON.parse(options.userAddress);
  138 + tel.value = options.tel;
  139 + initData(companyInfo.value);
  140 + companyId = companyInfo.value.id
  141 + }
  142 + if (options.companyId) {
  143 + companyId = options.companyId
  144 + queryEnterpriseById(companyId).then(res => {
  145 + companyInfo.value = res.data.data
  146 + initData(companyInfo.value);
  147 + })
  148 + }
  149 +
  150 + queryCarList({ companyId: companyId }).then(res => {
138 carList.value = res.data.rows 151 carList.value = res.data.rows
139 }) 152 })
140 }) 153 })
@@ -161,7 +174,6 @@ const handlerClickJumpMap = () =&gt; { @@ -161,7 +174,6 @@ const handlerClickJumpMap = () =&gt; {
161 } 174 }
162 } 175 }
163 }) 176 })
164 - console.log('跳转定位到公司位置');  
165 } 177 }
166 178
167 const initData = (baseData) => { 179 const initData = (baseData) => {
garbage-removal/src/pages/home/clean/index-back.vue deleted 100644 → 0
1 -<template>  
2 - <view class="mask-box">  
3 - <liu-delivery-time :isMask="true" :change="changeTime" ref="chooseTime" title="请选择预约时间"></liu-delivery-time>  
4 - <u-picker closeOnClickOverlay :show="carTypeShowFlag" :columns="candidates" :itemHeight="100"  
5 - @confirm="handlePickerCarInfoConfirm" @cancel="handleCarInfoClick(false)"  
6 - @close="handleCarInfoClick(false)"></u-picker>  
7 - <u-picker closeOnClickOverlay :show="garbageTypeShowFlag" :columns="garbageTypeList" :itemHeight="100"  
8 - @confirm="handlePickerGarbageTypeConfirm" @close="handleGarbageTypeClick(false)"  
9 - @cancel="handleGarbageTypeClick(false)"></u-picker>  
10 - <u-popup :zIndex="10074" closeOnClickOverlay :show="carPopupShowFlag" :round="10" @close="handlePopupClick(false)"  
11 - @open="handlePopupClick(true)">  
12 - <view class="company-clean-container-car-popup">  
13 - <!-- 主要内容 -->  
14 - <view class="company-clean-container-car-popup-content">  
15 - <view class="company-clean-container-car-popup-content-title">  
16 - <view style="text-align: center;">  
17 - 车辆类型  
18 - </view>  
19 - </view>  
20 - <view class="company-clean-container-car-popup-content-box">  
21 - <view class="company-clean-container-car-popup-content-box-item" v-for="(item, index) in garCarInfoList"  
22 - :key="index">  
23 - <view class="company-clean-container-car-popup-content-box-item-text">  
24 - {{ item.garOrderCarType }}  
25 - </view>  
26 - <view class="company-clean-container-car-popup-content-box-item-number" hover-class="hoverClickStyle">  
27 - <u-number-box :min="0" :max="9999" integer buttonSize="46" :inputWidth="100"  
28 - v-model="garCarInfoList[item.garOrderCarType].garOrderCarNumber" :disabledInput="true"></u-number-box>  
29 - </view>  
30 - </view>  
31 -  
32 - </view>  
33 - </view>  
34 - <!-- 占位盒子 -->  
35 - <view class="company-clean-container-car-popup-button-safe">  
36 - &nbsp;  
37 - </view>  
38 - </view>  
39 - </u-popup>  
40 - </view>  
41 - <view class="company-clean-container">  
42 - <view class="company-clean-container-box">  
43 - <view class="company-clean-container-header">  
44 - <view class="company-clean-container-header-address">  
45 - {{ userAddress.garUserAddress }}{{ userAddress.garRemark }}  
46 - </view>  
47 - <view class="company-clean-container-header-base-info">  
48 - {{ userAddress.garUserContactName }} {{ userAddress.garUserContactTel }}  
49 - </view>  
50 - <view @click.stop="handleTimeChoose" class="company-clean-container-header-reservation">  
51 - <view class="company-clean-container-header-reservation-left">  
52 - <text style="color: red;">*</text> <u-icon name="calendar" size="40"></u-icon>预约时间  
53 - </view>  
54 - <view class="company-clean-container-header-reservation-right">  
55 - <text style="margin-right: 10rpx;">{{ dayTime ? dayTime : "请选择时间" }}</text> <u-icon name="arrow-right"  
56 - size="25"></u-icon>  
57 - </view>  
58 - </view>  
59 - </view>  
60 - <view class="company-clean-container-car-main">  
61 - <view class="company-clean-container-car-main-content">  
62 - <view v-if="paramFrom.carType" class="company-clean-container-car-main-content-type">  
63 - <text class="company-clean-container-car-main-content-type-price-area"><text  
64 - style="color: red;">*</text>车辆类型:</text>  
65 - <!-- <uni-combox label="" :candidates="candidates" placeholder="请选择运输车辆类型"  
66 - v-model="paramFrom.carType"></uni-combox> -->  
67 - <view class="" hover-class="hoverClickStyle" @click.stop="handleCarInfoClick(true)">  
68 - <u--input color="#909399" border="none" style="pointer-events:none" :modelValue="paramFrom.carType"  
69 - type="text" placeholder-class="line" readonly />  
70 - </view>  
71 - </view>  
72 - <view class="company-clean-container-car-main-content-type">  
73 - <text class="company-clean-container-car-main-content-type-price-area"><text  
74 - style="color: red;">*</text>垃圾类型:</text>  
75 - <view hover-class="hoverClickStyle" @click.stop="handleGarbageTypeClick(true)">  
76 - <u--input color="#909399" border="none" style="pointer-events:none" :modelValue="paramFrom.garbageType"  
77 - type="text" placeholder-class="line" readonly />  
78 - </view>  
79 - </view>  
80 - <view class="company-clean-container-car-main-content-img">  
81 - <image class="company-clean-container-car-main-content-img" :src="carFront" />  
82 - </view>  
83 - <view class="company-clean-container-car-main-content-remark">  
84 - {{ garCarTransportInfo }}  
85 - </view>  
86 -  
87 - <view v-if="paramFrom.carType" class="company-clean-container-car-main-content-number">  
88 - <view class="company-clean-container-car-main-content-number-txt">  
89 - <text style="color: red;">*</text>协商车辆数量:  
90 - </view>  
91 - <view class="company-clean-container-car-main-content-number-button">  
92 - <u-number-box :min="0" :max="9999" integer buttonSize="46" :inputWidth="100"  
93 - v-model="garCarInfoList[paramFrom.carType].garOrderCarNumber"></u-number-box>  
94 - </view>  
95 - </view>  
96 - <view class="company-clean-container-car-main-content-prompt">  
97 - 温馨提示:垃圾类型不符合,企业有权拒绝清运。  
98 - </view>  
99 - </view>  
100 - </view>  
101 - <view class="company-clean-container-site-image-info">  
102 - <view class="company-clean-container-site-image-info-remark">  
103 - <text style="color: red;">*</text>现场照片(最多上传10张)  
104 - </view>  
105 - <view class="company-clean-container-site-image-info-img">  
106 - <u-upload width="200" height="150" :fileList="fileList" @afterRead="afterRead" @delete="deletePic" name="3"  
107 - multiple :maxCount="10" :previewFullImage="true"></u-upload>  
108 - </view>  
109 - <view class="company-clean-container-site-image-info-input-remark">  
110 - 填写备注  
111 - </view>  
112 - <view class="company-clean-container-site-image-info-input-remark-box">  
113 - <u--textarea v-model="paramFrom.remark" placeholder="请输入内容"></u--textarea>  
114 - </view>  
115 - </view>  
116 - <view class="company-clean-container-site-image-info-sure-button">  
117 - <view class="company-clean-container-site-image-info-sure-button-radio">  
118 - <view @click="changeAgree">  
119 - <u-checkbox-group v-model="paramFrom.sureReadFlag" placement="row">  
120 - <u-checkbox activeColor="#5ac725" :customStyle="{ marginBottom: '0px', marginTop: '1px' }" size="25"  
121 - labelSize="25" shape="square" :key="0" :name="true" :labelDisabled="true"  
122 - labelColor="#909399"></u-checkbox>  
123 - </u-checkbox-group>  
124 - </view>  
125 - <view>  
126 - 本人已确认信息真实有效,并将上述信息告知市容环境卫生主管部门。  
127 - </view>  
128 - </view>  
129 - </view>  
130 - </view>  
131 - <view class="company-clean-bottom" style="z-index: 10074;">  
132 - <movable-area v-if="!carPopupShowFlag" ref="movableAreaElement" class="movableArea">  
133 - <movable-view class="movableView" :x="x" :y="y" direction="all" @change="onChange">  
134 - <view class="company-clean-call-box-container">  
135 - <u-icon @click="handleContactClick(tel)" name="phone-fill" color="#ffffff" size="50"></u-icon>  
136 - </view>  
137 - </movable-view>  
138 - </movable-area>  
139 - <view class="company-clean-bottom-box">  
140 - <view class="company-clean-bottom-left">  
141 - <view class="company-clean-bottom-left-icon">  
142 - <u-icon @click="carPopupShowFlag = true" :stop="true" size="50" name="car-fill"></u-icon>  
143 - </view>  
144 - <view class="company-clean-bottom-left-number">  
145 - <up-badge :type="type" max="99" :value="garCarNumberCount"></up-badge>  
146 - </view>  
147 - </view>  
148 - <view class="company-clean-bottom-right">  
149 - <u-button @click="handleOderSure" shape="square" color="#a9e08f" text="立即派单"></u-button>  
150 - </view>  
151 - </view>  
152 - </view>  
153 - </view>  
154 -</template>  
155 -  
156 -<script setup>  
157 -import { queryCarList } from '@/apis/carinfo.js';  
158 -import { uploadFilePromise } from '@/apis/common.js';  
159 -import { saveOrder } from '@/apis/order.js';  
160 -import liuDeliveryTime from "@/components/liu-delivery-time/liu-delivery-time.vue";  
161 -import { useMainStore } from '@/stores/index.js';  
162 -import { onLoad } from '@dcloudio/uni-app';  
163 -import { computed, getCurrentInstance, nextTick, ref, watch } from 'vue';  
164 -const { proxy } = getCurrentInstance();  
165 -  
166 -const store = useMainStore();  
167 -const userType = computed(() => store.userType)  
168 -const x = ref(5)  
169 -const y = ref()  
170 -const movableAreaElement = ref()  
171 -const companyObj = ref()  
172 -const tel = ref()  
173 -const carTypeShowFlag = ref(false)  
174 -const garbageTypeShowFlag = ref(false)  
175 -const carPopupShowFlag = ref(false)  
176 -const userAddress = ref({  
177 - garUserContactName: "",  
178 - garUserContactTel: "",  
179 - garRemark: "",  
180 - garUserAddress: "",  
181 - garCoordinate: "",  
182 - garLongitude: "",  
183 - garLatitude: "",  
184 -})  
185 -// 车辆信息  
186 -const garCarInfoList = ref({})  
187 -const garCarLabelInfoList = ref({})  
188 -const garCarLabelInfoNow = ref()  
189 -const garCarTransportInfo = computed(() => {  
190 - try {  
191 - let carInfo = garCarLabelInfoNow.value  
192 - let lengthWidthHeight = carInfo.lengthWidthHeight.split(";");  
193 - let boxLength = lengthWidthHeight[0]; // 箱子的长度(单位:米)  
194 - let boxWidth = lengthWidthHeight[1]; // 箱子的宽度(单位:米)  
195 - let boxHeight = lengthWidthHeight[2]; // 箱子的高度(单位:米)  
196 -  
197 - let bagLength = 0.75; // 袋子的长度(单位:米)  
198 - let bagWidth = 0.45; // 袋子的宽度(单位:米)  
199 - let bagHeight = 0.22; // 袋子的高度(单位:米)  
200 -  
201 - let boxVolume = boxLength * boxWidth * boxHeight; // 箱子的体积(单位:立方米)  
202 - let bagVolume = bagLength * bagWidth * bagHeight; // 袋子的体积(单位:立方米)  
203 -  
204 - let bagCount = Math.floor(boxVolume / bagVolume); // 箱子可以容纳的袋子数量(向下取整)  
205 -  
206 - return `箱体长${boxLength}m宽${boxWidth}m高${boxHeight}m,最多课容纳约${bagCount}袋袋装修垃圾(75cm * 45cm每袋)。`  
207 - } catch (error) {  
208 - return "符合装修垃圾运输管理规范的新型环保智能装修垃圾运输车。"  
209 - }  
210 -  
211 -})  
212 -// 车辆数量  
213 -const garCarNumberCount = computed(() => {  
214 - let count = 0;  
215 - if (garCarInfoList.value) {  
216 - for (const key in garCarInfoList.value) {  
217 - const element = garCarInfoList.value[key];  
218 - count = typeof element.garOrderCarNumber === 'number' ? count + element.garOrderCarNumber : count;  
219 - console.log(element.garOrderCarNumber instanceof Number);  
220 - }  
221 - }  
222 - console.log(count);  
223 - return count;  
224 -})  
225 -const garbageTypeList = ref([["装修垃圾", "建筑垃圾"]])  
226 -const paramFrom = ref({  
227 - carNumber: 0,  
228 - remark: "",  
229 - sureReadFlag: [],  
230 - carType: "",  
231 - garbageType: "装修垃圾"  
232 -})  
233 -const dayTime = ref()  
234 -  
235 -const chooseTime = ref()  
236 -const fileList = ref([])  
237 -const candidates = ref([])  
238 -const handleTimeChoose = () => {  
239 - chooseTime.value.open();  
240 -}  
241 -  
242 -const changeTime = (e) => {  
243 - dayTime.value = e.value  
244 -}  
245 -const changeAgree = (e) => {  
246 - // paramFrom.value.sureReadFlag = e  
247 - paramFrom.value.sureReadFlag[0] = !paramFrom.value.sureReadFlag[0]  
248 -}  
249 -const onChange = (e) => {  
250 - // console.log(e);  
251 -}  
252 -  
253 -const handlePopupClick = (val) => {  
254 - carPopupShowFlag.value = val  
255 -}  
256 -  
257 -/**  
258 - * 初始化信息  
259 - */  
260 -onLoad((options) => {  
261 - companyObj.value = JSON.parse(options.companyObj);  
262 - tel.value = options.tel;  
263 - userAddress.value = JSON.parse(options.userAddress);  
264 - queryCarList({ companyId: companyObj.value.id }).then(res => {  
265 - // 设置车辆类型  
266 - candidates.value = [[...new Set(res.data.rows  
267 - .filter(item => item.containerVolume)  
268 - .map(item => {  
269 - garCarLabelInfoList.value[item.containerVolume + "方车"] = item  
270 - return item.containerVolume + "方车"  
271 - }))  
272 - ]];  
273 - // 设置初始车辆数量  
274 - candidates.value[0].forEach((item, index) => {  
275 - garCarInfoList.value[item] = {  
276 - garOrderCarNumber: 0,  
277 - garOrderCarType: item  
278 - }  
279 - })  
280 - // 设置默认车辆  
281 - paramFrom.value.carType = candidates.value[0][0];  
282 - garCarLabelInfoNow.value = garCarLabelInfoList.value[paramFrom.value.carType]  
283 - })  
284 -})  
285 -  
286 -  
287 -const handleCarInfoClick = (val) => {  
288 - carTypeShowFlag.value = val  
289 -}  
290 -const handleGarbageTypeClick = (val) => {  
291 - garbageTypeShowFlag.value = val  
292 -}  
293 -/**  
294 - * 拨打电话回调  
295 - */  
296 -const handleContactClick = (val) => {  
297 - uni.makePhoneCall({ phoneNumber: val }).then(res => {  
298 - }).catch(err => { });  
299 -}  
300 -  
301 -// 删除图片  
302 -const deletePic = (event) => {  
303 - fileList.value.splice(event.index, 1);  
304 -};  
305 -  
306 -// 新增图片  
307 -const afterRead = async (event) => {  
308 - // 当设置 mutiple 为 true 时, file 为数组格式,否则为对象格式  
309 - let lists = [].concat(event.file);  
310 - let fileListLen = fileList.value.length;  
311 - lists.map((item) => {  
312 - fileList.value.push({  
313 - ...item,  
314 - status: 'uploading',  
315 - message: '上传中',  
316 - });  
317 - });  
318 - for (let i = 0; i < lists.length; i++) {  
319 - let requestPath = import.meta.env.VITE_BASE_URL + import.meta.env.VITE_BASE_FILE_UPLOAD_PREFIX;  
320 - const result = await uploadFilePromise(requestPath, lists[i].url);  
321 - let item = fileList.value[fileListLen];  
322 - fileList.value.splice(fileListLen, 1, {  
323 - ...item,  
324 - status: 'success',  
325 - message: '',  
326 - url: result.data.fileName,  
327 - });  
328 - fileListLen++;  
329 - }  
330 -};  
331 -  
332 -  
333 -const handlePickerGarbageTypeConfirm = (e) => {  
334 - paramFrom.value.garbageType = e.value  
335 - garbageTypeShowFlag.value = false  
336 -}  
337 -const handlePickerCarInfoConfirm = (e) => {  
338 - paramFrom.value.carType = e.value  
339 - garCarLabelInfoNow.value = garCarLabelInfoList.value[paramFrom.value.carType]  
340 - carTypeShowFlag.value = false  
341 - console.log(garCarLabelInfoNow.value);  
342 -}  
343 -  
344 -/**  
345 - * 处理下单  
346 - */  
347 -const handleOderSure = () => {  
348 - let garCarInfos = [];  
349 - for (const key in garCarInfoList.value) {  
350 - garCarInfos.push(garCarInfoList.value[key])  
351 - }  
352 -  
353 - let params = {  
354 - /**  
355 - * 派单地址  
356 - */  
357 - garOrderAddress: userAddress.value.garUserAddress,  
358 -  
359 - /**  
360 - * 派单详细地址  
361 - */  
362 - garOrderAddressDetails: userAddress.value.garRemark,  
363 -  
364 - /**  
365 - * 派单姓名  
366 - */  
367 - garOrderContactName: userAddress.value.garUserContactName,  
368 - garCarInfoList: garCarInfos,  
369 -  
370 - /**  
371 - * 垃圾类型  
372 - */  
373 - garOrderTrashType: paramFrom.value.garbageType,  
374 -  
375 - /**  
376 - * 派单人电话  
377 - */  
378 - garOrderContactTel: userAddress.value.garUserContactTel,  
379 -  
380 - /**  
381 - * 承接经营单位  
382 - */  
383 - garOrderCompanyId: companyObj.value.id,  
384 -  
385 - /**  
386 - * 公司名称  
387 - */  
388 - garOrderCompanyName: companyObj.value.name,  
389 -  
390 - /**  
391 - * 公司负责人电话  
392 - */  
393 - garOrderCompanyTel: companyObj.value.servicePhone,  
394 -  
395 - /**  
396 - * 约定时间  
397 - */  
398 - garOrderAgreementTime: dayTime.value,  
399 - /**  
400 - * 备注  
401 - */  
402 - garRemark: paramFrom.value.remark,  
403 - /**  
404 - * 图片列表  
405 - */  
406 - imageUrls: fileList.value.map(item => item.url),  
407 - garLongitude: userAddress.value.garLongitude,  
408 - garLatitude: userAddress.value.garLatitude,  
409 - garCoordinate: userAddress.value.garCoordinate,  
410 - }  
411 - if (!validateParams(params)) {  
412 - return;  
413 - }  
414 -  
415 - saveOrder(params).then(res => {  
416 - // TODO 派单详情  
417 - if (res.data.success) {  
418 - if (userType.value === "运输驾驶员") {  
419 - uni.$u.toast("派单成功,请切换成且角色查看派单详情")  
420 - setTimeout(() => {  
421 - uni.$u.route({  
422 - type: 'navigateBack',  
423 - url: `pages/home/index`,  
424 - })  
425 - }, 300)  
426 - } else {  
427 - uni.$u.route({  
428 - type: "redirect",  
429 - url: `pages/order/detail/index`,  
430 - params: {  
431 - orderId: res.data.data  
432 - }  
433 - })  
434 - uni.$u.toast(res.data.msg)  
435 - }  
436 -  
437 - }  
438 - })  
439 -}  
440 -  
441 -  
442 -/**  
443 - * 校验参数  
444 - * @param {Object} params  
445 - */  
446 -const validateParams = (params) => {  
447 - if (!paramFrom.value.sureReadFlag[0]) {  
448 - jumpPrompt('请勾选"本人已确认信息真实有效,并将上诉信息告知市容环境卫生主管部门"')  
449 - return false;  
450 - }  
451 - for (const key in params) {  
452 - if (!params[key] && key != "garRemark") {  
453 - switch (key) {  
454 - case "garOrderAgreementTime":  
455 - jumpPrompt('请选择预约时间')  
456 - break;  
457 -  
458 - }  
459 - return false;  
460 - }  
461 - if (key === "garCarInfoList") {  
462 - let count = 0;  
463 - params[key].forEach(item => {  
464 - count += item.garOrderCarNumber;  
465 - })  
466 - if (count === 0) {  
467 - jumpPrompt('请添加车辆数量')  
468 - return false;  
469 - }  
470 - }  
471 -  
472 - if (key == "imageUrls") {  
473 - if (params[key].length == 0) {  
474 - jumpPrompt('请上传现场图片')  
475 - return false;  
476 - }  
477 - if (!validateImage(params[key])) {  
478 - uni.$u.toast('请等待图片上传完毕')  
479 - return false;  
480 - }  
481 - }  
482 - }  
483 - return true;  
484 -}  
485 -  
486 -const jumpPrompt = (msg) => {  
487 - uni.showModal({  
488 - title: '提示',  
489 - content: msg,  
490 - showCancel: false,  
491 - success: function (res) {  
492 - if (res.confirm) {  
493 - } else if (res.cancel) {  
494 - }  
495 - }  
496 - });  
497 -}  
498 -const validateImage = (fileList) => {  
499 - for (let index = 0; index < fileList.length; index++) {  
500 - const str = fileList[index];  
501 - if (!str.startsWith("/profile/upload")) {  
502 - return false;  
503 - }  
504 - }  
505 - return true;  
506 -}  
507 -  
508 -  
509 -// 开始执行一次  
510 -watch(carPopupShowFlag, (val) => {  
511 - // console.log(val);  
512 - // carPopupShowFlag.value = val  
513 - if (!val) {  
514 - setTimeout(() => {  
515 - nextTick(() => {  
516 - let areaHeight;  
517 - // select中的参数就如css选择器一样选择元素  
518 - let movableArea = uni.createSelectorQuery().in(proxy).select(".movableArea");  
519 - movableArea.boundingClientRect(function (data) {  
520 - // data - 包含元素的高度等信息  
521 - areaHeight = data.height;  
522 - y.value = areaHeight > 40 ? (areaHeight - 40) : areaHeight;  
523 - }).exec(function (res) {  
524 - // 注意:exec方法必须执行,即便什么也不做,否则不会获取到任何数据  
525 - })  
526 - })  
527 - }, 0);  
528 - }  
529 -}, {  
530 - immediate: true  
531 -})  
532 -  
533 -</script>  
534 -  
535 -<style lang="scss" scoped>  
536 -$custom-marin-bottom: 20rpx;  
537 -$custom-page-padding: 20rpx;  
538 -$custom-border-radio: 20rpx;  
539 -$custom-bottom-height: 200rpx;  
540 -  
541 -  
542 -.company-clean-container {  
543 - height: 100%;  
544 - width: 100%;  
545 - background-color: $u-info-light;  
546 - box-sizing: border-box;  
547 - overflow-y: scroll;  
548 -  
549 -  
550 - .company-clean-container-box {  
551 - height: 100%;  
552 - width: 100%;  
553 - padding: $custom-page-padding;  
554 - box-sizing: border-box;  
555 -  
556 - .company-clean-container-header {  
557 - padding: $custom-page-padding;  
558 - box-sizing: border-box;  
559 - background-color: #ffffff;  
560 - border-radius: $custom-border-radio;  
561 - margin-bottom: $custom-marin-bottom;  
562 -  
563 - .company-clean-container-header-address {  
564 - font-size: 30rpx;  
565 - font-weight: bold;  
566 - color: $u-main-color;  
567 - }  
568 -  
569 - .company-clean-container-header-base-info {  
570 - font-size: 25rpx;  
571 - color: $u-info;  
572 - line-height: 80rpx;  
573 - }  
574 -  
575 - .company-clean-container-header-reservation {  
576 - display: flex;  
577 - justify-content: space-between;  
578 - font-size: 25rpx;  
579 - @include handleClick;  
580 -  
581 - .company-clean-container-header-reservation-left {  
582 - display: flex;  
583 - align-items: center;  
584 - color: $u-content-color;  
585 - }  
586 -  
587 - .company-clean-container-header-reservation-right {  
588 - display: flex;  
589 - align-items: center;  
590 - color: $u-content-color;  
591 - }  
592 - }  
593 -  
594 -  
595 - }  
596 -  
597 - .company-clean-container-car-main {  
598 - padding: $custom-page-padding;  
599 - border-radius: $custom-border-radio;  
600 - box-sizing: border-box;  
601 - background-color: #ffffff;  
602 - margin-bottom: $custom-marin-bottom;  
603 -  
604 - .company-clean-container-car-main-title {  
605 - font-size: 30rpx;  
606 - font-weight: bold;  
607 - color: #a9e08f;  
608 - display: flex;  
609 - justify-content: center;  
610 - }  
611 -  
612 - .company-clean-container-car-main-content {  
613 - width: 100%;  
614 - display: flex;  
615 - flex-direction: column;  
616 - justify-content: center;  
617 -  
618 - .company-clean-container-car-main-content-img {  
619 - width: 600rpx;  
620 - height: 400rpx;  
621 -  
622 - .company-clean-container-car-main-content-img {  
623 - width: 600rpx;  
624 - height: 400rpx;  
625 - }  
626 - }  
627 -  
628 - .company-clean-container-car-main-content-remark {  
629 - color: $u-tips-color;  
630 - font-size: 23rpx;  
631 - line-height: 30rpx;  
632 - padding: $custom-page-padding;  
633 - background-color: $u-info-light;  
634 - word-break: break-all;  
635 - }  
636 -  
637 - .company-clean-container-car-main-content-type {  
638 - margin-top: $custom-marin-bottom;  
639 - margin-bottom: $custom-marin-bottom;  
640 - display: flex;  
641 - justify-content: space-between;  
642 - border-radius: $custom-border-radio;  
643 - // background-color: $u-info-light;  
644 - box-sizing: border-box;  
645 -  
646 - .company-clean-container-car-main-content-type-price-area {  
647 - display: flex;  
648 - justify-content: flex-start;  
649 - align-items: center;  
650 - color: $u-info;  
651 - white-space: nowrap;  
652 - }  
653 - }  
654 -  
655 - .company-clean-container-car-main-content-number {  
656 - display: flex;  
657 - justify-content: space-between;  
658 - font-size: 28rpx;  
659 - color: $u-tips-color;  
660 - font-weight: small;  
661 - align-items: center;  
662 -  
663 - .company-clean-container-car-main-content-number-txt {  
664 - line-height: 80rpx;  
665 - }  
666 -  
667 - .company-clean-container-car-main-content-number-button {}  
668 - }  
669 - }  
670 -  
671 -  
672 - }  
673 -  
674 - .company-clean-container-car-main-content-prompt {  
675 - color: $u-tips-color;  
676 - font-size: 23rpx;  
677 - line-height: 30rpx;  
678 - padding: $custom-page-padding;  
679 - word-break: break-all;  
680 - text-align: center;  
681 - }  
682 -  
683 - .company-clean-container-site-image-info {  
684 - padding: $custom-page-padding;  
685 - background-color: #ffffff;  
686 - border-radius: $custom-border-radio;  
687 - color: $u-info;  
688 - font-size: 28rpx;  
689 - margin-bottom: $custom-marin-bottom;  
690 -  
691 - .company-clean-container-site-image-info-remark {  
692 - line-height: 80rpx;  
693 -  
694 - }  
695 -  
696 - .company-clean-container-site-image-info-img {}  
697 -  
698 - .company-clean-container-site-image-info-input-remark {  
699 - line-height: 80rpx;  
700 - }  
701 -  
702 - .company-clean-container-site-image-info-input-remark-box {}  
703 - }  
704 -  
705 - .company-clean-container-site-image-info-sure-button {  
706 - padding-bottom: $custom-bottom-height;  
707 - font-size: 28rpx;  
708 -  
709 - .company-clean-container-site-image-info-sure-button-radio {  
710 - padding: $custom-page-padding;  
711 - box-sizing: border-box;  
712 - display: flex;  
713 - // flex-flow: row wrap;  
714 - font-size: 25rpx;  
715 - color: $u-info;  
716 - }  
717 - }  
718 - }  
719 -  
720 - .company-clean-bottom {  
721 - position: absolute;  
722 - width: 100%;  
723 - // height: 100%;  
724 - bottom: 0;  
725 - left: 0;  
726 - // 阴影  
727 - box-shadow: 0 0 10rpx 0 rgba(0, 0, 0, 0.1);  
728 -  
729 - .movableArea {  
730 - pointer-events: none;  
731 - position: fixed;  
732 - left: 0;  
733 - top: 0;  
734 - width: 100%;  
735 - height: calc(100% - $custom-bottom-height);  
736 - // z-index: 99;  
737 -  
738 - .movableView {  
739 - pointer-events: auto;  
740 - min-height: 60rpx;  
741 - min-width: 60rpx;  
742 -  
743 - .company-clean-call-box-container {  
744 - min-height: 60rpx;  
745 - min-width: 60rpx;  
746 - display: flex;  
747 - align-items: center;  
748 - justify-content: center;  
749 - background-color: #a9e08f;  
750 - border-radius: 100%;  
751 - }  
752 - }  
753 - }  
754 -  
755 - .company-clean-bottom-box {  
756 - height: $custom-bottom-height;  
757 - background-color: #ffffff;  
758 - padding: 50rpx;  
759 - box-sizing: border-box;  
760 - display: flex;  
761 - justify-content: space-between;  
762 - align-items: center;  
763 -  
764 - .company-clean-bottom-left {  
765 - display: flex;  
766 -  
767 - .company-clean-bottom-left-icon {  
768 - transform: rotateY(180deg);  
769 - }  
770 -  
771 - }  
772 -  
773 - .company-clean-bottom-right {  
774 - min-width: 200rpx;  
775 - }  
776 - }  
777 -  
778 - }  
779 -  
780 -  
781 -  
782 -}  
783 -  
784 -.hoverClickStyle {  
785 - @include handleClick;  
786 -}  
787 -  
788 -// 弹出框  
789 -.company-clean-container-car-popup {  
790 - min-height: 450rpx;  
791 - padding: $custom-page-padding;  
792 - box-sizing: border-box;  
793 -  
794 - .company-clean-container-car-popup-content {  
795 - font-size: 28rpx;  
796 -  
797 - .company-clean-container-car-popup-content-box {  
798 - box-sizing: border-box;  
799 - padding: $custom-page-padding;  
800 - border: 2rpx solid #a9e08f;  
801 - border-radius: 10rpx;  
802 -  
803 - .company-clean-container-car-popup-content-box-item {  
804 - display: flex;  
805 - align-items: center;  
806 - justify-content: space-between;  
807 - margin: 20rpx 0;  
808 - box-sizing: border-box;  
809 -  
810 - .company-clean-container-car-popup-content-box-item-text {}  
811 -  
812 - .company-clean-container-car-popup-content-box-item-number {}  
813 - }  
814 - }  
815 -  
816 - .company-clean-container-car-popup-content-title {  
817 - color: $u-main-color;  
818 - box-sizing: border-box;  
819 - margin-bottom: 20rpx;  
820 - font-size: 30rpx;  
821 - font-weight: bold;  
822 - }  
823 - }  
824 -  
825 - .company-clean-container-car-popup-button-safe {  
826 - width: 100%;  
827 - height: $custom-bottom-height;  
828 - }  
829 -}  
830 -</style>  
garbage-removal/src/pages/home/clean/index.vue
@@ -182,6 +182,7 @@ @@ -182,6 +182,7 @@
182 </template> 182 </template>
183 183
184 <script setup> 184 <script setup>
  185 +import { queryAddress } from '@/apis/address.js';
185 import { queryCarList } from '@/apis/carinfo.js'; 186 import { queryCarList } from '@/apis/carinfo.js';
186 import { uploadFilePromise } from '@/apis/common.js'; 187 import { uploadFilePromise } from '@/apis/common.js';
187 import { saveOrder } from '@/apis/order.js'; 188 import { saveOrder } from '@/apis/order.js';
@@ -296,7 +297,21 @@ const handlePopupClick = (val) =&gt; { @@ -296,7 +297,21 @@ const handlePopupClick = (val) =&gt; {
296 onLoad((options) => { 297 onLoad((options) => {
297 companyObj.value = JSON.parse(options.companyObj); 298 companyObj.value = JSON.parse(options.companyObj);
298 tel.value = options.tel; 299 tel.value = options.tel;
299 - userAddress.value = JSON.parse(options.userAddress); 300 + if (options.userAddress == 'undefined') {
  301 + queryAddress('CURRENT').then(res => {
  302 + try {
  303 + if (res.data.data && res.data.data[0]) {
  304 + console.log(res);
  305 + userAddress.value = res.data.data[0] ? res.data.data[0] : {}
  306 + console.log(userAddress.value);
  307 + }
  308 + } catch (error) {
  309 + userAddress.value = {};
  310 + }
  311 + })
  312 + } else {
  313 + userAddress.value = JSON.parse(options.userAddress);
  314 + }
300 queryCarList({ companyId: companyObj.value.id }).then(res => { 315 queryCarList({ companyId: companyObj.value.id }).then(res => {
301 // 设置车辆类型 316 // 设置车辆类型
302 candidates.value = [[...new Set(res.data.rows 317 candidates.value = [[...new Set(res.data.rows
@@ -453,6 +468,7 @@ const handleOderSure = () =&gt; { @@ -453,6 +468,7 @@ const handleOderSure = () =&gt; {
453 garInCarStore: paramFrom.value.garInCarStore 468 garInCarStore: paramFrom.value.garInCarStore
454 } 469 }
455 if (!validateParams(params)) { 470 if (!validateParams(params)) {
  471 + console.log("未通过", params);
456 return; 472 return;
457 } 473 }
458 474
@@ -470,7 +486,7 @@ const handleOderSure = () =&gt; { @@ -470,7 +486,7 @@ const handleOderSure = () =&gt; {
470 } else { 486 } else {
471 uni.$u.route({ 487 uni.$u.route({
472 type: "redirect", 488 type: "redirect",
473 - url: `pages/order/detail/index`, 489 + url: `pages/order/other-home/detail/index`,
474 params: { 490 params: {
475 orderId: res.data.data 491 orderId: res.data.data
476 } 492 }
garbage-removal/src/pages/home/clean/scroll-text.vue deleted 100644 → 0
1 -<template>  
2 - <view class="car-type-list-box" :style="activeStyle">  
3 - <span v-for="(item, index) in candidates[0]" :key="index">{{ item }}</span>  
4 -  
5 - </view>  
6 -</template>  
7 -  
8 -<script setup>  
9 -import { getCurrentInstance, onMounted, ref } from "vue";  
10 -const { proxy } = getCurrentInstance();  
11 -const activeStyle = ref({  
12 - height: '100rpx',  
13 - display: 'flex',  
14 - justifyContent: 'center',  
15 - alignItems: 'center',  
16 - flexDirection: 'column',  
17 - overflowY: 'auto',  
18 -})  
19 -// uniapp 限制不能直接获取操作dom只能通过动态绑定style修改样式  
20 -const props = defineProps({  
21 - candidates: {  
22 - type: Array,  
23 - required: true,  
24 - default: () => []  
25 - }  
26 -})  
27 -const columns = ref(props.candidates[0])  
28 -onMounted(() => {  
29 - // carTypeBox.value.style.height = minHeight.value + 'rpx';  
30 -  
31 -  
32 -})  
33 -</script>  
34 -  
35 -<style lang="scss" scoped></style>  
garbage-removal/src/pages/login/index.vue
@@ -44,7 +44,7 @@ import { userLogin } from &quot;@/apis/user.js&quot;; @@ -44,7 +44,7 @@ import { userLogin } from &quot;@/apis/user.js&quot;;
44 export default { 44 export default {
45 data() { 45 data() {
46 return { 46 return {
47 - tel: '13222222222', 47 + tel: '18966667777',
48 agree: [] 48 agree: []
49 } 49 }
50 }, 50 },
garbage-removal/src/pages/order/handler-home/index.vue 0 → 100644
  1 +<template>
  2 + <z-paging-swiper>
  3 + <template v-slot:top>
  4 + <u-tabs lineWidth="40" lineColor="#ffffff" lineHeight="6"
  5 + :activeStyle="{ 'color': '#ffffff', 'font-weight': 'bolder' }" :inactiveStyle="{ color: '#ffffff' }"
  6 + ref="uTabsElement" :list="list" :current="current" @change="tabsChange" :scrollable="false"></u-tabs>
  7 + </template>
  8 + <swiper class="swiper" :current="swiperCurrent" @translation="translation" @animationfinish="animationfinish">
  9 + <swiper-item class="swiper-item" v-for="(item, index) in list" :key="index">
  10 + <swiper-list-item :tabIndex="index" :currentIndex="swiperCurrent"></swiper-list-item>
  11 + </swiper-item>
  12 + </swiper>
  13 + </z-paging-swiper>
  14 +</template>
  15 +
  16 +<script setup>
  17 +import { ref } from 'vue';
  18 +import swiperListItem from './swiper-list-item/index.vue';
  19 +const list = ref([{ name: '待清运' }, { name: '清运中' }, { name: '全部' }, { name: '已完成' }])
  20 +const current = ref(0);
  21 +const swiperCurrent = ref(0);
  22 +const uTabsElement = ref();
  23 +uni.setNavigationBarTitle({
  24 + title: "处理场所"
  25 +})
  26 +const tabsChange = (el) => {
  27 + swiperCurrent.value = Number(el.index)
  28 +}
  29 +const animationfinish = (e) => {
  30 + current.value = e.detail.current
  31 + swiperCurrent.value = e.detail.current
  32 +}
  33 +const translation = (e) => {
  34 + uTabsElement.value.setDx(e.detail.dx)
  35 +}
  36 +</script>
  37 +<style lang="scss" scoped>
  38 +::v-deep .u-tabs__wrapper__scroll-view {
  39 + background-color: #53c21d;
  40 +}
  41 +
  42 +.swiper {
  43 + height: 100%;
  44 + background: linear-gradient(to bottom, $u-success-dark, $u-bg-color, $u-bg-color, $u-bg-color, $u-bg-color, $u-bg-color, $u-bg-color);
  45 +}
  46 +</style>
garbage-removal/src/pages/order/handler-home/swiper-list-item/index.vue 0 → 100644
  1 +<template>
  2 + <view class="content-container">
  3 + <z-paging ref="paging" :fixed="false" v-model="dataList" :auto="false" @query="queryList">
  4 + <empty-view slot:empty></empty-view>
  5 + <view class="page-box">
  6 + <view class="order" v-for="(item, index) in dataList" :key="index">
  7 + <view class="top">
  8 + <view class="left">
  9 + <u-icon name="home" :size="30" color="rgb(94,94,94)"></u-icon>
  10 + <view class="store">{{ item.garOrderCompanyName }}</view>
  11 + <u-icon name="arrow-right" color="rgb(203,203,203)" :size="26"></u-icon>
  12 + </view>
  13 + <view style="display: flex;align-items: center;">
  14 + <text v-if="item.garOrderHandlerStatus != 3 && item.garOrderStatus === 3 && userType === '运输驾驶员'"
  15 + style="font-size: small;color: #f56c6c;">派单已经完成了。</text>
  16 + <view v-if="item.garOrderHandlerStatus === 0 && item.garCancelFlag === 0" class="right">待清运 </view>
  17 + <view v-if="item.garOrderHandlerStatus === 1 && item.garCancelFlag === 0" class="right">清运中 </view>
  18 + <view v-if="item.garOrderHandlerStatus === 3 && userType === '运输驾驶员'" class="right">已完成 </view>
  19 + </view>
  20 + </view>
  21 + <view class="item" @click="handleClick(item.garOrderId)">
  22 + <view class="left">
  23 + <image :src="item.goodsUrl" mode="aspectFill"></image>
  24 + </view>
  25 + <view class="content">
  26 + <view class="title u-line-2">{{ item.garOrderAddress + item.garOrderAddressDetails }}</view>
  27 + <view class="type">垃圾类型: {{ item.garOrderTrashType }}</view>
  28 + <view class="delivery-time">预约时间 {{ item.garOrderAgreementTime }}</view>
  29 + </view>
  30 + </view>
  31 + </view>
  32 + </view>
  33 + </z-paging>
  34 + </view>
  35 +</template>
  36 +
  37 +<script setup>
  38 +import { queryOrderList } from "@/apis/order.js";
  39 +import { useMainStore } from '@/stores/index.js';
  40 +import { onShow } from "@dcloudio/uni-app";
  41 +import { computed, ref, watch } from 'vue';
  42 +const props = defineProps({
  43 + tabIndex: {
  44 + type: Number
  45 + },
  46 + currentIndex: {
  47 + type: Number
  48 + }
  49 +})
  50 +
  51 +const store = useMainStore();
  52 +const userType = computed(() => store.userType)
  53 +const dataList = ref([]);
  54 +const paging = ref(null);
  55 +const firstLoaded = ref(false)
  56 +
  57 +const handleClick = (orderId) => {
  58 + uni.$u.route({
  59 + url: `pages/order/other-home/detail/index`,
  60 + params: {
  61 + orderId: orderId
  62 + }
  63 + })
  64 +}
  65 +
  66 +// list集合
  67 +const queryList = (pageNo, pageSize) => {
  68 + //这里的pageNo和pageSize会自动计算好,直接传给服务器即可
  69 + //这里的请求只是演示,请替换成自己的项目的网络请求,并在网络请求回调中通过paging.value.complete(请求回来的数组)将请求结果传给z-paging
  70 + //request.queryList({ pageNo, pageSize }).then(res => {
  71 + //请勿在网络请求回调中给dataList赋值!!只需要调用complete就可以了
  72 + queryOrderList({ type: props.tabIndex, pageNo, pageSize }).then((res) => {
  73 + paging.value.complete([
  74 + {
  75 + garOrderId: 1,
  76 + garOrderAddress: '广东省广州市天河区',
  77 + garOrderAddressDetails: '天河北路168号',
  78 + garOrderTrashType: '可回收垃圾',
  79 + garOrderAgreementTime: '2022-08-01 10:00',
  80 + garOrderHandlerStatus: 0,
  81 + garCancelFlag: 0,
  82 + garOrderStatus: 0,
  83 + goodsUrl: 'https://cdn.uviewui.com/uview/swiper/1.jpg'
  84 + },
  85 + {
  86 + garOrderId: 2,
  87 + garOrderAddress: '广东省广州市天河区',
  88 + garOrderAddressDetails: '天河北路168号',
  89 + garOrderTrashType: '可回收垃圾',
  90 + garOrderAgreementTime: '2022-08-01 10:00',
  91 + garOrderHandlerStatus: 0,
  92 + garCancelFlag: 0,
  93 + garOrderStatus: 0,
  94 + goodsUrl: 'https://cdn.uviewui.com/uview/swiper/2.jpg'
  95 + }
  96 + ]);
  97 + firstLoaded.value = true
  98 + }).catch(res => {
  99 + //如果请求失败写paging.value.complete(false),会自动展示错误页面
  100 + //注意,每次都需要在catch中写这句话很麻烦,z-paging提供了方案可以全局统一处理
  101 + //在底层的网络请求抛出异常时,写uni.$emit('z-paging-error-emit');即可
  102 + paging.value.complete(false);
  103 + })
  104 +}
  105 +
  106 +onShow(() => {
  107 + if (props.currentIndex == props.tabIndex) {
  108 + if (firstLoaded.value) {
  109 + setTimeout(() => {
  110 + paging.value.reload();
  111 + }, 50);
  112 + }
  113 + }
  114 +})
  115 +
  116 +// 重写load的方法,自动刷新
  117 +watch(() => props.currentIndex, (val1, val2) => {
  118 + if (props.currentIndex == props.tabIndex) {
  119 + if (!firstLoaded.value) {
  120 + setTimeout(() => {
  121 + paging.value.reload();
  122 + }, 50);
  123 + }
  124 + }
  125 +}, { immediate: true })
  126 +</script>
  127 +
  128 +<style lang="scss" scoped>
  129 +.content-container {
  130 + height: 100%;
  131 +
  132 + .order {
  133 + width: 90%;
  134 + background-color: #ffffff;
  135 + margin: 20rpx auto;
  136 + border-radius: 20rpx;
  137 + box-sizing: border-box;
  138 + padding: 20rpx;
  139 + font-size: 28rpx;
  140 +
  141 + &:active {
  142 + background-color: #f3f4f6;
  143 + opacity: 0.8;
  144 + transition: opacity 0.3s;
  145 + -webkit-transition: opacity 0.3s;
  146 + -moz-transition: opacity 0.3s;
  147 + -ms-transition: opacity 0.3s;
  148 + }
  149 +
  150 + .top {
  151 + display: flex;
  152 + justify-content: space-between;
  153 +
  154 + .left {
  155 + display: flex;
  156 + align-items: center;
  157 +
  158 + .store {
  159 + margin: 0 10rpx;
  160 + font-size: 32rpx;
  161 + font-weight: bold;
  162 + }
  163 + }
  164 + }
  165 +
  166 + .item {
  167 + display: flex;
  168 + align-items: center;
  169 + margin: 20rpx 0 0;
  170 +
  171 + .left {
  172 + margin-right: 20rpx;
  173 +
  174 + image {
  175 + width: 100rpx;
  176 + height: 100rpx;
  177 + border-radius: 10rpx;
  178 + }
  179 + }
  180 +
  181 + .content {
  182 +
  183 + .title {
  184 + font-size: 28rpx;
  185 + line-height: 50rpx;
  186 + }
  187 +
  188 + .type {
  189 + margin: 10rpx 0;
  190 + font-size: 24rpx;
  191 + color: $u-tips-color;
  192 + }
  193 +
  194 + .delivery-time {
  195 + color: #e5d001;
  196 + font-size: 24rpx;
  197 + }
  198 + }
  199 +
  200 +
  201 + }
  202 +
  203 + .total {
  204 + margin-top: 20rpx;
  205 + text-align: right;
  206 + font-size: 24rpx;
  207 +
  208 + .total-price {
  209 + font-size: 32rpx;
  210 + }
  211 + }
  212 +
  213 + .bottom {
  214 + display: flex;
  215 + margin-top: 20rpx;
  216 + padding: 0 10rpx;
  217 + justify-content: space-between;
  218 + align-items: center;
  219 +
  220 + .btn {
  221 + line-height: 52rpx;
  222 + width: 160rpx;
  223 + border-radius: 26rpx;
  224 + border: 2rpx solid $u-border-color;
  225 + font-size: 26rpx;
  226 + text-align: center;
  227 + color: $u-info-dark;
  228 + }
  229 +
  230 + .btn--hover {
  231 + background-color: $u-success-light;
  232 + }
  233 +
  234 + .evaluate {
  235 + color: $u-warning-dark;
  236 + border-color: $u-warning-dark;
  237 + }
  238 + }
  239 + }
  240 +
  241 + .centre {
  242 + text-align: center;
  243 + margin: 200rpx auto;
  244 + font-size: 32rpx;
  245 +
  246 + image {
  247 + width: 164rpx;
  248 + height: 164rpx;
  249 + border-radius: 50%;
  250 + margin-bottom: 20rpx;
  251 + }
  252 +
  253 + .tips {
  254 + font-size: 24rpx;
  255 + color: #999999;
  256 + margin-top: 20rpx;
  257 + }
  258 +
  259 + .btn {
  260 + margin: 80rpx auto;
  261 + width: 200rpx;
  262 + border-radius: 32rpx;
  263 + line-height: 64rpx;
  264 + color: #ffffff;
  265 + font-size: 26rpx;
  266 + background: linear-gradient(270deg, rgba(249, 116, 90, 1) 0%, rgba(255, 158, 1, 1) 100%);
  267 + }
  268 + }
  269 +}
  270 +</style>
garbage-removal/src/pages/order/index.vue
1 <template> 1 <template>
2 - <z-paging-swiper>  
3 - <template v-slot:top>  
4 - <u-tabs lineWidth="40" lineColor="#ffffff" lineHeight="6"  
5 - :activeStyle="{ 'color': '#ffffff', 'font-weight': 'bolder' }" :inactiveStyle="{ color: '#ffffff' }"  
6 - ref="uTabsElement" :list="list" :current="current" @change="tabsChange" :scrollable="false"></u-tabs>  
7 - </template>  
8 - <swiper class="swiper" :current="swiperCurrent" @translation="translation" @animationfinish="animationfinish">  
9 - <swiper-item class="swiper-item" v-for="(item, index) in list" :key="index">  
10 - <swiper-list-item :tabIndex="index" :currentIndex="swiperCurrent"></swiper-list-item>  
11 - </swiper-item>  
12 - </swiper>  
13 - </z-paging-swiper> 2 + <view class="container" style="width: 100%;height: 100%;">
  3 + <other-home v-if="userType != '处理场所负责人'"></other-home>
  4 + <handler-home v-else></handler-home>
  5 + </view>
14 </template> 6 </template>
15 <script setup> 7 <script setup>
16 -import { ref } from 'vue';  
17 -import swiperListItem from './swiper-list-item/index.vue';  
18 -const list = ref([{ name: '待清运' }, { name: '清运中' }, { name: '全部' }, { name: '已完成' }])  
19 -const current = ref(0);  
20 -const swiperCurrent = ref(0)  
21 -const uTabsElement = ref()  
22 -const tabsChange = (el) => {  
23 - swiperCurrent.value = Number(el.index)  
24 -}  
25 -const animationfinish = (e) => {  
26 - current.value = e.detail.current  
27 - swiperCurrent.value = e.detail.current  
28 -}  
29 -const translation = (e) => {  
30 - uTabsElement.value.setDx(e.detail.dx)  
31 -} 8 +import { useMainStore } from "@/stores/index.js";
  9 +import { computed } from 'vue';
  10 +import handlerHome from "./handler-home/index.vue";
  11 +import otherHome from "./other-home/index.vue";
  12 +const mainStore = useMainStore()
  13 +const userType = computed(() => mainStore.userType)
  14 +console.log(userType.value);
32 </script> 15 </script>
33 -<style lang="scss" scoped>  
34 -::v-deep .u-tabs__wrapper__scroll-view {  
35 - background-color: #53c21d;  
36 -}  
37 -  
38 -.swiper {  
39 - height: 100%;  
40 - background: linear-gradient(to bottom, $u-success-dark, $u-bg-color, $u-bg-color, $u-bg-color, $u-bg-color, $u-bg-color, $u-bg-color);  
41 -}  
42 -</style> 16 +<style lang="scss" scoped></style>
garbage-removal/src/pages/order/detail/index.vue renamed to garbage-removal/src/pages/order/other-home/detail/index.vue
@@ -292,7 +292,7 @@ const createQrCodeLocal = (orderId) =&gt; { @@ -292,7 +292,7 @@ const createQrCodeLocal = (orderId) =&gt; {
292 const protocol = window.location.protocol; 292 const protocol = window.location.protocol;
293 const localAddress = `${protocol}//${hostname}:${port}`; 293 const localAddress = `${protocol}//${hostname}:${port}`;
294 // const localAddress = `http://localhost:5173`; 294 // const localAddress = `http://localhost:5173`;
295 - qrCodeText.value = localAddress + "/pages/order/guest/index?orderId=" + orderId; 295 + qrCodeText.value = localAddress + "/pages/order/other-home/guest/index?orderId=" + orderId;
296 console.log(qrCodeRef.value); 296 console.log(qrCodeRef.value);
297 } 297 }
298 // 获取二维码 298 // 获取二维码
@@ -341,7 +341,7 @@ const handleClose = (e) =&gt; { @@ -341,7 +341,7 @@ const handleClose = (e) =&gt; {
341 cancelShow.value = false 341 cancelShow.value = false
342 } 342 }
343 const handleEvaluateDetail = (orderId, userType) => { 343 const handleEvaluateDetail = (orderId, userType) => {
344 - uni.$u.route(`pages/order/evaluate-info/index`, 344 + uni.$u.route(`pages/order/other-home/evaluate-info/index`,
345 { orderId: orderId, userType: userType }) 345 { orderId: orderId, userType: userType })
346 } 346 }
347 const selectClick = (index) => { 347 const selectClick = (index) => {
@@ -446,7 +446,7 @@ const handleSubmitSuccess = (orderId) =&gt; { @@ -446,7 +446,7 @@ const handleSubmitSuccess = (orderId) =&gt; {
446 446
447 } 447 }
448 const handleEvaluate = (orderId, userType) => { 448 const handleEvaluate = (orderId, userType) => {
449 - uni.$u.route(`pages/order/evaluate/index?orderId=${orderId}&userType=${userType}`) 449 + uni.$u.route(`pages/order/other-home/evaluate/index?orderId=${orderId}&userType=${userType}`)
450 } 450 }
451 451
452 // 接收派单 452 // 接收派单
@@ -526,7 +526,7 @@ const cleanStatus = (status) =&gt; { @@ -526,7 +526,7 @@ const cleanStatus = (status) =&gt; {
526 * @param {string} putType 526 * @param {string} putType
527 */ 527 */
528 const handleUploadImage = (orderId, putType) => { 528 const handleUploadImage = (orderId, putType) => {
529 - uni.$u.route(`pages/order/upload/index?orderId=${orderId}`) 529 + uni.$u.route(`pages/order/other-home/upload/index?orderId=${orderId}`)
530 } 530 }
531 531
532 532
garbage-removal/src/pages/order/evaluate-info/index.vue renamed to garbage-removal/src/pages/order/other-home/evaluate-info/index.vue
garbage-removal/src/pages/order/evaluate/index.vue renamed to garbage-removal/src/pages/order/other-home/evaluate/index.vue
garbage-removal/src/pages/order/guest/index.vue renamed to garbage-removal/src/pages/order/other-home/guest/index.vue
garbage-removal/src/pages/order/other-home/index.vue 0 → 100644
  1 +<template>
  2 + <z-paging-swiper>
  3 + <template v-slot:top>
  4 + <u-tabs lineWidth="40" lineColor="#ffffff" lineHeight="6"
  5 + :activeStyle="{ 'color': '#ffffff', 'font-weight': 'bolder' }" :inactiveStyle="{ color: '#ffffff' }"
  6 + ref="uTabsElement" :list="list" :current="current" @change="tabsChange" :scrollable="false"></u-tabs>
  7 + </template>
  8 + <swiper class="swiper" :current="swiperCurrent" @translation="translation" @animationfinish="animationfinish">
  9 + <swiper-item class="swiper-item" v-for="(item, index) in list" :key="index">
  10 + <swiper-list-item :tabIndex="index" :currentIndex="swiperCurrent"></swiper-list-item>
  11 + </swiper-item>
  12 + </swiper>
  13 + </z-paging-swiper>
  14 +</template>
  15 +<script setup>
  16 +import { ref } from 'vue';
  17 +import swiperListItem from './swiper-list-item/index.vue';
  18 +const list = ref([{ name: '待清运' }, { name: '清运中' }, { name: '全部' }, { name: '已完成' }])
  19 +const current = ref(0);
  20 +const swiperCurrent = ref(0)
  21 +const uTabsElement = ref()
  22 +const tabsChange = (el) => {
  23 + swiperCurrent.value = Number(el.index)
  24 +}
  25 +const animationfinish = (e) => {
  26 + current.value = e.detail.current
  27 + swiperCurrent.value = e.detail.current
  28 +}
  29 +const translation = (e) => {
  30 + uTabsElement.value.setDx(e.detail.dx)
  31 +}
  32 +</script>
  33 +<style lang="scss" scoped>
  34 +::v-deep .u-tabs__wrapper__scroll-view {
  35 + background-color: #53c21d;
  36 +}
  37 +
  38 +.swiper {
  39 + height: 100%;
  40 + background: linear-gradient(to bottom, $u-success-dark, $u-bg-color, $u-bg-color, $u-bg-color, $u-bg-color, $u-bg-color, $u-bg-color);
  41 +}
  42 +</style>
garbage-removal/src/pages/order/success/index.vue renamed to garbage-removal/src/pages/order/other-home/success/index.vue
garbage-removal/src/pages/order/swiper-list-item/index.vue renamed to garbage-removal/src/pages/order/other-home/swiper-list-item/index.vue
@@ -5,7 +5,7 @@ @@ -5,7 +5,7 @@
5 <view class="page-box"> 5 <view class="page-box">
6 <view class="order" v-for="(item, index) in dataList" :key="index"> 6 <view class="order" v-for="(item, index) in dataList" :key="index">
7 <view class="top"> 7 <view class="top">
8 - <view class="left"> 8 + <view class="left" @click="goDetail(item)">
9 <u-icon name="home" :size="30" color="rgb(94,94,94)"></u-icon> 9 <u-icon name="home" :size="30" color="rgb(94,94,94)"></u-icon>
10 <view class="store">{{ item.garOrderCompanyName }}</view> 10 <view class="store">{{ item.garOrderCompanyName }}</view>
11 <u-icon name="arrow-right" color="rgb(203,203,203)" :size="26"></u-icon> 11 <u-icon name="arrow-right" color="rgb(203,203,203)" :size="26"></u-icon>
@@ -49,7 +49,8 @@ @@ -49,7 +49,8 @@
49 <view class="more"> 49 <view class="more">
50 <!-- <u-icon name="more-dot-fill" color="rgb(203,203,203)"></u-icon> --> 50 <!-- <u-icon name="more-dot-fill" color="rgb(203,203,203)"></u-icon> -->
51 </view> 51 </view>
52 - <view hover-class="btn-hover" class="logistics btn" @click="handleUserEvaluate(item.garOrderId, userType)">去评价 52 + <view hover-class="btn-hover" class="logistics btn" @click="handleUserEvaluate(item.garOrderId, userType)">
  53 + 去评价
53 </view> 54 </view>
54 </view> 55 </view>
55 <!-- 公司对用户评价 --> 56 <!-- 公司对用户评价 -->
@@ -58,7 +59,8 @@ @@ -58,7 +59,8 @@
58 <view class="more"> 59 <view class="more">
59 <!-- <u-icon name="more-dot-fill" color="rgb(203,203,203)"></u-icon> --> 60 <!-- <u-icon name="more-dot-fill" color="rgb(203,203,203)"></u-icon> -->
60 </view> 61 </view>
61 - <view hover-class="btn-hover" class="logistics btn" @click="handleUserEvaluate(item.garOrderId, userType)">去评价 62 + <view hover-class="btn-hover" class="logistics btn" @click="handleUserEvaluate(item.garOrderId, userType)">
  63 + 去评价
62 </view> 64 </view>
63 </view> 65 </view>
64 </view> 66 </view>
@@ -124,6 +126,16 @@ const handleClose = (e) =&gt; { @@ -124,6 +126,16 @@ const handleClose = (e) =&gt; {
124 cancelShow.value = false 126 cancelShow.value = false
125 } 127 }
126 128
  129 +/**
  130 + * 跳转公司详情
  131 + * @param {*} val
  132 + */
  133 +const goDetail = (val) => {
  134 + uni.$u.route({
  135 + url: `pages/home/clean/company-detail/index?companyId=${val.garOrderCompanyId}`,
  136 + })
  137 +}
  138 +
127 const selectClick = (index) => { 139 const selectClick = (index) => {
128 currentCancelName.value = index.name; 140 currentCancelName.value = index.name;
129 } 141 }
@@ -154,7 +166,7 @@ const submitFunction = (otherReason) =&gt; { @@ -154,7 +166,7 @@ const submitFunction = (otherReason) =&gt; {
154 } 166 }
155 const handleClick = (orderId) => { 167 const handleClick = (orderId) => {
156 uni.$u.route({ 168 uni.$u.route({
157 - url: `pages/order/detail/index`, 169 + url: `pages/order/other-home/detail/index`,
158 params: { 170 params: {
159 orderId: orderId 171 orderId: orderId
160 } 172 }
@@ -166,7 +178,7 @@ const handleClick = (orderId) =&gt; { @@ -166,7 +178,7 @@ const handleClick = (orderId) =&gt; {
166 * @param {*} orderId 178 * @param {*} orderId
167 */ 179 */
168 const handleUserEvaluate = (orderId, userType) => { 180 const handleUserEvaluate = (orderId, userType) => {
169 - uni.$u.route(`pages/order/evaluate/index?orderId=${orderId}&userType=${userType}`) 181 + uni.$u.route(`pages/order/other-home/evaluate/index?orderId=${orderId}&userType=${userType}`)
170 } 182 }
171 // list集合 183 // list集合
172 const queryList = (pageNo, pageSize) => { 184 const queryList = (pageNo, pageSize) => {
@@ -247,14 +259,15 @@ watch(() =&gt; props.currentIndex, (val1, val2) =&gt; { @@ -247,14 +259,15 @@ watch(() =&gt; props.currentIndex, (val1, val2) =&gt; {
247 259
248 .item { 260 .item {
249 display: flex; 261 display: flex;
  262 + align-items: center;
250 margin: 20rpx 0 0; 263 margin: 20rpx 0 0;
251 264
252 .left { 265 .left {
253 margin-right: 20rpx; 266 margin-right: 20rpx;
254 267
255 image { 268 image {
256 - width: 200rpx;  
257 - height: 200rpx; 269 + width: 160rpx;
  270 + height: 160rpx;
258 border-radius: 10rpx; 271 border-radius: 10rpx;
259 } 272 }
260 } 273 }
garbage-removal/src/pages/order/upload/index.vue renamed to garbage-removal/src/pages/order/other-home/upload/index.vue
@@ -85,7 +85,7 @@ const handleSubmit = (id, type) =&gt; { @@ -85,7 +85,7 @@ const handleSubmit = (id, type) =&gt; {
85 setTimeout(() => { 85 setTimeout(() => {
86 uni.$u.route({ 86 uni.$u.route({
87 type: 'navigateBack', 87 type: 'navigateBack',
88 - url: `pages/order/detail/index`, 88 + url: `pages/order/other-home/detail/index`,
89 }) 89 })
90 }, 300) 90 }, 300)
91 } 91 }
garbage-removal/src/pages/wode/choose/index.vue
@@ -43,47 +43,50 @@ @@ -43,47 +43,50 @@
43 43
44 <script setup> 44 <script setup>
45 import { updateUserInfo } from "@/apis/user.js"; 45 import { updateUserInfo } from "@/apis/user.js";
  46 +import driverImage from "@/static/image/driver.png";
  47 +import handleImage from "@/static/image/handler.png";
  48 +import managerImage from "@/static/image/manager.png";
  49 +import userImage from "@/static/image/user.png";
46 import { useMainStore } from '@/stores/index.js'; 50 import { useMainStore } from '@/stores/index.js';
47 import { setRequestToken } from '@/utils/request/request.js'; 51 import { setRequestToken } from '@/utils/request/request.js';
48 import { onLoad } from "@dcloudio/uni-app"; 52 import { onLoad } from "@dcloudio/uni-app";
49 import { ref } from 'vue'; 53 import { ref } from 'vue';
50 const userType = ref('') 54 const userType = ref('')
51 -const imageBase = "data:image/jpeg;base64,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";  
52 const store = useMainStore(); 55 const store = useMainStore();
53 const typeList = ref([{ 56 const typeList = ref([{
54 - label: "居民用户", 57 + label: "用户",
55 info: '下单清运', 58 info: '下单清运',
56 - image: imageBase, 59 + image: userImage,
57 order: 999, 60 order: 999,
58 classStyle: 'choose-type-item-top-back-sky', 61 classStyle: 'choose-type-item-top-back-sky',
59 isNow: false, 62 isNow: false,
60 isExit: true, 63 isExit: true,
61 }, { 64 }, {
62 - label: "处理场所",  
63 - info: '负责现场指导',  
64 - company: '长沙xxxx',  
65 - image: imageBase, 65 + label: "运输企业负责人",
  66 + info: '负责订单处理',
  67 + company: '',
  68 + image: managerImage,
66 isExit: false, 69 isExit: false,
67 - classStyle: 'choose-type-item-top-back-pink',  
68 - order: 3, 70 + classStyle: 'choose-type-item-top-back-sun',
  71 + order: 1,
69 isNow: false, 72 isNow: false,
70 }, { 73 }, {
71 - label: "运输驾驶员", 74 + label: "清运车辆驾驶员",
72 info: '负责垃圾清运', 75 info: '负责垃圾清运',
73 - company: '长沙xxxx',  
74 - image: imageBase, 76 + company: '',
  77 + image: driverImage,
75 isExit: false, 78 isExit: false,
76 classStyle: 'choose-type-item-top-back-blue', 79 classStyle: 'choose-type-item-top-back-blue',
77 order: 2, 80 order: 2,
78 isNow: false, 81 isNow: false,
79 }, { 82 }, {
80 - label: "企业负责人",  
81 - info: '负责订单处理',  
82 - company: '长沙xxxx',  
83 - image: imageBase, 83 + label: "处理场所负责人",
  84 + info: '负责现场指导',
  85 + company: '',
  86 + image: handleImage,
84 isExit: false, 87 isExit: false,
85 - classStyle: 'choose-type-item-top-back-sun',  
86 - order: 1, 88 + classStyle: 'choose-type-item-top-back-pink',
  89 + order: 3,
87 isNow: false, 90 isNow: false,
88 }]) 91 }])
89 const unitInfo = ref([]) 92 const unitInfo = ref([])
@@ -130,6 +133,7 @@ onLoad((options) =&gt; { @@ -130,6 +133,7 @@ onLoad((options) =&gt; {
130 } 133 }
131 let order = 999; 134 let order = 999;
132 let index = 0; 135 let index = 0;
  136 + let company = "";
133 // typeList优先级最高的设置isNow 为 true 137 // typeList优先级最高的设置isNow 为 true
134 if (loginInfo.length > 1) { 138 if (loginInfo.length > 1) {
135 typeList.value.forEach((item, i) => { 139 typeList.value.forEach((item, i) => {
@@ -138,13 +142,17 @@ onLoad((options) =&gt; { @@ -138,13 +142,17 @@ onLoad((options) =&gt; {
138 if (item.order < order) { 142 if (item.order < order) {
139 order = item.order; 143 order = item.order;
140 index = i; 144 index = i;
  145 + company = unitInfo.value[item.label].transportCompanyName;
141 } 146 }
142 } 147 }
143 }) 148 })
144 typeList.value[index].isNow = true 149 typeList.value[index].isNow = true
  150 + typeList.value[index].company = company
  151 + userType.value = typeList.value[index].label
  152 + } else {
  153 + typeList.value[index].isNow = true
145 userType.value = typeList.value[index].label 154 userType.value = typeList.value[index].label
146 } 155 }
147 - console.log(typeList.value, "typeList.value");  
148 }) 156 })
149 </script> 157 </script>
150 158
@@ -197,20 +205,21 @@ onLoad((options) =&gt; { @@ -197,20 +205,21 @@ onLoad((options) =&gt; {
197 box-sizing: border-box; 205 box-sizing: border-box;
198 padding: 30rpx; 206 padding: 30rpx;
199 border-radius: 15rpx 15rpx 5rpx 5rpx; 207 border-radius: 15rpx 15rpx 5rpx 5rpx;
200 - box-shadow: 0px 2px 10px 0px rgba(0, 0, 0, 0.1); 208 + box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);
201 209
202 .choose-type-item-image { 210 .choose-type-item-image {
203 - width: 140rpx;  
204 - height: 170rpx; 211 + width: 160rpx;
  212 + height: 180rpx;
205 border-radius: 50%; 213 border-radius: 50%;
206 display: flex; 214 display: flex;
207 align-items: center; 215 align-items: center;
208 justify-content: flex-start; 216 justify-content: flex-start;
209 - margin-right: 20rpx; 217 + margin-right: 50rpx;
210 218
211 image { 219 image {
212 width: 100%; 220 width: 100%;
213 height: 100%; 221 height: 100%;
  222 + background-size: 100% 100%;
214 } 223 }
215 } 224 }
216 225
@@ -274,28 +283,28 @@ onLoad((options) =&gt; { @@ -274,28 +283,28 @@ onLoad((options) =&gt; {
274 } 283 }
275 284
276 .itemActive { 285 .itemActive {
277 - animation: overScroll 0.5s forwards ease-in-out; 286 + animation: overScroll 0.8s forwards ease-in-out;
278 } 287 }
279 288
280 @keyframes overScroll { 289 @keyframes overScroll {
281 0% { 290 0% {
282 - transform: translateY(8rpx); 291 + transform: translateY(6rpx);
283 } 292 }
284 293
285 20% { 294 20% {
286 - transform: translateY(-4rpx); 295 + transform: translateY(-2rpx);
287 } 296 }
288 297
289 40% { 298 40% {
290 - transform: translateY(8rpx); 299 + transform: translateY(6rpx);
291 } 300 }
292 301
293 60% { 302 60% {
294 - transform: translateY(-4rpx); 303 + transform: translateY(-2rpx);
295 } 304 }
296 305
297 80% { 306 80% {
298 - transform: translateY(8rpx); 307 + transform: translateY(6rpx);
299 } 308 }
300 309
301 100% { 310 100% {
garbage-removal/src/static/image/driver.png 0 → 100644

544 KB

garbage-removal/src/static/image/handler.png 0 → 100644

44.2 KB

garbage-removal/src/static/image/manager.png 0 → 100644

14.6 KB

garbage-removal/src/static/image/user.png 0 → 100644

15.8 KB

garbage-removal/src/utils/request/request.js
@@ -72,7 +72,7 @@ instance.interceptors.response.use((response) =&gt; { @@ -72,7 +72,7 @@ instance.interceptors.response.use((response) =&gt; {
72 reSetLoginStatus(); 72 reSetLoginStatus();
73 } else { 73 } else {
74 uni.showToast({ 74 uni.showToast({
75 - title: response.data.message, 75 + title: response.data.msg,
76 icon: "none", 76 icon: "none",
77 }); 77 });
78 } 78 }
@@ -148,7 +148,7 @@ const handleGet = (config) =&gt; { @@ -148,7 +148,7 @@ const handleGet = (config) =&gt; {
148 } 148 }
149 config.url += strUrl; 149 config.url += strUrl;
150 config.params = ""; 150 config.params = "";
151 - if (config.url.startsWith("/order/webDetail/")) { 151 + if (config.url.startsWith("/order/other-home/webDetail/")) {
152 config.headers["Authorization"] = ""; 152 config.headers["Authorization"] = "";
153 } 153 }
154 } 154 }