| 1 |
- {"remainingRequest":"D:\\front\\item\\zyAdmin\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!D:\\front\\item\\zyAdmin\\src\\pages\\system\\maintain\\systemFile\\opendir.vue?vue&type=script&lang=js","dependencies":[{"path":"D:\\front\\item\\zyAdmin\\src\\pages\\system\\maintain\\systemFile\\opendir.vue","mtime":1761614939077},{"path":"D:\\front\\item\\zyAdmin\\node_modules\\cache-loader\\dist\\cjs.js","mtime":1761614927801},{"path":"D:\\front\\item\\zyAdmin\\node_modules\\babel-loader\\lib\\index.js","mtime":1761614927320},{"path":"D:\\front\\item\\zyAdmin\\node_modules\\cache-loader\\dist\\cjs.js","mtime":1761614927801},{"path":"D:\\front\\item\\zyAdmin\\node_modules\\vue-loader\\lib\\index.js","mtime":1761614937402}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:DQppbXBvcnQgeyByZXNvbHZlQ29tcG9uZW50IH0gZnJvbSAndnVlJzsNCmltcG9ydCB7DQogIG9wZW5kaXJMaXN0QXBpLA0KICBvcGVuZmlsZUFwaSwNCiAgc2F2ZWZpbGVBcGksDQogIG9wZW5kaXJMb2dpbkFwaSwNCiAgY3JlYXRlRm9sZGVyLA0KICBjcmVhdGVGaWxlLA0KICBkZWxGb2xkZXIsDQogIHJlbmFtZSwNCiAgZmlsZU1hcmssDQogIG1hcmtTYXZlLA0KfSBmcm9tICdAL2FwaS9zeXN0ZW0nOw0KaW1wb3J0IENvZGVNaXJyb3IgZnJvbSAnY29kZW1pcnJvci9saWIvY29kZW1pcnJvcic7DQppbXBvcnQgbG9naW5Gcm9tIGZyb20gJy4vY29tcG9uZW50cy9sb2dpbkZyb20nOw0KaW1wb3J0IHsgc2V0Q29va2llcywgZ2V0Q29va2llcywgcmVtb3ZlQ29va2llcyB9IGZyb20gJ0AvbGlicy91dGlsJzsNCi8vIGltcG9ydCBGdWxsc2NyZWVuIGZyb20gJ0AvbGF5b3V0L2NvbXBvbmVudHMvZnVsbHNjcmVlbic7DQppbXBvcnQgKiBhcyBtb25hY28gZnJvbSAnbW9uYWNvLWVkaXRvcic7DQpleHBvcnQgZGVmYXVsdCB7DQogIG5hbWU6ICdvcGVuZGlyJywNCiAgZGF0YSgpIHsNCiAgICByZXR1cm4gew0KICAgICAgbW9kYWxzOiBmYWxzZSwgLy/nvJbovpHlmajlvIDlhbMNCiAgICAgIGVkaXRvcjogJycsIC8v5b2T5YmN57yW6L6R5Zmo5a+56LGhDQogICAgICBlZGl0b3JJbmRleDogWw0KICAgICAgICAvL+mAiemhueWNoeaVsOe7hA0KICAgICAgICB7DQogICAgICAgICAgdGFiOiB0cnVlLA0KICAgICAgICAgIGluZGV4OiAnMCcsDQogICAgICAgICAgdGl0bGU6ICcnLA0KICAgICAgICAgIGljb246ICcnLA0KICAgICAgICB9LA0KICAgICAgXSwNCiAgICAgIGVkaXRvckxpc3Q6IFtdLCAvL+e8lui+keWZqOaVsOe7hA0KICAgICAgaW5kZXhFZGl0b3I6IDAsIC8v5b2T5YmN57yW6L6R5Zmo57Si5byVDQogICAgICBjb2RlOiAnJywgLy/lvZPliY3mlofku7bmiZPlvIDml7bnmoTlhoXlrrkNCiAgICAgIG5hdkxpc3Q6IFtdLCAvL+W3puS+p+WvvOiIquaVsOaNrg0KICAgICAgbmF2SXRlbToge30sIC8v5bem5L6n5a+86Iiq54K55Ye75piv6YCJ5Lit55qE5pWw5o2uDQogICAgICBjb250ZXh0RGF0YTogbnVsbCwgLy/lt6bkvqflr7zoiKrlj7PplK7ngrnlh7vmmK/kuqfnlJ/nmoTmlbDmja7lr7nosaENCg0KICAgICAgZmlsZVR5cGU6ICcnLCAvLyDmlofku7bmk43kvZznsbvlnosgY3JlYXRlRm9sZGVyfOWIm+W7uuaWh+S7tuWkuSBjcmVhdGVGaWxlfOWIm+W7uuaWh+S7tiBkZWxGb2xkZXJ85Yig6Zmk5paH5Lu25aS55oiW6ICF5paH5Lu2DQogICAgICBjbGFzc05hbWU6ICcnLCAvL+WFqOWxjyBjbGFzc+WQjQ0KICAgICAgLy8gZnVsbHNjcmVlbjpmYWxzZSwgIC8vIOaYr+WQpuWFqOWxjw0KICAgICAgaXNTYXZlOiB0cnVlLCAvL+W9k+WJjeaWh+S7tuaYr+WQpuS/neWtmA0KDQogICAgICBpc1Nob3dMb2duOiBmYWxzZSwgLy8g55m75b2VDQogICAgICBpc1Nob3dMaXN0OiBmYWxzZSwgLy8g55m75b2V5LmL5ZCO5YiX6KGoDQoNCiAgICAgIHNwaW5TaG93OiBmYWxzZSwNCiAgICAgIGxvYWRpbmc6IGZhbHNlLA0KICAgICAgdGFiTGlzdDogW10sDQoNCiAgICAgIGZvcm1JdGVtOiB7DQogICAgICAgIC8v6K6w5b2V5b2T5YmN6Lev5b6E5L+h5oGv77yM6I635Y+W5paH5Lu25YiX6KGo5pe25L2/55SoDQogICAgICAgIGRpcjogJycsDQogICAgICAgIHN1cGVyaW9yOiAwLA0KICAgICAgICBmaWxlZGlyOiAnJywNCiAgICAgICAgZmlsZVRva2VuOiBnZXRDb29raWVzKCdmaWxlX3Rva2VuJyksDQogICAgICB9LA0KICAgICAgZGlyOiAnJywgLy/lvZPliY3lrozmlbTmlofku7bot6/lvoQNCiAgICAgIC8vIHJvd3M6IHt9LCAgLy8NCiAgICAgIHBhdGhuYW1lOiAnJywgLy8g5b2T5YmN5paH5Lu26Lev5b6EDQogICAgICB0aXRsZTogJycsIC8v5b2T5YmN5paH5Lu25qCH6aKYDQoNCiAgICAgIGZvcm1GaWxlOiB7DQogICAgICAgIC8v6YeN5ZG95ZCN6KGo5Y2VDQogICAgICAgIGZpbGVuYW1lOiAnJywNCiAgICAgIH0sDQogICAgICBydWxlSW5saW5lOiB7DQogICAgICAgIGZpbGVuYW1lOiBbeyByZXF1aXJlZDogdHJ1ZSwgbWVzc2FnZTogJ+ivt+i+k+WFpeaWh+S7tuaIluaWh+S7tuWkueeahOWQjeWtlycsIHRyaWdnZXI6ICdibHVyJyB9XSwNCiAgICAgIH0sDQogICAgICBmb3JtU2hvdzogZmFsc2UsIC8v6KGo5Y2V5byA5YWzDQogICAgICBmb3JtVGl0bGU6ICcnLCAvL+ihqOWNleagh+mimA0KICAgICAgZmlsZVRva2VuOiBnZXRDb29raWVzKCdmaWxlX3Rva2VuJyksDQogICAgICByb3V0ZUxpc3Q6IFtdLCAvLyAg5omT5byA5paH5Lu26Lev5b6EDQogICAgICBwcm9wczogew0KICAgICAgICBsYWJlbDogJ3RpdGxlJywNCiAgICAgICAgY2hpbGRyZW46ICdjaGlsZHJlbicsDQogICAgICAgIGlzTGVhZjogJ2lzTGVhZicsDQogICAgICB9LA0KICAgIH07DQogIH0sDQoNCiAgY29tcG9uZW50czogew0KICAgIGxvZ2luRnJvbSwNCiAgfSwNCiAgbW91bnRlZCgpIHsNCiAgICAvLyB0aGlzLmluaXRFZGl0b3IoKTsNCiAgfSwNCiAgY3JlYXRlZCgpIHsNCiAgICB0aGlzLmdldExpc3QoKTsNCiAgfSwNCiAgYmVmb3JlRGVzdHJveSgpIHsNCiAgICByZW1vdmVDb29raWVzKCdmaWxlX3Rva2VuJyk7DQogIH0sDQogIGNvbXB1dGVkOiB7fSwNCiAgbWV0aG9kczogew0KICAgIC8vIOeCueWHu+ihjA0KICAgIGN1cnJlbnRDaGFuZ2UoY3VycmVudFJvdykgew0KICAgICAgaWYgKGN1cnJlbnRSb3cuaXNEaXIpIHsNCiAgICAgICAgdGhpcy5vcGVuKGN1cnJlbnRSb3cpOw0KICAgICAgfSBlbHNlIHsNCiAgICAgICAgdGhpcy5lZGl0KGN1cnJlbnRSb3cpOw0KICAgICAgfQ0KICAgIH0sDQogICAgLyoqDQogICAgICog5paH5Lu25YiX6KGoDQogICAgICogQHBhcmFtIHtPYmplY3R9IHJlZnJlc2ggICAvLyDmmK/lkKbph43mlrDliqDovb0gYm9vbA0KICAgICAqIEBwYXJhbSB7T2JqZWN0fSBpc19lZGl0ICAgLy8g5piv5ZCm5piv57yW6L6R5Zmo5Lit55qE5Yi35pawIGJvb2wNCiAgICAgKi8NCiAgICBnZXRMaXN0KHJlZnJlc2gsIGlzX2VkaXQpIHsNCiAgICAgIGxldCBwYXJhbXM7DQogICAgICBpZiAocmVmcmVzaCkgew0KICAgICAgICBwYXJhbXMgPSB7DQogICAgICAgICAgZGlyOiAnJywNCiAgICAgICAgICBzdXBlcmlvcjogMCwNCiAgICAgICAgICBmaWxlZGlyOiAnJywNCiAgICAgICAgICBmaWxlVG9rZW46IHRoaXMuZmlsZVRva2VuLA0KICAgICAgICB9Ow0KICAgICAgfSBlbHNlIHsNCiAgICAgICAgcGFyYW1zID0gdGhpcy5mb3JtSXRlbTsNCiAgICAgICAgcGFyYW1zLmZpbGVUb2tlbiA9IHRoaXMuZmlsZVRva2VuOw0KICAgICAgfQ0KICAgICAgaWYgKCFpc19lZGl0KSB0aGlzLmxvYWRpbmcgPSB0cnVlOw0KICAgICAgb3BlbmRpckxpc3RBcGkocGFyYW1zKQ0KICAgICAgICAudGhlbihhc3luYyAocmVzKSA9PiB7DQogICAgICAgICAgbGV0IGRhdGEgPSByZXMuZGF0YTsNCiAgICAgICAgICB0aGlzLnJvdXRlTGlzdCA9IGRhdGEucm91dGVMaXN0Ow0KDQogICAgICAgICAgaWYgKGlzX2VkaXQpIHsNCiAgICAgICAgICAgIHRoaXMubmF2TGlzdCA9IGRhdGEubmF2TGlzdDsNCiAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgdGhpcy5uYXZMaXN0Rm9yVGFiID0gZGF0YS5uYXZMaXN0Ow0KICAgICAgICAgICAgdGhpcy50YWJMaXN0ID0gZGF0YS5saXN0Ow0KICAgICAgICAgICAgLy8gdGhpcy5uYXZMaXN0ID0gZGF0YS5uYXZMaXN0Ow0KICAgICAgICAgICAgdGhpcy5pc1Nob3dMaXN0ID0gdHJ1ZTsNCiAgICAgICAgICB9DQogICAgICAgICAgdGhpcy5kaXIgPSBkYXRhLmRpcjsNCiAgICAgICAgICB0aGlzLmlzU2hvd0xvZ24gPSBmYWxzZTsNCiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTsNCiAgICAgICAgfSkNCiAgICAgICAgLmNhdGNoKChyZXMpID0+IHsNCiAgICAgICAgICB0aGlzLmNhdGNoRnVuKHJlcyk7DQogICAgICAgIH0pOw0KICAgIH0sDQogICAgLy/mlrDlu7rmlofku7blkI7ph43mlrDliqDovb3lt6bkvqflr7zoiKoNCiAgICBnZXRMaXN0SXRlbShkYXRhKSB7DQogICAgICBvcGVuZGlyTGlzdEFwaShkYXRhKQ0KICAgICAgICAudGhlbihhc3luYyAocmVzKSA9PiB7DQogICAgICAgICAgdGhpcy4kc2V0KHRoaXMuY29udGV4dERhdGEsICdjaGlsZHJlbicsIHJlcy5kYXRhLm5hdkxpc3QpOw0KICAgICAgICB9KQ0KICAgICAgICAuY2F0Y2goKHJlcykgPT4gew0KICAgICAgICAgIHRoaXMuY2F0Y2hGdW4ocmVzKTsNCiAgICAgICAgfSk7DQogICAgfSwNCg0KICAgIC8vIOi/lOWbnuS4iue6pw0KICAgIGdvQmFjayhpc19lZGl0KSB7DQogICAgICB0aGlzLmZvcm1JdGVtID0gew0KICAgICAgICBkaXI6IHRoaXMuZGlyLA0KICAgICAgICBzdXBlcmlvcjogMSwNCiAgICAgICAgZmlsZWRpcjogJycsDQogICAgICB9Ow0KICAgICAgdGhpcy5nZXRMaXN0KGZhbHNlLCBpc19lZGl0KTsNCiAgICB9LA0KICAgIC8vIOaJk+W8gA0KICAgIG9wZW4ocm93KSB7DQogICAgICAvLyB0aGlzLnJvd3MgPSByb3c7DQogICAgICB0aGlzLmZvcm1JdGVtID0gew0KICAgICAgICBkaXI6IHJvdy5wYXRoLA0KICAgICAgICBzdXBlcmlvcjogMCwNCiAgICAgICAgZmlsZWRpcjogcm93LmZpbGVuYW1lLA0KICAgICAgICBmaWxlVG9rZW46IHRoaXMuZmlsZVRva2VuLA0KICAgICAgfTsNCiAgICAgIHRoaXMuZ2V0TGlzdChmYWxzZSwgZmFsc2UpOw0KICAgIH0sDQogICAganVtcFJvdXRlKGl0ZW0pIHsNCiAgICAgIGxldCBkYXRhID0gew0KICAgICAgICBwYXRoOiBpdGVtLnJvdXRlLA0KICAgICAgICBmaWxlbmFtZTogJycsDQogICAgICB9Ow0KICAgICAgdGhpcy5vcGVuKGRhdGEpOw0KICAgIH0sDQogICAgcmVmcmVzaFJvdXRlKCkgew0KICAgICAgbGV0IGRhdGEgPSB7DQogICAgICAgIHBhdGg6IHRoaXMucm91dGVMaXN0W3RoaXMucm91dGVMaXN0Lmxlbmd0aCAtIDFdLnJvdXRlLA0KICAgICAgICBmaWxlbmFtZTogJycsDQogICAgICB9Ow0KICAgICAgdGhpcy5vcGVuKGRhdGEpOw0KICAgIH0sDQogICAgLy8g57yW6L6Rw58NCiAgICBlZGl0KHJvdykgew0KICAgICAgdGhpcy5uYXZJdGVtID0gcm93Ow0KICAgICAgdGhpcy5zcGluU2hvdyA9IHRydWU7DQogICAgICB0aGlzLnBhdGhuYW1lID0gcm93LnBhdGhuYW1lOw0KICAgICAgdGhpcy50aXRsZSA9IHJvdy5maWxlbmFtZTsNCiAgICAgIHRoaXMuZWRpdG9ySW5kZXhbMF0udGl0bGUgPSByb3cuZmlsZW5hbWU7DQogICAgICB0aGlzLmVkaXRvckluZGV4WzBdLnBhdGhuYW1lID0gcm93LnBhdGhuYW1lOw0KICAgICAgdGhpcy5uYXZMaXN0ID0gdGhpcy5uYXZMaXN0Rm9yVGFiOw0KICAgICAgdGhpcy5kaXIgPSByb3cucGF0aDsNCiAgICAgIC8vIOWIm+W7uuS7o+eggeWuueWZqA0KICAgICAgaWYgKHRoaXMuZWRpdG9yTGlzdC5sZW5ndGggPD0gMCkgew0KICAgICAgICAvLyB0aGlzLmluaXRFZGl0b3IoKTsNCiAgICAgIH0NCiAgICAgIHRoaXMub3BlbmZpbGUocm93LnBhdGhuYW1lLCBmYWxzZSk7DQogICAgfSwNCiAgICAvKioNCiAgICAgKiDlpIfms6gNCiAgICAgKi8NCiAgICBtYXJrKHJvdykgew0KICAgICAgdGhpcy4kbW9kYWxGb3JtKA0KICAgICAgICBmaWxlTWFyayh7DQogICAgICAgICAgcGF0aDogcm93LnBhdGhuYW1lLA0KICAgICAgICAgIGZpbGVUb2tlbjogdGhpcy5maWxlVG9rZW4sDQogICAgICAgIH0pLA0KICAgICAgKS50aGVuKCgpID0+IHRoaXMuZ2V0TGlzdCh0cnVlLCBmYWxzZSkpOw0KICAgIH0sDQogICAgLyoqDQogICAgICog5L+d5a2YDQogICAgICogQHBhcmFtIHtPYmplY3R9IGluZGV4ICAgLy8g5b2T5YmN57Si5byVDQogICAgICogQHBhcmFtIHtPYmplY3R9IHR5cGUgICAgLy8gdHJ1ZSDkuI3mm7TmlrDlvZPliY3mnKzlnLDmlbDmja7vvIxmYWxzZeaIluiAheS4uuepuiDmm7TmlrDlvZPliY3mlbDmja4NCiAgICAgKi8NCiAgICBzYXZlZmlsZShpbmRleCwgdHlwZSkgew0KICAgICAgbGV0IGNvZGUgPSB0aGlzLmVkaXRvckxpc3RbaW5kZXhdLmVkaXRvci5nZXRWYWx1ZSgpOw0KICAgICAgbGV0IGRhdGEgPSB7DQogICAgICAgIGNvbW1lbnQ6IGNvZGUsDQogICAgICAgIGZpbGVwYXRoOiB0aGlzLmVkaXRvckxpc3RbaW5kZXhdLnBhdGgsDQogICAgICAgIGZpbGVUb2tlbjogdGhpcy5maWxlVG9rZW4sDQogICAgICB9Ow0KICAgICAgbGV0IHRoYXQgPSB0aGlzOw0KICAgICAgc2F2ZWZpbGVBcGkoZGF0YSkNCiAgICAgICAgLnRoZW4oYXN5bmMgKHJlcykgPT4gew0KICAgICAgICAgIGlmICghdHlwZSkgew0KICAgICAgICAgICAgdGhhdC5jb2RlID0gY29kZTsNCiAgICAgICAgICAgIHRoYXQuaXNTYXZlID0gdHJ1ZTsNCiAgICAgICAgICAgIHRoYXQuZWRpdG9ySW5kZXhbaW5kZXhdLmljb24gPSAnJzsNCiAgICAgICAgICAgIHRoYXQuZWRpdG9yTGlzdFtpbmRleF0uaXNTYXZlID0gdHJ1ZTsNCiAgICAgICAgICB9DQogICAgICAgICAgdGhhdC4kbWVzc2FnZS5zdWNjZXNzKHJlcy5tc2cpOw0KICAgICAgICAgIHRoYXQuJE1vZGFsLnJlbW92ZSgpOw0KICAgICAgICB9KQ0KICAgICAgICAuY2F0Y2goKHJlcykgPT4gew0KICAgICAgICAgIHRoYXQuY2F0Y2hGdW4ocmVzKTsNCiAgICAgICAgfSk7DQogICAgfSwNCiAgICAvLyDliLfmlrANCiAgICByZWZyZXNoZmlsZSgpIHsNCiAgICAgIC8vIOWIt+aWsOe8lui+keWZqA0KICAgICAgaWYgKHRoaXMuZWRpdG9yTGlzdFt0aGlzLmluZGV4RWRpdG9yXSkgdGhpcy5vcGVuZmlsZSh0aGlzLmVkaXRvckxpc3RbdGhpcy5pbmRleEVkaXRvcl0ucGF0aCwgdHJ1ZSk7DQogICAgfSwNCiAgICAvL+iuoeeul3Rva2Vu6L+H5pyf5pe26Ze0DQogICAgZ2V0RXhwaXJlc1RpbWUoZXhwaXJlc1RpbWUpIHsNCiAgICAgIGxldCBub3dUaW1lTnVtID0gTWF0aC5yb3VuZChuZXcgRGF0ZSgpIC8gMTAwMCk7DQogICAgICBsZXQgZXhwaXJlc1RpbWVOdW0gPSBleHBpcmVzVGltZSAtIG5vd1RpbWVOdW07DQogICAgICByZXR1cm4gcGFyc2VGbG9hdChwYXJzZUZsb2F0KHBhcnNlRmxvYXQoZXhwaXJlc1RpbWVOdW0gLyA2MCkgLyA2MCkgLyAyNCk7DQogICAgfSwNCiAgICAvLyDkvqfovrnmoI/lvILmraXliqDovb0NCiAgICBsb2FkRGF0YShpdGVtLCBjYWxsYmFjaykgew0KICAgICAgaWYgKCFpdGVtLmRhdGEuaXNMZWFmKSB7DQogICAgICAgIHRoaXMuZm9ybUl0ZW0gPSB7DQogICAgICAgICAgZGlyOiBpdGVtLmRhdGEucGF0aCwNCiAgICAgICAgICBzdXBlcmlvcjogMCwNCiAgICAgICAgICBmaWxlZGlyOiBpdGVtLmRhdGEudGl0bGUsDQogICAgICAgICAgZmlsZVRva2VuOiB0aGlzLmZpbGVUb2tlbiwNCiAgICAgICAgfTsNCiAgICAgICAgb3BlbmRpckxpc3RBcGkodGhpcy5mb3JtSXRlbSkNCiAgICAgICAgICAudGhlbihhc3luYyAocmVzKSA9PiB7DQogICAgICAgICAgICBjYWxsYmFjayhyZXMuZGF0YS5uYXZMaXN0KTsNCiAgICAgICAgICB9KQ0KICAgICAgICAgIC5jYXRjaCgocmVzKSA9PiB7DQogICAgICAgICAgICBpZiAocmVzLnN0YXR1cyA9PSAxMTAwMDgpIHsNCiAgICAgICAgICAgICAgdGhpcy4kbWVzc2FnZS5lcnJvcihyZXMubXNnKTsNCiAgICAgICAgICAgICAgdGhpcy5pc1Nob3dMb2duID0gdHJ1ZTsNCiAgICAgICAgICAgICAgdGhpcy5pc1Nob3dMaXN0ID0gZmFsc2U7DQogICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgdGhpcy5jYXRjaEZ1bihyZXMpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0pOw0KICAgICAgfQ0KICAgIH0sDQogICAgLy8g6Ieq5a6a5LmJ5pi+56S6DQogICAgcmVuZGVyQ29udGVudChoLCB7IG5vZGUsIGRhdGEsIHJvb3QgfSkgew0KICAgICAgbGV0IHRoYXQgPSB0aGlzOw0KICAgICAgcmV0dXJuIGgoDQogICAgICAgICdzcGFuJywNCiAgICAgICAgew0KICAgICAgICAgIHN0eWxlOiB7DQogICAgICAgICAgICBkaXNwbGF5OiAnaW5saW5lLWJsb2NrJywNCiAgICAgICAgICAgIGN1cnNvcjogJ3BvaW50ZXInLA0KICAgICAgICAgICAgdXNlclNlbGVjdDogJ251bGwnLA0KICAgICAgICAgICAgY29sb3I6ICcjY2NjY2NjJywNCiAgICAgICAgICAgIGRpc3BsYXk6ICdpbmxpbmUtYmxvY2snLA0KICAgICAgICAgICAgd2lkdGg6ICcxMDAlJywNCiAgICAgICAgICAgIGJvcmRlclJhZGlzOiAnNXB4JywNCiAgICAgICAgICB9LA0KICAgICAgICAgIG9uOiB7DQogICAgICAgICAgICBjbGljazogKCkgPT4gew0KICAgICAgICAgICAgICB0aGF0LmNsaWNrRGlyKGRhdGEsIHJvb3QsIG5vZGUpOw0KICAgICAgICAgICAgfSwNCiAgICAgICAgICAgIGNvbnRleHRtZW51OiAoKSA9PiB7DQogICAgICAgICAgICAgIC8vIHRoYXQuaGFuZGxlQ29udGV4dERlbEZvbGRlcihkYXRhLHJvb3Qsbm9kZSk7DQogICAgICAgICAgICB9LA0KICAgICAgICAgIH0sDQogICAgICAgIH0sDQogICAgICAgIFsNCiAgICAgICAgICBoKCdzcGFuJywgWw0KICAgICAgICAgICAgaCgnSWNvbicsIHsNCiAgICAgICAgICAgICAgcHJvcHM6IHsNCiAgICAgICAgICAgICAgICB0eXBlOiAhZGF0YS5pc0xlYWYgPyAnbWQtZm9sZGVyJyA6ICdpb3MtZG9jdW1lbnQtb3V0bGluZScsDQogICAgICAgICAgICAgIH0sDQogICAgICAgICAgICAgIHN0eWxlOiB7DQogICAgICAgICAgICAgICAgbWFyZ2luUmlnaHQ6ICc4cHgnLA0KICAgICAgICAgICAgICB9LA0KICAgICAgICAgICAgfSksDQogICAgICAgICAgICBoKA0KICAgICAgICAgICAgICAnc3BhbicsDQogICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBhdHRyczogew0KICAgICAgICAgICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUsDQogICAgICAgICAgICAgICAgfSwNCiAgICAgICAgICAgICAgfSwNCiAgICAgICAgICAgICAgZGF0YS50aXRsZSwNCiAgICAgICAgICAgICksDQogICAgICAgICAgXSksDQogICAgICAgIF0sDQogICAgICApOw0KICAgIH0sDQogICAgLyoqDQogICAgICog5L6n6L655qCP54K55Ye75LqL5Lu2DQogICAgICogQHBhcmFtIHtPYmplY3R9IGRhdGENCiAgICAgKi8NCiAgICBjbGlja0RpcihkYXRhLCByb290LCBub2RlKSB7DQogICAgICBsZXQgdGhhdCA9IHRoaXM7DQogICAgICB0aGF0Lm5hdkl0ZW0gPSBkYXRhOw0KICAgICAgdGhhdC5wYXRobmFtZSA9IGRhdGEucGF0aG5hbWU7DQoNCiAgICAgIGlmICghZGF0YS5pc0Rpcikgew0KICAgICAgICBsZXQgaSA9IHRoYXQuZWRpdG9ySW5kZXguZmluZEluZGV4KChlKSA9PiB7DQogICAgICAgICAgcmV0dXJuIGUucGF0aG5hbWUgPT09IGRhdGEucGF0aG5hbWU7DQogICAgICAgIH0pOw0KICAgICAgICBpZiAoaSA+IC0xKSB7DQogICAgICAgICAgdGhhdC5pbmRleEVkaXRvciA9IGkudG9TdHJpbmcoKTsNCiAgICAgICAgICB0aGF0LnRvZ2dsZUVkaXRvcigpOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgIGxldCBpbmRleCA9IHRoYXQuZWRpdG9ySW5kZXgubGVuZ3RoOw0KICAgICAgICAgIC8vIOWIm+W7unRhYnMNCiAgICAgICAgICB0aGF0LmVkaXRvckluZGV4LnB1c2goew0KICAgICAgICAgICAgdGFiOiB0cnVlLA0KICAgICAgICAgICAgaW5kZXg6IGluZGV4LnRvU3RyaW5nKCksDQogICAgICAgICAgICB0aXRsZTogZGF0YS50aXRsZSwNCiAgICAgICAgICAgIGljb246ICcnLA0KICAgICAgICAgICAgcGF0aG5hbWU6IGRhdGEucGF0aG5hbWUsDQogICAgICAgICAgfSk7DQogICAgICAgICAgdGhhdC5pbmRleEVkaXRvciA9IGluZGV4LnRvU3RyaW5nKCk7DQogICAgICAgICAgLy8g5Yib5bu65Luj56CB5a655ZmoDQogICAgICAgICAgdGhhdC5pbml0RWRpdG9yKCk7DQogICAgICAgICAgdGhhdC5vcGVuZmlsZShkYXRhLnBhdGhuYW1lLCB0cnVlKTsNCiAgICAgICAgfQ0KICAgICAgfQ0KICAgIH0sDQogICAgLy/kvqfovrnmoI/lj7PplK7ngrnlh7vkuovku7YNCiAgICBoYW5kbGVDb250ZXh0TWVudShkYXRhLCBldmVudCwgcG9zaXRpb24pIHsNCiAgICAgIHBvc2l0aW9uLmxlZnQgPSBOdW1iZXIocG9zaXRpb24ubGVmdC5zbGljZSgwLCAtMikpICsgNzUgKyAncHgnOw0KICAgICAgdGhpcy5jb250ZXh0RGF0YSA9IGRhdGE7DQogICAgfSwNCiAgICAvLyDmlofku7bmk43kvZznsbvlnosgY3JlYXRlRm9sZGVyfOWIm+W7uuaWh+S7tuWkuSBjcmVhdGVGaWxlfOWIm+W7uuaWh+S7tiBkZWxGb2xkZXJ85Yig6Zmk5paH5Lu25aS55oiW6ICF5paH5Lu2IHJlbmFtZUZpbGV85paH5Lu26YeN5ZG95ZCNDQogICAgLy/liJvlu7rmlofku7blpLkNCiAgICBoYW5kbGVDb250ZXh0Q3JlYXRlRm9sZGVyKCkgew0KICAgICAgdGhpcy5mb3JtRmlsZS5maWxlbmFtZSA9ICcnOw0KICAgICAgdGhpcy5mb3JtVGl0bGUgPSAn5Yib5bu65paH5Lu25aS5JzsNCiAgICAgIHRoaXMuZm9ybVNob3cgPSB0cnVlOw0KICAgICAgdGhpcy5maWxlVHlwZSA9ICdjcmVhdGVGb2xkZXInOw0KICAgIH0sDQogICAgLy/liJvlu7rmlofku7YNCiAgICBoYW5kbGVDb250ZXh0Q3JlYXRlRmlsZSgpIHsNCiAgICAgIHRoaXMuZm9ybUZpbGUuZmlsZW5hbWUgPSAnJzsNCiAgICAgIHRoaXMuZm9ybVRpdGxlID0gJ+WIm+W7uuaWh+S7tic7DQogICAgICB0aGlzLmZvcm1TaG93ID0gdHJ1ZTsNCiAgICAgIHRoaXMuZmlsZVR5cGUgPSAnY3JlYXRlRmlsZSc7DQogICAgfSwNCiAgICAvL+WIoOmZpOaWh+S7tg0KICAgIGhhbmRsZUNvbnRleHREZWxGb2xkZXIoKSB7DQogICAgICBsZXQgdGhhdCA9IHRoaXM7DQogICAgICB0aGF0LiRNb2RhbC5jb25maXJtKHsNCiAgICAgICAgdGl0bGU6ICfliKDpmaTmlofku7blpLnlkozmlofku7YnLA0KICAgICAgICBjb250ZW50OiAn5oKo56Gu5a6a6KaB5Yig6Zmk5pS55paH5Lu277yfJywNCiAgICAgICAgbG9hZGluZzogdHJ1ZSwNCiAgICAgICAgb25PazogKCkgPT4gew0KICAgICAgICAgIGxldCBkYXRhID0gew0KICAgICAgICAgICAgcGF0aDogdGhhdC5jb250ZXh0RGF0YS5wYXRobmFtZSwNCiAgICAgICAgICAgIGZpbGVUb2tlbjogdGhpcy5maWxlVG9rZW4sDQogICAgICAgICAgfTsNCiAgICAgICAgICBkZWxGb2xkZXIoZGF0YSkNCiAgICAgICAgICAgIC50aGVuKGFzeW5jIChyZXMpID0+IHsNCiAgICAgICAgICAgICAgdGhhdC5sb29wRGVsKHRoYXQubmF2TGlzdCwgdGhhdC5jb250ZXh0RGF0YS5ub2RlS2V5KTsNCiAgICAgICAgICAgICAgdGhhdC4kTW9kYWwucmVtb3ZlKCk7DQogICAgICAgICAgICAgIHRoYXQuJG1lc3NhZ2Uuc3VjY2Vzcygn5Yig6Zmk5oiQ5YqfJyk7DQogICAgICAgICAgICB9KQ0KICAgICAgICAgICAgLmNhdGNoKChyZXMpID0+IHsNCiAgICAgICAgICAgICAgdGhhdC5jYXRjaEZ1bihyZXMpOw0KICAgICAgICAgICAgfSk7DQogICAgICAgIH0sDQogICAgICAgIG9uQ2FuY2VsOiAoKSA9PiB7DQogICAgICAgICAgdGhhdC4kbWVzc2FnZS5pbmZvKCflj5bmtojliKDpmaQnKTsNCiAgICAgICAgfSwNCiAgICAgIH0pOw0KICAgIH0sDQogICAgLy/ph43lkb3lkI0NCiAgICBoYW5kbGVDb250ZXh0UmVuYW1lKCkgew0KICAgICAgdGhpcy5mb3JtRmlsZS5maWxlbmFtZSA9IHRoaXMuY29udGV4dERhdGEudGl0bGU7DQogICAgICB0aGlzLmZvcm1UaXRsZSA9ICfph43lkb3lkI3mlofku7YnOw0KICAgICAgdGhpcy5mb3JtU2hvdyA9IHRydWU7DQogICAgICB0aGlzLmZpbGVUeXBlID0gJ3JlbmFtZUZpbGUnOw0KICAgIH0sDQogICAgLy/miZPlvIDmlofku7YNCiAgICBvcGVuZmlsZShwYXRoLCBpc19lZGl0KSB7DQogICAgICBsZXQgdGhhdCA9IHRoaXM7DQogICAgICBsZXQgcGFyYW1zID0gew0KICAgICAgICBmaWxlcGF0aDogcGF0aCwNCiAgICAgICAgZmlsZVRva2VuOiB0aGlzLmZpbGVUb2tlbiwNCiAgICAgIH07DQoNCiAgICAgIG9wZW5maWxlQXBpKHBhcmFtcykNCiAgICAgICAgLnRoZW4oYXN5bmMgKHJlcykgPT4gew0KICAgICAgICAgIGlmICghaXNfZWRpdCkgew0KICAgICAgICAgICAgdGhhdC5tb2RhbHMgPSB0cnVlOw0KICAgICAgICAgICAgdGhhdC5zcGluU2hvdyA9IGZhbHNlOw0KICAgICAgICAgICAgdGhpcy5pbml0RWRpdG9yKCk7DQogICAgICAgICAgfQ0KICAgICAgICAgIGxldCBkYXRhID0gcmVzLmRhdGE7DQogICAgICAgICAgdGhhdC5jb2RlID0gZGF0YS5jb250ZW50Ow0KICAgICAgICAgIC8vIOS/neWtmOebuOWvueS/oeaBrw0KDQogICAgICAgICAgdGhhdC5lZGl0b3JMaXN0W3RoYXQuaW5kZXhFZGl0b3JdLm9sZENvZGUgPSB0aGF0LmNvZGU7DQogICAgICAgICAgdGhpcy4kbmV4dFRpY2soKGUpID0+IHsNCiAgICAgICAgICAgIHRoYXQuZWRpdG9yTGlzdFt0aGF0LmluZGV4RWRpdG9yIHx8IDBdLnBhdGggPSBwYXRoOw0KICAgICAgICAgICAgdGhhdC5lZGl0b3JMaXN0W3RoYXQuaW5kZXhFZGl0b3IgfHwgMF0ucGF0aG5hbWUgPSBwYXRoOw0KICAgICAgICAgIH0pOw0KICAgICAgICAgIC8v5pS55Y+Y5bGe5oCnDQogICAgICAgICAgdGhhdC5jaGFuZ2VNb2RlbChkYXRhLm1vZGUsIHRoYXQuY29kZSk7DQogICAgICAgIH0pDQogICAgICAgIC5jYXRjaCgocmVzKSA9PiB7DQogICAgICAgICAgdGhhdC5jYXRjaEZ1bihyZXMpOw0KICAgICAgICB9KTsNCiAgICB9LA0KICAgIC8qKg0KICAgICAqIOWIneWni+WMlue8lui+keWZqA0KICAgICAqLw0KICAgIGluaXRFZGl0b3IoKSB7DQogICAgICBsZXQgdGhhdCA9IHRoaXM7DQogICAgICB0aGF0LiRuZXh0VGljaygoKSA9PiB7DQogICAgICAgIC8vIOWIneWni+WMlue8lui+keWZqO+8jOehruS/nWRvbeW3sue7j+a4suafkw0KICAgICAgICB0aGF0LmVkaXRvciA9IG1vbmFjby5lZGl0b3IuY3JlYXRlKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb250YWluZXJfJyArIHRoYXQuaW5kZXhFZGl0b3IpLCB7DQogICAgICAgICAgdmFsdWU6IHRoYXQuY29kZSwgLy/nvJbovpHlmajliJ3lp4vmmL7npLrmloflrZcNCiAgICAgICAgICBsYW5ndWFnZTogJ3NxbCcsIC8v6K+t6KiA5pSv5oyB6Ieq6KGM5p+l6ZiFZGVtbw0KICAgICAgICAgIGF1dG9tYXRpY0xheW91dDogdHJ1ZSwgLy/oh6rliqjluIPlsYANCiAgICAgICAgICB0aGVtZTogJ3ZzJywgLy/lrpjmlrnoh6rluKbkuInnp43kuLvpoph2cywgaGMtYmxhY2ssIG9yIHZzLWRhcmsNCiAgICAgICAgICBmb2xkaW5nU3RyYXRlZ3k6ICdpbmRlbnRhdGlvbicsIC8vIOS7o+eggeWPr+WIhuWwj+auteaKmOWPoA0KICAgICAgICAgIG92ZXJ2aWV3UnVsZXJCb3JkZXI6IGZhbHNlLCAvLyDkuI3opoHmu5rliqjmnaHnmoTovrnmoYYNCiAgICAgICAgICBzY3JvbGxiYXI6IHsNCiAgICAgICAgICAgIC8vIOa7muWKqOadoeiuvue9rg0KICAgICAgICAgICAgdmVydGljYWxTY3JvbGxiYXJTaXplOiA0LCAvLyDnq5bmu5rliqjmnaENCiAgICAgICAgICAgIGhvcml6b250YWxTY3JvbGxiYXJTaXplOiAxMCwgLy8g5qiq5rua5Yqo5p2hDQogICAgICAgICAgfSwNCiAgICAgICAgICBhdXRvSW5kZW50OiB0cnVlLCAvLyDoh6rliqjluIPlsYANCiAgICAgICAgICB0YWJTaXplOiA0LCAvLyB0YWLnvKnov5vplb/luqYNCiAgICAgICAgICBhdXRvQ2xvc2luZ092ZXJ0eXBlOiAnYWx3YXlzJywNCiAgICAgICAgfSk7DQogICAgICAgIC8v5re75Yqg5oyJ6ZSu55uR5ZCsDQogICAgICAgIHRoYXQuZWRpdG9yLmFkZENvbW1hbmQobW9uYWNvLktleU1vZC5DdHJsQ21kIHwgbW9uYWNvLktleUNvZGUuS0VZX1MsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICB0aGF0LnNhdmVmaWxlKHRoYXQuaW5kZXhFZGl0b3IpOw0KICAgICAgICB9KTsNCiAgICAgICAgdGhhdC5lZGl0b3Iub25LZXlVcCgoKSA9PiB7DQogICAgICAgICAgLy8g5b2T6ZSu55uY5oyJ5LiL77yM5Yik5pat5b2T5YmN57yW6L6R5Zmo5paH5pys5LiO5bey5L+d5a2Y55qE57yW6L6R5Zmo5paH5pys5piv5ZCm5LiA6Ie0DQogICAgICAgICAgaWYgKHRoYXQuZWRpdG9yLmdldFZhbHVlKCkgIT0gdGhhdC5jb2RlKSB7DQogICAgICAgICAgICB0aGF0LmlzU2F2ZSA9IGZhbHNlOw0KICAgICAgICAgICAgdGhhdC5lZGl0b3JJbmRleFt0aGF0LmluZGV4RWRpdG9yXS5pY29uID0gJ21kLXdhcm5pbmcnOw0KICAgICAgICAgICAgdGhhdC5lZGl0b3JMaXN0W3RoYXQuaW5kZXhFZGl0b3JdLmlzU2F2ZSA9IGZhbHNlOw0KICAgICAgICAgIH0NCiAgICAgICAgfSk7DQogICAgICAgIHRoYXQuZWRpdG9yTGlzdC5wdXNoKHsNCiAgICAgICAgICBlZGl0b3I6IHRoYXQuZWRpdG9yLA0KICAgICAgICAgIG9sZENvZGU6IHRoYXQuY29kZSwNCiAgICAgICAgICBwYXRoOiB0aGlzLnBhdGhuYW1lLA0KICAgICAgICAgIGlzU2F2ZTogdHJ1ZSwNCiAgICAgICAgICBpbmRleDogdGhhdC5pbmRleEVkaXRvciwNCiAgICAgICAgfSk7DQogICAgICB9KTsNCiAgICB9LA0KICAgIC8qKg0KICAgICAqIOWIh+aNouivreiogA0KICAgICAqIEBwYXJhbSB7T2JqZWN0fSBtb2RlDQogICAgICovDQogICAgY2hhbmdlTW9kZWwobW9kZSwgdmFsdWUpIHsNCiAgICAgIHZhciBvbGRNb2RlbCA9IHRoaXMuZWRpdG9yTGlzdFt0aGlzLmluZGV4RWRpdG9yXS5lZGl0b3IuZ2V0TW9kZWwoKTsgLy/ojrflj5bml6fmqKHlnosNCiAgICAgIC8vIHZhciB2YWx1ZSA9IHRoaXMuZWRpdG9yLmdldFZhbHVlKCk7Ly/ojrflj5bml6fnmoTmlofmnKwNCiAgICAgIC8v5Yib5bu65paw5qih5Z6L77yMdmFsdWXkuLrml6fmlofmnKzvvIxpZOS4um1vZGVJZO+8jOWNs+ivreiogO+8iGxhbmd1YWdlLmlk77yJDQogICAgICAvL21vZGVzSWRz5Y2z5Li65pSv5oyB6K+t6KiADQogICAgICAvLyB2YXIgbW9kZXNJZHMgPSBtb25hY28ubGFuZ3VhZ2VzLmdldExhbmd1YWdlcygpLm1hcChmdW5jdGlvbihsYW5nKSB7IHJldHVybiBsYW5nLmlkOyB9KTsNCiAgICAgIGlmICghbW9kZSkgbW9kZSA9IG9sZE1vZGVsLmdldExhbmd1YWdlSWQoKTsNCiAgICAgIC8vIGlmKCF2YWx1ZSkgdmFsdWUgPSB0aGlzLmVkaXRvci5nZXRWYWx1ZSgpOw0KDQogICAgICB2YXIgbmV3TW9kZWwgPSBtb25hY28uZWRpdG9yLmNyZWF0ZU1vZGVsKHZhbHVlLCBtb2RlKTsNCiAgICAgIC8v5bCG5pen5qih5Z6L6ZSA5q+BDQogICAgICBpZiAob2xkTW9kZWwpIHsNCiAgICAgICAgb2xkTW9kZWwuZGlzcG9zZSgpOw0KICAgICAgfQ0KICAgICAgLy/orr7nva7mlrDmqKHlnosNCiAgICAgIHRoaXMuZWRpdG9yTGlzdFt0aGlzLmluZGV4RWRpdG9yXS5lZGl0b3Iuc2V0TW9kZWwobmV3TW9kZWwpOw0KICAgIH0sDQogICAgLy8g5paH5Lu25pON5L2c57G75Z6LIGNyZWF0ZUZvbGRlcnzliJvlu7rmlofku7blpLkgY3JlYXRlRmlsZXzliJvlu7rmlofku7YgZGVsRm9sZGVyfOWIoOmZpOaWh+S7tuWkueaIluiAheaWh+S7tg0KICAgIGhhbmRsZVN1Ym1pdChuYW1lKSB7DQogICAgICBsZXQgdGhhdCA9IHRoaXM7DQogICAgICBsZXQgZGF0YSA9ICcnOw0KICAgICAgbGV0IGRhdGFJdGVtID0gJyc7DQogICAgICB0aGlzLiRyZWZzW25hbWVdLnZhbGlkYXRlKCh2YWxpZCkgPT4gew0KICAgICAgICBpZiAodmFsaWQpIHsNCiAgICAgICAgICBzd2l0Y2ggKHRoYXQuZmlsZVR5cGUpIHsNCiAgICAgICAgICAgIGNhc2UgJ2NyZWF0ZUZvbGRlcic6DQogICAgICAgICAgICAgIGRhdGEgPSB7DQogICAgICAgICAgICAgICAgcGF0aDogdGhhdC5jb250ZXh0RGF0YS5wYXRobmFtZSwNCiAgICAgICAgICAgICAgICBuYW1lOiB0aGF0LmZvcm1GaWxlLmZpbGVuYW1lLA0KICAgICAgICAgICAgICAgIGZpbGVUb2tlbjogdGhpcy5maWxlVG9rZW4sDQogICAgICAgICAgICAgIH07DQogICAgICAgICAgICAgIGNyZWF0ZUZvbGRlcihkYXRhKQ0KICAgICAgICAgICAgICAgIC50aGVuKGFzeW5jIChyZXMpID0+IHsNCiAgICAgICAgICAgICAgICAgIGRhdGFJdGVtID0gew0KICAgICAgICAgICAgICAgICAgICBkaXI6IHRoYXQuY29udGV4dERhdGEucGF0aCwNCiAgICAgICAgICAgICAgICAgICAgc3VwZXJpb3I6IDAsDQogICAgICAgICAgICAgICAgICAgIGZpbGVkaXI6IHRoYXQuY29udGV4dERhdGEudGl0bGUsDQogICAgICAgICAgICAgICAgICAgIGZpbGVUb2tlbjogdGhpcy5maWxlVG9rZW4sDQogICAgICAgICAgICAgICAgICB9Ow0KICAgICAgICAgICAgICAgICAgdGhhdC5nZXRMaXN0SXRlbShkYXRhSXRlbSk7DQogICAgICAgICAgICAgICAgICBpZiAodGhhdC5mb3JtU2hvdykgdGhhdC5mb3JtU2hvdyA9IGZhbHNlOw0KICAgICAgICAgICAgICAgICAgdGhhdC4kbWVzc2FnZS5zdWNjZXNzKCfliJvlu7rmiJDlip8nKTsNCiAgICAgICAgICAgICAgICB9KQ0KICAgICAgICAgICAgICAgIC5jYXRjaCgocmVzKSA9PiB7DQogICAgICAgICAgICAgICAgICB0aGF0LmNhdGNoRnVuKHJlcyk7DQogICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgY2FzZSAnY3JlYXRlRmlsZSc6DQogICAgICAgICAgICAgIGRhdGEgPSB7DQogICAgICAgICAgICAgICAgcGF0aDogdGhhdC5jb250ZXh0RGF0YS5wYXRobmFtZSwNCiAgICAgICAgICAgICAgICBuYW1lOiB0aGF0LmZvcm1GaWxlLmZpbGVuYW1lLA0KICAgICAgICAgICAgICAgIGZpbGVUb2tlbjogdGhpcy5maWxlVG9rZW4sDQogICAgICAgICAgICAgIH07DQogICAgICAgICAgICAgIGNyZWF0ZUZpbGUoZGF0YSkNCiAgICAgICAgICAgICAgICAudGhlbihhc3luYyAocmVzKSA9PiB7DQogICAgICAgICAgICAgICAgICBkYXRhSXRlbSA9IHsNCiAgICAgICAgICAgICAgICAgICAgZGlyOiB0aGF0LmNvbnRleHREYXRhLnBhdGgsDQogICAgICAgICAgICAgICAgICAgIHN1cGVyaW9yOiAwLA0KICAgICAgICAgICAgICAgICAgICBmaWxlZGlyOiB0aGF0LmNvbnRleHREYXRhLnRpdGxlLA0KICAgICAgICAgICAgICAgICAgICBmaWxlVG9rZW46IHRoaXMuZmlsZVRva2VuLA0KICAgICAgICAgICAgICAgICAgfTsNCiAgICAgICAgICAgICAgICAgIHRoYXQuZ2V0TGlzdEl0ZW0oZGF0YUl0ZW0pOw0KICAgICAgICAgICAgICAgICAgaWYgKHRoYXQuZm9ybVNob3cpIHRoYXQuZm9ybVNob3cgPSBmYWxzZTsNCiAgICAgICAgICAgICAgICAgIHRoYXQuJG1lc3NhZ2Uuc3VjY2Vzcygn5Yib5bu65oiQ5YqfJyk7DQogICAgICAgICAgICAgICAgfSkNCiAgICAgICAgICAgICAgICAuY2F0Y2goKHJlcykgPT4gew0KICAgICAgICAgICAgICAgICAgdGhhdC5jYXRjaEZ1bihyZXMpOw0KICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgIGNhc2UgJ3JlbmFtZUZpbGUnOg0KICAgICAgICAgICAgICBkYXRhID0gew0KICAgICAgICAgICAgICAgIG5ld25hbWU6IHRoYXQuY29udGV4dERhdGEucGF0aCArICdcXCcgKyB0aGF0LmZvcm1GaWxlLmZpbGVuYW1lLA0KICAgICAgICAgICAgICAgIG9sZG5hbWU6IHRoYXQuY29udGV4dERhdGEucGF0aG5hbWUsDQogICAgICAgICAgICAgICAgZmlsZVRva2VuOiB0aGlzLmZpbGVUb2tlbiwNCiAgICAgICAgICAgICAgfTsNCiAgICAgICAgICAgICAgcmVuYW1lKGRhdGEpDQogICAgICAgICAgICAgICAgLnRoZW4oYXN5bmMgKHJlcykgPT4gew0KICAgICAgICAgICAgICAgICAgdGhhdC4kc2V0KHRoYXQuY29udGV4dERhdGEsICd0aXRsZScsIHRoYXQuZm9ybUZpbGUuZmlsZW5hbWUpOw0KICAgICAgICAgICAgICAgICAgdGhhdC4kbWVzc2FnZS5zdWNjZXNzKCfkv67mlLnmiJDlip8nKTsNCiAgICAgICAgICAgICAgICAgIGlmICh0aGF0LmZvcm1TaG93KSB0aGF0LmZvcm1TaG93ID0gZmFsc2U7DQogICAgICAgICAgICAgICAgfSkNCiAgICAgICAgICAgICAgICAuY2F0Y2goKHJlcykgPT4gew0KICAgICAgICAgICAgICAgICAgdGhhdC5jYXRjaEZ1bihyZXMpOw0KICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICB9DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgdGhpcy4kbWVzc2FnZS5lcnJvcignRmFpbCEnKTsNCiAgICAgICAgfQ0KICAgICAgfSk7DQogICAgfSwNCiAgICAvKioNCiAgICAgKiDpgIDlh7rooajljZUNCiAgICAgKi8NCiAgICBmb3JtRXhpdCgpIHsNCiAgICAgIHRoaXMuZm9ybVNob3cgPSBmYWxzZTsNCiAgICB9LA0KDQogICAgLyoqDQogICAgICog5aSE55CG5o6l5Y+j5Zue6LCDDQogICAgICogQHBhcmFtIHtPYmplY3R9IHJlcw0KICAgICAqLw0KICAgIGNhdGNoRnVuKHJlcykgew0KICAgICAgaWYgKHJlcy5zdGF0dXMpIHsNCiAgICAgICAgaWYgKHJlcy5zdGF0dXMgPT0gNDAwKSB0aGlzLiRtZXNzYWdlLmVycm9yKHJlcy5tc2cpOw0KICAgICAgICBpZiAocmVzLnN0YXR1cyA9PSAxMTAwMDgpIHsNCiAgICAgICAgICAvLyB0aGlzLiRtZXNzYWdlLmVycm9yKHJlcy5tc2cpOw0KICAgICAgICAgIHRoaXMuaXNTaG93TG9nbiA9IHRydWU7DQogICAgICAgICAgdGhpcy5pc1Nob3dMaXN0ID0gZmFsc2U7DQogICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7DQogICAgICAgIH0NCiAgICAgIH0gZWxzZSB7DQogICAgICAgIC8vIHRoaXMuJG1lc3NhZ2UuZXJyb3IoJ+aWh+S7tue8lueggeS4jeiiq+WFvOWuue+8jOaXoOazleato+ehruivu+WPluaWh+S7tiEnKTsNCiAgICAgIH0NCiAgICAgIC8v5YWz6Zet6JKZ54mI5bGCDQogICAgICBpZiAodGhpcy5zcGluU2hvdykgdGhpcy5zcGluU2hvdyA9IGZhbHNlOw0KICAgICAgLy8g5YWz6Zet5paH5Lu25YiX6KGo5bGV56S6DQogICAgICBpZiAodGhpcy5sb2FkaW5nKSB0aGlzLmxvYWRpbmcgPSBmYWxzZTsNCiAgICB9LA0KICAgIGxvb3BEZWwoZGF0YSwgbm9kZUtleSkgew0KICAgICAgZGF0YS5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4gew0KICAgICAgICBpZiAoaXRlbS5ub2RlS2V5ID09PSBub2RlS2V5KSB7DQogICAgICAgICAgcmV0dXJuIGRhdGEuc3BsaWNlKGluZGV4LCAxKTsNCiAgICAgICAgfQ0KICAgICAgICBpZiAoaXRlbS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7DQogICAgICAgICAgcmV0dXJuIHRoaXMubG9vcERlbChpdGVtLmNoaWxkcmVuLCBub2RlS2V5KTsNCiAgICAgICAgfQ0KICAgICAgfSk7DQogICAgfSwNCiAgICAvKioNCiAgICAgKiDnqpflj6PmnIDlpKfljJYNCiAgICAgKi8NCiAgICB3aW5DaGFuZ2VzKCkgew0KICAgICAgaWYgKHRoaXMuY2xhc3NOYW1lKSB7DQogICAgICAgIHRoaXMuY2xhc3NOYW1lID0gJyc7DQogICAgICB9IGVsc2Ugew0KICAgICAgICB0aGlzLmNsYXNzTmFtZSA9ICdkaXktZnVsbHNjcmVlbic7DQogICAgICB9DQogICAgfSwNCiAgICAvKioNCiAgICAgKiDliIfmjaLpgInpobnljaENCiAgICAgKiBAcGFyYW0ge09iamVjdH0gaW5kZXgNCiAgICAgKi8NCiAgICB0b2dnbGVFZGl0b3IoKSB7DQogICAgICBsZXQgaW5kZXggPSBOdW1iZXIodGhpcy5pbmRleEVkaXRvcik7DQogICAgICB0aGlzLmNvZGUgPSB0aGlzLmVkaXRvckxpc3RbaW5kZXhdLm9sZENvZGU7IC8v6K6+572u5paH5Lu25omT5byA5pe255qE5Luj56CBDQogICAgICB0aGlzLmVkaXRvciA9IHRoaXMuZWRpdG9yTGlzdFtpbmRleF0uZWRpdG9yOyAvL+iuvue9rue8lui+keWZqOWunuS+iw0KICAgIH0sDQogICAgaXNFZGl0TWFyayhyb3cpIHsNCiAgICAgIHRyeSB7DQogICAgICAgIHJvdy5pc19lZGl0ID0gdHJ1ZTsNCiAgICAgICAgdGhpcy4kbmV4dFRpY2soKGUpID0+IHsNCiAgICAgICAgICB0aGlzLiRyZWZzLm1hcmsuZm9jdXMoKTsNCiAgICAgICAgfSk7DQogICAgICB9IGNhdGNoIChlcnJvcikgew0KICAgICAgICBjb25zb2xlLmxvZyhlcnJvcik7DQogICAgICB9DQogICAgfSwNCiAgICBpc0VkaXRCbHVyKHJvdykgew0KICAgICAgcm93LmlzX2VkaXQgPSBmYWxzZTsNCiAgICAgIGxldCBkYXRhID0gew0KICAgICAgICBmdWxsX3BhdGg6IHJvdy5yZWFsX3BhdGgsDQogICAgICAgIG1hcms6IHJvdy5tYXJrLA0KICAgICAgfTsNCiAgICAgIG1hcmtTYXZlKHRoaXMuZmlsZVRva2VuLCBkYXRhKQ0KICAgICAgICAudGhlbigocmVzKSA9PiB7DQogICAgICAgICAgLy8gdGhpcy4kbWVzc2FnZS5zdWNjZXNzKHJlcy5tc2cpOw0KICAgICAgICB9KQ0KICAgICAgICAuY2F0Y2goKGVycikgPT4gew0KICAgICAgICAgIHRoaXMuJG1lc3NhZ2UuZXJyb3IoZXJyLm1zZyk7DQogICAgICAgIH0pOw0KICAgIH0sDQogICAgaGFuZGxlVGFiUmVtb3ZlKGluZGV4KSB7DQogICAgICBsZXQgdGhhdCA9IHRoaXM7DQoNCiAgICAgIC8vIOWFs+mXremAiemhueWNoQ0KICAgICAgdGhhdC5lZGl0b3JJbmRleFtpbmRleF0udGFiID0gZmFsc2U7IC8vIOWFs+mXremAiemhueWNoQ0KICAgICAgLy8g5Yik5pat5b2T5YmN5paH5Lu25pyJ5rKh5pyJ5L+d5a2YDQogICAgICBpZiAoIXRoYXQuZWRpdG9yTGlzdFtpbmRleF0uaXNTYXZlKSB7DQogICAgICAgIHRoYXQuJE1vZGFsLmNvbmZpcm0oew0KICAgICAgICAgIHRpdGxlOiAn5paH5Lu25pyq5L+d5a2YJywNCiAgICAgICAgICBjb250ZW50OiAn5oKo5piv5ZCm6ZyA6KaB5L+d5a2Y5b2T5YmN5paH5Lu2JywNCiAgICAgICAgICBsb2FkaW5nOiB0cnVlLA0KICAgICAgICAgIG9uT2s6ICgpID0+IHsNCiAgICAgICAgICAgIC8vIOS/neWtmOaWh+S7tg0KICAgICAgICAgICAgdGhhdC5zYXZlZmlsZShpbmRleCk7DQogICAgICAgICAgfSwNCiAgICAgICAgICBvbkNhbmNlbDogKCkgPT4gew0KICAgICAgICAgICAgdGhhdC4kbWVzc2FnZS5pbmZvKCflj5bmtojkv53lrZgnKTsNCiAgICAgICAgICB9LA0KICAgICAgICB9KTsNCiAgICAgIH0NCiAgICB9LA0KICAgIC8v57yW6L6R5Zmo54q25oCB5Y+Y5YyWDQogICAgZWRpdE1vZGFsQ2hhbmdlKCkgew0KICAgICAgbGV0IHRoYXQgPSB0aGlzOw0KICAgICAgdGhhdC5lZGl0b3JMaXN0LmZvckVhY2goZnVuY3Rpb24gKHZhbHVlLCBpbmRleCkgew0KICAgICAgICBpZiAodmFsdWUuaXNTYXZlID09PSBmYWxzZSkgew0KICAgICAgICAgIGlmIChjb25maXJtKGAke3RoYXQuZWRpdG9ySW5kZXhbaW5kZXhdLnRpdGxlfeaWh+S7tuacquS/neWtmCzmmK/lkKbopoHkv53lrZjor6Xmlofku7ZgKSkgew0KICAgICAgICAgICAgLy8g5L+d5a2Y5b2T5YmN5paH5Lu2DQogICAgICAgICAgICB0aGF0LnNhdmVmaWxlKGluZGV4LCB0cnVlKTsNCiAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgdGhhdC4kbWVzc2FnZS5pbmZvKGDlt7Llj5bmtogke3RoYXQuZWRpdG9ySW5kZXhbaW5kZXhdLnRpdGxlfeaWh+S7tuS/neWtmGApOw0KICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICAvLyDplIDmr4HlvZPliY3nvJbovpHlmagNCiAgICAgICAgdGhhdC5lZGl0b3JMaXN0W2luZGV4XS5lZGl0b3IuZGlzcG9zZSgpOw0KICAgICAgICB0aGF0LmVkaXRvckxpc3RbaW5kZXhdLmVkaXRvciA9IG51bGw7DQogICAgICB9KTsNCiAgICAgIC8vIOWIneWni+ivneaVsOaNrg0KICAgICAgdGhhdC5tb2RhbHMgPSBmYWxzZTsgLy/nvJbovpHlmajlvIDlhbMNCiAgICAgIHRoYXQuZWRpdG9yID0gJyc7IC8v5b2T5YmN57yW6L6R5Zmo5a+56LGhDQogICAgICB0aGF0LmVkaXRvckluZGV4ID0gWw0KICAgICAgICAvL+mAiemhueWNoeaVsOe7hA0KICAgICAgICB7DQogICAgICAgICAgdGFiOiB0cnVlLA0KICAgICAgICAgIGluZGV4OiAnMCcsDQogICAgICAgICAgdGl0bGU6ICcnLA0KICAgICAgICAgIGljb246ICcnLA0KICAgICAgICB9LA0KICAgICAgXTsNCiAgICAgIHRoYXQuZWRpdG9yTGlzdCA9IFtdOyAvL+e8lui+keWZqOaVsOe7hA0KICAgICAgdGhhdC5pbmRleEVkaXRvciA9ICcwJzsgLy/lvZPliY3nvJbovpHlmajntKLlvJUNCiAgICAgIHRoYXQuY29kZSA9ICcnOyAvL+W9k+WJjeaWh+S7tuaJk+W8gOaXtueahOWGheWuuQ0KICAgICAgdGhhdC5uYXZMaXN0ID0gW107IC8v5bem5L6n5a+86Iiq5pWw5o2uDQogICAgICB0aGF0Lm5hdkl0ZW0gPSB7fTsgLy/lt6bkvqflr7zoiKrngrnlh7vmmK/pgInkuK3nmoTmlbDmja4NCiAgICAgIHRoYXQuY29udGV4dERhdGEgPSBudWxsOyAvL+W3puS+p+WvvOiIquWPs+mUrueCueWHu+aYr+S6p+eUn+eahOaVsOaNruWvueixoQ0KICAgIH0sDQogIH0sDQp9Ow0K"},{"version":3,"sources":["opendir.vue"],"names":[],"mappings":";AA+KA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;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;;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;;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;;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;;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;;AAEA;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;;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;;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;;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":"opendir.vue","sourceRoot":"src/pages/system/maintain/systemFile","sourcesContent":["<template>\r\n <div>\r\n <el-card :bordered=\"false\" shadow=\"never\" class=\"ivu-mt\" v-loading=\"spinShow\">\r\n <div v-if=\"isShowList\" class=\"backs-box\">\r\n <div class=\"backs\">\r\n <span class=\"back\" v-db-click @click=\"goBack(false)\">\r\n <i class=\"el-icon-back icon\" />\r\n </span>\r\n <span class=\"item\" v-for=\"(item, index) in routeList\" :key=\"index\" v-db-click @click=\"jumpRoute(item)\">\r\n <span class=\"key\">{{ item.key }}</span>\r\n <i class=\"forward el-icon-arrow-right\" v-if=\"index < routeList.length - 1\" />\r\n </span>\r\n </div>\r\n <span class=\"refresh\" v-db-click @click=\"refreshRoute\">\r\n <i class=\"el-icon-refresh-right icon\" />\r\n </span>\r\n </div>\r\n <el-table\r\n v-if=\"isShowList\"\r\n ref=\"selection\"\r\n :data=\"tabList\"\r\n v-loading=\"loading\"\r\n empty-text=\"暂无数据\"\r\n class=\"mt14\"\r\n >\r\n <el-table-column label=\"文件/文件夹名\" min-width=\"150\">\r\n <template slot-scope=\"scope\">\r\n <div class=\"file-name\" v-db-click @click=\"currentChange(scope.row)\">\r\n <i v-if=\"scope.row.isDir\" class=\"el-icon-folder mr5\" />\r\n <i v-else class=\"el-icon-document mr5\" />\r\n <span>{{ scope.row.filename }}</span>\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.size }}</span>\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.mtime }}</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"备注\" min-width=\"120\">\r\n <template slot-scope=\"scope\">\r\n <div class=\"mark\">\r\n <div v-if=\"scope.row.is_edit\" class=\"table-mark\" v-db-click @click=\"isEditMark(scope.row)\">\r\n {{ scope.row.mark }}\r\n </div>\r\n <el-input ref=\"mark\" v-else v-model=\"scope.row.mark\" @blur=\"isEditBlur(scope.row)\"></el-input>\r\n </div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"操作\" fixed=\"right\" width=\"60\">\r\n <template slot-scope=\"scope\">\r\n <el-button type=\"text\" v-db-click @click=\"open(scope.row)\" v-if=\"scope.row.isDir\">打开</el-button>\r\n <el-button type=\"text\" v-db-click @click=\"edit(scope.row)\" v-else>编辑</el-button>\r\n </template>\r\n </el-table-column>\r\n </el-table>\r\n </el-card>\r\n <el-dialog\r\n :visible.sync=\"modals\"\r\n :custom-class=\"className\"\r\n :close-on-click-modal=\"false\"\r\n width=\"80%\"\r\n top=\"5vh\"\r\n @close=\"editModalChange\"\r\n append-to-body\r\n :title=\"editorIndex[indexEditor].title\"\r\n >\r\n <p slot=\"header\" class=\"diy-header\" ref=\"diyHeader\">\r\n <span>{{ title }}</span>\r\n <i\r\n v-db-click\r\n @click=\"winChanges\"\r\n class=\"diy-header-icon\"\r\n :class=\"className ? 'el-icon-cpu' : 'el-icon-full-screen'\"\r\n style=\"font-size: 20px\"\r\n />\r\n </p>\r\n <div style=\"height: 100%\">\r\n <div class=\"top-button\">\r\n <el-button type=\"primary\" id=\"savefile\" class=\"diy-button\" v-db-click @click=\"savefile(indexEditor)\"\r\n >保存</el-button\r\n >\r\n <el-button id=\"refresh\" class=\"diy-button\" v-db-click @click=\"refreshfile\">刷新</el-button>\r\n </div>\r\n <div class=\"file-box\">\r\n <div class=\"show-info\">\r\n <div class=\"show-text\" :title=\"navItem.pathname\">目录: {{ navItem.pathname }}</div>\r\n <div class=\"diy-button-list\">\r\n <el-button class=\"diy-button\" v-db-click @click=\"goBack(true)\">返回上一级</el-button>\r\n <el-button class=\"diy-button\" v-db-click @click=\"getList(true, true)\">刷新</el-button>\r\n </div>\r\n </div>\r\n <div class=\"file-left\">\r\n <el-tree\r\n class=\"diy-tree-render\"\r\n :data=\"navList\"\r\n :render-content=\"renderContent\"\r\n :load=\"loadData\"\r\n @node-contextmenu=\"handleContextMenu\"\r\n expand-node\r\n lazy\r\n :props=\"props\"\r\n >\r\n <!-- <template transfer slot=\"contextMenu\">\r\n <DropdownItem v-if=\"contextData && contextData.isDir\" v-db-click @click.native=\"handleContextCreateFolder()\"\r\n >新建文件夹</DropdownItem\r\n >\r\n <DropdownItem v-if=\"contextData && contextData.isDir\" v-db-click @click.native=\"handleContextCreateFile()\"\r\n >新建文件</DropdownItem\r\n >\r\n <DropdownItem v-db-click @click.native=\"handleContextRename()\">重命名</DropdownItem>\r\n <DropdownItem v-db-click @click.native=\"handleContextDelFolder()\" style=\"color: #ed4014\">删除</DropdownItem>\r\n </template> -->\r\n </el-tree>\r\n </div>\r\n <div class=\"file-fix\"></div>\r\n <div class=\"file-content\">\r\n <el-tabs\r\n type=\"card\"\r\n v-model=\"indexEditor\"\r\n style=\"height: 100%\"\r\n @tab-click=\"toggleEditor\"\r\n :animated=\"false\"\r\n closable\r\n @tab-remove=\"handleTabRemove\"\r\n >\r\n <el-tab-pane\r\n v-for=\"value in editorIndex\"\r\n :key=\"value.index\"\r\n :name=\"value.index.toString()\"\r\n :label=\"value.title\"\r\n :icon=\"value.icon\"\r\n v-if=\"value.tab\"\r\n >\r\n <div\r\n ref=\"container\"\r\n :id=\"'container_' + value.index\"\r\n style=\"height: 100%; min-height: calc(80vh - 100px)\"\r\n ></div>\r\n </el-tab-pane>\r\n </el-tabs>\r\n </div>\r\n </div>\r\n </div>\r\n </el-dialog>\r\n\r\n <div v-show=\"formShow\" class=\"diy-from\">\r\n <div class=\"diy-from-header\">\r\n {{ formTitle\r\n }}<span :title=\"contextData ? contextData.pathname : ''\">{{ contextData ? contextData.pathname : '' }}</span>\r\n </div>\r\n <el-form ref=\"formInline\" :model=\"formFile\" :rules=\"ruleInline\" inline>\r\n <el-form-item prop=\"filename\" class=\"diy-file\">\r\n <el-input type=\"text\" class=\"diy-file\" v-model=\"formFile.filename\" placeholder=\"请输入名字\">\r\n <i class=\"el-icon-folder-opened\" slot=\"prepend\"></i>\r\n </el-input>\r\n </el-form-item>\r\n <el-form-item>\r\n <el-button class=\"diy-button\" v-db-click @click=\"handleSubmit('formInline')\">确定</el-button>\r\n </el-form-item>\r\n <el-form-item>\r\n <el-button class=\"diy-button\" v-db-click @click=\"formExit()\">取消</el-button>\r\n </el-form-item>\r\n <div class=\"form-mask\" v-show=\"formShow\"></div>\r\n </el-form>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport { resolveComponent } from 'vue';\r\nimport {\r\n opendirListApi,\r\n openfileApi,\r\n savefileApi,\r\n opendirLoginApi,\r\n createFolder,\r\n createFile,\r\n delFolder,\r\n rename,\r\n fileMark,\r\n markSave,\r\n} from '@/api/system';\r\nimport CodeMirror from 'codemirror/lib/codemirror';\r\nimport loginFrom from './components/loginFrom';\r\nimport { setCookies, getCookies, removeCookies } from '@/libs/util';\r\n// import Fullscreen from '@/layout/components/fullscreen';\r\nimport * as monaco from 'monaco-editor';\r\nexport default {\r\n name: 'opendir',\r\n data() {\r\n return {\r\n modals: false, //编辑器开关\r\n editor: '', //当前编辑器对象\r\n editorIndex: [\r\n //选项卡数组\r\n {\r\n tab: true,\r\n index: '0',\r\n title: '',\r\n icon: '',\r\n },\r\n ],\r\n editorList: [], //编辑器数组\r\n indexEditor: 0, //当前编辑器索引\r\n code: '', //当前文件打开时的内容\r\n navList: [], //左侧导航数据\r\n navItem: {}, //左侧导航点击是选中的数据\r\n contextData: null, //左侧导航右键点击是产生的数据对象\r\n\r\n fileType: '', // 文件操作类型 createFolder|创建文件夹 createFile|创建文件 delFolder|删除文件夹或者文件\r\n className: '', //全屏 class名\r\n // fullscreen:false, // 是否全屏\r\n isSave: true, //当前文件是否保存\r\n\r\n isShowLogn: false, // 登录\r\n isShowList: false, // 登录之后列表\r\n\r\n spinShow: false,\r\n loading: false,\r\n tabList: [],\r\n\r\n formItem: {\r\n //记录当前路径信息,获取文件列表时使用\r\n dir: '',\r\n superior: 0,\r\n filedir: '',\r\n fileToken: getCookies('file_token'),\r\n },\r\n dir: '', //当前完整文件路径\r\n // rows: {}, //\r\n pathname: '', // 当前文件路径\r\n title: '', //当前文件标题\r\n\r\n formFile: {\r\n //重命名表单\r\n filename: '',\r\n },\r\n ruleInline: {\r\n filename: [{ required: true, message: '请输入文件或文件夹的名字', trigger: 'blur' }],\r\n },\r\n formShow: false, //表单开关\r\n formTitle: '', //表单标题\r\n fileToken: getCookies('file_token'),\r\n routeList: [], // 打开文件路径\r\n props: {\r\n label: 'title',\r\n children: 'children',\r\n isLeaf: 'isLeaf',\r\n },\r\n };\r\n },\r\n\r\n components: {\r\n loginFrom,\r\n },\r\n mounted() {\r\n // this.initEditor();\r\n },\r\n created() {\r\n this.getList();\r\n },\r\n beforeDestroy() {\r\n removeCookies('file_token');\r\n },\r\n computed: {},\r\n methods: {\r\n // 点击行\r\n currentChange(currentRow) {\r\n if (currentRow.isDir) {\r\n this.open(currentRow);\r\n } else {\r\n this.edit(currentRow);\r\n }\r\n },\r\n /**\r\n * 文件列表\r\n * @param {Object} refresh // 是否重新加载 bool\r\n * @param {Object} is_edit // 是否是编辑器中的刷新 bool\r\n */\r\n getList(refresh, is_edit) {\r\n let params;\r\n if (refresh) {\r\n params = {\r\n dir: '',\r\n superior: 0,\r\n filedir: '',\r\n fileToken: this.fileToken,\r\n };\r\n } else {\r\n params = this.formItem;\r\n params.fileToken = this.fileToken;\r\n }\r\n if (!is_edit) this.loading = true;\r\n opendirListApi(params)\r\n .then(async (res) => {\r\n let data = res.data;\r\n this.routeList = data.routeList;\r\n\r\n if (is_edit) {\r\n this.navList = data.navList;\r\n } else {\r\n this.navListForTab = data.navList;\r\n this.tabList = data.list;\r\n // this.navList = data.navList;\r\n this.isShowList = true;\r\n }\r\n this.dir = data.dir;\r\n this.isShowLogn = false;\r\n this.loading = false;\r\n })\r\n .catch((res) => {\r\n this.catchFun(res);\r\n });\r\n },\r\n //新建文件后重新加载左侧导航\r\n getListItem(data) {\r\n opendirListApi(data)\r\n .then(async (res) => {\r\n this.$set(this.contextData, 'children', res.data.navList);\r\n })\r\n .catch((res) => {\r\n this.catchFun(res);\r\n });\r\n },\r\n\r\n // 返回上级\r\n goBack(is_edit) {\r\n this.formItem = {\r\n dir: this.dir,\r\n superior: 1,\r\n filedir: '',\r\n };\r\n this.getList(false, is_edit);\r\n },\r\n // 打开\r\n open(row) {\r\n // this.rows = row;\r\n this.formItem = {\r\n dir: row.path,\r\n superior: 0,\r\n filedir: row.filename,\r\n fileToken: this.fileToken,\r\n };\r\n this.getList(false, false);\r\n },\r\n jumpRoute(item) {\r\n let data = {\r\n path: item.route,\r\n filename: '',\r\n };\r\n this.open(data);\r\n },\r\n refreshRoute() {\r\n let data = {\r\n path: this.routeList[this.routeList.length - 1].route,\r\n filename: '',\r\n };\r\n this.open(data);\r\n },\r\n // 编辑ß\r\n edit(row) {\r\n this.navItem = row;\r\n this.spinShow = true;\r\n this.pathname = row.pathname;\r\n this.title = row.filename;\r\n this.editorIndex[0].title = row.filename;\r\n this.editorIndex[0].pathname = row.pathname;\r\n this.navList = this.navListForTab;\r\n this.dir = row.path;\r\n // 创建代码容器\r\n if (this.editorList.length <= 0) {\r\n // this.initEditor();\r\n }\r\n this.openfile(row.pathname, false);\r\n },\r\n /**\r\n * 备注\r\n */\r\n mark(row) {\r\n this.$modalForm(\r\n fileMark({\r\n path: row.pathname,\r\n fileToken: this.fileToken,\r\n }),\r\n ).then(() => this.getList(true, false));\r\n },\r\n /**\r\n * 保存\r\n * @param {Object} index // 当前索引\r\n * @param {Object} type // true 不更新当前本地数据,false或者为空 更新当前数据\r\n */\r\n savefile(index, type) {\r\n let code = this.editorList[index].editor.getValue();\r\n let data = {\r\n comment: code,\r\n filepath: this.editorList[index].path,\r\n fileToken: this.fileToken,\r\n };\r\n let that = this;\r\n savefileApi(data)\r\n .then(async (res) => {\r\n if (!type) {\r\n that.code = code;\r\n that.isSave = true;\r\n that.editorIndex[index].icon = '';\r\n that.editorList[index].isSave = true;\r\n }\r\n that.$message.success(res.msg);\r\n that.$Modal.remove();\r\n })\r\n .catch((res) => {\r\n that.catchFun(res);\r\n });\r\n },\r\n // 刷新\r\n refreshfile() {\r\n // 刷新编辑器\r\n if (this.editorList[this.indexEditor]) this.openfile(this.editorList[this.indexEditor].path, true);\r\n },\r\n //计算token过期时间\r\n getExpiresTime(expiresTime) {\r\n let nowTimeNum = Math.round(new Date() / 1000);\r\n let expiresTimeNum = expiresTime - nowTimeNum;\r\n return parseFloat(parseFloat(parseFloat(expiresTimeNum / 60) / 60) / 24);\r\n },\r\n // 侧边栏异步加载\r\n loadData(item, callback) {\r\n if (!item.data.isLeaf) {\r\n this.formItem = {\r\n dir: item.data.path,\r\n superior: 0,\r\n filedir: item.data.title,\r\n fileToken: this.fileToken,\r\n };\r\n opendirListApi(this.formItem)\r\n .then(async (res) => {\r\n callback(res.data.navList);\r\n })\r\n .catch((res) => {\r\n if (res.status == 110008) {\r\n this.$message.error(res.msg);\r\n this.isShowLogn = true;\r\n this.isShowList = false;\r\n this.loading = false;\r\n } else {\r\n this.catchFun(res);\r\n }\r\n });\r\n }\r\n },\r\n // 自定义显示\r\n renderContent(h, { node, data, root }) {\r\n let that = this;\r\n return h(\r\n 'span',\r\n {\r\n style: {\r\n display: 'inline-block',\r\n cursor: 'pointer',\r\n userSelect: 'null',\r\n color: '#cccccc',\r\n display: 'inline-block',\r\n width: '100%',\r\n borderRadis: '5px',\r\n },\r\n on: {\r\n click: () => {\r\n that.clickDir(data, root, node);\r\n },\r\n contextmenu: () => {\r\n // that.handleContextDelFolder(data,root,node);\r\n },\r\n },\r\n },\r\n [\r\n h('span', [\r\n h('Icon', {\r\n props: {\r\n type: !data.isLeaf ? 'md-folder' : 'ios-document-outline',\r\n },\r\n style: {\r\n marginRight: '8px',\r\n },\r\n }),\r\n h(\r\n 'span',\r\n {\r\n attrs: {\r\n title: data.title,\r\n },\r\n },\r\n data.title,\r\n ),\r\n ]),\r\n ],\r\n );\r\n },\r\n /**\r\n * 侧边栏点击事件\r\n * @param {Object} data\r\n */\r\n clickDir(data, root, node) {\r\n let that = this;\r\n that.navItem = data;\r\n that.pathname = data.pathname;\r\n\r\n if (!data.isDir) {\r\n let i = that.editorIndex.findIndex((e) => {\r\n return e.pathname === data.pathname;\r\n });\r\n if (i > -1) {\r\n that.indexEditor = i.toString();\r\n that.toggleEditor();\r\n } else {\r\n let index = that.editorIndex.length;\r\n // 创建tabs\r\n that.editorIndex.push({\r\n tab: true,\r\n index: index.toString(),\r\n title: data.title,\r\n icon: '',\r\n pathname: data.pathname,\r\n });\r\n that.indexEditor = index.toString();\r\n // 创建代码容器\r\n that.initEditor();\r\n that.openfile(data.pathname, true);\r\n }\r\n }\r\n },\r\n //侧边栏右键点击事件\r\n handleContextMenu(data, event, position) {\r\n position.left = Number(position.left.slice(0, -2)) + 75 + 'px';\r\n this.contextData = data;\r\n },\r\n // 文件操作类型 createFolder|创建文件夹 createFile|创建文件 delFolder|删除文件夹或者文件 renameFile|文件重命名\r\n //创建文件夹\r\n handleContextCreateFolder() {\r\n this.formFile.filename = '';\r\n this.formTitle = '创建文件夹';\r\n this.formShow = true;\r\n this.fileType = 'createFolder';\r\n },\r\n //创建文件\r\n handleContextCreateFile() {\r\n this.formFile.filename = '';\r\n this.formTitle = '创建文件';\r\n this.formShow = true;\r\n this.fileType = 'createFile';\r\n },\r\n //删除文件\r\n handleContextDelFolder() {\r\n let that = this;\r\n that.$Modal.confirm({\r\n title: '删除文件夹和文件',\r\n content: '您确定要删除改文件?',\r\n loading: true,\r\n onOk: () => {\r\n let data = {\r\n path: that.contextData.pathname,\r\n fileToken: this.fileToken,\r\n };\r\n delFolder(data)\r\n .then(async (res) => {\r\n that.loopDel(that.navList, that.contextData.nodeKey);\r\n that.$Modal.remove();\r\n that.$message.success('删除成功');\r\n })\r\n .catch((res) => {\r\n that.catchFun(res);\r\n });\r\n },\r\n onCancel: () => {\r\n that.$message.info('取消删除');\r\n },\r\n });\r\n },\r\n //重命名\r\n handleContextRename() {\r\n this.formFile.filename = this.contextData.title;\r\n this.formTitle = '重命名文件';\r\n this.formShow = true;\r\n this.fileType = 'renameFile';\r\n },\r\n //打开文件\r\n openfile(path, is_edit) {\r\n let that = this;\r\n let params = {\r\n filepath: path,\r\n fileToken: this.fileToken,\r\n };\r\n\r\n openfileApi(params)\r\n .then(async (res) => {\r\n if (!is_edit) {\r\n that.modals = true;\r\n that.spinShow = false;\r\n this.initEditor();\r\n }\r\n let data = res.data;\r\n that.code = data.content;\r\n // 保存相对信息\r\n\r\n that.editorList[that.indexEditor].oldCode = that.code;\r\n this.$nextTick((e) => {\r\n that.editorList[that.indexEditor || 0].path = path;\r\n that.editorList[that.indexEditor || 0].pathname = path;\r\n });\r\n //改变属性\r\n that.changeModel(data.mode, that.code);\r\n })\r\n .catch((res) => {\r\n that.catchFun(res);\r\n });\r\n },\r\n /**\r\n * 初始化编辑器\r\n */\r\n initEditor() {\r\n let that = this;\r\n that.$nextTick(() => {\r\n // 初始化编辑器,确保dom已经渲染\r\n that.editor = monaco.editor.create(document.getElementById('container_' + that.indexEditor), {\r\n value: that.code, //编辑器初始显示文字\r\n language: 'sql', //语言支持自行查阅demo\r\n automaticLayout: true, //自动布局\r\n theme: 'vs', //官方自带三种主题vs, hc-black, or vs-dark\r\n foldingStrategy: 'indentation', // 代码可分小段折叠\r\n overviewRulerBorder: false, // 不要滚动条的边框\r\n scrollbar: {\r\n // 滚动条设置\r\n verticalScrollbarSize: 4, // 竖滚动条\r\n horizontalScrollbarSize: 10, // 横滚动条\r\n },\r\n autoIndent: true, // 自动布局\r\n tabSize: 4, // tab缩进长度\r\n autoClosingOvertype: 'always',\r\n });\r\n //添加按键监听\r\n that.editor.addCommand(monaco.KeyMod.CtrlCmd | monaco.KeyCode.KEY_S, function () {\r\n that.savefile(that.indexEditor);\r\n });\r\n that.editor.onKeyUp(() => {\r\n // 当键盘按下,判断当前编辑器文本与已保存的编辑器文本是否一致\r\n if (that.editor.getValue() != that.code) {\r\n that.isSave = false;\r\n that.editorIndex[that.indexEditor].icon = 'md-warning';\r\n that.editorList[that.indexEditor].isSave = false;\r\n }\r\n });\r\n that.editorList.push({\r\n editor: that.editor,\r\n oldCode: that.code,\r\n path: this.pathname,\r\n isSave: true,\r\n index: that.indexEditor,\r\n });\r\n });\r\n },\r\n /**\r\n * 切换语言\r\n * @param {Object} mode\r\n */\r\n changeModel(mode, value) {\r\n var oldModel = this.editorList[this.indexEditor].editor.getModel(); //获取旧模型\r\n // var value = this.editor.getValue();//获取旧的文本\r\n //创建新模型,value为旧文本,id为modeId,即语言(language.id)\r\n //modesIds即为支持语言\r\n // var modesIds = monaco.languages.getLanguages().map(function(lang) { return lang.id; });\r\n if (!mode) mode = oldModel.getLanguageId();\r\n // if(!value) value = this.editor.getValue();\r\n\r\n var newModel = monaco.editor.createModel(value, mode);\r\n //将旧模型销毁\r\n if (oldModel) {\r\n oldModel.dispose();\r\n }\r\n //设置新模型\r\n this.editorList[this.indexEditor].editor.setModel(newModel);\r\n },\r\n // 文件操作类型 createFolder|创建文件夹 createFile|创建文件 delFolder|删除文件夹或者文件\r\n handleSubmit(name) {\r\n let that = this;\r\n let data = '';\r\n let dataItem = '';\r\n this.$refs[name].validate((valid) => {\r\n if (valid) {\r\n switch (that.fileType) {\r\n case 'createFolder':\r\n data = {\r\n path: that.contextData.pathname,\r\n name: that.formFile.filename,\r\n fileToken: this.fileToken,\r\n };\r\n createFolder(data)\r\n .then(async (res) => {\r\n dataItem = {\r\n dir: that.contextData.path,\r\n superior: 0,\r\n filedir: that.contextData.title,\r\n fileToken: this.fileToken,\r\n };\r\n that.getListItem(dataItem);\r\n if (that.formShow) that.formShow = false;\r\n that.$message.success('创建成功');\r\n })\r\n .catch((res) => {\r\n that.catchFun(res);\r\n });\r\n break;\r\n case 'createFile':\r\n data = {\r\n path: that.contextData.pathname,\r\n name: that.formFile.filename,\r\n fileToken: this.fileToken,\r\n };\r\n createFile(data)\r\n .then(async (res) => {\r\n dataItem = {\r\n dir: that.contextData.path,\r\n superior: 0,\r\n filedir: that.contextData.title,\r\n fileToken: this.fileToken,\r\n };\r\n that.getListItem(dataItem);\r\n if (that.formShow) that.formShow = false;\r\n that.$message.success('创建成功');\r\n })\r\n .catch((res) => {\r\n that.catchFun(res);\r\n });\r\n break;\r\n case 'renameFile':\r\n data = {\r\n newname: that.contextData.path + '\\\\' + that.formFile.filename,\r\n oldname: that.contextData.pathname,\r\n fileToken: this.fileToken,\r\n };\r\n rename(data)\r\n .then(async (res) => {\r\n that.$set(that.contextData, 'title', that.formFile.filename);\r\n that.$message.success('修改成功');\r\n if (that.formShow) that.formShow = false;\r\n })\r\n .catch((res) => {\r\n that.catchFun(res);\r\n });\r\n break;\r\n }\r\n } else {\r\n this.$message.error('Fail!');\r\n }\r\n });\r\n },\r\n /**\r\n * 退出表单\r\n */\r\n formExit() {\r\n this.formShow = false;\r\n },\r\n\r\n /**\r\n * 处理接口回调\r\n * @param {Object} res\r\n */\r\n catchFun(res) {\r\n if (res.status) {\r\n if (res.status == 400) this.$message.error(res.msg);\r\n if (res.status == 110008) {\r\n // this.$message.error(res.msg);\r\n this.isShowLogn = true;\r\n this.isShowList = false;\r\n this.loading = false;\r\n }\r\n } else {\r\n // this.$message.error('文件编码不被兼容,无法正确读取文件!');\r\n }\r\n //关闭蒙版层\r\n if (this.spinShow) this.spinShow = false;\r\n // 关闭文件列表展示\r\n if (this.loading) this.loading = false;\r\n },\r\n loopDel(data, nodeKey) {\r\n data.forEach((item, index) => {\r\n if (item.nodeKey === nodeKey) {\r\n return data.splice(index, 1);\r\n }\r\n if (item.children.length > 0) {\r\n return this.loopDel(item.children, nodeKey);\r\n }\r\n });\r\n },\r\n /**\r\n * 窗口最大化\r\n */\r\n winChanges() {\r\n if (this.className) {\r\n this.className = '';\r\n } else {\r\n this.className = 'diy-fullscreen';\r\n }\r\n },\r\n /**\r\n * 切换选项卡\r\n * @param {Object} index\r\n */\r\n toggleEditor() {\r\n let index = Number(this.indexEditor);\r\n this.code = this.editorList[index].oldCode; //设置文件打开时的代码\r\n this.editor = this.editorList[index].editor; //设置编辑器实例\r\n },\r\n isEditMark(row) {\r\n try {\r\n row.is_edit = true;\r\n this.$nextTick((e) => {\r\n this.$refs.mark.focus();\r\n });\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n },\r\n isEditBlur(row) {\r\n row.is_edit = false;\r\n let data = {\r\n full_path: row.real_path,\r\n mark: row.mark,\r\n };\r\n markSave(this.fileToken, data)\r\n .then((res) => {\r\n // this.$message.success(res.msg);\r\n })\r\n .catch((err) => {\r\n this.$message.error(err.msg);\r\n });\r\n },\r\n handleTabRemove(index) {\r\n let that = this;\r\n\r\n // 关闭选项卡\r\n that.editorIndex[index].tab = false; // 关闭选项卡\r\n // 判断当前文件有没有保存\r\n if (!that.editorList[index].isSave) {\r\n that.$Modal.confirm({\r\n title: '文件未保存',\r\n content: '您是否需要保存当前文件',\r\n loading: true,\r\n onOk: () => {\r\n // 保存文件\r\n that.savefile(index);\r\n },\r\n onCancel: () => {\r\n that.$message.info('取消保存');\r\n },\r\n });\r\n }\r\n },\r\n //编辑器状态变化\r\n editModalChange() {\r\n let that = this;\r\n that.editorList.forEach(function (value, index) {\r\n if (value.isSave === false) {\r\n if (confirm(`${that.editorIndex[index].title}文件未保存,是否要保存该文件`)) {\r\n // 保存当前文件\r\n that.savefile(index, true);\r\n } else {\r\n that.$message.info(`已取消${that.editorIndex[index].title}文件保存`);\r\n }\r\n }\r\n // 销毁当前编辑器\r\n that.editorList[index].editor.dispose();\r\n that.editorList[index].editor = null;\r\n });\r\n // 初始话数据\r\n that.modals = false; //编辑器开关\r\n that.editor = ''; //当前编辑器对象\r\n that.editorIndex = [\r\n //选项卡数组\r\n {\r\n tab: true,\r\n index: '0',\r\n title: '',\r\n icon: '',\r\n },\r\n ];\r\n that.editorList = []; //编辑器数组\r\n that.indexEditor = '0'; //当前编辑器索引\r\n that.code = ''; //当前文件打开时的内容\r\n that.navList = []; //左侧导航数据\r\n that.navItem = {}; //左侧导航点击是选中的数据\r\n that.contextData = null; //左侧导航右键点击是产生的数据对象\r\n },\r\n },\r\n};\r\n</script>\r\n<style scoped>\r\n.file-left ::v-deep .ivu-tree-title {\r\n font-weight: 500;\r\n font-family: SourceHanSansSC-regular, '微软雅黑', Arial, Helvetica, sans-serif;\r\n}\r\n.file-content ::v-deep .ivu-tabs.ivu-tabs-card > .ivu-tabs-bar .ivu-tabs-tab-active {\r\n border-bottom: 1px solid orange;\r\n}\r\n</style>\r\n<style lang=\"scss\" scoped>\r\n.file-left {\r\n padding-left: 10px;\r\n color: #cccccc;\r\n}\r\n.mr5 {\r\n margin-right: 5px;\r\n}\r\n.backs-box {\r\n display: flex;\r\n justify-content: space-between;\r\n min-width: 800px;\r\n max-width: max-content;\r\n border: 1px solid #cfcfcf;\r\n background: #f6f6f6;\r\n .refresh {\r\n background: #fff;\r\n border-left: 1px solid #cfcfcf;\r\n padding: 0 8px 0 10px;\r\n font-size: 16px;\r\n font-weight: bold;\r\n }\r\n .refresh {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n cursor: pointer;\r\n }\r\n .refresh:hover,\r\n .back:hover {\r\n background: #2d8cf0;\r\n border-color: #38983b;\r\n color: #fff;\r\n }\r\n}\r\n.file-name {\r\n cursor: pointer;\r\n}\r\n.backs {\r\n cursor: pointer;\r\n display: inline-block;\r\n display: flex;\r\n align-items: center;\r\n width: 100%;\r\n .back {\r\n height: 100%;\r\n background: #fff;\r\n border-right: 1px solid #cfcfcf;\r\n padding: 6px 8px 0 10px;\r\n font-size: 16px;\r\n font-weight: bold;\r\n }\r\n .item:last-child {\r\n padding-right: 5px !important;\r\n }\r\n .item {\r\n padding: 0 0 0 8px;\r\n font-size: 12px;\r\n line-height: 33px;\r\n color: #555;\r\n display: flex;\r\n align-items: center;\r\n .key {\r\n margin-right: 3px;\r\n }\r\n }\r\n .item:hover {\r\n background: #fff;\r\n }\r\n}\r\n::v-deep .CodeMirror {\r\n height: 70vh !important;\r\n}\r\n.file-box {\r\n display: flex;\r\n align-items: flex-start;\r\n justify-content: space-between;\r\n position: relative;\r\n min-height: calc(100% - 35px);\r\n overflow: hidden;\r\n}\r\n.file-box {\r\n .file-left {\r\n position: absolute;\r\n top: 58px;\r\n left: 0;\r\n height: calc(100% - 58px);\r\n\r\n width: 25%;\r\n max-width: 250px;\r\n overflow: auto;\r\n background-color: #292929;\r\n }\r\n .file-fix {\r\n flex: 1;\r\n max-width: 250px;\r\n min-height: calc(100% - 35px);\r\n\r\n min-height: calc(100% - 35px);\r\n background-color: #292929;\r\n }\r\n}\r\n.file-box {\r\n .file-content {\r\n flex: 3;\r\n overflow: hidden;\r\n min-height: calc(100% - 35px);\r\n height: 100%;\r\n }\r\n}\r\n::v-deep .el-dialog__body {\r\n padding: 0 !important;\r\n height: 80vh;\r\n max-height: 80vh;\r\n}\r\n.diy-button {\r\n height: 35px;\r\n padding: 0 15px;\r\n font-size: 13px;\r\n text-align: center;\r\n color: #fff;\r\n border: 0;\r\n border-right: 1px solid #4c4c4c;\r\n cursor: pointer;\r\n border-radius: 0;\r\n background-color: #565656;\r\n}\r\n.form-mask {\r\n z-index: -1;\r\n width: 100%;\r\n height: 100%;\r\n position: fixed;\r\n top: 0;\r\n left: 0;\r\n right: 0;\r\n bottom: 0;\r\n margin: auto;\r\n background: rgba(0, 0, 0, 0.3);\r\n}\r\n.table-mark {\r\n cursor: text;\r\n}\r\n.table-mark:hover {\r\n border: 1px solid #c2c2c2;\r\n padding: 3px 5px;\r\n}\r\n.mark ::v-deep .el-input__inner {\r\n background: #fff;\r\n border-radius: 0.39rem;\r\n}\r\n.mark ::v-deep .el-input__inner,\r\n.el-input__inner:hover,\r\n.el-input__inner:focus {\r\n border: transparent;\r\n box-shadow: none;\r\n}\r\n.diy-from-header {\r\n height: 30px;\r\n line-height: 30px;\r\n background-color: #fff;\r\n text-align: left;\r\n padding-left: 20px;\r\n font-size: 16px;\r\n margin-bottom: 15px;\r\n\r\n span {\r\n display: inline-block;\r\n float: right;\r\n color: #999;\r\n text-align: right;\r\n font-size: 12px;\r\n width: 280px;\r\n word-break: keep-all; /* 不换行 */\r\n white-space: nowrap; /* 不换行 */\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n }\r\n}\r\n.diy-from {\r\n z-index: 9999;\r\n width: 400px;\r\n height: 100px;\r\n position: fixed;\r\n top: 0;\r\n left: 0;\r\n right: 0;\r\n bottom: 0;\r\n margin: auto;\r\n text-align: center;\r\n background-color: #2f2f2f;\r\n}\r\n.top-button {\r\n background-color: #292929;\r\n}\r\n.show-info {\r\n background-color: #292929;\r\n color: #fff;\r\n width: 25%;\r\n max-width: 250px;\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n z-index: 1122;\r\n .diy-button {\r\n width: 50%;\r\n height: 25px;\r\n line-height: 8px;\r\n }\r\n .diy-button-list {\r\n display: flex;\r\n align-items: center;\r\n }\r\n .show-text {\r\n padding-left: 10px;\r\n word-break: keep-all; /* 不换行 */\r\n white-space: nowrap; /* 不换行 */\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n padding: 7px 5px;\r\n }\r\n}\r\n\r\nbody ::v-deep .ivu-select-dropdown {\r\n background: #fff;\r\n}\r\n::v-deep .el-tabs__item {\r\n background-color: #fff;\r\n}\r\n::v-deep .el-tree {\r\n background-color: #292929 !important;\r\n}\r\n.file-box {\r\n .file-left::-webkit-scrollbar {\r\n width: 4px;\r\n }\r\n}\r\n.file-box {\r\n .file-left::-webkit-scrollbar-thumb {\r\n border-radius: 10px;\r\n -webkit-box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2);\r\n background: rgba(255, 255, 255, 0.2);\r\n }\r\n}\r\n.file-box {\r\n .file-left::-webkit-scrollbar-track {\r\n -webkit-box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2);\r\n border-radius: 0;\r\n background: rgba(0, 0, 0, 0.1);\r\n }\r\n}\r\n.diy-header {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n .diy-header-icon {\r\n margin-right: 30px;\r\n cursor: pointer;\r\n }\r\n .diy-header-icon:hover {\r\n opacity: 0.8;\r\n }\r\n}\r\n::v-deep .diy-fullscreen {\r\n overflow: hidden;\r\n .ivu-modal {\r\n top: 0px;\r\n left: 0px;\r\n right: 0px;\r\n bottom: 0px;\r\n height: 100%;\r\n width: 100% !important;\r\n .ivu-modal-content {\r\n height: 100%;\r\n .ivu-modal-body {\r\n height: 100%;\r\n }\r\n }\r\n .ivu-tabs {\r\n .ivu-tabs-content-animated {\r\n height: 92%;\r\n background-color: #2f2f2f !important;\r\n }\r\n }\r\n .ivu-tabs-content {\r\n height: 100%;\r\n }\r\n .ivu-tabs {\r\n .ivu-tabs-tabpane {\r\n height: 92%;\r\n }\r\n }\r\n }\r\n}\r\n::v-deep .ivu-modal {\r\n top: 70px;\r\n}\r\n.ivu-modal-content {\r\n .ivu-modal-body {\r\n min-height: 632px;\r\n height: 80vh;\r\n overflow: hidden;\r\n }\r\n}\r\n.ivu-tabs {\r\n .ivu-tabs-content-animated {\r\n min-height: 580px;\r\n height: 73vh;\r\n margin-top: -1px;\r\n }\r\n .ivu-tabs-tabpane {\r\n min-height: 580px;\r\n height: 73vh;\r\n margin-top: -1px;\r\n }\r\n}\r\n.ivu-tabs-nav .ivu-tabs-tab .ivu-icon {\r\n color: #f00;\r\n}\r\n::v-deepbody .ivu-select-dropdown .ivu-dropdown-transfer {\r\n background: red !important;\r\n}\r\n.file-left ::v-deep .ivu-select-dropdown.ivu-dropdown-transfer .ivu-dropdown-menu .ivu-dropdown-item:hover {\r\n background-color: #e5e5e5 !important;\r\n}\r\n::v-deep .ivu-tabs.ivu-tabs-card > .ivu-tabs-bar .ivu-tabs-nav-container {\r\n background-color: #333;\r\n}\r\n</style>\r\n"]}]}
|