<#ibizinclude> ./CONTROL-BASE.template.ftl </#ibizinclude> <#ibizinclude> ../@MACRO/CONTROL/CONTROL_HEADER-BASE.vue.ftl </#ibizinclude> /** * 获取多项数据 * * @returns {any[]} * @memberof ${srfclassname('${ctrl.codeName}')} */ public getDatas(): any[] { return []; } /** * 获取单项树 * * @returns {*} * @memberof ${srfclassname('${ctrl.codeName}')} */ public getData(): any { return {}; } /** * 数据选择视图选中项 * * @type {any} * @memberof ${srfclassname('${ctrl.codeName}')} */ @Prop() public selectedData?: any; /** * 跳转变量 * * @type number * @memberof ${srfclassname('${ctrl.codeName}')} */ public active: number = 0; /** * 节点数组 * * @type Array<any> * @memberof ${srfclassname('${ctrl.codeName}')} */ public nodeArray: Array<any> = []; /** * 选中数组 * * @type Array<any> * @memberof ${srfclassname('${ctrl.codeName}')} */ public checkedList: Array<any> = []; /** * 选中数据 * * @type Array<any> * @memberof ${srfclassname('${ctrl.codeName}')} */ public checkedData: Array<any> = []; /** * 是否可以选择 * * @type {string} * @memberof ${srfclassname('${ctrl.codeName}')} */ @Prop({ default: false }) public isOptional?: boolean; /** * 节点导航视图映射 * * @type any * @memberof ${srfclassname('${ctrl.codeName}')} */ protected nodeView: any = { <#list ctrl.getPSDETreeNodes() as node> <#if node.getNavPSAppView?? && node.getNavPSAppView()??> '${node.getNodeType()}':{hasView: true, viewName: 'view-${node.getNavPSAppView().getName()?lower_case}'}, <#else> '${node.getNodeType()}':{hasView: false}, </#if> </#list> }; /** * 初始化方法 * * @memberof ${srfclassname('${ctrl.codeName}')} */ protected created() { this.afterCreated(); } /** * 执行created后的逻辑 * * @memberof ${srfclassname('${ctrl.codeName}')} */ protected afterCreated() { if (this.viewState) { this.viewState.subscribe(({ tag, action, data }) => { if (!Object.is(tag, this.name)) { return; } if (Object.is(action, "load")) { this.load(data); } if (Object.is(action, "save")) { this.$emit("change", this.checkedData); } }); } } /** * 数据加载 * * @memberof ${srfclassname('${ctrl.codeName}')} */ protected load(data: any) { let params: any = data && data.id ? { srfnodeid: data.id } : { srfnodeid: "#" }; this.service .getNodes(JSON.parse(JSON.stringify(this.context)), params) .then((res: any) => { if (res && res.data.records && res.data.records.length > 0) { this.nodeArray.push(res.data.records); this.setcheckedList(); } }); } /** * 跳转方法 * * @param haschild 是否有子节点 * @memberof ${srfclassname('${ctrl.codeName}')} */ protected show(node: any) { this.active++; this.load(node); } /** * 解析选中数据方法 * * @memberof ${srfclassname('${ctrl.codeName}')} */ protected setcheckedList() { if (this.selectedData) { this.selectedData.forEach((item: any) => { this.checkedList.push(item.id); this.checkedList = Array.from(new Set(this.checkedList)); }); } this.checkedData = this.selectedData; } /** * 打开编辑视图 * * @param any 节点对象 * @memberof ${srfclassname('${ctrl.codeName}')} */ protected openModal(node: any = {}) { // let nodeType = this.nodeView[node.id.split(";")[0]]; // if(nodeType.hasView){ // let modalSubject = this.$modal.openModal({ // componentName: nodeType.viewName // } // viewdata:JSON.stringify({ srfkey: node.srfkey }) // ); // modalSubject.subscribe((res: any) => { // if (res) { // return Promise.resolve(res); // } // }); // }else{ // console.log("编辑视图未配置"); // } } /** * 删除节点 * * @memberof ${srfclassname('${ctrl.codeName}')} */ protected deleteNode() { if (this.active == this.nodeArray.length - 2) { this.nodeArray.splice(this.nodeArray.length - 1, 1); } } /** * 选中切换方法 * * @param node 节点数据 * @memberof ${srfclassname('${ctrl.codeName}')} */ protected toggle(node: any) { this.$emit('selectionchange',[node]) } <#ibizinclude> ../@MACRO/CONTROL/CONTROL_BOTTOM-BASE.vue.ftl </#ibizinclude> <#ibizinclude> ../@MACRO/CONTROL/CONTROL-BASE.style.ftl </#ibizinclude>