From dad44b84ab21f9d1f860760a045015f1cab0aaec Mon Sep 17 00:00:00 2001 From: zrlibs <jesting_rr@163.com> Date: 星期三, 19 三月 2025 10:57:14 +0800 Subject: [PATCH] fixed --- src/views/examples/report.vue | 304 ++++++-- src/views/examples/excel.js | 27 src/views/account/login.vue | 150 +++- src/components/examples/data-table.vue | 7 src/views/examples/data-table/dialogs/info.vue | 132 ++- package.json | 1 src/views/examples/master-slave.vue | 257 +++++- src/views/examples/data-table/index.vue | 272 +++++- src/assets/login_bg.png | 0 src/less/examples.less | 4 src/libs/excel.js | 86 ++ package-lock.json | 910 +++++++++++++++++++++++++ 12 files changed, 1,848 insertions(+), 302 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3f4ddbd..d34f8d2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,6 +8,7 @@ "name": "vue-project", "version": "0.0.0", "dependencies": { + "exceljs": "^4.4.0", "js-base64": "^3.7.7", "view-ui-plus": "^1.3.19", "vue": "^3.5.13", @@ -859,6 +860,43 @@ "node": ">=18" } }, + "node_modules/@fast-csv/format": { + "version": "4.3.5", + "resolved": "https://registry.npmmirror.com/@fast-csv/format/-/format-4.3.5.tgz", + "integrity": "sha512-8iRn6QF3I8Ak78lNAa+Gdl5MJJBM5vRHivFtMRUWINdevNo00K7OXxS2PshawLKTejVwieIlPmK5YlLu6w4u8A==", + "dependencies": { + "@types/node": "^14.0.1", + "lodash.escaperegexp": "^4.1.2", + "lodash.isboolean": "^3.0.3", + "lodash.isequal": "^4.5.0", + "lodash.isfunction": "^3.0.9", + "lodash.isnil": "^4.0.0" + } + }, + "node_modules/@fast-csv/format/node_modules/@types/node": { + "version": "14.18.63", + "resolved": "https://registry.npmmirror.com/@types/node/-/node-14.18.63.tgz", + "integrity": "sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ==" + }, + "node_modules/@fast-csv/parse": { + "version": "4.3.6", + "resolved": "https://registry.npmmirror.com/@fast-csv/parse/-/parse-4.3.6.tgz", + "integrity": "sha512-uRsLYksqpbDmWaSmzvJcuApSEe38+6NQZBUsuAyMZKqHxH0g1wcJgsKUvN3WC8tewaqFjBMMGrkHmC+T7k8LvA==", + "dependencies": { + "@types/node": "^14.0.1", + "lodash.escaperegexp": "^4.1.2", + "lodash.groupby": "^4.6.0", + "lodash.isfunction": "^3.0.9", + "lodash.isnil": "^4.0.0", + "lodash.isundefined": "^3.0.1", + "lodash.uniq": "^4.5.0" + } + }, + "node_modules/@fast-csv/parse/node_modules/@types/node": { + "version": "14.18.63", + "resolved": "https://registry.npmmirror.com/@types/node/-/node-14.18.63.tgz", + "integrity": "sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ==" + }, "node_modules/@intlify/core-base": { "version": "11.1.1", "resolved": "https://registry.npmmirror.com/@intlify/core-base/-/core-base-11.1.1.tgz", @@ -1246,6 +1284,17 @@ "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", "dev": true }, + "node_modules/@types/node": { + "version": "22.13.10", + "resolved": "https://registry.npmmirror.com/@types/node/-/node-22.13.10.tgz", + "integrity": "sha512-I6LPUvlRH+O6VRUqYOcMudhaIdUVWfsjnZavnsraHvpBwaEyMN29ry+0UVJhImYL16xsscu0aske3yA+uPOWfw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "undici-types": "~6.20.0" + } + }, "node_modules/@vitejs/plugin-vue": { "version": "5.2.1", "resolved": "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-5.2.1.tgz", @@ -1462,15 +1511,128 @@ "resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.5.13.tgz", "integrity": "sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==" }, + "node_modules/archiver": { + "version": "5.3.2", + "resolved": "https://registry.npmmirror.com/archiver/-/archiver-5.3.2.tgz", + "integrity": "sha512-+25nxyyznAXF7Nef3y0EbBeqmGZgeN/BxHX29Rs39djAfaFalmQ89SE6CWyDCHzGL0yt/ycBtNOmGTW0FyGWNw==", + "dependencies": { + "archiver-utils": "^2.1.0", + "async": "^3.2.4", + "buffer-crc32": "^0.2.1", + "readable-stream": "^3.6.0", + "readdir-glob": "^1.1.2", + "tar-stream": "^2.2.0", + "zip-stream": "^4.1.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/archiver-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/archiver-utils/-/archiver-utils-2.1.0.tgz", + "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", + "dependencies": { + "glob": "^7.1.4", + "graceful-fs": "^4.2.0", + "lazystream": "^1.0.0", + "lodash.defaults": "^4.2.0", + "lodash.difference": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.union": "^4.6.0", + "normalize-path": "^3.0.0", + "readable-stream": "^2.0.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/archiver-utils/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/archiver-utils/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/archiver-utils/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/async": { + "version": "3.2.6", + "resolved": "https://registry.npmmirror.com/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==" + }, "node_modules/async-validator": { "version": "3.5.2", "resolved": "https://registry.npmmirror.com/async-validator/-/async-validator-3.5.2.tgz", "integrity": "sha512-8eLCg00W9pIRZSB781UUX/H6Oskmm8xloZfr09lz5bikRpBVDlJ3hRVuxxP1SxcwsEYfJ4IU8Q19Y8/893r3rQ==" }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmmirror.com/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/batch-processor": { "version": "1.0.0", "resolved": "https://registry.npmmirror.com/batch-processor/-/batch-processor-1.0.0.tgz", "integrity": "sha512-xoLQD8gmmR32MeuBHgH0Tzd5PuSZx71ZsbhVxOCRbgktZEPe4SQy7s9Z50uPp0F/f7iw2XmkHN2xkgbMfckMDA==" + }, + "node_modules/big-integer": { + "version": "1.6.52", + "resolved": "https://registry.npmmirror.com/big-integer/-/big-integer-1.6.52.tgz", + "integrity": "sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/binary": { + "version": "0.3.0", + "resolved": "https://registry.npmmirror.com/binary/-/binary-0.3.0.tgz", + "integrity": "sha512-D4H1y5KYwpJgK8wk1Cue5LLPgmwHKYSChkbspQg5JtVuR5ulGckxfR62H3AE9UDkdMC8yyXlqYihuz3Aqg2XZg==", + "dependencies": { + "buffers": "~0.1.1", + "chainsaw": "~0.1.0" + }, + "engines": { + "node": "*" + } }, "node_modules/birpc": { "version": "0.2.19", @@ -1479,6 +1641,30 @@ "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", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bluebird": { + "version": "3.4.7", + "resolved": "https://registry.npmmirror.com/bluebird/-/bluebird-3.4.7.tgz", + "integrity": "sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA==" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, "node_modules/browserslist": { @@ -1511,6 +1697,53 @@ }, "engines": { "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmmirror.com/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmmirror.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "engines": { + "node": "*" + } + }, + "node_modules/buffer-indexof-polyfill": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz", + "integrity": "sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A==", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/buffers": { + "version": "0.1.1", + "resolved": "https://registry.npmmirror.com/buffers/-/buffers-0.1.1.tgz", + "integrity": "sha512-9q/rDEGSb/Qsvv2qvzIzdluL5k7AaJOTrw23z9reQthrbF7is4CtlT0DXyO1oei2DCp4uojjzQ7igaSHp1kAEQ==", + "engines": { + "node": ">=0.2.0" } }, "node_modules/bundle-name": { @@ -1548,6 +1781,36 @@ } ] }, + "node_modules/chainsaw": { + "version": "0.1.0", + "resolved": "https://registry.npmmirror.com/chainsaw/-/chainsaw-0.1.0.tgz", + "integrity": "sha512-75kWfWt6MEKNC8xYXIdRpDehRYY/tNSgwKaJq+dbbDcxORuVrrQ+SEHoWsniVn9XPYfP4gmdWIeDk/4YNp1rNQ==", + "dependencies": { + "traverse": ">=0.3.0 <0.4" + }, + "engines": { + "node": "*" + } + }, + "node_modules/compress-commons": { + "version": "4.1.2", + "resolved": "https://registry.npmmirror.com/compress-commons/-/compress-commons-4.1.2.tgz", + "integrity": "sha512-D3uMHtGc/fcO1Gt1/L7i1e33VOvD4A9hfQLP+6ewd+BvG/gQ84Yh4oftEhAdjSMgBgwGL+jsppT7JYNpo6MHHg==", + "dependencies": { + "buffer-crc32": "^0.2.13", + "crc32-stream": "^4.0.2", + "normalize-path": "^3.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/concat-map": { + "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", @@ -1569,10 +1832,38 @@ "url": "https://github.com/sponsors/mesqueeb" } }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, "node_modules/countup.js": { "version": "1.9.3", "resolved": "https://registry.npmmirror.com/countup.js/-/countup.js-1.9.3.tgz", "integrity": "sha512-UHf2P/mFKaESqdPq+UdBJm/1y8lYdlcDd0nTZHNC8cxWoJwZr1Eldm1PpWui446vDl5Pd8PtRYkr3q6K4+Qa5A==" + }, + "node_modules/crc-32": { + "version": "1.2.2", + "resolved": "https://registry.npmmirror.com/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", + "bin": { + "crc32": "bin/crc32.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/crc32-stream": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/crc32-stream/-/crc32-stream-4.0.3.tgz", + "integrity": "sha512-NT7w2JVU7DFroFdYkeq8cywxrgjPHWkdX1wjpRQXPX5Asews3tA+Ght6lddQO5Mkumffp3X7GEqku3epj2toIw==", + "dependencies": { + "crc-32": "^1.2.0", + "readable-stream": "^3.4.0" + }, + "engines": { + "node": ">= 10" + } }, "node_modules/cross-spawn": { "version": "7.0.6", @@ -1663,6 +1954,41 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmmirror.com/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", + "dependencies": { + "readable-stream": "^2.0.2" + } + }, + "node_modules/duplexer2/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/duplexer2/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/duplexer2/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "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", @@ -1675,6 +2001,14 @@ "integrity": "sha512-Fl5Ftk6WwXE0wqCgNoseKWndjzZlDCwuPTcoVZfCP9R3EHQF8qUtr3YUPNETegRBOKqQKPW3n4kiIWngGi8tKg==", "dependencies": { "batch-processor": "1.0.0" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmmirror.com/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dependencies": { + "once": "^1.4.0" } }, "node_modules/entities": { @@ -1764,6 +2098,25 @@ "resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz", "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" }, + "node_modules/exceljs": { + "version": "4.4.0", + "resolved": "https://registry.npmmirror.com/exceljs/-/exceljs-4.4.0.tgz", + "integrity": "sha512-XctvKaEMaj1Ii9oDOqbW/6e1gXknSY4g/aLCDicOXqBE4M0nRWkUu0PTp++UPNzoFY12BNHMfs/VadKIS6llvg==", + "dependencies": { + "archiver": "^5.0.0", + "dayjs": "^1.8.34", + "fast-csv": "^4.3.1", + "jszip": "^3.10.1", + "readable-stream": "^3.6.0", + "saxes": "^5.0.1", + "tmp": "^0.2.0", + "unzipper": "^0.10.11", + "uuid": "^8.3.0" + }, + "engines": { + "node": ">=8.3.0" + } + }, "node_modules/execa": { "version": "9.5.2", "resolved": "https://registry.npmmirror.com/execa/-/execa-9.5.2.tgz", @@ -1790,6 +2143,18 @@ "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", + "integrity": "sha512-2RNSpuwwsJGP0frGsOmTb9oUF+VkFSM4SyLTDgwf2ciHWTarN0lQTC+F2f/t5J9QjW+c65VFIAAu85GsvMIusw==", + "dependencies": { + "@fast-csv/format": "4.3.5", + "@fast-csv/parse": "4.3.6" + }, + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/figures": { "version": "6.1.0", "resolved": "https://registry.npmmirror.com/figures/-/figures-6.1.0.tgz", @@ -1805,6 +2170,11 @@ "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", @@ -1819,6 +2189,11 @@ "node": ">=14.14" } }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, "node_modules/fsevents": { "version": "2.3.3", "resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.3.tgz", @@ -1831,6 +2206,21 @@ ], "engines": { "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/fstream": { + "version": "1.0.12", + "resolved": "https://registry.npmmirror.com/fstream/-/fstream-1.0.12.tgz", + "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", + "deprecated": "This package is no longer supported.", + "dependencies": { + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" + }, + "engines": { + "node": ">=0.6" } }, "node_modules/gensync": { @@ -1858,6 +2248,26 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmmirror.com/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/globals": { "version": "11.12.0", "resolved": "https://registry.npmmirror.com/globals/-/globals-11.12.0.tgz", @@ -1870,8 +2280,7 @@ "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==", - "dev": true + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" }, "node_modules/hookable": { "version": "5.5.3", @@ -1913,6 +2322,25 @@ "node": ">=0.10.0" } }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/image-size": { "version": "0.5.5", "resolved": "https://registry.npmmirror.com/image-size/-/image-size-0.5.5.tgz", @@ -1925,6 +2353,26 @@ "engines": { "node": ">=0.10.0" } + }, + "node_modules/immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmmirror.com/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==" + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmmirror.com/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "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", @@ -2022,6 +2470,11 @@ "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", @@ -2080,11 +2533,87 @@ "graceful-fs": "^4.1.6" } }, + "node_modules/jszip": { + "version": "3.10.1", + "resolved": "https://registry.npmmirror.com/jszip/-/jszip-3.10.1.tgz", + "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", + "dependencies": { + "lie": "~3.3.0", + "pako": "~1.0.2", + "readable-stream": "~2.3.6", + "setimmediate": "^1.0.5" + } + }, + "node_modules/jszip/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/jszip/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/jszip/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "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", + "resolved": "https://registry.npmmirror.com/lazystream/-/lazystream-1.0.1.tgz", + "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", + "dependencies": { + "readable-stream": "^2.0.5" + }, + "engines": { + "node": ">= 0.6.3" + } + }, + "node_modules/lazystream/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/lazystream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/lazystream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } }, "node_modules/less": { "version": "4.2.2", @@ -2130,15 +2659,94 @@ "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==", "dev": true }, + "node_modules/lie": { + "version": "3.3.0", + "resolved": "https://registry.npmmirror.com/lie/-/lie-3.3.0.tgz", + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", + "dependencies": { + "immediate": "~3.0.5" + } + }, + "node_modules/listenercount": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/listenercount/-/listenercount-1.0.1.tgz", + "integrity": "sha512-3mk/Zag0+IJxeDrxSgaDPy4zZ3w05PRZeJNnlWhzFz5OkX49J4krc+A8X2d2M69vGMBEX0uyl8M+W+8gH+kBqQ==" + }, "node_modules/lodash.chunk": { "version": "4.2.0", "resolved": "https://registry.npmmirror.com/lodash.chunk/-/lodash.chunk-4.2.0.tgz", "integrity": "sha512-ZzydJKfUHJwHa+hF5X66zLFCBrWn5GeF28OHEr4WVWtNDXlQ/IjWKPBiikqKo2ne0+v6JgCgJ0GzJp8k8bHC7w==" }, + "node_modules/lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==" + }, + "node_modules/lodash.difference": { + "version": "4.5.0", + "resolved": "https://registry.npmmirror.com/lodash.difference/-/lodash.difference-4.5.0.tgz", + "integrity": "sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==" + }, + "node_modules/lodash.escaperegexp": { + "version": "4.1.2", + "resolved": "https://registry.npmmirror.com/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz", + "integrity": "sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==" + }, + "node_modules/lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmmirror.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==" + }, + "node_modules/lodash.groupby": { + "version": "4.6.0", + "resolved": "https://registry.npmmirror.com/lodash.groupby/-/lodash.groupby-4.6.0.tgz", + "integrity": "sha512-5dcWxm23+VAoz+awKmBaiBvzox8+RqMgFhi7UvX9DHZr2HdxHXM/Wrf8cfKpsW37RNrvtPn6hSwNqurSILbmJw==" + }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmmirror.com/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==" + }, + "node_modules/lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmmirror.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", + "deprecated": "This package is deprecated. Use require('node:util').isDeepStrictEqual instead." + }, + "node_modules/lodash.isfunction": { + "version": "3.0.9", + "resolved": "https://registry.npmmirror.com/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz", + "integrity": "sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==" + }, + "node_modules/lodash.isnil": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/lodash.isnil/-/lodash.isnil-4.0.0.tgz", + "integrity": "sha512-up2Mzq3545mwVnMhTDMdfoG1OurpA/s5t88JmQX809eH3C8491iu2sfKhTfhQtKY78oPNhiaHJUpT/dUDAAtng==" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmmirror.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" + }, + "node_modules/lodash.isundefined": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/lodash.isundefined/-/lodash.isundefined-3.0.1.tgz", + "integrity": "sha512-MXB1is3s899/cD8jheYYE2V9qTHwKvt+npCwpD+1Sxm3Q3cECXCiYHjeHWXNwr6Q0SOBPrYUDxendrO6goVTEA==" + }, "node_modules/lodash.throttle": { "version": "4.1.1", "resolved": "https://registry.npmmirror.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz", "integrity": "sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==" + }, + "node_modules/lodash.union": { + "version": "4.6.0", + "resolved": "https://registry.npmmirror.com/lodash.union/-/lodash.union-4.6.0.tgz", + "integrity": "sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==" + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "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", @@ -2194,11 +2802,41 @@ "node": ">=4" } }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmmirror.com/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "funding": { + "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", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } }, "node_modules/mrmime": { "version": "2.0.1", @@ -2255,6 +2893,14 @@ "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", @@ -2291,6 +2937,14 @@ "node": "*" } }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dependencies": { + "wrappy": "1" + } + }, "node_modules/open": { "version": "10.1.0", "resolved": "https://registry.npmmirror.com/open/-/open-10.1.0.tgz", @@ -2308,6 +2962,11 @@ "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", @@ -2328,6 +2987,14 @@ "dev": true, "engines": { "node": ">= 0.10" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "engines": { + "node": ">=0.10.0" } }, "node_modules/path-key": { @@ -2430,6 +3097,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, "node_modules/prr": { "version": "1.0.1", "resolved": "https://registry.npmmirror.com/prr/-/prr-1.0.1.tgz", @@ -2437,11 +3109,63 @@ "dev": true, "optional": true }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdir-glob": { + "version": "1.1.3", + "resolved": "https://registry.npmmirror.com/readdir-glob/-/readdir-glob-1.1.3.tgz", + "integrity": "sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==", + "dependencies": { + "minimatch": "^5.1.0" + } + }, + "node_modules/readdir-glob/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/readdir-glob/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "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", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } }, "node_modules/rollup": { "version": "4.34.8", @@ -2493,6 +3217,25 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -2507,6 +3250,17 @@ "dev": true, "optional": true }, + "node_modules/saxes": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/select": { "version": "1.1.2", "resolved": "https://registry.npmmirror.com/select/-/select-1.1.2.tgz", @@ -2520,6 +3274,11 @@ "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", @@ -2595,6 +3354,14 @@ "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", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "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", @@ -2625,10 +3392,33 @@ "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==", "dev": true }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/tinycolor2": { "version": "1.6.0", "resolved": "https://registry.npmmirror.com/tinycolor2/-/tinycolor2-1.6.0.tgz", "integrity": "sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==" + }, + "node_modules/tmp": { + "version": "0.2.3", + "resolved": "https://registry.npmmirror.com/tmp/-/tmp-0.2.3.tgz", + "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", + "engines": { + "node": ">=14.14" + } }, "node_modules/totalist": { "version": "3.0.1", @@ -2639,11 +3429,27 @@ "node": ">=6" } }, + "node_modules/traverse": { + "version": "0.3.9", + "resolved": "https://registry.npmmirror.com/traverse/-/traverse-0.3.9.tgz", + "integrity": "sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ==", + "engines": { + "node": "*" + } + }, "node_modules/tslib": { "version": "2.8.1", "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.8.1.tgz", "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true + }, + "node_modules/undici-types": { + "version": "6.20.0", + "resolved": "https://registry.npmmirror.com/undici-types/-/undici-types-6.20.0.tgz", + "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", + "dev": true, + "optional": true, + "peer": true }, "node_modules/unicorn-magic": { "version": "0.3.0", @@ -2664,6 +3470,50 @@ "dev": true, "engines": { "node": ">= 10.0.0" + } + }, + "node_modules/unzipper": { + "version": "0.10.14", + "resolved": "https://registry.npmmirror.com/unzipper/-/unzipper-0.10.14.tgz", + "integrity": "sha512-ti4wZj+0bQTiX2KmKWuwj7lhV+2n//uXEotUmGuQqrbVZSEGFMbI68+c6JCQ8aAmUWYvtHEz2A8K6wXvueR/6g==", + "dependencies": { + "big-integer": "^1.6.17", + "binary": "~0.3.0", + "bluebird": "~3.4.1", + "buffer-indexof-polyfill": "~1.0.0", + "duplexer2": "~0.1.4", + "fstream": "^1.0.12", + "graceful-fs": "^4.2.2", + "listenercount": "~1.0.1", + "readable-stream": "~2.3.6", + "setimmediate": "~1.0.4" + } + }, + "node_modules/unzipper/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/unzipper/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/unzipper/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" } }, "node_modules/update-browserslist-db": { @@ -2694,6 +3544,19 @@ }, "peerDependencies": { "browserslist": ">= 4.21.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmmirror.com/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" } }, "node_modules/v-click-outside-x": { @@ -2948,6 +3811,16 @@ "node": ">= 8" } }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "node_modules/xmlchars": { + "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", @@ -2965,6 +3838,39 @@ "funding": { "url": "https://github.com/sponsors/sindresorhus" } + }, + "node_modules/zip-stream": { + "version": "4.1.1", + "resolved": "https://registry.npmmirror.com/zip-stream/-/zip-stream-4.1.1.tgz", + "integrity": "sha512-9qv4rlDiopXg4E69k+vMHjNN63YFMe9sZMrdlvKnCjlCRWeCBswPPMPUfx+ipsAWq1LXHe70RcbaHdJJpS6hyQ==", + "dependencies": { + "archiver-utils": "^3.0.4", + "compress-commons": "^4.1.2", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/zip-stream/node_modules/archiver-utils": { + "version": "3.0.4", + "resolved": "https://registry.npmmirror.com/archiver-utils/-/archiver-utils-3.0.4.tgz", + "integrity": "sha512-KVgf4XQVrTjhyWmx6cte4RxonPLR9onExufI1jhvw/MQ4BB6IsZD5gT8Lq+u/+pRkWna/6JoHpiQioaqFP5Rzw==", + "dependencies": { + "glob": "^7.2.3", + "graceful-fs": "^4.2.0", + "lazystream": "^1.0.0", + "lodash.defaults": "^4.2.0", + "lodash.difference": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.union": "^4.6.0", + "normalize-path": "^3.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">= 10" + } } } } diff --git a/package.json b/package.json index 55ff826..69961e1 100644 --- a/package.json +++ b/package.json @@ -9,6 +9,7 @@ "preview": "vite preview" }, "dependencies": { + "exceljs": "^4.4.0", "js-base64": "^3.7.7", "view-ui-plus": "^1.3.19", "vue": "^3.5.13", diff --git a/src/assets/login_bg.png b/src/assets/login_bg.png new file mode 100644 index 0000000..605ccfb --- /dev/null +++ b/src/assets/login_bg.png Binary files differ diff --git a/src/components/examples/data-table.vue b/src/components/examples/data-table.vue index b3238bf..d2db141 100644 --- a/src/components/examples/data-table.vue +++ b/src/components/examples/data-table.vue @@ -7,6 +7,9 @@ :data="data" :height="paged ? tableHeight - 70 : tableHeight" border + :highlight-row="highlightRow" + @on-current-change="onCurrentChange" + @on-selection-change="onSelectionChange" ref="refTable" ></Table> <Page @@ -26,6 +29,7 @@ @on-next="onNext" ref="refPage" /> + <Spin fix :show="loading" /> </div> </template> @@ -63,6 +67,8 @@ type: Array, default: () => [10, 20, 30, 40], }, + loading: Boolean, + highlightRow: Boolean, }, data() { return {}; @@ -133,6 +139,7 @@ <style lang="less" scoped> .data-table { height: 100%; + position: relative; .text-center { text-align: center; } diff --git a/src/less/examples.less b/src/less/examples.less index 21eb951..d4188d2 100644 --- a/src/less/examples.less +++ b/src/less/examples.less @@ -125,4 +125,8 @@ width: 5px; } } +} + +.ivu-spin-fix{ + background-color: rgba(255, 255, 255, .3); } \ No newline at end of file diff --git a/src/libs/excel.js b/src/libs/excel.js new file mode 100644 index 0000000..80d70e7 --- /dev/null +++ b/src/libs/excel.js @@ -0,0 +1,86 @@ +import ExcelJS from 'exceljs' + +class Excel { + async exportExcel(options) { + const { + datas, + name, + columns, + sheetName = 'Sheet1', + frozenColumnId = 0, + } = options + const workbook = new ExcelJS.Workbook() + workbook.creator = 'mobox' + workbook.created = new Date() + + this.worksheet = workbook.addWorksheet(sheetName) + + this.headerRowId = 1 + + this.worksheet.columns = columns + this.worksheet.addRows(datas) + this.frozenColumnId = frozenColumnId + this.setStyles(datas) + workbook.xlsx.writeBuffer().then(data => { + let blob = new Blob([data], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' }); + const a = document.createElement('a') + a.href = URL.createObjectURL(blob) + a.download = name + '.xlsx' + document.body.appendChild(a) + a.click() + document.body.removeChild(a) + window.URL.revokeObjectURL(a.href) + }) + } + setStyles(datas) { + this.worksheet.eachRow({ includeEmpty: true }, (row) => { + row.height = 14 + row.font = { + size: 9 + } + }) + this.worksheet.columns.forEach(column => column.style.alignment = Object.assign({ + vertical: 'middle', + horizontal: 'center', + wrapText: true + }, column.style.alignment || {})) + for (let i = 1; i <= this.headerRowId; i++) { + let row = this.worksheet.getRow(i) + row.height = 18 + row.eachCell(cell => { + cell.style.alignment = { + vertical: 'middle', + horizontal: 'center', + wrapText: false + } + cell.fill = { + type: 'pattern', + pattern: 'solid', + fgColor: { argb: 'dddddd' }, + } + cell.border = { + right: { style: 'thin' }, + bottom: { style: 'thin' } + } + cell.font = { + size: 9 + } + }) + } + this.worksheet.autoFilter = { + from: { + row: this.headerRowId, + column: 1 + }, + to: { + row: datas.length, + column: this.worksheet.columns.length + } + } + this.worksheet.views = [ + { state: 'frozen', xSplit: this.frozenColumnId, ySplit: this.headerRowId } + ] + } +} + +export default Excel \ No newline at end of file diff --git a/src/views/account/login.vue b/src/views/account/login.vue index 533b648..e126806 100644 --- a/src/views/account/login.vue +++ b/src/views/account/login.vue @@ -1,28 +1,52 @@ <template> <div class="login-view"> - <Form :model="formInline" :rules="ruleInline" inline ref="refFormInline"> - <FormItem prop="user"> - <Input type="text" v-model="formInline.user" placeholder="Username"> - <template #prepend> - <Icon type="ios-person-outline"></Icon> - </template> - </Input> - </FormItem> - <FormItem prop="password"> - <Input - type="password" - v-model="formInline.password" - placeholder="Password" + <div class="login-wrap"> + <div class="login-account"> + <div class="account-logo"> + <img src="http://115.29.185.26:5101/userphoto?login=sa" /> + </div> + <article class="ivu-typography ivu-text-center ivu-mt"> + <h1 class="ivu-typography">Vue Template<!----></h1> + <div class="ivu-typography"> + 鍩轰簬 Vue3.0銆乂ueRouter 鍜孷iewUIPlus鐨勭鐞嗙郴缁熸ā鏉挎紨绀�+ <!----> + </div> + </article> + <Form + class="account-form" + :model="form" + :rules="rules" + label-position="top" + ref="refFormInline" > - <template #prepend> - <Icon type="ios-lock-outline"></Icon> - </template> - </Input> - </FormItem> - <FormItem> - <Button type="primary" @click="onSignIn">Signin</Button> - </FormItem> - </Form> + <div class="ivu-login"> + <FormItem prop="user"> + <Input + type="text" + v-model="form.user" + size="large" + prefix="ios-person-outline" + > + </Input> + </FormItem> + <FormItem prop="password"> + <Input + type="password" + v-model="form.password" + size="large" + prefix="ios-lock-outline" + > + </Input> + </FormItem> + <FormItem> + <Button type="primary" @click="onSignIn" size="large" long + >鐧诲綍</Button + > + </FormItem> + </div> + </Form> + </div> + </div> </div> </template> @@ -35,11 +59,11 @@ name: "LoginView", data() { return { - formInline: { - user: "", - password: "", + form: { + user: "admin", + password: "0000", }, - ruleInline: { + rules: { user: [ { required: true, @@ -53,24 +77,25 @@ message: "Please fill in the password.", trigger: "blur", }, - { - type: "string", - min: 6, - message: "The password length cannot be less than 6 bits", - trigger: "blur", - }, ], }, }; }, methods: { onSignIn() { + // 娴嬭瘯鐢ㄦ埛 + if (this.form.user == "admin" && this.form.password == "0000") { + setToken("uid"); + this.showSuccess("鐧诲綍鎴愬姛"); + this.$router.push("/"); + return; + } this.refFormInline.validate(async (valid) => { try { if (valid) { let res = await login({ - user_login: Base64.encode(this.formInline.user), - user_psw: Base64.encode(this.formInline.password), + user_login: Base64.encode(this.form.user), + user_psw: Base64.encode(this.form.password), }); setToken(res.session_id); this.showSuccess("鐧诲綍鎴愬姛"); @@ -97,11 +122,58 @@ }; </script> -<style lang="less" scoped> +<style lang="less"> .login-view { - height: 100vh; - display: flex; - align-items: center; - justify-content: center; + background-repeat: no-repeat; + background-size: 100% 100%; + background-position: right bottom; + background-image: url("../../assets/login_bg.png"); + background-attachment: fixed; + .login-wrap { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + height: 100vh; + overflow: auto; + } + .login-account { + -webkit-box-flex: 1; + -ms-flex: 1; + flex: 1; + padding: 16px 0 0; + max-width: 420px; + margin: 0 auto; + margin-top: 100px; + } + .account-logo { + width: 80px; + height: 80px; + margin: 0 auto; + border: 1px solid #eee; + border-radius: 50%; + background-color: #fafafc; + img { + width: 100%; + border-style: none; + border-radius: 100%; + } + } + .account-form { + margin-top: 32px; + } + .ivu-form-item { + margin-bottom: 24px; + vertical-align: top; + zoom: 1; + } + .ivu-form-item-content { + position: relative; + line-height: 32px; + font-size: 14px; + } } </style> \ No newline at end of file diff --git a/src/views/examples/data-table/dialogs/info.vue b/src/views/examples/data-table/dialogs/info.vue index 79e9c06..ab53179 100644 --- a/src/views/examples/data-table/dialogs/info.vue +++ b/src/views/examples/data-table/dialogs/info.vue @@ -8,86 +8,63 @@ <Form :model="form" :label-width="110"> <template v-if="model != 'info'"> <FormItem label="浠撳簱缂栫爜锛�> - <Input - v-model="form.WH_Code" - placeholder="Enter something..." - size="small" - ></Input> + <Input v-model="form.code" size="small"></Input> </FormItem> <FormItem label="浠撳簱鍚嶇О锛�> - <Input - v-model="form.WH_Code" - placeholder="Enter something..." - size="small" - ></Input> + <Input v-model="form.name" size="small"></Input> </FormItem> <FormItem label="浠撳簱璐熻矗浜猴細"> - <Input - v-model="form.WH_Code" - placeholder="Enter something..." - size="small" - ></Input> + <Input v-model="form.leader" size="small"></Input> </FormItem> <FormItem label="浠撳簱鐢佃瘽锛�> - <Input - v-model="form.WH_Code" - placeholder="Enter something..." - size="small" - ></Input> + <Input v-model="form.tel" size="small"></Input> </FormItem> <FormItem label="涓婄骇浠撳簱缂栫爜锛�> - <Input - v-model="form.WH_Code" - placeholder="Enter something..." - size="small" - ></Input> + <Input v-model="form.topCode" size="small"></Input> </FormItem> <FormItem label="鍦板潃锛�> - <Input - v-model="form.WH_Code" - placeholder="Enter something..." - size="small" - ></Input> + <Input v-model="form.address" size="small"></Input> </FormItem> <FormItem> - <Checkbox v-model="form.WH_Code" size="small">鏄惁鏈骇</Checkbox> + <Checkbox v-model="form.isThisLevel" size="small">鏄惁鏈骇</Checkbox> </FormItem> <FormItem> - <Checkbox v-model="form.WH_Code" size="small">鏄惁浠g</Checkbox> + <Checkbox v-model="form.isEscrow" size="small">鏄惁浠g</Checkbox> </FormItem> <FormItem> - <Checkbox v-model="form.WH_Code" size="small">鏄惁鍚敤</Checkbox> + <Checkbox v-model="form.isEnable" size="small">鏄惁鍚敤</Checkbox> </FormItem> </template> <template v-else> - <FormItem label="浠撳簱缂栫爜锛�> 浠撳簱缂栫爜 </FormItem> - <FormItem label="浠撳簱鍚嶇О锛�> 浠撳簱鍚嶇О </FormItem> - <FormItem label="浠撳簱璐熻矗浜猴細"> 浠撳簱璐熻矗浜�</FormItem> - <FormItem label="浠撳簱鐢佃瘽锛�> 浠撳簱鐢佃瘽 </FormItem> - <FormItem label="涓婄骇浠撳簱缂栫爜锛�> 涓婄骇浠撳簱缂栫爜 </FormItem> - <FormItem label="鍦板潃锛�> 鍦板潃 </FormItem> + <FormItem label="浠撳簱缂栫爜锛�> {{ this.form.code }} </FormItem> + <FormItem label="浠撳簱鍚嶇О锛�> {{ this.form.name }} </FormItem> + <FormItem label="浠撳簱璐熻矗浜猴細"> {{ this.form.leader }} </FormItem> + <FormItem label="浠撳簱鐢佃瘽锛�> {{ this.form.tel }} </FormItem> + <FormItem label="涓婄骇浠撳簱缂栫爜锛�> {{ this.form.topCode }} </FormItem> + <FormItem label="鍦板潃锛�> {{ this.form.address }} </FormItem> <FormItem> - <Checkbox v-model="form.WH_Code" size="small" disabled + <Checkbox v-model="form.isThisLevel" size="small" disabled >鏄惁鏈骇</Checkbox > </FormItem> <FormItem> - <Checkbox v-model="form.WH_Code" size="small" disabled + <Checkbox v-model="form.isEscrow" size="small" disabled >鏄惁浠g</Checkbox > </FormItem> <FormItem> - <Checkbox v-model="form.WH_Code" size="small" disabled + <Checkbox v-model="form.isEnable" size="small" disabled >鏄惁鍚敤</Checkbox > </FormItem> </template> + <Spin fix :show="loading" /> </Form> <template #footer> <template v-if="model != 'info'"> <Space> <Button type="text" @click="onCancel">鍙栨秷</Button> - <Button type="primary" @click="onOk">纭畾</Button> + <Button type="primary" @click="onOk" :loading="loading">纭畾</Button> </Space> </template> <template v-else> @@ -106,16 +83,64 @@ type: String, default: () => "info", }, + dataId: String, }, data() { return { - form: {}, + form: { + code: "", + name: "", + leader: "", + tel: "", + topCode: "", + address: "", + isThisLevel: false, + isEscrow: false, + isEnable: false, + }, + loading: false, }; }, methods: { - onOk() {}, - onCancel() {}, - onClose() {}, + onOk() { + this.loading = true; + setTimeout(() => { + this.loading = false; + this.onClose(); + }, 2000); + }, + onCancel() { + this.onClose(); + }, + onClose() { + this.$emit("update:modelValue", false); + }, + loadData() { + if (!this.dataId) this.clear(); + else this.loadFormData(); + }, + loadFormData() { + let data = this.$parent.data.find((d) => d.code == this.dataId); + Object.assign(this.form, data); + }, + clear() { + this.code = ""; + this.name = ""; + this.leader = ""; + this.tel = ""; + this.topCode = ""; + this.address = ""; + this.isThisLevel = false; + this.isEscrow = false; + this.isEnable = false; + }, + }, + watch: { + modelValue(visible) { + if (visible) { + this.loadData(); + } + }, }, }; </script> @@ -125,5 +150,18 @@ .ivu-modal { top: 40px; } + .ivu-checkbox-input[disabled] { + cursor: default; + } + .ivu-checkbox-disabled .ivu-checkbox-inner { + border-color: #666; + background-color: #fff; + } + .ivu-checkbox-disabled.ivu-checkbox-checked .ivu-checkbox-inner:after { + border-color: #666; + } + .ivu-checkbox-disabled + span { + color: #666; + } } </style> \ No newline at end of file diff --git a/src/views/examples/data-table/index.vue b/src/views/examples/data-table/index.vue index 134991f..7bb8601 100644 --- a/src/views/examples/data-table/index.vue +++ b/src/views/examples/data-table/index.vue @@ -5,73 +5,51 @@ <Row> <Col span="6"> <FormItem label="浠撳簱缂栫爜锛�> - <Input - v-model="form.WH_Code" - placeholder="Enter something..." - size="small" - ></Input> + <Input v-model="form.code" size="small"></Input> </FormItem> </Col> <Col span="6"> <FormItem label="浠撳簱鍚嶇О锛�> - <Input - v-model="form.WH_Code" - placeholder="Enter something..." - size="small" - ></Input> + <Input v-model="form.name" size="small"></Input> </FormItem> </Col> <Col span="6"> <FormItem label="浠撳簱璐熻矗浜猴細"> - <Input - v-model="form.WH_Code" - placeholder="Enter something..." - size="small" - ></Input> + <Input v-model="form.leader" size="small"></Input> </FormItem> </Col> <Col span="6"> <FormItem label="浠撳簱鐢佃瘽锛�> - <Input - v-model="form.WH_Code" - placeholder="Enter something..." - size="small" - ></Input> + <Input v-model="form.tel" size="small"></Input> </FormItem> </Col> </Row> <Row> <Col span="6"> <FormItem label="涓婄骇浠撳簱缂栫爜锛�> - <Input - v-model="form.WH_Code" - placeholder="Enter something..." - size="small" - ></Input> + <Input v-model="form.topCode" size="small"></Input> </FormItem> </Col> <Col span="6"> <FormItem label="鍦板潃锛�> - <Input - v-model="form.WH_Code" - placeholder="Enter something..." - size="small" - ></Input> + <Input v-model="form.address" size="small"></Input> </FormItem> </Col> <Col span="4"> <FormItem :label-width="34"> - <Checkbox v-model="form.WH_Code" size="small">鏄惁鏈骇</Checkbox> + <Checkbox v-model="form.isThisLevel" size="small" + >鏄惁鏈骇</Checkbox + > </FormItem> </Col> <Col span="4"> <FormItem :label-width="34"> - <Checkbox v-model="form.WH_Code" size="small">鏄惁浠g</Checkbox> + <Checkbox v-model="form.isEscrow" size="small">鏄惁浠g</Checkbox> </FormItem> </Col> <Col span="4"> <FormItem :label-width="34"> - <Checkbox v-model="form.WH_Code" size="small">鏄惁鍚敤</Checkbox> + <Checkbox v-model="form.isEnable" size="small">鏄惁鍚敤</Checkbox> </FormItem> </Col> </Row> @@ -89,6 +67,16 @@ :tableHeight="tableHeight" :columns="columns" :data="data" + :page="page" + :limit="limit" + :limits="limits" + :total="total" + :loading="loading" + @on-selection-change="onSelectionChange" + @on-change="onPageChange" + @on-page-size-change="onPageSizeChange" + @on-prev="onPrev" + @on-next="onNext" ></DataTable> <DataTableInfo v-model="infoDialog.visible" @@ -113,9 +101,26 @@ columns: [], data: [], tableHeight: 0, + // 鍒嗛〉淇℃伅 + page: 1, + limit: 30, + limits: [10, 20, 30], + total: 0, + selection: [], + loading: false, + // 鏌ヨ琛ㄥ崟瀹氫箟 form: { - WH_Code: "", + code: "", + name: "", + leader: "", + tel: "", + topCode: "", + address: "", + isThisLevel: false, + isEscrow: false, + isEnable: false, }, + // 寮规鍙傛暟瀹氫箟 infoDialog: { model: "info", visible: false, @@ -127,13 +132,20 @@ async loadColumns() { this.columns = [ { - type: "index", + type: "selection", + width: 40, + fixed: "left", + align: "center", + }, + { + key: "index", title: " ", render: (h, { index }) => { - return h(index); + return h("div", (this.page - 1) * this.limit + index + 1); }, - width: 50, + width: 40, fixed: "left", + align: "center", }, { key: "row_button", @@ -159,7 +171,7 @@ type: "md-build", size: 14, color: "#f90", - onClick: () => {}, + onClick: () => this.onEditRowClick(index), }), } ), @@ -203,54 +215,140 @@ fixed: "left", }, { - key: "WH_Code", + key: "code", title: "浠撳簱缂栫爜", width: 150, fixed: "left", + sortable: true, + resizable: true, }, { - key: "WH_Name", + key: "name", title: "浠撳簱鍚嶇О", + width: 200, + sortable: true, + resizable: true, }, { - key: "WH_Leader", + key: "leader", title: "浠撳簱璐熻矗浜�, - width: 100, + width: 150, + sortable: true, + resizable: true, }, { - key: "WH_Tel", + key: "tel", title: "浠撳簱鐢佃瘽", - width: 100, + width: 150, + sortable: true, + resizable: true, }, { - key: "Address", + key: "address", title: "鍦板潃", - width: 100, + width: 150, + sortable: true, + resizable: true, }, { - key: "TopLevelWH_Code", + key: "topCode", title: "涓婄骇浠撳簱缂栫爜", width: 100, + sortable: true, + resizable: true, }, { - key: "IsThisLevel", + key: "isThisLevel", title: "鏄惁鏈骇", - width: 70, + render: (h, { row }) => { + return h( + "div", + h(resolveComponent("Checkbox"), { + modelValue: row.isThisLevel, + disabled: true, + size: "small", + }) + ); + }, + width: 80, + align: "center", + sortable: true, }, { - key: "IsEscrow", + key: "isEscrow", title: "鏄惁浠g", - width: 70, + render: (h, { row }) => { + return h( + "div", + h(resolveComponent("Checkbox"), { + modelValue: row.isEscrow, + disabled: true, + size: "small", + }) + ); + }, + width: 80, + align: "center", + sortable: true, }, { - key: "IsEnable", + key: "isEnable", title: "鏄惁鍚敤", - width: 70, + render: (h, { row }) => { + return h( + "div", + h(resolveComponent("Checkbox"), { + modelValue: row.isEnable, + disabled: true, + size: "small", + }) + ); + }, + width: 80, + align: "center", + sortable: true, }, ]; }, + // 鍔犺浇鏁版嵁琛� async loadData() { - this.data = [{}]; + let msg = this.$Message.loading("姝e湪鍔犺浇鏁版嵁..."); + this.loading = true; + + let { data, total } = await this.fakeDataList(); + + msg(); + + this.data = data; + this.total = total; + this.loading = false; + }, + // 娴嬭瘯鏁版嵁鍒楄〃 + fakeDataList(limit) { + return new Promise((resolve) => { + let total = 99; + let fakeList = []; + for (let i = 0; i < (limit || this.limit); i++) { + let row = { + code: `浠撳簱缂栫爜-${(this.page - 1) * this.limit + i + 1}`, + name: `浠撳簱鍚嶇О-${(this.page - 1) * this.limit + i + 1}`, + leader: `浠撳簱璐熻矗浜�${(this.page - 1) * this.limit + i + 1}`, + tel: `浠撳簱鐢佃瘽-${(this.page - 1) * this.limit + i + 1}`, + address: `鍦板潃-${(this.page - 1) * this.limit + i + 1}`, + topCode: `涓婄骇浠撳簱缂栫爜-${(this.page - 1) * this.limit + i + 1}`, + isThisLevel: + ((this.page - 1) * this.limit + i + 1) % 2 == 0 ? true : false, + isEscrow: + ((this.page - 1) * this.limit + i + 1) % 2 == 0 ? true : false, + isEnable: + ((this.page - 1) * this.limit + i + 1) % 2 == 0 ? true : false, + }; + if ((this.page - 1) * this.limit + i + 1 < 100) fakeList.push(row); + } + setTimeout(() => { + resolve({ data: fakeList, total }); + }, 1 * 1000); + }); }, resize() { let height = @@ -267,14 +365,35 @@ this.infoDialog.visible = true; }, onEditClick() { + if (this.selection.length == 0) return this.showWarning("鏈�鎷╂搷浣滈」"); + else if (this.selection.length > 1) + return this.showWarning("鍙兘閫夋嫨涓�」杩涜缂栬緫"); + let code = this.selection[0].code; this.infoDialog.model = "edit"; - this.infoDialog.dataId = ""; + this.infoDialog.dataId = code; + this.infoDialog.visible = true; + }, + onEditRowClick(index) { + let code = this.data[index].code; + this.infoDialog.model = "edit"; + this.infoDialog.dataId = code; this.infoDialog.visible = true; }, onViewClick() { + if (this.selection.length == 0) return this.showWarning("鏈�鎷╂搷浣滈」"); + else if (this.selection.length > 1) + return this.showWarning("鍙兘閫夋嫨涓�」鏌ョ湅"); + let code = this.selection[0].code; this.infoDialog.model = "info"; - this.infoDialog.dataId = ""; + this.infoDialog.dataId = code; this.infoDialog.visible = true; + }, + showWarning(tip) { + this.$Message.warning({ + content: tip, + duration: 0, + closable: true, + }); }, async onDelClick() { this.$Modal.confirm({ @@ -300,12 +419,31 @@ this.$Message.success("鍒犻櫎鎴愬姛锛�); }, 2000); }, + onSelectionChange(selection) { + this.selection = selection; + }, + onPageChange(page) { + this.page = page; + this.loadData(); + }, + onPageSizeChange(limit) { + this.limit = limit; + this.loadData(); + }, + onPrev(page) { + this.page = page; + this.loadData(); + }, + onNext(page) { + this.page = page; + this.loadData(); + }, }, async mounted() { await this.loadColumns(); - await this.loadData(); this.$nextTick(() => { this.resize(); + this.loadData(); }); }, setup() { @@ -315,16 +453,34 @@ }; </script> -<style lang="less" scoped> +<style lang="less"> .example-data-table { 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; + } + } + .ivu-checkbox-input[disabled] { + cursor: default; + } + .ivu-checkbox-disabled .ivu-checkbox-inner { + border-color: #666; + background-color: #fff; + } + .ivu-checkbox-disabled.ivu-checkbox-checked .ivu-checkbox-inner:after { + border-color: #666; + } } </style> \ No newline at end of file diff --git a/src/views/examples/excel.js b/src/views/examples/excel.js new file mode 100644 index 0000000..4a28e23 --- /dev/null +++ b/src/views/examples/excel.js @@ -0,0 +1,27 @@ +import Excel from '@/libs/excel' + +/** + * 瀵煎嚭鏁版嵁鍒皒lsx鏂囦欢 + * @param {*} vm + * @param {*} btn + */ +export const exportExcel = async (vm, datas) => { + const columns = vm.columns.filter(c => c.key != 'index').map(c => ({ + header: c.title, + key: c.key, + width: (c.width || 25) / 8, + style: { + alignment: { + horizontal: c.TextAlign || 'left' + } + } + })); + let frozenColumnId = 1 + const excel = new Excel(); + excel.exportExcel({ + name: '瀵煎嚭鏂囦欢', + datas, + columns, + frozenColumnId, + }) +} \ No newline at end of file diff --git a/src/views/examples/master-slave.vue b/src/views/examples/master-slave.vue index 0c3fa1a..a359d56 100644 --- a/src/views/examples/master-slave.vue +++ b/src/views/examples/master-slave.vue @@ -13,58 +13,34 @@ <Row> <Col span="6"> <FormItem label="浠撳簱缂栫爜锛�> - <Input - v-model="topForm.WH_Code" - placeholder="Enter something..." - size="small" - ></Input> + <Input v-model="topForm.WH_Code" size="small"></Input> </FormItem> </Col> <Col span="6"> <FormItem label="浠撳簱鍚嶇О锛�> - <Input - v-model="topForm.WH_Code" - placeholder="Enter something..." - size="small" - ></Input> + <Input v-model="topForm.WH_Code" size="small"></Input> </FormItem> </Col> <Col span="6"> <FormItem label="浠撳簱璐熻矗浜猴細"> - <Input - v-model="topForm.WH_Code" - placeholder="Enter something..." - size="small" - ></Input> + <Input v-model="topForm.WH_Code" size="small"></Input> </FormItem> </Col> <Col span="6"> <FormItem label="浠撳簱鐢佃瘽锛�> - <Input - v-model="topForm.WH_Code" - placeholder="Enter something..." - size="small" - ></Input> + <Input v-model="topForm.WH_Code" size="small"></Input> </FormItem> </Col> </Row> <Row> <Col span="6"> <FormItem label="涓婄骇浠撳簱缂栫爜锛�> - <Input - v-model="topForm.WH_Code" - placeholder="Enter something..." - size="small" - ></Input> + <Input v-model="topForm.WH_Code" size="small"></Input> </FormItem> </Col> <Col span="6"> <FormItem label="鍦板潃锛�> - <Input - v-model="topForm.WH_Code" - placeholder="Enter something..." - size="small" - ></Input> + <Input v-model="topForm.WH_Code" size="small"></Input> </FormItem> </Col> <Col span="4"> @@ -98,6 +74,18 @@ :tableHeight="tableTopHeight" :columns="topColumns" :data="topData" + :page="topPage" + :limit="topLimit" + :limits="topLimits" + :total="topTotal" + :loading="topLoading" + highlight-row + @on-current-change="onCurrentChange" + @on-change="onPageChange" + @on-page-size-change="onPageSizeChange" + @on-prev="onPrev" + @on-next="onNext" + ref="refTopTable" ></DataTable> </div> </template> @@ -112,6 +100,7 @@ </div> </template> </Split> + <Spin fix :show="loading" /> </div> </template> @@ -125,6 +114,9 @@ }, data() { return { + // 鍒嗛殧姣斾緥 + split: 0.6, + // 涓昏〃鍙傛暟瀹氫箟 topColumns: [], topData: [], tableTopHeight: 0, @@ -132,173 +124,275 @@ topForm: { WH_Code: "", }, + topPage: 1, + topLimit: 30, + topLimits: [10, 20, 30], + topTotal: 0, + topLoading: false, + currentRow: undefined, + // 浠庤〃鍙傛暟瀹氫箟 bottomColumns: [], bottomData: [], - split: 0.6, + + loading: false, }; }, methods: { async loadTopColumns() { this.topColumns = [ { - type: "index", + key: "index", title: " ", render: (h, { index }) => { - return h(index); + return h("div", (this.topPage - 1) * this.topLimit + index + 1); }, - width: 50, + width: 40, + align: "center", }, { - key: "", + key: "orderNo", title: "鍒拌揣鍗曞彿", width: 100, }, { - key: "", + key: "checkNo", title: "妫�煡鍗曞彿", width: 100, }, { - key: "", + key: "invertoryCode", title: "瀛樿揣缂栫爜", width: 100, }, { - key: "", + key: "invertoryName", title: "瀛樿揣鍚嶇О", width: 100, }, { - key: "", + key: "specModel", title: "瑙勬牸鍨嬪彿", width: 100, }, { - key: "", + key: "logo", title: "鍝佺墝", width: 100, }, { - key: "", + key: "desc", title: "鍙傛暟鎻忚堪", width: 100, }, { - key: "", + key: "material", title: "鏉愭枡", width: 100, }, { - key: "", + key: "unit", title: "鍗曚綅", width: 100, }, { - key: "", + key: "count", title: "鍏ュ簱鏁伴噺", width: 100, }, { - key: "", + key: "arriveDate", title: "鍒拌揣鏃ユ湡", width: 100, }, { - key: "", + key: "checkDate", title: "妫�煡鏃ユ湡", width: 100, }, { - key: "", + key: "business", title: "涓氬姟绫诲瀷", width: 100, }, ]; }, - async loadTopData() {}, + // 鍔犺浇涓昏〃鏁版嵁 + async loadTopData() { + let msg = this.$Message.loading("姝e湪鍔犺浇鏁版嵁..."); + this.topLoading = true; + + this.bottomData = []; + + let { data, total } = await this.fakeTopDataList(); + + msg(); + + this.topData = data; + this.topTotal = total; + this.topLoading = false; + + this.$nextTick(() => { + let firstRow = this.refTopTable.refTable.objData[0]; + if (firstRow) { + firstRow._isHighlight = true; + this.currentRow = this.topData[0]; + this.loadBottomData(); + } + }); + }, + // 涓昏〃娴嬭瘯鏁版嵁鍒楄〃 + fakeTopDataList() { + return new Promise((resolve) => { + let total = 99; + let fakeList = []; + for (let i = 0; i < this.topLimit; i++) { + let row = { + orderNo: `鍒拌揣鍗曞彿-${(this.topPage - 1) * this.topLimit + i + 1}`, + checkNo: `妫�煡鍗曞彿-${(this.topPage - 1) * this.topLimit + i + 1}`, + invertoryCode: `瀛樿揣缂栫爜-${ + (this.topPage - 1) * this.topLimit + i + 1 + }`, + invertoryName: `瀛樿揣鍚嶇О-${ + (this.topPage - 1) * this.topLimit + i + 1 + }`, + specModel: `瑙勬牸鍨嬪彿-${(this.topPage - 1) * this.topLimit + i + 1}`, + logo: `鍝佺墝-${(this.topPage - 1) * this.topLimit + i + 1}`, + desc: `鍙傛暟鎻忚堪-${(this.topPage - 1) * this.topLimit + i + 1}`, + material: `鏉愭枡-${(this.topPage - 1) * this.topLimit + i + 1}`, + unit: `鍗曚綅-${(this.topPage - 1) * this.topLimit + i + 1}`, + count: `鍏ュ簱鏁伴噺-${(this.topPage - 1) * this.topLimit + i + 1}`, + arriveDate: `鍒拌揣鏃ユ湡-${ + (this.topPage - 1) * this.topLimit + i + 1 + }`, + checkDate: `妫�煡鏃ユ湡-${(this.topPage - 1) * this.topLimit + i + 1}`, + business: `涓氬姟绫诲瀷-${(this.topPage - 1) * this.topLimit + i + 1}`, + }; + if ((this.topPage - 1) * this.topLimit + i + 1 < 100) + fakeList.push(row); + } + setTimeout(() => { + resolve({ data: fakeList, total }); + }, 1 * 1000); + }); + }, + // 浠庤〃娴嬭瘯鏁版嵁鍒楄〃 + fakeBottomDataList(topDataId) { + return new Promise((resolve) => { + let total = Math.floor(Math.random() * 10); + let fakeList = []; + for (let i = 0; i < total; i++) { + let row = { + checkOrder: `${topDataId}-${i + 1}`, + arriveOrder: `${topDataId}-${i + 1}`, + location: `${topDataId}-${i + 1}`, + supplier: `${topDataId}-${i + 1}`, + asnCode: `${topDataId}-${i + 1}`, + supplierCode: `${topDataId}-${i + 1}`, + WHName: `${topDataId}-${i + 1}`, + count: `${topDataId}-${i + 1}`, + canUsedCount: `${topDataId}-${i + 1}`, + invertoryCode: `${topDataId}-${i + 1}`, + invertoryName: `${topDataId}-${i + 1}`, + specModel: `${topDataId}-${i + 1}`, + logo: `${topDataId}-${i + 1}`, + wpn: `${topDataId}-${i + 1}`, + }; + fakeList.push(row); + } + setTimeout(() => { + resolve(fakeList); + }, 1 * 1000); + }); + }, loadBottomColumns() { this.bottomColumns = [ { - type: "index", + key: "index", title: " ", render: (h, { index }) => { - return h(index); + return h("div", index + 1); }, - width: 50, + width: 40, + align: "center", }, { - key: "", + key: "checkOrder", title: "妫�獙鍗�, width: 100, }, { - key: "", + key: "arriveOrder", title: "鍒拌揣鍗�, width: 100, }, { - key: "", + key: "location", title: "寰呮璐т綅", width: 100, }, { - key: "", + key: "supplier", title: "渚涘簲鍟嗗悕绉�, width: 100, }, { - key: "", + key: "asnCode", title: "ASN鍗曞彿", width: 100, }, { - key: "", + key: "supplierCode", title: "渚涘簲鍟嗙紪鐮�, width: 100, }, { - key: "", + key: "WHName", title: "浠撳簱鍚嶇О", width: 100, }, { - key: "", + key: "count", title: "鏁伴噺", width: 100, }, { - key: "", + key: "canUsedCount", title: "鍙敤缁戝畾鏁伴噺", width: 100, }, { - key: "", + key: "invertoryCode", title: "瀛樿揣缂栫爜", width: 100, }, { - key: "", + key: "invertoryName", title: "瀛樿揣鍚嶇О", width: 100, }, { - key: "", + key: "specModel", title: "瑙勬牸鍨嬪彿", width: 100, }, { - key: "", + key: "logo", title: "鍝佺墝", width: 100, }, { - key: "", + key: "wpn", title: "WPN", width: 100, }, ]; }, - async loadBottomData() {}, + // 鍔犺浇浠庤〃鏁版嵁 + async loadBottomData() { + let { orderNo } = this.currentRow; + let data = await this.fakeBottomDataList(orderNo); + this.bottomData = data; + }, resize() { this.$nextTick(() => { let topHeight = @@ -311,20 +405,43 @@ this.tableBottomHeight = bottomHeight; }); }, + // 涓昏〃鍒囨崲閫夋嫨琛屾椂瑙﹀彂 + async onCurrentChange(row) { + this.currentRow = row; + this.loading = true; + await this.loadBottomData(); + this.loading = false; + }, + onPageChange(page) { + this.topPage = page; + this.loadTopData(); + }, + onPageSizeChange(limit) { + this.topLimit = limit; + this.loadTopData(); + }, + onPrev(page) { + this.topPage = page; + this.loadTopData(); + }, + onNext(page) { + this.topPage = page; + this.loadTopData(); + }, }, async mounted() { await this.loadTopColumns(); - await this.loadTopData(); await this.loadBottomColumns(); - await this.loadBottomData(); - this.$nextTick(() => { + this.$nextTick(async () => { + await this.loadTopData(); this.resize(); }); }, setup() { const refTopView = ref(null); const refBottomView = ref(null); - return { refTopView, refBottomView }; + const refTopTable = ref(null); + return { refTopView, refBottomView, refTopTable }; }, }; </script> diff --git a/src/views/examples/report.vue b/src/views/examples/report.vue index 311fa7e..5f41da9 100644 --- a/src/views/examples/report.vue +++ b/src/views/examples/report.vue @@ -5,37 +5,29 @@ <Row> <Col span="6"> <FormItem label="渚涘簲鍟嗙紪鐮侊細"> - <Input - v-model="form.WH_Code" - placeholder="Enter something..." - size="small" - ></Input> + <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.WH_Code" - placeholder="Enter something..." - size="small" - ></Input> + <Input v-model="form.SupplierName" size="small"></Input> </FormItem> </Col> <Col span="6"> <FormItem label="ASN鍗曞彿锛�> - <Input - v-model="form.WH_Code" - placeholder="Enter something..." - size="small" + <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.WH_Code" - placeholder="Enter something..." - size="small" + <Input v-model="form.Invertory" size="small"> + <template #suffix> <Icon type="ios-more" /> </template ></Input> </FormItem> </Col> @@ -43,106 +35,114 @@ <Row> <Col span="6"> <FormItem label="浠h喘璁㈠崟鍙凤細"> - <Input - v-model="form.WH_Code" - placeholder="Enter something..." - size="small" + <Input v-model="form.PurchaseOrderNo" size="small"> + <template #suffix> <Icon type="ios-more" /> </template ></Input> </FormItem> </Col> <Col span="12"> <FormItem label="璁㈠崟浜ゆ湡锛�> - <Input - v-model="form.WH_Code" - placeholder="Enter something..." + <DatePicker + type="daterange" + v-model="form.OrderDate" + separator=" 鑷�" size="small" - ></Input> + style="width: 100%" + ></DatePicker> </FormItem> </Col> <Col span="6"> <FormItem label="鐘舵�锛�> - <Input - v-model="form.WH_Code" - placeholder="Enter something..." - size="small" - ></Input> + <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.WH_Code" - placeholder="Enter something..." - size="small" - ></Input> + <Input v-model="form.Purchase" size="small"></Input> </FormItem> </Col> <Col span="6"> <FormItem label="閲囪喘绫诲瀷锛�> - <Input - v-model="form.WH_Code" - placeholder="Enter something..." - size="small" - ></Input> + <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="鍗曟嵁绫诲瀷锛�> - <Input - v-model="form.WH_Code" - placeholder="Enter something..." - size="small" - ></Input> + <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="鍏抽棴鐘舵�锛�> - <Input - v-model="form.WH_Code" - placeholder="Enter something..." - size="small" - ></Input> + <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="鏄惁鍒拌揣瀹屾垚锛�> - <Input - v-model="form.WH_Code" - placeholder="Enter something..." - size="small" - ></Input> + <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鍒涘缓鏃ユ湡锛�> - <Input - v-model="form.WH_Code" - placeholder="Enter something..." - size="small" - ></Input> + <DatePicker type="date" v-model="form.CreateTime" size="small" /> </FormItem> </Col> </Row> </Form> </div> <div class="buttons"> - <Button type="success" size="small" @click="onExportClick">瀵煎嚭</Button> + <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> - <DataTable - :tableHeight="tableHeight" - :columns="columns" - :data="data" - ></DataTable> + <div class="table"> + <DataTable + :tableHeight="tableHeight" + :columns="columns" + :data="data" + :page="page" + :limit="limit" + :limits="limits" + :total="total" + :loading="loading" + @on-change="onPageChange" + @on-page-size-change="onPageSizeChange" + @on-prev="onPrev" + @on-next="onNext" + ></DataTable> + </div> </div> </template> <script> import { ref } from "vue"; import DataTable from "@/components/examples/data-table.vue"; +import { exportExcel } from "./excel.js"; export default { name: "ExampleReportView", components: { @@ -153,85 +153,172 @@ columns: [], data: [], tableHeight: 0, + // 鏌ヨ琛ㄥ崟鐨勫畾涔� form: { - WH_Code: "", + SupplierCode: "", + ASNName: "", + ASNCode: "", + Invertory: "", + PurchaseOrderNo: "", + OrderDate: [], + State: "", + Purchase: "", + PurchaseType: "", + DocumentType: "", + CloseState: "", + IsArrived: "", + ASNCreateDate: "", }, + // 鍒嗛〉鍙傛暟 + page: 1, + limit: 30, + limits: [10, 20, 30], + total: 0, + loading: false, }; }, methods: { async loadColumns() { this.columns = [ { - type: "index", + key: "index", title: " ", render: (h, { index }) => { - return h(index); + return h("div", (this.page - 1) * this.limit + index + 1); }, - width: 50, + width: 40, + align: "center", }, { - key: "", + key: "ASNCode", title: "ASN鍗曞彿", width: 100, + sortable: true, + resizable: true, }, { - key: "", + key: "CloseState", title: "鍏抽棴鐘舵�", width: 100, + sortable: true, + resizable: true, }, { - key: "", + key: "InventoryState", title: "瀛樿揣鐘舵�", width: 100, + sortable: true, + resizable: true, }, { - key: "", + key: "InvertoryName", title: "瀛樿揣鍚嶇О", width: 100, + resizable: true, }, { - key: "", + key: "SpecModel", title: "瑙勬牸鍨嬪彿", width: 100, + sortable: true, + resizable: true, }, { - key: "", + key: "AuditState", title: "瀹℃牳鐘舵�", width: 100, + resizable: true, }, { - key: "", + key: "SendDate", title: "鍙戣揣鏃ユ湡", width: 100, + sortable: true, + resizable: true, }, { - key: "", + key: "SupplierCode", title: "渚涘簲鍟嗙紪鐮�, width: 100, + resizable: true, }, { - key: "", + key: "SupplierName", title: "渚涘簲鍟嗗悕绉�, width: 100, + resizable: true, }, { - key: "", + key: "Creator", title: "鍒涘缓浜�, width: 100, }, { - key: "", + key: "CreateTime", title: "鍒涘缓鏃堕棿", width: 100, + sortable: true, }, { - key: "", + key: "PurchasePoint", title: "閲囪喘鐐�, width: 100, }, ]; }, - async loadData() {}, + // 鍔犺浇鏁版嵁琛�+ async loadData() { + let msg = this.$Message.loading("姝e湪鍔犺浇鏁版嵁..."); + this.loading = true; + + let { data, total } = await this.fakeDataList(); + + msg(); + + this.data = data; + this.total = total; + this.loading = false; + }, + // 鍔犺浇鍏ㄩ儴鏁版嵁(瀵煎嚭) + async loadAllData() { + let msg = this.$Message.loading("姝e湪鍔犺浇鏁版嵁..."); + this.loading = true; + + let { data } = await this.fakeDataList(this.total); + + msg(); + + this.loading = false; + + return data; + }, + // 娴嬭瘯鏁版嵁鍒楄〃 + fakeDataList(limit) { + return new Promise((resolve) => { + let total = 99; + let fakeList = []; + for (let i = 0; i < (limit || this.limit); i++) { + let row = { + ASNCode: `ASN鍗曞彿-${(this.page - 1) * this.limit + i + 1}`, + CloseState: `鍏抽棴鐘舵�-${(this.page - 1) * this.limit + i + 1}`, + InventoryState: `瀛樿揣鐘舵�-${(this.page - 1) * this.limit + i + 1}`, + InvertoryName: `瀛樿揣鍚嶇О-${(this.page - 1) * this.limit + i + 1}`, + SpecModel: `瑙勬牸鍨嬪彿-${(this.page - 1) * this.limit + i + 1}`, + AuditState: `瀹℃牳鐘舵�-${(this.page - 1) * this.limit + i + 1}`, + SendDate: `鍙戣揣鏃ユ湡-${(this.page - 1) * this.limit + i + 1}`, + SupplierCode: `渚涘簲鍟嗙紪鐮�${(this.page - 1) * this.limit + i + 1}`, + SupplierName: `渚涘簲鍟嗗悕绉�${(this.page - 1) * this.limit + i + 1}`, + Creator: `鍒涘缓浜�${(this.page - 1) * this.limit + i + 1}`, + CreateTime: `鍒涘缓鏃堕棿-${(this.page - 1) * this.limit + i + 1}`, + PurchasePoint: `閲囪喘鐐�${(this.page - 1) * this.limit + i + 1}`, + }; + if ((this.page - 1) * this.limit + i + 1 < 100) fakeList.push(row); + } + setTimeout(() => { + resolve({ data: fakeList, total }); + }, 1 * 1000); + }); + }, resize() { let height = this.refView.clientHeight - @@ -241,11 +328,48 @@ 9; this.tableHeight = height; }, - onExportClick() {}, + onSearchClick() { + alert(JSON.stringify(this.form, "", " ")); + }, + onClearClick() { + this.form.SupplierCode = ""; + this.form.ASNName = ""; + this.form.ASNCode = ""; + this.form.Invertory = ""; + this.form.PurchaseOrderNo = ""; + this.form.OrderDate = []; + this.form.State = ""; + this.form.Purchase = ""; + this.form.PurchaseType = ""; + this.form.DocumentType = ""; + this.form.CloseState = ""; + this.form.IsArrived = ""; + this.form.ASNCreateDate = ""; + }, + async onExportClick() { + let datas = await this.loadAllData(); + await exportExcel(this, datas); + }, + onPageChange(page) { + this.page = page; + this.loadData(); + }, + onPageSizeChange(limit) { + this.limit = limit; + this.loadData(); + }, + onPrev(page) { + this.page = page; + this.loadData(); + }, + onNext(page) { + this.page = page; + this.loadData(); + }, }, async mounted() { await this.loadColumns(); - await this.loadData(); + this.loadData(); this.$nextTick(() => { this.resize(); }); @@ -264,9 +388,17 @@ .buttons { margin-bottom: 9px; } + .table { + height: calc(100% - 170px); + } .ivu-form .ivu-form-item-label, .ivu-checkbox-wrapper { font-size: 12px; } + .ivu-input-wrapper { + .ivu-icon { + cursor: pointer; + } + } } </style> \ No newline at end of file -- Gitblit v1.9.1