| 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\\pc\\index.vue?vue&type=script&lang=js&","dependencies":[{"path":"E:\\item\\newItem\\admin\\src\\pages\\kefu\\pc\\index.vue","mtime":1677828270206},{"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:aW1wb3J0IF90b0NvbnN1bWFibGVBcnJheSBmcm9tICJFOi9pdGVtL25ld0l0ZW0vYWRtaW4vbm9kZV9tb2R1bGVzL0B2dWUvYmFiZWwtcHJlc2V0LWFwcC9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9Db25zdW1hYmxlQXJyYXkuanMiOwppbXBvcnQgX29iamVjdFNwcmVhZCBmcm9tICJFOi9pdGVtL25ld0l0ZW0vYWRtaW4vbm9kZV9tb2R1bGVzL0B2dWUvYmFiZWwtcHJlc2V0LWFwcC9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0U3ByZWFkMi5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC50by1zdHJpbmcuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLmZvci1lYWNoLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkubWFwLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMucmVnZXhwLmV4ZWMuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcucmVwbGFjZS5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmNvbmNhdC5qcyI7CgovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwp2YXIgbXAzID0gcmVxdWlyZSgnLi4vLi4vLi4vYXNzZXRzL3ZpZGVvL25vdGljZS53YXYnKTsKCnZhciBtcDMgPSBuZXcgQXVkaW8obXAzKTsKaW1wb3J0IFNldHRpbmcgZnJvbSAnQC9zZXR0aW5nJzsKaW1wb3J0IHsgSGFwcHlTY3JvbGwgfSBmcm9tICd2dWUtaGFwcHktc2Nyb2xsJzsKaW1wb3J0IGJhc2VIZWFkZXIgZnJvbSAnLi9jb21wb25lbnRzL2Jhc2VIZWFkZXInOwppbXBvcnQgY2hhdExpc3QgZnJvbSAnLi9jb21wb25lbnRzL2NoYXRMaXN0JzsKaW1wb3J0IHJpZ2h0TWVudSBmcm9tICcuL2NvbXBvbmVudHMvcmlnaHRNZW51JzsKaW1wb3J0IGVtb2ppTGlzdCBmcm9tICdAL3V0aWxzL2Vtb2ppJzsKaW1wb3J0IHsgU29ja2V0IH0gZnJvbSAnQC9saWJzL3NvY2tldCc7CmltcG9ydCB1dGlsIGZyb20gJ0AvbGlicy91dGlsJzsKaW1wb3J0IG1zZ1dpbmRvdyBmcm9tICcuL2NvbXBvbmVudHMvbXNnV2luZG93JzsKaW1wb3J0IHRyYW5zZmVyIGZyb20gJy4vY29tcG9uZW50cy90cmFuc2Zlcic7CmltcG9ydCB7IHNlcnZpY2VMaXN0LCB1cGxvYWRJbWcgfSBmcm9tICdAL2FwaS9rZWZ1JzsKaW1wb3J0IGdvb2RzRGV0YWlsIGZyb20gJy4vY29tcG9uZW50cy9nb29kc19kZXRhaWwnOwppbXBvcnQgb3JkZXJEZXRhaWwgZnJvbSAnLi9jb21wb25lbnRzL29yZGVyX2RldGFpbCc7CmltcG9ydCB7IG1hcFN0YXRlIH0gZnJvbSAndnVleCc7CmltcG9ydCB7IGdldENvb2tpZXMsIHJlbW92ZUNvb2tpZXMsIHNldENvb2tpZXMgfSBmcm9tICdAL2xpYnMvdXRpbCc7CmltcG9ydCB7IHNlcnZpY2VJbmZvIH0gZnJvbSAnQC9hcGkva2VmdV9tb2JpbGUnOwoKdmFyIGNodW5rID0gZnVuY3Rpb24gY2h1bmsoYXJyLCBudW0pIHsKICBudW0gPSBudW0gKiAxIHx8IDE7CiAgdmFyIHJldCA9IFtdOwogIGFyci5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtLCBpKSB7CiAgICBpZiAoaSAlIG51bSA9PT0gMCkgewogICAgICByZXQucHVzaChbXSk7CiAgICB9CgogICAgcmV0W3JldC5sZW5ndGggLSAxXS5wdXNoKGl0ZW0pOwogIH0pOwogIHJldHVybiByZXQ7Cn07CgpleHBvcnQgZGVmYXVsdCB7CiAgbmFtZTogJ2luZGV4JywKICBjb21wb25lbnRzOiB7CiAgICBiYXNlSGVhZGVyOiBiYXNlSGVhZGVyLAogICAgY2hhdExpc3Q6IGNoYXRMaXN0LAogICAgcmlnaHRNZW51OiByaWdodE1lbnUsCiAgICBtc2dXaW5kb3c6IG1zZ1dpbmRvdywKICAgIHRyYW5zZmVyOiB0cmFuc2ZlciwKICAgIEhhcHB5U2Nyb2xsOiBIYXBweVNjcm9sbCwKICAgIGdvb2RzRGV0YWlsOiBnb29kc0RldGFpbCwKICAgIG9yZGVyRGV0YWlsOiBvcmRlckRldGFpbAogIH0sCiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHsKICAgIHJldHVybiB7CiAgICAgIGlzRW1vamk6IGZhbHNlLAogICAgICBjaGF0Q29uOiAnJywKICAgICAgZW1vamlHcm91cDogY2h1bmsoZW1vamlMaXN0LCAyMCksCiAgICAgIC8vIOihqOaDheWIl+ihqAogICAgICBlbW9qaUxpc3Q6IGVtb2ppTGlzdCwKICAgICAgaHRtbDogJycsCiAgICAgIHVzZXJBY3RpdmU6IHt9LAogICAgICAvL+W3puS+p+eUqOaIt+WIl+ihqOmAieS4reS/oeaBrwogICAgICBrZWZ1SW5mbzoge30sCiAgICAgIC8v5a6i5pyN5L+h5oGvCiAgICAgIGlzTXNnOiBmYWxzZSwKICAgICAgaXNUcmFuc2ZlcjogZmFsc2UsCiAgICAgIGFjdGl2ZU1zZzogJycsCiAgICAgIC8vIOmAieS4reeahOivneacrwogICAgICBjaGF0TGlzdDogW10sCiAgICAgIHRleHQ6ICcnLAogICAgICBsaW1pdDogMjAsCiAgICAgIHVwcGVySWQ6IDAsCiAgICAgIG9ubGluZTogdHJ1ZSwKICAgICAgLy/lvZPliY3lrqLmnI3lnKjnur/nirbmgIEKICAgICAgc2Nyb2xsVG9wOiAwLAogICAgICBpc1Njcm9sbDogdHJ1ZSwKICAgICAgb2xkSGVpZ2h0OiAwLAogICAgICBpc0xvYWQ6IGZhbHNlLAogICAgICBpc1Byb2R1Y3RCb3g6IGZhbHNlLAogICAgICBnb29kc0lkOiAnJywKICAgICAgaXNPcmRlcjogZmFsc2UsCiAgICAgIG9yZGVySWQ6ICcnLAogICAgICB1cGxvYWQ6ICcnLAogICAgICBoZWFkZXI6IHt9LAogICAgICB1cGxvYWREYXRhOiB7CiAgICAgICAgZmlsZW5hbWU6ICdmaWxlJwogICAgICB9LAogICAgICB1c2VyT25saW5lOiB7fSwKICAgICAgbmV3UmVjb3JlZDoge30sCiAgICAgIC8v5paw5a+56K+d5L+h5oGvCiAgICAgIHNlYXJjaERhdGE6ICcnLAogICAgICAvLyDmkJzntKLmloflrZcKICAgICAgc2Nyb2xsTnVtOiAwLAogICAgICAvL+a7muWKqOasoeaVsAogICAgICB0cmFuc2ZlcklkOiAnJywKICAgICAgLy/ovazmjqVpZAogICAgICBib2R5Q2xvc2U6IGZhbHNlLAogICAgICB0b3VyaXN0OiAwCiAgICB9OwogIH0sCiAgY29tcHV0ZWQ6IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgbWFwU3RhdGUoewogICAgc29ja2V0U3RhdHVzOiBmdW5jdGlvbiBzb2NrZXRTdGF0dXMoc3RhdGUpIHsKICAgICAgcmV0dXJuIHN0YXRlLmFkbWluLmtlZnUuc29ja2V0U3RhdHVzOwogICAgfQogIH0pKSwge30sIHsKICAgIGRpc2FibGVkOiBmdW5jdGlvbiBkaXNhYmxlZCgpIHsKICAgICAgaWYgKHRoaXMuY2hhdENvbi5sZW5ndGggPT0gMCkgewogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgfSwKICAgIHJlY29yZHM6IGZ1bmN0aW9uIHJlY29yZHMoKSB7CiAgICAgIHZhciBfdGhpcyA9IHRoaXM7CgogICAgICByZXR1cm4gdGhpcy5jaGF0TGlzdC5tYXAoZnVuY3Rpb24gKGl0ZW0sIGluZGV4KSB7CiAgICAgICAgaXRlbS50aW1lID0gX3RoaXMuJG1vbWVudChpdGVtLmFkZF90aW1lICogMTAwMCkuZm9ybWF0KCdNTU1EbyBIOm1tJyk7CgogICAgICAgIGlmIChpbmRleCkgewogICAgICAgICAgaWYgKGl0ZW0uYWRkX3RpbWUgLSBfdGhpcy5jaGF0TGlzdFtpbmRleCAtIDFdLmFkZF90aW1lID49IDMwMCkgewogICAgICAgICAgICBpdGVtLnNob3cgPSB0cnVlOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaXRlbS5zaG93ID0gZmFsc2U7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGl0ZW0uc2hvdyA9IHRydWU7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gaXRlbTsKICAgICAgfSk7CiAgICB9CiAgfSksCiAgLy8g5oyH5Luk57KY6LS05oyH5Luk5a6a5LmJCiAgZGlyZWN0aXZlczogewogICAgcGFzdGU6IHsKICAgICAgYmluZDogZnVuY3Rpb24gYmluZChlbCwgYmluZGluZywgdm5vZGUpIHsKICAgICAgICBlbC5hZGRFdmVudExpc3RlbmVyKCdwYXN0ZScsIGZ1bmN0aW9uIChldmVudCkgewogICAgICAgICAgLy/ov5nph4znm7TmjqXnm5HlkKzlhYPntKDnmoTnspjotLTkuovku7YKICAgICAgICAgIGJpbmRpbmcudmFsdWUoZXZlbnQpOwogICAgICAgIH0pOwogICAgICB9CiAgICB9CiAgfSwKICB3YXRjaDogey8vIHNvY2tldFN0YXR1czp7CiAgICAvLyAgICAgaGFuZGxlcihuVmFsLFZhbCl7CiAgICAvLyAgICAgICAgIGlmKG5WYWwpewogICAgLy8gICAgICAgICAgICAgU29ja2V0LnNlbmQoewogICAgLy8gICAgICAgICAgICAgICAgIGRhdGE6IHV0aWwuY29va2llcy5rZWZ1R2V0KCd0b2tlbicpLAogICAgLy8gICAgICAgICAgICAgICAgIHR5cGU6ICJrZWZ1X2xvZ2luIgogICAgLy8gICAgICAgICAgICAgfSk7CiAgICAvLyAgICAgICAgIH0KICAgIC8vICAgICB9LAogICAgLy8gICAgIGRlZXA6dHJ1ZQogICAgLy8gfQogIH0sCiAgY3JlYXRlZDogZnVuY3Rpb24gY3JlYXRlZCgpIHsKICAgIHZhciBfdGhpczIgPSB0aGlzOwoKICAgIHRoaXMudXBsb2FkID0gU2V0dGluZy5hcGlCYXNlVVJMLnJlcGxhY2UoJ2FkbWluYXBpJywgJ2tlZnVhcGknKSArICcvdXBsb2FkJzsKICAgIHNlcnZpY2VJbmZvKCkudGhlbihmdW5jdGlvbiAocmVzKSB7CiAgICAgIF90aGlzMi5rZWZ1SW5mbyA9IHJlcy5kYXRhOwoKICAgICAgaWYgKF90aGlzMi5rZWZ1SW5mby5zaXRlX25hbWUpIHsKICAgICAgICBkb2N1bWVudC50aXRsZSA9IF90aGlzMi5rZWZ1SW5mby5zaXRlX25hbWU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgX3RoaXMyLmtlZnVJbmZvLnNpdGVfbmFtZSA9ICcnOwogICAgICB9CiAgICB9KTsKICB9LAogIG1vdW50ZWQ6IGZ1bmN0aW9uIG1vdW50ZWQoKSB7CiAgICB2YXIgX3RoaXMzID0gdGhpczsKCiAgICB2YXIgc2VsZiA9IHRoaXM7CiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoKSB7CiAgICAgIHNlbGYuaXNFbW9qaSA9IGZhbHNlOwogICAgfSk7CiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uIChlKSB7CiAgICAgIFNvY2tldC50aGVuKGZ1bmN0aW9uICh3cykgewogICAgICAgIHdzLnNlbmQoewogICAgICAgICAgdHlwZTogJ2tlZnVfbG9naW4nLAogICAgICAgICAgZGF0YTogZ2V0Q29va2llcygna2VmdV90b2tlbicpCiAgICAgICAgfSk7CiAgICAgICAgd3MuJG9uKFsncmVwbHknLCAnY2hhdCddLCBmdW5jdGlvbiAoZGF0YSkgewogICAgICAgICAgaWYgKGRhdGEubXNuX3R5cGUgPT0gMSkgewogICAgICAgICAgICBkYXRhLm1zbiA9IF90aGlzMy5yZXBsYWNlX2VtKGRhdGEubXNuKTsKICAgICAgICAgIH0KCiAgICAgICAgICBpZiAoZGF0YS5tc25fdHlwZSA9PSAyKSB7CiAgICAgICAgICAgIGlmIChkYXRhLm1zbi5pbmRleE9mKCdbJykgPT0gLTEpIHsKICAgICAgICAgICAgICBkYXRhLm1zbiA9IF90aGlzMy5yZXBsYWNlX2VtKCJbIi5jb25jYXQoZGF0YS5tc24sICJdIikpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CgogICAgICAgICAgX3RoaXMzLmNoYXRMaXN0LnB1c2goZGF0YSk7CgogICAgICAgICAgX3RoaXMzLiRuZXh0VGljayhmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciBfdGhpczQgPSB0aGlzOwoKICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgdmFyIGNvbnRhaW5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNjaGF0X3Njcm9sbCcpOwogICAgICAgICAgICAgIF90aGlzNC5zY3JvbGxUb3AgPSBjb250YWluZXIub2Zmc2V0SGVpZ2h0OwogICAgICAgICAgICB9LCA4MDApOwogICAgICAgICAgfSk7CiAgICAgICAgfSk7CiAgICAgICAgd3MuJG9uKCdyZXBseScsIGZ1bmN0aW9uIChkYXRhKSB7Ly8gbXAzLnBsYXkoKTsKICAgICAgICB9KTsKICAgICAgICB3cy4kb24oJ3NvY2tldF9lcnJvcicsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgIF90aGlzMy4kTWVzc2FnZS5lcnJvcign6L+e5o6l5aSx6LSlJyk7CiAgICAgICAgfSk7CiAgICAgICAgd3MuJG9uKCdlcnJfdGlwJywgZnVuY3Rpb24gKGRhdGEpIHsKICAgICAgICAgIF90aGlzMy4kTWVzc2FnZS5lcnJvcihkYXRhLm1zZyk7CiAgICAgICAgfSk7IC8v55So5oi35LiK57q/5o+Q6YaS5bm/5pKtCgogICAgICAgIHdzLiRvbigndXNlcl9vbmxpbmUnLCBmdW5jdGlvbiAoZGF0YSkgewogICAgICAgICAgX3RoaXMzLnVzZXJPbmxpbmUgPSBkYXRhOwogICAgICAgIH0pOyAvL+eUqOaIt+acquivu+a2iOaBr+adoeaVsOabtOaUuQoKICAgICAgICB3cy4kb24oJ21zc2FnZV9udW0nLCBmdW5jdGlvbiAoZGF0YSkgewogICAgICAgICAgaWYgKGRhdGEubnVtID4gMCkgewogICAgICAgICAgICBtcDMucGxheSgpOwogICAgICAgICAgfQoKICAgICAgICAgIF90aGlzMy5jaGF0TGlzdC5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7CiAgICAgICAgICAgIGlmIChpdGVtLnRvX3VpZCA9PSBkYXRhLnVpZCkgewogICAgICAgICAgICAgIGl0ZW0ubXNzYWdlX251bSA9IGRhdGEubnVtOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKCiAgICAgICAgICBpZiAoZGF0YS5yZWNvcmVkLmlkKSB7CiAgICAgICAgICAgIF90aGlzMy5uZXdSZWNvcmVkID0gZGF0YS5yZWNvcmVkOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9KTsKICAgIH0sIDIwMDApOwogICAgdGhpcy5oZWFkZXJbJ0F1dGhvcmktemF0aW9uJ10gPSAnQmVhcmVyICcgKyBnZXRDb29raWVzKCdrZWZ1X3Rva2VuJyk7CiAgICB0aGlzLnRleHQgPSB0aGlzLnJlcGxhY2VfZW0oJ1tlbS1zbWlsaW5nX2ltcF0nKTsgLy8gU29ja2V0LmluaXQodGhpcywna2VmdScpOwogIH0sCiAgbWV0aG9kczogewogICAgaGFuZGxlRm9ybWF0RXJyb3I6IGZ1bmN0aW9uIGhhbmRsZUZvcm1hdEVycm9yKGZpbGUpIHsKICAgICAgdGhpcy4kTWVzc2FnZS5lcnJvcign5LiK5Lyg5Zu+54mH5Y+q6IO95pivIGpwZ+OAgWpwZ+OAgWpwZWfjgIFnaWYg5qC85byPIScpOwogICAgfSwKICAgIGJpbmRFbnRlcjogZnVuY3Rpb24gYmluZEVudGVyKGUpIHt9LAogICAgLy/lvq7kv6HmiKrlm77kuIrkvKDlm77niYfml7bop6blj5EKICAgIGhhbmRsZVBhcnNlOiBmdW5jdGlvbiBoYW5kbGVQYXJzZShlKSB7CiAgICAgIHZhciBmaWxlID0gbnVsbDsKCiAgICAgIGlmIChlLmNsaXBib2FyZERhdGEgJiYgZS5jbGlwYm9hcmREYXRhLml0ZW1zWzBdICYmIGUuY2xpcGJvYXJkRGF0YS5pdGVtc1swXS50eXBlICYmIGUuY2xpcGJvYXJkRGF0YS5pdGVtc1swXS50eXBlLmluZGV4T2YoJ2ltYWdlJykgPiAtMSkgewogICAgICAgIC8v6L+Z6YeM5bCx5piv5Yik5pat5piv5ZCm5pyJ57KY6LS06L+b5p2l55qE5paH5Lu25LiU5paH5Lu25Li65Zu+54mH5qC85byPCiAgICAgICAgZmlsZSA9IGUuY2xpcGJvYXJkRGF0YS5pdGVtc1swXS5nZXRBc0ZpbGUoKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLiRtZXNzYWdlKHsKICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJywKICAgICAgICAgIG1lc3NhZ2U6ICfkuIrkvKDnmoTmlofku7blv4XpobvkuLrlm77niYfkuJTml6Dms5XlpI3liLbmnKzlnLDlm77niYfkuJTml6Dms5XlkIzml7blpI3liLblpJrlvKDlm77niYcnCiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CgogICAgICB0aGlzLnVwZGF0ZShmaWxlKTsKICAgIH0sCiAgICB1cGRhdGU6IGZ1bmN0aW9uIHVwZGF0ZShlKSB7CiAgICAgIHZhciBfdGhpczUgPSB0aGlzOwoKICAgICAgLy8g5LiK5Lyg54Wn54mHCiAgICAgIHZhciBmaWxlID0gZTsKICAgICAgdmFyIHBhcmFtID0gbmV3IEZvcm1EYXRhKCk7IC8vIOWIm+W7umZvcm3lr7nosaEKCiAgICAgIHBhcmFtLmFwcGVuZCgnZmlsZW5hbWUnLCAnZmlsZScpOyAvLyDpgJrov4dhcHBlbmTlkJFmb3Jt5a+56LGh5re75Yqg5pWw5o2u6L+b5Y67CgogICAgICBwYXJhbS5hcHBlbmQoJ2ZpbGUnLCBmaWxlKTsgLy8g6YCa6L+HYXBwZW5k5ZCRZm9ybeWvueixoea3u+WKoOaVsOaNrui/m+WOuwogICAgICAvLyDmt7vliqDor7fmsYLlpLQKCiAgICAgIHVwbG9hZEltZyhwYXJhbSkudGhlbihmdW5jdGlvbiAocmVzKSB7CiAgICAgICAgX3RoaXM1LnNlbmRNc2cocmVzLmRhdGEudXJsLCAzKTsKICAgICAgfSk7CiAgICB9LAogICAgLy8g5LiK5Lyg5oiQ5YqfCiAgICBoYW5kbGVTdWNjZXNzOiBmdW5jdGlvbiBoYW5kbGVTdWNjZXNzKHJlcywgZmlsZSwgZmlsZUxpc3QpIHsKICAgICAgaWYgKHJlcy5zdGF0dXMgPT09IDIwMCkgewogICAgICAgIHRoaXMuJE1lc3NhZ2Uuc3VjY2VzcyhyZXMubXNnKTsKICAgICAgICB0aGlzLnNlbmRNc2cocmVzLmRhdGEudXJsLCAzKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLiRNZXNzYWdlLmVycm9yKHJlcy5tc2cpOwogICAgICB9CiAgICB9LAogICAgLy/orqLljZXor6bmg4UKICAgIGxvb2tPcmRlcjogZnVuY3Rpb24gbG9va09yZGVyKGl0ZW0pIHsKICAgICAgdGhpcy5vcmRlcklkID0gaXRlbS5vcmRlckluZm8uaWQ7CiAgICAgIHRoaXMuaXNPcmRlciA9IHRydWU7CiAgICB9LAogICAgc2V0T25saW5lOiBmdW5jdGlvbiBzZXRPbmxpbmUoZGF0YSkgewogICAgICBTb2NrZXQudGhlbihmdW5jdGlvbiAod3MpIHsKICAgICAgICB3cy5zZW5kKHsKICAgICAgICAgIGRhdGE6IHsKICAgICAgICAgICAgb25saW5lOiBkYXRhCiAgICAgICAgICB9LAogICAgICAgICAgdHlwZTogJ29ubGluZScKICAgICAgICB9KTsKICAgICAgfSk7CiAgICAgIHRoaXMub25saW5lID0gZGF0YTsKICAgIH0sCiAgICAvLyDpmLvmraLmtY/op4jlmajpu5jorqTmjaLooYzmk43kvZwKICAgIGxpc3RlbjogZnVuY3Rpb24gbGlzdGVuKGUpIHsKICAgICAgaWYgKGUuc2hpZnRLZXkgJiYgZS5rZXlDb2RlID09IDEzKSB7CiAgICAgICAgY29uc29sZS5sb2coJ+aNouihjCcpOwogICAgICB9IGVsc2UgaWYgKGUua2V5Q29kZSA9PSAxMykgewogICAgICAgIGlmIChlLnRhcmdldC52YWx1ZSA9PSAnJykgewogICAgICAgICAgcmV0dXJuIHRoaXMuJE1lc3NhZ2UuZXJyb3IoJ+ivt+i+k+WFpea2iOaBrycpOwogICAgICAgIH0KCiAgICAgICAgdGhpcy5zZW5kTXNnKGUudGFyZ2V0LnZhbHVlLCAxKTsKICAgICAgICB0aGlzLmNoYXRDb24gPSAnJzsKICAgICAgfQogICAgfSwKICAgIC8vIOi+k+WFpeahhumAieaLqeihqOaDhQogICAgc2VsZWN0OiBmdW5jdGlvbiBzZWxlY3QoZGF0YSkgewogICAgICB2YXIgdmFsID0gIlsiLmNvbmNhdChkYXRhLCAiXSIpOwogICAgICB0aGlzLmNoYXRDb24gKz0gdmFsOwogICAgICB0aGlzLmlzRW1vamkgPSBmYWxzZTsKICAgIH0sCiAgICAvLyDogYrlpKnooajmg4XovazmjaIKICAgIHJlcGxhY2VfZW06IGZ1bmN0aW9uIHJlcGxhY2VfZW0oc3RyKSB7CiAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKC9cW2VtLShbXHNcU10qKVxdL2csICI8c3BhbiBjbGFzcz0nZW0gZW0tJDEnLz48L3NwYW4+Iik7CiAgICAgIHJldHVybiBzdHI7CiAgICB9LAogICAgLy8g6I635Y+W5piv5ZCm5ri45a6iCiAgICBjaGFuZ2VUeXBlOiBmdW5jdGlvbiBjaGFuZ2VUeXBlKGRhdGEpIHsKICAgICAgdGhpcy50b3VyaXN0ID0gZGF0YTsKICAgIH0sCiAgICAvLyDojrflj5bliJfooajnlKjmiLfkv6Hmga8KICAgIHNldERhdGFJZDogZnVuY3Rpb24gc2V0RGF0YUlkKGRhdGEpIHsKICAgICAgdmFyIF90aGlzNiA9IHRoaXM7CgogICAgICB0aGlzLnVzZXJBY3RpdmUgPSBkYXRhOwogICAgICB0aGlzLmNoYXRMaXN0ID0gW107CiAgICAgIHRoaXMudXBwZXJJZCA9IDA7CiAgICAgIHRoaXMub2xkSGVpZ2h0ID0gMDsKICAgICAgdGhpcy5pc1Njcm9sbCA9IHRydWU7CgogICAgICBpZiAoZGF0YSkgewogICAgICAgIHdpbmRvdy5kb2N1bWVudC50aXRsZSA9IGRhdGEubmlja25hbWUgPyAiXHU2QjYzXHU1NzI4XHU1NDhDIi5jb25jYXQoZGF0YS5uaWNrbmFtZSwgIlx1NUJGOVx1OEJERFx1NEUyRCAtICIpLmNvbmNhdCh0aGlzLmtlZnVJbmZvLnNpdGVfbmFtZSkgOiAn5q2j5Zyo5ZKM5ri45a6i5a+56K+d5LitIC0gJyArIHRoaXMua2VmdUluZm8uc2l0ZV9uYW1lOwogICAgICAgIFNvY2tldC50aGVuKGZ1bmN0aW9uICh3cykgewogICAgICAgICAgd3Muc2VuZCh7CiAgICAgICAgICAgIGRhdGE6IHsKICAgICAgICAgICAgICBpZDogX3RoaXM2LnVzZXJBY3RpdmUudG9fdWlkCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHR5cGU6ICd0b19jaGF0JwogICAgICAgICAgfSk7CiAgICAgICAgfSk7CiAgICAgICAgdGhpcy5nZXRDaGF0TGlzdCgpOwogICAgICB9IGVsc2UgewogICAgICAgIHdpbmRvdy5kb2N1bWVudC50aXRsZSA9IHRoaXMua2VmdUluZm8uc2l0ZV9uYW1lOwogICAgICB9CiAgICB9LAogICAgbXNnQ2xvc2U6IGZ1bmN0aW9uIG1zZ0Nsb3NlKCkgewogICAgICB0aGlzLmlzVHJhbnNmZXIgPSBmYWxzZTsKICAgIH0sCiAgICAvLyDor53mnK/pgInkuK0KICAgIGFjdGl2ZVR4dDogZnVuY3Rpb24gYWN0aXZlVHh0KGRhdGEpIHsKICAgICAgdGhpcy5jaGF0Q29uID0gZGF0YTsKICAgICAgdGhpcy5pc01zZyA9IGZhbHNlOwogICAgfSwKICAgIC8vIOaWh+acrOWPkemAgQogICAgc2VuZFRleHQ6IGZ1bmN0aW9uIHNlbmRUZXh0KCkgewogICAgICB0aGlzLnNlbmRNc2codGhpcy5jaGF0Q29uLCAxKTsKICAgICAgdGhpcy5jaGF0Q29uID0gJyc7CiAgICB9LAogICAgLy8g57uf5LiA5Y+R6YCB5aSE55CGCiAgICBzZW5kTXNnOiBmdW5jdGlvbiBzZW5kTXNnKG1zbiwgdHlwZSkgewogICAgICB2YXIgb2JqID0gewogICAgICAgIHR5cGU6ICdjaGF0JywKICAgICAgICBkYXRhOiB7CiAgICAgICAgICBtc246IG1zbiwKICAgICAgICAgIHR5cGU6IHR5cGUsCiAgICAgICAgICB0b191aWQ6IHRoaXMudXNlckFjdGl2ZS50b191aWQsCiAgICAgICAgICBpc190b3VyaXN0OiB0aGlzLnRvdXJpc3QKICAgICAgICB9CiAgICAgIH07CiAgICAgIFNvY2tldC50aGVuKGZ1bmN0aW9uICh3cykgewogICAgICAgIHdzLnNlbmQob2JqKTsKICAgICAgfSk7CiAgICB9LAogICAgc2VuZDogZnVuY3Rpb24gc2VuZCh0eXBlLCBkYXRhKSB7CiAgICAgIFNvY2tldC5zZW5kKHsKICAgICAgICBkYXRhOiBkYXRhLAogICAgICAgIHR5cGU6IHR5cGUKICAgICAgfSk7CiAgICB9LAogICAgLy8g6I635Y+W6IGK5aSp5YiX6KGoCiAgICBnZXRDaGF0TGlzdDogZnVuY3Rpb24gZ2V0Q2hhdExpc3QoKSB7CiAgICAgIHZhciBfdGhpczcgPSB0aGlzOwoKICAgICAgc2VydmljZUxpc3QoewogICAgICAgIGxpbWl0OiB0aGlzLmxpbWl0LAogICAgICAgIHVpZDogdGhpcy51c2VyQWN0aXZlLnRvX3VpZCwKICAgICAgICB1cHBlcklkOiB0aGlzLnVwcGVySWQsCiAgICAgICAgaXNfdG91cmlzdDogdGhpcy50b3VyaXN0CiAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHJlcykgewogICAgICAgIHJlcy5kYXRhLmZvckVhY2goZnVuY3Rpb24gKGVsKSB7CiAgICAgICAgICBpZiAoZWwubXNuX3R5cGUgPT0gMSkgewogICAgICAgICAgICBlbC5tc24gPSBfdGhpczcucmVwbGFjZV9lbShlbC5tc24pOwogICAgICAgICAgfSBlbHNlIGlmIChlbC5tc25fdHlwZSA9PSAyKSB7CiAgICAgICAgICAgIGVsLm1zbiA9IF90aGlzNy5yZXBsYWNlX2VtKCJbIi5jb25jYXQoZWwubXNuLCAiXSIpKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICB2YXIgc2VsZWN0b3IgPSAnJzsKCiAgICAgICAgaWYgKF90aGlzNy51cHBlcklkID09IDApIHsKICAgICAgICAgIHNlbGVjdG9yID0gJyc7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHNlbGVjdG9yID0gImNoYXRfIi5jb25jYXQoX3RoaXM3LmNoYXRMaXN0WzBdLmlkKTsKICAgICAgICB9IC8vIHRoaXMuY2hhdExpc3QgPSByZXMuZGF0YS5jb25jYXQodGhpcy5jaGF0TGlzdCkKCgogICAgICAgIF90aGlzNy5jaGF0TGlzdCA9IFtdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkocmVzLmRhdGEpLCBfdG9Db25zdW1hYmxlQXJyYXkoX3RoaXM3LmNoYXRMaXN0KSk7CiAgICAgICAgX3RoaXM3LnVwcGVySWQgPSByZXMuZGF0YS5sZW5ndGggPiAwID8gcmVzLmRhdGFbMF0uaWQgOiAwOwogICAgICAgIF90aGlzNy5pc0xvYWQgPSBmYWxzZTsKCiAgICAgICAgX3RoaXM3LiRuZXh0VGljayhmdW5jdGlvbiAoKSB7CiAgICAgICAgICAvLyB0aGlzLnNjcm9sbFRvVG9wKCkKICAgICAgICAgIF90aGlzNy5pc1Njcm9sbCA9IHJlcy5kYXRhLmxlbmd0aCA+PSBfdGhpczcubGltaXQ7CgogICAgICAgICAgX3RoaXM3LnNldFBhZ2VTY3JvbGxUbyhzZWxlY3Rvcik7CiAgICAgICAgfSk7CiAgICAgIH0pOwogICAgfSwKICAgIC8vIOiuvue9rumhtemdoua7muWKqOS9jee9rgogICAgc2V0UGFnZVNjcm9sbFRvOiBmdW5jdGlvbiBzZXRQYWdlU2Nyb2xsVG8oc2VsZWN0b3IpIHsKICAgICAgdmFyIF90aGlzOCA9IHRoaXM7CgogICAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbiAoKSB7CiAgICAgICAgaWYgKHNlbGVjdG9yKSB7CiAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIG51bSA9IHBhcnNlRmxvYXQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoc2VsZWN0b3IpLm9mZnNldFRvcCkgLSA2MDsKICAgICAgICAgICAgX3RoaXM4LnNjcm9sbFRvcCA9IG51bTsKICAgICAgICAgIH0sIDApOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB2YXIgY29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI2NoYXRfc2Nyb2xsJyk7CiAgICAgICAgICBfdGhpczguc2Nyb2xsVG9wID0gY29udGFpbmVyLm9mZnNldEhlaWdodDsKICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKHJlcykgewogICAgICAgICAgICBpZiAoX3RoaXM4LnNjcm9sbFRvcCAhPSBfdGhpczguJHJlZnMuc2Nyb2xsQm94Lm9mZnNldEhlaWdodCkgewogICAgICAgICAgICAgIF90aGlzOC5zY3JvbGxUb3AgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjY2hhdF9zY3JvbGwnKS5vZmZzZXRIZWlnaHQ7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0sIDMwMCk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0sCiAgICAvL+a7muWKqOWIsOmhtumDqAogICAgc2Nyb2xsSGFuZGxlcjogZnVuY3Rpb24gc2Nyb2xsSGFuZGxlcigpIHsKICAgICAgdmFyIHNlbGYgPSB0aGlzOwoKICAgICAgaWYgKHRoaXMuaXNTY3JvbGwgJiYgdGhpcy51cHBlcklkKSB7CiAgICAgICAgdGhpcy5pc0xvYWQgPSB0cnVlOwogICAgICAgIHRoaXMuZ2V0Q2hhdExpc3QoKTsKICAgICAgfQogICAgfSwKICAgIC8vIOa7muWKqOadoeWKqOeUuwogICAgc2Nyb2xsVG9Ub3A6IGZ1bmN0aW9uIHNjcm9sbFRvVG9wKGR1cmF0aW9uKSB7CiAgICAgIHZhciBfdGhpczkgPSB0aGlzOwoKICAgICAgdmFyIGNvbnRhaW5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNjaGF0X3Njcm9sbCcpOwogICAgICB0aGlzLnNjcm9sbFRvcCA9IGNvbnRhaW5lci5vZmZzZXRIZWlnaHQgLSB0aGlzLm9sZEhlaWdodDsKICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAocmVzKSB7CiAgICAgICAgX3RoaXM5LnNjcm9sbFRvcCA9IF90aGlzOS4kcmVmcy5zY3JvbGxCb3gub2Zmc2V0SGVpZ2h0IC0gX3RoaXM5Lm9sZEhlaWdodDsKICAgICAgfSwgMzAwKTsKICAgIH0sCiAgICAvLyDllYblk4HmjqjpgIEKICAgIGJpbmRQdXNoOiBmdW5jdGlvbiBiaW5kUHVzaChkYXRhKSB7CiAgICAgIHRoaXMuc2VuZE1zZyhkYXRhLCA1KTsKICAgIH0sCiAgICAvLyDllYblk4Hor6bmg4UKICAgIGxvb2tHb29kczogZnVuY3Rpb24gbG9va0dvb2RzKGl0ZW0pIHsKICAgICAgdGhpcy5nb29kc0lkID0gaXRlbS5tc247CiAgICAgIHRoaXMuaXNQcm9kdWN0Qm94ID0gdHJ1ZTsKICAgIH0sCiAgICAvLyDmkJzntKLnlKjmiLcKICAgIGJpbmRTZWFyY2g6IGZ1bmN0aW9uIGJpbmRTZWFyY2goZGF0YSkgewogICAgICB0aGlzLnNlYXJjaERhdGEgPSBkYXRhOwogICAgICB0aGlzLm9sZEhlaWdodCA9IDA7CiAgICAgIHRoaXMudXBwZXJJZCA9IDA7CiAgICAgIHRoaXMuaXNTY3JvbGwgPSBmYWxzZTsKICAgIH0sCiAgICAvLyDlrqLmnI3ovazmjqUKICAgIHRyYW5zZmVyUGVvcGxlOiBmdW5jdGlvbiB0cmFuc2ZlclBlb3BsZShkYXRhKSB7CiAgICAgIHRoaXMudHJhbnNmZXJJZCA9IGRhdGEuaWQ7CiAgICAgIHRoaXMuaXNUcmFuc2ZlciA9IGZhbHNlOwogICAgICB0aGlzLiRNZXNzYWdlLnN1Y2Nlc3MoJ+i9rOaOpeaIkOWKnycpOwogICAgICBTb2NrZXQudGhlbihmdW5jdGlvbiAod3MpIHsKICAgICAgICB3cy5zZW5kKHsKICAgICAgICAgIHR5cGU6ICd0b19jaGF0JywKICAgICAgICAgIGRhdGE6IHsKICAgICAgICAgICAgaWQ6IGRhdGEudWlkCiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0pOwogICAgfSwKICAgIC8vIOWuouacjei9rOaOpeehruWumgogICAgdHJhbnNmZXJPazogZnVuY3Rpb24gdHJhbnNmZXJPaygpIHt9CiAgfQp9Ow=="},{"version":3,"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+KA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA;EACAA;EACA;EACAC;IACA;MACAC;IACA;;IACAA;EACA,CALA;EAMA;AACA,CAVA;;AAWA;EACAC,aADA;EAEAC;IACAC,sBADA;IAEAC,kBAFA;IAGAC,oBAHA;IAIAC,oBAJA;IAKAC,kBALA;IAMAC,wBANA;IAOAC,wBAPA;IAQAC;EARA,CAFA;EAYAC,IAZA,kBAYA;IACA;MACAC,cADA;MAEAC,WAFA;MAGAC,gCAHA;MAGA;MACAC,oBAJA;MAKAC,QALA;MAMAC,cANA;MAMA;MACAC,YAPA;MAOA;MACAC,YARA;MASAC,iBATA;MAUAC,aAVA;MAUA;MACAjB,YAXA;MAYAkB,QAZA;MAaAC,SAbA;MAcAC,UAdA;MAeAC,YAfA;MAeA;MACAC,YAhBA;MAiBAC,cAjBA;MAkBAC,YAlBA;MAmBAC,aAnBA;MAoBAC,mBApBA;MAqBAC,WArBA;MAsBAC,cAtBA;MAuBAC,WAvBA;MAwBAC,UAxBA;MAyBAC,UAzBA;MA0BAC;QACAC;MADA,CA1BA;MA6BAC,cA7BA;MA8BAC,cA9BA;MA8BA;MACAC,cA/BA;MA+BA;MACAC,YAhCA;MAgCA;MACAC,cAjCA;MAiCA;MACAC,gBAlCA;MAmCAC;IAnCA;EAqCA,CAlDA;EAmDAC,0CACAC;IACAC;MAAA;IAAA;EADA,EADA;IAIAC,QAJA,sBAIA;MACA;QACA;MACA,CAFA,MAEA;QACA;MACA;IACA,CAVA;IAWAC,OAXA,qBAWA;MAAA;;MACA;QACAC;;QACA;UACA;YACAA;UACA,CAFA,MAEA;YACAA;UACA;QACA,CANA,MAMA;UACAA;QACA;;QACA;MACA,CAZA;IAaA;EAzBA,EAnDA;EA8EA;EACAC;IACAC;MACAC,IADA,gBACAC,EADA,EACAC,OADA,EACAC,KADA,EACA;QACAF;UACA;UACAC;QACA,CAHA;MAIA;IANA;EADA,CA/EA;EAyFAE,QACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;EAXA,CAzFA;EAsGAC,OAtGA,qBAsGA;IAAA;;IACA;IACAC;MACA;;MACA;QACAC;MACA,CAFA,MAEA;QACA;MACA;IACA,CAPA;EAQA,CAhHA;EAiHAC,OAjHA,qBAiHA;IAAA;;IACA;IACAC;MACAC;IACA,CAFA;IAGAC;MACAC;QACAC;UACAC,kBADA;UAEAxD;QAFA;QAIAuD;UACA;YACAvD;UACA;;UACA;YACA;cACAA;YACA;UACA;;UACA;;UACA;YAAA;;YACAqD;cACA;cACA;YACA,CAHA,EAGA,GAHA;UAIA,CALA;QAMA,CAhBA;QAiBAE,iCACA;QACA,CAFA;QAGAA;UACA;QACA,CAFA;QAGAA;UACA;QACA,CAFA,EA5BA,CA+BA;;QACAA;UACA;QACA,CAFA,EAhCA,CAmCA;;QACAA;UACA;YACAE;UACA;;UACA;YACA;cACAlB;YACA;UACA,CAJA;;UAKA;YACA;UACA;QACA,CAZA;MAaA,CAjDA;IAkDA,CAnDA,EAmDA,IAnDA;IAoDA;IACA,gDA1DA,CA2DA;EACA,CA7KA;EA8KAmB;IACAC,iBADA,6BACAC,IADA,EACA;MACA;IACA,CAHA;IAIAC,SAJA,qBAIAC,CAJA,EAIA,EAJA;IAKA;IACAC,WANA,uBAMAD,CANA,EAMA;MACA;;MACA,IACAA,mBACAA,wBADA,IAEAA,6BAFA,IAGAA,mDAJA,EAKA;QACA;QACAF;MACA,CARA,MAQA;QACA;UACAJ,eADA;UAEAQ;QAFA;QAIA;MACA;;MACA;IACA,CAxBA;IAyBAC,MAzBA,kBAyBAH,CAzBA,EAyBA;MAAA;;MACA;MACA;MACA,2BAHA,CAGA;;MACAI,iCAJA,CAIA;;MACAA,2BALA,CAKA;MACA;;MACAC;QACA;MACA,CAFA;IAGA,CAnCA;IAoCA;IACAC,aArCA,yBAqCAC,GA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","names":["num","arr","ret","name","components","baseHeader","chatList","rightMenu","msgWindow","transfer","HappyScroll","goodsDetail","orderDetail","data","isEmoji","chatCon","emojiGroup","emojiList","html","userActive","kefuInfo","isMsg","isTransfer","activeMsg","text","limit","upperId","online","scrollTop","isScroll","oldHeight","isLoad","isProductBox","goodsId","isOrder","orderId","upload","header","uploadData","filename","userOnline","newRecored","searchData","scrollNum","transferId","bodyClose","tourist","computed","mapState","socketStatus","disabled","records","item","directives","paste","bind","el","binding","vnode","watch","created","serviceInfo","document","mounted","window","self","setTimeout","Socket","ws","type","mp3","methods","handleFormatError","file","bindEnter","e","handleParse","message","update","param","uploadImg","handleSuccess","res","fileList","lookOrder","setOnline","listen","console","select","replace_em","str","changeType","setDataId","id","msgClose","activeTxt","sendText","sendMsg","msn","to_uid","is_tourist","send","getChatList","serviceList","uid","then","selector","setPageScrollTo","scrollHandler","scrollToTop","duration","bindPush","lookGoods","bindSearch","transferPeople","transferOk"],"sourceRoot":"src/pages/kefu/pc","sources":["index.vue"],"sourcesContent":["<template>\r\n <div class=\"kefu-layouts\">\r\n <div class=\"content-wrapper\">\r\n <baseHeader :kefuInfo=\"kefuInfo\" :online=\"online\" @setOnline=\"setOnline\" @search=\"bindSearch\"></baseHeader>\r\n <div class=\"container\">\r\n <chatList\r\n @setDataId=\"setDataId\"\r\n @changeType=\"changeType\"\r\n :userOnline=\"userOnline\"\r\n :newRecored=\"newRecored\"\r\n :searchData=\"searchData\"\r\n ></chatList>\r\n <div class=\"chat-content\">\r\n <div class=\"chat-body\">\r\n <happy-scroll size=\"5\" resize hide-horizontal :scroll-top=\"scrollTop\" @vertical-start=\"scrollHandler\">\r\n <div style=\"width: 600px; padding: 20px\" id=\"chat_scroll\" ref=\"scrollBox\">\r\n <Spin v-show=\"isLoad\">\r\n <Icon type=\"ios-loading\" size=\"18\" class=\"demo-spin-icon-load\"></Icon>\r\n <div>Loading</div>\r\n </Spin>\r\n <div\r\n class=\"chat-item\"\r\n v-for=\"(item, index) in records\"\r\n :key=\"index\"\r\n :class=\"[{ 'right-box': item.uid == kefuInfo.uid }, { gary: item.msn_type == 5 }]\"\r\n :id=\"`chat_${item.id}`\"\r\n >\r\n <div class=\"time\" v-show=\"item.show\">{{ item.time }}</div>\r\n <div class=\"flex-box\">\r\n <div class=\"avatar\">\r\n <img v-lazy=\"item.avatar\" alt=\"\" />\r\n </div>\r\n <div class=\"msg-wrapper\">\r\n <!-- 文档 -->\r\n <template v-if=\"item.msn_type <= 2\">\r\n <div class=\"txt-wrapper pad16\" v-html=\"item.msn\"></div>\r\n </template>\r\n <!-- 图片 -->\r\n <template v-if=\"item.msn_type == 3\">\r\n <div class=\"img-wraper\" v-viewer>\r\n <img v-lazy=\"item.msn\" alt=\"\" />\r\n </div>\r\n </template>\r\n <!-- 商品 -->\r\n <template v-if=\"item.msn_type == 5\">\r\n <div class=\"order-wrapper pad16\">\r\n <div class=\"img-box\">\r\n <img :src=\"item.productInfo.image\" alt=\"\" />\r\n </div>\r\n <div class=\"order-info\">\r\n <div class=\"name line1\">\r\n {{ item.productInfo.store_name }}\r\n </div>\r\n <div class=\"sku\">\r\n 库存:{{ item.productInfo.stock }} 销量:{{\r\n parseInt(item.productInfo.sales) +\r\n parseInt(item.productInfo.ficti ? item.productInfo.ficti : 0)\r\n }}\r\n </div>\r\n <div class=\"price-box\">\r\n <div class=\"num\">¥ {{ item.productInfo.price }}</div>\r\n <a herf=\"javascript:;\" class=\"more\" @click.stop=\"lookGoods(item)\">查看商品 ></a>\r\n </div>\r\n </div>\r\n </div>\r\n </template>\r\n <!-- 订单 -->\r\n <template v-if=\"item.msn_type == 6 && (item.orderInfo.length > 0 || item.orderInfo.id)\">\r\n <div class=\"order-wrapper pad16\">\r\n <div class=\"img-box\">\r\n <img :src=\"item.orderInfo.cartInfo[0].productInfo.image\" alt=\"\" />\r\n </div>\r\n <div class=\"order-info\">\r\n <div class=\"name line1\">\r\n {{ item.orderInfo.order_id }}\r\n </div>\r\n <div class=\"sku\">商品数量:{{ item.orderInfo.total_num }}</div>\r\n <div class=\"price-box\">\r\n <div class=\"num\">¥ {{ item.orderInfo.pay_price }}</div>\r\n <a href=\"javascript:;\" class=\"more\" @click.stop=\"lookOrder(item)\">查看订单 ></a>\r\n </div>\r\n </div>\r\n </div>\r\n </template>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </happy-scroll>\r\n </div>\r\n <div class=\"chat-textarea\">\r\n <div class=\"chat-btn-wrapper\">\r\n <div class=\"left-wrapper\">\r\n <div class=\"icon-item\" @click.stop=\"isEmoji = !isEmoji\">\r\n <span class=\"iconfont iconbiaoqing1\"></span>\r\n </div>\r\n <div class=\"icon-item\">\r\n <Upload\r\n :show-upload-list=\"false\"\r\n :headers=\"header\"\r\n :data=\"uploadData\"\r\n :on-success=\"handleSuccess\"\r\n :format=\"['jpg', 'jpeg', 'png', 'gif']\"\r\n :on-format-error=\"handleFormatError\"\r\n :action=\"upload\"\r\n >\r\n <span class=\"iconfont icontupian1\"></span>\r\n </Upload>\r\n </div>\r\n <div class=\"icon-item\" @click.stop.stop=\"isMsg = true\">\r\n <span class=\"iconfont iconliaotian\"></span>\r\n </div>\r\n </div>\r\n <div class=\"right-wrapper\">\r\n <div class=\"icon-item\" @click.stop=\"isTransfer = !isTransfer\">\r\n <span class=\"iconfont iconzhuanjie\"></span>\r\n <span>转接</span>\r\n </div>\r\n <div class=\"transfer-box\" v-if=\"isTransfer\">\r\n <transfer @close=\"msgClose\" @transferPeople=\"transferPeople\" :userUid=\"userActive.to_uid\"></transfer>\r\n </div>\r\n <div class=\"transfer-bg\" v-if=\"isTransfer\" @click.stop=\"isTransfer = false\"></div>\r\n </div>\r\n <!-- 表情 -->\r\n <div class=\"emoji-box\" v-show=\"isEmoji\">\r\n <div class=\"emoji-item\" v-for=\"(emoji, index) in emojiList\" :key=\"index\">\r\n <i class=\"em\" :class=\"emoji\" @click.stop=\"select(emoji)\"></i>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"textarea-box\" style=\"position: relative\">\r\n <Input\r\n v-paste=\"handleParse\"\r\n v-model=\"chatCon\"\r\n type=\"textarea\"\r\n :rows=\"4\"\r\n @on-keydown=\"listen($event)\"\r\n placeholder=\"请输入文字内容\"\r\n style=\"font-size: 14px\"\r\n />\r\n <div class=\"send-btn\">\r\n <Button class=\"btns\" type=\"primary\" :disabled=\"disabled\" @click.stop=\"sendText\">发送</Button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div>\r\n <rightMenu\r\n :isTourist=\"tourist\"\r\n :uid=\"userActive.to_uid\"\r\n :webType=\"userActive.type\"\r\n @bindPush=\"bindPush\"\r\n ></rightMenu>\r\n </div>\r\n </div>\r\n <!-- 用户标签 -->\r\n <Modal v-model=\"isMsg\" :mask=\"true\" class=\"none-radius isMsgbox\" width=\"600\" :footer-hide=\"true\">\r\n <msgWindow v-if=\"isMsg\" @close=\"msgClose\" @activeTxt=\"activeTxt\"></msgWindow>\r\n </Modal>\r\n <!-- 商品弹窗 -->\r\n <div v-if=\"isProductBox\">\r\n <div class=\"bg\" @click.stop=\"isProductBox = false\"></div>\r\n <goodsDetail :goodsId=\"goodsId\"></goodsDetail>\r\n </div>\r\n <!-- 订单详情 -->\r\n <div v-if=\"isOrder\">\r\n <Modal v-model=\"isOrder\" title=\"订单信息\" width=\"700\" :footer-hide=\"true\" :mask=\"true\" class=\"none-radius\">\r\n <orderDetail :orderId=\"orderId\"></orderDetail>\r\n </Modal>\r\n </div>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nvar mp3 = require('../../../assets/video/notice.wav');\r\nvar mp3 = new Audio(mp3);\r\nimport Setting from '@/setting';\r\nimport { HappyScroll } from 'vue-happy-scroll';\r\nimport baseHeader from './components/baseHeader';\r\nimport chatList from './components/chatList';\r\nimport rightMenu from './components/rightMenu';\r\nimport emojiList from '@/utils/emoji';\r\nimport { Socket } from '@/libs/socket';\r\nimport util from '@/libs/util';\r\nimport msgWindow from './components/msgWindow';\r\nimport transfer from './components/transfer';\r\nimport { serviceList, uploadImg } from '@/api/kefu';\r\nimport goodsDetail from './components/goods_detail';\r\nimport orderDetail from './components/order_detail';\r\nimport { mapState } from 'vuex';\r\nimport { getCookies, removeCookies, setCookies } from '@/libs/util';\r\nimport { serviceInfo } from '@/api/kefu_mobile';\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\nexport default {\r\n name: 'index',\r\n components: {\r\n baseHeader,\r\n chatList,\r\n rightMenu,\r\n msgWindow,\r\n transfer,\r\n HappyScroll,\r\n goodsDetail,\r\n orderDetail,\r\n },\r\n data() {\r\n return {\r\n isEmoji: false,\r\n chatCon: '',\r\n emojiGroup: chunk(emojiList, 20), // 表情列表\r\n emojiList: emojiList,\r\n html: '',\r\n userActive: {}, //左侧用户列表选中信息\r\n kefuInfo: {}, //客服信息\r\n isMsg: false,\r\n isTransfer: false,\r\n activeMsg: '', // 选中的话术\r\n chatList: [],\r\n text: '',\r\n limit: 20,\r\n upperId: 0,\r\n online: true, //当前客服在线状态\r\n scrollTop: 0,\r\n isScroll: true,\r\n oldHeight: 0,\r\n isLoad: false,\r\n isProductBox: false,\r\n goodsId: '',\r\n isOrder: false,\r\n orderId: '',\r\n upload: '',\r\n header: {},\r\n uploadData: {\r\n filename: 'file',\r\n },\r\n userOnline: {},\r\n newRecored: {}, //新对话信息\r\n searchData: '', // 搜索文字\r\n scrollNum: 0, //滚动次数\r\n transferId: '', //转接id\r\n bodyClose: false,\r\n tourist: 0,\r\n };\r\n },\r\n computed: {\r\n ...mapState({\r\n socketStatus: (state) => state.admin.kefu.socketStatus,\r\n }),\r\n disabled() {\r\n if (this.chatCon.length == 0) {\r\n return true;\r\n } else {\r\n return false;\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 // 指令粘贴指令定义\r\n directives: {\r\n paste: {\r\n bind(el, binding, vnode) {\r\n el.addEventListener('paste', function (event) {\r\n //这里直接监听元素的粘贴事件\r\n binding.value(event);\r\n });\r\n },\r\n },\r\n },\r\n watch: {\r\n // socketStatus:{\r\n // handler(nVal,Val){\r\n // if(nVal){\r\n // Socket.send({\r\n // data: util.cookies.kefuGet('token'),\r\n // type: \"kefu_login\"\r\n // });\r\n // }\r\n // },\r\n // deep:true\r\n // }\r\n },\r\n created() {\r\n this.upload = Setting.apiBaseURL.replace('adminapi', 'kefuapi') + '/upload';\r\n serviceInfo().then((res) => {\r\n this.kefuInfo = res.data;\r\n if (this.kefuInfo.site_name) {\r\n document.title = this.kefuInfo.site_name;\r\n } else {\r\n this.kefuInfo.site_name = '';\r\n }\r\n });\r\n },\r\n mounted() {\r\n let self = this;\r\n window.addEventListener('click', function () {\r\n self.isEmoji = false;\r\n });\r\n setTimeout((e) => {\r\n Socket.then((ws) => {\r\n ws.send({\r\n type: 'kefu_login',\r\n data: getCookies('kefu_token'),\r\n });\r\n ws.$on(['reply', 'chat'], (data) => {\r\n if (data.msn_type == 1) {\r\n data.msn = this.replace_em(data.msn);\r\n }\r\n if (data.msn_type == 2) {\r\n if (data.msn.indexOf('[') == -1) {\r\n data.msn = this.replace_em(`[${data.msn}]`);\r\n }\r\n }\r\n this.chatList.push(data);\r\n this.$nextTick(function () {\r\n setTimeout(() => {\r\n var container = document.querySelector('#chat_scroll');\r\n this.scrollTop = container.offsetHeight;\r\n }, 800);\r\n });\r\n });\r\n ws.$on('reply', (data) => {\r\n // mp3.play();\r\n });\r\n ws.$on('socket_error', () => {\r\n this.$Message.error('连接失败');\r\n });\r\n ws.$on('err_tip', (data) => {\r\n this.$Message.error(data.msg);\r\n });\r\n //用户上线提醒广播\r\n ws.$on('user_online', (data) => {\r\n this.userOnline = data;\r\n });\r\n //用户未读消息条数更改\r\n ws.$on('mssage_num', (data) => {\r\n if (data.num > 0) {\r\n mp3.play();\r\n }\r\n this.chatList.forEach((item) => {\r\n if (item.to_uid == data.uid) {\r\n item.mssage_num = data.num;\r\n }\r\n });\r\n if (data.recored.id) {\r\n this.newRecored = data.recored;\r\n }\r\n });\r\n });\r\n }, 2000);\r\n this.header['Authori-zation'] = 'Bearer ' + getCookies('kefu_token');\r\n this.text = this.replace_em('[em-smiling_imp]');\r\n // Socket.init(this,'kefu');\r\n },\r\n methods: {\r\n handleFormatError(file) {\r\n this.$Message.error('上传图片只能是 jpg、jpg、jpeg、gif 格式!');\r\n },\r\n bindEnter(e) {},\r\n //微信截图上传图片时触发\r\n handleParse(e) {\r\n let file = null;\r\n if (\r\n e.clipboardData &&\r\n e.clipboardData.items[0] &&\r\n e.clipboardData.items[0].type &&\r\n e.clipboardData.items[0].type.indexOf('image') > -1\r\n ) {\r\n //这里就是判断是否有粘贴进来的文件且文件为图片格式\r\n file = e.clipboardData.items[0].getAsFile();\r\n } else {\r\n this.$message({\r\n type: 'warning',\r\n message: '上传的文件必须为图片且无法复制本地图片且无法同时复制多张图片',\r\n });\r\n return;\r\n }\r\n this.update(file);\r\n },\r\n update(e) {\r\n // 上传照片\r\n let file = e;\r\n let param = new FormData(); // 创建form对象\r\n param.append('filename', 'file'); // 通过append向form对象添加数据进去\r\n param.append('file', file); // 通过append向form对象添加数据进去\r\n // 添加请求头\r\n uploadImg(param).then((res) => {\r\n this.sendMsg(res.data.url, 3);\r\n });\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 lookOrder(item) {\r\n this.orderId = item.orderInfo.id;\r\n this.isOrder = true;\r\n },\r\n setOnline(data) {\r\n Socket.then((ws) => {\r\n ws.send({\r\n data: {\r\n online: data,\r\n },\r\n type: 'online',\r\n });\r\n });\r\n this.online = data;\r\n },\r\n // 阻止浏览器默认换行操作\r\n listen(e) {\r\n if (e.shiftKey && e.keyCode == 13) {\r\n console.log('换行');\r\n } else if (e.keyCode == 13) {\r\n if (e.target.value == '') {\r\n return this.$Message.error('请输入消息');\r\n }\r\n this.sendMsg(e.target.value, 1);\r\n this.chatCon = '';\r\n }\r\n },\r\n // 输入框选择表情\r\n select(data) {\r\n let val = `[${data}]`;\r\n this.chatCon += val;\r\n this.isEmoji = false;\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 changeType(data) {\r\n this.tourist = data;\r\n },\r\n // 获取列表用户信息\r\n setDataId(data) {\r\n this.userActive = data;\r\n this.chatList = [];\r\n this.upperId = 0;\r\n this.oldHeight = 0;\r\n this.isScroll = true;\r\n if (data) {\r\n window.document.title = data.nickname\r\n ? `正在和${data.nickname}对话中 - ${this.kefuInfo.site_name}`\r\n : '正在和游客对话中 - ' + this.kefuInfo.site_name;\r\n\r\n Socket.then((ws) => {\r\n ws.send({\r\n data: {\r\n id: this.userActive.to_uid,\r\n },\r\n type: 'to_chat',\r\n });\r\n });\r\n this.getChatList();\r\n } else {\r\n window.document.title = this.kefuInfo.site_name;\r\n }\r\n },\r\n msgClose() {\r\n this.isTransfer = false;\r\n },\r\n // 话术选中\r\n activeTxt(data) {\r\n this.chatCon = data;\r\n this.isMsg = false;\r\n },\r\n // 文本发送\r\n sendText() {\r\n this.sendMsg(this.chatCon, 1);\r\n this.chatCon = '';\r\n },\r\n\r\n // 统一发送处理\r\n sendMsg(msn, type) {\r\n let obj = {\r\n type: 'chat',\r\n data: {\r\n msn,\r\n type,\r\n to_uid: this.userActive.to_uid,\r\n is_tourist: this.tourist,\r\n },\r\n };\r\n Socket.then((ws) => {\r\n ws.send(obj);\r\n });\r\n },\r\n send(type, data) {\r\n Socket.send({\r\n data,\r\n type,\r\n });\r\n },\r\n // 获取聊天列表\r\n getChatList() {\r\n serviceList({\r\n limit: this.limit,\r\n uid: this.userActive.to_uid,\r\n upperId: this.upperId,\r\n is_tourist: this.tourist,\r\n }).then((res) => {\r\n res.data.forEach((el) => {\r\n if (el.msn_type == 1) {\r\n el.msn = this.replace_em(el.msn);\r\n } else if (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 = '';\r\n } else {\r\n selector = `chat_${this.chatList[0].id}`;\r\n }\r\n\r\n // this.chatList = res.data.concat(this.chatList)\r\n this.chatList = [...res.data, ...this.chatList];\r\n this.upperId = res.data.length > 0 ? res.data[0].id : 0;\r\n this.isLoad = false;\r\n this.$nextTick(() => {\r\n // this.scrollToTop()\r\n this.isScroll = res.data.length >= this.limit;\r\n this.setPageScrollTo(selector);\r\n });\r\n });\r\n },\r\n // 设置页面滚动位置\r\n setPageScrollTo(selector) {\r\n this.$nextTick(() => {\r\n if (selector) {\r\n setTimeout(() => {\r\n let num = parseFloat(document.getElementById(selector).offsetTop) - 60;\r\n this.scrollTop = num;\r\n }, 0);\r\n } else {\r\n var container = document.querySelector('#chat_scroll');\r\n this.scrollTop = container.offsetHeight;\r\n setTimeout((res) => {\r\n if (this.scrollTop != this.$refs.scrollBox.offsetHeight) {\r\n this.scrollTop = document.querySelector('#chat_scroll').offsetHeight;\r\n }\r\n }, 300);\r\n }\r\n });\r\n },\r\n //滚动到顶部\r\n scrollHandler() {\r\n let self = this;\r\n if (this.isScroll && this.upperId) {\r\n this.isLoad = true;\r\n this.getChatList();\r\n }\r\n },\r\n // 滚动条动画\r\n scrollToTop(duration) {\r\n var container = document.querySelector('#chat_scroll');\r\n this.scrollTop = container.offsetHeight - this.oldHeight;\r\n setTimeout((res) => {\r\n this.scrollTop = this.$refs.scrollBox.offsetHeight - this.oldHeight;\r\n }, 300);\r\n },\r\n // 商品推送\r\n bindPush(data) {\r\n this.sendMsg(data, 5);\r\n },\r\n // 商品详情\r\n lookGoods(item) {\r\n this.goodsId = item.msn;\r\n this.isProductBox = true;\r\n },\r\n // 搜索用户\r\n bindSearch(data) {\r\n this.searchData = data;\r\n this.oldHeight = 0;\r\n this.upperId = 0;\r\n this.isScroll = false;\r\n },\r\n // 客服转接\r\n transferPeople(data) {\r\n this.transferId = data.id;\r\n this.isTransfer = false;\r\n this.$Message.success('转接成功');\r\n Socket.then((ws) => {\r\n ws.send({\r\n type: 'to_chat',\r\n data: { id: data.uid },\r\n });\r\n });\r\n },\r\n // 客服转接确定\r\n transferOk() {},\r\n },\r\n};\r\n</script>\r\n\r\n<style lang=\"stylus\" scoped>\r\n@import '../../../styles/emoji-awesome/css/google.min.css';\r\n\r\ntextarea.ivu-input {\r\n border: none;\r\n resize: none;\r\n}\r\n\r\n.kefu-layouts {\r\n padding-top: 30px;\r\n height: 100%;\r\n display: flex;\r\n background: #ccc;\r\n overflow: scroll;\r\n}\r\n\r\n.content-wrapper {\r\n display: flex;\r\n flex-direction: column;\r\n width: 1200px;\r\n height: 808px;\r\n margin: 0 auto;\r\n background: #fff;\r\n\r\n .container {\r\n flex: 1;\r\n display: flex;\r\n\r\n .chat-content {\r\n width: 600px;\r\n height: 100%;\r\n border-right: 1px solid #ECECEC;\r\n\r\n .chat-body {\r\n height: 530px;\r\n\r\n .chat-item {\r\n margin-bottom: 10px;\r\n\r\n .time {\r\n text-align: center;\r\n color: #999999;\r\n font-size: 14px;\r\n margin: 18px 0;\r\n }\r\n\r\n .flex-box {\r\n display: flex;\r\n }\r\n\r\n .avatar {\r\n width: 40px;\r\n height: 40px;\r\n margin-right: 16px;\r\n\r\n img {\r\n display: block;\r\n width: 100%;\r\n height: 100%;\r\n border-radius: 50%;\r\n }\r\n }\r\n\r\n .msg-wrapper {\r\n max-width: 320px;\r\n background: #F5F5F5;\r\n border-radius: 10px;\r\n color: #000000;\r\n font-size: 14px;\r\n overflow: hidden;\r\n\r\n .txt-wrapper {\r\n word-break: break-all;\r\n white-space: pre-wrap;\r\n }\r\n\r\n .pad16 {\r\n padding: 9px;\r\n }\r\n\r\n .img-wraper img {\r\n max-width: 100%;\r\n height: auto;\r\n display: block;\r\n }\r\n\r\n .order-wrapper {\r\n display: flex;\r\n width: 320px;\r\n\r\n .img-box {\r\n width: 60px;\r\n height: 60px;\r\n\r\n img {\r\n width: 100%;\r\n height: 100%;\r\n border-radius: 5px;\r\n }\r\n }\r\n\r\n .order-info {\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: space-between;\r\n width: 224px;\r\n margin-left: 10px;\r\n font-size: 12px;\r\n\r\n .price-box {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n font-size: 14px;\r\n color: #FF0000;\r\n\r\n .more {\r\n font-size: 12px;\r\n color: #1890FF;\r\n }\r\n }\r\n\r\n .name {\r\n font-size: 14px;\r\n }\r\n\r\n .sku {\r\n margin: 1px 0;\r\n color: #999999;\r\n }\r\n }\r\n }\r\n }\r\n\r\n &.right-box {\r\n .flex-box {\r\n flex-direction: row-reverse;\r\n\r\n .avatar {\r\n margin-right: 0;\r\n margin-left: 16px;\r\n }\r\n\r\n .msg-wrapper {\r\n background: #CDE0FF;\r\n }\r\n }\r\n\r\n &.gary .msg-wrapper {\r\n background: #f5f5f5;\r\n }\r\n }\r\n }\r\n }\r\n\r\n .chat-textarea {\r\n height: 214px;\r\n border-top: 1px solid #ECECEC;\r\n\r\n .chat-btn-wrapper {\r\n position: relative;\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n padding: 15px 0;\r\n\r\n .left-wrapper {\r\n display: flex;\r\n align-items: center;\r\n\r\n .icon-item {\r\n display: flex;\r\n align-items: center;\r\n margin-left: 20px;\r\n cursor: pointer;\r\n\r\n .iconfont {\r\n font-size: 22px;\r\n color: #333333;\r\n }\r\n }\r\n }\r\n\r\n .right-wrapper {\r\n position: relative;\r\n padding-right: 20px;\r\n\r\n .icon-item {\r\n display: flex;\r\n align-items: center;\r\n font-size: 15px;\r\n color: #333;\r\n cursor: pointer;\r\n\r\n span {\r\n margin-left: 10px;\r\n }\r\n }\r\n\r\n .transfer-box {\r\n z-index: 60;\r\n position: absolute;\r\n right: 1px;\r\n bottom: 43px;\r\n width: 140px;\r\n background: #fff;\r\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\r\n padding: 16px;\r\n }\r\n\r\n .transfer-bg {\r\n z-index: 50;\r\n position: fixed;\r\n left: 0;\r\n top: 0;\r\n width: 100%;\r\n height: 100%;\r\n background: transparent;\r\n }\r\n }\r\n\r\n .emoji-box {\r\n position: absolute;\r\n left: 0;\r\n top: 0;\r\n transform: translateY(-100%);\r\n display: flex;\r\n flex-wrap: wrap;\r\n width: 60%;\r\n padding: 15px 9px;\r\n box-shadow: 0px 0px 13px 1px rgba(0, 0, 0, 0.1);\r\n background: #fff;\r\n overflow: auto;\r\n height: 240px;\r\n\r\n .emoji-item {\r\n margin-right: 13px;\r\n margin-bottom: 8px;\r\n cursor: pointer;\r\n\r\n &:nth-child(10n) {\r\n margin-right: 0;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\n.send-btn {\r\n position: absolute;\r\n right: 0;\r\n bottom: 10px;\r\n display: flex;\r\n justify-content: flex-end;\r\n margin-top: 10px;\r\n margin-right: 10px;\r\n width: 80px;\r\n\r\n .btns {\r\n width: 100%;\r\n background: #3875EA;\r\n\r\n &[disabled] {\r\n background: #CCCCCC;\r\n color: #fff;\r\n }\r\n }\r\n}\r\n\r\n.bg {\r\n z-index: 100;\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}\r\n\r\n/deep/.happy-scroll-content {\r\n width: 100%;\r\n\r\n .demo-spin-icon-load {\r\n animation: ani-demo-spin 1s linear infinite;\r\n }\r\n\r\n @keyframes ani-demo-spin {\r\n from {\r\n transform: rotate(0deg);\r\n }\r\n\r\n 50% {\r\n transform: rotate(180deg);\r\n }\r\n\r\n to {\r\n transform: rotate(360deg);\r\n }\r\n }\r\n\r\n .demo-spin-col {\r\n height: 100px;\r\n position: relative;\r\n border: 1px solid #eee;\r\n }\r\n}\r\n\r\n.isMsgbox {\r\n >>> .ivu-modal-body {\r\n padding: 0;\r\n }\r\n}\r\n.emoji-box::-webkit-scrollbar {\r\n width: 0;\r\n}\r\n</style>\r\n"]}]}
|