From 093388d51f56e95d155f204971d49fe303b76408 Mon Sep 17 00:00:00 2001 From: longyvfengyun <496960745@qq.com> Date: 星期三, 06 九月 2023 17:24:24 +0800 Subject: [PATCH] 门禁历史记录 --- src/views/accessControl/accessControl.vue | 42 + package-lock.json | 769 ++++++++++++++++++++++++++++++++++++++ src/views/accessControl/js/api.js | 23 + src/main.js | 27 + src/views/home/js/homeInfoModule.js | 14 src/views/accessControl/js/doorInfoModule.js | 76 ++- package.json | 6 src/views/accessControl/components/doorHistoryData.vue | 99 ++++ src/assets/js/tools/exportExcelUtil.js | 30 + vite.config.js | 2 src/views/accessControl/js/doorInfoHistoryModule.js | 89 ++++ 11 files changed, 1,116 insertions(+), 61 deletions(-) diff --git a/package-lock.json b/package-lock.json index 392cefc..724cb02 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,16 +11,20 @@ "@element-plus/icons-vue": "^2.1.0", "axios": "^1.4.0", "element-plus": "^2.3.6", + "file-saver": "^2.0.5", "jquery": "^3.7.0", "js-md5": "^0.7.3", "pinia": "^2.1.4", + "script-loader": "^0.7.2", "vue": "^3.3.4", - "vue-router": "^4.2.2" + "vue-router": "^4.2.2", + "xlsx": "^0.18.5" }, "devDependencies": { "@vitejs/plugin-vue": "^4.2.3", "less": "^4.1.3", "vite": "^4.3.9", + "vite-plugin-require-transform": "^1.0.21", "vite-plugin-windicss": "^1.9.0", "windicss": "^3.5.6" } @@ -34,15 +38,170 @@ "url": "https://github.com/sponsors/antfu" } }, - "node_modules/@babel/parser": { + "node_modules/@babel/code-frame": { + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", + "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.22.13", + "chalk": "^2.4.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/generator": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.15.tgz", + "integrity": "sha512-Zu9oWARBqeVOW0dZOjXc3JObrzuqothQ3y/n1kUtrjCoCPLkXUwMvOo/F/TCfoHMbWIFlWwpZtkZVb9ga4U2pA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.15", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-environment-visitor": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.5.tgz", - "integrity": "sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q==", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", + "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", + "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", + "dev": true, + "dependencies": { + "@babel/template": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.15.tgz", + "integrity": "sha512-4E/F9IIEi8WR94324mbDUMo074YTheJmd7eZF5vITTeYchqAi6sYXRLHUVsmkdmY4QjfKTcB2jB7dVP3NaBElQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.13.tgz", + "integrity": "sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.5", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.15.tgz", + "integrity": "sha512-RWmQ/sklUN9BvGGpCDgSubhHWfAx24XDTDObup4ffvxaYsptOg2P3KG0j+1eWKLxpkX0j0uHxmpq2Z1SP/VhxA==", "bin": { "parser": "bin/babel-parser.js" }, "engines": { "node": ">=6.0.0" + } + }, + "node_modules/@babel/template": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.15.tgz", + "integrity": "sha512-DdHPwvJY0sEeN4xJU5uRLmZjgMMDIvMPniLuYzUVXj/GGzysPl0/fwt44JBkyUIzGJPV8QgHMcQdQ34XFuKTYQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.22.15", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.15.tgz", + "integrity": "sha512-X+NLXr0N8XXmN5ZsaQdm9U2SSC3UbIYq/doL++sueHOTisgZHoKaQtZxGuV2cUPQHMfjKEfg/g6oy7Hm6SKFtA==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.15", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@ctrl/tinycolor": { @@ -426,10 +585,52 @@ "@floating-ui/core": "^1.3.0" } }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.15", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", + "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", @@ -729,6 +930,26 @@ "url": "https://github.com/sponsors/antfu" } }, + "node_modules/adler-32": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/adler-32/-/adler-32-1.3.1.tgz", + "integrity": "sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/async-validator": { "version": "4.2.5", "resolved": "https://registry.npmjs.org/async-validator/-/async-validator-4.2.5.tgz", @@ -761,6 +982,55 @@ "node": ">=8" } }, + "node_modules/cfb": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cfb/-/cfb-1.2.2.tgz", + "integrity": "sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==", + "dependencies": { + "adler-32": "~1.3.0", + "crc-32": "~1.2.0" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/codepage": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/codepage/-/codepage-1.15.0.tgz", + "integrity": "sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -782,6 +1052,17 @@ }, "funding": { "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/crc-32": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", + "bin": { + "crc32": "bin/crc32.njs" + }, + "engines": { + "node": ">=0.8" } }, "node_modules/csstype": { @@ -899,6 +1180,15 @@ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/estree-walker": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", @@ -928,6 +1218,11 @@ "dependencies": { "reusify": "^1.0.4" } + }, + "node_modules/file-saver": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.5.tgz", + "integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==" }, "node_modules/fill-range": { "version": "7.0.1", @@ -973,6 +1268,14 @@ "node": ">= 6" } }, + "node_modules/frac": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/frac/-/frac-1.1.2.tgz", + "integrity": "sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==", + "engines": { + "node": ">=0.8" + } + }, "node_modules/fsevents": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", @@ -999,12 +1302,30 @@ "node": ">= 6" } }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/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.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "dev": true, "optional": true + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } }, "node_modules/iconv-lite": { "version": "0.6.3", @@ -1086,6 +1407,24 @@ "version": "0.7.3", "resolved": "https://registry.npmjs.org/js-md5/-/js-md5-0.7.3.tgz", "integrity": "sha512-ZC41vPSTLKGwIRjqDh8DfXoCrdQIyBgspJVPXHBGu4nZlAEvG3nf+jO9avM9RmLiGakg7vz974ms99nEV0tmTQ==" + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } }, "node_modules/kolorist": { "version": "1.8.0", @@ -1424,6 +1763,11 @@ } ] }, + "node_modules/raw-loader": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-0.5.1.tgz", + "integrity": "sha512-sf7oGoLuaYAScB4VGr0tzetsYlS8EJH6qnTCfQ/WVEa89hALQ4RQfCKt5xCyPQKPDUbVUAIP1QsxAwfAjlDp7Q==" + }, "node_modules/reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", @@ -1487,6 +1831,14 @@ "dev": true, "optional": true }, + "node_modules/script-loader": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/script-loader/-/script-loader-0.7.2.tgz", + "integrity": "sha512-UMNLEvgOAQuzK8ji8qIscM3GIrRCWN6MmMXGD4SD5l6cSycgGsCo0tX5xRnfQcoghqct0tjHjcykgI1PyBE2aA==", + "dependencies": { + "raw-loader": "~0.5.1" + } + }, "node_modules/semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", @@ -1513,6 +1865,38 @@ "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", "engines": { "node": ">=0.10.0" + } + }, + "node_modules/ssf": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/ssf/-/ssf-0.11.2.tgz", + "integrity": "sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==", + "dependencies": { + "frac": "~1.1.2" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "engines": { + "node": ">=4" } }, "node_modules/to-regex-range": { @@ -1581,6 +1965,18 @@ } } }, + "node_modules/vite-plugin-require-transform": { + "version": "1.0.21", + "resolved": "https://registry.npmjs.org/vite-plugin-require-transform/-/vite-plugin-require-transform-1.0.21.tgz", + "integrity": "sha512-A3SrHhVg9tCW35O7E8kcuB71YTEdVd3EaM1zh6gbH4zxy4WzXSfcNf0UiWmaHHhr6wdFhiiAGdpR6S0SUxXkGQ==", + "dev": true, + "dependencies": { + "@babel/generator": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" + } + }, "node_modules/vite-plugin-windicss": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/vite-plugin-windicss/-/vite-plugin-windicss-1.9.0.tgz", @@ -1636,6 +2032,42 @@ "engines": { "node": ">= 12" } + }, + "node_modules/wmf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wmf/-/wmf-1.0.2.tgz", + "integrity": "sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/word": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/word/-/word-0.3.0.tgz", + "integrity": "sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/xlsx": { + "version": "0.18.5", + "resolved": "https://registry.npmjs.org/xlsx/-/xlsx-0.18.5.tgz", + "integrity": "sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==", + "dependencies": { + "adler-32": "~1.3.0", + "cfb": "~1.2.1", + "codepage": "~1.15.0", + "crc-32": "~1.2.1", + "ssf": "~0.11.2", + "wmf": "~1.0.1", + "word": "~0.3.0" + }, + "bin": { + "xlsx": "bin/xlsx.njs" + }, + "engines": { + "node": ">=0.8" + } } }, "dependencies": { @@ -1645,10 +2077,129 @@ "integrity": "sha512-qe8Nmh9rYI/HIspLSTwtbMFPj6dISG6+dJnOguTlPNXtCvS2uezdxscVBb7/3DrmNbQK49TDqpkSQ1chbRGdpQ==", "dev": true }, - "@babel/parser": { + "@babel/code-frame": { + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", + "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", + "dev": true, + "requires": { + "@babel/highlight": "^7.22.13", + "chalk": "^2.4.2" + } + }, + "@babel/generator": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.15.tgz", + "integrity": "sha512-Zu9oWARBqeVOW0dZOjXc3JObrzuqothQ3y/n1kUtrjCoCPLkXUwMvOo/F/TCfoHMbWIFlWwpZtkZVb9ga4U2pA==", + "dev": true, + "requires": { + "@babel/types": "^7.22.15", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + } + }, + "@babel/helper-environment-visitor": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.5.tgz", - "integrity": "sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q==" + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", + "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", + "dev": true + }, + "@babel/helper-function-name": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", + "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", + "dev": true, + "requires": { + "@babel/template": "^7.22.5", + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-string-parser": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "dev": true + }, + "@babel/helper-validator-identifier": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.15.tgz", + "integrity": "sha512-4E/F9IIEi8WR94324mbDUMo074YTheJmd7eZF5vITTeYchqAi6sYXRLHUVsmkdmY4QjfKTcB2jB7dVP3NaBElQ==", + "dev": true + }, + "@babel/highlight": { + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.13.tgz", + "integrity": "sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.22.5", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.15.tgz", + "integrity": "sha512-RWmQ/sklUN9BvGGpCDgSubhHWfAx24XDTDObup4ffvxaYsptOg2P3KG0j+1eWKLxpkX0j0uHxmpq2Z1SP/VhxA==" + }, + "@babel/template": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" + } + }, + "@babel/traverse": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.15.tgz", + "integrity": "sha512-DdHPwvJY0sEeN4xJU5uRLmZjgMMDIvMPniLuYzUVXj/GGzysPl0/fwt44JBkyUIzGJPV8QgHMcQdQ34XFuKTYQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.22.15", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.15.tgz", + "integrity": "sha512-X+NLXr0N8XXmN5ZsaQdm9U2SSC3UbIYq/doL++sueHOTisgZHoKaQtZxGuV2cUPQHMfjKEfg/g6oy7Hm6SKFtA==", + "dev": true, + "requires": { + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.15", + "to-fast-properties": "^2.0.0" + } }, "@ctrl/tinycolor": { "version": "3.6.0", @@ -1828,10 +2379,43 @@ "@floating-ui/core": "^1.3.0" } }, + "@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "dev": true + }, + "@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true + }, "@jridgewell/sourcemap-codec": { "version": "1.4.15", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + }, + "@jridgewell/trace-mapping": { + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", + "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } }, "@nodelib/fs.scandir": { "version": "2.1.5", @@ -2059,6 +2643,20 @@ "windicss": "^3.5.6" } }, + "adler-32": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/adler-32/-/adler-32-1.3.1.tgz", + "integrity": "sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==" + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, "async-validator": { "version": "4.2.5", "resolved": "https://registry.npmjs.org/async-validator/-/async-validator-4.2.5.tgz", @@ -2088,6 +2686,46 @@ "fill-range": "^7.0.1" } }, + "cfb": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cfb/-/cfb-1.2.2.tgz", + "integrity": "sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==", + "requires": { + "adler-32": "~1.3.0", + "crc-32": "~1.2.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "codepage": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/codepage/-/codepage-1.15.0.tgz", + "integrity": "sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==" + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, "combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -2104,6 +2742,11 @@ "requires": { "is-what": "^3.14.1" } + }, + "crc-32": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==" }, "csstype": { "version": "3.1.2", @@ -2196,6 +2839,12 @@ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true + }, "estree-walker": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", @@ -2223,6 +2872,11 @@ "reusify": "^1.0.4" } }, + "file-saver": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.5.tgz", + "integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==" + }, "fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -2247,6 +2901,11 @@ "mime-types": "^2.1.12" } }, + "frac": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/frac/-/frac-1.1.2.tgz", + "integrity": "sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==" + }, "fsevents": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", @@ -2263,12 +2922,24 @@ "is-glob": "^4.0.1" } }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + }, "graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "dev": true, "optional": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true }, "iconv-lite": { "version": "0.6.3", @@ -2329,6 +3000,18 @@ "version": "0.7.3", "resolved": "https://registry.npmjs.org/js-md5/-/js-md5-0.7.3.tgz", "integrity": "sha512-ZC41vPSTLKGwIRjqDh8DfXoCrdQIyBgspJVPXHBGu4nZlAEvG3nf+jO9avM9RmLiGakg7vz974ms99nEV0tmTQ==" + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true }, "kolorist": { "version": "1.8.0", @@ -2539,6 +3222,11 @@ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true }, + "raw-loader": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-0.5.1.tgz", + "integrity": "sha512-sf7oGoLuaYAScB4VGr0tzetsYlS8EJH6qnTCfQ/WVEa89hALQ4RQfCKt5xCyPQKPDUbVUAIP1QsxAwfAjlDp7Q==" + }, "reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", @@ -2577,6 +3265,14 @@ "dev": true, "optional": true }, + "script-loader": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/script-loader/-/script-loader-0.7.2.tgz", + "integrity": "sha512-UMNLEvgOAQuzK8ji8qIscM3GIrRCWN6MmMXGD4SD5l6cSycgGsCo0tX5xRnfQcoghqct0tjHjcykgI1PyBE2aA==", + "requires": { + "raw-loader": "~0.5.1" + } + }, "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", @@ -2595,6 +3291,29 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" + }, + "ssf": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/ssf/-/ssf-0.11.2.tgz", + "integrity": "sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==", + "requires": { + "frac": "~1.1.2" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true }, "to-regex-range": { "version": "5.0.1", @@ -2621,6 +3340,18 @@ "fsevents": "~2.3.2", "postcss": "^8.4.23", "rollup": "^3.21.0" + } + }, + "vite-plugin-require-transform": { + "version": "1.0.21", + "resolved": "https://registry.npmjs.org/vite-plugin-require-transform/-/vite-plugin-require-transform-1.0.21.tgz", + "integrity": "sha512-A3SrHhVg9tCW35O7E8kcuB71YTEdVd3EaM1zh6gbH4zxy4WzXSfcNf0UiWmaHHhr6wdFhiiAGdpR6S0SUxXkGQ==", + "dev": true, + "requires": { + "@babel/generator": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" } }, "vite-plugin-windicss": { @@ -2660,6 +3391,30 @@ "resolved": "https://registry.npmjs.org/windicss/-/windicss-3.5.6.tgz", "integrity": "sha512-P1mzPEjgFMZLX0ZqfFht4fhV/FX8DTG7ERG1fBLiWvd34pTLVReS5CVsewKn9PApSgXnVfPWwvq+qUsRwpnwFA==", "dev": true + }, + "wmf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wmf/-/wmf-1.0.2.tgz", + "integrity": "sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==" + }, + "word": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/word/-/word-0.3.0.tgz", + "integrity": "sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==" + }, + "xlsx": { + "version": "0.18.5", + "resolved": "https://registry.npmjs.org/xlsx/-/xlsx-0.18.5.tgz", + "integrity": "sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==", + "requires": { + "adler-32": "~1.3.0", + "cfb": "~1.2.1", + "codepage": "~1.15.0", + "crc-32": "~1.2.1", + "ssf": "~0.11.2", + "wmf": "~1.0.1", + "word": "~0.3.0" + } } } } diff --git a/package.json b/package.json index d7ddb20..14c9dd2 100644 --- a/package.json +++ b/package.json @@ -11,16 +11,20 @@ "@element-plus/icons-vue": "^2.1.0", "axios": "^1.4.0", "element-plus": "^2.3.6", + "file-saver": "^2.0.5", "jquery": "^3.7.0", "js-md5": "^0.7.3", "pinia": "^2.1.4", + "script-loader": "^0.7.2", "vue": "^3.3.4", - "vue-router": "^4.2.2" + "vue-router": "^4.2.2", + "xlsx": "^0.18.5" }, "devDependencies": { "@vitejs/plugin-vue": "^4.2.3", "less": "^4.1.3", "vite": "^4.3.9", + "vite-plugin-require-transform": "^1.0.21", "vite-plugin-windicss": "^1.9.0", "windicss": "^3.5.6" } diff --git a/src/assets/js/tools/exportExcelUtil.js b/src/assets/js/tools/exportExcelUtil.js new file mode 100644 index 0000000..d86053e --- /dev/null +++ b/src/assets/js/tools/exportExcelUtil.js @@ -0,0 +1,30 @@ +import * as XLSX from "xlsx"; +import FileSaver from 'file-saver'; +function exportExcelUtil(headers, data, fileName, sheetName) { + // 鏍煎紡鍖栨暟鎹幓闄ゆ棤鏁堟暟鎹� + let list = data.map(item=>{ + let obj = {}; + Object.keys(headers).forEach(key=>{ + obj[key] = item[key]; + }); + return obj; + }); + const exportData = [ + headers, + ...list, + ]; + sheetName = sheetName?sheetName:"Sheet1"; + fileName = fileName?fileName:"鏂板缓xlsx宸ヤ綔琛�"; + // 娉ㄦ剰琛ㄦ牸涓婄粦瀹歩d锛岃幏鍙杁om鍏冪礌 + const worksheet = XLSX.utils.json_to_sheet(exportData, { skipHeader: true }); + const workbook = XLSX.utils.book_new(); + XLSX.utils.book_append_sheet(workbook, worksheet, sheetName); + const workbookOutput = XLSX.write(workbook, { bookType: "xlsx", type: "array" }); + try { + FileSaver.saveAs(new Blob([workbookOutput], { type: 'application/octet-stream' }), fileName+".xlsx") + } catch (e) { + console.log(e) + } +} + +export default exportExcelUtil; diff --git a/src/main.js b/src/main.js index 214d721..da4123f 100644 --- a/src/main.js +++ b/src/main.js @@ -5,6 +5,8 @@ import ElementPlus from "element-plus"; import "element-plus/dist/index.css"; import * as ElementPlusIconsVue from '@element-plus/icons-vue' +import zhCn from "element-plus/es/locale/lang/zh-cn"; + import { createPinia } from 'pinia' @@ -24,7 +26,30 @@ return hold; }; -app.use(ElementPlus); +//鏍煎紡鍖栨椂闂� +Date.prototype.format = function (format) { + var o = { + "M+": this.getMonth() + 1, //month + "d+": this.getDate(), //day + "h+": this.getHours(), //hour + "m+": this.getMinutes(), //minute + "s+": this.getSeconds(), //second + "q+": Math.floor((this.getMonth() + 3) / 3), //quarter + "S": this.getMilliseconds() //millisecond + }; + if (/(y+)/.test(format)) format = format.replace(RegExp.$1, + (this.getFullYear() + "").substr(4 - RegExp.$1.length)); + for (var k in o) + if (new RegExp("(" + k + ")").test(format)) + format = format.replace(RegExp.$1, + RegExp.$1.length == 1 ? o[k] : + ("00" + o[k]).substr(("" + o[k]).length)); + return format; +}; + +app.use(ElementPlus, { + locale: zhCn +}); app.use(router); app.use(pinia); diff --git a/src/views/accessControl/accessControl.vue b/src/views/accessControl/accessControl.vue index e1c17c5..f5265ed 100644 --- a/src/views/accessControl/accessControl.vue +++ b/src/views/accessControl/accessControl.vue @@ -1,9 +1,10 @@ <script setup> +import {ref} from "vue"; import FlexBox from "@/components/FlexBox.vue"; import doorInfoModule from "@/views/accessControl/js/doorInfoModule"; -import HdwLight from "@/components/HdwLight.vue"; import {ElMessageBox} from "element-plus"; -const {doorInfos, openDoor, closeDoor} = doorInfoModule(); +import DoorHistoryData from "@/views/accessControl/components/doorHistoryData.vue"; +const {doorInfos, openDoor} = doorInfoModule(); const openDoorConfirm = async (info)=>{ ElMessageBox.confirm( "纭寮�鍚棬绂�", @@ -19,20 +20,15 @@ }).catch(()=>{}); } -const closeDoorConfirm = async (info)=>{ - ElMessageBox.confirm( - "纭鍏抽棴闂ㄧ", - "绯荤粺鎻愮ず", - { - confirmButtonText: '纭畾', - cancelButtonText: '鍙栨秷', - type: 'info', - draggable: true, - } - ).then(()=>{ - closeDoor(info); - }).catch(()=>{}); +const doorHistoryDialog = ref(false); +const carcameraId = ref(0); +const carcameraName = ref(0); +const showHistoryDialog = (data)=>{ + doorHistoryDialog.value = true; + carcameraId.value = data.carcameraId; + carcameraName.value =data.carcameraName; } + </script> <template> @@ -45,14 +41,16 @@ <div class="access-control-item"> <div class="access-control-tool"> <div class="access-control-tool-item"> - <el-button type="warning" size="large" @click="openDoorConfirm(item)">寮�闂�</el-button> + <el-button type="warning" @click="openDoorConfirm(item)">寮�闂�</el-button> + <div style="margin-bottom: 8px;"></div> + <el-button type="success" @click="showHistoryDialog(item)">鍘嗗彶</el-button> </div> </div> <flex-box> <div class="access-control-img"> <img src="./images/menJin.png" alt=""> </div> - <div class="access-control-text home-number">{{ item.name }}</div> + <div class="access-control-text home-number">{{ item.carcameraName }}</div> <div class="access-control-text state">闂ㄩ攣鐘舵�侊細<span :class="{'error-text': item.status !==0}">{{ item.statusText }}</span></div> </flex-box> </div> @@ -62,6 +60,16 @@ </div> </div> </div> + <el-dialog + class="center-dialog" + title="闂ㄧ鍘嗗彶鏁版嵁" + width="auto" + v-model="doorHistoryDialog" + align-center + :close-on-click-modal="false" + :modal-append-to-body="false"> + <door-history-data v-if="doorHistoryDialog" :id="carcameraId" :name="carcameraName"></door-history-data> + </el-dialog> </template> <style lang="less" scoped> diff --git a/src/views/accessControl/components/doorHistoryData.vue b/src/views/accessControl/components/doorHistoryData.vue new file mode 100644 index 0000000..c1424ea --- /dev/null +++ b/src/views/accessControl/components/doorHistoryData.vue @@ -0,0 +1,99 @@ +<script setup> +import doorInfoHistoryModule from "@/views/accessControl/js/doorInfoHistoryModule"; +import {onMounted} from "vue"; +const props = defineProps({ + id: { + type: [Number, String], + default: 0 + }, + name: { + type: [Number, String], + default: 0 + } +}); + +const {page, doorHistoryData, searchDoorHistory, exportFile} = doorInfoHistoryModule(props.id); +const handleSizeChange = (size)=>{ + page.value.pageSize = size; + searchDoorHistory(); +} +const handleCurrentChange = (current)=>{ + page.value.pageCurr = current; + searchDoorHistory(); +} + +onMounted(()=>{ + searchDoorHistory(); +}); +</script> + +<template> + <div class="tbl-wrapper"> + <div class="tbl-container"> + <el-table + stripe + empty-text="鏆傛棤鏁版嵁" + :data="doorHistoryData" + height="100%"> + <el-table-column + type="index" + label="缂栧彿" + width="80"> + </el-table-column> + <el-table-column + align="center" + prop="carcameraName" + label="闂ㄧ鍚嶇О"> + </el-table-column> + <el-table-column + align="center" + prop="recordTime" + label="寮�闂ㄦ椂闂�"> + </el-table-column> + <el-table-column + align="center" + prop="state" + label="鐘舵�佸彉鎹�"> + </el-table-column> + </el-table> + </div> + <div class="paging-wrapper"> + <el-button type="primary" size="small" @click="searchDoorHistory()">鏌ヨ</el-button> + <el-popover placement="top" effect="dark" :width="200" trigger="click"> + <template #reference> + <el-button type="primary" size="small" style="margin-right: 16px">瀵煎嚭</el-button> + </template> + <el-button type="primary" size="small" @click="exportFile">瀵煎嚭褰撳墠椤�</el-button> + <el-button type="primary" size="small" @click="exportFile(true)">瀵煎嚭鍏ㄩ儴</el-button> + </el-popover> + <div class="paging-container"> + <el-pagination + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + :current-page.sync="page.pageCurr" + :page-size="page.pageSize" + layout="total, sizes, prev, pager, next" + :total="page.total"> + </el-pagination> + </div> + </div> + </div> +</template> + +<style scoped> +.tbl-wrapper { + background-color: #FFFFFF; +} +.tbl-container { + width: 700px; + height: 440px; +} +.paging-wrapper { + text-align: center; + padding: 4px 8px; +} +.paging-container { + margin-left: 8px; + display: inline-block; +} +</style> diff --git a/src/views/accessControl/js/api.js b/src/views/accessControl/js/api.js index 01bf52c..c7c221e 100644 --- a/src/views/accessControl/js/api.js +++ b/src/views/accessControl/js/api.js @@ -16,3 +16,26 @@ } }); } + +/** + * 鏌ヨ闂ㄧ淇℃伅 + * @return {Promise<axios.AxiosResponse<any>> | *} + */ +export const searchDoorInfoApi = ()=>{ + return axios({ + method: "GET", + url: "/CarCameraInf/getCarCameraInf", + }); +} + +export const searchDoorHistoryApi = (carCameraId, pageCurr, pageSize)=>{ + return axios({ + method: "GET", + url: "/CarCameraHis/getCarCameraHis", + params: { + carCameraId, + pageCurr, + pageSize, + } + }); +} diff --git a/src/views/accessControl/js/doorInfoHistoryModule.js b/src/views/accessControl/js/doorInfoHistoryModule.js new file mode 100644 index 0000000..13ca22c --- /dev/null +++ b/src/views/accessControl/js/doorInfoHistoryModule.js @@ -0,0 +1,89 @@ +import {searchDoorHistoryApi} from "@/views/accessControl/js/api"; +import {ref} from "vue"; +import door from "@/assets/js/const/door"; +import getLabelByKey from "@/assets/js/tools/getLabelByKey"; +import exportExcelUtil from "@/assets/js/tools/exportExcelUtil"; +import { ElMessage } from 'element-plus'; + +const doorInfoHistoryModule = (id)=>{ + const doorId = ref(id); + const headers = {carcameraName:"闂ㄧ鍚嶇О", recordTime: "寮�闂ㄦ椂闂�", state: "鐘舵�佸彉鎹�"}; + const lockStatusList = door.lockStatus; + const doorHistoryData = ref([]); + const page = ref({ + pageCurr: 1, + pageSize: 10, + total: 0 + }); + + /** + * 鏌ヨ闂ㄧ寮�闂ㄥ巻鍙茶褰� + * @return {Promise<void>} + */ + const searchDoorHistory = async (isExportFile, isAll)=>{ + const pageValue = page.value; + // 鍒ゆ柇鏄惁瀵煎嚭鍏ㄩ儴 === 涓嶈兘鍒犻櫎锛岄槻姝sExPortFile={} + isExportFile = isExportFile === true; + isAll = isAll === true; + try{ + const curr = isExportFile && isAll?1:pageValue.pageCurr; + const size = isExportFile && isAll?pageValue.total:pageValue.pageSize; + const res = await searchDoorHistoryApi(doorId.value, curr, size); + let list = []; + let pageCurr = 1; + let total = 0; + let rs = res.data; + if(rs.code === 1 && rs.data) { + let data2 = rs.data2; + list = data2.list.map(item=>{ + let lastState = getLabelByKey(item.lastStatus, lockStatusList, "鏈煡"); + let state = getLabelByKey(item.status, lockStatusList, "鏈煡"); + item.carcameraName = item.cameraInf.carcameraName; + item.state = "浠�"+lastState+"鍙樻洿涓�"+state; + return item; + }); + pageCurr = data2.pageNum; + total = data2.total; + }else { + pageCurr = 0; + total = 0; + } + if(isExportFile) { + exportExcelUtil( + headers, + list, + "闂ㄧ鍘嗗彶璁板綍-"+new Date().format("yyyy-MM-dd hh:mm:ss") + ); + }else { + page.value.pageCurr = pageCurr; + page.value.total = total; + doorHistoryData.value = list; + } + }catch (e) { + page.value.pageCurr = 0; + page.value.total = 0; + } + } + + const exportFile = (isAll)=>{ + isAll = isAll === true; + if(page.value.total === 0) { + ElMessage({ + message: '鏆傛棤鏁版嵁锛屾棤娉曞鍑�', + type: 'warning', + }) + return; + } + searchDoorHistory(true, isAll); + } + + return { + doorId, + page, + doorHistoryData, + searchDoorHistory, + exportFile + } +} + +export default doorInfoHistoryModule; diff --git a/src/views/accessControl/js/doorInfoModule.js b/src/views/accessControl/js/doorInfoModule.js index a62ef48..a160380 100644 --- a/src/views/accessControl/js/doorInfoModule.js +++ b/src/views/accessControl/js/doorInfoModule.js @@ -1,57 +1,63 @@ import createWs from "@/assets/js/tools/websocket/createWs"; -import {onMounted, reactive} from "vue"; +import {onMounted, ref} from "vue"; import door from "@/assets/js/const/door"; import getLabelByKey from "@/assets/js/tools/getLabelByKey"; -import {changeDoorState} from "@/views/accessControl/js/api"; +import {changeDoorState, searchDoorInfoApi} from "@/views/accessControl/js/api"; import {ElLoading, ElMessage} from "element-plus"; const lockStatusList = door.lockStatus; const doorInfoModule = ()=>{ const { SOCKET - } = createWs("carCameraSocket"); + } = createWs("carCameraRtSocket"); - const doorInfos = reactive([ + const doorInfos = ref([ { + carcameraId: 8001, + carcameraName: "鏅鸿兘瀹為獙瀹�", ip: "192.168.0.18", - passWord: "a1234567.", + num: 1, + password: "a1234567.", port: 8000, - userName: "admin", status: 0, - name: "鏅鸿兘瀹為獙瀹�", - statusText: "鏈煡" - }, - { - ip: "192.168.0.19", - passWord: "a1234567.", - port: 8000, - userName: "admin", - status: 0, - name: "PCR瀹為獙瀹�", - statusText: "鏈煡" - }, - { - ip: "192.168.0.44", - passWord: "a1234567.", - port: 8000, - userName: "admin", - status: 0, - name: "瑗胯棌瀹夌惇", - statusText: "鏈煡" - }, + statusText: "姝e父鍏�", + userName: "admin" + } ]); + + const searchDoorInfo = async ()=>{ + try{ + const res = await searchDoorInfoApi(); + const rs = res.data; + if(rs.code === 1 && rs.data) { + doorInfos.value = rs.data2.map(item=>{ + item.status = -1; + item.statusText = "鏈煡"; + return item; + }); + } + }catch (e) { + console.log(e); + } + } const handleOpen = ()=>{ - SOCKET.value.send(JSON.stringify(doorInfos)); + SOCKET.value.send(JSON.stringify(doorInfos.value)); } const handleMessage = (res)=>{ let rs = JSON.parse(res.data); - let data = rs.data; - doorInfos.map(item=>{ - let doorInfo = data[item.ip]; - item.status = doorInfo.data2.lockStatus; - item.statusText = getLabelByKey(doorInfo.data2.lockStatus, lockStatusList, "鏈煡"); - }); + if(rs.code ===1 && rs.data) { + let data = rs.data2; + doorInfos.value.map(item=>{ + for(let i=0; i<data.length; i++) { + if(item.carcameraId === data[i].carcameraId) { + const lockStatus = data[i].lockStatus; + item.status = lockStatus; + item.statusText = getLabelByKey(lockStatus, lockStatusList, "鏈煡"); + } + } + }); + } } /** * 寮�鍚棬绂� @@ -119,6 +125,8 @@ } onMounted(()=>{ + searchDoorInfo(); + SOCKET.value.addEventListener("open", handleOpen, false); SOCKET.value.addEventListener("message", handleMessage, false); }); diff --git a/src/views/home/js/homeInfoModule.js b/src/views/home/js/homeInfoModule.js index 03a5534..ece87fc 100644 --- a/src/views/home/js/homeInfoModule.js +++ b/src/views/home/js/homeInfoModule.js @@ -33,6 +33,7 @@ temp: 32, hum: 7, diffPre: 1, + noInfo: true, pos: { visible: true, placement: "left", @@ -51,6 +52,7 @@ temp: 32, hum: 7, diffPre: 1, + noInfo: true, pos: { visible: true, placement: "top", @@ -69,6 +71,7 @@ temp: 32, hum: 7, diffPre: 1, + noInfo: true, pos: { visible: true, placement: "left", @@ -87,6 +90,7 @@ temp: 32, hum: 7, diffPre: 1, + noInfo: true, pos: { visible: true, placement: "top", @@ -105,6 +109,7 @@ temp: 32, hum: 7, diffPre: 1, + noInfo: true, pos: { visible: true, placement: "top", @@ -123,6 +128,7 @@ temp: 32, hum: 7, diffPre: 1, + noInfo: true, pos: { visible: true, placement: "top", @@ -141,6 +147,7 @@ temp: 32, hum: 7, diffPre: 1, + noInfo: true, pos: { visible: true, placement: "top", @@ -159,6 +166,7 @@ temp: 32, hum: 7, diffPre: 1, + noInfo: true, pos: { visible: true, placement: "top", @@ -177,6 +185,7 @@ temp: 0, hum: 0, diffPre: 0, + noInfo: true, pos: { visible: true, placement: "top", @@ -195,6 +204,7 @@ temp: 0, hum: 0, diffPre: 0, + noInfo: true, pos: { visible: true, placement: "top", @@ -213,6 +223,7 @@ temp: 0, hum: 0, diffPre: 0, + noInfo: true, pos: { visible: true, placement: "top", @@ -231,6 +242,7 @@ temp: 0, hum: 0, diffPre: 0, + noInfo: true, pos: { visible: true, placement: "top", @@ -249,6 +261,7 @@ temp: 32, hum: 7, diffPre: 1, + noInfo: true, pos: { visible: true, placement: "left", @@ -267,6 +280,7 @@ temp: 32, hum: 7, diffPre: 1, + noInfo: true, pos: { visible: true, placement: "left", diff --git a/vite.config.js b/vite.config.js index 1af06e1..cda1bda 100644 --- a/vite.config.js +++ b/vite.config.js @@ -17,7 +17,7 @@ }, plugins: [ vue(), - WindiCSS(), + WindiCSS() ], server: { port: 8080, -- Gitblit v1.9.1