forked from liweijie/education
1 line
38 KiB
JSON
1 line
38 KiB
JSON
{"remainingRequest":"C:\\Users\\Admin\\Desktop\\education\\frontend\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!C:\\Users\\Admin\\Desktop\\education\\frontend\\src\\views\\system\\user\\index.vue?vue&type=script&lang=js","dependencies":[{"path":"C:\\Users\\Admin\\Desktop\\education\\frontend\\src\\views\\system\\user\\index.vue","mtime":1787567871668},{"path":"C:\\Users\\Admin\\Desktop\\education\\frontend\\node_modules\\cache-loader\\dist\\cjs.js","mtime":1787309791955},{"path":"C:\\Users\\Admin\\Desktop\\education\\frontend\\node_modules\\babel-loader\\lib\\index.js","mtime":1787309793142},{"path":"C:\\Users\\Admin\\Desktop\\education\\frontend\\node_modules\\cache-loader\\dist\\cjs.js","mtime":1787309791955},{"path":"C:\\Users\\Admin\\Desktop\\education\\frontend\\node_modules\\vue-loader\\lib\\index.js","mtime":1787309793790}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:Ly8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KDQppbXBvcnQgeyBsaXN0VXNlciwgZ2V0VXNlciwgZGVsVXNlciwgYWRkVXNlciwgdXBkYXRlVXNlciwgcmVzZXRVc2VyUHdkLCBjaGFuZ2VVc2VyU3RhdHVzLCBkZXB0VHJlZVNlbGVjdCB9IGZyb20gIkAvYXBpL3N5c3RlbS91c2VyIg0KaW1wb3J0IFRyZWVzZWxlY3QgZnJvbSAiQHJpb3BoYWUvdnVlLXRyZWVzZWxlY3QiDQppbXBvcnQgIkByaW9waGFlL3Z1ZS10cmVlc2VsZWN0L2Rpc3QvdnVlLXRyZWVzZWxlY3QuY3NzIg0KaW1wb3J0IFRyZWVQYW5lbCBmcm9tICJAL2NvbXBvbmVudHMvVHJlZVBhbmVsIg0KaW1wb3J0IEV4Y2VsSW1wb3J0RGlhbG9nIGZyb20gIkAvY29tcG9uZW50cy9FeGNlbEltcG9ydERpYWxvZyINCmltcG9ydCBVc2VyVmlld0RyYXdlciBmcm9tICIuL3ZpZXciDQppbXBvcnQgcGFzc3dvcmRSdWxlIGZyb20gIkAvdXRpbHMvcGFzc3dvcmRSdWxlIg0KDQpleHBvcnQgZGVmYXVsdCB7DQogIG5hbWU6ICJVc2VyIiwNCiAgbWl4aW5zOiBbcGFzc3dvcmRSdWxlXSwNCiAgZGljdHM6IFsnc3lzX25vcm1hbF9kaXNhYmxlJywgJ3N5c191c2VyX3NleCddLA0KICBjb21wb25lbnRzOiB7IFRyZWVzZWxlY3QsIFRyZWVQYW5lbCwgRXhjZWxJbXBvcnREaWFsb2csIFVzZXJWaWV3RHJhd2VyIH0sDQogIGRhdGEoKSB7DQogICAgcmV0dXJuIHsNCiAgICAgIC8vIOmBrue9qeWxgg0KICAgICAgbG9hZGluZzogdHJ1ZSwNCiAgICAgIC8vIOihqOagvOmrmOW6pg0KICAgICAgdGFibGVIZWlnaHQ6IHdpbmRvdy5pbm5lckhlaWdodCAtIDI0MCwNCiAgICAgIC8vIOmAieS4reaVsOe7hA0KICAgICAgaWRzOiBbXSwNCiAgICAgIC8vIOmdnuWNleS4quemgeeUqA0KICAgICAgc2luZ2xlOiB0cnVlLA0KICAgICAgLy8g6Z2e5aSa5Liq56aB55SoDQogICAgICBtdWx0aXBsZTogdHJ1ZSwNCiAgICAgIC8vIOaYvuekuuaQnOe0ouadoeS7tg0KICAgICAgc2hvd1NlYXJjaDogdHJ1ZSwNCiAgICAgIC8vIOaAu+adoeaVsA0KICAgICAgdG90YWw6IDAsDQogICAgICAvLyDnlKjmiLfooajmoLzmlbDmja4NCiAgICAgIHVzZXJMaXN0OiBudWxsLA0KICAgICAgLy8g5by55Ye65bGC5qCH6aKYDQogICAgICB0aXRsZTogIiIsDQogICAgICAvLyDmiYDmnInpg6jpl6jmoJHpgInpobkNCiAgICAgIGRlcHRPcHRpb25zOiB1bmRlZmluZWQsDQogICAgICAvLyDov4fmu6Tmjonlt7LnpoHnlKjpg6jpl6jmoJHpgInpobkNCiAgICAgIGVuYWJsZWREZXB0T3B0aW9uczogdW5kZWZpbmVkLA0KICAgICAgLy8g5piv5ZCm5pi+56S65by55Ye65bGCDQogICAgICBvcGVuOiBmYWxzZSwNCiAgICAgIC8vIOm7mOiupOWvhueggQ0KICAgICAgaW5pdFBhc3N3b3JkOiB1bmRlZmluZWQsDQogICAgICAvLyDml6XmnJ/ojIPlm7QNCiAgICAgIGRhdGVSYW5nZTogW10sDQogICAgICAvLyDlspfkvY3pgInpobkNCiAgICAgIHBvc3RPcHRpb25zOiBbXSwNCiAgICAgIC8vIOinkuiJsumAiemhuQ0KICAgICAgcm9sZU9wdGlvbnM6IFtdLA0KICAgICAgLy8g6KGo5Y2V5Y+C5pWwDQogICAgICBmb3JtOiB7fSwNCiAgICAgIC8vIOafpeivouWPguaVsA0KICAgICAgcXVlcnlQYXJhbXM6IHsNCiAgICAgICAgcGFnZU51bTogMSwNCiAgICAgICAgcGFnZVNpemU6IDEwLA0KICAgICAgICB1c2VyTmFtZTogdW5kZWZpbmVkLA0KICAgICAgICBwaG9uZW51bWJlcjogdW5kZWZpbmVkLA0KICAgICAgICBzdGF0dXM6IHVuZGVmaW5lZCwNCiAgICAgICAgZGVwdElkOiB1bmRlZmluZWQNCiAgICAgIH0sDQogICAgICAvLyDliJfkv6Hmga8NCiAgICAgIGNvbHVtbnM6IHsNCiAgICAgICAgdXNlcklkOiB7IGxhYmVsOiAn55So5oi357yW5Y+3JywgdmlzaWJsZTogdHJ1ZSB9LA0KICAgICAgICB1c2VyTmFtZTogeyBsYWJlbDogJ+eUqOaIt+WQjeensCcsIHZpc2libGU6IHRydWUgfSwNCiAgICAgICAgbmlja05hbWU6IHsgbGFiZWw6ICfnlKjmiLfmmLXnp7AnLCB2aXNpYmxlOiB0cnVlIH0sDQogICAgICAgIGRlcHROYW1lOiB7IGxhYmVsOiAn6YOo6ZeoJywgdmlzaWJsZTogdHJ1ZSB9LA0KICAgICAgICBwaG9uZW51bWJlcjogeyBsYWJlbDogJ+aJi+acuuWPt+eggScsIHZpc2libGU6IHRydWUgfSwNCiAgICAgICAgc3RhdHVzOiB7IGxhYmVsOiAn54q25oCBJywgdmlzaWJsZTogdHJ1ZSB9LA0KICAgICAgICBjcmVhdGVUaW1lOiB7IGxhYmVsOiAn5Yib5bu65pe26Ze0JywgdmlzaWJsZTogdHJ1ZSB9DQogICAgICB9LA0KICAgICAgLy8g6KGo5Y2V5qCh6aqMDQogICAgICBydWxlczogew0KICAgICAgICB1c2VyTmFtZTogWw0KICAgICAgICAgIHsgcmVxdWlyZWQ6IHRydWUsIG1lc3NhZ2U6ICLnlKjmiLflkI3np7DkuI3og73kuLrnqboiLCB0cmlnZ2VyOiAiYmx1ciIgfSwNCiAgICAgICAgICB7IG1pbjogMiwgbWF4OiAyMCwgbWVzc2FnZTogJ+eUqOaIt+WQjeensOmVv+W6puW/hemhu+S7i+S6jiAyIOWSjCAyMCDkuYvpl7QnLCB0cmlnZ2VyOiAnYmx1cicgfQ0KICAgICAgICBdLA0KICAgICAgICBuaWNrTmFtZTogWw0KICAgICAgICAgIHsgcmVxdWlyZWQ6IHRydWUsIG1lc3NhZ2U6ICLnlKjmiLfmmLXnp7DkuI3og73kuLrnqboiLCB0cmlnZ2VyOiAiYmx1ciIgfQ0KICAgICAgICBdLA0KICAgICAgICBlbWFpbDogWw0KICAgICAgICAgIHsNCiAgICAgICAgICAgIHR5cGU6ICJlbWFpbCIsDQogICAgICAgICAgICBtZXNzYWdlOiAi6K+36L6T5YWl5q2j56Gu55qE6YKu566x5Zyw5Z2AIiwNCiAgICAgICAgICAgIHRyaWdnZXI6IFsiYmx1ciIsICJjaGFuZ2UiXQ0KICAgICAgICAgIH0NCiAgICAgICAgXSwNCiAgICAgICAgcGhvbmVudW1iZXI6IFsNCiAgICAgICAgICB7DQogICAgICAgICAgICBwYXR0ZXJuOiAvXjFbM3w0fDV8Nnw3fDh8OV1bMC05XVxkezh9JC8sDQogICAgICAgICAgICBtZXNzYWdlOiAi6K+36L6T5YWl5q2j56Gu55qE5omL5py65Y+356CBIiwNCiAgICAgICAgICAgIHRyaWdnZXI6ICJibHVyIg0KICAgICAgICAgIH0NCiAgICAgICAgXQ0KICAgICAgfQ0KICAgIH0NCiAgfSwNCiAgY3JlYXRlZCgpIHsNCiAgICB0aGlzLmdldExpc3QoKQ0KICAgIHRoaXMuZ2V0RGVwdFRyZWUoKQ0KICAgIHRoaXMuZ2V0Q29uZmlnS2V5KCJzeXMudXNlci5pbml0UGFzc3dvcmQiKS50aGVuKHJlc3BvbnNlID0+IHsNCiAgICAgIHRoaXMuaW5pdFBhc3N3b3JkID0gcmVzcG9uc2UubXNnDQogICAgfSkNCiAgfSwNCiAgbW91bnRlZCgpIHsNCiAgICB0aGlzLmdldFRhYmxlSGVpZ2h0KCkNCiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5nZXRUYWJsZUhlaWdodCkNCiAgfSwNCiAgYmVmb3JlRGVzdHJveSgpIHsNCiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5nZXRUYWJsZUhlaWdodCkNCiAgfSwNCiAgd2F0Y2g6IHsNCiAgICBzaG93U2VhcmNoKCkgew0KICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4gew0KICAgICAgICB0aGlzLmdldFRhYmxlSGVpZ2h0KCkNCiAgICAgIH0pDQogICAgfQ0KICB9LA0KICBtZXRob2RzOiB7DQogICAgLyoqIOiOt+WPluihqOagvOmrmOW6piAqLw0KICAgIGdldFRhYmxlSGVpZ2h0KCkgew0KICAgICAgY29uc3Qgb2Zmc2V0ID0gdGhpcy5zaG93U2VhcmNoID8gMjQwIDogMTkwDQogICAgICB0aGlzLnRhYmxlSGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0IC0gb2Zmc2V0DQogICAgfSwNCiAgICAvKiog5p+l6K+i55So5oi35YiX6KGoICovDQogICAgZ2V0TGlzdCgpIHsNCiAgICAgIHRoaXMubG9hZGluZyA9IHRydWUNCiAgICAgIGxpc3RVc2VyKHRoaXMuYWRkRGF0ZVJhbmdlKHRoaXMucXVlcnlQYXJhbXMsIHRoaXMuZGF0ZVJhbmdlKSkudGhlbihyZXNwb25zZSA9PiB7DQogICAgICAgIHRoaXMudXNlckxpc3QgPSByZXNwb25zZS5yb3dzDQogICAgICAgIHRoaXMudG90YWwgPSByZXNwb25zZS50b3RhbA0KICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZQ0KICAgICAgfSkuY2F0Y2goKCkgPT4gew0KICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZQ0KICAgICAgfSkNCiAgICB9LA0KICAgIC8qKiDmn6Xor6Lpg6jpl6jkuIvmi4nmoJHnu5PmnoQgKi8NCiAgICBnZXREZXB0VHJlZSgpIHsNCiAgICAgIGRlcHRUcmVlU2VsZWN0KCkudGhlbihyZXNwb25zZSA9PiB7DQogICAgICAgIHRoaXMuZGVwdE9wdGlvbnMgPSByZXNwb25zZS5kYXRhDQogICAgICAgIHRoaXMuZW5hYmxlZERlcHRPcHRpb25zID0gdGhpcy5maWx0ZXJEaXNhYmxlZERlcHQoSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShyZXNwb25zZS5kYXRhKSkpDQogICAgICB9KS5jYXRjaCgoKSA9PiB7DQogICAgICAgIHRoaXMuZGVwdE9wdGlvbnMgPSBbXQ0KICAgICAgICB0aGlzLmVuYWJsZWREZXB0T3B0aW9ucyA9IFtdDQogICAgICB9KQ0KICAgIH0sDQogICAgLy8g6L+H5ruk56aB55So55qE6YOo6ZeoDQogICAgZmlsdGVyRGlzYWJsZWREZXB0KGRlcHRMaXN0KSB7DQogICAgICByZXR1cm4gZGVwdExpc3QuZmlsdGVyKGRlcHQgPT4gew0KICAgICAgICBpZiAoZGVwdC5kaXNhYmxlZCkgew0KICAgICAgICAgIHJldHVybiBmYWxzZQ0KICAgICAgICB9DQogICAgICAgIGlmIChkZXB0LmNoaWxkcmVuICYmIGRlcHQuY2hpbGRyZW4ubGVuZ3RoKSB7DQogICAgICAgICAgZGVwdC5jaGlsZHJlbiA9IHRoaXMuZmlsdGVyRGlzYWJsZWREZXB0KGRlcHQuY2hpbGRyZW4pDQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIHRydWUNCiAgICAgIH0pDQogICAgfSwNCiAgICAvLyDoioLngrnljZXlh7vkuovku7YNCiAgICBoYW5kbGVOb2RlQ2xpY2soZGF0YSkgew0KICAgICAgdGhpcy5xdWVyeVBhcmFtcy5kZXB0SWQgPSBkYXRhLmlkDQogICAgICB0aGlzLmhhbmRsZVF1ZXJ5KCkNCiAgICB9LA0KICAgIC8vIOeUqOaIt+eKtuaAgeS/ruaUuQ0KICAgIGhhbmRsZVN0YXR1c0NoYW5nZShyb3cpIHsNCiAgICAgIGxldCB0ZXh0ID0gcm93LnN0YXR1cyA9PT0gIjAiID8gIuWQr+eUqCIgOiAi5YGc55SoIg0KICAgICAgdGhpcy4kbW9kYWwuY29uZmlybSgn56Gu6K6k6KaBIicgKyB0ZXh0ICsgJyIiJyArIHJvdy51c2VyTmFtZSArICci55So5oi35ZCX77yfJykudGhlbihmdW5jdGlvbigpIHsNCiAgICAgICAgcmV0dXJuIGNoYW5nZVVzZXJTdGF0dXMocm93LnVzZXJJZCwgcm93LnN0YXR1cykNCiAgICAgIH0pLnRoZW4oKCkgPT4gew0KICAgICAgICB0aGlzLiRtb2RhbC5tc2dTdWNjZXNzKHRleHQgKyAi5oiQ5YqfIikNCiAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKCkgew0KICAgICAgICByb3cuc3RhdHVzID0gcm93LnN0YXR1cyA9PT0gIjAiID8gIjEiIDogIjAiDQogICAgICB9KQ0KICAgIH0sDQogICAgLy8g5Y+W5raI5oyJ6ZKuDQogICAgY2FuY2VsKCkgew0KICAgICAgdGhpcy5vcGVuID0gZmFsc2UNCiAgICAgIHRoaXMucmVzZXQoKQ0KICAgIH0sDQogICAgLy8g6KGo5Y2V6YeN572uDQogICAgcmVzZXQoKSB7DQogICAgICB0aGlzLmZvcm0gPSB7DQogICAgICAgIHVzZXJJZDogdW5kZWZpbmVkLA0KICAgICAgICBkZXB0SWQ6IHVuZGVmaW5lZCwNCiAgICAgICAgdXNlck5hbWU6IHVuZGVmaW5lZCwNCiAgICAgICAgbmlja05hbWU6IHVuZGVmaW5lZCwNCiAgICAgICAgcGFzc3dvcmQ6IHVuZGVmaW5lZCwNCiAgICAgICAgcGhvbmVudW1iZXI6IHVuZGVmaW5lZCwNCiAgICAgICAgZW1haWw6IHVuZGVmaW5lZCwNCiAgICAgICAgc2V4OiB1bmRlZmluZWQsDQogICAgICAgIHN0YXR1czogIjAiLA0KICAgICAgICByZW1hcms6IHVuZGVmaW5lZCwNCiAgICAgICAgcG9zdElkczogW10sDQogICAgICAgIHJvbGVJZHM6IFtdDQogICAgICB9DQogICAgICB0aGlzLnJlc2V0Rm9ybSgiZm9ybSIpDQogICAgfSwNCiAgICAvKiog5pCc57Si5oyJ6ZKu5pON5L2cICovDQogICAgaGFuZGxlUXVlcnkoKSB7DQogICAgICB0aGlzLnF1ZXJ5UGFyYW1zLnBhZ2VOdW0gPSAxDQogICAgICB0aGlzLmdldExpc3QoKQ0KICAgIH0sDQogICAgLyoqIOmHjee9ruaMiemSruaTjeS9nCAqLw0KICAgIHJlc2V0UXVlcnkoKSB7DQogICAgICB0aGlzLmRhdGVSYW5nZSA9IFtdDQogICAgICB0aGlzLnJlc2V0Rm9ybSgicXVlcnlGb3JtIikNCiAgICAgIHRoaXMucXVlcnlQYXJhbXMuZGVwdElkID0gdW5kZWZpbmVkDQogICAgICB0aGlzLiRyZWZzLmRlcHRUcmVlUmVmLnNldEN1cnJlbnRLZXkobnVsbCkNCiAgICAgIHRoaXMuaGFuZGxlUXVlcnkoKQ0KICAgIH0sDQogICAgLy8g5aSa6YCJ5qGG6YCJ5Lit5pWw5o2uDQogICAgaGFuZGxlU2VsZWN0aW9uQ2hhbmdlKHNlbGVjdGlvbikgew0KICAgICAgdGhpcy5pZHMgPSBzZWxlY3Rpb24ubWFwKGl0ZW0gPT4gaXRlbS51c2VySWQpDQogICAgICB0aGlzLnNpbmdsZSA9IHNlbGVjdGlvbi5sZW5ndGggIT0gMQ0KICAgICAgdGhpcy5tdWx0aXBsZSA9ICFzZWxlY3Rpb24ubGVuZ3RoDQogICAgfSwNCiAgICAvLyDmm7TlpJrmk43kvZzop6blj5ENCiAgICBoYW5kbGVDb21tYW5kKGNvbW1hbmQsIHJvdykgew0KICAgICAgc3dpdGNoIChjb21tYW5kKSB7DQogICAgICAgIGNhc2UgImhhbmRsZVJlc2V0UHdkIjoNCiAgICAgICAgICB0aGlzLmhhbmRsZVJlc2V0UHdkKHJvdykNCiAgICAgICAgICBicmVhaw0KICAgICAgICBjYXNlICJoYW5kbGVBdXRoUm9sZSI6DQogICAgICAgICAgdGhpcy5oYW5kbGVBdXRoUm9sZShyb3cpDQogICAgICAgICAgYnJlYWsNCiAgICAgICAgZGVmYXVsdDoNCiAgICAgICAgICBicmVhaw0KICAgICAgfQ0KICAgIH0sDQogICAgLyoqIOaWsOWinuaMiemSruaTjeS9nCAqLw0KICAgIGhhbmRsZUFkZCgpIHsNCiAgICAgIHRoaXMucmVzZXQoKQ0KICAgICAgZ2V0VXNlcigpLnRoZW4ocmVzcG9uc2UgPT4gew0KICAgICAgICB0aGlzLnBvc3RPcHRpb25zID0gcmVzcG9uc2UucG9zdHMNCiAgICAgICAgdGhpcy5yb2xlT3B0aW9ucyA9IHJlc3BvbnNlLnJvbGVzDQogICAgICAgIHRoaXMub3BlbiA9IHRydWUNCiAgICAgICAgdGhpcy50aXRsZSA9ICLmt7vliqDnlKjmiLciDQogICAgICAgIHRoaXMuZm9ybS5wYXNzd29yZCA9IHRoaXMuaW5pdFBhc3N3b3JkDQogICAgICB9KQ0KICAgIH0sDQogICAgLyoqIOS/ruaUueaMiemSruaTjeS9nCAqLw0KICAgIGhhbmRsZVVwZGF0ZShyb3cpIHsNCiAgICAgIHRoaXMucmVzZXQoKQ0KICAgICAgY29uc3QgdXNlcklkID0gcm93LnVzZXJJZCB8fCB0aGlzLmlkcw0KICAgICAgZ2V0VXNlcih1c2VySWQpLnRoZW4ocmVzcG9uc2UgPT4gew0KICAgICAgICB0aGlzLmZvcm0gPSByZXNwb25zZS5kYXRhDQogICAgICAgIHRoaXMucG9zdE9wdGlvbnMgPSByZXNwb25zZS5wb3N0cw0KICAgICAgICB0aGlzLnJvbGVPcHRpb25zID0gcmVzcG9uc2Uucm9sZXMNCiAgICAgICAgdGhpcy4kc2V0KHRoaXMuZm9ybSwgInBvc3RJZHMiLCByZXNwb25zZS5wb3N0SWRzKQ0KICAgICAgICB0aGlzLiRzZXQodGhpcy5mb3JtLCAicm9sZUlkcyIsIHJlc3BvbnNlLnJvbGVJZHMpDQogICAgICAgIHRoaXMub3BlbiA9IHRydWUNCiAgICAgICAgdGhpcy50aXRsZSA9ICLkv67mlLnnlKjmiLciDQogICAgICAgIHRoaXMuZm9ybS5wYXNzd29yZCA9ICIiDQogICAgICB9KQ0KICAgIH0sDQogICAgLyoqIOmHjee9ruWvhueggeaMiemSruaTjeS9nCAqLw0KICAgIGhhbmRsZVJlc2V0UHdkKHJvdykgew0KICAgICAgdGhpcy4kcHJvbXB0KGDor7fovpPlhaXjgIwke3Jvdy51c2VyTmFtZX3jgI3nmoTmlrDlr4bnoIFgLCAi6YeN572u5a+G56CBIiwgew0KICAgICAgICBjb25maXJtQnV0dG9uVGV4dDogIuehruWumiIsDQogICAgICAgIGNhbmNlbEJ1dHRvblRleHQ6ICLlj5bmtogiLA0KICAgICAgICBjbG9zZU9uQ2xpY2tNb2RhbDogZmFsc2UsDQogICAgICAgIGlucHV0VmFsaWRhdG9yOiB0aGlzLnB3ZFByb21wdFZhbGlkYXRvcg0KICAgICAgfSkudGhlbigoeyB2YWx1ZSB9KSA9PiB7DQogICAgICAgIHJlc2V0VXNlclB3ZChyb3cudXNlcklkLCB2YWx1ZSkudGhlbigoKSA9PiB7DQogICAgICAgICAgdGhpcy4kbW9kYWwubXNnU3VjY2Vzcygi5L+u5pS55oiQ5Yqf77yM5paw5a+G56CB5piv77yaIiArIHZhbHVlKQ0KICAgICAgICB9KQ0KICAgICAgfSkuY2F0Y2goKCkgPT4ge30pDQogICAgfSwNCiAgICAvKiog5YiG6YWN6KeS6Imy5pON5L2cICovDQogICAgaGFuZGxlQXV0aFJvbGUocm93KSB7DQogICAgICBjb25zdCB1c2VySWQgPSByb3cudXNlcklkDQogICAgICB0aGlzLiRyb3V0ZXIucHVzaCgiL3N5c3RlbS91c2VyLWF1dGgvcm9sZS8iICsgdXNlcklkKQ0KICAgIH0sDQogICAgLyoqIOaPkOS6pOaMiemSriAqLw0KICAgIHN1Ym1pdEZvcm0oKSB7DQogICAgICB0aGlzLiRyZWZzWyJmb3JtIl0udmFsaWRhdGUodmFsaWQgPT4gew0KICAgICAgICBpZiAodmFsaWQpIHsNCiAgICAgICAgICBpZiAodGhpcy5mb3JtLnVzZXJJZCAhPSB1bmRlZmluZWQpIHsNCiAgICAgICAgICAgIHVwZGF0ZVVzZXIodGhpcy5mb3JtKS50aGVuKCgpID0+IHsNCiAgICAgICAgICAgICAgdGhpcy4kbW9kYWwubXNnU3VjY2Vzcygi5L+u5pS55oiQ5YqfIikNCiAgICAgICAgICAgICAgdGhpcy5vcGVuID0gZmFsc2UNCiAgICAgICAgICAgICAgdGhpcy5nZXRMaXN0KCkNCiAgICAgICAgICAgIH0pDQogICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIGFkZFVzZXIodGhpcy5mb3JtKS50aGVuKCgpID0+IHsNCiAgICAgICAgICAgICAgdGhpcy4kbW9kYWwubXNnU3VjY2Vzcygi5paw5aKe5oiQ5YqfIikNCiAgICAgICAgICAgICAgdGhpcy5vcGVuID0gZmFsc2UNCiAgICAgICAgICAgICAgdGhpcy5nZXRMaXN0KCkNCiAgICAgICAgICAgIH0pDQogICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICB9KQ0KICAgIH0sDQogICAgLyoqIOWIoOmZpOaMiemSruaTjeS9nCAqLw0KICAgIGhhbmRsZURlbGV0ZShyb3cpIHsNCiAgICAgIGNvbnN0IHVzZXJJZHMgPSByb3cudXNlcklkIHx8IHRoaXMuaWRzDQogICAgICB0aGlzLiRtb2RhbC5jb25maXJtKCfmmK/lkKbnoa7orqTliKDpmaTnlKjmiLfnvJblj7fkuLoiJyArIHVzZXJJZHMgKyAnIueahOaVsOaNrumhue+8nycpLnRoZW4oZnVuY3Rpb24oKSB7DQogICAgICAgIHJldHVybiBkZWxVc2VyKHVzZXJJZHMpDQogICAgICB9KS50aGVuKCgpID0+IHsNCiAgICAgICAgdGhpcy5nZXRMaXN0KCkNCiAgICAgICAgdGhpcy4kbW9kYWwubXNnU3VjY2Vzcygi5Yig6Zmk5oiQ5YqfIikNCiAgICAgIH0pLmNhdGNoKCgpID0+IHt9KQ0KICAgIH0sDQogICAgLyoqIOWvvOWHuuaMiemSruaTjeS9nCAqLw0KICAgIGhhbmRsZUV4cG9ydCgpIHsNCiAgICAgIHRoaXMuZG93bmxvYWQoJ3N5c3RlbS91c2VyL2V4cG9ydCcsIHsNCiAgICAgICAgLi4udGhpcy5xdWVyeVBhcmFtcw0KICAgICAgfSwgYHVzZXJfJHtuZXcgRGF0ZSgpLmdldFRpbWUoKX0ueGxzeGApDQogICAgfSwNCiAgICAvKiog6K+m5oOF5oyJ6ZKu5pON5L2cICovDQogICAgaGFuZGxlVmlld0RhdGEocm93KSB7DQogICAgICB0aGlzLiRyZWZzLnVzZXJWaWV3UmVmLm9wZW4ocm93LnVzZXJJZCkNCiAgICB9LA0KICAgIC8qKiDlr7zlhaXmjInpkq7mk43kvZwgKi8NCiAgICBoYW5kbGVJbXBvcnQoKSB7DQogICAgICB0aGlzLiRyZWZzLmltcG9ydFVzZXJSZWYub3BlbigpDQogICAgfQ0KICB9DQp9DQo="},{"version":3,"sources":["index.vue"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiLA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"index.vue","sourceRoot":"src/views/system/user","sourcesContent":["<template>\r\n <div class=\"app-container tree-sidebar-manage-wrap system-user\">\r\n <tree-panel title=\"组织机构\" :tree-data=\"deptOptions\" search-placeholder=\"请输入部门名称\" storage-key=\"dept-sidebar-width\" :defaultExpandAll=\"true\" @node-click=\"handleNodeClick\" @refresh=\"getDeptTree\" ref=\"deptTreeRef\" />\r\n <div class=\"tree-sidebar-content\">\r\n <div class=\"content-inner\">\r\n <el-form :model=\"queryParams\" ref=\"queryForm\" size=\"small\" :inline=\"true\" v-show=\"showSearch\" label-width=\"68px\">\r\n <el-form-item label=\"用户名称\" prop=\"userName\">\r\n <el-input v-model=\"queryParams.userName\" placeholder=\"请输入用户名称\" clearable style=\"width: 240px\" @keyup.enter.native=\"handleQuery\" />\r\n </el-form-item>\r\n <el-form-item label=\"手机号码\" prop=\"phonenumber\">\r\n <el-input v-model=\"queryParams.phonenumber\" placeholder=\"请输入手机号码\" clearable style=\"width: 240px\" @keyup.enter.native=\"handleQuery\" />\r\n </el-form-item>\r\n <el-form-item label=\"状态\" prop=\"status\">\r\n <el-select v-model=\"queryParams.status\" placeholder=\"用户状态\" clearable style=\"width: 240px\">\r\n <el-option v-for=\"dict in dict.type.sys_normal_disable\" :key=\"dict.value\" :label=\"dict.label\" :value=\"dict.value\" />\r\n </el-select>\r\n </el-form-item>\r\n <el-form-item label=\"创建时间\">\r\n <el-date-picker v-model=\"dateRange\" style=\"width: 240px\" value-format=\"yyyy-MM-dd\" type=\"daterange\" range-separator=\"-\" start-placeholder=\"开始日期\" end-placeholder=\"结束日期\"></el-date-picker>\r\n </el-form-item>\r\n <el-form-item>\r\n <el-button type=\"primary\" icon=\"el-icon-search\" size=\"mini\" @click=\"handleQuery\">搜索</el-button>\r\n <el-button icon=\"el-icon-refresh\" size=\"mini\" @click=\"resetQuery\">重置</el-button>\r\n </el-form-item>\r\n </el-form>\r\n\r\n <el-row :gutter=\"10\" class=\"mb8\">\r\n <el-col :span=\"1.5\">\r\n <el-button type=\"primary\" plain icon=\"el-icon-plus\" size=\"mini\" @click=\"handleAdd\" v-hasPermi=\"['system:user:add']\">新增</el-button>\r\n </el-col>\r\n <el-col :span=\"1.5\">\r\n <el-button type=\"success\" plain icon=\"el-icon-edit\" size=\"mini\" :disabled=\"single\" @click=\"handleUpdate\" v-hasPermi=\"['system:user:edit']\">修改</el-button>\r\n </el-col>\r\n <el-col :span=\"1.5\">\r\n <el-button type=\"danger\" plain icon=\"el-icon-delete\" size=\"mini\" :disabled=\"multiple\" @click=\"handleDelete\" v-hasPermi=\"['system:user:remove']\">删除</el-button>\r\n </el-col>\r\n <el-col :span=\"1.5\">\r\n <el-button type=\"info\" plain icon=\"el-icon-upload2\" size=\"mini\" @click=\"handleImport\" v-hasPermi=\"['system:user:import']\">导入</el-button>\r\n </el-col>\r\n <el-col :span=\"1.5\">\r\n <el-button type=\"warning\" plain icon=\"el-icon-download\" size=\"mini\" @click=\"handleExport\" v-hasPermi=\"['system:user:export']\">导出</el-button>\r\n </el-col>\r\n <right-toolbar :showSearch.sync=\"showSearch\" @queryTable=\"getList\" :columns=\"columns\"></right-toolbar>\r\n </el-row>\r\n\r\n <el-table v-loading=\"loading\" :data=\"userList\" @selection-change=\"handleSelectionChange\" :height=\"tableHeight\">\r\n <el-table-column type=\"selection\" width=\"50\" align=\"center\" />\r\n <el-table-column label=\"用户编号\" align=\"center\" key=\"userId\" prop=\"userId\" v-if=\"columns.userId.visible\" />\r\n <el-table-column label=\"用户名称\" align=\"center\" key=\"userName\" v-if=\"columns.userName.visible\" :show-overflow-tooltip=\"true\">\r\n <template slot-scope=\"scope\">\r\n <a class=\"link-type\" style=\"cursor:pointer\" @click=\"handleViewData(scope.row)\">{{ scope.row.userName }}</a>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"用户昵称\" align=\"center\" key=\"nickName\" prop=\"nickName\" v-if=\"columns.nickName.visible\" :show-overflow-tooltip=\"true\" />\r\n <el-table-column label=\"部门\" align=\"center\" key=\"deptName\" prop=\"dept.deptName\" v-if=\"columns.deptName.visible\" :show-overflow-tooltip=\"true\" />\r\n <el-table-column label=\"手机号码\" align=\"center\" key=\"phonenumber\" prop=\"phonenumber\" v-if=\"columns.phonenumber.visible\" width=\"120\" />\r\n <el-table-column label=\"状态\" align=\"center\" key=\"status\" v-if=\"columns.status.visible\">\r\n <template slot-scope=\"scope\">\r\n <el-switch v-model=\"scope.row.status\" active-value=\"0\" inactive-value=\"1\" @change=\"handleStatusChange(scope.row)\"></el-switch>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"创建时间\" align=\"center\" prop=\"createTime\" v-if=\"columns.createTime.visible\" width=\"160\">\r\n <template slot-scope=\"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=\"160\" class-name=\"small-padding fixed-width\">\r\n <template slot-scope=\"scope\" v-if=\"scope.row.userId !== 1\">\r\n <el-button size=\"mini\" type=\"text\" icon=\"el-icon-edit\" @click=\"handleUpdate(scope.row)\" v-hasPermi=\"['system:user:edit']\">修改</el-button>\r\n <el-button size=\"mini\" type=\"text\" icon=\"el-icon-delete\" @click=\"handleDelete(scope.row)\" v-hasPermi=\"['system:user:remove']\">删除</el-button>\r\n <el-dropdown size=\"mini\" @command=\"(command) => handleCommand(command, scope.row)\" v-hasPermi=\"['system:user:resetPwd', 'system:user:edit']\">\r\n <el-button size=\"mini\" type=\"text\" icon=\"el-icon-d-arrow-right\">更多</el-button>\r\n <el-dropdown-menu slot=\"dropdown\">\r\n <el-dropdown-item command=\"handleResetPwd\" icon=\"el-icon-key\" v-hasPermi=\"['system:user:resetPwd']\">重置密码</el-dropdown-item>\r\n <el-dropdown-item command=\"handleAuthRole\" icon=\"el-icon-circle-check\" v-hasPermi=\"['system:user:edit']\">分配角色</el-dropdown-item>\r\n </el-dropdown-menu>\r\n </el-dropdown>\r\n </template>\r\n </el-table-column>\r\n </el-table>\r\n <pagination v-show=\"total > 0\" :total=\"total\" :page.sync=\"queryParams.pageNum\" :limit.sync=\"queryParams.pageSize\" @pagination=\"getList\" />\r\n </div>\r\n </div>\r\n\r\n <!-- 添加或修改用户配置对话框 -->\r\n <el-dialog :title=\"title\" :visible.sync=\"open\" width=\"600px\" append-to-body>\r\n <el-form ref=\"form\" :model=\"form\" :rules=\"rules\" label-width=\"80px\">\r\n <el-row>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"用户昵称\" prop=\"nickName\">\r\n <el-input v-model=\"form.nickName\" placeholder=\"请输入用户昵称\" maxlength=\"30\" />\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"归属部门\" prop=\"deptId\">\r\n <treeselect v-model=\"form.deptId\" :options=\"enabledDeptOptions\" :show-count=\"true\" placeholder=\"请选择归属部门\" />\r\n </el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-row>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"手机号码\" prop=\"phonenumber\">\r\n <el-input v-model=\"form.phonenumber\" placeholder=\"请输入手机号码\" maxlength=\"11\" />\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"邮箱\" prop=\"email\">\r\n <el-input v-model=\"form.email\" placeholder=\"请输入邮箱\" maxlength=\"50\" />\r\n </el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-row>\r\n <el-col :span=\"12\">\r\n <el-form-item v-if=\"form.userId == undefined\" label=\"用户名称\" prop=\"userName\">\r\n <el-input v-model=\"form.userName\" placeholder=\"请输入用户名称\" maxlength=\"30\" />\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item v-if=\"form.userId == undefined\" label=\"用户密码\" prop=\"password\" :rules=\"pwdValidator\">\r\n <el-input v-model=\"form.password\" placeholder=\"请输入用户密码\" type=\"password\" maxlength=\"20\" show-password />\r\n </el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-row>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"用户性别\">\r\n <el-select v-model=\"form.sex\" placeholder=\"请选择性别\">\r\n <el-option v-for=\"dict in dict.type.sys_user_sex\" :key=\"dict.value\" :label=\"dict.label\" :value=\"dict.value\"></el-option>\r\n </el-select>\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"状态\">\r\n <el-radio-group v-model=\"form.status\">\r\n <el-radio v-for=\"dict in dict.type.sys_normal_disable\" :key=\"dict.value\" :label=\"dict.value\">{{ dict.label }}</el-radio>\r\n </el-radio-group>\r\n </el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-row>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"岗位\">\r\n <el-select v-model=\"form.postIds\" multiple placeholder=\"请选择岗位\">\r\n <el-option v-for=\"item in postOptions\" :key=\"item.postId\" :label=\"item.postName\" :value=\"item.postId\" :disabled=\"item.status == 1\" ></el-option>\r\n </el-select>\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"角色\">\r\n <el-select v-model=\"form.roleIds\" multiple placeholder=\"请选择角色\">\r\n <el-option v-for=\"item in roleOptions\" :key=\"item.roleId\" :label=\"item.roleName\" :value=\"item.roleId\" :disabled=\"item.status == 1\"></el-option>\r\n </el-select>\r\n </el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-row>\r\n <el-col :span=\"24\">\r\n <el-form-item label=\"备注\">\r\n <el-input v-model=\"form.remark\" type=\"textarea\" placeholder=\"请输入内容\"></el-input>\r\n </el-form-item>\r\n </el-col>\r\n </el-row>\r\n </el-form>\r\n <div slot=\"footer\" class=\"dialog-footer\">\r\n <el-button type=\"primary\" @click=\"submitForm\">确 定</el-button>\r\n <el-button @click=\"cancel\">取 消</el-button>\r\n </div>\r\n </el-dialog>\r\n\r\n <!-- 用户详情抽屉 -->\r\n <user-view-drawer ref=\"userViewRef\" />\r\n <!-- 用户导入对话框 -->\r\n <excel-import-dialog ref=\"importUserRef\" title=\"用户导入\" action=\"/system/user/importData\" template-action=\"/system/user/importTemplate\" template-file-name=\"user_template\" update-support-label=\"是否更新已经存在的用户数据\" @success=\"getList\" />\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport { listUser, getUser, delUser, addUser, updateUser, resetUserPwd, changeUserStatus, deptTreeSelect } from \"@/api/system/user\"\r\nimport Treeselect from \"@riophae/vue-treeselect\"\r\nimport \"@riophae/vue-treeselect/dist/vue-treeselect.css\"\r\nimport TreePanel from \"@/components/TreePanel\"\r\nimport ExcelImportDialog from \"@/components/ExcelImportDialog\"\r\nimport UserViewDrawer from \"./view\"\r\nimport passwordRule from \"@/utils/passwordRule\"\r\n\r\nexport default {\r\n name: \"User\",\r\n mixins: [passwordRule],\r\n dicts: ['sys_normal_disable', 'sys_user_sex'],\r\n components: { Treeselect, TreePanel, ExcelImportDialog, UserViewDrawer },\r\n data() {\r\n return {\r\n // 遮罩层\r\n loading: true,\r\n // 表格高度\r\n tableHeight: window.innerHeight - 240,\r\n // 选中数组\r\n ids: [],\r\n // 非单个禁用\r\n single: true,\r\n // 非多个禁用\r\n multiple: true,\r\n // 显示搜索条件\r\n showSearch: true,\r\n // 总条数\r\n total: 0,\r\n // 用户表格数据\r\n userList: null,\r\n // 弹出层标题\r\n title: \"\",\r\n // 所有部门树选项\r\n deptOptions: undefined,\r\n // 过滤掉已禁用部门树选项\r\n enabledDeptOptions: undefined,\r\n // 是否显示弹出层\r\n open: false,\r\n // 默认密码\r\n initPassword: undefined,\r\n // 日期范围\r\n dateRange: [],\r\n // 岗位选项\r\n postOptions: [],\r\n // 角色选项\r\n roleOptions: [],\r\n // 表单参数\r\n form: {},\r\n // 查询参数\r\n queryParams: {\r\n pageNum: 1,\r\n pageSize: 10,\r\n userName: undefined,\r\n phonenumber: undefined,\r\n status: undefined,\r\n deptId: undefined\r\n },\r\n // 列信息\r\n columns: {\r\n userId: { label: '用户编号', visible: true },\r\n userName: { label: '用户名称', visible: true },\r\n nickName: { label: '用户昵称', visible: true },\r\n deptName: { label: '部门', visible: true },\r\n phonenumber: { label: '手机号码', visible: true },\r\n status: { label: '状态', visible: true },\r\n createTime: { label: '创建时间', visible: true }\r\n },\r\n // 表单校验\r\n rules: {\r\n userName: [\r\n { required: true, message: \"用户名称不能为空\", trigger: \"blur\" },\r\n { min: 2, max: 20, message: '用户名称长度必须介于 2 和 20 之间', trigger: 'blur' }\r\n ],\r\n nickName: [\r\n { required: true, message: \"用户昵称不能为空\", trigger: \"blur\" }\r\n ],\r\n email: [\r\n {\r\n type: \"email\",\r\n message: \"请输入正确的邮箱地址\",\r\n trigger: [\"blur\", \"change\"]\r\n }\r\n ],\r\n phonenumber: [\r\n {\r\n pattern: /^1[3|4|5|6|7|8|9][0-9]\\d{8}$/,\r\n message: \"请输入正确的手机号码\",\r\n trigger: \"blur\"\r\n }\r\n ]\r\n }\r\n }\r\n },\r\n created() {\r\n this.getList()\r\n this.getDeptTree()\r\n this.getConfigKey(\"sys.user.initPassword\").then(response => {\r\n this.initPassword = response.msg\r\n })\r\n },\r\n mounted() {\r\n this.getTableHeight()\r\n window.addEventListener('resize', this.getTableHeight)\r\n },\r\n beforeDestroy() {\r\n window.removeEventListener('resize', this.getTableHeight)\r\n },\r\n watch: {\r\n showSearch() {\r\n this.$nextTick(() => {\r\n this.getTableHeight()\r\n })\r\n }\r\n },\r\n methods: {\r\n /** 获取表格高度 */\r\n getTableHeight() {\r\n const offset = this.showSearch ? 240 : 190\r\n this.tableHeight = window.innerHeight - offset\r\n },\r\n /** 查询用户列表 */\r\n getList() {\r\n this.loading = true\r\n listUser(this.addDateRange(this.queryParams, this.dateRange)).then(response => {\r\n this.userList = response.rows\r\n this.total = response.total\r\n this.loading = false\r\n }).catch(() => {\r\n this.loading = false\r\n })\r\n },\r\n /** 查询部门下拉树结构 */\r\n getDeptTree() {\r\n deptTreeSelect().then(response => {\r\n this.deptOptions = response.data\r\n this.enabledDeptOptions = this.filterDisabledDept(JSON.parse(JSON.stringify(response.data)))\r\n }).catch(() => {\r\n this.deptOptions = []\r\n this.enabledDeptOptions = []\r\n })\r\n },\r\n // 过滤禁用的部门\r\n filterDisabledDept(deptList) {\r\n return deptList.filter(dept => {\r\n if (dept.disabled) {\r\n return false\r\n }\r\n if (dept.children && dept.children.length) {\r\n dept.children = this.filterDisabledDept(dept.children)\r\n }\r\n return true\r\n })\r\n },\r\n // 节点单击事件\r\n handleNodeClick(data) {\r\n this.queryParams.deptId = data.id\r\n this.handleQuery()\r\n },\r\n // 用户状态修改\r\n handleStatusChange(row) {\r\n let text = row.status === \"0\" ? \"启用\" : \"停用\"\r\n this.$modal.confirm('确认要\"' + text + '\"\"' + row.userName + '\"用户吗?').then(function() {\r\n return changeUserStatus(row.userId, row.status)\r\n }).then(() => {\r\n this.$modal.msgSuccess(text + \"成功\")\r\n }).catch(function() {\r\n row.status = row.status === \"0\" ? \"1\" : \"0\"\r\n })\r\n },\r\n // 取消按钮\r\n cancel() {\r\n this.open = false\r\n this.reset()\r\n },\r\n // 表单重置\r\n reset() {\r\n this.form = {\r\n userId: undefined,\r\n deptId: undefined,\r\n userName: undefined,\r\n nickName: undefined,\r\n password: undefined,\r\n phonenumber: undefined,\r\n email: undefined,\r\n sex: undefined,\r\n status: \"0\",\r\n remark: undefined,\r\n postIds: [],\r\n roleIds: []\r\n }\r\n this.resetForm(\"form\")\r\n },\r\n /** 搜索按钮操作 */\r\n handleQuery() {\r\n this.queryParams.pageNum = 1\r\n this.getList()\r\n },\r\n /** 重置按钮操作 */\r\n resetQuery() {\r\n this.dateRange = []\r\n this.resetForm(\"queryForm\")\r\n this.queryParams.deptId = undefined\r\n this.$refs.deptTreeRef.setCurrentKey(null)\r\n this.handleQuery()\r\n },\r\n // 多选框选中数据\r\n handleSelectionChange(selection) {\r\n this.ids = selection.map(item => item.userId)\r\n this.single = selection.length != 1\r\n this.multiple = !selection.length\r\n },\r\n // 更多操作触发\r\n handleCommand(command, row) {\r\n switch (command) {\r\n case \"handleResetPwd\":\r\n this.handleResetPwd(row)\r\n break\r\n case \"handleAuthRole\":\r\n this.handleAuthRole(row)\r\n break\r\n default:\r\n break\r\n }\r\n },\r\n /** 新增按钮操作 */\r\n handleAdd() {\r\n this.reset()\r\n getUser().then(response => {\r\n this.postOptions = response.posts\r\n this.roleOptions = response.roles\r\n this.open = true\r\n this.title = \"添加用户\"\r\n this.form.password = this.initPassword\r\n })\r\n },\r\n /** 修改按钮操作 */\r\n handleUpdate(row) {\r\n this.reset()\r\n const userId = row.userId || this.ids\r\n getUser(userId).then(response => {\r\n this.form = response.data\r\n this.postOptions = response.posts\r\n this.roleOptions = response.roles\r\n this.$set(this.form, \"postIds\", response.postIds)\r\n this.$set(this.form, \"roleIds\", response.roleIds)\r\n this.open = true\r\n this.title = \"修改用户\"\r\n this.form.password = \"\"\r\n })\r\n },\r\n /** 重置密码按钮操作 */\r\n handleResetPwd(row) {\r\n this.$prompt(`请输入「${row.userName}」的新密码`, \"重置密码\", {\r\n confirmButtonText: \"确定\",\r\n cancelButtonText: \"取消\",\r\n closeOnClickModal: false,\r\n inputValidator: this.pwdPromptValidator\r\n }).then(({ value }) => {\r\n resetUserPwd(row.userId, value).then(() => {\r\n this.$modal.msgSuccess(\"修改成功,新密码是:\" + value)\r\n })\r\n }).catch(() => {})\r\n },\r\n /** 分配角色操作 */\r\n handleAuthRole(row) {\r\n const userId = row.userId\r\n this.$router.push(\"/system/user-auth/role/\" + userId)\r\n },\r\n /** 提交按钮 */\r\n submitForm() {\r\n this.$refs[\"form\"].validate(valid => {\r\n if (valid) {\r\n if (this.form.userId != undefined) {\r\n updateUser(this.form).then(() => {\r\n this.$modal.msgSuccess(\"修改成功\")\r\n this.open = false\r\n this.getList()\r\n })\r\n } else {\r\n addUser(this.form).then(() => {\r\n this.$modal.msgSuccess(\"新增成功\")\r\n this.open = false\r\n this.getList()\r\n })\r\n }\r\n }\r\n })\r\n },\r\n /** 删除按钮操作 */\r\n handleDelete(row) {\r\n const userIds = row.userId || this.ids\r\n this.$modal.confirm('是否确认删除用户编号为\"' + userIds + '\"的数据项?').then(function() {\r\n return delUser(userIds)\r\n }).then(() => {\r\n this.getList()\r\n this.$modal.msgSuccess(\"删除成功\")\r\n }).catch(() => {})\r\n },\r\n /** 导出按钮操作 */\r\n handleExport() {\r\n this.download('system/user/export', {\r\n ...this.queryParams\r\n }, `user_${new Date().getTime()}.xlsx`)\r\n },\r\n /** 详情按钮操作 */\r\n handleViewData(row) {\r\n this.$refs.userViewRef.open(row.userId)\r\n },\r\n /** 导入按钮操作 */\r\n handleImport() {\r\n this.$refs.importUserRef.open()\r\n }\r\n }\r\n}\r\n</script>\r\n<style scoped>\r\n.system-user ::v-deep .el-table ::-webkit-scrollbar {\r\n display: none;\r\n}\r\n.system-user ::v-deep .el-table {\r\n scrollbar-width: none;\r\n -ms-overflow-style: none;\r\n}\r\n.system-user ::v-deep .el-table__body-wrapper::-webkit-scrollbar {\r\n display: none;\r\n}\r\n.system-user ::v-deep .el-table__body-wrapper {\r\n scrollbar-width: none;\r\n -ms-overflow-style: none;\r\n}\r\n</style>\r\n"]}]} |