Procházet zdrojové kódy

归档树管理页面布局

duy před 2 roky
rodič
revize
b227d1bb1a

+ 288 - 10
src/views/manager/archivetree.vue

@@ -11,15 +11,17 @@
         :span="12"
         class='marleft20'
       >
-        <div>
-          <h2>归档目录树</h2>
+        <el-tabs v-model="activeName" @tab-click="handleClick">
+          <el-tab-pane label="竣工档案目录" name="first">
+         <div>
+          <!-- <h2>归档目录树</h2> -->
           <el-input
             placeholder="输入关键字进行过滤"
             clearable
             v-model="filterText"
           >
           </el-input>
-          <div  class="scrollClass" style="height:358px ;">
+          <div  class="scrollClass" style="height:658px ;">
              <el-scrollbar style="height:100%">
              <el-tree
             v-show="!filterText"
@@ -27,8 +29,7 @@
             :props="props"
             :load="loadNode"
             node-key="id"
-            lazy
-          >
+            lazy >
             <span
               class=" flexStar"
               slot-scope="{ node, data }"
@@ -79,8 +80,6 @@
           </el-tree>
           </el-scrollbar>
           </div>
-         
-         
           <el-tree
             v-show="filterText"
             :default-expanded-keys='defaultExpanded'
@@ -131,17 +130,153 @@
             </span>
           </el-tree>
         </div>
+          </el-tab-pane>
+          <el-tab-pane label="文书档案目录" name="second">
+               <div>
+                <!-- <h2>归档目录树</h2> -->
+                <el-input
+                  placeholder="输入关键字进行过滤"
+                  clearable
+                  v-model="filterText"
+                >
+                </el-input>
+              
+                
+                    
+      <div class="scrollClass" style="height:658px">
+        <el-scrollbar style="height:100%">
+          <el-tree
+            style="box-sizing: border-box;width:120%;"
+            v-show="!filterText"
+            ref="trees1"
+            :props="props"
+            :load="loadNode"
+            node-key="id"
+            lazy >
+            <span
+              class=" flexStar"
+              slot-scope="{ node, data }"
+              @mouseover="mouseOver(data)"
+              @mouseleave="mouseLeave(data)"
+                 
+            >
+              <span style="text-overflow: ellipsis;">{{ data.title }}</span>
+                <!--知识点过长处理,鼠标悬浮文字弹框显示全部内容-->
+            <!-- <span  class="custom-tree-node">
+                      <el-tooltip class="item" effect="light" :content="data.title" placement="top-start">
+                        <span > {{ data.title | ellipsis(25) }} </span>
+                      </el-tooltip>
+                  <div>
+                  </div>
+            </span> -->
+
+              <span
+                class="marleft10"
+                v-show="data.moreShow"
+              >
+                <i
+                  @click.stop='addtree(data,node)'
+                  class="el-icon-circle-plus-outline"
+                  style="fontSize:18px;"
+                  v-if="data.isStorageNode!=1"
+                ></i>
+                <i
+                  @click.stop='edittree(data,node)'
+                  class="el-icon-edit-outline marleft5"
+                  style="fontSize:18px;"
+                  v-if="node.level!=1"
+                ></i>
+                <i
+                  @click.stop='deletetree(node)'
+                  class="el-icon-delete marleft5"
+                  style="fontSize:18px;"
+                  v-if="node.level!=1"
+                ></i>
+                <i
+                  @click.stop='paixuMD(data)'
+                  class="el-icon-sort marleft5"
+                  style="fontSize:18px;"
+                  v-if="node.level!=1"
+                ></i>
+              </span>
+            </span>
+          </el-tree>
+        </el-scrollbar>
+      </div>
+          
+
+                                
+                      
+                 
+                <el-tree
+                  v-show="filterText"
+                  :default-expanded-keys='defaultExpanded'
+                  :props="props"
+                  :data="data"
+                  node-key="id"
+                  ref="trees2"
+                  :default-expand-all="true"
+                  :filter-node-method="filterNode"
+                >
+                  <span
+                    class=" flexStar"
+                    slot-scope="{ node, data }"
+                    @mouseover="mouseOver(data)"
+                    @mouseleave="mouseLeave(data)"
+                    style="box-sizing: border-box;width:120%;"
+                  >
+                    <span  style="text-overflow: ellipsis;">{{ data.title }}</span>
+                    <span
+                      class="marleft10"
+                      v-show="data.moreShow"
+                    >
+                      <i
+                        @click.stop='addtree(data,node)'
+                        class="el-icon-circle-plus-outline"
+                        style="fontSize:18px;"
+                        v-if="data.isStorageNode!=1"
+                      ></i>
+                      <i
+                        @click.stop='edittree(data,node)'
+                        class="el-icon-edit-outline marleft5"
+                        style="fontSize:18px;"
+                        v-if="node.level!=1"
+                      ></i>
+                      <i
+                        @click.stop='deletetree(node)'
+                        class="el-icon-delete marleft5"
+                        style="fontSize:18px;"
+                        v-if="node.level!=1"
+                      ></i>
+                      <i
+                        @click.stop='paixuMD(data)'
+                        class="el-icon-sort marleft5"
+                        style="fontSize:18px;"
+                        v-if="node.level!=1"
+                      ></i>
+                    </span>
+                  </span>
+                </el-tree>
+              </div>
+          </el-tab-pane>
+         
+      </el-tabs>
+       
       </el-col>
       <el-col
         :span="9"
         style="padding-top:30px;"
       >
-        <h3>上传文件入口显示配置</h3>
+        <!-- <h3>上传文件入口显示配置</h3> -->
+       
         <div
           class="peizhi"
           :style="{'height':heights-210+'px','overflow': 'hidden'}"
         >
-          <div class="flexEnd">
+          <el-button type="primary"  @click="handleentrybtn">立卷规则</el-button>
+          <el-button type="info"  @click="handlerulebtn">工程文件入口配置</el-button>
+            <el-button type="warning" v-if="!isentryTree"  @click="savebtn">保存设置</el-button>
+          <div class="flexEnd"  v-if="isentryTree">
             <i
               @click="rightPushTree"
               class="el-icon-plus"
@@ -155,8 +290,60 @@
             accordion
             ref="tree"
             class="filter-tree"
+            v-if="isentryTree"
           >
           </el-tree>
+          <!-- 立卷规则 -->
+          <div v-if="!isentryTree" style="margin-top:20px">
+              <el-checkbox-group v-model="checkList">
+                <el-checkbox label="设置为最高并卷层级"></el-checkbox>
+                <el-checkbox label="设置为分类并卷层级"></el-checkbox>
+                <el-checkbox label="设置为单独并卷层级"></el-checkbox>
+              </el-checkbox-group>
+              <div style="margin-top:20px;border:1px solid #e5e5e5;padding:20px">
+                      <!-- 选择默认划分树 -->
+                      <div style="display: flex;justify-content: space-between;">
+                         <el-select v-model="publictreevalue" clearable placeholder="请选择公有质检化分树" style="    width:45%;">
+                            <el-option
+                              v-for="item in publictreeoptions"
+                              :key="item.value"
+                              :label="item.label"
+                              :value="item.value">
+                            </el-option>
+                        </el-select>
+                        <el-select v-model="testtreevalue" clearable placeholder="请选择公有试验化分树"   style="    width: 45%;">
+                            <el-option
+                              v-for="item in testtreeoptions"
+                              :key="item.value"
+                              :label="item.label"
+                              :value="item.value">
+                            </el-option>
+                        </el-select>
+                      </div>
+                   
+                  <div  class="scrollClass"  style="height:658px ;margin-top:20px">
+                      <el-scrollbar style="height:100%">
+                        <el-input
+                            placeholder="输入关键字进行过滤"
+                            v-model="rulefilterText">
+                          </el-input>
+
+                          <el-tree
+                            class="filter-tree"
+                            :data="ruledata"
+                            :props="ruledefaultProps"
+                            default-expand-all
+                            :filter-node-method="rulefilterNode"
+                            ref="ruletree">
+                          </el-tree>
+
+                      </el-scrollbar>
+                  </div>
+              </div>
+          
+           
+            
+          </div>
         </div>
       </el-col>
     </el-row>
@@ -423,6 +610,31 @@ export default {
   },
   data () {
     return {
+       publictreeoptions: [{//公有质检话分数
+          value: '选项1',
+          label: '公有质检划分树1'
+          }, {
+            value: '选项2',
+          label: '公有质检划分树2'
+          }, {
+            value: '选项3',
+          label: '公有质检划分树3'
+        }],
+      publictreevalue:'',
+      testtreeoptions: [{//公有质检话分数
+          value: '选项1',
+          label: '公有试验划分树1'
+          }, {
+            value: '选项2',
+          label: '公有试验划分树2'
+          }, {
+            value: '选项3',
+          label: '公有试验划分树3'
+        }],
+      testtreevalue:'',
+       activeName: 'second',
+       isentryTree:true,
+       checkList:[],
       //#region 左侧树
       defaultExpanded: [],//默认选中的节点
       filterText: '',//筛选条件
@@ -545,9 +757,64 @@ export default {
       sortTag2: false,
       sortTag: false,
       sort: [],
+      ruledata: [{
+          id: 1,
+          label: '一级 1',
+          children: [{
+            id: 4,
+            label: '二级 1-1',
+            children: [{
+              id: 9,
+              label: '三级 1-1-1'
+            }, {
+              id: 10,
+              label: '三级 1-1-2'
+            }]
+          }]
+        }, {
+          id: 2,
+          label: '一级 2',
+          children: [{
+            id: 5,
+            label: '二级 2-1'
+          }, {
+            id: 6,
+            label: '二级 2-2'
+          }]
+        }, {
+          id: 3,
+          label: '一级 3',
+          children: [{
+            id: 7,
+            label: '二级 3-1'
+          }, {
+            id: 8,
+            label: '二级 3-2'
+          }]
+        }],
+        ruledefaultProps: {
+          children: 'children',
+          label: 'label'
+        }
     }
   },
   methods: {
+    //切换tabs
+     handleClick(tab, event) {
+        console.log(tab, event);
+     },
+     handleentrybtn(){
+       console.log(this.entrybtn,'entrybtn');
+       this.isentryTree=false;
+
+     },
+    handlerulebtn(){
+        this.isentryTree=true;
+        console.log(this.rulebtn,'rulebtn');
+     },
+     savebtn(){
+         this.isentryTree=true;
+     },
     paixuMD (data) {
       this.sortTag = true
       this.sortTag2 = true
@@ -1006,7 +1273,10 @@ export default {
   watch: {
     filterText (val) {
       this.$refs.trees2.filter(val);
-    }
+    },
+    rulefilterText(val) {
+        this.$refs.ruletree.filter(val);
+      }
   },
   created () {
     this.token = 'bearer ' + getToken()
@@ -1029,4 +1299,12 @@ export default {
   border-radius: 5px;
   padding: 15px 10px;
 }
+.btnground{
+  background-color: #e5e5e5;
+}
+
+ 
+
+
+
 </style>

+ 1032 - 0
src/views/manager/archivetree1.vue

@@ -0,0 +1,1032 @@
+<template>
+  <basic-container
+    ref="container"
+    style="height:100%;"
+  >
+    <el-row
+      :gutter="20"
+      :style="{'height':heights-80+'px','overflow': 'hidden'}"
+    >
+      <el-col
+        :span="12"
+        class='marleft20'
+      >
+        <div>
+          <h2>归档目录树</h2>
+          <el-input
+            placeholder="输入关键字进行过滤"
+            clearable
+            v-model="filterText"
+          >
+          </el-input>
+          <div  class="scrollClass" style="height:658px ;">
+             <el-scrollbar style="height:100%">
+             <el-tree
+            v-show="!filterText"
+            ref="trees1"
+            :props="props"
+            :load="loadNode"
+            node-key="id"
+            lazy
+          >
+            <span
+              class=" flexStar"
+              slot-scope="{ node, data }"
+              @mouseover="mouseOver(data)"
+              @mouseleave="mouseLeave(data)"
+              style="box-sizing: border-box;width:100%;"
+            >
+              <span>{{ data.title }}</span>
+                 <!--知识点过长处理,鼠标悬浮文字弹框显示全部内容-->
+            <!-- <span  class="custom-tree-node">
+                      <el-tooltip class="item" effect="light" :content="data.title" placement="top-start">
+                        <span > {{ data.title | ellipsis(25) }} </span>
+                      </el-tooltip>
+                  <div>
+                  </div>
+             </span> -->
+
+              <span
+                class="marleft10"
+                v-show="data.moreShow"
+              >
+                <i
+                  @click.stop='addtree(data,node)'
+                  class="el-icon-circle-plus-outline"
+                  style="fontSize:18px;"
+                  v-if="data.isStorageNode!=1"
+                ></i>
+                <i
+                  @click.stop='edittree(data,node)'
+                  class="el-icon-edit-outline marleft5"
+                  style="fontSize:18px;"
+                  v-if="node.level!=1"
+                ></i>
+                <i
+                  @click.stop='deletetree(node)'
+                  class="el-icon-delete marleft5"
+                  style="fontSize:18px;"
+                  v-if="node.level!=1"
+                ></i>
+                <i
+                  @click.stop='paixuMD(data)'
+                  class="el-icon-sort marleft5"
+                  style="fontSize:18px;"
+                  v-if="node.level!=1"
+                ></i>
+              </span>
+            </span>
+          </el-tree>
+          </el-scrollbar>
+          </div>
+         
+         
+          <el-tree
+            v-show="filterText"
+            :default-expanded-keys='defaultExpanded'
+            :props="props"
+            :data="data"
+            node-key="id"
+            ref="trees2"
+            :default-expand-all="true"
+            :filter-node-method="filterNode"
+          >
+            <span
+              class=" flexStar"
+              slot-scope="{ node, data }"
+              @mouseover="mouseOver(data)"
+              @mouseleave="mouseLeave(data)"
+              style="box-sizing: border-box;width:100%;"
+            >
+              <span>{{ data.title }}</span>
+              <span
+                class="marleft10"
+                v-show="data.moreShow"
+              >
+                <i
+                  @click.stop='addtree(data,node)'
+                  class="el-icon-circle-plus-outline"
+                  style="fontSize:18px;"
+                  v-if="data.isStorageNode!=1"
+                ></i>
+                <i
+                  @click.stop='edittree(data,node)'
+                  class="el-icon-edit-outline marleft5"
+                  style="fontSize:18px;"
+                  v-if="node.level!=1"
+                ></i>
+                <i
+                  @click.stop='deletetree(node)'
+                  class="el-icon-delete marleft5"
+                  style="fontSize:18px;"
+                  v-if="node.level!=1"
+                ></i>
+                <i
+                  @click.stop='paixuMD(data)'
+                  class="el-icon-sort marleft5"
+                  style="fontSize:18px;"
+                  v-if="node.level!=1"
+                ></i>
+              </span>
+            </span>
+          </el-tree>
+        </div>
+      </el-col>
+      <el-col
+        :span="9"
+        style="padding-top:30px;"
+      >
+        <h3>上传文件入口显示配置</h3>
+        <div
+          class="peizhi"
+          :style="{'height':heights-210+'px','overflow': 'hidden'}"
+        >
+          <div class="flexEnd">
+            <i
+              @click="rightPushTree"
+              class="el-icon-plus"
+              style="backgroundColor:#2A97DF;color:#fff;fontSize:20px;cursor: pointer;"
+            ></i>
+          </div>
+          <el-tree
+            :props="Rightprops"
+            :data="rightData"
+            node-key="id"
+            accordion
+            ref="tree"
+            class="filter-tree"
+          >
+          </el-tree>
+        </div>
+      </el-col>
+    </el-row>
+    <!-- 新增编辑 -->
+    <el-dialog
+      :title="form.id?'编辑':'新增'"
+      :visible.sync="treeTap"
+      width="700px"
+      :modal-append-to-body="false"
+      @close="treeClose"
+    >
+      <div>
+        <el-form
+          ref="form"
+          :model="form"
+          label-width="120px"
+          :rules="rules"
+        >
+          <el-form-item
+            label="节点名称"
+            prop="nodeName"
+          >
+            <el-input
+              v-model="form.nodeName"
+              style="width:400px;"
+            ></el-input>
+          </el-form-item>
+          <el-form-item
+            label="岗位类型"
+            prop="postType"
+          >
+            <el-select
+              v-model="form.postType"
+              placeholder="请选择岗位"
+              style="width:400px;"
+            >
+              <el-option
+                v-for="item in JobTypeList"
+                :key="item.id"
+                :label="item.title"
+                :value="item.id"
+              ></el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item
+            label="节点类型"
+            prop="nodeType"
+          >
+            <el-select
+              :disabled='form.id!=""'
+              v-model="form.nodeType"
+              placeholder="请选择节点"
+              style="width:400px;"
+            >
+              <el-option
+                v-for="item in nodeTypeList"
+                :key="item.value"
+                :label="item.label"
+                :value="item.value"
+              ></el-option>
+            </el-select>
+          </el-form-item>
+          <template v-if="form.nodeType==2">
+            <el-form-item
+              label="是否存储节点"
+              prop="isStorageNode"
+            >
+              <el-select
+                :disabled='form.id!=""'
+                v-model="form.isStorageNode"
+                style="width:400px;"
+              >
+                <el-option
+                  v-for="item in storageNodeList"
+                  :key="item.value"
+                  :label="item.label"
+                  :value="item.value"
+                ></el-option>
+              </el-select>
+            </el-form-item>
+            <template v-if="form.isStorageNode==1">
+              <el-form-item
+                label="是否竣工图"
+                prop="isBuiltDrawing"
+              >
+                <el-select
+                  v-model="form.isBuiltDrawing"
+                  style="width:400px;"
+                >
+                  <el-option
+                    v-for="item in builtDrawingList"
+                    :key="item.value"
+                    :label="item.label"
+                    :value="item.value"
+                  ></el-option>
+                </el-select>
+              </el-form-item>
+              <el-form-item
+                label="是否接口节点"
+                prop="isInterfaceNode"
+              >
+                <el-select
+                  v-model="form.isInterfaceNode"
+                  style="width:400px;"
+                >
+                  <el-option
+                    v-for="item in interfaceNodeList"
+                    :key="item.value"
+                    :label="item.label"
+                    :value="item.value"
+                  ></el-option>
+                </el-select>
+              </el-form-item>
+              <template v-if="form.isInterfaceNode==1">
+                <el-form-item label="选择接口类型">
+                  <el-select
+                    v-model="form.interfaceType"
+                    style="width:400px;"
+                  >
+                    <el-option
+                      v-for="item in interfaceTypeList"
+                      :key="item.value"
+                      :label="item.label"
+                      :value="item.value"
+                    ></el-option>
+                  </el-select>
+                </el-form-item>
+              </template>
+            </template>
+          </template>
+          <!-- 数字化文件上传 -->
+          <template v-if="form.nodeType==1">
+            <el-form-item
+              label="关联类型"
+              prop="associationType"
+            >
+              <el-select
+                v-model="form.associationType"
+                style="width:400px;"
+                placeholder="请选择"
+              >
+                <el-option
+                  v-for="item in associationTypeList"
+                  :key="item.value"
+                  :label="item.label"
+                  :value="item.value"
+                ></el-option>
+              </el-select>
+            </el-form-item>
+            <template v-if="form.associationType==1">
+              <el-form-item
+                label="业内资料类型"
+                prop="majorDataType"
+              >
+                <el-checkbox-group v-model="form.majorDataType">
+                  <el-checkbox
+                    v-for="item in majorDataTypeList"
+                    :key="item.dictKey"
+                    :label="item.dictKey"
+                    name="type"
+                  >{{item.dictValue}}</el-checkbox>
+                </el-checkbox-group>
+              </el-form-item>
+              <el-form-item
+                label="显示层级"
+                prop="displayHierarchy"
+              >
+                <el-select
+                  v-model="form.displayHierarchy"
+                  style="width:400px;"
+                  placeholder="请选择"
+                >
+                  <el-option
+                    v-for="item in displayHierarchyList"
+                    :key="item.dictKey"
+                    :label="item.dictValue"
+                    :value="item.dictKey"
+                  ></el-option>
+                </el-select>
+              </el-form-item>
+            </template>
+          </template>
+        </el-form>
+      </div>
+      <span
+        slot="footer"
+        class="dialog-footer"
+      >
+        <el-button @click="treeTap=false">取 消</el-button>
+        <el-button
+          type="primary"
+          @click="saveTree"
+        >保 存</el-button>
+      </span>
+    </el-dialog>
+
+    <!-- 右侧树 -->
+    <el-dialog
+      title="上传文件入口显示配置"
+      :visible.sync="pushfileTap"
+      :modal-append-to-body='false'
+      width="800px"
+      @close="pushFileClose"
+    >
+      <div>
+        <el-tree
+          :props="dialogProps"
+          show-checkbox
+          :data="dialogData"
+          node-key="id"
+          accordion
+          ref="trees"
+          class="filter-tree"
+        >
+        </el-tree>
+      </div>
+      <span
+        slot="footer"
+        class="dialog-footer"
+      >
+        <el-button @click="pushfileTap = false">取 消</el-button>
+        <el-button
+          type="primary"
+          @click="saveFile"
+        >确 定</el-button>
+      </span>
+    </el-dialog>
+
+    <!-- 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>
+
+  </basic-container>
+</template>
+
+<script>
+import ManualSorting from '@/components/WbsTree/ManualSorting'
+import { archiveTreeInit, lazyTree, dictionary, remove, archiveTreeSave, archiveTreeUpdate, archiveTreeDetail, archiveTreetree, submitDisplayConfigTree, getSameGradeNode, submitArchiveTreeSort } from "@/api/manager/archivetree";
+import { getToken } from '@/util/auth';
+import { roletree } from "@/api/system/role.js";
+export default {
+  components: {
+    ManualSorting,
+  },
+  data () {
+    return {
+      //#region 左侧树
+      defaultExpanded: [],//默认选中的节点
+      filterText: '',//筛选条件
+      treeNode: {},
+      nodeNames: '',
+      token: '',
+      props: {
+        label: 'title',
+        children: 'children',
+        isLeaf: 'hasChildren'
+      },
+      data: [],//树节点枚举值
+      //#endregion
+
+      //#region 新增编辑节点弹框
+      treeTap: false,
+      form: {
+        id: '',//新增还是编辑
+        parentId: '',  //上级节点id
+        nodeName: "",  //节点名称
+        nodeType: '',  // 节点类型  2 = 数字化上传文件
+        postType: '',  //岗位类型
+        isStorageNode: '',  //是否为存储节点
+        isBuiltDrawing: '',  //竣工图
+        isInterfaceNode: '',  //是否接口节点
+        interfaceType: '',  //选择接口类型
+        associationType: '',  //关联类型
+        majorDataType: [],  //内业资料类型
+        displayHierarchy: ''  //显示层级
+      },
+      rules: {
+        nodeName: [{ required: true, message: '请输入节点名称', trigger: 'blur' }],
+        postType: [{ required: true, message: '请选择岗位类型', trigger: 'change' }],
+        nodeType: [{ required: true, message: '请选择节点类型', trigger: 'change' }],
+        isStorageNode: [{ required: true, message: '请选择存储节点', trigger: 'change' }],
+        isBuiltDrawing: [{ required: true, message: '请选择竣工图', trigger: 'change' }],
+        isInterfaceNode: [{ required: true, message: '请选择接口节点', trigger: 'change' }],
+        interfaceType: [{ required: true, message: '请选择接口类型', trigger: 'change' }],
+        associationType: [{ required: true, message: '请选择关联类型', trigger: 'change' }],
+        majorDataType: [{ required: true, message: '请选择业内资料类型', trigger: 'change' }],
+        displayHierarchy: [{ required: true, message: '请选择显示层级', trigger: 'change' }],
+      },
+      JobTypeList: [],//岗位类型枚举
+      nodeTypeList: [
+        {
+          label: '关联电子原生文件',
+          value: 1
+        }, {
+          label: '数字化上传文件',
+          value: 2
+        },
+      ],//节点类型枚举
+      storageNodeList: [{
+        label: '是',
+        value: 1
+      }, {
+        label: '否',
+        value: 2
+      },],//存储节点枚举
+      builtDrawingList: [{
+        label: '是',
+        value: 1
+      }, {
+        label: '否',
+        value: 2
+      },],//竣工图枚举
+      interfaceNodeList: [{
+        label: '是',
+        value: 1
+      }, {
+        label: '否',
+        value: 2
+      },],//接口节点枚举
+      interfaceTypeList: [
+        {
+          label: '试验接口',
+          value: 1
+        }, {
+          label: '计量接口',
+          value: 2
+        },
+      ],//选择接口类型枚举
+      associationTypeList: [{
+        label: '质检资料',
+        value: 1
+      },
+      {
+        label: '试验资料',
+        value: 2
+      },
+      {
+        label: '影像资料',
+        value: 3
+      },
+      {
+        label: '台账资料',
+        value: 4
+      }],//
+      majorDataTypeList: [],//
+      displayHierarchyList: [],//
+      //#endregion
+
+      //#region 右侧树节点
+      pushfileTap: false,//开关
+      Rightprops: {
+        label: 'title'
+      },
+      rightData: [],
+      //#endregion
+
+      //#region 右侧树弹框
+      dialogProps: {
+        label: 'title'
+      },
+      dialogData: [],
+      checkXuan: [],
+      //#endregion
+      heights: '',
+
+      sortTag2: false,
+      sortTag: false,
+      sort: [],
+    }
+  },
+  methods: {
+    paixuMD (data) {
+      this.sortTag = true
+      this.sortTag2 = true
+      this.curTreeData = data;
+      this.findWbsTreeSameLevel(data.id)
+    },
+    async findWbsTreeSameLevel (parentId) {//查询当前节点的同级节点
+      const { data: res } = await getSameGradeNode({ id: parentId })
+      //console.log(res);
+      if (res.code === 200) {
+        this.sort = res.data
+      }
+    },
+    bianhua () {
+      this.sortTag2 = false
+      this.$nextTick(() => {
+        this.sortTag2 = true
+      })
+    },
+    editSort () {//修改排序
+      let sortArr = this.sort, newArr = []
+      for (let i = 0; i < sortArr.length; i++) {
+        newArr.push({
+          id: sortArr[i].id,
+          nodeName: sortArr[i].nodeName
+        })
+      }
+      this.wbsTreeSort(newArr)
+    },
+    async wbsTreeSort (newArr) {//修改排序
+      const { data: res } = await submitArchiveTreeSort(newArr)
+      //console.log(res);
+      if (res.code == 200) {
+        this.sortTag = false
+        this.sortTag2 = false
+        //刷新页面
+        window.location.reload()
+      }
+    },
+    //#region 左侧树方法
+    async loadNode (node, resolve) {
+      console.log(node);
+      if (node.level === 0) {
+        let ks = await this.lazyTree(0)
+        if (ks.length) {
+          resolve(ks)
+        } else {
+          this.archiveTreeInit()
+        }
+      } else {
+        resolve(await this.lazyTree(node.data.id))
+      }
+    },
+    async archiveTreeInit () {//添加根节点
+      const { data: res } = await archiveTreeInit()
+      console.log(res);
+      if (res.code == 200 && res.msg == '操作成功') {
+        res.data.forEach(val => {
+          val.hasChildren = !val.hasChildren
+        });
+        return res.data
+      } else if (res.code == 200 && res.msg == "未查询到信息") {
+        return []
+      }
+    },
+    async lazyTree (parentId) {//树节点懒加载
+      const { data: res } = await lazyTree({
+        parentId,
+        token: this.token
+      })
+      console.log(res);
+      if (res.code == 200 && res.msg == '操作成功') {
+        res.data.forEach(val => {
+          val.hasChildren = !val.hasChildren
+        });
+        return res.data
+      } else if (res.code == 200 && res.msg == "未查询到信息") {
+        return []
+      }
+    },
+    mouseLeave (data) {
+      if (data.moreShow) {
+        this.$set(data, 'moreShow', false)
+      }
+    },
+    mouseOver (data) {
+      if (!data.moreShow) {
+        this.$set(data, 'moreShow', true)
+      }
+    },
+    addtree (data, node) {//添加树
+      console.log(data);
+      if (this.JobTypeList.length == 0) {
+        this.roletree()
+      }
+      if (this.majorDataTypeList.length == 0) {
+        this.major_data_type()//内业资料类型
+      }
+      if (this.displayHierarchyList.length == 0) {
+        this.display_hierarchy()//显示层级
+      }
+      this.form.postType = data.postType
+      this.form.id = ''
+      this.form.parentId = data.id
+      if (this.filterText) {
+        this.defaultExpanded = [data.id]
+      }
+      this.treeTap = true
+    },
+    async edittree (data) {//编辑树
+      if (this.JobTypeList.length == 0) {
+        this.roletree()
+      }
+      if (this.majorDataTypeList.length == 0) {
+        this.major_data_type()//内业资料类型
+      }
+      if (this.displayHierarchyList.length == 0) {
+        this.display_hierarchy()//显示层级
+      }
+      await this.archiveTreeDetail(data)
+      this.form.id = data.id
+      this.form.parentId = ''
+      this.treeNode = data
+      this.treeTap = true
+    },
+    deletetree (node) {//删除树
+      console.log(node);
+      let _that = this
+      this.$confirm('是否删除此数据', '提示', {
+        distinguishCancelAndClose: true,
+        confirmButtonText: '确认',
+        cancelButtonText: '取消'
+      })
+        .then(() => {
+          this.remove(node.data.id).then(()=>{
+            _that.$refs.trees1.remove(node) //删除界面上的节点
+          }).catch(()=>{
+
+          })
+
+        })
+        .catch(() => {
+
+        });
+    },
+    async remove (id) {//删除接口
+      const { data: res } = await remove({ id })
+      console.log(res);
+      if (res.code == 200) {
+        this.$message({
+          type: 'success',
+          message: '删除成功'
+        })
+      }
+    },
+    async archiveTreeDetail (data) {//详情接口
+      console.log(data);
+      const { data: res } = await archiveTreeDetail({ id: data.id })
+      console.log(res);
+      if (res.code == 200) {
+        this.form.nodeName = res.data.fullName  //节点名称
+        this.form.nodeType = res.data.nodeType   // 节点类型  2 = 数字化上传文件
+        this.form.postType = res.data.postType   //岗位类型
+        this.form.isStorageNode = res.data.isStorageNode   //是否为存储节点
+        this.form.isBuiltDrawing = res.data.isBuiltDrawing   //竣工图
+        this.form.isInterfaceNode = res.data.isInterfaceNode   //是否接口节点
+        this.form.interfaceType = res.data.interfaceType   //选择接口类型
+        this.form.associationType = res.data.associationType   //关联类型
+        this.form.majorDataType = res.data.majorDataType   //内业资料类型
+        this.form.displayHierarchy = res.data.displayHierarchy   //显示层级
+      }
+    },
+    async archiveTreetree4 () {//全加载左侧树
+      const { data: res } = await archiveTreetree({
+        token: this.token
+      })
+      console.log(res);
+      if (res.code == 200 && res.msg == "操作成功") {
+        this.data = res.data
+      }
+    },
+    filterNode (value,data,node) {//筛选条件
+      // 如果什么都没填就直接返回
+      if(!value){
+          return true;
+      }
+
+      let _array = [];//这里使用数组存储 只是为了存储值。
+      this.getReturnNode(node,_array,value);
+      let result = false;
+
+      _array.forEach((item)=>{
+          result = result || item;
+      });
+      return result;
+    },
+    //判断节点是否匹配
+    getReturnNode(node,_array,value){
+      let isPass = node.data &&  node.data.title && node.data.title.indexOf(value) !== -1;
+      isPass?_array.push(isPass):'';
+
+      //判断节点是否是父节点
+      if(!isPass && node.level!=1 && node.parent){
+          this.getReturnNode(node.parent,_array,value);
+      }
+    },
+
+    //#endregion
+
+    //#region 新增编辑节点弹框
+    treeClose () {//弹框关闭事件
+      this.form = {
+        parentId: '',  //上级节点id
+        nodeName: "",  //节点名称
+        nodeType: '',  // 节点类型  2 = 数字化上传文件
+        postType: '',  //岗位类型
+        isStorageNode: '',  //是否为存储节点
+        isBuiltDrawing: '',  //竣工图
+        isInterfaceNode: '',  //是否接口节点
+        interfaceType: '',  //选择接口类型
+        associationType: '',  //关联类型
+        majorDataType: [],  //内业资料类型
+        displayHierarchy: ''  //显示层级
+      }
+      this.$refs.form.resetFields();
+      this.form.id = ''
+      this.treeTap = false
+    },
+    async roletree () {//岗位类型枚举
+      const { data: res } = await roletree()
+      console.log(res);
+      if (res.code == 200) {
+        this.JobTypeList = res.data
+      }
+    },
+    async major_data_type () {//内业资料类型
+      const { data: res } = await dictionary({ code: 'major_data_type' })
+      console.log(res);
+      if (res.code == 200) {
+        this.majorDataTypeList = res.data
+      }
+    },
+    async display_hierarchy () {//显示层级
+      const { data: res } = await dictionary({ code: 'display_hierarchy' })
+      console.log(res);
+      if (res.code == 200) {
+        this.displayHierarchyList = res.data
+      }
+    },
+    saveTree () {//保存按钮
+      this.$refs.form.validate(val => {
+        if (val) {
+          if (this.form.nodeType == 2) {
+            if (this.form.isStorageNode == 1) {
+              if (this.form.isInterfaceNode == 1) {
+                this.baocun({
+                  id: this.form.id,
+                  parentId: this.form.parentId, //上级节点id
+                  nodeName: this.form.nodeName,  //节点名称
+                  nodeType: this.form.nodeType,  // 节点类型
+                  postType: this.form.postType,  //岗位类型
+                  isStorageNode: this.form.isStorageNode,  //是否为存储节点
+                  isBuiltDrawing: this.form.isBuiltDrawing,  //竣工图
+                  isInterfaceNode: this.form.isInterfaceNode,  //是否接口节点
+                  interfaceType: this.form.interfaceType,  //选择接口类型
+                })
+              } else {
+                this.baocun({
+                  id: this.form.id,
+                  parentId: this.form.parentId, //上级节点id
+                  nodeName: this.form.nodeName,  //节点名称
+                  nodeType: this.form.nodeType,  // 节点类型
+                  postType: this.form.postType,  //岗位类型
+                  isStorageNode: this.form.isStorageNode,  //是否为存储节点
+                  isBuiltDrawing: this.form.isBuiltDrawing,  //竣工图
+                  isInterfaceNode: this.form.isInterfaceNode,  //是否接口节点
+                })
+              }
+            } else {
+              this.baocun({
+                id: this.form.id,
+                parentId: this.form.parentId, //上级节点id
+                nodeName: this.form.nodeName,  //节点名称
+                nodeType: this.form.nodeType,  // 节点类型
+                postType: this.form.postType,  //岗位类型
+                isStorageNode: this.form.isStorageNode,  //是否为存储节点
+              })
+            }
+          } else if (this.form.nodeType == 1) {
+            if (this.form.associationType == 1) {
+              this.baocun({
+                id: this.form.id,
+                parentId: this.form.parentId, //上级节点id
+                nodeName: this.form.nodeName,  //节点名称
+                nodeType: this.form.nodeType,  // 节点类型
+                associationType: this.form.associationType,  //关联类型
+                majorDataType: this.form.majorDataType, //内业资料类型
+                displayHierarchy: this.form.displayHierarchy,  //显示层级
+              })
+            } else {
+              this.baocun({
+                id: this.form.id,
+                parentId: this.form.parentId, //上级节点id
+                nodeName: this.form.nodeName,  //节点名称
+                nodeType: this.form.nodeType,  // 节点类型
+                associationType: this.form.associationType,  //关联类型
+              })
+            }
+          }
+        }
+      })
+    },
+    async baocun (da) {
+      if (da.majorDataType) {
+        if (da.majorDataType.length > 0) {
+          let das = ''
+          da.majorDataType.forEach((val, key) => {
+            das += val
+            if (da.majorDataType.length - 1 != key) {
+              das += ','
+            }
+          })
+          da.majorDataType = das
+        }
+      }
+      if (this.form.id) {
+        await this.archiveTreeUpdate(da)
+      } else {
+        await this.archiveTreeSave(da)
+      }
+      if (this.filterText) {
+        this.archiveTreetree4()
+      }
+    },
+    async archiveTreeSave (da) {//新增
+      console.log(da);
+      const { data: res } = await archiveTreeSave(da)
+      console.log(res);
+      if (res.code == 200) {
+        this.$message({
+          type: 'success',
+          message: '新增成功'
+        })
+        this.treeTap = false
+        let das = await this.lazyTree(da.parentId)
+        this.$refs.trees1.updateKeyChildren(da.parentId, das)
+        let node = this.$refs.trees1.getNode(da.parentId);
+        node.isLeaf = false;
+        node.isLeafByUser = false;
+      }
+    },
+    async archiveTreeUpdate (da) {//编辑
+      const { data: res } = await archiveTreeUpdate(da)
+      console.log(res);
+      if (res.code == 200) {
+        this.$message({
+          type: 'success',
+          message: '编辑成功'
+        })
+        this.treeTap = false
+        this.treeNode.title = da.nodeName
+        this.treeNode.postType = da.postType
+      }
+    },
+    //#endregion
+
+    //#region 右侧树节点
+    async rightPushTree () {//右侧节点树
+      this.checkXuan = []
+      await this.archiveTreetree2({
+        token: this.token,
+        nodeType: 2,
+      })
+      this.pushfileTap = true
+      await this.saixuan(this.dialogData)
+      console.log(this.checkXuan);
+      this.$refs.trees.setCheckedKeys(this.checkXuan);
+    },
+    // 赛选
+    saixuan (da) {//赛选
+      if (da.length > 0) {
+        let tag = true
+        da.forEach(val => {
+          if (val.isDisplayTree == 1 && val.hasChildren) {
+            let ks = this.saixuan(val.children)
+            if (ks) {
+              this.checkXuan.push(val.id)
+            }
+          } else if (val.isDisplayTree == 1 && !val.hasChildren) {
+            this.checkXuan.push(val.id)
+          } else {
+            tag = false
+          }
+        })
+        return tag
+      }
+    },
+    pushFileClose () {//弹框关闭事件
+      this.checkXuan = []
+    },
+    async archiveTreetree (da) {//右侧树全加载接口
+      const { data: res } = await archiveTreetree(da)
+      console.log(res);
+      if (res.code == 200 && res.msg == "操作成功") {
+        this.rightData = res.data
+      }
+    },
+    //#endregion
+
+    //#region 右侧树弹框
+    async submitDisplayConfigTree (ids) {//保存接口
+      const { data: res } = await submitDisplayConfigTree({ ids })
+      console.log(res);
+      if (res.code == 200) {
+        this.$message({
+          type: 'success',
+          message: '设置成功'
+        })
+        this.archiveTreetree({
+          token: this.token,
+          disPlayTree: 1,
+          nodeType: 2,
+        })
+        this.pushfileTap = false
+      }
+    },
+    async archiveTreetree2 (da) {//右侧树全加载接口
+      const { data: res } = await archiveTreetree(da)
+      console.log(res);
+      if (res.code == 200 && res.msg == "操作成功") {
+        this.dialogData = res.data
+      }
+    },
+    saveFile () {//保存按钮
+      let zi = this.$refs.trees.getCheckedKeys() //返回选中子节点的key
+      let fu = this.$refs.trees.getHalfCheckedKeys()//返回选中子节点的父节点的key
+      let arr = [...zi, ...fu]
+      if (arr.length > 0) {
+        let ids = ''
+        arr.forEach((val, key) => {
+          ids += val
+          if (key != arr.length - 1) {
+            ids += ','
+          }
+        })
+        this.submitDisplayConfigTree(ids)
+      } else {
+        this.$message({
+          type: 'error',
+          message: '请先设置配置文件'
+        })
+      }
+    },
+    //#endregion
+  },
+  watch: {
+    filterText (val) {
+      this.$refs.trees2.filter(val);
+    }
+  },
+  created () {
+    this.token = 'bearer ' + getToken()
+    this.archiveTreetree({
+      token: this.token,
+      disPlayTree: 1,
+      nodeType: 2,
+    })
+    this.archiveTreetree4()//全加载左侧树
+  },
+  mounted () {
+    this.heights = this.$refs.container.$el.offsetHeight
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.peizhi {
+  border: 1px solid #e5e5e5;
+  border-radius: 5px;
+  padding: 15px 10px;
+}
+</style>

+ 2 - 2
src/views/tentative/metadata.vue

@@ -39,7 +39,7 @@
       :modal-append-to-body="false"
     >
       <div>
-        <div style="float:right">
+        <div style="float:right;margin-bottom:20px">
           <el-select v-model="optionvalue" clearable placeholder="请选择文件存储类型">
                             <el-option
                             v-for="item in options"
@@ -54,7 +54,7 @@
         <el-table
           :data="MetadataformDatass"
           border
-          style="width: 100%">
+          style="width: 100%;">
           <el-table-column
             prop="metadataitem"
             label="元数据项">