UserManage.vue 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292
  1. <template>
  2. <div class="user-manage">
  3. <div class="part-box part-box-filter part-box-flex">
  4. <el-form ref="FilterForm" label-position="left" label-width="85px" inline>
  5. <template v-if="checkPrivilege('condition', 'condition')">
  6. <el-form-item label="用户名:" label-width="75px">
  7. <el-input
  8. style="width: 142px;"
  9. v-model.trim="filter.loginName"
  10. placeholder="用户名"
  11. clearable
  12. ></el-input>
  13. </el-form-item>
  14. <el-form-item label="姓名:" label-width="75px">
  15. <el-input
  16. style="width: 142px;"
  17. v-model.trim="filter.realName"
  18. placeholder="姓名"
  19. clearable
  20. ></el-input>
  21. </el-form-item>
  22. <el-form-item label="角色:" label-width="55px">
  23. <el-select
  24. v-model="filter.roleId"
  25. style="width: 142px;"
  26. placeholder="角色"
  27. filterable
  28. clearable
  29. >
  30. <el-option
  31. v-for="item in roles"
  32. :key="item.id"
  33. :value="item.id"
  34. :label="item.name"
  35. ></el-option>
  36. </el-select>
  37. </el-form-item>
  38. <el-form-item label="启用/禁用:" label-width="90px">
  39. <el-select
  40. v-model="filter.enable"
  41. style="width: 120px;"
  42. placeholder="启用/禁用"
  43. clearable
  44. >
  45. <el-option
  46. v-for="(val, key) in ABLE_TYPE"
  47. :key="key"
  48. :value="key * 1"
  49. :label="val"
  50. ></el-option>
  51. </el-select>
  52. </el-form-item>
  53. </template>
  54. <el-form-item label-width="0px">
  55. <el-button
  56. v-if="checkPrivilege('button', 'select')"
  57. type="primary"
  58. @click="toPage(1)"
  59. >查询</el-button
  60. >
  61. </el-form-item>
  62. </el-form>
  63. <div class="part-box-action">
  64. <el-button
  65. type="success"
  66. icon="el-icon-download"
  67. v-if="checkPrivilege('button', 'export')"
  68. ><a :href="downloadUrl" :download="dfilename">模板下载</a></el-button
  69. >
  70. <upload-button
  71. v-if="checkPrivilege('button', 'export')"
  72. btn-icon="el-icon-circle-plus-outline"
  73. btn-content="导入用户"
  74. btn-type="success"
  75. :upload-url="uploadUrl"
  76. :format="['xls', 'xlsx']"
  77. @upload-error="uplaodError"
  78. @upload-success="uploadSuccess"
  79. >
  80. </upload-button>
  81. <el-button
  82. v-if="checkPrivilege('button', 'add')"
  83. type="primary"
  84. icon="el-icon-circle-plus-outline"
  85. @click="toAdd"
  86. >新增用户</el-button
  87. >
  88. </div>
  89. </div>
  90. <div class="part-box part-box-pad">
  91. <el-table ref="TableList" :data="users">
  92. <el-table-column
  93. type="index"
  94. label="序号"
  95. width="70"
  96. :index="indexMethod"
  97. ></el-table-column>
  98. <el-table-column prop="loginName" label="用户名"></el-table-column>
  99. <el-table-column
  100. prop="realName"
  101. label="姓名"
  102. width="120"
  103. ></el-table-column>
  104. <el-table-column prop="code" label="工号"></el-table-column>
  105. <el-table-column
  106. prop="mobileNumber"
  107. label="手机号"
  108. width="120"
  109. ></el-table-column>
  110. <el-table-column prop="orgName" label="所在机构"></el-table-column>
  111. <el-table-column prop="roles" label="角色">
  112. <template slot-scope="scope">
  113. {{ scope.row.roles | rolesFilter }}
  114. </template>
  115. </el-table-column>
  116. <el-table-column prop="enable" label="状态" width="100">
  117. <template slot-scope="scope">
  118. {{ scope.row.enable | enableFilter }}
  119. </template>
  120. </el-table-column>
  121. <el-table-column class-name="action-column" label="操作" width="200px">
  122. <template slot-scope="scope">
  123. <el-button
  124. v-if="checkPrivilege('link', 'edit')"
  125. class="btn-primary"
  126. type="text"
  127. @click="toEdit(scope.row)"
  128. >编辑</el-button
  129. >
  130. <el-button
  131. v-if="checkPrivilege('link', 'enable')"
  132. :class="scope.row.enable ? 'btn-danger' : 'btn-primary'"
  133. type="text"
  134. @click="toEnable(scope.row)"
  135. >{{ scope.row.enable ? "禁用" : "启用" }}</el-button
  136. >
  137. <el-button
  138. v-if="checkPrivilege('link', 'reset')"
  139. class="btn-danger"
  140. type="text"
  141. @click="toResetPwd(scope.row)"
  142. >重置密码</el-button
  143. >
  144. </template>
  145. </el-table-column>
  146. </el-table>
  147. <div class="part-page">
  148. <el-pagination
  149. background
  150. layout="total,prev, pager, next"
  151. :current-page="current"
  152. :total="total"
  153. :page-size="size"
  154. @current-change="toPage"
  155. >
  156. </el-pagination>
  157. </div>
  158. </div>
  159. <!-- ModifyUser -->
  160. <modify-user
  161. ref="ModifyUser"
  162. :instance="curUser"
  163. :roles="roles"
  164. @modified="getList"
  165. ></modify-user>
  166. </div>
  167. </template>
  168. <script>
  169. import ModifyUser from "../components/ModifyUser";
  170. import { ABLE_TYPE } from "@/constants/enumerate";
  171. import { userListPage, ableUser, resetPwd, userRoleListPage } from "../api";
  172. // import { logout } from "@/modules/login/api";
  173. import UploadButton from "../../../components/UploadButton";
  174. export default {
  175. name: "user-manage",
  176. components: { ModifyUser, UploadButton },
  177. data() {
  178. return {
  179. filter: {
  180. loginName: "",
  181. realName: "",
  182. roleId: "",
  183. enable: ""
  184. },
  185. current: 1,
  186. size: this.GLOBAL.pageSize,
  187. total: 0,
  188. visible: false,
  189. ABLE_TYPE,
  190. roles: [],
  191. users: [],
  192. curUser: {},
  193. // import
  194. uploadUrl: "/api/admin/sys/user/import",
  195. downloadUrl: "/temps/userTemplate.xlsx",
  196. dfilename: "用户导入模板.xlsx"
  197. };
  198. },
  199. mounted() {
  200. this.getRoleList();
  201. this.getList();
  202. },
  203. methods: {
  204. async getRoleList() {
  205. if (
  206. !this.checkPrivilege("button", "add") &&
  207. !this.checkPrivilege("link", "edit")
  208. )
  209. return;
  210. const data = await userRoleListPage();
  211. this.roles = data || [];
  212. this.roles = this.roles.filter(item => item.type !== "ADMIN");
  213. },
  214. async getList() {
  215. if (!this.checkPrivilege("list", "list")) return;
  216. const datas = {
  217. ...this.filter,
  218. pageNumber: this.current,
  219. pageSize: this.size
  220. };
  221. if (datas.enable !== null && datas.enable !== "")
  222. datas.enable = !!datas.enable;
  223. const data = await userListPage(datas);
  224. this.users = data.records;
  225. this.total = data.total;
  226. },
  227. toPage(page) {
  228. this.current = page;
  229. this.getList();
  230. },
  231. toEnable(row) {
  232. // 自己不可以启用/禁用自己
  233. const userId = this.$ls.get("user", { id: "" }).id;
  234. if (row.id === userId) {
  235. this.$message.error("不可以启用/禁用自己!");
  236. return;
  237. }
  238. const action = row.enable ? "禁用" : "启用";
  239. this.$confirm(`确定要${action}用户【${row.realName}】吗?`, "提示", {
  240. type: "warning"
  241. })
  242. .then(async () => {
  243. const enable = !row.enable;
  244. await ableUser({
  245. id: row.id,
  246. enable
  247. });
  248. row.enable = enable;
  249. this.$message.success("操作成功!");
  250. })
  251. .catch(() => {});
  252. },
  253. toEdit(row) {
  254. this.curUser = row;
  255. this.$refs.ModifyUser.open();
  256. },
  257. toAdd() {
  258. this.curUser = {};
  259. this.$refs.ModifyUser.open();
  260. },
  261. async toResetPwd(row) {
  262. await resetPwd(row.id);
  263. this.$message.success("密码重置成功!");
  264. // 修改自己时,会强制重新登录
  265. // const userId = this.$ls.get("user", { id: "" }).id;
  266. // if (row.id !== userId) return;
  267. // this.toLogout();
  268. },
  269. // async toLogout() {
  270. // await logout();
  271. // this.$ls.clear();
  272. // this.$router.push({ name: "Login" });
  273. // this.$message.info("您的密码已经变更,请重新登录系统!");
  274. // },
  275. // import
  276. uplaodError(errorData) {
  277. this.$notify.error({ title: "错误提示", message: errorData.message });
  278. },
  279. uploadSuccess() {
  280. this.getList();
  281. }
  282. }
  283. };
  284. </script>