<#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>