vue-element-admin/node_modules/.cache/babel-loader/598aa83c7f96912f947fc61d5342487a.json
2025-08-06 00:44:43 +08:00

1 line
89 KiB
JSON
Raw Permalink 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":"/Users/kang/Gitea/vue-element-admin/node_modules/babel-loader/lib/index.js!/Users/kang/Gitea/vue-element-admin/node_modules/cache-loader/dist/cjs.js??ref--0-0!/Users/kang/Gitea/vue-element-admin/node_modules/vue-loader/lib/index.js??vue-loader-options!/Users/kang/Gitea/vue-element-admin/src/components/ImageCropper/index.vue?vue&type=script&lang=js","dependencies":[{"path":"/Users/kang/Gitea/vue-element-admin/src/components/ImageCropper/index.vue","mtime":1754409279862},{"path":"/Users/kang/Gitea/vue-element-admin/babel.config.js","mtime":1754409277597},{"path":"/Users/kang/Gitea/vue-element-admin/node_modules/cache-loader/dist/cjs.js","mtime":1754409278035},{"path":"/Users/kang/Gitea/vue-element-admin/node_modules/babel-loader/lib/index.js","mtime":1754409277911},{"path":"/Users/kang/Gitea/vue-element-admin/node_modules/cache-loader/dist/cjs.js","mtime":1754409278035},{"path":"/Users/kang/Gitea/vue-element-admin/node_modules/vue-loader/lib/index.js","mtime":1754409279720}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:Ly8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KCid1c2Ugc3RyaWN0JzsKCmltcG9ydCBfdHlwZW9mIGZyb20gIi9Vc2Vycy9rYW5nL0dpdGVhL3Z1ZS1lbGVtZW50LWFkbWluL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2YuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5udW1iZXIuY29uc3RydWN0b3IuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5vYmplY3Qua2V5cy5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC50by1zdHJpbmcuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lc25leHQuaXRlcmF0b3IuY29uc3RydWN0b3IuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lc25leHQuaXRlcmF0b3IuZm9yLWVhY2guanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLmZvci1lYWNoLmpzIjsKaW1wb3J0IHJlcXVlc3QgZnJvbSAnQC91dGlscy9yZXF1ZXN0JzsKaW1wb3J0IGxhbmd1YWdlIGZyb20gJy4vdXRpbHMvbGFuZ3VhZ2UuanMnOwppbXBvcnQgbWltZXMgZnJvbSAnLi91dGlscy9taW1lcy5qcyc7CmltcG9ydCBkYXRhMmJsb2IgZnJvbSAnLi91dGlscy9kYXRhMmJsb2IuanMnOwppbXBvcnQgZWZmZWN0UmlwcGxlIGZyb20gJy4vdXRpbHMvZWZmZWN0UmlwcGxlLmpzJzsKZXhwb3J0IGRlZmF1bHQgewogIHByb3BzOiB7CiAgICAvLyDln5/vvIzkuIrkvKDmlofku7ZuYW1l77yM6Kem5Y+R5LqL5Lu25Lya5bim5LiK77yI5aaC5p6c5LiA5Liq6aG16Z2i5aSa5Liq5Zu+54mH5LiK5Lyg5o6n5Lu277yM5Y+v5Lul5YGa5Yy65YiGCiAgICBmaWVsZDogewogICAgICB0eXBlOiBTdHJpbmcsCiAgICAgIGRlZmF1bHQ6ICdhdmF0YXInCiAgICB9LAogICAgLy8g5Y6f5ZCNa2V577yM57G75Ly85LqOaWTvvIzop6blj5Hkuovku7bkvJrluKbkuIrvvIjlpoLmnpzkuIDkuKrpobXpnaLlpJrkuKrlm77niYfkuIrkvKDmjqfku7bvvIzlj6/ku6XlgZrljLrliIYKICAgIGtpOiB7CiAgICAgIHR5cGU6IE51bWJlciwKICAgICAgZGVmYXVsdDogMAogICAgfSwKICAgIC8vIOaYvuekuuivpeaOp+S7tuS4juWQpgogICAgdmFsdWU6IHsKICAgICAgdHlwZTogQm9vbGVhbiwKICAgICAgZGVmYXVsdDogdHJ1ZQogICAgfSwKICAgIC8vIOS4iuS8oOWcsOWdgAogICAgdXJsOiB7CiAgICAgIHR5cGU6IFN0cmluZywKICAgICAgZGVmYXVsdDogJycKICAgIH0sCiAgICAvLyDlhbbku5bopoHkuIrkvKDmlofku7bpmYTluKbnmoTmlbDmja7vvIzlr7nosaHmoLzlvI8KICAgIHBhcmFtczogewogICAgICB0eXBlOiBPYmplY3QsCiAgICAgIGRlZmF1bHQ6IG51bGwKICAgIH0sCiAgICAvLyBBZGQgY3VzdG9tIGhlYWRlcnMKICAgIGhlYWRlcnM6IHsKICAgICAgdHlwZTogT2JqZWN0LAogICAgICBkZWZhdWx0OiBudWxsCiAgICB9LAogICAgLy8g5Ymq6KOB5Zu+54mH55qE5a69CiAgICB3aWR0aDogewogICAgICB0eXBlOiBOdW1iZXIsCiAgICAgIGRlZmF1bHQ6IDIwMAogICAgfSwKICAgIC8vIOWJquijgeWbvueJh+eahOmrmAogICAgaGVpZ2h0OiB7CiAgICAgIHR5cGU6IE51bWJlciwKICAgICAgZGVmYXVsdDogMjAwCiAgICB9LAogICAgLy8g5LiN5pi+56S65peL6L2s5Yqf6IO9CiAgICBub1JvdGF0ZTogewogICAgICB0eXBlOiBCb29sZWFuLAogICAgICBkZWZhdWx0OiB0cnVlCiAgICB9LAogICAgLy8g5LiN6aKE6KeI5ZyG5b2i5Zu+54mHCiAgICBub0NpcmNsZTogewogICAgICB0eXBlOiBCb29sZWFuLAogICAgICBkZWZhdWx0OiBmYWxzZQogICAgfSwKICAgIC8vIOS4jemihOiniOaWueW9ouWbvueJhwogICAgbm9TcXVhcmU6IHsKICAgICAgdHlwZTogQm9vbGVhbiwKICAgICAgZGVmYXVsdDogZmFsc2UKICAgIH0sCiAgICAvLyDljZXmlofku7blpKflsI/pmZDliLYKICAgIG1heFNpemU6IHsKICAgICAgdHlwZTogTnVtYmVyLAogICAgICBkZWZhdWx0OiAxMDI0MAogICAgfSwKICAgIC8vIOivreiogOexu+WeiwogICAgbGFuZ1R5cGU6IHsKICAgICAgdHlwZTogU3RyaW5nLAogICAgICBkZWZhdWx0OiAnemgnCiAgICB9LAogICAgLy8g6K+t6KiA5YyFCiAgICBsYW5nRXh0OiB7CiAgICAgIHR5cGU6IE9iamVjdCwKICAgICAgZGVmYXVsdDogbnVsbAogICAgfSwKICAgIC8vIOWbvueJh+S4iuS8oOagvOW8jwogICAgaW1nRm9ybWF0OiB7CiAgICAgIHR5cGU6IFN0cmluZywKICAgICAgZGVmYXVsdDogJ3BuZycKICAgIH0sCiAgICAvLyDmmK/lkKbmlK/mjIHot6jln58KICAgIHdpdGhDcmVkZW50aWFsczogewogICAgICB0eXBlOiBCb29sZWFuLAogICAgICBkZWZhdWx0OiBmYWxzZQogICAgfQogIH0sCiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHsKICAgIHZhciBpbWdGb3JtYXQgPSB0aGlzLmltZ0Zvcm1hdCwKICAgICAgbGFuZ1R5cGUgPSB0aGlzLmxhbmdUeXBlLAogICAgICBsYW5nRXh0ID0gdGhpcy5sYW5nRXh0LAogICAgICB3aWR0aCA9IHRoaXMud2lkdGgsCiAgICAgIGhlaWdodCA9IHRoaXMuaGVpZ2h0OwogICAgdmFyIGlzU3VwcG9ydGVkID0gdHJ1ZTsKICAgIHZhciBhbGxvd0ltZ0Zvcm1hdCA9IFsnanBnJywgJ3BuZyddOwogICAgdmFyIHRlbXBJbWdGb3JtYXQgPSBhbGxvd0ltZ0Zvcm1hdC5pbmRleE9mKGltZ0Zvcm1hdCkgPT09IC0xID8gJ2pwZycgOiBpbWdGb3JtYXQ7CiAgICB2YXIgbGFuZyA9IGxhbmd1YWdlW2xhbmdUeXBlXSA/IGxhbmd1YWdlW2xhbmdUeXBlXSA6IGxhbmd1YWdlWydlbiddOwogICAgdmFyIG1pbWUgPSBtaW1lc1t0ZW1wSW1nRm9ybWF0XTsKICAgIC8vIOinhOiMg+WbvueJh+agvOW8jwogICAgdGhpcy5pbWdGb3JtYXQgPSB0ZW1wSW1nRm9ybWF0OwogICAgaWYgKGxhbmdFeHQpIHsKICAgICAgT2JqZWN0LmFzc2lnbihsYW5nLCBsYW5nRXh0KTsKICAgIH0KICAgIGlmICh0eXBlb2YgRm9ybURhdGEgIT09ICdmdW5jdGlvbicpIHsKICAgICAgaXNTdXBwb3J0ZWQgPSBmYWxzZTsKICAgIH0KICAgIHJldHVybiB7CiAgICAgIC8vIOWbvueJh+eahG1pbWUKICAgICAgbWltZTogbWltZSwKICAgICAgLy8g6K+t6KiA5YyFCiAgICAgIGxhbmc6IGxhbmcsCiAgICAgIC8vIOa1j+iniOWZqOaYr+WQpuaUr+aMgeivpeaOp+S7tgogICAgICBpc1N1cHBvcnRlZDogaXNTdXBwb3J0ZWQsCiAgICAgIC8vIOa1j+iniOWZqOaYr+WQpuaUr+aMgeinpuWxj+S6i+S7tgogICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zCiAgICAgIGlzU3VwcG9ydFRvdWNoOiBkb2N1bWVudC5oYXNPd25Qcm9wZXJ0eSgnb250b3VjaHN0YXJ0JyksCiAgICAgIC8vIOatpemqpAogICAgICBzdGVwOiAxLAogICAgICAvLyAx6YCJ5oup5paH5Lu2IDLliaroo4EgM+S4iuS8oAogICAgICAvLyDkuIrkvKDnirbmgIHlj4rov5vluqYKICAgICAgbG9hZGluZzogMCwKICAgICAgLy8gMOacquW8gOWniyAx5q2j5ZyoIDLmiJDlip8gM+mUmeivrwogICAgICBwcm9ncmVzczogMCwKICAgICAgLy8g5piv5ZCm5pyJ6ZSZ6K+v5Y+K6ZSZ6K+v5L+h5oGvCiAgICAgIGhhc0Vycm9yOiBmYWxzZSwKICAgICAgZXJyb3JNc2c6ICcnLAogICAgICAvLyDpnIDmsYLlm77lrr3pq5jmr5QKICAgICAgcmF0aW86IHdpZHRoIC8gaGVpZ2h0LAogICAgICAvLyDljp/lm77lnLDlnYDjgIHnlJ/miJDlm77niYflnLDlnYAKICAgICAgc291cmNlSW1nOiBudWxsLAogICAgICBzb3VyY2VJbWdVcmw6ICcnLAogICAgICBjcmVhdGVJbWdVcmw6ICcnLAogICAgICAvLyDljp/lm77niYfmi5bliqjkuovku7bliJ3lp4vlgLwKICAgICAgc291cmNlSW1nTW91c2VEb3duOiB7CiAgICAgICAgb246IGZhbHNlLAogICAgICAgIG1YOiAwLAogICAgICAgIC8vIOm8oOagh+aMieS4i+eahOWdkOaghwogICAgICAgIG1ZOiAwLAogICAgICAgIHg6IDAsCiAgICAgICAgLy8gc2NhbGXljp/lm77lnZDmoIcKICAgICAgICB5OiAwCiAgICAgIH0sCiAgICAgIC8vIOeUn+aIkOWbvueJh+mihOiniOeahOWuueWZqOWkp+WwjwogICAgICBwcmV2aWV3Q29udGFpbmVyOiB7CiAgICAgICAgd2lkdGg6IDEwMCwKICAgICAgICBoZWlnaHQ6IDEwMAogICAgICB9LAogICAgICAvLyDljp/lm77lrrnlmajlrr3pq5gKICAgICAgc291cmNlSW1nQ29udGFpbmVyOiB7CiAgICAgICAgLy8gc2ljCiAgICAgICAgd2lkdGg6IDI0MCwKICAgICAgICBoZWlnaHQ6IDE4NCAvLyDlpoLmnpznlJ/miJDlm77mr5TkvovkuI7mraTkuIDoh7TkvJrlh7rnjrBidWfvvIzlhYjmlLnmiJDnibnmrornmoTmoLzlvI/lkKfvvIzlk4jlk4jlk4gKICAgICAgfSwKICAgICAgLy8g5Y6f5Zu+5bGV56S65bGe5oCnCiAgICAgIHNjYWxlOiB7CiAgICAgICAgem9vbUFkZE9uOiBmYWxzZSwKICAgICAgICAvLyDmjInpkq7nvKnmlL7kuovku7blvIDlkK8KICAgICAgICB6b29tU3ViT246IGZhbHNlLAogICAgICAgIC8vIOaMiemSrue8qeaUvuS6i+S7tuW8gOWQrwogICAgICAgIHJhbmdlOiAxLAogICAgICAgIC8vIOacgOWkpzEwMAogICAgICAgIHJvdGF0ZUxlZnQ6IGZhbHNlLAogICAgICAgIC8vIOaMiemSruWQkeW3puaXi+i9rOS6i+S7tuW8gOWQrwogICAgICAgIHJvdGF0ZVJpZ2h0OiBmYWxzZSwKICAgICAgICAvLyDmjInpkq7lkJHlj7Pml4vovazkuovku7blvIDlkK8KICAgICAgICBkZWdyZWU6IDAsCiAgICAgICAgLy8g5peL6L2s5bqm5pWwCiAgICAgICAgeDogMCwKICAgICAgICB5OiAwLAogICAgICAgIHdpZHRoOiAwLAogICAgICAgIGhlaWdodDogMCwKICAgICAgICBtYXhXaWR0aDogMCwKICAgICAgICBtYXhIZWlnaHQ6IDAsCiAgICAgICAgbWluV2lkdGg6IDAsCiAgICAgICAgLy8g5pyA5a69CiAgICAgICAgbWluSGVpZ2h0OiAwLAogICAgICAgIG5hdHVyYWxXaWR0aDogMCwKICAgICAgICAvLyDljp/lrr0KICAgICAgICBuYXR1cmFsSGVpZ2h0OiAwCiAgICAgIH0KICAgIH07CiAgfSwKICBjb21wdXRlZDogewogICAgLy8g6L+b5bqm5p2h5qC35byPCiAgICBwcm9ncmVzc1N0eWxlOiBmdW5jdGlvbiBwcm9ncmVzc1N0eWxlKCkgewogICAgICB2YXIgcHJvZ3Jlc3MgPSB0aGlzLnByb2dyZXNzOwogICAgICByZXR1cm4gewogICAgICAgIHdpZHRoOiBwcm9ncmVzcyArICclJwogICAgICB9OwogICAgfSwKICAgIC8vIOWOn+Wbvuagt+W8jwogICAgc291cmNlSW1nU3R5bGU6IGZ1bmN0aW9uIHNvdXJjZUltZ1N0eWxlKCkgewogICAgICB2YXIgc2NhbGUgPSB0aGlzLnNjYWxlLAogICAgICAgIHNvdXJjZUltZ01hc2tpbmcgPSB0aGlzLnNvdXJjZUltZ01hc2tpbmc7CiAgICAgIHZhciB0b3AgPSBzY2FsZS55ICsgc291cmNlSW1nTWFza2luZy55ICsgJ3B4JzsKICAgICAgdmFyIGxlZnQgPSBzY2FsZS54ICsgc291cmNlSW1nTWFza2luZy54ICsgJ3B4JzsKICAgICAgcmV0dXJuIHsKICAgICAgICB0b3A6IHRvcCwKICAgICAgICBsZWZ0OiBsZWZ0LAogICAgICAgIHdpZHRoOiBzY2FsZS53aWR0aCArICdweCcsCiAgICAgICAgaGVpZ2h0OiBzY2FsZS5oZWlnaHQgKyAncHgnLAogICAgICAgIHRyYW5zZm9ybTogJ3JvdGF0ZSgnICsgc2NhbGUuZGVncmVlICsgJ2RlZyknLAogICAgICAgIC8vIOaXi+i9rOaXtiDlt6bkvqfljp/lp4vlm77ml4vovazmoLflvI8KICAgICAgICAnLW1zLXRyYW5zZm9ybSc6ICdyb3RhdGUoJyArIHNjYWxlLmRlZ3JlZSArICdkZWcpJywKICAgICAgICAvLyDlhbzlrrlJRTkKICAgICAgICAnLW1vei10cmFuc2Zvcm0nOiAncm90YXRlKCcgKyBzY2FsZS5kZWdyZWUgKyAnZGVnKScsCiAgICAgICAgLy8g5YW85a65RmlyZUZveAogICAgICAgICctd2Via2l0LXRyYW5zZm9ybSc6ICdyb3RhdGUoJyArIHNjYWxlLmRlZ3JlZSArICdkZWcpJywKICAgICAgICAvLyDlhbzlrrlTYWZhcmkg5ZKMIGNocm9tZQogICAgICAgICctby10cmFuc2Zvcm0nOiAncm90YXRlKCcgKyBzY2FsZS5kZWdyZWUgKyAnZGVnKScgLy8g5YW85a65IE9wZXJhCiAgICAgIH07CiAgICB9LAogICAgLy8g5Y6f5Zu+6JKZ54mI5bGe5oCnCiAgICBzb3VyY2VJbWdNYXNraW5nOiBmdW5jdGlvbiBzb3VyY2VJbWdNYXNraW5nKCkgewogICAgICB2YXIgd2lkdGggPSB0aGlzLndpZHRoLAogICAgICAgIGhlaWdodCA9IHRoaXMuaGVpZ2h0LAogICAgICAgIHJhdGlvID0gdGhpcy5yYXRpbywKICAgICAgICBzb3VyY2VJbWdDb250YWluZXIgPSB0aGlzLnNvdXJjZUltZ0NvbnRhaW5lcjsKICAgICAgdmFyIHNpYyA9IHNvdXJjZUltZ0NvbnRhaW5lcjsKICAgICAgdmFyIHNpY1JhdGlvID0gc2ljLndpZHRoIC8gc2ljLmhlaWdodDsgLy8g5Y6f5Zu+5a655Zmo5a696auY5q+UCiAgICAgIHZhciB4ID0gMDsKICAgICAgdmFyIHkgPSAwOwogICAgICB2YXIgdyA9IHNpYy53aWR0aDsKICAgICAgdmFyIGggPSBzaWMuaGVpZ2h0OwogICAgICB2YXIgc2NhbGUgPSAxOwogICAgICBpZiAocmF0aW8gPCBzaWNSYXRpbykgewogICAgICAgIHNjYWxlID0gc2ljLmhlaWdodCAvIGhlaWdodDsKICAgICAgICB3ID0gc2ljLmhlaWdodCAqIHJhdGlvOwogICAgICAgIHggPSAoc2ljLndpZHRoIC0gdykgLyAyOwogICAgICB9CiAgICAgIGlmIChyYXRpbyA+IHNpY1JhdGlvKSB7CiAgICAgICAgc2NhbGUgPSBzaWMud2lkdGggLyB3aWR0aDsKICAgICAgICBoID0gc2ljLndpZHRoIC8gcmF0aW87CiAgICAgICAgeSA9IChzaWMuaGVpZ2h0IC0gaCkgLyAyOwogICAgICB9CiAgICAgIHJldHVybiB7CiAgICAgICAgc2NhbGU6IHNjYWxlLAogICAgICAgIC8vIOiSmeeJiOebuOWvuemcgOaxguWuvemrmOeahOe8qeaUvgogICAgICAgIHg6IHgsCiAgICAgICAgeTogeSwKICAgICAgICB3aWR0aDogdywKICAgICAgICBoZWlnaHQ6IGgKICAgICAgfTsKICAgIH0sCiAgICAvLyDljp/lm77pga7nvanmoLflvI8KICAgIHNvdXJjZUltZ1NoYWRlU3R5bGU6IGZ1bmN0aW9uIHNvdXJjZUltZ1NoYWRlU3R5bGUoKSB7CiAgICAgIHZhciBzb3VyY2VJbWdNYXNraW5nID0gdGhpcy5zb3VyY2VJbWdNYXNraW5nLAogICAgICAgIHNvdXJjZUltZ0NvbnRhaW5lciA9IHRoaXMuc291cmNlSW1nQ29udGFpbmVyOwogICAgICB2YXIgc2ljID0gc291cmNlSW1nQ29udGFpbmVyOwogICAgICB2YXIgc2ltID0gc291cmNlSW1nTWFza2luZzsKICAgICAgdmFyIHcgPSBzaW0ud2lkdGggPT09IHNpYy53aWR0aCA/IHNpbS53aWR0aCA6IChzaWMud2lkdGggLSBzaW0ud2lkdGgpIC8gMjsKICAgICAgdmFyIGggPSBzaW0uaGVpZ2h0ID09PSBzaWMuaGVpZ2h0ID8gc2ltLmhlaWdodCA6IChzaWMuaGVpZ2h0IC0gc2ltLmhlaWdodCkgLyAyOwogICAgICByZXR1cm4gewogICAgICAgIHdpZHRoOiB3ICsgJ3B4JywKICAgICAgICBoZWlnaHQ6IGggKyAncHgnCiAgICAgIH07CiAgICB9LAogICAgcHJldmlld1N0eWxlOiBmdW5jdGlvbiBwcmV2aWV3U3R5bGUoKSB7CiAgICAgIHZhciByYXRpbyA9IHRoaXMucmF0aW8sCiAgICAgICAgcHJldmlld0NvbnRhaW5lciA9IHRoaXMucHJldmlld0NvbnRhaW5lcjsKICAgICAgdmFyIHBjID0gcHJldmlld0NvbnRhaW5lcjsKICAgICAgdmFyIHcgPSBwYy53aWR0aDsKICAgICAgdmFyIGggPSBwYy5oZWlnaHQ7CiAgICAgIHZhciBwY1JhdGlvID0gdyAvIGg7CiAgICAgIGlmIChyYXRpbyA8IHBjUmF0aW8pIHsKICAgICAgICB3ID0gcGMuaGVpZ2h0ICogcmF0aW87CiAgICAgIH0KICAgICAgaWYgKHJhdGlvID4gcGNSYXRpbykgewogICAgICAgIGggPSBwYy53aWR0aCAvIHJhdGlvOwogICAgICB9CiAgICAgIHJldHVybiB7CiAgICAgICAgd2lkdGg6IHcgKyAncHgnLAogICAgICAgIGhlaWdodDogaCArICdweCcKICAgICAgfTsKICAgIH0KICB9LAogIHdhdGNoOiB7CiAgICB2YWx1ZTogZnVuY3Rpb24gdmFsdWUobmV3VmFsdWUpIHsKICAgICAgaWYgKG5ld1ZhbHVlICYmIHRoaXMubG9hZGluZyAhPT0gMSkgewogICAgICAgIHRoaXMucmVzZXQoKTsKICAgICAgfQogICAgfQogIH0sCiAgY3JlYXRlZDogZnVuY3Rpb24gY3JlYXRlZCgpIHsKICAgIC8vIOe7keWumuaMiemUrmVzY+makOiXj+atpOaPkuS7tuS6i+S7tgogICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLCB0aGlzLmNsb3NlSGFuZGxlcik7CiAgfSwKICBkZXN0cm95ZWQ6IGZ1bmN0aW9uIGRlc3Ryb3llZCgpIHsKICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleXVwJywgdGhpcy5jbG9zZUhhbmRsZXIpOwogIH0sCiAgbWV0aG9kczogewogICAgLy8g54K55Ye75rOi57q55pWI5p6cCiAgICByaXBwbGU6IGZ1bmN0aW9uIHJpcHBsZShlKSB7CiAgICAgIGVmZmVjdFJpcHBsZShlKTsKICAgIH0sCiAgICAvLyDlhbPpl63mjqfku7YKICAgIG9mZjogZnVuY3Rpb24gb2ZmKCkgewogICAgICB2YXIgX3RoaXMgPSB0aGlzOwogICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICBfdGhpcy4kZW1pdCgnaW5wdXQnLCBmYWxzZSk7CiAgICAgICAgX3RoaXMuJGVtaXQoJ2Nsb3NlJyk7CiAgICAgICAgaWYgKF90aGlzLnN0ZXAgPT09IDMgJiYgX3RoaXMubG9hZGluZyA9PT0gMikgewogICAgICAgICAgX3RoaXMuc2V0U3RlcCgxKTsKICAgICAgICB9CiAgICAgIH0sIDIwMCk7CiAgICB9LAogICAgLy8g6K6+572u5q2l6aqkCiAgICBzZXRTdGVwOiBmdW5jdGlvbiBzZXRTdGVwKG5vKSB7CiAgICAgIHZhciBfdGhpczIgPSB0aGlzOwogICAgICAvLyDlu7bml7bmmK/kuLrkuobmmL7npLrliqjnlLvmlYjmnpzlkaLvvIzlk4jlk4jlk4gKICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CiAgICAgICAgX3RoaXMyLnN0ZXAgPSBubzsKICAgICAgfSwgMjAwKTsKICAgIH0sCiAgICAvKiDlm77niYfpgInmi6nljLrln5/lh73mlbDnu5HlrpoKICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogICAgcHJldmVudERlZmF1bHQ6IGZ1bmN0aW9uIHByZXZlbnREZWZhdWx0KGUpIHsKICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9LAogICAgaGFuZGxlQ2xpY2s6IGZ1bmN0aW9uIGhhbmRsZUNsaWNrKGUpIHsKICAgICAgaWYgKHRoaXMubG9hZGluZyAhPT0gMSkgewogICAgICAgIGlmIChlLnRhcmdldCAhPT0gdGhpcy4kcmVmcy5maWxlaW5wdXQpIHsKICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ICE9PSB0aGlzLiRyZWZzKSB7CiAgICAgICAgICAgIHRoaXMuJHJlZnMuZmlsZWlucHV0LmNsaWNrKCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgaGFuZGxlQ2hhbmdlOiBmdW5jdGlvbiBoYW5kbGVDaGFuZ2UoZSkgewogICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgIGlmICh0aGlzLmxvYWRpbmcgIT09IDEpIHsKICAgICAgICB2YXIgZmlsZXMgPSBlLnRhcmdldC5maWxlcyB8fCBlLmRhdGFUcmFuc2Zlci5maWxlczsKICAgICAgICB0aGlzLnJlc2V0KCk7CiAgICAgICAgaWYgKHRoaXMuY2hlY2tGaWxlKGZpbGVzWzBdKSkgewogICAgICAgICAgdGhpcy5zZXRTb3VyY2VJbWcoZmlsZXNbMF0pOwogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgICAvLyDmo4DmtYvpgInmi6nnmoTmlofku7bmmK/lkKblkIjpgIIKICAgIGNoZWNrRmlsZTogZnVuY3Rpb24gY2hlY2tGaWxlKGZpbGUpIHsKICAgICAgdmFyIGxhbmcgPSB0aGlzLmxhbmcsCiAgICAgICAgbWF4U2l6ZSA9IHRoaXMubWF4U2l6ZTsKICAgICAgLy8g5LuF6ZmQ5Zu+54mHCiAgICAgIGlmIChmaWxlLnR5cGUuaW5kZXhPZignaW1hZ2UnKSA9PT0gLTEpIHsKICAgICAgICB0aGlzLmhhc0Vycm9yID0gdHJ1ZTsKICAgICAgICB0aGlzLmVycm9yTXNnID0gbGFuZy5lcnJvci5vbmx5SW1nOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICAvLyDotoXlh7rlpKflsI8KICAgICAgaWYgKGZpbGUuc2l6ZSAvIDEwMjQgPiBtYXhTaXplKSB7CiAgICAgICAgdGhpcy5oYXNFcnJvciA9IHRydWU7CiAgICAgICAgdGhpcy5lcnJvck1zZyA9IGxhbmcuZXJyb3Iub3V0T2ZTaXplICsgbWF4U2l6ZSArICdrYic7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIHJldHVybiB0cnVlOwogICAgfSwKICAgIC8vIOmHjee9ruaOp+S7tgogICAgcmVzZXQ6IGZ1bmN0aW9uIHJlc2V0KCkgewogICAgICB0aGlzLmxvYWRpbmcgPSAwOwogICAgICB0aGlzLmhhc0Vycm9yID0gZmFsc2U7CiAgICAgIHRoaXMuZXJyb3JNc2cgPSAnJzsKICAgICAgdGhpcy5wcm9ncmVzcyA9IDA7CiAgICB9LAogICAgLy8g6K6+572u5Zu+54mH5rqQCiAgICBzZXRTb3VyY2VJbWc6IGZ1bmN0aW9uIHNldFNvdXJjZUltZyhmaWxlKSB7CiAgICAgIHZhciBfdGhpczMgPSB0aGlzOwogICAgICB2YXIgZnIgPSBuZXcgRmlsZVJlYWRlcigpOwogICAgICBmci5vbmxvYWQgPSBmdW5jdGlvbiAoZSkgewogICAgICAgIF90aGlzMy5zb3VyY2VJbWdVcmwgPSBmci5yZXN1bHQ7CiAgICAgICAgX3RoaXMzLnN0YXJ0Q3JvcCgpOwogICAgICB9OwogICAgICBmci5yZWFkQXNEYXRhVVJMKGZpbGUpOwogICAgfSwKICAgIC8vIOWJquijgeWJjeWHhuWkh+W3peS9nAogICAgc3RhcnRDcm9wOiBmdW5jdGlvbiBzdGFydENyb3AoKSB7CiAgICAgIHZhciBfdGhpczQgPSB0aGlzOwogICAgICB2YXIgd2lkdGggPSB0aGlzLndpZHRoLAogICAgICAgIGhlaWdodCA9IHRoaXMuaGVpZ2h0LAogICAgICAgIHJhdGlvID0gdGhpcy5yYXRpbywKICAgICAgICBzY2FsZSA9IHRoaXMuc2NhbGUsCiAgICAgICAgc291cmNlSW1nVXJsID0gdGhpcy5zb3VyY2VJbWdVcmwsCiAgICAgICAgc291cmNlSW1nTWFza2luZyA9IHRoaXMuc291cmNlSW1nTWFza2luZywKICAgICAgICBsYW5nID0gdGhpcy5sYW5nOwogICAgICB2YXIgc2ltID0gc291cmNlSW1nTWFza2luZzsKICAgICAgdmFyIGltZyA9IG5ldyBJbWFnZSgpOwogICAgICBpbWcuc3JjID0gc291cmNlSW1nVXJsOwogICAgICBpbWcub25sb2FkID0gZnVuY3Rpb24gKCkgewogICAgICAgIHZhciBuV2lkdGggPSBpbWcubmF0dXJhbFdpZHRoOwogICAgICAgIHZhciBuSGVpZ2h0ID0gaW1nLm5hdHVyYWxIZWlnaHQ7CiAgICAgICAgdmFyIG5SYXRpbyA9IG5XaWR0aCAvIG5IZWlnaHQ7CiAgICAgICAgdmFyIHcgPSBzaW0ud2lkdGg7CiAgICAgICAgdmFyIGggPSBzaW0uaGVpZ2h0OwogICAgICAgIHZhciB4ID0gMDsKICAgICAgICB2YXIgeSA9IDA7CiAgICAgICAgLy8g5Zu+54mH5YOP57Sg5LiN6L6+5qCHCiAgICAgICAgaWYgKG5XaWR0aCA8IHdpZHRoIHx8IG5IZWlnaHQgPCBoZWlnaHQpIHsKICAgICAgICAgIF90aGlzNC5oYXNFcnJvciA9IHRydWU7CiAgICAgICAgICBfdGhpczQuZXJyb3JNc2cgPSBsYW5nLmVycm9yLmxvd2VzdFB4ICsgd2lkdGggKyAnKicgKyBoZWlnaHQ7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICAgIGlmIChyYXRpbyA+IG5SYXRpbykgewogICAgICAgICAgaCA9IHcgLyBuUmF0aW87CiAgICAgICAgICB5ID0gKHNpbS5oZWlnaHQgLSBoKSAvIDI7CiAgICAgICAgfQogICAgICAgIGlmIChyYXRpbyA8IG5SYXRpbykgewogICAgICAgICAgdyA9IGggKiBuUmF0aW87CiAgICAgICAgICB4ID0gKHNpbS53aWR0aCAtIHcpIC8gMjsKICAgICAgICB9CiAgICAgICAgc2NhbGUucmFuZ2UgPSAwOwogICAgICAgIHNjYWxlLnggPSB4OwogICAgICAgIHNjYWxlLnkgPSB5OwogICAgICAgIHNjYWxlLndpZHRoID0gdzsKICAgICAgICBzY2FsZS5oZWlnaHQgPSBoOwogICAgICAgIHNjYWxlLmRlZ3JlZSA9IDA7CiAgICAgICAgc2NhbGUubWluV2lkdGggPSB3OwogICAgICAgIHNjYWxlLm1pbkhlaWdodCA9IGg7CiAgICAgICAgc2NhbGUubWF4V2lkdGggPSBuV2lkdGggKiBzaW0uc2NhbGU7CiAgICAgICAgc2NhbGUubWF4SGVpZ2h0ID0gbkhlaWdodCAqIHNpbS5zY2FsZTsKICAgICAgICBzY2FsZS5uYXR1cmFsV2lkdGggPSBuV2lkdGg7CiAgICAgICAgc2NhbGUubmF0dXJhbEhlaWdodCA9IG5IZWlnaHQ7CiAgICAgICAgX3RoaXM0LnNvdXJjZUltZyA9IGltZzsKICAgICAgICBfdGhpczQuY3JlYXRlSW1nKCk7CiAgICAgICAgX3RoaXM0LnNldFN0ZXAoMik7CiAgICAgIH07CiAgICB9LAogICAgLy8g6byg5qCH5oyJ5LiL5Zu+54mH5YeG5aSH56e75YqoCiAgICBpbWdTdGFydE1vdmU6IGZ1bmN0aW9uIGltZ1N0YXJ0TW92ZShlKSB7CiAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgLy8g5pSv5oyB6Kem5pG45LqL5Lu277yM5YiZ6byg5qCH5LqL5Lu25peg5pWICiAgICAgIGlmICh0aGlzLmlzU3VwcG9ydFRvdWNoICYmICFlLnRhcmdldFRvdWNoZXMpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgdmFyIGV0ID0gZS50YXJnZXRUb3VjaGVzID8gZS50YXJnZXRUb3VjaGVzWzBdIDogZTsKICAgICAgdmFyIHNvdXJjZUltZ01vdXNlRG93biA9IHRoaXMuc291cmNlSW1nTW91c2VEb3duLAogICAgICAgIHNjYWxlID0gdGhpcy5zY2FsZTsKICAgICAgdmFyIHNpbWQgPSBzb3VyY2VJbWdNb3VzZURvd247CiAgICAgIHNpbWQubVggPSBldC5zY3JlZW5YOwogICAgICBzaW1kLm1ZID0gZXQuc2NyZWVuWTsKICAgICAgc2ltZC54ID0gc2NhbGUueDsKICAgICAgc2ltZC55ID0gc2NhbGUueTsKICAgICAgc2ltZC5vbiA9IHRydWU7CiAgICB9LAogICAgLy8g6byg5qCH5oyJ5LiL54q25oCB5LiL56e75Yqo77yM5Zu+54mH56e75YqoCiAgICBpbWdNb3ZlOiBmdW5jdGlvbiBpbWdNb3ZlKGUpIHsKICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAvLyDmlK/mjIHop6bmkbjkuovku7bvvIzliJnpvKDmoIfkuovku7bml6DmlYgKICAgICAgaWYgKHRoaXMuaXNTdXBwb3J0VG91Y2ggJiYgIWUudGFyZ2V0VG91Y2hlcykgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICB2YXIgZXQgPSBlLnRhcmdldFRvdWNoZXMgPyBlLnRhcmdldFRvdWNoZXNbMF0gOiBlOwogICAgICB2YXIgX3RoaXMkc291cmNlSW1nTW91c2VEID0gdGhpcy5zb3VyY2VJbWdNb3VzZURvd24sCiAgICAgICAgb24gPSBfdGhpcyRzb3VyY2VJbWdNb3VzZUQub24sCiAgICAgICAgbVggPSBfdGhpcyRzb3VyY2VJbWdNb3VzZUQubVgsCiAgICAgICAgbVkgPSBfdGhpcyRzb3VyY2VJbWdNb3VzZUQubVksCiAgICAgICAgeCA9IF90aGlzJHNvdXJjZUltZ01vdXNlRC54LAogICAgICAgIHkgPSBfdGhpcyRzb3VyY2VJbWdNb3VzZUQueSwKICAgICAgICBzY2FsZSA9IHRoaXMuc2NhbGUsCiAgICAgICAgc291cmNlSW1nTWFza2luZyA9IHRoaXMuc291cmNlSW1nTWFza2luZzsKICAgICAgdmFyIHNpbSA9IHNvdXJjZUltZ01hc2tpbmc7CiAgICAgIHZhciBuWCA9IGV0LnNjcmVlblg7CiAgICAgIHZhciBuWSA9IGV0LnNjcmVlblk7CiAgICAgIHZhciBkWCA9IG5YIC0gbVg7CiAgICAgIHZhciBkWSA9IG5ZIC0gbVk7CiAgICAgIHZhciByWCA9IHggKyBkWDsKICAgICAgdmFyIHJZID0geSArIGRZOwogICAgICBpZiAoIW9uKSByZXR1cm47CiAgICAgIGlmIChyWCA+IDApIHsKICAgICAgICByWCA9IDA7CiAgICAgIH0KICAgICAgaWYgKHJZID4gMCkgewogICAgICAgIHJZID0gMDsKICAgICAgfQogICAgICBpZiAoclggPCBzaW0ud2lkdGggLSBzY2FsZS53aWR0aCkgewogICAgICAgIHJYID0gc2ltLndpZHRoIC0gc2NhbGUud2lkdGg7CiAgICAgIH0KICAgICAgaWYgKHJZIDwgc2ltLmhlaWdodCAtIHNjYWxlLmhlaWdodCkgewogICAgICAgIHJZID0gc2ltLmhlaWdodCAtIHNjYWxlLmhlaWdodDsKICAgICAgfQogICAgICBzY2FsZS54ID0gclg7CiAgICAgIHNjYWxlLnkgPSByWTsKICAgIH0sCiAgICAvLyDmjInpkq7mjInkuIvlvIDlp4vlkJHlj7Pml4vovawKICAgIHN0YXJ0Um90YXRlUmlnaHQ6IGZ1bmN0aW9uIHN0YXJ0Um90YXRlUmlnaHQoZSkgewogICAgICB2YXIgX3RoaXM1ID0gdGhpczsKICAgICAgdmFyIHNjYWxlID0gdGhpcy5zY2FsZTsKICAgICAgc2NhbGUucm90YXRlUmlnaHQgPSB0cnVlOwogICAgICB2YXIgX3JvdGF0ZSA9IGZ1bmN0aW9uIHJvdGF0ZSgpIHsKICAgICAgICBpZiAoc2NhbGUucm90YXRlUmlnaHQpIHsKICAgICAgICAgIHZhciBkZWdyZWUgPSArK3NjYWxlLmRlZ3JlZTsKICAgICAgICAgIF90aGlzNS5jcmVhdGVJbWcoZGVncmVlKTsKICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICAgICAgICBfcm90YXRlKCk7CiAgICAgICAgICB9LCA2MCk7CiAgICAgICAgfQogICAgICB9OwogICAgICBfcm90YXRlKCk7CiAgICB9LAogICAgLy8g5oyJ6ZKu5oyJ5LiL5byA5aeL5ZCR5bem5peL6L2sCiAgICBzdGFydFJvdGF0ZUxlZnQ6IGZ1bmN0aW9uIHN0YXJ0Um90YXRlTGVmdChlKSB7CiAgICAgIHZhciBfdGhpczYgPSB0aGlzOwogICAgICB2YXIgc2NhbGUgPSB0aGlzLnNjYWxlOwogICAgICBzY2FsZS5yb3RhdGVMZWZ0ID0gdHJ1ZTsKICAgICAgdmFyIF9yb3RhdGUyID0gZnVuY3Rpb24gcm90YXRlKCkgewogICAgICAgIGlmIChzY2FsZS5yb3RhdGVMZWZ0KSB7CiAgICAgICAgICB2YXIgZGVncmVlID0gLS1zY2FsZS5kZWdyZWU7CiAgICAgICAgICBfdGhpczYuY3JlYXRlSW1nKGRlZ3JlZSk7CiAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgX3JvdGF0ZTIoKTsKICAgICAgICAgIH0sIDYwKTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIF9yb3RhdGUyKCk7CiAgICB9LAogICAgLy8g5YGc5q2i5peL6L2sCiAgICBlbmRSb3RhdGU6IGZ1bmN0aW9uIGVuZFJvdGF0ZSgpIHsKICAgICAgdmFyIHNjYWxlID0gdGhpcy5zY2FsZTsKICAgICAgc2NhbGUucm90YXRlTGVmdCA9IGZhbHNlOwogICAgICBzY2FsZS5yb3RhdGVSaWdodCA9IGZhbHNlOwogICAgfSwKICAgIC8vIOaMiemSruaMieS4i+W8gOWni+aUvuWkpwogICAgc3RhcnRab29tQWRkOiBmdW5jdGlvbiBzdGFydFpvb21BZGQoZSkgewogICAgICB2YXIgX3RoaXM3ID0gdGhpczsKICAgICAgdmFyIHNjYWxlID0gdGhpcy5zY2FsZTsKICAgICAgc2NhbGUuem9vbUFkZE9uID0gdHJ1ZTsKICAgICAgdmFyIF96b29tID0gZnVuY3Rpb24gem9vbSgpIHsKICAgICAgICBpZiAoc2NhbGUuem9vbUFkZE9uKSB7CiAgICAgICAgICB2YXIgcmFuZ2UgPSBzY2FsZS5yYW5nZSA+PSAxMDAgPyAxMDAgOiArK3NjYWxlLnJhbmdlOwogICAgICAgICAgX3RoaXM3Lnpvb21JbWcocmFuZ2UpOwogICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIF96b29tKCk7CiAgICAgICAgICB9LCA2MCk7CiAgICAgICAgfQogICAgICB9OwogICAgICBfem9vbSgpOwogICAgfSwKICAgIC8vIOaMiemSruadvuW8gOaIluenu+W8gOWPlua2iOaUvuWkpwogICAgZW5kWm9vbUFkZDogZnVuY3Rpb24gZW5kWm9vbUFkZChlKSB7CiAgICAgIHRoaXMuc2NhbGUuem9vbUFkZE9uID0gZmFsc2U7CiAgICB9LAogICAgLy8g5oyJ6ZKu5oyJ5LiL5byA5aeL57yp5bCPCiAgICBzdGFydFpvb21TdWI6IGZ1bmN0aW9uIHN0YXJ0Wm9vbVN1YihlKSB7CiAgICAgIHZhciBfdGhpczggPSB0aGlzOwogICAgICB2YXIgc2NhbGUgPSB0aGlzLnNjYWxlOwogICAgICBzY2FsZS56b29tU3ViT24gPSB0cnVlOwogICAgICB2YXIgX3pvb20yID0gZnVuY3Rpb24gem9vbSgpIHsKICAgICAgICBpZiAoc2NhbGUuem9vbVN1Yk9uKSB7CiAgICAgICAgICB2YXIgcmFuZ2UgPSBzY2FsZS5yYW5nZSA8PSAwID8gMCA6IC0tc2NhbGUucmFuZ2U7CiAgICAgICAgICBfdGhpczguem9vbUltZyhyYW5nZSk7CiAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgX3pvb20yKCk7CiAgICAgICAgICB9LCA2MCk7CiAgICAgICAgfQogICAgICB9OwogICAgICBfem9vbTIoKTsKICAgIH0sCiAgICAvLyDmjInpkq7mnb7lvIDmiJbnp7vlvIDlj5bmtojnvKnlsI8KICAgIGVuZFpvb21TdWI6IGZ1bmN0aW9uIGVuZFpvb21TdWIoZSkgewogICAgICB2YXIgc2NhbGUgPSB0aGlzLnNjYWxlOwogICAgICBzY2FsZS56b29tU3ViT24gPSBmYWxzZTsKICAgIH0sCiAgICB6b29tQ2hhbmdlOiBmdW5jdGlvbiB6b29tQ2hhbmdlKGUpIHsKICAgICAgdGhpcy56b29tSW1nKGUudGFyZ2V0LnZhbHVlKTsKICAgIH0sCiAgICAvLyDnvKnmlL7ljp/lm74KICAgIHpvb21JbWc6IGZ1bmN0aW9uIHpvb21JbWcobmV3UmFuZ2UpIHsKICAgICAgdmFyIF90aGlzOSA9IHRoaXM7CiAgICAgIHZhciBzb3VyY2VJbWdNYXNraW5nID0gdGhpcy5zb3VyY2VJbWdNYXNraW5nLAogICAgICAgIHNjYWxlID0gdGhpcy5zY2FsZTsKICAgICAgdmFyIG1heFdpZHRoID0gc2NhbGUubWF4V2lkdGgsCiAgICAgICAgbWF4SGVpZ2h0ID0gc2NhbGUubWF4SGVpZ2h0LAogICAgICAgIG1pbldpZHRoID0gc2NhbGUubWluV2lkdGgsCiAgICAgICAgbWluSGVpZ2h0ID0gc2NhbGUubWluSGVpZ2h0LAogICAgICAgIHdpZHRoID0gc2NhbGUud2lkdGgsCiAgICAgICAgaGVpZ2h0ID0gc2NhbGUuaGVpZ2h0LAogICAgICAgIHggPSBzY2FsZS54LAogICAgICAgIHkgPSBzY2FsZS55OwogICAgICB2YXIgc2ltID0gc291cmNlSW1nTWFza2luZzsKICAgICAgLy8g6JKZ54mI5a696auYCiAgICAgIHZhciBzV2lkdGggPSBzaW0ud2lkdGg7CiAgICAgIHZhciBzSGVpZ2h0ID0gc2ltLmhlaWdodDsKICAgICAgLy8g5paw5a696auYCiAgICAgIHZhciBuV2lkdGggPSBtaW5XaWR0aCArIChtYXhXaWR0aCAtIG1pbldpZHRoKSAqIG5ld1JhbmdlIC8gMTAwOwogICAgICB2YXIgbkhlaWdodCA9IG1pbkhlaWdodCArIChtYXhIZWlnaHQgLSBtaW5IZWlnaHQpICogbmV3UmFuZ2UgLyAxMDA7CiAgICAgIC8vIOaWsOWdkOagh++8iOagueaNruiSmeeJiOS4reW/g+eCuee8qeaUvu+8iQogICAgICB2YXIgblggPSBzV2lkdGggLyAyIC0gbldpZHRoIC8gd2lkdGggKiAoc1dpZHRoIC8gMiAtIHgpOwogICAgICB2YXIgblkgPSBzSGVpZ2h0IC8gMiAtIG5IZWlnaHQgLyBoZWlnaHQgKiAoc0hlaWdodCAvIDIgLSB5KTsKICAgICAgLy8g5Yik5pat5paw5Z2Q5qCH5piv5ZCm6LaF6L+H6JKZ54mI6ZmQ5Yi2CiAgICAgIGlmIChuWCA+IDApIHsKICAgICAgICBuWCA9IDA7CiAgICAgIH0KICAgICAgaWYgKG5ZID4gMCkgewogICAgICAgIG5ZID0gMDsKICAgICAgfQogICAgICBpZiAoblggPCBzV2lkdGggLSBuV2lkdGgpIHsKICAgICAgICBuWCA9IHNXaWR0aCAtIG5XaWR0aDsKICAgICAgfQogICAgICBpZiAoblkgPCBzSGVpZ2h0IC0gbkhlaWdodCkgewogICAgICAgIG5ZID0gc0hlaWdodCAtIG5IZWlnaHQ7CiAgICAgIH0KICAgICAgLy8g6LWL5YC85aSE55CGCiAgICAgIHNjYWxlLnggPSBuWDsKICAgICAgc2NhbGUueSA9IG5ZOwogICAgICBzY2FsZS53aWR0aCA9IG5XaWR0aDsKICAgICAgc2NhbGUuaGVpZ2h0ID0gbkhlaWdodDsKICAgICAgc2NhbGUucmFuZ2UgPSBuZXdSYW5nZTsKICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CiAgICAgICAgaWYgKHNjYWxlLnJhbmdlID09PSBuZXdSYW5nZSkgewogICAgICAgICAgX3RoaXM5LmNyZWF0ZUltZygpOwogICAgICAgIH0KICAgICAgfSwgMzAwKTsKICAgIH0sCiAgICAvLyDnlJ/miJDpnIDmsYLlm77niYcKICAgIGNyZWF0ZUltZzogZnVuY3Rpb24gY3JlYXRlSW1nKGUpIHsKICAgICAgdmFyIG1pbWUgPSB0aGlzLm1pbWUsCiAgICAgICAgc291cmNlSW1nID0gdGhpcy5zb3VyY2VJbWcsCiAgICAgICAgX3RoaXMkc2NhbGUgPSB0aGlzLnNjYWxlLAogICAgICAgIHggPSBfdGhpcyRzY2FsZS54LAogICAgICAgIHkgPSBfdGhpcyRzY2FsZS55LAogICAgICAgIHdpZHRoID0gX3RoaXMkc2NhbGUud2lkdGgsCiAgICAgICAgaGVpZ2h0ID0gX3RoaXMkc2NhbGUuaGVpZ2h0LAogICAgICAgIGRlZ3JlZSA9IF90aGlzJHNjYWxlLmRlZ3JlZSwKICAgICAgICBzY2FsZSA9IHRoaXMuc291cmNlSW1nTWFza2luZy5zY2FsZTsKICAgICAgdmFyIGNhbnZhcyA9IHRoaXMuJHJlZnMuY2FudmFzOwogICAgICB2YXIgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7CiAgICAgIGlmIChlKSB7CiAgICAgICAgLy8g5Y+W5raI6byg5qCH5oyJ5LiL56e75Yqo54q25oCBCiAgICAgICAgdGhpcy5zb3VyY2VJbWdNb3VzZURvd24ub24gPSBmYWxzZTsKICAgICAgfQogICAgICBjYW52YXMud2lkdGggPSB0aGlzLndpZHRoOwogICAgICBjYW52YXMuaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7CiAgICAgIGN0eC5jbGVhclJlY3QoMCwgMCwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpOwogICAgICAvLyDlsIbpgI/mmI7ljLrln5/orr7nva7kuLrnmb3oibLlupXovrkKICAgICAgY3R4LmZpbGxTdHlsZSA9ICcjZmZmJzsKICAgICAgY3R4LmZpbGxSZWN0KDAsIDAsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTsKICAgICAgY3R4LnRyYW5zbGF0ZSh0aGlzLndpZHRoICogMC41LCB0aGlzLmhlaWdodCAqIDAuNSk7CiAgICAgIGN0eC5yb3RhdGUoTWF0aC5QSSAqIGRlZ3JlZSAvIDE4MCk7CiAgICAgIGN0eC50cmFuc2xhdGUoLXRoaXMud2lkdGggKiAwLjUsIC10aGlzLmhlaWdodCAqIDAuNSk7CiAgICAgIGN0eC5kcmF3SW1hZ2Uoc291cmNlSW1nLCB4IC8gc2NhbGUsIHkgLyBzY2FsZSwgd2lkdGggLyBzY2FsZSwgaGVpZ2h0IC8gc2NhbGUpOwogICAgICB0aGlzLmNyZWF0ZUltZ1VybCA9IGNhbnZhcy50b0RhdGFVUkwobWltZSk7CiAgICB9LAogICAgcHJlcGFyZVVwbG9hZDogZnVuY3Rpb24gcHJlcGFyZVVwbG9hZCgpIHsKICAgICAgdmFyIHVybCA9IHRoaXMudXJsLAogICAgICAgIGNyZWF0ZUltZ1VybCA9IHRoaXMuY3JlYXRlSW1nVXJsLAogICAgICAgIGZpZWxkID0gdGhpcy5maWVsZCwKICAgICAgICBraSA9IHRoaXMua2k7CiAgICAgIHRoaXMuJGVtaXQoJ2Nyb3Atc3VjY2VzcycsIGNyZWF0ZUltZ1VybCwgZmllbGQsIGtpKTsKICAgICAgaWYgKHR5cGVvZiB1cmwgPT09ICdzdHJpbmcnICYmIHVybCkgewogICAgICAgIHRoaXMudXBsb2FkKCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy5vZmYoKTsKICAgICAgfQogICAgfSwKICAgIC8vIOS4iuS8oOWbvueJhwogICAgdXBsb2FkOiBmdW5jdGlvbiB1cGxvYWQoKSB7CiAgICAgIHZhciBfdGhpczAgPSB0aGlzOwogICAgICB2YXIgbGFuZyA9IHRoaXMubGFuZywKICAgICAgICBpbWdGb3JtYXQgPSB0aGlzLmltZ0Zvcm1hdCwKICAgICAgICBtaW1lID0gdGhpcy5taW1lLAogICAgICAgIHVybCA9IHRoaXMudXJsLAogICAgICAgIHBhcmFtcyA9IHRoaXMucGFyYW1zLAogICAgICAgIGZpZWxkID0gdGhpcy5maWVsZCwKICAgICAgICBraSA9IHRoaXMua2ksCiAgICAgICAgY3JlYXRlSW1nVXJsID0gdGhpcy5jcmVhdGVJbWdVcmw7CiAgICAgIHZhciBmbURhdGEgPSBuZXcgRm9ybURhdGEoKTsKICAgICAgZm1EYXRhLmFwcGVuZChmaWVsZCwgZGF0YTJibG9iKGNyZWF0ZUltZ1VybCwgbWltZSksIGZpZWxkICsgJy4nICsgaW1nRm9ybWF0KTsKICAgICAgLy8g5re75Yqg5YW25LuW5Y+C5pWwCiAgICAgIGlmIChfdHlwZW9mKHBhcmFtcykgPT09ICdvYmplY3QnICYmIHBhcmFtcykgewogICAgICAgIE9iamVjdC5rZXlzKHBhcmFtcykuZm9yRWFjaChmdW5jdGlvbiAoaykgewogICAgICAgICAgZm1EYXRhLmFwcGVuZChrLCBwYXJhbXNba10pOwogICAgICAgIH0pOwogICAgICB9CiAgICAgIC8vIOebkeWQrOi/m+W6puWbnuiwgwogICAgICAvLyBjb25zdCB1cGxvYWRQcm9ncmVzcyA9IChldmVudCkgPT4gewogICAgICAvLyAgIGlmIChldmVudC5sZW5ndGhDb21wdXRhYmxlKSB7CiAgICAgIC8vICAgICB0aGlzLnByb2dyZXNzID0gMTAwICogTWF0aC5yb3VuZChldmVudC5sb2FkZWQpIC8gZXZlbnQudG90YWwKICAgICAgLy8gICB9CiAgICAgIC8vIH0KICAgICAgLy8g5LiK5Lyg5paH5Lu2CiAgICAgIHRoaXMucmVzZXQoKTsKICAgICAgdGhpcy5sb2FkaW5nID0gMTsKICAgICAgdGhpcy5zZXRTdGVwKDMpOwogICAgICByZXF1ZXN0KHsKICAgICAgICB1cmw6IHVybCwKICAgICAgICBtZXRob2Q6ICdwb3N0JywKICAgICAgICBkYXRhOiBmbURhdGEKICAgICAgfSkudGhlbihmdW5jdGlvbiAocmVzRGF0YSkgewogICAgICAgIF90aGlzMC5sb2FkaW5nID0gMjsKICAgICAgICBfdGhpczAuJGVtaXQoJ2Nyb3AtdXBsb2FkLXN1Y2Nlc3MnLCByZXNEYXRhLmRhdGEpOwogICAgICB9KS5jYXRjaChmdW5jdGlvbiAoZXJyKSB7CiAgICAgICAgaWYgKF90aGlzMC52YWx1ZSkgewogICAgICAgICAgX3RoaXMwLmxvYWRpbmcgPSAzOwogICAgICAgICAgX3RoaXMwLmhhc0Vycm9yID0gdHJ1ZTsKICAgICAgICAgIF90aGlzMC5lcnJvck1zZyA9IGxhbmcuZmFpbDsKICAgICAgICAgIF90aGlzMC4kZW1pdCgnY3JvcC11cGxvYWQtZmFpbCcsIGVyciwgZmllbGQsIGtpKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfSwKICAgIGNsb3NlSGFuZGxlcjogZnVuY3Rpb24gY2xvc2VIYW5kbGVyKGUpIHsKICAgICAgaWYgKHRoaXMudmFsdWUgJiYgKGUua2V5ID09PSAnRXNjYXBlJyB8fCBlLmtleUNvZGUgPT09IDI3KSkgewogICAgICAgIHRoaXMub2ZmKCk7CiAgICAgIH0KICAgIH0KICB9Cn07"},{"version":3,"names":["_typeof","request","language","mimes","data2blob","effectRipple","props","field","type","String","default","ki","Number","value","Boolean","url","params","Object","headers","width","height","noRotate","noCircle","noSquare","maxSize","langType","langExt","imgFormat","withCredentials","data","isSupported","allowImgFormat","tempImgFormat","indexOf","lang","mime","assign","FormData","isSupportTouch","document","hasOwnProperty","step","loading","progress","hasError","errorMsg","ratio","sourceImg","sourceImgUrl","createImgUrl","sourceImgMouseDown","on","mX","mY","x","y","previewContainer","sourceImgContainer","scale","zoomAddOn","zoomSubOn","range","rotateLeft","rotateRight","degree","maxWidth","maxHeight","minWidth","minHeight","naturalWidth","naturalHeight","computed","progressStyle","sourceImgStyle","sourceImgMasking","top","left","transform","sic","sicRatio","w","h","sourceImgShadeStyle","sim","previewStyle","pc","pcRatio","watch","newValue","reset","created","addEventListener","closeHandler","destroyed","removeEventListener","methods","ripple","e","off","_this","setTimeout","$emit","setStep","no","_this2","preventDefault","handleClick","target","$refs","fileinput","activeElement","click","handleChange","files","dataTransfer","checkFile","setSourceImg","file","error","onlyImg","size","outOfSize","_this3","fr","FileReader","onload","result","startCrop","readAsDataURL","_this4","img","Image","src","nWidth","nHeight","nRatio","lowestPx","createImg","imgStartMove","targetTouches","et","simd","screenX","screenY","imgMove","_this$sourceImgMouseD","nX","nY","dX","dY","rX","rY","startRotateRight","_this5","rotate","startRotateLeft","_this6","endRotate","startZoomAdd","_this7","zoom","zoomImg","endZoomAdd","startZoomSub","_this8","endZoomSub","zoomChange","newRange","_this9","sWidth","sHeight","_this$scale","canvas","ctx","getContext","clearRect","fillStyle","fillRect","translate","Math","PI","drawImage","toDataURL","prepareUpload","upload","_this0","fmData","append","keys","forEach","k","method","then","resData","catch","err","fail","key","keyCode"],"sources":["src/components/ImageCropper/index.vue"],"sourcesContent":["<template>\n <div v-show=\"value\" class=\"vue-image-crop-upload\">\n <div class=\"vicp-wrap\">\n <div class=\"vicp-close\" @click=\"off\">\n <i class=\"vicp-icon4\" />\n </div>\n\n <div v-show=\"step == 1\" class=\"vicp-step1\">\n <div\n class=\"vicp-drop-area\"\n @dragleave=\"preventDefault\"\n @dragover=\"preventDefault\"\n @dragenter=\"preventDefault\"\n @click=\"handleClick\"\n @drop=\"handleChange\"\n >\n <i v-show=\"loading != 1\" class=\"vicp-icon1\">\n <i class=\"vicp-icon1-arrow\" />\n <i class=\"vicp-icon1-body\" />\n <i class=\"vicp-icon1-bottom\" />\n </i>\n <span v-show=\"loading !== 1\" class=\"vicp-hint\">{{ lang.hint }}</span>\n <span v-show=\"!isSupported\" class=\"vicp-no-supported-hint\">{{ lang.noSupported }}</span>\n <input v-show=\"false\" v-if=\"step == 1\" ref=\"fileinput\" type=\"file\" @change=\"handleChange\">\n </div>\n <div v-show=\"hasError\" class=\"vicp-error\">\n <i class=\"vicp-icon2\" />\n {{ errorMsg }}\n </div>\n <div class=\"vicp-operate\">\n <a @click=\"off\" @mousedown=\"ripple\">{{ lang.btn.off }}</a>\n </div>\n </div>\n\n <div v-if=\"step == 2\" class=\"vicp-step2\">\n <div class=\"vicp-crop\">\n <div v-show=\"true\" class=\"vicp-crop-left\">\n <div class=\"vicp-img-container\">\n <img\n ref=\"img\"\n :src=\"sourceImgUrl\"\n :style=\"sourceImgStyle\"\n class=\"vicp-img\"\n draggable=\"false\"\n @drag=\"preventDefault\"\n @dragstart=\"preventDefault\"\n @dragend=\"preventDefault\"\n @dragleave=\"preventDefault\"\n @dragover=\"preventDefault\"\n @dragenter=\"preventDefault\"\n @drop=\"preventDefault\"\n @touchstart=\"imgStartMove\"\n @touchmove=\"imgMove\"\n @touchend=\"createImg\"\n @touchcancel=\"createImg\"\n @mousedown=\"imgStartMove\"\n @mousemove=\"imgMove\"\n @mouseup=\"createImg\"\n @mouseout=\"createImg\"\n >\n <div :style=\"sourceImgShadeStyle\" class=\"vicp-img-shade vicp-img-shade-1\" />\n <div :style=\"sourceImgShadeStyle\" class=\"vicp-img-shade vicp-img-shade-2\" />\n </div>\n\n <div class=\"vicp-range\">\n <input\n :value=\"scale.range\"\n type=\"range\"\n step=\"1\"\n min=\"0\"\n max=\"100\"\n @input=\"zoomChange\"\n >\n <i\n class=\"vicp-icon5\"\n @mousedown=\"startZoomSub\"\n @mouseout=\"endZoomSub\"\n @mouseup=\"endZoomSub\"\n />\n <i\n class=\"vicp-icon6\"\n @mousedown=\"startZoomAdd\"\n @mouseout=\"endZoomAdd\"\n @mouseup=\"endZoomAdd\"\n />\n </div>\n\n <div v-if=\"!noRotate\" class=\"vicp-rotate\">\n <i @mousedown=\"startRotateLeft\" @mouseout=\"endRotate\" @mouseup=\"endRotate\">↺</i>\n <i @mousedown=\"startRotateRight\" @mouseout=\"endRotate\" @mouseup=\"endRotate\">↻</i>\n </div>\n </div>\n <div v-show=\"true\" class=\"vicp-crop-right\">\n <div class=\"vicp-preview\">\n <div v-if=\"!noSquare\" class=\"vicp-preview-item\">\n <img :src=\"createImgUrl\" :style=\"previewStyle\">\n <span>{{ lang.preview }}</span>\n </div>\n <div v-if=\"!noCircle\" class=\"vicp-preview-item vicp-preview-item-circle\">\n <img :src=\"createImgUrl\" :style=\"previewStyle\">\n <span>{{ lang.preview }}</span>\n </div>\n </div>\n </div>\n </div>\n <div class=\"vicp-operate\">\n <a @click=\"setStep(1)\" @mousedown=\"ripple\">{{ lang.btn.back }}</a>\n <a class=\"vicp-operate-btn\" @click=\"prepareUpload\" @mousedown=\"ripple\">{{ lang.btn.save }}</a>\n </div>\n </div>\n\n <div v-if=\"step == 3\" class=\"vicp-step3\">\n <div class=\"vicp-upload\">\n <span v-show=\"loading === 1\" class=\"vicp-loading\">{{ lang.loading }}</span>\n <div class=\"vicp-progress-wrap\">\n <span v-show=\"loading === 1\" :style=\"progressStyle\" class=\"vicp-progress\" />\n </div>\n <div v-show=\"hasError\" class=\"vicp-error\">\n <i class=\"vicp-icon2\" />\n {{ errorMsg }}\n </div>\n <div v-show=\"loading === 2\" class=\"vicp-success\">\n <i class=\"vicp-icon3\" />\n {{ lang.success }}\n </div>\n </div>\n <div class=\"vicp-operate\">\n <a @click=\"setStep(2)\" @mousedown=\"ripple\">{{ lang.btn.back }}</a>\n <a @click=\"off\" @mousedown=\"ripple\">{{ lang.btn.close }}</a>\n </div>\n </div>\n <canvas v-show=\"false\" ref=\"canvas\" :width=\"width\" :height=\"height\" />\n </div>\n </div>\n</template>\n\n<script>\n'use strict'\nimport request from '@/utils/request'\nimport language from './utils/language.js'\nimport mimes from './utils/mimes.js'\nimport data2blob from './utils/data2blob.js'\nimport effectRipple from './utils/effectRipple.js'\nexport default {\n props: {\n // 域上传文件name触发事件会带上如果一个页面多个图片上传控件可以做区分\n field: {\n type: String,\n default: 'avatar'\n },\n // 原名key类似于id触发事件会带上如果一个页面多个图片上传控件可以做区分\n ki: {\n type: Number,\n default: 0\n },\n // 显示该控件与否\n value: {\n type: Boolean,\n default: true\n },\n // 上传地址\n url: {\n type: String,\n default: ''\n },\n // 其他要上传文件附带的数据,对象格式\n params: {\n type: Object,\n default: null\n },\n // Add custom headers\n headers: {\n type: Object,\n default: null\n },\n // 剪裁图片的宽\n width: {\n type: Number,\n default: 200\n },\n // 剪裁图片的高\n height: {\n type: Number,\n default: 200\n },\n // 不显示旋转功能\n noRotate: {\n type: Boolean,\n default: true\n },\n // 不预览圆形图片\n noCircle: {\n type: Boolean,\n default: false\n },\n // 不预览方形图片\n noSquare: {\n type: Boolean,\n default: false\n },\n // 单文件大小限制\n maxSize: {\n type: Number,\n default: 10240\n },\n // 语言类型\n langType: {\n type: String,\n default: 'zh'\n },\n // 语言包\n langExt: {\n type: Object,\n default: null\n },\n // 图片上传格式\n imgFormat: {\n type: String,\n default: 'png'\n },\n // 是否支持跨域\n withCredentials: {\n type: Boolean,\n default: false\n }\n },\n data() {\n const { imgFormat, langType, langExt, width, height } = this\n let isSupported = true\n const allowImgFormat = ['jpg', 'png']\n const tempImgFormat =\n allowImgFormat.indexOf(imgFormat) === -1 ? 'jpg' : imgFormat\n const lang = language[langType] ? language[langType] : language['en']\n const mime = mimes[tempImgFormat]\n // 规范图片格式\n this.imgFormat = tempImgFormat\n if (langExt) {\n Object.assign(lang, langExt)\n }\n if (typeof FormData !== 'function') {\n isSupported = false\n }\n return {\n // 图片的mime\n mime,\n // 语言包\n lang,\n // 浏览器是否支持该控件\n isSupported,\n // 浏览器是否支持触屏事件\n // eslint-disable-next-line no-prototype-builtins\n isSupportTouch: document.hasOwnProperty('ontouchstart'),\n // 步骤\n step: 1, // 1选择文件 2剪裁 3上传\n // 上传状态及进度\n loading: 0, // 0未开始 1正在 2成功 3错误\n progress: 0,\n // 是否有错误及错误信息\n hasError: false,\n errorMsg: '',\n // 需求图宽高比\n ratio: width / height,\n // 原图地址、生成图片地址\n sourceImg: null,\n sourceImgUrl: '',\n createImgUrl: '',\n // 原图片拖动事件初始值\n sourceImgMouseDown: {\n on: false,\n mX: 0, // 鼠标按下的坐标\n mY: 0,\n x: 0, // scale原图坐标\n y: 0\n },\n // 生成图片预览的容器大小\n previewContainer: {\n width: 100,\n height: 100\n },\n // 原图容器宽高\n sourceImgContainer: {\n // sic\n width: 240,\n height: 184 // 如果生成图比例与此一致会出现bug先改成特殊的格式吧哈哈哈\n },\n // 原图展示属性\n scale: {\n zoomAddOn: false, // 按钮缩放事件开启\n zoomSubOn: false, // 按钮缩放事件开启\n range: 1, // 最大100\n rotateLeft: false, // 按钮向左旋转事件开启\n rotateRight: false, // 按钮向右旋转事件开启\n degree: 0, // 旋转度数\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n maxWidth: 0,\n maxHeight: 0,\n minWidth: 0, // 最宽\n minHeight: 0,\n naturalWidth: 0, // 原宽\n naturalHeight: 0\n }\n }\n },\n computed: {\n // 进度条样式\n progressStyle() {\n const { progress } = this\n return {\n width: progress + '%'\n }\n },\n // 原图样式\n sourceImgStyle() {\n const { scale, sourceImgMasking } = this\n const top = scale.y + sourceImgMasking.y + 'px'\n const left = scale.x + sourceImgMasking.x + 'px'\n return {\n top,\n left,\n width: scale.width + 'px',\n height: scale.height + 'px',\n transform: 'rotate(' + scale.degree + 'deg)', // 旋转时 左侧原始图旋转样式\n '-ms-transform': 'rotate(' + scale.degree + 'deg)', // 兼容IE9\n '-moz-transform': 'rotate(' + scale.degree + 'deg)', // 兼容FireFox\n '-webkit-transform': 'rotate(' + scale.degree + 'deg)', // 兼容Safari 和 chrome\n '-o-transform': 'rotate(' + scale.degree + 'deg)' // 兼容 Opera\n }\n },\n // 原图蒙版属性\n sourceImgMasking() {\n const { width, height, ratio, sourceImgContainer } = this\n const sic = sourceImgContainer\n const sicRatio = sic.width / sic.height // 原图容器宽高比\n let x = 0\n let y = 0\n let w = sic.width\n let h = sic.height\n let scale = 1\n if (ratio < sicRatio) {\n scale = sic.height / height\n w = sic.height * ratio\n x = (sic.width - w) / 2\n }\n if (ratio > sicRatio) {\n scale = sic.width / width\n h = sic.width / ratio\n y = (sic.height - h) / 2\n }\n return {\n scale, // 蒙版相对需求宽高的缩放\n x,\n y,\n width: w,\n height: h\n }\n },\n // 原图遮罩样式\n sourceImgShadeStyle() {\n const { sourceImgMasking, sourceImgContainer } = this\n const sic = sourceImgContainer\n const sim = sourceImgMasking\n const w =\n sim.width === sic.width ? sim.width : (sic.width - sim.width) / 2\n const h =\n sim.height === sic.height ? sim.height : (sic.height - sim.height) / 2\n return {\n width: w + 'px',\n height: h + 'px'\n }\n },\n previewStyle() {\n const { ratio, previewContainer } = this\n const pc = previewContainer\n let w = pc.width\n let h = pc.height\n const pcRatio = w / h\n if (ratio < pcRatio) {\n w = pc.height * ratio\n }\n if (ratio > pcRatio) {\n h = pc.width / ratio\n }\n return {\n width: w + 'px',\n height: h + 'px'\n }\n }\n },\n watch: {\n value(newValue) {\n if (newValue && this.loading !== 1) {\n this.reset()\n }\n }\n },\n created() {\n // 绑定按键esc隐藏此插件事件\n document.addEventListener('keyup', this.closeHandler)\n },\n destroyed() {\n document.removeEventListener('keyup', this.closeHandler)\n },\n methods: {\n // 点击波纹效果\n ripple(e) {\n effectRipple(e)\n },\n // 关闭控件\n off() {\n setTimeout(() => {\n this.$emit('input', false)\n this.$emit('close')\n if (this.step === 3 && this.loading === 2) {\n this.setStep(1)\n }\n }, 200)\n },\n // 设置步骤\n setStep(no) {\n // 延时是为了显示动画效果呢,哈哈哈\n setTimeout(() => {\n this.step = no\n }, 200)\n },\n /* 图片选择区域函数绑定\n ---------------------------------------------------------------*/\n preventDefault(e) {\n e.preventDefault()\n return false\n },\n handleClick(e) {\n if (this.loading !== 1) {\n if (e.target !== this.$refs.fileinput) {\n e.preventDefault()\n if (document.activeElement !== this.$refs) {\n this.$refs.fileinput.click()\n }\n }\n }\n },\n handleChange(e) {\n e.preventDefault()\n if (this.loading !== 1) {\n const files = e.target.files || e.dataTransfer.files\n this.reset()\n if (this.checkFile(files[0])) {\n this.setSourceImg(files[0])\n }\n }\n },\n /* ---------------------------------------------------------------*/\n // 检测选择的文件是否合适\n checkFile(file) {\n const { lang, maxSize } = this\n // 仅限图片\n if (file.type.indexOf('image') === -1) {\n this.hasError = true\n this.errorMsg = lang.error.onlyImg\n return false\n }\n // 超出大小\n if (file.size / 1024 > maxSize) {\n this.hasError = true\n this.errorMsg = lang.error.outOfSize + maxSize + 'kb'\n return false\n }\n return true\n },\n // 重置控件\n reset() {\n this.loading = 0\n this.hasError = false\n this.errorMsg = ''\n this.progress = 0\n },\n // 设置图片源\n setSourceImg(file) {\n const fr = new FileReader()\n fr.onload = e => {\n this.sourceImgUrl = fr.result\n this.startCrop()\n }\n fr.readAsDataURL(file)\n },\n // 剪裁前准备工作\n startCrop() {\n const {\n width,\n height,\n ratio,\n scale,\n sourceImgUrl,\n sourceImgMasking,\n lang\n } = this\n const sim = sourceImgMasking\n const img = new Image()\n img.src = sourceImgUrl\n img.onload = () => {\n const nWidth = img.naturalWidth\n const nHeight = img.naturalHeight\n const nRatio = nWidth / nHeight\n let w = sim.width\n let h = sim.height\n let x = 0\n let y = 0\n // 图片像素不达标\n if (nWidth < width || nHeight < height) {\n this.hasError = true\n this.errorMsg = lang.error.lowestPx + width + '*' + height\n return false\n }\n if (ratio > nRatio) {\n h = w / nRatio\n y = (sim.height - h) / 2\n }\n if (ratio < nRatio) {\n w = h * nRatio\n x = (sim.width - w) / 2\n }\n scale.range = 0\n scale.x = x\n scale.y = y\n scale.width = w\n scale.height = h\n scale.degree = 0\n scale.minWidth = w\n scale.minHeight = h\n scale.maxWidth = nWidth * sim.scale\n scale.maxHeight = nHeight * sim.scale\n scale.naturalWidth = nWidth\n scale.naturalHeight = nHeight\n this.sourceImg = img\n this.createImg()\n this.setStep(2)\n }\n },\n // 鼠标按下图片准备移动\n imgStartMove(e) {\n e.preventDefault()\n // 支持触摸事件,则鼠标事件无效\n if (this.isSupportTouch && !e.targetTouches) {\n return false\n }\n const et = e.targetTouches ? e.targetTouches[0] : e\n const { sourceImgMouseDown, scale } = this\n const simd = sourceImgMouseDown\n simd.mX = et.screenX\n simd.mY = et.screenY\n simd.x = scale.x\n simd.y = scale.y\n simd.on = true\n },\n // 鼠标按下状态下移动,图片移动\n imgMove(e) {\n e.preventDefault()\n // 支持触摸事件,则鼠标事件无效\n if (this.isSupportTouch && !e.targetTouches) {\n return false\n }\n const et = e.targetTouches ? e.targetTouches[0] : e\n const {\n sourceImgMouseDown: { on, mX, mY, x, y },\n scale,\n sourceImgMasking\n } = this\n const sim = sourceImgMasking\n const nX = et.screenX\n const nY = et.screenY\n const dX = nX - mX\n const dY = nY - mY\n let rX = x + dX\n let rY = y + dY\n if (!on) return\n if (rX > 0) {\n rX = 0\n }\n if (rY > 0) {\n rY = 0\n }\n if (rX < sim.width - scale.width) {\n rX = sim.width - scale.width\n }\n if (rY < sim.height - scale.height) {\n rY = sim.height - scale.height\n }\n scale.x = rX\n scale.y = rY\n },\n // 按钮按下开始向右旋转\n startRotateRight(e) {\n const { scale } = this\n scale.rotateRight = true\n const rotate = () => {\n if (scale.rotateRight) {\n const degree = ++scale.degree\n this.createImg(degree)\n setTimeout(function() {\n rotate()\n }, 60)\n }\n }\n rotate()\n },\n // 按钮按下开始向左旋转\n startRotateLeft(e) {\n const { scale } = this\n scale.rotateLeft = true\n const rotate = () => {\n if (scale.rotateLeft) {\n const degree = --scale.degree\n this.createImg(degree)\n setTimeout(function() {\n rotate()\n }, 60)\n }\n }\n rotate()\n },\n // 停止旋转\n endRotate() {\n const { scale } = this\n scale.rotateLeft = false\n scale.rotateRight = false\n },\n // 按钮按下开始放大\n startZoomAdd(e) {\n const { scale } = this\n scale.zoomAddOn = true\n const zoom = () => {\n if (scale.zoomAddOn) {\n const range = scale.range >= 100 ? 100 : ++scale.range\n this.zoomImg(range)\n setTimeout(function() {\n zoom()\n }, 60)\n }\n }\n zoom()\n },\n // 按钮松开或移开取消放大\n endZoomAdd(e) {\n this.scale.zoomAddOn = false\n },\n // 按钮按下开始缩小\n startZoomSub(e) {\n const { scale } = this\n scale.zoomSubOn = true\n const zoom = () => {\n if (scale.zoomSubOn) {\n const range = scale.range <= 0 ? 0 : --scale.range\n this.zoomImg(range)\n setTimeout(function() {\n zoom()\n }, 60)\n }\n }\n zoom()\n },\n // 按钮松开或移开取消缩小\n endZoomSub(e) {\n const { scale } = this\n scale.zoomSubOn = false\n },\n zoomChange(e) {\n this.zoomImg(e.target.value)\n },\n // 缩放原图\n zoomImg(newRange) {\n const { sourceImgMasking, scale } = this\n const {\n maxWidth,\n maxHeight,\n minWidth,\n minHeight,\n width,\n height,\n x,\n y\n } = scale\n const sim = sourceImgMasking\n // 蒙版宽高\n const sWidth = sim.width\n const sHeight = sim.height\n // 新宽高\n const nWidth = minWidth + ((maxWidth - minWidth) * newRange) / 100\n const nHeight = minHeight + ((maxHeight - minHeight) * newRange) / 100\n // 新坐标(根据蒙版中心点缩放)\n let nX = sWidth / 2 - (nWidth / width) * (sWidth / 2 - x)\n let nY = sHeight / 2 - (nHeight / height) * (sHeight / 2 - y)\n // 判断新坐标是否超过蒙版限制\n if (nX > 0) {\n nX = 0\n }\n if (nY > 0) {\n nY = 0\n }\n if (nX < sWidth - nWidth) {\n nX = sWidth - nWidth\n }\n if (nY < sHeight - nHeight) {\n nY = sHeight - nHeight\n }\n // 赋值处理\n scale.x = nX\n scale.y = nY\n scale.width = nWidth\n scale.height = nHeight\n scale.range = newRange\n setTimeout(() => {\n if (scale.range === newRange) {\n this.createImg()\n }\n }, 300)\n },\n // 生成需求图片\n createImg(e) {\n const {\n mime,\n sourceImg,\n scale: { x, y, width, height, degree },\n sourceImgMasking: { scale }\n } = this\n const canvas = this.$refs.canvas\n const ctx = canvas.getContext('2d')\n if (e) {\n // 取消鼠标按下移动状态\n this.sourceImgMouseDown.on = false\n }\n canvas.width = this.width\n canvas.height = this.height\n ctx.clearRect(0, 0, this.width, this.height)\n // 将透明区域设置为白色底边\n ctx.fillStyle = '#fff'\n ctx.fillRect(0, 0, this.width, this.height)\n ctx.translate(this.width * 0.5, this.height * 0.5)\n ctx.rotate((Math.PI * degree) / 180)\n ctx.translate(-this.width * 0.5, -this.height * 0.5)\n ctx.drawImage(\n sourceImg,\n x / scale,\n y / scale,\n width / scale,\n height / scale\n )\n this.createImgUrl = canvas.toDataURL(mime)\n },\n prepareUpload() {\n const { url, createImgUrl, field, ki } = this\n this.$emit('crop-success', createImgUrl, field, ki)\n if (typeof url === 'string' && url) {\n this.upload()\n } else {\n this.off()\n }\n },\n // 上传图片\n upload() {\n const {\n lang,\n imgFormat,\n mime,\n url,\n params,\n field,\n ki,\n createImgUrl\n } = this\n const fmData = new FormData()\n fmData.append(\n field,\n data2blob(createImgUrl, mime),\n field + '.' + imgFormat\n )\n // 添加其他参数\n if (typeof params === 'object' && params) {\n Object.keys(params).forEach(k => {\n fmData.append(k, params[k])\n })\n }\n // 监听进度回调\n // const uploadProgress = (event) => {\n // if (event.lengthComputable) {\n // this.progress = 100 * Math.round(event.loaded) / event.total\n // }\n // }\n // 上传文件\n this.reset()\n this.loading = 1\n this.setStep(3)\n request({\n url,\n method: 'post',\n data: fmData\n })\n .then(resData => {\n this.loading = 2\n this.$emit('crop-upload-success', resData.data)\n })\n .catch(err => {\n if (this.value) {\n this.loading = 3\n this.hasError = true\n this.errorMsg = lang.fail\n this.$emit('crop-upload-fail', err, field, ki)\n }\n })\n },\n closeHandler(e) {\n if (this.value && (e.key === 'Escape' || e.keyCode === 27)) {\n this.off()\n }\n }\n }\n}\n</script>\n\n<style lang=\"scss\">\n@charset \"UTF-8\";\n@-webkit-keyframes vicp_progress {\n 0% {\n background-position-y: 0;\n }\n 100% {\n background-position-y: 40px;\n }\n}\n@keyframes vicp_progress {\n 0% {\n background-position-y: 0;\n }\n 100% {\n background-position-y: 40px;\n }\n}\n@-webkit-keyframes vicp {\n 0% {\n opacity: 0;\n -webkit-transform: scale(0) translatey(-60px);\n transform: scale(0) translatey(-60px);\n }\n 100% {\n opacity: 1;\n -webkit-transform: scale(1) translatey(0);\n transform: scale(1) translatey(0);\n }\n}\n@keyframes vicp {\n 0% {\n opacity: 0;\n -webkit-transform: scale(0) translatey(-60px);\n transform: scale(0) translatey(-60px);\n }\n 100% {\n opacity: 1;\n -webkit-transform: scale(1) translatey(0);\n transform: scale(1) translatey(0);\n }\n}\n.vue-image-crop-upload {\n position: fixed;\n display: block;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n z-index: 10000;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n width: 100%;\n height: 100%;\n background-color: rgba(0, 0, 0, 0.65);\n -webkit-tap-highlight-color: transparent;\n -moz-tap-highlight-color: transparent;\n}\n.vue-image-crop-upload .vicp-wrap {\n -webkit-box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.23);\n box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.23);\n position: fixed;\n display: block;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n z-index: 10000;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n margin: auto;\n width: 600px;\n height: 330px;\n padding: 25px;\n background-color: #fff;\n border-radius: 2px;\n -webkit-animation: vicp 0.12s ease-in;\n animation: vicp 0.12s ease-in;\n}\n.vue-image-crop-upload .vicp-wrap .vicp-close {\n position: absolute;\n right: -30px;\n top: -30px;\n}\n.vue-image-crop-upload .vicp-wrap .vicp-close .vicp-icon4 {\n position: relative;\n display: block;\n width: 30px;\n height: 30px;\n cursor: pointer;\n -webkit-transition: -webkit-transform 0.18s;\n transition: -webkit-transform 0.18s;\n transition: transform 0.18s;\n transition: transform 0.18s, -webkit-transform 0.18s;\n -webkit-transform: rotate(0);\n -ms-transform: rotate(0);\n transform: rotate(0);\n}\n.vue-image-crop-upload .vicp-wrap .vicp-close .vicp-icon4::after,\n.vue-image-crop-upload .vicp-wrap .vicp-close .vicp-icon4::before {\n -webkit-box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.23);\n box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.23);\n content: \"\";\n position: absolute;\n top: 12px;\n left: 4px;\n width: 20px;\n height: 3px;\n -webkit-transform: rotate(45deg);\n -ms-transform: rotate(45deg);\n transform: rotate(45deg);\n background-color: #fff;\n}\n.vue-image-crop-upload .vicp-wrap .vicp-close .vicp-icon4::after {\n -webkit-transform: rotate(-45deg);\n -ms-transform: rotate(-45deg);\n transform: rotate(-45deg);\n}\n.vue-image-crop-upload .vicp-wrap .vicp-close .vicp-icon4:hover {\n -webkit-transform: rotate(90deg);\n -ms-transform: rotate(90deg);\n transform: rotate(90deg);\n}\n.vue-image-crop-upload .vicp-wrap .vicp-step1 .vicp-drop-area {\n position: relative;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n padding: 35px;\n height: 170px;\n background-color: rgba(0, 0, 0, 0.03);\n text-align: center;\n border: 1px dashed rgba(0, 0, 0, 0.08);\n overflow: hidden;\n}\n.vue-image-crop-upload .vicp-wrap .vicp-step1 .vicp-drop-area .vicp-icon1 {\n display: block;\n margin: 0 auto 6px;\n width: 42px;\n height: 42px;\n overflow: hidden;\n}\n.vue-image-crop-upload\n .vicp-wrap\n .vicp-step1\n .vicp-drop-area\n .vicp-icon1\n .vicp-icon1-arrow {\n display: block;\n margin: 0 auto;\n width: 0;\n height: 0;\n border-bottom: 14.7px solid rgba(0, 0, 0, 0.3);\n border-left: 14.7px solid transparent;\n border-right: 14.7px solid transparent;\n}\n.vue-image-crop-upload\n .vicp-wrap\n .vicp-step1\n .vicp-drop-area\n .vicp-icon1\n .vicp-icon1-body {\n display: block;\n width: 12.6px;\n height: 14.7px;\n margin: 0 auto;\n background-color: rgba(0, 0, 0, 0.3);\n}\n.vue-image-crop-upload\n .vicp-wrap\n .vicp-step1\n .vicp-drop-area\n .vicp-icon1\n .vicp-icon1-bottom {\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n display: block;\n height: 12.6px;\n border: 6px solid rgba(0, 0, 0, 0.3);\n border-top: none;\n}\n.vue-image-crop-upload .vicp-wrap .vicp-step1 .vicp-drop-area .vicp-hint {\n display: block;\n padding: 15px;\n font-size: 14px;\n color: #666;\n line-height: 30px;\n}\n.vue-image-crop-upload\n .vicp-wrap\n .vicp-step1\n .vicp-drop-area\n .vicp-no-supported-hint {\n display: block;\n position: absolute;\n top: 0;\n left: 0;\n padding: 30px;\n width: 100%;\n height: 60px;\n line-height: 30px;\n background-color: #eee;\n text-align: center;\n color: #666;\n font-size: 14px;\n}\n.vue-image-crop-upload .vicp-wrap .vicp-step1 .vicp-drop-area:hover {\n cursor: pointer;\n border-color: rgba(0, 0, 0, 0.1);\n background-color: rgba(0, 0, 0, 0.05);\n}\n.vue-image-crop-upload .vicp-wrap .vicp-step2 .vicp-crop {\n overflow: hidden;\n}\n.vue-image-crop-upload .vicp-wrap .vicp-step2 .vicp-crop .vicp-crop-left {\n float: left;\n}\n.vue-image-crop-upload\n .vicp-wrap\n .vicp-step2\n .vicp-crop\n .vicp-crop-left\n .vicp-img-container {\n position: relative;\n display: block;\n width: 240px;\n height: 180px;\n background-color: #e5e5e0;\n overflow: hidden;\n}\n.vue-image-crop-upload\n .vicp-wrap\n .vicp-step2\n .vicp-crop\n .vicp-crop-left\n .vicp-img-container\n .vicp-img {\n position: absolute;\n display: block;\n cursor: move;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n.vue-image-crop-upload\n .vicp-wrap\n .vicp-step2\n .vicp-crop\n .vicp-crop-left\n .vicp-img-container\n .vicp-img-shade {\n -webkit-box-shadow: 0 2px 6px 0 rgba(0, 0, 0, 0.18);\n box-shadow: 0 2px 6px 0 rgba(0, 0, 0, 0.18);\n position: absolute;\n background-color: rgba(241, 242, 243, 0.8);\n}\n.vue-image-crop-upload\n .vicp-wrap\n .vicp-step2\n .vicp-crop\n .vicp-crop-left\n .vicp-img-container\n .vicp-img-shade.vicp-img-shade-1 {\n top: 0;\n left: 0;\n}\n.vue-image-crop-upload\n .vicp-wrap\n .vicp-step2\n .vicp-crop\n .vicp-crop-left\n .vicp-img-container\n .vicp-img-shade.vicp-img-shade-2 {\n bottom: 0;\n right: 0;\n}\n.vue-image-crop-upload\n .vicp-wrap\n .vicp-step2\n .vicp-crop\n .vicp-crop-left\n .vicp-rotate {\n position: relative;\n width: 240px;\n height: 18px;\n}\n.vue-image-crop-upload\n .vicp-wrap\n .vicp-step2\n .vicp-crop\n .vicp-crop-left\n .vicp-rotate\n i {\n display: block;\n width: 18px;\n height: 18px;\n border-radius: 100%;\n line-height: 18px;\n text-align: center;\n font-size: 12px;\n font-weight: bold;\n background-color: rgba(0, 0, 0, 0.08);\n color: #fff;\n overflow: hidden;\n}\n.vue-image-crop-upload\n .vicp-wrap\n .vicp-step2\n .vicp-crop\n .vicp-crop-left\n .vicp-rotate\n i:hover {\n -webkit-box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.12);\n box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.12);\n cursor: pointer;\n background-color: rgba(0, 0, 0, 0.14);\n}\n.vue-image-crop-upload\n .vicp-wrap\n .vicp-step2\n .vicp-crop\n .vicp-crop-left\n .vicp-rotate\n i:first-child {\n float: left;\n}\n.vue-image-crop-upload\n .vicp-wrap\n .vicp-step2\n .vicp-crop\n .vicp-crop-left\n .vicp-rotate\n i:last-child {\n float: right;\n}\n.vue-image-crop-upload\n .vicp-wrap\n .vicp-step2\n .vicp-crop\n .vicp-crop-left\n .vicp-range {\n position: relative;\n margin: 30px 0 10px 0;\n width: 240px;\n height: 18px;\n}\n.vue-image-crop-upload\n .vicp-wrap\n .vicp-step2\n .vicp-crop\n .vicp-crop-left\n .vicp-range\n .vicp-icon5,\n.vue-image-crop-upload\n .vicp-wrap\n .vicp-step2\n .vicp-crop\n .vicp-crop-left\n .vicp-range\n .vicp-icon6 {\n position: absolute;\n top: 0;\n width: 18px;\n height: 18px;\n border-radius: 100%;\n background-color: rgba(0, 0, 0, 0.08);\n}\n.vue-image-crop-upload\n .vicp-wrap\n .vicp-step2\n .vicp-crop\n .vicp-crop-left\n .vicp-range\n .vicp-icon5:hover,\n.vue-image-crop-upload\n .vicp-wrap\n .vicp-step2\n .vicp-crop\n .vicp-crop-left\n .vicp-range\n .vicp-icon6:hover {\n -webkit-box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.12);\n box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.12);\n cursor: pointer;\n background-color: rgba(0, 0, 0, 0.14);\n}\n.vue-image-crop-upload\n .vicp-wrap\n .vicp-step2\n .vicp-crop\n .vicp-crop-left\n .vicp-range\n .vicp-icon5 {\n left: 0;\n}\n.vue-image-crop-upload\n .vicp-wrap\n .vicp-step2\n .vicp-crop\n .vicp-crop-left\n .vicp-range\n .vicp-icon5::before {\n position: absolute;\n content: \"\";\n display: block;\n left: 3px;\n top: 8px;\n width: 12px;\n height: 2px;\n background-color: #fff;\n}\n.vue-image-crop-upload\n .vicp-wrap\n .vicp-step2\n .vicp-crop\n .vicp-crop-left\n .vicp-range\n .vicp-icon6 {\n right: 0;\n}\n.vue-image-crop-upload\n .vicp-wrap\n .vicp-step2\n .vicp-crop\n .vicp-crop-left\n .vicp-range\n .vicp-icon6::before {\n position: absolute;\n content: \"\";\n display: block;\n left: 3px;\n top: 8px;\n width: 12px;\n height: 2px;\n background-color: #fff;\n}\n.vue-image-crop-upload\n .vicp-wrap\n .vicp-step2\n .vicp-crop\n .vicp-crop-left\n .vicp-range\n .vicp-icon6::after {\n position: absolute;\n content: \"\";\n display: block;\n top: 3px;\n left: 8px;\n width: 2px;\n height: 12px;\n background-color: #fff;\n}\n.vue-image-crop-upload\n .vicp-wrap\n .vicp-step2\n .vicp-crop\n .vicp-crop-left\n .vicp-range\n input[type=\"range\"] {\n display: block;\n padding-top: 5px;\n margin: 0 auto;\n width: 180px;\n height: 8px;\n vertical-align: top;\n background: transparent;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n cursor: pointer;\n /* 滑块\n ---------------------------------------------------------------*/\n /* 轨道\n ---------------------------------------------------------------*/\n}\n.vue-image-crop-upload\n .vicp-wrap\n .vicp-step2\n .vicp-crop\n .vicp-crop-left\n .vicp-range\n input[type=\"range\"]:focus {\n outline: none;\n}\n.vue-image-crop-upload\n .vicp-wrap\n .vicp-step2\n .vicp-crop\n .vicp-crop-left\n .vicp-range\n input[type=\"range\"]::-webkit-slider-thumb {\n -webkit-box-shadow: 0 2px 6px 0 rgba(0, 0, 0, 0.18);\n box-shadow: 0 2px 6px 0 rgba(0, 0, 0, 0.18);\n -webkit-appearance: none;\n appearance: none;\n margin-top: -3px;\n width: 12px;\n height: 12px;\n background-color: #61c091;\n border-radius: 100%;\n border: none;\n -webkit-transition: 0.2s;\n transition: 0.2s;\n}\n.vue-image-crop-upload\n .vicp-wrap\n .vicp-step2\n .vicp-crop\n .vicp-crop-left\n .vicp-range\n input[type=\"range\"]::-moz-range-thumb {\n box-shadow: 0 2px 6px 0 rgba(0, 0, 0, 0.18);\n -moz-appearance: none;\n appearance: none;\n width: 12px;\n height: 12px;\n background-color: #61c091;\n border-radius: 100%;\n border: none;\n -webkit-transition: 0.2s;\n transition: 0.2s;\n}\n.vue-image-crop-upload\n .vicp-wrap\n .vicp-step2\n .vicp-crop\n .vicp-crop-left\n .vicp-range\n input[type=\"range\"]::-ms-thumb {\n box-shadow: 0 2px 6px 0 rgba(0, 0, 0, 0.18);\n appearance: none;\n width: 12px;\n height: 12px;\n background-color: #61c091;\n border: none;\n border-radius: 100%;\n -webkit-transition: 0.2s;\n transition: 0.2s;\n}\n.vue-image-crop-upload\n .vicp-wrap\n .vicp-step2\n .vicp-crop\n .vicp-crop-left\n .vicp-range\n input[type=\"range\"]:active::-moz-range-thumb {\n box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.23);\n width: 14px;\n height: 14px;\n}\n.vue-image-crop-upload\n .vicp-wrap\n .vicp-step2\n .vicp-crop\n .vicp-crop-left\n .vicp-range\n input[type=\"range\"]:active::-ms-thumb {\n box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.23);\n width: 14px;\n height: 14px;\n}\n.vue-image-crop-upload\n .vicp-wrap\n .vicp-step2\n .vicp-crop\n .vicp-crop-left\n .vicp-range\n input[type=\"range\"]:active::-webkit-slider-thumb {\n -webkit-box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.23);\n box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.23);\n margin-top: -4px;\n width: 14px;\n height: 14px;\n}\n.vue-image-crop-upload\n .vicp-wrap\n .vicp-step2\n .vicp-crop\n .vicp-crop-left\n .vicp-range\n input[type=\"range\"]::-webkit-slider-runnable-track {\n -webkit-box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.12);\n box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.12);\n width: 100%;\n height: 6px;\n cursor: pointer;\n border-radius: 2px;\n border: none;\n background-color: rgba(68, 170, 119, 0.3);\n}\n.vue-image-crop-upload\n .vicp-wrap\n .vicp-step2\n .vicp-crop\n .vicp-crop-left\n .vicp-range\n input[type=\"range\"]::-moz-range-track {\n box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.12);\n width: 100%;\n height: 6px;\n cursor: pointer;\n border-radius: 2px;\n border: none;\n background-color: rgba(68, 170, 119, 0.3);\n}\n.vue-image-crop-upload\n .vicp-wrap\n .vicp-step2\n .vicp-crop\n .vicp-crop-left\n .vicp-range\n input[type=\"range\"]::-ms-track {\n box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.12);\n width: 100%;\n cursor: pointer;\n background: transparent;\n border-color: transparent;\n color: transparent;\n height: 6px;\n border-radius: 2px;\n border: none;\n}\n.vue-image-crop-upload\n .vicp-wrap\n .vicp-step2\n .vicp-crop\n .vicp-crop-left\n .vicp-range\n input[type=\"range\"]::-ms-fill-lower {\n background-color: rgba(68, 170, 119, 0.3);\n}\n.vue-image-crop-upload\n .vicp-wrap\n .vicp-step2\n .vicp-crop\n .vicp-crop-left\n .vicp-range\n input[type=\"range\"]::-ms-fill-upper {\n background-color: rgba(68, 170, 119, 0.15);\n}\n.vue-image-crop-upload\n .vicp-wrap\n .vicp-step2\n .vicp-crop\n .vicp-crop-left\n .vicp-range\n input[type=\"range\"]:focus::-webkit-slider-runnable-track {\n background-color: rgba(68, 170, 119, 0.5);\n}\n.vue-image-crop-upload\n .vicp-wrap\n .vicp-step2\n .vicp-crop\n .vicp-crop-left\n .vicp-range\n input[type=\"range\"]:focus::-moz-range-track {\n background-color: rgba(68, 170, 119, 0.5);\n}\n.vue-image-crop-upload\n .vicp-wrap\n .vicp-step2\n .vicp-crop\n .vicp-crop-left\n .vicp-range\n input[type=\"range\"]:focus::-ms-fill-lower {\n background-color: rgba(68, 170, 119, 0.45);\n}\n.vue-image-crop-upload\n .vicp-wrap\n .vicp-step2\n .vicp-crop\n .vicp-crop-left\n .vicp-range\n input[type=\"range\"]:focus::-ms-fill-upper {\n background-color: rgba(68, 170, 119, 0.25);\n}\n.vue-image-crop-upload .vicp-wrap .vicp-step2 .vicp-crop .vicp-crop-right {\n float: right;\n}\n.vue-image-crop-upload\n .vicp-wrap\n .vicp-step2\n .vicp-crop\n .vicp-crop-right\n .vicp-preview {\n height: 150px;\n overflow: hidden;\n}\n.vue-image-crop-upload\n .vicp-wrap\n .vicp-step2\n .vicp-crop\n .vicp-crop-right\n .vicp-preview\n .vicp-preview-item {\n position: relative;\n padding: 5px;\n width: 100px;\n height: 100px;\n float: left;\n margin-right: 16px;\n}\n.vue-image-crop-upload\n .vicp-wrap\n .vicp-step2\n .vicp-crop\n .vicp-crop-right\n .vicp-preview\n .vicp-preview-item\n span {\n position: absolute;\n bottom: -30px;\n width: 100%;\n font-size: 14px;\n color: #bbb;\n display: block;\n text-align: center;\n}\n.vue-image-crop-upload\n .vicp-wrap\n .vicp-step2\n .vicp-crop\n .vicp-crop-right\n .vicp-preview\n .vicp-preview-item\n img {\n position: absolute;\n display: block;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n margin: auto;\n padding: 3px;\n background-color: #fff;\n border: 1px solid rgba(0, 0, 0, 0.15);\n overflow: hidden;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n.vue-image-crop-upload\n .vicp-wrap\n .vicp-step2\n .vicp-crop\n .vicp-crop-right\n .vicp-preview\n .vicp-preview-item.vicp-preview-item-circle {\n margin-right: 0;\n}\n.vue-image-crop-upload\n .vicp-wrap\n .vicp-step2\n .vicp-crop\n .vicp-crop-right\n .vicp-preview\n .vicp-preview-item.vicp-preview-item-circle\n img {\n border-radius: 100%;\n}\n.vue-image-crop-upload .vicp-wrap .vicp-step3 .vicp-upload {\n position: relative;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n padding: 35px;\n height: 170px;\n background-color: rgba(0, 0, 0, 0.03);\n text-align: center;\n border: 1px dashed #ddd;\n}\n.vue-image-crop-upload .vicp-wrap .vicp-step3 .vicp-upload .vicp-loading {\n display: block;\n padding: 15px;\n font-size: 16px;\n color: #999;\n line-height: 30px;\n}\n.vue-image-crop-upload .vicp-wrap .vicp-step3 .vicp-upload .vicp-progress-wrap {\n margin-top: 12px;\n background-color: rgba(0, 0, 0, 0.08);\n border-radius: 3px;\n}\n.vue-image-crop-upload\n .vicp-wrap\n .vicp-step3\n .vicp-upload\n .vicp-progress-wrap\n .vicp-progress {\n position: relative;\n display: block;\n height: 5px;\n border-radius: 3px;\n background-color: #4a7;\n -webkit-box-shadow: 0 2px 6px 0 rgba(68, 170, 119, 0.3);\n box-shadow: 0 2px 6px 0 rgba(68, 170, 119, 0.3);\n -webkit-transition: width 0.15s linear;\n transition: width 0.15s linear;\n background-image: -webkit-linear-gradient(\n 135deg,\n rgba(255, 255, 255, 0.2) 25%,\n transparent 25%,\n transparent 50%,\n rgba(255, 255, 255, 0.2) 50%,\n rgba(255, 255, 255, 0.2) 75%,\n transparent 75%,\n transparent\n );\n background-image: linear-gradient(\n -45deg,\n rgba(255, 255, 255, 0.2) 25%,\n transparent 25%,\n transparent 50%,\n rgba(255, 255, 255, 0.2) 50%,\n rgba(255, 255, 255, 0.2) 75%,\n transparent 75%,\n transparent\n );\n background-size: 40px 40px;\n -webkit-animation: vicp_progress 0.5s linear infinite;\n animation: vicp_progress 0.5s linear infinite;\n}\n.vue-image-crop-upload\n .vicp-wrap\n .vicp-step3\n .vicp-upload\n .vicp-progress-wrap\n .vicp-progress::after {\n content: \"\";\n position: absolute;\n display: block;\n top: -3px;\n right: -3px;\n width: 9px;\n height: 9px;\n border: 1px solid rgba(245, 246, 247, 0.7);\n -webkit-box-shadow: 0 1px 4px 0 rgba(68, 170, 119, 0.7);\n box-shadow: 0 1px 4px 0 rgba(68, 170, 119, 0.7);\n border-radius: 100%;\n background-color: #4a7;\n}\n.vue-image-crop-upload .vicp-wrap .vicp-step3 .vicp-upload .vicp-error,\n.vue-image-crop-upload .vicp-wrap .vicp-step3 .vicp-upload .vicp-success {\n height: 100px;\n line-height: 100px;\n}\n.vue-image-crop-upload .vicp-wrap .vicp-operate {\n position: absolute;\n right: 20px;\n bottom: 20px;\n}\n.vue-image-crop-upload .vicp-wrap .vicp-operate a {\n position: relative;\n float: left;\n display: block;\n margin-left: 10px;\n width: 100px;\n height: 36px;\n line-height: 36px;\n text-align: center;\n cursor: pointer;\n font-size: 14px;\n color: #4a7;\n border-radius: 2px;\n overflow: hidden;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n.vue-image-crop-upload .vicp-wrap .vicp-operate a:hover {\n background-color: rgba(0, 0, 0, 0.03);\n}\n.vue-image-crop-upload .vicp-wrap .vicp-error,\n.vue-image-crop-upload .vicp-wrap .vicp-success {\n display: block;\n font-size: 14px;\n line-height: 24px;\n height: 24px;\n color: #d10;\n text-align: center;\n vertical-align: top;\n}\n.vue-image-crop-upload .vicp-wrap .vicp-success {\n color: #4a7;\n}\n.vue-image-crop-upload .vicp-wrap .vicp-icon3 {\n position: relative;\n display: inline-block;\n width: 20px;\n height: 20px;\n top: 4px;\n}\n.vue-image-crop-upload .vicp-wrap .vicp-icon3::after {\n position: absolute;\n top: 3px;\n left: 6px;\n width: 6px;\n height: 10px;\n border-width: 0 2px 2px 0;\n border-color: #4a7;\n border-style: solid;\n -webkit-transform: rotate(45deg);\n -ms-transform: rotate(45deg);\n transform: rotate(45deg);\n content: \"\";\n}\n.vue-image-crop-upload .vicp-wrap .vicp-icon2 {\n position: relative;\n display: inline-block;\n width: 20px;\n height: 20px;\n top: 4px;\n}\n.vue-image-crop-upload .vicp-wrap .vicp-icon2::after,\n.vue-image-crop-upload .vicp-wrap .vicp-icon2::before {\n content: \"\";\n position: absolute;\n top: 9px;\n left: 4px;\n width: 13px;\n height: 2px;\n background-color: #d10;\n -webkit-transform: rotate(45deg);\n -ms-transform: rotate(45deg);\n transform: rotate(45deg);\n}\n.vue-image-crop-upload .vicp-wrap .vicp-icon2::after {\n -webkit-transform: rotate(-45deg);\n -ms-transform: rotate(-45deg);\n transform: rotate(-45deg);\n}\n.e-ripple {\n position: absolute;\n border-radius: 100%;\n background-color: rgba(0, 0, 0, 0.15);\n background-clip: padding-box;\n pointer-events: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n -webkit-transform: scale(0);\n -ms-transform: scale(0);\n transform: scale(0);\n opacity: 1;\n}\n.e-ripple.z-active {\n opacity: 0;\n -webkit-transform: scale(2);\n -ms-transform: scale(2);\n transform: scale(2);\n -webkit-transition: opacity 1.2s ease-out, -webkit-transform 0.6s ease-out;\n transition: opacity 1.2s ease-out, -webkit-transform 0.6s ease-out;\n transition: opacity 1.2s ease-out, transform 0.6s ease-out;\n transition: opacity 1.2s ease-out, transform 0.6s ease-out,\n -webkit-transform 0.6s ease-out;\n}\n</style>\n"],"mappings":"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","ignoreList":[]}]}