category.js 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213
  1. 'use strict';
  2. /**
  3. *
  4. *
  5. * @author Mai
  6. * @date 2018/9/26
  7. * @version
  8. */
  9. function InitCategoryData(category) {
  10. const data = category instanceof Array ? category : [category];
  11. for (const d of data) {
  12. // d.valueArr = d.value && d.value !== '' ? JSON.parse(d.value) : [];
  13. d.typeStr = cType.text[d.type];
  14. }
  15. }
  16. function getTypeHtml() {
  17. const html = [];
  18. for (const k in cType.key) {
  19. const value = cType.key[k];
  20. html.push('<div class="form-check form-check-inline">');
  21. html.push('<input class="form-check-input" type="radio" name="inlineRadioOptions" id="inlineRadio' + value + '" value="' + value + '">');
  22. html.push('<label class="form-check-label" for="inlineRadio' + value + '">', cType.text[value], '</label>');
  23. html.push('</div>');
  24. }
  25. return html.join('');
  26. }
  27. function getCategoryHtml(category) {
  28. const data = category instanceof Array ? category : [category];
  29. const html = [];
  30. for (const d of data) {
  31. html.push('<tr ', d.value && d.value.length > 0 ? '' : 'class="table-warning"', 'cid="' + d.id + '">');
  32. html.push('<td>', d.name, '</td>');
  33. html.push('<td>', d.typeStr, '</td>');
  34. html.push('<td>');
  35. if (d.value && d.value.length > 0) {
  36. for (const v of d.value) {
  37. html.push('<span class="h5"><span class="badge badge-secondary">', v.value, '</span></span>\n');
  38. }
  39. } else {
  40. html.push('请在右侧添加值');
  41. }
  42. html.push('</td>');
  43. html.push('<td>');
  44. html.push('<a href="javasrcipt: void(0);" name="add" class="btn btn-sm btn-outline-primary"', 'cid="' + d.id, '">添加值</a>\n');
  45. html.push('<a href="javasrcipt: void(0);" name="edit-cate" class="btn btn-sm btn-outline-primary"', 'cid="' + d.id + '">编辑</a>\n');
  46. html.push('<a href="javasrcipt: void(0);" name="del" class="btn btn-sm btn-outline-danger"', 'cid="' + d.id + '">删除</a> ');
  47. html.push('</td>');
  48. html.push('<tr>');
  49. }
  50. return html.join('');
  51. }
  52. function getValueTenderCount(value) {
  53. function findTenderCate(tender) {
  54. for (const c of tender.category) {
  55. if (c.cid == value.cid) {
  56. return c;
  57. }
  58. }
  59. }
  60. const valueTender = tenders.filter(function (t) {
  61. const cate = findTenderCate(t);
  62. console.log(cate);
  63. return cate ? cate.value == value.id : false;
  64. });
  65. return valueTender ? valueTender.length : 0;
  66. }
  67. function getValueHtml(value) {
  68. const html = [];
  69. for (const v of value) {
  70. html.push('<tr name="value">');
  71. html.push('<td><input class="form-control form-control-sm" name="value" placeholder="请输入值" value="' + v.value + '" vid ="' + v.id + '"></td>');
  72. console.log(v);
  73. html.push('<td>', getValueTenderCount(v) ,'</td>');
  74. html.push('<td><a href="javasrcipt: void(0);" class="text-danger">删除</a></td>');
  75. html.push('</tr>');
  76. }
  77. return html.join('');
  78. }
  79. function findCategory(cid) {
  80. for (const c of cData) {
  81. if (c.id === cid) {
  82. return c;
  83. }
  84. }
  85. }
  86. function bindCategoryControl() {
  87. // 弹出添加值
  88. $('a[name=add]').bind('click', function () {
  89. const id = parseInt($(this).attr('cid'));
  90. const category = findCategory(id);
  91. $('#add-ok').attr('cid', id);
  92. if (category) {
  93. const list = $('#value-list');
  94. list.html(getValueHtml(category.value) + '<tr id="add-value-row"><td colspan="3"><a href="javascript: void(0);">添加新值</a></td></tr>');
  95. $('#add-value-row').click(function () {
  96. $(this).before('<tr><td><input class="form-control form-control-sm" name="value" placeholder="请输入值"></td><td>0</td><td><a href="javasrcipt: void(0);" class="text-danger">删除</a></td></tr>');
  97. });
  98. $('#add').modal('show');
  99. }
  100. });
  101. // 弹出 编辑
  102. $('a[name=edit-cate]').bind('click', function () {
  103. const id = parseInt($(this).attr('cid'));
  104. const category = findCategory(id);
  105. $('input[name=name]', '#edit-cate').val(category.name);
  106. $('div[name=type]', '#edit-cate').html(getTypeHtml());
  107. $('#inlineRadio' + category.type, '#edit-cate')[0].checked = true;
  108. $('#edit-cate-ok').attr('cid', $(this).attr('cid'));
  109. $('#edit-cate').modal('show');
  110. });
  111. // 弹出 删除类别
  112. $('a[name=del]').bind('click', function () {
  113. $('#del-cate-ok').attr('cid', $(this).attr('cid'));
  114. $('#del-cate').modal('show');
  115. });
  116. }
  117. $(document).ready(() => {
  118. InitCategoryData(cData);
  119. $('#categoryList').html(getCategoryHtml(cData));
  120. bindCategoryControl();
  121. $('div[name=type]', '#add-cate').html(getTypeHtml());
  122. // 新增分类
  123. $('#add-cate-ok').click(function () {
  124. const name = $('input[name=name]', '#add-cate');
  125. const type = $('input[type=radio]:checked', '#add-cate');
  126. const data = {
  127. name: name.val(),
  128. type: parseInt(type.val()),
  129. };
  130. postData('/setting/category/add', data, function (data) {
  131. InitCategoryData(data);
  132. $('#categoryList').append(getCategoryHtml(data));
  133. bindCategoryControl();
  134. cData.push(data);
  135. $('#add-cate').modal('hide');
  136. name.val('');
  137. type[0].checked = false;
  138. }, function (msg) {
  139. $('#add-cate').modal('hide');
  140. });
  141. });
  142. // 添加值
  143. $('#add-ok').click(function () {
  144. const valueArr = [];
  145. const value = $('input[name=value]');
  146. for (const v of value) {
  147. if (v.value !== '') {
  148. valueArr.push({
  149. id: $(v).attr('id'),
  150. value: $(v).val(),
  151. });
  152. }
  153. }
  154. const data = {
  155. id: parseInt($(this).attr('cid')),
  156. value: valueArr,
  157. };
  158. postData('/setting/category/value', data, function (data) {
  159. tenders = data.tenders;
  160. const category = findCategory(data.category.id);
  161. category.value = data.category.value;
  162. InitCategoryData(category);
  163. $('tr[cid=' + data.category.id + ']')[0].outerHTML = getCategoryHtml(category);
  164. bindCategoryControl();
  165. $('#add').modal('hide');
  166. }, function () {
  167. $('#add').modal('hide');
  168. });
  169. });
  170. // 编辑
  171. $('#edit-cate-ok').click(function () {
  172. const name = $('input[name=name]', '#edit-cate');
  173. const type = $('input[type=radio]:checked', '#edit-cate');
  174. const data = {
  175. id: parseInt($(this).attr('cid')),
  176. name: name.val(),
  177. type: parseInt(type.val()),
  178. }
  179. postData('/setting/category/update', data, function (data) {
  180. const category = findCategory(data.id);
  181. for (const c in data) {
  182. category[c] = data[c];
  183. }
  184. InitCategoryData(category);
  185. $('tr[cid=' + data.id + ']')[0].outerHTML = getCategoryHtml(category);
  186. bindCategoryControl();
  187. $('#edit-cate').modal('hide');
  188. }, function () {
  189. $('#edit-cate').modal('hide');
  190. });
  191. });
  192. // 删除类别
  193. $('#del-cate-ok').click(function () {
  194. const data = {
  195. id: parseInt($(this).attr('cid')),
  196. }
  197. postData('/setting/category/del', data, function () {
  198. $('tr[cid=' + data.id + ']').remove();
  199. $('#del-cate').modal('hide');
  200. }, function () {
  201. $('#del-cate').modal('hide');
  202. });
  203. });
  204. });