管道基础大数据平台系统开发-【前端】-新系統界面
Surpriseplus
2022-11-21 ba3f4338070b930bc2b5b50bcd483aba1a37d7b9
src/views/datamanage/dataLoader.vue
@@ -14,7 +14,7 @@
        <el-form :inline="true" :model="formInline" class="demo-form-inline">
          <el-form-item :label="$t('dataManage.dataUpObj.catalogue')">
            <el-cascader
              v-model="formInline.catalog"
              v-model="formInline.dirid"
              :options="catalogOption"
              @change="catalogChange"
              :props="cascader"
@@ -22,15 +22,25 @@
          </el-form-item>
          <el-form-item :label="$t('dataManage.dataUpObj.company')">
            <el-cascader
              v-model="formInline.company"
              v-model="formInline.depid"
              :options="companyOption"
              @change="companyChange"
              :props="cascader"
            ></el-cascader>
          </el-form-item>
          <el-form-item :label="$t('dataManage.dataUpObj.versionNo')">
              <el-select v-model="formInline.verid" :placeholder="$t('common.choose')">
              <el-option
                v-for="item in verOption"
                :key="item.id"
                :label="item.name"
                :value="item.id">
              </el-option>
              </el-select>
          </el-form-item>
          <el-form-item :label="$t('dataManage.dataUpObj.entryTime')">
            <el-date-picker
              v-model.trim="formInline.monitorTime"
              v-model.trim="formInline.gather"
              :picker-options="pickerOptions"
              type="datetime"
              placeholder="请选择"
@@ -38,7 +48,7 @@
            />
          </el-form-item>
          <el-form-item>
            <input id="uploadfile" @change= "handleFileChange" type="file"  name="file" multiple="multiple"  style="display: none"></input>
            <input id="uploadfile" @change= "handleFileChange" type="file"  name="file" multiple="multiple" accept=".xls,.xlsx,.mdb,.shp.zip,.gdb.zip"  style="display: none"></input>
            <el-button icon="el-icon-document-add" @click="fileSelect" class="primary">{{
              $t('common.file')
            }}</el-button>
@@ -47,17 +57,16 @@
          <el-form-item :label="$t('dataManage.dataUpObj.describe')">
            <el-input
              type="textarea"
              v-model="formInline.desc"
              v-model="formInline.descr"
              maxlength="50"
              class="nm-skin-pretty"
              show-word-limit
:rows="2"  resize='none'
              :rows="2"  resize='none'
              style="width: 460px"
            ></el-input>
          </el-form-item>
          <el-form-item>
            <el-button icon="el-icon-upload" @click="setFileUpload"
             type="success">{{
              $t('common.upload')
            }}</el-button>
@@ -85,7 +94,7 @@
     :data="tableData"
        border
        style="width: 100%"
        height="92%"
        height="99%"
        @selection-change="handleSelectionChange">
       <el-table-column type="selection" width="55" />
        <el-table-column
@@ -95,15 +104,15 @@
          width="70px"
          fixed
        />
        <el-table-column
          <el-table-column
          align="center"
          prop="name"
          :label="$t('userManage.userInfoObj.uname')"
          :label="$t('common.name')"
          fixed
        />
    </el-table>
      <div style="margin-top: 10px" class="pagination_box">
      <!-- <div style="margin-top: 10px" class="pagination_box">
    <el-pagination
          @size-change="handleSizeChange"
          @current-change="handleCurrentChange"
@@ -114,17 +123,67 @@
          :total="count"
        >
        </el-pagination>
      </div>
      </div> -->
      </div>
    </div>
    <!--  -->
   <el-dialog
  :title="$t('dataManage.datawarehousing')"
  :visible.sync="dialogWarehousing"
  width="50%"
  :before-close="handleWareClose"
  >
  <div  class="dialogBox">
  <div class="transFarBox">
    <ul>
      <li @click="singleElection(item)" v-for="(item, i) in tableWareOne"  :class="{ active: activeName == item.tab }">{{item.tab}} ({{item.type}})</li>
    </ul>
  </div>
  <div class="tarnsbtton">
   <div><div style="padding:2%"> <el-link><i class="el-icon-plus"></i></el-link></div></div>
  </div>
  <div class="transFarBox">
 <ul>
      <li @click="singleElection2(item)" v-for="(item, i) in tableWareTwo"  :class="{ active: activeName2 == item.entity }">{{item.tabDesc}} (  {{item.tab}})</li>
    </ul>
  </div>
   <div class="tarnsbtton">
     <div><div style="padding:2%"> <el-link @click="setWareTableChangeLeft"  ><i class="el-icon-d-arrow-left"></i></el-link></div><br/> <div style="padding:2%">
    <el-link><i class="el-icon-d-arrow-right" @click="setWareTableChangeRight"></i></el-link></div></div>
   </div>
   <div class="transFarBox">
     <ul>
      <li @click="singleElection3(i)" v-for="(item, i) in tableWareThree"  :class="{ active: activeName3 ==( item.tab+i)}">{{item.tab}} ( {{item.tabDesc}}:{{item.entity}} )</li>
    </ul>
   </div>
  </div>
  <span slot="footer" class="dialog-footer">
        <el-button  class="primary" @click="autoMatchWare">自动匹配</el-button>
    <el-button @click="dialogVisible = false">取 消</el-button>
    <el-button class="primary" @click="setInsrtWareTable">确 定</el-button>
  </span>
</el-dialog>
  </div>
</template>
<script>
import $ from 'jquery';
import MyBread from '../../components/MyBread.vue';
import { selectdirTab, queryDepTree } from '../../api/api';
import { getToken } from '@/utils/auth';
import {
  dataLoader_selectDirAll,
  dataLoader_selectDepAll,
  dataLoader_selectPath,
  dataLoader_selectVerByDirid,
  dataLoader_selectFiles,
  dataUploadDeleteFiles,
  dataUploadInsertFiles,
  dataLoader_selectMappers,
  dataLoader_SelectTabs
} from '../../api/api';
export default {
  name: 'dataUpdata',
  components: {
@@ -132,15 +191,21 @@
  },
  data() {
    return {
      wareStatus: false,
      dialogWarehousing: false,
      btnStatus: 0,
      count: 0,
      formInline: {
        monitorTime: '',
        verid: '',
        gather: '',
      },
      tableWareOne: [],
      tableWareTwo: [],
      catalogOption: [],
      companyOption: [],
      tableData: [],
      listTable: [],
      listTableWare: [],
      tableWareThree: [],
      multipleSelection: [],
      fullscreenLoading: false,
      listData: {
@@ -153,6 +218,7 @@
        },
        selectableRange: '00:00:00 - 23:59:59',
      },
      verOption: [],
      cascader: {
        label: 'name',
        value: 'id',
@@ -160,6 +226,13 @@
        checkStrictly: true,
        emitPath: false,
      },
      wareSelectOne: null,
      wareSelectTwo: null,
      listWare: [],
      activeName: '',
      activeName2: '',
      activeName3: '',
      wareTableFlag: null,
    };
  },
@@ -168,9 +241,10 @@
    this.getQueryDepTree();
    this.timeDefault();
    this.getFilePath();
  },
  watch: {
    'detailData.monitorTime': {
    'detailData.gather': {
      handler(newValue, oldValue) {
        if (newValue) {
          let date = new Date();
@@ -184,7 +258,7 @@
          ) {
            let hh1 = moment(newValue).format('HH:mm:ss');
            if (hh1 > nowDate) {
              this.detailData.monitorTime = new Date();
              this.detailData.gather = new Date();
            }
            st = nowDate;
          } else {
@@ -200,58 +274,183 @@
  },
  methods: {
    //文件上传
    setFileUpload() {
      this.handlerLoading(true);
      setTimeout(() => {
        this.handlerLoading(false);
      }, 2000);
   async setInsrtWareTable(){
      var obj = {
                  metaEntity: this.formInline,
                  fileEntities: this.tableWareThree
                };
                debugger
            const res = await dataUploadInsertFiles(JSON.stringify(obj));
             if (res.code != 200) {
        this.$message.error('数据入库失败');
        return;
      }else{
        debugger
         this.$message({
          message: '数据入库成功',
          type: 'success'
        });
        this.dialogWarehousing = false;
        this.getFileLength();
        this.setClearAttartch();
      }
      this.getFileLength();
    },
    setClearAttartch(){
       this.activeName = '';
      this.activeName2 = '';
      this.activeName3 = '';
      this.tableWareThree =[];
      this.tableWareTwo=[];
      this.tableWareOne=[];
    },
    autoMatchWare() {
      var val1 = this.tableWareOne;
      var val2 = this.tableWareTwo;
      var std = [];
      for (var i = 0; i < val1.length; i++) {
        const stdTab = this.setSplitWare(val1[i].tab)
        for (var j = 0; j < val2.length; j++) {
          if (val2[j].tab == stdTab) {
            std.push(val1[i].tab)
            val1[i].entity = val2[j].entity;
            val1[i].tabDesc= val2[j].tabDesc;
            this.tableWareThree.push(val1[i]);
          }
        }
      }
 std.forEach(item => {
          this.tableWareOne = this.tableWareOne.filter(items => items.tab!== item);
        });
    },
    setSplitWare(res) {
      if (res.indexOf(".shp") != -1) {
        return res.split(".shp").join("");
      }else if (res.indexOf(".mdb") != -1){
 return res.split(".mdb").join("");
      }else if (res.indexOf(".gdb") != -1){
 return res.split(".gdb").join("");
      }else{
        return res;
      }
    },
    handleWareClose(done) {
      this.$confirm('确认关闭?')
        .then(_ => {
          done();
          this.setClearAttartch();
        })
        .catch(_ => { });
    },
    setWareTableChangeLeft() {
      var res = this.wareTableFlag;
      var value1 = this.tableWareThree[res];
      value1.entity = null;
        value1.tabDesc= null;
      this.tableWareOne.push(value1);
      this.tableWareThree.splice(res, 1)
      this.activeName = '';
      this.activeName2 = '';
      this.activeName3 = '';
    },
    setWareTableChangeRight() {
      this.wareSelectOne.entity = this.wareSelectTwo.entity;
          this.wareSelectOne.tabDesc = this.wareSelectTwo.tabDesc;
      this.tableWareThree.push(this.wareSelectOne)
      this.tableWareOne.forEach((value, index, array) => {
        if (value.tab == this.wareSelectOne.tab) {
          this.tableWareOne.splice(index, 1)
        }
      })
   this.activeName = '';
      this.activeName2 = '';
      this.activeName3 = '';
    },
    singleElection(row) {
      this.wareSelectOne = row;
      this.activeName = row.tab
    },
    singleElection2(row) {
      this.wareSelectTwo = row;
      this.activeName2 = row.entity
    },
    singleElection3(res) {
      this.wareTableFlag = res;
      this.activeName3 = this.tableWareThree[res].tab + res;
    },
    //查询所有的表
    async getDataLoaderSelectTabs() {
      const res = await dataLoader_SelectTabs();
      if (res.code != 200) {
        this.$message.error('数据请求失败');
        return;
      }
      this.tableWareTwo = res.result;
    },
    //查询映射
    async getDataLoaderSelectMappers(res) {
      const data = await dataLoader_selectMappers(res);
      if (data.code != 200) {
        this.$message.error('数据请求失败');
        return;
      }
      debugger
      this.tableWareOne = data.result;
    },
    //数据删除
    setFileDelete() {
    async setFileDelete() {
      this.handlerLoading(true);
      this.multipleSelection.forEach(item => {
        this.listTable = this.listTable.filter((items) => {
          if (items.name != item.name && item.id != items.id) {
            return items;
          }
        });
      });
      this.listData.pageIndex= 1;
      this.listData.pageSize = 10;
      this.count = this.listTable.length;
      this.setViewTable();
      var data = JSON.stringify(this.multipleSelection);
      const res = await dataUploadDeleteFiles(data);
      if (res.code != 200) {
        this.$message.error('删除失败');
        return;
      }
      this.getFileLength();
      this.handlerLoading(false);
    },
    //数据入库
    setFileWare() {
      this.handlerLoading(true);
      setTimeout(() => {
        this.handlerLoading(false);
      }, 2000);
      this.getFilePath();
    async setFileWare() {
      this.tableWareThree = [];
      this.listTableWare = [];
      this.getDataLoaderSelectTabs();
      this.getDataLoaderSelectMappers(this.formInline.path);
      this.dialogWarehousing = true;
      //     if(this.multipleSelection.length==0){
      //      this.$message.error('请选择要入库的数据');
      //       return
      //     }
      //       var obj = {
      //             metaEntity: this.formInline,
      //             fileEntities: this.multipleSelection
      //           };
      //       const res = await dataUploadInsertFiles(JSON.stringify(obj));
      //        if (res.code != 200) {
      //       this.$message.error('文件入库失败');
      //       return;
      //     }
      //
    },
    //获取文件上传路径
    getFilePath() {
      for (var i = 0; i < 20; i++) {
        this.listTable.push({
          id: i,
          name: 'value' + i
        })
      }
      this.count = this.listTable.length;
      this.listData.pageIndex = 1;
      this.listData.pageSize = 10;
      this.setViewTable();
    },
    //显示表格数据
    setViewTable() {
      var index = this.listData.pageIndex - 1;
@@ -262,20 +461,71 @@
        if (this.listTable[i] != null) {
          std.push(this.listTable[i])
        }
      }
      this.tableData = std;
    },
    //获取文件上传数据
    getFileLength() {
    //文件上传
    setFileUpload() {
      this.handlerLoading(true);
      var token = getToken();
      var formData = new FormData();
      var fs = document.getElementById("uploadfile");
      for (var i = 0, c = fs.files.length; i < c; i++) {
        formData.append(fs.files[i].name, fs.files[i]); // fs.files[i].name,file
      }
      $.ajax(BASE_URL + "/dataLoader/uploadFiles?token=" + token + "&path=" + this.formInline.path, {
        type: "post",
        data: formData,
        async: true,
        cache: false,
        processData: false,
        contentType: false,
        success: (rs) => {
          this.getFileLength();
          alert("code = " + rs.code + ", msg = " + rs.msg + ", result = " + rs.result);
        },
        error: (rs) => {
          alert("上传文件失败!");
        }
      });
      this.handlerLoading(false);
    },
    //获取文件上传数据
    async getFileLength() {
      const res = await dataLoader_selectFiles(this.formInline.path);
      if (res.code != 200) {
        this.$message.error('文件上传数据获取失败');
        return;
      }
      if (res.result == null) {
        this.count = 0;
        this.setClearTableData();
      } else {
        this.count = res.result.length;
        this.tableData = res.result;
      }
      // this.listData.pageIndex = 1;
      // this.listData.pageSize = 10;
      // this.setViewTable();
    },
    //清除表格信息
    setClearTableData() {
      this.tableData = [];
      this.listTable = [];
    },
    //分页控制
    handleSizeChange(res) {
      this.listData.pageIndex = 1;
@@ -295,13 +545,8 @@
      $("#uploadfile").click();
    },
    handleFileChange() {
      var val = document.getElementById("uploadfile").files;
      if (!val || !val.length) return;
      var formData = new FormData();
      for (var i = 0; i < val.length; i++) {
        formData.append(val[i].name, val[i]);
      }
      console.log(formData)
      var fs = document.getElementById("uploadfile");
    },
    //当前时间获取
    timeDefault() {
@@ -322,7 +567,7 @@
        minutes +
        sign2 +
        seconds;
      this.formInline.monitorTime = s1;
      this.formInline.gather = s1;
    },
    //Loading显隐
@@ -331,32 +576,57 @@
    },
    //目录切换
    catalogChange(value) {
      this.formInline.catalog = value;
      this.formInline.dirid = value;
      this.getselectVerByDirid();
    },
    //单位切换
    companyChange(value) {
      this.formInline.company = value;
      this.formInline.depid = value;
    },
    //单位列表获取
    async getQueryDepTree() {
      const res = await queryDepTree();
    //获取文件上传路径
    async getFilePath() {
      const res = await dataLoader_selectPath();
      if (res.code != 200) {
        this.$message.error('单位列表获取失败');
        return;
      }
      this.formInline.company = 1;
      this.formInline.path = res.result;
    },
    //单位列表获取
    async getQueryDepTree() {
      const res = await dataLoader_selectDepAll();
      if (res.code != 200) {
        this.$message.error('单位列表获取失败');
        return;
      }
      this.formInline.depid = 1;
      this.companyOption = this.treeData(res.result);
    },
    //版本号获取
    async getselectVerByDirid() {
      this.verOption = [];
      this.formInline.verid = "";
      const res = await dataLoader_selectVerByDirid(this.formInline.dirid);
      if (res.code != 200) {
        this.$message.error('版本列表获取失败');
        return;
      }
      this.verOption = res.result;
      this.formInline.verid = res.result[0].id;
    },
    //目录列表获取
    async getSelectdirTab() {
      const res = await selectdirTab();
      const res = await dataLoader_selectDirAll();
      if (res.code != 200) {
        this.$message.error('目录列表获取失败');
        return;
      }
      this.formInline.catalog = 1;
      this.formInline.dirid = 1;
      this.catalogOption = this.treeData(res.result);
      this.getselectVerByDirid()
    },
    //树列表生成
    treeData(source) {
@@ -485,11 +755,11 @@
        /deep/.btn-next {
          background: transparent;
        }
         /deep/.btn-next i {
          color:white;
        /deep/.btn-next i {
          color: white;
        }
        /deep/.btn-prev i {
          color:white;
          color: white;
        }
      }
    }
@@ -530,5 +800,120 @@
  /deep/.el-loading-spinner i {
    color: #1890ff !important;
  }
  /deep/ .el-dialog {
    background: #303030;
  }
  /deep/.el-range-editor.is-active,
  .el-range-editor.is-active:hover,
  .el-select .el-input.is-focus .el-input__inner {
    border: 1px solid;
  }
  /deep/.el-dialog__title {
    color: white;
  }
  .dialogBox {
    width: 100%;
    height: 500px;
    display: flex;
    justify-content: space-between;
    .transFarBox {
      width: 30%;
      height: 100%;
      border: 1px solid white;
      border-radius: 5px;
      max-height: 500px;
      overflow-y: auto;
      li {
        color: white;
        border-bottom: 1px solid white;
        line-height: 30px;
        text-align: center;
      }
      li:hover {
        background: rgba(255, 255, 255, 0.3);
      }
      .active {
        color: #409eff;
      }
    }
    .tarnsbtton {
      width: 6%;
      height: 100%;
      /*flex 布局*/
      display: flex;
      /*实现垂直居中*/
      align-items: center;
      /*实现水平居中*/
      justify-content: center;
    }
  }
  .el-icon-d-arrow-right {
    color: white;
  }
  .el-icon-d-arrow-left {
    color: #fff;
  }
  .el-icon-plus {
    color: white;
  }
  /*修改table 表体的背景颜色和文字颜色*/
  /deep/ .el-table {
    background-color: transparent;
    th,
    td {
      background-color: transparent;
    }
    .el-table__expanded-cell {
      background-color: transparent !important;
    }
    // 表头背景色
    th.el-table__cell {
      background-color: #303030 !important;
      color: #fff;
    }
    tr > td {
      background-color: #303030 !important;
      color: #fff;
    }
    // hover效果
    tr:hover > td {
      background-color: rgba(255, 255, 255, 0.3) !important;
    }
    tbody tr:hover {
      background-color: rgba(255, 255, 255, 0.3) !important;
      // text-align: center;
    }
    // 滚动条宽高
    .el-table__body-wrapper::-webkit-scrollbar {
      width: 5px;
      height: 5px;
    }
    .el-table__body-wrapper::-webkit-scrollbar {
      width: 5px;
      /*滚动条宽度*/
      height: 5px;
      /*滚动条高度*/
    }
    /*定义滚动条轨道 内阴影+圆角*/
    .el-table__body-wrapper::-webkit-scrollbar-track {
      box-shadow: 0px 1px 3px #216fe6 inset;
      /*滚动条的背景区域的内阴影*/
      border-radius: 10px;
    }
    /*定义滑块 内阴影+圆角*/
    .el-table__body-wrapper::-webkit-scrollbar-thumb {
      box-shadow: 0px 1px 3px #216fe6 inset;
      border-radius: 6px;
      background-color: #216fe6;
    }
  }
}
</style>