• vue+elementUI开发过程常用方法封装


      1 /*
      2  * Created by luoxuemei on 2019/09/02.
      3  */
      4 
      5 // 拖动调整左右两侧div的宽度
      6 // resizeName表示拖到的工具条的className
      7 // left表示左边的区域的className。leftWid表示左边的最小宽度
      8 // midName表示右边区域的className。rightWid表示右边的最小宽度
      9 // boxName表示父级元素的className
     10 import moment from 'moment'; 
     11 export function  dragControllerDiv(resizeName='resize', leftName = 'left', midName = 'mid', boxName = 'box', leftWid = 250, rightWid = 800){
     12   var resize = document.getElementsByClassName(resizeName);
     13   var left = document.getElementsByClassName(leftName);
     14   var mid = document.getElementsByClassName(midName);
     15   var box = document.getElementsByClassName(boxName);
     16   for (let i = 0; i < resize.length; i++) {
     17     // 鼠标按下事件
     18     resize[i].onmousedown = function (e) {
     19       var startX = e.clientX;
     20       resize[i].left = resize[i].offsetLeft;
     21       // 鼠标拖动事件
     22       document.onmousemove = function (e) {
     23         var endX = e.clientX;
     24         var moveLen = resize[i].left + (endX - startX); // (endx-startx)=移动的距离。resize[i].left+移动的距离=左边区域最后的宽度
     25         var maxT = box[i].clientWidth - resize[i].offsetWidth;  // 容器宽度 - 左边区域的宽度 = 右边区域的宽度
     26 
     27         if (moveLen < leftWid) moveLen = leftWid; // 左边区域的最小宽度为150px
     28         if (moveLen > maxT - rightWid) moveLen = maxT  - rightWid;  //右边区域最小宽度为800px
     29 
     30         resize[i].style.left = moveLen; // 设置左侧区域的宽度
     31 
     32         for (let j = 0; j < left.length; j++) {
     33           left[j].style.width = moveLen + 'px';
     34           mid[j].style.width = (box[i].clientWidth - moveLen - 10) + 'px';
     35         }
     36       }
     37       // 鼠标松开事件
     38       document.onmouseup = function (evt) {
     39         document.onmousemove = null;
     40         document.onmouseup = null;
     41         resize[i].releaseCapture && resize[i].releaseCapture(); //当你不在需要继续获得鼠标消息就要应该调用ReleaseCapture()释放掉
     42       }
     43       resize[i].setCapture && resize[i].setCapture(); //该函数在属于当前线程的指定窗口里设置鼠标捕获
     44       return false;
     45     }
     46   }
     47 }
     48 
     49 
     50 // 对象深拷贝
     51 export function deepCopy(obj) {
     52   var result = Array.isArray(obj) ? [] : {}
     53   for (var key in obj) {
     54     if (obj.hasOwnProperty(key)) {
     55       if (typeof obj[key] === 'object' && obj[key] !== null) {
     56         result[key] = deepCopy(obj[key])
     57       } else {
     58         result[key] = obj[key]
     59       }
     60     }
     61   }
     62   return result
     63 }
     64 
     65 /*菜单树下拉,禁止选择当前项及其子项,以防止死循环*/
     66 export function diGuiTreeEdit(item, compID) {  // 编辑情况下,禁止选择当前节点及其子节点
     67   const dataSor = item
     68   let treeAry = []
     69   for (let i in dataSor) {
     70     const v = dataSor[i]
     71     let node = {}
     72     if (v === null || v === undefined) { }
     73     else {
     74       if (v.children && v.children.length > 0) {
     75         if (v.id == compID) {
     76           node.isDisabled = true
     77         } else {
     78           node.isDisabled = false
     79         }
     80         node.id = v.id
     81         node.label = v.label
     82         node.name = v.name
     83         node.children = diGuiTreeEdit(v.children, compID)
     84         treeAry.push(node)
     85       } else {
     86         if (v.id == compID) {
     87           node.isDisabled = true
     88         } else {
     89           node.isDisabled = false
     90         }
     91         node.id = v.id
     92         node.label = v.label
     93         node.name = v.name
     94         treeAry.push(node)
     95       }
     96     }
     97   }
     98   return treeAry
     99 }
    100 
    101 
    102 // 递归遍历根据id,找到对应的node节点。treeAry主要是用于递归push的值
    103 export function rspTreeNodeFormID(item,id,idVal, treeAry=[]) {
    104   const dataSor = item
    105   for (let v of dataSor) {
    106     if (v === null || v === undefined) { }
    107     else {
    108       if (v.children && v.children.length > 0) {
    109         if (v[id] == idVal) {
    110           treeAry.push(v)
    111           break
    112         } else {
    113           rspTreeNodeFormID(v.children, id, idVal,treeAry )
    114         }
    115       } else {
    116         if (v[id] == idVal) {
    117           treeAry.push(v)
    118           break
    119         }
    120       }
    121     }
    122   }
    123   return treeAry
    124 }
    125 
    126 // 递归遍历根据id,找到对应的node节点下的data属性里面的对应的值。treeAry主要是用于递归push的值
    127 export function rspTreeNodeDataFormID(item,firstAttr,secAttr,idVal, treeAry=[]) {
    128   const dataSor = item
    129   for (let v of dataSor) {
    130     if (v === null || v === undefined) { }
    131     else {
    132       if (v.children && v.children.length > 0) {
    133         if (v[firstAttr] && v[firstAttr][secAttr] && v[firstAttr][secAttr] == idVal) {
    134           treeAry.push(v)
    135           break
    136         } else {
    137           rspTreeNodeDataFormID(v.children, firstAttr,secAttr, idVal,treeAry )
    138         }
    139       } else {
    140         if (v[firstAttr] && v[firstAttr][secAttr] && v[firstAttr][secAttr] == idVal) {
    141           treeAry.push(v)
    142           break
    143         }
    144       }
    145     }
    146   }
    147   return treeAry
    148 }
    149 
    150 
    151 // 传入按钮组和按钮权限组,判断按钮组的按钮是否存在权限组里面,存在则true。不存在则false
    152 export function btnPermissFun(btnList, permissList) {
    153   for(let item in btnList){
    154     let isPermiss = false
    155     for(let pitem of permissList) {
    156       if(item == pitem.code) {
    157         isPermiss = true
    158         break
    159       }
    160     }
    161     btnList[item] = isPermiss
    162   }
    163   return btnList
    164 }
    165 
    166 
    167 // 字符串合并
    168 export function strMergeCom(str1, str2){
    169   if(str1== null) {
    170     str1 = ''
    171   }
    172   if(str2 == null) {
    173     str2 = ''
    174   }
    175   return `${str1}(${str2})`
    176 }
    177 
    178 // 根据id,以及id的值,遍历list对象,得出label
    179 export function rstLabelFormID(list, id, label, idVal) {
    180   let rsp = ''
    181   for (let i = 0; i < list.length; i++) {
    182     if (list[i][id] === idVal) {
    183       rsp = list[i][label]
    184       break
    185     }
    186   }
    187   return rsp
    188 }
    189 // 根据id,以及id的值,遍历list集合,得出对应的对象
    190 export function rstListFormID(list, id, idVal) {
    191   let rsp = undefined
    192   for (let i = 0; i < list.length; i++) {
    193     if (list[i][id] === idVal) {
    194       rsp = list[i]
    195       break
    196     }
    197   }
    198   return rsp
    199 }
    200 // 根据id,label,以及id的值和label的值,遍历list集合,得出对应的对象集合
    201 // 此处是比对2个对象,过滤出包含的,类似于模糊搜索id或者名称
    202 export function rstListFormIDOrLabel(list, id,label, compVal) {
    203   let newAry = []
    204   for (let i = 0; i < list.length; i++) {
    205     if (list[i][id].includes(compVal) || list[i][label].includes(compVal)) {
    206       newAry.push(list[i])
    207     }
    208   }
    209   return newAry
    210 }
    211 
    212 // 遍历obj已有的排序对象,对另一个对象进行排序
    213 // compField表示两个对象关联的属性,类似与外键
    214 export function sortObjFromObj(sortObj, orgObj, compField = 'id') {
    215   var arr = Object.keys(sortObj);
    216   if(arr.length >0) { // 用于排序的不为空
    217     let sortOrgObj = []
    218     const newItemAry = []// 移除为空的项
    219     for(let item of orgObj) {
    220       sortOrgObj[(sortObj[item[compField]])-1] = item // 此处保存的数组,存在空值
    221     }
    222     for(let newItem of sortOrgObj) {
    223       if(newItem) {
    224         newItemAry.push(newItem)
    225       }
    226     }
    227     return newItemAry
    228   } else {
    229     return orgObj
    230   }
    231 }
    232 
    233 // 判断数据是否为空,为空的话返回指定的数值
    234 export function isNullORFalse(checkVal,rstVal) {
    235   if(checkVal == '' || checkVal == null || checkVal == undefined || typeof(checkVal) == undefined){
    236     if(rstVal == null || rstVal == ''){
    237       rstVal = "";
    238     }
    239     return rstVal;
    240   } else {
    241     return checkVal;
    242   }
    243 }
    244 
    245 // 判断数组的每一项是否不为空,或者不为undefined。不为空的话,返回true;为空返回false
    246 // 如果不为空,返回true
    247 export function isNotNullObj(objAry) {
    248   let isNull =  false
    249   for(let item of objAry){
    250     if(item != "" && item != null && item != undefined && typeof item != 'undefined') {
    251       isNull = true
    252       break
    253     }
    254   }
    255   return isNull
    256 }
    257 
    258 // 获取的localstrage是否为空或者不存在,则转为空数组[]
    259 export function getNullLocalstrageToAry(str) {
    260   if(str == null || typeof(str) == undefined ) {
    261     return [];
    262   } else{
    263     return str;
    264   }
    265 }
    266 
    267 // 根据文件url,判断是否指定的文件类型,返回bool值
    268 // 定义视频和图片的文件后缀。通过这个后缀去判断文件类型
    269 const VIDEO_TYPE = ['mp4', 'ogg', 'webm','mkv'];
    270 const IMAGE_TYPE = ['jpg', 'png', 'gif', 'webp', 'jpeg',];
    271 export function isFileType(fileUrl,fileType) {
    272   const fileTypeName = (fileUrl).substring(fileUrl.lastIndexOf('.') * 1 + 1 * 1);  // 获取后缀名
    273   // 文件后缀和兼容的格式,统一转为小写比对
    274   const fileTypeNameLower = fileTypeName.toLowerCase();
    275   if (fileType == 'image') {
    276     let supportFormat = IMAGE_TYPE;
    277     let index = supportFormat.indexOf(fileTypeNameLower);
    278     if (index == -1) {  // 说明核实不符合
    279       return false;
    280     } else {
    281       return true;
    282     }
    283   } else if (fileType == 'video') {
    284     let supportFormat = VIDEO_TYPE;
    285     let index = supportFormat.indexOf(fileTypeNameLower);
    286     if (index == -1) {  // 说明核实不符合
    287       return false;
    288     } else {
    289       return true;
    290     }
    291   }
    292 }
    293 // 当数值过大是,超过9位数(亿)转为亿单位展示
    294 export function rspHundredMill(val, unit = 'HM') {
    295   if(unit == 'HM') {
    296     if(val>100000000) { //大于1亿
    297       return (val/100000000).toFixed(3)+'亿'
    298     } else {
    299       return  val
    300     }
    301   }
    302 }
    303 
    304 // 全部替换
    305 // str表示原字符串,s表示要被替换的内容,replaceStr用于替换的内容
    306 export function repalceAll(str, s ,replaceStr = '') {
    307   var reg = new RegExp(s, "g")//g,表示全部替换
    308   return str.replace(reg,replaceStr)
    309 }
    310 
    311 //计算两个日期天数差的函数,通用,时间格式为yyyy-MM-dd格式
    312 export function dateDiff(sDate1, sDate2) {  //sDate1和sDate2是yyyy-MM-dd格式
    313   let aDate, oDate1, oDate2, iDays
    314   aDate = sDate1.split("-")
    315   oDate1 = new Date(aDate[1] + '-' + aDate[2] + '-' + aDate[0])  //转换为yyyy-MM-dd格式
    316   aDate = sDate2.split("-")
    317   oDate2 = new Date(aDate[1] + '-' + aDate[2] + '-' + aDate[0])
    318   iDays = parseInt(Math.abs(oDate1 - oDate2) / 1000 / 60 / 60 / 24) //把相差的毫秒数转换为天数
    319   return iDays;  //返回相差天数
    320 }
    321 
    322 // 获取当前时刻
    323 // ymdhms表示返回年月日时分秒,ymd表示返回年月日,hms表示返回时分秒
    324 export function curDateTime(type='ymdhms') {
    325   function getNow(s) {
    326     return s < 10 ? '0' + s : s
    327   }
    328   const myDate = new Date()
    329 
    330   const year = myDate.getFullYear() // 获取当前年
    331   const month = myDate.getMonth() + 1 * 1 // 获取当前月
    332   const date = myDate.getDate() // 获取当前日
    333 
    334   const h = myDate.getHours() // 获取当前小时数(0-23)
    335   const m = myDate.getMinutes() // 获取当前分钟数(0-59)
    336   const s = myDate.getSeconds()
    337 
    338   let now = year + '-' + getNow(month) + '-' + getNow(date) + ' ' + getNow(h) + ':' + getNow(m) + ':' + getNow(s)
    339   if(type == 'ymd') {
    340     now = year + '-' + getNow(month) + '-' + getNow(date)
    341   } else if(type == 'hms') {
    342     now = getNow(h) + ':' + getNow(m) + ':' + getNow(s)
    343   }
    344   return now
    345 }
    346 
    347 // 获取今天星期几
    348 export function getWeekFun() {
    349   const weekDay = ['星期日','星期一','星期二','星期三','星期四','星期五','星期六']
    350   let week = new Date().getDay();
    351   return weekDay[week];
    352 }
    353 
    354 // 查询最近n年,n表示前多少年的意思
    355 // 例如查询近5年的时间,n=4,不包括今年的的前4年
    356 export function getLastNYear(n) {
    357   const myDate = new Date;
    358   const curYear = myDate.getFullYear();
    359   if(n =='' || n==undefined || n == null){
    360     n =0;
    361   }
    362   let rstYear = curYear*1 - n*1;
    363   return rstYear;
    364 }
    365 
    366 // 查询最近n月,n表示前多少月的意思
    367 export function getLastNMonth(n) {
    368   const myDate = new Date;
    369   const curYear = myDate.getFullYear();
    370   const curMonth = myDate.getMonth()+1; // 月份从0开始算起。需要加1
    371   if(n =='' || n==undefined || n == null){n =0;}
    372   let rstYear = '';
    373   let rstMonth = '';
    374   if(n>curMonth){ //表示去到去年的月份,年份需要去到上一年
    375     rstYear = curYear*1-1*1;
    376     rstMonth = 12-(n-curMonth)+1;
    377   } else {
    378     rstYear =curYear;
    379     rstMonth = curMonth -n;
    380   }
    381   rstMonth = (rstMonth)>9?rstMonth:'0'+(rstMonth);
    382   let rstYearMonth = rstYear + '-' + rstMonth;
    383   return rstYearMonth;
    384 }
    385 
    386 // 获取最近n天的时间,n表示前多少天的意思。
    387 // 例如查询近7天的时间,n=6,不包括当天的的前6天
    388 // fommatterb表示间隔符,例如:-,/
    389 export function getLastNDate(n,fommatter ='-') {
    390   const d = new Date();
    391   var myDate=new Date(d.getTime()-86400000*n);  // 获取前n天的日期
    392   const year = myDate.getFullYear()>9?myDate.getFullYear():'0'+myDate.getFullYear();
    393   const month = (myDate.getMonth() + 1)>9?myDate.getMonth() + 1:'0'+(myDate.getMonth() + 1);
    394   const date = myDate.getDate()>9?myDate.getDate():'0'+myDate.getDate();
    395   let last7Date = year + fommatter + month + fommatter + date;
    396   return last7Date;
    397 }
    398 // 获取最近的n个小时,n表示前多少小时的意思。
    399 export function getLastNHour(n,fommatter ='-') {
    400   const d = new Date();
    401   var myDate=new Date(d.getTime()-86400000*n);  // 获取前n天的日期
    402   const year = myDate.getFullYear()>9?myDate.getFullYear():'0'+myDate.getFullYear();
    403   const month = (myDate.getMonth() + 1)>9?myDate.getMonth() + 1:'0'+(myDate.getMonth() + 1);
    404   const date = myDate.getDate()>9?myDate.getDate():'0'+myDate.getDate();
    405   const h = myDate.getHours()>9?myDate.getHours():'0'+myDate.getHours();       //获取当前小时数(0-23)
    406   const m = myDate.getMinutes()>9?myDate.getMinutes():'0'+myDate.getMinutes();     //获取当前分钟数(0-59)
    407   const s = myDate.getSeconds()>9?myDate.getSeconds():'0'+myDate.getSeconds();
    408   let  nowTime = year + fommatter + month + fommatter + date + " " + h + fommatter + m + fommatter + s;
    409   return nowTime;
    410 }
    411 
    412 
    413 // 搜索时间下拉框,快捷键
    414 export const pickerOptionsTimeEle = [{
    415   text: '今日',
    416   onClick(picker) {
    417     const end = new Date()
    418     end.setTime(end.getTime())
    419     end.setHours(end.getHours())
    420     end.setMinutes(end.getMinutes())
    421     end.setSeconds(end.getSeconds())
    422     const start = new Date()
    423     start.setTime(start.getTime())
    424     start.setHours(0); start.setMinutes(0); start.setSeconds(0)
    425     picker.$emit('pick', [start, end])
    426   }
    427 },
    428 {
    429   text: '近7天',
    430   onClick(picker) {
    431     const end = new Date()
    432     end.setHours(23); end.setMinutes(59); end.setSeconds(59)
    433     const start = new Date()
    434     start.setTime(start.getTime() - 3600 * 1000 * 24 * 6)
    435     start.setHours(0); start.setMinutes(0); start.setSeconds(0)
    436     picker.$emit('pick', [start, end])
    437   }
    438 },
    439 {
    440   text: '近30天',
    441   onClick(picker) {
    442     const end = new Date()
    443     end.setHours(23); end.setMinutes(59); end.setSeconds(59)
    444     const start = new Date()
    445     start.setHours(0); start.setMinutes(0); start.setSeconds(0)
    446     start.setTime(start.getTime() - 3600 * 1000 * 24 * 29)
    447     picker.$emit('pick', [start, end])
    448   }
    449 },
    450 {
    451   text: '昨天',
    452   onClick(picker) {
    453     const end = new Date()
    454     end.setTime(end.getTime() - 3600 * 1000 * 24 * 1)
    455     end.setHours(23); end.setMinutes(59); end.setSeconds(59)
    456     const start = new Date()
    457     start.setTime(start.getTime() - 3600 * 1000 * 24 * 1)
    458     start.setHours(0); start.setMinutes(0); start.setSeconds(0)
    459     picker.$emit('pick', [start, end])
    460   }
    461 },
    462 {
    463   text: '最近90天',
    464   onClick(picker) {
    465     const end = new Date()
    466     end.setHours(23); end.setMinutes(59); end.setSeconds(59)
    467     const start = new Date()
    468     start.setHours(0); start.setMinutes(0); start.setSeconds(0)
    469     start.setTime(start.getTime() - 3600 * 1000 * 24 * 90)
    470     picker.$emit('pick', [start, end])
    471   }
    472 }]
    473 
    474 
    475 export function getCurrWeekDays () {
    476   let date=[];
    477   let weekOfday = moment().format('E');//计算今天是这周第几天
    478   let start = moment().subtract(weekOfday-1, 'days').format('YYYY-MM-DD');//周一日期
    479   let end= moment().add(7-weekOfday, 'days').format('YYYY-MM-DD');//周日日期
    480   date.push(start)
    481   date.push(end)
    482   return date
    483 }
    484 export function getCurrMonthDays(){
    485   let date = []
    486   let start = moment().startOf('month').format('YYYY-MM-DD')
    487   let end = moment().endOf('month').format('YYYY-MM-DD')
    488   date.push(start)
    489   date.push(end)
    490   return date
    491 }
    492 // elementUI 时间范围选择器,数据格式转换
    493 // 时间范围选择,中国标准时间转为yyyy-MM-dd HH:mm:ss.
    494 export function standardTimeToYMDHMS(timeStr) {
    495   if(timeStr == null || typeof(timeStr) == undefined ) {
    496     return '';
    497   } else{
    498     return timeStr.getFullYear() + '-' +
    499       ((timeStr.getMonth() + 1)>9?(timeStr.getMonth() + 1):'0'+(timeStr.getMonth() + 1)) + '-' +
    500       (timeStr.getDate()>9?timeStr.getDate():'0'+timeStr.getDate()) + ' ' +
    501       (timeStr.getHours()>9?timeStr.getHours():'0'+timeStr.getHours()) + ':' +
    502       (timeStr.getMinutes()>9?timeStr.getMinutes():'0'+timeStr.getMinutes()) + ':' +
    503       (timeStr.getSeconds()>9?timeStr.getSeconds():'0'+timeStr.getSeconds());
    504   }
    505 }
    506 
    507 // 用于数据库管理,动态条件拼接
    508 // 遍历搜索条件,把时间范围搜索的条件的参数拆分成min,max
    509 // {fieldValue: ["2019-09-21 00:00:00", "2019-10-22 00:00:00"]}拆分成{min:'2019-09-21 00:00:00',max:'2019-10-22 00:00:00'}
    510 // luoxm@2019-09-21
    511 export function dataPackage(list) {
    512   for(let i =0; i<list.length; i++) {
    513     if(list[i]['javaType'] == 'datetime' && list[i]['fieldValue']) {
    514       if(list[i]['fieldValue'].length>0 && list[i]['fieldValue'].length == 2) {
    515         list[i]['min'] = list[i]['fieldValue'][0]
    516         list[i]['max'] = list[i]['fieldValue'][1]
    517         list[i]['fieldValue'] = undefined
    518       }
    519     }
    520   }
    521   return list
    522 }
    523 // 用于数据库管理,动态条件拼接
    524 // 和dataPackageshi是翻转的一个操作
    525 // 遍历搜索条件,把min,max参数拼装成时间范围搜索的条件
    526 // {min:'2019-09-21 00:00:00',max:'2019-10-22 00:00:00'}拼装成{fieldValue: ["2019-09-21 00:00:00", "2019-10-22 00:00:00"]}
    527 // luoxm@2019-09-21
    528 export function dataPackageReverse(list) {
    529   for(let i =0; i<list.length; i++) {
    530     if(list[i]['javaType'] == 'datetime' && list[i]['min'] && list[i]['max']) {
    531       list[i]['fieldValue'] = []
    532       list[i]['fieldValue'].push(list[i]['min'])
    533       list[i]['fieldValue'].push(list[i]['max'])
    534       list[i]['min'] = undefined
    535       list[i]['max'] = undefined
    536     }
    537   }
    538   return list
    539 }
    540 
    541 // 把后台返回的时间默认值,赋值到搜索条件上
    542 export function setQryParam(list) {
    543   for(let i =0; i<list.length; i++) {
    544     if(list[i]['javaType'] == 'datetime' && list[i]['min'] && list[i]['max']) {
    545       list[i]['fieldValue'] = []
    546       list[i]['fieldValue'][0] = list[i]['min']
    547       list[i]['fieldValue'][1] = list[i]['max']
    548     }
    549   }
    550   return list
    551 }
    552 // 过滤掉javaType=feature的对象
    553 export function paramNotFeatureFun(obj) {
    554   let rspData = []
    555   for(let item of obj) {
    556     if(item.javaType != 'feature') {
    557       rspData.push(item)
    558     }
    559   }
    560   return rspData
    561 }
    562 // 用于数据库管理,动态条件拼接,把阈值从【0,1】转为【0-100】
    563 export function similarExpand100(list) {
    564   for(let item of list) {
    565     if(item.javaType == 'feature') {
    566       if(item.similar) {
    567         item.similar = (item.similar * 100).toFixed(2)
    568       }
    569     }
    570   }
    571   return list
    572 }
    573 // 用于数据库管理,动态条件拼接,把阈值从【0-100】转为【0,1】
    574 export function similarReduce100(list) {
    575   for(let item of list) {
    576     if(item.javaType == 'feature') {
    577       if(item.similar) {
    578         item.similar = (item.similar / 100).toFixed(4)
    579       }
    580     }
    581   }
    582   return list
    583 }
    584 // 用于数据库管理,清空动态的搜索条件的filedValue字段数据
    585 export function clearActiveQry(obj) {
    586   for(let item of obj) {
    587     if(item.javaType == 'datetime') {
    588       item.min = undefined
    589       item.max = undefined
    590       item.fieldValue = ""
    591     } else {
    592       item.fieldValue = ""
    593     }
    594   }
    595 }
    596 
    597 // 用户数据库管理,默认选择左侧第一个数据数据库的菜单
    598 export function getDBTreeItem(tree) {
    599   let rspNode = []
    600   const dataSor = tree
    601   for (let i in dataSor) {
    602     const item = dataSor[i]
    603     if(item.dirType == 1) { // 表示数据库,并返回
    604       if(item.children && item.children.length>0) { // 有children,则递归找children的第一个数据库
    605         rspNode = [item.children[0],item.id]
    606         break
    607       } else {
    608         continue// 既不是数据库,也没有子节点,则表示是一个目录.不需要
    609       }
    610     }
    611   }
    612   return rspNode
    613 }
  • 相关阅读:
    SpringMVC学习笔记----常用注解
    python常用模块学习1
    python基础模块,包
    python-验证功能的装饰器示例
    python闭包及装饰器
    关于windows服务器配置
    python高阶函数
    python-生成器和迭代器
    linux--基础知识5
    python基础-文件操作的其他方法
  • 原文地址:https://www.cnblogs.com/luoxuemei/p/13155958.html
Copyright © 2020-2023  润新知