tender_permission.js 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. 'use strict';
  2. /**
  3. *
  4. *
  5. * @author Mai
  6. * @date 2025/7/18
  7. * @version
  8. */
  9. const MemberPermission = function() {
  10. let setting;
  11. // 搜索&展开收起
  12. let timer = null;
  13. let oldSearchVal = null;
  14. $('#member-search').bind('input propertychange', function(e) {
  15. oldSearchVal = e.target.value;
  16. timer && clearTimeout(timer);
  17. timer = setTimeout(() => {
  18. const newVal = $('#member-search').val();
  19. let html = '';
  20. if (newVal && newVal === oldSearchVal) {
  21. accountList
  22. .filter(item => item && (item.name.indexOf(newVal) !== -1 || (item.mobile && item.mobile.indexOf(newVal) !== -1)))
  23. .forEach(item => {
  24. html += `<dd class="border-bottom p-2 mb-0 " data-id="${item.id}" >
  25. <p class="mb-0 d-flex"><span class="text-primary">${item.name}</span><span
  26. class="ml-auto">${item.mobile || ''}</span></p>
  27. <span class="text-muted">${item.role || ''}</span></dd>`
  28. });
  29. $('.book-list').empty();
  30. $('.book-list').append(html);
  31. } else {
  32. if (!$('.acc-btn').length) {
  33. accountGroup.forEach((group, idx) => {
  34. if (!group) return;
  35. html += `<dt><a href="javascript: void(0);" class="acc-btn" data-groupid="${idx}" data-type="hide"><i class="fa fa-plus-square"></i>
  36. </a> ${group.groupName}</dt>
  37. <div class="dd-content" data-toggleid="${idx}">`;
  38. group.groupList.forEach(item => {
  39. html += `<dd class="border-bottom p-2 mb-0 " data-id="${item.id}" >
  40. <p class="mb-0 d-flex"><span class="text-primary">${item.name}</span><span
  41. class="ml-auto">${item.mobile || ''}</span></p>
  42. <span class="text-muted">${item.role || ''}</span>
  43. </dd>`
  44. });
  45. html += '</div>';
  46. });
  47. $('.book-list').empty();
  48. $('.book-list').append(html);
  49. }
  50. }
  51. }, 400);
  52. });
  53. $('.book-list').on('click', 'dt', function () {
  54. const idx = $(this).find('.acc-btn').attr('data-groupid')
  55. const type = $(this).find('.acc-btn').attr('data-type')
  56. if (type === 'hide') {
  57. $(this).parent().find(`div[data-toggleid="${idx}"]`).show(() => {
  58. $(this).children().find('i').removeClass('fa-plus-square').addClass('fa-minus-square-o')
  59. $(this).find('.acc-btn').attr('data-type', 'show')
  60. })
  61. } else {
  62. $(this).parent().find(`div[data-toggleid="${idx}"]`).hide(() => {
  63. $(this).children().find('i').removeClass('fa-minus-square-o').addClass('fa-plus-square')
  64. $(this).find('.acc-btn').attr('data-type', 'hide')
  65. })
  66. }
  67. return false
  68. });
  69. // 添加
  70. $('dl').on('click', 'dd', function () {
  71. const auditorId = parseInt($(this).data('id'));
  72. const user = accountList.find(x => { return x.id === auditorId; });
  73. const check = $(`tr[uid=${auditorId}]`, '#member-list');
  74. if (check.length > 0) {
  75. toastr.error('请勿重复添加成员');
  76. return;
  77. }
  78. $('#member-list').append(getUserPermissionHtml({ uid: user.id, name: user.name, role: user.role }));
  79. });
  80. const getUserPermissionHtml = function(user) {
  81. const html = [];
  82. html.push(`<tr uid="${user.uid}">`);
  83. html.push(`<td>${user.name}</td>`, `<td>${user.role}</td>`);
  84. for (const block of permissionBlock) {
  85. for (const p of block.permission) {
  86. if (p.isDefault) continue;
  87. const checked = user[block.key] ? (user[block.key].indexOf(p.value) >= 0 ? 'checked' : '') : '';
  88. html.push(`<td class="text-center"><input type="checkbox" data-block="${block.key}" data-value="${p.value}" ${checked}></td>`);
  89. }
  90. }
  91. html.push(`<td><a href="javascript: void(0)" class="btn btn-outline-danger btn-sm ml-1" name="del-member">移除</a></td>`);
  92. html.push('</tr>');
  93. return html.join('');
  94. };
  95. const getPermissionHtml = function(member) {
  96. const html = [];
  97. for (const m of member) {
  98. html.push(getUserPermissionHtml(m));
  99. }
  100. return html.join('');
  101. };
  102. const loadMemberPermission = async function() {
  103. const data = JSON.parse(JSON.stringify(setting.data));
  104. data.parts = permissionBlock.map(x => { return x.key; });
  105. const result = await postDataAsync(setting.loadUrl, data );
  106. $('#member-list').html(getPermissionHtml(result));
  107. };
  108. const show = async function(info) {
  109. setting = info;
  110. await loadMemberPermission();
  111. $('#member').modal('show');
  112. };
  113. $('#member').on('click', 'a[name="del-member"]', function () {
  114. $(this).parent().parent().remove();
  115. });
  116. const getMemberPermission = function() {
  117. const result = [];
  118. const trs = $('tr', '#member-list');
  119. for (const tr of trs) {
  120. const user = { uid: tr.getAttribute('uid') };
  121. for (const block of permissionBlock) {
  122. const defaultPermission = block.permission.find(x => { return x.isDefault; });
  123. const permission = [];
  124. if (defaultPermission) permission.unshift(defaultPermission.value + '');
  125. const checkedPermission = $(`[data-block=${block.key}]:checked`, tr);
  126. for (const cp of checkedPermission) {
  127. permission.push(cp.getAttribute('data-value'));
  128. }
  129. user[block.key] = permission;
  130. }
  131. result.push(user);
  132. }
  133. return result;
  134. };
  135. $('#member-ok').click(function() {
  136. const data = JSON.parse(JSON.stringify(setting.data));
  137. data.member = getMemberPermission();
  138. data.permissionBlock = permissionBlock.map(x => { return x.key;});
  139. postData(setting.saveUrl, data, function() {
  140. $('#member').modal('hide');
  141. });
  142. });
  143. return { show }
  144. };