element el-upload上传功能

2023.11.14今天我学习了如何使用el-upload:

 <!--drag设置可拖动-->
      <!--accept=".xlsx"设置上传的文件类型-->
      <!--:limit=1上传文件的最大个数-->
      <!--:auto-upload="false"是否在选取后直接上传-->
      <!--:before-upload="beforeUploadFile"上传文件之前的钩子-->
      <!--:on-change="fileChange"文件状态改变时的钩子-->
      <!--:on-remove="fileRemove"文件列表移除文件时的钩子-->
      <!--:on-exceed="exceedFile"文件超出个数限制-->
      <!--:on-success="upload_success"文件上传成功的钩子-->
      <el-form :model="formTable" enctype="multipart/form-data" methods="post">
        <el-form-item label="选择文件:">
          <el-upload
            drag
            :limit=limitNum
            name="file"
            ref="upload"
            action=""
            :http-request="dict_upload_request"
            accept=".xlsx"
            :headers="headers"
            :with-credentials="true"
            :file-list="fileList"
            :before-upload="beforeUploadFile"
            :before-remove="beforeRemove"
            :on-exceed="exceedFile"
            :on-remove="fileRemove"
          >
            <i class="el-icon-upload"></i>
            <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
            <div class="el-upload__tip" slot="tip">只能上传xlsx文件,且上传数据尽量不超过1000条</div>
           
          </el-upload>
        </el-form-item>
      </el-form>

如果后端接口是固定并且不需要携带参数就用action,如果是动态的就用http-request。

    // 自定义上传的方法
    dict_upload_request(item) {
      let formData = new FormData()
      formData.append('file', item.file)//上传的文件
      formData.append('status', 0)//携带的参数 参数名+值
      formData.append('name', '张三')//携带的参数 参数名+值

      //如果传入的参数需要数组的话,可以这样写
      let all_column_name = ['11','22','33']
      for (let i = 0; i < all_column_name .length; i++) {
        formData.append('all_check_fields[]', all_column_name[i]); // 在key后面加上 [] 表示这是一个数组
        }     

      dict_upload(formData).then(res => {
        this.$message({
          message: '上传成功!',
          type: 'success'
        })
      })
    },

完整代码如下:

<template>
  <div class="app-container">
    <el-row>
      <div class="header_title">{{ queryParams.table_chinese_name }}</div>
      <el-col :span="3">
        <div style="height: 500px;width: 200px;margin-left: 50px">
          <el-steps :active="step_num" direction="vertical" finish-status="success" v-if="step_num==0">
            <el-step title="步骤 1"></el-step>
          </el-steps>
          <el-steps :active="step_num" direction="vertical" finish-status="success" v-if="step_num!=0">
            <el-step title="步骤 1"></el-step>
            <el-step title="步骤 2"></el-step>
          </el-steps>
        </div>
      </el-col>
      <el-col :span="21">
        <el-card>

          <el-form :model="formTable" enctype="multipart/form-data" methods="post" v-if="step_num==0">
            <el-row :gutter="10">
              <el-col :xs="24" :md="8">
                <!--校验类型-->
                <el-form-item label="校验类型:">
          <span>
            <el-radio v-model="upload_type" label="1">常规校验</el-radio>
            <el-tooltip content="不对导入的重复表数据进行覆盖" placement="top">
              <i class="el-icon-question"/>
            </el-tooltip>
          </span>
                  <span style="margin-left: 10%">
            <el-radio v-model="upload_type" label="2">精确校验</el-radio>
            <el-tooltip content="可选择对导入的重复表数据进行覆盖" placement="top">
              <i class="el-icon-question"/>
            </el-tooltip>
          </span>
                </el-form-item>
                <!--精确校验的树形选择框-->
                <el-card
                  :class="export_list[0]!=undefined&&export_list[0].length<6?'no_el_card_tree_border':'el_card_tree_border'"
                  v-show="upload_type==2"
                >
                  <el-tree
                    ref="tree"
                    :data="select_upload_header_data"
                    :props="defaultProps"
                    default-expand-all
                    node-key="remark_name"
                    @check="handleNodeClick"
                    show-checkbox
                  />
                </el-card>
                <!--选择文件-->
                <el-form-item label="选择文件:">
                  <el-upload
                    drag
                    name="file"
                    ref="upload"
                    action=""
                    :http-request="dict_upload_request"
                    accept=".xlsx"
                    :headers="headers"
                    :with-credentials="true"
                    :file-list="fileList"
                    :before-upload="beforeUploadFile"
                    :before-remove="beforeRemove"
                    :on-remove="fileRemove"
                  >
                    <i class="el-icon-upload"></i>
                    <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
                    <div class="el-upload__tip" slot="tip">只能上传xlsx文件,且上传数据尽量不超过10000条</div>
                  </el-upload>
                </el-form-item>
              </el-col>
              <el-col :xs="24" :md="16">
                <div class="el-upload__tip">说明:</div>
                <div class="el-upload__tip">一、第一行为列名,第二行为注释,请从第三行开始填写</div>
                <div class="el-upload__tip">二、示例:
                  <el-image style="width: 80%;height: 5vh;" :src="imgUrl" :preview-src-list="[imgUrl]"/>
                </div>
                <div class="el-upload__tip">三、
                  <el-button type="text" style="text-decoration: underline" @click="download_demo">下载表结构模板
                  </el-button>
                </div>
              </el-col>
            </el-row>
          </el-form>

          <div v-if="step_num==1">
            <el-row :gutter="10" class="mb8">
              <el-col :span="1.5">
                <el-button
                  type="danger"
                  plain
                  icon="el-icon-close"
                  size="mini"
                  :disabled="repeat_data_disabled"
                  @click="all_delete_repeat_data()"
                >批量移除
                </el-button>
              </el-col>
              <el-col :span="1.5">
                <el-button
                  type="success"
                  plain
                  icon="el-icon-check"
                  size="mini"
                  :disabled="repeat_data_disabled"
                  @click="all_add_repeat_data()"
                >批量新增
                </el-button>
              </el-col>
            </el-row>
            <div style="color: red;text-align: center;">(当前重复数据为导入excel中的数据)</div>
            <el-table :data="repeat_data_list"
                      height="50vh"
                      @selection-change="repeat_data_selection"
                      :row-class-name="tableRowClassName"
            >
              <el-table-column type="selection" width="55" align="center"/>
              <el-table-column sortable :label="val.remark_name" align="center" :prop="val.column_name"
                               class-name="small-padding fixed-width" v-for="(val,key,index) in columnName"
                               :show-overflow-tooltip="true"
                               :render-header="tableHeaders.renderHeader"
              >
                <template slot-scope="scope">
                  <span>{{ scope.row[val.column_name] }}</span>
                </template>
              </el-table-column>
              <el-table-column label="操作" align="center" width="120%">
                <template slot-scope="scope">
                  <div>
                    <el-button type="text" icon="el-icon-close"
                               style="color: red" @click="delete_repeat_data(scope.row)"
                    >
                      移除
                    </el-button>
                  </div>
                  <div>
                    <el-button type="text" icon="el-icon-check" style="color: #0f982a"
                               @click="add_repeat_data(scope.row)"
                    >
                      新增
                    </el-button>
                  </div>
                  <div>
                    <el-button type="text" icon="el-icon-view" @click="cover_repeat_data(scope.row)">
                      查看重复数据
                    </el-button>
                  </div>
                </template>
              </el-table-column>
            </el-table>
          </div>
          <div style="float: right;margin: 2%" class="dialog-footer" v-if="step_num==1">
            <el-button type="success" @click="repeat_data_all_add"
            >全部新增
            </el-button>
            <el-button type="primary" @click="all_cover_repeat_data"
            >全部覆盖
            </el-button>
            <el-button @click="repeat_data_filsh"
            >取 消
            </el-button>
          </div>
        </el-card>
      </el-col>
    </el-row>
    <el-row>

    </el-row>
    <!--导出表结构-->
    <el-table :data="export_list" id="header_table" v-show="false">
      <el-table-column :label="item.column_name"
                       v-for="(item,index) in export_list[0]"
      >
        <template slot-scope="scope">
          {{ item.remark_name }}
        </template>
      </el-table-column>
    </el-table>
    <!--覆盖数据的弹窗-->
    <el-dialog :visible.sync="cover_data_open" title="表格中重复的数据" :close-on-click-modal="false">
      <div class="app-container">
        <span>当前选中的数据:</span>
        <el-table :data="repeat_current_select_data">
          <el-table-column sortable :label="val.remark_name" align="center" :prop="val.column_name"
                           class-name="small-padding fixed-width" v-for="(val,key,index) in columnName"
                           :show-overflow-tooltip="true"
                           :render-header="tableHeaders.renderHeader"
          >
            <template slot-scope="scope">
              <span>{{ scope.row[val.column_name] }}</span>
            </template>
          </el-table-column>
        </el-table>
        <el-row :gutter="10" class="mb8">
          <el-col :span="1.5">
            <el-button @click="more_cover_datas" style="margin: 5%" type="primary" size="mini" plain
                       :disabled="cover_disable"
                       v-if="repeat_data_list.length!=0&&Object.keys(repeat_data_list[0]).length!=all_column_name.length"
            >批量覆盖
            </el-button>
          </el-col>
        </el-row>
        <span>表格中重复的数据:</span>
        <el-table :data="once_repeat_data" height="30vh" @selection-change="select_cover_data">
          <el-table-column type="selection" width="55" align="center"/>
          <el-table-column sortable :label="val.remark_name" align="center" :prop="val.column_name"
                           class-name="small-padding fixed-width" v-for="(val,key,index) in columnName"
                           :show-overflow-tooltip="true"
                           :render-header="tableHeaders.renderHeader"
          >
            <template slot-scope="scope">
              <span>{{ scope.row[val.column_name] }}</span>
            </template>
          </el-table-column>
          <el-table-column label="操作">
            <template slot-scope="scope">
              <el-button type="text" icon="el-icon-sort" @click="cover_data(scope.row)"
                         v-if="Object.keys(repeat_data_list[0]).length!=all_column_name.length"
              >覆盖
              </el-button>
            </template>
          </el-table-column>
        </el-table>
      </div>
      <div slot="footer" class="dialog-footer">
        <el-button @click="once_repeat_data_save" type="primary" v-show="save_cover_data_show">保 存</el-button>
        <el-button @click="once_repeat_data_cancel" v-show="!save_cover_data_show">取 消</el-button>
      </div>
    </el-dialog>
  </div>
</template>

<script>
import { getToken } from '@/utils/auth'
import {
  dict_upload, getAllCoverData,
  getColumnHistory,
  getCoverRepeatData,
  getDistInsertData,
  getTableHeaderDataList
} from '@/api/dict/list'
import { exportToExcel } from '@/utils/Export2Excel'
import table_header_image from '@/assets/images/table_header_demo.png'

export default {
  // name: 'dictUpload',
  data() {
    return {
      table_status: 0,
      queryParams: {},
      database_id: '',
      tb_code: '',
      headers: {// 设置请求头
        Authorization: 'Bearer' + ' ' + getToken()
      },
      imgUrl: table_header_image,
      fileList: [],
      export_list: [],
      formTable: {
        file: []
      },
      select_upload_header_data: [
        { remark_name: '全部校验', children: [] }
      ],
      defaultProps: {//默认
        children: 'children',
        label: 'remark_name'
      },
      all_column_name: [],
      all_repeat_data: {},//存放全部覆盖返回重复的数据
      once_repeat_data: [],
      all_update_data: [],//全部覆盖的表格数据
      save_cover_data_show: false,
      repeat_current_select_data: [],//存放重复当前选中的数据
      cover_data_open: false,
      cover_disable: true,//批量覆盖禁用
      more_select_cover_datas: [],//多选覆盖的数据
      more_select_cover_datas_ids: [],
      repeat_data_list: [],//存放重复的数据
      repeat_data_disabled: true,
      all_selection_repeat_data: [],
      columnName: [],
      upload_type: '1',//存放上传文件的导入类型数据【1为常规校验 2为精确校验】
      step_num: 0//步骤框默认状态
    }
  },
  created() {
    let local_data = JSON.parse(sessionStorage.getItem('dict_upload'))
    this.queryParams = local_data.data//传参数据
    this.database_id = Number(local_data.data.database_id)
    this.table_status = Number(local_data.table_status)
    // if (this.$route.query.table_status != '3') {
    //   this.columnName = this.$route.query.columns_name
    // }
    this.tb_code = local_data.tb_code
    this.getHeaderDataList()//获取表结构数据
  },

  methods: {
    // 获取表结构数据
    getHeaderDataList() {
      let newData = {}
      if (this.table_status != 3) {
        newData = {
          version: this.queryParams.version,
          dict_code: this.tb_code
        }
      } else {
        newData = {
          version: this.queryParams.version,
          dict_name: this.tb_code,
          type: 2,
          database_id: this.database_id
        }
      }
      getTableHeaderDataList(newData).then(res => {
        this.columnName = res.data
        this.export_list = [res.data]
        this.select_upload_header_data[0].children = res.data
      })
    },
    // 实现删除之前的方法
    beforeRemove(file) {
      return this.$confirm(`确定移除【 ${file.name}】?`)
    },
    // 上传文件之前的钩子, 参数为上传的文件,若返回 false 或者返回 Promise 且被 reject,则停止上传
    beforeUploadFile(file) {
      let extension = file.name.substring(file.name.lastIndexOf('.') + 1)
      this.extension = extension
      let size = file.size / 1024 / 1024
      if (extension !== 'xlsx') {
        this.$message.warning('只能上传后缀是.xlsx的文件')
      }
      if (size > 10) {
        this.$message.warning('文件大小不得超过10M')
      }
    },
    // 实现文件导入列表删除文件的按钮
    fileRemove() {
      this.$refs.upload.clearFiles()
    },
    // 文件超出个数限制时的钩子
    exceedFile(files, fileList) {
      this.$message.warning(`只能选择 ${this.limitNum} 个文件,当前共选择了 ${files.length + fileList.length} 个`)
    },
    // 自定义字典上传的方法
    async dict_upload_request(item) {
      let formData = new FormData()
      formData.append('file', item.file)//上传的文件
      formData.append('is_collection', this.table_status)//携带的参数【自定义字典】
      formData.append('version', this.queryParams.version)//携带的参数【版本号】
      formData.append('database_id', this.queryParams.database_id)//携带的参数【数据库id】
      formData.append('table_id', this.queryParams.table_id)//携带的参数【表id】
      if (this.table_status == 3) {
        formData.append('dict_type', '2')//携带的参数【版本号】
        formData.append('dict_name', this.tb_code)//携带的参数【版本号】
      }
      if (this.all_column_name.length !== 0) {
        for (let i = 0; i < this.all_column_name.length; i++) {
          formData.append('all_check_fields[]', this.all_column_name[i]) //【检验的表结构】
        }
      }
      formData.append('check_type', this.upload_type)//携带的参数【检验类型】
      let tb_code = this.tb_code
      let loading = this.$loading({
        lock: true,
        text: '文件处理中,请耐心等待处理,完成后数据将逐步插入...',
        spinner: 'el-icon-loading',
        background: 'rgba(0,0,0,0.7)'
      })
      try {
        let res = await dict_upload(formData, tb_code)
        if (res.code == 200) {
          loading.close()
          this.$message({
            message: '上传成功!',
            type: 'success'
          })
          this.step_num = 1
          this.repeat_data_list = res.data
          if (res.data.length == 0) {
            await this.router_skip()//调用路由跳转事件
          }
          if (this.upload_type == 1) {
            await this.router_skip()//常规校验直接关闭页面
          }
        }
      } catch (e) {
        loading.close();
        await this.router_skip()//常规校验直接关闭页面
      }

    },
    // 路由跳转事件
    router_skip() {
      this.$store.dispatch('tagsView/delView', this.$route)
      if (this.table_status != 3) {
        // 其他字典跳转
        this.$router.replace({
          path: '/dict/collection_detail?tb_code=' + this.tb_code + '&version=' + this.queryParams.version + '&status=' + this.queryParams.status,
          query: {
            tb_code: this.tb_code,
            version: this.queryParams.version,
            name: this.queryParams.dict_name
          }
        })
      } else {
        // 系统字典跳转
        this.$router.replace({
          path: '/dict/system_dict'
        })
      }

    },
    all_cover_repeat_data() {
      let repeat_data = JSON.parse(JSON.stringify(this.repeat_data_list))
      let all_data = []
      let new_data = {}
      repeat_data.forEach(item => {
        for (let i = 0; i < this.all_column_name.length; i++) {
          let key = this.all_column_name[i]
          let value = item[key]
          let data = {
            [key]: value
          }
          new_data = Object.assign({}, new_data, data)
        }
        all_data.push(new_data)
      })
      repeat_data.forEach(item => {
        this.all_column_name.forEach(items => {
          if (item.hasOwnProperty(items)) {
            delete item[items]
          }
        })
      })
      let data = {}
      if (this.table_status != 3) {
        data = {
          version: this.queryParams.version,
          dict_code: this.tb_code,
          all_check_fields: this.all_column_name,
          update_data: repeat_data,
          check_data: all_data
        }
      } else {
        data = {
          version: this.queryParams.version,
          dict_name: this.tb_code,
          dict_type: 2,
          database_id: this.database_id,
          all_check_fields: this.all_column_name,
          update_data: repeat_data,
          check_data: all_data
        }
      }
      getAllCoverData(data).then(res => {
        this.$message({
          message: '覆盖成功!',
          type: 'success'
        })
        this.router_skip()
      }).catch(res => {
        this.all_update_data = repeat_data
        this.all_repeat_data = res.data//拿到返回重复的数据
      })
    },
    // 完成对重复数据处理的事件
    repeat_data_filsh() {
      this.$confirm('是否确认取消本次操作?').then(res => {
        this.step_num = 2
        this.$message({
          message: '取消成功!',
          type: 'success'
        })
        this.router_skip()
      }).catch(res => {
        return
      })

    },
    // 关闭检索完成相同的数据
    repeat_data_close() {
      this.step_num = 2
      this.router_skip()
    },
    once_repeat_data_cancel() {
      this.save_cover_data_show = false
      this.cover_data_open = false
    },
    once_repeat_data_save() {
      const index = this.repeat_data_list.indexOf(this.repeat_current_select_data[0])
      if (index !== -1) {
        this.repeat_data_list.splice(index, 1)
        this.all_update_data.splice(index, 1)
      }
      // const itemToRemove = this.repeat_current_select_data[0]
      // if (this.repeat_data_list.includes(itemToRemove)) {
      //   const index = this.repeat_data_list.indexOf(itemToRemove)
      //   this.repeat_data_list.splice(index, 1)
      // }
      this.$message({
        message: '保存成功!',
        type: 'success'
      })
      this.save_cover_data_show = false
      this.cover_data_open = false
    },
    download_demo() {
      exportToExcel('#header_table', '表结构模板')
    },
    // 覆盖重复的单条数据
    cover_data(val) {
      this.$confirm('是否要覆盖当前选中的重复数据?').then(res => {
        let repeat_data = JSON.parse(JSON.stringify(this.repeat_current_select_data))
        repeat_data.forEach(item => {
          this.all_column_name.forEach(items => {
            if (item.hasOwnProperty(items)) {
              delete item[items]
            }
          })
        })
        let data = {}
        if (this.table_status != 3) {
          data = {
            version: this.queryParams.version,
            dict_code: this.tb_code,
            all_check_fields: this.all_column_name,
            check_data: repeat_data,
            update_ids: [val.id]
          }
        } else {
          // let column_id = this.$store.state.column_id
          data = {
            version: this.queryParams.version,
            dict_name: this.tb_code,
            dict_type: 2,
            all_check_fields: this.all_column_name,
            check_data: repeat_data,
            database_id: this.database_id,
            update_ids: [val[this.$route.query.all_data.tb_primary_column]]
          }
        }
        getCoverRepeatData(data).then(res => {
          const index = this.once_repeat_data.indexOf(val)
          if (index !== -1) {
            this.once_repeat_data.splice(index, 1)
          }
          this.$message({
            message: '覆盖成功!',
            type: 'success'
          })
          this.save_cover_data_show = true
        })
      }).catch(res => {
        return
      })
    },
    // 节点单击事件
    handleNodeClick(data) {
      let select_upload_data = this.$refs.tree.getCheckedNodes()//获取节点数据
      let all_data = []
      let pass = true
      select_upload_data.forEach(item => {
        if (item.remark_name.includes('全部')) {
          all_data = item.children
          pass = false
        }
        if (pass) {
          all_data.push(item)
        }
      })
      let all_column_name = []
      all_column_name = all_data.map(item => item.column_name)
      this.all_column_name = all_column_name//拿到选中的节点数据
    },
    // 批量移除重复数据的方法
    all_delete_repeat_data() {
      this.$confirm('是否批量移除这' + this.all_selection_repeat_data.length + '条重复的数据?').then(res => {
        let pass = true
        for (let i = 0; i < this.all_selection_repeat_data.length; i++) {
          const index = this.repeat_data_list.indexOf(this.all_selection_repeat_data[i])
          if (index !== -1) {
            this.repeat_data_list.splice(index, 1)
            this.all_update_data.splice(index, 1)
            if (pass) {
              this.$message({
                message: '移除成功!',
                type: 'success'
              })
              pass = false
            }
          }
        }
      }).catch(res => {
        return
      })
    },
    // 对重复的数据进行覆盖
    cover_repeat_data(val) {
      let all_data = {}
      for (let i = 0; i < this.all_column_name.length; i++) {
        let key = this.all_column_name[i]
        let value = val[key]
        let data = {
          [key]: value
        }
        all_data = Object.assign({}, all_data, data)
      }
      let new_data = {}
      if (this.table_status != 3) {
        new_data = {
          version: this.queryParams.version,
          dict_code: this.tb_code,
          all_check_fields: this.all_column_name,
          check_data: all_data
        }
      } else {
        new_data = {
          version: this.queryParams.version,
          dict_name: this.tb_code,
          all_check_fields: this.all_column_name,
          check_data: all_data,
          dict_type: 2
        }
      }
      this.repeat_current_select_data = [val]//拿到选中的重复数据
      getColumnHistory(new_data).then(res => {
        this.once_repeat_data = res.data
        this.cover_data_open = true
      })

    },
    // 对重复的数据进行移除操作
    delete_repeat_data(val) {
      this.$confirm('是否移除当前选中重复的数据?').then(res => {
        const index = this.repeat_data_list.indexOf(val)
        if (index !== -1) {
          this.repeat_data_list.splice(index, 1)
          this.all_update_data.splice(index, 1)
          this.$message({
            message: '移除成功!',
            type: 'success'
          })
        }
      }).catch(res => {
        return
      })
    },
    // 对重复的数据进行新增
    add_repeat_data(val) {
      this.$confirm('是否对当前选中数据进行新增处理?').then(res => {
        let data = {}
        if (this.table_status != 3) {
          data = {
            version: this.queryParams.version,
            dict_code: this.tb_code,
            check_data: [val]
          }
        } else {
          data = {
            version: this.queryParams.version,
            dict_name: this.tb_code,
            dict_type: 2,
            check_data: [val]
          }
        }
        getDistInsertData(data).then(res => {
          const index = this.repeat_data_list.indexOf(val)
          if (index !== -1) {
            this.repeat_data_list.splice(index, 1)
            this.all_update_data.splice(index, 1)
            this.$message({
              message: '新增成功!',
              type: 'success'
            })
          }
        })
      }).catch(res => {
        return
      })
    },
    // 查看重复表数据多选方法
    repeat_data_selection(selection) {
      this.repeat_data_disabled = !selection.length
      this.all_selection_repeat_data = selection
    },
    tableRowClassName({ row, rowIndex }) {
      let update_index = -1
      if (this.all_update_data.length != 0) {
        const index = this.all_update_data.findIndex(item => JSON.stringify(item) == JSON.stringify(this.all_repeat_data))
        if (index !== -1) {
          update_index = index
        }

        if (rowIndex == update_index) {
          return 'warning-row'
        } else {
          return ''
        }
      }
    },
    // 对重复的数据进行批量新增
    all_add_repeat_data() {
      this.$confirm('是否批量新增这' + this.all_selection_repeat_data.length + '条重复的数据?').then(res => {
        let data = {}
        if (this.table_status != 3) {
          data = {
            version: this.queryParams.version,
            dict_code: this.tb_code,
            check_data: this.all_selection_repeat_data
          }
        } else {
          data = {
            version: this.queryParams.version,
            dict_name: this.tb_code,
            dict_type: 2,
            check_data: this.all_selection_repeat_data
          }
        }

        getDistInsertData(data).then(res => {
          let pass = true
          for (let i = 0; i < this.all_selection_repeat_data.length; i++) {
            const index = this.repeat_data_list.indexOf(this.all_selection_repeat_data[i])
            if (index !== -1) {
              this.repeat_data_list.splice(index, 1)
              if (pass) {
                this.$message({
                  message: '新增成功!',
                  type: 'success'
                })
                this.all_update_data = []//清空全部覆盖的表格数据
                pass = false
              }
            }
          }
          this.getList()
        })
      }).catch(res => {
        return
      })
    },
    // 对重复数据进行全部新增
    repeat_data_all_add() {
      this.$confirm('是否新增全部重复的数据?').then(res => {
        let data = {}
        if (this.table_status != 3) {
          data = {
            version: this.queryParams.version,
            dict_code: this.tb_code,
            check_data: this.repeat_data_list
          }
        } else {
          data = {
            version: this.queryParams.version,
            dict_name: this.tb_code,
            dict_type: 2,
            check_data: this.repeat_data_list
          }
        }
        getDistInsertData(data).then(res => {
          this.$message({
            message: '新增成功!',
            type: 'success'
          })
        })
        this.router_skip()
      }).catch(res => {
        return
      })
    },
    // 实现多选重复数据的方法
    select_cover_data(selection) {
      this.cover_disable = !selection.length
      if (this.table_status != 3) {
        this.more_select_cover_datas_ids = selection.map(item => item.id)
      } else {
        this.more_select_cover_datas_ids = selection.map(item => item[this.$store.state.column_id])
      }
      this.more_select_cover_datas = selection
    },
    // 多选覆盖的方法
    more_cover_datas() {
      this.$confirm('是否要覆盖这' + this.more_select_cover_datas.length + '条重复的数据?').then(res => {
        let repeat_data = JSON.parse(JSON.stringify(this.repeat_current_select_data))
        repeat_data.forEach(item => {
          this.all_column_name.forEach(items => {
            if (item.hasOwnProperty(items)) {
              delete item[items]
            }
          })
        })
        let data = {}
        if (this.table_status != 3) {
          data = {
            version: this.queryParams.version,
            dict_code: this.tb_code,
            all_check_fields: this.all_column_name,
            check_data: repeat_data,
            update_ids: this.more_select_cover_datas_ids
          }
        } else {
          data = {
            version: this.queryParams.version,
            dict_name: this.tb_code,
            dict_type: 2,
            all_check_fields: this.all_column_name,
            check_data: repeat_data,
            database_id: this.database_id,
            update_ids: this.more_select_cover_datas_ids
          }
        }

        getCoverRepeatData(data).then(res => {
          let pass = true
          for (let i = 0; i < this.more_select_cover_datas.length; i++) {
            const index = this.once_repeat_data.indexOf(this.more_select_cover_datas[i])
            if (index !== -1) {
              this.once_repeat_data.splice(index, 1)
            }
            if (pass) {
              this.$message({
                message: '覆盖成功!',
                type: 'success'
              })
              pass = false
            }
          }
          this.save_cover_data_show = true
        })
      }).catch(res => {
        return
      })
    }
  }
}
</script>

<style scoped>
.el-table .warning-row {
  background-color: #ffc1c1;
}

.header_title {
  width: 100%;
  height: 5vh;
  display: flex;
  justify-content: center;
  align-items: center;
  font-weight: bolder;
  font-size: 1.5rem;
}
</style>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI小奶龙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值