ec99d958376833383a820c00638b2990.json 70 KB

1
  1. {"remainingRequest":"/Users/caoge/Desktop/地质现场/VehicleMonitor-WEB/node_modules/babel-loader/lib/index.js!/Users/caoge/Desktop/地质现场/VehicleMonitor-WEB/node_modules/cache-loader/dist/cjs.js??ref--0-0!/Users/caoge/Desktop/地质现场/VehicleMonitor-WEB/node_modules/vue-loader/lib/index.js??vue-loader-options!/Users/caoge/Desktop/地质现场/VehicleMonitor-WEB/src/views/system/menu/index.vue?vue&type=script&lang=js","dependencies":[{"path":"/Users/caoge/Desktop/地质现场/VehicleMonitor-WEB/src/views/system/menu/index.vue","mtime":1708395041891},{"path":"/Users/caoge/Desktop/地质现场/VehicleMonitor-WEB/babel.config.js","mtime":1708395041663},{"path":"/Users/caoge/Desktop/地质现场/VehicleMonitor-WEB/node_modules/cache-loader/dist/cjs.js","mtime":1708395146433},{"path":"/Users/caoge/Desktop/地质现场/VehicleMonitor-WEB/node_modules/babel-loader/lib/index.js","mtime":1708395147257},{"path":"/Users/caoge/Desktop/地质现场/VehicleMonitor-WEB/node_modules/cache-loader/dist/cjs.js","mtime":1708395146433},{"path":"/Users/caoge/Desktop/地质现场/VehicleMonitor-WEB/node_modules/vue-loader/lib/index.js","mtime":1708395147382}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:aW1wb3J0IF90eXBlb2YgZnJvbSAiL1VzZXJzL2Nhb2dlL0Rlc2t0b3AvXHU1NzMwXHU4RDI4XHU3M0IwXHU1NzNBL1ZlaGljbGVNb25pdG9yLVdFQi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdHlwZW9mLmpzIjsKaW1wb3J0IF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIGZyb20gIi9Vc2Vycy9jYW9nZS9EZXNrdG9wL1x1NTczMFx1OEQyOFx1NzNCMFx1NTczQS9WZWhpY2xlTW9uaXRvci1XRUIvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIuanMiOwppbXBvcnQgX29iamVjdFNwcmVhZCBmcm9tICIvVXNlcnMvY2FvZ2UvRGVza3RvcC9cdTU3MzBcdThEMjhcdTczQjBcdTU3M0EvVmVoaWNsZU1vbml0b3ItV0VCL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RTcHJlYWQyLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkubWFwLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LnRvLXN0cmluZy5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuaXRlcmF0b3IuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLmZvci1lYWNoLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuc2xpY2UuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5wdXNoLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LmtleXMuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcuaXRlcmF0b3IuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy93ZWIudXJsLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvd2ViLnVybC1zZWFyY2gtcGFyYW1zLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvd2ViLnVybC1zZWFyY2gtcGFyYW1zLmRlbGV0ZS5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL3dlYi51cmwtc2VhcmNoLXBhcmFtcy5oYXMuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy93ZWIudXJsLXNlYXJjaC1wYXJhbXMuc2l6ZS5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC5leGVjLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMucmVnZXhwLnRlc3QuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcucmVwbGFjZS5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC5jb25zdHJ1Y3Rvci5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC5kb3QtYWxsLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMucmVnZXhwLnN0aWNreS5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC50by1zdHJpbmcuanMiOwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwoKdmFyIEJ1aWxkaW5ncyA9IHJlcXVpcmUuY29udGV4dCgnQC9pY29ucy9CdWlsZGluZ3MnLCBmYWxzZSwgL1wuc3ZnJC8pOwp2YXIgQnVzaW5lc3MgPSByZXF1aXJlLmNvbnRleHQoJ0AvaWNvbnMvQnVzaW5lc3MnLCBmYWxzZSwgL1wuc3ZnJC8pOwp2YXIgRGV2aWNlID0gcmVxdWlyZS5jb250ZXh0KCdAL2ljb25zL0RldmljZScsIGZhbHNlLCAvXC5zdmckLyk7CnZhciBEb2N1bWVudCA9IHJlcXVpcmUuY29udGV4dCgnQC9pY29ucy9Eb2N1bWVudCcsIGZhbHNlLCAvXC5zdmckLyk7CnZhciBPdGhlcnMgPSByZXF1aXJlLmNvbnRleHQoJ0AvaWNvbnMvT3RoZXJzJywgZmFsc2UsIC9cLnN2ZyQvKTsKdmFyIHN2ZyA9IHJlcXVpcmUuY29udGV4dCgnQC9pY29ucy9zdmcnLCBmYWxzZSwgL1wuc3ZnJC8pOwp2YXIgU3lzdGVtID0gcmVxdWlyZS5jb250ZXh0KCdAL2ljb25zL1N5c3RlbScsIGZhbHNlLCAvXC5zdmckLyk7CnZhciBVc2VyID0gcmVxdWlyZS5jb250ZXh0KCdAL2ljb25zL1VzZXInLCBmYWxzZSwgL1wuc3ZnJC8pOwp2YXIgcmVxdWlyZUFsbCA9IGZ1bmN0aW9uIHJlcXVpcmVBbGwocmVxdWlyZUNvbnRleHQpIHsKICByZXR1cm4gcmVxdWlyZUNvbnRleHQua2V5cygpLm1hcChyZXF1aXJlQ29udGV4dCk7Cn07CnZhciBVc2VyRGF0YSA9IHJlcXVpcmVBbGwoVXNlcik7IC8v55So5oi3CnZhciBCdWlsZGluZ3NEYXRhID0gcmVxdWlyZUFsbChCdWlsZGluZ3MpOyAvL+W7uuetkQp2YXIgQnVzaW5lc3NEYXRhID0gcmVxdWlyZUFsbChCdXNpbmVzcyk7IC8v5Yqe5YWsCnZhciBEZXZpY2VEYXRhID0gcmVxdWlyZUFsbChEZXZpY2UpOyAvL+iuvuWkhwp2YXIgRG9jdW1lbnREYXRhID0gcmVxdWlyZUFsbChEb2N1bWVudCk7IC8v5paH5qGjCnZhciBTeXN0ZW1EYXRhID0gcmVxdWlyZUFsbChTeXN0ZW0pOyAvL+ezu+e7nwp2YXIgT3RoZXJzRGF0YSA9IHJlcXVpcmVBbGwoT3RoZXJzKTsgLy/lhbbku5YKdmFyIHN2Z0RhdGEgPSByZXF1aXJlQWxsKHN2Zyk7IC8v6buY6K6kCmltcG9ydCB7IG1hcEdldHRlcnMgfSBmcm9tICd2dWV4JzsKaW1wb3J0IHsgZ2V0TWVudVRyZWUsIGRlbE1lbnUgYXMgX2RlbE1lbnUsIGdldE1lbnVMaXN0IGFzIF9nZXRNZW51TGlzdCwgYWRkTWVudSwgZWRpdE1lbnUgYXMgX2VkaXRNZW51LCBleHBvcnRNZW51RXhjZWwgfSBmcm9tICdAL2FwaS9zeXNNYW5hZ2UnOwpleHBvcnQgZGVmYXVsdCB7CiAgbmFtZTogJ2hvbWUnLAogIGNvbXB1dGVkOiBfb2JqZWN0U3ByZWFkKHt9LCBtYXBHZXR0ZXJzKFsnbmFtZSddKSksCiAgY29tcG9uZW50czoge30sCiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHsKICAgIHJldHVybiB7CiAgICAgIGFjdGl2ZU5hbWU6ICcxJywKICAgICAgdGl0bGVEYXRhOiBbewogICAgICAgIGluZGV4OiAnMScsCiAgICAgICAgdGl0bGU6ICfnlKjmiLcnCiAgICAgIH0sIHsKICAgICAgICBpbmRleDogJzInLAogICAgICAgIHRpdGxlOiAn5bu6562RJwogICAgICB9LCB7CiAgICAgICAgaW5kZXg6ICczJywKICAgICAgICB0aXRsZTogJ+WKnuWFrCcKICAgICAgfSwgewogICAgICAgIGluZGV4OiAnNCcsCiAgICAgICAgdGl0bGU6ICforr7lpIcnCiAgICAgIH0sIHsKICAgICAgICBpbmRleDogJzUnLAogICAgICAgIHRpdGxlOiAn5paH5qGjJwogICAgICB9LCB7CiAgICAgICAgaW5kZXg6ICc2JywKICAgICAgICB0aXRsZTogJ+ezu+e7nycKICAgICAgfSwgewogICAgICAgIGluZGV4OiAnNycsCiAgICAgICAgdGl0bGU6ICflhbbku5YnCiAgICAgIH0sIHsKICAgICAgICBpbmRleDogJzgnLAogICAgICAgIHRpdGxlOiAn6buY6K6kJwogICAgICB9XSwKICAgICAgc3ZnRGF0YTogW10sCiAgICAgIHNlYXJjaERhdGE6IHsKICAgICAgICBtZW51TmFtZTogJycsCiAgICAgICAgc3RhdHVzOiAnJwogICAgICB9LAogICAgICBzaG93Q2hvb3NlSWNvbjogZmFsc2UsCiAgICAgIGZvcm06IHsKICAgICAgICBtZW51SWQ6IHVuZGVmaW5lZCwKICAgICAgICBwYXJlbnRJZDogMCwKICAgICAgICBwYXJlbnROYW1lOiAiIiwKICAgICAgICBtZW51TmFtZTogdW5kZWZpbmVkLAogICAgICAgIGljb246IHVuZGVmaW5lZCwKICAgICAgICBtZW51VHlwZTogIk0iLAogICAgICAgIG9yZGVyTnVtOiB1bmRlZmluZWQsCiAgICAgICAgaXNGcmFtZTogIjEiLAogICAgICAgIGlzQ2FjaGU6ICIxIiwKICAgICAgICB2aXNpYmxlOiAiMSIsCiAgICAgICAgc3RhdHVzOiAiMSIKICAgICAgfSwKICAgICAgYWRkTWVudUZvcm06IHsKICAgICAgICBtZW51SWQ6IHVuZGVmaW5lZCwKICAgICAgICBwYXJlbnRJZDogMCwKICAgICAgICBwYXJlbnROYW1lOiAiIiwKICAgICAgICBtZW51TmFtZTogdW5kZWZpbmVkLAogICAgICAgIGljb246IHVuZGVmaW5lZCwKICAgICAgICBtZW51VHlwZTogIk0iLAogICAgICAgIG9yZGVyTnVtOiB1bmRlZmluZWQsCiAgICAgICAgaXNGcmFtZTogIjEiLAogICAgICAgIGlzQ2FjaGU6ICIxIiwKICAgICAgICB2aXNpYmxlOiAiMSIsCiAgICAgICAgc3RhdHVzOiAiMSIKICAgICAgfSwKICAgICAgaXNTaG9lUGFyZW50TmFtZTogZmFsc2UsCiAgICAgIHBhcmVudE5hbWU6ICcnLAogICAgICBvcGVuOiBmYWxzZSwKICAgICAgYWRkTWVudU9wZW46IGZhbHNlLAogICAgICBtZW51TGlzdDogW10sCiAgICAgIHRpdGxlOiAnJywKICAgICAgYWRkTWVudVRpdGxlOiAnJywKICAgICAgbG9hZGluZzogdHJ1ZSwKICAgICAgbWVudU9wdGlvbnM6IFtdLAogICAgICBzdGF0dXNPcHRpb25zOiBbewogICAgICAgIGxhYmVsOiAn5ZCv55SoJywKICAgICAgICB2YWx1ZTogJzEnCiAgICAgIH0sIHsKICAgICAgICBsYWJlbDogJ+WBnOeUqCcsCiAgICAgICAgdmFsdWU6ICcyJwogICAgICB9XSwKICAgICAgcnVsZXM6IHsKICAgICAgICBwYXJlbnROYW1lOiBbewogICAgICAgICAgcmVxdWlyZWQ6IHRydWUsCiAgICAgICAgICBtZXNzYWdlOiAi6K+36YCJ5oup54i257qn6I+c5Y2VIiwKICAgICAgICAgIHRyaWdnZXI6ICJibHVyIgogICAgICAgIH1dLAogICAgICAgIHBhcmVudElkOiBbewogICAgICAgICAgcmVxdWlyZWQ6IHRydWUsCiAgICAgICAgICBtZXNzYWdlOiAi6K+36YCJ5oup54i257qn6I+c5Y2VIiwKICAgICAgICAgIHRyaWdnZXI6ICJibHVyIgogICAgICAgIH1dLAogICAgICAgIG1lbnVOYW1lOiBbewogICAgICAgICAgcmVxdWlyZWQ6IHRydWUsCiAgICAgICAgICBtZXNzYWdlOiAi6I+c5Y2V5ZCN56ew5LiN6IO95Li656m6IiwKICAgICAgICAgIHRyaWdnZXI6ICJibHVyIgogICAgICAgIH1dLAogICAgICAgIG9yZGVyTnVtOiBbewogICAgICAgICAgcmVxdWlyZWQ6IHRydWUsCiAgICAgICAgICBtZXNzYWdlOiAi6I+c5Y2V6aG65bqP5LiN6IO95Li656m6IiwKICAgICAgICAgIHRyaWdnZXI6ICJibHVyIgogICAgICAgIH1dLAogICAgICAgIHBhdGg6IFt7CiAgICAgICAgICByZXF1aXJlZDogdHJ1ZSwKICAgICAgICAgIG1lc3NhZ2U6ICLot6/nlLHlnLDlnYDkuI3og73kuLrnqboiLAogICAgICAgICAgdHJpZ2dlcjogImJsdXIiCiAgICAgICAgfV0sCiAgICAgICAgcGVybXM6IFt7CiAgICAgICAgICByZXF1aXJlZDogdHJ1ZSwKICAgICAgICAgIG1lc3NhZ2U6ICLmnYPpmZDlrZfnrKbkuI3og73kuLrnqboiLAogICAgICAgICAgdHJpZ2dlcjogImJsdXIiCiAgICAgICAgfV0KICAgICAgfSwKICAgICAgYWRkUnVsZXM6IHsKICAgICAgICBwYXJlbnROYW1lOiBbewogICAgICAgICAgcmVxdWlyZWQ6IHRydWUsCiAgICAgICAgICBtZXNzYWdlOiAi6K+36YCJ5oup54i257qn6I+c5Y2VIiwKICAgICAgICAgIHRyaWdnZXI6ICJibHVyIgogICAgICAgIH1dLAogICAgICAgIHBhcmVudElkOiBbewogICAgICAgICAgcmVxdWlyZWQ6IHRydWUsCiAgICAgICAgICBtZXNzYWdlOiAi6K+36YCJ5oup54i257qn6I+c5Y2VIiwKICAgICAgICAgIHRyaWdnZXI6ICJibHVyIgogICAgICAgIH1dLAogICAgICAgIG1lbnVOYW1lOiBbewogICAgICAgICAgcmVxdWlyZWQ6IHRydWUsCiAgICAgICAgICBtZXNzYWdlOiAi6I+c5Y2V5ZCN56ew5LiN6IO95Li656m6IiwKICAgICAgICAgIHRyaWdnZXI6ICJibHVyIgogICAgICAgIH1dLAogICAgICAgIG9yZGVyTnVtOiBbewogICAgICAgICAgcmVxdWlyZWQ6IHRydWUsCiAgICAgICAgICBtZXNzYWdlOiAi6I+c5Y2V6aG65bqP5LiN6IO95Li656m6IiwKICAgICAgICAgIHRyaWdnZXI6ICJibHVyIgogICAgICAgIH1dLAogICAgICAgIHBhdGg6IFt7CiAgICAgICAgICByZXF1aXJlZDogdHJ1ZSwKICAgICAgICAgIG1lc3NhZ2U6ICLot6/nlLHlnLDlnYDkuI3og73kuLrnqboiLAogICAgICAgICAgdHJpZ2dlcjogImJsdXIiCiAgICAgICAgfV0sCiAgICAgICAgcGVybXM6IFt7CiAgICAgICAgICByZXF1aXJlZDogdHJ1ZSwKICAgICAgICAgIG1lc3NhZ2U6ICLmnYPpmZDlrZfnrKbkuI3og73kuLrnqboiLAogICAgICAgICAgdHJpZ2dlcjogImJsdXIiCiAgICAgICAgfV0KICAgICAgfSwKICAgICAgaWNvblNlbGVjdFJlZjogbnVsbAogICAgfTsKICB9LAogIGNyZWF0ZWQ6IGZ1bmN0aW9uIGNyZWF0ZWQoKSB7CiAgICB0aGlzLnN2Z0RhdGEgPSBbdGhpcy5oYW5kbGVBcnIoVXNlckRhdGEpLCB0aGlzLmhhbmRsZUFycihCdWlsZGluZ3NEYXRhKSwgdGhpcy5oYW5kbGVBcnIoQnVzaW5lc3NEYXRhKSwgdGhpcy5oYW5kbGVBcnIoRGV2aWNlRGF0YSksIHRoaXMuaGFuZGxlQXJyKERvY3VtZW50RGF0YSksIHRoaXMuaGFuZGxlQXJyKFN5c3RlbURhdGEpLCB0aGlzLmhhbmRsZUFycihPdGhlcnNEYXRhKSwgdGhpcy5oYW5kbGVBcnIoc3ZnRGF0YSldOwogICAgdGhpcy5nZXRNZW51TGlzdCh0aGlzLnNlYXJjaERhdGEpOwogIH0sCiAgbWV0aG9kczogewogICAgZWRpdFN2ZzogZnVuY3Rpb24gZWRpdFN2ZyhpdGVtcykgewogICAgICB0aGlzLmZvcm0uaWNvbiA9IGl0ZW1zOwogICAgfSwKICAgIGFkZFN2ZzogZnVuY3Rpb24gYWRkU3ZnKGl0ZW1zKSB7CiAgICAgIHRoaXMuYWRkTWVudUZvcm0uaWNvbiA9IGl0ZW1zOwogICAgfSwKICAgIGhhbmRsZUFycjogZnVuY3Rpb24gaGFuZGxlQXJyKGFycikgewogICAgICB2YXIgdGVtcEFyciA9IFtdOwogICAgICBhcnIuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkgewogICAgICAgIHZhciBzdHIgPSBpdGVtLmRlZmF1bHQuaWQuc2xpY2UoNSk7CiAgICAgICAgdGVtcEFyci5wdXNoKHN0cik7CiAgICAgIH0pOwogICAgICByZXR1cm4gdGVtcEFycjsKICAgIH0sCiAgICBjYW5jZWw6IGZ1bmN0aW9uIGNhbmNlbCgpIHsKICAgICAgdGhpcy5nZXRNZW51TGlzdCh0aGlzLnNlYXJjaERhdGEpOwogICAgICB0aGlzLm9wZW4gPSBmYWxzZTsKICAgIH0sCiAgICBlZGl0Q2FuY2VsOiBmdW5jdGlvbiBlZGl0Q2FuY2VsKCkgewogICAgICB0aGlzLmdldE1lbnVMaXN0KHRoaXMuc2VhcmNoRGF0YSk7CiAgICAgIHRoaXMuYWRkTWVudU9wZW4gPSBmYWxzZTsKICAgIH0sCiAgICBleHBvcnRFeGNlbDogZnVuY3Rpb24gZXhwb3J0RXhjZWwoKSB7CiAgICAgIGV4cG9ydE1lbnVFeGNlbCgnL3N5c3RlbS9tZW51L2V4cG9ydCcpLnRoZW4oZnVuY3Rpb24gKHJlcykgewogICAgICAgIC8vIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbcmVzXSwgeyB0eXBlOiAndGV4dC9wbGFpbjtjaGFyc2V0PXV0Zi04JyB9KTsKICAgICAgICAvLyBjb25zdCB1cmwgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTsKICAgICAgICAvLyBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpOwogICAgICAgIC8vIGEuaHJlZiA9IHVybDsKICAgICAgICAvLyBhLmRvd25sb2FkID0gJ+iPnOWNleWIl+ihqC54bHN4JzsKICAgICAgICAvLyBhLmNsaWNrKCk7CiAgICAgICAgLy8gd2luZG93LlVSTC5yZXZva2VPYmplY3RVUkwodXJsKTsKCiAgICAgICAgaWYgKHJlcy50eXBlID09ICJhcHBsaWNhdGlvbi9qc29uIikgewogICAgICAgICAgdmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7CiAgICAgICAgICByZWFkZXIucmVhZEFzVGV4dChyZXMsICd1dGYtOCcpOwogICAgICAgICAgcmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIG1zZyA9IEpTT04ucGFyc2UocmVhZGVyLnJlc3VsdCk7CiAgICAgICAgICAgIGlmIChtc2cuY29kZSA9PSAyMDApIHsKICAgICAgICAgICAgICB2YXIgYmxvYiA9IG5ldyBCbG9iKFtyZXNdLCB7CiAgICAgICAgICAgICAgICB0eXBlOiAndGV4dC9wbGFpbjtjaGFyc2V0PXV0Zi04JwogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIHZhciB1cmwgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTsKICAgICAgICAgICAgICB2YXIgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTsKICAgICAgICAgICAgICBhLmhyZWYgPSB1cmw7CiAgICAgICAgICAgICAgYS5kb3dubG9hZCA9ICfoj5zljZXliJfooagueGxzeCc7CiAgICAgICAgICAgICAgYS5jbGljaygpOwogICAgICAgICAgICAgIHdpbmRvdy5VUkwucmV2b2tlT2JqZWN0VVJMKHVybCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgTWVzc2FnZSh7CiAgICAgICAgICAgICAgICB0eXBlOiAnZXJyb3InLAogICAgICAgICAgICAgICAgbWVzc2FnZTogbXNnLm1zZwogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgICB9OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB2YXIgYmxvYiA9IG5ldyBCbG9iKFtyZXNdLCB7CiAgICAgICAgICAgIHR5cGU6ICd0ZXh0L3BsYWluO2NoYXJzZXQ9dXRmLTgnCiAgICAgICAgICB9KTsKICAgICAgICAgIHZhciB1cmwgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTsKICAgICAgICAgIHZhciBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpOwogICAgICAgICAgYS5ocmVmID0gdXJsOwogICAgICAgICAgYS5kb3dubG9hZCA9ICfoj5zljZXliJfooagueGxzeCc7CiAgICAgICAgICBhLmNsaWNrKCk7CiAgICAgICAgICB3aW5kb3cuVVJMLnJldm9rZU9iamVjdFVSTCh1cmwpOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9LAogICAgc3VibWl0Rm9ybTogZnVuY3Rpb24gc3VibWl0Rm9ybSgpIHsKICAgICAgdmFyIF90aGlzID0gdGhpczsKICAgICAgdGhpcy4kcmVmcy5hZGRNZW51UmVmLnZhbGlkYXRlKGZ1bmN0aW9uICh2YWxpZCkgewogICAgICAgIGlmICh2YWxpZCkgewogICAgICAgICAgYWRkTWVudShfdGhpcy5hZGRNZW51Rm9ybSkudGhlbihmdW5jdGlvbiAocmVzKSB7CiAgICAgICAgICAgIGlmIChyZXMuY29kZSA9PSAyMDApIHsKICAgICAgICAgICAgICBfdGhpcy4kbWVzc2FnZSh7CiAgICAgICAgICAgICAgICB0eXBlOiAnc3VjY2VzcycsCiAgICAgICAgICAgICAgICBtZXNzYWdlOiAn5re75Yqg5oiQ5Yqf77yBJwogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIF90aGlzLmdldE1lbnVMaXN0KF90aGlzLnNlYXJjaERhdGEpOwogICAgICAgICAgICAgIF90aGlzLmFkZE1lbnVPcGVuID0gZmFsc2U7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgX3RoaXMuJG1lc3NhZ2UoewogICAgICAgICAgICAgICAgdHlwZTogJ2Vycm9yJywKICAgICAgICAgICAgICAgIG1lc3NhZ2U6IHJlcy5tc2cKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0sCiAgICBlZGl0TWVudTogZnVuY3Rpb24gZWRpdE1lbnUoKSB7CiAgICAgIHZhciBfdGhpczIgPSB0aGlzOwogICAgICB0aGlzLiRyZWZzLmVkaXRNZW51UmVmLnZhbGlkYXRlKGZ1bmN0aW9uICh2YWxpZCkgewogICAgICAgIGlmICh2YWxpZCkgewogICAgICAgICAgdmFyIHBhcmFtcyA9IF90aGlzMi5mb3JtOwogICAgICAgICAgX2VkaXRNZW51KHBhcmFtcykudGhlbihmdW5jdGlvbiAocmVzKSB7CiAgICAgICAgICAgIGlmIChyZXMuY29kZSA9PSAyMDApIHsKICAgICAgICAgICAgICBfdGhpczIuJG1lc3NhZ2UoewogICAgICAgICAgICAgICAgdHlwZTogJ3N1Y2Nlc3MnLAogICAgICAgICAgICAgICAgbWVzc2FnZTogJ+S/ruaUueaIkOWKn++8gScKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICBfdGhpczIuZ2V0TWVudUxpc3QoX3RoaXMyLnNlYXJjaERhdGEpOwogICAgICAgICAgICAgIF90aGlzMi5vcGVuID0gZmFsc2U7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgX3RoaXMyLiRtZXNzYWdlKHsKICAgICAgICAgICAgICAgIHR5cGU6ICdlcnJvcicsCiAgICAgICAgICAgICAgICBtZXNzYWdlOiByZXMubXNnCiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9LAogICAgaGFuZGxlVXBkYXRlOiBmdW5jdGlvbiBoYW5kbGVVcGRhdGUocm93KSB7CiAgICAgIHRoaXMuZm9ybS5tZW51SWQgPSByb3cubWVudUlkOwogICAgICB0aGlzLnRpdGxlID0gIuS/ruaUueiPnOWNlSI7CiAgICAgIHRoaXMuZ2V0VHJlZXNlbGVjdCgpOwogICAgICB0aGlzLmZvcm0gPSByb3c7CiAgICAgIHRoaXMub3BlbiA9IHRydWU7CiAgICB9LAogICAgZ2V0TWVudUxpc3Q6IGZ1bmN0aW9uIGdldE1lbnVMaXN0KHBhcmFtcykgewogICAgICB2YXIgX3RoaXMzID0gdGhpczsKICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTsKICAgICAgX2dldE1lbnVMaXN0KHBhcmFtcykudGhlbihmdW5jdGlvbiAocmVzKSB7CiAgICAgICAgaWYgKHJlcy5jb2RlID09IDIwMCkgewogICAgICAgICAgX3RoaXMzLm1lbnVMaXN0ID0gX3RoaXMzLmhhbmRsZVRyZWUocmVzLmRhdGEsICJtZW51SWQiKTsKICAgICAgICAgIF90aGlzMy5sb2FkaW5nID0gZmFsc2U7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIF90aGlzMy4kbWVzc2FnZSh7CiAgICAgICAgICAgIHR5cGU6ICdlcnJvcicsCiAgICAgICAgICAgIG1lc3NhZ2U6IHJlcy5tc2cKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9LAogICAgcmVzZXRTZWFyY2hEYXRhOiBmdW5jdGlvbiByZXNldFNlYXJjaERhdGEoKSB7CiAgICAgIHRoaXMuc2VhcmNoRGF0YSA9IHsKICAgICAgICBtZW51TmFtZTogJycsCiAgICAgICAgc3RhdHVzOiAnJwogICAgICB9OwogICAgICB0aGlzLmdldE1lbnVMaXN0KHRoaXMuc2VhcmNoRGF0YSk7CiAgICB9LAogICAgc2hvd1NlbGVjdEljb246IGZ1bmN0aW9uIHNob3dTZWxlY3RJY29uKCkgewogICAgICB0aGlzLmljb25TZWxlY3RSZWYucmVzZXQoKTsKICAgICAgdGhpcy5zaG93Q2hvb3NlSWNvbiA9IHRydWU7CiAgICB9LAogICAgc2VsZWN0ZWQ6IGZ1bmN0aW9uIHNlbGVjdGVkKG5hbWUpIHsKICAgICAgdGhpcy5mb3JtLmljb24gPSBuYW1lOwogICAgICB0aGlzLnNob3dDaG9vc2VJY29uID0gZmFsc2U7CiAgICB9LAogICAgaGFuZGxlTm9kZUNsaWNrOiBmdW5jdGlvbiBoYW5kbGVOb2RlQ2xpY2sodikgewogICAgICB0aGlzLmZvcm0ucGFyZW50SWQgPSB2LmlkOwogICAgICB0aGlzLmZvcm0ucGFyZW50TmFtZSA9IHYubGFiZWw7CiAgICB9LAogICAgaGFuZGxlQWRkOiBmdW5jdGlvbiBoYW5kbGVBZGQocm93KSB7CiAgICAgIHRoaXMuYWRkTWVudUZvcm0gPSB7CiAgICAgICAgbWVudUlkOiB1bmRlZmluZWQsCiAgICAgICAgcGFyZW50SWQ6IDAsCiAgICAgICAgcGFyZW50TmFtZTogIiIsCiAgICAgICAgbWVudU5hbWU6IHVuZGVmaW5lZCwKICAgICAgICBpY29uOiB1bmRlZmluZWQsCiAgICAgICAgbWVudVR5cGU6ICJNIiwKICAgICAgICBvcmRlck51bTogdW5kZWZpbmVkLAogICAgICAgIGlzRnJhbWU6ICIxIiwKICAgICAgICBpc0NhY2hlOiAiMSIsCiAgICAgICAgdmlzaWJsZTogIjEiLAogICAgICAgIHN0YXR1czogIjEiCiAgICAgIH07CiAgICAgIGlmIChyb3cpIHsKICAgICAgICB0aGlzLmlzU2hvZVBhcmVudE5hbWUgPSB0cnVlOwogICAgICAgIHRoaXMuYWRkTWVudUZvcm0ucGFyZW50TmFtZSA9IHJvdy5tZW51TmFtZTsKICAgICAgICB0aGlzLmFkZE1lbnVGb3JtLnBhcmVudElkID0gcm93Lm1lbnVJZDsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLmlzU2hvZVBhcmVudE5hbWUgPSBmYWxzZTsKICAgICAgfQogICAgICB0aGlzLmdldFRyZWVzZWxlY3QoKTsKICAgICAgdGhpcy5hZGRNZW51T3BlbiA9IHRydWU7CiAgICAgIHRoaXMuYWRkTWVudVRpdGxlID0gIuaWsOWinuiPnOWNlSI7CiAgICB9LAogICAgcmVzZXQ6IGZ1bmN0aW9uIHJlc2V0KCkgewogICAgICB0aGlzLmZvcm0gPSB7CiAgICAgICAgbWVudUlkOiB1bmRlZmluZWQsCiAgICAgICAgcGFyZW50SWQ6IDAsCiAgICAgICAgbWVudU5hbWU6IHVuZGVmaW5lZCwKICAgICAgICBpY29uOiB1bmRlZmluZWQsCiAgICAgICAgbWVudVR5cGU6ICJNIiwKICAgICAgICBvcmRlck51bTogdW5kZWZpbmVkLAogICAgICAgIGlzRnJhbWU6ICIxIiwKICAgICAgICBpc0NhY2hlOiAiMSIsCiAgICAgICAgdmlzaWJsZTogIjEiLAogICAgICAgIHN0YXR1czogIjEiCiAgICAgIH07CiAgICB9LAogICAgZ2V0VHJlZXNlbGVjdDogZnVuY3Rpb24gZ2V0VHJlZXNlbGVjdCgpIHsKICAgICAgdmFyIF90aGlzNCA9IHRoaXM7CiAgICAgIHRoaXMubWVudU9wdGlvbnMgPSBbXTsKICAgICAgZ2V0TWVudVRyZWUoKS50aGVuKGZ1bmN0aW9uIChyZXNwb25zZSkgewogICAgICAgIF90aGlzNC5tZW51T3B0aW9ucyA9IHJlc3BvbnNlLmRhdGE7CiAgICAgIH0pOwogICAgfSwKICAgIGhhbmRsZVF1ZXJ5OiBmdW5jdGlvbiBoYW5kbGVRdWVyeSgpIHsKICAgICAgdGhpcy5nZXRNZW51TGlzdCh0aGlzLnNlYXJjaERhdGEpOwogICAgfSwKICAgIGRlbE1lbnU6IGZ1bmN0aW9uIGRlbE1lbnUoc2NvcGUpIHsKICAgICAgdmFyIF90aGlzNSA9IHRoaXM7CiAgICAgIHRoaXMuJGNvbmZpcm0oJ+ehruWumuimgeWIoOmZpOWQlz8nLCAn5L+h5oGv5o+Q56S6JywgewogICAgICAgIGNvbmZpcm1CdXR0b25UZXh0OiAn56Gu5a6aJywKICAgICAgICBjYW5jZWxCdXR0b25UZXh0OiAn5Y+W5raIJywKICAgICAgICB0eXBlOiAnd2FybmluZycKICAgICAgfSkudGhlbihmdW5jdGlvbiAoKSB7CiAgICAgICAgX2RlbE1lbnUoc2NvcGUubWVudUlkKS50aGVuKGZ1bmN0aW9uIChyZXMpIHsKICAgICAgICAgIGlmIChyZXMuY29kZSA9PSAyMDApIHsKICAgICAgICAgICAgX3RoaXM1LiRtZXNzYWdlKHsKICAgICAgICAgICAgICB0eXBlOiAnc3VjY2VzcycsCiAgICAgICAgICAgICAgbWVzc2FnZTogJ+WIoOmZpOaIkOWKnyEnCiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBfdGhpczUuZ2V0TWVudUxpc3QoX3RoaXM1LnNlYXJjaERhdGEpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgX3RoaXM1LiRtZXNzYWdlKHsKICAgICAgICAgICAgICB0eXBlOiAnZXJyb3InLAogICAgICAgICAgICAgIG1lc3NhZ2U6IHJlcy5tc2cKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uICgpIHsKICAgICAgICBfdGhpczUuJG1lc3NhZ2UoewogICAgICAgICAgdHlwZTogJ2luZm8nLAogICAgICAgICAgbWVzc2FnZTogJ+W3suWPlua2iOWIoOmZpCcKICAgICAgICB9KTsKICAgICAgfSk7CiAgICB9LAogICAgaGFuZGxlVHJlZTogZnVuY3Rpb24gaGFuZGxlVHJlZShkYXRhLCBpZCwgcGFyZW50SWQsIGNoaWxkcmVuKSB7CiAgICAgIHZhciBjb25maWcgPSB7CiAgICAgICAgaWQ6IGlkIHx8ICdpZCcsCiAgICAgICAgcGFyZW50SWQ6IHBhcmVudElkIHx8ICdwYXJlbnRJZCcsCiAgICAgICAgY2hpbGRyZW5MaXN0OiBjaGlsZHJlbiB8fCAnY2hpbGRyZW4nCiAgICAgIH07CiAgICAgIHZhciBjaGlsZHJlbkxpc3RNYXAgPSB7fTsKICAgICAgdmFyIG5vZGVJZHMgPSB7fTsKICAgICAgdmFyIHRyZWUgPSBbXTsKICAgICAgdmFyIF9pdGVyYXRvciA9IF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyKGRhdGEpLAogICAgICAgIF9zdGVwOwogICAgICB0cnkgewogICAgICAgIGZvciAoX2l0ZXJhdG9yLnMoKTsgIShfc3RlcCA9IF9pdGVyYXRvci5uKCkpLmRvbmU7KSB7CiAgICAgICAgICB2YXIgZCA9IF9zdGVwLnZhbHVlOwogICAgICAgICAgdmFyIF9wYXJlbnRJZCA9IGRbY29uZmlnLnBhcmVudElkXTsKICAgICAgICAgIGlmIChjaGlsZHJlbkxpc3RNYXBbX3BhcmVudElkXSA9PSBudWxsKSB7CiAgICAgICAgICAgIGNoaWxkcmVuTGlzdE1hcFtfcGFyZW50SWRdID0gW107CiAgICAgICAgICB9CiAgICAgICAgICBub2RlSWRzW2RbY29uZmlnLmlkXV0gPSBkOwogICAgICAgICAgY2hpbGRyZW5MaXN0TWFwW19wYXJlbnRJZF0ucHVzaChkKTsKICAgICAgICB9CiAgICAgIH0gY2F0Y2ggKGVycikgewogICAgICAgIF9pdGVyYXRvci5lKGVycik7CiAgICAgIH0gZmluYWxseSB7CiAgICAgICAgX2l0ZXJhdG9yLmYoKTsKICAgICAgfQogICAgICB2YXIgX2l0ZXJhdG9yMiA9IF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyKGRhdGEpLAogICAgICAgIF9zdGVwMjsKICAgICAgdHJ5IHsKICAgICAgICBmb3IgKF9pdGVyYXRvcjIucygpOyAhKF9zdGVwMiA9IF9pdGVyYXRvcjIubigpKS5kb25lOykgewogICAgICAgICAgdmFyIF9kID0gX3N0ZXAyLnZhbHVlOwogICAgICAgICAgdmFyIF9wYXJlbnRJZDIgPSBfZFtjb25maWcucGFyZW50SWRdOwogICAgICAgICAgaWYgKG5vZGVJZHNbX3BhcmVudElkMl0gPT0gbnVsbCkgewogICAgICAgICAgICB0cmVlLnB1c2goX2QpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgX2l0ZXJhdG9yMi5lKGVycik7CiAgICAgIH0gZmluYWxseSB7CiAgICAgICAgX2l0ZXJhdG9yMi5mKCk7CiAgICAgIH0KICAgICAgZm9yICh2YXIgX2kgPSAwLCBfdHJlZSA9IHRyZWU7IF9pIDwgX3RyZWUubGVuZ3RoOyBfaSsrKSB7CiAgICAgICAgdmFyIHQgPSBfdHJlZVtfaV07CiAgICAgICAgYWRhcHRUb0NoaWxkcmVuTGlzdCh0KTsKICAgICAgfQogICAgICBmdW5jdGlvbiBhZGFwdFRvQ2hpbGRyZW5MaXN0KG8pIHsKICAgICAgICBpZiAoY2hpbGRyZW5MaXN0TWFwW29bY29uZmlnLmlkXV0gIT09IG51bGwpIHsKICAgICAgICAgIG9bY29uZmlnLmNoaWxkcmVuTGlzdF0gPSBjaGlsZHJlbkxpc3RNYXBbb1tjb25maWcuaWRdXTsKICAgICAgICB9CiAgICAgICAgaWYgKG9bY29uZmlnLmNoaWxkcmVuTGlzdF0pIHsKICAgICAgICAgIHZhciBfaXRlcmF0b3IzID0gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIob1tjb25maWcuY2hpbGRyZW5MaXN0XSksCiAgICAgICAgICAgIF9zdGVwMzsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIGZvciAoX2l0ZXJhdG9yMy5zKCk7ICEoX3N0ZXAzID0gX2l0ZXJhdG9yMy5uKCkpLmRvbmU7KSB7CiAgICAgICAgICAgICAgdmFyIGMgPSBfc3RlcDMudmFsdWU7CiAgICAgICAgICAgICAgYWRhcHRUb0NoaWxkcmVuTGlzdChjKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgICAgIF9pdGVyYXRvcjMuZShlcnIpOwogICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgX2l0ZXJhdG9yMy5mKCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiB0cmVlOwogICAgfSwKICAgIHBhcnNlVGltZTogZnVuY3Rpb24gcGFyc2VUaW1lKHRpbWUsIHBhdHRlcm4pIHsKICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDAgfHwgIXRpbWUpIHsKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgICB2YXIgZm9ybWF0ID0gcGF0dGVybiB8fCAne3l9LXttfS17ZH0ge2h9OntpfTp7c30nOwogICAgICB2YXIgZGF0ZTsKICAgICAgaWYgKF90eXBlb2YodGltZSkgPT09ICdvYmplY3QnKSB7CiAgICAgICAgZGF0ZSA9IHRpbWU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKHR5cGVvZiB0aW1lID09PSAnc3RyaW5nJyAmJiAvXlswLTldKyQvLnRlc3QodGltZSkpIHsKICAgICAgICAgIHRpbWUgPSBwYXJzZUludCh0aW1lKTsKICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aW1lID09PSAnc3RyaW5nJykgewogICAgICAgICAgdGltZSA9IHRpbWUucmVwbGFjZShuZXcgUmVnRXhwKC8tL2dtKSwgJy8nKS5yZXBsYWNlKCdUJywgJyAnKS5yZXBsYWNlKG5ldyBSZWdFeHAoL1wuW1xkXXszfS9nbSksICcnKTsKICAgICAgICB9CiAgICAgICAgaWYgKHR5cGVvZiB0aW1lID09PSAnbnVtYmVyJyAmJiB0aW1lLnRvU3RyaW5nKCkubGVuZ3RoID09PSAxMCkgewogICAgICAgICAgdGltZSA9IHRpbWUgKiAxMDAwOwogICAgICAgIH0KICAgICAgICBkYXRlID0gbmV3IERhdGUodGltZSk7CiAgICAgIH0KICAgICAgdmFyIGZvcm1hdE9iaiA9IHsKICAgICAgICB5OiBkYXRlLmdldEZ1bGxZZWFyKCksCiAgICAgICAgbTogZGF0ZS5nZXRNb250aCgpICsgMSwKICAgICAgICBkOiBkYXRlLmdldERhdGUoKSwKICAgICAgICBoOiBkYXRlLmdldEhvdXJzKCksCiAgICAgICAgaTogZGF0ZS5nZXRNaW51dGVzKCksCiAgICAgICAgczogZGF0ZS5nZXRTZWNvbmRzKCksCiAgICAgICAgYTogZGF0ZS5nZXREYXkoKQogICAgICB9OwogICAgICB2YXIgdGltZV9zdHIgPSBmb3JtYXQucmVwbGFjZSgveyh5fG18ZHxofGl8c3xhKSt9L2csIGZ1bmN0aW9uIChyZXN1bHQsIGtleSkgewogICAgICAgIHZhciB2YWx1ZSA9IGZvcm1hdE9ialtrZXldOwogICAgICAgIC8vIE5vdGU6IGdldERheSgpIHJldHVybnMgMCBvbiBTdW5kYXkKICAgICAgICBpZiAoa2V5ID09PSAnYScpIHsKICAgICAgICAgIHJldHVybiBbJ+aXpScsICfkuIAnLCAn5LqMJywgJ+S4iScsICflm5snLCAn5LqUJywgJ+WFrSddW3ZhbHVlXTsKICAgICAgICB9CiAgICAgICAgaWYgKHJlc3VsdC5sZW5ndGggPiAwICYmIHZhbHVlIDwgMTApIHsKICAgICAgICAgIHZhbHVlID0gJzAnICsgdmFsdWU7CiAgICAgICAgfQogICAgICAgIHJldHVybiB2YWx1ZSB8fCAwOwogICAgICB9KTsKICAgICAgcmV0dXJuIHRpbWVfc3RyOwogICAgfQogIH0KfTs="},{"version":3,"names":["Buildings","require","context","Business","Device","Document","Others","svg","System","User","requireAll","requireContext","keys","map","UserData","BuildingsData","BusinessData","DeviceData","DocumentData","SystemData","OthersData","svgData","mapGetters","getMenuTree","delMenu","getMenuList","addMenu","editMenu","exportMenuExcel","name","computed","_objectSpread","components","data","activeName","titleData","index","title","searchData","menuName","status","showChooseIcon","form","menuId","undefined","parentId","parentName","icon","menuType","orderNum","isFrame","isCache","visible","addMenuForm","isShoeParentName","open","addMenuOpen","menuList","addMenuTitle","loading","menuOptions","statusOptions","label","value","rules","required","message","trigger","path","perms","addRules","iconSelectRef","created","handleArr","methods","editSvg","items","addSvg","arr","tempArr","forEach","item","str","default","id","slice","push","cancel","editCancel","exportExcel","then","res","type","reader","FileReader","readAsText","onload","msg","JSON","parse","result","code","blob","Blob","url","window","URL","createObjectURL","a","document","createElement","href","download","click","revokeObjectURL","Message","submitForm","_this","$refs","addMenuRef","validate","valid","$message","_this2","editMenuRef","params","handleUpdate","row","getTreeselect","_this3","handleTree","resetSearchData","showSelectIcon","reset","selected","handleNodeClick","v","handleAdd","_this4","response","handleQuery","scope","_this5","$confirm","confirmButtonText","cancelButtonText","catch","children","config","childrenList","childrenListMap","nodeIds","tree","_iterator","_createForOfIteratorHelper","_step","s","n","done","d","err","e","f","_iterator2","_step2","_i","_tree","length","t","adaptToChildrenList","o","_iterator3","_step3","c","parseTime","time","pattern","arguments","format","date","_typeof","test","parseInt","replace","RegExp","toString","Date","formatObj","y","getFullYear","m","getMonth","getDate","h","getHours","i","getMinutes","getSeconds","getDay","time_str","key"],"sources":["src/views/system/menu/index.vue"],"sourcesContent":["<template>\r\n <div class=\"dashboard-container\">\r\n <div class=\"search-content\">\r\n <el-input clearable style=\"width: 220px;\" placeholder=\"请输入菜单名称\" v-model=\"searchData.menuName\"></el-input>\r\n <el-select style=\"width: 220px;\" clearable placeholder=\"请选择状态\" v-model=\"searchData.status\">\r\n <el-option v-for=\"item in statusOptions\" :key=\"item.value\" :label=\"item.label\" :value=\"item.value\">\r\n </el-option>\r\n </el-select>\r\n <div class=\"search-btn\">\r\n <div class=\"search\" @click=\"handleQuery\">查询</div>\r\n <div class=\"reset\" @click=\"resetSearchData()\">重置</div>\r\n </div>\r\n </div>\r\n <div class=\"table-content\">\r\n <div class=\"btn\" @click=\"handleAdd()\">\r\n <span class=\"icon font_family\">&#xe604;</span>\r\n 新增\r\n </div>\r\n <div class=\"btn\" @click=\"exportExcel\">\r\n <span class=\"icon font_family\">&#xe605;</span>\r\n <a>导出</a>\r\n </div>\r\n <el-table :indent=\"50\" v-loading=\"loading\" :data=\"menuList\" stripe ref=\"tableRef\" row-key=\"menuId\"\r\n :default-expand-all=\"false\" :tree-props=\"{ children: 'children', hasChildren: 'hasChildren' }\"\r\n highlight-current-row style=\"width: 100%;\">\r\n <el-table-column prop=\"menuName\" label=\"菜单名称\" :show-overflow-tooltip=\"true\" width=\"300\"></el-table-column>\r\n <el-table-column prop=\"icon\" label=\"图标\" align=\"center\" width=\"100\">\r\n <template slot-scope=\"scope\">\r\n <svg-icon style=\"color: #1096DB;\" :icon-class=\"scope.row.icon\" />\r\n </template>\r\n </el-table-column>\r\n <el-table-column prop=\"orderNum\" label=\"排序\" width=\"60\"></el-table-column>\r\n <el-table-column prop=\"perms\" label=\"权限标识\" :show-overflow-tooltip=\"true\"></el-table-column>\r\n <el-table-column prop=\"component\" label=\"组件路径\" :show-overflow-tooltip=\"true\"></el-table-column>\r\n <el-table-column prop=\"status\" label=\"状态\" width=\"80\">\r\n <!-- <template #default=\"scope\">\r\n <dict-tag :options=\"sys_normal_disable\" :value=\"scope.row.status\" />\r\n </template> -->\r\n <template slot-scope=\"scope\">\r\n <div class=\"startUsing\" v-if=\"scope.row.status == '1'\">启用</div>\r\n <div class=\"Deactivate\" v-else>停用</div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"创建时间\" align=\"center\" prop=\"createTime\" width=\"170\">\r\n <template #default=\"scope\">\r\n <span>{{ parseTime(scope.row.createTime) }}</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"操作\" align=\"center\" width=\"200\" class-name=\"small-padding fixed-width\">\r\n <template #default=\"scope\">\r\n <el-button type=\"text\" style=\"color: #2866DD;\" @click=\"handleUpdate(scope.row)\"\r\n v-hasPermi=\"['system:menu:edit']\">修改</el-button>\r\n <el-divider direction=\"vertical\"></el-divider>\r\n <el-button type=\"text\" style=\"color: #2866DD;\" @click=\"handleAdd(scope.row)\">新增</el-button>\r\n <el-divider direction=\"vertical\"></el-divider>\r\n <el-button type=\"text\" style=\"color: #2866DD;\" @click=\"delMenu(scope.row)\"\r\n v-hasPermi=\"['system:menu:remove']\">删除</el-button>\r\n </template>\r\n </el-table-column>\r\n <template v-slot:empty>\r\n <svg-icon icon-class=\"search-none\" style=\"font-size: 64px;\" />\r\n <p>暂无数据</p>\r\n </template>\r\n </el-table>\r\n <!-- 修改菜单对话框 -->\r\n <el-dialog center @close=\"cancel\" :title=\"title\" v-if='this.open' :visible.sync=\"open\" width=\"636px\"\r\n :before-close=\"handleClose\" append-to-body>\r\n <div class=\"dialog_box\" style=\"height: 502px;overflow: auto;\">\r\n <el-form label-width=\"100px\" ref=\"editMenuRef\" :model=\"form\" :rules=\"rules\" label-position=\"right\">\r\n <el-form-item v-if=\"form.parentId !== 0\" label=\"上级菜单\" prop=\"parentName\" key=\"parentName\">\r\n <el-select style=\"width: 340px;\" clearable v-model=\"form.parentName\" placeholder=\"选择上级菜单\">\r\n <el-option :key=\"form.parentId\" :value=\"menuOptions.id\" :label=\"menuOptions.label\" hidden />\r\n <el-tree :data=\"menuOptions\" :props=\"defaultProps\" :node-key=\"menuOptions.id\" accordion highlight-current\r\n @node-click=\"handleNodeClick\" /></el-select>\r\n </el-form-item>\r\n <el-form-item label=\"菜单类型\" prop=\"menuType\" key=\"menuType\">\r\n <el-radio-group v-model=\"form.menuType\">\r\n <el-radio label=\"M\">目录</el-radio>\r\n <el-radio label=\"C\">菜单</el-radio>\r\n <el-radio label=\"F\">按钮</el-radio>\r\n </el-radio-group>\r\n </el-form-item>\r\n <el-form-item v-if=\"form.menuType != 'F'\" label=\"菜单图标\" prop=\"icon\">\r\n <el-popover width=\"290\" trigger=\"click\">\r\n <div class=\"svgList\">\r\n <el-tabs v-model=\"activeName\" type=\"card\">\r\n <el-tab-pane v-for=\"item in titleData\" :label=\"item.title\" :name=\"item.index\">\r\n <svg-icon style=\"display: inline-block;margin-right: 5px;\" @click=\"editSvg(items)\"\r\n v-for=\"items in svgData[item.index - 1]\" :icon-class=\"items\" />\r\n </el-tab-pane>\r\n </el-tabs>\r\n </div>\r\n <el-input style=\"width: 340px;\" slot=\"reference\" placeholder=\"请选择菜单图标\" v-model=\"form.icon\">\r\n <template #prefix>\r\n <svg-icon v-if=\"form.icon\" :icon-class=\"form.icon\" class=\"el-input__icon\"\r\n style=\"height: 32px;width: 16px;position: relative;top: 5px;left: 5px;\" />\r\n <el-icon v-else style=\"height: 32px;width: 16px;position: relative;top: 5px;left: 5px;\">\r\n <search />\r\n </el-icon>\r\n </template></el-input>\r\n </el-popover>\r\n </el-form-item>\r\n <el-form-item label=\"菜单名称\" prop=\"menuName\" key=\"menuName\">\r\n <el-input style=\"width: 340px;\" v-model=\"form.menuName\" placeholder=\"请输入菜单名称\" />\r\n </el-form-item>\r\n <el-form-item label=\"显示排序\" prop=\"orderNum\" key=\"orderNum\">\r\n <el-input-number placeholder=\"请输入显示排序\" v-model=\"form.orderNum\" controls-position=\"right\" :step=\"1\" style=\"width: 340px;\"\r\n :min=\"1\" />\r\n </el-form-item>\r\n <el-form-item label=\"是否外链\" v-if=\"form.menuType != 'F'\" key=\"isFrame\">\r\n <el-radio-group v-model=\"form.isFrame\">\r\n <el-radio label=\"1\">是</el-radio>\r\n <el-radio label=\"2\">否</el-radio>\r\n </el-radio-group>\r\n </el-form-item>\r\n <el-form-item label=\"路由地址\" prop=\"path\" key=\"path\">\r\n <el-input style=\"width: 340px;\" v-model=\"form.path\" placeholder=\"请输入路由地址\" />\r\n </el-form-item>\r\n <el-form-item label=\"组件路径\" v-if=\"form.menuType == 'C'\" prop=\"component\" key=\"component\">\r\n <el-input style=\"width: 340px;\" v-model=\"form.component\" placeholder=\"请输入组件路径\" />\r\n </el-form-item>\r\n <el-form-item label=\"权限字符\" v-if=\"form.menuType != 'M'\" prop=\"perms\" key=\"perms\">\r\n <el-input style=\"width: 340px;\" v-model=\"form.perms\" placeholder=\"请输入权限标识\" maxlength=\"100\" />\r\n </el-form-item>\r\n <el-form-item label=\"路由参数\" v-if=\"form.menuType == 'C'\" key=\"query\">\r\n <el-input style=\"width: 340px;\" v-model=\"form.query\" placeholder=\"请输入路由参数\" maxlength=\"255\" />\r\n </el-form-item>\r\n <el-form-item label=\"是否缓存\" v-if=\"form.menuType == 'C'\" key=\"isCache\">\r\n <el-radio-group v-model=\"form.isCache\">\r\n <el-radio-button label=\"1\">缓存</el-radio-button>\r\n <el-radio-button label=\"2\">不缓存</el-radio-button>\r\n </el-radio-group>\r\n </el-form-item>\r\n <el-form-item label=\"显示状态\" v-if=\"form.menuType != 'F'\" key=\"visible\">\r\n <el-radio-group v-model=\"form.visible\">\r\n <el-radio-button label=\"1\">显示</el-radio-button>\r\n <el-radio-button label=\"2\">隐藏</el-radio-button>\r\n </el-radio-group>\r\n </el-form-item>\r\n <el-form-item label=\"菜单状态\" v-if=\"form.menuType != 'F'\" key=\"status\">\r\n <el-radio-group v-model=\"form.status\">\r\n <el-radio-button label=\"1\">启用</el-radio-button>\r\n <el-radio-button label=\"2\">停用</el-radio-button>\r\n </el-radio-group>\r\n </el-form-item>\r\n </el-form>\r\n </div>\r\n <template #footer>\r\n <div class=\"dialog-footer\">\r\n <div class=\"search\" @click=\"editMenu\">保 存</div>\r\n <div class=\"reset\" @click=\"cancel()\">取 消</div>\r\n </div>\r\n </template>\r\n </el-dialog>\r\n <!-- 添加菜单对话框 -->\r\n <el-dialog center :title=\"addMenuTitle\" v-if='this.addMenuOpen' :visible.sync=\"addMenuOpen\" width=\"636px\"\r\n :before-close=\"handleClose\" append-to-body>\r\n <div class=\"dialog_box\" style=\"height: 502px;overflow: auto;\">\r\n <el-form label-width=\"100px\" ref=\"addMenuRef\" :model=\"addMenuForm\" :rules=\"addRules\" label-position=\"right\">\r\n <el-form-item v-if=\"isShoeParentName\" label=\"上级菜单\" prop=\"parentName\" key=\"parentName\">\r\n <el-select style=\"width: 340px;\" :disabled=\"true\" clearable v-model=\"addMenuForm.parentName\"\r\n placeholder=\"选择上级菜单\">\r\n <el-option :key=\"addMenuForm.parentId\" :value=\"menuOptions.id\" :label=\"menuOptions.label\" hidden />\r\n <el-tree :data=\"menuOptions\" :props=\"defaultProps\" :node-key=\"menuOptions.id\" accordion highlight-current\r\n @node-click=\"handleNodeClick\" /></el-select>\r\n </el-form-item>\r\n <el-form-item label=\"菜单类型\" prop=\"menuType\" key=\"menuType\">\r\n <el-radio-group v-model=\"addMenuForm.menuType\">\r\n <el-radio label=\"M\">目录</el-radio>\r\n <el-radio label=\"C\">菜单</el-radio>\r\n <el-radio label=\"F\">按钮</el-radio>\r\n </el-radio-group>\r\n </el-form-item>\r\n <el-form-item v-if=\"addMenuForm.menuType != 'F'\" label=\"菜单图标\" prop=\"icon\">\r\n <el-popover width=\"290\" trigger=\"click\">\r\n <div class=\"svgList\">\r\n <el-tabs v-model=\"activeName\" type=\"card\">\r\n <el-tab-pane v-for=\"item in titleData\" :label=\"item.title\" :name=\"item.index\">\r\n <svg-icon style=\"display: inline-block;margin-right: 5px;\" @click=\"addSvg(items)\"\r\n v-for=\"items in svgData[item.index - 1]\" :icon-class=\"items\" />\r\n </el-tab-pane>\r\n </el-tabs>\r\n </div>\r\n <el-input class=\"iconInput\" style=\"width: 340px;\" slot=\"reference\" v-model=\"addMenuForm.icon\" placeholder=\"请选择菜单图标\">\r\n <template #prefix>\r\n <svg-icon v-if=\"addMenuForm.icon\" :icon-class=\"addMenuForm.icon\" class=\"el-input__icon\"\r\n style=\"height: 32px;width: 16px;position: relative;top: 5px;left: 5px;\" />\r\n <el-icon v-else style=\"height: 32px;width: 16px;position: relative;top: 5px;left: 5px;\">\r\n <search />\r\n </el-icon>\r\n </template></el-input>\r\n </el-popover>\r\n </el-form-item>\r\n <el-form-item label=\"菜单名称\" prop=\"menuName\" key=\"menuName\">\r\n <el-input style=\"width: 340px;\" v-model=\"addMenuForm.menuName\" placeholder=\"请输入菜单名称\" />\r\n </el-form-item>\r\n <el-form-item label=\"显示排序\" prop=\"orderNum\" key=\"orderNum\">\r\n <el-input-number placeholder=\"请输入显示排序\" v-model=\"addMenuForm.orderNum\" controls-position=\"right\" :step=\"1\" style=\"width: 340px;\"\r\n :min=\"1\" />\r\n </el-form-item>\r\n <el-form-item v-if=\"addMenuForm.menuType != 'F'\" key=\"isFrame\">\r\n <template #label>\r\n <span>\r\n 是否外链\r\n <el-tooltip content=\"选择是外链则路由地址需要以`http(s)://`开头\" placement=\"top\">\r\n <el-icon><question-filled /></el-icon>\r\n </el-tooltip>\r\n </span>\r\n </template>\r\n <el-radio-group v-model=\"addMenuForm.isFrame\">\r\n <el-radio label=\"1\">是</el-radio>\r\n <el-radio label=\"2\">否</el-radio>\r\n </el-radio-group>\r\n </el-form-item>\r\n <el-form-item label=\"路由地址\" prop=\"path\" key=\"path\">\r\n <el-input style=\"width: 340px;\" v-model=\"addMenuForm.path\" placeholder=\"请输入路由地址\" />\r\n </el-form-item>\r\n <el-form-item label=\"组件路径\" prop=\"component\" v-if=\"addMenuForm.menuType == 'C'\" key=\"component\">\r\n <el-input style=\"width: 340px;\" v-model=\"addMenuForm.component\" placeholder=\"请输入组件路径\" />\r\n </el-form-item> \r\n <el-form-item label=\"路由参数\" v-if=\"addMenuForm.menuType !== 'F'\" key=\"query\">\r\n <el-input style=\"width: 340px;\" v-model=\"addMenuForm.query\" placeholder=\"请输入路由参数\" maxlength=\"255\" />\r\n </el-form-item>\r\n <el-form-item label=\"权限字符\" v-if=\"addMenuForm.menuType !== 'M'\" prop=\"perms\" key=\"perms\">\r\n <el-input style=\"width: 340px;\" v-model=\"addMenuForm.perms\" placeholder=\"请输入权限字符\" maxlength=\"100\" />\r\n </el-form-item> \r\n <el-form-item label=\"是否缓存\" v-if=\"addMenuForm.menuType == 'C'\" key=\"isCache\">\r\n <el-radio-group v-model=\"addMenuForm.isCache\">\r\n <el-radio-button label=\"1\">缓存</el-radio-button>\r\n <el-radio-button label=\"2\">不缓存</el-radio-button>\r\n </el-radio-group>\r\n </el-form-item>\r\n <el-form-item label=\"显示状态\" v-if=\"addMenuForm.menuType != 'F'\" key=\"visible\">\r\n <el-radio-group v-model=\"addMenuForm.visible\">\r\n <el-radio-button label=\"1\">显示</el-radio-button>\r\n <el-radio-button label=\"2\">隐藏</el-radio-button>\r\n </el-radio-group>\r\n </el-form-item>\r\n <el-form-item label=\"菜单状态\" v-if=\"addMenuForm.menuType != 'F'\" key=\"status\">\r\n <el-radio-group v-model=\"addMenuForm.status\">\r\n <el-radio-button label=\"1\">启用</el-radio-button>\r\n <el-radio-button label=\"2\">停用</el-radio-button>\r\n </el-radio-group>\r\n </el-form-item>\r\n </el-form>\r\n </div>\r\n <template #footer>\r\n <div class=\"c\">\r\n <div class=\"search\" @click=\"submitForm\">保 存</div>\r\n <div class=\"reset\" @click=\"editCancel()\">取 消</div>\r\n </div>\r\n </template>\r\n </el-dialog>\r\n </div>\r\n\r\n </div>\r\n</template>\r\n\r\n<script>\r\nconst Buildings = require.context('@/icons/Buildings', false, /\\.svg$/)\r\nconst Business = require.context('@/icons/Business', false, /\\.svg$/)\r\nconst Device = require.context('@/icons/Device', false, /\\.svg$/)\r\nconst Document = require.context('@/icons/Document', false, /\\.svg$/)\r\nconst Others = require.context('@/icons/Others', false, /\\.svg$/)\r\nconst svg = require.context('@/icons/svg', false, /\\.svg$/)\r\nconst System = require.context('@/icons/System', false, /\\.svg$/)\r\nconst User = require.context('@/icons/User', false, /\\.svg$/)\r\nconst requireAll = requireContext => requireContext.keys().map(requireContext)\r\n\r\nconst UserData = requireAll(User)//用户\r\nconst BuildingsData = requireAll(Buildings)//建筑\r\nconst BusinessData = requireAll(Business)//办公\r\nconst DeviceData = requireAll(Device)//设备\r\nconst DocumentData = requireAll(Document)//文档\r\nconst SystemData = requireAll(System)//系统\r\nconst OthersData = requireAll(Others)//其他\r\nconst svgData = requireAll(svg)//默认\r\nimport { mapGetters } from 'vuex'\r\nimport { getMenuTree, delMenu, getMenuList, addMenu, editMenu, exportMenuExcel } from '@/api/sysManage'\r\nexport default {\r\n name: 'home',\r\n computed: {\r\n ...mapGetters([\r\n 'name'\r\n ])\r\n },\r\n components: {\r\n },\r\n data() {\r\n return {\r\n activeName: '1',\r\n titleData: [\r\n {\r\n index: '1',\r\n title: '用户'\r\n },\r\n {\r\n index: '2',\r\n title: '建筑'\r\n },\r\n {\r\n index: '3',\r\n title: '办公'\r\n },\r\n {\r\n index: '4',\r\n title: '设备'\r\n },\r\n {\r\n index: '5',\r\n title: '文档'\r\n },\r\n {\r\n index: '6',\r\n title: '系统'\r\n },\r\n {\r\n index: '7',\r\n title: '其他'\r\n },\r\n {\r\n index: '8',\r\n title: '默认'\r\n },\r\n ],\r\n svgData: [],\r\n searchData: {\r\n menuName: '',\r\n status: ''\r\n },\r\n showChooseIcon: false,\r\n form: {\r\n menuId: undefined,\r\n parentId: 0,\r\n parentName: \"\",\r\n menuName: undefined,\r\n icon: undefined,\r\n menuType: \"M\",\r\n orderNum: undefined,\r\n isFrame: \"1\",\r\n isCache: \"1\",\r\n visible: \"1\",\r\n status: \"1\"\r\n },\r\n addMenuForm: {\r\n menuId: undefined,\r\n parentId: 0,\r\n parentName: \"\",\r\n menuName: undefined,\r\n icon: undefined,\r\n menuType: \"M\",\r\n orderNum: undefined,\r\n isFrame: \"1\",\r\n isCache: \"1\",\r\n visible: \"1\",\r\n status: \"1\"\r\n },\r\n isShoeParentName: false,\r\n parentName: '',\r\n open: false,\r\n addMenuOpen: false,\r\n menuList: [],\r\n title: '',\r\n addMenuTitle: '',\r\n loading: true,\r\n menuOptions: [],\r\n statusOptions: [\r\n {\r\n label: '启用',\r\n value: '1'\r\n },\r\n {\r\n label: '停用',\r\n value: '2'\r\n }\r\n ],\r\n rules: {\r\n parentName: [{ required: true, message: \"请选择父级菜单\", trigger: \"blur\" }],\r\n parentId: [{ required: true, message: \"请选择父级菜单\", trigger: \"blur\" }],\r\n menuName: [{ required: true, message: \"菜单名称不能为空\", trigger: \"blur\" }],\r\n orderNum: [{ required: true, message: \"菜单顺序不能为空\", trigger: \"blur\" }],\r\n path: [{ required: true, message: \"路由地址不能为空\", trigger: \"blur\" }],\r\n perms: [{ required: true, message: \"权限字符不能为空\", trigger: \"blur\" }]\r\n },\r\n addRules: {\r\n parentName: [{ required: true, message: \"请选择父级菜单\", trigger: \"blur\" }],\r\n parentId: [{ required: true, message: \"请选择父级菜单\", trigger: \"blur\" }],\r\n menuName: [{ required: true, message: \"菜单名称不能为空\", trigger: \"blur\" }],\r\n orderNum: [{ required: true, message: \"菜单顺序不能为空\", trigger: \"blur\" }],\r\n path: [{ required: true, message: \"路由地址不能为空\", trigger: \"blur\" }],\r\n perms: [{ required: true, message: \"权限字符不能为空\", trigger: \"blur\" }], \r\n },\r\n iconSelectRef: null,\r\n }\r\n },\r\n created() {\r\n this.svgData = [this.handleArr(UserData), this.handleArr(BuildingsData), this.handleArr(BusinessData), this.handleArr(DeviceData), this.handleArr(DocumentData), this.handleArr(SystemData), this.handleArr(OthersData), this.handleArr(svgData)]\r\n this.getMenuList(this.searchData)\r\n },\r\n methods: {\r\n editSvg(items) {\r\n this.form.icon = items\r\n },\r\n addSvg(items) {\r\n this.addMenuForm.icon = items\r\n },\r\n handleArr(arr) {\r\n let tempArr = []\r\n arr.forEach(item => {\r\n let str = item.default.id.slice(5)\r\n tempArr.push(str)\r\n })\r\n return tempArr\r\n },\r\n cancel() {\r\n this.getMenuList(this.searchData)\r\n this.open = false\r\n },\r\n editCancel() {\r\n this.getMenuList(this.searchData)\r\n this.addMenuOpen = false\r\n },\r\n exportExcel() {\r\n exportMenuExcel('/system/menu/export').then(res => {\r\n // const blob = new Blob([res], { type: 'text/plain;charset=utf-8' });\r\n // const url = window.URL.createObjectURL(blob);\r\n // const a = document.createElement('a');\r\n // a.href = url;\r\n // a.download = '菜单列表.xlsx';\r\n // a.click();\r\n // window.URL.revokeObjectURL(url);\r\n\r\n\r\n if (res.type == \"application/json\") {\r\n const reader = new FileReader(); \r\n reader.readAsText(res, 'utf-8'); \r\n reader.onload = function () {\r\n const msg = JSON.parse(reader.result);\r\n if(msg.code == 200){\r\n const blob = new Blob([res], { type: 'text/plain;charset=utf-8' });\r\n const url = window.URL.createObjectURL(blob);\r\n const a = document.createElement('a');\r\n a.href = url;\r\n a.download = '菜单列表.xlsx';\r\n a.click();\r\n window.URL.revokeObjectURL(url);\r\n } else{\r\n Message({\r\n type: 'error',\r\n message: msg.msg\r\n });\r\n } \r\n }\r\n }else{\r\n const blob = new Blob([res], { type: 'text/plain;charset=utf-8' });\r\n const url = window.URL.createObjectURL(blob);\r\n const a = document.createElement('a');\r\n a.href = url;\r\n a.download = '菜单列表.xlsx';\r\n a.click();\r\n window.URL.revokeObjectURL(url);\r\n }\r\n\r\n\r\n\r\n })\r\n },\r\n submitForm() {\r\n this.$refs.addMenuRef.validate(valid => {\r\n if (valid) {\r\n addMenu(this.addMenuForm).then(res => {\r\n if (res.code == 200) {\r\n this.$message({\r\n type: 'success',\r\n message: '添加成功!'\r\n });\r\n this.getMenuList(this.searchData)\r\n this.addMenuOpen = false\r\n } else {\r\n this.$message({\r\n type: 'error',\r\n message: res.msg\r\n });\r\n }\r\n })\r\n }\r\n })\r\n },\r\n editMenu() {\r\n this.$refs.editMenuRef.validate(valid => {\r\n if (valid) {\r\n let params = this.form\r\n editMenu(params).then(res => {\r\n if (res.code == 200) {\r\n this.$message({\r\n type: 'success',\r\n message: '修改成功!'\r\n });\r\n this.getMenuList(this.searchData)\r\n this.open = false\r\n } else {\r\n this.$message({\r\n type: 'error',\r\n message: res.msg\r\n });\r\n }\r\n })\r\n }\r\n })\r\n },\r\n handleUpdate(row) {\r\n this.form.menuId = row.menuId\r\n this.title = \"修改菜单\"\r\n this.getTreeselect();\r\n this.form = row\r\n this.open = true\r\n },\r\n getMenuList(params) {\r\n this.loading = true\r\n getMenuList(params).then(res => {\r\n if (res.code == 200) {\r\n this.menuList = this.handleTree(res.data, \"menuId\")\r\n this.loading = false\r\n } else {\r\n this.$message({\r\n type: 'error',\r\n message: res.msg\r\n })\r\n }\r\n\r\n })\r\n },\r\n resetSearchData() {\r\n this.searchData = {\r\n menuName: '',\r\n status: ''\r\n }\r\n this.getMenuList(this.searchData)\r\n },\r\n showSelectIcon() {\r\n this.iconSelectRef.reset();\r\n this.showChooseIcon = true;\r\n },\r\n selected(name) {\r\n this.form.icon = name;\r\n this.showChooseIcon = false;\r\n },\r\n handleNodeClick(v) {\r\n this.form.parentId = v.id\r\n this.form.parentName = v.label\r\n },\r\n handleAdd(row) {\r\n this.addMenuForm = {\r\n menuId: undefined,\r\n parentId: 0,\r\n parentName: \"\",\r\n menuName: undefined,\r\n icon: undefined,\r\n menuType: \"M\",\r\n orderNum: undefined,\r\n isFrame: \"1\",\r\n isCache: \"1\",\r\n visible: \"1\",\r\n status: \"1\"\r\n }\r\n if (row) {\r\n this.isShoeParentName = true\r\n this.addMenuForm.parentName = row.menuName\r\n this.addMenuForm.parentId = row.menuId\r\n } else {\r\n this.isShoeParentName = false\r\n }\r\n\r\n this.getTreeselect();\r\n this.addMenuOpen = true;\r\n this.addMenuTitle = \"新增菜单\";\r\n },\r\n reset() {\r\n this.form = {\r\n menuId: undefined,\r\n parentId: 0,\r\n menuName: undefined,\r\n icon: undefined,\r\n menuType: \"M\",\r\n orderNum: undefined,\r\n isFrame: \"1\",\r\n isCache: \"1\",\r\n visible: \"1\",\r\n status: \"1\"\r\n }\r\n },\r\n getTreeselect() {\r\n this.menuOptions = [];\r\n getMenuTree().then(response => {\r\n this.menuOptions = response.data\r\n })\r\n },\r\n handleQuery() {\r\n this.getMenuList(this.searchData)\r\n },\r\n delMenu(scope) {\r\n this.$confirm('确定要删除吗?', '信息提示', {\r\n confirmButtonText: '确定',\r\n cancelButtonText: '取消',\r\n type: 'warning'\r\n }).then(() => {\r\n delMenu(scope.menuId).then(res => {\r\n if (res.code == 200) {\r\n this.$message({\r\n type: 'success',\r\n message: '删除成功!'\r\n });\r\n this.getMenuList(this.searchData)\r\n } else {\r\n this.$message({\r\n type: 'error',\r\n message: res.msg\r\n });\r\n }\r\n })\r\n }).catch(() => {\r\n this.$message({\r\n type: 'info',\r\n message: '已取消删除'\r\n });\r\n })\r\n\r\n },\r\n handleTree(data, id, parentId, children) {\r\n let config = {\r\n id: id || 'id',\r\n parentId: parentId || 'parentId',\r\n childrenList: children || 'children'\r\n };\r\n\r\n var childrenListMap = {};\r\n var nodeIds = {};\r\n var tree = [];\r\n\r\n for (let d of data) {\r\n let parentId = d[config.parentId];\r\n if (childrenListMap[parentId] == null) {\r\n childrenListMap[parentId] = [];\r\n }\r\n nodeIds[d[config.id]] = d;\r\n childrenListMap[parentId].push(d);\r\n }\r\n\r\n for (let d of data) {\r\n let parentId = d[config.parentId];\r\n if (nodeIds[parentId] == null) {\r\n tree.push(d);\r\n }\r\n }\r\n\r\n for (let t of tree) {\r\n adaptToChildrenList(t);\r\n }\r\n\r\n function adaptToChildrenList(o) {\r\n if (childrenListMap[o[config.id]] !== null) {\r\n o[config.childrenList] = childrenListMap[o[config.id]];\r\n }\r\n if (o[config.childrenList]) {\r\n for (let c of o[config.childrenList]) {\r\n adaptToChildrenList(c);\r\n }\r\n }\r\n }\r\n return tree;\r\n },\r\n parseTime(time, pattern) {\r\n if (arguments.length === 0 || !time) {\r\n return null\r\n }\r\n const format = pattern || '{y}-{m}-{d} {h}:{i}:{s}'\r\n let date\r\n if (typeof time === 'object') {\r\n date = time\r\n } else {\r\n if ((typeof time === 'string') && (/^[0-9]+$/.test(time))) {\r\n time = parseInt(time)\r\n } else if (typeof time === 'string') {\r\n time = time.replace(new RegExp(/-/gm), '/').replace('T', ' ').replace(new RegExp(/\\.[\\d]{3}/gm), '');\r\n }\r\n if ((typeof time === 'number') && (time.toString().length === 10)) {\r\n time = time * 1000\r\n }\r\n date = new Date(time)\r\n }\r\n const formatObj = {\r\n y: date.getFullYear(),\r\n m: date.getMonth() + 1,\r\n d: date.getDate(),\r\n h: date.getHours(),\r\n i: date.getMinutes(),\r\n s: date.getSeconds(),\r\n a: date.getDay()\r\n }\r\n const time_str = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => {\r\n let value = formatObj[key]\r\n // Note: getDay() returns 0 on Sunday\r\n if (key === 'a') { return ['日', '一', '二', '三', '四', '五', '六'][value] }\r\n if (result.length > 0 && value < 10) {\r\n value = '0' + value\r\n }\r\n return value || 0\r\n })\r\n return time_str\r\n }\r\n }\r\n}\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n.dashboard {\r\n &-container {\r\n margin: 30px;\r\n }\r\n\r\n &-text {\r\n font-size: 30px;\r\n line-height: 46px;\r\n }\r\n}\r\n\r\n.dashboard-container {\r\n .search-content {\r\n width: 100%;\r\n height: 74px;\r\n background-color: #fff;\r\n display: flex;\r\n align-items: center;\r\n padding-left: 10px;\r\n\r\n .el-input {\r\n margin: 0 10px;\r\n }\r\n\r\n .el-select {\r\n margin: 0 10px;\r\n }\r\n\r\n .search-btn {\r\n display: flex;\r\n align-items: center;\r\n height: 100%;\r\n margin-left: 10px;\r\n\r\n div {\r\n // margin: 0 6px;\r\n display: inline-block;\r\n width: 80px;\r\n height: 40px;\r\n border-radius: 2px;\r\n font-size: 14px;\r\n line-height: 40px;\r\n text-align: center;\r\n }\r\n\r\n div:hover {\r\n cursor: pointer;\r\n }\r\n\r\n .search {\r\n margin-right: 10px;\r\n background-color: #2766DD;\r\n color: #F7F8FB;\r\n }\r\n\r\n .search:hover {\r\n background-color: #4D85F4;\r\n }\r\n\r\n .reset {\r\n color: #333334;\r\n border: 1px solid #D7D7D7;\r\n }\r\n\r\n .reset:hover {\r\n color: #1F9FFF;\r\n border: 1px solid #1F9FFF;\r\n }\r\n }\r\n }\r\n\r\n .table-content {\r\n margin-top: 15px;\r\n width: 100%;\r\n background-color: #fff;\r\n padding: 0 20px;\r\n\r\n .btn {\r\n margin: 15px 20px 15px 0;\r\n cursor: pointer;\r\n float: left;\r\n text-align: center;\r\n width: 98px;\r\n height: 34px;\r\n border-radius: 2px;\r\n border: 1px solid #ABC7FD;\r\n line-height: 34px;\r\n font-weight: 400;\r\n font-size: 14px;\r\n color: #2250C8;\r\n background-color: #E7EEFF;\r\n }\r\n\r\n .btn:hover {\r\n color: #FFFFFF;\r\n background-color: #2250C8;\r\n border: 1px solid #2250C8;\r\n }\r\n\r\n .btn:active {\r\n color: #FFFFFF;\r\n background-color: #194DA4;\r\n border: 1px solid #194DA4;\r\n }\r\n\r\n .startUsing {\r\n width: 54px;\r\n height: 24px;\r\n margin: 14.5px auto 0;\r\n line-height: 24px;\r\n text-align: center;\r\n font-size: 12px;\r\n color: #00974D;\r\n border-radius: 4px;\r\n background-color: #E7FAF0;\r\n border: 1px solid #BEFDDD;\r\n }\r\n\r\n .Deactivate {\r\n width: 54px;\r\n height: 24px;\r\n margin: 14.5px auto 0;\r\n line-height: 24px;\r\n text-align: center;\r\n font-size: 12px;\r\n color: #FF9933;\r\n border-radius: 4px;\r\n background-color: #FFF3E8;\r\n border: 1px solid #FDE6CF;\r\n }\r\n\r\n .operateBtn {\r\n display: flex;\r\n justify-content: center;\r\n color: #1E9FFF;\r\n\r\n div {\r\n margin: 0 5px;\r\n cursor: pointer;\r\n }\r\n }\r\n\r\n .pagination {\r\n margin: 10px 0;\r\n width: 100%;\r\n height: 20px;\r\n\r\n .el-pagination {\r\n float: right;\r\n }\r\n } \r\n }\r\n\r\n}\r\n\r\n::v-deep .el-dialog__body {\r\n padding: 20px 95px !important;\r\n}\r\n\r\n// 选中后radio文本的颜色\r\n::v-deep .el-radio__input.is-checked+.el-radio__label {\r\n color: #2766DD\r\n}\r\n\r\n/* radio选中后小圆点的颜色 */\r\n::v-deep .el-radio__input.is-checked .el-radio__inner {\r\n background: #2766DD !important;\r\n border-color: #2766DD !important;\r\n}\r\n\r\n::v-deep.el-radio-button {\r\n // margin-right: 15px;\r\n border-radius: 4px;\r\n\r\n .el-radio-button__inner {\r\n //修改按钮样式\r\n width: 120px;\r\n height: 42px;\r\n background: #F7F8FA;\r\n color: #333;\r\n border: 0 !important;\r\n }\r\n\r\n .el-radio-button__orig-radio:checked+.el-radio-button__inner {\r\n // 修改按钮激活样式\r\n color: #fff;\r\n background-color: #2766DD;\r\n border-color: #2766DD;\r\n box-shadow: -1px 0 0 0 #2766DD;\r\n }\r\n}\r\n::v-deep .el-input-number .el-input__inner{\r\n text-align: left !important;\r\n}\r\n</style>\r\n"],"mappings":"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"}]}