提交 59b4e4d1 编写于 作者: WodahsOrez's avatar WodahsOrez

update: 服务

上级 35c2d194
......@@ -9,17 +9,20 @@
"dependencies": {
"@ant-design/icons-vue": "^6.0.1",
"ant-design-vue": "^3.0.0-alpha.14",
"axios": "^0.24.0",
"element-plus": "^1.2.0-beta.6",
"font-awesome": "^4.7.0",
"qs": "^6.10.2",
"qx-util": "^0.0.10",
"ramda": "^0.27.1",
"rxjs": "^7.4.0",
"vue": "^3.2.23",
"vue-router": "^4.0.12",
"vue-global-api": "^0.4.1"
"vue-global-api": "^0.4.1",
"vue-router": "^4.0.12"
},
"devDependencies": {
"@types/node": "^16.11.12",
"@types/qs": "^6.9.7",
"@types/ramda": "^0.27.60",
"@types/sass": "^1.43.1",
"@vitejs/plugin-vue": "^1.10.2",
......
import { Http } from '@ibiz-core';
/**
* 实体服务基类
* @export
......@@ -5,7 +6,12 @@
*/
export class EntityService{
// TODO
constructor(opts?: any) {
}
protected http = Http.getInstance();
// TODO
public GET(){}
}
\ No newline at end of file
export * from './util';
export * from './view-util';
\ No newline at end of file
export * from './view-util';
export { Http } from './net/http';
\ No newline at end of file
import { hasValue } from '@ibiz-core';
import axios from 'axios';
import qs from 'qs';
import { Subject } from 'rxjs';
/**
* Http net 对象
* 调用 getInstance() 获取实例
*
* @class Http
*/
export class Http {
/**
* 单例变量声明
*
* @private
* @static
* @type {Http}
* @memberof Http
*/
private static Http: Http;
/**
* 获取 Http 单例对象
*
* @static
* @returns {Http}
* @memberof Http
*/
public static getInstance(): Http {
if (!Http.Http) {
Http.Http = new Http();
}
return this.Http;
}
/**
* Creates an instance of Http.
* 私有构造,拒绝通过 new 创建对象
*
* @memberof Http
*/
private constructor() { }
/**
* 网络请求对象
*
* @memberof Http
*/
public static getHttp() {
return axios;
}
/**
* 统计加载
*
* @type {number}
* @memberof Http
*/
private loadingCount: number = 0;
/**
* 数据传递对象
*
* @type {Subject}
* @memberof Http
*/
private subject: Subject<any> = new Subject<any>();
/**
* post请求
*
* @param {string} url
* @param {*} [params={}]
* @param {boolean} [isloading]
* @returns {Promise<any>}
* @memberof Http
*/
public post(url: string, params: any = {}, isloading?: boolean): Promise<any> {
params = this.handleRequestData(params);
// url = this.handleAppParam(url, params);
return new Promise((resolve: any, reject: any) => {
axios({
method: 'post',
url: url,
data: params,
headers: { 'Content-Type': 'application/json;charset=UTF-8', Accept: 'application/json' },
})
.then((response: any) => {
this.doResponseResult(response, resolve);
})
.catch((response: any) => {
this.doResponseResult(response, reject);
});
});
}
/**
* 获取
*
* @param {string} url
* @param {*} [params={}]
* @param {boolean} [isloading]
* @param {number} [serialnumber]
* @returns {Promise<any>}
* @memberof Http
*/
public get(url: string, params: any = {}, isloading?: boolean): Promise<any> {
params = this.handleRequestData(params);
if (params.srfparentdata) {
Object.assign(params, params.srfparentdata);
delete params.srfparentdata;
}
if (Object.keys(params).length > 0) {
let tempParam: any = {};
Object.keys(params).forEach((item: any) => {
if (params[item] || Object.is(params[item], 0)) {
tempParam[item] = params[item];
}
});
url += `?${qs.stringify(tempParam)}`;
}
return new Promise((resolve: any, reject: any) => {
axios
.get(url)
.then((response: any) => {
this.doResponseResult(response, resolve);
})
.catch((response: any) => {
this.doResponseResult(response, reject);
});
});
}
/**
* 获取模型
*
* @param {string} url
* @param {*} [headers={}]
* @returns {Promise<any>}
* @memberof Http
*/
public getModel(url: string, headers: any = {}): Promise<any> {
return new Promise((resolve: any, reject: any) => {
axios
.get(url, {
headers: headers
})
.then((response: any) => {
this.doResponseResult(response, resolve);
})
.catch((response: any) => {
this.doResponseResult(response, reject);
});
});
}
/**
* 删除
*
* @param {string} url
* @param {boolean} [isloading]
* @returns {Promise<any>}
* @memberof Http
*/
public delete(url: string, isloading?: boolean, params?: any): Promise<any> {
return new Promise((resolve: any, reject: any) => {
url = this.handleAppParam(url, params);
if (!params) {
axios
.delete(url)
.then((response: any) => {
this.doResponseResult(response, resolve);
})
.catch((response: any) => {
this.doResponseResult(response, reject);
});
} else {
axios
.delete(url, { data: params })
.then((response: any) => {
this.doResponseResult(response, resolve);
})
.catch((response: any) => {
this.doResponseResult(response, reject);
});
}
});
}
/**
* 修改数据
*
* @param {string} url
* @param {*} data
* @param {boolean} [isloading]
* @param {number} [serialnumber]
* @returns {Promise<any>}
* @memberof Http
*/
public put(url: string, params: any, isloading?: boolean): Promise<any> {
params = this.handleRequestData(params);
// url = this.handleAppParam(url, params);
return new Promise((resolve: any, reject: any) => {
axios
.put(url, params)
.then((response: any) => {
this.doResponseResult(response, resolve);
})
.catch((response: any) => {
this.doResponseResult(response, reject);
});
});
}
/**
* 处理响应结果
*
* @private
* @param {*} response
* @param {Function} fn
* @param {boolean} [isloading]
* @memberof Http
*/
private doResponseResult(response: any, fn: Function): void {
if (response.status === 200) {
response.ok = true;
}
fn(response);
}
/**
* 处理请求数据
*
* @private
* @param data
* @memberof Http
*/
private handleRequestData(data: any) {
if (data.srfsessionkey) {
delete data.srfsessionkey;
}
if (data.srfsessionid) {
delete data.srfsessionid;
}
return data;
}
/**
* 处理系统级数据(以srf开始的字段)
*
* @private
* @param url 原始路径
* @param params 原始参数
* @memberof Http
*/
private handleAppParam(url: string, params: any): string {
if (params && (Object.keys(params).length > 0)) {
let tempParam: any = {};
Object.keys(params).forEach((item: string) => {
if (item.startsWith('srf') && hasValue(params[item])) {
tempParam[item] = params[item];
}
});
// 过滤前端标识属性
if (tempParam && Object.is(tempParam['srfinsttag'], '__srfstdinst__')) {
delete tempParam['srfinsttag'];
}
if (tempParam && (Object.keys(tempParam).length > 0)) {
url += `?${qs.stringify(tempParam)}`;
}
return url;
}
return url;
}
}
......@@ -23,4 +23,13 @@ export const ViewConfig = {
},
{{/eq}}
{{/page.ctrls}}
controlsAction:{
{{#page.ctrls}}
{{#eq controlType "FORM"}}
{{codeName}}:{
'loadAction': 'Get'
},
{{/eq}}
{{/page.ctrls}}
}
};
\ No newline at end of file
......@@ -51,7 +51,7 @@ const { state, handleToolbarEvent } = new EditView(ViewConfig).moduleInstall(pro
:showBusyIndicator="true"
:context="state.context"
:viewParams="state.viewParams"
:controlAction="state.controlsAction"
:controlAction="state.controlsAction.{{codeName}}"
:viewSubject="state.viewSubject"
></{{codeName}}Form>
{{/eq}}
......
import { Http, EntityService } from '@ibiz-core';
/**
* {{appEntity.logicName}}服务对象基类
*
* @export
* @class {{appEntity.codeName.pascalCase}}
* @extends {EntityBaseService}
*/
export class {{appEntity.codeName.pascalCase}}ServiceBase extends EntityService {
constructor(opts?: any) {
super(opts);
}
protected APPDENAME = "{{appEntity.codeName.pascalCase}}";
{{#eq appEntity.keyPSAppDEField.codeName.lowerCase}}
protected APPDEKEY = "{{appEntity.keyPSAppDEField.codeName.pascalCase}}";
{{/eq}}
{{#each appEntity.allPSAppDEMethods as |singleAppMethod| }}
/**
* {{singleAppMethod.codeName}}
*
* @param {*} [_context={}]
* @param {*} [_data = {}]
* @returns {Promise<any>}
* @memberof {{appEntity.codeName.pascalCase}}ServiceBase
*/
async {{singleAppMethod.codeName}}(_context: any = {}, _data: any = {}): Promise<any> {
//{{singleAppMethod}}
//{{singleAppMethod.pSDEServiceAPIMethod}}
//{{singleAppMethod.pSDEServiceAPIMethod.requestMethod}}
{{#eq singleAppMethod.methodType "SELECT" }}
const res = await this.http.post(`/{{appEntity.codeName.pluralize}}/${encodeURIComponent(_context.{{appEntity.codeName.lowerCase}})}{{singleAppMethod.requestPath}}`, _data);
return res;
{{/eq}}
{{#eq singleAppMethod.methodType "FETCH" }}
const res = await this.http.post(`/{{appEntity.codeName.pluralize}}/${encodeURIComponent(_context.{{appEntity.codeName.lowerCase}})}{{singleAppMethod.requestPath}}`, _data);
return res;
{{/eq}}
{{#eq singleAppMethod.methodType "GET" }}
const res = await this.http.get(`/{{appEntity.codeName.pluralize}}/${encodeURIComponent(_context.{{appEntity.codeName.lowerCase}})}{{singleAppMethod.requestPath}}`);
return res;
{{/eq}}
{{#eq singleAppMethod.codeName "GetDraft" }}
_data[this.APPDENAME?.toLowerCase()] = undefined;
_data[this.APPDEKEY] = undefined;
const res = await this.http.post(`/{{appEntity.codeName.pluralize}}/${encodeURIComponent(_context.{{appEntity.codeName.lowerCase}})}{{singleAppMethod.requestPath}}`, _data);
return res;
{{/eq}}
{{#eq singleAppMethod.codeName "Update" }}
const res = await this.http.post(`/{{appEntity.codeName.pluralize}}/${encodeURIComponent(_context.{{appEntity.codeName.lowerCase}})}{{singleAppMethod.requestPath}}`, _data);
return res;
{{/eq}}
{{#eq singleAppMethod.codeName "Get" }}
const res = await this.http.get(`/{{appEntity.codeName.pluralize}}/${encodeURIComponent(_context.{{appEntity.codeName.lowerCase}})}{{singleAppMethod.requestPath}}`, _data);
return res;
{{/eq}}
}
{{/each}}
}
\ No newline at end of file
判断
{{#eq appEntity.logicName "字典"}}
成功{{appEntity.logicName}}
{{else}}
不成功{{appEntity.logicName}}
{{/eq}}
小于
{{#lt appEntity.storageMode 0}}
成功{{appEntity.storageMode}} 小于0
{{else}}
不成功{{appEntity.storageMode}} 不小于0
{{/lt}}
判断
{{#eq appEntity.defaultMode true}}
成功{{appEntity.defaultMode}} =真
{{else}}
不成功{{appEntity.defaultMode}} =假
{{/eq}}
目前支持的判断有 eq 等于, neq 不等于, gt 大于, gte 大于等于, lt 小于 , lte 小于等于
{{#appEntity.ctrls}}
这里是应用实体ctrl的代码名称 {{codeName}}
lowercase {{lowerCase codeName}}
UPPERCASE {{upperCase codeName}}
PascalCase {{pascalCase codeName}}
camelCase {{camelCase codeName}}
snake_case {{snakeCase codeName}}
spinal-case {{spinalCase codeName}}
pluralize {{pluralize codeName}}
另一种便捷写法,只支持codeName和name
lowercase {{codeName.lowerCase}}
UPPERCASE {{codeName.upperCase}}
PascalCase {{codeName.pascalCase}}
camelCase {{codeName.camelCase}}
snake_case {{codeName.snakeCase}}
spinal-case {{codeName.spinalCase}}
pluralize {{codeName.pluralize}}
{{/appEntity.ctrls}}
\ No newline at end of file
import { {{appEntity.codeName.pascalCase}}ServiceBase } from './{{appEntity.codeName.spinalCase}}-service-base';
/**
* ${appEntity.getLogicName()}服务
*
* @export
* @class {{appEntity.codeName.pascalCase}}Service
* @extends {{appEntity.codeName.pascalCase}}ServiceBase
*/
export class {{appEntity.codeName.pascalCase}}Service extends {{appEntity.codeName.pascalCase}}ServiceBase {
/**
* Creates an instance of {{appEntity.codeName.pascalCase}}Service.
* @memberof {{appEntity.codeName.pascalCase}}Service
*/
constructor(opts?: any) {
{{!-- const { context: context, tag: cacheKey } = opts; --}}
super(opts);
}
/**
* 获取实例
*
* @static
* @param 应用上下文
* @return {*} { {{appEntity.codeName.pascalCase}}Service }
* @memberof {{appEntity.codeName.pascalCase}}Service
*/
static getInstance(context?: any): {{appEntity.codeName.pascalCase}}Service {
return new {{appEntity.codeName.pascalCase}}Service({ context: context });
}
}
export default {{appEntity.codeName.pascalCase}}Service;
\ No newline at end of file
import { ControlVOBase } from '@ibiz-core';
import { ControlService } from './{{ctrl.codeName.lowerCase}}-form-service';
export const CtrlConfig = {
controlCodeName: '{{ctrl.codeName}}',
controlName: '{{ctrl.name}}',
controlService: new ControlService(),
data: {},
};
\ No newline at end of file
};
/**
* 部件展示数据对象
* @export
* @class ControlVO
*/
export class ControlVO extends ControlVOBase {
// 表单里映射了属性的字段
{{#each ctrl.pSDEFormItems as | formItem | }}
{{!-- // 表单formItem
{{formItem.name}}
{{formItem.id}} --}}
{{#neq formItem.pSAppDEField null }}
get {{lowerCase formItem.id}}() {
return this.$DO.{{lowerCase formItem.pSAppDEField.codeName}};
}
set {{lowerCase formItem.id}}(value: any) {
this.$DO.{{lowerCase formItem.pSAppDEField.codeName}} = value;
}
{{/neq}}
{{/each}}
// 表单里没有映射实体属性的字段
{{#each ctrl.pSDEFormItems as | formItem | }}
{{#eq formItem.pSAppDEField null }}
{{lowerCase formItem.id}}: any;
{{/eq}}
{{/each}}
}
\ No newline at end of file
import { ControlServiceBase } from '@ibiz-core';
import { {{pascalCase ctrl.pSAppDataEntity.codeName}}Service } from '@service/{{spinalCase ctrl.pSAppDataEntity.codeName}}/{{spinalCase ctrl.pSAppDataEntity.codeName}}-service';
import { ControlVO } from './{{ctrl.codeName.lowerCase}}-form-config';
export class ControlService extends ControlServiceBase {
/**
* 实体服务对象
*/
public entityService: {{pascalCase ctrl.pSAppDataEntity.codeName}}Service = new {{pascalCase ctrl.pSAppDataEntity.codeName}}Service();
/**
* 加载数据
*
* @param [context={}] 上下文参数
* @param [data={}] 视图参数
* @param opts
* @return {*}
*/
public async get(context: any, data: any, opts: { action: string; isLoading?: boolean }): Promise<any> {
const { context: Context, data: Data } = this.handleRequestData(context, data, opts);
let response: any;
const _entityService: any = this.entityService;
if (_entityService[opts.action] && _entityService[opts.action] instanceof Function) {
response = await _entityService[opts.action](Context, Data, opts.isLoading);
} else {
response = await this.entityService.Get(Context, Data, opts.isLoading);
}
// this.setRemoteCopyData(response);
response.data = new ControlVO(response.data);
return this.handleResponse(response, opts);
}
}
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册