2022-06-23 17:29:32 +08:00

73 lines
2.4 KiB
JavaScript

import Ember from 'ember';
import Service from '@ember/service';
import $ from 'jquery'
import { Promise } from 'rsvp';
import { dasherize } from '@ember/string';
import { run } from '@ember/runloop';
import { typeOf } from '@ember/utils';
export default Service.extend({
list(modelName, start, limit, params) {
var p = {
start: start,
limit: limit
};
if ($.type(params) === 'string') {
p.search = params;
}
else {
$.extend(true, p, params);
}
return this.ajaxGet(this._pathForType(modelName, '/list'), p);
},
find(modelName, params) {
return this.ajaxGet(this._pathForType(modelName, '/find'), params);
},
count(modelName) {
return this.ajaxGet(this._pathForType(modelName, '/count'));
},
create(modelName, model) {
return this.ajaxPost(this._pathForType(modelName, '/create'), model);
},
update(modelName, model) {
return this.ajaxPost(this._pathForType(modelName, '/update'), model);
},
del(modelName, model) {
return this.ajaxPost(this._pathForType(modelName, '/delete'), model);
},
modelAjaxGet: function(modelName, path, params) {
return this.ajaxGet(this._pathForType(modelName, path), params);
},
modelAjaxPost(modelName, path, params) {
return this.ajaxPost(this._pathForType(modelName, path), params);
},
ajaxGet(url, params) {
return this._ajax_request('doGet', url, params);
},
ajaxPost(url, params) {
return this._ajax_request('doPost', url, params);
},
_ajax_request(method, url, params) {
let me = this;
return new Promise((resolve, reject) => {
const paramsType = typeOf(params);
me.ajax[method ? method : 'doGet'](url,
paramsType === 'string' ||
paramsType === 'number' ?
{id: params} : params,
(data) => {
run(null, resolve, data);
}, (msg, r) => {
reject(msg);
me.dialog.error(msg || 'Ajax request erorr caused');
});
}, 'Ambition: Store#ajax request [' + url + ']');
},
_pathForType(modelName, path) {
return (/^[a-zA-Z_][a-zA-Z0-9_]+$/.test(modelName) ?
dasherize(modelName) : modelName) +
(/^\//.test(path) ? path : '/' + path);
}
});