当前位置: 首页 > 工具软件 > Timesheet.js > 使用案例 >

前端程序员项目里常用的utils.js工具函数

霍锦
2023-12-01

前言:一般来说,放在utils里为全局的工具函数,包括时间,token,封装的网络请求

时间工具:

对于时间来说,我们有轻量的 Moment.js 中文网

不想增加项目依赖,就自己写函数

JavaScript获取三天前,一周前,一月前的时间戳_小余会努力的博客-CSDN博客

自己写:

先在data里定义 timer: "", //定义一个定时器的变量

                          currentTime: "", // 获取当前时间

页面上就用{{currentTime}}展示

把下面这个函数放在created生命周期里面,

 getTime() {
      var _this = this; //声明一个变量指向Vue实例this,保证作用域一致
      _this.timer = setInterval(function() {
        let Hours =
          new Date().getHours() < 10
            ? "0" + new Date().getHours()
            : new Date().getHours();
        let Minutes =
          new Date().getMinutes() < 10
            ? "0" + new Date().getMinutes()
            : new Date().getMinutes();
        let Seconds =
          new Date().getSeconds() < 10
            ? "0" + new Date().getSeconds()
            : new Date().getSeconds();
        _this.currentTime = Hours + ":" + Minutes + ":" + Seconds;
      }, 1000);
    }

记得清除定时器 

 beforeDestroy() {
    if (this.timer) {
      clearInterval(this.timer); // 在Vue实例销毁前,清除我们的定时器
    }
  }

Websocket封装:

import { Message } from 'element-ui'
// import { getToken } from '@/utils/authToken' // 与后端的协商,websocket请求需要带上token参数
let websock = null
let messageCallback = null
let errorCallback = null
let wsUrl = ''
// 接收ws后端返回的数据
function websocketonmessage (e) {
  let memData = JSON.parse(e.data);
  messageCallback(memData)
}

/**
 * 发起websocket连接
 * @param {Object} agentData 需要向后台传递的参数数据
 */
function websocketSend (agentData) {
  // 加延迟是为了尽量让ws连接状态变为OPEN
  setTimeout(() => {
    // 添加状态判断,当为OPEN时,发送消息
    if (websock.readyState === websock.OPEN) {
      // websock.OPEN = 1
      // 发给后端的数据需要字符串化
      websock.send(JSON.stringify(agentData))
    }
    if (websock.readyState === websock.CLOSED) {
      // websock.CLOSED = 3
      console.log("websock.readyState=3");
      Message.error("");
      errorCallback();
    }
  }, 500)
}

// 关闭ws连接
function websocketclose (e) {
  // e.code === 1000  表示正常关闭。 无论为何目的而创建, 该链接都已成功完成任务。
  // e.code !== 1000  表示非正常关闭。
  if (e && e.code !== 1000) {
    Message.error("");
    errorCallback();
  }
}
// 建立ws连接
function websocketOpen (e) {
  // console.log('ws连接成功')
}

// 初始化weosocket
function initWebSocket () {
  if (typeof (WebSocket) === 'undefined') {
    Message.error('您的浏览器不支持WebSocket,无法获取数据')
    return false
  }

  // const token = 'JWT=' + getToken()
  // ws请求完整地址
  const requstWsUrl = wsUrl // + '?' + token
  websock = new WebSocket(requstWsUrl)

  websock.onmessage = function(e) {
    websocketonmessage(e);
  };
  websock.onopen = function() {
    websocketOpen();
  };
  websock.onerror = function() {
    Message.error("");
    errorCallback();
  };
  websock.onclose = function(e) {
    websocketclose(e);
  };
}

/**
 * 发起websocket请求函数
 * @param {string} url ws连接地址
 * @param {Object} agentData 传给后台的参数
 * @param {function} successCallback 接收到ws数据,对数据进行处理的回调函数
 * @param {function} errCallback ws连接错误的回调函数
 */
export function sendWebsocket (url, agentData, successCallback, errCallback) {
  wsUrl = url
  initWebSocket()
  messageCallback = successCallback
  errorCallback = errCallback
  websocketSend(agentData)
}

/**
 * 关闭websocket函数
 */
export function closeWebsocket () {
  if (websock) {
    websock.close() // 关闭websocket
    websock.onclose() // 关闭websocket
  }
}

图片上传功能:

                        <el-upload
                            class="avatar-uploader"
                            action="#"
                            :show-file-list="false"
                            :before-upload="beforeAvatarUpload">
                            <img v-if="logoUrl" :src="logoUrl" class="avatar" style="max- 
                                width: 180px;">
                            <i v-else class="el-icon-plus avatar-uploader-icon"></i>
                        </el-upload>
                        <span style="margin-top:110px; padding-left: 20px">注意:Logo图片格式为png格式,最大分辨率不超过256*256,大小不超过100K</span>


 beforeAvatarUpload(file) {
            const isJPG = file.type === "image/png";
            const isLt2M = file.size / 1024 / 1024 < 0.1;
            if (!isJPG) {
                this.$message.error("上传图片只能是 PNG 格式!");
            }
            if (!isLt2M) {
                this.$message.error("上传图片大小不能超过 100kb!");
            }
            if (isJPG && isLt2M) {
                const formData = new FormData();
                formData.append("file", file);
                this.$api
                    .uploadFile(formData)
                    .then(res => {
                        if (res.code === 200) {
                            this.$message({
                                message: "上传成功,请点击保存",
                                type: "success"
                            });
                            // 判断端口域名后是否有\,有就去掉
                            let configUrl = CONFIG.parameters.apiUrl;
                            let str = configUrl.charAt(configUrl.length - 1);
                            if (str === "/") {
                                configUrl = configUrl.slice(
                                    0,
                                    configUrl.length - 1
                                );
                            }
                            this.config.logo = res.data.filename;
                            this.getLogo(res.data.filename);
                        } else {
                            this.$message({
                                message: "上传失败",
                                type: "error"
                            });
                        }
                    })
                    .catch(err => {
                        this.$message({
                            message: "上传失败",
                            type: "error"
                        });
                    });
            }
        },

 类似资料: