4bcdb4d763a6ab730a7d5bce13299892.json 22 KB

1
  1. {"remainingRequest":"/usr/local/develop/php/www/waibao/NN2024071001/NN2024071001/addons/admin/node_modules/vue-loader/lib/index.js??vue-loader-options!/usr/local/develop/php/www/waibao/NN2024071001/NN2024071001/addons/admin/src/views/system/user/index.vue?vue&type=script&lang=js&","dependencies":[{"path":"/usr/local/develop/php/www/waibao/NN2024071001/NN2024071001/addons/admin/src/views/system/user/index.vue","mtime":1656100758000},{"path":"/usr/local/develop/php/www/waibao/NN2024071001/NN2024071001/addons/admin/node_modules/cache-loader/dist/cjs.js","mtime":499162500000},{"path":"/usr/local/develop/php/www/waibao/NN2024071001/NN2024071001/addons/admin/node_modules/babel-loader/lib/index.js","mtime":499162500000},{"path":"/usr/local/develop/php/www/waibao/NN2024071001/NN2024071001/addons/admin/node_modules/cache-loader/dist/cjs.js","mtime":499162500000},{"path":"/usr/local/develop/php/www/waibao/NN2024071001/NN2024071001/addons/admin/node_modules/vue-loader/lib/index.js","mtime":499162500000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:Ly8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KCmltcG9ydCB1cGxvYWRJbWFnZSBmcm9tICdAL2NvbXBvbmVudHMvdXBsb2FkSW1hZ2UnCmltcG9ydCB7IG1hcEdldHRlcnMgfSBmcm9tICJ2dWV4IjsKZXhwb3J0IGRlZmF1bHQgewogIG5hbWU6ICJTeXNVc2VyIiwKICBkYXRhKCkgewogICAgcmV0dXJuIHsKICAgICAgdGFibGU6IHt1cmw6ICcvdXNlci9pbmRleCcsIHdoZXJlOiB7fX0sICAvLyDooajmoLzphY3nva4KICAgICAgY2hvb3NlOiBbXSwgIC8vIOihqOagvOmAieS4reaVsOaNrgogICAgICBzaG93RWRpdDogZmFsc2UsICAvLyDmmK/lkKbmmL7npLrooajljZXlvLnnqpcKICAgICAgZWRpdEZvcm06IHt9LCAgLy8g6KGo5Y2V5pWw5o2uCiAgICAgIGVkaXRSdWxlczogeyAgLy8g6KGo5Y2V6aqM6K+B6KeE5YiZCiAgICAgICAgdXNlcm5hbWU6IFsKICAgICAgICAgIHtyZXF1aXJlZDogdHJ1ZSwgbWVzc2FnZTogJ+ivt+i+k+WFpeeUqOaIt+i0puWPtycsIHRyaWdnZXI6ICdibHVyJ30KICAgICAgICBdLAogICAgICAgIHJlYWxuYW1lOiBbCiAgICAgICAgICB7cmVxdWlyZWQ6IHRydWUsIG1lc3NhZ2U6ICfor7fovpPlhaXnlKjmiLflp5PlkI0nLCB0cmlnZ2VyOiAnYmx1cid9CiAgICAgICAgXSwKICAgICAgICBnZW5kZXI6IFsKICAgICAgICAgIHtyZXF1aXJlZDogdHJ1ZSwgbWVzc2FnZTogJ+ivt+mAieaLqeaAp+WIqycsIHRyaWdnZXI6ICdibHVyJ30KICAgICAgICBdLAogICAgICAgIHBhc3N3b3JkOiBbCiAgICAgICAgICB7cmVxdWlyZWQ6IHRydWUsIG1lc3NhZ2U6ICfor7fovpPlhaXlr4bnoIEnLCB0cmlnZ2VyOiAnYmx1cid9CiAgICAgICAgXQogICAgICB9LAogICAgICByb2xlTGlzdDogW10sICAvLyDop5LoibLliJfooagKICAgIH0KICB9LAogIGNvbXB1dGVkOiB7CiAgICAuLi5tYXBHZXR0ZXJzKFsicGVybWlzc2lvbiJdKSwKICB9LAogIGNvbXBvbmVudHM6IHt1cGxvYWRJbWFnZX0sCiAgbW91bnRlZCgpIHsKICAgIHRoaXMucXVlcnlSb2xlcygpOyAgLy8g5p+l6K+i6KeS6Imy5YiX6KGoCiAgfSwKICBtZXRob2RzOiB7CiAgICAvKiDmmL7npLrnvJbovpEgKi8KICAgIGVkaXQocm93KSB7CiAgICAgIHRoaXMuZWRpdEZvcm0gPSBPYmplY3QuYXNzaWduKHt9LCByb3csIHsKICAgICAgICByb2xlX2lkczogcm93LnJvbGVzLm1hcChkID0+IGQuaWQpCiAgICAgIH0pOwogICAgICB0aGlzLnNob3dFZGl0ID0gdHJ1ZTsKICAgIH0sCiAgICAvKiDkv53lrZjnvJbovpEgKi8KICAgIHNhdmUoKSB7CiAgICAgIHRoaXMuJHJlZnNbJ2VkaXRGb3JtJ10udmFsaWRhdGUoKHZhbGlkKSA9PiB7CiAgICAgICAgaWYgKHZhbGlkKSB7CiAgICAgICAgICBjb25zdCBsb2FkaW5nID0gdGhpcy4kbG9hZGluZyh7bG9jazogdHJ1ZX0pOwogICAgICAgICAgdGhpcy4kaHR0cC5wb3N0KCcvdXNlci9lZGl0JywgdGhpcy5lZGl0Rm9ybSkudGhlbihyZXMgPT4gewogICAgICAgICAgICBsb2FkaW5nLmNsb3NlKCk7CiAgICAgICAgICAgIGlmIChyZXMuZGF0YS5jb2RlID09PSAwKSB7CiAgICAgICAgICAgICAgdGhpcy5zaG93RWRpdCA9IGZhbHNlOwogICAgICAgICAgICAgIHRoaXMuJG1lc3NhZ2Uoe3R5cGU6ICdzdWNjZXNzJywgbWVzc2FnZTogcmVzLmRhdGEubXNnfSk7CiAgICAgICAgICAgICAgdGhpcy4kcmVmcy50YWJsZS5yZWxvYWQoKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICB0aGlzLiRtZXNzYWdlLmVycm9yKHJlcy5kYXRhLm1zZyk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pLmNhdGNoKGUgPT4gewogICAgICAgICAgICBsb2FkaW5nLmNsb3NlKCk7CiAgICAgICAgICAgIHRoaXMuJG1lc3NhZ2UuZXJyb3IoZS5tZXNzYWdlKTsKICAgICAgICAgIH0pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0sCiAgICAvKiDliKDpmaQgKi8KICAgIHJlbW92ZShyb3cpIHsKICAgICAgaWYgKCFyb3cpIHsgIC8vIOaJuemHj+WIoOmZpAogICAgICAgIGlmICh0aGlzLmNob29zZS5sZW5ndGggPT09IDApIHJldHVybiB0aGlzLiRtZXNzYWdlLmVycm9yKCfor7foh7PlsJHpgInmi6nkuIDmnaHmlbDmja4nKTsKICAgICAgICBsZXQgaWRzID0gdGhpcy5jaG9vc2UubWFwKGQgPT4gZC5pZCk7CiAgICAgICAgdGhpcy4kY29uZmlybSgn56Gu5a6a6KaB5Yig6Zmk6YCJ5Lit55qE55So5oi35ZCXPycsICfmj5DnpLonLCB7dHlwZTogJ3dhcm5pbmcnfSkudGhlbigoKSA9PiB7CiAgICAgICAgICBjb25zdCBsb2FkaW5nID0gdGhpcy4kbG9hZGluZyh7bG9jazogdHJ1ZX0pOwogICAgICAgICAgdGhpcy4kaHR0cC5wb3N0KCcvdXNlci9kZWxldGUnLCB7aWQ6IGlkc30pLnRoZW4ocmVzID0+IHsKICAgICAgICAgICAgbG9hZGluZy5jbG9zZSgpOwogICAgICAgICAgICBpZiAocmVzLmRhdGEuY29kZSA9PT0gMCkgewogICAgICAgICAgICAgIHRoaXMuJG1lc3NhZ2Uoe3R5cGU6ICdzdWNjZXNzJywgbWVzc2FnZTogcmVzLmRhdGEubXNnfSk7CiAgICAgICAgICAgICAgdGhpcy4kcmVmcy50YWJsZS5yZWxvYWQoKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICB0aGlzLiRtZXNzYWdlLmVycm9yKHJlcy5kYXRhLm1zZyk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pLmNhdGNoKGUgPT4gewogICAgICAgICAgICBsb2FkaW5nLmNsb3NlKCk7CiAgICAgICAgICAgIHRoaXMuJG1lc3NhZ2UuZXJyb3IoZS5tZXNzYWdlKTsKICAgICAgICAgIH0pOwogICAgICAgIH0pLmNhdGNoKCgpID0+IDApOwogICAgICB9IGVsc2UgeyAgLy8g5Y2V5Liq5Yig6ZmkCiAgICAgICAgY29uc3QgbG9hZGluZyA9IHRoaXMuJGxvYWRpbmcoe2xvY2s6IHRydWV9KTsKICAgICAgICB0aGlzLiRodHRwLnBvc3QoJy91c2VyL2RlbGV0ZScsIHtpZDpyb3cuaWR9KS50aGVuKHJlcyA9PiB7CiAgICAgICAgICBsb2FkaW5nLmNsb3NlKCk7CiAgICAgICAgICBpZiAocmVzLmRhdGEuY29kZSA9PT0gMCkgewogICAgICAgICAgICB0aGlzLiRtZXNzYWdlKHt0eXBlOiAnc3VjY2VzcycsIG1lc3NhZ2U6IHJlcy5kYXRhLm1zZ30pOwogICAgICAgICAgICB0aGlzLiRyZWZzLnRhYmxlLnJlbG9hZCgpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhpcy4kbWVzc2FnZS5lcnJvcihyZXMuZGF0YS5tc2cpOwogICAgICAgICAgfQogICAgICAgIH0pLmNhdGNoKGUgPT4gewogICAgICAgICAgbG9hZGluZy5jbG9zZSgpOwogICAgICAgICAgdGhpcy4kbWVzc2FnZS5lcnJvcihlLm1lc3NhZ2UpOwogICAgICAgIH0pOwogICAgICB9CiAgICB9LAogICAgLyoqCiAgICAgKiDph43nva7lr4bnoIEKICAgICAqLwogICAgcmVzZXRQd2Qocm93KXsKICAgICAgY29uc3QgbG9hZGluZyA9IHRoaXMuJGxvYWRpbmcoe2xvY2s6IHRydWV9KTsKICAgICAgICB0aGlzLiRodHRwLnBvc3QoJy91c2VyL3Jlc2V0UHdkJywge2lkOnJvdy5pZH0pLnRoZW4ocmVzID0+IHsKICAgICAgICAgIGxvYWRpbmcuY2xvc2UoKTsKICAgICAgICAgIGlmIChyZXMuZGF0YS5jb2RlID09PSAwKSB7CiAgICAgICAgICAgIHRoaXMuJG1lc3NhZ2Uoe3R5cGU6ICdzdWNjZXNzJywgbWVzc2FnZTogcmVzLmRhdGEubXNnfSk7CiAgICAgICAgICAgIHRoaXMuJHJlZnMudGFibGUucmVsb2FkKCk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0aGlzLiRtZXNzYWdlLmVycm9yKHJlcy5kYXRhLm1zZyk7CiAgICAgICAgICB9CiAgICAgICAgfSkuY2F0Y2goZSA9PiB7CiAgICAgICAgICBsb2FkaW5nLmNsb3NlKCk7CiAgICAgICAgICB0aGlzLiRtZXNzYWdlLmVycm9yKGUubWVzc2FnZSk7CiAgICAgICAgfSk7CiAgICB9LAogICAgLyog5pu05pS554q25oCBICovCiAgICBlZGl0U3RhdHVzKHJvdykgewogICAgICBjb25zdCBsb2FkaW5nID0gdGhpcy4kbG9hZGluZyh7bG9jazogdHJ1ZX0pOwogICAgICBsZXQgcGFyYW1zID0gT2JqZWN0LmFzc2lnbih7fSwgcm93KTsKICAgICAgdGhpcy4kaHR0cC5wb3N0KCcvdXNlci9zdGF0dXMnLCBwYXJhbXMpLnRoZW4ocmVzID0+IHsKICAgICAgICBsb2FkaW5nLmNsb3NlKCk7CiAgICAgICAgaWYgKHJlcy5kYXRhLmNvZGUgPT09IDApIHsKICAgICAgICAgIHRoaXMuJG1lc3NhZ2Uoe3R5cGU6ICdzdWNjZXNzJywgbWVzc2FnZTogcmVzLmRhdGEubXNnfSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJvdy5zdGF0dXMgPSAhcm93LnN0YXR1cyA/IDIgOiAxOwogICAgICAgICAgdGhpcy4kbWVzc2FnZS5lcnJvcihyZXMuZGF0YS5tc2cpOwogICAgICAgIH0KICAgICAgfSkuY2F0Y2goZSA9PiB7CiAgICAgICAgbG9hZGluZy5jbG9zZSgpOwogICAgICAgIHRoaXMuJG1lc3NhZ2UuZXJyb3IoZS5tZXNzYWdlKTsKICAgICAgfSk7CiAgICB9LAogICAgLyog5p+l6K+i6KeS6Imy5YiX6KGoICovCiAgICBxdWVyeVJvbGVzKCkgewogICAgICB0aGlzLiRodHRwLmdldCgnL3JvbGUvZ2V0Um9sZUxpc3QnKS50aGVuKHJlcyA9PiB7CiAgICAgICAgaWYgKHJlcy5kYXRhLmNvZGUgPT09IDApIHsKICAgICAgICAgIHRoaXMucm9sZUxpc3QgPSByZXMuZGF0YS5kYXRhOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aGlzLiRtZXNzYWdlLmVycm9yKHJlcy5kYXRhLm1zZyk7CiAgICAgICAgfQogICAgICB9KS5jYXRjaChlID0+IHsKICAgICAgICB0aGlzLiRtZXNzYWdlLmVycm9yKGUubWVzc2FnZSk7CiAgICAgIH0pOwogICAgfQogIH0KfQo="},{"version":3,"sources":["index.vue"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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>\n <div class=\"ele-body\">\n <el-card shadow=\"never\">\n <!-- 搜索表单 -->\n <el-form :model=\"table.where\" label-width=\"77px\" class=\"ele-form-search\"\n @keyup.enter.native=\"$refs.table.reload()\" @submit.native.prevent>\n <el-row :gutter=\"15\">\n <el-col :md=\"6\" :sm=\"12\">\n <el-form-item label=\"用户账号:\">\n <el-input v-model=\"table.where.username\" placeholder=\"请输入用户账号\" clearable/>\n </el-form-item>\n </el-col>\n <el-col :md=\"6\" :sm=\"12\">\n <el-form-item label=\"用户姓名:\">\n <el-input v-model=\"table.where.realname\" placeholder=\"请输入用户姓名\" clearable/>\n </el-form-item>\n </el-col>\n <el-col :md=\"6\" :sm=\"12\">\n <el-form-item label=\"性别:\">\n <el-select v-model=\"table.where.gender\" placeholder=\"请选择\" clearable class=\"ele-fluid\">\n <el-option label=\"男\" value=\"1\"/>\n <el-option label=\"女\" value=\"2\"/>\n </el-select>\n </el-form-item>\n </el-col>\n <el-col :md=\"6\" :sm=\"12\">\n <div class=\"ele-form-actions\">\n <el-button type=\"primary\" @click=\"$refs.table.reload()\" icon=\"el-icon-search\" class=\"ele-btn-icon\">查询\n </el-button>\n <el-button @click=\"(table.where={})&&$refs.table.reload()\">重置</el-button>\n </div>\n </el-col>\n </el-row>\n </el-form>\n <!-- 操作按钮 -->\n <div class=\"ele-table-tool ele-table-tool-default\">\n <el-button @click=\"showEdit=true\" type=\"primary\" icon=\"el-icon-plus\" class=\"ele-btn-icon\" size=\"small\" v-if=\"permission.includes('sys:user:add')\">添加\n </el-button>\n <el-button @click=\"remove()\" type=\"danger\" icon=\"el-icon-delete\" class=\"ele-btn-icon\" size=\"small\" v-if=\"permission.includes('sys:user:dall')\">批量删除\n </el-button>\n </div>\n <!-- 数据表格 -->\n <ele-data-table ref=\"table\" :config=\"table\" :choose.sync=\"choose\" height=\"calc(100vh - 315px)\" highlight-current-row>\n <template slot-scope=\"{index}\">\n <el-table-column type=\"selection\" width=\"45\" align=\"center\" fixed=\"left\"/>\n <el-table-column type=\"index\" :index=\"index\" label=\"编号\" width=\"60\" align=\"center\" fixed=\"left\" show-overflow-tooltip/>\n <el-table-column prop=\"username\" label=\"用户账号\" sortable=\"custom\" show-overflow-tooltip min-width=\"110\"/>\n <el-table-column prop=\"realname\" label=\"用户姓名\" sortable=\"custom\" show-overflow-tooltip min-width=\"110\"/>\n <el-table-column label=\"头像\" min-width=\"60\" align=\"center\">\n <template slot-scope=\"{row}\">\n <el-avatar shape=\"square\" :size=\"25\" :src=\"row.avatar\"/>\n </template>\n </el-table-column>\n <el-table-column prop=\"gender_name\" label=\"性别\" sortable=\"custom\" show-overflow-tooltip min-width=\"80\"/>\n <el-table-column prop=\"mobile\" label=\"手机号\" sortable=\"custom\" show-overflow-tooltip min-width=\"110\"/>\n <el-table-column label=\"角色\" show-overflow-tooltip min-width=\"200\">\n <template slot-scope=\"{row}\">\n <el-tag v-for=\"item in row.roles\" :key=\"item.id\" type=\"primary\" size=\"mini\">{{\n item.name\n }}\n </el-tag>\n </template>\n </el-table-column>\n <el-table-column prop=\"status\" label=\"状态\" width=\"75px\" sortable=\"custom\" :resizable=\"false\">\n <template slot-scope=\"{row}\">\n <el-switch v-model=\"row.status\" @change=\"editStatus(row)\" :active-value=\"1\" :inactive-value=\"2\"/>\n </template>\n </el-table-column>\n <el-table-column label=\"创建时间\" sortable=\"custom\" show-overflow-tooltip min-width=\"160\">\n <template slot-scope=\"{row}\">{{ row.create_time | toDateString }}</template>\n </el-table-column>\n <el-table-column label=\"操作\" width=\"220px\" align=\"center\" :resizable=\"false\" fixed=\"right\">\n <template slot-scope=\"{row}\">\n <el-link @click=\"edit(row)\" icon=\"el-icon-edit\" type=\"primary\" :underline=\"false\" v-if=\"permission.includes('sys:user:edit')\">修改</el-link>\n <el-popconfirm title=\"确定要删除此用户吗?\" @confirm=\"remove(row)\" class=\"ele-action\">\n <el-link slot=\"reference\" icon=\"el-icon-delete\" type=\"danger\" :underline=\"false\" v-if=\"permission.includes('sys:user:delete')\">删除</el-link>\n </el-popconfirm>\n <el-popconfirm title=\"确定要重置密码吗?\" @confirm=\"resetPwd(row)\" class=\"ele-action\">\n <el-link slot=\"reference\" icon=\"el-icon-copy-document\" type=\"success\" :underline=\"false\" v-if=\"permission.includes('sys:user:resetPwd')\">重置密码</el-link>\n </el-popconfirm>\n </template>\n </el-table-column>\n </template>\n </ele-data-table>\n </el-card>\n <!-- 编辑弹窗 -->\n <el-dialog :title=\"editForm.id?'修改用户':'添加用户'\" :visible.sync=\"showEdit\" width=\"700px\"\n @closed=\"editForm={}\" :destroy-on-close=\"true\" custom-class=\"ele-dialog-form\" :lock-scroll=\"false\">\n <el-form :model=\"editForm\" ref=\"editForm\" :rules=\"editRules\" label-width=\"100px\">\n <el-form-item label=\"用户头像:\">\n <uploadImage :limit=\"1\" v-model=\"editForm.avatar\"></uploadImage>\n </el-form-item>\n <el-row :gutter=\"15\">\n <el-col :sm=\"12\">\n <el-form-item label=\"用户账号:\" prop=\"username\">\n <el-input v-model=\"editForm.username\" placeholder=\"请输入账号\" clearable\n :disabled=\"editForm.id?true:false\"/>\n </el-form-item>\n <el-form-item label=\"用户姓名:\" prop=\"realname\">\n <el-input v-model=\"editForm.realname\" placeholder=\"请输入用户姓名\" clearable/>\n </el-form-item>\n <el-form-item label=\"性别:\" prop=\"gender\">\n <el-select v-model=\"editForm.gender\" placeholder=\"请选择性别\" class=\"ele-block\" clearable>\n <el-option label=\"男\" :value=\"1\"/>\n <el-option label=\"女\" :value=\"2\"/>\n </el-select>\n </el-form-item>\n <el-form-item label=\"登录密码:\" prop=\"password\" v-if=\"!editForm.id\">\n <el-input v-model=\"editForm.password\" placeholder=\"请输入登录密码\" show-password/>\n </el-form-item>\n </el-col>\n <el-col :sm=\"12\">\n <el-form-item label=\"手机号:\">\n <el-input v-model=\"editForm.mobile\" placeholder=\"请输入手机号\" clearable/>\n </el-form-item>\n <el-form-item label=\"角色:\" prop=\"role_ids\">\n <el-select v-model=\"editForm.role_ids\" placeholder=\"请选择角色\" class=\"ele-block\" clearable multiple>\n <el-option v-for=\"(item,index) in roleList\" :key=\"index\" :label=\"item.name\" :value=\"item.id\"/>\n </el-select>\n </el-form-item>\n </el-col>\n </el-row>\n </el-form>\n <div slot=\"footer\">\n <el-button @click=\"showEdit=false\">取消</el-button>\n <el-button type=\"primary\" @click=\"save\">保存</el-button>\n </div>\n </el-dialog>\n </div>\n</template>\n\n<script>\nimport uploadImage from '@/components/uploadImage'\nimport { mapGetters } from \"vuex\";\nexport default {\n name: \"SysUser\",\n data() {\n return {\n table: {url: '/user/index', where: {}}, // 表格配置\n choose: [], // 表格选中数据\n showEdit: false, // 是否显示表单弹窗\n editForm: {}, // 表单数据\n editRules: { // 表单验证规则\n username: [\n {required: true, message: '请输入用户账号', trigger: 'blur'}\n ],\n realname: [\n {required: true, message: '请输入用户姓名', trigger: 'blur'}\n ],\n gender: [\n {required: true, message: '请选择性别', trigger: 'blur'}\n ],\n password: [\n {required: true, message: '请输入密码', trigger: 'blur'}\n ]\n },\n roleList: [], // 角色列表\n }\n },\n computed: {\n ...mapGetters([\"permission\"]),\n },\n components: {uploadImage},\n mounted() {\n this.queryRoles(); // 查询角色列表\n },\n methods: {\n /* 显示编辑 */\n edit(row) {\n this.editForm = Object.assign({}, row, {\n role_ids: row.roles.map(d => d.id)\n });\n this.showEdit = true;\n },\n /* 保存编辑 */\n save() {\n this.$refs['editForm'].validate((valid) => {\n if (valid) {\n const loading = this.$loading({lock: true});\n this.$http.post('/user/edit', this.editForm).then(res => {\n loading.close();\n if (res.data.code === 0) {\n this.showEdit = false;\n this.$message({type: 'success', message: res.data.msg});\n this.$refs.table.reload();\n } else {\n this.$message.error(res.data.msg);\n }\n }).catch(e => {\n loading.close();\n this.$message.error(e.message);\n });\n } else {\n return false;\n }\n });\n },\n /* 删除 */\n remove(row) {\n if (!row) { // 批量删除\n if (this.choose.length === 0) return this.$message.error('请至少选择一条数据');\n let ids = this.choose.map(d => d.id);\n this.$confirm('确定要删除选中的用户吗?', '提示', {type: 'warning'}).then(() => {\n const loading = this.$loading({lock: true});\n this.$http.post('/user/delete', {id: ids}).then(res => {\n loading.close();\n if (res.data.code === 0) {\n this.$message({type: 'success', message: res.data.msg});\n this.$refs.table.reload();\n } else {\n this.$message.error(res.data.msg);\n }\n }).catch(e => {\n loading.close();\n this.$message.error(e.message);\n });\n }).catch(() => 0);\n } else { // 单个删除\n const loading = this.$loading({lock: true});\n this.$http.post('/user/delete', {id:row.id}).then(res => {\n loading.close();\n if (res.data.code === 0) {\n this.$message({type: 'success', message: res.data.msg});\n this.$refs.table.reload();\n } else {\n this.$message.error(res.data.msg);\n }\n }).catch(e => {\n loading.close();\n this.$message.error(e.message);\n });\n }\n },\n /**\n * 重置密码\n */\n resetPwd(row){\n const loading = this.$loading({lock: true});\n this.$http.post('/user/resetPwd', {id:row.id}).then(res => {\n loading.close();\n if (res.data.code === 0) {\n this.$message({type: 'success', message: res.data.msg});\n this.$refs.table.reload();\n } else {\n this.$message.error(res.data.msg);\n }\n }).catch(e => {\n loading.close();\n this.$message.error(e.message);\n });\n },\n /* 更改状态 */\n editStatus(row) {\n const loading = this.$loading({lock: true});\n let params = Object.assign({}, row);\n this.$http.post('/user/status', params).then(res => {\n loading.close();\n if (res.data.code === 0) {\n this.$message({type: 'success', message: res.data.msg});\n } else {\n row.status = !row.status ? 2 : 1;\n this.$message.error(res.data.msg);\n }\n }).catch(e => {\n loading.close();\n this.$message.error(e.message);\n });\n },\n /* 查询角色列表 */\n queryRoles() {\n this.$http.get('/role/getRoleList').then(res => {\n if (res.data.code === 0) {\n this.roleList = res.data.data;\n } else {\n this.$message.error(res.data.msg);\n }\n }).catch(e => {\n this.$message.error(e.message);\n });\n }\n }\n}\n</script>\n\n<style scoped>\n.ele-block >>> .el-upload, .ele-block >>> .el-upload-dragger {\n width: 100%;\n}\n/* 用户资料卡片 */\n.user-info-card {\n padding-top: 8px;\n text-align: center;\n}\n\n.user-info-card .user-info-avatar-group {\n position: relative;\n cursor: pointer;\n margin: 0 auto;\n width: 110px;\n height: 110px;\n border-radius: 50%;\n overflow: hidden;\n}\n\n.user-info-card .user-info-avatar {\n width: 110px;\n height: 110px;\n border-radius: 50%;\n object-fit: cover;\n}\n\n.user-info-card .user-info-avatar-group > i {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n color: #FFF;\n font-size: 30px;\n display: none;\n z-index: 2;\n}\n\n.user-info-card .user-info-avatar-group:hover > i {\n display: block;\n}\n\n.user-info-card .user-info-avatar-group:hover:after {\n content: \"\";\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background-color: rgba(0, 0, 0, .3);\n}\n</style>\n"]}]}