Browse Source

订单管理、门店管理

unknown 1 tháng trước cách đây
mục cha
commit
b73046f531
34 tập tin đã thay đổi với 1952 bổ sung581 xóa
  1. 78 254
      package-lock.json
  2. 0 1
      package.json
  3. 7 0
      src/api/iceRaft.js
  4. 2 2
      src/assets/css/global.css
  5. 26 3
      src/assets/fonts/demo_index.html
  6. 7 3
      src/assets/fonts/iconfont.css
  7. 0 0
      src/assets/fonts/iconfont.js
  8. 7 0
      src/assets/fonts/iconfont.json
  9. BIN
      src/assets/fonts/iconfont.ttf
  10. BIN
      src/assets/fonts/iconfont.woff
  11. BIN
      src/assets/fonts/iconfont.woff2
  12. 64 21
      src/components/forms.vue
  13. 12 8
      src/components/orderDetails.vue
  14. 129 0
      src/components/prescriptionPicture.vue
  15. 22 4
      src/components/tables.vue
  16. 21 12
      src/router/generator-routers.js
  17. 1 0
      src/utils/request.js
  18. 20 17
      src/views/IceCreamFreezer/IceManagement.vue
  19. 12 23
      src/views/IceCreamFreezer/freezer.js
  20. 66 61
      src/views/IceCreamFreezer/iceRaft.js
  21. 1 1
      src/views/IceCreamFreezer/refrigerator.js
  22. 65 0
      src/views/IceCreamFreezer/store.js
  23. 239 0
      src/views/IceCreamFreezer/storeManagement.vue
  24. 24 1
      src/views/OrderManagement/cancelledOrder.vue
  25. 7 2
      src/views/OrderManagement/completed.js
  26. 25 1
      src/views/OrderManagement/completedOrder.vue
  27. 26 3
      src/views/OrderManagement/deliveryOrder.vue
  28. 7 2
      src/views/OrderManagement/ordered.js
  29. 93 25
      src/views/OrderManagement/pendingOrder.vue
  30. 117 11
      src/views/OrderManagement/reviewedOrder.vue
  31. 354 52
      src/views/OrderManagement/uncertain.js
  32. 476 8
      src/views/OrderManagement/uncertainOrder.vue
  33. 1 1
      src/views/system/incubator.js
  34. 43 65
      yarn.lock

+ 78 - 254
package-lock.json

@@ -36,7 +36,6 @@
         "eslint-plugin-import": "^2.25.3",
         "eslint-plugin-node": "^11.1.0",
         "eslint-plugin-promise": "^5.1.0",
-        "eslint-plugin-vue": "^8.0.3",
         "sass": "^1.32.7",
         "sass-loader": "^12.0.0",
         "vue-template-compiler": "^2.6.14"
@@ -3392,10 +3391,9 @@
     },
     "node_modules/@vue/eslint-config-standard": {
       "version": "6.1.0",
-      "resolved": "https://registry.npmjs.org/@vue/eslint-config-standard/-/eslint-config-standard-6.1.0.tgz",
+      "resolved": "https://registry.npmmirror.com/@vue/eslint-config-standard/-/eslint-config-standard-6.1.0.tgz",
       "integrity": "sha512-9+hrEyflDzsGdlBDl9jPV5DIYUx1TOU5OSQqRDKCrNumrxRj5HRWKuk+ocXWnha6uoNRtLC24mY7d/MwqvBCNw==",
       "dev": true,
-      "license": "MIT",
       "dependencies": {
         "eslint-config-standard": "^16.0.3",
         "eslint-import-resolver-node": "^0.3.4",
@@ -3673,26 +3671,13 @@
     },
     "node_modules/acorn-jsx": {
       "version": "5.3.2",
-      "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
+      "resolved": "https://registry.npmmirror.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
       "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
       "dev": true,
-      "license": "MIT",
       "peerDependencies": {
         "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
       }
     },
-    "node_modules/acorn-jsx/node_modules/acorn": {
-      "version": "7.4.1",
-      "dev": true,
-      "license": "MIT",
-      "peer": true,
-      "bin": {
-        "acorn": "bin/acorn"
-      },
-      "engines": {
-        "node": ">=0.4.0"
-      }
-    },
     "node_modules/acorn-walk": {
       "version": "8.3.2",
       "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz",
@@ -6481,74 +6466,24 @@
       }
     },
     "node_modules/eslint-plugin-vue": {
-      "version": "8.7.1",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-8.7.1.tgz",
-      "integrity": "sha512-28sbtm4l4cOzoO1LtzQPxfxhQABararUb1JtqusQqObJpWX2e/gmVyeYVfepizPFne0Q5cILkYGiBoV36L12Wg==",
+      "version": "7.20.0",
+      "resolved": "https://registry.npmmirror.com/eslint-plugin-vue/-/eslint-plugin-vue-7.20.0.tgz",
+      "integrity": "sha512-oVNDqzBC9h3GO+NTgWeLMhhGigy6/bQaQbHS+0z7C4YEu/qK/yxHvca/2PTZtGNPsCrHwOTgKMrwu02A9iPBmw==",
       "dev": true,
-      "license": "MIT",
+      "peer": true,
       "dependencies": {
-        "eslint-utils": "^3.0.0",
+        "eslint-utils": "^2.1.0",
         "natural-compare": "^1.4.0",
-        "nth-check": "^2.0.1",
-        "postcss-selector-parser": "^6.0.9",
-        "semver": "^7.3.5",
-        "vue-eslint-parser": "^8.0.1"
+        "semver": "^6.3.0",
+        "vue-eslint-parser": "^7.10.0"
       },
       "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+        "node": ">=8.10"
       },
       "peerDependencies": {
         "eslint": "^6.2.0 || ^7.0.0 || ^8.0.0"
       }
     },
-    "node_modules/eslint-plugin-vue/node_modules/eslint-utils": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz",
-      "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "eslint-visitor-keys": "^2.0.0"
-      },
-      "engines": {
-        "node": "^10.0.0 || ^12.0.0 || >= 14.0.0"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/mysticatea"
-      },
-      "peerDependencies": {
-        "eslint": ">=5"
-      }
-    },
-    "node_modules/eslint-plugin-vue/node_modules/lru-cache": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
-      "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
-      "dev": true,
-      "license": "ISC",
-      "dependencies": {
-        "yallist": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/eslint-plugin-vue/node_modules/semver": {
-      "version": "7.6.0",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz",
-      "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
-      "dev": true,
-      "license": "ISC",
-      "dependencies": {
-        "lru-cache": "^6.0.0"
-      },
-      "bin": {
-        "semver": "bin/semver.js"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
     "node_modules/eslint-scope": {
       "version": "5.1.1",
       "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
@@ -6774,16 +6709,6 @@
         "node": ">=0.4.0"
       }
     },
-    "node_modules/espree/node_modules/acorn-jsx": {
-      "version": "5.3.2",
-      "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
-      "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
-      "dev": true,
-      "license": "MIT",
-      "peerDependencies": {
-        "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
-      }
-    },
     "node_modules/espree/node_modules/eslint-visitor-keys": {
       "version": "1.3.0",
       "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
@@ -12814,105 +12739,66 @@
       "integrity": "sha512-D9q93U6rzIeGthpq+yOgKKWDoSrWQlKHTxOW1Y8hVscA8uHYtE600VNLwoFrDhpdcgpMBetM/VRfDCb7/dmImA=="
     },
     "node_modules/vue-eslint-parser": {
-      "version": "8.3.0",
-      "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-8.3.0.tgz",
-      "integrity": "sha512-dzHGG3+sYwSf6zFBa0Gi9ZDshD7+ad14DGOdTLjruRVgZXe2J+DcZ9iUhyR48z5g1PqRa20yt3Njna/veLJL/g==",
+      "version": "7.11.0",
+      "resolved": "https://registry.npmmirror.com/vue-eslint-parser/-/vue-eslint-parser-7.11.0.tgz",
+      "integrity": "sha512-qh3VhDLeh773wjgNTl7ss0VejY9bMMa0GoDG2fQVyDzRFdiU3L7fw74tWZDHNQXdZqxO3EveQroa9ct39D2nqg==",
       "dev": true,
-      "license": "MIT",
+      "peer": true,
       "dependencies": {
-        "debug": "^4.3.2",
-        "eslint-scope": "^7.0.0",
-        "eslint-visitor-keys": "^3.1.0",
-        "espree": "^9.0.0",
+        "debug": "^4.1.1",
+        "eslint-scope": "^5.1.1",
+        "eslint-visitor-keys": "^1.1.0",
+        "espree": "^6.2.1",
         "esquery": "^1.4.0",
         "lodash": "^4.17.21",
-        "semver": "^7.3.5"
+        "semver": "^6.3.0"
       },
       "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+        "node": ">=8.10"
       },
       "funding": {
         "url": "https://github.com/sponsors/mysticatea"
       },
       "peerDependencies": {
-        "eslint": ">=6.0.0"
+        "eslint": ">=5.0.0"
       }
     },
-    "node_modules/vue-eslint-parser/node_modules/eslint-scope": {
-      "version": "7.2.2",
-      "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz",
-      "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==",
+    "node_modules/vue-eslint-parser/node_modules/acorn": {
+      "version": "7.4.1",
+      "resolved": "https://registry.npmmirror.com/acorn/-/acorn-7.4.1.tgz",
+      "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
       "dev": true,
-      "license": "BSD-2-Clause",
-      "dependencies": {
-        "esrecurse": "^4.3.0",
-        "estraverse": "^5.2.0"
+      "peer": true,
+      "bin": {
+        "acorn": "bin/acorn"
       },
       "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/eslint"
+        "node": ">=0.4.0"
       }
     },
     "node_modules/vue-eslint-parser/node_modules/eslint-visitor-keys": {
-      "version": "3.4.3",
-      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
-      "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+      "version": "1.3.0",
+      "resolved": "https://registry.npmmirror.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
+      "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
       "dev": true,
-      "license": "Apache-2.0",
+      "peer": true,
       "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/eslint"
+        "node": ">=4"
       }
     },
     "node_modules/vue-eslint-parser/node_modules/espree": {
-      "version": "9.6.1",
-      "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
-      "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
-      "dev": true,
-      "license": "BSD-2-Clause",
-      "dependencies": {
-        "acorn": "^8.9.0",
-        "acorn-jsx": "^5.3.2",
-        "eslint-visitor-keys": "^3.4.1"
-      },
-      "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/eslint"
-      }
-    },
-    "node_modules/vue-eslint-parser/node_modules/lru-cache": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
-      "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
-      "dev": true,
-      "license": "ISC",
-      "dependencies": {
-        "yallist": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/vue-eslint-parser/node_modules/semver": {
-      "version": "7.6.0",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz",
-      "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
+      "version": "6.2.1",
+      "resolved": "https://registry.npmmirror.com/espree/-/espree-6.2.1.tgz",
+      "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==",
       "dev": true,
-      "license": "ISC",
+      "peer": true,
       "dependencies": {
-        "lru-cache": "^6.0.0"
-      },
-      "bin": {
-        "semver": "bin/semver.js"
+        "acorn": "^7.1.1",
+        "acorn-jsx": "^5.2.0",
+        "eslint-visitor-keys": "^1.1.0"
       },
       "engines": {
-        "node": ">=10"
+        "node": ">=6.0.0"
       }
     },
     "node_modules/vue-hot-reload-api": {
@@ -15972,7 +15858,7 @@
     },
     "@vue/eslint-config-standard": {
       "version": "6.1.0",
-      "resolved": "https://registry.npmjs.org/@vue/eslint-config-standard/-/eslint-config-standard-6.1.0.tgz",
+      "resolved": "https://registry.npmmirror.com/@vue/eslint-config-standard/-/eslint-config-standard-6.1.0.tgz",
       "integrity": "sha512-9+hrEyflDzsGdlBDl9jPV5DIYUx1TOU5OSQqRDKCrNumrxRj5HRWKuk+ocXWnha6uoNRtLC24mY7d/MwqvBCNw==",
       "dev": true,
       "requires": {
@@ -16189,17 +16075,10 @@
     },
     "acorn-jsx": {
       "version": "5.3.2",
-      "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
+      "resolved": "https://registry.npmmirror.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
       "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
       "dev": true,
-      "requires": {},
-      "dependencies": {
-        "acorn": {
-          "version": "7.4.1",
-          "dev": true,
-          "peer": true
-        }
-      }
+      "requires": {}
     },
     "acorn-walk": {
       "version": "8.3.2",
@@ -18189,46 +18068,16 @@
       "requires": {}
     },
     "eslint-plugin-vue": {
-      "version": "8.7.1",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-8.7.1.tgz",
-      "integrity": "sha512-28sbtm4l4cOzoO1LtzQPxfxhQABararUb1JtqusQqObJpWX2e/gmVyeYVfepizPFne0Q5cILkYGiBoV36L12Wg==",
+      "version": "7.20.0",
+      "resolved": "https://registry.npmmirror.com/eslint-plugin-vue/-/eslint-plugin-vue-7.20.0.tgz",
+      "integrity": "sha512-oVNDqzBC9h3GO+NTgWeLMhhGigy6/bQaQbHS+0z7C4YEu/qK/yxHvca/2PTZtGNPsCrHwOTgKMrwu02A9iPBmw==",
       "dev": true,
+      "peer": true,
       "requires": {
-        "eslint-utils": "^3.0.0",
+        "eslint-utils": "^2.1.0",
         "natural-compare": "^1.4.0",
-        "nth-check": "^2.0.1",
-        "postcss-selector-parser": "^6.0.9",
-        "semver": "^7.3.5",
-        "vue-eslint-parser": "^8.0.1"
-      },
-      "dependencies": {
-        "eslint-utils": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz",
-          "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==",
-          "dev": true,
-          "requires": {
-            "eslint-visitor-keys": "^2.0.0"
-          }
-        },
-        "lru-cache": {
-          "version": "6.0.0",
-          "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
-          "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
-          "dev": true,
-          "requires": {
-            "yallist": "^4.0.0"
-          }
-        },
-        "semver": {
-          "version": "7.6.0",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz",
-          "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
-          "dev": true,
-          "requires": {
-            "lru-cache": "^6.0.0"
-          }
-        }
+        "semver": "^6.3.0",
+        "vue-eslint-parser": "^7.10.0"
       }
     },
     "eslint-scope": {
@@ -18324,13 +18173,6 @@
           "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
           "dev": true
         },
-        "acorn-jsx": {
-          "version": "5.3.2",
-          "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
-          "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
-          "dev": true,
-          "requires": {}
-        },
         "eslint-visitor-keys": {
           "version": "1.3.0",
           "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
@@ -22398,63 +22240,45 @@
       "integrity": "sha512-D9q93U6rzIeGthpq+yOgKKWDoSrWQlKHTxOW1Y8hVscA8uHYtE600VNLwoFrDhpdcgpMBetM/VRfDCb7/dmImA=="
     },
     "vue-eslint-parser": {
-      "version": "8.3.0",
-      "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-8.3.0.tgz",
-      "integrity": "sha512-dzHGG3+sYwSf6zFBa0Gi9ZDshD7+ad14DGOdTLjruRVgZXe2J+DcZ9iUhyR48z5g1PqRa20yt3Njna/veLJL/g==",
+      "version": "7.11.0",
+      "resolved": "https://registry.npmmirror.com/vue-eslint-parser/-/vue-eslint-parser-7.11.0.tgz",
+      "integrity": "sha512-qh3VhDLeh773wjgNTl7ss0VejY9bMMa0GoDG2fQVyDzRFdiU3L7fw74tWZDHNQXdZqxO3EveQroa9ct39D2nqg==",
       "dev": true,
+      "peer": true,
       "requires": {
-        "debug": "^4.3.2",
-        "eslint-scope": "^7.0.0",
-        "eslint-visitor-keys": "^3.1.0",
-        "espree": "^9.0.0",
+        "debug": "^4.1.1",
+        "eslint-scope": "^5.1.1",
+        "eslint-visitor-keys": "^1.1.0",
+        "espree": "^6.2.1",
         "esquery": "^1.4.0",
         "lodash": "^4.17.21",
-        "semver": "^7.3.5"
+        "semver": "^6.3.0"
       },
       "dependencies": {
-        "eslint-scope": {
-          "version": "7.2.2",
-          "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz",
-          "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==",
+        "acorn": {
+          "version": "7.4.1",
+          "resolved": "https://registry.npmmirror.com/acorn/-/acorn-7.4.1.tgz",
+          "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
           "dev": true,
-          "requires": {
-            "esrecurse": "^4.3.0",
-            "estraverse": "^5.2.0"
-          }
+          "peer": true
         },
         "eslint-visitor-keys": {
-          "version": "3.4.3",
-          "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
-          "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
-          "dev": true
-        },
-        "espree": {
-          "version": "9.6.1",
-          "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
-          "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
-          "dev": true,
-          "requires": {
-            "acorn": "^8.9.0",
-            "acorn-jsx": "^5.3.2",
-            "eslint-visitor-keys": "^3.4.1"
-          }
-        },
-        "lru-cache": {
-          "version": "6.0.0",
-          "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
-          "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+          "version": "1.3.0",
+          "resolved": "https://registry.npmmirror.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
+          "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
           "dev": true,
-          "requires": {
-            "yallist": "^4.0.0"
-          }
+          "peer": true
         },
-        "semver": {
-          "version": "7.6.0",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz",
-          "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
+        "espree": {
+          "version": "6.2.1",
+          "resolved": "https://registry.npmmirror.com/espree/-/espree-6.2.1.tgz",
+          "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==",
           "dev": true,
+          "peer": true,
           "requires": {
-            "lru-cache": "^6.0.0"
+            "acorn": "^7.1.1",
+            "acorn-jsx": "^5.2.0",
+            "eslint-visitor-keys": "^1.1.0"
           }
         }
       }

+ 0 - 1
package.json

@@ -36,7 +36,6 @@
     "eslint-plugin-import": "^2.25.3",
     "eslint-plugin-node": "^11.1.0",
     "eslint-plugin-promise": "^5.1.0",
-    "eslint-plugin-vue": "^8.0.3",
     "sass": "^1.32.7",
     "sass-loader": "^12.0.0",
     "vue-template-compiler": "^2.6.14"

+ 7 - 0
src/api/iceRaft.js

@@ -1,5 +1,12 @@
 import request from '@/utils/request'
 
+// 获取冰排信息
+export function getIceRaftCode(parameter) {
+  return request({
+    url: '/api/ice-raft/code/' + parameter,
+    method: 'get',
+  })
+}
 // 获取冰排追溯列表
 export function getIceRaftNewest(parameter) {
   return request({

+ 2 - 2
src/assets/css/global.css

@@ -35,12 +35,12 @@ body,
 	border-top: 1px solid #EBEEF5;
 }
 
-.el-form-item__label {
+/* .el-form-item__label {
 	line-height: unset !important;
 	min-height: 40px;
 	display: flex;
 	align-items: center;
-}
+} */
 
 @media screen and (max-width:1200px) {
 	.waybillquiry_head {

+ 26 - 3
src/assets/fonts/demo_index.html

@@ -55,6 +55,12 @@
           <ul class="icon_lists dib-box">
           
             <li class="dib">
+              <span class="icon iconfont">&#xe725;</span>
+                <div class="name">药店</div>
+                <div class="code-name">&amp;#xe725;</div>
+              </li>
+          
+            <li class="dib">
               <span class="icon iconfont">&#xe768;</span>
                 <div class="name">已取消订单</div>
                 <div class="code-name">&amp;#xe768;</div>
@@ -174,9 +180,9 @@
 <pre><code class="language-css"
 >@font-face {
   font-family: 'iconfont';
-  src: url('iconfont.woff2?t=1727226736655') format('woff2'),
-       url('iconfont.woff?t=1727226736655') format('woff'),
-       url('iconfont.ttf?t=1727226736655') format('truetype');
+  src: url('iconfont.woff2?t=1728712647401') format('woff2'),
+       url('iconfont.woff?t=1728712647401') format('woff'),
+       url('iconfont.ttf?t=1728712647401') format('truetype');
 }
 </code></pre>
           <h3 id="-iconfont-">第二步:定义使用 iconfont 的样式</h3>
@@ -203,6 +209,15 @@
         <ul class="icon_lists dib-box">
           
           <li class="dib">
+            <span class="icon iconfont icon-yaodian"></span>
+            <div class="name">
+              药店
+            </div>
+            <div class="code-name">.icon-yaodian
+            </div>
+          </li>
+          
+          <li class="dib">
             <span class="icon iconfont icon-yiquxiaodingdan"></span>
             <div class="name">
               已取消订单
@@ -384,6 +399,14 @@
           
             <li class="dib">
                 <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-yaodian"></use>
+                </svg>
+                <div class="name">药店</div>
+                <div class="code-name">#icon-yaodian</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
                   <use xlink:href="#icon-yiquxiaodingdan"></use>
                 </svg>
                 <div class="name">已取消订单</div>

+ 7 - 3
src/assets/fonts/iconfont.css

@@ -1,8 +1,8 @@
 @font-face {
   font-family: "iconfont"; /* Project id 4556741 */
-  src: url('@/assets/fonts/iconfont.woff2?t=1727226736655') format('woff2'),
-       url('@/assets/fonts/iconfont.woff?t=1727226736655') format('woff'),
-       url('@/assets/fonts/iconfont.ttf?t=1727226736655') format('truetype');
+  src: url('@/assets/fonts/iconfont.woff2?t=1728712647401') format('woff2'),
+       url('@/assets/fonts/iconfont.woff?t=1728712647401') format('woff'),
+       url('@/assets/fonts/iconfont.ttf?t=1728712647401') format('truetype');
 }
 
 .iconfont {
@@ -13,6 +13,10 @@
   -moz-osx-font-smoothing: grayscale;
 }
 
+.icon-yaodian:before {
+  content: "\e725";
+}
+
 .icon-yiquxiaodingdan:before {
   content: "\e768";
 }

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
src/assets/fonts/iconfont.js


+ 7 - 0
src/assets/fonts/iconfont.json

@@ -6,6 +6,13 @@
   "description": "",
   "glyphs": [
     {
+      "icon_id": "5953784",
+      "name": "药店",
+      "font_class": "yaodian",
+      "unicode": "e725",
+      "unicode_decimal": 59173
+    },
+    {
       "icon_id": "3683468",
       "name": "已取消订单",
       "font_class": "yiquxiaodingdan",

BIN
src/assets/fonts/iconfont.ttf


BIN
src/assets/fonts/iconfont.woff


BIN
src/assets/fonts/iconfont.woff2


+ 64 - 21
src/components/forms.vue

@@ -1,6 +1,6 @@
 <template>
   <!-- 表单 -->
-  <div class="card_employee">
+  <div class="card_employee" :style="{maxHeight:beyondHeight}">
     <el-form ref="ruleForm" @submit.native.prevent :label-position="labelPosition" :model="ruleForm"
       :label-width="labelWidth">
       <el-row :gutter="10">
@@ -16,10 +16,19 @@
           <el-form-item class="card_independent" :label-width="item.labelWidth" :label="item.label" :prop="item.field"
             :rules="detail ? item.rules : {}" v-if="item.type === 'scan'">
             <el-input :placeholder="item.placeholder" :disabled="item.disabled" :id="item.field" v-model="inputs"
-              @keyup.enter.native="keydownBarcode(item.field)" @blur="loseFocus" @focus="focus(item.field)">
+              @keyup.enter.native="serialNumber(item.field)" @focus="focus(item.field)" @input="iceRaftInput">
               <el-button slot="append" icon="el-icon-circle-plus icon_circle_btn"
                 @click="serialNumber(item.field)"></el-button>
             </el-input>
+            <div class="card_IceList" v-if="formIceTracing">
+              <div class="ser_card_ial" v-for="(serial,num) in inputsList" :key="num">
+                <div style="display: flex;align-items: center;">
+                  <div>{{num + 1}}</div>
+                  <div class="title_serial">{{serial}}</div>
+                </div>
+                <span class="del_serial" @click="delSerial(serial,num)">删除</span>
+              </div>
+            </div>
           </el-form-item>
           <el-form-item :label-width="item.labelWidth" :label="item.label" :prop="item.field"
             :rules="detail ? item.rules : {}" v-if="item.type === 'textarea'">
@@ -42,7 +51,7 @@
             :rules="detail ? item.rules : {}" v-if="item.type === 'searchSelect'">
             <el-select :id="item.field" v-model="ruleForm[`${item.field}`]" v-loadmore="handleScroll" filterable remote
               :remote-method="(query) => remoteMethod(query, item.field)" :placeholder="item.placeholder"
-              :disabled="item.disabled" style="width: 100%" @change="changeOption">
+              :disabled="item.disabled" style="width: 100%" @change="(row) => changeOption(row, item.field)">
               <el-option v-for="(element, i) in item.options" :label="element.label" :value="`${element.value}`"
                 :key="i" />
             </el-select>
@@ -57,7 +66,8 @@
           <el-form-item :label="item.label" :prop="item.field" :rules="detail ? item.rules : {}"
             v-if="item.type === 'radio'">
             <div style="display: flex;height: 40px;align-items: center;">
-              <el-radio-group v-remove-hidden v-model="ruleForm[`${item.field}`]" :disabled="item.disabled" @input="radioInput">
+              <el-radio-group v-remove-hidden v-model="ruleForm[`${item.field}`]" :disabled="item.disabled"
+                @input="radioInput">
                 <el-radio v-for="(element, i) in item.options" :key="i"
                   :label="element.value">{{element.label}}</el-radio>
               </el-radio-group>
@@ -144,9 +154,9 @@
             </div>
           </div>
         </el-col>
-        <el-col :span="20" :offset="4" v-if="iceBank">
+        <el-col :span="20" :offset="4" v-if="iceBank && !formIceTracing">
           <div style="display: flex;flex-direction: column;">
-            <div class="ser_card_ial" v-for="(serial,num) in inputsList" :key="num">
+            <div class="ser_card_ial margin_around" v-for="(serial,num) in inputsList" :key="num">
               <div style="display: flex;align-items: center;">
                 <div>{{num + 1}}</div>
                 <div class="title_serial">{{serial}}</div>
@@ -164,6 +174,9 @@
   import {
     getFileToken,
   } from '@/api/login'
+  import {
+    getIceRaftCode,
+  } from '@/api/iceRaft'
   export default {
     name: "forms",
     props: {
@@ -202,6 +215,16 @@
         type: Boolean,
         default: () => false,
       },
+      // 表单冰排
+      formIceTracing: {
+        type: Boolean,
+        default: () => false,
+      },
+      // 超出隐藏
+      beyondHeight: {
+        type: String,
+        default: () => '530px',
+      },
     },
     watch: {
       formNewList: {
@@ -237,8 +260,8 @@
         this.$emit("changeSelect", row, field);
       },
       // 搜索选择
-      changeOption(row) {
-        this.$emit("changeOption", row);
+      changeOption(row, field) {
+        this.$emit("changeOption", row, field);
       },
       // 重置校验
       resetCheck() {
@@ -379,12 +402,17 @@
       // 添加编号
       serialNumber(field) {
         if (this.inputs) {
-          this.inputsList.push(this.inputs)
-          this.inputsList = this.uniqueArray(this.inputsList)
-          this.inputs = ''
-          this.ruleForm[`${field}`] = this.inputsList
+          getIceRaftCode(this.inputs).then(res => {
+            if (res.code == 200) {
+              this.inputsList.push(this.inputs)
+              this.inputsList = this.uniqueArray(this.inputsList)
+              this.inputs = ''
+              this.ruleForm[`${field}`] = this.inputsList
+            }
+          })
         }
       },
+      // 回车添加
       keydownBarcode(field) {
         if (this.inputs) {
           this.inputsList.push(this.inputs)
@@ -393,6 +421,12 @@
           this.ruleForm[`${field}`] = this.inputsList
         }
       },
+      // 输入
+      iceRaftInput(value) {
+        let arr = []
+        arr.push(value)
+        this.ruleForm.code = arr
+      },
       // 去重
       uniqueArray(arr) {
         return [...new Set(arr)];
@@ -406,14 +440,6 @@
       focus(field) {
         this.typeField = field
       },
-      // 失去焦点
-      loseFocus() {
-        if (this.inputs) {
-          this.inputsList.push(this.inputs)
-          this.inputsList = this.uniqueArray(this.inputsList)
-          this.ruleForm[`${this.typeField}`] = this.inputsList
-        }
-      },
       // 级联选择器关闭
       handleChange(value, type) {
         if (this.$refs.organizerUnit) {
@@ -459,7 +485,7 @@
   }
 
   .card_employee {
-    max-height: 600px;
+    // max-height: 530px;
     overflow-y: auto;
     overflow-x: hidden;
   }
@@ -540,6 +566,9 @@
     display: flex;
     justify-content: space-between;
     align-items: center;
+  }
+
+  .margin_around {
     margin: 5px 0px;
   }
 
@@ -551,4 +580,18 @@
     cursor: pointer;
     color: #F56C6C;
   }
+
+  .card_IceList {
+    display: flex;
+    flex-direction: column;
+    position: absolute;
+    top: 60px;
+    left: 0;
+    right: 5px;
+    padding: 0px 10px;
+    max-height: 125px;
+    overflow-y: auto;
+    box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
+    border-radius: 4px;
+  }
 </style>

+ 12 - 8
src/components/orderDetails.vue

@@ -1,7 +1,7 @@
 <template>
-  <!-- 单详情 -->
+  <!-- 单详情 -->
   <div>
-    <el-dialog title="单详情" :visible.sync="staffDialogVisible" width="60%" :close-on-click-modal="false">
+    <el-dialog title="单详情" :visible.sync="staffDialogVisible" width="60%" :close-on-click-modal="false">
       <div class="card_order_details">
         <el-row type="flex" class="order_row">
           <el-col class="order_col" :span="item.colWidth" v-for="(item,index) in list" :key="index">
@@ -56,7 +56,7 @@
   } from '@/assets/js/aes.js'
   export default {
     props: {
-      // 单详情数据
+      // 单详情数据
       waybillData: {
         type: Object,
         default: () => {},
@@ -73,22 +73,26 @@
           title: '运单号:',
           field: 'waybillNo',
           colWidth: 8,
+        },{
+          title: '订单号:',
+          field: 'orderNo',
+          colWidth: 8,
         }, {
-          title: '运单状态:',
+          title: '单状态:',
           field: 'status',
-          colWidth: 16,
+          colWidth: 8,
         }, {
-          title: '收件人:',
+          title: '患者姓名:',
           field: 'consigneeAddressName',
           colWidth: 8,
         }, {
-          title: '收件人电话:',
+          title: '患者电话:',
           field: 'consigneeAddressPhone',
           colWidth: 8,
         }, {
           title: '收件地址:',
           field: 'consigneeAddressDetails',
-          colWidth: 8,
+          colWidth: 24,
         }, {
           title: '配送员姓名:',
           field: 'courierName',

+ 129 - 0
src/components/prescriptionPicture.vue

@@ -0,0 +1,129 @@
+<template>
+  <!-- 处方图片上传阅览 -->
+  <div>
+    <div class="prescription">
+      <el-dialog title="上传处方图片" :visible.sync="prescriptionVisible" width="700px" :close-on-click-modal="false"
+        @close="closeDialog">
+        <div class="card_prescription">
+          <div class="title_prescription">处方图片:</div>
+          <el-upload action="#" list-type="picture-card" :file-list="fileList">
+            <i slot="default" class="el-icon-plus"></i>
+            <div slot="file" slot-scope="{file}">
+              <img class="el-upload-list__item-thumbnail" :src="file.url" alt="">
+              <span class="el-upload-list__item-actions">
+                <span class="el-upload-list__item-preview" @click="handlePictureCardPreview(file)">
+                  <i class="el-icon-zoom-in"></i>
+                </span>
+                <span v-if="!disabled" class="el-upload-list__item-delete" @click="handleRemove(file)">
+                  <i class="el-icon-delete"></i>
+                </span>
+              </span>
+            </div>
+          </el-upload>
+          <div class="title_prescription">已有处方图片:</div>
+          <div class="card_prescription_picture">
+            <div class="img_prescription_picture" v-for="(item,index) in fileList" :key="index">
+              <el-image class="image_picture" :src="item.url" :preview-src-list="srcList" :initial-index="urlIndex"
+                @click="prescriptionLook(item,index)">
+              </el-image>
+            </div>
+          </div>
+        </div>
+        <span slot="footer" class="dialog-footer">
+          <el-button plain @click="prescriptionVisible = false">取 消</el-button>
+          <el-button type="primary" :loading="sendConfirmLoading" @click.stop="sendHandleAdd">确 定</el-button>
+        </span>
+      </el-dialog>
+    </div>
+    <!-- // 图片查看器 -->
+    <el-image-viewer v-if="showViewer" :on-close="closeViewer" :url-list="urlList" :z-index="2100" />
+  </div>
+</template>
+
+<script>
+  import ElImageViewer from "element-ui/packages/image/src/image-viewer";
+  export default {
+    props: {
+      fileList: {
+        type: Array,
+        default: () => [],
+      },
+      srcList: {
+        type: Array,
+        default: () => [],
+      },
+    },
+    components: {
+      ElImageViewer
+    },
+    data() {
+      return {
+        prescriptionVisible: false,
+        disabled: false,
+
+        showViewer: false, // 显示查看器
+        urlList: [], // 图片的url
+        urlIndex: 0,
+        sendConfirmLoading: false,
+      }
+    },
+    methods: {
+      sendHandleAdd() {},
+      // 查看图片
+      handlePictureCardPreview(file) {
+        this.urlList = this.fileList.filter(e => e.url !== file.url).map(e => e.url);
+        this.urlList.unshift(file.url)
+        this.showViewer = true
+      },
+      // 删除图片
+      handleRemove(file) {
+        const filteredArr = this.fileList.filter(obj => obj.uid !== file.uid);
+        this.fileList = filteredArr
+        console.log('handleRemove', file)
+      },
+      prescriptionLook(file, index) {
+        this.urlIndex = index
+      },
+      closeViewer() {
+        this.showViewer = false
+      },
+      closeDialog() {
+
+      }
+    }
+  }
+</script>
+
+<style lang="scss" scoped>
+  .prescription ::v-deep .el-dialog__header {
+    border-bottom: 1px solid #EBEEF5;
+  }
+
+  .prescription ::v-deep .el-dialog__body {
+    padding: 20px;
+  }
+
+  .title_prescription {
+    font-size: 16px;
+    margin: 6px 0px;
+  }
+
+  .card_prescription_picture {
+    display: flex;
+    flex-direction: row;
+    flex-wrap: wrap;
+  }
+
+  .img_prescription_picture {
+    width: 148px;
+    height: 148px;
+    margin: 0 8px 8px 0;
+  }
+
+  .image_picture {
+    cursor: pointer;
+    width: 100%;
+    height: 100%;
+    border-radius: 6px;
+  }
+</style>

+ 22 - 4
src/components/tables.vue

@@ -110,10 +110,10 @@
         <el-table-column :prop="item.field" :label="item.label" :width="item.colWidth" :align="item.align"
           v-else-if="item.field == 'freezeClaim'">
           <template slot-scope="scope">
-            <div v-if="scope.row.iceRaftRecord">
+            <div v-if="scope.row.freezeClaim">≥{{scope.row.freezeClaim}}h</div>
+            <div v-else-if="scope.row.iceRaftRecord">
               <span v-if="scope.row.iceRaftRecord.status">≥{{scope.row.iceRaftRecord.freezeClaim}}h</span>
             </div>
-            <div v-else-if="scope.row.freezeClaim">≥{{scope.row.freezeClaim}}h</div>
           </template>
         </el-table-column>
         <el-table-column :prop="item.field" :label="item.label" :width="item.colWidth" :align="item.align"
@@ -224,7 +224,7 @@
         handler: function(newUser, oldUser) {
           this.unpackWidth = newUser
         },
-        immediate:true,
+        immediate: true,
         deep: true,
       }
     },
@@ -363,7 +363,25 @@
       },
       // 操作按钮
       buttonData(row, type) {
-        this.$emit("buttonData", row, type);
+        // console.log(row, type, '操作按钮')
+        if (type == 'delOrder') {
+          this.deleteOrder()
+        } else {
+          this.$emit("buttonData", row, type);
+        }
+      },
+      // 删除订单
+      deleteOrder() {
+        this.$confirm('此操作将永久删除该订单, 是否继续?', '提示', {
+          confirmButtonText: '确定',
+          cancelButtonText: '取消',
+          type: 'warning'
+        }).then(() => {
+          this.$message({
+            message: '操作成功',
+            type: 'success'
+          });
+        }).catch(() => {})
       },
       // 清空选中项
       clearSelected() {

+ 21 - 12
src/router/generator-routers.js

@@ -93,8 +93,15 @@ const rootRouter = {
         title: '地址薄管理'
       },
       component: () => import('@/views/system/addressBook'),
-    },
-    {
+    }, {
+      path: '/storeManagement',
+      name: 'storeManagement',
+      meta: {
+        icon: 'icon-yaodian',
+        title: '门店管理'
+      },
+      component: () => import('@/views/IceCreamFreezer/storeManagement'),
+    }, {
       path: '/IceTracingManagement',
       name: 'IceTracingManagement',
       meta: {
@@ -126,7 +133,8 @@ const rootRouter = {
         title: '保温箱管理'
       },
       component: () => import('@/views/system/IncubatorManagement'),
-    }, {
+    },
+    {
       path: '/OrderManagement',
       name: 'OrderManagement',
       meta: {
@@ -184,15 +192,16 @@ const rootRouter = {
         },
         component: () => import('@/views/OrderManagement/cancelledOrder.vue'),
       }, ]
-    }, {
-      path: '/WaybillManagement',
-      name: 'WaybillManagement',
-      meta: {
-        icon: 'icon-yundanguanli',
-        title: '运单管理'
-      },
-      component: () => import('@/views/system/WaybillManagement'),
-    }
+    },
+    // {
+    //   path: '/WaybillManagement',
+    //   name: 'WaybillManagement',
+    //   meta: {
+    //     icon: 'icon-yundanguanli',
+    //     title: '运单管理'
+    //   },
+    //   component: () => import('@/views/system/WaybillManagement'),
+    // }
   ]
 }
 

+ 1 - 0
src/utils/request.js

@@ -10,6 +10,7 @@ import {
 } from '@/api/login'
 // 创建 axios 实例
 const Url = "https://colddelivery.coldbaozhida.com/cold_delivery"
+// const Url = "http://192.168.11.77:6280" //测试
 const request = axios.create({
   // API 请求的默认前缀
   baseURL: process.env.NODE_ENV === 'production' ? Url : '/api',

+ 20 - 17
src/views/IceCreamFreezer/IceManagement.vue

@@ -38,7 +38,6 @@
   import pagination from '@/components/pagination'
   import forms from '@/components/forms'
   import {
-    formRulesil,
     formRules,
     employee,
   } from "./freezer.js";
@@ -87,18 +86,11 @@
         tableList: employee(),
         staffTitle: '添加',
         staffDialogVisible: false,
-        formRuleList: formRulesil(),
+        formRuleList: formRules(),
         ruleForm: {
           code: '',
           status: null,
-        },
-        ruleFormil: {
-          codeList: [],
-          status: '2',
-        },
-        ruleFormil1: {
-          code: '',
-          status: '2',
+          freezeClaim: '',
         },
         confirmLoading: false,
         selectingData: {},
@@ -135,8 +127,12 @@
         if (flag) {
           if (this.operationType == 'add') {
             this.confirmLoading = true
+            let arr = []
+            arr.push(this.ruleForm.code)
             var params = {
-              ...this.ruleFormil
+              codeList: arr,
+              status: this.ruleForm.status,
+              freezeClaim: Number(this.ruleForm.freezeClaim),
             }
             addIceRaft(params).then(res => {
               if (res.code == 200) {
@@ -157,6 +153,7 @@
               id: this.selectingData.id,
               code: this.ruleForm.code,
               status: this.ruleForm.status,
+              freezeClaim: Number(this.ruleForm.freezeClaim),
             }
             putIceRaft(params).then(res => {
               if (res.code == 200) {
@@ -177,36 +174,41 @@
         }
       },
       buttonData(row, type) {
+        this.formRuleList = formRules();
         this.selectingData = row
         this.operationType = type
         if (type == 'edit') {
           this.iceTracing = false
-          this.ruleForm = this.ruleFormil1
-          this.formRuleList = formRules()
           this.staffTitle = '编辑'
           this.staffDialogVisible = true
           setTimeout(() => {
             this.$nextTick(() => {
               this.ruleForm.code = row.code
               this.ruleForm.status = row.status
+              this.ruleForm.freezeClaim = row.freezeClaim
             })
           })
         } else if (type == 'logs') {
-          this.formRuleList = formRules()
+          this.iceTracing = false
           this.staffTitle = '详情'
           this.staffDialogVisible = true
+          setTimeout(() => {
+            this.$nextTick(() => {
+              this.ruleForm.code = row.code
+              this.ruleForm.status = row.status
+              this.ruleForm.freezeClaim = row.freezeClaim
+            })
+          })
           this.formRuleList.forEach((item, index) => {
             item.disabled = true
           })
-          this.ruleForm = JSON.parse(JSON.stringify(row))
         } else if (type == 'del') {
           this.deleteUser(row.id)
         }
       },
       openModel(type) {
+        this.formRuleList = formRules();
         this.iceTracing = true
-        this.ruleForm = this.ruleFormil
-        this.formRuleList = formRulesil()
         this.staffTitle = '添加'
         this.staffDialogVisible = true
         this.operationType = type
@@ -247,6 +249,7 @@
       // 清空表单
       closeDialog() {
         this.$refs.childRules.resetCheck();
+        console.log(this.ruleForm, 2)
       }
     },
   }

+ 12 - 23
src/views/IceCreamFreezer/freezer.js

@@ -16,6 +16,10 @@ export const employee = () => {
     align: 'center',
     options: iceraftStatus()
   }, {
+    field: 'freezeClaim',
+    label: '冷冻要求',
+    align: 'center',
+  }, {
     field: 'action',
     label: '操作',
     colWidth: '260px',
@@ -63,32 +67,17 @@ export const formRules = () => {
       trigger: 'change'
     }],
     options: iceraftStatus()
-  }, ]
-}
-
-export const formRulesil = () => {
-  return [{
-    field: 'codeList',
-    label: '编号',
-    placeholder: '请输入编号',
-    type: 'scan',
+  }, {
+    field: 'freezeClaim',
+    label: '冷冻要求',
+    placeholder: '请输入冷冻时间',
+    type: 'input',
     colWidth: 24,
+    unit: '小时',
     rules: [{
       required: true,
-      message: '请输入编号',
+      message: '请输入冷冻时间',
       trigger: 'blur'
     }]
-  }, {
-    field: 'status',
-    label: '状态',
-    placeholder: '状态',
-    type: 'radio',
-    colWidth: 24,
-    rules: [{
-      required: true,
-      message: '选择状态',
-      trigger: 'change'
-    }],
-    options: iceraftStatus()
-  }, ]
+  }]
 }

+ 66 - 61
src/views/IceCreamFreezer/iceRaft.js

@@ -98,30 +98,33 @@ export const historyRecord = () => {
 }
 
 export const iceRaftRules = () => {
-  return [{
-    field: 'freezeClaim',
-    label: '冷冻要求',
-    placeholder: '请输入冷冻时间',
-    type: 'input',
-    colWidth: 24,
-    unit: '小时',
-    rules: [{
-      required: true,
-      message: '请输入冷冻时间',
-      trigger: 'blur'
-    }]
-  }, {
-    field: 'code',
-    label: '冰排编号',
-    placeholder: '请输入冰排编号',
-    type: 'scan',
-    colWidth: 24,
-    rules: [{
-      required: true,
-      message: '请输入冰排编号',
-      trigger: 'blur'
-    }]
-  }]
+  return [
+    //   {
+    //   field: 'freezeClaim',
+    //   label: '冷冻要求',
+    //   placeholder: '请输入冷冻时间',
+    //   type: 'input',
+    //   colWidth: 24,
+    //   unit: '小时',
+    //   rules: [{
+    //     required: true,
+    //     message: '请输入冷冻时间',
+    //     trigger: 'blur'
+    //   }]
+    // },
+    {
+      field: 'code',
+      label: '冰排编号',
+      placeholder: '请输入冰排编号',
+      type: 'scan',
+      colWidth: 24,
+      rules: [{
+        required: true,
+        message: '请输入冰排编号',
+        trigger: 'blur'
+      }]
+    }
+  ]
 }
 
 export const freezerRules = () => {
@@ -156,41 +159,43 @@ export const freezerRules = () => {
 
 export const editRules = () => {
   return [{
-    field: 'code',
-    label: '冰排编号',
-    type: 'nvarchar',
-    colWidth: 24,
-    detail: false,
-  }, {
-    field: 'status',
-    label: '状态',
-    type: 'nvarcharil',
-    colWidth: 24,
-    detail: false,
-    options: frozenState()
-  }, {
-    field: 'inStorageTime',
-    label: '入库时间',
-    type: 'nvarchar',
-    colWidth: 24,
-    detail: false,
-  }, {
-    field: 'outStorageTime',
-    label: '出库时间',
-    type: 'nvarchar',
-    colWidth: 24,
-    detail: false,
-  }, {
-    field: 'freezeClaim',
-    label: '冷冻要求',
-    placeholder: '请输入冷冻时间',
-    type: 'input',
-    colWidth: 24,
-    unit: '小时',
-    rules: [{
-      required: true,
-      message: '请输入冷冻时间',
-      trigger: 'blur'
-    }]
-  }, ]
+      field: 'code',
+      label: '冰排编号',
+      type: 'nvarchar',
+      colWidth: 24,
+      detail: false,
+    }, {
+      field: 'status',
+      label: '状态',
+      type: 'nvarcharil',
+      colWidth: 24,
+      detail: false,
+      options: frozenState()
+    }, {
+      field: 'inStorageTime',
+      label: '入库时间',
+      type: 'nvarchar',
+      colWidth: 24,
+      detail: false,
+    }, {
+      field: 'outStorageTime',
+      label: '出库时间',
+      type: 'nvarchar',
+      colWidth: 24,
+      detail: false,
+    },
+    // {
+    //   field: 'freezeClaim',
+    //   label: '冷冻要求',
+    //   placeholder: '请输入冷冻时间',
+    //   type: 'input',
+    //   colWidth: 24,
+    //   unit: '小时',
+    //   rules: [{
+    //     required: true,
+    //     message: '请输入冷冻时间',
+    //     trigger: 'blur'
+    //   }]
+    // },
+  ]
 }

+ 1 - 1
src/views/IceCreamFreezer/refrigerator.js

@@ -88,7 +88,7 @@ export const formRules = () => {
     type: 'input',
     colWidth: 24,
     rules: [{
-      required: true,
+      required: false,
       message: '请输入SN',
       trigger: 'blur'
     }]

+ 65 - 0
src/views/IceCreamFreezer/store.js

@@ -0,0 +1,65 @@
+import {
+  userType
+} from '@/assets/js/blockSort'
+export const employee = () => {
+  return [{
+    field: 'index',
+    label: '序号',
+    align: 'center',
+  }, {
+    field: 'name',
+    label: '门店名称',
+    align: 'center',
+  }, {
+    field: 'address',
+    label: '门店详细地址',
+    align: 'center',
+  }, {
+    field: 'action',
+    label: '操作',
+    colWidth: '260px',
+    align: 'center',
+    labelButton: [{
+      type: 'logs',
+      label: '详情',
+      icon: 'el-icon-tickets',
+      style: 'success',
+    }, {
+      type: 'edit',
+      label: '编辑',
+      icon: 'el-icon-edit',
+      style: 'primary',
+    }, {
+      type: 'del',
+      label: '删除',
+      icon: 'el-icon-delete',
+      style: 'danger',
+    }]
+  }]
+}
+
+export const formRules = () => {
+  return [{
+    field: 'name',
+    label: '门店名称',
+    placeholder: '请输入门店名称',
+    type: 'input',
+    colWidth: 24,
+    rules: [{
+      required: true,
+      message: '请输入门店名称',
+      trigger: 'blur'
+    }]
+  }, {
+    field: 'address',
+    label: '门店详细地址',
+    placeholder: '请输入门店详细地址',
+    type: 'input',
+    colWidth: 24,
+    rules: [{
+      required: true,
+      message: '请输入门店详细地址',
+      trigger: 'blur'
+    }]
+  }, ]
+}

+ 239 - 0
src/views/IceCreamFreezer/storeManagement.vue

@@ -0,0 +1,239 @@
+<template>
+  <!-- 门店管理 -->
+  <div class="home">
+    <actionBar :operateList="operateList" :formList="formList" :ruleForm="searchRuleForm" @openModel="openModel"
+      @searchProtocol="searchProtocol"></actionBar>
+    <div class="card_content">
+      <!-- 表单 -->
+      <tables :suspension="true" :tableList="tableList" :tableData="tableData" @buttonData="buttonData"></tables>
+      <!-- 分页 -->
+      <div v-if="Total">
+        <pagination :total="Total" :currentPage="Pagination.PageIndex" @changeSize="changeSize"
+          @changeCurrent="changeCurrent">
+        </pagination>
+      </div>
+    </div>
+    <el-dialog :title="staffTitle" :visible.sync="staffDialogVisible" width="600px" :close-on-click-modal="false"
+      @close="closeDialog">
+      <forms ref="childRules" :formNewList="formRuleList" :ruleForm="ruleForm" labelWidth="120px">
+      </forms>
+      <span slot="footer" class="dialog-footer" v-if="operationType != 'logs'">
+        <el-button plain @click="staffDialogVisible = false">取 消</el-button>
+        <el-button type="primary" :loading="confirmLoading" @click="handleAdd">确 定</el-button>
+      </span>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+  import {
+    getAddress,
+    addAddress,
+    putAddress,
+    delAddress
+  } from '@/api/address'
+  import actionBar from '@/components/actionBar'
+  import tables from '@/components/tables'
+  import pagination from '@/components/pagination'
+  import forms from '@/components/forms'
+  import {
+    formRules,
+    employee,
+  } from "./store.js";
+  export default {
+    name: 'storeManagement',
+    components: {
+      actionBar,
+      tables,
+      pagination,
+      forms
+    },
+    data() {
+      return {
+        operateList: [{
+          type: 'add',
+          title: '添加',
+          icon: 'el-icon-plus',
+        }],
+        formList: [{
+          type: 'input',
+          label: '关键字',
+          field: 'name',
+          placeholder: '请输入关键字快速查找',
+        }],
+        searchRuleForm: {
+          name: '',
+        },
+        searchValue: {},
+        Pagination: {
+          PageIndex: 1,
+          PageSize: 10,
+        },
+        Total: 0,
+        tableData: [],
+        operationType: '',
+        tableList: employee(),
+        staffTitle: '添加',
+        staffDialogVisible: false,
+        formRuleList: [],
+        ruleForm: {
+          name: '',
+          phone: '',
+          address: '',
+          addressType: '',
+        },
+        confirmLoading: false,
+        selectingData: {},
+      }
+    },
+    mounted() {
+      this.getList()
+    },
+    methods: {
+      // 搜索
+      searchProtocol(value) {
+        this.Pagination.PageIndex = 1
+        this.searchValue = value
+        this.getList()
+      },
+      // 获取列表
+      getList() {
+        var params = {
+          page: this.Pagination.PageIndex,
+          pageSize: this.Pagination.PageSize,
+          ...this.searchValue
+        }
+        getAddress(params).then(res => {
+          if (res.code == 200) {
+            this.tableData = res.data.list
+            this.Total = res.data.count
+          }
+        })
+      },
+      // 弹窗表单添加
+      handleAdd() {
+        let flag = this.$refs['childRules'].validateForm();
+        if (flag) {
+          if (this.operationType == 'add') {
+            this.confirmLoading = true
+            var params = {
+              ...this.ruleForm
+            }
+            params.addressType = 'consignee'
+            addAddress(params).then(res => {
+              if (res.code == 200) {
+                this.$message({
+                  message: '操作成功',
+                  type: 'success'
+                });
+                this.getList()
+              }
+              this.staffDialogVisible = false
+              this.confirmLoading = false
+            }).catch(() => {
+              this.confirmLoading = false
+            })
+          } else if (this.operationType == 'edit') {
+            this.confirmLoading = true
+            var params = {
+              id: this.selectingData.id,
+              name: this.ruleForm.name,
+              phone: this.ruleForm.phone,
+              address: this.ruleForm.address,
+              addressType: this.ruleForm.addressType,
+            }
+            putAddress(params).then(res => {
+              if (res.code == 200) {
+                this.$message({
+                  message: '操作成功',
+                  type: 'success'
+                });
+                this.getList()
+              }
+              this.staffDialogVisible = false
+              this.confirmLoading = false
+            }).catch(() => {
+              this.confirmLoading = false
+            })
+          }
+        } else {
+          this.$message.error('表单信息不完整,请继续填写完整');
+        }
+      },
+      buttonData(row, type) {
+        const dataList = formRules();
+        this.formRuleList = dataList;
+        this.selectingData = row
+        this.operationType = type
+        if (type == 'edit') {
+          this.staffTitle = '编辑'
+          this.staffDialogVisible = true
+          setTimeout(() => {
+            this.$nextTick(() => {
+              this.ruleForm.name = row.name
+              this.ruleForm.phone = row.phone
+              this.ruleForm.address = row.address
+              this.ruleForm.addressType = row.addressType
+            })
+          })
+        } else if (type == 'logs') {
+          this.staffTitle = '详情'
+          this.staffDialogVisible = true
+          this.formRuleList.forEach((item, index) => {
+            item.disabled = true
+          })
+          this.ruleForm = JSON.parse(JSON.stringify(row))
+        } else if (type == 'del') {
+          this.deleteUser(row.id)
+        }
+      },
+      openModel(type) {
+        const dataList = formRules();
+        this.formRuleList = dataList;
+        this.staffTitle = '添加'
+        this.staffDialogVisible = true
+        this.operationType = type
+      },
+      // 删除该地址
+      deleteUser(id) {
+        this.$confirm('此操作将永久删除该地址, 是否继续?', '提示', {
+          confirmButtonText: '确定',
+          cancelButtonText: '取消',
+          type: 'warning'
+        }).then(() => {
+          delAddress({
+            id: id,
+          }).then(res => {
+            if (res.code == 200) {
+              this.$message({
+                message: '操作成功',
+                type: 'success'
+              });
+
+              const precisePage = Math.ceil((this.Total - 1) / this.Pagination.PageSize)
+              this.Pagination.PageIndex = this.Pagination.PageIndex > precisePage ? precisePage : this
+                .Pagination.PageIndex
+              this.Pagination.PageIndex = this.Pagination.PageIndex < 1 ? 1 : this.Pagination.PageIndex
+              this.getList()
+            }
+          })
+        }).catch(() => {});
+      },
+      changeSize(val) {
+        this.Pagination.PageSize = val
+        this.getList()
+      },
+      changeCurrent(val) {
+        this.Pagination.PageIndex = val
+        this.getList()
+      },
+      // 清空表单
+      closeDialog() {
+        this.$refs.childRules.resetCheck();
+      }
+    }
+  }
+</script>
+
+<style lang="scss">
+</style>

+ 24 - 1
src/views/OrderManagement/cancelledOrder.vue

@@ -17,6 +17,8 @@
         </pagination>
       </div>
     </div>
+    <orderDetails ref="order" :waybillData="waybillData"></orderDetails>
+    <prescriptionPicture ref="picture" :srcList="srcList" :fileList="fileList"></prescriptionPicture>
   </div>
 </template>
 
@@ -24,6 +26,8 @@
   import actionBar from '@/components/actionBar'
   import tables from '@/components/tables'
   import pagination from '@/components/pagination'
+  import orderDetails from '@/components/orderDetails'
+  import prescriptionPicture from '@/components/prescriptionPicture'
   import {
     employee,
   } from "./uncertain.js";
@@ -36,6 +40,8 @@
       actionBar,
       tables,
       pagination,
+      orderDetails,
+      prescriptionPicture
     },
     data() {
       return {
@@ -97,7 +103,16 @@
           label: '处方',
           icon: 'el-icon-tickets',
           style: 'primary',
-        }]
+        }],
+        waybillData: {},
+        srcList: [],
+        fileList: [{
+          name: 'food.jpeg',
+          url: 'https://fuss10.elemecdn.com/3/63/4e7f3a15429bfda99bce42a18cdd1jpeg.jpeg?imageMogr2/thumbnail/360x360/format/webp/quality/100'
+        }, {
+          name: 'food2.jpeg',
+          url: 'https://fuss10.elemecdn.com/8/27/f01c15bb73e1ef3793e64e6b7bbccjpeg.jpeg'
+        }],
       }
     },
     mounted() {
@@ -125,6 +140,14 @@
       },
       buttonData(row, type) {
         this.operationType = type
+        if (type == 'logs') {
+          this.$refs.order.staffDialogVisible = true
+          this.waybillData = row
+        } else if (type == 'send') {
+          const urls = this.fileList.map(obj => obj.url)
+          this.srcList = urls
+          this.$refs.picture.prescriptionVisible = true
+        }
       },
       changeSize(val) {
         this.Pagination.PageSize = val

+ 7 - 2
src/views/OrderManagement/completed.js

@@ -9,11 +9,16 @@ export const employee = () => {
     align: 'center',
   }, {
     field: 'waybillNo',
-    label: '订单编号',
+    label: '运单号',
     align: 'center',
     colWidth: '180px',
   }, {
     field: 'orderNo',
+    label: '订单号',
+    align: 'center',
+    colWidth: '180px',
+  }, {
+    field: 'name',
     label: '门店名称',
     align: 'center',
     colWidth: '180px',
@@ -53,7 +58,7 @@ export const employee = () => {
     }, ]
   }, {
     field: 'multistage',
-    label: '收件人',
+    label: '患者信息',
     children: [{
       field: 'consigneeAddressName',
       label: '姓名',

+ 25 - 1
src/views/OrderManagement/completedOrder.vue

@@ -17,6 +17,8 @@
         </pagination>
       </div>
     </div>
+    <orderDetails ref="order" :waybillData="waybillData"></orderDetails>
+    <prescriptionPicture ref="picture" :srcList="srcList" :fileList="fileList"></prescriptionPicture>
   </div>
 </template>
 
@@ -24,6 +26,8 @@
   import actionBar from '@/components/actionBar'
   import tables from '@/components/tables'
   import pagination from '@/components/pagination'
+  import orderDetails from '@/components/orderDetails'
+  import prescriptionPicture from '@/components/prescriptionPicture'
   import {
     employee,
   } from "./completed.js";
@@ -36,6 +40,8 @@
       actionBar,
       tables,
       pagination,
+      orderDetails,
+      prescriptionPicture
     },
     data() {
       return {
@@ -97,7 +103,16 @@
           label: '处方',
           icon: 'el-icon-tickets',
           style: 'primary',
-        }]
+        }],
+        waybillData: {},
+        srcList: [],
+        fileList: [{
+          name: 'food.jpeg',
+          url: 'https://fuss10.elemecdn.com/3/63/4e7f3a15429bfda99bce42a18cdd1jpeg.jpeg?imageMogr2/thumbnail/360x360/format/webp/quality/100'
+        }, {
+          name: 'food2.jpeg',
+          url: 'https://fuss10.elemecdn.com/8/27/f01c15bb73e1ef3793e64e6b7bbccjpeg.jpeg'
+        }],
       }
     },
     mounted() {
@@ -125,6 +140,15 @@
       },
       buttonData(row, type) {
         this.operationType = type
+        this.operationType = type
+        if (type == 'logs') {
+          this.$refs.order.staffDialogVisible = true
+          this.waybillData = row
+        } else if (type == 'send') {
+          const urls = this.fileList.map(obj => obj.url)
+          this.srcList = urls
+          this.$refs.picture.prescriptionVisible = true
+        }
       },
       changeSize(val) {
         this.Pagination.PageSize = val

+ 26 - 3
src/views/OrderManagement/deliveryOrder.vue

@@ -7,7 +7,7 @@
     </div>
     <div class="card_content">
       <!-- 表单 -->
-      <tables ref="refWaybill" controlswidth="280px" tableHeight="68vh" :suspension="true" :tableList="tableList"
+      <tables ref="refWaybill" controlswidth="270px" tableHeight="68vh" :suspension="true" :tableList="tableList"
         :tableData="tableData" @buttonData="buttonData">
       </tables>
       <!-- 分页 -->
@@ -17,6 +17,8 @@
         </pagination>
       </div>
     </div>
+    <orderDetails ref="order" :waybillData="waybillData"></orderDetails>
+    <prescriptionPicture ref="picture" :srcList="srcList" :fileList="fileList"></prescriptionPicture>
   </div>
 </template>
 
@@ -27,6 +29,8 @@
   import actionBar from '@/components/actionBar'
   import tables from '@/components/tables'
   import pagination from '@/components/pagination'
+  import orderDetails from '@/components/orderDetails'
+  import prescriptionPicture from '@/components/prescriptionPicture'
   import {
     employee,
   } from "./ordered.js";
@@ -39,6 +43,8 @@
       actionBar,
       tables,
       pagination,
+      orderDetails,
+      prescriptionPicture
     },
     data() {
       return {
@@ -99,11 +105,20 @@
           icon: 'el-icon-tickets',
           style: 'primary',
         }, {
-          type: 'del',
+          type: 'delOrder',
           label: '取消订单',
           icon: 'el-icon-delete',
           style: 'danger',
-        }]
+        }],
+        waybillData: {},
+        srcList: [],
+        fileList: [{
+          name: 'food.jpeg',
+          url: 'https://fuss10.elemecdn.com/3/63/4e7f3a15429bfda99bce42a18cdd1jpeg.jpeg?imageMogr2/thumbnail/360x360/format/webp/quality/100'
+        }, {
+          name: 'food2.jpeg',
+          url: 'https://fuss10.elemecdn.com/8/27/f01c15bb73e1ef3793e64e6b7bbccjpeg.jpeg'
+        }],
       }
     },
     mounted() {
@@ -153,6 +168,14 @@
       },
       buttonData(row, type) {
         this.operationType = type
+        if (type == 'logs') {
+          this.$refs.order.staffDialogVisible = true
+          this.waybillData = row
+        } else if (type == 'send') {
+          const urls = this.fileList.map(obj => obj.url)
+          this.srcList = urls
+          this.$refs.picture.prescriptionVisible = true
+        }
       },
       changeSize(val) {
         this.Pagination.PageSize = val

+ 7 - 2
src/views/OrderManagement/ordered.js

@@ -9,11 +9,16 @@ export const employee = () => {
     align: 'center',
   }, {
     field: 'waybillNo',
-    label: '订单编号',
+    label: '运单号',
     align: 'center',
     colWidth: '180px',
   }, {
     field: 'orderNo',
+    label: '订单号',
+    align: 'center',
+    colWidth: '180px',
+  }, {
+    field: 'name',
     label: '门店名称',
     align: 'center',
     colWidth: '180px',
@@ -53,7 +58,7 @@ export const employee = () => {
     }, ]
   }, {
     field: 'multistage',
-    label: '收件人',
+    label: '患者信息',
     children: [{
       field: 'consigneeAddressName',
       label: '姓名',

+ 93 - 25
src/views/OrderManagement/pendingOrder.vue

@@ -17,21 +17,27 @@
         </pagination>
       </div>
     </div>
-    <el-dialog title="派单" :visible.sync="sendDialogVisible" width="500px" :close-on-click-modal="false"
+    <orderDetails ref="order" :waybillData="waybillData"></orderDetails>
+    <el-dialog title="派单" :visible.sync="sendDialogVisible" width="800px" :close-on-click-modal="false"
       @close="closeDialog">
-      <forms ref="sendRules" :formNewList="sendRuleList" :ruleForm="sendRuleForm" :iceTracing="true" :iceBank="true"
-        labelWidth="80px" @handleScroll="handleScroll" @remoteMethod="remoteMethod" @changeOption="changeOption">
+      <forms ref="sendRules" :formNewList="sendRuleList" :ruleForm="sendRuleForm" :formIceTracing="true"
+        :iceTracing="true" :iceBank="true" labelWidth="80px" @handleScroll="handleScroll" @remoteMethod="remoteMethod"
+        @changeOption="changeOption">
       </forms>
       <span slot="footer" class="dialog-footer">
         <el-button plain @click="sendDialogVisible = false">取 消</el-button>
         <el-button type="primary" :loading="sendConfirmLoading" @click.stop="sendHandleAdd">确 定</el-button>
       </span>
     </el-dialog>
+    <prescriptionPicture ref="picture" :srcList="srcList" :fileList="fileList"></prescriptionPicture>
   </div>
 </template>
 
 <script>
   import {
+    getWaybill
+  } from '@/api/waybill'
+  import {
     getCoolerBox,
     getRaftCoolerBox
   } from '@/api/incubator.js'
@@ -39,6 +45,8 @@
   import tables from '@/components/tables'
   import pagination from '@/components/pagination'
   import forms from '@/components/forms'
+  import orderDetails from '@/components/orderDetails'
+  import prescriptionPicture from '@/components/prescriptionPicture'
   import {
     employee,
     sendList
@@ -55,7 +63,9 @@
       actionBar,
       tables,
       pagination,
-      forms
+      forms,
+      orderDetails,
+      prescriptionPicture
     },
     data() {
       return {
@@ -123,10 +133,10 @@
         }, {
           type: 'sign',
           label: '分配',
-          icon: 'el-icon-folder-checked',
+          icon: 'el-icon-share',
           style: 'warning',
         }, {
-          type: 'del',
+          type: 'delOrder',
           label: '取消订单',
           icon: 'el-icon-delete',
           style: 'danger',
@@ -143,6 +153,15 @@
         limitNo: true,
         sendOrdersId: 2,
         waybillIdList: [],
+        waybillData: {},
+        srcList: [],
+        fileList: [{
+          name: 'food.jpeg',
+          url: 'https://fuss10.elemecdn.com/3/63/4e7f3a15429bfda99bce42a18cdd1jpeg.jpeg?imageMogr2/thumbnail/360x360/format/webp/quality/100'
+        }, {
+          name: 'food2.jpeg',
+          url: 'https://fuss10.elemecdn.com/8/27/f01c15bb73e1ef3793e64e6b7bbccjpeg.jpeg'
+        }],
       }
     },
     mounted() {
@@ -153,6 +172,7 @@
         }
       })
       this.tableList = arr
+      this.getList()
     },
     methods: {
       // 搜索
@@ -165,8 +185,29 @@
         }
         this.getList()
       },
+      // 获取运单列表
+      getList() {
+        var params = {
+          page: this.Pagination.PageIndex,
+          pageSize: this.Pagination.PageSize,
+          ...this.searchValue
+        }
+        delete params.time
+        getWaybill(params).then(res => {
+          if (res.code == 200) {
+            this.tableData = res.data.list
+            this.tableData.forEach(item => {
+              if (item.iceRaftCode) {
+                item.iceRaftCode = item.iceRaftCode.toString()
+              }
+              item.visible = false
+            })
+            this.Total = res.data.count
+          }
+        })
+      },
       async openModel(type) {
-        console.log(type, 87)
+        // console.log(type, 87)
         this.operationType = type
         if (type == 'sends') {
           this.sendDialogVisible = true
@@ -176,11 +217,24 @@
               item.options = arr
             }
           })
+          this.sendRuleList.forEach(item => {
+            if (item.field == 'deliveryId') {
+              item.options = arr
+            }
+          })
           this.getIncubator(2)
         }
       },
       buttonData(row, type) {
         this.operationType = type
+        if (type == 'logs') {
+          this.$refs.order.staffDialogVisible = true
+          this.waybillData = row
+        } else if (type == 'send') {
+          const urls = this.fileList.map(obj => obj.url)
+          this.srcList = urls
+          this.$refs.picture.prescriptionVisible = true
+        }
       },
       // 触底事件
       handleScroll() {
@@ -190,15 +244,27 @@
       },
       // 搜索
       remoteMethod(value, type) {
-        console.log(value, type,236)
-        this.resetSelect()
+        this.resetSelect(type)
         this.staffName = value
-        // this.getIncubator(this.sendOrdersId)
+        if (type == 'coolerBoxId') {
+          this.getIncubator(this.sendOrdersId)
+        } else {
+          this.searchAssignment(type)
+        }
+      },
+      // 搜索赋值
+      async searchAssignment(type) {
+        var arr = await this.getUserList()
+        this.sendRuleList.forEach(item => {
+          if (item.field == type) {
+            item.options = arr
+          }
+        })
       },
       // 重置选择员工
-      resetSelect() {
+      resetSelect(type) {
         this.sendRuleList.forEach(item => {
-          if (item.field == 'reCheckId') {
+          if (item.field == type) {
             item.options = []
           }
         })
@@ -301,7 +367,7 @@
             page: 1,
             pageSize: 999,
             // type: 3,
-            name: this.delivererName,
+            name: this.staffName,
           }
           getUser(params).then(res => {
             if (res.code == 200) {
@@ -324,17 +390,19 @@
         })
       },
       // 获取保温箱搜索选择框数据
-      changeOption(id) {
-        getRaftCoolerBox({
-          coolerBoxId: id
-        }).then(res => {
-          if (res.code == 200) {
-            if (res.data) {
-              this.sendRuleForm.code = res.data
-              this.$refs.sendRules.inputsList = res.data
+      changeOption(id, field) {
+        if (field == 'coolerBoxId') {
+          getRaftCoolerBox({
+            coolerBoxId: id
+          }).then(res => {
+            if (res.code == 200) {
+              if (res.data) {
+                this.sendRuleForm.code = res.data
+                this.$refs.sendRules.inputsList = res.data
+              }
             }
-          }
-        })
+          })
+        }
       },
       changeSize(val) {
         this.Pagination.PageSize = val
@@ -346,11 +414,11 @@
       },
       // 清空表单
       closeDialog() {
-        this.$refs.sendRules.resetCheck();
+        // this.$refs.sendRules.resetCheck();
       },
     },
   }
 </script>
 
-<style lang="scss">
+<style lang="scss" scoped>
 </style>

+ 117 - 11
src/views/OrderManagement/reviewedOrder.vue

@@ -7,7 +7,7 @@
     </div>
     <div class="card_content">
       <!-- 表单 -->
-      <tables ref="refWaybill" controlswidth="340px" tableHeight="68vh" :suspension="true" :tableList="tableList"
+      <tables ref="refWaybill" controlswidth="270px" tableHeight="68vh" :suspension="true" :tableList="tableList"
         :tableData="tableData" @buttonData="buttonData">
       </tables>
       <!-- 分页 -->
@@ -17,15 +17,38 @@
         </pagination>
       </div>
     </div>
+    <!-- 处方 -->
+    <prescriptionPicture ref="picture" :srcList="srcList" :fileList="fileList"></prescriptionPicture>
+    <el-dialog title="订单详情" :visible.sync="auditDialogVisible" width="800px" :close-on-click-modal="false"
+      @close="closeDialog1">
+      <forms ref="auditRules" beyondHeight="700px" :formNewList="auditRuleList" :ruleForm="auditRuleForm"
+        labelWidth="130px">
+      </forms>
+      <el-divider>复核内容审批</el-divider>
+      <forms ref="auditRules1" :formNewList="reviewContent" :ruleForm="reviewRuleForm" labelWidth="180px">
+      </forms>
+      <span slot="footer" class="dialog-footer">
+        <el-button plain @click="auditDialogVisible = false">取 消</el-button>
+        <el-button type="primary" :loading="auditConfirmLoading" @click="auditHandleAdd">确 定</el-button>
+      </span>
+    </el-dialog>
   </div>
 </template>
 
 <script>
+  import {
+    getWaybill,
+  } from '@/api/waybill'
   import actionBar from '@/components/actionBar'
   import tables from '@/components/tables'
   import pagination from '@/components/pagination'
+  import orderDetails from '@/components/orderDetails'
+  import prescriptionPicture from '@/components/prescriptionPicture'
+  import forms from '@/components/forms'
   import {
     employee,
+    auditList,
+    examineList
   } from "./uncertain.js";
   import {
     WaybillStatus
@@ -36,6 +59,9 @@
       actionBar,
       tables,
       pagination,
+      orderDetails,
+      prescriptionPicture,
+      forms
     },
     data() {
       return {
@@ -86,26 +112,59 @@
         tableData: [],
         tableList: [],
         btnData: [{
-          type: 'logs',
-          label: '详情',
-          icon: 'el-icon-tickets',
-          style: 'success',
-        }, {
           type: 'send',
           label: '处方',
           icon: 'el-icon-tickets',
           style: 'primary',
         }, {
-          type: 'sign',
-          label: '分配',
-          icon: 'el-icon-folder-checked',
+          type: 'audit',
+          label: '审核',
+          icon: 'el-icon-share',
           style: 'warning',
         }, {
-          type: 'del',
+          type: 'delOrder',
           label: '取消订单',
           icon: 'el-icon-delete',
           style: 'danger',
-        }]
+        }],
+        srcList: [],
+        fileList: [{
+          name: 'food.jpeg',
+          url: 'https://fuss10.elemecdn.com/3/63/4e7f3a15429bfda99bce42a18cdd1jpeg.jpeg?imageMogr2/thumbnail/360x360/format/webp/quality/100'
+        }, {
+          name: 'food2.jpeg',
+          url: 'https://fuss10.elemecdn.com/8/27/f01c15bb73e1ef3793e64e6b7bbccjpeg.jpeg'
+        }],
+
+        auditDialogVisible: false,
+        auditRuleList: auditList(),
+        auditRuleForm: {
+          confirmName: '',
+          confirmPhoneNumber: '',
+          reviewName: '',
+          reviewPhoneNumber: '',
+          orderNo: '',
+          nameCode: '',
+          name: '',
+          type: '',
+          deliveryTime: '',
+          status: '',
+          remark: '',
+          consigneeAddressName: '',
+          consigneeAddressPhone: '',
+          consigneeAddressDetails: '',
+          domicile: '',
+          tamperProofLabelImg: '',
+        },
+        auditConfirmLoading: false,
+        reviewContent: examineList(),
+        reviewRuleForm: {
+          status: 1,
+          status1: 1,
+          status2: 1,
+          status3: 1,
+          status4: 1,
+        },
       }
     },
     mounted() {
@@ -116,6 +175,7 @@
         }
       })
       this.tableList = arr
+      this.getList()
     },
     methods: {
       // 搜索
@@ -128,11 +188,53 @@
         }
         this.getList()
       },
+      // 获取订单列表
+      getList() {
+        var params = {
+          page: this.Pagination.PageIndex,
+          pageSize: this.Pagination.PageSize,
+          ...this.searchValue
+        }
+        delete params.time
+        getWaybill(params).then(res => {
+          if (res.code == 200) {
+            this.tableData = res.data.list
+            this.tableData.forEach(item => {
+              if (item.iceRaftCode) {
+                item.iceRaftCode = item.iceRaftCode.toString()
+              }
+              item.visible = false
+            })
+            this.Total = res.data.count
+          }
+        })
+      },
       openModel(type) {
         this.operationType = type
       },
+      // 订单审核
+      auditHandleAdd() {
+        let flag = this.$refs['auditRules'].validateForm();
+        if (flag) {
+          this.auditConfirmLoading = true
+          let params = {
+            waybillNo: this.waybillNo,
+            ...this.auditRuleForm,
+          }
+          console.log(params, 'ad')
+        } else {
+          this.$message.error('表单信息不完整,请继续填写完整');
+        }
+      },
       buttonData(row, type) {
         this.operationType = type
+        if (type == 'send') {
+          const urls = this.fileList.map(obj => obj.url)
+          this.srcList = urls
+          this.$refs.picture.prescriptionVisible = true
+        } else if (type == 'audit') {
+          this.auditDialogVisible = true
+        }
       },
       changeSize(val) {
         this.Pagination.PageSize = val
@@ -142,6 +244,10 @@
         this.Pagination.PageIndex = val
         this.getList()
       },
+      // 清空表单
+      closeDialog1() {
+        this.$refs.auditRules.resetCheck();
+      },
     },
   }
 </script>

+ 354 - 52
src/views/OrderManagement/uncertain.js

@@ -9,25 +9,30 @@ export const employee = () => {
     align: 'center',
   }, {
     field: 'waybillNo',
-    label: '订单编号',
+    label: '运单号',
     align: 'center',
     colWidth: '180px',
   }, {
     field: 'orderNo',
+    label: '订单号',
+    align: 'center',
+    colWidth: '180px',
+  }, {
+    field: 'name',
     label: '门店名称',
     align: 'center',
     colWidth: '180px',
   }, {
     field: 'status',
-    label: '配送类型',
+    label: '订单状态',
     align: 'center',
     options: WaybillStatus(),
-    colWidth: '180px',
+    colWidth: '130px',
   }, {
-    field: 'tamperProofLabel',
-    label: '患者要求送达时间',
+    field: 'type',
+    label: '配送类型',
     align: 'center',
-    colWidth: '180px',
+    colWidth: '130px',
   }, {
     field: 'consigneeAddressName',
     label: '患者名称',
@@ -44,6 +49,11 @@ export const employee = () => {
     align: 'center',
     colWidth: '180px',
   }, {
+    field: 'tamperProofLabel',
+    label: '患者要求送达时间',
+    align: 'center',
+    colWidth: '180px',
+  }, {
     field: 'deliveryTime',
     label: '医保归属地',
     align: 'center',
@@ -124,7 +134,7 @@ export const sendList = () => {
     type: 'searchSelect',
     label: '复核人',
     placeholder: '请选择复核人',
-    colWidth: 24,
+    colWidth: 12,
     multiple: false,
     rules: [{
       required: true,
@@ -137,7 +147,7 @@ export const sendList = () => {
     type: 'searchSelect',
     label: '配送员',
     placeholder: '请选择配送员',
-    colWidth: 24,
+    colWidth: 12,
     multiple: false,
     rules: [{
       required: true,
@@ -150,7 +160,7 @@ export const sendList = () => {
     type: 'searchSelect',
     label: '保温箱',
     placeholder: '请选择保温箱',
-    colWidth: 24,
+    colWidth: 12,
     multiple: false,
     rules: [{
       required: true,
@@ -163,14 +173,348 @@ export const sendList = () => {
     label: '冰排编号',
     placeholder: '请输入冰排编号',
     type: 'scan',
-    colWidth: 24,
+    colWidth: 12,
     rules: [{
       required: true,
       message: '请输入冰排编号',
       trigger: 'blur'
     }]
+  }, {
+    field: 'tamperProofLabelImg',
+    label: '防拆标签图片',
+    placeholder: '请上传防拆标签图片',
+    type: 'upload',
+    colWidth: 12,
+    crosswise: true,
+    rules: [{
+      required: false,
+      message: '请上传防拆标签图片',
+      trigger: 'blur,change'
+    }]
+  }, {
+    field: 'tamperProofLabel',
+    label: '区块链防拆标签码',
+    placeholder: '请输入区块链防拆标签码',
+    type: 'input',
+    colWidth: 24,
+    rules: [{
+      required: false,
+      message: '请输入区块链防拆标签码',
+      trigger: 'blur'
+    }]
+  }, {
+    field: 'remark',
+    label: '备注',
+    placeholder: '备注',
+    type: 'textarea',
+    colWidth: 24,
+  }, ]
+}
+
+function validatePassword(rule, value, callback) {
+  // 假设正确的密码是 '123456'
+  if (value === 3 || value === 4) {
+    callback(); // 验证通过
+  } else {
+    callback('请选择签收状态'); // 验证不通过
+  }
+}
+
+export const signList = () => {
+  return [{
+    field: 'reCheckId',
+    type: 'searchSelect',
+    label: '门店',
+    placeholder: '请选择门店',
+    colWidth: 24,
+    multiple: false,
+    rules: [{
+      required: true,
+      message: '请选择门店',
+      trigger: 'blur,change'
+    }],
+    options: [],
+  }, {
+    field: 'rejectionReason',
+    label: '原因',
+    placeholder: '请输入原因',
+    type: 'textarea',
+    colWidth: 24,
+  }]
+}
+export const auditList = () => {
+  return [{
+    field: 'confirmName',
+    label: '确认人姓名',
+    placeholder: '请输入确认人姓名',
+    type: 'input',
+    colWidth: 12,
+    rules: [{
+      required: false,
+      message: '请输入确认人姓名',
+      trigger: 'blur'
+    }]
+  }, {
+    field: 'confirmPhoneNumber',
+    label: '确认人手机号',
+    placeholder: '请输入确认人手机号',
+    type: 'input',
+    colWidth: 12,
+    rules: [{
+      required: false,
+      message: '请输入确认人手机号',
+      trigger: 'blur'
+    }]
+  }, {
+    field: 'reviewName',
+    label: '审核人姓名',
+    placeholder: '请输入审核人姓名',
+    type: 'input',
+    colWidth: 12,
+    rules: [{
+      required: false,
+      message: '请输入审核人姓名',
+      trigger: 'blur'
+    }]
+  }, {
+    field: 'reviewPhoneNumber',
+    label: '审核人手机号',
+    placeholder: '请输入审核人手机号',
+    type: 'input',
+    colWidth: 12,
+    rules: [{
+      required: false,
+      message: '请输入审核人手机号',
+      trigger: 'blur'
+    }]
+  }, {
+    field: 'orderNo',
+    label: '订单编号',
+    placeholder: '请输入订单编号',
+    type: 'input',
+    colWidth: 12,
+    rules: [{
+      required: false,
+      message: '请输入订单编号',
+      trigger: 'blur'
+    }]
+  }, {
+    field: 'nameCode',
+    label: '门店编码',
+    placeholder: '请输入门店编码',
+    type: 'input',
+    colWidth: 12,
+    rules: [{
+      required: false,
+      message: '请输入门店编码',
+      trigger: 'blur'
+    }]
+  }, {
+    field: 'name',
+    label: '门店名称',
+    placeholder: '请输入门店名称',
+    type: 'input',
+    colWidth: 12,
+    rules: [{
+      required: false,
+      message: '请输入门店名称',
+      trigger: 'blur'
+    }]
+  }, {
+    field: 'type',
+    label: '配送类型',
+    placeholder: '配送类型',
+    type: 'input',
+    colWidth: 12,
+    rules: [{
+      required: false,
+      message: '配送类型',
+      trigger: 'blur'
+    }]
+  }, {
+    field: 'deliveryTime',
+    label: '患者要求送达时间',
+    placeholder: '患者要求送达时间',
+    type: 'input',
+    colWidth: 12,
+    rules: [{
+      required: false,
+      message: '患者要求送达时间',
+      trigger: 'blur'
+    }]
+  }, {
+    field: 'status',
+    label: '订单状态',
+    placeholder: '订单状态',
+    type: 'input',
+    colWidth: 12,
+    rules: [{
+      required: false,
+      message: '订单状态',
+      trigger: 'blur'
+    }]
+  }, {
+    field: 'remark',
+    label: '订单备注',
+    placeholder: '请输入订单备注',
+    type: 'input',
+    colWidth: 12,
+    rules: [{
+      required: false,
+      message: '请输入订单备注',
+      trigger: 'blur'
+    }]
+  }, {
+    field: 'consigneeAddressName',
+    label: '患者姓名',
+    placeholder: '请输入患者姓名',
+    type: 'input',
+    colWidth: 12,
+    rules: [{
+      required: false,
+      message: '请输入患者姓名',
+      trigger: 'blur'
+    }]
+  }, {
+    field: 'consigneeAddressPhone',
+    label: '患者手机号',
+    placeholder: '请输入患者手机号',
+    type: 'input',
+    colWidth: 12,
+    rules: [{
+      required: false,
+      message: '请输入患者手机号',
+      trigger: 'blur'
+    }]
+  }, {
+    field: 'consigneeAddressDetails',
+    label: '收货地址',
+    placeholder: '请输入收货地址',
+    type: 'input',
+    colWidth: 12,
+    rules: [{
+      required: false,
+      message: '请输入收货地址',
+      trigger: 'blur'
+    }]
+  }, {
+    field: 'domicile',
+    label: '医保归属地',
+    placeholder: '医保归属地',
+    type: 'input',
+    colWidth: 12,
+    rules: [{
+      required: false,
+      message: '医保归属地',
+      trigger: 'blur'
+    }]
+  }, {
+    field: 'tamperProofLabelImg',
+    label: '处方图片',
+    placeholder: '处方图片',
+    type: 'upload',
+    colWidth: 24,
+    crosswise: true,
+    rules: [{
+      required: false,
+      message: '处方图片',
+      trigger: 'blur,change'
+    }]
   }]
 }
+export const examineList = () => {
+  return [{
+    field: 'status',
+    label: '处方是否审核',
+    placeholder: '处方是否审核',
+    type: 'radio',
+    colWidth: 24,
+    rules: [{
+      required: false,
+      message: '请选择是否审核',
+      trigger: 'blur,change'
+    }],
+    options: [{
+      label: '已审核',
+      value: 0,
+    }, {
+      label: '未审核',
+      value: 1,
+    }]
+  },{
+    field: 'status4',
+    label: '发票/销售小票是否审核',
+    placeholder: '发票/销售小票是否审核',
+    type: 'radio',
+    colWidth: 24,
+    rules: [{
+      required: true,
+      message: '请选择是否审核',
+      trigger: 'blur,change'
+    }],
+    options: [{
+      label: '已审核',
+      value: 0,
+    }, {
+      label: '未审核',
+      value: 1,
+    }]
+  },{
+    field: 'status3',
+    label: '检验报告单是否审核',
+    placeholder: '检验报告单是否审核',
+    type: 'radio',
+    colWidth: 24,
+    rules: [{
+      required: false,
+      message: '请选择是否审核',
+      trigger: 'blur,change'
+    }],
+    options: [{
+      label: '已审核',
+      value: 0,
+    }, {
+      label: '未审核',
+      value: 1,
+    }]
+  },{
+    field: 'status2',
+    label: '调配药品信息是否审核',
+    placeholder: '调配药品信息是否审核',
+    type: 'radio',
+    colWidth: 24,
+    rules: [{
+      required: true,
+      message: '请选择是否审核',
+      trigger: 'blur,change'
+    }],
+    options: [{
+      label: '已审核',
+      value: 0,
+    }, {
+      label: '未审核',
+      value: 1,
+    }]
+  },{
+    field: 'status1',
+    label: '是否为冷链药品',
+    placeholder: '是否为冷链药品',
+    type: 'radio',
+    colWidth: 24,
+    rules: [{
+      required: true,
+      message: '请选择是否审核',
+      trigger: 'blur,change'
+    }],
+    options: [{
+      label: '是',
+      value: 0,
+    }, {
+      label: '否',
+      value: 1,
+    }]
+  }, ]
+}
 export const consignmentList = () => {
   return [{
     field: 'orderNo',
@@ -211,45 +555,3 @@ export const consignmentList = () => {
     options: [],
   }]
 }
-
-function validatePassword(rule, value, callback) {
-  // 假设正确的密码是 '123456'
-  if (value === 3 || value === 4) {
-    callback(); // 验证通过
-  } else {
-    callback('请选择签收状态'); // 验证不通过
-  }
-}
-
-export const signList = () => {
-  return [{
-    field: 'status',
-    label: '签收状态',
-    placeholder: '请选择签收状态',
-    type: 'radio',
-    colWidth: 24,
-    rules: [{
-      required: true,
-      message: '请选择签收状态',
-      trigger: 'blur,change'
-    }, {
-      validator: validatePassword,
-      trigger: 'blur'
-    }],
-    options: [{
-        label: '签收',
-        value: 3,
-      },
-      {
-        label: '拒收',
-        value: 4,
-      },
-    ]
-  }, {
-    field: 'rejectionReason',
-    label: '拒收原因',
-    placeholder: '请输入拒收原因',
-    type: 'textarea',
-    colWidth: 24,
-  }]
-}

+ 476 - 8
src/views/OrderManagement/uncertainOrder.vue

@@ -2,12 +2,12 @@
   <!-- 未确定订单 -->
   <div>
     <div ref="grabble">
-      <actionBar :formList="formList" :ruleForm="searchRuleForm" @openModel="openModel"
+      <actionBar :operateList="operateList" :formList="formList" :ruleForm="searchRuleForm" @openModel="openModel"
         @searchProtocol="searchProtocol"></actionBar>
     </div>
     <div class="card_content">
       <!-- 表单 -->
-      <tables ref="refWaybill" controlswidth="340px" tableHeight="68vh" :suspension="true" :tableList="tableList"
+      <tables ref="refWaybill" controlswidth="450px" tableHeight="68vh" :suspension="true" :tableList="tableList"
         :tableData="tableData" @buttonData="buttonData">
       </tables>
       <!-- 分页 -->
@@ -17,18 +17,86 @@
         </pagination>
       </div>
     </div>
+    <!-- 订单详情 -->
+    <orderDetails ref="order" :waybillData="waybillData"></orderDetails>
+    <!-- 处方 -->
+    <prescriptionPicture ref="picture" :srcList="srcList" :fileList="fileList"></prescriptionPicture>
+    <!-- 添加订单 -->
+    <el-dialog :title="staffTitle" :visible.sync="staffDialogVisible" width="800px" :close-on-click-modal="false"
+      @close="closePopup">
+      <forms ref="userRules" :formNewList="personnelList" :ruleForm="personnelForm" labelWidth="80px"
+        @remoteMethod="remoteSearch">
+      </forms>
+      <div class="waybill_item">
+        <waybillForm ref="recipients" title="患者信息" :conserveFlag="conserveFlag" thinTitle="患者簿"
+          :ruleForm="recipientsForm" @addressBook="getAddressBook('recipients')" @conserveSelect="conserveSelectil">
+        </waybillForm>
+      </div>
+      <forms ref="childRules" :formNewList="formRuleList" :ruleForm="ruleForm" labelWidth="80px">
+      </forms>
+      <el-dialog width="60%" title="地址簿" :visible.sync="innerVisible" append-to-body>
+        <div class="space_between_in" style="margin-bottom: 15px;">
+          <div style="display: flex;align-items: center;width: 100%;">
+            <h3 style="margin-left: 10px;flex: none;">搜索:</h3>
+            <el-input v-model="bookInput" style="width: 100%;" placeholder="请输入姓名、电话、地址快速查找"
+              @input="fastSearch()"></el-input>
+          </div>
+        </div>
+        <div class="card_book_list">
+          <!-- 表单 -->
+          <tables :suspension="true" :tableList="bookTableList" :tableData="bookTableData" @cellClick="cellClick"
+            @buttonData="buttonData">
+          </tables>
+          <!-- 分页 -->
+          <div v-if="bookTotal">
+            <pagination :total="bookTotal" :currentPage="bookPagination.PageIndex" @changeSize="bookChangeSize"
+              @changeCurrent="bookChangeCurrent">
+            </pagination>
+          </div>
+        </div>
+      </el-dialog>
+      <span slot="footer" class="dialog-footer">
+        <el-button plain @click="staffDialogVisible = false">取 消</el-button>
+        <el-button type="primary" :loading="confirmLoading" @click="handleAdd">确 定</el-button>
+      </span>
+    </el-dialog>
+    <el-dialog title="转门店" :visible.sync="signDialogVisible" width="500px" :close-on-click-modal="false"
+      @close="closeDialog1">
+      <forms ref="signRules" :formNewList="signRuleList" :ruleForm="signRuleForm" labelWidth="80px">
+      </forms>
+      <span slot="footer" class="dialog-footer">
+        <el-button plain @click="signDialogVisible = false">取 消</el-button>
+        <el-button type="primary" :loading="signConfirmLoading" @click="signHandleAdd">确 定</el-button>
+      </span>
+    </el-dialog>
   </div>
 </template>
 
 <script>
   import {
-    getWaybill
+    getWaybill,
+    addWaybill,
+    putWaybill,
   } from '@/api/waybill'
+  import {
+    getAddress
+  } from '@/api/address'
+  import {
+    getUser
+  } from '@/api/user'
   import actionBar from '@/components/actionBar'
   import tables from '@/components/tables'
   import pagination from '@/components/pagination'
+  import orderDetails from '@/components/orderDetails'
+  import prescriptionPicture from '@/components/prescriptionPicture'
+  import waybillForm from '@/components/waybillForm'
+  import forms from '@/components/forms'
   import {
     employee,
+    formRules,
+    consignmentList,
+    addressBook,
+    signList,
   } from "./uncertain.js";
   import {
     WaybillStatus
@@ -39,9 +107,23 @@
       actionBar,
       tables,
       pagination,
+      orderDetails,
+      prescriptionPicture,
+      waybillForm,
+      forms,
     },
     data() {
       return {
+        operateList: [{
+          type: 'sends',
+          title: '批量确定',
+          icon: 'el-icon-thumb',
+          colour: 'success'
+        }, {
+          type: 'add',
+          title: '添加订单',
+          icon: 'el-icon-plus',
+        }],
         formList: [{
           type: 'input',
           label: '订单编号',
@@ -89,6 +171,11 @@
         tableData: [],
         tableList: [],
         btnData: [{
+          type: 'confirm',
+          label: '确定',
+          icon: 'el-icon-thumb',
+          style: 'success',
+        }, {
           type: 'logs',
           label: '详情',
           icon: 'el-icon-tickets',
@@ -99,19 +186,79 @@
           icon: 'el-icon-tickets',
           style: 'primary',
         }, {
+          type: 'edit',
+          label: '修改',
+          icon: 'el-icon-edit',
+          style: 'success',
+        }, {
           type: 'sign',
-          label: '分配',
-          icon: 'el-icon-folder-checked',
+          label: '转门店',
+          icon: 'el-icon-share',
           style: 'warning',
         }, {
-          type: 'del',
+          type: 'delOrder',
           label: '取消订单',
           icon: 'el-icon-delete',
           style: 'danger',
-        }]
+        }],
+        waybillData: {},
+        srcList: [],
+        fileList: [{
+          name: 'food.jpeg',
+          url: 'https://fuss10.elemecdn.com/3/63/4e7f3a15429bfda99bce42a18cdd1jpeg.jpeg?imageMogr2/thumbnail/360x360/format/webp/quality/100'
+        }, {
+          name: 'food2.jpeg',
+          url: 'https://fuss10.elemecdn.com/8/27/f01c15bb73e1ef3793e64e6b7bbccjpeg.jpeg'
+        }],
+        staffTitle: '添加',
+        staffDialogVisible: false,
+        recipientsForm: {
+          name: '',
+          phone: '',
+          region: '',
+          address: '',
+        },
+        personnelList: consignmentList(),
+        personnelForm: {
+          orderNo: null,
+          reCheckId: null,
+          deliveryId: null,
+        },
+        delivererName: '',
+        ruleForm: {
+          tamperProofLabel: '',
+          tamperProofLabelImg: '',
+          remark: '',
+          fileList: [],
+        },
+        formRuleList: [],
+        conserveFlag: true,
+        saveConsigneeAddress: true,
+        innerVisible: false,
+        bookInput: '',
+        bookTableList: [],
+        bookTableData: [],
+        bookType: '',
+        bookPagination: {
+          PageIndex: 1,
+          PageSize: 10,
+        },
+        bookTotal: 0,
+        confirmLoading: false,
+        orderId: null,
+
+        signDialogVisible: false,
+        signRuleList: signList(),
+        signRuleForm: {
+          status: '',
+          rejectionReason: '',
+        },
+        signConfirmLoading: false,
       }
     },
     mounted() {
+      const dataList = formRules();
+      this.formRuleList = dataList;
       let arr = employee()
       arr.forEach(item => {
         if (item.field == 'unpackBtn') {
@@ -132,7 +279,7 @@
         }
         this.getList()
       },
-      // 获取单列表
+      // 获取单列表
       getList() {
         var params = {
           page: this.Pagination.PageIndex,
@@ -153,11 +300,316 @@
           }
         })
       },
+      // 获取地址簿
+      getAddressBook(type) {
+        this.bookTableList = addressBook()
+        this.bookType = type
+        this.innerVisible = true
+        this.getSenderSend()
+      },
+      // 快速搜索
+      fastSearch() {
+        this.bookPagination.PageIndex = 1
+        if (this.bookType == 'deliverer') {
+          this.getDelivererList()
+        }
+      },
+      // 获取寄/收列表
+      getSenderSend() {
+        let address = ''
+        if (this.bookType == 'recipients') {
+          address = 'consignee'
+        } else {
+          address = this.bookType
+        }
+        getAddress({
+          page: this.bookPagination.PageIndex,
+          pageSize: this.bookPagination.PageSize,
+          name: this.bookInput,
+          addressType: address,
+        }).then(res => {
+          if (res.code == 200) {
+            this.bookTableData = res.data.list
+            this.bookTotal = res.data.count
+          }
+        })
+      },
       openModel(type) {
         this.operationType = type
+        if (type == 'add') {
+          this.conserveFlag = true
+          this.staffTitle = '添加订单'
+          this.staffDialogVisible = true
+          this.$nextTick(() => {
+            // this.$refs.sender.radio = '1'
+            this.$refs.recipients.radio = '1'
+            this.getReviewerList()
+            this.getDelivererList()
+          })
+        } else if (type == 'sends') {
+          const arrID = this.$refs.refWaybill.waybillIds
+          console.log(arrID,3653)
+          if (arrID.length != 0) {
+            this.$message({
+              message: '操作成功',
+              type: 'success'
+            });
+          } else {
+            this.$message({
+              message: '请先选择需要批量操作的运单',
+              type: 'warning'
+            });
+          }
+        }
+      },
+      // 弹窗表单添加
+      async handleAdd() {
+        let senderFlag = this.$refs['userRules'].validateForm();
+        let recipientsFlag = this.$refs['recipients'].validateForm();
+        if (senderFlag && recipientsFlag) {
+          this.confirmLoading = true
+          var params = {
+            consigneeAddressName: this.recipientsForm.name,
+            consigneeAddressPhone: this.recipientsForm.phone,
+            consigneeAddressDetails: this.recipientsForm.address,
+            saveConsigneeAddress: this.saveConsigneeAddress,
+            orderNo: this.personnelForm.orderNo,
+            deliveryId: Number(this.personnelForm.deliveryId),
+            reCheckId: Number(this.personnelForm.reCheckId),
+            ...this.ruleForm
+          }
+          if (this.ruleForm.fileList) {
+            var fileImage = this.picture(this.ruleForm.fileList)
+            params.tamperProofLabelImg = fileImage
+          }
+          if (this.operationType == 'add') {
+            delete params.fileList
+            await addWaybill(params).then(res => {
+              if (res.code == 200) {
+                this.$message({
+                  message: '操作成功',
+                  type: 'success'
+                });
+                this.getList()
+              }
+              this.staffDialogVisible = false
+              this.confirmLoading = false
+            }).catch(() => {
+              this.confirmLoading = false
+            })
+          } else if (this.operationType == 'edit') {
+            delete params.fileList
+            params.id = this.orderId
+            await putWaybill(params).then(res => {
+              if (res.code == 200) {
+                this.$message({
+                  message: '操作成功',
+                  type: 'success'
+                });
+                this.getList()
+              }
+              this.staffDialogVisible = false
+              this.confirmLoading = false
+            }).catch(() => {
+              this.confirmLoading = false
+            })
+          }
+        } else {
+          this.$message.error('表单信息不完整,请继续填写完整');
+        }
+      },
+      picture(arr) {
+        var imgList = JSON.parse(JSON.stringify(arr))
+        var imgArr = []
+        imgList.forEach((item, index) => {
+          imgArr.push(item.url)
+        })
+        var imgString = imgArr.join()
+        return imgString
+      },
+      // 选择table其中某一项
+      cellClick(row) {
+        this.innerVisible = false
+        const param = {
+          ...row
+        }
+        if (this.bookType == 'recipients') {
+          this.recipientsForm = param
+          this.$nextTick(() => {
+            this.$refs.recipients.radio = ''
+            // this.$refs['recipients'].clickitem('1')
+            this.$refs['recipients'].validateForm();
+          })
+        } else if (this.bookType == 'deliverer') {
+          this.delivererForm.name = param.nickName
+          this.delivererForm.phone = param.phone
+          this.$nextTick(() => {
+            this.$refs['deliverer'].validateForm();
+          })
+        }
       },
       buttonData(row, type) {
         this.operationType = type
+        this.orderId = row.id
+        if (type == 'logs') {
+          this.$refs.order.staffDialogVisible = true
+          this.waybillData = row
+        } else if (type == 'send') {
+          const urls = this.fileList.map(obj => obj.url)
+          this.srcList = urls
+          this.$refs.picture.prescriptionVisible = true
+        } else if (type == 'confirm') {
+          this.$message({
+            message: '操作成功',
+            type: 'success'
+          });
+        } else if (type == 'edit') {
+          this.getReviewerList()
+          this.getDelivererList()
+          this.conserveFlag = false
+          this.staffTitle = '编辑'
+          this.staffDialogVisible = true
+          setTimeout(() => {
+            this.$nextTick(() => {
+              this.recipientsForm.name = row.consigneeAddressName
+              this.recipientsForm.phone = row.consigneeAddressPhone
+              this.recipientsForm.address = row.consigneeAddressDetails
+              this.ruleForm.tamperProofLabel = row.tamperProofLabel
+              this.personnelForm.orderNo = row.orderNo
+              this.personnelForm.reCheckId = String(row.reCheckId)
+              this.personnelForm.deliveryId = String(row.deliveryId)
+              if (row.tamperProofLabelImg) {
+                var arr = row.tamperProofLabelImg.split(',')
+                var arr3 = []
+                arr.forEach((item, index) => {
+                  var arr1 = {
+                    url: '',
+                  }
+                  arr1.url = item
+                  arr3.push(arr1)
+                })
+                this.ruleForm.fileList = arr3
+                this.ruleForm.tamperProofLabelImg = row.tamperProofLabelImg
+              }
+              this.ruleForm.remark = row.remark
+            })
+          })
+        } else if (type == 'sign') {
+          this.signDialogVisible = true
+          this.waybillNo = row.waybillNo
+        }
+      },
+      // 转门店
+      signHandleAdd() {
+        let flag = this.$refs['signRules'].validateForm();
+        if (flag) {
+          this.signConfirmLoading = true
+          let params = {
+            waybillNo: this.waybillNo,
+            ...this.signRuleForm,
+          }
+          console.log(params, 'ad')
+        } else {
+          this.$message.error('表单信息不完整,请继续填写完整');
+        }
+      },
+      remoteSearch(value, type) {
+        this.delivererName = value
+        if (type == 'deliveryId') {
+          this.personnelList.forEach(item => {
+            if (item.field == 'deliveryId') {
+              item.options = []
+            }
+          })
+          this.getDelivererList()
+        } else if (type == 'reCheckId') {
+          this.personnelList.forEach(item => {
+            if (item.field == 'reCheckId') {
+              item.options = []
+            }
+          })
+          this.getReviewerList()
+        }
+      },
+      // 复核人
+      getReviewerList() {
+        var params = {
+          page: 1,
+          pageSize: 999,
+          name: this.delivererName,
+        }
+        getUser(params).then(res => {
+          if (res.code == 200) {
+            let arr = res.data.list
+            let arrList = []
+            arr.forEach(item1 => {
+              var arrData = {
+                label: null,
+                value: null,
+              }
+              arrData.label = item1.nickName
+              arrData.value = item1.id
+              arrList.push(arrData)
+            })
+            this.personnelList.forEach(item => {
+              if (item.field == 'reCheckId') {
+                item.options = item.options.concat(arrList)
+              }
+            })
+          }
+        })
+      },
+      getDelivererList() {
+        var params = {
+          page: 1,
+          pageSize: 999,
+          // type: 3,
+          name: this.delivererName,
+        }
+        getUser(params).then(res => {
+          if (res.code == 200) {
+            let arr = res.data.list
+            let arrList = []
+            arr.forEach(item1 => {
+              var arrData = {
+                label: null,
+                value: null,
+              }
+              arrData.label = item1.nickName
+              arrData.value = item1.id
+              arrList.push(arrData)
+            })
+            this.personnelList.forEach(item => {
+              if (item.field == 'deliveryId') {
+                item.options = item.options.concat(arrList)
+              }
+            })
+          }
+        })
+      },
+      // 地址簿
+      bookChangeSize(val) {
+        this.bookPagination.PageSize = val
+        if (this.bookType == 'deliverer') {
+          this.getDelivererList()
+        } else {
+          this.getSenderSend()
+        }
+      },
+      bookChangeCurrent(val) {
+        this.bookPagination.PageIndex = val
+        if (this.bookType == 'deliverer') {
+          this.getDelivererList()
+        } else {
+          this.getSenderSend()
+        }
+      },
+      conserveSelectil(type) {
+        if (type) {
+          this.saveConsigneeAddress = true
+        } else {
+          this.saveConsigneeAddress = false
+        }
       },
       changeSize(val) {
         this.Pagination.PageSize = val
@@ -167,6 +619,22 @@
         this.Pagination.PageIndex = val
         this.getList()
       },
+      // 清空表单
+      closeDialog1() {
+        this.$refs.signRules.resetCheck();
+      },
+      // 关闭清空表单
+      closePopup() {
+        this.ruleForm.fileList = []
+        // this.$refs.sender.resetForm()
+        this.$refs.recipients.resetForm()
+        // this.$refs.deliverer.resetForm()
+        this.$refs.childRules.resetCheck()
+        this.$refs.userRules.resetCheck()
+        this.personnelList.forEach(item => {
+          item.options = []
+        })
+      }
     },
   }
 </script>

+ 1 - 1
src/views/system/incubator.js

@@ -88,7 +88,7 @@ export const formRules = () => {
     type: 'input',
     colWidth: 24,
     rules: [{
-      required: true,
+      required: false,
       message: '请输入SN',
       trigger: 'blur'
     }]

+ 43 - 65
yarn.lock

@@ -1719,7 +1719,7 @@
 
 "@vue/eslint-config-standard@^6.1.0":
   "integrity" "sha512-9+hrEyflDzsGdlBDl9jPV5DIYUx1TOU5OSQqRDKCrNumrxRj5HRWKuk+ocXWnha6uoNRtLC24mY7d/MwqvBCNw=="
-  "resolved" "https://registry.npmjs.org/@vue/eslint-config-standard/-/eslint-config-standard-6.1.0.tgz"
+  "resolved" "https://registry.npmmirror.com/@vue/eslint-config-standard/-/eslint-config-standard-6.1.0.tgz"
   "version" "6.1.0"
   dependencies:
     "eslint-config-standard" "^16.0.3"
@@ -1891,14 +1891,9 @@
   "resolved" "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz"
   "version" "1.9.0"
 
-"acorn-jsx@^5.3.1":
+"acorn-jsx@^5.2.0", "acorn-jsx@^5.3.1":
   "integrity" "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ=="
-  "resolved" "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz"
-  "version" "5.3.2"
-
-"acorn-jsx@^5.3.2":
-  "integrity" "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ=="
-  "resolved" "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz"
+  "resolved" "https://registry.npmmirror.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz"
   "version" "5.3.2"
 
 "acorn-walk@^8.0.0", "acorn-walk@^8.0.2":
@@ -1906,16 +1901,21 @@
   "resolved" "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz"
   "version" "8.3.2"
 
-"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", "acorn@^7.4.0":
-  "integrity" "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A=="
-  "resolved" "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz"
-  "version" "7.4.1"
-
-"acorn@^8", "acorn@^8.0.4", "acorn@^8.0.5", "acorn@^8.7.1", "acorn@^8.8.2", "acorn@^8.9.0":
+"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", "acorn@^8", "acorn@^8.0.4", "acorn@^8.0.5", "acorn@^8.7.1", "acorn@^8.8.2":
   "integrity" "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg=="
   "resolved" "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz"
   "version" "8.11.3"
 
+"acorn@^7.1.1":
+  "integrity" "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A=="
+  "resolved" "https://registry.npmmirror.com/acorn/-/acorn-7.4.1.tgz"
+  "version" "7.4.1"
+
+"acorn@^7.4.0":
+  "integrity" "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A=="
+  "resolved" "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz"
+  "version" "7.4.1"
+
 "address@^1.1.2":
   "integrity" "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA=="
   "resolved" "https://registry.npmjs.org/address/-/address-1.2.2.tgz"
@@ -2908,7 +2908,7 @@
   dependencies:
     "ms" "^2.1.1"
 
-"debug@^4.0.1", "debug@^4.1.0", "debug@^4.1.1", "debug@^4.3.1", "debug@^4.3.2":
+"debug@^4.0.1", "debug@^4.1.0", "debug@^4.1.1", "debug@^4.3.1":
   "integrity" "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ=="
   "resolved" "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz"
   "version" "4.3.4"
@@ -3406,17 +3406,15 @@
   "resolved" "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-5.2.0.tgz"
   "version" "5.2.0"
 
-"eslint-plugin-vue@^7.0.0", "eslint-plugin-vue@^8.0.3":
-  "integrity" "sha512-28sbtm4l4cOzoO1LtzQPxfxhQABararUb1JtqusQqObJpWX2e/gmVyeYVfepizPFne0Q5cILkYGiBoV36L12Wg=="
-  "resolved" "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-8.7.1.tgz"
-  "version" "8.7.1"
+"eslint-plugin-vue@^7.0.0":
+  "integrity" "sha512-oVNDqzBC9h3GO+NTgWeLMhhGigy6/bQaQbHS+0z7C4YEu/qK/yxHvca/2PTZtGNPsCrHwOTgKMrwu02A9iPBmw=="
+  "resolved" "https://registry.npmmirror.com/eslint-plugin-vue/-/eslint-plugin-vue-7.20.0.tgz"
+  "version" "7.20.0"
   dependencies:
-    "eslint-utils" "^3.0.0"
+    "eslint-utils" "^2.1.0"
     "natural-compare" "^1.4.0"
-    "nth-check" "^2.0.1"
-    "postcss-selector-parser" "^6.0.9"
-    "semver" "^7.3.5"
-    "vue-eslint-parser" "^8.0.1"
+    "semver" "^6.3.0"
+    "vue-eslint-parser" "^7.10.0"
 
 "eslint-scope@^5.1.1", "eslint-scope@5.1.1":
   "integrity" "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw=="
@@ -3426,14 +3424,6 @@
     "esrecurse" "^4.3.0"
     "estraverse" "^4.1.1"
 
-"eslint-scope@^7.0.0":
-  "integrity" "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg=="
-  "resolved" "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz"
-  "version" "7.2.2"
-  dependencies:
-    "esrecurse" "^4.3.0"
-    "estraverse" "^5.2.0"
-
 "eslint-utils@^2.0.0", "eslint-utils@^2.1.0":
   "integrity" "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg=="
   "resolved" "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz"
@@ -3441,16 +3431,9 @@
   dependencies:
     "eslint-visitor-keys" "^1.1.0"
 
-"eslint-utils@^3.0.0":
-  "integrity" "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA=="
-  "resolved" "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz"
-  "version" "3.0.0"
-  dependencies:
-    "eslint-visitor-keys" "^2.0.0"
-
 "eslint-visitor-keys@^1.1.0":
   "integrity" "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ=="
-  "resolved" "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz"
+  "resolved" "https://registry.npmmirror.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz"
   "version" "1.3.0"
 
 "eslint-visitor-keys@^1.3.0":
@@ -3463,11 +3446,6 @@
   "resolved" "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz"
   "version" "2.1.0"
 
-"eslint-visitor-keys@^3.1.0", "eslint-visitor-keys@^3.4.1":
-  "integrity" "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag=="
-  "resolved" "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz"
-  "version" "3.4.3"
-
 "eslint-webpack-plugin@^3.1.0":
   "integrity" "sha512-avrKcGncpPbPSUHX6B3stNGzkKFto3eL+DKM4+VyMrVnhPc3vRczVlCq3uhuFOdRvDHTVXuzwk1ZKUrqDQHQ9w=="
   "resolved" "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-3.2.0.tgz"
@@ -3479,7 +3457,7 @@
     "normalize-path" "^3.0.0"
     "schema-utils" "^4.0.0"
 
-"eslint@^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8", "eslint@^6.2.0 || ^7.0.0 || ^8.0.0", "eslint@^7.0.0", "eslint@^7.0.0 || ^8.0.0", "eslint@^7.12.1", "eslint@^7.32.0", "eslint@^7.5.0 || ^8.0.0", "eslint@>=4.19.1", "eslint@>=5", "eslint@>=5.16.0", "eslint@>=6.0.0", "eslint@>=7.5.0":
+"eslint@^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8", "eslint@^6.2.0 || ^7.0.0 || ^8.0.0", "eslint@^7.0.0", "eslint@^7.0.0 || ^8.0.0", "eslint@^7.12.1", "eslint@^7.32.0", "eslint@^7.5.0 || ^8.0.0", "eslint@>=4.19.1", "eslint@>=5.0.0", "eslint@>=5.16.0", "eslint@>=7.5.0":
   "integrity" "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA=="
   "resolved" "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz"
   "version" "7.32.0"
@@ -3525,6 +3503,15 @@
     "text-table" "^0.2.0"
     "v8-compile-cache" "^2.0.3"
 
+"espree@^6.2.1":
+  "integrity" "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw=="
+  "resolved" "https://registry.npmmirror.com/espree/-/espree-6.2.1.tgz"
+  "version" "6.2.1"
+  dependencies:
+    "acorn" "^7.1.1"
+    "acorn-jsx" "^5.2.0"
+    "eslint-visitor-keys" "^1.1.0"
+
 "espree@^7.3.0", "espree@^7.3.1":
   "integrity" "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g=="
   "resolved" "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz"
@@ -3534,15 +3521,6 @@
     "acorn-jsx" "^5.3.1"
     "eslint-visitor-keys" "^1.3.0"
 
-"espree@^9.0.0":
-  "integrity" "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ=="
-  "resolved" "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz"
-  "version" "9.6.1"
-  dependencies:
-    "acorn" "^8.9.0"
-    "acorn-jsx" "^5.3.2"
-    "eslint-visitor-keys" "^3.4.1"
-
 "esprima@^4.0.0":
   "integrity" "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="
   "resolved" "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz"
@@ -6124,7 +6102,7 @@
   "resolved" "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz"
   "version" "5.7.2"
 
-"semver@^6.0.0", "semver@^6.1.0", "semver@^6.3.1":
+"semver@^6.0.0", "semver@^6.1.0", "semver@^6.3.0", "semver@^6.3.1":
   "integrity" "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="
   "resolved" "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz"
   "version" "6.3.1"
@@ -6902,18 +6880,18 @@
   "resolved" "https://registry.npmmirror.com/vue-buffer/-/vue-buffer-0.0.1.tgz"
   "version" "0.0.1"
 
-"vue-eslint-parser@^8.0.1":
-  "integrity" "sha512-dzHGG3+sYwSf6zFBa0Gi9ZDshD7+ad14DGOdTLjruRVgZXe2J+DcZ9iUhyR48z5g1PqRa20yt3Njna/veLJL/g=="
-  "resolved" "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-8.3.0.tgz"
-  "version" "8.3.0"
+"vue-eslint-parser@^7.10.0":
+  "integrity" "sha512-qh3VhDLeh773wjgNTl7ss0VejY9bMMa0GoDG2fQVyDzRFdiU3L7fw74tWZDHNQXdZqxO3EveQroa9ct39D2nqg=="
+  "resolved" "https://registry.npmmirror.com/vue-eslint-parser/-/vue-eslint-parser-7.11.0.tgz"
+  "version" "7.11.0"
   dependencies:
-    "debug" "^4.3.2"
-    "eslint-scope" "^7.0.0"
-    "eslint-visitor-keys" "^3.1.0"
-    "espree" "^9.0.0"
+    "debug" "^4.1.1"
+    "eslint-scope" "^5.1.1"
+    "eslint-visitor-keys" "^1.1.0"
+    "espree" "^6.2.1"
     "esquery" "^1.4.0"
     "lodash" "^4.17.21"
-    "semver" "^7.3.5"
+    "semver" "^6.3.0"
 
 "vue-hot-reload-api@^2.3.0":
   "integrity" "sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog=="

Một số tệp đã không được hiển thị bởi vì quá nhiều tập tin thay đổi trong này khác