logwire-wms-ui-test
Version:
运匠科技wms-PDA基础组件库
737 lines (671 loc) • 22.2 kB
JavaScript
/*
* app壳子提供的能力
* @author 蔡礼标
* @date 2022-01-19
* */
import {Language} from "./Language";
function handleAppExtendResult(result, error, resolve, reject) {
console.log("----handleAppExtendResult------");
if (error) {
reject(error);
return;
}
console.log(result);
const r = JSON.parse(result);
if (!r) {
return reject("result parse error");
} else if (r.error === true) {
return reject(false);
} else {
return resolve(r.data);
}
}
export const AppPower = {
//----------------- 子web控制
/**
* 创建 子web,返回 key
* @param url
* @param title
* @returns {Promise<unknown>}
*/
childWebAdd: (url, title = null) => {
let androidApp = window.androidApp;
if (androidApp && typeof (androidApp.addChildWeb) == "function") {
return new Promise(function (resolve, reject) {
androidApp.addChildWeb(JSON.stringify({url: url, title: title}), function (result, error) {
handleAppExtendResult(result, error, resolve, reject);
});
});
}
return new Promise(function (resolve, reject) {
reject(false);
});
},
/**
* 隐藏 已有子web(没有 不处理)
* @returns {Promise<unknown>}
*/
childWebHide: () => {
let androidApp = window.androidApp;
if (androidApp && typeof (androidApp.hideChildWeb) == "function") {
return new Promise(function (resolve, reject) {
androidApp.hideChildWeb(null, function (result, error) {
handleAppExtendResult(result, error, resolve, reject);
});
});
}
return new Promise(function (resolve, reject) {
reject(false);
});
},
/**
* 隐藏 已有子web(没有 不处理),同时 显示 新的子web
* @param key
* @returns {Promise<unknown>}
*/
childWebSwitch: (key) => {
let androidApp = window.androidApp;
if (androidApp && typeof (androidApp.switchChildWeb) == "function") {
return new Promise(function (resolve, reject) {
androidApp.switchChildWeb(key, function (result, error) {
handleAppExtendResult(result, error, resolve, reject);
});
});
}
return new Promise(function (resolve, reject) {
reject(false);
});
},
/**
* 移除 子web,正在显示,自动隐藏+移除
* @param key
* @returns {Promise<unknown>}
*/
childWebRemove: (key) => {
let androidApp = window.androidApp;
if (androidApp && typeof (androidApp.removeChildWeb) == "function") {
return new Promise(function (resolve, reject) {
androidApp.removeChildWeb(key, function (result, error) {
handleAppExtendResult(result, error, resolve, reject);
});
});
}
return new Promise(function (resolve, reject) {
reject(false);
});
},
/**
* 移除 全部子web,并 回到主页
* @param needBack 清理后是否需要回到主页
* @returns {Promise<unknown>}
*/
childWebClearAll: (needBack = false) => {
let androidApp = window.androidApp;
if (androidApp && typeof (androidApp.clearAllChildWeb) == "function") {
return new Promise(function (resolve, reject) {
androidApp.clearAllChildWeb(needBack.toString(), function (result, error) {
handleAppExtendResult(result, error, resolve, reject);
});
});
}
return new Promise(function (resolve, reject) {
reject(false);
});
},
/**
* 重建 全部子web,重建后自动显示当前再展示的(没有 则不显示)
* @param delayShowTime 延迟显示时间 默认 10秒, 0 不延迟显示
* @returns {Promise<unknown>}
*/
childWebRebuild: (delayShowTime = 10) => {
let androidApp = window.androidApp;
if (androidApp && typeof (androidApp.rebuildAllChildWeb) == "function") {
return new Promise(function (resolve, reject) {
androidApp.rebuildAllChildWeb(delayShowTime.toString(), function (result, error) {
handleAppExtendResult(result, error, resolve, reject);
});
});
}
return new Promise(function (resolve, reject) {
reject(false);
});
},
/**
* 是否支持 多web显示
* @returns {Promise<boolean>}
*/
childWebSupport: () => {
let androidApp = window.androidApp;
if (androidApp && typeof (androidApp.supportChildWeb) == "function") {
return new Promise(function (resolve, reject) {
androidApp.supportChildWeb(null, function (result, error) {
handleAppExtendResult(result, error, resolve, reject);
});
});
}
return new Promise(function (resolve, reject) {
reject(false);
});
},
/**
* dm 大屏轮播
* @param token TOKEN
* @param uid 设备UID
* @param xsrf X-XSRF-TOKEN
* @param data 列表 item = "key":"value"
* @returns {Promise<boolean>}
*/
dmDevicePlay: (token, uid, xsrf, data = null) => {
let androidApp = window.androidApp;
if (androidApp && typeof (androidApp.dmDevicePlay) == "function") {
return new Promise(function (resolve, reject) {
// var test = {
// token:"1111111",
// uid:"1111111",
// xsrf:"1111111",
// data:[
// {"xxx":"yyyy"},
// ...
// ]
// }
androidApp.dmDevicePlay(JSON.stringify({token: token, uid: uid, xsrf: xsrf, data: data}), function (result, error) {
handleAppExtendResult(result, error, resolve, reject);
});
});
}
return new Promise(function (resolve, reject) {
reject(false);
});
},
/**
* 全屏显示
* full = true|false
*/
fullScreen: (full) => {
let androidApp = window.androidApp;
if (androidApp && typeof (androidApp.fullScreen) == "function") {
return new Promise(function (resolve, reject) {
androidApp.fullScreen(full.toString(), function (result, error) {
handleAppExtendResult(result, error, resolve, reject);
});
});
}
return new Promise(function (resolve) {
resolve("");
});
},
/**
* 获取设备 屏幕尺寸
* 返回 "宽,高"
*/
deviceScreen: () => {
let androidApp = window.androidApp;
if (androidApp && typeof (androidApp.deviceScreen) == "function") {
return new Promise(function (resolve, reject) {
androidApp.deviceScreen(null, function (result, error) {
handleAppExtendResult(result, error, resolve, reject);
});
});
}
return new Promise(function (resolve) {
resolve("");
});
},
/**
* 生成 二维码 图片
*/
createQRCode: (content) => {
let androidApp = window.androidApp;
if (androidApp && typeof (androidApp.createQRCode) == "function") {
return new Promise(function (resolve, reject) {
androidApp.createQRCode(JSON.stringify({content: content, size: 100}), function (result, error) {
handleAppExtendResult(result, error, resolve, reject);
});
});
}
return new Promise(function (resolve) {
resolve("");
});
},
/**
* 设置 pda 退出路由
* 全匹配(忽略参数)
*/
hideSoftInput: (view) => {
let androidApp = window.androidApp;
if (androidApp && typeof (androidApp.hideSoftInput) == "function") {
return new Promise(function (resolve, reject) {
setTimeout(() => {
androidApp.hideSoftInput(null, function (result, error) {
handleAppExtendResult(result, error, resolve, reject);
});
}, 50);
});
}
return new Promise(function (resolve) {
if (view.notKeyboard) {
view.readonlyInp = true;
setTimeout(() => {
view.readonlyInp = false;
}, 200);
}
resolve(true);
});
},
/**
* 设置 pda 退出路由
* 全匹配(忽略参数)
*/
setExitRoute: (arr = []) => {
let androidApp = window.androidApp;
if (androidApp && typeof (androidApp.exitBackPage) == "function") {
return new Promise(function (resolve, reject) {
androidApp.exitBackPage(JSON.stringify({type: "suffix", list: arr}), function (result, error) {
handleAppExtendResult(result, error, resolve, reject);
});
});
}
return new Promise(function (resolve, reject) {
reject(false);
});
},
/**
* app 蓝牙打印
* @param template string 模板
* @param data 打印数据--"[{},{}]"
* @returns true|false
*/
bluePrint: (template, data) => {
let androidApp = window.androidApp;
if (androidApp && typeof (androidApp.bluePrint) == "function") {
return new Promise(function (resolve, reject) {
androidApp.bluePrint(JSON.stringify({"template": template, "data": data}), function (result, error) {
handleAppExtendResult(result, error, resolve, reject);
});
});
}
return new Promise(function (resolve, reject) {
let app = window.App_bluePrint;
if (app && typeof (app.bluePrint) == "function") {
if (true === app.bluePrint(JSON.stringify({"template": template, "data": data}))) {
resolve(true);
return;
}
}
reject(false);
});
},
/**
* 预先连接蓝牙打印 提升打印连接速度
* 可多次调用
*/
bluePrintOpen: () => {
let androidApp = window.androidApp;
if (androidApp && typeof (androidApp.blueOpen) == "function") {
return new Promise(function (resolve, reject) {
androidApp.blueOpen(null, function (result, error) {
handleAppExtendResult(result, error, resolve, reject);
});
});
}
return new Promise(function (resolve, reject) {
let app = window.App_bluePrint;
if (app && typeof (app.bluePrintOpen) == "function") {
if (true === app.bluePrintOpen()) {
resolve(true);
return;
}
}
reject(false);
});
},
/**
* 关闭蓝牙打印连接
* 可多次调用
* @returns {boolean}
*/
bluePrintClose: () => {
let androidApp = window.androidApp;
if (androidApp && typeof (androidApp.blueClose) == "function") {
return new Promise(function (resolve, reject) {
androidApp.blueClose(null, function (result, error) {
handleAppExtendResult(result, error, resolve, reject);
});
});
}
return new Promise(function (resolve, reject) {
let app = window.App_bluePrint;
if (app && typeof (app.bluePrintClose) == "function") {
if (true === app.bluePrintClose()) {
resolve(true);
return;
}
}
reject(false);
});
},
/**
* 测试打印
* @param arr
* @returns {Promise<unknown>}
*/
newBluePrintTest: () => {
let androidApp = window.androidApp;
if (androidApp && typeof (androidApp.newBluePrint) == "function") {
// [
// {
// "language":"xxx",// 打印指令 CPCL>ECS_POS>BYTE>ZPL,优先使用 CPCL,未实现 ZPL
// "formatType":"xxx",// 打印类型 IMAGE>APP_CMD>INSTRUCTION>BYTE,优先使用 IMAGE ,未实现APP_CMD
// "width":100,// 打印宽度
// "height":100,// 打印高度
// "skipPage":false,// 结束后是否跳页 cpcl 支持
// "customStartCmd":null,// 自定义打印开始指令
// "customEndCmd":null,// 自定义打印结束指令 ,"29,12" 芝柯 定制 跳页指令
// "data":[
// {
// "data":"xxxxxxxxx",// 打印数据 IMAGE = base64String;gzip、zip压缩,必须使用 ISO_8859_1 格式
// "count":1,// 打印份数
// }
// ]
// }
// ]
var data = [
{
language:"CPCL",
formatType:"IMAGE",
width:440,
height:280,
skipPage:true,
data:[
{
data:"iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAIAAACRXR/mAAAAAXNSR0IArs4c6QAAAANzQklUCAgI2+FP4AAAAdlJREFUWIXtmD2SozAQRj/2LMKBixOIE4hJHM0RUIgPsOFmm4gQsk0dORnpBHACagKku2gCzJ8HY2lnq3YCvUxU0/0kNR0QWWvx/fjxvwW2CVo+BC0fgpYPQcuHoOVD0PIhaPkQtHwIWj4ELR+Clg+7WqZM09IAgOLRGq7GIMWjIUjxW/BWnogrxZevfUGLFD+Tc3wrRoW2A1rQudgczU5z8BasshLZToCrFsAqLXD+PRafTmYnON45EVbZpiBf1DJlyhUpGlsxh0wAQIo/Wlfs/srjc4s622iAv9LCIeky53a4iRECsMqu0IIil9PSYZd7WoRVjRZd5iJmyvTxUZBD8jyDsxYAfLrD5LDZG6RorLUyXzsOpGUPdL1Lq7tqQfH5AEzfOSUdHKera4qXI/VwctBS13pe6PeWHmO/AgAAckjad/3vtEzfIT+x4cvW1xrt5c08/ThVeT9F4iOtrwp4NmPctMzbpc1PDABMmWZ1LvXrZRyZ23bdrzTKLuPqNha4fnkdvEzfPWrPFXYPmQ/DXeaYx7wWdDHyp5hp/FMhhs5fRo1vaUGXTx+xqzXkkPm6wKgiBb2rLvPleNraJD6l2iay4ZeuO0HLh6DlQ9DyIWj5ELR8+KZaH0FztVrCtA9NAAAAAElFTkSuQmCC",
count:1
}
]
}
]
return new Promise(function (resolve, reject) {
androidApp.newBluePrint(JSON.stringify({"data": data}), function (result, error) {
handleAppExtendResult(result, error, resolve, reject);
});
});
}
return new Promise(function (resolve, reject) {
reject(false);
});
},
/**
* app 蓝牙打印
* @returns true|false
* @param arr
*/
newBluePrint: (arr = []) => {
let androidApp = window.androidApp;
if (androidApp && typeof (androidApp.newBluePrint) == "function") {
// [
// {
// "language":"xxx",// 打印指令 CPCL>ECS_POS>BYTE>ZPL,优先使用 CPCL,未实现 ZPL
// "formatType":"xxx",// 打印类型 IMAGE>APP_CMD>INSTRUCTION>BYTE,优先使用 IMAGE ,未实现APP_CMD
// "width":100,// 打印宽度
// "height":100,// 打印高度
// "skipPage":false,// 结束后是否跳页 cpcl 支持
// "customStartCmd":null,// 自定义打印开始指令
// "customEndCmd":null,// 自定义打印结束指令 ,"29,12" 芝柯 定制 跳页指令
// "data":[
// {
// "data":"xxxxxxxxx",// 打印数据 IMAGE = base64String
// "count":1,// 打印份数
// }
// ]
// }
// ]
return new Promise(function (resolve, reject) {
androidApp.newBluePrint(JSON.stringify({"data": arr}), function (result, error) {
handleAppExtendResult(result, error, resolve, reject);
});
});
}
return new Promise(function (resolve, reject) {
reject(false);
});
},
/**
* 可多次调用,支持长连接
*/
newBluePrintOpen: (keepAlive = true) => {
let androidApp = window.androidApp;
if (androidApp && typeof (androidApp.newBlueOpen) == "function") {
return new Promise(function (resolve, reject) {
androidApp.newBlueOpen(JSON.stringify({"keepAlive": keepAlive}), function (result, error) {
handleAppExtendResult(result, error, resolve, reject);
});
});
}
return new Promise(function (resolve, reject) {
reject(false);
});
},
/**
* 关闭蓝牙打印连接
* 可多次调用
* @returns {boolean}
*/
newBluePrintClose: () => {
let androidApp = window.androidApp;
if (androidApp && typeof (androidApp.newBlueClose) == "function") {
return new Promise(function (resolve, reject) {
androidApp.newBlueClose(null, function (result, error) {
handleAppExtendResult(result, error, resolve, reject);
});
});
}
return new Promise(function (resolve, reject) {
reject(false);
});
},
/**
* 一次震动
* @param time
* @returns {Promise}
*/
shortVibrate: (time) => {
let androidApp = window.androidApp;
if (androidApp && typeof (androidApp.vibrateShort) == "function") {
return new Promise(function (resolve, reject) {
androidApp.vibrateShort(time.toString(), function (result, error) {
handleAppExtendResult(result, error, resolve, reject);
});
});
}
return new Promise(function (resolve) {
let app = window.App_vibrate;
if (app && typeof (app.shortVibrate) == "function") {
if (true === app.shortVibrate(time)) {
resolve(true);
// return;
}
}
// reject(false)
});
},
/**
* 获取UUID
* 示例 shortVibrate(500)
* @returns uuid
*/
appUUID: () => {
let androidApp = window.androidApp;
if (androidApp && typeof (androidApp.appUUID) == "function") {
return new Promise(function (resolve, reject) {
androidApp.appUUID(null, function (result, error) {
handleAppExtendResult(result, error, resolve, reject);
});
});
}
return new Promise(function (resolve) {
let app = window.App_uuid;
if (app && typeof (app.getUUID) == "function") {
const uuid = app.getUUID();
if (uuid) {
resolve(uuid);
return;
}
}
resolve(null);
});
},
/**
* 波动震动
* list:0+n*2=停止时间,1+n*2=震动时间
* 示例 longVibrate([50,150,100,150,100,1000])
* @param list
* @returns {boolean}
*/
longVibrate: (list) => {
let androidApp = window.androidApp;
if (androidApp && typeof (androidApp.vibrateWave) == "function") {
return new Promise(function (resolve, reject) {
androidApp.vibrateWave(JSON.stringify({"list": list, "repeat": -1}), function (result, error) {
handleAppExtendResult(result, error, resolve, reject);
});
});
}
return new Promise(function (resolve, reject) {
let app = window.App_vibrate;
if (app && typeof (app.waveVibrate) == "function") {
if (true === app.waveVibrate(JSON.stringify({"list": list, "repeat": -1}))) {
resolve(true);
return;
}
}
reject(false);
});
},
/**
* 语音提示
* 示例 speak("1234567")
*/
speak: (data) => {
// 如果设置的语言是中文
var toMore = false;
if (Language.getKey().includes("zh")) {
// 大于30个字符就不朗读
toMore = data.length > 30;
} else {
toMore = data.split(" ").length > 30;
}
if (toMore === true) {
return new Promise(function (resolve, reject) {
reject(`msg too long : ${data}`);
});
}
let androidApp = window.androidApp;
if (androidApp && typeof (androidApp.appTTS) == "function") {
return new Promise(function (resolve, reject) {
androidApp.appTTS(data, function (result, error) {
handleAppExtendResult(result, error, resolve, reject);
});
});
}
let app = window.App_tts;
if (app && typeof (app.speak) == "function") {
app.speak(data);
return true;
}
return false;
},
// 扫描
scan: () => {
let androidApp = window.androidApp;
if (androidApp && typeof (androidApp.appScan) == "function") {
return new Promise(function (resolve, reject) {
androidApp.appScan(null, function (result, error) {
handleAppExtendResult(result, error, resolve, reject);
});
});
}
return new Promise(function (resolve) {
let app = window.App_scan;
if (app && typeof (app.scan) == "function") {
resolve(app.scan());
return;
}
resolve(null);
});
},
// 获取图片 多张 默认最多9
getImages: (maxNum) => {
let app = window.App_gallery;
if (app && typeof (app.images) == "function") {
let images = app.images(maxNum);
if (images) return JSON.parse(images);
}
return null;
},
/**
* 获取配置信息:环境名
* @returns {string}
*/
appHostName: () => {
let androidApp = window.androidApp;
if (androidApp && typeof (androidApp.appHost) == "function") {
return new Promise(function (resolve, reject) {
androidApp.appHost(null, function (result, error) {
handleAppExtendResult(result, error, resolve, reject);
});
});
}
return new Promise(function (resolve) {
let app = window.App_config;
if (app && typeof (app.getHostName) == "function") {
resolve(app.getHostName());
return;
}
resolve("-");
});
},
/**
* 获取配置信息:调试模式
* @returns {boolean}
*/
appIsDebug: () => {
let androidApp = window.androidApp;
if (androidApp && typeof (androidApp.appDebug) == "function") {
return new Promise(function (resolve, reject) {
androidApp.appDebug(null, function (result, error) {
handleAppExtendResult(result, error, resolve, reject);
});
});
}
return new Promise(function (resolve) {
let app = window.App_config;
if (app && typeof (app.isDebug) == "function") {
resolve(true === app.isDebug());
return;
}
resolve(false);
});
},
/**
* 获取配置信息:发布类型
* @returns {string}
*/
appChannel: () => {
let androidApp = window.androidApp;
if (androidApp && typeof (androidApp.appChannel) == "function") {
return new Promise(function (resolve, reject) {
androidApp.appChannel(null, function (result, error) {
handleAppExtendResult(result, error, resolve, reject);
});
});
}
return new Promise(function (resolve) {
let app = window.App_config;
if (app && typeof (app.getChannel) == "function") {
resolve(app.getChannel());
return;
}
resolve("");
});
}
};