Files
education/frontend/node_modules/.cache/babel-loader/8326a0b3ee7bf0e94f7ac87cc21f5187.json
T

1 line
27 KiB
JSON

{"remainingRequest":"C:\\Users\\Admin\\Desktop\\education\\frontend\\node_modules\\babel-loader\\lib\\index.js!C:\\Users\\Admin\\Desktop\\education\\frontend\\node_modules\\cache-loader\\dist\\cjs.js??ref--0-0!C:\\Users\\Admin\\Desktop\\education\\frontend\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!C:\\Users\\Admin\\Desktop\\education\\frontend\\src\\views\\lock.vue?vue&type=script&lang=js","dependencies":[{"path":"C:\\Users\\Admin\\Desktop\\education\\frontend\\src\\views\\lock.vue","mtime":1787567871616},{"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\\babel-loader\\lib\\index.js","mtime":1787309793142},{"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},{"path":"C:\\Users\\Admin\\Desktop\\education\\frontend\\babel.config.js","mtime":1787567871334},{"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\\babel-loader\\lib\\index.js","mtime":1787309793142},{"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:InVzZSBzdHJpY3QiOwoKdmFyIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQgPSByZXF1aXJlKCJDOi9Vc2Vycy9BZG1pbi9EZXNrdG9wL2VkdWNhdGlvbi9mcm9udGVuZC9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbnRlcm9wUmVxdWlyZURlZmF1bHQuanMiKS5kZWZhdWx0OwpPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgIl9fZXNNb2R1bGUiLCB7CiAgdmFsdWU6IHRydWUKfSk7CmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDsKcmVxdWlyZSgiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmNvbmNhdC5qcyIpOwpyZXF1aXJlKCJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuZmlsbC5qcyIpOwpyZXF1aXJlKCJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkucHVzaC5qcyIpOwpyZXF1aXJlKCJjb3JlLWpzL21vZHVsZXMvZXMubWF0aC5oeXBvdC5qcyIpOwpyZXF1aXJlKCJjb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LnRvLXN0cmluZy5qcyIpOwpyZXF1aXJlKCJjb3JlLWpzL21vZHVsZXMvZXMucmVnZXhwLmV4ZWMuanMiKTsKcmVxdWlyZSgiY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC50by1zdHJpbmcuanMiKTsKcmVxdWlyZSgiY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5wYWQtc3RhcnQuanMiKTsKcmVxdWlyZSgiY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5yZXBsYWNlLmpzIik7CnJlcXVpcmUoImNvcmUtanMvbW9kdWxlcy9lc25leHQuaXRlcmF0b3IuY29uc3RydWN0b3IuanMiKTsKcmVxdWlyZSgiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5pdGVyYXRvci5mb3ItZWFjaC5qcyIpOwpyZXF1aXJlKCJjb3JlLWpzL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5mb3ItZWFjaC5qcyIpOwp2YXIgX3JlZ2VuZXJhdG9yMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZSgiQzovVXNlcnMvQWRtaW4vRGVza3RvcC9lZHVjYXRpb24vZnJvbnRlbmQvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvcmVnZW5lcmF0b3IuanMiKSk7CnZhciBfYXN5bmNUb0dlbmVyYXRvcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoIkM6L1VzZXJzL0FkbWluL0Rlc2t0b3AvZWR1Y2F0aW9uL2Zyb250ZW5kL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FzeW5jVG9HZW5lcmF0b3IuanMiKSk7CnZhciBfb2JqZWN0U3ByZWFkMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZSgiQzovVXNlcnMvQWRtaW4vRGVza3RvcC9lZHVjYXRpb24vZnJvbnRlbmQvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvb2JqZWN0U3ByZWFkMi5qcyIpKTsKdmFyIF92dWV4ID0gcmVxdWlyZSgidnVleCIpOwp2YXIgX2xvZ2luID0gcmVxdWlyZSgiQC9hcGkvbG9naW4iKTsKdmFyIF9wcm9maWxlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKCJAL2Fzc2V0cy9pbWFnZXMvcHJvZmlsZS5qcGciKSk7Ci8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCnZhciBfZGVmYXVsdCA9IGV4cG9ydHMuZGVmYXVsdCA9IHsKICBuYW1lOiAnTG9ja1NjcmVlbicsCiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHsKICAgIHJldHVybiB7CiAgICAgIHBhc3N3b3JkOiAnJywKICAgICAgbG9hZGluZzogZmFsc2UsCiAgICAgIGVycm9yTXNnOiAnJywKICAgICAgaXNTaGFraW5nOiBmYWxzZSwKICAgICAgY3VycmVudFRpbWU6ICcnLAogICAgICBjdXJyZW50RGF0ZTogJycsCiAgICAgIHRpbWVyOiBudWxsLAogICAgICBhbmltYXRpb25JZDogbnVsbCwKICAgICAgcGFydGljbGVzOiBbXQogICAgfTsKICB9LAogIGNvbXB1dGVkOiAoMCwgX29iamVjdFNwcmVhZDIuZGVmYXVsdCkoe30sICgwLCBfdnVleC5tYXBHZXR0ZXJzKShbJ2F2YXRhcicsICduaWNrTmFtZSddKSksCiAgbW91bnRlZDogZnVuY3Rpb24gbW91bnRlZCgpIHsKICAgIHZhciBfdGhpcyA9IHRoaXM7CiAgICB0aGlzLnN0YXJ0Q2xvY2soKTsKICAgIHRoaXMuaW5pdFBhcnRpY2xlcygpOwogICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKCkgewogICAgICBfdGhpcy4kcmVmcy5wYXNzd29yZElucHV0ICYmIF90aGlzLiRyZWZzLnBhc3N3b3JkSW5wdXQuZm9jdXMoKTsKICAgIH0pOwogIH0sCiAgYmVmb3JlRGVzdHJveTogZnVuY3Rpb24gYmVmb3JlRGVzdHJveSgpIHsKICAgIGNsZWFySW50ZXJ2YWwodGhpcy50aW1lcik7CiAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLmFuaW1hdGlvbklkKTsKICB9LAogIG1ldGhvZHM6IHsKICAgIG9uQXZhdGFyRXJyb3I6IGZ1bmN0aW9uIG9uQXZhdGFyRXJyb3IoZSkgewogICAgICBlLnRhcmdldC5zcmMgPSBfcHJvZmlsZS5kZWZhdWx0OwogICAgfSwKICAgIHN0YXJ0Q2xvY2s6IGZ1bmN0aW9uIHN0YXJ0Q2xvY2soKSB7CiAgICAgIHZhciBfdGhpczIgPSB0aGlzOwogICAgICB2YXIgdXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKCkgewogICAgICAgIHZhciBub3cgPSBuZXcgRGF0ZSgpOwogICAgICAgIHZhciBoID0gU3RyaW5nKG5vdy5nZXRIb3VycygpKS5wYWRTdGFydCgyLCAnMCcpOwogICAgICAgIHZhciBtID0gU3RyaW5nKG5vdy5nZXRNaW51dGVzKCkpLnBhZFN0YXJ0KDIsICcwJyk7CiAgICAgICAgdmFyIHMgPSBTdHJpbmcobm93LmdldFNlY29uZHMoKSkucGFkU3RhcnQoMiwgJzAnKTsKICAgICAgICBfdGhpczIuY3VycmVudFRpbWUgPSAiIi5jb25jYXQoaCwgIjoiKS5jb25jYXQobSwgIjoiKS5jb25jYXQocyk7CiAgICAgICAgdmFyIGRheXMgPSBbJ+aYn+acn+aXpScsICfmmJ/mnJ/kuIAnLCAn5pif5pyf5LqMJywgJ+aYn+acn+S4iScsICfmmJ/mnJ/lm5snLCAn5pif5pyf5LqUJywgJ+aYn+acn+WFrSddOwogICAgICAgIF90aGlzMi5jdXJyZW50RGF0ZSA9ICIiLmNvbmNhdChub3cuZ2V0RnVsbFllYXIoKSwgIlx1NUU3NCIpLmNvbmNhdChub3cuZ2V0TW9udGgoKSArIDEsICJcdTY3MDgiKS5jb25jYXQobm93LmdldERhdGUoKSwgIlx1NjVFNSAiKS5jb25jYXQoZGF5c1tub3cuZ2V0RGF5KCldKTsKICAgICAgfTsKICAgICAgdXBkYXRlKCk7CiAgICAgIHRoaXMudGltZXIgPSBzZXRJbnRlcnZhbCh1cGRhdGUsIDEwMDApOwogICAgfSwKICAgIGhhbmRsZVVubG9jazogZnVuY3Rpb24gaGFuZGxlVW5sb2NrKCkgewogICAgICB2YXIgX3RoaXMzID0gdGhpczsKICAgICAgcmV0dXJuICgwLCBfYXN5bmNUb0dlbmVyYXRvcjIuZGVmYXVsdCkoLyojX19QVVJFX18qLygwLCBfcmVnZW5lcmF0b3IyLmRlZmF1bHQpKCkubShmdW5jdGlvbiBfY2FsbGVlKCkgewogICAgICAgIHZhciBsb2NrUGF0aCwgbXNnLCBfdDsKICAgICAgICByZXR1cm4gKDAsIF9yZWdlbmVyYXRvcjIuZGVmYXVsdCkoKS53KGZ1bmN0aW9uIChfY29udGV4dCkgewogICAgICAgICAgd2hpbGUgKDEpIHN3aXRjaCAoX2NvbnRleHQucCA9IF9jb250ZXh0Lm4pIHsKICAgICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgIGlmIChfdGhpczMucGFzc3dvcmQpIHsKICAgICAgICAgICAgICAgIF9jb250ZXh0Lm4gPSAxOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIF90aGlzMy5zaG93RXJyb3IoJ+ivt+i+k+WFpeWvhueggScpOwogICAgICAgICAgICAgIHJldHVybiBfY29udGV4dC5hKDIpOwogICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgX3RoaXMzLmxvYWRpbmcgPSB0cnVlOwogICAgICAgICAgICAgIF90aGlzMy5lcnJvck1zZyA9ICcnOwogICAgICAgICAgICAgIF9jb250ZXh0LnAgPSAyOwogICAgICAgICAgICAgIF9jb250ZXh0Lm4gPSAzOwogICAgICAgICAgICAgIHJldHVybiAoMCwgX2xvZ2luLnVubG9ja1NjcmVlbikoX3RoaXMzLnBhc3N3b3JkKTsKICAgICAgICAgICAgY2FzZSAzOgogICAgICAgICAgICAgIGxvY2tQYXRoID0gX3RoaXMzLiRzdG9yZS5nZXR0ZXJzLmxvY2tQYXRoOyAvLyDlj5bplIHlsY/liY3nmoTot6/lvoQKICAgICAgICAgICAgICBfY29udGV4dC5uID0gNDsKICAgICAgICAgICAgICByZXR1cm4gX3RoaXMzLiRzdG9yZS5kaXNwYXRjaCgnbG9jay91bmxvY2tTY3JlZW4nKTsKICAgICAgICAgICAgY2FzZSA0OgogICAgICAgICAgICAgIF90aGlzMy4kcm91dGVyLnJlcGxhY2UobG9ja1BhdGgpOwogICAgICAgICAgICAgIF9jb250ZXh0Lm4gPSA2OwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIDU6CiAgICAgICAgICAgICAgX2NvbnRleHQucCA9IDU7CiAgICAgICAgICAgICAgX3QgPSBfY29udGV4dC52OwogICAgICAgICAgICAgIG1zZyA9IF90Lm1lc3NhZ2UgfHwgX3QudG9TdHJpbmcoKTsKICAgICAgICAgICAgICBfdGhpczMuc2hvd0Vycm9yKG1zZyk7CiAgICAgICAgICAgICAgX3RoaXMzLnBhc3N3b3JkID0gJyc7CiAgICAgICAgICAgICAgX3RoaXMzLiRyZWZzLnBhc3N3b3JkSW5wdXQgJiYgX3RoaXMzLiRyZWZzLnBhc3N3b3JkSW5wdXQuZm9jdXMoKTsKICAgICAgICAgICAgY2FzZSA2OgogICAgICAgICAgICAgIF9jb250ZXh0LnAgPSA2OwogICAgICAgICAgICAgIF90aGlzMy5sb2FkaW5nID0gZmFsc2U7CiAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0LmYoNik7CiAgICAgICAgICAgIGNhc2UgNzoKICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQuYSgyKTsKICAgICAgICAgIH0KICAgICAgICB9LCBfY2FsbGVlLCBudWxsLCBbWzIsIDUsIDYsIDddXSk7CiAgICAgIH0pKSgpOwogICAgfSwKICAgIHNob3dFcnJvcjogZnVuY3Rpb24gc2hvd0Vycm9yKG1zZykgewogICAgICB2YXIgX3RoaXM0ID0gdGhpczsKICAgICAgdGhpcy5lcnJvck1zZyA9IG1zZzsKICAgICAgdGhpcy5pc1NoYWtpbmcgPSB0cnVlOwogICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICBfdGhpczQuaXNTaGFraW5nID0gZmFsc2U7CiAgICAgIH0sIDYwMCk7CiAgICB9LAogICAgZ29Mb2dpbjogZnVuY3Rpb24gZ29Mb2dpbigpIHsKICAgICAgdmFyIF90aGlzNSA9IHRoaXM7CiAgICAgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdsb2NrL3VubG9ja1NjcmVlbicpOwogICAgICB0aGlzLiRzdG9yZS5kaXNwYXRjaCgnTG9nT3V0JykudGhlbihmdW5jdGlvbiAoKSB7CiAgICAgICAgX3RoaXM1LiRyb3V0ZXIucHVzaCgnL2xvZ2luJyk7CiAgICAgIH0pOwogICAgfSwKICAgIC8vIOeykuWtkOiDjOaZrwogICAgaW5pdFBhcnRpY2xlczogZnVuY3Rpb24gaW5pdFBhcnRpY2xlcygpIHsKICAgICAgdmFyIF90aGlzNiA9IHRoaXM7CiAgICAgIHZhciBjYW52YXMgPSB0aGlzLiRyZWZzLnBhcnRpY2xlQ2FudmFzOwogICAgICBpZiAoIWNhbnZhcykgcmV0dXJuOwogICAgICB2YXIgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7CiAgICAgIHZhciByZXNpemUgPSBmdW5jdGlvbiByZXNpemUoKSB7CiAgICAgICAgY2FudmFzLndpZHRoID0gd2luZG93LmlubmVyV2lkdGg7CiAgICAgICAgY2FudmFzLmhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodDsKICAgICAgfTsKICAgICAgcmVzaXplKCk7CiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCByZXNpemUpOwogICAgICB2YXIgY291bnQgPSA4MDsKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAgICAgICAgdGhpcy5wYXJ0aWNsZXMucHVzaCh7CiAgICAgICAgICB4OiBNYXRoLnJhbmRvbSgpICogY2FudmFzLndpZHRoLAogICAgICAgICAgeTogTWF0aC5yYW5kb20oKSAqIGNhbnZhcy5oZWlnaHQsCiAgICAgICAgICByOiBNYXRoLnJhbmRvbSgpICogMiArIDEsCiAgICAgICAgICBkeDogKE1hdGgucmFuZG9tKCkgLSAwLjUpICogMC42LAogICAgICAgICAgZHk6IChNYXRoLnJhbmRvbSgpIC0gMC41KSAqIDAuNiwKICAgICAgICAgIGFscGhhOiBNYXRoLnJhbmRvbSgpICogMC41ICsgMC4yCiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgdmFyIF9kcmF3ID0gZnVuY3Rpb24gZHJhdygpIHsKICAgICAgICBjdHguY2xlYXJSZWN0KDAsIDAsIGNhbnZhcy53aWR0aCwgY2FudmFzLmhlaWdodCk7CiAgICAgICAgX3RoaXM2LnBhcnRpY2xlcy5mb3JFYWNoKGZ1bmN0aW9uIChwKSB7CiAgICAgICAgICBjdHguYmVnaW5QYXRoKCk7CiAgICAgICAgICBjdHguYXJjKHAueCwgcC55LCBwLnIsIDAsIE1hdGguUEkgKiAyKTsKICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSAicmdiYSgyNTUsMjU1LDI1NSwiLmNvbmNhdChwLmFscGhhLCAiKSIpOwogICAgICAgICAgY3R4LmZpbGwoKTsKICAgICAgICAgIHAueCArPSBwLmR4OwogICAgICAgICAgcC55ICs9IHAuZHk7CiAgICAgICAgICBpZiAocC54IDwgMCB8fCBwLnggPiBjYW52YXMud2lkdGgpIHAuZHggKj0gLTE7CiAgICAgICAgICBpZiAocC55IDwgMCB8fCBwLnkgPiBjYW52YXMuaGVpZ2h0KSBwLmR5ICo9IC0xOwogICAgICAgIH0pOwogICAgICAgIC8vIOi/nue6vwogICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBfdGhpczYucGFydGljbGVzLmxlbmd0aDsgX2krKykgewogICAgICAgICAgZm9yICh2YXIgaiA9IF9pICsgMTsgaiA8IF90aGlzNi5wYXJ0aWNsZXMubGVuZ3RoOyBqKyspIHsKICAgICAgICAgICAgdmFyIGEgPSBfdGhpczYucGFydGljbGVzW19pXSwKICAgICAgICAgICAgICBiID0gX3RoaXM2LnBhcnRpY2xlc1tqXTsKICAgICAgICAgICAgdmFyIGRpc3QgPSBNYXRoLmh5cG90KGEueCAtIGIueCwgYS55IC0gYi55KTsKICAgICAgICAgICAgaWYgKGRpc3QgPCAxMjApIHsKICAgICAgICAgICAgICBjdHguYmVnaW5QYXRoKCk7CiAgICAgICAgICAgICAgY3R4Lm1vdmVUbyhhLngsIGEueSk7CiAgICAgICAgICAgICAgY3R4LmxpbmVUbyhiLngsIGIueSk7CiAgICAgICAgICAgICAgY3R4LnN0cm9rZVN0eWxlID0gInJnYmEoMjU1LDI1NSwyNTUsIi5jb25jYXQoMC4xNSAqICgxIC0gZGlzdCAvIDEyMCksICIpIik7CiAgICAgICAgICAgICAgY3R4LmxpbmVXaWR0aCA9IDAuNTsKICAgICAgICAgICAgICBjdHguc3Ryb2tlKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgX3RoaXM2LmFuaW1hdGlvbklkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKF9kcmF3KTsKICAgICAgfTsKICAgICAgX2RyYXcoKTsKICAgIH0KICB9Cn07"},{"version":3,"names":["_vuex","require","_login","_profile","_interopRequireDefault","name","data","password","loading","errorMsg","isShaking","currentTime","currentDate","timer","animationId","particles","computed","_objectSpread2","default","mapGetters","mounted","_this","startClock","initParticles","$nextTick","$refs","passwordInput","focus","beforeDestroy","clearInterval","cancelAnimationFrame","methods","onAvatarError","e","target","src","defAva","_this2","update","now","Date","h","String","getHours","padStart","m","getMinutes","s","getSeconds","concat","days","getFullYear","getMonth","getDate","getDay","setInterval","handleUnlock","_this3","_asyncToGenerator2","_regenerator2","_callee","lockPath","msg","_t","w","_context","p","n","showError","a","unlockScreen","$store","getters","dispatch","$router","replace","v","message","toString","f","_this4","setTimeout","goLogin","_this5","then","push","_this6","canvas","particleCanvas","ctx","getContext","resize","width","window","innerWidth","height","innerHeight","addEventListener","count","i","x","Math","random","y","r","dx","dy","alpha","draw","clearRect","forEach","beginPath","arc","PI","fillStyle","fill","length","j","b","dist","hypot","moveTo","lineTo","strokeStyle","lineWidth","stroke","requestAnimationFrame"],"sources":["src/views/lock.vue"],"sourcesContent":["<template>\r\n <div class=\"lock-container\">\r\n <!-- 动态粒子背景 -->\r\n <canvas ref=\"particleCanvas\" class=\"particle-bg\"></canvas>\r\n\r\n <!-- 时钟 -->\r\n <div class=\"lock-time\">{{ currentTime }}</div>\r\n <div class=\"lock-date\">{{ currentDate }}</div>\r\n\r\n <!-- 锁屏卡片 -->\r\n <div class=\"lock-card\">\r\n <div class=\"avatar-wrap\">\r\n <img :src=\"avatar\" class=\"lock-avatar\" @error=\"onAvatarError\" />\r\n <div class=\"lock-icon\">🔒</div>\r\n </div>\r\n <div class=\"lock-username\">{{ nickName }}</div>\r\n <div class=\"lock-hint\">系统已锁定,请输入密码解锁</div>\r\n\r\n <div class=\"input-wrap\" :class=\"{ shake: isShaking }\">\r\n <input ref=\"passwordInput\" v-model=\"password\" type=\"password\" placeholder=\"请输入登录密码\" class=\"lock-input\" @keydown.enter=\"handleUnlock\" autocomplete=\"off\" />\r\n <button class=\"unlock-btn\" @click=\"handleUnlock\" :disabled=\"loading\">\r\n <span v-if=\"!loading\">→</span>\r\n <span v-else class=\"loading-dot\">···</span>\r\n </button>\r\n </div>\r\n\r\n <div v-if=\"errorMsg\" class=\"error-msg\">{{ errorMsg }}</div>\r\n\r\n <div class=\"lock-footer\">\r\n <a href=\"/login\" @click.prevent=\"goLogin\">退出重新登录</a>\r\n </div>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport { mapGetters } from 'vuex'\r\nimport { unlockScreen } from '@/api/login'\r\nimport defAva from '@/assets/images/profile.jpg'\r\n\r\nexport default {\r\n name: 'LockScreen',\r\n data() {\r\n return {\r\n password: '',\r\n loading: false,\r\n errorMsg: '',\r\n isShaking: false,\r\n currentTime: '',\r\n currentDate: '',\r\n timer: null,\r\n animationId: null,\r\n particles: []\r\n }\r\n },\r\n computed: {\r\n ...mapGetters(['avatar', 'nickName'])\r\n },\r\n mounted() {\r\n this.startClock()\r\n this.initParticles()\r\n this.$nextTick(() => {\r\n this.$refs.passwordInput && this.$refs.passwordInput.focus()\r\n })\r\n },\r\n beforeDestroy() {\r\n clearInterval(this.timer)\r\n cancelAnimationFrame(this.animationId)\r\n },\r\n methods: {\r\n onAvatarError(e) {\r\n e.target.src = defAva\r\n },\r\n startClock() {\r\n const update = () => {\r\n const now = new Date()\r\n const h = String(now.getHours()).padStart(2, '0')\r\n const m = String(now.getMinutes()).padStart(2, '0')\r\n const s = String(now.getSeconds()).padStart(2, '0')\r\n this.currentTime = `${h}:${m}:${s}`\r\n const days = ['星期日','星期一','星期二','星期三','星期四','星期五','星期六']\r\n this.currentDate = `${now.getFullYear()}年${now.getMonth()+1}月${now.getDate()}日 ${days[now.getDay()]}`\r\n }\r\n update()\r\n this.timer = setInterval(update, 1000)\r\n },\r\n async handleUnlock() {\r\n if (!this.password) {\r\n this.showError('请输入密码')\r\n return\r\n }\r\n this.loading = true\r\n this.errorMsg = ''\r\n try {\r\n await unlockScreen(this.password)\r\n const lockPath = this.$store.getters.lockPath // 取锁屏前的路径\r\n await this.$store.dispatch('lock/unlockScreen')\r\n this.$router.replace(lockPath)\r\n } catch (err) {\r\n const msg = err.message || err.toString()\r\n this.showError(msg)\r\n this.password = ''\r\n this.$refs.passwordInput && this.$refs.passwordInput.focus()\r\n } finally {\r\n this.loading = false\r\n }\r\n },\r\n showError(msg) {\r\n this.errorMsg = msg\r\n this.isShaking = true\r\n setTimeout(() => { this.isShaking = false }, 600)\r\n },\r\n goLogin() {\r\n this.$store.dispatch('lock/unlockScreen')\r\n this.$store.dispatch('LogOut').then(() => {\r\n this.$router.push('/login')\r\n })\r\n },\r\n // 粒子背景\r\n initParticles() {\r\n const canvas = this.$refs.particleCanvas\r\n if (!canvas) return\r\n const ctx = canvas.getContext('2d')\r\n const resize = () => {\r\n canvas.width = window.innerWidth\r\n canvas.height = window.innerHeight\r\n }\r\n resize()\r\n window.addEventListener('resize', resize)\r\n const count = 80\r\n for (let i = 0; i < count; i++) {\r\n this.particles.push({\r\n x: Math.random() * canvas.width,\r\n y: Math.random() * canvas.height,\r\n r: Math.random() * 2 + 1,\r\n dx: (Math.random() - 0.5) * 0.6,\r\n dy: (Math.random() - 0.5) * 0.6,\r\n alpha: Math.random() * 0.5 + 0.2\r\n })\r\n }\r\n const draw = () => {\r\n ctx.clearRect(0, 0, canvas.width, canvas.height)\r\n this.particles.forEach(p => {\r\n ctx.beginPath()\r\n ctx.arc(p.x, p.y, p.r, 0, Math.PI * 2)\r\n ctx.fillStyle = `rgba(255,255,255,${p.alpha})`\r\n ctx.fill()\r\n p.x += p.dx\r\n p.y += p.dy\r\n if (p.x < 0 || p.x > canvas.width) p.dx *= -1\r\n if (p.y < 0 || p.y > canvas.height) p.dy *= -1\r\n })\r\n // 连线\r\n for (let i = 0; i < this.particles.length; i++) {\r\n for (let j = i + 1; j < this.particles.length; j++) {\r\n const a = this.particles[i], b = this.particles[j]\r\n const dist = Math.hypot(a.x - b.x, a.y - b.y)\r\n if (dist < 120) {\r\n ctx.beginPath()\r\n ctx.moveTo(a.x, a.y)\r\n ctx.lineTo(b.x, b.y)\r\n ctx.strokeStyle = `rgba(255,255,255,${0.15 * (1 - dist / 120)})`\r\n ctx.lineWidth = 0.5\r\n ctx.stroke()\r\n }\r\n }\r\n }\r\n this.animationId = requestAnimationFrame(draw)\r\n }\r\n draw()\r\n }\r\n }\r\n}\r\n</script>\r\n\r\n<style scoped>\r\n.lock-container {\r\n position: fixed;\r\n inset: 0;\r\n background: linear-gradient(135deg, #0f0c29, #302b63, #24243e);\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n justify-content: center;\r\n z-index: 9999;\r\n font-family: 'PingFang SC', 'Microsoft YaHei', sans-serif;\r\n overflow: hidden;\r\n}\r\n\r\n.particle-bg {\r\n position: absolute;\r\n inset: 0;\r\n z-index: 0;\r\n}\r\n\r\n.lock-time {\r\n position: relative;\r\n z-index: 1;\r\n font-size: 72px;\r\n font-weight: 200;\r\n color: #fff;\r\n letter-spacing: 4px;\r\n text-shadow: 0 0 40px rgba(255,255,255,0.3);\r\n margin-bottom: 8px;\r\n font-variant-numeric: tabular-nums;\r\n}\r\n\r\n.lock-date {\r\n position: relative;\r\n z-index: 1;\r\n font-size: 15px;\r\n color: rgba(255,255,255,0.6);\r\n margin-bottom: 48px;\r\n letter-spacing: 2px;\r\n}\r\n\r\n.lock-card {\r\n position: relative;\r\n z-index: 1;\r\n background: rgba(255, 255, 255, 0.08);\r\n backdrop-filter: blur(20px);\r\n -webkit-backdrop-filter: blur(20px);\r\n border: 1px solid rgba(255, 255, 255, 0.15);\r\n border-radius: 24px;\r\n padding: 40px 48px;\r\n width: 360px;\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n box-shadow: 0 25px 60px rgba(0,0,0,0.4);\r\n}\r\n\r\n.avatar-wrap {\r\n position: relative;\r\n margin-bottom: 16px;\r\n}\r\n\r\n.lock-avatar {\r\n width: 80px;\r\n height: 80px;\r\n border-radius: 50%;\r\n border: 3px solid rgba(255,255,255,0.3);\r\n object-fit: cover;\r\n display: block;\r\n}\r\n\r\n.lock-icon {\r\n position: absolute;\r\n bottom: -4px;\r\n right: -4px;\r\n background: rgba(255,255,255,0.15);\r\n border-radius: 50%;\r\n width: 26px;\r\n height: 26px;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n font-size: 13px;\r\n backdrop-filter: blur(8px);\r\n}\r\n\r\n.lock-username {\r\n color: #fff;\r\n font-size: 18px;\r\n font-weight: 600;\r\n margin-bottom: 6px;\r\n letter-spacing: 1px;\r\n}\r\n\r\n.lock-hint {\r\n color: rgba(255,255,255,0.5);\r\n font-size: 13px;\r\n margin-bottom: 28px;\r\n}\r\n\r\n.input-wrap {\r\n width: 100%;\r\n display: flex;\r\n align-items: center;\r\n background: rgba(255,255,255,0.1);\r\n border: 1px solid rgba(255,255,255,0.2);\r\n border-radius: 50px;\r\n padding: 4px 4px 4px 20px;\r\n transition: border-color 0.3s;\r\n}\r\n\r\n.input-wrap:focus-within {\r\n border-color: rgba(255,255,255,0.6);\r\n background: rgba(255,255,255,0.13);\r\n}\r\n\r\n.input-wrap.shake {\r\n animation: shake 0.5s ease;\r\n}\r\n\r\n@keyframes shake {\r\n 0%, 100% { transform: translateX(0); }\r\n 20% { transform: translateX(-8px); }\r\n 40% { transform: translateX(8px); }\r\n 60% { transform: translateX(-6px); }\r\n 80% { transform: translateX(6px); }\r\n}\r\n\r\n.lock-input {\r\n flex: 1;\r\n background: transparent;\r\n border: none;\r\n outline: none;\r\n color: #fff;\r\n font-size: 15px;\r\n padding: 10px 0;\r\n}\r\n\r\n.lock-input::placeholder {\r\n color: rgba(255,255,255,0.35);\r\n}\r\n\r\n.unlock-btn {\r\n width: 42px;\r\n height: 42px;\r\n border-radius: 50%;\r\n background: linear-gradient(135deg, #667eea, #764ba2);\r\n border: none;\r\n color: #fff;\r\n font-size: 18px;\r\n cursor: pointer;\r\n transition: transform 0.2s, opacity 0.2s;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n flex-shrink: 0;\r\n}\r\n\r\n.unlock-btn:hover:not(:disabled) {\r\n transform: scale(1.08);\r\n}\r\n\r\n.unlock-btn:disabled {\r\n opacity: 0.6;\r\n cursor: not-allowed;\r\n}\r\n\r\n.loading-dot {\r\n font-size: 13px;\r\n letter-spacing: 1px;\r\n}\r\n\r\n.error-msg {\r\n margin-top: 14px;\r\n color: #ff7675;\r\n font-size: 13px;\r\n text-align: center;\r\n animation: fadeIn 0.3s ease;\r\n}\r\n\r\n@keyframes fadeIn {\r\n from { opacity: 0; transform: translateY(-4px); }\r\n to { opacity: 1; transform: translateY(0); }\r\n}\r\n\r\n.lock-footer {\r\n margin-top: 24px;\r\n}\r\n\r\n.lock-footer a {\r\n color: rgba(255,255,255,0.4);\r\n font-size: 13px;\r\n text-decoration: none;\r\n transition: color 0.2s;\r\n}\r\n\r\n.lock-footer a:hover {\r\n color: rgba(255,255,255,0.8);\r\n}\r\n</style>\r\n"],"mappings":"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","ignoreList":[]}]}