elmentUI+vue前端导入、导出json

导入json格式文件和导出json格式文件,查了element官网及网上的一些资料。做下笔记

导入功能

 上传文件格式:

[
{
	"objectType":"1",
	"dictCode":"fsadf",
	"dictKey":"",
	"dictValue":"住客借用类型",
	"sortNumber":"0",
	"remark":"新增字典"
},
{
	"objectType":"2",
	"dictCode":"fsadf",
	"dictKey":"1",
	"dictValue":"住客借用类型",
	"sortNumber":"1",
	"remark":"新增字典"
}
]

前端代码 :

<el-dialog :title="form.title" :visible.sync="form.importForm" :option="importOption">
      <el-upload
        class="upload-demo"
        ref="upload"
        action="/api/sys/dict/importFile"
        :http-request="handleUploadForm"
        :on-preview="handlePreview"
        :on-remove="handleRemove"
        :file-list="fileList"
        :auto-upload="false">
        <el-button size="small" type="primary">点击上传</el-button>
        <div slot="tip">只能上传json文件,且不超过500kb</div>
      </el-upload>
      <div slot="footer" class="dialog-footer">
        <el-button @click="submitUpload(0)">取 消</el-button>
        <el-button type="primary" @click="submitUpload(1)">确 定</el-button>
      </div>
    </el-dialog>

 

export default {
  data{
    return {
      fileList: [],
           }
      } 
  methods: {
        handleUploadForm(param) {
        let thiz = this
        let formData = new FormData()
        formData.append('file', param.file)
        formData.append('dictGroupId', thiz._uid)
        let loading = thiz.$loading({
          lock: true,
          text: '上传中,请稍候...',
          spinner: 'el-icon-loading',
          background: 'rgba(0, 0, 0, 0.7)'
        })
        thiz.$axios.post('路径', formData).then(({data}) => {
          if (data.code === 0) {
            thiz.$message.success('上传文件成功')
            thiz.fileList = []
          } else {
            thiz.fileList = []
            thiz.$message.error('上传文件失败')
          }
          loading.close()
        })
      },handleRemove(file, fileList) {
        console.log(file, fileList);
      },handlePreview(file) {
        console.log(file);
      },submitUpload(type) {
        if (type === 1) {
          this.$refs.upload.submit();
          this.form.importForm = false;
        } else {
          this.form.importForm = false;
        }
      }
   }
};

传入后端接收:

@PostMapping("/importFile")
public Resp<Object> importFile(@RequestParam(value = "file") MultipartFile file,@RequestParam("dictGroupId") Integer dictGroupId) {}

 

 导出功能

导出文件格式:

[{"dictCode":"themeType","dictKey":"1","dictValue":"Android","id":279,"objectType":2,"sortNumber":1},{"dictCode":"themeType","dictKey":"2","dictValue":"IOS","id":280,"objectType":2,"sortNumber":1}]

前端代码:

<el-dialog :title="form.title" :visible.sync="form.exportForm">
      <el-table :data="exportData"
                border
                align="center"
                style="width: 100%"
                @selection-change="handleSelectionChange"
                ref="multipleTable">
        <el-table-column
          type="selection"
          width="55">
        </el-table-column>
        <el-table-column prop="id"
                         label="id"
                         width="150">
        </el-table-column>
        <el-table-column prop="dictCode"
                         label="字典标识"
                         width="150">
        </el-table-column>
        <el-table-column prop="dictKey"
                         label="字典项"
                         width="150">
        </el-table-column>
        <el-table-column prop="dictValue"
                         label="字典值"
                         width="150">
        </el-table-column>
        <el-table-column prop="sortNumber"
                         label="排序序号"
                         width="150">
        </el-table-column>
        <el-table-column prop="remark"
                         label="备注"
                         width="150">
        </el-table-column>
      </el-table>
      <div slot="footer" class="dialog-footer">
        <el-button @click="closeExportForm(0)">关 闭</el-button>
        <el-button type="primary" @click="closeExportForm(1)" v-show="!form.readonly">导 出</el-button>
      </div>
    </el-dialog>

 

  export default {
    data() {
      return {
        multipleSelection: [],
        exportData: [],
        form: {
          showForm: false,
          readonly: false,
          importForm: false,
          exportForm: false,
          title: '',
          data: {}
        }
      }
    },
    ids() {
        let ids = [];
        this.multipleSelection.forEach(ele => {
          ids.push(ele.id);
        });
        return ids;
      }
    },
    methods: {
      handleSelectionChange(val) {
        this.multipleSelection = val;
      },
      closeExportForm(type) {
        if (type === 1) {
          this.exportFile()
          this.form.exportForm = false;
        } else {
          this.form.exportForm = false;
        }
      },
      exportFile() {
        this.$axios.post('路径?ids=', this.ids).then(resp => {
          if (data.code === 0) {
            let blob = new Blob([resp.request.response], {type: 'application/json'});
            this.downloadBlob(blob, Date.now());
            this.$message.success('导出文件成功')
          } else {
            this.$message.error('导出文件失败')
          }
        });
      },
      downloadBlob(blob, filename) {
        let objectURL = URL.createObjectURL(blob);
        const eleLink = document.createElement('a')
        eleLink.download = filename
        eleLink.style.display = 'none'
        eleLink.href = objectURL
        // 触发点击
        document.body.appendChild(eleLink)
        eleLink.click()
        // 然后移除
        document.body.removeChild(eleLink)
      }
    }
  };

 

后端代码:


	@GetMapping("/queryByParentId")
	public Resp<ArraysVo<List<DictEntity>>> queryByParentId(@RequestParam("parentId") Integer parentId) {
	}


	@PostMapping("/exportFile")
	public Resp<ArraysVo<String>> exportFile(@RequestBody Integer[] ids) {
	}

 

 

效果图

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值