1
0
panhui 7 лет назад
Родитель
Сommit
ea269343f1
3 измененных файлов с 1270 добавлено и 1615 удалено
  1. 31 568
      src/main/vue/package-lock.json
  2. 1051 1032
      src/main/vue/src/pages/GenCode.vue
  3. 188 15
      src/main/vue/src/pages/Menus.vue

+ 31 - 568
src/main/vue/package-lock.json

@@ -155,7 +155,7 @@
     },
     "abs-svg-path": {
       "version": "0.1.1",
-      "resolved": "http://registry.npm.taobao.org/abs-svg-path/download/abs-svg-path-0.1.1.tgz",
+      "resolved": "https://registry.npmjs.org/abs-svg-path/-/abs-svg-path-0.1.1.tgz",
       "integrity": "sha1-32Acjo0roQ1KdtYl4japo5wnI78="
     },
     "accepts": {
@@ -226,7 +226,7 @@
     },
     "amdefine": {
       "version": "1.0.1",
-      "resolved": "http://registry.npm.taobao.org/amdefine/download/amdefine-1.0.1.tgz",
+      "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
       "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU="
     },
     "ansi-html": {
@@ -1831,7 +1831,6 @@
         "anymatch": "2.0.0",
         "async-each": "1.0.1",
         "braces": "2.3.1",
-        "fsevents": "1.2.4",
         "glob-parent": "3.1.0",
         "inherits": "2.0.3",
         "is-binary-path": "1.0.1",
@@ -2213,7 +2212,7 @@
     },
     "contour_plot": {
       "version": "0.0.1",
-      "resolved": "http://registry.npm.taobao.org/contour_plot/download/contour_plot-0.0.1.tgz",
+      "resolved": "https://registry.npmjs.org/contour_plot/-/contour_plot-0.0.1.tgz",
       "integrity": "sha1-R1hw8DK44zhBKqX8UHiA8L9JXHc="
     },
     "convert-source-map": {
@@ -2699,7 +2698,7 @@
     },
     "d3-composite-projections": {
       "version": "1.2.0",
-      "resolved": "http://registry.npm.taobao.org/d3-composite-projections/download/d3-composite-projections-1.2.0.tgz",
+      "resolved": "https://registry.npmjs.org/d3-composite-projections/-/d3-composite-projections-1.2.0.tgz",
       "integrity": "sha1-+g5vFELxfQRkOEOjqIPH2U4MJ8A=",
       "requires": {
         "d3-geo": "1.2.4",
@@ -2708,7 +2707,7 @@
       "dependencies": {
         "d3-geo": {
           "version": "1.2.4",
-          "resolved": "http://registry.npm.taobao.org/d3-geo/download/d3-geo-1.2.4.tgz",
+          "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-1.2.4.tgz",
           "integrity": "sha1-0XnzuqduYj7x4Ng2k9twW3xZkAY=",
           "requires": {
             "d3-array": "1.2.4"
@@ -2738,7 +2737,7 @@
     },
     "d3-geo": {
       "version": "1.6.4",
-      "resolved": "http://registry.npm.taobao.org/d3-geo/download/d3-geo-1.6.4.tgz",
+      "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-1.6.4.tgz",
       "integrity": "sha1-8g4eRhyxhF9ai+Vatvh2VCp+MZk=",
       "requires": {
         "d3-array": "1.2.4"
@@ -2746,7 +2745,7 @@
     },
     "d3-geo-projection": {
       "version": "2.1.2",
-      "resolved": "http://registry.npm.taobao.org/d3-geo-projection/download/d3-geo-projection-2.1.2.tgz",
+      "resolved": "https://registry.npmjs.org/d3-geo-projection/-/d3-geo-projection-2.1.2.tgz",
       "integrity": "sha1-ffjh6dBG1jHGUJ9+UxNX1K3CSqM=",
       "requires": {
         "commander": "2.15.1",
@@ -2782,7 +2781,7 @@
     },
     "d3-sankey": {
       "version": "0.7.1",
-      "resolved": "http://registry.npm.taobao.org/d3-sankey/download/d3-sankey-0.7.1.tgz",
+      "resolved": "https://registry.npmjs.org/d3-sankey/-/d3-sankey-0.7.1.tgz",
       "integrity": "sha1-0imDImj8aaf+yEgD6WwiVqYUxSE=",
       "requires": {
         "d3-array": "1.2.4",
@@ -3860,7 +3859,7 @@
     },
     "fmin": {
       "version": "0.0.2",
-      "resolved": "http://registry.npm.taobao.org/fmin/download/fmin-0.0.2.tgz",
+      "resolved": "https://registry.npmjs.org/fmin/-/fmin-0.0.2.tgz",
       "integrity": "sha1-Wbu0DUP/3ByUzQClaMQflfGXMBc=",
       "requires": {
         "contour_plot": "0.0.1",
@@ -3872,12 +3871,12 @@
       "dependencies": {
         "source-map": {
           "version": "0.5.7",
-          "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
           "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
         },
         "uglify-js": {
           "version": "2.8.29",
-          "resolved": "http://registry.npm.taobao.org/uglify-js/download/uglify-js-2.8.29.tgz",
+          "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz",
           "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=",
           "requires": {
             "source-map": "0.5.7",
@@ -3887,7 +3886,7 @@
         },
         "yargs": {
           "version": "3.10.0",
-          "resolved": "http://registry.npm.taobao.org/yargs/download/yargs-3.10.0.tgz",
+          "resolved": "http://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz",
           "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=",
           "requires": {
             "camelcase": "1.2.1",
@@ -4047,535 +4046,6 @@
       "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
       "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
     },
-    "fsevents": {
-      "version": "1.2.4",
-      "resolved": "http://registry.npm.taobao.org/fsevents/download/fsevents-1.2.4.tgz",
-      "integrity": "sha1-9B3LGvJYKvNpLaNvxVy9jhBBxCY=",
-      "dev": true,
-      "optional": true,
-      "requires": {
-        "nan": "2.11.0",
-        "node-pre-gyp": "0.10.0"
-      },
-      "dependencies": {
-        "abbrev": {
-          "version": "1.1.1",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "ansi-regex": {
-          "version": "2.1.1",
-          "bundled": true,
-          "dev": true
-        },
-        "aproba": {
-          "version": "1.2.0",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "are-we-there-yet": {
-          "version": "1.1.4",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "delegates": "1.0.0",
-            "readable-stream": "2.3.6"
-          }
-        },
-        "balanced-match": {
-          "version": "1.0.0",
-          "bundled": true,
-          "dev": true
-        },
-        "brace-expansion": {
-          "version": "1.1.11",
-          "bundled": true,
-          "dev": true,
-          "requires": {
-            "balanced-match": "1.0.0",
-            "concat-map": "0.0.1"
-          }
-        },
-        "chownr": {
-          "version": "1.0.1",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "code-point-at": {
-          "version": "1.1.0",
-          "bundled": true,
-          "dev": true
-        },
-        "concat-map": {
-          "version": "0.0.1",
-          "bundled": true,
-          "dev": true
-        },
-        "console-control-strings": {
-          "version": "1.1.0",
-          "bundled": true,
-          "dev": true
-        },
-        "core-util-is": {
-          "version": "1.0.2",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "debug": {
-          "version": "2.6.9",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "ms": "2.0.0"
-          }
-        },
-        "deep-extend": {
-          "version": "0.5.1",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "delegates": {
-          "version": "1.0.0",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "detect-libc": {
-          "version": "1.0.3",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "fs-minipass": {
-          "version": "1.2.5",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "minipass": "2.2.4"
-          }
-        },
-        "fs.realpath": {
-          "version": "1.0.0",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "gauge": {
-          "version": "2.7.4",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "aproba": "1.2.0",
-            "console-control-strings": "1.1.0",
-            "has-unicode": "2.0.1",
-            "object-assign": "4.1.1",
-            "signal-exit": "3.0.2",
-            "string-width": "1.0.2",
-            "strip-ansi": "3.0.1",
-            "wide-align": "1.1.2"
-          }
-        },
-        "glob": {
-          "version": "7.1.2",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "fs.realpath": "1.0.0",
-            "inflight": "1.0.6",
-            "inherits": "2.0.3",
-            "minimatch": "3.0.4",
-            "once": "1.4.0",
-            "path-is-absolute": "1.0.1"
-          }
-        },
-        "has-unicode": {
-          "version": "2.0.1",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "iconv-lite": {
-          "version": "0.4.21",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "safer-buffer": "2.1.2"
-          }
-        },
-        "ignore-walk": {
-          "version": "3.0.1",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "minimatch": "3.0.4"
-          }
-        },
-        "inflight": {
-          "version": "1.0.6",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "once": "1.4.0",
-            "wrappy": "1.0.2"
-          }
-        },
-        "inherits": {
-          "version": "2.0.3",
-          "bundled": true,
-          "dev": true
-        },
-        "ini": {
-          "version": "1.3.5",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "is-fullwidth-code-point": {
-          "version": "1.0.0",
-          "bundled": true,
-          "dev": true,
-          "requires": {
-            "number-is-nan": "1.0.1"
-          }
-        },
-        "isarray": {
-          "version": "1.0.0",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "minimatch": {
-          "version": "3.0.4",
-          "bundled": true,
-          "dev": true,
-          "requires": {
-            "brace-expansion": "1.1.11"
-          }
-        },
-        "minimist": {
-          "version": "0.0.8",
-          "bundled": true,
-          "dev": true
-        },
-        "minipass": {
-          "version": "2.2.4",
-          "bundled": true,
-          "dev": true,
-          "requires": {
-            "safe-buffer": "5.1.1",
-            "yallist": "3.0.2"
-          }
-        },
-        "minizlib": {
-          "version": "1.1.0",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "minipass": "2.2.4"
-          }
-        },
-        "mkdirp": {
-          "version": "0.5.1",
-          "bundled": true,
-          "dev": true,
-          "requires": {
-            "minimist": "0.0.8"
-          }
-        },
-        "ms": {
-          "version": "2.0.0",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "needle": {
-          "version": "2.2.0",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "debug": "2.6.9",
-            "iconv-lite": "0.4.21",
-            "sax": "1.2.4"
-          }
-        },
-        "node-pre-gyp": {
-          "version": "0.10.0",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "detect-libc": "1.0.3",
-            "mkdirp": "0.5.1",
-            "needle": "2.2.0",
-            "nopt": "4.0.1",
-            "npm-packlist": "1.1.10",
-            "npmlog": "4.1.2",
-            "rc": "1.2.7",
-            "rimraf": "2.6.2",
-            "semver": "5.5.0",
-            "tar": "4.4.1"
-          }
-        },
-        "nopt": {
-          "version": "4.0.1",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "abbrev": "1.1.1",
-            "osenv": "0.1.5"
-          }
-        },
-        "npm-bundled": {
-          "version": "1.0.3",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "npm-packlist": {
-          "version": "1.1.10",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "ignore-walk": "3.0.1",
-            "npm-bundled": "1.0.3"
-          }
-        },
-        "npmlog": {
-          "version": "4.1.2",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "are-we-there-yet": "1.1.4",
-            "console-control-strings": "1.1.0",
-            "gauge": "2.7.4",
-            "set-blocking": "2.0.0"
-          }
-        },
-        "number-is-nan": {
-          "version": "1.0.1",
-          "bundled": true,
-          "dev": true
-        },
-        "object-assign": {
-          "version": "4.1.1",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "once": {
-          "version": "1.4.0",
-          "bundled": true,
-          "dev": true,
-          "requires": {
-            "wrappy": "1.0.2"
-          }
-        },
-        "os-homedir": {
-          "version": "1.0.2",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "os-tmpdir": {
-          "version": "1.0.2",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "osenv": {
-          "version": "0.1.5",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "os-homedir": "1.0.2",
-            "os-tmpdir": "1.0.2"
-          }
-        },
-        "path-is-absolute": {
-          "version": "1.0.1",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "process-nextick-args": {
-          "version": "2.0.0",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "rc": {
-          "version": "1.2.7",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "deep-extend": "0.5.1",
-            "ini": "1.3.5",
-            "minimist": "1.2.0",
-            "strip-json-comments": "2.0.1"
-          },
-          "dependencies": {
-            "minimist": {
-              "version": "1.2.0",
-              "bundled": true,
-              "dev": true,
-              "optional": true
-            }
-          }
-        },
-        "readable-stream": {
-          "version": "2.3.6",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "core-util-is": "1.0.2",
-            "inherits": "2.0.3",
-            "isarray": "1.0.0",
-            "process-nextick-args": "2.0.0",
-            "safe-buffer": "5.1.1",
-            "string_decoder": "1.1.1",
-            "util-deprecate": "1.0.2"
-          }
-        },
-        "rimraf": {
-          "version": "2.6.2",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "glob": "7.1.2"
-          }
-        },
-        "safe-buffer": {
-          "version": "5.1.1",
-          "bundled": true,
-          "dev": true
-        },
-        "safer-buffer": {
-          "version": "2.1.2",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "sax": {
-          "version": "1.2.4",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "semver": {
-          "version": "5.5.0",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "set-blocking": {
-          "version": "2.0.0",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "signal-exit": {
-          "version": "3.0.2",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "string-width": {
-          "version": "1.0.2",
-          "bundled": true,
-          "dev": true,
-          "requires": {
-            "code-point-at": "1.1.0",
-            "is-fullwidth-code-point": "1.0.0",
-            "strip-ansi": "3.0.1"
-          }
-        },
-        "string_decoder": {
-          "version": "1.1.1",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "safe-buffer": "5.1.1"
-          }
-        },
-        "strip-ansi": {
-          "version": "3.0.1",
-          "bundled": true,
-          "dev": true,
-          "requires": {
-            "ansi-regex": "2.1.1"
-          }
-        },
-        "strip-json-comments": {
-          "version": "2.0.1",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "tar": {
-          "version": "4.4.1",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "chownr": "1.0.1",
-            "fs-minipass": "1.2.5",
-            "minipass": "2.2.4",
-            "minizlib": "1.1.0",
-            "mkdirp": "0.5.1",
-            "safe-buffer": "5.1.1",
-            "yallist": "3.0.2"
-          }
-        },
-        "util-deprecate": {
-          "version": "1.0.2",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "wide-align": {
-          "version": "1.1.2",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "string-width": "1.0.2"
-          }
-        },
-        "wrappy": {
-          "version": "1.0.2",
-          "bundled": true,
-          "dev": true
-        },
-        "yallist": {
-          "version": "3.0.2",
-          "bundled": true,
-          "dev": true
-        }
-      }
-    },
     "function-bind": {
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
@@ -5658,7 +5128,7 @@
     },
     "json2module": {
       "version": "0.0.3",
-      "resolved": "http://registry.npm.taobao.org/json2module/download/json2module-0.0.3.tgz",
+      "resolved": "https://registry.npmjs.org/json2module/-/json2module-0.0.3.tgz",
       "integrity": "sha1-APtfSpt638PwZHwpyxe80Zeb6bI=",
       "requires": {
         "rw": "1.3.3"
@@ -6250,13 +5720,6 @@
       "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=",
       "dev": true
     },
-    "nan": {
-      "version": "2.11.0",
-      "resolved": "http://registry.npm.taobao.org/nan/download/nan-2.11.0.tgz",
-      "integrity": "sha1-V042Dk2VSrFpZuwQLAwEn9lhoJk=",
-      "dev": true,
-      "optional": true
-    },
     "nanomatch": {
       "version": "1.2.9",
       "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.9.tgz",
@@ -6797,7 +6260,7 @@
     },
     "parse-svg-path": {
       "version": "0.1.2",
-      "resolved": "http://registry.npm.taobao.org/parse-svg-path/download/parse-svg-path-0.1.2.tgz",
+      "resolved": "https://registry.npmjs.org/parse-svg-path/-/parse-svg-path-0.1.2.tgz",
       "integrity": "sha1-en7A0esG+lMlx9PgCbhZoJtdSes="
     },
     "parseurl": {
@@ -6917,7 +6380,7 @@
     },
     "point-at-length": {
       "version": "1.0.2",
-      "resolved": "http://registry.npm.taobao.org/point-at-length/download/point-at-length-1.0.2.tgz",
+      "resolved": "https://registry.npmjs.org/point-at-length/-/point-at-length-1.0.2.tgz",
       "integrity": "sha1-kXbY1tfIFi8Stkb3B9ufDqcoEl4=",
       "requires": {
         "abs-svg-path": "0.1.1",
@@ -6927,7 +6390,7 @@
       "dependencies": {
         "isarray": {
           "version": "0.0.1",
-          "resolved": "http://registry.npm.taobao.org/isarray/download/isarray-0.0.1.tgz",
+          "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
           "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
         }
       }
@@ -9424,7 +8887,7 @@
     },
     "regression": {
       "version": "2.0.1",
-      "resolved": "http://registry.npm.taobao.org/regression/download/regression-2.0.1.tgz",
+      "resolved": "https://registry.npmjs.org/regression/-/regression-2.0.1.tgz",
       "integrity": "sha1-jSnD6CJKEIUMNeM36FqLL6w7DIc="
     },
     "relateurl": {
@@ -9579,7 +9042,7 @@
     },
     "resumer": {
       "version": "0.0.0",
-      "resolved": "http://registry.npm.taobao.org/resumer/download/resumer-0.0.0.tgz",
+      "resolved": "https://registry.npmjs.org/resumer/-/resumer-0.0.0.tgz",
       "integrity": "sha1-8ej0YeQGS6Oegq883CqMiT0HZ1k=",
       "requires": {
         "through": "2.3.8"
@@ -9620,7 +9083,7 @@
     },
     "rollup": {
       "version": "0.25.8",
-      "resolved": "http://registry.npm.taobao.org/rollup/download/rollup-0.25.8.tgz",
+      "resolved": "http://registry.npmjs.org/rollup/-/rollup-0.25.8.tgz",
       "integrity": "sha1-v2zoO4dRDRY0Ru6qV37WpvxYNeA=",
       "requires": {
         "chalk": "1.1.3",
@@ -9630,12 +9093,12 @@
       "dependencies": {
         "ansi-styles": {
           "version": "2.2.1",
-          "resolved": "http://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz",
+          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
           "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
         },
         "chalk": {
           "version": "1.1.3",
-          "resolved": "http://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz",
+          "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
           "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
           "requires": {
             "ansi-styles": "2.2.1",
@@ -9647,12 +9110,12 @@
         },
         "minimist": {
           "version": "1.2.0",
-          "resolved": "http://registry.npm.taobao.org/minimist/download/minimist-1.2.0.tgz",
+          "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
           "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
         },
         "source-map": {
           "version": "0.1.32",
-          "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.1.32.tgz",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.32.tgz",
           "integrity": "sha1-yLbBZ3l7pHQKjqMyUhYv8IWRsmY=",
           "requires": {
             "amdefine": "1.0.1"
@@ -9660,7 +9123,7 @@
         },
         "source-map-support": {
           "version": "0.3.3",
-          "resolved": "http://registry.npm.taobao.org/source-map-support/download/source-map-support-0.3.3.tgz",
+          "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.3.3.tgz",
           "integrity": "sha1-NJAJd9W6PwfHdX7nLnO7GptTdU8=",
           "requires": {
             "source-map": "0.1.32"
@@ -9668,7 +9131,7 @@
         },
         "supports-color": {
           "version": "2.0.0",
-          "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
           "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
         }
       }
@@ -9684,7 +9147,7 @@
     },
     "rw": {
       "version": "1.3.3",
-      "resolved": "http://registry.npm.taobao.org/rw/download/rw-1.3.3.tgz",
+      "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz",
       "integrity": "sha1-P4Yt+pGrdmsUiF700BEkv9oHT7Q="
     },
     "safe-buffer": {
@@ -10430,7 +9893,7 @@
     },
     "string.prototype.trim": {
       "version": "1.1.2",
-      "resolved": "http://registry.npm.taobao.org/string.prototype.trim/download/string.prototype.trim-1.1.2.tgz",
+      "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.1.2.tgz",
       "integrity": "sha1-0E3iyJ4Tf019IG8Ia17S+ua+jOo=",
       "requires": {
         "define-properties": "1.1.2",
@@ -10536,7 +9999,7 @@
         },
         "minimist": {
           "version": "1.2.0",
-          "resolved": "http://registry.npm.taobao.org/minimist/download/minimist-1.2.0.tgz",
+          "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
           "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
         },
         "resolve": {
@@ -10556,7 +10019,7 @@
     },
     "through": {
       "version": "2.3.8",
-      "resolved": "http://registry.npm.taobao.org/through/download/through-2.3.8.tgz",
+      "resolved": "http://registry.npmjs.org/through/-/through-2.3.8.tgz",
       "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU="
     },
     "through2": {
@@ -10645,7 +10108,7 @@
     },
     "topojson-client": {
       "version": "3.0.0",
-      "resolved": "http://registry.npm.taobao.org/topojson-client/download/topojson-client-3.0.0.tgz",
+      "resolved": "https://registry.npmjs.org/topojson-client/-/topojson-client-3.0.0.tgz",
       "integrity": "sha1-H5kpOnfvQqRI0DKoGqmCtz82DS8=",
       "requires": {
         "commander": "2.15.1"
@@ -11674,7 +11137,7 @@
     },
     "wolfy87-eventemitter": {
       "version": "5.1.0",
-      "resolved": "http://registry.npm.taobao.org/wolfy87-eventemitter/download/wolfy87-eventemitter-5.1.0.tgz",
+      "resolved": "https://registry.npmjs.org/wolfy87-eventemitter/-/wolfy87-eventemitter-5.1.0.tgz",
       "integrity": "sha1-NcGsDdGsDBXjXZgVCPwiCEoToBE="
     },
     "wordwrap": {

+ 1051 - 1032
src/main/vue/src/pages/GenCode.vue

@@ -1,1061 +1,1080 @@
 <template>
-	<div v-loading="loading" element-loading-text="拼命加载中">
-		<el-form :model="formData" :rules="rules" ref="form" label-width="80px" label-position="right" size="small">
-			<el-form-item prop="readTable" label="读表">
-
-				<el-switch :value="formData.readTable" on-text="读表" off-text="不读" @change="updateReadTable()">
-				</el-switch>
-
-			</el-form-item>
-			<el-form-item prop="typeFlag" label="分类">
-				<el-input v-model="formData.typeFlag" style="width: 215px;"></el-input>
-			</el-form-item>
-			<el-form-item prop="className" label="类名">
-				<el-input v-model="formData.className" style="width: 215px;"></el-input>
-			</el-form-item>
-
-			<el-form-item prop="remark" label="描述">
-				<el-input v-model="formData.remark" style="width: 215px;"></el-input>
-			</el-form-item>
-
-			<el-form-item prop="dataBaseType" label="库类型">
-				<el-select placeholder="库类型" size="small" v-model="formData.dataBaseType" @change="changeDataBaseType" class="filter-item">
-					<el-option label="Mysql" value="Mysql">
-					</el-option>
-					<el-option label="SqlServer" value="SqlServer">
-					</el-option>
-				</el-select>
-			</el-form-item>
-			<el-form-item prop="dataSourceCode" label="数据库">
-
-				<el-select placeholder="数据库" size="small" v-model="formData.dataSourceCode" @change="changeDataSourceCode" class="filter-item">
-					<el-option v-for="item in datasourceInfoList" :label="item.databaseName" :value="item.code" :key="item.code"></el-option>
-				</el-select>
-
-			</el-form-item>
-
-			<el-form-item prop="tableName" label="表名" v-if="!formData.readTable">
-				<el-input v-model="formData.tableName" style="width: 215px;"></el-input>
-			</el-form-item>
-			<el-form-item prop="tableName" label="表名" v-if="formData.readTable">
-
-				<el-select placeholder="表名" size="small" clearable filterable v-model="formData.tableName" @change="changeTableName" class="filter-item">
-					<el-option v-for="item in tableList" :label="item" :value="item" :key="item"></el-option>
-				</el-select>
-
-			</el-form-item>
-
-			<el-form-item prop="modules" label="功能">
-				<el-select placeholder="modules" size="small" multiple v-model="formData.modules" class="filter-item">
-					<el-option label="搜索" value="search">
-					</el-option>
-					<el-option label="高级搜索" value="query">
-					</el-option>
-					<el-option label="排序" value="orders">
-					</el-option>
-					<el-option label="导出Excel" value="excel">
-					</el-option>
-					<el-option label="添加" value="add">
-					</el-option>
-					<el-option label="编辑" value="edit">
-					</el-option>
-					<el-option label="删除" value="del">
-					</el-option>
-				</el-select>
-			</el-form-item>
-
-			<el-form-item prop="genCode" label="生成">
-				<el-checkbox v-model="formData.genTable" label="表"></el-checkbox>
-				<el-checkbox v-model="formData.genClass" label="类"></el-checkbox>
-				<el-checkbox v-model="formData.genList" label="列表"></el-checkbox>
-				<el-checkbox v-model="formData.genForm" label="表单"></el-checkbox>
-				<el-checkbox v-model="formData.genRouter" label="路由"></el-checkbox>
-			</el-form-item>
-			<el-form-item prop="javaPath" label="根目录">
-				<el-input v-model="formData.rootPath"></el-input>
-			</el-form-item>
-			<el-form-item prop="fields" label="数据">
-				<el-tabs value="1" type="border-card">
-					<el-tab-pane label="字段" name="1">
-						<el-table :data="fields" border ref="fieldsTable">
-							<el-table-column v-if="multipleMode" align="center" type="selection" width="50">
-							</el-table-column>
-							<el-table-column width="130" align="center">
-								<template slot-scope="{ row, column, $index }" v-if="$index>1||formData.dataBaseType!='Mysql'">
-									<!-- <el-button @click="moveUp($index)" size="small" type="text">上移</el-button>
+    <div v-loading="loading" element-loading-text="拼命加载中">
+        <el-form :model="formData" :rules="rules" ref="form" label-width="80px" label-position="right" size="small">
+            <el-form-item prop="readTable" label="读表">
+
+                <el-switch :value="formData.readTable" on-text="读表" off-text="不读" @change="updateReadTable()">
+                </el-switch>
+
+            </el-form-item>
+            <el-form-item prop="typeFlag" label="分类">
+                <el-input v-model="formData.typeFlag" style="width: 215px;"></el-input>
+            </el-form-item>
+            <el-form-item prop="className" label="类名">
+                <el-input v-model="formData.className" style="width: 215px;"></el-input>
+            </el-form-item>
+
+            <el-form-item prop="remark" label="描述">
+                <el-input v-model="formData.remark" style="width: 215px;"></el-input>
+            </el-form-item>
+
+            <el-form-item prop="dataBaseType" label="库类型">
+                <el-select placeholder="库类型" size="small" v-model="formData.dataBaseType" @change="changeDataBaseType" class="filter-item">
+                    <el-option label="Mysql" value="Mysql">
+                    </el-option>
+                    <el-option label="SqlServer" value="SqlServer">
+                    </el-option>
+                </el-select>
+            </el-form-item>
+            <el-form-item prop="dataSourceCode" label="数据库">
+
+                <el-select placeholder="数据库" size="small" v-model="formData.dataSourceCode" @change="changeDataSourceCode" class="filter-item">
+                    <el-option v-for="item in datasourceInfoList" :label="item.databaseName" :value="item.code" :key="item.code"></el-option>
+                </el-select>
+
+            </el-form-item>
+
+            <el-form-item prop="tableName" label="表名" v-if="!formData.readTable">
+                <el-input v-model="formData.tableName" style="width: 215px;"></el-input>
+            </el-form-item>
+            <el-form-item prop="tableName" label="表名" v-if="formData.readTable">
+
+                <el-select placeholder="表名" size="small" clearable filterable v-model="formData.tableName" @change="changeTableName" class="filter-item">
+                    <el-option v-for="item in tableList" :label="item" :value="item" :key="item"></el-option>
+                </el-select>
+
+            </el-form-item>
+
+            <el-form-item prop="modules" label="功能">
+                <el-select placeholder="modules" size="small" multiple v-model="formData.modules" class="filter-item">
+                    <el-option label="搜索" value="search">
+                    </el-option>
+                    <el-option label="高级搜索" value="query">
+                    </el-option>
+                    <el-option label="排序" value="orders">
+                    </el-option>
+                    <el-option label="导出Excel" value="excel">
+                    </el-option>
+                    <el-option label="添加" value="add">
+                    </el-option>
+                    <el-option label="编辑" value="edit">
+                    </el-option>
+                    <el-option label="删除" value="del">
+                    </el-option>
+                </el-select>
+            </el-form-item>
+
+            <el-form-item prop="genCode" label="生成">
+                <el-checkbox v-model="formData.genTable" label="表"></el-checkbox>
+                <el-checkbox v-model="formData.genClass" label="类"></el-checkbox>
+                <el-checkbox v-model="formData.genList" label="列表"></el-checkbox>
+                <el-checkbox v-model="formData.genForm" label="表单"></el-checkbox>
+                <el-checkbox v-model="formData.genRouter" label="路由"></el-checkbox>
+            </el-form-item>
+            <el-form-item prop="javaPath" label="根目录">
+                <el-input v-model="formData.rootPath"></el-input>
+            </el-form-item>
+            <el-form-item prop="fields" label="数据">
+                <el-tabs value="1" type="border-card">
+                    <el-tab-pane label="字段" name="1">
+                        <el-table :data="fields" border ref="fieldsTable">
+                            <el-table-column v-if="multipleMode" align="center" type="selection" width="50">
+                            </el-table-column>
+                            <el-table-column width="130" align="center">
+                                <template slot-scope="{ row, column, $index }" v-if="$index>1||formData.dataBaseType!='Mysql'">
+                                    <!-- <el-button @click="moveUp($index)" size="small" type="text">上移</el-button>
 									<el-button @click="moveDown($index)" size="small" type="text">下移</el-button> -->
-									<el-button @click="removeField($index)" size="small" type="text">删除</el-button>
-								</template>
-							</el-table-column>
-							<el-table-column prop="name" label="字段名" min-width="150" align="center">
-								<template slot-scope="{row}">
-									<el-input v-model="row.name"></el-input>
-								</template>
-							</el-table-column>
-							<el-table-column prop="type" label="类型" width="150" align="center">
-								<template slot-scope="{row}">
-									<el-select v-model="row.jdbcType" filterable>
-										<el-option v-for="item in fieldTypes" :value="item" :label="item" :key="item"></el-option>
-									</el-select>
-								</template>
-							</el-table-column>
-							<el-table-column prop="length" label="长度" width="80" align="center">
-								<template slot-scope="{row}">
-									<el-input v-model.number="row.length"></el-input>
-								</template>
-							</el-table-column>
-							<el-table-column prop="decimalPlaces" label="小数点" width="80" align="center">
-								<template slot-scope="{row}">
-									<el-input v-model.number="row.decimalPlaces"></el-input>
-								</template>
-							</el-table-column>
-							<el-table-column prop="remark" label="描述" min-width="150" align="center">
-								<template slot-scope="{row}">
-									<el-input v-model="row.remark"></el-input>
-								</template>
-							</el-table-column>
-							<el-table-column prop="defaultValue" label="默认值" align="center">
-								<template slot-scope="{row}">
-									<el-input v-model="row.defaultValue"></el-input>
-								</template>
-							</el-table-column>
-							<el-table-column prop="notNull" label="非空" width="50" align="center">
-								<template slot-scope="{row}">
-									<el-checkbox v-model="row.notNull"></el-checkbox>
-								</template>
-							</el-table-column>
-							<el-table-column prop="primaryKey" label="主键" width="50" align="center">
-								<template slot-scope="{row}">
-									<el-checkbox v-model="row.primaryKey"></el-checkbox>
-								</template>
-							</el-table-column>
-							<el-table-column prop="autoIncrease" label="自增" width="50" align="center">
-								<template slot-scope="{row}">
-									<el-checkbox v-model="row.autoIncrease"></el-checkbox>
-								</template>
-							</el-table-column>
-
-						</el-table>
-						<el-button @click="addField" type="text" icon="el-icon-plus">添加</el-button>
-						<el-button size="small" v-if="!multipleMode" @click="toggleMultipleMode(true)">批量编辑</el-button>
-						<el-button-group v-else>
-							<el-button size="small" @click="operation1" type="danger" plain>批量删除</el-button>
-							<el-button size="small" @click="operation2" v-if="0">批量上移</el-button>
-							<el-button size="small" @click="toggleMultipleMode(false)">取消</el-button>
-						</el-button-group>
-						<el-button  @click="changeRankDialog = !changeRankDialog" type="primary" size="small" icon="el-icon-sort" class="filter-item">排序
-						</el-button>
-					</el-tab-pane>
-					<el-tab-pane label="页面属性" name="2">
-						<el-table :data="editableFields" border>
-							<el-table-column prop="name" label="字段" align="center">
-							</el-table-column>
-							<el-table-column prop="showInList" label="列表" width="50" align="center">
-								<template slot-scope="{row}">
-									<el-checkbox v-model="row.showInList"></el-checkbox>
-								</template>
-							</el-table-column>
-							<el-table-column prop="showInForm" label="表单" width="50" align="center">
-								<template slot-scope="{row}">
-									<el-checkbox v-model="row.showInForm" :disabled="row.primaryKey&&!formData.readTable"></el-checkbox>
-								</template>
-							</el-table-column>
-							<el-table-column prop="searchable" label="搜索" width="50" align="center">
-								<template slot-scope="{row}">
-									<el-checkbox v-model="row.searchable"></el-checkbox>
-								</template>
-							</el-table-column>
-							<!-- <el-table-column prop="sortable" label="排序" width="50" align="center">
+                                    <el-button @click="removeField($index)" size="small" type="text">删除</el-button>
+                                </template>
+                            </el-table-column>
+                            <el-table-column prop="name" label="字段名" min-width="150" align="center">
+                                <template slot-scope="{row}">
+                                    <el-input v-model="row.name"></el-input>
+                                </template>
+                            </el-table-column>
+                            <el-table-column prop="type" label="类型" width="150" align="center">
+                                <template slot-scope="{row}">
+                                    <el-select v-model="row.jdbcType" filterable>
+                                        <el-option v-for="item in fieldTypes" :value="item" :label="item" :key="item"></el-option>
+                                    </el-select>
+                                </template>
+                            </el-table-column>
+                            <el-table-column prop="length" label="长度" width="80" align="center">
+                                <template slot-scope="{row}">
+                                    <el-input v-model.number="row.length"></el-input>
+                                </template>
+                            </el-table-column>
+                            <el-table-column prop="decimalPlaces" label="小数点" width="80" align="center">
+                                <template slot-scope="{row}">
+                                    <el-input v-model.number="row.decimalPlaces"></el-input>
+                                </template>
+                            </el-table-column>
+                            <el-table-column prop="remark" label="描述" min-width="150" align="center">
+                                <template slot-scope="{row}">
+                                    <el-input v-model="row.remark"></el-input>
+                                </template>
+                            </el-table-column>
+                            <el-table-column prop="defaultValue" label="默认值" align="center">
+                                <template slot-scope="{row}">
+                                    <el-input v-model="row.defaultValue"></el-input>
+                                </template>
+                            </el-table-column>
+                            <el-table-column prop="notNull" label="非空" width="50" align="center">
+                                <template slot-scope="{row}">
+                                    <el-checkbox v-model="row.notNull"></el-checkbox>
+                                </template>
+                            </el-table-column>
+                            <el-table-column prop="primaryKey" label="主键" width="50" align="center">
+                                <template slot-scope="{row}">
+                                    <el-checkbox v-model="row.primaryKey"></el-checkbox>
+                                </template>
+                            </el-table-column>
+                            <el-table-column prop="autoIncrease" label="自增" width="50" align="center">
+                                <template slot-scope="{row}">
+                                    <el-checkbox v-model="row.autoIncrease"></el-checkbox>
+                                </template>
+                            </el-table-column>
+
+                        </el-table>
+                        <el-button @click="addField" type="text" icon="el-icon-plus">添加</el-button>
+                        <el-button size="small" v-if="!multipleMode" @click="toggleMultipleMode(true)">批量编辑</el-button>
+                        <el-button-group v-else>
+                            <el-button size="small" @click="operation1" type="danger" plain>批量删除</el-button>
+                            <el-button size="small" @click="operation2" v-if="0">批量上移</el-button>
+                            <el-button size="small" @click="toggleMultipleMode(false)">取消</el-button>
+                        </el-button-group>
+                        <el-button @click="changeRankDialog = !changeRankDialog" type="primary" size="small" icon="el-icon-sort" class="filter-item">排序
+                        </el-button>
+                    </el-tab-pane>
+                    <el-tab-pane label="页面属性" name="2">
+                        <el-table :data="editableFields" border>
+                            <el-table-column prop="name" label="字段" align="center">
+                            </el-table-column>
+                            <el-table-column prop="showInList" label="列表" width="50" align="center">
+                                <template slot-scope="{row}">
+                                    <el-checkbox v-model="row.showInList"></el-checkbox>
+                                </template>
+                            </el-table-column>
+                            <el-table-column prop="showInForm" label="表单" width="50" align="center">
+                                <template slot-scope="{row}">
+                                    <el-checkbox v-model="row.showInForm" :disabled="row.primaryKey&&!formData.readTable"></el-checkbox>
+                                </template>
+                            </el-table-column>
+                            <el-table-column prop="searchable" label="搜索" width="50" align="center">
+                                <template slot-scope="{row}">
+                                    <el-checkbox v-model="row.searchable"></el-checkbox>
+                                </template>
+                            </el-table-column>
+                            <!-- <el-table-column prop="sortable" label="排序" width="50" align="center">
                                 <template slot-scope="{row}">
                                     <el-checkbox v-model="row.sortable"></el-checkbox>
                                 </template>
                             </el-table-column> -->
-							<el-table-column prop="formType" label="表单类型" width="150" align="center">
-								<template slot-scope="{row}">
-									<el-select v-model="row.formType">
-										<el-option v-for="item in formTypes" :label="item.label" :value="item.value" :key="item.value"></el-option>
-									</el-select>
-								</template>
-							</el-table-column>
-							<el-table-column prop="apiFlag" label="接口" width="300" align="center">
-								<template slot-scope="{row}">
-									<el-radio v-model="row.apiFlag" label="1" :disabled="row.formType!='select'&&row.formType!='multiSelect'">枚举</el-radio>
-									<el-radio v-model="row.apiFlag" label="2" :disabled="row.formType!='select'&&row.formType!='multiSelect'">接口</el-radio>
-									<el-radio v-model="row.apiFlag" label="3" :disabled="row.formType!='select'&&row.formType!='multiSelect'">表</el-radio>
-								</template>
-							</el-table-column>
-							<el-table-column prop="optionsValue" label="选项" min-width="150" align="center">
-								<template slot-scope="{row}">
-									<el-input type="textarea" v-if="row.apiFlag=='1'&&(row.formType=='select'||row.formType=='multiSelect')" v-model="row.optionsValue"></el-input>
-									<div v-if="(row.apiFlag=='2'||row.apiFlag=='3')&&(row.formType=='select'||row.formType=='multiSelect')" @click="editSelectField(row)">
-										<el-input type="textarea" :value="optionsInfo(row)"></el-input>
-									</div>
-
-								</template>
-							</el-table-column>
-							<!-- <el-table-column prop="searchMethod" label="搜索方式" width="150" align="center">
+                            <el-table-column prop="formType" label="表单类型" width="150" align="center">
+                                <template slot-scope="{row}">
+                                    <el-select v-model="row.formType">
+                                        <el-option v-for="item in formTypes" :label="item.label" :value="item.value" :key="item.value"></el-option>
+                                    </el-select>
+                                </template>
+                            </el-table-column>
+                            <el-table-column prop="apiFlag" label="接口" width="300" align="center">
+                                <template slot-scope="{row}">
+                                    <el-radio v-model="row.apiFlag" label="1" :disabled="row.formType!='select'&&row.formType!='multiSelect'">枚举</el-radio>
+                                    <el-radio v-model="row.apiFlag" label="2" :disabled="row.formType!='select'&&row.formType!='multiSelect'">接口</el-radio>
+                                    <el-radio v-model="row.apiFlag" label="3" :disabled="row.formType!='select'&&row.formType!='multiSelect'">表</el-radio>
+                                </template>
+                            </el-table-column>
+                            <el-table-column prop="optionsValue" label="选项" min-width="150" align="center">
+                                <template slot-scope="{row}">
+                                    <el-input type="textarea" v-if="row.apiFlag=='1'&&(row.formType=='select'||row.formType=='multiSelect')" v-model="row.optionsValue"></el-input>
+                                    <div v-if="(row.apiFlag=='2'||row.apiFlag=='3')&&(row.formType=='select'||row.formType=='multiSelect')" @click="editSelectField(row)">
+                                        <el-input type="textarea" :value="optionsInfo(row)"></el-input>
+                                    </div>
+
+                                </template>
+                            </el-table-column>
+                            <!-- <el-table-column prop="searchMethod" label="搜索方式" width="150" align="center">
                                 <template slot-scope="{row}">
                                     <el-select v-model="row.searchMethod">
                                         <el-option v-for="item in searchMethods" :label="item" :value="item" :key="item"></el-option>
                                     </el-select>
                                 </template>
                             </el-table-column> -->
-						</el-table>
-					</el-tab-pane>
-					<el-tab-pane label="表单校验" name="3">
-						<el-table :data="fields" border>
-							<el-table-column prop="name" label="字段" align="center">
-							</el-table-column>
-							<el-table-column prop="remark" label="描述" min-width="150" align="center">
-							</el-table-column>
-							<el-table-column prop="jdbcType" label="类型" width="150" align="center">
-							</el-table-column>
-							<el-table-column prop="length" label="长度" width="80" align="center">
-							</el-table-column>
-							<el-table-column prop="logicalKey" label="逻辑关键字" width="50" align="center">
-								<template slot-scope="{row}">
-									<el-checkbox v-model="row.logicalKey"></el-checkbox>
-								</template>
-							</el-table-column>
-							<el-table-column prop="required" label="必填" width="50" align="center">
-								<template slot-scope="{row}">
-									<el-checkbox v-model="row.required"></el-checkbox>
-								</template>
-							</el-table-column>
-							<el-table-column prop="validate" label="校验" width="50" align="center">
-								<template slot-scope="{row}">
-									<el-checkbox v-model="row.validate"></el-checkbox>
-								</template>
-							</el-table-column>
-							<el-table-column prop="minLength" label="最短" width="80" align="center">
-								<template slot-scope="{row}">
-									<el-input v-model.number="row.minLength"></el-input>
-								</template>
-							</el-table-column>
-							<el-table-column prop="maxLength" label="最长" width="80" align="center">
-								<template slot-scope="{row}">
-									<el-input v-model.number="row.maxLength"></el-input>
-								</template>
-							</el-table-column>
-							<el-table-column prop="min" label="最小值" width="80" align="center">
-								<template slot-scope="{row}">
-									<el-input v-model="row.min"></el-input>
-								</template>
-							</el-table-column>
-							<el-table-column prop="max" label="最大值" width="80" align="center">
-								<template slot-scope="{row}">
-									<el-input v-model="row.max"></el-input>
-								</template>
-							</el-table-column>
-							<el-table-column prop="validatorType" label="校验类型" width="150" align="center">
-								<template slot-scope="{row}">
-									<el-select v-model="row.validatorType" clearable>
-										<el-option v-for="item in validatorTypes" :label="item.label" :value="item.value" :key="item.value"></el-option>
-									</el-select>
-								</template>
-							</el-table-column>
-						</el-table>
-					</el-tab-pane>
-					<el-tab-pane label="子表" name="4">
-						<el-table :data="subtables" border>
-
-							<el-table-column prop="name" label="控件名" width="150" align="center">
-								<template slot-scope="{row}">
-									<el-input v-model="row.name"></el-input>
-								</template>
-							</el-table-column>
-
-							<el-table-column prop="column" label="主表字段" width="150" align="center">
-								<template slot-scope="{row}">
-
-									<el-select v-model="row.column">
-
-										<el-option v-for="item in fields" :label="changeToCamelCase(item.name)" :value="changeToCamelCase(item.name)" :key="changeToCamelCase(item.name)"></el-option>
-									</el-select>
-
-								</template>
-							</el-table-column>
-
-							<el-table-column prop="subCode" label="子表类" width="150" align="center">
-								<template slot-scope="{row}">
-									<el-select v-model="row.subCode" clearable @change="changeSubCode">
-										<el-option v-for="item in subCodes" :label="item.className" :value="item.className" :key="item.className"></el-option>
-									</el-select>
-								</template>
-							</el-table-column>
-
-							<el-table-column prop="subColumn" label="子表字段" width="150" align="center">
-								<template slot-scope="{row}">
-
-									<el-select v-model="row.subColumn">
-
-										<el-option v-for="item in subColumnOptions" :label="changeToCamelCase(item.name)" :value="changeToCamelCase(item.name)" :key="changeToCamelCase(item.name)"></el-option>
-									</el-select>
-								</template>
-							</el-table-column>
-
-							<el-table-column width="60" align="center">
-								<template slot-scope="{ row, column, $index }">
-									<el-button @click="removeSubtable($index)" size="small" type="text">删除</el-button>
-								</template>
-							</el-table-column>
-						</el-table>
-						<el-button @click="addSubtable" type="text" icon="el-icon-plus">添加</el-button>
-					</el-tab-pane>
-					<el-tab-pane label="排序" name="5">
-						<el-table :data="tableSortFields" border>
-
-							<el-table-column prop="name" label="字段" align="center">
-								<template slot-scope="{row}">
-									<el-select v-model="row.name">
-
-										<el-option v-for="item in fields" :label="item.name" :value="item.name" :key="item.name"></el-option>
-									</el-select>
-								</template>
-							</el-table-column>
-							<el-table-column prop="order" label="排序" align="center">
-								<template slot-scope="{row}">
-									<el-select v-model="row.order">
-										<el-option label="降序" value="desc">
-										</el-option>
-										<el-option label="升序" value="asc">
-										</el-option>
-									</el-select>
-								</template>
-							</el-table-column>
-							<el-table-column width="60" align="center">
-								<template slot-scope="{ row, column, $index }">
-									<el-button @click="removeSortField($index)" size="small" type="text">删除</el-button>
-								</template>
-							</el-table-column>
-						</el-table>
-						<el-button @click="addSortField" type="text" icon="el-icon-plus">添加</el-button>
-					</el-tab-pane>
-					<el-tab-pane label="默认条件" name="6">
-						<el-table :data="advancedQueryFields" border>
-
-							<el-table-column prop="link" label="链接符" align="center">
-								<template slot-scope="{row}">
-									<el-select placeholder="链接" size="small" v-model="row.link" class="filter-item">
-										<el-option label="AND" value="AND">
-										</el-option>
-										<el-option label="OR" value="OR">
-										</el-option>
-									</el-select>
-								</template>
-							</el-table-column>
-							<el-table-column prop="name" label="字段" align="center">
-								<template slot-scope="{row}">
-									<el-select v-model="row.name">
-
-										<el-option v-for="item in fields" :label="item.name" :value="item.name" :key="item.name"></el-option>
-									</el-select>
-								</template>
-							</el-table-column>
-							<el-table-column prop="searchMethod" label="搜索方式" width="150" align="center">
-								<template slot-scope="{row}">
-									<el-select v-model="row.searchMethod">
-										<el-option v-for="item in searchMethods" :label="item" :value="item" :key="item"></el-option>
-									</el-select>
-								</template>
-							</el-table-column>
-							<el-table-column prop="value" label="参数" align="center">
-								<template slot-scope="{row}">
-									<el-input v-model="row.value"></el-input>
-								</template>
-							</el-table-column>
-							<el-table-column prop="noChange" label="不可修改" width="50" align="center">
-								<template slot-scope="{row}">
-									<el-checkbox v-model="row.noChange"></el-checkbox>
-								</template>
-							</el-table-column>
-
-							<el-table-column width="60" align="center">
-								<template slot-scope="{ row, column, $index }">
-									<el-button @click="removeQueryField($index)" size="small" type="text">删除</el-button>
-								</template>
-							</el-table-column>
-						</el-table>
-
-						<el-button @click="addQueryField" type="text" icon="el-icon-plus">添加</el-button>
-					</el-tab-pane>
-
-				</el-tabs>
-
-			</el-form-item>
-			<el-form-item>
-				<el-button @click="onSave" :loading="$store.state.fetchingData" type="primary">保存</el-button>
-				<el-button @click="$router.go(-1)">取消</el-button>
-			</el-form-item>
-		</el-form>
-
-		<el-dialog title="接口选项" :visible.sync="showSelectDialog">
-			<el-form :model="selectField">
-				<el-form-item label="接口">
-					<el-select placeholder="接口" size="small" filterable clearable v-model="selectField.optionsMethod" class="filter-item">
-						<el-option v-for="item in selectMappings" :label="item.url" :value="item.url" :key="item.url"></el-option>
-					</el-select>
-				</el-form-item>
-				<el-form-item label="显示">
-					<el-select v-if="selectField.optionsMethod&&selectField.apiFlag=='2'" filterable clearable placeholder="显示" size="small" v-model="selectField.optionsLabel" class="filter-item">
-						<el-option v-for="item in selectMappingsJson[selectField.optionsMethod].fileds.split(',')" :label="item" :value="item" :key="item"></el-option>
-					</el-select>
-				</el-form-item>
-				<el-form-item label="选项">
-					<el-select v-if="selectField.optionsMethod&&selectField.apiFlag=='2'" filterable clearable placeholder="选项" size="small" v-model="selectField.optionsValue" class="filter-item">
-						<el-option v-for="item in selectMappingsJson[selectField.optionsMethod].fileds.split(',')" :label="item" :value="item" :key="item"></el-option>
-					</el-select>
-				</el-form-item>
-				<el-form-item>
-					<el-button type="primary" @click="selectMappingSubmit">确定</el-button>
-				</el-form-item>
-			</el-form>
-
-		</el-dialog>
-
-		<el-dialog title="表选项" :visible.sync="showTableSelectDialog">
-			<el-form :model="selectField">
-				<el-form-item label="库类型">
-					<el-select placeholder="库类型" size="small" filterable clearable v-model="selectField.optionsDataBaseType" @change="changeOptionsDataBaseType" class="filter-item">
-						<el-option label="Mysql" value="Mysql">
-						</el-option>
-						<el-option label="SqlServer" value="SqlServer">
-						</el-option>
-					</el-select>
-				</el-form-item>
-				<el-form-item label="数据库">
-
-					<el-select placeholder="数据库" size="small" filterable clearable v-model="selectField.optionsDataSourceCode" @change="changeOptionsDataSourceCode" class="filter-item">
-						<el-option v-for="item in optionsDatasourceInfoList" :label="item.databaseName" :value="item.code" :key="item.code"></el-option>
-					</el-select>
-
-				</el-form-item>
-
-				<el-form-item label="表名">
-
-					<el-select placeholder="表名" size="small" clearable filterable v-model="selectField.optionsMethod" @change="changeOptionsTableName" class="filter-item">
-						<el-option v-for="item in optionsTableList" :label="item" :value="item" :key="item"></el-option>
-					</el-select>
-
-				</el-form-item>
-
-				<el-form-item label="显示">
-					<el-select v-if="selectField.optionsMethod&&selectField.apiFlag=='3'" filterable clearable placeholder="显示" size="small" v-model="selectField.optionsLabel" class="filter-item">
-						<el-option v-for="item in optionsFields" :label="item.name" :value="item.name" :key="item.name"></el-option>
-					</el-select>
-				</el-form-item>
-
-				<el-form-item label="选项">
-					<el-select v-if="selectField.optionsMethod&&selectField.apiFlag=='3'" filterable clearable placeholder="选项" size="small" v-model="selectField.optionsValue" class="filter-item">
-						<el-option v-for="item in optionsFields" :label="item.name" :value="item.name" :key="item.name"></el-option>
-					</el-select>
-				</el-form-item>
-				<el-form-item>
-					<el-button type="primary" @click="selectMappingSubmit">确定</el-button>
-				</el-form-item>
-			</el-form>
-
-		</el-dialog>
-
-		<el-dialog title="调整顺序" :visible.sync="changeRankDialog">
-			<div class="color-item" v-for="color in fields" v-dragging="{ item: color, list: fields, group: 'color' }" :key="color.name">{{color.name}}——{{color.remark}}</div>
-		</el-dialog>
-
-	</div>
+                        </el-table>
+                    </el-tab-pane>
+                    <el-tab-pane label="表单校验" name="3">
+                        <el-table :data="fields" border>
+                            <el-table-column prop="name" label="字段" align="center">
+                            </el-table-column>
+                            <el-table-column prop="remark" label="描述" min-width="150" align="center">
+                            </el-table-column>
+                            <el-table-column prop="jdbcType" label="类型" width="150" align="center">
+                            </el-table-column>
+                            <el-table-column prop="length" label="长度" width="80" align="center">
+                            </el-table-column>
+                            <el-table-column prop="logicalKey" label="逻辑关键字" width="50" align="center">
+                                <template slot-scope="{row}">
+                                    <el-checkbox v-model="row.logicalKey"></el-checkbox>
+                                </template>
+                            </el-table-column>
+                            <el-table-column prop="required" label="必填" width="50" align="center">
+                                <template slot-scope="{row}">
+                                    <el-checkbox v-model="row.required"></el-checkbox>
+                                </template>
+                            </el-table-column>
+                            <el-table-column prop="validate" label="校验" width="50" align="center">
+                                <template slot-scope="{row}">
+                                    <el-checkbox v-model="row.validate"></el-checkbox>
+                                </template>
+                            </el-table-column>
+                            <el-table-column prop="minLength" label="最短" width="80" align="center">
+                                <template slot-scope="{row}">
+                                    <el-input v-model.number="row.minLength"></el-input>
+                                </template>
+                            </el-table-column>
+                            <el-table-column prop="maxLength" label="最长" width="80" align="center">
+                                <template slot-scope="{row}">
+                                    <el-input v-model.number="row.maxLength"></el-input>
+                                </template>
+                            </el-table-column>
+                            <el-table-column prop="min" label="最小值" width="80" align="center">
+                                <template slot-scope="{row}">
+                                    <el-input v-model="row.min"></el-input>
+                                </template>
+                            </el-table-column>
+                            <el-table-column prop="max" label="最大值" width="80" align="center">
+                                <template slot-scope="{row}">
+                                    <el-input v-model="row.max"></el-input>
+                                </template>
+                            </el-table-column>
+                            <el-table-column prop="validatorType" label="校验类型" width="150" align="center">
+                                <template slot-scope="{row}">
+                                    <el-select v-model="row.validatorType" clearable>
+                                        <el-option v-for="item in validatorTypes" :label="item.label" :value="item.value" :key="item.value"></el-option>
+                                    </el-select>
+                                </template>
+                            </el-table-column>
+                        </el-table>
+                    </el-tab-pane>
+                    <el-tab-pane label="子表" name="4">
+                        <el-table :data="subtables" border>
+
+                            <el-table-column prop="name" label="控件名" width="150" align="center">
+                                <template slot-scope="{row}">
+                                    <el-input v-model="row.name"></el-input>
+                                </template>
+                            </el-table-column>
+
+                            <el-table-column prop="column" label="主表字段" width="150" align="center">
+                                <template slot-scope="{row}">
+
+                                    <el-select v-model="row.column">
+
+                                        <el-option v-for="item in fields" :label="changeToCamelCase(item.name)" :value="changeToCamelCase(item.name)" :key="changeToCamelCase(item.name)"></el-option>
+                                    </el-select>
+
+                                </template>
+                            </el-table-column>
+
+                            <el-table-column prop="subCode" label="子表类" width="150" align="center">
+                                <template slot-scope="{row}">
+                                    <el-select v-model="row.subCode" clearable @change="changeSubCode">
+                                        <el-option v-for="item in subCodes" :label="item.className" :value="item.className" :key="item.className"></el-option>
+                                    </el-select>
+                                </template>
+                            </el-table-column>
+
+                            <el-table-column prop="subColumn" label="子表字段" width="150" align="center">
+                                <template slot-scope="{row}">
+
+                                    <el-select v-model="row.subColumn">
+
+                                        <el-option v-for="item in subColumnOptions" :label="changeToCamelCase(item.name)" :value="changeToCamelCase(item.name)" :key="changeToCamelCase(item.name)"></el-option>
+                                    </el-select>
+                                </template>
+                            </el-table-column>
+
+                            <el-table-column width="60" align="center">
+                                <template slot-scope="{ row, column, $index }">
+                                    <el-button @click="removeSubtable($index)" size="small" type="text">删除</el-button>
+                                </template>
+                            </el-table-column>
+                        </el-table>
+                        <el-button @click="addSubtable" type="text" icon="el-icon-plus">添加</el-button>
+                    </el-tab-pane>
+                    <el-tab-pane label="排序" name="5">
+                        <el-table :data="tableSortFields" border>
+
+                            <el-table-column prop="name" label="字段" align="center">
+                                <template slot-scope="{row}">
+                                    <el-select v-model="row.name">
+
+                                        <el-option v-for="item in fields" :label="item.name" :value="item.name" :key="item.name"></el-option>
+                                    </el-select>
+                                </template>
+                            </el-table-column>
+                            <el-table-column prop="order" label="排序" align="center">
+                                <template slot-scope="{row}">
+                                    <el-select v-model="row.order">
+                                        <el-option label="降序" value="desc">
+                                        </el-option>
+                                        <el-option label="升序" value="asc">
+                                        </el-option>
+                                    </el-select>
+                                </template>
+                            </el-table-column>
+                            <el-table-column width="60" align="center">
+                                <template slot-scope="{ row, column, $index }">
+                                    <el-button @click="removeSortField($index)" size="small" type="text">删除</el-button>
+                                </template>
+                            </el-table-column>
+                        </el-table>
+                        <el-button @click="addSortField" type="text" icon="el-icon-plus">添加</el-button>
+                    </el-tab-pane>
+                    <el-tab-pane label="默认条件" name="6">
+                        <el-table :data="advancedQueryFields" border>
+
+                            <el-table-column prop="link" label="链接符" align="center">
+                                <template slot-scope="{row}">
+                                    <el-select placeholder="链接" size="small" v-model="row.link" class="filter-item">
+                                        <el-option label="AND" value="AND">
+                                        </el-option>
+                                        <el-option label="OR" value="OR">
+                                        </el-option>
+                                    </el-select>
+                                </template>
+                            </el-table-column>
+                            <el-table-column prop="name" label="字段" align="center">
+                                <template slot-scope="{row}">
+                                    <el-select v-model="row.name">
+
+                                        <el-option v-for="item in fields" :label="item.name" :value="item.name" :key="item.name"></el-option>
+                                    </el-select>
+                                </template>
+                            </el-table-column>
+                            <el-table-column prop="searchMethod" label="搜索方式" width="150" align="center">
+                                <template slot-scope="{row}">
+                                    <el-select v-model="row.searchMethod">
+                                        <el-option v-for="item in searchMethods" :label="item" :value="item" :key="item"></el-option>
+                                    </el-select>
+                                </template>
+                            </el-table-column>
+                            <el-table-column prop="value" label="参数" align="center">
+                                <template slot-scope="{row}">
+                                    <el-input v-model="row.value"></el-input>
+                                </template>
+                            </el-table-column>
+                            <el-table-column prop="noChange" label="不可修改" width="50" align="center">
+                                <template slot-scope="{row}">
+                                    <el-checkbox v-model="row.noChange"></el-checkbox>
+                                </template>
+                            </el-table-column>
+
+                            <el-table-column width="60" align="center">
+                                <template slot-scope="{ row, column, $index }">
+                                    <el-button @click="removeQueryField($index)" size="small" type="text">删除</el-button>
+                                </template>
+                            </el-table-column>
+                        </el-table>
+
+                        <el-button @click="addQueryField" type="text" icon="el-icon-plus">添加</el-button>
+                    </el-tab-pane>
+
+                </el-tabs>
+
+            </el-form-item>
+            <el-form-item>
+                <el-button @click="onSave" :loading="$store.state.fetchingData" type="primary">保存</el-button>
+                <el-button @click="$router.go(-1)">取消</el-button>
+            </el-form-item>
+        </el-form>
+
+        <el-dialog title="接口选项" :visible.sync="showSelectDialog">
+            <el-form :model="selectField">
+                <el-form-item label="接口">
+                    <el-select placeholder="接口" size="small" filterable clearable v-model="selectField.optionsMethod" class="filter-item">
+                        <el-option v-for="item in selectMappings" :label="item.url" :value="item.url" :key="item.url"></el-option>
+                    </el-select>
+                </el-form-item>
+                <el-form-item label="显示">
+                    <el-select v-if="selectField.optionsMethod&&selectField.apiFlag=='2'" filterable clearable placeholder="显示" size="small" v-model="selectField.optionsLabel" class="filter-item">
+                        <el-option v-for="item in selectMappingsJson[selectField.optionsMethod].fileds.split(',')" :label="item" :value="item" :key="item"></el-option>
+                    </el-select>
+                </el-form-item>
+                <el-form-item label="选项">
+                    <el-select v-if="selectField.optionsMethod&&selectField.apiFlag=='2'" filterable clearable placeholder="选项" size="small" v-model="selectField.optionsValue" class="filter-item">
+                        <el-option v-for="item in selectMappingsJson[selectField.optionsMethod].fileds.split(',')" :label="item" :value="item" :key="item"></el-option>
+                    </el-select>
+                </el-form-item>
+                <el-form-item>
+                    <el-button type="primary" @click="selectMappingSubmit">确定</el-button>
+                </el-form-item>
+            </el-form>
+
+        </el-dialog>
+
+        <el-dialog title="表选项" :visible.sync="showTableSelectDialog">
+            <el-form :model="selectField">
+                <el-form-item label="库类型">
+                    <el-select placeholder="库类型" size="small" filterable clearable v-model="selectField.optionsDataBaseType" @change="changeOptionsDataBaseType" class="filter-item">
+                        <el-option label="Mysql" value="Mysql">
+                        </el-option>
+                        <el-option label="SqlServer" value="SqlServer">
+                        </el-option>
+                    </el-select>
+                </el-form-item>
+                <el-form-item label="数据库">
+
+                    <el-select placeholder="数据库" size="small" filterable clearable v-model="selectField.optionsDataSourceCode" @change="changeOptionsDataSourceCode" class="filter-item">
+                        <el-option v-for="item in optionsDatasourceInfoList" :label="item.databaseName" :value="item.code" :key="item.code"></el-option>
+                    </el-select>
+
+                </el-form-item>
+
+                <el-form-item label="表名">
+
+                    <el-select placeholder="表名" size="small" clearable filterable v-model="selectField.optionsMethod" @change="changeOptionsTableName" class="filter-item">
+                        <el-option v-for="item in optionsTableList" :label="item" :value="item" :key="item"></el-option>
+                    </el-select>
+
+                </el-form-item>
+
+                <el-form-item label="显示">
+                    <el-select v-if="selectField.optionsMethod&&selectField.apiFlag=='3'" filterable clearable placeholder="显示" size="small" v-model="selectField.optionsLabel" class="filter-item">
+                        <el-option v-for="item in optionsFields" :label="item.name" :value="item.name" :key="item.name"></el-option>
+                    </el-select>
+                </el-form-item>
+
+                <el-form-item label="选项">
+                    <el-select v-if="selectField.optionsMethod&&selectField.apiFlag=='3'" filterable clearable placeholder="选项" size="small" v-model="selectField.optionsValue" class="filter-item">
+                        <el-option v-for="item in optionsFields" :label="item.name" :value="item.name" :key="item.name"></el-option>
+                    </el-select>
+                </el-form-item>
+                <el-form-item>
+                    <el-button type="primary" @click="selectMappingSubmit">确定</el-button>
+                </el-form-item>
+            </el-form>
+
+        </el-dialog>
+
+        <el-dialog title="调整顺序" :visible.sync="changeRankDialog" >
+            <div class="colorList">
+                <div class="color-item" v-for="color in fields" v-dragging="{ item: color, list: fields, group: 'color' }" :key="color.name">{{color.name}}——{{color.remark}}</div>
+
+            </div>
+        </el-dialog>
+
+    </div>
 </template>
 
 <script>
 import axios from 'axios';
 
 export default {
-	created() {
-		if (this.$route.query.id) {
-			this.loading = true;
-			this.$http.get({
-				url: '/genCode/getOne',
-				data: {
-					id: this.$route.query.id
-				}
-			}).then(res => {
-				this.loading = false;
-				if (res.success) {
-
-					res.data.genJson = JSON.parse(res.data.genJson)
-					// console.log(res.data.genJson)
-					res.data.genJson.modules = res.data.genJson.modules ? (res.data.genJson.modules.split(',').map(i => String(i))) : [];
-
-					this.formData = {
-						...this.formData,
-						...res.data.genJson
-					};
-
-					this.fields = this.formData.fields;
-					this.formData.id = res.data.id;
-					this.formData.genRouter = false;
-					this.subtables = this.formData.subtables;
-					this.tableSortFields = this.formData.tableSortFields;
-					this.advancedQueryFields = this.formData.advancedQueryFields;
-				}
-			}).catch(e => this.loading = false)
-		}
-
-		this.$http.get({
-			url: '/genCode/getSrcPath'
-		}).then(res => {
-			if (res.success) {
-				this.formData.rootPath = res.data.root;
-				this.formData.javaPathRelative = res.data.javaPath;
-				this.formData.viewPathRelative = res.data.viewPath;
-				this.formData.routerPathRelative = res.data.routerPath;
-			}
-		});
-		this.$http.get({
-			url: '/dataSourceInfo/all'
-		}).then(res => {
-			if (res.success) {
-				this.MysqlDataSourceInfos.push(this.baseDataSource);
-
-				if (res.data.length > 0) {
-					res.data.forEach(item => {
-						if ('Mysql' == item.databaseType) {
-							this.MysqlDataSourceInfos.push(item);
-						} else if ('SqlServer' == item.databaseType) {
-							this.SqlServerDataSourceInfos.push(item);
-						}
-					})
-				}
-				this.datasourceInfoList = this.MysqlDataSourceInfos;
-			}
-		});
-		this.$http.get({
-			url: '/genCode/all'
-		}).then(res => {
-			if (res.success) {
-				this.subCodes = res.data;
-			}
-		});
-
-		this.$http.get({
-			url: '/dev/selectMappings'
-		}).then(res => {
-			if (res.success) {
-				if (res.data.length > 0) {
-					var temp = {}
-					res.data.forEach(item => {
-						temp[item.url] = item
-					})
-				}
-				this.selectMappingsJson = temp;
-				this.selectMappings = res.data;
-			}
-		});
-
-
-		this.getDatabaseTables();
-
-
-	},
-	data() {
-		return {
-			loading: false,
-			fieldTypes: ['char', 'varchar', 'int', 'text', 'timestamp', 'datetime', 'decimal', 'float', 'vue'],
-			searchMethods: ['=', '!=', '>', '>=', '<', '<=', 'between', 'like', 'left like', 'right like'],
-			formTypes: [
-
-				{ label: '单行文本', value: 'singleLineText' },
-				{ label: '数字', value: 'number' },
-				{ label: '日期选择', value: 'date' },
-				{ label: '日期时间选择', value: 'datetime' },
-				{ label: '登录名', value: 'loginName' },
-				{ label: '工号', value: 'workNumber' },
-				{ label: '部门', value: 'departId' },
-				{ label: '当前时间', value: 'currentTime' },
-				{ label: '当前日期', value: 'currentDate' },
-				{ label: '单选下拉框', value: 'select' },
-				{ label: '多选下拉框', value: 'multiSelect' },
-				{ label: '单图上传', value: 'singleImage' },
-				{ label: '多图上传', value: 'multiImage' },
-				{ label: '文件上传', value: 'fileUpload' },
-				{ label: '树形选择', value: 'tree' },
-				{ label: '开关', value: 'switch' },
-				{ label: '多行文本', value: 'textarea' },
-				{ label: '富文本', value: 'richText' },
-			],
-			validatorTypes: [
-				{ label: '英文', value: 'english' },
-				{ label: '数字', value: 'number' },
-				{ label: '手机', value: 'phone' },
-				{ label: '网址', value: 'url' },
-				{ label: '电子邮件', value: 'email' },
-				{ label: '身份证', value: 'id' }
-			],
-			rules: {
-				className: [
-					{ required: true, message: '请填写类名', trigger: 'blur' },
-					{
-						validator: (rule, value, callback) => {
-							if (value) {
-								if (/^[\u4e00-\u9fa5a-zA-Z0-9_]*$/.test(value)) {
-									callback();
-								} else {
-									callback(new Error('类名不正确'));
-								}
-							}
-						}, trigger: 'blur'
-					}
-				],
-				tableName: [
-					{ required: true, message: '请填写表名', trigger: 'blur' },
-					{
-						validator: (rule, value, callback) => {
-							if (value) {
-								if (/^[\u4e00-\u9fa5a-zA-Z0-9_]*$/.test(value)) {
-									callback();
-								} else {
-									callback(new Error('表名不正确'));
-								}
-							}
-						}, trigger: 'blur'
-					}
-				],
-				remark: [{ required: true, message: '请填写描述', trigger: 'blur' }],
-				rootPath: [{ required: true, message: '请填写生成目录', trigger: 'blur' }],
-				dataBaseType: [{ required: true, message: '请选择数据库类型', trigger: 'blur' }],
-				dataSourceCode: [{ required: true, message: '请填选择数据库', trigger: 'blur' }],
-				typeFlag: [{ required: true, message: '请填填写分类', trigger: 'blur' }],
-				modules: [
-					{ required: true, message: '请选择功能', trigger: 'blur' },
-				],
-			},
-			formData: {
-				tableName: '',
-				remark: '',
-				genTable: true,
-				genClass: true,
-				genList: true,
-				genForm: true,
-				genRouter: true,
-				rootPath: '',
-				javaPathRelative: '',
-				viewPathRelative: '',
-				dataBaseType: 'Mysql',
-				readTable: false,
-				dataSourceCode: 'dataSource',
-				className: '',
-				subtables: [],
-				modules: [],
-				tableSortFields: [],
-				advancedQueryFields: [],
-
-			},
-			fields: [
-				{
-					name: 'id',
-					jdbcType: 'int',
-					notNull: true,
-					primaryKey: true,
-					autoIncrease: true,
-					remark: '',
-					showInList: false,
-					showInForm: false,
-					searchable: false,
-					sortable: true
-				},
-				{
-					name: 'del_flag',
-					jdbcType: 'char',
-					notNull: true,
-					primaryKey: false,
-					autoIncrease: false,
-					remark: '删除标识',
-					showInList: false,
-					showInForm: false,
-					searchable: false,
-					defaultValue: 'N',
-					length: 1,
-					sortable: false
-				},
-			],
-			MysqlDataSourceInfos: [],
-			SqlServerDataSourceInfos: [],
-			baseDataSource: {
-				databaseType: 'Mysql',
-				code: 'dataSource',
-				databaseName: '基础数据库'
-
-			},
-			datasourceInfoList: [],
-			tableList: [],
-			subtables: [],
-			subCodes: [],
-			subColumnOptions: [],
-			selectMappings: [],
-			selectMappingsJson: {},
-			showSelectDialog: false,
-			selectField: {},
-			showTableSelectDialog: false,
-			optionsDatasourceInfoList: [],
-			optionsTableList: [],
-			optionsFields: [],
-			tableSortFields: [],
-			advancedQueryFields: [],
-			multipleMode: false,
-			changeRankDialog: false,
-		}
-	},
-	computed: {
-		editableFields() {
-			return this.fields.filter(i => {
-				return i.name
-			});
-		},
-
-		selection() {
-			return this.$refs.fieldsTable.selection.map(i => i.name);
-		}
-
-
-	},
-	mounted() {
-		this.$dragging.$on('dragged', ({ value }) => {
-			console.log(value.item)
-			console.log(value.list)
-			console.log(value.otherData)
-		})
-	},
-	methods: {
-		onSave() {
-			this.$refs.form.validate((valid) => {
-				if (valid) {
-					this.submit();
-				} else {
-					return false;
-				}
-			});
-		},
-		submit() {
-
-			this.formData.fields = this.fields;
-			this.formData.subtables = this.subtables;
-			this.formData.tableSortFields = this.tableSortFields;
-			this.formData.advancedQueryFields = this.advancedQueryFields;
-			this.formData.javaPath = this.formData.rootPath + this.formData.javaPathRelative;
-			this.formData.viewPath = this.formData.rootPath + this.formData.viewPathRelative;
-			this.formData.routerPath = this.formData.rootPath + this.formData.routerPathRelative;
-			this.formData.genJson = '';
-			this.formData.modules = this.formData.modules.join();
-
-			this.$alert('生成代码可能会删除已有同名表、数据或文件,确认要生成么?', '警告', { type: 'error' }).then(() => {
-				this.loading = true;
-				return axios.post(this.formData.id ? '/genCode/update' : '/genCode/save', this.formData)
-			}).then(() => {
-				this.loading = false;
-				this.$message.success('代码生成成功');
-				this.$router.go(-1);
-			}).catch(res => {
-				this.loading = false;
-				if ('cancel' === res) {
-					this.$msgbox({ title: '提示', type: 'error', message: '生成取消' });
-				} else {
-					this.$msgbox({ title: '提示', type: 'error', message: '生成失败' });
-				}
-			})
-		},
-		addField() {
-			this.fields.push({
-				name: '',
-				jdbcType: 'varchar',
-				notNull: false,
-				primaryKey: false,
-				autoIncrease: false,
-				remark: '',
-				showInList: true,
-				showInForm: true,
-				searchable: true,
-				formType: 'singleLineText',
-				sortable: true
-			});
-		},
-		removeField(i) {
-			if (this.fields.length > 0) {
-				this.fields.splice(i, 1);
-			}
-		},
-		removeFieldByName(name) {
-			var that = this;
-			that.fields.forEach(function (value, index) {
-				//只有为true时才删除
-				if (value.name === name) {
-					that.fields.splice(index, 1);
-					// console.log(index);
-				}
-			});
-		},
-
-		updateReadTable() {
-			this.formData.readTable = !this.formData.readTable;
-			this.formData.genTable = !this.formData.readTable;
-		},
-		changeDataBaseType() {
-			if ('Mysql' == this.formData.dataBaseType) {
-				this.datasourceInfoList = this.MysqlDataSourceInfos;
-				this.formData.dataSourceCode = 'dataSource';
-				this.getDatabaseTables();
-			} else if ('SqlServer' == this.formData.dataBaseType) {
-				this.datasourceInfoList = this.SqlServerDataSourceInfos;
-				this.formData.dataSourceCode = '';
-			}
-		},
-		changeOptionsDataBaseType() {
-			if ('Mysql' == this.selectField.optionsDataBaseType) {
-				this.optionsDatasourceInfoList = this.MysqlDataSourceInfos;
-				this.selectField.optionsDataSourceCode = 'dataSource';
-				this.getOptionsDatabaseTables();
-			} else if ('SqlServer' == this.selectField.optionsDataBaseType) {
-				this.optionsDatasourceInfoList = this.SqlServerDataSourceInfos;
-				this.selectField.optionsDataSourceCode = '';
-			}
-		},
-		getDatabaseTables(code) {
-			this.tableList = [];
-			this.$http.get({
-				url: '/genCode/tables',
-				data: {
-					code: code
-				}
-			}).then(res => {
-				if (res.success) {
-
-					this.tableList = res.data;
-				}
-			})
-		},
-		getOptionsDatabaseTables(code) {
-			this.optionsTableList = [];
-			this.$http.get({
-				url: '/genCode/tables',
-				data: {
-					code: code
-				}
-			}).then(res => {
-				if (res.success) {
-
-					this.optionsTableList = res.data;
-				}
-			})
-		},
-		changeDataSourceCode() {
-			if (this.formData.readTable) {
-
-				this.formData.tableName = '';
-				this.getDatabaseTables(this.formData.dataSourceCode);
-			}
-		},
-		changeOptionsDataSourceCode() {
-
-			this.getOptionsDatabaseTables(this.selectField.optionsDataSourceCode);
-		},
-		changeTableName() {
-			if (this.formData.readTable) {
-
-				this.fields = [];
-
-				this.getTableFields(this.formData.tableName);
-			}
-		},
-		changeOptionsTableName() {
-
-			this.optionsFields = [];
-
-			this.getOptionsTableFields(this.selectField.optionsMethod);
-		},
-		getTableFields(tableName) {
-			this.$http.get({
-				url: '/genCode/tableFields',
-				data: {
-					code: this.formData.dataSourceCode,
-					tableName: tableName,
-					databaseType: this.formData.dataBaseType,
-				}
-			}).then(res => {
-				if (res.success) {
-
-					this.fields = res.data;
-				}
-			})
-		},
-		getOptionsTableFields(tableName) {
-			this.$http.get({
-				url: '/genCode/tableFields',
-				data: {
-					code: this.selectField.optionsDataSourceCode,
-					tableName: tableName,
-					databaseType: this.selectField.optionsDataBaseType,
-				}
-			}).then(res => {
-				if (res.success) {
-
-					this.optionsFields = res.data;
-				}
-			})
-		},
-		addSubtable() {
-			this.subtables.push({
-				name: '',
-				column: '',
-				subColumn: '',
-				subCode: '',
-			});
-		},
-		removeSubtable(i) {
-			if (this.subtables.length > 0) {
-				this.subtables.splice(i, 1);
-			}
-		},
-
-		moveUp(i) {
-			if (i > 0) {
-
-				var tempFields = [...this.fields];
-				var tempField = tempFields[i - 1];
-
-
-				tempFields[i - 1] = tempFields[i];
-				tempFields[i] = tempField;
-
-				this.fields = tempFields;
-
-
-
-			}
-		},
-
-		moveDown(i) {
-			if (this.fields.length - 1 > i) {
-
-				var tempFields = [...this.fields];
-
-				var tempField = tempFields[i + 1];
-
-
-				tempFields[i + 1] = tempFields[i];
-				tempFields[i] = tempField;
-
-				this.fields = tempFields;
-
-
-
-			}
-
-		},
-		editSelectField(row) {
-			this.selectField = row;
-
-			if (row.apiFlag == '2') {
-
-				this.showSelectDialog = true;
-			} else if (row.apiFlag == '3') {
-				this.showTableSelectDialog = true;
-			}
-		},
-		optionsInfo(row) {
-			var value = '';
-			if (row.apiFlag == '1') {
-				value = row.optionsValue;
-			} else if (row.apiFlag == '2') {
-
-				value = row.optionsMethod + ',' + row.optionsLabel + ',' + row.optionsValue;
-			} else if (row.apiFlag == '3') {
-				value = row.optionsMethod + ',' + row.optionsLabel + ',' + row.optionsValue;
-			}
-			return value;
-		},
-		selectMappingSubmit() {
-
-			if (this.selectField.apiFlag == '2') {
-
-				this.showSelectDialog = false;
-			} else if (this.selectField.apiFlag == '3') {
-				this.showTableSelectDialog = false;
-			}
-
-
-		},
-		addSortField() {
-			this.tableSortFields.push({
-				name: '',
-				order: 'asc',
-			});
-		},
-		removeSortField(i) {
-			if (this.tableSortFields.length > 0) {
-				this.tableSortFields.splice(i, 1);
-			}
-		},
-		addQueryField() {
-			this.advancedQueryFields.push({
-				link: 'AND',
-				name: '',
-				searchMethod: '=',
-				value: '',
-			});
-		},
-		removeQueryField(i) {
-			if (this.advancedQueryFields.length > 0) {
-				this.advancedQueryFields.splice(i, 1);
-			}
-		},
-		changeToCamelCase(value) {
-			if (value) {
-				var a = value.split("_");
-				var o = a[0];
-				for (var i = 1; i < a.length; i++) {
-					o = o + a[i].slice(0, 1).toUpperCase() + a[i].slice(1);
-				}
+    created() {
+        if (this.$route.query.id) {
+            this.loading = true;
+            this.$http.get({
+                url: '/genCode/getOne',
+                data: {
+                    id: this.$route.query.id
+                }
+            }).then(res => {
+                this.loading = false;
+                if (res.success) {
+
+                    res.data.genJson = JSON.parse(res.data.genJson)
+                    // console.log(res.data.genJson)
+                    res.data.genJson.modules = res.data.genJson.modules ? (res.data.genJson.modules.split(',').map(i => String(i))) : [];
+
+                    this.formData = {
+                        ...this.formData,
+                        ...res.data.genJson
+                    };
+
+                    this.fields = this.formData.fields;
+                    this.formData.id = res.data.id;
+                    this.formData.genRouter = false;
+                    this.subtables = this.formData.subtables;
+                    this.tableSortFields = this.formData.tableSortFields;
+                    this.advancedQueryFields = this.formData.advancedQueryFields;
+                }
+            }).catch(e => this.loading = false)
+        }
+
+        this.$http.get({
+            url: '/genCode/getSrcPath'
+        }).then(res => {
+            if (res.success) {
+                this.formData.rootPath = res.data.root;
+                this.formData.javaPathRelative = res.data.javaPath;
+                this.formData.viewPathRelative = res.data.viewPath;
+                this.formData.routerPathRelative = res.data.routerPath;
+            }
+        });
+        this.$http.get({
+            url: '/dataSourceInfo/all'
+        }).then(res => {
+            if (res.success) {
+                this.MysqlDataSourceInfos.push(this.baseDataSource);
+
+                if (res.data.length > 0) {
+                    res.data.forEach(item => {
+                        if ('Mysql' == item.databaseType) {
+                            this.MysqlDataSourceInfos.push(item);
+                        } else if ('SqlServer' == item.databaseType) {
+                            this.SqlServerDataSourceInfos.push(item);
+                        }
+                    })
+                }
+                this.datasourceInfoList = this.MysqlDataSourceInfos;
+            }
+        });
+        this.$http.get({
+            url: '/genCode/all'
+        }).then(res => {
+            if (res.success) {
+                this.subCodes = res.data;
+            }
+        });
+
+        this.$http.get({
+            url: '/dev/selectMappings'
+        }).then(res => {
+            if (res.success) {
+                if (res.data.length > 0) {
+                    var temp = {}
+                    res.data.forEach(item => {
+                        temp[item.url] = item
+                    })
+                }
+                this.selectMappingsJson = temp;
+                this.selectMappings = res.data;
+            }
+        });
+
+
+        this.getDatabaseTables();
+
+
+    },
+    data() {
+        return {
+            loading: false,
+            fieldTypes: ['char', 'varchar', 'int', 'text', 'timestamp', 'datetime', 'decimal', 'float', 'vue'],
+            searchMethods: ['=', '!=', '>', '>=', '<', '<=', 'between', 'like', 'left like', 'right like'],
+            formTypes: [
+
+                { label: '单行文本', value: 'singleLineText' },
+                { label: '数字', value: 'number' },
+                { label: '日期选择', value: 'date' },
+                { label: '日期时间选择', value: 'datetime' },
+                { label: '登录名', value: 'loginName' },
+                { label: '工号', value: 'workNumber' },
+                { label: '部门', value: 'departId' },
+                { label: '当前时间', value: 'currentTime' },
+                { label: '当前日期', value: 'currentDate' },
+                { label: '单选下拉框', value: 'select' },
+                { label: '多选下拉框', value: 'multiSelect' },
+                { label: '单图上传', value: 'singleImage' },
+                { label: '多图上传', value: 'multiImage' },
+                { label: '文件上传', value: 'fileUpload' },
+                { label: '树形选择', value: 'tree' },
+                { label: '开关', value: 'switch' },
+                { label: '多行文本', value: 'textarea' },
+                { label: '富文本', value: 'richText' },
+            ],
+            validatorTypes: [
+                { label: '英文', value: 'english' },
+                { label: '数字', value: 'number' },
+                { label: '手机', value: 'phone' },
+                { label: '网址', value: 'url' },
+                { label: '电子邮件', value: 'email' },
+                { label: '身份证', value: 'id' }
+            ],
+            rules: {
+                className: [
+                    { required: true, message: '请填写类名', trigger: 'blur' },
+                    {
+                        validator: (rule, value, callback) => {
+                            if (value) {
+                                if (/^[\u4e00-\u9fa5a-zA-Z0-9_]*$/.test(value)) {
+                                    callback();
+                                } else {
+                                    callback(new Error('类名不正确'));
+                                }
+                            }
+                        }, trigger: 'blur'
+                    }
+                ],
+                tableName: [
+                    { required: true, message: '请填写表名', trigger: 'blur' },
+                    {
+                        validator: (rule, value, callback) => {
+                            if (value) {
+                                if (/^[\u4e00-\u9fa5a-zA-Z0-9_]*$/.test(value)) {
+                                    callback();
+                                } else {
+                                    callback(new Error('表名不正确'));
+                                }
+                            }
+                        }, trigger: 'blur'
+                    }
+                ],
+                remark: [{ required: true, message: '请填写描述', trigger: 'blur' }],
+                rootPath: [{ required: true, message: '请填写生成目录', trigger: 'blur' }],
+                dataBaseType: [{ required: true, message: '请选择数据库类型', trigger: 'blur' }],
+                dataSourceCode: [{ required: true, message: '请填选择数据库', trigger: 'blur' }],
+                typeFlag: [{ required: true, message: '请填填写分类', trigger: 'blur' }],
+                modules: [
+                    { required: true, message: '请选择功能', trigger: 'blur' },
+                ],
+            },
+            formData: {
+                tableName: '',
+                remark: '',
+                genTable: true,
+                genClass: true,
+                genList: true,
+                genForm: true,
+                genRouter: true,
+                rootPath: '',
+                javaPathRelative: '',
+                viewPathRelative: '',
+                dataBaseType: 'Mysql',
+                readTable: false,
+                dataSourceCode: 'dataSource',
+                className: '',
+                subtables: [],
+                modules: [],
+                tableSortFields: [],
+                advancedQueryFields: [],
+
+            },
+            fields: [
+                {
+                    name: 'id',
+                    jdbcType: 'int',
+                    notNull: true,
+                    primaryKey: true,
+                    autoIncrease: true,
+                    remark: '',
+                    showInList: false,
+                    showInForm: false,
+                    searchable: false,
+                    sortable: true
+                },
+                {
+                    name: 'del_flag',
+                    jdbcType: 'char',
+                    notNull: true,
+                    primaryKey: false,
+                    autoIncrease: false,
+                    remark: '删除标识',
+                    showInList: false,
+                    showInForm: false,
+                    searchable: false,
+                    defaultValue: 'N',
+                    length: 1,
+                    sortable: false
+                },
+            ],
+            MysqlDataSourceInfos: [],
+            SqlServerDataSourceInfos: [],
+            baseDataSource: {
+                databaseType: 'Mysql',
+                code: 'dataSource',
+                databaseName: '基础数据库'
+
+            },
+            datasourceInfoList: [],
+            tableList: [],
+            subtables: [],
+            subCodes: [],
+            subColumnOptions: [],
+            selectMappings: [],
+            selectMappingsJson: {},
+            showSelectDialog: false,
+            selectField: {},
+            showTableSelectDialog: false,
+            optionsDatasourceInfoList: [],
+            optionsTableList: [],
+            optionsFields: [],
+            tableSortFields: [],
+            advancedQueryFields: [],
+            multipleMode: false,
+            changeRankDialog: false,
+        }
+    },
+    computed: {
+        editableFields() {
+            return this.fields.filter(i => {
+                return i.name
+            });
+        },
+
+        selection() {
+            return this.$refs.fieldsTable.selection.map(i => i.name);
+        }
+
+
+    },
+    mounted() {
+        this.$dragging.$on('dragged', ({ value }) => {
+            console.log(value.item)
+            console.log(value.list)
+            console.log(value.otherData)
+        })
+    },
+    methods: {
+        onSave() {
+            this.$refs.form.validate((valid) => {
+                if (valid) {
+                    this.submit();
+                } else {
+                    return false;
+                }
+            });
+        },
+        submit() {
+
+            this.formData.fields = this.fields;
+            this.formData.subtables = this.subtables;
+            this.formData.tableSortFields = this.tableSortFields;
+            this.formData.advancedQueryFields = this.advancedQueryFields;
+            this.formData.javaPath = this.formData.rootPath + this.formData.javaPathRelative;
+            this.formData.viewPath = this.formData.rootPath + this.formData.viewPathRelative;
+            this.formData.routerPath = this.formData.rootPath + this.formData.routerPathRelative;
+            this.formData.genJson = '';
+            this.formData.modules = this.formData.modules.join();
+
+            this.$alert('生成代码可能会删除已有同名表、数据或文件,确认要生成么?', '警告', { type: 'error' }).then(() => {
+                this.loading = true;
+                return axios.post(this.formData.id ? '/genCode/update' : '/genCode/save', this.formData)
+            }).then(() => {
+                this.loading = false;
+                this.$message.success('代码生成成功');
+                this.$router.go(-1);
+            }).catch(res => {
+                this.loading = false;
+                if ('cancel' === res) {
+                    this.$msgbox({ title: '提示', type: 'error', message: '生成取消' });
+                } else {
+                    this.$msgbox({ title: '提示', type: 'error', message: '生成失败' });
+                }
+            })
+        },
+        addField() {
+            this.fields.push({
+                name: '',
+                jdbcType: 'varchar',
+                notNull: false,
+                primaryKey: false,
+                autoIncrease: false,
+                remark: '',
+                showInList: true,
+                showInForm: true,
+                searchable: true,
+                formType: 'singleLineText',
+                sortable: true
+            });
+        },
+        removeField(i) {
+            if (this.fields.length > 0) {
+                this.fields.splice(i, 1);
+            }
+        },
+        removeFieldByName(name) {
+            var that = this;
+            that.fields.forEach(function (value, index) {
+                //只有为true时才删除
+                if (value.name === name) {
+                    that.fields.splice(index, 1);
+                    // console.log(index);
+                }
+            });
+        },
+
+        updateReadTable() {
+            this.formData.readTable = !this.formData.readTable;
+            this.formData.genTable = !this.formData.readTable;
+        },
+        changeDataBaseType() {
+            if ('Mysql' == this.formData.dataBaseType) {
+                this.datasourceInfoList = this.MysqlDataSourceInfos;
+                this.formData.dataSourceCode = 'dataSource';
+                this.getDatabaseTables();
+            } else if ('SqlServer' == this.formData.dataBaseType) {
+                this.datasourceInfoList = this.SqlServerDataSourceInfos;
+                this.formData.dataSourceCode = '';
+            }
+        },
+        changeOptionsDataBaseType() {
+            if ('Mysql' == this.selectField.optionsDataBaseType) {
+                this.optionsDatasourceInfoList = this.MysqlDataSourceInfos;
+                this.selectField.optionsDataSourceCode = 'dataSource';
+                this.getOptionsDatabaseTables();
+            } else if ('SqlServer' == this.selectField.optionsDataBaseType) {
+                this.optionsDatasourceInfoList = this.SqlServerDataSourceInfos;
+                this.selectField.optionsDataSourceCode = '';
+            }
+        },
+        getDatabaseTables(code) {
+            this.tableList = [];
+            this.$http.get({
+                url: '/genCode/tables',
+                data: {
+                    code: code
+                }
+            }).then(res => {
+                if (res.success) {
+
+                    this.tableList = res.data;
+                }
+            })
+        },
+        getOptionsDatabaseTables(code) {
+            this.optionsTableList = [];
+            this.$http.get({
+                url: '/genCode/tables',
+                data: {
+                    code: code
+                }
+            }).then(res => {
+                if (res.success) {
+
+                    this.optionsTableList = res.data;
+                }
+            })
+        },
+        changeDataSourceCode() {
+            if (this.formData.readTable) {
+
+                this.formData.tableName = '';
+                this.getDatabaseTables(this.formData.dataSourceCode);
+            }
+        },
+        changeOptionsDataSourceCode() {
+
+            this.getOptionsDatabaseTables(this.selectField.optionsDataSourceCode);
+        },
+        changeTableName() {
+            if (this.formData.readTable) {
+
+                this.fields = [];
+
+                this.getTableFields(this.formData.tableName);
+            }
+        },
+        changeOptionsTableName() {
+
+            this.optionsFields = [];
+
+            this.getOptionsTableFields(this.selectField.optionsMethod);
+        },
+        getTableFields(tableName) {
+            this.$http.get({
+                url: '/genCode/tableFields',
+                data: {
+                    code: this.formData.dataSourceCode,
+                    tableName: tableName,
+                    databaseType: this.formData.dataBaseType,
+                }
+            }).then(res => {
+                if (res.success) {
+
+                    this.fields = res.data;
+                }
+            })
+        },
+        getOptionsTableFields(tableName) {
+            this.$http.get({
+                url: '/genCode/tableFields',
+                data: {
+                    code: this.selectField.optionsDataSourceCode,
+                    tableName: tableName,
+                    databaseType: this.selectField.optionsDataBaseType,
+                }
+            }).then(res => {
+                if (res.success) {
+
+                    this.optionsFields = res.data;
+                }
+            })
+        },
+        addSubtable() {
+            this.subtables.push({
+                name: '',
+                column: '',
+                subColumn: '',
+                subCode: '',
+            });
+        },
+        removeSubtable(i) {
+            if (this.subtables.length > 0) {
+                this.subtables.splice(i, 1);
+            }
+        },
+
+        moveUp(i) {
+            if (i > 0) {
+
+                var tempFields = [...this.fields];
+                var tempField = tempFields[i - 1];
+
+
+                tempFields[i - 1] = tempFields[i];
+                tempFields[i] = tempField;
+
+                this.fields = tempFields;
+
+
+
+            }
+        },
+
+        moveDown(i) {
+            if (this.fields.length - 1 > i) {
+
+                var tempFields = [...this.fields];
+
+                var tempField = tempFields[i + 1];
+
+
+                tempFields[i + 1] = tempFields[i];
+                tempFields[i] = tempField;
+
+                this.fields = tempFields;
+
+
+
+            }
+
+        },
+        editSelectField(row) {
+            this.selectField = row;
+
+            if (row.apiFlag == '2') {
+
+                this.showSelectDialog = true;
+            } else if (row.apiFlag == '3') {
+                this.showTableSelectDialog = true;
+            }
+        },
+        optionsInfo(row) {
+            var value = '';
+            if (row.apiFlag == '1') {
+                value = row.optionsValue;
+            } else if (row.apiFlag == '2') {
+
+                value = row.optionsMethod + ',' + row.optionsLabel + ',' + row.optionsValue;
+            } else if (row.apiFlag == '3') {
+                value = row.optionsMethod + ',' + row.optionsLabel + ',' + row.optionsValue;
+            }
+            return value;
+        },
+        selectMappingSubmit() {
+
+            if (this.selectField.apiFlag == '2') {
+
+                this.showSelectDialog = false;
+            } else if (this.selectField.apiFlag == '3') {
+                this.showTableSelectDialog = false;
+            }
+
+
+        },
+        addSortField() {
+            this.tableSortFields.push({
+                name: '',
+                order: 'asc',
+            });
+        },
+        removeSortField(i) {
+            if (this.tableSortFields.length > 0) {
+                this.tableSortFields.splice(i, 1);
+            }
+        },
+        addQueryField() {
+            this.advancedQueryFields.push({
+                link: 'AND',
+                name: '',
+                searchMethod: '=',
+                value: '',
+            });
+        },
+        removeQueryField(i) {
+            if (this.advancedQueryFields.length > 0) {
+                this.advancedQueryFields.splice(i, 1);
+            }
+        },
+        changeToCamelCase(value) {
+            if (value) {
+                var a = value.split("_");
+                var o = a[0];
+                for (var i = 1; i < a.length; i++) {
+                    o = o + a[i].slice(0, 1).toUpperCase() + a[i].slice(1);
+                }
 
-				return o;
-			}
+                return o;
+            }
 
-		},
-		changeSubCode(subCode) {
+        },
+        changeSubCode(subCode) {
 
 
-			this.subCodes.forEach(item => {
-				if (item.className == subCode) {
-					this.subColumnOptions = JSON.parse(item.genJson).fields;
-				}
-			}
-			)
+            this.subCodes.forEach(item => {
+                if (item.className == subCode) {
+                    this.subColumnOptions = JSON.parse(item.genJson).fields;
+                }
+            }
+            )
 
 
-		},
-		operation1() {
-			if (this.selection.length > 0) {
-				this.selection.forEach(item => {
-					this.removeFieldByName(item);
-				}
-
-				);
-			}
-
-
-		},
-		operation2() {
-
-
-
-		},
-		toggleMultipleMode(multipleMode) {
-			this.multipleMode = multipleMode;
-			if (!multipleMode) {
-				this.$refs.fieldsTable.clearSelection();
-			}
-		},
-
-
-	}
+        },
+        operation1() {
+            if (this.selection.length > 0) {
+                this.selection.forEach(item => {
+                    this.removeFieldByName(item);
+                }
+
+                );
+            }
+
+
+        },
+        operation2() {
+
+
+
+        },
+        toggleMultipleMode(multipleMode) {
+            this.multipleMode = multipleMode;
+            if (!multipleMode) {
+                this.$refs.fieldsTable.clearSelection();
+            }
+        },
+
+
+    }
 }
 </script>
 
 <style lang="less" scoped>
+.color-item {
+    height: 42px;
+    font-size: 14px;
+    border-bottom: 1px solid #eee;
+    line-height: 42px;
+    padding: 0 20px;
+    cursor: move;
+    &:last-child{
+        border-bottom: none;
+    }
+}
+.colorList{
+    border: 1px solid #eee;
+    max-height: 60vh;
+    overflow: auto;
+}
 </style>

+ 188 - 15
src/main/vue/src/pages/Menus.vue

@@ -2,11 +2,18 @@
 <template>
     <div class="menuContainer">
         <div class="topTree" :style="{height:(allHeight-142)+'px'}">
-            <el-tree class="tree" :data="menus" :render-content="renderContent" :highlight-current="true" :expand-on-click-node="true" node-key="id" default-expand-all>
+            <el-tree class="tree" :data="menus" @node-drop="handleDrop" draggable :allow-drop="allowDrop" :allow-drag="allowDrag" :render-content="renderContent" :highlight-current="true" :expand-on-click-node="true" node-key="id" default-expand-all>
             </el-tree>
         </div>
+        <el-row style="margin-left: 24px;margin-top:20px;">
+            <el-button type="primary" v-if="!isCopy" @click="addRootMenu" style="width:98px;">添加</el-button>
+            <span style="float:right" v-if="isCopy">
+                <el-button size="mini" type="primary" @click="saveCopy(0)">粘贴到根</el-button>
+                <el-button size="mini" type="danger" @click="isCopy=false">取消粘贴</el-button>
+            </span>
+
+        </el-row>
 
-        <el-button  type="primary" @click="addRootMenu" style="margin-left: 24px;margin-top:20px;width:98px;">添加</el-button>
         <el-dialog :visible.sync="dialogVisible" title="添加菜单">
             <el-form :model="menu" ref="form" label-position="top" size="small">
                 <el-form-item label="菜单名" prop="name" :rules="[{required: true, message: '请填写菜单名', trigger: 'blur'}]">
@@ -28,6 +35,19 @@
                 <el-button type="primary" @click="addMenu" :loading="loading" size="small">保存</el-button>
             </div>
         </el-dialog>
+
+        <el-dialog :visible.sync="roleShow" title="菜单权限" width="500px">
+            <el-table :data="rowInfo" tooltip-effect="dark" border style="width: 100%">
+                <el-table-column label="操作" width="50">
+                    <template slot-scope="scope">
+                        <el-checkbox v-model="scope.row.hasMenu" @change="handleSelectionChange(scope.row)"></el-checkbox>
+                    </template>
+                </el-table-column>
+                <el-table-column label="用户名" prop="name">
+                    <template slot-scope="scope">{{ scope.row.name }}</template>
+                </el-table-column>
+            </el-table>
+        </el-dialog>
     </div>
 </template>
 <script>
@@ -49,7 +69,12 @@ export default {
                 href: '',
                 icon: ''
             },
-            icon: ''
+            icon: '',
+            roleShow: false,
+            rowInfo: [],
+            editMenuId: 0,
+            isCopy: false,
+            copyJson: {}
         }
     },
     computed: {
@@ -199,6 +224,76 @@ export default {
                 }));
             }
         },
+        copy(node, data) {
+            this.isCopy = true
+            this.copyJson = data
+        },
+        showRole(node, data) {
+            this.$http.get({
+                url: '/sysRole/all',
+                data: {
+                    menuId: data.id
+                }
+            }).then(res => {
+                if (res.success) {
+                    res.data.forEach(item => {
+                        if (item.menuFlag > 0) {
+                            item.hasMenu = true
+                        }
+                        else {
+                            item.hasMenu = false
+                        }
+                    })
+                    this.rowInfo = res.data
+                    this.roleShow = true
+                    this.editMenuId = data.id
+                    // setTimeout(() => {
+                    //     res.data.forEach(item => {
+                    //         if (item.menuFlag > 0) {
+                    //             this.$refs.multipleTable.toggleRowSelection(item);
+                    //         }
+                    //     })
+                    // }, 500)
+                }
+            })
+        },
+        handleSelectionChange(row) {
+            console.log(row)
+            var data = row
+            var menuIds = row.menuIds ? row.menuIds.split(',') : []
+
+            if (row.hasMenu) {
+                menuIds.push(this.editMenuId)
+            }
+            else {
+                menuIds = this.clearList(this.editMenuId.toString(), menuIds)
+
+            }
+
+            data.menuIds = menuIds.join(',')
+
+            this.$http.post({
+                url: '/sysRole/update',
+                data: {
+                    id: data.id,
+                    menuIds: data.menuIds
+                }
+            }).then(res => {
+                if (res.success) {
+                    this.menus = res.data
+                }
+            })
+
+        },
+        clearList(id, list) {
+            for (var i = 0; i < list.length; i++) {
+                if (list[i] == id) {
+                    list.splice(i, 1)
+                }
+            }
+            return list
+
+        },
         getData() {
             this.$http.get({
                 url: '/sysMenu/menuTree'
@@ -208,20 +303,50 @@ export default {
                 }
             })
         },
+        saveCopy(data) {
+            var formData = { ...this.copyJson }
+            if (data == 0) {
+                formData.parentId = 0
+            }
+            else {
+                formData.parentId = data.id
+            }
+            console.log(JSON.stringify(formData))
+            axios.post('/sysMenu/copy', formData).then(res => {
+                if (res.status === 200) {
+                    if (res.data.success) {
+                        this.getData()
+                        this.isCopy = false
+                    }
+                }
+            }).catch(e => {
+            })
+
+        },
         renderContent(h, { node, data, store }) {
-            return (
-                <span class="custom-tree-node">
+            return this.isCopy ? (
+                <span class="custom-tree-node" >
                     <span>{data.name}</span>
                     <span class="url">{data.href}</span>
-                    <span class="opt">
-                        <el-button size="mini" type="primary" plain  on-click={(e) => { this.moveUp(node, data), e.stopPropagation() }} class="up">上移</el-button>
-                        <el-button size="mini" type="primary" plain on-click={(e) => { this.moveDown(node, data), e.stopPropagation() }}>下移</el-button>
-                        <el-button size="mini" type="warning" plain on-click={(e) => { this.showEditDialog(node, data), e.stopPropagation() }}>编辑</el-button>
-                        <el-button size="mini" type="success" plain on-click={(e) => { this.showAddDialog(node, data), e.stopPropagation() }}>添加</el-button>
-                        <el-button size="mini" type="danger" plain on-click={(e) => { this.remove(node, data), e.stopPropagation() }}>删除</el-button>
+                    <span class="">
+                        <el-button size="mini" type="primary" on-click={(e) => { this.saveCopy(data), e.stopPropagation() }} class="up">粘贴</el-button>
                     </span>
-                </span>
-            );
+                </span >
+            ) : (
+                    <span class="custom-tree-node" >
+                        <span>{data.name}</span>
+                        <span class="url">{data.href}</span>
+                        <span class="opt">
+                            <el-button size="mini" plain on-click={(e) => { this.showRole(node, data), e.stopPropagation() }} >权限</el-button>
+                            <el-button size="mini" type="primary" plain on-click={(e) => { this.moveUp(node, data), e.stopPropagation() }} class="up">上移</el-button>
+                            <el-button size="mini" type="primary" plain on-click={(e) => { this.moveDown(node, data), e.stopPropagation() }}>下移</el-button>
+                            <el-button size="mini" type="warning" plain on-click={(e) => { this.showEditDialog(node, data), e.stopPropagation() }}>编辑</el-button>
+                            <el-button size="mini" type="success" plain on-click={(e) => { this.showAddDialog(node, data), e.stopPropagation() }}>添加</el-button>
+                            <el-button size="mini" type="danger" plain on-click={(e) => { this.remove(node, data), e.stopPropagation() }}>删除</el-button>
+                            <el-button size="mini" plain on-click={(e) => { this.copy(node, data), e.stopPropagation() }} class="up">复制</el-button>
+                        </span>
+                    </span >
+                );
         },
         showIcon(val) {
             if (!this.$refs.iconContainer) return;
@@ -247,6 +372,54 @@ export default {
                 FontAwesome.dom.i2svg();
                 this.menu.icon = '';
             }
+        },
+        handleDrop(draggingNode, dropNode, dropType, ev) {
+            switch (dropType) {
+                case 'inner':
+                    this.updateParent(draggingNode.data.id, dropNode ? dropNode.data.id : 0)
+                    break;
+                case 'before':
+                    this.updateParent(draggingNode.data.id, dropNode ? dropNode.data.parentId : 0)
+                    break;
+                case 'after':
+                    this.updateParent(draggingNode.data.id, dropNode ? dropNode.data.parentId : 0)
+                    break;
+                default:
+                    break;
+            }
+        },
+        allowDrop(draggingNode, dropNode, type) {
+            if (type == 'inner' && dropNode.data.href) {
+                return false;
+            }
+            else {
+                return true;
+            }
+        },
+        allowDrag(draggingNode) {
+            if (draggingNode.data.canMove == 'Y') {
+                return true
+            }
+            else {
+                return false
+            }
+        },
+        updateParent(id, parentId) {
+            if (parentId == id) {
+                this.getData()
+                return
+            }
+            this.$http.post({
+                url: '/sysMenu/update',
+                data: {
+                    parentId: parentId,
+                    id: id
+                }
+            }).then(res => {
+                if (res.success) {
+                    this.getData()
+                }
+            })
         }
     },
     watch: {
@@ -260,12 +433,12 @@ export default {
 .menuContainer {
     background-color: #fff;
     padding: 20px;
-    border-radius:4px;
+    border-radius: 4px;
 }
 .topTree {
     overflow: auto;
     // padding-bottom: 20px;
-    border:1px solid #F2F4F5;
+    border: 1px solid #f2f4f5;
 }
 .custom-tree-node {
     flex: 1;