import { IPSAppDEPickupView, IPSDEPickupViewPanel, IPSDETreeGridExParam, IPSTreeExpBar } from '@ibizstudio/runtime';
import { ModelTool, throttle, MPickupView2Engine, MPickUpView2Interface, Util } from '@ibizstudio/runtime';
import { MainViewBase } from './mainview-base';
/**
* 数据多项选择视图基类
*
* @export
* @class MPickUpViewBase
* @extends {MainViewBase}
*/
export class MPickUpView2Base extends MainViewBase implements MPickUpView2Interface {
/**
* 视图实例
*
* @memberof MPickUpViewBase
*/
declare viewInstance: IPSAppDEPickupView;
/**
* 选择视图面板实例
*
* @memberof MPickUpViewBase
*/
pickUpViewPanelInstance!: IPSDEPickupViewPanel;
treeExpbarIntance!: IPSTreeExpBar;
/**
* 视图引擎
*
* @public
* @type {Engine}
* @memberof MPickUpViewBase
*/
engine: MPickupView2Engine = new MPickupView2Engine();
/**
* 是否显示按钮
*
* @type {boolean}
* @memberof MPickUpViewBase
*/
isShowButton: boolean = true;
/**
* 选中数据的字符串
*
* @type {string}
* @memberof MPickUpViewBase
*/
selectedData: string = "";
/**
* 是否初始化已选中项
*
* @type {any[]}
* @memberof MPickUpViewBase
*/
isInitSelected: boolean = false;
/**
* 视图选中数据
*
* @type {any[]}
* @memberof MPickUpViewBase
*/
viewSelections: any[] = [];
/**
* 是否单选
*
* @type {boolean}
* @memberof MPickUpViewBase
*/
isSingleSelect: boolean = false;
/**
* 监听部件动态参数变化
*
* @param {*} newVal
* @param {*} oldVal
* @memberof MPickUpViewBase
*/
onDynamicPropsChange(newVal: any, oldVal: any) {
super.onDynamicPropsChange(newVal, oldVal);
if (this.viewparams?.selectedData) {
this.selectedData = JSON.stringify(this.viewparams.selectedData);
this.viewSelections = this.viewparams.selectedData;
}
}
/**
* 监听部件静态参数变化
*
* @param {*} newVal
* @param {*} oldVal
* @memberof MPickUpViewBase
*/
onStaticPropsChange(newVal: any, oldVal: any) {
this.isShowButton = newVal?.isShowButton !== false;
super.onStaticPropsChange(newVal, oldVal);
}
/**
* 引擎初始化
*
* @public
* @memberof MPickUpViewBase
*/
engineInit(): void {
if (this.Environment && this.Environment.isPreviewMode) {
return;
}
let engineOpts = ({
view: this,
parentContainer: this.$parent,
p2k: '0',
treeExpBar: (this.$refs[this.treeExpbarIntance?.name] as any).ctrl,
pickupViewPanel: ((this.$refs[this.treeExpbarIntance?.name] as any).ctrl as any)?.$refs[this.pickUpViewPanelInstance?.name]?.ctrl,
keyPSDEField: this.appDeCodeName.toLowerCase(),
majorPSDEField: this.appDeMajorFieldName.toLowerCase(),
});
this.engine.init(engineOpts);
}
/**
* 视图初始化
*
* @memberof MPickUpViewBase
*/
async viewMounted() {
super.viewMounted();
if (this.viewparams?.selectedData) {
this.engine.onCtrlEvent('pickupviewpanel', 'selectionchange', this.viewparams.selectedData);
}
}
/**
* 初始化分页导航视图实例
*
* @memberof MPickUpViewBase
*/
async viewModelInit() {
this.viewInstance = (this.staticProps?.modeldata) as IPSAppDEPickupView;
await super.viewModelInit();
this.pickUpViewPanelInstance = ModelTool.findPSControlByType("PICKUPVIEWPANEL", this.viewInstance.getPSControls());
this.treeExpbarIntance = ModelTool.findPSControlByType('TREEEXPBAR', this.viewInstance.getPSControls());
}
/**
* 渲染视图主体内容区
*
* @memberof MPickUpViewBase
*/
renderMainContent() {
return [this.renderBodyMessage(),
{this.renderTreeExpBar()}
{this.isShowButton &&
{this.renderButtons()}
}
{this.isShowButton &&
{this.renderMpickerSelect()}
}
,
this.isShowButton && this.renderFooter(),
]
}
/**
* 渲染视图底部按钮
* @memberof MPickUpViewBase
*/
renderFooter() {
const { viewStyle } = this.viewInstance;
const style2 =
{this.isShowButton &&
0 ? false : true} on-click={(...params: any[]) => throttle(this.onClickOk, params, this)}>{this.containerModel?.view_okbtn?.text}
throttle(this.onClickCancel, params, this)}>{this.containerModel?.view_cancelbtn?.text}
}
const defaultStyle =
return viewStyle === 'STYLE2' ? style2 : defaultStyle;
}
/**
* 渲染按钮
*
* @memberof MPickUpViewBase
*/
renderButtons() {
return (
throttle(this.onCLickRight, params, this)}>
throttle(this.onCLickLeft, params, this)}>
throttle(this.onCLickAllRight, params, this)}>
throttle(this.onCLickAllLeft, params, this)}>
);
}
/**
* 渲染多数据选择
*
* @memberof MPickUpViewBase
*/
renderMpickerSelect() {
return
{this.viewSelections.map((item: any, index: number) => {
return
throttle(this.selectionsClick, [item], this)} on-dblclick={() => throttle(this.selectionsDBLClick, [item], this)}>
{item.srfmajortext}
})}
}
/**
* 渲染选择视图面板
*
* @memberof MPickUpViewBase
*/
renderControlContent() {
let { targetCtrlName, targetCtrlParam, targetCtrlEvent } = this.computeTargetCtrlData(this.pickUpViewPanelInstance);
return this.$createElement(targetCtrlName, { props: targetCtrlParam, ref: this.pickUpViewPanelInstance?.name, on: targetCtrlEvent });
}
renderTreeExpBar() {
let { targetCtrlName, targetCtrlParam, targetCtrlEvent } = this.computeTargetCtrlData(this.treeExpbarIntance);
Object.assign(targetCtrlParam.staticProps, { pickupviewpanel: this.pickUpViewPanelInstance })
return this.$createElement(targetCtrlName, { props: targetCtrlParam, ref: this.treeExpbarIntance?.name, on: targetCtrlEvent });
}
/**
* 计算目标部件所需参数
*
* @param {string} [controlType]
* @returns
* @memberof MPickUpViewBase
*/
computeTargetCtrlData(controlInstance: any) {
const { targetCtrlName, targetCtrlParam, targetCtrlEvent } = super.computeTargetCtrlData(controlInstance);
Object.assign(targetCtrlParam.dynamicProps, {
selectedData: this.selectedData,
})
Object.assign(targetCtrlParam.staticProps, {
isSingleSelect: false,
isShowButton: this.isShowButton,
})
return { targetCtrlName, targetCtrlParam, targetCtrlEvent }
}
/**
* 选中数据单击
*
* @param {*} item
* @memberof MPickUpViewBase
*/
selectionsClick(item: any): void {
item._select = !item._select;
const removeSelect: boolean = this.viewSelections.some((selection: any) => selection._select);
this.containerModel.view_leftbtn.disabled = !removeSelect;
}
/**
* 选中树双击
*
* @param {*} item
* @memberof MPickUpViewBase
*/
selectionsDBLClick(item: any): void {
const index: number = this.viewSelections.findIndex((selection: any) => Object.is(selection.srfkey, item.srfkey));
if (index !== -1) {
this.viewSelections.splice(index, 1);
}
const removeSelect: boolean = this.viewSelections.some((selection: any) => selection._select);
this.containerModel.view_leftbtn.disabled = !removeSelect;
this.selectedData = JSON.stringify(this.viewSelections);
}
/**
* 删除右侧全部选中数据
*
* @memberof MPickUpViewBase
*/
onCLickLeft(): void {
const _selectiions = [...Util.deepCopy(this.viewSelections)];
_selectiions.forEach((item: any) => {
if (!item._select) {
return;
}
const index = this.viewSelections.findIndex((selection: any) => Object.is(item.srfkey, selection.srfkey));
if (index !== -1) {
this.viewSelections.splice(index, 1);
}
});
const removeSelect: boolean = this.viewSelections.some((selection: any) => selection._select);
this.containerModel.view_leftbtn.disabled = !removeSelect;
this.selectedData = JSON.stringify(this.viewSelections);
}
/**
* 添加左侧选中数据
*
* @memberof MPickUpViewBase
*/
onCLickRight(): void {
Object.values(this.containerModel).forEach((model: any) => {
if (!Object.is(model.type, 'PICKUPVIEWPANEL')) {
return;
}
let newSelections: any[] = [];
model.selections.forEach((item: any) => {
const index: number = this.viewSelections.findIndex((selection: any) => Object.is(item.srfkey, selection.srfkey));
if (index === -1) {
let _item: any = { ...Util.deepCopy(item) };
Object.assign(_item, { _select: false })
newSelections.push(_item);
} else {
newSelections.push(this.viewSelections[index]);
}
});
this.viewSelections = this.removeDuplicates([...newSelections, ...this.viewSelections]);
});
}
/**
* 去重
*
* @memberof MPickUpViewBase
*/
removeDuplicates(data: any): Array {
const uniqueSet = new Set(data);
return [...uniqueSet];
}
/**
* 选中数据全部删除
*
* @memberof MPickUpViewBase
*/
onCLickAllLeft(): void {
if (this.Environment && this.Environment.isPreviewMode) {
return;
}
this.viewSelections = [];
this.containerModel.view_leftbtn.disabled = true;
this.engine.onCtrlEvent('pickupviewpanel', 'selectionchange', []);
this.selectedData = JSON.stringify(this.viewSelections);
}
/**
* 添加左侧面板所有数据到右侧
*
* @memberof MPickUpViewBase
*/
onCLickAllRight(): void {
if (this.Environment && this.Environment.isPreviewMode) {
return;
}
Object.values(this.containerModel).forEach((model: any) => {
if (!Object.is(model.type, 'PICKUPVIEWPANEL')) {
return;
}
if (model.datas.length > 0) {
model.datas.forEach((data: any, index: any) => {
if (!data.srfmajortext) {
let fieldCodeName = this.appDeMajorFieldName.toLowerCase();
Object.assign(data, { srfmajortext: data[fieldCodeName] });
}
})
}
model.datas.forEach((item: any) => {
const index: number = this.viewSelections.findIndex((selection: any) => Object.is(item.srfkey, selection.srfkey));
if (index === -1) {
let _item: any = { ...Util.deepCopy(item) };
Object.assign(_item, { _select: false })
this.viewSelections.push(_item);
}
});
});
this.selectedData = JSON.stringify(this.viewSelections);
}
/**
* 确定
*
* @memberof MPickUpViewBase
*/
onClickOk(): void {
this.$emit('view-event', { viewName: this.viewInstance?.name, action: 'viewdataschange', data: this.viewSelections });
this.$emit('view-event', { viewName: this.viewInstance?.name, action: 'close', data: null });
}
/**
* 取消
*
* @memberof MPickUpViewBase
*/
onClickCancel(): void {
this.$emit('view-event', { viewName: this.viewInstance?.name, action: 'viewdataschange', data: null });
this.$emit('view-event', { viewName: this.viewInstance?.name, action: 'close', data: null });
}
}