fastlion-amis
Version:
一种MIS页面生成工具
183 lines (171 loc) • 6.95 kB
text/typescript
import { SchemaCollection } from ".."
import { expressLabels, IExpress } from "../renderers/Lion/ExpressPrint/ExpressPrint"
import { Api } from "../types"
import { Shell } from "./shell"
import MSG from '../renderers/Lion/utils/msgsub';
import { message } from "antd";
import { switchCase } from "@babel/types";
import { isMobile } from "./helper";
import { getModifyResult } from "./RfidUtil";
interface ScanAfterLabelPrint {
labelData: any[]
labelTemplate: any
labelPrinter: string
}
interface FrontPort {
afterApi: Api
bodyList: { EPC: string }[]
EPC: string
portId: 'rfid-in-stock' | 'rfid-sold' | 'rfid-scrap' | 'rfid-been-dispatched'
}
interface ScanAfterPort {
afterApi?: Api
body: IExpress
}
interface ScanAfterShow {
showType: 0 | 1 | 2 | 10 | 11 | 12
showMsg: string
afterApi?: Api
}
interface ScanAfterVars {
afterApi: Api
body: SchemaCollection
data: object
}
export interface ScanAfterDo {
cmd: 'STEP_PRINT_LABEL' | 'STEP_PORT' | 'STEP_SHOW' | 'STEP_VARS' | 'STEP_FRONT_PORT'
body: ScanAfterLabelPrint | ScanAfterPort | ScanAfterShow | ScanAfterVars | FrontPort
}
// rfid keystep功能port enum
enum RFIDPortIdEnum {
RFIDINSTOCK = 'rfid-in-stock', // 在库
RFIDSOLD = 'rfid-sold', // 已售
RFIDSCRAP = 'rfid-scrap', // 废弃
RFIDBEENDISPATCHED = 'rfid-been-dispatched', // 调出
RFIDEPCOVERWRITE = 'rfid-epc-overwrite' // 覆写
}
// keyStep脚本函数 专门处理keyStep脚本,识别到有通用化的趋势,故此抽出
// 第一个是执行剩下的按钮用的
export const KeyStepCommonFunction = async (scanAfterDo: ScanAfterDo[], data: any, env: any, props: any, errorHandle?: (restScanDo: ScanAfterDo[], data: any, env: any, errorData: any) => any) => {
for (const key in scanAfterDo) {
if (Object.prototype.hasOwnProperty.call(scanAfterDo, key)) {
const element = scanAfterDo[key];
const cmd = element.cmd
let outFlag = false // 中断标识
let payload // 返回集中存放
let errorData = undefined // 错误数据 用于判断
switch (cmd) {
case "STEP_FRONT_PORT": {
const body = element.body as FrontPort
const bodyList = body.bodyList // 获取需要设置的请求体
const portId = body.portId // 获取需要设置的请求体
{
// portId对应的状态码
const statusMap = isMobile() ? {
[RFIDPortIdEnum.RFIDINSTOCK]: 0x00, // 在库
[RFIDPortIdEnum.RFIDSOLD]: 0x10, // 已销售
[RFIDPortIdEnum.RFIDBEENDISPATCHED]: 0x20, // 已调出
[RFIDPortIdEnum.RFIDSCRAP]: 0x30, // 已废弃
} : {
[RFIDPortIdEnum.RFIDINSTOCK]: '0', // 在库
[RFIDPortIdEnum.RFIDSOLD]: '1', // 已销售
[RFIDPortIdEnum.RFIDBEENDISPATCHED]: '2', // 已调出
[RFIDPortIdEnum.RFIDSCRAP]: '3', // 已废弃
} // pc端的比较简单 直接写入就行
const epcList = bodyList.filter(_ => _.EPC).map(_ => _.EPC)
// const epcList = ['38739204B0100000001']
// 固定取bodyList里面的东西 方便处理
switch (portId as RFIDPortIdEnum) {
case RFIDPortIdEnum.RFIDINSTOCK:
case RFIDPortIdEnum.RFIDSOLD:
case RFIDPortIdEnum.RFIDSCRAP:
case RFIDPortIdEnum.RFIDBEENDISPATCHED:
if (epcList.length) {
message.loading('写入中')
const res: any = await getModifyResult(epcList, statusMap[portId])
message.destroy()
console.log('结果', JSON.stringify(res))
const failList = res?.data?.failList
if (failList.length) {
outFlag = true
errorData = failList
// 调整下一次要处理的列表
body.bodyList = failList.map((_: string) => ({ EPC: _ }))
message.warn(`写入失败epc码,${failList.join(',')}`)
} else {
message.success(`写入成功`)
if (body.afterApi)
payload = await env.fetcher(body.afterApi, data)
}
} else {
message.warn('需要设置的EPC码为空')
}
break;
case RFIDPortIdEnum.RFIDEPCOVERWRITE:
// 约定获取第一条的epc写入 到时候要加个提示
Shell.UHFWrite(bodyList[0].EPC, (res: any) => {
if (res.code == -200) {
message.warn(res.detail || '写入失败 ')
} else {
message.success(`写入成功`)
}
console.log(JSON.stringify(res), '写入结果')
})
break;
default:
message.warn('未指定的portId')
break;
}
}
break;
}
case 'STEP_PORT':
const portBody = element.body as ScanAfterPort
await expressLabels(portBody?.body, env.fetcher, props.translate, props.showModal === 1)
if (portBody.afterApi) {
payload = await env.fetcher(portBody.afterApi, data)
}
break
case 'STEP_SHOW':
const body = element.body as ScanAfterShow
const { showMsg, showType, afterApi } = body
if (showType == 0 || showType == 10) {
if (showType == 10) Shell.readVoice(showMsg)
MSG._info(showMsg)
if (afterApi) {
payload = await env.fetcher(afterApi, data)
}
} else if (showType == 1 || showType == 11) {
if (showType == 11) Shell.readVoice(showMsg)
const confirm = await env.confirm(showMsg)
if (confirm && afterApi) {
payload = await env.fetcher(afterApi, data)
}
} else if (showType == 2 || showType == 12) {
if (showType == 12) Shell.readVoice(showMsg)
env.confirm(showMsg, undefined, undefined, false)
}
break
case 'STEP_VARS':
const varsBody = element.body as ScanAfterVars
const formData = await env.prompt(varsBody.body, varsBody.data)
if (formData !== false && varsBody.afterApi) {
payload = await env.fetcher(varsBody.afterApi, { ...formData, ...data })
}
break
default:
break
}
if (outFlag) {
errorHandle?.(scanAfterDo.slice(+key), data, env, errorData)
break;
}
if (payload)
if (payload?.ok && payload?.status == 20003) {
await KeyStepCommonFunction(payload.data.scanAfterDo, data, env, props, errorHandle)
} else {
payload.msg && message.warn(payload.msg)
}
}
}
}