1 |
- {"remainingRequest":"D:\\test\\ssi-satoken\\ui\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!D:\\test\\ssi-satoken\\ui\\src\\views\\sysManager\\roleManager\\index.vue?vue&type=script&lang=js&","dependencies":[{"path":"D:\\test\\ssi-satoken\\ui\\src\\views\\sysManager\\roleManager\\index.vue","mtime":1696909835000},{"path":"D:\\test\\ssi-satoken\\ui\\node_modules\\cache-loader\\dist\\cjs.js","mtime":1697005520931},{"path":"D:\\test\\ssi-satoken\\ui\\node_modules\\babel-loader\\lib\\index.js","mtime":1697005523218},{"path":"D:\\test\\ssi-satoken\\ui\\node_modules\\cache-loader\\dist\\cjs.js","mtime":1697005520931},{"path":"D:\\test\\ssi-satoken\\ui\\node_modules\\vue-loader\\lib\\index.js","mtime":1697005524089}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:Ly8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KDQoNCmltcG9ydCB7ZGVib3VuY2V9IGZyb20gImxvZGFzaCI7DQoNCmV4cG9ydCBkZWZhdWx0IHsNCiAgbmFtZTogIlJvbGUiLA0KICBkaWN0czogWydzeXNfbm9ybWFsX2Rpc2FibGUnXSwNCiAgZGF0YSgpIHsNCiAgICByZXR1cm4gew0KICAgICAgdHlwZU9wdGlvbnM6IFsNCiAgICAgICAge3ZhbHVlOiAnMCcsIGxhYmVsOiAn566h55CG5ZGYJ30sDQogICAgICAgIHt2YWx1ZTogJzEnLCBsYWJlbDogJ+S4muWKoeWRmCd9DQogICAgICBdLA0KICAgICAgc3RhdHVzT3B0aW9uczogWw0KICAgICAgICB7dmFsdWU6ICcwJywgbGFiZWw6ICfmraPluLgnfSwNCiAgICAgICAge3ZhbHVlOiAnMScsIGxhYmVsOiAn5YGc55SoJ30NCiAgICAgIF0sDQogICAgICAvLyDns7vnu5/nrqHnkIblkZhlZGl0DQogICAgICB4dGdseWVkaXQ6IGZhbHNlLA0KICAgICAgZWRpdDogZmFsc2UsDQogICAgICBzaG93VGFibGU6IGZhbHNlLA0KICAgICAgLy8g6YGu572p5bGCDQogICAgICBsb2FkaW5nOiB0cnVlLA0KICAgICAgLy8g6YCJ5Lit5pWw57uEDQogICAgICBpZHM6IFtdLA0KICAgICAgLy8g6Z2e5Y2V5Liq56aB55SoDQogICAgICBzaW5nbGU6IHRydWUsDQogICAgICAvLyDpnZ7lpJrkuKrnpoHnlKgNCiAgICAgIG11bHRpcGxlOiB0cnVlLA0KICAgICAgLy8g5pi+56S65pCc57Si5p2h5Lu2DQogICAgICBzaG93U2VhcmNoOiBmYWxzZSwNCiAgICAgIGN1cnJlbnRQYWdlOiAxLA0KICAgICAgcGFnZVNpemU6IDEwLA0KICAgICAgLy8g5oC75p2h5pWwDQogICAgICB0b3RhbDogMCwNCiAgICAgIC8vIOinkuiJsuihqOagvOaVsOaNrg0KICAgICAgcm9sZUxpc3Q6IFtdLA0KICAgICAgLy8g5by55Ye65bGC5qCH6aKYDQogICAgICB0aXRsZTogIiIsDQogICAgICAvLyDmmK/lkKbmmL7npLrlvLnlh7rlsYINCiAgICAgIG9wZW46IGZhbHNlLA0KICAgICAgLy8g5piv5ZCm5pi+56S65by55Ye65bGC77yI5pWw5o2u5p2D6ZmQ77yJDQogICAgICBvcGVuRGF0YVNjb3BlOiBmYWxzZSwNCiAgICAgIG1lbnVFeHBhbmQ6IGZhbHNlLA0KICAgICAgbWVudU5vZGVBbGw6IGZhbHNlLA0KICAgICAgZGVwdEV4cGFuZDogdHJ1ZSwNCiAgICAgIGRlcHROb2RlQWxsOiBmYWxzZSwNCiAgICAgIHBjT3B0aW9uczogWw0KICAgICAgICB7dmFsdWU6ICdYVEdMJywgbGFiZWw6ICdYVEdMJ30sDQogICAgICAgIHt2YWx1ZTogJ1NKR0wnLCBsYWJlbDogJ1NKR0wnfSwNCiAgICAgICAge3ZhbHVlOiAnU0hHTCcsIGxhYmVsOiAnU0hHTCd9LA0KICAgICAgICB7dmFsdWU6ICdZV0dMJywgbGFiZWw6ICdZV0dMJ30sDQogICAgICAgIHt2YWx1ZTogJ1NKWVcnLCBsYWJlbDogJ1NKWVcnfSwNCiAgICAgICAge3ZhbHVlOiAnWVdQWicsIGxhYmVsOiAnWVdQWid9LA0KICAgICAgICB7dmFsdWU6ICdZV0NaJywgbGFiZWw6ICdZV0NaJ30NCiAgICAgIF0sDQogICAgICAvLyDml6XmnJ/ojIPlm7QNCiAgICAgIGRhdGVSYW5nZTogW10sDQogICAgICAvLyDmlbDmja7ojIPlm7TpgInpobkNCiAgICAgIGRhdGFTY29wZU9wdGlvbnM6IFsNCiAgICAgICAgew0KICAgICAgICAgIHZhbHVlOiAiMSIsDQogICAgICAgICAgbGFiZWw6ICLlhajpg6jmlbDmja7mnYPpmZAiDQogICAgICAgIH0sDQogICAgICAgIHsNCiAgICAgICAgICB2YWx1ZTogIjIiLA0KICAgICAgICAgIGxhYmVsOiAi6Ieq5a6a5pWw5o2u5p2D6ZmQIg0KICAgICAgICB9LA0KICAgICAgICB7DQogICAgICAgICAgdmFsdWU6ICIzIiwNCiAgICAgICAgICBsYWJlbDogIuacrOmDqOmXqOaVsOaNruadg+mZkCINCiAgICAgICAgfSwNCiAgICAgICAgew0KICAgICAgICAgIHZhbHVlOiAiNCIsDQogICAgICAgICAgbGFiZWw6ICLmnKzpg6jpl6jlj4rku6XkuIvmlbDmja7mnYPpmZAiDQogICAgICAgIH0sDQogICAgICAgIHsNCiAgICAgICAgICB2YWx1ZTogIjUiLA0KICAgICAgICAgIGxhYmVsOiAi5LuF5pys5Lq65pWw5o2u5p2D6ZmQIg0KICAgICAgICB9DQogICAgICBdLA0KICAgICAgLy8g6I+c5Y2V5YiX6KGoDQogICAgICBtZW51T3B0aW9uczogW10sDQogICAgICAvLyDpg6jpl6jliJfooagNCiAgICAgIGRlcHRPcHRpb25zOiBbXSwNCiAgICAgIC8vIOafpeivouWPguaVsA0KICAgICAgcXVlcnlQYXJhbXM6IHsNCiAgICAgICAgcm9sZU5hbWU6IHVuZGVmaW5lZCwNCiAgICAgICAgcm9sZUtleTogdW5kZWZpbmVkLA0KICAgICAgICBzdGF0dXM6IHVuZGVmaW5lZA0KICAgICAgfSwNCiAgICAgIC8vIOihqOWNleWPguaVsA0KICAgICAgZm9ybToge30sDQogICAgICBkZWZhdWx0UHJvcHM6IHsNCiAgICAgICAgY2hpbGRyZW46ICJjaGlsZHJlbiIsDQogICAgICAgIGxhYmVsOiAibGFiZWwiDQogICAgICB9LA0KICAgICAgLy8g6KGo5Y2V5qCh6aqMDQogICAgICBydWxlczogew0KICAgICAgICByb2xlTmFtZTogWw0KICAgICAgICAgIHtyZXF1aXJlZDogdHJ1ZSwgbWVzc2FnZTogIuinkuiJsuWQjeensOS4jeiDveS4uuepuiIsIHRyaWdnZXI6ICJibHVyIn0NCiAgICAgICAgXSwNCiAgICAgICAgcm9sZUtleTogWw0KICAgICAgICAgIHtyZXF1aXJlZDogdHJ1ZSwgbWVzc2FnZTogIuadg+mZkOWtl+espuS4jeiDveS4uuepuiIsIHRyaWdnZXI6ICJibHVyIn0NCiAgICAgICAgXSwNCiAgICAgICAgcm9sZVNvcnQ6IFsNCiAgICAgICAgICB7cmVxdWlyZWQ6IHRydWUsIG1lc3NhZ2U6ICLop5LoibLpobrluo/kuI3og73kuLrnqboiLCB0cmlnZ2VyOiAiYmx1ciJ9DQogICAgICAgIF0NCiAgICAgIH0NCiAgICB9Ow0KICB9LA0KICBjcmVhdGVkKCkgew0KICAgIHRoaXMuZ2V0TGlzdCgpOw0KICB9LA0KICBtZXRob2RzOiB7DQogICAgY2hhbmdlcGModmFsdWUpIHsNCiAgICAgIHRoaXMuZ2V0TWVudVRyZWVzZWxlY3QodmFsdWUpOw0KICAgIH0sDQogICAgLy8g5YiX6KGo54q25oCB5qC85byP5YyWDQogICAgdHlwZUZvcm1hdCh7Y2VsbFZhbHVlfSkgew0KICAgICAgbGV0IGJlbG9uZ1RvID0gJ+acquefpeeahOexu+WeiycNCiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy50eXBlT3B0aW9ucy5sZW5ndGg7IGkrKykgew0KICAgICAgICBpZiAoY2VsbFZhbHVlID09ICIwIikgew0KICAgICAgICAgIGJlbG9uZ1RvID0gIueuoeeQhuWRmCINCiAgICAgICAgfSBlbHNlIGlmIChjZWxsVmFsdWUgPT0gIjEiKSB7DQogICAgICAgICAgYmVsb25nVG8gPSAi5Lia5Yqh5ZGYIg0KICAgICAgICB9DQogICAgICB9DQogICAgICByZXR1cm4gYmVsb25nVG8NCiAgICB9LA0KICAgIC8qKiDmn6Xor6Lop5LoibLliJfooaggKi8NCiAgICBhc3luYyBnZXRMaXN0KCkgew0KICAgICAgLy8g6I635Y+W5b2T5YmN55So5oi355qE6KeS6ImyDQogICAgICBsZXQgc3lzVGltZTINCiAgICAgIGxldCBsazINCiAgICAgIGF3YWl0IHRoaXMuJGF4aW9zLmdldCgnL3N5c1BvbGljeUNvbnRyb2xsZXIvZ2V0TGljZW5zZUtleScpLnRoZW4oKHJlcykgPT4gew0KICAgICAgICBzeXNUaW1lMiA9IHJlcy5kYXRhLnN5c1RpbWUNCiAgICAgICAgbGsyID0gcmVzLmRhdGEubGsNCiAgICAgIH0pLmNhdGNoKChlcnJvcikgPT4gew0KICAgICAgfSkNCiAgICAgIHZhciBzZWFyY2hQYXJhbXMyID0gew0KICAgICAgICBzeXNUaW1lOiBzeXNUaW1lMiwNCiAgICAgICAgbGs6IGxrMg0KICAgICAgfQ0KICAgICAgYXdhaXQgdGhpcy4kYXhpb3MuZ2V0KCcvc3lzUm9sZUNvbnRyb2xsZXIvZ2V0VXNlckJ5Um9sZScsIHtwYXJhbXM6IHNlYXJjaFBhcmFtczJ9KS50aGVuKChyZXMpID0+IHsNCiAgICAgICAgbGV0IHN5c1JvbGUgPSByZXMuZGF0YQ0KICAgICAgICBpZiAoc3lzUm9sZS5yb2xlS2V5ID09ICdYVEdMJykgew0KICAgICAgICAgIC8vIOS4jeaYr+ezu+e7n+euoeeQhuWRmO+8jOmakOiXj+afpeivouWSjOS/ruaUuQ0KICAgICAgICAgIHRoaXMuc2hvd1NlYXJjaCA9IHRydWUNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICB0aGlzLnh0Z2x5ZWRpdCA9IHRydWUNCiAgICAgICAgICB0aGlzLmVkaXQgPSB0cnVlDQogICAgICAgIH0NCiAgICAgIH0pLmNhdGNoKChlcnJvcikgPT4gew0KICAgICAgfSkNCg0KICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTsNCiAgICAgIGxldCBzeXNUaW1lDQogICAgICBsZXQgbGsNCiAgICAgIGF3YWl0IHRoaXMuJGF4aW9zLmdldCgnL3N5c1BvbGljeUNvbnRyb2xsZXIvZ2V0TGljZW5zZUtleScpLnRoZW4oKHJlcykgPT4gew0KICAgICAgICBzeXNUaW1lID0gcmVzLmRhdGEuc3lzVGltZQ0KICAgICAgICBsayA9IHJlcy5kYXRhLmxrDQogICAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHsNCiAgICAgIH0pDQogICAgICB2YXIgc2VhcmNoUGFyYW1zID0gew0KICAgICAgICBjdXJyZW50UGFnZTogdGhpcy5jdXJyZW50UGFnZSwNCiAgICAgICAgcGFnZVNpemU6IHRoaXMucGFnZVNpemUsDQogICAgICAgIHJvbGVOYW1lOiB0aGlzLnF1ZXJ5UGFyYW1zLnJvbGVOYW1lLA0KICAgICAgICByb2xlS2V5OiB0aGlzLnF1ZXJ5UGFyYW1zLnJvbGVLZXksDQogICAgICAgIHN0YXR1czogdGhpcy5xdWVyeVBhcmFtcy5zdGF0dXMsDQogICAgICAgIHN5c1RpbWU6IHN5c1RpbWUsDQogICAgICAgIGxrOiBsaw0KICAgICAgfQ0KICAgICAgYXdhaXQgdGhpcy4kYXhpb3MuZ2V0KCcvc3lzUm9sZUNvbnRyb2xsZXIvZ2V0QWxsJywNCiAgICAgICAge3BhcmFtczogc2VhcmNoUGFyYW1zfSkudGhlbigocmVzKSA9PiB7DQogICAgICAgIHRoaXMucm9sZUxpc3QgPSByZXMuZGF0YS5yZWNvcmRzDQogICAgICAgIHRoaXMudG90YWwgPSByZXMuZGF0YS50b3RhbA0KICAgICAgICBpZiAocmVzLmRhdGEucmVjb3JkcyA9PSAnJykgew0KICAgICAgICAgIHRoaXMuc2hvd1RhYmxlID0gZmFsc2UNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICB0aGlzLnNob3dUYWJsZSA9IHRydWUNCiAgICAgICAgfQ0KICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZQ0KICAgICAgfSkuY2F0Y2goKGVycm9yKSA9PiB7DQogICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlDQogICAgICAgIC8vIHRoaXMuJG1lc3NhZ2UuZXJyb3IoJ+iOt+WPluaVsOaNruWHuumUmScgKyBlcnJvcikNCiAgICAgIH0pDQogICAgfSwNCiAgICBoYW5kbGVQYWdlQ2hhbmdlKHtjdXJyZW50UGFnZSwgcGFnZVNpemV9KSB7DQogICAgICB0aGlzLmN1cnJlbnRQYWdlID0gY3VycmVudFBhZ2UNCiAgICAgIHRoaXMucGFnZVNpemUgPSBwYWdlU2l6ZQ0KICAgICAgdGhpcy5nZXRMaXN0KCkNCiAgICB9LA0KICAgIC8vIOWIl+ihqOeKtuaAgeagvOW8j+WMlg0KICAgIHN0YXR1c0Zvcm1hdCh7Y2VsbFZhbHVlfSkgew0KICAgICAgbGV0IGJlbG9uZ1RvID0gJ+acquefpeeahOexu+WeiycNCiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zdGF0dXNPcHRpb25zLmxlbmd0aDsgaSsrKSB7DQogICAgICAgIGlmIChjZWxsVmFsdWUgPT0gIjAiKSB7DQogICAgICAgICAgYmVsb25nVG8gPSAi5q2j5bi4Ig0KICAgICAgICB9IGVsc2UgaWYgKGNlbGxWYWx1ZSA9PSAiMSIpIHsNCiAgICAgICAgICBiZWxvbmdUbyA9ICLlgZznlKgiDQogICAgICAgIH0NCiAgICAgIH0NCiAgICAgIHJldHVybiBiZWxvbmdUbw0KICAgIH0sDQogICAgLyoqIOafpeivouiPnOWNleagkee7k+aehCAqLw0KICAgIGFzeW5jIGdldE1lbnVUcmVlc2VsZWN0KHBjKSB7DQogICAgICBsZXQgc3lzVGltZQ0KICAgICAgbGV0IGxrDQogICAgICBhd2FpdCB0aGlzLiRheGlvcy5nZXQoJy9zeXNQb2xpY3lDb250cm9sbGVyL2dldExpY2Vuc2VLZXknKS50aGVuKChyZXMpID0+IHsNCiAgICAgICAgc3lzVGltZSA9IHJlcy5kYXRhLnN5c1RpbWUNCiAgICAgICAgbGsgPSByZXMuZGF0YS5saw0KICAgICAgfSkuY2F0Y2goKGVycm9yKSA9PiB7DQogICAgICB9KQ0KICAgICAgdmFyIHNlYXJjaFBhcmFtcyA9IHsNCiAgICAgICAgcGM6IHBjLA0KICAgICAgICBzeXNUaW1lOiBzeXNUaW1lLA0KICAgICAgICBsazogbGsNCiAgICAgIH0NCiAgICAgIGF3YWl0IHRoaXMuJGF4aW9zLmdldCgnL3N5c01lbnVDb250cm9sbGVyL3RyZWVzZWxlY3QnLA0KICAgICAgICB7cGFyYW1zOiBzZWFyY2hQYXJhbXN9KS50aGVuKChyZXMpID0+IHsNCiAgICAgICAgdGhpcy5tZW51T3B0aW9ucyA9IHJlcy5kYXRhDQogICAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHsNCiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2UNCiAgICAgICAgLy8gdGhpcy4kbWVzc2FnZS5lcnJvcign6I635Y+W5pWw5o2u5Ye66ZSZJyArIGVycm9yKQ0KICAgICAgfSkNCiAgICB9LA0KICAgIC8vIOaJgOacieiPnOWNleiKgueCueaVsOaNrg0KICAgIGdldE1lbnVBbGxDaGVja2VkS2V5cygpIHsNCiAgICAgIC8vIOebruWJjeiiq+mAieS4reeahOiPnOWNleiKgueCuQ0KICAgICAgbGV0IGNoZWNrZWRLZXlzID0gdGhpcy4kcmVmcy5tZW51LmdldENoZWNrZWRLZXlzKCk7DQogICAgICAvLyDljYrpgInkuK3nmoToj5zljZXoioLngrkNCiAgICAgIGxldCBoYWxmQ2hlY2tlZEtleXMgPSB0aGlzLiRyZWZzLm1lbnUuZ2V0SGFsZkNoZWNrZWRLZXlzKCk7DQogICAgICBjaGVja2VkS2V5cy51bnNoaWZ0LmFwcGx5KGNoZWNrZWRLZXlzLCBoYWxmQ2hlY2tlZEtleXMpOw0KICAgICAgcmV0dXJuIGNoZWNrZWRLZXlzOw0KICAgIH0sDQogICAgLyoqIOagueaNruinkuiJsklE5p+l6K+i6I+c5Y2V5qCR57uT5p6EICovDQogICAgZ2V0Um9sZU1lbnVUcmVlc2VsZWN0KHJvbGVJZCkgew0KICAgICAgdmFyIHBhcmFtID0gew0KICAgICAgICByb2xlSWQ6IHJvbGVJZA0KICAgICAgfQ0KICAgICAgdGhpcy4kYXhpb3MuZ2V0KCcvc3lzTWVudUNvbnRyb2xsZXIvcm9sZU1lbnVUcmVlc2VsZWN0JywNCiAgICAgICAge3BhcmFtczogcGFyYW19KS50aGVuKChyZXMpID0+IHsNCiAgICAgICAgdGhpcy5tZW51T3B0aW9ucyA9IHJlcy5kYXRhLm1lbnVzOw0KICAgICAgICByZXR1cm4gcmVzLmRhdGENCiAgICAgIH0pLmNhdGNoKChlcnJvcikgPT4gew0KICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZQ0KICAgICAgICAvLyB0aGlzLiRtZXNzYWdlLmVycm9yKCfojrflj5bmlbDmja7lh7rplJknICsgZXJyb3IpDQogICAgICB9KQ0KICAgIH0sDQogICAgLy8g6KeS6Imy54q25oCB5L+u5pS5DQogICAgaGFuZGxlU3RhdHVzQ2hhbmdlKHJvdykgew0KICAgICAgbGV0IHRleHQgPSByb3cuc3RhdHVzID09PSAiMCIgPyAi5ZCv55SoIiA6ICLlgZznlKgiOw0KICAgICAgdGhpcy4kbW9kYWwuY29uZmlybSgn56Gu6K6k6KaBIicgKyB0ZXh0ICsgJyIiJyArIHJvdy5yb2xlTmFtZSArICci6KeS6Imy5ZCX77yfJykudGhlbihmdW5jdGlvbiAoKSB7DQogICAgICAgIHJldHVybiBjaGFuZ2VSb2xlU3RhdHVzKHJvdy5yb2xlSWQsIHJvdy5zdGF0dXMpOw0KICAgICAgfSkudGhlbigoKSA9PiB7DQogICAgICAgIHRoaXMuJG1vZGFsLm1zZ1N1Y2Nlc3ModGV4dCArICLmiJDlip8iKTsNCiAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgcm93LnN0YXR1cyA9IHJvdy5zdGF0dXMgPT09ICIwIiA/ICIxIiA6ICIwIjsNCiAgICAgIH0pOw0KICAgIH0sDQogICAgLy8g5Y+W5raI5oyJ6ZKuDQogICAgY2FuY2VsKCkgew0KICAgICAgdGhpcy5tZW51T3B0aW9ucyA9IFtdOw0KICAgICAgdGhpcy5vcGVuID0gZmFsc2U7DQogICAgICB0aGlzLnJlc2V0KCk7DQogICAgfSwNCiAgICAvLyDlj5bmtojmjInpkq7vvIjmlbDmja7mnYPpmZDvvIkNCiAgICBjYW5jZWxEYXRhU2NvcGUoKSB7DQogICAgICB0aGlzLmRlcHRPcHRpb25zID0gW107DQogICAgICB0aGlzLm9wZW5EYXRhU2NvcGUgPSBmYWxzZTsNCiAgICAgIHRoaXMucmVzZXQoKTsNCiAgICB9LA0KICAgIC8vIOihqOWNlemHjee9rg0KICAgIHJlc2V0KCkgew0KICAgICAgaWYgKHRoaXMuJHJlZnMubWVudSAhPSB1bmRlZmluZWQpIHsNCiAgICAgICAgdGhpcy4kcmVmcy5tZW51LnNldENoZWNrZWRLZXlzKFtdKTsNCiAgICAgIH0NCiAgICAgIHRoaXMuZWRpdCA9IGZhbHNlLA0KICAgICAgICB0aGlzLm1lbnVFeHBhbmQgPSBmYWxzZSwNCiAgICAgICAgdGhpcy5tZW51Tm9kZUFsbCA9IGZhbHNlLA0KICAgICAgICB0aGlzLmRlcHRFeHBhbmQgPSB0cnVlLA0KICAgICAgICB0aGlzLmRlcHROb2RlQWxsID0gZmFsc2UsDQogICAgICAgIHRoaXMuZm9ybSA9IHsNCiAgICAgICAgICByb2xlSWQ6IHVuZGVmaW5lZCwNCiAgICAgICAgICByb2xlTmFtZTogdW5kZWZpbmVkLA0KICAgICAgICAgIHJvbGVLZXk6IHVuZGVmaW5lZCwNCiAgICAgICAgICByb2xlU29ydDogMCwNCiAgICAgICAgICBzdGF0dXM6ICIwIiwNCiAgICAgICAgICByb2xlVHlwZTogIjAiLA0KICAgICAgICAgIG1lbnVJZHM6IFtdLA0KICAgICAgICAgIGRlcHRJZHM6IFtdLA0KICAgICAgICAgIG1lbnVDaGVja1N0cmljdGx5OiB0cnVlLA0KICAgICAgICAgIGRlcHRDaGVja1N0cmljdGx5OiB0cnVlLA0KICAgICAgICAgIHJlbWFyazogdW5kZWZpbmVkDQogICAgICAgIH07DQogICAgICB0aGlzLnJlc2V0Rm9ybSgiZm9ybSIpOw0KICAgIH0sDQogICAgLyoqIOaQnOe0ouaMiemSruaTjeS9nCAqLw0KICAgIGhhbmRsZVF1ZXJ5OiBkZWJvdW5jZShmdW5jdGlvbiAoKSB7DQogICAgICB0aGlzLmN1cnJlbnRQYWdlID0gMQ0KICAgICAgdGhpcy5wYWdlU2l6ZSA9IDEwDQogICAgICAvLyB0aGlzLnF1ZXJ5UGFyYW1zLnBhZ2VOdW0gPSAxOw0KICAgICAgdGhpcy5nZXRMaXN0KCk7DQogICAgfSwgMTAwMCksDQogICAgLyoqIOmHjee9ruaMiemSruaTjeS9nCAqLw0KICAgIHJlc2V0UXVlcnkoKSB7DQogICAgICB0aGlzLmRhdGVSYW5nZSA9IFtdOw0KICAgICAgdGhpcy5yZXNldEZvcm0oInF1ZXJ5Rm9ybSIpOw0KICAgIH0sDQogICAgLy8g5aSa6YCJ5qGG6YCJ5Lit5pWw5o2uDQogICAgaGFuZGxlU2VsZWN0aW9uQ2hhbmdlKHNlbGVjdGlvbikgew0KICAgICAgdGhpcy5pZHMgPSBzZWxlY3Rpb24ubWFwKGl0ZW0gPT4gaXRlbS5yb2xlSWQpDQogICAgICB0aGlzLnNpbmdsZSA9IHNlbGVjdGlvbi5sZW5ndGggIT0gMQ0KICAgICAgdGhpcy5tdWx0aXBsZSA9ICFzZWxlY3Rpb24ubGVuZ3RoDQogICAgfSwNCiAgICAvLyDmm7TlpJrmk43kvZzop6blj5ENCiAgICBoYW5kbGVDb21tYW5kKGNvbW1hbmQsIHJvdykgew0KICAgICAgc3dpdGNoIChjb21tYW5kKSB7DQogICAgICAgIGNhc2UgImhhbmRsZUF1dGhVc2VyIjoNCiAgICAgICAgICB0aGlzLmhhbmRsZUF1dGhVc2VyKHJvdyk7DQogICAgICAgICAgYnJlYWs7DQogICAgICAgIGRlZmF1bHQ6DQogICAgICAgICAgYnJlYWs7DQogICAgICB9DQogICAgfSwNCiAgICAvLyDmoJHmnYPpmZDvvIjlsZXlvIAv5oqY5Y+g77yJDQogICAgaGFuZGxlQ2hlY2tlZFRyZWVFeHBhbmQodmFsdWUsIHR5cGUpIHsNCiAgICAgIGlmICh0eXBlID09ICdtZW51Jykgew0KICAgICAgICBsZXQgdHJlZUxpc3QgPSB0aGlzLm1lbnVPcHRpb25zOw0KICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRyZWVMaXN0Lmxlbmd0aDsgaSsrKSB7DQogICAgICAgICAgdGhpcy4kcmVmcy5tZW51LnN0b3JlLm5vZGVzTWFwW3RyZWVMaXN0W2ldLmlkXS5leHBhbmRlZCA9IHZhbHVlOw0KICAgICAgICB9DQogICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gJ2RlcHQnKSB7DQogICAgICAgIGxldCB0cmVlTGlzdCA9IHRoaXMuZGVwdE9wdGlvbnM7DQogICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdHJlZUxpc3QubGVuZ3RoOyBpKyspIHsNCiAgICAgICAgICB0aGlzLiRyZWZzLmRlcHQuc3RvcmUubm9kZXNNYXBbdHJlZUxpc3RbaV0uaWRdLmV4cGFuZGVkID0gdmFsdWU7DQogICAgICAgIH0NCiAgICAgIH0NCiAgICB9LA0KICAgIC8vIOagkeadg+mZkO+8iOWFqOmAiS/lhajkuI3pgInvvIkNCiAgICBoYW5kbGVDaGVja2VkVHJlZU5vZGVBbGwodmFsdWUsIHR5cGUpIHsNCiAgICAgIGlmICh0eXBlID09ICdtZW51Jykgew0KICAgICAgICB0aGlzLiRyZWZzLm1lbnUuc2V0Q2hlY2tlZE5vZGVzKHZhbHVlID8gdGhpcy5tZW51T3B0aW9ucyA6IFtdKTsNCiAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSAnZGVwdCcpIHsNCiAgICAgICAgdGhpcy4kcmVmcy5kZXB0LnNldENoZWNrZWROb2Rlcyh2YWx1ZSA/IHRoaXMuZGVwdE9wdGlvbnMgOiBbXSk7DQogICAgICB9DQogICAgfSwNCiAgICAvLyDmoJHmnYPpmZDvvIjniLblrZDogZTliqjvvIkNCiAgICBoYW5kbGVDaGVja2VkVHJlZUNvbm5lY3QodmFsdWUsIHR5cGUpIHsNCiAgICAgIGlmICh0eXBlID09ICdtZW51Jykgew0KICAgICAgICB0aGlzLmZvcm0ubWVudUNoZWNrU3RyaWN0bHkgPSB2YWx1ZSA/IHRydWUgOiBmYWxzZTsNCiAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSAnZGVwdCcpIHsNCiAgICAgICAgdGhpcy5mb3JtLmRlcHRDaGVja1N0cmljdGx5ID0gdmFsdWUgPyB0cnVlIDogZmFsc2U7DQogICAgICB9DQogICAgfSwNCiAgICAvKiog5paw5aKe5oyJ6ZKu5pON5L2cICovDQogICAgaGFuZGxlQWRkOiBkZWJvdW5jZShmdW5jdGlvbiAoKSB7DQogICAgICB0aGlzLnJlc2V0KCk7DQogICAgICAvLyB0aGlzLmdldE1lbnVUcmVlc2VsZWN0KCk7DQogICAgICB0aGlzLm9wZW4gPSB0cnVlOw0KICAgICAgdGhpcy50aXRsZSA9ICLmt7vliqDop5LoibIiOw0KICAgICAgdGhpcy5lZGl0ID0gZmFsc2U7DQogICAgfSwgNTAwKSwNCiAgICAvKiog5L+u5pS55oyJ6ZKu5pON5L2cICovDQogICAgaGFuZGxlVXBkYXRlOiBkZWJvdW5jZShhc3luYyBmdW5jdGlvbiAoKSB7DQogICAgICB0aGlzLnJlc2V0KCk7DQogICAgICBjb25zdCBfc2VsZWN0RGF0YSA9IHRoaXMuJHJlZnMueFRhYmxlLmdldFJhZGlvUmVjb3JkKHRydWUpDQogICAgICBpZiAoX3NlbGVjdERhdGEgPT0gbnVsbCkgew0KICAgICAgICB0aGlzLiRtZXNzYWdlKHsNCiAgICAgICAgICB0eXBlOiAnd2FybmluZycsDQogICAgICAgICAgbWVzc2FnZTogJ+ivt+mAieaLqeiusOW9lSEnDQogICAgICAgIH0pOw0KICAgICAgICByZXR1cm4NCiAgICAgIH0NCg0KICAgICAgbGV0IHN5c1RpbWUyDQogICAgICBsZXQgbGsyDQogICAgICBhd2FpdCB0aGlzLiRheGlvcy5nZXQoJy9zeXNQb2xpY3lDb250cm9sbGVyL2dldExpY2Vuc2VLZXknKS50aGVuKChyZXMpID0+IHsNCiAgICAgICAgc3lzVGltZTIgPSByZXMuZGF0YS5zeXNUaW1lDQogICAgICAgIGxrMiA9IHJlcy5kYXRhLmxrDQogICAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHsNCiAgICAgIH0pDQogICAgICB2YXIgc2VhcmNoUGFyYW1zMiA9IHsNCiAgICAgICAgc3lzVGltZTogc3lzVGltZTIsDQogICAgICAgIGxrOiBsazINCiAgICAgIH0NCiAgICAgIGF3YWl0IHRoaXMuJGF4aW9zLmdldCgnL3N5c1JvbGVDb250cm9sbGVyL2dldFVzZXJCeVJvbGUnLCB7cGFyYW1zOiBzZWFyY2hQYXJhbXMyfSkudGhlbigocmVzKSA9PiB7DQogICAgICAgIGxldCBzeXNSb2xlID0gcmVzLmRhdGENCiAgICAgICAgaWYgKHN5c1JvbGUucm9sZUtleSAhPSAnWFRHTCcpIHsNCiAgICAgICAgICB0aGlzLnh0Z2x5ZWRpdCA9IHRydWUNCiAgICAgICAgICB0aGlzLmVkaXQgPSB0cnVlDQogICAgICAgIH0NCiAgICAgIH0pLmNhdGNoKChlcnJvcikgPT4gew0KICAgICAgfSkNCg0KDQogICAgICBpZiAoX3NlbGVjdERhdGEucm9sZUtleSA9PSAnWFRHTCcgfHwgX3NlbGVjdERhdGEucm9sZUtleSA9PSAnU0pHTCcpIHsNCiAgICAgICAgdGhpcy5lZGl0ID0gdHJ1ZTsNCiAgICAgIH0NCiAgICAgIGNvbnN0IHJvbGVJZCA9IF9zZWxlY3REYXRhLnJvbGVJZA0KDQogICAgICBsZXQgc3lzVGltZQ0KICAgICAgbGV0IGxrDQogICAgICBhd2FpdCB0aGlzLiRheGlvcy5nZXQoJy9zeXNQb2xpY3lDb250cm9sbGVyL2dldExpY2Vuc2VLZXknKS50aGVuKChyZXMpID0+IHsNCiAgICAgICAgc3lzVGltZSA9IHJlcy5kYXRhLnN5c1RpbWUNCiAgICAgICAgbGsgPSByZXMuZGF0YS5saw0KICAgICAgfSkuY2F0Y2goKGVycm9yKSA9PiB7DQogICAgICB9KQ0KDQogICAgICB2YXIgcGFyYW0gPSB7DQogICAgICAgIHJvbGVJZDogcm9sZUlkLA0KICAgICAgICBzeXNUaW1lOiBzeXNUaW1lLA0KICAgICAgICBsazogbGsNCiAgICAgIH0NCiAgICAgIGF3YWl0IHRoaXMuJGF4aW9zLmdldCgnL3N5c1JvbGVDb250cm9sbGVyL2dldEluZm8nLA0KICAgICAgICB7cGFyYW1zOiBwYXJhbX0pLnRoZW4oKHJlczIpID0+IHsNCiAgICAgICAgdGhpcy5mb3JtID0gcmVzMi5kYXRhOw0KICAgICAgICB0aGlzLm9wZW4gPSB0cnVlOw0KICAgICAgfSkNCiAgICAgIHRoaXMudGl0bGUgPSAi5L+u5pS56KeS6ImyIjsNCg0KICAgICAgbGV0IHN5c1RpbWUxDQogICAgICBsZXQgbGsxDQogICAgICBhd2FpdCB0aGlzLiRheGlvcy5nZXQoJy9zeXNQb2xpY3lDb250cm9sbGVyL2dldExpY2Vuc2VLZXknKS50aGVuKChyZXMpID0+IHsNCiAgICAgICAgc3lzVGltZTEgPSByZXMuZGF0YS5zeXNUaW1lDQogICAgICAgIGxrMSA9IHJlcy5kYXRhLmxrDQogICAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHsNCiAgICAgIH0pDQogICAgICB2YXIgcGFyYW0xID0gew0KICAgICAgICByb2xlSWQ6IHJvbGVJZCwNCiAgICAgICAgc3lzVGltZTogc3lzVGltZTEsDQogICAgICAgIGxrOiBsazENCiAgICAgIH0NCg0KICAgICAgYXdhaXQgdGhpcy4kYXhpb3MuZ2V0KCcvc3lzTWVudUNvbnRyb2xsZXIvcm9sZU1lbnVUcmVlc2VsZWN0JywNCiAgICAgICAge3BhcmFtczogcGFyYW0xfSkudGhlbigocmVzKSA9PiB7DQogICAgICAgIHRoaXMubWVudU9wdGlvbnMgPSByZXMuZGF0YS5tZW51czsNCiAgICAgICAgbGV0IGNoZWNrZWRLZXlzID0gcmVzLmRhdGEuY2hlY2tlZEtleXMNCiAgICAgICAgY2hlY2tlZEtleXMuZm9yRWFjaCgodikgPT4gew0KICAgICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHsNCiAgICAgICAgICAgIHRoaXMuJHJlZnMubWVudS5zZXRDaGVja2VkKHYsIHRydWUsIGZhbHNlKTsNCiAgICAgICAgICB9KQ0KICAgICAgICB9KQ0KICAgICAgfSkNCiAgICB9LCAxMDAwKSwNCiAgICAvKiog6YCJ5oup6KeS6Imy5p2D6ZmQ6IyD5Zu06Kem5Y+RICovDQogICAgZGF0YVNjb3BlU2VsZWN0Q2hhbmdlKHZhbHVlKSB7DQogICAgICBpZiAodmFsdWUgIT09ICcyJykgew0KICAgICAgICB0aGlzLiRyZWZzLmRlcHQuc2V0Q2hlY2tlZEtleXMoW10pOw0KICAgICAgfQ0KICAgIH0sDQogICAgLyoqIOWIhumFjeeUqOaIt+aTjeS9nCAqLw0KICAgIGhhbmRsZUF1dGhVc2VyOiBmdW5jdGlvbiAocm93KSB7DQogICAgICBjb25zdCByb2xlSWQgPSByb3cucm9sZUlkOw0KICAgICAgdGhpcy4kcm91dGVyLnB1c2goIi9zeXN0ZW0vcm9sZS1hdXRoL3VzZXIvIiArIHJvbGVJZCk7DQogICAgfSwNCiAgICAvKiog5o+Q5Lqk5oyJ6ZKuICovDQogICAgc3VibWl0Rm9ybTogZGVib3VuY2UoZnVuY3Rpb24gKCkgew0KICAgICAgdGhpcy4kcmVmc1siZm9ybSJdLnZhbGlkYXRlKGFzeW5jIHZhbGlkID0+IHsNCiAgICAgICAgaWYgKHZhbGlkKSB7DQogICAgICAgICAgaWYgKHRoaXMuZm9ybS5yb2xlS2V5LnRyaW0oKSA9PSAnWFRHTCcgfHwgdGhpcy5mb3JtLnJvbGVLZXkudHJpbSgpID09ICdTSkdMJykgew0KICAgICAgICAgICAgaWYgKHRoaXMuZm9ybS5idWlsdEluICE9ICcwJykgew0KICAgICAgICAgICAgICAvLyDkuI3mmK/lhoXnva7nlKjmiLfliJnmi6bmiKoNCiAgICAgICAgICAgICAgdGhpcy4kbWVzc2FnZSh7DQogICAgICAgICAgICAgICAgdHlwZTogJ3dhcm5pbmcnLA0KICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICflhoXnva7op5LoibLmoIfor4ZYVEdM5ZKMU0pHTOS4jeiDveWGjeasoea3u+WKoO+8gScNCiAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAgIHJldHVybg0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0NCg0KICAgICAgICAgIGxldCBzeXNUaW1lDQogICAgICAgICAgbGV0IGxrDQogICAgICAgICAgYXdhaXQgdGhpcy4kYXhpb3MuZ2V0KCcvc3lzUG9saWN5Q29udHJvbGxlci9nZXRMaWNlbnNlS2V5JykudGhlbigocmVzKSA9PiB7DQogICAgICAgICAgICBzeXNUaW1lID0gcmVzLmRhdGEuc3lzVGltZQ0KICAgICAgICAgICAgbGsgPSByZXMuZGF0YS5saw0KICAgICAgICAgIH0pLmNhdGNoKChlcnJvcikgPT4gew0KICAgICAgICAgIH0pDQogICAgICAgICAgdGhpcy5mb3JtLnN5c1RpbWUgPSBzeXNUaW1lDQogICAgICAgICAgdGhpcy5mb3JtLmxrID0gbGsNCg0KICAgICAgICAgIGlmICh0aGlzLmZvcm0ucm9sZUlkICE9IHVuZGVmaW5lZCkgew0KICAgICAgICAgICAgdGhpcy5mb3JtLm1lbnVJZHMgPSB0aGlzLmdldE1lbnVBbGxDaGVja2VkS2V5cygpOw0KICAgICAgICAgICAgLy8g5pu05paw5pON5L2cDQogICAgICAgICAgICB0aGlzLiRheGlvcy5wb3N0KCcvc3lzUm9sZUNvbnRyb2xsZXIvdXBkYXRlUm9sZScsIHRoaXMuZm9ybSkudGhlbigocmVzKSA9PiB7DQogICAgICAgICAgICAgIGlmIChyZXMuY29kZSA9PSAwKSB7DQogICAgICAgICAgICAgICAgdGhpcy4kbWVzc2FnZS5zdWNjZXNzKCfkv67mlLnmiJDlip8nKQ0KICAgICAgICAgICAgICAgIHRoaXMub3BlbiA9IGZhbHNlOw0KICAgICAgICAgICAgICAgIHRoaXMucmVzZXQoKTsNCiAgICAgICAgICAgICAgICB0aGlzLmdldExpc3QoKTsNCiAgICAgICAgICAgICAgICB0aGlzLm1lbnVPcHRpb25zID0gW107DQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgaWYgKHJlcy5jb2RlID09IDEpIHsNCiAgICAgICAgICAgICAgICB0aGlzLiRtZXNzYWdlLmVycm9yKHJlcy5kYXRhKQ0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlDQogICAgICAgICAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHsNCiAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2UNCiAgICAgICAgICAgIH0pDQogICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIHRoaXMuZm9ybS5tZW51SWRzID0gdGhpcy5nZXRNZW51QWxsQ2hlY2tlZEtleXMoKTsNCiAgICAgICAgICAgIHRoaXMuJGF4aW9zLnBvc3QoJy9zeXNSb2xlQ29udHJvbGxlci9hZGRSb2xlJywgdGhpcy5mb3JtKS50aGVuKChyZXMpID0+IHsNCiAgICAgICAgICAgICAgaWYgKHJlcy5jb2RlID09IDApIHsNCiAgICAgICAgICAgICAgICB0aGlzLiRtZXNzYWdlLnN1Y2Nlc3MoJ+aWsOWinuaIkOWKnycpDQogICAgICAgICAgICAgICAgdGhpcy5vcGVuID0gZmFsc2U7DQogICAgICAgICAgICAgICAgdGhpcy5yZXNldCgpOw0KICAgICAgICAgICAgICAgIHRoaXMuZ2V0TGlzdCgpOw0KICAgICAgICAgICAgICAgIHRoaXMubWVudU9wdGlvbnMgPSBbXTsNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICBpZiAocmVzLmNvZGUgPT0gMSkgew0KICAgICAgICAgICAgICAgIHRoaXMuJG1lc3NhZ2UuZXJyb3IocmVzLmRhdGEpDQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2UNCiAgICAgICAgICAgIH0pLmNhdGNoKChlcnJvcikgPT4gew0KICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZQ0KICAgICAgICAgICAgfSkNCiAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIH0pOw0KICAgIH0sIDEwMDApLA0KICAgIC8qKiDmj5DkuqTmjInpkq7vvIjmlbDmja7mnYPpmZDvvIkgKi8NCiAgICBzdWJtaXREYXRhU2NvcGU6IGZ1bmN0aW9uICgpIHsNCiAgICAgIGlmICh0aGlzLmZvcm0ucm9sZUlkICE9IHVuZGVmaW5lZCkgew0KICAgICAgICB0aGlzLmZvcm0uZGVwdElkcyA9IHRoaXMuZ2V0RGVwdEFsbENoZWNrZWRLZXlzKCk7DQogICAgICAgIGRhdGFTY29wZSh0aGlzLmZvcm0pLnRoZW4ocmVzcG9uc2UgPT4gew0KICAgICAgICAgIHRoaXMuJG1vZGFsLm1zZ1N1Y2Nlc3MoIuS/ruaUueaIkOWKnyIpOw0KICAgICAgICAgIHRoaXMub3BlbkRhdGFTY29wZSA9IGZhbHNlOw0KICAgICAgICAgIHRoaXMuZ2V0TGlzdCgpOw0KICAgICAgICB9KTsNCiAgICAgIH0NCiAgICB9LA0KICAgIC8qKiDliKDpmaTmjInpkq7mk43kvZwgKi8NCiAgICBoYW5kbGVEZWxldGUoKSB7DQogICAgICBjb25zdCBfc2VsZWN0RGF0YSA9IHRoaXMuJHJlZnMueFRhYmxlLmdldFJhZGlvUmVjb3JkKHRydWUpDQogICAgICBpZiAoX3NlbGVjdERhdGEgPT0gbnVsbCkgew0KICAgICAgICB0aGlzLiRtZXNzYWdlKHsNCiAgICAgICAgICB0eXBlOiAnd2FybmluZycsDQogICAgICAgICAgbWVzc2FnZTogJ+ivt+mAieaLqeiusOW9lSEnDQogICAgICAgIH0pOw0KICAgICAgICByZXR1cm4NCiAgICAgIH0NCg0KICAgICAgaWYgKF9zZWxlY3REYXRhLnJvbGVLZXkgPT0gJ1hUR0wnIHx8IF9zZWxlY3REYXRhLnJvbGVLZXkgPT0gJ1NKR0wnKSB7DQogICAgICAgIHRoaXMuJG1lc3NhZ2Uoew0KICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJywNCiAgICAgICAgICBtZXNzYWdlOiAn5YaF572u6KeS6Imy5LiN6IO95Yig6ZmkIScNCiAgICAgICAgfSk7DQogICAgICAgIHJldHVybg0KICAgICAgfQ0KDQogICAgICB0aGlzLiRjb25maXJtKCfmmK/lkKbnoa7orqTliKDpmaTop5LoibI/JywgJ+aPkOekuicsIHsNCiAgICAgICAgY29uZmlybUJ1dHRvblRleHQ6ICfnoa7lrponLA0KICAgICAgICBjYW5jZWxCdXR0b25UZXh0OiAn5Y+W5raIJywNCiAgICAgICAgdHlwZTogJ3dhcm5pbmcnDQogICAgICB9KS50aGVuKCgpID0+IHsNCiAgICAgICAgdGhpcy5kb0RlbGV0ZShfc2VsZWN0RGF0YSkNCiAgICAgIH0pLmNhdGNoKCgpID0+IHsNCiAgICAgIH0pOw0KICAgIH0sDQogICAgLyoqDQogICAgICog5Yig6Zmk5o+Q5LqkDQogICAgICovDQogICAgZG9EZWxldGU6IGRlYm91bmNlKGFzeW5jIGZ1bmN0aW9uIChfc2VsZWN0RGF0YSkgew0KICAgICAgbGV0IHN5c1RpbWUNCiAgICAgIGxldCBsaw0KICAgICAgYXdhaXQgdGhpcy4kYXhpb3MuZ2V0KCcvc3lzUG9saWN5Q29udHJvbGxlci9nZXRMaWNlbnNlS2V5JykudGhlbigocmVzKSA9PiB7DQogICAgICAgIHN5c1RpbWUgPSByZXMuZGF0YS5zeXNUaW1lDQogICAgICAgIGxrID0gcmVzLmRhdGEubGsNCiAgICAgIH0pLmNhdGNoKChlcnJvcikgPT4gew0KICAgICAgfSkNCg0KICAgICAgY29uc3QgcGFyYW0gPSB7DQogICAgICAgIHJvbGVJZDogX3NlbGVjdERhdGEucm9sZUlkLA0KICAgICAgICBzeXNUaW1lOiBzeXNUaW1lLA0KICAgICAgICBsazogbGsNCiAgICAgIH0NCiAgICAgIGF3YWl0IHRoaXMuJGF4aW9zLnBvc3QoJy9zeXNSb2xlQ29udHJvbGxlci9kZWxSb2xlJywgcGFyYW0pLnRoZW4oKHJlcykgPT4gew0KICAgICAgICBpZiAocmVzLmNvZGUgPT0gMCkgew0KICAgICAgICAgIHRoaXMuJG1lc3NhZ2Uoew0KICAgICAgICAgICAgdHlwZTogJ3N1Y2Nlc3MnLA0KICAgICAgICAgICAgbWVzc2FnZTogJ+WIoOmZpOaIkOWKnyEnDQogICAgICAgICAgfSk7DQogICAgICAgICAgdGhpcy5nZXRMaXN0KCk7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgdGhpcy4kbWVzc2FnZSh7DQogICAgICAgICAgICB0eXBlOiAnZXJyb3InLA0KICAgICAgICAgICAgbWVzc2FnZTogcmVzLmRhdGENCiAgICAgICAgICB9KTsNCiAgICAgICAgfQ0KICAgICAgfSkuY2F0Y2goKGVycm9yKSA9PiB7DQogICAgICAgIHRoaXMuJG1lc3NhZ2Uoew0KICAgICAgICAgIHR5cGU6ICdlcnJvcicsDQogICAgICAgICAgbWVzc2FnZTogJ+WIoOmZpOWksei0pSEnDQogICAgICAgIH0pOw0KICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZQ0KICAgICAgfSkNCiAgICB9LCAxMDAwKQ0KICB9DQp9Ow0K"},{"version":3,"sources":["index.vue"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuPA;;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;;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;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;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;;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;;AAEA;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;;AAEA;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;;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","file":"index.vue","sourceRoot":"src/views/sysManager/roleManager","sourcesContent":["<template>\r\n <div class=\"app-container\">\r\n <el-form :model=\"queryParams\" ref=\"queryForm\" size=\"small\" :inline=\"true\" v-show=\"showSearch\">\r\n <el-form-item label=\"角色名称\" prop=\"roleName\">\r\n <el-input\r\n maxlength=\"15\"\r\n v-model=\"queryParams.roleName\"\r\n placeholder=\"请输入角色名称\"\r\n clearable\r\n style=\"width: 240px\"\r\n @keyup.enter.native=\"handleQuery\"\r\n />\r\n </el-form-item>\r\n <el-form-item label=\"字符标识\" prop=\"roleKey\">\r\n <el-select\r\n v-model=\"queryParams.roleKey\"\r\n placeholder=\"请选择字符标识\"\r\n >\r\n <el-option\r\n v-for=\"item in pcOptions\"\r\n :key=\"item.value\"\r\n :label=\"item.label\"\r\n :value=\"item.value\">\r\n </el-option>\r\n </el-select>\r\n </el-form-item>\r\n <!-- <el-form-item label=\"状态\" prop=\"status\">-->\r\n <!-- <el-select-->\r\n <!-- v-model=\"queryParams.status\"-->\r\n <!-- placeholder=\"请选择角色状态\"-->\r\n <!-- clearable-->\r\n <!-- style=\"width: 240px\"-->\r\n <!-- >-->\r\n <!-- <el-option-->\r\n <!-- v-for=\"item in statusOptions\"-->\r\n <!-- :key=\"item.value\"-->\r\n <!-- :label=\"item.label\"-->\r\n <!-- :value=\"item.value\">-->\r\n <!-- </el-option>-->\r\n <!-- </el-select>-->\r\n <!-- </el-form-item>-->\r\n <el-form-item>\r\n <el-button type=\"primary\" icon=\"el-icon-search\" size=\"mini\" @click=\"handleQuery\">搜索</el-button>\r\n <el-button icon=\"el-icon-refresh\" size=\"mini\" @click=\"resetQuery\">重置</el-button>\r\n </el-form-item>\r\n </el-form>\r\n\r\n <el-row :gutter=\"10\" class=\"mb8\">\r\n <el-col :span=\"1.5\">\r\n <el-button\r\n type=\"primary\"\r\n plain\r\n icon=\"el-icon-plus\"\r\n size=\"mini\"\r\n @click=\"handleAdd\"\r\n v-hasPermi=\"['system:role:add']\"\r\n >新增\r\n </el-button>\r\n </el-col>\r\n <el-col :span=\"1.5\">\r\n <el-button\r\n type=\"success\"\r\n plain\r\n icon=\"el-icon-edit\"\r\n size=\"mini\"\r\n @click=\"handleUpdate\"\r\n v-hasPermi=\"['system:role:edit']\"\r\n >修改\r\n </el-button>\r\n </el-col>\r\n <el-col :span=\"1.5\">\r\n <el-button\r\n type=\"danger\"\r\n plain\r\n icon=\"el-icon-delete\"\r\n size=\"mini\"\r\n @click=\"handleDelete\"\r\n v-hasPermi=\"['system:role:remove']\"\r\n >删除\r\n </el-button>\r\n </el-col>\r\n </el-row>\r\n <div style=\"padding-top: 10px\">\r\n <vxe-table\r\n ref=\"xTable\"\r\n align=\"center\"\r\n :loading=\"loading\"\r\n class=\"mytable-style\"\r\n auto-resize\r\n border\r\n resizable\r\n export-config\r\n highlight-current-row\r\n show-overflow\r\n max-height=\"700\"\r\n :data=\"roleList\"\r\n :radio-config=\"{trigger: 'row'}\"\r\n >\r\n <vxe-column type=\"radio\" width=\"60\"/>\r\n <!-- <vxe-table-column field=\"roleId\" title=\"角色编号\"/>-->\r\n <vxe-table-column field=\"roleName\" title=\"角色名称\"/>\r\n <vxe-table-column field=\"roleType\" title=\"类型\" :formatter=\"typeFormat\"/>\r\n <vxe-table-column field=\"roleKey\" title=\"字符标识\"/>\r\n <vxe-table-column field=\"roleSort\" title=\"显示顺序\"/>\r\n <!-- <vxe-table-column field=\"status\" title=\"状态\" :formatter=\"statusFormat\"/>-->\r\n </vxe-table>\r\n <vxe-pager\r\n v-show=\"showTable\"\r\n perfect\r\n :current-page.sync=\"currentPage\"\r\n :page-size.sync=\"pageSize\"\r\n :total=\"total\"\r\n :page-sizes=\"[10,50,100]\"\r\n :layouts=\"['PrevJump', 'PrevPage','JumpNumber', 'NextPage', 'NextJump', 'Sizes', 'FullJump', 'Total']\"\r\n @page-change=\"handlePageChange\"\r\n >\r\n </vxe-pager>\r\n </div>\r\n <!-- 添加或修改角色配置对话框 -->\r\n <el-dialog :title=\"title\" :visible.sync=\"open\" width=\"500px\" append-to-body>\r\n <el-form ref=\"form\" :model=\"form\" :rules=\"rules\" label-width=\"100px\">\r\n <el-form-item label=\"角色名称\" prop=\"roleName\">\r\n <el-input v-model=\"form.roleName\" maxlength=\"15\" placeholder=\"请输入角色名称\" :disabled=\"edit\"/>\r\n </el-form-item>\r\n <el-form-item label=\"字符标识\" prop=\"roleKey\" :disabled=\"xtglyedit\">\r\n <el-select\r\n @change=\"changepc\"\r\n v-model=\"form.roleKey\"\r\n placeholder=\"请选择字符标识\"\r\n :disabled=\"edit\"\r\n >\r\n <el-option\r\n v-for=\"item in pcOptions\"\r\n :key=\"item.value\"\r\n :label=\"item.label\"\r\n :value=\"item.value\">\r\n </el-option>\r\n </el-select>\r\n </el-form-item>\r\n <el-form-item label=\"角色顺序\" prop=\"roleSort\">\r\n <el-input-number v-model=\"form.roleSort\" controls-position=\"right\" :min=\"0\" :disabled=\"edit\"/>\r\n </el-form-item>\r\n <el-form-item label=\"类型\">\r\n <el-select\r\n v-model=\"form.roleType\"\r\n placeholder=\"请选择角色类型\"\r\n clearable\r\n style=\"width: 240px\"\r\n :disabled=\"edit\"\r\n >\r\n <el-option\r\n v-for=\"item in typeOptions\"\r\n :key=\"item.value\"\r\n :label=\"item.label\"\r\n :value=\"item.value\">\r\n </el-option>\r\n </el-select>\r\n </el-form-item>\r\n <!-- <el-form-item label=\"状态\">-->\r\n <!-- <el-select-->\r\n <!-- v-model=\"form.status\"-->\r\n <!-- placeholder=\"请选择用户状态\"-->\r\n <!-- clearable-->\r\n <!-- style=\"width: 240px\"-->\r\n <!-- :disabled=\"edit\"-->\r\n <!-- >-->\r\n <!-- <el-option-->\r\n <!-- v-for=\"item in statusOptions\"-->\r\n <!-- :key=\"item.value\"-->\r\n <!-- :label=\"item.label\"-->\r\n <!-- :value=\"item.value\">-->\r\n <!-- </el-option>-->\r\n <!-- </el-select>-->\r\n <!-- </el-form-item>-->\r\n <el-form-item label=\"菜单权限\">\r\n <el-checkbox v-model=\"menuExpand\" @change=\"handleCheckedTreeExpand($event, 'menu')\">展开/折叠</el-checkbox>\r\n <el-checkbox v-model=\"menuNodeAll\" @change=\"handleCheckedTreeNodeAll($event, 'menu')\">全选/全不选</el-checkbox>\r\n <el-checkbox v-model=\"form.menuCheckStrictly\" @change=\"handleCheckedTreeConnect($event, 'menu')\">父子联动\r\n </el-checkbox>\r\n <el-tree\r\n class=\"tree-border\"\r\n :data=\"menuOptions\"\r\n show-checkbox\r\n ref=\"menu\"\r\n node-key=\"id\"\r\n :check-strictly=\"!form.menuCheckStrictly\"\r\n empty-text=\"无数据,请选择字符标识!\"\r\n :props=\"defaultProps\"\r\n ></el-tree>\r\n </el-form-item>\r\n <el-form-item label=\"备注\">\r\n <el-input v-model=\"form.remark\" type=\"textarea\" placeholder=\"请输入内容\" :disabled=\"edit\"></el-input>\r\n </el-form-item>\r\n </el-form>\r\n <div slot=\"footer\" class=\"dialog-footer\">\r\n <el-button type=\"primary\" @click=\"submitForm\">确 定</el-button>\r\n <el-button @click=\"cancel\">取 消</el-button>\r\n </div>\r\n </el-dialog>\r\n\r\n <!-- 分配角色数据权限对话框 -->\r\n <el-dialog :title=\"title\" :visible.sync=\"openDataScope\" width=\"500px\" append-to-body>\r\n <el-form :model=\"form\" label-width=\"80px\">\r\n <el-form-item label=\"角色名称\">\r\n <el-input v-model=\"form.roleName\" :disabled=\"true\"/>\r\n </el-form-item>\r\n <el-form-item label=\"权限字符\">\r\n <el-input v-model=\"form.roleKey\" :disabled=\"true\"/>\r\n </el-form-item>\r\n <el-form-item label=\"权限范围\">\r\n <el-select v-model=\"form.dataScope\" @change=\"dataScopeSelectChange\">\r\n <el-option\r\n v-for=\"item in dataScopeOptions\"\r\n :key=\"item.value\"\r\n :label=\"item.label\"\r\n :value=\"item.value\"\r\n ></el-option>\r\n </el-select>\r\n </el-form-item>\r\n <el-form-item label=\"数据权限\" v-show=\"form.dataScope == 2\">\r\n <el-checkbox v-model=\"deptExpand\" @change=\"handleCheckedTreeExpand($event, 'dept')\">展开/折叠</el-checkbox>\r\n <el-checkbox v-model=\"deptNodeAll\" @change=\"handleCheckedTreeNodeAll($event, 'dept')\">全选/全不选</el-checkbox>\r\n <el-checkbox v-model=\"form.deptCheckStrictly\" @change=\"handleCheckedTreeConnect($event, 'dept')\">父子联动\r\n </el-checkbox>\r\n <el-tree\r\n class=\"tree-border\"\r\n :data=\"deptOptions\"\r\n show-checkbox\r\n default-expand-all\r\n ref=\"dept\"\r\n node-key=\"id\"\r\n :check-strictly=\"!form.deptCheckStrictly\"\r\n empty-text=\"加载中,请稍候\"\r\n :props=\"defaultProps\"\r\n ></el-tree>\r\n </el-form-item>\r\n </el-form>\r\n <div slot=\"footer\" class=\"dialog-footer\">\r\n <el-button type=\"primary\" @click=\"submitDataScope\">确 定</el-button>\r\n <el-button @click=\"cancelDataScope\">取 消</el-button>\r\n </div>\r\n </el-dialog>\r\n </div>\r\n</template>\r\n\r\n<script>\r\n\r\nimport {debounce} from \"lodash\";\r\n\r\nexport default {\r\n name: \"Role\",\r\n dicts: ['sys_normal_disable'],\r\n data() {\r\n return {\r\n typeOptions: [\r\n {value: '0', label: '管理员'},\r\n {value: '1', label: '业务员'}\r\n ],\r\n statusOptions: [\r\n {value: '0', label: '正常'},\r\n {value: '1', label: '停用'}\r\n ],\r\n // 系统管理员edit\r\n xtglyedit: false,\r\n edit: false,\r\n showTable: false,\r\n // 遮罩层\r\n loading: true,\r\n // 选中数组\r\n ids: [],\r\n // 非单个禁用\r\n single: true,\r\n // 非多个禁用\r\n multiple: true,\r\n // 显示搜索条件\r\n showSearch: false,\r\n currentPage: 1,\r\n pageSize: 10,\r\n // 总条数\r\n total: 0,\r\n // 角色表格数据\r\n roleList: [],\r\n // 弹出层标题\r\n title: \"\",\r\n // 是否显示弹出层\r\n open: false,\r\n // 是否显示弹出层(数据权限)\r\n openDataScope: false,\r\n menuExpand: false,\r\n menuNodeAll: false,\r\n deptExpand: true,\r\n deptNodeAll: false,\r\n pcOptions: [\r\n {value: 'XTGL', label: 'XTGL'},\r\n {value: 'SJGL', label: 'SJGL'},\r\n {value: 'SHGL', label: 'SHGL'},\r\n {value: 'YWGL', label: 'YWGL'},\r\n {value: 'SJYW', label: 'SJYW'},\r\n {value: 'YWPZ', label: 'YWPZ'},\r\n {value: 'YWCZ', label: 'YWCZ'}\r\n ],\r\n // 日期范围\r\n dateRange: [],\r\n // 数据范围选项\r\n dataScopeOptions: [\r\n {\r\n value: \"1\",\r\n label: \"全部数据权限\"\r\n },\r\n {\r\n value: \"2\",\r\n label: \"自定数据权限\"\r\n },\r\n {\r\n value: \"3\",\r\n label: \"本部门数据权限\"\r\n },\r\n {\r\n value: \"4\",\r\n label: \"本部门及以下数据权限\"\r\n },\r\n {\r\n value: \"5\",\r\n label: \"仅本人数据权限\"\r\n }\r\n ],\r\n // 菜单列表\r\n menuOptions: [],\r\n // 部门列表\r\n deptOptions: [],\r\n // 查询参数\r\n queryParams: {\r\n roleName: undefined,\r\n roleKey: undefined,\r\n status: undefined\r\n },\r\n // 表单参数\r\n form: {},\r\n defaultProps: {\r\n children: \"children\",\r\n label: \"label\"\r\n },\r\n // 表单校验\r\n rules: {\r\n roleName: [\r\n {required: true, message: \"角色名称不能为空\", trigger: \"blur\"}\r\n ],\r\n roleKey: [\r\n {required: true, message: \"权限字符不能为空\", trigger: \"blur\"}\r\n ],\r\n roleSort: [\r\n {required: true, message: \"角色顺序不能为空\", trigger: \"blur\"}\r\n ]\r\n }\r\n };\r\n },\r\n created() {\r\n this.getList();\r\n },\r\n methods: {\r\n changepc(value) {\r\n this.getMenuTreeselect(value);\r\n },\r\n // 列表状态格式化\r\n typeFormat({cellValue}) {\r\n let belongTo = '未知的类型'\r\n for (let i = 0; i < this.typeOptions.length; i++) {\r\n if (cellValue == \"0\") {\r\n belongTo = \"管理员\"\r\n } else if (cellValue == \"1\") {\r\n belongTo = \"业务员\"\r\n }\r\n }\r\n return belongTo\r\n },\r\n /** 查询角色列表 */\r\n async getList() {\r\n // 获取当前用户的角色\r\n let sysTime2\r\n let lk2\r\n await this.$axios.get('/sysPolicyController/getLicenseKey').then((res) => {\r\n sysTime2 = res.data.sysTime\r\n lk2 = res.data.lk\r\n }).catch((error) => {\r\n })\r\n var searchParams2 = {\r\n sysTime: sysTime2,\r\n lk: lk2\r\n }\r\n await this.$axios.get('/sysRoleController/getUserByRole', {params: searchParams2}).then((res) => {\r\n let sysRole = res.data\r\n if (sysRole.roleKey == 'XTGL') {\r\n // 不是系统管理员,隐藏查询和修改\r\n this.showSearch = true\r\n } else {\r\n this.xtglyedit = true\r\n this.edit = true\r\n }\r\n }).catch((error) => {\r\n })\r\n\r\n this.loading = true;\r\n let sysTime\r\n let lk\r\n await this.$axios.get('/sysPolicyController/getLicenseKey').then((res) => {\r\n sysTime = res.data.sysTime\r\n lk = res.data.lk\r\n }).catch((error) => {\r\n })\r\n var searchParams = {\r\n currentPage: this.currentPage,\r\n pageSize: this.pageSize,\r\n roleName: this.queryParams.roleName,\r\n roleKey: this.queryParams.roleKey,\r\n status: this.queryParams.status,\r\n sysTime: sysTime,\r\n lk: lk\r\n }\r\n await this.$axios.get('/sysRoleController/getAll',\r\n {params: searchParams}).then((res) => {\r\n this.roleList = res.data.records\r\n this.total = res.data.total\r\n if (res.data.records == '') {\r\n this.showTable = false\r\n } else {\r\n this.showTable = true\r\n }\r\n this.loading = false\r\n }).catch((error) => {\r\n this.loading = false\r\n // this.$message.error('获取数据出错' + error)\r\n })\r\n },\r\n handlePageChange({currentPage, pageSize}) {\r\n this.currentPage = currentPage\r\n this.pageSize = pageSize\r\n this.getList()\r\n },\r\n // 列表状态格式化\r\n statusFormat({cellValue}) {\r\n let belongTo = '未知的类型'\r\n for (let i = 0; i < this.statusOptions.length; i++) {\r\n if (cellValue == \"0\") {\r\n belongTo = \"正常\"\r\n } else if (cellValue == \"1\") {\r\n belongTo = \"停用\"\r\n }\r\n }\r\n return belongTo\r\n },\r\n /** 查询菜单树结构 */\r\n async getMenuTreeselect(pc) {\r\n let sysTime\r\n let lk\r\n await this.$axios.get('/sysPolicyController/getLicenseKey').then((res) => {\r\n sysTime = res.data.sysTime\r\n lk = res.data.lk\r\n }).catch((error) => {\r\n })\r\n var searchParams = {\r\n pc: pc,\r\n sysTime: sysTime,\r\n lk: lk\r\n }\r\n await this.$axios.get('/sysMenuController/treeselect',\r\n {params: searchParams}).then((res) => {\r\n this.menuOptions = res.data\r\n }).catch((error) => {\r\n this.loading = false\r\n // this.$message.error('获取数据出错' + error)\r\n })\r\n },\r\n // 所有菜单节点数据\r\n getMenuAllCheckedKeys() {\r\n // 目前被选中的菜单节点\r\n let checkedKeys = this.$refs.menu.getCheckedKeys();\r\n // 半选中的菜单节点\r\n let halfCheckedKeys = this.$refs.menu.getHalfCheckedKeys();\r\n checkedKeys.unshift.apply(checkedKeys, halfCheckedKeys);\r\n return checkedKeys;\r\n },\r\n /** 根据角色ID查询菜单树结构 */\r\n getRoleMenuTreeselect(roleId) {\r\n var param = {\r\n roleId: roleId\r\n }\r\n this.$axios.get('/sysMenuController/roleMenuTreeselect',\r\n {params: param}).then((res) => {\r\n this.menuOptions = res.data.menus;\r\n return res.data\r\n }).catch((error) => {\r\n this.loading = false\r\n // this.$message.error('获取数据出错' + error)\r\n })\r\n },\r\n // 角色状态修改\r\n handleStatusChange(row) {\r\n let text = row.status === \"0\" ? \"启用\" : \"停用\";\r\n this.$modal.confirm('确认要\"' + text + '\"\"' + row.roleName + '\"角色吗?').then(function () {\r\n return changeRoleStatus(row.roleId, row.status);\r\n }).then(() => {\r\n this.$modal.msgSuccess(text + \"成功\");\r\n }).catch(function () {\r\n row.status = row.status === \"0\" ? \"1\" : \"0\";\r\n });\r\n },\r\n // 取消按钮\r\n cancel() {\r\n this.menuOptions = [];\r\n this.open = false;\r\n this.reset();\r\n },\r\n // 取消按钮(数据权限)\r\n cancelDataScope() {\r\n this.deptOptions = [];\r\n this.openDataScope = false;\r\n this.reset();\r\n },\r\n // 表单重置\r\n reset() {\r\n if (this.$refs.menu != undefined) {\r\n this.$refs.menu.setCheckedKeys([]);\r\n }\r\n this.edit = false,\r\n this.menuExpand = false,\r\n this.menuNodeAll = false,\r\n this.deptExpand = true,\r\n this.deptNodeAll = false,\r\n this.form = {\r\n roleId: undefined,\r\n roleName: undefined,\r\n roleKey: undefined,\r\n roleSort: 0,\r\n status: \"0\",\r\n roleType: \"0\",\r\n menuIds: [],\r\n deptIds: [],\r\n menuCheckStrictly: true,\r\n deptCheckStrictly: true,\r\n remark: undefined\r\n };\r\n this.resetForm(\"form\");\r\n },\r\n /** 搜索按钮操作 */\r\n handleQuery: debounce(function () {\r\n this.currentPage = 1\r\n this.pageSize = 10\r\n // this.queryParams.pageNum = 1;\r\n this.getList();\r\n }, 1000),\r\n /** 重置按钮操作 */\r\n resetQuery() {\r\n this.dateRange = [];\r\n this.resetForm(\"queryForm\");\r\n },\r\n // 多选框选中数据\r\n handleSelectionChange(selection) {\r\n this.ids = selection.map(item => item.roleId)\r\n this.single = selection.length != 1\r\n this.multiple = !selection.length\r\n },\r\n // 更多操作触发\r\n handleCommand(command, row) {\r\n switch (command) {\r\n case \"handleAuthUser\":\r\n this.handleAuthUser(row);\r\n break;\r\n default:\r\n break;\r\n }\r\n },\r\n // 树权限(展开/折叠)\r\n handleCheckedTreeExpand(value, type) {\r\n if (type == 'menu') {\r\n let treeList = this.menuOptions;\r\n for (let i = 0; i < treeList.length; i++) {\r\n this.$refs.menu.store.nodesMap[treeList[i].id].expanded = value;\r\n }\r\n } else if (type == 'dept') {\r\n let treeList = this.deptOptions;\r\n for (let i = 0; i < treeList.length; i++) {\r\n this.$refs.dept.store.nodesMap[treeList[i].id].expanded = value;\r\n }\r\n }\r\n },\r\n // 树权限(全选/全不选)\r\n handleCheckedTreeNodeAll(value, type) {\r\n if (type == 'menu') {\r\n this.$refs.menu.setCheckedNodes(value ? this.menuOptions : []);\r\n } else if (type == 'dept') {\r\n this.$refs.dept.setCheckedNodes(value ? this.deptOptions : []);\r\n }\r\n },\r\n // 树权限(父子联动)\r\n handleCheckedTreeConnect(value, type) {\r\n if (type == 'menu') {\r\n this.form.menuCheckStrictly = value ? true : false;\r\n } else if (type == 'dept') {\r\n this.form.deptCheckStrictly = value ? true : false;\r\n }\r\n },\r\n /** 新增按钮操作 */\r\n handleAdd: debounce(function () {\r\n this.reset();\r\n // this.getMenuTreeselect();\r\n this.open = true;\r\n this.title = \"添加角色\";\r\n this.edit = false;\r\n }, 500),\r\n /** 修改按钮操作 */\r\n handleUpdate: debounce(async function () {\r\n this.reset();\r\n const _selectData = this.$refs.xTable.getRadioRecord(true)\r\n if (_selectData == null) {\r\n this.$message({\r\n type: 'warning',\r\n message: '请选择记录!'\r\n });\r\n return\r\n }\r\n\r\n let sysTime2\r\n let lk2\r\n await this.$axios.get('/sysPolicyController/getLicenseKey').then((res) => {\r\n sysTime2 = res.data.sysTime\r\n lk2 = res.data.lk\r\n }).catch((error) => {\r\n })\r\n var searchParams2 = {\r\n sysTime: sysTime2,\r\n lk: lk2\r\n }\r\n await this.$axios.get('/sysRoleController/getUserByRole', {params: searchParams2}).then((res) => {\r\n let sysRole = res.data\r\n if (sysRole.roleKey != 'XTGL') {\r\n this.xtglyedit = true\r\n this.edit = true\r\n }\r\n }).catch((error) => {\r\n })\r\n\r\n\r\n if (_selectData.roleKey == 'XTGL' || _selectData.roleKey == 'SJGL') {\r\n this.edit = true;\r\n }\r\n const roleId = _selectData.roleId\r\n\r\n let sysTime\r\n let lk\r\n await this.$axios.get('/sysPolicyController/getLicenseKey').then((res) => {\r\n sysTime = res.data.sysTime\r\n lk = res.data.lk\r\n }).catch((error) => {\r\n })\r\n\r\n var param = {\r\n roleId: roleId,\r\n sysTime: sysTime,\r\n lk: lk\r\n }\r\n await this.$axios.get('/sysRoleController/getInfo',\r\n {params: param}).then((res2) => {\r\n this.form = res2.data;\r\n this.open = true;\r\n })\r\n this.title = \"修改角色\";\r\n\r\n let sysTime1\r\n let lk1\r\n await this.$axios.get('/sysPolicyController/getLicenseKey').then((res) => {\r\n sysTime1 = res.data.sysTime\r\n lk1 = res.data.lk\r\n }).catch((error) => {\r\n })\r\n var param1 = {\r\n roleId: roleId,\r\n sysTime: sysTime1,\r\n lk: lk1\r\n }\r\n\r\n await this.$axios.get('/sysMenuController/roleMenuTreeselect',\r\n {params: param1}).then((res) => {\r\n this.menuOptions = res.data.menus;\r\n let checkedKeys = res.data.checkedKeys\r\n checkedKeys.forEach((v) => {\r\n this.$nextTick(() => {\r\n this.$refs.menu.setChecked(v, true, false);\r\n })\r\n })\r\n })\r\n }, 1000),\r\n /** 选择角色权限范围触发 */\r\n dataScopeSelectChange(value) {\r\n if (value !== '2') {\r\n this.$refs.dept.setCheckedKeys([]);\r\n }\r\n },\r\n /** 分配用户操作 */\r\n handleAuthUser: function (row) {\r\n const roleId = row.roleId;\r\n this.$router.push(\"/system/role-auth/user/\" + roleId);\r\n },\r\n /** 提交按钮 */\r\n submitForm: debounce(function () {\r\n this.$refs[\"form\"].validate(async valid => {\r\n if (valid) {\r\n if (this.form.roleKey.trim() == 'XTGL' || this.form.roleKey.trim() == 'SJGL') {\r\n if (this.form.builtIn != '0') {\r\n // 不是内置用户则拦截\r\n this.$message({\r\n type: 'warning',\r\n message: '内置角色标识XTGL和SJGL不能再次添加!'\r\n });\r\n return\r\n }\r\n }\r\n\r\n let sysTime\r\n let lk\r\n await this.$axios.get('/sysPolicyController/getLicenseKey').then((res) => {\r\n sysTime = res.data.sysTime\r\n lk = res.data.lk\r\n }).catch((error) => {\r\n })\r\n this.form.sysTime = sysTime\r\n this.form.lk = lk\r\n\r\n if (this.form.roleId != undefined) {\r\n this.form.menuIds = this.getMenuAllCheckedKeys();\r\n // 更新操作\r\n this.$axios.post('/sysRoleController/updateRole', this.form).then((res) => {\r\n if (res.code == 0) {\r\n this.$message.success('修改成功')\r\n this.open = false;\r\n this.reset();\r\n this.getList();\r\n this.menuOptions = [];\r\n }\r\n if (res.code == 1) {\r\n this.$message.error(res.data)\r\n }\r\n this.loading = false\r\n }).catch((error) => {\r\n this.loading = false\r\n })\r\n } else {\r\n this.form.menuIds = this.getMenuAllCheckedKeys();\r\n this.$axios.post('/sysRoleController/addRole', this.form).then((res) => {\r\n if (res.code == 0) {\r\n this.$message.success('新增成功')\r\n this.open = false;\r\n this.reset();\r\n this.getList();\r\n this.menuOptions = [];\r\n }\r\n if (res.code == 1) {\r\n this.$message.error(res.data)\r\n }\r\n this.loading = false\r\n }).catch((error) => {\r\n this.loading = false\r\n })\r\n }\r\n }\r\n });\r\n }, 1000),\r\n /** 提交按钮(数据权限) */\r\n submitDataScope: function () {\r\n if (this.form.roleId != undefined) {\r\n this.form.deptIds = this.getDeptAllCheckedKeys();\r\n dataScope(this.form).then(response => {\r\n this.$modal.msgSuccess(\"修改成功\");\r\n this.openDataScope = false;\r\n this.getList();\r\n });\r\n }\r\n },\r\n /** 删除按钮操作 */\r\n handleDelete() {\r\n const _selectData = this.$refs.xTable.getRadioRecord(true)\r\n if (_selectData == null) {\r\n this.$message({\r\n type: 'warning',\r\n message: '请选择记录!'\r\n });\r\n return\r\n }\r\n\r\n if (_selectData.roleKey == 'XTGL' || _selectData.roleKey == 'SJGL') {\r\n this.$message({\r\n type: 'warning',\r\n message: '内置角色不能删除!'\r\n });\r\n return\r\n }\r\n\r\n this.$confirm('是否确认删除角色?', '提示', {\r\n confirmButtonText: '确定',\r\n cancelButtonText: '取消',\r\n type: 'warning'\r\n }).then(() => {\r\n this.doDelete(_selectData)\r\n }).catch(() => {\r\n });\r\n },\r\n /**\r\n * 删除提交\r\n */\r\n doDelete: debounce(async function (_selectData) {\r\n let sysTime\r\n let lk\r\n await this.$axios.get('/sysPolicyController/getLicenseKey').then((res) => {\r\n sysTime = res.data.sysTime\r\n lk = res.data.lk\r\n }).catch((error) => {\r\n })\r\n\r\n const param = {\r\n roleId: _selectData.roleId,\r\n sysTime: sysTime,\r\n lk: lk\r\n }\r\n await this.$axios.post('/sysRoleController/delRole', param).then((res) => {\r\n if (res.code == 0) {\r\n this.$message({\r\n type: 'success',\r\n message: '删除成功!'\r\n });\r\n this.getList();\r\n } else {\r\n this.$message({\r\n type: 'error',\r\n message: res.data\r\n });\r\n }\r\n }).catch((error) => {\r\n this.$message({\r\n type: 'error',\r\n message: '删除失败!'\r\n });\r\n this.loading = false\r\n })\r\n }, 1000)\r\n }\r\n};\r\n</script>\r\n\r\n<style scoped>\r\n/* tree border */\r\n.tree-border {\r\n margin-top: 5px;\r\n border: 1px solid #e5e6e7;\r\n background: #FFFFFF none;\r\n border-radius: 4px;\r\n}\r\n</style>\r\n"]}]}
|