提交 8bea9781 编写于 作者: KK's avatar KK

功能修复--关系界面加载异常

上级 6ed2cf1c
...@@ -24,6 +24,7 @@ ...@@ -24,6 +24,7 @@
<div v-show="!blockUI"> <div v-show="!blockUI">
<component <component
class="viewcontainer2" class="viewcontainer2"
ref="appFormDruipart"
:is="viewname" :is="viewname"
:viewDefaultUsage="false" :viewDefaultUsage="false"
:formDruipart="formDruipart" :formDruipart="formDruipart"
...@@ -48,414 +49,453 @@ import "./app-form-druipart.less"; ...@@ -48,414 +49,453 @@ import "./app-form-druipart.less";
@Component({}) @Component({})
export default class AppFormDRUIPart extends Vue { export default class AppFormDRUIPart extends Vue {
/** /**
* 表单数据 * 表单数据
* *
* @type {string} * @type {string}
* @memberof AppFormDRUIPart * @memberof AppFormDRUIPart
*/ */
@Prop() public data!: string; @Prop() public data!: string;
/** /**
* 表单名称 * 表单名称
* *
* @type {string} * @type {string}
* @memberof AppFormDRUIPart * @memberof AppFormDRUIPart
*/ */
@Prop() public caption!: string; @Prop() public caption!: string;
/** /**
* 关联视图 * 关联视图
* *
* @type {string} * @type {string}
* @memberof AppFormDRUIPart * @memberof AppFormDRUIPart
*/ */
@Prop() public viewname?: string; @Prop() public viewname?: string;
/** /**
* 刷新关系项 * 刷新关系项
* *
* @type {string} * @type {string}
* @memberof AppFormDRUIPart * @memberof AppFormDRUIPart
*/ */
@Prop({ default: "" }) public refreshitems!: string; @Prop({ default: "" }) public refreshitems!: string;
/** /**
* 关系视图类型 * 关系视图类型
* *
* @type {string} * @type {string}
* @memberof AppFormDRUIPart * @memberof AppFormDRUIPart
*/ */
@Prop() public refviewtype?: string; @Prop() public refviewtype?: string;
/** /**
* 临时数据模式:从数据模式:"2"、主数据模式:"1"、无临时数据模式:"0" * 临时数据模式:从数据模式:"2"、主数据模式:"1"、无临时数据模式:"0"
* *
* @type {string} * @type {string}
* @memberof AppFormDRUIPart * @memberof AppFormDRUIPart
*/ */
@Prop({default:"0"}) public tempMode?:string; @Prop({ default: "0" }) public tempMode?: string;
/** /**
* 父数据 * 父数据
* *
* @type {*} * @type {*}
* @memberof AppFormDRUIPart * @memberof AppFormDRUIPart
*/ */
@Prop() public parentdata!: any; @Prop() public parentdata!: any;
/** /**
* 传入参数项名称 * 传入参数项名称
* *
* @type {string} * @type {string}
* @memberof AppFormDRUIPart * @memberof AppFormDRUIPart
*/ */
@Prop() public paramItem!: string; @Prop() public paramItem!: string;
/** /**
* 是否忽略表单项值变化 * 是否忽略表单项值变化
* *
* @type {boolean} * @type {boolean}
* @memberof AppFormDRUIPart * @memberof AppFormDRUIPart
*/ */
@Prop() public ignorefieldvaluechange!: boolean; @Prop() public ignorefieldvaluechange!: boolean;
/** /**
* 表单状态 * 表单状态
* *
* @type {Subject<any>} * @type {Subject<any>}
* @memberof AppFormDRUIPart * @memberof AppFormDRUIPart
*/ */
@Prop() public formState!: Subject<any>; @Prop() public formState!: Subject<any>;
/** /**
* 视图参数 * 视图参数
* *
* @type {any[]} * @type {any[]}
* @memberof AppFormDRUIPart * @memberof AppFormDRUIPart
*/ */
@Prop() public parameters!: any[]; @Prop() public parameters!: any[];
/** /**
* 视图上下文 * 视图上下文
* *
* @type {*} * @type {*}
* @memberof AppFormDRUIPart * @memberof AppFormDRUIPart
*/ */
@Prop() public context!: any; @Prop() public context!: any;
/** /**
* 视图参数 * 视图参数
* *
* @type {*} * @type {*}
* @memberof AppFormDRUIPart * @memberof AppFormDRUIPart
*/ */
@Prop() public viewparams!: any; @Prop() public viewparams!: any;
/** /**
* 应用实体参数名称 * 应用实体参数名称
* *
* @type {string} * @type {string}
* @memberof AppFormDRUIPart * @memberof AppFormDRUIPart
*/ */
@Prop() public parameterName!: string; @Prop() public parameterName!: string;
/** /**
* 导航参数 * 导航参数
* *
* @type {*} * @type {*}
* @memberof AppSelect * @memberof AppSelect
*/ */
@Prop({ default: {} }) protected navigateParam?: any; @Prop({ default: {} }) protected navigateParam?: any;
/** /**
* 导航上下文 * 导航上下文
* *
* @type {*} * @type {*}
* @memberof AppSelect * @memberof AppSelect
*/ */
@Prop({ default: {} }) protected navigateContext?: any; @Prop({ default: {} }) protected navigateContext?: any;
/** /**
* 关系界面向视图下发指令对象 * 关系界面向视图下发指令对象
* *
* @private * @private
* @type {Subject<any>} * @type {Subject<any>}
* @memberof AppFormDRUIPart * @memberof AppFormDRUIPart
*/ */
private formDruipart: Subject<any> = new Subject<any>(); private formDruipart: Subject<any> = new Subject<any>();
/** /**
* 表单状态事件 * 表单状态事件
* *
* @private * @private
* @type {(Unsubscribable | undefined)} * @type {(Unsubscribable | undefined)}
* @memberof AppFormDRUIPart * @memberof AppFormDRUIPart
*/ */
private formStateEvent: Unsubscribable | undefined; private formStateEvent: Unsubscribable | undefined;
/** /**
* 监控值 * 监控值
* *
* @param {*} newVal * @param {*} newVal
* @param {*} oldVal * @param {*} oldVal
* @memberof AppFormDRUIPart * @memberof AppFormDRUIPart
*/ */
@Watch("data") @Watch("data")
onActivedataChange(newVal: any, oldVal: any) { onActivedataChange(newVal: any, oldVal: any) {
if (this.ignorefieldvaluechange) { if (this.ignorefieldvaluechange) {
return; return;
} }
if (Object.is(newVal, oldVal)) { if (Object.is(newVal, oldVal)) {
return; return;
} }
const newFormData: any = JSON.parse(newVal); const newFormData: any = JSON.parse(newVal);
const oldDormData: any = JSON.parse(oldVal); const oldDormData: any = JSON.parse(oldVal);
let refreshRefview = false; let refreshRefview = false;
this.hookItems.some((_hookItem: any) => { this.hookItems.some((_hookItem: any) => {
if (!Object.is(newFormData[_hookItem], oldDormData[_hookItem])) { if (!Object.is(newFormData[_hookItem], oldDormData[_hookItem])) {
refreshRefview = true; refreshRefview = true;
return refreshRefview; return refreshRefview;
} }
return refreshRefview; return refreshRefview;
}); });
if (refreshRefview) { if (refreshRefview) {
this.refreshDRUIPart(); this.refreshDRUIPart();
} }
}
/**
* 是否启用遮罩
*
* @type {boolean}
* @memberof AppFormDRUIPart
*/
public blockUI: boolean = false;
/**
* 是否刷新关系数据
*
* @private
* @type {boolean}
* @memberof AppFormDRUIPart
*/
private isRelationalData: boolean = true;
/**
* 刷新节点
*
* @private
* @type {string[]}
* @memberof AppFormDRUIPart
*/
private hookItems: string[] = [];
/**
* 父视图参数
*
* @type {*}
* @memberof AppFormDRUIPart
*/
public tempViewParams: any = {};
/**
* 父视图参数
*
* @type {*}
* @memberof AppFormDRUIPart
*/
public tempContext: any = {};
/**
* 刷新关系页面
*
* @private
* @returns {void}
* @memberof AppFormDRUIPart
*/
private refreshDRUIPart(data?: any): void {
if (Object.is(this.parentdata.SRFPARENTTYPE, "CUSTOM")) {
this.isRelationalData = false;
} }
const formData: any = data ? data : JSON.parse(this.data);
const _paramitem = formData[this.paramItem]; /**
let _context = {}; * 是否启用遮罩
Object.assign(_context, this.$viewTool.getIndexViewParam()); *
const _parameters: any[] = [ * @type {boolean}
...this.$viewTool.getIndexParameters(), * @memberof AppFormDRUIPart
...this.parameters */
]; public blockUI: boolean = false;
_parameters.forEach((parameter: any) => {
const {
pathName,
parameterName /**
}: { pathName: string; parameterName: string } = parameter; * 是否刷新关系数据
if (formData[parameterName] && !Object.is(formData[parameterName], "")) { *
Object.assign(_context, { [parameterName]: formData[parameterName] }); * @private
} * @type {boolean}
}); * @memberof AppFormDRUIPart
Object.assign(_context, { [this.paramItem]: _paramitem }); */
//设置顶层视图唯一标识 private isRelationalData: boolean = true;
Object.assign(_context, this.context);
// 导航参数处理 /**
const {context, param}= this.$viewTool.formatNavigateParam(this.navigateContext, this.navigateParam, _context, this.viewparams, JSON.parse(this.data)); * 刷新节点
Object.assign(this.tempContext, context); *
Object.assign(this.tempViewParams, param); * @private
* @type {string[]}
if (this.isRelationalData) { * @memberof AppFormDRUIPart
if(this.tempMode && Object.is(this.tempMode,"2")){ */
this.blockUIStop(); private hookItems: string[] = [];
}else{
if (!_paramitem || _paramitem == null || Object.is(_paramitem, '')) { /**
this.blockUIStart(); * 父视图参数
return; *
} else { * @type {*}
* @memberof AppFormDRUIPart
*/
public tempViewParams: any = {};
/**
* 父视图参数
*
* @type {*}
* @memberof AppFormDRUIPart
*/
public tempContext: any = {};
/**
* 刷新关系页面
*
* @private
* @returns {void}
* @memberof AppFormDRUIPart
*/
private refreshDRUIPart(data?: any): void {
if (Object.is(this.parentdata.SRFPARENTTYPE, "CUSTOM")) {
this.isRelationalData = false;
}
const formData: any = data ? data : JSON.parse(this.data);
const _paramitem = formData[this.paramItem];
let _context = {};
Object.assign(_context, this.$viewTool.getIndexViewParam());
const _parameters: any[] = [
...this.$viewTool.getIndexParameters(),
...this.parameters
];
_parameters.forEach((parameter: any) => {
const {
pathName,
parameterName
}: { pathName: string; parameterName: string } = parameter;
if (formData[parameterName] && !Object.is(formData[parameterName], "")) {
Object.assign(_context, { [parameterName]: formData[parameterName] });
}
});
Object.assign(_context, { [this.paramItem]: _paramitem });
//设置顶层视图唯一标识
Object.assign(_context, this.context);
// 导航参数处理
const { context, param } = this.$viewTool.formatNavigateParam(this.navigateContext, this.navigateParam, _context, this.viewparams, JSON.parse(this.data));
Object.assign(this.tempContext, context);
Object.assign(this.tempViewParams, param);
if (this.isRelationalData) {
if (this.tempMode && Object.is(this.tempMode, "2")) {
this.blockUIStop(); this.blockUIStop();
} else {
if (!_paramitem || _paramitem == null || Object.is(_paramitem, '')) {
this.blockUIStart();
return;
} else {
this.blockUIStop();
}
}
}
this.partViewEvent("load", {} );
}
/**
* vue 生命周期
*
* @memberof AppFormDRUIPart
*/
public created(): void {
this.hookItems = [...this.refreshitems.split(";")];
if (!this.formState) {
return;
}
if (!Object.is(this.paramItem, this.parameterName)) {
this.hookItems.push(this.paramItem);
}
this.formStateEvent = this.formState.subscribe(($event: any) => {
// 表单加载完成
if (Object.is($event.type, "load")) {
this.refreshDRUIPart($event.data);
}
// 表单保存之前
if (Object.is($event.type, "beforesave")) {
if (
Object.is(this.refviewtype, "DEMOBMEDITVIEW9") ||
Object.is(this.refviewtype, "DEGRIDVIEW9")
) {
this.formDruipart.next({ action: "save", data: $event.data });
} else {
// 不需要保存的界面也要抛出事件,供计数器计算
this.$emit("drdatasaved", $event);
}
} }
// 表单保存完成
if (Object.is($event.type, "save")) {
this.refreshDRUIPart($event.data);
}
// 表单项更新
if (Object.is($event.type, "updateformitem")) {
if (!$event.data) {
return;
}
let refreshRefview = false;
Object.keys($event.data).some((name: string) => {
const index = this.hookItems.findIndex((_name: string) =>
Object.is(_name, name)
);
refreshRefview = index !== -1 ? true : false;
return refreshRefview;
});
if (refreshRefview) {
this.refreshDRUIPart();
}
}
});
}
/**
* 部件销毁
*
* @memberof AppFormDRUIPart
*/
public destroyed(): void {
if (this.formStateEvent) {
this.formStateEvent.unsubscribe();
} }
} }
setTimeout(()=>{this.formDruipart.next({ action: "load", data: {}})},500)
} /**
* 开启遮罩
/** *
* vue 生命周期 * @private
* * @memberof AppFormDRUIPart
* @memberof AppFormDRUIPart */
*/ private blockUIStart(): void {
public created(): void { this.blockUI = true;
this.hookItems = [...this.refreshitems.split(";")]; }
if (!this.formState) {
return; /**
* 关闭遮罩
*
* @private
* @memberof AppFormDRUIPart
*/
private blockUIStop(): void {
this.blockUI = false;
}
/**
* 多数据视图加载完成
*
* @public
* @memberof AppFormDRUIPart
*/
public mditemsload() {
console.log("多数据视图加载完成,触发后续表单项更新");
} }
if (!Object.is(this.paramItem, this.parameterName)) {
this.hookItems.push(this.paramItem); /**
* DEMEDITVIEW9 关系数据保存完成
*
* @public
* @memberof AppFormDRUIPart
*/
public drdatasaved($event: any) {
this.$emit("drdatasaved", $event);
console.log(this.viewname + "关系数据保存完成");
} }
this.formStateEvent = this.formState.subscribe(($event: any) => {
// 表单加载完成 /**
if (Object.is($event.type, "load")) { * DEMEDITVIEW9 关系数据值变化
this.refreshDRUIPart($event.data); *
} * @public
// 表单保存之前 * @memberof AppFormDRUIPart
if (Object.is($event.type, "beforesave")) { */
if ( public drdatachange() {
Object.is(this.refviewtype, "DEMOBMEDITVIEW9") || console.log("DEMEDITVIEW9 关系数据值变化");
Object.is(this.refviewtype, "DEGRIDVIEW9") }
) {
this.formDruipart.next({ action: "save", data: $event.data }); /**
} else { * 视图数据变化
// 不需要保存的界面也要抛出事件,供计数器计算 *
this.$emit("drdatasaved", $event); * @public
* @memberof AppFormDRUIPart
*/
public viewdataschange() {
console.log("视图数据变化");
}
/**
* 视图加载完成
*
* @public
* @memberof AppFormDRUIPart
*/
public viewload() {
console.log("视图加载完成");
}
/**
* 定时器实例
*
* @type {[any]}
* @memberof AppFormDRUIPart
*/
protected timer?: any;
/**
* 向关系视图发送事件,采用轮询模式。避免异步视图出现加载慢情况
*
* @param {*} action 触发行为
* @param {*} data 数据
* @param {*} count 轮询计数
* @memberof AppFormDRUIPart
*/
protected partViewEvent(action: string, data: any, count: number = 0): void {
if (count > 100) {
return;
} }
} const clearResource: Function = () => {
// 表单保存完成 if (this.timer !== undefined) {
if (Object.is($event.type, "save")) { clearTimeout(this.timer);
this.refreshDRUIPart($event.data); this.timer = undefined;
} }
// 表单项更新
if (Object.is($event.type, "updateformitem")) {
if (!$event.data) {
return;
} }
let refreshRefview = false; if (count === 0) {
Object.keys($event.data).some((name: string) => { clearResource();
const index = this.hookItems.findIndex((_name: string) => }
Object.is(_name, name) if (this.$refs.appFormDruipart) {
); this.formDruipart.next({ action: action, data });
refreshRefview = index !== -1 ? true : false; clearResource();
return refreshRefview; return;
});
if (refreshRefview) {
this.refreshDRUIPart();
} }
} this.timer = setTimeout(() => {
}); count++;
this.refreshDRUIPart(); this.partViewEvent(action, data, count);
} }, 30);
/**
* 部件销毁
*
* @memberof AppFormDRUIPart
*/
public destroyed(): void {
if (this.formStateEvent) {
this.formStateEvent.unsubscribe();
} }
}
/**
* 开启遮罩
*
* @private
* @memberof AppFormDRUIPart
*/
private blockUIStart(): void {
this.blockUI = true;
}
/**
* 关闭遮罩
*
* @private
* @memberof AppFormDRUIPart
*/
private blockUIStop(): void {
this.blockUI = false;
}
/**
* 多数据视图加载完成
*
* @public
* @memberof AppFormDRUIPart
*/
public mditemsload() {
console.log("多数据视图加载完成,触发后续表单项更新");
}
/**
* DEMEDITVIEW9 关系数据保存完成
*
* @public
* @memberof AppFormDRUIPart
*/
public drdatasaved($event: any) {
this.$emit("drdatasaved", $event);
console.log(this.viewname + "关系数据保存完成");
}
/**
* DEMEDITVIEW9 关系数据值变化
*
* @public
* @memberof AppFormDRUIPart
*/
public drdatachange() {
console.log("DEMEDITVIEW9 关系数据值变化");
}
/**
* 视图数据变化
*
* @public
* @memberof AppFormDRUIPart
*/
public viewdataschange() {
console.log("视图数据变化");
}
/**
* 视图加载完成
*
* @public
* @memberof AppFormDRUIPart
*/
public viewload() {
console.log("视图加载完成");
}
} }
</script> </script>
......
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册