NuclearDispersionSystem/ant-design-vue-jeecg/node_modules/xe-utils/methods/web/cookie.js
2023-09-14 14:47:11 +08:00

144 lines
4.5 KiB
Java

var setupDefaults = require('../setupDefaults')
var staticDocument = require('../static/staticDocument')
var staticDecodeURIComponent = require('../static/staticDecodeURIComponent')
var staticEncodeURIComponent = require('../static/staticEncodeURIComponent')
var isArray = require('../base/isArray')
var isObject = require('../base/isObject')
var isDate = require('../base/isDate')
var isUndefined = require('../base/isUndefined')
var includes = require('../array/includes')
var keys = require('../base/keys')
var assign = require('../object/assign')
var arrayEach = require('../array/arrayEach')
var helperNewDate = require('../date/helperNewDate')
var helperGetDateTime = require('../date/helperGetDateTime')
var getWhatYear = require('../date/getWhatYear')
var getWhatMonth = require('../date/getWhatMonth')
var getWhatDay = require('../date/getWhatDay')
function toCookieUnitTime (unit, expires) {
var num = parseFloat(expires)
var nowdate = helperNewDate()
var time = helperGetDateTime(nowdate)
switch (unit) {
case 'y': return helperGetDateTime(getWhatYear(nowdate, num))
case 'M': return helperGetDateTime(getWhatMonth(nowdate, num))
case 'd': return helperGetDateTime(getWhatDay(nowdate, num))
case 'h':
case 'H': return time + num * 60 * 60 * 1000
case 'm': return time + num * 60 * 1000
case 's': return time + num * 1000
}
return time
}
function toCookieUTCString (date) {
return (isDate(date) ? date : new Date(date)).toUTCString()
}
/**
* cookie操作函数
* @param {String/Array/Object} name 键/数组/对象
* @param {String} value 值
* @param {Object} options 参数
* @param {String} name: 键
* @param {Object} value: 值
* @param {String} path: 路径
* @param {String} domain: 作用域
* @param {Boolean} secure: 设置为安全的,只能用https协议
* @param {Number} expires: 过期时间,可以指定日期或者字符串,默认天
*/
function cookie (name, value, options) {
if (staticDocument) {
var opts, expires, values, result, cookies, keyIndex
var inserts = []
var args = arguments
if (isArray(name)) {
inserts = name
} else if (args.length > 1) {
inserts = [assign({ name: name, value: value }, options)]
} else if (isObject(name)) {
inserts = [name]
}
if (inserts.length > 0) {
arrayEach(inserts, function (obj) {
opts = assign({}, setupDefaults.cookies, obj)
values = []
if (opts.name) {
expires = opts.expires
values.push(staticEncodeURIComponent(opts.name) + '=' + staticEncodeURIComponent(isObject(opts.value) ? JSON.stringify(opts.value) : opts.value))
if (expires) {
if (isNaN(expires)) {
// UTCString || Unit
expires = expires.replace(/^([0-9]+)(y|M|d|H|h|m|s)$/, function (text, num, unit) {
return toCookieUTCString(toCookieUnitTime(unit, num))
})
} else if (/^[0-9]{11,13}$/.test(expires) || isDate(expires)) {
// Date || now
expires = toCookieUTCString(expires)
} else {
// day
expires = toCookieUTCString(toCookieUnitTime('d', expires))
}
opts.expires = expires
}
arrayEach(['expires', 'path', 'domain', 'secure'], function (key) {
if (!isUndefined(opts[key])) {
values.push(opts[key] && key === 'secure' ? key : (key + '=' + opts[key]))
}
})
}
staticDocument.cookie = values.join('; ')
})
return true
} else {
result = {}
cookies = staticDocument.cookie
if (cookies) {
arrayEach(cookies.split('; '), function (val) {
keyIndex = val.indexOf('=')
result[staticDecodeURIComponent(val.substring(0, keyIndex))] = staticDecodeURIComponent(val.substring(keyIndex + 1) || '')
})
}
return args.length === 1 ? result[name] : result
}
}
return false
}
function isCookieKey (key) {
return includes(cookieKeys(), key)
}
function setCookieItem (name, key, options) {
cookie(name, key, options)
return cookie
}
function removeCookieItem (name, options) {
cookie(name, 0, assign({ expires: -1 }, setupDefaults.cookies, options))
}
function cookieKeys () {
return keys(cookie())
}
assign(cookie, {
_c: false,
isKey: isCookieKey,
set: setCookieItem,
setItem: setCookieItem,
get: cookie,
getItem: cookie,
remove: removeCookieItem,
removeItem: removeCookieItem,
keys: cookieKeys,
getJSON: cookie
})
module.exports = cookie