Parcourir la source

Merge branch 'feature/Feature-basic_data' of https://gogs.zfire.top/zfire-front/supply-front into feature/Feature-basic_data

chen il y a 3 ans
Parent
commit
d2589df4ea
65 fichiers modifiés avec 9516 ajouts et 56 suppressions
  1. 180 39
      package-lock.json
  2. 2 1
      package.json
  3. 9 0
      src/api/common.js
  4. 19 0
      src/api/supply/adjust.js
  5. 19 0
      src/api/supply/allot.js
  6. 19 0
      src/api/supply/deliver.js
  7. 19 0
      src/api/supply/engin.js
  8. 91 0
      src/api/supply/pickup.js
  9. 10 0
      src/api/supply/purchase.js
  10. 19 0
      src/api/supply/reserve.js
  11. 19 0
      src/api/supply/return.js
  12. 129 0
      src/components/Common/file-upload.vue
  13. 78 0
      src/components/Common/import-button.vue
  14. 2 1
      src/main.js
  15. 149 0
      src/views/sales_policy/codealer_list.vue
  16. 171 0
      src/views/sales_policy/components/AddCondition.vue
  17. 41 0
      src/views/sales_policy/components/AddModel.vue
  18. 325 0
      src/views/sales_policy/components/AddPolicy.vue
  19. 299 0
      src/views/sales_policy/components/Distributor.vue
  20. 271 0
      src/views/sales_policy/components/NewInfo.vue
  21. 51 0
      src/views/sales_policy/components/Pagination.vue
  22. 327 0
      src/views/sales_policy/components/TabelTransfer.vue
  23. 303 0
      src/views/sales_policy/components/Transfer.vue
  24. 150 0
      src/views/sales_policy/marketing_list.vue
  25. 216 0
      src/views/sales_policy/policy_list.vue
  26. 11 1
      src/views/setting/role.vue
  27. 5 0
      src/views/supply/adjust.vue
  28. 258 0
      src/views/supply/adjust/adjust_list.vue
  29. 141 0
      src/views/supply/adjust/components/adjust_detail.vue
  30. 5 0
      src/views/supply/allot.vue
  31. 238 0
      src/views/supply/allot/allot_list.vue
  32. 141 0
      src/views/supply/allot/components/allot_detail.vue
  33. 5 0
      src/views/supply/deliver.vue
  34. 232 0
      src/views/supply/deliver/components/deliver_detail.vue
  35. 232 0
      src/views/supply/deliver/components/engin_detail.vue
  36. 232 0
      src/views/supply/deliver/deliver_list.vue
  37. 265 0
      src/views/supply/deliver/engin_list.vue
  38. 5 0
      src/views/supply/engin.vue
  39. 214 0
      src/views/supply/engin/components/engin_detail.vue
  40. 227 0
      src/views/supply/engin/components/engin_form.vue
  41. 288 0
      src/views/supply/engin/engin_list.vue
  42. 5 0
      src/views/supply/pickup.vue
  43. 330 0
      src/views/supply/pickup/book.vue
  44. 223 0
      src/views/supply/pickup/check.vue
  45. 200 0
      src/views/supply/pickup/pickup_list.vue
  46. 166 0
      src/views/supply/pickup/statistics.vue
  47. 194 0
      src/views/supply/pickup/sum_list.vue
  48. 5 0
      src/views/supply/purchase.vue
  49. 168 0
      src/views/supply/purchase/components/enter_detail.vue
  50. 200 0
      src/views/supply/purchase/components/purchase_detail.vue
  51. 245 0
      src/views/supply/purchase/enter_list.vue
  52. 192 0
      src/views/supply/purchase/plan_list.vue
  53. 240 0
      src/views/supply/purchase/purchase_list.vue
  54. 216 0
      src/views/supply/purchase/sum_list.vue
  55. 5 0
      src/views/supply/reserve.vue
  56. 185 0
      src/views/supply/reserve/components/reserve_detail.vue
  57. 181 0
      src/views/supply/reserve/components/reserve_form.vue
  58. 279 0
      src/views/supply/reserve/reserve_list.vue
  59. 5 0
      src/views/supply/return.vue
  60. 181 0
      src/views/supply/return/components/online_detail.vue
  61. 194 0
      src/views/supply/return/components/return_detail.vue
  62. 190 0
      src/views/supply/return/components/return_form.vue
  63. 243 0
      src/views/supply/return/online_list.vue
  64. 242 0
      src/views/supply/return/return_list.vue
  65. 10 14
      src/views/supply/sales/sales_list.vue

+ 180 - 39
package-lock.json

@@ -24,7 +24,8 @@
         "vue-print-nb": "^1.7.5",
         "vue-quill-editor": "^3.0.6",
         "vue-router": "3.0.6",
-        "vuex": "3.1.0"
+        "vuex": "3.1.0",
+        "yarn": "^1.22.18"
       },
       "devDependencies": {
         "@vue/cli-plugin-babel": "4.4.4",
@@ -3982,7 +3983,11 @@
       "version": "3.1.2",
       "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
       "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
+<<<<<<< HEAD
       "dev": true,
+=======
+      "devOptional": true,
+>>>>>>> feature/Feature-sales
       "dependencies": {
         "normalize-path": "^3.0.0",
         "picomatch": "^2.0.4"
@@ -4185,7 +4190,11 @@
       "version": "1.0.3",
       "resolved": "https://registry.npmmirror.com/async-each/-/async-each-1.0.3.tgz",
       "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==",
+<<<<<<< HEAD
       "dev": true
+=======
+      "devOptional": true
+>>>>>>> feature/Feature-sales
     },
     "node_modules/async-limiter": {
       "version": "1.0.1",
@@ -5325,7 +5334,11 @@
       "version": "2.2.0",
       "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
       "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
+<<<<<<< HEAD
       "dev": true,
+=======
+      "devOptional": true,
+>>>>>>> feature/Feature-sales
       "engines": {
         "node": ">=8"
       }
@@ -5334,7 +5347,11 @@
       "version": "1.5.0",
       "resolved": "https://registry.npmmirror.com/bindings/-/bindings-1.5.0.tgz",
       "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==",
+<<<<<<< HEAD
       "dev": true,
+=======
+      "devOptional": true,
+>>>>>>> feature/Feature-sales
       "dependencies": {
         "file-uri-to-path": "1.0.0"
       }
@@ -5442,7 +5459,11 @@
       "version": "3.0.2",
       "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
       "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+<<<<<<< HEAD
       "dev": true,
+=======
+      "devOptional": true,
+>>>>>>> feature/Feature-sales
       "dependencies": {
         "fill-range": "^7.0.1"
       },
@@ -5903,7 +5924,11 @@
       "version": "3.5.3",
       "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
       "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
+<<<<<<< HEAD
       "dev": true,
+=======
+      "devOptional": true,
+>>>>>>> feature/Feature-sales
       "funding": [
         {
           "type": "individual",
@@ -9227,7 +9252,11 @@
       "version": "1.0.0",
       "resolved": "https://registry.npmmirror.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz",
       "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==",
+<<<<<<< HEAD
       "dev": true
+=======
+      "devOptional": true
+>>>>>>> feature/Feature-sales
     },
     "node_modules/filename-regex": {
       "version": "2.0.1",
@@ -9251,7 +9280,11 @@
       "version": "7.0.1",
       "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
       "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+<<<<<<< HEAD
       "dev": true,
+=======
+      "devOptional": true,
+>>>>>>> feature/Feature-sales
       "dependencies": {
         "to-regex-range": "^5.0.1"
       },
@@ -9611,7 +9644,10 @@
       "version": "2.3.2",
       "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
       "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
+<<<<<<< HEAD
       "dev": true,
+=======
+>>>>>>> feature/Feature-sales
       "hasInstallScript": true,
       "optional": true,
       "os": [
@@ -9782,7 +9818,11 @@
       "version": "5.1.2",
       "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
       "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+<<<<<<< HEAD
       "dev": true,
+=======
+      "devOptional": true,
+>>>>>>> feature/Feature-sales
       "dependencies": {
         "is-glob": "^4.0.1"
       },
@@ -10992,7 +11032,11 @@
       "version": "2.1.0",
       "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
       "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+<<<<<<< HEAD
       "dev": true,
+=======
+      "devOptional": true,
+>>>>>>> feature/Feature-sales
       "dependencies": {
         "binary-extensions": "^2.0.0"
       },
@@ -11174,7 +11218,11 @@
       "version": "2.1.1",
       "resolved": "https://registry.npm.taobao.org/is-extglob/download/is-extglob-2.1.1.tgz",
       "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+<<<<<<< HEAD
       "dev": true,
+=======
+      "devOptional": true,
+>>>>>>> feature/Feature-sales
       "engines": {
         "node": ">=0.10.0"
       }
@@ -11213,7 +11261,11 @@
       "version": "4.0.3",
       "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
       "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+<<<<<<< HEAD
       "dev": true,
+=======
+      "devOptional": true,
+>>>>>>> feature/Feature-sales
       "dependencies": {
         "is-extglob": "^2.1.1"
       },
@@ -11237,7 +11289,11 @@
       "version": "7.0.0",
       "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
       "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+<<<<<<< HEAD
       "dev": true,
+=======
+      "devOptional": true,
+>>>>>>> feature/Feature-sales
       "engines": {
         "node": ">=0.12.0"
       }
@@ -13712,7 +13768,10 @@
       "version": "2.16.0",
       "resolved": "https://registry.npmmirror.com/nan/-/nan-2.16.0.tgz",
       "integrity": "sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA==",
+<<<<<<< HEAD
       "dev": true,
+=======
+>>>>>>> feature/Feature-sales
       "optional": true
     },
     "node_modules/nanomatch": {
@@ -13999,7 +14058,11 @@
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
       "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+<<<<<<< HEAD
       "dev": true,
+=======
+      "devOptional": true,
+>>>>>>> feature/Feature-sales
       "engines": {
         "node": ">=0.10.0"
       }
@@ -14713,7 +14776,11 @@
       "version": "1.0.2",
       "resolved": "https://registry.npmmirror.com/path-dirname/-/path-dirname-1.0.2.tgz",
       "integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==",
+<<<<<<< HEAD
       "dev": true
+=======
+      "devOptional": true
+>>>>>>> feature/Feature-sales
     },
     "node_modules/path-exists": {
       "version": "4.0.0",
@@ -14815,7 +14882,11 @@
       "version": "2.3.1",
       "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
       "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+<<<<<<< HEAD
       "dev": true,
+=======
+      "devOptional": true,
+>>>>>>> feature/Feature-sales
       "engines": {
         "node": ">=8.6"
       },
@@ -16246,7 +16317,11 @@
       "version": "3.6.0",
       "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
       "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+<<<<<<< HEAD
       "dev": true,
+=======
+      "devOptional": true,
+>>>>>>> feature/Feature-sales
       "dependencies": {
         "picomatch": "^2.2.1"
       },
@@ -16427,7 +16502,11 @@
       "version": "1.1.0",
       "resolved": "https://registry.npmmirror.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
       "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==",
+<<<<<<< HEAD
       "dev": true
+=======
+      "devOptional": true
+>>>>>>> feature/Feature-sales
     },
     "node_modules/repeat-element": {
       "version": "1.1.4",
@@ -18907,7 +18986,11 @@
       "version": "5.0.1",
       "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
       "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+<<<<<<< HEAD
       "dev": true,
+=======
+      "devOptional": true,
+>>>>>>> feature/Feature-sales
       "dependencies": {
         "is-number": "^7.0.0"
       },
@@ -19428,7 +19511,11 @@
       "version": "1.2.0",
       "resolved": "https://registry.npmmirror.com/upath/-/upath-1.2.0.tgz",
       "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==",
+<<<<<<< HEAD
       "dev": true,
+=======
+      "devOptional": true,
+>>>>>>> feature/Feature-sales
       "engines": {
         "node": ">=4",
         "yarn": "*"
@@ -19746,6 +19833,7 @@
         "worker-loader": "^2.0.0"
       }
     },
+<<<<<<< HEAD
     "node_modules/vue-print-nb": {
       "version": "1.7.5",
       "resolved": "https://registry.npmmirror.com/vue-print-nb/-/vue-print-nb-1.7.5.tgz",
@@ -19759,6 +19847,8 @@
       "resolved": "https://registry.npmmirror.com/vue/-/vue-2.6.14.tgz",
       "integrity": "sha512-x2284lgYvjOMj3Za7kqzRcUSxBboHqtgRE2zlos1qWaOye5yUmHn42LB1250NJBLRwEcdrB0JRwyPTEPhfQjiQ=="
     },
+=======
+>>>>>>> feature/Feature-sales
     "node_modules/vue-quill-editor": {
       "version": "3.0.6",
       "resolved": "https://registry.npmjs.org/vue-quill-editor/-/vue-quill-editor-3.0.6.tgz",
@@ -19865,7 +19955,10 @@
       "version": "2.0.1",
       "resolved": "https://registry.npmmirror.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz",
       "integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==",
+<<<<<<< HEAD
       "dev": true,
+=======
+>>>>>>> feature/Feature-sales
       "optional": true,
       "dependencies": {
         "chokidar": "^2.1.8"
@@ -19875,7 +19968,10 @@
       "version": "2.0.0",
       "resolved": "https://registry.npmmirror.com/anymatch/-/anymatch-2.0.0.tgz",
       "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
+<<<<<<< HEAD
       "dev": true,
+=======
+>>>>>>> feature/Feature-sales
       "optional": true,
       "dependencies": {
         "micromatch": "^3.1.4",
@@ -19886,7 +19982,10 @@
       "version": "2.1.1",
       "resolved": "https://registry.npmmirror.com/normalize-path/-/normalize-path-2.1.1.tgz",
       "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==",
+<<<<<<< HEAD
       "dev": true,
+=======
+>>>>>>> feature/Feature-sales
       "optional": true,
       "dependencies": {
         "remove-trailing-separator": "^1.0.1"
@@ -19899,7 +19998,10 @@
       "version": "1.13.1",
       "resolved": "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-1.13.1.tgz",
       "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==",
+<<<<<<< HEAD
       "dev": true,
+=======
+>>>>>>> feature/Feature-sales
       "optional": true,
       "engines": {
         "node": ">=0.10.0"
@@ -19909,7 +20011,10 @@
       "version": "2.3.2",
       "resolved": "https://registry.npmmirror.com/braces/-/braces-2.3.2.tgz",
       "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+<<<<<<< HEAD
       "dev": true,
+=======
+>>>>>>> feature/Feature-sales
       "optional": true,
       "dependencies": {
         "arr-flatten": "^1.1.0",
@@ -19932,7 +20037,10 @@
       "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-2.1.8.tgz",
       "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==",
       "deprecated": "Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies",
+<<<<<<< HEAD
       "dev": true,
+=======
+>>>>>>> feature/Feature-sales
       "optional": true,
       "dependencies": {
         "anymatch": "^2.0.0",
@@ -19955,7 +20063,10 @@
       "version": "4.0.0",
       "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-4.0.0.tgz",
       "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==",
+<<<<<<< HEAD
       "dev": true,
+=======
+>>>>>>> feature/Feature-sales
       "optional": true,
       "dependencies": {
         "extend-shallow": "^2.0.1",
@@ -19972,7 +20083,10 @@
       "resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-1.2.13.tgz",
       "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==",
       "deprecated": "fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.",
+<<<<<<< HEAD
       "dev": true,
+=======
+>>>>>>> feature/Feature-sales
       "hasInstallScript": true,
       "optional": true,
       "os": [
@@ -19990,7 +20104,10 @@
       "version": "3.1.0",
       "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-3.1.0.tgz",
       "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==",
+<<<<<<< HEAD
       "dev": true,
+=======
+>>>>>>> feature/Feature-sales
       "optional": true,
       "dependencies": {
         "is-glob": "^3.1.0",
@@ -20001,7 +20118,10 @@
       "version": "3.1.0",
       "resolved": "https://registry.npmmirror.com/is-glob/-/is-glob-3.1.0.tgz",
       "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==",
+<<<<<<< HEAD
       "dev": true,
+=======
+>>>>>>> feature/Feature-sales
       "optional": true,
       "dependencies": {
         "is-extglob": "^2.1.0"
@@ -20014,7 +20134,10 @@
       "version": "1.0.1",
       "resolved": "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-1.0.1.tgz",
       "integrity": "sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==",
+<<<<<<< HEAD
       "dev": true,
+=======
+>>>>>>> feature/Feature-sales
       "optional": true,
       "dependencies": {
         "binary-extensions": "^1.0.0"
@@ -20027,7 +20150,10 @@
       "version": "3.0.0",
       "resolved": "https://registry.npmmirror.com/is-number/-/is-number-3.0.0.tgz",
       "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==",
+<<<<<<< HEAD
       "dev": true,
+=======
+>>>>>>> feature/Feature-sales
       "optional": true,
       "dependencies": {
         "kind-of": "^3.0.2"
@@ -20040,7 +20166,10 @@
       "version": "2.3.7",
       "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.7.tgz",
       "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+<<<<<<< HEAD
       "dev": true,
+=======
+>>>>>>> feature/Feature-sales
       "optional": true,
       "dependencies": {
         "core-util-is": "~1.0.0",
@@ -20056,7 +20185,10 @@
       "version": "2.2.1",
       "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-2.2.1.tgz",
       "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==",
+<<<<<<< HEAD
       "dev": true,
+=======
+>>>>>>> feature/Feature-sales
       "optional": true,
       "dependencies": {
         "graceful-fs": "^4.1.11",
@@ -20071,7 +20203,10 @@
       "version": "1.1.1",
       "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz",
       "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+<<<<<<< HEAD
       "dev": true,
+=======
+>>>>>>> feature/Feature-sales
       "optional": true,
       "dependencies": {
         "safe-buffer": "~5.1.0"
@@ -20081,7 +20216,10 @@
       "version": "2.1.1",
       "resolved": "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-2.1.1.tgz",
       "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==",
+<<<<<<< HEAD
       "dev": true,
+=======
+>>>>>>> feature/Feature-sales
       "optional": true,
       "dependencies": {
         "is-number": "^3.0.0",
@@ -21033,6 +21171,22 @@
         "node": ">=6"
       }
     },
+<<<<<<< HEAD
+=======
+    "node_modules/yarn": {
+      "version": "1.22.18",
+      "resolved": "https://registry.npmjs.org/yarn/-/yarn-1.22.18.tgz",
+      "integrity": "sha512-oFffv6Jp2+BTUBItzx1Z0dpikTX+raRdqupfqzeMKnoh7WD6RuPAxcqDkMUy9vafJkrB0YaV708znpuMhEBKGQ==",
+      "hasInstallScript": true,
+      "bin": {
+        "yarn": "bin/yarn.js",
+        "yarnpkg": "bin/yarn.js"
+      },
+      "engines": {
+        "node": ">=4.0.0"
+      }
+    },
+>>>>>>> feature/Feature-sales
     "node_modules/yorkie": {
       "version": "2.0.0",
       "resolved": "https://registry.npmmirror.com/yorkie/-/yorkie-2.0.0.tgz",
@@ -24133,7 +24287,7 @@
       "version": "3.1.2",
       "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
       "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
-      "dev": true,
+      "devOptional": true,
       "requires": {
         "normalize-path": "^3.0.0",
         "picomatch": "^2.0.4"
@@ -24293,7 +24447,7 @@
       "version": "1.0.3",
       "resolved": "https://registry.npmmirror.com/async-each/-/async-each-1.0.3.tgz",
       "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==",
-      "dev": true
+      "devOptional": true
     },
     "async-limiter": {
       "version": "1.0.1",
@@ -25214,13 +25368,13 @@
       "version": "2.2.0",
       "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
       "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
-      "dev": true
+      "devOptional": true
     },
     "bindings": {
       "version": "1.5.0",
       "resolved": "https://registry.npmmirror.com/bindings/-/bindings-1.5.0.tgz",
       "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==",
-      "dev": true,
+      "devOptional": true,
       "requires": {
         "file-uri-to-path": "1.0.0"
       }
@@ -25322,7 +25476,7 @@
       "version": "3.0.2",
       "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
       "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
-      "dev": true,
+      "devOptional": true,
       "requires": {
         "fill-range": "^7.0.1"
       }
@@ -25693,7 +25847,7 @@
       "version": "3.5.3",
       "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
       "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
-      "dev": true,
+      "devOptional": true,
       "requires": {
         "anymatch": "~3.1.2",
         "braces": "~3.0.2",
@@ -28362,7 +28516,7 @@
       "version": "1.0.0",
       "resolved": "https://registry.npmmirror.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz",
       "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==",
-      "dev": true
+      "devOptional": true
     },
     "filename-regex": {
       "version": "2.0.1",
@@ -28380,7 +28534,7 @@
       "version": "7.0.1",
       "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
       "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
-      "dev": true,
+      "devOptional": true,
       "requires": {
         "to-regex-range": "^5.0.1"
       }
@@ -28694,7 +28848,6 @@
       "version": "2.3.2",
       "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
       "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
-      "dev": true,
       "optional": true
     },
     "function-bind": {
@@ -28821,7 +28974,7 @@
       "version": "5.1.2",
       "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
       "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
-      "dev": true,
+      "devOptional": true,
       "requires": {
         "is-glob": "^4.0.1"
       }
@@ -29768,7 +29921,7 @@
       "version": "2.1.0",
       "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
       "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
-      "dev": true,
+      "devOptional": true,
       "requires": {
         "binary-extensions": "^2.0.0"
       }
@@ -29895,7 +30048,7 @@
       "version": "2.1.1",
       "resolved": "https://registry.npm.taobao.org/is-extglob/download/is-extglob-2.1.1.tgz",
       "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
-      "dev": true
+      "devOptional": true
     },
     "is-finite": {
       "version": "1.1.0",
@@ -29919,7 +30072,7 @@
       "version": "4.0.3",
       "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
       "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
-      "dev": true,
+      "devOptional": true,
       "requires": {
         "is-extglob": "^2.1.1"
       }
@@ -29934,7 +30087,7 @@
       "version": "7.0.0",
       "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
       "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
-      "dev": true
+      "devOptional": true
     },
     "is-number-object": {
       "version": "1.0.7",
@@ -31942,7 +32095,6 @@
       "version": "2.16.0",
       "resolved": "https://registry.npmmirror.com/nan/-/nan-2.16.0.tgz",
       "integrity": "sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA==",
-      "dev": true,
       "optional": true
     },
     "nanomatch": {
@@ -32194,7 +32346,7 @@
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
       "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
-      "dev": true
+      "devOptional": true
     },
     "normalize-range": {
       "version": "0.1.2",
@@ -32747,7 +32899,7 @@
       "version": "1.0.2",
       "resolved": "https://registry.npmmirror.com/path-dirname/-/path-dirname-1.0.2.tgz",
       "integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==",
-      "dev": true
+      "devOptional": true
     },
     "path-exists": {
       "version": "4.0.0",
@@ -32833,7 +32985,7 @@
       "version": "2.3.1",
       "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
       "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
-      "dev": true
+      "devOptional": true
     },
     "pify": {
       "version": "4.0.1",
@@ -34035,7 +34187,7 @@
       "version": "3.6.0",
       "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
       "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
-      "dev": true,
+      "devOptional": true,
       "requires": {
         "picomatch": "^2.2.1"
       }
@@ -34178,7 +34330,7 @@
       "version": "1.1.0",
       "resolved": "https://registry.npmmirror.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
       "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==",
-      "dev": true
+      "devOptional": true
     },
     "repeat-element": {
       "version": "1.1.4",
@@ -36258,7 +36410,7 @@
       "version": "5.0.1",
       "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
       "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
-      "dev": true,
+      "devOptional": true,
       "requires": {
         "is-number": "^7.0.0"
       }
@@ -36607,7 +36759,7 @@
       "version": "1.2.0",
       "resolved": "https://registry.npmmirror.com/upath/-/upath-1.2.0.tgz",
       "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==",
-      "dev": true
+      "devOptional": true
     },
     "upper-case": {
       "version": "1.1.3",
@@ -36980,7 +37132,6 @@
       "version": "2.0.1",
       "resolved": "https://registry.npmmirror.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz",
       "integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==",
-      "dev": true,
       "optional": true,
       "requires": {
         "chokidar": "^2.1.8"
@@ -36990,7 +37141,6 @@
           "version": "2.0.0",
           "resolved": "https://registry.npmmirror.com/anymatch/-/anymatch-2.0.0.tgz",
           "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
-          "dev": true,
           "optional": true,
           "requires": {
             "micromatch": "^3.1.4",
@@ -37001,7 +37151,6 @@
               "version": "2.1.1",
               "resolved": "https://registry.npmmirror.com/normalize-path/-/normalize-path-2.1.1.tgz",
               "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==",
-              "dev": true,
               "optional": true,
               "requires": {
                 "remove-trailing-separator": "^1.0.1"
@@ -37013,14 +37162,12 @@
           "version": "1.13.1",
           "resolved": "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-1.13.1.tgz",
           "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==",
-          "dev": true,
           "optional": true
         },
         "braces": {
           "version": "2.3.2",
           "resolved": "https://registry.npmmirror.com/braces/-/braces-2.3.2.tgz",
           "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
-          "dev": true,
           "optional": true,
           "requires": {
             "arr-flatten": "^1.1.0",
@@ -37039,7 +37186,6 @@
           "version": "2.1.8",
           "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-2.1.8.tgz",
           "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==",
-          "dev": true,
           "optional": true,
           "requires": {
             "anymatch": "^2.0.0",
@@ -37060,7 +37206,6 @@
           "version": "4.0.0",
           "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-4.0.0.tgz",
           "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==",
-          "dev": true,
           "optional": true,
           "requires": {
             "extend-shallow": "^2.0.1",
@@ -37073,7 +37218,6 @@
           "version": "1.2.13",
           "resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-1.2.13.tgz",
           "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==",
-          "dev": true,
           "optional": true,
           "requires": {
             "bindings": "^1.5.0",
@@ -37084,7 +37228,6 @@
           "version": "3.1.0",
           "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-3.1.0.tgz",
           "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==",
-          "dev": true,
           "optional": true,
           "requires": {
             "is-glob": "^3.1.0",
@@ -37095,7 +37238,6 @@
               "version": "3.1.0",
               "resolved": "https://registry.npmmirror.com/is-glob/-/is-glob-3.1.0.tgz",
               "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==",
-              "dev": true,
               "optional": true,
               "requires": {
                 "is-extglob": "^2.1.0"
@@ -37107,7 +37249,6 @@
           "version": "1.0.1",
           "resolved": "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-1.0.1.tgz",
           "integrity": "sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==",
-          "dev": true,
           "optional": true,
           "requires": {
             "binary-extensions": "^1.0.0"
@@ -37117,7 +37258,6 @@
           "version": "3.0.0",
           "resolved": "https://registry.npmmirror.com/is-number/-/is-number-3.0.0.tgz",
           "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==",
-          "dev": true,
           "optional": true,
           "requires": {
             "kind-of": "^3.0.2"
@@ -37127,7 +37267,6 @@
           "version": "2.3.7",
           "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.7.tgz",
           "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
-          "dev": true,
           "optional": true,
           "requires": {
             "core-util-is": "~1.0.0",
@@ -37143,7 +37282,6 @@
           "version": "2.2.1",
           "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-2.2.1.tgz",
           "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==",
-          "dev": true,
           "optional": true,
           "requires": {
             "graceful-fs": "^4.1.11",
@@ -37155,7 +37293,6 @@
           "version": "1.1.1",
           "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz",
           "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
-          "dev": true,
           "optional": true,
           "requires": {
             "safe-buffer": "~5.1.0"
@@ -37165,7 +37302,6 @@
           "version": "2.1.1",
           "resolved": "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-2.1.1.tgz",
           "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==",
-          "dev": true,
           "optional": true,
           "requires": {
             "is-number": "^3.0.0",
@@ -37943,6 +38079,11 @@
         }
       }
     },
+    "yarn": {
+      "version": "1.22.18",
+      "resolved": "https://registry.npmjs.org/yarn/-/yarn-1.22.18.tgz",
+      "integrity": "sha512-oFffv6Jp2+BTUBItzx1Z0dpikTX+raRdqupfqzeMKnoh7WD6RuPAxcqDkMUy9vafJkrB0YaV708znpuMhEBKGQ=="
+    },
     "yorkie": {
       "version": "2.0.0",
       "resolved": "https://registry.npmmirror.com/yorkie/-/yorkie-2.0.0.tgz",

+ 2 - 1
package.json

@@ -29,7 +29,8 @@
     "vue-print-nb": "^1.7.5",
     "vue-quill-editor": "^3.0.6",
     "vue-router": "3.0.6",
-    "vuex": "3.1.0"
+    "vuex": "3.1.0",
+    "yarn": "^1.22.18"
   },
   "devDependencies": {
     "@vue/cli-plugin-babel": "4.4.4",

+ 9 - 0
src/api/common.js

@@ -17,3 +17,12 @@ export function getTypeList() {
     params
   })
 }
+
+// 获取oss配置
+export function getOssConfig(params) {
+  return request({
+    url: '/common/oss/config',
+    method: 'get',
+    params
+  })
+}

+ 19 - 0
src/api/supply/adjust.js

@@ -0,0 +1,19 @@
+import request from '@/utils/request'
+
+// 获取列表
+export function getList(params) {
+  return request({
+    url: '/transfer/list',
+    method: 'get',
+    params
+  })
+}
+
+// 获取详情
+export function getDetail(params) {
+  return request({
+    url: '/transfer/detail',
+    method: 'get',
+    params
+  })
+}

+ 19 - 0
src/api/supply/allot.js

@@ -0,0 +1,19 @@
+import request from '@/utils/request'
+
+// 获取列表
+export function getList(params) {
+  return request({
+    url: '/transfer/list',
+    method: 'get',
+    params
+  })
+}
+
+// 获取详情
+export function getDetail(params) {
+  return request({
+    url: '/transfer/detail',
+    method: 'get',
+    params
+  })
+}

+ 19 - 0
src/api/supply/deliver.js

@@ -0,0 +1,19 @@
+import request from '@/utils/request'
+
+// 获取列表
+export function getList(params) {
+  return request({
+    url: '/ship/list',
+    method: 'get',
+    params
+  })
+}
+
+// 获取详情
+export function getDetail(params) {
+  return request({
+    url: '/ship/detail',
+    method: 'get',
+    params
+  })
+}

+ 19 - 0
src/api/supply/engin.js

@@ -0,0 +1,19 @@
+import request from '@/utils/request'
+
+// 获取列表
+export function getList(params) {
+  return request({
+    url: '/ship/list',
+    method: 'get',
+    params
+  })
+}
+
+// 获取详情
+export function getDetail(params) {
+  return request({
+    url: '/ship/detail',
+    method: 'get',
+    params
+  })
+}

+ 91 - 0
src/api/supply/pickup.js

@@ -0,0 +1,91 @@
+import request from '@/utils/request'
+
+// 获取列表
+export function getPickupList(params) {
+  return request({
+    url: '/pick/list',
+    method: 'get',
+    params
+  })
+}
+
+// 获取详情
+export function getDetail(params) {
+  return request({
+    url: '/retreat/detail',
+    method: 'get',
+    params
+  })
+}
+
+// 获取仓库列表
+export function getWarehouseList(params) {
+  return request({
+    url: '/stock/listStock',
+    method: 'get',
+    params
+  })
+}
+
+// 获取发货单列表
+export function getDeliverList(params) {
+  return request({
+    url: '/pick/listShip',
+    method: 'get',
+    params
+  })
+}
+
+// 获取提货人列表
+export function getPickupManList(params) {
+  return request({
+    url: '/taker-record/list',
+    method: 'get',
+    params
+  })
+}
+
+// 获取提货车辆列表
+export function getPickupCarList(params) {
+  return request({
+    url: '/take-car-record/list',
+    method: 'get',
+    params
+  })
+}
+
+// 获取物流公司列表
+export function getCompanyList(params) {
+  return request({
+    url: '/logistics/list',
+    method: 'get',
+    params
+  })
+}
+
+// 提交提货预约
+export function addPickupBook(params) {
+  return request({
+    url: '/pick/add',
+    method: 'post',
+    data: params
+  })
+}
+
+// 获取短信验证码
+export function getCode(params) {
+  return request({
+    url: '/pick/sendCode',
+    method: 'post',
+    params
+  })
+}
+
+// 获取短信验证码
+export function getPickupManInfo(params) {
+  return request({
+    url: '/pick/verifyCode',
+    method: 'post',
+    params
+  })
+}

+ 10 - 0
src/api/supply/purchase.js

@@ -0,0 +1,10 @@
+import request from '@/utils/request'
+
+// 获取列表
+export function getList(params) {
+  return request({
+    url: '/admin/user/mch/list',
+    method: 'get',
+    params
+  })
+}

+ 19 - 0
src/api/supply/reserve.js

@@ -0,0 +1,19 @@
+import request from '@/utils/request'
+
+// 获取列表
+export function getList(params) {
+  return request({
+    url: '/ship/list',
+    method: 'get',
+    params
+  })
+}
+
+// 获取详情
+export function getDetail(params) {
+  return request({
+    url: '/ship/detail',
+    method: 'get',
+    params
+  })
+}

+ 19 - 0
src/api/supply/return.js

@@ -0,0 +1,19 @@
+import request from '@/utils/request'
+
+// 获取列表
+export function getList(params) {
+  return request({
+    url: '/retreat/list',
+    method: 'get',
+    params
+  })
+}
+
+// 获取详情
+export function getDetail(params) {
+  return request({
+    url: '/retreat/detail',
+    method: 'get',
+    params
+  })
+}

+ 129 - 0
src/components/Common/file-upload.vue

@@ -0,0 +1,129 @@
+<template>
+	<div>
+		<el-upload
+			:action="oss_url"
+			:data="dataObj"
+			:multiple="false"
+			:show-file-list="isShowFileList"
+			:file-list="fileList"
+			:before-upload="beforeUpload"
+			:on-remove="handleRemove"
+			:on-success="handleUploadSuccess"
+		>
+			<el-button size="small" type="primary">{{fileList.length == 0 ? '点击上传':'重新上传'}}</el-button>
+		</el-upload>
+	</div>
+</template>
+<script>
+import { getOssConfig } from '@/api/common';
+
+export default {
+	name: 'fileUpload',
+	props: {
+		fileList: Array,
+    fileType: {
+      type: Array,
+      default: () => ['image', 'video', 'word', 'excel', 'ppt', 'pdf']
+    }
+	},
+	data() {
+		return {
+			oss_url: '',
+			dataObj: {},
+			aliosstoken: '',
+		};
+	},
+	created() {
+    getOssConfig().then(res => {
+      this.oss_url = res.data.host;
+      this.dataObj = res.data;
+    })
+	},
+	computed: {
+		isShowFileList: {
+			get: function() {
+				if (this.fileList.length > 0 && this.fileList[0].url) {
+					return true;
+				} else {
+					return false;
+				}
+			},
+			set: function(newValue) {}
+		}
+	},
+	methods: {
+		getUUID() {
+			return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, c => {
+				return (c === 'x' ? (Math.random() * 16) | 0 : 'r&0x3' | '0x8').toString(16);
+			});
+		},
+		createName(name) {
+			const date = Date.now();
+			const uuid = this.getUUID();
+			const fileSuffix = name.substring(name.lastIndexOf(".") + 1);
+			return `${date}${uuid}.${fileSuffix}`;
+		},
+		handleRemove(file, fileList) {
+			// this.fileList = [{ name: '', url: '' }];
+      this.fileList.pop();
+		},
+		beforeUpload(file) {
+			const fileSuffix = file.name.substring(file.name.lastIndexOf(".") + 1);
+      const imgList = ['jpg', 'jpeg', 'png'];
+      const videoList = ['mp4'];
+      const wordList = ['doc', 'docx', 'dot', 'wps', 'wpt'];
+			const excelList = ['xls', 'xlsx', 'xlt', 'et', 'ett'];
+			const pptList = ['ppt', 'pptx', 'dps', 'dpt', 'pot', 'pps'];
+			const pdfList = ['pdf'];
+
+      let whiteList = [];
+      if(this.fileType.includes('image')) {
+        whiteList = whiteList.concat(imgList);
+      }
+      if(this.fileType.includes('video')) {
+        whiteList = whiteList.concat(videoList);
+      }
+      if(this.fileType.includes('word')) {
+        whiteList = whiteList.concat(wordList);
+      }
+      if(this.fileType.includes('excel')) {
+        whiteList = whiteList.concat(excelList);
+      }
+      if(this.fileType.includes('ppt')) {
+        whiteList = whiteList.concat(pptList);
+      }
+      if(this.fileType.includes('pdf')) {
+        whiteList = whiteList.concat(pdfList);
+      }
+
+      if (whiteList.indexOf(fileSuffix) === -1) {
+        return this.$errorMsg('只支持上传' + this.fileType.join(',') + '文件!');
+      }
+			const fileName = this.createName(file.name);
+			const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+
+      this.dataObj.key = this.dataObj.dir + fileName;
+		},
+		handleUploadSuccess(res, file, fileList) {
+			const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+			this.fileList.pop();
+			this.fileList.push({
+				name: file.name,
+				url: this.dataObj.key
+			});
+			this.showFileList = true;
+			loading.close();
+		}
+	}
+};
+</script>

+ 78 - 0
src/components/Common/import-button.vue

@@ -0,0 +1,78 @@
+<template>
+  <div>
+    <el-upload
+      style="display: inline-block; margin: 0 10px;"
+      action="import"
+      :http-request="handleImport"
+      :file-list="importFileList"
+    >
+      <el-button size="small" type="primary" :icon="isIcon ? 'el-icon-download':''" :loading="importLoading">{{ importLoading ? '导入中...' : imText }}</el-button>
+    </el-upload>
+  </div>
+</template>
+
+<script>
+import { handleImport } from '@/utils/util'
+
+export default {
+  name: 'ImportButton',
+  props: {
+    imText: { // 按钮文字
+      type: String,
+      default: '导入数据'
+    },
+    isIcon: { // 是否显示icon图标
+      type: Boolean,
+      default: true
+    },
+    imUrl: { // 导入地址
+      type: String,
+      default: '',
+    },
+    imParams: { // 导入参数
+      type: Object,
+      default: null
+    }
+  },
+  data() {
+    return {
+      importLoading: false,
+      importFileList: [],
+    }
+  },
+  methods: {
+    async handleImport(param) {
+      this.importLoading = true;
+      const file = param.file;
+      const formData = new FormData();
+      formData.append("file", file);
+
+      if(this.imParams) {
+        for (let key in this.imParams) {
+          if (this.imParams.hasOwnProperty(key)) {
+            formData.append(key, this.imParams[key]);
+          }
+        }
+      }
+
+      let result = await handleImport(this.imUrl, formData);
+      this.importLoading = false;
+      this.importFileList = [];
+      if(result.code == 200) {
+        this.$alert(result.message, '导入成功', {
+          confirmButtonText: '确定'
+        });
+        this.$emit('importSuccess');
+      }else {
+        this.$alert(result.message, '导入失败', {
+          confirmButtonText: '确定'
+        });
+      }
+    },
+  }
+}
+</script>
+
+<style>
+
+</style>

+ 2 - 1
src/main.js

@@ -29,7 +29,8 @@ Vue.prototype.$warningNotify = warningNotify;
 // 自定义组件
 import ExportButton from '@/components/Common/export-button.vue'
 Vue.component('ExportButton', ExportButton);
-
+import ImportButton from '@/components/Common/import-button.vue'
+Vue.component('ImportButton', ImportButton);
 
 /**
  * If you don't want to use mock-server

+ 149 - 0
src/views/sales_policy/codealer_list.vue

@@ -0,0 +1,149 @@
+<template>
+  <el-container v-if="isShow">
+    <el-header height="100%" class="mg">
+      <el-row>
+        <el-col :span="6">
+          <el-input
+            v-model="input"
+            placeholder="销售政策编号"
+            size="normal"
+            clearable
+            @change=""
+          ></el-input>
+        </el-col>
+        <el-col :span="6" :push="1">
+          <el-input
+            v-model="input"
+            placeholder="销售政策说明"
+            size="normal"
+            clearable
+            @change=""
+          ></el-input>
+        </el-col>
+        <el-col :span="6" :push="2">
+          <el-input
+            v-model="input"
+            placeholder="表头备注"
+            size="normal"
+            clearable
+            @change=""
+          ></el-input>
+        </el-col>
+        <!-- <el-col :span="6" class="btn">
+
+        </el-col> -->
+      </el-row>
+      <el-row class="mg">
+        <el-button type="primary" size="default" @click="">查询</el-button>
+        <el-button type="primary" size="default" @click="">重置</el-button>
+        <el-button type="primary" size="default" @click="">导出</el-button>
+      </el-row>
+    </el-header>
+    <el-main>
+      <el-table :data="tableData" border style="width: 100%">
+        <el-table-column prop="name" label="操作" width="120" align="center">
+        </el-table-column>
+        <el-table-column
+          prop="province"
+          label="状态"
+          width="120"
+          align="center"
+        >
+        </el-table-column>
+        <el-table-column
+          prop="city"
+          label="销售政策编号"
+          width="150"
+          align="center"
+        >
+        </el-table-column>
+        <el-table-column
+          prop="address"
+          label="销售政策说明"
+          width="400"
+          align="center"
+        >
+        </el-table-column>
+        <el-table-column prop="zip" label="表头备注" width="200" align="center">
+        </el-table-column>
+        <el-table-column
+          prop="zip"
+          label="关联经销商"
+          width="150"
+          align="center"
+        >
+        </el-table-column>
+        <el-table-column prop="zip" label="生效日期" align="center">
+        </el-table-column>
+        <el-table-column prop="zip" label="结束日期" align="center">
+        </el-table-column>
+        <el-table-column prop="zip" label="制表人" align="center">
+        </el-table-column>
+        <el-table-column prop="zip" label="制表日期" align="center">
+        </el-table-column>
+      </el-table>
+    </el-main>
+    <Pagination />
+  </el-container>
+  <Distributor v-else/>
+</template>
+
+<script>
+import Pagination from "./components/Pagination";
+import Distributor from './components/Distributor'
+export default {
+  data() {
+    return {
+      isShow:false,
+      input: "",
+      tableData: [
+        {
+          date: "2016-05-02",
+          name: "王小虎",
+          province: "上海",
+          city: "普陀区",
+          address: "上海市普陀区金沙江路 1518 弄",
+          zip: 200333,
+        },
+        {
+          date: "2016-05-04",
+          name: "王小虎",
+          province: "上海",
+          city: "普陀区",
+          address: "上海市普陀区金沙江路 1517 弄",
+          zip: 200333,
+        },
+        {
+          date: "2016-05-01",
+          name: "王小虎",
+          province: "上海",
+          city: "普陀区",
+          address: "上海市普陀区金沙江路 1519 弄",
+          zip: 200333,
+        },
+        {
+          date: "2016-05-03",
+          name: "王小虎",
+          province: "上海",
+          city: "普陀区",
+          address: "上海市普陀区金沙江路 1516 弄",
+          zip: 200333,
+        },
+      ],
+    };
+  },
+  components: {
+    Pagination,
+    Distributor
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+.mg {
+  margin: 20px 0;
+}
+.btn {
+  text-align: right;
+}
+</style>

+ 171 - 0
src/views/sales_policy/components/AddCondition.vue

@@ -0,0 +1,171 @@
+<template>
+  <el-container>
+    <el-header class="header">
+      <el-divider></el-divider>
+      <h4>限定条件</h4>
+      <el-divider></el-divider>
+    </el-header>
+    <el-main>
+      <el-row>
+        <el-row :gutter="50">
+          <el-col :xs="24" :sm="12" :lg="12" class="mgb">
+            <el-row>
+              <el-row class="pdt">
+                <el-button
+                  type="primary"
+                  size="default"
+                  @click="centerDialogVisible = true"
+                  >添加机型</el-button
+                >
+
+                <el-button type="primary" size="default" @click=""
+                  >删除机型</el-button
+                >
+              </el-row>
+              <el-row>
+                <el-table style="width: 100%" :data="tableData" border>
+                  <el-table-column type="selection" width="55" align="center">
+                  </el-table-column>
+                  <el-table-column label="日期" width="120" align="center">
+                    <template slot-scope="scope">{{ scope.row.date }}</template>
+                  </el-table-column>
+                  <el-table-column prop="name" label="姓名" align="center">
+                  </el-table-column>
+                </el-table>
+              </el-row>
+            </el-row>
+          </el-col>
+          <el-col :xs="24" :sm="12" :lg="12" class="mgb">
+            <el-row>
+              <el-row class="pdt">
+                <el-button type="primary" size="default" @click=""
+                  >添加机型</el-button
+                >
+                <el-button type="primary" size="default" @click=""
+                  >删除机型</el-button
+                >
+              </el-row>
+              <el-row>
+                <el-table style="width: 100%" :data="tableData" border>
+                  <el-table-column type="selection" width="55" align="center">
+                  </el-table-column>
+                  <el-table-column label="日期" width="120" align="center">
+                    <template slot-scope="scope">{{ scope.row.date }}</template>
+                  </el-table-column>
+                  <el-table-column prop="name" label="姓名" align="center">
+                  </el-table-column>
+                </el-table>
+              </el-row>
+            </el-row>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :xs="24" :sm="4" :lg="4" class="mgb">配置比例设置</el-col>
+          <el-col :xs="24" :sm="4" :lg="4" class="mgb">限定机型</el-col>
+          <el-col :xs="24" :sm="6" :lg="4" class="mgb">
+            <input type="text" :value="1"
+          /></el-col>
+          <el-col :xs="24" :sm="4" :lg="4" class="mgb">配提比例</el-col>
+          <el-col :xs="24" :sm="4" :lg="4" class="mgb">
+            <input type="text" :value="1"
+          /></el-col>
+          <el-col class="text_rihgt" v-if="false">
+            <el-button type="primary" size="default" @click=""
+              >添加限定条件</el-button
+            ></el-col
+          >
+        </el-row>
+        <el-divider></el-divider>
+      </el-row>
+    </el-main>
+    <el-footer height="100px">
+      <el-button type="primary" size="default" @click="">保存</el-button>
+      <el-button type="primary" size="default" @click="">重置</el-button>
+    </el-footer>
+    <AddModel :centerDialogVisible="centerDialogVisible" />
+  </el-container>
+</template>
+
+<script>
+import AddModel from "./AddModel";
+export default {
+  data() {
+    return {
+      centerDialogVisible: false,
+      tableData: [
+        {
+          date: "2016-05-03",
+          name: "王小虎",
+          address: "上海市普陀区金沙江路 1518 弄",
+        },
+        {
+          date: "2016-05-02",
+          name: "王小虎",
+          address: "上海市普陀区金沙江路 1518 弄",
+        },
+        {
+          date: "2016-05-04",
+          name: "王小虎",
+          address: "上海市普陀区金沙江路 1518 弄",
+        },
+        {
+          date: "2016-05-01",
+          name: "王小虎",
+          address: "上海市普陀区金沙江路 1518 弄",
+        },
+        {
+          date: "2016-05-08",
+          name: "王小虎",
+          address: "上海市普陀区金沙江路 1518 弄",
+        },
+        {
+          date: "2016-05-06",
+          name: "王小虎",
+          address: "上海市普陀区金沙江路 1518 弄",
+        },
+        {
+          date: "2016-05-07",
+          name: "王小虎",
+          address: "上海市普陀区金沙江路 1518 弄",
+        },
+      ],
+      multipleSelection: [],
+    };
+  },
+  methods: {
+    toggleSelection(rows) {
+      if (rows) {
+        rows.forEach((row) => {
+          this.$refs.multipleTable.toggleRowSelection(row);
+        });
+      } else {
+        this.$refs.multipleTable.clearSelection();
+      }
+    },
+    handleSelectionChange(val) {
+      this.multipleSelection = val;
+    },
+  },
+  components: {
+    AddModel,
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+.mgb {
+  margin-bottom: 20px;
+}
+.pdt {
+  padding-bottom: 20px;
+}
+.text_rihgt {
+  text-align: right;
+}
+.header {
+  margin-bottom: 40px;
+}
+.el-main {
+  overflow: hidden;
+}
+</style>

+ 41 - 0
src/views/sales_policy/components/AddModel.vue

@@ -0,0 +1,41 @@
+<template>
+  <el-dialog
+    :visible.sync="centerDialogVisible"
+    width="70%"
+    center
+  >
+    <div>
+      <TabelTransfer />
+    </div>
+    <span slot="footer" class="dialog-footer">
+      <el-button @click="centerDialogVisible = false">取 消</el-button>
+      <el-button type="primary" @click="centerDialogVisible = false"
+        >确 定</el-button
+      >
+    </span>
+  </el-dialog>
+</template>
+
+<script>
+import TabelTransfer from "./TabelTransfer.vue";
+export default {
+  data() {
+    return {};
+  },
+  props: {
+    centerDialogVisible: {
+      type: Boolean,
+      default: false,
+    },
+  },
+  components: {
+    TabelTransfer,
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+  .el-dialog{
+    overflow: hidden;
+  }
+</style>

+ 325 - 0
src/views/sales_policy/components/AddPolicy.vue

@@ -0,0 +1,325 @@
+<template>
+  <el-container :direction="vertical">
+    <el-header height="" class="pdt">
+      <h4>销售政策信息</h4>
+      <el-divider></el-divider>
+      <el-form
+        :model="ruleForm"
+        :rules="rules"
+        ref="ruleForm"
+        label-width="120px"
+         size="small" label-position="left"
+        class="demo-ruleForm"
+      >
+        <el-row type="flex">
+          <el-col :span="9">
+            <el-form-item label="销售政策编号" prop="name">
+              <el-input
+                v-model="ruleForm.name"
+                placeholder="如未填写,则系统自动生成"
+              ></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="15">
+            <el-form-item label="销售政策说明" prop="name">
+              <el-input
+                v-model="ruleForm.name"
+                placeholder="销售政策说明"
+              ></el-input>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row type="flex">
+          <el-col :span="9">
+            <el-form-item label="销售政策类型" prop="name">
+              <el-select v-model="value" placeholder="请选择">
+                <el-option
+                  v-for="item in options"
+                  :key="item.value"
+                  :label="item.label"
+                  :value="item.value"
+                >
+                </el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="9">
+            <el-form-item label="支付钱包类型" prop="name">
+              <el-select v-model="value" placeholder="请选择">
+                <el-option
+                  v-for="item in options"
+                  :key="item.value"
+                  :label="item.label"
+                  :value="item.value"
+                >
+                </el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-form-item label="表头备注" prop="name">
+            <el-input
+              v-model="ruleForm.name"
+              placeholder="新风机变频挂机。按提货数量1:3开单"
+            ></el-input>
+          </el-form-item>
+        </el-row>
+        <el-row type="flex">
+          <el-col :span="9">
+            <el-form-item label="制单人" prop="name">
+              <el-input
+                v-model="ruleForm.name"
+                placeholder=""
+              ></el-input> </el-form-item
+          ></el-col>
+          <el-col :span="9">
+            <el-form-item label="制单日期" prop="name">
+              <el-input
+                v-model="ruleForm.name"
+                placeholder="如未填写,则系统自动生成"
+              ></el-input> </el-form-item
+          ></el-col>
+        </el-row>
+        <el-row type="flex">
+          <el-col :span="9">
+            <el-form-item label="生效日期" prop="name">
+              <el-input
+                v-model="ruleForm.name"
+                placeholder=""
+              ></el-input> </el-form-item
+          ></el-col>
+          <el-col :span="9">
+            <el-form-item label="失效日期" prop="name">
+              <el-input
+                v-model="ruleForm.name"
+                placeholder=""
+              ></el-input> </el-form-item
+          ></el-col>
+        </el-row>
+        <el-row>
+          <el-form-item label="政策封面图">
+            <el-upload
+              class="avatar-uploader"
+              action="https://jsonplaceholder.typicode.com/posts/"
+              :show-file-list="false"
+              :on-success="handleAvatarSuccess"
+              :before-upload="beforeAvatarUpload"
+            >
+              <img v-if="imageUrl" :src="imageUrl" class="avatar" />
+              <i v-else class="el-icon-plus avatar-uploader-icon"></i>
+            </el-upload>
+          </el-form-item>
+        </el-row>
+      </el-form>
+    </el-header>
+    <el-main>
+      <el-row>
+        <el-divider></el-divider>
+        <el-row type="flex" align="middle">
+          <el-col :span="2"> <h4>货品信息</h4> </el-col
+          ><el-button> 导入货品价格表</el-button>
+        </el-row>
+        <el-divider></el-divider>
+      </el-row>
+      <el-table
+        v-loading="listLoading"
+        :data="dataList"
+        element-loading-text="Loading"
+        border
+        fit
+        highlight-current-row
+        stripe
+      >
+        <el-table-column
+          fixed
+          prop="num"
+          label="序号"
+          width="50"
+          align="center"
+        >
+        </el-table-column>
+        <el-table-column
+          prop="name"
+          label="货品编码"
+          width="120"
+          align="center"
+        >
+        </el-table-column>
+        <el-table-column
+          prop="province"
+          label="货品名称"
+          width="120"
+          align="center"
+        >
+        </el-table-column>
+        <el-table-column
+          prop="city"
+          label="规格型号"
+          width="120"
+          align="center"
+        >
+        </el-table-column>
+        <el-table-column
+          prop="address"
+          label="销售类型编码"
+          width="500"
+          align="center"
+        >
+        </el-table-column>
+        <el-table-column prop="zip" label="销售类型" width="120" align="center">
+        </el-table-column>
+        <el-table-column prop="zip" label="单价" width="120" align="center">
+        </el-table-column>
+        <el-table-column prop="zip" label="返利比例" width="120" align="center">
+        </el-table-column>
+        <el-table-column prop="zip" label="表体备注" width="120" align="center">
+        </el-table-column>
+        <el-table-column fixed="right" label="操作" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small">删除</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+    </el-main>
+    <Pagination />
+    <el-footer height="" class="footer">
+      <el-row>
+        <el-divider></el-divider>
+        <el-row type="flex" align="middle">
+          <el-col :span="2">
+            <h4>货品信息</h4>
+          </el-col>
+        </el-row>
+        <el-divider></el-divider>
+      </el-row>
+      <el-row class="radio">
+        <el-radio v-model="radio" label="1">全部经销商</el-radio>
+        <el-radio v-model="radio" label="2">品类</el-radio>
+        <el-radio v-model="radio" label="1">地区</el-radio>
+        <el-radio v-model="radio" label="2">指定</el-radio>
+      </el-row>
+      <Transfer/>
+    </el-footer>
+  </el-container>
+</template>
+
+<script>
+import Pagination from "./Pagination";
+import Transfer from "./Transfer";
+export default {
+  data() {
+    return {
+      input: "",
+
+      ruleForm: {
+        name: "",
+      },
+      listLoading: false,
+      rules: {
+        name: [
+          { required: true, message: "", trigger: "click" },
+          { min: 3, max: 5, message: "", trigger: "click" },
+        ],
+      },
+
+      dataList: [
+        {
+          num: "2",
+          name: "王小虎",
+          province: "上海",
+          city: "普陀区",
+          address: "上海市普陀区金沙江路 1518 弄",
+          zip: 200333,
+        },
+        {
+          num: "2",
+          name: "王小虎",
+          province: "上海",
+          city: "普陀区",
+          address: "上海市普陀区金沙江路 1518 弄",
+          zip: 200333,
+        },
+        {
+          num: "2",
+          name: "王小虎",
+          province: "上海",
+          city: "普陀区",
+          address: "上海市普陀区金沙江路 1518 弄",
+          zip: 200333,
+        },
+        {
+          num: "2",
+          name: "王小虎",
+          province: "上海",
+          city: "普陀区",
+          address: "上海市普陀区金沙江路 1518 弄",
+          zip: 200333,
+        },
+        {
+          num: "2",
+          name: "王小虎",
+          province: "上海",
+          city: "普陀区",
+          address: "上海市普陀区金沙江路 1518 弄",
+          zip: 200333,
+        },
+        {
+          num: "2",
+          name: "王小虎",
+          province: "上海",
+          city: "普陀区",
+          address: "上海市普陀区金沙江路 1518 弄",
+          zip: 200333,
+        },
+        {
+          num: "2",
+          name: "王小虎",
+          province: "上海",
+          city: "普陀区",
+          address: "上海市普陀区金沙江路 1518 弄",
+          zip: 200333,
+        },
+      ],
+      radio: "",
+    };
+  },
+
+  methods: {
+    handelLeftCheck(e) {
+      console.log(e);
+    },
+  },
+  components: {
+    Transfer,
+    Pagination,
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+h4 {
+  margin: 0;
+}
+.pdt {
+  padding-top: 20px;
+}
+
+.radio {
+  padding: 20px 0;
+}
+.el-divider--horizontal {
+  margin: 20px 0;
+}
+.el-container .el-divider--horizontal {
+  margin: 10px;
+}
+
+.el-select {
+  width: 100%;
+}
+
+.footer {
+  margin-bottom: 20px;
+}
+</style>

+ 299 - 0
src/views/sales_policy/components/Distributor.vue

@@ -0,0 +1,299 @@
+<template>
+  <el-container :direction="vertical">
+    <el-header height="" class="pdt">
+      <el-form
+        :model="ruleForm"
+        :rules="rules"
+        ref="ruleForm"
+        label-width="120px"
+         size="small" label-position="left"
+        class="demo-ruleForm"
+      >
+        <el-row type="flex">
+          <el-col :span="9">
+            <el-form-item label="销售政策编号" prop="name">
+              <el-input
+                v-model="ruleForm.name"
+                placeholder="如未填写,则系统自动生成"
+              ></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="15">
+            <el-form-item label="销售政策说明" prop="name">
+              <el-input
+                v-model="ruleForm.name"
+                placeholder="销售政策说明"
+              ></el-input>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row type="flex">
+          <el-col :span="9">
+            <el-form-item label="销售政策类型" prop="name">
+              <el-select v-model="value" placeholder="请选择">
+                <el-option
+                  v-for="item in options"
+                  :key="item.value"
+                  :label="item.label"
+                  :value="item.value"
+                >
+                </el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="9">
+            <el-form-item label="部门" prop="name">
+              <el-select v-model="value" placeholder="请选择">
+                <el-option
+                  v-for="item in options"
+                  :key="item.value"
+                  :label="item.label"
+                  :value="item.value"
+                >
+                </el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-form-item label="表头备注" prop="name">
+            <el-input
+              v-model="ruleForm.name"
+              placeholder="新风机变频挂机。按提货数量1:3开单"
+            ></el-input>
+          </el-form-item>
+        </el-row>
+        <el-row>
+          <el-col :span="9">
+            <el-form-item label="制单人" prop="name">
+              <el-input
+                v-model="ruleForm.name"
+                placeholder="新风机变频挂机。按提货数量1:3开单"
+              ></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="9">
+            <el-form-item label="制单日期" prop="name">
+              <el-input
+                v-model="ruleForm.name"
+                placeholder="2020-01-23"
+              ></el-input>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+    </el-header>
+    <el-main>
+      <el-table
+        v-loading="listLoading"
+        :data="dataList"
+        element-loading-text="Loading"
+        border
+        fit
+        highlight-current-row
+        stripe
+      >
+        <el-table-column
+          fixed
+          prop="num"
+          label="序号"
+          width="50"
+          align="center"
+        >
+        </el-table-column>
+        <el-table-column
+          prop="name"
+          label="经销商编码"
+          width="300"
+          align="center"
+        >
+          <template slot-scope="scope">
+            <el-input
+              v-model="input"
+              placeholder=""
+              size="normal"
+              clearable
+              @change=""
+            ></el-input>
+          </template>
+        </el-table-column>
+        <el-table-column
+          prop="province"
+          label="经销商名称"
+          width="300"
+          align="center"
+        >
+          <template slot-scope="scope">
+            <el-input
+              v-model="input"
+              placeholder=""
+              size="normal"
+              clearable
+              @change=""
+            ></el-input>
+          </template>
+        </el-table-column>
+        <el-table-column
+          prop="city"
+          label="最多提货套数"
+          width="300"
+          align="center"
+        >
+          <template slot-scope="scope">
+            <el-input
+              v-model="input"
+              placeholder=""
+              size="normal"
+              clearable
+              @change=""
+            ></el-input>
+          </template>
+        </el-table-column>
+        <el-table-column
+          prop="address"
+          label="表体备注"
+          width="300"
+          align="center"
+        >
+          <template slot-scope="scope">
+            <el-input
+              v-model="input"
+              placeholder=""
+              size="normal"
+              clearable
+              @change=""
+            ></el-input>
+          </template>
+        </el-table-column>
+        <el-table-column
+          prop="zip"
+          label="最近订货时间"
+          width="300"
+          align="center"
+        >
+        </el-table-column>
+        <el-table-column fixed="right" label="操作" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small">删除</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+    </el-main>
+    <el-footer>
+      <el-row>
+        <el-col :span="12">
+          <el-button type="primary" size="default" @click="">保存</el-button>
+          <el-button type="primary" size="default" @click="">重置</el-button>
+        </el-col>
+        <el-col :span="12" class="text_right">
+          <el-button type="primary" size="default" @click="">添加</el-button>
+          <el-button type="primary" size="default" @click="">删除</el-button>
+        </el-col>
+      </el-row>
+      <!-- <Pagination /> -->
+    </el-footer>
+  </el-container>
+</template>
+
+<script>
+import Pagination from "./Pagination";
+import Transfer from "./Transfer";
+export default {
+  data() {
+    return {
+      input: "",
+
+      ruleForm: {
+        name: "",
+      },
+      listLoading: false,
+      rules: {
+        name: [
+          { required: true, message: "", trigger: "click" },
+          { min: 3, max: 5, message: "", trigger: "click" },
+        ],
+      },
+
+      dataList: [
+        {
+          num: "2",
+          name: "王小虎",
+          province: "上海",
+          city: "普陀区",
+          address: "上海市普陀区金沙江路 1518 弄",
+          zip: 200333,
+        },
+        {
+          num: "2",
+          name: "王小虎",
+          province: "上海",
+          city: "普陀区",
+          address: "上海市普陀区金沙江路 1518 弄",
+          zip: 200333,
+        },
+        {
+          num: "2",
+          name: "王小虎",
+          province: "上海",
+          city: "普陀区",
+          address: "上海市普陀区金沙江路 1518 弄",
+          zip: 200333,
+        },
+        {
+          num: "2",
+          name: "王小虎",
+          province: "上海",
+          city: "普陀区",
+          address: "上海市普陀区金沙江路 1518 弄",
+          zip: 200333,
+        },
+        {
+          num: "2",
+          name: "王小虎",
+          province: "上海",
+          city: "普陀区",
+          address: "上海市普陀区金沙江路 1518 弄",
+          zip: 200333,
+        },
+        {
+          num: "2",
+          name: "王小虎",
+          province: "上海",
+          city: "普陀区",
+          address: "上海市普陀区金沙江路 1518 弄",
+          zip: 200333,
+        },
+        {
+          num: "2",
+          name: "王小虎",
+          province: "上海",
+          city: "普陀区",
+          address: "上海市普陀区金沙江路 1518 弄",
+          zip: 200333,
+        },
+      ],
+      radio: "",
+    };
+  },
+
+  methods: {
+    handelLeftCheck(e) {
+      console.log(e);
+    },
+  },
+  components: {
+    Transfer,
+    Pagination,
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+.pdt {
+  padding-top: 20px;
+}
+
+.text_right {
+  text-align: right;
+}
+</style>

+ 271 - 0
src/views/sales_policy/components/NewInfo.vue

@@ -0,0 +1,271 @@
+<template>
+  <el-container :direction="vertical">
+    <el-header height="" class="pdt">
+      <h4>销售政策信息</h4>
+      <el-divider></el-divider>
+      <el-form
+        :model="ruleForm"
+        :rules="rules"
+        ref="ruleForm"
+        label-width="120px"
+         size="small" label-position="left"
+        class="demo-ruleForm"
+      >
+        <el-row type="flex">
+          <el-col :span="8">
+            <el-form-item label="营销活动" prop="name">
+              <el-input
+                v-model="ruleForm.name"
+                placeholder="如未填写,则系统自动生成"
+              ></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="营销活动标题" prop="name">
+              <el-input
+                v-model="ruleForm.name"
+                placeholder="销售政策说明"
+              ></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="部门" prop="name">
+              <el-input
+                v-model="ruleForm.name"
+                placeholder="家用空调"
+              ></el-input>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-form-item label="表头备注" prop="name">
+            <el-input
+              v-model="ruleForm.name"
+              placeholder="新风机变频挂机。按提货数量1:3开单"
+            ></el-input>
+          </el-form-item>
+        </el-row>
+        <el-row>
+          <el-form-item label="政策封面图">
+            <el-upload
+              class="avatar-uploader"
+              action="https://jsonplaceholder.typicode.com/posts/"
+              :show-file-list="false"
+              :on-success="handleAvatarSuccess"
+              :before-upload="beforeAvatarUpload"
+            >
+              <img v-if="imageUrl" :src="imageUrl" class="avatar" />
+              <i v-else class="el-icon-plus avatar-uploader-icon"></i>
+            </el-upload>
+          </el-form-item>
+        </el-row>
+
+        <el-row type="flex">
+          <el-col :span="9">
+            <el-form-item label="制单人" prop="name">
+              <el-input
+                v-model="ruleForm.name"
+                placeholder=""
+              ></el-input> </el-form-item
+          ></el-col>
+          <el-col :span="9">
+            <el-form-item label="制单日期" prop="name">
+              <el-input
+                v-model="ruleForm.name"
+                placeholder="如未填写,则系统自动生成"
+              ></el-input> </el-form-item
+          ></el-col>
+        </el-row>
+        <el-row type="flex">
+          <el-col :span="9">
+            <el-form-item label="生效日期" prop="name">
+              <el-input
+                v-model="ruleForm.name"
+                placeholder=""
+              ></el-input> </el-form-item
+          ></el-col>
+          <el-col :span="9">
+            <el-form-item label="失效日期" prop="name">
+              <el-input
+                v-model="ruleForm.name"
+                placeholder=""
+              ></el-input> </el-form-item
+          ></el-col>
+        </el-row>
+      </el-form>
+    </el-header>
+    <el-main>
+      <el-row>
+        <el-divider></el-divider>
+        <el-row type="flex" align="middle">
+          <el-col :span="2">
+            <h4>货品信息</h4>
+          </el-col>
+        </el-row>
+        <el-divider></el-divider>
+      </el-row>
+
+      <Transfer>
+        <template #header>
+          <el-row :gutter="20">
+            <el-col :span="8" :offset="0">
+              <el-input
+                v-model="input"
+                placeholder=""
+                size="normal"
+                clearable
+                @change=""
+              ></el-input>
+            </el-col>
+            <el-col :span="8" :offset="0">
+              <el-input
+                v-model="input"
+                placeholder=""
+                size="normal"
+                clearable
+                @change=""
+              ></el-input>
+            </el-col>
+            <el-col :span="8">
+              <el-button type="primary" size="default" @click=""
+                >确定</el-button
+              >
+              <el-button type="primary" size="default" @click=""
+                >重置</el-button
+              >
+            </el-col>
+          </el-row>
+        </template>
+        <template #footer>
+          <el-row>
+            <el-button type="primary" size="default" @click="">保存</el-button>
+
+            <el-button type="primary" size="default" @click="">重置</el-button>
+          </el-row>
+        </template>
+      </Transfer>
+    </el-main>
+
+    <el-footer height="" class="footer"> </el-footer>
+  </el-container>
+</template>
+
+<script>
+import Pagination from "./Pagination";
+import Transfer from "./Transfer";
+export default {
+  data() {
+    return {
+      input: "",
+
+      ruleForm: {
+        name: "",
+      },
+      listLoading: false,
+      rules: {
+        name: [
+          { required: true, message: "", trigger: "click" },
+          { min: 3, max: 5, message: "", trigger: "click" },
+        ],
+      },
+
+      dataList: [
+        {
+          num: "2",
+          name: "王小虎",
+          province: "上海",
+          city: "普陀区",
+          address: "上海市普陀区金沙江路 1518 弄",
+          zip: 200333,
+        },
+        {
+          num: "2",
+          name: "王小虎",
+          province: "上海",
+          city: "普陀区",
+          address: "上海市普陀区金沙江路 1518 弄",
+          zip: 200333,
+        },
+        {
+          num: "2",
+          name: "王小虎",
+          province: "上海",
+          city: "普陀区",
+          address: "上海市普陀区金沙江路 1518 弄",
+          zip: 200333,
+        },
+        {
+          num: "2",
+          name: "王小虎",
+          province: "上海",
+          city: "普陀区",
+          address: "上海市普陀区金沙江路 1518 弄",
+          zip: 200333,
+        },
+        {
+          num: "2",
+          name: "王小虎",
+          province: "上海",
+          city: "普陀区",
+          address: "上海市普陀区金沙江路 1518 弄",
+          zip: 200333,
+        },
+        {
+          num: "2",
+          name: "王小虎",
+          province: "上海",
+          city: "普陀区",
+          address: "上海市普陀区金沙江路 1518 弄",
+          zip: 200333,
+        },
+        {
+          num: "2",
+          name: "王小虎",
+          province: "上海",
+          city: "普陀区",
+          address: "上海市普陀区金沙江路 1518 弄",
+          zip: 200333,
+        },
+      ],
+      radio: "",
+    };
+  },
+
+  methods: {
+    handelLeftCheck(e) {
+      console.log(e);
+    },
+  },
+  components: {
+    Transfer,
+    Pagination,
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+h4 {
+  margin: 0;
+}
+.pdt {
+  padding-top: 20px;
+}
+
+.radio {
+  padding: 20px 0;
+}
+.el-divider--horizontal {
+  margin: 20px 0;
+}
+.el-container .el-divider--horizontal {
+  margin: 10px;
+}
+
+.el-select {
+  width: 100%;
+}
+
+.footer {
+  margin-bottom: 20px;
+}
+</style>

+ 51 - 0
src/views/sales_policy/components/Pagination.vue

@@ -0,0 +1,51 @@
+<template>
+ <div class="pagination clearfix pd">
+      <div class="fr">
+        <el-pagination
+          @size-change="handleSizeChange"
+          @current-change="handleCurrentChange"
+          :current-page="currentPage"
+          :page-sizes="[10, 20, 30, 50]"
+          :page-size="10"
+          layout="total, sizes, prev, pager, next, jumper"
+          :total="listTotal">
+        </el-pagination>
+      </div>
+    </div>
+</template>
+
+<script>
+export default {
+  data() {
+    return {
+    isOpen: false, // 是否展开条件筛选
+      currentPage: 1, // 当前页码
+      pageSize: 10, // 每页数量
+      listTotal: 0, // 列表总数
+      dataList: null, // 列表数据
+    }
+  },
+  methods: {
+      // 更改每页数量
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = 1;
+      this.getList();
+    },
+    // 更改当前页
+    handleCurrentChange(val) {
+      this.currentPage = val;
+      this.getList();
+    },
+  },
+}
+</script>
+
+<style lang="scss">
+.pd{
+    margin: 0 20px 20px 0;
+}
+    .el-pagination {
+  text-align: right;
+}
+</style>

+ 327 - 0
src/views/sales_policy/components/TabelTransfer.vue

@@ -0,0 +1,327 @@
+<template>
+  <el-container :direction="vertical">
+    <el-header height="">
+      <el-row :gutter="20">
+        <el-col :span="8" :offset="0">
+          <el-input
+            v-model="input"
+            placeholder="产品编码"
+            size="normal"
+            clearable
+            @change=""
+          ></el-input>
+        </el-col>
+        <el-col :span="8" :offset="0">
+          <el-input
+            v-model="input"
+            placeholder="产品名称"
+            size="normal"
+            clearable
+            @change=""
+          ></el-input>
+        </el-col>
+        <el-col :span="8" :offset="0">
+          <el-input
+            v-model="input"
+            placeholder="产品型号"
+            size="normal"
+            clearable
+            @change=""
+          ></el-input>
+        </el-col>
+      </el-row>
+      <el-row :gutter="20" class="pdt">
+        <el-col :span="8" :offset="0">
+          <el-date-picker
+            v-model="value1"
+            type="datetimerange"
+            range-separator="至"
+            start-placeholder="开始日期"
+            end-placeholder="结束日期"
+          >
+          </el-date-picker
+        ></el-col>
+      </el-row>
+      <el-row :gutter="20" class="query">
+        <el-button type="primary" class="query_btn" size="default" @click=""
+          >查询</el-button
+        >
+      </el-row>
+    </el-header>
+    <el-main height="">
+      <el-row>
+        <el-row :gutter="50">
+          <el-col :span="10">
+            <el-row>
+              <el-row> </el-row>
+              <el-row>
+                <el-row class="title"> 可选产品列表 </el-row>
+
+                <el-table style="width: 100%" :data="tableData" border>
+                  <el-table-column type="selection" width="55" align="center">
+                  </el-table-column>
+                  <el-table-column label="日期" width="120" align="center">
+                    <template slot-scope="scope">{{ scope.row.date }}</template>
+                  </el-table-column>
+                  <el-table-column prop="name" label="姓名" align="center">
+                  </el-table-column>
+                </el-table>
+                <el-row class="mg">
+                     <Pagination/>
+                </el-row>
+              </el-row>
+            </el-row>
+          </el-col>
+          <el-col :span="4" class="middle">
+            <el-row :gutter="20" justify="center" align="middle">
+              <el-row class="btn">
+                <el-button type="primary" size="default" @click=""
+                  >全部添加</el-button
+                >
+              </el-row>
+              <el-row class="btn">
+                <el-button type="primary" size="default" @click=""
+                  >增加</el-button
+                >
+              </el-row>
+              <el-row class="btn">
+                <el-button type="primary" size="default" @click=""
+                  >删除</el-button
+                ></el-row
+              >
+              <el-row class="btn"
+                ><el-button type="primary" size="default" @click=""
+                  >全部删除</el-button
+                ></el-row
+              >
+            </el-row>
+          </el-col>
+          <el-col :span="10">
+            <el-row>
+              <el-row> </el-row>
+              <el-row>
+                <el-row class="title"> 已选产品列表 </el-row>
+                <el-table style="width: 100%" :data="tableData" border>
+                  <el-table-column type="selection" width="55" align="center">
+                  </el-table-column>
+                  <el-table-column label="日期" width="120" align="center">
+                    <template slot-scope="scope">{{ scope.row.date }}</template>
+                  </el-table-column>
+                  <el-table-column prop="name" label="姓名" align="center">
+                  </el-table-column>
+                </el-table>
+                   <el-row class="mg">
+                     <Pagination/>
+                </el-row>
+              </el-row>
+            </el-row>
+          </el-col>
+        </el-row>
+      </el-row>
+    </el-main>
+  </el-container>
+</template>
+
+<script>
+import Pagination from "./Pagination";
+export default {
+  data() {
+    return {
+      input: "",
+      leftData: [],
+      rightData: [],
+      centerDialogVisible: false,
+      value1: [new Date(2000, 10, 10, 10, 10), new Date(2000, 10, 11, 10, 10)],
+      tableData: [
+        {
+          date: "2016-05-03",
+          name: "王小虎",
+          address: "上海市普陀区金沙江路 1518 弄",
+        },
+        {
+          date: "2016-05-02",
+          name: "王小虎",
+          address: "上海市普陀区金沙江路 1518 弄",
+        },
+        {
+          date: "2016-05-04",
+          name: "王小虎",
+          address: "上海市普陀区金沙江路 1518 弄",
+        },
+        {
+          date: "2016-05-01",
+          name: "王小虎",
+          address: "上海市普陀区金沙江路 1518 弄",
+        },
+        {
+          date: "2016-05-08",
+          name: "王小虎",
+          address: "上海市普陀区金沙江路 1518 弄",
+        },
+        {
+          date: "2016-05-06",
+          name: "王小虎",
+          address: "上海市普陀区金沙江路 1518 弄",
+        },
+        {
+          date: "2016-05-07",
+          name: "王小虎",
+          address: "上海市普陀区金沙江路 1518 弄",
+        },
+      ],
+      leftData: [],
+      dataL: [1, 3, 2],
+      dataR: [],
+      rightData: [],
+      multipleSelection: [],
+    };
+  },
+  methods: {
+    handelLeftCheck(e) {
+      console.log(e);
+    },
+    handelLeftCheck(direction) {},
+    //添加全部数据
+    handleAllData(direction) {
+      if (direction === "left") {
+        if (!this.dataL.length) return;
+        this.dataR = [...this.dataR, ...this.dataL];
+        this.dataL = [];
+        this.leftData = [];
+      } else {
+        if (!this.dataR.length) return;
+        this.dataL = [...this.dataL, ...this.dataR];
+        this.dataR = [];
+        this.rightData = [];
+      }
+    },
+    //添加部分或单个数据
+    handlePartData(direction) {
+      if (direction === "left") {
+        if (!this.dataL.length) return;
+        this.dataR = [...this.dataR, ...this.leftData];
+        this.dataL.forEach((k, d) => {
+          this.leftData.forEach((e) => {
+            if (e == k) {
+              this.dataL.splice(d, 1);
+              this.leftData = [];
+              return;
+            }
+          });
+        });
+      } else {
+        if (!this.dataL.length) return;
+        this.dataL = [...this.dataL, ...this.rightData];
+        this.dataR.forEach((k, d) => {
+          this.rightData.forEach((e) => {
+            if (e == k) {
+              this.dataR.splice(d, 1);
+              this.rightData = [];
+              return;
+            }
+          });
+        });
+      }
+    },
+    //删除全部数据
+    handleAllDelete(direction) {
+      if (direction === "left") {
+        if (!this.dataL.length) return;
+        this.dataL = [];
+        this.leftData = [];
+      } else {
+        if (!this.dataR.length) return;
+        this.dataR = [];
+        this.rightData = [];
+      }
+    },
+    //删除部分或单个数据
+    handlePartDelete(direction) {
+      if (direction === "left") {
+        this.dataL.forEach((k, d) => {
+          this.leftData.forEach((e) => {
+            if (e == k) {
+              this.dataL.splice(d, 1);
+              this.leftData = [];
+              return;
+            }
+          });
+        });
+      } else {
+        this.dataR.forEach((k, d) => {
+          this.rightData.forEach((e) => {
+            if (e == k) {
+              this.dataR.splice(d, 1);
+              this.rightData = [];
+              return;
+            }
+          });
+        });
+      }
+    },
+    // 判断能操作那边框
+    handleJudge(type) {
+      if (this.leftDisabled) {
+        // 左边框功能操作
+        this.hanleType(type, "left");
+      } else {
+        // 右边框功能操作
+        this.hanleType(type, "right");
+      }
+    },
+    // 获取事件类型
+    hanleType(type, direction) {
+      switch (type) {
+        case "AddAll":
+          this.handleAllData(direction);
+          break;
+        case "AddPart":
+          this.handlePartData(direction);
+          break;
+        case "DeleteAll":
+          this.handleAllDelete(direction);
+          break;
+        case "DeletePart":
+          this.handlePartDelete(direction);
+          break;
+      }
+    },
+  },
+  components:{
+    Pagination
+  }
+};
+</script>
+
+<style lang="scss" scoped>
+.btn {
+  margin: 20px 0;
+  text-align: center;
+}
+.query_btn {
+  margin-left: 0;
+}
+.mg{
+  margin: 20px;
+}
+.pdt {
+  margin: 20px 0;
+}
+.el-main {
+  overflow: hidden;
+}
+.middle {
+  height: 430px;
+  display: flex;
+  align-content: center;
+  justify-content: center;
+  align-items: center;
+}
+.title {
+  padding: 10px 0;
+  text-align: center;
+  border-left: 1px solid #ebeef5;
+  border-right: 1px solid #ebeef5;
+  border-top: 1px solid #ebeef5;
+}
+</style>

+ 303 - 0
src/views/sales_policy/components/Transfer.vue

@@ -0,0 +1,303 @@
+<template>
+  <div>
+    <slot name="header">
+      <el-row type="flex">
+        <el-col>
+          <el-select v-model="value" class="select_height" placeholder="请选择">
+            <el-option
+              v-for="item in options"
+              :key="item.value"
+              :label="item.label"
+              :value="item.value"
+            >
+            </el-option>
+          </el-select>
+        </el-col>
+        <el-col><el-button>确定</el-button></el-col>
+      </el-row>
+    </slot>
+    <div>
+      <el-row type="flex" align="moddle" class="transfer">
+        <el-col class="left_box" :span="9">
+          <h4 class="transfer_title">可选经销商</h4>
+          <el-checkbox-group
+            v-model="leftData"
+            class="left_box_flex"
+            @change="handelLeftCheck"
+          >
+            <el-checkbox
+              v-for="(item, index) in dataL"
+              :key="index"
+              :label="item"
+              :disabled="rightDisabled"
+            ></el-checkbox>
+          </el-checkbox-group>
+        </el-col>
+        <el-col class="middle_box" :span="6">
+          <el-row>
+            <el-col>
+              <el-button :disabled="isDisabled" @click="handleJudge('AddAll')"
+                >全部添加</el-button
+              ></el-col
+            >
+            <el-col>
+              <el-button :disabled="isDisabled" @click="handleJudge('AddPart')"
+                >增加</el-button
+              ></el-col
+            >
+            <el-col>
+              <el-button
+                :disabled="isDisabled"
+                @click="handleJudge('DeletePart')"
+                >删除</el-button
+              ></el-col
+            >
+            <el-col>
+              <el-button
+                :disabled="isDisabled"
+                @click="handleJudge('DeleteAll')"
+                >全部删除</el-button
+              ></el-col
+            >
+          </el-row>
+        </el-col>
+        <el-col class="right_box" :span="9">
+          <h4 class="transfer_title">已选经销商</h4>
+          <el-checkbox-group v-model="rightData" class="right_box_flex">
+            <el-checkbox
+              v-for="(item, index) in dataR"
+              :key="index"
+              :label="item"
+              :disabled="leftDisabled"
+            ></el-checkbox>
+          </el-checkbox-group>
+        </el-col>
+      </el-row>
+    </div>
+
+    <slot name="footer">
+      <el-row>
+        <el-button type="primary" size="default" @click="">保存</el-button>
+        <el-button type="primary" size="default" @click="">提交审核</el-button>
+        <el-button type="primary" size="default" @click="">重置</el-button>
+      </el-row>
+    </slot>
+  </div>
+</template>
+
+<script>
+export default {
+  data() {
+    return {
+      leftData: [],
+      dataL: [1, 3, 2],
+      dataR: [],
+      rightData: [],
+      options: [
+        {
+          value: "选项1",
+          label: "黄金糕",
+        },
+        {
+          value: "选项2",
+          label: "双皮奶",
+        },
+        {
+          value: "选项3",
+          label: "蚵仔煎",
+        },
+        {
+          value: "选项4",
+          label: "龙须面",
+        },
+        {
+          value: "选项5",
+          label: "北京烤鸭",
+        },
+      ],
+      value: "",
+    };
+  },
+  computed: {
+    /**
+     * @return(bool)  isDisabled
+     *  禁用功能按钮
+     */
+    isDisabled() {
+      return !(this.leftData.length || this.rightData.length);
+    },
+    /**
+     * @return(bool)  leftDisabled
+     *  禁用左边框选择
+     */
+    leftDisabled() {
+      return this.leftData.some((i) => i !== "");
+    },
+    /**
+     * @return(bool)  rightDisabled
+     *  禁用右边框选择
+     */
+    rightDisabled() {
+      return this.rightData.some((i) => i !== "");
+    },
+  },
+  methods: {
+    handelLeftCheck(direction) {},
+    //添加全部数据
+    handleAllData(direction) {
+      if (direction === "left") {
+        if (!this.dataL.length) return;
+        this.dataR = [...this.dataR, ...this.dataL];
+        this.dataL = [];
+        this.leftData = [];
+      } else {
+        if (!this.dataR.length) return;
+        this.dataL = [...this.dataL, ...this.dataR];
+        this.dataR = [];
+        this.rightData = [];
+      }
+    },
+    //添加部分或单个数据
+    handlePartData(direction) {
+      if (direction === "left") {
+        if (!this.dataL.length) return;
+        this.dataR = [...this.dataR, ...this.leftData];
+        this.dataL.forEach((k, d) => {
+          this.leftData.forEach((e) => {
+            if (e == k) {
+              this.dataL.splice(d, 1);
+              this.leftData = [];
+              return;
+            }
+          });
+        });
+      } else {
+        if (!this.dataL.length) return;
+        this.dataL = [...this.dataL, ...this.rightData];
+        this.dataR.forEach((k, d) => {
+          this.rightData.forEach((e) => {
+            if (e == k) {
+              this.dataR.splice(d, 1);
+              this.rightData = [];
+              return;
+            }
+          });
+        });
+      }
+    },
+    //删除全部数据
+    handleAllDelete(direction) {
+      if (direction === "left") {
+        if (!this.dataL.length) return;
+        this.dataL = [];
+        this.leftData = [];
+      } else {
+        if (!this.dataR.length) return;
+        this.dataR = [];
+        this.rightData = [];
+      }
+    },
+    //删除部分或单个数据
+    handlePartDelete(direction) {
+      if (direction === "left") {
+        this.dataL.forEach((k, d) => {
+          this.leftData.forEach((e) => {
+            if (e == k) {
+              this.dataL.splice(d, 1);
+              this.leftData = [];
+              return;
+            }
+          });
+        });
+      } else {
+        this.dataR.forEach((k, d) => {
+          this.rightData.forEach((e) => {
+            if (e == k) {
+              this.dataR.splice(d, 1);
+              this.rightData = [];
+              return;
+            }
+          });
+        });
+      }
+    },
+    // 判断能操作那边框
+    handleJudge(type) {
+      if (this.leftDisabled) {
+        // 左边框功能操作
+        this.hanleType(type, "left");
+      } else {
+        // 右边框功能操作
+        this.hanleType(type, "right");
+      }
+    },
+    // 获取事件类型
+    hanleType(type, direction) {
+      switch (type) {
+        case "AddAll":
+          this.handleAllData(direction);
+          break;
+        case "AddPart":
+          this.handlePartData(direction);
+          break;
+        case "DeleteAll":
+          this.handleAllDelete(direction);
+          break;
+        case "DeletePart":
+          this.handlePartDelete(direction);
+          break;
+      }
+    },
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+// 穿梭框
+.transfer {
+  margin: 20px 0;
+  &_title {
+    margin: 20px 20px 0 20px;
+  }
+  .left_box {
+    width: 430px;
+    height: 450px;
+    border: 1px solid #eee;
+    &_flex {
+      display: flex;
+      flex-direction: column;
+      margin: 20px;
+      .el-checkbox {
+        padding: 10px 0;
+      }
+    }
+  }
+  .right_box {
+    width: 430px;
+    height: 450px;
+    border: 1px solid #eee;
+    &_flex {
+      display: flex;
+      flex-direction: column;
+      margin: 20px;
+      .el-checkbox {
+        padding: 10px 0;
+      }
+    }
+  }
+}
+.middle_box {
+  text-align: center;
+  height: 430px;
+  display: flex;
+  align-content: center;
+  justify-content: center;
+  align-items: center;
+}
+.el-row .el-col {
+  margin: 20px 0;
+}
+.select_height {
+  width: 100%;
+}
+</style>

+ 150 - 0
src/views/sales_policy/marketing_list.vue

@@ -0,0 +1,150 @@
+<template>
+  <el-container v-if="isShow">
+    <el-header height="100%" class="mg">
+      <el-row>
+        <el-col :span="12">
+          <el-input
+            v-model="input"
+            placeholder="销售政策编号"
+            size="normal"
+            clearable
+            @change=""
+          ></el-input>
+        </el-col>
+
+      </el-row>
+      <el-row class="mg">
+        <el-button type="primary" size="default" @click="">查询</el-button>
+        <el-button type="primary" size="default" @click="">重置</el-button>
+        <el-button type="primary" size="default" @click="">新增</el-button>
+        <el-button type="primary" size="default" @click="">打印</el-button>
+
+      </el-row>
+    </el-header>
+    <el-main>
+    <el-table
+    ref="multipleTable"
+    :data="tableData"
+    border
+    tooltip-effect="dark"
+    style="width: 100%"
+    @selection-change="handleSelectionChange">
+    <el-table-column
+      type="selection"
+      align="center"
+      width="55">
+    </el-table-column>
+    <el-table-column
+      label="营销活动"
+      align="center"
+     >
+      <template slot-scope="scope">{{ scope.row.date }}</template>
+    </el-table-column>
+    <el-table-column
+      prop="name"
+      label="生效时间"
+      align="center"
+     >
+    </el-table-column>
+    <el-table-column
+      prop="address"
+      label="结束时间"
+      align="center"
+      show-overflow-tooltip>
+    </el-table-column>
+        <el-table-column
+      prop="name"
+      label="创建者"
+      align="center"
+     >
+    </el-table-column>
+        <el-table-column
+      prop="name"
+      label="创建时间"
+      align="center"
+     >
+    </el-table-column>
+        <el-table-column
+      prop="name"
+      label="更新者"
+      align="center"
+     >
+    </el-table-column>
+        <el-table-column
+      prop="name"
+      label="更新时间"
+      align="center"
+     >
+    </el-table-column>
+        <el-table-column
+      prop="name"
+      label="创建者"
+      align="center"
+     >
+    </el-table-column>
+  </el-table>
+    </el-main>
+    <Pagination />
+  </el-container>
+  <NewInfo v-else/>
+</template>
+
+<script>
+import Pagination from "./components/Pagination";
+import NewInfo from './components/NewInfo'
+export default {
+  data() {
+    return {
+      isShow:false,
+      input: "",
+      tableData: [
+        {
+          date: "2016-05-02",
+          name: "王小虎",
+          province: "上海",
+          city: "普陀区",
+          address: "上海市普陀区金沙江路 1518 弄",
+          zip: 200333,
+        },
+        {
+          date: "2016-05-04",
+          name: "王小虎",
+          province: "上海",
+          city: "普陀区",
+          address: "上海市普陀区金沙江路 1517 弄",
+          zip: 200333,
+        },
+        {
+          date: "2016-05-01",
+          name: "王小虎",
+          province: "上海",
+          city: "普陀区",
+          address: "上海市普陀区金沙江路 1519 弄",
+          zip: 200333,
+        },
+        {
+          date: "2016-05-03",
+          name: "王小虎",
+          province: "上海",
+          city: "普陀区",
+          address: "上海市普陀区金沙江路 1516 弄",
+          zip: 200333,
+        },
+      ],
+    };
+  },
+  components: {
+    Pagination,
+    NewInfo
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+.mg {
+  margin: 20px 0;
+}
+.btn {
+  text-align: right;
+}
+</style>

+ 216 - 0
src/views/sales_policy/policy_list.vue

@@ -0,0 +1,216 @@
+<template>
+  <el-container v-if="isShow == 1">
+    <el-header class="header_" height="100%">
+      <el-row type="flex" gutter="20" class="header_input">
+        <el-col :span="6"
+          ><el-input v-model="input" placeholder="销售政策编号"></el-input>
+        </el-col>
+        <el-col :span="6"
+          ><el-input v-model="input" placeholder="销售政策说明"></el-input>
+        </el-col>
+        <el-col :span="6"
+          ><el-input v-model="input" placeholder="表头备注"></el-input>
+        </el-col>
+        <el-col :span="6"
+          ><el-input v-model="input" placeholder="生效日期"></el-input>
+        </el-col>
+      </el-row>
+      <el-row type="flex" gutter="20" class="header_input">
+        <el-col :span="6"
+          ><el-input v-model="input" placeholder="结束日期"></el-input>
+        </el-col>
+        <el-col :span="6"
+          ><el-input v-model="input" placeholder="制表日期"></el-input>
+        </el-col>
+        <el-col :span="6"
+          ><el-input v-model="input" placeholder="制表人"></el-input>
+        </el-col>
+        <el-col :span="6"
+          ><el-input v-model="input" placeholder="审核人"></el-input>
+        </el-col>
+      </el-row>
+      <el-row type="flex" gutter="20">
+        <el-col :span="6"
+          ><el-input v-model="input" placeholder="关闭人"></el-input>
+        </el-col>
+        <el-col :span="6">
+          <el-select
+            v-model="value"
+            disabled
+            placeholder="状态"
+            class="select_height"
+          >
+            <el-option
+              v-for="item in options"
+              :key="item.value"
+              :label="item.label"
+              :value="item.value"
+            >
+            </el-option>
+          </el-select>
+        </el-col>
+        <el-col :span="6">
+          <el-select
+            v-model="value"
+            disabled
+            placeholder="销售政策类型"
+            class="select_height"
+          >
+            <el-option
+              v-for="item in options"
+              :key="item.value"
+              :label="item.label"
+              :value="item.value"
+            >
+            </el-option>
+          </el-select>
+        </el-col>
+        <!-- <el-col :span="6">
+          <el-row type="flex" gutter="20" justify="space-between">
+            <el-col>
+              <el-button type="primary" class="btn">查询</el-button>
+            </el-col>
+            <el-col>
+              <el-button type="primary" class="btn" icon=""
+                ><i class="el-icon-delete"></i> </el-button
+            ></el-col>
+          </el-row>
+        </el-col> -->
+      </el-row>
+      <el-row type="flex" class="mpd">
+        <el-button type="primary" class="btn">新增</el-button>
+        <el-button type="primary" class="btn">导出</el-button>
+        <el-button type="primary" class="btn">查询</el-button>
+        <el-button type="primary" class="btn" icon=""
+          ><i class="el-icon-delete"></i>
+        </el-button>
+      </el-row>
+    </el-header>
+    <el-main>
+      <el-table :data="tableData" border style="width: 100%" height="600">
+        <el-table-column fixed="left" label="操作" width="200" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small">申请</el-button>
+            <el-button type="text" size="small">编辑</el-button>
+            <el-button type="text" size="small">详情</el-button>
+            <el-button type="text" size="small">删除</el-button>
+          </template>
+        </el-table-column>
+        <el-table-column prop="name" label="状态" width="120" align="center">
+        </el-table-column>
+        <el-table-column
+          prop="province"
+          label="销售政策编号"
+          width="120"
+          align="center"
+        >
+        </el-table-column>
+        <el-table-column
+          prop="city"
+          label="销售政策说明"
+          width="120"
+          align="center"
+        >
+        </el-table-column>
+        <el-table-column prop="address" label="部门" width="300" align="center">
+        </el-table-column>
+        <el-table-column prop="zip" label="表头备注" width="120" align="center">
+        </el-table-column>
+        <el-table-column prop="zip" label="生效日期" width="120" align="center">
+        </el-table-column>
+        <el-table-column prop="zip" label="结束日期" width="120" align="center">
+        </el-table-column>
+        <el-table-column prop="zip" label="制表人" width="120" align="center">
+        </el-table-column>
+        <el-table-column prop="zip" label="制表日期" width="120" align="center">
+        </el-table-column>
+        <el-table-column prop="zip" label="审核人" width="120" align="center">
+        </el-table-column>
+        <el-table-column prop="zip" label="审核日期" width="120" align="center">
+        </el-table-column>
+        <el-table-column prop="zip" label="关闭人" width="120" align="center">
+        </el-table-column>
+        <el-table-column prop="zip" label="关闭日期" width="120" align="center">
+        </el-table-column>
+      </el-table>
+    </el-main>
+    <Pagination />
+  </el-container>
+  <AddPolicy v-else-if="isShow == 2" />
+  <AddCondition v-else-if="isShow == 3" />
+  <AddModel v-else />
+</template>
+
+<script>
+import AddPolicy from "./components/AddPolicy";
+import AddModel from "./components/AddModel";
+import Pagination from "./components/Pagination";
+import AddCondition from "./components/AddCondition";
+export default {
+  data() {
+    return {
+      input: "",
+      isShow: 3,
+      tableData: [
+        {
+          date: "2016-05-02",
+          name: "王小虎",
+          province: "上海",
+          city: "普陀区",
+          address: "上海市普陀区金沙江路 1518 弄",
+          zip: 200333,
+        },
+        {
+          date: "2016-05-04",
+          name: "王小虎",
+          province: "上海",
+          city: "普陀区",
+          address: "上海市普陀区金沙江路 1517 弄",
+          zip: 200333,
+        },
+        {
+          date: "2016-05-01",
+          name: "王小虎",
+          province: "上海",
+          city: "普陀区",
+          address: "上海市普陀区金沙江路 1519 弄",
+          zip: 200333,
+        },
+        {
+          date: "2016-05-03",
+          name: "王小虎",
+          province: "上海",
+          city: "普陀区",
+          address: "上海市普陀区金沙江路 1516 弄",
+          zip: 200333,
+        },
+      ],
+    };
+  },
+  components: {
+    AddModel,
+    AddPolicy,
+    Pagination,
+    AddCondition,
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+.btn {
+  width: 80px;
+}
+.mpd {
+  padding: 20px 0 0 0;
+}
+
+.header_ {
+  margin-top: 20px;
+  &input {
+    padding-bottom: 10px;
+  }
+}
+.select_height {
+  width: 100%;
+}
+</style>

+ 11 - 1
src/views/setting/role.vue

@@ -9,6 +9,7 @@
           <el-button size="small" type="primary" icon="el-icon-plus" @click="addOrEdit('add')" v-if="checkBtnRole('add')">新增角色</el-button>
         </div>
         <div class="fr">
+          <ImportButton :imUrl="'stock/importToll'" @importSuccess="getList" />
         </div>
       </div>
 
@@ -53,6 +54,9 @@
         <el-form-item label="角色名" prop="name">
           <el-input v-model="addForm.name" autocomplete="off" placeholder="请输入角色名"></el-input>
         </el-form-item>
+        <el-form-item label="上传文件" prop="fileUrl">
+          <fileUpload :fileList="fileList" />
+        </el-form-item>
       </el-form>
       <div slot="footer" class="dialog-footer">
         <el-button @click="cancelAddForm">取 消</el-button>
@@ -84,8 +88,12 @@
 <script>
 import { mapGetters } from 'vuex'
 import { getRoleList, addRole, editRole, getRoleDetail, deleteRole, getMenuList, getMenuRoleIds, setMenuRole } from '@/api/setting'
+import fileUpload from '@/components/Common/file-upload.vue'
 
 export default {
+  components: {
+    fileUpload
+  },
   data() {
     return {
       baseURL: process.env.VUE_APP_BASE_API,
@@ -113,7 +121,9 @@ export default {
       defaultProps: {
         children: 'children',
         label: 'moduleName'
-      }
+      },
+
+      fileList: [],
     }
   },
   computed: {

+ 5 - 0
src/views/supply/adjust.vue

@@ -0,0 +1,5 @@
+<template>
+  <div>
+    <router-view />
+  </div>
+</template>

+ 258 - 0
src/views/supply/adjust/adjust_list.vue

@@ -0,0 +1,258 @@
+<template>
+  <div class="app-container">
+    <div v-show="!isShowDetail">
+      <!-- 筛选条件 -->
+      <div class="screen-container">
+        <el-form ref="screenForm" :model="screenForm" label-width="100px" size="small" label-position="left">
+          <el-row :gutter="20">
+            <el-col :xs="24" :sm="12" :lg="6">
+              <el-form-item label="订单号" prop="orderNum">
+                <el-input v-model="screenForm.orderNum" placeholder="请输入订单号"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="12" :lg="6">
+              <el-form-item label="销售政策编号" prop="wlName">
+                <el-input v-model="screenForm.wlName" placeholder="请输入销售政策编号"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="12" :lg="6">
+              <el-form-item label="销售政策说明" prop="wlName">
+                <el-input v-model="screenForm.wlName" placeholder="请输入销售政策说明"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="12" :lg="6">
+              <el-form-item label="经销商" prop="wlName">
+                <el-input v-model="screenForm.wlName" placeholder="请输入经销商"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="12" :lg="6">
+              <el-form-item label="订单日期" prop="date">
+                <el-date-picker
+                  v-model="screenForm.date"
+                  type="datetimerange"
+                  range-separator="至"
+                  style="width: 100%;"
+                  value-format="yyyy-MM-dd HH:mm:ss"
+                  start-placeholder="开始日期"
+                  end-placeholder="结束日期">
+                </el-date-picker>
+              </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="12" :lg="6">
+              <el-form-item label="制表人" prop="wlName">
+                <el-input v-model="screenForm.wlName" placeholder="请输入制表人"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="12" :lg="6">
+              <el-form-item label="审核人" prop="wlName">
+                <el-input v-model="screenForm.wlName" placeholder="请输入审核人"></el-input>
+              </el-form-item>
+            </el-col>
+            
+            <el-col :xs="24" :sm="12" :lg="6" class="tr">
+              <el-form-item label="">
+                <el-button size="small" @click="resetScreenForm">清空</el-button>
+                <el-button size="small" type="primary" @click="submitScreenForm">搜索</el-button>
+              </el-form-item>
+            </el-col>
+          </el-row>
+        </el-form>
+      </div>
+
+      <div class="mymain-container">
+        <div class="btn-group clearfix">
+          <div class="fr">
+            <ExportButton :exUrl="'admin/user/mch/export'" :exParams="exParams" />
+          </div>
+        </div>
+        <div class="table">
+          <el-table v-loading="listLoading" :data="dataList" element-loading-text="Loading" border fit highlight-current-row stripe>
+            <el-table-column align="center" label="单据编号" prop="billNo" min-width="160" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="单据类型" prop="billType" min-width="160" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="调拨类型" prop="transferBizType" min-width="120" show-overflow-tooltip>
+              <template slot-scope="scope">
+                {{ scope.row.transferBizType | allotTypeFilter }}
+              </template>
+            </el-table-column>
+            <el-table-column align="center" label="申请日期" prop="fDate" min-width="160" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="单据状态" prop="documentStatus" min-width="100" show-overflow-tooltip>
+              <template slot-scope="scope">
+                {{ scope.row.documentStatus | orderStatusFilter }}
+              </template>
+            </el-table-column>
+            <el-table-column align="center" label="关闭状态" prop="cancelStatus" min-width="100" show-overflow-tooltip>
+              <template slot-scope="scope">
+                {{ scope.row.cancelStatus | closeStatusFilter }}
+              </template>
+            </el-table-column>
+            <el-table-column align="center" label="物料编码" prop="materialNumber" min-width="120" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="物料名称" prop="materialName" min-width="160" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="规格型号" prop="model" min-width="240" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="辅助属性" prop="auxPropId" min-width="100" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="单位" prop="baseUnitId" min-width="100" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="申请数量" prop="qty" min-width="100" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="调出仓库" prop="srcStockId" min-width="100" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="调入仓库" prop="destStockId" min-width="100" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="操作" width="100" fixed="right">
+              <template slot-scope="scope">
+                <el-button type="text" @click="toDetail(scope.row)">详情</el-button>
+              </template>
+            </el-table-column>
+          </el-table>
+        </div>
+      </div>
+      <div class="pagination clearfix">
+        <div class="fr">
+          <el-pagination
+            @size-change="handleSizeChange"
+            @current-change="handleCurrentChange"
+            :current-page="currentPage"
+            :page-sizes="[10, 20, 30, 50]"
+            :page-size="10"
+            layout="total, sizes, prev, pager, next, jumper"
+            :total="listTotal">
+          </el-pagination>
+        </div>
+      </div>
+    </div>
+    
+    <AdjustDetail :listItem="queryItem" v-if="isShowDetail" @backListFormDetail="backList" />
+
+  </div>
+</template>
+
+<script>
+import { getList } from "@/api/supply/adjust";
+import AdjustDetail from "@/views/supply/adjust/components/adjust_detail";
+
+export default {
+  components: {
+    AdjustDetail,
+  },
+  filters: {
+    allotTypeFilter(val) {
+      const MAP = {
+        InnerOrgTransfer: '组织内调拨',
+        OverOrgTransfer: '跨组织调拨',
+      }
+      return MAP[val];
+    },
+    closeStatusFilter(val) {
+      const MAP = {
+        A: '正常',
+        B: '作废',
+      }
+      return MAP[val];
+    },
+    orderStatusFilter(val) {
+      const MAP = {
+        C: '审核',
+      }
+      return MAP[val];
+    },
+  },
+  data() {
+    return {
+      currentPage: 1, // 当前页码
+      pageSize: 10, // 每页数量
+      listTotal: 0, // 列表总数
+      dataList: null, // 列表数据
+      listLoading: false, // 列表加载loading
+      screenForm: { // 筛选表单数据
+        orderNum: '',
+        wlName: '',
+        date: '',
+      },
+
+      queryItem: {},
+    }
+  },
+
+  computed: {
+    exParams() {
+      return {
+        billNo: this.screenForm.orderNum,
+        materialName: this.screenForm.wlName,
+        startTime: this.screenForm.date ? this.screenForm.date[0] : '',
+        endTime: this.screenForm.date ? this.screenForm.date[1] : '',
+      }
+    },
+    isShowDetail() {
+      return this.queryItem.hasOwnProperty('id');
+    },
+  },
+
+  created() {
+    this.getList();
+  },
+
+  methods: {
+    // 查询按钮权限
+    checkBtnRole(value) {
+      // let btnRole = this.$route.meta.roles;
+      // if(!btnRole) {return true}
+      // let index = btnRole.indexOf(value);
+      // return index >= 0;
+      return true
+    },
+
+    // 查询列表
+    getList() {
+      this.listLoading = true;
+
+      let params = {
+        pageNum: this.currentPage,
+        pageSize: this.pageSize,
+        billNo: this.screenForm.orderNum,
+        materialName: this.screenForm.wlName,
+        startTime: this.screenForm.date ? this.screenForm.date[0] : '',
+        endTime: this.screenForm.date ? this.screenForm.date[1] : '',
+      };
+      getList(params).then((res) => {
+        this.dataList = res.data.records;
+        this.listTotal = res.data.total;
+        this.listLoading = false;
+      })
+    },
+
+    // 提交筛选表单
+    submitScreenForm() {
+      this.currentPage = 1;
+      this.getList();
+    },
+
+    // 重置筛选表单
+    resetScreenForm() {
+      this.$refs.screenForm.resetFields();
+      this.currentPage = 1;
+      this.getList();
+    },
+
+    // 更改每页数量
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = 1;
+      this.getList();
+    },
+
+    // 更改当前页
+    handleCurrentChange(val) {
+      this.currentPage = val;
+      this.getList();
+    },
+
+    // 进入详情
+    toDetail(item) {
+      this.queryItem = item;
+    },
+
+    backList() {
+      this.queryItem = {};
+    },
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+
+</style>

+ 141 - 0
src/views/supply/adjust/components/adjust_detail.vue

@@ -0,0 +1,141 @@
+<template>
+  <div class="detail-container">
+    <el-page-header @back="goBack" content="详情"></el-page-header>
+
+    <div id="printData">
+      <div class="main-title">
+        <div class="title">调拨单</div>
+      </div>
+
+      <div class="diy-table-1">
+        <el-row>
+          <el-col :span="8" class="item">
+            <div class="label">单据编号:</div>
+            <div class="value">{{detailData.billNo}}</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">日期:</div>
+            <div class="value">{{detailData.fdate}}</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">转出仓库:</div>
+            <div class="value">{{detailData.srcStockId}}</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">转入仓库:</div>
+            <div class="value">{{detailData.destStockId}}</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">审核日期:</div>
+            <div class="value">{{detailData.approveDate}}</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">审核人:</div>
+            <div class="value">{{detailData.approverId}}</div>
+          </el-col>
+          <el-col :span="24" class="item">
+            <div class="label">备注:</div>
+            <div class="value">{{detailData.note}}</div>
+          </el-col>
+        </el-row>
+      </div>
+
+      <div class="table" style="margin-top: 20px">
+        <el-table :data="detailData.kingDeeTransferItems" element-loading-text="Loading" border fit highlight-current-row stripe max-height="400">
+          <el-table-column align="center" label="序号" type="index" width="50"></el-table-column>
+          <el-table-column align="center" label="物料编号" prop="materialNumber" min-width="160" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="物料名称" prop="materialName" min-width="160" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="规格型号" prop="model" min-width="160" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="主计量单位" prop="baseUnitId" min-width="160" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="数量" prop="qty" min-width="160" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="单价" prop="consignPrice" min-width="160" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="金额" prop="consignAmount" min-width="100" show-overflow-tooltip></el-table-column>
+        </el-table>
+      </div>
+      
+    </div>
+    
+    <div class="page-footer">
+      <div class="footer" :class="classObj">
+        <el-button  type="primary" icon="el-icon-printer" v-print="printObj">打 印</el-button>
+        <el-popconfirm title="确定关闭吗?" @onConfirm="goBack" style="margin-left: 10px;">
+          <el-button slot="reference">关 闭</el-button>
+        </el-popconfirm>
+      </div>
+    </div>
+
+  </div>
+</template>
+
+<script>
+import print from 'vue-print-nb'
+import { getDetail } from "@/api/supply/adjust";
+
+export default {
+  name: 'AdjustDetail',
+  componentName: 'AdjustDetail',
+  props: ['listItem'],
+  directives: {
+    print
+  },
+  data() {
+    return {
+      printObj: {
+        id: 'printData'
+      },
+      detailData: {},
+    }
+  },
+
+  computed: {
+    sidebar() {
+      return this.$store.state.app.sidebar
+    },
+    classObj() {
+      return {
+        hideSidebar: !this.sidebar.opened,
+        openSidebar: this.sidebar.opened
+      }
+    },
+  },
+
+  created() {
+    this.getDetail();
+  },
+
+  methods: {
+    // 返回列表
+    goBack() {
+      this.$emit('backListFormDetail');
+    },
+
+    // 获取详情
+    getDetail() {
+      getDetail({id: this.listItem.id}).then(res => {
+        this.detailData = res.data;
+      })
+    },
+  }
+}
+</script>
+
+<style scoped lang="scss">
+  .detail-container {
+    width: 100%;
+    height: 100%;
+  }
+  .main-title {
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    margin-top: 30px;
+    height: 60px;
+    border-bottom: 1px solid #DCDFE6;
+    margin-bottom: 20px;
+    .title {
+      font-size: 16px;
+      font-weight: 600;
+      padding-left: 10px;
+    }
+  }
+</style>

+ 5 - 0
src/views/supply/allot.vue

@@ -0,0 +1,5 @@
+<template>
+  <div>
+    <router-view />
+  </div>
+</template>

+ 238 - 0
src/views/supply/allot/allot_list.vue

@@ -0,0 +1,238 @@
+<template>
+  <div class="app-container">
+    <div v-show="!isShowDetail">
+      <!-- 筛选条件 -->
+      <div class="screen-container">
+        <el-form ref="screenForm" :model="screenForm" label-width="90px" size="small" label-position="left">
+          <el-row :gutter="20">
+            <el-col :xs="24" :sm="12" :lg="6">
+              <el-form-item label="单据编号" prop="orderNum">
+                <el-input v-model="screenForm.orderNum" placeholder="请输入单据编号"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="12" :lg="6">
+              <el-form-item label="物料名称" prop="wlName">
+                <el-input v-model="screenForm.wlName" placeholder="请输入物料名称"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="12" :lg="6">
+              <el-form-item label="提货日期" prop="date">
+                <el-date-picker
+                  v-model="screenForm.date"
+                  type="datetimerange"
+                  range-separator="至"
+                  style="width: 100%;"
+                  value-format="yyyy-MM-dd HH:mm:ss"
+                  start-placeholder="开始日期"
+                  end-placeholder="结束日期">
+                </el-date-picker>
+              </el-form-item>
+            </el-col>
+            
+            <el-col :xs="24" :sm="12" :lg="6" class="tr">
+              <el-form-item label="">
+                <el-button size="small" @click="resetScreenForm">清空</el-button>
+                <el-button size="small" type="primary" @click="submitScreenForm">搜索</el-button>
+              </el-form-item>
+            </el-col>
+          </el-row>
+        </el-form>
+      </div>
+
+      <div class="mymain-container">
+        <div class="btn-group clearfix">
+          <div class="fr">
+            <ExportButton :exUrl="'admin/user/mch/export'" :exParams="exParams" />
+          </div>
+        </div>
+        <div class="table">
+          <el-table v-loading="listLoading" :data="dataList" element-loading-text="Loading" border fit highlight-current-row stripe>
+            <el-table-column align="center" label="单据编号" prop="billNo" min-width="160" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="单据类型" prop="billType" min-width="160" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="调拨类型" prop="transferBizType" min-width="120" show-overflow-tooltip>
+              <template slot-scope="scope">
+                {{ scope.row.transferBizType | allotTypeFilter }}
+              </template>
+            </el-table-column>
+            <el-table-column align="center" label="申请日期" prop="fDate" min-width="160" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="单据状态" prop="documentStatus" min-width="100" show-overflow-tooltip>
+              <template slot-scope="scope">
+                {{ scope.row.documentStatus | orderStatusFilter }}
+              </template>
+            </el-table-column>
+            <el-table-column align="center" label="关闭状态" prop="cancelStatus" min-width="100" show-overflow-tooltip>
+              <template slot-scope="scope">
+                {{ scope.row.cancelStatus | closeStatusFilter }}
+              </template>
+            </el-table-column>
+            <el-table-column align="center" label="物料编码" prop="materialNumber" min-width="120" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="物料名称" prop="materialName" min-width="160" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="规格型号" prop="model" min-width="240" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="辅助属性" prop="auxPropId" min-width="100" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="单位" prop="baseUnitId" min-width="100" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="申请数量" prop="qty" min-width="100" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="调出仓库" prop="srcStockId" min-width="100" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="调入仓库" prop="destStockId" min-width="100" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="操作" width="100" fixed="right">
+              <template slot-scope="scope">
+                <el-button type="text" @click="toDetail(scope.row)">详情</el-button>
+              </template>
+            </el-table-column>
+          </el-table>
+        </div>
+      </div>
+      <div class="pagination clearfix">
+        <div class="fr">
+          <el-pagination
+            @size-change="handleSizeChange"
+            @current-change="handleCurrentChange"
+            :current-page="currentPage"
+            :page-sizes="[10, 20, 30, 50]"
+            :page-size="10"
+            layout="total, sizes, prev, pager, next, jumper"
+            :total="listTotal">
+          </el-pagination>
+        </div>
+      </div>
+    </div>
+    
+    <AllotDetail :listItem="queryItem" v-if="isShowDetail" @backListFormDetail="backList" />
+
+  </div>
+</template>
+
+<script>
+import { getList } from "@/api/supply/allot";
+import AllotDetail from "@/views/supply/allot/components/allot_detail";
+
+export default {
+  components: {
+    AllotDetail,
+  },
+  filters: {
+    allotTypeFilter(val) {
+      const MAP = {
+        InnerOrgTransfer: '组织内调拨',
+        OverOrgTransfer: '跨组织调拨',
+      }
+      return MAP[val];
+    },
+    closeStatusFilter(val) {
+      const MAP = {
+        A: '正常',
+        B: '作废',
+      }
+      return MAP[val];
+    },
+    orderStatusFilter(val) {
+      const MAP = {
+        C: '审核',
+      }
+      return MAP[val];
+    },
+  },
+  data() {
+    return {
+      currentPage: 1, // 当前页码
+      pageSize: 10, // 每页数量
+      listTotal: 0, // 列表总数
+      dataList: null, // 列表数据
+      listLoading: false, // 列表加载loading
+      screenForm: { // 筛选表单数据
+        orderNum: '',
+        wlName: '',
+        date: '',
+      },
+
+      queryItem: {},
+    }
+  },
+
+  computed: {
+    exParams() {
+      return {
+        billNo: this.screenForm.orderNum,
+        materialName: this.screenForm.wlName,
+        startTime: this.screenForm.date ? this.screenForm.date[0] : '',
+        endTime: this.screenForm.date ? this.screenForm.date[1] : '',
+      }
+    },
+    isShowDetail() {
+      return this.queryItem.hasOwnProperty('id');
+    },
+  },
+
+  created() {
+    this.getList();
+  },
+
+  methods: {
+    // 查询按钮权限
+    checkBtnRole(value) {
+      // let btnRole = this.$route.meta.roles;
+      // if(!btnRole) {return true}
+      // let index = btnRole.indexOf(value);
+      // return index >= 0;
+      return true
+    },
+
+    // 查询列表
+    getList() {
+      this.listLoading = true;
+
+      let params = {
+        pageNum: this.currentPage,
+        pageSize: this.pageSize,
+        billNo: this.screenForm.orderNum,
+        materialName: this.screenForm.wlName,
+        startTime: this.screenForm.date ? this.screenForm.date[0] : '',
+        endTime: this.screenForm.date ? this.screenForm.date[1] : '',
+      };
+      getList(params).then((res) => {
+        this.dataList = res.data.records;
+        this.listTotal = res.data.total;
+        this.listLoading = false;
+      })
+    },
+
+    // 提交筛选表单
+    submitScreenForm() {
+      this.currentPage = 1;
+      this.getList();
+    },
+
+    // 重置筛选表单
+    resetScreenForm() {
+      this.$refs.screenForm.resetFields();
+      this.currentPage = 1;
+      this.getList();
+    },
+
+    // 更改每页数量
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = 1;
+      this.getList();
+    },
+
+    // 更改当前页
+    handleCurrentChange(val) {
+      this.currentPage = val;
+      this.getList();
+    },
+
+    // 进入详情
+    toDetail(item) {
+      this.queryItem = item;
+    },
+
+    backList() {
+      this.queryItem = {};
+    },
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+
+</style>

+ 141 - 0
src/views/supply/allot/components/allot_detail.vue

@@ -0,0 +1,141 @@
+<template>
+  <div class="detail-container">
+    <el-page-header @back="goBack" content="详情"></el-page-header>
+
+    <div id="printData">
+      <div class="main-title">
+        <div class="title">调拨单</div>
+      </div>
+
+      <div class="diy-table-1">
+        <el-row>
+          <el-col :span="8" class="item">
+            <div class="label">单据编号:</div>
+            <div class="value">{{detailData.billNo}}</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">日期:</div>
+            <div class="value">{{detailData.fdate}}</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">转出仓库:</div>
+            <div class="value">{{detailData.srcStockId}}</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">转入仓库:</div>
+            <div class="value">{{detailData.destStockId}}</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">审核日期:</div>
+            <div class="value">{{detailData.approveDate}}</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">审核人:</div>
+            <div class="value">{{detailData.approverId}}</div>
+          </el-col>
+          <el-col :span="24" class="item">
+            <div class="label">备注:</div>
+            <div class="value">{{detailData.note}}</div>
+          </el-col>
+        </el-row>
+      </div>
+
+      <div class="table" style="margin-top: 20px">
+        <el-table :data="detailData.kingDeeTransferItems" element-loading-text="Loading" border fit highlight-current-row stripe max-height="400">
+          <el-table-column align="center" label="序号" type="index" width="50"></el-table-column>
+          <el-table-column align="center" label="物料编号" prop="materialNumber" min-width="120" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="物料名称" prop="materialName" min-width="160" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="规格型号" prop="model" min-width="160" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="主计量单位" prop="baseUnitId" min-width="100" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="数量" prop="qty" min-width="100" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="单价" prop="consignPrice" min-width="100" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="金额" prop="consignAmount" min-width="100" show-overflow-tooltip></el-table-column>
+        </el-table>
+      </div>
+      
+    </div>
+    
+    <div class="page-footer">
+      <div class="footer" :class="classObj">
+        <el-button  type="primary" icon="el-icon-printer" v-print="printObj">打 印</el-button>
+        <el-popconfirm title="确定关闭吗?" @onConfirm="goBack" style="margin-left: 10px;">
+          <el-button slot="reference">关 闭</el-button>
+        </el-popconfirm>
+      </div>
+    </div>
+
+  </div>
+</template>
+
+<script>
+import print from 'vue-print-nb'
+import { getDetail } from "@/api/supply/allot";
+
+export default {
+  name: 'AllotDetail',
+  componentName: 'AllotDetail',
+  props: ['listItem'],
+  directives: {
+    print
+  },
+  data() {
+    return {
+      printObj: {
+        id: 'printData'
+      },
+      detailData: {},
+    }
+  },
+
+  computed: {
+    sidebar() {
+      return this.$store.state.app.sidebar
+    },
+    classObj() {
+      return {
+        hideSidebar: !this.sidebar.opened,
+        openSidebar: this.sidebar.opened
+      }
+    },
+  },
+
+  created() {
+    this.getDetail();
+  },
+
+  methods: {
+    // 返回列表
+    goBack() {
+      this.$emit('backListFormDetail');
+    },
+
+    // 获取详情
+    getDetail() {
+      getDetail({id: this.listItem.id}).then(res => {
+        this.detailData = res.data;
+      })
+    },
+  }
+}
+</script>
+
+<style scoped lang="scss">
+  .detail-container {
+    width: 100%;
+    height: 100%;
+  }
+  .main-title {
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    margin-top: 30px;
+    height: 60px;
+    border-bottom: 1px solid #DCDFE6;
+    margin-bottom: 20px;
+    .title {
+      font-size: 16px;
+      font-weight: 600;
+      padding-left: 10px;
+    }
+  }
+</style>

+ 5 - 0
src/views/supply/deliver.vue

@@ -0,0 +1,5 @@
+<template>
+  <div>
+    <router-view />
+  </div>
+</template>

+ 232 - 0
src/views/supply/deliver/components/deliver_detail.vue

@@ -0,0 +1,232 @@
+<template>
+  <div class="detail-container">
+    <el-page-header @back="goBack" content="详情"></el-page-header>
+
+    <div id="printMe">
+      <div class="main-title">
+        <div class="title">发货单信息</div>
+      </div>
+      <div class="diy-table-1">
+        <el-row :gutter="0">
+          <el-col :span="8" class="item">
+            <div class="label">发货单号</div>
+            <div class="value">{{detailData.retreatOrderNo}}</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">发货日期</div>
+            <div class="value">{{detailData.shipTime}}</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">业务类型</div>
+            <div class="value">{{detailData.type}}</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">销售类型</div>
+            <div class="value">{{detailData.salesType}}</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">订单号</div>
+            <div class="value">{{detailData.orderNo}}</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">发票号</div>
+            <div class="value">{{detailData.billNumber}}</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">客户名称</div>
+            <div class="value">{{detailData.clientName}}</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">销售部门</div>
+            <div class="value">{{detailData.salesDep}}</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">业务员</div>
+            <div class="value">{{detailData.salesman}}</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">工程编号</div>
+            <div class="value">{{detailData.projectNumber}}</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">币种</div>
+            <div class="value">{{detailData.currency}}</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">订单类型</div>
+            <div class="value">{{detailData.orderType}}</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">仓库</div>
+            <div class="value">{{detailData.stockName}}</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">发货申请单号</div>
+            <div class="value">{{detailData.invoiceOrderNo}}</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">台账备注</div>
+            <div class="value">{{detailData.iedgerRemark}}</div>
+          </el-col>
+          <el-col :span="16" class="item">
+            <div class="label">备注</div>
+            <div class="value">{{detailData.remark}}</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">项目名称</div>
+            <div class="value">{{detailData.projectName}}</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">外仓印刷单号</div>
+            <div class="value">{{detailData.printingSheet}}</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">厂工程编码</div>
+            <div class="value">{{detailData.factoryNumber}}</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">开票日期</div>
+            <div class="value">{{detailData.billingTime}}</div>
+          </el-col>
+          <el-col :span="16" class="item">
+            <div class="label">文件编号</div>
+            <div class="value">{{detailData.fileNumber}}</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">税率</div>
+            <div class="value">{{detailData.taxRate}}</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">订单日期</div>
+            <div class="value">{{detailData.createTime}}</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">制单人</div>
+            <div class="value">{{detailData.createBy}}</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">制单时间</div>
+            <div class="value">{{detailData.createTime}}</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">审核人</div>
+            <div class="value">{{detailData.retreatOrderNo}}</div>
+          </el-col>
+          <el-col :span="16" class="item">
+            <div class="label">审核时间</div>
+            <div class="value">{{detailData.retreatOrderNo}}</div>
+          </el-col>
+        </el-row>
+      </div>
+
+      <div class="main-title">
+        <div class="title">货品信息</div>
+      </div>
+      <div class="table">
+        <el-table :data="detailData.retreatDocumentOrder" element-loading-text="Loading" border fit highlight-current-row stripe>
+          <el-table-column align="center" label="序号" type="index" width="50"></el-table-column>
+          <el-table-column align="center" label="订单号" prop="orderNumber" min-width="160" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="仓库名称" prop="stockName" min-width="160" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="产品编号" prop="productNumber" min-width="160" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="产品名称" prop="productName" min-width="160" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="规格型号" prop="specification" min-width="160" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="主计量" prop="unit" min-width="160" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="数量" prop="number" min-width="160" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="含税单价" prop="includedPrice" min-width="160" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="无税单价" prop="price" min-width="100" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="价税合计" prop="totalPrice" min-width="100" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="税率(%)" prop="rate" min-width="100" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="折扣额" prop="discountPrice" min-width="100" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="折扣后单价" prop="discountPrice" min-width="100" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="退补标记" prop="refund" min-width="100" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="厂产品代码" prop="factoryNumber" min-width="100" show-overflow-tooltip></el-table-column>
+        </el-table>
+      </div>
+
+    </div>
+    
+    <div class="page-footer">
+      <div class="footer" :class="classObj">
+        <el-button  type="primary" icon="el-icon-printer" v-print="printObj">打 印</el-button>
+        <el-popconfirm title="确定关闭吗?" @onConfirm="goBack" style="margin-left: 10px;">
+          <el-button slot="reference">关 闭</el-button>
+        </el-popconfirm>
+      </div>
+    </div>
+
+  </div>
+</template>
+
+<script>
+import print from 'vue-print-nb'
+import { getDetail } from "@/api/supply/return";
+
+export default {
+  name: 'DeliverDetail',
+  componentName: 'DeliverDetail',
+  props: ['listItem'],
+  directives: {
+    print
+  },
+  data() {
+    return {
+      printObj: {
+        id: 'printMe'
+      },
+      detailData: {},
+    }
+  },
+
+  computed: {
+    sidebar() {
+      return this.$store.state.app.sidebar
+    },
+    classObj() {
+      return {
+        hideSidebar: !this.sidebar.opened,
+        openSidebar: this.sidebar.opened
+      }
+    },
+  },
+
+  created() {
+    this.getDetail();
+  },
+
+  methods: {
+    // 返回列表
+    goBack() {
+      this.$emit('backListFormDetail');
+    },
+
+    // 获取详情
+    getDetail() {
+      getDetail({id: this.listItem.id}).then(res => {
+        this.detailData = res.data;
+      })
+    },
+
+  }
+}
+</script>
+
+<style scoped lang="scss">
+  .detail-container {
+    width: 100%;
+    height: 100%;
+  }
+  .main-title {
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    margin-top: 30px;
+    height: 60px;
+    border-bottom: 1px solid #DCDFE6;
+    margin-bottom: 20px;
+    .title {
+      font-size: 16px;
+      font-weight: 600;
+      padding-left: 10px;
+    }
+  }
+</style>

+ 232 - 0
src/views/supply/deliver/components/engin_detail.vue

@@ -0,0 +1,232 @@
+<template>
+  <div class="detail-container">
+    <el-page-header @back="goBack" content="详情"></el-page-header>
+
+    <div id="printMe">
+      <div class="main-title">
+        <div class="title">发货单信息</div>
+      </div>
+      <div class="diy-table-1">
+        <el-row :gutter="0">
+          <el-col :span="8" class="item">
+            <div class="label">发货单号</div>
+            <div class="value">{{detailData.retreatOrderNo}}</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">发货日期</div>
+            <div class="value">{{detailData.shipTime}}</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">业务类型</div>
+            <div class="value">{{detailData.type}}</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">销售类型</div>
+            <div class="value">{{detailData.salesType}}</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">订单号</div>
+            <div class="value">{{detailData.orderNo}}</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">发票号</div>
+            <div class="value">{{detailData.billNumber}}</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">客户名称</div>
+            <div class="value">{{detailData.clientName}}</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">销售部门</div>
+            <div class="value">{{detailData.salesDep}}</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">业务员</div>
+            <div class="value">{{detailData.salesman}}</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">工程编号</div>
+            <div class="value">{{detailData.projectNumber}}</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">币种</div>
+            <div class="value">{{detailData.currency}}</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">订单类型</div>
+            <div class="value">{{detailData.orderType}}</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">仓库</div>
+            <div class="value">{{detailData.stockName}}</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">发货申请单号</div>
+            <div class="value">{{detailData.invoiceOrderNo}}</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">台账备注</div>
+            <div class="value">{{detailData.iedgerRemark}}</div>
+          </el-col>
+          <el-col :span="16" class="item">
+            <div class="label">备注</div>
+            <div class="value">{{detailData.remark}}</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">项目名称</div>
+            <div class="value">{{detailData.projectName}}</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">外仓印刷单号</div>
+            <div class="value">{{detailData.printingSheet}}</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">厂工程编码</div>
+            <div class="value">{{detailData.factoryNumber}}</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">开票日期</div>
+            <div class="value">{{detailData.billingTime}}</div>
+          </el-col>
+          <el-col :span="16" class="item">
+            <div class="label">文件编号</div>
+            <div class="value">{{detailData.fileNumber}}</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">税率</div>
+            <div class="value">{{detailData.taxRate}}</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">订单日期</div>
+            <div class="value">{{detailData.createTime}}</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">制单人</div>
+            <div class="value">{{detailData.createBy}}</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">制单时间</div>
+            <div class="value">{{detailData.createTime}}</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">审核人</div>
+            <div class="value">{{detailData.retreatOrderNo}}</div>
+          </el-col>
+          <el-col :span="16" class="item">
+            <div class="label">审核时间</div>
+            <div class="value">{{detailData.retreatOrderNo}}</div>
+          </el-col>
+        </el-row>
+      </div>
+
+      <div class="main-title">
+        <div class="title">货品信息</div>
+      </div>
+      <div class="table">
+        <el-table :data="detailData.retreatDocumentOrder" element-loading-text="Loading" border fit highlight-current-row stripe>
+          <el-table-column align="center" label="序号" type="index" width="50"></el-table-column>
+          <el-table-column align="center" label="订单号" prop="orderNumber" min-width="160" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="仓库名称" prop="stockName" min-width="160" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="产品编号" prop="productNumber" min-width="160" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="产品名称" prop="productName" min-width="160" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="规格型号" prop="specification" min-width="160" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="主计量" prop="unit" min-width="160" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="数量" prop="number" min-width="160" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="含税单价" prop="includedPrice" min-width="160" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="无税单价" prop="price" min-width="100" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="价税合计" prop="totalPrice" min-width="100" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="税率(%)" prop="rate" min-width="100" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="折扣额" prop="discountPrice" min-width="100" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="折扣后单价" prop="discountPrice" min-width="100" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="退补标记" prop="refund" min-width="100" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="厂产品代码" prop="factoryNumber" min-width="100" show-overflow-tooltip></el-table-column>
+        </el-table>
+      </div>
+
+    </div>
+    
+    <div class="page-footer">
+      <div class="footer" :class="classObj">
+        <el-button  type="primary" icon="el-icon-printer" v-print="printObj">打 印</el-button>
+        <el-popconfirm title="确定关闭吗?" @onConfirm="goBack" style="margin-left: 10px;">
+          <el-button slot="reference">关 闭</el-button>
+        </el-popconfirm>
+      </div>
+    </div>
+
+  </div>
+</template>
+
+<script>
+import print from 'vue-print-nb'
+import { getDetail } from "@/api/supply/return";
+
+export default {
+  name: 'EnginDetail',
+  componentName: 'EnginDetail',
+  props: ['listItem'],
+  directives: {
+    print
+  },
+  data() {
+    return {
+      printObj: {
+        id: 'printMe'
+      },
+      detailData: {},
+    }
+  },
+
+  computed: {
+    sidebar() {
+      return this.$store.state.app.sidebar
+    },
+    classObj() {
+      return {
+        hideSidebar: !this.sidebar.opened,
+        openSidebar: this.sidebar.opened
+      }
+    },
+  },
+
+  created() {
+    this.getDetail();
+  },
+
+  methods: {
+    // 返回列表
+    goBack() {
+      this.$emit('backListFormDetail');
+    },
+
+    // 获取详情
+    getDetail() {
+      getDetail({id: this.listItem.id}).then(res => {
+        this.detailData = res.data;
+      })
+    },
+
+  }
+}
+</script>
+
+<style scoped lang="scss">
+  .detail-container {
+    width: 100%;
+    height: 100%;
+  }
+  .main-title {
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    margin-top: 30px;
+    height: 60px;
+    border-bottom: 1px solid #DCDFE6;
+    margin-bottom: 20px;
+    .title {
+      font-size: 16px;
+      font-weight: 600;
+      padding-left: 10px;
+    }
+  }
+</style>

+ 232 - 0
src/views/supply/deliver/deliver_list.vue

@@ -0,0 +1,232 @@
+<template>
+  <div class="app-container">
+    <div v-show="!isShowDetail">
+      <!-- 筛选条件 -->
+      <div class="screen-container">
+        <el-form ref="screenForm" :model="screenForm" label-width="90px" size="small" label-position="left">
+          <el-row :gutter="20">
+            <el-col :xs="24" :sm="12" :lg="6">
+              <el-form-item label="发货单号" prop="orderNum">
+                <el-input v-model="screenForm.orderNum" placeholder="请输入发货单号"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="12" :lg="6">
+              <el-form-item label="经销商编号" prop="jxsNum">
+                <el-input v-model="screenForm.jxsNum" placeholder="请输入经销商编号"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="12" :lg="6">
+              <el-form-item label="经销商名称" prop="jxsName">
+                <el-input v-model="screenForm.jxsName" placeholder="请输入经销商名称"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="12" :lg="6">
+              <el-form-item label="存货名称" prop="chName">
+                <el-input v-model="screenForm.chName" placeholder="请输入存货名称"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="12" :lg="6">
+              <el-form-item label="规格型号" prop="model">
+                <el-input v-model="screenForm.model" placeholder="请输入规格型号"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="12" :lg="6">
+              <el-form-item label="发货日期" prop="date">
+                <el-date-picker
+                  v-model="screenForm.date"
+                  type="datetimerange"
+                  range-separator="至"
+                  style="width: 100%;"
+                  value-format="yyyy-MM-dd HH:mm:ss"
+                  start-placeholder="开始日期"
+                  end-placeholder="结束日期">
+                </el-date-picker>
+              </el-form-item>
+            </el-col>
+            
+            <el-col :xs="24" :sm="24" :lg="12" class="tr">
+              <el-form-item label="">
+                <el-button size="small" @click="resetScreenForm">清空</el-button>
+                <el-button size="small" type="primary" @click="submitScreenForm">搜索</el-button>
+              </el-form-item>
+            </el-col>
+          </el-row>
+        </el-form>
+      </div>
+
+      <div class="mymain-container">
+        <div class="btn-group clearfix">
+          <div class="fr">
+            <ExportButton :exUrl="'admin/user/mch/export'" :exParams="exParams" />
+          </div>
+        </div>
+        <div class="table">
+          <el-table v-loading="listLoading" :data="dataList" element-loading-text="Loading" border fit highlight-current-row stripe>
+            <el-table-column align="center" label="发货单号" prop="shipOrderNo" min-width="160" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="发货日期" prop="shipTime" min-width="160" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="仓库" prop="stockName" min-width="160" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="经销商" prop="customerName" min-width="160" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="产品名称" prop="productName" min-width="160" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="规格型号" prop="specification" min-width="160" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="价税合计" prop="totalPrice" min-width="100" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="无税金额" prop="price" min-width="100" show-overflow-tooltip>
+              <template slot-scope="scope">
+                {{ scope.row.number * scope.row.price }}
+              </template>
+            </el-table-column>
+            <el-table-column align="center" label="无税单价" prop="price" min-width="100" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="数量" prop="number" min-width="100" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="备注" prop="remark" min-width="200" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="操作" width="120" fixed="right">
+              <template slot-scope="scope">
+                <el-button type="text" @click="toDetail(scope.row)">详情</el-button>
+              </template>
+            </el-table-column>
+          </el-table>
+        </div>
+      </div>
+      <div class="pagination clearfix">
+        <div class="fr">
+          <el-pagination
+            @size-change="handleSizeChange"
+            @current-change="handleCurrentChange"
+            :current-page="currentPage"
+            :page-sizes="[10, 20, 30, 50]"
+            :page-size="10"
+            layout="total, sizes, prev, pager, next, jumper"
+            :total="listTotal">
+          </el-pagination>
+        </div>
+      </div>
+    </div>
+    
+    <DeliverDetail :listItem="queryItem" v-if="isShowDetail" @backListFormDetail="backList" />
+
+  </div>
+</template>
+
+<script>
+import { COMMON_SELECT } from '@/utils/select_data'
+import { getList } from "@/api/supply/deliver";
+import DeliverDetail from "@/views/supply/deliver/components/deliver_detail";
+
+export default {
+  components: {
+    DeliverDetail,
+  },
+  data() {
+    return {
+      currentPage: 1, // 当前页码
+      pageSize: 10, // 每页数量
+      listTotal: 0, // 列表总数
+      dataList: null, // 列表数据
+      listLoading: false, // 列表加载loading
+      screenForm: { // 筛选表单数据
+        orderNum: '',
+        jxsNum: '',
+        jxsName: '',
+        chName: '',
+        model: '',
+        date: '',
+      },
+
+      queryItem: {},
+    }
+  },
+
+  computed: {
+    exParams() {
+      return {
+        retreatOrderNo: this.screenForm.orderNum,
+        customerNumber: this.screenForm.jxsNum,
+        customerName: this.screenForm.jxsName,
+        productName: this.screenForm.chName,
+        specification: this.screenForm.model,
+        startTime: this.screenForm.date ? this.screenForm.date[0] : '',
+        endTime: this.screenForm.date ? this.screenForm.date[1] : '',
+        status: 1, // 1:发货单,2:工程发货单
+      }
+    },
+    isShowDetail() {
+      return this.queryItem.hasOwnProperty('id');
+    },
+  },
+
+  created() {
+    this.getList();
+  },
+
+  methods: {
+    // 查询按钮权限
+    checkBtnRole(value) {
+      // let btnRole = this.$route.meta.roles;
+      // if(!btnRole) {return true}
+      // let index = btnRole.indexOf(value);
+      // return index >= 0;
+      return true
+    },
+
+    // 查询列表
+    getList() {
+      this.listLoading = true;
+
+      let params = {
+        pageNum: this.currentPage,
+        pageSize: this.pageSize,
+        retreatOrderNo: this.screenForm.orderNum,
+        customerNumber: this.screenForm.jxsNum,
+        customerName: this.screenForm.jxsName,
+        productName: this.screenForm.chName,
+        specification: this.screenForm.model,
+        startTime: this.screenForm.date ? this.screenForm.date[0] : '',
+        endTime: this.screenForm.date ? this.screenForm.date[1] : '',
+        status: 1, // 1:发货单,2:工程发货单
+      };
+      getList(params).then((res) => {
+        this.dataList = res.data.records;
+        this.listTotal = res.data.total;
+        this.listLoading = false;
+      })
+    },
+
+    // 提交筛选表单
+    submitScreenForm() {
+      this.currentPage = 1;
+      this.getList();
+    },
+
+    // 重置筛选表单
+    resetScreenForm() {
+      this.$refs.screenForm.resetFields();
+      this.currentPage = 1;
+      this.getList();
+    },
+
+    // 更改每页数量
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = 1;
+      this.getList();
+    },
+
+    // 更改当前页
+    handleCurrentChange(val) {
+      this.currentPage = val;
+      this.getList();
+    },
+
+    // 进入详情
+    toDetail(item) {
+      this.queryItem = item;
+    },
+
+    backList() {
+      this.queryItem = {};
+    },
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+
+</style>

+ 265 - 0
src/views/supply/deliver/engin_list.vue

@@ -0,0 +1,265 @@
+<template>
+  <div class="app-container">
+    <div v-show="!isShowDetail">
+      <!-- 筛选条件 -->
+      <div class="screen-container">
+        <el-form ref="screenForm" :model="screenForm" label-width="90px" size="small" label-position="left">
+          <el-row :gutter="20">
+            <el-col :xs="24" :sm="24" :lg="24">
+              <el-form-item prop="orderNum" label-width="0">
+                <el-radio-group v-model="screenForm.status" size="medium">
+                  <el-radio-button label="1">全部</el-radio-button>
+                  <el-radio-button label="2">已发货</el-radio-button>
+                  <el-radio-button label="3">已取消</el-radio-button>
+                </el-radio-group>
+              </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="12" :lg="6">
+              <el-form-item label="发货单号" prop="orderNum">
+                <el-input v-model="screenForm.orderNum" placeholder="请输入发货单号"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="12" :lg="6">
+              <el-form-item label="仓库" prop="orderNum">
+                <el-input v-model="screenForm.orderNum" placeholder="请输入仓库"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="12" :lg="6">
+              <el-form-item label="经销商编号" prop="jxsNum">
+                <el-input v-model="screenForm.jxsNum" placeholder="请输入经销商编号"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="12" :lg="6">
+              <el-form-item label="经销商名称" prop="jxsName">
+                <el-input v-model="screenForm.jxsName" placeholder="请输入经销商名称"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="12" :lg="6">
+              <el-form-item label="发货日期" prop="date">
+                <el-date-picker
+                  v-model="screenForm.date"
+                  type="datetimerange"
+                  range-separator="至"
+                  style="width: 100%;"
+                  value-format="yyyy-MM-dd HH:mm:ss"
+                  start-placeholder="开始日期"
+                  end-placeholder="结束日期">
+                </el-date-picker>
+              </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="12" :lg="6">
+              <el-form-item label="产品名称" prop="chName">
+                <el-input v-model="screenForm.chName" placeholder="请输入产品名称"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="12" :lg="6">
+              <el-form-item label="规格型号" prop="model">
+                <el-input v-model="screenForm.model" placeholder="请输入规格型号"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="12" :lg="6">
+              <el-form-item label="状态" prop="status">
+                <el-select v-model="screenForm.status" placeholder="全部">
+                  <el-option label="全部" value=""></el-option>
+                  <el-option :label="item.label" :value="item.value" v-for="(item, index) in select_status" :key="index"></el-option>
+                </el-select>
+              </el-form-item>
+            </el-col>
+            
+            <el-col :xs="24" :sm="24" :lg="24" class="tr">
+              <el-form-item label="">
+                <el-button size="small" @click="resetScreenForm">清空</el-button>
+                <el-button size="small" type="primary" @click="submitScreenForm">搜索</el-button>
+              </el-form-item>
+            </el-col>
+          </el-row>
+        </el-form>
+      </div>
+
+      <div class="mymain-container">
+        <div class="btn-group clearfix">
+          <div class="fl">
+            <el-button size="small" type="warning" icon="el-icon-close">退货</el-button>
+          </div>
+          <div class="fr">
+            <ExportButton :exUrl="'admin/user/mch/export'" :exParams="exParams" />
+          </div>
+        </div>
+        <div class="table">
+          <el-table v-loading="listLoading" :data="dataList" element-loading-text="Loading" border fit highlight-current-row stripe>
+            <el-table-column align="center" label="发货单号" prop="shipOrderNo" min-width="160" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="发货申请日期" prop="shipTime" min-width="160" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="仓库" prop="stockName" min-width="160" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="工程登录编码" prop="projectNumber" min-width="160" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="工程名称" prop="projectName" min-width="160" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="使用单位" prop="unit" min-width="160" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="经销商编码" prop="customerNumber" min-width="160" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="经销商名称" prop="customerName" min-width="160" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="产品名称" prop="productName" min-width="160" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="规格型号" prop="specification" min-width="160" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="计量单位" prop="unit" min-width="160" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="数量" prop="number" min-width="160" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="备注信息" prop="remark" min-width="160" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="制单人" prop="createBy" min-width="160" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="制单日期" prop="createTime" min-width="100" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="审单人" prop="aaa" min-width="100" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="审单日期" prop="aaa" min-width="200" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="状态" prop="aaa" min-width="200" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="操作" width="120" fixed="right">
+              <template slot-scope="scope">
+                <el-button type="text" @click="toDetail(scope.row)">详情</el-button>
+              </template>
+            </el-table-column>
+          </el-table>
+        </div>
+      </div>
+      <div class="pagination clearfix">
+        <div class="fr">
+          <el-pagination
+            @size-change="handleSizeChange"
+            @current-change="handleCurrentChange"
+            :current-page="currentPage"
+            :page-sizes="[10, 20, 30, 50]"
+            :page-size="10"
+            layout="total, sizes, prev, pager, next, jumper"
+            :total="listTotal">
+          </el-pagination>
+        </div>
+      </div>
+    </div>
+    
+    <EnginDetail :listItem="queryItem" v-if="isShowDetail" @backListFormDetail="backList" />
+
+  </div>
+</template>
+
+<script>
+import { COMMON_SELECT } from '@/utils/select_data'
+import { getList } from "@/api/supply/deliver";
+import EnginDetail from "@/views/supply/deliver/components/engin_detail";
+
+export default {
+  components: {
+    EnginDetail,
+  },
+  data() {
+    return {
+      currentPage: 1, // 当前页码
+      pageSize: 10, // 每页数量
+      listTotal: 0, // 列表总数
+      dataList: null, // 列表数据
+      listLoading: false, // 列表加载loading
+      screenForm: { // 筛选表单数据
+        orderNum: '',
+        jxsName: '',
+        chName: '',
+        model: '',
+        date: '',
+        jxsNum: '',
+        status: '',
+      },
+      select_status: [ // 筛选字段 - 状态
+        { label: '正常', value: true },
+        { label: '冻结', value: false }
+      ],
+
+      queryItem: {},
+    }
+  },
+
+  computed: {
+    exParams() {
+      return {
+        retreatOrderNo: this.screenForm.orderNum,
+        customerNumber: this.screenForm.jxsNum,
+        customerName: this.screenForm.jxsName,
+        productName: this.screenForm.chName,
+        specification: this.screenForm.model,
+        startTime: this.screenForm.date ? this.screenForm.date[0] : '',
+        endTime: this.screenForm.date ? this.screenForm.date[1] : '',
+        status: 2, // 1:发货单,2:工程发货单
+      }
+    },
+    isShowDetail() {
+      return this.queryItem.hasOwnProperty('id');
+    },
+  },
+
+  created() {
+    this.getList();
+  },
+
+  methods: {
+    // 查询按钮权限
+    checkBtnRole(value) {
+      // let btnRole = this.$route.meta.roles;
+      // if(!btnRole) {return true}
+      // let index = btnRole.indexOf(value);
+      // return index >= 0;
+      return true
+    },
+
+    // 查询列表
+    getList() {
+      this.listLoading = true;
+
+      let params = {
+        pageNum: this.currentPage,
+        pageSize: this.pageSize,
+        retreatOrderNo: this.screenForm.orderNum,
+        customerNumber: this.screenForm.jxsNum,
+        customerName: this.screenForm.jxsName,
+        productName: this.screenForm.chName,
+        specification: this.screenForm.model,
+        startTime: this.screenForm.date ? this.screenForm.date[0] : '',
+        endTime: this.screenForm.date ? this.screenForm.date[1] : '',
+        status: 2, // 1:发货单,2:工程发货单
+      };
+      getList(params).then((res) => {
+        this.dataList = res.data.records;
+        this.listTotal = res.data.total;
+        this.listLoading = false;
+      })
+    },
+
+    // 提交筛选表单
+    submitScreenForm() {
+      this.currentPage = 1;
+      this.getList();
+    },
+
+    // 重置筛选表单
+    resetScreenForm() {
+      this.$refs.screenForm.resetFields();
+      this.currentPage = 1;
+      this.getList();
+    },
+
+    // 更改每页数量
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = 1;
+      this.getList();
+    },
+
+    // 更改当前页
+    handleCurrentChange(val) {
+      this.currentPage = val;
+      this.getList();
+    },
+
+    // 进入详情
+    toDetail(item) {
+      this.queryItem = item;
+    },
+
+    backList() {
+      this.queryItem = {};
+    },
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+
+</style>

+ 5 - 0
src/views/supply/engin.vue

@@ -0,0 +1,5 @@
+<template>
+  <div>
+    <router-view />
+  </div>
+</template>

+ 214 - 0
src/views/supply/engin/components/engin_detail.vue

@@ -0,0 +1,214 @@
+<template>
+  <div class="detail-container">
+    <el-page-header @back="goBack" content="详情"></el-page-header>
+
+    <div id="printData">
+      <div class="main-title">
+        <div class="title">工程订单</div>
+      </div>
+
+      <div class="diy-table-1">
+        <el-row>
+          <el-col :span="8" class="item">
+            <div class="label">订单号</div>
+            <div class="value">{{detailData.billNo}}</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">订单日期</div>
+            <div class="value">{{detailData.fdate}}</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">单据状态</div>
+            <div class="value">{{detailData.srcStockId}}</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">工程登录单号</div>
+            <div class="value">{{detailData.destStockId}}</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">项目名称</div>
+            <div class="value">{{detailData.approveDate}}</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">单据类型</div>
+            <div class="value">{{detailData.approverId}}</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">经销商编码</div>
+            <div class="value">{{detailData.approverId}}</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">使用单位</div>
+            <div class="value">{{detailData.approverId}}</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">安装地址</div>
+            <div class="value">{{detailData.approverId}}</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">工程编号</div>
+            <div class="value">{{detailData.approverId}}</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">厂工厂编码</div>
+            <div class="value">{{detailData.approverId}}</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">工程登录类型</div>
+            <div class="value">{{detailData.approverId}}</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">文件编号</div>
+            <div class="value">{{detailData.approverId}}</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">制单人</div>
+            <div class="value">{{detailData.approverId}}</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">制单日期</div>
+            <div class="value">{{detailData.approverId}}</div>
+          </el-col>
+          <el-col :span="24" class="item">
+            <div class="label">格力回复</div>
+            <div class="value">{{detailData.approverId}}</div>
+          </el-col>
+          <el-col :span="24" class="item">
+            <div class="label">格力内部备注</div>
+            <div class="value">{{detailData.approverId}}</div>
+          </el-col>
+          <el-col :span="6" class="item">
+            <div class="label">审核人</div>
+            <div class="value">{{detailData.approverId}}</div>
+          </el-col>
+          <el-col :span="6" class="item">
+            <div class="label">审核日期</div>
+            <div class="value">{{detailData.approverId}}</div>
+          </el-col>
+          <el-col :span="6" class="item">
+            <div class="label">关闭人</div>
+            <div class="value">{{detailData.approverId}}</div>
+          </el-col>
+          <el-col :span="6" class="item">
+            <div class="label">关闭日期</div>
+            <div class="value">{{detailData.approverId}}</div>
+          </el-col>
+          <el-col :span="24" class="item">
+            <div class="label">备注</div>
+            <div class="value">{{detailData.approverId}}</div>
+          </el-col>
+        </el-row>
+      </div>
+
+      <div class="main-title">
+        <div class="title">货品信息</div>
+      </div>
+
+      <div class="table" style="margin-top: 20px">
+        <el-table :data="detailData.kingDeeTransferItems" element-loading-text="Loading" border fit highlight-current-row stripe max-height="400">
+          <el-table-column align="center" label="序号" type="index" width="50"></el-table-column>
+          <el-table-column align="center" label="引用记录" prop="materialNumber" min-width="160" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="销售类型" prop="materialName" min-width="160" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="产品编码" prop="model" min-width="160" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="产品名称" prop="baseUnitId" min-width="160" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="规格型号" prop="qty" min-width="160" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="单位" prop="qty" min-width="100" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="总数量" prop="qty" min-width="100" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="是否使用返利" prop="qty" min-width="100" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="返利使用比例" prop="qty" min-width="100" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="是否直调" prop="qty" min-width="100" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="直调数量" prop="qty" min-width="100" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="已发货数量" prop="qty" min-width="100" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="单价" prop="qty" min-width="100" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="金额" prop="qty" min-width="100" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="返利" prop="qty" min-width="100" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="备注" prop="qty" min-width="160" show-overflow-tooltip></el-table-column>
+        </el-table>
+      </div>
+      
+    </div>
+    
+    <div class="page-footer">
+      <div class="footer" :class="classObj">
+        <el-button  type="primary">直调发货</el-button>
+        <el-popconfirm title="确定关闭吗?" @onConfirm="goBack" style="margin-left: 10px;">
+          <el-button slot="reference">关 闭</el-button>
+        </el-popconfirm>
+      </div>
+    </div>
+
+  </div>
+</template>
+
+<script>
+import print from 'vue-print-nb'
+import { getDetail } from "@/api/supply/reserve";
+
+export default {
+  name: 'EnginDetail',
+  componentName: 'EnginDetail',
+  props: ['listItem'],
+  directives: {
+    print
+  },
+  data() {
+    return {
+      printObj: {
+        id: 'printData'
+      },
+      detailData: {},
+    }
+  },
+
+  computed: {
+    sidebar() {
+      return this.$store.state.app.sidebar
+    },
+    classObj() {
+      return {
+        hideSidebar: !this.sidebar.opened,
+        openSidebar: this.sidebar.opened
+      }
+    },
+  },
+
+  created() {
+    this.getDetail();
+  },
+
+  methods: {
+    // 返回列表
+    goBack() {
+      this.$emit('backListFormDetail');
+    },
+
+    // 获取详情
+    getDetail() {
+      getDetail({id: this.listItem.id}).then(res => {
+        this.detailData = res.data;
+      })
+    },
+  }
+}
+</script>
+
+<style scoped lang="scss">
+  .detail-container {
+    width: 100%;
+    height: 100%;
+  }
+  .main-title {
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    margin-top: 20px;
+    height: 60px;
+    border-bottom: 1px solid #DCDFE6;
+    margin-bottom: 20px;
+    .title {
+      font-size: 16px;
+      font-weight: 600;
+      padding-left: 10px;
+    }
+  }
+</style>

+ 227 - 0
src/views/supply/engin/components/engin_form.vue

@@ -0,0 +1,227 @@
+<template>
+  <div class="detail-container">
+    <el-page-header @back="goBack" :content="listItem ? '编辑':'新增'"></el-page-header>
+
+    <div class="main-title">
+      <div class="title">工程订单</div>
+    </div>
+
+    <el-form ref="mainForm" :model="mainForm" label-width="100px" size="small" label-position="left">
+      <el-row :gutter="20">
+        <el-col :xs="24" :sm="12" :lg="8">
+          <el-form-item label="工程订单" prop="warehouse">
+            <el-input v-model="mainForm.remark" placeholder="请输入工程订单"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :xs="24" :sm="12" :lg="8" style="height: 51px;">
+          <el-form-item label="单据日期" prop="date">
+            <el-date-picker
+              v-model="mainForm.date"
+              type="date"
+              value-format="yyyy-MM-dd"
+              style="width: 100%;"
+              placeholder="选择日期">
+            </el-date-picker>
+          </el-form-item>
+        </el-col>
+        <el-col :xs="24" :sm="12" :lg="8">
+          <el-form-item label="品类" prop="warehouse">
+            <el-input v-model="mainForm.remark" placeholder="请输入品类"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :xs="24" :sm="12" :lg="8">
+          <el-form-item label="工程登录单号" prop="warehouse">
+            <el-input v-model="mainForm.remark" placeholder="请输入工程登录单号"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :xs="24" :sm="12" :lg="8">
+          <el-form-item label="项目名称" prop="warehouse">
+            <el-input v-model="mainForm.remark" placeholder="请输入项目名称"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :xs="24" :sm="12" :lg="8">
+          <el-form-item label="单据类型" prop="warehouse">
+            <el-input v-model="mainForm.remark" placeholder="请输入单据类型"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :xs="24" :sm="12" :lg="8">
+          <el-form-item label="经销商编码" prop="warehouse">
+            <el-input v-model="mainForm.remark" placeholder="请输入经销商编码"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :xs="24" :sm="12" :lg="8">
+          <el-form-item label="使用单位" prop="warehouse">
+            <el-input v-model="mainForm.remark" placeholder="请输入使用单位"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :xs="24" :sm="12" :lg="8">
+          <el-form-item label="安装地址" prop="warehouse">
+            <el-input v-model="mainForm.remark" placeholder="请输入安装地址"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :xs="24" :sm="12" :lg="8">
+          <el-form-item label="工程编号" prop="warehouse">
+            <el-input v-model="mainForm.remark" placeholder="请输入工程编号"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :xs="24" :sm="12" :lg="8">
+          <el-form-item label="厂工程编码" prop="warehouse">
+            <el-input v-model="mainForm.remark" placeholder="请输入厂工程编码"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :xs="24" :sm="12" :lg="8">
+          <el-form-item label="工程登录类型" prop="warehouse">
+            <el-input v-model="mainForm.remark" placeholder="请输入工程登录类型"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :xs="24" :sm="24" :lg="24">
+          <el-form-item label="格力回复" prop="warehouse">
+            <el-input v-model="mainForm.remark" placeholder="请输入格力回复"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :xs="24" :sm="24" :lg="24">
+          <el-form-item label="格力内部备注" prop="warehouse">
+            <el-input v-model="mainForm.remark" placeholder="请输入格力内部备注"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :xs="24" :sm="24" :lg="24">
+          <el-form-item label="备注" prop="warehouse">
+            <el-input v-model="mainForm.remark" placeholder="请输入备注"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :xs="24" :sm="12" :lg="8">
+          <el-form-item label="制单人" prop="warehouse">
+            <el-input v-model="mainForm.remark" placeholder="请输入制单人"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :xs="24" :sm="12" :lg="8" style="height: 51px;">
+          <el-form-item label="制单日期" prop="date">
+            <el-date-picker
+              v-model="mainForm.date"
+              type="date"
+              value-format="yyyy-MM-dd"
+              style="width: 100%;"
+              placeholder="选择日期">
+            </el-date-picker>
+          </el-form-item>
+        </el-col>
+        <el-col :xs="24" :sm="12" :lg="8">
+          <el-form-item label="文件编号" prop="warehouse">
+            <el-input v-model="mainForm.remark" placeholder="请输入文件编号"></el-input>
+          </el-form-item>
+        </el-col>
+      </el-row>
+    </el-form>
+
+    <div class="main-title">
+      <div class="title">货品信息</div>
+      <el-button type="primary" size="small" icon="el-icon-plus">添加货品</el-button>
+    </div>
+
+    <div class="table" style="margin-top: 20px">
+      <el-table :data="detailData.kingDeeTransferItems" element-loading-text="Loading" border fit highlight-current-row stripe max-height="400">
+        <el-table-column align="center" label="序号" type="index" width="50"></el-table-column>
+        <el-table-column align="center" label="引用记录" prop="materialNumber" min-width="160" show-overflow-tooltip></el-table-column>
+        <el-table-column align="center" label="销售类型" prop="materialName" min-width="160" show-overflow-tooltip></el-table-column>
+        <el-table-column align="center" label="产品编码" prop="model" min-width="160" show-overflow-tooltip></el-table-column>
+        <el-table-column align="center" label="产品名称" prop="baseUnitId" min-width="160" show-overflow-tooltip></el-table-column>
+        <el-table-column align="center" label="规格型号" prop="qty" min-width="160" show-overflow-tooltip></el-table-column>
+        <el-table-column align="center" label="单位" prop="qty" min-width="100" show-overflow-tooltip></el-table-column>
+        <el-table-column align="center" label="总数量" prop="qty" min-width="100" show-overflow-tooltip></el-table-column>
+        <el-table-column align="center" label="是否使用返利" prop="qty" min-width="100" show-overflow-tooltip></el-table-column>
+        <el-table-column align="center" label="返利使用比例" prop="qty" min-width="100" show-overflow-tooltip></el-table-column>
+        <el-table-column align="center" label="是否直调" prop="qty" min-width="100" show-overflow-tooltip></el-table-column>
+        <el-table-column align="center" label="直调数量" prop="qty" min-width="100" show-overflow-tooltip></el-table-column>
+        <el-table-column align="center" label="已发货数量" prop="qty" min-width="100" show-overflow-tooltip></el-table-column>
+        <el-table-column align="center" label="单价" prop="qty" min-width="100" show-overflow-tooltip></el-table-column>
+        <el-table-column align="center" label="金额" prop="qty" min-width="100" show-overflow-tooltip></el-table-column>
+        <el-table-column align="center" label="返利" prop="qty" min-width="100" show-overflow-tooltip></el-table-column>
+        <el-table-column align="center" label="备注" prop="qty" min-width="160" show-overflow-tooltip></el-table-column>
+      </el-table>
+    </div>
+    
+    <div class="page-footer">
+      <div class="footer" :class="classObj">
+        <el-button type="primary" @click="clickSubmitForm">保 存</el-button>
+        <el-button type="primary" @click="clickSubmitForm">提交审核</el-button>
+        <el-popconfirm title="确定关闭吗?" @onConfirm="goBack" style="margin-left: 10px;">
+          <el-button slot="reference">关 闭</el-button>
+        </el-popconfirm>
+      </div>
+    </div>
+
+  </div>
+</template>
+
+<script>
+import { getDetail } from "@/api/supply/reserve";
+
+export default {
+  name: 'EnginForm',
+  componentName: 'EnginForm',
+  props: ['listItem'],
+  data() {
+    return {
+      detailData: {},
+      mainForm: {
+
+      },
+    }
+  },
+
+  computed: {
+    sidebar() {
+      return this.$store.state.app.sidebar
+    },
+    classObj() {
+      return {
+        hideSidebar: !this.sidebar.opened,
+        openSidebar: this.sidebar.opened
+      }
+    },
+  },
+
+  created() {
+    this.getDetail();
+  },
+
+  methods: {
+    // 返回列表
+    goBack() {
+      this.$emit('backListFormDetail');
+    },
+
+    // 获取详情
+    getDetail() {
+      getDetail({id: this.listItem.id}).then(res => {
+        this.detailData = res.data;
+      })
+    },
+
+    clickSubmitForm() {
+
+    },
+  }
+}
+</script>
+
+<style scoped lang="scss">
+  .detail-container {
+    width: 100%;
+    height: 100%;
+  }
+  .main-title {
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    margin-top: 20px;
+    height: 60px;
+    border-bottom: 1px solid #DCDFE6;
+    margin-bottom: 20px;
+    .title {
+      font-size: 16px;
+      font-weight: 600;
+      padding-left: 10px;
+    }
+  }
+</style>

+ 288 - 0
src/views/supply/engin/engin_list.vue

@@ -0,0 +1,288 @@
+<template>
+  <div class="app-container">
+    <div v-show="!isShowDetail && !isShowForm">
+      <!-- 筛选条件 -->
+      <div class="screen-container">
+        <el-form ref="screenForm" :model="screenForm" label-width="100px" size="small" label-position="left">
+          <el-row :gutter="20">
+            <el-col :xs="24" :sm="24" :lg="24">
+              <el-form-item prop="orderNum" label-width="0">
+                <el-radio-group v-model="screenForm.status" size="medium">
+                  <el-radio-button label="1">全部</el-radio-button>
+                  <el-radio-button label="2">已保存</el-radio-button>
+                  <el-radio-button label="3">待审核</el-radio-button>
+                  <el-radio-button label="3">审核通过</el-radio-button>
+                  <el-radio-button label="3">审核驳回</el-radio-button>
+                  <el-radio-button label="3">已退单</el-radio-button>
+                </el-radio-group>
+              </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="12" :lg="6">
+              <el-form-item label="工程订单号" prop="orderNum">
+                <el-input v-model="screenForm.orderNum" placeholder="请输入工程订单号"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="12" :lg="6">
+              <el-form-item label="工程编码" prop="orderNum">
+                <el-input v-model="screenForm.orderNum" placeholder="请输入工程编码"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="12" :lg="6">
+              <el-form-item label="工程登录单号" prop="jxsName">
+                <el-input v-model="screenForm.jxsName" placeholder="请输入工程登录单号"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="12" :lg="6">
+              <el-form-item label="工程名称" prop="jxsNum">
+                <el-input v-model="screenForm.jxsNum" placeholder="请输入工程名称"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="12" :lg="6">
+              <el-form-item label="单据日期" prop="date">
+                <el-date-picker
+                  v-model="screenForm.date"
+                  type="datetimerange"
+                  range-separator="至"
+                  style="width: 100%;"
+                  value-format="yyyy-MM-dd HH:mm:ss"
+                  start-placeholder="开始日期"
+                  end-placeholder="结束日期">
+                </el-date-picker>
+              </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="12" :lg="6">
+              <el-form-item label="销售类型" prop="chName">
+                <el-input v-model="screenForm.chName" placeholder="请输入销售类型"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="12" :lg="6">
+              <el-form-item label="使用单位" prop="model">
+                <el-input v-model="screenForm.model" placeholder="请输入使用单位"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="12" :lg="6">
+              <el-form-item label="制表人" prop="model">
+                <el-input v-model="screenForm.model" placeholder="请输入制表人"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="12" :lg="6">
+              <el-form-item label="审核人" prop="model">
+                <el-input v-model="screenForm.model" placeholder="请输入审核人"></el-input>
+              </el-form-item>
+            </el-col>
+            
+            <el-col :xs="24" :sm="12" :lg="18" class="tr">
+              <el-form-item label="">
+                <el-button size="small" @click="resetScreenForm">清空</el-button>
+                <el-button size="small" type="primary" @click="submitScreenForm">搜索</el-button>
+              </el-form-item>
+            </el-col>
+          </el-row>
+        </el-form>
+      </div>
+
+      <div class="mymain-container">
+        <div class="btn-group clearfix">
+          <div class="fl">
+            <el-button size="small" type="primary" icon="el-icon-plus" @click="toForm()">新增</el-button>
+          </div>
+          <div class="fr">
+            <ExportButton :exUrl="'admin/user/mch/export'" :exParams="exParams" />
+          </div>
+        </div>
+        <div class="table">
+          <el-table v-loading="listLoading" :data="dataList" element-loading-text="Loading" border fit highlight-current-row stripe>
+            <el-table-column align="center" label="工程订单号" prop="shipOrderNo" min-width="160" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="单据日期" prop="shipTime" min-width="160" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="工程编码" prop="stockName" min-width="160" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="工程登录单号" prop="projectNumber" min-width="160" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="工程名称" prop="projectName" min-width="160" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="使用单位" prop="unit" min-width="160" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="销售类型" prop="specification" min-width="160" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="货品名称" prop="unit" min-width="160" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="规格型号" prop="number" min-width="160" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="单位" prop="number" min-width="160" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="总数量" prop="remark" min-width="160" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="是否直调" prop="customerNumber" min-width="160" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="直调数量" prop="customerName" min-width="160" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="单价" prop="productName" min-width="160" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="金额" prop="createBy" min-width="160" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="返利使用比例" prop="createTime" min-width="100" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="返利" prop="createBy" min-width="160" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="制表人" prop="createTime" min-width="100" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="制表日期" prop="aaa" min-width="100" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="审核人" prop="aaa" min-width="200" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="审核日期" prop="aaa" min-width="100" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="审核状态" prop="aaa" min-width="100" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="操作" width="160" fixed="right">
+              <template slot-scope="scope">
+                <el-button type="text" @click="toForm(scope.row)">编辑</el-button>
+                <el-button type="text" @click="toDetail(scope.row)">详情</el-button>
+                <el-popconfirm v-if="scope.row.status" style="margin-left: 10px;" title="确定删除吗?" @onConfirm="handleDelete(scope.row.id)" >
+                  <el-button slot="reference" type="text">删除</el-button>
+                </el-popconfirm>
+              </template>
+            </el-table-column>
+          </el-table>
+        </div>
+      </div>
+      <div class="pagination clearfix">
+        <div class="fr">
+          <el-pagination
+            @size-change="handleSizeChange"
+            @current-change="handleCurrentChange"
+            :current-page="currentPage"
+            :page-sizes="[10, 20, 30, 50]"
+            :page-size="10"
+            layout="total, sizes, prev, pager, next, jumper"
+            :total="listTotal">
+          </el-pagination>
+        </div>
+      </div>
+    </div>
+    
+    <EnginDetail :listItem="queryItem" v-if="isShowDetail" @backListFormDetail="backList" />
+    <EnginForm :listItem="queryItem" v-if="isShowForm" @backListFormDetail="backList" />
+
+  </div>
+</template>
+
+<script>
+import { getList } from "@/api/supply/engin";
+import EnginDetail from "@/views/supply/engin/components/engin_detail";
+import EnginForm from "@/views/supply/engin/components/engin_form";
+
+export default {
+  components: {
+    EnginDetail,
+    EnginForm,
+  },
+  data() {
+    return {
+      currentPage: 1, // 当前页码
+      pageSize: 10, // 每页数量
+      listTotal: 0, // 列表总数
+      dataList: null, // 列表数据
+      listLoading: false, // 列表加载loading
+      screenForm: { // 筛选表单数据
+        orderNum: '',
+        jxsName: '',
+        chName: '',
+        model: '',
+        date: '',
+        jxsNum: '',
+        status: '',
+      },
+
+      queryItem: {},
+      isShowDetail: false,
+      isShowForm: false,
+    }
+  },
+
+  computed: {
+    exParams() {
+      return {
+        retreatOrderNo: this.screenForm.orderNum,
+        customerNumber: this.screenForm.jxsNum,
+        customerName: this.screenForm.jxsName,
+        productName: this.screenForm.chName,
+        specification: this.screenForm.model,
+        startTime: this.screenForm.date ? this.screenForm.date[0] : '',
+        endTime: this.screenForm.date ? this.screenForm.date[1] : '',
+        status: 2, // 1:发货单,2:工程发货单
+      }
+    },
+  },
+
+  created() {
+    this.getList();
+  },
+
+  methods: {
+    // 查询按钮权限
+    checkBtnRole(value) {
+      // let btnRole = this.$route.meta.roles;
+      // if(!btnRole) {return true}
+      // let index = btnRole.indexOf(value);
+      // return index >= 0;
+      return true
+    },
+
+    // 查询列表
+    getList() {
+      this.listLoading = true;
+
+      let params = {
+        pageNum: this.currentPage,
+        pageSize: this.pageSize,
+        retreatOrderNo: this.screenForm.orderNum,
+        customerNumber: this.screenForm.jxsNum,
+        customerName: this.screenForm.jxsName,
+        productName: this.screenForm.chName,
+        specification: this.screenForm.model,
+        startTime: this.screenForm.date ? this.screenForm.date[0] : '',
+        endTime: this.screenForm.date ? this.screenForm.date[1] : '',
+        status: 2, // 1:发货单,2:工程发货单
+      };
+      getList(params).then((res) => {
+        this.dataList = res.data.records;
+        this.listTotal = res.data.total;
+        this.listLoading = false;
+      })
+    },
+
+    // 提交筛选表单
+    submitScreenForm() {
+      this.currentPage = 1;
+      this.getList();
+    },
+
+    // 重置筛选表单
+    resetScreenForm() {
+      this.$refs.screenForm.resetFields();
+      this.currentPage = 1;
+      this.getList();
+    },
+
+    // 更改每页数量
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = 1;
+      this.getList();
+    },
+
+    // 更改当前页
+    handleCurrentChange(val) {
+      this.currentPage = val;
+      this.getList();
+    },
+
+    // 进入表单
+    toForm(item) {
+      this.queryItem = item;
+      this.isShowForm = true;
+    },
+
+    // 进入详情
+    toDetail(item) {
+      this.queryItem = item;
+      this.isShowDetail = true;
+    },
+
+    backList() {
+      this.queryItem = {};
+      this.isShowDetail = false;
+      this.isShowForm = false;
+    },
+
+    handleDelete(id) {
+
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+
+</style>

+ 5 - 0
src/views/supply/pickup.vue

@@ -0,0 +1,5 @@
+<template>
+  <div>
+    <router-view />
+  </div>
+</template>

+ 330 - 0
src/views/supply/pickup/book.vue

@@ -0,0 +1,330 @@
+<template>
+  <div class="app-container">
+    <!-- 筛选条件 -->
+    <div>
+      <el-form ref="mainForm" :model="mainForm" :rules="mainFormRules" label-width="80px" size="small" label-position="left">
+        <el-row :gutter="20">
+          <el-col :xs="24" :sm="12" :lg="6">
+            <el-form-item label="选择仓库" prop="warehouse">
+              <el-select v-model="mainForm.warehouse" placeholder="请选择仓库">
+                <el-option :label="item.name" :value="item.name" v-for="(item, index) in warehouseList" :key="index"></el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :lg="6">
+            <el-button size="small" type="primary" @click="getDeliverList">确定</el-button>
+          </el-col>
+        </el-row>
+        <el-row :gutter="20">
+          <el-col :xs="24" :sm="12" :lg="6" style="height: 51px;">
+            <el-form-item label="预约日期" prop="date">
+              <el-date-picker
+                v-model="mainForm.date"
+                type="date"
+                value-format="yyyy-MM-dd"
+                style="width: 100%;"
+                placeholder="选择日期">
+              </el-date-picker>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :lg="12" style="height: 51px;">
+            <el-form-item label="预约时段" prop="timeSlot">
+              <el-time-picker
+                is-range
+                v-model="mainForm.timeSlot"
+                style="width: 100%"
+                value-format="HH:mm:ss"
+                range-separator="至"
+                start-placeholder="开始时间"
+                end-placeholder="结束时间"
+                placeholder="选择时间范围">
+              </el-time-picker>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row :gutter="20">
+          <el-col :xs="24" :sm="12" :lg="6">
+            <el-form-item label="提货方式" prop="pickupWay">
+              <el-select v-model="mainForm.pickupWay" placeholder="全部" style="width: 100%">
+                <el-option :label="item.dictValue" :value="item.dictCode" v-for="(item, index) in pickupWayList" :key="index"></el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row :gutter="20">
+          <el-col :xs="24" :sm="12" :lg="6">
+            <el-form-item label="提货人" prop="pickupMan">
+              <el-select v-model="mainForm.pickupMan" placeholder="全部" style="width: 100%">
+                <el-option :label="item.takerName" :value="item.id" v-for="(item, index) in pickupManList" :key="index"></el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :lg="6" v-if="mainForm.pickupWay == '1'">
+            <el-form-item label="提货车辆" prop="pickupCar">
+              <el-select v-model="mainForm.pickupCar" placeholder="全部" style="width: 100%">
+                <el-option :label="item.carBrand" :value="item.id" v-for="(item, index) in pickupCarList" :key="index"></el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :lg="6" v-if="mainForm.pickupWay == '2'">
+            <el-form-item label="物流公司" prop="company">
+              <el-select v-model="mainForm.company" placeholder="全部" style="width: 100%">
+                <el-option :label="item.logisticsCompany" :value="item.logisticsNumber" v-for="(item, index) in companyList" :key="index"></el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :lg="12">
+            <el-form-item label="备注内容" prop="remark">
+              <el-input v-model="mainForm.remark" placeholder="请输入备注内容"></el-input>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+    </div>
+
+    <div class="mymain-container">
+      <div class="table">
+        <el-table v-loading="listLoading" :data="deliverList" element-loading-text="Loading" border fit highlight-current-row stripe @selection-change="handleSelectionChange">
+          <el-table-column align="center" type="selection" width="55"></el-table-column>
+          <el-table-column type="expand">
+            <template slot-scope="props">
+              <div style="display: flex; margin: 0 -30px 0 -20px;">
+                <div style="line-height: 50px; font-weight: 600">产品信息</div>
+                <div class="diy-table-2" style="margin: 0 0 0 14px; flex: 1">
+                  <div class="head">
+                    <el-row :gutter="20">
+                      <el-col :span="5">产品编号</el-col>
+                      <el-col :span="10">产品名称</el-col>
+                      <el-col :span="3">规格型号</el-col>
+                      <el-col :span="3">单位</el-col>
+                      <el-col :span="3">数量</el-col>
+                    </el-row>
+                  </div>
+                  <div class="body">
+                    <el-row v-for="(item, index) in props.row.shipDocumentOrders" :key="index" :gutter="20">
+                      <el-col :span="5">{{ item.productNumber }}</el-col>
+                      <el-col :span="10">{{ item.productName }}</el-col>
+                      <el-col :span="3">{{ item.specification }}</el-col>
+                      <el-col :span="3">{{ item.unit }}</el-col>
+                      <el-col :span="3">{{ item.number }}</el-col>
+                    </el-row>
+                  </div>
+                </div>
+              </div>
+            </template>
+          </el-table-column>
+          <el-table-column align="center" label="发货单号" prop="shipOrderNo" min-width="160" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="单据日期" prop="createTime" min-width="160" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="工程编号" prop="factoryNumber" min-width="160" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="销售类型" prop="salesType" min-width="160" show-overflow-tooltip></el-table-column>
+        </el-table>
+      </div>
+    </div>
+
+    <div class="page-footer">
+      <div class="footer" :class="classObj">
+        <el-button type="primary" @click="clickSubmitForm" :loading="formLoading">{{ formLoading ? '提交中 ...' : '提 交' }}</el-button>
+        <el-popconfirm title="确定重置吗?" @onConfirm="resetForm" style="margin-left: 10px;">
+          <el-button slot="reference">重 置</el-button>
+        </el-popconfirm>
+      </div>
+    </div>
+
+  </div>
+</template>
+
+<script>
+import { getWarehouseList, getDeliverList, getPickupManList, getPickupCarList, getCompanyList, addPickupBook } from "@/api/supply/pickup";
+import { getDictList } from "@/api/common";
+import { findElem } from "@/utils/util";
+
+export default {
+  data() {
+    return {
+      deliverList: null, // 列表数据
+      listLoading: false, // 列表加载loading
+      mainForm: { // 筛选表单数据
+        warehouse: '',
+        date: '',
+        timeSlot: '',
+        pickupWay: '',
+        pickupMan: '',
+        pickupCar: '',
+        company: '',
+        remark: '',
+      },
+      mainFormRules: {
+        date: [
+          { required: true, message: '请选择预约日期', trigger: 'change' }
+        ],
+        timeSlot: [
+          { required: true, message: '请选择预约时段', trigger: 'change' }
+        ],
+        pickupWay: [
+          { required: true, message: '请选择提货方式', trigger: 'change' }
+        ],
+        pickupMan: [
+          { required: true, message: '请选择提货人', trigger: 'change' }
+        ],
+      },
+      formLoading: false,
+      tableSelection: [],
+      warehouseList: [],
+      pickupWayList: [],
+      pickupManList: [],
+      pickupCarList: [],
+      companyList: [],
+    }
+  },
+
+  computed: {
+    sidebar() {
+      return this.$store.state.app.sidebar
+    },
+    classObj() {
+      return {
+        hideSidebar: !this.sidebar.opened,
+        openSidebar: this.sidebar.opened
+      }
+    },
+  },
+
+  created() {
+    this.getWarehouseList();
+    this.getPickupWayList();
+    this.getPickupManList();
+    this.getPickupCarList();
+    this.getCompanyList();
+  },
+
+  methods: {
+    // 查询按钮权限
+    checkBtnRole(value) {
+      // let btnRole = this.$route.meta.roles;
+      // if(!btnRole) {return true}
+      // let index = btnRole.indexOf(value);
+      // return index >= 0;
+      return true
+    },
+
+    // 获取仓库列表
+    getWarehouseList() {
+      getWarehouseList({
+        pageNum: 1,
+        pageSize: -1
+      }).then((res) => {
+        this.warehouseList = res.data.records;
+      })
+    },
+
+    // 获取提货方式列表
+    getPickupWayList() {
+      getDictList({sysDictEnum: 'PICK'}).then(res => {
+        this.pickupWayList = res.data;
+      })
+    },
+
+    // 获取提货人列表
+    getPickupManList() {
+      getPickupManList({
+        pageNum: 1,
+        pageSize: -1
+      }).then(res => {
+        this.pickupManList = res.data.records;
+      })
+    },
+
+    // 获取提货车辆列表
+    getPickupCarList() {
+      getPickupCarList({
+        pageNum: 1,
+        pageSize: -1
+      }).then(res => {
+        this.pickupCarList = res.data.records;
+      })
+    },
+
+    // 获取物流公司列表
+    getCompanyList() {
+      getCompanyList({
+        pageNum: 1,
+        pageSize: -1
+      }).then(res => {
+        this.companyList = res.data.records;
+      })
+    },
+
+    // 查询列表
+    getDeliverList() {
+      if(!this.mainForm.warehouse) {
+        return this.$errorMsg('请选择仓库');
+      }
+      this.listLoading = true;
+      getDeliverList({stockName: this.mainForm.warehouse}).then((res) => {
+        this.deliverList = res.data;
+        this.listLoading = false;
+      })
+    },
+
+    handleSelectionChange(val) {
+      this.tableSelection = val;
+    },
+
+    clickSubmitForm() {
+      this.$refs.mainForm.validate((valid) => {
+        if (valid) {
+          if(this.tableSelection.length < 1) {
+            return this.$errorMsg('请选择发货单');
+          }
+
+          this.formLoading = true;
+          let takerName = '';
+          if(this.mainForm.pickupMan) {
+            let index = findElem(this.pickupManList, 'id', this.mainForm.pickupMan);
+            takerName = this.pickupManList[index].takerName;
+          }
+          let orderList = [];
+          this.tableSelection.forEach(item => {
+            orderList.push(item.id);
+          });
+          let params = {
+            stockName: this.mainForm.warehouse,
+            pickTime: this.mainForm.date,
+            pickStartTime: this.mainForm.timeSlot[0],
+            pickEndTime: this.mainForm.timeSlot[1],
+            pickType: Number(this.mainForm.pickupWay),
+            takerId: this.mainForm.pickupMan,
+            takerName,
+            remark: this.mainForm.remark,
+            shipDocumentBeans: orderList,
+          }
+          if(this.mainForm.pickupWay == '1') {
+            params.takerCarId = this.mainForm.pickupCar;
+          }
+          if(this.mainForm.pickupWay == '2') {
+            params.pickLogistics = this.mainForm.company;
+          }
+          addPickupBook(params).then(res => {
+            this.$successMsg('提交成功');
+            setTimeout(() => {
+              this.resetForm();
+            }, 1500)
+          }).finally(res => {
+            this.formLoading = false;
+          })
+        }
+      })
+    },
+
+    resetForm() {
+      this.$refs.mainForm.resetFields();
+      this.deliverList = [];
+    },
+
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+
+</style>

+ 223 - 0
src/views/supply/pickup/check.vue

@@ -0,0 +1,223 @@
+<template>
+  <div class="app-container">
+    
+    <div class="main-title">
+      <div class="title">仓库提货确认</div>
+    </div>
+
+    <div>
+      <el-form ref="screenForm" :model="screenForm" label-width="96px" size="small" label-position="right">
+        <el-row :gutter="20">
+          <el-col :xs="24" :sm="12" :lg="6">
+            <el-form-item label="提货人手机号" prop="phone">
+              <el-input v-model="screenForm.phone" placeholder="请输入提货人手机号"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :lg="3">
+            <el-button size="small" type="primary" @click="getCode" :disabled="!screenForm.phone || countDown != 60">{{countDown == 60 ? getCodeText : '重新获取('+countDown+'s)'}}</el-button>
+          </el-col>
+          <el-col :xs="24" :sm="12" :lg="8">
+            <el-form-item label="验证码" prop="code">
+              <el-input v-model="screenForm.code" placeholder="请输入验证码"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :lg="3">
+            <el-button size="small" type="primary" :disabled="!screenForm.phone || !screenForm.code" @click="getPickupManInfo">确 认</el-button>
+          </el-col>
+        </el-row>
+        <el-row :gutter="20">
+          <el-col :xs="24" :sm="12" :lg="9">
+            <el-form-item label="提货人姓名" prop="name">
+              <el-input v-model="screenForm.name" placeholder="请通过手机验证获取" readonly></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :lg="8">
+            <el-form-item label="提货人身份证" prop="idCard">
+              <el-input v-model="screenForm.idCard" placeholder="请通过手机验证获取" readonly></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :lg="3">
+            <el-button size="small" type="primary" @click="getList">查 询</el-button>
+          </el-col>
+        </el-row>
+        <el-row :gutter="20">
+          <el-col :xs="24" :sm="24" :lg="24">
+            <el-form-item prop="orderNum" label-width="0">
+              <el-radio-group v-model="screenForm.status" size="medium">
+                <el-radio-button label="0">未打印</el-radio-button>
+                <el-radio-button label="1">已打印</el-radio-button>
+              </el-radio-group>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+    </div>
+
+    <div class="main-title">
+      <div class="title">提货单</div>
+    </div>
+
+    <div class="mymain-container">
+      <div class="table">
+        <el-table v-loading="listLoading" :data="dataList" element-loading-text="Loading" border fit highlight-current-row stripe>
+          <el-table-column align="center" label="状态" min-width="160" show-overflow-tooltip>
+            <template slot-scope="scope">
+              {{ scope.row.printNum ? '已打单':'未打单' }}
+            </template>
+          </el-table-column>
+          <el-table-column align="center" label="提货方式" prop="pickType" min-width="160" show-overflow-tooltip>
+            <template slot-scope="scope">
+              {{ scope.row.pickType == '1' ? '自提':'物流快递' }}
+            </template>
+          </el-table-column>
+          <el-table-column align="center" label="提货人/物流公司" prop="takerName" min-width="160" show-overflow-tooltip>
+            <template slot-scope="scope">
+              {{ scope.row.pickType == '1' ? scope.row.takerName:scope.row.pickLogistics }}
+            </template>
+          </el-table-column>
+          <el-table-column align="center" label="信息密钥" prop="informationKey" min-width="160" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="提货单号" prop="pickOrderNo" min-width="160" show-overflow-tooltip></el-table-column>
+        </el-table>
+      </div>
+    </div>
+    <div class="pagination clearfix">
+      <div class="fr">
+        <el-pagination
+          @size-change="handleSizeChange"
+          @current-change="handleCurrentChange"
+          :current-page="currentPage"
+          :page-sizes="[10, 20, 30, 50]"
+          :page-size="10"
+          layout="total, sizes, prev, pager, next, jumper"
+          :total="listTotal">
+        </el-pagination>
+      </div>
+    </div>
+
+  </div>
+</template>
+
+<script>
+import { getPickupList, getCode, getPickupManInfo } from "@/api/supply/pickup";
+
+export default {
+  data() {
+    return {
+      currentPage: 1, // 当前页码
+      pageSize: 10, // 每页数量
+      listTotal: 0, // 列表总数
+      dataList: null, // 列表数据
+      listLoading: false, // 列表加载loading
+      screenForm: { // 筛选表单数据
+        phone: '',
+        code: '',
+        name: '',
+        idCard: '',
+        pickupWay: '',
+        company: '',
+        secretKey: '',
+      },
+
+      getCodeText: '获取验证码',
+      countDown: 60,
+			timer: null,
+    }
+  },
+
+  computed: {
+    
+  },
+
+  created() {
+    
+  },
+
+  methods: {
+    // 查询按钮权限
+    checkBtnRole(value) {
+      // let btnRole = this.$route.meta.roles;
+      // if(!btnRole) {return true}
+      // let index = btnRole.indexOf(value);
+      // return index >= 0;
+      return true
+    },
+
+    // 获取短信验证码
+    getCode() {
+      getCode({mobile: this.screenForm.phone}).then(res => {
+        this.$successMsg('短信已发送');
+        this.countDown--;
+        this.timer = setInterval(() => {
+          this.countDown--;
+          if (this.countDown == 0) {
+            this.countDown = 60;
+            this.getCodeText = '重新获取';
+            clearInterval(this.timer)
+          }
+        }, 1000)
+      })
+    },
+
+    // 获取提货人信息
+    getPickupManInfo() {
+      getPickupManInfo({
+        mobile: this.screenForm.phone,
+        code: this.screenForm.code,
+      }).then(res => {
+        this.$successMsg('验证成功');
+        this.screenForm.name = res.data.takerName;
+        this.screenForm.idCard = res.data.identity;
+      })
+    },
+
+    // 查询列表
+    getList() {
+      this.listLoading = true;
+
+      let params = {
+        pageNum: this.currentPage,
+        pageSize: this.pageSize,
+        userName: this.screenForm.account,
+        nickName: this.screenForm.nickName,
+        linkPhone: this.screenForm.phone,
+        email: this.screenForm.email,
+        status: this.screenForm.status,
+      };
+      getPickupList(params).then((res) => {
+        this.dataList = res.data.records;
+        this.listTotal = res.data.total;
+        this.listLoading = false;
+      })
+    },
+
+    // 更改每页数量
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = 1;
+      this.getList();
+    },
+
+    // 更改当前页
+    handleCurrentChange(val) {
+      this.currentPage = val;
+      this.getList();
+    },
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+  .main-title {
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    height: 60px;
+    border-bottom: 1px solid #DCDFE6;
+    margin-bottom: 20px;
+    .title {
+      font-size: 16px;
+      font-weight: 600;
+      padding-left: 10px;
+    }
+  }
+</style>

+ 200 - 0
src/views/supply/pickup/pickup_list.vue

@@ -0,0 +1,200 @@
+<template>
+  <div class="app-container">
+    <!-- 筛选条件 -->
+    <div class="screen-container">
+      <el-form ref="screenForm" :model="screenForm" label-width="100px" size="small" label-position="left">
+        <el-row :gutter="20">
+          <el-col :xs="24" :sm="12" :lg="6">
+            <el-form-item label="申请发货单号" prop="orderNum">
+              <el-input v-model="screenForm.orderNum" placeholder="请输入申请发货单号"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :lg="6">
+            <el-form-item label="申请人" prop="applyName">
+              <el-input v-model="screenForm.applyName" placeholder="请输入申请人"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :lg="6">
+            <el-form-item label="提货仓库" prop="warehouse">
+              <el-input v-model="screenForm.warehouse" placeholder="请输入提货仓库"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :lg="6">
+            <el-form-item label="提货日期" prop="date">
+              <el-date-picker
+                v-model="screenForm.date"
+                type="datetimerange"
+                range-separator="至"
+                style="width: 100%;"
+                value-format="yyyy-MM-dd HH:mm:ss"
+                start-placeholder="开始日期"
+                end-placeholder="结束日期">
+              </el-date-picker>
+            </el-form-item>
+          </el-col>
+          
+          <el-col :xs="24" :sm="24" :lg="24" class="tr">
+            <el-form-item label="">
+              <el-button size="small" @click="resetScreenForm">清空</el-button>
+              <el-button size="small" type="primary" @click="submitScreenForm">搜索</el-button>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+    </div>
+
+    <div class="mymain-container">
+      <div class="btn-group clearfix">
+        <div class="fr">
+          <ExportButton :exUrl="'admin/user/mch/export'" :exParams="exParams" />
+        </div>
+      </div>
+      <div class="table">
+        <el-table v-loading="listLoading" :data="dataList" element-loading-text="Loading" border fit highlight-current-row stripe>
+          <el-table-column align="center" label="状态" min-width="160" show-overflow-tooltip>
+            <template slot-scope="scope">
+              {{ scope.row.printNum ? '已打单':'未打单' }}
+            </template>
+          </el-table-column>
+          <el-table-column align="center" label="打单日期" prop="createTime" min-width="160" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="提货单号" prop="pickOrderNo" min-width="160" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="预约日期" prop="pickTime" min-width="160" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="提货时段" min-width="160" show-overflow-tooltip>
+            <template slot-scope="scope">
+              {{ scope.row.pickStartTime }} 至 {{ scope.row.pickEndTime }}
+            </template>
+          </el-table-column>
+          <el-table-column align="center" label="提货仓库" prop="stockName" min-width="160" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="提货方式" prop="pickType" min-width="160" show-overflow-tooltip>
+            <template slot-scope="scope">
+              {{ scope.row.pickType == '1' ? '自提':'物流快递' }}
+            </template>
+          </el-table-column>
+          <el-table-column align="center" label="发货单号" prop="aaa" min-width="160" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="单据日期" prop="aaa" min-width="100" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="发货申请单号" prop="invoiceOrderNo" min-width="100" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="工程编号" prop="projectNumber" min-width="100" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="产品编号" prop="productNumber" min-width="100" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="产品名称" prop="productName" min-width="100" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="规格型号" prop="specification" min-width="100" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="提货总数量" prop="number" min-width="100" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="总体积" prop="aaa" min-width="100" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="备注" prop="remark" min-width="100" show-overflow-tooltip></el-table-column>
+        </el-table>
+      </div>
+    </div>
+    <div class="pagination clearfix">
+      <div class="fr">
+        <el-pagination
+          @size-change="handleSizeChange"
+          @current-change="handleCurrentChange"
+          :current-page="currentPage"
+          :page-sizes="[10, 20, 30, 50]"
+          :page-size="10"
+          layout="total, sizes, prev, pager, next, jumper"
+          :total="listTotal">
+        </el-pagination>
+      </div>
+    </div>
+
+  </div>
+</template>
+
+<script>
+import { getPickupList } from "@/api/supply/pickup";
+
+export default {
+  data() {
+    return {
+      currentPage: 1, // 当前页码
+      pageSize: 10, // 每页数量
+      listTotal: 0, // 列表总数
+      dataList: null, // 列表数据
+      listLoading: false, // 列表加载loading
+      screenForm: { // 筛选表单数据
+        orderNum: '',
+        applyName: '',
+        warehouse: '',
+        date: '',
+      },
+    }
+  },
+
+  computed: {
+    exParams() {
+      return {
+        shipOrderNo: this.screenForm.orderNum,
+        createBy: this.screenForm.applyName,
+        stockName: this.screenForm.warehouse,
+        pickStartTime: this.screenForm.date ? this.screenForm.date[0] : '',
+        pickEndTime: this.screenForm.date ? this.screenForm.date[1] : '',
+      }
+    },
+  },
+
+  created() {
+    this.getList();
+  },
+
+  methods: {
+    // 查询按钮权限
+    checkBtnRole(value) {
+      // let btnRole = this.$route.meta.roles;
+      // if(!btnRole) {return true}
+      // let index = btnRole.indexOf(value);
+      // return index >= 0;
+      return true
+    },
+
+    // 查询列表
+    getList() {
+      this.listLoading = true;
+
+      let params = {
+        pageNum: this.currentPage,
+        pageSize: this.pageSize,
+        shipOrderNo: this.screenForm.orderNum,
+        createBy: this.screenForm.applyName,
+        stockName: this.screenForm.warehouse,
+        pickStartTime: this.screenForm.date ? this.screenForm.date[0] : '',
+        pickEndTime: this.screenForm.date ? this.screenForm.date[1] : '',
+      };
+      getPickupList(params).then((res) => {
+        this.dataList = res.data.records;
+        this.listTotal = res.data.total;
+        this.listLoading = false;
+      })
+    },
+
+    // 提交筛选表单
+    submitScreenForm() {
+      this.currentPage = 1;
+      this.getList();
+    },
+
+    // 重置筛选表单
+    resetScreenForm() {
+      this.$refs.screenForm.resetFields();
+      this.currentPage = 1;
+      this.getList();
+    },
+
+    // 更改每页数量
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = 1;
+      this.getList();
+    },
+
+    // 更改当前页
+    handleCurrentChange(val) {
+      this.currentPage = val;
+      this.getList();
+    },
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+
+</style>

+ 166 - 0
src/views/supply/pickup/statistics.vue

@@ -0,0 +1,166 @@
+<template>
+  <div class="app-container">
+    <div class="main-title">
+      <div class="title">仓库预约统计看板</div>
+    </div>
+
+    <div>
+      <el-form ref="screenForm" :model="screenForm" label-width="70px" size="small" label-position="left">
+        <el-form-item label="统计日期" prop="date">
+          <el-date-picker
+            v-model="screenForm.date"
+            type="datetimerange"
+            range-separator="至"
+            value-format="yyyy-MM-dd HH:mm:ss"
+            start-placeholder="开始日期"
+            end-placeholder="结束日期">
+          </el-date-picker>
+        </el-form-item>
+      </el-form>
+    </div>
+
+    <div class="card-container">
+      <el-row :gutter="20">
+        <el-col :span="8">
+          <el-card shadow="hover">
+            <div class="title">每日预约出货单</div>
+            <div class="num"><span>123</span>(单)</div>
+          </el-card>
+        </el-col>
+        <el-col :span="8">
+          <el-card shadow="hover">
+            <div class="title">每日提货货品种类</div>
+            <div class="num"><span>123</span>(种)</div>
+          </el-card>
+        </el-col>
+        <el-col :span="8">
+          <el-card shadow="hover">
+            <div class="title">每日预约经销商</div>
+            <div class="num"><span>123</span>(家)</div>
+          </el-card>
+        </el-col>
+        <el-col :span="8">
+          <el-card shadow="hover">
+            <div class="title">每日提货经销商</div>
+            <div class="num"><span>123</span>(家)</div>
+          </el-card>
+        </el-col>
+        <el-col :span="8">
+          <el-card shadow="hover">
+            <div class="title">每日出库货品种类</div>
+            <div class="num"><span>123</span>(种)</div>
+          </el-card>
+        </el-col>
+        <el-col :span="8">
+          <el-card shadow="hover">
+            <div class="title">每日出库货品台数</div>
+            <div class="num"><span>123</span>(台)</div>
+          </el-card>
+        </el-col>
+        <el-col :span="8">
+          <el-card shadow="hover">
+            <div class="title">每日出库家用空调货品单数</div>
+            <div class="num"><span>123</span>(单)</div>
+          </el-card>
+        </el-col>
+        <el-col :span="8">
+          <el-card shadow="hover">
+            <div class="title">每日出库商用空调货品单数</div>
+            <div class="num"><span>123</span>(单)</div>
+          </el-card>
+        </el-col>
+        <el-col :span="8">
+          <el-card shadow="hover">
+            <div class="title">每日出库生活电器品单数</div>
+            <div class="num"><span>123</span>(单)</div>
+          </el-card>
+        </el-col>
+        <el-col :span="8">
+          <el-card shadow="hover">
+            <div class="title">每日出库家用空调货品台数</div>
+            <div class="num"><span>123</span>(台)</div>
+          </el-card>
+        </el-col>
+        <el-col :span="8">
+          <el-card shadow="hover">
+            <div class="title">每日出库商用空调货品台数</div>
+            <div class="num"><span>123</span>(台)</div>
+          </el-card>
+        </el-col>
+        <el-col :span="8">
+          <el-card shadow="hover">
+            <div class="title">每日出库生活电器品台数</div>
+            <div class="num"><span>123</span>(台)</div>
+          </el-card>
+        </el-col>
+        <el-col :span="8">
+          <el-card shadow="hover">
+            <div class="title">每日出库家用空调货品金额</div>
+            <div class="num"><span>123</span>(元)</div>
+          </el-card>
+        </el-col>
+        <el-col :span="8">
+          <el-card shadow="hover">
+            <div class="title">每日出库商用空调货品金额</div>
+            <div class="num"><span>123</span>(元)</div>
+          </el-card>
+        </el-col>
+        <el-col :span="8">
+          <el-card shadow="hover">
+            <div class="title">每日出库生活电器品金额</div>
+            <div class="num"><span>123</span>(元)</div>
+          </el-card>
+        </el-col>
+      </el-row>
+    </div>
+
+
+  </div>
+</template>
+
+<script>
+export default {
+  data() {
+    return {
+      screenForm: { // 筛选表单数据
+        date: '',
+      },
+    }
+  },
+}
+</script>
+
+<style lang="scss" scoped>
+  .main-title {
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    height: 60px;
+    border-bottom: 1px solid #DCDFE6;
+    margin-bottom: 20px;
+    .title {
+      font-size: 16px;
+      font-weight: 600;
+      padding-left: 10px;
+    }
+  }
+  .card-container {
+    margin-top: 40px;
+    .el-col {
+      margin-bottom: 20px;
+    }
+    .title {
+      font-size: 14px;
+    }
+    .num {
+      text-align: center;
+      margin-top: 20px;
+      font-size: 12px;
+      span {
+        font-size: 20px;
+        color: #409EFF;
+        font-weight: 600;
+      }
+    }
+  }
+</style>

+ 194 - 0
src/views/supply/pickup/sum_list.vue

@@ -0,0 +1,194 @@
+<template>
+  <div class="app-container">
+    <!-- 筛选条件 -->
+    <div class="screen-container">
+      <el-form ref="screenForm" :model="screenForm" label-width="100px" size="small" label-position="left">
+        <el-row :gutter="20">
+          <el-col :xs="24" :sm="12" :lg="6">
+            <el-form-item label="申请发货单号" prop="orderNum">
+              <el-input v-model="screenForm.orderNum" placeholder="请输入申请发货单号"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :lg="6">
+            <el-form-item label="经销商名称" prop="jxsName">
+              <el-input v-model="screenForm.jxsName" placeholder="请输入经销商名称"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :lg="6">
+            <el-form-item label="经销商编码" prop="jxsNum">
+              <el-input v-model="screenForm.jxsNum" placeholder="请输入经销商编码"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :lg="6">
+            <el-form-item label="仓库" prop="warehouse">
+              <el-input v-model="screenForm.warehouse" placeholder="请输入仓库"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :lg="6">
+            <el-form-item label="申请日期" prop="date">
+              <el-date-picker
+                v-model="screenForm.date"
+                type="datetimerange"
+                range-separator="至"
+                style="width: 100%;"
+                value-format="yyyy-MM-dd HH:mm:ss"
+                start-placeholder="开始日期"
+                end-placeholder="结束日期">
+              </el-date-picker>
+            </el-form-item>
+          </el-col>
+          
+          <el-col :xs="24" :sm="12" :lg="18" class="tr">
+            <el-form-item label="">
+              <el-button size="small" @click="resetScreenForm">清空</el-button>
+              <el-button size="small" type="primary" @click="submitScreenForm">搜索</el-button>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+    </div>
+
+    <div class="mymain-container">
+      <div class="table">
+        <el-table v-loading="listLoading" :data="dataList" element-loading-text="Loading" border fit highlight-current-row stripe>
+          <el-table-column align="center" label="状态" min-width="160" show-overflow-tooltip>
+            <template slot-scope="scope">
+              {{ scope.row.printNum ? '已打单':'未打单' }}
+            </template>
+          </el-table-column>
+          <el-table-column align="center" label="申请发货单号" prop="aaa" min-width="160" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="申请日期" prop="createTime" min-width="160" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="发货单号" prop="aaa" min-width="160" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="提货单号" prop="pickOrderNo" min-width="160" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="经销商名称" prop="customerName" min-width="160" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="经销商编码" prop="customerNumber" min-width="160" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="发货仓库" prop="stockName" min-width="160" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="提货方式" prop="pickType" min-width="160" show-overflow-tooltip>
+            <template slot-scope="scope">
+              {{ scope.row.pickType == '1' ? '自提':'物流快递' }}
+            </template>
+          </el-table-column>
+          <el-table-column align="center" label="提货日期" prop="pickTime" min-width="100" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="提货时段" min-width="160" show-overflow-tooltip>
+            <template slot-scope="scope">
+              {{ scope.row.pickStartTime }} 至 {{ scope.row.pickEndTime }}
+            </template>
+          </el-table-column>
+          <el-table-column align="center" label="产品编号" prop="productNumber" min-width="100" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="产品名称" prop="productName" min-width="100" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="规格型号" prop="specification" min-width="100" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="提货总数量" prop="number" min-width="100" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="总体积" prop="aaa" min-width="100" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="备注" prop="remark" min-width="100" show-overflow-tooltip></el-table-column>
+        </el-table>
+      </div>
+    </div>
+    <div class="pagination clearfix">
+      <div class="fr">
+        <el-pagination
+          @size-change="handleSizeChange"
+          @current-change="handleCurrentChange"
+          :current-page="currentPage"
+          :page-sizes="[10, 20, 30, 50]"
+          :page-size="10"
+          layout="total, sizes, prev, pager, next, jumper"
+          :total="listTotal">
+        </el-pagination>
+      </div>
+    </div>
+
+  </div>
+</template>
+
+<script>
+import { getPickupList } from "@/api/supply/pickup";
+
+export default {
+  data() {
+    return {
+      currentPage: 1, // 当前页码
+      pageSize: 10, // 每页数量
+      listTotal: 0, // 列表总数
+      dataList: null, // 列表数据
+      listLoading: false, // 列表加载loading
+      screenForm: { // 筛选表单数据
+        orderNum: '',
+        jxsName: '',
+        jxsNum: '',
+        warehouse: '',
+        date: '',
+      },
+    }
+  },
+
+  computed: {
+    
+  },
+
+  created() {
+    this.getList();
+  },
+
+  methods: {
+    // 查询按钮权限
+    checkBtnRole(value) {
+      // let btnRole = this.$route.meta.roles;
+      // if(!btnRole) {return true}
+      // let index = btnRole.indexOf(value);
+      // return index >= 0;
+      return true
+    },
+
+    // 查询列表
+    getList() {
+      this.listLoading = true;
+
+      let params = {
+        pageNum: this.currentPage,
+        pageSize: this.pageSize,
+        shipOrderNo: this.screenForm.orderNum,
+        customerName: this.screenForm.jxsName,
+        customerNumber: this.screenForm.jxsNum,
+        stockName: this.screenForm.warehouse,
+        startTime: this.screenForm.date ? this.screenForm.date[0] : '',
+        endTime: this.screenForm.date ? this.screenForm.date[1] : '',
+      };
+      getPickupList(params).then((res) => {
+        this.dataList = res.data.records;
+        this.listTotal = res.data.total;
+        this.listLoading = false;
+      })
+    },
+
+    // 提交筛选表单
+    submitScreenForm() {
+      this.currentPage = 1;
+      this.getList();
+    },
+
+    // 重置筛选表单
+    resetScreenForm() {
+      this.$refs.screenForm.resetFields();
+      this.currentPage = 1;
+      this.getList();
+    },
+
+    // 更改每页数量
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = 1;
+      this.getList();
+    },
+
+    // 更改当前页
+    handleCurrentChange(val) {
+      this.currentPage = val;
+      this.getList();
+    },
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+
+</style>

+ 5 - 0
src/views/supply/purchase.vue

@@ -0,0 +1,5 @@
+<template>
+  <div>
+    <router-view />
+  </div>
+</template>

+ 168 - 0
src/views/supply/purchase/components/enter_detail.vue

@@ -0,0 +1,168 @@
+<template>
+  <div class="detail-container">
+    <el-page-header @back="goBack" content="详情"></el-page-header>
+
+    <div id="printData">
+      <div class="main-title">
+        <div class="title">入库单</div>
+      </div>
+
+      <div class="diy-form-1">
+        <el-row :gutter="20">
+          <el-col :span="8" class="item">
+            <div class="label">入库单号:</div>
+            <div class="value">212212121212121</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">入库日期:</div>
+            <div class="value">2022-12-22</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">仓库:</div>
+            <div class="value">212212121212121</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">供货单位:</div>
+            <div class="value">212212121212121</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">审核日期:</div>
+            <div class="value">2022-12-22</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">备注:</div>
+            <div class="value">212212121212121</div>
+          </el-col>
+        </el-row>
+      </div>
+
+      <div class="diy-table-2">
+        <div class="head">
+          <el-row :gutter="20">
+            <el-col :span="2">序号</el-col>
+            <el-col :span="4">产品编号</el-col>
+            <el-col :span="8">产品名称</el-col>
+            <el-col :span="2">规格型号</el-col>
+            <el-col :span="2">内机编码</el-col>
+            <el-col :span="2">外机编码</el-col>
+            <el-col :span="2">单位</el-col>
+            <el-col :span="2">数量</el-col>
+          </el-row>
+        </div>
+        <div class="body">
+          <el-row v-for="(item, index) in goodsList" :key="item.goodsId" :gutter="20">
+            <el-col :span="2">{{ index + 1 }}</el-col>
+            <el-col :span="4">{{ item.goodsId || 0 }}</el-col>
+            <el-col :span="8">{{ item.goodsName || 0 }}</el-col>
+            <el-col :span="2">{{ item.salesUnit || 0 }}</el-col>
+            <el-col :span="2">{{ item.price || 0 }}</el-col>
+            <el-col :span="2">{{ item.saleQty || 0 }}</el-col>
+            <el-col :span="2">{{ item.saleValue || 0 }}</el-col>
+            <el-col :span="2">{{ item.saleValue || 0 }}</el-col>
+          </el-row>
+        </div>
+        <div class="foot">
+          <el-row :gutter="20">
+            <el-col :span="24">合计</el-col>
+          </el-row>
+        </div>
+      </div>
+
+      <div class="diy-form-1">
+        <el-row :gutter="20">
+          <el-col :span="8" class="item">
+            <div class="label">制单人:</div>
+            <div class="value">张三</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">审核人:</div>
+            <div class="value">李四</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">现存量:</div>
+            <div class="value">200</div>
+          </el-col>
+        </el-row>
+      </div>
+      
+    </div>
+    
+    <div class="page-footer">
+      <div class="footer" :class="classObj">
+        <el-button  type="primary" icon="el-icon-printer" v-print="printObj">打 印</el-button>
+        <el-popconfirm title="确定关闭吗?" @onConfirm="goBack" style="margin-left: 10px;">
+          <el-button slot="reference">关 闭</el-button>
+        </el-popconfirm>
+      </div>
+    </div>
+
+  </div>
+</template>
+
+<script>
+import print from 'vue-print-nb'
+import { getList } from "@/api/supply/purchase";
+
+export default {
+  name: 'EnterDetail',
+  componentName: 'EnterDetail',
+  props: ['listItem'],
+  directives: {
+    print
+  },
+  data() {
+    return {
+      printObj: {
+        id: 'printData'
+      },
+      goodsList: [{
+        goodsId: 1,
+      }]
+    }
+  },
+
+  computed: {
+    sidebar() {
+      return this.$store.state.app.sidebar
+    },
+    classObj() {
+      return {
+        hideSidebar: !this.sidebar.opened,
+        openSidebar: this.sidebar.opened
+      }
+    },
+  },
+
+  created() {
+
+  },
+
+  methods: {
+    // 返回列表
+    goBack() {
+      this.$emit('backListFormDetail');
+    },
+  }
+}
+</script>
+
+<style scoped lang="scss">
+  .detail-container {
+    width: 100%;
+    height: 100%;
+  }
+  .main-title {
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    margin-top: 30px;
+    height: 60px;
+    border-bottom: 1px solid #DCDFE6;
+    margin-bottom: 20px;
+    .title {
+      font-size: 16px;
+      font-weight: 600;
+      padding-left: 10px;
+    }
+  }
+</style>

+ 200 - 0
src/views/supply/purchase/components/purchase_detail.vue

@@ -0,0 +1,200 @@
+<template>
+  <div class="detail-container">
+    <el-page-header @back="goBack" content="详情"></el-page-header>
+
+    <div id="printData">
+      <div class="main-title">
+        <div class="title">入库单</div>
+      </div>
+
+      <div class="diy-form-1">
+        <el-row :gutter="20">
+          <el-col :span="8" class="item">
+            <div class="label">业务类型:</div>
+            <div class="value">212212121212121</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">订单日期:</div>
+            <div class="value">2022-12-22</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">订单编号:</div>
+            <div class="value">212212121212121</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">采购类型:</div>
+            <div class="value">212212121212121</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">供应商:</div>
+            <div class="value">2022-12-22</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">部门:</div>
+            <div class="value">212212121212121</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">业务员:</div>
+            <div class="value">212212121212121</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">税率:</div>
+            <div class="value">212212121212121</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">付款条件:</div>
+            <div class="value">212212121212121</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">币种:</div>
+            <div class="value">212212121212121</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">任务日期:</div>
+            <div class="value">212212121212121</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">备注:</div>
+            <div class="value">212212121212121</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">登录编号:</div>
+            <div class="value">212212121212121</div>
+          </el-col>
+        </el-row>
+      </div>
+
+      <div class="diy-table-2">
+        <div class="head">
+          <el-row :gutter="20">
+            <el-col :span="2">序号</el-col>
+            <el-col :span="4">产品编号</el-col>
+            <el-col :span="8">产品名称</el-col>
+            <el-col :span="2">规格型号</el-col>
+            <el-col :span="2">内机编码</el-col>
+            <el-col :span="2">外机编码</el-col>
+            <el-col :span="2">单位</el-col>
+            <el-col :span="2">数量</el-col>
+          </el-row>
+        </div>
+        <div class="body">
+          <el-row v-for="(item, index) in goodsList" :key="item.goodsId" :gutter="20">
+            <el-col :span="2">{{ index + 1 }}</el-col>
+            <el-col :span="4">{{ item.goodsId || 0 }}</el-col>
+            <el-col :span="8">{{ item.goodsName || 0 }}</el-col>
+            <el-col :span="2">{{ item.salesUnit || 0 }}</el-col>
+            <el-col :span="2">{{ item.price || 0 }}</el-col>
+            <el-col :span="2">{{ item.saleQty || 0 }}</el-col>
+            <el-col :span="2">{{ item.saleValue || 0 }}</el-col>
+            <el-col :span="2">{{ item.saleValue || 0 }}</el-col>
+          </el-row>
+        </div>
+        <div class="foot">
+          <el-row :gutter="20">
+            <el-col :span="24">合计</el-col>
+          </el-row>
+        </div>
+      </div>
+
+      <div class="diy-form-1">
+        <el-row :gutter="20">
+          <el-col :span="8" class="item">
+            <div class="label">制单人:</div>
+            <div class="value">张三</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">审核人:</div>
+            <div class="value">李四</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">变更人:</div>
+            <div class="value">李四</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">现存量:</div>
+            <div class="value">200</div>
+          </el-col>
+        </el-row>
+      </div>
+      
+    </div>
+    
+    <div class="page-footer">
+      <div class="footer" :class="classObj">
+        <el-button  type="primary" icon="el-icon-printer" v-print="printObj">打 印</el-button>
+        <el-popconfirm title="确定关闭吗?" @onConfirm="goBack" style="margin-left: 10px;">
+          <el-button slot="reference">关 闭</el-button>
+        </el-popconfirm>
+      </div>
+    </div>
+
+  </div>
+</template>
+
+<script>
+import print from 'vue-print-nb'
+import { getList } from "@/api/supply/purchase";
+
+export default {
+  name: 'PurchaseDetail',
+  componentName: 'PurchaseDetail',
+  props: ['listItem'],
+  directives: {
+    print
+  },
+  data() {
+    return {
+      printObj: {
+        id: 'printData'
+      },
+      goodsList: [{
+        goodsId: 1,
+      }]
+    }
+  },
+
+  computed: {
+    sidebar() {
+      return this.$store.state.app.sidebar
+    },
+    classObj() {
+      return {
+        hideSidebar: !this.sidebar.opened,
+        openSidebar: this.sidebar.opened
+      }
+    },
+  },
+
+  created() {
+
+  },
+
+  methods: {
+    // 返回列表
+    goBack() {
+      this.$emit('backListFormDetail');
+    },
+  }
+}
+</script>
+
+<style scoped lang="scss">
+  .detail-container {
+    width: 100%;
+    height: 100%;
+  }
+  .main-title {
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    margin-top: 30px;
+    height: 60px;
+    border-bottom: 1px solid #DCDFE6;
+    margin-bottom: 20px;
+    .title {
+      font-size: 16px;
+      font-weight: 600;
+      padding-left: 10px;
+    }
+  }
+</style>

+ 245 - 0
src/views/supply/purchase/enter_list.vue

@@ -0,0 +1,245 @@
+<template>
+  <div class="app-container">
+    <div v-show="!isShowDetail">
+      <!-- 筛选条件 -->
+      <div class="screen-container">
+        <el-form ref="screenForm" :model="screenForm" label-width="90px" size="small" label-position="left">
+          <el-row :gutter="20">
+            <el-col :xs="24" :sm="12" :lg="6">
+              <el-form-item label="入库单号" prop="orderNum">
+                <el-input v-model="screenForm.orderNum" placeholder="请输入入库单号"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="12" :lg="6">
+              <el-form-item label="存货名称" prop="chName">
+                <el-input v-model="screenForm.chName" placeholder="请输入存货名称"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="12" :lg="6">
+              <el-form-item label="存货编码" prop="chNum">
+                <el-input v-model="screenForm.chNum" placeholder="请输入存货编码"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="12" :lg="6">
+              <el-form-item label="入库日期" prop="date">
+                <el-date-picker
+                  v-model="screenForm.date"
+                  type="datetimerange"
+                  range-separator="至"
+                  style="width: 100%;"
+                  value-format="yyyy-MM-dd HH:mm:ss"
+                  start-placeholder="开始日期"
+                  end-placeholder="结束日期">
+                </el-date-picker>
+              </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="12" :lg="6">
+              <el-form-item label="供货单位" prop="company">
+                <el-input v-model="screenForm.company" placeholder="请输入供货单位"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="12" :lg="6">
+              <el-form-item label="厂对应单号" prop="factoryNum">
+                <el-input v-model="screenForm.factoryNum" placeholder="请输入厂对应单号"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="12" :lg="6">
+              <el-form-item label="厂产品代码" prop="factoryCode">
+                <el-input v-model="screenForm.factoryCode" placeholder="请输入厂产品代码"></el-input>
+              </el-form-item>
+            </el-col>
+            
+            <el-col :xs="24" :sm="12" :lg="6" class="tr">
+              <el-form-item label="">
+                <el-button size="small" @click="resetScreenForm">清空</el-button>
+                <el-button size="small" type="primary" @click="submitScreenForm">搜索</el-button>
+              </el-form-item>
+            </el-col>
+          </el-row>
+        </el-form>
+      </div>
+
+      <div class="mymain-container">
+        <div class="btn-group clearfix">
+          <div class="fr">
+            <ExportButton :exUrl="'admin/user/mch/export'" :exParams="exParams" />
+          </div>
+        </div>
+        <div class="table">
+          <el-table v-loading="listLoading" :data="dataList" element-loading-text="Loading" border fit highlight-current-row stripe>
+            <el-table-column align="center" label="入库单号" prop="aaa" min-width="160" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="入库日期" prop="aaa" min-width="160" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="仓库" prop="aaa" min-width="160" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="供货单位" prop="aaa" min-width="160" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="审核日期" prop="aaa" min-width="160" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="备注" prop="aaa" min-width="160" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="厂对应单号" prop="aaa" min-width="160" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="厂产品代码" prop="aaa" min-width="160" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="存货编码" prop="aaa" min-width="100" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="存货名称" prop="aaa" min-width="100" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="规格型号" prop="aaa" min-width="100" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="主计量" prop="aaa" min-width="100" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="数量" prop="aaa" min-width="100" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="原币含税单价" prop="aaa" min-width="100" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="原币金额" prop="aaa" min-width="100" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="原币税额" prop="aaa" min-width="100" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="原币价税合计" prop="aaa" min-width="100" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="税率" prop="aaa" min-width="100" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="制单人" prop="aaa" min-width="100" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="审核人" prop="aaa" min-width="100" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="现存量" prop="aaa" min-width="100" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="操作" width="120" fixed="right">
+              <template slot-scope="scope">
+                <el-button type="text" @click="toDetail('detail', scope.row)">详情</el-button>
+              </template>
+            </el-table-column>
+          </el-table>
+        </div>
+      </div>
+      <div class="pagination clearfix">
+        <div class="fr">
+          <el-pagination
+            @size-change="handleSizeChange"
+            @current-change="handleCurrentChange"
+            :current-page="currentPage"
+            :page-sizes="[10, 20, 30, 50]"
+            :page-size="10"
+            layout="total, sizes, prev, pager, next, jumper"
+            :total="listTotal">
+          </el-pagination>
+        </div>
+      </div>
+    </div>
+    
+    <EnterDetail :listItem="queryItem" v-if="isShowDetail" @backListFormDetail="backList" />
+
+  </div>
+</template>
+
+<script>
+import { COMMON_SELECT } from '@/utils/select_data'
+import { getList } from "@/api/supply/purchase";
+import EnterDetail from "@/views/supply/purchase/components/enter_detail";
+
+export default {
+  components: {
+    EnterDetail,
+  },
+  data() {
+    return {
+      currentPage: 1, // 当前页码
+      pageSize: 10, // 每页数量
+      listTotal: 0, // 列表总数
+      dataList: null, // 列表数据
+      listLoading: false, // 列表加载loading
+      screenForm: { // 筛选表单数据
+        orderNum: '',
+        jxsName: '',
+        chName: '',
+        model: '',
+        date: '',
+        jxsNum: '',
+        status: '',
+      },
+      select_status: [ // 筛选字段 - 状态
+        { label: '正常', value: true },
+        { label: '冻结', value: false }
+      ],
+
+      jumpType: '',
+      queryItem: {},
+    }
+  },
+
+  computed: {
+    exParams() {
+      return {
+        userName: this.screenForm.account,
+        nickName: this.screenForm.nickName,
+        linkPhone: this.screenForm.phone,
+        email: this.screenForm.email,
+        status: this.screenForm.status,
+      }
+    },
+    isShowDetail() {
+      return this.queryItem.hasOwnProperty('adminUserId') && this.jumpType == 'detail';
+    },
+  },
+
+  created() {
+    this.getList();
+  },
+
+  methods: {
+    // 查询按钮权限
+    checkBtnRole(value) {
+      // let btnRole = this.$route.meta.roles;
+      // if(!btnRole) {return true}
+      // let index = btnRole.indexOf(value);
+      // return index >= 0;
+      return true
+    },
+
+    // 查询列表
+    getList() {
+      this.listLoading = true;
+
+      let params = {
+        pageNum: this.currentPage,
+        pageSize: this.pageSize,
+        userName: this.screenForm.account,
+        nickName: this.screenForm.nickName,
+        linkPhone: this.screenForm.phone,
+        email: this.screenForm.email,
+        status: this.screenForm.status,
+      };
+      getList(params).then((res) => {
+        this.dataList = res.data.records;
+        this.listTotal = res.data.total;
+        this.listLoading = false;
+      })
+    },
+
+    // 提交筛选表单
+    submitScreenForm() {
+      this.currentPage = 1;
+      this.getList();
+    },
+
+    // 重置筛选表单
+    resetScreenForm() {
+      this.$refs.screenForm.resetFields();
+      this.currentPage = 1;
+      this.getList();
+    },
+
+    // 更改每页数量
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = 1;
+      this.getList();
+    },
+
+    // 更改当前页
+    handleCurrentChange(val) {
+      this.currentPage = val;
+      this.getList();
+    },
+
+    // 进入详情
+    toDetail(type, item) {
+      this.jumpType = type;
+      this.queryItem = item;
+    },
+
+    backList() {
+      this.jumpType = '';
+      this.queryItem = {};
+    },
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+
+</style>

+ 192 - 0
src/views/supply/purchase/plan_list.vue

@@ -0,0 +1,192 @@
+<template>
+  <div class="app-container">
+    <!-- 筛选条件 -->
+    <div class="screen-container">
+      <el-form ref="screenForm" :model="screenForm" label-width="100px" size="small" label-position="left">
+        <el-row :gutter="20">
+          <el-col :xs="24" :sm="12" :lg="6">
+            <el-form-item label="采购计划单号" prop="orderNum">
+              <el-input v-model="screenForm.orderNum" placeholder="请输入采购计划单号"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :lg="6">
+            <el-form-item label="产品名称" prop="chName">
+              <el-input v-model="screenForm.chName" placeholder="请输入产品名称"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :lg="6">
+            <el-form-item label="产品编码" prop="chName">
+              <el-input v-model="screenForm.chName" placeholder="请输入产品编码"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :lg="6">
+            <el-form-item label="规格型号" prop="chName">
+              <el-input v-model="screenForm.chName" placeholder="请输入规格型号"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :lg="6">
+            <el-form-item label="品类" prop="status">
+              <el-select v-model="screenForm.status" placeholder="全部">
+                <el-option label="全部" value=""></el-option>
+                <el-option :label="item.label" :value="item.value" v-for="(item, index) in select_status" :key="index"></el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+          
+          <el-col :xs="24" :sm="12" :lg="18" class="tr">
+            <el-form-item label="">
+              <el-button size="small" @click="resetScreenForm">清空</el-button>
+              <el-button size="small" type="primary" @click="submitScreenForm">搜索</el-button>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+    </div>
+
+    <div class="mymain-container">
+      <div class="btn-group clearfix">
+        <div class="fr">
+          <ExportButton :exUrl="'admin/user/mch/export'" :exParams="exParams" />
+        </div>
+      </div>
+      <div class="table">
+        <el-table v-loading="listLoading" :data="dataList" element-loading-text="Loading" border fit highlight-current-row stripe>
+          <el-table-column align="center" label="单据号" prop="aaa" min-width="160" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="销售类型" prop="aaa" min-width="160" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="产品编码" prop="aaa" min-width="160" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="产品名称" prop="aaa" min-width="160" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="规格型号" prop="aaa" min-width="160" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="计量单位" prop="aaa" min-width="160" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="数量" prop="aaa" min-width="160" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="单价" prop="aaa" min-width="160" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="金额" prop="aaa" min-width="100" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="状态" prop="aaa" min-width="100" show-overflow-tooltip></el-table-column>
+        </el-table>
+      </div>
+    </div>
+    <div class="pagination clearfix">
+      <div class="fr">
+        <el-pagination
+          @size-change="handleSizeChange"
+          @current-change="handleCurrentChange"
+          :current-page="currentPage"
+          :page-sizes="[10, 20, 30, 50]"
+          :page-size="10"
+          layout="total, sizes, prev, pager, next, jumper"
+          :total="listTotal">
+        </el-pagination>
+      </div>
+    </div>
+
+  </div>
+</template>
+
+<script>
+import { COMMON_SELECT } from '@/utils/select_data'
+import { getList } from "@/api/supply/purchase";
+
+export default {
+  data() {
+    return {
+      currentPage: 1, // 当前页码
+      pageSize: 10, // 每页数量
+      listTotal: 0, // 列表总数
+      dataList: null, // 列表数据
+      listLoading: false, // 列表加载loading
+      screenForm: { // 筛选表单数据
+        orderNum: '',
+        jxsName: '',
+        chName: '',
+        model: '',
+        date: '',
+        jxsNum: '',
+        status: '',
+      },
+      select_status: [ // 筛选字段 - 状态
+        { label: '正常', value: true },
+        { label: '冻结', value: false }
+      ],
+
+      jumpType: '',
+      queryItem: {},
+    }
+  },
+
+  computed: {
+    exParams() {
+      return {
+        userName: this.screenForm.account,
+        nickName: this.screenForm.nickName,
+        linkPhone: this.screenForm.phone,
+        email: this.screenForm.email,
+        status: this.screenForm.status,
+      }
+    },
+  },
+
+  created() {
+    this.getList();
+  },
+
+  methods: {
+    // 查询按钮权限
+    checkBtnRole(value) {
+      // let btnRole = this.$route.meta.roles;
+      // if(!btnRole) {return true}
+      // let index = btnRole.indexOf(value);
+      // return index >= 0;
+      return true
+    },
+
+    // 查询列表
+    getList() {
+      this.listLoading = true;
+
+      let params = {
+        pageNum: this.currentPage,
+        pageSize: this.pageSize,
+        userName: this.screenForm.account,
+        nickName: this.screenForm.nickName,
+        linkPhone: this.screenForm.phone,
+        email: this.screenForm.email,
+        status: this.screenForm.status,
+      };
+      getList(params).then((res) => {
+        this.dataList = res.data.records;
+        this.listTotal = res.data.total;
+        this.listLoading = false;
+      })
+    },
+
+    // 提交筛选表单
+    submitScreenForm() {
+      this.currentPage = 1;
+      this.getList();
+    },
+
+    // 重置筛选表单
+    resetScreenForm() {
+      this.$refs.screenForm.resetFields();
+      this.currentPage = 1;
+      this.getList();
+    },
+
+    // 更改每页数量
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = 1;
+      this.getList();
+    },
+
+    // 更改当前页
+    handleCurrentChange(val) {
+      this.currentPage = val;
+      this.getList();
+    },
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+
+</style>

+ 240 - 0
src/views/supply/purchase/purchase_list.vue

@@ -0,0 +1,240 @@
+<template>
+  <div class="app-container">
+    <div v-show="!isShowDetail">
+      <!-- 筛选条件 -->
+      <div class="screen-container">
+        <el-form ref="screenForm" :model="screenForm" label-width="90px" size="small" label-position="left">
+          <el-row :gutter="20">
+            <el-col :xs="24" :sm="12" :lg="6">
+              <el-form-item label="业务类型" prop="orderNum">
+                <el-input v-model="screenForm.orderNum" placeholder="请输入业务类型"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="12" :lg="6">
+              <el-form-item label="采购类型" prop="chName">
+                <el-input v-model="screenForm.chName" placeholder="请输入采购类型"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="12" :lg="6">
+              <el-form-item label="供应商" prop="chName">
+                <el-input v-model="screenForm.chName" placeholder="请输入供应商"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="12" :lg="6">
+              <el-form-item label="订单日期" prop="date">
+                <el-date-picker
+                  v-model="screenForm.date"
+                  type="datetimerange"
+                  range-separator="至"
+                  style="width: 100%;"
+                  value-format="yyyy-MM-dd HH:mm:ss"
+                  start-placeholder="开始日期"
+                  end-placeholder="结束日期">
+                </el-date-picker>
+              </el-form-item>
+            </el-col>
+            
+            <el-col :xs="24" :sm="24" :lg="24" class="tr">
+              <el-form-item label="">
+                <el-button size="small" @click="resetScreenForm">清空</el-button>
+                <el-button size="small" type="primary" @click="submitScreenForm">搜索</el-button>
+              </el-form-item>
+            </el-col>
+          </el-row>
+        </el-form>
+      </div>
+
+      <div class="mymain-container">
+        <div class="btn-group clearfix">
+          <div class="fr">
+            <ExportButton :exUrl="'admin/user/mch/export'" :exParams="exParams" />
+          </div>
+        </div>
+        <div class="table">
+          <el-table v-loading="listLoading" :data="dataList" element-loading-text="Loading" border fit highlight-current-row stripe>
+            <el-table-column align="center" label="业务类型" prop="aaa" min-width="160" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="订单日期" prop="aaa" min-width="160" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="订单编号" prop="aaa" min-width="160" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="采购类型" prop="aaa" min-width="160" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="供应商" prop="aaa" min-width="160" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="部门" prop="aaa" min-width="160" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="业务员" prop="aaa" min-width="160" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="税率" prop="aaa" min-width="160" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="付款条件" prop="aaa" min-width="100" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="币种" prop="aaa" min-width="100" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="任务日期" prop="aaa" min-width="100" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="备注" prop="aaa" min-width="100" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="登录编号" prop="aaa" min-width="100" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="厂对应单号" prop="aaa" min-width="100" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="存货编码" prop="aaa" min-width="100" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="存货名称" prop="aaa" min-width="100" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="规格型号" prop="aaa" min-width="100" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="主计量" prop="aaa" min-width="100" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="数量" prop="aaa" min-width="100" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="原币含税单价" prop="aaa" min-width="100" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="原币单价" prop="aaa" min-width="100" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="原币税额" prop="aaa" min-width="100" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="原币价税合计" prop="aaa" min-width="100" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="采购单价" prop="aaa" min-width="100" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="计划到货日期" prop="aaa" min-width="100" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="行关闭人" prop="aaa" min-width="100" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="预留" prop="aaa" min-width="100" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="制单人" prop="aaa" min-width="100" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="审核人" prop="aaa" min-width="100" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="变更人" prop="aaa" min-width="100" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="现存量" prop="aaa" min-width="100" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="操作" width="120" fixed="right">
+              <template slot-scope="scope">
+                <el-button type="text" @click="toDetail('detail', scope.row)">详情</el-button>
+              </template>
+            </el-table-column>
+          </el-table>
+        </div>
+      </div>
+      <div class="pagination clearfix">
+        <div class="fr">
+          <el-pagination
+            @size-change="handleSizeChange"
+            @current-change="handleCurrentChange"
+            :current-page="currentPage"
+            :page-sizes="[10, 20, 30, 50]"
+            :page-size="10"
+            layout="total, sizes, prev, pager, next, jumper"
+            :total="listTotal">
+          </el-pagination>
+        </div>
+      </div>
+    </div>
+    
+    <PurchaseDetail :listItem="queryItem" v-if="isShowDetail" @backListFormDetail="backList" />
+
+  </div>
+</template>
+
+<script>
+import { COMMON_SELECT } from '@/utils/select_data'
+import { getList } from "@/api/supply/purchase";
+import PurchaseDetail from "@/views/supply/purchase/components/purchase_detail";
+
+export default {
+  components: {
+    PurchaseDetail,
+  },
+  data() {
+    return {
+      currentPage: 1, // 当前页码
+      pageSize: 10, // 每页数量
+      listTotal: 0, // 列表总数
+      dataList: null, // 列表数据
+      listLoading: false, // 列表加载loading
+      screenForm: { // 筛选表单数据
+        orderNum: '',
+        jxsName: '',
+        chName: '',
+        model: '',
+        date: '',
+        jxsNum: '',
+        status: '',
+      },
+      select_status: [ // 筛选字段 - 状态
+        { label: '正常', value: true },
+        { label: '冻结', value: false }
+      ],
+
+      jumpType: '',
+      queryItem: {},
+    }
+  },
+
+  computed: {
+    exParams() {
+      return {
+        userName: this.screenForm.account,
+        nickName: this.screenForm.nickName,
+        linkPhone: this.screenForm.phone,
+        email: this.screenForm.email,
+        status: this.screenForm.status,
+      }
+    },
+    isShowDetail() {
+      return this.queryItem.hasOwnProperty('adminUserId') && this.jumpType == 'detail';
+    },
+  },
+
+  created() {
+    this.getList();
+  },
+
+  methods: {
+    // 查询按钮权限
+    checkBtnRole(value) {
+      // let btnRole = this.$route.meta.roles;
+      // if(!btnRole) {return true}
+      // let index = btnRole.indexOf(value);
+      // return index >= 0;
+      return true
+    },
+
+    // 查询列表
+    getList() {
+      this.listLoading = true;
+
+      let params = {
+        pageNum: this.currentPage,
+        pageSize: this.pageSize,
+        userName: this.screenForm.account,
+        nickName: this.screenForm.nickName,
+        linkPhone: this.screenForm.phone,
+        email: this.screenForm.email,
+        status: this.screenForm.status,
+      };
+      getList(params).then((res) => {
+        this.dataList = res.data.records;
+        this.listTotal = res.data.total;
+        this.listLoading = false;
+      })
+    },
+
+    // 提交筛选表单
+    submitScreenForm() {
+      this.currentPage = 1;
+      this.getList();
+    },
+
+    // 重置筛选表单
+    resetScreenForm() {
+      this.$refs.screenForm.resetFields();
+      this.currentPage = 1;
+      this.getList();
+    },
+
+    // 更改每页数量
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = 1;
+      this.getList();
+    },
+
+    // 更改当前页
+    handleCurrentChange(val) {
+      this.currentPage = val;
+      this.getList();
+    },
+
+    // 进入详情
+    toDetail(type, item) {
+      this.jumpType = type;
+      this.queryItem = item;
+    },
+
+    backList() {
+      this.jumpType = '';
+      this.queryItem = {};
+    },
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+
+</style>

+ 216 - 0
src/views/supply/purchase/sum_list.vue

@@ -0,0 +1,216 @@
+<template>
+  <div class="app-container">
+    <!-- 筛选条件 -->
+    <div class="screen-container">
+      <el-form ref="screenForm" :model="screenForm" label-width="100px" size="small" label-position="left">
+        <el-row :gutter="20">
+          <el-col :xs="24" :sm="12" :lg="6">
+            <el-form-item label="销售单号" prop="orderNum">
+              <el-input v-model="screenForm.orderNum" placeholder="请输入销售单号"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :lg="6">
+            <el-form-item label="销售类型" prop="chName">
+              <el-input v-model="screenForm.chName" placeholder="请输入销售类型"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :lg="6">
+            <el-form-item label="产品名称" prop="chName">
+              <el-input v-model="screenForm.chName" placeholder="请输入产品名称"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :lg="6">
+            <el-form-item label="产品编码" prop="chName">
+              <el-input v-model="screenForm.chName" placeholder="请输入产品编码"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :lg="6">
+            <el-form-item label="规格型号" prop="chName">
+              <el-input v-model="screenForm.chName" placeholder="请输入规格型号"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :lg="6">
+            <el-form-item label="品类" prop="status">
+              <el-select v-model="screenForm.status" placeholder="全部">
+                <el-option label="全部" value=""></el-option>
+                <el-option :label="item.label" :value="item.value" v-for="(item, index) in select_status" :key="index"></el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :lg="6">
+            <el-form-item label="经销商名称" prop="chName">
+              <el-input v-model="screenForm.chName" placeholder="请输入经销商名称"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :lg="6">
+            <el-form-item label="经销商编码" prop="chName">
+              <el-input v-model="screenForm.chName" placeholder="请输入经销商编码"></el-input>
+            </el-form-item>
+          </el-col>
+          
+          <el-col :xs="24" :sm="24" :lg="24" class="tr">
+            <el-form-item label="">
+              <el-button size="small" @click="resetScreenForm">清空</el-button>
+              <el-button size="small" type="primary" @click="submitScreenForm">搜索</el-button>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+    </div>
+
+    <div class="mymain-container">
+      <div class="btn-group clearfix">
+        <div class="fr">
+          <ExportButton :exUrl="'admin/user/mch/export'" :exParams="exParams" />
+        </div>
+      </div>
+      <div class="table">
+        <el-table v-loading="listLoading" :data="dataList" element-loading-text="Loading" border fit highlight-current-row stripe>
+          <el-table-column align="center" label="单据号" prop="aaa" min-width="160" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="订单类型" prop="aaa" min-width="160" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="销售类型" prop="aaa" min-width="160" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="产品编码" prop="aaa" min-width="160" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="产品名称" prop="aaa" min-width="160" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="规格型号" prop="aaa" min-width="160" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="计量单位" prop="aaa" min-width="160" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="数量" prop="aaa" min-width="160" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="单价" prop="aaa" min-width="160" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="金额" prop="aaa" min-width="100" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="经销商编码" prop="aaa" min-width="100" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="经销商名称" prop="aaa" min-width="100" show-overflow-tooltip></el-table-column>
+        </el-table>
+      </div>
+    </div>
+    <div class="pagination clearfix">
+      <div class="fr">
+        <el-pagination
+          @size-change="handleSizeChange"
+          @current-change="handleCurrentChange"
+          :current-page="currentPage"
+          :page-sizes="[10, 20, 30, 50]"
+          :page-size="10"
+          layout="total, sizes, prev, pager, next, jumper"
+          :total="listTotal">
+        </el-pagination>
+      </div>
+    </div>
+
+    <div class="">
+      <div>
+        <el-button size="small" type="primary">提 交</el-button>
+      </div>
+      <div style="margin-top: 10px; font-size: 14px; color: #666;">注:提交成功后,系统将自动生成采购计划订单</div>
+    </div>
+
+  </div>
+</template>
+
+<script>
+import { COMMON_SELECT } from '@/utils/select_data'
+import { getList } from "@/api/supply/purchase";
+
+export default {
+  data() {
+    return {
+      currentPage: 1, // 当前页码
+      pageSize: 10, // 每页数量
+      listTotal: 0, // 列表总数
+      dataList: null, // 列表数据
+      listLoading: false, // 列表加载loading
+      screenForm: { // 筛选表单数据
+        orderNum: '',
+        jxsName: '',
+        chName: '',
+        model: '',
+        date: '',
+        jxsNum: '',
+        status: '',
+      },
+      select_status: [ // 筛选字段 - 状态
+        { label: '正常', value: true },
+        { label: '冻结', value: false }
+      ],
+
+      jumpType: '',
+      queryItem: {},
+    }
+  },
+
+  computed: {
+    exParams() {
+      return {
+        userName: this.screenForm.account,
+        nickName: this.screenForm.nickName,
+        linkPhone: this.screenForm.phone,
+        email: this.screenForm.email,
+        status: this.screenForm.status,
+      }
+    },
+  },
+
+  created() {
+    this.getList();
+  },
+
+  methods: {
+    // 查询按钮权限
+    checkBtnRole(value) {
+      // let btnRole = this.$route.meta.roles;
+      // if(!btnRole) {return true}
+      // let index = btnRole.indexOf(value);
+      // return index >= 0;
+      return true
+    },
+
+    // 查询列表
+    getList() {
+      this.listLoading = true;
+
+      let params = {
+        pageNum: this.currentPage,
+        pageSize: this.pageSize,
+        userName: this.screenForm.account,
+        nickName: this.screenForm.nickName,
+        linkPhone: this.screenForm.phone,
+        email: this.screenForm.email,
+        status: this.screenForm.status,
+      };
+      getList(params).then((res) => {
+        this.dataList = res.data.records;
+        this.listTotal = res.data.total;
+        this.listLoading = false;
+      })
+    },
+
+    // 提交筛选表单
+    submitScreenForm() {
+      this.currentPage = 1;
+      this.getList();
+    },
+
+    // 重置筛选表单
+    resetScreenForm() {
+      this.$refs.screenForm.resetFields();
+      this.currentPage = 1;
+      this.getList();
+    },
+
+    // 更改每页数量
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = 1;
+      this.getList();
+    },
+
+    // 更改当前页
+    handleCurrentChange(val) {
+      this.currentPage = val;
+      this.getList();
+    },
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+
+</style>

+ 5 - 0
src/views/supply/reserve.vue

@@ -0,0 +1,5 @@
+<template>
+  <div>
+    <router-view />
+  </div>
+</template>

+ 185 - 0
src/views/supply/reserve/components/reserve_detail.vue

@@ -0,0 +1,185 @@
+<template>
+  <div class="detail-container">
+    <el-page-header @back="goBack" content="详情"></el-page-header>
+
+    <div id="printData">
+      <div class="main-title">
+        <div class="title">预留单信息</div>
+      </div>
+
+      <div class="diy-table-1">
+        <el-row>
+          <el-col :span="24" class="item">
+            <div class="label">关联单据:</div>
+            <div class="value">{{detailData.billNo}}</div>
+          </el-col>
+          <el-col :span="6" class="item">
+            <div class="label">单据编号:</div>
+            <div class="value">{{detailData.billNo}}</div>
+          </el-col>
+          <el-col :span="6" class="item">
+            <div class="label">单据日期:</div>
+            <div class="value">{{detailData.fdate}}</div>
+          </el-col>
+          <el-col :span="6" class="item">
+            <div class="label">货品名称:</div>
+            <div class="value">{{detailData.srcStockId}}</div>
+          </el-col>
+          <el-col :span="6" class="item">
+            <div class="label">类型:</div>
+            <div class="value">{{detailData.destStockId}}</div>
+          </el-col>
+          <el-col :span="6" class="item">
+            <div class="label">货品编码:</div>
+            <div class="value">{{detailData.approveDate}}</div>
+          </el-col>
+          <el-col :span="6" class="item">
+            <div class="label">规格型号:</div>
+            <div class="value">{{detailData.approverId}}</div>
+          </el-col>
+          <el-col :span="6" class="item">
+            <div class="label">计量单位:</div>
+            <div class="value">{{detailData.approverId}}</div>
+          </el-col>
+          <el-col :span="6" class="item">
+            <div class="label">状态:</div>
+            <div class="value">{{detailData.approverId}}</div>
+          </el-col>
+          <el-col :span="6" class="item">
+            <div class="label">制单人:</div>
+            <div class="value">{{detailData.approverId}}</div>
+          </el-col>
+          <el-col :span="6" class="item">
+            <div class="label">制单日期:</div>
+            <div class="value">{{detailData.approverId}}</div>
+          </el-col>
+          <el-col :span="6" class="item">
+            <div class="label">修改人:</div>
+            <div class="value">{{detailData.approverId}}</div>
+          </el-col>
+          <el-col :span="6" class="item">
+            <div class="label">修改日期:</div>
+            <div class="value">{{detailData.approverId}}</div>
+          </el-col>
+          <el-col :span="6" class="item">
+            <div class="label">审核人:</div>
+            <div class="value">{{detailData.approverId}}</div>
+          </el-col>
+          <el-col :span="6" class="item">
+            <div class="label">审核日期:</div>
+            <div class="value">{{detailData.approverId}}</div>
+          </el-col>
+          <el-col :span="6" class="item">
+            <div class="label">关闭人:</div>
+            <div class="value">{{detailData.approverId}}</div>
+          </el-col>
+          <el-col :span="6" class="item">
+            <div class="label">关闭日期:</div>
+            <div class="value">{{detailData.approverId}}</div>
+          </el-col>
+          <el-col :span="24" class="item">
+            <div class="label">备注:</div>
+            <div class="value">{{detailData.approverId}}</div>
+          </el-col>
+        </el-row>
+      </div>
+
+      <div class="table" style="margin-top: 20px">
+        <el-table :data="detailData.kingDeeTransferItems" element-loading-text="Loading" border fit highlight-current-row stripe max-height="400">
+          <el-table-column align="center" label="序号" type="index" width="50"></el-table-column>
+          <el-table-column align="center" label="物料编号" prop="materialNumber" min-width="160" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="物料名称" prop="materialName" min-width="160" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="规格型号" prop="model" min-width="160" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="主计量单位" prop="baseUnitId" min-width="160" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="数量" prop="qty" min-width="160" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="单价" prop="consignPrice" min-width="160" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="金额" prop="consignAmount" min-width="100" show-overflow-tooltip></el-table-column>
+        </el-table>
+      </div>
+      
+    </div>
+    
+    <!-- <div class="page-footer">
+      <div class="footer" :class="classObj">
+        <el-button  type="primary" icon="el-icon-printer" v-print="printObj">打 印</el-button>
+        <el-popconfirm title="确定关闭吗?" @onConfirm="goBack" style="margin-left: 10px;">
+          <el-button slot="reference">关 闭</el-button>
+        </el-popconfirm>
+      </div>
+    </div> -->
+
+  </div>
+</template>
+
+<script>
+import print from 'vue-print-nb'
+import { getDetail } from "@/api/supply/reserve";
+
+export default {
+  name: 'ReserveDetail',
+  componentName: 'ReserveDetail',
+  props: ['listItem'],
+  directives: {
+    print
+  },
+  data() {
+    return {
+      printObj: {
+        id: 'printData'
+      },
+      detailData: {},
+    }
+  },
+
+  computed: {
+    sidebar() {
+      return this.$store.state.app.sidebar
+    },
+    classObj() {
+      return {
+        hideSidebar: !this.sidebar.opened,
+        openSidebar: this.sidebar.opened
+      }
+    },
+  },
+
+  created() {
+    this.getDetail();
+  },
+
+  methods: {
+    // 返回列表
+    goBack() {
+      this.$emit('backListFormDetail');
+    },
+
+    // 获取详情
+    getDetail() {
+      getDetail({id: this.listItem.id}).then(res => {
+        this.detailData = res.data;
+      })
+    },
+  }
+}
+</script>
+
+<style scoped lang="scss">
+  .detail-container {
+    width: 100%;
+    height: 100%;
+  }
+  .main-title {
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    margin-top: 20px;
+    height: 60px;
+    border-bottom: 1px solid #DCDFE6;
+    margin-bottom: 20px;
+    .title {
+      font-size: 16px;
+      font-weight: 600;
+      padding-left: 10px;
+    }
+  }
+</style>

+ 181 - 0
src/views/supply/reserve/components/reserve_form.vue

@@ -0,0 +1,181 @@
+<template>
+  <div class="detail-container">
+    <el-page-header @back="goBack" :content="listItem ? '编辑':'新增'"></el-page-header>
+
+    <div class="main-title">
+      <div class="title">预留单信息</div>
+    </div>
+
+    <el-form ref="mainForm" :model="mainForm" label-width="70px" size="small" label-position="left">
+      <el-row :gutter="20">
+        <el-col :xs="24" :sm="12" :lg="6">
+          <el-form-item label="关联单据" prop="warehouse">
+            <el-input v-model="mainForm.remark" placeholder="请输入关联单据"></el-input>
+          </el-form-item>
+        </el-col>
+        <!-- <el-col :xs="24" :sm="12" :lg="6">
+          <el-button size="small" type="primary" @click="getDeliverList">确定</el-button>
+        </el-col> -->
+      </el-row>
+      <el-row :gutter="20">
+        <el-col :xs="24" :sm="12" :lg="6">
+          <el-form-item label="单据编号" prop="warehouse">
+            <el-input v-model="mainForm.remark" placeholder="请输入单据编号"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :xs="24" :sm="12" :lg="6" style="height: 51px;">
+          <el-form-item label="单据日期" prop="date">
+            <el-date-picker
+              v-model="mainForm.date"
+              type="date"
+              value-format="yyyy-MM-dd"
+              style="width: 100%;"
+              placeholder="选择日期">
+            </el-date-picker>
+          </el-form-item>
+        </el-col>
+        <el-col :xs="24" :sm="12" :lg="6">
+          <el-form-item label="货品名称" prop="warehouse">
+            <el-input v-model="mainForm.remark" placeholder="请输入货品名称"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :xs="24" :sm="12" :lg="6">
+          <el-form-item label="类型" prop="warehouse">
+            <el-input v-model="mainForm.remark" placeholder="请输入类型"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :xs="24" :sm="12" :lg="6">
+          <el-form-item label="货品编码" prop="warehouse">
+            <el-input v-model="mainForm.remark" placeholder="请输入货品编码"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :xs="24" :sm="12" :lg="6">
+          <el-form-item label="规格型号" prop="warehouse">
+            <el-input v-model="mainForm.remark" placeholder="请输入规格型号"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :xs="24" :sm="12" :lg="6">
+          <el-form-item label="计量单位" prop="warehouse">
+            <el-input v-model="mainForm.remark" placeholder="请输入计量单位"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :xs="24" :sm="12" :lg="6">
+          <el-form-item label="备注" prop="warehouse">
+            <el-input v-model="mainForm.remark" placeholder="请输入备注"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :xs="24" :sm="12" :lg="6">
+          <el-form-item label="制单人" prop="warehouse">
+            <el-input v-model="mainForm.remark" placeholder="请输入制单人"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :xs="24" :sm="12" :lg="6" style="height: 51px;">
+          <el-form-item label="制单日期" prop="date">
+            <el-date-picker
+              v-model="mainForm.date"
+              type="date"
+              value-format="yyyy-MM-dd"
+              style="width: 100%;"
+              placeholder="选择日期">
+            </el-date-picker>
+          </el-form-item>
+        </el-col>
+      </el-row>
+    </el-form>
+
+    <div class="table" style="margin-top: 20px">
+      <el-table :data="detailData.kingDeeTransferItems" element-loading-text="Loading" border fit highlight-current-row stripe max-height="400">
+        <el-table-column align="center" label="序号" type="index" width="50"></el-table-column>
+        <el-table-column align="center" label="经销商编号" prop="materialNumber" min-width="160" show-overflow-tooltip></el-table-column>
+        <el-table-column align="center" label="经销商名称" prop="materialName" min-width="160" show-overflow-tooltip></el-table-column>
+        <el-table-column align="center" label="预留数量" prop="model" min-width="160" show-overflow-tooltip></el-table-column>
+        <el-table-column align="center" label="开单数量" prop="baseUnitId" min-width="160" show-overflow-tooltip></el-table-column>
+        <el-table-column align="center" label="备注" prop="qty" min-width="160" show-overflow-tooltip></el-table-column>
+      </el-table>
+    </div>
+    
+    <div class="page-footer">
+      <div class="footer" :class="classObj">
+        <el-button type="primary" @click="clickSubmitForm">保 存</el-button>
+        <el-button type="primary" @click="clickSubmitForm">提交审核</el-button>
+        <el-popconfirm title="确定关闭吗?" @onConfirm="goBack" style="margin-left: 10px;">
+          <el-button slot="reference">关 闭</el-button>
+        </el-popconfirm>
+      </div>
+    </div>
+
+  </div>
+</template>
+
+<script>
+import { getDetail } from "@/api/supply/reserve";
+
+export default {
+  name: 'ReserveForm',
+  componentName: 'ReserveForm',
+  props: ['listItem'],
+  data() {
+    return {
+      detailData: {},
+      mainForm: {
+
+      },
+    }
+  },
+
+  computed: {
+    sidebar() {
+      return this.$store.state.app.sidebar
+    },
+    classObj() {
+      return {
+        hideSidebar: !this.sidebar.opened,
+        openSidebar: this.sidebar.opened
+      }
+    },
+  },
+
+  created() {
+    this.getDetail();
+  },
+
+  methods: {
+    // 返回列表
+    goBack() {
+      this.$emit('backListFormDetail');
+    },
+
+    // 获取详情
+    getDetail() {
+      getDetail({id: this.listItem.id}).then(res => {
+        this.detailData = res.data;
+      })
+    },
+
+    clickSubmitForm() {
+
+    },
+  }
+}
+</script>
+
+<style scoped lang="scss">
+  .detail-container {
+    width: 100%;
+    height: 100%;
+  }
+  .main-title {
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    margin-top: 20px;
+    height: 60px;
+    border-bottom: 1px solid #DCDFE6;
+    margin-bottom: 20px;
+    .title {
+      font-size: 16px;
+      font-weight: 600;
+      padding-left: 10px;
+    }
+  }
+</style>

+ 279 - 0
src/views/supply/reserve/reserve_list.vue

@@ -0,0 +1,279 @@
+<template>
+  <div class="app-container">
+    <div v-show="!isShowDetail && !isShowForm">
+      <!-- 筛选条件 -->
+      <div class="screen-container">
+        <el-form ref="screenForm" :model="screenForm" label-width="90px" size="small" label-position="left">
+          <el-row :gutter="20">
+            <el-col :xs="24" :sm="24" :lg="24">
+              <el-form-item prop="orderNum" label-width="0">
+                <el-radio-group v-model="screenForm.status" size="medium">
+                  <el-radio-button label="1">全部</el-radio-button>
+                  <el-radio-button label="2">已保存</el-radio-button>
+                  <el-radio-button label="3">待审核</el-radio-button>
+                  <el-radio-button label="3">审核通过</el-radio-button>
+                  <el-radio-button label="3">审核驳回</el-radio-button>
+                  <el-radio-button label="3">已取消</el-radio-button>
+                </el-radio-group>
+              </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="12" :lg="6">
+              <el-form-item label="货品名称" prop="orderNum">
+                <el-input v-model="screenForm.orderNum" placeholder="请输入货品名称"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="12" :lg="6">
+              <el-form-item label="货品编码" prop="orderNum">
+                <el-input v-model="screenForm.orderNum" placeholder="请输入货品编码"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="12" :lg="6">
+              <el-form-item label="经销商名称" prop="jxsName">
+                <el-input v-model="screenForm.jxsName" placeholder="请输入经销商名称"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="12" :lg="6">
+              <el-form-item label="经销商编号" prop="jxsNum">
+                <el-input v-model="screenForm.jxsNum" placeholder="请输入经销商编号"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="12" :lg="6">
+              <el-form-item label="单据日期" prop="date">
+                <el-date-picker
+                  v-model="screenForm.date"
+                  type="datetimerange"
+                  range-separator="至"
+                  style="width: 100%;"
+                  value-format="yyyy-MM-dd HH:mm:ss"
+                  start-placeholder="开始日期"
+                  end-placeholder="结束日期">
+                </el-date-picker>
+              </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="12" :lg="6">
+              <el-form-item label="制表人" prop="chName">
+                <el-input v-model="screenForm.chName" placeholder="请输入制表人"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="12" :lg="6">
+              <el-form-item label="审核人" prop="model">
+                <el-input v-model="screenForm.model" placeholder="请输入审核人"></el-input>
+              </el-form-item>
+            </el-col>
+            
+            <el-col :xs="24" :sm="12" :lg="6" class="tr">
+              <el-form-item label="">
+                <el-button size="small" @click="resetScreenForm">清空</el-button>
+                <el-button size="small" type="primary" @click="submitScreenForm">搜索</el-button>
+              </el-form-item>
+            </el-col>
+          </el-row>
+        </el-form>
+      </div>
+
+      <div class="mymain-container">
+        <div class="btn-group clearfix">
+          <div class="fl">
+            <el-button size="small" type="primary" icon="el-icon-plus" @click="toForm()">新增</el-button>
+          </div>
+          <div class="fr">
+            <ExportButton :exUrl="'admin/user/mch/export'" :exParams="exParams" />
+          </div>
+        </div>
+        <div class="table">
+          <el-table v-loading="listLoading" :data="dataList" element-loading-text="Loading" border fit highlight-current-row stripe>
+            <el-table-column align="center" label="单据编号" prop="shipOrderNo" min-width="160" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="单据日期" prop="shipTime" min-width="160" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="关联单据" prop="stockName" min-width="160" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="品类" prop="projectNumber" min-width="160" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="货品编号" prop="projectName" min-width="160" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="货品名称" prop="unit" min-width="160" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="规格型号" prop="specification" min-width="160" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="计量单位" prop="unit" min-width="160" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="预留数量" prop="number" min-width="160" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="开单数量" prop="number" min-width="160" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="备注" prop="remark" min-width="160" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="经销商编码" prop="customerNumber" min-width="160" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="经销商名称" prop="customerName" min-width="160" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="产品名称" prop="productName" min-width="160" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="制表人" prop="createBy" min-width="160" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="制表日期" prop="createTime" min-width="100" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="修改人" prop="createBy" min-width="160" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="修改日期" prop="createTime" min-width="100" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="审核人" prop="aaa" min-width="100" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="审核日期" prop="aaa" min-width="200" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="关闭人" prop="aaa" min-width="100" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="关闭日期" prop="aaa" min-width="200" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="审核状态" prop="aaa" min-width="200" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="操作" width="160" fixed="right">
+              <template slot-scope="scope">
+                <el-button type="text" @click="toForm(scope.row)">编辑</el-button>
+                <el-button type="text" @click="toDetail(scope.row)">详情</el-button>
+                <el-popconfirm v-if="scope.row.status" style="margin-left: 10px;" title="确定删除吗?" @onConfirm="handleDelete(scope.row.id)" >
+                  <el-button slot="reference" type="text">删除</el-button>
+                </el-popconfirm>
+              </template>
+            </el-table-column>
+          </el-table>
+        </div>
+      </div>
+      <div class="pagination clearfix">
+        <div class="fr">
+          <el-pagination
+            @size-change="handleSizeChange"
+            @current-change="handleCurrentChange"
+            :current-page="currentPage"
+            :page-sizes="[10, 20, 30, 50]"
+            :page-size="10"
+            layout="total, sizes, prev, pager, next, jumper"
+            :total="listTotal">
+          </el-pagination>
+        </div>
+      </div>
+    </div>
+    
+    <ReserveDetail :listItem="queryItem" v-if="isShowDetail" @backListFormDetail="backList" />
+    <ReserveForm :listItem="queryItem" v-if="isShowForm" @backListFormDetail="backList" />
+
+  </div>
+</template>
+
+<script>
+import { getList } from "@/api/supply/reserve";
+import ReserveDetail from "@/views/supply/reserve/components/reserve_detail";
+import ReserveForm from "@/views/supply/reserve/components/reserve_form";
+
+export default {
+  components: {
+    ReserveDetail,
+    ReserveForm,
+  },
+  data() {
+    return {
+      currentPage: 1, // 当前页码
+      pageSize: 10, // 每页数量
+      listTotal: 0, // 列表总数
+      dataList: null, // 列表数据
+      listLoading: false, // 列表加载loading
+      screenForm: { // 筛选表单数据
+        orderNum: '',
+        jxsName: '',
+        chName: '',
+        model: '',
+        date: '',
+        jxsNum: '',
+        status: '',
+      },
+
+      queryItem: {},
+      isShowDetail: false,
+      isShowForm: false,
+    }
+  },
+
+  computed: {
+    exParams() {
+      return {
+        retreatOrderNo: this.screenForm.orderNum,
+        customerNumber: this.screenForm.jxsNum,
+        customerName: this.screenForm.jxsName,
+        productName: this.screenForm.chName,
+        specification: this.screenForm.model,
+        startTime: this.screenForm.date ? this.screenForm.date[0] : '',
+        endTime: this.screenForm.date ? this.screenForm.date[1] : '',
+        status: 2, // 1:发货单,2:工程发货单
+      }
+    },
+  },
+
+  created() {
+    this.getList();
+  },
+
+  methods: {
+    // 查询按钮权限
+    checkBtnRole(value) {
+      // let btnRole = this.$route.meta.roles;
+      // if(!btnRole) {return true}
+      // let index = btnRole.indexOf(value);
+      // return index >= 0;
+      return true
+    },
+
+    // 查询列表
+    getList() {
+      this.listLoading = true;
+
+      let params = {
+        pageNum: this.currentPage,
+        pageSize: this.pageSize,
+        retreatOrderNo: this.screenForm.orderNum,
+        customerNumber: this.screenForm.jxsNum,
+        customerName: this.screenForm.jxsName,
+        productName: this.screenForm.chName,
+        specification: this.screenForm.model,
+        startTime: this.screenForm.date ? this.screenForm.date[0] : '',
+        endTime: this.screenForm.date ? this.screenForm.date[1] : '',
+        status: 2, // 1:发货单,2:工程发货单
+      };
+      getList(params).then((res) => {
+        this.dataList = res.data.records;
+        this.listTotal = res.data.total;
+        this.listLoading = false;
+      })
+    },
+
+    // 提交筛选表单
+    submitScreenForm() {
+      this.currentPage = 1;
+      this.getList();
+    },
+
+    // 重置筛选表单
+    resetScreenForm() {
+      this.$refs.screenForm.resetFields();
+      this.currentPage = 1;
+      this.getList();
+    },
+
+    // 更改每页数量
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = 1;
+      this.getList();
+    },
+
+    // 更改当前页
+    handleCurrentChange(val) {
+      this.currentPage = val;
+      this.getList();
+    },
+
+    // 进入表单
+    toForm(item) {
+      this.queryItem = item;
+      this.isShowForm = true;
+    },
+
+    // 进入详情
+    toDetail(item) {
+      this.queryItem = item;
+      this.isShowDetail = true;
+    },
+
+    backList() {
+      this.queryItem = {};
+      this.isShowDetail = false;
+      this.isShowForm = false;
+    },
+
+    handleDelete(id) {
+
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+
+</style>

+ 5 - 0
src/views/supply/return.vue

@@ -0,0 +1,5 @@
+<template>
+  <div>
+    <router-view />
+  </div>
+</template>

+ 181 - 0
src/views/supply/return/components/online_detail.vue

@@ -0,0 +1,181 @@
+<template>
+  <div class="detail-container">
+    <el-page-header @back="goBack" content="详情"></el-page-header>
+
+    <div id="printMe">
+      <div class="main-title">
+        <div class="title">退货单信息</div>
+      </div>
+      <div class="diy-table-1">
+        <el-row :gutter="0">
+          <el-col :span="8" class="item">
+            <div class="label">退货单号</div>
+            <div class="value">2022123233435342</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">退换日期</div>
+            <div class="value">2022123233435342</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">发票号</div>
+            <div class="value">2022123233435342</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">销售类型</div>
+            <div class="value">万豪仓</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">电商订单号</div>
+            <div class="value">2022123233435342</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">业务员</div>
+            <div class="value">广州格匠机电有限公司</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">客户名称</div>
+            <div class="value">广州格匠机电有限公司</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">销售部门</div>
+            <div class="value">广州格匠机电有限公司</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label"></div>
+            <div class="value"></div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">仓库</div>
+            <div class="value">广州格匠机电有限公司</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">币种</div>
+            <div class="value">广州格匠机电有限公司</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">台账备注</div>
+            <div class="value">广州格匠机电有限公司</div>
+          </el-col>
+          <el-col :xs="24" :sm="24" :lg="24" class="item">
+            <div class="label">备注</div>
+            <div class="value">2022123233435342</div>
+          </el-col>
+        </el-row>
+      </div>
+
+      <div class="main-title">
+        <div class="title">货品信息</div>
+      </div>
+      <div class="diy-table-2">
+        <div class="head">
+          <el-row :gutter="20">
+            <el-col :span="2">序号</el-col>
+            <el-col :span="4">产品编号</el-col>
+            <el-col :span="8">产品名称</el-col>
+            <el-col :span="2">规格型号</el-col>
+            <el-col :span="2">内机编码</el-col>
+            <el-col :span="2">外机编码</el-col>
+            <el-col :span="2">单位</el-col>
+            <el-col :span="2">数量</el-col>
+          </el-row>
+        </div>
+        <div class="body">
+          <el-row v-for="(item, index) in goodsList" :key="item.goodsId" :gutter="20">
+            <el-col :span="2">{{ index + 1 }}</el-col>
+            <el-col :span="4">{{ item.goodsId || 0 }}</el-col>
+            <el-col :span="8">{{ item.goodsName || 0 }}</el-col>
+            <el-col :span="2">{{ item.salesUnit || 0 }}</el-col>
+            <el-col :span="2">{{ item.price || 0 }}</el-col>
+            <el-col :span="2">{{ item.saleQty || 0 }}</el-col>
+            <el-col :span="2">{{ item.saleValue || 0 }}</el-col>
+            <el-col :span="2">{{ item.saleValue || 0 }}</el-col>
+          </el-row>
+        </div>
+        <div class="foot">
+          <el-row :gutter="20">
+            <el-col :span="24">合计</el-col>
+          </el-row>
+        </div>
+      </div>
+
+    </div>
+    
+    <div class="page-footer">
+      <div class="footer" :class="classObj">
+        <el-button  type="primary" icon="el-icon-printer" v-print="printObj">打 印</el-button>
+        <el-popconfirm title="确定关闭吗?" @onConfirm="goBack" style="margin-left: 10px;">
+          <el-button slot="reference">关 闭</el-button>
+        </el-popconfirm>
+      </div>
+    </div>
+
+  </div>
+</template>
+
+<script>
+import print from 'vue-print-nb'
+import { getList } from "@/api/supply/sales";
+
+export default {
+  name: 'OnlineDetail',
+  componentName: 'OnlineDetail',
+  props: ['listItem'],
+  directives: {
+    print
+  },
+  data() {
+    return {
+      printObj: {
+        id: 'printMe'
+      },
+      goodsList: [{
+        goodsId: 1,
+      }]
+    }
+  },
+
+  computed: {
+    sidebar() {
+      return this.$store.state.app.sidebar
+    },
+    classObj() {
+      return {
+        hideSidebar: !this.sidebar.opened,
+        openSidebar: this.sidebar.opened
+      }
+    },
+  },
+
+  created() {
+
+  },
+
+  methods: {
+    // 返回列表
+    goBack() {
+      this.$emit('backListFormDetail');
+    },
+  }
+}
+</script>
+
+<style scoped lang="scss">
+  .detail-container {
+    width: 100%;
+    height: 100%;
+  }
+  .main-title {
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    margin-top: 30px;
+    height: 60px;
+    border-bottom: 1px solid #DCDFE6;
+    margin-bottom: 20px;
+    .title {
+      font-size: 16px;
+      font-weight: 600;
+      padding-left: 10px;
+    }
+  }
+</style>

+ 194 - 0
src/views/supply/return/components/return_detail.vue

@@ -0,0 +1,194 @@
+<template>
+  <div class="detail-container">
+    <el-page-header @back="goBack" content="详情"></el-page-header>
+
+    <div id="printMe">
+      <div class="main-title">
+        <div class="title">退货单信息</div>
+      </div>
+      <div class="diy-table-1">
+        <el-row :gutter="0">
+          <el-col :span="8" class="item">
+            <div class="label">退货单号</div>
+            <div class="value">{{detailData.retreatOrderNo}}</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">退货日期</div>
+            <div class="value">{{detailData.retreatTime}}</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">业务类型</div>
+            <div class="value">{{detailData.aaa}}</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">销售类型</div>
+            <div class="value">{{detailData.salesType}}</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">订单号</div>
+            <div class="value">{{detailData.orderNo}}</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">发票号</div>
+            <div class="value">{{detailData.billNumber}}</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">客户名称</div>
+            <div class="value">{{detailData.clientName}}</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">销售部门</div>
+            <div class="value">{{detailData.salesDep}}</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">业务员</div>
+            <div class="value">{{detailData.salesman}}</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">工程编号</div>
+            <div class="value">{{detailData.projectNumber}}</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">币种</div>
+            <div class="value">{{detailData.currency}}</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">订单类型</div>
+            <div class="value">{{detailData.orderType}}</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">仓库</div>
+            <div class="value">{{detailData.stockName}}</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">发货单号</div>
+            <div class="value">{{detailData.invoiceOrderNo}}</div>
+          </el-col>
+          <el-col :span="8" class="item">
+            <div class="label">台账备注</div>
+            <div class="value">{{detailData.iedgerRemark}}</div>
+          </el-col>
+          <el-col :xs="24" :sm="24" :lg="24" class="item">
+            <div class="label">备注</div>
+            <div class="value">{{detailData.remark}}</div>
+          </el-col>
+        </el-row>
+      </div>
+
+      <div class="main-title">
+        <div class="title">货品信息</div>
+      </div>
+      <div class="table">
+        <el-table :data="detailData.retreatDocumentOrder" element-loading-text="Loading" border fit highlight-current-row stripe>
+          <el-table-column align="center" label="序号" type="index" width="50"></el-table-column>
+          <el-table-column align="center" label="订单号" prop="orderNumber" min-width="160" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="仓库名称" prop="stockName" min-width="160" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="产品编号" prop="productNumber" min-width="160" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="产品名称" prop="productName" min-width="160" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="规格型号" prop="specification" min-width="160" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="主计量" prop="unit" min-width="160" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="数量" prop="number" min-width="160" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="含税单价" prop="includedPrice" min-width="160" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="含税金额" prop="includedPrice" min-width="100" show-overflow-tooltip>
+            <template slot-scope="scope">
+              {{ scope.row.number * scope.row.includedPrice }}
+            </template>
+          </el-table-column>
+          <el-table-column align="center" label="无税单价" prop="price" min-width="100" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="无税金额" prop="price" min-width="100" show-overflow-tooltip>
+            <template slot-scope="scope">
+              {{ scope.row.number * scope.row.price }}
+            </template>
+          </el-table-column>
+          <el-table-column align="center" label="价税合计" prop="totalPrice" min-width="100" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="税率(%)" prop="rate" min-width="100" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="退补标记" prop="refund" min-width="100" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" label="厂产品代码" prop="factoryNumber" min-width="100" show-overflow-tooltip></el-table-column>
+        </el-table>
+      </div>
+    </div>
+    
+    <div class="page-footer">
+      <div class="footer" :class="classObj">
+        <el-button  type="primary" icon="el-icon-printer" v-print="printObj">打 印</el-button>
+        <el-popconfirm title="确定关闭吗?" @onConfirm="goBack" style="margin-left: 10px;">
+          <el-button slot="reference">关 闭</el-button>
+        </el-popconfirm>
+      </div>
+    </div>
+
+  </div>
+</template>
+
+<script>
+import print from 'vue-print-nb'
+import { getDetail } from "@/api/supply/return";
+
+export default {
+  name: 'ReturnDetail',
+  componentName: 'ReturnDetail',
+  props: ['listItem'],
+  directives: {
+    print
+  },
+  data() {
+    return {
+      printObj: {
+        id: 'printMe'
+      },
+      detailData: {},
+    }
+  },
+
+  computed: {
+    sidebar() {
+      return this.$store.state.app.sidebar
+    },
+    classObj() {
+      return {
+        hideSidebar: !this.sidebar.opened,
+        openSidebar: this.sidebar.opened
+      }
+    },
+  },
+
+  created() {
+    this.getDetail();
+  },
+
+  methods: {
+    // 返回列表
+    goBack() {
+      this.$emit('backListFormDetail');
+    },
+
+    // 获取详情
+    getDetail() {
+      getDetail({id: this.listItem.id}).then(res => {
+        this.detailData = res.data;
+      })
+    },
+  }
+}
+</script>
+
+<style scoped lang="scss">
+  .detail-container {
+    width: 100%;
+    height: 100%;
+  }
+  .main-title {
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    margin-top: 30px;
+    height: 60px;
+    border-bottom: 1px solid #DCDFE6;
+    margin-bottom: 20px;
+    .title {
+      font-size: 16px;
+      font-weight: 600;
+      padding-left: 10px;
+    }
+  }
+</style>

+ 190 - 0
src/views/supply/return/components/return_form.vue

@@ -0,0 +1,190 @@
+<template>
+  <div class="detail-container">
+    <el-page-header @back="goBack" content="退货"></el-page-header>
+
+    <div class="main-title">
+      <div class="title">退货申请</div>
+    </div>
+    <div class="diy-table-1">
+      <el-row :gutter="0">
+        <el-col :span="8" class="item">
+          <div class="label">发货申请单号</div>
+          <div class="value"><el-input v-model="mainForm.remark" placeholder="请输入发货申请单号"></el-input></div>
+        </el-col>
+        <el-col :span="8" class="item">
+          <div class="label">申请日期</div>
+          <div class="value">2022123233435342</div>
+        </el-col>
+        <el-col :span="8" class="item">
+          <div class="label">单据状态</div>
+          <div class="value">2022123233435342</div>
+        </el-col>
+        <el-col :span="8" class="item">
+          <div class="label">经销商编号</div>
+          <div class="value">万豪仓</div>
+        </el-col>
+        <el-col :span="8" class="item">
+          <div class="label">经销商名称</div>
+          <div class="value">2022123233435342</div>
+        </el-col>
+        <el-col :span="8" class="item">
+          <div class="label">仓库</div>
+          <div class="value">广州格匠机电有限公司</div>
+        </el-col>
+        <el-col :xs="24" :sm="24" :lg="24" class="item">
+          <div class="label">备注</div>
+          <div class="value">2022123233435342</div>
+        </el-col>
+        <el-col :span="8" class="item">
+          <div class="label">制单人</div>
+          <div class="value">广州格匠机电有限公司</div>
+        </el-col>
+        <el-col :span="16" class="item">
+          <div class="label">制表日期</div>
+          <div class="value">广州格匠机电有限公司</div>
+        </el-col>
+      </el-row>
+    </div>
+
+    <div class="main-title">
+      <div class="title">货品信息</div>
+    </div>
+    <div class="table">
+      <el-table :data="detailData.retreatDocumentOrder" element-loading-text="Loading" border fit highlight-current-row stripe>
+        <el-table-column align="center" label="序号" type="index" width="50"></el-table-column>
+        <el-table-column align="center" label="销售类型" prop="salesType" min-width="160" show-overflow-tooltip>
+          <template slot-scope="scope">
+            {{ scope.row.salesType }}
+          </template>
+        </el-table-column>
+        <el-table-column align="center" label="发货仓库" prop="stockName" min-width="160" show-overflow-tooltip></el-table-column>
+        <el-table-column align="center" label="销售订单号" prop="retreatTime" min-width="160" show-overflow-tooltip></el-table-column>
+        <el-table-column align="center" label="产品编码" prop="customerName" min-width="160" show-overflow-tooltip></el-table-column>
+        <el-table-column align="center" label="产品名称" prop="productName" min-width="160" show-overflow-tooltip></el-table-column>
+        <el-table-column align="center" label="规格型号" prop="specification" min-width="160" show-overflow-tooltip></el-table-column>
+        <el-table-column align="center" label="计量单位" prop="unit" min-width="100" show-overflow-tooltip></el-table-column>
+        <el-table-column align="center" label="数量" prop="number" min-width="100" show-overflow-tooltip></el-table-column>
+        <el-table-column align="center" label="是否退货" prop="isReturn" min-width="100" show-overflow-tooltip>
+          <template slot-scope="scope">
+            <el-checkbox v-model="scope.row.isReturn"></el-checkbox>
+          </template>
+        </el-table-column>
+        <el-table-column align="center" label="可退数量" prop="number" min-width="100" show-overflow-tooltip></el-table-column>
+        <el-table-column align="center" label="退货数量" prop="number" min-width="100" show-overflow-tooltip>
+          <template slot-scope="scope">
+            <el-input v-model="scope.row.number" placeholder="请输入退货数量"></el-input>
+          </template>
+        </el-table-column>
+      </el-table>
+    </div>
+
+    <div class="main-title">
+      <div class="title">退货信息</div>
+    </div>
+    <div class="diy-table-1">
+      <el-row :gutter="0">
+        <el-col :span="12" class="item">
+          <div class="label">操作人</div>
+          <div class="value">2022123233435342</div>
+        </el-col>
+        <el-col :span="12" class="item">
+          <div class="label">退货日期</div>
+          <div class="value">2022123233435342</div>
+        </el-col>
+        <el-col :span="24" class="item">
+          <div class="label">退货说明</div>
+          <div class="value">
+            <el-input v-model="mainForm.remark" placeholder="请输入退货说明"></el-input>
+          </div>
+        </el-col>
+      </el-row>
+    </div>
+    
+    <div class="page-footer">
+      <div class="footer" :class="classObj">
+        <el-button type="primary" @click="clickSubmitForm" :loading="formLoading">{{ formLoading ? '提交中 ...' : '提 交' }}</el-button>
+        <el-popconfirm title="确定关闭吗?" @onConfirm="goBack" style="margin-left: 10px;">
+          <el-button slot="reference">关 闭</el-button>
+        </el-popconfirm>
+      </div>
+    </div>
+
+  </div>
+</template>
+
+<script>
+import { getDetail } from "@/api/supply/return";
+
+export default {
+  name: 'ReturnForm',
+  componentName: 'ReturnForm',
+  props: ['listItem'],
+  data() {
+    return {
+      detailData: {},
+      formLoading: false,
+      mainForm: {
+        remark: '',
+      },
+      goodsList: [{
+        goodsId: 1,
+      }]
+    }
+  },
+
+  computed: {
+    sidebar() {
+      return this.$store.state.app.sidebar
+    },
+    classObj() {
+      return {
+        hideSidebar: !this.sidebar.opened,
+        openSidebar: this.sidebar.opened
+      }
+    },
+  },
+
+  created() {
+    this.getDetail();
+  },
+
+  methods: {
+    // 返回列表
+    goBack() {
+      this.$emit('backListFormDetail');
+    },
+
+    // 获取详情
+    getDetail() {
+      getDetail({id: this.listItem.id}).then(res => {
+        this.detailData = res.data;
+      })
+    },
+
+    clickSubmitForm() {
+
+    },
+  }
+}
+</script>
+
+<style scoped lang="scss">
+  .detail-container {
+    width: 100%;
+    height: 100%;
+  }
+  .main-title {
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    margin-top: 30px;
+    height: 60px;
+    border-bottom: 1px solid #DCDFE6;
+    margin-bottom: 20px;
+    .title {
+      font-size: 16px;
+      font-weight: 600;
+      padding-left: 10px;
+    }
+  }
+</style>

+ 243 - 0
src/views/supply/return/online_list.vue

@@ -0,0 +1,243 @@
+<template>
+  <div class="app-container">
+    <div v-show="!isShowDetail">
+      <!-- 筛选条件 -->
+      <div class="screen-container">
+        <el-form ref="screenForm" :model="screenForm" label-width="90px" size="small" label-position="left">
+          <el-row :gutter="20">
+            <el-col :xs="24" :sm="12" :lg="6">
+              <el-form-item label="发货单号" prop="orderNum">
+                <el-input v-model="screenForm.orderNum" placeholder="请输入发货单号"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="12" :lg="6">
+              <el-form-item label="经销商编号" prop="jxsNum">
+                <el-input v-model="screenForm.jxsNum" placeholder="请输入经销商编号"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="12" :lg="6">
+              <el-form-item label="经销商名称" prop="jxsName">
+                <el-input v-model="screenForm.jxsName" placeholder="请输入经销商名称"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="12" :lg="6">
+              <el-form-item label="存货编号" prop="chNum">
+                <el-input v-model="screenForm.chNum" placeholder="请输入存货编号"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="12" :lg="6">
+              <el-form-item label="存货名称" prop="chName">
+                <el-input v-model="screenForm.chName" placeholder="请输入存货名称"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="12" :lg="6">
+              <el-form-item label="规格型号" prop="model">
+                <el-input v-model="screenForm.model" placeholder="请输入规格型号"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="12" :lg="6">
+              <el-form-item label="发货日期" prop="date">
+                <el-date-picker
+                  v-model="screenForm.date"
+                  type="datetimerange"
+                  range-separator="至"
+                  style="width: 100%;"
+                  value-format="yyyy-MM-dd HH:mm:ss"
+                  start-placeholder="开始日期"
+                  end-placeholder="结束日期">
+                </el-date-picker>
+              </el-form-item>
+            </el-col>
+            
+            <el-col :xs="24" :sm="12" :lg="6" class="tr">
+              <el-form-item label="">
+                <el-button size="small" @click="resetScreenForm">清空</el-button>
+                <el-button size="small" type="primary" @click="submitScreenForm">搜索</el-button>
+              </el-form-item>
+            </el-col>
+          </el-row>
+        </el-form>
+      </div>
+
+      <div class="mymain-container">
+        <div class="btn-group clearfix">
+          <div class="fl">
+            <el-button size="small" type="warning" icon="el-icon-close">退货</el-button>
+          </div>
+          <div class="fr">
+            <ExportButton :exUrl="'admin/user/mch/export'" :exParams="exParams" />
+          </div>
+        </div>
+        <div class="table">
+          <el-table v-loading="listLoading" :data="dataList" element-loading-text="Loading" border fit highlight-current-row stripe>
+            <el-table-column align="center" label="退换单号" prop="retreatOrderNo" min-width="160" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="退货日期" prop="retreatTime" min-width="160" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="仓库" prop="stockName" min-width="160" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="客户名称" prop="aaa" min-width="160" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="产品名称" prop="productName" min-width="160" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="规格型号" prop="specification" min-width="160" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="价税合计" prop="totalPrice" min-width="160" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="折扣后金额" prop="aaa" min-width="160" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="未开票金额" prop="aaa" min-width="160" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="无税金额" prop="price" min-width="100" show-overflow-tooltip>
+              <template slot-scope="scope">
+                {{ scope.row.number * scope.row.price }}
+              </template>
+            </el-table-column>
+            <el-table-column align="center" label="无税单价" prop="price" min-width="100" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="数量" prop="number" min-width="100" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="备注" prop="aaa" min-width="200" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="操作" width="120" fixed="right">
+              <template slot-scope="scope">
+                <el-button type="text" @click="toDetail(scope.row)">详情</el-button>
+              </template>
+            </el-table-column>
+          </el-table>
+        </div>
+      </div>
+      <div class="pagination clearfix">
+        <div class="fr">
+          <el-pagination
+            @size-change="handleSizeChange"
+            @current-change="handleCurrentChange"
+            :current-page="currentPage"
+            :page-sizes="[10, 20, 30, 50]"
+            :page-size="10"
+            layout="total, sizes, prev, pager, next, jumper"
+            :total="listTotal">
+          </el-pagination>
+        </div>
+      </div>
+    </div>
+    
+    <OnlineDetail :listItem="queryItem" v-if="isShowDetail" @backListFormDetail="backList" />
+
+  </div>
+</template>
+
+<script>
+import { COMMON_SELECT } from '@/utils/select_data'
+import { getList } from "@/api/supply/return";
+import OnlineDetail from "@/views/supply/return/components/online_detail";
+
+export default {
+  components: {
+    OnlineDetail,
+  },
+  data() {
+    return {
+      currentPage: 1, // 当前页码
+      pageSize: 10, // 每页数量
+      listTotal: 0, // 列表总数
+      dataList: null, // 列表数据
+      listLoading: false, // 列表加载loading
+      screenForm: { // 筛选表单数据
+        orderNum: '',
+        jxsNum: '',
+        jxsName: '',
+        chNum: '',
+        chName: '',
+        model: '',
+        date: '',
+      },
+
+      queryItem: {},
+    }
+  },
+
+  computed: {
+    exParams() {
+      return {
+        retreatOrderNo: this.screenForm.orderNum,
+        customerNumber: this.screenForm.jxsNum,
+        customerName: this.screenForm.jxsName,
+        productName: this.screenForm.chName,
+        specification: this.screenForm.model,
+        startTime: this.screenForm.date ? this.screenForm.date[0] : '',
+        endTime: this.screenForm.date ? this.screenForm.date[1] : '',
+        status: 2, // 1:退货单,2:电商退货单
+      }
+    },
+    isShowDetail() {
+      return this.queryItem.hasOwnProperty('adminUserId');
+    },
+  },
+
+  created() {
+    this.getList();
+  },
+
+  methods: {
+    // 查询按钮权限
+    checkBtnRole(value) {
+      // let btnRole = this.$route.meta.roles;
+      // if(!btnRole) {return true}
+      // let index = btnRole.indexOf(value);
+      // return index >= 0;
+      return true
+    },
+
+    // 查询列表
+    getList() {
+      this.listLoading = true;
+
+      let params = {
+        pageNum: this.currentPage,
+        pageSize: this.pageSize,
+        retreatOrderNo: this.screenForm.orderNum,
+        customerNumber: this.screenForm.jxsNum,
+        customerName: this.screenForm.jxsName,
+        productName: this.screenForm.chName,
+        specification: this.screenForm.model,
+        startTime: this.screenForm.date ? this.screenForm.date[0] : '',
+        endTime: this.screenForm.date ? this.screenForm.date[1] : '',
+        status: 2, // 1:退货单,2:电商退货单
+      };
+      getList(params).then((res) => {
+        this.dataList = res.data.records;
+        this.listTotal = res.data.total;
+        this.listLoading = false;
+      })
+    },
+
+    // 提交筛选表单
+    submitScreenForm() {
+      this.currentPage = 1;
+      this.getList();
+    },
+
+    // 重置筛选表单
+    resetScreenForm() {
+      this.$refs.screenForm.resetFields();
+      this.currentPage = 1;
+      this.getList();
+    },
+
+    // 更改每页数量
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = 1;
+      this.getList();
+    },
+
+    // 更改当前页
+    handleCurrentChange(val) {
+      this.currentPage = val;
+      this.getList();
+    },
+
+    // 进入详情
+    toDetail(item) {
+      this.queryItem = item;
+    },
+
+    backList() {
+      this.queryItem = {};
+    },
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+
+</style>

+ 242 - 0
src/views/supply/return/return_list.vue

@@ -0,0 +1,242 @@
+<template>
+  <div class="app-container">
+    <div v-show="!isShowDetail && !isShowForm">
+      <!-- 筛选条件 -->
+      <div class="screen-container">
+        <el-form ref="screenForm" :model="screenForm" label-width="90px" size="small" label-position="left">
+          <el-row :gutter="20">
+            <el-col :xs="24" :sm="12" :lg="6">
+              <el-form-item label="发货单号" prop="orderNum">
+                <el-input v-model="screenForm.orderNum" placeholder="请输入发货单号"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="12" :lg="6">
+              <el-form-item label="经销商编号" prop="jxsNum">
+                <el-input v-model="screenForm.jxsNum" placeholder="请输入规格型号"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="12" :lg="6">
+              <el-form-item label="经销商名称" prop="jxsName">
+                <el-input v-model="screenForm.jxsName" placeholder="请输入经销商名称"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="12" :lg="6">
+              <el-form-item label="存货名称" prop="chName">
+                <el-input v-model="screenForm.chName" placeholder="请输入存货名称"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="12" :lg="6">
+              <el-form-item label="规格型号" prop="model">
+                <el-input v-model="screenForm.model" placeholder="请输入规格型号"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="12" :lg="6">
+              <el-form-item label="发货日期" prop="date">
+                <el-date-picker
+                  v-model="screenForm.date"
+                  type="datetimerange"
+                  range-separator="至"
+                  style="width: 100%;"
+                  value-format="yyyy-MM-dd HH:mm:ss"
+                  start-placeholder="开始日期"
+                  end-placeholder="结束日期">
+                </el-date-picker>
+              </el-form-item>
+            </el-col>
+            
+            <el-col :xs="24" :sm="24" :lg="12" class="tr">
+              <el-form-item label="">
+                <el-button size="small" @click="resetScreenForm">清空</el-button>
+                <el-button size="small" type="primary" @click="submitScreenForm">搜索</el-button>
+              </el-form-item>
+            </el-col>
+          </el-row>
+        </el-form>
+      </div>
+
+      <div class="mymain-container">
+        <div class="btn-group clearfix">
+          <div class="fr">
+            <ExportButton :exUrl="'admin/user/mch/export'" :exParams="exParams" />
+          </div>
+        </div>
+        <div class="table">
+          <el-table v-loading="listLoading" :data="dataList" element-loading-text="Loading" border fit highlight-current-row stripe>
+            <el-table-column align="center" label="退换单号" prop="retreatOrderNo" min-width="160" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="退货日期" prop="retreatTime" min-width="160" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="仓库" prop="stockName" min-width="160" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="经销商" prop="customerName" min-width="160" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="产品名称" prop="productName" min-width="160" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="规格型号" prop="specification" min-width="160" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="价税合计" prop="totalPrice" min-width="100" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="无税金额" prop="price" min-width="100" show-overflow-tooltip>
+              <template slot-scope="scope">
+                {{ scope.row.number * scope.row.price }}
+              </template>
+            </el-table-column>
+            <el-table-column align="center" label="无税单价" prop="price" min-width="100" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="数量" prop="number" min-width="100" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="备注" prop="remark" min-width="200" show-overflow-tooltip></el-table-column>
+            <el-table-column align="center" label="操作" width="120" fixed="right">
+              <template slot-scope="scope">
+                <el-button type="text" @click="toDetail('detail', scope.row)">详情</el-button>
+                <el-button type="text" @click="toDetail('form', scope.row)">退货</el-button>
+              </template>
+            </el-table-column>
+          </el-table>
+        </div>
+      </div>
+      <div class="pagination clearfix">
+        <div class="fr">
+          <el-pagination
+            @size-change="handleSizeChange"
+            @current-change="handleCurrentChange"
+            :current-page="currentPage"
+            :page-sizes="[10, 20, 30, 50]"
+            :page-size="10"
+            layout="total, sizes, prev, pager, next, jumper"
+            :total="listTotal">
+          </el-pagination>
+        </div>
+      </div>
+    </div>
+    
+    <ReturnDetail :listItem="queryItem" v-if="isShowDetail" @backListFormDetail="backList" />
+    <ReturnForm :listItem="queryItem" v-if="isShowForm" @backListFormDetail="backList" />
+
+  </div>
+</template>
+
+<script>
+import { COMMON_SELECT } from '@/utils/select_data'
+import { getList } from "@/api/supply/return";
+import ReturnDetail from "@/views/supply/return/components/return_detail";
+import ReturnForm from "@/views/supply/return/components/return_form";
+
+export default {
+  components: {
+    ReturnDetail,
+    ReturnForm,
+  },
+  data() {
+    return {
+      currentPage: 1, // 当前页码
+      pageSize: 10, // 每页数量
+      listTotal: 0, // 列表总数
+      dataList: null, // 列表数据
+      listLoading: false, // 列表加载loading
+      screenForm: { // 筛选表单数据
+        orderNum: '',
+        jxsNum: '',
+        jxsName: '',
+        chName: '',
+        model: '',
+        date: '',
+      },
+
+      jumpType: '',
+      queryItem: {},
+    }
+  },
+
+  computed: {
+    exParams() {
+      return {
+        retreatOrderNo: this.screenForm.orderNum,
+        customerNumber: this.screenForm.jxsNum,
+        customerName: this.screenForm.jxsName,
+        productName: this.screenForm.chName,
+        specification: this.screenForm.model,
+        startTime: this.screenForm.date ? this.screenForm.date[0] : '',
+        endTime: this.screenForm.date ? this.screenForm.date[1] : '',
+        status: 1, // 1:退货单,2:电商退货单
+      }
+    },
+    isShowDetail() {
+      return this.queryItem.hasOwnProperty('id') && this.jumpType == 'detail';
+    },
+    isShowForm() {
+      return this.queryItem.hasOwnProperty('id') && this.jumpType == 'form';
+    },
+  },
+
+  created() {
+    this.getList();
+  },
+
+  methods: {
+    // 查询按钮权限
+    checkBtnRole(value) {
+      // let btnRole = this.$route.meta.roles;
+      // if(!btnRole) {return true}
+      // let index = btnRole.indexOf(value);
+      // return index >= 0;
+      return true
+    },
+
+    // 查询列表
+    getList() {
+      this.listLoading = true;
+
+      let params = {
+        pageNum: this.currentPage,
+        pageSize: this.pageSize,
+        retreatOrderNo: this.screenForm.orderNum,
+        customerNumber: this.screenForm.jxsNum,
+        customerName: this.screenForm.jxsName,
+        productName: this.screenForm.chName,
+        specification: this.screenForm.model,
+        startTime: this.screenForm.date ? this.screenForm.date[0] : '',
+        endTime: this.screenForm.date ? this.screenForm.date[1] : '',
+        status: 1, // 1:退货单,2:电商退货单
+      };
+      getList(params).then((res) => {
+        this.dataList = res.data.records;
+        this.listTotal = res.data.total;
+        this.listLoading = false;
+      })
+    },
+
+    // 提交筛选表单
+    submitScreenForm() {
+      this.currentPage = 1;
+      this.getList();
+    },
+
+    // 重置筛选表单
+    resetScreenForm() {
+      this.$refs.screenForm.resetFields();
+      this.currentPage = 1;
+      this.getList();
+    },
+
+    // 更改每页数量
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = 1;
+      this.getList();
+    },
+
+    // 更改当前页
+    handleCurrentChange(val) {
+      this.currentPage = val;
+      this.getList();
+    },
+
+    // 进入详情
+    toDetail(type, item) {
+      this.jumpType = type;
+      this.queryItem = item;
+    },
+
+    backList() {
+      this.jumpType = '';
+      this.queryItem = {};
+    },
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+
+</style>

+ 10 - 14
src/views/supply/sales/sales_list.vue

@@ -78,7 +78,7 @@
             <el-button size="small" type="warning" icon="el-icon-close">退单</el-button>
           </div>
           <div class="fr">
-            <el-button size="small" type="primary" icon="el-icon-download" @click="handleExport">导出数据</el-button>
+            <ExportButton :exUrl="'admin/user/mch/export'" :exParams="exParams" />
           </div>
         </div>
         <div class="table">
@@ -127,7 +127,6 @@
 <script>
 import { COMMON_SELECT } from '@/utils/select_data'
 import { getList } from "@/api/supply/sales";
-import { downloadFiles } from '@/utils/util'
 import SalesDetail from "@/views/supply/sales/components/sales_detail";
 import SalesExamine from "@/views/supply/sales/components/sales_examine";
 
@@ -163,6 +162,15 @@ export default {
   },
 
   computed: {
+    exParams() {
+      return {
+        userName: this.screenForm.account,
+        nickName: this.screenForm.nickName,
+        linkPhone: this.screenForm.phone,
+        email: this.screenForm.email,
+        status: this.screenForm.status,
+      }
+    },
     isShowDetail() {
       return this.queryItem.hasOwnProperty('adminUserId') && this.jumpType == 'detail';
     },
@@ -241,18 +249,6 @@ export default {
       this.jumpType = '';
       this.queryItem = {};
     },
-
-    // 导出
-    handleExport() {
-      let screenData = {
-        userName: this.screenForm.account,
-        nickName: this.screenForm.nickName,
-        linkPhone: this.screenForm.phone,
-        email: this.screenForm.email,
-        status: this.screenForm.status,
-      };
-      downloadFiles('admin/user/mch/export', screenData);
-    },
   }
 }
 </script>