zrlibs
2025-03-21 cd24c776d772c7ad797891afd779b3b072293ec2
fixed
1个文件已添加
9个文件已修改
2826 ■■■■■ 已修改文件
package-lock.json 1484 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
package.json 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
public/skin/light.css 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/examples/data-table.vue 414 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/examples/form-dialog.vue 101 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/less/examples.less 73 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/examples/data-table/index.vue 266 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/examples/master-slave.vue 199 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/examples/report.vue 266 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
vite.config.js 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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",
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"
  }
}
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);
}
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>
src/components/examples/form-dialog.vue
New file
@@ -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>
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 {
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">是否代管</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: "是否代管",
          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 {
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"
                      >是否代管</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: "是否代管",
          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;
    }
  }
src/views/examples/report.vue
@@ -1,128 +1,9 @@
<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="代购订单号:">
              <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"
      :height="height"
      :formObject="formObject"
      :buttons="buttons"
        :columns="columns"
        :data="data"
        :page="page"
@@ -135,7 +16,6 @@
        @on-prev="onPrev"
        @on-next="onNext"
      ></DataTable>
    </div>
  </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: "代购订单号:",
          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>
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: {