From 7c515e10fcdffcff295a04533b5789a373aee59d Mon Sep 17 00:00:00 2001
From: Surpriseplus <845948745@qq.com>
Date: 星期三, 02 八月 2023 17:50:26 +0800
Subject: [PATCH] 1

---
 src/views/datamanage/catalogueManage.vue | 1365 +++++++++++++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 1,149 insertions(+), 216 deletions(-)

diff --git a/src/views/datamanage/catalogueManage.vue b/src/views/datamanage/catalogueManage.vue
index 8c04871..8d67230 100644
--- a/src/views/datamanage/catalogueManage.vue
+++ b/src/views/datamanage/catalogueManage.vue
@@ -1,112 +1,421 @@
 <template>
-  <div class="cataSettings_box">
-    <div class="cataSettings_tree">
-      <My-bread :list="['鏁版嵁绠$悊', '鐩綍绠$悊']"></My-bread>
-      <!-- <el-button class="saveBtn" type="primary" size="mini" @click="sendChange" -->
-      <!-- >淇濆瓨</el-button -->
-      <!-- > -->
-      <el-divider />
-      <div class="cataTreeBox">
-        <el-tree
-          ref="tree"
-          :props="defaultProps"
-          node-key="id"
-          :data="dirList"
-          :expand-on-click-node="false"
-          :default-expand-all="true"
-          draggable
-          @node-click="handleNodeClick"
-          @node-drag-start="handleDragStart"
-          @node-drag-end="handleDrop"
+  <div class="subpage_Box">
+    <My-bread :list="[
+          `${$t('dataManage.dataManage')}`,
+          `${$t('dataManage.projectManagement')}`,
+        ]"></My-bread>
+    <el-divider />
+    <div class="mainBox">
+
+      <div
+        class="cataLogContent leftTree subpage_Div"
+        style="border: 1px solid #dcdfe6;"
+      >
+        <div style="min-width: 450px">
+          <el-tree
+            ref="tree"
+            :props="defaultProps"
+            node-key="id"
+            :data="dirList"
+            :highlight-current="true"
+            :expand-on-click-node="false"
+            :default-expanded-keys="expandData"
+            @node-click="handleNodeClick"
+            @node-contextmenu="openTreeMenu"
+          >
+          </el-tree>
+          <div
+            class="right_menu box_divm"
+            id="menu"
+            v-show="showRightMenu"
+          >
+            <ul>
+              <li @click="setMenuDataCopy">澶嶅埗</li>
+              <li @click="setMenuDataPaste">绮樿创</li>
+            </ul>
+          </div>
+        </div>
+      </div>
+      <div class="cataLog_rightContent right subpage_Div">
+        <div
+          class="inquire"
+          style="
+            align-items: center;
+            display: flex;
+            justify-content: space-between;
+          "
         >
-          <span class="custom-tree-node" slot-scope="{ node, data }">
-            <span>{{ node.label }}</span>
-            <span class="btnBox">
-              <el-button
-                type="text"
-                size="mini"
-                @click="() => append(node, data)"
+          <el-breadcrumb separator="/">
+            <el-breadcrumb-item :to="{ path: '/' }">{{
+              
+            }}</el-breadcrumb-item>
+          </el-breadcrumb>
+          <div style="margin-right: -5px">
+            <div class="menuTop">
+              <el-form
+                :inline="true"
+                class="demo-form-inline"
               >
-                <i class="el-icon-circle-plus"></i>
-              </el-button>
-              <el-button
-                type="text"
-                size="mini"
-                @click="() => remove(node, data)"
-              >
-                <i class="el-icon-delete-solid"></i>
-              </el-button>
-            </span>
-          </span>
-        </el-tree>
-      </div>
-    </div>
-    <div class="itemSettings">
-      <div class="title_box">
-        <h4>璇︾粏淇℃伅</h4>
-      </div>
-      <div class="form_box">
-        <el-form :model="itemdetail" ref="itemdetail" :rules="rules">
-          <!-- <el-form-item label="鐩綍缂栫爜" :label-width="formLabelWidth">
-            <el-input v-model="itemdetail.id" disabled />
-          </el-form-item> -->
+                <el-form-item>
+
+                  <el-button
+                    v-show="directoryFlag"
+                    icon="el-icon-download"
+                    type="info"
+                    size="small"
+                    @click="setDirectoryDownload"
+                  >{{ $t("shuJuGuanLi.butten.folderDownload") }}</el-button>
+                </el-form-item>
+                <el-form-item>
+
+                  <el-button
+                    icon="el-icon-download"
+                    type="info"
+                    size="small"
+                    @click="setTemplateDownload"
+                  >{{ $t("shuJuGuanLi.butten.templateDownload") }}</el-button>
+                </el-form-item>
+                <el-form-item>
+                  <el-upload
+                    action
+                    accept=".xlsx, .xls"
+                    :auto-upload="false"
+                    :show-file-list="false"
+                    :on-change="handleChange"
+                    :file-list="fileList"
+                  >
+                    <el-button
+                      type="success"
+                      icon="el-icon-plus"
+                      size="small"
+                    >{{ $t("shuJuGuanLi.butten.uploads") }}</el-button>
+                  </el-upload>
+                </el-form-item>
+                <el-form-item>
+                  <el-button
+                    v-if="menuStatus.insert"
+                    :disabled="itemdetail.pid == null ? true : false"
+                    @click="setNewNode(1)"
+                    type="success"
+                    icon="el-icon-plus"
+                    size="small"
+                  >{{ $t("shuJuGuanLi.butten.NewPeer") }}</el-button>
+                </el-form-item>
+                <el-form-item>
+                  <el-button
+                    v-if="menuStatus.insert"
+                    :disabled="itemdetail.pid == null ? true : false"
+                    @click="setNewNode(2)"
+                    type="success"
+                    icon="el-icon-plus"
+                    size="small"
+                  >{{ $t("shuJuGuanLi.butten.AddChild") }}</el-button>
+                </el-form-item>
+                <el-form-item>
+                  <el-button
+                    v-if="menuStatus.delete"
+                    @click="setDelNode()"
+                    :disabled="itemdetail.pid == null ? true : false"
+                    type="danger"
+                    icon="el-icon-delete"
+                    size="small"
+                  >{{ $t("shuJuGuanLi.butten.Delete") }}</el-button>
+                </el-form-item>
+                <el-form-item>
+                  <el-button
+                    v-if="menuStatus.update"
+                    :disabled="itemdetail.pid == null ? true : false"
+                    @click="setEditNode(1)"
+                    type="info"
+                    icon="el-icon-top"
+                    size="small"
+                  >{{ $t("shuJuGuanLi.butten.MoveUp") }}</el-button>
+                </el-form-item>
+                <el-form-item>
+                  <el-button
+                    v-if="menuStatus.update"
+                    :disabled="itemdetail.pid == null ? true : false"
+                    @click="setEditNode(2)"
+                    type="info"
+                    icon="el-icon-bottom"
+                    size="small"
+                  >{{ $t("shuJuGuanLi.butten.MoveDown") }}</el-button>
+                </el-form-item>
+              </el-form>
+            </div>
+          </div>
+
+        </div>
+        <div class="dividing-line"></div>
+
+        <el-form
+          :model="itemdetail"
+          ref="itemdetail"
+          :rules="rules"
+          style="position: relative; padding-top: 18px"
+        >
           <el-form-item
             prop="name"
-            label="鐩綍鍚嶇О"
+            :label="$t('dataManage.dataUpObj.name')"
             :label-width="formLabelWidth"
           >
-            <el-input v-model="itemdetail.name" />
+            <el-input
+              v-model="itemdetail.name"
+              size="small"
+              style=" max-width: 420px"
+              :placeholder="$t('shuJuGuanLi.shuJuJianSuo.valueName')"
+              clearable
+            />
+            <!--            style="max-width: 400px"-->
           </el-form-item>
-          <el-form-item label="鐩綍璇存槑" :label-width="formLabelWidth">
+          <el-form-item
+            :label="$t('dataManage.dataUpObj.explain')"
+            :label-width="formLabelWidth"
+          >
             <el-input
               v-model="itemdetail.descr"
               type="textarea"
-              resize="none"
-              style="height: 100%; overflow: auto"
+              style=" max-width: 420px"
+              :placeholder="$t('shuJuGuanLi.shuJuJianSuo.valueexplain')"
+              clearable
             />
           </el-form-item>
-          <el-form-item label="鐩綍澶囨敞" :label-width="formLabelWidth">
-            <el-input v-model="itemdetail.bak" type="textarea" resize="none" />
+          <el-form-item
+            :label="$t('dataManage.dataUpObj.inspectionItems')"
+            :label-width="formLabelWidth"
+          >
+            <el-select
+              style="width: 420px"
+              v-model="itemdetail.checks"
+              :placeholder="$t('shuJuGuanLi.shuJuJianSuo.valueexamine')"
+              multiple
+            >
+              <el-option
+                v-for="item in options"
+                :key="item.value"
+                :label="item.label"
+                :value="item.value"
+              >
+              </el-option>
+            </el-select>
+            <!-- <el-input
+     
+              type="textarea"
+              style=" max-width: 420px"
+              :placeholder="$t('shuJuGuanLi.shuJuJianSuo.valueone')"
+              clearable
+            /> -->
+            <!--            resize="none"-->
+            <!--            style="height: 100%; overflow: auto; max-width: 400px"-->
           </el-form-item>
-          <div class="btnBox">
-            <el-button type="primary" @click="updCata('itemdetail')"
-              >淇濆瓨</el-button
+          <el-form-item
+            :label="$t('dataManage.dataUpObj.fileExtension')"
+            :label-width="formLabelWidth"
+          >
+            <el-input
+              v-model="itemdetail.exts"
+              type="textarea"
+              style=" max-width: 420px"
+              :placeholder="$t('shuJuGuanLi.shuJuJianSuo.valuesuffix')"
+              clearable
+            />
+          </el-form-item>
+          <!--          <el-form-item
+            :label="$t('dataManage.dataUpObj.inspectionItems')"
+            :label-width="formLabelWidth"
+          >
+            <el-input
+              v-model="itemdetail.checks"
+              type="textarea"
+              resize="none"
+              style="height: 100%; overflow: auto; max-width: 400px"
+            />
+          </el-form-item>-->
+          <el-form-item
+            :label="$t('dataManage.dataUpObj.code')"
+            :label-width="formLabelWidth"
+          >
+            <el-input
+              v-model="itemdetail.code"
+              disabled
+              type="textarea"
+              style=" max-width: 420px"
+              autosize
+            />
+          </el-form-item>
+          <!--          <el-form-item
+            :label="$t('dataManage.dataUpObj.catalogRemarks')"
+            :label-width="formLabelWidth"
+          >
+            <el-input
+              v-model="itemdetail.bak"
+              type="textarea"
+              resize="none"
+              style="max-width: 400px"
+            />
+          </el-form-item>-->
+          <!--          <div class="btnBox">
+            <el-button
+              v-if="menuStatus.update"
+              class="primary"
+              size="small"
+              @click="updCata('itemdetail')"
+              >{{ $t("common.preservation") }}</el-button
             >
-            <el-button type="primary" @click="reset('itemdetail')"
-              >鍙栨秷</el-button
+            <el-button
+              v-if="menuStatus.update"
+              type="info"
+              size="small"
+              @click="reset"
+              >{{ $t("common.cancel") }}</el-button
             >
-          </div>
+          </div>-->
         </el-form>
+        <div
+          slot="footer"
+          class="dialog-footer"
+          style="padding-left: 45% ;padding-top: 20px"
+        >
+          <el-button
+            v-if="menuStatus.update"
+            type="primary"
+            size="small"
+            @click="updCata('itemdetail')"
+          >{{ $t("common.preservation") }}</el-button>
+          <el-button
+            v-if="menuStatus.update"
+            size="small"
+            @click="reset"
+          >{{ $t("common.cancel") }}</el-button>
+        </div>
       </div>
     </div>
-    '
+    <!-- <div class="cataSettings_tree"> -->
 
-    <el-dialog title="鏂板瀛愮洰褰�" :visible.sync="dialogFormVisible">
-      <el-form :model="ruleForm" ref="ruleForm" :rules="rules">
+    <!-- <div class="cataTreeBox">
+
+      </div> -->
+    <!-- </div> -->
+    <!-- <div class="itemSettings"> -->
+    <!-- <div class="title_box">
+        <h4>璇︾粏淇℃伅</h4>
+      </div> -->
+    <!-- <div class="form_box">
+
+      </div> -->
+    <!-- </div> -->
+    <el-dialog
+      :title="$t('dataManage.dataUpObj.newDirectory')"
+      :visible.sync="dialogFormVisible"
+      :before-close="handleClose"
+    >
+      <el-form
+        :model="ruleForm"
+        ref="ruleForm"
+        :rules="rules"
+      >
         <el-form-item
-          label="鐩綍鍚嶇О"
+          :label="$t('dataManage.dataUpObj.name')"
           prop="name"
           :label-width="formLabelWidth"
         >
-          <el-input v-model="ruleForm.name" autocomplete="off"></el-input>
+          <el-input
+            v-model="ruleForm.name"
+            autocomplete="off"
+            :placeholder="$t('shuJuGuanLi.shuJuJianSuo.valueName')"
+          ></el-input>
         </el-form-item>
-        <el-form-item label="鐩綍璇存槑" :label-width="formLabelWidth">
-          <el-input v-model="ruleForm.descr" autocomplete="off"></el-input>
+        <el-form-item
+          :label="$t('dataManage.dataUpObj.explain')"
+          :label-width="formLabelWidth"
+        >
+          <el-input
+            v-model="ruleForm.descr"
+            autocomplete="off"
+            :placeholder="$t('shuJuGuanLi.shuJuJianSuo.valueexplain')"
+          ></el-input>
         </el-form-item>
-        <el-form-item label="鐩綍澶囨敞" :label-width="formLabelWidth">
-          <el-input v-model="ruleForm.bak" autocomplete="off"></el-input>
+        <el-form-item
+          :label="$t('dataManage.dataUpObj.fileExtension')"
+          :label-width="formLabelWidth"
+        >
+          <el-input
+            v-model="ruleForm.exts"
+            type="textarea"
+            resize="none"
+            style="height: 100%; overflow: auto"
+            :placeholder="$t('shuJuGuanLi.shuJuJianSuo.valuesuffix')"
+          />
+        </el-form-item>
+        <el-form-item
+          :label="$t('dataManage.dataUpObj.inspectionItems')"
+          :label-width="formLabelWidth"
+        >
+          <!-- <el-input
+            
+            type="textarea"
+            resize="none"
+         
+          /> -->
+          <el-select
+            v-model="ruleForm.checks"
+            multiple
+            style="width:100%;"
+            :placeholder="$t('shuJuGuanLi.shuJuJianSuo.valueexamine')"
+          >
+            <el-option
+              v-for="item in options"
+              :key="item.value"
+              :label="item.label"
+              :value="item.value"
+            >
+            </el-option>
+          </el-select>
+
+        </el-form-item>
+        <el-form-item
+          :label="$t('dataManage.dataUpObj.code')"
+          :label-width="formLabelWidth"
+        >
+          <el-input
+            v-model="ruleForm.code"
+            disabled
+            type="textarea"
+            resize="none"
+            style="height: 100%; overflow: auto"
+          />
+        </el-form-item>
+        <el-form-item
+          :label="$t('dataManage.dataUpObj.Remarks')"
+          :label-width="formLabelWidth"
+        >
+          <el-input
+            v-model="ruleForm.bak"
+            autocomplete="off"
+            :placeholder="$t('shuJuGuanLi.shuJuJianSuo.valueRemarks')"
+          ></el-input>
         </el-form-item>
       </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button @click="resetForm('ruleForm')">鍙栨秷</el-button>
+      <div
+        slot="footer"
+        class="dialog-footer"
+      >
+        <el-button @click="resetForm('ruleForm')">{{
+          $t("common.cancel")
+        }}</el-button>
         <el-button
-          type="primary"
+          class="primary"
           @click="submitForm('ruleForm')"
           v-loading.fullscreen.lock="fullscreenLoading"
-          >鎻愪氦</el-button
-        >
+        >{{ $t("common.preservation") }}</el-button>
       </div>
     </el-dialog>
+
+    <iframe
+      id="Iframe1"
+      src=""
+      style="display: none; border: 0; padding: 0; height: 0; width: 0"
+    ></iframe>
   </div>
 </template>
 
@@ -118,8 +427,13 @@
   updateDirTrees,
   insertDir,
   deleteDir,
+  getPerms,
 } from "../../api/api";
+import * as XSLX from "xlsx";
 import MyBread from "../../components/MyBread.vue";
+import clone from "@turf/clone";
+import $ from 'jquery'
+import { getToken } from '../../utils/auth';
 export default {
   name: "catalogueManage",
   components: {
@@ -134,6 +448,13 @@
       }
     };
     return {
+      directoryData: null,
+      directoryFlag: false,
+      menuStatus: {
+        delete: false,
+        insert: false,
+        update: false,
+      },
       defaultProps: {
         children: "children",
         label: "name",
@@ -143,9 +464,12 @@
       dirList: [], //el鏍戞暟鎹�
       old_dirDat: [], //el鏍戞暟鎹�(鎷栧姩鍓�)
       newData: [], //鎷栧姩鍚庡師濮嬫暟鎹�
-      itemdetail: {},
+      itemdetail: {
+        checks: [],
+      },
+      itemaName: null,
       backUpData: "",
-      formLabelWidth: "130px",
+      formLabelWidth: "150px",
       delChildID: "",
       delChildIDs: [],
       dialogFormVisible: false,
@@ -156,41 +480,504 @@
         name: "",
         descr: "",
         bak: "",
+        checks: []
       },
       rules: {
         name: [{ required: true, validator: validName, trigger: "blur" }],
       },
+      newNode: null,
+      expandData: [],
+      fileList: [],
+      file: null,
+      tableData: [],
+      options: [
+        {
+          value: 'checkMain',
+          label: '鎬昏川妫�'
+        }, {
+          value: 'checkOsgb',
+          label: 'OSGB妫�鏌�'
+        }, {
+          value: 'checkXls',
+          label: '琛ㄦ牸鏁版嵁妫�鏌�'
+        }, {
+          value: 'checkLaz',
+          label: '鐐逛簯妫�鏌�'
+        }, {
+          value: 'checkDem',
+          label: '楂樼▼妫�鏌�'
+        }, {
+          value: 'checkAttrs',
+          label: '灞炴�ф鏌�'
+        }, {
+          value: 'checkTopology',
+          label: '鎷撴墤妫�鏌�'
+        }, {
+          value: 'checkDecorate',
+          label: '鍥鹃潰鏁撮グ妫�鏌�'
+        }, {
+          value: 'checkOrigin',
+          label: '鍘熺偣妫�鏌�'
+        }, {
+          value: 'checkDom',
+          label: '鏍呮牸妫�鏌�'
+        }, {
+          value: 'checkMath',
+          label: '鏁板鍩虹妫�鏌�'
+        }, {
+          value: 'checkMeta',
+          label: '鍏冩暟鎹鏌�'
+        }, {
+          value: 'checkLogical',
+          label: '閫昏緫涓�鑷存�ф鏌�'
+        }, {
+          value: 'checkSingleIntegrity',
+          label: '鍗曢」鎴愭灉瀹屾暣鎬ф鏌�'
+        }
+
+      ],
+      currentData: null,
+      showRightMenu: false,
+      checksData: null,
+      checksCopyData: null,
     };
   },
   methods: {
+    // 澶嶅埗
+    setMenuDataCopy() {
+      this.checksCopyData = this.checksData;
+    },
+    //绮樿创
+    setMenuDataPaste() {
+      if (!this.checksCopyData) {
+        return this.$message('鏈�変腑瑕佸鍒剁殑鑺傜偣');
+      }
+      var val = this.$refs.tree.getNode(this.checksCopyData).data;
+
+      var level = this.$refs.tree.getNode(this.checksData).data.level + 1;
+      this.setInsertCopyData([val], this.checksData, level);
+    },
+    setInsertCopyData(val, pid, level) {
+      for (var i in val) {
+        var data = val[i];
+        var pchildNodes = [];
+
+        if (this.$refs.tree.getNode(pid) && this.$refs.tree.getNode(pid).childNodes) {
+          pchildNodes = this.$refs.tree.getNode(pid).childNodes
+        }
+        var orderNum = this.getMaxOrderNum(pchildNodes);
+        var obj = {
+          bak: data.bak,
+          level: level,
+          orderNum: orderNum + 1,
+          pid: pid,
+          checks: data.checks,
+          name: data.name,
+          descr: data.descr,
+          exts: data.exts,
+        }
+        insertDir(obj).then((res) => {
+          if (res.code == 200) {
+            this.getDirTree();
+            if (data.children && data.children.length > 0) {
+
+              this.setInsertCopyData(data.children, res.result, level + 1)
+            }
+          }
+        })
+      }
+    },
+
+
+
+
+
+    handleNodeClick(data, node) {
+      this.showRightMenu = false;
+      document.removeEventListener('click', this.closeRightMenu)
+      this.layerFormInline(data)
+
+    },
+    //鍙抽敭鑿滃崟
+    openTreeMenu(event, data, node, obj) {
+      this.showRightMenu = true;
+      let menu = document.getElementById('menu')
+      menu.style.left = event.clientX + 20 + 'px'
+      menu.style.top = event.clientY + 'px'
+      document.addEventListener('click', this.closeRightMenu)
+      this.checksData = data.id;
+      console.log(this.checksData)
+    },
+    closeRightMenu() {
+      this.showRightMenu = false;
+      document.removeEventListener('click', this.closeRightMenu)
+
+    },
+    setTemplateDownload() {
+      var url = window.location.href;
+      var testurl = window.location.origin + "/";
+      if (url.indexOf("web") != -1) {
+        testurl = testurl + "/web/";
+      }
+      testurl += dirTemplateFile
+      $("#Iframe1").attr("src", testurl).click()
+    },
+    handleChange(file, fileList) {
+      this.file = file;
+      if (fileList.length > 0) {
+        this.fileList = [fileList[fileList.length - 1]]; //杩欎竴姝ワ紝鏄� 灞曠ず鏈�鍚庝竴娆¢�夋嫨鏂囦欢;
+        this.handle();
+      }
+    },
+    async handle() {
+      let file = this.file?.raw;
+      if (!this.file) {
+        console.log("鏂囦欢鎵撳紑澶辫触");
+        return;
+      } else {
+        const reader = new FileReader();
+        let that = this;
+        reader.readAsArrayBuffer(file);
+        reader.onload = function () {
+          const buffer = reader.result;
+          const bytes = new Uint8Array(buffer);
+          const length = bytes.byteLength;
+          let binary = "";
+          for (let i = 0; i < length; i++) {
+            binary += String.fromCharCode(bytes[i]);
+          }
+          const XLSX = require("xlsx");
+          const wb = XLSX.read(binary, {
+            type: "binary",
+          });
+          const outdata = XLSX.utils.sheet_to_json(
+            wb.Sheets[wb.SheetNames[0]],
+            { defval: null }
+          ); // 榛樿绗竴琛屼笅涓虹┖涔熻兘瑙f瀽鍑虹涓�鍥涜
+          var data = [...outdata];
+          that.setLeToFc(data);
+        };
+      }
+    },
+
+    setLeToFc(res) {
+      var arr = [];
+      for (var i in res) {
+        var value = this.getNameAndPname(res[i], res, i)
+        arr.push({
+          name: value[0],
+          pname: value[1],
+          descr: res[i].explain,
+          checks: res[i].checks,
+          bak: res[i].bak,
+          exts: res[i].exts,
+          orderNum: null,
+          pid: null,
+          tid: parseInt(value[2]) + 1,
+          sid: parseInt(value[3]) + 1
+        })
+      }
+
+      this.tableData = arr;
+      this.setInsertData(this.tableData);
+    },
+    getNameAndPname(res, result, flag) {
+      var chLevel = null;
+      var faLevel = null;
+
+      for (var i = 1; i < 8; i++) {
+        var lel = 'L' + i;
+        if (res[lel] != null) {
+          chLevel = i
+        }
+      }
+      if (chLevel == 1) {
+        return [res['L' + chLevel], null, flag, -1]
+      } else {
+        faLevel = chLevel - 1;
+        for (var i = flag; i >= 0; i--) {
+          var val = result[i]
+          if (val['L' + faLevel]) {
+            return [res['L' + chLevel], val['L' + faLevel], flag, i]
+            break;
+          }
+        }
+      }
+    },
+    setInsertData(res) {
+      var list = this.excelData(res);
+      if (list.length != 0) {
+        if (list[0].pname != null) {
+          return this.$message.error("涓婁紶鏁版嵁閿欒锛岀涓�鏉℃暟鎹笉涓虹┖");
+        }
+        this.getAllNodeId(res);
+      }
+    },
+    async getAllNodeId(res) {
+      for (let i = 0; i < res.length; i++) {
+        var val = res[i];
+        if (val.pname == null) {
+          val.orderNum = this.dirList[this.dirList.length - 1].orderNum + 1;
+          val.pid = 0;
+        } else {
+          this.tableData.filter((child) => {
+            if (child.tid == val.sid) {
+              val.pid = child.id;
+              val.orderNum = i + 1;
+            }
+          });
+        }
+
+        const data = await insertDir(val);
+        if (data.code != 200) {
+        }
+
+        this.tableData.filter((child) => {
+
+          if (child.name == val.name && child.tid == val.tid) {
+            child.id = data.result;
+          }
+        });
+        this.itemaName = data.result;
+        this.getDirTree();
+
+        // if (res[i].children) {
+        //   this.getAllNodeId(res[i].children);
+        // }
+      }
+    },
+    excelData(source) {
+      let cloneData = JSON.parse(JSON.stringify(source)); // 瀵规簮鏁版嵁娣卞害鍏嬮殕
+      return cloneData.filter((father) => {
+        // 寰幆鎵�鏈夐」
+        let branchArr = cloneData.filter((child) => father.tid == child.sid); // 瀵规瘮ID锛屽垎鍒笂涓嬬骇鑿滃崟锛屽苟杩斿洖鏁版嵁
+
+        branchArr.length > 0 ? (father.children = branchArr) : ""; // 缁欑埗绾ф坊鍔犱竴涓猚hildren灞炴�э紝骞惰祴鍊�
+        // 灞炰簬鍚屼竴瀵硅薄闂锛屼緥濡傦細浠� a=b銆乧=1 锛岀劧鍚庡啀浠� b.c=c 锛� 閭d箞 a.c=b.c=c=1 锛涘悓鐞嗭紝鍚庣画浠� c.d=2 ,閭d箞 a.c.d 涔熸槸=2锛�
+        // 鐢辨寰幆澶氭鍚庯紝灏辫兘褰㈡垚鐩稿簲鐨勬爲褰㈡暟鎹粨鏋�
+        return father.sid == 0; // 杩斿洖涓�绾ц彍鍗�
+      });
+    },
+    readFile(file) {
+      //鏂囦欢璇诲彇
+      return new Promise((resolve) => {
+        let reader = new FileReader();
+        reader.readAsBinaryString(file); //浠ヤ簩杩涘埗鐨勬柟寮忚鍙�
+        reader.onload = (ev) => {
+          resolve(ev.target.result);
+        };
+      });
+    },
+
     // 璇锋眰鐩綍鏍�
-    getDirTree() {
+    async getDirTree() {
       //鑾峰彇鐩綍鏍戞渶澶D锛屾柊寤鸿妭鐐逛娇鐢�
       // queryMaxId().then((res) => {
       //   this.id = res.data;
       // });
       // 鑾峰彇鐩綍鏍戞暟鎹�
-      queryDirTree().then((res) => {
-        // console.log(res);
-        if (res.code == 200) {
-          this.oriData = res.result;
-          this.newData = res.result;
-          this.dirList = this.treeData(res.result);
-        } else {
-          console.log("鎺ュ彛鎶ラ敊");
-        }
+      const data = await queryDirTree();
+
+      if (data.code != 200) {
+        return this.$message.error("椤圭洰鍒楄〃鏌ヨ澶辫触");
+      }
+      this.oriData = data.result;
+      this.newData = data.result;
+      this.dirList = this.treeData(data.result);
+
+
+      var cdata;
+      if (this.currentData) {
+        var rs = JSON.parse(this.currentData);
+        cdata = this.$refs.tree.getNode(rs.id).data;
+      } else {
+        cdata = this.dirList[this.dirList.length - 1]
+      }
+      this.$nextTick(() => {
+        this.expandData = [cdata.id];
+        this.$refs.tree.setCurrentKey(cdata.id);
+        this.layerFormInline(cdata)
       });
+
+
+      // queryDirTree().then((res) => {
+      //   // console.log(res);
+
+
+      //   if (res.code == 200) {
+
+
+      //     //  this.$nextTick(() => {
+
+      //     //    this.expandData=[15]
+      //     //    this.$refs.tree.setCurrentKey(15);
+
+      //     //   });
+
+      //   } else {
+      //     console.log("鎺ュ彛鎶ラ敊");
+      //   }
+      // });
+    },
+    handleClose() {
+      this.$confirm("鍏抽棴鍚庢棤娉曚繚瀛橈紝鏄惁鍏抽棴?")
+        .then((_) => {
+          this.resetForm();
+        })
+        .catch((_) => { });
     },
     treeData(source) {
       let cloneData = JSON.parse(JSON.stringify(source)); // 瀵规簮鏁版嵁娣卞害鍏嬮殕
       return cloneData.filter((father) => {
         // 寰幆鎵�鏈夐」
         let branchArr = cloneData.filter((child) => father.id == child.pid); // 瀵规瘮ID锛屽垎鍒笂涓嬬骇鑿滃崟锛屽苟杩斿洖鏁版嵁
+        if (branchArr.length > 0) {
+          branchArr.sort(function (a, b) {
+            return a.orderNum - b.orderNum
+          })
+        }
+
         branchArr.length > 0 ? (father.children = branchArr) : ""; // 缁欑埗绾ф坊鍔犱竴涓猚hildren灞炴�э紝骞惰祴鍊�
         // 灞炰簬鍚屼竴瀵硅薄闂锛屼緥濡傦細浠� a=b銆乧=1 锛岀劧鍚庡啀浠� b.c=c 锛� 閭d箞 a.c=b.c=c=1 锛涘悓鐞嗭紝鍚庣画浠� c.d=2 ,閭d箞 a.c.d 涔熸槸=2锛�
         // 鐢辨寰幆澶氭鍚庯紝灏辫兘褰㈡垚鐩稿簲鐨勬爲褰㈡暟鎹粨鏋�
         return father.pid == 0; // 杩斿洖涓�绾ц彍鍗�
       });
+    },
+    //鍚戜笂鍚戜笅绉诲姩
+    setEditNode(res) {
+      let node = this.$refs.tree.getCurrentNode();
+      let pchildNodes = this.$refs.tree.getNode(node.id).parent.childNodes;
+      let currentId = {};
+      for (let i = 0; i < pchildNodes.length; i++) {
+        if (pchildNodes[i].data.id == node.id) {
+          currentId = i;
+        }
+      }
+      switch (res) {
+        case 1: //鍚戜笂绉诲姩
+          if (currentId != 0) {
+            const tempChildrenNodex1 = pchildNodes[currentId - 1];
+            const tempChildrenNodex2 = pchildNodes[currentId];
+            // tempChildrenNodex2.orderNum =
+            //   pchildNodes[currentId - 1].data.orderNum;
+            // tempChildrenNodex1.orderNum = pchildNodes[currentId].data.orderNum;
+
+            const arr = [];
+            this.oriData.filter((res) => {
+              if (res.id == tempChildrenNodex2.data.id) {
+                // res.orderNum = tempChildrenNodex2.orderNum;
+                arr.push(res);
+              } else if (res.id == tempChildrenNodex1.data.id) {
+                // res.orderNum = tempChildrenNodex1.orderNum;
+                arr.push(res);
+              }
+            });
+
+            const orderNum = arr[1].orderNum
+            arr[1].orderNum = arr[0].orderNum
+            arr[0].orderNum = orderNum
+
+            this.newData = arr;
+            this.sendChange();
+          } else {
+            this.$message({
+              message: "澶勪簬椤剁锛屼笉鑳界户缁笂绉�",
+              type: "warning",
+            });
+          }
+          break;
+        case 2: //鍚戜笅绉诲姩
+          if (currentId < pchildNodes.length - 1) {
+            const tempChildrenNodex1 = pchildNodes[currentId + 1];
+            const tempChildrenNodex2 = pchildNodes[currentId];
+            // tempChildrenNodex2.orderNum =
+            //   pchildNodes[currentId + 1].data.orderNum;
+            // tempChildrenNodex1.orderNum = pchildNodes[currentId].data.orderNum;
+
+            const arr = [];
+            this.oriData.filter((res) => {
+              if (res.id == tempChildrenNodex2.data.id) {
+                // res.orderNum = tempChildrenNodex2.orderNum;
+                arr.push(res);
+              } else if (res.id == tempChildrenNodex1.data.id) {
+                // res.orderNum = tempChildrenNodex1.orderNum;
+                arr.push(res);
+              }
+            });
+            const orderNum = arr[1].orderNum
+            arr[1].orderNum = arr[0].orderNum
+            arr[0].orderNum = orderNum
+            this.newData = arr;
+            this.sendChange();
+          } else {
+            this.$message({
+              message: "澶勪簬搴曠锛屼笉鑳界户缁笅绉�",
+              type: "warning",
+            });
+          }
+          break;
+      }
+    },
+    setDelNode() {
+      this.$confirm("姝ゆ搷浣滃皢姘镐箙鍒犻櫎璇ョ洰褰�, 鏄惁缁х画?", "鎻愮ず", {
+        confirmButtonText: "纭畾",
+        cancelButtonText: "鍙栨秷",
+        type: "warning",
+      })
+        .then(() => {
+          this.remove(this.newNode, this.itemdetail);
+        })
+        .catch(() => {
+          this.$message({
+            type: "info",
+            message: "宸插彇娑堝垹闄�",
+          });
+        });
+    },
+    insertStart() {
+      this.ruleForm = {
+        level: null,
+        orderNum: null,
+        pid: null,
+        name: "",
+        descr: "",
+        bak: "",
+        checks: []
+      }
+    },
+    setNewNode(res) {
+      this.insertStart();
+      var node = this.$refs.tree.getCurrentNode();
+      this.newNode = node;
+      var id, lever, orderNum;
+      if (res == 1) {
+        //鏂板鍚岀骇
+        id = this.itemdetail.pid;
+        let pchildNodes = this.$refs.tree.getNode(this.newNode.id).parent.childNodes
+        orderNum = this.getMaxOrderNum(pchildNodes);
+        lever = this.itemdetail.level;
+      } else if (res == 2) {
+        //鏂板瀛愮骇
+        id = this.itemdetail.id;
+        let pchildNodes = this.$refs.tree.getNode(this.newNode.id).childNodes
+        orderNum = this.getMaxOrderNum(pchildNodes);
+        lever = this.itemdetail.level + 1;
+      }
+
+      this.ruleForm.pid = id;
+      this.ruleForm.level = lever;
+      this.ruleForm.orderNum = orderNum;
+      this.dialogFormVisible = true;
+    },
+    getMaxOrderNum(res) {
+      var val = -100;
+      for (var i in res) {
+        if (res[i].data.orderNum > val) {
+          val = res[i].data.orderNum;
+        }
+      }
+      val = val + 1;
+      return val;
     },
     append(node, data) {
       this.dialogFormVisible = true;
@@ -200,9 +987,10 @@
     },
     resetForm(formName) {
       this.dialogFormVisible = false;
+      this.ruleForm = {};
       this.$nextTick(() => {
         this.ruleForm = {};
-        this.$refs[formName].resetFields();
+        // this.$refs[formName].resetFields();
       });
     },
     submitForm(formName) {
@@ -210,19 +998,30 @@
         this.$refs[formName].validate((valid) => {
           if (valid) {
             this.fullscreenLoading = true;
-            insertDir(this.ruleForm)
+            var val = this.ruleForm;
+            if (this.ruleForm.checks) {
+              val.checks = this.ruleForm.checks.toString()
+            } else {
+              val.checks = ''
+            }
+            // var val = JSON.parse(JSON.stringify(this.ruleForm))
+            // this.itemdetail = val
+            insertDir(val)
               .then((res) => {
                 setTimeout(() => {
                   this.fullscreenLoading = false;
+
                   if (res.code == 200) {
                     this.$message({
                       message: "娣诲姞鎴愬姛",
                       type: "success",
                     });
-                    this.itemdetail = {};
-                    this.ruleForm = {};
+
+                    // this.itemdetail = {};
+                    // this.ruleForm = {};
                     this.dialogFormVisible = false;
                     this.$refs[formName].resetFields();
+                    this.getDirTree();
                   }
                 }, 500);
               })
@@ -240,6 +1039,8 @@
       });
     },
     remove(node, data) {
+      this.itemaName = node.parent.data.id;
+
       this.$confirm("姝ゆ搷浣滃皢鍒犻櫎璇ヨ妭鐐�, 鏄惁缁х画?", "鎻愮ず", {
         confirmButtonText: "纭畾",
         cancelButtonText: "鍙栨秷",
@@ -262,13 +1063,20 @@
             updateDirTrees(children),
           ])
             .then((res) => {
-              console.log(res);
               if (res[0].code == 200 && res[1].code == 200) {
                 this.$message({
                   type: "success",
                   message: "鍒犻櫎鎴愬姛!",
                 });
+                let pchildNodes = this.$refs.tree.getNode(this.itemdetail.id).parent;
+                if (pchildNodes.data.id) {
+                  this.currentData = JSON.stringify(pchildNodes.data)
+                } else {
+                  this.currentData = null
+                }
                 this.itemdetail = {};
+
+                this.getDirTree();
               } else if (res[0].code == 200) {
                 this.$message.error("鍒犻櫎鎴愬姛锛屼綅缃皟鏁村け璐�");
               } else if (res[1].code == 200) {
@@ -278,10 +1086,9 @@
               }
             })
             .catch(() => {
-              this.$message.error("鍒犻櫎澶辫触");
-              this.itemdetail = {};
+              // this.$message.error("鍒犻櫎澶辫触");
+              // this.itemdetail = {};
             });
-
           //閲嶇疆瑕佸垹闄ょ殑瀛怚D
           this.delChildIDs = [];
         })
@@ -352,8 +1159,7 @@
             }
             item.orderNum = i + 1;
           });
-          // console.log(nodeData);
-          //鏇存柊鍘熷鏁翠綋鏁版嵁
+
           let arr = [];
           this.oriData.forEach((e) => {
             nodeData.forEach((item) => {
@@ -369,152 +1175,279 @@
           this.dirList = this.old_dirDat; //灏嗗浠界殑dir閲嶆柊璧嬪��
         });
     },
-    sendChange() {
-      updateDirTrees(this.newData)
-        .then((res) => {
-          if (res.code == 200) {
-            this.getDirTree();
-            return;
-          } else {
-            alert("璋冩暣澶辫触锛岃閲嶈瘯锛�");
-          }
-        })
-        .catch(() => {
-          alert("淇敼澶辫触锛岃閲嶈瘯锛�");
-        });
+    async sendChange() {
+      const data = await updateDirTrees(this.newData)
+
+      if (data.code != 200) {
+        return this.$message.error("绉诲姩澶辫触");
+      }
+      this.getDirTree();
+      // this.getLayerTree()
+      //   .then((res) => {
+      //     if (res.code == 200) {
+      //     
+      //       return;
+      //     } else {
+      //       this.$message.error("绉诲姩澶辫触锛岃閲嶈瘯锛�");
+      //     }
+      //   })
+      //   .catch(() => {
+      //     this.$message.error("绉诲姩澶辫触锛岃閲嶈瘯锛�");
+      //   });
     },
-    handleNodeClick(data) {
-      // console.log(data);
+
+    setDirectoryDownload() {
+      var url = BASE_URL + '/dir/downloadDir?token=' + getToken() + '&id=' + this.directoryData.id
+      console.log(url)
+      $("#Iframe1").attr("src", url).click()
+    },
+
+    layerFormInline(data) {
+      if (data.pid == 0) {
+        this.directoryData = data;
+        this.directoryFlag = true;
+      } else {
+        this.directoryFlag = false;
+      }
+
+      this.newNode = this.$refs.tree.getNode(data.id);
       this.backUpData = JSON.stringify(data);
-      this.itemdetail = JSON.parse(JSON.stringify(data));
-    },
-    updCata(formName) {
-      this.$nextTick(() => {
-        this.$refs[formName].validate((valid) => {
-          if (valid) {
-            this.fullscreenLoading = true;
-            updateDirTree(this.itemdetail)
-              .then((res) => {
-                setTimeout(() => {
-                  this.fullscreenLoading = false;
-                  if (res.code == 200) {
-                    this.getDirTree();
-                    this.itemdetail = {};
-                    this.dialogFormVisible = false;
-                  }
-                }, 500);
-              })
-              .catch((res) => {
-                alert("淇敼澶辫触锛岃閲嶈瘯锛�");
-                this.fullscreenLoading = false;
-              });
-          } else {
-            return false;
+      var val = this.$refs.tree.getNode(data.id).data;
+      this.itemdetail = val;
+      this.currentData = JSON.stringify(data)
+
+      var checks = [];
+      if (val.checks) {
+        if (val.checks.indexOf(',') > -1) {
+          var value = val.checks.split(',');
+          for (var i in value) {
+            checks.push(value[i])
           }
-        });
+        } else if (val.checks.indexOf('[]') > -1) {
+
+        } else {
+          checks.push(val.checks)
+        }
+        this.itemdetail.checks = checks;
+      } else {
+        this.itemdetail.checks = []
+      }
+    },
+
+
+    async updCata(formName) {
+      this.fullscreenLoading = true;
+      var val = JSON.parse(JSON.stringify(this.itemdetail));
+      val.orderNum = this.newNode.data.orderNum;
+
+      var value = this.itemdetail.checks.toString()
+      val.checks = value;
+      const data = await updateDirTree(val);
+      this.currentData = JSON.stringify(this.itemdetail)
+
+      if (data.code != 200) {
+        this.fullscreenLoading = false;
+        return this.$message.error("淇敼澶辫触");
+      }
+      this.$message({
+        message: '淇敼鎴愬姛',
+        type: 'success'
       });
+      this.fullscreenLoading = false;
+      this.getDirTree();
+
+      // this.$nextTick(() => {
+      //   this.$refs[formName].validate((valid) => {
+      //     if (valid) {
+      //       
+
+      //       var val = this.itemdetail
+      //       var value = this.itemdetail.checks.toString()
+      //       val.checks = value;
+      //       
+      //       let res = JSON.parse(JSON.stringify(this.itemdetail));
+      //       this.itemdetail = res;
+      //       
+      //       updateDirTree(val)
+      //         .then((res) => {
+      //           setTimeout(() => {
+      //             this.fullscreenLoading = false;
+      //             if (res.code == 200) {
+      //               this.getDirTree();
+      //               // this.itemdetail = {};
+      //               this.dialogFormVisible = false;
+      //             }
+      //           }, 500);
+      //         })
+      //         .catch((res) => {
+      //           this.$message.error("淇敼澶辫触锛岃閲嶈瘯锛�");
+      //           this.fullscreenLoading = false;
+      //         });
+      //     } else {
+      //       return false;
+      //     }
+      //   });
+      // });
     },
     reset(formName) {
-      this.$refs[formName].resetFields();
+      this.itemdetail = {};
+      // this.$refs[formName].resetFields();
       if (this.backUpData != "") {
         this.itemdetail = JSON.parse(this.backUpData);
+        var val = JSON.parse(this.backUpData);
+        var checks = [];
+        if (val.checks) {
+          if (val.checks.indexOf(',') > -1) {
+            var value = val.checks.split(',');
+            for (var i in value) {
+              checks.push(value[i])
+            }
+          } else {
+            checks.push(val.checks)
+          }
+          this.itemdetail.checks = checks;
+        } else {
+          this.itemdetail.checks = []
+        }
+      }
+    },
+    showPermsMenu(res) {
+      switch (res.tag) {
+        case "/delete":
+          this.menuStatus.delete = true;
+          break;
+        case "/insert":
+          this.menuStatus.insert = true;
+          break;
+        case "/update":
+          this.menuStatus.update = true;
+          break;
+      }
+    },
+    getPerms() {
+      var val = this.$store.state.currentPerms;
+      var permsEntity = this.$store.state.permsEntity;
+      if (!permsEntity || !permsEntity.length) {
+        getPerms().then((res) => {
+          if (res.code == 200) {
+            permsEntity = res.result;
+          }
+        });
+      }
+      for (var i = 0; i < permsEntity.length; i++) {
+        if (val === permsEntity[i].perms) {
+          this.showPermsMenu(permsEntity[i]);
+        }
       }
     },
   },
   mounted() {
     this.getDirTree();
+    this.getPerms();
   },
 };
 </script>
 
 <style lang="less" scoped>
-.cataSettings_box {
+.subpage_Box {
+  //height: 96%;
+  width: 98%;
+  padding: 1%;
   border-radius: 10px;
-  height: 100%;
-  padding: 10px;
-  box-sizing: border-box;
+  // .cataLogContent {
+  //   width: 100%;
+  //   height: 100%;
+  //   display: flex;
+  //   // align-items: center;
+  //   justify-content: space-between;
+  //   .cataLog_leftTree {
+  //     width: 30%;
+  //     height: 98%;
+  //     border-radius: 5px;
+  //     padding: 10px;
+  //     overflow-y: auto;
+  //   }
+  //   .cataLog_rightContent {
+  //     width: 66%;
+  //     height: 98%;
+  //     border-radius: 5px;
+  //     padding: 10px;
+  //     .menuTop {
+  //       /deep/ .el-form-item {
+  //         margin-bottom: 0px;
+  //       }
+  //     }
+  //   }
+  // }
+}
+
+.mainBox {
+  padding-top: 10px;
+  width: 100%;
+  height: calc(100% - 75px);
   display: flex;
-  .cataSettings_tree {
-    position: relative;
-    width: 344px;
-    height: 100%;
-    background: rgb(240, 242, 245);
-    padding: 20px;
-    border-radius: 10px;
-    box-sizing: border-box;
-    overflow: auto;
-    .saveBtn {
-      position: absolute;
-      left: 250px;
-      top: 23px;
-    }
-    .cataTreeBox {
-      height: 88%;
-      width: 100%;
-      overflow: auto;
-      .el-tree {
-        background: transparent;
-        font-size: 15px;
-        font-family: Microsoft YaHei;
-        font-weight: 400;
-        color: #000000;
-        /deep/ .el-tree-node {
-          padding-top: 10px;
-          // padding-bottom: 10px;
-        }
-        /deep/ .el-tree-node:focus > .el-tree-node__content {
-          background-color: #b9b9b9;
-        }
-        /deep/ .el-tree-node__content:hover {
-          background-color: rgb(153, 153, 153);
-        }
-        .btnBox {
-          margin: 0 10px 0 5px;
-          .el-button + .el-button {
-            margin-left: 5px;
-          }
-        }
-      }
-    }
-  }
-  .itemSettings {
-    width: calc(100% - 344px);
-    border-radius: 10px;
-    background: rgb(240, 242, 245);
-    margin-left: 10px;
+  justify-content: space-around;
+  .leftTree {
+    width: calc(32% - 0px);
     height: 100%;
     padding: 10px;
+    border-radius: 5px;
     box-sizing: border-box;
-    .title_box {
-      background: #fff;
-      padding: 10px;
-      margin-bottom: 24px;
-      display: flex;
-      border-radius: 10px;
-      border: 1px solid rgb(202, 201, 204);
-      box-sizing: border-box;
+    overflow-y: auto;
+  }
+  .right {
+    width: 65%;
+    height: 100%;
+    border-radius: 5px;
+    padding: 10px;
+    box-sizing: border-box;
+    border: 1px solid #dcdfe6;
+    .inquire {
+      // margin-bottom: 10px;
+      padding: 8px;
+      // margin-top: 10px;
+      border-radius: 5px;
+      //border: 1px solid #dcdfe6;
+      //margin-bottom: 20px;
+      .el-form-item {
+        margin: 5px;
+      }
     }
-    .form_box {
-      border: 1px solid rgb(202, 201, 204);
-      border-radius: 10px;
-      background: #fff;
-      padding-top: 30px;
-      box-sizing: border-box;
+  }
+  .right_menu {
+    position: fixed;
+    display: block;
+    z-index: 10000;
+    padding: 10px;
+    border: 1px solid #ebeef5;
+    border-radius: 4px;
+    box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
+    ul {
       width: 100%;
-      .el-input,
-      /deep/ .el-textarea {
-        width: 400px;
+      height: 100%;
+      list-style: none;
+      margin: 0;
+      padding: 0;
+      border-radius: 2%;
+      li {
+        margin: 0 0 1px 0;
+        color: rgb(77, 77, 73);
+        text-align: center;
+        font-size: 14px;
+        padding: 4%;
+        width: 100%;
+        height: 9.7%;
+        float: left;
       }
-      .btnBox {
-        margin: 0 270px 20px;
-        width: 200px;
-        display: flex;
-        justify-content: space-between;
+      li:hover {
+        color: #409eff !important;
       }
     }
   }
-  /deep/ .el-dialog__body {
-    padding: 0 30px 0 0;
-  }
+}
+.btnBox {
+  position: absolute;
+  bottom: 0;
+  right: 0;
 }
 </style>

--
Gitblit v1.9.3