mirror of
				https://gitee.com/hhyykk/ipms-sjy.git
				synced 2025-11-04 12:18:42 +08:00 
			
		
		
		
	RuoYi-Vue 1.0
This commit is contained in:
		
							
								
								
									
										15
									
								
								ruoyi-ui/src/utils/auth.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								ruoyi-ui/src/utils/auth.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,15 @@
 | 
			
		||||
import Cookies from 'js-cookie'
 | 
			
		||||
 | 
			
		||||
const TokenKey = 'Admin-Token'
 | 
			
		||||
 | 
			
		||||
export function getToken() {
 | 
			
		||||
  return Cookies.get(TokenKey)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export function setToken(token) {
 | 
			
		||||
  return Cookies.set(TokenKey, token)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export function removeToken() {
 | 
			
		||||
  return Cookies.remove(TokenKey)
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										317
									
								
								ruoyi-ui/src/utils/index.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										317
									
								
								ruoyi-ui/src/utils/index.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,317 @@
 | 
			
		||||
/**
 | 
			
		||||
 * 表格时间格式化
 | 
			
		||||
 */
 | 
			
		||||
export function formatDate(cellValue) {
 | 
			
		||||
  if (cellValue == null || cellValue == "") return "";
 | 
			
		||||
  var date = new Date(cellValue) 
 | 
			
		||||
  var year = date.getFullYear()
 | 
			
		||||
  var month = date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1
 | 
			
		||||
  var day = date.getDate() < 10 ? '0' + date.getDate() : date.getDate() 
 | 
			
		||||
  var hours = date.getHours() < 10 ? '0' + date.getHours() : date.getHours() 
 | 
			
		||||
  var minutes = date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes() 
 | 
			
		||||
  var seconds = date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds()
 | 
			
		||||
  return year + '-' + month + '-' + day + ' ' + hours + ':' + minutes + ':' + seconds
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @param {number} time
 | 
			
		||||
 * @param {string} option
 | 
			
		||||
 * @returns {string}
 | 
			
		||||
 */
 | 
			
		||||
export function formatTime(time, option) {
 | 
			
		||||
  if (('' + time).length === 10) {
 | 
			
		||||
    time = parseInt(time) * 1000
 | 
			
		||||
  } else {
 | 
			
		||||
    time = +time
 | 
			
		||||
  }
 | 
			
		||||
  const d = new Date(time)
 | 
			
		||||
  const now = Date.now()
 | 
			
		||||
 | 
			
		||||
  const diff = (now - d) / 1000
 | 
			
		||||
 | 
			
		||||
  if (diff < 30) {
 | 
			
		||||
    return '刚刚'
 | 
			
		||||
  } else if (diff < 3600) {
 | 
			
		||||
    // less 1 hour
 | 
			
		||||
    return Math.ceil(diff / 60) + '分钟前'
 | 
			
		||||
  } else if (diff < 3600 * 24) {
 | 
			
		||||
    return Math.ceil(diff / 3600) + '小时前'
 | 
			
		||||
  } else if (diff < 3600 * 24 * 2) {
 | 
			
		||||
    return '1天前'
 | 
			
		||||
  }
 | 
			
		||||
  if (option) {
 | 
			
		||||
    return parseTime(time, option)
 | 
			
		||||
  } else {
 | 
			
		||||
    return (
 | 
			
		||||
      d.getMonth() +
 | 
			
		||||
      1 +
 | 
			
		||||
      '月' +
 | 
			
		||||
      d.getDate() +
 | 
			
		||||
      '日' +
 | 
			
		||||
      d.getHours() +
 | 
			
		||||
      '时' +
 | 
			
		||||
      d.getMinutes() +
 | 
			
		||||
      '分'
 | 
			
		||||
    )
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @param {string} url
 | 
			
		||||
 * @returns {Object}
 | 
			
		||||
 */
 | 
			
		||||
export function getQueryObject(url) {
 | 
			
		||||
  url = url == null ? window.location.href : url
 | 
			
		||||
  const search = url.substring(url.lastIndexOf('?') + 1)
 | 
			
		||||
  const obj = {}
 | 
			
		||||
  const reg = /([^?&=]+)=([^?&=]*)/g
 | 
			
		||||
  search.replace(reg, (rs, $1, $2) => {
 | 
			
		||||
    const name = decodeURIComponent($1)
 | 
			
		||||
    let val = decodeURIComponent($2)
 | 
			
		||||
    val = String(val)
 | 
			
		||||
    obj[name] = val
 | 
			
		||||
    return rs
 | 
			
		||||
  })
 | 
			
		||||
  return obj
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @param {string} input value
 | 
			
		||||
 * @returns {number} output value
 | 
			
		||||
 */
 | 
			
		||||
export function byteLength(str) {
 | 
			
		||||
  // returns the byte length of an utf8 string
 | 
			
		||||
  let s = str.length
 | 
			
		||||
  for (var i = str.length - 1; i >= 0; i--) {
 | 
			
		||||
    const code = str.charCodeAt(i)
 | 
			
		||||
    if (code > 0x7f && code <= 0x7ff) s++
 | 
			
		||||
    else if (code > 0x7ff && code <= 0xffff) s += 2
 | 
			
		||||
    if (code >= 0xDC00 && code <= 0xDFFF) i--
 | 
			
		||||
  }
 | 
			
		||||
  return s
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @param {Array} actual
 | 
			
		||||
 * @returns {Array}
 | 
			
		||||
 */
 | 
			
		||||
export function cleanArray(actual) {
 | 
			
		||||
  const newArray = []
 | 
			
		||||
  for (let i = 0; i < actual.length; i++) {
 | 
			
		||||
    if (actual[i]) {
 | 
			
		||||
      newArray.push(actual[i])
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  return newArray
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @param {Object} json
 | 
			
		||||
 * @returns {Array}
 | 
			
		||||
 */
 | 
			
		||||
export function param(json) {
 | 
			
		||||
  if (!json) return ''
 | 
			
		||||
  return cleanArray(
 | 
			
		||||
    Object.keys(json).map(key => {
 | 
			
		||||
      if (json[key] === undefined) return ''
 | 
			
		||||
      return encodeURIComponent(key) + '=' + encodeURIComponent(json[key])
 | 
			
		||||
    })
 | 
			
		||||
  ).join('&')
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @param {string} url
 | 
			
		||||
 * @returns {Object}
 | 
			
		||||
 */
 | 
			
		||||
export function param2Obj(url) {
 | 
			
		||||
  const search = url.split('?')[1]
 | 
			
		||||
  if (!search) {
 | 
			
		||||
    return {}
 | 
			
		||||
  }
 | 
			
		||||
  return JSON.parse(
 | 
			
		||||
    '{"' +
 | 
			
		||||
      decodeURIComponent(search)
 | 
			
		||||
        .replace(/"/g, '\\"')
 | 
			
		||||
        .replace(/&/g, '","')
 | 
			
		||||
        .replace(/=/g, '":"')
 | 
			
		||||
        .replace(/\+/g, ' ') +
 | 
			
		||||
      '"}'
 | 
			
		||||
  )
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @param {string} val
 | 
			
		||||
 * @returns {string}
 | 
			
		||||
 */
 | 
			
		||||
export function html2Text(val) {
 | 
			
		||||
  const div = document.createElement('div')
 | 
			
		||||
  div.innerHTML = val
 | 
			
		||||
  return div.textContent || div.innerText
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Merges two objects, giving the last one precedence
 | 
			
		||||
 * @param {Object} target
 | 
			
		||||
 * @param {(Object|Array)} source
 | 
			
		||||
 * @returns {Object}
 | 
			
		||||
 */
 | 
			
		||||
export function objectMerge(target, source) {
 | 
			
		||||
  if (typeof target !== 'object') {
 | 
			
		||||
    target = {}
 | 
			
		||||
  }
 | 
			
		||||
  if (Array.isArray(source)) {
 | 
			
		||||
    return source.slice()
 | 
			
		||||
  }
 | 
			
		||||
  Object.keys(source).forEach(property => {
 | 
			
		||||
    const sourceProperty = source[property]
 | 
			
		||||
    if (typeof sourceProperty === 'object') {
 | 
			
		||||
      target[property] = objectMerge(target[property], sourceProperty)
 | 
			
		||||
    } else {
 | 
			
		||||
      target[property] = sourceProperty
 | 
			
		||||
    }
 | 
			
		||||
  })
 | 
			
		||||
  return target
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @param {HTMLElement} element
 | 
			
		||||
 * @param {string} className
 | 
			
		||||
 */
 | 
			
		||||
export function toggleClass(element, className) {
 | 
			
		||||
  if (!element || !className) {
 | 
			
		||||
    return
 | 
			
		||||
  }
 | 
			
		||||
  let classString = element.className
 | 
			
		||||
  const nameIndex = classString.indexOf(className)
 | 
			
		||||
  if (nameIndex === -1) {
 | 
			
		||||
    classString += '' + className
 | 
			
		||||
  } else {
 | 
			
		||||
    classString =
 | 
			
		||||
      classString.substr(0, nameIndex) +
 | 
			
		||||
      classString.substr(nameIndex + className.length)
 | 
			
		||||
  }
 | 
			
		||||
  element.className = classString
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @param {string} type
 | 
			
		||||
 * @returns {Date}
 | 
			
		||||
 */
 | 
			
		||||
export function getTime(type) {
 | 
			
		||||
  if (type === 'start') {
 | 
			
		||||
    return new Date().getTime() - 3600 * 1000 * 24 * 90
 | 
			
		||||
  } else {
 | 
			
		||||
    return new Date(new Date().toDateString())
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @param {Function} func
 | 
			
		||||
 * @param {number} wait
 | 
			
		||||
 * @param {boolean} immediate
 | 
			
		||||
 * @return {*}
 | 
			
		||||
 */
 | 
			
		||||
export function debounce(func, wait, immediate) {
 | 
			
		||||
  let timeout, args, context, timestamp, result
 | 
			
		||||
 | 
			
		||||
  const later = function() {
 | 
			
		||||
    // 据上一次触发时间间隔
 | 
			
		||||
    const last = +new Date() - timestamp
 | 
			
		||||
 | 
			
		||||
    // 上次被包装函数被调用时间间隔 last 小于设定时间间隔 wait
 | 
			
		||||
    if (last < wait && last > 0) {
 | 
			
		||||
      timeout = setTimeout(later, wait - last)
 | 
			
		||||
    } else {
 | 
			
		||||
      timeout = null
 | 
			
		||||
      // 如果设定为immediate===true,因为开始边界已经调用过了此处无需调用
 | 
			
		||||
      if (!immediate) {
 | 
			
		||||
        result = func.apply(context, args)
 | 
			
		||||
        if (!timeout) context = args = null
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return function(...args) {
 | 
			
		||||
    context = this
 | 
			
		||||
    timestamp = +new Date()
 | 
			
		||||
    const callNow = immediate && !timeout
 | 
			
		||||
    // 如果延时不存在,重新设定延时
 | 
			
		||||
    if (!timeout) timeout = setTimeout(later, wait)
 | 
			
		||||
    if (callNow) {
 | 
			
		||||
      result = func.apply(context, args)
 | 
			
		||||
      context = args = null
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return result
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * This is just a simple version of deep copy
 | 
			
		||||
 * Has a lot of edge cases bug
 | 
			
		||||
 * If you want to use a perfect deep copy, use lodash's _.cloneDeep
 | 
			
		||||
 * @param {Object} source
 | 
			
		||||
 * @returns {Object}
 | 
			
		||||
 */
 | 
			
		||||
export function deepClone(source) {
 | 
			
		||||
  if (!source && typeof source !== 'object') {
 | 
			
		||||
    throw new Error('error arguments', 'deepClone')
 | 
			
		||||
  }
 | 
			
		||||
  const targetObj = source.constructor === Array ? [] : {}
 | 
			
		||||
  Object.keys(source).forEach(keys => {
 | 
			
		||||
    if (source[keys] && typeof source[keys] === 'object') {
 | 
			
		||||
      targetObj[keys] = deepClone(source[keys])
 | 
			
		||||
    } else {
 | 
			
		||||
      targetObj[keys] = source[keys]
 | 
			
		||||
    }
 | 
			
		||||
  })
 | 
			
		||||
  return targetObj
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @param {Array} arr
 | 
			
		||||
 * @returns {Array}
 | 
			
		||||
 */
 | 
			
		||||
export function uniqueArr(arr) {
 | 
			
		||||
  return Array.from(new Set(arr))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @returns {string}
 | 
			
		||||
 */
 | 
			
		||||
export function createUniqueString() {
 | 
			
		||||
  const timestamp = +new Date() + ''
 | 
			
		||||
  const randomNum = parseInt((1 + Math.random()) * 65536) + ''
 | 
			
		||||
  return (+(randomNum + timestamp)).toString(32)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Check if an element has a class
 | 
			
		||||
 * @param {HTMLElement} elm
 | 
			
		||||
 * @param {string} cls
 | 
			
		||||
 * @returns {boolean}
 | 
			
		||||
 */
 | 
			
		||||
export function hasClass(ele, cls) {
 | 
			
		||||
  return !!ele.className.match(new RegExp('(\\s|^)' + cls + '(\\s|$)'))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Add class to element
 | 
			
		||||
 * @param {HTMLElement} elm
 | 
			
		||||
 * @param {string} cls
 | 
			
		||||
 */
 | 
			
		||||
export function addClass(ele, cls) {
 | 
			
		||||
  if (!hasClass(ele, cls)) ele.className += ' ' + cls
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Remove class from element
 | 
			
		||||
 * @param {HTMLElement} elm
 | 
			
		||||
 * @param {string} cls
 | 
			
		||||
 */
 | 
			
		||||
export function removeClass(ele, cls) {
 | 
			
		||||
  if (hasClass(ele, cls)) {
 | 
			
		||||
    const reg = new RegExp('(\\s|^)' + cls + '(\\s|$)')
 | 
			
		||||
    ele.className = ele.className.replace(reg, ' ')
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										24
									
								
								ruoyi-ui/src/utils/permission.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								ruoyi-ui/src/utils/permission.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,24 @@
 | 
			
		||||
import store from '@/store'
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @param {Array} value
 | 
			
		||||
 * @returns {Boolean}
 | 
			
		||||
 */
 | 
			
		||||
export default function checkPermission(value) {
 | 
			
		||||
  if (value && value instanceof Array && value.length > 0) {
 | 
			
		||||
    const roles = store.getters && store.getters.roles
 | 
			
		||||
    const permissionRoles = value
 | 
			
		||||
 | 
			
		||||
    const hasPermission = roles.some(role => {
 | 
			
		||||
      return permissionRoles.includes(role)
 | 
			
		||||
    })
 | 
			
		||||
 | 
			
		||||
    if (!hasPermission) {
 | 
			
		||||
      return false
 | 
			
		||||
    }
 | 
			
		||||
    return true
 | 
			
		||||
  } else {
 | 
			
		||||
    console.error(`need roles! Like v-permission="['admin','editor']"`)
 | 
			
		||||
    return false
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										65
									
								
								ruoyi-ui/src/utils/request.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										65
									
								
								ruoyi-ui/src/utils/request.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,65 @@
 | 
			
		||||
import axios from 'axios'
 | 
			
		||||
import { Notification, MessageBox } from 'element-ui'
 | 
			
		||||
import store from '@/store'
 | 
			
		||||
import { getToken } from '@/utils/auth'
 | 
			
		||||
 | 
			
		||||
axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8'
 | 
			
		||||
// 创建axios实例
 | 
			
		||||
const service = axios.create({
 | 
			
		||||
  // axios中请求配置有baseURL选项,表示请求URL公共部分
 | 
			
		||||
  baseURL: process.env.VUE_APP_BASE_API,
 | 
			
		||||
  // 超时
 | 
			
		||||
  timeout: 10000
 | 
			
		||||
})
 | 
			
		||||
// request拦截器
 | 
			
		||||
service.interceptors.request.use(
 | 
			
		||||
  config => {
 | 
			
		||||
    if (getToken()) {
 | 
			
		||||
      config.headers['Authorization'] = 'Bearer ' + getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
 | 
			
		||||
    }
 | 
			
		||||
    return config
 | 
			
		||||
  },
 | 
			
		||||
  error => {
 | 
			
		||||
    console.log(error)
 | 
			
		||||
    Promise.reject(error)
 | 
			
		||||
  }
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// 响应拦截器
 | 
			
		||||
service.interceptors.response.use(res => {
 | 
			
		||||
    const code = res.data.code
 | 
			
		||||
    if (code === 401) {
 | 
			
		||||
      MessageBox.confirm(
 | 
			
		||||
        '登录状态已过期,您可以继续留在该页面,或者重新登录',
 | 
			
		||||
        '系统提示',
 | 
			
		||||
        {
 | 
			
		||||
          confirmButtonText: '重新登录',
 | 
			
		||||
          cancelButtonText: '取消',
 | 
			
		||||
          type: 'warning'
 | 
			
		||||
        }
 | 
			
		||||
      ).then(() => {
 | 
			
		||||
        store.dispatch('LogOut').then(() => {
 | 
			
		||||
          location.reload() // 为了重新实例化vue-router对象 避免bug
 | 
			
		||||
        })
 | 
			
		||||
      })
 | 
			
		||||
    } else if (code !== 200) {
 | 
			
		||||
      Notification.error({
 | 
			
		||||
        title: res.data.msg
 | 
			
		||||
      })
 | 
			
		||||
      return Promise.reject('error')
 | 
			
		||||
    } else {
 | 
			
		||||
      return res.data
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  error => {
 | 
			
		||||
    console.log('err' + error)
 | 
			
		||||
    Message({
 | 
			
		||||
      message: error.message,
 | 
			
		||||
      type: 'error',
 | 
			
		||||
      duration: 5 * 1000
 | 
			
		||||
    })
 | 
			
		||||
    return Promise.reject(error)
 | 
			
		||||
  }
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
export default service
 | 
			
		||||
							
								
								
									
										76
									
								
								ruoyi-ui/src/utils/ruoyi.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										76
									
								
								ruoyi-ui/src/utils/ruoyi.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,76 @@
 | 
			
		||||
/**
 | 
			
		||||
 * 通用js方法封装处理
 | 
			
		||||
 * Copyright (c) 2019 ruoyi
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
// 日期格式化
 | 
			
		||||
export function dateFormat(date, pattern) {
 | 
			
		||||
	var d = new Date(date).Format("yyyy-MM-dd hh:mm:ss");
 | 
			
		||||
	if (pattern) {
 | 
			
		||||
		d = new Date(date).Format(pattern);
 | 
			
		||||
	}
 | 
			
		||||
	return d.toLocaleString();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 表单重置
 | 
			
		||||
export function resetForm(refName) {
 | 
			
		||||
	if (this.$refs[refName] !== undefined) {
 | 
			
		||||
		this.$refs[refName].resetFields();
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 添加日期范围
 | 
			
		||||
export function addDateRange(params, dateRange) {
 | 
			
		||||
	var search = params;
 | 
			
		||||
	if (null != dateRange) {
 | 
			
		||||
		search.params = {
 | 
			
		||||
			beginTime: this.dateRange[0],
 | 
			
		||||
			endTime: this.dateRange[1]
 | 
			
		||||
		};
 | 
			
		||||
	}
 | 
			
		||||
	return search;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 回显数据字典
 | 
			
		||||
export function selectDictLabel(datas, value) {
 | 
			
		||||
	var actions = [];
 | 
			
		||||
	Object.keys(datas).map((key) => {
 | 
			
		||||
		if (datas[key].dictValue == ('' + value)) {
 | 
			
		||||
			actions.push(datas[key].dictLabel);
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
	})
 | 
			
		||||
	return actions.join('');
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 字符串格式化(%s )
 | 
			
		||||
export function sprintf(str) {
 | 
			
		||||
	var args = arguments, flag = true, i = 1;
 | 
			
		||||
	str = str.replace(/%s/g, function () {
 | 
			
		||||
		var arg = args[i++];
 | 
			
		||||
		if (typeof arg === 'undefined') {
 | 
			
		||||
			flag = false;
 | 
			
		||||
			return '';
 | 
			
		||||
		}
 | 
			
		||||
		return arg;
 | 
			
		||||
	});
 | 
			
		||||
	return flag ? str : '';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Date.prototype.Format = function (fmt) {
 | 
			
		||||
	var o = {
 | 
			
		||||
		"M+": this.getMonth() + 1,                   // 月份
 | 
			
		||||
		"d+": this.getDate(),                        // 日
 | 
			
		||||
		"h+": this.getHours(),                       // 小时
 | 
			
		||||
		"m+": this.getMinutes(),                     // 分
 | 
			
		||||
		"s+": this.getSeconds(),                     // 秒
 | 
			
		||||
		"q+": Math.floor((this.getMonth() + 3) / 3), // 季度
 | 
			
		||||
		"S": this.getMilliseconds()                  // 毫秒
 | 
			
		||||
	};
 | 
			
		||||
	if (/(y+)/.test(fmt))
 | 
			
		||||
		fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
 | 
			
		||||
	for (var k in o)
 | 
			
		||||
		if (new RegExp("(" + k + ")").test(fmt))
 | 
			
		||||
			fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
 | 
			
		||||
	return fmt;
 | 
			
		||||
}  
 | 
			
		||||
							
								
								
									
										58
									
								
								ruoyi-ui/src/utils/scroll-to.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								ruoyi-ui/src/utils/scroll-to.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,58 @@
 | 
			
		||||
Math.easeInOutQuad = function(t, b, c, d) {
 | 
			
		||||
  t /= d / 2
 | 
			
		||||
  if (t < 1) {
 | 
			
		||||
    return c / 2 * t * t + b
 | 
			
		||||
  }
 | 
			
		||||
  t--
 | 
			
		||||
  return -c / 2 * (t * (t - 2) - 1) + b
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// requestAnimationFrame for Smart Animating http://goo.gl/sx5sts
 | 
			
		||||
var requestAnimFrame = (function() {
 | 
			
		||||
  return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || function(callback) { window.setTimeout(callback, 1000 / 60) }
 | 
			
		||||
})()
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Because it's so fucking difficult to detect the scrolling element, just move them all
 | 
			
		||||
 * @param {number} amount
 | 
			
		||||
 */
 | 
			
		||||
function move(amount) {
 | 
			
		||||
  document.documentElement.scrollTop = amount
 | 
			
		||||
  document.body.parentNode.scrollTop = amount
 | 
			
		||||
  document.body.scrollTop = amount
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function position() {
 | 
			
		||||
  return document.documentElement.scrollTop || document.body.parentNode.scrollTop || document.body.scrollTop
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @param {number} to
 | 
			
		||||
 * @param {number} duration
 | 
			
		||||
 * @param {Function} callback
 | 
			
		||||
 */
 | 
			
		||||
export function scrollTo(to, duration, callback) {
 | 
			
		||||
  const start = position()
 | 
			
		||||
  const change = to - start
 | 
			
		||||
  const increment = 20
 | 
			
		||||
  let currentTime = 0
 | 
			
		||||
  duration = (typeof (duration) === 'undefined') ? 500 : duration
 | 
			
		||||
  var animateScroll = function() {
 | 
			
		||||
    // increment the time
 | 
			
		||||
    currentTime += increment
 | 
			
		||||
    // find the value with the quadratic in-out easing function
 | 
			
		||||
    var val = Math.easeInOutQuad(currentTime, start, change, duration)
 | 
			
		||||
    // move the document.body
 | 
			
		||||
    move(val)
 | 
			
		||||
    // do the animation unless its over
 | 
			
		||||
    if (currentTime < duration) {
 | 
			
		||||
      requestAnimFrame(animateScroll)
 | 
			
		||||
    } else {
 | 
			
		||||
      if (callback && typeof (callback) === 'function') {
 | 
			
		||||
        // the animation is done so lets callback
 | 
			
		||||
        callback()
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  animateScroll()
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										83
									
								
								ruoyi-ui/src/utils/validate.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										83
									
								
								ruoyi-ui/src/utils/validate.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,83 @@
 | 
			
		||||
/**
 | 
			
		||||
 * @param {string} path
 | 
			
		||||
 * @returns {Boolean}
 | 
			
		||||
 */
 | 
			
		||||
export function isExternal(path) {
 | 
			
		||||
  return /^(https?:|mailto:|tel:)/.test(path)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @param {string} str
 | 
			
		||||
 * @returns {Boolean}
 | 
			
		||||
 */
 | 
			
		||||
export function validUsername(str) {
 | 
			
		||||
  const valid_map = ['admin', 'editor']
 | 
			
		||||
  return valid_map.indexOf(str.trim()) >= 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @param {string} url
 | 
			
		||||
 * @returns {Boolean}
 | 
			
		||||
 */
 | 
			
		||||
export function validURL(url) {
 | 
			
		||||
  const reg = /^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/
 | 
			
		||||
  return reg.test(url)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @param {string} str
 | 
			
		||||
 * @returns {Boolean}
 | 
			
		||||
 */
 | 
			
		||||
export function validLowerCase(str) {
 | 
			
		||||
  const reg = /^[a-z]+$/
 | 
			
		||||
  return reg.test(str)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @param {string} str
 | 
			
		||||
 * @returns {Boolean}
 | 
			
		||||
 */
 | 
			
		||||
export function validUpperCase(str) {
 | 
			
		||||
  const reg = /^[A-Z]+$/
 | 
			
		||||
  return reg.test(str)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @param {string} str
 | 
			
		||||
 * @returns {Boolean}
 | 
			
		||||
 */
 | 
			
		||||
export function validAlphabets(str) {
 | 
			
		||||
  const reg = /^[A-Za-z]+$/
 | 
			
		||||
  return reg.test(str)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @param {string} email
 | 
			
		||||
 * @returns {Boolean}
 | 
			
		||||
 */
 | 
			
		||||
export function validEmail(email) {
 | 
			
		||||
  const reg = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
 | 
			
		||||
  return reg.test(email)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @param {string} str
 | 
			
		||||
 * @returns {Boolean}
 | 
			
		||||
 */
 | 
			
		||||
export function isString(str) {
 | 
			
		||||
  if (typeof str === 'string' || str instanceof String) {
 | 
			
		||||
    return true
 | 
			
		||||
  }
 | 
			
		||||
  return false
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @param {Array} arg
 | 
			
		||||
 * @returns {Boolean}
 | 
			
		||||
 */
 | 
			
		||||
export function isArray(arg) {
 | 
			
		||||
  if (typeof Array.isArray === 'undefined') {
 | 
			
		||||
    return Object.prototype.toString.call(arg) === '[object Array]'
 | 
			
		||||
  }
 | 
			
		||||
  return Array.isArray(arg)
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user