智能照明系统APP-本地串口
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
LightingSystemApp-serial/.svn/pristine/d3/d3b70e4da541755eb71570bedfc...

138 lines
2.8 KiB

const STORAGE_KEYS = 'uni-storage-keys'
function parseValue (value) {
const types = ['object', 'string', 'number', 'boolean', 'undefined']
try {
const object = typeof value === 'string' ? JSON.parse(value) : value
const type = object.type
if (types.indexOf(type) >= 0) {
const keys = Object.keys(object)
if (keys.length === 2 && 'data' in object) {
// eslint-disable-next-line valid-typeof
if (typeof object.data === type) {
return object.data
}
// eslint-disable-next-line no-useless-escape
if (type === 'object' && /^\d{4}-\d{2}-\d{2}T\d{2}\:\d{2}\:\d{2}\.\d{3}Z$/.test(object.data)) {
// ISO 8601 格式返回 Date
return new Date(object.data)
}
} else if (keys.length === 1) {
return ''
}
}
} catch (error) { }
}
export function setStorage ({
key,
data
} = {}) {
const type = typeof data
const value = type === 'string' ? data : JSON.stringify({
type,
data: data
})
try {
localStorage.setItem(key, value)
} catch (error) {
return {
errMsg: `setStorage:fail ${error}`
}
}
return {
errMsg: 'setStorage:ok'
}
}
export function setStorageSync (key, data) {
setStorage({
key,
data
})
}
export function getStorage ({
key
} = {}) {
const value = localStorage && localStorage.getItem(key)
if (typeof value !== 'string') {
return {
data: '',
errMsg: 'getStorage:fail'
}
}
let data = value
try {
const object = JSON.parse(value)
const result = parseValue(object)
if (result !== undefined) {
data = result
}
} catch (error) { }
return {
data,
errMsg: 'getStorage:ok'
}
}
export function getStorageSync (key) {
const res = getStorage({
key
})
return res.data
}
export function removeStorage ({
key
} = {}) {
if (localStorage) {
localStorage.removeItem(key)
}
return {
errMsg: 'removeStorage:ok'
}
}
export function removeStorageSync (key) {
removeStorage({
key
})
}
export function clearStorage () {
localStorage && localStorage.clear()
return {
errMsg: 'clearStorage:ok'
}
}
export function clearStorageSync () {
clearStorage()
}
export function getStorageInfo () {
const length = (localStorage && localStorage.length) || 0
const keys = []
let currentSize = 0
for (let index = 0; index < length; index++) {
const key = localStorage.key(index)
const value = localStorage.getItem(key)
currentSize += key.length + value.length
if (key !== STORAGE_KEYS) {
keys.push(key)
}
}
return {
keys,
currentSize: Math.ceil(currentSize * 2 / 1024),
limitSize: Number.MAX_VALUE,
errMsg: 'getStorageInfo:ok'
}
}
export function getStorageInfoSync () {
const res = getStorageInfo()
delete res.errMsg
return res
}