196 lines
9.8 KiB
JavaScript
196 lines
9.8 KiB
JavaScript
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;
|
||
});
|