my_dict_list.js 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. import { Grid, h } from "../../node_modules/gridjs/dist/gridjs.module.js";
  2. export var _rowSelected = new Array();
  3. const grid = new gridjs.Grid({
  4. sort: {
  5. multiColumn: false,
  6. server: {
  7. url: (prev, columns) => {
  8. if (!columns.length) return prev;
  9. const col = columns[0];
  10. const dir = col.direction === 1 ? 'asc' : 'desc';
  11. let colName = ['Sel','id','guid', 'word','word_en','meaning','other_meaning','updated_at'][col.index];
  12. return `${prev}&order=${colName}&dir=${dir}`;
  13. }
  14. }
  15. },
  16. columns: [
  17. {
  18. name: 'Sel',
  19. hidden: false,
  20. sort: false,
  21. formatter: (cell, row) => {
  22. return h('input', {
  23. type:'checkbox',
  24. className: 'py-2 mb-4 px-4 border',
  25. id:"cb-"+row.cells[1].data,
  26. onClick: () =>{
  27. let id = row.cells[1].data;
  28. if(document.querySelector("#cb-"+id).checked){
  29. _rowSelected.push(id);
  30. console.log("checked",_rowSelected);
  31. }else{
  32. _rowSelected.splice(_rowSelected.findIndex(item => item ===id),1);
  33. console.log("remove",_rowSelected);
  34. }
  35. }
  36. }, '');
  37. }
  38. },
  39. {
  40. name: 'id',
  41. hidden: true
  42. },
  43. {
  44. name: 'guid',
  45. hidden: true
  46. },
  47. 'word',
  48. {
  49. name:'word_en',
  50. sort: false,
  51. hidden: true
  52. },
  53. {
  54. name:'meaning',
  55. sort: false,
  56. },
  57. {
  58. name:'other_meaning',
  59. sort: false,
  60. },
  61. 'updated_at',
  62. {
  63. name: 'Actions',
  64. sort: false,
  65. hidden:false,
  66. formatter: (cell, row) => {
  67. return h('button', {
  68. className: 'py-2 mb-4 px-4 border rounded-md text-white bg-blue-600',
  69. onClick: () =>{
  70. let id = row.cells[2].data;
  71. term_edit_dlg_open(id);
  72. }
  73. }, 'Edit');
  74. }
  75. }
  76. ],
  77. server: {
  78. url: '/api/v2/terms?view=user',
  79. then: data => data.data.rows.map(card => [null,card.id,card.guid,card.word, card.word_en, card.meaning, card.other_meaning, card.updated_at,null]),
  80. total: data => data.data.count
  81. },
  82. pagination: {
  83. enabled: true,
  84. limit:30,
  85. server: {
  86. url: (prev, page, limit) => `${prev}&limit=${limit}&offset=${page * limit}`
  87. }
  88. },
  89. search: {
  90. server: {
  91. url: (prev, keyword) => `${prev}&search=${keyword}`
  92. }
  93. },
  94. resizable: true,
  95. }).render(document.getElementById("userfilelist"));
  96. //grid.on('rowClick', (...args) => console.log('row: ' + JSON.stringify(args), args));
  97. //grid.on('cellClick', (...args) => console.log(cell,args));
  98. document.querySelector("#to_recycle").onclick = function(){
  99. if(_rowSelected.length>0){
  100. if(confirm(`删除${_rowSelected.length}个单词,此操作不能恢复。`)){
  101. $.ajax(
  102. {
  103. url: "/api/v2/terms/0",
  104. type: 'DELETE',
  105. data: {
  106. id:JSON.stringify(_rowSelected),
  107. "_token": 'token',
  108. },
  109. success: function (response){
  110. if(response.ok){
  111. grid.forceRender();
  112. alert('delete ' + response.data + 'word ok');
  113. }else{
  114. alert(`delete error `+response.message);
  115. }
  116. },
  117. error: function (error) {
  118. console.log(error);
  119. }
  120. });
  121. }
  122. }
  123. }