提交 cfb7c53a authored 作者: 王鹏飞's avatar 王鹏飞

chore: update

上级 37f8dca7
......@@ -12,11 +12,11 @@
"@tinymce/tinymce-vue": "^6.0.1",
"axios": "^1.7.7",
"blueimp-md5": "^2.19.0",
"element-plus": "^2.8.0",
"element-plus": "^2.8.2",
"file-saver": "^2.0.5",
"pinia": "^2.2.2",
"qs": "^6.13.0",
"vue": "^3.5.0",
"vue": "^3.5.3",
"vue-router": "^4.4.3"
},
"devDependencies": {
......@@ -37,7 +37,8 @@
"typescript": "~5.4.5",
"unplugin-auto-import": "^0.18.2",
"vite": "^5.4.3",
"vue-tsc": "^2.1.4"
"vite-plugin-mkcert": "^1.17.6",
"vue-tsc": "^2.1.6"
}
},
"node_modules/@antfu/utils": {
......@@ -643,6 +644,173 @@
"node": ">= 8"
}
},
"node_modules/@octokit/auth-token": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-4.0.0.tgz",
"integrity": "sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 18"
}
},
"node_modules/@octokit/core": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/@octokit/core/-/core-5.2.0.tgz",
"integrity": "sha512-1LFfa/qnMQvEOAdzlQymH0ulepxbxnCYAKJZfMci/5XJyIHWgEYnDmgnKakbTh7CH2tFQ5O60oYDvns4i9RAIg==",
"dev": true,
"license": "MIT",
"dependencies": {
"@octokit/auth-token": "^4.0.0",
"@octokit/graphql": "^7.1.0",
"@octokit/request": "^8.3.1",
"@octokit/request-error": "^5.1.0",
"@octokit/types": "^13.0.0",
"before-after-hook": "^2.2.0",
"universal-user-agent": "^6.0.0"
},
"engines": {
"node": ">= 18"
}
},
"node_modules/@octokit/endpoint": {
"version": "9.0.5",
"resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-9.0.5.tgz",
"integrity": "sha512-ekqR4/+PCLkEBF6qgj8WqJfvDq65RH85OAgrtnVp1mSxaXF03u2xW/hUdweGS5654IlC0wkNYC18Z50tSYTAFw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@octokit/types": "^13.1.0",
"universal-user-agent": "^6.0.0"
},
"engines": {
"node": ">= 18"
}
},
"node_modules/@octokit/graphql": {
"version": "7.1.0",
"resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-7.1.0.tgz",
"integrity": "sha512-r+oZUH7aMFui1ypZnAvZmn0KSqAUgE1/tUXIWaqUCa1758ts/Jio84GZuzsvUkme98kv0WFY8//n0J1Z+vsIsQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"@octokit/request": "^8.3.0",
"@octokit/types": "^13.0.0",
"universal-user-agent": "^6.0.0"
},
"engines": {
"node": ">= 18"
}
},
"node_modules/@octokit/openapi-types": {
"version": "22.2.0",
"resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-22.2.0.tgz",
"integrity": "sha512-QBhVjcUa9W7Wwhm6DBFu6ZZ+1/t/oYxqc2tp81Pi41YNuJinbFRx8B133qVOrAaBbF7D/m0Et6f9/pZt9Rc+tg==",
"dev": true,
"license": "MIT"
},
"node_modules/@octokit/plugin-paginate-rest": {
"version": "11.3.1",
"resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-11.3.1.tgz",
"integrity": "sha512-ryqobs26cLtM1kQxqeZui4v8FeznirUsksiA+RYemMPJ7Micju0WSkv50dBksTuZks9O5cg4wp+t8fZ/cLY56g==",
"dev": true,
"license": "MIT",
"dependencies": {
"@octokit/types": "^13.5.0"
},
"engines": {
"node": ">= 18"
},
"peerDependencies": {
"@octokit/core": "5"
}
},
"node_modules/@octokit/plugin-request-log": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-4.0.1.tgz",
"integrity": "sha512-GihNqNpGHorUrO7Qa9JbAl0dbLnqJVrV8OXe2Zm5/Y4wFkZQDfTreBzVmiRfJVfE4mClXdihHnbpyyO9FSX4HA==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 18"
},
"peerDependencies": {
"@octokit/core": "5"
}
},
"node_modules/@octokit/plugin-rest-endpoint-methods": {
"version": "13.2.2",
"resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-13.2.2.tgz",
"integrity": "sha512-EI7kXWidkt3Xlok5uN43suK99VWqc8OaIMktY9d9+RNKl69juoTyxmLoWPIZgJYzi41qj/9zU7G/ljnNOJ5AFA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@octokit/types": "^13.5.0"
},
"engines": {
"node": ">= 18"
},
"peerDependencies": {
"@octokit/core": "^5"
}
},
"node_modules/@octokit/request": {
"version": "8.4.0",
"resolved": "https://registry.npmjs.org/@octokit/request/-/request-8.4.0.tgz",
"integrity": "sha512-9Bb014e+m2TgBeEJGEbdplMVWwPmL1FPtggHQRkV+WVsMggPtEkLKPlcVYm/o8xKLkpJ7B+6N8WfQMtDLX2Dpw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@octokit/endpoint": "^9.0.1",
"@octokit/request-error": "^5.1.0",
"@octokit/types": "^13.1.0",
"universal-user-agent": "^6.0.0"
},
"engines": {
"node": ">= 18"
}
},
"node_modules/@octokit/request-error": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-5.1.0.tgz",
"integrity": "sha512-GETXfE05J0+7H2STzekpKObFe765O5dlAKUTLNGeH+x47z7JjXHfsHKo5z21D/o/IOZTUEI6nyWyR+bZVP/n5Q==",
"dev": true,
"license": "MIT",
"dependencies": {
"@octokit/types": "^13.1.0",
"deprecation": "^2.0.0",
"once": "^1.4.0"
},
"engines": {
"node": ">= 18"
}
},
"node_modules/@octokit/rest": {
"version": "20.1.1",
"resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-20.1.1.tgz",
"integrity": "sha512-MB4AYDsM5jhIHro/dq4ix1iWTLGToIGk6cWF5L6vanFaMble5jTX/UBQyiv05HsWnwUtY8JrfHy2LWfKwihqMw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@octokit/core": "^5.0.2",
"@octokit/plugin-paginate-rest": "11.3.1",
"@octokit/plugin-request-log": "^4.0.0",
"@octokit/plugin-rest-endpoint-methods": "13.2.2"
},
"engines": {
"node": ">= 18"
}
},
"node_modules/@octokit/types": {
"version": "13.5.0",
"resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.5.0.tgz",
"integrity": "sha512-HdqWTf5Z3qwDVlzCrP8UJquMwunpDiMPt5er+QjGzL4hqr/vBVY/MauQgS1xWxCDT1oMx1EULyqxncdCY/NVSQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"@octokit/openapi-types": "^22.2.0"
}
},
"node_modules/@popperjs/core": {
"name": "@sxzz/popperjs-es",
"version": "2.11.7",
......@@ -1242,39 +1410,39 @@
}
},
"node_modules/@vue/compiler-core": {
"version": "3.5.0",
"resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.0.tgz",
"integrity": "sha512-ja7cpqAOfw4tyFAxgBz70Z42miNDeaqTxExTsnXDLomRpqfyCgyvZvFp482fmsElpfvsoMJUsvzULhvxUTW6Iw==",
"version": "3.5.3",
"resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.3.tgz",
"integrity": "sha512-adAfy9boPkP233NTyvLbGEqVuIfK/R0ZsBsIOW4BZNfb4BRpRW41Do1u+ozJpsb+mdoy80O20IzAsHaihRb5qA==",
"license": "MIT",
"dependencies": {
"@babel/parser": "^7.25.3",
"@vue/shared": "3.5.0",
"@vue/shared": "3.5.3",
"entities": "^4.5.0",
"estree-walker": "^2.0.2",
"source-map-js": "^1.2.0"
}
},
"node_modules/@vue/compiler-dom": {
"version": "3.5.0",
"resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.0.tgz",
"integrity": "sha512-xYjUybWZXl+1R/toDy815i4PbeehL2hThiSGkcpmIOCy2HoYyeeC/gAWK/Y/xsoK+GSw198/T5O31bYuQx5uvQ==",
"version": "3.5.3",
"resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.3.tgz",
"integrity": "sha512-wnzFArg9zpvk/811CDOZOadJRugf1Bgl/TQ3RfV4nKfSPok4hi0w10ziYUQR6LnnBAUlEXYLUfZ71Oj9ds/+QA==",
"license": "MIT",
"dependencies": {
"@vue/compiler-core": "3.5.0",
"@vue/shared": "3.5.0"
"@vue/compiler-core": "3.5.3",
"@vue/shared": "3.5.3"
}
},
"node_modules/@vue/compiler-sfc": {
"version": "3.5.0",
"resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.0.tgz",
"integrity": "sha512-B9DgLtrqok2GLuaFjLlSL15ZG3ZDBiitUH1ecex9guh/ZcA5MCdwuVE6nsfQxktuZY/QY0awJ35/ripIviCQTQ==",
"version": "3.5.3",
"resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.3.tgz",
"integrity": "sha512-P3uATLny2tfyvMB04OQFe7Sczteno7SLFxwrOA/dw01pBWQHB5HL15a8PosoNX2aG/EAMGqnXTu+1LnmzFhpTQ==",
"license": "MIT",
"dependencies": {
"@babel/parser": "^7.25.3",
"@vue/compiler-core": "3.5.0",
"@vue/compiler-dom": "3.5.0",
"@vue/compiler-ssr": "3.5.0",
"@vue/shared": "3.5.0",
"@vue/compiler-core": "3.5.3",
"@vue/compiler-dom": "3.5.3",
"@vue/compiler-ssr": "3.5.3",
"@vue/shared": "3.5.3",
"estree-walker": "^2.0.2",
"magic-string": "^0.30.11",
"postcss": "^8.4.44",
......@@ -1282,13 +1450,13 @@
}
},
"node_modules/@vue/compiler-ssr": {
"version": "3.5.0",
"resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.0.tgz",
"integrity": "sha512-E263QZmA1dqRd7c3u/sWTLRMpQOT0aZ8av/L9SoD/v/BVMZaWFHPUUBswS+bzrfvG2suJF8vSLKx6k6ba5SUdA==",
"version": "3.5.3",
"resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.3.tgz",
"integrity": "sha512-F/5f+r2WzL/2YAPl7UlKcJWHrvoZN8XwEBLnT7S4BXwncH25iDOabhO2M2DWioyTguJAGavDOawejkFXj8EM1w==",
"license": "MIT",
"dependencies": {
"@vue/compiler-dom": "3.5.0",
"@vue/shared": "3.5.0"
"@vue/compiler-dom": "3.5.3",
"@vue/shared": "3.5.3"
}
},
"node_modules/@vue/compiler-vue2": {
......@@ -1332,9 +1500,9 @@
}
},
"node_modules/@vue/language-core": {
"version": "2.1.4",
"resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-2.1.4.tgz",
"integrity": "sha512-i8pfAgNjTNjabBX1xRsuV6aRw2E8bdQXwd5H8m3cUkTVJju3QN5nfdoXET0uK+yXsuloNJPzo6PXFujRRPNmMA==",
"version": "2.1.6",
"resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-2.1.6.tgz",
"integrity": "sha512-MW569cSky9R/ooKMh6xa2g1D0AtRKbL56k83dzus/bx//RDJk24RHWkMzbAlXjMdDNyxAaagKPRquBIxkxlCkg==",
"dev": true,
"license": "MIT",
"dependencies": {
......@@ -1383,53 +1551,53 @@
}
},
"node_modules/@vue/reactivity": {
"version": "3.5.0",
"resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.0.tgz",
"integrity": "sha512-Ew3F5riP3B3ZDGjD3ZKb9uZylTTPSqt8hAf4sGbvbjrjDjrFb3Jm15Tk1/w7WwTE5GbQ2Qhwxx1moc9hr8A/OQ==",
"version": "3.5.3",
"resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.3.tgz",
"integrity": "sha512-2w61UnRWTP7+rj1H/j6FH706gRBHdFVpIqEkSDAyIpafBXYH8xt4gttstbbCWdU3OlcSWO8/3mbKl/93/HSMpw==",
"license": "MIT",
"dependencies": {
"@vue/shared": "3.5.0"
"@vue/shared": "3.5.3"
}
},
"node_modules/@vue/runtime-core": {
"version": "3.5.0",
"resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.0.tgz",
"integrity": "sha512-mQyW0F9FaNRdt8ghkAs+BMG3iQ7LGgWKOpkzUzR5AI5swPNydHGL5hvVTqFaeMzwecF1g0c86H4yFQsSxJhH1w==",
"version": "3.5.3",
"resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.3.tgz",
"integrity": "sha512-5b2AQw5OZlmCzSsSBWYoZOsy75N4UdMWenTfDdI5bAzXnuVR7iR8Q4AOzQm2OGoA41xjk53VQKrqQhOz2ktWaw==",
"license": "MIT",
"dependencies": {
"@vue/reactivity": "3.5.0",
"@vue/shared": "3.5.0"
"@vue/reactivity": "3.5.3",
"@vue/shared": "3.5.3"
}
},
"node_modules/@vue/runtime-dom": {
"version": "3.5.0",
"resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.0.tgz",
"integrity": "sha512-NQQXjpdXgyYVJ2M56FJ+lSJgZiecgQ2HhxhnQBN95FymXegRNY/N2htI7vOTwpP75pfxhIeYOJ8mE8sW8KAW6A==",
"version": "3.5.3",
"resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.3.tgz",
"integrity": "sha512-wPR1DEGc3XnQ7yHbmkTt3GoY0cEnVGQnARRdAkDzZ8MbUKEs26gogCQo6AOvvgahfjIcnvWJzkZArQ1fmWjcSg==",
"license": "MIT",
"dependencies": {
"@vue/reactivity": "3.5.0",
"@vue/runtime-core": "3.5.0",
"@vue/shared": "3.5.0",
"@vue/reactivity": "3.5.3",
"@vue/runtime-core": "3.5.3",
"@vue/shared": "3.5.3",
"csstype": "^3.1.3"
}
},
"node_modules/@vue/server-renderer": {
"version": "3.5.0",
"resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.0.tgz",
"integrity": "sha512-HyDIFUg+l7L4PKrEnJlCYWHUOlm6NxZhmSxIefZ5MTYjkIPfDfkwhX7hqxAQHfgIAE1uLMLQZwuNR/ozI0NhZg==",
"version": "3.5.3",
"resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.3.tgz",
"integrity": "sha512-28volmaZVG2PGO3V3+gBPKoSHvLlE8FGfG/GKXKkjjfxLuj/50B/0OQGakM/g6ehQeqCrZYM4eHC4Ks48eig1Q==",
"license": "MIT",
"dependencies": {
"@vue/compiler-ssr": "3.5.0",
"@vue/shared": "3.5.0"
"@vue/compiler-ssr": "3.5.3",
"@vue/shared": "3.5.3"
},
"peerDependencies": {
"vue": "3.5.0"
"vue": "3.5.3"
}
},
"node_modules/@vue/shared": {
"version": "3.5.0",
"resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.0.tgz",
"integrity": "sha512-m9IgiteBpCkFaMNwCOBkFksA7z8QiKc30ooRuoXWUFRDu0mGyNPlFHmbncF0/Kra1RlX8QrmBbRaIxVvikaR0Q==",
"version": "3.5.3",
"resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.3.tgz",
"integrity": "sha512-Jp2v8nylKBT+PlOUjun2Wp/f++TfJVFjshLzNtJDdmFJabJa7noGMncqXRM1vXGX+Yo2V7WykQFNxusSim8SCA==",
"license": "MIT"
},
"node_modules/@vue/tsconfig": {
......@@ -1723,6 +1891,13 @@
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
"dev": true
},
"node_modules/before-after-hook": {
"version": "2.2.3",
"resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz",
"integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==",
"dev": true,
"license": "Apache-2.0"
},
"node_modules/binary-extensions": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
......@@ -1972,12 +2147,13 @@
"license": "MIT"
},
"node_modules/debug": {
"version": "4.3.4",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
"integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
"version": "4.3.7",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz",
"integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"ms": "2.1.2"
"ms": "^2.1.3"
},
"engines": {
"node": ">=6.0"
......@@ -2054,6 +2230,13 @@
"node": ">= 0.8"
}
},
"node_modules/deprecation": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz",
"integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==",
"dev": true,
"license": "ISC"
},
"node_modules/destroy": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
......@@ -2119,9 +2302,10 @@
"dev": true
},
"node_modules/element-plus": {
"version": "2.8.0",
"resolved": "https://registry.npmjs.org/element-plus/-/element-plus-2.8.0.tgz",
"integrity": "sha512-7ngapVlVlQAjocVqD4MUKvKXlBneT9DSDk2mmBOSLRFWNm/HLDT15ozmsvUBfy18sajnyUeSIHTtINE8gfrGMg==",
"version": "2.8.2",
"resolved": "https://registry.npmjs.org/element-plus/-/element-plus-2.8.2.tgz",
"integrity": "sha512-pqoQlaUmzUFCjjTHyxGO7Cd0CizsQpIaad1ozV9PCaYjh2T4MIMnjfifqiYs2lWoZ/8GVwrRG1WTCfnZEjwfcg==",
"license": "MIT",
"dependencies": {
"@ctrl/tinycolor": "^3.4.1",
"@element-plus/icons-vue": "^2.3.1",
......@@ -3520,10 +3704,11 @@
}
},
"node_modules/ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
"dev": true
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
"dev": true,
"license": "MIT"
},
"node_modules/muggle-string": {
"version": "0.4.1",
......@@ -4580,6 +4765,7 @@
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz",
"integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==",
"devOptional": true,
"license": "Apache-2.0",
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
......@@ -4654,6 +4840,13 @@
"@types/estree": "^1.0.0"
}
},
"node_modules/universal-user-agent": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.1.tgz",
"integrity": "sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==",
"dev": true,
"license": "ISC"
},
"node_modules/universalify": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
......@@ -4877,6 +5070,25 @@
}
}
},
"node_modules/vite-plugin-mkcert": {
"version": "1.17.6",
"resolved": "https://registry.npmjs.org/vite-plugin-mkcert/-/vite-plugin-mkcert-1.17.6.tgz",
"integrity": "sha512-4JR1RN0HEg/w17eRQJ/Ve2pSa6KCVQcQO6yKtIaKQCFDyd63zGfXHWpygBkvvRSpqa0GcqNKf0fjUJ0HiJQXVQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"@octokit/rest": "^20.1.1",
"axios": "^1.7.4",
"debug": "^4.3.6",
"picocolors": "^1.0.1"
},
"engines": {
"node": ">=v16.7.0"
},
"peerDependencies": {
"vite": ">=3"
}
},
"node_modules/vm2": {
"version": "3.9.9",
"resolved": "https://registry.npmjs.org/vm2/-/vm2-3.9.9.tgz",
......@@ -4901,16 +5113,16 @@
"license": "MIT"
},
"node_modules/vue": {
"version": "3.5.0",
"resolved": "https://registry.npmjs.org/vue/-/vue-3.5.0.tgz",
"integrity": "sha512-1t70favYoFijwfWJ7g81aTd32obGaAnKYE9FNyMgnEzn3F4YncRi/kqAHHKloG0VXTD8vBYMhbgLKCA+Sk6QDw==",
"version": "3.5.3",
"resolved": "https://registry.npmjs.org/vue/-/vue-3.5.3.tgz",
"integrity": "sha512-xvRbd0HpuLovYbOHXRHlSBsSvmUJbo0pzbkKTApWnQGf3/cu5Z39mQeA5cZdLRVIoNf3zI6MSoOgHUT5i2jO+Q==",
"license": "MIT",
"dependencies": {
"@vue/compiler-dom": "3.5.0",
"@vue/compiler-sfc": "3.5.0",
"@vue/runtime-dom": "3.5.0",
"@vue/server-renderer": "3.5.0",
"@vue/shared": "3.5.0"
"@vue/compiler-dom": "3.5.3",
"@vue/compiler-sfc": "3.5.3",
"@vue/runtime-dom": "3.5.3",
"@vue/server-renderer": "3.5.3",
"@vue/shared": "3.5.3"
},
"peerDependencies": {
"typescript": "*"
......@@ -4982,14 +5194,14 @@
}
},
"node_modules/vue-tsc": {
"version": "2.1.4",
"resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-2.1.4.tgz",
"integrity": "sha512-XTzMXQcsixAvNbpou/9qngEsZawaiJRZH3Ja+lfgRfv2A1TJv9vnZ/Kyv7XxPqv/TaZVFSnjGpM87VbWIg6yQg==",
"version": "2.1.6",
"resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-2.1.6.tgz",
"integrity": "sha512-f98dyZp5FOukcYmbFpuSCJ4Z0vHSOSmxGttZJCsFeX0M4w/Rsq0s4uKXjcSRsZqsRgQa6z7SfuO+y0HVICE57Q==",
"dev": true,
"license": "MIT",
"dependencies": {
"@volar/typescript": "~2.4.1",
"@vue/language-core": "2.1.4",
"@vue/language-core": "2.1.6",
"semver": "^7.5.4"
},
"bin": {
......@@ -5436,6 +5648,123 @@
"fastq": "^1.6.0"
}
},
"@octokit/auth-token": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-4.0.0.tgz",
"integrity": "sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==",
"dev": true
},
"@octokit/core": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/@octokit/core/-/core-5.2.0.tgz",
"integrity": "sha512-1LFfa/qnMQvEOAdzlQymH0ulepxbxnCYAKJZfMci/5XJyIHWgEYnDmgnKakbTh7CH2tFQ5O60oYDvns4i9RAIg==",
"dev": true,
"requires": {
"@octokit/auth-token": "^4.0.0",
"@octokit/graphql": "^7.1.0",
"@octokit/request": "^8.3.1",
"@octokit/request-error": "^5.1.0",
"@octokit/types": "^13.0.0",
"before-after-hook": "^2.2.0",
"universal-user-agent": "^6.0.0"
}
},
"@octokit/endpoint": {
"version": "9.0.5",
"resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-9.0.5.tgz",
"integrity": "sha512-ekqR4/+PCLkEBF6qgj8WqJfvDq65RH85OAgrtnVp1mSxaXF03u2xW/hUdweGS5654IlC0wkNYC18Z50tSYTAFw==",
"dev": true,
"requires": {
"@octokit/types": "^13.1.0",
"universal-user-agent": "^6.0.0"
}
},
"@octokit/graphql": {
"version": "7.1.0",
"resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-7.1.0.tgz",
"integrity": "sha512-r+oZUH7aMFui1ypZnAvZmn0KSqAUgE1/tUXIWaqUCa1758ts/Jio84GZuzsvUkme98kv0WFY8//n0J1Z+vsIsQ==",
"dev": true,
"requires": {
"@octokit/request": "^8.3.0",
"@octokit/types": "^13.0.0",
"universal-user-agent": "^6.0.0"
}
},
"@octokit/openapi-types": {
"version": "22.2.0",
"resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-22.2.0.tgz",
"integrity": "sha512-QBhVjcUa9W7Wwhm6DBFu6ZZ+1/t/oYxqc2tp81Pi41YNuJinbFRx8B133qVOrAaBbF7D/m0Et6f9/pZt9Rc+tg==",
"dev": true
},
"@octokit/plugin-paginate-rest": {
"version": "11.3.1",
"resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-11.3.1.tgz",
"integrity": "sha512-ryqobs26cLtM1kQxqeZui4v8FeznirUsksiA+RYemMPJ7Micju0WSkv50dBksTuZks9O5cg4wp+t8fZ/cLY56g==",
"dev": true,
"requires": {
"@octokit/types": "^13.5.0"
}
},
"@octokit/plugin-request-log": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-4.0.1.tgz",
"integrity": "sha512-GihNqNpGHorUrO7Qa9JbAl0dbLnqJVrV8OXe2Zm5/Y4wFkZQDfTreBzVmiRfJVfE4mClXdihHnbpyyO9FSX4HA==",
"dev": true,
"requires": {}
},
"@octokit/plugin-rest-endpoint-methods": {
"version": "13.2.2",
"resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-13.2.2.tgz",
"integrity": "sha512-EI7kXWidkt3Xlok5uN43suK99VWqc8OaIMktY9d9+RNKl69juoTyxmLoWPIZgJYzi41qj/9zU7G/ljnNOJ5AFA==",
"dev": true,
"requires": {
"@octokit/types": "^13.5.0"
}
},
"@octokit/request": {
"version": "8.4.0",
"resolved": "https://registry.npmjs.org/@octokit/request/-/request-8.4.0.tgz",
"integrity": "sha512-9Bb014e+m2TgBeEJGEbdplMVWwPmL1FPtggHQRkV+WVsMggPtEkLKPlcVYm/o8xKLkpJ7B+6N8WfQMtDLX2Dpw==",
"dev": true,
"requires": {
"@octokit/endpoint": "^9.0.1",
"@octokit/request-error": "^5.1.0",
"@octokit/types": "^13.1.0",
"universal-user-agent": "^6.0.0"
}
},
"@octokit/request-error": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-5.1.0.tgz",
"integrity": "sha512-GETXfE05J0+7H2STzekpKObFe765O5dlAKUTLNGeH+x47z7JjXHfsHKo5z21D/o/IOZTUEI6nyWyR+bZVP/n5Q==",
"dev": true,
"requires": {
"@octokit/types": "^13.1.0",
"deprecation": "^2.0.0",
"once": "^1.4.0"
}
},
"@octokit/rest": {
"version": "20.1.1",
"resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-20.1.1.tgz",
"integrity": "sha512-MB4AYDsM5jhIHro/dq4ix1iWTLGToIGk6cWF5L6vanFaMble5jTX/UBQyiv05HsWnwUtY8JrfHy2LWfKwihqMw==",
"dev": true,
"requires": {
"@octokit/core": "^5.0.2",
"@octokit/plugin-paginate-rest": "11.3.1",
"@octokit/plugin-request-log": "^4.0.0",
"@octokit/plugin-rest-endpoint-methods": "13.2.2"
}
},
"@octokit/types": {
"version": "13.5.0",
"resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.5.0.tgz",
"integrity": "sha512-HdqWTf5Z3qwDVlzCrP8UJquMwunpDiMPt5er+QjGzL4hqr/vBVY/MauQgS1xWxCDT1oMx1EULyqxncdCY/NVSQ==",
"dev": true,
"requires": {
"@octokit/openapi-types": "^22.2.0"
}
},
"@popperjs/core": {
"version": "npm:@sxzz/popperjs-es@2.11.7",
"resolved": "https://registry.npmjs.org/@sxzz/popperjs-es/-/popperjs-es-2.11.7.tgz",
......@@ -5797,36 +6126,36 @@
}
},
"@vue/compiler-core": {
"version": "3.5.0",
"resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.0.tgz",
"integrity": "sha512-ja7cpqAOfw4tyFAxgBz70Z42miNDeaqTxExTsnXDLomRpqfyCgyvZvFp482fmsElpfvsoMJUsvzULhvxUTW6Iw==",
"version": "3.5.3",
"resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.3.tgz",
"integrity": "sha512-adAfy9boPkP233NTyvLbGEqVuIfK/R0ZsBsIOW4BZNfb4BRpRW41Do1u+ozJpsb+mdoy80O20IzAsHaihRb5qA==",
"requires": {
"@babel/parser": "^7.25.3",
"@vue/shared": "3.5.0",
"@vue/shared": "3.5.3",
"entities": "^4.5.0",
"estree-walker": "^2.0.2",
"source-map-js": "^1.2.0"
}
},
"@vue/compiler-dom": {
"version": "3.5.0",
"resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.0.tgz",
"integrity": "sha512-xYjUybWZXl+1R/toDy815i4PbeehL2hThiSGkcpmIOCy2HoYyeeC/gAWK/Y/xsoK+GSw198/T5O31bYuQx5uvQ==",
"version": "3.5.3",
"resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.3.tgz",
"integrity": "sha512-wnzFArg9zpvk/811CDOZOadJRugf1Bgl/TQ3RfV4nKfSPok4hi0w10ziYUQR6LnnBAUlEXYLUfZ71Oj9ds/+QA==",
"requires": {
"@vue/compiler-core": "3.5.0",
"@vue/shared": "3.5.0"
"@vue/compiler-core": "3.5.3",
"@vue/shared": "3.5.3"
}
},
"@vue/compiler-sfc": {
"version": "3.5.0",
"resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.0.tgz",
"integrity": "sha512-B9DgLtrqok2GLuaFjLlSL15ZG3ZDBiitUH1ecex9guh/ZcA5MCdwuVE6nsfQxktuZY/QY0awJ35/ripIviCQTQ==",
"version": "3.5.3",
"resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.3.tgz",
"integrity": "sha512-P3uATLny2tfyvMB04OQFe7Sczteno7SLFxwrOA/dw01pBWQHB5HL15a8PosoNX2aG/EAMGqnXTu+1LnmzFhpTQ==",
"requires": {
"@babel/parser": "^7.25.3",
"@vue/compiler-core": "3.5.0",
"@vue/compiler-dom": "3.5.0",
"@vue/compiler-ssr": "3.5.0",
"@vue/shared": "3.5.0",
"@vue/compiler-core": "3.5.3",
"@vue/compiler-dom": "3.5.3",
"@vue/compiler-ssr": "3.5.3",
"@vue/shared": "3.5.3",
"estree-walker": "^2.0.2",
"magic-string": "^0.30.11",
"postcss": "^8.4.44",
......@@ -5834,12 +6163,12 @@
}
},
"@vue/compiler-ssr": {
"version": "3.5.0",
"resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.0.tgz",
"integrity": "sha512-E263QZmA1dqRd7c3u/sWTLRMpQOT0aZ8av/L9SoD/v/BVMZaWFHPUUBswS+bzrfvG2suJF8vSLKx6k6ba5SUdA==",
"version": "3.5.3",
"resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.3.tgz",
"integrity": "sha512-F/5f+r2WzL/2YAPl7UlKcJWHrvoZN8XwEBLnT7S4BXwncH25iDOabhO2M2DWioyTguJAGavDOawejkFXj8EM1w==",
"requires": {
"@vue/compiler-dom": "3.5.0",
"@vue/shared": "3.5.0"
"@vue/compiler-dom": "3.5.3",
"@vue/shared": "3.5.3"
}
},
"@vue/compiler-vue2": {
......@@ -5869,9 +6198,9 @@
}
},
"@vue/language-core": {
"version": "2.1.4",
"resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-2.1.4.tgz",
"integrity": "sha512-i8pfAgNjTNjabBX1xRsuV6aRw2E8bdQXwd5H8m3cUkTVJju3QN5nfdoXET0uK+yXsuloNJPzo6PXFujRRPNmMA==",
"version": "2.1.6",
"resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-2.1.6.tgz",
"integrity": "sha512-MW569cSky9R/ooKMh6xa2g1D0AtRKbL56k83dzus/bx//RDJk24RHWkMzbAlXjMdDNyxAaagKPRquBIxkxlCkg==",
"dev": true,
"requires": {
"@volar/language-core": "~2.4.1",
......@@ -5905,46 +6234,46 @@
}
},
"@vue/reactivity": {
"version": "3.5.0",
"resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.0.tgz",
"integrity": "sha512-Ew3F5riP3B3ZDGjD3ZKb9uZylTTPSqt8hAf4sGbvbjrjDjrFb3Jm15Tk1/w7WwTE5GbQ2Qhwxx1moc9hr8A/OQ==",
"version": "3.5.3",
"resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.3.tgz",
"integrity": "sha512-2w61UnRWTP7+rj1H/j6FH706gRBHdFVpIqEkSDAyIpafBXYH8xt4gttstbbCWdU3OlcSWO8/3mbKl/93/HSMpw==",
"requires": {
"@vue/shared": "3.5.0"
"@vue/shared": "3.5.3"
}
},
"@vue/runtime-core": {
"version": "3.5.0",
"resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.0.tgz",
"integrity": "sha512-mQyW0F9FaNRdt8ghkAs+BMG3iQ7LGgWKOpkzUzR5AI5swPNydHGL5hvVTqFaeMzwecF1g0c86H4yFQsSxJhH1w==",
"version": "3.5.3",
"resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.3.tgz",
"integrity": "sha512-5b2AQw5OZlmCzSsSBWYoZOsy75N4UdMWenTfDdI5bAzXnuVR7iR8Q4AOzQm2OGoA41xjk53VQKrqQhOz2ktWaw==",
"requires": {
"@vue/reactivity": "3.5.0",
"@vue/shared": "3.5.0"
"@vue/reactivity": "3.5.3",
"@vue/shared": "3.5.3"
}
},
"@vue/runtime-dom": {
"version": "3.5.0",
"resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.0.tgz",
"integrity": "sha512-NQQXjpdXgyYVJ2M56FJ+lSJgZiecgQ2HhxhnQBN95FymXegRNY/N2htI7vOTwpP75pfxhIeYOJ8mE8sW8KAW6A==",
"version": "3.5.3",
"resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.3.tgz",
"integrity": "sha512-wPR1DEGc3XnQ7yHbmkTt3GoY0cEnVGQnARRdAkDzZ8MbUKEs26gogCQo6AOvvgahfjIcnvWJzkZArQ1fmWjcSg==",
"requires": {
"@vue/reactivity": "3.5.0",
"@vue/runtime-core": "3.5.0",
"@vue/shared": "3.5.0",
"@vue/reactivity": "3.5.3",
"@vue/runtime-core": "3.5.3",
"@vue/shared": "3.5.3",
"csstype": "^3.1.3"
}
},
"@vue/server-renderer": {
"version": "3.5.0",
"resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.0.tgz",
"integrity": "sha512-HyDIFUg+l7L4PKrEnJlCYWHUOlm6NxZhmSxIefZ5MTYjkIPfDfkwhX7hqxAQHfgIAE1uLMLQZwuNR/ozI0NhZg==",
"version": "3.5.3",
"resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.3.tgz",
"integrity": "sha512-28volmaZVG2PGO3V3+gBPKoSHvLlE8FGfG/GKXKkjjfxLuj/50B/0OQGakM/g6ehQeqCrZYM4eHC4Ks48eig1Q==",
"requires": {
"@vue/compiler-ssr": "3.5.0",
"@vue/shared": "3.5.0"
"@vue/compiler-ssr": "3.5.3",
"@vue/shared": "3.5.3"
}
},
"@vue/shared": {
"version": "3.5.0",
"resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.0.tgz",
"integrity": "sha512-m9IgiteBpCkFaMNwCOBkFksA7z8QiKc30ooRuoXWUFRDu0mGyNPlFHmbncF0/Kra1RlX8QrmBbRaIxVvikaR0Q=="
"version": "3.5.3",
"resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.3.tgz",
"integrity": "sha512-Jp2v8nylKBT+PlOUjun2Wp/f++TfJVFjshLzNtJDdmFJabJa7noGMncqXRM1vXGX+Yo2V7WykQFNxusSim8SCA=="
},
"@vue/tsconfig": {
"version": "0.5.1",
......@@ -6173,6 +6502,12 @@
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
"dev": true
},
"before-after-hook": {
"version": "2.2.3",
"resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz",
"integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==",
"dev": true
},
"binary-extensions": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
......@@ -6368,12 +6703,12 @@
"dev": true
},
"debug": {
"version": "4.3.4",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
"integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
"version": "4.3.7",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz",
"integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==",
"dev": true,
"requires": {
"ms": "2.1.2"
"ms": "^2.1.3"
}
},
"deep-is": {
......@@ -6424,6 +6759,12 @@
"integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
"dev": true
},
"deprecation": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz",
"integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==",
"dev": true
},
"destroy": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
......@@ -6475,9 +6816,9 @@
"dev": true
},
"element-plus": {
"version": "2.8.0",
"resolved": "https://registry.npmjs.org/element-plus/-/element-plus-2.8.0.tgz",
"integrity": "sha512-7ngapVlVlQAjocVqD4MUKvKXlBneT9DSDk2mmBOSLRFWNm/HLDT15ozmsvUBfy18sajnyUeSIHTtINE8gfrGMg==",
"version": "2.8.2",
"resolved": "https://registry.npmjs.org/element-plus/-/element-plus-2.8.2.tgz",
"integrity": "sha512-pqoQlaUmzUFCjjTHyxGO7Cd0CizsQpIaad1ozV9PCaYjh2T4MIMnjfifqiYs2lWoZ/8GVwrRG1WTCfnZEjwfcg==",
"requires": {
"@ctrl/tinycolor": "^3.4.1",
"@element-plus/icons-vue": "^2.3.1",
......@@ -7550,9 +7891,9 @@
}
},
"ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
"dev": true
},
"muggle-string": {
......@@ -8369,6 +8710,12 @@
}
}
},
"universal-user-agent": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.1.tgz",
"integrity": "sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==",
"dev": true
},
"universalify": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
......@@ -8509,6 +8856,18 @@
"rollup": "^4.20.0"
}
},
"vite-plugin-mkcert": {
"version": "1.17.6",
"resolved": "https://registry.npmjs.org/vite-plugin-mkcert/-/vite-plugin-mkcert-1.17.6.tgz",
"integrity": "sha512-4JR1RN0HEg/w17eRQJ/Ve2pSa6KCVQcQO6yKtIaKQCFDyd63zGfXHWpygBkvvRSpqa0GcqNKf0fjUJ0HiJQXVQ==",
"dev": true,
"requires": {
"@octokit/rest": "^20.1.1",
"axios": "^1.7.4",
"debug": "^4.3.6",
"picocolors": "^1.0.1"
}
},
"vm2": {
"version": "3.9.9",
"resolved": "https://registry.npmjs.org/vm2/-/vm2-3.9.9.tgz",
......@@ -8526,15 +8885,15 @@
"dev": true
},
"vue": {
"version": "3.5.0",
"resolved": "https://registry.npmjs.org/vue/-/vue-3.5.0.tgz",
"integrity": "sha512-1t70favYoFijwfWJ7g81aTd32obGaAnKYE9FNyMgnEzn3F4YncRi/kqAHHKloG0VXTD8vBYMhbgLKCA+Sk6QDw==",
"version": "3.5.3",
"resolved": "https://registry.npmjs.org/vue/-/vue-3.5.3.tgz",
"integrity": "sha512-xvRbd0HpuLovYbOHXRHlSBsSvmUJbo0pzbkKTApWnQGf3/cu5Z39mQeA5cZdLRVIoNf3zI6MSoOgHUT5i2jO+Q==",
"requires": {
"@vue/compiler-dom": "3.5.0",
"@vue/compiler-sfc": "3.5.0",
"@vue/runtime-dom": "3.5.0",
"@vue/server-renderer": "3.5.0",
"@vue/shared": "3.5.0"
"@vue/compiler-dom": "3.5.3",
"@vue/compiler-sfc": "3.5.3",
"@vue/runtime-dom": "3.5.3",
"@vue/server-renderer": "3.5.3",
"@vue/shared": "3.5.3"
}
},
"vue-eslint-parser": {
......@@ -8579,13 +8938,13 @@
}
},
"vue-tsc": {
"version": "2.1.4",
"resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-2.1.4.tgz",
"integrity": "sha512-XTzMXQcsixAvNbpou/9qngEsZawaiJRZH3Ja+lfgRfv2A1TJv9vnZ/Kyv7XxPqv/TaZVFSnjGpM87VbWIg6yQg==",
"version": "2.1.6",
"resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-2.1.6.tgz",
"integrity": "sha512-f98dyZp5FOukcYmbFpuSCJ4Z0vHSOSmxGttZJCsFeX0M4w/Rsq0s4uKXjcSRsZqsRgQa6z7SfuO+y0HVICE57Q==",
"dev": true,
"requires": {
"@volar/typescript": "~2.4.1",
"@vue/language-core": "2.1.4",
"@vue/language-core": "2.1.6",
"semver": "^7.5.4"
}
},
......
......@@ -18,11 +18,11 @@
"@tinymce/tinymce-vue": "^6.0.1",
"axios": "^1.7.7",
"blueimp-md5": "^2.19.0",
"element-plus": "^2.8.0",
"element-plus": "^2.8.2",
"file-saver": "^2.0.5",
"pinia": "^2.2.2",
"qs": "^6.13.0",
"vue": "^3.5.1",
"vue": "^3.5.3",
"vue-router": "^4.4.3"
},
"devDependencies": {
......@@ -43,6 +43,7 @@
"typescript": "~5.4.5",
"unplugin-auto-import": "^0.18.2",
"vite": "^5.4.3",
"vite-plugin-mkcert": "^1.17.6",
"vue-tsc": "^2.1.6"
}
}
......@@ -34,3 +34,7 @@ export function uploadFile(data: Record<string, any>) {
export function deleteComment(data: { id: string }) {
return httpRequest.post('/api/psp/backend/comment/delete', data)
}
export function getCourseTypeList(params?: { page_size?: number; page?: number }) {
return httpRequest.get('/api/psp/backend-v2/course-category/index', { params })
}
......@@ -12,7 +12,8 @@ import {
Picture,
Files,
// VideoCamera,
Notebook
Notebook,
Filter
// Goods
// DishDot,
// QuestionFilled,
......@@ -32,6 +33,7 @@ const menuList: IMenuItem[] = [
{ name: '导师管理', path: '/lecturer', icon: School },
{ name: '广告管理', path: '/banner', icon: Picture },
{ name: '课程管理', path: '/course', icon: Notebook },
{ name: '课程类型', path: '/types', icon: Filter },
{ name: '消息管理', path: '/doc', icon: Files }
// { name: '视频管理', path: '/video', icon: VideoCamera },
// { name: '推荐课程', path: '/course/recommend', icon: Goods }
......
import { getCourseTypeList } from '@/api/base'
interface ICourseType {
id: string
name: string
}
export function useCourseTypes() {
const types = ref<ICourseType[]>([])
const fetchList = () => {
getCourseTypeList({ page_size: 100 }).then(res => {
types.value = res.data.list || []
})
}
onMounted(() => {
fetchList()
})
return { types }
}
......@@ -2,6 +2,9 @@
import { ElMessage } from 'element-plus'
import type { FormInstance } from 'element-plus'
import { updateCourse } from '../api'
import { useCourseTypes } from '@/composabels/useCourseTypes'
const { types } = useCourseTypes()
const props = defineProps<{ data: Record<string, any> }>()
......@@ -33,11 +36,11 @@ function update() {
emit('success', res.data)
})
}
const categoryList = [
{ label: '财富管理基础知识', value: '1' },
{ label: '金融投资工具', value: '2' },
{ label: '财富管理务实应用', value: '3' }
]
// const categoryList = [
// { label: '财富管理基础知识', value: '1' },
// { label: '金融投资工具', value: '2' },
// { label: '财富管理务实应用', value: '3' }
// ]
</script>
<template>
......@@ -50,9 +53,12 @@ const categoryList = [
<el-input v-model="form.times" placeholder="请输入" />
</el-form-item>
<el-form-item label="课程类型" prop="category">
<el-radio-group v-model="form.category">
<el-select v-model="form.category">
<el-option v-for="item in types" :label="item.name" :value="item.id" :key="item.id"></el-option>
</el-select>
<!-- <el-radio-group v-model="form.category">
<el-radio v-for="item in categoryList" :key="item.value" :label="item.label" :value="item.value"></el-radio>
</el-radio-group>
</el-radio-group> -->
</el-form-item>
<el-form-item label="是否显示" prop="status">
<el-switch v-model="form.status" active-text="显示" active-value="2" inactive-text="不显示" inactive-value="1" />
......
......@@ -20,7 +20,7 @@ const listOptions = {
label: '授课教师',
prop: 'course_lectures',
computed({ row }: { row: any }) {
return row.course_lectures.map((item: any) => item.lecturer_name).join(',')
return row.course_lectures?.map((item: any) => item.lecturer_name).join(',')
}
},
{ label: '课程描述', prop: 'course_represent', slots: 'table-desc' },
......
......@@ -41,11 +41,23 @@ export function exportUser(params?: { name?: string; mobile?: string }) {
}
// 学员关联课程时课程列表
export function getUserCourseList(params: { type: 'new' | 'old'; sso_id: string; category?: string; page?: number; page_size?: number }) {
export function getUserCourseList(params: { type: 'new' | 'old'; sso_id: string; category?: string; course_name?: string; page?: number; page_size?: number }) {
return httpRequest.get('/api/psp/backend-v2/user/courses', { params })
}
// 学员关联课程时课程列表
export function updateUserCourse(data: { sso_id: string; course_id: string; type: 'add' | 'delete' }) {
export function updateUserCourse(data: { sso_id: string; course_id: string; type: 'add' | 'delete'; expiration_date?: string }) {
return httpRequest.post('/api/psp/backend-v2/user/relation', data)
}
// 批量导入用户
export function importUser(data: { file: File }) {
return httpRequest.post('/api/psp/backend-v2/user/import-excel', data, {
headers: { 'Content-Type': 'multipart/form-data' }
})
}
// 导入进度
export function importUserTasks() {
return httpRequest.get('/api/psp/backend-v2/user/import-tasks')
}
<script setup>
import { Upload } from '@element-plus/icons-vue'
import { ElMessage } from 'element-plus'
import { useFileDialog } from '@vueuse/core'
import { importUser } from '../api'
const emit = defineEmits(['success'])
const { files, open } = useFileDialog({
multiple: false,
accept: '.csv, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel'
})
const attrs = useAttrs()
const handleSubmit = async () => {
if (!files.value?.length) return
const [file] = files.value
await importUser({ file })
ElMessage.success('导入成功')
emit('success')
attrs['onUpdate:modelValue'](false)
}
</script>
<template>
<el-dialog title="批量导入学员" width="600px">
<div style="display: flex; align-items: center; gap: 10px">
<el-button :icon="Upload" type="primary" @click="open()">上传文件</el-button>
<p v-for="file in files" :key="file.name">{{ file.name }}</p>
</div>
<p style="margin-top: 20px">
<a href="/api/psp/backend-v2/user/download-excel" download="批量导入模板" style="color: blue">下载批量导入模板</a>
</p>
<template #footer>
<el-button @click="$emit('update:modelValue', false)">取消</el-button>
<el-button type="primary" @click="handleSubmit">导入</el-button>
</template>
</el-dialog>
</template>
<script lang="ts" setup>
import { importUserTasks } from '../api'
const listOptions = {
remote: {
httpRequest: importUserTasks
},
columns: [
{ label: '序号', type: 'index', width: 60 },
{ label: '文件名', prop: 'file_name' },
{ label: '学员数量', prop: 'nums' },
{ label: '批量导入时间', prop: 'created_time' },
{ label: '导入结果', prop: 'result' }
]
}
</script>
<template>
<el-dialog title="查看导入进度" width="800px">
<AppList v-bind="listOptions"></AppList>
</el-dialog>
</template>
<script setup lang="ts">
import { getUserCourseList, updateUserCourse } from '../api'
import DialogCourseAdd from './DialogCourseAdd.vue'
import DialogCourseDate from './DialogCourseDate.vue'
const props = defineProps<{ data: Record<string, any> }>()
......@@ -21,7 +22,8 @@ const listOptions = {
}
},
{ label: '学习进度', prop: 'percent' },
{ label: '操作', slots: 'table-x', width: 100 }
{ label: '有效期', prop: 'expiration_date' },
{ label: '操作', slots: 'table-x', width: 170 }
]
}
......@@ -35,6 +37,12 @@ const handleRemove = async (row: any) => {
await updateUserCourse({ sso_id: props.data.sso_id, course_id: row.id, type: 'delete' })
handleRefresh()
}
const currentRow = ref(null)
const dialogDateVisible = ref(false)
const handleDate = (row: any) => {
currentRow.value = row
dialogDateVisible.value = true
}
</script>
<template>
......@@ -47,8 +55,15 @@ const handleRemove = async (row: any) => {
<AppList v-bind="listOptions" ref="appList">
<template #table-x="{ row }">
<el-button text type="primary" @click="handleRemove(row)">删除</el-button>
<el-button text type="primary" @click="handleDate(row)">有效期</el-button>
</template>
</AppList>
<DialogCourseAdd v-model="dialogVisible" :data="data" @close="handleRefresh"></DialogCourseAdd>
<DialogCourseDate
v-model="dialogDateVisible"
:data="data"
:course="currentRow"
@success="handleRefresh"
v-if="dialogDateVisible && currentRow"></DialogCourseDate>
</el-dialog>
</template>
<script setup lang="ts">
import { getUserCourseList, updateUserCourse } from '../api'
import { useCourseTypes } from '@/composabels/useCourseTypes'
const props = defineProps<{ data: Record<string, any> }>()
const appList = ref()
const listOptions = {
remote: { httpRequest: getUserCourseList, params: { sso_id: props.data.sso_id, type: 'new' } },
columns: [
{ label: '序号', type: 'index', width: 60 },
{ label: '课程名称', prop: 'course_name' },
{ label: '课程类型', prop: 'category_name' },
{ label: '操作', slots: 'table-x', width: 100 }
]
}
const { types } = useCourseTypes()
const listOptions = computed(() => {
return {
remote: { httpRequest: getUserCourseList, params: { sso_id: props.data.sso_id, type: 'new', course_name: '', category: '' } },
filters: [
{ prop: 'category', type: 'select', options: types.value, labelKey: 'name', valueKey: 'id' },
{ prop: 'course_name', type: 'input' }
],
columns: [
{ label: '序号', type: 'index', width: 60 },
{ label: '课程名称', prop: 'course_name' },
{ label: '课程类型', prop: 'category_name' },
{ label: '操作', slots: 'table-x', width: 100 }
]
}
})
const handleAdd = async (row: any) => {
await updateUserCourse({ sso_id: props.data.sso_id, course_id: row.id, type: 'add' })
......
<script setup lang="ts">
import { ElMessage } from 'element-plus'
import { updateUserCourse } from '../api'
const props = defineProps<{ data: Record<string, any>; course: Record<string, any> }>()
const emit = defineEmits(['update:modelValue', 'success'])
const form = reactive({
expiration_date: ''
})
watchEffect(() => {
Object.assign(form, props.course)
})
const handleAdd = async () => {
await updateUserCourse({ sso_id: props.data.sso_id, course_id: props.course.id, type: 'add', expiration_date: form.expiration_date })
ElMessage.success('更新成功')
emit('success')
emit('update:modelValue', false)
}
</script>
<template>
<el-dialog title="课程有效期" :close-on-click-modal="false" width="400px" @update:modelValue="$emit('update:modelValue')">
<el-row justify="space-evenly" style="margin: 10px">
<div>姓名:{{ data.name }}</div>
<div>手机号:{{ data.mobile }}</div>
</el-row>
<el-form style="text-align: center; margin: 40px">
<el-form-item label="课程有效期">
<el-date-picker v-model="form.expiration_date" value-format="YYYY-MM-DD" style="width: 100%"></el-date-picker>
</el-form-item>
</el-form>
<template #footer>
<el-button @click="$emit('update:modelValue', false)">取消</el-button>
<el-button type="primary" @click="handleAdd">保存</el-button>
</template>
</el-dialog>
</template>
......@@ -5,6 +5,9 @@ import { getUserList, syncUser, exportUser } from '../api'
// import qs from 'qs'
import DialogForm from '../components/DialogForm.vue'
import DialogCourse from '../components/DialogCourse.vue'
import DialogImport from '../components/DIalogImport.vue'
import DialogImportView from '../components/DIalogImportView.vue'
const listParams = reactive({ name: '', mobile: '' })
const appList = ref()
......@@ -61,14 +64,19 @@ const handleCourse = (row: any) => {
currentRow.value = row
dialogCourseVisible.value = true
}
const dialogImportVisible = ref(false)
const dialogImportViewVisible = ref(false)
</script>
<template>
<AppCard>
<AppList v-bind="listOptions" ref="appList">
<template #header-aside>
<el-button type="primary" @click="onSyncUser" v-if="false">同步</el-button>
<el-button type="primary" @click="handleAdd">添加学员</el-button>
<el-button type="primary" @click="dialogImportVisible = true">批量导入学员</el-button>
<el-button type="primary" @click="dialogImportViewVisible = true">查看导入进度</el-button>
<el-button type="primary" @click="onSyncUser" v-if="false">同步</el-button>
<el-button type="primary" @click="handleExport">导出</el-button>
</template>
<template #table-label="{ row }">
......@@ -86,5 +94,7 @@ const handleCourse = (row: any) => {
</AppList>
<DialogForm v-model="dialogVisible" @success="handleSuccess" v-if="dialogVisible"></DialogForm>
<DialogCourse v-model="dialogCourseVisible" :data="currentRow" v-if="dialogCourseVisible"></DialogCourse>
<DialogImport v-model="dialogImportVisible" @success="handleSuccess" v-if="dialogImportVisible"></DialogImport>
<DialogImportView v-model="dialogImportViewVisible" v-if="dialogImportViewVisible"></DialogImportView>
</AppCard>
</template>
import httpRequest from '@/utils/axios'
// 获取课程类型列表
export function getTypesList(params?: { page?: number; page_size?: number }) {
return httpRequest.get('/api/psp/backend-v2/course-category/index', { params })
}
// 创建课程类型
export function createTypes(data: { name: string }) {
return httpRequest.post('/api/psp/backend-v2/course-category/create', data)
}
// 更新课程类型
export function updateTypes(data: { id: string; name: string }) {
return httpRequest.post('/api/psp/backend-v2/course-category/update', data)
}
// 获取课程类型详情
export function getTypes(params: { id: string }) {
return httpRequest.get('/api/psp/backend-v2/course-category/view', { params })
}
// 删除课程类型
export function deleteTypes(data: { id: string }) {
return httpRequest.post('/api/psp/backend-v2/course-category/delete', data)
}
<script setup lang="ts">
import { ElMessage } from 'element-plus'
import type { FormInstance } from 'element-plus'
import { createTypes, updateTypes } from '../api'
const props = defineProps<{ data?: Record<string, any> }>()
const emit = defineEmits(['update:modelValue', 'success'])
const formRef = ref<FormInstance>()
const form = reactive({
name: ''
})
watchEffect(() => {
Object.assign(form, props.data)
})
const rules = {
name: [{ required: true, message: '请输入课程类别名称', trigger: 'blur' }]
}
// 提交
async function onSubmit() {
if (!formRef.value) return
await formRef.value.validate()
props.data ? update() : create()
}
// 创建课程
function create() {
createTypes(form).then(res => {
ElMessage.success('创建成功')
emit('update:modelValue', false)
emit('success', res.data)
})
}
// 更新课程
function update() {
updateTypes({ ...form, id: props.data?.id }).then(res => {
ElMessage.success('更新成功')
emit('update:modelValue', false)
emit('success', res.data)
})
}
</script>
<template>
<el-dialog title="添加课程类别" :close-on-click-modal="false" width="600px" @update:modelValue="$emit('update:modelValue')">
<el-form ref="formRef" :model="form" :rules="rules" label-position="top">
<el-form-item label="课程类别名称" prop="name">
<el-input v-model="form.name" placeholder="请输入" />
</el-form-item>
</el-form>
<template #footer>
<el-button text @click="emit('update:modelValue', false)">取消</el-button>
<el-button type="primary" @click="onSubmit">保存</el-button>
</template>
</el-dialog>
</template>
import type { RouteRecordRaw } from 'vue-router'
import AppLayout from '@/components/layout/Index.vue'
export const routes: Array<RouteRecordRaw> = [
{
path: '/types',
component: AppLayout,
children: [
{ path: '', component: () => import('./views/List.vue') },
{ path: 'create', component: () => import('./views/Update.vue') },
{ path: 'update/:id', component: () => import('./views/Update.vue'), props: true }
]
}
]
<script setup lang="ts">
import { ElMessage, ElMessageBox } from 'element-plus'
import { getTypesList, deleteTypes } from '../api'
import DialogForm from '../components/DialogForm.vue'
const appList = ref()
const listOptions = {
remote: {
httpRequest: getTypesList
},
columns: [
{ label: 'ID', prop: 'id' },
{ label: '课程类别', prop: 'name' },
{ label: '操作', slots: 'table-operate', width: 160 }
]
}
const onRemove = (row: any) => {
ElMessageBox.confirm('确定要删除吗?', '提示').then(() => {
deleteTypes({ id: row.id }).then(() => {
ElMessage({ type: 'success', message: '删除成功' })
handleRefresh()
})
})
}
// 刷新
const handleRefresh = () => {
appList.value?.refetch()
}
const currentRow = ref<any>()
// 更新
const dialogVisible = ref<boolean>(false)
const handleAdd = () => {
currentRow.value = null
dialogVisible.value = true
}
const handleUpdate = (row: any) => {
currentRow.value = row
dialogVisible.value = true
}
</script>
<template>
<AppCard>
<AppList v-bind="listOptions" ref="appList">
<template #header-aside>
<el-button type="primary" @click="handleAdd">创建</el-button>
</template>
<template #table-operate="{ row }">
<el-space>
<el-button plain @click="handleUpdate(row)">编辑</el-button>
<el-button type="danger" plain @click="onRemove(row)">删除</el-button>
</el-space>
</template>
</AppList>
<DialogForm v-model="dialogVisible" :data="currentRow" @success="handleRefresh" v-if="dialogVisible"></DialogForm>
</AppCard>
</template>
<script setup lang="ts">
import { ElMessage } from 'element-plus'
import type { FormInstance } from 'element-plus'
// import AppEditor from '@/components/tinymce/Index.vue'
import { createTypes, updateTypes, getTypes } from '../api'
const props = defineProps<{ id?: string }>()
const router = useRouter()
const formRef = ref<FormInstance>()
const form = reactive({ name: '' })
const rules = {
name: [{ required: true, message: '请输入姓名', trigger: 'blur' }]
}
// 提交
const onSubmit = () => {
if (!formRef.value) return
formRef.value.validate().then(() => {
props.id ? update() : create()
})
}
// 取消
const onCancel = () => {
router.replace('/types')
}
// 创建
const create = () => {
createTypes(form).then(() => {
ElMessage({ message: '创建成功', type: 'success' })
router.push('/types')
})
}
// 修改
const update = () => {
const params = { ...form, id: props.id as string }
updateTypes(params).then(() => {
ElMessage({ message: '修改成功', type: 'success' })
router.push('/types')
})
}
onMounted(() => {
props.id &&
getTypes({ id: props.id }).then(res => {
Object.assign(form, res.data)
})
})
</script>
<template>
<AppCard>
<el-form ref="formRef" :model="form" :rules="rules" label-width="120px">
<el-form-item label="姓名" prop="name">
<el-input v-model="form.name" />
</el-form-item>
<el-form-item>
<el-button type="primary" auto-insert-space @click="onSubmit">保存</el-button>
<el-button auto-insert-space @click="onCancel">取消</el-button>
</el-form-item>
</el-form>
</AppCard>
</template>
import fs from 'fs'
import path from 'path'
// import fs from 'fs'
// import path from 'path'
import { fileURLToPath, URL } from 'url'
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import AutoImport from 'unplugin-auto-import/vite'
import mkcert from 'vite-plugin-mkcert'
export default defineConfig(({ mode }) => {
return {
base: mode === 'prod' ? 'https://webapp-pub.ezijing.com/website/prod/wmpc-center/' : '/',
plugins: [vue(), AutoImport({ imports: ['vue', 'vue-router'], dts: true, eslintrc: { enabled: true } })],
plugins: [vue(), AutoImport({ imports: ['vue', 'vue-router'], dts: true, eslintrc: { enabled: true } }), mkcert()],
server: {
open: true,
host: 'dev.ezijing.com',
https: {
key: fs.readFileSync(path.join(__dirname, './https/ezijing.com.key')),
cert: fs.readFileSync(path.join(__dirname, './https/ezijing.com.pem'))
},
// https: {
// key: fs.readFileSync(path.join(__dirname, './https/ezijing.com.key')),
// cert: fs.readFileSync(path.join(__dirname, './https/ezijing.com.pem'))
// },
proxy: {
'/api': 'https://psp-center.ezijing.com'
}
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论