use tailwind css
diff --git a/index.html b/index.html
index 40144b3..de4a318 100644
--- a/index.html
+++ b/index.html
@@ -19,12 +19,14 @@
             }
             #header .logo {
                 height: 35px;
-                margin-top: 7px;
-                margin-left: 20px;;
+                position: relative;
+                top: 7px;
+                left: 20px;
             }
             #header .lang {
-                float: right;
-                margin-right: 20px;
+                position: absolute;
+                top: 0;
+                right: 20px;
                 line-height: 50px;
             }
             #page-main {
@@ -34,6 +36,9 @@
                 right: 0;
                 bottom: 0;
             }
+            #echarts-spa-app {
+                height: 100%;
+            }
         </style>
     </head>
     <body>
diff --git a/package-lock.json b/package-lock.json
index f47f098..d067e4d 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -47,6 +47,15 @@
             "integrity": "sha1-Blsq9iM/50dNRII+PeuJckr0K18=",
             "dev": true
         },
+        "@fullhuman/postcss-purgecss": {
+            "version": "3.1.3",
+            "resolved": "https://registry.npmjs.org/@fullhuman/postcss-purgecss/-/postcss-purgecss-3.1.3.tgz",
+            "integrity": "sha512-kwOXw8fZ0Lt1QmeOOrd+o4Ibvp4UTEBFQbzvWldjlKv5n+G9sXfIPn1hh63IQIL8K8vbvv1oYMJiIUbuy9bGaA==",
+            "dev": true,
+            "requires": {
+                "purgecss": "^3.1.3"
+            }
+        },
         "@intlify/core-base": {
             "version": "9.1.6",
             "resolved": "https://registry.npm.taobao.org/@intlify/core-base/download/@intlify/core-base-9.1.6.tgz",
@@ -291,6 +300,99 @@
                 "defer-to-connect": "^1.0.1"
             }
         },
+        "@tailwindcss/postcss7-compat": {
+            "version": "2.1.4",
+            "resolved": "https://registry.npmjs.org/@tailwindcss/postcss7-compat/-/postcss7-compat-2.1.4.tgz",
+            "integrity": "sha512-KYRj/AGNwE4tPf02IvT+J36Twlrwg/OJJuSckSupX2T+xIOHSXPugNJZ7Stn9F67hh/qH+2Y2HXK6vpBadW6qw==",
+            "dev": true,
+            "requires": {
+                "@fullhuman/postcss-purgecss": "^3.1.3",
+                "autoprefixer": "^9",
+                "bytes": "^3.0.0",
+                "chalk": "^4.1.0",
+                "chokidar": "^3.5.1",
+                "color": "^3.1.3",
+                "detective": "^5.2.0",
+                "didyoumean": "^1.2.1",
+                "dlv": "^1.1.3",
+                "fast-glob": "^3.2.5",
+                "fs-extra": "^9.1.0",
+                "html-tags": "^3.1.0",
+                "lodash": "^4.17.21",
+                "lodash.topath": "^4.5.2",
+                "modern-normalize": "^1.0.0",
+                "node-emoji": "^1.8.1",
+                "normalize-path": "^3.0.0",
+                "object-hash": "^2.1.1",
+                "parse-glob": "^3.0.4",
+                "postcss": "^7",
+                "postcss-functions": "^3",
+                "postcss-js": "^2",
+                "postcss-nested": "^4",
+                "postcss-selector-parser": "^6.0.4",
+                "postcss-value-parser": "^4.1.0",
+                "pretty-hrtime": "^1.0.3",
+                "quick-lru": "^5.1.1",
+                "reduce-css-calc": "^2.1.8",
+                "resolve": "^1.20.0"
+            },
+            "dependencies": {
+                "chalk": {
+                    "version": "4.1.1",
+                    "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
+                    "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
+                    "dev": true,
+                    "requires": {
+                        "ansi-styles": "^4.1.0",
+                        "supports-color": "^7.1.0"
+                    }
+                },
+                "fs-extra": {
+                    "version": "9.1.0",
+                    "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
+                    "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
+                    "dev": true,
+                    "requires": {
+                        "at-least-node": "^1.0.0",
+                        "graceful-fs": "^4.2.0",
+                        "jsonfile": "^6.0.1",
+                        "universalify": "^2.0.0"
+                    }
+                },
+                "jsonfile": {
+                    "version": "6.1.0",
+                    "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
+                    "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
+                    "dev": true,
+                    "requires": {
+                        "graceful-fs": "^4.1.6",
+                        "universalify": "^2.0.0"
+                    }
+                },
+                "postcss-nested": {
+                    "version": "4.2.3",
+                    "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-4.2.3.tgz",
+                    "integrity": "sha512-rOv0W1HquRCamWy2kFl3QazJMMe1ku6rCFoAAH+9AcxdbpDeBr6k968MLWuLjvjMcGEip01ak09hKOEgpK9hvw==",
+                    "dev": true,
+                    "requires": {
+                        "postcss": "^7.0.32",
+                        "postcss-selector-parser": "^6.0.2"
+                    }
+                },
+                "quick-lru": {
+                    "version": "5.1.1",
+                    "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz",
+                    "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==",
+                    "dev": true
+                },
+                "universalify": {
+                    "version": "2.0.0",
+                    "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
+                    "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
+                    "dev": true
+                }
+            }
+        },
         "@types/glob": {
             "version": "7.1.3",
             "resolved": "https://registry.nlark.com/@types/glob/download/@types/glob-7.1.3.tgz",
@@ -443,6 +545,19 @@
                 "postcss-modules": "^4.0.0",
                 "postcss-selector-parser": "^6.0.4",
                 "source-map": "^0.6.1"
+            },
+            "dependencies": {
+                "postcss": {
+                    "version": "8.3.0",
+                    "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.0.tgz",
+                    "integrity": "sha512-+ogXpdAjWGa+fdYY5BQ96V/6tAo+TdSSIMP5huJBIygdWwKtVoB5JWZ7yUd4xZ8r+8Kvvx4nyg/PQ071H4UtcQ==",
+                    "dev": true,
+                    "requires": {
+                        "colorette": "^1.2.2",
+                        "nanoid": "^3.1.23",
+                        "source-map-js": "^0.6.2"
+                    }
+                }
             }
         },
         "@vue/compiler-ssr": {
@@ -498,6 +613,23 @@
             "integrity": "sha1-/q7SVZc9LndVW4PbwIhRpsY1IPo=",
             "dev": true
         },
+        "acorn-node": {
+            "version": "1.8.2",
+            "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz",
+            "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==",
+            "dev": true,
+            "requires": {
+                "acorn": "^7.0.0",
+                "acorn-walk": "^7.0.0",
+                "xtend": "^4.0.2"
+            }
+        },
+        "acorn-walk": {
+            "version": "7.2.0",
+            "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz",
+            "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==",
+            "dev": true
+        },
         "ansi-align": {
             "version": "3.0.0",
             "resolved": "https://registry.npm.taobao.org/ansi-align/download/ansi-align-3.0.0.tgz",
@@ -610,6 +742,27 @@
             "resolved": "https://registry.nlark.com/async-validator/download/async-validator-3.5.2.tgz",
             "integrity": "sha1-aOhmqWgk6LJpT/eoMcGiXETV5QA="
         },
+        "at-least-node": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz",
+            "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==",
+            "dev": true
+        },
+        "autoprefixer": {
+            "version": "9.8.6",
+            "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.6.tgz",
+            "integrity": "sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg==",
+            "dev": true,
+            "requires": {
+                "browserslist": "^4.12.0",
+                "caniuse-lite": "^1.0.30001109",
+                "colorette": "^1.2.1",
+                "normalize-range": "^0.1.2",
+                "num2fraction": "^1.2.2",
+                "postcss": "^7.0.32",
+                "postcss-value-parser": "^4.1.0"
+            }
+        },
         "babel-walk": {
             "version": "3.0.0-canary-5",
             "resolved": "https://registry.npm.taobao.org/babel-walk/download/babel-walk-3.0.0-canary-5.tgz",
@@ -768,12 +921,31 @@
                 "fill-range": "^7.0.1"
             }
         },
+        "browserslist": {
+            "version": "4.16.6",
+            "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz",
+            "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==",
+            "dev": true,
+            "requires": {
+                "caniuse-lite": "^1.0.30001219",
+                "colorette": "^1.2.2",
+                "electron-to-chromium": "^1.3.723",
+                "escalade": "^3.1.1",
+                "node-releases": "^1.1.71"
+            }
+        },
         "buffer-from": {
             "version": "1.1.1",
             "resolved": "http://registry.npm.taobao.org/buffer-from/download/buffer-from-1.1.1.tgz",
             "integrity": "sha1-MnE7wCj3XAL9txDXx7zsHyxgcO8=",
             "dev": true
         },
+        "bytes": {
+            "version": "3.1.0",
+            "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
+            "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==",
+            "dev": true
+        },
         "cacheable-request": {
             "version": "6.1.0",
             "resolved": "https://registry.npm.taobao.org/cacheable-request/download/cacheable-request-6.1.0.tgz",
@@ -822,6 +994,12 @@
             "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
             "dev": true
         },
+        "camelcase-css": {
+            "version": "2.0.1",
+            "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
+            "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==",
+            "dev": true
+        },
         "camelcase-keys": {
             "version": "4.2.0",
             "resolved": "https://registry.nlark.com/camelcase-keys/download/camelcase-keys-4.2.0.tgz",
@@ -833,6 +1011,12 @@
                 "quick-lru": "^1.0.0"
             }
         },
+        "caniuse-lite": {
+            "version": "1.0.30001233",
+            "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001233.tgz",
+            "integrity": "sha512-BmkbxLfStqiPA7IEzQpIk0UFZFf3A4E6fzjPJ6OR+bFC2L8ES9J8zGA/asoi47p8XDVkev+WJo2I2Nc8c/34Yg==",
+            "dev": true
+        },
         "ccount": {
             "version": "1.1.0",
             "resolved": "https://registry.npm.taobao.org/ccount/download/ccount-1.1.0.tgz",
@@ -967,6 +1151,33 @@
             "integrity": "sha1-5jYpwAFmZXkgYNu+t5xCI50sUoc=",
             "dev": true
         },
+        "color": {
+            "version": "3.1.3",
+            "resolved": "https://registry.npmjs.org/color/-/color-3.1.3.tgz",
+            "integrity": "sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ==",
+            "dev": true,
+            "requires": {
+                "color-convert": "^1.9.1",
+                "color-string": "^1.5.4"
+            },
+            "dependencies": {
+                "color-convert": {
+                    "version": "1.9.3",
+                    "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+                    "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+                    "dev": true,
+                    "requires": {
+                        "color-name": "1.1.3"
+                    }
+                },
+                "color-name": {
+                    "version": "1.1.3",
+                    "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+                    "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+                    "dev": true
+                }
+            }
+        },
         "color-convert": {
             "version": "2.0.1",
             "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz",
@@ -982,10 +1193,20 @@
             "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=",
             "dev": true
         },
+        "color-string": {
+            "version": "1.5.5",
+            "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.5.tgz",
+            "integrity": "sha512-jgIoum0OfQfq9Whcfc2z/VhCNcmQjWbey6qBX0vqt7YICflUmBCh9E9CiQD5GSJ+Uehixm3NUwHVhqUAWRivZg==",
+            "dev": true,
+            "requires": {
+                "color-name": "^1.0.0",
+                "simple-swizzle": "^0.2.2"
+            }
+        },
         "colorette": {
             "version": "1.2.2",
-            "resolved": "https://registry.npm.taobao.org/colorette/download/colorette-1.2.2.tgz?cache=0&sync_timestamp=1614259647923&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcolorette%2Fdownload%2Fcolorette-1.2.2.tgz",
-            "integrity": "sha1-y8x51emcrqLb8Q6zom/Ys+as+pQ=",
+            "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz",
+            "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==",
             "dev": true
         },
         "colors": {
@@ -1000,6 +1221,12 @@
             "integrity": "sha1-YyuAthF4Z6FY8QgK1Jiy++fj9eo=",
             "dev": true
         },
+        "commander": {
+            "version": "6.2.1",
+            "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz",
+            "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==",
+            "dev": true
+        },
         "concat-map": {
             "version": "0.0.1",
             "resolved": "http://registry.npm.taobao.org/concat-map/download/concat-map-0.0.1.tgz",
@@ -1092,6 +1319,12 @@
             "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=",
             "dev": true
         },
+        "css-unit-converter": {
+            "version": "1.1.2",
+            "resolved": "https://registry.npmjs.org/css-unit-converter/-/css-unit-converter-1.1.2.tgz",
+            "integrity": "sha512-IiJwMC8rdZE0+xiEZHeru6YoONC4rfPMqGm2W85jMIbkFvv5nFTwJVFHam2eFrN6txmoUYFAFXiv8ICVeTO0MA==",
+            "dev": true
+        },
         "cssesc": {
             "version": "3.0.0",
             "resolved": "https://registry.npm.taobao.org/cssesc/download/cssesc-3.0.0.tgz",
@@ -1171,6 +1404,29 @@
             "integrity": "sha1-MxrgUMCNz3ifjIOnuB8O2U9KxZE=",
             "dev": true
         },
+        "defined": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz",
+            "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=",
+            "dev": true
+        },
+        "detective": {
+            "version": "5.2.0",
+            "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz",
+            "integrity": "sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==",
+            "dev": true,
+            "requires": {
+                "acorn-node": "^1.6.1",
+                "defined": "^1.0.0",
+                "minimist": "^1.1.1"
+            }
+        },
+        "didyoumean": {
+            "version": "1.2.1",
+            "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.1.tgz",
+            "integrity": "sha1-6S7f2tplN9SE1zwBcv0eugxJdv8=",
+            "dev": true
+        },
         "dir-glob": {
             "version": "3.0.1",
             "resolved": "https://registry.npm.taobao.org/dir-glob/download/dir-glob-3.0.1.tgz",
@@ -1180,6 +1436,12 @@
                 "path-type": "^4.0.0"
             }
         },
+        "dlv": {
+            "version": "1.1.3",
+            "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
+            "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==",
+            "dev": true
+        },
         "doctypes": {
             "version": "1.1.0",
             "resolved": "https://registry.npm.taobao.org/doctypes/download/doctypes-1.1.0.tgz",
@@ -1238,6 +1500,12 @@
             "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=",
             "dev": true
         },
+        "electron-to-chromium": {
+            "version": "1.3.747",
+            "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.747.tgz",
+            "integrity": "sha512-+K1vnBc08GNYxCWwdRe9o3Ml30DhsNyK/qIl/NE1Dic+qCy9ZREcqGNiV4jiLiAdALK1DUG3pakJHGkJUd9QQw==",
+            "dev": true
+        },
         "element-plus": {
             "version": "1.0.2-beta.44",
             "resolved": "https://registry.nlark.com/element-plus/download/element-plus-1.0.2-beta.44.tgz",
@@ -1305,6 +1573,12 @@
             "integrity": "sha1-xCU09jLhZRIGcdZNtniDY0MztLg=",
             "dev": true
         },
+        "escalade": {
+            "version": "3.1.1",
+            "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
+            "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
+            "dev": true
+        },
         "escape-string-regexp": {
             "version": "1.0.5",
             "resolved": "https://registry.npm.taobao.org/escape-string-regexp/download/escape-string-regexp-1.0.5.tgz?cache=0&sync_timestamp=1618677243201&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fescape-string-regexp%2Fdownload%2Fescape-string-regexp-1.0.5.tgz",
@@ -1481,6 +1755,42 @@
                 "path-is-absolute": "^1.0.0"
             }
         },
+        "glob-base": {
+            "version": "0.3.0",
+            "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz",
+            "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=",
+            "dev": true,
+            "requires": {
+                "glob-parent": "^2.0.0",
+                "is-glob": "^2.0.0"
+            },
+            "dependencies": {
+                "glob-parent": {
+                    "version": "2.0.0",
+                    "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz",
+                    "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=",
+                    "dev": true,
+                    "requires": {
+                        "is-glob": "^2.0.0"
+                    }
+                },
+                "is-extglob": {
+                    "version": "1.0.0",
+                    "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
+                    "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
+                    "dev": true
+                },
+                "is-glob": {
+                    "version": "2.0.1",
+                    "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
+                    "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
+                    "dev": true,
+                    "requires": {
+                        "is-extglob": "^1.0.0"
+                    }
+                }
+            }
+        },
         "glob-parent": {
             "version": "5.1.2",
             "resolved": "https://registry.nlark.com/glob-parent/download/glob-parent-5.1.2.tgz?cache=0&sync_timestamp=1620073321855&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fglob-parent%2Fdownload%2Fglob-parent-5.1.2.tgz",
@@ -1639,6 +1949,12 @@
             "integrity": "sha1-3/wL+aIcAiCQkPKqaUKeFBTa8/k=",
             "dev": true
         },
+        "html-tags": {
+            "version": "3.1.0",
+            "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.1.0.tgz",
+            "integrity": "sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg==",
+            "dev": true
+        },
         "html-void-elements": {
             "version": "1.0.5",
             "resolved": "https://registry.npm.taobao.org/html-void-elements/download/html-void-elements-1.0.5.tgz",
@@ -1800,6 +2116,12 @@
             "integrity": "sha1-M+6r4jz+hvFL3kQIoCwM+4U6zao=",
             "dev": true
         },
+        "is-dotfile": {
+            "version": "1.0.3",
+            "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz",
+            "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=",
+            "dev": true
+        },
         "is-empty": {
             "version": "1.2.0",
             "resolved": "https://registry.npm.taobao.org/is-empty/download/is-empty-1.2.0.tgz",
@@ -2102,6 +2424,18 @@
             "integrity": "sha1-vkF32yiajMw8CZDx2ya1si/BVUw=",
             "dev": true
         },
+        "lodash.toarray": {
+            "version": "4.4.0",
+            "resolved": "https://registry.npmjs.org/lodash.toarray/-/lodash.toarray-4.4.0.tgz",
+            "integrity": "sha1-JMS/zWsvuji/0FlNsRedjptlZWE=",
+            "dev": true
+        },
+        "lodash.topath": {
+            "version": "4.5.2",
+            "resolved": "https://registry.npmjs.org/lodash.topath/-/lodash.topath-4.5.2.tgz",
+            "integrity": "sha1-NhY1Hzu6YZlKCTGYlmC9AyVP0Ak=",
+            "dev": true
+        },
         "loud-rejection": {
             "version": "1.6.0",
             "resolved": "https://registry.npm.taobao.org/loud-rejection/download/loud-rejection-1.6.0.tgz",
@@ -2235,6 +2569,12 @@
             "resolved": "https://registry.nlark.com/mitt/download/mitt-2.1.0.tgz",
             "integrity": "sha1-90BXfCMXbGIFsSGylzUU6t4bIjA="
         },
+        "modern-normalize": {
+            "version": "1.1.0",
+            "resolved": "https://registry.npmjs.org/modern-normalize/-/modern-normalize-1.1.0.tgz",
+            "integrity": "sha512-2lMlY1Yc1+CUy0gw4H95uNN7vjbpoED7NNRSBHE25nWfLBdmMzFCsPshlzbxHz+gYMcBEUN8V4pU16prcdPSgA==",
+            "dev": true
+        },
         "ms": {
             "version": "2.1.3",
             "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.3.tgz?cache=0&sync_timestamp=1607433905701&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.1.3.tgz",
@@ -2243,8 +2583,23 @@
         },
         "nanoid": {
             "version": "3.1.23",
-            "resolved": "https://registry.nlark.com/nanoid/download/nanoid-3.1.23.tgz",
-            "integrity": "sha1-90QIbOfCvEfuCoRyV01ceOQYOoE=",
+            "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz",
+            "integrity": "sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==",
+            "dev": true
+        },
+        "node-emoji": {
+            "version": "1.10.0",
+            "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.10.0.tgz",
+            "integrity": "sha512-Yt3384If5H6BYGVHiHwTL+99OzJKHhgp82S8/dktEK73T26BazdgZ4JZh92xSVtGNJvz9UbXdNAc5hcrXV42vw==",
+            "dev": true,
+            "requires": {
+                "lodash.toarray": "^4.4.0"
+            }
+        },
+        "node-releases": {
+            "version": "1.1.72",
+            "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.72.tgz",
+            "integrity": "sha512-LLUo+PpH3dU6XizX3iVoubUNheF/owjXCZZ5yACDxNnPtgFuludV1ZL3ayK1kVep42Rmm0+R9/Y60NQbZ2bifw==",
             "dev": true
         },
         "node-static": {
@@ -2276,6 +2631,12 @@
             "integrity": "sha1-Dc1p/yOhybEf0JeDFmRKA4ghamU=",
             "dev": true
         },
+        "normalize-range": {
+            "version": "0.1.2",
+            "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
+            "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=",
+            "dev": true
+        },
         "normalize-url": {
             "version": "4.5.0",
             "resolved": "https://registry.npm.taobao.org/normalize-url/download/normalize-url-4.5.0.tgz",
@@ -2307,6 +2668,12 @@
                 "path-key": "^2.0.0"
             }
         },
+        "num2fraction": {
+            "version": "1.2.2",
+            "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz",
+            "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=",
+            "dev": true
+        },
         "number-is-nan": {
             "version": "1.0.1",
             "resolved": "https://registry.npm.taobao.org/number-is-nan/download/number-is-nan-1.0.1.tgz?cache=0&sync_timestamp=1617776101309&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnumber-is-nan%2Fdownload%2Fnumber-is-nan-1.0.1.tgz",
@@ -2319,6 +2686,12 @@
             "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
             "dev": true
         },
+        "object-hash": {
+            "version": "2.2.0",
+            "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz",
+            "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==",
+            "dev": true
+        },
         "once": {
             "version": "1.4.0",
             "resolved": "http://registry.npm.taobao.org/once/download/once-1.4.0.tgz",
@@ -2427,6 +2800,35 @@
                 }
             }
         },
+        "parse-glob": {
+            "version": "3.0.4",
+            "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz",
+            "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=",
+            "dev": true,
+            "requires": {
+                "glob-base": "^0.3.0",
+                "is-dotfile": "^1.0.0",
+                "is-extglob": "^1.0.0",
+                "is-glob": "^2.0.0"
+            },
+            "dependencies": {
+                "is-extglob": {
+                    "version": "1.0.0",
+                    "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
+                    "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
+                    "dev": true
+                },
+                "is-glob": {
+                    "version": "2.0.1",
+                    "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
+                    "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
+                    "dev": true,
+                    "requires": {
+                        "is-extglob": "^1.0.0"
+                    }
+                }
+            }
+        },
         "parse-json": {
             "version": "4.0.0",
             "resolved": "https://registry.npm.taobao.org/parse-json/download/parse-json-4.0.0.tgz?cache=0&sync_timestamp=1610966646988&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fparse-json%2Fdownload%2Fparse-json-4.0.0.tgz",
@@ -2501,14 +2903,179 @@
             }
         },
         "postcss": {
-            "version": "8.2.15",
-            "resolved": "https://registry.nlark.com/postcss/download/postcss-8.2.15.tgz?cache=0&sync_timestamp=1620676610377&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss%2Fdownload%2Fpostcss-8.2.15.tgz",
-            "integrity": "sha1-nmbM8HKSgX0ib8MVy7+bwUj7ymU=",
+            "version": "7.0.35",
+            "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
+            "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
             "dev": true,
             "requires": {
-                "colorette": "^1.2.2",
-                "nanoid": "^3.1.23",
-                "source-map": "^0.6.1"
+                "chalk": "^2.4.2",
+                "source-map": "^0.6.1",
+                "supports-color": "^6.1.0"
+            },
+            "dependencies": {
+                "ansi-styles": {
+                    "version": "3.2.1",
+                    "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+                    "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+                    "dev": true,
+                    "requires": {
+                        "color-convert": "^1.9.0"
+                    }
+                },
+                "chalk": {
+                    "version": "2.4.2",
+                    "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+                    "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+                    "dev": true,
+                    "requires": {
+                        "ansi-styles": "^3.2.1",
+                        "escape-string-regexp": "^1.0.5",
+                        "supports-color": "^5.3.0"
+                    },
+                    "dependencies": {
+                        "supports-color": {
+                            "version": "5.5.0",
+                            "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+                            "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+                            "dev": true,
+                            "requires": {
+                                "has-flag": "^3.0.0"
+                            }
+                        }
+                    }
+                },
+                "color-convert": {
+                    "version": "1.9.3",
+                    "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+                    "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+                    "dev": true,
+                    "requires": {
+                        "color-name": "1.1.3"
+                    }
+                },
+                "color-name": {
+                    "version": "1.1.3",
+                    "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+                    "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+                    "dev": true
+                },
+                "has-flag": {
+                    "version": "3.0.0",
+                    "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+                    "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+                    "dev": true
+                },
+                "supports-color": {
+                    "version": "6.1.0",
+                    "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+                    "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+                    "dev": true,
+                    "requires": {
+                        "has-flag": "^3.0.0"
+                    }
+                }
+            }
+        },
+        "postcss-functions": {
+            "version": "3.0.0",
+            "resolved": "https://registry.npmjs.org/postcss-functions/-/postcss-functions-3.0.0.tgz",
+            "integrity": "sha1-DpTQFERwCkgd4g3k1V+yZAVkJQ4=",
+            "dev": true,
+            "requires": {
+                "glob": "^7.1.2",
+                "object-assign": "^4.1.1",
+                "postcss": "^6.0.9",
+                "postcss-value-parser": "^3.3.0"
+            },
+            "dependencies": {
+                "ansi-styles": {
+                    "version": "3.2.1",
+                    "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+                    "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+                    "dev": true,
+                    "requires": {
+                        "color-convert": "^1.9.0"
+                    }
+                },
+                "chalk": {
+                    "version": "2.4.2",
+                    "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+                    "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+                    "dev": true,
+                    "requires": {
+                        "ansi-styles": "^3.2.1",
+                        "escape-string-regexp": "^1.0.5",
+                        "supports-color": "^5.3.0"
+                    }
+                },
+                "color-convert": {
+                    "version": "1.9.3",
+                    "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+                    "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+                    "dev": true,
+                    "requires": {
+                        "color-name": "1.1.3"
+                    }
+                },
+                "color-name": {
+                    "version": "1.1.3",
+                    "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+                    "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+                    "dev": true
+                },
+                "has-flag": {
+                    "version": "3.0.0",
+                    "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+                    "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+                    "dev": true
+                },
+                "postcss": {
+                    "version": "6.0.23",
+                    "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
+                    "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
+                    "dev": true,
+                    "requires": {
+                        "chalk": "^2.4.1",
+                        "source-map": "^0.6.1",
+                        "supports-color": "^5.4.0"
+                    }
+                },
+                "postcss-value-parser": {
+                    "version": "3.3.1",
+                    "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+                    "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
+                    "dev": true
+                },
+                "supports-color": {
+                    "version": "5.5.0",
+                    "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+                    "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+                    "dev": true,
+                    "requires": {
+                        "has-flag": "^3.0.0"
+                    }
+                }
+            }
+        },
+        "postcss-import": {
+            "version": "14.0.2",
+            "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.0.2.tgz",
+            "integrity": "sha512-BJ2pVK4KhUyMcqjuKs9RijV5tatNzNa73e/32aBVE/ejYPe37iH+6vAu9WvqUkB5OAYgLHzbSvzHnorybJCm9g==",
+            "dev": true,
+            "requires": {
+                "postcss-value-parser": "^4.0.0",
+                "read-cache": "^1.0.0",
+                "resolve": "^1.1.7"
+            }
+        },
+        "postcss-js": {
+            "version": "2.0.3",
+            "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-2.0.3.tgz",
+            "integrity": "sha512-zS59pAk3deu6dVHyrGqmC3oDXBdNdajk4k1RyxeVXCrcEDBUBHoIhE4QTsmhxgzXxsaqFDAkUZfmMa5f/N/79w==",
+            "dev": true,
+            "requires": {
+                "camelcase-css": "^2.0.1",
+                "postcss": "^7.0.18"
             }
         },
         "postcss-modules": {
@@ -2562,6 +3129,15 @@
                 "icss-utils": "^5.0.0"
             }
         },
+        "postcss-nested": {
+            "version": "5.0.5",
+            "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.5.tgz",
+            "integrity": "sha512-GSRXYz5bccobpTzLQZXOnSOfKl6TwVr5CyAQJUPub4nuRJSOECK5AqurxVgmtxP48p0Kc/ndY/YyS1yqldX0Ew==",
+            "dev": true,
+            "requires": {
+                "postcss-selector-parser": "^6.0.4"
+            }
+        },
         "postcss-selector-parser": {
             "version": "6.0.6",
             "resolved": "https://registry.nlark.com/postcss-selector-parser/download/postcss-selector-parser-6.0.6.tgz?cache=0&sync_timestamp=1620752939806&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss-selector-parser%2Fdownload%2Fpostcss-selector-parser-6.0.6.tgz",
@@ -2590,6 +3166,12 @@
             "integrity": "sha1-99f1/4qc2HKnvkyhQglZVqYHl8s=",
             "dev": true
         },
+        "pretty-hrtime": {
+            "version": "1.0.3",
+            "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz",
+            "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=",
+            "dev": true
+        },
         "process-nextick-args": {
             "version": "2.0.1",
             "resolved": "https://registry.npm.taobao.org/process-nextick-args/download/process-nextick-args-2.0.1.tgz",
@@ -2760,6 +3342,31 @@
                 "once": "^1.3.1"
             }
         },
+        "purgecss": {
+            "version": "3.1.3",
+            "resolved": "https://registry.npmjs.org/purgecss/-/purgecss-3.1.3.tgz",
+            "integrity": "sha512-hRSLN9mguJ2lzlIQtW4qmPS2kh6oMnA9RxdIYK8sz18QYqd6ePp4GNDl18oWHA1f2v2NEQIh51CO8s/E3YGckQ==",
+            "dev": true,
+            "requires": {
+                "commander": "^6.0.0",
+                "glob": "^7.0.0",
+                "postcss": "^8.2.1",
+                "postcss-selector-parser": "^6.0.2"
+            },
+            "dependencies": {
+                "postcss": {
+                    "version": "8.3.0",
+                    "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.0.tgz",
+                    "integrity": "sha512-+ogXpdAjWGa+fdYY5BQ96V/6tAo+TdSSIMP5huJBIygdWwKtVoB5JWZ7yUd4xZ8r+8Kvvx4nyg/PQ071H4UtcQ==",
+                    "dev": true,
+                    "requires": {
+                        "colorette": "^1.2.2",
+                        "nanoid": "^3.1.23",
+                        "source-map-js": "^0.6.2"
+                    }
+                }
+            }
+        },
         "queue-microtask": {
             "version": "1.2.3",
             "resolved": "https://registry.npm.taobao.org/queue-microtask/download/queue-microtask-1.2.3.tgz?cache=0&sync_timestamp=1616391510274&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fqueue-microtask%2Fdownload%2Fqueue-microtask-1.2.3.tgz",
@@ -2784,6 +3391,23 @@
                 "strip-json-comments": "~2.0.1"
             }
         },
+        "read-cache": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
+            "integrity": "sha1-5mTvMRYRZsl1HNvo28+GtftY93Q=",
+            "dev": true,
+            "requires": {
+                "pify": "^2.3.0"
+            },
+            "dependencies": {
+                "pify": {
+                    "version": "2.3.0",
+                    "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+                    "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+                    "dev": true
+                }
+            }
+        },
         "read-pkg": {
             "version": "3.0.0",
             "resolved": "https://registry.npm.taobao.org/read-pkg/download/read-pkg-3.0.0.tgz",
@@ -2850,6 +3474,24 @@
                 "strip-indent": "^2.0.0"
             }
         },
+        "reduce-css-calc": {
+            "version": "2.1.8",
+            "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-2.1.8.tgz",
+            "integrity": "sha512-8liAVezDmUcH+tdzoEGrhfbGcP7nOV4NkGE3a74+qqvE7nt9i4sKLGBuZNOnpI4WiGksiNPklZxva80061QiPg==",
+            "dev": true,
+            "requires": {
+                "css-unit-converter": "^1.1.1",
+                "postcss-value-parser": "^3.3.0"
+            },
+            "dependencies": {
+                "postcss-value-parser": {
+                    "version": "3.3.1",
+                    "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+                    "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
+                    "dev": true
+                }
+            }
+        },
         "registry-auth-token": {
             "version": "4.2.1",
             "resolved": "https://registry.npm.taobao.org/registry-auth-token/download/registry-auth-token-4.2.1.tgz",
@@ -3020,6 +3662,23 @@
             "integrity": "sha1-oUEMLt2PB3sItOJTyOrPyvBXRhw=",
             "dev": true
         },
+        "simple-swizzle": {
+            "version": "0.2.2",
+            "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
+            "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=",
+            "dev": true,
+            "requires": {
+                "is-arrayish": "^0.3.1"
+            },
+            "dependencies": {
+                "is-arrayish": {
+                    "version": "0.3.2",
+                    "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
+                    "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==",
+                    "dev": true
+                }
+            }
+        },
         "slash": {
             "version": "3.0.0",
             "resolved": "https://registry.npm.taobao.org/slash/download/slash-3.0.0.tgz?cache=0&sync_timestamp=1618384508676&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fslash%2Fdownload%2Fslash-3.0.0.tgz",
@@ -3031,6 +3690,12 @@
             "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz",
             "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM="
         },
+        "source-map-js": {
+            "version": "0.6.2",
+            "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz",
+            "integrity": "sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==",
+            "dev": true
+        },
         "sourcemap-codec": {
             "version": "1.4.8",
             "resolved": "https://registry.npm.taobao.org/sourcemap-codec/download/sourcemap-codec-1.4.8.tgz",
@@ -3161,6 +3826,99 @@
                 "has-flag": "^4.0.0"
             }
         },
+        "tailwindcss": {
+            "version": "npm:@tailwindcss/postcss7-compat@2.1.4",
+            "resolved": "https://registry.npmjs.org/@tailwindcss/postcss7-compat/-/postcss7-compat-2.1.4.tgz",
+            "integrity": "sha512-KYRj/AGNwE4tPf02IvT+J36Twlrwg/OJJuSckSupX2T+xIOHSXPugNJZ7Stn9F67hh/qH+2Y2HXK6vpBadW6qw==",
+            "dev": true,
+            "requires": {
+                "@fullhuman/postcss-purgecss": "^3.1.3",
+                "autoprefixer": "^9",
+                "bytes": "^3.0.0",
+                "chalk": "^4.1.0",
+                "chokidar": "^3.5.1",
+                "color": "^3.1.3",
+                "detective": "^5.2.0",
+                "didyoumean": "^1.2.1",
+                "dlv": "^1.1.3",
+                "fast-glob": "^3.2.5",
+                "fs-extra": "^9.1.0",
+                "html-tags": "^3.1.0",
+                "lodash": "^4.17.21",
+                "lodash.topath": "^4.5.2",
+                "modern-normalize": "^1.0.0",
+                "node-emoji": "^1.8.1",
+                "normalize-path": "^3.0.0",
+                "object-hash": "^2.1.1",
+                "parse-glob": "^3.0.4",
+                "postcss": "^7",
+                "postcss-functions": "^3",
+                "postcss-js": "^2",
+                "postcss-nested": "^4",
+                "postcss-selector-parser": "^6.0.4",
+                "postcss-value-parser": "^4.1.0",
+                "pretty-hrtime": "^1.0.3",
+                "quick-lru": "^5.1.1",
+                "reduce-css-calc": "^2.1.8",
+                "resolve": "^1.20.0"
+            },
+            "dependencies": {
+                "chalk": {
+                    "version": "4.1.1",
+                    "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
+                    "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
+                    "dev": true,
+                    "requires": {
+                        "ansi-styles": "^4.1.0",
+                        "supports-color": "^7.1.0"
+                    }
+                },
+                "fs-extra": {
+                    "version": "9.1.0",
+                    "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
+                    "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
+                    "dev": true,
+                    "requires": {
+                        "at-least-node": "^1.0.0",
+                        "graceful-fs": "^4.2.0",
+                        "jsonfile": "^6.0.1",
+                        "universalify": "^2.0.0"
+                    }
+                },
+                "jsonfile": {
+                    "version": "6.1.0",
+                    "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
+                    "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
+                    "dev": true,
+                    "requires": {
+                        "graceful-fs": "^4.1.6",
+                        "universalify": "^2.0.0"
+                    }
+                },
+                "postcss-nested": {
+                    "version": "4.2.3",
+                    "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-4.2.3.tgz",
+                    "integrity": "sha512-rOv0W1HquRCamWy2kFl3QazJMMe1ku6rCFoAAH+9AcxdbpDeBr6k968MLWuLjvjMcGEip01ak09hKOEgpK9hvw==",
+                    "dev": true,
+                    "requires": {
+                        "postcss": "^7.0.32",
+                        "postcss-selector-parser": "^6.0.2"
+                    }
+                },
+                "quick-lru": {
+                    "version": "5.1.1",
+                    "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz",
+                    "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==",
+                    "dev": true
+                },
+                "universalify": {
+                    "version": "2.0.0",
+                    "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
+                    "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
+                    "dev": true
+                }
+            }
+        },
         "term-size": {
             "version": "1.2.0",
             "resolved": "https://registry.npm.taobao.org/term-size/download/term-size-1.2.0.tgz",
@@ -3709,6 +4467,19 @@
                 "postcss": "^8.2.10",
                 "resolve": "^1.19.0",
                 "rollup": "^2.38.5"
+            },
+            "dependencies": {
+                "postcss": {
+                    "version": "8.3.0",
+                    "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.0.tgz",
+                    "integrity": "sha512-+ogXpdAjWGa+fdYY5BQ96V/6tAo+TdSSIMP5huJBIygdWwKtVoB5JWZ7yUd4xZ8r+8Kvvx4nyg/PQ071H4UtcQ==",
+                    "dev": true,
+                    "requires": {
+                        "colorette": "^1.2.2",
+                        "nanoid": "^3.1.23",
+                        "source-map-js": "^0.6.2"
+                    }
+                }
             }
         },
         "void-elements": {
diff --git a/package.json b/package.json
index 3a90622..cd90565 100644
--- a/package.json
+++ b/package.json
@@ -8,14 +8,20 @@
         "serve": "vite preview"
     },
     "devDependencies": {
+        "@tailwindcss/postcss7-compat": "^2.1.4",
         "@vitejs/plugin-vue": "^1.2.2",
         "@vue/compiler-sfc": "^3.0.11",
+        "autoprefixer": "^9.8.6",
         "chalk": "^3.0.0",
         "fs-extra": "^8.1.0",
         "globby": "^10.0.1",
         "node-static": "^0.7.11",
         "open": "^7.1.0",
+        "postcss": "^7.0.35",
+        "postcss-import": "^14.0.2",
+        "postcss-nested": "^5.0.5",
         "sass": "^1.32.13",
+        "tailwindcss": "npm:@tailwindcss/postcss7-compat@^2.1.4",
         "typescript": "^4.1.3",
         "vite": "^2.3.3",
         "vue-tsc": "^0.1.4",
diff --git a/postcss.config.js b/postcss.config.js
new file mode 100644
index 0000000..9e8c578
--- /dev/null
+++ b/postcss.config.js
@@ -0,0 +1,7 @@
+module.exports = {
+  plugins: {
+    tailwindcss: {},
+    autoprefixer: {},
+    'postcss-nested': {}
+  },
+}
diff --git a/src/App.vue b/src/App.vue
index 46ea82b..e593a7c 100644
--- a/src/App.vue
+++ b/src/App.vue
@@ -1,8 +1,8 @@
 <template>
 <el-container>
-    <el-aside>
+    <!-- <el-aside>
         <h3>Side Nav</h3>
-    </el-aside>
+    </el-aside> -->
     <el-main>
         <BTable/>
     </el-main>
@@ -29,4 +29,12 @@
     top: 0;
     bottom: 0;
 }
+
+.el-container {
+    height: 100%;
+}
+
+.el-main {
+    padding: 5px;
+}
 </style>
\ No newline at end of file
diff --git a/src/components/BTable.vue b/src/components/BTable.vue
index 66a42ad..ea64fd7 100644
--- a/src/components/BTable.vue
+++ b/src/components/BTable.vue
@@ -1,42 +1,46 @@
 <template>
-  <div class="page-content">
-    <!-- <div class="row" id="table-row">
-      <div class="col-md-6">
-        <div id="table-panel"></div>
-      </div>
-      <div class="col-md-6">
-        <div class="bar-race-config">
-          <form>
-            <div class="form-group">
-              <label class="col-lg-6">标题</label>
-              <input class="form-control" id="input-title" value="汽车产量动态排名"/>
+    <div class="w-full h-full">
+        <div class="grid grid-cols-3 h-full">
+            <div id="el-table" class="col-span-2 h-full" style="border: 1px solid red;"></div>
+            <div id="el-config" class="p-3 align-middle">
+                <div>
+                    <el-button type="button" onclick="run()" size="medium">运行</el-button>
+                    <el-button type="button" size="medium">导出</el-button>
+                </div>
+                <el-form ref="form">
+                    <div class="grid grid-cols-2 form-row">
+                        <label>标题</label>
+                        <el-input id="input-title" value="汽车产量动态排名" size="medium"></el-input>
+                    </div>
+                    <div class="grid grid-cols-2 form-row">
+                        <label>显示排名上限</label>
+                        <el-input id="input-max" type="number" value="10" size="medium"></el-input>
+                    </div>
+                </el-form>
             </div>
-            <div class="form-group">
-              <label class="col-lg-6">显示排名上限</label>
-              <input class="form-control" id="input-max" type="number" value="10"/>
-            </div>
-          </form>
         </div>
-        <div>
-          <button class="btn btn-default" type="button" onclick="run()">运行</button>
-          <button class="btn btn-default" type="button">导出</button>
-        </div>
-        <div id="bar-race-preview"></div>
-      </div>
-    </div -->
-  </div>
+    </div>
 </template>
 
 <script lang="ts">
 import {defineComponent} from 'vue'
 export default defineComponent({
-  name: 'BTable',
-  props: {
-  },
-  setup: () => {
-  }
+    name: 'BTable',
+    props: {
+    },
+    setup: () => {
+    }
 })
 </script>
 
 <style scoped>
+@layer utilities {
+    .form-row {
+        @apply my-3;
+
+        label {
+            @apply py-1;
+        }
+    }
+}
 </style>
diff --git a/src/index.css b/src/index.css
new file mode 100644
index 0000000..c187af7
--- /dev/null
+++ b/src/index.css
@@ -0,0 +1,4 @@
+/*! @import */
+@tailwind base;
+@tailwind components;
+@tailwind utilities;
diff --git a/src/main.ts b/src/main.ts
index c1f9d5d..f6d7375 100644
--- a/src/main.ts
+++ b/src/main.ts
@@ -5,6 +5,7 @@
 
 import ElementPlus from 'element-plus';
 import 'element-plus/lib/theme-chalk/index.css';
+import './index.css';
 import App from './App.vue';
 
 
diff --git a/tailwind.config.js b/tailwind.config.js
new file mode 100644
index 0000000..1ac7832
--- /dev/null
+++ b/tailwind.config.js
@@ -0,0 +1,14 @@
+module.exports = {
+  purge: [
+    '*.html',
+    'src/**/*.{vue,ts}'
+  ],
+  darkMode: false, // or 'media' or 'class'
+  theme: {
+    extend: {},
+  },
+  variants: {
+    extend: {},
+  },
+  plugins: [],
+}