npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

qxnw-utility

v1.0.9

Published

前端js工具集

Readme

utility

前端web一站式js工具包,提供 枚举http请求配置文件加载消息提示常用工具函数及filter统一服务注入 等服务及功能,一次引入随时调用各功能js:

  • 1. 枚举

使用enum.js可实现字典数据、省市数据及自定义类型相关数据的保存、获取及filter过滤功能的使用。 通过回调函数获取对应字典类型的数据并保存,使用时直接获取保存的数据。

  • 2. 配置文件(env.conf.json)

对基础数据进行配置,存放在vue项目的public文件夹中打包时不会被编译混淆。 有当前文件中可对菜单、系统信息、版权、api等相关数据进行配置,实现项目的快速运行。

  • 3. 配置文件加载

实现配置文件(env.conf.json)的数据读取,同时可根据配置加载网络配置数据,网络数据将覆盖本地配置数据及合并。

  • 4. http请求

对http网络请求进行封装,通过配置实现请求结果是否消息提示,同步或异步获取网络数据,使用简单方便。 同时实现自定义不同状态码的处理,header头拦截处理。

  • 5. 消息提示

提供success、fail、warning、info不同状态的消息提示,适配vant及element-ui组件提示框,可自定义消息模板。

  • 6. 系统业务函数(sso)

处理业务系统相关的业务逻辑,提供code登录验证、菜单获取、系统信息获取、系统列表获取、修改密码、退出登录、获取路由title等功能。

  • 7. 常用功能函数及filter

提供vue开发中常用的功能函数与filter,日期格式化、金额千分位、卡号格式化、手机号隐藏、字符串去空格、字体颜色、背景颜色、字符串截取等功能。

  • 8. 统一js注入

提供对js的引入及将不同js注入到Vue.prototype中,以便全局使用。 添加默认http403业务逻辑,405权限操作,本地配置文件的加载。

一、示例

  • 1. utility工具包的引用(sso需对403操作)

import Vue from 'vue'
import App from './App'
import router from './router'
import ViewUI from 'view-design';
import ElementUI from 'element-ui';
Vue.use(ElementUI);
Vue.use(ViewUI);
Vue.config.productionTip = false

import utility from './utility'
Vue.use(utility);

router.beforeEach((to, from, next) => {
  /* 路由发生变化修改页面title */
  Vue.prototype.$sys.checkAuthCode(to)
  if (to.path != "/") {
      document.title = Vue.prototype.$sys.getTitle(to.path)
  }
  next()
})

new Vue({
  el: '#app',
  router,
  components: { App },
  template: '<App/>'
})
  • 2. utility工具包的引用(普通项目不带sso无需处理403状态码)

import Vue from 'vue'
import App from './App'
import router from './router'
import ViewUI from 'view-design';
import ElementUI from 'element-ui';
Vue.use(ElementUI);
Vue.use(ViewUI);
Vue.config.productionTip = false

import utility from './utility'
Vue.use(utility, false);

router.beforeEach((to, from, next) => {
  /* 路由发生变化修改页面title */
  Vue.prototype.$sys.checkAuthCode(to)
  if (to.path != "/") {
      document.title = Vue.prototype.$sys.getTitle(to.path)
  }
  next()
})

new Vue({
  el: '#app',
  router,
  components: { App },
  template: '<App/>'
})

二、 main.js说明

main.js进行utility工具包中相关js的注入工作,预处理配置文件的加载,对http状态码403、405的拦截处理。 同时根据配置处理相关加载功能

import { Enum } from './enum'
import { Http } from './http'
import { Env } from './env'
import { Utility } from './utility'
import { Sys } from './sys'
import { Message } from './message'

import packageData from '../../package.json'

/*
* 初始化注入
* import utility from './utility'
* Vue.use(utility);
* 或传入加载配置文件路径
* Vue.use(utility, "../static/env.conf.json");
*/
export default {
    install: function(Vue, inject403Code = true, path){
        Vue.prototype.$msg = new Message(Vue);
        Vue.prototype.$enum = new Enum();
        Vue.prototype.$http = new Http(Vue);
        Vue.prototype.$env = new Env(getConf(Vue, path))
        Vue.prototype.$sys = new Sys(Vue);
        Vue.prototype.$utility = new Utility();

        let that = Vue.prototype

        //设置http请求的服务器地址
        if (that.$env.conf.api && that.$env.conf.api.host){
            that.$http.setBaseURL(that.$env.conf.api.host);
        }

        //处理接口返回403时自动跳转到指定的地址
        if(inject403Code){ //注入时可配置是否默认处理403
            that.$http.addStatusCodeHandle(res => {
                var header=res.headers || {}
                var url = header.location || header["x-location"] || ""
                if(url){
                    window.location = url
                    return
                }
                return;
            }, 403);

            inject405CodeHandle(that) //405权限处理
        }

        //拉到服务器配置信息
        if (that.$env.conf.api.confURL){
            that.$env.load(function(){
                return that.$http.xget(that.$env.conf.api.confURL);  
            });
        }

        //拉取enum数据
        if (that.$env.conf.api.enumURL){
            that.$enum.callback(function(type){
                return that.$http.xget(that.$env.conf.api.enumURL, { dic_type: type || "" }, "")
            })
        }

        //保存初始数据
        if (that.$env.conf.enums){
            that.$enum.set(that.$env.conf.enums)
        }
    }
}

//获取配置数据
function getConf(Vue, path){
    if(path)
        return Vue.prototype.$http.xget(path) || {};

    if(!packageData)
        return

    path = packageData.scripts.serve ? "/env.conf.json" : "/static/env.conf.json"
    return Vue.prototype.$http.xget(path) || {}
}

function inject405CodeHandle(that){
    that.$http.addStatusCodeHandle(res => {
        that.$msg.fail("请求的接口与页面不匹配或未配置权限")
        return
    }, 405);
}

三、使用

  • 1. enum.js的使用

<template>
    <div id="app">
        <el-form ref="form" :inline="true" class="form-inline pull-left">
            <el-form-item>
                <el-select size="medium" v-model="queryData.down_channel_no" class="input-cos" placeholder="请选择下游渠道编号">
                    <el-option value="" label="全部"></el-option>
                    <el-option v-for="(item, index) in downChannelNo" :key="index" :value="item.value" :label="item.name"></el-option>
                </el-select>
            </el-form-item>
        </el-form>

        <el-table>
            <el-table-column prop="down_channel_no" label="下游渠道编号" align="center">
                <template slot-scope="scope">
                    <span >{{scope.row.down_channel_no | fltrEnum("down_channel_no")}}</span>
                </template>
            </el-table-column>
        </el-table>
  </div>
</template>

<script>
export default {
  name: 'App',
  data () {
    return {
        queryData:{},
        downChannelNo: this.$enum.get("down_channel_no"),  //获取相type数据
    }
  },
  mounted(){},
  methods:{}
}
</script>
  • 2. env.js的使用

<template>
    <div id="app">
        {{ systemName }}
    </div>
</template>

<script>
export default {
  name: 'App',
  data () {
    return {
        systemName: this.$env.conf.name, //获取配置系统信息
        menus: this.$env.conf.menus  //获取配置菜单数据
    }
  },
  mounted(){},
  methods:{}
}
  • 3. http.js的使用

<template>
    <div id="app">
        {{ systemInfo.systemName }}
    </div>
</template>

<script>
export default {
  name: 'App',
  data () {
    return {
        queryData: {},
        systemInfo: {}
    }
  },
  mounted(){
      this.query()
  },
  methods:{
      query(){ //异步获取
          this.$http.get("/system/info/get").then(res=>{
              this.systemInfo = res
          })
      },
      async query(){ //同步获取
          this.systemInfo = this.$http.get("/system/info/get")
      },
      queryShowTip(){ //带消息提示
          this.systemInfo = this.$http.get("/system/info/get", this.queryData, {}, true, true)
      },
      queryShowTipWithMsg(){ //自定义消息提示
          this.$http.get("/system/info/get", this.queryData, {}, "执行成功", "执行失败").then(res=>{
              this.systemInfo = res
          })
      },
      queryShowTipWithMsg(){ //自定义消息提示
          var sucMsg = { title: "成功", message: "执行成功", offset: 50, duration: 5000, position: "top-right" }
          var failMsg = { title: "失败", message: "执行失败,请稍候重试", offset: 50, duration: 5000, position: "top-right" }
          this.$http.get("/system/info/get", this.queryData, {}, sucMsg, failMsg).then(res=>{
              this.systemInfo = res
          })
      }
  }
}
  • 4. message.js的使用

<template>
    <div id="app">
        {{ systemInfo.systemName }}
    </div>
</template>

<script>
export default {
  name: 'App',
  data () {
    return {
        systemInfo: {}
    }
  },
  mounted(){
      this.query()
  },
  methods:{
      query(){
          this.$http.get("/system/info/get").then(res=>{
              this.systemInfo = res
              this.$msg.success("数据获取成功")
          }).catch(err => {
              this.$msg.fail("数据获取失败,请稍候重试")
          })
      },
      query(){
          this.$http.get("/system/info/get").then(res=>{
              this.systemInfo = res
              var sucMsg = { title: "成功", message: "执行成功", offset: 50, duration: 5000, position: "top-right" }
              this.$msg.success(sucMsg)
          }).catch(err => {
              var failMsg = { title: "失败", message: "执行失败,请稍候重试", offset: 50, duration: 5000, position: "top-right" }
              this.$msg.fail(failMsg)
          })
      }
  }
}
  • 5. sys.js的使用

<template>
  <div id="app">
    <nav-menu
      :menus="menus"
      :copyright="copyright"
      :copyrightcode="copyrightcode"
      :themes="system.themes"
      :logo="system.logo"
      :systemName="system.systemName"
      :userinfo="userinfo"
      :items="items"
      :pwd="pwd"
      :signOut="signOutM"
      ref="NewTap"
    >
    </nav-menu>
  </div>
</template>

<script>
import navMenu from 'nav-menu'; // 引入
export default {
  name: 'app',
  data() {
    return {
      system: {
        logo: "",
        systemName: "",  //系统名称
        themes: "", //顶部左侧背景颜色,顶部右侧背景颜色,右边菜单背景颜色
      },
      copyright: (this.$env.conf.copyright.company || "") + "Copyright©" + new Date().getFullYear() + "版权所有",
      copyrightcode: this.$env.conf.copyright.code,
      menus: [{}],  //菜单数据
      userinfo: {},
      items: []
    }
  },
  components: { //注册插件
    navMenu
  },
  mounted() {
    this.getMenu();
    this.getSystemInfo();
    this.userinfo = this.$sys.getUserInfo()  //获取用户信息
  },
  methods: {
    pwd() {
      this.$sys.changePwd() //修改密码
    },
    signOutM() {
      this.$sys.logout() //退出登录
    },
    getMenu() {
      this.$sys.getMenus().then(res => { //获取菜单
        this.menus = res;
        this.getUserOtherSys();
        var cur = this.$sys.findMenuItem(res);
        this.$refs.NewTap.open(cur.name, cur.path);  //设置默认打开路由
      });
    },
    //获取系统的相关数据
    getSystemInfo() {
      this.$sys.getSystemInfo().then(res => {
        this.system = res;
      })
    },
    //用户可用的其他系统
    getUserOtherSys() {
      this.$sys.getSystemList().then(res => {
        this.items = res;
      })
    },
  }
}
</script>
  • 6. utility.js的使用

<template>
    <div id="app">
        <el-form ref="form" :inline="true" class="form-inline pull-left">
            <el-form-item>
                <el-select size="medium" v-model="queryData.down_channel_no" class="input-cos" placeholder="请选择下游渠道编号">
                    <el-option value="" label="全部"></el-option>
                    <el-option v-for="(item, index) in downChannelNo" :key="index" :value="item.value" :label="item.name"></el-option>
                </el-select>
            </el-form-item>
        </el-form>

        <el-table>
            <el-table-column prop="down_channel_no" label="下游渠道编号" align="center">
                <template slot-scope="scope">
                    <span >{{scope.row.down_channel_no | fltrEnum("down_channel_no")}}</span>
                </template>
            </el-table-column>
            <el-table-column prop="split_order_face" label="拆单面值" align="center">
                <template slot-scope="scope">
                    <span>{{scope.row.split_order_face | fltrNumberFormat(2)}}</span>
                </template>
            </el-table-column>
            <el-table-column prop="create_time" label="创建时间" align="center">
                <template slot-scope="scope">
                    <span>{{scope.row.create_time | fltrDate }}</span>
                </template>
            </el-table-column>
            <el-table-column prop="phone_no" label="手机号" align="center">
                <template slot-scope="scope">
                    <span>{{scope.row.phone_no | fltrPhoneNumberFormat }}</span>
                </template>
            </el-table-column>
            <el-table-column prop="status" label="状态" align="center">
                <template slot-scope="scope">
                    <span :class="scope.row.status | fltrTextColor">{{scope.row.status | fltrEnum("status") }}</span>
                </template>
            </el-table-column>
        </el-table>
  </div>
</template>

<script>
export default {
  name: 'App',
  data () {
    return {
        queryData:{
            phone: ""
        },
        downChannelNo: this.$enum.get("down_channel_no"),
    }
  },
  mounted(){
      var data = this.$utility.dateFormat(new Date())   //日期格式化
      var phone = this.$utility.trim(this.queryData.phone) //空格删除
  },
  methods:{}
}
</script>
  • 7. 数据配置

{
    "name": "用户系统",
    "copyright": { //版权信息
        "company": "四川千行你我科技股份有限公司",
        "code": "蜀ICP备20003360号"
    },
    "system": {}, //系统信息
    "api": { //api相关信息
        "host": "http://192.168.5.108:6677",
        "confURL": "/system/webconfig",
        "enumURL": "/dds/dictionary/get"
    },
    "menus": [], //菜单数据
    "sysList": [], //系统列表
    "enums": [ //默认枚举
        {
            "name": "全国",
            "type": "province",
            "value": "*",
            "group": "fltr"
        },
        {
            "name": "全市",
            "type": "city",
            "value": "*",
            "group": "fltr"
        }
    ],
    "textColor": {}, //字符颜色样式
    "bgColor": {} //背景颜色样式
}