faee524960481e2c5fdac90c7524aad7.json 62 KB

1
  1. {"remainingRequest":"E:\\item\\newItem\\admin\\node_modules\\babel-loader\\lib\\index.js!E:\\item\\newItem\\admin\\node_modules\\cache-loader\\dist\\cjs.js??ref--0-0!E:\\item\\newItem\\admin\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!E:\\item\\newItem\\admin\\node_modules\\iview-loader\\index.js??ref--0-2!E:\\item\\newItem\\admin\\src\\pages\\kefu\\appChat\\mobile\\index.vue?vue&type=script&lang=js&","dependencies":[{"path":"E:\\item\\newItem\\admin\\src\\pages\\kefu\\appChat\\mobile\\index.vue","mtime":1677828270199},{"path":"E:\\item\\newItem\\admin\\babel.config.js","mtime":1677828270071},{"path":"E:\\item\\newItem\\admin\\.babelrc","mtime":1677828270070},{"path":"E:\\item\\newItem\\admin\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"E:\\item\\newItem\\admin\\node_modules\\babel-loader\\lib\\index.js","mtime":315532800000},{"path":"E:\\item\\newItem\\admin\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"E:\\item\\newItem\\admin\\node_modules\\vue-loader\\lib\\index.js","mtime":499162500000},{"path":"E:\\item\\newItem\\admin\\node_modules\\iview-loader\\index.js","mtime":1570440814000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:aW1wb3J0IF90b0NvbnN1bWFibGVBcnJheSBmcm9tICJFOi9pdGVtL25ld0l0ZW0vYWRtaW4vbm9kZV9tb2R1bGVzL0B2dWUvYmFiZWwtcHJlc2V0LWFwcC9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9Db25zdW1hYmxlQXJyYXkuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5mb3ItZWFjaC5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5Lm1hcC5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC5leGVjLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLnJlcGxhY2UuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5jb25jYXQuanMiOwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwppbXBvcnQgU2V0dGluZyBmcm9tICdAL3NldHRpbmcnOwppbXBvcnQgeyBTb2NrZXQgfSBmcm9tICdAL2xpYnMvc29ja2V0JzsKaW1wb3J0IHV0aWwgZnJvbSAnQC9saWJzL3V0aWwnOwppbXBvcnQgZW1vamlMaXN0IGZyb20gJ0AvdXRpbHMvZW1vamknOwppbXBvcnQgeyBzZXJ2aWNlTGlzdCwgc2VydmljZUxpc3RBcGksIGdldE9yZGVyQXBpLCBjaGF0TGlzdEFwaSwgcHJvZHVjdEFwaSB9IGZyb20gJ0AvYXBpL2tlZnUnOwppbXBvcnQgeyBnZXRDb29raWVzLCByZW1vdmVDb29raWVzLCBzZXRDb29raWVzIH0gZnJvbSAnQC9saWJzL3V0aWwnOwoKdmFyIGNodW5rID0gZnVuY3Rpb24gY2h1bmsoYXJyLCBudW0pIHsKICBudW0gPSBudW0gKiAxIHx8IDE7CiAgdmFyIHJldCA9IFtdOwogIGFyci5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtLCBpKSB7CiAgICBpZiAoaSAlIG51bSA9PT0gMCkgewogICAgICByZXQucHVzaChbXSk7CiAgICB9CgogICAgcmV0W3JldC5sZW5ndGggLSAxXS5wdXNoKGl0ZW0pOwogIH0pOwogIHJldHVybiByZXQ7Cn07CgpleHBvcnQgZGVmYXVsdCB7CiAgbmFtZTogJ2NoYXRfbW9iaWxlJywKICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkgewogICAgcmV0dXJuIHsKICAgICAgb3BzOiB7CiAgICAgICAgdnVlc2Nyb2xsOiB7CiAgICAgICAgICBtb2RlOiAnc2xpZGUnLAogICAgICAgICAgZW5hYmxlOiBmYWxzZSwKICAgICAgICAgIGF1dG86IGZhbHNlLAogICAgICAgICAgYXV0b0xvYWREaXN0YW5jZTogMCwKICAgICAgICAgIHB1bGxSZWZyZXNoOiB7CiAgICAgICAgICAgIGVuYWJsZTogdHJ1ZSwKICAgICAgICAgICAgYXV0bzogZmFsc2UsCiAgICAgICAgICAgIGF1dG9Mb2FkRGlzdGFuY2U6IDAsCiAgICAgICAgICAgIHRpcHM6IHsKICAgICAgICAgICAgICBkZWFjdGl2ZTogJycsCiAgICAgICAgICAgICAgYWN0aXZlOiAn5LiK5ouJ5Yqg6L295pu05aSaJywKICAgICAgICAgICAgICBzdGFydDogJ0xvYWRpbmcuLi4nLAogICAgICAgICAgICAgIGJlZm9yZURlYWN0aXZlOiAnICcKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgIHB1c2hMb2FkOiB7CiAgICAgICAgICAgIGVuYWJsZTogZmFsc2UKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGJhcjogewogICAgICAgICAgYmFja2dyb3VuZDogJyMzOTMyMzInLAogICAgICAgICAgb3BhY2l0eTogJy41JywKICAgICAgICAgIHNpemU6ICcycHgnCiAgICAgICAgfQogICAgICB9LAogICAgICBzd2lwZXJPcHRpb25zOiB7fSwKICAgICAgc3RhdHVzOiBmYWxzZSwKICAgICAgbG9hZGluZzogZmFsc2UsCiAgICAgIGlzVG9vbDogZmFsc2UsCiAgICAgIGlzU3dpcGVyOiBmYWxzZSwKICAgICAgaXNXb3JkczogZmFsc2UsCiAgICAgIGF1dG9wbGF5OiBmYWxzZSwKICAgICAgY2lyY3VsYXI6IHRydWUsCiAgICAgIGludGVydmFsOiAzMDAwLAogICAgICBkdXJhdGlvbjogNTAwLAogICAgICBlbW9qaUdyb3VwOiBjaHVuayhlbW9qaUxpc3QsIDIxKSwKICAgICAgY29uOiAnJywKICAgICAgdG9VaWQ6ICcnLAogICAgICBsaW1pdDogMTUsCiAgICAgIHVwcGVySWQ6IDAsCiAgICAgIGNoYXRMaXN0OiBbXSwKICAgICAga2VmdUluZm86IHt9LAogICAgICBzY3JvbGxUb3A6IDAsCiAgICAgIGFjdGl2ZTogdHJ1ZSwKICAgICAgaXNTY3JvbGw6IHRydWUsCiAgICAgIG9sZEhlaWdodDogMCwKICAgICAgc2VsZWN0b3I6ICcnLAogICAgICB0cmFuc2Zlckxpc3Q6IFtdLAogICAgICAvL+i9rOaOpeWIl+ihqAogICAgICBpc1RyYW5zZmVyOiBmYWxzZSwKICAgICAgdXBsb2FkRGF0YToge30sCiAgICAgIC8vIOS4iuS8oOWPguaVsAogICAgICBoZWFkZXI6IHt9LAogICAgICBmaWxlVXJsOiAnJywKICAgICAgdXNlclRva2VuOiAnJywKICAgICAgdG91cmlzdF91aWQ6ICcnLAogICAgICAvL+a4uOWuoueahHVpZAogICAgICBvcmRlcklkOiAnJywKICAgICAgb3JkZXJJbmZvOiAnJywKICAgICAgY2FydEluZm86ICcnLAogICAgICBwcm9kdWN0SWQ6ICcnLAogICAgICBwcm9kdWN0SW5mbzogJycsCiAgICAgIHRvdXJpc3RfYXZhdGFyOiAnJwogICAgfTsKICB9LAogIGNvbXB1dGVkOiB7CiAgICBpc1NlbmQ6IGZ1bmN0aW9uIGlzU2VuZCgpIHsKICAgICAgaWYgKHRoaXMuY29uLmxlbmd0aCA9PSAwKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICB9LAogICAgcmVjb3JkczogZnVuY3Rpb24gcmVjb3JkcygpIHsKICAgICAgdmFyIF90aGlzID0gdGhpczsKCiAgICAgIHJldHVybiB0aGlzLmNoYXRMaXN0Lm1hcChmdW5jdGlvbiAoaXRlbSwgaW5kZXgpIHsKICAgICAgICBpdGVtLnRpbWUgPSBfdGhpcy4kbW9tZW50KGl0ZW0uYWRkX3RpbWUgKiAxMDAwKS5mb3JtYXQoJ01NTURvIGg6bW0nKTsKCiAgICAgICAgaWYgKGluZGV4KSB7CiAgICAgICAgICBpZiAoaXRlbS5hZGRfdGltZSAtIF90aGlzLmNoYXRMaXN0W2luZGV4IC0gMV0uYWRkX3RpbWUgPj0gMzAwKSB7CiAgICAgICAgICAgIGl0ZW0uc2hvdyA9IHRydWU7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpdGVtLnNob3cgPSBmYWxzZTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgaXRlbS5zaG93ID0gdHJ1ZTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBpdGVtOwogICAgICB9KTsKICAgIH0KICB9LAogIGNyZWF0ZWQ6IGZ1bmN0aW9uIGNyZWF0ZWQoKSB7CiAgICB2YXIgdG9rZW4gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnTE9HSU5fU1RBVFVTX1RPS0VOJykgfHwgJyc7CiAgICB0aGlzLmZpbGVVcmwgPSBTZXR0aW5nLmFwaUJhc2VVUkwucmVwbGFjZSgnYWRtaW5hcGknLCAna2VmdWFwaScpICsgJy90b3VyaXN0L3VwbG9hZCc7CiAgICB0aGlzLnVzZXJUb2tlbiA9IHRva2VuOwogICAgdGhpcy50b1VpZCA9IHRoaXMuJHJvdXRlLnF1ZXJ5LnRvVWlkIHx8ICcnOwogICAgdGhpcy5uaWNrbmFtZSA9IHRoaXMuJHJvdXRlLnF1ZXJ5Lm5pY2tuYW1lIHx8ICcnOwogICAgdGhpcy5vcmRlcklkID0gdGhpcy4kcm91dGUucXVlcnkub3JkZXJJZCB8fCAnJzsKICAgIHRoaXMucHJvZHVjdElkID0gdGhpcy4kcm91dGUucXVlcnkucHJvZHVjdF9pZCB8fCAnJzsKICB9LAogIG1vdW50ZWQ6IGZ1bmN0aW9uIG1vdW50ZWQoKSB7CiAgICB2YXIgX3RoaXMyID0gdGhpczsKCiAgICBpZiAoIXRoaXMuJHdlY2hhdC5faXNNb2JpbGUoKSkgdGhpcy4kcm91dGVyLnJlcGxhY2UoJy9rZWZ1L2FwcENoYXQnKTsKICAgIHZhciB0aGF0ID0gdGhpczsKICAgIHRoaXMuZ2V0U2VydmljZUxpc3QoKTsKCiAgICBpZiAodGhpcy51c2VyVG9rZW4pIHsKICAgICAgdGhpcy5nZXRPcmRlckluZm8oKTsKICAgICAgdGhpcy5nZXRHb29kc0luZm8oKTsKICAgIH0gLy8g5LiK5Lyg5aS06YOodG9rZW4KCgogICAgdGhpcy5oZWFkZXJbJ0F1dGhvcmktemF0aW9uJ10gPSAnQmVhcmVyICcgKyBnZXRDb29raWVzKCdrZWZ1X3Rva2VuJyk7CiAgICBTb2NrZXQudGhlbihmdW5jdGlvbiAod3MpIHsKICAgICAgaWYgKF90aGlzMi51c2VyVG9rZW4pIHsKICAgICAgICB3cy5zZW5kKHsKICAgICAgICAgIHR5cGU6ICdsb2dpbicsCiAgICAgICAgICBkYXRhOiBfdGhpczIudXNlclRva2VuCiAgICAgICAgfSk7CiAgICAgIH0gLy8g5raI5oGv5o6l5pS2CgoKICAgICAgd3MuJG9uKFsncmVwbHknLCAnY2hhdCddLCBmdW5jdGlvbiAoZGF0YSkgewogICAgICAgIGlmIChkYXRhLm1zbl90eXBlID09IDEgfHwgZGF0YS5tc25fdHlwZSA9PSAyKSB7CiAgICAgICAgICBkYXRhLm1zbiA9IF90aGlzMi5yZXBsYWNlX2VtKGRhdGEubXNuKTsKICAgICAgICB9CgogICAgICAgIF90aGlzMi5jaGF0TGlzdC5wdXNoKGRhdGEpOwoKICAgICAgICBfdGhpczIuJG5leHRUaWNrKGZ1bmN0aW9uICgpIHsKICAgICAgICAgIF90aGlzMi4kcmVmc1snc2Nyb2xsQm94J10ucmVmcmVzaCgpOwoKICAgICAgICAgIF90aGlzMi5zY3JvbGxCb20oKTsKICAgICAgICB9KTsKCiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAocmVzKSB7CiAgICAgICAgICBfdGhpczIuJHJlZnNbJ3Njcm9sbEJveCddLnJlZnJlc2goKTsKICAgICAgICB9LCAzMDApOwogICAgICB9KTsKICAgICAgd3MuJG9uKCdzb2NrZXRfZXJyb3InLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgX3RoaXMyLiRNZXNzYWdlLmVycm9yKCfov57mjqXlpLHotKUnKTsKICAgICAgfSk7CiAgICAgIHdzLiRvbignZXJyb3InLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgX3RoaXMyLiRNZXNzYWdlLmVycm9yKCfov57mjqXlpLHotKUnKTsKICAgICAgfSk7CiAgICAgIHdzLiRvbigndG9fdHJhbnNmZXInLCBmdW5jdGlvbiAoZGF0YSkgewogICAgICAgIHdzLnNlbmQoewogICAgICAgICAgZGF0YTogewogICAgICAgICAgICBpZDogZGF0YS50b1VpZAogICAgICAgICAgfSwKICAgICAgICAgIHR5cGU6ICd0b19jaGF0JwogICAgICAgIH0pOwogICAgICB9KTsKICAgICAgd3MuJG9uKCdvbmxpbmUnLCBmdW5jdGlvbiAoZGF0YSkgewogICAgICAgIGlmIChkYXRhLm9ubGluZSA9PSAwICYmIGRhdGEudWlkID09IHRoYXQudG9VaWQpIHsKICAgICAgICAgIHRoYXQuJE1vZGFsLmNvbmZpcm0oewogICAgICAgICAgICB0aXRsZTogJ+aPkOekuicsCiAgICAgICAgICAgIGNvbnRlbnQ6ICflrqLmnI3lt7Lnprvnur/vvIzmmK/lkKbpnIDopoHlj43ppojvvJ8nLAogICAgICAgICAgICBva1RleHQ6ICfnoa7lrponLAogICAgICAgICAgICBjYW5jZWxUZXh0OiAn5Y+W5raIJywKICAgICAgICAgICAgb25PazogZnVuY3Rpb24gb25PaygpIHsKICAgICAgICAgICAgICB0aGF0LiRyb3V0ZXIucmVwbGFjZSh7CiAgICAgICAgICAgICAgICBwYXRoOiAnL2tlZnUvbW9iaWxlX2ZlZWRiYWNrJwogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfSk7CiAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbiAoKSB7fSk7CiAgfSwKICBtZXRob2RzOiB7CiAgICBnb0JhY2s6IGZ1bmN0aW9uIGdvQmFjaygpIHsKICAgICAgdGhpcy4kcm91dGVyLmdvKC0xKTsKICAgIH0sCiAgICBoYW5kbGVGb3JtYXRFcnJvcjogZnVuY3Rpb24gaGFuZGxlRm9ybWF0RXJyb3IoZmlsZSkgewogICAgICB0aGlzLiRNZXNzYWdlLmVycm9yKCfkuIrkvKDlm77niYflj6rog73mmK8ganBn44CBanBn44CBanBlZ+OAgWdpZiDmoLzlvI8hJyk7CiAgICB9LAogICAgLy8g6I635Y+W5ZWG5ZOB5L+h5oGvCiAgICBnZXRHb29kc0luZm86IGZ1bmN0aW9uIGdldEdvb2RzSW5mbygpIHsKICAgICAgdmFyIF90aGlzMyA9IHRoaXM7CgogICAgICBpZiAoIXRoaXMucHJvZHVjdElkKSByZXR1cm47CiAgICAgIHByb2R1Y3RBcGkodGhpcy5wcm9kdWN0SWQpLnRoZW4oZnVuY3Rpb24gKHJlcykgewogICAgICAgIF90aGlzMy5wcm9kdWN0SW5mbyA9IHJlcy5kYXRhOwogICAgICB9KS5jYXRjaChmdW5jdGlvbiAoZXJyKSB7CiAgICAgICAgX3RoaXMzLiRNZXNzYWdlLmVycm9yKGVyci5tc2cpOwogICAgICB9KTsKICAgIH0sCiAgICAvLyDojrflj5borqLljZXkv6Hmga8KICAgIGdldE9yZGVySW5mbzogZnVuY3Rpb24gZ2V0T3JkZXJJbmZvKCkgewogICAgICB2YXIgX3RoaXM0ID0gdGhpczsKCiAgICAgIGlmICghdGhpcy5vcmRlcklkKSByZXR1cm47CiAgICAgIGdldE9yZGVyQXBpKHRoaXMub3JkZXJJZCwgewogICAgICAgIHRva2VuOiB0aGlzLnVzZXJUb2tlbgogICAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXMpIHsKICAgICAgICBfdGhpczQub3JkZXJJbmZvID0gcmVzLmRhdGE7CgogICAgICAgIGlmIChfdGhpczQub3JkZXJJbmZvLmFkZF90aW1lX2gpIHsKICAgICAgICAgIF90aGlzNC5vcmRlckluZm8uYWRkX3RpbWVfaCA9IF90aGlzNC5vcmRlckluZm8uYWRkX3RpbWVfaC5zdWJzdHJpbmcoMCwgX3RoaXM0Lm9yZGVySW5mby5hZGRfdGltZV9oLmxhc3RJbmRleE9mKCc6JykpOwogICAgICAgIH0KCiAgICAgICAgaWYgKF90aGlzNC5vcmRlckluZm8uY2FydEluZm8ubGVuZ3RoKSB7CiAgICAgICAgICBfdGhpczQuY2FydEluZm8gPSBfdGhpczQub3JkZXJJbmZvLmNhcnRJbmZvWzBdOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9LAogICAgLy8g6I635Y+W6ZqP5py65a6i5pyNCiAgICBnZXRTZXJ2aWNlTGlzdDogZnVuY3Rpb24gZ2V0U2VydmljZUxpc3QoKSB7CiAgICAgIHZhciBfdGhpczUgPSB0aGlzOwoKICAgICAgc2VydmljZUxpc3RBcGkoewogICAgICAgIHRva2VuOiB0aGlzLnVzZXJUb2tlbgogICAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXMpIHsKICAgICAgICBfdGhpczUudG9VaWQgPSByZXMuZGF0YS51aWQ7CiAgICAgICAgX3RoaXM1LnRvdXJpc3RfdWlkID0gcmVzLmRhdGEudG91cmlzdF91aWQ7CiAgICAgICAgZG9jdW1lbnQudGl0bGUgPSByZXMuZGF0YS5uaWNrbmFtZTsKICAgICAgICBfdGhpczUudG91cmlzdF9hdmF0YXIgPSByZXMuZGF0YS50b3VyaXN0X2F2YXRhcjsKCiAgICAgICAgaWYgKF90aGlzNS51c2VyVG9rZW4pIHsKICAgICAgICAgIF90aGlzNS5nZXRDaGF0TGlzdCgpOwogICAgICAgIH0KCiAgICAgICAgdmFyIG9iaiA9IHsKICAgICAgICAgIGRhdGE6IHsKICAgICAgICAgICAgaWQ6IHJlcy5kYXRhLnVpZCwKICAgICAgICAgICAgdG91cmlzdF91aWQ6IF90aGlzNS50b3VyaXN0X3VpZAogICAgICAgICAgfSwKICAgICAgICAgIHR5cGU6ICd0b19jaGF0JwogICAgICAgIH07CiAgICAgICAgU29ja2V0LnRoZW4oZnVuY3Rpb24gKHdzKSB7CiAgICAgICAgICB3cy5zZW5kKG9iaik7CiAgICAgICAgfSk7CiAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikgewogICAgICAgIF90aGlzNS4kTWVzc2FnZS5lcnJvcihlcnJvci5tc2cpOwoKICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uIChyZXMpIHsKICAgICAgICAgIF90aGlzNS4kcm91dGVyLnJlcGxhY2UoewogICAgICAgICAgICBwYXRoOiAnL2tlZnUvbW9iaWxlX2ZlZWRiYWNrJwogICAgICAgICAgfSk7CiAgICAgICAgfSwgMjAwMCk7CiAgICAgIH0pOwogICAgfSwKICAgIC8vIOS4iuS8oOS5i+WJjQogICAgYmVmb3JlVXBsb2FkOiBmdW5jdGlvbiBiZWZvcmVVcGxvYWQoZmlsZSkgewogICAgICB2YXIgX3RoaXM2ID0gdGhpczsKCiAgICAgIHZhciBpc0ltYWdlID0gZmlsZS50eXBlID09PSAnaW1hZ2UvanBlZycgfHwgZmlsZS50eXBlID09PSAnaW1hZ2UvcG5nJzsKCiAgICAgIGlmICghaXNJbWFnZSkgewogICAgICAgIHRoaXMuJE1lc3NhZ2UuZXJyb3IoJ+S4iuS8oOWbvueJh+WPquiDveaYryBKUEfjgIFQTkcg5qC85byPIScpOwogICAgICB9CgogICAgICB0aGlzLnVwbG9hZERhdGEgPSB7CiAgICAgICAgZmlsZW5hbWU6IGZpbGUsCiAgICAgICAgdG9rZW46IHRoaXMudXNlclRva2VuCiAgICAgIH07CiAgICAgIHZhciBwcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHsKICAgICAgICBfdGhpczYuJG5leHRUaWNrKGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHJlc29sdmUodHJ1ZSk7CiAgICAgICAgfSk7CiAgICAgIH0pOwogICAgICByZXR1cm4gcHJvbWlzZTsKICAgIH0sCiAgICAvLyDkuIrkvKDmiJDlip8KICAgIGhhbmRsZVN1Y2Nlc3M6IGZ1bmN0aW9uIGhhbmRsZVN1Y2Nlc3MocmVzLCBmaWxlLCBmaWxlTGlzdCkgewogICAgICBpZiAocmVzLnN0YXR1cyA9PT0gMjAwKSB7CiAgICAgICAgdGhpcy4kTWVzc2FnZS5zdWNjZXNzKHJlcy5tc2cpOwogICAgICAgIHRoaXMuc2VuZE1zZyhyZXMuZGF0YS51cmwsIDMpOwogICAgICB9IGVsc2UgewogICAgICAgIHRoaXMuJE1lc3NhZ2UuZXJyb3IocmVzLm1zZyk7CiAgICAgIH0KICAgIH0sCiAgICAvLyDmu5rliqjliLDlupXpg6gKICAgIHNjcm9sbEJvbTogZnVuY3Rpb24gc2Nyb2xsQm9tKCkgewogICAgICB2YXIgX3RoaXM3ID0gdGhpczsKCiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKHJlcykgewogICAgICAgIHZhciBudW0gPSBwYXJzZUZsb2F0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjaGF0Qm94Jykub2Zmc2V0SGVpZ2h0KTsKCiAgICAgICAgaWYgKF90aGlzNy4kcmVmc1snc2Nyb2xsQm94J10pIHsKICAgICAgICAgIF90aGlzNy4kcmVmc1snc2Nyb2xsQm94J10uc2Nyb2xsVG8oewogICAgICAgICAgICB5OiBudW0KICAgICAgICAgIH0sIDMwMCk7CiAgICAgICAgfQogICAgICB9LCAzMDApOwogICAgfSwKICAgIC8vIOiuouWNleivpuaDhQogICAgZ29PcmRlckRldGFpbDogZnVuY3Rpb24gZ29PcmRlckRldGFpbChpdGVtKSB7CiAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHsKICAgICAgICBwYXRoOiAiL2tlZnUvb3JkZXJEZXRhaWwvIi5jb25jYXQoaXRlbS5vcmRlckluZm8uaWQpCiAgICAgIH0pOwogICAgfSwKICAgIC8vIOW6lemDqOWKn+iDveWMuuaJk+W8gAogICAgb3BlbkJveDogZnVuY3Rpb24gb3BlbkJveChrZXkpIHsKICAgICAgdmFyIF90aGlzOCA9IHRoaXM7CgogICAgICBpZiAoa2V5ID09IDEpIHsKICAgICAgICB0aGlzLmlzVG9vbCA9IGZhbHNlOwogICAgICAgIHRoaXMuaXNTd2lwZXIgPSAhdGhpcy5pc1N3aXBlcjsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLmlzU3dpcGVyID0gZmFsc2U7CiAgICAgICAgdGhpcy5pc1Rvb2wgPSAhdGhpcy5pc1Rvb2w7CiAgICAgIH0KCiAgICAgIHRoaXMuJHJlZnNbJ3Njcm9sbEJveCddLnJlZnJlc2goKTsKICAgICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKCkgewogICAgICAgIF90aGlzOC5zY3JvbGxCb20oKTsKICAgICAgfSk7CiAgICB9LAogICAgc2hvd1dvcmRzOiBmdW5jdGlvbiBzaG93V29yZHMoKSB7CiAgICAgIHRoaXMuaXNXb3JkcyA9IHRydWU7CiAgICB9LAogICAgLy8g6L2s5o6lCiAgICBnb1RyYW5zZmVyOiBmdW5jdGlvbiBnb1RyYW5zZmVyKCkgewogICAgICB0aGlzLmlzVHJhbnNmZXIgPSB0cnVlOwogICAgfSwKICAgIC8vIOi9rOaOpeWFs+mXrQogICAgY2xvc2VUcmFuc2ZlcjogZnVuY3Rpb24gY2xvc2VUcmFuc2ZlcigpIHsKICAgICAgdGhpcy50cmFuc2Zlckxpc3QuZm9yRWFjaChmdW5jdGlvbiAoZWwsIGluZGV4KSB7CiAgICAgICAgZWwuaXNDaGVjayA9IGZhbHNlOwogICAgICB9KTsKICAgICAgdGhpcy5pc1RyYW5zZmVyID0gZmFsc2U7CiAgICB9LAogICAgLy8g5ZWG5ZOB5L+h5oGvCiAgICBnb29kc0luZm86IGZ1bmN0aW9uIGdvb2RzSW5mbygpIHsKICAgICAgdGhpcy4kcm91dGVyLnB1c2goewogICAgICAgIHBhdGg6ICcva2VmdS9nb29kcy9saXN0P3RvVWlkPScgKyB0aGlzLnRvVWlkCiAgICAgIH0pOwogICAgfSwKICAgIC8vIOihqOaDheeCueWHuwogICAgYWRkRW1vamk6IGZ1bmN0aW9uIGFkZEVtb2ppKGl0ZW0pIHsKICAgICAgdmFyIHZhbCA9ICJbIi5jb25jYXQoaXRlbSwgIl0iKTsKICAgICAgdGhpcy5jb24gKz0gdmFsOwogICAgfSwKICAgIC8vIOiBiuWkqeihqOaDhei9rOaNogogICAgcmVwbGFjZV9lbTogZnVuY3Rpb24gcmVwbGFjZV9lbShzdHIpIHsKICAgICAgc3RyID0gc3RyLnJlcGxhY2UoL1xbZW0tKFtcc1xTXSopXF0vZywgIjxzcGFuIGNsYXNzPSdlbSBlbS0kMScvPjwvc3Bhbj4iKTsKICAgICAgcmV0dXJuIHN0cjsKICAgIH0sCiAgICAvLyDojrflj5bogYrlpKnliJfooagKICAgIGdldENoYXRMaXN0OiBmdW5jdGlvbiBnZXRDaGF0TGlzdCgpIHsKICAgICAgdmFyIF90aGlzOSA9IHRoaXM7CgogICAgICB2YXIgc2VsZiA9IHRoaXM7CiAgICAgIGNoYXRMaXN0QXBpKHsKICAgICAgICBsaW1pdDogdGhpcy5saW1pdCwKICAgICAgICB1aWQ6IHRoaXMudG9VaWQsCiAgICAgICAgdXBwZXJJZDogdGhpcy51cHBlcklkLAogICAgICAgIHRva2VuOiB0aGlzLnVzZXJUb2tlbgogICAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXMpIHsKICAgICAgICB2YXIgc0ggPSAwOwogICAgICAgIHJlcy5kYXRhLmZvckVhY2goZnVuY3Rpb24gKGVsKSB7CiAgICAgICAgICBpZiAoZWwubXNuX3R5cGUgPT0gMSB8fCBlbC5tc25fdHlwZSA9PSAyKSB7CiAgICAgICAgICAgIGVsLm1zbiA9IF90aGlzOS5yZXBsYWNlX2VtKGVsLm1zbik7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgdmFyIHNlbGVjdG9yID0gJyc7CgogICAgICAgIGlmIChfdGhpczkudXBwZXJJZCA9PSAwKSB7CiAgICAgICAgICBzZWxlY3RvciA9ICJjaGF0XyIuY29uY2F0KHJlcy5kYXRhW3Jlcy5kYXRhLmxlbmd0aCAtIDFdLmlkKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgc2VsZWN0b3IgPSAiY2hhdF8iLmNvbmNhdChfdGhpczkuY2hhdExpc3RbMF0uaWQpOwogICAgICAgIH0KCiAgICAgICAgX3RoaXM5LnNlbGVjdG9yID0gc2VsZWN0b3I7CiAgICAgICAgX3RoaXM5LmNoYXRMaXN0ID0gW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShyZXMuZGF0YSksIF90b0NvbnN1bWFibGVBcnJheShfdGhpczkuY2hhdExpc3QpKTsKICAgICAgICBfdGhpczkubG9hZGluZyA9IGZhbHNlOwogICAgICAgIF90aGlzOS5pc1Njcm9sbCA9IHJlcy5kYXRhLmxlbmd0aCA+PSBfdGhpczkubGltaXQ7CgogICAgICAgIF90aGlzOS4kcmVmc1snc2Nyb2xsQm94J10ucmVmcmVzaCgpOwoKICAgICAgICBfdGhpczkuJG5leHRUaWNrKGZ1bmN0aW9uICgpIHsKICAgICAgICAgIF90aGlzOS4kZW1pdCgnY2hhbmdlJywgdHJ1ZSk7CgogICAgICAgICAgdmFyIG51bSA9IHBhcnNlRmxvYXQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoc2VsZWN0b3IpLm9mZnNldFRvcCkgLSA2MDsKCiAgICAgICAgICBfdGhpczkuJHJlZnNbJ3Njcm9sbEJveCddLnNjcm9sbFRvKHsKICAgICAgICAgICAgeTogbnVtCiAgICAgICAgICB9LCAwKTsKICAgICAgICB9KTsKICAgICAgfSk7CiAgICB9LAogICAgLy8g5Y+R6YCB6K6i5Y2VCiAgICBzZW5kT3JkZXI6IGZ1bmN0aW9uIHNlbmRPcmRlcigpIHsKICAgICAgdGhpcy5zZW5kTXNnKHRoaXMub3JkZXJJZCwgNik7CiAgICAgIHRoaXMub3JkZXJJZCA9IDA7CiAgICAgIHRoaXMub3JkZXJJbmZvID0ge307CiAgICB9LAogICAgLy8g5Y+R6YCB5ZWG5ZOBCiAgICBzZW5kUHJvZHVjdDogZnVuY3Rpb24gc2VuZFByb2R1Y3QoKSB7CiAgICAgIHRoaXMuc2VuZE1zZyh0aGlzLnByb2R1Y3RJZCwgNSk7CiAgICAgIHRoaXMucHJvZHVjdElkID0gMDsKICAgICAgdGhpcy5wcm9kdWN0SW5mbyA9IHt9OwogICAgfSwKICAgIC8vIOWPkemAgea2iOaBrwogICAgc2VuZFRleHQ6IGZ1bmN0aW9uIHNlbmRUZXh0KCkgewogICAgICBpZiAoIXRoaXMuaXNTZW5kKSB7CiAgICAgICAgdGhpcy4kTWVzc2FnZS5lcnJvcign6K+36L6T5YWl5YaF5a65Jyk7CiAgICAgIH0KCiAgICAgIHRoaXMuc2VuZE1zZyh0aGlzLmNvbiwgMSk7CiAgICAgIHRoaXMuY29uID0gJyc7CiAgICB9LAogICAgLy8gd3Plj5HpgIEKICAgIHNlbmRNc2c6IGZ1bmN0aW9uIHNlbmRNc2cobXNuLCB0eXBlKSB7CiAgICAgIHZhciBvYmogPSB7CiAgICAgICAgdHlwZTogJ2NoYXQnLAogICAgICAgIGRhdGE6IHsKICAgICAgICAgIG1zbjogbXNuLAogICAgICAgICAgdHlwZTogdHlwZSwKICAgICAgICAgIGlzX3RvdXJpc3Q6IHRoaXMudXNlclRva2VuID8gMCA6IDEsCiAgICAgICAgICB0b191aWQ6IHRoaXMudG9VaWQsCiAgICAgICAgICB0b3VyaXN0X3VpZDogdGhpcy50b3VyaXN0X3VpZCwKICAgICAgICAgIGZvcm1fdHlwZTogdGhpcy4kd2VjaGF0LmlzV2VpeGluKCkgPyAxIDogMywKICAgICAgICAgIHRvdXJpc3RfYXZhdGFyOiB0aGlzLnVzZXJUb2tlbiA/ICcnIDogdGhpcy50b3VyaXN0X2F2YXRhcgogICAgICAgIH0KICAgICAgfTsKICAgICAgU29ja2V0LnRoZW4oZnVuY3Rpb24gKHdzKSB7CiAgICAgICAgd3Muc2VuZChvYmopOwogICAgICB9KTsKICAgIH0sCiAgICAvLyDlm77niYfkuIrkvKAKICAgIHVwbG9hZEltZzogZnVuY3Rpb24gdXBsb2FkSW1nKCkgewogICAgICB2YXIgc2VsZiA9IHRoaXM7CiAgICAgIHNlbGYuJHV0aWwudXBsb2FkSW1hZ2VPbmUoJ3VwbG9hZC9pbWFnZScsIGZ1bmN0aW9uIChyZXMpIHsKICAgICAgICBpZiAocmVzLnN0YXR1cyA9PSAyMDApIHsKICAgICAgICAgIHNlbGYuc2VuZE1zZyhyZXMuZGF0YS51cmwsIDMpOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9LAogICAgLy8gIOWVhuWTgeivpuaDhemhtQogICAgZ29Qcm9kdWN0OiBmdW5jdGlvbiBnb1Byb2R1Y3QoaXRlbSkgewogICAgICB2YXIgdXJsID0gd2luZG93LmxvY2F0aW9uLnByb3RvY29sICsgJy8vJyArIHdpbmRvdy5sb2NhdGlvbi5ob3N0ICsgJy9wYWdlcy9nb29kc19kZXRhaWxzL2luZGV4P2lkPScgKyBpdGVtLm1zbjsKICAgICAgd2luZG93Lm9wZW4odXJsLCAnX2JsYW5rJyk7CiAgICB9LAogICAgLy8g55So5oi36K6i5Y2VCiAgICBnb0FkbWluT3JkZXI6IGZ1bmN0aW9uIGdvQWRtaW5PcmRlcigpIHsKICAgICAgLy8gdGhpcy4kcm91dGVyLnB1c2goewogICAgICAvLyAgICAgcGF0aDonL2tlZnUvb3JkZXJMaXN0LzAvJyt0aGlzLnRvVWlkCiAgICAgIC8vIH0pCiAgICAgIHZhciB1cmwgPSB3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wgKyAnLy8nICsgd2luZG93LmxvY2F0aW9uLmhvc3QgKyAnL3BhZ2VzL2dvb2RzL29yZGVyX2RldGFpbHMvaW5kZXg/b3JkZXJfaWQ9JyArIGl0ZW0ubXNuOwogICAgICB3aW5kb3cub3Blbih1cmwsICdfYmxhbmsnKTsKICAgIH0sCiAgICAvLyDmu5rliqjliLDlupXpg6gKICAgIGhlaWdodDogZnVuY3Rpb24gaGVpZ2h0KCkgewogICAgICB2YXIgc2VsZiA9IHRoaXM7CiAgICAgIHZhciBzY3JvbGxUb3AgPSAwOwogICAgICB2YXIgaW5mbyA9IHVuaS5jcmVhdGVTZWxlY3RvclF1ZXJ5KCkuc2VsZWN0KCcuY2hhdCcpOwogICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uIChyZXMpIHsKICAgICAgICBpbmZvLmJvdW5kaW5nQ2xpZW50UmVjdChmdW5jdGlvbiAoZGF0YSkgewogICAgICAgICAgLy9kYXRhIC0g5ZCE56eN5Y+C5pWwCiAgICAgICAgICBzY3JvbGxUb3AgPSBkYXRhLmhlaWdodDsKCiAgICAgICAgICBpZiAoc2VsZi5hY3RpdmUpIHsKICAgICAgICAgICAgc2VsZi5zY3JvbGxUb3AgPSBwYXJzZUludChzY3JvbGxUb3ApICsgNTAwOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgc2VsZi5zY3JvbGxUb3AgPSBwYXJzZUludChzY3JvbGxUb3ApICsgMTAwOwogICAgICAgICAgfQogICAgICAgIH0pLmV4ZWMoKTsKICAgICAgfSwgMTAwMCk7CiAgICB9LAogICAgaGFuZGxlQWN0aXZhdGU6IGZ1bmN0aW9uIGhhbmRsZUFjdGl2YXRlKHZtLCByZWZyZXNoRG9tKSB7CiAgICAgIHRoaXMudXBwZXJJZCA9IHRoaXMuY2hhdExpc3RbMF0uaWQ7CiAgICB9LAogICAgaGFuZGxlU3RhcnQ6IGZ1bmN0aW9uIGhhbmRsZVN0YXJ0KHZtLCByZWZyZXNoRG9tLCBkb25lKSB7CiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICAgIC8vIGxvYWQgZmluaXNoZWQKICAgICAgICBkb25lKCk7CiAgICAgIH0sIDIwMDApOwogICAgfSwKICAgIGhhbmRsZUJlZm9yZURlYWN0aXZhdGU6IGZ1bmN0aW9uIGhhbmRsZUJlZm9yZURlYWN0aXZhdGUodm0sIHJlZnJlc2hEb20sIGRvbmUpIHsKICAgICAgaWYgKHRoaXMudXNlclRva2VuKSB7CiAgICAgICAgdGhpcy5nZXRDaGF0TGlzdCgpOwogICAgICAgIHRoaXMuJG9uKCdjaGFuZ2UnLCBmdW5jdGlvbiAoZGF0YSkgewogICAgICAgICAgaWYgKGRhdGEpIGRvbmUoKTsKICAgICAgICB9KTsKICAgICAgfSBlbHNlIHsKICAgICAgICBkb25lKCk7CiAgICAgIH0KICAgIH0sCiAgICBoYW5kbGVEZWFjdGl2YXRlOiBmdW5jdGlvbiBoYW5kbGVEZWFjdGl2YXRlKHZtLCByZWZyZXNoRG9tKSB7CiAgICAgIHZhciBudW0gPSBwYXJzZUZsb2F0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuc2VsZWN0b3IpLm9mZnNldFRvcCkgLSA2MDsKICAgICAgdGhpcy4kcmVmc1snc2Nyb2xsQm94J10uc2Nyb2xsVG8oewogICAgICAgIHk6IG51bQogICAgICB9LCAwKTsKICAgIH0KICB9Cn07"},{"version":3,"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6HA;AACA;AACA;AACA;AACA;AACA;;AACA;EACAA;EACA;EACAC;IACA;MACAC;IACA;;IACAA;EACA,CALA;EAMA;AACA,CAVA;;AAYA;EACAC,mBADA;EAEAC,IAFA,kBAEA;IACA;MACAC;QACAC;UACAC,aADA;UAEAC,aAFA;UAGAC,WAHA;UAIAC,mBAJA;UAKAC;YACAH,YADA;YAEAC,WAFA;YAGAC,mBAHA;YAIAE;cACAC,YADA;cAEAC,gBAFA;cAGAC,mBAHA;cAIAC;YAJA;UAJA,CALA;UAgBAC;YACAT;UADA;QAhBA,CADA;QAqBAU;UACAC,qBADA;UAEAC,aAFA;UAGAC;QAHA;MArBA,CADA;MA4BAC,iBA5BA;MA6BAC,aA7BA;MA8BAC,cA9BA;MA+BAC,aA/BA;MAgCAC,eAhCA;MAiCAC,cAjCA;MAkCAC,eAlCA;MAmCAC,cAnCA;MAoCAC,cApCA;MAqCAC,aArCA;MAsCAC,gCAtCA;MAuCAC,OAvCA;MAwCAC,SAxCA;MAyCAC,SAzCA;MA0CAC,UA1CA;MA2CAC,YA3CA;MA4CAC,YA5CA;MA6CAC,YA7CA;MA8CAzB,YA9CA;MA+CA0B,cA/CA;MAgDAC,YAhDA;MAiDAC,YAjDA;MAkDAC,gBAlDA;MAkDA;MACAC,iBAnDA;MAoDAC,cApDA;MAoDA;MACAC,UArDA;MAsDAC,WAtDA;MAuDAC,aAvDA;MAwDAC,eAxDA;MAwDA;MACAC,WAzDA;MA0DAC,aA1DA;MA2DAC,YA3DA;MA4DAC,aA5DA;MA6DAC,eA7DA;MA8DAC;IA9DA;EAgEA,CAnEA;EAoEAC;IACAC,MADA,oBACA;MACA;QACA;MACA,CAFA,MAEA;QACA;MACA;IACA,CAPA;IAQAC,OARA,qBAQA;MAAA;;MACA;QACAC;;QACA;UACA;YACAA;UACA,CAFA,MAEA;YACAA;UACA;QACA,CANA,MAMA;UACAA;QACA;;QACA;MACA,CAZA;IAaA;EAtBA,CApEA;EA4FAC,OA5FA,qBA4FA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;EACA,CApGA;EAqGAC,OArGA,qBAqGA;IAAA;;IACA;IACA;IACA;;IACA;MACA;MACA;IACA,CAPA,CAQA;;;IACA;IACAC;MACA;QACAC;UACAC,aADA;UAEA5D;QAFA;MAIA,CANA,CAOA;;;MACA2D;QACA;UACA3D;QACA;;QACA;;QACA;UACA;;UACA;QACA,CAHA;;QAIA6D;UACA;QACA,CAFA,EAEA,GAFA;MAGA,CAZA;MAaAF;QACA;MACA,CAFA;MAGAA;QACA;MACA,CAFA;MAGAA;QACAA;UACA3D;YACA8D;UADA,CADA;UAIAF;QAJA;MAMA,CAPA;MAQAD;QACA;UACAI;YACAC,WADA;YAEAC,wBAFA;YAGAC,YAHA;YAIAC,gBAJA;YAKAC;cACAL;gBACAM;cADA;YAGA;UATA;QAWA;MACA,CAdA;IAeA,CAlDA;IAmDA;EACA,CAnKA;EAoKAC;IACAC,MADA,oBACA;MACA;IACA,CAHA;IAIAC,iBAJA,6BAIAC,IAJA,EAIA;MACA;IACA,CANA;IAOA;IACAC,YARA,0BAQA;MAAA;;MACA;MACAC,2BACAC,IADA,CACA;QACA;MACA,CAHA,EAIAC,KAJA,CAIA;QACA;MACA,CANA;IAOA,CAjBA;IAkBA;IACAC,YAnBA,0BAmBA;MAAA;;MACA;MACAC;QACAC;MADA,GAEAJ,IAFA,CAEA;QACA;;QACA;UACA,oEACA,CADA,EAEA,4CAFA;QAIA;;QACA;UACA;QACA;MACA,CAbA;IAcA,CAnCA;IAoCA;IACAK,cArCA,4BAqCA;MAAA;;MACAC;QACAF;MADA,GAGAJ,IAHA,CAGA;QACA;QACA;QACAO;QACA;;QACA;UACA;QACA;;QACA;UACAnF;YACA8D,gBADA;YAEAjB;UAFA,CADA;UAKAe;QALA;QAOAF;UACAC;QACA,CAFA;MAGA,CArBA,EAsBAkB,KAtBA,CAsBA;QACA;;QACAhB;UACA;YACAQ;UADA;QAGA,CAJA,EAIA,IAJA;MAKA,CA7BA;IA8BA,CApEA;IAqEA;IACAe,YAtEA,wBAsEAX,IA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","names":["num","arr","ret","name","data","ops","vuescroll","mode","enable","auto","autoLoadDistance","pullRefresh","tips","deactive","active","start","beforeDeactive","pushLoad","bar","background","opacity","size","swiperOptions","status","loading","isTool","isSwiper","isWords","autoplay","circular","interval","duration","emojiGroup","con","toUid","limit","upperId","chatList","kefuInfo","scrollTop","isScroll","oldHeight","selector","transferList","isTransfer","uploadData","header","fileUrl","userToken","tourist_uid","orderId","orderInfo","cartInfo","productId","productInfo","tourist_avatar","computed","isSend","records","item","created","mounted","Socket","ws","type","setTimeout","id","that","title","content","okText","cancelText","onOk","path","methods","goBack","handleFormatError","file","getGoodsInfo","productApi","then","catch","getOrderInfo","getOrderApi","token","getServiceList","serviceListApi","document","beforeUpload","filename","resolve","handleSuccess","res","fileList","scrollBom","y","goOrderDetail","openBox","key","showWords","goTransfer","closeTransfer","el","goodsInfo","addEmoji","replace_em","str","getChatList","chatListApi","uid","sendOrder","sendProduct","sendText","sendMsg","msn","is_tourist","to_uid","form_type","uploadImg","self","goProduct","window","goAdminOrder","height","info","boundingClientRect","exec","handleActivate","vm","refreshDom","handleStart","done","handleBeforeDeactivate","handleDeactivate"],"sourceRoot":"src/pages/kefu/appChat/mobile","sources":["index.vue"],"sourcesContent":["<template>\r\n <div class=\"chat-box\">\r\n <div class=\"head-box\">\r\n <div class=\"back\" @click=\"goBack\"><span class=\"iconfont iconfanhui\"></span></div>\r\n <div class=\"title\">{{ nickname ? nickname + '-' : '' }}对话详情</div>\r\n </div>\r\n <!-- 商品信息 -->\r\n <div class=\"broadcast-details_box\" v-if=\"productId && productInfo.id\">\r\n <div class=\"broadcast_details_img\">\r\n <img :src=\"productInfo.image\" />\r\n </div>\r\n <div class=\"broadcast_details_picBox\">\r\n <div class=\"broadcast_details_tit\" v-text=\"productInfo.store_name\"></div>\r\n <div class=\"acea-row row-between\">\r\n <div class=\"broadcast_details_pic\">\r\n ¥{{ productInfo.price }}<span class=\"broadcast_details_pic_num\">¥{{ productInfo.ot_price }}</span>\r\n </div>\r\n <div class=\"broadcast_details_btn\" @click=\"sendProduct\">发送客服</div>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- 订单发送 -->\r\n <div class=\"broadcast_box\" v-if=\"orderId && orderInfo.id\">\r\n <div class=\"broadcast-details_num broadcast_num\">\r\n <span>订单号:{{ orderInfo.order_id }}</span>\r\n <span>{{ orderInfo.add_time_y }} {{ orderInfo.add_time_h }}</span>\r\n </div>\r\n <div class=\"broadcast-details_box\">\r\n <div class=\"broadcast_details_img\">\r\n <img :src=\"cartInfo.productInfo.image\" />\r\n <div class=\"broadcast_details_model\">{{ orderInfo.cartInfo ? orderInfo.cartInfo.length : 0 }}件商品</div>\r\n </div>\r\n <div class=\"broadcast_details_picBox\">\r\n <div class=\"broadcast_details_tit\">\r\n {{ cartInfo.productInfo.store_name }}\r\n </div>\r\n <div class=\"acea-row row-between\">\r\n <div class=\"broadcast_details_pic\">\r\n ¥{{ cartInfo.productInfo.price\r\n }}<text class=\"broadcast_details_pic_num\">¥{{ cartInfo.productInfo.ot_price }}</text>\r\n </div>\r\n <div class=\"broadcast_details_btn\" @click=\"sendOrder\">发送客服</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"chat-scroll-box\">\r\n <vue-scroll\r\n :ops=\"ops\"\r\n ref=\"scrollBox\"\r\n @refresh-activate=\"handleActivate\"\r\n @refresh-start=\"handleStart\"\r\n @refresh-before-deactivate=\"handleBeforeDeactivate\"\r\n @refresh-deactivate=\"handleDeactivate\"\r\n >\r\n <div class=\"slot-refresh\" slot=\"refresh-deactive\"></div>\r\n <div class=\"slot-refresh\" slot=\"refresh-beforeDeactive\"></div>\r\n <div id=\"chatBox\" class=\"chat\" ref=\"chat\" style=\"padding: 0.3rem\">\r\n <div v-for=\"(item, index) in records\" :key=\"index\" :id=\"`chat_${item.id}`\">\r\n <div class=\"day-box\" v-if=\"item.show\">{{ item.time }}</div>\r\n <div class=\"chat-item\" :class=\"{ 'right-box': item.to_uid == toUid }\">\r\n <img class=\"avatar\" :src=\"item.avatar\" mode=\"\" />\r\n <!-- 消息 -->\r\n <div class=\"msg-box\" v-if=\"item.msn_type == 1\" v-html=\"item.msn\"></div>\r\n <!-- 图片 -->\r\n <div class=\"img-box\" v-if=\"item.msn_type == 3\" v-viewer><img v-lazy=\"item.msn\" mode=\"widthFix\" /></div>\r\n <!-- 商品 -->\r\n <div class=\"product-box\" v-if=\"item.msn_type == 5\" @click=\"goProduct(item)\">\r\n <img :src=\"item.productInfo.image\" />\r\n <div class=\"info\">\r\n <div class=\"price\"><span>¥</span>{{ item.productInfo.price }}</div>\r\n <div class=\"name line2\">{{ item.productInfo.store_name }}</div>\r\n </div>\r\n </div>\r\n <!-- 订单 -->\r\n <div class=\"order-box\" v-if=\"item.msn_type == 6\" @click=\"goOrderDetail(item)\">\r\n <div class=\"title\">订单ID: {{ item.orderInfo.order_id }}</div>\r\n <div class=\"info\">\r\n <img :src=\"item.orderInfo.cartInfo[0].productInfo.image\" />\r\n <div class=\"product-info\">\r\n <div class=\"name line2\">{{ item.orderInfo.cartInfo[0].productInfo.store_name }}</div>\r\n <div class=\"price\">¥{{ item.orderInfo.cartInfo[0].productInfo.price }}</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </vue-scroll>\r\n </div>\r\n <div class=\"footer-box\">\r\n <div class=\"words\" v-if=\"userToken\" @click=\"showWords\">\r\n <Upload\r\n :show-upload-list=\"false\"\r\n :action=\"fileUrl\"\r\n :before-upload=\"beforeUpload\"\r\n :data=\"uploadData\"\r\n :headers=\"header\"\r\n :multiple=\"true\"\r\n :on-success=\"handleSuccess\"\r\n :format=\"['jpg', 'jpeg', 'png', 'gif']\"\r\n :on-format-error=\"handleFormatError\"\r\n style=\"margin-top: 1px; display: inline-block\"\r\n >\r\n <span class=\"iconfont icontupian3\"></span>\r\n </Upload>\r\n </div>\r\n <div class=\"input-box\">\r\n <Input v-model=\"con\" placeholder=\"请输入内容\" />\r\n <span class=\"iconfont iconfasong\" @click=\"sendText\" :class=\"{ isSend: isSend }\"></span>\r\n </div>\r\n <div class=\"emoji\" @click=\"openBox(1)\"><span class=\"iconfont iconbiaoqing2\"></span></div>\r\n </div>\r\n <!-- 表情 -->\r\n <div class=\"banner slider-banner\" v-show=\"isSwiper\">\r\n <swiper class=\"swiper-wrapper\" ref=\"mySwiper\" :options=\"swiperOptions\">\r\n <swiper-slide v-for=\"(emojiList, index) in emojiGroup\" :key=\"index\">\r\n <i class=\"em\" :class=\"emoji\" v-for=\"emoji in emojiList\" :key=\"emoji\" @click=\"addEmoji(emoji)\"></i>\r\n </swiper-slide>\r\n </swiper>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport Setting from '@/setting';\r\nimport { Socket } from '@/libs/socket';\r\nimport util from '@/libs/util';\r\nimport emojiList from '@/utils/emoji';\r\nimport { serviceList, serviceListApi, getOrderApi, chatListApi, productApi } from '@/api/kefu';\r\nimport { getCookies, removeCookies, setCookies } from '@/libs/util';\r\nconst chunk = function (arr, num) {\r\n num = num * 1 || 1;\r\n var ret = [];\r\n arr.forEach(function (item, i) {\r\n if (i % num === 0) {\r\n ret.push([]);\r\n }\r\n ret[ret.length - 1].push(item);\r\n });\r\n return ret;\r\n};\r\n\r\nexport default {\r\n name: 'chat_mobile',\r\n data() {\r\n return {\r\n ops: {\r\n vuescroll: {\r\n mode: 'slide',\r\n enable: false,\r\n auto: false,\r\n autoLoadDistance: 0,\r\n pullRefresh: {\r\n enable: true,\r\n auto: false,\r\n autoLoadDistance: 0,\r\n tips: {\r\n deactive: '',\r\n active: '上拉加载更多',\r\n start: 'Loading...',\r\n beforeDeactive: ' ',\r\n },\r\n },\r\n pushLoad: {\r\n enable: false,\r\n },\r\n },\r\n bar: {\r\n background: '#393232',\r\n opacity: '.5',\r\n size: '2px',\r\n },\r\n },\r\n swiperOptions: {},\r\n status: false,\r\n loading: false,\r\n isTool: false,\r\n isSwiper: false,\r\n isWords: false,\r\n autoplay: false,\r\n circular: true,\r\n interval: 3000,\r\n duration: 500,\r\n emojiGroup: chunk(emojiList, 21),\r\n con: '',\r\n toUid: '',\r\n limit: 15,\r\n upperId: 0,\r\n chatList: [],\r\n kefuInfo: {},\r\n scrollTop: 0,\r\n active: true,\r\n isScroll: true,\r\n oldHeight: 0,\r\n selector: '',\r\n transferList: [], //转接列表\r\n isTransfer: false,\r\n uploadData: {}, // 上传参数\r\n header: {},\r\n fileUrl: '',\r\n userToken: '',\r\n tourist_uid: '', //游客的uid\r\n orderId: '',\r\n orderInfo: '',\r\n cartInfo: '',\r\n productId: '',\r\n productInfo: '',\r\n tourist_avatar: '',\r\n };\r\n },\r\n computed: {\r\n isSend() {\r\n if (this.con.length == 0) {\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n },\r\n records() {\r\n return this.chatList.map((item, index) => {\r\n item.time = this.$moment(item.add_time * 1000).format('MMMDo h:mm');\r\n if (index) {\r\n if (item.add_time - this.chatList[index - 1].add_time >= 300) {\r\n item.show = true;\r\n } else {\r\n item.show = false;\r\n }\r\n } else {\r\n item.show = true;\r\n }\r\n return item;\r\n });\r\n },\r\n },\r\n created() {\r\n let token = localStorage.getItem('LOGIN_STATUS_TOKEN') || '';\r\n this.fileUrl = Setting.apiBaseURL.replace('adminapi', 'kefuapi') + '/tourist/upload';\r\n this.userToken = token;\r\n this.toUid = this.$route.query.toUid || '';\r\n this.nickname = this.$route.query.nickname || '';\r\n this.orderId = this.$route.query.orderId || '';\r\n this.productId = this.$route.query.product_id || '';\r\n },\r\n mounted() {\r\n if (!this.$wechat._isMobile()) this.$router.replace('/kefu/appChat');\r\n let that = this;\r\n this.getServiceList();\r\n if (this.userToken) {\r\n this.getOrderInfo();\r\n this.getGoodsInfo();\r\n }\r\n // 上传头部token\r\n this.header['Authori-zation'] = 'Bearer ' + getCookies('kefu_token');\r\n Socket.then((ws) => {\r\n if (this.userToken) {\r\n ws.send({\r\n type: 'login',\r\n data: this.userToken,\r\n });\r\n }\r\n // 消息接收\r\n ws.$on(['reply', 'chat'], (data) => {\r\n if (data.msn_type == 1 || data.msn_type == 2) {\r\n data.msn = this.replace_em(data.msn);\r\n }\r\n this.chatList.push(data);\r\n this.$nextTick(() => {\r\n this.$refs['scrollBox'].refresh();\r\n this.scrollBom();\r\n });\r\n setTimeout((res) => {\r\n this.$refs['scrollBox'].refresh();\r\n }, 300);\r\n });\r\n ws.$on('socket_error', () => {\r\n this.$Message.error('连接失败');\r\n });\r\n ws.$on('error', () => {\r\n this.$Message.error('连接失败');\r\n });\r\n ws.$on('to_transfer', (data) => {\r\n ws.send({\r\n data: {\r\n id: data.toUid,\r\n },\r\n type: 'to_chat',\r\n });\r\n });\r\n ws.$on('online', (data) => {\r\n if (data.online == 0 && data.uid == that.toUid) {\r\n that.$Modal.confirm({\r\n title: '提示',\r\n content: '客服已离线,是否需要反馈?',\r\n okText: '确定',\r\n cancelText: '取消',\r\n onOk: () => {\r\n that.$router.replace({\r\n path: '/kefu/mobile_feedback',\r\n });\r\n },\r\n });\r\n }\r\n });\r\n });\r\n this.$nextTick(() => {});\r\n },\r\n methods: {\r\n goBack() {\r\n this.$router.go(-1);\r\n },\r\n handleFormatError(file) {\r\n this.$Message.error('上传图片只能是 jpg、jpg、jpeg、gif 格式!');\r\n },\r\n // 获取商品信息\r\n getGoodsInfo() {\r\n if (!this.productId) return;\r\n productApi(this.productId)\r\n .then((res) => {\r\n this.productInfo = res.data;\r\n })\r\n .catch((err) => {\r\n this.$Message.error(err.msg);\r\n });\r\n },\r\n // 获取订单信息\r\n getOrderInfo() {\r\n if (!this.orderId) return;\r\n getOrderApi(this.orderId, {\r\n token: this.userToken,\r\n }).then((res) => {\r\n this.orderInfo = res.data;\r\n if (this.orderInfo.add_time_h) {\r\n this.orderInfo.add_time_h = this.orderInfo.add_time_h.substring(\r\n 0,\r\n this.orderInfo.add_time_h.lastIndexOf(':'),\r\n );\r\n }\r\n if (this.orderInfo.cartInfo.length) {\r\n this.cartInfo = this.orderInfo.cartInfo[0];\r\n }\r\n });\r\n },\r\n // 获取随机客服\r\n getServiceList() {\r\n serviceListApi({\r\n token: this.userToken,\r\n })\r\n .then((res) => {\r\n this.toUid = res.data.uid;\r\n this.tourist_uid = res.data.tourist_uid;\r\n document.title = res.data.nickname;\r\n this.tourist_avatar = res.data.tourist_avatar;\r\n if (this.userToken) {\r\n this.getChatList();\r\n }\r\n let obj = {\r\n data: {\r\n id: res.data.uid,\r\n tourist_uid: this.tourist_uid,\r\n },\r\n type: 'to_chat',\r\n };\r\n Socket.then((ws) => {\r\n ws.send(obj);\r\n });\r\n })\r\n .catch((error) => {\r\n this.$Message.error(error.msg);\r\n setTimeout((res) => {\r\n this.$router.replace({\r\n path: '/kefu/mobile_feedback',\r\n });\r\n }, 2000);\r\n });\r\n },\r\n // 上传之前\r\n beforeUpload(file) {\r\n const isImage = file.type === 'image/jpeg' || file.type === 'image/png';\r\n if (!isImage) {\r\n this.$Message.error('上传图片只能是 JPG、PNG 格式!');\r\n }\r\n this.uploadData = {\r\n filename: file,\r\n token: this.userToken,\r\n };\r\n let promise = new Promise((resolve) => {\r\n this.$nextTick(function () {\r\n resolve(true);\r\n });\r\n });\r\n return promise;\r\n },\r\n // 上传成功\r\n handleSuccess(res, file, fileList) {\r\n if (res.status === 200) {\r\n this.$Message.success(res.msg);\r\n this.sendMsg(res.data.url, 3);\r\n } else {\r\n this.$Message.error(res.msg);\r\n }\r\n },\r\n // 滚动到底部\r\n scrollBom() {\r\n setTimeout((res) => {\r\n let num = parseFloat(document.getElementById('chatBox').offsetHeight);\r\n if (this.$refs['scrollBox']) {\r\n this.$refs['scrollBox'].scrollTo(\r\n {\r\n y: num,\r\n },\r\n 300,\r\n );\r\n }\r\n }, 300);\r\n },\r\n // 订单详情\r\n goOrderDetail(item) {\r\n this.$router.push({\r\n path: `/kefu/orderDetail/${item.orderInfo.id}`,\r\n });\r\n },\r\n // 底部功能区打开\r\n openBox(key) {\r\n if (key == 1) {\r\n this.isTool = false;\r\n this.isSwiper = !this.isSwiper;\r\n } else {\r\n this.isSwiper = false;\r\n this.isTool = !this.isTool;\r\n }\r\n this.$refs['scrollBox'].refresh();\r\n this.$nextTick(() => {\r\n this.scrollBom();\r\n });\r\n },\r\n showWords() {\r\n this.isWords = true;\r\n },\r\n\r\n // 转接\r\n goTransfer() {\r\n this.isTransfer = true;\r\n },\r\n // 转接关闭\r\n closeTransfer() {\r\n this.transferList.forEach((el, index) => {\r\n el.isCheck = false;\r\n });\r\n this.isTransfer = false;\r\n },\r\n // 商品信息\r\n goodsInfo() {\r\n this.$router.push({\r\n path: '/kefu/goods/list?toUid=' + this.toUid,\r\n });\r\n },\r\n // 表情点击\r\n addEmoji(item) {\r\n let val = `[${item}]`;\r\n this.con += val;\r\n },\r\n // 聊天表情转换\r\n replace_em(str) {\r\n str = str.replace(/\\[em-([\\s\\S]*)\\]/g, \"<span class='em em-$1'/></span>\");\r\n return str;\r\n },\r\n // 获取聊天列表\r\n getChatList() {\r\n let self = this;\r\n chatListApi({\r\n limit: this.limit,\r\n uid: this.toUid,\r\n upperId: this.upperId,\r\n token: this.userToken,\r\n }).then((res) => {\r\n var sH = 0;\r\n res.data.forEach((el) => {\r\n if (el.msn_type == 1 || el.msn_type == 2) {\r\n el.msn = this.replace_em(el.msn);\r\n }\r\n });\r\n let selector = '';\r\n if (this.upperId == 0) {\r\n selector = `chat_${res.data[res.data.length - 1].id}`;\r\n } else {\r\n selector = `chat_${this.chatList[0].id}`;\r\n }\r\n this.selector = selector;\r\n this.chatList = [...res.data, ...this.chatList];\r\n this.loading = false;\r\n this.isScroll = res.data.length >= this.limit;\r\n this.$refs['scrollBox'].refresh();\r\n this.$nextTick(() => {\r\n this.$emit('change', true);\r\n let num = parseFloat(document.getElementById(selector).offsetTop) - 60;\r\n this.$refs['scrollBox'].scrollTo(\r\n {\r\n y: num,\r\n },\r\n 0,\r\n );\r\n });\r\n });\r\n },\r\n // 发送订单\r\n sendOrder() {\r\n this.sendMsg(this.orderId, 6);\r\n this.orderId = 0;\r\n this.orderInfo = {};\r\n },\r\n // 发送商品\r\n sendProduct() {\r\n this.sendMsg(this.productId, 5);\r\n this.productId = 0;\r\n this.productInfo = {};\r\n },\r\n // 发送消息\r\n sendText() {\r\n if (!this.isSend) {\r\n this.$Message.error('请输入内容');\r\n }\r\n this.sendMsg(this.con, 1);\r\n this.con = '';\r\n },\r\n // ws发送\r\n sendMsg(msn, type) {\r\n let obj = {\r\n type: 'chat',\r\n data: {\r\n msn,\r\n type,\r\n is_tourist: this.userToken ? 0 : 1,\r\n to_uid: this.toUid,\r\n tourist_uid: this.tourist_uid,\r\n form_type: this.$wechat.isWeixin() ? 1 : 3,\r\n tourist_avatar: this.userToken ? '' : this.tourist_avatar,\r\n },\r\n };\r\n Socket.then((ws) => {\r\n ws.send(obj);\r\n });\r\n },\r\n // 图片上传\r\n uploadImg() {\r\n let self = this;\r\n self.$util.uploadImageOne('upload/image', function (res) {\r\n if (res.status == 200) {\r\n self.sendMsg(res.data.url, 3);\r\n }\r\n });\r\n },\r\n // 商品详情页\r\n goProduct(item) {\r\n let url = window.location.protocol + '//' + window.location.host + '/pages/goods_details/index?id=' + item.msn;\r\n window.open(url, '_blank');\r\n },\r\n // 用户订单\r\n goAdminOrder() {\r\n // this.$router.push({\r\n // path:'/kefu/orderList/0/'+this.toUid\r\n // })\r\n let url =\r\n window.location.protocol +\r\n '//' +\r\n window.location.host +\r\n '/pages/goods/order_details/index?order_id=' +\r\n item.msn;\r\n window.open(url, '_blank');\r\n },\r\n // 滚动到底部\r\n height() {\r\n let self = this;\r\n var scrollTop = 0;\r\n let info = uni.createSelectorQuery().select('.chat');\r\n setTimeout((res) => {\r\n info\r\n .boundingClientRect(function (data) {\r\n //data - 各种参数\r\n scrollTop = data.height;\r\n if (self.active) {\r\n self.scrollTop = parseInt(scrollTop) + 500;\r\n } else {\r\n self.scrollTop = parseInt(scrollTop) + 100;\r\n }\r\n })\r\n .exec();\r\n }, 1000);\r\n },\r\n handleActivate(vm, refreshDom) {\r\n this.upperId = this.chatList[0].id;\r\n },\r\n handleStart(vm, refreshDom, done) {\r\n setTimeout(() => {\r\n // load finished\r\n done();\r\n }, 2000);\r\n },\r\n handleBeforeDeactivate(vm, refreshDom, done) {\r\n if (this.userToken) {\r\n this.getChatList();\r\n this.$on('change', (data) => {\r\n if (data) done();\r\n });\r\n } else {\r\n done();\r\n }\r\n },\r\n handleDeactivate(vm, refreshDom) {\r\n let num = parseFloat(document.getElementById(this.selector).offsetTop) - 60;\r\n this.$refs['scrollBox'].scrollTo(\r\n {\r\n y: num,\r\n },\r\n 0,\r\n );\r\n },\r\n },\r\n};\r\n</script>\r\n\r\n<style lang=\"stylus\" scoped>\r\n.head-box{\r\n position relative\r\n display flex\r\n align-items center\r\n justify-content center\r\n color #fff\r\n height 45px\r\n background: linear-gradient(85deg, #3875EA 0%, #1890FC 100%);\r\n span{\r\n position absolute\r\n width 45px\r\n height 100%\r\n left 0\r\n top 0\r\n text-align center\r\n line-height 45px\r\n }\r\n}\r\n.chat-box {\r\n display: flex;\r\n flex-direction: column;\r\n height: 100%;\r\n height: 100vh;\r\n background #F0F1F2\r\n .head-box {\r\n background: linear-gradient(85deg, #3875EA 0%, #1890FC 100%);\r\n\r\n .title-hd {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n position: relative;\r\n height: 43px;\r\n padding: 0 .3rem;\r\n color: #fff;\r\n\r\n .icon-fanhui {\r\n position: absolute;\r\n left: .3rem;\r\n top: 50%;\r\n transform: translateY(-50%);\r\n }\r\n\r\n .icon-gengduo2 {\r\n /* #ifdef MP */\r\n position: absolute;\r\n right: 2.1rem;\r\n top: 50%;\r\n transform: translateY(-50%);\r\n /* #endif */\r\n }\r\n }\r\n }\r\n\r\n .scroll-box {\r\n flex: 1;\r\n }\r\n\r\n .footer-box {\r\n display: flex;\r\n align-items: center;\r\n height: 1rem;\r\n padding: 0 .3rem;\r\n color: rgba(0,0,0,0.8);\r\n background: #f7f7f7;\r\n .words{\r\n margin-right .18rem\r\n }\r\n .words .iconfont {\r\n font-size: .5rem\r\n }\r\n\r\n .input-box {\r\n display: flex;\r\n align-items: center;\r\n flex 1\r\n height: .64rem;\r\n padding-right: 0.05rem;\r\n background-color: #fff;\r\n border-radius: .32rem;\r\n overflow hidden\r\n\r\n input {\r\n flex: 1;\r\n padding-left: .2rem;\r\n height: 100%;\r\n border transparent !important\r\n\r\n }\r\n >>> .ivu-input{\r\n font-size .28rem !important\r\n }\r\n >>> .ivu-input, .ivu-input:hover, .ivu-input:focus {\r\n border transparent\r\n box-shadow: none;\r\n }\r\n\r\n .iconfont {\r\n font-size: .5rem;\r\n color: #ccc;\r\n font-weight: normal;\r\n }\r\n\r\n .isSend {\r\n color: #3875EA;\r\n }\r\n }\r\n\r\n .emoji .iconfont {\r\n margin-left: .18rem;\r\n font-size: .5rem;\r\n }\r\n\r\n .more .iconfont {\r\n margin-left: .18rem;\r\n font-size: .5rem;\r\n }\r\n\r\n }\r\n}\r\n\r\n.tool-wrapper {\r\n display: flex;\r\n justify-content: space-between;\r\n padding: .45rem .6rem;\r\n background: #fff;\r\n font-size: .24rem;\r\n\r\n .tool-item {\r\n text-align: center;\r\n\r\n img {\r\n width: 1.04rem;\r\n height: 1.04rem;\r\n }\r\n }\r\n}\r\n\r\n.slider-banner {\r\n padding-bottom .25rem\r\n background: #fff;\r\n\r\n .em {\r\n display: inline-block;\r\n width: .5rem;\r\n height: .5rem;\r\n margin: .4rem 0 0 .5rem;\r\n }\r\n}\r\n\r\n.words-mask {\r\n z-index: 50;\r\n position: fixed;\r\n left: 0;\r\n top: 0;\r\n right: 0;\r\n bottom: 0;\r\n background: rgba(0, 0, 0, 0.5);\r\n\r\n .content {\r\n position: absolute;\r\n left: 0;\r\n right: 0;\r\n top: 1.14rem;\r\n bottom: 0;\r\n display: flex;\r\n flex-direction: column;\r\n background: #fff;\r\n border-radius: 0.06rem 0.06rem 0px 0px;\r\n\r\n .title-box {\r\n padding: 0 .3rem .3rem;\r\n position: relative;\r\n border-bottom 1px solid #F5F6F9\r\n .tab-box{\r\n position relative\r\n display flex\r\n justify-content space-between\r\n padding .4rem 2.2rem .3rem\r\n font-size .32rem\r\n color #9F9F9F\r\n .on{\r\n color #3875EA\r\n font-weight bold\r\n }\r\n .right-icon{\r\n position absolute\r\n right 0\r\n top 50%\r\n transform translateY(-50%)\r\n .iconfont{\r\n margin-left .2rem\r\n font-size .48rem\r\n color #C8CAD0\r\n }\r\n }\r\n }\r\n .input-box{\r\n display: flex;\r\n align-items: center;\r\n width: 6.9rem;\r\n height: .64rem;\r\n padding-right: 0.05rem;\r\n margin-left: .18rem;\r\n border-radius: .32rem;\r\n overflow hidden\r\n\r\n >>> .ivu-input{\r\n background #F5F6F9\r\n }\r\n >>> .ivu-input, .ivu-input:hover, .ivu-input:focus {\r\n border transparent\r\n box-shadow: none;\r\n }\r\n }\r\n .icon-cha1 {\r\n position: absolute;\r\n right: 0;\r\n top: 50%;\r\n transform: translateY(-50%);\r\n }\r\n }\r\n\r\n .scroll-box {\r\n flex: 1;\r\n display flex\r\n overflow: hidden;\r\n .scroll-left{\r\n width 1.76rem\r\n height 100%\r\n overflow-y scroll\r\n -webkit-overflow-scrolling touch\r\n background #F5F6F9\r\n .left-item{\r\n position relative\r\n display flex\r\n align-items center\r\n justify-content center\r\n width 100%\r\n height 1.09rem\r\n color #282828\r\n font-size .26rem\r\n &.active{\r\n color #3875EA\r\n background #fff\r\n &:after{\r\n content ' '\r\n position: absolute;\r\n left 0\r\n top 50%\r\n transform translateY(-50%)\r\n width 0.06rem\r\n height .46rem\r\n background #3875EA\r\n }\r\n }\r\n &.add_cate{\r\n color #9F9F9F\r\n font-size .26rem\r\n .iconfont{\r\n margin-right 0.1rem\r\n font-size .24rem\r\n }\r\n }\r\n }\r\n }\r\n .right-box{\r\n flex 1\r\n overflow scroll\r\n -webkit-overflow-scrolling touch\r\n }\r\n .msg-item {\r\n padding: .25rem .3rem;\r\n color #888888\r\n font-size .28rem\r\n .title{\r\n margin-right .2rem\r\n color #282828\r\n }\r\n &.add-mg{\r\n display flex\r\n align-items center\r\n justify-content flex-end\r\n font-size .28rem\r\n padding .15rem .3rem\r\n .iconfont{\r\n font-size .36rem\r\n margin-right .1rem\r\n }\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\n.chat-scroll-box {\r\n flex: 1;\r\n overflow: hidden;\r\n .day-box{\r\n margin-bottom .2rem\r\n font-size .24rem\r\n color #999\r\n text-align: center;\r\n }\r\n .chat-item {\r\n display: flex;\r\n margin-bottom: .36rem;\r\n font-size .28rem\r\n .avatar {\r\n width: .8rem;\r\n height: .8rem;\r\n border-radius: 50%;\r\n }\r\n\r\n .msg-box {\r\n display: flex;\r\n align-items: center;\r\n max-width: 4.52rem;\r\n margin-left: .22rem;\r\n padding: .1rem .24rem;\r\n background: #fff;\r\n border-radius: .14rem;\r\n word-break: break-all;\r\n font-size .28rem\r\n }\r\n\r\n .img-box {\r\n width: 2.7rem;\r\n margin-left: .22rem;\r\n\r\n img {\r\n width: 2.7rem;\r\n border-radius 6px\r\n }\r\n }\r\n\r\n .product-box {\r\n width: 4.52rem;\r\n background-color: #fff;\r\n border-radius: .14rem;\r\n overflow: hidden;\r\n margin-left: .22rem;\r\n\r\n img {\r\n width: 4.52rem;\r\n }\r\n\r\n .info {\r\n padding: .16rem .26rem;\r\n\r\n .price {\r\n font-size: .36rem;\r\n color: #F74C31;\r\n\r\n text {\r\n font-size: .28rem;\r\n }\r\n }\r\n }\r\n }\r\n\r\n .order-box {\r\n width: 4.52rem;\r\n margin-left: .22rem;\r\n background-color: #fff;\r\n border-radius: .14rem;\r\n\r\n .title {\r\n padding: .15rem .2rem;\r\n font-size: .26rem;\r\n color: #282828;\r\n border-bottom: 1px solid #ECEFF8;\r\n }\r\n\r\n .info {\r\n display: flex;\r\n padding: .2rem;\r\n\r\n img {\r\n width: 1.24rem;\r\n height: 1.24rem;\r\n border-radius: 0.06rem;\r\n }\r\n\r\n .product-info {\r\n flex: 1;\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: space-between;\r\n margin-left: .16rem;\r\n\r\n .name {\r\n font-size: .26rem;\r\n }\r\n\r\n .price {\r\n font-size: .3rem;\r\n color: #F74C31;\r\n }\r\n }\r\n }\r\n }\r\n\r\n &.right-box {\r\n flex-direction: row-reverse;\r\n\r\n .msg-box {\r\n margin-left: 0;\r\n margin-right: .22rem;\r\n background-color: #9cec60;\r\n\r\n color #333\r\n }\r\n\r\n .img-box {\r\n margin-left: 0;\r\n margin-right: .22rem;\r\n }\r\n\r\n .product-box {\r\n margin-left: 0;\r\n margin-right: .22rem;\r\n }\r\n\r\n .order-box {\r\n margin-left: 0;\r\n margin-right: .22rem;\r\n }\r\n }\r\n\r\n .em {\r\n margin: 0;\r\n }\r\n }\r\n}\r\n.transfer-mask\r\n z-index 30\r\n position fixed\r\n left 0\r\n top 0\r\n width 100%\r\n height 100%\r\n background rgba(0,0,0,0.5)\r\n .content\r\n position absolute\r\n left 0\r\n bottom 0\r\n transform translateY(100%)\r\n top 2.5rem\r\n right 0\r\n display flex\r\n flex-direction column\r\n background #fff\r\n border-radius: .16rem .16rem 0px 0px;\r\n &.on\r\n animation up .2s linear\r\n animation-fill-mode: forwards;\r\n .title\r\n position relative\r\n display flex\r\n align-items center\r\n justify-content center\r\n height 1.1rem\r\n font-size .32rem\r\n font-weight bold\r\n color #282828\r\n .iconfont\r\n position absolute\r\n right .3rem\r\n top 50%\r\n transform translateY(-50%)\r\n color #C8CAD0\r\n font-size .44rem\r\n .list-wrapper\r\n flex 1\r\n padding-left .3rem\r\n overflow-y scroll\r\n -webkit-overflow-scrolling touch\r\n .list-item\r\n display flex\r\n align-items center\r\n padding .16rem 0\r\n border-bottom 1px solid #ECEFF8\r\n .check-box\r\n width .72rem\r\n .avatar-box img\r\n width .9rem\r\n height .9rem\r\n border-radius 0.06rem\r\n .nickName\r\n margin-left .28rem\r\n color #282828\r\n font-size .3rem\r\n font-weight bold\r\n .btn\r\n width 6.9rem\r\n height .86rem\r\n margin .5rem auto\r\n color #fff\r\n background #3875EA\r\n font-size .3rem\r\n border-radius: .43rem !important;\r\n.broadcast-details_box {\r\n display: flex;\r\n background: #fff;\r\n border-radius: 6px;\r\n padding: .24rem;\r\n}\r\n\r\n.broadcast_details_img {\r\n width: 1.4rem;\r\n height: 1.4rem;\r\n border-radius: 8px;\r\n overflow: hidden;\r\n position: relative;\r\n}\r\n\r\n.broadcast_details_img img {\r\n width: 100%;\r\n height: 100%;\r\n}\r\n\r\n.broadcast_details_picBox {\r\n width: 75%;\r\n margin-left: .24rem;\r\n}\r\n\r\n.broadcast_details_tit {\r\n font-size: .28rem;\r\n color: #333333;\r\n height: .85rem;\r\n font-weight: 800;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n display: -webkit-box;\r\n -webkit-line-clamp: 2;\r\n -webkit-box-orient: vertical;\r\n text-align: left !important;\r\n}\r\n\r\n.broadcast_details_pic {\r\n font-size: .36rem;\r\n color: #e93323;\r\n text-align: left;\r\n}\r\n\r\n.broadcast_details_pic_num {\r\n text-decoration: line-through;\r\n font-size: .28rem;\r\n color: rgba(0, 0, 0, 0.5);\r\n margin-left: 0.1rem;\r\n}\r\n\r\n.broadcast_details_btn {\r\n width: 1.3rem;\r\n height: .5rem;\r\n background: #e83323;\r\n opacity: 1;\r\n border-radius: 1.25rem;\r\n color: #fff;\r\n font-size: .24rem;\r\n text-align: center;\r\n line-height: .5rem;\r\n}\r\n\r\n.broadcast-details_num {\r\n width: 100%;\r\n height: .8rem;\r\n line-height: .8rem;\r\n color: #000000;\r\n font-size: .26rem;\r\n display: flex;\r\n justify-content: space-between;\r\n background: #fff;\r\n border-bottom: 1px dashed rgba(0, 0, 0, 0.2);\r\n padding: 0 .24rem;\r\n}\r\n</style>\r\n<style>\r\n@keyframes up {\r\n 0% {\r\n transform: translateY(100%);\r\n }\r\n 100% {\r\n transform: translateY(0);\r\n }\r\n}\r\n.emoji-outer {\r\n position: absolute;\r\n right: 0.5rem;\r\n bottom: 0.3rem;\r\n width: 0.5rem;\r\n height: 0.5rem;\r\n}\r\n</style>\r\n"]}]}