el-cascader 动态加载,编辑时数据回显

参考链接:https://blog.csdn.net/qq_16382227/article/details/129735904

业务:只有选择了关联摄像头以后才能显示出选择预置位,关联摄像头是联级逐次触发掉接口加载的,后续还需要回显。

html:

          <el-cascader
            v-model="ruleForm.cameraTree"
            placeholder="请选择关联摄像头"
            popper-class="whiteClass"
            @change="cameraChange"
            :props="props"
            clearable
          ></el-cascader>
       <el-form-item
          label="预置位"
          prop="cameraPresetPoint"
          v-if="ruleForm.cameraTree"
        >
          <el-select
            v-model="ruleForm.cameraPresetPoint"
            placeholder="请选择预置位"
            popper-class="whitePopper"
            clearable
          >
            <el-option
              v-for="v in treeData"
              :key="v.presetPointIndex"
              :label="v.presetPointName"
              :value="v.presetPointIndex"
            >
            </el-option>
          </el-select>
        </el-form-item>
 
 
 data() {
    return {
      loading: false,
      props: {
        checkStrictly: true, //是否可以选择树干节点作为选项
        lazy: true, // 是否动态加载子节点
        // lazyLoad加载动态数据的方法(仅在 lazy 为 true 时有效)
        lazyLoad: this.loadTreeNode,
      },
    };
 
js:
    //加载树节点  首次加载页面时就会执行一次,之后每选中一个节点也会调用,来渲染下一层
    loadTreeNode(node, resolve) {
      // 首次加载时 node为{root:true,level:0}
      // node 节点数据  获取node的level字段的值
      const { level } = node;
      //下一层节点
      const nodes = [];
      //如果有子节点 或者 为根节点(即首次进入level为0)
      //也有人写成 node.level == 0 作用是一样的
      if (node.hasChildren || node.root) {
        // 0 代表第一次请求
        let nodeId = level == 0 ? "" : node.data.id;
        //这里setTimeout的目的是 显示加载动画
        setTimeout(() => {
          let params = {
            parentId: nodeId,
          };
          cameraTreeApi(params).then((res) => {
            if (res.data.status == 200) {
              let nodes = [];
              nodes = res.data.data;
              nodes.map((val) => {
          //对后台数据进行一下处理,转成规定的label和value val.label
= val.name; val.value = val.id; }); // 回调渲染下一层 resolve(nodes); } }); }, 1); } else { //如果没有子节点就不发起请求,直接渲染,也避免了点击叶子节点仍然有加载动画的问题 resolve(nodes); } }, //选择摄像头 cameraChange(val) { let id = ""; let len = val.length; if (len > 0) { id = val[len - 1]; this.ruleForm.cameraPresetPoint = ""; this.treeData = []; this.getList(id); } else { id = ""; this.ruleForm.cameraPresetPoint = ""; this.treeData = []; } }, // 预置点信息 getList(id) { let params = { id: id, }; getPresetsApi(params).then((res) => { if (res.data.status == 200) { this.treeData = res.data.data; } }); },

 

posted @ 2024-02-20 10:56  如意酱  阅读(182)  评论(0编辑  收藏  举报