Explorar o código

Merge branch 'deploy' of chelingzhu-web/qhsxKx-cardSend-html into master

lilei %!s(int64=4) %!d(string=hai) anos
pai
achega
338fde30a2

+ 2 - 2
.env

@@ -1,5 +1,5 @@
 NODE_ENV=production
 VUE_APP_PREVIEW=false
-VUE_APP_API_BASE_URL=https://it.zyucgj.com/zyit/
+VUE_APP_API_BASE_URL=http://carwash-store.zyucgj.com/cw-store/
 VUE_APP_VERSION=V1.0.1
-VUE_APP_PRO_NAME=洗车机运营后台
+VUE_APP_PRO_NAME=发卷中心

+ 1 - 1
.env.development

@@ -2,4 +2,4 @@ NODE_ENV=development
 VUE_APP_PREVIEW=true
 VUE_APP_API_BASE_URL=/api
 VUE_APP_VERSION=V1.0.1
-VUE_APP_PRO_NAME=洗车机运营后台-dev
+VUE_APP_PRO_NAME=发卷中心-dev

+ 2 - 2
.env.preview

@@ -1,5 +1,5 @@
 NODE_ENV=production
 VUE_APP_PREVIEW=true
-VUE_APP_API_BASE_URL=http://it.test.zyucgj.com/zyit
+VUE_APP_API_BASE_URL=http://carwash-store.test.zyucgj.com/cw-store/
 VUE_APP_VERSION=V1.0.1
-VUE_APP_PRO_NAME=洗车机运营后台-pro
+VUE_APP_PRO_NAME=发卷中心-pro

+ 205 - 23
package-lock.json

@@ -3130,8 +3130,7 @@
     "base64-js": {
       "version": "1.3.1",
       "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz",
-      "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==",
-      "dev": true
+      "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g=="
     },
     "batch": {
       "version": "0.6.1",
@@ -3424,11 +3423,29 @@
         }
       }
     },
+    "buffer-alloc": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz",
+      "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==",
+      "requires": {
+        "buffer-alloc-unsafe": "^1.1.0",
+        "buffer-fill": "^1.0.0"
+      }
+    },
+    "buffer-alloc-unsafe": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz",
+      "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg=="
+    },
+    "buffer-fill": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz",
+      "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw="
+    },
     "buffer-from": {
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
-      "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==",
-      "dev": true
+      "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A=="
     },
     "buffer-indexof": {
       "version": "1.1.1",
@@ -4057,7 +4074,6 @@
       "version": "1.9.3",
       "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
       "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
-      "dev": true,
       "requires": {
         "color-name": "1.1.3"
       }
@@ -4065,8 +4081,7 @@
     "color-name": {
       "version": "1.1.3",
       "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
-      "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
-      "dev": true
+      "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
     },
     "color-string": {
       "version": "1.5.3",
@@ -5461,6 +5476,11 @@
         "randombytes": "^2.0.0"
       }
     },
+    "dijkstrajs": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/dijkstrajs/-/dijkstrajs-1.0.1.tgz",
+      "integrity": "sha1-082BIh4+pAdCz83lVtTpnpjdxxs="
+    },
     "dir-glob": {
       "version": "2.2.2",
       "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz",
@@ -5722,8 +5742,7 @@
     "emoji-regex": {
       "version": "7.0.3",
       "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
-      "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
-      "dev": true
+      "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA=="
     },
     "emojis-list": {
       "version": "2.1.0",
@@ -8549,8 +8568,7 @@
     "ieee754": {
       "version": "1.1.13",
       "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz",
-      "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==",
-      "dev": true
+      "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg=="
     },
     "iferr": {
       "version": "0.1.5",
@@ -8958,8 +8976,7 @@
     "is-fullwidth-code-point": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
-      "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
-      "dev": true
+      "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8="
     },
     "is-generator-fn": {
       "version": "1.0.0",
@@ -10825,6 +10842,11 @@
         "merge-stream": "^1.0.1"
       }
     },
+    "js-base64": {
+      "version": "3.4.5",
+      "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.4.5.tgz",
+      "integrity": "sha512-Ub/AANierdcT8nm4ndBn3KzpZQ3MdHX4a+bwoVdjgeHCZ0ZEcP+UB4nmR4Z5lR6SH3Y+qAPmgVR0RxKJNHNHEg=="
+    },
     "js-beautify": {
       "version": "1.10.2",
       "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.10.2.tgz",
@@ -12695,8 +12717,7 @@
     "path-exists": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
-      "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
-      "dev": true
+      "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU="
     },
     "path-is-absolute": {
       "version": "1.0.1",
@@ -12858,6 +12879,11 @@
       "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==",
       "dev": true
     },
+    "pngjs": {
+      "version": "3.4.0",
+      "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz",
+      "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w=="
+    },
     "point-at-length": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/point-at-length/-/point-at-length-1.0.2.tgz",
@@ -13785,6 +13811,166 @@
       "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=",
       "dev": true
     },
+    "qrcode": {
+      "version": "1.4.4",
+      "resolved": "https://registry.npmjs.org/qrcode/-/qrcode-1.4.4.tgz",
+      "integrity": "sha512-oLzEC5+NKFou9P0bMj5+v6Z40evexeE29Z9cummZXZ9QXyMr3lphkURzxjXgPJC5azpxcshoDWV1xE46z+/c3Q==",
+      "requires": {
+        "buffer": "^5.4.3",
+        "buffer-alloc": "^1.2.0",
+        "buffer-from": "^1.1.1",
+        "dijkstrajs": "^1.0.1",
+        "isarray": "^2.0.1",
+        "pngjs": "^3.3.0",
+        "yargs": "^13.2.4"
+      },
+      "dependencies": {
+        "ansi-regex": {
+          "version": "4.1.0",
+          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
+          "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg=="
+        },
+        "ansi-styles": {
+          "version": "3.2.1",
+          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+          "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+          "requires": {
+            "color-convert": "^1.9.0"
+          }
+        },
+        "buffer": {
+          "version": "5.6.0",
+          "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz",
+          "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==",
+          "requires": {
+            "base64-js": "^1.0.2",
+            "ieee754": "^1.1.4"
+          }
+        },
+        "camelcase": {
+          "version": "5.3.1",
+          "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+          "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg=="
+        },
+        "cliui": {
+          "version": "5.0.0",
+          "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz",
+          "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==",
+          "requires": {
+            "string-width": "^3.1.0",
+            "strip-ansi": "^5.2.0",
+            "wrap-ansi": "^5.1.0"
+          }
+        },
+        "find-up": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+          "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+          "requires": {
+            "locate-path": "^3.0.0"
+          }
+        },
+        "get-caller-file": {
+          "version": "2.0.5",
+          "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+          "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="
+        },
+        "isarray": {
+          "version": "2.0.5",
+          "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
+          "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw=="
+        },
+        "locate-path": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+          "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+          "requires": {
+            "p-locate": "^3.0.0",
+            "path-exists": "^3.0.0"
+          }
+        },
+        "p-limit": {
+          "version": "2.3.0",
+          "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+          "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+          "requires": {
+            "p-try": "^2.0.0"
+          }
+        },
+        "p-locate": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
+          "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+          "requires": {
+            "p-limit": "^2.0.0"
+          }
+        },
+        "p-try": {
+          "version": "2.2.0",
+          "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+          "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="
+        },
+        "require-main-filename": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
+          "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg=="
+        },
+        "string-width": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
+          "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
+          "requires": {
+            "emoji-regex": "^7.0.1",
+            "is-fullwidth-code-point": "^2.0.0",
+            "strip-ansi": "^5.1.0"
+          }
+        },
+        "strip-ansi": {
+          "version": "5.2.0",
+          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+          "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+          "requires": {
+            "ansi-regex": "^4.1.0"
+          }
+        },
+        "wrap-ansi": {
+          "version": "5.1.0",
+          "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz",
+          "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==",
+          "requires": {
+            "ansi-styles": "^3.2.0",
+            "string-width": "^3.0.0",
+            "strip-ansi": "^5.0.0"
+          }
+        },
+        "yargs": {
+          "version": "13.3.2",
+          "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz",
+          "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==",
+          "requires": {
+            "cliui": "^5.0.0",
+            "find-up": "^3.0.0",
+            "get-caller-file": "^2.0.1",
+            "require-directory": "^2.1.1",
+            "require-main-filename": "^2.0.0",
+            "set-blocking": "^2.0.0",
+            "string-width": "^3.0.0",
+            "which-module": "^2.0.0",
+            "y18n": "^4.0.0",
+            "yargs-parser": "^13.1.2"
+          }
+        },
+        "yargs-parser": {
+          "version": "13.1.2",
+          "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz",
+          "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==",
+          "requires": {
+            "camelcase": "^5.0.0",
+            "decamelize": "^1.2.0"
+          }
+        }
+      }
+    },
     "qs": {
       "version": "6.5.2",
       "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
@@ -14233,8 +14419,7 @@
     "require-directory": {
       "version": "2.1.1",
       "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
-      "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
-      "dev": true
+      "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I="
     },
     "require-main-filename": {
       "version": "1.0.1",
@@ -14651,8 +14836,7 @@
     "set-blocking": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
-      "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
-      "dev": true
+      "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc="
     },
     "set-value": {
       "version": "2.0.1",
@@ -17145,8 +17329,7 @@
     "which-module": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
-      "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
-      "dev": true
+      "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho="
     },
     "window-size": {
       "version": "0.1.0",
@@ -17254,8 +17437,7 @@
     "y18n": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
-      "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==",
-      "dev": true
+      "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w=="
     },
     "yallist": {
       "version": "3.1.1",

+ 2 - 0
package.json

@@ -19,12 +19,14 @@
     "axios": "^0.19.0",
     "core-js": "2.6.9",
     "enquire.js": "^2.1.6",
+    "js-base64": "^3.4.5",
     "lodash.get": "^4.4.2",
     "lodash.pick": "^4.4.0",
     "md5": "^2.2.1",
     "mockjs2": "1.0.7",
     "moment": "^2.24.0",
     "nprogress": "^0.2.0",
+    "qrcode": "^1.4.4",
     "v-runtime-template": "^1.10.0",
     "viser-vue": "^2.4.6",
     "vue": "^2.6.10",

+ 1 - 1
public/index.html

@@ -5,7 +5,7 @@
     <meta http-equiv="X-UA-Compatible" content="IE=edge">
     <meta name="viewport" content="width=device-width,initial-scale=1.0">
     <link rel="icon" href="<%= BASE_URL %>logo.png">
-    <title>洗车机运营后台</title>
+    <title>智能快洗发卷中心</title>
     <style>#loading-mask{position:fixed;left:0;top:0;height:100%;width:100%;background:#fff;user-select:none;z-index:9999;overflow:hidden}.loading-wrapper{position:absolute;top:50%;left:50%;transform:translate(-50%,-100%)}.loading-dot{animation:antRotate 1.2s infinite linear;transform:rotate(45deg);position:relative;display:inline-block;font-size:64px;width:64px;height:64px;box-sizing:border-box}.loading-dot i{width:22px;height:22px;position:absolute;display:block;background-color:#1890ff;border-radius:100%;transform:scale(.75);transform-origin:50% 50%;opacity:.3;animation:antSpinMove 1s infinite linear alternate}.loading-dot i:nth-child(1){top:0;left:0}.loading-dot i:nth-child(2){top:0;right:0;-webkit-animation-delay:.4s;animation-delay:.4s}.loading-dot i:nth-child(3){right:0;bottom:0;-webkit-animation-delay:.8s;animation-delay:.8s}.loading-dot i:nth-child(4){bottom:0;left:0;-webkit-animation-delay:1.2s;animation-delay:1.2s}@keyframes antRotate{to{-webkit-transform:rotate(405deg);transform:rotate(405deg)}}@-webkit-keyframes antRotate{to{-webkit-transform:rotate(405deg);transform:rotate(405deg)}}@keyframes antSpinMove{to{opacity:1}}@-webkit-keyframes antSpinMove{to{opacity:1}}</style>
     <!-- require cdn assets css -->
     <% for (var i in htmlWebpackPlugin.options.cdn && htmlWebpackPlugin.options.cdn.css) { %>

+ 20 - 0
src/api/coupon.js

@@ -0,0 +1,20 @@
+import { axios } from '@/utils/request'
+// 分页查询优惠券列表
+export function couponFind (params) {
+  const url = `coupon/findStoreCouponPage/${params.pageNo}/${params.pageSize}`
+  delete params.pageNo
+  delete params.pageSize
+  return axios({
+    url: url,
+    method: 'post',
+    data: params
+  })
+}
+
+// 获取二维码信息
+export function couponCode (params) {
+  return axios({
+    url: `coupon/getCouponCode/${params.couponId}/${params.customerType}`,
+    method: 'get'
+  })
+}

+ 5 - 3
src/api/login.js

@@ -4,7 +4,10 @@ import { axios } from '@/utils/request'
 export function login ({ username, password }) {
   return axios({
     url: '/login',
-    headers: { 'content-type': 'application/x-www-form-urlencoded' },
+    headers: {
+      'content-type': 'application/x-www-form-urlencoded',
+      'App-Type': 2
+    },
     data: `username=${username}&password=${password}`,
     method: 'post'
   }).then(res => res.data)
@@ -57,8 +60,7 @@ export function get2step (parameter) {
 // 修改密码
 export function changePwd (parameter) {
   return axios({
-    // url: '/user/changePWD',
-    url: 'employee/changePWD',
+    url: '/user/changePWD',
     method: 'post',
     data: parameter
   })

BIN=BIN
src/assets/logo.png


+ 84 - 216
src/config/router.config.js

@@ -41,235 +41,103 @@ export const asyncRouterMap = [
       }
       ]
     },
-    // Car washing machine management center
-    {
-      path: '/CarWashManagement',
-      redirect: '/CarWashManagement/CarWashManagement',
-      component: PageView,
-      meta: {
-        title: '洗车机管理中心',
-        icon: 'setting'
-        // permission: 'M_setting_0'
-      },
-      children: [{
-        path: '/CarWashManagement/CarWashManagement',
-        name: 'CarWashManagement',
-        component: () => import('@/views/CarWashManagement/CarWashManagement.vue'),
-        meta: {
-          title: '洗车机管理',
-          icon: 'database'
-          // permission: 'M_sys_dataDictionary'
-        }
-      }]
-    },
-    // 优惠券中心
-    {
-      path: '/CouponCenter',
-      redirect: '/CouponCenter/CreateCoupons',
-      component: PageView,
-      meta: {
-        title: '优惠券中心',
-        icon: 'setting'
-        // permission: 'M_setting_0'
-      },
-      children: [{
-        path: '/CouponCenter/CreateCoupons',
-        name: 'CouponCenter',
-        component: () => import('@/views/CouponCenter/CreateCoupons.vue'),
-        meta: {
-          title: '创建优惠券',
-          icon: 'database'
-          // permission: 'M_sys_dataDictionary'
-        }
-      }]
-    },
-    {
-      path: '/Order',
-      redirect: '/Order/OrderCenter',
-      name: 'Order',
-      component: PageView,
-      meta: {
-        title: '订单中心',
-        icon: 'snippets'
-        // permission: 'M_setting_0'
-      },
-      // hideChildrenInMenu: true,
-      children: [
-        {
-          path: '/Order/OrderCenter',
-          name: 'OrderCenter',
-          component: () => import('@/views/Order/OrderCenter.vue'),
-          meta: {
-            title: '订单中心',
-            icon: 'snippets'
-          // permission: 'M_sys_dataDictionary'
-          }
-        }
-        // {
-        //   path: '/Order/OrderDetail/:id',
-        //   name: 'OrderDetail',
-        //   component: () => import('@/views/Order/OrderDetail.vue'),
-        //   meta: {
-        //     title: '订单详情',
-        //     icon: 'snippets'
-        //     // permission: 'M_sys_dataDictionary'
-        //   }
-        // }
-      ]
-    },
-    {
-      path: '/RefundRecord',
-      redirect: '/RefundRecord/RefundRecord',
-      component: PageView,
-      meta: {
-        title: '退单记录',
-        icon: 'setting'
-        // permission: 'M_setting_0'
-      },
-      children: [{
-        path: '/RefundRecord/RefundRecord',
-        name: 'RefundRecord',
-        component: () => import('@/views/RefundRecord/RefundRecord.vue'),
-        meta: {
-          title: '退单记录',
-          icon: 'setting'
-          // permission: 'M_sys_dataDictionary'
-        }
-      }
-      ]
-    },
-    {
-      path: '/CouponStatistics',
-      redirect: '/CouponStatistics/CouponStatistics',
-      component: PageView,
-      meta: {
-        title: '优惠券统计',
-        icon: 'setting'
-        // permission: 'M_setting_0'
-      },
-      children: [{
-        path: '/CouponStatistics/CouponStatisticsList',
-        name: 'CouponStatisticsList',
-        component: () => import('@/views/CouponStatistics/CouponStatisticsList.vue'),
-        meta: {
-          title: '优惠券统计',
-          icon: 'setting'
-          // permission: 'M_sys_dataDictionary'
-        }
-      },
-      {
-        path: '/CouponStatistics/CouponStatisticsDetail',
-        name: 'CouponStatisticsDetail',
-        component: () => import('@/views/CouponStatistics/CouponStatisticsDetail.vue'),
-        meta: {
-          title: '优惠券领取详情',
-          icon: 'setting'
-          // permission: 'M_sys_dataDictionary'
-        }
-      }
-      ]
-    },
     {
       path: '/AvailableCoupon',
       redirect: '/AvailableCoupon/AvailableCoupon',
       component: PageView,
+      name: 'AvailableCoupon',
       meta: {
-        title: '可使用优惠券',
-        icon: 'setting'
-        // permission: 'M_setting_0'
+        title: '可用优惠券',
+        icon: 'gift',
+        permission: 'M_coupon_0'
       },
+      hideChildrenInMenu: true,
       children: [
         {
           path: '/AvailableCoupon/AvailableCoupon',
           name: 'AvailableCoupon',
-          component: () => import(/* webpackChunkName: "auth" */ '@/views/AvailableCoupon/AvailableCoupon.vue'),
-          meta: { title: '可使用优惠券', icon: 'user' }
-        }
-      ]
-    },
-    {
-      path: '/menusAuth',
-      redirect: '/bnSetting/menusAuth',
-      component: PageView,
-      meta: { title: '菜单管理', icon: 'bars', permission: 'M_menusAuth_0' },
-      children: [
-        {
-          path: '/menusAuth/adminMenus',
-          name: 'adminMenus',
-          component: () => import(/* webpackChunkName: "bnSetting" */ '@/views/bnSetting/menu/adminMenus.vue'),
-          meta: { title: '后台菜单管理', icon: 'appstore'
-            // permission: 'M_menusAuth_adminMenus',
-          }
-        }
-      ]
-    },
-    {
-      path: '/auth',
-      redirect: '/auth/userList',
-      component: PageView,
-      meta: { title: '后台权限管理', icon: 'lock'
-        // permission: 'M_auth_0' ,
-      },
-      children: [
-        {
-          path: '/auth/userList',
-          name: 'powerUserList',
-          component: () => import(/* webpackChunkName: "auth" */ '@/views/power/user/userList.vue'),
-          meta: { title: '用户管理', icon: 'user'
-            // permission: 'M_auth_userList' ,
-          }
-        },
-        {
-          path: '/auth/roleList',
-          name: 'powerRoleList',
-          component: () => import(/* webpackChunkName: "auth" */ '@/views/power/role/roleList.vue'),
-          meta: { title: '角色管理', icon: 'solution'
-            // permission: 'M_auth_roleList',
-          }
+          component: () => import(/* webpackChunkName: "gift" */ '@/views/AvailableCoupon/AvailableCoupon.vue'),
+          meta: { title: '可用优惠券', icon: 'gift' }
         }
       ]
-    },
-    {
-      path: '/setting',
-      redirect: '/setting/userList',
-      component: PageView,
-      meta: {
-        title: '系统设置',
-        icon: 'setting'
-        // permission: 'M_setting_0'
-      },
-      children: [{
-        path: '/setting/dataDictionary',
-        name: 'powerDD',
-        component: () => import(/* webpackChunkName: "setting" */ '@/views/power/dataDictionary/dataDictionary.vue'),
-        meta: {
-          title: '数据字典管理',
-          icon: 'database'
-          // permission: 'M_sys_dataDictionary'
-        }
-      },
-      {
-        path: '/setting/register',
-        name: 'powerRegister',
-        component: () => import(/* webpackChunkName: "setting" */ '@/views/power/register/register.vue'),
-        meta: {
-          title: '参数管理',
-          icon: 'key'
-          // permission: 'M_sys_register'
-        }
-      },
-      {
-        path: '/setting/jobs',
-        name: 'powerJobs',
-        component: () => import(/* webpackChunkName: "setting" */ '@/views/power/job/jobs.vue'),
-        meta: {
-          title: '定时器',
-          icon: 'alert'
-          // permission: 'M_sys_job'
-        }
-      }
-      ]
     }
+      //   {
+      //     path: '/auth',
+      //     redirect: '/auth/userList',
+      //     component: PageView,
+      //     meta: { title: '权限管理', icon: 'lock'
+      //       // permission: 'M_auth_0' ,
+      //     },
+      //     children: [
+      //       {
+      //         path: '/auth/userList',
+      //         name: 'powerUserList',
+      //         component: () => import(/* webpackChunkName: "auth" */ '@/views/power/user/userList.vue'),
+      //         meta: { title: '用户管理', icon: 'user'
+      //           // permission: 'M_auth_userList' ,
+      //         }
+      //       },
+      //       {
+      //         path: '/auth/roleList',
+      //         name: 'powerRoleList',
+      //         component: () => import(/* webpackChunkName: "auth" */ '@/views/power/role/roleList.vue'),
+      //         meta: { title: '角色管理', icon: 'solution'
+      //           // permission: 'M_auth_roleList',
+      //         }
+      //       },
+      //       {
+      //         path: '/menusAuth/menu',
+      //         name: 'powerMenu',
+      //         component: () => import(/* webpackChunkName: "auth" */ '@/views/power/menu/menu.vue'),
+      //         meta: {
+      //           title: '菜单管理',
+      //           icon: 'profile',
+      //           permission: 'M_menusAuth_menu'
+      //         }
+      //       }
+      //     ]
+      //   },
+      //   {
+      //     path: '/setting',
+      //     redirect: '/setting/userList',
+      //     component: PageView,
+      //     meta: {
+      //       title: '系统设置',
+      //       icon: 'setting'
+      //       // permission: 'M_setting_0'
+      //     },
+      //     children: [{
+      //       path: '/setting/dataDictionary',
+      //       name: 'powerDD',
+      //       component: () => import(/* webpackChunkName: "setting" */ '@/views/power/dataDictionary/dataDictionary.vue'),
+      //       meta: {
+      //         title: '数据字典管理',
+      //         icon: 'database'
+      //         // permission: 'M_sys_dataDictionary'
+      //       }
+      //     },
+      //     {
+      //       path: '/setting/register',
+      //       name: 'powerRegister',
+      //       component: () => import(/* webpackChunkName: "setting" */ '@/views/power/register/register.vue'),
+      //       meta: {
+      //         title: '参数管理',
+      //         icon: 'key'
+      //         // permission: 'M_sys_register'
+      //       }
+      //     },
+      //     {
+      //       path: '/setting/jobs',
+      //       name: 'powerJobs',
+      //       component: () => import(/* webpackChunkName: "setting" */ '@/views/power/job/jobs.vue'),
+      //       meta: {
+      //         title: '定时器',
+      //         icon: 'alert'
+      //         // permission: 'M_sys_job'
+      //       }
+      //     }
+      //     ]
+      //   }
     ]
   },
   {

+ 20 - 19
src/main.js

@@ -6,41 +6,42 @@ import App from './App.vue'
 import router from './router'
 import store from './store/'
 import { VueAxios } from './utils/request'
-
+import QRCode from 'qrcode' // 定义生成二维码组件
+import Base64 from 'base64-js' // 定义生成二维码组件
 // mock
-//import './mock'
+// import './mock'
 
 import bootstrap from './core/bootstrap'
 import './core/use'
 import './permission' // permission control
-import './utils/filter' // global filter
+import './utils/filter'
+
+import VueCookies from 'vue-cookies' // global filter
 
 Vue.config.productionTip = false
 
 // mount axios Vue.$http and this.$http
 Vue.use(VueAxios)
-
-import VueCookies from 'vue-cookies'
 Vue.use(VueCookies)
 Vue.$cookies.config('7d')
 /**
  * 权限检查
  */
 Vue.prototype.$hasPermissions = function (value) {
- let isExist = false;
- const roles = store.getters.roles
- const permissionList = roles.permissionList
- //console.log(permissionsStr,'permissionsStr')
- if (permissionList == undefined || permissionList == null) {
-  return false;
- }
- let has = permissionList.find(item => {
-   return item == value
- })
- if (has) {
-  isExist = true;
- }
- return isExist;
+  let isExist = false
+  const roles = store.getters.roles
+  const permissionList = roles.permissionList
+  // console.log(permissionsStr,'permissionsStr')
+  if (permissionList == undefined || permissionList == null) {
+    return false
+  }
+  const has = permissionList.find(item => {
+    return item == value
+  })
+  if (has) {
+    isExist = true
+  }
+  return isExist
 }
 new Vue({
   router,

+ 1 - 0
src/store/getters.js

@@ -5,6 +5,7 @@ const getters = {
   token: state => state.user.token,
   avatar: state => state.user.avatar,
   nickname: state => state.user.name,
+  storeName: state => state.user.storeName,
   welcome: state => state.user.welcome,
   roles: state => state.user.roles,
   userInfo: state => state.user.info,

+ 6 - 0
src/store/modules/user.js

@@ -7,6 +7,7 @@ const user = {
   state: {
     token: '',
     name: '',
+    storeName: '', // 网点名称
     welcome: '',
     avatar: '',
     roles: { permissionList: [] },
@@ -31,6 +32,9 @@ const user = {
     },
     SET_INFO: (state, info) => {
       state.info = info
+    },
+    SET_STORENAME: (state, storeName) => {
+      state.storeName = storeName
     }
   },
 
@@ -44,6 +48,7 @@ const user = {
           if (res.userid) {
             Vue.ls.set('hasError', 0)
             commit('SET_TOKEN', res.userid)
+            commit('SET_STORENAME', res.orgName)
             commit('SET_NAME', { name: res.username, welcome: welcome() })
             commit('SET_AVATAR', res.avatar ? res.avatar : '')
             Vue.ls.set('rolesAccess', { permissionList: res.permCodes }, 7 * 24 * 60 * 60 * 1000)
@@ -82,6 +87,7 @@ const user = {
           resolve(error)
         }).finally(() => {
           commit('SET_NAME', { name: '', welcome: '' })
+          commit('SET_STORENAME', '')
           commit('SET_AVATAR', '')
           commit('SET_TOKEN', '')
           commit('SET_ROLES', { permissionList: [] })

+ 1 - 1
src/utils/domUtil.js

@@ -16,4 +16,4 @@ export const setDocumentTitle = function (title) {
   }
 }
 
-export const domTitle = '洗车机运营后台'
+export const domTitle = '智能快洗发卷中心'

+ 176 - 73
src/views/AvailableCoupon/AvailableCoupon.vue

@@ -1,88 +1,191 @@
 <template>
-  <!-- <a-card class="card-content">
-    <div class="AvailableCoupon-content">
-      <div class="coupon-type">
-        <div class="arc-left"></div>
-        <div class="arc-right"></div>
+  <div class="page-content">
+    <div class="card-content">
+      <div class="card-item" v-for="item in list" :key="item.id">
+        <div class="card-item-head">
+          <div>{{ item.title }}</div>
+          <div>{{ getCouponType(item.couponType) }}</div>
+        </div>
+        <div class="card-item-middle">
+          <div>{{ item.ruleDesc }}</div>
+          <div>有效期:{{ item.validDateStr }}</div>
+        </div>
+        <div class="card-item-button">
+          <a-button shape="round" size="large" @click="getCode(item)" ghost type="danger">生成领取码</a-button>
+        </div>
       </div>
-      <div class="coupon-content">
-        <div class="arc-top"></div>
-        <div class="arc-bottom"></div>
+      <div class="listNone">
+        <a-list v-if="!list.length&&status!='loading'" :data-source="[]" />
       </div>
     </div>
-  </a-card> -->
-  <a-card hoverable style="width: 240px">
-      <!-- <img
-        slot="cover"
-        alt="example"
-        src="https://os.alipayobjects.com/rmsportal/QBnOOoLaAfKPirc.png"
-      /> -->
-      <a-card-meta title="Europe Street beat">
-        <template slot="description">
-          www.instagram.com
-        </template>
-      </a-card-meta>
-      <a-card-meta title="Europe Street beat">
-        <template slot="description">
-          www.instagram.com
-        </template>
-      </a-card-meta>
-    </a-card>
+    <div class="pagination">
+      <a-pagination
+        v-if="total>list.length"
+        show-size-changer
+        :total="total"
+        :current="pageNo"
+        :pageSize="pageSize"
+        showSizeChanger
+        :pageSizeOptions="pageSizeOptions"
+        @change="pageNoChange"
+        @showSizeChange="onShowSizeChange" />
+    </div>
+    <coupon-code :data="itemData" :openModal="isShow" @close="isShow=false"></coupon-code>
+  </div>
+
 </template>
 
 <script>
+import {
+  couponFind
+} from '@/api/coupon.js'
+import couponCode from './couponCode.vue'
+export default {
+  name: 'Jobs',
+  components: { couponCode },
+  data () {
+    return {
+      status: 'loading',
+      list: [], // 列表数据
+      pageNo: 1,
+      pageSize: 6,
+      total: 0,
+      pageSizeOptions: ['6', '12', '18', '24'], // 分页每页数据
+      itemData: null, // 要生成优惠券码的优惠券数据
+      isShow: false // 是否打开优惠券弹窗
+    }
+  },
+  beforeRouteEnter (to, from, next) {
+    next(vm => {
+      vm.pageInit()
+    })
+  },
+  methods: {
+    pageInit () {
+      this.list = []
+      this.pageNo = 1
+      this.pageSize = 6
+      this.total = 0
+      this.getList()
+    },
+    // 获取列表数据
+    getList () {
+      this.status = 'loading'
+      couponFind({
+        pageNo: this.pageNo,
+        pageSize: this.pageSize
+      }).then(res => {
+        this.status = 'loadmore'
+        console.log(res, '111111111')
+        if (res.status == 200) {
+          this.list = res.data.list
+          this.total = res.data.count
+        } else {
+          this.list = []
+          this.total = 0
+        }
+      })
+    },
+    // 匹配优惠券类型 	string优惠券类型:FULLSUB满减/SUB立减/DISCOUNT折扣券/VOUCHER代金券/PROMOCODE优惠码
+    getCouponType (type) {
+      switch (type) {
+        case 'FULLSUB':
+          return '满减券'
+        case 'DISCOUNT':
+          return '折扣券'
+        case 'VOUCHER':
+          return '代金券'
+        default:
+          break
+      }
+    },
+    // 页码改变
+    pageNoChange (page, pageSize) {
+      this.pageNo = page
+      this.pageSize = pageSize
+      this.getList()
+    },
+    // 每页条数改变
+    onShowSizeChange (current, size) {
+      this.pageNo = current
+      this.pageSize = size
+      this.getList()
+    },
+    // 打开优惠券码弹窗
+    getCode (item) {
+      this.itemData = item
+      this.isShow = true
+    }
+
+  }
+}
 </script>
 
 <style lang="less">
-  .card-content{
-    height:100vh;
-    padding: 20px;
-    background-color: #fff;
-    .coupon-type{
-      width:200px;
-      height:100px;
-      background-color: red;
-      position: absolute;
-      top: 0;
-      bottom: 0;
-      left: 0;
-      right: 0;
-      border-radius:10px 10px 0 0;
-      .arc-left{
-        width: 15px;
-        height: 15px;
-        background-color: #fff;
-        /*四分之一圆*/
-        border-radius: 0 100% 0  0;
-        /*定位*/
-        position: absolute;
-        left: 0;
-        bottom: 0;
+  .page-content {
+    width: 100%;
+    .listNone{
+      width: 100%;
+      height: 100%;
+      display: flex;
+      align-items: center;
+      justify-content: center;
+    }
+  }
+
+  .card-content {
+    width: 100%;
+    display: flex;
+    flex-wrap: wrap;
+
+    .card-item {
+      width: 29%;
+      background: #FFFFFF;
+      border-radius: 5px;
+      box-shadow: 1px 2px 5px #999;
+      overflow: hidden;
+      margin: 2%;
+      display: flex;
+      flex-direction: column;
+      >div {
+        padding: 15px;
+        text-align: center;
+
+        &:first-child {
+          padding-bottom: 5px;
+        }
       }
-      .arc-right{
-        width: 15px;
-        height: 15px;
-        background-color: #fff;
-        /*四分之一圆*/
-        border-radius: 100%  0 0  0;
-        /*定位*/
-        position: absolute;
-        right: 0;
-        bottom: 0;
+
+      .card-item-head {
+        background: #F5222D;
+        color: #fff;
+        >div {
+          &:first-child {
+            font-size: 22px;
+            height: 60px;
+            display: flex;
+            align-items: center;
+            justify-content: center;
+          }
+        }
       }
+
+      .card-item-middle {
+        padding-bottom: 0;
+        flex: 1;
+        >div {
+          &:first-child {
+            font-size: 16px;
+            margin-bottom: 5px;
+          }
+        }
+      }
+
     }
-    .coupon-content{
-      width:200px;
-      height:100px;
-      background-color: #fff;
-      border:1px soild #FF0000;
-      border-radius:0 0 10px 10px;
-      position: absolute;
-      top: 100px;
-      bottom: 0;
-      left: 200px;
-      right: 0;
-    }
   }
-   
+
+  .pagination {
+    width: 100%;
+    margin-left: 2%;
+  }
 </style>

+ 175 - 0
src/views/AvailableCoupon/couponCode.vue

@@ -0,0 +1,175 @@
+<template>
+  <div>
+    <a-modal
+      v-model="isShow"
+      class-name="cashier-modal"
+      width="60%"
+      @cancel="cansel"
+      :footer="null"
+      :maskClosable="false"
+    >
+      <div class="pay-box">
+        <div class="title">
+          <span>{{ storeName }}--领券中心</span>
+        </div>
+        <div class="pay-info">
+          <span @click="getCodeUrl(1)" :class="[key==1?'checked':'']">未持卡客户</span>
+          <a-divider type="vertical" />
+          <span @click="getCodeUrl(2)" :class="[key==2?'checked':'']">VIP持卡会员</span>
+        </div>
+        <div class="pay-video">
+          <div class="pay-flash">
+            <img v-show="codeImg" :src="codeImg">
+            <a-spin class="spin" v-show="status=='loading'" tip="Loading...">
+            </a-spin>
+          </div>
+        </div>
+        <div class="pay-button">
+          <a-button icon="sync" type="dashed" block @click="getCodeUrl(key)">刷新二维码</a-button>
+        </div>
+      </div>
+    </a-modal>
+  </div>
+</template>
+
+<script>
+import { couponCode } from '@/api/coupon.js'
+import { mapGetters } from 'vuex'
+export default {
+  name: 'CouponCode',
+  props: {
+    openModal: {
+      type: Boolean,
+      default: false
+    },
+    data: {
+      type: Object,
+      default: function () {
+        return {}
+      }
+    }
+  },
+  computed: {
+    ...mapGetters(['storeName'])
+  },
+  data () {
+    return {
+      key: 1, // 当前会员类型  未持卡客户:1  VIP持卡会员:2
+      codeImg: '',
+      isShow: this.openModal,
+      status: 'loading' // 是否显示加载提示框
+    }
+  },
+  watch: {
+    openModal (newValue, oldValue) {
+      this.isShow = newValue
+    },
+    isShow (newValue, oldValue) {
+      if (!newValue) {
+        this.$emit('close')
+        this.cansel()
+      } else {
+        this.pageInit()
+      }
+    }
+  },
+  methods: {
+    pageInit () {
+      this.key = 1
+      this.codeImg = ''
+      this.getCodeUrl()
+    },
+    // 获取二维码地址
+    getCodeUrl (type) {
+      this.key = type || this.key
+      this.status = 'loading'
+      couponCode({
+        couponId: this.data.id,
+        customerType: this.key == 1 ? 'normal' : 'cardholder'
+      }).then(res => {
+        this.status = 'nomore'
+        if (res.status == 200) {
+          this.codeImg = 'data:image/png;base64,' + res.data
+        } else {
+          this.codeImg = ''
+          this.$message.error(res.message)
+        }
+      })
+    },
+    cansel () {
+      this.isShow = false
+    }
+  }
+}
+</script>
+
+<style lang="less">
+  .cashier-modal{
+        display: flex;
+        align-items: center;
+        justify-content: center;
+
+        .ivu-modal{
+            top: 0;
+        }
+    }
+  .pay-box{
+    .title{
+      text-align: center;
+      margin-bottom: 20px;
+      border-bottom: 1px solid #eee;
+      padding-bottom: 5px;
+    }
+    .pay-video{
+      text-align: center;
+      padding: 20px 0 40px;
+      p.red{
+        span{
+          color: #FF4500;
+        }
+      }
+      .redText{
+        color: red;
+        span {
+          color: #1E90FF;
+        }
+      }
+      .pay-flash{
+        width: 100%;
+        min-height: 260px;
+        position: relative;
+        // #canvas{
+        //     width: 70%!important;
+        //     height: auto!important;
+        //   }
+        img{
+          width: 70%;
+          height: 100%;
+          // border: 1px solid #eee;
+        }
+        .spin{
+          position: absolute;
+          top: 40%;
+          left: 45%;
+          z-index: 999;
+        }
+      }
+    }
+    .pay-info{
+      line-height: 30px;
+      text-align: center;
+      font-weight: 600;
+      .checked{
+        color: red;
+        border-bottom: 1px solid red;
+      }
+    }
+    .pay-button{
+      text-align: center;
+      padding: 20px 0 10px;
+      button{
+        margin: 0 10px;
+      }
+    }
+  }
+</style>

+ 0 - 700
src/views/CarWashManagement/AddCarWashModal.vue

@@ -1,700 +0,0 @@
-<template>
-  <a-modal class="CarWashModal" :title="pageType == 'add' ? '新增' : pageType == 'edit' ? '编辑' : ''" :width="1000" :footer="null" :destroyOnClose="true" @cancel="isShow=false" v-model="isShow">
-    <!-- 表单 -->
-    <a-form-model ref="ruleForm" :model="form" :rules="rules" :label-col="{ span: 6 }" :wrapper-col="{ span: 18 }">
-      <a-row :gutter="20">
-        <a-col :span="12">
-          <a-form-model-item label="网点名称" prop="name">
-            <a-input v-model="form.name" :maxLength="20" placeholder="请输入网店名称,20个字以内" />
-          </a-form-model-item>
-        </a-col>
-        <a-col :span="12">
-          <a-form-model-item label="地址" class="default-form-item form-item-required">
-            <a-row :gutter="20">
-              <a-col :span="8">
-                <a-form-model-item prop="addrProvince">
-                  <a-select v-model="form.addrProvince" placeholder="请选择省" @change="getCityList">
-                    <a-select-option v-for="item in addrProvinceList" :key="item.id" :value="item.id">{{item.name}}</a-select-option>
-                  </a-select>
-                </a-form-model-item>
-              </a-col>
-              <a-col :span="8">
-                <a-form-model-item prop="addrCity">
-                  <a-select v-model="form.addrCity" placeholder="请选择市" @change="getAreaList">
-                    <a-select-option v-for="item in addrCityList" :key="item.id" :value="item.id">{{item.name}}</a-select-option>
-                  </a-select>
-                </a-form-model-item>
-              </a-col>
-              <a-col :span="8">
-                <a-form-model-item prop="addrDistrict">
-                  <a-select v-model="form.addrDistrict" placeholder="请选择区" @change="areaCharged">
-                    <a-select-option v-for="item in addrDistrictList" :key="item.id" :value="item.id">{{item.name}}</a-select-option>
-                  </a-select>
-                </a-form-model-item>
-              </a-col>
-            </a-row>
-          </a-form-model-item>
-        </a-col>
-        <a-col :span="24">
-          <a-form-model-item label="详细地址" prop="addrDetail" :label-col="{ span: 3 }" :wrapper-col="{ span: 21 }">
-            <a-input v-model="form.addrDetail" :maxLength="32" placeholder="请输入详细地址,32个字以内" />
-          </a-form-model-item>
-        </a-col>
-        <a-col :span="12">
-          <a-form-model-item label="设备ID" prop="deviceDTOList" class="default-form-item">
-            <a-row :gutter="20">
-              <a-col :span="19">
-                <a-tag v-if="form.deviceDTOList.length > 0" color="blue">{{deviceNo}}</a-tag>
-              </a-col>
-              <a-col :span="5">
-                <a-button type="primary" size="small" class="small-btn" @click="openEquipmentModal=true">选择</a-button>
-              </a-col>
-            </a-row>
-          </a-form-model-item>
-        </a-col>
-        <a-col :span="12">
-          <a-form-model-item label="网点标签" prop="featuredServiceLabel" :rules="{required: true, message: '请选择网点标签', trigger: 'change'}">
-            <v-select ref="featuredServiceLabel" v-model="featuredServiceLabel" @change="featuredServiceLabelChange" mode="multiple" placeholder="请选择网点标签" showArrow code="STORE_LABEL"></v-select>
-          </a-form-model-item>
-        </a-col>
-        <a-col :span="12">
-          <a-form-model-item label="经度" prop="lng" class="default-form-item">
-            <a-row :gutter="20">
-              <a-col :span="17">
-                <a-input-number v-model="form.lng" :min="0" :max="999" placeholder="请输入经度坐标" class="input-number-all" />
-              </a-col>
-              <a-col :span="6">
-                <a href="https://lbs.qq.com/tool/getpoint/" target="_blank">
-                  <a-button type="primary" size="small" icon="search" class="small-btn">查询坐标</a-button>
-                </a>
-              </a-col>
-            </a-row>
-          </a-form-model-item>
-        </a-col>
-        <a-col :span="12">
-          <a-form-model-item label="纬度" prop="lat">
-            <a-input-number v-model="form.lat" :min="0" :max="999" placeholder="请输入纬度坐标" class="input-number-all" />
-          </a-form-model-item>
-        </a-col>
-        <a-col :span="12">
-          <a-form-model-item label="服务类型" prop="serviceType">
-            <a-select v-model="form.serviceType" placeholder="请选择服务类型" @change="isResetstoreItemPriceDTOList('serviceType', $event)" showArrow mode="multiple">
-              <a-select-option v-for="item in itemQueryList" :key="item.id" :value="item.id">{{item.itemName}}</a-select-option>
-            </a-select>
-          </a-form-model-item>
-        </a-col>
-        <a-col :span="12">
-          <a-form-model-item label="营业时间" class="default-form-item form-item-required">
-            <a-row :gutter="20">
-              <a-col :span="11">
-                <a-form-model-item prop="beginTime">
-                  <a-time-picker v-model="form.beginTime" @change="isResetstoreItemPriceDTOList('beginTime', $event)" format="HH:mm" placeholder="请选择开始时间" class="time-picker" />
-                </a-form-model-item>
-              </a-col>
-              <a-col :span="2">至</a-col>
-              <a-col :span="11">
-                <a-form-model-item prop="endTime">
-                  <a-time-picker v-model="form.endTime" @change="isResetstoreItemPriceDTOList('endTime', $event)" format="HH:mm" placeholder="请选择结束时间" class="time-picker" />
-                </a-form-model-item>
-              </a-col>
-            </a-row>
-          </a-form-model-item>
-        </a-col>
-        <!-- 时段价格设置  start -->
-        <a-col :span="24">
-          <a-form-model-item :label-col="{ span: 3 }" :wrapper-col="{ span: 21 }" prop="storeItemPriceDTOList">
-            <div slot="label" class="form-item-label">
-              <a-tooltip placement="right" arrow-point-at-center title="时段价格是指车主在不同时段洗车需要支付不同的价格,主要用于日间服务和夜间服务的差异化管理,达到调节流量、集客引流的效果。不同时段区间采用起始时间包含,结束时间不包含原则。例如:时段区间为06:00(含)-22:00(不含),普通洗车10元;时间区间为22:00(含)-06:00(不含),普通洗车8元。客户在6点00分01秒普通洗车为10元,客户在22点00分01秒普通洗车为8元。">
-                时段价格
-                <a-icon :style="{ fontSize: '18px', color: '#1890ff', verticalAlign: 'sub' }" type="question-circle" />
-              </a-tooltip>
-            </div>
-            <a-row :gutter="20" v-for="(item, ind) in form.storeItemPriceDTOList" :key="ind">
-              <a-col :span="9">
-                <a-row :gutter="20">
-                  <a-col :span="11">
-                    <a-form-model-item :prop="'storeItemPriceDTOList.'+ ind + '.beginTime'" :rules="{required: true, message: '请选择开始时间', trigger: 'change'}">
-                      <a-time-picker v-model="item.beginTime" disabled format="HH:mm" placeholder="请选择" class="time-picker" />
-                    </a-form-model-item>
-                  </a-col>
-                  <a-col :span="2">至</a-col>
-                  <a-col :span="11">
-                    <a-form-model-item :prop="'storeItemPriceDTOList.'+ ind + '.endTime'" :rules="{required: true, message: '请选择结束时间', trigger: 'change'}">
-                      <a-time-picker v-model="item.endTime" :default-open-value="item.beginTime" @change="isResetBelowstoreItemPriceDTOList($event, ind)" format="HH:mm" placeholder="请选择" class="time-picker" />
-                    </a-form-model-item>
-                  </a-col>
-                </a-row>
-              </a-col>
-              <a-col :span="14">
-                <a-row :gutter="20">
-                  <a-col :span="8" v-for="(priceItem, subInd) in item.currentPrices" :key="subInd">
-                    <a-form-model-item :prop="'storeItemPriceDTOList.'+ ind +'.currentPrices.'+ subInd + '.price'" :rules="{required: true, message: `请输入【${priceItem.name}】单价`, trigger: 'blur'}">
-                      <a-input-number v-model="priceItem.price" :min="0" :max="999999" :placeholder="'【'+ priceItem.name +'】单价'" class="input-number-s" />
-                      <span class="unit">元</span>
-                    </a-form-model-item>
-                  </a-col>
-                </a-row>
-              </a-col>
-              <a-col :span="1">
-                <a-icon type="delete" title="删除" @click="delstoreItemPriceDTOList(ind)" :style="{ fontSize: '20px', color: 'red' }" />
-              </a-col>
-            </a-row>
-            <a-button type="dashed" @click="setTimeInterval" class="setTimeInterval"><a-icon type="plus" />添加时段</a-button>
-          </a-form-model-item>
-        </a-col>
-        <!-- 时段价格设置  end -->
-        <a-col :span="24">
-          <a-form-model-item label="路线指引" prop="guidance" :label-col="{ span: 3 }" :wrapper-col="{ span: 21 }">
-            <editor ref="editor" @on-change="editorChange" :cache="false" v-model="form.guidance"></editor>
-          </a-form-model-item>
-        </a-col>
-        <a-col :span="24">
-          <a-form-model-item label="温馨提示" prop="reminder" :label-col="{ span: 3 }" :wrapper-col="{ span: 21 }">
-            <a-textarea ref="reminder" v-model="form.reminder" :maxLength="128" :auto-size="{ minRows: 3, maxRows: 5 }" placeholder="请输入温馨提示,128个字以内" />
-          </a-form-model-item>
-        </a-col>
-        <a-col :span="24">
-          <a-form-model-item :label-col="{ span: 3 }" :wrapper-col="{ span: 21 }" class="btn-cont">
-            <a-button type="primary" @click="onSubmit">保存</a-button>
-            <a-button class="cancel" @click="cancel">取消</a-button>
-          </a-form-model-item>
-        </a-col>
-      </a-row>
-    </a-form-model>
-    
-    <!-- 选择设备 -->
-    <choose-equipment
-      :openEquipmentModal="openEquipmentModal"
-      @close="closeChooseEquipment"
-    />
-    
-  </a-modal>
-</template>
-
-<script>
-  import { VSelect } from '@/components'
-  import ChooseEquipment from './ChooseEquipment.vue'
-  import Editor from '@/components/WEeditor'
-  import moment from 'moment'
-  import { getProvince, getCityByPro, getDistrictByCity } from '@/api/lookup'
-  import { itemQuery, storeSave, storeFind, findItem } from '@/api/car-wash'
-  export default{
-    name: 'AddCarWashModal',
-    components: { VSelect, Editor, ChooseEquipment },
-    props: {
-      openModal: {  //  弹框是否展示
-        type: Boolean,
-        default: false
-      },
-      pageType: {  //  页面类型
-        type: String,
-        default: ''
-      },
-      carWashId: {  //  网点id
-        type: String,
-        default: ''
-      }
-    },
-    data(){
-      return{
-        isShow: this.openModal,  //  弹框是否展示
-        form: {
-          name: '',  //  网点名称
-          addrProvince: undefined,  //  省  编码
-          addrProvinceName: '',  //  省
-          addrCity: undefined,  //  市  编码
-          addrCityName: '',  //  市
-          addrDistrict: undefined,  //  区  编码
-          addrDistrictName: '',  //  区
-          addrDetail: '',  //  详细地址
-          deviceDTOList: [],  //  设备序列号
-          featuredServiceLabel: '',  //  网点标签
-          lng: '',  //  经度
-          lat: '',  //  纬度
-          serviceType: [],  //  服务类型
-          beginTime: null,  //  营业时间开始时间
-          endTime: null,  //  营业时间结束时间
-          storeItemPriceDTOList: [],  //  时段价格
-          guidance: '',  //  路线指引
-          reminder: ''  //  温馨提示
-        },
-        rules: {
-          name: [
-            { required: true, message: '请输入网店名称', trigger: 'blur' }
-          ],
-          addrProvince: [
-            { required: true, message: '请选择所在省份', trigger: 'change' }
-          ],
-          addrCity: [
-            { required: true, message: '请选择所在市', trigger: 'change' }
-          ],
-          addrDistrict: [
-            { required: true, message: '请选择所在区县', trigger: 'change' }
-          ],
-          addrDetail: [
-            { required: true, message: '请输入详细地址', trigger: 'blur' }
-          ],
-          deviceDTOList: [
-            { required: true, message: '请选择设备', trigger: 'change' }
-          ],
-          lng: [
-            { required: true, message: '请输入经度', trigger: 'blur' }
-          ],
-          lat: [
-            { required: true, message: '请输入纬度', trigger: 'blur' }
-          ],
-          serviceType: [
-            { required: true, message: '请选择服务类型', trigger: 'change' }
-          ],
-          beginTime: [
-            { required: true, message: '请选择开始时间', trigger: 'change' }
-          ],
-          endTime: [
-            { required: true, message: '请选择结束时间', trigger: 'change' }
-          ],
-          storeItemPriceDTOList: [
-            { required: true, message: '请设置时段价格', trigger: 'change' }
-          ]
-        },
-        openEquipmentModal: false  ,//  选择设备  弹框展示状态
-        serviceType: [],  //  服务类型  change前的值
-        beginTime: null,  //  营业时间开始时间  change前的值
-        endTime: null,  //  营业时间结束时间  change前的值
-        subendTime: [],  //  时段价格  时段区间结束时间  change前的值
-        featuredServiceLabel: [],  //  网点标签
-        addrProvinceList: [],  //  省列表数据
-        addrCityList: [],  //  市列表数据
-        addrDistrictList: [],  //  区县列表数据
-        itemQueryList: [],  //  服务类型列表数据
-        deviceNo: '',  //  已选设备序列号
-      }
-    },
-    methods: {
-      moment,
-      // 文本编辑器  change
-      editorChange (html, text) {
-        this.form.guidance = html
-      },
-      // 网点详情
-      getCarWashInfo(id){
-        storeFind({ id: id }).then(res => {
-          if(res.status == 200){
-            // 查询门店的服务时段价格
-            findItem({ id: id }).then(result => {
-              if(result.status == 200){
-                let carWashInfo = Object.assign(res.data, {storeItemPriceDTOList: result.data})
-                this.setVal(carWashInfo)
-              }
-            })
-          }
-        })
-      },
-      //  表单赋值
-      setVal(item){
-        const _this = this
-        console.log(item)
-        let arr = [ 'id', 'name', 'addrProvince', 'addrProvinceName', 'addrCityName', 'addrDistrictName', 'featuredServiceLabel', 'lng', 'lat', 'serviceType', 'guidance', 'reminder' ]
-        arr.map(k => {
-          this.form[k] = item[k]
-        })
-        this.getCityList(item.addrProvince)  //  获取市区下拉数据
-        this.form.addrCity = item.addrCity  //  市区赋值
-        this.getAreaList(item.addrCity)  //  获取区县下拉数据
-        this.form.addrDistrict = item.addrDistrict  //  区县赋值
-        this.form.addrDetail = item.addrDetail  //  详细地址赋值
-        this.form.deviceDTOList = [{id: item.deviceVOList[0].id}]  //  设备
-        this.deviceNo = item.deviceVOList[0].deviceNo  //  设备序列号
-        this.featuredServiceLabel = item.featuredServiceLabel.split(',')  //  网点标签
-        this.form.beginTime = moment(item.beginTime, 'HH:mm')  //  营业时间  开始时间
-        this.form.endTime = moment(item.endTime, 'HH:mm')  //  营业时间  结束时间
-        this.setPeriodPrice(item.storeItemPriceDTOList)  // 时段价格
-        this.isShow ? this.$refs.editor.setHtml(item.guidance) : null  //  文本编辑器赋值
-      },
-      // 时段价格  赋值处理
-      setPeriodPrice(storeItemPriceDTOList){
-        let arrInd = 0
-        this.form.storeItemPriceDTOList = []
-        for (var key in storeItemPriceDTOList) {
-          if (storeItemPriceDTOList.hasOwnProperty(key)) {
-            this.form.storeItemPriceDTOList.push({
-              beginTime: moment(key.split(',')[0], 'HH:mm'),
-              endTime: moment(key.split(',')[1], 'HH:mm'),
-              currentPrices: []
-            })
-            let idArr = []
-            storeItemPriceDTOList[key].map((k, ind) => {
-              this.form.storeItemPriceDTOList[arrInd].currentPrices.push({ name: k.itemName, price: k.currentPrice, itemId: k.itemId })
-              idArr.push(k.itemId)
-            })
-            this.form.serviceType = idArr  //  服务类型
-            arrInd++
-          }
-        }
-      },
-      //  保存
-      onSubmit(){
-        const _this = this
-        _this.$refs.ruleForm.validate(valid => {
-          if (valid) {
-            let formData = JSON.parse(JSON.stringify(_this.form))
-            //  校验营业时间结束时间是否与时段价格一致
-            let endTime = formData.storeItemPriceDTOList[formData.storeItemPriceDTOList.length - 1].endTime
-            if(_this.timeFormat(formData.endTime) != _this.timeFormat(endTime)){
-              _this.$message.error('时段价格与营业时间不一致,请修改后再保存!')
-              return
-            }
-            formData.beginTime = _this.timeFormat(formData.beginTime)
-            formData.endTime = _this.timeFormat(formData.endTime)
-            let arr = []
-            formData.storeItemPriceDTOList.map(item => {
-              item.currentPrices.map(k => {
-                arr.push({
-                  beginTime: _this.timeFormat(item.beginTime),
-                  endTime: _this.timeFormat(item.endTime),
-                  itemId: k.itemId,
-                  name: k.name,
-                  currentPrice: k.price
-                })
-              })
-            })
-            formData.storeItemPriceDTOList = arr
-            //  提交前时间格式还需转换
-            delete formData.serviceType
-            storeSave(formData).then(res => {
-              if(res.status == 200){
-                _this.$message.success(res.message)
-                _this.$emit('success')
-              }else{
-                _this.$message.error(res.message)
-              }
-            })
-          } else {
-            return false
-          }
-        })
-      },
-      // 时间格式转换
-      timeFormat (time) {
-        const dateTime = new Date(time)
-        const hour = dateTime.getHours()
-        const minute = dateTime.getMinutes()
-        let timeStr = this.addZero(hour) + ':' + this.addZero(minute)
-        return timeStr
-      },
-      // 时间0补位
-      addZero (v) {
-        return v < 10 ? '0' + v : v
-      },
-      // 取消
-      cancel(){
-        this.resetForm()
-        this.isShow = false
-      },
-      // 重置表单数据
-      resetForm(){
-        this.serviceType = []  //  服务类型  change前的值
-        this.beginTime = null  //  营业时间开始时间  change前的值
-        this.endTime = null  //  营业时间结束时间  change前的值
-        this.subendTime = []  //  时段价格  时段区间结束时间  change前的值
-        this.featuredServiceLabel = []  //  网点标签
-        this.deviceNo = ''  //  已选设备序列号
-        // this.$refs.ruleForm.resetFields()    无效
-        this.form.id = null
-        this.form.name = ''  //  网点名称
-        this.form.addrProvince = undefined  //  省  编码
-        this.form.addrProvinceName = ''  //  省
-        this.form.addrCity = undefined  //  市  编码
-        this.form.addrCityName = ''  //  市
-        this.form.addrDistrict = undefined  //  区  编码
-        this.form.addrDistrictName = ''  //  区
-        this.form.addrDetail = ''  //  详细地址
-        this.form.deviceDTOList = []  //  设备序列号
-        this.form.featuredServiceLabel = ''  //  网点标签
-        this.form.lng = ''  //  经度
-        this.form.lat = ''  //  纬度
-        this.form.serviceType = []  //  服务类型
-        this.form.beginTime = null  //  营业时间开始时间
-        this.form.endTime = null  //  营业时间结束时间
-        this.form.storeItemPriceDTOList = []  //  时段价格
-        this.form.guidance = ''  //  路线指引
-        this.form.reminder = ''  //  温馨提示
-      },
-      // 是否重置时段价格 (更改服务类型、营业开始结束时间)
-      isResetstoreItemPriceDTOList(type, val){
-        console.log(type, val)
-        // type: serviceType  服务类型  beginTime  营业时间  开始时间  endTime  营业时间  结束时间
-        const _this = this
-        setTimeout(()=>{
-          if(_this.form.storeItemPriceDTOList.length != 0){
-            _this.$confirm({
-              title: '提示',
-              content: '更改后已设置的时段价格将会全部清空,确定要更改吗?',
-              onOk() {
-                type == 'serviceType' ? _this.serviceType = val : type == 'beginTime' ? _this.beginTime = val : _this.endTime = val
-                _this.form.storeItemPriceDTOList = []
-              },
-              onCancel() {
-                type == 'serviceType' ? _this.form.serviceType = _this.serviceType : type == 'beginTime' ? _this.form.beginTime = _this.beginTime : _this.form.endTime = _this.endTime
-              },
-            })
-          }else{
-            type == 'serviceType' ? _this.serviceType = val : type == 'beginTime' ? _this.beginTime = val : _this.endTime = val
-          }
-        },0)
-      },
-      // 是否重置时段价格 (更改时段价格区间结束时间)
-      isResetBelowstoreItemPriceDTOList(val, ind){
-        const _this = this
-        // 更改已设置过的时段时间(因为有下一个时段的前提是当前时段结束时间已设置)
-        if(this.form.storeItemPriceDTOList[ind + 1]){
-          _this.$confirm({
-            title: '提示',
-            content: '更改已设置过的时段区间,其之后的时段区间将会被清空,确定要更改吗?',
-            onOk() {
-              _this.subendTime[ind] = val
-              _this.form.storeItemPriceDTOList.splice(ind + 1, _this.form.storeItemPriceDTOList.length - Number(ind + 1))
-            },
-            onCancel() {
-              _this.form.storeItemPriceDTOList[ind].endTime = _this.subendTime[ind]
-            },
-          })
-        }else{
-          _this.subendTime[ind] = val
-        }
-      },
-      //  选择设备
-      closeChooseEquipment(val, no){
-        if(val){
-          this.form.deviceDTOList = [{id: val}]
-          this.deviceNo = no
-        }
-        this.openEquipmentModal = false
-      },
-      //  设置时段价格
-      setTimeInterval(){
-        if(this.form.serviceType.length == 0){
-          this.$message.error('请先选择服务类型')
-          return
-        }
-        if(!this.form.beginTime){
-          this.$message.error('请先选择营业时间开始时间')
-          return
-        }
-        if(!this.form.endTime){
-          this.$message.error('请先选择营业时间结束时间')
-          return
-        }
-        let arr = {}
-        // 时段价格开始时间
-        let timeStr = ''
-        if(this.form.storeItemPriceDTOList.length == 0){
-          timeStr = this.form.beginTime.format('HH:mm')
-        }else{
-          timeStr = this.form.storeItemPriceDTOList[this.form.storeItemPriceDTOList.length - 1].endTime
-          if(!timeStr){
-            this.$message.error('请先选择时段价格 - 第'+ this.form.storeItemPriceDTOList.length +'个时段的结束时间')
-            return
-          }
-        }
-        arr.beginTime = moment(timeStr, 'HH:mm')
-        arr.endTime = null
-        arr.currentPrices = []
-        this.form.serviceType.map((item, index) => {
-          let i = this.itemQueryList.findIndex(k => k.id == item)
-          arr.currentPrices.push({ name: this.itemQueryList[i].itemName, price: '', itemId: item })
-        })
-        this.form.storeItemPriceDTOList.push(arr)
-      },
-      // 删除时段价格
-      delstoreItemPriceDTOList(ind){
-        const _this = this
-        let msg = Number(ind + 1) == _this.form.storeItemPriceDTOList.length ? '确定要删除该时段吗?' : '确定要删除该时段以及其之后已设置的时段吗?'
-        _this.$confirm({
-          title: '提示',
-          content: msg,
-          onOk() {
-            _this.form.storeItemPriceDTOList.splice(ind, _this.form.storeItemPriceDTOList.length - ind)
-          }
-        })
-      },
-      // 网点标签  change
-      featuredServiceLabelChange(val){
-        this.form.featuredServiceLabel = val.join(',')
-      },
-      // 获取服务类型列表
-      getItemQuery(){
-        itemQuery({
-          pageNo: 1,
-          pageSize: 1000
-        }).then(res => {
-          if(res.status == 200){
-            this.itemQueryList = res.data.list || []
-          }else{
-            this.itemQueryList = []
-          }
-        })
-      },
-      // 获取省列表'
-      getProvinceList() {
-        const _this = this
-        getProvince().then(res => {
-          if (res.status == 200) {
-            _this.addrProvinceList = res.data || []
-          } else {
-            _this.addrProvinceList = []
-          }
-        })
-      },
-      // 获取城市列表
-      getCityList (val) {
-        this.addrCityList = []
-        this.addrDistrictList = []
-        this.form.addrCity = undefined
-        this.form.addrDistrict = undefined
-        this.form.addrDetail = ''
-        if (val == null || val == '') {
-          this.form.addrProvinceName = ''
-        } else {
-          for (let i = 0; i < this.addrProvinceList.length; i++) {
-            if (this.addrProvinceList[i].id == val) {
-              this.form.addrProvinceName = this.addrProvinceList[i].name
-              break
-            }
-          }
-          this.getCityListRequest(val)
-        }
-      },
-      getCityListRequest (val) {
-        const _this = this
-        getCityByPro({id: val}).then(res => {
-          if (res.status == 200) {
-            _this.addrCityList = res.data || []
-          } else {
-            _this.addrCityList = []
-          }
-        })
-      },
-      // 获取区县列表
-      getAreaList (val) {
-        this.addrDistrictList = []
-        this.form.addrDistrict = undefined
-        this.form.addrDetail = ''
-        if (val == null || val == '') {
-          this.form.addrCityName = ''
-        } else {
-          for (let i = 0; i < this.addrCityList.length; i++) {
-            if (this.addrCityList[i].id == val) {
-              this.form.addrCityName = this.addrCityList[i].name
-              break
-            }
-          }
-          this.getAreaListRequest(val)
-        }
-      },
-      getAreaListRequest (val) {
-        const _this = this
-        getDistrictByCity({id: val}).then(res => {
-          if (res.status == 200) {
-            _this.addrDistrictList = res.data || []
-          } else {
-            _this.addrDistrictList = []
-          }
-        })
-      },
-      // 区县变更
-      areaCharged (val) {
-        if (val == null || val == '') {
-          this.form.addrDistrictName = ''
-        } else {
-          for (let i = 0; i < this.addrDistrictList.length; i++) {
-            if (this.addrDistrictList[i].id == val) {
-              this.form.addrDistrictName = this.addrDistrictList[i].name
-              break
-            }
-          }
-        }
-        this.form.addrDetail = ''
-      }
-    },
-    watch: {
-      //  父页面传过来的弹框状态
-      openModal (newValue, oldValue) {
-        this.isShow = newValue
-      },
-      //  重定义的弹框状态
-      isShow (val){
-        if (!val){
-          this.$emit('close')
-        }else{
-          this.resetForm()  //  重置表单数据
-          this.getProvinceList()  //  获取省下拉
-          this.getItemQuery()  //  服务类型  列表
-        }
-      },
-      carWashId (newValue, oldValue){
-        console.log(newValue,'-----新增编辑')
-        if(newValue){
-          this.getCarWashInfo(newValue)
-        }
-      }
-    }
-  }
-</script>
-
-<style lang="less">
-  .CarWashModal{
-    .default-form-item{
-      margin-bottom: 0;
-    }
-    .form-item-label{
-        display: inline-block;
-        cursor: pointer;
-    }
-    .form-item-required{
-      .ant-form-item-label{
-        label:before{
-          display: inline-block;
-          margin-right: 4px;
-          color: #f5222d;
-          font-size: 14px;
-          font-family: SimSun, sans-serif;
-          line-height: 1;
-          content: '*';
-        }
-      }
-    }
-    .small-btn{
-      background-color: #19be6b;
-      font-size: 13px;
-    }
-    .small-btn.ant-btn-primary:focus, .small-btn.ant-btn-primary:hover{
-      background-color: #19be6b;
-    }
-    .time-picker{
-      width: 100%;
-    }
-    .btn-cont{
-      text-align: center;
-      .cancel{
-        margin-left: 10px;
-      }
-    }
-    .setTimeInterval{
-      width: 40%;
-      color: #19be6b;
-    }
-    .input-number-all{
-      width: 100%;
-    }
-    .input-number-s{
-      width: 90%;
-    }
-    .unit{
-      display: inline-block;
-      width: 10%;
-      text-align: right;
-      padding-left: 5px;
-      box-sizing: border-box;
-    }
-  }
-</style>

+ 0 - 311
src/views/CarWashManagement/CarWashManagement.vue

@@ -1,311 +0,0 @@
-<template>
-  <a-card class="CarWashManagement" :bordered="false">
-    <!-- 搜索条件 -->
-    <div class="table-page-search-wrapper">
-      <a-form layout="inline">
-        <a-row :gutter="48">
-          <a-col :span="6">
-            <a-form-item class="search-item" label="网点名称">
-              <a-input v-model.trim="queryParam.name" placeholder="请输入网点名称" @pressEnter="$refs.table.refresh(true)" allowClear/>
-            </a-form-item>
-          </a-col>
-          <a-col :span="6">
-            <a-form-item class="search-item" label="营业状态">
-              <v-select ref="businessStatus" allowClear placeholder="请选择营业状态" v-model="queryParam.businessStatus" code="STORE_BUSINESS_STATUS"></v-select>
-            </a-form-item>
-          </a-col>
-          <a-col :span="6">
-            <a-form-item class="search-item" label="设备状态">
-              <v-select ref="deviceStatus" allowClear placeholder="请选择设备状态" v-model="queryParam.deviceDTO.deviceStatus" code="DEVICE_STATUS"></v-select>
-            </a-form-item>
-          </a-col>
-          <a-col :span="6">
-            <a-form-item class="search-item" label="省">
-              <a-select v-model="queryParam.addrProvince" placeholder="请选择省" @change="getCityList" allowClear>
-                <a-select-option v-for="item in addrProvinceList" :key="item.id" :value="item.id">{{item.name}}</a-select-option>
-              </a-select>
-            </a-form-item>
-          </a-col>
-          <a-col :span="6">
-            <a-form-item class="search-item" label="市">
-              <a-select v-model="queryParam.addrCity" placeholder="请选择市" @change="getAreaList" allowClear>
-                <a-select-option v-for="item in addrCityList" :key="item.id" :value="item.id">{{item.name}}</a-select-option>
-              </a-select>
-            </a-form-item>
-          </a-col>
-          <a-col :span="6">
-            <a-button type="primary" class="search-btn" @click="$refs.table.refresh(true)">查询</a-button>
-            <a-button type="" @click="reset">重置</a-button>
-          </a-col>
-        </a-row>
-      </a-form>
-    </div>
-    <!-- 新建 -->
-    <div class="table-operator">
-      <a-button type="primary" icon="plus" @click="modalHandle('add')">新建</a-button>
-    </div>
-    <!-- 表格列表 -->
-    <s-table ref="table" size="default" rowKey="id" :columns="columns" :data="loadData" bordered >
-      <!-- 营业时间 -->
-      <template slot="businessHours" slot-scope="text, record">{{ record.beginTime.substr(0,5) + '-' + record.endTime.substr(0,5) }}</template>
-      <!-- 设备状态 -->
-      <template slot="deviceStatus" slot-scope="text, record">{{ record.deviceVOList ? $refs.deviceStatus.getNameByCode(record.deviceVOList[0].deviceStatus) : '-' }}</template>
-      <!-- 营业状态 -->
-      <template slot="businessStatus" slot-scope="text, record">{{ record.businessStatus ? $refs.businessStatus.getNameByCode(record.businessStatus) : '-' }}</template>
-      <!-- 操作 -->
-      <template slot="action" slot-scope="text, record">
-        <a-tooltip placement="left" trigger="click" overlayClassName="btn-cont">
-          <template slot="title">
-            <div class="btn-set-cont">
-              <p class="set-sub-btn normal"><a-icon type="check-circle" class="icon" />正常营业</p>
-              <p class="set-sub-btn suspension"><a-icon type="pause-circle" class="icon" />暂停营业</p>
-              <p class="set-sub-btn soon"><a-icon type="play-circle" class="icon" />即将开业</p>
-            </div>
-          </template>
-          <a-icon type="setting" title="设置" :style="{ fontSize: '20px', color: '#19be6b', padding: '0 10px' }" />
-        </a-tooltip>
-        <a-icon type="edit" title="编辑" @click="modalHandle('edit', record)" :style="{ fontSize: '20px', color: '#1890FF', padding: '0 10px' }" />
-        <a-icon type="eye" title="查看详情" @click="modalHandle('details', record)" :style="{ fontSize: '20px', color: '#e29e14', padding: '0 10px' }" />
-        <a-icon type="delete" title="删除" @click="del(record)" :style="{ fontSize: '20px', color: 'red', padding: '0 10px' }" />
-        <a-icon type="qrcode" title="查看小程序码" @click="isQrCodeModal=true" :style="{ fontSize: '20px', color: '#e29e14', padding: '0 10px' }" />
-      </template>
-    </s-table>
-    
-    <!-- 新增/编辑 洗车机 -->
-    <add-car-wash-modal
-      :openModal="openModal"
-      :pageType="pageType"
-      :carWashId="carWashId"
-      @success="carWashSubmit"
-      @close="openModal=false"
-    />
-    <!-- 查看详情 洗车机 -->
-    <details-car-wash-modal
-      :openModal="openDetailsModal"
-      :carWashId="carWashId"
-      @close="openDetailsModal=false"
-    />
-    <!-- 查看小程序码 -->
-    <a-modal class="qrCodeModal" title="查看小程序码" :width="500" :footer="null" :destroyOnClose="true" @cancel="isQrCodeModal=false" v-model="isQrCodeModal">
-      <img :src="qrCode" class="qrCode" />
-    </a-modal>
-  </a-card>
-</template>
-
-<script>
-  import { STable, VSelect } from '@/components'
-  import AddCarWashModal from './AddCarWashModal.vue'
-  import DetailsCarWashModal from './DetailsCarWashModal.vue'
-  import { getProvince, getCityByPro } from '@/api/lookup'
-  import { storeQuery, storeFind, findItem, storeDel } from '@/api/car-wash'
-  export default{
-    name: 'CarWashManagement',
-    components: { STable, VSelect, AddCarWashModal, DetailsCarWashModal },
-    data(){
-      return{
-        queryParam: {
-          name: '',  //  网点名称
-          businessStatus: '',  //  营业状态
-          deviceDTO: { deviceStatus: '' },  //  设备状态
-          addrProvince: undefined,  //  省
-          addrCity: undefined  //  市
-        },
-        columns: [
-          { title: '创建时间', dataIndex: 'createDate', width: '100', align: 'center' },
-          { title: '设备ID', dataIndex: 'deviceVOList[0].deviceNo', width: '100', align: 'center' },
-          { title: '网点名称', dataIndex: 'name', width: '100', align: 'center' },
-          { title: '省', dataIndex: 'addrProvinceName', width: '100', align: 'center' },
-          { title: '市', dataIndex: 'addrCityName', width: '100', align: 'center' },
-          { title: '地址', dataIndex: 'addrDetail', width: '100', align: 'center' },
-          { title: '营业时间', scopedSlots: {customRender: 'businessHours'}, width: '100', align: 'center' },
-          { title: '设备状态', scopedSlots: {customRender: 'deviceStatus'}, width: '100', align: 'center' },
-          { title: '营业状态', scopedSlots: {customRender: 'businessStatus'}, width: '100', align: 'center' },
-          { title: '操作', scopedSlots: {customRender: 'action'}, width: '265', align: 'center' }
-        ],
-        // 加载数据方法 必须为 Promise 对象
-        loadData: parameter => {
-          return storeQuery(Object.assign(parameter, this.queryParam)).then(res => {
-            const no = (res.data.pageNo - 1) * res.data.pageSize
-            for (let i = 0; i < res.data.list.length; i++) {
-              const _item = res.data.list[i]
-              _item.no = no + i + 1
-            }
-            return res.data
-          })
-        },
-        openModal: false,  //  新增/编辑 洗车机  弹框展示状态
-        pageType: '',  //  新增/编辑 洗车机  页面类型
-        openDetailsModal: false,  //  查看详情 洗车机  弹框展示状态
-        addrProvinceList: [],  //  省列表数据
-        addrCityList: [],  //  市列表数据
-        isQrCodeModal: false,  //  查看小程序码   弹框展示状态
-        qrCode: '',  //  小程序码
-        carWashId: '',  //  网点id
-      }
-    },
-    methods: {
-      //  新建/编辑/查看
-      modalHandle(type, item){
-        this.pageType = type
-        // this.carWashId = (type == 'edit' || type == 'details') ? String(item.id) : type == 'add' ? '' : ''
-        // type == 'add' || type == 'edit' ? this.openModal = true : this.openDetailsModal = true
-        if(type == 'add'){
-          this.carWashId = ''
-          this.openModal = true
-          this.openDetailsModal = false
-        }else if(type == 'edit'){
-          this.carWashId = String(item.id)
-          this.openModal = true
-          this.openDetailsModal = false
-        }else if(type == 'details'){
-          this.carWashId = String(item.id)
-          this.openDetailsModal = true
-          this.openModal = false
-        }
-      },
-      // 新增编辑  提交成功
-      carWashSubmit(){
-        this.$refs.table.refresh(true)
-        this.openModal = false
-      },
-      // 删除
-      del(item){
-        const _this = this
-        _this.$confirm({
-          title: '提示',
-          content: '确定要删除吗?',
-          onOk () {
-            storeDel({ id: item.id }).then(res => {
-              console.log(res)
-              if(res.status == 200){
-                _this.$message.success(res.message)
-                _this.$refs.table.refresh(true)
-              }else{
-                _this.$message.error(res.message)
-              }
-            })
-          }
-        })
-      },
-      //  重置
-      reset(){
-        this.queryParam = {
-          name: '',  //  网点名称
-          businessStatus: '',  //  营业状态
-          deviceDTO: { deviceStatus: '' },  //  设备状态
-          addrProvince: undefined,  //  省
-          addrCity: undefined  //  市
-        }
-        this.$refs.table.refresh(true)
-      },
-      // 获取省列表
-      getProvinceList() {
-        const _this = this
-        getProvince().then(res => {
-          if (res.status == 200) {
-            _this.addrProvinceList = res.data || []
-          } else {
-            _this.addrProvinceList = []
-          }
-        })
-      },
-      // 获取城市列表
-      getCityList (val) {
-        this.addrCityList = []
-        this.queryParam.addrCity = undefined
-        if (val == null || val == '') {
-          this.addrProvinceName = ''
-        } else {
-          for (let i = 0; i < this.addrProvinceList.length; i++) {
-            if (this.addrProvinceList[i].id == val) {
-              this.addrProvinceName = this.addrProvinceList[i].name
-              break
-            }
-          }
-          this.getCityListRequest(val)
-        }
-      },
-      getCityListRequest (val) {
-        getCityByPro({id: val}).then(res => {
-          if (res.status == 200) {
-            this.addrCityList = res.data || []
-          } else {
-            this.addrCityList = []
-          }
-        })
-      },
-      // 获取区县列表
-      getAreaList (val) {
-        if (val == null || val == '') {
-          this.addrCityName = ''
-        } else {
-          for (let i = 0; i < this.addrCityList.length; i++) {
-            if (this.addrCityList[i].id == val) {
-              this.addrCityName = this.addrCityList[i].name
-              break
-            }
-          }
-        }
-      }
-    },
-    mounted(){
-      //  获取省下拉
-      this.getProvinceList()
-    }
-  }
-</script>
-
-<style lang="less">
-  .CarWashManagement{
-    .table-page-search-wrapper{
-      .search-btn{
-        margin-right: 10px;
-      }
-    }
-    .qrCode{
-      display: block;
-      width: 100%;
-      max-width: 100%;
-    }
-  }
-  .btn-cont{
-    .ant-tooltip-inner{
-      background-color: #fff;
-    }
-    .ant-tooltip-arrow:before{
-      background-color: #fff;
-    }
-    .btn-set-cont{
-      .set-sub-btn{
-        padding: 5px 15px 6px;
-        font-size: 12px;
-        border: 1px dashed #dcdee2;
-        border-radius: 4px;
-        margin: 0;
-        cursor: pointer;
-      }
-      .normal{
-        color: rgb(0, 204, 0);
-        border-color: rgb(0, 204, 0);
-        .icon{
-          margin-right: 5px;
-        }
-      }
-      .suspension{
-        color: rgb(255, 85, 0);
-        border-color: rgb(255, 85, 0);
-        margin: 7px 0;
-        .icon{
-          margin-right: 5px;
-        }
-      }
-      .soon{
-        color: #2d8cf0;
-        border-color: #2d8cf0;
-        .icon{
-          margin-right: 5px;
-        }
-      }
-    }
-  }
-</style>

+ 0 - 146
src/views/CarWashManagement/ChooseEquipment.vue

@@ -1,146 +0,0 @@
-<template>
-  <a-modal class="CarWashEquipmentModal" title="选择设备" :width="600" :footer="null" :destroyOnClose="true" @cancel="modalIsShow=false" v-model="modalIsShow">
-    <a-input-search placeholder="请输入设备序列号" enter-button="查询" @search="onSearch" class="input-search" />
-    <a-radio-group v-model="equipment" @change="onChange" class="radio-group">
-      <a-radio :style="radioStyle" v-for="(item,index) in equipmentList" :key="index" :value="item.id" :disabled="item.binding==1">
-        <div class="radio-group-item">
-          <p class="item-label">{{item.deviceNo}}</p>
-          <p :class="['item-status', item.binding == 1 ? 'ybind' : '']">{{item.binding == 0 ? '绑定' : '已绑定'}}</p>
-        </div>
-      </a-radio>
-    </a-radio-group>
-    <!-- 分页 -->
-    <a-pagination class="pagination-s" show-size-changer :current="pageNo" :pageSize.sync="pageSize" :total="total" @showSizeChange="onShowSizeChange" @change="onShowPageChange" />
-  </a-modal>
-</template>
-
-<script>
-  import { deviceQuery } from '@/api/car-wash'
-  export default{
-    name: 'ChooseEquipment',
-    props: {
-      openEquipmentModal: {  //  弹框是否展示
-        type: Boolean,
-        default: false
-      },
-    },
-    data(){
-      return{
-        modalIsShow: this.openEquipmentModal,  //  弹框是否展示
-        searchVal: '',  // 查询条件
-        radioStyle: {  //  设备选项样式
-          display: 'flex',
-          alignItems: 'center',
-          width: '100%',
-          border: '1px solid #e4e4e4',
-          borderRadius: '6px',
-          padding: '10px 15px',
-          marginTop: '15px'
-        },
-        equipment: null,  //  选中的设备 id
-        equipmentNo: '',  //  选中的设备   序列号
-        equipmentList: [],  //  设备数据列表
-        pageNo: 1,  //  页码
-        pageSize: 10,  //  每页条数
-        total: 0,  //  列表总条数
-      }
-    },
-    methods: {
-      // 设备列表
-      getEquipmentList(pageNo){
-        pageNo ? this.pageNo = pageNo : null
-        deviceQuery({
-          pageNo: this.pageNo,
-          pageSize: this.pageSize,
-          deviceNo: this.searchVal,
-        }).then(res => {
-          if(res.status == 200){
-            this.equipmentList = res.data.list || []
-            this.total = res.data.count
-          }else{
-            this.equipmentList = []
-            this.total = 0
-          }
-        })
-      },
-      //  查询
-      onSearch(value) {
-        this.searchVal = value
-        this.getEquipmentList(1)
-      },
-      // 设备  change
-      onChange(e) {
-        const _this = this
-        _this.equipment = e.target.value
-        let i = _this.equipmentList.findIndex(item => item.id == _this.equipment)
-        _this.equipmentNo = _this.equipmentList[i].deviceNo
-        setTimeout(()=>{
-          _this.modalIsShow = false
-        },300)
-      },
-      //  页码  change
-      onShowPageChange(page, pageSize){
-        this.pageNo = page
-        this.getEquipmentList()
-      },
-      //  pageSize 变化的回调
-      onShowSizeChange(current, size){
-        this.pageSize = size
-        this.getEquipmentList()
-      }
-    },
-    watch: {
-      //  父页面传过来的弹框状态
-      openEquipmentModal (newValue, oldValue) {
-        this.modalIsShow = newValue
-      },
-      //  重定义的弹框状态
-      modalIsShow (val){
-        if (!val){
-          this.$emit('close', this.equipment, this.equipmentNo)
-        }else{
-          this.getEquipmentList(1)
-        }
-      }
-    }
-  }
-</script>
-
-<style lang="less">
-  .CarWashEquipmentModal{
-    .input-search{
-      margin-bottom: 15px;
-    }
-    .radio-group{
-      display: block;
-      width: 100%;
-      .ant-radio-wrapper{
-        .ant-radio{
-          width: 16px;
-        }
-        span:nth-child(2){
-          width: 100%;
-        }
-      }
-      .radio-group-item{
-        display: flex;
-        justify-content: space-between;
-        align-items: center;
-        .item-label{
-          margin: 0;
-        }
-        .item-status{
-          margin: 0;
-          font-size: 12px;
-          color: #19be6b;
-        }
-        .item-status.ybind{
-          color: #ff9900;
-        }
-      }
-    }
-    .pagination-s{
-      margin-top: 20px;
-    }
-  }
-</style>

+ 0 - 239
src/views/CarWashManagement/DetailsCarWashModal.vue

@@ -1,239 +0,0 @@
-<template>
-  <div class="DetailsCarWash">
-    <a-modal class="DetailsCarWashModal" title="查看详情" :width="1000" :footer="null" :destroyOnClose="true" @cancel="isShow=false" v-model="isShow">
-      <v-select v-show="false" ref="featuredServiceLabel" placeholder="请选择网点标签" code="STORE_LABEL"></v-select>
-      <a-row :gutter="20">
-        <a-col :span="12" class="item-cont">
-          <p class="item-label">网点名称:</p>
-          <p class="item-main">{{ carWashInfo.name }}</p>
-        </a-col>
-        <a-col :span="12" class="item-cont">
-          <p class="item-label">地址:</p>
-          <p class="item-main">{{ carWashInfo.addrProvinceName }} - {{ carWashInfo.addrCityName }} - {{ carWashInfo.addrDistrictName }}</p>
-        </a-col>
-        <a-col :span="24" class="item-cont">
-          <p class="item-label">详细地址:</p>
-          <p class="item-main">{{ carWashInfo.addrDetail }}</p>
-        </a-col>
-        <a-col :span="12" class="item-cont">
-          <p class="item-label">设备ID:</p>
-          <p class="item-main">{{ carWashInfo.deviceVOList ? carWashInfo.deviceVOList[0].deviceNo : '' }}</p>
-        </a-col>
-        <a-col :span="12" class="item-cont">
-          <p class="item-label">网点标签:</p>
-          <p class="item-main">
-            <a-tag color="blue" v-for="(item, index) in labelList" :ket="index">{{ item }}</a-tag>
-          </p>
-        </a-col>
-        <a-col :span="12" class="item-cont">
-          <p class="item-label">经度:</p>
-          <p class="item-main">{{ carWashInfo.lng }}</p>
-        </a-col>
-        <a-col :span="12" class="item-cont">
-          <p class="item-label">纬度:</p>
-          <p class="item-main">{{ carWashInfo.lat }}</p>
-        </a-col>
-        <a-col :span="12" class="item-cont">
-          <p class="item-label">服务类型:</p>
-          <p class="item-main">
-            <a-tag color="blue" v-for="(item, index) in serviceType" :key="index">{{ item }}</a-tag>
-          </p>
-        </a-col>
-        <a-col :span="12" class="item-cont">
-          <p class="item-label">营业时间:</p>
-          <p class="item-main">{{ carWashInfo.beginTime ? carWashInfo.beginTime.substr(0,5) : null }} - {{ carWashInfo.endTime ? carWashInfo.endTime.substr(0,5) : null }}</p>
-        </a-col>
-        <a-col :span="24" class="item-cont">
-          <p class="item-label">时段价格:</p>
-          <div class="item-main period-price-con">
-            <div class="item-period" v-for="(item, index) in storeItemPriceDTOList" :key="index">
-              <p class="period" :style="{width: 100/(item.currentPrices.length + 1) + '%'}">{{ item.beginTime }} - {{ item.endTime }}</p>
-              <p class="period-price" :style="{width: 100/(item.currentPrices.length + 1) + '%'}" v-for="(subItem, ind) in item.currentPrices" :key="ind">{{ subItem.name }}:<strong class="price">{{ subItem.price }}</strong><span class="price-unit">元</span></p>
-            </div>
-          </div>
-        </a-col>
-        <a-col :span="24" class="item-cont">
-          <p class="item-label">路段指引:</p>
-          <p class="item-main" v-html="carWashInfo.guidance"></p>
-        </a-col>
-        <a-col :span="24" class="item-cont">
-          <p class="item-label">温馨提示:</p>
-          <p class="item-main">{{ carWashInfo.reminder }}</p>
-        </a-col>
-        <a-col :span="24" class="item-cont">
-          <p class="item-label">现场照片:</p>
-          <p class="item-main">
-            <img src="../../assets/avatar2.jpg" class="small-pic" @click="isPicModal=true" />
-          </p>
-        </a-col>
-        <a-col :span="24" class="btn-cont">
-          <a-button @click="isShow=false">取消</a-button>
-        </a-col>
-      </a-row>
-    </a-modal>
-    
-    <!-- 查看现场照片 -->
-    <a-modal class="picModal" title="查看现场照片" :width="800" :footer="null" :destroyOnClose="true" @cancel="isPicModal=false" v-model="isPicModal">
-      <img :src="pic" class="pic" />
-    </a-modal>
-  </div>
-</template>
-
-<script>
-  import { VSelect } from '@/components'
-  import moment from 'moment'
-  import { storeFind, findItem } from '@/api/car-wash'
-  export default{
-    name: 'DetailsCarWashModal',
-    components: { VSelect },
-    props: {
-      openModal: {  //  弹框是否展示
-        type: Boolean,
-        default: false
-      },
-      carWashId: {  //  网点id
-        type: String,
-        default: ''
-      }
-    },
-    data(){
-      return{
-        isShow: this.openModal,  //  弹框是否展示
-        labelList: [],  //  网点标签
-        isPicModal: false,  //  现场照片  弹框是否展示
-        pic: require('../../assets/avatar2.jpg'),  //  现场照片  路径
-        carWashInfo: {}  ,//  网点信息
-        serviceType: [],  //  服务类型
-        storeItemPriceDTOList: [],  //  时段价格
-      }
-    },
-    methods: {
-      // 网点详情
-      getCarWashInfo(id){
-        storeFind({ id: id }).then(res => {
-          if(res.status == 200){
-            // 查询门店的服务时段价格
-            findItem({ id: id }).then(result => {
-              if(result.status == 200){
-                this.carWashInfo = Object.assign(res.data, {storeItemPriceDTOList: result.data})
-                console.log(this.carWashInfo)
-                this.setVal()
-              }
-            })
-          }
-        })
-      },
-      //  赋值
-      setVal(){
-        const _this = this
-        // 网点标签
-        setTimeout(()=>{
-          let featuredServiceLabel = this.carWashInfo.featuredServiceLabel.split(',')
-          let arr = []
-          featuredServiceLabel.map(k => {
-            arr.push(_this.$refs.featuredServiceLabel.getNameByCode(k))
-          })
-          _this.labelList = arr
-        },0)
-        // 时段价格
-        console.log(this.carWashInfo)
-        this.setPeriodPrice(this.carWashInfo.storeItemPriceDTOList)
-      },
-      // 时段价格  赋值处理
-      setPeriodPrice(storeItemPriceDTOList){
-        let arrInd = 0
-        this.storeItemPriceDTOList = []
-        for (var key in storeItemPriceDTOList) {
-          if (storeItemPriceDTOList.hasOwnProperty(key)) {
-            this.storeItemPriceDTOList.push({
-              beginTime: key.split(',')[0],
-              endTime: key.split(',')[1],
-              currentPrices: []
-            })
-            let idArr = []
-            storeItemPriceDTOList[key].map((k, ind) => {
-              this.storeItemPriceDTOList[arrInd].currentPrices.push({ name: k.itemName, price: k.currentPrice, itemId: k.itemId })
-              idArr.push(k.itemName)
-            })
-            this.serviceType = idArr  //  服务类型
-            arrInd++
-          }
-        }
-        console.log(this.storeItemPriceDTOList)
-        console.log(this.serviceType)
-      },
-    },
-    watch: {
-      //  父页面传过来的弹框状态
-      openModal (newValue, oldValue) {
-        this.isShow = newValue
-      },
-      //  重定义的弹框状态
-      isShow (val){
-        if (!val){
-          this.$emit('close')
-        }
-      },
-      carWashId (newValue, oldValue){
-        if(newValue){
-          this.getCarWashInfo(newValue)
-        }
-      }
-    }
-  }
-</script>
-
-<style lang="less">
-  .DetailsCarWashModal{
-    p{
-      margin: 0;
-    }
-    .item-cont{
-      margin-bottom: 24px;
-      display: flex;
-      align-items: center;
-      .item-label{
-        width: 115px;
-        font-size: 14px;
-        color: rgba(0, 0, 0, 0.85);
-        text-align: right;
-        flex-shrink: 0;
-      }
-      .item-main{
-        flex-grow: 1;
-      }
-      .period-price-con{
-        border-bottom: 1px solid #e8e8e8;
-      }
-      .item-period{
-        display: flex;
-        align-items: center;
-        justify-content: space-evenly;
-        flex-grow: 1;
-        border: 1px solid #e8e8e8;
-        border-width: 1px 1px 0;
-        text-align: center;
-        .period, .period-price{
-          padding: 5px 0;
-          border-right: 1px solid #e8e8e8;
-        }
-        .period-price:last-child{
-          border-right: none;
-        }
-      }
-    }
-    .btn-cont{
-      text-align: center;
-    }
-    .small-pic{
-      display: block;
-      cursor: zoom-in;
-      width: 300px;
-    }
-  }
-  .pic{
-    display: block;
-    max-width: 100%;
-    margin: 0 auto;
-  }
-</style>

+ 0 - 336
src/views/CouponCenter/AddCouponModal.vue

@@ -1,336 +0,0 @@
-<template>
-  <a-modal class="CouponModal" :title="mtitle" :width="1020" :footer="null" :destroyOnClose="true" @cancel="isShow=false" v-model="isShow">
-    <!-- 表单 -->
-    <a-form-model ref="ruleForm" :model="form" :rules="rules" :label-col="{ span: 8 }" :wrapper-col="{ span: 16 }">
-      <a-row>
-        <a-col :span="24">
-          <div class="c-title">
-            基本信息
-            <a-divider type="vertical" class="bold-divider" />
-          </div>
-        </a-col>
-        <a-col :span="12">
-          <a-form-model-item label="优惠券名称" prop="name">
-            <a-input v-model="form.name" :maxLength="20" placeholder="请输入优惠券名称,20个字以内" />
-          </a-form-model-item>
-        </a-col>
-        <a-col :span="12">
-          <a-form-model-item label="发放总量" prop="name">
-            <a-row :gutter="20">
-              <a-col :span="7">
-                <a-select v-model="form.isQuota" placeholder="请选择">
-                  <a-select-option :value="item.code" v-for="(item, index) in isFlagList" :key="index">{{item.code == '0' ? '不限' : '限制'}}</a-select-option>
-                </a-select>
-              </a-col>
-              <a-col :span="17" v-show="form.isQuota == '1'">
-                <a-input-number v-model="form.quota" :min="0" :max="999999" placeholder="请输入限制发放份数, 0-999999" class="input-number-s" />
-                <span class="unit">份</span>
-              </a-col>
-            </a-row>
-          </a-form-model-item>
-        </a-col>
-        <a-col :span="12">
-          <a-form-model-item label="优惠券类型" prop="couponType">
-            <!-- <v-select ref="couponType" v-model="form.couponType" showArrow placeholder="请选择优惠券类型" code="CHECK_ENABLE_STATE"></v-select> -->
-            <a-select v-model="form.couponType" placeholder="请选择">
-              <a-select-option :value="item.code" v-for="(item, index) in couponTypeList" :key="index">{{item.dispName}}</a-select-option>
-            </a-select>
-          </a-form-model-item>
-        </a-col>
-        <a-col :span="12">
-          <a-form-model-item label="优惠券面额" prop="name">
-            <a-input-number v-model="form.quota" :min="0" :max="999999" placeholder="请输入优惠券面额, 0-999999" class="input-number-s" />
-            <span class="unit">元</span>
-          </a-form-model-item>
-        </a-col>
-        <a-col :span="12">
-          <a-form-model-item label="是否限额使用" prop="name">
-            <a-select v-model="form.isQuota" placeholder="请选择">
-              <a-select-option :value="item.code" v-for="(item, index) in isFlagList" :key="index">{{item.dispName}}</a-select-option>
-            </a-select>
-          </a-form-model-item>
-        </a-col>
-        <a-col :span="24">
-          <a-form-model-item label="优惠券说明" prop="name" :label-col="{ span: 4 }" :wrapper-col="{ span: 20 }">
-            <a-textarea v-model="form.name" :maxLength="256" :auto-size="{ minRows: 3, maxRows: 5 }" placeholder="请输入优惠券说明,256个字以内" />
-          </a-form-model-item>
-        </a-col>
-        <a-col :span="24">
-          <div class="c-title">
-            领用规则
-            <a-divider type="vertical" class="bold-divider" />
-          </div>
-        </a-col>
-        <a-col :span="24">
-          <a-form-model-item label="持卡会员" prop="name" :label-col="{ span: 4 }" :wrapper-col="{ span: 20 }">
-            <a-row :gutter="20">
-              <a-col :span="6">
-                <a-select v-model="form.isQuota" placeholder="请选择">
-                  <a-select-option :value="item.code" v-for="(item, index) in isFlagList" :key="index">{{item.code == '0' ? '不限领' : '限领'}}</a-select-option>
-                </a-select>
-              </a-col>
-              <a-col :span="16">
-                <a-row>
-                  <a-col :span="10">
-                    <a-input-number v-model="form.quota" :min="0" :max="999999" placeholder="请输入限领份数, 0-999999" class="input-number-s" />
-                  </a-col>
-                  <a-col :span="3">
-                    份/每
-                  </a-col>
-                  <a-col :span="6">
-                    <a-select v-model="form.restrictedUnit" placeholder="请选择">
-                      <a-select-option :value="item.code" v-for="(item, index) in isUnitList" :key="index">{{item.dispName}}</a-select-option>
-                    </a-select>
-                  </a-col>
-                </a-row>
-              </a-col>
-            </a-row>
-          </a-form-model-item>
-        </a-col>
-        <a-col :span="24">
-          <a-form-model-item label="未持卡会员" prop="name" :label-col="{ span: 4 }" :wrapper-col="{ span: 20 }">
-            <a-row :gutter="20">
-              <a-col :span="6">
-                <a-select v-model="form.isQuota" placeholder="请选择">
-                  <a-select-option :value="item.code" v-for="(item, index) in isFlagList" :key="index">{{item.code == '0' ? '不限领' : '限领'}}</a-select-option>
-                </a-select>
-              </a-col>
-              <a-col :span="16">
-                <a-row>
-                  <a-col :span="10">
-                    <a-input-number v-model="form.quota" :min="0" :max="999999" placeholder="请输入限领份数, 0-999999" class="input-number-s" />
-                  </a-col>
-                  <a-col :span="3">
-                    份/每
-                  </a-col>
-                  <a-col :span="6">
-                    <a-select v-model="form.restrictedUnit" placeholder="请选择">
-                      <a-select-option :value="item.code" v-for="(item, index) in isUnitList" :key="index">{{item.dispName}}</a-select-option>
-                    </a-select>
-                  </a-col>
-                </a-row>
-              </a-col>
-            </a-row>
-          </a-form-model-item>
-        </a-col>
-        <a-col :span="12">
-          <a-form-model-item label="有效期" prop="name">
-            <a-row :gutter="20">
-              <a-col :span="9">
-                <a-select v-model="form.validType" placeholder="请选择">
-                  <a-select-option :value="item.code" v-for="(item, index) in couponValidityList" :key="index">{{item.dispName}}</a-select-option>
-                </a-select>
-              </a-col>
-              <a-col :span="15" v-show="form.validType == 'ABSOLUTE'">
-                <a-range-picker @change="validDateChange" :disabled-date="disabledDate" format="YYYY-MM-DD" />
-              </a-col>
-              <a-col :span="15" v-show="form.validType == 'RELATIVE'">
-                <a-row>
-                  <a-col :span="16">
-                    <a-input-number v-model="form.quota" :min="0" :max="999999" placeholder="请输入" class="input-number-s" />
-                  </a-col>
-                  <a-col :span="8">天内有效</a-col>
-                </a-row>
-              </a-col>
-            </a-row>
-          </a-form-model-item>
-        </a-col>
-        <a-col :span="12">
-          <a-form-model-item label="是否允许优惠叠加" prop="name">
-            <a-select v-model="form.isQuota" placeholder="请选择">
-              <a-select-option :value="item.code" v-for="(item, index) in isFlagList" :key="index">{{item.dispName}}</a-select-option>
-            </a-select>
-          </a-form-model-item>
-        </a-col>
-        <a-col :span="12">
-          <a-form-model-item label="适用洗车类型" prop="name">
-            <v-select ref="serviceType" v-model="form.isQuota" showArrow mode="multiple" placeholder="请选择适用洗车类型" code="CHECK_ENABLE_STATE"></v-select>
-          </a-form-model-item>
-        </a-col>
-        <a-col :span="12">
-          <a-form-model-item label="适用洗车网点" prop="isOutletsLimit">
-            <a-row :gutter="20">
-              <a-col :span="12">
-                <a-select v-model="form.isOutletsLimit" placeholder="请选择">
-                  <a-select-option :value="item.code" v-for="(item, index) in isAllList" :key="index">{{item.dispName}}</a-select-option>
-                </a-select>
-              </a-col>
-              <a-col :span="12" v-show="form.isOutletsLimit == 1">
-                <a-row :gutter="20">
-                  <a-col :span="12">
-                    已选 <strong>4</strong> 个
-                  </a-col>
-                  <a-col :span="12">
-                    <a-button type="primary" size="small" class="small-btn" @click="openOutletsModal=true">选择</a-button>
-                  </a-col>
-                </a-row>
-              </a-col>
-            </a-row>
-          </a-form-model-item>
-        </a-col>
-        <a-col :span="24">
-          <a-form-model-item :label-col="{ span: 0 }" :wrapper-col="{ span: 24 }" class="btn-cont">
-            <a-button type="primary" @click="onSubmit('ruleForm')">保存</a-button>
-            <a-button class="resetForm" @click="resetForm">取消</a-button>
-          </a-form-model-item>
-        </a-col>
-      </a-row>
-    </a-form-model>
-    
-    <!-- 选择网点 -->
-    <choose-outlets
-      :openOutletsModal="openOutletsModal"
-      @close="closeChooseOutlets"
-    />
-    
-  </a-modal>
-</template>
-
-<script>
-  import { VSelect } from '@/components'
-  import moment from 'moment'
-  import ChooseOutlets from './ChooseOutlets.vue'
-  export default{
-    name: 'AddCouponModal',
-    components: { VSelect, ChooseOutlets },
-    props: {
-      openModal: {  //  弹框是否展示
-        type: Boolean,
-        default: false
-      },
-      mtitle: {  //  弹框标题
-        type: String,
-        default: ''
-      }
-    },
-    data(){
-      return{
-        isShow: this.openModal,  //  弹框是否展示
-        form: {
-          name: '',  //  优惠券名称
-          isQuota: '0',  //  发放总量  不限,限制
-          quota: '',  //  发放总量  份数
-          couponType: 'VOUCHER',  //  优惠券类型
-          restrictedUnit: '0',  //  限领单位     自然月
-          validType: 'NONE', //  有效期类型:ABSOLUTE绝对时效(时间区间)/RELATIVE相对时效(领取后多少天内有效)/NONE不限制
-          startTime: '', //  有效期 开始
-          endTime: '', //  有效期 结束
-          validDate: '', //  有效期有效时长  (领取后多少天内有效)
-          isOutletsLimit: '0',  //  适用洗车网点限制   0全部(不限)  1部分(限制)
-        },
-        rules: {
-          name: [
-            { required: true, message: '请输入优惠券名称', trigger: 'blur' }
-          ]
-        },
-        isFlagList: [ //  是否  下拉数据列表
-          {dispName: '是', code: '1'},
-          {dispName: '否', code: '0'}
-        ],
-        couponTypeList: [ //  优惠券类型数据列表
-          {dispName: '满减券', code: 'FULLSUB'},
-          {dispName: '代金券', code: 'VOUCHER'}
-        ],
-        isUnitList: [  //  限领份数单位  下拉数据列表
-          {dispName: '自然月', code: '0'},
-        ],
-        couponValidityList: [ //  有效期  下拉数据列表
-          {dispName: '不限', code: 'NONE'},
-          {dispName: '固定日期', code: 'ABSOLUTE'},
-          {dispName: '领取后', code: 'RELATIVE'}
-        ],
-        isAllList: [ //  适用洗车网点  全部 部分 下拉数据列表
-          {dispName: '全部', code: '0'},
-          {dispName: '部分', code: '1'}
-        ],
-        openOutletsModal: false  ,//  选择网点  弹框展示状态
-      }
-    },
-    methods: {
-      moment,
-      range(start, end) {
-        const result = []
-        for (let i = start; i < end; i++) {
-          result.push(i)
-        }
-        return result
-      },
-      //  有效期  固定日期  禁用范围
-      disabledDate(current) {
-        // 不能选择今天之前的日期
-        return current && current < moment().subtract(1, 'days')
-      },
-      //  有效期  固定日期  change
-      validDateChange(date, dateString){
-        console.log(date, dateString)
-      },
-      //  保存
-      onSubmit(formName){
-        console.log(this.form, '表单数据')
-        this.$refs[formName].validate(valid => {
-          if (valid) {
-            let formData = JSON.parse(JSON.stringify(this.form))
-            
-            //  提交前时间格式还需转换
-            console.log(formData,'-----提交的表单数据')
-          } else {
-            return false
-          }
-        })
-      },
-      // 取消
-      resetForm(){
-        this.$refs.ruleForm.resetFields()
-        this.isShow = false
-      },
-      //  选择网点
-      closeChooseOutlets(val, name){
-        // if(val){
-        //   this.form.equipment = val
-        //   this.equipmentName = name
-        // }
-        this.openOutletsModal = false
-      },
-    },
-    watch: {
-      //  父页面传过来的弹框状态
-      openModal (newValue, oldValue) {
-        this.isShow = newValue
-      },
-      //  重定义的弹框状态
-      isShow (val){
-        if (!val){
-          this.$emit('close')
-        }
-      }
-    }
-  }
-</script>
-
-<style lang="less">
-  .CouponModal{
-    .c-title{
-      padding: 0 0 10px;
-      margin-bottom: 20px;
-      border-bottom: 1px solid #e8e8e8;
-      .bold-divider{
-        width: 3px;
-        background-color: #1890ff;
-      }
-    }
-    .input-number-s{
-      width: 90%;
-    }
-    .unit{
-      display: inline-block;
-      width: 10%;
-      text-align: right;
-    }
-    .btn-cont{
-      text-align: center;
-      .resetForm{
-        margin-left: 10px;
-      }
-    }
-  }
-</style>

+ 0 - 81
src/views/CouponCenter/ChooseOutlets.vue

@@ -1,81 +0,0 @@
-<template>
-  <a-modal class="CouponOutletsModal" title="选择网点" :width="600" :footer="null" :destroyOnClose="true" @cancel="modalIsShow=false" v-model="modalIsShow">
-    <a-input-search placeholder="请输入网点名称" enter-button="查询" @search="onSearch" class="input-search" />
-    <a-checkbox-group @change="onChange" class="checkbox-group">
-      <a-checkbox value="A" class="checkbox-item">A</a-checkbox>
-      <a-checkbox value="B" class="checkbox-item">B</a-checkbox>
-      <a-checkbox value="C" class="checkbox-item">C</a-checkbox>
-      <a-checkbox value="D" class="checkbox-item">D</a-checkbox>
-    </a-checkbox-group>
-  </a-modal>
-</template>
-
-<script>
-  export default{
-    name: 'ChooseOutlets',
-    props: {
-      openOutletsModal: {  //  弹框是否展示
-        type: Boolean,
-        default: false
-      },
-    },
-    data(){
-      return{
-        modalIsShow: this.openEquipmentModal,  //  弹框是否展示
-        checkedList: [],  //  选中的网点
-        outletsDataList: [  //  网点列表数据
-          { name: '网点1', value: '1' },
-          { name: '网点2', value: '2' },
-          { name: '网点3', value: '3' },
-          { name: '网点4', value: '4' },
-          { name: '网点5', value: '5' },
-          { name: '网点6', value: '6' },
-        ]
-      }
-    },
-    methods: {
-      //  查询
-      onSearch(value) {
-        console.log(value)
-      },
-      //  多选框 change
-      onChange(e){
-        console.log(e)
-        this.checkedList = e
-      },
-    },
-    watch: {
-      //  父页面传过来的弹框状态
-      openOutletsModal (newValue, oldValue) {
-        this.modalIsShow = newValue
-      },
-      //  重定义的弹框状态
-      modalIsShow (val){
-        if (!val){
-          this.$emit('close')
-        }
-      }
-    }
-  }
-</script>
-
-<style lang="less">
-  .CouponOutletsModal{
-    .input-search{
-      margin-bottom: 15px;
-    }
-    .checkbox-group{
-      display: block;
-      .checkbox-item{
-        display: block;
-        margin: 15px 0 0;
-        padding: 10px 15px;
-        border: 1px solid rgb(228, 228, 228);
-        border-radius: 6px;
-        .ant-checkbox{
-          display: none;
-        }
-      }
-    }
-  }
-</style>

+ 0 - 131
src/views/CouponCenter/CreateCoupons.vue

@@ -1,131 +0,0 @@
-<template>
-  <a-card class="CreateCoupons" :bordered="false">
-    <!-- 搜索条件 -->
-    <div class="table-page-search-wrapper">
-      <a-form layout="inline">
-        <a-row :gutter="48">
-          <a-col :span="6">
-            <a-form-item class="search-item" label="优惠券名称">
-              <a-input v-model.trim="queryParam.name" placeholder="请输入优惠券名称" allowClear/>
-            </a-form-item>
-          </a-col>
-          <a-col :span="6">
-            <a-form-item class="search-item" label="优惠券类型">
-              <v-select ref="yyzt" allowClear placeholder="请选择优惠券类型" v-model="queryParam.type" code="CHECK_ENABLE_STATE"></v-select>
-            </a-form-item>
-          </a-col>
-          <a-col :span="6">
-            <a-button type="primary" class="search-btn" @click="$refs.table.refresh(true)">查询</a-button>
-            <a-button type="" @click="reset">重置</a-button>
-          </a-col>
-        </a-row>
-      </a-form>
-    </div>
-    <!-- 新建 -->
-    <div class="table-operator">
-      <a-button type="primary" icon="plus" @click="modalHandle('add')">新建</a-button>
-    </div>
-    <!-- 表格列表 -->
-    <s-table ref="table" size="default" rowKey="id" :columns="columns" :data="loadData" bordered >
-      <!-- 操作 -->
-      <template slot="action" slot-scope="text, record">
-        <a-icon type="edit" title="编辑" :style="{ fontSize: '20px', color: '#1890FF', padding: '0 10px' }" />
-        <a-icon type="eye" title="查看详情" @click="openDetailsModal=true" :style="{ fontSize: '20px', color: '#e29e14', padding: '0 10px' }" />
-        <a-icon type="delete" title="删除" @click="del(record)" :style="{ fontSize: '20px', color: 'red', padding: '0 10px' }" />
-      </template>
-    </s-table>
-    
-    <!-- 新增/编辑 优惠券 -->
-    <add-coupon-modal
-      :openModal="openModal"
-      :mtitle="mtitle"
-      @close="openModal=false"
-    />
-    
-  </a-card>
-</template>
-
-<script>
-  import { STable, VSelect } from '@/components'
-  import AddCouponModal from './AddCouponModal.vue'
-  export default{
-    name: 'CreateCoupons',
-    components: { STable, VSelect, AddCouponModal },
-    data(){
-      return{
-        queryParam: {
-          name: '',  //  优惠券名称
-          type: '',  //  优惠券类型
-        },
-        columns: [
-          { title: '序号', dataIndex: 'index', width: '100', align: 'center' },
-          { title: '创建时间', dataIndex: 'createDate', width: '100', align: 'center' },
-          { title: '优惠券名称', dataIndex: 'name', width: '100', align: 'center' },
-          { title: '到期时间', dataIndex: 'endDate', width: '100', align: 'center' },
-          { title: '类型', dataIndex: 'couponType', width: '100', align: 'center' },
-          { title: '状态', dataIndex: 'status', width: '100', align: 'center' },
-          { title: '操作', scopedSlots: {customRender: 'action'}, width: '200', align: 'center' }
-        ],
-        // 加载数据方法 必须为 Promise 对象
-        loadData: parameter => {
-          // return activeList(Object.assign(parameter, this.queryParam)).then(res => {
-          //   const no = (res.data.pageNo - 1) * res.data.pageSize
-          //   for (let i = 0; i < res.data.list.length; i++) {
-          //     const _item = res.data.list[i]
-          //     _item.no = no + i + 1
-          //     _item.releaseStatus = _item.releaseStatus + '' === 'FB'
-          //   }
-          //   return res.data
-          // })
-          // let data = [
-          //   { createDate: '2020-07-31 15:09', equipment: 'ID585787887', name: '网点A', addrProvince: '陕西省', addrCity: '西安市', addrDetail: '华帝金座', businessHours: '8:30 - 22:00', equipmentStatus: '在线', businessStatus: '正常营业', wechatCode: '' },
-          //   { createDate: '2020-07-31 15:09', equipment: 'ID585787887', name: '网点A', addrProvince: '陕西省', addrCity: '西安市', addrDetail: '华帝金座', businessHours: '8:30 - 22:00', equipmentStatus: '在线', businessStatus: '正常营业', wechatCode: '' },
-          //   { createDate: '2020-07-31 15:09', equipment: 'ID585787887', name: '网点A', addrProvince: '陕西省', addrCity: '西安市', addrDetail: '华帝金座', businessHours: '8:30 - 22:00', equipmentStatus: '在线', businessStatus: '正常营业', wechatCode: '' },
-          // ]
-          // return new Promise((resolve, reject) => {
-          //   resolve(data)
-          // }).catch(() => console.log('Oops errors!'))
-        },
-        openModal: false,  //  新增/编辑 优惠券  弹框展示状态
-        mtitle: '',  //  新增/编辑 优惠券  弹框标题
-        openDetailsModal: false,  //  查看详情 优惠券  弹框展示状态
-      }
-    },
-    methods: {
-      //  新建
-      modalHandle(type){
-        this.mtitle = type == 'add' ? '新增' : '编辑'
-        this.openModal = true
-      },
-      // 删除
-      del(item){
-        console.log(item)
-        this.$confirm({
-          title: '提示',
-          content: '确定要删除吗?',
-          onOk () {
-            
-          }
-        })
-      },
-      //  重置
-      reset(){
-        this.queryParam = {
-          name: '',  //  优惠券名称
-          type: '',  //  优惠券类型
-        }
-        this.$refs.table.refresh(true)
-      }
-    }
-  }
-</script>
-
-<style lang="less">
-  .CreateCoupons{
-    .table-page-search-wrapper{
-      .search-btn{
-        margin-right: 10px;
-      }
-    }
-  }
-</style>

+ 0 - 146
src/views/CouponStatistics/CouponStatisticsDetail.vue

@@ -1,146 +0,0 @@
-<template>
-  <a-card :bordered="false">
-    <!-- 搜索条件 -->
-    <h3 class="coupon-detail-title" v-model="title">{{title}},领取详情</h3>
-    <a-divider />
-    <div class="CouponStatisticsDetail-searchForm">
-      <a-form ref="searchForm" labelAlign="left">
-        <a-row :gutter="48">
-          <a-col :span="6">
-            <a-form-item label="领券时间" :label-col="{ span:6 }" :wrapper-col="{ span:14 }">
-              <a-range-picker v-model="time" :format="dateFormat" :placeholder="['开始时间','结束时间']" @change="onChange" />
-            </a-form-item>
-          </a-col>
-          <a-col :span="6">
-            <a-form-item label="手机号码" :label-col="{ span:6 }" :wrapper-col="{ span:12}">
-              <a-input v-model.trim="searchForm.name" placeholder="请输入" allowClear/>
-            </a-form-item>
-          </a-col>
-          <a-col :span="6">
-            <a-form-item label="领券网点" :label-col="{ span:6 }" :wrapper-col="{ span:12}">
-              <a-input v-model.trim="searchForm.name" placeholder="请输入" allowClear/>
-            </a-form-item>
-          </a-col>
-        </a-row>
-        <a-row :gutter="48">
-          <a-col :span="6">
-            <a-form-item label="用券时间" :label-col="{ span:6 }" :wrapper-col="{ span:14 }">
-              <a-range-picker v-model="time" :format="dateFormat" :placeholder="['开始时间','结束时间']" @change="onChange" />
-            </a-form-item>
-          </a-col>
-          <a-col :span="6">
-            <a-form-item label="使用状态" :label-col="{ span:6 }" :wrapper-col="{ span:12}">
-              <v-select v-model="searchForm.couponType" placeholder="请选择" allowClear></v-select>
-            </a-form-item>
-          </a-col>
-          <a-col :span="6">
-            <a-form-item label="用券网点" :label-col="{ span:6 }" :wrapper-col="{ span:12}">
-              <a-input v-model.trim="searchForm.name" placeholder="请输入" allowClear/>
-            </a-form-item>
-          </a-col>
-          <a-col :span="6">
-            <a-button style="margin-right: 10px;" type="primary" @click="$refs.table.refresh(true)">查询</a-button>
-            <a-button type="" @click="resetForm">重置</a-button>
-          </a-col>
-        </a-row>
-      </a-form>
-    </div>
-    <!-- 列表 -->
-    <s-table ref="table" size="default" :rowKey="(record) => record.id" :columns="columns" :data="loadData" bordered>
-      <!-- 状态 -->
-      <span slot="status" slot-scope="text, record">
-        <template></template>
-      </span>
-    </s-table>
-  </a-card>
-</template>
-
-<script>
-  import {
-    STable,
-    VSelect
-  } from '@/components'
-  export default{
-    components:{ STable,VSelect },
-    data(){
-      return{
-        searchForm:{
-          name:'',
-        },
-        title:"3元代金券",
-        columns: [{
-            title: '序号',
-            dataIndex: 'no',
-            minWidth: '40',
-            align: 'center'
-          },
-        
-          {
-            title: '领券时间',
-            dataIndex: 'no',
-            minWidth: '40',
-            align: 'center'
-          },
-          {
-            title: '领券手机号码',
-            dataIndex: 'no',
-            minWidth: '40',
-            align: 'center'
-          },
-          {
-            title: '使用状态',
-            dataIndex: 'no',
-            minWidth: '40',
-            align: 'center'
-          },
-          {
-            title: '用券网点',
-            dataIndex: 'no',
-            minWidth: '40',
-            align: 'center'
-          },
-          {
-            title: '用券时间',
-            dataIndex: 'no',
-            minWidth: '40',
-            align: 'center'
-          },
-          {
-            title: '关联消费金额',
-            dataIndex: 'no',
-            minWidth: '40',
-            align: 'center'
-          }
-        ],
-        // 加载数据方法 必须为 Promise 对象
-        loadData: parameter => {
-          // return getTenantsList(Object.assign(parameter, this.searchForm)).then(res => {
-          //   if (res.status == 200) {
-          //     const no = (res.data.pageNo - 1) * res.data.pageSize
-          //     for (let i = 0; i < res.data.list.length; i++) {
-          //       const _item = res.data.list[i]
-          //       _item.no = no + i + 1
-          //       _item.status = _item.status + '' === '1'
-          //     }
-          //     return res.data
-          //   }
-          // })
-        }
-      }
-    },
-    methods:{
-      // 重置
-      resetForm(){
-        this.$refs.searchForm.resetFields()
-        this.$refs.table.refresh(true)
-      }
-    }
-  }
-</script>
-
-<style lang="less">
-  .coupon-detail-title{
-    margin-bottom: 20px;
-    margin-left: 20px;
-  }
-</style>

+ 0 - 161
src/views/CouponStatistics/CouponStatisticsList.vue

@@ -1,161 +0,0 @@
-<template>
-  <a-card :bordered="false">
-    <!-- 搜索条件 -->
-    <div class="CouponStatistics-searchForm">
-      <a-form ref="searchForm">
-        <a-row :gutter="48">
-          <a-col :span="6">
-            <a-form-item label="发券网点" :label-col="{ span:6 }" :wrapper-col="{ span:12}">
-              <a-input v-model.trim="searchForm.area" placeholder="请输入" allowClear/>
-            </a-form-item>
-          </a-col>
-          <a-col :span="6">
-            <a-form-item label="优惠券名称" :label-col="{ span:6 }" :wrapper-col="{ span:12}">
-              <a-input v-model.trim="searchForm.name" placeholder="请输入" allowClear/>
-
-            </a-form-item>
-          </a-col>
-          <a-col :span="6">
-            <a-form-item label="优惠券类型" :label-col="{ span:6 }" :wrapper-col="{ span:12}">
-              <v-select v-model="searchForm.couponType" placeholder="请选择" allowClear></v-select>
-            </a-form-item>
-          </a-col>
-          <a-col :span="6">
-            <a-button style="margin-right: 10px;" type="primary" @click="$refs.table.refresh(true)">查询</a-button>
-            <a-button type="" @click="resetForm">重置</a-button>
-          </a-col>
-        </a-row>
-      </a-form>
-    </div>
-    <!-- 列表 -->
-    <s-table ref="table" size="default" :rowKey="(record) => record.id" :columns="columns" :data="loadData" bordered>
-      <!-- 状态 -->
-      <span slot="status" slot-scope="text, record">
-        <template></template>
-      </span>
-      <!-- 操作 -->
-      <span slot="action" slot-scope="text, record">
-        <template>
-          <a-icon type="eye" :style="{ fontSize: '20px', color: '#e29e14', padding: '0 10px' }" @click="handleEdit(record)" />
-        </template>
-      </span>
-    </s-table>
-  </a-card>
-</template>
-
-<script>
-  import {
-    STable,
-    VSelect
-  } from '@/components'
-  export default {
-    components: {
-      STable,
-      VSelect
-    },
-    data() {
-      return {
-        searchForm: {
-          name: '',      // 优惠券名称
-          area: '',      // 网点名称
-          couponType:''  // 优惠券类型
-        },
-        columns: [{
-            title: '序号',
-            dataIndex: 'no',
-            minWidth: '40',
-            align: 'center'
-          },
-
-          {
-            title: '发券网点',
-            dataIndex: 'no',
-            minWidth: '40',
-            align: 'center'
-          },
-          {
-            title: '优惠券名称',
-            dataIndex: 'no',
-            minWidth: '40',
-            align: 'center'
-          },
-          {
-            title: '优惠券类型',
-            dataIndex: 'no',
-            minWidth: '40',
-            align: 'center'
-          },
-          {
-            title: '已发数量',
-            dataIndex: 'no',
-            minWidth: '40',
-            align: 'center'
-          },
-          {
-            title: '使用数量',
-            dataIndex: 'no',
-            minWidth: '40',
-            align: 'center'
-          },
-          {
-            title: '关联消费金额',
-            dataIndex: 'no',
-            minWidth: '40',
-            align: 'center'
-          },
-          {
-            title: '转化率',
-            dataIndex: 'no',
-            minWidth: '40',
-            align: 'center'
-          },
-          {
-            title: '状态',
-            dataIndex: 'status',
-            minWidth: '40',
-            align: 'center',
-            scopedSlots: {
-              customRender: 'status'
-            }
-          },
-          {
-            title: '操作',
-            dataIndex: 'action',
-            minWidth: '40',
-            align: 'center',
-            scopedSlots: {
-              customRender: 'action'
-            }
-          }
-        ],
-        // 加载数据方法 必须为 Promise 对象
-        loadData: parameter => {
-          // return getTenantsList(Object.assign(parameter, this.searchForm)).then(res => {
-          //   if (res.status == 200) {
-          //     const no = (res.data.pageNo - 1) * res.data.pageSize
-          //     for (let i = 0; i < res.data.list.length; i++) {
-          //       const _item = res.data.list[i]
-          //       _item.no = no + i + 1
-          //       _item.status = _item.status + '' === '1'
-          //     }
-          //     return res.data
-          //   }
-          // })
-        }
-      }
-    },
-    methods: {
-      // 重置
-      resetForm() {
-        this.$refs.searchForm.resetFields()
-        this.$refs.table.refresh(true)
-      }
-    }
-  }
-</script>
-
-<style>
-  .CouponStatistics-searchForm .ant-form-inline .ant-form-item {
-    margin-bottom: 50px;
-  }
-</style>

+ 1 - 1
src/views/Home.vue

@@ -1,6 +1,6 @@
 <template>
   <div class="home">
-    <a-alert message="欢迎登录洗车机运营后台系统" type="info" showIcon />
+    <a-alert message="欢迎登录智能快洗发卷中心系统" type="info" showIcon />
   </div>
 </template>
 

+ 0 - 321
src/views/Order/OrderCenter.vue

@@ -1,321 +0,0 @@
-<template>
-  <a-card :bordered="false">
-    <!-- 搜索条件 -->
-    <div class="orderCenter-searchForm">
-      <a-form ref="searchForm">
-        <a-row :gutter="48">
-          <a-col :span="8">
-            <a-form-item label="创建时间" :label-col="{ span:4 }" :wrapper-col="{ span:12}">
-              <a-range-picker v-model="time" :format="dateFormat" :placeholder="['开始时间','结束时间']" @change="onChange" />
-            </a-form-item>
-          </a-col>
-          <a-col :span="6">
-            <a-form-item label="网点名称" :label-col="{ span:6 }" :wrapper-col="{ span:12}">
-              <a-select placeholder="请选择" allowClear v-model="storeId" mode="multiple">
-                <a-select-option v-for="item in storeOptionData" :key="item.id" :value="item.id">{{ item.name }}</a-select-option>
-              </a-select>
-            </a-form-item>
-          </a-col>
-          <a-col :span="6">
-            <a-form-item label="单号" :label-col="{ span:6 }" :wrapper-col="{ span:12}">
-              <a-input v-model.trim="searchForm.orderNo" placeholder="请输入" allowClear/>
-            </a-form-item>
-          </a-col>
-          <a-col :span="4">
-            <a-button style="margin-right: 10px;" type="primary" @click="$refs.table.refresh(true)">查询</a-button>
-            <a-button type="" @click="resetForm">重置</a-button>
-          </a-col>
-        </a-row>
-        <a-row :gutter="48">
-          <a-col :span="8">
-            <a-form-item label="服务项目" :label-col="{ span:4 }" :wrapper-col="{ span:12}">
-              <a-select placeholder="请选择" allowClear v-model="searchForm.itemId">
-                <a-select-option v-for="item in itemOptionData" :key="item.id" :value="item.id">{{ item.itemName }}</a-select-option>
-              </a-select>
-            </a-form-item>
-          </a-col>
-          <a-col :span="6">
-            <a-form-item label="手机号码" :label-col="{ span:6 }" :wrapper-col="{ span:12}">
-              <a-input v-model.trim="searchForm.customerMobile" placeholder="请输入" allowClear maxLength="11" />
-            </a-form-item>
-          </a-col>
-          <a-col :span="6">
-            <a-form-item label="状态" :label-col="{ span:6 }" :wrapper-col="{ span:12}">
-              <v-select v-model="searchForm.orderStatus" ref="orderStatus" code="ORDER_STATUS" placeholder="请选择" allowClear></v-select>
-            </a-form-item>
-          </a-col>
-        </a-row>
-      </a-form>
-    </div>
-    <!-- 合计 -->
-    <div class="total" >
-      <a-icon type="info-circle" class="iconImg"/>
-      <strong>合计:</strong><span v-model="countHJ">{{countHJ}} 单</span><strong style="margin-left: 15px;">实收:</strong><span v-model="incomeHJ">{{incomeHJ}} 元</span>
-    </div>
-    <!-- 列表 -->
-    <s-table ref="table" size="default" :showPagination="false" :rowKey="(record) => record.id" :columns="columns" :data="loadData" bordered>
-      <!-- 状态 -->
-      <span slot="orderStatus" slot-scope="text, record">
-        {{ $refs.orderStatus.getNameByCode(text) }}
-      </span>
-      <!-- 实收金额 -->
-      <span slot="paymentAmount" slot-scope="text, record">
-        <template v-if=" record.payStatus == 'PAID' ">{{ record.paymentAmount }}</template>
-        <template v-else-if=" record.payStatus != 'PAID' ">{{ 0 }}</template>
-      </span>
-      <!-- 操作 -->
-      <span slot="action" slot-scope="text, record">
-        <!-- <a-button type="primary" @click="openDetailModal=true">查看</a-button> -->
-        <a-button type="primary" @click="seeDetail(record)">查看</a-button>
-        <!-- 本期暂不做 -->
-        <!-- <a-button type="danger" @click="refund(record)">退款</a-button> -->
-      </span>
-    </s-table>
-    <!-- 查看详情弹窗 -->
-    <order-detail-modal 
-      :openModal="openDetailModal"
-      :nowId="detailId"
-      @close="openDetailModal=false"/> 
-  </a-card>
-</template>
-
-<script>
-  import { STable, VSelect } from '@/components'
-  import getDate from '../../libs/getDate.js'
-  import { orderCenterList, itemList, storeList } from '../../api/order.js'
-  import OrderDetailModal from './OrderDetailModal.vue'
-  import moment from 'moment'
-  export default {
-    name:'OrderCenter',
-    components: {
-      STable,
-      VSelect,
-      OrderDetailModal
-    },
-    data() {
-      return {
-        storeId: [],        // 网点名称
-        // 查询参数
-        searchForm: {
-          beginDate: null,    // 创建的开始时间
-          endDate: null,      // 创建的结束时间
-          storeIdList: [],        // 网点名称
-          orderNo: '',        // 单号
-          itemId:'',          // 服务项目
-          customerMobile:'',  // 手机号码
-          orderStatus:''      // 状态
-        },
-        pageNo:1,             // 列表当前页
-        pageSize:10,          // 列表当前页码
-        countHJ:'40',
-        incomeHJ:'2000',
-        itemOptionData:[],    // 服务项目数据
-        storeOptionData:[],   // 网点名称数据
-        openDetailModal:false,   // 查看详情弹窗 默认关闭
-        detailId:null,          // 初始化id
-        time: [
-          moment(getDate.getToday().starttime, this.dateFormat),
-					moment(getDate.getToday().endtime, this.dateFormat)
-        ],
-        dateFormat: 'YYYY-MM-DD',
-        columns: [{
-            title: '下单时间',
-            dataIndex: 'orderTime',
-            minWidth: '40',
-            align: 'center'
-          },
-          {
-            title: '单号',
-            dataIndex: 'orderNo',
-            minWidth: '40',
-            align: 'center'
-          },
-          {
-            title: '网点名称',
-            dataIndex: 'storeName',
-            minWidth: '40',
-            align: 'center'
-          },
-          {
-            title: '服务项目',
-            dataIndex: 'itemName',
-            minWidth: '40',
-            align: 'center'
-          },
-          {
-            title: '手机号码',
-            dataIndex: 'customerMobile',
-            minWidth: '40',
-            align: 'center'
-          },
-          {
-            title: '应收(¥)',
-            dataIndex: 'payableAmount',
-            minWidth: '40',
-            align: 'center'
-          },
-          {
-            title: '实收(¥)',
-            dataIndex: 'paymentAmount',
-            minWidth: '40',
-            align: 'center',
-            scopedSlots: {
-              customRender: 'paymentAmount'
-            }
-
-          },
-          // {
-          //   title: '优惠(¥)',
-          //   dataIndex: 'couponAmount',
-          //   minWidth: '40',
-          //   align: 'center'
-          // },
-          {
-            title: '状态',
-            dataIndex: 'orderStatus',
-            minWidth: '40',
-            align: 'center',
-            scopedSlots: {
-              customRender: 'orderStatus'
-            }
-          },
-          {
-            title: '操作',
-            dataIndex: 'action',
-            minWidth: '40',
-            align: 'center',
-            scopedSlots: {
-              customRender: 'action'
-            }
-
-          }
-        ],
-        // 加载数据方法 必须为 Promise 对象
-        loadData: parameter => {
-          // console.log(this.searchForm.storeId)
-          this.searchForm.beginDate == null ? this.searchForm.beginDate = getDate.getToday().starttime : null
-          this.searchForm.endDate == null ? this.searchForm.endDate = getDate.getToday().endtime : null
-          this.searchForm.storeIdList = this.storeId 
-          // console.log(this.searchForm.storeId)
-          return orderCenterList(Object.assign(parameter, this.searchForm)).then(res => {
-            console.log(res,'0000000000000000000')
-            if (res.status == 200) {
-              // const no = (res.data.pageNo - 1) * res.data.pageSize
-              // for (let i = 0; i < res.data.list.length; i++) {
-              //   const _item = res.data.list[i]
-              //   _item.no = no + i + 1
-              //   _item.status = _item.status + '' === '1'
-              // }
-              return res.data.list
-            }
-          })
-        }
-      }
-    },
-    methods: {
-      moment,
-      // 创建时间change
-      onChange(dates, dateStrings) {
-        if ((dates, dateStrings)) {
-          this.searchForm.beginDate = dateStrings[0]
-          this.searchForm.endDate = dateStrings[1]
-        }
-        console.log(this.searchForm.beginDate, this.searchForm.endDate)
-      },
-      // 获取服务项目数据
-      getItemListData(){
-        itemList({pageNo:this.pageNo,pageSize:this.pageSize}).then(res=>{
-          console.log(res,'-----------')
-          if(res.status == 200){
-            this.itemOptionData = res.data.list
-          }
-        })
-      },
-      // 获取网点名称数据
-      getStoreListData(){
-        storeList({pageNo:this.pageNo,pageSize:this.pageSize}).then(res=>{
-          console.log(res,'-----------')
-          if(res.status == 200){
-            this.storeOptionData = res.data.list
-          }
-        })
-      },
-      // 合计
-      getTotal(){},
-      // 查看详情--跳转到对应的详情页
-      seeDetail(record) {
-        // this.$router.push({name: 'OrderDetail',query: {id: record.id}
-        // })
-        this.detailId = record.id
-        this.openDetailModal = true
-        console.log(this.detailId)
-      },
-      // 退款---暂不做
-      // refund(row) {
-      //   const _this = this
-      //   this.$confirm({
-      //     title: '警告',
-      //     content: '确认退款后 款项将通过原渠道退回 且不可撤回,确认退款?',
-      //     okText: '确定',
-      //     cancelText: '取消',
-      //     // onOk() {
-      //     // 	deleteItem({
-      //     // 		id: row.id
-      //     // 	}).then(res => {
-      //     // 		if (res.status == 200) {
-      //     // 			_this.$message.success('退款成功')
-      //     // 			_this.$refs.table.refresh()
-      //     // 		}
-      //     // 	})
-      //     // }
-      //   })
-      // },
-      // 重置
-      resetForm() {
-        this.searchForm.beginDate = getDate.getToday().starttime
-        this.searchForm.endDate = getDate.getToday().endtime
-        this.time = [
-        	moment(getDate.getToday().starttime, this.dateFormat),
-        	moment(getDate.getToday().endtime, this.dateFormat)
-        	]
-        this.storeId = []
-        this.searchForm.storeIdList = []
-        this.searchForm.orderNo = ''
-        this.searchForm.itemId = ''
-        this.searchForm.customerMobile = ''
-        this.searchForm.orderStatus = ''
-        // this.$refs.searchForm.resetFields()
-        this.$refs.table.refresh()
-      }
-    },
-    beforeRouteEnter (to, from, next) {
-      next(vm => {
-        vm.getItemListData()
-        vm.resetForm()
-        vm.getStoreListData()
-      })
-    }
-  }
-</script>
-<style lang="less">
-  .orderCenter-searchForm{
-    // 搜索框的下间距
-    .ant-form-item{
-      margin-bottom: 10px;
-    }
-  }
-  // 合计
-  .total {
-    margin:15px 0 25px;
-    width:100%;
-    background-color: #e6f7ff;
-    border: 1px solid #91d5ff;
-    padding: 8px 15px 8px 27px;
-    border-radius: 4px;
-    .iconImg{
-      color: #1890FF;
-      margin-right: 10px;
-    }
-  }
-  
-</style>

+ 0 - 161
src/views/Order/OrderDetailModal.vue

@@ -1,161 +0,0 @@
-<template>
-  <a-modal title="查看详情" :footer="null" :width="1100" :destroyOnClose="true" @cancel="isShow=false" v-model="isShow">
-    <v-select ref="orderStatus" code="ORDER_STATUS" placeholder="请选择" allowClear v-show="false"></v-select>
-    <div class="orderDetail-content">
-      <a-form>
-        <a-row :gutter="24">
-          <a-col :span="8">
-            <a-form-item label="下单时间" :label-col="{ span:6 }" :wrapper-col="{ span:12}">
-              <span>{{orderDetailData.orderTime}}</span>
-            </a-form-item>
-          </a-col>
-          <a-col :span="8">
-            <a-form-item label="单号" :label-col="{ span:6 }" :wrapper-col="{ span:12}">
-              <span>{{orderDetailData.orderNo}}</span>
-            </a-form-item>
-          </a-col>
-          <a-col :span="8">
-            <a-form-item label="门店名称" :label-col="{ span:6 }" :wrapper-col="{ span:12}">
-              <span>{{orderDetailData.storeName}}</span>
-            </a-form-item>
-          </a-col>
-        </a-row>
-        <a-row :gutter="24">
-          <a-col :span="8">
-            <a-form-item label="服务名称" :label-col="{ span:6 }" :wrapper-col="{ span:12}">
-              <span>{{orderDetailData.itemName}}</span>
-            </a-form-item>
-          </a-col>
-          <a-col :span="8">
-            <a-form-item label="手机号码" :label-col="{ span:6 }" :wrapper-col="{ span:12}">
-              <span>{{orderDetailData.customerMobile}}</span>
-            </a-form-item>
-          </a-col>
-          <a-col :span="8">
-            <a-form-item label="状态" :label-col="{ span:6 }" :wrapper-col="{ span:12}">
-              <span>{{orderDetailData.orderStatus}}</span>
-            </a-form-item>
-          </a-col>
-        </a-row>
-        <a-row :gutter="24">
-          <a-col :span="8">
-            <a-form-item label="应付(¥)" :label-col="{ span:6 }" :wrapper-col="{ span:12}">
-              <span>{{orderDetailData.payableAmount}} 元</span>
-            </a-form-item>
-          </a-col>
-          <a-col :span="8">
-            <a-form-item label="实付(¥)" :label-col="{ span:6 }" :wrapper-col="{ span:12}">
-              <span v-if=" orderDetailData.payStatus == 'PAID' ">{{orderDetailData.paymentAmount}} 元</span>
-              <span v-else-if=" orderDetailData.payStatus != 'PAID' ">{{ 0 }} 元</span>
-            </a-form-item>
-          </a-col>
-          <a-col :span="8">
-            <a-form-item label="洗车照片" :label-col="{ span:6 }" :wrapper-col="{ span:12}">
-              <div style="display: flex;">
-                <!-- <div>
-                  <div style="border: 1px solid #eee;overflow: hidden;padding: 8px 0 0 8px; margin-right: 20px;">
-                    <Upload :file-list="" :fileSize="0.25" listType="picture-card">
-                    </Upload>
-                  </div>
-                  <div style="text-align: center;">洗车前</div>
-                </div>
-                <div>
-                  <div style="border: 1px solid #eee;overflow: hidden;padding: 8px 0 0 8px;">
-                    <Upload :file-list="" :fileSize="0.25" listType="picture-card">
-                    </Upload>
-                  </div>
-                  <div style="text-align: center;">洗车后</div>
-                </div> -->
-              </div>
-            </a-form-item>
-          </a-col>
-        </a-row>
-        <a-row :gutter="24">
-          <!-- <a-col :span="8">
-            <a-form-item label="优惠(¥)" :label-col="{ span:6 }" :wrapper-col="{ span:12}">
-              <span>{{'-'}}</span>
-            </a-form-item>
-          </a-col>
-          <a-col :span="8">
-            <a-form-item label="优惠券名称" :label-col="{ span:6 }" :wrapper-col="{ span:12}">
-              <span>{{"-"}}</span>
-            </a-form-item>
-          </a-col> -->
-        </a-row>
-        <a-row style="text-align: center;margin-top: 100px;">
-          <a-col>
-            <a-form-item>
-              <a-button type="default" @click="isShow=false" >返回列表</a-button>
-            </a-form-item>
-          </a-col>
-        </a-row>
-      </a-form>
-    </div>
-  </a-modal>
-</template>
-
-<script>
-  import { Upload, VSelect } from '@/components'
-  import { orderDetail } from '../../api/order.js'
-  export default {
-    components: { Upload, VSelect },
-    name:'OrderDetailModal',
-    props: {
-      openModal: {  //  弹框是否展示
-        type: Boolean,
-        default: false
-      },
-      nowId:{
-        type: Number,
-        default: null 
-      }
-    },
-    data() {
-      return {
-        orderDetailData:[],
-        isShow: this.openModal,
-      }
-    },
-    methods: {
-      // // 查看详情
-      // getOrderDetail(){
-      //   orderDetail()
-      // },
-    },
-    watch: {
-      //  父页面传过来的弹框状态
-      openModal (newValue, oldValue) {
-        this.isShow = newValue
-      },
-      nowId(newValue, oldValue){
-        console.log(newValue)
-        if(newValue){
-          orderDetail({id:newValue}).then(res=>{
-            console.log(res,'------------')
-            if(res.status == 200){
-              setTimeout(() => {
-              	res.data.orderStatus = this.$refs.orderStatus.getNameByCode(res.data.orderStatus)
-              }, 100)
-              this.orderDetailData = res.data
-            }
-          })
-        }
-      },
-      //  重定义的弹框状态
-      isShow (val){
-        if (!val){
-          this.$emit('close')
-        }
-      }
-    },
-  }
-</script>
-<style lang="less">
-  .orderDetail-content .ant-form-inline .ant-form-item {
-    margin-bottom: 20px;
-  }
-  /* 去掉上传图片组件原有的删除按钮 */
-  :global(.anticon-delete) {
-    display: none;
-  }
-</style>

+ 0 - 206
src/views/RefundRecord/RefundRecord.vue

@@ -1,206 +0,0 @@
-<template>
-  <a-card :bordered="false">
-    <!-- 搜索条件 -->
-    <div class="orderCenter-searchForm">
-      <a-form ref="searchForm">
-        <a-row :gutter="48">
-          <a-col :span="8">
-            <a-form-item label="创建时间" :label-col="{ span:4 }" :wrapper-col="{ span:12}">
-              <a-range-picker v-model="time" :format="dateFormat" :placeholder="['开始时间','结束时间']" @change="onChange" />
-            </a-form-item>
-          </a-col>
-          <a-col :span="6">
-            <a-form-item label="关联订单号" :label-col="{ span:6 }" :wrapper-col="{ span:12}">
-              <a-input v-model.trim="searchForm.num" placeholder="请输入" allowClear  />
-            </a-form-item>
-          </a-col>
-          <a-col :span="6">
-            <a-form-item label="网点名称" :label-col="{ span:6 }" :wrapper-col="{ span:12}">
-              <v-select v-model="searchForm.name" placeholder="请选择" allowClear ></v-select>
-            </a-form-item>
-          </a-col>
-          <a-col :span="4">
-            <a-button style="margin-right: 10px;" type="primary" @click="$refs.table.refresh(true)">查询</a-button>
-            <a-button type="" @click="resetForm">重置</a-button>
-          </a-col>
-        </a-row>
-        <a-row :gutter="48">
-          <a-col :span="8">
-            <a-form-item label="服务项目" :label-col="{ span:4 }" :wrapper-col="{ span:12}">
-              <v-select v-model="searchForm.fwname" placeholder="请选择" allowClear></v-select>
-            </a-form-item>
-          </a-col>
-          <a-col :span="6">
-            <a-form-item label="退款状态" :label-col="{ span:6 }" :wrapper-col="{ span:12}">
-              <v-select v-model="searchForm.status" placeholder="请选择" allowClear ></v-select>
-            </a-form-item>
-          </a-col>
-        </a-row>
-      </a-form>
-    </div>
-    <!-- 合计 -->
-    <div class="total">
-      <a-icon type="info-circle" class="iconImg"/>
-      <strong>合计:</strong><span v-model="countHJ">{{countHJ}} 单</span><strong style="margin-left: 15px;">实收:</strong><span v-model="incomeHJ">{{incomeHJ}} 元</span>
-    </div>
-    <!-- 列表 -->
-    <s-table ref="table" size="default" :rowKey="(record) => record.id" :columns="columns" :data="loadData" bordered>
-      <!-- 退款状态 -->
-      <span slot="status" slot-scope="text, record">
-        <template></template>
-      </span>
-    </s-table>
-  </a-card>
-</template>
-
-<script>
-  import { STable, VSelect } from '@/components'
-  import getDate from '../../libs/getDate.js'
-  import moment from 'moment'
-  export default {
-    components: {
-      STable,
-      VSelect
-    },
-    data() {
-      return {
-        // 查询参数
-        searchForm: {
-          beginDate: null,  // 创建的开始时间
-          endDate: null,    // 创建的结束时间
-          name: '',         // 网点名称
-          num: '',          // 单号
-          fwname:'',        // 服务项目
-          status:''         // 状态
-        },
-        time: [
-          moment(getDate.getToday().starttime, this.dateFormat),
-          moment(getDate.getToday().endtime, this.dateFormat)
-        ],
-        dateFormat: 'YYYY-MM-DD',
-        countHJ:'40',
-        incomeHJ:'2000',
-        columns: [{
-            title: '创建时间',
-            dataIndex: 'createTime',
-            minWidth: '100',
-            align: 'center'
-
-          },
-          {
-            title: '交易流水号',
-            dataIndex: 'createTime',
-            minWidth: '100',
-            align: 'center'
-
-          },
-          {
-            title: '关联订单号',
-            dataIndex: 'createTime',
-            width: '100',
-            align: 'center'
-
-          },
-          {
-            title: '网点名称',
-            dataIndex: 'createTime',
-            minWidth: '100',
-            align: 'center'
-
-          },
-          {
-            title: '退款项目',
-            dataIndex: 'createTime',
-            minWidth: '100',
-            align: 'center'
-
-          },
-          {
-            title: '退款金额(¥)',
-            dataIndex: 'createTime',
-            minWidth: '40',
-            align: 'center'
-
-          },
-          {
-            title: '退款人',
-            dataIndex: 'createTime',
-            minWidth: '100',
-            align: 'center'
-
-          },
-          {
-            title: '退款状态',
-            dataIndex: 'createTime',
-            minWidth: '100',
-            align: 'center',
-            scopedSlots: {
-              customRender: 'status'
-            }
-          },
-          {
-            title: '备注',
-            dataIndex: 'status',
-            minWidth: '100',
-            align: 'center',
-          },
-        ],
-        // 加载数据方法 必须为 Promise 对象
-        loadData: parameter => {
-          // this.searchData.beginDate == null ? this.searchData.beginDate = getDate.getToday().starttime : null
-          // this.searchData.endDate == null ? this.searchData.endDate = getDate.getToday().endtime : null
-          // return getTenantsList(Object.assign(parameter, this.searchForm)).then(res => {
-          //   if (res.status == 200) {
-          //     const no = (res.data.pageNo - 1) * res.data.pageSize
-          //     for (let i = 0; i < res.data.list.length; i++) {
-          //       const _item = res.data.list[i]
-          //       _item.no = no + i + 1
-          //       _item.status = _item.status + '' === '1'
-          //     }
-          //     return res.data
-          //   }
-          // })
-        }
-      }
-    },
-    methods: {
-      // 创建时间change
-      onChange(dates, dateStrings) {
-        if ((dates, dateStrings)) {
-          this.searchForm.beginDate = dateStrings[0]
-          this.searchForm.endDate = dateStrings[1]
-        }
-        console.log(this.searchForm.beginDate, this.searchForm.endDate)
-      },
-      // 重置
-      resetForm() {
-        this.$refs.searchForm.resetFields()
-        this.$refs.table.refresh(true)
-      },
-    },
-  }
-</script>
-
-<style lang="less">
-  .orderCenter-searchForm,
-  .addButton {
-    margin-bottom: 0;
-  }
-
-  .orderCenter-searchForm .ant-form-inline .ant-form-item {
-    margin-bottom: 15px;
-  }
-
-  .total {
-    margin-bottom: 24px;
-    width:100%;
-    background-color: #e6f7ff;
-    border: 1px solid #91d5ff;
-    padding: 8px 15px 8px 27px;
-    border-radius: 4px;
-    .iconImg{
-      color: #1890FF;
-      margin-right: 10px;
-    }
-  }
-</style>

+ 1 - 0
src/views/user/Login.vue

@@ -184,6 +184,7 @@ export default {
     },
     handleSubmit (e) {
       e.preventDefault()
+      // this.$router.push({ name: 'AvailableCoupon' })
       const {
         form: { validateFields },
         state,

+ 3 - 3
vue.config.js

@@ -108,8 +108,8 @@ const vueConfig = {
     // If you want to turn on the proxy, please remove the mockjs /src/main.jsL11
     proxy: {
       '/api': {
-        target: 'http://192.168.16.102:8101/cw-admin/',
-        // target: 'https://zyyc.chelingzhu.com/cw-admin/',
+        // target: 'http://192.168.16.104:8104/cw-coupon/',
+        target: 'https://carwash-store.test.zyucgj.com/cw-coupon/',
         ws: false,
         changeOrigin: true,
         pathRewrite: {
@@ -117,7 +117,7 @@ const vueConfig = {
         },
         // ÖØÐ´cookie·¾¶
         cookiePathRewrite: {
-          '/cw-admin/': '/'
+          '/cw-coupon/': '/'
         }
       }
     }