index.vue 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253
  1. <template>
  2. <div class="app-container">
  3. <el-row :gutter="20">
  4. <!--部门数据-->
  5. <el-col :span="4" :xs="24">
  6. <div class="head-container">
  7. <el-input
  8. v-model="deptName"
  9. placeholder="请输入部门名称"
  10. clearable
  11. size="small"
  12. prefix-icon="el-icon-search"
  13. style="margin-bottom: 20px"
  14. />
  15. </div>
  16. <div class="head-container">
  17. <el-tree
  18. :data="deptOptions"
  19. :props="defaultProps"
  20. :expand-on-click-node="false"
  21. :filter-node-method="filterNode"
  22. ref="tree"
  23. node-key="id"
  24. default-expand-all
  25. highlight-current
  26. @node-click="handleNodeClick"
  27. />
  28. </div>
  29. </el-col>
  30. <!--用户数据-->
  31. <el-col :span="20" :xs="24">
  32. <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch"
  33. label-width="68px">
  34. <el-form-item label="用户名称" prop="userName">
  35. <el-input
  36. v-model="queryParams.userName"
  37. placeholder="请输入用户名称"
  38. clearable
  39. style="width: 240px"
  40. @keyup.enter.native="handleQuery"
  41. />
  42. </el-form-item>
  43. <el-form-item label="手机号码" prop="phonenumber">
  44. <el-input
  45. v-model="queryParams.phonenumber"
  46. placeholder="请输入手机号码"
  47. clearable
  48. style="width: 240px"
  49. @keyup.enter.native="handleQuery"
  50. />
  51. </el-form-item>
  52. <el-form-item label="状态" prop="status">
  53. <el-select
  54. v-model="queryParams.status"
  55. placeholder="用户状态"
  56. clearable
  57. style="width: 240px"
  58. >
  59. <el-option
  60. v-for="dict in dict.type.sys_normal_disable"
  61. :key="dict.value"
  62. :label="dict.label"
  63. :value="dict.value"
  64. />
  65. </el-select>
  66. </el-form-item>
  67. <el-form-item>
  68. <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
  69. <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
  70. </el-form-item>
  71. </el-form>
  72. <el-table v-loading="loading" :data="userList" @selection-change="handleSelectionChange">
  73. <el-table-column type="selection" width="50" align="center"/>
  74. <el-table-column label="用户编号" align="center" key="userId" prop="userId" v-if="columns[0].visible"/>
  75. <el-table-column label="用户名称" align="center" key="userName" prop="userName" v-if="columns[1].visible"
  76. :show-overflow-tooltip="true"/>
  77. <el-table-column label="用户昵称" align="center" key="nickName" prop="nickName" v-if="columns[2].visible"
  78. :show-overflow-tooltip="true"/>
  79. <el-table-column label="部门" align="center" key="deptName" prop="dept.deptName" v-if="columns[3].visible"
  80. :show-overflow-tooltip="true"/>
  81. <el-table-column label="手机号码" align="center" key="phonenumber" prop="phonenumber"
  82. v-if="columns[4].visible" width="120"/>
  83. <el-table-column label="状态" align="center" key="status" v-if="columns[5].visible">
  84. <template slot-scope="scope">
  85. <el-switch
  86. v-model="scope.row.status"
  87. active-value="0"
  88. inactive-value="1"
  89. @change="handleStatusChange(scope.row)"
  90. ></el-switch>
  91. </template>
  92. </el-table-column>
  93. <el-table-column label="创建时间" align="center" prop="createTime" v-if="columns[6].visible" width="160">
  94. <template slot-scope="scope">
  95. <span>{{ parseTime(scope.row.createTime) }}</span>
  96. </template>
  97. </el-table-column>
  98. </el-table>
  99. <pagination
  100. v-show="total>0"
  101. :total="total"
  102. :page.sync="queryParams.pageNum"
  103. :limit.sync="queryParams.pageSize"
  104. @pagination="getList"
  105. />
  106. </el-col>
  107. </el-row>
  108. </div>
  109. </template>
  110. <script>
  111. import {changeUserStatus, deptTreeSelect, listUser} from "@/api/system/user";
  112. import Treeselect from "@riophae/vue-treeselect";
  113. import "@riophae/vue-treeselect/dist/vue-treeselect.css";
  114. export default {
  115. name: "UserSelect",
  116. dicts: ['sys_normal_disable', 'sys_user_sex'],
  117. components: {Treeselect},
  118. data() {
  119. return {
  120. // 遮罩层
  121. loading: true,
  122. // 选中数组
  123. ids: [],
  124. // 非单个禁用
  125. single: true,
  126. // 非多个禁用
  127. multiple: true,
  128. // 显示搜索条件
  129. showSearch: true,
  130. // 总条数
  131. total: 0,
  132. // 用户表格数据
  133. userList: null,
  134. // 弹出层标题
  135. title: "",
  136. // 部门树选项
  137. deptOptions: undefined,
  138. // 是否显示弹出层
  139. open: false,
  140. // 部门名称
  141. deptName: undefined,
  142. // 日期范围
  143. dateRange: [],
  144. // 岗位选项
  145. postOptions: [],
  146. // 角色选项
  147. roleOptions: [],
  148. // 表单参数
  149. form: {},
  150. defaultProps: {
  151. children: "children",
  152. label: "label"
  153. },
  154. // 查询参数
  155. queryParams: {
  156. pageNum: 1,
  157. pageSize: 10,
  158. userName: undefined,
  159. phonenumber: undefined,
  160. status: undefined,
  161. deptId: undefined
  162. },
  163. selectUsrs: [],
  164. // 列信息
  165. columns: [
  166. {key: 0, label: `用户编号`, visible: true},
  167. {key: 1, label: `用户名称`, visible: true},
  168. {key: 2, label: `用户昵称`, visible: true},
  169. {key: 3, label: `部门`, visible: true},
  170. {key: 4, label: `手机号码`, visible: true},
  171. {key: 5, label: `状态`, visible: true},
  172. {key: 6, label: `创建时间`, visible: true}
  173. ],
  174. };
  175. },
  176. watch: {
  177. // 根据名称筛选部门树
  178. deptName(val) {
  179. this.$refs.tree.filter(val);
  180. }
  181. },
  182. created() {
  183. this.getList();
  184. this.getDeptTree();
  185. },
  186. methods: {
  187. /** 查询用户列表 */
  188. getList() {
  189. this.loading = true;
  190. listUser(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
  191. this.userList = response.rows;
  192. this.total = response.total;
  193. this.loading = false;
  194. }
  195. );
  196. },
  197. /** 查询部门下拉树结构 */
  198. getDeptTree() {
  199. deptTreeSelect().then(response => {
  200. this.deptOptions = response.data;
  201. });
  202. },
  203. // 筛选节点
  204. filterNode(value, data) {
  205. if (!value) return true;
  206. return data.label.indexOf(value) !== -1;
  207. },
  208. // 节点单击事件
  209. handleNodeClick(data) {
  210. this.queryParams.deptId = data.id;
  211. this.handleQuery();
  212. },
  213. // 用户状态修改
  214. handleStatusChange(row) {
  215. let text = row.status === "0" ? "启用" : "停用";
  216. this.$modal.confirm('确认要"' + text + '""' + row.userName + '"用户吗?').then(function () {
  217. return changeUserStatus(row.userId, row.status);
  218. }).then(() => {
  219. this.$modal.msgSuccess(text + "成功");
  220. }).catch(function () {
  221. row.status = row.status === "0" ? "1" : "0";
  222. });
  223. },
  224. /** 搜索按钮操作 */
  225. handleQuery() {
  226. this.queryParams.pageNum = 1;
  227. this.getList();
  228. },
  229. /** 重置按钮操作 */
  230. resetQuery() {
  231. this.dateRange = [];
  232. this.resetForm("queryForm");
  233. this.queryParams.deptId = undefined;
  234. this.$refs.tree.setCurrentKey(null);
  235. this.handleQuery();
  236. },
  237. // 多选框选中数据
  238. handleSelectionChange(selection) {
  239. this.ids = selection.map(item => item.userId);
  240. this.selectUsrs = selection;
  241. this.single = selection.length != 1;
  242. this.multiple = !selection.length;
  243. },
  244. getSelectUsrs() {
  245. return this.selectUsrs;
  246. }
  247. }
  248. };
  249. </script>