<template>
  <div style="height:100%">
  <basic-container v-show="showType == 1">
    <el-row :gutter="20" class="h-100p">
      <el-col :span="10" class="h-100p">
        <div class="h-100p flex flex-d-c">
          <p>工程节点信息</p>
          <div class="flex">
            <el-input
              placeholder="输入关键字进行过滤"
              v-model="filterText"
              @input="filterChange"
              clearable
            ></el-input>
            <!-- <el-button type="info" class="mg-l-20">导入划分</el-button> -->
          </div>
          <div class="flex1 ov-hidden">
          <el-scrollbar class="h-100p">
            <div v-loading="treeLoad">
              <el-tree
                v-show="!filterText"
                class="filter-tree"
                lazy
                :data="treeData"
                :load="loadNode"
                @node-click="getNodeDetail"
                :props="defaultProps"
                :expand-on-click-node="false"
                highlight-current
                node-key="id"
                ref="tree"
                :default-expanded-keys="defaultExpandedKeys"
              >
                <span
                  class="custom-tree-node"
                  :class="data.moreShow?'show':''"
                  slot-scope="{ node, data }"
                >
                  <!--@mouseover="mouseover(data)" @mouseleave="mouseout(data)"-->
                  <span class="pd-r-20">
                    {{ node.label }}
                    <span class="normal-black">
                      <el-link :underline="false">
                        <i class="el-icon-sort" @click="sortpai(data,node)" v-if="node.level != 1" title="调整排序"></i>
                      </el-link>
                      <el-link :underline="false">
                        <i class="el-icon-upload" style="margin-left:2px;" @click="syncNodeTableHandle(data,node)" title="同步元素表单"></i>
                      </el-link>
                    </span>
                    <!-- <el-dropdown
                      @click="command=>{setLeftType(command,data)}"
                      @visible-change="visiblechange($event,data)"
                    >
                      <el-button
                        type="text"
                        icon="el-icon-more"
                        class="normal-black"
                      >
                      </el-button>
                      <el-dropdown-menu slot="dropdown">
                        <el-dropdown-item
                          @click.native="setLeftType(2,data,node)"
                          icon="el-icon-edit"
                        >编辑节点</el-dropdown-item>
                        <el-dropdown-item
                          @click.native="setLeftType(3,data,node)"
                          icon="el-icon-document-copy"
                        >复制节点</el-dropdown-item>
                        <el-dropdown-item
                          @click.native="deleNode(data,node)"
                          icon="el-icon-close"
                          v-if="node.level !=1"
                        >删除节点</el-dropdown-item>
                        <el-dropdown-item
                          @click.native="setLeftType(4,data,node)"
                          icon="iconfont hcicon-danganziliao-biaogetianxie"
                          class="font-s-12"
                        >元素公式</el-dropdown-item>
                        <el-dropdown-item
                          @click.native="setLeftType(5,data,node)"
                          icon="el-icon-coin"
                        >元素设置</el-dropdown-item>
                        <el-dropdown-item
                          @click.native="nodeInfo(data,node)"
                          icon="el-icon-help"
                        >节点参数</el-dropdown-item>
                        <el-dropdown-item
                          @click.native="importTemplate(data,node)"
                          v-if="node.level == 2"
                          icon="el-icon-upload"
                        >导入划分</el-dropdown-item>
                        <el-dropdown-item
                          v-if="data.parentId!=0"
                          @click.native="sortpai(data,node)"
                          icon="el-icon-sort"
                        >调整排序</el-dropdown-item>
                      </el-dropdown-menu>
                    </el-dropdown> -->
                  </span>
                </span>
              </el-tree>
              <el-tree
                v-show="filterText"
                class="filter-tree"
                :data="treeData"
                @node-click="getNodeDetail"
                :props="defaultProps"
                :expand-on-click-node="false"
                highlight-current
                node-key="id"
                :filter-node-method="filterNode"
                ref="treeall"
              >
                <span
                  class="custom-tree-node"
                  slot-scope="{ node, data }"
                  :class="data.moreShow?'show':''"
                >
                  <span class="pd-r-20">
                    {{ node.label }}
                    <span class="normal-black">
                      <el-link :underline="false">
                        <i class="el-icon-sort" @click="sortpai(data,node)" v-if="node.level != 1" title="调整排序"></i>
                      </el-link>
                      <el-link :underline="false">
                        <i class="el-icon-upload" style="margin-left:2px;" @click="syncNodeTableHandle(data,node)" title="同步元素表单"></i>
                      </el-link>
                    </span>
                    <!-- <el-dropdown
                      @click="command=>{setLeftType(command,data)}"
                      @visible-change="visiblechange($event,data)"
                    >
                      <el-button
                        type="text"
                        icon="el-icon-more"
                        class="normal-black"
                      >
                      </el-button>
                      <el-dropdown-menu slot="dropdown">
                        <el-dropdown-item
                          @click.native="setLeftType(2,data,node)"
                          icon="el-icon-edit"
                        >编辑节点</el-dropdown-item>
                        <el-dropdown-item
                          @click.native="setLeftType(3,data,node)"
                          icon="el-icon-document-copy"
                        >复制节点</el-dropdown-item>
                        <el-dropdown-item
                          @click.native="deleNode(data,node)"
                          icon="el-icon-close"
                          v-if="node.level !=1"
                        >删除节点</el-dropdown-item>
                        <el-dropdown-item
                          @click.native="setLeftType(4,data,node)"
                          icon="iconfont hcicon-danganziliao-biaogetianxie"
                          class="font-s-12"
                        >元素公式</el-dropdown-item>
                        <el-dropdown-item
                          @click.native="setLeftType(5,data,node)"
                          icon="el-icon-coin"
                        >元素设置</el-dropdown-item>
                        <el-dropdown-item
                          @click.native="nodeInfo(data)"
                          icon="el-icon-help"
                        >节点参数</el-dropdown-item>
                        <el-dropdown-item
                          @click.native="importTemplate(data,node)"
                          v-if="node.level == 2"
                          icon="el-icon-upload"
                        >导入划分</el-dropdown-item>
                      </el-dropdown-menu>
                    </el-dropdown> -->
                  </span>
                </span>
              </el-tree>
            </div>
          </el-scrollbar>
        </div>

        </div>
      </el-col>
      <el-col :span="14" class="h-100p flex flex-d-c">
        <div class="mg-b-10">
          <el-button type="primary" size="medium" icon="el-icon-edit-outline" @click="editNodeHandle">编辑当前节点</el-button>
          <el-button type="primary" size="medium" icon="el-icon-document-copy" @click="copyNodeHandle">复制当前节点</el-button>
          <el-button type="warning" size="medium" icon="el-icon-delete" @click="delNodeHandle">删除当前节点</el-button>
          <el-button class="el-btn-purple" type="primary" size="medium" icon="el-icon-s-grid" @click="eleFormulaHandle" v-if="leftType==5">表单设置</el-button>
          <el-button class="el-btn-purple" type="primary" size="medium" icon="el-icon-s-grid" @click="eleHandle" v-else>元素设置</el-button>
          <el-button class="el-btn-purple" type="primary" size="medium" icon="el-icon-help" @click="nodeInfoHandle">节点参数设置</el-button>
          <el-button class="el-btn-purple" type="primary" size="medium" icon="el-icon-upload" :loading="syncBtnLoad" @click="syncInfoHandle">同步节点参数</el-button>
        </div>
        <template v-if="leftType==5">
          <div class="mg-b-10">节点信息</div>
          <div>
            <el-table
              :data="tableData"
              border
              style="width: 100%"
            >
              <el-table-column
                align="center"
                prop="nodeName"
                label="当前节点"
              ></el-table-column>
              <el-table-column
                align="center"
                prop="nodeType"
                :formatter="formatCat"
                label="节点类型"
                width="180"
              ></el-table-column>
              <el-table-column
                align="center"
                prop="parentName"
                label="上级节点"
              ></el-table-column>
            </el-table>
          </div>
          <div class="flex jc-sb">
            <p>
              <span>当前项目信息表</span>
              <!-- <el-button
                @click="showFormElement"
                type="text"
                icon="el-icon-circle-plus-outline"
                class="text-icon mg-l-10"
              ></el-button>
              <el-button
                type="text"
                icon="el-icon-document-copy"
                class="text-icon"
              ></el-button> -->

              <el-button
                type="text"
                style="margin-left:10px;"
                icon="el-icon-edit-outline"
                class="text-icon"
                @click="editEditElementForm()"
              ></el-button>
              <el-button
                type="text"
                icon="el-icon-sort"
                class="text-icon"
                @click="privateTableSort()"
              ></el-button>
            </p>
            <div class="mg-t-10">
            </div>
          </div>
          <div style="flex: 1;position: relative;">
            <el-table
              :data="formData"
              border height="100%"
              style="width: 100%;position: absolute;"
            >
              <el-table-column
                align="center"
                prop="tableName"
                label="表单名称"
              ></el-table-column>
              <el-table-column
                align="center"
                prop="elementTotal"
                width="80"
                label="字段总量"
              ></el-table-column>
              <el-table-column
                align="center"
                prop="fillRate"
                width="100"
                label="填报率"
              ></el-table-column>
              <el-table-column
                align="center"
                prop="tableType"
                :formatter="formatTableType"
                width="100"
                label="表单类型"
              ></el-table-column>
              <el-table-column
                align="center"
                prop="tableOwner"
                :formatter="formatOwner"
                label="所属方"
              ></el-table-column>
              <el-table-column
                label="操作"
                width="240"
              >
                <template slot-scope="scope">
                  <el-button
                    size="mini"
                    @click="handleEdit(scope.$index, scope.row)"
                  >预览</el-button>
                  <el-button
                    size="mini"
                    type="primary"
                    v-throttle='3000'
                    v-show="scope.row.status==0"
                    @click="hideMD(scope.row)"
                  >取消隐藏</el-button>
                  <el-button
                    size="mini"
                    type="primary"
                    v-throttle='3000'
                    v-show="scope.row.status==1"
                    @click="hideMD(scope.row)"
                  >隐藏表单</el-button>
                  <el-button
                    size="mini"
                    type="danger"
                    @click="handleDelete(scope.$index, scope.row)"
                  >删除</el-button>
                </template>
              </el-table-column>
            </el-table>
          </div>
        </template>
        <template v-if="leftType==4">
          <div style="flex: 1;position: relative;">
            <el-table
              :data="formData"
              border height="100%"
              style="width: 100%;position: absolute;"
            >
              <el-table-column
                align="center"
                prop="tableName"
                label="表单名称"
              ></el-table-column>
              <el-table-column
                align="center"
                prop="tableType"
                :formatter="formatTableType"
                label="表单类型"
              ></el-table-column>
              <el-table-column
                align="center"
                prop="fillRate"
                label="填报率"
              ></el-table-column>
              <el-table-column
                label="是否关联清表"
                prop="isLinkTable"
                align="center"
              >
                <template slot-scope="scope">
                  <span v-if="scope.row.isLinkTable == 2">是</span>
                  <span v-else>否</span>
                </template>
              </el-table-column>
              <el-table-column
                align="center"
                prop="tableOwner"
                :formatter="formatOwner"
                label="所属方"
              ></el-table-column>
              <el-table-column
                label="操作"
                width="400"
                align="center"
              >
                <template slot-scope="scope">
                  <el-link
                    type="primary"
                    @click="Associationlist(scope)"
                  >关联清表</el-link>
                  <el-link
                    class="mg-l-10"
                    type="primary"
                    :disabled='scope.row.excelId==-1'
                    @click="rightClick(scope.row.pkeyId,scope.row.excelId,scope.row.id,scope.row.initTableName)"
                  >编辑元素</el-link>
                  <el-link
                    class="mg-l-10"
                    type="primary"
                    :disabled='scope.row.excelId==-1'
                    @click="adjustExcel(scope.row.pkeyId,scope.row.excelId)"
                  >调整表单</el-link>
                  <el-link
                    class="mg-l-10"
                    type="primary"
                    @click="handleEditFormula(scope.$index, scope.row)"
                  >编辑元素公式</el-link>
                  <el-link
                    class="mg-l-10"
                    type="danger"
                    @click="handleDelete(scope.$index, scope.row)"
                  >删除表单</el-link>
                </template>
              </el-table-column>
            </el-table>
          </div>
        </template>
      </el-col>
    </el-row>

  </basic-container>
  <el-row class="h-100p" v-show="showType == 2">
    <el-col :span="6" class="h-100p">
      <basic-container>
        <el-scrollbar class="h-100p">          
          <el-tree
            class="filter-tree"
            lazy
            :data="typeTreeData"
            :load="typeTreeLoadNode"
            @node-click="getTypeTreeDetail"
            :props="defaultProps"
            :expand-on-click-node="false"
            highlight-current
            node-key="id"
          >
          </el-tree>
        </el-scrollbar>
      </basic-container>
    </el-col>
    <el-col :span="18" class="h-100p">
      <basic-container>
        <div  class="flex h-100p flex-d-c">
          <div style="flex: 1;position: relative;">
              <el-table
                :data="formData"
                border height="100%"
                style="width: 100%;position: absolute;"
              >
                <el-table-column
                  align="center"
                  prop="tableName"
                  label="表单名称"
                ></el-table-column>
                <el-table-column
                  align="center"
                  prop="tableType"
                  :formatter="formatTableType"
                  label="表单类型"
                ></el-table-column>
                <el-table-column
                  align="center"
                  prop="fillRate"
                  label="填报率"
                ></el-table-column>
                <el-table-column
                  label="是否关联清表"
                  prop="isLinkTable"
                  align="center"
                >
                  <template slot-scope="scope">
                    <span v-if="scope.row.isLinkTable == 2">是</span>
                    <span v-else>否</span>
                  </template>
                </el-table-column>
                <el-table-column
                  align="center"
                  prop="tableOwner"
                  :formatter="formatOwner"
                  label="所属方"
                ></el-table-column>
                <el-table-column
                  label="操作"
                  width="400"
                  align="center"
                >
                  <template slot-scope="scope">
                    <el-link
                      type="primary"
                      @click="Associationlist(scope)"
                    >关联清表</el-link>
                    <el-link
                      class="mg-l-10"
                      type="primary"
                      :disabled='scope.row.excelId==-1'
                      @click="rightClick(scope.row.pkeyId,scope.row.excelId,scope.row.id,scope.row.initTableName)"
                    >编辑元素</el-link>
                    <el-link
                      class="mg-l-10"
                      type="primary"
                      :disabled='scope.row.excelId==-1'
                      @click="adjustExcel(scope.row.pkeyId,scope.row.excelId)"
                    >调整表单</el-link>
                    <el-link
                      class="mg-l-10"
                      type="primary"
                      @click="handleEditFormula(scope.$index, scope.row)"
                    >编辑元素公式</el-link>
                    <el-link
                      class="mg-l-10"
                      type="danger"
                      @click="handleDelete(scope.$index, scope.row)"
                    >删除表单</el-link>
                  </template>
                </el-table-column>
              </el-table>
            </div>
            <div class="mg-t-10 flex jc-sb">
              <div></div>
              <el-button size="medium" @click="showType = 1">返回WBS树</el-button>
            </div>
        </div>
      </basic-container>
    </el-col>
  </el-row>

  <!-- 编辑元素表单信息 -->
    <el-dialog
      title="编辑元素表单信息"
      :visible.sync="editElementFormTag"
      width="60%"
      :modal-append-to-body="false"
    >
      <div>
        <el-table
          :data="formDatass"
          border
          style="width: 100%"
        >
          <el-table-column
            prop="tableName"
            label="表名"
          >
            <template slot-scope="scope">
              <el-input
                v-model="scope.row.tableName"
                placeholder="请输入表名称"
              ></el-input>
            </template>
          </el-table-column>
          <el-table-column
            prop="tableType"
            label="表类型"
          >
            <template slot-scope="scope">
              <el-select
                v-model="scope.row.tableType"
                placeholder="请选择"
              >
                <el-option
                  v-for="(item,key) in tableTypelist"
                  :key="key"
                  :label="item.dictValue"
                  :value="item.dictKey"
                >
                </el-option>
              </el-select>
            </template>
          </el-table-column>
          <el-table-column
            prop="tableOwner"
            label="所属方"
          >
            <template slot-scope="scope">
              <el-select
                v-model="scope.row.tableOwner"
                placeholder="请选择"
              >
                <el-option
                  v-for="(item,key) in ownerTypeList"
                  :key="key"
                  :label="item.dictValue"
                  :value="item.dictKey"
                >
                </el-option>
              </el-select>
            </template>
          </el-table-column>
          <el-table-column
            prop="fillRate"
            label="填报率"
          >
            <template slot-scope="scope">
              <el-input
                v-model="scope.row.fillRate"
                placeholder="请输入填报率"
              ></el-input>
            </template>
          </el-table-column>
        </el-table>
      </div>
      <span
        slot="footer"
        class="dialog-footer"
      >
        <el-button @click="editElementFormTag = false">取 消</el-button>
        <el-button
          type="primary"
          @click="editeditElementFormMF()"
        >确 定</el-button>
      </span>
    </el-dialog>

    <!-- 调整表单模板 -->
    <div
      v-if="excelHtml"
      class="excelHtml"
    >
      <dynamicExcel
        @remove="removeExcel"
        v-if="excelHtml"
        :pkeyId='GLExcelFrom.id'
      />
    </div>

    <!-- 私有wbs树排序弹框 -->
    <el-dialog
      title="调整排序"
      :visible="sortTag"
      width="50%"
      append-to-body
    >
      <ManualSorting
        v-if="sortTag2"
        @bianhua='bianhua()'
        :sort='sort'
      />
      <span
        slot="footer"
        class="dialog-footer"
      >
        <el-button @click="sortTag=false,sortTag2=false">取 消</el-button>
        <el-button
          type="primary"
          @click="editSort()"
        >确 定</el-button>
      </span>
    </el-dialog>

    <!-- 元素表排序 -->
    <el-dialog
      title="调整排序"
      :visible="excelSortTag"
      width="50%"
      append-to-body
    >
      <ManualSorting
        v-if="excelSortTag2"
        @bianhua='bianhua2()'
        :sort='tableSortList'
      />
      <span
        slot="footer"
        class="dialog-footer"
      >
        <el-button @click="excelSortTag=false">取 消</el-button>
        <el-button
          type="primary"
          @click="editPrivateSort()"
        >确 定</el-button>
      </span>
    </el-dialog>

    <!-- 关联清表 -->
    <el-dialog
      title="关联清表"
      class="excelBox"
      :visible.sync="GLExcel"
      width="500px"
      modal-append-to-body
      append-to-body
      @close="GLExcelMD"
    >
      <div>
        <el-select
          style="width:400px;"
          v-model="GLExcelFrom.name"
          placeholder="请选择"
          @change="changetherr()"
        >
          <el-option
            v-for="(item,key) in GLExcelData"
            :key="key"
            :label="item.name"
            :value="item.id"
          >
          </el-option>
        </el-select>
        <el-scrollbar style="margin-top:20px;height:50vh;">
          <el-input
            style="width:400px;"
            v-model.trim="GLExcelFrom.search"
            placeholder="请输入需要选择的内容"
          ></el-input>
          <el-tree
            :filter-node-method="filterNode222"
            ref="tree"
            class="filter-tree"
            style="margin-top:10px;"
            :props="GLExcelProps"
            :data="exceldata"
            node-key="id"
            accordion
            show-checkbox
            @check="checkchange"
            v-loading="GLExcelLoading"
          >
          </el-tree>
        </el-scrollbar>
      </div>
      <span
        slot="footer"
        class="dialog-footer"
        style="display: flex;justify-content: center;align-items: center;"
      >
        <el-button @click="GLExcelMD()">取 消</el-button>
        <el-button
          style="margin-left:30px;"
          type="primary"
          v-throttle='2000'
          @click="saveLinkTab()"
        >确 定</el-button>
      </span>
    </el-dialog>

    <el-dialog
      :title="dialogTitle"
      :visible.sync="dialogVisible"
      width="50%"
      append-to-body
      :close-on-click-modal="false"
      @closed="saveNodeLoading = false"
    >
      <el-form
        ref="nodeDetail"
        :model="nodeDetail"
        :rules="rules"
        label-width="110px"
      >
        <el-form-item
          label="节点名称"
          prop="nodeName"
        >
          <div class="flex">
            <el-input v-model="nodeDetail.nodeName"></el-input>
            <el-button class="mg-l-10" type="primary" @click="aliasShow">添加别名</el-button>
          </div>
        </el-form-item>
        <el-form-item label="上级节点">
          <el-input
            v-model="nodeDetail.parentName"
          ></el-input>
        </el-form-item>
        <el-form-item
          label="节点类型"
          prop="nodeType"
        >
          <el-select
            v-model="nodeDetail.nodeType"
            disabled
            placeholder="请选择"
            class="w-100p"
          >
            <el-option
              v-for="item in nodeTypelist"
              :key="item.id"
              :label="item.dictValue"
              :value="item.dictKey"
            ></el-option>
          </el-select>
        </el-form-item>
        <el-form-item label="划分编号">
          <el-input v-model="nodeDetail.partitionCode"></el-input>
        </el-form-item>
        <el-form-item label="唯一编码">
          <el-input v-model="nodeDetail.uniqueCode"></el-input>
        </el-form-item>
        <template v-if="nodeDetail.nodeType == 6">
          <el-form-item label="是否有混凝土">
            <el-radio-group
              v-model="nodeDetail.isConcrete"
              size="small"
            >
              <el-radio
                :label="0"
                border
              >无</el-radio>
              <el-radio
                :label="1"
                border
              >有</el-radio>
            </el-radio-group>
          </el-form-item>
          <el-form-item label="是否试验节点">
            <el-radio-group
              v-model="nodeDetail.isExpernode"
              size="small"
            >
              <el-radio
                :label="0"
                border
              >否</el-radio>
              <el-radio
                :label="1"
                border
              >是</el-radio>
            </el-radio-group>
          </el-form-item>
        </template>
        <el-form-item label="内业资料类型" prop="majorDataType">
          <el-select
            v-model="nodeDetail.majorDataType"
            disabled
            placeholder="请选择"
            class="w-100p"
          >
            <el-option
              v-for="item in majorDataTypeList"
              :key="item.id"
              :label="item.dictValue"
              :value="item.dictKey"
            ></el-option>
          </el-select>
        </el-form-item>
      </el-form>
      <span
        slot="footer"
        class="dialog-footer"
      >
        <el-button @click="dialogVisible = false">取 消</el-button>
        <el-button
          type="primary"
          @click="saveNode"
          :loading="saveNodeLoading"
        >确 定</el-button>
      </span>
    </el-dialog>

    <el-dialog
      title="创建新的元素表"
      :visible.sync="eleVisible"
      width="80%"
      append-to-body
      :close-on-click-modal="false"
    >
      <el-form
        ref="eleDialog"
        :model="eleForm"
        :rules="eleRules"
        label-width="110px"
      >
        <el-form-item
          label="表名"
          prop="nodeName"
        >
          <el-input v-model="eleForm.nodeName"></el-input>
        </el-form-item>
        <el-row>
          <el-col :span="12">
            <el-form-item
              label="表类型"
              prop="tableType"
            >
              <el-select
                v-model="eleForm.tableType"
                placeholder="请选择"
                class="w-100p"
              >
                <el-option
                  v-for="item in tableTypelist"
                  :key="item.id"
                  :label="item.dictValue"
                  :value="item.dictKey"
                ></el-option>
              </el-select>
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item
              label="所属方"
              prop="tableOwner"
            >
              <el-select
                v-model="eleForm.tableOwner"
                placeholder="请选择"
                class="w-100p"
              >
                <el-option
                  v-for="item in ownerTypeList"
                  :key="item.id"
                  :label="item.dictValue"
                  :value="item.dictKey"
                ></el-option>
              </el-select>
            </el-form-item>
          </el-col>
        </el-row>
      </el-form>
      <div class="flex jc-sb">
        <div></div>
        <div>
          <el-link
            type="primary"
            @click="importVisible = true"
          >快捷导入</el-link>
          <el-link
            type="primary"
            class="mg-l-20"
            @click="downloadTmp"
          >下载导入模版</el-link>
        </div>
      </div>
      <div class="border-grey">
        <p class="font-c-warning">编辑元素信息(请谨慎操作)</p>
        <el-table
          :data="eleForm.elementList"
          border
          style="width: 100%"
          height="400px"
        >
          <el-table-column
            align="center"
            type="index"
            width="50"
          ></el-table-column>
          <el-table-column
            align="center"
            prop="eName"
            label="字段名称"
          >
            <template slot-scope="scope">
              <el-input
                v-model="scope.row.eName"
                size="small"
                placeholder="请输入内容"
              ></el-input>
            </template>
          </el-table-column>
          <el-table-column
            align="center"
            prop="eType"
            label="数据类型"
            width="120"
          >
            <template slot-scope="scope">
              <el-select
                v-model="scope.row.eType"
                size="small"
                placeholder="请选择"
              >
                <el-option
                  v-for="item in dataTypeList"
                  :key="item.id"
                  :label="item.dictValue"
                  :value="item.dictKey"
                ></el-option>
              </el-select>
            </template>
          </el-table-column>
          <el-table-column
            align="center"
            prop="eLength"
            label="长度"
            width="120"
          >
            <template slot-scope="scope">
              <el-input
                v-model="scope.row.eLength"
                size="small"
                placeholder="请输入内容"
                :disabled="scope.row.eType == 4"
              ></el-input>
            </template>
          </el-table-column>
          <el-table-column
            align="center"
            prop="eAllowDeviation"
            label="允许偏差值"
          >
            <template slot-scope="scope">
              <div class="flex">
                <el-select
                  v-model="scope.row.allow"
                  size="small"
                  placeholder="请选择"
                  style="width:120px"
                >
                  <el-option
                    :key="1"
                    label="≥"
                    value="≥"
                  ></el-option>
                  <el-option
                    :key="2"
                    label="≤"
                    value="≤"
                  ></el-option>
                  <el-option
                    :key="3"
                    label="±"
                    value="±"
                  ></el-option>
                  <el-option
                    :key="4"
                    label="【】"
                    value="【】"
                  ></el-option>
                </el-select>
                <el-input
                  v-model="scope.row.deviation"
                  size="small"
                  placeholder="请输入内容"
                ></el-input>
              </div>
            </template>
          </el-table-column>
          <el-table-column
            align="center"
            prop="eInspectionMethod"
            label="检查方法和频率"
          >
            <template slot-scope="scope">
              <el-input
                v-model="scope.row.eInspectionMethod"
                size="small"
                placeholder="请输入内容"
              ></el-input>
            </template>
          </el-table-column>
          <el-table-column
            align="center"
            label="操作"
            width="80"
          >
            <template slot="header">
              <el-button
                @click="addEleRow(eleForm.elementList)"
                type="text"
                icon="el-icon-circle-plus-outline"
                class="text-icon"
              ></el-button>
            </template>
            <template slot-scope="scope">
              <el-button
                icon="el-icon-remove-outline"
                type="text"
                @click="delEleRow(scope.$index,eleForm.elementList)"
                class="text-icon text-icon-danger"
              ></el-button>
            </template>
          </el-table-column>
        </el-table>
      </div>
      <span
        slot="footer"
        class="dialog-footer"
      >
        <el-button @click="eleVisible = false">取 消</el-button>
        <el-button
          type="primary"
          @click="saveFormAndElementHandle"
        >保 存</el-button>
      </span>
    </el-dialog>

    <el-dialog
      title="模版导入"
      :visible.sync="importVisible"
      width="50%"
      append-to-body
      :close-on-click-modal="false"
    >
      <p>提示:必须按照系统要求的模版格式上传,否则系统识别无效 <el-link
          type="primary"
          @click="downloadTmp"
        >下载导入模版</el-link>
      </p>
      <div>
        <el-button
          size="small"
          type="primary"
          @click="fileClick2"
        >本地上传</el-button>
        <input
          @change="tmpImport"
          type="file"
          hidden
          ref="file2"
          accept=".xls, .xlsx"
        >
      </div>
      <el-table
        :data="tempList"
        border
        style="width: 100%"
      >
        <el-table-column
          align="center"
          prop="eName"
          label="字段信息"
        >
        </el-table-column>
        <el-table-column
          align="center"
          prop="eType"
          label="数据类型"
          width="120"
        >
        </el-table-column>
        <el-table-column
          align="center"
          prop="eLength"
          label="长度"
          width="120"
        >
        </el-table-column>
        <el-table-column
          align="center"
          prop="eAllowDeviation"
          label="允许偏差值"
        >
        </el-table-column>
        <el-table-column
          align="center"
          prop="eInspectionMethod"
          label="检查方法和频率"
        >
        </el-table-column>
      </el-table>
      <span
        slot="footer"
        class="dialog-footer"
      >
        <el-button @click="importVisible = false">取 消</el-button>
        <el-button
          type="primary"
          @click="importHandle"
        >确 定</el-button>
      </span>
    </el-dialog>

    <el-dialog
      :title="(curEleTable.tableName?curEleTable.tableName:'')+''"
      :visible.sync="editEleVisible"
      width="80%"
      append-to-body
      :close-on-click-modal="false"
    >
      <!-- <p class="font-c-warning">编辑元素信息(请谨慎操作)</p> -->
      <el-table
        :data="editEleList"
        border
        style="width: 100%"
        height="400px"
      >
        <el-table-column
          align="center"
          type="index"
          width="50"
        ></el-table-column>
        <el-table-column
          align="center"
          prop="eName"
          label="字段信息"
        >
        </el-table-column>
        <el-table-column
          align="center"
          prop="eType"
          label="数据类型"
          width="120"
          :formatter="eTypeFormatter"
        >
        </el-table-column>
        <el-table-column
          align="center"
          prop="eLength"
          label="长度"
          width="120"
        >
        </el-table-column>
        <el-table-column
          align="center"
          prop="eAllowDeviation"
          label="允许偏差值"
        >
        </el-table-column>
        <el-table-column
          align="center"
          prop="eInspectionMethod"
          label="检查方法和频率"
        >
        </el-table-column>
      </el-table>
      <span
        slot="footer"
        class="dialog-footer"
      >
        <el-button @click="editEleVisible = false">取 消</el-button>
        <!-- <el-button
          type="primary"
          @click="saveEles"
        >确 定</el-button> -->
      </span>
    </el-dialog>

    <el-dialog
      title="元素公式"
      :visible.sync="editEleFormulaVisible"
      width="800px"
      append-to-body
      :close-on-click-modal="false"
    >
      <div class="flex mg-b-10">
        <el-input
          v-model="formulaInput"
          placeholder="请输入名称"
          size="samll" clearable @clear="searchFormulaName"
        ></el-input>
        <el-button type="info" class="mg-l-10" @click="searchFormulaName">搜索</el-button>
      </div>
      <el-table
        :data="editEleListFilter"
        border
        style="width: 100%"
        height="400px"
      >
        <el-table-column
          align="center"
          prop="eName"
          label="字段信息"
        >
        </el-table-column>
        <el-table-column
          align="center"
          label="操作"
          width="200"
        >
          <template slot-scope="scope">
            <el-link
              :type="scope.row.isSaveFormula == 1?'warning':'primary'"
              @click="toFormulaEdit(scope.row)"
            >公式配置</el-link>
            <!-- <el-link
              class="mg-l-10"
              type="danger"
              @click="delEleRowHandle(scope.$index,editEleListFilter)"
            >删除</el-link> -->
          </template>
        </el-table-column>
      </el-table>
    </el-dialog>

    <el-dialog
      title="导入划分"
      :visible.sync="importTemplateVisible"
      width="800px"
      append-to-body
      :close-on-click-modal="false"
    >
      <div v-loading="importLoading">
        <div>
          <el-link
            type="primary"
            @click="handleDownload"
          >下载导入模版</el-link>
        </div>
        <div class="mg-t-20">
          <el-button
            type="primary"
            @click="fileClick"
          >选择文件</el-button>
          <span
            v-if="upFile"
            class="mg-l-20"
          >{{upFile.name}}</span>
          <input
            @change="fileChange"
            type="file"
            hidden
            ref="file"
            accept=".xls, .xlsx"
          >
        </div>
        <div v-if="!upFile">当前还未选择文件,请选择需要导入的文件</div>
      </div>
      <span
        slot="footer"
        class="dialog-footer"
      >
        <el-button @click="importTemplateVisible = false">取 消</el-button>
        <el-button
          type="primary"
          @click="importTemplateHandle"
          :loading="importLoading"
        >导 入</el-button>
      </span>
    </el-dialog>

    <el-dialog
      title="节点参数"
      :visible.sync="nodeInfoVisible"
      width="800px"
      append-to-body
      class="jiedian"
      :close-on-click-modal="false"
      :show-close="false"
    >
      <div>
        <el-button
          type="text"
          icon="el-icon-s-operation"
          class="right-btn"
          @click="setNodeParameters()"
        ></el-button>
        <div class="flexEnd">
          <i
            class="el-icon-circle-plus marbottom10"
            @click="addNodeInfoTable()"
            style="font-size:24px;color:rgb(37, 193, 99);cursor: pointer;"
          ></i>
        </div>
        <el-table
          :data="nodeInfoTable"
          border
          style="width: 100%"
          height="400"
        >
          <el-table-column
            align="center"
            prop="name"
            label="参数名称"
          >
            <template slot-scope="scope">
              <el-select
                v-model="scope.row.k"
                placeholder="请选择"
                class="w-100p"
              >
                <el-option
                  v-for="item in namelist"
                  :key="item.k"
                  :label="item.name"
                  :value="item.k"
                ></el-option>
              </el-select>
            </template>
          </el-table-column>
          <el-table-column
            align="center"
            prop="value"
            label="参数值设置"
          >
            <template slot-scope="scope">
              <el-input v-model="scope.row.v"></el-input>
            </template>
          </el-table-column>
          <el-table-column
            align="center"
            prop="describe"
            label="描述"
          >
            <template slot-scope="scope">
              <el-input v-model="scope.row.remark"></el-input>
            </template>
          </el-table-column>
          <el-table-column
            label="操作"
            width="120"
            align="center"
          >
            <template slot-scope="scope">
              <el-button
                type="text"
                size="small"
                class="text-icon-danger"
                @click="delNodeInfoss(scope.$index)"
              >删除</el-button>
            </template>
          </el-table-column>
        </el-table>
      </div>
      <span
        slot="footer"
        class="dialog-footer"
      >
        <el-button @click="nodeInfoVisible = false">取 消</el-button>
        <el-button
          type="primary"
          @click="nodeInfoSave()"
        >保 存</el-button>
      </span>
    </el-dialog>

    <!-- 设置参数名称 -->
    <el-dialog
      title="设置参数名称"
      :visible.sync="infoNameVisible"
      width="800px"
      append-to-body
      class="jiedian"
      :close-on-click-modal="false"
    >
      <div>
        <div class="flexEnd">
          <i
            class="el-icon-circle-plus marbottom10"
            @click="setParameterName()"
            style="font-size:24px;color:rgb(37, 193, 99);cursor: pointer;"
          ></i>
        </div>
        <el-table
          :data="namelists"
          border
          style="width: 100%"
          height="400"
        >
          <el-table-column
            align="center"
            prop="name"
            label="参数名称"
          >
            <template slot-scope="scope">
              <el-input v-model="scope.row.name"></el-input>
            </template>
          </el-table-column>
          <el-table-column
            align="center"
            prop="key"
            label="参数值KEY"
          >
            <template slot-scope="scope">
              <el-input v-model="scope.row.k"></el-input>
            </template>
          </el-table-column>
          <el-table-column
            align="center"
            prop="describe"
            label="描述"
          >
            <template slot-scope="scope">
              <el-input v-model="scope.row.remark"></el-input>
            </template>
          </el-table-column>
          <el-table-column
            label="操作"
            width="120"
            align="center"
          >
            <template slot-scope="scope">
              <el-button
                type="text"
                size="small"
                class="text-icon-danger"
                @click="delNodeInfo(scope.$index)"
              >删除</el-button>
            </template>
          </el-table-column>
        </el-table>
      </div>
      <span
        slot="footer"
        class="dialog-footer"
      >
        <el-button @click="addParameterName()">保 存</el-button>
        <el-button @click="closeParameter()">关 闭</el-button>
      </span>
    </el-dialog>

    <el-dialog
      title="别名"
      :visible.sync="aliasVisible"
      width="600px"
      append-to-body
      :close-on-click-modal="false"
    >
      <div>
        <div class="flex">
          <el-input v-model="aliasInput" placeholder="请输入节点别名"></el-input>
          <el-button class="mg-l-20" type="primary" @click="addAlias">添加</el-button>
        </div>
        <div class="flex" style="flex-wrap:wrap">
          <div class="mg-t-10" v-for="(tag,index) in aliasArr" :key="index">
            <el-tag closable @close="delAlias(index)">
              {{tag}}
            </el-tag>
            <span v-if="index != aliasArr.length-1">、</span>
          </div>
        </div>
      </div>
      <span
        slot="footer"
        class="dialog-footer"
      >
        <el-button @click="aliasVisible = false">取 消</el-button>
        <el-button  type="primary" @click="saveAliasHandle">确 定</el-button>
      </span>
    </el-dialog>

    <!-- 公式 -->
    <el-dialog title="元素公式" :visible.sync="formulaCompVisible" fullscreen append-to-body class="full-dialog">
      <FormulaEdit :wbsid="id" :nodeid="curTreeData.id" :eleid="formulaCurRow.id" :projectid="projectid" @hideDialog="formulaCompVisible = false" v-if="formulaCompVisible"></FormulaEdit>
    </el-dialog>

    <!-- 编辑元素 -->
    <el-dialog title=" " :visible.sync="editElementVisible" fullscreen append-to-body class="full-dialog">
      <EditElement :pkeyId="editElementQuery.pkeyId" :excelId="editElementQuery.excelId" :id="editElementQuery.id" :initTableName="editElementQuery.initTableName" :pid="editElementQuery.pid" :wbsid="editElementQuery.wbsid" :nodeid="editElementQuery.nodeid" @hideDialog="editElementVisible = false" v-if="editElementVisible"></EditElement>
    </el-dialog>
  </div>
</template>

<script>
import ManualSorting from '@/components/WbsTree/ManualSorting'
import dynamicExcel from "./treeTemplate/dynamicExcel.vue";
import FormulaEdit from '@/views/formula/edit.vue'
import EditElement from '@/views/manager/projectinfo/editElement/editElement.vue'
import {
  saveFormAndElement, selectFormElements,
  importWbsTree, findWbsTreePrivateSameLevel, wbsTreePrivateSort, parameters, saveOrUpdateBatch, keymap, updateBatchNodeTableInfo2, updateStatus
} from "@/api/manager/wbstree";
import {
  saveElement, remove as removeElement, updateBatchElements, getTemplate,
  importWbsElement
} from "@/api/manager/wbsformelement";
import { getLazytree, getDetail, update, findNodeTableByCondition as selectByNodeTable, removeTableByCondition as removeTableById, removePrivateTreeNode, wbsTreePrivateTableSort ,privateSubmitFullName,syncNodeParam,syncNodeTable,tabTypeLazyTree} from "@/api/manager/wbsprivate";
import { findProjectTree as getAlltree } from "@/api/manager/projectinfo";
import { getList as getAttchFromOriginalName } from "@/api/resource/attach";
import { getDictionary } from "@/api/system/dict";
import { mapGetters } from "vuex";
import { getList, tabLazytreeAll, saveLinkTab, getExcelHtml } from '@/api/exctab/excelmodel'
import {getStore,setStore} from '@/util/store'
export default {
  data () {

    var checkMajorDataType = (rule, value, callback) => {
      //console.log(this.nodeDetail.nodeType)
      //console.log(this.nodeDetail.majorDataType)
      if(this.nodeDetail.nodeType == 6){
        if(!this.nodeDetail.majorDataType){
          callback(new Error('工序节点必须选择内业资料类型'));
        }
      }

      callback();
    };

    return {
      formDatass: [],
      editElementFormTag: false,
      jiedianId: '',
      //#region
      sortTag: false,
      sortTag2: false,
      sortArray: [],
      //#endregion

      //#region 关联清表
      loading: false,
      GLExcel: false,
      GLExcelFrom: {
        id: "",
        name: '',
        search: '',//搜素框舒服的值
        ids: '',
        excelId: '',
        initTableName: '',
      },
      GLExcelData: [],//
      GLExcelProps: {
        label: 'name',
        children: 'children',
        disabled: 'hasChildren',
        isLeaf: function (data) {
          let tag = false
          if (!data.hasChildren) {
            tag = true
          }
          if (data.isExistForm == 1) {
            tag = true
          }
          return tag
        },
      },
      exceldata: [],//清表模板
      GLExcelLoading:false,
      //#endregion

      //#region 调整表单
      adjustmentExcel: '',
      excelHtml: false,
      //#endregion

      //#region
      id: '',
      projectid: '',
      filterText: '',
      treeData: [],
      treeLoad: false,
      menuShow: false,
      defaultProps: {
        children: 'children',
        label: 'title',
        isLeaf: function (data) {
          //console.log(data, !data.hasChildren, data.isExistForm);
          let tag = false
          if (!data.hasChildren) {
            tag = true
          }
          if (data.isExistForm == 1) {
            tag = true
          }
          if (data.nodeType >= 6 && data.nodeType <= 13) {
            tag = true
          }
          //中间交工。开工报告、质量评定)
          if(data.majorDataType == 1 || data.majorDataType == 2 || data.majorDataType == 3){
            tag = true
          }
          return tag
          // return !data.hasChildren || (data.isExistForm == 1);
        },
      },
      leftType: 5,
      curTreeData: {},
      curTreeNode: {},
      tableData: [],
      nodeDetail: {},
      formData: [],
      editType: 1,

      dialogVisible: false,
      saveNodeLoading: false,
      nodeTypelist: [],
      majorDataTypeList: [],
      rules: {
        nodeName: [
          { required: true, message: '请输入节点名称', trigger: 'blur' },
        ],
        nodeType: [
          { required: true, message: '请选择节点类型', trigger: 'change' }
        ],
        majorDataType:[
          { validator: checkMajorDataType, trigger: 'change' }
        ]
      },

      eleVisible: false,
      tableTypelist: [],
      dataTypeList: [],
      ownerTypeList: [],
      eleForm: {
        elementList: [],
      },
      eleRules: {
        nodeName: [
          { required: true, message: '请输入表名称', trigger: 'blur' },
        ],
        tableType: [
          { required: true, message: '请选择表类型', trigger: 'change' }
        ],
        tableOwner: [
          { required: true, message: '请选择所属方', trigger: 'change' }
        ],
      },

      importVisible: false,
      tempList: [],

      curEleTable: {},
      editEleVisible: false,
      editEleList: [],
      eleReg: /(≥|≤|±|【】)?([^≥≤±【】]*)/,

      editEleFormulaVisible: false,
      formulaInput: '',
      editEleListFilter:[],
      editEleListAll:[],

      importTemplateVisible: false,
      fileUrl: '',
      upFile: null,
      importLoading: false,

      nodeInfoVisible: false,
      nodeInfoTable: [],
      namelist: [],
      namelists: [],

      infoNameVisible: false,

      excelSortTag: false,
      excelSortTag2: false,
      tableSortList: [],
      //#endregion

      defaultExpandedKeys:[],
      expandName:this.$route.fullPath,

      aliasVisible:false,//别名
      aliasInput:'',
      aliasArr:[],
      
      formulaCompVisible:false,//公式弹框
      formulaCurRow:{},//当前元素

      editElementVisible:false,//编辑元素弹框
      editElementQuery:{
        pkeyId: '',
        excelId: '',
        id: '',
        initTableName:'',
        pid: '',
        wbsid: '',
        nodeid: '',
      },//传参

      syncBtnLoad:false,

      showType:1,
      typeTreeData:[],
    };
  },
  computed: {
    ...mapGetters(["userInfo"]),

    dialogTitle: function () {
      let text = '节点';
      if (this.leftType == 1) {
        text = '新增' + text;
      } else if (this.leftType == 2) {
        text = '编辑' + text;
      }
      return text;
    },
  },
  created () {
    this.init();
    //console.log(this.userInfo)
  },
  methods: {
    //#region
    init () {
      this.id = this.$route.query.wbsid;
      this.projectid = this.$route.query.pid;
      this.getNodeTypelist();
      this.getTableTypelist();
      this.getDataTypelist();
      this.getOwnerTypelist();

      this.defaultExpandedKeys = getStore({name:this.expandName});
    },
    loadNode (node, resolve) {
      let pid = 0;
      if (node.level != 0) {
        pid = node.data.id
      }
      getLazytree(this.id, pid, this.userInfo.tenant_id, this.projectid).then((res) => {
        let arr = [];
        if (Array.isArray(res.data.data)) {
          arr = res.data.data;
        }

        return resolve(arr);
      })
    },
    getNodeDetail (data, node) {
      let parentName = '';
      if (node.parent.data) {
        parentName = node.parent.data.title;
      }
      this.curTreeData = data;
      this.curTreeNode = node;
      this.curTreeData.parentName = parentName;
      getDetail(data.id, this.id, this.projectid).then((res) => {
        res.data.data.parentName = parentName;
        this.tableData = [res.data.data];
        this.nodeDetail = Object.assign({}, res.data.data);
      })
      this.updateNodeTable();

      //获取节点展开路径
      this.getExpandedKeys(node);
    },
    saveNode () {
      this.$refs['nodeDetail'].validate((valid) => {
        if (valid) {
          if (this.editType == 1) {
            this.addNode();
          } else if (this.editType == 2) {
            this.updateNode();
          }
        } else {
          console.log('error submit!!');
          return false;
        }
      });
    },
    addNode () {
      this.saveNodeLoading = true;
      update(this.nodeDetail).then(() => {
        this.updateTreeNewNode();
        this.dialogVisible = false;
        this.$message({
          type: "success",
          message: "新增成功!"
        });
      })
    },
    updateNode () {
      update(this.nodeDetail).then(() => {
        let node = this.tableData[0];
        node.nodeName = this.nodeDetail.nodeName;
        node.nodeType = this.nodeDetail.nodeType;
        this.curTreeData.title = this.nodeDetail.nodeName;
        this.dialogVisible = false;
        this.$message({
          type: "success",
          message: "修改成功!"
        });
      })
    },

    setLeftType (type, data, node) {
      this.jiedianId = data.id
      if (type == 4 || type == 5) {
        this.leftType = type;
      }
      this.curTreeData = data;
      this.curTreeNode = node;
      this.$refs.tree.setCurrentKey(data.id);

      if (type == 1 || type == 2) {
        this.getMajorDataTypeList();
        this.dialogVisible = true;
        this.editType = type;
      }

      getDetail(data.id, this.id, this.projectid).then((res) => {
        let parentName = '';
        if (node.parent.data) {
          parentName = node.parent.data.title;
        }
        res.data.data.parentName = parentName;
        this.tableData = [res.data.data];
        if (type == 1) {
          this.nodeDetail = {
            parentId: res.data.data.id,
            parentName: parentName,
            projectId: res.data.data.projectId
          };
        } else {
          this.nodeDetail = Object.assign({}, res.data.data);
        }
        this.nodeDetail.type = 1;//	'1'节点 '2'表单
        this.nodeDetail.wbsId = this.id;
        this.nodeDetail.tenantId = this.userInfo.tenant_id
      })
      if (this.leftType == 4) {
        selectByNodeTable(data.id, this.projectid, this.id).then((res) => {
          if (res.data.data.length) {
            this.formData = res.data.data;
          } else {
            this.formData = [];
          }
        })
      }

      //获取节点展开路径
      this.getExpandedKeys(node);

    },

    showFormElement () {
      if (!this.nodeDetail.id) {
        this.$message({
          type: "warning",
          message: "请先选择在哪个节点下创建表"
        });
        return;
      }
      this.eleVisible = true;
    },

    addEleRow (list) {
      list.push({});
    },
    delEleRow (index, list) {
      list.splice(index, 1);
    },
    saveFormAndElementHandle () {
      this.$refs['eleDialog'].validate((valid) => {
        if (valid) {
          this.eleForm.wbsId = this.id;
          this.eleForm.tenantId = this.userInfo.tenant_id;
          this.eleForm.nodeType = -1;
          this.eleForm.type = 2;//	'1'节点 '2'表单
          this.eleForm.parentId = this.nodeDetail.id;
          this.eleForm.elementList.forEach((element) => {
            element.eAllowDeviation = (element.allow ? element.allow : '') + (element.deviation ? element.deviation : '');
            if (element.eType == 4) {
              element.eLength = 0;
            }
          })
          saveFormAndElement(this.eleForm).then(() => {
            //console.log(res)
            this.updateTreeNewNode();
            this.updateNodeTable();
            this.eleVisible = false;
            this.$message({
              type: "success",
              message: "新增成功!"
            });
          })
        } else {
          console.log('error submit!!');
          return false;
        }
      });
    },

    updateTreeNewNode () {
      getLazytree(this.id, this.nodeDetail.parentId, this.userInfo.tenant_id, this.projectid).then((res) => {
        this.$refs.tree.updateKeyChildren(this.nodeDetail.parentId, res.data.data)
      })
    },

    updateNodeTable () {
      selectByNodeTable(this.curTreeData.id, this.projectid, this.id).then((res) => {
        if (res.data.data.length) {
          this.formData = res.data.data;
        } else {
          this.formData = [];
        }
      })
    },

    deleNode (data, node) {
      this.$confirm('此操作将删除节点【' + data.title + '】, 是否继续?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        removePrivateTreeNode(data.primaryKeyId).then(() => {
          this.$refs.tree.remove(node);
          this.$message({
            type: "success",
            message: "删除成功!"
          });
        })
      }).catch(() => {

      });
    },

    importHandle () {

    },

    handleEdit (index, row) {
      this.curEleTable = row;
      selectFormElements(this.curEleTable.id).then((res) => {
        res.data.data.forEach((element) => {
          this.eleReg.exec(element.eAllowDeviation);
          // console.log(RegExp.$1)
          // console.log(RegExp.$2)
          element.allow = RegExp.$1 ? RegExp.$1 : '';
          element.deviation = RegExp.$2 ? RegExp.$2 : '';
        })
        this.editEleList = res.data.data;
      })
      this.editEleVisible = true;
    },
    handleDelete (index, row) {
      this.$confirm('是否删除  ' + row.tableName + '  ?', '删除元素表', {
        distinguishCancelAndClose: true,
        confirmButtonText: '删除',
        cancelButtonText: '取消'
      }).then(() => {
        removeTableById(row.id, this.projectid, this.id).then(() => {
          this.formData.splice(index, 1);
          this.$message({
            type: "success",
            message: "删除成功!"
          });
        })
      })
    },
    async hideMD (row) {//隐藏按钮
      const code = await this.updateStatus(row.pkeyId, row.status)
      if (code == 200) {
        if (row.status == 0) {
          row.status = 1
        } else {
          row.status = 0
        }
      }
    },
    async updateStatus (pKeyId, status) {//隐藏功能激活
      const { data: res } = await updateStatus({ pKeyId })
      if (res.code == 200) {
        this.$message({
          type: 'success',
          message: status == 1 ? '隐藏成功' : '激活成功'
        })
      }
      return res.code
    },
    handleEditFormula (index, row) {
      this.curEleTable = row;
      selectFormElements(this.curEleTable.id).then((res) => {

        this.editEleListFilter = res.data.data;
        this.editEleListAll = [].concat(this.editEleListFilter);
      })
      this.editEleFormulaVisible = true;
    },

    //搜索 筛选
    searchFormulaName(){
      this.editEleListFilter = this.editEleListAll.filter((ele)=>{
        return ele.eName.indexOf(this.formulaInput) > -1;
      })
    },

    saveNewEle (row) {
      row.eAllowDeviation = (row.allow ? row.allow : '') + (row.deviation ? row.deviation : '');
      row.fId = this.curEleTable.id;
      row.initTableName = this.curEleTable.initTableName;
      if (row.eType == 4) {
        row.eLength = 0;
      }
      saveElement(row).then((res) => {
        if (res.data.data) {
          this.$set(row, 'id', res.data.data.id);
          this.$set(row, 'ekey', res.data.data.ekey);
          this.$message({
            type: "success",
            message: "保存成功!"
          });
        }
      })
    },
    delEleRowHandle (index, list) {
      let row = list[index];
      if (row.id) {
        //有id需要请求删除
        this.$confirm('是否确认删除?', '删除元素', {
          distinguishCancelAndClose: true,
          confirmButtonText: '删除',
          cancelButtonText: '取消'
        }).then(() => {
          removeElement(row.id, this.curEleTable.initTableName, row.ekey).then(() => {
            list.splice(index, 1);
          })
        })
      } else {
        list.splice(index, 1);
      }
    },
    saveEles () {
      for (let i = 0; i < this.editEleList.length; i++) {
        if (!this.editEleList[i].id) {
          this.$message({
            type: "warning",
            message: "请先将新增的元素点击保存"
          });
          return;
        }
      }
      if (this.editEleList.length > 0) {
        this.editEleList.forEach((element) => {
          element.eAllowDeviation = (element.allow ? element.allow : '') + (element.deviation ? element.deviation : '');
          if (element.eType == 4) {
            element.eLength = 0;
          }
        })
        updateBatchElements(this.editEleList, this.curEleTable.initTableName).then(() => {
          this.editEleVisible = false;
          this.updateNodeTable();
          this.$message({
            type: "success",
            message: "保存成功!"
          });
        })
      } else {
        this.editEleVisible = false;
        this.updateNodeTable();
        this.$message({
          type: "success",
          message: "保存成功!"
        });
      }
    },

    filterChange () {
      //console.log(this.$refs)
      //debugger
      if (this.treeData.length > 0) {
        this.$refs.treeall.filter(this.filterText);
        return;
      }
      this.treeLoad = true;
      getAlltree(this.projectid, this.id).then((res) => {
        this.treeLoad = false;
        this.treeData = res.data.data;
        this.$nextTick(() => {
          this.$refs.treeall.filter(this.filterText);
        })
      })
    },

    importTemplate (data) {
      this.importTemplateVisible = true;
      this.curTreeData = data;

      if (!this.fileUrl) {
        getAttchFromOriginalName(1, 20, {
          originalName: 'WBS划分模板.xls'
        }).then((res) => {
          if (res.data.data.records.length) {
            this.fileUrl = res.data.data.records[0].link;
          } else {
            this.fileUrl = '';
          }

        })
      }

    },

    importTemplateHandle () {
      if (!this.upFile) {
        this.$message({
          type: "warning",
          message: "请先选择文件再进行导入"
        });
        return;
      }
      let forms = new FormData();
      forms.append('excelFile', this.upFile);
      let wbsTreeFu = {
        wbsId: this.id,
        parentId: this.curTreeData.id,
        // ancestors:'0,'+this.curTreeData.id,
      }
      let json = JSON.stringify(wbsTreeFu);
      let blob = new Blob([json], { type: 'application/json' })
      forms.append('wbsTreeFu', blob);
      this.importLoading = true;
      importWbsTree(forms).then(() => {
        //this.$router.go(0)
        let node = this.$refs.tree.getNode(this.curTreeData.id);
        node.isLeaf = false;
        this.importTemplateVisible = false;
        this.upFile = null;
      }).finally(() => {
        this.importLoading = false;
      })
    },

    handleDownload () {
      if (this.fileUrl) {
        window.open(this.fileUrl);
      } else {
        this.$message({
          type: "warning",
          message: "请先在附件管理上传【WBS划分模板.xls】文件"
        });
      }
    },
    fileClick () {
      this.$refs.file.click();
    },

    fileChange (e) {
      const file = e.target.files[0]
      if (!file) {
        // 如果用户没有选择图片,只是点了文件上传这个按钮
        return
      }
      //console.log(file)
      this.upFile = file;
    },
    editNodeInfo (index, row) {
      this.$set(row, 'isEdit', true);
    },
    saveNodeInfoHandle (index, row) {
      row.isEdit = false;
    },

    downloadTmp () {
      getTemplate().then((res) => {
        //console.log(res)
        let blob = new Blob([res.data], {
          type: 'application/vnd.ms-excel'
        });
        //console.log(blob)
        let filename = Date.parse(new Date()) + '.xls';
        if (window.navigator.msSaveOrOpenBlob) {
          // 兼容IE10
          window.navigator.msSaveBlob(blob, filename);
        } else {
          //  兼容chrome/firefox
          let aTag = document.createElement('a');
          aTag.download = Date.parse(new Date()) + '.xls';
          aTag.href = window.URL.createObjectURL(blob);
          aTag.click();
          URL.revokeObjectURL(aTag.href);
        }
      })
    },

    fileClick2 () {
      this.$refs.file2.click();
    },
    tmpImport (e) {
      const file = e.target.files[0];
      const formData = new FormData();
      formData.append('file', file);
      //console.log(file.name)
      importWbsElement(formData).then((res) => {
        res.data.data.forEach((element) => {
          element.eName = element.elementName;
          element.eLength = element.elementLength;
          element.eType = Number(element.elementType);
          element.eAllowDeviation = element.elementAllowDeviation;
          element.eInspectionMethod = element.elementInspectionMethod;
          this.eleReg.exec(element.eAllowDeviation);
          // console.log(RegExp.$1)
          // console.log(RegExp.$2)
          element.allow = RegExp.$1 ? RegExp.$1 : '';
          element.deviation = RegExp.$2 ? RegExp.$2 : '';
        })
        this.eleForm.elementList = res.data.data;
        this.importVisible = false;
      }).finally(() => {
        e.target.value = '';
      })
    },

    visiblechange (value, data) {
      this.$set(data, 'moreShow', value)
    },

    bianhua2 () {
      this.excelSortTag2 = false
      this.$nextTick(() => {
        this.excelSortTag2 = true
      })
    },
    //私有树的元素表修改排序
    privateTableSort () {
      if (!this.curTreeData.id) {
        this.$message({
          type: "warning",
          message: "请先选择需要排序的节点"
        })
        return;
      }
      this.tableSortList = this.formData.map((form, index) => {
        return {
          sort: index + 1,
          nodeName: form.tableName,
          pkeyId: form.pkeyId,
        }
      })
      this.excelSortTag = true
      this.excelSortTag2 = true
    },
    editPrivateSort () {
      wbsTreePrivateTableSort(this.tableSortList).then(() => {
        this.updateNodeTable();
        this.$message({
          type: "success",
          message: "排序成功!"
        });
        this.excelSortTag = false;
        this.excelSortTag2 = false;
      })
    },

    //解析元素数据类型
    eTypeFormatter (row) {
      let text = '';
      for (let i = 0; i < this.dataTypeList.length; i++) {
        if (this.dataTypeList[i].dictKey == row.eType) {
          text = this.dataTypeList[i].dictValue;
          break;
        }
      }
      return text;
    },

    //跳转到公式配置页面
    toFormulaEdit (row) {
      // this.$router.push({
      //   path: '/formula/edit',
      //   query: {
      //     wbsid: this.id,
      //     eleid: row.id,
      //     nodeid:this.curTreeData.id,
      //     projectid:this.projectid
      //   }
      // });

      this.formulaCurRow = row;
      this.formulaCompVisible = true;
    },

    getNodeTypelist () {
      if (this.nodeTypelist.length > 1) {
        return;
      }
      getDictionary({
        code: 'wbs_node_type'
      }).then((res) => {
        res.data.data.forEach(element => {
          element.dictKey = Number(element.dictKey)
        });
        this.nodeTypelist = res.data.data;
      })
    },
    getMajorDataTypeList () {
      if (this.majorDataTypeList.length > 1) {
        return;
      }
      getDictionary({
        code: 'major_data_type'
      }).then((res) => {
        res.data.data.forEach(element => {
          element.dictKey = Number(element.dictKey)
        });
        this.majorDataTypeList = res.data.data;
      })
    },

    getTableTypelist () {
      if (this.tableTypelist.length > 1) {
        return;
      }
      getDictionary({
        code: 'table_type'
      }).then((res) => {
        res.data.data.forEach(element => {
          element.dictKey = Number(element.dictKey)
        });
        this.tableTypelist = res.data.data;
      })
    },
    getDataTypelist () {
      if (this.dataTypeList.length > 1) {
        return;
      }
      getDictionary({
        code: 'data_type'
      }).then((res) => {
        res.data.data.forEach(element => {
          element.dictKey = Number(element.dictKey)
        });
        this.dataTypeList = res.data.data;
      })
    },
    getOwnerTypelist () {
      if (this.ownerTypeList.length > 1) {
        return;
      }
      getDictionary({
        code: 'owner_type'
      }).then((res) => {
        res.data.data.forEach(element => {
          element.dictKey = Number(element.dictKey)
        });
        this.ownerTypeList = res.data.data;
      })
    },

    formatCat (row, column, cellValue) {
      for (let i = 0; i < this.nodeTypelist.length; i++) {
        if (this.nodeTypelist[i].dictKey == cellValue) {
          return this.nodeTypelist[i].dictValue
        }
      }
      return cellValue;
      //console.log(cellValue)
    },
    formatTableType (row, column, cellValue) {
      for (let i = 0; i < this.tableTypelist.length; i++) {
        if (this.tableTypelist[i].dictKey == cellValue) {
          return this.tableTypelist[i].dictValue
        }
      }
      return cellValue;
      //console.log(cellValue)
    },
    formatOwner (row, column, cellValue) {
      for (let i = 0; i < this.ownerTypeList.length; i++) {
        if (this.ownerTypeList[i].dictKey == cellValue) {
          return this.ownerTypeList[i].dictValue
        }
      }
      return cellValue;
      //console.log(cellValue)
    },
    formatdataType (row, column, cellValue) {
      for (let i = 0; i < this.dataTypeList.length; i++) {
        if (this.dataTypeList[i].dictKey == cellValue) {
          return this.dataTypeList[i].dictValue
        }
      }
      return cellValue;
    },

    filterNode (value, data) {
      if (!value) return true;
      return data.title.indexOf(value) !== -1;
    },
    //#endregion

    //#region  wbs私有树排序
    async sortpai (data) {
      console.log(data);
      await this.findWbsTreePrivateSameLevel({
        parentId: data.parentId,
        projectId: this.projectid,
        wbsId: this.id
      })
      this.sortTag = true
      this.sortTag2 = true
    },
    editSort () {
      this.wbsTreePrivateSort()
    },
    bianhua () {
      this.sortTag2 = false
      this.$nextTick(() => {
        this.sortTag2 = true
      })
    },
    async wbsTreePrivateSort () {//wbs私有树节点手动排序
      const { data: res } = await wbsTreePrivateSort(this.sort)
      console.log(res);
      if (res.code == 200) {
        this.sortTag = false
        this.sortTag2 = false
        this.getLazytreessss()
      }
    },
    async findWbsTreePrivateSameLevel (da) {//wbs私有树同级节点接口
      const { data: res } = await findWbsTreePrivateSameLevel(da)
      console.log(res);
      if (res.code == 200) {
        this.sort = res.data
      }
    },
    async getLazytreessss () {
      const { data: res } = await getLazytree(this.id, 0, this.userInfo.tenant_id, this.projectid)
      console.log(res);
      if (res.code == 200) {
        this.treeData = res.data
      }
    },
    //#endregion

    //#region 关联清表
    async getList (da) {//获取清表模板信息
      const { data: res } = await getList(da)
      console.log(res);
      if (res.code === 200 && res.msg === '操作成功') {
        this.GLExcelData = res.data.records
      }
    },
    async tabLazytreeAll () {//清表树信息
      this.GLExcelLoading = true;
      const { data: res } = await tabLazytreeAll({
        modeId: this.GLExcelFrom.name,
        name: this.GLExcelFrom.search,
      })
      this.GLExcelLoading = false;
      console.log(res);
      if (res.code === 200 && res.msg === '操作成功') {
        this.exceldata = res.data
      }
    },
    Associationlist (scope) {//关联清表点击事件
      console.log(scope.row);
      this.GLExcel = true
      this.getList({
        current: 1,
        size: 100000,
        parentId: 0,
      })
      this.GLExcelFrom.name = scope.row.modeId
      setTimeout(() => {
        this.$refs.tree.setCheckedKeys([scope.row.excelId])
      }, 2000)
      this.GLExcelFrom.id = scope.row.pkeyId
      this.GLExcelFrom.excelId = scope.row.excelId
      this.GLExcelFrom.ids = scope.row.id
      this.GLExcelFrom.initTableName = scope.row.initTableName
    },
    changetherr () {//清表类型选择框change事件
      if (this.GLExcelFrom.name != "") {
        this.GLExcelFrom.search = ''
        this.tabLazytreeAll()
      }
    },
    GLExcelMD () {//弹框关闭事件
      this.GLExcelFrom.name = ""
      this.GLExcelFrom.search = ''
      this.GLExcelFrom.id = ''
      this.exceldata = []
      this.$refs.tree.setCheckedKeys([])
      this.GLExcel = false
    },
    checkchange (data) {//节点选中回调
      if (this.$refs.tree.getCheckedNodes().length === 0) {
        this.$refs.tree.setCheckedKeys([])
      } else if (this.$refs.tree.getCheckedNodes().length >= 1) {
        this.$refs.tree.setCheckedKeys([data.id])
      }
    },
    async saveLinkTab () {//保存按钮
      let checkNodes = this.$refs.tree.getCheckedNodes();
      if (checkNodes.length > 0) {
        let node = checkNodes[checkNodes.length - 1];
        if(node.fileType != 3){
          this.$message({
            type: "warning",
            message: "请先上传Excel表"
          });
          return;
        }
        const { data: res } = await saveLinkTab({
          exceTabId: node.id,
          tabId: this.GLExcelFrom.id,
        })
        console.log(res);
        if (res.code === 200) {
          this.$message({
            type: 'success',
            message: '关联清表成功',
          })
          this.GLExcel = false
          this.rightClick(this.GLExcelFrom.id, this.GLExcelFrom.excelId, this.GLExcelFrom.ids, this.GLExcelFrom.initTableName,)
        }
      } else {
        this.$message({
          type: 'warning',
          message: '请先设置清表',
        })
      }
    },
    filterNode222 (value, data) {
      if (!value) return true;
      return data.name.indexOf(value) !== -1;
    },
    //#endregion

    //#region 节点参数
    nodeInfo (data) {//节点参数按钮
      this.keymap()
      //console.log(data)
      this.jiedianId = data.primaryKeyId
      this.parameters(data.primaryKeyId)
      this.nodeInfoVisible = true;
    },
    addNodeInfoTable () {//添加节点参数数据
      this.nodeInfoTable.unshift({ k: '', v: '', remark: '', wbsId: this.jiedianId, type: 1 })
    },
    delNodeInfo (key) {//设置参数名称中的删除按钮
      this.namelists.splice(key, 1)
    },
    delNodeInfoss (key) {//节点参数
      this.nodeInfoTable.splice(key, 1)
    },
    setNodeParameters () {//打开设置节点参数弹框按钮
      this.infoNameVisible = true
      this.namelists = [...this.namelist]
    },
    async setParameterName () {//设置参数名称中添加节点参数按钮
      // wbsId: this.jiedianId
      this.namelists.unshift({ name: '', remark: '', k: '', type: 0, })
    },
    async nodeInfoSave () {//节点参数弹框保存按钮
      if (this.nodeInfoTable) {
        if(this.nodeInfoTable.length == 0){
          await this.saveOrUpdateBatch([{
            "wbsId": this.jiedianId,
            "type": -1,
          }])
          this.nodeInfoVisible = false
          this.$message({
            type: "success",
            message: "保存参数节点成功!"
          })
          return;
        }

        let tag = true
        this.nodeInfoTable.forEach(val => {
          if (!val.k | !val.v) {
            return tag = false
          }

          if(!val.name){
            for (let i = 0; i < this.namelist.length; i++) {
              if(this.namelist[i].k == val.k){
                val.name = this.namelist[i].name;
                return;
              }
            }
          }

        })
        if (tag) {
          await this.saveOrUpdateBatch(this.nodeInfoTable)
          this.nodeInfoVisible = false
          this.$message({
            type: "success",
            message: "设置参数节点成功!"
          })
        } else {
          this.$message({
            type: "error",
            message: "请填写所有的参数名称和参数值!"
          })
        }
      } else {
        this.$message({
          type: "error",
          message: "请先设置参数节点!"
        })
      }
    },
    async addParameterName () {//设置参数名称中的保存按钮
      if (this.namelists.length) {
        let tag = true
        this.namelists.forEach(val => {
          if (!val.name || !val.k) {
            return tag = false
          }
        })
        if (tag) {
          await this.saveOrUpdateBatch(this.namelists) //保存设置参数
          this.infoNameVisible = false
          this.keymap()
        } else {
          this.$message({
            type: "error",
            message: "请填写所有的参数名称和参数值KEY!"
          })
        }
      } else {
        this.$message({
          type: "warning",
          message: "请先添加参数"
        })
      }
    },
    closeParameter () {//设置参数名称,关闭按钮
      this.namelists = []
      this.infoNameVisible = false
    },
    async parameters (wbsId) {//获取接待你参数列表
      const { data: res } = await parameters({ wbsId })
      console.log(res);
      if (res.code == 200) {
        this.nodeInfoTable = res.data
      }
    },
    async saveOrUpdateBatch (da) {//保存
      const { data: res } = await saveOrUpdateBatch(da)
      console.log(res);
    },
    async keymap () {//节点参数枚举
      const { data: res } = await keymap()
      console.log(res);
      if (res.code == 200) {
        this.namelist = res.data
      }
    },
    //#endregion

    //#region 调整表单
    adjustExcel (pkeyId, excelId) {//调整表单
      this.GLExcelFrom.id = pkeyId
      this.getExcelHtml(pkeyId)
    },
    async getExcelHtml (pkeyId) {
      const { data: res } = await getExcelHtml({ pkeyId })
      console.log(res);
      if (res.code === 200) {
        localStorage.setItem('excelHtml', res.data)
        this.adjustmentExcel = res.data
        this.excelHtml = true
      }
    },
    removeExcel () {
      this.excelHtml = false
    },
    //#endregion

    //#region 编辑元素
    async rightClick (pkeyId, excelId, id, initTableName) {
      await this.getExcelHtml2(pkeyId)

      // this.$router.push({
      //   path: '/project/editElement',
      //   query: {
      //     pkeyId: pkeyId,
      //     excelId: excelId,
      //     id: id,
      //     initTableName,
      //     pid: this.$route.query.pid,
      //     wbsid: this.$route.query.wbsid,
      //     nodeid:this.curTreeData.id,
      //   }
      // })

      this.editElementQuery.pkeyId = pkeyId;
      this.editElementQuery.excelId = excelId;
      this.editElementQuery.id = id;
      this.editElementQuery.initTableName = initTableName;
      this.editElementQuery.pid = this.$route.query.pid;
      this.editElementQuery.wbsid = this.$route.query.wbsid;
      this.editElementQuery.nodeid = this.curTreeData.id;

      this.editElementVisible = true;
    },
    async getExcelHtml2 (pkeyId) {
      const { data: res } = await getExcelHtml({ pkeyId })
      console.log(res);
      if (res.code === 200) {
        localStorage.setItem('editElement', res.data)
      }
    },
    //#endregion

    //#region 元素表单信息
    editEditElementForm () {//标记元素
      if (this.formData.length) {
        let da = []
        this.formDatass = [...this.formData]
        this.formDatass.forEach(val => {
          da.push({
            tableType: val.tableType - 0,
            tableOwner: val.tableOwner - 0,
            pkeyId: val.pkeyId,
            tableName: val.tableName,
            fillRate: val.fillRate,
          })
        })
        this.formDatass = da
        this.editElementFormTag = true
      }
    },
    editeditElementFormMF () {//保存按钮
      let da = []
      let tag = true
      this.formDatass.forEach(val => {
        if (!val.tableName || !val.tableType || !val.tableOwner) {
          tag = false
          return
        } else {
          da.push({
            pkeyId: val.pkeyId,
            nodeName: val.tableName,
            tableType: val.tableType,
            tableOwner: val.tableOwner,
            fillRate: val.fillRate,
          })
        }

      })
      if (tag) {
        this.updateBatchNodeTableInfo2(da)
      } else {
        this.$message({
          type: 'success',
          message: '请填写完整元素表单的所有信息!',
        })
      }
    },
    async updateBatchNodeTableInfo2 (da) {//共有编辑元素
      const { data: res } = await updateBatchNodeTableInfo2(da)
      console.log(res);
      if (res.code == 200) {
        this.editElementFormTag = false
        this.updateNodeTable()
      }
    },
    //#endregion

    //获取节点展开路径
    getExpandedKeys(node){
      //console.log(node)
      let expandedKeys = [];
      while(node.parent){
        expandedKeys.push(node.data.id);
        node = node.parent;
      }
      setStore({
        name:this.expandName,
        content:expandedKeys,
        type:true//sessionStorage
      })
      //console.log(expandedKeys)
    },

    //触发节点参数
    nodeInfoHandle(){
      if(!this.curTreeData.id){
        this.$message({
          type: "warning",
          message: "请先选择节点"
        })
        return;
      }

      this.nodeInfo(this.curTreeData)
    },

    eleFormulaHandle(){
      if(!this.curTreeData.id || !this.curTreeNode.id){
        this.$message({
          type: "warning",
          message: "请先选择节点"
        })
        return;
      }
      this.setLeftType(4,this.curTreeData,this.curTreeNode);
      // this.showType = 2;
    },

    editNodeHandle(){
      if(!this.curTreeData.id || !this.curTreeNode.id){
        this.$message({
          type: "warning",
          message: "请先选择节点"
        })
        return;
      }
      this.setLeftType(2,this.curTreeData,this.curTreeNode)
    },
    copyNodeHandle(){
      if(!this.curTreeData.id || !this.curTreeNode.id){
        this.$message({
          type: "warning",
          message: "请先选择节点"
        })
        return;
      }
    },
    delNodeHandle(){
      if(!this.curTreeData.id || !this.curTreeNode.id){
        this.$message({
          type: "warning",
          message: "请先选择节点"
        })
        return;
      }
      if(this.curTreeNode.level == 1){
        this.$message({
          type: "warning",
          message: "当前节点无法删除"
        })
        return;
      }
      this.deleNode(this.curTreeData,this.curTreeNode)
    },

    eleHandle(){
      if(!this.curTreeData.id || !this.curTreeNode.id){
        this.$message({
          type: "warning",
          message: "请先选择节点"
        })
        return;
      }

      this.setLeftType(5,this.curTreeData,this.curTreeNode);
    },

    syncInfoHandle(){
      this.$confirm('是否同步节点参数?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        this.syncBtnLoad = true;
        syncNodeParam(this.projectid).then(() => {
          this.$message({
            type: "success",
            message: "同步成功!"
          });
        }).finally(()=>{
          this.syncBtnLoad = false;
        })
      })
      
    },


    //显示别名弹窗
    aliasShow(){
      this.aliasVisible = true;
      if(this.nodeDetail.fullName){
        this.aliasArr = this.nodeDetail.fullName.split(',');
      }else{
        this.aliasArr = [];
      }
      this.aliasInput = '';
    },

    addAlias(){
      if(this.aliasInput){
        this.aliasArr.push(this.aliasInput);
        this.aliasInput = '';
      }
    },
    delAlias(index){
      this.aliasArr.splice(index,1);
    },

    saveAliasHandle(){
      this.nodeDetail.fullName = this.aliasArr.join(',');
      if (this.editType == 1) {
        //新增
        this.aliasVisible = false;
      } else if (this.editType == 2) {
        //编辑 私有
        privateSubmitFullName(
          this.nodeDetail.pKeyId,this.nodeDetail.fullName
        ).then(()=>{
          this.$message({
            type: 'success',
            message: '保存成功',
          })
          this.aliasVisible = false;
        })
      }
    },

    syncNodeTableHandle(data){
      this.$confirm('是否同步节点【'+data.title+'】?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        let notify = this.$notify({
          title: '提示',
          message: '节点数据同步中...',
          duration: 0
        });
        syncNodeTable(data.primaryKeyId).then(()=>{
          this.updateNodeTable();
          this.$message({
            type: 'success',
            message: '同步成功',
          })
        }).catch(()=>{
          this.$message({
            type: "error",
            message: "同步失败"
          })
        }).finally(()=>{
          notify.close();
        })
      })
    },

    typeTreeLoadNode (node, resolve) {
      let pid = 0;
      if (node.level != 0) {
        pid = node.data.id
      }
      tabTypeLazyTree(pid,this.projectid).then((res) => {
        let arr = [];
        if (Array.isArray(res.data.data)) {
          arr = res.data.data;
        }

        return resolve(arr);
      })
    },

    getTypeTreeDetail(){

    },

  },
  watch: {
    'GLExcelFrom.search' (val) {
      console.log(val);
      if (this.exceldata) {
        this.$refs.tree.filter(val);
      }
    }
  },
  components: {
    dynamicExcel,
    ManualSorting,
    FormulaEdit,
    EditElement
  },
};
</script>

<style scoped lang="scss">
.font-s-12 /deep/ .iconfont {
  font-size: 12px;
}
.el-popper[x-placement^="bottom"] {
  margin-top: -6px;
}
.right-btn {
  position: absolute;
  right: 20px;
  top: 10px;
  font-size: 20px;
}
.custom-tree-node {
  .normal-black {
    display: none;
  }
  &:hover {
    .normal-black {
      display: inline-block;
    }
  }
  &.show .normal-black {
    display: inline-block;
  }
}
.excelBox {
  /deep/.el-dialog__body {
    padding: 20px;
  }
}
//调整表单样式
.excelHtml {
  position: absolute;
  z-index: 999999;
  top: 50px;
  left: 0px;
  width: 100%;
  height: 100%;
}
.jiedian {
  /deep/.el-dialog__body {
    padding: 10px 20px !important;
  }
}
.filter-tree {
  min-width: 100%;
  display: inline-block;
}

.full-dialog{
  /deep/ .el-dialog__body{
    padding-bottom: 0;
    padding-top: 0;
  }

  /deep/ .basic-container{
    height: calc(100vh - 60px);
  }
}
.my-basic-con {
  padding: 6px 6px;
}
</style>