From 5025901e459ae49d85210573ad38fb3f3c1d9230 Mon Sep 17 00:00:00 2001
From: king <18310653075@163.com>
Date: 星期日, 25 六月 2023 18:48:54 +0800
Subject: [PATCH] 2023-06-25

---
 src/tabviews/custom/components/chart/antv-scatter/index.jsx       |   16 
 src/tabviews/custom/components/chart/antv-bar-line/index.jsx      |   16 
 src/tabviews/custom/components/code/sand-box/index.jsx            |   34 
 src/tabviews/custom/components/table/base-table/index.jsx         |   17 
 package-lock.json                                                 |   69 +
 src/tabviews/custom/components/chart/antv-dashboard/index.jsx     |   16 
 src/tabviews/custom/components/editor/braft-editor/index.jsx      |   34 
 src/tabviews/custom/components/tree/antd-tree/index.jsx           |   17 
 src/menu/components/chart/antv-X6/chartcompile/formconfig.jsx     |   22 
 src/menu/components/chart/antv-X6/chartcompile/index.jsx          |  139 +--
 src/tabviews/custom/components/card/double-data-card/index.jsx    |   17 
 src/tabviews/custom/components/chart/antv-G6/index.jsx            |   16 
 src/menu/datasource/verifycard/customscript/index.jsx             |   85 ++
 src/menu/components/chart/antv-X6/index.scss                      |    1 
 src/menu/components/chart/antv-X6/index.jsx                       |  420 +++++++++++-
 src/tabviews/custom/components/carousel/data-card/index.jsx       |   16 
 src/tabviews/custom/popview/index.jsx                             |   34 
 src/tabviews/custom/components/table/edit-table/index.jsx         |   17 
 src/tabviews/custom/components/form/simple-form/index.jsx         |   17 
 report.20230625.164948.17280.0.001.json                           |  605 ++++++++++++++++++
 src/tabviews/custom/components/iframe/index.jsx                   |   17 
 src/tabviews/custom/components/chart/custom-chart/index.jsx       |   33 
 src/tabviews/custom/components/card/data-card/index.jsx           |   17 
 src/tabviews/custom/components/form/tab-form/index.jsx            |   17 
 src/tabviews/custom/components/card/table-card/index.jsx          |   16 
 src/tabviews/custom/components/card/prop-card/index.jsx           |   17 
 src/tabviews/custom/components/table/normal-table/index.jsx       |   17 
 src/menu/datasource/verifycard/customscript/index.scss            |   66 +
 src/tabviews/custom/components/interfaces/interItem/index.jsx     |   17 
 src/tabviews/custom/components/chart/antv-pie/index.jsx           |   16 
 src/tabviews/custom/components/timeline/normal-timeline/index.jsx |   17 
 src/tabviews/custom/components/carousel/prop-card/index.jsx       |   16 
 src/tabviews/custom/components/form/step-form/index.jsx           |   17 
 src/tabviews/custom/index.jsx                                     |   34 
 src/tabviews/custom/components/card/balcony/index.jsx             |   18 
 package.json                                                      |    1 
 36 files changed, 1,704 insertions(+), 240 deletions(-)

diff --git a/package-lock.json b/package-lock.json
index 94e6602..2989e07 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -657,6 +657,11 @@
       "resolved": "https://registry.npmjs.org/@antv/x6-plugin-dnd/-/x6-plugin-dnd-2.0.5.tgz",
       "integrity": "sha512-g8GGJS2XmM8C59juOBiFqaR/f8i8y8tqw9sJNwta7s1Phh3hwDd7o4kk36Kk5eTKkfZfnjEyWHMOqp/h+EDibQ=="
     },
+    "@antv/x6-plugin-export": {
+      "version": "2.1.6",
+      "resolved": "https://registry.npmjs.org/@antv/x6-plugin-export/-/x6-plugin-export-2.1.6.tgz",
+      "integrity": "sha512-m0ukMmZhrFE5n7uCR43DVQBdiUfpjGN+vm1mc+6RTZdHK8pa6Mxr0RZztaxPy34YA4tli+bGY3ePslsNPfh6PQ=="
+    },
     "@antv/x6-plugin-history": {
       "version": "2.2.3",
       "resolved": "https://registry.npmjs.org/@antv/x6-plugin-history/-/x6-plugin-history-2.2.3.tgz",
@@ -3729,7 +3734,7 @@
     "amdefine": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
-      "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU="
+      "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg=="
     },
     "anser": {
       "version": "1.4.10",
@@ -4122,7 +4127,7 @@
     "array-find-index": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz",
-      "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E="
+      "integrity": "sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw=="
     },
     "array-flatten": {
       "version": "2.1.2",
@@ -4245,7 +4250,7 @@
     "async-foreach": {
       "version": "0.1.3",
       "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz",
-      "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI="
+      "integrity": "sha512-VUeSMD8nEGBWaZK4lizI1sf3yEC7pnAQ/mrI7pC2fBz2s/tq5jWWEngTwaf0Gruu/OoXRGLGg1XFqpYBiGTYJA=="
     },
     "async-limiter": {
       "version": "1.0.1",
@@ -4992,7 +4997,7 @@
     "block-stream": {
       "version": "0.0.9",
       "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz",
-      "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=",
+      "integrity": "sha512-OorbnJVPII4DuUKbjARAe8u8EfqOmkEEaSFIyoQ7OjTHn6kafxWl0wLgoZ2rXaYd7MyLcDaU4TmhfxtwgcccMQ==",
       "requires": {
         "inherits": "~2.0.0"
       }
@@ -5146,7 +5151,7 @@
       "dependencies": {
         "immutable": {
           "version": "3.7.6",
-          "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.7.6.tgz",
+          "resolved": "http://registry.npm.taobao.org/immutable/download/immutable-3.7.6.tgz",
           "integrity": "sha1-E7TTyxK++hVIKib+Gy665kAHHks="
         }
       }
@@ -5460,7 +5465,7 @@
     "camelcase-keys": {
       "version": "2.1.0",
       "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
-      "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
+      "integrity": "sha512-bA/Z/DERHKqoEOrp+qeGKw1QlvEQkGZSc0XaY6VnTxZr+Kv1G5zFwttpjv8qxZ/sBPT4nthwZaAcsAZTJlSKXQ==",
       "requires": {
         "camelcase": "^2.0.0",
         "map-obj": "^1.0.0"
@@ -5469,7 +5474,7 @@
         "camelcase": {
           "version": "2.1.1",
           "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
-          "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8="
+          "integrity": "sha512-DLIsRzJVBQu72meAKPkWQOLcujdXT32hwdfnkI1frSiSRMK1MofjKHf+MEx0SB6fjEFXL8fBDv1dKymBlOp4Qw=="
         }
       }
     },
@@ -5731,7 +5736,7 @@
     "cliui": {
       "version": "3.2.0",
       "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
-      "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
+      "integrity": "sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w==",
       "requires": {
         "string-width": "^1.0.1",
         "strip-ansi": "^3.0.1",
@@ -6028,7 +6033,7 @@
     "console-control-strings": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
-      "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4="
+      "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ=="
     },
     "constants-browserify": {
       "version": "1.0.0",
@@ -6211,7 +6216,7 @@
     "cross-spawn": {
       "version": "3.0.1",
       "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz",
-      "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=",
+      "integrity": "sha512-eZ+m1WNhSZutOa/uRblAc9Ut5MQfukFrFMtPSm3bZCA888NmMd5AWXWdgRZ80zd+pTk1P2JrGjg9pUPTvl2PWQ==",
       "requires": {
         "lru-cache": "^4.0.1",
         "which": "^1.2.9"
@@ -6522,7 +6527,7 @@
     "currently-unhandled": {
       "version": "0.4.1",
       "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
-      "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=",
+      "integrity": "sha512-/fITjgjGU50vjQ4FH6eUoYu+iUoUKIXws2hL15JJpIR+BbTxaXQsMuuyjtNh2WqsSBS5nsaZHFsFecyw5CCAng==",
       "requires": {
         "array-find-index": "^1.0.1"
       }
@@ -6904,7 +6909,7 @@
     "delegates": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
-      "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o="
+      "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ=="
     },
     "denodeify": {
       "version": "1.2.1",
@@ -10439,7 +10444,7 @@
     "gauge": {
       "version": "2.7.4",
       "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
-      "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
+      "integrity": "sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg==",
       "requires": {
         "aproba": "^1.0.3",
         "console-control-strings": "^1.0.0",
@@ -10472,7 +10477,7 @@
     "get-stdin": {
       "version": "4.0.1",
       "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
-      "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4="
+      "integrity": "sha512-F5aQMywwJ2n85s4hJPTT9RPxGmubonuB10MNYo17/xph174n2MIR33HRguhzVag10O/npM7SPk73LMZNP+FaWw=="
     },
     "get-stream": {
       "version": "4.1.0",
@@ -10756,7 +10761,7 @@
     "has-unicode": {
       "version": "2.0.1",
       "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
-      "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk="
+      "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ=="
     },
     "has-value": {
       "version": "1.0.0",
@@ -11163,7 +11168,7 @@
     "immediate": {
       "version": "3.0.6",
       "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz",
-      "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps="
+      "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ=="
     },
     "immer": {
       "version": "1.10.0",
@@ -11230,7 +11235,7 @@
     "indent-string": {
       "version": "2.1.0",
       "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz",
-      "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
+      "integrity": "sha512-aqwDFWSgSgfRaEwao5lg5KEcVd/2a+D1rvoG7NdilmYz0NwRk6StWpWdz/Hpk34MKPpx7s8XxUqimfcQK6gGlg==",
       "requires": {
         "repeating": "^2.0.0"
       }
@@ -13425,7 +13430,7 @@
     "loud-rejection": {
       "version": "1.6.0",
       "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz",
-      "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=",
+      "integrity": "sha512-RPNliZOFkqFumDhvYqOaNY4Uz9oJM2K9tC6JWsJJsNdhuONW4LQHRBpb0qf4pJApVffI5N39SwzWZJuEhfd7eQ==",
       "requires": {
         "currently-unhandled": "^0.4.1",
         "signal-exit": "^3.0.0"
@@ -13508,7 +13513,7 @@
     "map-obj": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
-      "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0="
+      "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg=="
     },
     "map-visit": {
       "version": "1.0.0",
@@ -13599,7 +13604,7 @@
     "meow": {
       "version": "3.7.0",
       "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
-      "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
+      "integrity": "sha512-TNdwZs0skRlpPpCUK25StC4VH+tP5GgeY1HQOOGP+lQ2xtdkN2VtT/5tiX9k3IWpkBPV9b3LsAWXn4GGi/PrSA==",
       "requires": {
         "camelcase-keys": "^2.0.0",
         "decamelize": "^1.1.2",
@@ -14827,7 +14832,7 @@
         "semver": {
           "version": "5.3.0",
           "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz",
-          "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8="
+          "integrity": "sha512-mfmm3/H9+67MCVix1h+IXTpDwL6710LyHuk7+cWC9T1mE0qz4iHhh6r4hU2wrIT9iTsAAC2XQRvfblL028cpLw=="
         }
       }
     },
@@ -14952,12 +14957,12 @@
         "ansi-styles": {
           "version": "2.2.1",
           "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
-          "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+          "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA=="
         },
         "chalk": {
           "version": "1.1.3",
           "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
-          "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+          "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==",
           "requires": {
             "ansi-styles": "^2.2.1",
             "escape-string-regexp": "^1.0.2",
@@ -14969,7 +14974,7 @@
         "supports-color": {
           "version": "2.0.0",
           "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
-          "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+          "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g=="
         }
       }
     },
@@ -14981,7 +14986,7 @@
     "nopt": {
       "version": "3.0.6",
       "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
-      "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=",
+      "integrity": "sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg==",
       "requires": {
         "abbrev": "1"
       }
@@ -15370,7 +15375,7 @@
     "os-locale": {
       "version": "1.4.0",
       "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz",
-      "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=",
+      "integrity": "sha512-PRT7ZORmwu2MEFt4/fv3Q+mEfN4zetKxufQrkShY2oGvUms9r8otu5HfdyIFHkYXjO7laNsoVGmM2MANfuTA8g==",
       "requires": {
         "lcid": "^1.0.0"
       }
@@ -18665,7 +18670,7 @@
     "redent": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz",
-      "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=",
+      "integrity": "sha512-qtW5hKzGQZqKoh6JNSD+4lfitfPKGz42e6QwiRmPM5mmKtR0N41AbJRYu0xJi7nhOJ4WDgRkKvAk6tw4WIwR4g==",
       "requires": {
         "indent-string": "^2.1.0",
         "strip-indent": "^1.0.1"
@@ -19265,7 +19270,7 @@
     "scss-tokenizer": {
       "version": "0.2.3",
       "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz",
-      "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=",
+      "integrity": "sha512-dYE8LhncfBUar6POCxMTm0Ln+erjeczqEvCJib5/7XNkdw1FkUGgwMPY360FY0FgPWQxHWCx29Jl3oejyGLM9Q==",
       "requires": {
         "js-base64": "^2.1.8",
         "source-map": "^0.4.2"
@@ -19274,7 +19279,7 @@
         "source-map": {
           "version": "0.4.4",
           "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz",
-          "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=",
+          "integrity": "sha512-Y8nIfcb1s/7DcobUz1yOO1GSp7gyL+D9zLHDehT7iRESqGSxjJ448Sg7rvfgsRJCnKLdSl11uGf0s9X80cH0/A==",
           "requires": {
             "amdefine": ">=0.0.4"
           }
@@ -20369,7 +20374,7 @@
     "strip-indent": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz",
-      "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=",
+      "integrity": "sha512-I5iQq6aFMM62fBEAIB/hXzwJD6EEZ0xEGCX2t7oXqaKPIRgt4WruAQ285BISgdkP+HLGWyeGmNJcpIwFeRYRUA==",
       "requires": {
         "get-stdin": "^4.0.1"
       }
@@ -20853,7 +20858,7 @@
     "trim-newlines": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz",
-      "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM="
+      "integrity": "sha512-Nm4cF79FhSTzrLKGDMi3I4utBtFv8qKy4sq1enftf2gMdpqI8oVQTAfySkTz5r49giVzDj88SVZXP4CeYQwjaw=="
     },
     "trim-right": {
       "version": "1.0.1",
@@ -21941,7 +21946,7 @@
     "which-module": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz",
-      "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8="
+      "integrity": "sha512-F6+WgncZi/mJDrammbTuHe1q0R5hOXv/mBaiNA2TCNT/LTHusX0V+CJnj9XT8ki5ln2UZyyddDgHfCzyrOH7MQ=="
     },
     "wide-align": {
       "version": "1.1.5",
diff --git a/package.json b/package.json
index ab2d13a..a25c806 100644
--- a/package.json
+++ b/package.json
@@ -11,6 +11,7 @@
     "@antv/x6": "^2.11.1",
     "@antv/x6-plugin-clipboard": "^2.1.6",
     "@antv/x6-plugin-dnd": "^2.0.5",
+    "@antv/x6-plugin-export": "^2.1.6",
     "@antv/x6-plugin-history": "^2.2.3",
     "@antv/x6-plugin-keyboard": "^2.2.1",
     "@antv/x6-plugin-scroller": "^2.0.9",
diff --git a/report.20230625.164948.17280.0.001.json b/report.20230625.164948.17280.0.001.json
new file mode 100644
index 0000000..c8baabc
--- /dev/null
+++ b/report.20230625.164948.17280.0.001.json
@@ -0,0 +1,605 @@
+
+{
+  "header": {
+    "event": "Allocation failed - JavaScript heap out of memory",
+    "trigger": "FatalError",
+    "filename": "report.20230625.164948.17280.0.001.json",
+    "dumpEventTime": "2023-06-25T16:49:48Z",
+    "dumpEventTimeStamp": "1687682988567",
+    "processId": 17280,
+    "cwd": "E:\\project\\pc-plat",
+    "commandLine": [
+      "node",
+      "scripts/start.js"
+    ],
+    "nodejsVersion": "v12.4.0",
+    "wordSize": 64,
+    "arch": "x64",
+    "platform": "win32",
+    "componentVersions": {
+      "node": "12.4.0",
+      "v8": "7.4.288.27-node.18",
+      "uv": "1.29.1",
+      "zlib": "1.2.11",
+      "brotli": "1.0.7",
+      "ares": "1.15.0",
+      "modules": "72",
+      "nghttp2": "1.38.0",
+      "napi": "4",
+      "llhttp": "1.1.3",
+      "http_parser": "2.8.0",
+      "openssl": "1.1.1b",
+      "cldr": "35.1",
+      "icu": "64.2",
+      "tz": "2019a",
+      "unicode": "12.1"
+    },
+    "release": {
+      "name": "node",
+      "headersUrl": "https://nodejs.org/download/release/v12.4.0/node-v12.4.0-headers.tar.gz",
+      "sourceUrl": "https://nodejs.org/download/release/v12.4.0/node-v12.4.0.tar.gz",
+      "libUrl": "https://nodejs.org/download/release/v12.4.0/win-x64/node.lib"
+    },
+    "osName": "Windows_NT",
+    "osRelease": "10.0.19045",
+    "osVersion": "Windows 10 Pro",
+    "osMachine": "x86_64",
+    "host": "LAPTOP-67RFI4SB"
+  },
+  "javascriptStack": {
+    "message": "No stack.",
+    "stack": [
+      "Unavailable."
+    ]
+  },
+  "nativeStack": [
+    {
+      "pc": "0x00007ff66f1e64a9",
+      "symbol": "std::basic_ostream<char,std::char_traits<char> >::operator<<+9161"
+    },
+    {
+      "pc": "0x00007ff66f1e9d94",
+      "symbol": "std::basic_ostream<char,std::char_traits<char> >::operator<<+23732"
+    },
+    {
+      "pc": "0x00007ff66f1e8db8",
+      "symbol": "std::basic_ostream<char,std::char_traits<char> >::operator<<+19672"
+    },
+    {
+      "pc": "0x00007ff66f2d256b",
+      "symbol": "uv_loop_fork+48251"
+    },
+    {
+      "pc": "0x00007ff66f60a56e",
+      "symbol": "v8::internal::Parser::ReportMessageAt+206"
+    },
+    {
+      "pc": "0x00007ff66f5de5ea",
+      "symbol": "v8::internal::wasm::StreamingDecoder::Fail+666"
+    },
+    {
+      "pc": "0x00007ff66f674a3c",
+      "symbol": "v8::internal::Heap::CreateFillerObjectAt+2972"
+    },
+    {
+      "pc": "0x00007ff66f67c7af",
+      "symbol": "v8::internal::LocalEmbedderHeapTracer::NotifyV8MarkingWorklistWasEmpty+5375"
+    },
+    {
+      "pc": "0x00007ff66f672e23",
+      "symbol": "v8::internal::Heap::CollectGarbage+1235"
+    },
+    {
+      "pc": "0x00007ff66f671524",
+      "symbol": "v8::internal::GCTracer::AddScopeSample+1316"
+    },
+    {
+      "pc": "0x00007ff66f6b2153",
+      "symbol": "v8::internal::Factory::NewFillerObject+67"
+    },
+    {
+      "pc": "0x00007ff66f9d8cc6",
+      "symbol": "v8::internal::OptimizingCompileDispatcher::Unblock+116966"
+    },
+    {
+      "pc": "0x00007ff66fe74196",
+      "symbol": "v8::internal::NativesCollection<0>::GetScriptsSource+662454"
+    }
+  ],
+  "javascriptHeap": {
+    "totalMemory": 2171875328,
+    "totalCommittedMemory": 2171875328,
+    "usedMemory": 1820032688,
+    "availableMemory": 58851592,
+    "memoryLimit": 2197815296,
+    "heapSpaces": {
+      "read_only_space": {
+        "memorySize": 524288,
+        "committedMemory": 524288,
+        "capacity": 523976,
+        "used": 31712,
+        "available": 492264
+      },
+      "new_space": {
+        "memorySize": 33554432,
+        "committedMemory": 33554432,
+        "capacity": 16767232,
+        "used": 5485640,
+        "available": 11281592
+      },
+      "old_space": {
+        "memorySize": 1845616640,
+        "committedMemory": 1845616640,
+        "capacity": 1531953792,
+        "used": 1527583256,
+        "available": 4370536
+      },
+      "code_space": {
+        "memorySize": 3833856,
+        "committedMemory": 3833856,
+        "capacity": 3405952,
+        "used": 3405952,
+        "available": 0
+      },
+      "map_space": {
+        "memorySize": 10489856,
+        "committedMemory": 10489856,
+        "capacity": 6226400,
+        "used": 6226400,
+        "available": 0
+      },
+      "large_object_space": {
+        "memorySize": 277233664,
+        "committedMemory": 277233664,
+        "capacity": 276749424,
+        "used": 276749424,
+        "available": 0
+      },
+      "code_large_object_space": {
+        "memorySize": 622592,
+        "committedMemory": 622592,
+        "capacity": 550304,
+        "used": 550304,
+        "available": 0
+      },
+      "new_large_object_space": {
+        "memorySize": 0,
+        "committedMemory": 0,
+        "capacity": 16767232,
+        "used": 0,
+        "available": 16767232
+      }
+    }
+  },
+  "resourceUsage": {
+    "userCpuSeconds": 1725.56,
+    "kernelCpuSeconds": 105.796,
+    "cpuConsumptionPercent": 6.63343,
+    "maxRss": 2244743168,
+    "pageFaults": {
+      "IORequired": 8971633,
+      "IONotRequired": 0
+    },
+    "fsActivity": {
+      "reads": 31233,
+      "writes": 89
+    }
+  },
+  "libuv": [
+  ],
+  "environmentVariables": {
+    "=C:": "C:\\",
+    "=E:": "E:\\project\\pc-plat",
+    "ALLUSERSPROFILE": "C:\\ProgramData",
+    "ANDROID_SDK_HOME": "D:\\Program Files (x86)\\Android\\android-sdk",
+    "APPDATA": "C:\\Users\\king\\AppData\\Roaming",
+    "BABEL_ENV": "development",
+    "CHROME_CRASHPAD_PIPE_NAME": "\\\\.\\pipe\\crashpad_3112_MPXUUELTKOUORVVL",
+    "CLASSPATH": ".;C:\\Program Files\\Java\\jdk-13.0.1\\lib\\dt.jar;C:\\Program Files\\Java\\jdk-13.0.1\\lib\\tools.jar;",
+    "COLORTERM": "truecolor",
+    "CommonProgramFiles": "C:\\Program Files\\Common Files",
+    "CommonProgramFiles(x86)": "C:\\Program Files (x86)\\Common Files",
+    "CommonProgramW6432": "C:\\Program Files\\Common Files",
+    "COMPUTERNAME": "LAPTOP-67RFI4SB",
+    "ComSpec": "C:\\WINDOWS\\system32\\cmd.exe",
+    "configsetroot": "C:\\WINDOWS\\ConfigSetRoot",
+    "DriverData": "C:\\Windows\\System32\\Drivers\\DriverData",
+    "FPS_BROWSER_APP_PROFILE_STRING": "Internet Explorer",
+    "FPS_BROWSER_USER_PROFILE_STRING": "Default",
+    "GIT_ASKPASS": "d:\\Program Files\\Microsoft VS Code\\resources\\app\\extensions\\git\\dist\\askpass.sh",
+    "HOME": "C:\\Users\\king",
+    "HOMEDRIVE": "C:",
+    "HOMEPATH": "\\Users\\king",
+    "INIT_CWD": "E:\\project\\pc-plat",
+    "JAVA_HOME": "C:\\Program Files\\Java\\jdk-13.0.1",
+    "LANG": "zh_CN.UTF-8",
+    "LOCALAPPDATA": "C:\\Users\\king\\AppData\\Local",
+    "LOGONSERVER": "\\\\LAPTOP-67RFI4SB",
+    "NODE": "C:\\Program Files\\nodejs\\node.exe",
+    "NODE_ENV": "development",
+    "NODE_EXE": "C:\\Program Files\\nodejs\\\\node.exe",
+    "NODE_PATH": "",
+    "NPM_CLI_JS": "C:\\Program Files\\nodejs\\node_modules\\npm\\bin\\npm-cli.js",
+    "npm_config_access": "",
+    "npm_config_allow_same_version": "",
+    "npm_config_also": "",
+    "npm_config_always_auth": "",
+    "npm_config_argv": "{\"remain\":[],\"cooked\":[\"run\",\"dev\"],\"original\":[\"run\",\"dev\"]}",
+    "npm_config_audit": "true",
+    "npm_config_audit_level": "low",
+    "npm_config_auth_type": "legacy",
+    "npm_config_before": "",
+    "npm_config_bin_links": "true",
+    "npm_config_browser": "",
+    "npm_config_ca": "",
+    "npm_config_cache": "C:\\Users\\king\\AppData\\Roaming\\npm-cache",
+    "npm_config_cache_lock_retries": "10",
+    "npm_config_cache_lock_stale": "60000",
+    "npm_config_cache_lock_wait": "10000",
+    "npm_config_cache_max": "Infinity",
+    "npm_config_cache_min": "10",
+    "npm_config_cafile": "",
+    "npm_config_cert": "",
+    "npm_config_cidr": "",
+    "npm_config_color": "true",
+    "npm_config_commit_hooks": "true",
+    "npm_config_depth": "Infinity",
+    "npm_config_description": "true",
+    "npm_config_dev": "",
+    "npm_config_dry_run": "",
+    "npm_config_editor": "notepad.exe",
+    "npm_config_engine_strict": "",
+    "npm_config_fetch_retries": "2",
+    "npm_config_fetch_retry_factor": "10",
+    "npm_config_fetch_retry_maxtimeout": "60000",
+    "npm_config_fetch_retry_mintimeout": "10000",
+    "npm_config_force": "",
+    "npm_config_git": "git",
+    "npm_config_git_tag_version": "true",
+    "npm_config_global": "",
+    "npm_config_globalconfig": "C:\\Program Files\\nodejs\\etc\\npmrc",
+    "npm_config_globalignorefile": "C:\\Program Files\\nodejs\\etc\\npmignore",
+    "npm_config_global_style": "",
+    "npm_config_group": "",
+    "npm_config_ham_it_up": "",
+    "npm_config_heading": "npm",
+    "npm_config_https_proxy": "",
+    "npm_config_if_present": "",
+    "npm_config_ignore_prepublish": "",
+    "npm_config_ignore_scripts": "",
+    "npm_config_init_author_email": "",
+    "npm_config_init_author_name": "",
+    "npm_config_init_author_url": "",
+    "npm_config_init_license": "ISC",
+    "npm_config_init_module": "C:\\Users\\king\\.npm-init.js",
+    "npm_config_init_version": "1.0.0",
+    "npm_config_json": "",
+    "npm_config_key": "",
+    "npm_config_legacy_bundling": "",
+    "npm_config_link": "",
+    "npm_config_local_address": "",
+    "npm_config_loglevel": "notice",
+    "npm_config_logs_max": "10",
+    "npm_config_long": "",
+    "npm_config_maxsockets": "50",
+    "npm_config_message": "%s",
+    "npm_config_metrics_registry": "https://registry.npmjs.org/",
+    "npm_config_node_gyp": "C:\\Users\\king\\AppData\\Roaming\\nvm\\v12.4.0\\node_modules\\npm\\node_modules\\node-gyp\\bin\\node-gyp.js",
+    "npm_config_node_options": "",
+    "npm_config_node_version": "12.4.0",
+    "npm_config_noproxy": "",
+    "npm_config_offline": "",
+    "npm_config_onload_script": "",
+    "npm_config_only": "",
+    "npm_config_optional": "true",
+    "npm_config_otp": "",
+    "npm_config_package_lock": "true",
+    "npm_config_package_lock_only": "",
+    "npm_config_parseable": "",
+    "npm_config_prefer_offline": "",
+    "npm_config_prefer_online": "",
+    "npm_config_prefix": "C:\\Program Files\\nodejs",
+    "npm_config_preid": "",
+    "npm_config_production": "",
+    "npm_config_progress": "true",
+    "npm_config_proxy": "",
+    "npm_config_read_only": "",
+    "npm_config_rebuild_bundle": "true",
+    "npm_config_registry": "https://registry.npmjs.org/",
+    "npm_config_rollback": "true",
+    "npm_config_save": "true",
+    "npm_config_save_bundle": "",
+    "npm_config_save_dev": "",
+    "npm_config_save_exact": "",
+    "npm_config_save_optional": "",
+    "npm_config_save_prefix": "^",
+    "npm_config_save_prod": "",
+    "npm_config_scope": "",
+    "npm_config_scripts_prepend_node_path": "warn-only",
+    "npm_config_script_shell": "",
+    "npm_config_searchexclude": "",
+    "npm_config_searchlimit": "20",
+    "npm_config_searchopts": "",
+    "npm_config_searchstaleness": "900",
+    "npm_config_send_metrics": "",
+    "npm_config_shell": "C:\\WINDOWS\\system32\\cmd.exe",
+    "npm_config_shrinkwrap": "true",
+    "npm_config_sign_git_commit": "",
+    "npm_config_sign_git_tag": "",
+    "npm_config_sso_poll_frequency": "500",
+    "npm_config_sso_type": "oauth",
+    "npm_config_strict_ssl": "true",
+    "npm_config_tag": "latest",
+    "npm_config_tag_version_prefix": "v",
+    "npm_config_timing": "",
+    "npm_config_tmp": "C:\\Users\\king\\AppData\\Local\\Temp",
+    "npm_config_umask": "0000",
+    "npm_config_unicode": "",
+    "npm_config_unsafe_perm": "true",
+    "npm_config_update_notifier": "true",
+    "npm_config_usage": "",
+    "npm_config_user": "",
+    "npm_config_userconfig": "C:\\Users\\king\\.npmrc",
+    "npm_config_user_agent": "npm/6.9.0 node/v12.4.0 win32 x64",
+    "npm_config_version": "",
+    "npm_config_versions": "",
+    "npm_config_viewer": "browser",
+    "npm_execpath": "C:\\Users\\king\\AppData\\Roaming\\nvm\\v12.4.0\\node_modules\\npm\\bin\\npm-cli.js",
+    "npm_lifecycle_event": "dev",
+    "npm_lifecycle_script=set PORT": "3001 && node scripts/start.js",
+    "npm_node_execpath": "C:\\Program Files\\nodejs\\node.exe",
+    "npm_package_babel_plugins_0_0": "import",
+    "npm_package_babel_plugins_0_1_libraryName": "antd",
+    "npm_package_babel_plugins_0_1_style": "css",
+    "npm_package_babel_plugins_0_2": "pc",
+    "npm_package_babel_plugins_1_0": "import",
+    "npm_package_babel_plugins_1_1_libraryName": "antd-mobile",
+    "npm_package_babel_plugins_1_1_style": "css",
+    "npm_package_babel_plugins_1_2": "mobile",
+    "npm_package_babel_presets_0": "react-app",
+    "npm_package_browserslist_development_0": "last 1 chrome version",
+    "npm_package_browserslist_development_1": "last 1 firefox version",
+    "npm_package_browserslist_development_2": "last 1 safari version",
+    "npm_package_browserslist_production_0": ">0.2%",
+    "npm_package_browserslist_production_1": "not dead",
+    "npm_package_browserslist_production_2": "not op_mini all",
+    "npm_package_dependencies_antd": "^3.26.20",
+    "npm_package_dependencies_antd_mobile": "^5.14.2",
+    "npm_package_dependencies_axios": "^0.19.0",
+    "npm_package_dependencies_babel_eslint": "10.0.2",
+    "npm_package_dependencies_babel_jest": "^24.8.0",
+    "npm_package_dependencies_babel_loader": "8.0.6",
+    "npm_package_dependencies_babel_plugin_import": "^1.11.0",
+    "npm_package_dependencies_babel_plugin_named_asset_import": "^0.3.3",
+    "npm_package_dependencies_babel_preset_react_app": "9.0.0",
+    "npm_package_dependencies_braft_editor": "^2.3.9",
+    "npm_package_dependencies_braft_extensions": "^0.1.1",
+    "npm_package_dependencies_browserslist": "^4.13.0",
+    "npm_package_dependencies_camelcase": "^5.2.0",
+    "npm_package_dependencies_case_sensitive_paths_webpack_plugin": "2.2.0",
+    "npm_package_dependencies_codemirror": "^5.52.2",
+    "npm_package_dependencies_crypto_js": "^4.1.1",
+    "npm_package_dependencies_css_loader": "2.1.1",
+    "npm_package_dependencies_dotenv": "6.2.0",
+    "npm_package_dependencies_dotenv_expand": "4.2.0",
+    "npm_package_dependencies_dragact": "^0.2.12",
+    "npm_package_dependencies_echarts": "^5.2.1",
+    "npm_package_dependencies_echarts_for_react": "^2.0.15-beta.1",
+    "npm_package_dependencies_eslint": "^6.1.0",
+    "npm_package_dependencies_eslint_config_react_app": "^5.0.1",
+    "npm_package_dependencies_eslint_loader": "2.2.1",
+    "npm_package_dependencies_eslint_plugin_flowtype": "3.13.0",
+    "npm_package_dependencies_eslint_plugin_import": "2.18.2",
+    "npm_package_dependencies_eslint_plugin_jsx_a11y": "6.2.3",
+    "npm_package_dependencies_eslint_plugin_react": "7.14.3",
+    "npm_package_dependencies_eslint_plugin_react_hooks": "^1.6.1",
+    "npm_package_dependencies_exceljs": "^4.2.1",
+    "npm_package_dependencies_file_loader": "3.0.1",
+    "npm_package_dependencies_file_saver": "^2.0.5",
+    "npm_package_dependencies_fs_extra": "7.0.1",
+    "npm_package_dependencies_html2canvas": "^1.0.0-rc.7",
+    "npm_package_dependencies_html_webpack_plugin": "4.0.0-beta.5",
+    "npm_package_dependencies_http_proxy_middleware": "^0.20.0",
+    "npm_package_dependencies_identity_obj_proxy": "3.0.0",
+    "npm_package_dependencies_immutability_helper": "^3.0.1",
+    "npm_package_dependencies_immutable": "^4.0.0-rc.12",
+    "npm_package_dependencies_insert_css": "^2.0.0",
+    "npm_package_dependencies_is_wsl": "^1.1.0",
+    "npm_package_dependencies_jest": "24.8.0",
+    "npm_package_dependencies_jest_environment_jsdom_fourteen": "0.1.0",
+    "npm_package_dependencies_jest_resolve": "24.8.0",
+    "npm_package_dependencies_jest_watch_typeahead": "0.3.1",
+    "npm_package_dependencies_jsbarcode": "^3.11.3",
+    "npm_package_dependencies_jspdf": "^2.5.1",
+    "npm_package_dependencies_jssha": "^3.2.0",
+    "npm_package_dependencies_jszip": "^3.10.0",
+    "npm_package_dependencies_js_table2excel": "^1.0.3",
+    "npm_package_dependencies_md5": "^2.2.1",
+    "npm_package_dependencies_mini_css_extract_plugin": "0.5.0",
+    "npm_package_dependencies_moment": "^2.24.0",
+    "npm_package_dependencies_node_sass": "^4.12.0",
+    "npm_package_dependencies_optimize_css_assets_webpack_plugin": "5.0.3",
+    "npm_package_dependencies_pnp_webpack_plugin": "1.5.0",
+    "npm_package_dependencies_postcss_flexbugs_fixes": "4.1.0",
+    "npm_package_dependencies_postcss_loader": "3.0.0",
+    "npm_package_dependencies_postcss_normalize": "7.0.1",
+    "npm_package_dependencies_postcss_preset_env": "6.7.0",
+    "npm_package_dependencies_postcss_safe_parser": "4.0.1",
+    "npm_package_dependencies_prop_types": "^15.7.2",
+    "npm_package_dependencies_qrcode_react": "^1.0.0",
+    "npm_package_dependencies_rc_form": "^2.4.11",
+    "npm_package_dependencies_react": "^16.9.0",
+    "npm_package_dependencies_react_app_polyfill": "^1.0.2",
+    "npm_package_dependencies_react_codemirror2": "^7.1.0",
+    "npm_package_dependencies_react_color": "^2.18.1",
+    "npm_package_dependencies_react_dev_utils": "^9.0.3",
+    "npm_package_dependencies_react_dnd": "^9.4.0",
+    "npm_package_dependencies_react_dnd_html5_backend": "^9.4.0",
+    "npm_package_dependencies_react_dom": "^16.9.0",
+    "npm_package_dependencies_react_highlight_words": "^0.16.0",
+    "npm_package_dependencies_react_native": "^0.63.2",
+    "npm_package_dependencies_react_redux": "^7.1.1",
+    "npm_package_dependencies_react_router_dom": "^5.0.1",
+    "npm_package_dependencies_redux": "^4.0.4",
+    "npm_package_dependencies_redux_thunk": "^2.3.0",
+    "npm_package_dependencies_resolve": "1.12.0",
+    "npm_package_dependencies_resolve_url_loader": "3.1.0",
+    "npm_package_dependencies_sass_loader": "7.2.0",
+    "npm_package_dependencies_semver": "6.3.0",
+    "npm_package_dependencies_sheetjs_style": "^0.15.8",
+    "npm_package_dependencies_spark_md5": "^3.0.1",
+    "npm_package_dependencies_sql_formatter": "^11.0.2",
+    "npm_package_dependencies_style_loader": "1.0.0",
+    "npm_package_dependencies_terser_webpack_plugin": "1.4.1",
+    "npm_package_dependencies_ts_pnp": "1.1.2",
+    "npm_package_dependencies_url_loader": "2.1.0",
+    "npm_package_dependencies_video_react": "^0.14.1",
+    "npm_package_dependencies_webpack": "4.39.1",
+    "npm_package_dependencies_webpack_dev_server": "3.2.1",
+    "npm_package_dependencies_webpack_manifest_plugin": "2.0.4",
+    "npm_package_dependencies_workbox_webpack_plugin": "4.3.1",
+    "npm_package_dependencies_x2js": "^3.4.3",
+    "npm_package_dependencies_xlsx": "^0.15.5",
+    "npm_package_dependencies__antv_data_set": "^0.11.4",
+    "npm_package_dependencies__antv_g2": "^4.1.34",
+    "npm_package_dependencies__antv_g6": "^4.6.4",
+    "npm_package_dependencies__antv_util": "^2.0.17",
+    "npm_package_dependencies__antv_x6": "^2.11.1",
+    "npm_package_dependencies__antv_x6_plugin_clipboard": "^2.1.6",
+    "npm_package_dependencies__antv_x6_plugin_dnd": "^2.0.5",
+    "npm_package_dependencies__antv_x6_plugin_history": "^2.2.3",
+    "npm_package_dependencies__antv_x6_plugin_keyboard": "^2.2.1",
+    "npm_package_dependencies__antv_x6_plugin_scroller": "^2.0.9",
+    "npm_package_dependencies__antv_x6_plugin_selection": "^2.1.7",
+    "npm_package_dependencies__antv_x6_plugin_snapline": "^2.1.7",
+    "npm_package_dependencies__antv_x6_plugin_stencil": "^2.0.3",
+    "npm_package_dependencies__antv_x6_plugin_transform": "^2.1.7",
+    "npm_package_dependencies__antv_xflow": "^1.0.50",
+    "npm_package_dependencies__ant_design_icons": "^4.6.2",
+    "npm_package_dependencies__babel_core": "7.5.5",
+    "npm_package_dependencies__svgr_webpack": "4.3.2",
+    "npm_package_dependencies__typescript_eslint_eslint_plugin": "1.13.0",
+    "npm_package_dependencies__typescript_eslint_parser": "1.13.0",
+    "npm_package_dependencies__uiw_react_codemirror": "^2.2.1",
+    "npm_package_description": "This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app).",
+    "npm_package_devDependencies_typescript": "^4.0.2",
+    "npm_package_eslintConfig_extends": "react-app",
+    "npm_package_gitHead": "e095ca8ea64467afaff040cf4102b3eb54f37350",
+    "npm_package_homepage": "http://.",
+    "npm_package_jest_collectCoverageFrom_0": "src/**/*.{js,jsx,ts,tsx}",
+    "npm_package_jest_collectCoverageFrom_1": "!src/**/*.d.ts",
+    "npm_package_jest_moduleFileExtensions_0": "web.js",
+    "npm_package_jest_moduleFileExtensions_1": "js",
+    "npm_package_jest_moduleFileExtensions_2": "web.ts",
+    "npm_package_jest_moduleFileExtensions_3": "ts",
+    "npm_package_jest_moduleFileExtensions_4": "web.tsx",
+    "npm_package_jest_moduleFileExtensions_5": "tsx",
+    "npm_package_jest_moduleFileExtensions_6": "json",
+    "npm_package_jest_moduleFileExtensions_7": "web.jsx",
+    "npm_package_jest_moduleFileExtensions_8": "jsx",
+    "npm_package_jest_moduleFileExtensions_9": "node",
+    "npm_package_jest_moduleNameMapper__react_native_web_": "react-native-web",
+    "npm_package_jest_moduleNameMapper______module___css_sass_scss__": "identity-obj-proxy",
+    "npm_package_jest_roots_0": "<rootDir>/src",
+    "npm_package_jest_setupFiles_0": "react-app-polyfill/jsdom",
+    "npm_package_jest_testEnvironment": "jest-environment-jsdom-fourteen",
+    "npm_package_jest_testMatch_0": "<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}",
+    "npm_package_jest_testMatch_1": "<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}",
+    "npm_package_jest_transformIgnorePatterns_0": "[/\\\\]node_modules[/\\\\].+\\.(js|jsx|ts|tsx)$",
+    "npm_package_jest_transformIgnorePatterns_1": "^.+\\.module\\.(css|sass|scss)$",
+    "npm_package_jest_transform______css_": "<rootDir>/config/jest/cssTransform.js",
+    "npm_package_jest_transform_______js_jsx_ts_tsx__": "<rootDir>/node_modules/babel-jest",
+    "npm_package_jest_transform__________js_jsx_ts_tsx_css_json___": "<rootDir>/config/jest/fileTransform.js",
+    "npm_package_jest_watchPlugins_0": "jest-watch-typeahead/filename",
+    "npm_package_jest_watchPlugins_1": "jest-watch-typeahead/testname",
+    "npm_package_name": "pc-plat",
+    "npm_package_private": "true",
+    "npm_package_readmeFilename": "README.md",
+    "npm_package_scripts_build": "node scripts/build.js",
+    "npm_package_scripts_dev=set PORT": "3001 && node scripts/start.js",
+    "npm_package_scripts_test": "node scripts/test.js",
+    "npm_package_version": "0.1.0",
+    "NPM_PREFIX_NPM_CLI_JS": "C:\\Program Files\\nodejs\\node_modules\\npm\\bin\\npm-cli.js",
+    "NUMBER_OF_PROCESSORS": "8",
+    "NVM_HOME": "C:\\Users\\king\\AppData\\Roaming\\nvm",
+    "NVM_SYMLINK": "C:\\Program Files\\nodejs",
+    "OneDrive": "C:\\Users\\king\\OneDrive",
+    "ORIGINAL_XDG_CURRENT_DESKTOP": "undefined",
+    "OS": "Windows_NT",
+    "Path": "C:\\Users\\king\\AppData\\Roaming\\nvm\\v12.4.0\\node_modules\\npm\\node_modules\\npm-lifecycle\\node-gyp-bin;E:\\project\\pc-plat\\node_modules\\.bin;C:\\Program Files (x86)\\Intel\\iCLS Client\\;C:\\Program Files\\Intel\\iCLS Client\\;C:\\WINDOWS\\system32;C:\\WINDOWS;C:\\WINDOWS\\System32\\Wbem;C:\\WINDOWS\\System32\\WindowsPowerShell\\v1.0\\;C:\\Program Files (x86)\\Intel\\Intel(R) Management Engine Components\\DAL;C:\\Program Files\\Intel\\Intel(R) Management Engine Components\\DAL;C:\\Program Files (x86)\\Intel\\Intel(R) Management Engine Components\\IPT;C:\\Program Files\\Intel\\Intel(R) Management Engine Components\\IPT;D:\\Program Files\\Git\\cmd;D:\\Program Files\\Microsoft VS Code\\bin;C:\\WINDOWS\\System32\\OpenSSH\\;C:\\Program Files (x86)\\Microsoft SQL Server\\100\\Tools\\Binn\\VSShell\\Common7\\IDE\\;C:\\Program Files (x86)\\Microsoft SQL Server\\100\\Tools\\Binn\\;C:\\Program Files\\Microsoft SQL Server\\100\\Tools\\Binn\\;C:\\Program Files (x86)\\Microsoft SQL Server\\100\\DTS\\Binn\\;C:\\Program Files\\TortoiseGit\\bin;D:\\Program Files\\mysql\\bin;C:\\Program Files\\Java\\jdk-13.0.1\\bin;C:\\Program Files\\Java\\jdk-13.0.1\\jre\\bin;D:\\Program Files\\Redis;D:\\Program Files (x86)\\Yarn\\bin\\;\";% ANDROID_SDK_HOME%\\platform-tools\";\";C:\\Program Files\\Intel\\WiFi\\bin\\;C:\\Program Files\\Common Files\\Intel\\WirelessCommon\\\";D:\\Program Files (x86)\\Tencent\\寰俊web寮�鍙戣�呭伐鍏穃\dll;C:\\Users\\king\\AppData\\Roaming\\nvm;C:\\Program Files\\nodejs;C:\\Python37\\Scripts\\;C:\\Python37\\;C:\\Users\\king\\AppData\\Local\\Microsoft\\WindowsApps;C:\\Users\\king\\AppData\\Local\\Yarn\\bin;C:\\Users\\king\\AppData\\Roaming\\nvm;C:\\Program Files\\nodejs",
+    "PATHEXT": ".COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.CPL",
+    "PORT": "3001 ",
+    "PROCESSOR_ARCHITECTURE": "AMD64",
+    "PROCESSOR_IDENTIFIER": "Intel64 Family 6 Model 142 Stepping 10, GenuineIntel",
+    "PROCESSOR_LEVEL": "6",
+    "PROCESSOR_REVISION": "8e0a",
+    "ProgramData": "C:\\ProgramData",
+    "ProgramFiles": "C:\\Program Files",
+    "ProgramFiles(x86)": "C:\\Program Files (x86)",
+    "ProgramW6432": "C:\\Program Files",
+    "PROMPT": "$P$G",
+    "PSModulePath": "C:\\Users\\king\\Documents\\WindowsPowerShell\\Modules;C:\\Program Files\\WindowsPowerShell\\Modules;C:\\WINDOWS\\system32\\WindowsPowerShell\\v1.0\\Modules",
+    "PUBLIC": "C:\\Users\\Public",
+    "SESSIONNAME": "Console",
+    "SystemDrive": "C:",
+    "SystemRoot": "C:\\WINDOWS",
+    "TEMP": "C:\\Users\\king\\AppData\\Local\\Temp",
+    "TERM_PROGRAM": "vscode",
+    "TERM_PROGRAM_VERSION": "1.52.1",
+    "TMP": "C:\\Users\\king\\AppData\\Local\\Temp",
+    "USERDOMAIN": "LAPTOP-67RFI4SB",
+    "USERDOMAIN_ROAMINGPROFILE": "LAPTOP-67RFI4SB",
+    "USERNAME": "king",
+    "USERPROFILE": "C:\\Users\\king",
+    "VSCODE_GIT_ASKPASS_MAIN": "d:\\Program Files\\Microsoft VS Code\\resources\\app\\extensions\\git\\dist\\askpass-main.js",
+    "VSCODE_GIT_ASKPASS_NODE": "D:\\Program Files\\Microsoft VS Code\\Code.exe",
+    "VSCODE_GIT_IPC_HANDLE": "\\\\.\\pipe\\vscode-git-98b274b1e6-sock",
+    "windir": "C:\\WINDOWS",
+    "__PSLockDownPolicy": "0"
+  },
+  "sharedObjects": [
+    "C:\\Program Files\\nodejs\\node.exe",
+    "C:\\WINDOWS\\SYSTEM32\\ntdll.dll",
+    "C:\\WINDOWS\\System32\\KERNEL32.DLL",
+    "C:\\WINDOWS\\System32\\KERNELBASE.dll",
+    "C:\\WINDOWS\\System32\\WS2_32.dll",
+    "C:\\WINDOWS\\System32\\RPCRT4.dll",
+    "C:\\WINDOWS\\System32\\ADVAPI32.dll",
+    "C:\\WINDOWS\\System32\\msvcrt.dll",
+    "C:\\WINDOWS\\System32\\sechost.dll",
+    "C:\\WINDOWS\\System32\\USER32.dll",
+    "C:\\WINDOWS\\System32\\win32u.dll",
+    "C:\\WINDOWS\\System32\\GDI32.dll",
+    "C:\\WINDOWS\\System32\\gdi32full.dll",
+    "C:\\WINDOWS\\System32\\msvcp_win.dll",
+    "C:\\WINDOWS\\System32\\ucrtbase.dll",
+    "C:\\WINDOWS\\SYSTEM32\\dbghelp.dll",
+    "C:\\WINDOWS\\System32\\PSAPI.DLL",
+    "C:\\WINDOWS\\System32\\CRYPT32.dll",
+    "C:\\WINDOWS\\System32\\bcrypt.dll",
+    "C:\\WINDOWS\\SYSTEM32\\IPHLPAPI.DLL",
+    "C:\\WINDOWS\\SYSTEM32\\USERENV.dll",
+    "C:\\WINDOWS\\SYSTEM32\\WINMM.dll",
+    "C:\\WINDOWS\\System32\\IMM32.DLL",
+    "C:\\WINDOWS\\SYSTEM32\\powrprof.dll",
+    "C:\\WINDOWS\\SYSTEM32\\UMPDC.dll",
+    "C:\\WINDOWS\\system32\\uxtheme.dll",
+    "C:\\WINDOWS\\System32\\combase.dll",
+    "C:\\WINDOWS\\system32\\mswsock.dll",
+    "C:\\WINDOWS\\SYSTEM32\\kernel.appcore.dll",
+    "C:\\WINDOWS\\System32\\bcryptprimitives.dll",
+    "C:\\WINDOWS\\SYSTEM32\\CRYPTBASE.DLL",
+    "C:\\WINDOWS\\System32\\NSI.dll",
+    "C:\\WINDOWS\\SYSTEM32\\dhcpcsvc6.DLL",
+    "C:\\WINDOWS\\SYSTEM32\\dhcpcsvc.DLL",
+    "C:\\WINDOWS\\SYSTEM32\\DNSAPI.dll",
+    "C:\\WINDOWS\\system32\\napinsp.dll",
+    "C:\\WINDOWS\\system32\\pnrpnsp.dll",
+    "C:\\WINDOWS\\system32\\wshbth.dll",
+    "C:\\WINDOWS\\system32\\NLAapi.dll",
+    "C:\\WINDOWS\\System32\\winrnr.dll",
+    "C:\\Windows\\System32\\rasadhlp.dll",
+    "C:\\WINDOWS\\System32\\fwpuclnt.dll",
+    "\\\\?\\E:\\project\\pc-plat\\node_modules\\node-sass\\vendor\\win32-x64-72\\binding.node"
+  ]
+}
\ No newline at end of file
diff --git a/src/menu/components/chart/antv-X6/chartcompile/formconfig.jsx b/src/menu/components/chart/antv-X6/chartcompile/formconfig.jsx
index 39827f8..562a94b 100644
--- a/src/menu/components/chart/antv-X6/chartcompile/formconfig.jsx
+++ b/src/menu/components/chart/antv-X6/chartcompile/formconfig.jsx
@@ -209,7 +209,7 @@
         value: 'xflow',
         label: '娴佺▼鍥�'
       }, {
-        value: 'indentTree',
+        value: 'lane',
         label: '娉抽亾鍥�'
       }, {
         value: 'kapmap',
@@ -227,6 +227,26 @@
         {value: 'show', label: '鍚�'},
         {value: 'hidden', label: '鏄�'},
       ],
+    },
+    {
+      type: 'radio',
+      field: 'gridType',
+      label: '缃戞牸',
+      initval: card.gridType || 'none',
+      required: false,
+      options: [
+        {value: 'none', label: '鏃�'},
+        {value: 'dot', label: '鐐圭姸缃戞牸'},
+        {value: 'mesh', label: '缃戠姸缃戞牸'}
+      ],
+    },
+    {
+      type: 'color',
+      field: 'backgroundColor',
+      label: '鑳屾櫙鑹�',
+      initval: card.backgroundColor || '',
+      required: false,
+      allowClear: true
     }
   ]
 }
diff --git a/src/menu/components/chart/antv-X6/chartcompile/index.jsx b/src/menu/components/chart/antv-X6/chartcompile/index.jsx
index 4396a49..6e61020 100644
--- a/src/menu/components/chart/antv-X6/chartcompile/index.jsx
+++ b/src/menu/components/chart/antv-X6/chartcompile/index.jsx
@@ -39,92 +39,81 @@
   }
 
   onSubmit = () => {
-    const { config } = this.props
     const { plot, view } = this.state
 
     if (view === 'normal') {
       this.norRef.handleConfirm().then(res => {
-        let _plot = {...plot, ...res}
-
-        if (_plot.click !== 'menus') {
-          delete _plot.menus
-        }
-        if (_plot.click !== 'menu') {
-          delete _plot.menu
-          delete _plot.MenuID
-          delete _plot.MenuName
-          delete _plot.MenuNo
-          delete _plot.tabType
-        } else if (sessionStorage.getItem('appType') === '' && _plot.menu) {
-          let list = null
-          try {
-            list = JSON.parse(sessionStorage.getItem('thdMenuList')) || []
-          } catch (e) {
-            list = []
-          }
-    
-          let id = _plot.menu[_plot.menu.length - 1]
-    
-          list.forEach(item => {
-            if (item.MenuID === id) {
-              _plot.MenuID = id
-              _plot.MenuName = item.MenuName
-              _plot.MenuNo = item.MenuNo
-              _plot.tabType = item.type
-            }
-          })
-        }
-
-        this.setState({
-          plot: _plot,
-          visible: false
-        })
-
-        this.props.plotchange({...config, plot: _plot})
+        this.resetPlot({...plot, ...res})
       })
     } else if (view === 'base') {
       this.baseRef.handleConfirm().then(res => {
-        let _plot = {...plot, ...res}
-
-        if (_plot.click !== 'menus') {
-          delete _plot.menus
-        }
-        if (_plot.click !== 'menu') {
-          delete _plot.menu
-          delete _plot.MenuID
-          delete _plot.MenuName
-          delete _plot.MenuNo
-          delete _plot.tabType
-        } else if (sessionStorage.getItem('appType') === '' && _plot.menu) {
-          let list = null
-          try {
-            list = JSON.parse(sessionStorage.getItem('thdMenuList')) || []
-          } catch (e) {
-            list = []
-          }
-    
-          let id = _plot.menu[_plot.menu.length - 1]
-    
-          list.forEach(item => {
-            if (item.MenuID === id) {
-              _plot.MenuID = id
-              _plot.MenuName = item.MenuName
-              _plot.MenuNo = item.MenuNo
-              _plot.tabType = item.type
-            }
-          })
-        }
-        
-        this.setState({
-          plot: _plot,
-          visible: false
-        })
-
-        this.props.plotchange({...config, plot: _plot})
+        this.resetPlot({...plot, ...res})
       })
     }
   }
 
+  resetPlot = (plot) => {
+    const { config } = this.props
+
+    if (plot.click !== 'menus') {
+      delete plot.menus
+    }
+    if (plot.click !== 'menu') {
+      delete plot.menu
+      delete plot.MenuID
+      delete plot.MenuName
+      delete plot.MenuNo
+      delete plot.tabType
+    } else if (sessionStorage.getItem('appType') === '' && plot.menu) {
+      let list = null
+      try {
+        list = JSON.parse(sessionStorage.getItem('thdMenuList')) || []
+      } catch (e) {
+        list = []
+      }
+
+      let id = plot.menu[plot.menu.length - 1]
+
+      list.forEach(item => {
+        if (item.MenuID === id) {
+          plot.MenuID = id
+          plot.MenuName = item.MenuName
+          plot.MenuNo = item.MenuNo
+          plot.tabType = item.type
+        }
+      })
+    }
+
+    if (plot.gridType === 'none') {
+      plot.grid = {visible: false}
+    } else if (plot.gridType === 'dot') {
+      plot.grid = {
+        visible: true,
+        type: 'dot',
+        args: {
+          color: '#a0a0a0',
+          thickness: 1
+        }
+      }
+    } else if (plot.gridType === 'mesh') {
+      plot.grid = {
+        visible: true,
+        type: 'mesh',
+        args: {
+          color: '#ddd',
+          thickness: 1
+        }
+      }
+    }
+    
+    this.setState({
+      plot: plot,
+      visible: false
+    })
+
+    this.props.plotchange({...config, plot: plot})
+  }
+
   changeTab = (tab) => {
     const { plot, view } = this.state
 
diff --git a/src/menu/components/chart/antv-X6/index.jsx b/src/menu/components/chart/antv-X6/index.jsx
index 6d20b17..96e04e1 100644
--- a/src/menu/components/chart/antv-X6/index.jsx
+++ b/src/menu/components/chart/antv-X6/index.jsx
@@ -2,7 +2,7 @@
 import PropTypes from 'prop-types'
 import { is, fromJS } from 'immutable'
 import { Popover, Tooltip, message } from 'antd'
-import { ToolOutlined, DeleteOutlined, FontColorsOutlined, VerticalAlignTopOutlined, VerticalAlignBottomOutlined, SaveOutlined, ZoomInOutlined, ZoomOutOutlined, OneToOneOutlined, DoubleLeftOutlined } from '@ant-design/icons'
+import { ToolOutlined, DeleteOutlined, FontColorsOutlined, VerticalAlignTopOutlined, VerticalAlignBottomOutlined, SaveOutlined, ZoomInOutlined, ZoomOutOutlined, OneToOneOutlined, DoubleLeftOutlined, DownloadOutlined } from '@ant-design/icons'
 import { Graph, Shape } from '@antv/x6'
 import { Stencil } from '@antv/x6-plugin-stencil'
 import { Transform } from '@antv/x6-plugin-transform'
@@ -11,6 +11,7 @@
 import { Keyboard } from '@antv/x6-plugin-keyboard'
 import { Clipboard } from '@antv/x6-plugin-clipboard'
 import { History } from '@antv/x6-plugin-history'
+import { Export } from '@antv/x6-plugin-export'
 
 import MKEmitter from '@/utils/events.js'
 import asyncComponent from '@/utils/asyncComponent'
@@ -87,6 +88,52 @@
     }
   }
 }
+
+Graph.registerNode(
+  'lane',
+  {
+    inherit: 'rect',
+    markup: [
+      {
+        tagName: 'rect',
+        selector: 'body',
+      },
+      {
+        tagName: 'rect',
+        selector: 'name-rect',
+      },
+      {
+        tagName: 'text',
+        selector: 'name-text',
+      },
+    ],
+    attrs: {
+      body: {
+        fill: '#FFF',
+        stroke: '#5F95FF',
+        strokeWidth: 1,
+      },
+      'name-rect': {
+        width: 200,
+        height: 30,
+        fill: '#5F95FF',
+        stroke: '#fff',
+        strokeWidth: 1,
+        x: -1,
+      },
+      'name-text': {
+        ref: 'name-rect',
+        refY: 0.5,
+        refX: 0.5,
+        textAnchor: 'middle',
+        fontWeight: 'bold',
+        fill: '#fff',
+        fontSize: 12,
+      },
+    },
+  },
+  true,
+)
 
 Graph.registerNode(
   'mk-rect',
@@ -266,7 +313,16 @@
         width: card.width || 24,
         height: 400,
         subtype: card.subtype,
-        name: card.name
+        name: card.name,
+        grid: {
+          visible: true,
+          type: 'dot',
+          args: {
+            color: '#a0a0a0',
+            thickness: 1
+          }
+        },
+        gridType: 'dot'
       }
 
       let _card = {
@@ -318,39 +374,44 @@
     }, 1000)
   }
 
-  viewrender = () => {
-    // const { card } = this.state
-
-    // if (card.plot.subtype === 'mindmap') {
-    //   this.ponitrender()
-    // } else if (card.plot.subtype === 'indentTree') {
-    //   this.indentrender()
-    // } else if (card.plot.subtype === 'kapmap') {
-      this.kapmaprender()
-    // }
-  }
-
-  kapmaprender = () => {
+  plotchange = (res) => {
     const { card } = this.state
 
-    // #region 鍒濆鍖栫敾甯�
+    if (
+      card.plot.subtype !== res.plot.subtype ||
+      card.plot.gridType !== res.plot.gridType ||
+      card.plot.backgroundColor !== res.plot.backgroundColor
+    ) {
+      let _element = document.getElementById(card.uuid + 'container')
+      if (_element) {
+        _element.innerHTML = ''
+      }
+      setTimeout(() => {
+        this.viewrender()
+      }, 50)
+    }
+
+    this.updateComponent(res)
+  }
+
+  viewrender = () => {
+    const { card } = this.state
+
+    if (card.plot.subtype === 'xflow') {
+      this.xflowrender()
+    } else if (card.plot.subtype === 'lane') {
+      this.lanerender()
+    // } else if (card.plot.subtype === 'xflow') {
+      // this.xflowrender()
+    }
+  }
+
+  xflowrender = () => {
+    const { card } = this.state
+
     const graph = new Graph({
       container: document.getElementById(card.uuid + 'container'),
-      // grid: {
-      //   visible: true,
-      //   type: 'doubleMesh',
-      //   args: [
-      //     {
-      //       color: '#eee', // 涓荤綉鏍肩嚎棰滆壊
-      //       thickness: 1   // 涓荤綉鏍肩嚎瀹藉害
-      //     },
-      //     {
-      //       color: '#ddd', // 娆$綉鏍肩嚎棰滆壊
-      //       thickness: 1,  // 娆$綉鏍肩嚎瀹藉害
-      //       factor: 4      // 涓绘缃戞牸绾块棿闅�
-      //     }
-      //   ]
-      // },
+      grid: card.plot.grid,
       scaling: {
         min: 0.5,
         max: 2
@@ -358,7 +419,7 @@
       autoResize: true,
       panning: true,
       background: {
-        color: '#ffffff'
+        color: card.plot.backgroundColor || 'transparent'
       },
       mousewheel: {
         enabled: true,
@@ -423,6 +484,7 @@
       .use(new Keyboard())
       .use(new Clipboard())
       .use(new History())
+      .use(new Export())
 
     // #region 鍒濆鍖� stencil
     const stencil = new Stencil({
@@ -596,6 +658,290 @@
     
     this.mkGraph = graph
   }
+
+  lanerender = () => {
+    const { card } = this.state
+
+    const graph = new Graph({
+      container: document.getElementById(card.uuid + 'container'),
+      grid: card.plot.grid,
+      scaling: {
+        min: 0.5,
+        max: 2
+      },
+      autoResize: true,
+      panning: true,
+      background: {
+        color: card.plot.backgroundColor || 'transparent'
+      },
+      mousewheel: {
+        enabled: true,
+        zoomAtMousePosition: true,
+        modifiers: 'ctrl'
+      },
+      connecting: {
+        router: 'manhattan',
+        connector: {
+          name: 'rounded',
+          args: {
+            radius: 8
+          }
+        },
+        anchor: 'center',
+        connectionPoint: 'anchor',
+        allowBlank: false,
+        snap: {
+          radius: 20
+        },
+        createEdge() {
+          return new Shape.Edge({
+            attrs: {
+              line: {
+                stroke: '#A2B1C3',
+                strokeWidth: 2,
+                targetMarker: {
+                  name: 'block',
+                  width: 12,
+                  height: 8
+                }
+              }
+            },
+            zIndex: 2
+          })
+        },
+        validateConnection({ targetMagnet }) {
+          return !!targetMagnet
+        }
+      },
+      highlighting: {
+        magnetAdsorbed: {
+          name: 'stroke',
+          args: {
+            attrs: {
+              fill: '#5F95FF',
+              stroke: '#5F95FF'
+            }
+          }
+        }
+      },
+      translating: {
+        restrict(cellView) {
+          const cell = cellView.cell
+          const parentId = cell.prop('parent')
+
+          if (parentId) {
+            const parentNode = graph.getCellById(parentId)
+            if (parentNode) {
+              return parentNode.getBBox().moveAndExpand({
+                x: 0,
+                y: 30,
+                width: 0,
+                height: -30,
+              })
+            }
+          }
+          return cell.getBBox()
+        }
+      }
+    })
+
+    // #region 浣跨敤鎻掍欢
+    graph
+      .use(new Transform({
+        resizing: true,
+        rotating: true
+      }))
+      .use(new Selection())
+      .use(new Snapline())
+      .use(new Keyboard())
+      .use(new Clipboard())
+      .use(new History())
+      .use(new Export())
+
+    // #region 鍒濆鍖� stencil
+    const stencil = new Stencil({
+      title: '娴佺▼鍥�',
+      target: graph,
+      stencilGraphWidth: 180,
+      stencilGraphHeight: 180,
+      groups: [
+        {
+          title: '閫氱敤鑺傜偣',
+          name: 'group1'
+        },
+        {
+          title: '鑷畾涔�',
+          name: 'group2',
+          graphHeight: 120,
+          layoutOptions: {
+            rowHeight: 70
+          }
+        }
+      ],
+      layoutOptions: {
+        columns: 2,
+        columnWidth: 80,
+        rowHeight: 55
+      }
+    })
+
+    document.getElementById(card.uuid + 'stencil').appendChild(stencil.container)
+
+    // #region 蹇嵎閿笌浜嬩欢
+    graph.bindKey(['meta+c', 'ctrl+c'], () => {
+      const cells = graph.getSelectedCells()
+      if (cells.length) {
+        graph.copy(cells)
+      }
+      return false
+    })
+    graph.bindKey(['meta+x', 'ctrl+x'], () => {
+      const cells = graph.getSelectedCells()
+      if (cells.length) {
+        graph.cut(cells)
+      }
+      return false
+    })
+    graph.bindKey(['meta+v', 'ctrl+v'], () => {
+      if (!graph.isClipboardEmpty()) {
+        graph.paste({ offset: 32 })
+      }
+      return false
+    })
+
+    // undo redo
+    graph.bindKey(['meta+z', 'ctrl+z'], () => {
+      if (graph.canUndo()) {
+        graph.undo()
+      }
+      return false
+    })
+    graph.bindKey(['meta+shift+z', 'ctrl+shift+z'], () => {
+      if (graph.canRedo()) {
+        graph.redo()
+      }
+      return false
+    })
+
+    // 鍒犻櫎鍏冪礌
+    graph.bindKey(['backspace', 'delete'], () => {
+      const cells = graph.getSelectedCells()
+      if (cells.length) {
+        graph.removeCells(cells)
+        this.selectNode = null
+        this.setState({node: null})
+      }
+    })
+
+    // 鎺у埗杩炴帴妗╂樉绀�/闅愯棌
+    const showPorts = (ports, show) => {
+      for (let i = 0, len = ports.length; i < len; i += 1) {
+        ports[i].style.visibility = show ? 'visible' : 'hidden'
+      }
+    }
+    graph.on('node:mouseenter', () => {
+      const container = document.getElementById(card.uuid + 'container')
+      const ports = container.querySelectorAll('.x6-port-body')
+      showPorts(ports, true)
+    })
+    graph.on('node:mouseleave', () => {
+      const container = document.getElementById(card.uuid + 'container')
+      const ports = container.querySelectorAll('.x6-port-body')
+      showPorts(ports, false)
+    })
+
+    graph.on('node:click', ({ e, x, y, node, view }) => {
+      this.selectNode = node
+      
+      this.setState({node: node.store.data})
+    })
+    graph.on('edge:click', ({ e, x, y, edge, view }) => {
+      this.selectNode = edge
+      
+      this.setState({node: edge.store.data})
+
+      graph.clearTransformWidgets()
+    })
+    graph.on('blank:click', ({ e, x, y }) => {
+      this.selectNode = null
+      
+      this.setState({node: null})
+    })
+    
+    const r1 = graph.createNode({
+      shape: 'mk-rect',
+      label: '寮�濮�',
+      attrs: {
+        body: {
+          rx: 20,
+          ry: 26
+        }
+      }
+    })
+    const r2 = graph.createNode({
+      shape: 'mk-rect',
+      label: '杩囩▼'
+    })
+    const r3 = graph.createNode({
+      shape: 'mk-rect',
+      attrs: {
+        body: {
+          rx: 6,
+          ry: 6
+        }
+      },
+      label: '鍙�夎繃绋�'
+    })
+    const r4 = graph.createNode({
+      shape: 'mk-polygon',
+      attrs: {
+        body: {
+          refPoints: '0,10 10,0 20,10 10,20'
+        }
+      },
+      label: '鍐崇瓥'
+    })
+    const r5 = graph.createNode({
+      shape: 'mk-polygon',
+      attrs: {
+        body: {
+          refPoints: '10,0 40,0 30,20 0,20'
+        }
+      },
+      label: '鏁版嵁'
+    })
+    const r6 = graph.createNode({
+      shape: 'mk-circle',
+      label: '杩炴帴'
+    })
+    
+    stencil.load([r1, r2, r3, r4, r5, r6], 'group1')
+    
+    const p1 = graph.createNode({
+      shape: 'mk-ellipse',
+      label: 'ellipse'
+    })
+    const p2 = graph.createNode({
+      shape: 'mk-star',
+      label: ''
+    })
+    
+    stencil.load([p1, p2], 'group2')
+
+    let data = [{"id":"1","shape":"lane","width":200,"height":500,"position":{"x":60,"y":60},"label":"<Function>"},{"id":"2","shape":"lane","width":200,"height":500,"position":{"x":260,"y":60},"label":"<Function>"},{"id":"3","shape":"lane","width":200,"height":500,"position":{"x":460,"y":60},"label":"<Function>"},{"id":"4","shape":"lane","width":200,"height":500,"position":{"x":660,"y":60},"label":"<Function>"}]
+    let cells = []
+    data.forEach((item) => {
+      if (item.shape === 'lane-edge') {
+        cells.push(graph.createEdge(item))
+      } else {
+        cells.push(graph.createNode(item))
+      }
+    })
+    graph.resetCells(cells)
+    graph.zoomToFit({ padding: 10, maxScale: 1 })
+
+    this.mkGraph = graph
+  }
   
   setTop = () => {
     if (!this.selectNode) {
@@ -629,6 +975,11 @@
 
   save = () => {
     // let nodes = this.mkGraph.toJSON()
+  }
+
+  savePicture = () => {
+    const { card } = this.state
+    this.mkGraph.exportPNG(card.name, {padding: 20})
   }
 
   changeProps = (value, key) => {
@@ -717,7 +1068,7 @@
       <div className="menu-x6-chart-edit-box" style={_style} onClick={this.clickComponent} id={card.uuid}>
         <Popover overlayClassName="mk-popover-control-wrap" mouseLeaveDelay={0.2} mouseEnterDelay={0.2} content={
           <div className="mk-popover-control">
-            <ChartCompileForm config={card} plotchange={this.updateComponent}/>
+            <ChartCompileForm config={card} plotchange={this.plotchange}/>
             <CopyComponent type="antvG6" card={card}/>
             <FontColorsOutlined className="style" title="璋冩暣鏍峰紡" onClick={this.changeStyle}/>
             <DeleteOutlined className="close" title="delete" onClick={() => this.props.deletecomponent(card.uuid)}/>
@@ -738,6 +1089,9 @@
             <Tooltip title="淇濆瓨">
               <SaveOutlined onClick={this.save}/>
             </Tooltip>
+            <Tooltip title="瀵煎嚭鍥剧墖">
+              <DownloadOutlined onClick={this.savePicture}/>
+            </Tooltip>
           </div>
           <div className="right-tool">
             <Tooltip title="鏀惧ぇ">
diff --git a/src/menu/components/chart/antv-X6/index.scss b/src/menu/components/chart/antv-X6/index.scss
index bb28fcb..2819d31 100644
--- a/src/menu/components/chart/antv-X6/index.scss
+++ b/src/menu/components/chart/antv-X6/index.scss
@@ -107,6 +107,7 @@
       position: relative;
       z-index: 2;
       border-left: 1px solid #dfe3e8;
+      background: #ffffff;
       transition: all 0.2s;
 
       .header {
diff --git a/src/menu/datasource/verifycard/customscript/index.jsx b/src/menu/datasource/verifycard/customscript/index.jsx
index bca6509..e655815 100644
--- a/src/menu/datasource/verifycard/customscript/index.jsx
+++ b/src/menu/datasource/verifycard/customscript/index.jsx
@@ -1,7 +1,9 @@
 import React, {Component} from 'react'
 import PropTypes from 'prop-types'
 import { is, fromJS } from 'immutable'
-import { Form, Row, Col, Button, notification, Select, Tooltip } from 'antd'
+import { Form, Row, Col, Button, notification, Select, Tooltip, Modal } from 'antd'
+import Toast from 'antd-mobile/es/components/toast'
+import Dialog from 'antd-mobile/es/components/dialog'
 
 import Utils from '@/utils/utils.js'
 import CodeMirror from '@/templates/zshare/codemirror'
@@ -209,38 +211,83 @@
     })
   }
 
+  showError = (type) => {
+    let appType = sessionStorage.getItem('appType')
+
+    if (type === 'S') {
+      if (appType === 'mob') {
+        Toast.show({ icon: 'success', content: '鎵ц鎴愬姛锛�', duration: 3000 })
+      } else {
+        notification.success({
+          top: 92,
+          message: '鎵ц鎴愬姛锛�',
+          duration: 2
+        })
+      }
+      
+    } else if (type === 'Y') {
+      if (appType === 'mob') {
+        Dialog.alert({content: '鎵ц鎴愬姛锛�', confirmText: '鐭ラ亾浜�'})
+      } else {
+        Modal.success({
+          title: '鎵ц鎴愬姛锛�'
+        })
+      }
+    } else if (type === 'N') {
+      if (appType === 'mob') {
+        Dialog.alert({content: '鎵ц澶辫触锛�', confirmText: '鐭ラ亾浜�'})
+      } else {
+        Modal.error({
+          title: '鎵ц澶辫触锛�'
+        })
+      }
+    } else {
+      if (appType === 'mob') {
+        Toast.show({ icon: 'fail', content: '鎵ц澶辫触锛�', duration: 3000 })
+      } else {
+        notification.error({
+          top: 92,
+          message: '鎵ц澶辫触锛�',
+          duration: 10
+        })
+      }
+    }
+  }
+
   render() {
     const { systemScripts, setting } = this.props
     const { getFieldDecorator } = this.props.form
     const { usefulFields } = this.state
-    const formItemLayout = {
-      labelCol: {
-        xs: { span: 24 },
-        sm: { span: 8 }
-      },
-      wrapperCol: {
-        xs: { span: 24 },
-        sm: { span: 16 }
-      }
-    }
 
     let urlFields = window.GLOB.urlFields ? window.GLOB.urlFields.join(', ') : ''
 
     return (
-      <Form {...formItemLayout} className="modal-menu-setting-script">
+      <Form className="modal-source-setting-script">
         <Row gutter={24}>
-          {setting.tableName ? <Col span={8}>
-            <Form.Item label={'琛ㄥ悕'} style={{whiteSpace: 'nowrap', margin: 0}}>
+          {setting.tableName ? <Col span={5}>
+            <Form.Item label="琛ㄥ悕" style={{whiteSpace: 'nowrap', margin: 0}}>
               {setting.tableName}
             </Form.Item>
           </Col> : null}
-          <Col span={8}>
-            <Form.Item label={'鎶ラ敊瀛楁'} style={{margin: 0}}>
+          <Col span={19}>
+            <Form.Item label="鎶ラ敊瀛楁" style={{margin: 0}}>
               ErrorCode, retmsg
+              <span style={{marginLeft: 25}}>
+                鎴愬姛锛�
+                <span className="error-val" onClick={() => {this.showError('S')}}> S </span>銆�
+                <span className="error-val" onClick={() => {this.showError('Y')}}> Y </span>銆�
+                -1锛堜笉鎻愮ず锛�
+              </span>
+              <span style={{marginLeft: 20}}>
+                澶辫触锛�
+                <span className="error-val" onClick={() => {this.showError('N')}}> N </span>銆�
+                -2锛堜笉鎻愮ず锛夈��
+                <span className="error-val" onClick={() => {this.showError('')}}> 鍏朵粬 </span>
+              </span>
             </Form.Item>
           </Col>
-          <Col span={24} className="sqlfield">
-            <Form.Item label={'鍙敤瀛楁'}>
+          <Col span={24}>
+            <Form.Item label="鍙敤瀛楁" className="field-able">
               <Tooltip mouseLeaveDelay={0.3} mouseEnterDelay={0.3} placement="top" title={'鍏叡鍊硷紝璇锋寜鐓xxx@鏍煎紡浣跨敤銆�'}><span style={{color: '#1890ff'}}>BID, LoginUID, SessionUid, UserID, Appkey, time_id, typename</span></Tooltip>,&nbsp;
               <Tooltip mouseLeaveDelay={0.3} mouseEnterDelay={0.3} placement="top" title={'绯荤粺鍙橀噺锛岀郴缁熶細瀹氫箟鍙橀噺骞惰祴鍊笺��'}><span style={{color: '#fa8c16'}}>UserName, FullName, RoleID, mk_departmentcode, mk_organization, mk_user_type, mk_nation, mk_province, mk_city, mk_district, mk_address</span></Tooltip>,&nbsp;
               <Tooltip mouseLeaveDelay={0.3} mouseEnterDelay={0.3} placement="top" title={'鎺掑簭銆佸垎椤典互鍙婃悳绱㈡潯浠跺彉閲忥紝璇锋寜鐓xxx@鏍煎紡浣跨敤銆�'}>orderBy, pageSize, pageIndex{usefulFields ? ', ' + usefulFields : ''}</Tooltip>
@@ -248,7 +295,7 @@
             </Form.Item>
           </Col>
           <Col span={10} style={{width: '43%'}}>
-            <Form.Item label={'蹇嵎娣诲姞'} labelCol={{xs: { span: 24 }, sm: { span: 6 }}} wrapperCol={ {xs: { span: 24 }, sm: { span: 18 }} } style={{marginBottom: 0}}>
+            <Form.Item label="蹇嵎娣诲姞" labelCol={{xs: { span: 24 }, sm: { span: 6 }}} wrapperCol={ {xs: { span: 24 }, sm: { span: 18 }} } style={{marginBottom: 0}}>
               <Select
                 showSearch
                 filterOption={(input, option) => option.props.children.toLowerCase().indexOf(input.toLowerCase()) >= 0}
diff --git a/src/menu/datasource/verifycard/customscript/index.scss b/src/menu/datasource/verifycard/customscript/index.scss
index 2a1d2d8..f663222 100644
--- a/src/menu/datasource/verifycard/customscript/index.scss
+++ b/src/menu/datasource/verifycard/customscript/index.scss
@@ -1,34 +1,44 @@
-.modal-menu-setting-script {
-  .sqlfield {
-    .ant-form-item {
-      margin-bottom: 5px;
-    }
+.modal-source-setting-script {
+  .ant-form-item {
+    display: flex;
+    margin-bottom: 5px;
+  }
+  .ant-form-item-label {
+    width: 110px;
+    min-width: 110px;
+  }
+  .field-able {
     .ant-form-item-control {
-      line-height: 24px;
-    }
-    .ant-form-item-label {
       line-height: 25px;
-    }
-    .ant-form-item-children {
-      line-height: 22px;
-    }
-    .ant-col-sm-8 {
-      width: 10.5%;
-    }
-    .ant-col-sm-16 {
-      width: 89.5%;
+      padding-top: 7px;
     }
   }
-  .sql {
-    .ant-col-sm-8 {
-      width: 10.5%;
-    }
-    .ant-col-sm-16 {
-      width: 89.5%;
-      padding-top: 4px;
-    }
-    .CodeMirror {
-      height: 350px;
-    }
+  .ant-form-item-control-wrapper {
+    flex: auto;
+  }
+  .CodeMirror {
+    height: 350px;
+  }
+  .error-val {
+    display: inline-block;
+    margin-right: 5px;
+    color: #1890ff;
+    cursor: pointer;
+  }
+}
+.adm-mask {
+  z-index: 2000!important;
+}
+.adm-dialog {
+  z-index: 2000!important;
+  .adm-center-popup-body {
+    background-color: #ffffff;
+  }
+  .adm-center-popup-wrap {
+    z-index: 2000;
+  }
+  .adm-button {
+    color: #1890ff;
+    border-top: 1px solid #e9e9e9;
   }
 }
\ No newline at end of file
diff --git a/src/tabviews/custom/components/card/balcony/index.jsx b/src/tabviews/custom/components/card/balcony/index.jsx
index 9d68b21..119c77e 100644
--- a/src/tabviews/custom/components/card/balcony/index.jsx
+++ b/src/tabviews/custom/components/card/balcony/index.jsx
@@ -385,16 +385,32 @@
           this.timer && this.timer.stop()
         }
       }
+
+      if (result.message) {
+        if (result.ErrCode === 'Y') {
+          Modal.success({
+            title: result.message
+          })
+        } else if (result.ErrCode === 'S') {
+          notification.success({
+            top: 92,
+            message: result.message,
+            duration: 2
+          })
+        }
+      }
     } else {
       this.setState({
         loading: false
       })
       this.timer && this.timer.stop()
+      
+      if (!result.message) return
       if (result.ErrCode === 'N') {
         Modal.error({
           title: result.message,
         })
-      } else {
+      } else if (result.ErrCode !== '-2') {
         notification.error({
           top: 92,
           message: result.message,
diff --git a/src/tabviews/custom/components/card/data-card/index.jsx b/src/tabviews/custom/components/card/data-card/index.jsx
index 1d2e850..d83be3c 100644
--- a/src/tabviews/custom/components/card/data-card/index.jsx
+++ b/src/tabviews/custom/components/card/data-card/index.jsx
@@ -768,16 +768,31 @@
           this.timer && this.timer.stop()
         }
       }
+      if (result.message) {
+        if (result.ErrCode === 'Y') {
+          Modal.success({
+            title: result.message
+          })
+        } else if (result.ErrCode === 'S') {
+          notification.success({
+            top: 92,
+            message: result.message,
+            duration: 2
+          })
+        }
+      }
     } else {
       this.setState({
         loading: false
       })
       this.timer && this.timer.stop()
+
+      if (!result.message) return
       if (result.ErrCode === 'N') {
         Modal.error({
           title: result.message,
         })
-      } else {
+      } else if (result.ErrCode !== '-2') {
         notification.error({
           top: 92,
           message: result.message,
diff --git a/src/tabviews/custom/components/card/double-data-card/index.jsx b/src/tabviews/custom/components/card/double-data-card/index.jsx
index 3a19ad3..1fe03f6 100644
--- a/src/tabviews/custom/components/card/double-data-card/index.jsx
+++ b/src/tabviews/custom/components/card/double-data-card/index.jsx
@@ -703,16 +703,31 @@
           this.timer && this.timer.stop()
         }
       }
+      if (result.message) {
+        if (result.ErrCode === 'Y') {
+          Modal.success({
+            title: result.message
+          })
+        } else if (result.ErrCode === 'S') {
+          notification.success({
+            top: 92,
+            message: result.message,
+            duration: 2
+          })
+        }
+      }
     } else {
       this.setState({
         loading: false
       })
       this.timer && this.timer.stop()
+
+      if (!result.message) return
       if (result.ErrCode === 'N') {
         Modal.error({
           title: result.message,
         })
-      } else {
+      } else if (result.ErrCode !== '-2') {
         notification.error({
           top: 92,
           message: result.message,
diff --git a/src/tabviews/custom/components/card/prop-card/index.jsx b/src/tabviews/custom/components/card/prop-card/index.jsx
index 681652b..c8bc94d 100644
--- a/src/tabviews/custom/components/card/prop-card/index.jsx
+++ b/src/tabviews/custom/components/card/prop-card/index.jsx
@@ -461,16 +461,31 @@
           this.timer && this.timer.stop()
         }
       }
+      if (result.message) {
+        if (result.ErrCode === 'Y') {
+          Modal.success({
+            title: result.message
+          })
+        } else if (result.ErrCode === 'S') {
+          notification.success({
+            top: 92,
+            message: result.message,
+            duration: 2
+          })
+        }
+      }
     } else {
       this.setState({
         loading: false
       })
       this.timer && this.timer.stop()
+
+      if (!result.message) return
       if (result.ErrCode === 'N') {
         Modal.error({
           title: result.message,
         })
-      } else {
+      } else if (result.ErrCode !== '-2') {
         notification.error({
           top: 92,
           message: result.message,
diff --git a/src/tabviews/custom/components/card/table-card/index.jsx b/src/tabviews/custom/components/card/table-card/index.jsx
index f453ff7..f89d678 100644
--- a/src/tabviews/custom/components/card/table-card/index.jsx
+++ b/src/tabviews/custom/components/card/table-card/index.jsx
@@ -365,17 +365,31 @@
           this.timer && this.timer.stop()
         }
       }
+      if (result.message) {
+        if (result.ErrCode === 'Y') {
+          Modal.success({
+            title: result.message
+          })
+        } else if (result.ErrCode === 'S') {
+          notification.success({
+            top: 92,
+            message: result.message,
+            duration: 2
+          })
+        }
+      }
     } else {
       this.setState({
         loading: false
       })
       this.timer && this.timer.stop()
       
+      if (!result.message) return
       if (result.ErrCode === 'N') {
         Modal.error({
           title: result.message,
         })
-      } else {
+      } else if (result.ErrCode !== '-2') {
         notification.error({
           top: 92,
           message: result.message,
diff --git a/src/tabviews/custom/components/carousel/data-card/index.jsx b/src/tabviews/custom/components/carousel/data-card/index.jsx
index 590bc98..45c79ef 100644
--- a/src/tabviews/custom/components/carousel/data-card/index.jsx
+++ b/src/tabviews/custom/components/carousel/data-card/index.jsx
@@ -316,17 +316,31 @@
           this.timer && this.timer.stop()
         }
       }
+      if (result.message) {
+        if (result.ErrCode === 'Y') {
+          Modal.success({
+            title: result.message
+          })
+        } else if (result.ErrCode === 'S') {
+          notification.success({
+            top: 92,
+            message: result.message,
+            duration: 2
+          })
+        }
+      }
     } else {
       this.setState({
         loading: false
       })
       this.timer && this.timer.stop()
       
+      if (!result.message) return
       if (result.ErrCode === 'N') {
         Modal.error({
           title: result.message,
         })
-      } else {
+      } else if (result.ErrCode !== '-2') {
         notification.error({
           top: 92,
           message: result.message,
diff --git a/src/tabviews/custom/components/carousel/prop-card/index.jsx b/src/tabviews/custom/components/carousel/prop-card/index.jsx
index bfeba28..3084bba 100644
--- a/src/tabviews/custom/components/carousel/prop-card/index.jsx
+++ b/src/tabviews/custom/components/carousel/prop-card/index.jsx
@@ -337,17 +337,31 @@
           this.timer && this.timer.stop()
         }
       }
+      if (result.message) {
+        if (result.ErrCode === 'Y') {
+          Modal.success({
+            title: result.message
+          })
+        } else if (result.ErrCode === 'S') {
+          notification.success({
+            top: 92,
+            message: result.message,
+            duration: 2
+          })
+        }
+      }
     } else {
       this.setState({
         loading: false
       })
       this.timer && this.timer.stop()
       
+      if (!result.message) return
       if (result.ErrCode === 'N') {
         Modal.error({
           title: result.message,
         })
-      } else {
+      } else if (result.ErrCode !== '-2') {
         notification.error({
           top: 92,
           message: result.message,
diff --git a/src/tabviews/custom/components/chart/antv-G6/index.jsx b/src/tabviews/custom/components/chart/antv-G6/index.jsx
index f481f2e..d66d9c9 100644
--- a/src/tabviews/custom/components/chart/antv-G6/index.jsx
+++ b/src/tabviews/custom/components/chart/antv-G6/index.jsx
@@ -1114,16 +1114,30 @@
         this.data = result.data || []
         this.handleData()
       }
+      if (result.message) {
+        if (result.ErrCode === 'Y') {
+          Modal.success({
+            title: result.message
+          })
+        } else if (result.ErrCode === 'S') {
+          notification.success({
+            top: 92,
+            message: result.message,
+            duration: 2
+          })
+        }
+      }
     } else {
       this.setState({
         loading: false
       })
       
+      if (!result.message) return
       if (result.ErrCode === 'N') {
         Modal.error({
           title: result.message,
         })
-      } else {
+      } else if (result.ErrCode !== '-2') {
         notification.error({
           top: 92,
           message: result.message,
diff --git a/src/tabviews/custom/components/chart/antv-bar-line/index.jsx b/src/tabviews/custom/components/chart/antv-bar-line/index.jsx
index c76b83c..710b433 100644
--- a/src/tabviews/custom/components/chart/antv-bar-line/index.jsx
+++ b/src/tabviews/custom/components/chart/antv-bar-line/index.jsx
@@ -555,17 +555,31 @@
           this.timer && this.timer.stop()
         }
       }
+      if (result.message) {
+        if (result.ErrCode === 'Y') {
+          Modal.success({
+            title: result.message
+          })
+        } else if (result.ErrCode === 'S') {
+          notification.success({
+            top: 92,
+            message: result.message,
+            duration: 2
+          })
+        }
+      }
     } else {
       this.setState({
         loading: false
       })
       this.timer && this.timer.stop()
       
+      if (!result.message) return
       if (result.ErrCode === 'N') {
         Modal.error({
           title: result.message,
         })
-      } else {
+      } else if (result.ErrCode !== '-2') {
         notification.error({
           top: 92,
           message: result.message,
diff --git a/src/tabviews/custom/components/chart/antv-dashboard/index.jsx b/src/tabviews/custom/components/chart/antv-dashboard/index.jsx
index 5a584b0..3d69559 100644
--- a/src/tabviews/custom/components/chart/antv-dashboard/index.jsx
+++ b/src/tabviews/custom/components/chart/antv-dashboard/index.jsx
@@ -306,17 +306,31 @@
           this.timer && this.timer.stop()
         }
       }
+      if (result.message) {
+        if (result.ErrCode === 'Y') {
+          Modal.success({
+            title: result.message
+          })
+        } else if (result.ErrCode === 'S') {
+          notification.success({
+            top: 92,
+            message: result.message,
+            duration: 2
+          })
+        }
+      }
     } else {
       this.setState({
         loading: false
       })
       this.timer && this.timer.stop()
       
+      if (!result.message) return
       if (result.ErrCode === 'N') {
         Modal.error({
           title: result.message,
         })
-      } else {
+      } else if (result.ErrCode !== '-2') {
         notification.error({
           top: 92,
           message: result.message,
diff --git a/src/tabviews/custom/components/chart/antv-pie/index.jsx b/src/tabviews/custom/components/chart/antv-pie/index.jsx
index 46e5ccf..fcb3b7a 100644
--- a/src/tabviews/custom/components/chart/antv-pie/index.jsx
+++ b/src/tabviews/custom/components/chart/antv-pie/index.jsx
@@ -266,17 +266,31 @@
           this.timer && this.timer.stop()
         }
       }
+      if (result.message) {
+        if (result.ErrCode === 'Y') {
+          Modal.success({
+            title: result.message
+          })
+        } else if (result.ErrCode === 'S') {
+          notification.success({
+            top: 92,
+            message: result.message,
+            duration: 2
+          })
+        }
+      }
     } else {
       this.setState({
         loading: false
       })
       this.timer && this.timer.stop()
       
+      if (!result.message) return
       if (result.ErrCode === 'N') {
         Modal.error({
           title: result.message,
         })
-      } else {
+      } else if (result.ErrCode !== '-2') {
         notification.error({
           top: 92,
           message: result.message,
diff --git a/src/tabviews/custom/components/chart/antv-scatter/index.jsx b/src/tabviews/custom/components/chart/antv-scatter/index.jsx
index abc0f0c..405cdc5 100644
--- a/src/tabviews/custom/components/chart/antv-scatter/index.jsx
+++ b/src/tabviews/custom/components/chart/antv-scatter/index.jsx
@@ -297,17 +297,31 @@
           this.timer && this.timer.stop()
         }
       }
+      if (result.message) {
+        if (result.ErrCode === 'Y') {
+          Modal.success({
+            title: result.message
+          })
+        } else if (result.ErrCode === 'S') {
+          notification.success({
+            top: 92,
+            message: result.message,
+            duration: 2
+          })
+        }
+      }
     } else {
       this.setState({
         loading: false
       })
       this.timer && this.timer.stop()
       
+      if (!result.message) return
       if (result.ErrCode === 'N') {
         Modal.error({
           title: result.message,
         })
-      } else {
+      } else if (result.ErrCode !== '-2') {
         notification.error({
           top: 92,
           message: result.message,
diff --git a/src/tabviews/custom/components/chart/custom-chart/index.jsx b/src/tabviews/custom/components/chart/custom-chart/index.jsx
index f2b717e..6d9ee7b 100644
--- a/src/tabviews/custom/components/chart/custom-chart/index.jsx
+++ b/src/tabviews/custom/components/chart/custom-chart/index.jsx
@@ -4,7 +4,7 @@
 import { Chart } from '@antv/g2'
 import DataSet from '@antv/data-set'
 import * as echarts from 'echarts'
-import { Spin, Empty, notification } from 'antd'
+import { Spin, Empty, notification, Modal } from 'antd'
 
 import Api from '@/api'
 import Utils from '@/utils/utils.js'
@@ -287,16 +287,37 @@
           this.timer && this.timer.stop()
         }
       }
+      if (result.message) {
+        if (result.ErrCode === 'Y') {
+          Modal.success({
+            title: result.message
+          })
+        } else if (result.ErrCode === 'S') {
+          notification.success({
+            top: 92,
+            message: result.message,
+            duration: 2
+          })
+        }
+      }
     } else {
       this.setState({
         loading: false
       })
       this.timer && this.timer.stop()
-      notification.error({
-        top: 92,
-        message: result.message,
-        duration: 10
-      })
+      
+      if (!result.message) return
+      if (result.ErrCode === 'N') {
+        Modal.error({
+          title: result.message,
+        })
+      } else if (result.ErrCode !== '-2') {
+        notification.error({
+          top: 92,
+          message: result.message,
+          duration: 10
+        })
+      }
     }
   }
 
diff --git a/src/tabviews/custom/components/code/sand-box/index.jsx b/src/tabviews/custom/components/code/sand-box/index.jsx
index dc1a995..6bdaf07 100644
--- a/src/tabviews/custom/components/code/sand-box/index.jsx
+++ b/src/tabviews/custom/components/code/sand-box/index.jsx
@@ -1,7 +1,7 @@
 import React, {Component} from 'react'
 import PropTypes from 'prop-types'
 import { is, fromJS } from 'immutable'
-import { Spin, notification } from 'antd'
+import { Spin, notification, Modal } from 'antd'
 
 import Api from '@/api'
 import UtilsDM from '@/utils/utils-datamanage.js'
@@ -208,15 +208,37 @@
         result: _result,
         loading: false
       })
+
+      if (result.message) {
+        if (result.ErrCode === 'Y') {
+          Modal.success({
+            title: result.message
+          })
+        } else if (result.ErrCode === 'S') {
+          notification.success({
+            top: 92,
+            message: result.message,
+            duration: 2
+          })
+        }
+      }
     } else {
       this.setState({
         loading: false
       })
-      notification.error({
-        top: 92,
-        message: result.message,
-        duration: 10
-      })
+
+      if (!result.message) return
+      if (result.ErrCode === 'N') {
+        Modal.error({
+          title: result.message
+        })
+      } else if (result.ErrCode !== '-2') {
+        notification.error({
+          top: 92,
+          message: result.message,
+          duration: 10
+        })
+      }
     }
   }
 
diff --git a/src/tabviews/custom/components/editor/braft-editor/index.jsx b/src/tabviews/custom/components/editor/braft-editor/index.jsx
index a4084ac..891bfa6 100644
--- a/src/tabviews/custom/components/editor/braft-editor/index.jsx
+++ b/src/tabviews/custom/components/editor/braft-editor/index.jsx
@@ -1,7 +1,7 @@
 import React, {Component} from 'react'
 import PropTypes from 'prop-types'
 import { is, fromJS } from 'immutable'
-import { Spin, notification } from 'antd'
+import { Spin, notification, Modal } from 'antd'
 
 import asyncComponent from '@/utils/asyncComponent'
 import Api from '@/api'
@@ -204,15 +204,37 @@
         data: _data,
         loading: false
       })
+
+      if (result.message) {
+        if (result.ErrCode === 'Y') {
+          Modal.success({
+            title: result.message
+          })
+        } else if (result.ErrCode === 'S') {
+          notification.success({
+            top: 92,
+            message: result.message,
+            duration: 2
+          })
+        }
+      }
     } else {
       this.setState({
         loading: false
       })
-      notification.error({
-        top: 92,
-        message: result.message,
-        duration: 10
-      })
+      
+      if (!result.message) return
+      if (result.ErrCode === 'N') {
+        Modal.error({
+          title: result.message
+        })
+      } else if (result.ErrCode !== '-2') {
+        notification.error({
+          top: 92,
+          message: result.message,
+          duration: 10
+        })
+      }
     }
   }
 
diff --git a/src/tabviews/custom/components/form/simple-form/index.jsx b/src/tabviews/custom/components/form/simple-form/index.jsx
index 96156c2..9aa9dcb 100644
--- a/src/tabviews/custom/components/form/simple-form/index.jsx
+++ b/src/tabviews/custom/components/form/simple-form/index.jsx
@@ -255,16 +255,31 @@
       }, () => {
         this.setState({data: _data})
       })
+
+      if (result.message) {
+        if (result.ErrCode === 'Y') {
+          Modal.success({
+            title: result.message
+          })
+        } else if (result.ErrCode === 'S') {
+          notification.success({
+            top: 92,
+            message: result.message,
+            duration: 2
+          })
+        }
+      }
     } else {
       this.setState({
         loading: false,
       })
       
+      if (!result.message) return
       if (result.ErrCode === 'N') {
         Modal.error({
           title: result.message,
         })
-      } else {
+      } else if (result.ErrCode !== '-2') {
         notification.error({
           top: 92,
           message: result.message,
diff --git a/src/tabviews/custom/components/form/step-form/index.jsx b/src/tabviews/custom/components/form/step-form/index.jsx
index 561a5b7..50d09cc 100644
--- a/src/tabviews/custom/components/form/step-form/index.jsx
+++ b/src/tabviews/custom/components/form/step-form/index.jsx
@@ -333,16 +333,31 @@
       }, () => {
         this.setState({group: _group})
       })
+
+      if (result.message) {
+        if (result.ErrCode === 'Y') {
+          Modal.success({
+            title: result.message
+          })
+        } else if (result.ErrCode === 'S') {
+          notification.success({
+            top: 92,
+            message: result.message,
+            duration: 2
+          })
+        }
+      }
     } else {
       this.setState({
         loading: false,
       })
       
+      if (!result.message) return
       if (result.ErrCode === 'N') {
         Modal.error({
           title: result.message,
         })
-      } else {
+      } else if (result.ErrCode !== '-2') {
         notification.error({
           top: 92,
           message: result.message,
diff --git a/src/tabviews/custom/components/form/tab-form/index.jsx b/src/tabviews/custom/components/form/tab-form/index.jsx
index 0538eed..4909bf9 100644
--- a/src/tabviews/custom/components/form/tab-form/index.jsx
+++ b/src/tabviews/custom/components/form/tab-form/index.jsx
@@ -271,16 +271,31 @@
       }, () => {
         this.setState({data: _data})
       })
+
+      if (result.message) {
+        if (result.ErrCode === 'Y') {
+          Modal.success({
+            title: result.message
+          })
+        } else if (result.ErrCode === 'S') {
+          notification.success({
+            top: 92,
+            message: result.message,
+            duration: 2
+          })
+        }
+      }
     } else {
       this.setState({
         loading: false,
       })
       
+      if (!result.message) return
       if (result.ErrCode === 'N') {
         Modal.error({
           title: result.message,
         })
-      } else {
+      } else if (result.ErrCode !== '-2') {
         notification.error({
           top: 92,
           message: result.message,
diff --git a/src/tabviews/custom/components/iframe/index.jsx b/src/tabviews/custom/components/iframe/index.jsx
index 44b345a..bdd506d 100644
--- a/src/tabviews/custom/components/iframe/index.jsx
+++ b/src/tabviews/custom/components/iframe/index.jsx
@@ -198,12 +198,27 @@
         linkUrl: _data[config.wrap.linkField] || '',
         data: _data
       })
+
+      if (result.message) {
+        if (result.ErrCode === 'Y') {
+          Modal.success({
+            title: result.message
+          })
+        } else if (result.ErrCode === 'S') {
+          notification.success({
+            top: 92,
+            message: result.message,
+            duration: 2
+          })
+        }
+      }
     } else {
+      if (!result.message) return
       if (result.ErrCode === 'N') {
         Modal.error({
           title: result.message,
         })
-      } else {
+      } else if (result.ErrCode !== '-2') {
         notification.error({
           top: 92,
           message: result.message,
diff --git a/src/tabviews/custom/components/interfaces/interItem/index.jsx b/src/tabviews/custom/components/interfaces/interItem/index.jsx
index 3ba9519..7e8c885 100644
--- a/src/tabviews/custom/components/interfaces/interItem/index.jsx
+++ b/src/tabviews/custom/components/interfaces/interItem/index.jsx
@@ -132,15 +132,30 @@
       if (config.setting.loadlevel === 'init') {
         MKEmitter.emit('interFinish', config.MenuID, config.uuid)
       }
+
+      if (result.message) {
+        if (result.ErrCode === 'Y') {
+          Modal.success({
+            title: result.message
+          })
+        } else if (result.ErrCode === 'S') {
+          notification.success({
+            top: 92,
+            message: result.message,
+            duration: 2
+          })
+        }
+      }
     } else {
       this.loading = false
       this.timer && this.timer.stop()
       
+      if (!result.message) return
       if (result.ErrCode === 'N') {
         Modal.error({
           title: result.message,
         })
-      } else {
+      } else if (result.ErrCode !== '-2') {
         notification.error({
           top: 92,
           message: result.message,
diff --git a/src/tabviews/custom/components/table/base-table/index.jsx b/src/tabviews/custom/components/table/base-table/index.jsx
index 9658a04..d5d7bf5 100644
--- a/src/tabviews/custom/components/table/base-table/index.jsx
+++ b/src/tabviews/custom/components/table/base-table/index.jsx
@@ -219,6 +219,20 @@
           MKEmitter.emit('autoMaticOver', config.MenuID)
         }
       }
+
+      if (result.message) {
+        if (result.ErrCode === 'Y') {
+          Modal.success({
+            title: result.message
+          })
+        } else if (result.ErrCode === 'S') {
+          notification.success({
+            top: 92,
+            message: result.message,
+            duration: 2
+          })
+        }
+      }
     } else {
       this.setState({
         loading: false
@@ -228,11 +242,12 @@
         MKEmitter.emit('autoMaticError', config.MenuID)
       }
       
+      if (!result.message) return
       if (result.ErrCode === 'N') {
         Modal.error({
           title: result.message,
         })
-      } else {
+      } else if (result.ErrCode !== '-2') {
         notification.error({
           top: 92,
           message: result.message,
diff --git a/src/tabviews/custom/components/table/edit-table/index.jsx b/src/tabviews/custom/components/table/edit-table/index.jsx
index f0cfdb3..ea9d56a 100644
--- a/src/tabviews/custom/components/table/edit-table/index.jsx
+++ b/src/tabviews/custom/components/table/edit-table/index.jsx
@@ -262,16 +262,31 @@
       })
 
       MKEmitter.emit('transferData', config.uuid, data)
+
+      if (result.message) {
+        if (result.ErrCode === 'Y') {
+          Modal.success({
+            title: result.message
+          })
+        } else if (result.ErrCode === 'S') {
+          notification.success({
+            top: 92,
+            message: result.message,
+            duration: 2
+          })
+        }
+      }
     } else {
       this.setState({
         loading: false
       })
       
+      if (!result.message) return
       if (result.ErrCode === 'N') {
         Modal.error({
           title: result.message,
         })
-      } else {
+      } else if (result.ErrCode !== '-2') {
         notification.error({
           top: 92,
           message: result.message,
diff --git a/src/tabviews/custom/components/table/normal-table/index.jsx b/src/tabviews/custom/components/table/normal-table/index.jsx
index dc99a3a..3d87ac8 100644
--- a/src/tabviews/custom/components/table/normal-table/index.jsx
+++ b/src/tabviews/custom/components/table/normal-table/index.jsx
@@ -294,17 +294,32 @@
           this.timer && this.timer.stop()
         }
       }
+
+      if (result.message) {
+        if (result.ErrCode === 'Y') {
+          Modal.success({
+            title: result.message
+          })
+        } else if (result.ErrCode === 'S') {
+          notification.success({
+            top: 92,
+            message: result.message,
+            duration: 2
+          })
+        }
+      }
     } else {
       this.setState({
         loading: false
       })
       this.timer && this.timer.stop()
       
+      if (!result.message) return
       if (result.ErrCode === 'N') {
         Modal.error({
           title: result.message,
         })
-      } else {
+      } else if (result.ErrCode !== '-2') {
         notification.error({
           top: 92,
           message: result.message,
diff --git a/src/tabviews/custom/components/timeline/normal-timeline/index.jsx b/src/tabviews/custom/components/timeline/normal-timeline/index.jsx
index 5126d9e..d629c77 100644
--- a/src/tabviews/custom/components/timeline/normal-timeline/index.jsx
+++ b/src/tabviews/custom/components/timeline/normal-timeline/index.jsx
@@ -358,17 +358,32 @@
           this.timer && this.timer.stop()
         }
       }
+
+      if (result.message) {
+        if (result.ErrCode === 'Y') {
+          Modal.success({
+            title: result.message
+          })
+        } else if (result.ErrCode === 'S') {
+          notification.success({
+            top: 92,
+            message: result.message,
+            duration: 2
+          })
+        }
+      }
     } else {
       this.setState({
         loading: false
       })
       this.timer && this.timer.stop()
       
+      if (!result.message) return
       if (result.ErrCode === 'N') {
         Modal.error({
           title: result.message,
         })
-      } else {
+      } else if (result.ErrCode !== '-2') {
         notification.error({
           top: 92,
           message: result.message,
diff --git a/src/tabviews/custom/components/tree/antd-tree/index.jsx b/src/tabviews/custom/components/tree/antd-tree/index.jsx
index 2d63a92..4bde860 100644
--- a/src/tabviews/custom/components/tree/antd-tree/index.jsx
+++ b/src/tabviews/custom/components/tree/antd-tree/index.jsx
@@ -277,17 +277,32 @@
           this.timer && this.timer.stop()
         }
       }
+
+      if (result.message) {
+        if (result.ErrCode === 'Y') {
+          Modal.success({
+            title: result.message
+          })
+        } else if (result.ErrCode === 'S') {
+          notification.success({
+            top: 92,
+            message: result.message,
+            duration: 2
+          })
+        }
+      }
     } else {
       this.setState({
         loading: false
       })
       this.timer && this.timer.stop()
       
+      if (!result.message) return
       if (result.ErrCode === 'N') {
         Modal.error({
           title: result.message,
         })
-      } else {
+      } else if (result.ErrCode !== '-2') {
         notification.error({
           top: 92,
           message: result.message,
diff --git a/src/tabviews/custom/index.jsx b/src/tabviews/custom/index.jsx
index aa1aab3..581fc64 100644
--- a/src/tabviews/custom/index.jsx
+++ b/src/tabviews/custom/index.jsx
@@ -1,7 +1,7 @@
 import React, {Component} from 'react'
 import PropTypes from 'prop-types'
 import { is, fromJS } from 'immutable'
-import { notification, Spin, Row, Col } from 'antd'
+import { notification, Spin, Row, Col, Modal } from 'antd'
 
 import Api from '@/api'
 import zhCN from '@/locales/zh-CN/main.js'
@@ -1087,6 +1087,20 @@
 
     Api.genericInterface(param).then(result => {
       if (result.status) {
+        if (result.message) {
+          if (result.ErrCode === 'Y') {
+            Modal.success({
+              title: result.message
+            })
+          } else if (result.ErrCode === 'S') {
+            notification.success({
+              top: 92,
+              message: result.message,
+              duration: 2
+            })
+          }
+        }
+
         delete result.status
         delete result.message
         delete result.ErrMesg
@@ -1111,11 +1125,19 @@
           data: '',
           loading: false
         })
-        notification.error({
-          top: 92,
-          message: result.message,
-          duration: 10
-        })
+        
+        if (!result.message) return
+        if (result.ErrCode === 'N') {
+          Modal.error({
+            title: result.message,
+          })
+        } else if (result.ErrCode !== '-2') {
+          notification.error({
+            top: 92,
+            message: result.message,
+            duration: 10
+          })
+        }
       }
     })
   }
diff --git a/src/tabviews/custom/popview/index.jsx b/src/tabviews/custom/popview/index.jsx
index 0093459..8be4069 100644
--- a/src/tabviews/custom/popview/index.jsx
+++ b/src/tabviews/custom/popview/index.jsx
@@ -1,7 +1,7 @@
 import React, {Component} from 'react'
 import PropTypes from 'prop-types'
 import { is, fromJS } from 'immutable'
-import { notification, Spin, Row, Col } from 'antd'
+import { notification, Spin, Row, Col, Modal } from 'antd'
 
 import Api from '@/api'
 import zhCN from '@/locales/zh-CN/main.js'
@@ -797,6 +797,20 @@
 
     Api.genericInterface(param).then(result => {
       if (result.status) {
+        if (result.message) {
+          if (result.ErrCode === 'Y') {
+            Modal.success({
+              title: result.message
+            })
+          } else if (result.ErrCode === 'S') {
+            notification.success({
+              top: 92,
+              message: result.message,
+              duration: 2
+            })
+          }
+        }
+
         delete result.status
         delete result.message
         delete result.ErrMesg
@@ -821,11 +835,19 @@
           data: '',
           loading: false
         })
-        notification.error({
-          top: 92,
-          message: result.message,
-          duration: 10
-        })
+
+        if (!result.message) return
+        if (result.ErrCode === 'N') {
+          Modal.error({
+            title: result.message,
+          })
+        } else if (result.ErrCode !== '-2') {
+          notification.error({
+            top: 92,
+            message: result.message,
+            duration: 10
+          })
+        }
       }
     })
   }

--
Gitblit v1.8.0