Browse Source

bosUpload

OnePsycho 5 years ago
parent
commit
25a353b7e4

+ 137 - 41
package-lock.json

@@ -32,6 +32,30 @@
         }
       }
     },
+    "@baiducloud/bos-uploader": {
+      "version": "1.4.0-rc.0",
+      "resolved": "https://registry.npmjs.org/@baiducloud/bos-uploader/-/bos-uploader-1.4.0-rc.0.tgz",
+      "integrity": "sha512-joJBrEFR9n6vvPqL4NId42j9hrePwztFCkG3klJetHRUTGA3YyWbSrKcgDn5gnyzHT9GtNbi4m2eNxaDq2aruQ==",
+      "requires": {
+        "@baiducloud/sdk": "^1.0.0-rc.4",
+        "async": "^2.6.1",
+        "debug": "^3.1.0",
+        "spark-md5": "^3.0.0",
+        "underscore": "^1.9.1"
+      }
+    },
+    "@baiducloud/sdk": {
+      "version": "1.0.0-rc.14",
+      "resolved": "https://registry.npmjs.org/@baiducloud/sdk/-/sdk-1.0.0-rc.14.tgz",
+      "integrity": "sha512-i6whDYBIusZWKULDBbxb7P2GEr7peBPszpc0LJWl1csd0LlMVm0pu6e8w1cF6ylRFMURIG9+RdISkGrbKbEhmg==",
+      "requires": {
+        "async": "^2.6.1",
+        "debug": "^3.1.0",
+        "q": "^1.5.1",
+        "underscore": "^1.9.1",
+        "urlencode": "^1.1.0"
+      }
+    },
     "@types/q": {
       "version": "1.5.2",
       "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.2.tgz",
@@ -305,7 +329,6 @@
       "version": "2.6.3",
       "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz",
       "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==",
-      "dev": true,
       "requires": {
         "lodash": "^4.17.14"
       }
@@ -3269,7 +3292,6 @@
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz",
       "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==",
-      "dev": true,
       "requires": {
         "is-arguments": "^1.0.4",
         "is-date-object": "^1.0.1",
@@ -3294,7 +3316,6 @@
       "version": "1.1.3",
       "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
       "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
-      "dev": true,
       "requires": {
         "object-keys": "^1.0.12"
       }
@@ -3497,6 +3518,11 @@
         }
       }
     },
+    "dom-to-image": {
+      "version": "2.6.0",
+      "resolved": "https://registry.npmjs.org/dom-to-image/-/dom-to-image-2.6.0.tgz",
+      "integrity": "sha1-ilA2CAiMh7HCL5A0rgMuGJiVWGc="
+    },
     "domain-browser": {
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz",
@@ -3685,7 +3711,6 @@
       "version": "1.17.0",
       "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.0.tgz",
       "integrity": "sha512-yYkE07YF+6SIBmg1MsJ9dlub5L48Ek7X0qz+c/CPCHS9EBXfESorzng4cJQjJW5/pB6vDF41u7F8vUhLVDqIug==",
-      "dev": true,
       "requires": {
         "es-to-primitive": "^1.2.1",
         "function-bind": "^1.1.1",
@@ -3704,7 +3729,6 @@
       "version": "1.2.1",
       "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
       "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
-      "dev": true,
       "requires": {
         "is-callable": "^1.1.4",
         "is-date-object": "^1.0.1",
@@ -4252,6 +4276,11 @@
         }
       }
     },
+    "extend": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+      "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
+    },
     "extend-shallow": {
       "version": "3.0.2",
       "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
@@ -4358,6 +4387,11 @@
       "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
       "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk="
     },
+    "fast-diff": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.1.2.tgz",
+      "integrity": "sha512-KaJUt+M9t1qaIteSvjc6P3RbMdXsNhK61GRftR6SNxqmhthcd9MGIi4T+o0jD8LUSpSnSKXE20nLtJ3fOHxQig=="
+    },
     "fast-json-stable-stringify": {
       "version": "2.1.0",
       "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
@@ -4740,14 +4774,12 @@
         "balanced-match": {
           "version": "1.0.0",
           "bundled": true,
-          "dev": true,
-          "optional": true
+          "dev": true
         },
         "brace-expansion": {
           "version": "1.1.11",
           "bundled": true,
           "dev": true,
-          "optional": true,
           "requires": {
             "balanced-match": "^1.0.0",
             "concat-map": "0.0.1"
@@ -4767,8 +4799,7 @@
         "concat-map": {
           "version": "0.0.1",
           "bundled": true,
-          "dev": true,
-          "optional": true
+          "dev": true
         },
         "console-control-strings": {
           "version": "1.1.0",
@@ -4916,7 +4947,6 @@
           "version": "3.0.4",
           "bundled": true,
           "dev": true,
-          "optional": true,
           "requires": {
             "brace-expansion": "^1.1.7"
           }
@@ -5244,8 +5274,7 @@
     "function-bind": {
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
-      "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
-      "dev": true
+      "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
     },
     "functional-red-black-tree": {
       "version": "1.0.1",
@@ -5369,7 +5398,6 @@
       "version": "1.0.3",
       "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
       "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
-      "dev": true,
       "requires": {
         "function-bind": "^1.1.1"
       }
@@ -5392,8 +5420,7 @@
     "has-symbols": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz",
-      "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==",
-      "dev": true
+      "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg=="
     },
     "has-value": {
       "version": "1.0.0",
@@ -5671,7 +5698,6 @@
       "version": "0.4.24",
       "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
       "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
-      "dev": true,
       "requires": {
         "safer-buffer": ">= 2.1.2 < 3"
       }
@@ -5991,8 +6017,7 @@
     "is-arguments": {
       "version": "1.0.4",
       "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz",
-      "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==",
-      "dev": true
+      "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA=="
     },
     "is-arrayish": {
       "version": "0.2.1",
@@ -6017,8 +6042,7 @@
     "is-callable": {
       "version": "1.1.5",
       "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz",
-      "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==",
-      "dev": true
+      "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q=="
     },
     "is-color-stop": {
       "version": "1.1.0",
@@ -6055,8 +6079,7 @@
     "is-date-object": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz",
-      "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==",
-      "dev": true
+      "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g=="
     },
     "is-descriptor": {
       "version": "0.1.6",
@@ -6186,7 +6209,6 @@
       "version": "1.0.5",
       "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz",
       "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==",
-      "dev": true,
       "requires": {
         "has": "^1.0.3"
       }
@@ -6222,7 +6244,6 @@
       "version": "1.0.3",
       "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz",
       "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==",
-      "dev": true,
       "requires": {
         "has-symbols": "^1.0.1"
       }
@@ -7133,8 +7154,7 @@
     "object-assign": {
       "version": "4.1.1",
       "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
-      "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
-      "dev": true
+      "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
     },
     "object-copy": {
       "version": "0.1.0",
@@ -7167,20 +7187,17 @@
     "object-inspect": {
       "version": "1.7.0",
       "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz",
-      "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==",
-      "dev": true
+      "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw=="
     },
     "object-is": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.0.2.tgz",
-      "integrity": "sha512-Epah+btZd5wrrfjkJZq1AOB9O6OxUQto45hzFd7lXGrpHPGE0W1k+426yrZV+k6NJOzLNNW/nVsmZdIWsAqoOQ==",
-      "dev": true
+      "integrity": "sha512-Epah+btZd5wrrfjkJZq1AOB9O6OxUQto45hzFd7lXGrpHPGE0W1k+426yrZV+k6NJOzLNNW/nVsmZdIWsAqoOQ=="
     },
     "object-keys": {
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
-      "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
-      "dev": true
+      "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="
     },
     "object-visit": {
       "version": "1.0.1",
@@ -7194,7 +7211,6 @@
       "version": "4.1.0",
       "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz",
       "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==",
-      "dev": true,
       "requires": {
         "define-properties": "^1.1.2",
         "function-bind": "^1.1.1",
@@ -7462,6 +7478,11 @@
         "no-case": "^2.2.0"
       }
     },
+    "parchment": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmjs.org/parchment/-/parchment-1.1.4.tgz",
+      "integrity": "sha512-J5FBQt/pM2inLzg4hEWmzQx/8h8D0CiDxaG3vyp9rKrQRSDgBlhjdP5jQGgosEajXPSQouXGHOmVdgo7QmJuOg=="
+    },
     "parent-module": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
@@ -9962,8 +9983,7 @@
     "q": {
       "version": "1.5.1",
       "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
-      "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=",
-      "dev": true
+      "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc="
     },
     "qs": {
       "version": "6.7.0",
@@ -9999,6 +10019,41 @@
       "integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==",
       "dev": true
     },
+    "quill": {
+      "version": "1.3.7",
+      "resolved": "https://registry.npmjs.org/quill/-/quill-1.3.7.tgz",
+      "integrity": "sha512-hG/DVzh/TiknWtE6QmWAF/pxoZKYxfe3J/d/+ShUWkDvvkZQVTPeVmUJVu1uE6DDooC4fWTiCLh84ul89oNz5g==",
+      "requires": {
+        "clone": "^2.1.1",
+        "deep-equal": "^1.0.1",
+        "eventemitter3": "^2.0.3",
+        "extend": "^3.0.2",
+        "parchment": "^1.1.4",
+        "quill-delta": "^3.6.2"
+      },
+      "dependencies": {
+        "clone": {
+          "version": "2.1.2",
+          "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
+          "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18="
+        },
+        "eventemitter3": {
+          "version": "2.0.3",
+          "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-2.0.3.tgz",
+          "integrity": "sha1-teEHm1n7XhuidxwKmTvgYKWMmbo="
+        }
+      }
+    },
+    "quill-delta": {
+      "version": "3.6.3",
+      "resolved": "https://registry.npmjs.org/quill-delta/-/quill-delta-3.6.3.tgz",
+      "integrity": "sha512-wdIGBlcX13tCHOXGMVnnTVFtGRLoP0imqxM696fIPwIf5ODIYUHIvHbZcyvGlZFiFhK5XzDC2lpjbxRhnM05Tg==",
+      "requires": {
+        "deep-equal": "^1.0.1",
+        "extend": "^3.0.2",
+        "fast-diff": "1.1.2"
+      }
+    },
     "randombytes": {
       "version": "2.1.0",
       "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
@@ -10199,7 +10254,6 @@
       "version": "1.3.0",
       "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz",
       "integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==",
-      "dev": true,
       "requires": {
         "define-properties": "^1.1.3",
         "es-abstract": "^1.17.0-next.1"
@@ -10445,8 +10499,7 @@
     "safer-buffer": {
       "version": "2.1.2",
       "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
-      "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
-      "dev": true
+      "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
     },
     "sax": {
       "version": "1.2.4",
@@ -10979,6 +11032,11 @@
       "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
       "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM="
     },
+    "spark-md5": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.1.tgz",
+      "integrity": "sha512-0tF3AGSD1ppQeuffsLDIOWlKUd3lS92tFxcsrh5Pe3ZphhnoK+oXIBTzOAThZCiuINZLvpiLH/1VS1/ANEJVig=="
+    },
     "spdx-correct": {
       "version": "3.1.0",
       "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz",
@@ -11239,7 +11297,6 @@
       "version": "2.1.1",
       "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz",
       "integrity": "sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag==",
-      "dev": true,
       "requires": {
         "define-properties": "^1.1.3",
         "function-bind": "^1.1.1"
@@ -11249,7 +11306,6 @@
       "version": "2.1.1",
       "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz",
       "integrity": "sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g==",
-      "dev": true,
       "requires": {
         "define-properties": "^1.1.3",
         "function-bind": "^1.1.1"
@@ -11755,6 +11811,11 @@
         }
       }
     },
+    "underscore": {
+      "version": "1.10.2",
+      "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.10.2.tgz",
+      "integrity": "sha512-N4P+Q/BuyuEKFJ43B9gYuOj4TQUHXX+j2FqguVOpjkssLUUrnJofCcBccJSCoeturDoZU6GorDTHSvUDlSQbTg=="
+    },
     "union-value": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",
@@ -11915,6 +11976,14 @@
         "requires-port": "^1.0.0"
       }
     },
+    "urlencode": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/urlencode/-/urlencode-1.1.0.tgz",
+      "integrity": "sha1-HyuibwE8hfATP3o61v8nMK33y7c=",
+      "requires": {
+        "iconv-lite": "~0.4.11"
+      }
+    },
     "use": {
       "version": "3.1.1",
       "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
@@ -12046,6 +12115,24 @@
         }
       }
     },
+    "vue-gn-components": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/vue-gn-components/-/vue-gn-components-1.1.0.tgz",
+      "integrity": "sha512-OgT/Y2KwidrwVtFXQBbx2bzgkCExA78e5yY5zJQ6vJ5KYihAwB/TDFFXR3OwxDLart2WhNh5vyBk4hdg10tUvQ==",
+      "requires": {
+        "core-js": "^3.3.2",
+        "dom-to-image": "^2.6.0",
+        "vue": "^2.6.10",
+        "vue-router": "^3.1.3"
+      },
+      "dependencies": {
+        "core-js": {
+          "version": "3.6.1",
+          "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.1.tgz",
+          "integrity": "sha512-186WjSik2iTGfDjfdCZAxv2ormxtKgemjC3SI6PL31qOA0j5LhTDVjHChccoc7brwLvpvLPiMyRlcO88C4l1QQ=="
+        }
+      }
+    },
     "vue-hot-reload-api": {
       "version": "2.3.4",
       "resolved": "https://registry.npmjs.org/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz",
@@ -12123,6 +12210,15 @@
         }
       }
     },
+    "vue-quill-editor": {
+      "version": "3.0.6",
+      "resolved": "https://registry.npmjs.org/vue-quill-editor/-/vue-quill-editor-3.0.6.tgz",
+      "integrity": "sha512-g20oSZNWg8Hbu41Kinjd55e235qVWPLfg4NvsLW6d+DhgBTFbEuMpcWlUdrD6qT3+Noim6DRu18VLM9lVShXOQ==",
+      "requires": {
+        "object-assign": "^4.1.1",
+        "quill": "^1.3.4"
+      }
+    },
     "vue-router": {
       "version": "3.1.3",
       "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-3.1.3.tgz",

+ 3 - 0
package.json

@@ -11,12 +11,15 @@
     "deploy": "node ./upload/upload.js"
   },
   "dependencies": {
+    "@baiducloud/bos-uploader": "^1.4.0-rc.0",
     "ajv": "^6.10.2",
     "echarts": "^4.2.0-rc.2",
     "element-ui": "^2.3.2",
     "http-proxy-middleware": "^0.18.0",
     "js-md5": "^0.7.3",
     "vue": "^2.5.2",
+    "vue-gn-components": "^1.1.0",
+    "vue-quill-editor": "^3.0.6",
     "vue-router": "^3.0.1",
     "vuex": "^3.0.1"
   },

+ 14 - 1
src/api/axiosFun.js

@@ -29,7 +29,7 @@ const loginreq = (method, url, params) => {
 const req = (method, url, params) => {
     return axios({
         method: method,
-        url: url,
+        url: 'https://onepsycho.com/' + url,
         headers: {
             'Content-Type': 'application/x-www-form-urlencoded'
         },
@@ -51,7 +51,20 @@ const req = (method, url, params) => {
     }).then(res => res.data);
 };
 
+// 通用公用方法
+const reqJson = (method, url, params) => {
+    return axios({
+        method: method,
+        url: 'https://onepsycho.com/' + url,
+        headers: {
+            'Content-Type': 'application/json'
+        },
+        data: params
+    }).then(res => res.data);
+};
+
 export {
     loginreq,
+    reqJson,
     req
 }

+ 6 - 3
src/api/userMG.js

@@ -1,5 +1,5 @@
 import axios from 'axios';
-import { loginreq, req } from './axiosFun';
+import { loginreq, req,reqJson } from './axiosFun';
 
 // 登录接口 
 export const login = (params) => { return loginreq("post", "/api/login", params) };
@@ -12,9 +12,12 @@ export const loginout = () => { return axios.delete("/api/login?&token=" + local
  * 用户管理 
  **/
 // 用户管理-获取用户列表
-export const userList = (params) => { return req("post", "https://hystkj.com/api/list", params) };
+export const userList = (params) => { return req("post", "api/list", params) };
 // 用户管理-保存(添加编辑)
-export const userSave = (params) => { return req("post", "/api/User/save", params) };
+export const userSave = (params) => { return reqJson("post", "api/User/save", params) };
+
+// 用户管理-保存(添加编辑)
+export const saveNews = (params) => { return req("post", "api/saveNews", params) };
 // 用户管理-删除用户
 export const userDelete = (params) => { return axios.delete("/api/User/delete?ids=" + params + "&token=" + localStorage.getItem('logintoken')).then(res => res.data) };
 // 用户管理-重置密码

+ 1 - 1
src/components/Pagination.vue

@@ -25,7 +25,7 @@ export default {
        * 参数1 父元素方法
        * 参数2 数据
        */
-      this.pageparm.pageSize = val
+      this.pageparm.pageSize = 40
       this.$emit('callFather', this.pageparm)
     },
     handleCurrentChange(val) {

+ 19 - 85
src/components/leftnav.vue

@@ -36,37 +36,28 @@ export default {
     let res = {
       success: true,
       data: [
-        {
-          menuid: 1,
-          icon: 'li-icon-xiangmuguanli',
-          menuname: '基础管理',
-          hasThird: null,
-          url: null,
-          menus: [
-            {
-              menuid: 2,
-              icon: 'icon-cat-skuQuery',
-              menuname: '商品管理',
-              hasThird: 'N',
-              url: 'goods/Goods',
-              menus: null
-            }
-          ]
-        },
         {
           menuid: 33,
           icon: 'li-icon-dingdanguanli',
-          menuname: '订单管理',
+          menuname: '数据管理',
           hasThird: null,
           url: null,
           menus: [
             {
               menuid: 34,
               icon: 'icon-order-manage',
-              menuname: '交易订单',
+              menuname: '数据列表',
               hasThird: 'N',
               url: 'pay/Order',
               menus: null
+            },
+            {
+              menuid: 35,
+              icon: 'icon-order-manage',
+              menuname: '新增数据',
+              hasThird: 'N',
+              url: 'pay/Config',
+              menus: null
             }
           ]
         },
@@ -93,82 +84,25 @@ export default {
               url: 'system/Module',
               menus: null
             },
-            // {
-            //   menuid: 73,
-            //   icon: 'icon-news-manage',
-            //   menuname: '角色管理',
-            //   hasThird: 'N',
-            //   url: 'system/Role',
-            //   menus: null
-            // },
-            // {
-            //   menuid: 74,
-            //   icon: 'icon-cs-manage',
-            //   menuname: '公司管理',
-            //   hasThird: 'N',
-            //   url: 'system/Dept',
-            //   menus: null
-            // },
-            // {
-            //   menuid: 75,
-            //   icon: 'icon-promotion-manage',
-            //   menuname: '系统环境变量',
-            //   hasThird: 'N',
-            //   url: 'system/Variable',
-            //   menus: null
-            // },
-            // {
-            //   menuid: 76,
-            //   icon: 'icon-cms-manage',
-            //   menuname: '权限管理',
-            //   hasThird: 'N',
-            //   url: 'system/Permission',
-            //   menus: null
-            // }
-          ]
-        },
-        {
-          menuid: 128,
-          icon: 'li-icon-shangchengxitongtubiaozitihuayuanwenjian91',
-          menuname: '支付管理',
-          hasThird: null,
-          url: null,
-          menus: [
             {
-              menuid: 129,
-              icon: 'icon-provider-manage',
-              menuname: '支付配置信息',
+              menuid: 73,
+              icon: 'icon-news-manage',
+              menuname: '福图识别',
               hasThird: 'N',
-              url: 'machine/MachineConfig',
+              url: 'system/Role',
               menus: null
             },
             {
-              menuid: 175,
-              icon: 'icon-provider-manage',
-              menuname: '支付配置',
+              menuid: 74,
+              icon: 'icon-cs-manage',
+              menuname: '工具菜单',
               hasThird: 'N',
-              url: 'pay/Config',
+              url: 'system/Dept',
               menus: null
             }
+           
           ]
         },
-        {
-          menuid: 150,
-          icon: 'li-icon-shangchengxitongtubiaozitihuayuanwenjian91',
-          menuname: '图表',
-          hasThird: null,
-          url: null,
-          menus: [
-            {
-              menuid: 159,
-              icon: 'icon-provider-manage',
-              menuname: '数据可视化',
-              hasThird: 'N',
-              url: 'charts/statistics',
-              menus: null
-            }
-          ]
-        }
       ],
       msg: 'success'
     }

+ 13 - 0
src/main.js

@@ -11,6 +11,12 @@ import router from './router';
 import store from './vuex/store';
 // 引入icon
 import './assets/icon/iconfont.css'
+
+import 'quill/dist/quill.core.css'
+import 'quill/dist/quill.snow.css'
+import 'quill/dist/quill.bubble.css'
+
+import bosUpload from '@baiducloud/bos-uploader'
 // 
 
 // 引入echarts
@@ -20,6 +26,13 @@ Vue.prototype.$echarts = echarts
 import axios from 'axios';
 Vue.prototype.$axios = axios;
 
+import VueGnComponents from "vue-gn-components";
+import "vue-gn-components/lib/style/index.css";
+Vue.use(VueGnComponents)
+Vue.use(bosUpload)
+
+
+
 Vue.config.productionTip = false;
 
 // 使用element UI

+ 4 - 4
src/views/login.vue

@@ -55,10 +55,10 @@ export default {
   },
   // 创建完毕状态(里面是操作)
   created() {
-    this.$message({
-      message: '账号密码及验证码不为空即可',
-      type: 'success'
-    })
+    // this.$message({
+    //   message: '账号密码及验证码不为空即可',
+    //   type: 'success'
+    // })
     // 获取图形验证码
     this.getcode()
     // 获取存在本地的用户名密码

+ 103 - 571
src/views/pay/Config.vue

@@ -1,600 +1,119 @@
-/**
- * 支付管理 支付配置
- */
 <template>
   <div>
     <!-- 面包屑导航 -->
     <el-breadcrumb separator-class="el-icon-arrow-right">
       <el-breadcrumb-item :to="{ path: '/' }">首页</el-breadcrumb-item>
-      <el-breadcrumb-item>支付配置</el-breadcrumb-item>
+      <el-breadcrumb-item>新增数据</el-breadcrumb-item>
     </el-breadcrumb>
-    <!-- 搜索筛选 -->
-    <el-form :inline="true" :model="formInline" class="user-search">
-      <el-form-item label="搜索:">
-        <el-input size="small" v-model="formInline.name" placeholder="输入名称"></el-input>
+
+    <el-form
+      :model="ruleForm"
+      :rules="rules"
+      ref="ruleForm"
+      label-width="100px"
+      class="demo-ruleForm"
+    >
+      <el-form-item label="标题" prop="title">
+        <el-input v-model="ruleForm.title"></el-input>
       </el-form-item>
-      <el-form-item>
-        <el-select size="small" v-model="formInline.payType" placeholder="请选择">
-          <el-option v-for="type in payType" :label="type.key" :value="type.value" :key="type.value"></el-option>
-        </el-select>
+      <el-form-item label="简介" prop="summary">
+       <el-input type="textarea" v-model="ruleForm.summary"></el-input>
       </el-form-item>
-      <el-form-item label="">
-        <el-input size="small" v-model="formInline.partner" placeholder="输入商户号"></el-input>
+      
+      <el-form-item label="内容" prop="content">
+       <quill-editor ref="text" v-model="ruleForm.content" class="myQuillEditor" :options="editorOption" />
       </el-form-item>
+
       <el-form-item>
-        <el-button size="small" type="primary" icon="el-icon-search" @click="search">搜索</el-button>
-        <el-button size="small" type="primary" icon="el-icon-plus" @click="handleEdit()">添加</el-button>
+        <el-button type="primary" @click="submitForm('ruleForm')">立即创建</el-button>
+        <el-button @click="resetForm('ruleForm')">重置</el-button>
       </el-form-item>
     </el-form>
-    <!--列表-->
-    <el-table size="small" :data="listData" highlight-current-row v-loading="loading" border element-loading-text="拼命加载中" style="width: 100%;">
-      <el-table-column align="center" type="index" width="60">
-      </el-table-column>
-      <el-table-column sortable prop="name" label="名称" width="200" show-overflow-tooltip>
-      </el-table-column>
-      <el-table-column sortable prop="payType" label="支付类型" width="120" show-overflow-tooltip>
-      </el-table-column>
-      <el-table-column sortable prop="partner" label="商户号" width="100" show-overflow-tooltip>
-      </el-table-column>
-      <el-table-column sortable prop="subMchId" label="微信子商户" width="140" show-overflow-tooltip>
-      </el-table-column>
-      <el-table-column sortable prop="appid" label="应用ID" width="100" show-overflow-tooltip>
-      </el-table-column>
-      <el-table-column sortable prop="signType" label="加密类型" width="120" show-overflow-tooltip>
-      </el-table-column>
-      <el-table-column sortable prop="partnerKey" label="商户签名密钥" width="180" show-overflow-tooltip>
-      </el-table-column>
-      <el-table-column sortable prop="notifyUrl" label="通知回调" width="140" show-overflow-tooltip>
-      </el-table-column>
-      <el-table-column sortable prop="sellerUserId" label="支付宝卖家" width="150" show-overflow-tooltip>
-      </el-table-column>
-      <el-table-column sortable prop="certPath" label="微信证书路径" width="150" show-overflow-tooltip>
-      </el-table-column>
-      <el-table-column align="center" label="操作" min-width="150">
-        <template slot-scope="scope">
-          <el-button size="mini" @click="handleEdit(scope.$index, scope.row)">编辑</el-button>
-          <el-button size="mini" type="danger" @click="deleteUser(scope.$index, scope.row)">删除</el-button>
-        </template>
-      </el-table-column>
-    </el-table>
-    <!-- 分页组件 -->
-    <Pagination v-bind:child-msg="pageparm" @callFather="callFather"></Pagination>
-    <!-- 编辑界面 -->
-    <el-dialog :title="title" :visible.sync="editFormVisible" width="30%" @click="closeDialog('editForm')">
-      <el-form label-width="120px" :model="editForm" :rules="rules" ref="editForm">
-        <el-form-item label="名称" prop="name">
-          <el-input size="small" v-model="editForm.name" auto-complete="off" placeholder="请输入名称"></el-input>
-        </el-form-item>
-        <el-form-item label="支付类型" prop="payType">
-          <el-select size="small" v-model="editForm.payType" placeholder="请选择" class="userRole">
-            <el-option v-for="type in payType" :label="type.key" :value="type.value" :key="type.value"></el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item label="商户号" prop="partner">
-          <el-input size="small" v-model="editForm.partner" auto-complete="off" placeholder="请输入商户号"></el-input>
-        </el-form-item>
-        <el-form-item label="微信子商户" prop="subMchId">
-          <el-input size="small" v-model="editForm.subMchId" auto-complete="off" placeholder="请输入微信子商户"></el-input>
-        </el-form-item>
-        <el-form-item label="应用ID" prop="appid">
-          <el-input size="small" v-model="editForm.appid" auto-complete="off" placeholder="请输入应用ID"></el-input>
-        </el-form-item>
-        <el-form-item label="通知回调" prop="notifyUrl">
-          <el-input size="small" v-model="editForm.notifyUrl" auto-complete="off" placeholder="请输入通知回调"></el-input>
-        </el-form-item>
-        <el-form-item label="加密类型" prop="signType">
-          <el-input size="small" v-model="editForm.signType" auto-complete="off" placeholder="请输入加密类型"></el-input>
-        </el-form-item>
-        <el-form-item label="商户签名密钥" prop="partnerKey">
-          <el-input size="small" v-model="editForm.partnerKey" auto-complete="off" placeholder="请输入商户签名密钥"></el-input>
-        </el-form-item>
-        <el-form-item label="支付宝卖家" prop="sellerUserId">
-          <el-input size="small" v-model="editForm.sellerUserId" auto-complete="off" placeholder="请输入支付宝卖家"></el-input>
-        </el-form-item>
-        <el-form-item label="微信证书路径" prop="certPath">
-          <el-input size="small" v-model="editForm.certPath" auto-complete="off" placeholder="请输入微信证书路径"></el-input>
-        </el-form-item>
-        <el-form-item label="微信证书密码" prop="certPassword">
-          <el-input size="small" v-model="editForm.certPassword" auto-complete="off" placeholder="请输入微信证书密码"></el-input>
-        </el-form-item>
-        <el-form-item label="支付宝私钥" prop="rsaKey">
-          <el-input size="small" v-model="editForm.rsaKey" auto-complete="off" placeholder="请输入支付宝私钥"></el-input>
-        </el-form-item>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button size="small" @click="closeDialog('editForm')">取消</el-button>
-        <el-button size="small" type="primary" :loading="loading" class="title" @click="submitForm('editForm')">保存</el-button>
-      </div>
-    </el-dialog>
+
+    <el-upload
+          class="upload-demo"
+          action="https://jsonplaceholder.typicode.com/posts/"
+          @http-request="beforeUpload"
+          @before-upload="beforeUpload">
+          <el-button size="small" type="primary">点击上传</el-button>
+        </el-upload>
   </div>
 </template>
 
 <script>
-import { ConfigList, ConfigSave, ConfigDelete } from '../../api/payMG'
-import Pagination from '../../components/Pagination'
+import { saveNews } from "../../api/userMG";
+import { quillEditor } from 'vue-quill-editor'
+import bosUpload from '@baiducloud/bos-uploader'
 export default {
+  components:{ quillEditor },
   data() {
-    return {
-      loading: false, //是显示加载
-      editFormVisible: false, //控制编辑页面显示与隐藏
-      title: '添加',
-      payType: [
-        { key: '请选择', value: 0 },
-        { key: '现金', value: 1 },
-        { key: '支付宝', value: 2 },
-        { key: '微信', value: 3 },
-        { key: 'POS通', value: 4 },
-        { key: '闪付', value: 5 },
-        { key: 'POS通C扫B', value: 6 },
-        { key: '银联二维码', value: 8 },
-        { key: '会员余额支付', value: 9 }
-      ],
-      editForm: {
-        id: '',
-        name: '',
-        payType: 1,
-        partner: '',
-        subMchId: '',
-        appid: '',
-        notifyUrl: '',
-        signType: '',
-        partnerKey: '',
-        sellerUserId: '',
-        certPath: '',
-        certPassword: '',
-        rsaKey: '',
-        token: localStorage.getItem('logintoken')
-      },
-      // rules表单验证
-      rules: {
-        name: [{ required: true, message: '请输入名称', trigger: 'blur' }],
-        payType: [
-          { required: true, message: '请选择支付方式', trigger: 'blur' }
-        ],
-        partner: [{ required: true, message: '请输入商户号', trigger: 'blur' }],
-        subMchId: [
-          { required: true, message: '请输入微信子商户号', trigger: 'blur' }
-        ],
-        appid: [{ required: true, message: '请输入应用ID', trigger: 'blur' }],
-        notifyUrl: [
-          { required: true, message: '请输入通知回调', trigger: 'blur' }
-        ],
-        signType: [
-          { required: true, message: '请输入加密类型', trigger: 'blur' }
-        ],
-        partnerKey: [
-          { required: true, message: '请输入商户签名密钥', trigger: 'blur' }
-        ],
-        sellerUserId: [
-          { required: true, message: '请输入支付宝卖家', trigger: 'blur' }
-        ],
-        certPath: [
-          { required: true, message: '请输入微信证书路径', trigger: 'blur' }
-        ],
-        certPassword: [
-          { required: true, message: '请输入微信证书密码', trigger: 'blur' }
-        ],
-        rsaKey: [
-          { required: true, message: '请输入支付宝私钥', trigger: 'blur' }
-        ]
-      },
-      formInline: {
-        page: 1,
-        limit: 10,
-        name: '',
-        payType: 0,
-        partner: '',
-        token: localStorage.getItem('logintoken')
-      },
-      // 删除部门
-      seletedata: {
-        ids: '',
-        token: localStorage.getItem('logintoken')
-      },
-      userparm: [], //搜索权限
-      listData: [], //用户数据
-      // 分页参数
-      pageparm: {
-        currentPage: 1,
-        pageSize: 10,
-        total: 10
-      }
-    }
-  },
-  // 注册组件
-  components: {
-    Pagination
-  },
-  /**
-   * 数据发生改变
-   */
-
-  /**
-   * 创建完毕
-   */
-  created() {
-    this.getdata(this.formInline)
-  },
+      return {
+        ruleForm: {
+          title: '',
+          summary: '',
+          content:''
+        },
+        editorOption: {} ,
+        rules: {
+          title: [
+            { required: true, message: '请输入活动名称', trigger: 'blur' },
+          ],
+          summary: [
+            { required: true, message: '请选择活动区域', trigger: 'change' }
+          ],
+          content: [
+            { required: true, message: '请选择活动区域', trigger: 'change' }
+          ]
+        }
+      };
+    },
+    created(){
+      console.log(bosUpload)
 
-  /**
-   * 里面的方法只有被调用才会执行
-   */
-  methods: {
-    // 获取公司列表
-    getdata(parameter) {
-      this.loading = true
-      // 模拟数据
-      let res = {
-        code: 0,
-        msg: null,
-        count: 207,
-        data: [
-          {
-            addUser: null,
-            editUser: null,
-            addTime: null,
-            editTime: null,
-            id: 1,
-            name: '支付宝2.0',
-            payType: 1,
-            partner: '2015122801047567',
-            subMchId: '',
-            appid: '2015122801047567',
-            notifyUrl: 'r/pay/alipay/notify',
-            signType: 'RSA',
-            partnerKey: '==',
-            sellerUserId: '2088121360144859',
-            certPath: '',
-            certPassword: '',
-            rsaKey: '',
-            deptId: null
-          },
-          {
-            addUser: null,
-            editUser: null,
-            addTime: null,
-            editTime: null,
-            id: 2,
-            name: 'zzzzzz',
-            payType: 2,
-            partner: '1250856201',
-            subMchId: null,
-            appid: 'wx3ef7713adf0a97b8',
-            notifyUrl: null,
-            signType: 'NATIVE',
-            partnerKey: '2e3cdaf5aa051c16563c0b8916184d5d',
-            sellerUserId: null,
-            certPath:
-              '/usr/local/tomcat_provider/webapps/machine-service-provider-0.0.1-SNAPSHOT/conf/apiclient_cert_1250856201.p12',
-            certPassword: '1250856201',
-            rsaKey: null,
-            deptId: null
-          },
-          {
-            addUser: null,
-            editUser: null,
-            addTime: null,
-            editTime: null,
-            id: 3,
-            name: ' 待删除',
-            payType: 2,
-            partner: '1271942301',
-            subMchId: '1273729701',
-            appid: 'wx3ef7713adf0a97b8',
-            notifyUrl: '/pay/wx/notify',
-            signType: 'NATIVE',
-            partnerKey: '2e3cdaf5aa051c16563c0b8916184d5d',
-            sellerUserId: '',
-            certPath:
-              '/usr/local/tomcat_provider/webapps/machine-service-provider-0.0.1-SNAPSHOT/conf/apiclient_cert_1271942301.p12',
-            certPassword: '1271942301',
-            rsaKey: null,
-            deptId: null
-          },
-          {
-            addUser: null,
-            editUser: null,
-            addTime: null,
-            editTime: null,
-            id: 5,
-            name: '微信301',
-            payType: 2,
-            partner: '1271942301',
-            subMchId: '1341564201',
-            appid: 'wx3ef7713adf0a97b8',
-            notifyUrl: 'er/pay/wx/notify',
-            signType: 'NATIVE',
-            partnerKey: '2e3cdaf5aa051c16563c0b8916184d5d',
-            sellerUserId: null,
-            certPath:
-              '/usr/local/tomcat_provider/webapps/---0.0.1-SNAPSHOT/conf/apiclient_cert_1271942301.p12',
-            certPassword: '1271942301',
-            rsaKey: null,
-            deptId: null
-          },
-          {
-            addUser: null,
-            editUser: null,
-            addTime: null,
-            editTime: null,
-            id: 6,
-            name: '微信301',
-            payType: 2,
-            partner: '1271942301',
-            subMchId: '1284797101',
-            appid: 'wx3ef7713adf0a97b8',
-            notifyUrl:
-              'http://180.166.211.210:8114/machine-pay-consumer/pay/wx/notify',
-            signType: 'NATIVE',
-            partnerKey: '2e3cdaf5aa051c16563c0b8916184d5d',
-            sellerUserId: null,
-            certPath:
-              '/usr/local/tomcat_provider/webapps/--provider-0.0.1-SNAPSHOT/conf/apiclient_cert_1271942301.p12',
-            certPassword: '1271942301',
-            rsaKey: null,
-            deptId: null
-          },
-          {
-            addUser: null,
-            editUser: null,
-            addTime: null,
-            editTime: null,
-            id: 7,
-            name: '微信301',
-            payType: 2,
-            partner: '1271942301',
-            subMchId: '1277531101',
-            appid: 'wx3ef7713adf0a97b8',
-            notifyUrl:
-              'http://180.166.211.210:8114/machine-pay-consumer/pay/wx/notify',
-            signType: 'NATIVE',
-            partnerKey: '2e3cdaf5aa051c16563c0b8916184d5d',
-            sellerUserId: null,
-            certPath:
-              '/usr/local/tomcat_provider/webapps/machine-service-provider-0.0.1-SNAPSHOT/conf/apiclient_cert_1271942301.p12',
-            certPassword: '1271942301',
-            rsaKey: null,
-            deptId: null
+      var upload = bosUpload.bos.Uploader({
+        browse_button: '#file',
+        bos_bucket: 'onepsycho',
+        bos_endpoint: 'http://bj.bcebos.com',
+        bos_ak: '8488fce9c9414a7ba95ba68c30849a95', 
+        bos_sk: 'eea8fb3c51fd4a39bda7edd01783fba3',
+        max_file_size: '1Gb',
+        init: {
+          FileUploaded: function (_, file, info) {
+            var bucket = info.body.bucket;
+            var object = info.body.object;
+            var url = 'http://bj.bcebos.com' + bucket + '/' + object;
+            console.log(url)
           },
-          {
-            addUser: null,
-            editUser: null,
-            addTime: null,
-            editTime: null,
-            id: 8,
-            name: '微信301',
-            payType: 2,
-            partner: '1271942301',
-            subMchId: '1276485301',
-            appid: 'wx3ef7713adf0a97b8',
-            notifyUrl:
-              'http://180.166.211.210:8114/machine-pay-consumer/pay/wx/notify',
-            signType: 'NATIVE',
-            partnerKey: '2e3cdaf5aa051c16563c0b8916184d5d',
-            sellerUserId: null,
-            certPath:
-              '/usr/local/tomcat_provider/webapps/machine-service-provider-0.0.1-SNAPSHOT/conf/apiclient_cert_1271942301.p12',
-            certPassword: '1271942301',
-            rsaKey: null,
-            deptId: null
-          },
-          {
-            addUser: null,
-            editUser: null,
-            addTime: null,
-            editTime: null,
-            id: 9,
-            name: '微信',
-            payType: 2,
-            partner: '1347158201',
-            subMchId: '1351034701',
-            appid: 'wx83a7489c10c9c952',
-            notifyUrl: '',
-            signType: 'NATIVE',
-            partnerKey: 'f174607ba704632b6cad2df8b04650d6',
-            sellerUserId: null,
-            certPath:
-              '/usr/local/tomcat_provider/webapps/machine-service-provider-0.0.1-SNAPSHOT/conf/apiclient_cert_1347158201.p12',
-            certPassword: '1347158201',
-            rsaKey: null,
-            deptId: null
-          },
-          {
-            addUser: null,
-            editUser: null,
-            addTime: null,
-            editTime: null,
-            id: 10,
-            name: '-微信301',
-            payType: 2,
-            partner: '1271942301',
-            subMchId: '1357984702',
-            appid: 'wx3ef7713adf0a97b8',
-            notifyUrl:
-              'http://180.166.211.210:8114/machine-pay-consumer/pay/wx/notify',
-            signType: 'NATIVE',
-            partnerKey: '2e3cdaf5aa051c16563c0b8916184d5d',
-            sellerUserId: null,
-            certPath:
-              '/usr/local/tomcat_provider/webapps/machine-service-provider-0.0.1-SNAPSHOT/conf/apiclient_cert_1271942301.p12',
-            certPassword: '1271942301',
-            rsaKey: null,
-            deptId: null
-          },
-          {
-            addUser: null,
-            editUser: null,
-            addTime: null,
-            editTime: null,
-            id: 11,
-            name: '-微信301',
-            payType: 2,
-            partner: '1271942301',
-            subMchId: '1357972202',
-            appid: 'wx3ef7713adf0a97b8',
-            notifyUrl:
-              'http://180.166.211.210:8114/machine-pay-consumer/pay/wx/notify',
-            signType: 'NATIVE',
-            partnerKey: '2e3cdaf5aa051c16563c0b8916184d5d',
-            sellerUserId: null,
-            certPath:
-              '/usr/local/tomcat_provider/webapps/machine-service-provider-0.0.1-SNAPSHOT/conf/apiclient_cert_1271942301.p12',
-            certPassword: '1271942301',
-            rsaKey: null,
-            deptId: null
+          UploadComplete: function() {
+            console.log("上传结束!")
           }
-        ]
-      }
-      this.loading = false
-      this.listData = res.data
-      // 分页赋值
-      this.pageparm.currentPage = this.formInline.page
-      this.pageparm.pageSize = this.formInline.limit
-      this.pageparm.total = res.count
-      // 模拟数据结束
-
-      /***
-       * 调用接口,注释上面模拟数据 取消下面注释
-       */
-      // ConfigList(parameter)
-      //   .then(res => {
-      //     this.loading = false
-      //     if (res.success == false) {
-      //       this.$message({
-      //         type: 'info',
-      //         message: res.msg
-      //       })
-      //     } else {
-      //       this.listData = res.data
-      //       // 分页赋值
-      //       this.pageparm.currentPage = this.formInline.page
-      //       this.pageparm.pageSize = this.formInline.limit
-      //       this.pageparm.total = res.count
-      //     }
-      //   })
-      //   .catch(err => {
-      //     this.loading = false
-      //     this.$message.error('菜单加载失败,请稍后再试!')
-      //   })
-    },
-    // 分页插件事件
-    callFather(parm) {
-      this.formInline.page = parm.currentPage
-      this.formInline.limit = parm.pageSize
-      this.getdata(this.formInline)
-    },
-    // 搜索事件
-    search() {
-      this.getdata(this.formInline)
-    },
-    //显示编辑界面
-    handleEdit: function(index, row) {
-      this.editFormVisible = true
-      if (row != undefined && row != 'undefined') {
-        this.title = '修改'
-        this.editForm.id = row.id
-        this.editForm.name = row.name
-        this.editForm.payType = row.payType
-        this.editForm.partner = row.partner
-        this.editForm.subMchId = row.subMchId
-        this.editForm.appid = row.appid
-        this.editForm.notifyUrl = row.notifyUrl
-        this.editForm.signType = row.signType
-        this.editForm.partnerKey = row.partnerKey
-        this.editForm.sellerUserId = row.sellerUserId
-        this.editForm.certPath = row.certPath
-        this.editForm.certPassword = row.certPassword
-        this.editForm.rsaKey = row.rsaKey
-      } else {
-        this.title = '添加'
-        this.editForm.id = ''
-        this.editForm.name = ''
-        this.editForm.payType = ''
-        this.editForm.partner = ''
-        this.editForm.subMchId = ''
-        this.editForm.appid = ''
-        this.editForm.notifyUrl = ''
-        this.editForm.signType = ''
-        this.editForm.partnerKey = ''
-        this.editForm.sellerUserId = ''
-        this.editForm.certPath = ''
-        this.editForm.certPassword = ''
-        this.editForm.rsaKey = ''
-      }
-    },
-    // 编辑、增加页面保存方法
-    submitForm(editData) {
-      this.$refs[editData].validate(valid => {
-        if (valid) {
-          ConfigSave(this.editForm)
-            .then(res => {
-              this.editFormVisible = false
-              this.loading = false
-              if (res.success) {
-                this.getdata(this.formInline)
-                this.$message({
-                  type: 'success',
-                  message: '公司保存成功!'
-                })
-              } else {
-                this.$message({
-                  type: 'info',
-                  message: res.msg
-                })
-              }
-            })
-            .catch(err => {
-              this.editFormVisible = false
-              this.loading = false
-              this.$message.error('支付配置信息保存失败,请稍后再试!')
-            })
-        } else {
-          return false
         }
-      })
+      });
     },
-    // 删除公司
-    deleteUser(index, row) {
-      this.$confirm('确定要删除吗?', '信息', {
-        confirmButtonText: '确定',
-        cancelButtonText: '取消',
-        type: 'warning'
-      })
-        .then(() => {
-          ConfigDelete(row.deptId)
-            .then(res => {
-              if (res.success) {
-                this.$message({
-                  type: 'success',
-                  message: '公司已删除!'
-                })
-                this.getdata(this.formInline)
-              } else {
-                this.$message({
-                  type: 'info',
-                  message: res.msg
-                })
+    methods: {
+      beforeUpload(file){
+        console.log(file)
+      },
+      submitForm(formName) {
+        this.$refs[formName].validate((valid) => {
+          if (valid) {
+            saveNews(this.ruleForm).then(res => {
+              if(res.return_code == '200'){
+                this.$message.success('保存成功!')
+                this.resetForm('ruleForm')
               }
             })
-            .catch(err => {
-              this.loading = false
-              this.$message.error('支付配置信息删除失败,请稍后再试!')
-            })
-        })
-        .catch(() => {
-          this.$message({
-            type: 'info',
-            message: '已取消删除'
-          })
-        })
-    },
-    // 关闭编辑、增加弹出框
-    closeDialog(formName) {
-      this.editFormVisible = false
-      this.$refs[formName].resetFields()
+          } else {
+            console.log('error submit!!');
+            return false;
+          }
+        });
+      },
+      resetForm(formName) {
+        this.$refs[formName].resetFields();
+      }
     }
-  }
-}
+};
 </script>
 
 <style scoped>
@@ -604,6 +123,19 @@ export default {
 .userRole {
   width: 100%;
 }
+
+.demo-ruleForm{
+  padding: 30px;
+  width: 80%;
+}
+
+
+</style>
+
+<style>
+.ql-editor{
+  min-height: 400px !important;
+}
 </style>
 
  

File diff suppressed because it is too large
+ 546 - 507
src/views/pay/Order.vue


+ 533 - 201
src/views/system/Dept.vue

@@ -1,42 +1,50 @@
-/**
- * 系统管理  公司管理
- */
 <template>
   <div>
     <!-- 面包屑导航 -->
     <el-breadcrumb separator-class="el-icon-arrow-right">
       <el-breadcrumb-item :to="{ path: '/' }">首页</el-breadcrumb-item>
-      <el-breadcrumb-item>公司管理</el-breadcrumb-item>
+      <el-breadcrumb-item>用户管理</el-breadcrumb-item>
     </el-breadcrumb>
     <!-- 搜索筛选 -->
     <el-form :inline="true" :model="formInline" class="user-search">
       <el-form-item label="搜索:">
-        <el-input size="small" v-model="formInline.deptName" placeholder="输入部门名称"></el-input>
+        <el-select size="small" v-model="formInline.isLock" placeholder="请选择">
+          <el-option label="全部" value></el-option>
+          <el-option label="正常" value="N"></el-option>
+          <el-option label="已锁定" value="Y"></el-option>
+        </el-select>
       </el-form-item>
-      <el-form-item label="">
-        <el-input size="small" v-model="formInline.deptNo" placeholder="输入部门代码"></el-input>
+      <el-form-item label>
+        <el-input size="small" v-model="formInline.userName" placeholder="输入用户名"></el-input>
+      </el-form-item>
+      <el-form-item label>
+        <el-input size="small" v-model="formInline.userMobile" placeholder="输入手机号"></el-input>
       </el-form-item>
       <el-form-item>
         <el-button size="small" type="primary" icon="el-icon-search" @click="search">搜索</el-button>
         <el-button size="small" type="primary" icon="el-icon-plus" @click="handleEdit()">添加</el-button>
+        <el-button size="small" type="primary" @click="handleunit()">部门设置</el-button>
       </el-form-item>
     </el-form>
     <!--列表-->
-    <el-table size="small" :data="listData" highlight-current-row v-loading="loading" border element-loading-text="拼命加载中" style="width: 100%;">
-      <el-table-column align="center" type="selection" width="60">
-      </el-table-column>
-      <el-table-column sortable prop="deptName" label="部门名称" width="300">
-      </el-table-column>
-      <el-table-column sortable prop="deptNo" label="部门代码" width="300">
-      </el-table-column>
-      <el-table-column sortable prop="editTime" label="修改时间" width="300">
-        <template slot-scope="scope">
-          <div>{{scope.row.editTime|timestampToTime}}</div>
-        </template>
-      </el-table-column>
-      <el-table-column sortable prop="editUser" label="修改人" width="300">
-      </el-table-column>
-      <el-table-column align="center" label="操作" min-width="300">
+    <el-table
+      size="small"
+      @selection-change="selectChange"
+      :data="userData"
+      highlight-current-row
+      v-loading="loading"
+      border
+      element-loading-text="拼命加载中"
+      style="width: 100%;"
+    >
+      <el-table-column align="center" type="selection" width="50"></el-table-column>
+      <el-table-column align="center" sortable prop="title" label="菜单标题"></el-table-column>
+      <el-table-column align="center" sortable prop="name" label="英文名称"></el-table-column>
+      <el-table-column align="center" sortable prop="icon" label="ICON图标"></el-table-column>
+      <el-table-column align="center" sortable prop="color" label="主色调"></el-table-column>
+      <el-table-column align="center" sortable prop="path" label="页面路径"></el-table-column>
+      <el-table-column align="center" sortable prop="status" label="状态"></el-table-column>
+      <el-table-column label="操作">
         <template slot-scope="scope">
           <el-button size="mini" @click="handleEdit(scope.$index, scope.row)">编辑</el-button>
           <el-button size="mini" type="danger" @click="deleteUser(scope.$index, scope.row)">删除</el-button>
@@ -45,279 +53,603 @@
     </el-table>
     <!-- 分页组件 -->
     <Pagination v-bind:child-msg="pageparm" @callFather="callFather"></Pagination>
-    <!-- 编辑界面 -->
-    <el-dialog :title="title" :visible.sync="editFormVisible" width="30%" @click="closeDialog">
-      <el-form label-width="120px" :model="editForm" :rules="rules" ref="editForm">
-        <el-form-item label="部门名称" prop="deptName">
-          <el-input size="small" v-model="editForm.deptName" auto-complete="off" placeholder="请输入部门名称"></el-input>
-        </el-form-item>
-        <el-form-item label="部门代码" prop="deptNo">
-          <el-input size="small" v-model="editForm.deptNo" auto-complete="off" placeholder="请输入部门代码"></el-input>
-        </el-form-item>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button size="small" @click="closeDialog">取消</el-button>
-        <el-button size="small" type="primary" :loading="loading" class="title" @click="submitForm('editForm')">保存</el-button>
-      </div>
-    </el-dialog>
   </div>
 </template>
 
 <script>
-import { deptList, deptSave, deptDelete } from '../../api/userMG'
-import Pagination from '../../components/Pagination'
+// 导入请求方法
+import {
+  userList,
+  userSave,
+  userDelete,
+  userPwd,
+  userExpireToken,
+  userFlashCache,
+  userLock,
+  UserDeptTree,
+  UserDeptSave,
+  UserDeptdeptTree,
+  UserChangeDept
+} from "../../api/userMG";
+import Pagination from "../../components/Pagination";
 export default {
   data() {
     return {
       nshow: true, //switch开启
       fshow: false, //switch关闭
       loading: false, //是显示加载
+      title: "添加用户",
       editFormVisible: false, //控制编辑页面显示与隐藏
-      title: '添加',
+      dataAccessshow: false, //控制数据权限显示与隐藏
+      unitAccessshow: false, //控制所属单位隐藏与显示
+      // 编辑与添加
       editForm: {
-        deptId: '',
-        deptName: '',
-        deptNo: '',
-        token: localStorage.getItem('logintoken')
+        userId: "",
+        userName: "",
+        userRealName: "",
+        roleId: "",
+        userMobile: "",
+        userEmail: "",
+        userSex: "",
+        token: localStorage.getItem("logintoken")
+      },
+      // 部门参数
+      unitparm: {
+        userIds: "",
+        deptId: "",
+        deptName: ""
       },
+      // 选择数据
+      selectdata: [],
       // rules表单验证
       rules: {
-        deptName: [
-          { required: true, message: '请输入部门名称', trigger: 'blur' }
+        userName: [
+          { required: true, message: "请输入用户名", trigger: "blur" }
+        ],
+        userRealName: [
+          { required: true, message: "请输入姓名", trigger: "blur" }
+        ],
+        roleId: [{ required: true, message: "请选择角色", trigger: "blur" }],
+        userMobile: [
+          { required: true, message: "请输入手机号", trigger: "blur" },
+          {
+            pattern: /^1(3\d|47|5((?!4)\d)|7(0|1|[6-8])|8\d)\d{8,8}$/,
+            required: true,
+            message: "请输入正确的手机号",
+            trigger: "blur"
+          }
+        ],
+        userEmail: [
+          { required: true, message: "请输入邮箱", trigger: "blur" },
+          {
+            pattern: /^[A-Za-z0-9\u4e00-\u9fa5]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/,
+            required: true,
+            message: "请输入正确的邮箱",
+            trigger: "blur"
+          }
         ],
-        deptNo: [{ required: true, message: '请输入部门代码', trigger: 'blur' }]
+        userSex: [{ required: true, message: "请选择性别", trigger: "blur" }]
+      },
+      // 删除用户
+      seletedata: {
+        ids: "",
+        token: localStorage.getItem("logintoken")
       },
+      // 重置密码
+      resetpsd: {
+        userId: "",
+        token: localStorage.getItem("logintoken")
+      },
+      // 用户下线
+      offline: {
+        token: localStorage.getItem("logintoken")
+      },
+      // 请求数据参数
       formInline: {
         page: 1,
         limit: 10,
-        varLable: '',
-        varName: '',
-        token: localStorage.getItem('logintoken')
+        deptId: "",
+        userName: "",
+        userMobile: "",
+        isLock: ""
       },
-      // 删除部门
-      seletedata: {
-        ids: '',
-        token: localStorage.getItem('logintoken')
+      //用户数据
+      userData: [],
+      originList: [],
+      // 数据权限
+      UserDept: [],
+      defaultProps: {
+        children: "children",
+        label: "name"
       },
-      userparm: [], //搜索权限
-      listData: [], //用户数据
+      // 选中
+      checkmenu: [],
+      //参数role
+      saveroleId: "",
       // 分页参数
       pageparm: {
         currentPage: 1,
         pageSize: 10,
-        total: 10
+        total: 0
       }
-    }
+    };
   },
   // 注册组件
   components: {
     Pagination
   },
+
   /**
    * 数据发生改变
    */
+  watch: {},
 
   /**
    * 创建完毕
    */
   created() {
-    this.getdata(this.formInline)
+    this.getdata();
   },
 
   /**
    * 里面的方法只有被调用才会执行
    */
   methods: {
-    // 获取公司列表
+    // 获取数据方法
     getdata(parameter) {
-      this.loading = true
-      // 模拟数据
-      let res = {
-        code: 0,
-        msg: null,
-        count: 5,
-        data: [
-          {
-            addUser: null,
-            editUser: null,
-            addTime: 1521062371000,
-            editTime: 1526700200000,
-            deptId: 2,
-            deptName: '上海分公司',
-            deptNo: '1',
-            parentId: 1
-          },
-          {
-            addUser: null,
-            editUser: null,
-            addTime: 1521063247000,
-            editTime: 1526652291000,
-            deptId: 3,
-            deptName: '上海测试',
-            deptNo: '02',
-            parentId: 1
-          },
-          {
-            addUser: null,
-            editUser: null,
-            addTime: 1526349555000,
-            editTime: 1526349565000,
-            deptId: 12,
-            deptName: '1',
-            deptNo: '11',
-            parentId: 1
-          },
-          {
-            addUser: null,
-            editUser: null,
-            addTime: 1526373178000,
-            editTime: 1526373178000,
-            deptId: 13,
-            deptName: '5',
-            deptNo: '5',
-            parentId: 1
-          },
-          {
-            addUser: null,
-            editUser: null,
-            addTime: 1526453107000,
-            editTime: 1526453107000,
-            deptId: 17,
-            deptName: 'v',
-            deptNo: 'v',
-            parentId: 1
-          }
-        ]
-      }
-      this.loading = false
-      this.listData = res.data
-      // 分页赋值
-      this.pageparm.currentPage = this.formInline.page
-      this.pageparm.pageSize = this.formInline.limit
-      this.pageparm.total = res.count
-      // 模拟数据结束
+      this.loading = true;
+      //获取用户列表
+      userList({ table: "toolsMenu" }).then(res => {
+        this.loading = false;
+        res.forEach(item => {
+          item.nickName = item.nickName ? item.nickName : "暂无昵称";
+        });
+        this.originList = res.reverse();
+        this.pageparm.total = this.originList.length;
+        // this.userData = res.reverse();
+        // // 分页赋值
+        // this.pageparm.currentPage = this.formInline.page;
+        // this.pageparm.pageSize = this.formInline.limit;
+        // this.pageparm.total = this.userData.length;
+        this.pageChange(1)
+      });
+    },
+
+    // 分页操作
+    pageChange(page) {
+      let start = this.pageparm.pageSize * (page - 1);
+      let end = this.pageparm.pageSize * page;
+      this.pageparm.currentPage = page;
+      this.userData = this.originList.slice(start, end);
+    },
+
+    pageSizeChange(val) {
+      this.pageSizes = val;
+      this.pageChange(1);
+    },
 
-      /***
-       * 调用接口,注释上面模拟数据 取消下面注释
-       */
-      // deptList(parameter)
-      //   .then(res => {
-      //     this.loading = false
-      //     if (res.success == false) {
-      //       this.$message({
-      //         type: 'info',
-      //         message: res.msg
-      //       })
-      //     } else {
-      //       this.listData = res.data
-      //       // 分页赋值
-      //       this.pageparm.currentPage = this.formInline.page
-      //       this.pageparm.pageSize = this.formInline.limit
-      //       this.pageparm.total = res.count
-      //     }
-      //   })
-      //   .catch(err => {
-      //     this.loading = false
-      //     this.$message.error('菜单加载失败,请稍后再试!')
-      //   })
+    arrayUnique2(arr, name) {
+      var hash = {};
+      return arr.reduce(function(item, next) {
+        hash[next[name]] ? "" : (hash[next[name]] = true && item.push(next));
+        return item;
+      }, []);
     },
+
     // 分页插件事件
     callFather(parm) {
-      this.formInline.page = parm.currentPage
-      this.formInline.limit = parm.pageSize
-      this.getdata(this.formInline)
+      this.pageparm.currentPage = parm.currentPage;
+      this.pageChange(parm.currentPage)
     },
-    // 搜索事件
+    //搜索事件
     search() {
-      this.getdata(this.formInline)
+      this.getdata(this.formInline);
+    },
+    // 修改type
+    editType: function(index, row) {
+      this.loading = true;
+      let parm = {
+        lock: "",
+        userId: "",
+        token: localStorage.getItem("logintoken")
+      };
+      parm.userId = row.userId;
+      let lock = row.isLock;
+      if (lock == "N") {
+        parm.lock = "Y";
+      } else {
+        parm.lock = "N";
+      }
+      // 修改状态
+      userLock(parm).then(res => {
+        this.loading = false;
+        if (res.success == false) {
+          this.$message({
+            type: "info",
+            message: res.msg
+          });
+        } else {
+          this.$message({
+            type: "success",
+            message: "状态修改成功"
+          });
+          this.getdata(this.formInline);
+        }
+      });
     },
     //显示编辑界面
     handleEdit: function(index, row) {
-      this.editFormVisible = true
-      if (row != undefined && row != 'undefined') {
-        this.title = '修改'
-        this.editForm.deptId = row.deptId
-        this.editForm.deptName = row.deptName
-        this.editForm.deptNo = row.deptNo
+      this.editFormVisible = true;
+      if (row != undefined && row != "undefined") {
+        this.title = "修改用户";
+        this.editForm.userId = row.userId;
+        this.editForm.userName = row.userName;
+        this.editForm.userRealName = row.userRealName;
+        this.editForm.roleId = row.roleId;
+        this.editForm.userMobile = row.userMobile;
+        this.editForm.userEmail = row.userEmail;
+        this.editForm.userSex = row.userSex;
       } else {
-        this.title = '添加'
-        this.editForm.deptId = ''
-        this.editForm.deptName = ''
-        this.editForm.deptNo = ''
+        this.title = "添加用户";
+        this.editForm.userId = "";
+        this.editForm.userName = "";
+        this.editForm.userRealName = "";
+        this.editForm.roleId = "";
+        this.editForm.userMobile = "";
+        this.editForm.userEmail = "";
+        this.editForm.userSex = "";
       }
     },
-    // 编辑、增加页面保存方法
+    // 编辑、添加提交方法
     submitForm(editData) {
       this.$refs[editData].validate(valid => {
         if (valid) {
-          deptSave(this.editForm)
+          // 请求方法
+          userSave(this.editForm)
             .then(res => {
-              this.editFormVisible = false
-              this.loading = false
+              this.editFormVisible = false;
+              this.loading = false;
               if (res.success) {
-                this.getdata(this.formInline)
+                this.getdata(this.formInline);
                 this.$message({
-                  type: 'success',
-                  message: '公司保存成功!'
-                })
+                  type: "success",
+                  message: "数据保存成功!"
+                });
               } else {
                 this.$message({
-                  type: 'info',
+                  type: "info",
                   message: res.msg
-                })
+                });
               }
             })
             .catch(err => {
-              this.editFormVisible = false
-              this.loading = false
-              this.$message.error('公司保存失败,请稍后再试!')
-            })
+              this.editFormVisible = false;
+              this.loading = false;
+              this.$message.error("保存失败,请稍后再试!");
+            });
         } else {
-          return false
+          return false;
         }
-      })
+      });
+    },
+    // 显示部门设置
+    handleunit: function(index, row) {
+      this.unitAccessshow = true;
+      let parms = 0;
+      UserDeptdeptTree(parms)
+        .then(res => {
+          if (res.data.success) {
+            this.UserDept = this.changeArr(res.data.data);
+          } else {
+            this.$message({
+              type: "info",
+              message: res.msg
+            });
+          }
+        })
+        .catch(err => {
+          this.loading = false;
+          this.$message.error("配置权限失败,请稍后再试!");
+        });
+    },
+    handleClick(data, checked, node) {
+      if (checked) {
+        this.$refs.tree.setCheckedNodes([]);
+        this.$refs.tree.setCheckedNodes([data]);
+        this.unitparm.deptId = data.id;
+        this.unitparm.deptName = data.name;
+        //交叉点击节点
+      } else {
+      }
+    },
+    // 保存部门
+    unitPermSave() {
+      let len = this.selectdata;
+      let ids = [];
+      if (len != 0) {
+        for (let i = 0; i < len.length; i++) {
+          ids.push(len[i].userId);
+        }
+      }
+      this.unitparm.userIds = ids.join(",");
+      UserChangeDept(this.unitparm)
+        .then(res => {
+          this.unitAccessshow = false;
+          if (res.success) {
+            this.$message({
+              type: "success",
+              message: "部门设置成功!"
+            });
+            this.getdata(this.formInline);
+          } else {
+            this.$message({
+              type: "info",
+              message: res.msg
+            });
+          }
+        })
+        .catch(err => {
+          this.loading = false;
+          this.$message.error("部门设置失败,请稍后再试!");
+        });
+    },
+    // 选择复选框事件
+    selectChange(val) {
+      this.selectdata = val;
     },
-    // 删除公司
+    // 关闭编辑、增加弹出框
+    closeDialog(dialog) {
+      if (dialog == "edit") {
+        this.editFormVisible = false;
+      } else if (dialog == "perm") {
+        this.dataAccessshow = false;
+      } else if (dialog == "unit") {
+        this.unitAccessshow = false;
+      }
+    },
+    // 删除用户
     deleteUser(index, row) {
-      this.$confirm('确定要删除吗?', '信息', {
-        confirmButtonText: '确定',
-        cancelButtonText: '取消',
-        type: 'warning'
+      this.$confirm("确定要删除吗?", "信息", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
       })
         .then(() => {
-          deptDelete(row.deptId)
+          // 删除
+          userDelete(row.id)
             .then(res => {
               if (res.success) {
                 this.$message({
-                  type: 'success',
-                  message: '公司已删除!'
-                })
-                this.getdata(this.formInline)
+                  type: "success",
+                  message: "数据已删除!"
+                });
+                this.getdata(this.formInline);
               } else {
                 this.$message({
-                  type: 'info',
+                  type: "info",
                   message: res.msg
-                })
+                });
               }
             })
             .catch(err => {
-              this.loading = false
-              this.$message.error('公司删除失败,请稍后再试!')
+              this.loading = false;
+              this.$message.error("数据删除失败,请稍后再试!");
+            });
+        })
+        .catch(() => {
+          this.$message({
+            type: "info",
+            message: "已取消删除!"
+          });
+        });
+    },
+    // 重置密码
+    resetpwd(index, row) {
+      this.resetpsd.userId = row.userId;
+      this.$confirm("确定要重置密码吗?", "信息", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      })
+        .then(() => {
+          userPwd(this.resetpsd)
+            .then(res => {
+              if (res.success) {
+                this.$message({
+                  type: "success",
+                  message: "重置密码成功!"
+                });
+                this.getdata(this.formInline);
+              } else {
+                this.$message({
+                  type: "info",
+                  message: res.msg
+                });
+              }
             })
+            .catch(err => {
+              this.loading = false;
+              this.$message.error("重置密码失败,请稍后再试!");
+            });
         })
         .catch(() => {
           this.$message({
-            type: 'info',
-            message: '已取消删除'
-          })
+            type: "info",
+            message: "取消重置密码!"
+          });
+        });
+    },
+    // 数据权限
+    dataAccess: function(index, row) {
+      this.dataAccessshow = true;
+      this.saveroleId = row.userId;
+      UserDeptTree(row.userId)
+        .then(res => {
+          if (res.data.success) {
+            this.checkmenu = this.changemenu(res.data.data);
+            this.UserDept = this.changeArr(res.data.data);
+          } else {
+            this.$message({
+              type: "info",
+              message: res.data.msg
+            });
+          }
         })
+        .catch(err => {
+          this.loading = false;
+          this.$message.error("获取权限失败,请稍后再试!");
+        });
     },
-    // 关闭编辑、增加弹出框
-    closeDialog() {
-      this.editFormVisible = false
+    //数据格式化
+    changeArr(data) {
+      var pos = {};
+      var tree = [];
+      var i = 0;
+      while (data.length != 0) {
+        if (data[i].pId == 0) {
+          tree.push({
+            id: data[i].id,
+            name: data[i].name,
+            pId: data[i].pId,
+            open: data[i].open,
+            checked: data[i].checked,
+            children: []
+          });
+          pos[data[i].id] = [tree.length - 1];
+          data.splice(i, 1);
+          i--;
+        } else {
+          var posArr = pos[data[i].pId];
+          if (posArr != undefined) {
+            var obj = tree[posArr[0]];
+            for (var j = 1; j < posArr.length; j++) {
+              obj = obj.children[posArr[j]];
+            }
+
+            obj.children.push({
+              id: data[i].id,
+              name: data[i].name,
+              pId: data[i].pId,
+              open: data[i].open,
+              checked: data[i].checked,
+              children: []
+            });
+            pos[data[i].id] = posArr.concat([obj.children.length - 1]);
+            data.splice(i, 1);
+            i--;
+          }
+        }
+        i++;
+        if (i > data.length - 1) {
+          i = 0;
+        }
+      }
+      return tree;
+    },
+    // 选中菜单
+    changemenu(arr) {
+      let change = [];
+      for (let i = 0; i < arr.length; i++) {
+        if (arr[i].checked) {
+          change.push(arr[i].id);
+        }
+      }
+      return change;
+    },
+    // 菜单权限-保存
+    menuPermSave() {
+      let parm = {
+        userId: this.saveroleId,
+        deptIds: ""
+      };
+      let node = this.$refs.tree.getCheckedNodes();
+      let moduleIds = [];
+      if (node.length != 0) {
+        for (let i = 0; i < node.length; i++) {
+          moduleIds.push(node[i].id);
+        }
+        parm.deptIds = JSON.stringify(moduleIds);
+      }
+      UserDeptSave(parm)
+        .then(res => {
+          if (res.success) {
+            this.$message({
+              type: "success",
+              message: "权限保存成功"
+            });
+            this.dataAccessshow = false;
+            this.getdata(this.formInline);
+          } else {
+            this.$message({
+              type: "info",
+              message: res.msg
+            });
+          }
+        })
+        .catch(err => {
+          this.loading = false;
+          this.$message.error("权限保存失败,请稍后再试!");
+        });
+    },
+    // 下线用户
+    offlineUser(index, row) {
+      this.$confirm("确定要让" + row.userName + "用户下线吗?", "信息", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      })
+        .then(() => {
+          userExpireToken(row.userName)
+            .then(res => {
+              if (res.success) {
+                this.$message({
+                  type: "success",
+                  message: "用户" + row.userName + "强制下线成功!"
+                });
+                this.getdata(this.formInline);
+              } else {
+                this.$message({
+                  type: "info",
+                  message: res.msg
+                });
+              }
+            })
+            .catch(err => {
+              this.loading = false;
+              this.$message.error("用户下线失败,请稍后再试!");
+            });
+        })
+        .catch(() => {
+          this.$message({
+            type: "info",
+            message: "已取消"
+          });
+        });
+    },
+    // 刷新缓存
+    refreshCache(index, row) {
+      userFlashCache(row.userName)
+        .then(res => {
+          if (res.success) {
+            this.$message({
+              type: "success",
+              message: "刷新成功!"
+            });
+            this.getdata(this.formInline);
+          } else {
+            this.$message({
+              type: "info",
+              message: res.msg
+            });
+          }
+        })
+        .catch(err => {
+          this.loading = false;
+          this.$message.error("刷新失败,请稍后再试!");
+        });
     }
   }
-}
+};
 </script>
 
 <style scoped>

+ 498 - 325
src/views/system/Role.vue

@@ -1,491 +1,664 @@
-/**
- * 系统管理  角色管理
- */
 <template>
   <div>
     <!-- 面包屑导航 -->
     <el-breadcrumb separator-class="el-icon-arrow-right">
       <el-breadcrumb-item :to="{ path: '/' }">首页</el-breadcrumb-item>
-      <el-breadcrumb-item>角色管理</el-breadcrumb-item>
+      <el-breadcrumb-item>用户管理</el-breadcrumb-item>
     </el-breadcrumb>
     <!-- 搜索筛选 -->
     <el-form :inline="true" :model="formInline" class="user-search">
-
       <el-form-item label="搜索:">
-        <el-input size="small" v-model="formInline.roleName" placeholder="输入角色名称"></el-input>
+        <el-select size="small" v-model="formInline.isLock" placeholder="请选择">
+          <el-option label="全部" value></el-option>
+          <el-option label="正常" value="N"></el-option>
+          <el-option label="已锁定" value="Y"></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item label>
+        <el-input size="small" v-model="formInline.userName" placeholder="输入用户名"></el-input>
       </el-form-item>
-      <el-form-item label="">
-        <el-input size="small" v-model="formInline.roleNo" placeholder="输入角色代码"></el-input>
+      <el-form-item label>
+        <el-input size="small" v-model="formInline.userMobile" placeholder="输入手机号"></el-input>
       </el-form-item>
       <el-form-item>
         <el-button size="small" type="primary" icon="el-icon-search" @click="search">搜索</el-button>
         <el-button size="small" type="primary" icon="el-icon-plus" @click="handleEdit()">添加</el-button>
+        <el-button size="small" type="primary" @click="handleunit()">部门设置</el-button>
       </el-form-item>
     </el-form>
     <!--列表-->
-    <el-table size="small" :data="listData" highlight-current-row v-loading="loading" border element-loading-text="拼命加载中" style="width: 100%;">
-      <el-table-column align="center" type="selection" width="60">
-      </el-table-column>
-      <el-table-column sortable prop="roleName" label="角色名称" width="300">
-      </el-table-column>
-      <el-table-column sortable prop="roleNo" label="角色代码" width="300">
-      </el-table-column>
-      <el-table-column sortable prop="editTime" label="修改时间" width="300">
+    <el-table
+      size="small"
+      @selection-change="selectChange"
+      :data="userData"
+      highlight-current-row
+      v-loading="loading"
+      border
+      element-loading-text="拼命加载中"
+      style="width: 100%;"
+    >
+      <el-table-column align="center" type="selection" width="50"></el-table-column>
+      <el-table-column align="center" sortable prop="id" label="编号"></el-table-column>
+      <el-table-column align="center" sortable prop="nickName" label="微信昵称"></el-table-column>
+      <el-table-column align="center" sortable prop="avatarUrl" label="微信头像">
         <template slot-scope="scope">
-          <div>{{scope.row.editTime|timestampToTime}}</div>
+          <div>
+            <img
+              :src="scope.row.avatarUrl || 'https://wx.qlogo.cn/mmopen/vi_32/mVaN1K0AibPTfTExvsR1wWeoM4vYGVHcEruMjx2z2uI1M40QoTppU36VwYYEsNKnjn4JMCqpRZQZyxwvrBR1ucA/132'"
+              style="border-radius:20px;width:60px"
+            />
+          </div>
         </template>
       </el-table-column>
-      <el-table-column sortable prop="editUser" label="修改人" width="300">
-      </el-table-column>
-      <el-table-column align="center" label="操作" min-width="300">
+      <el-table-column align="center" sortable prop="openid" label="openId"></el-table-column>
+      <el-table-column align="center" sortable prop="result" label="识别记录"></el-table-column>
+      <el-table-column align="center" sortable prop="time" label="登录时间"></el-table-column>
+      <el-table-column label="操作">
         <template slot-scope="scope">
           <el-button size="mini" @click="handleEdit(scope.$index, scope.row)">编辑</el-button>
           <el-button size="mini" type="danger" @click="deleteUser(scope.$index, scope.row)">删除</el-button>
-          <el-button size="mini" type="success" @click="menuAccess(scope.$index, scope.row)">菜单权限</el-button>
         </template>
       </el-table-column>
     </el-table>
     <!-- 分页组件 -->
     <Pagination v-bind:child-msg="pageparm" @callFather="callFather"></Pagination>
-    <!-- 编辑界面 -->
-    <el-dialog :title="title" :visible.sync="editFormVisible" width="30%" @click='closeDialog("edit")'>
-      <el-form label-width="120px" :model="editForm" ref="editForm" :rules="rules">
-        <el-form-item label="系统编码" prop="systemNo">
-          <el-input size="small" v-model="editForm.systemNo" auto-complete="off" placeholder="请输入系统编码"></el-input>
-        </el-form-item>
-        <el-form-item label="角色名称" prop="roleName">
-          <el-input size="small" v-model="editForm.roleName" auto-complete="off" placeholder="请输入角色名称"></el-input>
-        </el-form-item>
-        <el-form-item label="角色代码" prop="roleNo">
-          <el-input size="small" v-model="editForm.roleNo" auto-complete="off" placeholder="请输入角色代码"></el-input>
-        </el-form-item>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button size="small" @click='closeDialog("edit")'>取消</el-button>
-        <el-button size="small" type="primary" :loading="loading" class="title" @click="submitForm('editForm')">保存</el-button>
-      </div>
-    </el-dialog>
-    <!-- 菜单权限 -->
-    <el-dialog title="菜单权限" :visible.sync="menuAccessshow" width="30%" @click='closeDialog("perm")'>
-      <el-tree ref="tree" default-expand-all="" :data="RoleRight" :props="RoleRightProps" :default-checked-keys="checkmenu" node-key="id" show-checkbox>
-      </el-tree>
-      <div slot="footer" class="dialog-footer">
-        <el-button size="small" @click='closeDialog("perm")'>取消</el-button>
-        <el-button size="small" type="primary" :loading="loading" class="title" @click="menuPermSave">保存</el-button>
-      </div>
-    </el-dialog>
   </div>
 </template>
 
 <script>
+// 导入请求方法
 import {
-  roleList,
-  roleSave,
-  roleDelete,
-  rolePwd,
-  RoleRightTree,
-  RoleRightSave
-} from '../../api/userMG'
-import Pagination from '../../components/Pagination'
+  userList,
+  userSave,
+  userDelete,
+  userPwd,
+  userExpireToken,
+  userFlashCache,
+  userLock,
+  UserDeptTree,
+  UserDeptSave,
+  UserDeptdeptTree,
+  UserChangeDept
+} from "../../api/userMG";
+import Pagination from "../../components/Pagination";
 export default {
   data() {
     return {
       nshow: true, //switch开启
       fshow: false, //switch关闭
       loading: false, //是显示加载
+      title: "添加用户",
       editFormVisible: false, //控制编辑页面显示与隐藏
-      menuAccessshow: false, //控制数据权限显示与隐藏
-      title: '添加',
+      dataAccessshow: false, //控制数据权限显示与隐藏
+      unitAccessshow: false, //控制所属单位隐藏与显示
+      // 编辑与添加
       editForm: {
-        roleId: '',
-        systemNo: '',
-        roleNo: '',
-        roleName: '',
-        token: localStorage.getItem('logintoken')
+        userId: "",
+        userName: "",
+        userRealName: "",
+        roleId: "",
+        userMobile: "",
+        userEmail: "",
+        userSex: "",
+        token: localStorage.getItem("logintoken")
+      },
+      // 部门参数
+      unitparm: {
+        userIds: "",
+        deptId: "",
+        deptName: ""
       },
-      // rules 表单验证
+      // 选择数据
+      selectdata: [],
+      // rules表单验证
       rules: {
-        systemNo: [
-          { required: true, message: '请输入系统编码', trigger: 'blur' }
+        userName: [
+          { required: true, message: "请输入用户名", trigger: "blur" }
+        ],
+        userRealName: [
+          { required: true, message: "请输入姓名", trigger: "blur" }
+        ],
+        roleId: [{ required: true, message: "请选择角色", trigger: "blur" }],
+        userMobile: [
+          { required: true, message: "请输入手机号", trigger: "blur" },
+          {
+            pattern: /^1(3\d|47|5((?!4)\d)|7(0|1|[6-8])|8\d)\d{8,8}$/,
+            required: true,
+            message: "请输入正确的手机号",
+            trigger: "blur"
+          }
         ],
-        roleNo: [
-          { required: true, message: '请输入角色代码', trigger: 'blur' }
+        userEmail: [
+          { required: true, message: "请输入邮箱", trigger: "blur" },
+          {
+            pattern: /^[A-Za-z0-9\u4e00-\u9fa5]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/,
+            required: true,
+            message: "请输入正确的邮箱",
+            trigger: "blur"
+          }
         ],
-        roleName: [
-          { required: true, message: '请输入角色名称', trigger: 'blur' }
-        ]
+        userSex: [{ required: true, message: "请选择性别", trigger: "blur" }]
       },
+      // 删除用户
+      seletedata: {
+        ids: "",
+        token: localStorage.getItem("logintoken")
+      },
+      // 重置密码
+      resetpsd: {
+        userId: "",
+        token: localStorage.getItem("logintoken")
+      },
+      // 用户下线
+      offline: {
+        token: localStorage.getItem("logintoken")
+      },
+      // 请求数据参数
       formInline: {
         page: 1,
         limit: 10,
-        varLable: '',
-        varName: '',
-        token: localStorage.getItem('logintoken')
-      },
-      // 删除
-      seletedata: {
-        ids: '',
-        token: localStorage.getItem('logintoken')
+        deptId: "",
+        userName: "",
+        userMobile: "",
+        isLock: ""
       },
-      userparm: [], //搜索权限
-      listData: [], //用户数据
+      //用户数据
+      userData: [],
+      originList: [],
       // 数据权限
-      RoleRight: [],
-      RoleRightProps: {
-        children: 'children',
-        label: 'name'
+      UserDept: [],
+      defaultProps: {
+        children: "children",
+        label: "name"
       },
       // 选中
       checkmenu: [],
       //参数role
-      saveroleId: '',
+      saveroleId: "",
       // 分页参数
       pageparm: {
         currentPage: 1,
         pageSize: 10,
-        total: 10
+        total: 0
       }
-    }
+    };
   },
   // 注册组件
   components: {
     Pagination
   },
+
   /**
    * 数据发生改变
    */
-
   watch: {},
 
   /**
    * 创建完毕
    */
-
   created() {
-    this.getdata(this.formInline)
+    this.getdata();
   },
 
   /**
    * 里面的方法只有被调用才会执行
    */
-
   methods: {
-    // 获取角色列表
+    // 获取数据方法
     getdata(parameter) {
-      // 模拟数据
-      let res = {
-        code: 0,
-        msg: null,
-        count: 6,
-        data: [
-          {
-            addUser: 'root',
-            editUser: 'root',
-            addTime: 1519182004000,
-            editTime: 1520288426000,
-            roleId: 1,
-            systemNo: 'pmd',
-            roleNo: 'Administrator',
-            roleName: '超级管理员'
-          },
-          {
-            addUser: null,
-            editUser: null,
-            addTime: 1521111376000,
-            editTime: 1520678191000,
-            roleId: 2,
-            systemNo: 'order',
-            roleNo: 'admin',
-            roleName: '公司管理员'
-          },
-          {
-            addUser: null,
-            editUser: null,
-            addTime: 1520678221000,
-            editTime: 1520678221000,
-            roleId: 95,
-            systemNo: 'pm',
-            roleNo: 'common',
-            roleName: '普通用户'
-          },
-          {
-            addUser: null,
-            editUser: null,
-            addTime: 1526349853000,
-            editTime: 1526349853000,
-            roleId: 96,
-            systemNo: '1',
-            roleNo: '1',
-            roleName: '1'
-          },
-          {
-            addUser: null,
-            editUser: null,
-            addTime: 1526349942000,
-            editTime: 1526437443000,
-            roleId: 97,
-            systemNo: '2',
-            roleNo: '2',
-            roleName: '2'
-          },
-          {
-            addUser: null,
-            editUser: null,
-            addTime: 1526652148000,
-            editTime: 1526652148000,
-            roleId: 101,
-            systemNo: 'test',
-            roleNo: 'demo',
-            roleName: '演示角色'
-          }
-        ]
-      }
-      this.loading = false
-      this.listData = res.data
-      // 分页赋值
-      this.pageparm.currentPage = this.formInline.page
-      this.pageparm.pageSize = this.formInline.limit
-      this.pageparm.total = res.count
-      // 模拟数据结束
+      this.loading = true;
+      //获取用户列表
+      userList({ table: "luckRecord" }).then(res => {
+        this.loading = false;
+        res.forEach(item => {
+          item.nickName = item.nickName ? item.nickName : "暂无昵称";
+        });
+        this.originList = res.reverse();
+        this.pageparm.total = this.originList.length;
+        // this.userData = res.reverse();
+        // // 分页赋值
+        // this.pageparm.currentPage = this.formInline.page;
+        // this.pageparm.pageSize = this.formInline.limit;
+        // this.pageparm.total = this.userData.length;
+        this.pageChange(1)
+      });
+    },
+
+    // 分页操作
+    pageChange(page) {
+      let start = this.pageparm.pageSize * (page - 1);
+      let end = this.pageparm.pageSize * page;
+      this.pageparm.currentPage = page;
+      this.userData = this.originList.slice(start, end);
+    },
+
+    pageSizeChange(val) {
+      this.pageSizes = val;
+      this.pageChange(1);
+    },
 
-      /***
-       * 调用接口,注释上面模拟数据 取消下面注释
-       */
-      // roleList(parameter)
-      //   .then(res => {
-      //     this.loading = false
-      //     if (res.success == false) {
-      //       this.$message({
-      //         type: 'info',
-      //         message: res.msg
-      //       })
-      //     } else {
-      //       this.listData = res.data
-      //       // 分页赋值
-      //       this.pageparm.currentPage = this.formInline.page
-      //       this.pageparm.pageSize = this.formInline.limit
-      //       this.pageparm.total = res.count
-      //     }
-      //   })
-      //   .catch(err => {
-      //     this.loading = false
-      //     this.$message.error('获取角色列表失败,请稍后再试!')
-      //   })
+    arrayUnique2(arr, name) {
+      var hash = {};
+      return arr.reduce(function(item, next) {
+        hash[next[name]] ? "" : (hash[next[name]] = true && item.push(next));
+        return item;
+      }, []);
     },
+
     // 分页插件事件
     callFather(parm) {
-      this.formInline.page = parm.currentPage
-      this.formInline.limit = parm.pageSize
-      this.getdata(this.formInline)
+      this.pageparm.currentPage = parm.currentPage;
+      this.pageChange(parm.currentPage)
     },
-    // 搜索事件
+    //搜索事件
     search() {
-      this.getdata(this.formInline)
+      this.getdata(this.formInline);
+    },
+    // 修改type
+    editType: function(index, row) {
+      this.loading = true;
+      let parm = {
+        lock: "",
+        userId: "",
+        token: localStorage.getItem("logintoken")
+      };
+      parm.userId = row.userId;
+      let lock = row.isLock;
+      if (lock == "N") {
+        parm.lock = "Y";
+      } else {
+        parm.lock = "N";
+      }
+      // 修改状态
+      userLock(parm).then(res => {
+        this.loading = false;
+        if (res.success == false) {
+          this.$message({
+            type: "info",
+            message: res.msg
+          });
+        } else {
+          this.$message({
+            type: "success",
+            message: "状态修改成功"
+          });
+          this.getdata(this.formInline);
+        }
+      });
     },
     //显示编辑界面
     handleEdit: function(index, row) {
-      this.editFormVisible = true
-      if (row != undefined && row != 'undefined') {
-        this.title = '修改'
-        this.editForm.roleId = row.roleId
-        this.editForm.systemNo = row.systemNo
-        this.editForm.roleNo = row.roleNo
-        this.editForm.roleName = row.roleName
+      this.editFormVisible = true;
+      if (row != undefined && row != "undefined") {
+        this.title = "修改用户";
+        this.editForm.userId = row.userId;
+        this.editForm.userName = row.userName;
+        this.editForm.userRealName = row.userRealName;
+        this.editForm.roleId = row.roleId;
+        this.editForm.userMobile = row.userMobile;
+        this.editForm.userEmail = row.userEmail;
+        this.editForm.userSex = row.userSex;
       } else {
-        this.title = '添加'
-        this.editForm.roleId = ''
-        this.editForm.systemNo = ''
-        this.editForm.roleNo = ''
-        this.editForm.roleName = ''
+        this.title = "添加用户";
+        this.editForm.userId = "";
+        this.editForm.userName = "";
+        this.editForm.userRealName = "";
+        this.editForm.roleId = "";
+        this.editForm.userMobile = "";
+        this.editForm.userEmail = "";
+        this.editForm.userSex = "";
       }
     },
-    // 编辑、增加页面保存方法
+    // 编辑、添加提交方法
     submitForm(editData) {
       this.$refs[editData].validate(valid => {
         if (valid) {
-          roleSave(this.editForm)
+          // 请求方法
+          userSave(this.editForm)
             .then(res => {
-              this.editFormVisible = false
-              this.loading = false
+              this.editFormVisible = false;
+              this.loading = false;
               if (res.success) {
-                this.getdata(this.formInline)
+                this.getdata(this.formInline);
                 this.$message({
-                  type: 'success',
-                  message: '角色保存成功!'
-                })
+                  type: "success",
+                  message: "数据保存成功!"
+                });
               } else {
                 this.$message({
-                  type: 'info',
+                  type: "info",
                   message: res.msg
-                })
+                });
               }
             })
             .catch(err => {
-              this.editFormVisible = false
-              this.loading = false
-              this.$message.error('角色保存失败,请稍后再试!')
-            })
+              this.editFormVisible = false;
+              this.loading = false;
+              this.$message.error("保存失败,请稍后再试!");
+            });
         } else {
-          return false
+          return false;
         }
-      })
+      });
+    },
+    // 显示部门设置
+    handleunit: function(index, row) {
+      this.unitAccessshow = true;
+      let parms = 0;
+      UserDeptdeptTree(parms)
+        .then(res => {
+          if (res.data.success) {
+            this.UserDept = this.changeArr(res.data.data);
+          } else {
+            this.$message({
+              type: "info",
+              message: res.msg
+            });
+          }
+        })
+        .catch(err => {
+          this.loading = false;
+          this.$message.error("配置权限失败,请稍后再试!");
+        });
+    },
+    handleClick(data, checked, node) {
+      if (checked) {
+        this.$refs.tree.setCheckedNodes([]);
+        this.$refs.tree.setCheckedNodes([data]);
+        this.unitparm.deptId = data.id;
+        this.unitparm.deptName = data.name;
+        //交叉点击节点
+      } else {
+      }
+    },
+    // 保存部门
+    unitPermSave() {
+      let len = this.selectdata;
+      let ids = [];
+      if (len != 0) {
+        for (let i = 0; i < len.length; i++) {
+          ids.push(len[i].userId);
+        }
+      }
+      this.unitparm.userIds = ids.join(",");
+      UserChangeDept(this.unitparm)
+        .then(res => {
+          this.unitAccessshow = false;
+          if (res.success) {
+            this.$message({
+              type: "success",
+              message: "部门设置成功!"
+            });
+            this.getdata(this.formInline);
+          } else {
+            this.$message({
+              type: "info",
+              message: res.msg
+            });
+          }
+        })
+        .catch(err => {
+          this.loading = false;
+          this.$message.error("部门设置失败,请稍后再试!");
+        });
     },
-    // 删除角色
+    // 选择复选框事件
+    selectChange(val) {
+      this.selectdata = val;
+    },
+    // 关闭编辑、增加弹出框
+    closeDialog(dialog) {
+      if (dialog == "edit") {
+        this.editFormVisible = false;
+      } else if (dialog == "perm") {
+        this.dataAccessshow = false;
+      } else if (dialog == "unit") {
+        this.unitAccessshow = false;
+      }
+    },
+    // 删除用户
     deleteUser(index, row) {
-      this.$confirm('确定要删除吗?', '信息', {
-        confirmButtonText: '确定',
-        cancelButtonText: '取消',
-        type: 'warning'
+      this.$confirm("确定要删除吗?", "信息", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
       })
         .then(() => {
-          roleDelete(row.roleId)
+          // 删除
+          userDelete(row.id)
             .then(res => {
               if (res.success) {
                 this.$message({
-                  type: 'success',
-                  message: '角色已删除!'
-                })
-                this.getdata(this.formInline)
+                  type: "success",
+                  message: "数据已删除!"
+                });
+                this.getdata(this.formInline);
               } else {
                 this.$message({
-                  type: 'info',
+                  type: "info",
                   message: res.msg
-                })
+                });
               }
             })
             .catch(err => {
-              this.loading = false
-              this.$message.error('角色删除失败,请稍后再试!')
-            })
+              this.loading = false;
+              this.$message.error("数据删除失败,请稍后再试!");
+            });
         })
         .catch(() => {
           this.$message({
-            type: 'info',
-            message: '已取消删除'
-          })
+            type: "info",
+            message: "已取消删除!"
+          });
+        });
+    },
+    // 重置密码
+    resetpwd(index, row) {
+      this.resetpsd.userId = row.userId;
+      this.$confirm("确定要重置密码吗?", "信息", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      })
+        .then(() => {
+          userPwd(this.resetpsd)
+            .then(res => {
+              if (res.success) {
+                this.$message({
+                  type: "success",
+                  message: "重置密码成功!"
+                });
+                this.getdata(this.formInline);
+              } else {
+                this.$message({
+                  type: "info",
+                  message: res.msg
+                });
+              }
+            })
+            .catch(err => {
+              this.loading = false;
+              this.$message.error("重置密码失败,请稍后再试!");
+            });
         })
+        .catch(() => {
+          this.$message({
+            type: "info",
+            message: "取消重置密码!"
+          });
+        });
     },
     // 数据权限
-    menuAccess: function(index, row) {
-      this.menuAccessshow = true
-      this.saveroleId = row.roleId
-      RoleRightTree(row.roleId)
+    dataAccess: function(index, row) {
+      this.dataAccessshow = true;
+      this.saveroleId = row.userId;
+      UserDeptTree(row.userId)
         .then(res => {
           if (res.data.success) {
-            this.$message({
-              type: 'success',
-              message: '获取权限成功'
-            })
-            this.changemenu(res.data.data)
-            this.RoleRight = this.changeArr(res.data.data)
+            this.checkmenu = this.changemenu(res.data.data);
+            this.UserDept = this.changeArr(res.data.data);
           } else {
             this.$message({
-              type: 'info',
+              type: "info",
               message: res.data.msg
-            })
+            });
           }
         })
         .catch(err => {
-          this.loading = false
-          this.$message.error('获取权限失败,请稍后再试!')
-        })
-    },
-    // 选中菜单
-    changemenu(arr) {
-      let change = []
-      for (let i = 0; i < arr.length; i++) {
-        if (arr[i].checked) {
-          change.push(arr[i].id)
-        }
-      }
-      this.checkmenu = change
+          this.loading = false;
+          this.$message.error("获取权限失败,请稍后再试!");
+        });
     },
-    // tree 递归
-    changeArr(list) {
-      var temptree = [],
-        tree = [],
-        items = []
-      for (var i in list) {
-        if (!temptree[list[i].id]) {
-          var trow = {
-            id: list[i].id,
-            pId: list[i].pId,
-            name: list[i].name,
-            open: list[i].open,
-            checked: list[i].checked,
+    //数据格式化
+    changeArr(data) {
+      var pos = {};
+      var tree = [];
+      var i = 0;
+      while (data.length != 0) {
+        if (data[i].pId == 0) {
+          tree.push({
+            id: data[i].id,
+            name: data[i].name,
+            pId: data[i].pId,
+            open: data[i].open,
+            checked: data[i].checked,
             children: []
+          });
+          pos[data[i].id] = [tree.length - 1];
+          data.splice(i, 1);
+          i--;
+        } else {
+          var posArr = pos[data[i].pId];
+          if (posArr != undefined) {
+            var obj = tree[posArr[0]];
+            for (var j = 1; j < posArr.length; j++) {
+              obj = obj.children[posArr[j]];
+            }
+
+            obj.children.push({
+              id: data[i].id,
+              name: data[i].name,
+              pId: data[i].pId,
+              open: data[i].open,
+              checked: data[i].checked,
+              children: []
+            });
+            pos[data[i].id] = posArr.concat([obj.children.length - 1]);
+            data.splice(i, 1);
+            i--;
           }
-          temptree[list[i].id] = trow
-          items.push(trow)
         }
-        if (list[i].uid > 0) {
-          temptree[list[i].id]['children'].push({
-            id: list[i].id,
-            pId: list[i].pId,
-            name: list[i].name,
-            open: list[i].open,
-            checked: list[i].checked,
-            children: []
-          })
+        i++;
+        if (i > data.length - 1) {
+          i = 0;
         }
       }
-
-      for (var j in items) {
-        if (temptree[items[j].pId]) {
-          temptree[items[j].pId]['children'].push(temptree[items[j].id])
-        } else {
-          tree.push(temptree[items[j].id])
+      return tree;
+    },
+    // 选中菜单
+    changemenu(arr) {
+      let change = [];
+      for (let i = 0; i < arr.length; i++) {
+        if (arr[i].checked) {
+          change.push(arr[i].id);
         }
       }
-      temptree = null
-      items = null
-      return tree
+      return change;
     },
     // 菜单权限-保存
     menuPermSave() {
       let parm = {
-        roleId: this.saveroleId,
-        moduleIds: ''
-      }
-      let node = this.$refs.tree.getCheckedNodes()
-      let moduleIds = []
+        userId: this.saveroleId,
+        deptIds: ""
+      };
+      let node = this.$refs.tree.getCheckedNodes();
+      let moduleIds = [];
       if (node.length != 0) {
         for (let i = 0; i < node.length; i++) {
-          moduleIds.push(node[i].id)
+          moduleIds.push(node[i].id);
         }
-        parm.moduleIds = JSON.stringify(moduleIds)
+        parm.deptIds = JSON.stringify(moduleIds);
       }
-      RoleRightSave(parm)
+      UserDeptSave(parm)
         .then(res => {
           if (res.success) {
             this.$message({
-              type: 'success',
-              message: '权限保存成功'
-            })
-            this.menuAccessshow = false
-            this.getdata(this.formInline)
+              type: "success",
+              message: "权限保存成功"
+            });
+            this.dataAccessshow = false;
+            this.getdata(this.formInline);
           } else {
             this.$message({
-              type: 'info',
+              type: "info",
               message: res.msg
-            })
+            });
           }
         })
         .catch(err => {
-          this.loading = false
-          this.$message.error('权限保存失败,请稍后再试!')
+          this.loading = false;
+          this.$message.error("权限保存失败,请稍后再试!");
+        });
+    },
+    // 下线用户
+    offlineUser(index, row) {
+      this.$confirm("确定要让" + row.userName + "用户下线吗?", "信息", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      })
+        .then(() => {
+          userExpireToken(row.userName)
+            .then(res => {
+              if (res.success) {
+                this.$message({
+                  type: "success",
+                  message: "用户" + row.userName + "强制下线成功!"
+                });
+                this.getdata(this.formInline);
+              } else {
+                this.$message({
+                  type: "info",
+                  message: res.msg
+                });
+              }
+            })
+            .catch(err => {
+              this.loading = false;
+              this.$message.error("用户下线失败,请稍后再试!");
+            });
         })
+        .catch(() => {
+          this.$message({
+            type: "info",
+            message: "已取消"
+          });
+        });
     },
-    // 关闭编辑、增加弹出框
-    closeDialog(dialog) {
-      if (dialog == 'edit') {
-        this.editFormVisible = false
-      } else if (dialog == 'perm') {
-        this.menuAccessshow = false
-      }
+    // 刷新缓存
+    refreshCache(index, row) {
+      userFlashCache(row.userName)
+        .then(res => {
+          if (res.success) {
+            this.$message({
+              type: "success",
+              message: "刷新成功!"
+            });
+            this.getdata(this.formInline);
+          } else {
+            this.$message({
+              type: "info",
+              message: res.msg
+            });
+          }
+        })
+        .catch(err => {
+          this.loading = false;
+          this.$message.error("刷新失败,请稍后再试!");
+        });
     }
   }
-}
+};
 </script>
 
 <style scoped>

+ 8 - 1
src/views/system/user.vue

@@ -58,6 +58,12 @@
     </el-table>
     <!-- 分页组件 -->
     <Pagination v-bind:child-msg="pageparm" @callFather="callFather"></Pagination>
+<!-- <magnifier
+  :boxSize="400"
+  :minImgUrl="require('../../assets/img/bg.png')"
+  :maxImgUrl="require('../../assets/img/bg.png')"
+></magnifier> -->
+
   </div>
 </template>
 
@@ -174,7 +180,7 @@ export default {
       // 分页参数
       pageparm: {
         currentPage: 1,
-        pageSize: 10,
+        pageSize: 20,
         total: 0
       }
     };
@@ -229,6 +235,7 @@ export default {
       this.pageChange(1);
     },
 
+    // 属性去重
     arrayUnique2(arr, name) {
       var hash = {};
       return arr.reduce(function(item, next) {

+ 2 - 2
upload/config.js

@@ -1,6 +1,6 @@
 module.exports = Object.freeze({
   development: {//测试
-    SERVER_PATH: '39.108.193.144', // ssh地址 服务器地址
+    SERVER_PATH: '106.13.228.219', // ssh地址 服务器地址
     SSH_USER: 'root', // ssh 用户名
     //方式一 用秘钥登录服务器(推荐), private 本机私钥文件地址(需要在服务器用户目录 一般是 /root/.ssh/authorized_keys 配置公钥 并该文件权限为 600, (.ssh文件夹一般默认隐藏)
     // PRIVATE_KEY: 'C:/Users/Html5/.ssh/id_rsa', 
@@ -8,7 +8,7 @@ module.exports = Object.freeze({
     PATH: '/www/myAdmin' // 需要上传的服务器目录地址 如 /usr/local/nginx/html
   },
   production: {//正式
-    SERVER_PATH: '39.108.193.144', 
+    SERVER_PATH: '106.13.228.219', 
     SSH_USER: 'root',
     PASSWORD: 'Zxj56295650!', 
     PATH: '/www/myAdmin'