table_layouts.blade.php 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. @extends('admin.layouts')
  2. @section('css')
  3. <link href="/assets/global/vendor/bootstrap-table/bootstrap-table.min.css" rel="stylesheet">
  4. <link href="/assets/global/vendor/bootstrap-select/bootstrap-select.min.css" rel="stylesheet">
  5. <style>
  6. #swal2-content {
  7. display: grid !important;
  8. }
  9. .table a {
  10. text-decoration: none;
  11. }
  12. .table .th-inner a {
  13. color: #76838f;
  14. }
  15. </style>
  16. @stack('css')
  17. @endsection
  18. @section('javascript')
  19. <script src="/assets/global/vendor/bootstrap-table/bootstrap-table.min.js"></script>
  20. <script src="/assets/global/vendor/bootstrap-table/extensions/mobile/bootstrap-table-mobile.min.js"></script>
  21. <script src="/assets/global/vendor/bootstrap-select/bootstrap-select.min.js"></script>
  22. <script src="/assets/global/js/Plugin/bootstrap-select.js"></script>
  23. <script>
  24. $("form:not(.modal-body form)").on("submit", function() {
  25. $(this).find("input:not([type=\"submit\"]), select").filter(function() {
  26. return this.value === "";
  27. }).prop("disabled", true);
  28. setTimeout(function() {
  29. $(this).find(":disabled").prop("disabled", false);
  30. }, 0);
  31. });
  32. $("select").not(".modal-body select").on("change", function() {
  33. $(this).closest("form").trigger("submit");
  34. });
  35. function autoInitSelectpickers() {
  36. $('select[data-plugin="selectpicker"]').each(function() {
  37. const $select = $(this);
  38. const fieldName = $select.attr('name').replace('[]', ''); // 处理多选字段
  39. const queryValue = getUrlParameter(fieldName);
  40. if (queryValue) {
  41. $select.selectpicker("val", queryValue);
  42. }
  43. });
  44. }
  45. // 获取 URL 参数的辅助函数
  46. function getUrlParameter(name) {
  47. const urlParams = new URLSearchParams(window.location.search);
  48. return urlParams.get(name);
  49. }
  50. $(document).ready(function() {
  51. autoInitSelectpickers();
  52. });
  53. // 使用事件委托处理所有删除按钮点击
  54. document.addEventListener('click', function(e) {
  55. // 检查被点击的元素是否是删除按钮或包含在删除按钮内
  56. const deleteButton = e.target.closest('[data-action="delete"]');
  57. if (deleteButton) {
  58. e.preventDefault();
  59. // 查找包含 data-delete-config 的最近父元素
  60. const container = deleteButton.closest('[data-delete-config]');
  61. if (!container) {
  62. console.error('Delete button must be inside an element with data-delete-config attribute');
  63. return;
  64. }
  65. try {
  66. // 解析配置(处理HTML转义字符)
  67. const configStr = container.getAttribute('data-delete-config');
  68. const config = JSON.parse(configStr);
  69. // 获取 ID 和名称(优先使用手动指定的值,否则从表格中自动获取)
  70. const id = deleteButton.getAttribute('data-id') || getCellValue(deleteButton, config.idColumn || 0);
  71. const name = deleteButton.getAttribute('data-name') || getCellValue(deleteButton, config.nameColumn || 1);
  72. const attribute = deleteButton.getAttribute('data-attribute') || config.attribute;
  73. // 验证必要参数
  74. if (!id || !name) {
  75. console.error('No ID/name found for delete action');
  76. return;
  77. }
  78. // 构建 URL 并执行删除
  79. const url = config.url.replace('PLACEHOLDER', id);
  80. confirmDelete(url, name, attribute, config.options || {});
  81. } catch (error) {
  82. console.error('Error processing delete action:', error);
  83. }
  84. }
  85. });
  86. // 获取表格单元格值的辅助函数
  87. function getCellValue(button, columnIndex) {
  88. const row = button.closest('tr');
  89. if (!row) return null;
  90. const cells = row.querySelectorAll('td');
  91. if (cells.length <= columnIndex) return null;
  92. const cell = cells[columnIndex];
  93. // 首先检查单元格内是否有输入元素
  94. const input = cell.querySelector('input, select, textarea');
  95. return input ? input.value.trim() : cell.textContent.trim();
  96. }
  97. </script>
  98. @stack('javascript')
  99. @endsection