Commit 279cf9b5bda1440b6afe3caabab981a2e16350e9

Authored by 2c2c2c
1 parent c3a3eedb

装修垃圾清运 取消普通用户,只让投放点管理员登录;新增接收量字段

garbage-removal/.env.dev
1   -VITE_BASE_URL=http://127.0.0.1:8080/workflow
  1 +VITE_BASE_URL=http://192.168.31.218:8080/workflow
2 2  
3   -VITE_STOMP_URL=http://127.0.0.1:8080/ws
  3 +VITE_STOMP_URL=http://192.168.31.218:8080/ws
... ...
garbage-removal/.env.local
1   -VITE_BASE_URL=http://127.0.0.1:8080/workflow
  1 +VITE_BASE_URL=http://192.169.1.125:8080/workflow
2 2 VITE_BASE_FILE_UPLOAD_PREFIX=/order/upload
3   -VITE_STOMP_URL=http://127.0.0.1:8080/ws
  3 +VITE_STOMP_URL=http://192.169.1.125:8080/ws
... ...
garbage-removal/.hbuilderx/launch.json
1   -{ // launch.json 配置了启动调试时相关设置,configurations下节点名称可为 app-plus/h5/mp-weixin/mp-baidu/mp-alipay/mp-qq/mp-toutiao/mp-360/
2   - // launchtype项可配置值为local或remote, local代表前端连本地云函数,remote代表前端连云端云函数
3   - "version": "0.0",
4   - "configurations": [{
5   - "default" :
6   - {
7   - "launchtype" : "local"
8   - },
9   - "mp-weixin" :
10   - {
11   - "launchtype" : "local"
12   - },
13   - "type" : "uniCloud"
14   - }
  1 +{
  2 + // launch.json 配置了启动调试时相关设置,configurations下节点名称可为 app-plus/h5/mp-weixin/mp-baidu/mp-alipay/mp-qq/mp-toutiao/mp-360/
  3 + // launchtype项可配置值为local或remote, local代表前端连本地云函数,remote代表前端连云端云函数
  4 + "version" : "0.0",
  5 + "configurations" : [
  6 + {
  7 + "default" : {
  8 + "launchtype" : "local"
  9 + },
  10 + "mp-weixin" : {
  11 + "launchtype" : "local"
  12 + },
  13 + "type" : "uniCloud"
  14 + },
  15 + {
  16 + "playground" : "standard",
  17 + "type" : "uni-app:app-android"
  18 + }
15 19 ]
16 20 }
... ...
garbage-removal/package-lock.json
... ... @@ -22,17 +22,20 @@
22 22 "@dcloudio/uni-mp-weixin": "3.0.0-3090620231104002",
23 23 "@dcloudio/uni-mp-xhs": "3.0.0-3090620231104002",
24 24 "@dcloudio/uni-quickapp-webview": "3.0.0-3090620231104002",
  25 + "@vitejs/plugin-basic-ssl": "^1.1.0",
25 26 "axios": "^0.27.2",
26 27 "clipboard": "^2.0.11",
27 28 "dayjs": "^1.11.10",
28 29 "js-md5": "^0.8.3",
29 30 "pinia": "2.0.33",
30 31 "pinia-plugin-persist-uni": "^1.2.0",
  32 + "qrcode-reader-vue3": "^3.1.2",
31 33 "sass": "1.58.3",
32 34 "sass-loader": "13.2.0",
33 35 "uqrcodejs": "^4.0.7",
34 36 "vue": "^3.2.45",
35   - "vue-i18n": "^9.1.9"
  37 + "vue-i18n": "^9.1.9",
  38 + "vue3-qr-reader": "^1.0.0"
36 39 },
37 40 "devDependencies": {
38 41 "@dcloudio/types": "^3.3.2",
... ... @@ -3986,6 +3989,17 @@
3986 3989 "dev": true,
3987 3990 "peer": true
3988 3991 },
  3992 + "node_modules/@vitejs/plugin-basic-ssl": {
  3993 + "version": "1.2.0",
  3994 + "resolved": "https://registry.npmmirror.com/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-1.2.0.tgz",
  3995 + "integrity": "sha512-mkQnxTkcldAzIsomk1UuLfAu9n+kpQ3JbHcpCp7d2Oo6ITtji8pHS3QToOWjhPFvNQSnhlkAjmGbhv2QvwO/7Q==",
  3996 + "engines": {
  3997 + "node": ">=14.21.3"
  3998 + },
  3999 + "peerDependencies": {
  4000 + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0"
  4001 + }
  4002 + },
3989 4003 "node_modules/@vitejs/plugin-legacy": {
3990 4004 "version": "4.1.1",
3991 4005 "resolved": "https://registry.npmmirror.com/@vitejs/plugin-legacy/-/plugin-legacy-4.1.1.tgz",
... ... @@ -4398,6 +4412,26 @@
4398 4412 "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==",
4399 4413 "peer": true
4400 4414 },
  4415 + "node_modules/@zxing/library": {
  4416 + "version": "0.18.6",
  4417 + "resolved": "https://registry.npmmirror.com/@zxing/library/-/library-0.18.6.tgz",
  4418 + "integrity": "sha512-bulZ9JHoLFd9W36pi+7e7DnEYNJhljYjZ1UTsKPOoLMU3qtC+REHITeCRNx40zTRJZx18W5TBRXt5pq2Uopjsw==",
  4419 + "dependencies": {
  4420 + "ts-custom-error": "^3.0.0"
  4421 + },
  4422 + "engines": {
  4423 + "node": ">= 10.4.0"
  4424 + },
  4425 + "optionalDependencies": {
  4426 + "@zxing/text-encoding": "~0.9.0"
  4427 + }
  4428 + },
  4429 + "node_modules/@zxing/text-encoding": {
  4430 + "version": "0.9.0",
  4431 + "resolved": "https://registry.npmmirror.com/@zxing/text-encoding/-/text-encoding-0.9.0.tgz",
  4432 + "integrity": "sha512-U/4aVJ2mxI0aDNI8Uq0wEhMgY+u4CNtEb0om3+y3+niDAsoTCOB33UF0sxpzqzdqXLqmvc+vZyAt4O8pPdfkwA==",
  4433 + "optional": true
  4434 + },
4401 4435 "node_modules/abab": {
4402 4436 "version": "2.0.6",
4403 4437 "resolved": "https://registry.npmmirror.com/abab/-/abab-2.0.6.tgz",
... ... @@ -4871,6 +4905,16 @@
4871 4905 "dev": true,
4872 4906 "peer": true
4873 4907 },
  4908 + "node_modules/barcode-detector": {
  4909 + "version": "0.7.0",
  4910 + "resolved": "https://registry.npmmirror.com/barcode-detector/-/barcode-detector-0.7.0.tgz",
  4911 + "integrity": "sha512-SJh+LV6e+W5e6QJe70ralFfqcYwvaOUGWyr+GepuQ5swPH4jF2asyTxOIUZNSU9Z5isD3KWI5hlqQ+b/QaFFOg==",
  4912 + "deprecated": "The ownership of barcode-detector has been transferred to a new user. Please update to version 2.0.0 or higher for continued support and maintenance. View the new API and source code at https://github.com/Sec-ant/barcode-detector ",
  4913 + "dependencies": {
  4914 + "@zxing/library": "^0.18.4",
  4915 + "jsqr": "^1.3.1"
  4916 + }
  4917 + },
4874 4918 "node_modules/base64-js": {
4875 4919 "version": "1.5.1",
4876 4920 "resolved": "https://registry.npmmirror.com/base64-js/-/base64-js-1.5.1.tgz",
... ... @@ -5115,6 +5159,11 @@
5115 5159 "node": ">= 0.4"
5116 5160 }
5117 5161 },
  5162 + "node_modules/callforth": {
  5163 + "version": "0.4.0",
  5164 + "resolved": "https://registry.npmmirror.com/callforth/-/callforth-0.4.0.tgz",
  5165 + "integrity": "sha512-k3kD3OBPRvYs3Sb41Fn1T7l6vvSmTMPq1a0jxh8QKD+wb+17G8oOq48eBi0stn8ahpNVUJtPlrlYwbfv9Cfhpg=="
  5166 + },
5118 5167 "node_modules/callsites": {
5119 5168 "version": "3.1.0",
5120 5169 "resolved": "https://registry.npmmirror.com/callsites/-/callsites-3.1.0.tgz",
... ... @@ -8855,6 +8904,11 @@
8855 8904 "graceful-fs": "^4.1.6"
8856 8905 }
8857 8906 },
  8907 + "node_modules/jsqr": {
  8908 + "version": "1.4.0",
  8909 + "resolved": "https://registry.npmmirror.com/jsqr/-/jsqr-1.4.0.tgz",
  8910 + "integrity": "sha512-dxLob7q65Xg2DvstYkRpkYtmKm2sPJ9oFhrhmudT1dZvNFFTlroai3AWSpLey/w5vMcLBXRgOJsbXpdN9HzU/A=="
  8911 + },
8858 8912 "node_modules/kleur": {
8859 8913 "version": "3.0.3",
8860 8914 "resolved": "https://registry.npmmirror.com/kleur/-/kleur-3.0.3.tgz",
... ... @@ -9963,6 +10017,18 @@
9963 10017 "integrity": "sha512-rRjALGNh9zVqvweg1j5OKIQKNsw3bLC+7qwlnead5K/9cb1cEIAGkwikt/09U0K+2IDWGD9CC6SP7tHAjUeqvQ==",
9964 10018 "license": "Apache-2.0"
9965 10019 },
  10020 + "node_modules/qrcode-reader-vue3": {
  10021 + "version": "3.1.2",
  10022 + "resolved": "https://registry.npmmirror.com/qrcode-reader-vue3/-/qrcode-reader-vue3-3.1.2.tgz",
  10023 + "integrity": "sha512-OqhJ4lkKHlyV42Fm5qptm7cdV3X2DRbtCgTNMjcFY7plkMNDqGo+bPxxlGkoPMCHowxXa1pPu9knWPfoqu5mUg==",
  10024 + "dependencies": {
  10025 + "barcode-detector": "^0.7",
  10026 + "callforth": "^0.4",
  10027 + "core-js": "^3",
  10028 + "vue": "^3",
  10029 + "webrtc-adapter": "^7"
  10030 + }
  10031 + },
9966 10032 "node_modules/qrcode-terminal": {
9967 10033 "version": "0.12.0",
9968 10034 "resolved": "https://registry.npmmirror.com/qrcode-terminal/-/qrcode-terminal-0.12.0.tgz",
... ... @@ -10259,6 +10325,18 @@
10259 10325 "fsevents": "~2.3.2"
10260 10326 }
10261 10327 },
  10328 + "node_modules/rtcpeerconnection-shim": {
  10329 + "version": "1.2.15",
  10330 + "resolved": "https://registry.npmmirror.com/rtcpeerconnection-shim/-/rtcpeerconnection-shim-1.2.15.tgz",
  10331 + "integrity": "sha512-C6DxhXt7bssQ1nHb154lqeL0SXz5Dx4RczXZu2Aa/L1NJFnEVDxFwCBo3fqtuljhHIGceg5JKBV4XJ0gW5JKyw==",
  10332 + "dependencies": {
  10333 + "sdp": "^2.6.0"
  10334 + },
  10335 + "engines": {
  10336 + "node": ">=6.0.0",
  10337 + "npm": ">=3.10.0"
  10338 + }
  10339 + },
10262 10340 "node_modules/run-parallel": {
10263 10341 "version": "1.2.0",
10264 10342 "resolved": "https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz",
... ... @@ -10403,6 +10481,11 @@
10403 10481 "node": ">= 10.13.0"
10404 10482 }
10405 10483 },
  10484 + "node_modules/sdp": {
  10485 + "version": "2.12.0",
  10486 + "resolved": "https://registry.npmmirror.com/sdp/-/sdp-2.12.0.tgz",
  10487 + "integrity": "sha512-jhXqQAQVM+8Xj5EjJGVweuEzgtGWb3tmEEpl3CLP3cStInSbVHSg0QWOGQzNq8pSID4JkpeV2mPqlMDLrm0/Vw=="
  10488 + },
10406 10489 "node_modules/select": {
10407 10490 "version": "1.1.2",
10408 10491 "resolved": "https://registry.npmmirror.com/select/-/select-1.1.2.tgz",
... ... @@ -10997,6 +11080,14 @@
10997 11080 "node": ">=8"
10998 11081 }
10999 11082 },
  11083 + "node_modules/ts-custom-error": {
  11084 + "version": "3.3.1",
  11085 + "resolved": "https://registry.npmmirror.com/ts-custom-error/-/ts-custom-error-3.3.1.tgz",
  11086 + "integrity": "sha512-5OX1tzOjxWEgsr/YEUWSuPrQ00deKLh6D7OTWcvNHm12/7QPyRh8SYpyWvA4IZv8H/+GQWQEh/kwo95Q9OVW1A==",
  11087 + "engines": {
  11088 + "node": ">=14.0.0"
  11089 + }
  11090 + },
11000 11091 "node_modules/type-detect": {
11001 11092 "version": "4.0.8",
11002 11093 "resolved": "https://registry.npmmirror.com/type-detect/-/type-detect-4.0.8.tgz",
... ... @@ -11404,6 +11495,14 @@
11404 11495 "vue": "^3.2.0"
11405 11496 }
11406 11497 },
  11498 + "node_modules/vue3-qr-reader": {
  11499 + "version": "1.0.0",
  11500 + "resolved": "https://registry.npmmirror.com/vue3-qr-reader/-/vue3-qr-reader-1.0.0.tgz",
  11501 + "integrity": "sha512-BRgmR+lDPkNwgL6skSaEOGFg4Aup/FLYnOGFCV0knYHxfbAnliJN/+wr//iqD2G3EOBrXw4TPGNfj/5Wxl7wwQ==",
  11502 + "dependencies": {
  11503 + "jsqr": "^1.4.0"
  11504 + }
  11505 + },
11407 11506 "node_modules/w3c-hr-time": {
11408 11507 "version": "1.0.2",
11409 11508 "resolved": "https://registry.npmmirror.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz",
... ... @@ -11513,6 +11612,19 @@
11513 11612 "node": ">=10.13.0"
11514 11613 }
11515 11614 },
  11615 + "node_modules/webrtc-adapter": {
  11616 + "version": "7.7.1",
  11617 + "resolved": "https://registry.npmmirror.com/webrtc-adapter/-/webrtc-adapter-7.7.1.tgz",
  11618 + "integrity": "sha512-TbrbBmiQBL9n0/5bvDdORc6ZfRY/Z7JnEj+EYOD1ghseZdpJ+nF2yx14k3LgQKc7JZnG7HAcL+zHnY25So9d7A==",
  11619 + "dependencies": {
  11620 + "rtcpeerconnection-shim": "^1.2.15",
  11621 + "sdp": "^2.12.0"
  11622 + },
  11623 + "engines": {
  11624 + "node": ">=6.0.0",
  11625 + "npm": ">=3.10.0"
  11626 + }
  11627 + },
11516 11628 "node_modules/whatwg-encoding": {
11517 11629 "version": "1.0.5",
11518 11630 "resolved": "https://registry.npmmirror.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz",
... ...
garbage-removal/package.json
... ... @@ -54,17 +54,20 @@
54 54 "@dcloudio/uni-mp-weixin": "3.0.0-3090620231104002",
55 55 "@dcloudio/uni-mp-xhs": "3.0.0-3090620231104002",
56 56 "@dcloudio/uni-quickapp-webview": "3.0.0-3090620231104002",
  57 + "@vitejs/plugin-basic-ssl": "^1.1.0",
57 58 "axios": "^0.27.2",
58 59 "clipboard": "^2.0.11",
59 60 "dayjs": "^1.11.10",
60 61 "js-md5": "^0.8.3",
61 62 "pinia": "2.0.33",
62 63 "pinia-plugin-persist-uni": "^1.2.0",
  64 + "qrcode-reader-vue3": "^3.1.2",
63 65 "sass": "1.58.3",
64 66 "sass-loader": "13.2.0",
65 67 "uqrcodejs": "^4.0.7",
66 68 "vue": "^3.2.45",
67   - "vue-i18n": "^9.1.9"
  69 + "vue-i18n": "^9.1.9",
  70 + "vue3-qr-reader": "^1.0.0"
68 71 },
69 72 "devDependencies": {
70 73 "@dcloudio/types": "^3.3.2",
... ...
garbage-removal/src/components/QrScanner/QrScanner.vue 0 → 100644
  1 +<template>
  2 + <div>
  3 + <QrStream
  4 + :style="scannerStyle"
  5 + @decode="handleDecode"
  6 + @init="handleInit"
  7 + @error="handleError"
  8 + >
  9 + <template v-if="showCloseButton">
  10 + <div class="qr-scanner-container">
  11 + <button class="close-view" @click="closeScanner"><span>X</span></button>
  12 + <div class="qr-scanner">
  13 + <div class="box">
  14 + <div class="line"></div>
  15 + <div class="angle"></div>
  16 + </div>
  17 + </div>
  18 + </div>
  19 + </template>
  20 + </QrStream>
  21 + </div>
  22 +</template>
  23 +
  24 +<script setup>
  25 +import { ref, defineExpose } from 'vue'
  26 +import { QrStream } from 'vue3-qr-reader'
  27 +
  28 +const emit = defineEmits(['decode','close'])
  29 +
  30 +const scannerStyle = {
  31 + position: 'fixed',
  32 + top: 0,
  33 + left: 0,
  34 + width: '100vw',
  35 + height: '100vh',
  36 + zIndex: 9999,
  37 +}
  38 +
  39 +const showCloseButton = ref(false)
  40 +
  41 +const qrcodeData = ref(null)
  42 +
  43 +const handleDecode = (data) => {
  44 + console.log('Decoded data:', data)
  45 + emit('decode', data)
  46 + qrcodeData.value = data
  47 +
  48 +}
  49 +
  50 +const closeScanner = () => {
  51 + emit('close')
  52 +}
  53 +
  54 +const handleInit = async (promise) => {
  55 + try {
  56 + const { capabilities } = await promise
  57 + console.log('Camera capabilities:', capabilities)
  58 + showCloseButton.value = true
  59 + } catch (error) {
  60 + handleError(error)
  61 +
  62 + }
  63 +}
  64 +
  65 +const handleError = (error) => {
  66 + const errorMessages = {
  67 + NotAllowedError: '您需要授予相机访问权限',
  68 + NotFoundError: '这个设备上没有摄像头',
  69 + NotSupportedError: '所需的安全上下文(HTTPS、本地主机)',
  70 + NotReadableError: '相机被占用',
  71 + OverconstrainedError: '安装摄像头不合适',
  72 + StreamApiNotSupportedError: '此浏览器不支持流API',
  73 + InsecureContextError: '仅允许在安全上下文中访问摄像机。使用HTTPS或本地主机,而不是HTTP。',
  74 + }
  75 +
  76 + const message = errorMessages[error.name] || 'ERROR: 摄像头错误'
  77 + message.error(message)
  78 + console.error(message)
  79 +}
  80 +
  81 +defineExpose({ qrcodeData })
  82 +</script>
  83 +
  84 +<style scoped lang="scss">
  85 +.qr-scanner-container {
  86 + position: relative;
  87 + width: 100%;
  88 + height: 100%;
  89 +
  90 + .close-view {
  91 + width: 30px;
  92 + height: 30px;
  93 + position: absolute;
  94 + top: 30px;
  95 + right: 30px;
  96 + border-radius: 50%;
  97 + background-color: #fff;
  98 + color: #000;
  99 + text-align: left;
  100 + line-height: 30px;
  101 + font-size: 20px;
  102 + cursor: pointer;
  103 + z-index: 1000000;
  104 + }
  105 +}
  106 +
  107 +.qr-scanner {
  108 + background-image: linear-gradient(
  109 + 0deg,
  110 + transparent 24%,
  111 + rgba(32, 255, 77, 0.1) 25%,
  112 + rgba(32, 255, 77, 0.1) 26%,
  113 + transparent 27%,
  114 + transparent 74%,
  115 + rgba(32, 255, 77, 0.1) 75%,
  116 + rgba(32, 255, 77, 0.1) 76%,
  117 + transparent 77%,
  118 + transparent
  119 + ),
  120 + linear-gradient(
  121 + 90deg,
  122 + transparent 24%,
  123 + rgba(32, 255, 77, 0.1) 25%,
  124 + rgba(32, 255, 77, 0.1) 26%,
  125 + transparent 27%,
  126 + transparent 74%,
  127 + rgba(32, 255, 77, 0.1) 75%,
  128 + rgba(32, 255, 77, 0.1) 76%,
  129 + transparent 77%,
  130 + transparent
  131 + );
  132 + background-size: 3rem 3rem;
  133 + background-position: -1rem -1rem;
  134 + width: 100%;
  135 + /* height: 100%; */
  136 + height: 100vh;
  137 + position: relative;
  138 + background-color: #1110;
  139 +
  140 + /* background-color: #111; */
  141 +}
  142 +
  143 +.qr-scanner .box {
  144 + width: 213px;
  145 + height: 213px;
  146 + position: absolute;
  147 + left: 50%;
  148 + top: 50%;
  149 + transform: translate(-50%, -50%);
  150 + overflow: hidden;
  151 + border: 0.1rem solid rgba(0, 255, 51, 0.2);
  152 + /* background: url('http://resource.beige.world/imgs/gongconghao.png') no-repeat center center; */
  153 +}
  154 +
  155 +.qr-scanner .line {
  156 + height: calc(100% - 2px);
  157 + width: 100%;
  158 + background: linear-gradient(180deg, rgba(0, 255, 51, 0) 43%, #00ff33 211%);
  159 + border-bottom: 3px solid #00ff33;
  160 + transform: translateY(-100%);
  161 + animation: radar-beam 2s infinite alternate;
  162 + animation-timing-function: cubic-bezier(0.53, 0, 0.43, 0.99);
  163 + animation-delay: 1.4s;
  164 +}
  165 +
  166 +.qr-scanner .box:after,
  167 +.qr-scanner .box:before,
  168 +.qr-scanner .angle:after,
  169 +.qr-scanner .angle:before {
  170 + content: '';
  171 + display: block;
  172 + position: absolute;
  173 + width: 3vw;
  174 + height: 3vw;
  175 +
  176 + border: 0.2rem solid transparent;
  177 +}
  178 +
  179 +.qr-scanner .box:after,
  180 +.qr-scanner .box:before {
  181 + top: 0;
  182 + border-top-color: #00ff33;
  183 +}
  184 +
  185 +.qr-scanner .angle:after,
  186 +.qr-scanner .angle:before {
  187 + bottom: 0;
  188 + border-bottom-color: #00ff33;
  189 +}
  190 +
  191 +.qr-scanner .box:before,
  192 +.qr-scanner .angle:before {
  193 + left: 0;
  194 + border-left-color: #00ff33;
  195 +}
  196 +
  197 +.qr-scanner .box:after,
  198 +.qr-scanner .angle:after {
  199 + right: 0;
  200 + border-right-color: #00ff33;
  201 +}
  202 +
  203 +@keyframes radar-beam {
  204 + 0% {
  205 + transform: translateY(-100%);
  206 + }
  207 +
  208 + 100% {
  209 + transform: translateY(0);
  210 + }
  211 +}
  212 +</style>
... ...
garbage-removal/src/components/liu-delivery-time/liu-delivery-time.vue
... ... @@ -104,13 +104,14 @@ const getFutureDays = () =&gt; {
104 104 const month = (date.getMonth() + 1).toString().padStart(2, '0');
105 105 const day = date.getDate().toString().padStart(2, '0');
106 106 if (i === 0) {
107   - let hours = new Date().getHours();
  107 + let hours = date.getHours();
  108 + console.log(hours);
108 109 // if (hours >= 13) {
109 110 // continue;
110 111 // }
111 112 days.push({
112 113 day: `${year}-${month}-${day}`,
113   - timeList: getCurrentDayTimeList(9, hours, 1)
  114 + timeList: getCurrentDayTimeList(0, hours, 1)
114 115 });
115 116 } else {
116 117 days.push({
... ...
garbage-removal/src/pages/home-info/clean/index.vue
... ... @@ -25,7 +25,7 @@
25 25 </view>
26 26 <view @click.stop="handleTimeChoose" class="company-clean-container-header-reservation">
27 27 <view class="company-clean-container-header-reservation-left">
28   - <text style="color: red;">*</text> <u-icon name="calendar" size="40"></u-icon>123预约时间123
  28 + <text style="color: red;">*</text> <u-icon name="calendar" size="40"></u-icon>预约时间
29 29 </view>
30 30 <view class="company-clean-container-header-reservation-right">
31 31 <text style="margin-right: 10rpx;">{{ dayTime ? dayTime : "请选择时间" }}</text> <u-icon name="arrow-right"
... ... @@ -490,8 +490,7 @@ const handleOderSure = async () =&gt; {
490 490 garLongitude: userAddress.value.garLongitude,
491 491 garLatitude: userAddress.value.garLatitude,
492 492 garCoordinate: userAddress.value.garCoordinate,
493   - garInCarStore: paramFrom.value.garInCarStore,
494   - garEstimatedCost:paramFrom.value.garEstimatedCost
  493 + garInCarStore: paramFrom.value.garInCarStore
495 494 }
496 495 console.log("----------------------->5");
497 496 if (!validateParams(params)) {
... ...
garbage-removal/src/pages/login/code.vue
... ... @@ -69,18 +69,18 @@ const noCaptcha = () =&gt; {
69 69  
70 70 // 校验验证码
71 71 const checkVerifyNum = (code) => {
72   - userLogin({ loginType: 0, tel: iphoneNumber.value, code: code }).then(res => {
  72 + userLogin({ loginType: 0, tel: iphoneNumber.value, code: code }).then(res => {
73 73 // 登录成功
74   - if (res.data.success) {
  74 + if (res.data.code===200) {
75 75 verifyFlag.value = false;
76 76 store.tempToken = res.data.data.token
77   -
78 77 store.userName = res.data.data.name;
79 78 uni.navigateTo({
80 79 url: `/pages/wode-info/wode-info-choose/index?ruleVos= ${encodeURIComponent(JSON.stringify(res.data.data.ruleVos))}&userName=${encodeURIComponent(res.data.data.name)}`
81 80 });
82 81 } else {
83 82 verifyFlag.value = true;
  83 + uni.$u.toast(res.data.message);
84 84 }
85 85 })
86 86 }
... ...
garbage-removal/src/pages/order-info/order-disposal/scan-detail/index.vue
... ... @@ -56,6 +56,15 @@
56 56 v-model="details.garCarryingWeight" @change="handlerInputChange"></up-input>
57 57 </view>
58 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>
59 68 <view class="scan-upload-fill-image-box">
60 69 <view class="scan-upload-fill-image-label">
61 70 <view>
... ... @@ -159,6 +168,10 @@ const validateParams = (params) =&gt; {
159 168 uni.$u.toast("请输入处理人单位");
160 169 return false;
161 170 }
  171 + if (!params.garReceptionQuantity) {
  172 + uni.$u.toast("请输入接收量");
  173 + return false;
  174 + }
162 175 if (!validateImage(params.fillImageList)) {
163 176 return false;
164 177 }
... ...
garbage-removal/src/pages/order/order-disposal/index.vue
1 1 <template>
2   - <view class="order-container">
3   - <!-- #ifdef H5 -->
4   - <z-paging-swiper :fixed="false">
5   - <!-- #endif -->
6   - <!-- #ifdef MP-WEIXIN -->
7   - <z-paging-swiper>
8   - <!-- #endif -->
9   - <template v-slot:top>
10   - <view class="header-box" :style="{
  2 + <view class="order-container">
  3 + <!-- #ifdef H5 -->
  4 + <z-paging-swiper :fixed="false">
  5 + <!-- #endif -->
  6 + <!-- #ifdef MP-WEIXIN -->
  7 + <z-paging-swiper>
  8 + <!-- #endif -->
  9 + <template v-slot:top>
  10 + <view class="header-box" :style="{
11 11 'height': lightHeight, 'line-height': lightHeight,
12 12 'padding-top': topMargin
13 13 }
14 14 ">
15   - <view class="header-box-left-message">
16   - &nbsp;
17   - </view>
18   - <view class="header-box-title">
19   - {{ title }}
20   - </view>
21   - </view>
22   - <u-tabs lineWidth=" 40" lineColor="#ffffff" lineHeight="6"
23   - :activeStyle="{ 'color': '#ffffff', 'font-weight': 'bolder' }" :inactiveStyle="{ color: '#ffffff' }"
24   - ref="uTabsElement" :list="list" :current="current" @change="tabsChange" :scrollable="false"></u-tabs>
25   - </template>
26   - <swiper class="swiper" :current="swiperCurrent" @translation="translation" @animationfinish="animationfinish">
27   - <swiper-item class="swiper-item" v-for="( item, index ) in list " :key="index">
28   - <swiper-list-item :tabIndex="index" :currentIndex="swiperCurrent"></swiper-list-item>
29   - </swiper-item>
30   - </swiper>
31   - </z-paging-swiper>
32   -
33   - </view>
34   - <view class="scan-box">
35   - <view class="scan-btn">
36   - <view class="scan-icon">
37   -
38   -
39   - <!-- #ifdef H5 -->
40   - <u-icon @click="handleScanH5" name="scan" :size="80" color="#fff"></u-icon>
41   - <!-- #endif -->
42   - </view>
43   - </view>
44   - </view>
  15 + <view class="header-box-left-message">
  16 + &nbsp;
  17 + </view>
  18 + <view class="header-box-title">
  19 + {{ title }}
  20 + </view>
  21 + </view>
  22 + <u-tabs lineWidth=" 40" lineColor="#ffffff" lineHeight="6"
  23 + :activeStyle="{ 'color': '#ffffff', 'font-weight': 'bolder' }"
  24 + :inactiveStyle="{ color: '#ffffff' }" ref="uTabsElement" :list="list" :current="current"
  25 + @change="tabsChange" :scrollable="false"></u-tabs>
  26 + </template>
  27 + <swiper class="swiper" :current="swiperCurrent" @translation="translation"
  28 + @animationfinish="animationfinish">
  29 + <swiper-item class="swiper-item" v-for="( item, index ) in list " :key="index">
  30 + <swiper-list-item :tabIndex="index" :currentIndex="swiperCurrent"></swiper-list-item>
  31 + </swiper-item>
  32 + </swiper>
  33 + </z-paging-swiper>
  34 +
  35 + </view>
  36 + <view class="scan-box">
  37 + <view class="scan-btn">
  38 + <view class="scan-icon">
  39 +
  40 +
  41 + <!-- #ifdef H5 -->
  42 + <u-icon @click="handleScanH5" name="scan" :size="180" color="#fff"></u-icon>
  43 + <!-- #endif -->
  44 + </view>
  45 + </view>
  46 + </view>
  47 + <QrScannerVue v-if="showScan" @decode="onDecodeHandler" @close="qrReaderClose" />
45 48 </template>
46 49  
47 50 <script setup>
48   -import { checkCode } from '@/apis/order.js';
49   -import { nextTick, onMounted, ref } from 'vue';
50   -import swiperListItem from './swiper-list-item/index.vue';
51   -import { useMainStore } from '@/stores';
52   -const list = ref([{ name: '处理中' }, { name: '已完成' }])
53   -const current = ref(0);
54   -const swiperCurrent = ref(0);
55   -const uTabsElement = ref();
56   -const title = ref('处置场所');
57   -const topMargin = ref();
58   -const lightHeight = ref();
59   -const store = useMainStore();
60   -
61   -const tabsChange = (el) => {
62   - console.log("tabsChange", el);
63   - swiperCurrent.value = Number(el.index)
64   -}
65   -
66   -const animationfinish = (e) => {
67   - current.value = e.detail.current
68   - swiperCurrent.value = e.detail.current
69   -}
70   -
71   -const translation = (e) => {
72   - uTabsElement.value.setDx(e.detail.dx)
73   -}
74   -
75   -const handleScan = () => {
76   -
77   -
78   - uni.scanCode({
79   - success: function (res) {
80   - console.log('条码类型:' + res.scanType);
81   - console.log('条码内容:' + res.result);
82   - try {
83   - if (res.scanType == "QR_CODE") {
84   - checkCode(res.result).then(res => {
85   - console.log(res);
86   - if (res.data.code == 200) {
87   - uni.$u.route({
88   - url: `pages/order-info/order-disposal/scan-detail/index`,
89   - params: {
90   - data: encodeURIComponent(JSON.stringify(res.data.data))
91   - }
92   - })
93   - return
94   - }
95   - uni.$u.toast(res.data.msg);
96   - })
97   - }
98   - } catch (error) {
99   - uni.$u.toast("无法确认当前二维码趟次,请扫描正在进行的运输趟次123");
100   - console.log("===================>weixin");
101   - }
102   - },
103   - fail:function (res) {
104   - uni.$u.toast("图片扫码失败,请检查二维码图片123");
105   - console.log("===================>weixin");
106   - }
107   - });
108   -}
109   -
110   -const handleScanH5 = () => {
111   - uni.chooseImage({
112   - count:1,
113   - sizeType:['original','compressed'],
114   - sourceType:['camera','album'],
115   - success:(res)=>{
116   - console.log(res.tempFilePaths[0]);
117   - uni.uploadFile({
118   - url:import.meta.env.VITE_BASE_URL+"/QRCode/ocr/pric",
119   - header: {
120   - "Authorization": store.token
121   - },
122   - fileType:'image',
123   - filePath:res.tempFilePaths[0],
124   - name:'file',
125   - success:(uploadRes)=>{
126   - if (uploadRes.statusCode == 200) {
127   - if("" == uploadRes.data || undefined == uploadRes.data || null == uploadRes.data){
128   - uni.$u.toast("二维码图片识别失败,请检查二维码图片");
129   - return;
130   - }else{
131   - checkCode(uploadRes.data).then(res => {
132   - if (res.data&& res.data.code == 200) {
133   - uni.$u.route({
134   - url: `pages/order-info/order-disposal/scan-detail/index`,
135   - params: {
136   - data: encodeURIComponent(JSON.stringify(res.data.data))
137   - }
138   - })
139   - return
140   - }
141   - uni.$u.toast(res.data.msg);
142   - })
143   - }
144   - }else{
145   - uni.$u.toast("二维码图片识别失败,请检查二维码图片");
146   - }
147   -
148   - }
149   - })
150   -
151   - }
152   - })
153   -}
  51 + import QrScannerVue from '../../../components/QrScanner/QrScanner.vue';
  52 + import {
  53 + checkCode
  54 + } from '@/apis/order.js';
  55 + import {
  56 + nextTick,
  57 + onMounted,
  58 + ref
  59 + } from 'vue';
  60 + import swiperListItem from './swiper-list-item/index.vue';
  61 + import {
  62 + useMainStore
  63 + } from '@/stores';
  64 + const list = ref([{
  65 + name: '处理中'
  66 + }, {
  67 + name: '已完成'
  68 + }])
  69 + const current = ref(0);
  70 + const swiperCurrent = ref(0);
  71 + const uTabsElement = ref();
  72 + const title = ref('处置场所');
  73 + const topMargin = ref();
  74 + const lightHeight = ref();
  75 + const store = useMainStore();
  76 + const showScan = ref(false);
154 77  
  78 + const tabsChange = (el) => {
  79 + console.log("tabsChange", el);
  80 + swiperCurrent.value = Number(el.index)
  81 + }
155 82  
  83 + const animationfinish = (e) => {
  84 + current.value = e.detail.current
  85 + swiperCurrent.value = e.detail.current
  86 + }
156 87  
  88 + const translation = (e) => {
  89 + uTabsElement.value.setDx(e.detail.dx)
  90 + }
157 91  
158   -onMounted(() => {
159   - console.log("处理场所");
160   - nextTick(() => {
161   - try {
162   - const { height, top } = uni.getMenuButtonBoundingClientRect();
163   - topMargin.value = top + 'px';
164   - lightHeight.value = height + 'px';
165   - } catch (error) {
166   - topMargin.value = '60rpx';
167   - lightHeight.value = '60rpx';
168   - console.log('There is no menu because the current app is not a small program');
169   - }
170   - })
171   -})
  92 + const handleScan = () => {
  93 +
  94 +
  95 + uni.scanCode({
  96 + success: function(res) {
  97 + console.log('条码类型:' + res.scanType);
  98 + console.log('条码内容:' + res.result);
  99 + try {
  100 + if (res.scanType == "QR_CODE") {
  101 + checkCode(res.result).then(res => {
  102 + console.log(res);
  103 + if (res.data.code == 200) {
  104 + uni.$u.route({
  105 + url: `pages/order-info/order-disposal/scan-detail/index`,
  106 + params: {
  107 + data: encodeURIComponent(JSON.stringify(res.data
  108 + .data))
  109 + }
  110 + })
  111 + return
  112 + }
  113 + uni.$u.toast(res.data.msg);
  114 + })
  115 + }
  116 + } catch (error) {
  117 + uni.$u.toast("无法确认当前二维码趟次,请扫描正在进行的运输趟次");
  118 + console.log("===================>weixin");
  119 + }
  120 + },
  121 + fail: function(res) {
  122 + uni.$u.toast("图片扫码失败,请检查二维码图片");
  123 + console.log("===================>weixin");
  124 + }
  125 + });
  126 + }
  127 +
  128 + const handleScanH5 = () => {
  129 + showScan.value = true;
  130 + // uni.chooseImage({
  131 + // count: 1,
  132 + // sizeType: ['original', 'compressed'],
  133 + // sourceType: ['camera', 'album'],
  134 + // success: (res) => {
  135 + // console.log(res.tempFilePaths[0]);
  136 + // uni.uploadFile({
  137 + // url: import.meta.env.VITE_BASE_URL + "/QRCode/ocr/pric",
  138 + // header: {
  139 + // "Authorization": store.token
  140 + // },
  141 + // fileType: 'image',
  142 + // filePath: res.tempFilePaths[0],
  143 + // name: 'file',
  144 + // success: (uploadRes) => {
  145 + // if (uploadRes.statusCode == 200) {
  146 + // if ("" == uploadRes.data || undefined == uploadRes.data || null ==
  147 + // uploadRes.data) {
  148 + // uni.$u.toast("二维码图片识别失败,请检查二维码图片");
  149 + // return;
  150 + // } else {
  151 + // checkCode(uploadRes.data).then(res => {
  152 + // if (res.data && res.data.code == 200) {
  153 + // uni.$u.route({
  154 + // url: `pages/order-info/order-disposal/scan-detail/index`,
  155 + // params: {
  156 + // data: encodeURIComponent(JSON
  157 + // .stringify(res.data
  158 + // .data))
  159 + // }
  160 + // })
  161 + // return
  162 + // }
  163 + // uni.$u.toast(res.data.msg);
  164 + // })
  165 + // }
  166 + // } else {
  167 + // uni.$u.toast("二维码图片识别失败,请检查二维码图片");
  168 + // }
  169 +
  170 + // }
  171 + // })
  172 +
  173 + // }
  174 + // })
  175 + }
  176 +
  177 + const onDecodeHandler = (data) => {
  178 + showScan.value = false
  179 + try {
  180 + checkCode(data).then(res => {
  181 + console.log(res);
  182 + if (res.data.code == 200) {
  183 + uni.$u.route({
  184 + url: `pages/order-info/order-disposal/scan-detail/index`,
  185 + params: {
  186 + data: encodeURIComponent(JSON.stringify(res.data
  187 + .data))
  188 + }
  189 + })
  190 + return
  191 + }
  192 + alert(res.data.msg);
  193 + })
  194 + } catch (error) {
  195 + alert("无法确认当前二维码趟次,请扫描正在进行的运输趟次");
  196 + }
  197 + }
  198 + const qrReaderClose = () => {
  199 + uni.$u.toast("qrReaderClose",data)
  200 + alert("qrReaderClose")
  201 + // showScan.value = false
  202 + }
  203 + onMounted(() => {
  204 + console.log("处理场所");
  205 + nextTick(() => {
  206 + try {
  207 + const {
  208 + height,
  209 + top
  210 + } = uni.getMenuButtonBoundingClientRect();
  211 + topMargin.value = top + 'px';
  212 + lightHeight.value = height + 'px';
  213 + } catch (error) {
  214 + topMargin.value = '60rpx';
  215 + lightHeight.value = '60rpx';
  216 + console.log('There is no menu because the current app is not a small program');
  217 + }
  218 + })
  219 + })
172 220 </script>
173 221 <style lang="scss" scoped>
174   -.order-container {
175   - width: 100%;
176   - height: 100%;
177   - background: #19a97c;
178   - box-sizing: border-box;
179   - display: flex;
180   - flex-direction: column;
181   -
182   - .header-box {
183   - width: 100%;
184   - color: white;
185   - display: flex;
186   - justify-content: flex-start;
187   - align-items: center;
188   - /* 分散对齐,自动调整间距 */
189   -
190   - .header-box-left-message {
191   - width: 150rpx;
192   - display: flex;
193   - justify-content: center;
194   - align-items: center;
195   - }
  222 + .scanCode {
  223 + position: fixed;
  224 + top: 0;
  225 + left: 0;
  226 + right: 0;
  227 + bottom: 0;
  228 + z-index: 99;
  229 + height: 100%;
  230 + width: 100%;
  231 + background-color: rgba(0, 0, 0, 0.7);
  232 + }
196 233  
197   - .header-box-title {
198   - font-size: 35rpx;
199   - font-weight: bold;
200   - width: 600rpx;
201   - text-align: center;
202   - // 向左偏移75rpx
203   - margin-left: -75rpx;
  234 + .order-container {
  235 + width: 100%;
  236 + height: 100%;
  237 + background: #19a97c;
  238 + box-sizing: border-box;
  239 + display: flex;
  240 + flex-direction: column;
204 241  
205   - }
  242 + .header-box {
  243 + width: 100%;
  244 + color: white;
  245 + display: flex;
  246 + justify-content: flex-start;
  247 + align-items: center;
  248 + /* 分散对齐,自动调整间距 */
206 249  
207   - }
208   -
209   -
210   - .swiper {
211   - height: 100%;
212   - // height: 300px;
213   - background: linear-gradient(to bottom, #19a97c, $u-bg-color, $u-bg-color, $u-bg-color, $u-bg-color, $u-bg-color, $u-bg-color);
214   - }
215   -
216   -
217   -}
218   -
219   -.scan-box {
220   - position: fixed;
221   - bottom: 200rpx;
222   - right: 50rpx;
223   - width: 90rpx;
224   - height: 90rpx;
225   - border-radius: 15rpx;
226   - box-shadow: 0 0 10rpx rgba(0, 0, 0, .1);
227   - display: flex;
228   - justify-content: center;
229   - align-items: center;
230   - padding: 2rpx;
231   - box-sizing: border-box;
232   - background-color: #ffffff71;
233   -
234   - .scan-btn {
235   - width: 80rpx;
236   - height: 80rpx;
237   - border-radius: 50%;
238   - display: flex;
239   - justify-content: center;
240   - align-items: center;
241   - background-color: #19a97c;
242   - @include handleClick;
243   -
244   - .scan-icon {
245   - display: flex;
246   - justify-content: center;
247   - align-items: center;
248   - }
249   - }
250   -}
  250 + .header-box-left-message {
  251 + width: 150rpx;
  252 + display: flex;
  253 + justify-content: center;
  254 + align-items: center;
  255 + }
  256 +
  257 + .header-box-title {
  258 + font-size: 35rpx;
  259 + font-weight: bold;
  260 + width: 600rpx;
  261 + text-align: center;
  262 + // 向左偏移75rpx
  263 + margin-left: -75rpx;
  264 +
  265 + }
  266 +
  267 + }
  268 +
  269 +
  270 + .swiper {
  271 + height: 100%;
  272 + // height: 300px;
  273 + background: linear-gradient(to bottom, #19a97c, $u-bg-color, $u-bg-color, $u-bg-color, $u-bg-color, $u-bg-color, $u-bg-color);
  274 + }
  275 +
  276 +
  277 + }
  278 +
  279 + .scan-box {
  280 + position: fixed;
  281 + bottom: 200rpx;
  282 + right: 50rpx;
  283 + width: 90rpx;
  284 + height: 90rpx;
  285 + border-radius: 15rpx;
  286 + box-shadow: 0 0 10rpx rgba(0, 0, 0, .1);
  287 + display: flex;
  288 + justify-content: center;
  289 + align-items: center;
  290 + padding: 2rpx;
  291 + box-sizing: border-box;
  292 + background-color: #ffffff71;
  293 +
  294 + .scan-btn {
  295 + width: 80rpx;
  296 + height: 80rpx;
  297 + border-radius: 50%;
  298 + display: flex;
  299 + justify-content: center;
  300 + align-items: center;
  301 + background-color: #19a97c;
  302 + @include handleClick;
  303 +
  304 + .scan-icon {
  305 + display: flex;
  306 + justify-content: center;
  307 + align-items: center;
  308 + }
  309 + }
  310 + }
251 311 </style>
252 312 \ No newline at end of file
... ...
garbage-removal/vite.config.js
1 1 import uni from '@dcloudio/vite-plugin-uni';
  2 +import basicSsl from '@vitejs/plugin-basic-ssl'
2 3  
3 4 import { resolve } from "path";
4 5 import { defineConfig } from 'vite';
... ... @@ -6,6 +7,7 @@ import { defineConfig } from &#39;vite&#39;;
6 7 export default defineConfig({
7 8 plugins: [
8 9 uni(),
  10 + // basicSsl()
9 11 ],
10 12 resolve: {
11 13 alias: {
... ... @@ -14,6 +16,7 @@ export default defineConfig({
14 16 },
15 17 },
16 18 server: {
17   - port: 9000
  19 + port: 9000,
  20 + // https: true
18 21 }
19 22 })
... ...
garbage-removal/yarn.lock
... ... @@ -2201,6 +2201,11 @@
2201 2201 dependencies:
2202 2202 "@types/yargs-parser" "*"
2203 2203  
  2204 +"@vitejs/plugin-basic-ssl@^1.1.0":
  2205 + "integrity" "sha512-mkQnxTkcldAzIsomk1UuLfAu9n+kpQ3JbHcpCp7d2Oo6ITtji8pHS3QToOWjhPFvNQSnhlkAjmGbhv2QvwO/7Q=="
  2206 + "resolved" "https://registry.npmmirror.com/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-1.2.0.tgz"
  2207 + "version" "1.2.0"
  2208 +
2204 2209 "@vitejs/plugin-legacy@^4.0.3":
2205 2210 "integrity" "sha512-um3gbVouD2Q/g19C0qpDfHwveXDCAHzs8OC3e9g6aXpKoD1H14himgs7wkMnhAynBJy7QqUoZNAXDuqN8zLR2g=="
2206 2211 "resolved" "https://registry.npmmirror.com/@vitejs/plugin-legacy/-/plugin-legacy-4.1.1.tgz"
... ... @@ -2494,6 +2499,20 @@
2494 2499 "resolved" "https://registry.npmmirror.com/@xtuc/long/-/long-4.2.2.tgz"
2495 2500 "version" "4.2.2"
2496 2501  
  2502 +"@zxing/library@^0.18.4":
  2503 + "integrity" "sha512-bulZ9JHoLFd9W36pi+7e7DnEYNJhljYjZ1UTsKPOoLMU3qtC+REHITeCRNx40zTRJZx18W5TBRXt5pq2Uopjsw=="
  2504 + "resolved" "https://registry.npmmirror.com/@zxing/library/-/library-0.18.6.tgz"
  2505 + "version" "0.18.6"
  2506 + dependencies:
  2507 + "ts-custom-error" "^3.0.0"
  2508 + optionalDependencies:
  2509 + "@zxing/text-encoding" "~0.9.0"
  2510 +
  2511 +"@zxing/text-encoding@~0.9.0":
  2512 + "integrity" "sha512-U/4aVJ2mxI0aDNI8Uq0wEhMgY+u4CNtEb0om3+y3+niDAsoTCOB33UF0sxpzqzdqXLqmvc+vZyAt4O8pPdfkwA=="
  2513 + "resolved" "https://registry.npmmirror.com/@zxing/text-encoding/-/text-encoding-0.9.0.tgz"
  2514 + "version" "0.9.0"
  2515 +
2497 2516 "abab@^2.0.3", "abab@^2.0.5":
2498 2517 "integrity" "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA=="
2499 2518 "resolved" "https://registry.npmmirror.com/abab/-/abab-2.0.6.tgz"
... ... @@ -2740,6 +2759,14 @@
2740 2759 "resolved" "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz"
2741 2760 "version" "1.0.2"
2742 2761  
  2762 +"barcode-detector@^0.7":
  2763 + "integrity" "sha512-SJh+LV6e+W5e6QJe70ralFfqcYwvaOUGWyr+GepuQ5swPH4jF2asyTxOIUZNSU9Z5isD3KWI5hlqQ+b/QaFFOg=="
  2764 + "resolved" "https://registry.npmmirror.com/barcode-detector/-/barcode-detector-0.7.0.tgz"
  2765 + "version" "0.7.0"
  2766 + dependencies:
  2767 + "@zxing/library" "^0.18.4"
  2768 + "jsqr" "^1.3.1"
  2769 +
2743 2770 "base64-js@^1.3.1":
2744 2771 "integrity" "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="
2745 2772 "resolved" "https://registry.npmmirror.com/base64-js/-/base64-js-1.5.1.tgz"
... ... @@ -2860,6 +2887,11 @@
2860 2887 "get-intrinsic" "^1.2.1"
2861 2888 "set-function-length" "^1.1.1"
2862 2889  
  2890 +"callforth@^0.4":
  2891 + "integrity" "sha512-k3kD3OBPRvYs3Sb41Fn1T7l6vvSmTMPq1a0jxh8QKD+wb+17G8oOq48eBi0stn8ahpNVUJtPlrlYwbfv9Cfhpg=="
  2892 + "resolved" "https://registry.npmmirror.com/callforth/-/callforth-0.4.0.tgz"
  2893 + "version" "0.4.0"
  2894 +
2863 2895 "callsites@^3.0.0":
2864 2896 "integrity" "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ=="
2865 2897 "resolved" "https://registry.npmmirror.com/callsites/-/callsites-3.1.0.tgz"
... ... @@ -3050,7 +3082,7 @@
3050 3082 dependencies:
3051 3083 "browserslist" "^4.22.1"
3052 3084  
3053   -"core-js@^3.31.1", "core-js@^3.4.1":
  3085 +"core-js@^3", "core-js@^3.31.1", "core-js@^3.4.1":
3054 3086 "integrity" "sha512-XeBzWI6QL3nJQiHmdzbAOiMYqjrb7hwU7A39Qhvd/POSa/t9E1AeZyEZx3fNvp/vtM8zXwhoL0FsiS0hD0pruQ=="
3055 3087 "resolved" "https://registry.npmmirror.com/core-js/-/core-js-3.33.2.tgz"
3056 3088 "version" "3.33.2"
... ... @@ -4534,6 +4566,11 @@
4534 4566 optionalDependencies:
4535 4567 "graceful-fs" "^4.1.6"
4536 4568  
  4569 +"jsqr@^1.3.1", "jsqr@^1.4.0":
  4570 + "integrity" "sha512-dxLob7q65Xg2DvstYkRpkYtmKm2sPJ9oFhrhmudT1dZvNFFTlroai3AWSpLey/w5vMcLBXRgOJsbXpdN9HzU/A=="
  4571 + "resolved" "https://registry.npmmirror.com/jsqr/-/jsqr-1.4.0.tgz"
  4572 + "version" "1.4.0"
  4573 +
4537 4574 "kleur@^3.0.3":
4538 4575 "integrity" "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w=="
4539 4576 "resolved" "https://registry.npmmirror.com/kleur/-/kleur-3.0.3.tgz"
... ... @@ -5155,6 +5192,17 @@
5155 5192 "resolved" "https://registry.npmmirror.com/punycode/-/punycode-2.3.1.tgz"
5156 5193 "version" "2.3.1"
5157 5194  
  5195 +"qrcode-reader-vue3@^3.1.2":
  5196 + "integrity" "sha512-OqhJ4lkKHlyV42Fm5qptm7cdV3X2DRbtCgTNMjcFY7plkMNDqGo+bPxxlGkoPMCHowxXa1pPu9knWPfoqu5mUg=="
  5197 + "resolved" "https://registry.npmmirror.com/qrcode-reader-vue3/-/qrcode-reader-vue3-3.1.2.tgz"
  5198 + "version" "3.1.2"
  5199 + dependencies:
  5200 + "barcode-detector" "^0.7"
  5201 + "callforth" "^0.4"
  5202 + "core-js" "^3"
  5203 + "vue" "^3"
  5204 + "webrtc-adapter" "^7"
  5205 +
5158 5206 "qrcode-reader@^1.0.4":
5159 5207 "integrity" "sha512-rRjALGNh9zVqvweg1j5OKIQKNsw3bLC+7qwlnead5K/9cb1cEIAGkwikt/09U0K+2IDWGD9CC6SP7tHAjUeqvQ=="
5160 5208 "resolved" "https://registry.npmmirror.com/qrcode-reader/-/qrcode-reader-1.0.4.tgz"
... ... @@ -5326,6 +5374,13 @@
5326 5374 optionalDependencies:
5327 5375 "fsevents" "~2.3.2"
5328 5376  
  5377 +"rtcpeerconnection-shim@^1.2.15":
  5378 + "integrity" "sha512-C6DxhXt7bssQ1nHb154lqeL0SXz5Dx4RczXZu2Aa/L1NJFnEVDxFwCBo3fqtuljhHIGceg5JKBV4XJ0gW5JKyw=="
  5379 + "resolved" "https://registry.npmmirror.com/rtcpeerconnection-shim/-/rtcpeerconnection-shim-1.2.15.tgz"
  5380 + "version" "1.2.15"
  5381 + dependencies:
  5382 + "sdp" "^2.6.0"
  5383 +
5329 5384 "run-parallel@^1.1.9":
5330 5385 "integrity" "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA=="
5331 5386 "resolved" "https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz"
... ... @@ -5386,6 +5441,11 @@
5386 5441 "ajv" "^6.12.5"
5387 5442 "ajv-keywords" "^3.5.2"
5388 5443  
  5444 +"sdp@^2.12.0", "sdp@^2.6.0":
  5445 + "integrity" "sha512-jhXqQAQVM+8Xj5EjJGVweuEzgtGWb3tmEEpl3CLP3cStInSbVHSg0QWOGQzNq8pSID4JkpeV2mPqlMDLrm0/Vw=="
  5446 + "resolved" "https://registry.npmmirror.com/sdp/-/sdp-2.12.0.tgz"
  5447 + "version" "2.12.0"
  5448 +
5389 5449 "select@^1.1.2":
5390 5450 "integrity" "sha512-OwpTSOfy6xSs1+pwcNrv0RBMOzI39Lp3qQKUTPVVPRjCdNa5JH/oPRiqsesIskK8TVgmRiHwO4KXlV2Li9dANA=="
5391 5451 "resolved" "https://registry.npmmirror.com/select/-/select-1.1.2.tgz"
... ... @@ -5744,6 +5804,11 @@
5744 5804 dependencies:
5745 5805 "punycode" "^2.1.1"
5746 5806  
  5807 +"ts-custom-error@^3.0.0":
  5808 + "integrity" "sha512-5OX1tzOjxWEgsr/YEUWSuPrQ00deKLh6D7OTWcvNHm12/7QPyRh8SYpyWvA4IZv8H/+GQWQEh/kwo95Q9OVW1A=="
  5809 + "resolved" "https://registry.npmmirror.com/ts-custom-error/-/ts-custom-error-3.3.1.tgz"
  5810 + "version" "3.3.1"
  5811 +
5747 5812 "type-detect@4.0.8":
5748 5813 "integrity" "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g=="
5749 5814 "resolved" "https://registry.npmmirror.com/type-detect/-/type-detect-4.0.8.tgz"
... ... @@ -5876,7 +5941,7 @@
5876 5941 "resolved" "https://registry.npmmirror.com/vary/-/vary-1.1.2.tgz"
5877 5942 "version" "1.1.2"
5878 5943  
5879   -"vite@^4.0.0", "vite@4.0.3":
  5944 +"vite@^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0", "vite@^4.0.0", "vite@4.0.3":
5880 5945 "integrity" "sha512-HvuNv1RdE7deIfQb8mPk51UKjqptO/4RXZ5yXSAvurd5xOckwS/gg8h9Tky3uSbnjYTgUm0hVCet1cyhKd73ZA=="
5881 5946 "resolved" "https://registry.npmmirror.com/vite/-/vite-4.0.3.tgz"
5882 5947 "version" "4.0.3"
... ... @@ -5914,7 +5979,7 @@
5914 5979 dependencies:
5915 5980 "@vue/devtools-api" "^6.5.0"
5916 5981  
5917   -"vue@^2.0.0 || >=3.0.0", "vue@^2.6.14 || ^3.2.0", "vue@^3.0.0", "vue@^3.0.0-0 || ^2.6.0", "vue@^3.2.0", "vue@^3.2.25", "vue@^3.2.45", "vue@3.2.47":
  5982 +"vue@^2.0.0 || >=3.0.0", "vue@^2.6.14 || ^3.2.0", "vue@^3", "vue@^3.0.0", "vue@^3.0.0-0 || ^2.6.0", "vue@^3.2.0", "vue@^3.2.25", "vue@^3.2.45", "vue@3.2.47":
5918 5983 "integrity" "sha512-60188y/9Dc9WVrAZeUVSDxRQOZ+z+y5nO2ts9jWXSTkMvayiWxCWOWtBQoYjLeccfXkiiPZWAHcV+WTPhkqJHQ=="
5919 5984 "resolved" "https://registry.npmmirror.com/vue/-/vue-3.2.47.tgz"
5920 5985 "version" "3.2.47"
... ... @@ -5925,6 +5990,13 @@
5925 5990 "@vue/server-renderer" "3.2.47"
5926 5991 "@vue/shared" "3.2.47"
5927 5992  
  5993 +"vue3-qr-reader@^1.0.0":
  5994 + "integrity" "sha512-BRgmR+lDPkNwgL6skSaEOGFg4Aup/FLYnOGFCV0knYHxfbAnliJN/+wr//iqD2G3EOBrXw4TPGNfj/5Wxl7wwQ=="
  5995 + "resolved" "https://registry.npmmirror.com/vue3-qr-reader/-/vue3-qr-reader-1.0.0.tgz"
  5996 + "version" "1.0.0"
  5997 + dependencies:
  5998 + "jsqr" "^1.4.0"
  5999 +
5928 6000 "w3c-hr-time@^1.0.2":
5929 6001 "integrity" "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ=="
5930 6002 "resolved" "https://registry.npmmirror.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz"
... ... @@ -5999,6 +6071,14 @@
5999 6071 "watchpack" "^2.4.0"
6000 6072 "webpack-sources" "^3.2.3"
6001 6073  
  6074 +"webrtc-adapter@^7":
  6075 + "integrity" "sha512-TbrbBmiQBL9n0/5bvDdORc6ZfRY/Z7JnEj+EYOD1ghseZdpJ+nF2yx14k3LgQKc7JZnG7HAcL+zHnY25So9d7A=="
  6076 + "resolved" "https://registry.npmmirror.com/webrtc-adapter/-/webrtc-adapter-7.7.1.tgz"
  6077 + "version" "7.7.1"
  6078 + dependencies:
  6079 + "rtcpeerconnection-shim" "^1.2.15"
  6080 + "sdp" "^2.12.0"
  6081 +
6002 6082 "whatwg-encoding@^1.0.5":
6003 6083 "integrity" "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw=="
6004 6084 "resolved" "https://registry.npmmirror.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz"
... ...