| 1 |
- {"remainingRequest":"D:\\front\\item\\zyAdmin\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!D:\\front\\item\\zyAdmin\\src\\pages\\user\\list\\index.vue?vue&type=script&lang=js","dependencies":[{"path":"D:\\front\\item\\zyAdmin\\src\\pages\\user\\list\\index.vue","mtime":1761614939082},{"path":"D:\\front\\item\\zyAdmin\\node_modules\\cache-loader\\dist\\cjs.js","mtime":1761614927801},{"path":"D:\\front\\item\\zyAdmin\\node_modules\\babel-loader\\lib\\index.js","mtime":1761614927320},{"path":"D:\\front\\item\\zyAdmin\\node_modules\\cache-loader\\dist\\cjs.js","mtime":1761614927801},{"path":"D:\\front\\item\\zyAdmin\\node_modules\\vue-loader\\lib\\index.js","mtime":1761614937402}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:DQppbXBvcnQgdXNlckxhYmVsIGZyb20gJ0AvY29tcG9uZW50cy91c2VyTGFiZWwnOw0KaW1wb3J0IHsgbWFwU3RhdGUgfSBmcm9tICd2dWV4JzsNCmltcG9ydCBleHBhbmRSb3cgZnJvbSAnLi90YWJsZUV4cGFuZC52dWUnOw0KaW1wb3J0IHVzZXJFZGl0IGZyb20gJy4vaGFuZGxlL3VzZXJFZGl0LnZ1ZSc7DQppbXBvcnQgew0KICB1c2VyTGlzdCwNCiAgZ2V0VXNlckRhdGEsDQogIGlzU2hvd0FwaSwNCiAgZWRpdE90aGVyQXBpLA0KICBnaXZlTGV2ZWxBcGksDQogIHVzZXJTZXRHcm91cCwNCiAgdXNlckdyb3VwQXBpLA0KICBsZXZlbExpc3RBcGksDQogIHVzZXJTZXRMYWJlbEFwaSwNCiAgdXNlckxhYmVsQXBpLA0KICB1c2VyU3luY2hybywNCiAgZ2V0VXNlclNhdmVGb3JtLA0KICBnaXZlTGV2ZWxUaW1lQXBpLA0KICBnZXRVc2VySW5mbywNCiAgc2V0VXNlciwNCiAgZWRpdFVzZXIsDQogIHNhdmVTZXRMYWJlbCwNCn0gZnJvbSAnQC9hcGkvdXNlcic7DQppbXBvcnQgeyBhZ2VudFNwcmVhZEFwaSB9IGZyb20gJ0AvYXBpL2FnZW50JzsNCmltcG9ydCB7IGV4cG9ydFVzZXJMaXN0IH0gZnJvbSAnQC9hcGkvZXhwb3J0JzsNCmltcG9ydCBlZGl0RnJvbSBmcm9tICcuLi8uLi8uLi9jb21wb25lbnRzL2Zyb20vZnJvbSc7DQppbXBvcnQgc2VuZEZyb20gZnJvbSAnQC9jb21wb25lbnRzL3NlbmRDb3Vwb25zL2luZGV4JzsNCmltcG9ydCB1c2VyRGV0YWlscyBmcm9tICcuL2hhbmRsZS91c2VyRGV0YWlscyc7DQppbXBvcnQgbmV3c0NhdGVnb3J5IGZyb20gJ0AvY29tcG9uZW50cy9uZXdzQ2F0ZWdvcnkvaW5kZXgnOw0KaW1wb3J0IGN1c3RvbWVySW5mbyBmcm9tICdAL2NvbXBvbmVudHMvY3VzdG9tZXJJbmZvJzsNCmltcG9ydCB7IGNpdHlMaXN0IH0gZnJvbSAnQC9hcGkvYXBwJzsNCmltcG9ydCB7IG1lbWJlcnNoaXBEYXRhTGlzdEFwaSB9IGZyb20gJ0AvYXBpL21lbWJlcnNoaXBMZXZlbCc7DQoNCmV4cG9ydCBkZWZhdWx0IHsNCiAgbmFtZTogJ3VzZXJfbGlzdCcsDQogIGNvbXBvbmVudHM6IHsNCiAgICBleHBhbmRSb3csDQogICAgZWRpdEZyb20sDQogICAgc2VuZEZyb20sDQogICAgdXNlckRldGFpbHMsDQogICAgbmV3c0NhdGVnb3J5LA0KICAgIGN1c3RvbWVySW5mbywNCiAgICB1c2VyTGFiZWwsDQogICAgdXNlckVkaXQsDQogIH0sDQogIGRhdGEoKSB7DQogICAgcmV0dXJuIHsNCiAgICAgIGRhdGFMYWJlbDogW10sDQogICAgICBzZWxlY3REYXRhTGFiZWw6IFtdLA0KICAgICAgdXNlckRhdGE6IHt9LA0KICAgICAgbW9kYWxzOiBmYWxzZSwNCiAgICAgIHNlbGVjdExhYmVsU2hvdzogZmFsc2UsDQogICAgICBsYWJlbFNob3c6IGZhbHNlLA0KICAgICAgY3VzdG9tZXJTaG93OiBmYWxzZSwNCiAgICAgIHByb21vdGVyU2hvdzogZmFsc2UsDQogICAgICBsYWJlbEFjdGl2ZTogew0KICAgICAgICB1aWQ6IDAsDQogICAgICB9LA0KICAgICAgZm9ybUlubGluZTogew0KICAgICAgICB1aWQ6IDAsDQogICAgICAgIHNwcmVhZF91aWQ6IDAsDQogICAgICAgIGltYWdlOiAnJywNCiAgICAgIH0sDQogICAgICBwaWNrZXJPcHRpb25zOiB0aGlzLiR0aW1lT3B0aW9ucywNCiAgICAgIGNvbGxhcHNlOiBmYWxzZSwNCiAgICAgIGhlYWRlTnVtOiBbDQogICAgICAgIHsgdHlwZTogJycsIG5hbWU6ICflhajpg6gnIH0sDQogICAgICAgIHsgdHlwZTogJ3dlY2hhdCcsIG5hbWU6ICflvq7kv6HlhazkvJflj7cnIH0sDQogICAgICAgIHsgdHlwZTogJ3JvdXRpbmUnLCBuYW1lOiAn5b6u5L+h5bCP56iL5bqPJyB9LA0KICAgICAgICB7IHR5cGU6ICdoNScsIG5hbWU6ICdINScgfSwNCiAgICAgICAgeyB0eXBlOiAncGMnLCBuYW1lOiAnUEMnIH0sDQogICAgICAgIHsgdHlwZTogJ2FwcCcsIG5hbWU6ICdBUFAnIH0sDQogICAgICBdLA0KICAgICAgYWRkcmVzczogW10sDQogICAgICBhZGRyZXNEYXRhOiBbXSwNCiAgICAgIGlzU2hvd1NlbmQ6IHRydWUsDQogICAgICBtb2RhbDEzOiBmYWxzZSwNCiAgICAgIG1heENvbHM6IDQsDQogICAgICBzY3JvbGxlckhlaWdodDogJzYwMCcsDQogICAgICBjb250ZW50VG9wOiAnMTMwJywNCiAgICAgIGNvbnRlbnRXaWR0aDogJzk4JScsDQogICAgICBncmlkOiB7DQogICAgICAgIHhsOiA2LA0KICAgICAgICBsZzogNiwNCiAgICAgICAgbWQ6IDgsDQogICAgICAgIHNtOiAxMiwNCiAgICAgICAgeHM6IDI0LA0KICAgICAgfSwNCiAgICAgIGdyaWQyOiB7DQogICAgICAgIHhsOiA4LA0KICAgICAgICBsZzogOCwNCiAgICAgICAgbWQ6IDgsDQogICAgICAgIHNtOiAxMiwNCiAgICAgICAgeHM6IDI0LA0KICAgICAgfSwNCiAgICAgIGxvYWRpbmc6IGZhbHNlLA0KICAgICAgdG90YWw6IDAsDQogICAgICB1c2VyRnJvbTogew0KICAgICAgICBsYWJlbF9pZDogJycsDQogICAgICAgIHVzZXJfdHlwZTogJycsDQogICAgICAgIHN0YXR1czogJycsDQogICAgICAgIHNleDogJycsDQogICAgICAgIGlzX3Byb21vdGVyOiAnJywNCiAgICAgICAgY291bnRyeTogJycsDQogICAgICAgIGlzTWVtYmVyOiAnJywNCiAgICAgICAgcGF5X2NvdW50X251bTogWycnLCAnJ10sDQogICAgICAgIGJhbGFuY2U6IFsnJywgJyddLA0KICAgICAgICBpbnRlZ3JhbDogWycnLCAnJ10sDQogICAgICAgIHBheV9jb3VudF9tb25leTogWycnLCAnJ10sDQogICAgICAgIHJlY2hhcmdlX2NvdW50OiBbJycsICcnXSwNCiAgICAgICAgdXNlcl90aW1lX3R5cGU6ICcnLA0KICAgICAgICB1c2VyX3RpbWU6ICcnLA0KICAgICAgICBiZWZvcmVfcGF5X3RpbWU6ICcnLA0KICAgICAgICBuaWNrbmFtZTogJycsDQogICAgICAgIHByb3ZpbmNlOiAnJywNCiAgICAgICAgY2l0eTogJycsDQogICAgICAgIHBhZ2U6IDEsDQogICAgICAgIGxpbWl0OiAxNSwNCiAgICAgICAgbGV2ZWw6ICcnLA0KICAgICAgICBncm91cF9pZDogJycsDQogICAgICAgIGFnZW50X2xldmVsOiAnJywNCiAgICAgICAgZmllbGRfa2V5OiAnJywNCiAgICAgIH0sDQogICAgICBiZWZvcmVfcGF5X3RpbWU6ICcnLA0KICAgICAgZmllbGRfa2V5OiAnJywNCiAgICAgIGxldmVsOiAnJywNCiAgICAgIGdyb3VwX2lkOiAnJywNCiAgICAgIGFnZW50X2xldmVsOiAnJywNCiAgICAgIGxhYmVsX2lkOiAnJywNCiAgICAgIHVzZXJfdGltZV90eXBlOiAnJywNCiAgICAgIHBheV9jb3VudDogJycsDQogICAgICB1c2VyTGlzdHM6IFtdLA0KICAgICAgRnJvbURhdGE6IG51bGwsDQogICAgICBzZWxlY3Rpb25MaXN0OiBbXSwNCiAgICAgIHVzZXJfaWRzOiAnJywNCiAgICAgIHNlbGVjdGVkRGF0YTogW10sDQogICAgICB0aW1lVmFsOiBbXSwNCiAgICAgIGdyb3VwTGlzdDogW10sDQogICAgICBsZXZlbExpc3Q6IFtdLA0KICAgICAgbWVtYmVyc2hpcExpc3Q6IFtdLA0KICAgICAgbGFiZWxGcm9tOiB7DQogICAgICAgIHBhZ2U6IDEsDQogICAgICAgIGxpbWl0OiAnJywNCiAgICAgIH0sDQogICAgICBsYWJlbExpc3RzOiBbXSwNCiAgICAgIHNlbGVjdGVkSWRzOiBbXSwgLy/pgInkuK3lkIjlubbpobnnmoRpZA0KICAgICAgaWRzOiBbXSwNCiAgICB9Ow0KICB9LA0KICBjb21wdXRlZDogew0KICAgIC4uLm1hcFN0YXRlKCdtZWRpYScsIFsnaXNNb2JpbGUnXSksDQogIH0sDQogIGNyZWF0ZWQoKSB7DQogICAgdGhpcy5nZXRMaXN0KCk7DQogICAgdGhpcy5nZXRDaXR5TGlzdCgpOw0KICB9LA0KICBtb3VudGVkKCkgew0KICAgIHRoaXMudXNlckdyb3VwKCk7DQogICAgdGhpcy5sZXZlbExpc3RzKCk7DQogICAgdGhpcy5tZW1iZXJzaGlwRGF0YUxpc3QoKTsNCiAgICAvLyB0aGlzLmdyb3VwTGlzdHMoKTsNCiAgfSwNCiAgbWV0aG9kczogew0KICAgIGdldENpdHlMaXN0KCkgew0KICAgICAgY2l0eUxpc3QoKS50aGVuKChyZXMpID0+IHsNCiAgICAgICAgdGhpcy5hZGRyZXNEYXRhID0gcmVzLmRhdGE7DQogICAgICB9KTsNCiAgICB9LA0KICAgIHNldFVzZXIoKSB7DQogICAgICBsZXQgZGF0YSA9IHRoaXMuJHJlZnMudXNlckVkaXQuZm9ybUl0ZW07DQogICAgICBsZXQgaWRzID0gW107DQogICAgICB0aGlzLiRyZWZzLnVzZXJFZGl0LmRhdGFMYWJlbC5tYXAoKGkpID0+IHsNCiAgICAgICAgaWRzLnB1c2goaS5pZCk7DQogICAgICB9KTsNCiAgICAgIGRhdGEubGFiZWxfaWQgPSBpZHM7DQogICAgICAvLyBpZiAoIWRhdGEucmVhbF9uYW1lKSByZXR1cm4gdGhpcy4kbWVzc2FnZS53YXJuaW5nKCLor7fovpPlhaXnnJ/lrp7lp5PlkI0iKTsNCiAgICAgIC8vIGlmICghZGF0YS5waG9uZSkgcmV0dXJuIHRoaXMuJG1lc3NhZ2Uud2FybmluZygi6K+36L6T5YWl5omL5py65Y+3Iik7DQogICAgICAvLyBpZiAoIWRhdGEucHdkKSByZXR1cm4gdGhpcy4kbWVzc2FnZS53YXJuaW5nKCLor7fovpPlhaXlr4bnoIEiKTsNCiAgICAgIC8vIGlmICghZGF0YS50cnVlX3B3ZCkgcmV0dXJuIHRoaXMuJG1lc3NhZ2Uud2FybmluZygi6K+36L6T5YWl56Gu6K6k5a+G56CBIik7DQogICAgICBpZiAoZGF0YS51aWQpIHsNCiAgICAgICAgZWRpdFVzZXIoZGF0YSkNCiAgICAgICAgICAudGhlbigocmVzKSA9PiB7DQogICAgICAgICAgICB0aGlzLm1vZGFscyA9IGZhbHNlOw0KICAgICAgICAgICAgdGhpcy4kbWVzc2FnZS5zdWNjZXNzKHJlcy5tc2cpOw0KICAgICAgICAgICAgdGhpcy5nZXRMaXN0KCk7DQogICAgICAgICAgfSkNCiAgICAgICAgICAuY2F0Y2goKGVycikgPT4gew0KICAgICAgICAgICAgdGhpcy4kbWVzc2FnZS5lcnJvcihlcnIpOw0KICAgICAgICAgIH0pOw0KICAgICAgfSBlbHNlIHsNCiAgICAgICAgc2V0VXNlcihkYXRhKQ0KICAgICAgICAgIC50aGVuKChyZXMpID0+IHsNCiAgICAgICAgICAgIHRoaXMubW9kYWxzID0gZmFsc2U7DQogICAgICAgICAgICB0aGlzLiRtZXNzYWdlLnN1Y2Nlc3MocmVzLm1zZyk7DQogICAgICAgICAgICB0aGlzLmdldExpc3QoKTsNCiAgICAgICAgICB9KQ0KICAgICAgICAgIC5jYXRjaCgoZXJyKSA9PiB7DQogICAgICAgICAgICB0aGlzLiRtZXNzYWdlLmVycm9yKGVyci5tc2cpOw0KICAgICAgICAgIH0pOw0KICAgICAgfQ0KICAgIH0sDQogICAgb25jZUdldExpc3QoKSB7DQogICAgICB0aGlzLmxhYmVsQWN0aXZlLnVpZCA9IDA7DQogICAgICB0aGlzLmdldExpc3QoKTsNCiAgICB9LA0KICAgIC8vIOagh+etvuW8ueeql+WFs+mXrQ0KICAgIGxhYmVsQ2xvc2UoKSB7DQogICAgICB0aGlzLmxhYmVsQWN0aXZlLnVpZCA9IDA7DQogICAgICB0aGlzLmxhYmVsU2hvdyA9IGZhbHNlOw0KICAgICAgdGhpcy5zZWxlY3RMYWJlbFNob3cgPSBmYWxzZTsNCiAgICB9LA0KICAgIC8vIOaPkOS6pA0KICAgIHB1dFNlbmQobmFtZSkgew0KICAgICAgdGhpcy4kcmVmc1tuYW1lXS52YWxpZGF0ZSgodmFsaWQpID0+IHsNCiAgICAgICAgaWYgKHZhbGlkKSB7DQogICAgICAgICAgaWYgKCF0aGlzLmZvcm1JbmxpbmUuc3ByZWFkX3VpZCkgew0KICAgICAgICAgICAgcmV0dXJuIHRoaXMuJG1lc3NhZ2UuZXJyb3IoJ+ivt+S4iuS8oOeUqOaItycpOw0KICAgICAgICAgIH0NCiAgICAgICAgICBhZ2VudFNwcmVhZEFwaSh0aGlzLmZvcm1JbmxpbmUpDQogICAgICAgICAgICAudGhlbigocmVzKSA9PiB7DQogICAgICAgICAgICAgIHRoaXMucHJvbW90ZXJTaG93ID0gZmFsc2U7DQogICAgICAgICAgICAgIHRoaXMuJG1lc3NhZ2Uuc3VjY2VzcyhyZXMubXNnKTsNCiAgICAgICAgICAgICAgdGhpcy5nZXRMaXN0KCk7DQogICAgICAgICAgICAgIHRoaXMuJHJlZnNbbmFtZV0ucmVzZXRGaWVsZHMoKTsNCiAgICAgICAgICAgIH0pDQogICAgICAgICAgICAuY2F0Y2goKHJlcykgPT4gew0KICAgICAgICAgICAgICB0aGlzLiRtZXNzYWdlLmVycm9yKHJlcy5tc2cpOw0KICAgICAgICAgICAgfSk7DQogICAgICAgIH0NCiAgICAgIH0pOw0KICAgIH0sDQoNCiAgICBzYXZlKCkgew0KICAgICAgdGhpcy5tb2RhbHMgPSB0cnVlOw0KDQogICAgICAvLyB0aGlzLiRtb2RhbEZvcm0oZ2V0VXNlclNhdmVGb3JtKCkpDQogICAgICAvLyAgIC50aGVuKCgpID0+IHsNCiAgICAgIC8vICAgICB0aGlzLnVzZXJGcm9tLnBhZ2UgPSAxOw0KICAgICAgLy8gICAgIHRoaXMuZ2V0TGlzdCgpOw0KICAgICAgLy8gICB9KQ0KICAgICAgLy8gICAuY2F0Y2goKHJlcykgPT4gew0KICAgICAgLy8gICAgIHRoaXMuJG1lc3NhZ2UuZXJyb3IocmVzLm1zZyk7DQogICAgICAvLyAgIH0pOw0KICAgIH0sDQogICAgc3luY2hybygpIHsNCiAgICAgIHVzZXJTeW5jaHJvKCkNCiAgICAgICAgLnRoZW4oKHJlcykgPT4gew0KICAgICAgICAgIHRoaXMuJG1lc3NhZ2Uuc3VjY2VzcyhyZXMubXNnKTsNCiAgICAgICAgfSkNCiAgICAgICAgLmNhdGNoKChyZXMpID0+IHsNCiAgICAgICAgICB0aGlzLiRtZXNzYWdlLmVycm9yKHJlcy5tc2cpOw0KICAgICAgICB9KTsNCiAgICB9LA0KICAgIGlzU2VsKHJvdykgew0KICAgICAgcmV0dXJuICEhIXJvdy5pc19kZWw7DQogICAgfSwNCiAgICAvLyDliIbnu4TliJfooagNCiAgICBncm91cExpc3RzKCkgew0KICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTsNCiAgICAgIHVzZXJMYWJlbEFwaSh0aGlzLmxhYmVsRnJvbSkNCiAgICAgICAgLnRoZW4oYXN5bmMgKHJlcykgPT4gew0KICAgICAgICAgIGxldCBkYXRhID0gcmVzLmRhdGE7DQogICAgICAgICAgdGhpcy5sYWJlbExpc3RzID0gZGF0YS5saXN0Ow0KICAgICAgICB9KQ0KICAgICAgICAuY2F0Y2goKHJlcykgPT4gew0KICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlOw0KICAgICAgICAgIHRoaXMuJG1lc3NhZ2UuZXJyb3IocmVzLm1zZyk7DQogICAgICAgIH0pOw0KICAgIH0sDQogICAgb25DbGlja1RhYigpIHsNCiAgICAgIHRoaXMudXNlckZyb20ucGFnZSA9IDE7DQogICAgICB0aGlzLmdldExpc3QoKTsNCiAgICB9LA0KICAgIHVzZXJHcm91cCgpIHsNCiAgICAgIGxldCBkYXRhID0gew0KICAgICAgICBwYWdlOiAxLA0KICAgICAgICBsaW1pdDogJycsDQogICAgICB9Ow0KICAgICAgdXNlckdyb3VwQXBpKGRhdGEpLnRoZW4oKHJlcykgPT4gew0KICAgICAgICB0aGlzLmdyb3VwTGlzdCA9IHJlcy5kYXRhLmxpc3Q7DQogICAgICB9KTsNCiAgICB9LA0KICAgIGxldmVsTGlzdHMoKSB7DQogICAgICBsZXQgZGF0YSA9IHsNCiAgICAgICAgcGFnZTogMSwNCiAgICAgICAgbGltaXQ6ICcnLA0KICAgICAgICB0aXRsZTogJycsDQogICAgICAgIGlzX3Nob3c6IDEsDQogICAgICB9Ow0KICAgICAgbGV2ZWxMaXN0QXBpKGRhdGEpLnRoZW4oKHJlcykgPT4gew0KICAgICAgICB0aGlzLmxldmVsTGlzdCA9IHJlcy5kYXRhLmxpc3Q7DQogICAgICB9KTsNCiAgICB9LA0KICAgIG1lbWJlcnNoaXBEYXRhTGlzdCgpIHsNCiAgICAgIGxldCBkYXRhID0gew0KICAgICAgICBwYWdlOiAxLA0KICAgICAgICBsaW1pdDogMCwNCiAgICAgICAgc3RhdXM6IDEsDQogICAgICB9Ow0KICAgICAgbWVtYmVyc2hpcERhdGFMaXN0QXBpKGRhdGEpLnRoZW4oKHJlcykgPT4gew0KICAgICAgICB0aGlzLm1lbWJlcnNoaXBMaXN0ID0gcmVzLmRhdGEubGlzdDsNCiAgICAgIH0pOw0KICAgIH0sDQogICAgLy8g5om56YeP6K6+572u5YiG57uE77ybDQogICAgc2V0R3JvdXAoKSB7DQogICAgICBpZiAodGhpcy5pZHMubGVuZ3RoID09PSAwKSB7DQogICAgICAgIHRoaXMuJG1lc3NhZ2Uud2FybmluZygn6K+36YCJ5oup6KaB6K6+572u5YiG57uE55qE55So5oi3Jyk7DQogICAgICB9IGVsc2Ugew0KICAgICAgICBsZXQgdWlkcyA9IHsgdWlkczogdGhpcy5pZHMgfTsNCiAgICAgICAgdGhpcy4kbW9kYWxGb3JtKHVzZXJTZXRHcm91cCh1aWRzKSkudGhlbigoKSA9PiB7DQogICAgICAgICAgdGhpcy5pZHMgPSBbXTsNCiAgICAgICAgICB0aGlzLnNlbGVjdGVkSWRzID0gW107DQogICAgICAgICAgdGhpcy5nZXRMaXN0KCk7DQogICAgICAgIH0pOw0KICAgICAgfQ0KICAgIH0sDQogICAgLy8g5om56YeP6K6+572u5qCH562+77ybDQogICAgc2V0TGFiZWwoKSB7DQogICAgICBpZiAodGhpcy5pZHMubGVuZ3RoID09PSAwKSB7DQogICAgICAgIHRoaXMuJG1lc3NhZ2Uud2FybmluZygn6K+36YCJ5oup6KaB6K6+572u5qCH562+55qE55So5oi3Jyk7DQogICAgICB9IGVsc2Ugew0KICAgICAgICBsZXQgdWlkcyA9IHsgdWlkczogdGhpcy5pZHMgfTsNCiAgICAgICAgdGhpcy5sYWJlbEFjdGl2ZS51aWQgPSAwOw0KICAgICAgICB0aGlzLmxhYmVsU2hvdyA9IHRydWU7DQogICAgICAgIC8vIHRoaXMuJG1vZGFsRm9ybSh1c2VyU2V0TGFiZWxBcGkodWlkcykpLnRoZW4oKCkgPT4NCiAgICAgICAgLy8gICB0aGlzLiRyZWZzLnNlbmRzLmdldExpc3QoKQ0KICAgICAgICAvLyApOw0KICAgICAgfQ0KICAgIH0sDQogICAgYWN0aXZlU2VsZWN0RGF0YShkYXRhKSB7DQogICAgICB0aGlzLnNlbGVjdExhYmVsU2hvdyA9IGZhbHNlOw0KICAgICAgdGhpcy5zZWxlY3REYXRhTGFiZWwgPSBkYXRhIHx8IFtdOw0KICAgICAgaWYgKHRoaXMuc2VsZWN0RGF0YUxhYmVsLmxlbmd0aCkgew0KICAgICAgICBsZXQgYWN0aXZlSWRzID0gW107DQogICAgICAgIHRoaXMuc2VsZWN0RGF0YUxhYmVsLm1hcCgoaXRlbSkgPT4gew0KICAgICAgICAgIGFjdGl2ZUlkcy5wdXNoKGl0ZW0uaWQpOw0KICAgICAgICB9KTsNCiAgICAgICAgdGhpcy51c2VyRnJvbS5sYWJlbF9pZCA9IGFjdGl2ZUlkcy5qb2luKCcsJyk7DQogICAgICAgIHRoaXMuZ2V0TGlzdCgpOw0KICAgICAgfSBlbHNlIHsNCiAgICAgICAgdGhpcy51c2VyRnJvbS5sYWJlbF9pZCA9ICcnOw0KICAgICAgfQ0KICAgIH0sDQogICAgaGFuZGxlQ2xvc2UodGFnKSB7DQogICAgICBsZXQgaSA9IHRoaXMuc2VsZWN0RGF0YUxhYmVsLmZpbmRJbmRleCgoaXRlbSkgPT4gaXRlbS5pZCA9PT0gdGFnLmlkKTsNCiAgICAgIGlmIChpICE9PSAtMSkgew0KICAgICAgICB0aGlzLnNlbGVjdERhdGFMYWJlbC5zcGxpY2UoaSwgMSk7DQogICAgICB9DQogICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiB7DQogICAgICAgIGlmICh0aGlzLnNlbGVjdERhdGFMYWJlbC5sZW5ndGgpIHsNCiAgICAgICAgICBsZXQgYWN0aXZlSWRzID0gW107DQogICAgICAgICAgdGhpcy5zZWxlY3REYXRhTGFiZWwubWFwKChpdGVtKSA9PiB7DQogICAgICAgICAgICBhY3RpdmVJZHMucHVzaChpdGVtLmlkKTsNCiAgICAgICAgICB9KTsNCiAgICAgICAgICB0aGlzLnVzZXJGcm9tLmxhYmVsX2lkID0gYWN0aXZlSWRzLmpvaW4oJywnKTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICB0aGlzLnVzZXJGcm9tLmxhYmVsX2lkID0gJyc7DQogICAgICAgIH0NCiAgICAgIH0pOw0KICAgICAgLy8gdGhpcy51c2VyU2VhcmNocygpOw0KICAgIH0sDQogICAgLy8g5om56YeP6K6+572u5qCH562+DQogICAgYWN0aXZlRGF0YShkYXRhKSB7DQogICAgICBsZXQgbGFiZWxzID0gW107DQogICAgICBpZiAoIWRhdGEubGVuZ3RoKSByZXR1cm47DQogICAgICBkYXRhLm1hcCgoaSkgPT4gew0KICAgICAgICBsYWJlbHMucHVzaChpLmlkKTsNCiAgICAgIH0pOw0KICAgICAgc2F2ZVNldExhYmVsKHsNCiAgICAgICAgdWlkczogdGhpcy5pZHMuam9pbignLCcpLA0KICAgICAgICBsYWJlbF9pZDogbGFiZWxzLA0KICAgICAgfSkudGhlbigocmVzKSA9PiB7DQogICAgICAgIHRoaXMubGFiZWxTaG93ID0gZmFsc2U7DQogICAgICAgIHRoaXMuc2VsZWN0ZWRJZHMgPSBuZXcgU2V0KCk7DQogICAgICAgIHRoaXMuZ2V0TGlzdCgpOw0KICAgICAgICB0aGlzLiRtZXNzYWdlLnN1Y2Nlc3MocmVzLm1zZyk7DQogICAgICB9KTsNCiAgICB9LA0KICAgIC8v5piv5ZCm5Li65LuY6LS55Lya5ZGY77ybDQogICAgY2hhbmdlTWVtYmVyKCkgew0KICAgICAgdGhpcy51c2VyRnJvbS5wYWdlID0gMTsNCiAgICAgIHRoaXMuZ2V0TGlzdCgpOw0KICAgIH0sDQogICAgLy8g6YCJ5oup5Zu95a62DQogICAgY2hhbmdlQ291bnRyeSgpIHsNCiAgICAgIGlmICh0aGlzLnVzZXJGcm9tLmNvdW50cnkgPT09ICdhYnJvYWQnIHx8ICF0aGlzLnVzZXJGcm9tLmNvdW50cnkpIHsNCiAgICAgICAgdGhpcy5zZWxlY3RlZERhdGEgPSBbXTsNCiAgICAgICAgdGhpcy51c2VyRnJvbS5wcm92aW5jZSA9ICcnOw0KICAgICAgICB0aGlzLnVzZXJGcm9tLmNpdHkgPSAnJzsNCiAgICAgICAgdGhpcy5hZGRyZXNzID0gW107DQogICAgICB9DQogICAgfSwNCiAgICAvLyDpgInmi6nlnLDlnYANCiAgICBoYW5kbGVDaGFuZ2Uoc2VsZWN0ZWREYXRhKSB7DQogICAgICB0aGlzLnNlbGVjdGVkRGF0YSA9IHNlbGVjdGVkRGF0YS5tYXAoKG8pID0+IG8ubGFiZWwpOw0KICAgICAgdGhpcy51c2VyRnJvbS5wcm92aW5jZSA9IHRoaXMuc2VsZWN0ZWREYXRhWzBdOw0KICAgICAgdGhpcy51c2VyRnJvbS5jaXR5ID0gdGhpcy5zZWxlY3RlZERhdGFbMV07DQogICAgfSwNCiAgICAvLyDlhbfkvZPml6XmnJ8NCiAgICBvbmNoYW5nZVRpbWUoZSwgdHlwZSkgew0KICAgICAgdGhpcy51c2VyRnJvbVt0eXBlXSA9IGUgPyBlLmpvaW4oJy0nKSA6ICcnOw0KICAgIH0sDQogICAgdXNlckRldGFpbChyb3cpIHsNCiAgICAgIHRoaXMuJHJlZnMudXNlckRldGFpbHMubW9kYWxzID0gdHJ1ZTsNCiAgICAgIHRoaXMuJHJlZnMudXNlckRldGFpbHMuZ2V0RGV0YWlscyhyb3cudWlkKTsNCiAgICB9LA0KICAgIC8vIOaTjeS9nA0KICAgIGNoYW5nZU1lbnUocm93LCBuYW1lLCBpbmRleCkgew0KICAgICAgbGV0IHVpZCA9IFtdOw0KICAgICAgdWlkLnB1c2gocm93LnVpZCk7DQogICAgICBsZXQgdWlkcyA9IHsgdWlkczogdWlkIH07DQogICAgICBzd2l0Y2ggKG5hbWUpIHsNCiAgICAgICAgY2FzZSAnMSc6DQogICAgICAgICAgdGhpcy5lZGl0KHJvdyk7DQogICAgICAgICAgYnJlYWs7DQogICAgICAgIGNhc2UgJzInOg0KICAgICAgICAgIHRoaXMuZ2V0T3RoZXJGcm9tKHJvdy51aWQsICdtb25leScpOw0KICAgICAgICAgIGJyZWFrOw0KICAgICAgICBjYXNlICczJzoNCiAgICAgICAgICB0aGlzLmdpdmVMZXZlbFRpbWUocm93LnVpZCk7DQogICAgICAgICAgYnJlYWs7DQogICAgICAgIGNhc2UgJzQnOg0KICAgICAgICAgIHRoaXMuZGVsKHJvdywgJ+a4hemZpCDjgJAgJyArIHRoaXMudGVuVGV4dChyb3cubmlja25hbWUpICsgJyDjgJHnmoTkvJrlkZjnrYnnuqcnLCBpbmRleCwgJ3VzZXInKTsNCiAgICAgICAgICBicmVhazsNCiAgICAgICAgY2FzZSAnNSc6DQogICAgICAgICAgdGhpcy4kbW9kYWxGb3JtKHVzZXJTZXRHcm91cCh1aWRzKSkudGhlbigoKSA9PiB0aGlzLmdldExpc3QoKSk7DQogICAgICAgICAgYnJlYWs7DQogICAgICAgIGNhc2UgJzYnOg0KICAgICAgICAgIHRoaXMub3BlbkxhYmVsKHJvdyk7DQogICAgICAgICAgYnJlYWs7DQogICAgICAgIGNhc2UgJzcnOg0KICAgICAgICAgIHRoaXMuZWRpdFMocm93KTsNCiAgICAgICAgICBicmVhazsNCiAgICAgICAgY2FzZSAnOCc6DQogICAgICAgICAgdGhpcy5nZXRPdGhlckZyb20ocm93LnVpZCwgJ3BvaW50Jyk7DQogICAgICAgICAgYnJlYWs7DQogICAgICAgIGRlZmF1bHQ6DQogICAgICAgICAgdGhpcy5kZWwocm93LCAn6Kej6Zmk44CQICcgKyB0aGlzLnRlblRleHQocm93Lm5pY2tuYW1lKSArICcg44CR55qE5LiK57qn5o6o5bm/5Lq6JywgaW5kZXgsICd0dWlndWFuZycpOw0KICAgICAgfQ0KICAgIH0sDQogICAgdGVuVGV4dChzdHIpIHsNCiAgICAgIGlmIChzdHIubGVuZ3RoID4gMTApIHsNCiAgICAgICAgLy/lpoLmnpzlrZfnrKbplb/luqbotoXov4cxMO+8jOWQjumdoueahOWtl+espuWwseWPmOaIkC4uLuWPr+iHquihjOiwg+aVtOmVv+W6puWSjOS7o+abv+Wtl+espg0KICAgICAgICBzdHIgPSBzdHIuc3Vic3RyKDAsIDEwKSArICcuLi4nOyAvL+aIquWPluS7juesrOS4gOS4quWtl+espuW8gOWni++8jOW+gOWQjuWPljEw5Liq5a2X56ym77yM5Ymp5L2Z55qE55SoLi4u5Luj5pu/DQogICAgICB9DQogICAgICByZXR1cm4gc3RyOw0KICAgIH0sDQogICAgb3BlbkxhYmVsKHJvdykgew0KICAgICAgdGhpcy5sYWJlbFNob3cgPSB0cnVlOw0KICAgICAgdGhpcy5sYWJlbEFjdGl2ZS51aWQgPSByb3cudWlkOw0KICAgIH0sDQogICAgb3BlblNlbGVjdExhYmVsKCkgew0KICAgICAgdGhpcy5zZWxlY3RMYWJlbFNob3cgPSB0cnVlOw0KICAgIH0sDQogICAgZWRpdFMocm93KSB7DQogICAgICB0aGlzLnByb21vdGVyU2hvdyA9IHRydWU7DQogICAgICB0aGlzLmZvcm1JbmxpbmUudWlkID0gcm93LnVpZDsNCiAgICB9LA0KICAgIGN1c3RvbWVyKCkgew0KICAgICAgdGhpcy5jdXN0b21lclNob3cgPSB0cnVlOw0KICAgIH0sDQogICAgaW1hZ2VPYmplY3QoZSkgew0KICAgICAgdGhpcy5jdXN0b21lclNob3cgPSBmYWxzZTsNCiAgICAgIHRoaXMuZm9ybUlubGluZS5zcHJlYWRfdWlkID0gZS51aWQ7DQogICAgICB0aGlzLmZvcm1JbmxpbmUuaW1hZ2UgPSBlLmltYWdlOw0KICAgIH0sDQogICAgY2FuY2VsKG5hbWUpIHsNCiAgICAgIHRoaXMucHJvbW90ZXJTaG93ID0gZmFsc2U7DQogICAgICB0aGlzLiRyZWZzW25hbWVdLnJlc2V0RmllbGRzKCk7DQogICAgICB0aGlzLmZvcm1JbmxpbmUgPSB7DQogICAgICAgIHVpZDogMCwNCiAgICAgICAgc3ByZWFkX3VpZDogMCwNCiAgICAgICAgaW1hZ2U6ICcnLA0KICAgICAgfTsNCiAgICB9LA0KICAgIC8vIOi1oOmAgeS8muWRmOetiee6pw0KICAgIGdpdmVMZXZlbChpZCkgew0KICAgICAgdGhpcy4kbW9kYWxGb3JtKGdpdmVMZXZlbEFwaShpZCkpLnRoZW4oKCkgPT4gdGhpcy5nZXRMaXN0KDEpKTsNCg0KICAgICAgLy8gZ2l2ZUxldmVsQXBpKGlkKQ0KICAgICAgLy8gICAudGhlbihhc3luYyAocmVzKSA9PiB7DQogICAgICAvLyAgICAgaWYgKHJlcy5kYXRhLnN0YXR1cyA9PT0gZmFsc2UpIHsNCiAgICAgIC8vICAgICAgIHJldHVybiB0aGlzLiRhdXRoTGFwc2UocmVzLmRhdGEpOw0KICAgICAgLy8gICAgIH0NCg0KICAgICAgLy8gICAgIHRoaXMuRnJvbURhdGEgPSByZXMuZGF0YTsNCiAgICAgIC8vICAgICB0aGlzLiRyZWZzLmVkaXRzLm1vZGFscyA9IHRydWU7DQogICAgICAvLyAgIH0pDQogICAgICAvLyAgIC5jYXRjaCgocmVzKSA9PiB7DQogICAgICAvLyAgICAgdGhpcy4kbWVzc2FnZS5lcnJvcihyZXMubXNnKTsNCiAgICAgIC8vICAgfSk7DQogICAgfSwNCiAgICAvLyDotaDpgIHkvJrlkZjnrYnnuqcNCiAgICBnaXZlTGV2ZWxUaW1lKGlkKSB7DQogICAgICB0aGlzLiRtb2RhbEZvcm0oZ2l2ZUxldmVsVGltZUFwaShpZCkpLnRoZW4oKCkgPT4gdGhpcy5nZXRMaXN0KDEpKTsNCg0KICAgICAgLy8gZ2l2ZUxldmVsVGltZUFwaShpZCkNCiAgICAgIC8vICAgLnRoZW4oYXN5bmMgKHJlcykgPT4gew0KICAgICAgLy8gICAgIGlmIChyZXMuZGF0YS5zdGF0dXMgPT09IGZhbHNlKSB7DQogICAgICAvLyAgICAgICByZXR1cm4gdGhpcy4kYXV0aExhcHNlKHJlcy5kYXRhKTsNCiAgICAgIC8vICAgICB9DQogICAgICAvLyAgICAgdGhpcy5Gcm9tRGF0YSA9IHJlcy5kYXRhOw0KICAgICAgLy8gICAgIHRoaXMuJHJlZnMuZWRpdHMubW9kYWxzID0gdHJ1ZTsNCiAgICAgIC8vICAgfSkNCiAgICAgIC8vICAgLmNhdGNoKChyZXMpID0+IHsNCiAgICAgIC8vICAgICB0aGlzLiRtZXNzYWdlLmVycm9yKHJlcy5tc2cpOw0KICAgICAgLy8gICB9KTsNCiAgICB9LA0KICAgIC8vIOWIoOmZpA0KICAgIGRlbChyb3csIHRpdCwgbnVtLCBuYW1lKSB7DQogICAgICBsZXQgZGVsZnJvbURhdGEgPSB7DQogICAgICAgIHRpdGxlOiB0aXQsDQogICAgICAgIG51bTogbnVtLA0KICAgICAgICB1cmw6IG5hbWUgPT09ICd1c2VyJyA/IGB1c2VyL2RlbF9sZXZlbC8ke3Jvdy51aWR9YCA6IGBhZ2VudC9zdGFpci9kZWxldGVfc3ByZWFkLyR7cm93LnVpZH1gLA0KICAgICAgICBtZXRob2Q6IG5hbWUgPT09ICd1c2VyJyA/ICdERUxFVEUnIDogJ1BVVCcsDQogICAgICAgIGlkczogJycsDQogICAgICAgIHdpZHRoOiA2MDAsDQogICAgICB9Ow0KICAgICAgdGhpcy4kbW9kYWxTdXJlKGRlbGZyb21EYXRhKQ0KICAgICAgICAudGhlbigocmVzKSA9PiB7DQogICAgICAgICAgdGhpcy4kbWVzc2FnZS5zdWNjZXNzKHJlcy5tc2cpOw0KICAgICAgICAgIHRoaXMuZ2V0TGlzdCgpOw0KICAgICAgICB9KQ0KICAgICAgICAuY2F0Y2goKHJlcykgPT4gew0KICAgICAgICAgIHRoaXMuJG1lc3NhZ2UuZXJyb3IocmVzLm1zZyk7DQogICAgICAgIH0pOw0KICAgIH0sDQogICAgLy8g5riF6Zmk5Lya5ZGY5Yig6Zmk5oiQ5YqfDQogICAgc3VibWl0TW9kZWwoKSB7DQogICAgICB0aGlzLmdldExpc3QoKTsNCiAgICB9LA0KICAgIC8vIOS8muWRmOWIl+ihqA0KICAgIGdldExpc3QoKSB7DQogICAgICAvLyBpZiAodGhpcy5zZWxlY3REYXRhTGFiZWwubGVuZ3RoKSB7DQogICAgICAvLyAgIGxldCBhY3RpdmVJZHMgPSBbXTsNCiAgICAgIC8vICAgdGhpcy5zZWxlY3REYXRhTGFiZWwuZm9yRWFjaCgoaXRlbSkgPT4gew0KICAgICAgLy8gICAgIGFjdGl2ZUlkcy5wdXNoKGl0ZW0uaWQpOw0KICAgICAgLy8gICB9KTsNCiAgICAgIC8vICAgdGhpcy51c2VyRnJvbS5sYWJlbF9pZCA9IGFjdGl2ZUlkcy5qb2luKCcsJyk7DQogICAgICAvLyB9DQogICAgICB0aGlzLnVzZXJGcm9tLnVzZXJfdHlwZSA9IHRoaXMudXNlckZyb20udXNlcl90eXBlIHx8ICcnOw0KICAgICAgdGhpcy51c2VyRnJvbS5zdGF0dXMgPSB0aGlzLnVzZXJGcm9tLnN0YXR1cyB8fCAnJzsNCiAgICAgIHRoaXMudXNlckZyb20uc2V4ID0gdGhpcy51c2VyRnJvbS5zZXggfHwgJyc7DQogICAgICB0aGlzLnVzZXJGcm9tLmlzX3Byb21vdGVyID0gdGhpcy51c2VyRnJvbS5pc19wcm9tb3RlciB8fCAnJzsNCiAgICAgIHRoaXMudXNlckZyb20uY291bnRyeSA9IHRoaXMudXNlckZyb20uY291bnRyeSB8fCAnJzsNCiAgICAgIHRoaXMudXNlckZyb20ucGF5X2NvdW50ID0gdGhpcy5wYXlfY291bnQgPT09ICdhbGwnID8gJycgOiB0aGlzLnBheV9jb3VudDsNCiAgICAgIHRoaXMudXNlckZyb20udXNlcl90aW1lX3R5cGUgPSB0aGlzLnVzZXJfdGltZV90eXBlID09PSAnYWxsJyA/ICcnIDogdGhpcy51c2VyX3RpbWVfdHlwZTsNCiAgICAgIHRoaXMudXNlckZyb20uZmllbGRfa2V5ID0gdGhpcy5maWVsZF9rZXkgPT09ICdhbGwnID8gJycgOiB0aGlzLmZpZWxkX2tleTsNCiAgICAgIHRoaXMudXNlckZyb20ubGV2ZWwgPSB0aGlzLmxldmVsID09PSAnYWxsJyA/ICcnIDogdGhpcy5sZXZlbDsNCiAgICAgIHRoaXMudXNlckZyb20uZ3JvdXBfaWQgPSB0aGlzLmdyb3VwX2lkID09PSAnYWxsJyA/ICcnIDogdGhpcy5ncm91cF9pZDsNCiAgICAgIHRoaXMudXNlckZyb20uYWdlbnRfbGV2ZWwgPSB0aGlzLmFnZW50X2xldmVsID09PSAnYWxsJyA/ICcnIDogdGhpcy5hZ2VudF9sZXZlbDsNCiAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7DQogICAgICB1c2VyTGlzdCh0aGlzLnVzZXJGcm9tKQ0KICAgICAgICAudGhlbihhc3luYyAocmVzKSA9PiB7DQogICAgICAgICAgbGV0IGRhdGEgPSByZXMuZGF0YTsNCiAgICAgICAgICB0aGlzLnVzZXJMaXN0cyA9IGRhdGEubGlzdDsNCg0KICAgICAgICAgIHRoaXMudG90YWwgPSBkYXRhLmNvdW50Ow0KICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlOw0KICAgICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHsNCiAgICAgICAgICAgIHRoaXMuc2V0Q2hlY2tlZCgpOw0KICAgICAgICAgIH0pOw0KICAgICAgICB9KQ0KICAgICAgICAuY2F0Y2goKHJlcykgPT4gew0KICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlOw0KICAgICAgICAgIHRoaXMuJG1lc3NhZ2UuZXJyb3IocmVzLm1zZyk7DQogICAgICAgIH0pOw0KICAgIH0sDQogICAgLy8g55So5oi35a+85Ye6DQogICAgYXN5bmMgZXhwb3J0TGlzdCgpIHsNCiAgICAgIGlmICh0aGlzLmlkcy5sZW5ndGgpIHsNCiAgICAgICAgdGhpcy51c2VyRnJvbS5pZHMgPSB0aGlzLmlkczsNCiAgICAgIH0NCiAgICAgIHRoaXMudXNlckZyb20udXNlcl90eXBlID0gdGhpcy51c2VyRnJvbS51c2VyX3R5cGUgfHwgJyc7DQogICAgICB0aGlzLnVzZXJGcm9tLnN0YXR1cyA9IHRoaXMudXNlckZyb20uc3RhdHVzIHx8ICcnOw0KICAgICAgdGhpcy51c2VyRnJvbS5zZXggPSB0aGlzLnVzZXJGcm9tLnNleCB8fCAnJzsNCiAgICAgIHRoaXMudXNlckZyb20uaXNfcHJvbW90ZXIgPSB0aGlzLnVzZXJGcm9tLmlzX3Byb21vdGVyIHx8ICcnOw0KICAgICAgdGhpcy51c2VyRnJvbS5jb3VudHJ5ID0gdGhpcy51c2VyRnJvbS5jb3VudHJ5IHx8ICcnOw0KICAgICAgdGhpcy51c2VyRnJvbS5wYXlfY291bnQgPSB0aGlzLnBheV9jb3VudCA9PT0gJ2FsbCcgPyAnJyA6IHRoaXMucGF5X2NvdW50Ow0KICAgICAgdGhpcy51c2VyRnJvbS51c2VyX3RpbWVfdHlwZSA9IHRoaXMudXNlcl90aW1lX3R5cGUgPT09ICdhbGwnID8gJycgOiB0aGlzLnVzZXJfdGltZV90eXBlOw0KICAgICAgdGhpcy51c2VyRnJvbS5maWVsZF9rZXkgPSB0aGlzLmZpZWxkX2tleSA9PT0gJ2FsbCcgPyAnJyA6IHRoaXMuZmllbGRfa2V5Ow0KICAgICAgdGhpcy51c2VyRnJvbS5sZXZlbCA9IHRoaXMubGV2ZWwgPT09ICdhbGwnID8gJycgOiB0aGlzLmxldmVsOw0KICAgICAgdGhpcy51c2VyRnJvbS5ncm91cF9pZCA9IHRoaXMuZ3JvdXBfaWQgPT09ICdhbGwnID8gJycgOiB0aGlzLmdyb3VwX2lkOw0KICAgICAgdGhpcy51c2VyRnJvbS5hZ2VudF9sZXZlbCA9IHRoaXMuYWdlbnRfbGV2ZWwgPT09ICdhbGwnID8gJycgOiB0aGlzLmFnZW50X2xldmVsOw0KICAgICAgbGV0IFt0aCwgZmlsZWtleSwgZGF0YSwgZmlsZU5hbWVdID0gW1tdLCBbXSwgW10sICcnXTsNCiAgICAgIC8vICAgbGV0IGZpbGVOYW1lID0gIiI7DQogICAgICBsZXQgZXhjZWxEYXRhID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLnVzZXJGcm9tKSk7DQogICAgICBleGNlbERhdGEucGFnZSA9IDE7DQogICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGV4Y2VsRGF0YS5wYWdlICsgMTsgaSsrKSB7DQogICAgICAgIGxldCBsZWJEYXRhID0gYXdhaXQgdGhpcy5nZXRFeGNlbERhdGEoZXhjZWxEYXRhKTsNCiAgICAgICAgaWYgKCFmaWxlTmFtZSkgZmlsZU5hbWUgPSBsZWJEYXRhLmZpbGVuYW1lOw0KICAgICAgICBpZiAoIWZpbGVrZXkubGVuZ3RoKSB7DQogICAgICAgICAgZmlsZWtleSA9IGxlYkRhdGEuZmlsZUtleTsNCiAgICAgICAgfQ0KICAgICAgICBpZiAoIXRoLmxlbmd0aCkgdGggPSBsZWJEYXRhLmhlYWRlcjsNCiAgICAgICAgaWYgKGxlYkRhdGEuZXhwb3J0Lmxlbmd0aCkgew0KICAgICAgICAgIGRhdGEgPSBkYXRhLmNvbmNhdChsZWJEYXRhLmV4cG9ydCk7DQogICAgICAgICAgZXhjZWxEYXRhLnBhZ2UrKzsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICB0aGlzLiRleHBvcnRFeGNlbCh0aCwgZmlsZWtleSwgZmlsZU5hbWUsIGRhdGEpOw0KICAgICAgICAgIHJldHVybjsNCiAgICAgICAgfQ0KICAgICAgfQ0KICAgIH0sDQogICAgZ2V0RXhjZWxEYXRhKGV4Y2VsRGF0YSkgew0KICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHsNCiAgICAgICAgZXhwb3J0VXNlckxpc3QoZXhjZWxEYXRhKS50aGVuKChyZXMpID0+IHsNCiAgICAgICAgICByZXNvbHZlKHJlcy5kYXRhKTsNCiAgICAgICAgfSk7DQogICAgICB9KTsNCiAgICB9LA0KICAgIHBhZ2VDaGFuZ2UoKSB7DQogICAgICB0aGlzLnNlbGVjdGlvbkxpc3QgPSBbXTsNCiAgICAgIHRoaXMuZ2V0TGlzdCgpOw0KICAgIH0sDQoNCiAgICAvLyDmkJzntKINCiAgICB1c2VyU2VhcmNocygpIHsNCiAgICAgIHRoaXMudXNlckZyb20ucGFnZSA9IDE7DQogICAgICB0aGlzLmdldExpc3QoKTsNCiAgICB9LA0KICAgIC8vIOmHjee9rg0KICAgIHJlc2V0KG5hbWUpIHsNCiAgICAgIHRoaXMudXNlckZyb20gPSB7DQogICAgICAgIGxhYmVsX2lkOiAnJywNCiAgICAgICAgc3RhdHVzOiAnJywNCiAgICAgICAgc2V4OiAnJywNCiAgICAgICAgaXNfcHJvbW90ZXI6ICcnLA0KICAgICAgICBjb3VudHJ5OiAnJywNCiAgICAgICAgaXNNZW1iZXI6ICcnLA0KICAgICAgICBwYXlfY291bnRfbnVtOiBbJycsICcnXSwNCiAgICAgICAgYmFsYW5jZTogWycnLCAnJ10sDQogICAgICAgIGludGVncmFsOiBbJycsICcnXSwNCiAgICAgICAgcGF5X2NvdW50X21vbmV5OiBbJycsICcnXSwNCiAgICAgICAgcmVjaGFyZ2VfY291bnQ6IFsnJywgJyddLA0KICAgICAgICB1c2VyX3RpbWVfdHlwZTogJycsDQogICAgICAgIHVzZXJfdGltZTogJycsDQogICAgICAgIGJlZm9yZV9wYXlfdGltZTogJycsDQogICAgICAgIG5pY2tuYW1lOiAnJywNCiAgICAgICAgcHJvdmluY2U6ICcnLA0KICAgICAgICBjaXR5OiAnJywNCiAgICAgICAgcGFnZTogMSwNCiAgICAgICAgbGltaXQ6IDE1LA0KICAgICAgICBsZXZlbDogJycsDQogICAgICAgIGdyb3VwX2lkOiAnJywNCiAgICAgICAgYWdlbnRfbGV2ZWw6ICcnLA0KICAgICAgICBmaWVsZF9rZXk6ICcnLA0KICAgICAgICBwYWdlOiAxLCAvLyDlvZPliY3pobUNCiAgICAgICAgbGltaXQ6IDIwLCAvLyDmr4/pobXmmL7npLrmnaHmlbANCiAgICAgIH07DQogICAgICB0aGlzLmZpZWxkX2tleSA9ICcnOw0KICAgICAgdGhpcy5sZXZlbCA9ICcnOw0KICAgICAgdGhpcy5ncm91cF9pZCA9ICcnOw0KICAgICAgdGhpcy5hZ2VudF9sZXZlbCA9ICcnOw0KICAgICAgdGhpcy5kYXRhTGFiZWwgPSBbXTsNCiAgICAgIHRoaXMuc2VsZWN0RGF0YUxhYmVsID0gW107DQogICAgICB0aGlzLnVzZXJfdGltZV90eXBlID0gJyc7DQogICAgICB0aGlzLnBheV9jb3VudCA9ICcnOw0KICAgICAgdGhpcy50aW1lVmFsID0gW107DQogICAgICB0aGlzLnNlbGVjdGVkSWRzID0gbmV3IFNldCgpOw0KICAgICAgdGhpcy5nZXRMaXN0KCk7DQogICAgfSwNCiAgICAvLyDojrflj5bnvJbovpHooajljZXmlbDmja4NCiAgICBnZXRVc2VyRnJvbShpZCkgew0KICAgICAgZ2V0VXNlckluZm8oaWQpDQogICAgICAgIC50aGVuKGFzeW5jIChyZXMpID0+IHsNCiAgICAgICAgICB0aGlzLm1vZGFscyA9IHRydWU7DQogICAgICAgICAgdGhpcy51c2VyRGF0YSA9IHJlcy5kYXRhOw0KICAgICAgICB9KQ0KICAgICAgICAuY2F0Y2goKHJlcykgPT4gew0KICAgICAgICAgIHRoaXMuJG1lc3NhZ2UuZXJyb3IocmVzLm1zZyk7DQogICAgICAgIH0pOw0KICAgIH0sDQogICAgLy8g6I635Y+W56ev5YiG5L2Z6aKd6KGo5Y2VDQogICAgZ2V0T3RoZXJGcm9tKGlkLCB0eXBlKSB7DQogICAgICB0aGlzLiRtb2RhbEZvcm0oZWRpdE90aGVyQXBpKGlkLCB0eXBlKSkudGhlbigoKSA9PiB0aGlzLmdldExpc3QoMSkpOw0KICAgIH0sDQogICAgLy8g5L+u5pS554q25oCBDQogICAgb25jaGFuZ2VJc1Nob3cocm93KSB7DQogICAgICBsZXQgZGF0YSA9IHsNCiAgICAgICAgaWQ6IHJvdy51aWQsDQogICAgICAgIHN0YXR1czogcm93LnN0YXR1cywNCiAgICAgIH07DQogICAgICBpc1Nob3dBcGkoZGF0YSkNCiAgICAgICAgLnRoZW4oYXN5bmMgKHJlcykgPT4gew0KICAgICAgICAgIHRoaXMuJG1lc3NhZ2Uuc3VjY2VzcyhyZXMubXNnKTsNCiAgICAgICAgfSkNCiAgICAgICAgLmNhdGNoKChyZXMpID0+IHsNCiAgICAgICAgICB0aGlzLiRtZXNzYWdlLmVycm9yKHJlcy5tc2cpOw0KICAgICAgICB9KTsNCiAgICB9LA0KICAgIC8vIOeCueWHu+WPkemAgeS8mOaDoOWIuA0KICAgIG9uU2VuZCgpIHsNCiAgICAgIGlmICh0aGlzLmlkcy5sZW5ndGggPT09IDApIHsNCiAgICAgICAgdGhpcy4kbWVzc2FnZS53YXJuaW5nKCfor7fpgInmi6nopoHlj5HpgIHkvJjmg6DliLjnmoTnlKjmiLcnKTsNCiAgICAgIH0gZWxzZSB7DQogICAgICAgIHRoaXMuJHJlZnMuc2VuZHMubW9kYWxzID0gdHJ1ZTsNCiAgICAgICAgdGhpcy4kcmVmcy5zZW5kcy5nZXRMaXN0KCk7DQogICAgICB9DQogICAgfSwNCiAgICAvLyDlj5HpgIHlm77mlofmtojmga8NCiAgICBvblNlbmRQaWMoKSB7DQogICAgICBpZiAodGhpcy5pZHMubGVuZ3RoID09PSAwKSB7DQogICAgICAgIHRoaXMuJG1lc3NhZ2Uud2FybmluZygn6K+36YCJ5oup6KaB5Y+R6YCB5Zu+5paH5raI5oGv55qE55So5oi3Jyk7DQogICAgICB9IGVsc2Ugew0KICAgICAgICB0aGlzLm1vZGFsMTMgPSB0cnVlOw0KICAgICAgfQ0KICAgIH0sDQogICAgLy8g57yW6L6RDQogICAgZWRpdChyb3cpIHsNCiAgICAgIHRoaXMuZ2V0VXNlckZyb20ocm93LnVpZCk7DQogICAgfSwNCiAgICAvLyDkv67mlLnmiJDlip8NCiAgICBzdWJtaXRGYWlsKCkgew0KICAgICAgLy8gdGhpcy5nZXRMaXN0KCk7DQogICAgfSwNCiAgICAvLyDmjpLluo8NCiAgICBzb3J0Q2hhbmdlZChlLCBwcm9wcywgb3JkZXIpIHsNCiAgICAgIHRoaXMudXNlckZyb21bZS5wcm9wXSA9IGUub3JkZXI7DQogICAgICB0aGlzLmdldExpc3QoKTsNCiAgICB9LA0KICAgIC8v5YWo6YCJ5ZKM5Y+W5raI5YWo6YCJ5pe26Kem5Y+RDQogICAgaGFuZGxlU2VsZWN0QWxsKHNlbGVjdGlvbikgew0KICAgICAgbGV0IGlkcyA9IFtdOw0KICAgICAgc2VsZWN0aW9uLm1hcCgoZSkgPT4gew0KICAgICAgICBpZHMucHVzaChlLnVpZCk7DQogICAgICB9KTsNCiAgICAgIHRoaXMuc2VsZWN0ZWRJZHMgPSBpZHM7DQogICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiB7DQogICAgICAgIC8v56Gu5L+dZG9t5Yqg6L295a6M5q+VDQogICAgICAgIHRoaXMuc2V0Q2hlY2tlZCgpOw0KICAgICAgfSk7DQogICAgfSwNCiAgICAvLyAg6YCJ5Lit5p+Q5LiA6KGMDQogICAgaGFuZGxlU2VsZWN0Um93KHNlbGVjdGlvbiwgcm93KSB7DQogICAgICBsZXQgaWRzID0gW107DQogICAgICBzZWxlY3Rpb24ubWFwKChlKSA9PiB7DQogICAgICAgIGlkcy5wdXNoKGUudWlkKTsNCiAgICAgIH0pOw0KICAgICAgdGhpcy5zZWxlY3RlZElkcyA9IGlkczsNCiAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHsNCiAgICAgICAgLy/noa7kv51kb23liqDovb3lrozmr5UNCiAgICAgICAgdGhpcy5zZXRDaGVja2VkKCk7DQogICAgICB9KTsNCiAgICB9LA0KICAgIHNldENoZWNrZWQoKSB7DQogICAgICAvL+Wwhm5ldyBTZXQoKei9rOWMluS4uuaVsOe7hA0KICAgICAgdGhpcy5pZHMgPSBbLi4udGhpcy5zZWxlY3RlZElkc107DQogICAgICAvLyDmib7liLDnu5HlrprnmoR0YWJsZeeahHJlZuWvueW6lOeahGRvbe+8jOaJvuWIsHRhYmxl55qEb2JqRGF0YeWvueixoe+8jG9iakRhdGHkv53lrZjnmoTmmK/lvZPliY3pobXnmoTmlbDmja4NCiAgICAgIGxldCBvYmpEYXRhID0gdGhpcy4kcmVmcy50YWJsZS5vYmpEYXRhOw0KICAgICAgZm9yIChsZXQgaW5kZXggaW4gb2JqRGF0YSkgew0KICAgICAgICBpZiAodGhpcy5zZWxlY3RlZElkcy5oYXMob2JqRGF0YVtpbmRleF0udWlkKSkgew0KICAgICAgICAgIG9iakRhdGFbaW5kZXhdLl9pc0NoZWNrZWQgPSB0cnVlOw0KICAgICAgICB9DQogICAgICB9DQogICAgfSwNCiAgfSwNCn07DQo="},{"version":3,"sources":["index.vue"],"names":[],"mappings":";AAogBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;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;;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","file":"index.vue","sourceRoot":"src/pages/user/list","sourcesContent":["<template>\r\n <div>\r\n <el-card :bordered=\"false\" shadow=\"never\" class=\"ivu-mt\" :body-style=\"{ padding: 0 }\">\r\n <div class=\"padding-add\">\r\n <el-form\r\n ref=\"userFrom\"\r\n :model=\"userFrom\"\r\n label-width=\"80px\"\r\n label-position=\"right\"\r\n @submit.native.prevent\r\n inline\r\n >\r\n <div class=\"acea-row search-form\" v-if=\"!collapse\">\r\n <div>\r\n <el-form-item label=\"用户搜索:\" label-for=\"nickname\">\r\n <el-input v-model=\"userFrom.nickname\" placeholder=\"请输入用户\" clearable class=\"form_content_width\">\r\n <el-select v-model=\"field_key\" slot=\"prepend\" style=\"width: 100px\">\r\n <el-option value=\"all\" label=\"全部\"></el-option>\r\n <el-option value=\"uid\" label=\"UID\"></el-option>\r\n <el-option value=\"phone\" label=\"手机号\"></el-option>\r\n <el-option value=\"nickname\" label=\"用户昵称\"></el-option>\r\n </el-select>\r\n </el-input>\r\n </el-form-item>\r\n <el-form-item label=\"用户等级:\" label-for=\"level\">\r\n <el-select v-model=\"level\" placeholder=\"请选择用户等级\" clearable class=\"form_content_width\">\r\n <el-option value=\"all\" label=\"全部\">全部</el-option>\r\n <el-option\r\n :value=\"item.id\"\r\n v-for=\"(item, index) in levelList\"\r\n :key=\"index\"\r\n :label=\"item.name\"\r\n ></el-option>\r\n </el-select>\r\n </el-form-item>\r\n <el-form-item label=\"用户分组:\">\r\n <el-select v-model=\"group_id\" placeholder=\"请选择用户分组\" clearable class=\"form_content_width\">\r\n <el-option value=\"all\" label=\"全部\"></el-option>\r\n <el-option\r\n :value=\"item.id\"\r\n v-for=\"(item, index) in groupList\"\r\n :key=\"index\"\r\n :label=\"item.group_name\"\r\n ></el-option>\r\n </el-select>\r\n </el-form-item>\r\n </div>\r\n <el-form-item class=\"search-form-sub\">\r\n <el-button type=\"primary\" v-db-click @click=\"userSearchs\">搜索</el-button>\r\n <el-button class=\"ResetSearch\" v-db-click @click=\"reset('userFrom')\">重置</el-button>\r\n <a class=\"ivu-ml-8 font12 ml10\" v-db-click @click=\"collapse = !collapse\">\r\n <template v-if=\"!collapse\"> 展开 <i class=\"el-icon-arrow-down\" /> </template>\r\n <template v-else> 收起 <i class=\"el-icon-arrow-up\" /> </template>\r\n </a>\r\n </el-form-item>\r\n </div>\r\n <div v-if=\"collapse\" class=\"acea-row search-form\">\r\n <div class=\"search-form-box\">\r\n <el-form-item label=\"用户搜索:\" label-for=\"nickname\">\r\n <el-input v-model=\"userFrom.nickname\" placeholder=\"请输入用户\" clearable class=\"form_content_width\">\r\n <el-select v-model=\"field_key\" slot=\"prepend\" style=\"width: 100px\">\r\n <el-option value=\"all\" label=\"全部\"></el-option>\r\n <el-option value=\"uid\" label=\"UID\"></el-option>\r\n <el-option value=\"phone\" label=\"手机号\"></el-option>\r\n <el-option value=\"nickname\" label=\"用户昵称\"></el-option>\r\n </el-select>\r\n </el-input>\r\n </el-form-item>\r\n <el-form-item label=\"用户等级:\" label-for=\"level\">\r\n <el-select v-model=\"level\" placeholder=\"请选择用户等级\" clearable class=\"form_content_width\">\r\n <el-option value=\"all\" label=\"全部\">全部</el-option>\r\n <el-option\r\n :value=\"item.id\"\r\n v-for=\"(item, index) in levelList\"\r\n :key=\"index\"\r\n :label=\"item.name\"\r\n ></el-option>\r\n </el-select>\r\n </el-form-item>\r\n <el-form-item label=\"用户分组:\">\r\n <el-select v-model=\"group_id\" placeholder=\"请选择用户分组\" clearable class=\"form_content_width\">\r\n <el-option value=\"all\" label=\"全部\"></el-option>\r\n <el-option\r\n :value=\"item.id\"\r\n v-for=\"(item, index) in groupList\"\r\n :key=\"index\"\r\n :label=\"item.group_name\"\r\n ></el-option>\r\n </el-select>\r\n </el-form-item>\r\n <el-form-item label=\"分销等级:\">\r\n <el-select v-model=\"agent_level\" placeholder=\"请选择分销等级\" clearable class=\"form_content_width\">\r\n <el-option value=\"all\" label=\"全部\"></el-option>\r\n <el-option\r\n :value=\"item.grade\"\r\n v-for=\"(item, index) in membershipList\"\r\n :key=\"index\"\r\n :label=\"item.name\"\r\n ></el-option>\r\n </el-select>\r\n </el-form-item>\r\n <el-form-item label=\"用户标签:\" label-for=\"label_id\">\r\n <div class=\"labelInput acea-row row-between-wrapper\" v-db-click @click=\"openSelectLabel\">\r\n <div style=\"width: 222px\">\r\n <div v-if=\"selectDataLabel.length\">\r\n <el-tag :closable=\"false\" v-for=\"(item, index) in selectDataLabel\" :key=\"index\" class=\"mr10\">{{\r\n item.label_name\r\n }}</el-tag>\r\n </div>\r\n <span class=\"span\" v-else>选择用户关联标签</span>\r\n </div>\r\n <div class=\"ivu-icon ivu-icon-ios-arrow-down\"></div>\r\n </div>\r\n </el-form-item>\r\n <el-form-item label=\"用户身份:\">\r\n <el-select v-model=\"userFrom.is_promoter\" placeholder=\"请选择\" clearable class=\"form_content_width\">\r\n <el-option value=\"\" label=\"全部\"></el-option>\r\n <el-option value=\"1\" label=\"推广员\"></el-option>\r\n <el-option value=\"0\" label=\"普通用户\"></el-option>\r\n </el-select>\r\n </el-form-item>\r\n <el-form-item label=\"付费会员:\" label-for=\"isMember\">\r\n <el-select v-model=\"userFrom.isMember\" placeholder=\"请选择\" clearable class=\"form_content_width\">\r\n <el-option value=\"\" label=\"全部\"></el-option>\r\n <el-option value=\"1\" label=\"是\"></el-option>\r\n <el-option value=\"0\" label=\"否\"></el-option>\r\n </el-select>\r\n </el-form-item>\r\n <el-form-item label=\"储值余额:\" label-for=\"balance\">\r\n <el-input\r\n clearable\r\n placeholder=\"最小值\"\r\n v-model=\"userFrom.balance[0]\"\r\n class=\"form_range_content_width\"\r\n />\r\n ~\r\n <el-input\r\n clearable\r\n placeholder=\"最大值\"\r\n v-model=\"userFrom.balance[1]\"\r\n class=\"form_range_content_width\"\r\n />\r\n </el-form-item>\r\n <el-form-item label=\"积分剩余:\" label-for=\"integral\">\r\n <el-input\r\n clearable\r\n placeholder=\"最小值\"\r\n v-model=\"userFrom.integral[0]\"\r\n class=\"form_range_content_width\"\r\n />\r\n ~\r\n <el-input\r\n clearable\r\n placeholder=\"最大值\"\r\n v-model=\"userFrom.integral[1]\"\r\n class=\"form_range_content_width\"\r\n />\r\n </el-form-item>\r\n <el-form-item label=\"上次消费:\" label-for=\"before_pay_time\">\r\n <el-date-picker\r\n clearable\r\n v-model=\"before_pay_time\"\r\n type=\"daterange\"\r\n :editable=\"false\"\r\n @change=\"(e) => onchangeTime(e, 'before_pay_time')\"\r\n format=\"yyyy/MM/dd\"\r\n value-format=\"yyyy/MM/dd\"\r\n start-placeholder=\"开始日期\"\r\n end-placeholder=\"结束日期\"\r\n :picker-options=\"pickerOptions\"\r\n style=\"width: 250px\"\r\n ></el-date-picker>\r\n </el-form-item>\r\n <el-form-item label=\"下单次数:\" label-for=\"pay_count\">\r\n <el-input\r\n clearable\r\n placeholder=\"最小值\"\r\n v-model=\"userFrom.pay_count_num[0]\"\r\n class=\"form_range_content_width\"\r\n />\r\n ~\r\n <el-input\r\n clearable\r\n placeholder=\"最大值\"\r\n v-model=\"userFrom.pay_count_num[1]\"\r\n class=\"form_range_content_width\"\r\n />\r\n </el-form-item>\r\n <el-form-item label=\"消费金额:\" label-for=\"store_name\">\r\n <el-input\r\n clearable\r\n placeholder=\"最小值\"\r\n v-model=\"userFrom.pay_count_money[0]\"\r\n class=\"form_range_content_width\"\r\n />\r\n ~\r\n <el-input\r\n clearable\r\n placeholder=\"最大值\"\r\n v-model=\"userFrom.pay_count_money[1]\"\r\n class=\"form_range_content_width\"\r\n />\r\n </el-form-item>\r\n <el-form-item label=\"充值次数:\" label-for=\"store_name\">\r\n <el-input\r\n clearable\r\n placeholder=\"最小值\"\r\n v-model=\"userFrom.recharge_count[0]\"\r\n class=\"form_range_content_width\"\r\n />\r\n ~\r\n <el-input\r\n clearable\r\n placeholder=\"最大值\"\r\n v-model=\"userFrom.recharge_count[1]\"\r\n class=\"form_range_content_width\"\r\n />\r\n </el-form-item>\r\n <el-form-item label=\"访问情况:\" label-for=\"user_time_type\">\r\n <el-select v-model=\"user_time_type\" placeholder=\"请选择访问情况\" clearable class=\"form_content_width\">\r\n <el-option value=\"\" label=\"全部\"></el-option>\r\n <el-option value=\"visitno\" label=\"时间段未访问\"></el-option>\r\n <el-option value=\"visit\" label=\"时间段访问过\"></el-option>\r\n <el-option value=\"add_time\" label=\"首次访问\"></el-option>\r\n </el-select>\r\n </el-form-item>\r\n <el-form-item label=\"访问时间:\" label-for=\"user_time\" v-if=\"user_time_type\">\r\n <el-date-picker\r\n clearable\r\n v-model=\"timeVal\"\r\n type=\"daterange\"\r\n :editable=\"false\"\r\n @change=\"(e) => onchangeTime(e, 'user_time')\"\r\n format=\"yyyy/MM/dd\"\r\n value-format=\"yyyy/MM/dd\"\r\n start-placeholder=\"开始日期\"\r\n end-placeholder=\"结束日期\"\r\n :picker-options=\"pickerOptions\"\r\n style=\"width: 250px\"\r\n ></el-date-picker>\r\n </el-form-item>\r\n <!-- <el-form-item label=\"地区:\" label-for=\"country\">\r\n <el-select\r\n v-model=\"userFrom.country\"\r\n placeholder=\"请选择国家\"\r\n clearable\r\n @change=\"changeCountry\"\r\n class=\"form_content_width\"\r\n >\r\n <el-option value=\"domestic\" label=\"中国\"></el-option>\r\n <el-option value=\"abroad\" label=\"外国\"></el-option>\r\n </el-select>\r\n </el-form-item>\r\n <el-form-item label=\"省份:\" v-if=\"userFrom.country === 'domestic'\">\r\n <el-cascader\r\n :options=\"addresData\"\r\n :value=\"address\"\r\n v-model=\"address\"\r\n @change=\"handleChange\"\r\n clearable\r\n style=\"width: 250px\"\r\n ></el-cascader>\r\n </el-form-item> -->\r\n </div>\r\n\r\n <el-form-item class=\"search-form-sub\">\r\n <el-button type=\"primary\" label=\"default\" v-db-click @click=\"userSearchs\">搜索</el-button>\r\n <el-button class=\"ResetSearch\" v-db-click @click=\"reset('userFrom')\">重置</el-button>\r\n <a class=\"ivu-ml-8 font12 ml10\" v-db-click @click=\"collapse = !collapse\">\r\n <template v-if=\"!collapse\"> 展开 <i class=\"el-icon-arrow-down\" /> </template>\r\n <template v-else> 收起 <i class=\"el-icon-arrow-up\" /> </template>\r\n </a>\r\n </el-form-item>\r\n </div>\r\n </el-form>\r\n </div>\r\n </el-card>\r\n <el-card :bordered=\"false\" shadow=\"never\" class=\"ivu-mt mt16\" :body-style=\"{ padding: '0 20px 20px' }\">\r\n <el-tabs v-model=\"userFrom.user_type\" @tab-click=\"onClickTab\">\r\n <el-tab-pane :label=\"item.name\" :name=\"item.type\" v-for=\"(item, index) in headeNum\" :key=\"index\" />\r\n </el-tabs>\r\n <el-row :gutter=\"24\" justify=\"space-between\">\r\n <el-col :span=\"24\">\r\n <el-button v-auth=\"['admin-user-save']\" type=\"primary\" v-db-click @click=\"edit({ uid: 0 })\"\r\n >添加用户</el-button\r\n >\r\n <el-button v-auth=\"['admin-user-coupon']\" v-db-click @click=\"onSend\">发送优惠券</el-button>\r\n <el-button\r\n v-auth=\"['admin-wechat-news']\"\r\n class=\"greens mr10\"\r\n v-db-click\r\n @click=\"onSendPic\"\r\n v-if=\"userFrom.user_type === 'wechat'\"\r\n >\r\n 发送图文消息\r\n </el-button>\r\n <el-button v-auth=\"['admin-user-group_set']\" v-db-click @click=\"setGroup\">批量设置分组</el-button>\r\n <el-button v-auth=\"['admin-user-set_label']\" v-db-click @click=\"setLabel\">批量设置标签</el-button>\r\n <el-button class=\"mr10\" v-db-click @click=\"exportList\">导出</el-button>\r\n\r\n <!-- <el-button v-auth=\"['admin-user-synchro']\" class=\"mr20\" v-db-click @click=\"synchro\">同步公众号用户</el-button> -->\r\n </el-col>\r\n <el-col :span=\"24\" class=\"userAlert\" v-if=\"selectionList.length\">\r\n <el-alert show-icon>\r\n <template slot=\"title\">\r\n 已选择<i class=\"userI\"> {{ selectionList.length }} </i>项\r\n </template>\r\n </el-alert>\r\n </el-col>\r\n </el-row>\r\n <el-table\r\n :data=\"userLists\"\r\n class=\"mt16\"\r\n ref=\"table\"\r\n highlight-current-row\r\n v-loading=\"loading\"\r\n empty-text=\"暂无数据\"\r\n no-filtered-userFrom-text=\"暂无筛选结果\"\r\n @sort-change=\"sortChanged\"\r\n @select=\"handleSelectRow\"\r\n @select-all=\"handleSelectAll\"\r\n >\r\n <el-table-column type=\"expand\">\r\n <template slot-scope=\"scope\">\r\n <expandRow :row=\"scope.row\"></expandRow>\r\n </template>\r\n </el-table-column>\r\n <el-table-column type=\"selection\" :selectable=\"isSel\" width=\"55\"> </el-table-column>\r\n <el-table-column label=\"用户ID\" min-width=\"80\">\r\n <template slot-scope=\"scope\">\r\n <span>{{ scope.row.uid }}</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"头像\" min-width=\"60\">\r\n <template slot-scope=\"scope\">\r\n <div class=\"tabBox_img\" v-viewer>\r\n <img v-lazy=\"scope.row.avatar\" />\r\n </div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"姓名\" min-width=\"150\">\r\n <template slot-scope=\"scope\">\r\n <div class=\"acea-row\">\r\n <i class=\"el-icon-male\" v-show=\"scope.row.sex === '男'\" style=\"color: #2db7f5; font-size: 15px\"></i>\r\n <i class=\"el-icon-female\" v-show=\"scope.row.sex === '女'\" style=\"color: #ed4014; font-size: 15px\"></i>\r\n <div v-text=\"scope.row.nickname\" class=\"\"></div>\r\n </div>\r\n <div v-if=\"scope.row.is_del == 1\" style=\"color: red\">用户已注销</div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"付费会员\" min-width=\"90\">\r\n <template slot-scope=\"scope\">\r\n <div>{{ scope.row.isMember ? '是' : '否' }}</div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"用户等级\" min-width=\"90\">\r\n <template slot-scope=\"scope\">\r\n <div>{{ scope.row.level }}</div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"分组\" min-width=\"100\">\r\n <template slot-scope=\"scope\">\r\n <div>{{ scope.row.group_id }}</div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"分销等级\" min-width=\"100\">\r\n <template slot-scope=\"scope\">\r\n <div>{{ scope.row.agent_level_name }}</div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"手机号\" min-width=\"100\">\r\n <template slot-scope=\"scope\">\r\n <div>{{ scope.row.phone }}</div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"用户类型\" min-width=\"100\">\r\n <template slot-scope=\"scope\">\r\n <div>{{ scope.row.user_type }}</div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"上级用户\" min-width=\"100\">\r\n <template slot-scope=\"scope\">\r\n <div>{{ scope.row.spread_uid_nickname }}</div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"余额\" prop=\"now_money\" min-width=\"100\" :sortable=\"true\">\r\n <template slot-scope=\"scope\">\r\n <div>{{ scope.row.now_money }}</div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"操作\" fixed=\"right\" width=\"120\">\r\n <template slot-scope=\"scope\">\r\n <template v-if=\"scope.row.is_del != 1\">\r\n <a v-db-click @click=\"userDetail(scope.row)\">详情</a>\r\n\r\n <el-divider direction=\"vertical\"></el-divider>\r\n <el-dropdown size=\"small\" @command=\"changeMenu(scope.row, $event, scope.$index)\" :transfer=\"true\">\r\n <span class=\"el-dropdown-link\">更多<i class=\"el-icon-arrow-down el-icon--right\"></i> </span>\r\n <el-dropdown-menu slot=\"dropdown\">\r\n <!-- <el-dropdown-item command=\"1\">编辑</el-dropdown-item> -->\r\n <el-dropdown-item command=\"2\">修改余额</el-dropdown-item>\r\n <el-dropdown-item command=\"8\">修改积分</el-dropdown-item>\r\n <el-dropdown-item command=\"3\">赠送会员</el-dropdown-item>\r\n <!-- <el-dropdown-item command=\"4\" v-if=\"row.vip_name\">清除等级</el-dropdown-item>-->\r\n <el-dropdown-item command=\"5\">设置分组</el-dropdown-item>\r\n <el-dropdown-item command=\"6\">设置标签</el-dropdown-item>\r\n <el-dropdown-item command=\"7\">修改上级推广人</el-dropdown-item>\r\n <el-dropdown-item command=\"99\" v-if=\"scope.row.spread_uid\">清除上级推广人</el-dropdown-item>\r\n </el-dropdown-menu>\r\n </el-dropdown>\r\n </template>\r\n <template v-else>\r\n <a v-db-click @click=\"userDetail(scope.row)\">详情</a>\r\n </template>\r\n </template>\r\n </el-table-column>\r\n </el-table>\r\n\r\n <div class=\"acea-row row-right page\">\r\n <pagination\r\n v-if=\"total\"\r\n :total=\"total\"\r\n :page.sync=\"userFrom.page\"\r\n :limit.sync=\"userFrom.limit\"\r\n @pagination=\"pageChange\"\r\n />\r\n </div>\r\n </el-card>\r\n <!-- 编辑表单 积分余额-->\r\n <edit-from ref=\"edits\" :FromData=\"FromData\" @submitFail=\"submitFail\"></edit-from>\r\n <!-- 发送优惠券-->\r\n <send-from ref=\"sends\" :userIds=\"ids.toString()\"></send-from>\r\n <!-- 会员详情-->\r\n <user-details ref=\"userDetails\"></user-details>\r\n <!--发送图文消息 -->\r\n <el-dialog :visible.sync=\"modal13\" title=\"发送消息\" width=\"1200px\" class=\"modelBox\">\r\n <news-category\r\n v-if=\"modal13\"\r\n :isShowSend=\"isShowSend\"\r\n :userIds=\"ids.toString()\"\r\n :scrollerHeight=\"scrollerHeight\"\r\n :contentTop=\"contentTop\"\r\n :contentWidth=\"contentWidth\"\r\n :maxCols=\"maxCols\"\r\n ></news-category>\r\n </el-dialog>\r\n <!--修改推广人-->\r\n <el-dialog :visible.sync=\"promoterShow\" title=\"修改推广人\" width=\"540px\" :show-close=\"true\">\r\n <el-form ref=\"formInline\" :model=\"formInline\" label-width=\"100px\" @submit.native.prevent>\r\n <el-form-item v-if=\"formInline\" label=\"选择推广人:\" prop=\"image\">\r\n <div class=\"picBox\" v-db-click @click=\"customer\">\r\n <div class=\"pictrue\" v-if=\"formInline.image\">\r\n <img v-lazy=\"formInline.image\" />\r\n </div>\r\n <div class=\"upLoad acea-row row-center-wrapper\" v-else>\r\n <i class=\"el-icon-user\"></i>\r\n </div>\r\n </div>\r\n </el-form-item>\r\n </el-form>\r\n <div class=\"acea-row row-right mt20\">\r\n <el-button v-db-click @click=\"cancel('formInline')\">取消</el-button>\r\n <el-button type=\"primary\" v-db-click @click=\"putSend('formInline')\">提交</el-button>\r\n </div>\r\n </el-dialog>\r\n <el-dialog :visible.sync=\"customerShow\" title=\"请选择商城用户\" :show-close=\"true\" width=\"1000px\">\r\n <customerInfo v-if=\"customerShow\" @imageObject=\"imageObject\"></customerInfo>\r\n </el-dialog>\r\n <el-dialog :visible.sync=\"labelShow\" append-to-body title=\"请选择用户标签\" width=\"540px\" :show-close=\"true\">\r\n <userLabel\r\n v-if=\"labelShow\"\r\n :uid=\"labelActive.uid\"\r\n :only_get=\"!labelActive.uid\"\r\n @close=\"labelClose\"\r\n @activeData=\"activeData\"\r\n @onceGetList=\"onceGetList\"\r\n ></userLabel>\r\n </el-dialog>\r\n <el-drawer\r\n custom-class=\"demo-drawer\"\r\n :visible.sync=\"modals\"\r\n :wrapperClosable=\"false\"\r\n size=\"720\"\r\n title=\"用户信息填写\"\r\n >\r\n <div class=\"demo-drawer__content\">\r\n <userEdit ref=\"userEdit\" v-if=\"modals\" :userData=\"userData\"></userEdit>\r\n <div class=\"fix_footer acea-row row-center\">\r\n <el-button v-db-click @click=\"modals = false\">取消</el-button>\r\n <el-button type=\"primary\" v-db-click @click=\"setUser\">提交</el-button>\r\n </div>\r\n </div>\r\n </el-drawer>\r\n <!-- 用户标签 -->\r\n <el-dialog\r\n :visible.sync=\"selectLabelShow\"\r\n append-to-body\r\n title=\"请选择用户标签\"\r\n width=\"540px\"\r\n :show-close=\"true\"\r\n :close-on-click-modal=\"false\"\r\n >\r\n <userLabel\r\n v-if=\"selectLabelShow\"\r\n :uid=\"0\"\r\n ref=\"userLabel\"\r\n :only_get=\"true\"\r\n :selectDataLabel=\"selectDataLabel\"\r\n @activeData=\"activeSelectData\"\r\n @close=\"labelClose\"\r\n ></userLabel>\r\n </el-dialog>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport userLabel from '@/components/userLabel';\r\nimport { mapState } from 'vuex';\r\nimport expandRow from './tableExpand.vue';\r\nimport userEdit from './handle/userEdit.vue';\r\nimport {\r\n userList,\r\n getUserData,\r\n isShowApi,\r\n editOtherApi,\r\n giveLevelApi,\r\n userSetGroup,\r\n userGroupApi,\r\n levelListApi,\r\n userSetLabelApi,\r\n userLabelApi,\r\n userSynchro,\r\n getUserSaveForm,\r\n giveLevelTimeApi,\r\n getUserInfo,\r\n setUser,\r\n editUser,\r\n saveSetLabel,\r\n} from '@/api/user';\r\nimport { agentSpreadApi } from '@/api/agent';\r\nimport { exportUserList } from '@/api/export';\r\nimport editFrom from '../../../components/from/from';\r\nimport sendFrom from '@/components/sendCoupons/index';\r\nimport userDetails from './handle/userDetails';\r\nimport newsCategory from '@/components/newsCategory/index';\r\nimport customerInfo from '@/components/customerInfo';\r\nimport { cityList } from '@/api/app';\r\nimport { membershipDataListApi } from '@/api/membershipLevel';\r\n\r\nexport default {\r\n name: 'user_list',\r\n components: {\r\n expandRow,\r\n editFrom,\r\n sendFrom,\r\n userDetails,\r\n newsCategory,\r\n customerInfo,\r\n userLabel,\r\n userEdit,\r\n },\r\n data() {\r\n return {\r\n dataLabel: [],\r\n selectDataLabel: [],\r\n userData: {},\r\n modals: false,\r\n selectLabelShow: false,\r\n labelShow: false,\r\n customerShow: false,\r\n promoterShow: false,\r\n labelActive: {\r\n uid: 0,\r\n },\r\n formInline: {\r\n uid: 0,\r\n spread_uid: 0,\r\n image: '',\r\n },\r\n pickerOptions: this.$timeOptions,\r\n collapse: false,\r\n headeNum: [\r\n { type: '', name: '全部' },\r\n { type: 'wechat', name: '微信公众号' },\r\n { type: 'routine', name: '微信小程序' },\r\n { type: 'h5', name: 'H5' },\r\n { type: 'pc', name: 'PC' },\r\n { type: 'app', name: 'APP' },\r\n ],\r\n address: [],\r\n addresData: [],\r\n isShowSend: true,\r\n modal13: false,\r\n maxCols: 4,\r\n scrollerHeight: '600',\r\n contentTop: '130',\r\n contentWidth: '98%',\r\n grid: {\r\n xl: 6,\r\n lg: 6,\r\n md: 8,\r\n sm: 12,\r\n xs: 24,\r\n },\r\n grid2: {\r\n xl: 8,\r\n lg: 8,\r\n md: 8,\r\n sm: 12,\r\n xs: 24,\r\n },\r\n loading: false,\r\n total: 0,\r\n userFrom: {\r\n label_id: '',\r\n user_type: '',\r\n status: '',\r\n sex: '',\r\n is_promoter: '',\r\n country: '',\r\n isMember: '',\r\n pay_count_num: ['', ''],\r\n balance: ['', ''],\r\n integral: ['', ''],\r\n pay_count_money: ['', ''],\r\n recharge_count: ['', ''],\r\n user_time_type: '',\r\n user_time: '',\r\n before_pay_time: '',\r\n nickname: '',\r\n province: '',\r\n city: '',\r\n page: 1,\r\n limit: 15,\r\n level: '',\r\n group_id: '',\r\n agent_level: '',\r\n field_key: '',\r\n },\r\n before_pay_time: '',\r\n field_key: '',\r\n level: '',\r\n group_id: '',\r\n agent_level: '',\r\n label_id: '',\r\n user_time_type: '',\r\n pay_count: '',\r\n userLists: [],\r\n FromData: null,\r\n selectionList: [],\r\n user_ids: '',\r\n selectedData: [],\r\n timeVal: [],\r\n groupList: [],\r\n levelList: [],\r\n membershipList: [],\r\n labelFrom: {\r\n page: 1,\r\n limit: '',\r\n },\r\n labelLists: [],\r\n selectedIds: [], //选中合并项的id\r\n ids: [],\r\n };\r\n },\r\n computed: {\r\n ...mapState('media', ['isMobile']),\r\n },\r\n created() {\r\n this.getList();\r\n this.getCityList();\r\n },\r\n mounted() {\r\n this.userGroup();\r\n this.levelLists();\r\n this.membershipDataList();\r\n // this.groupLists();\r\n },\r\n methods: {\r\n getCityList() {\r\n cityList().then((res) => {\r\n this.addresData = res.data;\r\n });\r\n },\r\n setUser() {\r\n let data = this.$refs.userEdit.formItem;\r\n let ids = [];\r\n this.$refs.userEdit.dataLabel.map((i) => {\r\n ids.push(i.id);\r\n });\r\n data.label_id = ids;\r\n // if (!data.real_name) return this.$message.warning(\"请输入真实姓名\");\r\n // if (!data.phone) return this.$message.warning(\"请输入手机号\");\r\n // if (!data.pwd) return this.$message.warning(\"请输入密码\");\r\n // if (!data.true_pwd) return this.$message.warning(\"请输入确认密码\");\r\n if (data.uid) {\r\n editUser(data)\r\n .then((res) => {\r\n this.modals = false;\r\n this.$message.success(res.msg);\r\n this.getList();\r\n })\r\n .catch((err) => {\r\n this.$message.error(err);\r\n });\r\n } else {\r\n setUser(data)\r\n .then((res) => {\r\n this.modals = false;\r\n this.$message.success(res.msg);\r\n this.getList();\r\n })\r\n .catch((err) => {\r\n this.$message.error(err.msg);\r\n });\r\n }\r\n },\r\n onceGetList() {\r\n this.labelActive.uid = 0;\r\n this.getList();\r\n },\r\n // 标签弹窗关闭\r\n labelClose() {\r\n this.labelActive.uid = 0;\r\n this.labelShow = false;\r\n this.selectLabelShow = false;\r\n },\r\n // 提交\r\n putSend(name) {\r\n this.$refs[name].validate((valid) => {\r\n if (valid) {\r\n if (!this.formInline.spread_uid) {\r\n return this.$message.error('请上传用户');\r\n }\r\n agentSpreadApi(this.formInline)\r\n .then((res) => {\r\n this.promoterShow = false;\r\n this.$message.success(res.msg);\r\n this.getList();\r\n this.$refs[name].resetFields();\r\n })\r\n .catch((res) => {\r\n this.$message.error(res.msg);\r\n });\r\n }\r\n });\r\n },\r\n\r\n save() {\r\n this.modals = true;\r\n\r\n // this.$modalForm(getUserSaveForm())\r\n // .then(() => {\r\n // this.userFrom.page = 1;\r\n // this.getList();\r\n // })\r\n // .catch((res) => {\r\n // this.$message.error(res.msg);\r\n // });\r\n },\r\n synchro() {\r\n userSynchro()\r\n .then((res) => {\r\n this.$message.success(res.msg);\r\n })\r\n .catch((res) => {\r\n this.$message.error(res.msg);\r\n });\r\n },\r\n isSel(row) {\r\n return !!!row.is_del;\r\n },\r\n // 分组列表\r\n groupLists() {\r\n this.loading = true;\r\n userLabelApi(this.labelFrom)\r\n .then(async (res) => {\r\n let data = res.data;\r\n this.labelLists = data.list;\r\n })\r\n .catch((res) => {\r\n this.loading = false;\r\n this.$message.error(res.msg);\r\n });\r\n },\r\n onClickTab() {\r\n this.userFrom.page = 1;\r\n this.getList();\r\n },\r\n userGroup() {\r\n let data = {\r\n page: 1,\r\n limit: '',\r\n };\r\n userGroupApi(data).then((res) => {\r\n this.groupList = res.data.list;\r\n });\r\n },\r\n levelLists() {\r\n let data = {\r\n page: 1,\r\n limit: '',\r\n title: '',\r\n is_show: 1,\r\n };\r\n levelListApi(data).then((res) => {\r\n this.levelList = res.data.list;\r\n });\r\n },\r\n membershipDataList() {\r\n let data = {\r\n page: 1,\r\n limit: 0,\r\n staus: 1,\r\n };\r\n membershipDataListApi(data).then((res) => {\r\n this.membershipList = res.data.list;\r\n });\r\n },\r\n // 批量设置分组;\r\n setGroup() {\r\n if (this.ids.length === 0) {\r\n this.$message.warning('请选择要设置分组的用户');\r\n } else {\r\n let uids = { uids: this.ids };\r\n this.$modalForm(userSetGroup(uids)).then(() => {\r\n this.ids = [];\r\n this.selectedIds = [];\r\n this.getList();\r\n });\r\n }\r\n },\r\n // 批量设置标签;\r\n setLabel() {\r\n if (this.ids.length === 0) {\r\n this.$message.warning('请选择要设置标签的用户');\r\n } else {\r\n let uids = { uids: this.ids };\r\n this.labelActive.uid = 0;\r\n this.labelShow = true;\r\n // this.$modalForm(userSetLabelApi(uids)).then(() =>\r\n // this.$refs.sends.getList()\r\n // );\r\n }\r\n },\r\n activeSelectData(data) {\r\n this.selectLabelShow = false;\r\n this.selectDataLabel = data || [];\r\n if (this.selectDataLabel.length) {\r\n let activeIds = [];\r\n this.selectDataLabel.map((item) => {\r\n activeIds.push(item.id);\r\n });\r\n this.userFrom.label_id = activeIds.join(',');\r\n this.getList();\r\n } else {\r\n this.userFrom.label_id = '';\r\n }\r\n },\r\n handleClose(tag) {\r\n let i = this.selectDataLabel.findIndex((item) => item.id === tag.id);\r\n if (i !== -1) {\r\n this.selectDataLabel.splice(i, 1);\r\n }\r\n this.$nextTick(() => {\r\n if (this.selectDataLabel.length) {\r\n let activeIds = [];\r\n this.selectDataLabel.map((item) => {\r\n activeIds.push(item.id);\r\n });\r\n this.userFrom.label_id = activeIds.join(',');\r\n } else {\r\n this.userFrom.label_id = '';\r\n }\r\n });\r\n // this.userSearchs();\r\n },\r\n // 批量设置标签\r\n activeData(data) {\r\n let labels = [];\r\n if (!data.length) return;\r\n data.map((i) => {\r\n labels.push(i.id);\r\n });\r\n saveSetLabel({\r\n uids: this.ids.join(','),\r\n label_id: labels,\r\n }).then((res) => {\r\n this.labelShow = false;\r\n this.selectedIds = new Set();\r\n this.getList();\r\n this.$message.success(res.msg);\r\n });\r\n },\r\n //是否为付费会员;\r\n changeMember() {\r\n this.userFrom.page = 1;\r\n this.getList();\r\n },\r\n // 选择国家\r\n changeCountry() {\r\n if (this.userFrom.country === 'abroad' || !this.userFrom.country) {\r\n this.selectedData = [];\r\n this.userFrom.province = '';\r\n this.userFrom.city = '';\r\n this.address = [];\r\n }\r\n },\r\n // 选择地址\r\n handleChange(selectedData) {\r\n this.selectedData = selectedData.map((o) => o.label);\r\n this.userFrom.province = this.selectedData[0];\r\n this.userFrom.city = this.selectedData[1];\r\n },\r\n // 具体日期\r\n onchangeTime(e, type) {\r\n this.userFrom[type] = e ? e.join('-') : '';\r\n },\r\n userDetail(row) {\r\n this.$refs.userDetails.modals = true;\r\n this.$refs.userDetails.getDetails(row.uid);\r\n },\r\n // 操作\r\n changeMenu(row, name, index) {\r\n let uid = [];\r\n uid.push(row.uid);\r\n let uids = { uids: uid };\r\n switch (name) {\r\n case '1':\r\n this.edit(row);\r\n break;\r\n case '2':\r\n this.getOtherFrom(row.uid, 'money');\r\n break;\r\n case '3':\r\n this.giveLevelTime(row.uid);\r\n break;\r\n case '4':\r\n this.del(row, '清除 【 ' + this.tenText(row.nickname) + ' 】的会员等级', index, 'user');\r\n break;\r\n case '5':\r\n this.$modalForm(userSetGroup(uids)).then(() => this.getList());\r\n break;\r\n case '6':\r\n this.openLabel(row);\r\n break;\r\n case '7':\r\n this.editS(row);\r\n break;\r\n case '8':\r\n this.getOtherFrom(row.uid, 'point');\r\n break;\r\n default:\r\n this.del(row, '解除【 ' + this.tenText(row.nickname) + ' 】的上级推广人', index, 'tuiguang');\r\n }\r\n },\r\n tenText(str) {\r\n if (str.length > 10) {\r\n //如果字符长度超过10,后面的字符就变成...可自行调整长度和代替字符\r\n str = str.substr(0, 10) + '...'; //截取从第一个字符开始,往后取10个字符,剩余的用...代替\r\n }\r\n return str;\r\n },\r\n openLabel(row) {\r\n this.labelShow = true;\r\n this.labelActive.uid = row.uid;\r\n },\r\n openSelectLabel() {\r\n this.selectLabelShow = true;\r\n },\r\n editS(row) {\r\n this.promoterShow = true;\r\n this.formInline.uid = row.uid;\r\n },\r\n customer() {\r\n this.customerShow = true;\r\n },\r\n imageObject(e) {\r\n this.customerShow = false;\r\n this.formInline.spread_uid = e.uid;\r\n this.formInline.image = e.image;\r\n },\r\n cancel(name) {\r\n this.promoterShow = false;\r\n this.$refs[name].resetFields();\r\n this.formInline = {\r\n uid: 0,\r\n spread_uid: 0,\r\n image: '',\r\n };\r\n },\r\n // 赠送会员等级\r\n giveLevel(id) {\r\n this.$modalForm(giveLevelApi(id)).then(() => this.getList(1));\r\n\r\n // giveLevelApi(id)\r\n // .then(async (res) => {\r\n // if (res.data.status === false) {\r\n // return this.$authLapse(res.data);\r\n // }\r\n\r\n // this.FromData = res.data;\r\n // this.$refs.edits.modals = true;\r\n // })\r\n // .catch((res) => {\r\n // this.$message.error(res.msg);\r\n // });\r\n },\r\n // 赠送会员等级\r\n giveLevelTime(id) {\r\n this.$modalForm(giveLevelTimeApi(id)).then(() => this.getList(1));\r\n\r\n // giveLevelTimeApi(id)\r\n // .then(async (res) => {\r\n // if (res.data.status === false) {\r\n // return this.$authLapse(res.data);\r\n // }\r\n // this.FromData = res.data;\r\n // this.$refs.edits.modals = true;\r\n // })\r\n // .catch((res) => {\r\n // this.$message.error(res.msg);\r\n // });\r\n },\r\n // 删除\r\n del(row, tit, num, name) {\r\n let delfromData = {\r\n title: tit,\r\n num: num,\r\n url: name === 'user' ? `user/del_level/${row.uid}` : `agent/stair/delete_spread/${row.uid}`,\r\n method: name === 'user' ? 'DELETE' : 'PUT',\r\n ids: '',\r\n width: 600,\r\n };\r\n this.$modalSure(delfromData)\r\n .then((res) => {\r\n this.$message.success(res.msg);\r\n this.getList();\r\n })\r\n .catch((res) => {\r\n this.$message.error(res.msg);\r\n });\r\n },\r\n // 清除会员删除成功\r\n submitModel() {\r\n this.getList();\r\n },\r\n // 会员列表\r\n getList() {\r\n // if (this.selectDataLabel.length) {\r\n // let activeIds = [];\r\n // this.selectDataLabel.forEach((item) => {\r\n // activeIds.push(item.id);\r\n // });\r\n // this.userFrom.label_id = activeIds.join(',');\r\n // }\r\n this.userFrom.user_type = this.userFrom.user_type || '';\r\n this.userFrom.status = this.userFrom.status || '';\r\n this.userFrom.sex = this.userFrom.sex || '';\r\n this.userFrom.is_promoter = this.userFrom.is_promoter || '';\r\n this.userFrom.country = this.userFrom.country || '';\r\n this.userFrom.pay_count = this.pay_count === 'all' ? '' : this.pay_count;\r\n this.userFrom.user_time_type = this.user_time_type === 'all' ? '' : this.user_time_type;\r\n this.userFrom.field_key = this.field_key === 'all' ? '' : this.field_key;\r\n this.userFrom.level = this.level === 'all' ? '' : this.level;\r\n this.userFrom.group_id = this.group_id === 'all' ? '' : this.group_id;\r\n this.userFrom.agent_level = this.agent_level === 'all' ? '' : this.agent_level;\r\n this.loading = true;\r\n userList(this.userFrom)\r\n .then(async (res) => {\r\n let data = res.data;\r\n this.userLists = data.list;\r\n\r\n this.total = data.count;\r\n this.loading = false;\r\n this.$nextTick(() => {\r\n this.setChecked();\r\n });\r\n })\r\n .catch((res) => {\r\n this.loading = false;\r\n this.$message.error(res.msg);\r\n });\r\n },\r\n // 用户导出\r\n async exportList() {\r\n if (this.ids.length) {\r\n this.userFrom.ids = this.ids;\r\n }\r\n this.userFrom.user_type = this.userFrom.user_type || '';\r\n this.userFrom.status = this.userFrom.status || '';\r\n this.userFrom.sex = this.userFrom.sex || '';\r\n this.userFrom.is_promoter = this.userFrom.is_promoter || '';\r\n this.userFrom.country = this.userFrom.country || '';\r\n this.userFrom.pay_count = this.pay_count === 'all' ? '' : this.pay_count;\r\n this.userFrom.user_time_type = this.user_time_type === 'all' ? '' : this.user_time_type;\r\n this.userFrom.field_key = this.field_key === 'all' ? '' : this.field_key;\r\n this.userFrom.level = this.level === 'all' ? '' : this.level;\r\n this.userFrom.group_id = this.group_id === 'all' ? '' : this.group_id;\r\n this.userFrom.agent_level = this.agent_level === 'all' ? '' : this.agent_level;\r\n let [th, filekey, data, fileName] = [[], [], [], ''];\r\n // let fileName = \"\";\r\n let excelData = JSON.parse(JSON.stringify(this.userFrom));\r\n excelData.page = 1;\r\n for (let i = 0; i < excelData.page + 1; i++) {\r\n let lebData = await this.getExcelData(excelData);\r\n if (!fileName) fileName = lebData.filename;\r\n if (!filekey.length) {\r\n filekey = lebData.fileKey;\r\n }\r\n if (!th.length) th = lebData.header;\r\n if (lebData.export.length) {\r\n data = data.concat(lebData.export);\r\n excelData.page++;\r\n } else {\r\n this.$exportExcel(th, filekey, fileName, data);\r\n return;\r\n }\r\n }\r\n },\r\n getExcelData(excelData) {\r\n return new Promise((resolve, reject) => {\r\n exportUserList(excelData).then((res) => {\r\n resolve(res.data);\r\n });\r\n });\r\n },\r\n pageChange() {\r\n this.selectionList = [];\r\n this.getList();\r\n },\r\n\r\n // 搜索\r\n userSearchs() {\r\n this.userFrom.page = 1;\r\n this.getList();\r\n },\r\n // 重置\r\n reset(name) {\r\n this.userFrom = {\r\n label_id: '',\r\n status: '',\r\n sex: '',\r\n is_promoter: '',\r\n country: '',\r\n isMember: '',\r\n pay_count_num: ['', ''],\r\n balance: ['', ''],\r\n integral: ['', ''],\r\n pay_count_money: ['', ''],\r\n recharge_count: ['', ''],\r\n user_time_type: '',\r\n user_time: '',\r\n before_pay_time: '',\r\n nickname: '',\r\n province: '',\r\n city: '',\r\n page: 1,\r\n limit: 15,\r\n level: '',\r\n group_id: '',\r\n agent_level: '',\r\n field_key: '',\r\n page: 1, // 当前页\r\n limit: 20, // 每页显示条数\r\n };\r\n this.field_key = '';\r\n this.level = '';\r\n this.group_id = '';\r\n this.agent_level = '';\r\n this.dataLabel = [];\r\n this.selectDataLabel = [];\r\n this.user_time_type = '';\r\n this.pay_count = '';\r\n this.timeVal = [];\r\n this.selectedIds = new Set();\r\n this.getList();\r\n },\r\n // 获取编辑表单数据\r\n getUserFrom(id) {\r\n getUserInfo(id)\r\n .then(async (res) => {\r\n this.modals = true;\r\n this.userData = res.data;\r\n })\r\n .catch((res) => {\r\n this.$message.error(res.msg);\r\n });\r\n },\r\n // 获取积分余额表单\r\n getOtherFrom(id, type) {\r\n this.$modalForm(editOtherApi(id, type)).then(() => this.getList(1));\r\n },\r\n // 修改状态\r\n onchangeIsShow(row) {\r\n let data = {\r\n id: row.uid,\r\n status: row.status,\r\n };\r\n isShowApi(data)\r\n .then(async (res) => {\r\n this.$message.success(res.msg);\r\n })\r\n .catch((res) => {\r\n this.$message.error(res.msg);\r\n });\r\n },\r\n // 点击发送优惠券\r\n onSend() {\r\n if (this.ids.length === 0) {\r\n this.$message.warning('请选择要发送优惠券的用户');\r\n } else {\r\n this.$refs.sends.modals = true;\r\n this.$refs.sends.getList();\r\n }\r\n },\r\n // 发送图文消息\r\n onSendPic() {\r\n if (this.ids.length === 0) {\r\n this.$message.warning('请选择要发送图文消息的用户');\r\n } else {\r\n this.modal13 = true;\r\n }\r\n },\r\n // 编辑\r\n edit(row) {\r\n this.getUserFrom(row.uid);\r\n },\r\n // 修改成功\r\n submitFail() {\r\n // this.getList();\r\n },\r\n // 排序\r\n sortChanged(e, props, order) {\r\n this.userFrom[e.prop] = e.order;\r\n this.getList();\r\n },\r\n //全选和取消全选时触发\r\n handleSelectAll(selection) {\r\n let ids = [];\r\n selection.map((e) => {\r\n ids.push(e.uid);\r\n });\r\n this.selectedIds = ids;\r\n this.$nextTick(() => {\r\n //确保dom加载完毕\r\n this.setChecked();\r\n });\r\n },\r\n // 选中某一行\r\n handleSelectRow(selection, row) {\r\n let ids = [];\r\n selection.map((e) => {\r\n ids.push(e.uid);\r\n });\r\n this.selectedIds = ids;\r\n this.$nextTick(() => {\r\n //确保dom加载完毕\r\n this.setChecked();\r\n });\r\n },\r\n setChecked() {\r\n //将new Set()转化为数组\r\n this.ids = [...this.selectedIds];\r\n // 找到绑定的table的ref对应的dom,找到table的objData对象,objData保存的是当前页的数据\r\n let objData = this.$refs.table.objData;\r\n for (let index in objData) {\r\n if (this.selectedIds.has(objData[index].uid)) {\r\n objData[index]._isChecked = true;\r\n }\r\n }\r\n },\r\n },\r\n};\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n::v-deep .el-tabs__item {\r\n height: 54px !important;\r\n line-height: 54px !important;\r\n}\r\n\r\n.picBox {\r\n display: inline-block;\r\n cursor: pointer;\r\n\r\n .upLoad {\r\n width: 58px;\r\n height: 58px;\r\n line-height: 58px;\r\n border: 1px dotted rgba(0, 0, 0, 0.1);\r\n border-radius: 4px;\r\n background: rgba(0, 0, 0, 0.02);\r\n font-size: 24px;\r\n font-weight: 500;\r\n }\r\n\r\n .pictrue {\r\n width: 60px;\r\n height: 60px;\r\n border: 1px dotted rgba(0, 0, 0, 0.1);\r\n margin-right: 10px;\r\n\r\n img {\r\n width: 100%;\r\n height: 100%;\r\n }\r\n }\r\n}\r\n.fix_footer {\r\n position: fixed;\r\n bottom: 0;\r\n width: -webkit-fill-available;\r\n background: #fff;\r\n padding: 20px 0px;\r\n box-sizing: border-box;\r\n z-index: 100;\r\n}\r\n.userFrom {\r\n ::v-deep .ivu-form-item-content {\r\n margin-left: 0px !important;\r\n }\r\n}\r\n\r\n.userAlert {\r\n margin-top: 20px;\r\n}\r\n\r\n.userI {\r\n color: var(--prev-color-primary);\r\n font-style: normal;\r\n}\r\n\r\nimg {\r\n height: 36px;\r\n display: block;\r\n}\r\n\r\n.tabBox_img {\r\n width: 36px;\r\n height: 36px;\r\n border-radius: 4px;\r\n cursor: pointer;\r\n\r\n img {\r\n width: 100%;\r\n height: 100%;\r\n }\r\n}\r\n\r\n.tabBox_tit {\r\n width: 60%;\r\n font-size: 12px !important;\r\n margin: 0 2px 0 10px;\r\n letter-spacing: 1px;\r\n padding: 5px 0;\r\n box-sizing: border-box;\r\n}\r\n\r\n.modelBox {\r\n ::v-deep .ivu-modal-body {\r\n padding: 0 16px 16px 16px !important;\r\n }\r\n}\r\n\r\n.vipName {\r\n color: #dab176;\r\n}\r\n\r\n.listbox {\r\n ::v-deep .ivu-divider-horizontal {\r\n margin: 0 !important;\r\n }\r\n}\r\n\r\n.labelInput {\r\n width: 250px;\r\n border: 1px solid #dcdee2;\r\n padding: 0 15px;\r\n border-radius: 5px;\r\n min-height: 30px;\r\n cursor: pointer;\r\n font-size: 12px;\r\n\r\n .span {\r\n color: #c5c8ce;\r\n }\r\n\r\n .ivu-icon-ios-arrow-down {\r\n font-size: 14px;\r\n color: #808695;\r\n }\r\n}\r\n\r\n.demo-drawer-footer {\r\n width: 100%;\r\n position: absolute;\r\n bottom: 0;\r\n left: 0;\r\n border-top: 1px solid #e8e8e8;\r\n padding: 10px 16px;\r\n text-align: right;\r\n background: #fff;\r\n}\r\n\r\n.search-form {\r\n display: flex;\r\n justify-content: space-between;\r\n\r\n .search-form-box {\r\n display: flex;\r\n flex-wrap: wrap;\r\n flex: 1;\r\n }\r\n}\r\n\r\n.search-form-sub {\r\n display: flex;\r\n}\r\n</style>\r\n"]}]}
|