fastlion-amis
Version:
一种MIS页面生成工具
892 lines (891 loc) • 84.1 kB
JavaScript
"use strict";
var _a;
Object.defineProperty(exports, "__esModule", { value: true });
exports.RfidScanerRenderer = exports.SearchInventoryType = void 0;
var tslib_1 = require("tslib");
var react_1 = tslib_1.__importDefault(require("react"));
var __1 = require("..");
var Action_1 = tslib_1.__importDefault(require("./Action"));
var antd_1 = require("antd");
var msgsub_1 = tslib_1.__importDefault(require("../renderers/Lion/utils/msgsub"));
var VirtualTable_1 = tslib_1.__importDefault(require("../components/VirtualTable"));
var DragModal_1 = tslib_1.__importDefault(require("../components/DragModal"));
var shell_1 = require("../utils/shell");
var helper_1 = require("../utils/helper");
var Scoped_1 = require("../Scoped");
var keyStep_1 = require("../utils/keyStep");
var amis_formula_1 = require("amis-formula");
var icons_1 = require("@ant-design/icons");
var tpl_builtin_1 = require("../utils/tpl-builtin");
var RfidUtil_1 = require("../utils/RfidUtil");
require("./scss/rfidActionTable.scss");
var message = msgsub_1.default.getMessage();
var testRfidInventogyData = function () {
return new Array(30000).fill({
SHELF: 'HC010001', EPC: 'SKU00001AEPC00001', SKU: 'SKU00001', score: 80
});
};
// RFID单条数据
var ShelfNumberEXPR = /^0\d[A-Za-z]{2}\d{4}$/;
var InventoryTypeEnum;
(function (InventoryTypeEnum) {
InventoryTypeEnum[InventoryTypeEnum["COUNT"] = 0] = "COUNT";
InventoryTypeEnum[InventoryTypeEnum["PROCESS"] = 1] = "PROCESS";
InventoryTypeEnum[InventoryTypeEnum["PAUSE"] = 2] = "PAUSE";
InventoryTypeEnum[InventoryTypeEnum["END"] = 3] = "END";
})(InventoryTypeEnum || (InventoryTypeEnum = {}));
var RFIDActionEnum;
(function (RFIDActionEnum) {
RFIDActionEnum["SCAN"] = "scan";
RFIDActionEnum["SEARCH"] = "search";
RFIDActionEnum["PORT"] = "port";
RFIDActionEnum["INVENTORY"] = "inventory";
RFIDActionEnum["SCANSINGLEBLANKTAG"] = "scanSingleBlankTag";
RFIDActionEnum["WRITETAG"] = "writeTag"; // 目标epc写入
})(RFIDActionEnum || (RFIDActionEnum = {}));
// 扳机事件
var TitleMap = (_a = {},
_a[RFIDActionEnum.SCAN] = 'RFID扫描',
_a[RFIDActionEnum.SEARCH] = 'RFID找货',
_a[RFIDActionEnum.INVENTORY] = 'RFID货架盘存',
_a[RFIDActionEnum.PORT] = '重试写入',
_a);
var defaultProPertyForm = {
"type": "property",
"items": []
};
var SearchInventoryType;
(function (SearchInventoryType) {
SearchInventoryType[SearchInventoryType["EPC"] = 0] = "EPC";
SearchInventoryType[SearchInventoryType["SKU"] = 1] = "SKU";
})(SearchInventoryType = exports.SearchInventoryType || (exports.SearchInventoryType = {}));
var RfidScaner = /** @class */ (function (_super) {
tslib_1.__extends(RfidScaner, _super);
function RfidScaner() {
var _a;
var _this = this;
var _b, _c;
_this = _super.apply(this, arguments) || this;
_this.appShell = window['AppShell'];
_this.staticColumnsKey = [
{ key: 'TID', name: 'TID', label: 'tid' },
{ key: 'EPC', name: 'EPC', label: 'epc码', width: 180 },
{ key: 'STATUS', name: 'STATUS', label: '状态', width: 80 },
{ key: 'GOD_ID', name: 'GOD_ID', label: '货号', width: 120 },
{ key: 'SKU', name: 'SKU', label: 'sku码', width: 100 },
{ key: 'COUNT', name: 'COUNT', label: '命中数', width: 80 },
{ key: 'TAGCOUNT', name: 'TAGCOUNT', label: '个数' },
{ key: 'SHELF', name: 'SHELF', label: '货架号', width: 150 },
{ key: 'SCORE', name: 'SCORE', label: '得分', width: 60 },
{ key: 'SKUCOUNT', name: 'SKUCOUNT', label: '扫描量', width: 100 },
{ key: 'RSSI', name: 'RSSI', label: '信号强度', type: 'progress', width: 100 },
{ key: 'BRANCHNO', name: 'BRANCHNO', label: '分部号', width: 100 }
];
// 扫货中的columns比较特殊
_this.inventoryScanColumns = _this.staticColumnsKey.filter(function (_) { return ['EPC', 'SKU', 'TAGCOUNT'].includes(_.key); });
_this.state = {
formHigh: 0,
modalVisable: false,
modalHide: false,
onScan: false,
currentShelf: '',
inventoryCount: {},
onInfrared: false,
RfidList: [],
StaticList: [],
RfidIndexMap: {},
StaticIndexMap: {},
curInputshelf: '',
/** 监听操作的timer */
operateTimer: undefined,
/** 开始倒计时的timer */
countDownTimer: undefined
};
// 盘存开始扫码的状态
_this.hasStartINVENTORY = false;
_this.rfidWorkModeMap = (_a = {},
_a[RFIDActionEnum.SCAN] = {
start: function (scanFn, successFn, data, fail) { return shell_1.Shell.startRFIDScan(data, scanFn, successFn, fail); },
end: function () { return shell_1.Shell.UHFStopScan(); },
},
_a[RFIDActionEnum.SEARCH] = {
start: function (scanFn, successFn, searchData, fail) {
if (searchData.sku) {
return shell_1.Shell.UHFStartSearchForSKU(scanFn, successFn, searchData, fail);
}
else if (searchData.epcList) {
return shell_1.Shell.UHFStartSearchForEPC(scanFn, successFn, searchData, fail);
}
else {
return message.warn('非法参数,未找到对应的RFID执行方法');
}
},
end: function () { return shell_1.Shell.UHFStopSearch(); },
},
_a[RFIDActionEnum.INVENTORY] = {
start: function (scanFn, successFn, searchData, fail) {
// 暂时根据data里面给了啥来做区分 后期改模式切换
var data = searchData;
_this.hasStartINVENTORY = true;
if (searchData.shelf) {
if (searchData === null || searchData === void 0 ? void 0 : searchData.branchNo) {
return shell_1.Shell.UHFStartInventoryForBranch(data, successFn, scanFn, fail);
}
else if (searchData === null || searchData === void 0 ? void 0 : searchData.epcList) {
return shell_1.Shell.UHFStartInventoryForEPC(data, successFn, scanFn, fail);
}
else {
return shell_1.Shell.UHFStartInventoryForAll(data, successFn, scanFn, fail);
}
}
else {
message.warn('非法参数,未找到对应的RFID执行方法');
}
},
end: function (endFn) { return shell_1.Shell.UHFStopInventory(); },
pause: function () { return shell_1.Shell.UHFPauseInventory(); },
resume: function (shelf) { return shell_1.Shell.UHFResumeInventory(shelf); },
clear: function (shelf) { return shell_1.Shell.UHFClearInventoryData(shelf); }, // 根据货架号清空扫到的列表
},
_a);
_this.showColumns = [];
_this.updateQueryMap = {}; // 存放更新逻辑的部分 省的每次去找
_this.acceptQueryMap = {}; // 存放更新逻辑的部分 省的每次去找
// 通过红外获取货架号
_this.getshelf = function (time) {
if (time === void 0) { time = 10; }
return new Promise(function (res, rej) {
_this.shelfRes = res;
clearTimeout(_this.shelfTimer);
var getShelf = function () {
var result = shell_1.Shell.UHFStartInfrared(time * 1000, function (result) {
var _a, _b, _c;
// console.log('shelf', JSON.stringify(result))
// 有数据再执行回调
if ((_a = result === null || result === void 0 ? void 0 : result.data) === null || _a === void 0 ? void 0 : _a.content) {
clearTimeout(_this.shelfTimer);
// 符合货架标准才执行该方法
if (ShelfNumberEXPR.test((_b = result === null || result === void 0 ? void 0 : result.data) === null || _b === void 0 ? void 0 : _b.content)) {
_this.setState({ onInfrared: false });
res((_c = result === null || result === void 0 ? void 0 : result.data) === null || _c === void 0 ? void 0 : _c.content);
}
else {
shell_1.Shell.UHFStopInfrared();
getShelf();
}
}
_this.shelfTimer = setTimeout(function () {
_this.setState({ onInfrared: false });
// 保证停止
shell_1.Shell.UHFStopInfrared();
res('');
}, time * 1000);
});
if (!result)
_this.setState({ onInfrared: false });
};
_this.setState({ onInfrared: true, curInputshelf: '' }, function () {
getShelf();
});
});
};
_this.startSetTime = 0;
_this.lastData = {};
_this.dealScanCodeList = function (_data, ScanCodes) {
var _a;
var _b = _this.props, reload = _b.reload, valueAttr = _b.valueAttr, confirmApi = _b.confirmApi, env = _b.env, api = _b.api;
var data = tslib_1.__assign((_a = {}, _a[valueAttr || 'items'] = ScanCodes, _a), _data);
var dealCode = function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
var ctx, payload, error_1;
var _this = this;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0:
ctx = (ScanCodes || _data) ? (0, helper_1.createObject)(this.props.data, data) : this.props.data;
// const ctx = createObject(this.props.data, { items: [{ EPC: '38739204B0100000001' }], ids: '38739204B0100000001' })
// keyStep操作
this.setState({ modalVisable: false, RfidList: [], RfidIndexMap: {}, onInfrared: false, onScan: true });
if (!api) return [3 /*break*/, 6];
_a.label = 1;
case 1:
_a.trys.push([1, 5, , 6]);
return [4 /*yield*/, env.fetcher({ url: (location.protocol === 'http:' ? 'https://sasdev.sanfu.com/saas_dev/' : '') + api.url, method: api.method || 'post', data: api.data }, ctx)];
case 2:
payload = _a.sent();
console.log(JSON.stringify(payload));
if (!(payload.ok && payload.status == 20003)) return [3 /*break*/, 4];
return [4 /*yield*/, (0, keyStep_1.KeyStepCommonFunction)(payload.data.scanAfterDo, data, env, this.props, this.writeErrorCallBack, function () {
if (_this.props.reload) {
_this.reloadTarget(reload, ctx);
}
})];
case 3:
_a.sent();
payload.msg && message.success(payload.msg);
_a.label = 4;
case 4: return [3 /*break*/, 6];
case 5:
error_1 = _a.sent();
console.error(error_1);
message.error('请求失败');
return [3 /*break*/, 6];
case 6:
reload && this.reloadTarget(reload, ctx);
this.setState({ onScan: false });
return [2 /*return*/];
}
});
}); };
if (confirmApi) {
_this.confirmAction(data, function () { dealCode(); });
}
else {
dealCode();
}
};
_this.closeScanModal = function () {
_this.setState({ modalVisable: false, onScan: false, onInfrared: false });
};
_this.confirmAction = function (data, conFirmDo) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
var _a, confirmApi, env, confirmMsg, _b, ref_1;
var _this = this;
var _c;
return tslib_1.__generator(this, function (_d) {
switch (_d.label) {
case 0:
_a = this.props, confirmApi = _a.confirmApi, env = _a.env;
_d.label = 1;
case 1:
_d.trys.push([1, 4, , 5]);
_b = confirmApi;
if (!_b) return [3 /*break*/, 3];
return [4 /*yield*/, env.fetcher(confirmApi, data).catch(function (ref) {
__1.toast.error(ref.message);
return { data: ref, status: 500 };
})];
case 2:
_b = (_d.sent());
_d.label = 3;
case 3:
confirmMsg = _b;
if ((confirmMsg === null || confirmMsg === void 0 ? void 0 : confirmMsg.status) === 10004 || (confirmMsg === null || confirmMsg === void 0 ? void 0 : confirmMsg.status) === 10001 || (confirmMsg === null || confirmMsg === void 0 ? void 0 : confirmMsg.status) === 1) {
env.notify('warning', confirmMsg === null || confirmMsg === void 0 ? void 0 : confirmMsg.msg);
return [2 /*return*/, this.closeScanModal()];
}
else if ((confirmMsg === null || confirmMsg === void 0 ? void 0 : confirmMsg.status) === 500) {
return [2 /*return*/, this.closeScanModal()];
}
else if ((confirmMsg === null || confirmMsg === void 0 ? void 0 : confirmMsg.status) === 10003) {
env === null || env === void 0 ? void 0 : env.confirm((0, __1.filter)((_c = confirmMsg === null || confirmMsg === void 0 ? void 0 : confirmMsg.data) === null || _c === void 0 ? void 0 : _c.showText, data)).then(function (confirmd) {
if (confirmd) {
conFirmDo();
}
else {
_this.closeScanModal();
}
return;
});
return [2 /*return*/];
}
else if ((confirmMsg === null || confirmMsg === void 0 ? void 0 : confirmMsg.status) === 10005) {
env === null || env === void 0 ? void 0 : env.confirm(confirmMsg).then(function (confirmd) {
if (confirmd) {
conFirmDo();
}
else {
_this.closeScanModal();
}
});
return [2 /*return*/];
}
else {
conFirmDo();
}
return [3 /*break*/, 5];
case 4:
ref_1 = _d.sent();
__1.toast.error(ref_1.message);
return [2 /*return*/];
case 5: return [2 /*return*/];
}
});
}); };
// 存放空实现的暂存量 方便直接调用
_this.writeErrorDealCode = undefined;
_this.isLastStep = false;
_this.modifyError = false;
_this.modalIndex = 0; // 弹窗索引 用于区分多次弹窗
// 写入失败的回调 方便直接展示用的
_this.writeErrorCallBack = function (restScanDo, data, env, errorData) {
_this.modifyError = true;
// 先注册写入错误回调 方便下次使用
_this.writeErrorDealCode = function (skip) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
var payload;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0:
this.modifyError = false;
this.setState({ modalVisable: false });
if (!skip) return [3 /*break*/, 3];
if (!restScanDo[0].afterApi) return [3 /*break*/, 2];
return [4 /*yield*/, env.fetcher(restScanDo[0].afterApi, data)];
case 1:
payload = _a.sent();
if ((payload === null || payload === void 0 ? void 0 : payload.ok) && (payload === null || payload === void 0 ? void 0 : payload.status) == 20003) {
// 跳过的话跳过当前的Scando
return [2 /*return*/, (0, keyStep_1.KeyStepCommonFunction)(payload.data.scanAfterDo, data, env, this.props, this.writeErrorCallBack)];
}
else {
return [2 /*return*/, payload.msg && message.warn(payload.msg)];
}
_a.label = 2;
case 2: return [3 /*break*/, 4];
case 3: return [2 /*return*/, (0, keyStep_1.KeyStepCommonFunction)(restScanDo, data, env, this.props, this.writeErrorCallBack)];
case 4: return [2 /*return*/];
}
});
}); };
_this.isLastStep = !restScanDo[0].afterApi;
// 展示列固定
_this.showColumns = _this.staticColumnsKey.filter(function (_) { return ['GOD_ID', 'SKU', 'EPC'].includes(_.key); });
_this.setRfidList((0, RfidUtil_1.transportEpcList)(errorData), function () {
// 打开弹窗
_this.setState({ modalVisable: true, onScan: true });
});
};
// 开始扫码
_this.acceptRfid = function () {
var _a;
// 货号特殊处理下
var curShelf = (_a = _this.workParam) === null || _a === void 0 ? void 0 : _a['shelf'];
// console.log(curShelf, 'curShelf', this.workParam)
// 如果取得出 暂存货架号
if (curShelf) {
_this.setState({ currentShelf: curShelf });
}
var res = _this.rfidWorkModeMap[_this.workMode].start(function (res) {
var _a, _b;
// 开始扫码就移除闲时提交定时器
_this.submitTimeDuration && _this.removeCountDownSubmit();
switch (_this.workMode) {
// 扫描模式放data.tag里面
case RFIDActionEnum.SCAN:
case RFIDActionEnum.SEARCH:
if (!((_b = (_a = res === null || res === void 0 ? void 0 : res.data) === null || _a === void 0 ? void 0 : _a.tag) === null || _b === void 0 ? void 0 : _b.epc))
return; // 移除脏数据
_this.addRfidToList(tslib_1.__assign(tslib_1.__assign({}, res.data.tag), { skuCount: res.data.skuCount }));
return;
// 盘点模式放data里面
case RFIDActionEnum.INVENTORY:
// console.log('res.data:', JSON.stringify(res.data))
switch (res.data.type) {
// case InventoryTypeEnum.START:
case InventoryTypeEnum.COUNT:
// epc用和tag合并出来 tag 给个假的表示每次都是新的
_this.setInventoryCount(res.data);
break;
case InventoryTypeEnum.PAUSE:
case InventoryTypeEnum.END:
_this.setRfidList(res.data.tagList);
// this.setRfidList(testRfidInventogyData())
break;
}
return;
default:
break;
}
}, function (result) { console.log(JSON.stringify('result', result)); }, _this.workParam, function (res) {
_this.removeCountDownSubmit();
message.warn(res.msg);
_this.setState({ modalVisable: false, onScan: false, onInfrared: false });
});
// 有配置闲时提交就添加闲时自动提交逻辑
_this.submitTimeDuration && _this.addCountDownSubmit();
// 测试代码,模拟扫码
// setTimeout(() => {
// this.addRfidToList({ epc: '123123123213', sku: '123213', skuCount: 1 })
// }, 500)
// setTimeout(() => {
// this.addRfidToList({ epc: '123143123213', sku: '1232313', skuCount: 2 })
// }, 2000)
// setTimeout(() => {
// this.addRfidToList({ epc: '1233143123213', sku: '12232313', skuCount: 2 })
// }, 6000)
// this.setState({ modalVisable: true, onScan: true, RfidList: new Array(3).fill(1).map(_ => ({ EPC: new Date().getTime() + '', RSSI: new Date().getTime(), SKU: new Date().getTime() + '' })) })
if (res) {
//得有方法才能开弹窗
_this.setState({ modalVisable: true, onScan: true });
}
else {
_this.setState({ onScan: false, onInfrared: false });
}
};
_this.getCurrentInventoryResult = function (callback) {
shell_1.Shell.UHFGetInventoryResult(function (result) {
// console.log('result', JSON.stringify(result))
// 回调优化 保证获取以后提交扫货数据
_this.setRfidList(result === null || result === void 0 ? void 0 : result.data.tagList, function () {
callback === null || callback === void 0 ? void 0 : callback();
});
// 移除一下taglist
result.tagList = [];
_this.setState({ inventoryCount: result });
});
};
//停止扫码
_this.stopAcceptRfid = function () {
_this.setState({ onScan: false }, function () {
var _a, _b;
// 调用关闭功能
(_b = (_a = _this.rfidWorkModeMap[_this.workMode]) === null || _a === void 0 ? void 0 : _a.end) === null || _b === void 0 ? void 0 : _b.call(_a);
// 更新表单用的代码 暂时不需要
});
};
// 设置多条汇总 初始化的时候设置一个汇总表
_this.setStaticList = function (_StaticList, successFn) {
var StaticIndexMap = {};
_StaticList.map(function (_, index) { return StaticIndexMap[_[_this.primaryFiled]] = index; });
var StaticList = _StaticList.map(function (_StaticObj, index) {
var Static = {};
// 转大写
Object.keys(_StaticObj).map(function (key) { return Static[key.toUpperCase()] = _StaticObj[key]; });
return tslib_1.__assign(tslib_1.__assign({}, Static), { rowIndex: index });
});
_this.setState({ StaticList: StaticList, StaticIndexMap: StaticIndexMap }, function () { return successFn === null || successFn === void 0 ? void 0 : successFn(); });
};
// 设置多条rifd 针对每次操作都会给我所有数据的情况做的
// 盘点的时候 暂停,清空,提交的时候都会回调一个厂商处理过的数据
// 以该数据作为最终要提交的数据
_this.setRfidList = function (_RfidObjList, successFn) {
var RfidIndexMap = {};
_RfidObjList.map(function (_, index) { return RfidIndexMap[_.epc] = index; });
var RfidObjList = _RfidObjList.map(function (_RfidObj, index) {
var RfidObj = {};
Object.keys(_RfidObj).map(function (key) { return RfidObj[key.toUpperCase()] = _RfidObj[key]; });
return tslib_1.__assign(tslib_1.__assign({}, RfidObj), { rowIndex: index });
});
_this.setState({ RfidList: RfidObjList, RfidIndexMap: tslib_1.__assign({}, RfidIndexMap) }, function () { return successFn === null || successFn === void 0 ? void 0 : successFn(); });
};
_this.isStatic = function () {
// 有primayFiled也算你要汇总
return (_this.defaultDataSource || _this.primaryFiled) && _this.workMode === RFIDActionEnum.SCAN;
};
// 设置单条的RFID数据
_this.addRfidToList = function (_RfidObj) {
var _a, _b;
if (!_RfidObj)
return;
// console.log('RfidObj', JSON.stringify(_RfidObj))
if (_RfidObj)
_RfidObj.god_id = (_a = _RfidObj === null || _RfidObj === void 0 ? void 0 : _RfidObj.sku) === null || _a === void 0 ? void 0 : _a.slice(0, 6);
var RfidObj = {}; // 转大写后的数据
// 开始设置单条数据就清除倒计时
_this.submitTimeDuration && _this.removeCountDownSubmit();
// 转大写
Object.keys(_RfidObj).map(function (key) { return RfidObj[key.toUpperCase()] = _RfidObj[key]; });
var StaticObj = tslib_1.__assign({}, RfidObj); // 复制一份汇总数据先
var changeState = {}; // 变化量保存
var RfidList = _this.state.RfidList;
var updateQueryKeys = Object.keys(_this.updateQueryMap);
var RfidIndexMap = _this.state.RfidIndexMap;
var RfidIndex = RfidIndexMap[RfidObj.EPC]; // 记录数据
var RecordRfid = RfidList[RfidIndex];
// 防止数组操作慢 有索引导的直接用索引改
if (RfidObj.EPC && RfidIndex !== undefined) {
// 原有的记录
var newRfidObj = tslib_1.__assign({}, RfidObj);
// 增加命中次数
RfidList[RfidIndex] = tslib_1.__assign(tslib_1.__assign(tslib_1.__assign({}, RecordRfid), newRfidObj), { COUNT: ((RecordRfid === null || RecordRfid === void 0 ? void 0 : RecordRfid.COUNT) || 0) + 1 });
}
else {
RfidObj['rowIndex'] = RfidList.length;
RfidList.push(tslib_1.__assign(tslib_1.__assign({}, RfidObj), { COUNT: 1 }));
RfidIndexMap[RfidObj.EPC] = RfidList.length - 1;
}
// 修改数据
changeState = { RfidList: tslib_1.__spreadArray([], RfidList, true), RfidIndexMap: tslib_1.__assign({}, RfidIndexMap) };
// 如果有默认数据源并且工作模式是扫描 同步跟新汇总数据 -- 单独处理 互不干扰
if (_this.isStatic()) {
// StaticObj 在最上方定义
var StaticList = _this.state.StaticList;
var updateQueryKeys_1 = Object.keys(_this.updateQueryMap);
var hasUpdateQuery = !!updateQueryKeys_1.length;
var StaticIndexMap = _this.state.StaticIndexMap;
var RecordIndex = StaticIndexMap[StaticObj[_this.primaryFiled]]; // 记录数据
var RecordStatic = StaticList[RecordIndex];
// 模拟测试数据
// if (!StaticObj.SKUCOUNT) {
// StaticObj.SKUCOUNT = 10
// }
// if (!StaticObj.TRAN_AMOUNT) {
// StaticObj.TRAN_AMOUNT = 20
// }
// 防止数组操作慢 有索引导的直接用索引改
// 原有的记录
var newStaticObj_1 = tslib_1.__assign({}, StaticObj);
// 有更新逻辑的情况 需要按照条目每条都更新
if (hasUpdateQuery) {
// {...RecordStatic, ...StaticObj} //更新原来哪条的数据
var SingleData_1 = tslib_1.__assign(tslib_1.__assign(tslib_1.__assign({}, RecordStatic), StaticObj), { pristine: tslib_1.__assign({}, RecordStatic) });
updateQueryKeys_1.map(function (key) {
// console.log(key, this.updateQueryMap[key], SingleData, resolveVariableAndFilter(this.updateQueryMap[key], SingleData, '| raw'))
var newValue = (0, amis_formula_1.resolveVariableAndFilter)(_this.updateQueryMap[key], SingleData_1, '| raw');
newStaticObj_1[key] = newValue;
});
}
if (StaticObj[_this.primaryFiled] && RecordIndex !== undefined) {
// 增加命中次数
StaticList[RecordIndex] = tslib_1.__assign(tslib_1.__assign(tslib_1.__assign({}, RecordStatic), newStaticObj_1), { COUNT: (RecordStatic.COUNT || 0) + 1 });
}
else {
// 如果没有数据源 走添加逻辑 有的话不能增加额外数据
if (!((_b = _this.defaultDataSource) === null || _b === void 0 ? void 0 : _b.length)) {
newStaticObj_1['rowIndex'] = StaticList.length;
StaticList.push(tslib_1.__assign(tslib_1.__assign({}, newStaticObj_1), { COUNT: 1 }));
StaticIndexMap[newStaticObj_1[_this.primaryFiled]] = StaticList.length - 1;
}
}
changeState = tslib_1.__assign(tslib_1.__assign({}, changeState), { StaticList: tslib_1.__spreadArray([], StaticList, true), StaticIndexMap: tslib_1.__assign({}, StaticIndexMap) });
}
_this.setState(changeState);
// 设置完数据开始加入定时器
_this.submitTimeDuration && _this.addCountDownSubmit();
};
_this.endScan = function (e, userConfirm) {
var _a;
var api = _this.props.api;
(_a = _this.mutationObserver) === null || _a === void 0 ? void 0 : _a.disconnect();
// 有api才有提交逻辑
if (userConfirm && api)
_this.dealScanCodeList(e, _this.state.RfidList);
else
// 清空为初始化逻辑
_this.setState({ modalVisable: false, RfidList: [], RfidIndexMap: {}, onInfrared: false });
};
_this.closeScanDilaog = function (e, userConfirm) {
//扫码中的x仅做停止扫描
if (_this.state.onInfrared) {
return _this.cancelInfrared();
}
// if (this.state.onScan) {
// this.stopAcceptRfid()
// }
// this.endScan(e, userConfirm)
switch (_this.workMode) {
case RFIDActionEnum.SCAN:
case RFIDActionEnum.SEARCH:
//扫描查找直接关了就行
if (_this.state.onScan) {
_this.stopAcceptRfid();
}
_this.endScan(e, userConfirm);
break;
case RFIDActionEnum.INVENTORY:
// 扫描中关闭扫码
if (_this.state.onInfrared) {
shell_1.Shell.UHFStopInventory();
shell_1.Shell.UHFStopInfrared();
clearTimeout(_this.shelfTimer);
}
var endScan_1 = function () {
if (_this.state.onScan) {
_this.stopAcceptRfid();
}
_this.endScan(e, userConfirm);
};
if (_this.state.onScan) {
// 如果你在扫描中 先暂停
shell_1.Shell.UHFPauseInventory(function () {
// 关闭的时候要特殊调回调
if (userConfirm) {
_this.getCurrentInventoryResult(endScan_1);
}
else {
_this.setState({ inventoryCount: {} });
endScan_1();
}
});
}
else {
endScan_1();
}
break;
default:
_this.setState({ modalVisable: false, onScan: false });
break;
}
// 卸载对keycode 的监听
_this.regeditEnterCodeEvent();
// 清除闲时提交定时器
_this.removeCountDownSubmit();
};
_this.handleSingleBlankTag = function (res) {
var _a;
var _b;
var valueAttr = _this.props.valueAttr;
var epc = (_b = res === null || res === void 0 ? void 0 : res.data) === null || _b === void 0 ? void 0 : _b.epc;
if (!epc)
return message.warn((res === null || res === void 0 ? void 0 : res.msg) || '未获取到白标EPC码');
else {
message.success('扫描到白标EPC码:' + epc);
// 改为只有一条的selectItems
_this.dealScanCodeList((_a = {}, _a[valueAttr !== null && valueAttr !== void 0 ? valueAttr : 'EPC'] = epc, _a));
}
};
_this.handleAction = function (e) { return tslib_1.__awaiter(_this, void 0, Promise, function () {
var env, res, error_2, actionAfterScan_1;
var _this = this;
var _a, _b, _c, _d, _e, _f, _g;
return tslib_1.__generator(this, function (_h) {
switch (_h.label) {
case 0:
(_a = e === null || e === void 0 ? void 0 : e.stopPropagation) === null || _a === void 0 ? void 0 : _a.call(e);
if (this.state.modalHide) {
this.setState({ modalHide: false });
return [2 /*return*/];
}
// console.log('走到这里了',this.props)
// 如果有其中一种情况说明弹窗已经打开 直接返回不往下走 主要是为了防止按钮触发再走一遍 或者已经开了窗口又用其他按钮触发
if (this.state.onInfrared || this.state.modalVisable || this.state.onScan || this.props.disabled || this.props.btnDisabled || RfidUtil_1.windowRFIDTriger.onRfidAct) {
if (this.state.onInfrared || this.state.modalVisable || this.state.onScan)
return [2 /*return*/, message.warn('自身启用中,请勿重复操作')];
if (this.props.disabled || this.props.btnDisabled)
return [2 /*return*/, message.warn('按钮禁用中')];
if (RfidUtil_1.windowRFIDTriger.onRfidAct)
return [2 /*return*/, message.warn('其他按钮占用中,请勿重复重复操作')];
return [2 /*return*/, message.warn('未知问题')];
}
// 所有columns放入
this.showColumns = this.props.columns;
if (this.primaryFiled)
this.defaultDataSource = []; // 数据预源置入 方便清空时候处理下
if (this.props.source)
this.defaultDataSource = (0, amis_formula_1.resolveVariableAndFilter)(this.props.source, this.props.data, '| raw');
if (!this.props.initApi) return [3 /*break*/, 4];
env = this.props.env;
message.loading('获取数据源中', 99 * 1000);
_h.label = 1;
case 1:
_h.trys.push([1, 3, , 4]);
return [4 /*yield*/, env.fetcher(this.props.initApi, this.props.data)];
case 2:
res = _h.sent();
message.destroy();
if ((_b = res === null || res === void 0 ? void 0 : res.data) === null || _b === void 0 ? void 0 : _b.length) {
message.success('获取成功');
this.defaultDataSource = res.data;
}
else {
if (!(res === null || res === void 0 ? void 0 : res.data))
return [2 /*return*/, message.warn('无对应数据源,请检查')];
if (!((_c = res === null || res === void 0 ? void 0 : res.data) === null || _c === void 0 ? void 0 : _c.length))
return [2 /*return*/, message.warn('数据源无数据')];
}
return [3 /*break*/, 4];
case 3:
error_2 = _h.sent();
message.destroy();
message.success('请求数据源失败,请检查接口');
return [2 /*return*/];
case 4:
// 设置一下过滤和更新语句
(_d = this.showColumns) === null || _d === void 0 ? void 0 : _d.map(function (_) {
var _a, _b;
_.width = ((_a = _this.staticColumnsKey.find(function (col) { return col.key == _.name; })) === null || _a === void 0 ? void 0 : _a.width) || 120;
_.type = _.type || ((_b = _this.staticColumnsKey.find(function (col) { return col.key == _.name; })) === null || _b === void 0 ? void 0 : _b.type);
// 更新字段
if (_.calculatedExpr)
_this.updateQueryMap[_.name || ''] = _.calculatedExpr;
});
// 如果有数据源
if (this.defaultDataSource) {
// 是数组设置
if (Array.isArray(this.defaultDataSource)) {
this.setStaticList(this.defaultDataSource);
}
else
return [2 /*return*/, message.warn('数据源非数组,请配置人员检查')];
}
// if (this.workMode === RFIDActionEnum.INVENTORY) {
// return this.dealScanCodeList({},[{EPC:"82663210a0700000022","SCORE":86,SHELF}])
// }
// this.setState({ modalVisable: true }); return
switch (this.workMode) {
// 盘存 找货 货架盘存全部先开启弹窗
case RFIDActionEnum.SCAN:
case RFIDActionEnum.SEARCH:
case RFIDActionEnum.INVENTORY:
this.workParam = (0, tpl_builtin_1.dataMapping)((_e = this.props.rfidParam) === null || _e === void 0 ? void 0 : _e.param, this.props.data) || {};
if (!((_f = this.workParam) === null || _f === void 0 ? void 0 : _f.shelf) && this.workMode === RFIDActionEnum.SEARCH && !this.workParam.epcList && !this.workParam.sku)
return [2 /*return*/, message.warn('请传入epcList或者sku进行找货')];
if (typeof this.workParam.epcList === 'string') {
// 字符串转数组 直接做方便点
this.workParam.epcList = [this.workParam.epcList];
}
// 如果param没有货号 并且是盘点模式 每次进去都要扫码
if (!((_g = this.workParam) === null || _g === void 0 ? void 0 : _g.shelf) && this.workMode === RFIDActionEnum.INVENTORY) {
actionAfterScan_1 = function (_shelf) {
if (!_shelf) {
_this.setState({ modalVisable: false });
return message.warn('未获取到货架号');
}
// 设进param
_this.workParam.shelf = _shelf;
_this.setState({ currentShelf: _shelf }, function () {
// 货架盘存需要特殊继续
// 改为ui渲染完毕以后再进行扫码
_this.acceptRfid();
});
};
this.setState({ modalVisable: true }, function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
var shelf;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0:
this.nextAction = actionAfterScan_1;
return [4 /*yield*/, this.getshelf(60)];
case 1:
shelf = _a.sent();
actionAfterScan_1(shelf);
return [2 /*return*/];
}
});
}); });
return [2 /*return*/];
}
requestAnimationFrame(function () {
// 改为ui渲染完毕以后再进行扫码
_this.acceptRfid();
});
break;
case RFIDActionEnum.PORT: // 报废
this.dealScanCodeList(e);
break;
case RFIDActionEnum.SCANSINGLEBLANKTAG: // 白标扫码
RfidUtil_1.windowRFIDTriger.onRfidAct = true;
this.setState({ onScan: true }, function () {
var res = shell_1.Shell.UHFScanSingleBlankTag(_this.workParam || {}, function (res) {
RfidUtil_1.windowRFIDTriger.onRfidAct = false;
_this.setState({ onScan: false });
message.destroy();
// console.log('res', JSON.stringify(res))
_this.handleSingleBlankTag(res);
});
if (res) {
// 2s以后保证停止扫描
setTimeout(function () {
RfidUtil_1.windowRFIDTriger.onRfidAct = false;
}, 2 * 1000);
message.loading('扫描白标中', 10 * 1000);
}
else {
RfidUtil_1.windowRFIDTriger.onRfidAct = false;
_this.setState({ onScan: false });
}
});
// this.handleSingleBlankTag({ data: { epc: 'E28011B0A502006B582AD094' } })
break;
case RFIDActionEnum.WRITETAG: // 写入
RfidUtil_1.windowRFIDTriger.onRfidAct = true;
if (this.workParam.tagEpc && this.workParam.writeEpc)
this.setState({ onScan: true }, function () {
var res = shell_1.Shell.UHFWriteTag(_this.workParam, function (res) {
var _a, _b;
RfidUtil_1.windowRFIDTriger.onRfidAct = false;
_this.setState({ onScan: false });
message.destroy();
if (((_a = res === null || res === void 0 ? void 0 : res.data) === null || _a === void 0 ? void 0 : _a.epc1) && ((_b = res === null || res === void 0 ? void 0 : res.data) === null || _b === void 0 ? void 0 : _b.epc2)) {
message.success('写入成功');
_this.dealScanCodeList({});
}
else {
message.warn(res.msg || "EPC:".concat(_this.workParam.tagEpc, ",\u5199\u5165\u5931\u8D25"));
}
});
if (res) {
// 10s以后保证停止扫描
setTimeout(function () {
RfidUtil_1.windowRFIDTriger.onRfidAct = false;
}, 10 * 1000);
message.loading('白标写入中', 10 * 1000);
}
else {
RfidUtil_1.windowRFIDTriger.onRfidAct = false;
_this.setState({ onScan: false });
}
});
else {
return [2 /*return*/, message.warn("\u7F3A\u5C11".concat(!this.workParam.tagEpc ? '目标EPC' : '', " ").concat(!this.workParam.writeEpc ? '待写入EPC' : '', ",\u8BF7\u68C0\u67E5"))];
}
break;
default:
message.warn('未适配的cmd');
break;
}
// 添加enter键提交form的监听
this.submitTrigger && this.regeditEnterCodeEvent(true);
return [2 /*return*/];
}
});
}); };
// 手动提交form
_this.manualSubmit = function () {
_this.closeScanDilaog({}, true);
};
// 模拟手动点击触发提交
_this.manualCountDownSubmit = function () {
console.log(1111);
_this.manualSubmit();
};
_this.formRef = function (ref) {
var MutationObserver = window.MutationObserver;
if (_this.mutationObserver)
_this.mutationObserver.disconnect();
_this.mutationObserver = new MutationObserver(function (e) {
var formHigh = ref.getBoundingClientRect().height;
if (formHigh !== _this.state.formHigh)
_this.setState({ formHigh: ref.getBoundingClientRect().height });
});
// 先关闭之前的
_this.mutationObserver.disconnect();
if (ref) {
_this.setState({ formHigh: ref.getBoundingClientRect().height });
_this.mutationObserver.observe(ref, {
attributes: true,
childList: true,
subtree: true
});
}
};
// 扫描货架并继续 目前只有盘点有这个功能
_this.scanShelfAndResume = function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
var _a, actionAfterScan_2, shelf_1;
var _this = this;
return tslib_1.__generator(this, function (_b) {
switch (_b.label) {
case 0:
// 如果已经开始了或者在扫码中 返回 防止重复触发
if (this.state.onInfrared || this.state.onScan) {
return [2 /*return*/];
}
_a = this.workMode;
switch (_a) {
case RFIDActionEnum.INVENTORY: return [3 /*break*/, 1];
}
return [3 /*break*/, 3];
case 1:
actionAfterScan_2 = function (_shelf) {
// 成功了才反转注册
RfidUtil_1.windowRFIDTriger.removeEventListener(RfidUtil_1.RFIDTrigeerCodeEnum.TRIGGERHOLD, _this.resumeScan);
RfidUtil_1.windowRFIDTriger.addEventListener(RfidUtil_1.RFIDTrigeerCodeEnum.TRIGGERHOLD, _this.pauseScan);
_this.setState({ currentShelf: _shelf }, function () {
// 货架盘存需要特殊继续
_this.rfidWorkModeMap[_this.workMode].resume(_shelf);
});
};
this.nextAction = actionAfterScan_2;
return [4 /*yield*/, this.getshelf(60)];
case 2:
shelf_1 = _b.sent();
// console.log('shelf', shelf)
if (shelf_1) {