| 1 |
- {"remainingRequest":"C:\\Users\\Administrator\\Desktop\\crmeb5.0\\template\\admin\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!C:\\Users\\Administrator\\Desktop\\crmeb5.0\\template\\admin\\src\\pages\\kefu\\index.vue?vue&type=script&lang=js","dependencies":[{"path":"C:\\Users\\Administrator\\Desktop\\crmeb5.0\\template\\admin\\src\\pages\\kefu\\index.vue","mtime":1761185180097},{"path":"C:\\Users\\Administrator\\Desktop\\crmeb5.0\\template\\admin\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"C:\\Users\\Administrator\\Desktop\\crmeb5.0\\template\\admin\\node_modules\\babel-loader\\lib\\index.js","mtime":456789000000},{"path":"C:\\Users\\Administrator\\Desktop\\crmeb5.0\\template\\admin\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"C:\\Users\\Administrator\\Desktop\\crmeb5.0\\template\\admin\\node_modules\\vue-loader\\lib\\index.js","mtime":499162500000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:DQppbXBvcnQgeyBBY2NvdW50TG9naW4sIGxvZ2luSW5mb0FwaSwgZ2V0U2FuQ29kZUtleSwgc2NhblN0YXR1cywga2VmdUNvbmZpZyB9IGZyb20gJ0AvYXBpL2tlZnUnOw0KaW1wb3J0IG1peGlucyBmcm9tICcuLi9hY2NvdW50L21peGlucyc7DQppbXBvcnQgU2V0dGluZyBmcm9tICdAL3NldHRpbmcnOw0KaW1wb3J0IHV0aWwgZnJvbSAnQC9saWJzL3V0aWwnOw0KaW1wb3J0IFFSQ29kZSBmcm9tICdxcmNvZGVqczInOw0KaW1wb3J0IHsgZ2V0Q29va2llcywgcmVtb3ZlQ29va2llcywgc2V0Q29va2llcyB9IGZyb20gJ0AvbGlicy91dGlsJzsNCmV4cG9ydCBkZWZhdWx0IHsNCiAgbWl4aW5zOiBbbWl4aW5zXSwNCiAgZGF0YSgpIHsNCiAgICByZXR1cm4gew0KICAgICAgZnVsbFdpZHRoOiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgsDQogICAgICBzd2lwZXJPcHRpb246IHsNCiAgICAgICAgcGFnaW5hdGlvbjogJy5zd2lwZXItcGFnaW5hdGlvbicsDQogICAgICAgIGF1dG9wbGF5OiB0cnVlLA0KICAgICAgfSwNCiAgICAgIG1vZGFsczogZmFsc2UsDQogICAgICBhdXRvTG9naW46IHRydWUsDQogICAgICBpbWdjb2RlOiAnJywNCiAgICAgIGZvcm1JbmxpbmU6IHsNCiAgICAgICAgdXNlcm5hbWU6ICcnLA0KICAgICAgICBwYXNzd29yZDogJycsDQogICAgICAgIGNvZGU6ICcnLA0KICAgICAgfSwNCiAgICAgIHJ1bGVJbmxpbmU6IHsNCiAgICAgICAgdXNlcm5hbWU6IFt7IHJlcXVpcmVkOiB0cnVlLCBtZXNzYWdlOiAn6K+36L6T5YWl55So5oi35ZCNJywgdHJpZ2dlcjogJ2JsdXInIH1dLA0KICAgICAgICBwYXNzd29yZDogW3sgcmVxdWlyZWQ6IHRydWUsIG1lc3NhZ2U6ICfor7fovpPlhaXlr4bnoIEnLCB0cmlnZ2VyOiAnYmx1cicgfV0sDQogICAgICAgIGNvZGU6IFt7IHJlcXVpcmVkOiB0cnVlLCBtZXNzYWdlOiAn6K+36L6T5YWl6aqM6K+B56CBJywgdHJpZ2dlcjogJ2JsdXInIH1dLA0KICAgICAgfSwNCiAgICAgIGVycm9yTnVtOiAwLA0KICAgICAgamlnc2F3OiBudWxsLA0KICAgICAgbG9naW5fbG9nbzogJycsDQogICAgICBzd2lwZXJMaXN0OiBbXSwNCiAgICAgIGRlZmF1bHRTd2lwZXJMaXN0OiByZXF1aXJlKCdAL2Fzc2V0cy9pbWFnZXMvc3cuanBnJyksDQogICAgICBsb2dpblR5cGU6IDAsIC8vIDAg6LSm5Y+3IDEg5omr56CBDQogICAgICBjb2RlS2V5OiAnJywNCiAgICAgIHNjYW5UaW1lOiAnJywNCiAgICAgIHJ4cGlyZWQ6IGZhbHNlLCAvLyDmiavnoIHmmK/lkKbov4fmnJ8NCiAgICAgIGlzTW9iaWxlOiBmYWxzZSwNCiAgICAgIHZlcnNpb246ICcnLCAvL+eJiOacrOWPtw0KICAgICAgaXNTY2FuOiBmYWxzZSwNCiAgICAgIHRpbWVOdW06IDAsDQogICAgICBjb3B5cmlnaHQ6ICcnLA0KICAgICAgY29weXJpZ2h0SW1nOiByZXF1aXJlKCdAL2Fzc2V0cy9pbWFnZXMvbG9nby1kYXJrLnBuZycpLA0KICAgIH07DQogIH0sDQogIGNyZWF0ZWQoKSB7DQogICAga2VmdUNvbmZpZygpLnRoZW4oKHJlcykgPT4gew0KICAgICAgdGhpcy52ZXJzaW9uID0gcmVzLmRhdGEudmVyc2lvbjsNCiAgICAgIHRoaXMuY29weXJpZ2h0ID0gcmVzLmRhdGEuY29weXJpZ2h0Ow0KICAgICAgaWYgKHJlcy5kYXRhLnNpdGVfbmFtZSkgew0KICAgICAgICBkb2N1bWVudC50aXRsZSA9IHJlcy5kYXRhLnNpdGVfbmFtZTsNCiAgICAgIH0NCiAgICAgIGlmIChyZXMuZGF0YS5jb3B5cmlnaHRJbWcpIHsNCiAgICAgICAgdGhpcy5jb3B5cmlnaHRJbWcgPSByZXMuZGF0YS5jb3B5cmlnaHRJbWc7DQogICAgICB9DQogICAgfSk7DQogICAgdGhpcy5pc01vYmlsZSA9IHRoaXMuJHN0b3JlLnN0YXRlLm1lZGlhLmlzTW9iaWxlOw0KICAgIHZhciBfdGhpcyA9IHRoaXM7DQogICAgdG9wICE9IHdpbmRvdyAmJiAodG9wLmxvY2F0aW9uLmhyZWYgPSBsb2NhdGlvbi5ocmVmKTsNCiAgICBkb2N1bWVudC5vbmtleWRvd24gPSBmdW5jdGlvbiAoZSkgew0KICAgICAgaWYgKF90aGlzLiRyb3V0ZS5uYW1lID09PSAnbG9naW4nKSB7DQogICAgICAgIGxldCBrZXkgPSB3aW5kb3cuZXZlbnQua2V5Q29kZTsNCiAgICAgICAgaWYgKGtleSA9PT0gMTMpIHsNCiAgICAgICAgICBfdGhpcy5oYW5kbGVTdWJtaXQoJ2Zvcm1JbmxpbmUnKTsNCiAgICAgICAgfQ0KICAgICAgfQ0KICAgIH07DQogICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMuaGFuZGxlUmVzaXplKTsNCiAgfSwNCiAgd2F0Y2g6IHsNCiAgICBmdWxsV2lkdGgodmFsKSB7DQogICAgICAvLyDkuLrkuobpgb/lhY3popHnuYHop6blj5FyZXNpemXlh73mlbDlr7zoh7TpobXpnaLljaHpob/vvIzkvb/nlKjlrprml7blmagNCiAgICAgIGlmICghdGhpcy50aW1lcikgew0KICAgICAgICAvLyDkuIDml6bnm5HlkKzliLDnmoRzY3JlZW5XaWR0aOWAvOaUueWPmO+8jOWwseWwhuWFtumHjeaWsOi1i+e7mWRhdGHph4znmoRzY3JlZW5XaWR0aA0KICAgICAgICB0aGlzLnNjcmVlbldpZHRoID0gdmFsOw0KICAgICAgICB0aGlzLnRpbWVyID0gdHJ1ZTsNCiAgICAgICAgbGV0IHRoYXQgPSB0aGlzOw0KICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAvLyDmiZPljbBzY3JlZW5XaWR0aOWPmOWMlueahOWAvA0KICAgICAgICAgIHRoYXQudGltZXIgPSBmYWxzZTsNCiAgICAgICAgfSwgNDAwKTsNCiAgICAgIH0NCiAgICB9LA0KICAgICRyb3V0ZShuKSB7DQogICAgICB0aGlzLmNhcHRjaGFzKCk7DQogICAgfSwNCiAgfSwNCiAgbW91bnRlZDogZnVuY3Rpb24gKCkgew0KICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHt9KTsNCg0KICAgIHRoaXMuY2FwdGNoYXMoKTsNCiAgfSwNCiAgbWV0aG9kczogew0KICAgIC8vIOWIh+aNouaJq+eggQ0KICAgIGJpbmRTY2FuKCkgew0KICAgICAgaWYgKCF0aGlzLmlzU2Nhbikgew0KICAgICAgICB0aGlzLmlzU2NhbiA9IHRydWU7DQogICAgICAgIHRoaXMuZ2V0U2FuQ29kZUtleSgpOw0KICAgICAgfQ0KICAgICAgdGhpcy5sb2dpblR5cGUgPSAxOw0KICAgIH0sDQogICAgLy8g55Sf5oiQ5LqM57u056CBDQogICAgY3JlYXRRckNvZGUoKSB7DQogICAgICBsZXQgdXJsID0gYCR7d2luZG93LmxvY2F0aW9uLnByb3RvY29sfS8vJHt3aW5kb3cubG9jYXRpb24uaG9zdH0vcGFnZXMvdXNlcnMvc2Nhbl9sb2dpbi9pbmRleD9rZXk9JHt0aGlzLmNvZGVLZXl9YDsNCiAgICAgIHZhciBxcmNvZGUgPSBuZXcgUVJDb2RlKHRoaXMuJHJlZnMucXJDb2RlVXJsLCB7DQogICAgICAgIHRleHQ6IHVybCwgLy8g6ZyA6KaB6L2s5o2i5Li65LqM57u056CB55qE5YaF5a65DQogICAgICAgIHdpZHRoOiAxNjAsDQogICAgICAgIGhlaWdodDogMTYwLA0KICAgICAgICBjb2xvckRhcms6ICcjMDAwMDAwJywNCiAgICAgICAgY29sb3JMaWdodDogJyNmZmZmZmYnLA0KICAgICAgICBjb3JyZWN0TGV2ZWw6IFFSQ29kZS5Db3JyZWN0TGV2ZWwuSCwNCiAgICAgIH0pOw0KICAgIH0sDQogICAgLy8g5YWz6Zet5qih5oCB5qGGDQogICAgY2xvc2VNb2RlbCgpIHsNCiAgICAgIEFjY291bnRMb2dpbih7DQogICAgICAgIGFjY291bnQ6IHRoaXMuZm9ybUlubGluZS51c2VybmFtZSwNCiAgICAgICAgcGFzc3dvcmQ6IHRoaXMuZm9ybUlubGluZS5wYXNzd29yZCwNCiAgICAgICAgaW1nY29kZTogdGhpcy5mb3JtSW5saW5lLmNvZGUsDQogICAgICB9KQ0KICAgICAgICAudGhlbihhc3luYyAocmVzKSA9PiB7DQogICAgICAgICAgbGV0IGV4cGlyZXMgPSB0aGlzLmdldEV4cGlyZXNUaW1lKHJlcy5kYXRhLmV4cF90aW1lKTsNCiAgICAgICAgICAvLyDorrDlvZXnlKjmiLfnmbvlvZXkv6Hmga8NCiAgICAgICAgICBzZXRDb29raWVzKCdrZWZ1X3V1aWQnLCByZXMuZGF0YS5rZWZ1SW5mby51aWQsIGV4cGlyZXMpOw0KICAgICAgICAgIHNldENvb2tpZXMoJ2tlZnVfdG9rZW4nLCByZXMuZGF0YS50b2tlbiwgZXhwaXJlcyk7DQogICAgICAgICAgc2V0Q29va2llcygna2VmdV9leHBpcmVzX3RpbWUnLCByZXMuZGF0YS5leHBfdGltZSwgZXhwaXJlcyk7DQogICAgICAgICAgc2V0Q29va2llcygna2VmdUluZm8nLCByZXMuZGF0YS5rZWZ1SW5mbywgZXhwaXJlcyk7DQoNCiAgICAgICAgICAvLyDorrDlvZXnlKjmiLfkv6Hmga8NCiAgICAgICAgICB0aGlzLiRzdG9yZS5jb21taXQoJ2tlZnUvc2V0SW5mbycsIHJlcy5kYXRhLmtlZnVJbmZvKTsNCg0KICAgICAgICAgIGlmICh0aGlzLiRzdG9yZS5zdGF0ZS5tZWRpYS5pc01vYmlsZSkgew0KICAgICAgICAgICAgLy/miYvmnLrpobXpnaINCiAgICAgICAgICAgIHJldHVybiB0aGlzLiRyb3V0ZXIucmVwbGFjZSh7IHBhdGg6IHRoaXMuJHJvdXRlLnF1ZXJ5LnJlZGlyZWN0IHx8ICcva2VmdS9tb2JpbGVfbGlzdCcgfSk7DQogICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIC8vIHBj6aG16Z2iDQogICAgICAgICAgICByZXR1cm4gdGhpcy4kcm91dGVyLnJlcGxhY2UoeyBwYXRoOiB0aGlzLiRyb3V0ZS5xdWVyeS5yZWRpcmVjdCB8fCAnL2tlZnUvcGNfbGlzdCcgfSk7DQogICAgICAgICAgfQ0KICAgICAgICB9KQ0KICAgICAgICAuY2F0Y2goKHJlcykgPT4gew0KICAgICAgICAgIGxldCBkYXRhID0gcmVzID09PSB1bmRlZmluZWQgPyB7fSA6IHJlczsNCiAgICAgICAgICB0aGlzLmVycm9yTnVtKys7DQogICAgICAgICAgdGhpcy5jYXB0Y2hhcygpOw0KICAgICAgICAgIHRoaXMuJG1lc3NhZ2UuZXJyb3IoZGF0YS5tc2cgfHwgJ+eZu+W9leWksei0pScpOw0KICAgICAgICAgIGlmICh0aGlzLmppZ3NhdykgdGhpcy5qaWdzYXcucmVzZXQoKTsNCiAgICAgICAgfSk7DQogICAgfSwNCiAgICBnZXRFeHBpcmVzVGltZShleHBpcmVzVGltZSkgew0KICAgICAgbGV0IG5vd1RpbWVOdW0gPSBNYXRoLnJvdW5kKG5ldyBEYXRlKCkgLyAxMDAwKTsNCiAgICAgIGxldCBleHBpcmVzVGltZU51bSA9IGV4cGlyZXNUaW1lIC0gbm93VGltZU51bTsNCiAgICAgIHJldHVybiBwYXJzZUZsb2F0KHBhcnNlRmxvYXQocGFyc2VGbG9hdChleHBpcmVzVGltZU51bSAvIDYwKSAvIDYwKSAvIDI0KTsNCiAgICB9LA0KICAgIGNsb3NlZmFpbCgpIHsNCiAgICAgIGlmICh0aGlzLmppZ3NhdykgdGhpcy5qaWdzYXcucmVzZXQoKTsNCiAgICAgIHRoaXMuJG1lc3NhZ2UuZXJyb3IoJ+agoemqjOmUmeivrycpOw0KICAgIH0sDQogICAgaGFuZGxlUmVzaXplKGV2ZW50KSB7DQogICAgICB0aGlzLmZ1bGxXaWR0aCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aDsNCiAgICB9LA0KICAgIGNhcHRjaGFzOiBmdW5jdGlvbiAoKSB7DQogICAgICB0aGlzLmltZ2NvZGUgPSBTZXR0aW5nLmFwaUJhc2VVUkwgKyAnL2NhcHRjaGFfcHJvPycgKyBEYXRlLnBhcnNlKG5ldyBEYXRlKCkpOw0KICAgIH0sDQogICAgaGFuZGxlU3VibWl0KG5hbWUpIHsNCiAgICAgIHRoaXMuJHJlZnNbbmFtZV0udmFsaWRhdGUoKHZhbGlkKSA9PiB7DQogICAgICAgIGlmICh2YWxpZCkgew0KICAgICAgICAgIHRoaXMuY2xvc2VNb2RlbCgpOw0KICAgICAgICB9DQogICAgICB9KTsNCiAgICB9LA0KICAgIC8vIOiOt+WPluWuouacjeaJq+eggWtleQ0KICAgIGdldFNhbkNvZGVLZXkoKSB7DQogICAgICBnZXRTYW5Db2RlS2V5KCkNCiAgICAgICAgLnRoZW4oKHJlcykgPT4gew0KICAgICAgICAgIHRoaXMuY29kZUtleSA9IHJlcy5kYXRhLmtleTsNCiAgICAgICAgICB0aGlzLmNyZWF0UXJDb2RlKCk7DQogICAgICAgICAgdGhpcy5zY2FuVGltZSA9IHNldEludGVydmFsKCgpID0+IHsNCiAgICAgICAgICAgIHRoaXMudGltZU51bSsrOw0KICAgICAgICAgICAgaWYgKHRoaXMudGltZU51bSA+PSA2MCkgew0KICAgICAgICAgICAgICB0aGlzLnRpbWVOdW0gPSAwOw0KICAgICAgICAgICAgICB3aW5kb3cuY2xlYXJJbnRlcnZhbCh0aGlzLnNjYW5UaW1lKTsNCiAgICAgICAgICAgICAgdGhpcy5yeHBpcmVkID0gdHJ1ZTsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgIHRoaXMuZ2V0U2NhblN0YXR1cygpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0sIDEwMDApOw0KICAgICAgICB9KQ0KICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiB7DQogICAgICAgICAgdGhpcy50aW1lTnVtID0gMDsNCiAgICAgICAgICB3aW5kb3cuY2xlYXJJbnRlcnZhbCh0aGlzLnNjYW5UaW1lKTsNCiAgICAgICAgICB0aGlzLnJ4cGlyZWQgPSB0cnVlOw0KICAgICAgICAgIHRoaXMuJG1lc3NhZ2UuZXJyb3IoZXJyb3IubXNnKTsNCiAgICAgICAgfSk7DQogICAgfSwNCiAgICAvLyDmiavnoIHnmbvlvZXmg4XlhrUNCiAgICBnZXRTY2FuU3RhdHVzKCkgew0KICAgICAgc2NhblN0YXR1cyh0aGlzLmNvZGVLZXkpDQogICAgICAgIC50aGVuKGFzeW5jIChyZXMpID0+IHsNCiAgICAgICAgICAvLyAwID0g5LqM57u056CB6L+H5pyf6ZyA6KaB6YeN5paw6I635Y+W5o6I5p2D5Yet6K+BDQogICAgICAgICAgaWYgKHJlcy5kYXRhLnN0YXR1cyA9PSAwKSB7DQogICAgICAgICAgICB0aGlzLnRpbWVOdW0gPSAwOw0KICAgICAgICAgICAgd2luZG93LmNsZWFySW50ZXJ2YWwodGhpcy5zY2FuVGltZSk7DQogICAgICAgICAgICB0aGlzLnJ4cGlyZWQgPSB0cnVlOw0KICAgICAgICAgIH0NCiAgICAgICAgICAvLyAxPeato+WcqOaJq+aPjw0KICAgICAgICAgIGlmIChyZXMuZGF0YS5zdGF0dXMgPT0gMSkgew0KICAgICAgICAgIH0NCiAgICAgICAgICAvLyAzIOaJq+aPj+aIkOWKn+ato+WcqOeZu+W9lQ0KICAgICAgICAgIGlmIChyZXMuZGF0YS5zdGF0dXMgPT0gMykgew0KICAgICAgICAgICAgd2luZG93LmNsZWFySW50ZXJ2YWwodGhpcy5zY2FuVGltZSk7DQogICAgICAgICAgICBsZXQgZXhwaXJlcyA9IHRoaXMuZ2V0RXhwaXJlc1RpbWUocmVzLmRhdGEuZXhwX3RpbWUpOw0KICAgICAgICAgICAgLy8g6K6w5b2V55So5oi355m75b2V5L+h5oGvDQogICAgICAgICAgICBzZXRDb29raWVzKCdrZWZ1X3V1aWQnLCByZXMuZGF0YS5rZWZ1SW5mby51aWQsIGV4cGlyZXMpOw0KICAgICAgICAgICAgc2V0Q29va2llcygna2VmdV90b2tlbicsIHJlcy5kYXRhLnRva2VuLCBleHBpcmVzKTsNCiAgICAgICAgICAgIHNldENvb2tpZXMoJ2tlZnVfZXhwaXJlc190aW1lJywgcmVzLmRhdGEuZXhwX3RpbWUsIGV4cGlyZXMpOw0KICAgICAgICAgICAgc2V0Q29va2llcygna2VmdUluZm8nLCByZXMuZGF0YS5rZWZ1SW5mbywgZXhwaXJlcyk7DQogICAgICAgICAgICAvLyDorrDlvZXnlKjmiLfkv6Hmga8NCiAgICAgICAgICAgIHRoaXMuJHN0b3JlLmNvbW1pdCgna2VmdS9zZXRJbmZvJywgcmVzLmRhdGEua2VmdUluZm8pOw0KICAgICAgICAgICAgaWYgKHRoaXMuJHN0b3JlLnN0YXRlLm1lZGlhLmlzTW9iaWxlKSB7DQogICAgICAgICAgICAgIC8v5omL5py66aG16Z2iDQogICAgICAgICAgICAgIHJldHVybiB0aGlzLiRyb3V0ZXIucmVwbGFjZSh7IHBhdGg6IHRoaXMuJHJvdXRlLnF1ZXJ5LnJlZGlyZWN0IHx8ICcva2VmdS9tb2JpbGVfbGlzdCcgfSk7DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAvLyBwY+mhtemdog0KICAgICAgICAgICAgICByZXR1cm4gdGhpcy4kcm91dGVyLnJlcGxhY2UoeyBwYXRoOiB0aGlzLiRyb3V0ZS5xdWVyeS5yZWRpcmVjdCB8fCAnL2tlZnUvcGNfbGlzdCcgfSk7DQogICAgICAgICAgICB9DQogICAgICAgICAgfQ0KICAgICAgICB9KQ0KICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiB7DQogICAgICAgICAgdGhpcy4kbWVzc2FnZS5lcnJvcihlcnJvci5tc2cpOw0KICAgICAgICAgIHRoaXMudGltZU51bSA9IDA7DQogICAgICAgICAgd2luZG93LmNsZWFySW50ZXJ2YWwodGhpcy5zY2FuVGltZSk7DQogICAgICAgICAgdGhpcy5yeHBpcmVkID0gdHJ1ZTsNCiAgICAgICAgfSk7DQogICAgfSwNCiAgICAvLyDliLfmlrDkuoznu7TnoIENCiAgICBiaW5kUmVmcmVzaCgpIHsNCiAgICAgIHRoaXMuJHJlZnMucXJDb2RlVXJsLmlubmVySFRNTCA9ICcnOw0KICAgICAgdGhpcy5yeHBpcmVkID0gZmFsc2U7DQogICAgICB0aGlzLmdldFNhbkNvZGVLZXkoKTsNCiAgICB9LA0KICB9LA0KICBiZWZvcmVDcmVhdGUoKSB7fSwNCiAgYmVmb3JlRGVzdHJveTogZnVuY3Rpb24gKCkgew0KICAgIHRoaXMudGltZU51bSA9IDA7DQogICAgdGhpcy4kcmVmcy5xckNvZGVVcmwuaW5uZXJIVE1MID0gJyc7DQogICAgd2luZG93LmNsZWFySW50ZXJ2YWwodGhpcy5zY2FuVGltZSk7DQogICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMuaGFuZGxlUmVzaXplKTsNCiAgICAvLyBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnY2FudmFzJylbMF0ucmVtb3ZlQXR0cmlidXRlKCdjbGFzcycsICdpbmRleF9iZycpOw0KICB9LA0KfTsNCg=="},{"version":3,"sources":["index.vue"],"names":[],"mappings":";AAwDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"index.vue","sourceRoot":"src/pages/kefu","sourcesContent":["<template>\r\n <div class=\"wrapper-box\">\r\n <div class=\"page-account kf\">\r\n <div class=\"content\">\r\n <img :src=\"copyrightImg\" alt=\"\" />\r\n <div class=\"desc\">\r\n <p class=\"tit\">让客户服务如此简单</p>\r\n <p class=\"kefu\">专业客服系统<br />助力企业打造一流的服务体验</p>\r\n </div>\r\n </div>\r\n <div class=\"container\" :class=\"[fullWidth > 768 ? 'containerSamll' : 'containerBig']\">\r\n <div class=\"index_from page-account-container\">\r\n <div :style=\"{ display: !loginType ? 'block' : 'none' }\">\r\n <div class=\"page-account-top\">\r\n <div class=\"page-account-top-logo\">客服登录</div>\r\n </div>\r\n <el-form ref=\"formInline\" :model=\"formInline\" :rules=\"ruleInline\" @keyup.enter=\"handleSubmit('formInline')\">\r\n <el-form-item class=\"mb20\" prop=\"username\">\r\n <el-input type=\"text\" v-model=\"formInline.username\" placeholder=\"请输入用户名\" size=\"large\" />\r\n </el-form-item>\r\n <el-form-item class=\"mb20\" prop=\"password\">\r\n <el-input type=\"password\" v-model=\"formInline.password\" placeholder=\"请输入密码\" size=\"large\" />\r\n </el-form-item>\r\n <el-form-item>\r\n <el-button type=\"primary\" size=\"large\" v-db-click @click=\"handleSubmit('formInline')\" class=\"btn\"\r\n >登录\r\n </el-button>\r\n </el-form-item>\r\n </el-form>\r\n <div class=\"qh_box\" v-if=\"!isMobile\" v-db-click @click=\"bindScan\">\r\n <span class=\"iconfont iconerweima2\"></span>\r\n </div>\r\n </div>\r\n <div :style=\"{ display: loginType ? 'block' : 'none' }\">\r\n <div class=\"page-account-top\">\r\n <div class=\"page-account-top-logo\">微信扫码登录</div>\r\n </div>\r\n <div class=\"code-box\">\r\n <div class=\"qrcode\" ref=\"qrCodeUrl\"></div>\r\n <div class=\"rxpired-box\" v-show=\"rxpired\">\r\n <p>已过期</p>\r\n <el-button type=\"primary\" v-db-click @click=\"bindRefresh\">点击刷新</el-button>\r\n </div>\r\n </div>\r\n <div class=\"qh_box\" v-db-click @click=\"loginType = 0\"><span class=\"iconfont iconzhanghaomima\"></span></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"foot-box\" v-if=\"copyright\">{{ copyright }}</div>\r\n <div class=\"foot-box\" v-else>\r\n Copyright © 2014-2025 <a href=\"https://www.crmeb.com\" target=\"_blank\">{{ version }}</a>\r\n </div>\r\n </div>\r\n</template>\r\n<script>\r\nimport { AccountLogin, loginInfoApi, getSanCodeKey, scanStatus, kefuConfig } from '@/api/kefu';\r\nimport mixins from '../account/mixins';\r\nimport Setting from '@/setting';\r\nimport util from '@/libs/util';\r\nimport QRCode from 'qrcodejs2';\r\nimport { getCookies, removeCookies, setCookies } from '@/libs/util';\r\nexport default {\r\n mixins: [mixins],\r\n data() {\r\n return {\r\n fullWidth: document.documentElement.clientWidth,\r\n swiperOption: {\r\n pagination: '.swiper-pagination',\r\n autoplay: true,\r\n },\r\n modals: false,\r\n autoLogin: true,\r\n imgcode: '',\r\n formInline: {\r\n username: '',\r\n password: '',\r\n code: '',\r\n },\r\n ruleInline: {\r\n username: [{ required: true, message: '请输入用户名', trigger: 'blur' }],\r\n password: [{ required: true, message: '请输入密码', trigger: 'blur' }],\r\n code: [{ required: true, message: '请输入验证码', trigger: 'blur' }],\r\n },\r\n errorNum: 0,\r\n jigsaw: null,\r\n login_logo: '',\r\n swiperList: [],\r\n defaultSwiperList: require('@/assets/images/sw.jpg'),\r\n loginType: 0, // 0 账号 1 扫码\r\n codeKey: '',\r\n scanTime: '',\r\n rxpired: false, // 扫码是否过期\r\n isMobile: false,\r\n version: '', //版本号\r\n isScan: false,\r\n timeNum: 0,\r\n copyright: '',\r\n copyrightImg: require('@/assets/images/logo-dark.png'),\r\n };\r\n },\r\n created() {\r\n kefuConfig().then((res) => {\r\n this.version = res.data.version;\r\n this.copyright = res.data.copyright;\r\n if (res.data.site_name) {\r\n document.title = res.data.site_name;\r\n }\r\n if (res.data.copyrightImg) {\r\n this.copyrightImg = res.data.copyrightImg;\r\n }\r\n });\r\n this.isMobile = this.$store.state.media.isMobile;\r\n var _this = this;\r\n top != window && (top.location.href = location.href);\r\n document.onkeydown = function (e) {\r\n if (_this.$route.name === 'login') {\r\n let key = window.event.keyCode;\r\n if (key === 13) {\r\n _this.handleSubmit('formInline');\r\n }\r\n }\r\n };\r\n window.addEventListener('resize', this.handleResize);\r\n },\r\n watch: {\r\n fullWidth(val) {\r\n // 为了避免频繁触发resize函数导致页面卡顿,使用定时器\r\n if (!this.timer) {\r\n // 一旦监听到的screenWidth值改变,就将其重新赋给data里的screenWidth\r\n this.screenWidth = val;\r\n this.timer = true;\r\n let that = this;\r\n setTimeout(function () {\r\n // 打印screenWidth变化的值\r\n that.timer = false;\r\n }, 400);\r\n }\r\n },\r\n $route(n) {\r\n this.captchas();\r\n },\r\n },\r\n mounted: function () {\r\n this.$nextTick(() => {});\r\n\r\n this.captchas();\r\n },\r\n methods: {\r\n // 切换扫码\r\n bindScan() {\r\n if (!this.isScan) {\r\n this.isScan = true;\r\n this.getSanCodeKey();\r\n }\r\n this.loginType = 1;\r\n },\r\n // 生成二维码\r\n creatQrCode() {\r\n let url = `${window.location.protocol}//${window.location.host}/pages/users/scan_login/index?key=${this.codeKey}`;\r\n var qrcode = new QRCode(this.$refs.qrCodeUrl, {\r\n text: url, // 需要转换为二维码的内容\r\n width: 160,\r\n height: 160,\r\n colorDark: '#000000',\r\n colorLight: '#ffffff',\r\n correctLevel: QRCode.CorrectLevel.H,\r\n });\r\n },\r\n // 关闭模态框\r\n closeModel() {\r\n AccountLogin({\r\n account: this.formInline.username,\r\n password: this.formInline.password,\r\n imgcode: this.formInline.code,\r\n })\r\n .then(async (res) => {\r\n let expires = this.getExpiresTime(res.data.exp_time);\r\n // 记录用户登录信息\r\n setCookies('kefu_uuid', res.data.kefuInfo.uid, expires);\r\n setCookies('kefu_token', res.data.token, expires);\r\n setCookies('kefu_expires_time', res.data.exp_time, expires);\r\n setCookies('kefuInfo', res.data.kefuInfo, expires);\r\n\r\n // 记录用户信息\r\n this.$store.commit('kefu/setInfo', res.data.kefuInfo);\r\n\r\n if (this.$store.state.media.isMobile) {\r\n //手机页面\r\n return this.$router.replace({ path: this.$route.query.redirect || '/kefu/mobile_list' });\r\n } else {\r\n // pc页面\r\n return this.$router.replace({ path: this.$route.query.redirect || '/kefu/pc_list' });\r\n }\r\n })\r\n .catch((res) => {\r\n let data = res === undefined ? {} : res;\r\n this.errorNum++;\r\n this.captchas();\r\n this.$message.error(data.msg || '登录失败');\r\n if (this.jigsaw) this.jigsaw.reset();\r\n });\r\n },\r\n getExpiresTime(expiresTime) {\r\n let nowTimeNum = Math.round(new Date() / 1000);\r\n let expiresTimeNum = expiresTime - nowTimeNum;\r\n return parseFloat(parseFloat(parseFloat(expiresTimeNum / 60) / 60) / 24);\r\n },\r\n closefail() {\r\n if (this.jigsaw) this.jigsaw.reset();\r\n this.$message.error('校验错误');\r\n },\r\n handleResize(event) {\r\n this.fullWidth = document.documentElement.clientWidth;\r\n },\r\n captchas: function () {\r\n this.imgcode = Setting.apiBaseURL + '/captcha_pro?' + Date.parse(new Date());\r\n },\r\n handleSubmit(name) {\r\n this.$refs[name].validate((valid) => {\r\n if (valid) {\r\n this.closeModel();\r\n }\r\n });\r\n },\r\n // 获取客服扫码key\r\n getSanCodeKey() {\r\n getSanCodeKey()\r\n .then((res) => {\r\n this.codeKey = res.data.key;\r\n this.creatQrCode();\r\n this.scanTime = setInterval(() => {\r\n this.timeNum++;\r\n if (this.timeNum >= 60) {\r\n this.timeNum = 0;\r\n window.clearInterval(this.scanTime);\r\n this.rxpired = true;\r\n } else {\r\n this.getScanStatus();\r\n }\r\n }, 1000);\r\n })\r\n .catch((error) => {\r\n this.timeNum = 0;\r\n window.clearInterval(this.scanTime);\r\n this.rxpired = true;\r\n this.$message.error(error.msg);\r\n });\r\n },\r\n // 扫码登录情况\r\n getScanStatus() {\r\n scanStatus(this.codeKey)\r\n .then(async (res) => {\r\n // 0 = 二维码过期需要重新获取授权凭证\r\n if (res.data.status == 0) {\r\n this.timeNum = 0;\r\n window.clearInterval(this.scanTime);\r\n this.rxpired = true;\r\n }\r\n // 1=正在扫描\r\n if (res.data.status == 1) {\r\n }\r\n // 3 扫描成功正在登录\r\n if (res.data.status == 3) {\r\n window.clearInterval(this.scanTime);\r\n let expires = this.getExpiresTime(res.data.exp_time);\r\n // 记录用户登录信息\r\n setCookies('kefu_uuid', res.data.kefuInfo.uid, expires);\r\n setCookies('kefu_token', res.data.token, expires);\r\n setCookies('kefu_expires_time', res.data.exp_time, expires);\r\n setCookies('kefuInfo', res.data.kefuInfo, expires);\r\n // 记录用户信息\r\n this.$store.commit('kefu/setInfo', res.data.kefuInfo);\r\n if (this.$store.state.media.isMobile) {\r\n //手机页面\r\n return this.$router.replace({ path: this.$route.query.redirect || '/kefu/mobile_list' });\r\n } else {\r\n // pc页面\r\n return this.$router.replace({ path: this.$route.query.redirect || '/kefu/pc_list' });\r\n }\r\n }\r\n })\r\n .catch((error) => {\r\n this.$message.error(error.msg);\r\n this.timeNum = 0;\r\n window.clearInterval(this.scanTime);\r\n this.rxpired = true;\r\n });\r\n },\r\n // 刷新二维码\r\n bindRefresh() {\r\n this.$refs.qrCodeUrl.innerHTML = '';\r\n this.rxpired = false;\r\n this.getSanCodeKey();\r\n },\r\n },\r\n beforeCreate() {},\r\n beforeDestroy: function () {\r\n this.timeNum = 0;\r\n this.$refs.qrCodeUrl.innerHTML = '';\r\n window.clearInterval(this.scanTime);\r\n window.removeEventListener('resize', this.handleResize);\r\n // document.getElementsByTagName('canvas')[0].removeAttribute('class', 'index_bg');\r\n },\r\n};\r\n</script>\r\n<style lang=\"scss\" scoped>\r\n.page-account {\r\n display: flex;\r\n width: 100%;\r\n background-image: url('~@/assets/images/kfbg_2.jpg');\r\n background-size: cover;\r\n background-position: center;\r\n justify-content: center;\r\n align-items: center;\r\n height: 100vh;\r\n overflow: auto;\r\n .content {\r\n height: 400px;\r\n margin-right: 100px;\r\n .desc {\r\n color: #fff;\r\n .tit {\r\n font-size: 40px;\r\n font-weight: 600;\r\n }\r\n .kefu {\r\n margin-top: 30px;\r\n font-weight: 500;\r\n font-size: 20px;\r\n }\r\n }\r\n\r\n img {\r\n width: 360px;\r\n margin-left: -100px;\r\n }\r\n }\r\n}\r\n.code-box {\r\n position: relative;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n .qrcode {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n width: 180px;\r\n height: 180px;\r\n border: 1px solid #e5e5e6;\r\n }\r\n .rxpired-box {\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n justify-content: center;\r\n position: absolute;\r\n left: 50%;\r\n top: 50%;\r\n transform: translate(-50%, -50%);\r\n width: 160px;\r\n height: 160px;\r\n background: rgba(0, 0, 0, 0.6);\r\n\r\n p {\r\n margin-bottom: 10px;\r\n font-size: 15px;\r\n color: #fff;\r\n }\r\n }\r\n}\r\n.page-account-top-logo {\r\n color: #000000;\r\n font-size: 21px;\r\n}\r\n.wrapper-box {\r\n display: flex;\r\n flex-direction: column;\r\n height: 100vh;\r\n .foot-box {\r\n padding: 20px 20px;\r\n font-size: 14px;\r\n color: #666666;\r\n text-align: right;\r\n box-sizing: border-box;\r\n\r\n a {\r\n margin-left: 0;\r\n color: #666666;\r\n }\r\n }\r\n}\r\n.page-account {\r\n display: flex;\r\n flex: 1;\r\n}\r\n.page-account .code {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n}\r\n.page-account .code .pictrue {\r\n height: 40px;\r\n}\r\n.swiperPross {\r\n border-radius: 6px 0px 0px 6px;\r\n}\r\n.swiperPross,\r\n.swiperPic,\r\n.swiperPic img {\r\n width: 510px;\r\n height: 100%;\r\n}\r\n.swiperPic img {\r\n width: 100%;\r\n height: 100%;\r\n}\r\n.container {\r\n height: 400px !important;\r\n padding: 0 !important;\r\n /* overflow: hidden; */\r\n border-radius: 6px;\r\n z-index: 1;\r\n display: flex;\r\n}\r\n.containerSamll {\r\n width: 384px !important;\r\n\r\n background: #fff !important;\r\n}\r\n.containerBig {\r\n width: 90%;\r\n padding-bottom: 20px;\r\n margin-top: 84px;\r\n background: #f7f7f7 !important;\r\n height: auto !important;\r\n box-shadow: 0px 3px 20px rgba(0, 20, 41, 0.06);\r\n}\r\n.index_from {\r\n position: relative;\r\n padding: 40px 40px 32px 40px;\r\n height: 400px;\r\n width: 100%;\r\n box-sizing: border-box;\r\n}\r\n.containerBig .index_from {\r\n padding: 20px;\r\n height: auto !important;\r\n}\r\n.index_from .qh_box {\r\n position: absolute;\r\n right: 12px;\r\n top: 0;\r\n cursor: pointer;\r\n .iconfont {\r\n color: #265bed;\r\n font-size: 36px;\r\n }\r\n}\r\n.page-account-top {\r\n padding: 20px 0 50px !important;\r\n box-sizing: border-box !important;\r\n display: flex;\r\n justify-content: center;\r\n}\r\n.page-account-container {\r\n border-radius: 0px 6px 6px 0px;\r\n}\r\n.btn {\r\n width: 100%;\r\n background: #265bed;\r\n}\r\n.captchaBox {\r\n width: 310px;\r\n}\r\n\r\ninput {\r\n display: block;\r\n width: 290px;\r\n line-height: 40px;\r\n margin: 10px 0;\r\n padding: 0 10px;\r\n outline: none;\r\n border: 1px solid #c8cccf;\r\n border-radius: 4px;\r\n color: #6a6f77;\r\n}\r\n\r\n#msg {\r\n width: 100%;\r\n line-height: 40px;\r\n font-size: 14px;\r\n text-align: center;\r\n}\r\n\r\na:link,\r\na:visited,\r\na:hover,\r\na:active {\r\n margin-left: 100px;\r\n color: #0366d6;\r\n}\r\n.index_from ::v-deep .ivu-input-large {\r\n font-size: 14px !important;\r\n}\r\n</style>\r\n<style>\r\n@media screen and (min-width: 320px) and (max-width: 960px) {\r\n .page-account {\r\n background-image: url('~@/assets/images/m_bg.png') !important;\r\n background-size: 100% auto !important;\r\n background-repeat: no-repeat;\r\n background-position: left top !important;\r\n display: flex;\r\n }\r\n .wrapper-box .foot-box {\r\n text-align: center !important;\r\n }\r\n .content {\r\n display: none;\r\n }\r\n .index_from {\r\n box-shadow: 0px 3px 20px rgba(0, 20, 41, 0.06);\r\n background: #fff;\r\n }\r\n .wrapper-box .foot-box {\r\n padding: 20px 66px !important;\r\n color: #adadad !important;\r\n font-size: 0.22rem !important;\r\n }\r\n .containerBig {\r\n width: 86% !important;\r\n border-radius: 0.2rem !important;\r\n overflow: hidden;\r\n }\r\n .btn {\r\n background: linear-gradient(90deg, #3875ea 0%, #1890fc 100%) !important;\r\n\r\n border-radius: 0.41rem;\r\n }\r\n .ivu-input {\r\n border: 1px solid #dcdee2;\r\n -webkit-appearance: none; /*去除阴影边框*/\r\n outline: none;\r\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0); /*点击高亮的颜色*/\r\n }\r\n}\r\n</style>\r\n"]}]}
|