maintenance.js 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390
  1. define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefined, Backend, Table, Form) {
  2. var Controller = {
  3. index: function () {
  4. // 初始化表格参数配置
  5. Table.api.init({
  6. extend: {
  7. index_url: 'equipment/maintenance/index' + location.search,
  8. add_url: 'equipment/maintenance/add',
  9. table: 'equipment_maintenance',
  10. deactivated_url: 'equipment/maintenance/deactivated',
  11. }
  12. });
  13. var table = $("#table");
  14. // 初始化表格
  15. table.bootstrapTable({
  16. url: $.fn.bootstrapTable.defaults.extend.index_url,
  17. pk: 'id',
  18. sortName: 'id',
  19. fixedColumns: true,
  20. fixedRightNumber: 1,
  21. columns: [
  22. [
  23. {field: 'id', title: __('Id'), align: 'center', operate: false},
  24. {field: 'name', title: __('Name'), operate: 'LIKE'},
  25. {field: 'plan_archives', title: __('ArchiveRange'), operate: false, formatter: function (value) {
  26. var string = '';
  27. value.map(function (item) {
  28. string += '[' + item.archive.model + '] ' + item.archive.name + '<br>';
  29. });
  30. return string.slice(0, string.length-1);
  31. }},
  32. {
  33. field: 'plan_fields', title: __('FieldName'), operate: false, table: table, buttons: [
  34. {
  35. name: 'fields',
  36. text: function (row) {
  37. return row.plan_fields.length + ' 个保养项';
  38. },
  39. title: __('FieldName'),
  40. extend: 'data-area=\'["900px", "600px"]\'',
  41. classname: 'btn-dialog',
  42. url: 'equipment/plan_field/fields?ids={id}'
  43. },
  44. ],
  45. formatter: Table.api.formatter.buttons
  46. },
  47. {field: 'first_duetime', title: __('First_duetime'), operate: 'RANGE', addclass: 'datetimerange', formatter: Table.api.formatter.datetime, datetimeFormat:"YYYY年MM月DD日"},
  48. {field: 'last_duetime', title: __('Last_duetime'), operate: 'RANGE', addclass: 'datetimerange', formatter: Table.api.formatter.datetime, datetimeFormat:"YYYY年MM月DD日"},
  49. {field: 'periodicity', title: __('Periodicity'), operate: false, formatter: function (value) {return value + ' 天一次';}},
  50. {field: 'plan_users', title: __('PlanUser'), operate: false, formatter: function (value) {
  51. var string = '';
  52. value.map(function (item) {
  53. string += item.user.nickname + ',';
  54. });
  55. return string.slice(0, string.length-1);
  56. }},
  57. {field: 'operate', title: __('Operate'), table: table,
  58. buttons: [
  59. {
  60. name: 'stop',
  61. text: __('Stop'),
  62. title: __('Stop'),
  63. confirm: __('After deactivating the plan, the task for the next cycle is no longer valid, is deactivation confirmed?'),
  64. classname: 'btn btn-xs btn-danger btn-ajax',
  65. url: 'equipment/plan/stop',
  66. refresh: true
  67. },
  68. {
  69. name: 'archives',
  70. text: __('Equipment Details'),
  71. title: __('Equipment Details'),
  72. extend: 'data-area=\'["900px", "600px"]\'',
  73. classname: 'btn btn-xs btn-info btn-dialog',
  74. url: 'equipment/plan/list?ids={id}'
  75. },
  76. {
  77. name: 'list',
  78. text: __('Maintenance record details'),
  79. title: __('Maintenance record details'),
  80. extend: 'data-area=\'["900px", "600px"]\'',
  81. classname: 'btn btn-xs btn-primary btn-dialog',
  82. url: 'equipment/record/list?type=maintenance'
  83. }
  84. ],
  85. events: Table.api.events.operate, formatter: Table.api.formatter.operate
  86. }
  87. ]
  88. ],
  89. search: false
  90. });
  91. // 已停用计划弹窗
  92. $(document).on("click", ".btn-deactivated", function () {
  93. Fast.api.open('equipment/maintenance/deactivated', __('Deactivated'), {
  94. area: ["100%", "100%"],
  95. });
  96. });
  97. // 清理无效任务
  98. $(document).on("click", ".btn-clear-invalid-task", function () {
  99. Layer.confirm("确认清理无效任务?", function(){
  100. Layer.closeAll("dialog");
  101. Fast.api.ajax("equipment/plan/clearInvalidTask");
  102. });
  103. });
  104. // 为表格绑定事件
  105. Table.api.bindevent(table);
  106. },
  107. deactivated: function () {
  108. // 初始化表格参数配置
  109. Table.api.init({
  110. extend: {
  111. index_url: 'equipment/maintenance/deactivated' + location.search,
  112. table: 'equipment_maintenance',
  113. }
  114. });
  115. var table = $("#table");
  116. // 初始化表格
  117. table.bootstrapTable({
  118. url: $.fn.bootstrapTable.defaults.extend.index_url,
  119. pk: 'id',
  120. sortName: 'id',
  121. fixedColumns: true,
  122. fixedRightNumber: 1,
  123. columns: [
  124. [
  125. {field: 'id', title: __('Id'), align: 'center', operate: false},
  126. {field: 'name', title: __('Name'), operate: 'LIKE'},
  127. {field: 'plan_archives', title: __('ArchiveRange'), operate: false, formatter: function (value) {
  128. var string = '';
  129. value.map(function (item) {
  130. string += '[' + item.archive.model + '] ' + item.archive.name + '<br>';
  131. });
  132. return string.slice(0, string.length-1);
  133. }},
  134. {
  135. field: 'plan_fields', title: __('FieldName'), operate: false, table: table, buttons: [
  136. {
  137. name: 'fields',
  138. text: function (row) {
  139. return row.plan_fields.length + ' 个保养项';
  140. },
  141. title: __('FieldName'),
  142. extend: 'data-area=\'["900px", "600px"]\'',
  143. classname: 'btn-dialog',
  144. url: 'equipment/plan_field/fields?ids={id}'
  145. },
  146. ],
  147. formatter: Table.api.formatter.buttons
  148. },
  149. {field: 'first_duetime', title: __('First_duetime'), operate: 'RANGE', addclass: 'datetimerange', formatter: Table.api.formatter.datetime, datetimeFormat:"YYYY年MM月DD日"},
  150. {field: 'last_duetime', title: __('Last_duetime'), operate: 'RANGE', addclass: 'datetimerange', formatter: Table.api.formatter.datetime, datetimeFormat:"YYYY年MM月DD日"},
  151. {field: 'periodicity', title: __('Periodicity'), operate: false, formatter: function (value) {return value + ' 天一次';}},
  152. {field: 'plan_users', title: __('PlanUser'), operate: false, formatter: function (value) {
  153. var string = '';
  154. value.map(function (item) {
  155. string += item.user.nickname + ',';
  156. });
  157. return string.slice(0, string.length-1);
  158. }},
  159. {field: 'deletetime', title: __('StopTime'), operate: 'RANGE', addclass: 'datetimerange', formatter: Table.api.formatter.datetime, datetimeFormat:"YYYY年MM月DD日 HH:mm"},
  160. {field: 'operate', title: __('Operate'), table: table,
  161. buttons: [
  162. {
  163. name: 'archives',
  164. text: __('Equipment Details'),
  165. title: __('Equipment Details'),
  166. extend: 'data-area=\'["900px", "600px"]\'',
  167. classname: 'btn btn-xs btn-info btn-dialog',
  168. url: 'equipment/plan/list?ids={id}'
  169. },
  170. {
  171. name: 'list',
  172. text: __('Maintenance record details'),
  173. title: __('Maintenance record details'),
  174. extend: 'data-area=\'["900px", "600px"]\'',
  175. classname: 'btn btn-xs btn-primary btn-dialog',
  176. url: 'equipment/record/list?type=maintenance'
  177. }
  178. ],
  179. events: Table.api.events.operate, formatter: Table.api.formatter.operate
  180. }
  181. ]
  182. ],
  183. search: false
  184. });
  185. // 为表格绑定事件
  186. Table.api.bindevent(table);
  187. },
  188. recyclebin: function () {
  189. // 初始化表格参数配置
  190. Table.api.init({
  191. extend: {
  192. 'dragsort_url': ''
  193. }
  194. });
  195. var table = $("#table");
  196. // 初始化表格
  197. table.bootstrapTable({
  198. url: 'equipment/maintenance/recyclebin' + location.search,
  199. pk: 'id',
  200. sortName: 'id',
  201. columns: [
  202. [
  203. {checkbox: true},
  204. {field: 'id', title: __('Id')},
  205. {field: 'name', title: __('Name'), align: 'left'},
  206. {
  207. field: 'deletetime',
  208. title: __('Deletetime'),
  209. operate: 'RANGE',
  210. addclass: 'datetimerange',
  211. formatter: Table.api.formatter.datetime
  212. },
  213. {
  214. field: 'operate',
  215. width: '130px',
  216. title: __('Operate'),
  217. table: table,
  218. events: Table.api.events.operate,
  219. buttons: [
  220. {
  221. name: 'Restore',
  222. text: __('Restore'),
  223. classname: 'btn btn-xs btn-info btn-ajax btn-restoreit',
  224. icon: 'fa fa-rotate-left',
  225. url: 'equipment/maintenance/restore',
  226. refresh: true
  227. },
  228. {
  229. name: 'Destroy',
  230. text: __('Destroy'),
  231. classname: 'btn btn-xs btn-danger btn-ajax btn-destroyit',
  232. icon: 'fa fa-times',
  233. url: 'equipment/maintenance/destroy',
  234. refresh: true
  235. }
  236. ],
  237. formatter: Table.api.formatter.operate
  238. }
  239. ]
  240. ]
  241. });
  242. // 为表格绑定事件
  243. Table.api.bindevent(table);
  244. },
  245. add: function () {
  246. function updatePlanField(type, index, value) {
  247. var fields = $("#c-plan_fields").val();
  248. if(fields.length === 0) {
  249. fields = [];
  250. } else {
  251. fields = JSON.parse(fields);
  252. }
  253. if(type === 'add') {
  254. fields.push(value);
  255. }
  256. if(type === 'edit') {
  257. fields.splice(index, 1, value);
  258. }
  259. if(type === 'delete') {
  260. fields.splice(index, 1);
  261. }
  262. $("#c-plan_fields").val(JSON.stringify(fields));
  263. }
  264. function editField(row, data) {
  265. var url = 'equipment/plan_field/edit?';
  266. var value = '';
  267. for (var key in data) {
  268. if (key === 'type_text') {
  269. continue;
  270. }
  271. value = data[key];
  272. if (Array.isArray(value)) {
  273. value = value.join("==");
  274. }
  275. url += key + '=' + encodeURI(value) + '&';
  276. }
  277. url = url.substr(0, url.length - 1);
  278. var options = {
  279. shadeClose: false,
  280. shade: [0.3, '#393D49'],
  281. area: ['500px', '600px'],
  282. callback: function(value){
  283. updatePlanField('edit', row.rowIndex, value);
  284. $('#field-table').bootstrapTable('updateRow', {index: row.rowIndex, row: value});
  285. }
  286. };
  287. parent.Fast.api.open(url, __('EditField'), options);
  288. }
  289. function deleteField(row, data) {
  290. Layer.confirm(
  291. __('This operation will delete the maintenance item, whether to continue?'),
  292. {icon: 3, title: __('Warning'), shadeClose: true, btn: [__('OK'), __('Cancel')]},
  293. function (index) {
  294. updatePlanField('delete', row.rowIndex, []);
  295. $('#field-table').bootstrapTable('removeByUniqueId', data.id);
  296. Layer.close(index);
  297. }
  298. );
  299. }
  300. var fieldTable = $("#field-table");
  301. fieldTable.bootstrapTable({
  302. uniqueId: 'id',
  303. columns: [{
  304. field: 'label',
  305. title: __('FieldName')
  306. }, {
  307. field: 'type_text',
  308. title: __('FieldType'),
  309. formatter: Table.api.formatter.label
  310. }, {
  311. field: 'default',
  312. title: __('FieldDefault')
  313. }, {
  314. field: 'require',
  315. title: __('FieldRequire'),
  316. searchList: {"0":__('NotRequire'), "1":__('IsRequire')},
  317. formatter: Table.api.formatter.status
  318. }, {
  319. field: 'operate',
  320. title: __('Operate'),
  321. table: fieldTable,
  322. buttons: [
  323. {
  324. name: 'edit',
  325. icon: 'fa fa-pencil',
  326. title: __('Edit'),
  327. classname: 'btn btn-xs btn-success btn-click',
  328. click: function(row, data) {
  329. editField(row, data);
  330. },
  331. },
  332. {
  333. name: 'delete',
  334. icon: 'fa fa-trash',
  335. title: __('Del'),
  336. classname: 'btn btn-xs btn-danger btn-click',
  337. click: function(row, data) {
  338. deleteField(row, data);
  339. },
  340. }
  341. ],
  342. formatter: Table.api.formatter.buttons
  343. }]
  344. });
  345. $(document).on("click", ".add-field", function () {
  346. var options = {
  347. shadeClose: false,
  348. shade: [0.3, '#393D49'],
  349. area: ['500px', '600px'],
  350. callback: function(value){
  351. updatePlanField('add', 0, value);
  352. $('#field-table').bootstrapTable('append', value);
  353. }
  354. };
  355. parent.Fast.api.open('equipment/plan_field/add', __('AddField'), options);
  356. });
  357. Controller.api.bindevent();
  358. },
  359. edit: function () {
  360. Controller.api.bindevent();
  361. },
  362. api: {
  363. bindevent: function () {
  364. Form.api.bindevent($("form[role=form]"));
  365. }
  366. },
  367. };
  368. return Controller;
  369. });