fix:添加系统更新提醒

This commit is contained in:
lz-ui 2025-09-15 16:28:06 +08:00
parent 3986058530
commit 3468347049
8 changed files with 413 additions and 15 deletions

View File

@ -8,6 +8,9 @@
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
<link rel="icon" href="/favicon.ico">
<title>体彩管理系统</title>
<script>
window.__BUILD_TIME__ = '<%= buildTime %>'; // 将时间注入全局变量
</script>
<!--[if lt IE 11]><script>window.location.href='/html/ie.html';</script><![endif]-->
<style>
html,

View File

@ -21,6 +21,7 @@
"@vueuse/core": "13.3.0",
"axios": "1.9.0",
"clipboard": "2.0.11",
"dayjs": "^1.11.18",
"echarts": "5.6.0",
"element-plus": "2.10.7",
"file-saver": "2.0.5",
@ -44,6 +45,7 @@
"unplugin-vue-setup-extend-plus": "1.0.1",
"vite": "6.3.5",
"vite-plugin-compression": "0.5.1",
"vite-plugin-html": "^3.2.2",
"vite-plugin-svg-icons": "2.0.1"
},
"overrides": {

277
pnpm-lock.yaml generated
View File

@ -23,6 +23,9 @@ importers:
clipboard:
specifier: 2.0.11
version: 2.0.11
dayjs:
specifier: ^1.11.18
version: 1.11.18
echarts:
specifier: 5.6.0
version: 5.6.0
@ -56,6 +59,9 @@ importers:
splitpanes:
specifier: 4.0.4
version: 4.0.4(vue@3.5.16)
vite-plugin-html:
specifier: ^3.2.2
version: 3.2.2(vite@6.3.5(@types/node@24.3.1)(sass-embedded@1.89.1)(terser@5.44.0))
vue:
specifier: 3.5.16
version: 3.5.16
@ -71,7 +77,7 @@ importers:
devDependencies:
'@vitejs/plugin-vue':
specifier: 5.2.4
version: 5.2.4(vite@6.3.5(@types/node@24.3.1)(sass-embedded@1.89.1))(vue@3.5.16)
version: 5.2.4(vite@6.3.5(@types/node@24.3.1)(sass-embedded@1.89.1)(terser@5.44.0))(vue@3.5.16)
sass-embedded:
specifier: 1.89.1
version: 1.89.1
@ -83,13 +89,13 @@ importers:
version: 1.0.1
vite:
specifier: 6.3.5
version: 6.3.5(@types/node@24.3.1)(sass-embedded@1.89.1)
version: 6.3.5(@types/node@24.3.1)(sass-embedded@1.89.1)(terser@5.44.0)
vite-plugin-compression:
specifier: 0.5.1
version: 0.5.1(vite@6.3.5(@types/node@24.3.1)(sass-embedded@1.89.1))
version: 0.5.1(vite@6.3.5(@types/node@24.3.1)(sass-embedded@1.89.1)(terser@5.44.0))
vite-plugin-svg-icons:
specifier: 2.0.1
version: 2.0.1(vite@6.3.5(@types/node@24.3.1)(sass-embedded@1.89.1))
version: 2.0.1(vite@6.3.5(@types/node@24.3.1)(sass-embedded@1.89.1)(terser@5.44.0))
packages:
@ -294,9 +300,22 @@ packages:
resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
engines: {node: '>=12'}
'@jridgewell/gen-mapping@0.3.13':
resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==}
'@jridgewell/resolve-uri@3.1.2':
resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
engines: {node: '>=6.0.0'}
'@jridgewell/source-map@0.3.11':
resolution: {integrity: sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==}
'@jridgewell/sourcemap-codec@1.5.5':
resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==}
'@jridgewell/trace-mapping@0.3.31':
resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==}
'@nodelib/fs.scandir@2.1.5':
resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
engines: {node: '>= 8'}
@ -316,6 +335,10 @@ packages:
resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
engines: {node: '>=14'}
'@rollup/pluginutils@4.2.1':
resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==}
engines: {node: '>= 8.0.0'}
'@rollup/pluginutils@5.3.0':
resolution: {integrity: sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==}
engines: {node: '>=14.0.0'}
@ -616,6 +639,9 @@ packages:
async-validator@4.2.5:
resolution: {integrity: sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==}
async@3.2.6:
resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==}
asynckit@0.4.0:
resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
@ -664,6 +690,9 @@ packages:
buffer-builder@0.2.0:
resolution: {integrity: sha512-7VPMEPuYznPSoR21NE1zvd2Xna6c/CloiZCfcMXR1Jny6PjX0N4Nsa38zcBFo/FMK+BlA+FLKbJCQ0i2yxp+Xg==}
buffer-from@1.1.2:
resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
cache-base@1.0.1:
resolution: {integrity: sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==}
engines: {node: '>=0.10.0'}
@ -680,6 +709,9 @@ packages:
resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==}
engines: {node: '>= 0.4'}
camel-case@4.1.2:
resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==}
chalk@1.1.3:
resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==}
engines: {node: '>=0.10.0'}
@ -692,6 +724,10 @@ packages:
resolution: {integrity: sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==}
engines: {node: '>=0.10.0'}
clean-css@5.3.3:
resolution: {integrity: sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==}
engines: {node: '>= 10.0'}
clipboard@2.0.11:
resolution: {integrity: sha512-C+0bbOqkezLIsmWSvlsXS0Q0bmkugu7jcfMIACB+RDEntIzQIkdr148we28AfSloQLRdZlYL/QYyrq05j/3Faw==}
@ -710,6 +746,9 @@ packages:
color-name@1.1.4:
resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
colorette@2.0.20:
resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==}
colorjs.io@0.5.2:
resolution: {integrity: sha512-twmVoizEW7ylZSN32OgKdXRmo1qg+wT5/6C3xu5b9QsWzSFAhHLn2xd8ro0diCsKfCj1RdaTP/nrcW+vAoQPIw==}
@ -721,10 +760,17 @@ packages:
resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==}
engines: {node: '>=14'}
commander@2.20.3:
resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
commander@7.2.0:
resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==}
engines: {node: '>= 10'}
commander@8.3.0:
resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==}
engines: {node: '>= 12'}
component-emitter@1.3.1:
resolution: {integrity: sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==}
@ -737,6 +783,13 @@ packages:
config-chain@1.1.13:
resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==}
connect-history-api-fallback@1.6.0:
resolution: {integrity: sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==}
engines: {node: '>=0.8'}
consola@2.15.3:
resolution: {integrity: sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==}
copy-anything@3.0.5:
resolution: {integrity: sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==}
engines: {node: '>=12.13'}
@ -863,6 +916,17 @@ packages:
domutils@2.8.0:
resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==}
dot-case@3.0.4:
resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==}
dotenv-expand@8.0.3:
resolution: {integrity: sha512-SErOMvge0ZUyWd5B0NXMQlDkN+8r+HhVUsxgOO7IoPDOdDRD2JjExpN6y3KnFR66jsJMwSn1pqIivhU5rcJiNg==}
engines: {node: '>=12'}
dotenv@16.6.1:
resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==}
engines: {node: '>=12'}
dunder-proto@1.0.1:
resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==}
engines: {node: '>= 0.4'}
@ -878,6 +942,11 @@ packages:
engines: {node: '>=14'}
hasBin: true
ejs@3.1.10:
resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==}
engines: {node: '>=0.10.0'}
hasBin: true
element-plus@2.10.7:
resolution: {integrity: sha512-bL4yhepL8/0NEQA5+N2Q6ZVKLipIDkiQjK2mqtSmGh6CxJk1yaBMdG5HXfYkbk1htNcT3ULk9g23lzT323JGcA==}
peerDependencies:
@ -1003,6 +1072,9 @@ packages:
file-saver@2.0.5:
resolution: {integrity: sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==}
filelist@1.0.4:
resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==}
fill-range@4.0.0:
resolution: {integrity: sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==}
engines: {node: '>=0.10.0'}
@ -1159,6 +1231,11 @@ packages:
hookable@5.5.3:
resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==}
html-minifier-terser@6.1.0:
resolution: {integrity: sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==}
engines: {node: '>=12'}
hasBin: true
htmlparser2@3.10.1:
resolution: {integrity: sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==}
@ -1351,6 +1428,11 @@ packages:
jackspeak@3.4.3:
resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==}
jake@10.9.4:
resolution: {integrity: sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA==}
engines: {node: '>=10'}
hasBin: true
js-base64@2.6.4:
resolution: {integrity: sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==}
@ -1424,6 +1506,9 @@ packages:
lodash@4.17.21:
resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
lower-case@2.0.2:
resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==}
lru-cache@10.4.3:
resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
@ -1476,6 +1561,10 @@ packages:
resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
engines: {node: '>= 0.6'}
minimatch@5.1.6:
resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==}
engines: {node: '>=10'}
minimatch@9.0.1:
resolution: {integrity: sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==}
engines: {node: '>=16 || 14 >=14.17'}
@ -1516,6 +1605,12 @@ packages:
resolution: {integrity: sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==}
engines: {node: '>=0.10.0'}
no-case@3.0.4:
resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==}
node-html-parser@5.4.2:
resolution: {integrity: sha512-RaBPP3+51hPne/OolXxcz89iYvQvKOydaqoePpOgXcrOKZhjVIzmpKZz+Hd/RBO2/zN2q6CNJhQzucVz+u3Jyw==}
nopt@7.2.1:
resolution: {integrity: sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==}
engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
@ -1569,9 +1664,15 @@ packages:
package-json-from-dist@1.0.1:
resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==}
param-case@3.0.4:
resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==}
parchment@1.1.4:
resolution: {integrity: sha512-J5FBQt/pM2inLzg4hEWmzQx/8h8D0CiDxaG3vyp9rKrQRSDgBlhjdP5jQGgosEajXPSQouXGHOmVdgo7QmJuOg==}
pascal-case@3.1.2:
resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==}
pascalcase@0.1.1:
resolution: {integrity: sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==}
engines: {node: '>=0.10.0'}
@ -1699,6 +1800,10 @@ packages:
resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==}
engines: {node: '>= 0.4'}
relateurl@0.2.7:
resolution: {integrity: sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==}
engines: {node: '>= 0.10'}
repeat-element@1.1.4:
resolution: {integrity: sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==}
engines: {node: '>=0.10.0'}
@ -1933,6 +2038,9 @@ packages:
resolution: {integrity: sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==}
deprecated: See https://github.com/lydell/source-map-resolve#deprecated
source-map-support@0.5.21:
resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
source-map-url@0.4.1:
resolution: {integrity: sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==}
deprecated: See https://github.com/lydell/source-map-url#deprecated
@ -2052,6 +2160,11 @@ packages:
resolution: {integrity: sha512-GTt8rSKje5FilG+wEdfCkOcLL7LWqpMlr2c3LRuKt/YXxcJ52aGSbGBAdI4L3aaqfrBt6y711El53ItyH1NWzg==}
engines: {node: '>=16.0.0'}
terser@5.44.0:
resolution: {integrity: sha512-nIVck8DK+GM/0Frwd+nIhZ84pR/BX7rmXMfYwyg+Sri5oGVE99/E3KvXqpC2xHFxyqXyGHTKBSioxxplrO4I4w==}
engines: {node: '>=10'}
hasBin: true
tiny-emitter@2.1.0:
resolution: {integrity: sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==}
@ -2172,6 +2285,11 @@ packages:
peerDependencies:
vite: '>=2.0.0'
vite-plugin-html@3.2.2:
resolution: {integrity: sha512-vb9C9kcdzcIo/Oc3CLZVS03dL5pDlOFuhGlZYDCJ840BhWl/0nGeZWf3Qy7NlOayscY4Cm/QRgULCQkEZige5Q==}
peerDependencies:
vite: '>=2.0.0'
vite-plugin-svg-icons@2.0.1:
resolution: {integrity: sha512-6ktD+DhV6Rz3VtedYvBKKVA2eXF+sAQVaKkKLDSqGUfnhqXl3bj5PPkVTl3VexfTuZy66PmINi8Q6eFnVfRUmA==}
peerDependencies:
@ -2407,8 +2525,25 @@ snapshots:
wrap-ansi: 8.1.0
wrap-ansi-cjs: wrap-ansi@7.0.0
'@jridgewell/gen-mapping@0.3.13':
dependencies:
'@jridgewell/sourcemap-codec': 1.5.5
'@jridgewell/trace-mapping': 0.3.31
'@jridgewell/resolve-uri@3.1.2': {}
'@jridgewell/source-map@0.3.11':
dependencies:
'@jridgewell/gen-mapping': 0.3.13
'@jridgewell/trace-mapping': 0.3.31
'@jridgewell/sourcemap-codec@1.5.5': {}
'@jridgewell/trace-mapping@0.3.31':
dependencies:
'@jridgewell/resolve-uri': 3.1.2
'@jridgewell/sourcemap-codec': 1.5.5
'@nodelib/fs.scandir@2.1.5':
dependencies:
'@nodelib/fs.stat': 2.0.5
@ -2426,6 +2561,11 @@ snapshots:
'@pkgjs/parseargs@0.11.0':
optional: true
'@rollup/pluginutils@4.2.1':
dependencies:
estree-walker: 2.0.2
picomatch: 2.3.1
'@rollup/pluginutils@5.3.0(rollup@4.50.1)':
dependencies:
'@types/estree': 1.0.8
@ -2521,9 +2661,9 @@ snapshots:
'@types/web-bluetooth@0.0.21': {}
'@vitejs/plugin-vue@5.2.4(vite@6.3.5(@types/node@24.3.1)(sass-embedded@1.89.1))(vue@3.5.16)':
'@vitejs/plugin-vue@5.2.4(vite@6.3.5(@types/node@24.3.1)(sass-embedded@1.89.1)(terser@5.44.0))(vue@3.5.16)':
dependencies:
vite: 6.3.5(@types/node@24.3.1)(sass-embedded@1.89.1)
vite: 6.3.5(@types/node@24.3.1)(sass-embedded@1.89.1)(terser@5.44.0)
vue: 3.5.16
'@vue/compiler-core@3.5.16':
@ -2717,6 +2857,8 @@ snapshots:
async-validator@4.2.5: {}
async@3.2.6: {}
asynckit@0.4.0: {}
atob@2.1.2: {}
@ -2778,6 +2920,8 @@ snapshots:
buffer-builder@0.2.0: {}
buffer-from@1.1.2: {}
cache-base@1.0.1:
dependencies:
collection-visit: 1.0.0
@ -2807,6 +2951,11 @@ snapshots:
call-bind-apply-helpers: 1.0.2
get-intrinsic: 1.3.0
camel-case@4.1.2:
dependencies:
pascal-case: 3.1.2
tslib: 2.8.1
chalk@1.1.3:
dependencies:
ansi-styles: 2.2.1
@ -2827,6 +2976,10 @@ snapshots:
isobject: 3.0.1
static-extend: 0.1.2
clean-css@5.3.3:
dependencies:
source-map: 0.6.1
clipboard@2.0.11:
dependencies:
good-listener: 1.2.2
@ -2846,6 +2999,8 @@ snapshots:
color-name@1.1.4: {}
colorette@2.0.20: {}
colorjs.io@0.5.2: {}
combined-stream@1.0.8:
@ -2854,8 +3009,12 @@ snapshots:
commander@10.0.1: {}
commander@2.20.3: {}
commander@7.2.0: {}
commander@8.3.0: {}
component-emitter@1.3.1: {}
confbox@0.1.8: {}
@ -2867,6 +3026,10 @@ snapshots:
ini: 1.3.8
proto-list: 1.2.4
connect-history-api-fallback@1.6.0: {}
consola@2.15.3: {}
copy-anything@3.0.5:
dependencies:
is-what: 4.1.16
@ -3007,6 +3170,15 @@ snapshots:
domelementtype: 2.3.0
domhandler: 4.3.1
dot-case@3.0.4:
dependencies:
no-case: 3.0.4
tslib: 2.8.1
dotenv-expand@8.0.3: {}
dotenv@16.6.1: {}
dunder-proto@1.0.1:
dependencies:
call-bind-apply-helpers: 1.0.2
@ -3027,6 +3199,10 @@ snapshots:
minimatch: 9.0.1
semver: 7.7.2
ejs@3.1.10:
dependencies:
jake: 10.9.4
element-plus@2.10.7(vue@3.5.16):
dependencies:
'@ctrl/tinycolor': 3.6.1
@ -3243,6 +3419,10 @@ snapshots:
file-saver@2.0.5: {}
filelist@1.0.4:
dependencies:
minimatch: 5.1.6
fill-range@4.0.0:
dependencies:
extend-shallow: 2.0.1
@ -3406,6 +3586,16 @@ snapshots:
hookable@5.5.3: {}
html-minifier-terser@6.1.0:
dependencies:
camel-case: 4.1.2
clean-css: 5.3.3
commander: 8.3.0
he: 1.2.0
param-case: 3.0.4
relateurl: 0.2.7
terser: 5.44.0
htmlparser2@3.10.1:
dependencies:
domelementtype: 1.3.1
@ -3597,6 +3787,12 @@ snapshots:
optionalDependencies:
'@pkgjs/parseargs': 0.11.0
jake@10.9.4:
dependencies:
async: 3.2.6
filelist: 1.0.4
picocolors: 1.1.1
js-base64@2.6.4: {}
js-beautify@1.14.11:
@ -3665,6 +3861,10 @@ snapshots:
lodash@4.17.21: {}
lower-case@2.0.2:
dependencies:
tslib: 2.8.1
lru-cache@10.4.3: {}
magic-string@0.26.7:
@ -3722,6 +3922,10 @@ snapshots:
dependencies:
mime-db: 1.52.0
minimatch@5.1.6:
dependencies:
brace-expansion: 2.0.2
minimatch@9.0.1:
dependencies:
brace-expansion: 2.0.2
@ -3770,6 +3974,16 @@ snapshots:
transitivePeerDependencies:
- supports-color
no-case@3.0.4:
dependencies:
lower-case: 2.0.2
tslib: 2.8.1
node-html-parser@5.4.2:
dependencies:
css-select: 4.3.0
he: 1.2.0
nopt@7.2.1:
dependencies:
abbrev: 2.0.0
@ -3824,8 +4038,18 @@ snapshots:
package-json-from-dist@1.0.1: {}
param-case@3.0.4:
dependencies:
dot-case: 3.0.4
tslib: 2.8.1
parchment@1.1.4: {}
pascal-case@3.1.2:
dependencies:
no-case: 3.0.4
tslib: 2.8.1
pascalcase@0.1.1: {}
path-key@3.1.1: {}
@ -3973,6 +4197,8 @@ snapshots:
gopd: 1.2.0
set-function-name: 2.0.2
relateurl@0.2.7: {}
repeat-element@1.1.4: {}
repeat-string@1.6.1: {}
@ -4229,6 +4455,11 @@ snapshots:
source-map-url: 0.4.1
urix: 0.1.0
source-map-support@0.5.21:
dependencies:
buffer-from: 1.1.2
source-map: 0.6.1
source-map-url@0.4.1: {}
source-map@0.5.7: {}
@ -4368,6 +4599,13 @@ snapshots:
sync-message-port@1.1.3: {}
terser@5.44.0:
dependencies:
'@jridgewell/source-map': 0.3.11
acorn: 8.15.0
commander: 2.20.3
source-map-support: 0.5.21
tiny-emitter@2.1.0: {}
tinyglobby@0.2.15:
@ -4529,16 +4767,32 @@ snapshots:
vary@1.1.2: {}
vite-plugin-compression@0.5.1(vite@6.3.5(@types/node@24.3.1)(sass-embedded@1.89.1)):
vite-plugin-compression@0.5.1(vite@6.3.5(@types/node@24.3.1)(sass-embedded@1.89.1)(terser@5.44.0)):
dependencies:
chalk: 4.1.2
debug: 4.4.1
fs-extra: 10.1.0
vite: 6.3.5(@types/node@24.3.1)(sass-embedded@1.89.1)
vite: 6.3.5(@types/node@24.3.1)(sass-embedded@1.89.1)(terser@5.44.0)
transitivePeerDependencies:
- supports-color
vite-plugin-svg-icons@2.0.1(vite@6.3.5(@types/node@24.3.1)(sass-embedded@1.89.1)):
vite-plugin-html@3.2.2(vite@6.3.5(@types/node@24.3.1)(sass-embedded@1.89.1)(terser@5.44.0)):
dependencies:
'@rollup/pluginutils': 4.2.1
colorette: 2.0.20
connect-history-api-fallback: 1.6.0
consola: 2.15.3
dotenv: 16.6.1
dotenv-expand: 8.0.3
ejs: 3.1.10
fast-glob: 3.3.3
fs-extra: 10.1.0
html-minifier-terser: 6.1.0
node-html-parser: 5.4.2
pathe: 0.2.0
vite: 6.3.5(@types/node@24.3.1)(sass-embedded@1.89.1)(terser@5.44.0)
vite-plugin-svg-icons@2.0.1(vite@6.3.5(@types/node@24.3.1)(sass-embedded@1.89.1)(terser@5.44.0)):
dependencies:
'@types/svgo': 2.6.4
cors: 2.8.5
@ -4548,11 +4802,11 @@ snapshots:
pathe: 0.2.0
svg-baker: 1.7.0
svgo: 2.8.0
vite: 6.3.5(@types/node@24.3.1)(sass-embedded@1.89.1)
vite: 6.3.5(@types/node@24.3.1)(sass-embedded@1.89.1)(terser@5.44.0)
transitivePeerDependencies:
- supports-color
vite@6.3.5(@types/node@24.3.1)(sass-embedded@1.89.1):
vite@6.3.5(@types/node@24.3.1)(sass-embedded@1.89.1)(terser@5.44.0):
dependencies:
esbuild: 0.25.9
fdir: 6.5.0(picomatch@4.0.3)
@ -4564,6 +4818,7 @@ snapshots:
'@types/node': 24.3.1
fsevents: 2.3.3
sass-embedded: 1.89.1
terser: 5.44.0
vue-cropper@1.1.1: {}

View File

@ -44,6 +44,9 @@ import ImagePreview from "@/components/ImagePreview"
// 字典标签组件
import DictTag from '@/components/DictTag'
//版本更新检查
import '@/utils/cachedBuildTime'
const app = createApp(App)
// 全局方法挂载

View File

@ -0,0 +1,40 @@
import { MsgConfirm } from '@/utils/message'
const cachedBuildTime = window.__BUILD_TIME__;
let flag = true;
console.info('[ 版本检测已加载... ]');
setInterval(async () => {
try {
let url = window.location.origin+window.location.pathname
if(url.indexOf('index.html') === -1){
url+=`index.html?t=${Date.now()}`
} else {
url+=`?t=${Date.now()}`
}
const response = await fetch(url); // 加时间戳避免缓存
const html = await response.text();
const newBuildTime = html.match(/window\.__BUILD_TIME__ = '(.*?)'/)?.[1];
if (newBuildTime && newBuildTime !== cachedBuildTime && flag) {
flag = false
// 触发更新提示逻辑
console.log('检测到新版本,请刷新页面');
MsgConfirm(
`系统版本更新通知`,
'检测到系统有新版本发布,是否立即刷新页面?',
{
confirmButtonText: '立即刷新',
cancelButtonText: '稍后再说',
}
)
.then(() => {
window.location.reload()
})
.catch(() => {})
}
} catch (error) {
console.error('版本检测失败', error);
}
}, 1000 * 60); // 每1分钟检测一次

85
src/utils/message.js Normal file
View File

@ -0,0 +1,85 @@
import { ElMessageBox, ElMessage } from 'element-plus'
import { h } from 'vue'
export const MsgSuccess = (message) => {
ElMessage.success({
message: message,
type: 'success',
// showClose: true,
duration: 3000
})
}
export const MsgInfo = (message) => {
ElMessage.info({
message: message,
type: 'info',
// showClose: true,
duration: 3000
})
}
export const MsgWarning = (message) => {
ElMessage.warning({
message: message,
type: 'warning',
// showClose: true,
duration: 3000
})
}
export const MsgError = (message) => {
ElMessage.error({
message: message,
type: 'error',
showClose: true,
duration: 3000
})
}
export const MsgAlert = (title, description, options) => {
const defaultOptions = {
confirmButtonText: '确认',
...options
}
return ElMessageBox.alert(description, title, defaultOptions)
}
/**
* 删除知识库
* @param 参数 message: {title, description,type}
*/
export const MsgConfirm = (title, description, options) => {
const defaultOptions = {
showCancelButton: true,
confirmButtonText: '确认',
cancelButtonText: '取消',
...options
}
return ElMessageBox.confirm(description, title, defaultOptions)
}
/** 定制化弹框 */
export const MsgConfirmCustom = (title, description , options) => {
const defaultOptions = {
showCancelButton: true,
confirmButtonText: '确认',
cancelButtonText: '取消',
dangerouslyUseHTMLString: true,
customClass: 'msg-box-custom',
...options
}
const des = h('div', {}, [
h('p', {}, description)
])
// 去掉默认类型
if(defaultOptions?.type) delete defaultOptions.type
return ElMessageBox.confirm(
des,
title,
defaultOptions
)
}

View File

@ -9,9 +9,6 @@
<p>
<b>当前版本:</b> <span>v{{ version }}</span>
</p>
<p>
<el-tag type="danger">&yen;免费开源</el-tag>
</p>
</el-col>
<el-col :sm="24" :lg="12" style="padding-left: 50px">

View File

@ -1,6 +1,10 @@
import { defineConfig, loadEnv } from 'vite'
import path from 'path'
import createVitePlugins from './vite/plugins'
import dayjs from 'dayjs'
import { createHtmlPlugin } from 'vite-plugin-html';
const timeStr = dayjs().format('YYYY-MM-DD-HH-mm-ss')
const baseUrl = 'http://49.232.15.146' // 后端接口
@ -13,7 +17,16 @@ export default defineConfig(({ mode, command }) => {
// 默认情况下vite 会假设你的应用是被部署在一个域名的根路径上
// 例如 https://www.ruoyi.vip/。如果应用被部署在一个子路径上,你就需要用这个选项指定这个子路径。例如,如果你的应用被部署在 https://www.ruoyi.vip/admin/,则设置 baseUrl 为 /admin/。
base: VITE_APP_ENV === 'production' ? '/' : '/',
plugins: createVitePlugins(env, command === 'build'),
plugins: [
createVitePlugins(env, command === 'build'),
createHtmlPlugin({
inject: {
data: {
buildTime: timeStr // 生成打包时间
}
}
}),
],
resolve: {
// https://cn.vitejs.dev/config/#resolve-alias
alias: {