define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefined, Backend, Table, Form) { var Controller = { index: function () { // 初始化表格参数配置 Table.api.init({ extend: { index_url: 'wdsxh/article/article/index' + location.search, add_url: 'wdsxh/article/article/add', edit_url: 'wdsxh/article/article/edit', del_url: 'wdsxh/article/article/del', multi_url: 'wdsxh/article/article/multi', import_url: 'wdsxh/article/article/import', table: 'wdsxh_article', } }); var table = $("#table"); // 初始化表格 table.bootstrapTable({ url: $.fn.bootstrapTable.defaults.extend.index_url, pk: 'id', sortName: 'weigh', fixedColumns: true, fixedRightNumber: 1, columns: [ [ {checkbox: true}, {field: 'id', title: __('Id')}, {field: 'wdsxharticlecat.name', title: __('文章分类'), operate: false}, {field: 'title', title: __('Title'), operate: 'LIKE'}, {field: 'release', title: __('Release'), operate: 'LIKE'}, {field: 'image', title: __('Image'), operate: false, events: Table.api.events.image, formatter: Table.api.formatter.image}, {field: 'status', title: __('Status'), searchList: {"0":__('Status 0'),"1":__('Status 1')}, formatter: Table.api.formatter.status}, {field: 'weigh', title: __('Weigh'), operate: false}, {field: 'createtime', title: __('Createtime'), operate:'RANGE', addclass:'datetimerange', autocomplete:false, formatter: Table.api.formatter.datetime}, {field: 'operate', title: __('Operate'), table: table, events: Table.api.events.operate, formatter: Table.api.formatter.operate} ] ] }); table.on('post-body.bs.table', function (e, settings, json, xhr) { $(".btn-editone,.btn-edit,.btn-add").data("area", ["100%", "100%"]); }); // 为表格绑定事件 Table.api.bindevent(table); }, add: function () { Controller.api.bindevent(); }, edit: function () { Controller.api.bindevent(); }, api: { bindevent: function () { // 使用更精确的表单选择器 var $form = $("form#edit-form, form#add-form, form[role=form]"); // 先移除表单的默认提交行为,改为通过按钮点击处理 $form.attr('onsubmit', 'return false;'); Form.api.bindevent($form, { beforeSubmit: function (form) { var $filesInput = $('#c-files'); var $hidden = $('#c-filesjson'); if ($filesInput.length === 0 || $hidden.length === 0) return true; var urlsStr = $.trim($filesInput.val()); if (urlsStr === '') { $hidden.val(''); return true; } var urls = urlsStr.split(/\s*,\s*/); var namesJsonStr = ($("textarea[name='row[filesdata]']").val() || '').trim(); var namesData = []; try { namesData = namesJsonStr ? JSON.parse(namesJsonStr) : []; } catch (e) { namesData = []; } var arr = []; for (var i = 0; i < urls.length; i++) { var url = urls[i]; if (!url) continue; var name = ''; if (namesData[i] && namesData[i].name) { name = $.trim(namesData[i].name); } if (!name) { Toastr.error('附件名称不能为空'); return false; } arr.push({ url: url, name: name }); } $hidden.val(JSON.stringify(arr)); return true; } }); // 添加额外的表单提交验证 $form.on("submit", function (e) { console.log('表单提交事件触发'); // 添加调试日志 var $filesInput = $('#c-files'); if ($filesInput.length === 0) return true; var urlsStr = $.trim($filesInput.val()); if (urlsStr === '') return true; var urls = urlsStr.split(/\s*,\s*/); var namesJsonStr = ($("textarea[name='row[filesdata]']").val() || '').trim(); var namesData = []; try { namesData = namesJsonStr ? JSON.parse(namesJsonStr) : []; } catch (e) { namesData = []; } console.log('附件数量:', urls.length); // 添加调试日志 console.log('名称数据:', namesData); // 添加调试日志 for (var i = 0; i < urls.length; i++) { if (!(namesData[i] && $.trim(namesData[i].name))) { console.log('第', i+1, '个附件名称为空'); // 添加调试日志 Toastr.error('附件名称不能为空'); e.preventDefault(); e.stopImmediatePropagation(); // 添加更强制的方法阻止表单提交 if (e.cancelable !== false) { e.preventDefault(); } // 返回false并阻止事件冒泡 return false; } } return true; }); // 添加按钮点击事件作为主要的验证层 $form.find('button[type="submit"]').on('click', function (e) { console.log('提交按钮点击事件触发'); // 添加调试日志 var $filesInput = $('#c-files'); if ($filesInput.length === 0) { // 如果没有附件输入框,直接提交表单 console.log('没有附件输入框,直接提交表单'); return true; } var urlsStr = $.trim($filesInput.val()); if (urlsStr === '') { // 如果没有附件,直接提交表单 console.log('没有附件,直接提交表单'); return true; } var urls = urlsStr.split(/\s*,\s*/); var namesJsonStr = ($("textarea[name='row[filesdata]']").val() || '').trim(); var namesData = []; try { namesData = namesJsonStr ? JSON.parse(namesJsonStr) : []; } catch (e) { namesData = []; } console.log('按钮点击验证 - 附件数量:', urls.length); // 添加调试日志 console.log('按钮点击验证 - 名称数据:', namesData); // 添加调试日志 for (var i = 0; i < urls.length; i++) { if (!(namesData[i] && $.trim(namesData[i].name))) { console.log('按钮点击验证 - 第', i+1, '个附件名称为空'); // 添加调试日志 Toastr.error('附件名称不能为空'); e.preventDefault(); e.stopImmediatePropagation(); return false; } } // 验证通过,移除onsubmit属性并允许表单正常提交 console.log('验证通过,允许表单提交'); $form.removeAttr('onsubmit'); return true; }); $(document).on('change','input[name="row[type]"]',function (){ var type=$(this).val(); switch (type){ case "1": $('.linktext').addClass('hide'); $('.release').removeClass('hide'); $('.read_num').removeClass('hide'); $('.teletext').removeClass('hide'); $('.files').removeClass('hide'); break; case "2": $('.linktext').removeClass('hide'); $('.release').addClass('hide'); $('.read_num').addClass('hide'); $('.teletext').addClass('hide'); $('.files').addClass('hide'); break; } }); } } }; return Controller; });