diff --git a/package.json b/package.json index e3a76b2..06bb899 100644 --- a/package.json +++ b/package.json @@ -19,22 +19,24 @@ "dependencies": { "3d-force-graph": "^1.73.3", "@element-plus/icons-vue": "^2.3.1", + "@vueup/vue-quill": "^1.2.0", "@vueuse/core": "^10.9.0", "ali-oss": "^6.20.0", "axios": "^1.6.8", "d3": "^5.16.0", "echarts": "^5.5.0", - "element-plus": "^2.6.0", - "jwt-decode": "^4.0.0", - "nanoid": "^5.0.7", "echarts-liquidfill": "^3.1.0", + "element-plus": "^2.6.0", "form-data": "^4.0.0", "jquery": "^3.7.1", + "jwt-decode": "^4.0.0", + "nanoid": "^5.0.7", "nprogress": "^0.2.0", "pinia": "^2.1.7", "three": "^0.163.0", "vue": "^3.4.27", "vue-echarts": "^6.7.2", + "vue-quill": "^1.5.1", "vue-router": "^4.3.0" }, "devDependencies": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e9e8810..517f898 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,5 +1,9 @@ lockfileVersion: '6.0' +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + dependencies: 3d-force-graph: specifier: ^1.73.3 @@ -7,6 +11,9 @@ dependencies: '@element-plus/icons-vue': specifier: ^2.3.1 version: 2.3.1(vue@3.4.29) + '@vueup/vue-quill': + specifier: ^1.2.0 + version: 1.2.0(vue@3.4.29) '@vueuse/core': specifier: ^10.9.0 version: 10.9.0(vue@3.4.29) @@ -55,6 +62,9 @@ dependencies: vue-echarts: specifier: ^6.7.2 version: 6.7.3(echarts@5.5.0)(vue@3.4.29) + vue-quill: + specifier: ^1.5.1 + version: 1.5.1 vue-router: specifier: ^4.3.0 version: 4.3.0(vue@3.4.29) @@ -1235,6 +1245,16 @@ packages: /@vue/shared@3.4.29: resolution: {integrity: sha512-hQ2gAQcBO/CDpC82DCrinJNgOHI2v+FA7BDW4lMSPeBpQ7sRe2OLHWe5cph1s7D8DUQAwRt18dBDfJJ220APEA==} + /@vueup/vue-quill@1.2.0(vue@3.4.29): + resolution: {integrity: sha512-kd5QPSHMDpycklojPXno2Kw2JSiKMYduKYQckTm1RJoVDA557MnyUXgcuuDpry4HY/Rny9nGNcK+m3AHk94wag==} + peerDependencies: + vue: ^3.2.41 + dependencies: + quill: 1.3.7 + quill-delta: 4.2.2 + vue: 3.4.29(typescript@5.2.2) + dev: false + /@vueuse/core@10.9.0(vue@3.4.29): resolution: {integrity: sha512-/1vjTol8SXnx6xewDEKfS0Ra//ncg4Hb0DaZiwKf7drgfMsKFExQ+FnnENcN6efPen+1kIzhLQoGSy0eDUVOMg==} dependencies: @@ -1595,7 +1615,6 @@ packages: /boolbase@1.0.0: resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} - dev: true /bowser@1.9.4: resolution: {integrity: sha512-9IdMmj2KjigRq6oWhmwv1W36pDuA4STQZ8q6YO9um+x07xgYNCD3Oou+WP/3L1HNz7iqythGet3/p4wvc8AAwQ==} @@ -1726,6 +1745,17 @@ packages: supports-color: 7.2.0 dev: true + /cheerio@0.19.0: + resolution: {integrity: sha512-Fwcm3zkR37STnPC8FepSHeSYJM5Rd596TZOcfDUdojR4Q735aK1Xn+M+ISagNneuCwMjK28w4kX+ETILGNT/UQ==} + engines: {node: '>= 0.6'} + dependencies: + css-select: 1.0.0 + dom-serializer: 0.1.1 + entities: 1.1.2 + htmlparser2: 3.8.3 + lodash: 3.10.1 + dev: false + /chokidar@3.6.0: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} @@ -1754,7 +1784,6 @@ packages: /clone@2.1.2: resolution: {integrity: sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==} engines: {node: '>=0.8'} - dev: true /collection-visit@1.0.0: resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==} @@ -1889,6 +1918,15 @@ packages: engines: {node: '>=12 || >=16'} dev: true + /css-select@1.0.0: + resolution: {integrity: sha512-/xPlD7betkfd7ChGkLGGWx5HWyiHDOSn7aACLzdH0nwucPvB0EAm8hMBm7Xn7vGfAeRRN7KZ8wumGm8NoNcMRw==} + dependencies: + boolbase: 1.0.0 + css-what: 1.0.0 + domutils: 1.4.3 + nth-check: 1.0.2 + dev: false + /css-select@4.3.0: resolution: {integrity: sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==} dependencies: @@ -1915,6 +1953,10 @@ packages: source-map-js: 1.0.2 dev: true + /css-what@1.0.0: + resolution: {integrity: sha512-60SUMPBreXrLXgvpM8kYpO0AOyMRhdRlXFX5BMQbZq1SIJCyNE56nqFQhmvREQdUJpedbGRYZ5wOyq3/F6q5Zw==} + dev: false + /css-what@6.1.0: resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} engines: {node: '>= 6'} @@ -2300,6 +2342,18 @@ packages: engines: {node: '>=0.10'} dev: true + /deep-equal@1.1.2: + resolution: {integrity: sha512-5tdhKF6DbU7iIzrIOa1AOUt39ZRm13cmL1cGEh//aqR8x9+tNfbywRf0n5FD/18OKMdo7DNEtrX2t22ZAkI+eg==} + engines: {node: '>= 0.4'} + dependencies: + is-arguments: 1.1.1 + is-date-object: 1.0.5 + is-regex: 1.1.4 + object-is: 1.1.6 + object-keys: 1.1.1 + regexp.prototype.flags: 1.5.2 + dev: false + /deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} dev: true @@ -2326,7 +2380,6 @@ packages: define-data-property: 1.1.4 has-property-descriptors: 1.0.2 object-keys: 1.1.1 - dev: true /define-property@0.2.5: resolution: {integrity: sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==} @@ -2386,12 +2439,18 @@ packages: esutils: 2.0.3 dev: true + /dom-serializer@0.1.1: + resolution: {integrity: sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==} + dependencies: + domelementtype: 1.3.1 + entities: 1.1.2 + dev: false + /dom-serializer@0.2.2: resolution: {integrity: sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==} dependencies: domelementtype: 2.3.0 entities: 2.2.0 - dev: true /dom-serializer@1.4.1: resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==} @@ -2411,11 +2470,15 @@ packages: /domelementtype@1.3.1: resolution: {integrity: sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==} - dev: true /domelementtype@2.3.0: resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} - dev: true + + /domhandler@2.3.0: + resolution: {integrity: sha512-q9bUwjfp7Eif8jWxxxPSykdRZAb6GkguBGSgvvCrhI9wB71W2K/Kvv4E61CF/mcCfnVJDeDWx/Vb/uAqbDj6UQ==} + dependencies: + domelementtype: 1.3.1 + dev: false /domhandler@2.4.2: resolution: {integrity: sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==} @@ -2437,6 +2500,19 @@ packages: domelementtype: 2.3.0 dev: true + /domutils@1.4.3: + resolution: {integrity: sha512-ZkVgS/PpxjyJMb+S2iVHHEZjVnOUtjGp0/zstqKGTE9lrZtNHlNQmLwP/lhLMEApYbzc08BKMx9IFpKhaSbW1w==} + dependencies: + domelementtype: 1.3.1 + dev: false + + /domutils@1.5.1: + resolution: {integrity: sha512-gSu5Oi/I+3wDENBsOWBiRK1eoGxcywYSqg3rR960/+EfY0CF4EX1VPkgHOZ3WiS/Jg2DtliF6BhWcHlfpYUcGw==} + dependencies: + dom-serializer: 0.2.2 + domelementtype: 1.3.1 + dev: false + /domutils@1.7.0: resolution: {integrity: sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==} dependencies: @@ -2532,13 +2608,15 @@ packages: engines: {node: '>= 0.11.14'} dev: false + /entities@1.0.0: + resolution: {integrity: sha512-LbLqfXgJMmy81t+7c14mnulFHJ170cM6E+0vMXR9k/ZiZwgX8i5pNgjTCX3SO4VeUsFLV+8InixoretwU+MjBQ==} + dev: false + /entities@1.1.2: resolution: {integrity: sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==} - dev: true /entities@2.2.0: resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} - dev: true /entities@4.5.0: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} @@ -2968,6 +3046,10 @@ packages: engines: {node: '>= 0.6'} dev: true + /eventemitter3@2.0.3: + resolution: {integrity: sha512-jLN68Dx5kyFHaePoXWPsCGW5qdyZQtLYHkxkg02/Mz6g0kYpDx4FyP6XfArhQdlOC4b8Mv+EMxPo/8La7Tzghg==} + dev: false + /expand-brackets@2.1.4: resolution: {integrity: sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==} engines: {node: '>=0.10.0'} @@ -2997,6 +3079,10 @@ packages: is-extendable: 1.0.1 dev: true + /extend@3.0.2: + resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + dev: false + /extglob@2.0.4: resolution: {integrity: sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==} engines: {node: '>=0.10.0'} @@ -3017,6 +3103,14 @@ packages: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} dev: true + /fast-diff@1.1.2: + resolution: {integrity: sha512-KaJUt+M9t1qaIteSvjc6P3RbMdXsNhK61GRftR6SNxqmhthcd9MGIi4T+o0jD8LUSpSnSKXE20nLtJ3fOHxQig==} + dev: false + + /fast-diff@1.2.0: + resolution: {integrity: sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==} + dev: false + /fast-diff@1.3.0: resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} dev: true @@ -3208,7 +3302,6 @@ packages: /functions-have-names@1.2.3: resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} - dev: true /gensync@1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} @@ -3376,7 +3469,6 @@ packages: engines: {node: '>= 0.4'} dependencies: has-symbols: 1.0.3 - dev: true /has-value@0.3.1: resolution: {integrity: sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==} @@ -3436,6 +3528,16 @@ packages: readable-stream: 3.6.2 dev: true + /htmlparser2@3.8.3: + resolution: {integrity: sha512-hBxEg3CYXe+rPIua8ETe7tmG3XDn9B0edOE/e9wH2nLczxzgdu0m0aNHY+5wFZiviLWLdANPJTssa92dMcXQ5Q==} + dependencies: + domelementtype: 1.3.1 + domhandler: 2.3.0 + domutils: 1.5.1 + entities: 1.0.0 + readable-stream: 1.1.14 + dev: false + /htmlparser2@8.0.2: resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==} dependencies: @@ -3530,6 +3632,14 @@ packages: hasown: 2.0.1 dev: true + /is-arguments@1.1.1: + resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + has-tostringtag: 1.0.2 + dev: false + /is-array-buffer@3.0.4: resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} engines: {node: '>= 0.4'} @@ -3594,7 +3704,6 @@ packages: engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.2 - dev: true /is-descriptor@0.1.7: resolution: {integrity: sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==} @@ -3692,7 +3801,6 @@ packages: dependencies: call-bind: 1.0.7 has-tostringtag: 1.0.2 - dev: true /is-shared-array-buffer@1.0.3: resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} @@ -3741,6 +3849,10 @@ packages: engines: {node: '>=0.10.0'} dev: true + /isarray@0.0.1: + resolution: {integrity: sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==} + dev: false + /isarray@1.0.0: resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} @@ -3936,6 +4048,18 @@ packages: lodash-es: 4.17.21 dev: false + /lodash.clonedeep@4.5.0: + resolution: {integrity: sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==} + dev: false + + /lodash.defaultsdeep@4.6.1: + resolution: {integrity: sha512-3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA==} + dev: false + + /lodash.isequal@4.5.0: + resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} + dev: false + /lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} dev: true @@ -3944,6 +4068,10 @@ packages: resolution: {integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==} dev: true + /lodash@3.10.1: + resolution: {integrity: sha512-9mDDwqVIma6OZX79ZlDACZl8sBm0TEnkf99zV3iMA4GzkIT/9hiqP5mY0HoT1iNLCrKc/R1HByV+yJfRWVJryQ==} + dev: false + /lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} @@ -4203,6 +4331,12 @@ packages: resolution: {integrity: sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==} dev: false + /nth-check@1.0.2: + resolution: {integrity: sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==} + dependencies: + boolbase: 1.0.0 + dev: false + /nth-check@2.1.1: resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} dependencies: @@ -4225,10 +4359,17 @@ packages: /object-inspect@1.13.1: resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} + /object-is@1.1.6: + resolution: {integrity: sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + dev: false + /object-keys@1.1.1: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} engines: {node: '>= 0.4'} - dev: true /object-visit@1.0.1: resolution: {integrity: sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==} @@ -4337,6 +4478,10 @@ packages: p-limit: 3.1.0 dev: true + /parchment@1.1.4: + resolution: {integrity: sha512-J5FBQt/pM2inLzg4hEWmzQx/8h8D0CiDxaG3vyp9rKrQRSDgBlhjdP5jQGgosEajXPSQouXGHOmVdgo7QmJuOg==} + dev: false + /parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} @@ -4652,6 +4797,50 @@ packages: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} dev: true + /quill-delta@3.6.3: + resolution: {integrity: sha512-wdIGBlcX13tCHOXGMVnnTVFtGRLoP0imqxM696fIPwIf5ODIYUHIvHbZcyvGlZFiFhK5XzDC2lpjbxRhnM05Tg==} + engines: {node: '>=0.10'} + dependencies: + deep-equal: 1.1.2 + extend: 3.0.2 + fast-diff: 1.1.2 + dev: false + + /quill-delta@4.2.2: + resolution: {integrity: sha512-qjbn82b/yJzOjstBgkhtBjN2TNK+ZHP/BgUQO+j6bRhWQQdmj2lH6hXG7+nwwLF41Xgn//7/83lxs9n2BkTtTg==} + dependencies: + fast-diff: 1.2.0 + lodash.clonedeep: 4.5.0 + lodash.isequal: 4.5.0 + dev: false + + /quill-render@1.0.5: + resolution: {integrity: sha512-PJaOQXaYbVD9GCwR5fVz3S/OuarbNbvzfNu9EZK745qMpyWUAAbt9YUEY+cWWPwVwVIJ00XVJpQQl+xLA1gFEQ==} + dependencies: + cheerio: 0.19.0 + escape-html: 1.0.3 + dev: false + + /quill@1.3.7: + resolution: {integrity: sha512-hG/DVzh/TiknWtE6QmWAF/pxoZKYxfe3J/d/+ShUWkDvvkZQVTPeVmUJVu1uE6DDooC4fWTiCLh84ul89oNz5g==} + dependencies: + clone: 2.1.2 + deep-equal: 1.1.2 + eventemitter3: 2.0.3 + extend: 3.0.2 + parchment: 1.1.4 + quill-delta: 3.6.3 + dev: false + + /readable-stream@1.1.14: + resolution: {integrity: sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==} + dependencies: + core-util-is: 1.0.3 + inherits: 2.0.4 + isarray: 0.0.1 + string_decoder: 0.10.31 + dev: false + /readable-stream@2.3.8: resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} dependencies: @@ -4700,7 +4889,6 @@ packages: define-properties: 1.2.1 es-errors: 1.3.0 set-function-name: 2.0.2 - dev: true /regexpp@3.2.0: resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==} @@ -4919,7 +5107,6 @@ packages: es-errors: 1.3.0 functions-have-names: 1.2.3 has-property-descriptors: 1.0.2 - dev: true /set-value@2.0.1: resolution: {integrity: sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==} @@ -5116,6 +5303,10 @@ packages: es-abstract: 1.22.5 dev: true + /string_decoder@0.10.31: + resolution: {integrity: sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==} + dev: false + /string_decoder@1.1.1: resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} dependencies: @@ -5899,6 +6090,14 @@ packages: - supports-color dev: true + /vue-quill@1.5.1: + resolution: {integrity: sha512-4U3pMsBy2Vc4SSanZ6l1hzuB+m6vN9IERZzzOp+U2ziIcA6uGJYoxONmdPJkrMbcHpYYNrATqZOlWBuXqti30w==} + dependencies: + lodash.defaultsdeep: 4.6.1 + quill: 1.3.7 + quill-render: 1.0.5 + dev: false + /vue-router@4.3.0(vue@3.4.29): resolution: {integrity: sha512-dqUcs8tUeG+ssgWhcPbjHvazML16Oga5w34uCUmsk7i0BcnskoLGwjpa15fqMr2Fa5JgVBrdL2MEgqz6XZ/6IQ==} peerDependencies: @@ -6037,7 +6236,3 @@ packages: dependencies: tslib: 2.3.0 dev: false - -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false diff --git a/src/api/courseChaptersApi.ts b/src/api/courseChaptersApi.ts index 54f2a6a..011bb9b 100644 --- a/src/api/courseChaptersApi.ts +++ b/src/api/courseChaptersApi.ts @@ -66,4 +66,42 @@ export function getOrogramObjectiveApi() { setTimeout(() => resolve(data), 500 * Math.random()) }) } - +// 获取课程列表 +export const getCourseList = (params:any) => { + return request({ + url: '/course_objectives/list/' + params.id, + params + }) +} +// 添加分目标 +export const addCourse = (data:any) => { + return request({ + url:'/objective_contents/addcontent', + method:"POST", + data + }) +} +// 编辑目标 +export const editCourse = (data: any) => { + return request({ + url: '/objective_contents/update', + method: "PUT", + data + }) +} +//删除课程目标 +export const deleteCourse = (params: any) => { + return request({ + url: '/objective_contents/' + params.id, + method: "DELETE", + }) +} +// /objective_contents/ +// 获取详情 +export const getCourseInfo = (params: any) => { + return request({ + url: '/objective_contents/' + params.id, + method: "get", + params + }) +} \ No newline at end of file diff --git a/src/api/user/record.js b/src/api/user/record.js deleted file mode 100644 index edbafc1..0000000 --- a/src/api/user/record.js +++ /dev/null @@ -1,10 +0,0 @@ -import request from '@/utils/request' -//获取浏览记录列表 -export const getRecordListService = (params) => - request.get('http://39.106.16.162:8080/learningrecords/getall', { params }) -//删除浏览记录 -export function DelRecordService(ids) { - return request.delete( - `http://39.106.16.162:8080/learningrecords/delete?ids=${ids}`, - ) -} diff --git a/src/assets/icons/pdf (1).png b/src/assets/icons/pdf (1).png new file mode 100644 index 0000000..aa0a9e0 Binary files /dev/null and b/src/assets/icons/pdf (1).png differ diff --git a/src/assets/icons/ppt (1).png b/src/assets/icons/ppt (1).png new file mode 100644 index 0000000..5aa1287 Binary files /dev/null and b/src/assets/icons/ppt (1).png differ diff --git a/src/assets/icons/ppt (2).png b/src/assets/icons/ppt (2).png new file mode 100644 index 0000000..2a25d8a Binary files /dev/null and b/src/assets/icons/ppt (2).png differ diff --git a/src/assets/icons/图片 (2).png b/src/assets/icons/图片 (2).png new file mode 100644 index 0000000..0b1059f Binary files /dev/null and b/src/assets/icons/图片 (2).png differ diff --git a/src/assets/icons/文件.png b/src/assets/icons/文件.png new file mode 100644 index 0000000..6ff4b18 Binary files /dev/null and b/src/assets/icons/文件.png differ diff --git a/src/assets/icons/视频 .png b/src/assets/icons/视频 .png new file mode 100644 index 0000000..8819a39 Binary files /dev/null and b/src/assets/icons/视频 .png differ diff --git a/src/assets/icons/音频1.png b/src/assets/icons/音频1.png new file mode 100644 index 0000000..755663c Binary files /dev/null and b/src/assets/icons/音频1.png differ diff --git a/src/config/index.js b/src/config/index.js new file mode 100644 index 0000000..5912546 --- /dev/null +++ b/src/config/index.js @@ -0,0 +1,10 @@ +import OSS from 'ali-oss' + +export const client = new OSS({ + bucket: 'wenyu132', //bucket名称 + region: 'oss-cn-beijing', //区域 + endpoint: 'oss-cn-beijing.aliyuncs.com', //地域节点==>外网访问 + accessKeyId: 'LTAI5tPe9x46aWZt8FScytst', //访问键id + accessKeySecret: '0mfxSLzmRgtHMXpD5pCBTl9RfwbmDG', //访问密钥 + secure: true, //http就是false,https就是true +}) diff --git a/src/store/modules/type/types.ts b/src/store/modules/type/types.ts index 80b21aa..5fb276d 100644 --- a/src/store/modules/type/types.ts +++ b/src/store/modules/type/types.ts @@ -6,4 +6,5 @@ export interface LoginStoreType { avatar: string // 用户头像 routes: string phone: string + userInfo: object } diff --git a/src/store/modules/user.ts b/src/store/modules/user.ts index f4901ac..601dc1a 100644 --- a/src/store/modules/user.ts +++ b/src/store/modules/user.ts @@ -18,6 +18,7 @@ import { userLoginService, userGetInfoService, userPhoneLoginService, + userIdenService, } from '@/api/user/user.js' const useUserStore = defineStore( @@ -30,6 +31,7 @@ const useUserStore = defineStore( userName: '', // 用户姓名 avatar: '', // 用户头像 routes: '', + userInfo: {}, // 当前用户相关信息 } }, actions: { @@ -47,6 +49,7 @@ const useUserStore = defineStore( this.token = res.data.token as string SET_TKOEN('TOKEN', this.token) // localStorage.setItem('TOKEN', this.token) + ElNotification({ type: 'success', message: '登录成功!', @@ -89,7 +92,11 @@ const useUserStore = defineStore( async getUserInfo() { const result = await userGetInfoService(GET_TKOEN('TOKEN')) if (result.code === 200) { - // console.log(result) + const res = await userIdenService(result.data.id) + this.userInfo = res.data + console.log(this.userInfo, 'this.userInfo') + + console.log(result, '123') this.userName = result.data.username // this.avatar = result.data.checkUser.avatar this.routes = result.data.menus.map((item) => { diff --git a/src/utils/oss.js b/src/utils/oss.js new file mode 100644 index 0000000..12bc7c6 --- /dev/null +++ b/src/utils/oss.js @@ -0,0 +1,23 @@ +import { client } from '@/config/index.js' +import { nanoid } from 'nanoid' //随机函数 +const tool = { + oss: { + async upload(file) { + // 文件名 + const uuid = nanoid() + // 文件后缀名 + const index = file.name.lastIndexOf('.') + const suffix = file.name.substring(index + 1) + //完整路径 + let fileName = 'wenyu/' + uuid + '.' + suffix + + return await client.multipartUpload(fileName, file, { + progress: function (p) { + console.log('进度', p) + }, + }) + }, + }, +} + +export default tool diff --git a/src/utils/request.ts b/src/utils/request.ts index 7e76580..33c5882 100644 --- a/src/utils/request.ts +++ b/src/utils/request.ts @@ -11,7 +11,7 @@ const request = axios.create({ request.interceptors.request.use((config) => { const userStore = useUserStore() // 设置请求头设置token - config.headers.token = userStore.token + config.headers.Authorization = `Bearer ${userStore.token}` return config }) //响应拦截器 diff --git a/src/views/MyCourseStudy/learningProcess.vue b/src/views/MyCourseStudy/learningProcess.vue index c16fa8e..dadee24 100644 --- a/src/views/MyCourseStudy/learningProcess.vue +++ b/src/views/MyCourseStudy/learningProcess.vue @@ -1,10 +1,11 @@ diff --git a/src/views/course/CourseObjectives.vue b/src/views/course/CourseObjectives.vue index 11ecde0..23f10a8 100644 --- a/src/views/course/CourseObjectives.vue +++ b/src/views/course/CourseObjectives.vue @@ -1,121 +1,475 @@ - + - diff --git a/src/views/course/CourseObjectives111.vue b/src/views/course/CourseObjectives111.vue new file mode 100644 index 0000000..8d3b391 --- /dev/null +++ b/src/views/course/CourseObjectives111.vue @@ -0,0 +1,476 @@ + + + + + + diff --git a/src/views/course/basicCourseInformation.vue b/src/views/course/basicCourseInformation.vue index e374323..03aacbf 100644 --- a/src/views/course/basicCourseInformation.vue +++ b/src/views/course/basicCourseInformation.vue @@ -2,20 +2,22 @@ import { ref, onMounted } from 'vue' // import axios from 'axios' import courseEdit from './components/courseEdit.vue' -import { Plus, Search } from '@element-plus/icons-vue' +import { Plus } from '@element-plus/icons-vue' import { getCourseListApi, deleteCourseApi, - getCourseObjectApi, getTeacherListApi, } from '../../api/user/crouse' import { ElMessageBox, ElMessage } from 'element-plus' // import router from '@/router' -import { useRouter, useRoute } from 'vue-router' +import { useRouter } from 'vue-router' +import useUserStore from '@/store/modules/user' +// import { useRoute } from 'vue-router' +const userStore = useUserStore() +// const userInfo = userStore.userInfo const router = useRouter() // const route = useRoute() // console.log(route) - // import { client } from '@/utils/alioss.js' // 课程列表 const courseList = ref([]) @@ -31,7 +33,7 @@ const total = ref(0) const params = ref({ pageNo: 1, pageSize: 7, - username: 'qiu', + username: userStore.userName, assessmenttype: '', category: '', nature: '', @@ -41,12 +43,14 @@ const loading = ref(false) // 获取课程列表 const getCourseList = async () => { loading.value = true + console.log(params.value, '11') + const res = await getCourseListApi(params.value) - // console.log(res) courseList.value = res.data.list total.value = res.data.total console.log(res.data.list) loading.value = false + // console.log(userStore.userName, '1111') } // 渲染 onMounted(() => { @@ -163,12 +167,15 @@ const CloseCouresNameChangeEvent = () => {
- - + - + @@ -190,22 +197,23 @@ const CloseCouresNameChangeEvent = () => { - 搜索 重置 -
    -
  • +
  • -

    {{ course_name }}

    + + + + + + + + + + + + 点击上传资源 + + + + +
    + +
    +
    + + 取消 + 确定 + +
    + + + diff --git a/src/views/courseResources/courseInfo.vue b/src/views/courseResources/courseInfo.vue deleted file mode 100644 index 33680e5..0000000 --- a/src/views/courseResources/courseInfo.vue +++ /dev/null @@ -1,133 +0,0 @@ - - - - - diff --git a/src/views/courseResources/index.vue b/src/views/courseResources/index.vue index 1a379fc..486cb83 100644 --- a/src/views/courseResources/index.vue +++ b/src/views/courseResources/index.vue @@ -1,569 +1,303 @@ + - - - - diff --git a/src/views/home/components/Info.vue b/src/views/home/components/Info.vue index e021807..cfdfc7d 100644 --- a/src/views/home/components/Info.vue +++ b/src/views/home/components/Info.vue @@ -46,80 +46,80 @@ const cancelEdit = () => { } const identInfo = ref() //获取身份信息 -const getInfo = async (id) => { - const res = await userIdenService(id) - identInfo.value = res - return res -} +// const getInfo = async (id) => { +// const res = await userIdenService(id) +// identInfo.value = res +// return res +// } console.log() onMounted(() => { // getInfo(id) - getInfo(id) - .then((res) => { - // 在这里可以访问在 getData 函数中返回的结果 - console.log(res.data, '000000') - identInfo.value = res.data - // 假数据 - if (res.data.roleId === 1) { - formModel.value = [ - { par: 'name', name: '姓名', content: res.data.name }, - { par: 'sex', name: '性别', content: res.data.sex }, - { par: 'nationality', name: '民族', content: res.data.nationality }, - { par: 'profession', name: '专业', content: res.data.profession }, - { par: 'education', name: '学历', content: res.data.education }, - { par: 'degree', name: '学位', content: res.data.degree }, - { - par: 'professionalTitle', - name: '职称', - content: res.data.professionalTitle, - }, - { - par: 'emergencyContact', - name: '手机号', - content: res.data.emergencyContact, - }, - { - par: 'joinWorkTime', - name: '参加工作时间', - content: res.data.joinWorkTime, - }, - { - par: 'politicalStatus', - name: '政治面貌', - content: res.data.politicalStatus, - }, - ] - } else if (res.data.roleId === 2) { - formModel.value = [ - { par: 'name', name: '姓名', content: res.data.name }, - { par: 'sex', name: '性别', content: res.data.sex }, - { par: 'nationality', name: '民族', content: res.data.nationality }, - { par: 'number', name: '学号', content: res.data.number }, - { par: 'birthday', name: '生日', content: res.data.birthday }, - { par: 'phone', name: '手机号', content: res.data.phone }, - { par: 'faculty', name: '院系', content: res.data.faculty }, - { par: 'major', name: '专业', content: res.data.major }, - { par: 'year_age', name: '入学年份', content: res.data.year_age }, - { par: 'class_name', name: '班级', content: res.data.class_name }, - ] - } - // else { - // formModel.value = [ - // { name: '姓名', content: res.data.name }, - // { name: '性别', content: res.data.id }, - // { name: '学号', content: 9.9 }, - // { name: '小米电脑', content: 9.9 }, - // { name: '小米电脑', content: 9.9 }, - // { name: '小米电脑', content: 9.9 }, - // { name: '小米电脑', content: 9.9 }, - // { name: '小米电脑', content: 9.9 }, - // { name: '小米电脑', content: 9.9 }, - // ] - // } - }) - .catch((error) => { - console.error(error) - }) + // getInfo(id) + // .then((res) => { + // // 在这里可以访问在 getData 函数中返回的结果 + // console.log(res.data, '000000') + // identInfo.value = res.data + // // 假数据 + // if (res.data.roleId === 1) { + // formModel.value = [ + // { par: 'name', name: '姓名', content: res.data.name }, + // { par: 'sex', name: '性别', content: res.data.sex }, + // { par: 'nationality', name: '民族', content: res.data.nationality }, + // { par: 'profession', name: '专业', content: res.data.profession }, + // { par: 'education', name: '学历', content: res.data.education }, + // { par: 'degree', name: '学位', content: res.data.degree }, + // { + // par: 'professionalTitle', + // name: '职称', + // content: res.data.professionalTitle, + // }, + // { + // par: 'emergencyContact', + // name: '手机号', + // content: res.data.emergencyContact, + // }, + // { + // par: 'joinWorkTime', + // name: '参加工作时间', + // content: res.data.joinWorkTime, + // }, + // { + // par: 'politicalStatus', + // name: '政治面貌', + // content: res.data.politicalStatus, + // }, + // ] + // } else if (res.data.roleId === 2) { + // formModel.value = [ + // { par: 'name', name: '姓名', content: res.data.name }, + // { par: 'sex', name: '性别', content: res.data.sex }, + // { par: 'nationality', name: '民族', content: res.data.nationality }, + // { par: 'number', name: '学号', content: res.data.number }, + // { par: 'birthday', name: '生日', content: res.data.birthday }, + // { par: 'phone', name: '手机号', content: res.data.phone }, + // { par: 'faculty', name: '院系', content: res.data.faculty }, + // { par: 'major', name: '专业', content: res.data.major }, + // { par: 'year_age', name: '入学年份', content: res.data.year_age }, + // { par: 'class_name', name: '班级', content: res.data.class_name }, + // ] + // } + // // else { + // // formModel.value = [ + // // { name: '姓名', content: res.data.name }, + // // { name: '性别', content: res.data.id }, + // // { name: '学号', content: 9.9 }, + // // { name: '小米电脑', content: 9.9 }, + // // { name: '小米电脑', content: 9.9 }, + // // { name: '小米电脑', content: 9.9 }, + // // { name: '小米电脑', content: 9.9 }, + // // { name: '小米电脑', content: 9.9 }, + // // { name: '小米电脑', content: 9.9 }, + // // ] + // // } + // }) + // .catch((error) => { + // console.error(error) + // }) }) // 编辑1 const drawer2 = ref(false) diff --git a/src/views/home/index.vue b/src/views/home/index.vue index 8f53111..4315091 100644 --- a/src/views/home/index.vue +++ b/src/views/home/index.vue @@ -32,7 +32,7 @@ const getData = async () => { } else { rightVisible.value = false } - // console.log(data.value.roles[0], 333333) + console.log(data.value, 333333) }) .catch((error) => { console.log(error) diff --git a/vite.config.ts.timestamp-1718268044772-4deaaf3aeef01.mjs b/vite.config.ts.timestamp-1718268044772-4deaaf3aeef01.mjs new file mode 100644 index 0000000..91a14a7 --- /dev/null +++ b/vite.config.ts.timestamp-1718268044772-4deaaf3aeef01.mjs @@ -0,0 +1,40 @@ +// vite.config.ts +import vue from "file:///D:/aaa/teaching/Teaching_integration_platform_admin_template/node_modules/.pnpm/@vitejs+plugin-vue@5.0.4_vite@5.1.4_vue@3.4.19/node_modules/@vitejs/plugin-vue/dist/index.mjs"; +import path from "path"; +import { viteMockServe } from "file:///D:/aaa/teaching/Teaching_integration_platform_admin_template/node_modules/.pnpm/vite-plugin-mock@3.0.1_esbuild@0.19.12_mockjs@1.1.0_vite@5.1.4/node_modules/vite-plugin-mock/dist/index.mjs"; +import { createSvgIconsPlugin } from "file:///D:/aaa/teaching/Teaching_integration_platform_admin_template/node_modules/.pnpm/vite-plugin-svg-icons@2.0.1_vite@5.1.4/node_modules/vite-plugin-svg-icons/dist/index.mjs"; +var vite_config_default = ({ command }) => { + return { + plugins: [ + vue(), + viteMockServe({ + enable: command === "serve" + }), + createSvgIconsPlugin({ + // Specify the icon folder to be cached + iconDirs: [path.resolve(process.cwd(), "src/assets/icons")], + // Specify symbolId format + symbolId: "icon-[dir]-[name]" + }) + ], + resolve: { + alias: { + "@": path.resolve("./src") + // 相对路径别名配置,使用 @ 代替 src + } + }, + // 配置scss + css: { + preprocessorOptions: { + scss: { + javascriptEnabled: true, + additionalData: '@import "./src/styles/variable.scss";' + } + } + } + }; +}; +export { + vite_config_default as default +}; +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsidml0ZS5jb25maWcudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCJEOlxcXFxhYWFcXFxcdGVhY2hpbmdcXFxcVGVhY2hpbmdfaW50ZWdyYXRpb25fcGxhdGZvcm1fYWRtaW5fdGVtcGxhdGVcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIkQ6XFxcXGFhYVxcXFx0ZWFjaGluZ1xcXFxUZWFjaGluZ19pbnRlZ3JhdGlvbl9wbGF0Zm9ybV9hZG1pbl90ZW1wbGF0ZVxcXFx2aXRlLmNvbmZpZy50c1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vRDovYWFhL3RlYWNoaW5nL1RlYWNoaW5nX2ludGVncmF0aW9uX3BsYXRmb3JtX2FkbWluX3RlbXBsYXRlL3ZpdGUuY29uZmlnLnRzXCI7aW1wb3J0IHsgZGVmaW5lQ29uZmlnIH0gZnJvbSAndml0ZSdcclxuaW1wb3J0IHZ1ZSBmcm9tICdAdml0ZWpzL3BsdWdpbi12dWUnXHJcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXHJcbi8vIFx1NUJGQ1x1NTE2NW1vY2tcdTYzRDJcdTRFRjZcclxuaW1wb3J0IHsgdml0ZU1vY2tTZXJ2ZSB9IGZyb20gJ3ZpdGUtcGx1Z2luLW1vY2snXHJcbi8vIFx1NUJGQ1x1NTE2NXN2Z1x1OTE0RFx1N0Y2RVx1NjNEMlx1NEVGNlxyXG5pbXBvcnQgeyBjcmVhdGVTdmdJY29uc1BsdWdpbiB9IGZyb20gJ3ZpdGUtcGx1Z2luLXN2Zy1pY29ucydcclxuLy8gaHR0cHM6Ly92aXRlanMuZGV2L2NvbmZpZy9cclxuZXhwb3J0IGRlZmF1bHQgKHsgY29tbWFuZCB9OiBhbnkpID0+IHtcclxuICByZXR1cm4ge1xyXG4gICAgcGx1Z2luczogW1xyXG4gICAgICB2dWUoKSxcclxuICAgICAgdml0ZU1vY2tTZXJ2ZSh7XHJcbiAgICAgICAgZW5hYmxlOiBjb21tYW5kID09PSAnc2VydmUnLFxyXG4gICAgICB9KSxcclxuICAgICAgY3JlYXRlU3ZnSWNvbnNQbHVnaW4oe1xyXG4gICAgICAgIC8vIFNwZWNpZnkgdGhlIGljb24gZm9sZGVyIHRvIGJlIGNhY2hlZFxyXG4gICAgICAgIGljb25EaXJzOiBbcGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCksICdzcmMvYXNzZXRzL2ljb25zJyldLFxyXG4gICAgICAgIC8vIFNwZWNpZnkgc3ltYm9sSWQgZm9ybWF0XHJcbiAgICAgICAgc3ltYm9sSWQ6ICdpY29uLVtkaXJdLVtuYW1lXScsXHJcbiAgICAgIH0pLFxyXG4gICAgXSxcclxuICAgIHJlc29sdmU6IHtcclxuICAgICAgYWxpYXM6IHtcclxuICAgICAgICAnQCc6IHBhdGgucmVzb2x2ZSgnLi9zcmMnKSwgLy8gXHU3NkY4XHU1QkY5XHU4REVGXHU1Rjg0XHU1MjJCXHU1NDBEXHU5MTREXHU3RjZFXHVGRjBDXHU0RjdGXHU3NTI4IEAgXHU0RUUzXHU2NkZGIHNyY1xyXG4gICAgICB9LFxyXG4gICAgfSxcclxuICAgIC8vIFx1OTE0RFx1N0Y2RXNjc3NcclxuICAgIGNzczoge1xyXG4gICAgICBwcmVwcm9jZXNzb3JPcHRpb25zOiB7XHJcbiAgICAgICAgc2Nzczoge1xyXG4gICAgICAgICAgamF2YXNjcmlwdEVuYWJsZWQ6IHRydWUsXHJcbiAgICAgICAgICBhZGRpdGlvbmFsRGF0YTogJ0BpbXBvcnQgXCIuL3NyYy9zdHlsZXMvdmFyaWFibGUuc2Nzc1wiOycsXHJcbiAgICAgICAgfSxcclxuICAgICAgfSxcclxuICAgIH0sXHJcbiAgfVxyXG59XHJcbiJdLAogICJtYXBwaW5ncyI6ICI7QUFDQSxPQUFPLFNBQVM7QUFDaEIsT0FBTyxVQUFVO0FBRWpCLFNBQVMscUJBQXFCO0FBRTlCLFNBQVMsNEJBQTRCO0FBRXJDLElBQU8sc0JBQVEsQ0FBQyxFQUFFLFFBQVEsTUFBVztBQUNuQyxTQUFPO0FBQUEsSUFDTCxTQUFTO0FBQUEsTUFDUCxJQUFJO0FBQUEsTUFDSixjQUFjO0FBQUEsUUFDWixRQUFRLFlBQVk7QUFBQSxNQUN0QixDQUFDO0FBQUEsTUFDRCxxQkFBcUI7QUFBQTtBQUFBLFFBRW5CLFVBQVUsQ0FBQyxLQUFLLFFBQVEsUUFBUSxJQUFJLEdBQUcsa0JBQWtCLENBQUM7QUFBQTtBQUFBLFFBRTFELFVBQVU7QUFBQSxNQUNaLENBQUM7QUFBQSxJQUNIO0FBQUEsSUFDQSxTQUFTO0FBQUEsTUFDUCxPQUFPO0FBQUEsUUFDTCxLQUFLLEtBQUssUUFBUSxPQUFPO0FBQUE7QUFBQSxNQUMzQjtBQUFBLElBQ0Y7QUFBQTtBQUFBLElBRUEsS0FBSztBQUFBLE1BQ0gscUJBQXFCO0FBQUEsUUFDbkIsTUFBTTtBQUFBLFVBQ0osbUJBQW1CO0FBQUEsVUFDbkIsZ0JBQWdCO0FBQUEsUUFDbEI7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFDRjsiLAogICJuYW1lcyI6IFtdCn0K