179 lines
5.5 KiB
JavaScript
179 lines
5.5 KiB
JavaScript
define(['jquery', 'sent', 'validator'], function($, Sent, Validator){
|
|
var Form = {
|
|
events: {
|
|
validator: function (form, success, error, submit) {
|
|
if (!form.is("form")){
|
|
return;
|
|
}
|
|
//绑定表单事件
|
|
form.validator($.extend({
|
|
valid: function (ret) {
|
|
var that = this, submitBtn = $("button.submit-btn", form);
|
|
that.holdSubmit(true);
|
|
submitBtn.addClass("disabled");
|
|
//验证通过提交表单
|
|
var submitResult = Form.api.submit($(ret), function (data, ret) {
|
|
that.holdSubmit(false);
|
|
submitBtn.removeClass("disabled");
|
|
if (false === $(this).triggerHandler("success.form", [data, ret])) {
|
|
return false;
|
|
}
|
|
if (typeof success === 'function') {
|
|
if (false === success.call($(this), data, ret)) {
|
|
return false;
|
|
}
|
|
}
|
|
//提示及关闭当前窗口
|
|
var msg = ret.hasOwnProperty("msg") && ret.msg !== "" ? ret.msg : 'Operation completed';
|
|
parent.Toastr.success(msg);
|
|
parent.$(".btn-refresh").trigger("click");
|
|
var index = parent.Layer.getFrameIndex(window.name);
|
|
parent.Layer.close(index);
|
|
return false;
|
|
}, function(data, ret){
|
|
that.holdSubmit(false);
|
|
if (false === $(this).triggerHandler("error.form", [data, ret])) {
|
|
return false;
|
|
}
|
|
submitBtn.removeClass("disabled");
|
|
if (typeof error === 'function') {
|
|
if (false === error.call($(this), data, ret)) {
|
|
return false;
|
|
}
|
|
}
|
|
}, submit)
|
|
//如果提交失败则释放锁定
|
|
if (!submitResult) {
|
|
that.holdSubmit(false);
|
|
submitBtn.removeClass("disabled");
|
|
}
|
|
return false;
|
|
}
|
|
}, form.data("validator-options") || {}))
|
|
|
|
//移除提交按钮的disabled类
|
|
$(".layer-footer [type=submit],.fixed-footer [type=submit],.normal-footer [type=submit]", form).removeClass("disabled");
|
|
},
|
|
cxselect: function (form) {
|
|
//绑定cxselect元素事件
|
|
if ($("[data-toggle='cxselect']", form).size() > 0) {
|
|
require(['cxselect'], function () {
|
|
$.cxSelect.defaults.jsonName = 'name';
|
|
$.cxSelect.defaults.jsonValue = 'value';
|
|
$.cxSelect.defaults.jsonSpace = 'data';
|
|
$("[data-toggle='cxselect']", form).cxSelect();
|
|
});
|
|
}
|
|
},
|
|
switcher: function (form) {
|
|
form.on("click", "[data-toggle='switcher']", function () {
|
|
if ($(this).hasClass("disabled")) {
|
|
return false;
|
|
}
|
|
var input = $(this).prev("input");
|
|
input = $(this).data("input-id") ? $("#" + $(this).data("input-id")) : input;
|
|
if (input.size() > 0) {
|
|
var yes = $(this).data("yes");
|
|
var no = $(this).data("no");
|
|
if (input.val() == yes) {
|
|
input.val(no);
|
|
$("i", this).addClass("fa-flip-horizontal text-gray");
|
|
} else {
|
|
input.val(yes);
|
|
$("i", this).removeClass("fa-flip-horizontal text-gray");
|
|
}
|
|
input.trigger('change');
|
|
}
|
|
return false;
|
|
});
|
|
},
|
|
bindevent: function (form) {
|
|
|
|
},
|
|
},
|
|
api:{
|
|
submit: function (form, success, error, submit) {
|
|
if (form.size() === 0) {
|
|
Toastr.error("表单未初始化完成,无法提交");
|
|
return false;
|
|
}
|
|
if (typeof submit === 'function') {
|
|
if (false === submit.call(form, success, error)) {
|
|
return false;
|
|
}
|
|
}
|
|
var type = form.attr("method") ? form.attr("method").toUpperCase() : 'GET';
|
|
type = type && (type === 'GET' || type === 'POST') ? type : 'GET';
|
|
url = form.attr("action");
|
|
url = url ? url : location.href;
|
|
//修复当存在多选项元素时提交的BUG
|
|
var params = {};
|
|
var multipleList = $("[name$='[]']", form);
|
|
if (multipleList.size() > 0) {
|
|
var postFields = form.serializeArray().map(function (obj) {
|
|
return $(obj).prop("name");
|
|
});
|
|
$.each(multipleList, function (i, j) {
|
|
if (postFields.indexOf($(this).prop("name")) < 0) {
|
|
params[$(this).prop("name")] = '';
|
|
}
|
|
});
|
|
}
|
|
//调用Ajax请求方法
|
|
Sent.api.ajax({
|
|
type: type,
|
|
url: url,
|
|
data: form.serialize() + (Object.keys(params).length > 0 ? '&' + $.param(params) : ''),
|
|
dataType: 'json',
|
|
complete: function (xhr) {
|
|
var token = xhr.getResponseHeader('__token__');
|
|
if (token) {
|
|
$("input[name='__token__']", form).val(token);
|
|
}
|
|
}
|
|
}, function (data, ret) {
|
|
$('.form-group', form).removeClass('has-feedback has-success has-error');
|
|
if (data && typeof data === 'object') {
|
|
//刷新客户端token
|
|
if (typeof data.token !== 'undefined') {
|
|
$("input[name='__token__']", form).val(data.token);
|
|
}
|
|
//调用客户端事件
|
|
if (typeof data.callback !== 'undefined' && typeof data.callback === 'function') {
|
|
data.callback.call(form, data);
|
|
}
|
|
}
|
|
if (typeof success === 'function') {
|
|
if (false === success.call(form, data, ret)) {
|
|
return false;
|
|
}
|
|
}
|
|
}, function (data, ret) {
|
|
if (data && typeof data === 'object' && typeof data.token !== 'undefined') {
|
|
$("input[name='__token__']", form).val(data.token);
|
|
}
|
|
if (typeof error === 'function') {
|
|
if (false === error.call(form, data, ret)) {
|
|
return false;
|
|
}
|
|
}
|
|
});
|
|
return true;
|
|
},
|
|
bindevent: function (form, success, error, submit) {
|
|
form = typeof form === 'object' ? form : $(form);
|
|
|
|
var events = Form.events;
|
|
|
|
events.bindevent(form);
|
|
|
|
events.validator(form, success, error, submit);
|
|
|
|
events.cxselect(form);
|
|
events.switcher(form);
|
|
}
|
|
}
|
|
}
|
|
|
|
return Form;
|
|
}) |