feedback.js 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefined, Backend, Table, Form) {
  2. var feedbackTypeList = {};
  3. var processStatusList = {};
  4. var statusList = {};
  5. var Controller = {
  6. index: function () {
  7. // 初始化表格参数配置
  8. Table.api.init({
  9. extend: {
  10. index_url: 'feedback/index' + location.search,
  11. add_url: 'feedback/add',
  12. edit_url: 'feedback/edit',
  13. del_url: 'feedback/del',
  14. multi_url: 'feedback/multi',
  15. import_url: 'feedback/import',
  16. table: 'shop_feedback',
  17. }
  18. });
  19. var table = $("#table");
  20. feedbackTypeList = JSON.parse(Config.feedbackTypeSearchList);
  21. processStatusList = JSON.parse(Config.processStatusSearchList);
  22. statusList = JSON.parse(Config.statusSearchList);
  23. console.log(feedbackTypeList);
  24. console.log(processStatusList);
  25. console.log(statusList);
  26. // 初始化表格
  27. table.bootstrapTable({
  28. url: $.fn.bootstrapTable.defaults.extend.index_url,
  29. pk: 'id',
  30. sortName: 'id',
  31. fixedColumns: true,
  32. fixedRightNumber: 1,
  33. columns: [
  34. [
  35. {checkbox: true},
  36. {field: 'id', title: __('Id')},
  37. {
  38. field: 'user.username', title: __('User_id'), width: 150, operate: 'LIKE',
  39. formatter: function (value, row, index) {
  40. // 显示用户头像、用户名和手机号,样式与agent保持一致
  41. var avatarUrl = row.user && row.user.avatar ? Fast.api.cdnurl(row.user.avatar) : Fast.api.cdnurl('/assets/img/avatar.png');
  42. var username = row.user && row.user.username ? row.user.username : '游客';
  43. var phone = row.user && row.user.mobile ? row.user.mobile : '';
  44. var html = '<div style="display:flex;align-items:center;">';
  45. html += '<img src="' + avatarUrl + '" style="width:40px;height:40px;border-radius:50%;margin-right:10px;" />';
  46. html += '<div>';
  47. html += '<div style="color:#337ab7;font-weight:bold;">' + username + '</div>';
  48. html += '<div style="color:#6c757d;font-size:12px;">' + phone + '</div>';
  49. html += '</div></div>';
  50. return html;
  51. }
  52. },
  53. {field: 'type', title: __('Type'), searchList: feedbackTypeList,formatter: Controller.api.formatter.type},
  54. {field: 'content', title: __('Content'), operate: 'LIKE', table: table, class: 'autocontent', formatter: Table.api.formatter.content},
  55. {field: 'images', title: __('Images'), operate: false, events: Table.api.events.image, formatter: Table.api.formatter.images},
  56. {field: 'phone', title: __('Phone'), operate: 'LIKE'},
  57. {field: 'process_status', title: __('Process_status'), searchList: processStatusList,formatter:Controller.api.formatter.process_status},
  58. {field: 'remark', title: __('Remark'), operate: 'LIKE', table: table, class: 'autocontent', formatter: Table.api.formatter.remark},
  59. {field: 'status', title: __('Status'), searchList: statusList, formatter:Table.api.formatter.status},
  60. {field: 'createtime', title: __('Createtime'), operate:'RANGE', addclass:'datetimerange', autocomplete:false, formatter: Table.api.formatter.datetime},
  61. {field: 'updatetime', title: __('Updatetime'), operate:'RANGE', addclass:'datetimerange', autocomplete:false, formatter: Table.api.formatter.datetime},
  62. {field: 'operate', title: __('Operate'), table: table, events: Table.api.events.operate, formatter: Table.api.formatter.operate}
  63. ]
  64. ]
  65. });
  66. // 为表格绑定事件
  67. Table.api.bindevent(table);
  68. },
  69. recyclebin: function () {
  70. // 初始化表格参数配置
  71. Table.api.init({
  72. extend: {
  73. 'dragsort_url': ''
  74. }
  75. });
  76. var table = $("#table");
  77. // 初始化表格
  78. table.bootstrapTable({
  79. url: 'feedback/recyclebin' + location.search,
  80. pk: 'id',
  81. sortName: 'id',
  82. columns: [
  83. [
  84. {checkbox: true},
  85. {field: 'id', title: __('Id')},
  86. {
  87. field: 'deletetime',
  88. title: __('Deletetime'),
  89. operate: 'RANGE',
  90. addclass: 'datetimerange',
  91. formatter: Table.api.formatter.datetime
  92. },
  93. {
  94. field: 'operate',
  95. width: '140px',
  96. title: __('Operate'),
  97. table: table,
  98. events: Table.api.events.operate,
  99. buttons: [
  100. {
  101. name: 'Restore',
  102. text: __('Restore'),
  103. classname: 'btn btn-xs btn-info btn-ajax btn-restoreit',
  104. icon: 'fa fa-rotate-left',
  105. url: 'feedback/restore',
  106. refresh: true
  107. },
  108. {
  109. name: 'Destroy',
  110. text: __('Destroy'),
  111. classname: 'btn btn-xs btn-danger btn-ajax btn-destroyit',
  112. icon: 'fa fa-times',
  113. url: 'feedback/destroy',
  114. refresh: true
  115. }
  116. ],
  117. formatter: Table.api.formatter.operate
  118. }
  119. ]
  120. ]
  121. });
  122. // 为表格绑定事件
  123. Table.api.bindevent(table);
  124. },
  125. add: function () {
  126. Controller.api.bindevent();
  127. },
  128. edit: function () {
  129. Controller.api.bindevent();
  130. },
  131. api: {
  132. bindevent: function () {
  133. Form.api.bindevent($("form[role=form]"));
  134. },
  135. formatter: {
  136. type: function(value, row, index) {
  137. var type = feedbackTypeList[value] || value;
  138. var cssClass = '';
  139. // 根据不同类型设置不同的样式
  140. if (value === 'PRODUCT_FUNCTION_FEEDBACK') {
  141. cssClass = 'success'; // 绿色
  142. } else if (value === 'PRODUCT_BUG_FEEDBACK') {
  143. cssClass = 'danger'; // 红色
  144. } else if (value === 'OTHER_FEEDBACK') {
  145. cssClass = 'info'; // 蓝色
  146. }
  147. return '<span class="label label-' + cssClass + '">' + type + '</span>';
  148. },
  149. process_status: function(value, row, index) {
  150. var processStatus = processStatusList[value] || value;
  151. var cssClass = value == 1 ? 'warning' : 'success';
  152. return '<span class="label label-' + cssClass + '">' + processStatus + '</span>';
  153. }
  154. }
  155. }
  156. };
  157. return Controller;
  158. });