diff --git a/package-lock.json b/package-lock.json index 2005b6b..370b29c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -24,12 +24,15 @@ "@vue/cli-plugin-router": "~5.0.0", "@vue/cli-plugin-vuex": "~5.0.0", "@vue/cli-service": "~5.0.0", + "autoprefixer": "^10.4.24", "less": "^4.2.2", "less-loader": "^12.2.0", + "postcss": "^8.5.6", "postcss-preset-env": "^10.1.5", "postcss-px-to-viewport": "^1.1.1", "postcss-px-viewport": "^0.0.4", - "postcss-viewport-units": "^0.1.6" + "postcss-viewport-units": "^0.1.6", + "tailwindcss": "^3.4.17" } }, "node_modules/@achrinza/node-ipc": { @@ -47,6 +50,19 @@ "node": "8 || 9 || 10 || 11 || 12 || 13 || 14 || 15 || 16 || 17 || 18 || 19 || 20 || 21 || 22" } }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmmirror.com/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@ampproject/remapping": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", @@ -4582,6 +4598,13 @@ ], "license": "MIT" }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmmirror.com/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "dev": true, + "license": "MIT" + }, "node_modules/array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", @@ -4629,9 +4652,9 @@ } }, "node_modules/autoprefixer": { - "version": "10.4.21", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.21.tgz", - "integrity": "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==", + "version": "10.4.24", + "resolved": "https://registry.npmmirror.com/autoprefixer/-/autoprefixer-10.4.24.tgz", + "integrity": "sha512-uHZg7N9ULTVbutaIsDRoUkoS8/h3bdsmVJYZ5l3wv8Cp/6UIIoRDm90hZ+BwxUj/hGBEzLxdHNSKuFpn8WOyZw==", "dev": true, "funding": [ { @@ -4649,10 +4672,9 @@ ], "license": "MIT", "dependencies": { - "browserslist": "^4.24.4", - "caniuse-lite": "^1.0.30001702", - "fraction.js": "^4.3.7", - "normalize-range": "^0.1.2", + "browserslist": "^4.28.1", + "caniuse-lite": "^1.0.30001766", + "fraction.js": "^5.3.4", "picocolors": "^1.1.1", "postcss-value-parser": "^4.2.0" }, @@ -4792,6 +4814,16 @@ ], "license": "MIT" }, + "node_modules/baseline-browser-mapping": { + "version": "2.9.19", + "resolved": "https://registry.npmmirror.com/baseline-browser-mapping/-/baseline-browser-mapping-2.9.19.tgz", + "integrity": "sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.js" + } + }, "node_modules/batch": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", @@ -4935,9 +4967,9 @@ } }, "node_modules/browserslist": { - "version": "4.24.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz", - "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", + "version": "4.28.1", + "resolved": "https://registry.npmmirror.com/browserslist/-/browserslist-4.28.1.tgz", + "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", "dev": true, "funding": [ { @@ -4955,10 +4987,11 @@ ], "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001688", - "electron-to-chromium": "^1.5.73", - "node-releases": "^2.0.19", - "update-browserslist-db": "^1.1.1" + "baseline-browser-mapping": "^2.9.0", + "caniuse-lite": "^1.0.30001759", + "electron-to-chromium": "^1.5.263", + "node-releases": "^2.0.27", + "update-browserslist-db": "^1.2.0" }, "bin": { "browserslist": "cli.js" @@ -5089,6 +5122,16 @@ "node": ">=6" } }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, "node_modules/caniuse-api": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", @@ -5103,9 +5146,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001707", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001707.tgz", - "integrity": "sha512-3qtRjw/HQSMlDWf+X79N206fepf4SOOU6SQLMaq/0KkZLmSjPxAkBOQQ+FxbHKfHmYLZFfdWsO3KA90ceHPSnw==", + "version": "1.0.30001767", + "resolved": "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001767.tgz", + "integrity": "sha512-34+zUAMhSH+r+9eKmYG+k2Rpt8XttfE4yXAjoZvkAPs15xcYQhyBYdalJ65BzivAvGRMViEjy6oKr/S91loekQ==", "dev": true, "funding": [ { @@ -6385,6 +6428,13 @@ "dev": true, "license": "MIT" }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmmirror.com/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "dev": true, + "license": "Apache-2.0" + }, "node_modules/dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", @@ -6398,6 +6448,13 @@ "node": ">=8" } }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmmirror.com/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true, + "license": "MIT" + }, "node_modules/dns-packet": { "version": "5.6.1", "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", @@ -6573,9 +6630,9 @@ "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.5.129", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.129.tgz", - "integrity": "sha512-JlXUemX4s0+9f8mLqib/bHH8gOHf5elKS6KeWG3sk3xozb/JTq/RLXIv8OKUWiK4Ah00Wm88EFj5PYkFr4RUPA==", + "version": "1.5.283", + "resolved": "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.5.283.tgz", + "integrity": "sha512-3vifjt1HgrGW/h76UEeny+adYApveS9dH2h3p57JYzBSXJIKUJAvtmIytDKjcSCt9xHfrNCFJ7gts6vkhuq++w==", "dev": true, "license": "ISC" }, @@ -7197,16 +7254,16 @@ } }, "node_modules/fraction.js": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", - "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "version": "5.3.4", + "resolved": "https://registry.npmmirror.com/fraction.js/-/fraction.js-5.3.4.tgz", + "integrity": "sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==", "dev": true, "license": "MIT", "engines": { "node": "*" }, "funding": { - "type": "patreon", + "type": "github", "url": "https://github.com/sponsors/rawify" } }, @@ -8198,6 +8255,16 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, + "node_modules/jiti": { + "version": "1.21.7", + "resolved": "https://registry.npmmirror.com/jiti/-/jiti-1.21.7.tgz", + "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "bin/jiti.js" + } + }, "node_modules/joi": { "version": "17.13.3", "resolved": "https://registry.npmjs.org/joi/-/joi-17.13.3.tgz", @@ -9226,9 +9293,9 @@ } }, "node_modules/node-releases": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", - "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "version": "2.0.27", + "resolved": "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.27.tgz", + "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", "dev": true, "license": "MIT" }, @@ -9265,16 +9332,6 @@ "node": ">=0.10.0" } }, - "node_modules/normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/normalize-url": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", @@ -9330,6 +9387,16 @@ "node": ">=0.10.0" } }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, "node_modules/object-inspect": { "version": "1.13.4", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", @@ -9780,6 +9847,16 @@ "@vue/devtools-kit": "^7.7.2" } }, + "node_modules/pirates": { + "version": "4.0.7", + "resolved": "https://registry.npmmirror.com/pirates/-/pirates-4.0.7.tgz", + "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, "node_modules/pkg-dir": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", @@ -9808,9 +9885,9 @@ } }, "node_modules/postcss": { - "version": "8.5.3", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz", - "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==", + "version": "8.5.6", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", "funding": [ { "type": "opencollective", @@ -9827,7 +9904,7 @@ ], "license": "MIT", "dependencies": { - "nanoid": "^3.3.8", + "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" }, @@ -10387,6 +10464,50 @@ "postcss": "^8.4" } }, + "node_modules/postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmmirror.com/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/postcss-js/-/postcss-js-4.1.0.tgz", + "integrity": "sha512-oIAOTqgIo7q2EOwbhb8UalYePMvYoIeRY2YKntdpFQXNosSu3vLrniGgmH9OKs/qAkfoj5oB3le/7mINW1LCfw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, "node_modules/postcss-lab-function": { "version": "7.0.8", "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-7.0.8.tgz", @@ -10417,6 +10538,71 @@ "postcss": "^8.4" } }, + "node_modules/postcss-load-config": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/postcss-load-config/-/postcss-load-config-4.0.2.tgz", + "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "lilconfig": "^3.0.0", + "yaml": "^2.3.4" + }, + "engines": { + "node": ">= 14" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-load-config/node_modules/lilconfig": { + "version": "3.1.3", + "resolved": "https://registry.npmmirror.com/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/postcss-load-config/node_modules/yaml": { + "version": "2.8.2", + "resolved": "https://registry.npmmirror.com/yaml/-/yaml-2.8.2.tgz", + "integrity": "sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==", + "dev": true, + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + }, + "funding": { + "url": "https://github.com/sponsors/eemeli" + } + }, "node_modules/postcss-loader": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.2.1.tgz", @@ -10674,6 +10860,32 @@ "postcss": "^8.1.0" } }, + "node_modules/postcss-nested": { + "version": "6.2.0", + "resolved": "https://registry.npmmirror.com/postcss-nested/-/postcss-nested-6.2.0.tgz", + "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.1.1" + }, + "engines": { + "node": ">=12.0" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, "node_modules/postcss-nesting": { "version": "13.0.1", "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-13.0.1.tgz", @@ -11788,6 +12000,26 @@ "node": ">= 0.8" } }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/read-cache/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/read-pkg": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", @@ -12776,6 +13008,39 @@ "postcss": "^8.2.15" } }, + "node_modules/sucrase": { + "version": "3.35.1", + "resolved": "https://registry.npmmirror.com/sucrase/-/sucrase-3.35.1.tgz", + "integrity": "sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "tinyglobby": "^0.2.11", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/sucrase/node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmmirror.com/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, "node_modules/superjson": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/superjson/-/superjson-2.2.2.tgz", @@ -12852,6 +13117,57 @@ "node": ">= 10" } }, + "node_modules/tailwindcss": { + "version": "3.4.17", + "resolved": "https://registry.npmmirror.com/tailwindcss/-/tailwindcss-3.4.17.tgz", + "integrity": "sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==", + "dev": true, + "license": "MIT", + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.6.0", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.2", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.21.6", + "lilconfig": "^3.1.3", + "micromatch": "^4.0.8", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.1.1", + "postcss": "^8.4.47", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.2", + "postcss-nested": "^6.2.0", + "postcss-selector-parser": "^6.1.2", + "resolve": "^1.22.8", + "sucrase": "^3.35.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tailwindcss/node_modules/lilconfig": { + "version": "3.1.3", + "resolved": "https://registry.npmmirror.com/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, "node_modules/tapable": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", @@ -13068,6 +13384,54 @@ "dev": true, "license": "MIT" }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmmirror.com/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmmirror.com/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -13108,6 +13472,13 @@ "dev": true, "license": "MIT" }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmmirror.com/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "dev": true, + "license": "Apache-2.0" + }, "node_modules/tslib": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", @@ -13211,9 +13582,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", - "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", + "version": "1.2.3", + "resolved": "https://registry.npmmirror.com/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", "dev": true, "funding": [ { diff --git a/package.json b/package.json index 17bb297..de64c92 100644 --- a/package.json +++ b/package.json @@ -23,12 +23,15 @@ "@vue/cli-plugin-router": "~5.0.0", "@vue/cli-plugin-vuex": "~5.0.0", "@vue/cli-service": "~5.0.0", + "autoprefixer": "^10.4.24", "less": "^4.2.2", "less-loader": "^12.2.0", + "postcss": "^8.5.6", "postcss-preset-env": "^10.1.5", "postcss-px-to-viewport": "^1.1.1", "postcss-px-viewport": "^0.0.4", - "postcss-viewport-units": "^0.1.6" + "postcss-viewport-units": "^0.1.6", + "tailwindcss": "^3.4.17" }, "browserslist": [ "> 1%", diff --git a/postcss.config.js b/postcss.config.js deleted file mode 100644 index e994077..0000000 --- a/postcss.config.js +++ /dev/null @@ -1,13 +0,0 @@ -module.exports = { - plugins: { - 'postcss-px-to-viewport': { - viewportWidth: 1600, // 视窗的宽度,对应设计稿宽度 - viewportHeight: 900, // 视窗的高度,对应设计稿高度 - unitPrecision: 3, // 指定 px 转换为视窗单位值的小数位数 - viewportUnit: 'vw', // 指定需要转换成的视窗单位,vw 或者 vh - selectorBlackList: ['.ignore', '.hairlines'], // 指定不需要转换的类 - minPixelValue: 1, // 小于或等于 1 px 不转换为视窗单位 - mediaQuery: false // 允许在媒体查询中转换 px - } - } -}; \ No newline at end of file diff --git a/src/utils/pythonBridge.js b/src/utils/pythonBridge.js index 4df67f7..61cfa99 100644 --- a/src/utils/pythonBridge.js +++ b/src/utils/pythonBridge.js @@ -5,154 +5,154 @@ const bridge = ref(null); // 统一安全调用,确保 Qt 响应有回调可执行 const callBridge = (method, ...args) => { - if (!bridge.value || typeof bridge.value[method] !== 'function') return; - const last = args[args.length - 1]; - const hasCallback = typeof last === 'function'; - const callback = hasCallback ? args.pop() : () => { }; - bridge.value[method](...args, callback); + if (!bridge.value || typeof bridge.value[method] !== 'function') return; + const last = args[args.length - 1]; + const hasCallback = typeof last === 'function'; + const callback = hasCallback ? args.pop() : () => { }; + bridge.value[method](...args, callback); }; // 防御:若 Qt 返回了未知 id,忽略以免 execCallbacks 报错 const patchQWebChannel = () => { - if (!window.QWebChannel || QWebChannel.__patchedIgnoreMissing) return; - const originalHandleResponse = QWebChannel.prototype.handleResponse; - QWebChannel.__patchedIgnoreMissing = true; - QWebChannel.prototype.handleResponse = function (message) { - const cb = this.execCallbacks && this.execCallbacks[message.id]; - if (message.id && typeof cb !== 'function') { - console.warn('忽略未知的 WebChannel 响应', message); - return; - } - return originalHandleResponse.call(this, message); - }; + if (!window.QWebChannel || QWebChannel.__patchedIgnoreMissing) return; + const originalHandleResponse = QWebChannel.prototype.handleResponse; + QWebChannel.__patchedIgnoreMissing = true; + QWebChannel.prototype.handleResponse = function (message) { + const cb = this.execCallbacks && this.execCallbacks[message.id]; + if (message.id && typeof cb !== 'function') { + console.warn('忽略未知的 WebChannel 响应', message); + return; + } + return originalHandleResponse.call(this, message); + }; }; // 初始化 QWebChannel const initBridge = () => { - if (/localhost/.test(window.location.href)) return; - patchQWebChannel(); - new QWebChannel(qt.webChannelTransport, (channel) => { - // 兜底:任何缺失的回调都返回空函数,避免 execCallbacks 报错 - channel.execCallbacks = new Proxy(channel.execCallbacks || {}, { - get(target, prop) { - const val = target[prop]; - if (typeof val === 'function') return val; - // 返回空函数,确保 handleResponse 可调用 - return () => { }; - }, - set(target, prop, value) { - target[prop] = value; - return true; - }, - }); + if (/localhost/.test(window.location.href)) return; + patchQWebChannel(); + new QWebChannel(qt.webChannelTransport, (channel) => { + // 兜底:任何缺失的回调都返回空函数,避免 execCallbacks 报错 + channel.execCallbacks = new Proxy(channel.execCallbacks || {}, { + get(target, prop) { + const val = target[prop]; + if (typeof val === 'function') return val; + // 返回空函数,确保 handleResponse 可调用 + return () => { }; + }, + set(target, prop, value) { + target[prop] = value; + return true; + }, + }); - bridge.value = channel.objects.bridge; - }); + bridge.value = channel.objects.bridge; + }); }; export function usePythonBridge() { - // 调用 Python 方法 - const fetchDataConfig = (data) => { - return new Promise((resolve) => { - if (!bridge.value) return resolve(null); - callBridge('fetchDataConfig', data, (result) => { - resolve(result); - }); - }); - }; + // 调用 Python 方法 + const fetchDataConfig = (data) => { + return new Promise((resolve) => { + if (!bridge.value) return resolve(null); + callBridge('fetchDataConfig', data, (result) => { + resolve(result); + }); + }); + }; - // 查询获取主播的数据 - const fetchDataCount = () => { - return new Promise((resolve) => { - if (!bridge.value) return resolve(null); - callBridge('fetchDataCount', (result) => { - resolve(result); - }); - }); - }; + // 查询获取主播的数据 + const fetchDataCount = () => { + return new Promise((resolve) => { + if (!bridge.value) return resolve(null); + callBridge('fetchDataCount', (result) => { + resolve(result); + }); + }); + }; - // 打开 tk 后台 - const loginTikTok = () => { - callBridge('loginTikTok'); - }; + // 打开 tk 后台 + const loginTikTok = () => { + callBridge('loginTikTok'); + }; - // 登录 tk 后台 - const loginBackStage = (data) => { - if (data.index == 0) { - callBridge('loginBackStage', JSON.stringify(data)); - } else if (data.index == 1) { - callBridge('loginBackStageCopy', JSON.stringify(data)); - } - }; + // 登录 tk 后台 + const loginBackStage = (data) => { + if (data.index == 0) { + callBridge('loginBackStage', JSON.stringify(data)); + } else if (data.index == 1) { + callBridge('loginBackStageCopy', JSON.stringify(data)); + } + }; - // 跳转到主播页面 - const givePyAnchorId = (id) => { - callBridge('givePyAnchorId', id); - }; + // 跳转到主播页面 + const givePyAnchorId = (id) => { + callBridge('givePyAnchorId', id); + }; - // 查询登录状态 - const backStageloginStatus = () => { - return new Promise((resolve) => { - if (!bridge.value) return resolve(null); - callBridge('backStageloginStatus', (result) => { - resolve(result); - }); - }); - }; + // 查询登录状态 + const backStageloginStatus = () => { + return new Promise((resolve) => { + if (!bridge.value) return resolve(null); + callBridge('backStageloginStatus', (result) => { + resolve(result); + }); + }); + }; - // 查询登录状态(副账号) - const backStageloginStatusCopy = () => { - return new Promise((resolve) => { - if (!bridge.value) return resolve(null); - callBridge('backStageloginStatusCopy', (result) => { - resolve(result); - }); - }); - }; + // 查询登录状态(副账号) + const backStageloginStatusCopy = () => { + return new Promise((resolve) => { + if (!bridge.value) return resolve(null); + callBridge('backStageloginStatusCopy', (result) => { + resolve(result); + }); + }); + }; - // 导出表格 - const exportToExcel = (data) => { - callBridge('exportToExcel', JSON.stringify(data)); - }; + // 导出表格 + const exportToExcel = (data) => { + callBridge('exportToExcel', JSON.stringify(data)); + }; - const stopScript = () => { - callBridge('stopScript'); - }; + const stopScript = () => { + callBridge('stopScript'); + }; - // 获取版本号 - const getVersion = () => { - return new Promise((resolve) => { - if (!bridge.value) return resolve(null); - callBridge('currentVersion', (result) => { - resolve(result); - }); - }); - }; + // 获取版本号 + const getVersion = () => { + return new Promise((resolve) => { + if (!bridge.value) return resolve(null); + callBridge('currentVersion', (result) => { + resolve(result); + }); + }); + }; - // 查询TK登录状态 - const getTkLoginStatus = () => { - return new Promise((resolve) => { - if (!bridge.value) return resolve(false); - callBridge('getTkLoginStatus', (result) => { - resolve(result); - }); - }); - }; + // 查询TK登录状态 + const getTkLoginStatus = () => { + return new Promise((resolve) => { + if (!bridge.value) return resolve(false); + callBridge('getTkLoginStatus', (result) => { + resolve(result); + }); + }); + }; - // 在组件挂载时初始化桥接 - onMounted(initBridge); + // 在组件挂载时初始化桥接 + onMounted(initBridge); - return { - fetchDataConfig, - fetchDataCount, - loginBackStage, - loginTikTok, - givePyAnchorId, - backStageloginStatus, - backStageloginStatusCopy, - exportToExcel, - stopScript, - getVersion, - getTkLoginStatus, - }; + return { + fetchDataConfig, + fetchDataCount, + loginBackStage, + loginTikTok, + givePyAnchorId, + backStageloginStatus, + backStageloginStatusCopy, + exportToExcel, + stopScript, + getVersion, + getTkLoginStatus, + }; } diff --git a/src/utils/storage.js b/src/utils/storage.js index 3ff888c..c2d7710 100644 --- a/src/utils/storage.js +++ b/src/utils/storage.js @@ -4,56 +4,56 @@ import { usePythonBridge } from '@/utils/pythonBridge' export function setToken(token) { - localStorage.setItem('token', token); + localStorage.setItem('token', token); } export function getToken() { - return localStorage.getItem('token'); + return localStorage.getItem('token'); } export function removeToken() { - localStorage.removeItem('token'); + localStorage.removeItem('token'); } export function setUser(user) { - localStorage.setItem('user', JSON.stringify(user)); + localStorage.setItem('user', JSON.stringify(user)); } export function getUser() { - return JSON.parse(localStorage.getItem('user')); + return JSON.parse(localStorage.getItem('user')); } export function setNumData(numData) { - localStorage.setItem('num', JSON.stringify(numData)); + localStorage.setItem('num', JSON.stringify(numData)); } export function getNumData() { - return JSON.parse(localStorage.getItem('num')); + return JSON.parse(localStorage.getItem('num')); } // 导出一个函数,用于设置用户密码 export function setUserPass(userdata) { - localStorage.setItem('userPass', JSON.stringify(userdata)); + localStorage.setItem('userPass', JSON.stringify(userdata)); } // 导出一个函数,用于获取用户密码 export function getUserPass() { - return JSON.parse(localStorage.getItem('userPass')); + return JSON.parse(localStorage.getItem('userPass')); } // 用于设置tk账户密码 export function setTkUser(userdata) { - localStorage.setItem('tkuser', JSON.stringify(userdata)); + localStorage.setItem('tkuser', JSON.stringify(userdata)); } // 用于获取tk账户密码 export function getTkUser() { - return JSON.parse(localStorage.getItem('tkuser')); + return JSON.parse(localStorage.getItem('tkuser')); } // 用于列表筛选条件 export function setSerch(data) { - localStorage.setItem('Serch', JSON.stringify(data)); + localStorage.setItem('Serch', JSON.stringify(data)); } // 用于获取列表筛选条件 export function getSerch() { - return JSON.parse(localStorage.getItem('Serch')); + return JSON.parse(localStorage.getItem('Serch')); } \ No newline at end of file diff --git a/src/views/hosts/workbenches1.vue b/src/views/hosts/workbenches1.vue deleted file mode 100644 index 57efba5..0000000 --- a/src/views/hosts/workbenches1.vue +++ /dev/null @@ -1,872 +0,0 @@ - - - - - \ No newline at end of file