per-manage.js 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654
  1. /**
  2. * 用户列表 start
  3. */
  4. //获取公司树
  5. getCompanyTree()
  6. //角色列表
  7. getUserRole()
  8. var pageNo = 1;
  9. var totalPages = 0;
  10. var depname = 0;
  11. var companyId = 0;
  12. var param1 = '';
  13. var param2 = '';
  14. var param3 = ''; //公司树
  15. var param4 = ''; //部门树
  16. //用户列表
  17. getListDataAjax();
  18. //按钮搜索
  19. $('#buttonClick').on('click', function() {
  20. pageNo = 1;
  21. getListDataAjax(getSearchParamObj());
  22. param1 = $('#userName').val()
  23. param2 = $('#roleId').val()
  24. })
  25. //公司树点击事件
  26. $(".treeCompany").on('click', function() {
  27. // if($(this).hasClass('selected')){
  28. // return;
  29. // }
  30. //判断有没有样式
  31. $('.treeCompany').removeClass('selected').find('.img').attr('src', '../images/login.png');
  32. $('.treeDepartment').removeClass('selected').find('.img').attr('src', '../images/login.png');
  33. $(this).addClass('selected').find('.img').attr('src', '../images/loginSelected.png');
  34. companyId = $(this).data('id');
  35. depname = 0;
  36. $("#userName").val("");
  37. $('#roleId option').eq(0).prop("selected", true)
  38. getListDataAjax({ "companyId": $(this).data('id') });
  39. param3 = $(this).data('id');
  40. })
  41. //部门树点击事件
  42. $(".treeDepartment").on('click', function() {
  43. // if($(this).hasClass('selected')){
  44. // return;
  45. // }
  46. $('.treeDepartment').removeClass('selected').find('.img').attr('src', '../images/login.png')
  47. $('.treeCompany').removeClass('selected').find('.img').attr('src', '../images/login.png')
  48. $(this).addClass('selected').parent().parent().siblings().addClass('selected').find('.img').attr('src', '../images/loginSelected.png');
  49. $(this).find('.img').attr('src', '../images/loginSelected.png');
  50. companyId = 0;
  51. depname = $(this).data('id');
  52. $("#userName").val("");
  53. $('#roleId option').eq(0).prop("selected", true)
  54. getListDataAjax({ "depname": $(this).data('id') });
  55. param4 = $(this).data('id');
  56. })
  57. //重置表单
  58. $('.reset').click(resetForm)
  59. //重置表单
  60. function resetForm() {
  61. location.reload();
  62. // pageNo = 1;
  63. // $("#userName").val("");
  64. // $('#roleId option').eq(0).prop("selected", true)
  65. // getListDataAjax(getSearchParamObj());
  66. }
  67. //分页操作
  68. $('#firstPageButton').on('click', function() {
  69. pageNo = 1;
  70. getListDataAjax(getSearchParamObj(), 1);
  71. })
  72. $('#lastPageButton').on('click', function() {
  73. pageNo = totalPages;
  74. getListDataAjax(getSearchParamObj(), pageNo);
  75. })
  76. $('#prevPageButton').on('click', function() {
  77. pageNo -= 1;
  78. getListDataAjax(getSearchParamObj(), pageNo);
  79. })
  80. $('#nextPageButton').on('click', function() {
  81. pageNo += 1;
  82. getListDataAjax(getSearchParamObj(), pageNo);
  83. })
  84. //拼接搜索条件
  85. function getSearchParamObj() {
  86. let queryParam = {};
  87. let userName = $('#userName').val();
  88. let roleId = $('#roleId option:selected').val();
  89. queryParam.userName = userName;
  90. queryParam.roleId = roleId;
  91. if (companyId != 0) {
  92. queryParam.companyId = companyId;
  93. }
  94. if (depname != 0) {
  95. queryParam.depname = depname;
  96. }
  97. return queryParam;
  98. }
  99. //拼接树搜索条件
  100. //角色查询 ajax请求
  101. function getUserRole() {
  102. ajaxRequest(USER_ROLE, "POST", {}, function(result) {
  103. $("#loading").empty()
  104. let data = result.data;
  105. let roleItems = '';
  106. let roleItems2 = '';
  107. data.forEach(function(item, key) {
  108. roleItems += `<option value="${item.roleId}">${item.roleName}</option>`
  109. roleItems2 += `<option value="${item.roleId}">${item.roleName}</option>`
  110. })
  111. $('#roleId').append(roleItems);
  112. $('#roleId2').html(roleItems2);
  113. $('#roleId3').html(roleItems2);
  114. }, function(errorMsg) {
  115. alert("请求数据失败!");
  116. })
  117. }
  118. //获取公司树结构 ajax请求
  119. function getCompanyTree() {
  120. ajaxRequest(COMPANY_LIST, "POST", {}, function(result) {
  121. // $(".loadingdata").html("");
  122. let data = result.data;
  123. let items = '';
  124. let companyItems = '';
  125. let companyDepartmentItems = '<option value="">请选择</option>';
  126. data.forEach(function(item, key) {
  127. items += `<li data-id=${item.ownerId} ><span data-id=${item.ownerId} class="treeCompany"><img class="img" src="images/login.png" alt=""> ${item.ownerName} (${item.userNumber})</span>`;
  128. if (item.child) {
  129. let data = item.child;
  130. items += `<ul class="child-three">`;
  131. data.forEach(function(item, key) {
  132. items += `<li data-id=${item.departmentId} ><span data-id=${item.departmentId} class="treeDepartment"><img class="img" src="images/login.png" alt="">${item.departmentName}</span></li>`
  133. });
  134. items += ` </ul>`;
  135. }
  136. `</li>`
  137. companyItems += `<option value="${item.ownerId}">${item.ownerName}</option>`
  138. if (key == 0) {
  139. let departmentObj = item.child;
  140. if (departmentObj) {
  141. departmentObj.forEach(function(item, key) {
  142. companyDepartmentItems += `<option value="${item.id}">${item.departmentName}</option>`
  143. })
  144. $('#departmentId').html(companyDepartmentItems);
  145. $('#departmentIdUpdate').html(companyDepartmentItems);
  146. }
  147. }
  148. })
  149. $('#child-two').html(items);
  150. $('#companyId').html(companyItems);
  151. $('#companyId2').html(companyItems);
  152. // treeClickSearch();
  153. }, function(errorMsg) {
  154. alert("请求数据失败!");
  155. })
  156. }
  157. //获取用户列表 ajax请求
  158. function getListDataAjax(queryParam = {}, pageNo = 1) {
  159. queryParam.pageNo = pageNo;
  160. // queryParam.pageSize = 4;
  161. ajaxRequest(USER_LIT, "POST", queryParam, function(result) {
  162. let data = result.pageList;
  163. let items = '';
  164. data.forEach(function(item, key) {
  165. let posName = "";
  166. if (item.posname == 1) {
  167. posName = "超级管理员"
  168. } else if (item.posname == 2) {
  169. posName = "普通员工"
  170. }
  171. let locked = item.locked ? '未锁定' : '锁定';
  172. items += "<tr>" +
  173. "<td class='status' data-id=" + item.id + " data-user='" + JSON.stringify(item) + "' data-username='" + item.username + "'></td>" +
  174. "<td>" + item.username + "</td>" +
  175. "<td>" + item.sex + "</td>" +
  176. "<td>" + posName + "</td>" +
  177. "<td>" + getFormatDate(item.ctime.time) + "</td>" +
  178. "<td>" + item.addman + "</td>" +
  179. "<td>" + locked + "</td>" +
  180. "<td>" + item.wrongtimes + "</td>" +
  181. "</tr>"
  182. })
  183. $('#dataList').html(items);
  184. totalPages = result.totalPages;
  185. $('#totalPage').html(totalPages); //总共多少页
  186. $('#dataTotal').html(result.totalCount); //总共多少条数据
  187. $('#currentPage').val(pageNo); //当前页面
  188. let pageFrom = (pageNo - 1) * result.pageSize + 1; //开始
  189. let pageTo = result.pageNo * result.pageSize; //结束
  190. pageTo = pageTo > result.totalCount ? result.totalCount : pageTo;
  191. $('#pageFrom').html(pageFrom);
  192. $('#pageTo').html(pageTo);
  193. // 无数据时
  194. if (!data.length) {
  195. $('.pager.has-data').hide()
  196. $('.pager.no-data').show()
  197. } else {
  198. $('.pager.has-data').show()
  199. $('.pager.no-data').hide()
  200. }
  201. if (pageNo < totalPages) {
  202. $('#nextPageButton,#lastPageButton').removeClass('disabled');
  203. } else {
  204. $('#nextPageButton,#lastPageButton').addClass('disabled');
  205. }
  206. if (pageNo === 1) {
  207. $('#firstPageButton,#prevPageButton').addClass('disabled');
  208. } else {
  209. $('#firstPageButton,#prevPageButton').removeClass('disabled');
  210. }
  211. }, function(errorMsg) {
  212. alert("请求数据失败!");
  213. })
  214. }
  215. /*新增 修改 关闭 弹框*/
  216. var layer = layui.layer;
  217. var layerCreateIndex = '';
  218. var layerUpdateIndex = ''
  219. layui.use('layer', function() {
  220. //新增弹框
  221. $('.add').click(function() {
  222. layerCreateIndex = layer.open({
  223. type: 1,
  224. title: false,
  225. closeBtn: 0,
  226. shadeClose: true,
  227. skin: 'yourclass',
  228. area: ['410px', '500px'],
  229. content: $(".addUserOut"),
  230. success: function() {
  231. $('.clsBtn,.cancel').click(function() {
  232. layer.close(layerCreateIndex);
  233. })
  234. }
  235. })
  236. })
  237. //修改弹框信息
  238. $('.edit').click(function() {
  239. if (!$('.pure-table tr').has('.checked').length) {
  240. layer.msg('请选择一条需要修改的信息!', { icon: 5 });
  241. } else {
  242. let dataId = $('.pure-table tr').find('.checked').data('id');
  243. let userInfo = $('.pure-table tr').find('.checked').data('user');
  244. $('.editUserOut input[name=truename').val(userInfo.truename)
  245. $('.editUserOut select[name=sex]').val(userInfo.sex)
  246. $('.editUserOut input[name=phone').val(userInfo.phone)
  247. $('.editUserOut select[name=posname').val(userInfo.posname)
  248. $('.editUserOut select[name=locked]').val(userInfo.locked)
  249. $('.editUserOut select[name=status]').val(userInfo.status)
  250. $('.editUserOut input[name=wrongtimes').val(userInfo.wrongtimes)
  251. // 单位赋值
  252. $('.editUserOut select[name=bian').val(userInfo.bian)
  253. // 部门下拉展示及赋值
  254. if ($('#companyId2').val()) {
  255. listDepname()
  256. function listDepname() {
  257. let companyName = $('#companyId2').find('option:selected').val();
  258. ajaxRequest(COMPANY_LIST, "POST", { "ownerId": companyName }, function(result) {
  259. let companyDepartmentItems = '<option value="">请选择</option>';
  260. let departmentObj = result.data[0].child;
  261. departmentObj.forEach(function(item, key) {
  262. companyDepartmentItems += `<option value="${item.departmentId}">${item.departmentName}</option>`
  263. })
  264. $('#departmentIdUpdate').html(companyDepartmentItems);
  265. }, function(errorMsg) {
  266. alert("请求数据失败!");
  267. })
  268. }
  269. }
  270. // 部门赋值
  271. $('.editUserOut select[name=depname').val(userInfo.depname)
  272. $('.editUserOut input[name=username]').val(userInfo.username)
  273. layerUpdateIndex = layer.open({
  274. type: 1,
  275. title: false,
  276. closeBtn: 0,
  277. shadeClose: true,
  278. skin: 'yourclass',
  279. area: ['410px', '500px'],
  280. content: $(".editUserOut"),
  281. success: function() {
  282. $('.clsBtn,.cancel').click(function() {
  283. layer.close(layerUpdateIndex);
  284. })
  285. }
  286. });
  287. }
  288. })
  289. //删除信息
  290. $('.delete').click(function() {
  291. if (!$('.pure-table tr').has('.checked').length) {
  292. layer.msg('请选择一条需要删除的信息!', { icon: 5 });
  293. } else {
  294. let dataUserName = $('.pure-table tr').find('.checked').data('username');
  295. console.log(dataUserName)
  296. ajaxRequest(USER_DELETE, "POST", { "username": dataUserName }, function(result) {
  297. $(".pure-table tbody tr.selected").remove()
  298. let data = result.data;
  299. layer.close(layer.layerCreateIndex);
  300. layer.msg('删除成功!', { icon: 6 });
  301. getListDataAjax()
  302. }, function(errorMsg) {
  303. alert("用户删除失败!");
  304. })
  305. }
  306. })
  307. });
  308. /* 新增用户发送请求 */
  309. $('#addUser').click(function() {
  310. //获取表单的值
  311. let userAddObj = $("#addUserForm").serializeArray();
  312. //发送给服务端的数据格式
  313. let userAddParam = {};
  314. for (let key in userAddObj) { //循环验证······
  315. //验证用户名
  316. if (userAddObj[key].name == 'username') {
  317. if (!userAddObj[key].value) {
  318. alert('请输入用户名');
  319. return;
  320. }
  321. userAddParam['username'] = userAddObj[key].value;
  322. userAddParam['agentid'] = userAddObj[key].value;
  323. } else if (userAddObj[key].name == 'password') {
  324. if (!userAddObj[key].value) {
  325. alert('请输入密码');
  326. return;
  327. }
  328. userAddParam['password'] = md5(userAddObj[key].value);
  329. } else if (userAddObj[key].name == 'age') { //aa验证年龄
  330. if (!userAddObj[key].value) {
  331. alert('请填写年龄');
  332. return;
  333. } else {
  334. let pattern = /^(([0-9]|[1-9][1-9]|1[0-7][0-9])(\\.[0-9]+)?|180)$/;
  335. if (!pattern.test(userAddObj[key].value)) {
  336. alert('请输入正确的年龄');
  337. return false;
  338. }
  339. }
  340. userAddParam['age'] = userAddObj[key].value;
  341. } else if (userAddObj[key].name == 'truename') { //aa验证真实姓名
  342. if (!userAddObj[key].value) {
  343. alert('请填写真实姓名');
  344. return;
  345. }
  346. userAddParam['truename'] = userAddObj[key].value;
  347. } else if (userAddObj[key].name == 'phone') { //aa验证手机号
  348. if (!userAddObj[key].value) {
  349. alert('请填写手机号码');
  350. return;
  351. } else {
  352. let telre = /^(13[0-9]|14[0-9]|15[0-9]|17[0-9]|18[0-9])\d{8}$/;
  353. if (!telre.test(userAddObj[key].value)) {
  354. alert('请输入有效的手机号码');
  355. return false;
  356. }
  357. }
  358. userAddParam['phone'] = userAddObj[key].value;
  359. } else {
  360. //其它字段 ....
  361. userAddParam[userAddObj[key].name] = userAddObj[key].value;
  362. }
  363. }
  364. //验证通过 请求ajax
  365. ajaxRequest(USER_ADD, "POST", userAddParam, function(result) {
  366. if (result.flag) {
  367. let data = result.data;
  368. layer.close(layerCreateIndex);
  369. layer.msg(result.msg, { icon: 6 });
  370. getListDataAjax();
  371. } else {
  372. //服务端返回报错
  373. alert(result.msg);
  374. }
  375. }, function(errorMsg) {
  376. alert("用户添加失败!");
  377. })
  378. })
  379. /* 修改用户发送请求 */
  380. $('#editUser').click(function() {
  381. //获取表单的值 并转换成对象
  382. let allParam = serializeArrayToObj($("#editUserForm").serializeArray());
  383. //获取表单的值
  384. let userEditObj = $("#editUserForm").serializeArray();
  385. //发送给服务端的数据格式
  386. let userEditParam = {};
  387. for (let key in userEditObj) { //循环验证······
  388. //验证用户名
  389. if (userEditObj[key].name == 'truename') {
  390. if (!userEditObj[key].value) {
  391. alert('请填写真实姓名');
  392. return;
  393. }
  394. userEditParam['truename'] = userEditObj[key].value;
  395. } else if (userEditObj[key].name == 'sex') {
  396. if (!userEditObj[key].value) {
  397. alert('请选择性别');
  398. return;
  399. }
  400. userEditParam['sex'] = md5(userEditObj[key].value);
  401. } else if (userEditObj[key].name == 'posname') { //aa验证年龄
  402. if (!userEditObj[key].value) {
  403. alert('请选择角色');
  404. return;
  405. }
  406. userEditParam['posname'] = userEditObj[key].value;
  407. } else if (userEditObj[key].name == 'phone') { //aa验证手机号
  408. if (!userEditObj[key].value) {
  409. alert('请填写手机号码');
  410. return;
  411. } else {
  412. let telre = /^(13[0-9]|14[0-9]|15[0-9]|17[0-9]|18[0-9])\d{8}$/;
  413. if (!telre.test(userEditObj[key].value)) {
  414. alert('请输入有效的手机号码');
  415. return false;
  416. }
  417. }
  418. userEditParam['phone'] = userEditObj[key].value;
  419. } else if (userEditObj[key].name == 'status') { //aa验证年龄
  420. if (!userEditObj[key].value) {
  421. alert('请选择删除状态');
  422. return;
  423. }
  424. userEditParam['status'] = userEditObj[key].value;
  425. } else if (userEditObj[key].name == 'locked') { //aa验证年龄
  426. if (!userEditObj[key].value) {
  427. alert('请选择锁定状态');
  428. return;
  429. }
  430. userEditParam['locked'] = userEditObj[key].value;
  431. } else if (userEditObj[key].name == 'wrongtimes') { //aa验证年龄
  432. if (!userEditObj[key].value) {
  433. alert('请输入错误次数');
  434. return;
  435. }
  436. userEditParam['wrongtimes'] = userEditObj[key].value;
  437. } else {
  438. //其它字段 ....
  439. userEditParam[userEditObj[key].name] = userEditObj[key].value;
  440. }
  441. }
  442. //验证通过 请求ajax
  443. ajaxRequest(USER_UPDATE, "POST", allParam, function(result) {
  444. let data = result.data;
  445. layer.close(layerUpdateIndex);
  446. layer.msg('修改成功!', { icon: 6 });
  447. getListDataAjax();
  448. }, function(errorMsg) {
  449. alert("用户修改失败!");
  450. })
  451. })
  452. // 公司与部门联动 (修改和新增)
  453. linkDep('#companyId')
  454. linkDep('#companyId2')
  455. function linkDep(element) {
  456. $(element).on('change', function() {
  457. //获取公司id
  458. let companyName = $(this).find('option:selected').val();
  459. ajaxRequest(COMPANY_LIST, "POST", { "ownerId": companyName }, function(result) {
  460. let companyDepartmentItems = '<option value="">请选择</option>';
  461. let departmentObj = result.data[0].child;
  462. departmentObj.forEach(function(item, key) {
  463. companyDepartmentItems += `<option value="${item.departmentId}">${item.departmentName}</option>`
  464. })
  465. $('#departmentId').html(companyDepartmentItems);
  466. $('#departmentIdUpdate').html(companyDepartmentItems);
  467. }, function(errorMsg) {
  468. alert("请求数据失败!");
  469. })
  470. })
  471. }
  472. // 导出 start
  473. $('.export').click(function() {
  474. getDataExport({ "user_name": param1, "roleId": param2, "companyId": param3, "depname": param4 })
  475. })
  476. function getDataExport(queryParam = {}) {
  477. // 输出base64编码
  478. const base64 = s => window.btoa(unescape(encodeURIComponent(s)));
  479. ajaxRequest(USER_EXPORT, "POST", queryParam, function(result) {
  480. let data = result.data;
  481. let newData = [];
  482. data.forEach(function(item, index) {
  483. let posName = "";
  484. if (item.posname == 1) {
  485. posName = "超级管理员"
  486. } else if (item.posname == 2) {
  487. posName = "普通员工"
  488. }
  489. let locked = item.locked ? '未锁定' : '锁定';
  490. let time = getFormatDate(item.ctime.time)
  491. newData.push({ truename: item.truename, sex: item.sex, posname: posName, time: time, addman: item.addman, locked: locked, wrongtimes: item.wrongtimes })
  492. });
  493. let str = '<tr style="text-align:center"><th>姓名</th><th>性别</th><th>用户身份</th><th>创建时间</th><th>创建人</th><th>锁定状态</th><th>错误次数</th></tr>';
  494. // 循环遍历,每行加入tr标签,每个单元格加td标签
  495. for (let i = 0; i < newData.length; i++) {
  496. str += '<tr style="text-align:center">';
  497. for (const key in newData[i]) {
  498. // 增加\t为了不让表格显示科学计数法或者其他格式
  499. str += `<td x:str>${ newData[i][key] + '\t'}</td>`;
  500. }
  501. str += '</tr>';
  502. }
  503. // Worksheet名
  504. const worksheet = 'Sheet1'
  505. const uri = 'data:application/vnd.ms-excel;base64,';
  506. // 下载的表格模板数据
  507. let template = `<html xmlns:o="urn:schemas-microsoft-com:office:office"
  508. xmlns:x="urn:schemas-microsoft-com:office:excel"
  509. xmlns="http://www.w3.org/TR/REC-html40">
  510. <head><meta charset='UTF-8'><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet>
  511. <x:Name>${worksheet}</x:Name>
  512. <x:WorksheetOptions><x:DisplayGridlines/></x:WorksheetOptions></x:ExcelWorksheet>
  513. </x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]-->
  514. </head><body><table>${str}</table></body></html>`;
  515. // 通过创建a标签实现
  516. const link = document.createElement("a");
  517. link.href = uri + base64(template);
  518. // 对下载的文件命名
  519. link.download = "用户管理数据表.xls";
  520. link.click();
  521. }, function(errorMsg) {
  522. alert("请求数据失败!");
  523. })
  524. }
  525. // 导出 end