From cd24c776d772c7ad797891afd779b3b072293ec2 Mon Sep 17 00:00:00 2001
From: zrlibs <jesting_rr@163.com>
Date: 星期五, 21 三月 2025 17:35:07 +0800
Subject: [PATCH] fixed

---
 src/views/examples/report.vue           |  292 ++---
 src/components/examples/data-table.vue  |  414 ++++++++
 public/skin/light.css                   |   18 
 vite.config.js                          |    2 
 package.json                            |    3 
 src/views/examples/master-slave.vue     |  199 ++-
 src/views/examples/data-table/index.vue |  266 ++---
 src/less/examples.less                  |   75 -
 src/components/examples/form-dialog.vue |  101 ++
 package-lock.json                       | 1484 ------------------------------
 10 files changed, 870 insertions(+), 1,984 deletions(-)

diff --git a/package-lock.json b/package-lock.json
index d34f8d2..e3d740a 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -18,242 +18,7 @@
       "devDependencies": {
         "@vitejs/plugin-vue": "^5.2.1",
         "less": "^4.2.2",
-        "vite": "^6.1.0",
-        "vite-plugin-vue-devtools": "^7.7.2"
-      }
-    },
-    "node_modules/@ampproject/remapping": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmmirror.com/@ampproject/remapping/-/remapping-2.3.0.tgz",
-      "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==",
-      "dev": true,
-      "dependencies": {
-        "@jridgewell/gen-mapping": "^0.3.5",
-        "@jridgewell/trace-mapping": "^0.3.24"
-      },
-      "engines": {
-        "node": ">=6.0.0"
-      }
-    },
-    "node_modules/@antfu/utils": {
-      "version": "0.7.10",
-      "resolved": "https://registry.npmmirror.com/@antfu/utils/-/utils-0.7.10.tgz",
-      "integrity": "sha512-+562v9k4aI80m1+VuMHehNJWLOFjBnXn3tdOitzD0il5b7smkSBal4+a3oKiQTbrwMmN/TBUMDvbdoWDehgOww==",
-      "dev": true,
-      "funding": {
-        "url": "https://github.com/sponsors/antfu"
-      }
-    },
-    "node_modules/@babel/code-frame": {
-      "version": "7.26.2",
-      "resolved": "https://registry.npmmirror.com/@babel/code-frame/-/code-frame-7.26.2.tgz",
-      "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-validator-identifier": "^7.25.9",
-        "js-tokens": "^4.0.0",
-        "picocolors": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/compat-data": {
-      "version": "7.26.8",
-      "resolved": "https://registry.npmmirror.com/@babel/compat-data/-/compat-data-7.26.8.tgz",
-      "integrity": "sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==",
-      "dev": true,
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/core": {
-      "version": "7.26.9",
-      "resolved": "https://registry.npmmirror.com/@babel/core/-/core-7.26.9.tgz",
-      "integrity": "sha512-lWBYIrF7qK5+GjY5Uy+/hEgp8OJWOD/rpy74GplYRhEauvbHDeFB8t5hPOZxCZ0Oxf4Cc36tK51/l3ymJysrKw==",
-      "dev": true,
-      "dependencies": {
-        "@ampproject/remapping": "^2.2.0",
-        "@babel/code-frame": "^7.26.2",
-        "@babel/generator": "^7.26.9",
-        "@babel/helper-compilation-targets": "^7.26.5",
-        "@babel/helper-module-transforms": "^7.26.0",
-        "@babel/helpers": "^7.26.9",
-        "@babel/parser": "^7.26.9",
-        "@babel/template": "^7.26.9",
-        "@babel/traverse": "^7.26.9",
-        "@babel/types": "^7.26.9",
-        "convert-source-map": "^2.0.0",
-        "debug": "^4.1.0",
-        "gensync": "^1.0.0-beta.2",
-        "json5": "^2.2.3",
-        "semver": "^6.3.1"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/babel"
-      }
-    },
-    "node_modules/@babel/generator": {
-      "version": "7.26.9",
-      "resolved": "https://registry.npmmirror.com/@babel/generator/-/generator-7.26.9.tgz",
-      "integrity": "sha512-kEWdzjOAUMW4hAyrzJ0ZaTOu9OmpyDIQicIh0zg0EEcEkYXZb2TjtBhnHi2ViX7PKwZqF4xwqfAm299/QMP3lg==",
-      "dev": true,
-      "dependencies": {
-        "@babel/parser": "^7.26.9",
-        "@babel/types": "^7.26.9",
-        "@jridgewell/gen-mapping": "^0.3.5",
-        "@jridgewell/trace-mapping": "^0.3.25",
-        "jsesc": "^3.0.2"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/helper-annotate-as-pure": {
-      "version": "7.25.9",
-      "resolved": "https://registry.npmmirror.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz",
-      "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==",
-      "dev": true,
-      "dependencies": {
-        "@babel/types": "^7.25.9"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/helper-compilation-targets": {
-      "version": "7.26.5",
-      "resolved": "https://registry.npmmirror.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz",
-      "integrity": "sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==",
-      "dev": true,
-      "dependencies": {
-        "@babel/compat-data": "^7.26.5",
-        "@babel/helper-validator-option": "^7.25.9",
-        "browserslist": "^4.24.0",
-        "lru-cache": "^5.1.1",
-        "semver": "^6.3.1"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/helper-create-class-features-plugin": {
-      "version": "7.26.9",
-      "resolved": "https://registry.npmmirror.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.26.9.tgz",
-      "integrity": "sha512-ubbUqCofvxPRurw5L8WTsCLSkQiVpov4Qx0WMA+jUN+nXBK8ADPlJO1grkFw5CWKC5+sZSOfuGMdX1aI1iT9Sg==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-annotate-as-pure": "^7.25.9",
-        "@babel/helper-member-expression-to-functions": "^7.25.9",
-        "@babel/helper-optimise-call-expression": "^7.25.9",
-        "@babel/helper-replace-supers": "^7.26.5",
-        "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9",
-        "@babel/traverse": "^7.26.9",
-        "semver": "^6.3.1"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0"
-      }
-    },
-    "node_modules/@babel/helper-member-expression-to-functions": {
-      "version": "7.25.9",
-      "resolved": "https://registry.npmmirror.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz",
-      "integrity": "sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==",
-      "dev": true,
-      "dependencies": {
-        "@babel/traverse": "^7.25.9",
-        "@babel/types": "^7.25.9"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/helper-module-imports": {
-      "version": "7.25.9",
-      "resolved": "https://registry.npmmirror.com/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz",
-      "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==",
-      "dev": true,
-      "dependencies": {
-        "@babel/traverse": "^7.25.9",
-        "@babel/types": "^7.25.9"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/helper-module-transforms": {
-      "version": "7.26.0",
-      "resolved": "https://registry.npmmirror.com/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz",
-      "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-module-imports": "^7.25.9",
-        "@babel/helper-validator-identifier": "^7.25.9",
-        "@babel/traverse": "^7.25.9"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0"
-      }
-    },
-    "node_modules/@babel/helper-optimise-call-expression": {
-      "version": "7.25.9",
-      "resolved": "https://registry.npmmirror.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz",
-      "integrity": "sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==",
-      "dev": true,
-      "dependencies": {
-        "@babel/types": "^7.25.9"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/helper-plugin-utils": {
-      "version": "7.26.5",
-      "resolved": "https://registry.npmmirror.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz",
-      "integrity": "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==",
-      "dev": true,
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/helper-replace-supers": {
-      "version": "7.26.5",
-      "resolved": "https://registry.npmmirror.com/@babel/helper-replace-supers/-/helper-replace-supers-7.26.5.tgz",
-      "integrity": "sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-member-expression-to-functions": "^7.25.9",
-        "@babel/helper-optimise-call-expression": "^7.25.9",
-        "@babel/traverse": "^7.26.5"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0"
-      }
-    },
-    "node_modules/@babel/helper-skip-transparent-expression-wrappers": {
-      "version": "7.25.9",
-      "resolved": "https://registry.npmmirror.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz",
-      "integrity": "sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==",
-      "dev": true,
-      "dependencies": {
-        "@babel/traverse": "^7.25.9",
-        "@babel/types": "^7.25.9"
-      },
-      "engines": {
-        "node": ">=6.9.0"
+        "vite": "^6.1.0"
       }
     },
     "node_modules/@babel/helper-string-parser": {
@@ -272,28 +37,6 @@
         "node": ">=6.9.0"
       }
     },
-    "node_modules/@babel/helper-validator-option": {
-      "version": "7.25.9",
-      "resolved": "https://registry.npmmirror.com/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz",
-      "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==",
-      "dev": true,
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/helpers": {
-      "version": "7.26.9",
-      "resolved": "https://registry.npmmirror.com/@babel/helpers/-/helpers-7.26.9.tgz",
-      "integrity": "sha512-Mz/4+y8udxBKdmzt/UjPACs4G3j5SshJJEFFKxlCGPydG4JAHXxjWjAwjd09tf6oINvl1VfMJo+nB7H2YKQ0dA==",
-      "dev": true,
-      "dependencies": {
-        "@babel/template": "^7.26.9",
-        "@babel/types": "^7.26.9"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
     "node_modules/@babel/parser": {
       "version": "7.26.9",
       "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.26.9.tgz",
@@ -306,146 +49,6 @@
       },
       "engines": {
         "node": ">=6.0.0"
-      }
-    },
-    "node_modules/@babel/plugin-proposal-decorators": {
-      "version": "7.25.9",
-      "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.25.9.tgz",
-      "integrity": "sha512-smkNLL/O1ezy9Nhy4CNosc4Va+1wo5w4gzSZeLe6y6dM4mmHfYOCPolXQPHQxonZCF+ZyebxN9vqOolkYrSn5g==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-create-class-features-plugin": "^7.25.9",
-        "@babel/helper-plugin-utils": "^7.25.9",
-        "@babel/plugin-syntax-decorators": "^7.25.9"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@babel/plugin-syntax-decorators": {
-      "version": "7.25.9",
-      "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.25.9.tgz",
-      "integrity": "sha512-ryzI0McXUPJnRCvMo4lumIKZUzhYUO/ScI+Mz4YVaTLt04DHNSjEUjKVvbzQjZFLuod/cYEc07mJWhzl6v4DPg==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-plugin-utils": "^7.25.9"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@babel/plugin-syntax-import-attributes": {
-      "version": "7.26.0",
-      "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz",
-      "integrity": "sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-plugin-utils": "^7.25.9"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@babel/plugin-syntax-import-meta": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz",
-      "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-plugin-utils": "^7.10.4"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@babel/plugin-syntax-jsx": {
-      "version": "7.25.9",
-      "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz",
-      "integrity": "sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-plugin-utils": "^7.25.9"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@babel/plugin-syntax-typescript": {
-      "version": "7.25.9",
-      "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz",
-      "integrity": "sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-plugin-utils": "^7.25.9"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@babel/plugin-transform-typescript": {
-      "version": "7.26.8",
-      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.26.8.tgz",
-      "integrity": "sha512-bME5J9AC8ChwA7aEPJ6zym3w7aObZULHhbNLU0bKUhKsAkylkzUdq+0kdymh9rzi8nlNFl2bmldFBCKNJBUpuw==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-annotate-as-pure": "^7.25.9",
-        "@babel/helper-create-class-features-plugin": "^7.25.9",
-        "@babel/helper-plugin-utils": "^7.26.5",
-        "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9",
-        "@babel/plugin-syntax-typescript": "^7.25.9"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@babel/template": {
-      "version": "7.26.9",
-      "resolved": "https://registry.npmmirror.com/@babel/template/-/template-7.26.9.tgz",
-      "integrity": "sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==",
-      "dev": true,
-      "dependencies": {
-        "@babel/code-frame": "^7.26.2",
-        "@babel/parser": "^7.26.9",
-        "@babel/types": "^7.26.9"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/traverse": {
-      "version": "7.26.9",
-      "resolved": "https://registry.npmmirror.com/@babel/traverse/-/traverse-7.26.9.tgz",
-      "integrity": "sha512-ZYW7L+pL8ahU5fXmNbPF+iZFHCv5scFak7MZ9bwaRPLUhHh7QQEMjZUg0HevihoqCM5iSYHN61EyCoZvqC+bxg==",
-      "dev": true,
-      "dependencies": {
-        "@babel/code-frame": "^7.26.2",
-        "@babel/generator": "^7.26.9",
-        "@babel/parser": "^7.26.9",
-        "@babel/template": "^7.26.9",
-        "@babel/types": "^7.26.9",
-        "debug": "^4.3.1",
-        "globals": "^11.1.0"
-      },
-      "engines": {
-        "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/types": {
@@ -938,80 +541,10 @@
         "url": "https://github.com/sponsors/kazupon"
       }
     },
-    "node_modules/@jridgewell/gen-mapping": {
-      "version": "0.3.8",
-      "resolved": "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz",
-      "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==",
-      "dev": true,
-      "dependencies": {
-        "@jridgewell/set-array": "^1.2.1",
-        "@jridgewell/sourcemap-codec": "^1.4.10",
-        "@jridgewell/trace-mapping": "^0.3.24"
-      },
-      "engines": {
-        "node": ">=6.0.0"
-      }
-    },
-    "node_modules/@jridgewell/resolve-uri": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npmmirror.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
-      "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
-      "dev": true,
-      "engines": {
-        "node": ">=6.0.0"
-      }
-    },
-    "node_modules/@jridgewell/set-array": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmmirror.com/@jridgewell/set-array/-/set-array-1.2.1.tgz",
-      "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
-      "dev": true,
-      "engines": {
-        "node": ">=6.0.0"
-      }
-    },
     "node_modules/@jridgewell/sourcemap-codec": {
       "version": "1.5.0",
       "resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
       "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ=="
-    },
-    "node_modules/@jridgewell/trace-mapping": {
-      "version": "0.3.25",
-      "resolved": "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
-      "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
-      "dev": true,
-      "dependencies": {
-        "@jridgewell/resolve-uri": "^3.1.0",
-        "@jridgewell/sourcemap-codec": "^1.4.14"
-      }
-    },
-    "node_modules/@polka/url": {
-      "version": "1.0.0-next.28",
-      "resolved": "https://registry.npmmirror.com/@polka/url/-/url-1.0.0-next.28.tgz",
-      "integrity": "sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==",
-      "dev": true
-    },
-    "node_modules/@rollup/pluginutils": {
-      "version": "5.1.4",
-      "resolved": "https://registry.npmmirror.com/@rollup/pluginutils/-/pluginutils-5.1.4.tgz",
-      "integrity": "sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==",
-      "dev": true,
-      "dependencies": {
-        "@types/estree": "^1.0.0",
-        "estree-walker": "^2.0.2",
-        "picomatch": "^4.0.2"
-      },
-      "engines": {
-        "node": ">=14.0.0"
-      },
-      "peerDependencies": {
-        "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0"
-      },
-      "peerDependenciesMeta": {
-        "rollup": {
-          "optional": true
-        }
-      }
     },
     "node_modules/@rollup/rollup-android-arm-eabi": {
       "version": "4.34.8",
@@ -1260,24 +793,6 @@
         "win32"
       ]
     },
-    "node_modules/@sec-ant/readable-stream": {
-      "version": "0.4.1",
-      "resolved": "https://registry.npmmirror.com/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz",
-      "integrity": "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==",
-      "dev": true
-    },
-    "node_modules/@sindresorhus/merge-streams": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmmirror.com/@sindresorhus/merge-streams/-/merge-streams-4.0.0.tgz",
-      "integrity": "sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==",
-      "dev": true,
-      "engines": {
-        "node": ">=18"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
     "node_modules/@types/estree": {
       "version": "1.0.6",
       "resolved": "https://registry.npmmirror.com/@types/estree/-/estree-1.0.6.tgz",
@@ -1306,54 +821,6 @@
       "peerDependencies": {
         "vite": "^5.0.0 || ^6.0.0",
         "vue": "^3.2.25"
-      }
-    },
-    "node_modules/@vue/babel-helper-vue-transform-on": {
-      "version": "1.2.5",
-      "resolved": "https://registry.npmmirror.com/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.2.5.tgz",
-      "integrity": "sha512-lOz4t39ZdmU4DJAa2hwPYmKc8EsuGa2U0L9KaZaOJUt0UwQNjNA3AZTq6uEivhOKhhG1Wvy96SvYBoFmCg3uuw==",
-      "dev": true
-    },
-    "node_modules/@vue/babel-plugin-jsx": {
-      "version": "1.2.5",
-      "resolved": "https://registry.npmmirror.com/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.2.5.tgz",
-      "integrity": "sha512-zTrNmOd4939H9KsRIGmmzn3q2zvv1mjxkYZHgqHZgDrXz5B1Q3WyGEjO2f+JrmKghvl1JIRcvo63LgM1kH5zFg==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-module-imports": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.8",
-        "@babel/plugin-syntax-jsx": "^7.24.7",
-        "@babel/template": "^7.25.0",
-        "@babel/traverse": "^7.25.6",
-        "@babel/types": "^7.25.6",
-        "@vue/babel-helper-vue-transform-on": "1.2.5",
-        "@vue/babel-plugin-resolve-type": "1.2.5",
-        "html-tags": "^3.3.1",
-        "svg-tags": "^1.0.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      },
-      "peerDependenciesMeta": {
-        "@babel/core": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/@vue/babel-plugin-resolve-type": {
-      "version": "1.2.5",
-      "resolved": "https://registry.npmmirror.com/@vue/babel-plugin-resolve-type/-/babel-plugin-resolve-type-1.2.5.tgz",
-      "integrity": "sha512-U/ibkQrf5sx0XXRnUZD1mo5F7PkpKyTbfXM3a3rC4YnUz6crHEz9Jg09jzzL6QYlXNto/9CePdOg/c87O4Nlfg==",
-      "dev": true,
-      "dependencies": {
-        "@babel/code-frame": "^7.24.7",
-        "@babel/helper-module-imports": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.8",
-        "@babel/parser": "^7.25.6",
-        "@vue/compiler-sfc": "^3.5.3"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
       }
     },
     "node_modules/@vue/compiler-core": {
@@ -1406,65 +873,6 @@
       "version": "6.6.4",
       "resolved": "https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-6.6.4.tgz",
       "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g=="
-    },
-    "node_modules/@vue/devtools-core": {
-      "version": "7.7.2",
-      "resolved": "https://registry.npmmirror.com/@vue/devtools-core/-/devtools-core-7.7.2.tgz",
-      "integrity": "sha512-lexREWj1lKi91Tblr38ntSsy6CvI8ba7u+jmwh2yruib/ltLUcsIzEjCnrkh1yYGGIKXbAuYV2tOG10fGDB9OQ==",
-      "dev": true,
-      "dependencies": {
-        "@vue/devtools-kit": "^7.7.2",
-        "@vue/devtools-shared": "^7.7.2",
-        "mitt": "^3.0.1",
-        "nanoid": "^5.0.9",
-        "pathe": "^2.0.2",
-        "vite-hot-client": "^0.2.4"
-      },
-      "peerDependencies": {
-        "vue": "^3.0.0"
-      }
-    },
-    "node_modules/@vue/devtools-core/node_modules/nanoid": {
-      "version": "5.1.2",
-      "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-5.1.2.tgz",
-      "integrity": "sha512-b+CiXQCNMUGe0Ri64S9SXFcP9hogjAJ2Rd6GdVxhPLRm7mhGaM7VgOvCAJ1ZshfHbqVDI3uqTI5C8/GaKuLI7g==",
-      "dev": true,
-      "funding": [
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/ai"
-        }
-      ],
-      "bin": {
-        "nanoid": "bin/nanoid.js"
-      },
-      "engines": {
-        "node": "^18 || >=20"
-      }
-    },
-    "node_modules/@vue/devtools-kit": {
-      "version": "7.7.2",
-      "resolved": "https://registry.npmmirror.com/@vue/devtools-kit/-/devtools-kit-7.7.2.tgz",
-      "integrity": "sha512-CY0I1JH3Z8PECbn6k3TqM1Bk9ASWxeMtTCvZr7vb+CHi+X/QwQm5F1/fPagraamKMAHVfuuCbdcnNg1A4CYVWQ==",
-      "dev": true,
-      "dependencies": {
-        "@vue/devtools-shared": "^7.7.2",
-        "birpc": "^0.2.19",
-        "hookable": "^5.5.3",
-        "mitt": "^3.0.1",
-        "perfect-debounce": "^1.0.0",
-        "speakingurl": "^14.0.1",
-        "superjson": "^2.2.1"
-      }
-    },
-    "node_modules/@vue/devtools-shared": {
-      "version": "7.7.2",
-      "resolved": "https://registry.npmmirror.com/@vue/devtools-shared/-/devtools-shared-7.7.2.tgz",
-      "integrity": "sha512-uBFxnp8gwW2vD6FrJB8JZLUzVb6PNRG0B0jBnHsOH8uKyva2qINY8PTF5Te4QlTbMDqU5K6qtJDr6cNsKWhbOA==",
-      "dev": true,
-      "dependencies": {
-        "rfdc": "^1.4.1"
-      }
     },
     "node_modules/@vue/reactivity": {
       "version": "3.5.13",
@@ -1634,15 +1042,6 @@
         "node": "*"
       }
     },
-    "node_modules/birpc": {
-      "version": "0.2.19",
-      "resolved": "https://registry.npmmirror.com/birpc/-/birpc-0.2.19.tgz",
-      "integrity": "sha512-5WeXXAvTmitV1RqJFppT5QtUiz2p1mRSYU000Jkft5ZUCLJIk4uQriYNO50HknxKwM6jd8utNc66K1qGIwwWBQ==",
-      "dev": true,
-      "funding": {
-        "url": "https://github.com/sponsors/antfu"
-      }
-    },
     "node_modules/bl": {
       "version": "4.1.0",
       "resolved": "https://registry.npmmirror.com/bl/-/bl-4.1.0.tgz",
@@ -1665,38 +1064,6 @@
       "dependencies": {
         "balanced-match": "^1.0.0",
         "concat-map": "0.0.1"
-      }
-    },
-    "node_modules/browserslist": {
-      "version": "4.24.4",
-      "resolved": "https://registry.npmmirror.com/browserslist/-/browserslist-4.24.4.tgz",
-      "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==",
-      "dev": true,
-      "funding": [
-        {
-          "type": "opencollective",
-          "url": "https://opencollective.com/browserslist"
-        },
-        {
-          "type": "tidelift",
-          "url": "https://tidelift.com/funding/github/npm/browserslist"
-        },
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/ai"
-        }
-      ],
-      "dependencies": {
-        "caniuse-lite": "^1.0.30001688",
-        "electron-to-chromium": "^1.5.73",
-        "node-releases": "^2.0.19",
-        "update-browserslist-db": "^1.1.1"
-      },
-      "bin": {
-        "browserslist": "cli.js"
-      },
-      "engines": {
-        "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
       }
     },
     "node_modules/buffer": {
@@ -1746,41 +1113,6 @@
         "node": ">=0.2.0"
       }
     },
-    "node_modules/bundle-name": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmmirror.com/bundle-name/-/bundle-name-4.1.0.tgz",
-      "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==",
-      "dev": true,
-      "dependencies": {
-        "run-applescript": "^7.0.0"
-      },
-      "engines": {
-        "node": ">=18"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/caniuse-lite": {
-      "version": "1.0.30001701",
-      "resolved": "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001701.tgz",
-      "integrity": "sha512-faRs/AW3jA9nTwmJBSO1PQ6L/EOgsB5HMQQq4iCu5zhPgVVgO/pZRHlmatwijZKetFw8/Pr4q6dEN8sJuq8qTw==",
-      "dev": true,
-      "funding": [
-        {
-          "type": "opencollective",
-          "url": "https://opencollective.com/browserslist"
-        },
-        {
-          "type": "tidelift",
-          "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
-        },
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/ai"
-        }
-      ]
-    },
     "node_modules/chainsaw": {
       "version": "0.1.0",
       "resolved": "https://registry.npmmirror.com/chainsaw/-/chainsaw-0.1.0.tgz",
@@ -1810,27 +1142,6 @@
       "version": "0.0.1",
       "resolved": "https://registry.npmmirror.com/concat-map/-/concat-map-0.0.1.tgz",
       "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
-    },
-    "node_modules/convert-source-map": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmmirror.com/convert-source-map/-/convert-source-map-2.0.0.tgz",
-      "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
-      "dev": true
-    },
-    "node_modules/copy-anything": {
-      "version": "3.0.5",
-      "resolved": "https://registry.npmmirror.com/copy-anything/-/copy-anything-3.0.5.tgz",
-      "integrity": "sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==",
-      "dev": true,
-      "dependencies": {
-        "is-what": "^4.1.8"
-      },
-      "engines": {
-        "node": ">=12.13"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/mesqueeb"
-      }
     },
     "node_modules/core-util-is": {
       "version": "1.0.3",
@@ -1865,20 +1176,6 @@
         "node": ">= 10"
       }
     },
-    "node_modules/cross-spawn": {
-      "version": "7.0.6",
-      "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.6.tgz",
-      "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
-      "dev": true,
-      "dependencies": {
-        "path-key": "^3.1.0",
-        "shebang-command": "^2.0.0",
-        "which": "^2.0.1"
-      },
-      "engines": {
-        "node": ">= 8"
-      }
-    },
     "node_modules/csstype": {
       "version": "3.1.3",
       "resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.1.3.tgz",
@@ -1889,69 +1186,12 @@
       "resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.13.tgz",
       "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg=="
     },
-    "node_modules/debug": {
-      "version": "4.4.0",
-      "resolved": "https://registry.npmmirror.com/debug/-/debug-4.4.0.tgz",
-      "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==",
-      "dev": true,
-      "dependencies": {
-        "ms": "^2.1.3"
-      },
-      "engines": {
-        "node": ">=6.0"
-      },
-      "peerDependenciesMeta": {
-        "supports-color": {
-          "optional": true
-        }
-      }
-    },
     "node_modules/deepmerge": {
       "version": "2.2.1",
       "resolved": "https://registry.npmmirror.com/deepmerge/-/deepmerge-2.2.1.tgz",
       "integrity": "sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA==",
       "engines": {
         "node": ">=0.10.0"
-      }
-    },
-    "node_modules/default-browser": {
-      "version": "5.2.1",
-      "resolved": "https://registry.npmmirror.com/default-browser/-/default-browser-5.2.1.tgz",
-      "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==",
-      "dev": true,
-      "dependencies": {
-        "bundle-name": "^4.1.0",
-        "default-browser-id": "^5.0.0"
-      },
-      "engines": {
-        "node": ">=18"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/default-browser-id": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmmirror.com/default-browser-id/-/default-browser-id-5.0.0.tgz",
-      "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==",
-      "dev": true,
-      "engines": {
-        "node": ">=18"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/define-lazy-prop": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmmirror.com/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz",
-      "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==",
-      "dev": true,
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
     "node_modules/duplexer2": {
@@ -1988,12 +1228,6 @@
       "dependencies": {
         "safe-buffer": "~5.1.0"
       }
-    },
-    "node_modules/electron-to-chromium": {
-      "version": "1.5.109",
-      "resolved": "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.5.109.tgz",
-      "integrity": "sha512-AidaH9JETVRr9DIPGfp1kAarm/W6hRJTPuCnkF+2MqhF4KaAgRIcBc8nvjk+YMXZhwfISof/7WG29eS4iGxQLQ==",
-      "dev": true
     },
     "node_modules/element-resize-detector": {
       "version": "1.2.4",
@@ -2033,15 +1267,6 @@
       },
       "bin": {
         "errno": "cli.js"
-      }
-    },
-    "node_modules/error-stack-parser-es": {
-      "version": "0.1.5",
-      "resolved": "https://registry.npmmirror.com/error-stack-parser-es/-/error-stack-parser-es-0.1.5.tgz",
-      "integrity": "sha512-xHku1X40RO+fO8yJ8Wh2f2rZWVjqyhb1zgq1yZ8aZRQkv6OOKhKWRUaht3eSCUbAOBaKIgM+ykwFLE+QUxgGeg==",
-      "dev": true,
-      "funding": {
-        "url": "https://github.com/sponsors/antfu"
       }
     },
     "node_modules/esbuild": {
@@ -2084,15 +1309,6 @@
         "@esbuild/win32-x64": "0.25.0"
       }
     },
-    "node_modules/escalade": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npmmirror.com/escalade/-/escalade-3.2.0.tgz",
-      "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
-      "dev": true,
-      "engines": {
-        "node": ">=6"
-      }
-    },
     "node_modules/estree-walker": {
       "version": "2.0.2",
       "resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz",
@@ -2117,32 +1333,6 @@
         "node": ">=8.3.0"
       }
     },
-    "node_modules/execa": {
-      "version": "9.5.2",
-      "resolved": "https://registry.npmmirror.com/execa/-/execa-9.5.2.tgz",
-      "integrity": "sha512-EHlpxMCpHWSAh1dgS6bVeoLAXGnJNdR93aabr4QCGbzOM73o5XmRfM/e5FUqsw3aagP8S8XEWUWFAxnRBnAF0Q==",
-      "dev": true,
-      "dependencies": {
-        "@sindresorhus/merge-streams": "^4.0.0",
-        "cross-spawn": "^7.0.3",
-        "figures": "^6.1.0",
-        "get-stream": "^9.0.0",
-        "human-signals": "^8.0.0",
-        "is-plain-obj": "^4.1.0",
-        "is-stream": "^4.0.1",
-        "npm-run-path": "^6.0.0",
-        "pretty-ms": "^9.0.0",
-        "signal-exit": "^4.1.0",
-        "strip-final-newline": "^4.0.0",
-        "yoctocolors": "^2.0.0"
-      },
-      "engines": {
-        "node": "^18.19.0 || >=20.5.0"
-      },
-      "funding": {
-        "url": "https://github.com/sindresorhus/execa?sponsor=1"
-      }
-    },
     "node_modules/fast-csv": {
       "version": "4.3.6",
       "resolved": "https://registry.npmmirror.com/fast-csv/-/fast-csv-4.3.6.tgz",
@@ -2155,39 +1345,10 @@
         "node": ">=10.0.0"
       }
     },
-    "node_modules/figures": {
-      "version": "6.1.0",
-      "resolved": "https://registry.npmmirror.com/figures/-/figures-6.1.0.tgz",
-      "integrity": "sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==",
-      "dev": true,
-      "dependencies": {
-        "is-unicode-supported": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=18"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
     "node_modules/fs-constants": {
       "version": "1.0.0",
       "resolved": "https://registry.npmmirror.com/fs-constants/-/fs-constants-1.0.0.tgz",
       "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow=="
-    },
-    "node_modules/fs-extra": {
-      "version": "11.3.0",
-      "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-11.3.0.tgz",
-      "integrity": "sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==",
-      "dev": true,
-      "dependencies": {
-        "graceful-fs": "^4.2.0",
-        "jsonfile": "^6.0.1",
-        "universalify": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=14.14"
-      }
     },
     "node_modules/fs.realpath": {
       "version": "1.0.0",
@@ -2223,31 +1384,6 @@
         "node": ">=0.6"
       }
     },
-    "node_modules/gensync": {
-      "version": "1.0.0-beta.2",
-      "resolved": "https://registry.npmmirror.com/gensync/-/gensync-1.0.0-beta.2.tgz",
-      "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
-      "dev": true,
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/get-stream": {
-      "version": "9.0.1",
-      "resolved": "https://registry.npmmirror.com/get-stream/-/get-stream-9.0.1.tgz",
-      "integrity": "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==",
-      "dev": true,
-      "dependencies": {
-        "@sec-ant/readable-stream": "^0.4.1",
-        "is-stream": "^4.0.1"
-      },
-      "engines": {
-        "node": ">=18"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
     "node_modules/glob": {
       "version": "7.2.3",
       "resolved": "https://registry.npmmirror.com/glob/-/glob-7.2.3.tgz",
@@ -2268,46 +1404,10 @@
         "url": "https://github.com/sponsors/isaacs"
       }
     },
-    "node_modules/globals": {
-      "version": "11.12.0",
-      "resolved": "https://registry.npmmirror.com/globals/-/globals-11.12.0.tgz",
-      "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
-      "dev": true,
-      "engines": {
-        "node": ">=4"
-      }
-    },
     "node_modules/graceful-fs": {
       "version": "4.2.11",
       "resolved": "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.11.tgz",
       "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="
-    },
-    "node_modules/hookable": {
-      "version": "5.5.3",
-      "resolved": "https://registry.npmmirror.com/hookable/-/hookable-5.5.3.tgz",
-      "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==",
-      "dev": true
-    },
-    "node_modules/html-tags": {
-      "version": "3.3.1",
-      "resolved": "https://registry.npmmirror.com/html-tags/-/html-tags-3.3.1.tgz",
-      "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/human-signals": {
-      "version": "8.0.0",
-      "resolved": "https://registry.npmmirror.com/human-signals/-/human-signals-8.0.0.tgz",
-      "integrity": "sha512-/1/GPCpDUCCYwlERiYjxoczfP0zfvZMU/OWgQPMya9AbAE24vseigFdhAMObpc8Q4lc/kjutPfUddDYyAmejnA==",
-      "dev": true,
-      "engines": {
-        "node": ">=18.18.0"
-      }
     },
     "node_modules/iconv-lite": {
       "version": "0.6.3",
@@ -2374,112 +1474,10 @@
       "resolved": "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz",
       "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
     },
-    "node_modules/is-docker": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmmirror.com/is-docker/-/is-docker-3.0.0.tgz",
-      "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==",
-      "dev": true,
-      "bin": {
-        "is-docker": "cli.js"
-      },
-      "engines": {
-        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/is-inside-container": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmmirror.com/is-inside-container/-/is-inside-container-1.0.0.tgz",
-      "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==",
-      "dev": true,
-      "dependencies": {
-        "is-docker": "^3.0.0"
-      },
-      "bin": {
-        "is-inside-container": "cli.js"
-      },
-      "engines": {
-        "node": ">=14.16"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/is-plain-obj": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmmirror.com/is-plain-obj/-/is-plain-obj-4.1.0.tgz",
-      "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==",
-      "dev": true,
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/is-stream": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmmirror.com/is-stream/-/is-stream-4.0.1.tgz",
-      "integrity": "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==",
-      "dev": true,
-      "engines": {
-        "node": ">=18"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/is-unicode-supported": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmmirror.com/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz",
-      "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==",
-      "dev": true,
-      "engines": {
-        "node": ">=18"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/is-what": {
-      "version": "4.1.16",
-      "resolved": "https://registry.npmmirror.com/is-what/-/is-what-4.1.16.tgz",
-      "integrity": "sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==",
-      "dev": true,
-      "engines": {
-        "node": ">=12.13"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/mesqueeb"
-      }
-    },
-    "node_modules/is-wsl": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmmirror.com/is-wsl/-/is-wsl-3.1.0.tgz",
-      "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==",
-      "dev": true,
-      "dependencies": {
-        "is-inside-container": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=16"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
     "node_modules/isarray": {
       "version": "1.0.0",
       "resolved": "https://registry.npmmirror.com/isarray/-/isarray-1.0.0.tgz",
       "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
-    },
-    "node_modules/isexe": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz",
-      "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
-      "dev": true
     },
     "node_modules/js-base64": {
       "version": "3.7.7",
@@ -2490,48 +1488,6 @@
       "version": "1.2.3",
       "resolved": "https://registry.npmmirror.com/js-calendar/-/js-calendar-1.2.3.tgz",
       "integrity": "sha512-dAA1/Zbp4+c5E+ARCVTIuKepXsNLzSYfzvOimiYD4S5eeP9QuplSHLcdhfqFSwyM1o1u6ku6RRRCyaZ0YAjiBw=="
-    },
-    "node_modules/js-tokens": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmmirror.com/js-tokens/-/js-tokens-4.0.0.tgz",
-      "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
-      "dev": true
-    },
-    "node_modules/jsesc": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmmirror.com/jsesc/-/jsesc-3.1.0.tgz",
-      "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==",
-      "dev": true,
-      "bin": {
-        "jsesc": "bin/jsesc"
-      },
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/json5": {
-      "version": "2.2.3",
-      "resolved": "https://registry.npmmirror.com/json5/-/json5-2.2.3.tgz",
-      "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
-      "dev": true,
-      "bin": {
-        "json5": "lib/cli.js"
-      },
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/jsonfile": {
-      "version": "6.1.0",
-      "resolved": "https://registry.npmmirror.com/jsonfile/-/jsonfile-6.1.0.tgz",
-      "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
-      "dev": true,
-      "dependencies": {
-        "universalify": "^2.0.0"
-      },
-      "optionalDependencies": {
-        "graceful-fs": "^4.1.6"
-      }
     },
     "node_modules/jszip": {
       "version": "3.10.1",
@@ -2570,12 +1526,6 @@
       "dependencies": {
         "safe-buffer": "~5.1.0"
       }
-    },
-    "node_modules/kolorist": {
-      "version": "1.8.0",
-      "resolved": "https://registry.npmmirror.com/kolorist/-/kolorist-1.8.0.tgz",
-      "integrity": "sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==",
-      "dev": true
     },
     "node_modules/lazystream": {
       "version": "1.0.1",
@@ -2748,15 +1698,6 @@
       "resolved": "https://registry.npmmirror.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
       "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ=="
     },
-    "node_modules/lru-cache": {
-      "version": "5.1.1",
-      "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-5.1.1.tgz",
-      "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
-      "dev": true,
-      "dependencies": {
-        "yallist": "^3.0.2"
-      }
-    },
     "node_modules/magic-string": {
       "version": "0.30.17",
       "resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.17.tgz",
@@ -2821,12 +1762,6 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/mitt": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmmirror.com/mitt/-/mitt-3.0.1.tgz",
-      "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==",
-      "dev": true
-    },
     "node_modules/mkdirp": {
       "version": "0.5.6",
       "resolved": "https://registry.npmmirror.com/mkdirp/-/mkdirp-0.5.6.tgz",
@@ -2837,21 +1772,6 @@
       "bin": {
         "mkdirp": "bin/cmd.js"
       }
-    },
-    "node_modules/mrmime": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmmirror.com/mrmime/-/mrmime-2.0.1.tgz",
-      "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==",
-      "dev": true,
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/ms": {
-      "version": "2.1.3",
-      "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz",
-      "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
-      "dev": true
     },
     "node_modules/nanoid": {
       "version": "3.3.8",
@@ -2887,46 +1807,12 @@
         "node": ">= 4.4.x"
       }
     },
-    "node_modules/node-releases": {
-      "version": "2.0.19",
-      "resolved": "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.19.tgz",
-      "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==",
-      "dev": true
-    },
     "node_modules/normalize-path": {
       "version": "3.0.0",
       "resolved": "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz",
       "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
       "engines": {
         "node": ">=0.10.0"
-      }
-    },
-    "node_modules/npm-run-path": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmmirror.com/npm-run-path/-/npm-run-path-6.0.0.tgz",
-      "integrity": "sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==",
-      "dev": true,
-      "dependencies": {
-        "path-key": "^4.0.0",
-        "unicorn-magic": "^0.3.0"
-      },
-      "engines": {
-        "node": ">=18"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/npm-run-path/node_modules/path-key": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmmirror.com/path-key/-/path-key-4.0.0.tgz",
-      "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==",
-      "dev": true,
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
     "node_modules/numeral": {
@@ -2945,40 +1831,10 @@
         "wrappy": "1"
       }
     },
-    "node_modules/open": {
-      "version": "10.1.0",
-      "resolved": "https://registry.npmmirror.com/open/-/open-10.1.0.tgz",
-      "integrity": "sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==",
-      "dev": true,
-      "dependencies": {
-        "default-browser": "^5.2.1",
-        "define-lazy-prop": "^3.0.0",
-        "is-inside-container": "^1.0.0",
-        "is-wsl": "^3.1.0"
-      },
-      "engines": {
-        "node": ">=18"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
     "node_modules/pako": {
       "version": "1.0.11",
       "resolved": "https://registry.npmmirror.com/pako/-/pako-1.0.11.tgz",
       "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw=="
-    },
-    "node_modules/parse-ms": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmmirror.com/parse-ms/-/parse-ms-4.0.0.tgz",
-      "integrity": "sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==",
-      "dev": true,
-      "engines": {
-        "node": ">=18"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
     },
     "node_modules/parse-node-version": {
       "version": "1.0.1",
@@ -2997,43 +1853,10 @@
         "node": ">=0.10.0"
       }
     },
-    "node_modules/path-key": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmmirror.com/path-key/-/path-key-3.1.1.tgz",
-      "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/pathe": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmmirror.com/pathe/-/pathe-2.0.3.tgz",
-      "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==",
-      "dev": true
-    },
-    "node_modules/perfect-debounce": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmmirror.com/perfect-debounce/-/perfect-debounce-1.0.0.tgz",
-      "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==",
-      "dev": true
-    },
     "node_modules/picocolors": {
       "version": "1.1.1",
       "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.1.1.tgz",
       "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="
-    },
-    "node_modules/picomatch": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-4.0.2.tgz",
-      "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==",
-      "dev": true,
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/jonschlinkert"
-      }
     },
     "node_modules/pify": {
       "version": "4.0.1",
@@ -3080,21 +1903,6 @@
       },
       "engines": {
         "node": "^10 || ^12 || >=14"
-      }
-    },
-    "node_modules/pretty-ms": {
-      "version": "9.2.0",
-      "resolved": "https://registry.npmmirror.com/pretty-ms/-/pretty-ms-9.2.0.tgz",
-      "integrity": "sha512-4yf0QO/sllf/1zbZWYnvWw3NxCQwLXKzIj0G849LSufP15BXKM0rbD2Z3wVnkMfjdn/CB0Dpp444gYAACdsplg==",
-      "dev": true,
-      "dependencies": {
-        "parse-ms": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=18"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
     "node_modules/process-nextick-args": {
@@ -3149,12 +1957,6 @@
         "node": ">=10"
       }
     },
-    "node_modules/rfdc": {
-      "version": "1.4.1",
-      "resolved": "https://registry.npmmirror.com/rfdc/-/rfdc-1.4.1.tgz",
-      "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==",
-      "dev": true
-    },
     "node_modules/rimraf": {
       "version": "2.7.1",
       "resolved": "https://registry.npmmirror.com/rimraf/-/rimraf-2.7.1.tgz",
@@ -3203,18 +2005,6 @@
         "@rollup/rollup-win32-ia32-msvc": "4.34.8",
         "@rollup/rollup-win32-x64-msvc": "4.34.8",
         "fsevents": "~2.3.2"
-      }
-    },
-    "node_modules/run-applescript": {
-      "version": "7.0.0",
-      "resolved": "https://registry.npmmirror.com/run-applescript/-/run-applescript-7.0.0.tgz",
-      "integrity": "sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==",
-      "dev": true,
-      "engines": {
-        "node": ">=18"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
     "node_modules/safe-buffer": {
@@ -3266,66 +2056,10 @@
       "resolved": "https://registry.npmmirror.com/select/-/select-1.1.2.tgz",
       "integrity": "sha512-OwpTSOfy6xSs1+pwcNrv0RBMOzI39Lp3qQKUTPVVPRjCdNa5JH/oPRiqsesIskK8TVgmRiHwO4KXlV2Li9dANA=="
     },
-    "node_modules/semver": {
-      "version": "6.3.1",
-      "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.1.tgz",
-      "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
-      "dev": true,
-      "bin": {
-        "semver": "bin/semver.js"
-      }
-    },
     "node_modules/setimmediate": {
       "version": "1.0.5",
       "resolved": "https://registry.npmmirror.com/setimmediate/-/setimmediate-1.0.5.tgz",
       "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA=="
-    },
-    "node_modules/shebang-command": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmmirror.com/shebang-command/-/shebang-command-2.0.0.tgz",
-      "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
-      "dev": true,
-      "dependencies": {
-        "shebang-regex": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/shebang-regex": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-3.0.0.tgz",
-      "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/signal-exit": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmmirror.com/signal-exit/-/signal-exit-4.1.0.tgz",
-      "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
-      "dev": true,
-      "engines": {
-        "node": ">=14"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
-    "node_modules/sirv": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmmirror.com/sirv/-/sirv-3.0.1.tgz",
-      "integrity": "sha512-FoqMu0NCGBLCcAkS1qA+XJIQTR6/JHfQXl+uGteNCQ76T91DMUjPa9xfmeqMY3z80nLSg9yQmNjK0Px6RWsH/A==",
-      "dev": true,
-      "dependencies": {
-        "@polka/url": "^1.0.0-next.24",
-        "mrmime": "^2.0.0",
-        "totalist": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=18"
-      }
     },
     "node_modules/source-map": {
       "version": "0.6.1",
@@ -3345,15 +2079,6 @@
         "node": ">=0.10.0"
       }
     },
-    "node_modules/speakingurl": {
-      "version": "14.0.1",
-      "resolved": "https://registry.npmmirror.com/speakingurl/-/speakingurl-14.0.1.tgz",
-      "integrity": "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
     "node_modules/string_decoder": {
       "version": "1.3.0",
       "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.3.0.tgz",
@@ -3361,36 +2086,6 @@
       "dependencies": {
         "safe-buffer": "~5.2.0"
       }
-    },
-    "node_modules/strip-final-newline": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmmirror.com/strip-final-newline/-/strip-final-newline-4.0.0.tgz",
-      "integrity": "sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==",
-      "dev": true,
-      "engines": {
-        "node": ">=18"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/superjson": {
-      "version": "2.2.2",
-      "resolved": "https://registry.npmmirror.com/superjson/-/superjson-2.2.2.tgz",
-      "integrity": "sha512-5JRxVqC8I8NuOUjzBbvVJAKNM8qoVuH0O77h4WInc/qC2q5IreqKxYwgkga3PfA22OayK2ikceb/B26dztPl+Q==",
-      "dev": true,
-      "dependencies": {
-        "copy-anything": "^3.0.2"
-      },
-      "engines": {
-        "node": ">=16"
-      }
-    },
-    "node_modules/svg-tags": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmmirror.com/svg-tags/-/svg-tags-1.0.0.tgz",
-      "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==",
-      "dev": true
     },
     "node_modules/tar-stream": {
       "version": "2.2.0",
@@ -3420,15 +2115,6 @@
         "node": ">=14.14"
       }
     },
-    "node_modules/totalist": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmmirror.com/totalist/-/totalist-3.0.1.tgz",
-      "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==",
-      "dev": true,
-      "engines": {
-        "node": ">=6"
-      }
-    },
     "node_modules/traverse": {
       "version": "0.3.9",
       "resolved": "https://registry.npmmirror.com/traverse/-/traverse-0.3.9.tgz",
@@ -3450,27 +2136,6 @@
       "dev": true,
       "optional": true,
       "peer": true
-    },
-    "node_modules/unicorn-magic": {
-      "version": "0.3.0",
-      "resolved": "https://registry.npmmirror.com/unicorn-magic/-/unicorn-magic-0.3.0.tgz",
-      "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==",
-      "dev": true,
-      "engines": {
-        "node": ">=18"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/universalify": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmmirror.com/universalify/-/universalify-2.0.1.tgz",
-      "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
-      "dev": true,
-      "engines": {
-        "node": ">= 10.0.0"
-      }
     },
     "node_modules/unzipper": {
       "version": "0.10.14",
@@ -3514,36 +2179,6 @@
       "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
       "dependencies": {
         "safe-buffer": "~5.1.0"
-      }
-    },
-    "node_modules/update-browserslist-db": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npmmirror.com/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz",
-      "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==",
-      "dev": true,
-      "funding": [
-        {
-          "type": "opencollective",
-          "url": "https://opencollective.com/browserslist"
-        },
-        {
-          "type": "tidelift",
-          "url": "https://tidelift.com/funding/github/npm/browserslist"
-        },
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/ai"
-        }
-      ],
-      "dependencies": {
-        "escalade": "^3.2.0",
-        "picocolors": "^1.1.1"
-      },
-      "bin": {
-        "update-browserslist-db": "cli.js"
-      },
-      "peerDependencies": {
-        "browserslist": ">= 4.21.0"
       }
     },
     "node_modules/util-deprecate": {
@@ -3659,90 +2294,6 @@
         }
       }
     },
-    "node_modules/vite-hot-client": {
-      "version": "0.2.4",
-      "resolved": "https://registry.npmmirror.com/vite-hot-client/-/vite-hot-client-0.2.4.tgz",
-      "integrity": "sha512-a1nzURqO7DDmnXqabFOliz908FRmIppkBKsJthS8rbe8hBEXwEwe4C3Pp33Z1JoFCYfVL4kTOMLKk0ZZxREIeA==",
-      "dev": true,
-      "funding": {
-        "url": "https://github.com/sponsors/antfu"
-      },
-      "peerDependencies": {
-        "vite": "^2.6.0 || ^3.0.0 || ^4.0.0 || ^5.0.0-0 || ^6.0.0-0"
-      }
-    },
-    "node_modules/vite-plugin-inspect": {
-      "version": "0.8.9",
-      "resolved": "https://registry.npmmirror.com/vite-plugin-inspect/-/vite-plugin-inspect-0.8.9.tgz",
-      "integrity": "sha512-22/8qn+LYonzibb1VeFZmISdVao5kC22jmEKm24vfFE8siEn47EpVcCLYMv6iKOYMJfjSvSJfueOwcFCkUnV3A==",
-      "dev": true,
-      "dependencies": {
-        "@antfu/utils": "^0.7.10",
-        "@rollup/pluginutils": "^5.1.3",
-        "debug": "^4.3.7",
-        "error-stack-parser-es": "^0.1.5",
-        "fs-extra": "^11.2.0",
-        "open": "^10.1.0",
-        "perfect-debounce": "^1.0.0",
-        "picocolors": "^1.1.1",
-        "sirv": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=14"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/antfu"
-      },
-      "peerDependencies": {
-        "vite": "^3.1.0 || ^4.0.0 || ^5.0.0-0 || ^6.0.1"
-      },
-      "peerDependenciesMeta": {
-        "@nuxt/kit": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/vite-plugin-vue-devtools": {
-      "version": "7.7.2",
-      "resolved": "https://registry.npmmirror.com/vite-plugin-vue-devtools/-/vite-plugin-vue-devtools-7.7.2.tgz",
-      "integrity": "sha512-5V0UijQWiSBj32blkyPEqIbzc6HO9c1bwnBhx+ay2dzU0FakH+qMdNUT8nF9BvDE+i6I1U8CqCuJiO20vKEdQw==",
-      "dev": true,
-      "dependencies": {
-        "@vue/devtools-core": "^7.7.2",
-        "@vue/devtools-kit": "^7.7.2",
-        "@vue/devtools-shared": "^7.7.2",
-        "execa": "^9.5.1",
-        "sirv": "^3.0.0",
-        "vite-plugin-inspect": "0.8.9",
-        "vite-plugin-vue-inspector": "^5.3.1"
-      },
-      "engines": {
-        "node": ">=v14.21.3"
-      },
-      "peerDependencies": {
-        "vite": "^3.1.0 || ^4.0.0-0 || ^5.0.0-0 || ^6.0.0-0"
-      }
-    },
-    "node_modules/vite-plugin-vue-inspector": {
-      "version": "5.3.1",
-      "resolved": "https://registry.npmmirror.com/vite-plugin-vue-inspector/-/vite-plugin-vue-inspector-5.3.1.tgz",
-      "integrity": "sha512-cBk172kZKTdvGpJuzCCLg8lJ909wopwsu3Ve9FsL1XsnLBiRT9U3MePcqrgGHgCX2ZgkqZmAGR8taxw+TV6s7A==",
-      "dev": true,
-      "dependencies": {
-        "@babel/core": "^7.23.0",
-        "@babel/plugin-proposal-decorators": "^7.23.0",
-        "@babel/plugin-syntax-import-attributes": "^7.22.5",
-        "@babel/plugin-syntax-import-meta": "^7.10.4",
-        "@babel/plugin-transform-typescript": "^7.22.15",
-        "@vue/babel-plugin-jsx": "^1.1.5",
-        "@vue/compiler-dom": "^3.3.4",
-        "kolorist": "^1.8.0",
-        "magic-string": "^0.30.4"
-      },
-      "peerDependencies": {
-        "vite": "^3.0.0-0 || ^4.0.0-0 || ^5.0.0-0 || ^6.0.0-0"
-      }
-    },
     "node_modules/vue": {
       "version": "3.5.13",
       "resolved": "https://registry.npmmirror.com/vue/-/vue-3.5.13.tgz",
@@ -3796,21 +2347,6 @@
         "vue": "^3.2.0"
       }
     },
-    "node_modules/which": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmmirror.com/which/-/which-2.0.2.tgz",
-      "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
-      "dev": true,
-      "dependencies": {
-        "isexe": "^2.0.0"
-      },
-      "bin": {
-        "node-which": "bin/node-which"
-      },
-      "engines": {
-        "node": ">= 8"
-      }
-    },
     "node_modules/wrappy": {
       "version": "1.0.2",
       "resolved": "https://registry.npmmirror.com/wrappy/-/wrappy-1.0.2.tgz",
@@ -3820,24 +2356,6 @@
       "version": "2.2.0",
       "resolved": "https://registry.npmmirror.com/xmlchars/-/xmlchars-2.2.0.tgz",
       "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw=="
-    },
-    "node_modules/yallist": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmmirror.com/yallist/-/yallist-3.1.1.tgz",
-      "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
-      "dev": true
-    },
-    "node_modules/yoctocolors": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmmirror.com/yoctocolors/-/yoctocolors-2.1.1.tgz",
-      "integrity": "sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ==",
-      "dev": true,
-      "engines": {
-        "node": ">=18"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
     },
     "node_modules/zip-stream": {
       "version": "4.1.1",
diff --git a/package.json b/package.json
index 69961e1..5a96fa2 100644
--- a/package.json
+++ b/package.json
@@ -19,7 +19,6 @@
   "devDependencies": {
     "@vitejs/plugin-vue": "^5.2.1",
     "less": "^4.2.2",
-    "vite": "^6.1.0",
-    "vite-plugin-vue-devtools": "^7.7.2"
+    "vite": "^6.1.0"
   }
 }
diff --git a/public/skin/light.css b/public/skin/light.css
index 1aa2ed4..8a07ba2 100644
--- a/public/skin/light.css
+++ b/public/skin/light.css
@@ -3,10 +3,11 @@
     --second-background-color: #40c3ff;
     --third-background-color: #cceeff;
 
-    --table-header-background-color: #e4e4e4;
-    --table-header-border-color: #cdcdcd;
+    --table-border-color: #eee;
+    --table-header-background-color: #f9f9f9;
+    --table-header-border-color: #eee;
 
-    --table-header-th-border-color: #dcdee2;
+    --table-header-th-border-color: #eee;
 }
 
 .layout-header,
@@ -44,9 +45,16 @@
 
 .ivu-table th {
     background-color: var(--table-header-background-color);
-    border-right: 1px solid var(--table-header-border-color);
+    border-top: 1px solid var(--table-header-border-color);
 }
 
 .ivu-table th {
-    border-bottom-color: var(--table-header-th-border-color)
+    border-bottom-color: var(--table-header-th-border-color) !important;
+}
+
+.data-table{
+    border:1px solid var(--table-border-color);
+}
+.data-table .buttons{
+    background-color: var(--table-header-background-color);
 }
\ No newline at end of file
diff --git a/src/components/examples/data-table.vue b/src/components/examples/data-table.vue
index d2db141..e9e2ca6 100644
--- a/src/components/examples/data-table.vue
+++ b/src/components/examples/data-table.vue
@@ -1,19 +1,196 @@
 <template>
-  <div class="data-table">
+  <div class="data-table" ref="refDataTable">
+    <div v-if="showForm" class="forms" :class="{ collapse: !formExpand }">
+      <Form :model="form" v-bind="formObject.options" ref="refForm">
+        <Row>
+          <Col
+            v-for="(col, index) in formList"
+            :key="`${index}`"
+            :span="col.span"
+          >
+            <FormItem :label="`${col.label}`">
+              <Input
+                v-if="col.type == 'input'"
+                v-model="form[col.field]"
+                size="small"
+              >
+                <template v-if="col.suffix" #suffix>
+                  <Icon :type="col.suffix" @click="col.onSuffixClick" />
+                </template>
+              </Input>
+              <DatePicker
+                v-else-if="col.type == 'daterange'"
+                type="daterange"
+                v-model="form[col.field]"
+                separator=" 鑷�"
+                size="small"
+                style="width: 100%"
+                @on-change="col.onChange"
+              ></DatePicker>
+              <DatePicker
+                v-else-if="col.type == 'date'"
+                type="date"
+                v-model="form[field]"
+                size="small"
+                @on-change="col.onChange"
+              />
+              <Select
+                v-else-if="col.type == 'select'"
+                v-model="form[col.field]"
+                size="small"
+              >
+                <Option
+                  v-for="(opt, i) in col.options"
+                  :key="i"
+                  :value="col.value"
+                  >{{ col.label }}</Option
+                >
+              </Select>
+              <Checkbox
+                v-else-if="col.type == 'checkbox'"
+                v-model="form[col.field]"
+                size="small"
+                >{{ form.label }}</Checkbox
+              >
+            </FormItem>
+          </Col>
+        </Row>
+      </Form>
+      <div class="btns">
+        <Button type="primary" size="small"
+          ><Icon type="md-settings" @click="onShowFormDialog"
+        /></Button>
+        <Button
+          v-if="formExpand"
+          v-show="showFormExpand"
+          type="primary"
+          size="small"
+          @click="formExpand = !formExpand"
+          ><Icon type="ios-arrow-up"
+        /></Button>
+        <Button
+          v-else
+          v-show="showFormExpand"
+          type="primary"
+          size="small"
+          @click="formExpand = !formExpand"
+          ><Icon type="ios-arrow-down"
+        /></Button>
+      </div>
+    </div>
+    <div class="buttons" v-if="showTopButtons">
+      <Space>
+        <Button
+          v-for="(btn, i) in buttons"
+          :key="i"
+          type="primary"
+          size="small"
+          @click="btn.onClick"
+          >{{ btn.showName }}</Button
+        >
+      </Space>
+      <Space class="ivu-fr">
+        <Poptip title="鍒嗛〉鍣ㄤ綅缃� placement="left-start">
+          <Tooltip content="璁剧疆鍒嗛〉鍣ㄤ綅缃� transfer>
+            <Button size="small"><Icon type="md-apps" /></Button>
+          </Tooltip>
+          <template #content>
+            <RadioGroup
+              v-model="paganationPlacement"
+              @on-change="onPaganationPlacementChange"
+            >
+              <Radio label="top">
+                <Icon type="md-at"></Icon>
+                <span>涓�/span>
+              </Radio>
+              <Radio label="bottom">
+                <Icon type="md-basketball"></Icon>
+                <span>涓�/span>
+              </Radio>
+            </RadioGroup>
+          </template>
+        </Poptip>
+        <Poptip popper-class="col-list" placement="left-start">
+          <Tooltip content="璋冩暣鍒� transfer>
+            <Button size="small"><Icon type="md-settings" /></Button>
+          </Tooltip>
+          <template #title>
+            <Checkbox
+              :indeterminate="columnListIndeterminate"
+              :model-value="columnCheckAll"
+              @click.prevent="onColumnCheckAll"
+              >鍏ㄩ�</Checkbox
+            >
+          </template>
+          <template #content>
+            <CheckboxGroup
+              v-model="columnShowList"
+              @on-change="onShowColumnChange"
+            >
+              <Checkbox v-for="(col, i) in columns" :key="i" :label="col.key">{{
+                toColumnLabel(col)
+              }}</Checkbox>
+            </CheckboxGroup>
+          </template>
+        </Poptip>
+        <Poptip title="璁剧疆瀛椾綋澶у皬" placement="left-start">
+          <Tooltip content="璋冩暣瀛椾綋" transfer>
+            <Button size="small"><Icon type="md-apps" /></Button>
+          </Tooltip>
+          <template #content>
+            <RadioGroup v-model="fontSize">
+              <Radio label="small">
+                <Icon type="md-at"></Icon>
+                <span>灏�/span>
+              </Radio>
+              <Radio label="default">
+                <Icon type="md-basketball"></Icon>
+                <span>涓�/span>
+              </Radio>
+              <Radio label="large">
+                <Icon type="ios-briefcase"></Icon>
+                <span>澶�/span>
+              </Radio>
+            </RadioGroup>
+          </template>
+        </Poptip>
+        <Tooltip content="鎵撳嵃" transfer>
+          <Button size="small"><Icon type="ios-print" /></Button>
+        </Tooltip>
+      </Space>
+      <Page
+        v-if="paged && paganationPlacement == 'top'"
+        class="absolute"
+        :model-value="page"
+        :total="total"
+        :page-size="limit"
+        :page-size-opts="limits"
+        show-sizer
+        show-total
+        show-elevator
+        transfer
+        simple
+        @on-change="onPageChange"
+        @on-page-size-change="onPageSizeChange"
+        @on-prev="onPrev"
+        @on-next="onNext"
+      />
+    </div>
     <Table
-      class="ivu-table-mini"
-      :row-class-name="() => ['no-wrap', 'col-gap-none']"
-      :columns="columns"
+      class="col-gap-none"
+      :row-class-name="() => ['no-wrap']"
+      :columns="tableColumns"
       :data="data"
-      :height="paged ? tableHeight - 70 : tableHeight"
-      border
+      :height="tableHeight"
       :highlight-row="highlightRow"
+      :size="fontSize"
+      @on-row-click="onRowClick"
       @on-current-change="onCurrentChange"
       @on-selection-change="onSelectionChange"
       ref="refTable"
     ></Table>
     <Page
-      v-if="paged"
+      v-if="paged && paganationPlacement == 'bottom'"
       class="text-center"
       :model-value="page"
       :total="total"
@@ -30,50 +207,173 @@
       ref="refPage"
     />
     <Spin fix :show="loading" />
+    <FormDialog
+      v-model="formDialogVisible"
+      :list="formObject.items"
+      @ok="onFormDialogOK"
+    ></FormDialog>
   </div>
 </template>
 
 <script>
 import { ref } from "vue";
+import FormDialog from "./form-dialog.vue";
 export default {
   name: "DataTable",
+  components: {
+    FormDialog,
+  },
   props: {
-    tableHeight: Number | String,
+    // 瀹瑰櫒楂樺害
+    height: Number | String,
+    // 甯歌椤堕儴鎸夐挳
+    buttons: {
+      type: Array,
+      default: () => [],
+    },
+    // 鏄惁鍒嗛〉
     paged: {
       type: Boolean,
       default: () => true,
     },
+    // 鍒楀畾涔�     columns: {
       type: Array,
       default: () => [],
     },
+    // 鏁版嵁婧�     data: {
       type: Array,
       default: () => [],
     },
+    // 鏁版嵁鎬绘暟
     total: {
       type: Number,
       default: () => 0,
     },
+    // 褰撳墠椤�     page: {
       type: Number,
       default: () => 1,
     },
+    // 姣忛〉鍑犳潯鏁版嵁
     limit: {
       type: Number,
       default: () => 10,
     },
+    // limit鍒楄〃
     limits: {
       type: Array,
       default: () => [10, 20, 30, 40],
     },
+    // 璁板綍鍔犺浇鐘舵�
     loading: Boolean,
+    // 鍗曢�妯″紡
     highlightRow: Boolean,
+    showForm: {
+      type: Boolean,
+      default: () => true,
+    },
+    showTopButtons: {
+      type: Boolean,
+      default: () => true,
+    },
+    size: {
+      type: String,
+      default: () => "default",
+    },
+    pagePlacement: {
+      type: String,
+      default: () => "bottom", // top/bottom
+    },
+    formObject: {
+      type: Object,
+      default: () => ({}),
+    },
   },
   data() {
-    return {};
+    return {
+      // 閰嶇疆鍝簺鍒楁樉绀�+      columnListIndeterminate: false,
+      columnCheckAll: true,
+      columnShowList: [],
+      // 閰嶇疆瀛椾綋
+      fontSize: this.size,
+      // 鏌ヨ琛ㄥ崟
+      // 鏌ヨ琛ㄥ崟鐨勫畾涔�+      form: {},
+      formExpand: false,
+      showFormExpand: true,
+      formDialogVisible: false,
+      formShowList: [],
+      paganationPlacement: this.pagePlacement,
+    };
+  },
+  computed: {
+    // 鏁版嵁鍒楄〃楂樺害
+    tableHeight() {
+      let formHeight = this.showForm
+        ? this.refDataTable?.querySelector(".forms")?.clientHeight + 9
+        : 0;
+      let buttonHeight = this.showTopButtons
+        ? this.refDataTable?.querySelector(".buttons")?.clientHeight
+        : 0;
+      let pageHeight =
+        this.paged && this.paganationPlacement == "bottom" ? 70 - 18 : 0;
+      return this.height - formHeight - buttonHeight - pageHeight;
+    },
+    // 瀹為檯瑕佹樉绀虹殑鍒�+    tableColumns() {
+      return this.columns.filter((col) =>
+        this.columnShowList.includes(col.key)
+      );
+    },
+    // 瀹為檯瑕佹樉绀虹殑琛ㄥ崟椤�+    formList() {
+      return (
+        this.formObject.items?.filter((l) =>
+          this.formShowList.includes(l.field)
+        ) || []
+      );
+    },
   },
   methods: {
+    toColumnLabel(col) {
+      if (col.key == "index") return "搴忓彿";
+      else if (col.key == "row_button") return "鎿嶄綔鎸夐挳";
+      else return col.title;
+    },
+    onPaganationPlacementChange() {
+      this.$nextTick(() => this.resize());
+    },
+    // 閰嶇疆鍒�鍏ㄩ�
+    onColumnCheckAll() {
+      if (this.columnListIndeterminate) {
+        this.columnCheckAll = false;
+      } else {
+        this.columnCheckAll = !this.columnCheckAll;
+      }
+      this.columnListIndeterminate = false;
+
+      if (this.columnCheckAll) {
+        this.columnShowList = this.columns.map((c) => c.key);
+      } else {
+        this.columnShowList = [];
+      }
+    },
+    // 閰嶇疆鍒�鍗曢�
+    onShowColumnChange(data) {
+      if (data.length == this.columns.length) {
+        this.columnListIndeterminate = false;
+        this.columnCheckAll = true;
+      } else if (data.length > 0) {
+        this.columnListIndeterminate = true;
+        this.columnCheckAll = false;
+      } else {
+        this.columnListIndeterminate = false;
+        this.columnCheckAll = false;
+      }
+    },
     onPageChange(page) {
       this.$emit("on-change", page);
     },
@@ -100,17 +400,8 @@
     onCurrentChange(currentRow) {
       this.$emit("on-current-change", currentRow);
     },
-    onRowClick(row, index, emit = true) {
-      this.clickedRowIndex = index;
-      this.onCurrentChange(row);
-      if (emit) this.$emit("on-row-click", row, index);
-    },
-    onCellClick(row, column, data, event) {
-      event.stopPropagation();
-      let index = row._index;
-      if (index === undefined) index = this.rows.find((r) => r.id == row.id);
-      if (column.key == "row_button") this.onRowClick(row, index, false);
-      else this.onRowClick(row, index, true);
+    onRowClick(row, index) {
+      this.$emit("on-row-click", row, index);
     },
     onSelect(selection, row) {
       this.$emit("on-select", selection, row);
@@ -127,21 +418,100 @@
     onColumnWidthResize(newWidth, oldWidth, column, event) {
       this.$emit("on-column-width-resize", newWidth, oldWidth, column, event);
     },
+    onShowFormDialog() {
+      this.formDialogVisible = true;
+    },
+    resize() {
+      this.$nextTick(() => {
+        let height = this.refForm?.$el?.clientHeight;
+        if (height < 50) {
+          this.formExpand = false;
+          this.showFormExpand = false;
+        } else {
+          this.formExpand = true;
+          this.showFormExpand = true;
+        }
+      });
+    },
+    onFormDialogOK(showList) {
+      this.formShowList = showList;
+    },
   },
   setup() {
+    const refDataTable = ref(null);
+    const refForm = ref(null);
     const refTable = ref(null);
     const refPage = ref(null);
-    return { refTable, refPage };
+    return { refDataTable, refForm, refTable, refPage };
+  },
+  watch: {
+    columns(columns) {
+      this.columnShowList = columns.map((c) => c.key);
+    },
+    ["formObject.items"](list) {
+      this.formShowList = list.map((l) => l.field);
+    },
+    formShowList() {
+      this.resize();
+    },
   },
 };
 </script>
 
-<style lang="less" scoped>
+<style lang="less">
 .data-table {
   height: 100%;
   position: relative;
+  .forms {
+    margin-bottom: 9px;
+    padding: 0 10px;
+    position: relative;
+    &.collapse {
+      height: 30px;
+      padding-right: 100px;
+      overflow: hidden;
+    }
+    .btns {
+      position: absolute;
+      right: 10px;
+      bottom: 0;
+      display: flex;
+      flex-direction: row;
+      gap: 10px;
+      z-index: 1;
+    }
+    .ivu-form .ivu-form-item-label,
+    .ivu-checkbox-wrapper {
+      font-size: 12px;
+    }
+    .ivu-input-wrapper {
+      .ivu-icon {
+        cursor: pointer;
+      }
+    }
+  }
+  .buttons {
+    padding: 0 9px;
+    line-height: 33px;
+    position: relative;
+  }
   .text-center {
     text-align: center;
   }
 }
+.col-list {
+  .ivu-checkbox-group {
+    display: flex;
+    flex-direction: column;
+  }
+}
+.ivu-page {
+  padding: 9px;
+}
+.absolute {
+  position: absolute;
+  top: 0;
+  right: 180px;
+  padding: 0px;
+}
 </style>
\ No newline at end of file
diff --git a/src/components/examples/form-dialog.vue b/src/components/examples/form-dialog.vue
new file mode 100644
index 0000000..4e6684d
--- /dev/null
+++ b/src/components/examples/form-dialog.vue
@@ -0,0 +1,101 @@
+<template>
+  <div class="form-dialog">
+    <Modal
+      :model-value="modelValue"
+      title="淇敼鏌ヨ琛ㄥ崟"
+      class-name="form-dialog"
+      @update:model-value="(v) => this.$emit('update:modelValue', v)"
+    >
+      <Checkbox
+        :indeterminate="indeterminate"
+        :model-value="checkAll"
+        @click.prevent="onCheckAll"
+        >鍏ㄩ�</Checkbox
+      >
+      <Divider size="small" />
+      <CheckboxGroup v-model="showList" @on-change="onShowChange">
+        <Checkbox v-for="(item, i) in list" :key="i" :label="item.field">{{
+          item.label?.replace("锛�, "")
+        }}</Checkbox>
+      </CheckboxGroup>
+      <template #footer>
+        <Space>
+          <Button type="text" @click="onCancel">鍙栨秷</Button>
+          <Button type="primary" @click="onOk">纭畾</Button>
+        </Space>
+      </template>
+    </Modal>
+  </div>
+</template>
+
+<script>
+export default {
+  name: "FormDialog",
+  props: {
+    modelValue: Boolean,
+    list: Array,
+  },
+  data() {
+    return {
+      indeterminate: false,
+      checkAll: true,
+      showList: [],
+    };
+  },
+  methods: {
+    onOk() {
+      this.$emit("ok", this.showList);
+      this.$emit("update:modelValue", false);
+    },
+    onCancel() {
+      this.$emit("update:modelValue", false);
+    },
+    onCheckAll() {
+      if (this.indeterminate) {
+        this.checkAll = false;
+      } else {
+        this.checkAll = !this.checkAll;
+      }
+      this.indeterminate = false;
+
+      if (this.checkAll) {
+        this.showList = this.list.map((l) => l.field);
+      } else {
+        this.showList = [];
+      }
+    },
+    onShowChange(data) {
+      if (data.length == this.list.length) {
+        this.indeterminate = false;
+        this.checkAll = true;
+      } else if (data.length > 0) {
+        this.indeterminate = true;
+        this.checkAll = false;
+      } else {
+        this.indeterminate = false;
+        this.checkAll = false;
+      }
+    },
+  },
+  watch: {
+    list(list) {
+      this.showList = list.map((l) => l.field);
+    },
+  },
+};
+</script>
+
+<style lang="less">
+.form-dialog {
+  .ivu-modal {
+    top: 40px;
+  }
+  .ivu-divider-horizontal {
+    margin: 9px 0;
+  }
+  .ivu-checkbox-group {
+    display: flex;
+    flex-direction: column;
+  }
+}
+</style>
\ No newline at end of file
diff --git a/src/less/examples.less b/src/less/examples.less
index d4188d2..1a256d1 100644
--- a/src/less/examples.less
+++ b/src/less/examples.less
@@ -1,81 +1,10 @@
-.ivu-table th {
-    border-bottom-color: #cdcdcd !important;
-}
-
 .no-wrap td .ivu-table-cell {
     white-space: nowrap;
 }
 
-.ivu-table-mini {
-    font-size: 12px;
-
-    td {
-        height: 28px;
-
-        &.ivu-table-expanded-cell {
-            padding: 10px 40px;
-        }
-
-        .ivu-table-cell-with-expand {
-            height: 28px;
-            line-height: 28px;
-        }
-    }
-
-    thead .ivu-table-cell {
-        padding-left: 6px;
-        padding-right: 4px;
-    }
-
-    margin-bottom:12px;
-}
-
-.col-gap-none .ivu-table-cell {
+.col-gap-none .ivu-table .ivu-table-cell {
     padding-left: 0;
     padding-right: 0;
-    width: 100%;
-    height: 100%;
-
-    >div,
-    >a,
-    >span {
-        width: 100%;
-        height: 100%;
-        padding-left: 6px;
-        padding-right: 6px;
-        padding-top: 4px;
-        padding-bottom: 4px;
-    }
-
-    >a,
-    >span {
-        display: block;
-    }
-
-    &.ivu-table-cell-with-selection {
-        padding-top: 3px;
-    }
-}
-
-.ivu-table {
-    .ivu-table-tbody {
-        background-color: #fff;
-    }
-}
-
-.ivu-table-header thead tr th,
-.ivu-table-fixed-header thead tr th {
-    // padding: 0 !important;
-    text-align: center !important;
-    font-size: 12px;
-}
-
-.ivu-table {
-    .column-hidden {
-        div {
-            white-space: nowrap;
-        }
-    }
 }
 
 .ivu-form {
@@ -127,6 +56,6 @@
     }
 }
 
-.ivu-spin-fix{
+.ivu-spin-fix {
     background-color: rgba(255, 255, 255, .3);
 }
\ No newline at end of file
diff --git a/src/views/examples/data-table/index.vue b/src/views/examples/data-table/index.vue
index 7bb8601..2d184ad 100644
--- a/src/views/examples/data-table/index.vue
+++ b/src/views/examples/data-table/index.vue
@@ -1,70 +1,9 @@
 <template>
   <div class="example-data-table" ref="refView">
-    <div class="search-form">
-      <Form :model="form" :label-width="110">
-        <Row>
-          <Col span="6">
-            <FormItem label="浠撳簱缂栫爜锛�>
-              <Input v-model="form.code" size="small"></Input>
-            </FormItem>
-          </Col>
-          <Col span="6">
-            <FormItem label="浠撳簱鍚嶇О锛�>
-              <Input v-model="form.name" size="small"></Input>
-            </FormItem>
-          </Col>
-          <Col span="6">
-            <FormItem label="浠撳簱璐熻矗浜猴細">
-              <Input v-model="form.leader" size="small"></Input>
-            </FormItem>
-          </Col>
-          <Col span="6">
-            <FormItem label="浠撳簱鐢佃瘽锛�>
-              <Input v-model="form.tel" size="small"></Input>
-            </FormItem>
-          </Col>
-        </Row>
-        <Row>
-          <Col span="6">
-            <FormItem label="涓婄骇浠撳簱缂栫爜锛�>
-              <Input v-model="form.topCode" size="small"></Input>
-            </FormItem>
-          </Col>
-          <Col span="6">
-            <FormItem label="鍦板潃锛�>
-              <Input v-model="form.address" size="small"></Input>
-            </FormItem>
-          </Col>
-          <Col span="4">
-            <FormItem :label-width="34">
-              <Checkbox v-model="form.isThisLevel" size="small"
-                >鏄惁鏈骇</Checkbox
-              >
-            </FormItem>
-          </Col>
-          <Col span="4">
-            <FormItem :label-width="34">
-              <Checkbox v-model="form.isEscrow" size="small">鏄惁浠g</Checkbox>
-            </FormItem>
-          </Col>
-          <Col span="4">
-            <FormItem :label-width="34">
-              <Checkbox v-model="form.isEnable" size="small">鏄惁鍚敤</Checkbox>
-            </FormItem>
-          </Col>
-        </Row>
-      </Form>
-    </div>
-    <div class="buttons">
-      <Space>
-        <Button type="success" size="small" @click="onAddClick">鏂板</Button>
-        <Button type="warning" size="small" @click="onEditClick">淇敼</Button>
-        <Button type="error" size="small" @click="onDelClick">鍒犻櫎</Button>
-        <Button type="primary" size="small" @click="onViewClick">鏌ョ湅</Button>
-      </Space>
-    </div>
     <DataTable
-      :tableHeight="tableHeight"
+      :height="height"
+      :formObject="formObject"
+      :buttons="buttons"
       :columns="columns"
       :data="data"
       :page="page"
@@ -98,9 +37,31 @@
   },
   data() {
     return {
+      formObject: {
+        options: {},
+        items: [],
+      },
+      buttons: [
+        {
+          showName: "鏂板",
+          onClick: () => this.onAddClick(),
+        },
+        {
+          showName: "淇敼",
+          onClick: () => this.onEditClick(),
+        },
+        {
+          showName: "鍒犻櫎",
+          onClick: () => this.onDelClick(),
+        },
+        {
+          showName: "鏌ョ湅",
+          onClick: () => this.onViewClick(),
+        },
+      ],
       columns: [],
       data: [],
-      tableHeight: 0,
+      height: 0,
       // 鍒嗛〉淇℃伅
       page: 1,
       limit: 30,
@@ -129,12 +90,60 @@
     };
   },
   methods: {
+    async loadForm() {
+      this.formObject.options = {
+        labelWidth: 110,
+      };
+      this.formObject.items = [
+        {
+          label: "浠撳簱缂栫爜锛�,
+          field: "SupplierCode",
+          value: "",
+          type: "input",
+          span: 6,
+        },
+        {
+          label: "浠撳簱鍚嶇О锛�,
+          field: "SupplierName",
+          value: "",
+          type: "input",
+          span: 6,
+        },
+        {
+          label: "浠撳簱鐢佃瘽锛�,
+          field: "ASNCode",
+          value: "",
+          type: "input",
+          span: 12,
+        },
+        {
+          label: "鍦板潃锛�,
+          field: "Invertory",
+          value: "",
+          type: "checkbox",
+          span: 6,
+        },
+        {
+          label: "鏄惁鏈骇",
+          field: "PurchaseOrderNo",
+          value: "",
+          type: "checkbox",
+          span: 6,
+        },
+        {
+          label: "鏄惁浠g",
+          field: "OrderDate",
+          value: "",
+          type: "checkbox",
+          span: 12,
+        },
+      ];
+    },
     async loadColumns() {
       this.columns = [
         {
           type: "selection",
           width: 40,
-          fixed: "left",
           align: "center",
         },
         {
@@ -144,81 +153,13 @@
             return h("div", (this.page - 1) * this.limit + index + 1);
           },
           width: 40,
-          fixed: "left",
           align: "center",
         },
-        {
-          key: "row_button",
-          title: " ",
-          render: (h, { row, index }) => {
-            return h(
-              resolveComponent("Space"),
-              {},
-              {
-                default: () => [
-                  h("a", [
-                    h(
-                      resolveComponent("Tooltip"),
-                      {
-                        content: "淇敼",
-                        style: {
-                          marginRight: "3px",
-                        },
-                      },
-                      {
-                        default: () =>
-                          h(resolveComponent("icon"), {
-                            type: "md-build",
-                            size: 14,
-                            color: "#f90",
-                            onClick: () => this.onEditRowClick(index),
-                          }),
-                      }
-                    ),
-                    h(
-                      resolveComponent("Tooltip"),
-                      {
-                        content: "鍒犻櫎",
-                        transfer: true,
-                        style: {
-                          verticalAlign: "-1px",
-                        },
-                      },
-                      {
-                        default: () =>
-                          h(
-                            resolveComponent("Poptip"),
-                            {
-                              title: "鏄惁纭畾鍒犻櫎姝ら」锛�,
-                              transfer: true,
-                              confirm: true,
-                              onOnOk: () => this.onDelClickItem(index),
-                              onOnCancel: () => {},
-                            },
-                            {
-                              default: () =>
-                                h(resolveComponent("icon"), {
-                                  type: "ios-trash-outline",
-                                  size: 18,
-                                  color: "#ed4014",
-                                }),
-                            }
-                          ),
-                      }
-                    ),
-                  ]),
-                ],
-              }
-            );
-          },
-          width: 50,
-          fixed: "left",
-        },
+
         {
           key: "code",
           title: "浠撳簱缂栫爜",
           width: 150,
-          fixed: "left",
           sortable: true,
           resizable: true,
         },
@@ -308,6 +249,49 @@
           align: "center",
           sortable: true,
         },
+        {
+          key: "row_button",
+          title: " ",
+          render: (h, { row, index }) => {
+            return h(
+              resolveComponent("Space"),
+              {},
+              {
+                default: () => [
+                  h("a", [
+                    h(
+                      "span",
+                      {
+                        style: {
+                          marginRight: "12px",
+                        },
+                        onClick: () => this.onEditRowClick(index),
+                      },
+                      "淇敼"
+                    ),
+                    ,
+                    h(
+                      resolveComponent("Poptip"),
+                      {
+                        title: "鏄惁纭畾鍒犻櫎姝ら」锛�,
+                        transfer: true,
+                        confirm: true,
+                        onOnOk: () => this.onDelClickItem(index),
+                        onOnCancel: () => {},
+                      },
+                      {
+                        default: () => h("span", "鍒犻櫎"),
+                      }
+                    ),
+                  ]),
+                ],
+              }
+            );
+          },
+          width: 100,
+          align: "center",
+          fixed: "right",
+        },
       ];
     },
     // 鍔犺浇鏁版嵁琛�@@ -351,13 +335,7 @@
       });
     },
     resize() {
-      let height =
-        this.refView.clientHeight -
-        this.$el.querySelector(".search-form").clientHeight -
-        this.$el.querySelector(".buttons").clientHeight -
-        9 -
-        9;
-      this.tableHeight = height;
+      this.height = this.refView.clientHeight - 20;
     },
     onAddClick() {
       this.infoDialog.model = "add";
@@ -440,6 +418,7 @@
     },
   },
   async mounted() {
+    await this.loadForm();
     await this.loadColumns();
     this.$nextTick(() => {
       this.resize();
@@ -456,8 +435,7 @@
 <style lang="less">
 .example-data-table {
   height: 100%;
-  .search-form,
-  .buttons {
+  .search-form {
     margin-bottom: 9px;
   }
   .table {
diff --git a/src/views/examples/master-slave.vue b/src/views/examples/master-slave.vue
index 1724a5e..eb8dfd1 100644
--- a/src/views/examples/master-slave.vue
+++ b/src/views/examples/master-slave.vue
@@ -8,72 +8,10 @@
     >
       <template #top>
         <div class="top-view" ref="refTopView">
-          <div class="search-form">
-            <Form :model="topForm" :label-width="110">
-              <Row>
-                <Col span="6">
-                  <FormItem label="浠撳簱缂栫爜锛�>
-                    <Input v-model="topForm.code" size="small"></Input>
-                  </FormItem>
-                </Col>
-                <Col span="6">
-                  <FormItem label="浠撳簱鍚嶇О锛�>
-                    <Input v-model="topForm.name" size="small"></Input>
-                  </FormItem>
-                </Col>
-                <Col span="6">
-                  <FormItem label="浠撳簱璐熻矗浜猴細">
-                    <Input v-model="topForm.leader" size="small"></Input>
-                  </FormItem>
-                </Col>
-                <Col span="6">
-                  <FormItem label="浠撳簱鐢佃瘽锛�>
-                    <Input v-model="topForm.tel" size="small"></Input>
-                  </FormItem>
-                </Col>
-              </Row>
-              <Row>
-                <Col span="6">
-                  <FormItem label="涓婄骇浠撳簱缂栫爜锛�>
-                    <Input v-model="topForm.topCode" size="small"></Input>
-                  </FormItem>
-                </Col>
-                <Col span="6">
-                  <FormItem label="鍦板潃锛�>
-                    <Input v-model="topForm.address" size="small"></Input>
-                  </FormItem>
-                </Col>
-                <Col span="4">
-                  <FormItem :label-width="34">
-                    <Checkbox v-model="topForm.isThisLevel" size="small"
-                      >鏄惁鏈骇</Checkbox
-                    >
-                  </FormItem>
-                </Col>
-                <Col span="4">
-                  <FormItem :label-width="34">
-                    <Checkbox v-model="topForm.isEscorw" size="small"
-                      >鏄惁浠g</Checkbox
-                    >
-                  </FormItem>
-                </Col>
-                <Col span="4">
-                  <FormItem :label-width="34">
-                    <Checkbox v-model="topForm.isEnable" size="small"
-                      >鏄惁鍚敤</Checkbox
-                    >
-                  </FormItem>
-                </Col>
-              </Row>
-            </Form>
-          </div>
-          <div class="buttons">
-            <Button type="warning" size="small" @click="onClearClick"
-              >娓呯┖鏌ヨ</Button
-            >
-          </div>
           <DataTable
-            :tableHeight="tableTopHeight"
+            :buttons="topButtons"
+            :formObject="topFormObject"
+            :height="topHeight"
             :columns="topColumns"
             :data="topData"
             :page="topPage"
@@ -81,6 +19,7 @@
             :limits="topLimits"
             :total="topTotal"
             :loading="topLoading"
+            pagePlacement="top"
             highlight-row
             @on-current-change="onCurrentChange"
             @on-change="onPageChange"
@@ -94,14 +33,31 @@
       <template #bottom>
         <div class="bottom-view" ref="refBottomView">
           <DataTable
-            :tableHeight="tableBottomHeight"
+            :showForm="false"
+            :showTopButtons="false"
+            :height="bottomHeight"
             :columns="bottomColumns"
             :data="bottomData"
             :paged="false"
+            size="small"
+            @on-row-click="onBottomRowClick"
           ></DataTable>
         </div>
       </template>
     </Split>
+    <Drawer
+      title="婕旂ず"
+      closable
+      v-model="thirdDataDialog.visible"
+      :width="thirdDataDialog.width"
+      :mask-closable="false"
+      :mask="false"
+      draggable
+    >
+      <p>Some contents...</p>
+      <p>Some contents...</p>
+      <p>Some contents...</p>
+    </Drawer>
     <Spin fix :show="loading" />
   </div>
 </template>
@@ -118,11 +74,21 @@
     return {
       // 鍒嗛殧姣斾緥
       split: 0.8,
+      topFormObject: {
+        options: {},
+        items: [],
+      },
       // 涓昏〃鍙傛暟瀹氫箟
+      topButtons: [
+        {
+          showName: "娓呯┖鏌ヨ",
+          onClick: () => this.onClearClick(),
+        },
+      ],
       topColumns: [],
       topData: [],
-      tableTopHeight: 0,
-      tableBottomHeight: 0,
+      topHeight: 0,
+      bottomHeight: 0,
       topForm: {
         code: "",
         name: "",
@@ -143,11 +109,89 @@
       // 浠庤〃鍙傛暟瀹氫箟
       bottomColumns: [],
       bottomData: [],
+      // 涓夌骇鏁版嵁婕旂ず
+      thirdDataDialog: {
+        visible: false,
+        width: 500,
+      },
 
       loading: false,
     };
   },
   methods: {
+    async loadTopForm() {
+      this.topFormObject.options = {
+        labelWidth: 110,
+      };
+      this.topFormObject.items = [
+        {
+          label: "浠撳簱缂栫爜锛�,
+          field: "SupplierCode",
+          value: "",
+          type: "input",
+          span: 6,
+        },
+        {
+          label: "浠撳簱鍚嶇О锛�,
+          field: "SupplierName",
+          value: "",
+          type: "input",
+          span: 6,
+        },
+        {
+          label: "浠撳簱璐熻矗浜猴細",
+          field: "ASNCode",
+          value: "",
+          type: "input",
+          span: 6,
+        },
+        {
+          label: "浠撳簱鐢佃瘽锛�,
+          field: "Invertory",
+          value: "",
+          type: "input",
+          span: 6,
+        },
+        {
+          label: "涓婄骇浠撳簱缂栫爜锛�,
+          field: "PurchaseOrderNo",
+          value: "",
+          type: "input",
+          span: 6,
+        },
+        {
+          label: "鍦板潃锛�,
+          field: "OrderDate",
+          value: "",
+          type: "input",
+          span: 18,
+        },
+        {
+          label: "鏄惁鏈骇",
+          field: "isThisLevel",
+          value: false,
+          type: "checkbox",
+          span: 6,
+          onChange: () => {},
+        },
+        {
+          label: "鏄惁浠g",
+          field: "isEscorw",
+          value: false,
+          type: "checkbox",
+          span: 6,
+          onChange: () => {},
+        },
+        {
+          label: "鏄惁鍚敤",
+          field: "isEnable",
+          value: false,
+          type: "checkbox",
+          span: 6,
+          onChange: () => {},
+        },
+      ];
+    },
     async loadTopColumns() {
       this.topColumns = [
         {
@@ -405,14 +449,9 @@
     },
     resize() {
       this.$nextTick(() => {
-        let topHeight =
-          this.refTopView.clientHeight -
-          this.$el.querySelector(".search-form").clientHeight -
-          this.$el.querySelector(".buttons").clientHeight -
-          9;
-        this.tableTopHeight = topHeight;
+        this.topHeight = this.refTopView.clientHeight - 10;
         let bottomHeight = this.refBottomView.clientHeight - 9;
-        this.tableBottomHeight = bottomHeight;
+        this.bottomHeight = bottomHeight;
       });
     },
     // 涓昏〃鍒囨崲閫夋嫨琛屾椂瑙﹀彂
@@ -441,6 +480,12 @@
     onClearClick() {
       this.reset();
     },
+    onBottomRowClick(row, index) {
+      this.showThirdData(row);
+    },
+    showThirdData() {
+      this.thirdDataDialog.visible = true;
+    },
     reset() {
       this.topForm.code = "";
       this.topForm.name = "";
@@ -454,6 +499,7 @@
     },
   },
   async mounted() {
+    await this.loadTopForm();
     await this.loadTopColumns();
     await this.loadBottomColumns();
     this.$nextTick(async () => {
@@ -475,8 +521,7 @@
   height: 100%;
   .top-view {
     height: 100%;
-    .search-form,
-    .buttons {
+    .search-form {
       margin-bottom: 9px;
     }
   }
diff --git a/src/views/examples/report.vue b/src/views/examples/report.vue
index 5f41da9..1103947 100644
--- a/src/views/examples/report.vue
+++ b/src/views/examples/report.vue
@@ -1,141 +1,21 @@
 <template>
   <div class="example-report-view" ref="refView">
-    <div class="search-form">
-      <Form :model="form" :label-width="110">
-        <Row>
-          <Col span="6">
-            <FormItem label="渚涘簲鍟嗙紪鐮侊細">
-              <Input v-model="form.SupplierCode" size="small">
-                <template #suffix>
-                  <Icon type="ios-more" />
-                </template>
-              </Input>
-            </FormItem>
-          </Col>
-          <Col span="6">
-            <FormItem label="渚涘簲鍟嗗悕绉帮細">
-              <Input v-model="form.SupplierName" size="small"></Input>
-            </FormItem>
-          </Col>
-          <Col span="6">
-            <FormItem label="ASN鍗曞彿锛�>
-              <Input v-model="form.ASNCode" size="small">
-                <template #suffix> <Icon type="ios-more" /> </template
-              ></Input>
-            </FormItem>
-          </Col>
-          <Col span="6">
-            <FormItem label="瀛樿揣锛�>
-              <Input v-model="form.Invertory" size="small">
-                <template #suffix> <Icon type="ios-more" /> </template
-              ></Input>
-            </FormItem>
-          </Col>
-        </Row>
-        <Row>
-          <Col span="6">
-            <FormItem label="浠h喘璁㈠崟鍙凤細">
-              <Input v-model="form.PurchaseOrderNo" size="small">
-                <template #suffix> <Icon type="ios-more" /> </template
-              ></Input>
-            </FormItem>
-          </Col>
-          <Col span="12">
-            <FormItem label="璁㈠崟浜ゆ湡锛�>
-              <DatePicker
-                type="daterange"
-                v-model="form.OrderDate"
-                separator=" 鑷�"
-                size="small"
-                style="width: 100%"
-              ></DatePicker>
-            </FormItem>
-          </Col>
-          <Col span="6">
-            <FormItem label="鐘舵�锛�>
-              <Select v-model="form.State" size="small">
-                <Option :value="0">涓�/Option>
-                <Option :value="1">浜�/Option>
-                <Option :value="2">涓�/Option>
-              </Select>
-            </FormItem>
-          </Col>
-        </Row>
-        <Row>
-          <Col span="6">
-            <FormItem label="閲囪喘鍛橈細">
-              <Input v-model="form.Purchase" size="small"></Input>
-            </FormItem>
-          </Col>
-          <Col span="6">
-            <FormItem label="閲囪喘绫诲瀷锛�>
-              <Select v-model="form.PurchaseType" size="small">
-                <Option :value="0">涓�/Option>
-                <Option :value="1">浜�/Option>
-                <Option :value="2">涓�/Option>
-              </Select>
-            </FormItem>
-          </Col>
-          <Col span="6">
-            <FormItem label="鍗曟嵁绫诲瀷锛�>
-              <Select v-model="form.DocumentType" size="small">
-                <Option :value="0">涓�/Option>
-                <Option :value="1">浜�/Option>
-                <Option :value="2">涓�/Option>
-              </Select>
-            </FormItem>
-          </Col>
-          <Col span="6">
-            <FormItem label="鍏抽棴鐘舵�锛�>
-              <Select v-model="form.CloseState" size="small">
-                <Option :value="0">涓�/Option>
-                <Option :value="1">浜�/Option>
-                <Option :value="2">涓�/Option>
-              </Select>
-            </FormItem>
-          </Col>
-        </Row>
-        <Row>
-          <Col span="6">
-            <FormItem label="鏄惁鍒拌揣瀹屾垚锛�>
-              <Select v-model="form.IsArrived" size="small">
-                <Option :value="0">涓�/Option>
-                <Option :value="1">浜�/Option>
-                <Option :value="2">涓�/Option>
-              </Select>
-            </FormItem>
-          </Col>
-          <Col span="6">
-            <FormItem label="ASN鍒涘缓鏃ユ湡锛�>
-              <DatePicker type="date" v-model="form.CreateTime" size="small" />
-            </FormItem>
-          </Col>
-        </Row>
-      </Form>
-    </div>
-    <div class="buttons">
-      <Space>
-        <Button type="primary" size="small" @click="onSearchClick">鏌ヨ</Button>
-        <Button type="primary" size="small" @click="onClearClick">娓呯┖</Button>
-        <Button type="success" size="small" @click="onExportClick">瀵煎嚭</Button>
-      </Space>
-    </div>
-    <div class="table">
-      <DataTable
-        :tableHeight="tableHeight"
-        :columns="columns"
-        :data="data"
-        :page="page"
-        :limit="limit"
-        :limits="limits"
-        :total="total"
-        :loading="loading"
-        @on-change="onPageChange"
-        @on-page-size-change="onPageSizeChange"
-        @on-prev="onPrev"
-        @on-next="onNext"
-      ></DataTable>
-    </div>
+    <DataTable
+      :height="height"
+      :formObject="formObject"
+      :buttons="buttons"
+      :columns="columns"
+      :data="data"
+      :page="page"
+      :limit="limit"
+      :limits="limits"
+      :total="total"
+      :loading="loading"
+      @on-change="onPageChange"
+      @on-page-size-change="onPageSizeChange"
+      @on-prev="onPrev"
+      @on-next="onNext"
+    ></DataTable>
   </div>
 </template>
 
@@ -150,25 +30,27 @@
   },
   data() {
     return {
+      formObject: {
+        options: {},
+        items: [],
+      },
+      buttons: [
+        {
+          showName: "鏌ヨ",
+          onClick: () => this.onSearchClick(),
+        },
+        {
+          showName: "娓呯┖",
+          onClick: () => this.onClearClick(),
+        },
+        {
+          showName: "瀵煎嚭",
+          onClick: () => this.onExportClick(),
+        },
+      ],
       columns: [],
       data: [],
-      tableHeight: 0,
-      // 鏌ヨ琛ㄥ崟鐨勫畾涔�-      form: {
-        SupplierCode: "",
-        ASNName: "",
-        ASNCode: "",
-        Invertory: "",
-        PurchaseOrderNo: "",
-        OrderDate: [],
-        State: "",
-        Purchase: "",
-        PurchaseType: "",
-        DocumentType: "",
-        CloseState: "",
-        IsArrived: "",
-        ASNCreateDate: "",
-      },
+      height: 0,
       // 鍒嗛〉鍙傛暟
       page: 1,
       limit: 30,
@@ -178,6 +60,85 @@
     };
   },
   methods: {
+    async loadForm() {
+      this.formObject.options = {
+        labelWidth: 110,
+      };
+      this.formObject.items = [
+        {
+          label: "渚涘簲鍟嗙紪鐮侊細",
+          field: "SupplierCode",
+          value: "",
+          type: "input",
+          suffix: "ios-more",
+          span: 6,
+          onSuffixClick: () => {},
+        },
+        {
+          label: "渚涘簲鍟嗗悕绉帮細",
+          field: "SupplierName",
+          value: "",
+          type: "input",
+          suffix: "ios-more",
+          span: 6,
+          onSuffixClick: () => {},
+        },
+        {
+          label: "ASN鍗曞彿锛�,
+          field: "ASNCode",
+          value: "",
+          type: "input",
+          suffix: "ios-more",
+          span: 6,
+          onSuffixClick: () => {},
+        },
+        {
+          label: "瀛樿揣锛�,
+          field: "Invertory",
+          value: "",
+          type: "input",
+          suffix: "ios-more",
+          span: 6,
+          onSuffixClick: () => {},
+        },
+        {
+          label: "浠h喘璁㈠崟鍙凤細",
+          field: "PurchaseOrderNo",
+          value: "",
+          type: "input",
+          suffix: "ios-more",
+          span: 6,
+          onSuffixClick: () => {},
+        },
+        {
+          label: "璁㈠崟浜ゆ湡锛�,
+          field: "OrderDate",
+          value: "",
+          type: "daterange",
+          span: 12,
+          onChange: () => {},
+        },
+        {
+          label: "鐘舵�锛�,
+          field: "State",
+          value: "",
+          type: "input",
+          span: 6,
+          options: [
+            { labe: "涓�, value: 1 },
+            { labe: "浜�, value: 2 },
+            { labe: "涓�, value: 3 },
+          ],
+        },
+        {
+          label: "閲囪喘鍛橈細",
+          field: "Purchase",
+          value: "",
+          type: "input",
+          span: 6,
+        },
+      ];
+    },
     async loadColumns() {
       this.columns = [
         {
@@ -320,13 +281,7 @@
       });
     },
     resize() {
-      let height =
-        this.refView.clientHeight -
-        this.$el.querySelector(".search-form").clientHeight -
-        this.$el.querySelector(".buttons").clientHeight -
-        9 -
-        9;
-      this.tableHeight = height;
+      this.height = this.refView.clientHeight - 20;
     },
     onSearchClick() {
       alert(JSON.stringify(this.form, "", "    "));
@@ -368,6 +323,7 @@
     },
   },
   async mounted() {
+    await this.loadForm();
     await this.loadColumns();
     this.loadData();
     this.$nextTick(() => {
@@ -384,21 +340,5 @@
 <style lang="less">
 .example-report-view {
   height: 100%;
-  .search-form,
-  .buttons {
-    margin-bottom: 9px;
-  }
-  .table {
-    height: calc(100% - 170px);
-  }
-  .ivu-form .ivu-form-item-label,
-  .ivu-checkbox-wrapper {
-    font-size: 12px;
-  }
-  .ivu-input-wrapper {
-    .ivu-icon {
-      cursor: pointer;
-    }
-  }
 }
 </style>
\ No newline at end of file
diff --git a/vite.config.js b/vite.config.js
index 9e3d9be..cfd50df 100644
--- a/vite.config.js
+++ b/vite.config.js
@@ -2,13 +2,11 @@
 
 import { defineConfig } from 'vite'
 import vue from '@vitejs/plugin-vue'
-import vueDevTools from 'vite-plugin-vue-devtools'
 
 // https://vite.dev/config/
 export default defineConfig({
   plugins: [
     vue(),
-    vueDevTools(),
   ],
   resolve: {
     alias: {

--
Gitblit v1.9.1