setting_datacollect_tender.js 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219
  1. 'use strict';
  2. /**
  3. *
  4. * @author LanJianRong
  5. * @date 2020/11/13
  6. * @version
  7. */
  8. let selfLevelSort;
  9. const tenderTree = [];
  10. let parentId = 0;
  11. // 查询方法
  12. function findNode (key, value, arr) {
  13. for (const a of arr) {
  14. if (a[key] && a[key] === value) {
  15. return a;
  16. }
  17. }
  18. }
  19. // 分类数据排序
  20. // 分类数据排序
  21. function loadSelfCategoryLevel(selfLevel){
  22. selfLevelSort = selfLevel ? selfLevel.split(',') : [];
  23. selfLevelSort = selfLevelSort.filter(x => {
  24. return category.find(c => { return c.id + '' === x; });
  25. });
  26. category.forEach(cate => {
  27. cate.is_self = selfLevelSort.length > 0;
  28. cate.self_level = selfLevelSort.indexOf(cate.id + '') + 1;
  29. });
  30. }
  31. function sortCategory() {
  32. category.forEach(cate => {
  33. cate.show_level = cate.is_self ? cate.self_level : cate.level;
  34. });
  35. category.sort(function (a, b) {
  36. return a.show_level ? (b.show_level ? a.show_level - b.show_level : -1) : a.id - b.id;
  37. });
  38. }
  39. // 初始化TenderTree数据
  40. function initTenderTree () {
  41. const levelCategory = category.filter(function (c) {
  42. return c.show_level && c.show_level > 0;
  43. });
  44. function findCategoryNode(cid, value, array) {
  45. for (const a of array) {
  46. if (a.cid === cid && a.vid === value) {
  47. return a;
  48. }
  49. }
  50. }
  51. function getCategoryNode(category, value, parent, i = null) {
  52. const array = parent ? parent.children : tenderTree;
  53. let cate = findCategoryNode(category.id, value, array);
  54. if (!cate) {
  55. const cateValue = findNode('id', value, category.value);
  56. if (!cateValue) return null;
  57. cate = {
  58. cid: category.id,
  59. vid: value,
  60. name: cateValue.value,
  61. children: [],
  62. level: i ? i : category.show_level,
  63. sort_id: ++parentId,
  64. sort: cateValue.sort,
  65. };
  66. array.push(cate);
  67. }
  68. return cate;
  69. }
  70. function loadTenderCategory (tender) {
  71. let tenderCategory = null;
  72. for (const [index,lc] of levelCategory.entries()) {
  73. const tenderCate = findNode('cid', lc.id, tender.category);
  74. if (tenderCate) {
  75. tenderCategory = getCategoryNode(lc, tenderCate.value, tenderCategory);
  76. } else {
  77. if (index === 0 && tender.category) {
  78. for (const [i,c] of tender.category.entries()) {
  79. const cate = findNode('id', c.cid, category);
  80. if (cate) {
  81. tenderCategory = getCategoryNode(cate, c.value, tenderCategory, i+1);
  82. } else {
  83. console.log(tender.name, c.cid, c.value);
  84. }
  85. }
  86. }
  87. return tenderCategory;
  88. }
  89. }
  90. return tenderCategory;
  91. }
  92. tenderTree.splice(0, tenderTree.length);
  93. for (const t of tenders) {
  94. t.valid = true;
  95. delete t.level;
  96. if (t.category && levelCategory.length > 0) {
  97. const parent = loadTenderCategory(t);
  98. if (parent) {
  99. t.level = parent.level + 1;
  100. parent.children.push(t);
  101. } else {
  102. tenderTree.push(t);
  103. }
  104. } else {
  105. tenderTree.push(t);
  106. }
  107. }
  108. sortTenderTree(tenderTree);
  109. }
  110. function recursiveGetTenderNodeHtml (node, arr, pid) {
  111. // console.log(node, tender)
  112. const html = [];
  113. html.push('<tr pid="' + pid + '">');
  114. // 名称
  115. html.push('<td class="in-' + node.level + '">');
  116. if (node.cid) {
  117. html.push('<i class="fa fa-folder-o"></i> ', node.name);
  118. } else {
  119. html.push('<span class="text-muted mr-2">');
  120. html.push(arr.indexOf(node) === arr.length - 1 ? '└' : '├');
  121. html.push('</span>');
  122. //html.push('<a href="/tender/' + node.id + '">', node[c.field], '</a>');
  123. html.push('<a href="javascript: void(0)" id="' + node.id + '">', node.name, '</a>');
  124. }
  125. html.push('</td>');
  126. // 创建人
  127. html.push('<td>');
  128. if (!node.cid) {
  129. // html.push('<input data-tid="'+ node.id +'" type="radio"> '+ (node.copy_id === tender.copy_id ? 'checked' : '') + '/>');
  130. html.push(`<input data-tid=${node.id} type="checkbox" ${_.findIndex(dcTenders, { tid: node.id }) === -1 ? 'checked' : ''}>`);
  131. }
  132. html.push('</td>');
  133. html.push('</tr>');
  134. if (node.children) {
  135. for (const c of node.children) {
  136. html.push(recursiveGetTenderNodeHtml(c, node.children, node.sort_id));
  137. }
  138. }
  139. return html.join('');
  140. }
  141. // 根据TenderTree数据获取Html代码
  142. function getTenderTreeHtml () {
  143. if (tenderTree.length > 0) {
  144. const html = [];
  145. // html.push('<table class="table table-hover table-bordered">');
  146. // html.push('<thead>', '<tr>');
  147. // html.push('<th>名称</th>');
  148. // html.push('<th width="60">选择 <input type="checkbox" id="select-tender-all"></th>');
  149. // html.push('</tr>', '</thead>');
  150. parentId = 0;
  151. for (const t of tenderTree) {
  152. html.push(recursiveGetTenderNodeHtml(t, tenderTree, ''));
  153. }
  154. // html.push('</table>');
  155. return html.join('');
  156. } else {
  157. return EmptyTenderHtml.join('');
  158. }
  159. }
  160. $(document).ready(function () {
  161. loadSelfCategoryLevel(selfCategoryLevel);
  162. sortCategory();
  163. initTenderTree();
  164. $('#tenderBtn').click(() => {
  165. tenderListOrder.reOrderTenders('', '#copyModalContent', false);
  166. // const html = getTenderTreeHtml();
  167. // $('#copyModalContent').html(html);
  168. $('#sort input[value="'+ addDataCollect +'"]').prop('checked', true);
  169. if($('#copyModalContent input[type="checkbox"]:not(:checked)').length === 0) {
  170. $('#select-tender-all').prop('checked', true);
  171. } else {
  172. $('#select-tender-all').prop('checked', false);
  173. }
  174. $('#sort').modal('show');
  175. });
  176. $('#tender_dataCollect_btn').click(function () {
  177. // 获取是否新增展示到决策大屏
  178. const add_datacollect = $('input[name="add_datacollect"]:checked').val();
  179. const noTidList = [];
  180. $("#copyModalContent input[type='checkbox']:not(:checked)").each(function () {
  181. noTidList.push($(this).data('tid'));
  182. });
  183. const dcTidList = _.map(dcTenders, 'tid');
  184. let is_list_update = true;
  185. let is_collect_update = true;
  186. if (_.isEqual(_.sortBy(dcTidList), _.sortBy(noTidList))) {
  187. is_list_update = false;
  188. }
  189. if (parseInt(add_datacollect) === addDataCollect) {
  190. is_collect_update = false;
  191. }
  192. if (is_list_update || is_collect_update) {
  193. postData('/sp/' + spid + '/setting/datacollect/save', { type: 'tender', add_datacollect: parseInt(add_datacollect), tids: noTidList }, function (result) {
  194. addDataCollect = result.addDataCollect;
  195. dcTenders = result.dcTenders;
  196. toastr.success('修改成功');
  197. })
  198. }
  199. $('#sort').modal('hide');
  200. });
  201. $('#select-tender-all').click(function () {
  202. const is_checked = $(this).is(':checked');
  203. if(is_checked) {
  204. $("#copyModalContent input[type='checkbox']").prop('checked', true);
  205. } else {
  206. $("#copyModalContent input[type='checkbox']").prop('checked', false);
  207. }
  208. });
  209. $('body').on('click', "#copyModalContent input[type='checkbox']", function () {
  210. if($('#copyModalContent input[type="checkbox"]:not(:checked)').length === 0) {
  211. $('#select-tender-all').prop('checked', true);
  212. } else {
  213. $('#select-tender-all').prop('checked', false);
  214. }
  215. })
  216. });