123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- (function (Dcat) {
- class Action {
- constructor(options) {
- this.options = $.extend({
- selector: null, // 按钮选择器
- event: 'click',
- method: 'POST',
- key: null, // 行主键
- url: null,
- data: {}, // 发送到接口的附加参数
- confirm: null,
- calledClass: null,
- before: function (data, target) {}, // 发起请求之前回调,返回false可以中断请求
- html: function (target, html, data) { // 处理返回的HTML代码
- target.html(html);
- },
- success: function (target, results) {}, // 请求成功回调,返回false可以中断默认的成功处理逻辑
- error: function (target, results) {}, // 请求出错回调,返回false可以中断默认的错误处理逻辑
- }, options);
- this.init();
- }
- init() {
- let _this = this, options = _this.options;
- $(options.selector).off(options.event).on(options.event, function (e) {
- let data = $(this).data(),
- target = $(this);
- if (target.attr('loading') > 0) {
- return;
- }
- if (options.before(data, target, _this) === false) {
- return;
- }
- // 发起请求
- function request() {
- target.attr('loading', 1);
- Object.assign(data, options.data);
- _this.promise(target, data).then(_this.resolve()).catch(_this.reject());
- }
- var conform = options.confirm;
- if (conform) {
- Dcat.confirm(conform[0], conform[1], request);
- } else {
- request()
- }
- });
- }
- resolve() {
- let _this = this, options = _this.options;
- return function (result) {
- var response = result[0],
- target = result[1];
- if (options.success(target, response) === false) {
- return;
- }
- Dcat.handleJsonResponse(response, {html: options.html, target: target});
- };
- }
- reject() {
- let options = this.options;
- return function (result) {
- var request = result[0], target = result[1];
- if (options.success(target, request) === false) {
- return;
- }
- if (request && typeof request.responseJSON === 'object') {
- Dcat.error(request.responseJSON.message)
- }
- console.error(result);
- }
- }
- promise(target, data) {
- let options = this.options;
- return new Promise(function (resolve, reject) {
- Object.assign(data, {
- _action: options.calledClass,
- _key: options.key,
- });
- Dcat.NP.start();
- $.ajax({
- method: options.method,
- url: options.url,
- data: data,
- success: function (data) {
- target.attr('loading', 0);
- Dcat.NP.done();
- resolve([data, target]);
- },
- error:function(request){
- target.attr('loading', 0);
- Dcat.NP.done();
- reject([request, target]);
- }
- });
- });
- }
- }
- Dcat.Action = function (opts) {
- return new Action(opts);
- };
- })(Dcat);
|