completepage: 🍻 主页修改完成

This commit is contained in:
Bunny 2024-10-26 01:12:17 +08:00
parent 7bff41b0bc
commit 6b88a7b154
18 changed files with 1117 additions and 573 deletions

View File

@ -74,9 +74,11 @@
"el-table-infinite-scroll": "^3.0.3",
"element-plus": "2.7.1",
"intro.js": "^7.2.0",
"js-base64": "^3.7.7",
"js-cookie": "^3.0.5",
"jsbarcode": "^3.11.6",
"localforage": "^1.10.0",
"md-editor-v3": "^4.21.1",
"mint-filter": "^4.0.3",
"mitt": "^3.0.1",
"mqtt": "4.3.7",

View File

@ -83,6 +83,9 @@ importers:
intro.js:
specifier: ^7.2.0
version: 7.2.0
js-base64:
specifier: ^3.7.7
version: 3.7.7
js-cookie:
specifier: ^3.0.5
version: 3.0.5
@ -92,6 +95,9 @@ importers:
localforage:
specifier: ^1.10.0
version: 1.10.0
md-editor-v3:
specifier: ^4.21.1
version: 4.21.1(@codemirror/view@6.34.1)(@lezer/common@1.2.3)(vue@3.4.38(typescript@5.5.4))
mint-filter:
specifier: ^4.0.3
version: 4.0.3
@ -628,6 +634,98 @@ packages:
'@bcoe/v8-coverage@0.2.3':
resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==}
'@codemirror/autocomplete@6.18.1':
resolution: {integrity: sha512-iWHdj/B1ethnHRTwZj+C1obmmuCzquH29EbcKr0qIjA9NfDeBDJ7vs+WOHsFeLeflE4o+dHfYndJloMKHUkWUA==}
peerDependencies:
'@codemirror/language': ^6.0.0
'@codemirror/state': ^6.0.0
'@codemirror/view': ^6.0.0
'@lezer/common': ^1.0.0
'@codemirror/commands@6.7.1':
resolution: {integrity: sha512-llTrboQYw5H4THfhN4U3qCnSZ1SOJ60ohhz+SzU0ADGtwlc533DtklQP0vSFaQuCPDn3BPpOd1GbbnUtwNjsrw==}
'@codemirror/lang-angular@0.1.3':
resolution: {integrity: sha512-xgeWGJQQl1LyStvndWtruUvb4SnBZDAu/gvFH/ZU+c0W25tQR8e5hq7WTwiIY2dNxnf+49mRiGI/9yxIwB6f5w==}
'@codemirror/lang-cpp@6.0.2':
resolution: {integrity: sha512-6oYEYUKHvrnacXxWxYa6t4puTlbN3dgV662BDfSH8+MfjQjVmP697/KYTDOqpxgerkvoNm7q5wlFMBeX8ZMocg==}
'@codemirror/lang-css@6.3.0':
resolution: {integrity: sha512-CyR4rUNG9OYcXDZwMPvJdtb6PHbBDKUc/6Na2BIwZ6dKab1JQqKa4di+RNRY9Myn7JB81vayKwJeQ7jEdmNVDA==}
'@codemirror/lang-go@6.0.1':
resolution: {integrity: sha512-7fNvbyNylvqCphW9HD6WFnRpcDjr+KXX/FgqXy5H5ZS0eC5edDljukm/yNgYkwTsgp2busdod50AOTIy6Jikfg==}
'@codemirror/lang-html@6.4.9':
resolution: {integrity: sha512-aQv37pIMSlueybId/2PVSP6NPnmurFDVmZwzc7jszd2KAF8qd4VBbvNYPXWQq90WIARjsdVkPbw29pszmHws3Q==}
'@codemirror/lang-java@6.0.1':
resolution: {integrity: sha512-OOnmhH67h97jHzCuFaIEspbmsT98fNdhVhmA3zCxW0cn7l8rChDhZtwiwJ/JOKXgfm4J+ELxQihxaI7bj7mJRg==}
'@codemirror/lang-javascript@6.2.2':
resolution: {integrity: sha512-VGQfY+FCc285AhWuwjYxQyUQcYurWlxdKYT4bqwr3Twnd5wP5WSeu52t4tvvuWmljT4EmgEgZCqSieokhtY8hg==}
'@codemirror/lang-json@6.0.1':
resolution: {integrity: sha512-+T1flHdgpqDDlJZ2Lkil/rLiRy684WMLc74xUnjJH48GQdfJo/pudlTRreZmKwzP8/tGdKf83wlbAdOCzlJOGQ==}
'@codemirror/lang-less@6.0.2':
resolution: {integrity: sha512-EYdQTG22V+KUUk8Qq582g7FMnCZeEHsyuOJisHRft/mQ+ZSZ2w51NupvDUHiqtsOy7It5cHLPGfHQLpMh9bqpQ==}
'@codemirror/lang-liquid@6.2.1':
resolution: {integrity: sha512-J1Mratcm6JLNEiX+U2OlCDTysGuwbHD76XwuL5o5bo9soJtSbz2g6RU3vGHFyS5DC8rgVmFSzi7i6oBftm7tnA==}
'@codemirror/lang-markdown@6.3.0':
resolution: {integrity: sha512-lYrI8SdL/vhd0w0aHIEvIRLRecLF7MiiRfzXFZY94dFwHqC9HtgxgagJ8fyYNBldijGatf9wkms60d8SrAj6Nw==}
'@codemirror/lang-php@6.0.1':
resolution: {integrity: sha512-ublojMdw/PNWa7qdN5TMsjmqkNuTBD3k6ndZ4Z0S25SBAiweFGyY68AS3xNcIOlb6DDFDvKlinLQ40vSLqf8xA==}
'@codemirror/lang-python@6.1.6':
resolution: {integrity: sha512-ai+01WfZhWqM92UqjnvorkxosZ2aq2u28kHvr+N3gu012XqY2CThD67JPMHnGceRfXPDBmn1HnyqowdpF57bNg==}
'@codemirror/lang-rust@6.0.1':
resolution: {integrity: sha512-344EMWFBzWArHWdZn/NcgkwMvZIWUR1GEBdwG8FEp++6o6vT6KL9V7vGs2ONsKxxFUPXKI0SPcWhyYyl2zPYxQ==}
'@codemirror/lang-sass@6.0.2':
resolution: {integrity: sha512-l/bdzIABvnTo1nzdY6U+kPAC51czYQcOErfzQ9zSm9D8GmNPD0WTW8st/CJwBTPLO8jlrbyvlSEcN20dc4iL0Q==}
'@codemirror/lang-sql@6.8.0':
resolution: {integrity: sha512-aGLmY4OwGqN3TdSx3h6QeA1NrvaYtF7kkoWR/+W7/JzB0gQtJ+VJxewlnE3+VImhA4WVlhmkJr109PefOOhjLg==}
'@codemirror/lang-vue@0.1.3':
resolution: {integrity: sha512-QSKdtYTDRhEHCfo5zOShzxCmqKJvgGrZwDQSdbvCRJ5pRLWBS7pD/8e/tH44aVQT6FKm0t6RVNoSUWHOI5vNug==}
'@codemirror/lang-wast@6.0.2':
resolution: {integrity: sha512-Imi2KTpVGm7TKuUkqyJ5NRmeFWF7aMpNiwHnLQe0x9kmrxElndyH0K6H/gXtWwY6UshMRAhpENsgfpSwsgmC6Q==}
'@codemirror/lang-xml@6.1.0':
resolution: {integrity: sha512-3z0blhicHLfwi2UgkZYRPioSgVTo9PV5GP5ducFH6FaHy0IAJRg+ixj5gTR1gnT/glAIC8xv4w2VL1LoZfs+Jg==}
'@codemirror/lang-yaml@6.1.1':
resolution: {integrity: sha512-HV2NzbK9bbVnjWxwObuZh5FuPCowx51mEfoFT9y3y+M37fA3+pbxx4I7uePuygFzDsAmCTwQSc/kXh/flab4uw==}
'@codemirror/language-data@6.5.1':
resolution: {integrity: sha512-0sWxeUSNlBr6OmkqybUTImADFUP0M3P0IiSde4nc24bz/6jIYzqYSgkOSLS+CBIoW1vU8Q9KUWXscBXeoMVC9w==}
'@codemirror/language@6.10.3':
resolution: {integrity: sha512-kDqEU5sCP55Oabl6E7m5N+vZRoc0iWqgDVhEKifcHzPzjqCegcO4amfrYVL9PmPZpl4G0yjkpTpUO/Ui8CzO8A==}
'@codemirror/legacy-modes@6.4.1':
resolution: {integrity: sha512-vdg3XY7OAs5uLDx2Iw+cGfnwtd7kM+Et/eMsqAGTfT/JKiVBQZXosTzjEbWAi/FrY6DcQIz8mQjBozFHZEUWQA==}
'@codemirror/lint@6.8.2':
resolution: {integrity: sha512-PDFG5DjHxSEjOXk9TQYYVjZDqlZTFaDBfhQixHnQOEVDDNHUbEh/hstAjcQJaA6FQdZTD1hquXTK0rVBLADR1g==}
'@codemirror/search@6.5.6':
resolution: {integrity: sha512-rpMgcsh7o0GuCDUXKPvww+muLA1pDJaFrpq/CCHtpQJYz8xopu4D1hPcKRoDD0YlF8gZaqTNIRa4VRBWyhyy7Q==}
'@codemirror/state@6.4.1':
resolution: {integrity: sha512-QkEyUiLhsJoZkbumGZlswmAhA7CBU02Wrz7zvH4SrcifbsqwlXShVXg65f3v/ts57W3dqyamEriMhij1Z3Zz4A==}
'@codemirror/view@6.34.1':
resolution: {integrity: sha512-t1zK/l9UiRqwUNPm+pdIT0qzJlzuVckbTEMVNFhfWkGiBQClstzg+78vedCvLSX0xJEZ6lwZbPpnljL7L6iwMQ==}
'@commitlint/cli@17.8.1':
resolution: {integrity: sha512-ay+WbzQesE0Rv4EQKfNbSMiJJ12KdKTDzIt0tcK4k11FdsWmtwP0Kp1NWMOUswfIWo6Eb7p7Ln721Nx9FLNBjg==}
engines: {node: '>=v14'}
@ -1140,6 +1238,57 @@ packages:
'@jridgewell/trace-mapping@0.3.9':
resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==}
'@lezer/common@1.2.3':
resolution: {integrity: sha512-w7ojc8ejBqr2REPsWxJjrMFsA/ysDCFICn8zEOR9mrqzOu2amhITYuLD8ag6XZf0CFXDrhKqw7+tW8cX66NaDA==}
'@lezer/cpp@1.1.2':
resolution: {integrity: sha512-macwKtyeUO0EW86r3xWQCzOV9/CF8imJLpJlPv3sDY57cPGeUZ8gXWOWNlJr52TVByMV3PayFQCA5SHEERDmVQ==}
'@lezer/css@1.1.9':
resolution: {integrity: sha512-TYwgljcDv+YrV0MZFFvYFQHCfGgbPMR6nuqLabBdmZoFH3EP1gvw8t0vae326Ne3PszQkbXfVBjCnf3ZVCr0bA==}
'@lezer/go@1.0.0':
resolution: {integrity: sha512-co9JfT3QqX1YkrMmourYw2Z8meGC50Ko4d54QEcQbEYpvdUvN4yb0NBZdn/9ertgvjsySxHsKzH3lbm3vqJ4Jw==}
'@lezer/highlight@1.2.1':
resolution: {integrity: sha512-Z5duk4RN/3zuVO7Jq0pGLJ3qynpxUVsh7IbUbGj88+uV2ApSAn6kWg2au3iJb+0Zi7kKtqffIESgNcRXWZWmSA==}
'@lezer/html@1.3.10':
resolution: {integrity: sha512-dqpT8nISx/p9Do3AchvYGV3qYc4/rKr3IBZxlHmpIKam56P47RSHkSF5f13Vu9hebS1jM0HmtJIwLbWz1VIY6w==}
'@lezer/java@1.1.3':
resolution: {integrity: sha512-yHquUfujwg6Yu4Fd1GNHCvidIvJwi/1Xu2DaKl/pfWIA2c1oXkVvawH3NyXhCaFx4OdlYBVX5wvz2f7Aoa/4Xw==}
'@lezer/javascript@1.4.19':
resolution: {integrity: sha512-j44kbR1QL26l6dMunZ1uhKBFteVGLVCBGNUD2sUaMnic+rbTviVuoK0CD1l9FTW31EueWvFFswCKMH7Z+M3JRA==}
'@lezer/json@1.0.2':
resolution: {integrity: sha512-xHT2P4S5eeCYECyKNPhr4cbEL9tc8w83SPwRC373o9uEdrvGKTZoJVAGxpOsZckMlEh9W23Pc72ew918RWQOBQ==}
'@lezer/lr@1.4.2':
resolution: {integrity: sha512-pu0K1jCIdnQ12aWNaAVU5bzi7Bd1w54J3ECgANPmYLtQKP0HBj2cE/5coBD66MT10xbtIuUr7tg0Shbsvk0mDA==}
'@lezer/markdown@1.3.1':
resolution: {integrity: sha512-DGlzU/i8DC8k0uz1F+jeePrkATl0jWakauTzftMQOcbaMkHbNSRki/4E2tOzJWsVpoKYhe7iTJ03aepdwVUXUA==}
'@lezer/php@1.0.2':
resolution: {integrity: sha512-GN7BnqtGRpFyeoKSEqxvGvhJQiI4zkgmYnDk/JIyc7H7Ifc1tkPnUn/R2R8meH3h/aBf5rzjvU8ZQoyiNDtDrA==}
'@lezer/python@1.1.14':
resolution: {integrity: sha512-ykDOb2Ti24n76PJsSa4ZoDF0zH12BSw1LGfQXCYJhJyOGiFTfGaX0Du66Ze72R+u/P35U+O6I9m8TFXov1JzsA==}
'@lezer/rust@1.0.2':
resolution: {integrity: sha512-Lz5sIPBdF2FUXcWeCu1//ojFAZqzTQNRga0aYv6dYXqJqPfMdCAI0NzajWUd4Xijj1IKJLtjoXRPMvTKWBcqKg==}
'@lezer/sass@1.0.7':
resolution: {integrity: sha512-8HLlOkuX/SMHOggI2DAsXUw38TuURe+3eQ5hiuk9QmYOUyC55B1dYEIMkav5A4IELVaW4e1T4P9WRiI5ka4mdw==}
'@lezer/xml@1.0.5':
resolution: {integrity: sha512-VFouqOzmUWfIg+tfmpcdV33ewtK+NSwd4ngSe1aG7HFb4BN0ExyY1b8msp+ndFrnlG4V4iC8yXacjFtrwERnaw==}
'@lezer/yaml@1.0.3':
resolution: {integrity: sha512-GuBLekbw9jDBDhGur82nuwkxKQ+a3W5H0GfaAthDXcAu+XdpS43VlnxA9E9hllkpSP5ellRDKjLLj7Lu9Wr6xA==}
'@logicflow/core@1.2.28':
resolution: {integrity: sha512-xj9zxYsudK9YLI2UrUa9mXWd4tp8z56Rx4il9Fc/baUWEDwogjqCgblSKepGxEgTX2XX2fQIfUrzqEUoWu2VYQ==}
@ -1242,55 +1391,46 @@ packages:
resolution: {integrity: sha512-sWWgdQ1fq+XKrlda8PsMCfut8caFwZBmhYeoehJ05FdI0YZXk6ZyUjWLrIgbR/VgiGycrFKMMgp7eJ69HOF2pQ==}
cpu: [arm]
os: [linux]
libc: [glibc]
'@rollup/rollup-linux-arm-musleabihf@4.21.1':
resolution: {integrity: sha512-9OIiSuj5EsYQlmwhmFRA0LRO0dRRjdCVZA3hnmZe1rEwRk11Jy3ECGGq3a7RrVEZ0/pCsYWx8jG3IvcrJ6RCew==}
cpu: [arm]
os: [linux]
libc: [musl]
'@rollup/rollup-linux-arm64-gnu@4.21.1':
resolution: {integrity: sha512-0kuAkRK4MeIUbzQYu63NrJmfoUVicajoRAL1bpwdYIYRcs57iyIV9NLcuyDyDXE2GiZCL4uhKSYAnyWpjZkWow==}
cpu: [arm64]
os: [linux]
libc: [glibc]
'@rollup/rollup-linux-arm64-musl@4.21.1':
resolution: {integrity: sha512-/6dYC9fZtfEY0vozpc5bx1RP4VrtEOhNQGb0HwvYNwXD1BBbwQ5cKIbUVVU7G2d5WRE90NfB922elN8ASXAJEA==}
cpu: [arm64]
os: [linux]
libc: [musl]
'@rollup/rollup-linux-powerpc64le-gnu@4.21.1':
resolution: {integrity: sha512-ltUWy+sHeAh3YZ91NUsV4Xg3uBXAlscQe8ZOXRCVAKLsivGuJsrkawYPUEyCV3DYa9urgJugMLn8Z3Z/6CeyRQ==}
cpu: [ppc64]
os: [linux]
libc: [glibc]
'@rollup/rollup-linux-riscv64-gnu@4.21.1':
resolution: {integrity: sha512-BggMndzI7Tlv4/abrgLwa/dxNEMn2gC61DCLrTzw8LkpSKel4o+O+gtjbnkevZ18SKkeN3ihRGPuBxjaetWzWg==}
cpu: [riscv64]
os: [linux]
libc: [glibc]
'@rollup/rollup-linux-s390x-gnu@4.21.1':
resolution: {integrity: sha512-z/9rtlGd/OMv+gb1mNSjElasMf9yXusAxnRDrBaYB+eS1shFm6/4/xDH1SAISO5729fFKUkJ88TkGPRUh8WSAA==}
cpu: [s390x]
os: [linux]
libc: [glibc]
'@rollup/rollup-linux-x64-gnu@4.21.1':
resolution: {integrity: sha512-kXQVcWqDcDKw0S2E0TmhlTLlUgAmMVqPrJZR+KpH/1ZaZhLSl23GZpQVmawBQGVhyP5WXIsIQ/zqbDBBYmxm5w==}
cpu: [x64]
os: [linux]
libc: [glibc]
'@rollup/rollup-linux-x64-musl@4.21.1':
resolution: {integrity: sha512-CbFv/WMQsSdl+bpX6rVbzR4kAjSSBuDgCqb1l4J68UYsQNalz5wOqLGYj4ZI0thGpyX5kc+LLZ9CL+kpqDovZA==}
cpu: [x64]
os: [linux]
libc: [musl]
'@rollup/rollup-win32-arm64-msvc@4.21.1':
resolution: {integrity: sha512-3Q3brDgA86gHXWHklrwdREKIrIbxC0ZgU8lwpj0eEKGBQH+31uPqr0P2v11pn0tSIxHvcdOWxa4j+YvLNx1i6g==}
@ -1388,12 +1528,21 @@ packages:
'@types/js-cookie@3.0.6':
resolution: {integrity: sha512-wkw9yd1kEXOPnvEeEV1Go1MmxtBJL0RR79aOTAApecWFVu7w0NNXNqhcWgvw2YgZDYadliXkl14pa3WXw5jlCQ==}
'@types/linkify-it@5.0.0':
resolution: {integrity: sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==}
'@types/lodash-es@4.17.12':
resolution: {integrity: sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==}
'@types/lodash@4.17.7':
resolution: {integrity: sha512-8wTvZawATi/lsmNu10/j2hk1KEP0IvjubqPE3cu1Xz7xfXXt5oCq3SNUz4fMIP4XGF9Ky+Ue2tBA3hcS7LSBlA==}
'@types/markdown-it@14.1.2':
resolution: {integrity: sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==}
'@types/mdurl@2.0.0':
resolution: {integrity: sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==}
'@types/minimist@1.2.5':
resolution: {integrity: sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==}
@ -1520,6 +1669,9 @@ packages:
peerDependencies:
'@uppy/core': ^2.3.3
'@vavt/util@2.1.0':
resolution: {integrity: sha512-YIfAvArSFVXmWvoF+DEGD0FhkhVNcCtVWWkfYtj76eSrwHh/wuEEFhiEubg1XLNM3tChO8FH8xJCT/hnizjgFQ==}
'@vitejs/plugin-vue-jsx@3.1.0':
resolution: {integrity: sha512-w9M6F3LSEU5kszVb9An2/MmXNxocAnUb3WhRr8bHlimhDrXNt6n6D2nJQR3UXpGlZHh/EsgouOHCsM8V3Ln+WA==}
engines: {node: ^14.18.0 || >=16.0.0}
@ -2097,6 +2249,9 @@ packages:
resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==}
engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'}
codemirror@6.0.1:
resolution: {integrity: sha512-J8j+nZ+CdWmIeFIGXEFbFPtpiYacFMDR8GlHK3IyHQJMCaVRfGx9NT+Hxivv1ckLWPvNdZqndbr/7lVhrf/Svg==}
codepage@1.15.0:
resolution: {integrity: sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==}
engines: {node: '>=0.8'}
@ -2226,6 +2381,9 @@ packages:
convert-source-map@2.0.0:
resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
copy-to-clipboard@3.3.3:
resolution: {integrity: sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==}
core-js@3.38.1:
resolution: {integrity: sha512-OP35aUorbU3Zvlx7pjsFdu1rGNnD4pgw/CWoYzRY3t2EzoVT7shKHY1dlAy3f41cGIO7ZDPQimhGFTlEYkG/Hw==}
@ -2272,6 +2430,9 @@ packages:
create-require@1.1.1:
resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==}
crelt@1.0.6:
resolution: {integrity: sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==}
cropperjs@1.6.2:
resolution: {integrity: sha512-nhymn9GdnV3CqiEHJVai54TULFAE3VshJTXSqSJKa8yXAKyBKDWdhHarnlIPrshJ0WMFTGuFvG02YjLXfPiuOA==}
@ -2322,6 +2483,9 @@ packages:
engines: {node: '>=4'}
hasBin: true
cssfilter@0.0.10:
resolution: {integrity: sha512-FAaLDaplstoRsDR8XGYH51znUN0UY7nMc6Z9/fvE8EXGwvJE9hu7W2vHwx1+bd6gCYnln9nLbzxFTrcO9YQDZw==}
cssnano-preset-default@5.2.14:
resolution: {integrity: sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==}
engines: {node: ^10 || ^12 || >=14.0}
@ -3549,6 +3713,9 @@ packages:
resolution: {integrity: sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==}
hasBin: true
js-base64@3.7.7:
resolution: {integrity: sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw==}
js-cookie@3.0.5:
resolution: {integrity: sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==}
engines: {node: '>=14'}
@ -3668,6 +3835,9 @@ packages:
lines-and-columns@1.2.4:
resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
linkify-it@5.0.0:
resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==}
lint-staged@15.2.9:
resolution: {integrity: sha512-BZAt8Lk3sEnxw7tfxM7jeZlPRuT4M68O0/CwZhhaw6eeWu0Lz5eERE3m386InivXB64fp/mDID452h48tvKlRQ==}
engines: {node: '>=18.12.0'}
@ -3816,9 +3986,30 @@ packages:
resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==}
engines: {node: '>=8'}
markdown-it-image-figures@2.1.1:
resolution: {integrity: sha512-mwXSQ2nPeVUzCMIE3HlLvjRioopiqyJLNph0pyx38yf9mpqFDhNGnMpAXF9/A2Xv0oiF2cVyg9xwfF0HNAz05g==}
engines: {node: '>=12.0.0'}
peerDependencies:
markdown-it: '*'
markdown-it-sub@2.0.0:
resolution: {integrity: sha512-iCBKgwCkfQBRg2vApy9vx1C1Tu6D8XYo8NvevI3OlwzBRmiMtsJ2sXupBgEA7PPxiDwNni3qIUkhZ6j5wofDUA==}
markdown-it-sup@2.0.0:
resolution: {integrity: sha512-5VgmdKlkBd8sgXuoDoxMpiU+BiEt3I49GItBzzw7Mxq9CxvnhE/k09HFli09zgfFDRixDQDfDxi0mgBCXtaTvA==}
markdown-it@14.1.0:
resolution: {integrity: sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==}
hasBin: true
mathml-tag-names@2.1.3:
resolution: {integrity: sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==}
md-editor-v3@4.21.1:
resolution: {integrity: sha512-887rjL0jJBdu8yA7jHU472gEaLlJ4kH8POzG/qYRLtIN72RuAOuKTiDfJVdnrSqMgpIrXYgVgVt36luQpo/zMA==}
peerDependencies:
vue: ^3.2.47
mdn-data@2.0.14:
resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==}
@ -3828,6 +4019,12 @@ packages:
mdn-data@2.0.30:
resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==}
mdurl@2.0.0:
resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==}
medium-zoom@1.1.0:
resolution: {integrity: sha512-ewyDsp7k4InCUp3jRmwHBRFGyjBimKps/AJLjRSox+2q/2H4p/PNpQf+pwONWlJiOudkBXtbdmVbFjqyybfTmQ==}
memoize-one@6.0.0:
resolution: {integrity: sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==}
@ -4715,6 +4912,10 @@ packages:
pump@3.0.0:
resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==}
punycode.js@2.3.1:
resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==}
engines: {node: '>=6'}
punycode@2.3.1:
resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
engines: {node: '>=6'}
@ -5106,6 +5307,9 @@ packages:
strip-literal@2.1.0:
resolution: {integrity: sha512-Op+UycaUt/8FbN/Z2TWPBLge3jWrP3xj10f3fnYxf052bKuS3EKs1ZQcVGjnEMdsNVAM+plXRdmjrZ/KgG3Skw==}
style-mod@4.1.2:
resolution: {integrity: sha512-wnD1HyVqpJUI2+eKZ+eo1UwghftP6yuFheBqqe+bWCotBjC2K1YnteJILRMs3SM4V/0dLEW1SC27MWP5y+mwmw==}
style-value-types@5.1.2:
resolution: {integrity: sha512-Vs9fNreYF9j6W2VvuDTP7kepALi7sk0xtk2Tu8Yxi9UoajJdEVpNpCov0HsLTqXvNGKX+Uv09pkozVITi1jf3Q==}
@ -5328,6 +5532,9 @@ packages:
resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
engines: {node: '>=8.0'}
toggle-selection@1.0.6:
resolution: {integrity: sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==}
tough-cookie@4.1.4:
resolution: {integrity: sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==}
engines: {node: '>=6'}
@ -5424,6 +5631,9 @@ packages:
engines: {node: '>=14.17'}
hasBin: true
uc.micro@2.1.0:
resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==}
ufo@1.5.4:
resolution: {integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==}
@ -5669,6 +5879,9 @@ packages:
resolution: {integrity: sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==}
deprecated: Use your platform's native performance.now() and performance.timeOrigin.
w3c-keyname@2.2.8:
resolution: {integrity: sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==}
w3c-xmlserializer@2.0.0:
resolution: {integrity: sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==}
engines: {node: '>=10'}
@ -5813,6 +6026,11 @@ packages:
xmlchars@2.2.0:
resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==}
xss@1.0.15:
resolution: {integrity: sha512-FVdlVVC67WOIPvfOwhoMETV72f6GbW7aOabBC3WxN/oUdoEMDyLz4OgRv5/gck2ZeNqEQu+Tb0kloovXOfpYVg==}
engines: {node: '>= 0.10.0'}
hasBin: true
xtend@4.0.2:
resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==}
engines: {node: '>=0.4'}
@ -6174,6 +6392,257 @@ snapshots:
'@bcoe/v8-coverage@0.2.3': {}
'@codemirror/autocomplete@6.18.1(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)(@lezer/common@1.2.3)':
dependencies:
'@codemirror/language': 6.10.3
'@codemirror/state': 6.4.1
'@codemirror/view': 6.34.1
'@lezer/common': 1.2.3
'@codemirror/commands@6.7.1':
dependencies:
'@codemirror/language': 6.10.3
'@codemirror/state': 6.4.1
'@codemirror/view': 6.34.1
'@lezer/common': 1.2.3
'@codemirror/lang-angular@0.1.3':
dependencies:
'@codemirror/lang-html': 6.4.9
'@codemirror/lang-javascript': 6.2.2
'@codemirror/language': 6.10.3
'@lezer/common': 1.2.3
'@lezer/highlight': 1.2.1
'@lezer/lr': 1.4.2
'@codemirror/lang-cpp@6.0.2':
dependencies:
'@codemirror/language': 6.10.3
'@lezer/cpp': 1.1.2
'@codemirror/lang-css@6.3.0(@codemirror/view@6.34.1)':
dependencies:
'@codemirror/autocomplete': 6.18.1(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)(@lezer/common@1.2.3)
'@codemirror/language': 6.10.3
'@codemirror/state': 6.4.1
'@lezer/common': 1.2.3
'@lezer/css': 1.1.9
transitivePeerDependencies:
- '@codemirror/view'
'@codemirror/lang-go@6.0.1(@codemirror/view@6.34.1)':
dependencies:
'@codemirror/autocomplete': 6.18.1(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)(@lezer/common@1.2.3)
'@codemirror/language': 6.10.3
'@codemirror/state': 6.4.1
'@lezer/common': 1.2.3
'@lezer/go': 1.0.0
transitivePeerDependencies:
- '@codemirror/view'
'@codemirror/lang-html@6.4.9':
dependencies:
'@codemirror/autocomplete': 6.18.1(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)(@lezer/common@1.2.3)
'@codemirror/lang-css': 6.3.0(@codemirror/view@6.34.1)
'@codemirror/lang-javascript': 6.2.2
'@codemirror/language': 6.10.3
'@codemirror/state': 6.4.1
'@codemirror/view': 6.34.1
'@lezer/common': 1.2.3
'@lezer/css': 1.1.9
'@lezer/html': 1.3.10
'@codemirror/lang-java@6.0.1':
dependencies:
'@codemirror/language': 6.10.3
'@lezer/java': 1.1.3
'@codemirror/lang-javascript@6.2.2':
dependencies:
'@codemirror/autocomplete': 6.18.1(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)(@lezer/common@1.2.3)
'@codemirror/language': 6.10.3
'@codemirror/lint': 6.8.2
'@codemirror/state': 6.4.1
'@codemirror/view': 6.34.1
'@lezer/common': 1.2.3
'@lezer/javascript': 1.4.19
'@codemirror/lang-json@6.0.1':
dependencies:
'@codemirror/language': 6.10.3
'@lezer/json': 1.0.2
'@codemirror/lang-less@6.0.2(@codemirror/view@6.34.1)':
dependencies:
'@codemirror/lang-css': 6.3.0(@codemirror/view@6.34.1)
'@codemirror/language': 6.10.3
'@lezer/common': 1.2.3
'@lezer/highlight': 1.2.1
'@lezer/lr': 1.4.2
transitivePeerDependencies:
- '@codemirror/view'
'@codemirror/lang-liquid@6.2.1':
dependencies:
'@codemirror/autocomplete': 6.18.1(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)(@lezer/common@1.2.3)
'@codemirror/lang-html': 6.4.9
'@codemirror/language': 6.10.3
'@codemirror/state': 6.4.1
'@codemirror/view': 6.34.1
'@lezer/common': 1.2.3
'@lezer/highlight': 1.2.1
'@lezer/lr': 1.4.2
'@codemirror/lang-markdown@6.3.0':
dependencies:
'@codemirror/autocomplete': 6.18.1(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)(@lezer/common@1.2.3)
'@codemirror/lang-html': 6.4.9
'@codemirror/language': 6.10.3
'@codemirror/state': 6.4.1
'@codemirror/view': 6.34.1
'@lezer/common': 1.2.3
'@lezer/markdown': 1.3.1
'@codemirror/lang-php@6.0.1':
dependencies:
'@codemirror/lang-html': 6.4.9
'@codemirror/language': 6.10.3
'@codemirror/state': 6.4.1
'@lezer/common': 1.2.3
'@lezer/php': 1.0.2
'@codemirror/lang-python@6.1.6(@codemirror/view@6.34.1)':
dependencies:
'@codemirror/autocomplete': 6.18.1(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)(@lezer/common@1.2.3)
'@codemirror/language': 6.10.3
'@codemirror/state': 6.4.1
'@lezer/common': 1.2.3
'@lezer/python': 1.1.14
transitivePeerDependencies:
- '@codemirror/view'
'@codemirror/lang-rust@6.0.1':
dependencies:
'@codemirror/language': 6.10.3
'@lezer/rust': 1.0.2
'@codemirror/lang-sass@6.0.2(@codemirror/view@6.34.1)':
dependencies:
'@codemirror/lang-css': 6.3.0(@codemirror/view@6.34.1)
'@codemirror/language': 6.10.3
'@codemirror/state': 6.4.1
'@lezer/common': 1.2.3
'@lezer/sass': 1.0.7
transitivePeerDependencies:
- '@codemirror/view'
'@codemirror/lang-sql@6.8.0(@codemirror/view@6.34.1)':
dependencies:
'@codemirror/autocomplete': 6.18.1(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)(@lezer/common@1.2.3)
'@codemirror/language': 6.10.3
'@codemirror/state': 6.4.1
'@lezer/common': 1.2.3
'@lezer/highlight': 1.2.1
'@lezer/lr': 1.4.2
transitivePeerDependencies:
- '@codemirror/view'
'@codemirror/lang-vue@0.1.3':
dependencies:
'@codemirror/lang-html': 6.4.9
'@codemirror/lang-javascript': 6.2.2
'@codemirror/language': 6.10.3
'@lezer/common': 1.2.3
'@lezer/highlight': 1.2.1
'@lezer/lr': 1.4.2
'@codemirror/lang-wast@6.0.2':
dependencies:
'@codemirror/language': 6.10.3
'@lezer/common': 1.2.3
'@lezer/highlight': 1.2.1
'@lezer/lr': 1.4.2
'@codemirror/lang-xml@6.1.0':
dependencies:
'@codemirror/autocomplete': 6.18.1(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)(@lezer/common@1.2.3)
'@codemirror/language': 6.10.3
'@codemirror/state': 6.4.1
'@codemirror/view': 6.34.1
'@lezer/common': 1.2.3
'@lezer/xml': 1.0.5
'@codemirror/lang-yaml@6.1.1(@codemirror/view@6.34.1)':
dependencies:
'@codemirror/autocomplete': 6.18.1(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)(@lezer/common@1.2.3)
'@codemirror/language': 6.10.3
'@codemirror/state': 6.4.1
'@lezer/common': 1.2.3
'@lezer/highlight': 1.2.1
'@lezer/yaml': 1.0.3
transitivePeerDependencies:
- '@codemirror/view'
'@codemirror/language-data@6.5.1(@codemirror/view@6.34.1)':
dependencies:
'@codemirror/lang-angular': 0.1.3
'@codemirror/lang-cpp': 6.0.2
'@codemirror/lang-css': 6.3.0(@codemirror/view@6.34.1)
'@codemirror/lang-go': 6.0.1(@codemirror/view@6.34.1)
'@codemirror/lang-html': 6.4.9
'@codemirror/lang-java': 6.0.1
'@codemirror/lang-javascript': 6.2.2
'@codemirror/lang-json': 6.0.1
'@codemirror/lang-less': 6.0.2(@codemirror/view@6.34.1)
'@codemirror/lang-liquid': 6.2.1
'@codemirror/lang-markdown': 6.3.0
'@codemirror/lang-php': 6.0.1
'@codemirror/lang-python': 6.1.6(@codemirror/view@6.34.1)
'@codemirror/lang-rust': 6.0.1
'@codemirror/lang-sass': 6.0.2(@codemirror/view@6.34.1)
'@codemirror/lang-sql': 6.8.0(@codemirror/view@6.34.1)
'@codemirror/lang-vue': 0.1.3
'@codemirror/lang-wast': 6.0.2
'@codemirror/lang-xml': 6.1.0
'@codemirror/lang-yaml': 6.1.1(@codemirror/view@6.34.1)
'@codemirror/language': 6.10.3
'@codemirror/legacy-modes': 6.4.1
transitivePeerDependencies:
- '@codemirror/view'
'@codemirror/language@6.10.3':
dependencies:
'@codemirror/state': 6.4.1
'@codemirror/view': 6.34.1
'@lezer/common': 1.2.3
'@lezer/highlight': 1.2.1
'@lezer/lr': 1.4.2
style-mod: 4.1.2
'@codemirror/legacy-modes@6.4.1':
dependencies:
'@codemirror/language': 6.10.3
'@codemirror/lint@6.8.2':
dependencies:
'@codemirror/state': 6.4.1
'@codemirror/view': 6.34.1
crelt: 1.0.6
'@codemirror/search@6.5.6':
dependencies:
'@codemirror/state': 6.4.1
'@codemirror/view': 6.34.1
crelt: 1.0.6
'@codemirror/state@6.4.1': {}
'@codemirror/view@6.34.1':
dependencies:
'@codemirror/state': 6.4.1
style-mod: 4.1.2
w3c-keyname: 2.2.8
'@commitlint/cli@17.8.1':
dependencies:
'@commitlint/format': 17.8.1
@ -6810,6 +7279,99 @@ snapshots:
'@jridgewell/resolve-uri': 3.1.2
'@jridgewell/sourcemap-codec': 1.5.0
'@lezer/common@1.2.3': {}
'@lezer/cpp@1.1.2':
dependencies:
'@lezer/common': 1.2.3
'@lezer/highlight': 1.2.1
'@lezer/lr': 1.4.2
'@lezer/css@1.1.9':
dependencies:
'@lezer/common': 1.2.3
'@lezer/highlight': 1.2.1
'@lezer/lr': 1.4.2
'@lezer/go@1.0.0':
dependencies:
'@lezer/common': 1.2.3
'@lezer/highlight': 1.2.1
'@lezer/lr': 1.4.2
'@lezer/highlight@1.2.1':
dependencies:
'@lezer/common': 1.2.3
'@lezer/html@1.3.10':
dependencies:
'@lezer/common': 1.2.3
'@lezer/highlight': 1.2.1
'@lezer/lr': 1.4.2
'@lezer/java@1.1.3':
dependencies:
'@lezer/common': 1.2.3
'@lezer/highlight': 1.2.1
'@lezer/lr': 1.4.2
'@lezer/javascript@1.4.19':
dependencies:
'@lezer/common': 1.2.3
'@lezer/highlight': 1.2.1
'@lezer/lr': 1.4.2
'@lezer/json@1.0.2':
dependencies:
'@lezer/common': 1.2.3
'@lezer/highlight': 1.2.1
'@lezer/lr': 1.4.2
'@lezer/lr@1.4.2':
dependencies:
'@lezer/common': 1.2.3
'@lezer/markdown@1.3.1':
dependencies:
'@lezer/common': 1.2.3
'@lezer/highlight': 1.2.1
'@lezer/php@1.0.2':
dependencies:
'@lezer/common': 1.2.3
'@lezer/highlight': 1.2.1
'@lezer/lr': 1.4.2
'@lezer/python@1.1.14':
dependencies:
'@lezer/common': 1.2.3
'@lezer/highlight': 1.2.1
'@lezer/lr': 1.4.2
'@lezer/rust@1.0.2':
dependencies:
'@lezer/common': 1.2.3
'@lezer/highlight': 1.2.1
'@lezer/lr': 1.4.2
'@lezer/sass@1.0.7':
dependencies:
'@lezer/common': 1.2.3
'@lezer/highlight': 1.2.1
'@lezer/lr': 1.4.2
'@lezer/xml@1.0.5':
dependencies:
'@lezer/common': 1.2.3
'@lezer/highlight': 1.2.1
'@lezer/lr': 1.4.2
'@lezer/yaml@1.0.3':
dependencies:
'@lezer/common': 1.2.3
'@lezer/highlight': 1.2.1
'@lezer/lr': 1.4.2
'@logicflow/core@1.2.28':
dependencies:
'@types/mousetrap': 1.6.15
@ -7081,12 +7643,21 @@ snapshots:
'@types/js-cookie@3.0.6': {}
'@types/linkify-it@5.0.0': {}
'@types/lodash-es@4.17.12':
dependencies:
'@types/lodash': 4.17.7
'@types/lodash@4.17.7': {}
'@types/markdown-it@14.1.2':
dependencies:
'@types/linkify-it': 5.0.0
'@types/mdurl': 2.0.0
'@types/mdurl@2.0.0': {}
'@types/minimist@1.2.5': {}
'@types/mousetrap@1.6.15': {}
@ -7237,6 +7808,8 @@ snapshots:
'@uppy/utils': 4.1.3
nanoid: 3.3.7
'@vavt/util@2.1.0': {}
'@vitejs/plugin-vue-jsx@3.1.0(vite@5.4.2(@types/node@20.16.2)(sass@1.77.8)(terser@5.31.6))(vue@3.4.38(typescript@5.5.4))':
dependencies:
'@babel/core': 7.25.2
@ -7966,6 +8539,18 @@ snapshots:
co@4.6.0: {}
codemirror@6.0.1(@lezer/common@1.2.3):
dependencies:
'@codemirror/autocomplete': 6.18.1(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)(@lezer/common@1.2.3)
'@codemirror/commands': 6.7.1
'@codemirror/language': 6.10.3
'@codemirror/lint': 6.8.2
'@codemirror/search': 6.5.6
'@codemirror/state': 6.4.1
'@codemirror/view': 6.34.1
transitivePeerDependencies:
- '@lezer/common'
codepage@1.15.0: {}
collect-v8-coverage@1.0.2: {}
@ -8105,6 +8690,10 @@ snapshots:
convert-source-map@2.0.0: {}
copy-to-clipboard@3.3.3:
dependencies:
toggle-selection: 1.0.6
core-js@3.38.1: {}
cosmiconfig-typescript-loader@4.4.0(@types/node@20.5.1)(cosmiconfig@8.3.6(typescript@5.5.4))(ts-node@10.9.2(@types/node@20.5.1)(typescript@5.5.4))(typescript@5.5.4):
@ -8143,6 +8732,8 @@ snapshots:
create-require@1.1.1: {}
crelt@1.0.6: {}
cropperjs@1.6.2: {}
cross-spawn@7.0.3:
@ -8196,6 +8787,8 @@ snapshots:
cssesc@3.0.0: {}
cssfilter@0.0.10: {}
cssnano-preset-default@5.2.14(postcss@8.4.41):
dependencies:
css-declaration-sorter: 6.4.1(postcss@8.4.41)
@ -9776,6 +10369,8 @@ snapshots:
jiti@1.21.6: {}
js-base64@3.7.7: {}
js-cookie@3.0.5: {}
js-sdsl@4.3.0: {}
@ -9897,6 +10492,10 @@ snapshots:
lines-and-columns@1.2.4: {}
linkify-it@5.0.0:
dependencies:
uc.micro: 2.1.0
lint-staged@15.2.9:
dependencies:
chalk: 5.3.0
@ -10043,14 +10642,55 @@ snapshots:
map-obj@4.3.0: {}
markdown-it-image-figures@2.1.1(markdown-it@14.1.0):
dependencies:
markdown-it: 14.1.0
markdown-it-sub@2.0.0: {}
markdown-it-sup@2.0.0: {}
markdown-it@14.1.0:
dependencies:
argparse: 2.0.1
entities: 4.5.0
linkify-it: 5.0.0
mdurl: 2.0.0
punycode.js: 2.3.1
uc.micro: 2.1.0
mathml-tag-names@2.1.3: {}
md-editor-v3@4.21.1(@codemirror/view@6.34.1)(@lezer/common@1.2.3)(vue@3.4.38(typescript@5.5.4)):
dependencies:
'@codemirror/lang-markdown': 6.3.0
'@codemirror/language-data': 6.5.1(@codemirror/view@6.34.1)
'@types/markdown-it': 14.1.2
'@vavt/util': 2.1.0
codemirror: 6.0.1(@lezer/common@1.2.3)
copy-to-clipboard: 3.3.3
lru-cache: 10.4.3
markdown-it: 14.1.0
markdown-it-image-figures: 2.1.1(markdown-it@14.1.0)
markdown-it-sub: 2.0.0
markdown-it-sup: 2.0.0
medium-zoom: 1.1.0
vue: 3.4.38(typescript@5.5.4)
xss: 1.0.15
transitivePeerDependencies:
- '@codemirror/view'
- '@lezer/common'
mdn-data@2.0.14: {}
mdn-data@2.0.28: {}
mdn-data@2.0.30: {}
mdurl@2.0.0: {}
medium-zoom@1.1.0: {}
memoize-one@6.0.0: {}
meow@12.1.1: {}
@ -10893,6 +11533,8 @@ snapshots:
end-of-stream: 1.4.4
once: 1.4.0
punycode.js@2.3.1: {}
punycode@2.3.1: {}
qrcode@1.5.4:
@ -11282,6 +11924,8 @@ snapshots:
js-tokens: 9.0.0
optional: true
style-mod@4.1.2: {}
style-value-types@5.1.2:
dependencies:
hey-listen: 1.0.8
@ -11586,6 +12230,8 @@ snapshots:
dependencies:
is-number: 7.0.0
toggle-selection@1.0.6: {}
tough-cookie@4.1.4:
dependencies:
psl: 1.9.0
@ -11664,6 +12310,8 @@ snapshots:
typescript@5.5.4: {}
uc.micro@2.1.0: {}
ufo@1.5.4: {}
uncrypto@0.1.3:
@ -11935,6 +12583,8 @@ snapshots:
dependencies:
browser-process-hrtime: 1.0.0
w3c-keyname@2.2.8: {}
w3c-xmlserializer@2.0.0:
dependencies:
xml-name-validator: 3.0.0
@ -12077,6 +12727,11 @@ snapshots:
xmlchars@2.2.0: {}
xss@1.0.15:
dependencies:
commander: 2.20.3
cssfilter: 0.0.10
xtend@4.0.2: {}
y18n@4.0.3: {}

View File

@ -58,3 +58,26 @@ onMounted(() => {
setI18n();
});
</script>
<style>
/* 定义滚动条高宽及背景高宽分别对应横竖滚动条的尺寸 */
::-webkit-scrollbar {
width: 8px;
height: 8px;
background-color: var(--el-text-color-secondary);
}
/* 定义滚动条轨道内阴影+圆角 */
::-webkit-scrollbar-track {
background-color: #ebecef;
border-radius: 5px;
box-shadow: inset 0 0 6px #ebecef;
}
/* 定义滑块内阴影+圆角 */
::-webkit-scrollbar-thumb {
background-color: #d0d2d6;
border-radius: 5px;
box-shadow: inset 0 0 6px #d0d2d6;
}
</style>

View File

@ -0,0 +1,13 @@
<template>
<MdPreview :editorId="id" :modelValue="text" />
</template>
<script setup>
import { MdPreview } from 'md-editor-v3';
import 'md-editor-v3/lib/preview.css';
defineProps({
text: String,
id: String,
});
</script>

View File

@ -1,107 +1,107 @@
<script lang="ts" setup>
import { useDark, useECharts } from "@pureadmin/utils";
import { computed, nextTick, type PropType, ref, watch } from "vue";
import { useDark, useECharts } from '@pureadmin/utils';
import { computed, nextTick, type PropType, ref, watch } from 'vue';
const props = defineProps({
requireData: {
type: Array as PropType<Array<number>>,
default: () => []
},
questionData: {
type: Array as PropType<Array<number>>,
default: () => []
}
requireData: {
type: Array as PropType<Array<number>>,
default: () => [],
},
questionData: {
type: Array as PropType<Array<number>>,
default: () => [],
},
});
const { isDark } = useDark();
const theme = computed(() => (isDark.value ? "dark" : "light"));
const theme = computed(() => (isDark.value ? 'dark' : 'light'));
const chartRef = ref();
const { setOptions } = useECharts(chartRef, {
theme
theme,
});
watch(
() => props,
async () => {
await nextTick(); // DOM
setOptions({
container: ".bar-card",
color: ["#41b6ff", "#e85f33"],
tooltip: {
trigger: "axis",
axisPointer: {
type: "none"
}
},
grid: {
top: "20px",
right: 0
},
legend: {
data: ["需求人数", "提问数量"],
textStyle: {
color: "#606266",
fontSize: "0.875rem"
},
bottom: 0
},
xAxis: [
{
type: "category",
data: ["周一", "周二", "周三", "周四", "周五", "周六", "周日"],
axisLabel: {
fontSize: "0.875rem"
},
axisPointer: {
type: "shadow"
}
}
],
yAxis: [
{
type: "value",
axisLabel: {
fontSize: "0.875rem"
},
splitLine: {
show: false // 线
}
// name: ": "
}
],
series: [
{
name: "需求人数",
type: "bar",
barWidth: 10,
itemStyle: {
color: "#41b6ff",
borderRadius: [10, 10, 0, 0]
},
data: props.requireData
},
{
name: "提问数量",
type: "bar",
barWidth: 10,
itemStyle: {
color: "#e86033ce",
borderRadius: [10, 10, 0, 0]
},
data: props.questionData
}
]
});
},
{
deep: true,
immediate: true
}
() => props,
async () => {
await nextTick(); // DOM
setOptions({
container: '.bar-card',
color: ['#41b6ff', '#e85f33'],
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'none',
},
},
grid: {
top: '20px',
right: 0,
},
legend: {
data: ['需求人数', '提问数量'],
textStyle: {
color: '#606266',
fontSize: '0.875rem',
},
bottom: 0,
},
xAxis: [
{
type: 'category',
data: ['周一', '周二', '周三', '周四', '周五', '周六', '周日'],
axisLabel: {
fontSize: '0.875rem',
},
axisPointer: {
type: 'shadow',
},
},
],
yAxis: [
{
type: 'value',
axisLabel: {
fontSize: '0.875rem',
},
splitLine: {
show: false, // 线
},
// name: ": "
},
],
series: [
{
name: '需求人数',
type: 'bar',
barWidth: 10,
itemStyle: {
color: '#41b6ff',
borderRadius: [10, 10, 0, 0],
},
data: props.requireData,
},
{
name: '提问数量',
type: 'bar',
barWidth: 10,
itemStyle: {
color: '#e86033ce',
borderRadius: [10, 10, 0, 0],
},
data: props.questionData,
},
],
});
},
{
deep: true,
immediate: true,
},
);
</script>
<template>
<div ref="chartRef" style="width: 100%; height: 365px" />
<div ref="chartRef" style="width: 100%; height: 365px" />
</template>

View File

@ -1,62 +1,62 @@
<script setup lang="ts">
import { type PropType, ref, computed } from "vue";
import { useDark, useECharts } from "@pureadmin/utils";
<script lang="ts" setup>
import { computed, type PropType, ref } from 'vue';
import { useDark, useECharts } from '@pureadmin/utils';
const props = defineProps({
data: {
type: Array as PropType<Array<number>>,
default: () => []
},
color: {
type: String,
default: "#41b6ff"
}
data: {
type: Array as PropType<Array<number>>,
default: () => [],
},
color: {
type: String,
default: '#41b6ff',
},
});
const { isDark } = useDark();
const theme = computed(() => (isDark.value ? "dark" : "light"));
const theme = computed(() => (isDark.value ? 'dark' : 'light'));
const chartRef = ref();
const { setOptions } = useECharts(chartRef, {
theme,
renderer: "svg"
theme,
renderer: 'svg',
});
setOptions({
container: ".line-card",
xAxis: {
type: "category",
show: false,
data: props.data
},
grid: {
top: "15px",
bottom: 0,
left: 0,
right: 0
},
yAxis: {
show: false,
type: "value"
},
series: [
{
data: props.data,
type: "line",
symbol: "none",
smooth: true,
color: props.color,
lineStyle: {
shadowOffsetY: 3,
shadowBlur: 7,
shadowColor: props.color
}
}
]
container: '.line-card',
xAxis: {
type: 'category',
show: false,
data: props.data,
},
grid: {
top: '15px',
bottom: 0,
left: 0,
right: 0,
},
yAxis: {
show: false,
type: 'value',
},
series: [
{
data: props.data,
type: 'line',
symbol: 'none',
smooth: true,
color: props.color,
lineStyle: {
shadowOffsetY: 3,
shadowBlur: 7,
shadowColor: props.color,
},
},
],
});
</script>
<template>
<div ref="chartRef" style="width: 100%; height: 60px" />
<div ref="chartRef" style="width: 100%; height: 60px" />
</template>

View File

@ -1,73 +1,73 @@
<script lang="ts" setup>
import { computed, ref } from "vue";
import { useDark, useECharts } from "@pureadmin/utils";
import { computed, ref } from 'vue';
import { useDark, useECharts } from '@pureadmin/utils';
const { isDark } = useDark();
const theme = computed(() => (isDark.value ? "dark" : "light"));
const theme = computed(() => (isDark.value ? 'dark' : 'light'));
const chartRef = ref();
const { setOptions } = useECharts(chartRef, {
theme,
renderer: "svg"
theme,
renderer: 'svg',
});
setOptions({
container: ".line-card",
title: {
text: "100%",
left: "47%",
top: "30%",
textAlign: "center",
textStyle: {
fontSize: "16",
fontWeight: 600
}
},
polar: {
radius: ["100%", "90%"],
center: ["50%", "50%"]
},
angleAxis: {
max: 100,
show: false
},
radiusAxis: {
type: "category",
show: true,
axisLabel: {
show: false
},
axisLine: {
show: false
},
axisTick: {
show: false
}
},
series: [
{
type: "bar",
roundCap: true,
barWidth: 2,
showBackground: true,
backgroundStyle: {
color: "#dfe7ef"
},
data: [100],
coordinateSystem: "polar",
color: "#7846e5",
itemStyle: {
shadowBlur: 2,
shadowColor: "#7846e5",
shadowOffsetX: 0,
shadowOffsetY: 0
}
}
]
container: '.line-card',
title: {
text: '100%',
left: '47%',
top: '30%',
textAlign: 'center',
textStyle: {
fontSize: '16',
fontWeight: 600,
},
},
polar: {
radius: ['100%', '90%'],
center: ['50%', '50%'],
},
angleAxis: {
max: 100,
show: false,
},
radiusAxis: {
type: 'category',
show: true,
axisLabel: {
show: false,
},
axisLine: {
show: false,
},
axisTick: {
show: false,
},
},
series: [
{
type: 'bar',
roundCap: true,
barWidth: 2,
showBackground: true,
backgroundStyle: {
color: '#dfe7ef',
},
data: [100],
coordinateSystem: 'polar',
color: '#7846e5',
itemStyle: {
shadowBlur: 2,
shadowColor: '#7846e5',
shadowOffsetX: 0,
shadowOffsetY: 0,
},
},
],
});
</script>
<template>
<div ref="chartRef" style="width: 100%; height: 60px" />
<div ref="chartRef" style="width: 100%; height: 60px" />
</template>

View File

@ -1,3 +1,3 @@
export { default as ChartBar } from "./ChartBar.vue";
export { default as ChartLine } from "./ChartLine.vue";
export { default as ChartRound } from "./ChartRound.vue";
export { default as ChartBar } from './ChartBar.vue';
export { default as ChartLine } from './ChartLine.vue';
export { default as ChartRound } from './ChartRound.vue';

View File

@ -0,0 +1,22 @@
<script lang="ts" setup>
import MarkdownPreview from '@/components/Markdown/MarkdownPreview.vue';
import { onMounted, ref } from 'vue';
import { decode } from 'js-base64';
const content = ref();
/** 获取文档信息 */
const onSearch = async () => {
const response = await fetch('https://gitee.com/api/v5/repos/BunnyBoss/bunny-admin-server/contents/ReadMe.md?access_token=1dc76ba34226aea3eca52c1121c51617');
const json = await response.json();
content.value = decode(json.content);
};
onMounted(() => {
onSearch();
});
</script>
<template>
<MarkdownPreview id="server-read-me" :text="content" />
</template>

View File

@ -1,104 +0,0 @@
import { tableData } from "../../data";
import { delay } from "@pureadmin/utils";
import { ref, onMounted, reactive } from "vue";
import type { PaginationProps } from "@pureadmin/table";
import ThumbUp from "@iconify-icons/ri/thumb-up-line";
import Hearts from "@iconify-icons/ri/hearts-line";
import Empty from "./empty.svg?component";
export function useColumns() {
const dataList = ref([]);
const loading = ref(true);
const columns: TableColumnList = [
{
sortable: true,
label: "序号",
prop: "id"
},
{
sortable: true,
label: "需求人数",
prop: "requiredNumber",
filterMultiple: false,
filterClassName: "pure-table-filter",
filters: [
{ text: "≥16000", value: "more" },
{ text: "<16000", value: "less" }
],
filterMethod: (value, { requiredNumber }) => {
return value === "more"
? requiredNumber >= 16000
: requiredNumber < 16000;
}
},
{
sortable: true,
label: "提问数量",
prop: "questionNumber"
},
{
sortable: true,
label: "解决数量",
prop: "resolveNumber"
},
{
sortable: true,
label: "用户满意度",
minWidth: 100,
prop: "satisfaction",
cellRenderer: ({ row }) => (
<div class="flex justify-center w-full">
<span class="flex items-center w-[60px]">
<span class="ml-auto mr-2">{row.satisfaction}%</span>
<iconifyIconOffline
icon={row.satisfaction > 98 ? Hearts : ThumbUp}
color="#e85f33"
/>
</span>
</div>
)
},
{
sortable: true,
label: "统计日期",
prop: "date"
},
{
label: "操作",
fixed: "right",
slot: "operation"
}
];
/** 分页配置 */
const pagination = reactive<PaginationProps>({
pageSize: 10,
currentPage: 1,
layout: "prev, pager, next",
total: 0,
align: "center"
});
function onCurrentChange(page: number) {
console.log("onCurrentChange", page);
loading.value = true;
delay(300).then(() => {
loading.value = false;
});
}
onMounted(() => {
dataList.value = tableData;
pagination.total = dataList.value.length;
loading.value = false;
});
return {
Empty,
loading,
columns,
dataList,
pagination,
onCurrentChange
};
}

View File

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="30" height="30" class="empty-icon" viewBox="0 0 1024 1024"><path d="M855.6 427.2H168.5c-12.7 0-24.4 6.9-30.6 18L4.4 684.7C1.5 689.9 0 695.8 0 701.8v287.1c0 19.4 15.7 35.1 35.1 35.1H989c19.4 0 35.1-15.7 35.1-35.1V701.8c0-6-1.5-11.8-4.4-17.1L886.2 445.2c-6.2-11.1-17.9-18-30.6-18M673.4 695.6c-16.5 0-30.8 11.5-34.3 27.7-12.7 58.5-64.8 102.3-127.2 102.3s-114.5-43.8-127.2-102.3c-3.5-16.1-17.8-27.7-34.3-27.7H119c-26.4 0-43.3-28-31.1-51.4l81.7-155.8c6.1-11.6 18-18.8 31.1-18.8h622.4c13 0 25 7.2 31.1 18.8l81.7 155.8c12.2 23.4-4.7 51.4-31.1 51.4zm146.5-486.1c-1-1.8-2.1-3.7-3.2-5.5-9.8-16.6-31.1-22.2-47.8-12.6L648.5 261c-17 9.8-22.7 31.6-12.6 48.4.9 1.4 1.7 2.9 2.5 4.4 9.5 17 31.2 22.8 48 13L807 257.3c16.7-9.7 22.4-31 12.9-47.8m-444.5 51.6L255 191.6c-16.7-9.6-38-4-47.8 12.6-1.1 1.8-2.1 3.6-3.2 5.5-9.5 16.8-3.8 38.1 12.9 47.8L337.3 327c16.9 9.7 38.6 4 48-13.1.8-1.5 1.7-2.9 2.5-4.4 10.2-16.8 4.5-38.6-12.4-48.4M512 239.3h2.5c19.5.3 35.5-15.5 35.5-35.1v-139c0-19.3-15.6-34.9-34.8-35.1h-6.4C489.6 30.3 474 46 474 65.2v139c0 19.5 15.9 35.4 35.5 35.1z"/></svg>

Before

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -1,71 +0,0 @@
<script lang="ts" setup>
import { useColumns } from "./columns";
import { useRenderIcon } from "@/components/CommonIcon/src/hooks";
const { loading, columns, dataList, pagination, Empty, onCurrentChange } =
useColumns();
</script>
<template>
<pure-table
:columns="columns"
:data="
dataList.slice(
(pagination.currentPage - 1) * pagination.pageSize,
pagination.currentPage * pagination.pageSize
)
"
:loading="loading"
:loading-config="{ background: 'transparent' }"
:pagination="pagination"
alignWhole="center"
row-key="id"
showOverflowTooltip
@page-current-change="onCurrentChange"
>
<template #empty>
<el-empty :image-size="60" description="暂无数据">
<template #image>
<Empty />
</template>
</el-empty>
</template>
<template #operation="{ row }">
<el-button
:icon="useRenderIcon('ri:search-line')"
:title="`查看序号为${row.id}的详情`"
circle
plain
size="small"
/>
</template>
</pure-table>
</template>
<style lang="scss">
.pure-table-filter {
.el-table-filter__list {
min-width: 80px;
padding: 0;
li {
line-height: 28px;
}
}
}
</style>
<style lang="scss" scoped>
:deep(.el-table) {
--el-table-border: none;
--el-table-border-color: transparent;
.el-empty__description {
margin: 0;
}
.el-scrollbar__bar {
display: none;
}
}
</style>

View File

@ -0,0 +1,22 @@
<script lang="ts" setup>
import MarkdownPreview from '@/components/Markdown/MarkdownPreview.vue';
import { onMounted, ref } from 'vue';
import { decode } from 'js-base64';
const content = ref();
/** 获取文档信息 */
const onSearch = async () => {
const response = await fetch('https://gitee.com/api/v5/repos/BunnyBoss/bunny-admin-web/contents/ReadMe.md?access_token=1dc76ba34226aea3eca52c1121c51617');
const json = await response.json();
content.value = decode(json.content);
};
onMounted(() => {
onSearch();
});
</script>
<template>
<MarkdownPreview id="web-read-me" :text="content" />
</template>

View File

@ -1,134 +0,0 @@
import { dayjs, cloneDeep, getRandomIntBetween } from "./utils";
import GroupLine from "@iconify-icons/ri/group-line";
import Question from "@iconify-icons/ri/question-answer-line";
import CheckLine from "@iconify-icons/ri/chat-check-line";
import Smile from "@iconify-icons/ri/star-smile-line";
const days = ["周日", "周一", "周二", "周三", "周四", "周五", "周六"];
/** 需求人数、提问数量、解决数量、用户满意度 */
const chartData = [
{
icon: GroupLine,
bgColor: "#effaff",
color: "#41b6ff",
duration: 2200,
name: "需求人数",
value: 36000,
percent: "+88%",
data: [2101, 5288, 4239, 4962, 6752, 5208, 7450] // 平滑折线图数据
},
{
icon: Question,
bgColor: "#fff5f4",
color: "#e85f33",
duration: 1600,
name: "提问数量",
value: 16580,
percent: "+70%",
data: [2216, 1148, 1255, 788, 4821, 1973, 4379]
},
{
icon: CheckLine,
bgColor: "#eff8f4",
color: "#26ce83",
duration: 1500,
name: "解决数量",
value: 16499,
percent: "+99%",
data: [861, 1002, 3195, 1715, 3666, 2415, 3645]
},
{
icon: Smile,
bgColor: "#f6f4fe",
color: "#7846e5",
duration: 100,
name: "用户满意度",
value: 100,
percent: "+100%",
data: [100]
}
];
/** 分析概览 */
const barChartData = [
{
requireData: [2101, 5288, 4239, 4962, 6752, 5208, 7450],
questionData: [2216, 1148, 1255, 1788, 4821, 1973, 4379]
},
{
requireData: [2101, 3280, 4400, 4962, 5752, 6889, 7600],
questionData: [2116, 3148, 3255, 3788, 4821, 4970, 5390]
}
];
/** 解决概率 */
const progressData = [
{
week: "周一",
percentage: 85,
duration: 110,
color: "#41b6ff"
},
{
week: "周二",
percentage: 86,
duration: 105,
color: "#41b6ff"
},
{
week: "周三",
percentage: 88,
duration: 100,
color: "#41b6ff"
},
{
week: "周四",
percentage: 89,
duration: 95,
color: "#41b6ff"
},
{
week: "周五",
percentage: 94,
duration: 90,
color: "#26ce83"
},
{
week: "周六",
percentage: 96,
duration: 85,
color: "#26ce83"
},
{
week: "周日",
percentage: 100,
duration: 80,
color: "#26ce83"
}
].reverse();
/** 数据统计 */
const tableData = Array.from({ length: 30 }).map((_, index) => {
return {
id: index + 1,
requiredNumber: getRandomIntBetween(13500, 19999),
questionNumber: getRandomIntBetween(12600, 16999),
resolveNumber: getRandomIntBetween(13500, 17999),
satisfaction: getRandomIntBetween(95, 100),
date: dayjs().subtract(index, "day").format("YYYY-MM-DD")
};
});
/** 最新动态 */
const latestNewsData = cloneDeep(tableData)
.slice(0, 14)
.map((item, index) => {
return Object.assign(item, {
date: `${dayjs().subtract(index, "day").format("YYYY-MM-DD")} ${
days[dayjs().subtract(index, "day").day()]
}`
});
});
export { chartData, barChartData, progressData, tableData, latestNewsData };

View File

@ -1,16 +1,29 @@
<script lang="ts" setup>
import { ref } from 'vue';
import { onMounted, ref } from 'vue';
import ReCol from '@/components/MyCol';
import { useDark } from './utils';
import WelcomeTable from './components/table/index.vue';
import { ReNormalCountTo } from '@/components/CountTo';
import { ChartBar, ChartLine, ChartRound } from './components/charts';
import Segmented, { type OptionsType } from '@/components/Segmented';
import { barChartData, chartData, latestNewsData, progressData } from './data';
import { ChartLine, ChartRound } from './components/charts';
import { chartData } from './utils/data';
import { getServerCommitList, getWebCommitList, serverCommitList, webCommitList } from '@/views/welcome/utils/hooks';
import WebReadMe from '@/views/welcome/components/web-read-me.vue';
import { TabsPaneContext } from 'element-plus';
import ServerReadMe from '@/views/welcome/components/server-read-me.vue';
const { isDark } = useDark();
let curWeek = ref(1); // 01
const optionsBasis: Array<OptionsType> = [{ label: '上周' }, { label: '本周' }];
// tab
const activeName = ref('web');
// tab
const onTabClick = (tab: TabsPaneContext, _: Event) => {
activeName.value = tab.paneName;
};
onMounted(() => {
getWebCommitList();
getServerCommitList();
});
</script>
<template>
@ -48,57 +61,64 @@ const optionsBasis: Array<OptionsType> = [{ label: '上周' }, { label: '本周'
</el-card>
</re-col>
<re-col v-motion :enter="{ opacity: 1, y: 0, transition: { delay: 400 } }" :initial="{ opacity: 0, y: 100 }" :value="18" :xs="24" class="mb-[18px]">
<el-card class="bar-card" shadow="never">
<div class="flex justify-between">
<span class="text-md font-medium">分析概览</span>
<Segmented v-model="curWeek" :options="optionsBasis" />
</div>
<div class="flex justify-between items-start mt-3">
<ChartBar :questionData="barChartData[curWeek].questionData" :requireData="barChartData[curWeek].requireData" />
</div>
</el-card>
</re-col>
<el-row :gutter="24" class="w-[100%] justify-around">
<re-col v-motion :enter="{ opacity: 1, y: 0, transition: { delay: 560 } }" :initial="{ opacity: 0, y: 100 }" :lg="16" :sm="24" :xl="18" :xs="24" class="mb-[18px]">
<el-card class="h-[1178px] overflow-y-auto" shadow="never">
<el-tabs v-model="activeName" class="demo-tabs" @tab-click="onTabClick">
<el-tab-pane label="前端文档" name="web">
<web-read-me class="mt-3 h-[100%]" />
</el-tab-pane>
<el-tab-pane label="后端文档" name="server">
<server-read-me class="mt-3 h-[100%]" />
</el-tab-pane>
</el-tabs>
</el-card>
</re-col>
<re-col v-motion :enter="{ opacity: 1, y: 0, transition: { delay: 480 } }" :initial="{ opacity: 0, y: 100 }" :value="6" :xs="24" class="mb-[18px]">
<el-card shadow="never">
<div class="flex justify-between">
<span class="text-md font-medium">解决概率</span>
</div>
<div v-for="(item, index) in progressData" :key="index" :class="['flex', 'justify-between', 'items-start', index === 0 ? 'mt-8' : 'mt-[2.15rem]']">
<el-progress :color="item.color" :duration="item.duration" :percentage="item.percentage" :stroke-width="21" :text-inside="true" striped striped-flow />
<span class="text-nowrap ml-2 text-text_color_regular text-sm">
{{ item.week }}
</span>
</div>
</el-card>
</re-col>
<re-col v-motion :enter="{ opacity: 1, y: 0, transition: { delay: 640 } }" :initial="{ opacity: 0, y: 100 }" :lg="8" :sm="24" :xl="6" :xs="24">
<el-card class="mb-[18px]" shadow="never">
<div class="flex justify-between">
<span class="text-md font-medium">前端代码近期20次更改</span>
</div>
<el-scrollbar class="mt-3" max-height="504">
<el-timeline>
<el-timeline-item v-for="(item, index) in webCommitList" :key="index" :timestamp="item.date" center placement="top">
<p class="text-text_color_regular text-sm">
<el-link :href="item.html_url" :title="item.message" :underline="false" target="_blank">
{{ `提交信息:${item.message},提交用户:` }}
</el-link>
<el-link :href="item.url" :title="item.name" :underline="false" target="_blank">
<el-avatar :size="16" :src="item.avatar_url" class="align-middle" />
{{ `${item.name}` }}
</el-link>
</p>
</el-timeline-item>
</el-timeline>
</el-scrollbar>
</el-card>
<re-col v-motion :enter="{ opacity: 1, y: 0, transition: { delay: 560 } }" :initial="{ opacity: 0, y: 100 }" :value="18" :xs="24" class="mb-[18px]">
<el-card class="h-[580px]" shadow="never">
<div class="flex justify-between">
<span class="text-md font-medium">数据统计</span>
</div>
<WelcomeTable class="mt-3" />
</el-card>
</re-col>
<re-col v-motion :enter="{ opacity: 1, y: 0, transition: { delay: 640 } }" :initial="{ opacity: 0, y: 100 }" :value="6" :xs="24" class="mb-[18px]">
<el-card shadow="never">
<div class="flex justify-between">
<span class="text-md font-medium">最新动态</span>
</div>
<el-scrollbar class="mt-3" max-height="504">
<el-timeline>
<el-timeline-item v-for="(item, index) in latestNewsData" :key="index" :timestamp="item.date" center placement="top">
<p class="text-text_color_regular text-sm">
{{ `新增 ${item.requiredNumber} 条问题,${item.resolveNumber} 条已解决` }}
</p>
</el-timeline-item>
</el-timeline>
</el-scrollbar>
</el-card>
</re-col>
<el-card shadow="never">
<div class="flex justify-between">
<span class="text-md font-medium">后端代码近期20次更改</span>
</div>
<el-scrollbar class="mt-3" max-height="504">
<el-timeline>
<el-timeline-item v-for="(item, index) in serverCommitList" :key="index" :timestamp="item.date" center placement="top">
<p class="text-text_color_regular text-sm">
<el-link :href="item.html_url" :title="item.message" :underline="false" target="_blank">
{{ `提交信息:${item.message},提交用户:` }}
</el-link>
<el-link :href="item.url" :title="item.name" :underline="false" target="_blank">
<el-avatar :size="16" :src="item.avatar_url" class="align-middle" />
{{ `${item.name}` }}
</el-link>
</p>
</el-timeline-item>
</el-timeline>
</el-scrollbar>
</el-card>
</re-col>
</el-row>
</el-row>
</div>
</template>

View File

@ -1,6 +1,6 @@
export { default as dayjs } from "dayjs";
export { useDark, cloneDeep, randomGradient } from "@pureadmin/utils";
export { default as dayjs } from 'dayjs';
export { useDark, cloneDeep, randomGradient } from '@pureadmin/utils';
export function getRandomIntBetween(min: number, max: number) {
return Math.floor(Math.random() * (max - min + 1)) + min;
return Math.floor(Math.random() * (max - min + 1)) + min;
}

View File

@ -0,0 +1,63 @@
import { dayjs, getRandomIntBetween } from '../utils';
import GroupLine from '@iconify-icons/ri/group-line';
import Question from '@iconify-icons/ri/question-answer-line';
import CheckLine from '@iconify-icons/ri/chat-check-line';
import Smile from '@iconify-icons/ri/star-smile-line';
/** 需求人数、提问数量、解决数量、用户满意度 */
const chartData = [
{
icon: GroupLine,
bgColor: '#effaff',
color: '#41b6ff',
duration: 2200,
name: '需求人数',
value: 36000,
percent: '+88%',
data: [2101, 5288, 4239, 4962, 6752, 5208, 7450], // 平滑折线图数据
},
{
icon: Question,
bgColor: '#fff5f4',
color: '#e85f33',
duration: 1600,
name: '提问数量',
value: 16580,
percent: '+70%',
data: [2216, 1148, 1255, 788, 4821, 1973, 4379],
},
{
icon: CheckLine,
bgColor: '#eff8f4',
color: '#26ce83',
duration: 1500,
name: '解决数量',
value: 16499,
percent: '+99%',
data: [861, 1002, 3195, 1715, 3666, 2415, 3645],
},
{
icon: Smile,
bgColor: '#f6f4fe',
color: '#7846e5',
duration: 100,
name: '用户满意度',
value: 100,
percent: '+100%',
data: [100],
},
];
/** 数据统计 */
const tableData = Array.from({ length: 30 }).map((_, index) => {
return {
id: index + 1,
requiredNumber: getRandomIntBetween(13500, 19999),
questionNumber: getRandomIntBetween(12600, 16999),
resolveNumber: getRandomIntBetween(13500, 17999),
satisfaction: getRandomIntBetween(95, 100),
date: dayjs().subtract(index, 'day').format('YYYY-MM-DD'),
};
});
export { chartData, tableData };

View File

@ -0,0 +1,34 @@
import { ref } from 'vue';
import dayjs from 'dayjs';
// 前端代码提交记录
export const webCommitList = ref([]);
// 后端代码提交记录
export const serverCommitList = ref([]);
/** 获取web代码提交记录 */
export const getWebCommitList = async () => {
const response = await fetch('https://gitee.com/api/v5/repos/BunnyBoss/bunny-admin-web/commits?access_token=1dc76ba34226aea3eca52c1121c51617&page=1&per_page=20');
const json = await response.json();
webCommitList.value = json.map(item => ({
date: dayjs(item?.commit?.committer?.date).format('YYYY-MM-DD HH:mm:ss'),
url: item?.committer?.html_url,
name: item?.committer?.name,
avatar_url: item?.committer?.avatar_url,
message: item?.commit?.message,
html_url: item?.html_url,
}));
};
/** 获取后端代码提交记录 */
export const getServerCommitList = async () => {
const response = await fetch('https://gitee.com/api/v5/repos/BunnyBoss/bunny-admin-server/commits?access_token=1dc76ba34226aea3eca52c1121c51617&page=1&per_page=20');
const json = await response.json();
serverCommitList.value = json.map(item => ({
date: dayjs(item?.commit?.committer?.date).format('YYYY-MM-DD HH:mm:ss'),
url: item?.committer?.html_url,
name: item?.committer?.name,
avatar_url: item?.committer?.avatar_url,
message: item?.commit?.message,
html_url: item?.html_url,
}));
};