提交 691f48eb 编写于 作者: zcdtk's avatar zcdtk

视图参数处理

上级 f0c7a69b
import { Route } from 'vue-router';
import qs from 'qs';
import { Util } from '@/ibiz-core/utils';
export class ViewTool {
......@@ -271,6 +272,28 @@ export class ViewTool {
return this.indexViewParam;
}
/**
* 判断是否为 null
*
* @param {*} o
* @returns {boolean}
* @memberof ViewTool
*/
public isNull(o: any): boolean {
return Object.prototype.toString.call(o).slice(8, -1) === 'Null'
}
/**
* 判断是否为 undefined
*
* @param {*} o
* @returns {boolean}
* @memberof ViewTool
*/
public isUndefined(o: any): boolean {
return Object.prototype.toString.call(o).slice(8, -1) === 'Undefined'
}
/**
* 处理编辑器参数
*
......@@ -332,4 +355,125 @@ export class ViewTool {
}
return _itemParam;
}
/**
* 解析视图数据
*
* @returns {{ context: {}, viewparams: {} }}
* @memberof ViewTool
*/
public parseViewData(view: any, isPSDEView: boolean): { context: {}, viewparams: {} } {
let data = { context: {}, viewparams: {} };
// 合并全局上下文
const { context, param } = view.$store.getters.getAppData();
if (context && Object.keys(context).length > 0) {
data.context = { ...context };
}
// 合并全局参数
if (param && Object.keys(param).length > 0) {
data.viewparams = { ...param };
}
let _context: any = {}, _viewparams: any = {};
if (!view.viewDefaultUsage) {
// 视图模态或者嵌入打开
if (view._context && !Object.is(view._context, '')) {
_context = { ...JSON.parse(view._context) };
}
if (view._viewparams && !Object.is(view._viewparams, '')) {
_viewparams = { ...JSON.parse(view._viewparams) };
}
} else {
// 视图路由打开
const path = (view.$route.matched[view.$route.matched.length - 1]).path;
const keys: Array<any> = [];
const curReg = view.$pathToRegExp.pathToRegexp(path, keys);
const matchArray = curReg.exec(view.$route.path);
keys.forEach((item: any, index: number) => {
Object.defineProperty(_context, item.name, {
enumerable: true,
value: matchArray[index + 1]
});
});
if (view.$route && view.$route.fullPath && view.$route.fullPath.indexOf("?") > -1) {
const viewParamStr = view.$route.fullPath.slice(view.$route.fullPath.indexOf("?") + 1);
_viewparams = { ...qs.parse(viewParamStr, { delimiter: '&' }) };
}
}
// 合并视图上下文
data.context = { ...data.context, ..._context };
// 合并视图参数
data.viewparams = { ...data.viewparams, ..._viewparams };
this.parseViewNavData(data, view.navContext, view.navParam);
if (isPSDEView) {
data.context = { ...data.context, ...{ srfsessionid: Util.createUUID() } };
}
return data;
}
/**
* 动态视图导航数据
*
* @private
* @param {({ context: any | {}, viewparams: any | {} })} data
* @param {*} [navContext={}]
* @param {*} [navParam={}]
* @memberof ViewTool
*/
private parseViewNavData(data: { context: any | {}, viewparams: any | {} }, navContext: any = {}, navParam: any = {}): void {
Object.keys(navContext).forEach((name: any) => {
if (!name) {
return;
}
let value: any = navContext[name];
// 配置值置空,去掉属性
if (data.context.hasOwnProperty(name) && (this.isNull(value) || this.isUndefined(value))) {
delete data.context[name];
return;
}
if (value.startsWith('%') && value.endsWith('%')) {
const key: string = value.slice(1, -1);
let has_value: boolean = false;
if (data.context.hasOwnProperty(key)) {
has_value = true;
value = data.context[key];
delete data.context[name];
}
if (!has_value) {
return;
}
}
Object.assign(data.context, { [name]: value });
});
Object.keys(navParam).forEach((name: any) => {
if (!name) {
return;
}
let value: any = navParam[name];
// 配置值置空,去掉属性
if (data.viewparams.hasOwnProperty(name) && (this.isNull(value) || this.isUndefined(value))) {
delete data.viewparams[name];
return;
}
if (value.startsWith('%') && value.endsWith('%')) {
const key: string = value.slice(1, -1);
let has_value: boolean = false;
if (data.viewparams.hasOwnProperty(key)) {
has_value = true;
value = data.viewparams[key];
delete data.viewparams[name];
}
if (!has_value) {
return;
}
}
Object.assign(data.viewparams, { [name]: value });
});
}
}
\ No newline at end of file
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册