xiebaomin 1 년 전
부모
커밋
dda72ae0ee
37개의 변경된 파일662개의 추가작업 그리고 238개의 파일을 삭제
  1. 204 20
      package-lock.json
  2. 2 0
      package.json
  3. BIN
      public/favicon.ico
  4. BIN
      public/favicon.png
  5. 2 1
      public/index.html
  6. BIN
      src/assets/card-bg.png
  7. BIN
      src/assets/card-logo.png
  8. BIN
      src/assets/favicon.png
  9. 41 0
      src/components/distri-logo.vue
  10. 16 1
      src/components/field-image-code.vue
  11. 27 10
      src/components/mine-card.vue
  12. 3 1
      src/components/order-goods-info.vue
  13. 0 1
      src/components/order-report-card.vue
  14. 6 1
      src/components/order-report-search.vue
  15. 151 114
      src/components/poster.vue
  16. 1 0
      src/components/share-popup.vue
  17. 53 29
      src/config/index.js
  18. 10 5
      src/plugin/jsSdk.js
  19. 0 4
      src/util/http.js
  20. 1 1
      src/views/goods-information/index.vue
  21. 4 1
      src/views/ins-intention-report/add.vue
  22. 22 9
      src/views/ins-intention-report/components/report-tips.vue
  23. 18 1
      src/views/ins-intention-report/detail.vue
  24. 4 4
      src/views/ins-intention-report/index.vue
  25. 13 3
      src/views/ins-intention-report/intention-confirm.vue
  26. 8 0
      src/views/login/account-settings.vue
  27. 10 2
      src/views/login/login.vue
  28. 9 1
      src/views/login/pwlogin.vue
  29. 1 0
      src/views/mine-card/save-card.vue
  30. 21 12
      src/views/mine/index.vue
  31. 4 4
      src/views/order-list/index.vue
  32. 5 2
      src/views/order-list/order-detail.vue
  33. 3 0
      src/views/order-sales/index.vue
  34. 11 3
      src/views/share/index.vue
  35. 10 6
      src/views/shopping-mall/components/goods-classification.vue
  36. 1 1
      src/views/shopping-mall/components/goods-sku.vue
  37. 1 1
      src/views/shopping-mall/detail.vue

+ 204 - 20
package-lock.json

@@ -10,6 +10,7 @@
       "dependencies": {
         "axios": "^1.5.0",
         "core-js": "^3.6.5",
+        "crypto-js": "^4.1.1",
         "element-ui": "^2.15.14",
         "html2canvas": "^1.4.1",
         "js-cookie": "^3.0.5",
@@ -18,6 +19,7 @@
         "sass": "^1.68.0",
         "vant": "^2.13.0",
         "vue": "^2.6.11",
+        "vue-qr": "^4.0.9",
         "vue-router": "^3.2.0",
         "vue-scroller": "^2.2.4",
         "vuex": "^3.4.0",
@@ -3805,8 +3807,7 @@
     "node_modules/balanced-match": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
-      "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
-      "dev": true
+      "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
     },
     "node_modules/base": {
       "version": "0.11.2",
@@ -5486,6 +5487,11 @@
         "node": "*"
       }
     },
+    "node_modules/crypto-js": {
+      "version": "4.1.1",
+      "resolved": "https://registry.npmmirror.com/crypto-js/-/crypto-js-4.1.1.tgz",
+      "integrity": "sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw=="
+    },
     "node_modules/css-color-names": {
       "version": "0.0.4",
       "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz",
@@ -5831,6 +5837,17 @@
         "node": ">=0.10"
       }
     },
+    "node_modules/decompress-response": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmmirror.com/decompress-response/-/decompress-response-6.0.0.tgz",
+      "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==",
+      "dependencies": {
+        "mimic-response": "^3.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
     "node_modules/deep-equal": {
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz",
@@ -8025,8 +8042,7 @@
     "node_modules/fs.realpath": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
-      "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
-      "dev": true
+      "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
     },
     "node_modules/fsevents": {
       "version": "2.3.3",
@@ -9047,7 +9063,6 @@
       "version": "1.0.6",
       "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
       "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
-      "dev": true,
       "dependencies": {
         "once": "^1.3.0",
         "wrappy": "1"
@@ -9056,8 +9071,7 @@
     "node_modules/inherits": {
       "version": "2.0.4",
       "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
-      "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
-      "dev": true
+      "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
     },
     "node_modules/inquirer": {
       "version": "7.3.3",
@@ -9766,6 +9780,11 @@
       "integrity": "sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg==",
       "dev": true
     },
+    "node_modules/js-binary-schema-parser": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmmirror.com/js-binary-schema-parser/-/js-binary-schema-parser-2.0.3.tgz",
+      "integrity": "sha512-xezGJmOb4lk/M1ZZLTR/jaBHQ4gG/lqQnJqdIv4721DMggsa1bDVlHXNeHYogaIEHD9vCRv0fcL4hMA+Coarkg=="
+    },
     "node_modules/js-cookie": {
       "version": "3.0.5",
       "resolved": "https://registry.npmmirror.com/js-cookie/-/js-cookie-3.0.5.tgz",
@@ -10446,6 +10465,14 @@
         "node": ">=6"
       }
     },
+    "node_modules/mimic-response": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmmirror.com/mimic-response/-/mimic-response-3.1.0.tgz",
+      "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==",
+      "engines": {
+        "node": ">=10"
+      }
+    },
     "node_modules/mini-css-extract-plugin": {
       "version": "0.9.0",
       "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.9.0.tgz",
@@ -11169,7 +11196,6 @@
       "version": "1.4.0",
       "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
       "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
-      "dev": true,
       "dependencies": {
         "wrappy": "1"
       }
@@ -11469,6 +11495,11 @@
         "node": ">=6"
       }
     },
+    "node_modules/parenthesis": {
+      "version": "3.1.8",
+      "resolved": "https://registry.npmmirror.com/parenthesis/-/parenthesis-3.1.8.tgz",
+      "integrity": "sha512-KF/U8tk54BgQewkJPvB4s/US3VQY68BRDpH638+7O/n58TpnwiwnOtGIOsT2/i+M78s61BBpeC83STB88d8sqw=="
+    },
     "node_modules/parse-asn1": {
       "version": "5.1.6",
       "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz",
@@ -13649,6 +13680,21 @@
       "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
       "dev": true
     },
+    "node_modules/simple-concat": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/simple-concat/-/simple-concat-1.0.1.tgz",
+      "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q=="
+    },
+    "node_modules/simple-get": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmmirror.com/simple-get/-/simple-get-4.0.1.tgz",
+      "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==",
+      "dependencies": {
+        "decompress-response": "^6.0.0",
+        "once": "^1.3.1",
+        "simple-concat": "^1.0.0"
+      }
+    },
     "node_modules/simple-swizzle": {
       "version": "0.2.2",
       "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
@@ -14321,6 +14367,14 @@
         "safe-buffer": "~5.2.0"
       }
     },
+    "node_modules/string-split-by": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/string-split-by/-/string-split-by-1.0.0.tgz",
+      "integrity": "sha512-KaJKY+hfpzNyet/emP81PJA9hTVSfxNLS9SFTWxdCnnW1/zOOwiV248+EfoX7IQFcBaOp4G5YE6xTJMF+pLg6A==",
+      "dependencies": {
+        "parenthesis": "^3.1.5"
+      }
+    },
     "node_modules/string-width": {
       "version": "4.2.3",
       "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
@@ -15967,6 +16021,51 @@
         "node": ">=4.0.0"
       }
     },
+    "node_modules/vue-qr": {
+      "version": "4.0.9",
+      "resolved": "https://registry.npmmirror.com/vue-qr/-/vue-qr-4.0.9.tgz",
+      "integrity": "sha512-pAISV94T0MNEYA3NGjykUpsXRE2QfaNxlu9ZhEL6CERgqNc21hJYuP3hRVzAWfBQlgO18DPmZTbrFerJC3+Ikw==",
+      "dependencies": {
+        "glob": "^8.0.1",
+        "js-binary-schema-parser": "^2.0.2",
+        "simple-get": "^4.0.1",
+        "string-split-by": "^1.0.0"
+      }
+    },
+    "node_modules/vue-qr/node_modules/brace-expansion": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz",
+      "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+      "dependencies": {
+        "balanced-match": "^1.0.0"
+      }
+    },
+    "node_modules/vue-qr/node_modules/glob": {
+      "version": "8.1.0",
+      "resolved": "https://registry.npmmirror.com/glob/-/glob-8.1.0.tgz",
+      "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
+      "dependencies": {
+        "fs.realpath": "^1.0.0",
+        "inflight": "^1.0.4",
+        "inherits": "2",
+        "minimatch": "^5.0.1",
+        "once": "^1.3.0"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/vue-qr/node_modules/minimatch": {
+      "version": "5.1.6",
+      "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-5.1.6.tgz",
+      "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
+      "dependencies": {
+        "brace-expansion": "^2.0.1"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
     "node_modules/vue-router": {
       "version": "3.6.5",
       "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-3.6.5.tgz",
@@ -17109,8 +17208,7 @@
     "node_modules/wrappy": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
-      "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
-      "dev": true
+      "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
     },
     "node_modules/write": {
       "version": "1.0.3",
@@ -20187,8 +20285,7 @@
     "balanced-match": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
-      "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
-      "dev": true
+      "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
     },
     "base": {
       "version": "0.11.2",
@@ -21554,6 +21651,11 @@
         "randomfill": "^1.0.3"
       }
     },
+    "crypto-js": {
+      "version": "4.1.1",
+      "resolved": "https://registry.npmmirror.com/crypto-js/-/crypto-js-4.1.1.tgz",
+      "integrity": "sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw=="
+    },
     "css-color-names": {
       "version": "0.0.4",
       "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz",
@@ -21819,6 +21921,14 @@
       "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==",
       "dev": true
     },
+    "decompress-response": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmmirror.com/decompress-response/-/decompress-response-6.0.0.tgz",
+      "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==",
+      "requires": {
+        "mimic-response": "^3.1.0"
+      }
+    },
     "deep-equal": {
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz",
@@ -23555,8 +23665,7 @@
     "fs.realpath": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
-      "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
-      "dev": true
+      "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
     },
     "fsevents": {
       "version": "2.3.3",
@@ -24330,7 +24439,6 @@
       "version": "1.0.6",
       "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
       "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
-      "dev": true,
       "requires": {
         "once": "^1.3.0",
         "wrappy": "1"
@@ -24339,8 +24447,7 @@
     "inherits": {
       "version": "2.0.4",
       "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
-      "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
-      "dev": true
+      "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
     },
     "inquirer": {
       "version": "7.3.3",
@@ -24857,6 +24964,11 @@
       "integrity": "sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg==",
       "dev": true
     },
+    "js-binary-schema-parser": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmmirror.com/js-binary-schema-parser/-/js-binary-schema-parser-2.0.3.tgz",
+      "integrity": "sha512-xezGJmOb4lk/M1ZZLTR/jaBHQ4gG/lqQnJqdIv4721DMggsa1bDVlHXNeHYogaIEHD9vCRv0fcL4hMA+Coarkg=="
+    },
     "js-cookie": {
       "version": "3.0.5",
       "resolved": "https://registry.npmmirror.com/js-cookie/-/js-cookie-3.0.5.tgz",
@@ -25411,6 +25523,11 @@
       "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
       "dev": true
     },
+    "mimic-response": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmmirror.com/mimic-response/-/mimic-response-3.1.0.tgz",
+      "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ=="
+    },
     "mini-css-extract-plugin": {
       "version": "0.9.0",
       "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.9.0.tgz",
@@ -25991,7 +26108,6 @@
       "version": "1.4.0",
       "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
       "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
-      "dev": true,
       "requires": {
         "wrappy": "1"
       }
@@ -26224,6 +26340,11 @@
         }
       }
     },
+    "parenthesis": {
+      "version": "3.1.8",
+      "resolved": "https://registry.npmmirror.com/parenthesis/-/parenthesis-3.1.8.tgz",
+      "integrity": "sha512-KF/U8tk54BgQewkJPvB4s/US3VQY68BRDpH638+7O/n58TpnwiwnOtGIOsT2/i+M78s61BBpeC83STB88d8sqw=="
+    },
     "parse-asn1": {
       "version": "5.1.6",
       "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz",
@@ -28034,6 +28155,21 @@
       "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
       "dev": true
     },
+    "simple-concat": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/simple-concat/-/simple-concat-1.0.1.tgz",
+      "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q=="
+    },
+    "simple-get": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmmirror.com/simple-get/-/simple-get-4.0.1.tgz",
+      "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==",
+      "requires": {
+        "decompress-response": "^6.0.0",
+        "once": "^1.3.1",
+        "simple-concat": "^1.0.0"
+      }
+    },
     "simple-swizzle": {
       "version": "0.2.2",
       "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
@@ -28606,6 +28742,14 @@
         "safe-buffer": "~5.2.0"
       }
     },
+    "string-split-by": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/string-split-by/-/string-split-by-1.0.0.tgz",
+      "integrity": "sha512-KaJKY+hfpzNyet/emP81PJA9hTVSfxNLS9SFTWxdCnnW1/zOOwiV248+EfoX7IQFcBaOp4G5YE6xTJMF+pLg6A==",
+      "requires": {
+        "parenthesis": "^3.1.5"
+      }
+    },
     "string-width": {
       "version": "4.2.3",
       "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
@@ -29926,6 +30070,47 @@
         }
       }
     },
+    "vue-qr": {
+      "version": "4.0.9",
+      "resolved": "https://registry.npmmirror.com/vue-qr/-/vue-qr-4.0.9.tgz",
+      "integrity": "sha512-pAISV94T0MNEYA3NGjykUpsXRE2QfaNxlu9ZhEL6CERgqNc21hJYuP3hRVzAWfBQlgO18DPmZTbrFerJC3+Ikw==",
+      "requires": {
+        "glob": "^8.0.1",
+        "js-binary-schema-parser": "^2.0.2",
+        "simple-get": "^4.0.1",
+        "string-split-by": "^1.0.0"
+      },
+      "dependencies": {
+        "brace-expansion": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz",
+          "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+          "requires": {
+            "balanced-match": "^1.0.0"
+          }
+        },
+        "glob": {
+          "version": "8.1.0",
+          "resolved": "https://registry.npmmirror.com/glob/-/glob-8.1.0.tgz",
+          "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
+          "requires": {
+            "fs.realpath": "^1.0.0",
+            "inflight": "^1.0.4",
+            "inherits": "2",
+            "minimatch": "^5.0.1",
+            "once": "^1.3.0"
+          }
+        },
+        "minimatch": {
+          "version": "5.1.6",
+          "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-5.1.6.tgz",
+          "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
+          "requires": {
+            "brace-expansion": "^2.0.1"
+          }
+        }
+      }
+    },
     "vue-router": {
       "version": "3.6.5",
       "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-3.6.5.tgz",
@@ -30815,8 +31000,7 @@
     "wrappy": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
-      "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
-      "dev": true
+      "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
     },
     "write": {
       "version": "1.0.3",

+ 2 - 0
package.json

@@ -11,6 +11,7 @@
   "dependencies": {
     "axios": "^1.5.0",
     "core-js": "^3.6.5",
+    "crypto-js": "^4.1.1",
     "element-ui": "^2.15.14",
     "html2canvas": "^1.4.1",
     "js-cookie": "^3.0.5",
@@ -19,6 +20,7 @@
     "sass": "^1.68.0",
     "vant": "^2.13.0",
     "vue": "^2.6.11",
+    "vue-qr": "^4.0.9",
     "vue-router": "^3.2.0",
     "vue-scroller": "^2.2.4",
     "vuex": "^3.4.0",

BIN
public/favicon.ico


BIN
public/favicon.png


+ 2 - 1
public/index.html

@@ -4,8 +4,9 @@
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge">
     <meta name="referrer" content="never">
+    <meta name="referrer" content="no-referrer">
     <meta name="viewport" content="width=device-width,initial-scale=1.0">
-    <link rel="icon" href="<%= BASE_URL %>favicon.ico">
+    <link rel="icon" href="<%= BASE_URL %>favicon.png">
     <title><%= htmlWebpackPlugin.options.title %></title>
     <script src="https://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script>
   </head>

BIN
src/assets/card-bg.png


BIN
src/assets/card-logo.png


BIN
src/assets/favicon.png


+ 41 - 0
src/components/distri-logo.vue

@@ -0,0 +1,41 @@
+<template>
+  <div class="main">
+    <div>
+      <vue-qr
+        :text="codeText"
+        :size="50"
+        :margin="5"
+        colorDark="#333"
+        backgroundColor="#fff"
+        :logoSrc="lgoImg"
+        logoScale="0.2"
+        logoMargin="100"
+        :callback="getCode"
+      ></vue-qr>
+    </div>
+  </div>
+</template>
+
+<script>
+import VueQr from 'vue-qr'
+export default {
+  name: 'QR',
+  components: { VueQr },
+  props: {
+    codeText: {
+      type: String,
+      default: () => ''
+    }
+  },
+  data () {
+    return {
+      lgoImg: require('@/assets/favicon.png')
+    }
+  },
+  methods: {
+    getCode (codeImg) {
+      console.log('二维码图片', codeImg)
+    }
+  }
+}
+</script>

+ 16 - 1
src/components/field-image-code.vue

@@ -1,5 +1,5 @@
 <template>
-  <div>
+  <div class="filed">
     <van-field
       placeholder="请输入短信验证码"
       :rules="[{ validator: validatorVerification, message: '请输入6位数验证码' }]"
@@ -142,6 +142,21 @@ export default {
   padding: 3.5vw 4vw;
   box-sizing: border-box;
 }
+.filed {
+  position: relative;
+  &::after {
+    position: absolute;
+    box-sizing: border-box;
+    content: ' ';
+    pointer-events: none;
+    right: 16px;
+    bottom: 0;
+    left: 16px;
+    border-bottom: 1px solid #ebedf0;
+    -webkit-transform: scaleY(.5);
+    transform: scaleY(.5);
+}
+}
 .img-refresh {
   width: 100%;
   margin: 2.7vw 0;

+ 27 - 10
src/components/mine-card.vue

@@ -5,7 +5,7 @@
   >
     <div class="logo">
       <van-image
-        src="https://static.caimei365.com/app/img/icon/logo-fanbai.png"
+        src="https://static.caimei365.com/app/mini-distribution/card-logo.png"
         mode=""
         class="titleImgUrl"
       ></van-image>
@@ -30,12 +30,14 @@
             </div>
             <div class="card-info-tab">客户经理</div>
           </div>
-          <div class="card-info-iphone">
-            {{
-              userInfo.mobile
-                ? userInfo.mobile.replace(/(?=(\d{4})+$)/g, "-")
-                : ""
-            }}
+          <div>
+            <div class="card-info-iphone">
+              {{
+                userInfo.mobile
+                  ? userInfo.mobile.replace(/(?=(\d{4})+$)/g, "-")
+                  : ""
+              }}
+            </div>
           </div>
         </div>
       </div>
@@ -43,7 +45,7 @@
         <div class="qrcode-message">
           <van-image :src="userInfo.qrCode || ''" class="qrcode" mode=""></van-image>
         </div>
-        <div class="tips">长按或扫二维码—-联系我-—</div>
+        <div class="tips">长按或扫二维码<br />联系我</div>
       </div>
     </div>
   </div>
@@ -74,7 +76,7 @@ export default {
   opacity: 1;
   margin: 0 auto;
   box-sizing: border-box;
-  padding: 6.5vw 3.2vw;
+  padding: 3.2vw 4.3vw;
   .titleImgUrl {
     width: 32.8vw;
     height: 8.8vw;
@@ -83,14 +85,26 @@ export default {
     display: flex;
     align-items: center;
     justify-content: space-between;
+    margin-top: 3.5vw;
     .head {
       width: 17.1vw;
       height: 17.1vw;
       border-radius: 50%;
       object-fit: contain;
+      overflow: hidden;
+      overflow: hidden;
+      padding: 1vw;
+      box-sizing: border-box;
+      background: rgba(255, 255, 255, 0.2);
+      ::v-deep .van-image__img {
+        border-radius: 50%;
+      }
     }
     .card-info {
       margin-left: 4vw;
+      display: flex;
+      flex-direction: column;
+      justify-content: center;
     }
     .card-info-head {
       display: flex;
@@ -109,6 +123,9 @@ export default {
         font-size: 2.9vw;
         padding: 0 1vw;
         margin-left: 1.3vw;
+        border-radius: 0.8vw;
+        text-align: center;
+        line-height: 4.6vw;
       }
     }
     .card-info-iphone {
@@ -126,7 +143,7 @@ export default {
         margin-bottom: 0.8vw;
       }
       .tips {
-        font-size: 1vw;
+        font-size: 2.6vw;
         color: #fff;
         text-align: center;
         width: 22.8vw;

+ 3 - 1
src/components/order-goods-info.vue

@@ -63,13 +63,15 @@ export default {
 }
 .order-content {
   @include display-flex-between;
+  align-items: flex-start;
   margin-bottom: 5.3vw;
   ::v-deep .van-image {
     width: 24vw;
     height: 24vw;
     border-radius: 1.1vw;
     margin-right: 3.3vw;
-    border: 1px dotted #ccc;
+    border: 1px solid #ccc;
+    overflow: hidden;
   }
   .goods-info {
     width: calc(100% - 24vw);

+ 0 - 1
src/components/order-report-card.vue

@@ -94,7 +94,6 @@ export default {
         width: 17.1vw;
         height: 17.1vw;
         border-radius: 0.5vw;
-        border: 1px solid #ccc;
         margin-right: 3.2vw;
       }
       .content {

+ 6 - 1
src/components/order-report-search.vue

@@ -32,10 +32,15 @@ export default {
 .van-form {
   background: #fff;
 }
+::v-deep .van-cell {
+  &::after {
+    display: none;
+  }
+}
 ::v-deep .van-field__control {
   font-size: 3.7vw;
   color: #B2B2B2;
-  border: 1px solid #B2B2B2;
+  border: 1px solid #E4E4E4;
   border-radius: 1vw;
   padding: 3.3vw;
 }

+ 151 - 114
src/components/poster.vue

@@ -2,39 +2,47 @@
   <div class="poster">
     <van-overlay :show="show" @click="show = false, showPoster = false" class="overlay">
       <div class="wrapper">
-        <img :src="link" style="width: 76vw;
-        height: 124vw;
+        <img :src="link" style="width: 71vw;
+        height: 128vw;
         margin-top: 10vw;" alt="">
       </div>
     </van-overlay>
     <van-share-sheet class="sheet" v-model="showPoster" :options="options" @select="onSelect" :overlay="false" />
-    <div id="poster" ref="poster">
+    <div id="poster" ref="poster" :style="{ background: `url(${bgImg})` }">
       <div class="poster-img">
         <div class="title">
           <div class="title-image">
-            <van-image src="" width="100%" height="100%"></van-image>
+            <img src="" width="100%" height="100%" />
             <div class="text">
               <div class="name">{{ dataInfo.name }}</div>
-              <van-image src=""></van-image>
+              <distri-logo :codeText="codeText"/>
             </div>
           </div>
         </div>
-        <div class="card">
-          <div class="card-mine" :style="{
-            backgroundImage: `url(${imgUrl})`,
-            backgroundSize: '100% 100%',
-          }">
+        <div
+          class="card"
+          :style="{ background: `url(${cardImg})` }"
+        >
             <div class="logo">
-              <img src="https://static.caimei365.com/app/img/icon/logo-fanbai.png" mode="" class="titleImgUrl"
-                cross>
+              <img
+                :src="require('@/assets/card-logo.png')"
+                mode=""
+                class="titleImgUrl"
+                crossorigin="anonymous"
+              />
             </div>
             <div class="card-contain">
               <div style="display: flex">
                 <div class="card-head">
-                  <img ref="head" crossorigin="anonymous" :src="userInfo.image && userInfo.image.length > 12
-                      ? userInfo.image
-                      : 'https://static.caimei365.com/app/img/icon/default-head-new.png'
-                    " mode="" class="head">
+                  <img
+                    :src="
+                      (userInfo.image && userInfo.image.length > 12)
+                        ? userImg
+                        : 'https://static.caimei365.com/app/img/icon/default-head-new.png'
+                    "
+                    style="border-radius: 50%; object-fit: cover;"
+                    id="head"
+                  />
                 </div>
                 <div class="card-info">
                   <div class="card-info-head">
@@ -43,24 +51,25 @@
                     </div>
                     <div class="card-info-tab">客户经理</div>
                   </div>
-                  <div class="card-info-iphone">
-                    {{
-                      userInfo.mobile
-                      ? userInfo.mobile.replace(/(?=(\d{4})+$)/g, "-")
-                      : ""
-                    }}
+                  <div>
+                    <div class="card-info-iphone">
+                      {{
+                        userInfo.mobile
+                          ? userInfo.mobile.replace(/(?=(\d{4})+$)/g, "-")
+                          : ""
+                      }}
+                    </div>
                   </div>
                 </div>
               </div>
               <div class="card-qrcode">
                 <div class="qrcode-message">
-                  <img :src="userInfo.qrCode || ''" class="qrcode" mode="">
+                  <img :src="qrImg || ''" class="qrcode" mode=""/>
                 </div>
-                <div class="tips">长按或扫二维码—-联系我-—</div>
+                <div class="tips">长按或扫二维码<br />联系我</div>
               </div>
             </div>
           </div>
-        </div>
       </div>
     </div>
   </div>
@@ -87,6 +96,7 @@ export default {
       show: false,
       showPoster: false,
       imgUrl: 'https://static.caimei365.com/app/img/icon/bg-card.png',
+      bgUrl: 'https://static.caimei365.com/app/img/icon/bgImage.png',
       options: [
         { name: '微信', icon: 'wechat', id: 0 },
         {
@@ -95,7 +105,31 @@ export default {
           id: 1
         }
       ],
-      link: ''
+      link: '',
+      userImg: '',
+      qrImg: '',
+      cardImg: '',
+      bgImg: ''
+    }
+  },
+  computed: {
+    productId () {
+      return this.$route.query.productId
+    },
+    typeId () {
+      return this.$route.query.typeId
+    },
+    isLock () {
+      return this.$route.query.isLock
+    },
+    suid () {
+      return this.$route.query.suid * 1
+    },
+    cId () {
+      return this.$route.query.cId
+    },
+    codeText () {
+      return `https://sell-b.caimei365.com/#/goods-detail?productId=${this.productId}&typeId=0&suid=${this.$store.getters.userId}&isIns=1`
     }
   },
   watch: {
@@ -109,9 +143,14 @@ export default {
     userInfo: {
       async handler (val) {
         if (val) {
-          console.log(val)
-          const data = await getBase64Image(this.$refs.head)
-          console.log(data)
+          const data1 = await getBase64Image(val.image)
+          const data2 = await getBase64Image(val.qrCode)
+          const data3 = await getBase64Image(this.imgUrl)
+          const data4 = await getBase64Image(this.bgUrl)
+          this.userImg = data1
+          this.qrImg = data2
+          this.cardImg = data3
+          this.bgImg = data4
         }
       },
       deep: true
@@ -122,13 +161,12 @@ export default {
       Toast.success('请长按图片分享好友或保存到本地')
       this.showPoster = false
     },
-    getPosterImageUrl () {
+    async getPosterImageUrl () {
       const html = this.$refs.poster
       console.log('html: ' + html)
-      html2Canvas(html, { width: html.clientWidth, height: html.clientHeight, useCORS: true, allowTaint: true }).then(canvas => {
+      html2Canvas(html, { width: html.clientWidth, height: html.clientHeight, useCORS: true, allowTaint: true, dpi: 300 }).then(canvas => {
         console.log(canvas)
-        this.link = canvas.toDataURL('image/jpg')
-        // console.log('link: ' + this.link)
+        this.link = canvas.toDataURL('image/png')
       })
     }
   }
@@ -149,16 +187,15 @@ export default {
 }
 
 #poster {
-  position: absolute;
-  left: -9999px;
-  top: -9999px;
+  // position: absolute;
+  // left: -9999px;
+  // top: -9999px;
   margin-top: 10vw;
-  width: 76vw;
-  height: 124vw;
-  background: url("https://static.caimei365.com/app/img/icon/bgImage.png") 100%;
+  width: 71vw;
+  height: 127vw;
   padding: 2vw;
   box-sizing: border-box;
-
+  background-size: 100% 100% !important;
   .poster-img {
     overflow: hidden;
     border-radius: 1.2vw;
@@ -166,7 +203,7 @@ export default {
 
     .title {
       width: 100%;
-      height: 72%;
+      height: 70%;
       background: #fff;
       box-sizing: border-box;
       border-radius: 1.1vw;
@@ -197,85 +234,85 @@ export default {
     }
 
     .card {
-      margin-top: 2vw;
-
-      .card-mine {
-        width: 100%;
-        height: 28%;
-        background: #ff5b00;
-        border-radius: 2.1vw;
-        opacity: 1;
-        box-sizing: border-box;
-        padding: 2vw 3vw;
-
-        .titleImgUrl {
-          width: 22vw;
-          height: 6vw;
+      width: 66.7vw;
+      height: 30%;
+      border-radius: 1.1vw;
+      opacity: 1;
+      margin: 3vw auto 0 auto;
+      box-sizing: border-box;
+      padding: 2.4vw 4.3vw;
+      background-size: 100% 100% !important;
+      .titleImgUrl {
+        width: 23vw;
+        height: 6vw;
+      }
+      .card-contain {
+        display: flex;
+        align-items: center;
+        justify-content: space-between;
+        margin-top: 4vw;
+        .card-head {
+          overflow: hidden;
+          border-radius: 50%;
         }
-
-        .card-contain {
+        #head {
+          width: 12vw;
+          height: 12vw;
+          border-radius: 50%;
+          object-fit: contain;
+          overflow: hidden;
+          box-sizing: border-box;
+          background: rgba(255, 255, 255, 0.2);
+          object-fit: cover;
+        }
+        .card-info {
+          margin-left: 2.8vw;
+          display: flex;
+          flex-direction: column;
+          justify-content: center;
+        }
+        .card-info-head {
           display: flex;
           align-items: center;
-          justify-content: space-between;
-
-          .head {
-            width: 12vw;
-            height: 12vw;
-            border-radius: 50%;
-            object-fit: contain;
-          }
-
-          .card-info {
-            margin-left: 2.2vw;
+          margin-bottom: 1.7vw;
+          .card-name {
+            color: #ffffff;
+            font-size: 3.7vw;
+            font-weight: bold;
           }
-
-          .card-info-head {
-            display: flex;
-            align-items: center;
-            margin-bottom: 1.7vw;
-
-            .card-name {
-              color: #ffffff;
-              font-size: 3.2vw;
-              font-weight: bold;
-            }
-
-            .card-info-tab {
-              width: 15vw;
-              background-color: #ffbb00;
-              color: #fff;
-              padding: 0.5vw;
-              font-size: 3.2vw;
-              margin-left: 1.5vw;
-              text-align: center;
-              border-radius: 1.2vw;
-            }
+          .card-info-tab {
+            width: 10vw;
+            height: 3.2vw;
+            background-color: #ffbb00;
+            color: #fff;
+            font-size: 2.1vw;
+            padding: 0.5vw;
+            margin-left: 2vw;
+            border-radius: 0.5vw;
+            text-align: center;
+            line-height: 3.2vw;
           }
-
-          .card-info-iphone {
-            color: #ffffff;
-            font-size: 3.2vw;
+        }
+        .card-info-iphone {
+          color: #ffffff;
+          font-size: 2.7vw;
+        }
+        .card-qrcode {
+          display: flex;
+          flex-direction: column;
+          align-items: center;
+          .qrcode {
+            width: 11.3vw;
+            height: 11.3vw;
+            object-fit: cover;
+            margin-bottom: 0.4vw;
           }
-
-          .card-qrcode {
-            display: flex;
-            flex-direction: column;
-            align-items: center;
-
-            .qrcode {
-              width: 12vw;
-              height: 12vw;
-              object-fit: contain;
-              margin-bottom: 1vw;
-            }
-
-            .tips {
-              font-size: 3vw;
-              color: #fff;
-              text-align: center;
-              width: 23.8vw;
-              line-height: 3.2vw;
-            }
+          .tips {
+            font-size: 1.6vw;
+            color: #fff;
+            text-align: center;
+            width: 11.2vw;
+            line-height: 2.1vw;
           }
         }
       }

+ 1 - 0
src/components/share-popup.vue

@@ -62,6 +62,7 @@ export default {
       const form = {
         0: () => {
           Toast.success('请点击右上角...分享好友')
+          this.showShare = false
         },
         1: () => this.getPoster()
       }

+ 53 - 29
src/config/index.js

@@ -1,36 +1,60 @@
-// export function getBase64Image (src) {
-//  return new Promise(resolve => {
-//    const img = new Image()
+export function getBase64Image (src) {
+  return new Promise((resolve, reject) => {
+    const img = new Image()
+    const canvas = document.createElement('canvas')
+    img.crossOrigin = 'Anonymous'
+    img.src = src + `?t=${Date.now() / 1000}`
+    console.log(img.src)
+    img.onload = function () {
+      canvas.width = img.width
+      canvas.height = img.height
+      const ctx = canvas.getContext('2d')
+      ctx.drawImage(img, 0, 0, img.width, img.height)
+      const ext = img.src.substring(img.src.lastIndexOf('.') + 1).toLowerCase()
+      const dataURL = canvas.toDataURL('image/' + ext)
+      resolve(dataURL)
+    }
+  })
+}
+
+// export function getBase64Image (ref) {
+//  return new Promise((resolve, reject) => {
+//    console.log(ref)
 //    const canvas = document.createElement('canvas')
-//    img.crossOrigin = 'anonymous'
-//    console.log(src)
-//    img.src = src
-//    img.onload = function () {
-//      canvas.width = img.width
-//      canvas.height = img.height
-//      const ctx = canvas.getContext('2d')
-//      ctx.drawImage(img, 0, 0, img.width, img.height)
-//      const ext = img.src.substring(img.src.lastIndexOf('.') + 1).toLowerCase()
-//      const dataURL = canvas.toDataURL('image/' + ext)
-//      resolve(dataURL)
+//    canvas.width = ref.naturalWidth // 使用 naturalWidth 为了保证图片的清晰度
+//    canvas.height = ref.naturalHeight
+//    canvas.style.width = canvas.width
+//    canvas.style.height = canvas.height
+//    const ctx = canvas.getContext('2d')
+//    if (!ctx) {
+//      return null
 //    }
+//    ctx.drawImage(ref, 0, 0)
+//    const base64 = canvas.toDataURL('image/png')
+//    resolve(base64)
 //  })
 // }
 
-export function getBase64Image (ref) {
-  return new Promise((resolve, reject) => {
-    console.log(ref)
-    const canvas = document.createElement('canvas')
-    canvas.width = ref.naturalWidth // 使用 naturalWidth 为了保证图片的清晰度
-    canvas.height = ref.naturalHeight
-    canvas.style.width = canvas.width
-    canvas.style.height = canvas.height
-    const ctx = canvas.getContext('2d')
-    if (!ctx) {
-      return null
+export function getBase64Image2 (src, callback, outputFormat) {
+  var xhr = new XMLHttpRequest()
+  xhr.open('GET', src, true)
+
+  xhr.responseType = 'arraybuffer'
+
+  xhr.onload = function (e) {
+    if (xhr.status === 200) {
+      var uInt8Array = new Uint8Array(xhr.response)
+      var i = uInt8Array.length
+      var binaryString = new Array(i)
+      while (i--) {
+        binaryString[i] = String.fromCharCode(uInt8Array[i])
+      }
+      var data = binaryString.join('')
+      var base64 = window.btoa(data)
+      var dataUrl = 'data:' + (outputFormat || 'image/png') + ';base64,' + base64
+      callback.call(this, dataUrl)
     }
-    ctx.drawImage(ref, 0, 0)
-    const base64 = canvas.toDataURL('image/png')
-    resolve(base64)
-  })
+  }
+
+  xhr.send()
 }

+ 10 - 5
src/plugin/jsSdk.js

@@ -1,20 +1,25 @@
 import Vue from 'vue'
 import { appId } from '@/config/js-config'
 import { shareSDK } from '@/api/userApi/share'
+import SHA1 from 'crypto-js/sha1'
 
 const dev = process.env.NODE_ENV
 
 Vue.prototype.$wxReady = async (callback, apiList = []) => {
   try {
-    const url = 'https://sell-b.caimei365.com/#/shopping-mall'
     // console.log('当前页面地址:', url)
-    const res = await shareSDK({ url: url, appId })
+    const nonceStr = Math.random()
+    const timestamp = Math.floor(Date.now() / 1000)
+    const url = `${location.origin}${location.pathname}${location.search}`
+    const res = await shareSDK({ url: 'http://localhost:8080/#/shopping-mall', appId })
+    const signature = SHA1(`jsapi_ticket=${res.ticket}&noncestr=${nonceStr}&timestamp=${timestamp}&url=${url}`).toString()
+    console.log(nonceStr, timestamp, url, signature)
     wx.config({
       debug: false, // 开启调试模式,调用的所有 api 的返回值会在客户端 alert 出来,若要查看传入的参数,可以在 pc 端打开,参数信息会通过 log 打出,仅在 pc 端时才会打印。
       appId: appId, // 必填,公众号的唯一标识
-      timestamp: res.timestamp, // 必填,生成签名的时间戳
-      nonceStr: res.noncestr, // 必填,生成签名的随机串
-      signature: res.signature, // 必填,签名
+      timestamp: timestamp, // 必填,生成签名的时间戳
+      nonceStr: nonceStr, // 必填,生成签名的随机串
+      signature: signature, // 必填,签名
       jsApiList: ['updateAppMessageShareData', 'updateTimelineShareData'] // 必填,需要使用的 JS 接口列表
     })
     wx.ready(callback(wx))

+ 0 - 4
src/util/http.js

@@ -113,9 +113,6 @@ request.interceptors.response.use(
         message: '加载中...',
         forbidClick: true
       })
-      setTimeout(() => {
-        Toast.clear()
-      }, 1000)
       return Promise.resolve(data)
     }
   },
@@ -124,7 +121,6 @@ request.interceptors.response.use(
     // 对响应错误做点什么
     Toast.fail(error.message)
     Vue.$showLoading = false
-    Toast.clear()
     return Promise.reject(error)
   }
 )

+ 1 - 1
src/views/goods-information/index.vue

@@ -50,7 +50,7 @@ export default {
 <style scoped lang="scss">
 ::v-deep .van-search__content {
   background: #fff;
-  border: 1px solid #B2B2B2;
+  border: 1px solid #E4E4E4;
 }
 .goods_info {
   background: #fff;

+ 4 - 1
src/views/ins-intention-report/add.vue

@@ -1,5 +1,5 @@
 <template>
-  <div>
+  <div class="ins-intention">
     <nav-bar title="添加报备" @click-left="$router.back()" />
     <div class="add-report">
       <van-form @submit="onSubmit">
@@ -102,6 +102,9 @@ export default {
 </script>
 
 <style lang="scss" scoped>
+.ins-intention {
+  position: relative;
+}
 .add-report {
   padding: 8vw 3.2vw 3.2vw 3.2vw;
   background: #fff;

+ 22 - 9
src/views/ins-intention-report/components/report-tips.vue

@@ -3,8 +3,9 @@
     <van-overlay :show="show">
       <div class="wrapper" @click.stop>
         <div class="tips">
+          <img src="https://static.caimei365.com/app/mini-distribution/tips-bg.png" alt="">
           <div class="tips-title">机构意向订单报备说明</div>
-          <div class="tip"></div>
+          <div class="tip">分销员提交意向订单报备且成交后,平台会给予 相应的报备佣金奖励,方法如下:</div>
           <div class="text">1、先提交机构意向订单报备;</div>
           <div class="text">2、平台根据您提交的机构意向订单报备
             信息进行审核,审核通过后,即可对该
@@ -41,24 +42,36 @@ export default {
 
 <style lang="scss" scoped>
 ::v-deep .van-overlay {
-  z-index: 666;
+  z-index: 999999;
+  position: absolute;
+  width: 100%;
+  height: 100%;
 }
 .wrapper {
   display: flex;
   justify-content: center;
   align-items: center;
-  height: 100vh;
   .tips {
-    width: 85.3vw;
-    height: 171.1vw;
+    position: relative;
+    img {
+      width: 100%;
+      position: absolute;
+      z-index: 1;
+      left: 0;
+      top: 0;
+    }
+    div {
+      z-index: 2;
+    }
+    width: 82vw;
     border-radius: 1.2vw;
     box-sizing: border-box;
-    background: url('https://static.caimei365.com/app/mini-distribution/tips-bg.png');
-    background-size: 100% 100%;
-    padding: 8.5vw 5.1vw 5.3vw 5.1vw;
+    background: #fff;
+    padding: 8.5vw 5.1vw 10.3vw 5.1vw;
     display: flex;
     flex-direction: column;
     align-items: center;
+    margin: 30vw auto;
     .tips-title {
       font-size: 4.8vw;
       color: #333;
@@ -68,7 +81,7 @@ export default {
       color: #999;
       font-size: 3.2vw;
       line-height: 5.3vw;
-      margin: 4.3vw 0 5.3vw 0;
+      margin: 4.3vw 0 6.5vw 0;
     }
     .text {
       margin-bottom: 4.3vw;

+ 18 - 1
src/views/ins-intention-report/detail.vue

@@ -45,6 +45,7 @@
 <script>
 import { insIntentionReportDetail } from '@/api/userApi/ins-intention-report'
 import reportStatus from './mixins/index'
+import { Toast } from 'vant'
 export default {
   mixins: [reportStatus],
   data () {
@@ -84,10 +85,26 @@ export default {
       this.resultInfo = data
     },
     shareOrderConfirm () {
-      this.$router.push(`/intention-confirm?id=${this.resultInfo.cmReportingClub.id}`)
+      this.initAppMessageShareData()
+      Toast.success('请点击右上角...分享微信好友')
     },
     handlerPlaceOrder ($event) {
       this.$router.push(`/goods-detail?productId=${$event.productId}&typeId=0&isLock=1&cId=${$event.id}`)
+    },
+    // 分享当前页面
+    initAppMessageShareData () {
+      this.$wxReady((wx) => {
+        // 需在用户可能点击分享按钮前就先调用
+        wx.updateAppMessageShareData({
+          title: '商品详情', // 分享标题
+          desc: '商品详情', // 分享描述
+          link: `https://sell-b.caimei365.com/#/intention-confirm?id=${this.resultInfo.cmReportingClub.id}`, // 分享链接,该链接域名或路径必须与当前页面对应的公众号 JS 安全域名一致
+          imgUrl: 'https://static.caimei365.com/app/mini-distribution/qrcode.png', // 分享图标
+          fail: () => {
+            this.initAppMessageShareData()
+          }
+        })
+      })
     }
   }
 }

+ 4 - 4
src/views/ins-intention-report/index.vue

@@ -122,7 +122,7 @@ export default {
     position: absolute;
     left: 0;
     top: 2vw;
-    padding: 1vw 2.6vw 1vw 3.5vw;
+    padding: 0.5vw 2.6vw 0.5vw 3.5vw;
     font-size: 2.8vw;
     color: #fff;
     line-height: 6.9vw;
@@ -133,9 +133,9 @@ export default {
   }
   .examine {
     @include display-flex-between;
-    font-size: 4vw;
+    font-size: 3.7vw;
     color: #999999;
-    margin-bottom: 8vw;
+    margin-bottom: 6vw;
   }
   .detail-btn {
     width: 100%;
@@ -162,7 +162,7 @@ export default {
   left: 0;
   bottom: 0;
   width: 100%;
-  height: 17.3vw;
+  padding: 2vw 0 7vw 0;
   background: #fff;
   ::v-deep .van-button {
     width: 86.4vw;

+ 13 - 3
src/views/ins-intention-report/intention-confirm.vue

@@ -1,6 +1,6 @@
 <template>
   <div>
-    <nav-bar title="采购意向确认" @click-left="$router.back()" />
+    <!--<nav-bar title="采购意向确认" @click-left="$router.back()" />-->
     <div class="container">
       <div class="user-img">
         <van-image :src="$store.getters.userInfo.image || 'https://static.caimei365.com/app/mini-distribution/default.png'"></van-image>
@@ -14,13 +14,14 @@
         <div>{{ resultInfo.cmReportingClub.distributionProduct.name }}</div>
       </div>
       <van-button color="#FF5B00" @click="insIntentionReportUpdated">接受</van-button>
-      <van-button style="color: #FF5B00;margin-top: 3.5vw;" @click="$router.back()">暂不接受</van-button>
+      <van-button style="color: #FF5B00;margin-top: 3.5vw;" @click="handlerNot">暂不接受</van-button>
     </div>
   </div>
 </template>
 
 <script>
 import { insIntentionReportDetail, insIntentionReportUpdated } from '@/api/userApi/ins-intention-report'
+import { Toast } from 'vant'
 export default {
   data () {
     return {
@@ -43,10 +44,19 @@ export default {
     async insIntentionReportUpdated () {
       try {
         await insIntentionReportUpdated({ id: this.id, distributionId: this.resultInfo.distributionId })
-        this.$router.back()
+        Toast.success('操作成功')
+        setTimeout(function () {
+          WeixinJSBridge.call('closeWindow')
+        }, 1000)
       } catch (error) {
         console.log(error)
       }
+    },
+    handlerNot () {
+      Toast.success('操作成功')
+      setTimeout(function () {
+        WeixinJSBridge.call('closeWindow')
+      }, 1000)
     }
   }
 }

+ 8 - 0
src/views/login/account-settings.vue

@@ -31,4 +31,12 @@ export default {
   min-height: 100vh;
   background: #fff;
 }
+::v-deep .van-cell-group {
+  &::after {
+    border-bottom: 1px solid #ebedf0 !important;
+  }
+}
+::v-deep [class*=van-hairline]::after {
+  border: none;
+}
 </style>

+ 10 - 2
src/views/login/login.vue

@@ -113,8 +113,16 @@ export default {
   }
   .van-form {
     width: 80vw;
-    .van-cell {
-      border-bottom: 1px solid #e1e1e1;
+    ::v-deep .van-cell {
+      border-bottom: 1px solid #E1E1E1;
+      margin-bottom: 12px;
+      padding: 10px 0;
+      .van-field__left-icon {
+        margin-right: 4.3vw;
+        .van-icon {
+          font-size: 5.3vw;
+        }
+      }
     }
   }
   .pwLogin {

+ 9 - 1
src/views/login/pwlogin.vue

@@ -92,8 +92,16 @@ export default {
   }
   .van-form {
     width: 80vw;
-    .van-cell {
+    ::v-deep .van-cell {
       border-bottom: 1px solid #E1E1E1;
+      margin-bottom: 12px;
+      padding: 10px 0;
+      .van-field__left-icon {
+        margin-right: 4.3vw;
+        .van-icon {
+          font-size: 5.3vw;
+        }
+      }
     }
   }
   .pwLogin {

+ 1 - 0
src/views/mine-card/save-card.vue

@@ -32,6 +32,7 @@ export default {
 .mineCard {
   padding-top: 6.5vw;
   background: #fff;
+  min-height: 100vh;
   .tip {
     margin-top: 2.7vw;
     padding: 0 3.2vw;

+ 21 - 12
src/views/mine/index.vue

@@ -9,7 +9,7 @@
         <div class="user_name">{{ $store.getters.userInfo.name }}</div>
       </div>
     </div>
-    <order-type-list :obj-cell="ObjCell">
+    <order-type-list class="type1" :obj-cell="ObjCell">
       <template #content>
         <div class="cell_content">
           <van-badge
@@ -27,7 +27,7 @@
         </div>
       </template>
     </order-type-list>
-    <order-type-list :obj-cell="ObjCellLink" />
+    <order-type-list :obj-cell="ObjCellLink" class="type2" />
     <div class="logo-bottom">
       <img src="https://static.caimei365.com/app/mini-distribution/caimei-logo.png" alt="">
       <div>由采美365网提供技术支持</div>
@@ -45,7 +45,7 @@ export default {
             isLink: true,
             title: '我的订单',
             value: '全部订单',
-            to: '/order-list?isIns=1'
+            to: '/order-list'
           }
         ],
         isInset: true,
@@ -159,9 +159,23 @@ export default {
 <style lang="scss" scoped>
 .mine {
   width: 100%;
-  height: 100vh;
   background: #f5f5f5;
   position: relative;
+  padding-bottom: 26vw;
+  ::v-deep .type1 {
+    margin-top: -13vw;
+    position: static;
+  }
+  ::v-deep .type2 {
+    margin-top: 4vw;
+    position: static;
+    .van-cell {
+      padding: 14px 16px;
+      .van-cell__left-icon {
+        margin-right: 10px;
+      }
+    }
+  }
   .mine-bg {
     height: 29.3vw;
     background: #ff5b00;
@@ -211,13 +225,8 @@ export default {
     justify-content: center;
     align-items: center;
     flex-direction: column;
-    width: 37.7vw;
-    margin: 0 auto;
-    position: absolute;
-    bottom: 15vw;
-    left: 50%;
-    height: 14vw;
-    transform: translateX(-50%);
+    width: 100%;
+    margin-top: 10vw;
     white-space: nowrap;
     img {
       width: 9.3vw;
@@ -246,7 +255,7 @@ export default {
     }
     div {
       color: #999999;
-      font-size: 3.2vw;
+      font-size: 3vw;
     }
   }
 }

+ 4 - 4
src/views/order-list/index.vue

@@ -1,6 +1,6 @@
 <template>
   <div>
-    <nav-bar title="订单列表" @click-left="$router.back()">
+    <nav-bar title="订单列表" @click-left="!isIns && $router.push('/mine')">
       <van-tabs v-model="formData.listType" @change="handlerOrderStatus">
         <van-tab v-for="item in orderLinks" :title="item.name" :key="item.status" />
       </van-tabs>
@@ -137,10 +137,10 @@ export default {
   },
   computed: {
     isIns () {
-      return this.$route.query.isIns
+      return this.$route.query.isIns * 1
     },
     uId () {
-      return this.$route.query.uId || 666808
+      return this.$route.query.uId
     }
   },
   mounted () {
@@ -206,7 +206,7 @@ export default {
         wx.updateAppMessageShareData({
           title: '分享订单', // 分享标题
           desc: '分享订单', // 分享描述
-          link: `https://sell-b.caimei365.com/#/share?type=1&shopOrderId=${info.shopOrderId}&userId=${info.userId}`, // 分享链接,该链接域名或路径必须与当前页面对应的公众号 JS 安全域名一致
+          link: `https://sell-b.caimei365.com/#/share?type=2&shopOrderId=${info.shopOrderId}&userId=${info.userId}`, // 分享链接,该链接域名或路径必须与当前页面对应的公众号 JS 安全域名一致
           imgUrl: 'https://static.caimei365.com/app/mini-distribution/qrcode.png', // 分享图标
           fail: () => {
             this.initAppMessageShareData(info)

+ 5 - 2
src/views/order-list/order-detail.vue

@@ -270,15 +270,18 @@ export default {
     padding-top: 3vw;
     font-size: 3.5vw;
     color: #999999;
-    border-top: 1px solid #999999;
+    border-top: 1px solid #E1E1E1;
     span {
       color: #333;
     }
   }
 }
+::v-deep .van-cell {
+  font-size: 4vw;
+}
 .content {
   padding: 3.2vw;
-  font-size: 3.7vw;
+  font-size: 14px;
   color: #666;
   background: #fff;
   .time {

+ 3 - 0
src/views/order-sales/index.vue

@@ -119,6 +119,9 @@ export default {
 </script>
 
 <style lang="scss" scoped>
+::v-deep .van-tabs__line {
+  background-color: #FF5B00;
+}
 .tabsList {
   height: 18.1vw;
   background: #F5F5F5;

+ 11 - 3
src/views/share/index.vue

@@ -1,6 +1,6 @@
 <template>
   <div class="content">
-    <div v-if="type === 1">
+    <div v-if="type === 1 || 2">
       <nav-bar title="分享码查看订单" @click-left="$router.back()" />
       <div class="shareCode">
         <van-field v-model="shareCode" placeholder="请输入分享码" maxlength="4" type="digit"/>
@@ -14,6 +14,7 @@
 
 <script>
 import { shareCodeCheck } from '@/api/institutionApi/order.js'
+import { Toast } from 'vant'
 export default {
   data () {
     return {
@@ -39,14 +40,21 @@ export default {
     }
   },
   mounted () {
-    console.log(this.$route.query)
+    Toast.loading({
+      message: '加载中...',
+      forbidClick: true
+    })
   },
   methods: {
     async shareCodeCheck () {
       const query = this.$route.query
       try {
         await shareCodeCheck({ shopOrderId: query.shopOrderId, shareCode: this.shareCode, userId: query.userId })
-        this.$router.push(`/order-detail?shopOrderId=${query.shopOrderId}&userId=${query.userId}&isIns=1`)
+        if (this.type === 1) {
+          this.$router.push(`/order-detail?shopOrderId=${query.shopOrderId}&userId=${query.userId}&isIns=1`)
+        } else if (this.type === 2) {
+          this.$router.push(`/order-list?&uId=${query.userId}&isIns=1`)
+        }
       } catch (error) {
         console.log(error)
       }

+ 10 - 6
src/views/shopping-mall/components/goods-classification.vue

@@ -5,25 +5,25 @@
       <div class="content">
         <div>
           <div class="label">
-            品牌
+            <span>品牌</span>
             <span>{{ productInfo.brandName }}</span>
           </div>
         </div>
         <div>
           <div class="label">
-            分类
+            <span>分类</span>
             <span>{{ productInfo.bigTypeName }}</span>
           </div>
         </div>
         <div>
           <div class="label" v-if="productInfo.skus && productInfo.skus.length > 0">
-            包装规格
+            <span>包装规格</span>
             <span>{{ productInfo.skus.map(i => i.unit).join(',') }}</span>
           </div>
         </div>
         <div>
           <div class="label">
-            商品编码
+            <span>商品编码</span>
             <span>{{ productInfo.productCode }}</span>
           </div>
         </div>
@@ -65,9 +65,13 @@ export default {
       font-size: 3.7vw;
       color: #999;
       margin-bottom: 3.2vw;
-      span {
-        margin-left: 12.8vw;
+      span:nth-child(1) {
+        width: 15vw;
+        display: inline-block;
+      }
+      span:nth-child(2) {
         color: #333;
+        margin-left: 5.3vw;
       }
     }
     .btn {

+ 1 - 1
src/views/shopping-mall/components/goods-sku.vue

@@ -18,7 +18,7 @@
     </template>
     <template #sku-actions="props">
       <div class="van-sku-actions">
-        <van-button @click="onPayProduct(props)" color="#FF5B00">立即购买</van-button>
+        <van-button @click="onPayProduct(props)" color="#FF5B00" v-if="isLock">立即购买</van-button>
       </div>
     </template>
     </van-sku>

+ 1 - 1
src/views/shopping-mall/detail.vue

@@ -90,7 +90,7 @@ export default {
         wx.updateAppMessageShareData({
           title: '商品详情', // 分享标题
           desc: '商品详情', // 分享描述
-          link: `https://sell-b.caimei365.com/#/goods-detail?productId=${this.productId}&typeId=0&suid=${this.$store.getters.userId}`, // 分享链接,该链接域名或路径必须与当前页面对应的公众号 JS 安全域名一致
+          link: `https://sell-b.caimei365.com/#/goods-detail?productId=${this.productId}&typeId=0&suid=${this.$store.getters.userId}&isIns=1`, // 分享链接,该链接域名或路径必须与当前页面对应的公众号 JS 安全域名一致
           imgUrl: 'https://static.caimei365.com/app/mini-distribution/qrcode.png', // 分享图标
           fail: () => {
             this.initAppMessageShareData()