Browse Source

UI, pop up window update

master
kelvin.yau 2 months ago
parent
commit
1c8b3c30b0
6 changed files with 75 additions and 25 deletions
  1. +1
    -1
      src/components/DashboardPage/DashboardPage.tsx
  2. +3
    -3
      src/components/DoSearch/DoSearch.tsx
  3. +53
    -15
      src/components/FinishedGoodSearch/FinishedGoodSearch.tsx
  4. +1
    -1
      src/components/Jodetail/completeJobOrderRecord.tsx
  5. +4
    -0
      src/i18n/zh/dashboard.json
  6. +13
    -5
      src/i18n/zh/pickOrder.json

+ 1
- 1
src/components/DashboardPage/DashboardPage.tsx View File

@@ -58,7 +58,7 @@ const DashboardPage: React.FC<Props> = ({
<Grid item xs={12}> <Grid item xs={12}>
<CollapsibleCard title={t("Progress chart")}> <CollapsibleCard title={t("Progress chart")}>
<CardContent> <CardContent>
<Grid container spacing={2}>
<Grid container spacing={3}>
<Grid item xs={12} md={4}> <Grid item xs={12} md={4}>
<DashboardProgressChart /> <DashboardProgressChart />
</Grid> </Grid>


+ 3
- 3
src/components/DoSearch/DoSearch.tsx View File

@@ -393,15 +393,15 @@ if(orderStartDate != ""){


const result = await Swal.fire( const result = await Swal.fire(
{ {
icon: "info",
icon: "question",
title: t("Batch Release"), title: t("Batch Release"),
html: t("Selected Shop(s): ") + extractedIdsCount.toString() + `</p>`+ html: t("Selected Shop(s): ") + extractedIdsCount.toString() + `</p>`+
t("Selected Item(s): ") + extractedItemsCount.toString() + `</p>`, t("Selected Item(s): ") + extractedItemsCount.toString() + `</p>`,
showCancelButton: true, showCancelButton: true,
confirmButtonText: t("Confirm"), confirmButtonText: t("Confirm"),
cancelButtonText: t("Cancel"), cancelButtonText: t("Cancel"),
confirmButtonColor: "#638a01",
cancelButtonColor: "#d33"
confirmButtonColor: "#8dba00",
cancelButtonColor: "#F04438"
}); });
if (result.isConfirmed) { if (result.isConfirmed) {
Swal.fire({ Swal.fire({


+ 53
- 15
src/components/FinishedGoodSearch/FinishedGoodSearch.tsx View File

@@ -69,7 +69,6 @@ const PickOrderSearch: React.FC<Props> = ({ pickOrders }) => {
const fetchReleasedOrderCount = useCallback(async () => { const fetchReleasedOrderCount = useCallback(async () => {
try { try {
const releasedOrders = await fetchReleasedDoPickOrders(); const releasedOrders = await fetchReleasedDoPickOrders();
// Count only orders that have a valid doOrderId
const validCount = releasedOrders.filter(order => order.doOrderId).length; const validCount = releasedOrders.filter(order => order.doOrderId).length;
setReleasedOrderCount(validCount); setReleasedOrderCount(validCount);
} catch (error) { } catch (error) {
@@ -105,7 +104,7 @@ const PickOrderSearch: React.FC<Props> = ({ pickOrders }) => {
if(response.success){ if(response.success){
Swal.fire({ Swal.fire({
position: "bottom-end", position: "bottom-end",
icon: "info",
icon: "success",
text: t("Printed Successfully."), text: t("Printed Successfully."),
showConfirmButton: false, showConfirmButton: false,
timer: 1500 timer: 1500
@@ -130,21 +129,30 @@ const PickOrderSearch: React.FC<Props> = ({ pickOrders }) => {
console.log("Found released orders:", releasedOrders); console.log("Found released orders:", releasedOrders);


const confirmResult = await Swal.fire({ const confirmResult = await Swal.fire({
title: t("Confirm Print"),
text: t(`Do you want to print ${releasedOrders.length} draft(s)?`),
title: t("Batch Print"),
text: t("Confirm print: (") + releasedOrders.length.toString() + t("piece(s))"),
icon: "question", icon: "question",
showCancelButton: true, showCancelButton: true,
confirmButtonText: t("Yes, print"),
confirmButtonText: t("Confirm"),
cancelButtonText: t("Cancel"), cancelButtonText: t("Cancel"),
confirmButtonColor: "#3085d6",
cancelButtonColor: "#d33"
confirmButtonColor: "#8dba00",
cancelButtonColor: "#F04438"
}); });


// If user cancels, exit the function
if (!confirmResult.isConfirmed) { if (!confirmResult.isConfirmed) {
return; return;
} }


Swal.fire({
title: t("Printing..."),
text: t("Please wait..."),
allowOutsideClick: false,
allowEscapeKey: false,
didOpen: () => {
Swal.showLoading();
}
});

for (const order of releasedOrders) { for (const order of releasedOrders) {
const { doOrderId, pickOrderId } = order; const { doOrderId, pickOrderId } = order;


@@ -170,7 +178,7 @@ const PickOrderSearch: React.FC<Props> = ({ pickOrders }) => {
Swal.fire({ Swal.fire({
position: "bottom-end", position: "bottom-end",
icon: "success", icon: "success",
text: t(`Printed ${releasedOrders.length} draft(s) successfully.`),
text: t("Printed Successfully."),
showConfirmButton: false, showConfirmButton: false,
timer: 1500 timer: 1500
}); });
@@ -183,6 +191,7 @@ const PickOrderSearch: React.FC<Props> = ({ pickOrders }) => {
const handleDN = useCallback(async () =>{ const handleDN = useCallback(async () =>{
const askNumofCarton = await Swal.fire({ const askNumofCarton = await Swal.fire({
title: t("Enter the number of cartons: "), title: t("Enter the number of cartons: "),
icon: "info",
input: "number", input: "number",
inputPlaceholder: t("Number of cartons"), inputPlaceholder: t("Number of cartons"),
inputAttributes:{ inputAttributes:{
@@ -201,6 +210,8 @@ const PickOrderSearch: React.FC<Props> = ({ pickOrders }) => {
showCancelButton: true, showCancelButton: true,
confirmButtonText: t("Confirm"), confirmButtonText: t("Confirm"),
cancelButtonText: t("Cancel"), cancelButtonText: t("Cancel"),
confirmButtonColor: "#8dba00",
cancelButtonColor: "#F04438",
showLoaderOnConfirm: true, showLoaderOnConfirm: true,
allowOutsideClick: () => !Swal.isLoading() allowOutsideClick: () => !Swal.isLoading()
}); });
@@ -233,7 +244,7 @@ const PickOrderSearch: React.FC<Props> = ({ pickOrders }) => {
if(response.success){ if(response.success){
Swal.fire({ Swal.fire({
position: "bottom-end", position: "bottom-end",
icon: "info",
icon: "success",
text: t("Printed Successfully."), text: t("Printed Successfully."),
showConfirmButton: false, showConfirmButton: false,
timer: 1500 timer: 1500
@@ -250,6 +261,7 @@ const PickOrderSearch: React.FC<Props> = ({ pickOrders }) => {
const handleDNandLabel = useCallback(async () =>{ const handleDNandLabel = useCallback(async () =>{
const askNumofCarton = await Swal.fire({ const askNumofCarton = await Swal.fire({
title: t("Enter the number of cartons: "), title: t("Enter the number of cartons: "),
icon: "info",
input: "number", input: "number",
inputPlaceholder: t("Number of cartons"), inputPlaceholder: t("Number of cartons"),
inputAttributes:{ inputAttributes:{
@@ -268,6 +280,8 @@ const PickOrderSearch: React.FC<Props> = ({ pickOrders }) => {
showCancelButton: true, showCancelButton: true,
confirmButtonText: t("Confirm"), confirmButtonText: t("Confirm"),
cancelButtonText: t("Cancel"), cancelButtonText: t("Cancel"),
confirmButtonColor: "#8dba00",
cancelButtonColor: "#F04438",
showLoaderOnConfirm: true, showLoaderOnConfirm: true,
allowOutsideClick: () => !Swal.isLoading() allowOutsideClick: () => !Swal.isLoading()
}); });
@@ -310,7 +324,7 @@ const PickOrderSearch: React.FC<Props> = ({ pickOrders }) => {
if(LabelsResponse.success && DNResponse.success){ if(LabelsResponse.success && DNResponse.success){
Swal.fire({ Swal.fire({
position: "bottom-end", position: "bottom-end",
icon: "info",
icon: "success",
text: t("Printed Successfully."), text: t("Printed Successfully."),
showConfirmButton: false, showConfirmButton: false,
timer: 1500 timer: 1500
@@ -332,6 +346,7 @@ const PickOrderSearch: React.FC<Props> = ({ pickOrders }) => {
const handleLabel = useCallback(async () =>{ const handleLabel = useCallback(async () =>{
const askNumofCarton = await Swal.fire({ const askNumofCarton = await Swal.fire({
title: t("Enter the number of cartons: "), title: t("Enter the number of cartons: "),
icon: "info",
input: "number", input: "number",
inputPlaceholder: t("Number of cartons"), inputPlaceholder: t("Number of cartons"),
inputAttributes:{ inputAttributes:{
@@ -350,6 +365,8 @@ const PickOrderSearch: React.FC<Props> = ({ pickOrders }) => {
showCancelButton: true, showCancelButton: true,
confirmButtonText: t("Confirm"), confirmButtonText: t("Confirm"),
cancelButtonText: t("Cancel"), cancelButtonText: t("Cancel"),
confirmButtonColor: "#8dba00",
cancelButtonColor: "#F04438",
showLoaderOnConfirm: true, showLoaderOnConfirm: true,
allowOutsideClick: () => !Swal.isLoading() allowOutsideClick: () => !Swal.isLoading()
}); });
@@ -380,7 +397,7 @@ const PickOrderSearch: React.FC<Props> = ({ pickOrders }) => {
if(response.success){ if(response.success){
Swal.fire({ Swal.fire({
position: "bottom-end", position: "bottom-end",
icon: "info",
icon: "success",
text: t("Printed Successfully."), text: t("Printed Successfully."),
showConfirmButton: false, showConfirmButton: false,
timer: 1500 timer: 1500
@@ -454,19 +471,40 @@ const PickOrderSearch: React.FC<Props> = ({ pickOrders }) => {
window.dispatchEvent(new CustomEvent('pickOrderAssigned')); window.dispatchEvent(new CustomEvent('pickOrderAssigned'));
} else if (res.code === "USER_BUSY") { } else if (res.code === "USER_BUSY") {
console.warn("⚠️ User already has pick orders in progress:", res.message); console.warn("⚠️ User already has pick orders in progress:", res.message);
Swal.fire({
icon: "warning",
title: t("Warning"),
text: t("You already have a pick order in progess. Please complete it first before taking next pick order."),
confirmButtonText: t("Confirm"),
confirmButtonColor: "#8dba00"
});
// ✅ Show warning but still refresh to show existing orders // ✅ Show warning but still refresh to show existing orders
alert(`Warning: ${res.message}`);
//alert(`Warning: ${res.message}`);
window.dispatchEvent(new CustomEvent('pickOrderAssigned')); window.dispatchEvent(new CustomEvent('pickOrderAssigned'));
} else if (res.code === "NO_ORDERS") { } else if (res.code === "NO_ORDERS") {
console.log("ℹ️ No available pick orders for store", storeId); console.log("ℹ️ No available pick orders for store", storeId);
alert(`Info: ${res.message}`);
Swal.fire({
icon: "info",
title: t("Info"),
text: t("No available pick order(s) for this floor."),
confirmButtonText: t("Confirm"),
confirmButtonColor: "#8dba00"
});
//alert(`Info: ${res.message}`);
} else { } else {
console.log("ℹ️ Assignment result:", res.message); console.log("ℹ️ Assignment result:", res.message);
alert(`Info: ${res.message}`); alert(`Info: ${res.message}`);
} }
} catch (error) { } catch (error) {
console.error("❌ Error assigning by store:", error); console.error("❌ Error assigning by store:", error);
alert("Error occurred during assignment");
Swal.fire({
icon: "error",
title: t("Error"),
text: t("Error occurred during assignment."),
confirmButtonText: t("Confirm"),
confirmButtonColor: "#8dba00"
});
//alert("Error occurred during assignment");
} finally { } finally {
setIsAssigning(false); setIsAssigning(false);
} }


+ 1
- 1
src/components/Jodetail/completeJobOrderRecord.tsx View File

@@ -321,7 +321,7 @@ const CompleteJobOrderRecord: React.FC<Props> = ({ filterArgs }) => {
if(response.success){ if(response.success){
Swal.fire({ Swal.fire({
position: "bottom-end", position: "bottom-end",
icon: "info",
icon: "success",
text: t("Printed Successfully."), text: t("Printed Successfully."),
showConfirmButton: false, showConfirmButton: false,
timer: 1500 timer: 1500


+ 4
- 0
src/i18n/zh/dashboard.json View File

@@ -56,5 +56,9 @@
"No": "無", "No": "無",
"Responsible Escalation List": "負責的上報列表", "Responsible Escalation List": "負責的上報列表",
"show completed logs": "顯示已完成上報", "show completed logs": "顯示已完成上報",
<<<<<<< Updated upstream
"Rows per page": "每頁行數" "Rows per page": "每頁行數"
=======
"Rows per page": "每頁行數"
>>>>>>> Stashed changes
} }

+ 13
- 5
src/i18n/zh/pickOrder.json View File

@@ -257,7 +257,7 @@
"Pick Execution Detail":"進行提料詳情", "Pick Execution Detail":"進行提料詳情",
"Submit Required Pick Qty":"提交所需提料數量", "Submit Required Pick Qty":"提交所需提料數量",
"Scan Result":"掃描結果", "Scan Result":"掃描結果",
"Ticket No.":"提號碼",
"Ticket No.":"提號碼",
"Start QR Scan":"開始QR掃描", "Start QR Scan":"開始QR掃描",
"Stop QR Scan":"停止QR掃描", "Stop QR Scan":"停止QR掃描",
"Scanning...":"掃描中...", "Scanning...":"掃描中...",
@@ -367,9 +367,17 @@
"Enter missing quantity (required if no bad items)": "請輸入缺少數量(如果沒有不良項目)", "Enter missing quantity (required if no bad items)": "請輸入缺少數量(如果沒有不良項目)",
"Submit All Scanned": "提交所有已掃描項目", "Submit All Scanned": "提交所有已掃描項目",
"Submitting...": "提交中...", "Submitting...": "提交中...",
"COMPLETED": "已完成"

"COMPLETED": "已完成",
"Confirm print: (": "確認列印全部草稿?(總數量:",
"piece(s))": "份)",
"Printing...": "列印中",
"Please wait...": "請稍後",
"No available pick order(s) for this floor.": "此樓層沒有可用的提料單",
"You already have a pick order in progess. Please complete it first before taking next pick order.": "請先完成目前的提料單,再提取下一張",
"Error occurred during assignment.": "提料單分配錯誤",
"Info": "消息",
"Warning": "警告",
"Error": "錯誤",
"Batch Print": "批量列印"


} }

Loading…
Cancel
Save