VUE Element-ui transfer 使用心得

VUE Element-ui transfer 使用心得

前段时间由于项目中需要写穿梭框 在网上找了很多例子都不太符合业务需求
先上图 看看我的大体业务场景
在这里插入图片描述
在这里插入图片描述
这些是新建时候的业务场景这个业务场景很简单
在这里插入图片描述
在这里插入图片描述
这是编辑业务场景主要是回显

<template>
 	<div>
	 <div class="transfer_box">
	          <span class="transfer_element">气象要素</span>
	          <div class="element_frame">
	            <div v-for="(item, index) in dataElemendata" :key="index">
	              <div>
	                {{ item && item.varName }}
	              </div>
	            </div>
	          </div>
	          <div class="eleSelect">
	            <el-button size="small" type="primary" @click="selectElement"
	              >选择</el-button
	            >
	          </div>
	          <el-dialog
	            class="innerDialog"
	            :visible.sync="dialogFormtransfer"
	            append-to-body
	            width="800px"
	            :before-close="innerDialogClose"
	            :close-on-click-modal="false"
	            :close-on-press-escape="false"
	          >
	            <template class="transfer_dialog">
	              <el-transfer
	                v-model="dataSelected"
	                :data="requestData"
	                :titles="['可选', '已选']"
	                filterable
	                filter-placeholder="请输入要素名称"
	                :props="{
	                  key: 'varCode',
	                  label: 'varName'
	                }"
	              ></el-transfer>
	              </div>
            </template>
            这是html
 <script>
 export default {
 data() {
	return {
	  dataElemendata: [], //渲染DIV
      dataSelected: [], //已选中数据
      requestData: [], //全部气象数据
}
},
 created() {
    this.dialogStateChange();
    this.getDicData();
    this.userName = localStorage.getItem("userName");
    this.getElementAlldata();//后台请求气象数据 
  },
  methods: {
  getElementAlldata() {
      getMeteorolEleList().then(res => {
        this.requestData = res.data;
      });
    },
    向后台请求气象数据放到requestData里面
    getDataBySelected(id) {
    let requestData = this.requestData;
      for (
        let i = 0,
        i < requestData.length;
        i++
      ) {
        if (id === requestData[i].varCode) {
          return requestData[i];
        }
      }
    },
    这步是要遍历 后台传来的气象数据 我要取到其中的varCode值
     handlhandltransfer() {
      const newData = [];
      for (
        let i = 0, dataSelected = this.dataSelected;
        i < dataSelected.length;
        i++
      ) {
        newData.push(this.getDataBySelected(dataSelected[i]));
      }
      this.dataElemendata = newData;
      let dataElemendata = this.dataElemendata;
       // 处理成vars,以便给后端传数据用
      let varCode = [];
      for (let j = 0; j < dataElemendata.length; j++) {
        this.form.varCode = dataElemendata[j].varCode;
        varCode.push(this.form.varCode);
      }
      this.vars = varCode.join(",");
    },
     // //通过要素的code找出对应的 要素数据
    getElementByVar(key) {
      // 所有的气象要素
      let requestData = this.requestData;
      for (let i = 0; i < requestData.length; i++) {
        if (key === requestData[i].varCode) {
          return requestData[i];
        }
      }
    },
     renderVars(vars) {
      let varCodes = vars.split(",");
      let allArr = []; // ['风', '温度']
      for (let i = 0; i < varCodes.length; i++) {
        allArr.push(this.getElementByVar(varCodes[i]));
      }
      this.dataElemendata = allArr;
    },
       //处理编辑 穿梭框已选中回显
    selectElement() {
      if (this.state === 1) {
        this.dialogFormtransfer = true;
        const dataElemendata = this.dataElemendata;
        let dataArr = [];
        for (let i = 0; i < dataElemendata.length; i++) {
          dataArr.push(dataElemendata[i].varCode);
        }
        this.dataSelected = dataArr;
        console.log(this.dataSelected);
      } else if (this.state === 0) {
        this.dialogFormtransfer = true;
      }
    },
       //点击确定  气象要素  保存到dialog
    save() {
      if (this.state === 0) {
        this.handlhandltransfer();
        this.dialogFormtransfer = false;
      } else if (this.state === 1) {
        this.handlhandltransfer();
        this.dialogFormtransfer = false;
      }
    },
   //后台给的方法用作处理编辑时候回显
      getItemById(id) {
      getDataProductById(id).then(res => {
        this.insertDt = res.data.insertDt;
        this.fileNum = res.data.fileNum;
        this.form.fileType = res.data.fileType;
        this.form.fileName = res.data.fileName;
        this.form.fileCode = res.data.fileCode;
        this.form.path = res.data.path;
        this.form.interval = res.data.interval;
        this.form.space = res.data.space;
        this.form.rate = res.data.rate;
        this.form.scope = res.data.scope;
        this.form.height = res.data.height;
        this.form.ower = res.data.ower;
        this.vars = res.data.vars;
        getMeteorolEleList().then(res => {
          this.requestData = res.data;
          this.renderVars(this.vars);
        });
      });
    },
    // 表单状态控制
    dialogStateChange() {
      if (this.state === 0) {
        this.title = "新 建";
      } else if (this.state === 1) {
        this.title = "编 辑";
        if (this.itemId) {
          // 发送请求,请求当前数据
          this.getItemById(this.itemId);
        }
      }
    },
}
}
</script>
这是后台给接口显示数据的时候

后台不给发方前端处理

  <el-button type="primary" size="mini" @click="edit(scope.$index ,scope.row)"
            >编辑</el-button
          >
//js
 edit(row,index) {
      const id = row.id;
      this.itemId = id;
      this.dialogState = 1;
      this.dialogFormVisible = true;
      console.log(row.vars);
      this.form = Object.assign({}, row);
      this.renderVars(row.vars);
    },

这是我使用的心得

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值