category.js 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  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. for (const v of d.value) {
  36. html.push('<span class="h5"><span class="badge badge-secondary">', v, '</span></span>\n');
  37. }
  38. html.push('</td>');
  39. html.push('<td>');
  40. html.push('<a href="javasrcipt: void(0);" name="add" class="btn btn-sm btn-outline-primary"', 'cid="' + d.id, '">添加值</a>\n');
  41. html.push('<a href="javasrcipt: void(0);" name="edit-cate" class="btn btn-sm btn-outline-primary"', 'cid="' + d.id + '">编辑</a>\n');
  42. html.push('<a href="javasrcipt: void(0);" name="del" class="btn btn-sm btn-outline-danger"', 'cid="' + d.id + '">删除</a> ');
  43. html.push('</td>');
  44. html.push('<tr>');
  45. }
  46. return html.join('');
  47. }
  48. function getValueHtml(value) {
  49. const html = [];
  50. for (const v of value) {
  51. html.push('<tr name="value">');
  52. html.push('<td><input class="form-control form-control-sm" name="value" placeholder="请输入值" value="' + v + '"></td>');
  53. html.push('<td><a href="javasrcipt: void(0);" class="text-danger">删除</a></td>');
  54. html.push('</tr>');
  55. }
  56. return html.join('');
  57. }
  58. function findCategory(cid) {
  59. for (const c of cData) {
  60. if (c.id === cid) {
  61. return c;
  62. }
  63. }
  64. }
  65. function bindCategoryControl() {
  66. // 弹出添加值
  67. $('a[name=add]').bind('click', function () {
  68. const id = parseInt($(this).attr('cid'));
  69. const category = findCategory(id);
  70. $('#add-ok').attr('cid', id);
  71. if (category) {
  72. const list = $('#value-list');
  73. list.html(getValueHtml(category.value) + '<tr id="add-value-row"><td colspan="2"><a href="javascript: void(0);">添加新值</a></td></tr>');
  74. $('#add-value-row').click(function () {
  75. $(this).before('<tr><td><input class="form-control form-control-sm" name="value" placeholder="请输入值"></td><td><a href="javasrcipt: void(0);" class="text-danger">删除</a></td></tr>');
  76. });
  77. $('#add').modal('show');
  78. }
  79. });
  80. // 弹出 编辑
  81. $('a[name=edit-cate]').bind('click', function () {
  82. const id = parseInt($(this).attr('cid'));
  83. const category = findCategory(id);
  84. $('input[name=name]', '#edit-cate').val(category.name);
  85. $('div[name=type]', '#edit-cate').html(getTypeHtml());
  86. $('#inlineRadio' + category.type, '#edit-cate')[0].checked = true;
  87. $('#edit-cate-ok').attr('cid', $(this).attr('cid'));
  88. $('#edit-cate').modal('show');
  89. });
  90. // 弹出 删除类别
  91. $('a[name=del]').bind('click', function () {
  92. $('#del-cate-ok').attr('cid', $(this).attr('cid'));
  93. $('#del-cate').modal('show');
  94. });
  95. }
  96. $(document).ready(() => {
  97. InitCategoryData(cData);
  98. $('#categoryList').html(getCategoryHtml(cData));
  99. bindCategoryControl();
  100. $('div[name=type]', '#add-cate').html(getTypeHtml());
  101. // 新增分类
  102. $('#add-cate-ok').click(function () {
  103. const name = $('input[name=name]', '#add-cate');
  104. const type = $('input[type=radio]:checked', '#add-cate');
  105. const data = {
  106. name: name.val(),
  107. type: parseInt(type.val()),
  108. };
  109. postData('/setting/category/add', data, function (data) {
  110. InitCategoryData(data);
  111. $('#categoryList').append(getCategoryHtml(data));
  112. bindCategoryControl();
  113. cData.push(data);
  114. $('#add-cate').modal('hide');
  115. name.val('');
  116. type[0].checked = false;
  117. }, function (msg) {
  118. $('#add-cate').modal('hide');
  119. });
  120. });
  121. // 添加值
  122. $('#add-ok').click(function () {
  123. const valueArr = [];
  124. const value = $('input[name=value]');
  125. for (const v of value) {
  126. if (v.value !== '') {
  127. valueArr.push(v.value);
  128. }
  129. }
  130. const data = {
  131. id: $(this).attr('cid'),
  132. value: valueArr,
  133. }
  134. postData('/setting/category/update', data, function (data) {
  135. const category = findCategory(data.id);
  136. for (const c in data) {
  137. category[c] = data[c];
  138. }
  139. InitCategoryData(category);
  140. $('tr[cid=' + data.id + ']')[0].outerHTML = getCategoryHtml(category);
  141. $('#add').modal('hide');
  142. }, function () {
  143. $('#add').modal('hide');
  144. });
  145. });
  146. // 编辑
  147. $('#edit-cate-ok').click(function () {
  148. const name = $('input[name=name]', '#edit-cate');
  149. const type = $('input[type=radio]:checked', '#edit-cate');
  150. const data = {
  151. id: parseInt($(this).attr('cid')),
  152. name: name.val(),
  153. type: parseInt(type.val()),
  154. }
  155. postData('/setting/category/update', data, function (data) {
  156. const category = findCategory(data.id);
  157. for (const c in data) {
  158. category[c] = data[c];
  159. }
  160. InitCategoryData(category);
  161. $('tr[cid=' + data.id + ']')[0].outerHTML = getCategoryHtml(category);
  162. $('#edit-cate').modal('hide');
  163. }, function () {
  164. $('#edit-cate').modal('hide');
  165. });
  166. });
  167. // 删除类别
  168. $('#del-cate-ok').click(function () {
  169. const data = {
  170. id: parseInt($(this).attr('cid')),
  171. }
  172. postData('/setting/category/del', data, function () {
  173. $('tr[cid=' + data.id + ']').remove();
  174. $('#del-cate').modal('hide');
  175. }, function () {
  176. $('#del-cate').modal('hide');
  177. });
  178. });
  179. });