Browse Source

update

master
CANCERYS\kw093 1 month ago
parent
commit
df4d4077dd
2 changed files with 58 additions and 36 deletions
  1. +1
    -30
      src/components/FinishedGoodSearch/GoodPickExecutiondetail.tsx
  2. +57
    -6
      src/components/ProductionProcess/OperatorScanner.tsx

+ 1
- 30
src/components/FinishedGoodSearch/GoodPickExecutiondetail.tsx View File

@@ -1584,36 +1584,7 @@ const handleSubmitPickQtyWithQty = useCallback(async (lot: any, submitQty: numbe
<FormProvider {...formProps}>
<Stack spacing={2}>
{/* DO Header */}
{fgPickOrdersLoading ? (
<Box sx={{ display: 'flex', justifyContent: 'center', p: 2 }}>
<CircularProgress size={20} />
</Box>
) : (
fgPickOrders.length > 0 && (
<Paper sx={{ p: 2 }}>
<Stack spacing={2}>
{/* 基本信息 */}
<Stack direction="row" spacing={4} useFlexGap flexWrap="wrap">
<Typography variant="subtitle1">
<strong>{t("Shop Name")}:</strong> {fgPickOrders[0].shopName || '-'}
</Typography>
<Typography variant="subtitle1">
<strong>{t("Store ID")}:</strong> {fgPickOrders[0].storeId || '-'}
</Typography>
<Typography variant="subtitle1">
<strong>{t("Ticket No.")}:</strong> {fgPickOrders[0].ticketNo || '-'}
</Typography>
<Typography variant="subtitle1">
<strong>{t("Departure Time")}:</strong> {fgPickOrders[0].DepartureTime || '-'}
</Typography>
</Stack>


</Stack>
</Paper>
)
)}



+ 57
- 6
src/components/ProductionProcess/OperatorScanner.tsx View File

@@ -13,6 +13,9 @@ import {
import CloseIcon from "@mui/icons-material/Close";
import { isOperatorExist } from "@/app/api/jo/actions";
import { OperatorQrCode } from "./types";
// ✅ 新增:导入 user API
import { fetchUserDetails } from "@/app/api/user/actions";
import { fetchNameList } from "@/app/api/user/actions";

interface OperatorScannerProps {
operators: Operator[];
@@ -27,19 +30,20 @@ const OperatorScanner: React.FC<OperatorScannerProps> = ({
operators,
onOperatorsChange,
error,
isActive=false,
isActive = false,
onActivate,
onDeactivate,
}) => {
const [scanningMode, setScanningMode] = useState<boolean>(false);
const [scanError, setScanError] = useState<string | null>(null);
const operatorScanRef = useRef<HTMLInputElement>(null);

useEffect(() => {
if (!isActive && scanningMode) {

stopScanning();
}
}, [isActive]);

const startScanning = (): void => {
setScanningMode(true);
setScanError(null);
@@ -67,6 +71,54 @@ const OperatorScanner: React.FC<OperatorScannerProps> = ({
console.log("Raw input:", usernameInput);
try {
// ✅ 检查是否是测试快捷格式 {2fitest<id>}
const testMatch = usernameInput.match(/\{2fitest(\d+)\??}?/i);
if (testMatch && testMatch[1]) {
const userId = parseInt(testMatch[1]);
console.log(`🧪 Test mode: Fetching user with ID ${userId} from API`);
try {
// ✅ 方案 1:使用 fetchNameList 获取所有用户,然后找到对应 ID
const nameList = await fetchNameList();
const matchedUser = nameList.find(user => user.id === userId);
if (matchedUser) {
// ✅ 将 NameList 转换为 Operator 格式
const operator: Operator = {
id: matchedUser.id,
name: matchedUser.name,
username: `user${matchedUser.id}`, // 生成一个 username
};
const isAlreadyAdded = operators.some(
(op) => op.id === operator.id,
);
if (!isAlreadyAdded) {
onOperatorsChange([...operators, operator]);
}
target.value = "";
setScanError(null);
console.log(`✅ Added operator from API:`, operator);
return;
} else {
setScanError(
`User with ID ${userId} not found. Please check the ID and try again.`
);
target.value = "";
return;
}
} catch (apiError) {
console.error("Error fetching user by ID:", apiError);
setScanError(
"Failed to fetch user data. Please try again."
);
target.value = "";
return;
}
}
let username: string;
// ✅ 尝试解析 JSON
@@ -163,7 +215,6 @@ const OperatorScanner: React.FC<OperatorScannerProps> = ({
variant="outlined"
size="small"
sx={{ bgcolor: "white" }}
onInput={handleOperatorScan}
/>
<Button variant="contained" color="inherit" onClick={stopScanning}>
Cancel
@@ -176,7 +227,7 @@ const OperatorScanner: React.FC<OperatorScannerProps> = ({
) : (
<Typography variant="body2" color="success.main" mt={1}>
Position the ID card scanner and scan, or type the employee ID
manually
manually. Test format: {"{2fitest<id>"} (e.g., {"{2fitest1}"})
</Typography>
)}
</Paper>
@@ -207,7 +258,7 @@ const OperatorScanner: React.FC<OperatorScannerProps> = ({
{operator.name}
</Typography>
<Typography variant="body2" color="primary.main">
{operator.username}
ID: {operator.id} | Username: {operator.username}
</Typography>
</Box>
<IconButton
@@ -241,4 +292,4 @@ const OperatorScanner: React.FC<OperatorScannerProps> = ({
);
};

export default OperatorScanner;
export default OperatorScanner;

Loading…
Cancel
Save