logwire-wms-pda-ui
Version:
运匠科技wms-PDA基础组件库
151 lines (123 loc) • 3.45 kB
JavaScript
/*
* 解析扫描内容
* @author 张文
* @date 2022-02-11
* */
/**
* 批量解析函数,项目无需使用
* @author 张文
* @date 2021-06-10
* @param {Object} obj val-输入框键入的值或扫描得到的值;
* keyList-使用的解析规则的key的集合;
* index - 当前解析到的数组角标;
* rule - 解析规则;
* @return {Object} 返回对象{success,val,key,data},
* success-是否成功解析;
* val-解析前的val;
* key-成功解析的规则;
* data-解析后的对象,如果未传入keyList或解析失败则返回空对象
* */
function analysis({val, keyList, index, rule}) {
try {
const obj = rule[keyList[index]](val)
return {
success: true,
val,
key: keyList[index],
data: obj
}
} catch (err) {
if (index + 1 < keyList.length) {
return analysis({val, keyList, index:index +1, rule})
} else {
return {
success: false,
val,
key: '',
data: {}
}
}
}
}
// 解析方法,暴露给项目使用
export const ScanRule = {
/**
* 设置规则
* @author 张文
* @param {Object} data 规则数据,必须为object
* @return Boolean
* */
set(data){
if (typeof data === "object" && Object.keys(data).length) {
window.lwWindowGlobalData.set('scanRule', data)
return true
}
console.warn('设置条码解析规则失败,请检查数据类型是否为object,且不为空')
console.warn(data)
return false
},
// 获取扫描解析规则
get() {
return window.lwWindowGlobalData.get('scanRule')
},
/**
* 解析条码数据
* @author 张文
* @date 2022-01-18
* @param {String} val 输入框键入的值或扫描得到的值
* @param {String} [key=''] 使用的解析规则的key,可选
* @return {Object} 返回对象{success,val,key,data},
* success-是否成功解析;
* val-解析前的val;
* key-成功解析的规则;
* data-解析后的对象,如果未传入key或解析失败则返回空对象
* */
getData(val, key = '') {
let rule = this.get()
// 判断是否传入截取规则
if (key.length) {
try {
const obj = rule[key](val)
return {
success: true,
val,
key,
data: obj
}
} catch (err) {
console.warn('输入框解析错误:', err)
}
}
return {
success: false,
val,
key,
data: {}
}
},
/**
* 多规则解析数据
* @author 张文
* @date 2021-06-10
* @param {String} val 输入框键入的值或扫描得到的值
* @param {Array} keyList 使用的解析规则的key的集合
* @return {Object} 返回对象{success,val,key,data},
* success-是否成功解析;
* val-解析前的val;
* key-成功解析的规则;
* data-解析后的对象,如果未传入keyList或解析失败则返回空对象
* */
getListData(val, keyList = []) {
// 判断是否是手动输入数据,并且是否传入截取规则
if (keyList.length) {
let rule = this.get()
return analysis({val, keyList, index:0, rule})
}
return {
success: false,
val,
key: '',
data: {}
}
},
}