el-tree+vue+js实现修改树结构单选以及输入框


如图所示,点击左侧查看权限,点击修改可以进行修改选择,并带有input输入框以及单选框进行配置

element+vue展示代码:

<el-tree v-show="!authorityDialog" :class="{'treeId':!authorityDialog,'deffront':!authorityDialog&&radioNum===1}" 
:data="treeData" node-key="id" default-expand-all :expand-on-click-node="false" 
:render-content="renderContentNocheck">
</el-tree>
<el-tree v-if="authorityDialog" :data="treeData" show-checkbox ref="tree" 
node-key="id"  default-expand-all :class="{'front':authorityDialog&&radioNum===1}"
 @node-click="handleNodeClick" :default-checked-keys="checkedKeys" 
:expand-on-click-node="false" :render-content="renderContent">
 </el-tree>

render函数返回数据:


    renderContent(h, { node, data, store }) {
      if (node.childNodes.length > 0) {
        // if(node.data.befId==124){
        //   return (
        //     <span class="custom-tree-node nocheck">
        //       <span class="el-icon-cdm-wenjianjia1">{node.data.vMenuName}</span>
        //     </span>
        //   );
        // }else 
        if(node.data.befId!=124){
          return (
            <span class="custom-tree-node ">
              <span class="el-icon-cdm-wenjianjia1">{node.data.vMenuName}</span>
            </span>
          );
        }
        
      } else {
        if (node.data.pid == 124) {
          // return ('')
          // return (
          //   <span class="custom-tree-node nocheck">
          //   <input  type="radio"  class="input_radio"  name='fromWhere' id={node.data.id} />
          //   <label for={node.data.id}>
          //    <span class="el-icon-document">{node.data.vMenuName}</span>
          //   </label>
          //   </span>
          // );
        }else if (node.data.pfid == 124) {
          // return ('')
          // if(node.data.isInput){
          //   return (
          //     <span class="custom-tree-node nocheck">
          //     <label for={node.data.id}>
          //       <span class="el-icon-minus">
          //       <input  type="radio"  class="input_radio" name='byday'  id={node.data.id} />
          //       {node.data.vMenuName}</span>
          //       <input  type="text"  class="input_num"  id={"radio" + node.data.vMenuId}
          //         onkeyup="value=value.replace(/[^\d]/g,'')" />天
          //         </label>
          //     </span>
          //   );
          // }else{
          //   return (
          //     <span class="custom-tree-node nocheck">
          //     <label for={node.data.id}>
          //       <span class="el-icon-minus">
          //       <input  type="radio"  class="input_radio" name='byday'  id={node.data.id} />
          //       {node.data.vMenuName}</span>
          //       </label>
          //     </span>
          //   );
          // }
        } else {
          return (
            <span class="custom-tree-node ">
              <span class="el-icon-document">{node.data.vMenuName}</span>
            </span>
          );
        }
      }
    },
    renderContentNocheck(h, { node, data, store }) {
      if (node.childNodes.length > 0) {
        if (node.data.isPower) {
          return (
            <span class="custom-tree-node el-icon-cdm-correct">
              <span class="el-icon-cdm-wenjianjia1">{node.data.vMenuName}</span>
            </span>
          );
        } else {
          return (
            <span class="custom-tree-node el-icon-minus">
              <span class="el-icon-cdm-wenjianjia1">{node.data.vMenuName}</span>
            </span>
          );
        }
      } else {
        if (node.data.pfid == 124) {
          if(node.data.isInput){
            if (node.data.isPower){
              return (
              <span class="custom-tree-node el-icon-more">
                <span class="el-icon-cdm-correct">{node.data.vMenuName}</span>
                {node.data.msgtime}
              </span>
            );
            }else{
              return (
              <span class="custom-tree-node el-icon-minus">
                <span class="el-icon-more">{node.data.vMenuName}</span>
                {node.data.msgtime}
              </span>
            );
            }
          }else if (node.data.isPower) {
            return (
              <span class="custom-tree-node el-icon-more">
                <span class="el-icon-cdm-correct">{node.data.vMenuName}</span>
              </span>
            );
          }else{
            return (
              <span class="custom-tree-node el-icon-minus">
                <span class="el-icon-more">{node.data.vMenuName}</span>
              </span>
            );
          }
        }else {
          if (node.data.isPower) {
            return (
              <span class="custom-tree-node el-icon-cdm-correct">
                <span class="el-icon-document">{node.data.vMenuName}</span>
              </span>
            );
          } else {
            return (
              <span class="custom-tree-node el-icon-minus">
                <span class="el-icon-document">{node.data.vMenuName}</span>
              </span>
            );
          }
        }
      }
    }



带有输入框以及单选条件的部分:

<div class="byfrom" v-if="authorityDialog&&radioNum===1&&treeData.length>0">
     <i class="el-icon-caret-bottom" ref="caret" @click="clickBy"></i>
     <div class="byTitle"> <i class="el-icon-cdm-wenjianjia1"></i>历史消息读取</div>
     <div id="groupRadioBox" >
     <el-radio label="byday" v-model="byfrom" ><i class="el-icon-document"></i> 按自然日</el-radio>
      <el-radio-group v-model="radioDay" v-if="byfrom=='byday'">
       <el-radio :label="7">最近7天</el-radio>
       <el-radio :label="15">最近15天</el-radio>
        <el-radio :label="30">最近30天</el-radio>
       <el-radio :label="''">自定义天数
        <el-input-number :controls='false' v-model="radioDayNum" size="mini" :min="0" label=""></el-input-number>天
        </el-radio>
         </el-radio-group>
        <el-radio label="bymsgday" v-model="byfrom"><i class="el-icon-document"></i> 按消息日
         <span>(有交互记录的1自然日为1消息日)</span>
        </el-radio>
      <el-radio-group v-model="radioMsgday" v-if="byfrom=='bymsgday'">
      <el-radio :label="7">最近7天</el-radio>
      <el-radio :label="15">最近15天</el-radio>
       <el-radio :label="30">最近30天</el-radio>
      <el-radio :label="''">自定义天数
       <el-input-number :controls='false' v-model="radioMsgdayNum" size="mini" :min="0" label=""></el-input-number>天
      </el-radio>
      </el-radio-group>
       <el-radio label="bymsg" v-model="byfrom"><i class="el-icon-document"></i> 按消息条数</el-radio>
        <el-radio-group v-model="radioMsg" v-if="byfrom=='bymsg'">
         <el-radio :label="100">最近100条</el-radio>
         <el-radio :label="300">最近300条</el-radio>
         <el-radio :label="500">最近500条</el-radio>
          <el-radio :label="''">自定义条数
         <el-input-number :controls='false' v-model="radioMsgNum" size="mini" :min="0" label=""></el-input-number>条
        </el-radio>
      </el-radio-group>
   </div>
</div>

自己添加的点击收缩事件,仿照jquery的slidedown

   clickBy(){
      let slide = {       
          down : function(div){
            div.style.height='140px';
          },              
          up : function(div){
            div.style.height='0';
          }
        }
        function toggleSlide(id,s){
            var div = document.getElementById(id),
            div_height = div.offsetHeight;
            div.style.transition='height '+s+'ms';  
            div.style.overflow='hidden';                    
            if(div_height){
                slide.up(div);
            }else{
                slide.down(div);
            }
        }
        toggleSlide('groupRadioBox','300')
      let classN=this.$refs.caret.className
      if(classN=='el-icon-caret-bottom'){
        this.$refs.caret.setAttribute("class",'el-icon-caret-right')
      }else{
        this.$refs.caret.setAttribute("class",'el-icon-caret-bottom')
      }
    }

猜你喜欢

转载自blog.csdn.net/qq_37818095/article/details/81284782