fb0ffc6462718092dadd4ad3c27c8334.json 62 KB

1
  1. {"remainingRequest":"C:\\Users\\Administrator\\Desktop\\crmeb5.0\\template\\admin\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!C:\\Users\\Administrator\\Desktop\\crmeb5.0\\template\\admin\\src\\components\\uploadVideo2\\index.vue?vue&type=script&lang=js","dependencies":[{"path":"C:\\Users\\Administrator\\Desktop\\crmeb5.0\\template\\admin\\src\\components\\uploadVideo2\\index.vue","mtime":1761185180034},{"path":"C:\\Users\\Administrator\\Desktop\\crmeb5.0\\template\\admin\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"C:\\Users\\Administrator\\Desktop\\crmeb5.0\\template\\admin\\node_modules\\babel-loader\\lib\\index.js","mtime":456789000000},{"path":"C:\\Users\\Administrator\\Desktop\\crmeb5.0\\template\\admin\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"C:\\Users\\Administrator\\Desktop\\crmeb5.0\\template\\admin\\node_modules\\vue-loader\\lib\\index.js","mtime":499162500000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:DQppbXBvcnQgew0KICBnZXRDYXRlZ29yeUxpc3RBcGksDQogIGNyZWF0ZUFwaSwNCiAgZmlsZUxpc3RBcGksDQogIGNhdGVnb3J5RWRpdEFwaSwNCiAgbW92ZUFwaSwNCiAgZmlsZVVwZGF0ZUFwaSwNCiAgdmlkZW9DbG91ZFVwbG9hZCwNCn0gZnJvbSAnQC9hcGkvdXBsb2FkUGljdHVyZXMnOw0KaW1wb3J0IHsgcHJvZHVjdEdldFRlbXBLZXlzQXBpLCB1cGxvYWRUeXBlIH0gZnJvbSAnQC9hcGkvcHJvZHVjdCc7DQppbXBvcnQgeyB1cGxvYWRCeVBpZWNlcyB9IGZyb20gJ0AvdXRpbHMvdXBsb2FkJzsgLy/lvJXlhaV1cGxvYWRCeVBpZWNlc+aWueazlQ0KDQppbXBvcnQgU2V0dGluZyBmcm9tICdAL3NldHRpbmcnOw0KaW1wb3J0IHsgZ2V0Q29va2llcyB9IGZyb20gJ0AvbGlicy91dGlsJzsNCmltcG9ydCB1cGxvYWRJbWcgZnJvbSAnQC9jb21wb25lbnRzL3VwbG9hZEltZyc7DQppbXBvcnQgeyBWdWVUcmVlTGlzdCwgVHJlZSwgVHJlZU5vZGUgfSBmcm9tICd2dWUtdHJlZS1saXN0JzsNCmltcG9ydCB7IGlzVmlkZW9VcGxvYWQgfSBmcm9tICdAL3V0aWxzJzsNCmV4cG9ydCBkZWZhdWx0IHsNCiAgbmFtZTogJ3VwbG9hZFBpY3R1cmVzJywNCiAgY29tcG9uZW50czogeyB1cGxvYWRJbWcsIFZ1ZVRyZWVMaXN0IH0sDQogIHByb3BzOiB7DQogICAgaXNDaG9pY2U6IHsNCiAgICAgIHR5cGU6IFN0cmluZywNCiAgICAgIGRlZmF1bHQ6ICdvbmUnLA0KICAgIH0sDQogICAgaXNQYWdlOiB7DQogICAgICB0eXBlOiBCb29sZWFuLA0KICAgICAgZGVmYXVsdDogZmFsc2UsDQogICAgfSwNCiAgICBpc0lmcmFtZTogew0KICAgICAgdHlwZTogQm9vbGVhbiwNCiAgICAgIGRlZmF1bHQ6IGZhbHNlLA0KICAgIH0sDQogICAgZ3JpZEJ0bjogew0KICAgICAgdHlwZTogT2JqZWN0LA0KICAgICAgZGVmYXVsdDogbnVsbCwNCiAgICB9LA0KICAgIGdyaWRQaWM6IHsNCiAgICAgIHR5cGU6IE9iamVjdCwNCiAgICAgIGRlZmF1bHQ6IG51bGwsDQogICAgfSwNCiAgICBpc1Nob3c6IHsNCiAgICAgIHR5cGU6IE51bWJlciwNCiAgICAgIGRlZmF1bHQ6IDEsDQogICAgfSwNCiAgICBwYWdlTGltaXQ6IHsNCiAgICAgIHR5cGU6IE51bWJlciwNCiAgICAgIGRlZmF1bHQ6IDAsDQogICAgfSwNCiAgfSwNCiAgZGF0YSgpIHsNCiAgICByZXR1cm4gew0KICAgICAgc3BpblNob3c6IGZhbHNlLA0KICAgICAgZmlsZVVybDogU2V0dGluZy5hcGlCYXNlVVJMICsgJy9maWxlL3VwbG9hZCcsDQogICAgICBtb2RhbFBpYzogZmFsc2UsDQogICAgICB0cmVlRGF0YTogW10sDQogICAgICB0cmVlRGF0YTI6IFtdLA0KICAgICAgcGljdHJ1ZUxpc3Q6IFtdLA0KICAgICAgdXBsb2FkRGF0YToge30sIC8vIOS4iuS8oOWPguaVsA0KICAgICAgY2hlY2tQaWNMaXN0OiBbXSwNCiAgICAgIHVwbG9hZE5hbWU6IHsNCiAgICAgICAgbmFtZTogJycsDQogICAgICAgIGFsbDogMSwNCiAgICAgICAgdHlwZTogMSwNCiAgICAgIH0sDQogICAgICBmb3JtVmFsaWRhdGU6IHsgaWQ6IDAgfSwNCiAgICAgIEZyb21EYXRhOiBudWxsLA0KICAgICAgdHJlZUlkOiAnJywNCiAgICAgIGlzSnVkZ2U6IGZhbHNlLA0KICAgICAgYnV0dG9uUHJvcHM6IHsNCiAgICAgICAgdHlwZTogJ2RlZmF1bHQnLA0KICAgICAgICBzaXplOiAnc21hbGwnLA0KICAgICAgfSwNCiAgICAgIGZpbGVEYXRhOiB7DQogICAgICAgIHBpZDogMCwNCiAgICAgICAgcmVhbF9uYW1lOiAnJywNCiAgICAgICAgcGFnZTogMSwNCiAgICAgICAgbGltaXQ6IHRoaXMucGFnZUxpbWl0IHx8IDE4LA0KICAgICAgICB0eXBlOiAxLA0KICAgICAgfSwNCiAgICAgIHRvdGFsOiAwLA0KICAgICAgcGlkczogMCwNCiAgICAgIGxpc3Q6IFtdLA0KICAgICAgbW9kYWxUaXRsZVNzOiAnJywNCiAgICAgIGlzU2hvd1BpYzogZmFsc2UsDQogICAgICBoZWFkZXI6IHt9LA0KICAgICAgaWRzOiBbXSwgLy8g6YCJ5Lit6ZmE5Lu255qEaWTpm4blkIgNCiAgICAgIGxpZXRTdHlsZTogJ2xpc3QnLA0KICAgICAgaW1hZ2VVcmw6ICcnLA0KICAgICAgbG9hZGluZzogZmFsc2UsDQogICAgICBtdWx0aXBsZVNlbGVjdGlvbjogW10sDQogICAgICBwaWNtYXJnaW46ICc1cHgnLCAvL+m7mOiupOi3neemu+WPs+i+uei3neemuw0KICAgICAgdmlkZW9Nb2RhbDogZmFsc2UsDQogICAgICB1cGxvYWRfdHlwZTogJycsDQogICAgICB1cGxvYWQ6IHsNCiAgICAgICAgdmlkZW9Jbmc6IGZhbHNlLCAvLyDmmK/lkKbmmL7npLrov5vluqbmnaHvvJsNCiAgICAgIH0sDQogICAgfTsNCiAgfSwNCiAgbW91bnRlZCgpIHsNCiAgICBpZiAodGhpcy5pc1BhZ2UpIHsNCiAgICAgIGxldCBoYW5nID0gcGFyc2VJbnQoKGRvY3VtZW50LmJvZHkuY2xpZW50SGVpZ2h0IC0gdGhpcy4kcmVmcy5pbWdMaXN0Qm94LmNsaWVudEhlaWdodCAtIDMyNSkgLyAxODApOyAvL+iuoeeul+ihjOaVsA0KICAgICAgbGV0IGNvbCA9IHBhcnNlSW50KHRoaXMuJHJlZnMuaW1nTGlzdEJveC5jbGllbnRXaWR0aCAvIDE1Nik7IC8v6K6h566X5YiX5pWwDQogICAgICB0aGlzLmZpbGVEYXRhLmxpbWl0ID0gY29sICogaGFuZzsgLy/orqHnrpfliIbpobXmlbDph48NCiAgICAgIHRoaXMucGljbWFyZ2luID0gcGFyc2VJbnQodGhpcy4kcmVmcy5pbWdMaXN0Qm94LmNsaWVudFdpZHRoIC0gY29sICogMTQ2KSAvICgyICogY29sKSArICdweCc7IC8v5bmz5Z2H5YiG5biD6K6h566XbWFyZ2lu6Led56a7DQogICAgfQ0KICAgIHRoaXMuZ2V0VG9rZW4oKTsNCiAgICB0aGlzLnVwbG9hZFR5cGUoKTsNCiAgICB0aGlzLmdldExpc3QoKTsNCiAgICB0aGlzLmdldEZpbGVMaXN0KCk7DQogIH0sDQogIG1ldGhvZHM6IHsNCiAgICAvL+iOt+WPluinhumikeS4iuS8oOexu+Weiw0KICAgIHVwbG9hZFR5cGUoKSB7DQogICAgICB1cGxvYWRUeXBlKCkudGhlbigocmVzKSA9PiB7DQogICAgICAgIHRoaXMudXBsb2FkX3R5cGUgPSByZXMuZGF0YS51cGxvYWRfdHlwZTsNCiAgICAgIH0pOw0KICAgIH0sDQogICAgYmVmb3JlVXBsb2FkKCkgew0KICAgICAgdGhpcy51cGxvYWREYXRhID0ge307DQogICAgICBsZXQgcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7DQogICAgICAgIHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICByZXNvbHZlKHRydWUpOw0KICAgICAgICB9KTsNCiAgICAgIH0pOw0KICAgICAgcmV0dXJuIHByb21pc2U7DQogICAgfSwNCiAgICB6aF91cGxvYWRGaWxlKCkgew0KICAgICAgdGhpcy4kcmVmcy5yZWZpZC5jbGljaygpOw0KICAgIH0sDQogICAgemhfdXBsb2FkRmlsZV9jaGFuZ2UoZXZmaWxlKSB7DQogICAgICBsZXQgdGhhdCA9IHRoaXM7DQogICAgICBpZiAoZXZmaWxlLnRhcmdldC5maWxlc1swXS50eXBlICE9PSAndmlkZW8vbXA0Jykgew0KICAgICAgICByZXR1cm4gdGhhdC4kbWVzc2FnZS5lcnJvcign5Y+q6IO95LiK5LygbXA05paH5Lu2Jyk7DQogICAgICB9DQogICAgICBjb25zb2xlLmxvZygnMTExJyk7DQogICAgICBkZWJ1Z2dlcjsNCiAgICAgIGxldCB0eXBlcyA9IHsNCiAgICAgICAga2V5OiBldmZpbGUudGFyZ2V0LmZpbGVzWzBdLm5hbWUsDQogICAgICAgIGNvbnRlbnRUeXBlOiBldmZpbGUudGFyZ2V0LmZpbGVzWzBdLnR5cGUsDQogICAgICB9Ow0KICAgICAgcHJvZHVjdEdldFRlbXBLZXlzQXBpKHR5cGVzKS50aGVuKChyZXMpID0+IHsNCiAgICAgICAgY29uc29sZS5sb2cocmVzLCBldmZpbGUsIHJlcy5kYXRhLnR5cGUpOw0KICAgICAgICB0aGF0LiR2aWRlb0Nsb3VkDQogICAgICAgICAgLnZpZGVvVXBsb2FkKHsNCiAgICAgICAgICAgIHR5cGU6IHJlcy5kYXRhLnR5cGUsDQogICAgICAgICAgICBldmZpbGU6IGV2ZmlsZSwNCiAgICAgICAgICAgIHJlczogcmVzLA0KICAgICAgICAgICAgdXBsb2FkaW5nKHN0YXR1cywgcHJvZ3Jlc3MpIHsNCiAgICAgICAgICAgICAgdGhhdC51cGxvYWQudmlkZW9JbmcgPSBzdGF0dXM7DQogICAgICAgICAgICB9LA0KICAgICAgICAgIH0pDQogICAgICAgICAgLnRoZW4oKHJlcykgPT4gew0KICAgICAgICAgICAgdmlkZW9DbG91ZFVwbG9hZCh7DQogICAgICAgICAgICAgIHBpZDogdGhpcy50cmVlSWQgfHwgMCwNCiAgICAgICAgICAgICAgdmlkZW9fcGF0aDogcmVzLnVybCwNCiAgICAgICAgICAgICAgdmlkZW9fbmFtZTogZXZmaWxlLnRhcmdldC5maWxlc1swXS5uYW1lLA0KICAgICAgICAgICAgfSkudGhlbigocmVzKSA9PiB7DQogICAgICAgICAgICAgIHRoaXMuZ2V0RmlsZUxpc3QoKTsNCiAgICAgICAgICAgIH0pOw0KICAgICAgICAgIH0pDQogICAgICAgICAgLmNhdGNoKChyZXMpID0+IHsNCiAgICAgICAgICAgIHRoYXQuJG1lc3NhZ2UuZXJyb3IocmVzKTsNCiAgICAgICAgICB9KTsNCiAgICAgIH0pOw0KICAgIH0sDQogICAgdmlkZW9TYXZlVG9VcmwoZmlsZSkgew0KICAgICAgaWYgKGlzVmlkZW9VcGxvYWQoZmlsZSkpDQogICAgICAgIHVwbG9hZEJ5UGllY2VzKHsNCiAgICAgICAgICBmaWxlOiBmaWxlLCAvLyDop4bpopHlrp7kvZMNCiAgICAgICAgICBwaWVjZVNpemU6IDMsIC8vIOWIhueJh+Wkp+Wwjw0KICAgICAgICAgIHN1Y2Nlc3M6IChkYXRhKSA9PiB7DQogICAgICAgICAgICB0aGlzLnByb2dyZXNzID0gMTAwOw0KICAgICAgICAgICAgdmlkZW9DbG91ZFVwbG9hZCh7DQogICAgICAgICAgICAgIHBpZDogdGhpcy50cmVlSWQgfHwgMCwNCiAgICAgICAgICAgICAgdmlkZW9fcGF0aDogZGF0YS5maWxlX3BhdGgsDQogICAgICAgICAgICAgIHZpZGVvX25hbWU6IGZpbGUubmFtZSwNCiAgICAgICAgICAgIH0pLnRoZW4oKHJlcykgPT4gew0KICAgICAgICAgICAgICB0aGlzLmdldEZpbGVMaXN0KCk7DQogICAgICAgICAgICAgIHRoaXMuJG1lc3NhZ2Uuc3VjY2Vzcygn6KeG6aKR5LiK5Lyg5oiQ5YqfJyk7DQogICAgICAgICAgICB9KTsNCiAgICAgICAgICB9LA0KICAgICAgICAgIGVycm9yOiAoZSkgPT4gew0KICAgICAgICAgICAgdGhpcy4kbWVzc2FnZS5lcnJvcihlLm1zZyk7DQogICAgICAgICAgfSwNCiAgICAgICAgICB1cGxvYWRpbmc6IChjaHVuaywgYWxsQ2h1bmspID0+IHsNCiAgICAgICAgICAgIHRoaXMudmlkZW9JbmcgPSB0cnVlOw0KICAgICAgICAgICAgbGV0IHN0ID0gTWF0aC5mbG9vcigoY2h1bmsgLyBhbGxDaHVuaykgKiAxMDApOw0KICAgICAgICAgICAgdGhpcy5wcm9ncmVzcyA9IHN0Ow0KICAgICAgICAgIH0sDQogICAgICAgIH0pOw0KICAgICAgcmV0dXJuIGZhbHNlOw0KICAgIH0sDQogICAgcmFkaW9DaGFuZ2UoKSB7DQogICAgICB0aGlzLmluaXREYXRhKCk7DQogICAgfSwNCiAgICBsb29rSW1nKGl0ZW0pIHsNCiAgICAgIHRoaXMuaW1hZ2VVcmwgPSBpdGVtLmF0dF9kaXI7DQogICAgICB0aGlzLnZpZGVvTW9kYWwgPSB0cnVlOw0KICAgIH0sDQogICAgb25EZWwobm9kZSkgew0KICAgICAgbGV0IG1ldGhvZCA9IG5vZGUuY2F0ZV9pZCA/IHJvdXRlRGVsIDogcm91dGVDYXRlRGVsOw0KICAgICAgdGhpcy4kbXNnYm94KHsNCiAgICAgICAgdGl0bGU6ICfmj5DnpLonLA0KICAgICAgICBtZXNzYWdlOiAn5piv5ZCm56Gu5a6a5Yig6Zmk6K+l6I+c5Y2VJywNCiAgICAgICAgc2hvd0NhbmNlbEJ1dHRvbjogdHJ1ZSwNCiAgICAgICAgY2FuY2VsQnV0dG9uVGV4dDogJ+WPlua2iCcsDQogICAgICAgIGNvbmZpcm1CdXR0b25UZXh0OiAn5Yig6ZmkJywNCiAgICAgICAgaWNvbkNsYXNzOiAnZWwtaWNvbi13YXJuaW5nJywNCiAgICAgICAgY29uZmlybUJ1dHRvbkNsYXNzOiAnYnRuLWN1c3RvbS1jYW5jZWwnLA0KICAgICAgfSkNCiAgICAgICAgLnRoZW4oKCkgPT4gew0KICAgICAgICAgIG1ldGhvZChub2RlLmlkKQ0KICAgICAgICAgICAgLnRoZW4oKHJlcykgPT4gew0KICAgICAgICAgICAgICB0aGlzLiRtZXNzYWdlLnN1Y2Nlc3MocmVzLm1zZyk7DQogICAgICAgICAgICAgIG5vZGUucmVtb3ZlKCk7DQogICAgICAgICAgICB9KQ0KICAgICAgICAgICAgLmNhdGNoKChlcnIpID0+IHsNCiAgICAgICAgICAgICAgdGhpcy4kbWVzc2FnZS5lcnJvcihlcnIpOw0KICAgICAgICAgICAgfSk7DQogICAgICAgIH0pDQogICAgICAgIC5jYXRjaCgoKSA9PiB7fSk7DQogICAgfSwNCg0KICAgIG9uQ2hhbmdlTmFtZShwYXJhbXMpIHsNCiAgICAgIGlmIChwYXJhbXMuZXZlbnRUeXBlID09ICdibHVyJykgew0KICAgICAgICBsZXQgZGF0YSA9IHsNCiAgICAgICAgICBuYW1lOiBwYXJhbXMubmV3TmFtZSwNCiAgICAgICAgICBpZDogcGFyYW1zLmlkLA0KICAgICAgICB9Ow0KICAgICAgICBpbnRlcmZhY2VFZGl0TmFtZShkYXRhKQ0KICAgICAgICAgIC50aGVuKChyZXMpID0+IHsNCiAgICAgICAgICAgIHRoaXMuJG1lc3NhZ2Uuc3VjY2VzcyhyZXMubXNnKTsNCiAgICAgICAgICB9KQ0KICAgICAgICAgIC5jYXRjaCgoZXJyKSA9PiB7DQogICAgICAgICAgICB0aGlzLiRtZXNzYWdlLmVycm9yKGVycik7DQogICAgICAgICAgfSk7DQogICAgICB9DQogICAgfSwNCiAgICAvLyDmt7vliqDliIbnsbsNCiAgICBhZGRTb3J0KCkgew0KICAgICAgdGhpcy5hcHBlbmQoeyBpZDogdGhpcy50cmVlSWQgfHwgMCB9KTsNCiAgICB9LA0KICAgIC8vIOeCueWHu+iPnOWNlQ0KICAgIGNsaWNrTWVudShkYXRhLCBuYW1lKSB7DQogICAgICBpZiAobmFtZSA9PSAxKSB7DQogICAgICAgIHRoaXMuYXBwZW5kKGRhdGEpOw0KICAgICAgfSBlbHNlIGlmIChuYW1lID09IDIpIHsNCiAgICAgICAgdGhpcy5lZGl0UGljKGRhdGEpOw0KICAgICAgfSBlbHNlIGlmIChuYW1lID09IDMpIHsNCiAgICAgICAgdGhpcy5yZW1vdmUoZGF0YSwgJ+WIhuexuycpOw0KICAgICAgfQ0KICAgIH0sDQogICAgdXBsb2FkU3VjY2VzcygpIHsNCiAgICAgIHRoaXMuZmlsZURhdGEucGFnZSA9IDE7DQogICAgICB0aGlzLmluaXREYXRhKCk7DQogICAgICB0aGlzLmdldEZpbGVMaXN0KCk7DQogICAgfSwNCiAgICB1cGxvYWRNb2RhbCgpIHsNCiAgICAgIHRoaXMuJHJlZnMudXBsb2FkLnVwbG9hZE1vZGFsID0gdHJ1ZTsNCiAgICB9LA0KICAgIGVudGVyTW91c2UoaXRlbSkgew0KICAgICAgaXRlbS5yZWFsTmFtZSA9ICFpdGVtLnJlYWxOYW1lOw0KICAgIH0sDQogICAgZW50ZXJMZWF2ZShpdGVtKSB7DQogICAgICBpdGVtLmlzU2hvd0VkaXQgPSAhaXRlbS5pc1Nob3dFZGl0Ow0KICAgIH0sDQogICAgLy8g5LiK5Lyg5aS06YOodG9rZW4NCiAgICBnZXRUb2tlbigpIHsNCiAgICAgIHRoaXMuaGVhZGVyWydBdXRob3JpLXphdGlvbiddID0gJ0JlYXJlciAnICsgZ2V0Q29va2llcygndG9rZW4nKTsNCiAgICB9LA0KICAgIG1vdmVJbWcoc3RhdHVzKSB7DQogICAgICBpZiAoIXN0YXR1cykgew0KICAgICAgICB0aGlzLmdldE1vdmUoKTsNCiAgICAgIH0gZWxzZSB7DQogICAgICAgIGlmICghdGhpcy5pZHMudG9TdHJpbmcoKSkgew0KICAgICAgICAgIHRoaXMuJG1lc3NhZ2Uud2FybmluZygn6K+35YWI6YCJ5oup6KeG6aKRJyk7DQogICAgICAgICAgcmV0dXJuOw0KICAgICAgICB9DQogICAgICB9DQogICAgfSwNCiAgICBzZWFyY2hJbWcoKSB7fSwNCiAgICAvLyDnp7vliqjliIbnsbsNCiAgICBnZXRNb3ZlKCkgew0KICAgICAgbGV0IGRhdGEgPSB7DQogICAgICAgIHBpZDogdGhpcy5waWRzLA0KICAgICAgICBpbWFnZXM6IHRoaXMuaWRzLnRvU3RyaW5nKCksDQogICAgICB9Ow0KICAgICAgaWYgKCFkYXRhLmltYWdlcykgcmV0dXJuOw0KICAgICAgbW92ZUFwaShkYXRhKQ0KICAgICAgICAudGhlbihhc3luYyAocmVzKSA9PiB7DQogICAgICAgICAgdGhpcy4kbWVzc2FnZS5zdWNjZXNzKHJlcy5tc2cpOw0KICAgICAgICAgIHRoaXMuZ2V0RmlsZUxpc3QoKTsNCiAgICAgICAgICB0aGlzLnBpZHMgPSAwOw0KICAgICAgICAgIHRoaXMuY2hlY2tQaWNMaXN0ID0gW107DQogICAgICAgICAgdGhpcy5pZHMgPSBbXTsNCiAgICAgICAgfSkNCiAgICAgICAgLmNhdGNoKChyZXMpID0+IHsNCiAgICAgICAgICB0aGlzLiRtZXNzYWdlLmVycm9yKHJlcy5tc2cpOw0KICAgICAgICB9KTsNCiAgICB9LA0KICAgIGRlbEltZyhpZCkgew0KICAgICAgbGV0IGlkcyA9IHsNCiAgICAgICAgaWRzOiBpZCwNCiAgICAgIH07DQogICAgICBsZXQgZGVsZnJvbURhdGEgPSB7DQogICAgICAgIHRpdGxlOiAn5Yig6Zmk6YCJ5Lit6KeG6aKRJywNCiAgICAgICAgdXJsOiBgZmlsZS9maWxlL2RlbGV0ZWAsDQogICAgICAgIG1ldGhvZDogJ1BPU1QnLA0KICAgICAgICBpZHM6IGlkcywNCiAgICAgIH07DQogICAgICB0aGlzLiRtb2RhbFN1cmUoZGVsZnJvbURhdGEpDQogICAgICAgIC50aGVuKChyZXMpID0+IHsNCiAgICAgICAgICB0aGlzLiRtZXNzYWdlLnN1Y2Nlc3MocmVzLm1zZyk7DQogICAgICAgICAgdGhpcy5nZXRGaWxlTGlzdCgpOw0KICAgICAgICAgIHRoaXMuY2hlY2tQaWNMaXN0ID0gW107DQogICAgICAgIH0pDQogICAgICAgIC5jYXRjaCgocmVzKSA9PiB7DQogICAgICAgICAgdGhpcy4kbWVzc2FnZS5lcnJvcihyZXMubXNnKTsNCiAgICAgICAgfSk7DQogICAgfSwNCiAgICAvLyDliKDpmaTop4bpopENCiAgICBlZGl0UGljTGlzdChpZCkgew0KICAgICAgbGV0IGlkcyA9IHsNCiAgICAgICAgaWRzOiBpZCB8fCB0aGlzLmlkcy50b1N0cmluZygpLA0KICAgICAgfTsNCiAgICAgIGxldCBkZWxmcm9tRGF0YSA9IHsNCiAgICAgICAgdGl0bGU6ICfliKDpmaTpgInkuK3op4bpopEnLA0KICAgICAgICB1cmw6IGBmaWxlL2ZpbGUvZGVsZXRlYCwNCiAgICAgICAgbWV0aG9kOiAnUE9TVCcsDQogICAgICAgIGlkczogaWRzLA0KICAgICAgfTsNCiAgICAgIHRoaXMuJG1vZGFsU3VyZShkZWxmcm9tRGF0YSkNCiAgICAgICAgLnRoZW4oKHJlcykgPT4gew0KICAgICAgICAgIHRoaXMuJG1lc3NhZ2Uuc3VjY2VzcyhyZXMubXNnKTsNCiAgICAgICAgICB0aGlzLmdldEZpbGVMaXN0KCk7DQogICAgICAgICAgdGhpcy5pbml0RGF0YSgpOw0KICAgICAgICB9KQ0KICAgICAgICAuY2F0Y2goKHJlcykgPT4gew0KICAgICAgICAgIHRoaXMuJG1lc3NhZ2UuZXJyb3IocmVzLm1zZyk7DQogICAgICAgIH0pOw0KICAgIH0sDQogICAgaW5pdERhdGEoKSB7DQogICAgICB0aGlzLmNoZWNrUGljTGlzdCA9IFtdOw0KICAgICAgdGhpcy5pZHMgPSBbXTsNCiAgICAgIHRoaXMubXVsdGlwbGVTZWxlY3Rpb24gPSBbXTsNCiAgICB9LA0KICAgIC8vIOm8oOagh+enu+WFpSDnp7vlh7oNCiAgICBvbk1vdXNlT3Zlcihyb290LCBub2RlLCBkYXRhKSB7DQogICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOw0KICAgICAgZGF0YS5mbGFnID0gIWRhdGEuZmxhZzsNCiAgICAgIGlmIChkYXRhLmZsYWcyKSB7DQogICAgICAgIGRhdGEuZmxhZzIgPSBmYWxzZTsNCiAgICAgIH0NCiAgICB9LA0KICAgIC8vIOeCueWHu+agkQ0KICAgIGFwcGVuZEJ0bihkYXRhKSB7DQogICAgICB0aGlzLnRyZWVJZCA9IGRhdGEuaWQ7DQogICAgICB0aGlzLmZpbGVEYXRhLnBhZ2UgPSAxOw0KICAgICAgdGhpcy5nZXRGaWxlTGlzdCgpOw0KICAgIH0sDQogICAgLy8g54K55Ye75re75YqgDQogICAgYXBwZW5kKGRhdGEpIHsNCiAgICAgIHRoaXMudHJlZUlkID0gZGF0YS5pZDsNCiAgICAgIHRoaXMuZ2V0RnJvbSgpOw0KICAgIH0sDQogICAgLy8g5Yig6Zmk5YiG57G7DQogICAgcmVtb3ZlKGRhdGEsIHRpdCkgew0KICAgICAgdGhpcy50aXRzID0gdGl0Ow0KICAgICAgbGV0IGRlbGZyb21EYXRhID0gew0KICAgICAgICB0aXRsZTogJ+WIoOmZpCBbICcgKyBkYXRhLnRpdGxlICsgJyBdICcgKyAn5YiG57G7JywNCiAgICAgICAgdXJsOiBgZmlsZS9jYXRlZ29yeS8ke2RhdGEuaWR9YCwNCiAgICAgICAgbWV0aG9kOiAnREVMRVRFJywNCiAgICAgICAgaWRzOiAnJywNCiAgICAgIH07DQogICAgICB0aGlzLiRtb2RhbFN1cmUoZGVsZnJvbURhdGEpDQogICAgICAgIC50aGVuKChyZXMpID0+IHsNCiAgICAgICAgICB0aGlzLiRtZXNzYWdlLnN1Y2Nlc3MocmVzLm1zZyk7DQogICAgICAgICAgdGhpcy5nZXRMaXN0KCk7DQogICAgICAgICAgdGhpcy5jaGVja1BpY0xpc3QgPSBbXTsNCiAgICAgICAgfSkNCiAgICAgICAgLmNhdGNoKChyZXMpID0+IHsNCiAgICAgICAgICB0aGlzLiRtZXNzYWdlLmVycm9yKHJlcy5tc2cpOw0KICAgICAgICB9KTsNCiAgICB9LA0KICAgIC8vIOe8lui+keagkeihqOWNlQ0KICAgIGVkaXRQaWMoZGF0YSkgew0KICAgICAgdGhpcy4kbW9kYWxGb3JtKGNhdGVnb3J5RWRpdEFwaShkYXRhLmlkKSkudGhlbigoKSA9PiB0aGlzLmdldExpc3QoKSk7DQogICAgfSwNCiAgICAvLyDmkJzntKLliIbnsbsNCiAgICBjaGFuZ2VQYWdlKCkgew0KICAgICAgdGhpcy5nZXRMaXN0KCdzZWFyY2gnKTsNCiAgICB9LA0KICAgIC8vIOWIhuexu+WIl+ihqOagkQ0KICAgIGdldExpc3QodHlwZSkgew0KICAgICAgbGV0IGRhdGEgPSB7DQogICAgICAgIHRpdGxlOiAn5YWo6YOo6KeG6aKRJywNCiAgICAgICAgaWQ6ICcnLA0KICAgICAgICBwaWQ6IDAsDQogICAgICB9Ow0KICAgICAgZ2V0Q2F0ZWdvcnlMaXN0QXBpKHRoaXMudXBsb2FkTmFtZSkNCiAgICAgICAgLnRoZW4oYXN5bmMgKHJlcykgPT4gew0KICAgICAgICAgIGlmICh0eXBlICE9PSAnc2VhcmNoJykgew0KICAgICAgICAgICAgdGhpcy50cmVlRGF0YTIgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KFsuLi5yZXMuZGF0YS5saXN0XSkpOw0KICAgICAgICAgIH0NCiAgICAgICAgICByZXMuZGF0YS5saXN0LnVuc2hpZnQoZGF0YSk7DQogICAgICAgICAgdGhpcy50cmVlRGF0YSA9IHJlcy5kYXRhLmxpc3Q7DQogICAgICAgIH0pDQogICAgICAgIC5jYXRjaCgocmVzKSA9PiB7DQogICAgICAgICAgdGhpcy4kbWVzc2FnZS5lcnJvcihyZXMubXNnKTsNCiAgICAgICAgfSk7DQogICAgfSwNCiAgICBsb2FkRGF0YShpdGVtLCBjYWxsYmFjaykgew0KICAgICAgZ2V0Q2F0ZWdvcnlMaXN0QXBpKHsNCiAgICAgICAgcGlkOiBpdGVtLmlkLA0KICAgICAgfSkNCiAgICAgICAgLnRoZW4oYXN5bmMgKHJlcykgPT4gew0KICAgICAgICAgIGNvbnN0IGRhdGEgPSByZXMuZGF0YS5saXN0Ow0KICAgICAgICAgIGNhbGxiYWNrKGRhdGEpOw0KICAgICAgICB9KQ0KICAgICAgICAuY2F0Y2goKHJlcykgPT4ge30pOw0KICAgIH0sDQogICAgYWRkRmxhZyh0cmVlZGF0YSkgew0KICAgICAgdHJlZWRhdGEubWFwKChpdGVtKSA9PiB7DQogICAgICAgIHRoaXMuJHNldChpdGVtLCAnZmxhZycsIGZhbHNlKTsNCiAgICAgICAgdGhpcy4kc2V0KGl0ZW0sICdmbGFnMicsIGZhbHNlKTsNCiAgICAgICAgaXRlbS5jaGlsZHJlbiAmJiB0aGlzLmFkZEZsYWcoaXRlbS5jaGlsZHJlbik7DQogICAgICB9KTsNCiAgICB9LA0KICAgIC8vIOaWsOW7uuWIhuexuw0KICAgIGFkZCgpIHsNCiAgICAgIHRoaXMudHJlZUlkID0gMDsNCiAgICAgIHRoaXMuZ2V0RnJvbSgpOw0KICAgIH0sDQogICAgc2VhcmNoRmlsZSgpIHsNCiAgICAgIHRoaXMuZmlsZURhdGEucGFnZSA9IDE7DQogICAgICB0aGlzLmdldEZpbGVMaXN0KCk7DQogICAgfSwNCiAgICAvLyDmlofku7bliJfooagNCiAgICBnZXRGaWxlTGlzdCgpIHsNCiAgICAgIHRoaXMuZmlsZURhdGEucGlkID0gdGhpcy50cmVlSWQ7DQogICAgICBmaWxlTGlzdEFwaSh0aGlzLmZpbGVEYXRhKQ0KICAgICAgICAudGhlbihhc3luYyAocmVzKSA9PiB7DQogICAgICAgICAgcmVzLmRhdGEubGlzdC5mb3JFYWNoKChlbCkgPT4gew0KICAgICAgICAgICAgZWwuaXNTZWxlY3QgPSBmYWxzZTsNCiAgICAgICAgICAgIGVsLmlzRWRpdCA9IGZhbHNlOw0KICAgICAgICAgICAgZWwuaXNTaG93RWRpdCA9IGZhbHNlOw0KICAgICAgICAgICAgZWwucmVhbE5hbWUgPSBmYWxzZTsNCiAgICAgICAgICAgIGVsLm51bSA9IDA7DQogICAgICAgICAgICB0aGlzLmVkaXROYW1lKGVsKTsNCiAgICAgICAgICB9KTsNCiAgICAgICAgICB0aGlzLnBpY3RydWVMaXN0ID0gcmVzLmRhdGEubGlzdDsNCg0KICAgICAgICAgIGlmICh0aGlzLnBpY3RydWVMaXN0Lmxlbmd0aCkgew0KICAgICAgICAgICAgdGhpcy5pc1Nob3dQaWMgPSBmYWxzZTsNCiAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgdGhpcy5pc1Nob3dQaWMgPSB0cnVlOw0KICAgICAgICAgIH0NCiAgICAgICAgICB0aGlzLnRvdGFsID0gcmVzLmRhdGEuY291bnQ7DQogICAgICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4gew0KICAgICAgICAgICAgLy/noa7kv51kb23liqDovb3lrozmr5UNCiAgICAgICAgICAgIC8vIHRoaXMuc2hvd1NlbGVjdERhdGEoKTsNCiAgICAgICAgICB9KTsNCiAgICAgICAgfSkNCiAgICAgICAgLmNhdGNoKChyZXMpID0+IHsNCiAgICAgICAgICB0aGlzLiRtZXNzYWdlLmVycm9yKHJlcy5tc2cpOw0KICAgICAgICB9KTsNCiAgICB9LA0KICAgIHNob3dTZWxlY3REYXRhKCkgew0KICAgICAgaWYgKHRoaXMubXVsdGlwbGVTZWxlY3Rpb24ubGVuZ3RoID4gMCkgew0KICAgICAgICAvLyDliKTmlq3mmK/lkKblrZjlnKjli77pgInov4fnmoTmlbDmja4NCiAgICAgICAgdGhpcy5waWN0cnVlTGlzdC5mb3JFYWNoKChyb3cpID0+IHsNCiAgICAgICAgICAvLyDojrflj5bmlbDmja7liJfooajmjqXlj6Por7fmsYLliLDnmoTmlbDmja4NCiAgICAgICAgICB0aGlzLm11bHRpcGxlU2VsZWN0aW9uLmZvckVhY2goKGl0ZW0pID0+IHsNCiAgICAgICAgICAgIC8vIOWLvumAieWIsOeahOaVsOaNrg0KICAgICAgICAgICAgaWYgKHJvdy5hdHRfaWQgPT09IGl0ZW0uYXR0X2lkKSB7DQogICAgICAgICAgICAgIC8vIHRoaXMuJHJlZnMudGFibGUudG9nZ2xlUm93U2VsZWN0aW9uKGl0ZW0sIHRydWUpOyAvLyDoi6XmnInph43lkIjvvIzliJnlm57mmL7or6XmnaHmlbDmja4NCiAgICAgICAgICAgIH0NCiAgICAgICAgICB9KTsNCiAgICAgICAgfSk7DQogICAgICB9DQogICAgfSwNCiAgICBnZXRSb3dLZXkocm93KSB7DQogICAgICByZXR1cm4gcm93LmF0dF9pZDsNCiAgICB9LA0KICAgIC8v5a+56LGh5pWw57uE5Y676YeN77ybDQogICAgdW5pcXVlKGFycikgew0KICAgICAgbGV0IHJlc3VsdCA9IGFyci5yZWR1Y2UoKGFjYywgY3VycikgPT4gew0KICAgICAgICBjb25zdCB4ID0gYWNjLmZpbmQoKGl0ZW0pID0+IGl0ZW0uYXR0X2lkID09PSBjdXJyLmF0dF9pZCk7DQogICAgICAgIGlmICgheCkgew0KICAgICAgICAgIHJldHVybiBhY2MuY29uY2F0KFtjdXJyXSk7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgcmV0dXJuIGFjYzsNCiAgICAgICAgfQ0KICAgICAgfSwgW10pOw0KICAgICAgcmV0dXJuIHJlc3VsdDsNCiAgICB9LA0KICAgIC8vICDpgInkuK3mn5DkuIDooYwNCiAgICBoYW5kbGVTZWxlY3RSb3coc2VsZWN0aW9uKSB7DQogICAgICBsZXQgYXJyID0gdGhpcy51bmlxdWUoc2VsZWN0aW9uKTsNCiAgICAgIGNvbnN0IHVuaXF1ZUFyciA9IFtdOw0KICAgICAgY29uc3QgaWRzID0gW107DQogICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykgew0KICAgICAgICBjb25zdCBpdGVtID0gYXJyW2ldOw0KICAgICAgICBpZiAoIWlkcy5pbmNsdWRlcyhpdGVtLmF0dF9pZCkpIHsNCiAgICAgICAgICB1bmlxdWVBcnIucHVzaChpdGVtKTsNCiAgICAgICAgICBpZHMucHVzaChpdGVtLmF0dF9pZCk7DQogICAgICAgIH0NCiAgICAgIH0NCiAgICAgIHRoaXMuaWRzID0gaWRzOw0KICAgICAgdGhpcy5tdWx0aXBsZVNlbGVjdGlvbiA9IHVuaXF1ZUFycjsNCiAgICB9LA0KICAgIHBhZ2VDaGFuZ2UoaW5kZXgpIHsNCiAgICAgIHRoaXMuZmlsZURhdGEucGFnZSA9IGluZGV4Ow0KICAgICAgdGhpcy5nZXRGaWxlTGlzdCgpOw0KICAgICAgdGhpcy5jaGVja1BpY0xpc3QgPSBbXTsNCiAgICB9LA0KICAgIC8vIOaWsOW7uuWIhuexu+ihqOWNlQ0KICAgIGdldEZyb20oKSB7DQogICAgICB0aGlzLiRtb2RhbEZvcm0oY3JlYXRlQXBpKHsgaWQ6IHRoaXMudHJlZUlkLCB0eXBlOiAxIH0pKS50aGVuKChyZXMpID0+IHsNCiAgICAgICAgdGhpcy5nZXRMaXN0KCk7DQogICAgICB9KTsNCiAgICB9LA0KICAgIC8vIOS4iuS8oOS5i+WJjQ0KICAgIGJlZm9yZVVwbG9hZChmaWxlKSB7DQogICAgICAvLyBpZiAoZmlsZS5zaXplID4gMjA5NzE1Mikgew0KICAgICAgLy8gICB0aGlzLiRtZXNzYWdlLmVycm9yKGZpbGUubmFtZSArICLlpKflsI/otoXov4cyTSEiKTsNCiAgICAgIC8vIH0gZWxzZQ0KICAgICAgaWYgKCEvaW1hZ2VcL1x3Ky8udGVzdChmaWxlLnR5cGUpKSB7DQogICAgICAgIHRoaXMuJG1lc3NhZ2UuZXJyb3IoJ+ivt+S4iuS8oOS7pWpwZ+OAgWpwZWfjgIFwbmfnrYnnu5PlsL7nmoTop4bpopHmlofku7YnKTsgLy9GaWxlRXh0LnRvTG93ZXJDYXNlKCkNCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgfQ0KICAgICAgdGhpcy51cGxvYWREYXRhID0gew0KICAgICAgICBwaWQ6IHRoaXMudHJlZUlkLA0KICAgICAgfTsNCiAgICAgIGxldCBwcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHsNCiAgICAgICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKCkgew0KICAgICAgICAgIHJlc29sdmUodHJ1ZSk7DQogICAgICAgIH0pOw0KICAgICAgfSk7DQogICAgICByZXR1cm4gcHJvbWlzZTsNCiAgICB9LA0KICAgIC8vIOS4iuS8oOaIkOWKnw0KICAgIGhhbmRsZVN1Y2Nlc3MocmVzLCBmaWxlLCBmaWxlTGlzdCkgew0KICAgICAgaWYgKHJlcy5zdGF0dXMgPT09IDIwMCkgew0KICAgICAgICB0aGlzLiRtZXNzYWdlLnN1Y2Nlc3MocmVzLm1zZyk7DQogICAgICAgIHRoaXMuZmlsZURhdGEucGFnZSA9IDE7DQogICAgICAgIHRoaXMuZ2V0RmlsZUxpc3QoKTsNCiAgICAgIH0gZWxzZSB7DQogICAgICAgIHRoaXMuJG1lc3NhZ2UuZXJyb3IocmVzLm1zZyk7DQogICAgICB9DQogICAgfSwNCiAgICAvLyDlhbPpl60NCiAgICBjYW5jZWwoKSB7DQogICAgICB0aGlzLiRlbWl0KCdjaGFuZ2VDYW5jZWwnKTsNCiAgICB9LA0KICAgIC8vIOmAieS4reinhumikQ0KICAgIGNoYW5nSW1hZ2UoaXRlbSwgaW5kZXgsIHJvdykgew0KICAgICAgbGV0IGFjdGl2ZUluZGV4ID0gMDsNCiAgICAgIGlmICghaXRlbS5pc1NlbGVjdCkgew0KICAgICAgICBpdGVtLmlzU2VsZWN0ID0gdHJ1ZTsNCiAgICAgICAgdGhpcy5jaGVja1BpY0xpc3QucHVzaChpdGVtKTsNCiAgICAgIH0gZWxzZSB7DQogICAgICAgIGl0ZW0uaXNTZWxlY3QgPSBmYWxzZTsNCiAgICAgICAgdGhpcy5jaGVja1BpY0xpc3QubWFwKChlbCwgaW5kZXgpID0+IHsNCiAgICAgICAgICBpZiAoZWwuYXR0X2lkID09IGl0ZW0uYXR0X2lkKSB7DQogICAgICAgICAgICBhY3RpdmVJbmRleCA9IGluZGV4Ow0KICAgICAgICAgIH0NCiAgICAgICAgfSk7DQogICAgICAgIHRoaXMuY2hlY2tQaWNMaXN0LnNwbGljZShhY3RpdmVJbmRleCwgMSk7DQogICAgICB9DQoNCiAgICAgIHRoaXMuaWRzID0gW107DQogICAgICB0aGlzLmNoZWNrUGljTGlzdC5tYXAoKGl0ZW0sIGkpID0+IHsNCiAgICAgICAgdGhpcy5pZHMucHVzaChpdGVtLmF0dF9pZCk7DQogICAgICB9KTsNCiAgICAgIHRoaXMucGljdHJ1ZUxpc3QubWFwKChlbCwgaSkgPT4gew0KICAgICAgICBpZiAoZWwuaXNTZWxlY3QpIHsNCiAgICAgICAgICB0aGlzLmNoZWNrUGljTGlzdC5maWx0ZXIoKGVsMiwgaikgPT4gew0KICAgICAgICAgICAgaWYgKGVsLmF0dF9pZCA9PSBlbDIuYXR0X2lkKSB7DQogICAgICAgICAgICAgIGVsLm51bSA9IGogKyAxOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0pOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgIGVsLm51bSA9IDA7DQogICAgICAgIH0NCiAgICAgIH0pOw0KICAgIH0sDQogICAgLy8g54K55Ye75L2/55So6YCJ5Lit6KeG6aKRDQogICAgY2hlY2tQaWNzKCkgew0KICAgICAgY29uc29sZS5sb2codGhpcy5jaGVja1BpY0xpc3QsICd0aGlzLmNoZWNrUGljTGlzdCcsIHRoaXMuaXNDaG9pY2UpOw0KICAgICAgaWYgKHRoaXMuaXNDaG9pY2UgPT09ICdvbmUnKSB7DQogICAgICAgIGlmICh0aGlzLmNoZWNrUGljTGlzdC5sZW5ndGggPiAxKSByZXR1cm4gdGhpcy4kbWVzc2FnZS53YXJuaW5nKCfmnIDlpJrlj6rog73pgInkuIDlvKDop4bpopEnKTsNCiAgICAgICAgdGhpcy4kZW1pdCgnZ2V0VmlkZW8nLCB0aGlzLmNoZWNrUGljTGlzdFswXS5hdHRfZGlyKTsNCiAgICAgIH0gZWxzZSB7DQogICAgICAgIGxldCBtYXhMZW5ndGggPSB0aGlzLiRyb3V0ZS5xdWVyeS5tYXhMZW5ndGg7DQogICAgICAgIGlmIChtYXhMZW5ndGggIT0gdW5kZWZpbmVkICYmIHRoaXMuY2hlY2tQaWNMaXN0Lmxlbmd0aCA+IE51bWJlcihtYXhMZW5ndGgpKQ0KICAgICAgICAgIHJldHVybiB0aGlzLiRtZXNzYWdlLndhcm5pbmcoJ+acgOWkmuWPquiDvemAiScgKyBtYXhMZW5ndGggKyAn5byg6KeG6aKRJyk7DQogICAgICAgIHRoaXMuJGVtaXQoJ2dldFBpY0QnLCB0aGlzLmNoZWNrUGljTGlzdCk7DQogICAgICAgIHRoaXMuJGVtaXQoJ2dldFZpZGVvJywgdGhpcy5jaGVja1BpY0xpc3QpOw0KICAgICAgfQ0KICAgIH0sDQogICAgZWRpdE5hbWUoaXRlbSkgew0KICAgICAgbGV0IGl0ID0gaXRlbS5yZWFsX25hbWUuc3BsaXQoJy4nKTsNCiAgICAgIGxldCBpdDEgPSBpdFsxXSA9PSB1bmRlZmluZWQgPyBbXSA6IGl0WzFdOw0KICAgICAgbGV0IGxlbiA9IGl0WzBdLmxlbmd0aCArIGl0MS5sZW5ndGg7DQogICAgICBpdGVtLmVkaXROYW1lID0gbGVuIDwgMTAgPyBpdGVtLnJlYWxfbmFtZSA6IGl0ZW0ucmVhbF9uYW1lLnN1YnN0cigwLCA0KSArICcuLi4nICsgaXRlbS5yZWFsX25hbWUuc3Vic3RyKC01LCA1KTsNCiAgICB9LA0KICAgIC8vIOS/ruaUueinhumikeaWh+Wtl+S4iuS8oA0KICAgIGJpbmRUeHQoaXRlbSkgew0KICAgICAgaWYgKGl0ZW0ucmVhbF9uYW1lID09ICcnKSB7DQogICAgICAgIHRoaXMuJG1lc3NhZ2UuZXJyb3IoJ+ivt+Whq+WGmeWGheWuuScpOw0KICAgICAgfQ0KICAgICAgZmlsZVVwZGF0ZUFwaShpdGVtLmF0dF9pZCwgew0KICAgICAgICByZWFsX25hbWU6IGl0ZW0ucmVhbF9uYW1lLA0KICAgICAgfSkNCiAgICAgICAgLnRoZW4oKHJlcykgPT4gew0KICAgICAgICAgIHRoaXMuZWRpdE5hbWUoaXRlbSk7DQogICAgICAgICAgaXRlbS5pc0VkaXQgPSBmYWxzZTsNCiAgICAgICAgICB0aGlzLiRtZXNzYWdlLnN1Y2Nlc3MocmVzLm1zZyk7DQogICAgICAgIH0pDQogICAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHsNCiAgICAgICAgICB0aGlzLiRtZXNzYWdlLmVycm9yKGVycm9yLm1zZyk7DQogICAgICAgIH0pOw0KICAgIH0sDQogIH0sDQp9Ow0K"},{"version":3,"sources":["index.vue"],"names":[],"mappings":";AAiQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"index.vue","sourceRoot":"src/components/uploadVideo2","sourcesContent":["<template>\r\n <div class=\"Modal\">\r\n <div class=\"colLeft\">\r\n <div class=\"Nav\">\r\n <div class=\"trees-coadd\">\r\n <div v-if=\"isPage\" class=\"tree_tit\" v-db-click @click=\"addSort\">\r\n <i class=\"el-icon-circle-plus\"></i>\r\n 添加分类\r\n </div>\r\n <div class=\"scollhide\">\r\n <div :class=\"isPage ? 'tree' : 'isTree'\">\r\n <el-tree\r\n :data=\"treeData\"\r\n node-key=\"id\"\r\n default-expand-all\r\n highlight-current\r\n :expand-on-click-node=\"false\"\r\n @node-click=\"appendBtn\"\r\n :current-node-key=\"treeId\"\r\n >\r\n <span class=\"custom-tree-node\" slot-scope=\"{ data }\">\r\n <!-- <span class=\"file-name\">\r\n <i class=\"icon el-icon-folder-remove\"></i>\r\n {{ data.title }}</span\r\n > -->\r\n <!-- <span class=\"file-name\">\r\n <img v-if=\"!data.pid\" class=\"icon\" src=\"@/assets/images/file.jpg\" />\r\n <span class=\"name line1\">{{ data.title }}</span>\r\n </span> -->\r\n <div class=\"file-name\">\r\n <img v-if=\"!data.pid\" class=\"icon\" src=\"@/assets/images/file.jpg\" />\r\n <el-tooltip class=\"item\" effect=\"dark\" :content=\"data.title\" placement=\"top\">\r\n <div class=\"text line1\">\r\n {{ data.title }}\r\n </div>\r\n </el-tooltip>\r\n </div>\r\n <span>\r\n <el-dropdown @command=\"(command) => clickMenu(data, command)\">\r\n <i class=\"el-icon-more el-icon--right\"></i>\r\n <template slot=\"dropdown\">\r\n <el-dropdown-menu>\r\n <el-dropdown-item command=\"1\">新增分类</el-dropdown-item>\r\n <el-dropdown-item v-if=\"data.id\" command=\"2\">编辑分类</el-dropdown-item>\r\n <el-dropdown-item v-if=\"data.id\" command=\"3\">删除</el-dropdown-item>\r\n </el-dropdown-menu>\r\n </template>\r\n </el-dropdown>\r\n </span>\r\n </span>\r\n </el-tree>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"conter\">\r\n <div class=\"bnt acea-row row-middle df-jcsb\">\r\n <div class=\"\">\r\n <el-button\r\n class=\"mr14\"\r\n type=\"primary\"\r\n :disabled=\"checkPicList.length === 0\"\r\n v-db-click\r\n @click=\"checkPics\"\r\n size=\"small\"\r\n v-if=\"isShow !== 0\"\r\n >使用选中视频</el-button\r\n >\r\n <!-- <el-button size=\"small\" type=\"primary\" v-db-click @click=\"uploadModal\">上传视频</el-button> -->\r\n <el-button\r\n class=\"mr14\"\r\n v-if=\"upload_type !== '1'\"\r\n type=\"primary\"\r\n size=\"small\"\r\n v-db-click\r\n @click=\"zh_uploadFile\"\r\n >上传视频</el-button\r\n >\r\n <el-upload\r\n v-if=\"upload_type === '1'\"\r\n :show-file-list=\"false\"\r\n :action=\"fileUrl\"\r\n :before-upload=\"videoSaveToUrl\"\r\n :data=\"uploadData\"\r\n :headers=\"header\"\r\n :multiple=\"true\"\r\n style=\"display: inline-block\"\r\n accept=\".mp4\"\r\n >\r\n <el-button class=\"mr14\" size=\"small\" type=\"primary\">上传视频</el-button>\r\n </el-upload>\r\n <el-button\r\n class=\"mr14\"\r\n size=\"small\"\r\n :disabled=\"!checkPicList.length && !ids.length\"\r\n v-db-click\r\n @click.stop=\"editPicList()\"\r\n >删除视频</el-button\r\n >\r\n <el-cascader\r\n v-model=\"pids\"\r\n placeholder=\"视频移动至\"\r\n style=\"width: 150px\"\r\n class=\"treeSel\"\r\n :options=\"treeData2\"\r\n :props=\"{ checkStrictly: true, emitPath: false, label: 'title', value: 'id' }\"\r\n clearable\r\n size=\"small\"\r\n @visible-change=\"moveImg\"\r\n ></el-cascader>\r\n </div>\r\n <div>\r\n <el-input\r\n class=\"mr14\"\r\n v-model=\"fileData.real_name\"\r\n placeholder=\"请输入视频名\"\r\n size=\"small\"\r\n style=\"width: 150px\"\r\n @change=\"searchFile\"\r\n >\r\n <i slot=\"suffix\" class=\"el-icon-search el-input__icon\" v-db-click @click=\"getFileList\"></i>\r\n </el-input>\r\n <el-radio-group class=\"mr10\" v-if=\"isPage\" v-model=\"lietStyle\" size=\"small\" @input=\"radioChange\">\r\n <el-radio-button label=\"list\">\r\n <i class=\"el-icon-menu\"></i>\r\n </el-radio-button>\r\n <el-radio-button label=\"table\">\r\n <!-- <i class=\"el-icon-files\"></i> -->\r\n <span class=\"iconfont iconliebiao\"></span>\r\n </el-radio-button>\r\n </el-radio-group>\r\n </div>\r\n </div>\r\n <div class=\"pictrueList acea-row\" :class=\"{ 'is-modal': !isPage }\">\r\n <div v-if=\"lietStyle == 'list'\" style=\"width: 100%\">\r\n <div v-show=\"isShowPic\" class=\"imagesNo\">\r\n <i class=\"el-icon-picture\" style=\"color: #dbdbdb; font-size: 60px\"></i>\r\n <span class=\"imagesNo_sp\">视频库为空</span>\r\n </div>\r\n <div ref=\"imgListBox\" class=\"acea-row mb10\">\r\n <div\r\n class=\"pictrueList_pic mb10 mt10\"\r\n v-for=\"(item, index) in pictrueList\"\r\n :key=\"index\"\r\n :style=\"{ margin: picmargin }\"\r\n @mouseenter=\"enterMouse(item)\"\r\n @mouseleave=\"enterMouse(item)\"\r\n >\r\n <p class=\"number\" v-if=\"item.num > 0\">\r\n <el-badge :value=\"item.num\" type=\"primary\">\r\n <a href=\"#\" class=\"demo-badge\"></a>\r\n </el-badge>\r\n </p>\r\n <div\r\n class=\"img\"\r\n :class=\"item.isSelect ? 'on' : ''\"\r\n v-db-click\r\n @click.stop=\"changImage(item, index, pictrueList)\"\r\n >\r\n <video :src=\"item.satt_dir\" />\r\n </div>\r\n\r\n <div class=\"operate-item\" @mouseenter=\"enterLeave(item)\" @mouseleave=\"enterLeave(item)\">\r\n <p v-if=\"!item.isEdit\">\r\n {{ item.editName }}\r\n </p>\r\n <el-input size=\"small\" type=\"text\" v-model=\"item.real_name\" v-else @blur=\"bindTxt(item)\" />\r\n <div class=\"operate-height\">\r\n <span class=\"operate mr10\" v-db-click @click=\"editPicList(item.att_id)\" v-if=\"item.isShowEdit\"\r\n >删除</span\r\n >\r\n <span class=\"operate mr10\" v-db-click @click=\"item.isEdit = !item.isEdit\" v-if=\"item.isShowEdit\"\r\n >改名</span\r\n >\r\n <span class=\"operate\" v-db-click @click=\"lookImg(item)\" v-if=\"item.isShowEdit\">查看</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <el-table\r\n v-if=\"lietStyle == 'table'\"\r\n ref=\"table\"\r\n :data=\"pictrueList\"\r\n v-loading=\"loading\"\r\n highlight-row\r\n :row-key=\"getRowKey\"\r\n @selection-change=\"handleSelectRow\"\r\n no-data-text=\"暂无数据\"\r\n no-filtered-data-text=\"暂无筛选结果\"\r\n >\r\n <el-table-column type=\"selection\" width=\"60\" :reserve-selection=\"true\"> </el-table-column>\r\n <el-table-column label=\"视频名称\" min-width=\"190\">\r\n <template slot-scope=\"scope\">\r\n <div class=\"df-aic\">\r\n <div class=\"tabBox_img mr10\">\r\n <video :src=\"scope.row.att_dir\" @click=\"lookImg(scope.row)\" />\r\n </div>\r\n <span v-if=\"!scope.row.isEdit\" class=\"line2 real-name\">{{ scope.row.real_name }}</span>\r\n <el-input\r\n size=\"small\"\r\n type=\"text\"\r\n style=\"width: 90%\"\r\n v-model=\"scope.row.real_name\"\r\n v-else\r\n @blur=\"bindTxt(scope.row)\"\r\n />\r\n </div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"上传时间\" min-width=\"100\">\r\n <template slot-scope=\"scope\">\r\n <span>{{ scope.row.time }}</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"操作\" fixed=\"right\" width=\"170\">\r\n <template slot-scope=\"scope\">\r\n <a v-db-click @click=\"editPicList(scope.row)\">删除</a>\r\n <el-divider direction=\"vertical\"></el-divider>\r\n <a v-db-click @click=\"scope.row.isEdit = !scope.row.isEdit\">{{\r\n scope.row.isEdit ? '确定' : '重命名'\r\n }}</a>\r\n <el-divider direction=\"vertical\"></el-divider>\r\n <a v-db-click @click=\"lookImg(scope.row)\">查看</a>\r\n </template>\r\n </el-table-column>\r\n </el-table>\r\n </div>\r\n <div class=\"footer acea-row row-right\">\r\n <pagination\r\n v-if=\"total\"\r\n :total=\"total\"\r\n :pageCount=\"9\"\r\n layout=\"total, prev, pager, next\"\r\n :page.sync=\"fileData.page\"\r\n @pagination=\"pageChange\"\r\n :limit.sync=\"fileData.limit\"\r\n ></pagination>\r\n </div>\r\n </div>\r\n </div>\r\n <uploadImg\r\n ref=\"upload\"\r\n :isPage=\"isPage\"\r\n :isIframe=\"isIframe\"\r\n :categoryId=\"treeId\"\r\n :categoryList=\"treeData\"\r\n @uploadSuccess=\"uploadSuccess\"\r\n ></uploadImg>\r\n <el-dialog title=\"查看视频\" append-to-body :visible.sync=\"videoModal\" width=\"1024px\">\r\n <video :src=\"imageUrl\" controls />\r\n </el-dialog>\r\n <input type=\"file\" ref=\"refid\" style=\"display: none\" @change=\"zh_uploadFile_change\" />\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport {\r\n getCategoryListApi,\r\n createApi,\r\n fileListApi,\r\n categoryEditApi,\r\n moveApi,\r\n fileUpdateApi,\r\n videoCloudUpload,\r\n} from '@/api/uploadPictures';\r\nimport { productGetTempKeysApi, uploadType } from '@/api/product';\r\nimport { uploadByPieces } from '@/utils/upload'; //引入uploadByPieces方法\r\n\r\nimport Setting from '@/setting';\r\nimport { getCookies } from '@/libs/util';\r\nimport uploadImg from '@/components/uploadImg';\r\nimport { VueTreeList, Tree, TreeNode } from 'vue-tree-list';\r\nimport { isVideoUpload } from '@/utils';\r\nexport default {\r\n name: 'uploadPictures',\r\n components: { uploadImg, VueTreeList },\r\n props: {\r\n isChoice: {\r\n type: String,\r\n default: 'one',\r\n },\r\n isPage: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n isIframe: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n gridBtn: {\r\n type: Object,\r\n default: null,\r\n },\r\n gridPic: {\r\n type: Object,\r\n default: null,\r\n },\r\n isShow: {\r\n type: Number,\r\n default: 1,\r\n },\r\n pageLimit: {\r\n type: Number,\r\n default: 0,\r\n },\r\n },\r\n data() {\r\n return {\r\n spinShow: false,\r\n fileUrl: Setting.apiBaseURL + '/file/upload',\r\n modalPic: false,\r\n treeData: [],\r\n treeData2: [],\r\n pictrueList: [],\r\n uploadData: {}, // 上传参数\r\n checkPicList: [],\r\n uploadName: {\r\n name: '',\r\n all: 1,\r\n type: 1,\r\n },\r\n formValidate: { id: 0 },\r\n FromData: null,\r\n treeId: '',\r\n isJudge: false,\r\n buttonProps: {\r\n type: 'default',\r\n size: 'small',\r\n },\r\n fileData: {\r\n pid: 0,\r\n real_name: '',\r\n page: 1,\r\n limit: this.pageLimit || 18,\r\n type: 1,\r\n },\r\n total: 0,\r\n pids: 0,\r\n list: [],\r\n modalTitleSs: '',\r\n isShowPic: false,\r\n header: {},\r\n ids: [], // 选中附件的id集合\r\n lietStyle: 'list',\r\n imageUrl: '',\r\n loading: false,\r\n multipleSelection: [],\r\n picmargin: '5px', //默认距离右边距离\r\n videoModal: false,\r\n upload_type: '',\r\n upload: {\r\n videoIng: false, // 是否显示进度条;\r\n },\r\n };\r\n },\r\n mounted() {\r\n if (this.isPage) {\r\n let hang = parseInt((document.body.clientHeight - this.$refs.imgListBox.clientHeight - 325) / 180); //计算行数\r\n let col = parseInt(this.$refs.imgListBox.clientWidth / 156); //计算列数\r\n this.fileData.limit = col * hang; //计算分页数量\r\n this.picmargin = parseInt(this.$refs.imgListBox.clientWidth - col * 146) / (2 * col) + 'px'; //平均分布计算margin距离\r\n }\r\n this.getToken();\r\n this.uploadType();\r\n this.getList();\r\n this.getFileList();\r\n },\r\n methods: {\r\n //获取视频上传类型\r\n uploadType() {\r\n uploadType().then((res) => {\r\n this.upload_type = res.data.upload_type;\r\n });\r\n },\r\n beforeUpload() {\r\n this.uploadData = {};\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 zh_uploadFile() {\r\n this.$refs.refid.click();\r\n },\r\n zh_uploadFile_change(evfile) {\r\n let that = this;\r\n if (evfile.target.files[0].type !== 'video/mp4') {\r\n return that.$message.error('只能上传mp4文件');\r\n }\r\n console.log('111');\r\n debugger;\r\n let types = {\r\n key: evfile.target.files[0].name,\r\n contentType: evfile.target.files[0].type,\r\n };\r\n productGetTempKeysApi(types).then((res) => {\r\n console.log(res, evfile, res.data.type);\r\n that.$videoCloud\r\n .videoUpload({\r\n type: res.data.type,\r\n evfile: evfile,\r\n res: res,\r\n uploading(status, progress) {\r\n that.upload.videoIng = status;\r\n },\r\n })\r\n .then((res) => {\r\n videoCloudUpload({\r\n pid: this.treeId || 0,\r\n video_path: res.url,\r\n video_name: evfile.target.files[0].name,\r\n }).then((res) => {\r\n this.getFileList();\r\n });\r\n })\r\n .catch((res) => {\r\n that.$message.error(res);\r\n });\r\n });\r\n },\r\n videoSaveToUrl(file) {\r\n if (isVideoUpload(file))\r\n uploadByPieces({\r\n file: file, // 视频实体\r\n pieceSize: 3, // 分片大小\r\n success: (data) => {\r\n this.progress = 100;\r\n videoCloudUpload({\r\n pid: this.treeId || 0,\r\n video_path: data.file_path,\r\n video_name: file.name,\r\n }).then((res) => {\r\n this.getFileList();\r\n this.$message.success('视频上传成功');\r\n });\r\n },\r\n error: (e) => {\r\n this.$message.error(e.msg);\r\n },\r\n uploading: (chunk, allChunk) => {\r\n this.videoIng = true;\r\n let st = Math.floor((chunk / allChunk) * 100);\r\n this.progress = st;\r\n },\r\n });\r\n return false;\r\n },\r\n radioChange() {\r\n this.initData();\r\n },\r\n lookImg(item) {\r\n this.imageUrl = item.att_dir;\r\n this.videoModal = true;\r\n },\r\n onDel(node) {\r\n let method = node.cate_id ? routeDel : routeCateDel;\r\n this.$msgbox({\r\n title: '提示',\r\n message: '是否确定删除该菜单',\r\n showCancelButton: true,\r\n cancelButtonText: '取消',\r\n confirmButtonText: '删除',\r\n iconClass: 'el-icon-warning',\r\n confirmButtonClass: 'btn-custom-cancel',\r\n })\r\n .then(() => {\r\n method(node.id)\r\n .then((res) => {\r\n this.$message.success(res.msg);\r\n node.remove();\r\n })\r\n .catch((err) => {\r\n this.$message.error(err);\r\n });\r\n })\r\n .catch(() => {});\r\n },\r\n\r\n onChangeName(params) {\r\n if (params.eventType == 'blur') {\r\n let data = {\r\n name: params.newName,\r\n id: params.id,\r\n };\r\n interfaceEditName(data)\r\n .then((res) => {\r\n this.$message.success(res.msg);\r\n })\r\n .catch((err) => {\r\n this.$message.error(err);\r\n });\r\n }\r\n },\r\n // 添加分类\r\n addSort() {\r\n this.append({ id: this.treeId || 0 });\r\n },\r\n // 点击菜单\r\n clickMenu(data, name) {\r\n if (name == 1) {\r\n this.append(data);\r\n } else if (name == 2) {\r\n this.editPic(data);\r\n } else if (name == 3) {\r\n this.remove(data, '分类');\r\n }\r\n },\r\n uploadSuccess() {\r\n this.fileData.page = 1;\r\n this.initData();\r\n this.getFileList();\r\n },\r\n uploadModal() {\r\n this.$refs.upload.uploadModal = true;\r\n },\r\n enterMouse(item) {\r\n item.realName = !item.realName;\r\n },\r\n enterLeave(item) {\r\n item.isShowEdit = !item.isShowEdit;\r\n },\r\n // 上传头部token\r\n getToken() {\r\n this.header['Authori-zation'] = 'Bearer ' + getCookies('token');\r\n },\r\n moveImg(status) {\r\n if (!status) {\r\n this.getMove();\r\n } else {\r\n if (!this.ids.toString()) {\r\n this.$message.warning('请先选择视频');\r\n return;\r\n }\r\n }\r\n },\r\n searchImg() {},\r\n // 移动分类\r\n getMove() {\r\n let data = {\r\n pid: this.pids,\r\n images: this.ids.toString(),\r\n };\r\n if (!data.images) return;\r\n moveApi(data)\r\n .then(async (res) => {\r\n this.$message.success(res.msg);\r\n this.getFileList();\r\n this.pids = 0;\r\n this.checkPicList = [];\r\n this.ids = [];\r\n })\r\n .catch((res) => {\r\n this.$message.error(res.msg);\r\n });\r\n },\r\n delImg(id) {\r\n let ids = {\r\n ids: id,\r\n };\r\n let delfromData = {\r\n title: '删除选中视频',\r\n url: `file/file/delete`,\r\n method: 'POST',\r\n ids: ids,\r\n };\r\n this.$modalSure(delfromData)\r\n .then((res) => {\r\n this.$message.success(res.msg);\r\n this.getFileList();\r\n this.checkPicList = [];\r\n })\r\n .catch((res) => {\r\n this.$message.error(res.msg);\r\n });\r\n },\r\n // 删除视频\r\n editPicList(id) {\r\n let ids = {\r\n ids: id || this.ids.toString(),\r\n };\r\n let delfromData = {\r\n title: '删除选中视频',\r\n url: `file/file/delete`,\r\n method: 'POST',\r\n ids: ids,\r\n };\r\n this.$modalSure(delfromData)\r\n .then((res) => {\r\n this.$message.success(res.msg);\r\n this.getFileList();\r\n this.initData();\r\n })\r\n .catch((res) => {\r\n this.$message.error(res.msg);\r\n });\r\n },\r\n initData() {\r\n this.checkPicList = [];\r\n this.ids = [];\r\n this.multipleSelection = [];\r\n },\r\n // 鼠标移入 移出\r\n onMouseOver(root, node, data) {\r\n event.preventDefault();\r\n data.flag = !data.flag;\r\n if (data.flag2) {\r\n data.flag2 = false;\r\n }\r\n },\r\n // 点击树\r\n appendBtn(data) {\r\n this.treeId = data.id;\r\n this.fileData.page = 1;\r\n this.getFileList();\r\n },\r\n // 点击添加\r\n append(data) {\r\n this.treeId = data.id;\r\n this.getFrom();\r\n },\r\n // 删除分类\r\n remove(data, tit) {\r\n this.tits = tit;\r\n let delfromData = {\r\n title: '删除 [ ' + data.title + ' ] ' + '分类',\r\n url: `file/category/${data.id}`,\r\n method: 'DELETE',\r\n ids: '',\r\n };\r\n this.$modalSure(delfromData)\r\n .then((res) => {\r\n this.$message.success(res.msg);\r\n this.getList();\r\n this.checkPicList = [];\r\n })\r\n .catch((res) => {\r\n this.$message.error(res.msg);\r\n });\r\n },\r\n // 编辑树表单\r\n editPic(data) {\r\n this.$modalForm(categoryEditApi(data.id)).then(() => this.getList());\r\n },\r\n // 搜索分类\r\n changePage() {\r\n this.getList('search');\r\n },\r\n // 分类列表树\r\n getList(type) {\r\n let data = {\r\n title: '全部视频',\r\n id: '',\r\n pid: 0,\r\n };\r\n getCategoryListApi(this.uploadName)\r\n .then(async (res) => {\r\n if (type !== 'search') {\r\n this.treeData2 = JSON.parse(JSON.stringify([...res.data.list]));\r\n }\r\n res.data.list.unshift(data);\r\n this.treeData = res.data.list;\r\n })\r\n .catch((res) => {\r\n this.$message.error(res.msg);\r\n });\r\n },\r\n loadData(item, callback) {\r\n getCategoryListApi({\r\n pid: item.id,\r\n })\r\n .then(async (res) => {\r\n const data = res.data.list;\r\n callback(data);\r\n })\r\n .catch((res) => {});\r\n },\r\n addFlag(treedata) {\r\n treedata.map((item) => {\r\n this.$set(item, 'flag', false);\r\n this.$set(item, 'flag2', false);\r\n item.children && this.addFlag(item.children);\r\n });\r\n },\r\n // 新建分类\r\n add() {\r\n this.treeId = 0;\r\n this.getFrom();\r\n },\r\n searchFile() {\r\n this.fileData.page = 1;\r\n this.getFileList();\r\n },\r\n // 文件列表\r\n getFileList() {\r\n this.fileData.pid = this.treeId;\r\n fileListApi(this.fileData)\r\n .then(async (res) => {\r\n res.data.list.forEach((el) => {\r\n el.isSelect = false;\r\n el.isEdit = false;\r\n el.isShowEdit = false;\r\n el.realName = false;\r\n el.num = 0;\r\n this.editName(el);\r\n });\r\n this.pictrueList = res.data.list;\r\n\r\n if (this.pictrueList.length) {\r\n this.isShowPic = false;\r\n } else {\r\n this.isShowPic = true;\r\n }\r\n this.total = res.data.count;\r\n this.$nextTick(() => {\r\n //确保dom加载完毕\r\n // this.showSelectData();\r\n });\r\n })\r\n .catch((res) => {\r\n this.$message.error(res.msg);\r\n });\r\n },\r\n showSelectData() {\r\n if (this.multipleSelection.length > 0) {\r\n // 判断是否存在勾选过的数据\r\n this.pictrueList.forEach((row) => {\r\n // 获取数据列表接口请求到的数据\r\n this.multipleSelection.forEach((item) => {\r\n // 勾选到的数据\r\n if (row.att_id === item.att_id) {\r\n // this.$refs.table.toggleRowSelection(item, true); // 若有重合,则回显该条数据\r\n }\r\n });\r\n });\r\n }\r\n },\r\n getRowKey(row) {\r\n return row.att_id;\r\n },\r\n //对象数组去重;\r\n unique(arr) {\r\n let result = arr.reduce((acc, curr) => {\r\n const x = acc.find((item) => item.att_id === curr.att_id);\r\n if (!x) {\r\n return acc.concat([curr]);\r\n } else {\r\n return acc;\r\n }\r\n }, []);\r\n return result;\r\n },\r\n // 选中某一行\r\n handleSelectRow(selection) {\r\n let arr = this.unique(selection);\r\n const uniqueArr = [];\r\n const ids = [];\r\n for (let i = 0; i < arr.length; i++) {\r\n const item = arr[i];\r\n if (!ids.includes(item.att_id)) {\r\n uniqueArr.push(item);\r\n ids.push(item.att_id);\r\n }\r\n }\r\n this.ids = ids;\r\n this.multipleSelection = uniqueArr;\r\n },\r\n pageChange(index) {\r\n this.fileData.page = index;\r\n this.getFileList();\r\n this.checkPicList = [];\r\n },\r\n // 新建分类表单\r\n getFrom() {\r\n this.$modalForm(createApi({ id: this.treeId, type: 1 })).then((res) => {\r\n this.getList();\r\n });\r\n },\r\n // 上传之前\r\n beforeUpload(file) {\r\n // if (file.size > 2097152) {\r\n // this.$message.error(file.name + \"大小超过2M!\");\r\n // } else\r\n if (!/image\\/\\w+/.test(file.type)) {\r\n this.$message.error('请上传以jpg、jpeg、png等结尾的视频文件'); //FileExt.toLowerCase()\r\n return false;\r\n }\r\n this.uploadData = {\r\n pid: this.treeId,\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.fileData.page = 1;\r\n this.getFileList();\r\n } else {\r\n this.$message.error(res.msg);\r\n }\r\n },\r\n // 关闭\r\n cancel() {\r\n this.$emit('changeCancel');\r\n },\r\n // 选中视频\r\n changImage(item, index, row) {\r\n let activeIndex = 0;\r\n if (!item.isSelect) {\r\n item.isSelect = true;\r\n this.checkPicList.push(item);\r\n } else {\r\n item.isSelect = false;\r\n this.checkPicList.map((el, index) => {\r\n if (el.att_id == item.att_id) {\r\n activeIndex = index;\r\n }\r\n });\r\n this.checkPicList.splice(activeIndex, 1);\r\n }\r\n\r\n this.ids = [];\r\n this.checkPicList.map((item, i) => {\r\n this.ids.push(item.att_id);\r\n });\r\n this.pictrueList.map((el, i) => {\r\n if (el.isSelect) {\r\n this.checkPicList.filter((el2, j) => {\r\n if (el.att_id == el2.att_id) {\r\n el.num = j + 1;\r\n }\r\n });\r\n } else {\r\n el.num = 0;\r\n }\r\n });\r\n },\r\n // 点击使用选中视频\r\n checkPics() {\r\n console.log(this.checkPicList, 'this.checkPicList', this.isChoice);\r\n if (this.isChoice === 'one') {\r\n if (this.checkPicList.length > 1) return this.$message.warning('最多只能选一张视频');\r\n this.$emit('getVideo', this.checkPicList[0].att_dir);\r\n } else {\r\n let maxLength = this.$route.query.maxLength;\r\n if (maxLength != undefined && this.checkPicList.length > Number(maxLength))\r\n return this.$message.warning('最多只能选' + maxLength + '张视频');\r\n this.$emit('getPicD', this.checkPicList);\r\n this.$emit('getVideo', this.checkPicList);\r\n }\r\n },\r\n editName(item) {\r\n let it = item.real_name.split('.');\r\n let it1 = it[1] == undefined ? [] : it[1];\r\n let len = it[0].length + it1.length;\r\n item.editName = len < 10 ? item.real_name : item.real_name.substr(0, 4) + '...' + item.real_name.substr(-5, 5);\r\n },\r\n // 修改视频文字上传\r\n bindTxt(item) {\r\n if (item.real_name == '') {\r\n this.$message.error('请填写内容');\r\n }\r\n fileUpdateApi(item.att_id, {\r\n real_name: item.real_name,\r\n })\r\n .then((res) => {\r\n this.editName(item);\r\n item.isEdit = false;\r\n this.$message.success(res.msg);\r\n })\r\n .catch((error) => {\r\n this.$message.error(error.msg);\r\n });\r\n },\r\n },\r\n};\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n.nameStyle {\r\n position: absolute;\r\n white-space: nowrap;\r\n z-index: 9;\r\n background: #eee;\r\n height: 20px;\r\n line-height: 20px;\r\n color: #555;\r\n border: 1px solid #ebebeb;\r\n padding: 0 5px;\r\n left: 56px;\r\n bottom: -18px;\r\n}\r\n\r\n.iconbianji1 {\r\n font-size: 13px;\r\n}\r\n\r\n.selectTreeClass {\r\n background: #d5e8fc;\r\n}\r\n.tree_tit {\r\n padding-top: 7px;\r\n}\r\n.treeBox {\r\n width: 100%;\r\n height: 100%;\r\n max-width: 180px;\r\n}\r\n.is-modal .pictrueList_pic {\r\n width: 100px;\r\n margin: 10px 5px !important;\r\n .img {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n width: 100px;\r\n height: 100px;\r\n background-color: rgb(248, 248, 248);\r\n padding: 2px;\r\n img {\r\n max-width: 96px;\r\n max-height: 96px;\r\n // object-fit: cover;\r\n }\r\n .operate-height {\r\n bottom: -8px;\r\n }\r\n }\r\n}\r\n.pictrueList_pic {\r\n position: relative;\r\n width: 146px;\r\n cursor: pointer;\r\n // margin-right: 20px !important;\r\n .img {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n width: 146px;\r\n height: 146px;\r\n background-color: rgb(248, 248, 248);\r\n padding: 3px;\r\n video {\r\n max-width: 100px;\r\n max-height: 100px;\r\n // object-fit: cover;\r\n }\r\n }\r\n\r\n p {\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n white-space: nowrap;\r\n height: 20px;\r\n font-size: 12px;\r\n color: #515a6d;\r\n text-align: center;\r\n }\r\n\r\n .number {\r\n height: 33px;\r\n }\r\n\r\n .number {\r\n position: absolute;\r\n right: 0;\r\n top: 0;\r\n }\r\n ::v-deep .el-badge__content.is-fixed {\r\n top: 13px;\r\n right: 25px;\r\n }\r\n}\r\n.Nav {\r\n width: 100%;\r\n border-right: 1px solid #eee;\r\n min-width: 220px;\r\n max-width: max-content;\r\n}\r\n.trees-coadd {\r\n width: 100%;\r\n border-radius: 4px;\r\n overflow: hidden;\r\n position: relative;\r\n\r\n .scollhide {\r\n overflow-x: hidden;\r\n overflow-y: scroll;\r\n padding: 0px 0 10px 0;\r\n box-sizing: border-box;\r\n\r\n .isTree {\r\n min-height: 374px;\r\n max-height: 550px;\r\n ::v-deep .file-name {\r\n display: flex;\r\n align-items: center;\r\n .name {\r\n max-width: 7em;\r\n }\r\n .icon {\r\n width: 12px;\r\n height: 12px;\r\n margin-right: 8px;\r\n }\r\n }\r\n ::v-deep .el-tree-node {\r\n margin-right: 16px;\r\n }\r\n ::v-deep .el-tree-node__children .el-tree-node {\r\n margin-right: 0;\r\n }\r\n ::v-deep .el-tree-node__content {\r\n width: 100%;\r\n height: 36px;\r\n }\r\n ::v-deep .custom-tree-node {\r\n flex: 1;\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n padding-right: 20px;\r\n font-size: 13px;\r\n font-weight: 400;\r\n color: rgba(0, 0, 0, 0.6);\r\n line-height: 13px;\r\n }\r\n ::v-deep .is-current {\r\n background: #f1f9ff !important;\r\n color: var(--prev-color-primary) !important;\r\n }\r\n ::v-deep .is-current .custom-tree-node {\r\n color: var(--prev-color-primary) !important;\r\n }\r\n }\r\n }\r\n\r\n .scollhide::-webkit-scrollbar {\r\n display: none;\r\n }\r\n}\r\n\r\n.treeSel ::v-deep .ivu-select-dropdown-list {\r\n padding: 0 5px !important;\r\n box-sizing: border-box;\r\n width: 200px;\r\n}\r\n.imagesNo {\r\n display: flex;\r\n justify-content: center;\r\n flex-direction: column;\r\n align-items: center;\r\n margin: 65px 0;\r\n\r\n .imagesNo_sp {\r\n font-size: 13px;\r\n color: #dbdbdb;\r\n line-height: 3;\r\n }\r\n}\r\n\r\n.Modal {\r\n width: 100%;\r\n height: 100%;\r\n background: #fff !important;\r\n}\r\n.fill-window {\r\n height: 100vh;\r\n}\r\n.colLeft {\r\n padding-right: 0 !important;\r\n height: 100%;\r\n display: flex;\r\n flex-wrap: nowrap;\r\n}\r\n\r\n.conter {\r\n width: 100%;\r\n height: 100%;\r\n margin-left: 20px !important;\r\n .iconliebiao {\r\n font-size: 12px;\r\n }\r\n}\r\n\r\n.conter .bnt {\r\n width: 100%;\r\n padding: 0 0px 20px 0px;\r\n box-sizing: border-box;\r\n}\r\n\r\n.conter .pictrueList {\r\n // width: 100%;\r\n overflow-x: hidden;\r\n overflow-y: auto;\r\n min-height: 463px;\r\n}\r\n.conter .pictrueList.is-modal {\r\n max-height: 480px;\r\n}\r\n.right-col {\r\n // flex: 1;\r\n}\r\n.conter .pictrueList img {\r\n max-width: 100%;\r\n}\r\n.conter .pictrueList .img.on {\r\n border: 2px solid var(--prev-color-primary);\r\n}\r\n\r\n.conter .footer {\r\n padding: 0 20px 10px 20px;\r\n}\r\n.tabBox_img {\r\n display: flex;\r\n align-items: center;\r\n video {\r\n max-width: 90px;\r\n max-height: 30px;\r\n }\r\n}\r\n.real-name {\r\n flex: 1;\r\n}\r\n.df-aic {\r\n display: flex;\r\n align-items: center;\r\n}\r\n.demo-badge {\r\n width: 42px;\r\n height: 42px;\r\n background: transparent;\r\n border-radius: 6px;\r\n display: inline-block;\r\n}\r\n\r\n.bnt ::v-deep .ivu-tree-children {\r\n padding: 5px 0;\r\n}\r\n\r\n.card-tree {\r\n background: #fff;\r\n height: 72px;\r\n box-sizing: border-box;\r\n overflow-x: scroll; /* 设置溢出滚动 */\r\n white-space: nowrap;\r\n overflow-y: hidden;\r\n /* 隐藏滚动条 */\r\n border-radius: 4px;\r\n scrollbar-width: none; /* firefox */\r\n -ms-overflow-style: none; /* IE 10+ */\r\n}\r\n.card-tree::-webkit-scrollbar {\r\n display: none; /* Chrome Safari */\r\n}\r\n.tabs {\r\n background: #fff;\r\n padding-top: 10px;\r\n border-radius: 5px 5px 0 0;\r\n}\r\n.operate-item {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n flex-direction: column;\r\n margin: 5px 0;\r\n}\r\n.operate-height {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n height: 16px;\r\n position: absolute;\r\n bottom: -10px;\r\n}\r\n.operate {\r\n color: var(--prev-color-primary);\r\n font-size: 12px;\r\n white-space: nowrap;\r\n}\r\n</style>\r\n"]}]}