记录 使用过的 js 方法

记录封装的js方法(防止之后用到不记得咋写的了),实时更新。

更新时间:2024-10-10

添加内容:给el-tree 的每个层级 动态添加类名

// import { Dialog } from "vant";
import router from "@/router";
// import { fakeApi } from "@/api/luApi.js";

const PublicFunction = {
  /**
   * 存放公共的js
   *
   * */
  /**
   * 合并单元格
   * TableData:传递过来的表格数据
   * itemName:属性名
   * rowIndex:行索引值
   * */
  MergeCol: (TableData, itemName, rowIndex) => {
    // 合并单元格
    // id:属性名
    // rowIndex:行索引值
    var idName = TableData[rowIndex][itemName]; // 获取当前单元格的值
    if (rowIndex > 0) {
      // 判断是不是第一行
      // eslint-disable-next-line eqeqeq
      if (TableData[rowIndex][itemName] != TableData[rowIndex - 1][itemName]) {
        // 先判断当前单元格的值是不是和上一行的值相等
        var i = rowIndex;
        var num = 0; // 定义一个变量i,用于记录行索引值并进行循环,num用于计数
        while (i < TableData.length) {
          // 当索引值小于table的数组长度时,循环执行
          if (TableData[i][itemName] === idName) {
            // 判断循环的单元格的值是不是和当前行的值相等
            i++; // 如果相等,则索引值加1
            num++; // 合并的num计数加1
          } else {
            i = TableData.length; // 如果不相等,将索引值设置为table的数组长度,跳出循环
          }
        }
        return {
          rowspan: num, // 最终将合并的行数返回
          colspan: 1,
        };
      } else {
        return {
          rowspan: 0, // 如果相等,则将rowspan设置为0
          colspan: 1,
        };
      }
    } else {
      // 如果是第一行,则直接返回
      let i = rowIndex;
      let num = 0;
      while (i < TableData.length) {
        // 当索引值小于table的数组长度时,循环执行
        if (TableData[i][itemName] === idName) {
          i++;
          num++;
        } else {
          i = TableData.length;
        }
      }
      return {
        rowspan: num,
        colspan: 1,
      };
    }
  },

  /**
   * 非form表单
   * 判断是否输入的是数字
   */
  checkPriceSell: (rule, value, callback) => {
    if (value) {
      if (!/^\d+(\.\d{1,2})?$/.test(value)) {
        callback(new Error("请输入数字!"));
      } else {
        callback();
      }
    }
  },
  /**跳转  上一页/首页
   * @routeName:要跳转到的上一页的页面路由; [类型:string]
   * @mag:传递message提示信息 ;  [类型:string]
   * @objData:传递的参数;      [类型:object]
   * */
  returnaircraftChoice(routeName, msg, objData) {
    this.$confirm('此操作将永久删除该数据, 是否继续?', '提示', {
      confirmButtonText: '确定',
      cancelButtonText: '取消',
      type: 'warning'
    }).then(() => {
      router.push({
        name: routeName, //目前是跳到表单页面
        params: {
          data: [objData, "Old"],
        },
      });
    }).catch(() => { });
  },
  //  数据连接
  /**
   *
   * 参数一二三是在调用方法时写死的,vals是接收的参数
   * */
  dataConnection(ip, points, CarType, vals) {
    //末尾数据为明细表数据
    const params = {
      ipAddress: ip,
      points: points,
      CarType: CarType,
      Main: vals,
    };
    return params;
  },

  /**
   * 查询当天日期(年-月-日)
   */
  getNowDate() {
    const timeOne = new Date();
    const year = timeOne.getFullYear();
    let month = timeOne.getMonth() + 1;
    let day = timeOne.getDate();
    month = month < 10 ? "0" + month : month;
    day = day < 10 ? "0" + day : day;
    const NOW_MONTHS_AGO = `${year}-${month}-${day}`;
    return NOW_MONTHS_AGO;
  },

  /**
   *  获取n个main~max间的随机整数
   * @max:[数据类型是int]最大值
   * @min:[数据类型是int]最小值
   * @n:[数据类型是int]生成几个值
   */
  // 获取一个1~100 随机数  let randomData = Math.floor(Math.random() * 100 + 1)
  random(min, max, n) {
    let arr = [];
    for (let i = 0; i < n; i++) {
      arr.push(Math.floor(Math.random() * (max - min) + min));
    }
    arr.sort((a, b) => a - b);
    return arr;
  },

  /***************************************
   * 生成从minNum到maxNum的随机数。
   * 如果指定decimalNum个数,则生成指定小数位数的随机数
   * 如果不指定任何参数,则生成0-1之间的随机数。
   *
   * @minNum:[数据类型是Integer]生成的随机数的最小值(minNum和maxNum可以调换位置)
   * @maxNum:[数据类型是Integer]生成的随机数的最大值
   * @decimalNum:[数据类型是Integer]如果生成的是带有小数的随机数,则指定随机数的小数点后的位数
   * @n:[数据类型是int],指的是生成几个
   *
   ****************************************/
  randomNum(maxNum, minNum, n, decimalNum) {
    var max = 0,
      min = 0;
    let arr = [];
    minNum <= maxNum
      ? ((min = minNum), (max = maxNum))
      : ((min = maxNum), (max = minNum));
    // return (Math.random() * (max - min) + min).toFixed(decimalNum);
    for (let i = 0; i < n; i++) {
      arr.push((Math.random() * (max - min) + min).toFixed(decimalNum));
    }
    return arr;
  },

  /**
   * 获取当前日期以及前6天日期的集合
   * @data:[数据类型是int],指的是共几天
   */
  sevenDay(data) {
    let myDate = new Date(); //获取今天日期
    // myDate.setDate(myDate.getDate() - 6);
    myDate.setDate(myDate.getDate() - data + 1); //获取6天前的日期
    let dateArray = [];
    let dateTemp;
    let flag = 1;
    for (let i = 0; i < data; i++) {
      dateTemp = myDate.getMonth() + 1 + "-" + myDate.getDate();
      dateArray.push(dateTemp);
      myDate.setDate(myDate.getDate() + flag);
    }
    return dateArray;
  },

  /**
   * 全选  四个参数
   * @isAll:是否被勾选(指表头),     [ 类型:布尔]
   * @tableData:该表格的数据         [ 类型:数组对象]
   * @checkList:被选择勾选的id数组,   [类型:Array]
   * @isCheck:是否列表的被全部勾选(指表格数据) [类型:布尔]
   *
   * [返回一个对象],
   * @isAll:布尔值,(指表头是否勾选),
   * @checkList: checkList(指被勾选的数据)
   * */
  allCheck(isAll, tableData, checkList, isCheck) {
    if (isAll) {
      for (let i = 0; i < tableData.length; i++) {
        tableData[i].check = true;
        if (tableData[i].ID === undefined) {
          checkList.push(tableData[i].id);
        } else {
          checkList.push(tableData[i].ID);
        }
      }
      isCheck = false; //部分选中
      isAll = true; //全选
    } else {
      for (let i = 0; i < tableData.length; i++) {
        tableData[i].check = false;
        checkList = [];
      }
      isCheck = false; //
      isAll = false; //
    }
    return { isAll: isAll, checkList: checkList };
  },

  /***
   * @GetButtonByRoleAndMenus:查询当前菜单下所拥有的按钮的方法
   * @params:参数{MenuID: Menuid,RoleIds: RoleID}
   * @_this:this
   */
  //  async GetButtonByRoleAndMenus(params, _this) {
  //   await fakeApi
  //     .Sys_ButtonTable(params)
  //     .then((res) => {
  //       var tempbtn = [];
  //       res.data.forEach((item) => {
  //         var obj = {
  //           btnName: item.ButtonName,
  //           btnType: item.type, //success
  //           btnColor:item.color,
  //           plain: true,
  //           SvgIconName: "UpLoad",
  //           // color: this.getColor(),
  //           // color: item.ButtonColor,
  //         };
  //         tempbtn.push(obj);
  //       });
  //       _this.$refs.ButtonRef.SetButtonConfigDatas(tempbtn);
  //     })
  //     .catch((err) => {});
  // }

  //  菜单列表树结构使用递归展示
  SetTreeMenuDataTableIds(resData) {
    resData.forEach((item) => {
      item.MenuName = item.Model.MenuName
      item.IsEnabled = item.Model.IsEnabled
      item.MenuURL = item.Model.MenuURL
      item.IconClass = item.Model.IconClass
      item.ModuleID = item.Model.ID
      item.ParentId = item.Model.ParentId
      if (item.Children) {
        if (item.Children.length != 0) {
          this.SetTreeMenuDataTableIds(item.Children)
        }
      }
    })
  },
  //  单位列表树结构使用递归展示
  SetTreeUnitSetDataTableIds(resData) {
    resData.forEach((item) => {
      item.ID = item.Model.ID;
      item.ParentId = item.ParentId;
      item.DataID = item.Model.DataID;
      item.DataName = item.Model.DataName;
      item.SortID = item.Model.SortID;
      item.Dsc = item.Model.Dsc;
      item.DictID = item.Model.DictID;
      if (item.Children) {
        if (item.Children.length != 0) {
          this.SetTreeUnitSetDataTableIds(item.Children)
        }
      }
    })
  },

  //#region 测试
  format(timestamp) {
    const date = new Date(timestamp);
    const year = date.getFullYear();
    const month = padZero(date.getMonth() + 1);
    const day = padZero(date.getDate());
    return `${year}-${month}-${day}`;
  },
  padZero(num) {
    return num < 10 ? `0${num}` : num;
  },
  //#endregion
  //#region 获取tab可视化高度
  getElementTabOffsetTop(element) {
    let offsetTop = 0;
    let currentElement = element;
    // 遍历元素的每个祖先元素  
    while (currentElement) {
      // 累加每个祖先元素的 offsetTop  
      offsetTop += currentElement.offsetTop;
      // 检查当前元素是否是滚动容器(比如 div 有 overflow-y: auto)  
      if (currentElement.scrollTop) {
        // 累加滚动容器的 scrollTop  
        offsetTop -= currentElement.scrollTop;
      }
      // 移动到父元素  
      currentElement = currentElement.offsetParent;
    }
    // 还需要考虑页面的滚动(视口滚动)  
    offsetTop += document.documentElement.scrollTop || document.body.scrollTop || 0;
    return offsetTop;
  },
  //#endregion

  //#region  用于动态修改el-tree 每个层级的背景色
  /**
   * 递归地获取节点的层级。如果节点没有父节点,则返回当前层级;否则,递归调用并增加层级
   * @param {*} node 
   * @param {*} level 
   * @returns 
   */
  getLevel(node, level = 1) {
    if (!node.parent) {
      return level;
    } else {
      return this.getLevel(node.parent, level + 1);
    }
  },
  /**
   * 根据节点的层级动态添加 CSS 类
   * @param {*} selectTreeData 选中的id
   * @returns 
   */
  renderContent(h, { node, data, store }, selectTreeData) {
    const level = this.getLevel(node);
    const isSelected = selectTreeData === data.id; // 检查当前节点是否被选中
    const customClass = `tree-node-level-${level} ${isSelected ? "selected-node" : ""
      }`;
    return h("span", { class: customClass }, [h("span", null, [data.label])]);
  },
  //#endregion


};
export { PublicFunction };

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值