Commit 70490f929f20967ec8065c3f23daef2834199270

Authored by 2c2c2c
1 parent 34f76d71

趟次功能,优化扫码

garbage-removal/.env.production
1   -VITE_BASE_URL=http://61.169.120.202:18888/workflow
  1 +VITE_BASE_URL=/workflow
2 2 # VITE_BASE_URL=http://175.6.47.84:10001/workflow
3 3 # VITE_BASE_FILE_UPLOAD_PREFIX=/common/upload
4 4 # VITE_STOMP_URL=http://localhost:8860/ws
... ...
garbage-removal/dist1.zip 0 → 100644
No preview for this file type
garbage-removal/package-lock.json
... ... @@ -9,7 +9,7 @@
9 9 "version": "0.0.0",
10 10 "dependencies": {
11 11 "@dcloudio/uni-app": "3.0.0-3090620231104002",
12   - "@dcloudio/uni-app-plus": "3.0.0-3090620231104002",
  12 + "@dcloudio/uni-app-plus": "^3.0.0-3090620231104002",
13 13 "@dcloudio/uni-components": "3.0.0-3090620231104002",
14 14 "@dcloudio/uni-h5": "3.0.0-3090620231104002",
15 15 "@dcloudio/uni-mp-alipay": "3.0.0-3090620231104002",
... ... @@ -1887,7 +1887,6 @@
1887 1887 "version": "3.0.0-3090620231104002",
1888 1888 "resolved": "https://registry.npmmirror.com/@dcloudio/uni-app-plus/-/uni-app-plus-3.0.0-3090620231104002.tgz",
1889 1889 "integrity": "sha512-L4+OgMQYKP6R7TXFBl0OiYKa0Ys/X9TbDHERFOe0IFYeuDCLbXpWU3k8zRCTOAmtRVNAulBIaet++YpxkpR/pw==",
1890   - "license": "Apache-2.0",
1891 1890 "dependencies": {
1892 1891 "@dcloudio/uni-app-uts": "3.0.0-3090620231104002",
1893 1892 "@dcloudio/uni-app-vite": "3.0.0-3090620231104002",
... ...
garbage-removal/package.json
... ... @@ -41,7 +41,7 @@
41 41 },
42 42 "dependencies": {
43 43 "@dcloudio/uni-app": "3.0.0-3090620231104002",
44   - "@dcloudio/uni-app-plus": "3.0.0-3090620231104002",
  44 + "@dcloudio/uni-app-plus": "^3.0.0-3090620231104002",
45 45 "@dcloudio/uni-components": "3.0.0-3090620231104002",
46 46 "@dcloudio/uni-h5": "3.0.0-3090620231104002",
47 47 "@dcloudio/uni-mp-alipay": "3.0.0-3090620231104002",
... ...
garbage-removal/src/components/QrScanner/QrScanner.vue
... ... @@ -96,12 +96,16 @@ defineExpose({ qrcodeData })
96 96 border-radius: 50%;
97 97 background-color: #fff;
98 98 color: #000;
99   - text-align: left;
  99 + text-align: center;
100 100 line-height: 30px;
101   - font-size: 20px;
  101 + font-size: 25px;
102 102 cursor: pointer;
103 103 z-index: 1000000;
104 104 }
  105 + .close-view span{
  106 + position: absolute;
  107 + left: 7px;
  108 + }
105 109 }
106 110  
107 111 .qr-scanner {
... ...
garbage-removal/src/components/clash-disposal-dispatch/index.vue
... ... @@ -43,14 +43,16 @@ function getTitle(checked) {
43 43 function changeVerify(current, chooseList) {
44 44 // 注意:返回非空字符串会阻止原有行为,并提示返回的字符串
45 45 // 如果函数体不做return返回值,即验证通过,控件正常处理业务
46   - // 限制条件
47   - if (chooseList) {
  46 + // 限制条件 只能选择一个处置场所
  47 + if (chooseList && chooseList.length<2) {
48 48 for (let index = 0; index < chooseList.length; index++) {
49 49 const element = chooseList[index];
50 50 if (current.id.indexOf(element.id) === -1 && element.label.indexOf(current.label) != -1) {
51 51 return "该处置场所负责人已经被选中了"
52 52 }
53 53 }
  54 + }else{
  55 + return "只能选择一个处置场所"
54 56 }
55 57 }
56 58 function open(dataList) {
... ...
garbage-removal/src/pages/home-info/clean/index.vue
... ... @@ -115,7 +115,7 @@
115 115 </view>
116 116 <view class="company-clean-container-site-image-info">
117 117 <view class="company-clean-container-site-image-info-remark">
118   - <text style="color: red;">*</text>请上传垃圾量照片(至少1张,最多5张),照片须看清全貌。
  118 + <text style="color: red;" @click="openPhone">*测试</text>请上传垃圾量照片(至少1张,最多5张),照片须看清全貌。
119 119 </view>
120 120 <view class="company-clean-container-site-image-info-img">
121 121 <u-upload width="200" height="150" :fileList="fileList" @afterRead="afterRead" :deletable="deletable"
... ... @@ -237,6 +237,17 @@ const handleTimeChoose = () =&gt; {
237 237 chooseTime.value.open();
238 238 }
239 239  
  240 +const openPhone = () => {
  241 + alert("网页调试---->>> 拍照点击事件 调用安卓层功能 ");
  242 + window.JsInterface.takePhone();
  243 +}
  244 +
  245 +const takePhoneCallBack = (path) => {
  246 + //如果用户不授予权限 或者没有权限 获取拍照之后没确定 不会过这里
  247 + //最好也是判断 path 非空的时候 去处理逻辑
  248 + alert("网页调试---->>> 拍照后回调 路径=" + path);
  249 + }
  250 +
240 251 const changeTime = (e) => {
241 252 dayTime.value = e.value
242 253  
... ...
garbage-removal/src/pages/login/code.vue
... ... @@ -76,6 +76,7 @@ const checkVerifyNum = (code) =&gt; {
76 76 verifyFlag.value = false;
77 77 store.tempToken = res.data.data.token
78 78 store.userName = res.data.data.name;
  79 + store.userPhone = res.data.data.loginPhone;
79 80 if(res.data.data.testUser){
80 81 uni.navigateTo({
81 82 url: `/pages/wode-info/wode-info-choose/index?ruleVos= ${encodeURIComponent(JSON.stringify(res.data.data.ruleVos))}&userName=${encodeURIComponent(res.data.data.name)}`
... ...
garbage-removal/src/pages/order-info/order-disposal/scan-detail/index.vue
1 1 <template>
2   - <view class="scan-detail-container">
3   - <view class="scan-detail-box">
4   - <view class="scan-time">
5   - <view class="scan-label">
6   - 分发时间:
7   - </view>
8   - <view class="scan-time">
9   - {{ details.garCreateTime }}
10   - </view>
11   -
12   - </view>
13   - <view class="scan-time">
14   - <view class="scan-label">
15   - 司机姓名:
16   - </view>
17   - <view class="scan-time">
18   - {{ details.garOrderHandlerName }}
19   - </view>
20   - </view>
21   - <view class="scan-time">
22   - <view class="scan-label">
23   - 司机电话:
24   - </view>
25   - <view class="scan-time" style="color: #000000">
26   - {{ details.garOrderHandlerTel }}
27   - </view>
28   - </view>
29   - <view class="scan-time">
30   - <view class="scan-label">
31   - 所属公司:
32   - </view>
33   - <view class="scan-time">
34   - {{ details.garOrderCompanyName }}
35   - </view>
36   - </view>
37   - </view>
38   - <view class="scan-submit-info">
39   - <view class="scan-submit-title-box">
40   - <up-badge :isDot="true" type="success"></up-badge><text>提交信息</text>
41   - </view>
42   - <view class="scan-car-num">
43   - <view class="scan-car-num-label">
44   - 车牌号
45   - </view>
46   - <view class="scan-car-num-content">
47   - {{ details.garHandlerCarCode }}
48   - </view>
49   - </view>
50   - <view class="scan-car-num">
51   - <view class="scan-car-num-label">
52   - 车辆载重
53   - </view>
54   - <view class="scan-car-num-content">
55   - <up-input :disabled="!isDeletable" placeholder="请输入数字,单位吨" border="surround"
56   - v-model="details.garCarryingWeight" @change="handlerInputChange"></up-input>
57   - </view>
58   - </view>
59   - <view class="scan-car-num">
60   - <view class="scan-car-num-label">
61   - 接收量
62   - </view>
63   - <view class="scan-car-num-content">
64   - <up-input :disabled="!isDeletable" placeholder="请输入数字" border="surround"
65   - v-model="details.garReceptionQuantity" @change="handlerInputChange"></up-input>
66   - </view>
67   - </view>
68   - <view class="scan-upload-fill-image-box">
69   - <view class="scan-upload-fill-image-label">
70   - <view>
71   - 全景照片
72   - </view>
73   - <view v-if="isDeletable">
74   - {{ fileList.length }}/{{ maxCount }}
75   - </view>
76   - </view>
77   - <view class="scan-upload-fill-image-btn" v-if="maxCount">
78   - <u-upload width="200" height="150" :deletable="isDeletable" :fileList="fileList" @afterRead="afterRead"
79   - @delete="deletePic" name="3" multiple :maxCount="maxCount" :previewFullImage="true"></u-upload>
80   - </view>
81   - </view>
82   - </view>
83   - <view class="scan-submit-button-box" v-if="isNew">
84   - <view class="scan-submit-button-btn">
85   - <u-button type="primary" @tap="handlerSubmit" text="确认"></u-button>
86   - </view>
87   - </view>
88   - </view>
  2 + <view class="scan-detail-container">
  3 + <view class="scan-detail-box">
  4 + <view class="scan-time">
  5 + <view class="scan-label">
  6 + 分发时间:
  7 + </view>
  8 + <view class="scan-time">
  9 + {{ details.garCreateTime }}
  10 + </view>
  11 +
  12 + </view>
  13 + <view class="scan-time">
  14 + <view class="scan-label">
  15 + 司机姓名:
  16 + </view>
  17 + <view class="scan-time">
  18 + {{ details.garOrderHandlerName }}
  19 + </view>
  20 + </view>
  21 + <view class="scan-time">
  22 + <view class="scan-label">
  23 + 司机电话:
  24 + </view>
  25 + <view class="scan-time" style="color: #000000">
  26 + {{ details.garOrderHandlerTel }}
  27 + </view>
  28 + </view>
  29 + <view class="scan-time">
  30 + <view class="scan-label">
  31 + 所属公司:
  32 + </view>
  33 + <view class="scan-time">
  34 + {{ details.garOrderCompanyName }}
  35 + </view>
  36 + </view>
  37 + </view>
  38 + <view class="scan-submit-info">
  39 + <view class="scan-submit-title-box">
  40 + <up-badge :isDot="true" type="success"></up-badge><text>提交信息</text>
  41 + </view>
  42 + <view class="scan-car-num">
  43 + <view class="scan-car-num-label">
  44 + 车牌号
  45 + </view>
  46 + <view class="scan-car-num-content">
  47 + {{ details.garHandlerCarCode }}
  48 + </view>
  49 + </view>
  50 + <view class="scan-car-num">
  51 + <view class="scan-car-num-label">
  52 + 车辆载重
  53 + </view>
  54 + <view class="scan-car-num-content">
  55 + <up-input :disabled="!isDeletable" placeholder="请输入数字,单位吨" border="surround"
  56 + v-model="details.garCarryingWeight" @change="handlerInputChange"></up-input>
  57 + </view>
  58 + </view>
  59 + <view class="scan-car-num">
  60 + <view class="scan-car-num-label">
  61 + 接收量
  62 + </view>
  63 + <view class="scan-car-num-content">
  64 + <up-input :disabled="!isDeletable" placeholder="请输入数字" border="surround"
  65 + v-model="details.garReceptionQuantity" @change="handlerInputChange"></up-input>
  66 + </view>
  67 + </view>
  68 + <view class="scan-upload-fill-image-box">
  69 + <view class="scan-upload-fill-image-label">
  70 + <view>
  71 + 全景照片
  72 + </view>
  73 + <view v-if="isDeletable">
  74 + {{ fileList.length }}/{{ maxCount }}
  75 + </view>
  76 + </view>
  77 + <view class="scan-upload-fill-image-btn" v-if="maxCount">
  78 + <u-upload width="200" height="150" :deletable="isDeletable" :fileList="fileList"
  79 + @afterRead="afterRead" @delete="deletePic" name="3" multiple :maxCount="maxCount"
  80 + :previewFullImage="true"></u-upload>
  81 + </view>
  82 + </view>
  83 + </view>
  84 + <view class="scan-submit-button-box" v-if="isNew">
  85 + <view class="scan-submit-button-btn">
  86 + <u-button type="primary" @tap="handlerSubmit" text="确认"></u-button>
  87 + </view>
  88 + </view>
  89 + </view>
89 90 </template>
90 91  
91 92 <script setup>
92   -import { uploadFilePromise } from '@/apis/common.js';
93   -import { askTransport, scanDetail } from '@/apis/order.js';
94   -import { onLoad } from '@dcloudio/uni-app';
95   -import { computed, ref } from 'vue';
96   -const details = ref({});
97   -const fileList = ref([]);
98   -const isDeletable = ref(false);
99   -const maxCount = computed(() => isDeletable.value ? 3 : fileList.value.length);
100   -// 删除图片
101   -const deletePic = (event) => {
102   - fileList.value.splice(event.index, 1);
103   -};
  93 + import {
  94 + uploadFilePromise
  95 + } from '@/apis/common.js';
  96 + import {
  97 + askTransport,
  98 + scanDetail
  99 + } from '@/apis/order.js';
  100 + import {
  101 + onLoad
  102 + } from '@dcloudio/uni-app';
  103 + import {
  104 + computed,
  105 + ref
  106 + } from 'vue';
  107 + const details = ref({});
  108 + const fileList = ref([]);
  109 + const isDeletable = ref(false);
  110 + const maxCount = computed(() => isDeletable.value ? 3 : fileList.value.length);
  111 + // 删除图片
  112 + const deletePic = (event) => {
  113 + fileList.value.splice(event.index, 1);
  114 + };
104 115  
105   -const isNew = ref(false)
106   -// 新增图片
107   -const afterRead = async (event) => {
108   - // 当设置 mutiple 为 true 时, file 为数组格式,否则为对象格式
109   - let lists = [].concat(event.file);
110   - let fileListLen = fileList.value.length;
111   - lists.map((item) => {
112   - fileList.value.push({
113   - ...item,
114   - status: 'uploading',
115   - message: '上传中',
116   - });
117   - });
118   - for (let i = 0; i < lists.length; i++) {
119   - let requestPath = import.meta.env.VITE_BASE_URL + import.meta.env.VITE_BASE_FILE_UPLOAD_PREFIX;
120   - const result = await uploadFilePromise(requestPath, lists[i].url);
121   - let item = fileList.value[fileListLen];
122   - fileList.value.splice(fileListLen, 1, {
123   - ...item,
124   - status: 'success',
125   - message: '',
126   - url: result.data.fileName,
127   - });
128   - fileListLen++;
129   - }
130   -};
131   -const handlerInputChange = (val) => {
132   - console.log(val);
133   -}
134   -const handlerSubmit = async () => {
135   - // 校验参数
136   - let params = {
137   - ...details.value,
138   - fillImageList: fileList.value.map((item) => item.url),
139   - garOrderHandlerCompanyName: details.value.garOrderCompanyName,
140   - garOrderHandlerCompanyId: details.value.garOrderCompanyId
141   - }
142   - if (validateParams(params)) {
143   - await askTransport(params).then((res) => {
144   - console.log(res);
145   - if (res.data.code == 200) {
146   - uni.$u.toast("当前趟次记录完毕!")
147   - }
148   - }).catch((err) => {
149   - uni.$u.toast("当前趟次记录失败")
150   - })
151   - // 返回上级
152   - uni.navigateBack({
153   - delta: 1
154   - });
155   - }
156   -}
  116 + const isNew = ref(false)
  117 + // 新增图片
  118 + const afterRead = async (event) => {
  119 + // 当设置 mutiple 为 true 时, file 为数组格式,否则为对象格式
  120 + let lists = [].concat(event.file);
  121 + let fileListLen = fileList.value.length;
  122 + lists.map((item) => {
  123 + fileList.value.push({
  124 + ...item,
  125 + status: 'uploading',
  126 + message: '上传中',
  127 + });
  128 + });
  129 + for (let i = 0; i < lists.length; i++) {
  130 + let requestPath = import.meta.env.VITE_BASE_URL + import.meta.env.VITE_BASE_FILE_UPLOAD_PREFIX;
  131 + const result = await uploadFilePromise(requestPath, lists[i].url);
  132 + let item = fileList.value[fileListLen];
  133 + fileList.value.splice(fileListLen, 1, {
  134 + ...item,
  135 + status: 'success',
  136 + message: '',
  137 + url: result.data.fileName,
  138 + });
  139 + fileListLen++;
  140 + }
  141 + };
  142 + const handlerInputChange = (val) => {
  143 + console.log(val);
  144 + }
  145 + const handlerSubmit = async () => {
  146 + try {
  147 + // 获取定位信息
  148 + const location = await new Promise((resolve, reject) => {
  149 + uni.getLocation({
  150 + type: 'wgs84',
  151 + success: resolve,
  152 + fail: reject
  153 + });
  154 + });
  155 + // 校验参数
  156 + let params = {
  157 + ...details.value,
  158 + fillImageList: fileList.value.map((item) => item.url),
  159 + garOrderHandlerCompanyName: details.value.garOrderCompanyName,
  160 + garOrderHandlerCompanyId: details.value.garOrderCompanyId,
  161 + // 添加定位信息
  162 + latitude: location.latitude,
  163 + longitude: location.longitude
  164 + }
  165 + if (validateParams(params)) {
  166 + await askTransport(params).then((res) => {
  167 + console.log(res);
  168 + if (res.data.code == 200) {
  169 + uni.$u.toast("当前趟次记录完毕!")
  170 + }
  171 + }).catch((err) => {
  172 + uni.$u.toast("当前趟次记录失败")
  173 + })
  174 + // 返回上级
  175 + uni.navigateBack({
  176 + delta: 1
  177 + });
  178 + }
  179 + } catch (error) {
  180 + console.error('定位获取失败:', error);
  181 + uni.$u.toast("需要位置权限才能提交");
  182 + // 可选:引导用户打开设置
  183 + uni.openSetting({
  184 + success(res) {
  185 + console.log('授权设置:', res.authSetting);
  186 + }
  187 + });
  188 + }
  189 + }
157 190  
158   -const validateParams = (params) => {
159   - if (!params.garOrderHandlerName) {
160   - uni.$u.toast("请输入处理人姓名");
161   - return false;
162   - }
163   - if (!params.garOrderHandlerTel) {
164   - uni.$u.toast("请输入处理人电话");
165   - return false;
166   - }
167   - if (!params.garOrderCompanyName) {
168   - uni.$u.toast("请输入处理人单位");
169   - return false;
170   - }
171   - if (!params.garReceptionQuantity) {
172   - uni.$u.toast("请输入接收量");
173   - return false;
174   - }
175   - if (!validateImage(params.fillImageList)) {
176   - return false;
177   - }
178   - return true;
179   -}
  191 + const validateParams = (params) => {
  192 + if (!params.garOrderHandlerName) {
  193 + uni.$u.toast("请输入处理人姓名");
  194 + return false;
  195 + }
  196 + if (!params.garOrderHandlerTel) {
  197 + uni.$u.toast("请输入处理人电话");
  198 + return false;
  199 + }
  200 + if (!params.garOrderCompanyName) {
  201 + uni.$u.toast("请输入处理人单位");
  202 + return false;
  203 + }
  204 + if (!params.garReceptionQuantity) {
  205 + uni.$u.toast("请输入接收量");
  206 + return false;
  207 + }
  208 + if (!validateImage(params.fillImageList)) {
  209 + return false;
  210 + }
  211 + return true;
  212 + }
180 213  
181   -const validateImage = (fillImageList) => {
182   - if (fillImageList instanceof Array && fillImageList.length > 0) {
183   - for (let index = 0; index < fillImageList.length; index++) {
184   - const str = fillImageList[index];
185   - if (!str.startsWith("/profile/upload")) {
186   - uni.$u.toast("请等待图片上传~");
187   - return false;
188   - }
189   - }
190   - return true;
191   - }
192   - uni.$u.toast("请上传图片~");
193   - return false;
194   -}
  214 + const validateImage = (fillImageList) => {
  215 + if (fillImageList instanceof Array && fillImageList.length > 0) {
  216 + for (let index = 0; index < fillImageList.length; index++) {
  217 + const str = fillImageList[index];
  218 + if (!str.startsWith("/profile/upload")) {
  219 + uni.$u.toast("请等待图片上传~");
  220 + return false;
  221 + }
  222 + }
  223 + return true;
  224 + }
  225 + uni.$u.toast("请上传图片~");
  226 + return false;
  227 + }
195 228  
196   -onLoad((options) => {
197   - if (options.data) {
198   - details.value = JSON.parse(decodeURIComponent(options.data));
199   - isDeletable.value = true;
200   - isNew.value = true;
201   - }
202   - if (options.garAskId) {
203   - // TODO query
204   - scanDetail(options.garAskId).then((res) => {
205   - console.log(res);
206   - details.value = res.data.data;
207   - details.value.garOrderCompanyName = details.value.garOrderHandlerCompanyName;
208   - fileList.value = details.value.fillImageList.map((item) => {
209   - return { url: import.meta.env.VITE_BASE_URL + item }
210   - })
211   - })
212   - }
213   -})
  229 + onLoad((options) => {
  230 + if (options.data) {
  231 + details.value = JSON.parse(decodeURIComponent(options.data));
  232 + isDeletable.value = true;
  233 + isNew.value = true;
  234 + }
  235 + if (options.garAskId) {
  236 + // TODO query
  237 + scanDetail(options.garAskId).then((res) => {
  238 + console.log(res);
  239 + details.value = res.data.data;
  240 + details.value.garOrderCompanyName = details.value.garOrderHandlerCompanyName;
  241 + fileList.value = details.value.fillImageList.map((item) => {
  242 + return {
  243 + url: import.meta.env.VITE_BASE_URL + item
  244 + }
  245 + })
  246 + })
  247 + }
  248 + })
214 249 </script>
215 250  
216 251 <style lang="scss" scoped>
217   -$l-h-8: 80rpx;
  252 + $l-h-8: 80rpx;
218 253  
219   -.scan-detail-container {
220   - width: 100%;
221   - height: 100%;
222   - box-sizing: border-box;
223   - padding: 20rpx;
  254 + .scan-detail-container {
  255 + width: 100%;
  256 + height: 100%;
  257 + box-sizing: border-box;
  258 + padding: 20rpx;
224 259  
225   - .scan-detail-box {
226   - background-color: white;
227   - margin-bottom: 40rpx;
228   - color: $u-main-color;
  260 + .scan-detail-box {
  261 + background-color: white;
  262 + margin-bottom: 40rpx;
  263 + color: $u-main-color;
229 264  
230   - .scan-time {
231   - display: flex;
232   - width: 100%;
233   - // 底部阴影 向内发散
234   - border-bottom: 1rpx solid #f5f5f5;
235   - line-height: 100rpx;
236   - align-items: center;
  265 + .scan-time {
  266 + display: flex;
  267 + width: 100%;
  268 + // 底部阴影 向内发散
  269 + border-bottom: 1rpx solid #f5f5f5;
  270 + line-height: 100rpx;
  271 + align-items: center;
237 272  
238   - .scan-label {
239   - width: 30%;
240   - display: flex;
241   - align-items: center;
242   - justify-content: center;
243   - }
  273 + .scan-label {
  274 + width: 30%;
  275 + display: flex;
  276 + align-items: center;
  277 + justify-content: center;
  278 + }
244 279  
245   - .scan-time {
246   - width: 60%;
247   - }
  280 + .scan-time {
  281 + width: 60%;
  282 + }
248 283  
249   - .scan-icon {
250   - width: 10%;
251   - display: flex;
252   - }
253   - }
  284 + .scan-icon {
  285 + width: 10%;
  286 + display: flex;
  287 + }
  288 + }
254 289  
255   - }
  290 + }
256 291  
257   - .scan-submit-info {
258   - width: 100%;
259   - background-color: white;
260   - box-sizing: border-box;
261   - padding: 20rpx;
262   - color: $u-content-color;
  292 + .scan-submit-info {
  293 + width: 100%;
  294 + background-color: white;
  295 + box-sizing: border-box;
  296 + padding: 20rpx;
  297 + color: $u-content-color;
263 298  
264   - .scan-submit-title-box {
265   - display: flex;
266   - align-items: center;
  299 + .scan-submit-title-box {
  300 + display: flex;
  301 + align-items: center;
267 302  
268   - text {
269   - margin-left: 15rpx;
270   - }
271   - }
  303 + text {
  304 + margin-left: 15rpx;
  305 + }
  306 + }
272 307  
273   - .scan-car-num {
274   - display: flex;
275   - line-height: $l-h-8;
276   - align-items: center;
  308 + .scan-car-num {
  309 + display: flex;
  310 + line-height: $l-h-8;
  311 + align-items: center;
277 312  
278   - .scan-car-num-label {
279   - width: 20%;
280   - // 文字不换行
281   - white-space: nowrap;
282   - }
  313 + .scan-car-num-label {
  314 + width: 20%;
  315 + // 文字不换行
  316 + white-space: nowrap;
  317 + }
283 318  
284   - .scan-car-num-content {
285   - width: auto;
286   - display: flex;
287   - justify-content: center;
288   - align-items: center;
289   - }
290   - }
  319 + .scan-car-num-content {
  320 + width: auto;
  321 + display: flex;
  322 + justify-content: center;
  323 + align-items: center;
  324 + }
  325 + }
291 326  
292   - .scan-upload-fill-image-box {
293   - line-height: $l-h-8;
294   - width: 100%;
  327 + .scan-upload-fill-image-box {
  328 + line-height: $l-h-8;
  329 + width: 100%;
295 330  
296   - .scan-upload-fill-image-label {
297   - display: flex;
298   - justify-content: space-between;
299   - }
  331 + .scan-upload-fill-image-label {
  332 + display: flex;
  333 + justify-content: space-between;
  334 + }
300 335  
301   - .scan-upload-fill-image-btn {}
302   - }
303   - }
  336 + .scan-upload-fill-image-btn {}
  337 + }
  338 + }
304 339  
305   - .scan-submit-button-box {
306   - margin-top: 40rpx;
307   - background-color: white;
308   - padding: 20rpx;
309   - }
310   -}
311   -</style>
  340 + .scan-submit-button-box {
  341 + margin-top: 40rpx;
  342 + background-color: white;
  343 + padding: 20rpx;
  344 + }
  345 + }
  346 +</style>
312 347 \ No newline at end of file
... ...
garbage-removal/src/pages/order-info/order-driver/detail/index.vue
... ... @@ -282,7 +282,7 @@ const selectClick = (index) =&gt; {
282 282 const handleOrderDetail = (orderId) => {
283 283 queryOrderDetail(orderId).then(res => {
284 284 dataGram.value = res.data.data;
285   - console.log(res.data.data);
  285 + console.log(res.data.data);
286 286 currentImages.value = res.data.data.currentImages.map(item => {
287 287 return { url: import.meta.env.VITE_BASE_URL + item };
288 288 });
... ... @@ -384,7 +384,8 @@ const createQrCodeValid = (val) =&gt; {
384 384 * @param {string} putType
385 385 */
386 386 const handleUploadImage = (orderId, putType) => {
387   - uni.$u.route(`pages/order-info/order-driver/upload/index?orderId=${orderId}`)
  387 + const data = dataGram.value;
  388 + uni.$u.route(`pages/order-info/order-driver/upload/index?orderId=${orderId}&carPlate=${data.garHandlerCarCode}&driver=${store.userInfo.userName}`)
388 389 }
389 390  
390 391 /**
... ...
garbage-removal/src/pages/order-info/order-driver/upload/index.vue
... ... @@ -18,7 +18,7 @@
18 18 </view>
19 19 </view>
20 20 <view class="upload-image-box-submit-box">
21   - <view class="upload-image-box-submit-box-button" @click="handleSubmit(orderId, putType)">
  21 + <view class="upload-image-box-submit-box-button" @click="handleSubmit(orderId, putType,driver,carPlate)">
22 22 <view class="upload-image-box-submit-box-button-container">
23 23 <up-button color="#19be6b" type="primary" shape="square" text="确定"></up-button>
24 24 </view>
... ... @@ -32,8 +32,12 @@ import { uploadFilePromise } from &#39;@/apis/common.js&#39;;
32 32 import { uploadImageUrlByType } from '@/apis/order.js';
33 33 import { onLoad } from '@dcloudio/uni-app';
34 34 import { reactive, ref } from 'vue';
  35 +import { useMainStore } from '@/stores/index.js';
  36 +const store = useMainStore();
35 37 const putType = ref("装车图片")
36 38 const orderId = ref();
  39 +const carPlate = ref();
  40 +const driver = ref();
37 41 const fileList = ref([])
38 42 const chooseList = reactive([{ name: "装车图片" }, { name: "卸车图片" }])
39 43 // 删除图片
... ... @@ -67,33 +71,95 @@ const afterRead = async (event) =&gt; {
67 71 }
68 72 };
69 73 // 提交图片
70   -const handleSubmit = (id, type) => {
71   - if (!validateImage()) {
72   - uni.$u.toast("请等待图片上传~")
73   - return
74   - }
75   - let params = {
76   - garOrderId: id,
77   - type: type == "装车图片" ? 1 : 2,
78   - imageUrls: fileList.value.map(item => item.url)
79   - }
80   - if(params.imageUrls && params.imageUrls.length == 0){
81   - uni.$u.toast("请上传现场图片");
82   - return;
83   - }
84   -
85   - uploadImageUrlByType(params).then(res => {
86   - if (res.data.success) {
87   - uni.$u.toast("图片上传完毕!");
88   - setTimeout(() => {
89   - uni.$u.route({
90   - type: 'navigateBack',
91   - url: `pages/order-info/order-other/detail/index`,
92   - })
93   - }, 300)
  74 +const handleSubmit = async (id, type, driver, carPlate) => {
  75 + try {
  76 + // 获取定位信息
  77 + const location = await new Promise((resolve, reject) => {
  78 + uni.getLocation({
  79 + type: 'wgs84',
  80 + success: resolve,
  81 + fail: reject
  82 + });
  83 + });
  84 +
  85 + if (!validateImage()) {
  86 + uni.$u.toast("请等待图片上传~")
  87 + return
  88 + }
  89 +
  90 + const userPhone = store.userPhone;
  91 + let params = {
  92 + garOrderId: id,
  93 + driver: driver,
  94 + carPlate: carPlate,
  95 + userPhone: userPhone,
  96 + type: type == "装车图片" ? 1 : 2,
  97 + imageUrls: fileList.value.map(item => item.url),
  98 + // 添加定位信息
  99 + latitude: location.latitude,
  100 + longitude: location.longitude
94 101 }
95   - })
  102 +
  103 + if(params.imageUrls && params.imageUrls.length == 0){
  104 + uni.$u.toast("请上传现场图片");
  105 + return;
  106 + }
  107 +
  108 + uploadImageUrlByType(params).then(res => {
  109 + if (res.data.success) {
  110 + uni.$u.toast("图片上传完毕!");
  111 + setTimeout(() => {
  112 + uni.$u.route({
  113 + type: 'navigateBack',
  114 + url: `pages/order-info/order-other/detail/index`,
  115 + })
  116 + }, 300)
  117 + }
  118 + })
  119 +
  120 + } catch (error) {
  121 + console.error('定位获取失败:', error);
  122 + uni.$u.toast("需要位置权限才能提交");
  123 + // 可选:引导用户打开设置
  124 + uni.openSetting({
  125 + success(res) {
  126 + console.log('授权设置:', res.authSetting);
  127 + }
  128 + });
  129 + }
96 130 }
  131 +// 提交图片
  132 +// const handleSubmit = async (id, type,driver,carPlate) => {
  133 +// if (!validateImage()) {
  134 +// uni.$u.toast("请等待图片上传~")
  135 +// return
  136 +// }
  137 +// const userPhone = store.userPhone;
  138 +// let params = {
  139 +// garOrderId: id,
  140 +// driver:driver,
  141 +// carPlate:carPlate,
  142 +// userPhone:userPhone,
  143 +// type: type == "装车图片" ? 1 : 2,
  144 +// imageUrls: fileList.value.map(item => item.url)
  145 +// }
  146 +// if(params.imageUrls && params.imageUrls.length == 0){
  147 +// uni.$u.toast("请上传现场图片");
  148 +// return;
  149 +// }
  150 +
  151 +// uploadImageUrlByType(params).then(res => {
  152 +// if (res.data.success) {
  153 +// uni.$u.toast("图片上传完毕!");
  154 +// setTimeout(() => {
  155 +// uni.$u.route({
  156 +// type: 'navigateBack',
  157 +// url: `pages/order-info/order-other/detail/index`,
  158 +// })
  159 +// }, 300)
  160 +// }
  161 +// })
  162 +// }
97 163  
98 164 const validateImage = () => {
99 165 for (let index = 0; index < fileList.value.length; index++) {
... ... @@ -107,6 +173,8 @@ const validateImage = () =&gt; {
107 173  
108 174 onLoad((options) => {
109 175 orderId.value = options.orderId;
  176 + carPlate.value = options.carPlate;
  177 + driver.value = options.driver;
110 178 // putType.value = options.putType === "putOnImages" ? "装车图片" : "卸车图片";
111 179  
112 180 })
... ...
garbage-removal/src/pages/order-info/order-other/detail/index.vue
... ... @@ -210,7 +210,7 @@
210 210 v-if="dataGram.garOrderHandlerStatus === 0 && userType == '运输企业负责人' && dataGram.garCancelFlag === 0"
211 211 @click="handleOderCancelClick()" shape="square" color="#19a97c" text="取消订单"></u-button>
212 212 <u-button
213   - v-if="dataGram.garOrderScanHandlerFlag === 0 && userType == '用户' && dataGram.garOrderHandlerStatus != 3"
  213 + v-if="dataGram.garOrderScanHandlerFlag === 0 && userType == '用户' && dataGram.garOrderHandlerStatus != 3 && dataGram.garAskStatus != '1'"
214 214 @click="handlerUpdateOrderClick()" shape="square" color="#19a97c" text="修改车辆信息"></u-button>
215 215 <u-button v-if="dataGram.garOrderHandlerStatus === 1 && userType == '运输企业负责人'"
216 216 @click="handleOrderDispatchClick(orderId)" shape="square" color="#19a97c"
... ...
garbage-removal/src/pages/order/order-disposal/index.vue
... ... @@ -196,9 +196,7 @@
196 196 }
197 197 }
198 198 const qrReaderClose = () => {
199   - uni.$u.toast("qrReaderClose",data)
200   - alert("qrReaderClose")
201   - // showScan.value = false
  199 + showScan.value = false
202 200 }
203 201 onMounted(() => {
204 202 console.log("处理场所");
... ...
garbage-removal/src/pages/wode-info/wode-info-choose/index.vue
... ... @@ -159,7 +159,7 @@ onLoad((options) =&gt; {
159 159 const element = loginInfo[index];
160 160 element.userName = userName;
161 161 unitInfo.value[element.userType] = element
162   -
  162 + console.log(unitInfo.value);
163 163  
164 164  
165 165 }
... ...
garbage-removal/src/stores/main.js
... ... @@ -7,8 +7,9 @@ export const useMainStore = defineStore(
7 7 const tempToken = ref(null);
8 8 const userType = ref("")
9 9 const userInfo = ref("")
  10 + const userPhone = ref("");
10 11  
11   - return { token,tempToken,userType,userInfo };
  12 + return { token,tempToken,userType,userInfo,userPhone };
12 13 },
13 14 {
14 15 persist: {
... ...
garbage-removal/vite.config.js
... ... @@ -8,7 +8,7 @@ export default defineConfig({
8 8 plugins: [
9 9 uni(),
10 10 //本地环境开启https
11   - // basicSsl()
  11 + basicSsl()
12 12 ],
13 13 resolve: {
14 14 alias: {
... ... @@ -19,6 +19,6 @@ export default defineConfig({
19 19 server: {
20 20 port: 9000,
21 21 //本地环境开启https
22   - // https: true
  22 + https: true
23 23 }
24 24 })
... ...
garbage-removal/yarn.lock
... ... @@ -975,7 +975,7 @@
975 975 "resolved" "https://registry.npmmirror.com/@dcloudio/types/-/types-3.4.3.tgz"
976 976 "version" "3.4.3"
977 977  
978   -"@dcloudio/uni-app-plus@3.0.0-3090620231104002":
  978 +"@dcloudio/uni-app-plus@^3.0.0-3090620231104002":
979 979 "integrity" "sha512-L4+OgMQYKP6R7TXFBl0OiYKa0Ys/X9TbDHERFOe0IFYeuDCLbXpWU3k8zRCTOAmtRVNAulBIaet++YpxkpR/pw=="
980 980 "resolved" "https://registry.npmmirror.com/@dcloudio/uni-app-plus/-/uni-app-plus-3.0.0-3090620231104002.tgz"
981 981 "version" "3.0.0-3090620231104002"
... ...