UNPKG

fastlion-amis

Version:

一种MIS页面生成工具

892 lines (891 loc) 84.1 kB
"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) {