Files
education/frontend/node_modules/.cache/vue-loader/44f37b030835fb41b3e4e78dcc86b858.json
T

1 line
23 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{"remainingRequest":"C:\\Users\\Admin\\Desktop\\education\\frontend\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!C:\\Users\\Admin\\Desktop\\education\\frontend\\src\\layout\\components\\Navbar.vue?vue&type=style&index=0&id=d16d6306&lang=scss&scoped=true","dependencies":[{"path":"C:\\Users\\Admin\\Desktop\\education\\frontend\\src\\layout\\components\\Navbar.vue","mtime":1787567993805},{"path":"C:\\Users\\Admin\\Desktop\\education\\frontend\\node_modules\\css-loader\\dist\\cjs.js","mtime":1787309792478},{"path":"C:\\Users\\Admin\\Desktop\\education\\frontend\\node_modules\\vue-loader\\lib\\loaders\\stylePostLoader.js","mtime":1787309794547},{"path":"C:\\Users\\Admin\\Desktop\\education\\frontend\\node_modules\\postcss-loader\\src\\index.js","mtime":1787309793084},{"path":"C:\\Users\\Admin\\Desktop\\education\\frontend\\node_modules\\sass-loader\\dist\\cjs.js","mtime":1787309791955},{"path":"C:\\Users\\Admin\\Desktop\\education\\frontend\\node_modules\\cache-loader\\dist\\cjs.js","mtime":1787309791955},{"path":"C:\\Users\\Admin\\Desktop\\education\\frontend\\node_modules\\vue-loader\\lib\\index.js","mtime":1787309793790}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg0KLm5hdmJhci5uYXYzIHsNCiAgLmhhbWJ1cmdlci1jb250YWluZXIgew0KICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsNCiAgfQ0KfQ0KDQoubmF2YmFyIHsNCiAgaGVpZ2h0OiA1MHB4Ow0KICBvdmVyZmxvdzogaGlkZGVuOw0KICBwb3NpdGlvbjogcmVsYXRpdmU7DQogIGJhY2tncm91bmQ6ICNmZmY7DQogIGJveC1zaGFkb3c6IDAgMXB4IDRweCByZ2JhKDAsMjEsNDEsLjA4KTsNCiAgZGlzcGxheTogZmxleDsNCiAgYWxpZ24taXRlbXM6IGNlbnRlcjsNCiAgLy8gcGFkZGluZzogMCA4cHg7DQogIGJveC1zaXppbmc6IGJvcmRlci1ib3g7DQoNCiAgJi5oZWFkZXItbW9kZSB7DQogICAgaGVpZ2h0OiAxMDAlOw0KICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50Ow0KICAgIGJveC1zaGFkb3c6IG5vbmU7DQogICAgcGFkZGluZy1yaWdodDogOHB4Ow0KDQogICAgLyog5rex6Imy6aG25qCP5LiL5Y+z5L6n5Yqf6IO95Yy65Zu+5qCH5LiO5paH5a2X5pS55Li655m96ImyICovDQogICAgLnJpZ2h0LW1lbnUtaXRlbSB7DQogICAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjk1KTsNCg0KICAgICAgJi5pY29uLWJ0biB7DQogICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4Ow0KICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOw0KICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsNCiAgICAgICAgd2lkdGg6IDM4cHg7DQogICAgICAgIGhlaWdodDogMzhweDsNCiAgICAgICAgYm9yZGVyLXJhZGl1czogN3B4Ow0KICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDcpOw0KICAgICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTApOw0KICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuMThzIGVhc2UsIGJvcmRlci1jb2xvciAwLjE4cyBlYXNlOw0KICAgICAgICBjdXJzb3I6IHBvaW50ZXI7DQoNCiAgICAgICAgJjpob3ZlciB7DQogICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KTsNCiAgICAgICAgICBib3JkZXItY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yOCk7DQogICAgICAgIH0NCg0KICAgICAgICAmOmFjdGl2ZSB7DQogICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIxKTsNCiAgICAgICAgfQ0KDQogICAgICAgIC5zdmctaWNvbiB7DQogICAgICAgICAgd2lkdGg6IDE4cHg7DQogICAgICAgICAgaGVpZ2h0OiAxOHB4Ow0KICAgICAgICB9DQogICAgICB9DQoNCiAgICAgIC5lbC1kcm9wZG93bi1saW5rIHsNCiAgICAgICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45NSk7DQogICAgICB9DQogICAgfQ0KDQogICAgLyog6YCa6L+H5rex6YCJ5oup5Zmo6K6pIC5pY29uLWJ0biDmoLflvI/lkIzml7bnqb/pgI/liLDlrZDnu4Tku7bvvIjlpoIgSGVhZGVyTm90aWNl77yJ55qE5qC55YWD57SgICovDQogICAgOjp2LWRlZXAgLmljb24tYnRuIHsNCiAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4ICFpbXBvcnRhbnQ7DQogICAgICBhbGlnbi1pdGVtczogY2VudGVyOw0KICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7DQogICAgICB3aWR0aDogMzhweDsNCiAgICAgIGhlaWdodDogMzhweDsNCiAgICAgIGJvcmRlci1yYWRpdXM6IDdweDsNCiAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNyk7DQogICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTApOw0KICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjE4cyBlYXNlLCBib3JkZXItY29sb3IgMC4xOHMgZWFzZTsNCiAgICAgIGN1cnNvcjogcG9pbnRlcjsNCg0KICAgICAgJjpob3ZlciB7DQogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSk7DQogICAgICAgIGJvcmRlci1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjI4KTsNCiAgICAgIH0NCg0KICAgICAgJjphY3RpdmUgew0KICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjEpOw0KICAgICAgfQ0KDQogICAgICAuc3ZnLWljb24gew0KICAgICAgICB3aWR0aDogMThweDsNCiAgICAgICAgaGVpZ2h0OiAxOHB4Ow0KICAgICAgICBjb2xvcjogI2ZmZjsNCiAgICAgIH0NCiAgICB9DQoNCiAgICAuYXZhdGFyLWNvbnRhaW5lciAuYXZhdGFyLXdyYXBwZXIgLnVzZXItbmlja25hbWUgew0KICAgICAgY29sb3I6ICNmZmY7DQogICAgfQ0KICB9DQoNCiAgLmhhbWJ1cmdlci1jb250YWluZXIgew0KICAgIGxpbmUtaGVpZ2h0OiA0NnB4Ow0KICAgIGhlaWdodDogMTAwJTsNCiAgICBjdXJzb3I6IHBvaW50ZXI7DQogICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAuM3M7DQogICAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50Ow0KICAgIGRpc3BsYXk6IGZsZXg7DQogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsNCiAgICBmbGV4LXNocmluazogMDsNCiAgICBtYXJnaW4tcmlnaHQ6IDhweDsNCg0KICAgICY6aG92ZXIgew0KICAgICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAuMDI1KQ0KICAgIH0NCiAgfQ0KDQogIC5icmVhZGNydW1iLWNvbnRhaW5lciB7DQogICAgZmxleC1zaHJpbms6IDA7DQogIH0NCg0KICAudG9wbWVudS1jb250YWluZXIgew0KICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsNCiAgICBsZWZ0OiA1MHB4Ow0KICB9DQoNCiAgLnJpZ2h0LW1lbnUgew0KICAgIGhlaWdodDogMTAwJTsNCiAgICBsaW5lLWhlaWdodDogNTBweDsNCiAgICBkaXNwbGF5OiBmbGV4Ow0KICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7DQogICAgbWFyZ2luLWxlZnQ6IGF1dG87DQogICAgZ2FwOiA2cHg7DQoNCiAgICAmOmZvY3VzIHsNCiAgICAgIG91dGxpbmU6IG5vbmU7DQogICAgfQ0KDQogICAgLnJpZ2h0LW1lbnUtaXRlbSB7DQogICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsNCiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7DQogICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsNCiAgICAgIGhlaWdodDogMTAwJTsNCiAgICAgIGZvbnQtc2l6ZTogMThweDsNCiAgICAgIGNvbG9yOiAjNWE1ZTY2Ow0KICAgICAgdmVydGljYWwtYWxpZ246IHRleHQtYm90dG9tOw0KICAgICAgcGFkZGluZzogMDsNCiAgICAgIGxpbmUtaGVpZ2h0OiBub3JtYWw7DQoNCiAgICAgICYuaWNvbi1idG4gew0KICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7DQogICAgICB9DQoNCiAgICAgIC5lbC1kcm9wZG93bi1saW5rIHsNCiAgICAgICAgZm9udC1zaXplOiAxNHB4Ow0KICAgICAgICBjb2xvcjogIzVhNWU2NjsNCiAgICAgICAgY3Vyc29yOiBwb2ludGVyOw0KICAgICAgfQ0KICAgIH0NCg0KICAgIC5hdmF0YXItY29udGFpbmVyIHsNCiAgICAgIG1hcmdpbi1yaWdodDogMDsNCiAgICAgIHBhZGRpbmc6IDAgNnB4IDAgMTBweDsNCiAgICAgIGhlaWdodDogMTAwJTsNCiAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsNCiAgICAgIGN1cnNvcjogcG9pbnRlcjsNCg0KICAgICAgJi5pcy1hY3RpdmUgLnVzZXItY2FyZXQgew0KICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpOw0KICAgICAgfQ0KDQogICAgICAuYXZhdGFyLXdyYXBwZXIgew0KICAgICAgICBkaXNwbGF5OiBmbGV4Ow0KICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOw0KICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7DQogICAgICAgIGdhcDogMTBweDsNCg0KICAgICAgICAuYXZhdGFyLWJveCB7DQogICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOw0KICAgICAgICAgIHdpZHRoOiAzNnB4Ow0KICAgICAgICAgIGhlaWdodDogMzZweDsNCiAgICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7DQogICAgICAgICAgcGFkZGluZzogMnB4Ow0KICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45Mik7DQogICAgICAgICAgYm94LXNoYWRvdzogMCAxcHggNHB4IHJnYmEoMCwgMCwgMCwgMC4xMik7DQogICAgICAgICAgZmxleC1zaHJpbms6IDA7DQogICAgICAgIH0NCg0KICAgICAgICAudXNlci1hdmF0YXIgew0KICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjsNCiAgICAgICAgICB3aWR0aDogMTAwJTsNCiAgICAgICAgICBoZWlnaHQ6IDEwMCU7DQogICAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4Ow0KICAgICAgICAgIG9iamVjdC1maXQ6IGNvdmVyOw0KICAgICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWVkdS1ncmVlbi1saWdodCk7DQogICAgICAgICAgZGlzcGxheTogYmxvY2s7DQogICAgICAgIH0NCg0KICAgICAgICAub25saW5lLWRvdCB7DQogICAgICAgICAgcG9zaXRpb246IGFic29sdXRlOw0KICAgICAgICAgIHJpZ2h0OiAwOw0KICAgICAgICAgIGJvdHRvbTogMDsNCiAgICAgICAgICB3aWR0aDogMTBweDsNCiAgICAgICAgICBoZWlnaHQ6IDEwcHg7DQogICAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOw0KICAgICAgICAgIGJhY2tncm91bmQ6ICMyZWNjNzE7DQogICAgICAgICAgYm9yZGVyOiAycHggc29saWQgI2ZmZjsNCiAgICAgICAgICBib3gtc2hhZG93OiAwIDAgMCAwIHJnYmEoNDYsIDIwNCwgMTEzLCAwLjYpOw0KICAgICAgICAgIGFuaW1hdGlvbjogb25saW5lUHVsc2UgMnMgaW5maW5pdGU7DQogICAgICAgIH0NCg0KICAgICAgICBAa2V5ZnJhbWVzIG9ubGluZVB1bHNlIHsNCiAgICAgICAgICAwJSB7IGJveC1zaGFkb3c6IDAgMCAwIDAgcmdiYSg0NiwgMjA0LCAxMTMsIDAuNTUpOyB9DQogICAgICAgICAgNzAlIHsgYm94LXNoYWRvdzogMCAwIDAgNnB4IHJnYmEoNDYsIDIwNCwgMTEzLCAwKTsgfQ0KICAgICAgICAgIDEwMCUgeyBib3gtc2hhZG93OiAwIDAgMCAwIHJnYmEoNDYsIDIwNCwgMTEzLCAwKTsgfQ0KICAgICAgICB9DQoNCiAgICAgICAgLnVzZXItaW5mbyB7DQogICAgICAgICAgZGlzcGxheTogZmxleDsNCiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOw0KICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOw0KICAgICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE1Ow0KICAgICAgICAgIG1pbi13aWR0aDogMDsNCiAgICAgICAgfQ0KDQogICAgICAgIC51c2VyLW5pY2tuYW1lIHsNCiAgICAgICAgICBmb250LXNpemU6IDE0cHg7DQogICAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsNCiAgICAgICAgICBjb2xvcjogI2ZmZjsNCiAgICAgICAgICBtYXgtd2lkdGg6IDEyMHB4Ow0KICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47DQogICAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7DQogICAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsNCiAgICAgICAgICBsZXR0ZXItc3BhY2luZzogMC4zcHg7DQogICAgICAgICAgdGV4dC1zaGFkb3c6IDAgMXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTUpOw0KICAgICAgICB9DQoNCiAgICAgICAgLnVzZXItcm9sZSB7DQogICAgICAgICAgZm9udC1zaXplOiAxMXB4Ow0KICAgICAgICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyk7DQogICAgICAgICAgbWFyZ2luLXRvcDogMnB4Ow0KICAgICAgICAgIGxldHRlci1zcGFjaW5nOiAwLjJweDsNCiAgICAgICAgfQ0KDQogICAgICAgIC51c2VyLWNhcmV0IHsNCiAgICAgICAgICBmb250LXNpemU6IDEycHg7DQogICAgICAgICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44NSk7DQogICAgICAgICAgbWFyZ2luLWxlZnQ6IDJweDsNCiAgICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4ycyBlYXNlOw0KICAgICAgICB9DQogICAgICB9DQogICAgfQ0KICB9DQp9DQoNCi8qIOeUqOaIt+S4i+aLieiPnOWNlSAtIOaPkOWNh+inhuinieWTgei0qO+8iOmdniBzY29wZWTvvIzlm6DkuLogZWwtZHJvcGRvd24tbWVudSDmuLLmn5PliLAgYm9kee+8iSAqLw0KLnVzZXItZHJvcGRvd24tbWVudSB7DQogIGJvcmRlci1yYWRpdXM6IDEwcHggIWltcG9ydGFudDsNCiAgYm9yZGVyOiAxcHggc29saWQgI2ViZWVmNSAhaW1wb3J0YW50Ow0KICBib3gtc2hhZG93OiAwIDhweCAyNHB4IHJnYmEoMCwgMCwgMCwgMC4xMiksIDAgMnB4IDZweCByZ2JhKDAsIDAsIDAsIDAuMDYpICFpbXBvcnRhbnQ7DQogIHBhZGRpbmc6IDZweCAhaW1wb3J0YW50Ow0KICBvdmVyZmxvdzogaGlkZGVuOw0KDQogIC5lbC1kcm9wZG93bi1tZW51X19pdGVtIHsNCiAgICBib3JkZXItcmFkaXVzOiA2cHg7DQogICAgZm9udC1zaXplOiAxM3B4Ow0KICAgIGNvbG9yOiAjMzAzMTMzOw0KICAgIGxpbmUtaGVpZ2h0OiAzNnB4Ow0KICAgIHBhZGRpbmc6IDAgMTRweDsNCiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMnMsIGNvbG9yIDAuMnM7DQoNCiAgICBpIHsNCiAgICAgIGZvbnQtc2l6ZTogMTRweDsNCiAgICAgIGNvbG9yOiB2YXIoLS1lZHUtZ3JlZW4tcHJpbWFyeSk7DQogICAgICBtYXJnaW4tcmlnaHQ6IDhweDsNCiAgICB9DQoNCiAgICAmOm5vdCguaXMtZGlzYWJsZWQpOmhvdmVyLA0KICAgICY6bm90KC5pcy1kaXNhYmxlZCk6Zm9jdXMgew0KICAgICAgYmFja2dyb3VuZDogdmFyKC0tZWR1LWdyZWVuLWxpZ2h0KTsNCiAgICAgIGNvbG9yOiB2YXIoLS1lZHUtZ3JlZW4tcHJpbWFyeSk7DQogICAgICBvdXRsaW5lOiBub25lOw0KICAgIH0NCiAgfQ0KfQ0K"},{"version":3,"sources":["Navbar.vue"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgIA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"Navbar.vue","sourceRoot":"src/layout/components","sourcesContent":["<template>\r\n <div class=\"navbar\" :class=\"[{ 'header-mode': headerMode }]\">\r\n <hamburger v-if=\"!headerMode\" id=\"hamburger-container\" :is-active=\"sidebar.opened\" class=\"hamburger-container\" @toggleClick=\"toggleSideBar\" />\r\n\r\n <breadcrumb v-if=\"!headerMode\" id=\"breadcrumb-container\" class=\"breadcrumb-container\" />\r\n <div class=\"right-menu\">\r\n <template v-if=\"device!=='mobile'\">\r\n <el-tooltip content=\"菜单搜索\" effect=\"dark\" placement=\"bottom\">\r\n <div id=\"header-search\" class=\"right-menu-item icon-btn\" @click=\"openSearch\">\r\n <search ref=\"searchRef\" />\r\n </div>\r\n </el-tooltip>\r\n\r\n <el-tooltip content=\"消息通知\" effect=\"dark\" placement=\"bottom\">\r\n <header-notice id=\"header-notice\" class=\"right-menu-item icon-btn\" />\r\n </el-tooltip>\r\n\r\n </template>\r\n\r\n <el-dropdown class=\"avatar-container right-menu-item\" trigger=\"click\" @command=\"handleCommand\">\r\n <div class=\"avatar-wrapper\">\r\n <div class=\"avatar-box\">\r\n <img :src=\"avatar\" class=\"user-avatar\">\r\n <span class=\"online-dot\" title=\"在线\"></span>\r\n </div>\r\n <div class=\"user-info\">\r\n <span class=\"user-nickname\">{{ nickName }}</span>\r\n <span class=\"user-role\">{{ userRoleLabel }}</span>\r\n </div>\r\n <i class=\"el-icon-arrow-down user-caret\"></i>\r\n </div>\r\n <el-dropdown-menu slot=\"dropdown\" class=\"user-dropdown-menu\">\r\n <router-link to=\"/user/profile\">\r\n <el-dropdown-item icon=\"el-icon-user\">个人中心</el-dropdown-item>\r\n </router-link>\r\n <el-dropdown-item icon=\"el-icon-lock\" @click.native=\"lockScreen\">\r\n <span>锁定屏幕</span>\r\n </el-dropdown-item>\r\n <el-dropdown-item divided icon=\"el-icon-switch-button\" @click.native=\"logout\">\r\n <span>退出登录</span>\r\n </el-dropdown-item>\r\n </el-dropdown-menu>\r\n </el-dropdown>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport { mapGetters } from 'vuex'\r\nimport Breadcrumb from '@/components/Breadcrumb'\r\nimport Hamburger from '@/components/Hamburger'\r\nimport Screenfull from '@/components/Screenfull'\r\nimport Search from '@/components/HeaderSearch'\r\nimport HeaderNotice from './HeaderNotice'\r\n\r\nexport default {\r\n components: {\r\n Breadcrumb,\r\n Hamburger,\r\n Screenfull,\r\n Search,\r\n HeaderNotice\r\n },\r\n props: {\r\n // headerMode=true 时,Navbar 作为顶部全宽 Header 右侧功能区,仅渲染 right-menu\r\n headerMode: {\r\n type: Boolean,\r\n default: false\r\n }\r\n },\r\n data() {\r\n return {}\r\n },\r\n computed: {\r\n ...mapGetters([\r\n 'sidebar',\r\n 'avatar',\r\n 'device',\r\n 'nickName',\r\n 'roles'\r\n ]),\r\n // 用户角色标签:根据 roles 数组智能映射为友好文本\r\n userRoleLabel() {\r\n const roleMap = {\r\n admin: '系统管理员',\r\n teacher: '教师用户',\r\n student: '学生用户',\r\n ROLE_DEFAULT: '普通用户'\r\n }\r\n const r = (this.roles && this.roles[0]) || ''\r\n // 直接匹配或去除 ROLE_ 前缀后再匹配\r\n return roleMap[r] || roleMap[String(r).replace(/^ROLE_/, '')] || '教学管理系统'\r\n }\r\n },\r\n methods: {\r\n toggleSideBar() {\r\n this.$store.dispatch('app/toggleSideBar')\r\n },\r\n handleCommand(command) {\r\n // 预留:下拉菜单 command 事件入口\r\n },\r\n openSearch() {\r\n if (this.$refs.searchRef && typeof this.$refs.searchRef.click === 'function') {\r\n this.$refs.searchRef.click()\r\n }\r\n },\r\n lockScreen() {\r\n const currentPath = this.$route.fullPath\r\n this.$store.dispatch('lock/lockScreen', currentPath).then(() => {\r\n this.$router.push('/lock')\r\n })\r\n },\r\n logout() {\r\n this.$confirm('确定注销并退出系统吗?', '提示', {\r\n confirmButtonText: '确定',\r\n cancelButtonText: '取消',\r\n type: 'warning'\r\n }).then(() => {\r\n this.$store.dispatch('LogOut').then(() => {\r\n location.href = '/index'\r\n })\r\n }).catch(() => {})\r\n },\r\n }\r\n}\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n.navbar.nav3 {\r\n .hamburger-container {\r\n display: none !important;\r\n }\r\n}\r\n\r\n.navbar {\r\n height: 50px;\r\n overflow: hidden;\r\n position: relative;\r\n background: #fff;\r\n box-shadow: 0 1px 4px rgba(0,21,41,.08);\r\n display: flex;\r\n align-items: center;\r\n // padding: 0 8px;\r\n box-sizing: border-box;\r\n\r\n &.header-mode {\r\n height: 100%;\r\n background: transparent;\r\n box-shadow: none;\r\n padding-right: 8px;\r\n\r\n /* 深色顶栏下右侧功能区图标与文字改为白色 */\r\n .right-menu-item {\r\n color: rgba(255, 255, 255, 0.95);\r\n\r\n &.icon-btn {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n width: 38px;\r\n height: 38px;\r\n border-radius: 7px;\r\n background: rgba(255, 255, 255, 0.07);\r\n border: 1px solid rgba(255, 255, 255, 0.10);\r\n transition: background-color 0.18s ease, border-color 0.18s ease;\r\n cursor: pointer;\r\n\r\n &:hover {\r\n background: rgba(255, 255, 255, 0.15);\r\n border-color: rgba(255, 255, 255, 0.28);\r\n }\r\n\r\n &:active {\r\n background: rgba(255, 255, 255, 0.21);\r\n }\r\n\r\n .svg-icon {\r\n width: 18px;\r\n height: 18px;\r\n }\r\n }\r\n\r\n .el-dropdown-link {\r\n color: rgba(255, 255, 255, 0.95);\r\n }\r\n }\r\n\r\n /* 通过深选择器让 .icon-btn 样式同时穿透到子组件(如 HeaderNotice)的根元素 */\r\n ::v-deep .icon-btn {\r\n display: inline-flex !important;\r\n align-items: center;\r\n justify-content: center;\r\n width: 38px;\r\n height: 38px;\r\n border-radius: 7px;\r\n background: rgba(255, 255, 255, 0.07);\r\n border: 1px solid rgba(255, 255, 255, 0.10);\r\n transition: background-color 0.18s ease, border-color 0.18s ease;\r\n cursor: pointer;\r\n\r\n &:hover {\r\n background: rgba(255, 255, 255, 0.15);\r\n border-color: rgba(255, 255, 255, 0.28);\r\n }\r\n\r\n &:active {\r\n background: rgba(255, 255, 255, 0.21);\r\n }\r\n\r\n .svg-icon {\r\n width: 18px;\r\n height: 18px;\r\n color: #fff;\r\n }\r\n }\r\n\r\n .avatar-container .avatar-wrapper .user-nickname {\r\n color: #fff;\r\n }\r\n }\r\n\r\n .hamburger-container {\r\n line-height: 46px;\r\n height: 100%;\r\n cursor: pointer;\r\n transition: background .3s;\r\n -webkit-tap-highlight-color:transparent;\r\n display: flex;\r\n align-items: center;\r\n flex-shrink: 0;\r\n margin-right: 8px;\r\n\r\n &:hover {\r\n background: rgba(0, 0, 0, .025)\r\n }\r\n }\r\n\r\n .breadcrumb-container {\r\n flex-shrink: 0;\r\n }\r\n\r\n .topmenu-container {\r\n position: absolute;\r\n left: 50px;\r\n }\r\n\r\n .right-menu {\r\n height: 100%;\r\n line-height: 50px;\r\n display: flex;\r\n align-items: center;\r\n margin-left: auto;\r\n gap: 6px;\r\n\r\n &:focus {\r\n outline: none;\r\n }\r\n\r\n .right-menu-item {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n height: 100%;\r\n font-size: 18px;\r\n color: #5a5e66;\r\n vertical-align: text-bottom;\r\n padding: 0;\r\n line-height: normal;\r\n\r\n &.icon-btn {\r\n position: relative;\r\n }\r\n\r\n .el-dropdown-link {\r\n font-size: 14px;\r\n color: #5a5e66;\r\n cursor: pointer;\r\n }\r\n }\r\n\r\n .avatar-container {\r\n margin-right: 0;\r\n padding: 0 6px 0 10px;\r\n height: 100%;\r\n border-radius: 8px;\r\n cursor: pointer;\r\n\r\n &.is-active .user-caret {\r\n transform: rotate(180deg);\r\n }\r\n\r\n .avatar-wrapper {\r\n display: flex;\r\n align-items: center;\r\n position: relative;\r\n gap: 10px;\r\n\r\n .avatar-box {\r\n position: relative;\r\n width: 36px;\r\n height: 36px;\r\n border-radius: 8px;\r\n padding: 2px;\r\n background: rgba(255, 255, 255, 0.92);\r\n box-shadow: 0 1px 4px rgba(0, 0, 0, 0.12);\r\n flex-shrink: 0;\r\n }\r\n\r\n .user-avatar {\r\n cursor: pointer;\r\n width: 100%;\r\n height: 100%;\r\n border-radius: 6px;\r\n object-fit: cover;\r\n background: var(--edu-green-light);\r\n display: block;\r\n }\r\n\r\n .online-dot {\r\n position: absolute;\r\n right: 0;\r\n bottom: 0;\r\n width: 10px;\r\n height: 10px;\r\n border-radius: 50%;\r\n background: #2ecc71;\r\n border: 2px solid #fff;\r\n box-shadow: 0 0 0 0 rgba(46, 204, 113, 0.6);\r\n animation: onlinePulse 2s infinite;\r\n }\r\n\r\n @keyframes onlinePulse {\r\n 0% { box-shadow: 0 0 0 0 rgba(46, 204, 113, 0.55); }\r\n 70% { box-shadow: 0 0 0 6px rgba(46, 204, 113, 0); }\r\n 100% { box-shadow: 0 0 0 0 rgba(46, 204, 113, 0); }\r\n }\r\n\r\n .user-info {\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: center;\r\n line-height: 1.15;\r\n min-width: 0;\r\n }\r\n\r\n .user-nickname {\r\n font-size: 14px;\r\n font-weight: 600;\r\n color: #fff;\r\n max-width: 120px;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n white-space: nowrap;\r\n letter-spacing: 0.3px;\r\n text-shadow: 0 1px 2px rgba(0, 0, 0, 0.15);\r\n }\r\n\r\n .user-role {\r\n font-size: 11px;\r\n color: rgba(255, 255, 255, 0.7);\r\n margin-top: 2px;\r\n letter-spacing: 0.2px;\r\n }\r\n\r\n .user-caret {\r\n font-size: 12px;\r\n color: rgba(255, 255, 255, 0.85);\r\n margin-left: 2px;\r\n transition: transform 0.2s ease;\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\n/* 用户下拉菜单 - 提升视觉品质(非 scoped,因为 el-dropdown-menu 渲染到 body */\r\n.user-dropdown-menu {\r\n border-radius: 10px !important;\r\n border: 1px solid #ebeef5 !important;\r\n box-shadow: 0 8px 24px rgba(0, 0, 0, 0.12), 0 2px 6px rgba(0, 0, 0, 0.06) !important;\r\n padding: 6px !important;\r\n overflow: hidden;\r\n\r\n .el-dropdown-menu__item {\r\n border-radius: 6px;\r\n font-size: 13px;\r\n color: #303133;\r\n line-height: 36px;\r\n padding: 0 14px;\r\n transition: background 0.2s, color 0.2s;\r\n\r\n i {\r\n font-size: 14px;\r\n color: var(--edu-green-primary);\r\n margin-right: 8px;\r\n }\r\n\r\n &:not(.is-disabled):hover,\r\n &:not(.is-disabled):focus {\r\n background: var(--edu-green-light);\r\n color: var(--edu-green-primary);\r\n outline: none;\r\n }\r\n }\r\n}\r\n</style>\r\n"]}]}