From 713024ccb5056e76bcfc9389664981da68a5139f Mon Sep 17 00:00:00 2001
From: curtis <curtis@i-mps.com>
Date: 星期一, 30 三月 2026 14:08:01 +0800
Subject: [PATCH] feat: dfm to web
---
uiOutput/ErrList/ErrList.ts | 338 +++++++++++++------------------------------------------
1 files changed, 83 insertions(+), 255 deletions(-)
diff --git a/uiOutput/ErrList/ErrList.ts b/uiOutput/ErrList/ErrList.ts
index 1a2614e..ffe68ac 100644
--- a/uiOutput/ErrList/ErrList.ts
+++ b/uiOutput/ErrList/ErrList.ts
@@ -1,189 +1,89 @@
-import { ref, onMounted, onUnmounted } from 'vue';
+import { ref, onMounted, computed } from 'vue';
-// Interfaces mapping from Delphi structures
-interface TPoint {
- X: number;
- Y: number;
-}
-
-interface TErrListItem {
- content: string;
+interface ErrItem {
+ reason: string;
index: string;
}
export function useErrListLogic() {
- // State from Delphi variables
- const errListItems = ref<TErrListItem[]>([
- // Mock data for display
- { content: '測試錯誤原因1', index: 'Item_1' },
- { content: '測試錯誤原因2', index: 'Item_2' }
- ]);
- const selectedItemIndex = ref<number>(-1);
+ // --- State Mapped from Delphi UI Components ---
+
+ const errorItems = ref<ErrItem[]>([]);
+ const selectedIndex = ref<number>(-1);
+
+ const primaryImage = ref<string>('');
+ const relatedImage = ref<string>('');
+
+ const siteIdx = ref<number>(1);
+ const siteCount = ref<number>(0);
+ const relaSiteIdx = ref<number>(1);
+ const relaSiteCount = ref<number>(0);
+
const isDeleteEnabled = ref<boolean>(false);
-
- const siteIndex = ref<number>(0);
- const siteTotal = ref<number>(0);
- const isSitePreEnabled = ref<boolean>(false);
- const isSiteNextEnabled = ref<boolean>(false);
- const SiteList = ref<string[]>([]); // TStringlist
-
- const relaSiteIndex = ref<number>(0);
- const relaSiteTotal = ref<number>(0);
- const isRelaPreEnabled = ref<boolean>(false);
- const isRelaNextEnabled = ref<boolean>(false);
- const RelaSiteList = ref<string[]>([]); // TStringlist
-
- const showPanel6 = ref<boolean>(true); // Splitter visibility for related images
- const showNoteBtn = ref<boolean>(false);
- const showRejectBtn = ref<boolean>(false);
-
- const Ingnore = ref<boolean>(false);
- const NowIndex = ref<string>('');
-
- const iniPath = ref<string>(''); // Should be injected or configured
- const MyHotkeyid1 = ref<number>(0);
-
- // Point structures
- const UpLPoint = ref<TPoint>({ X: 0, Y: 0 });
- const UpRPoint = ref<TPoint>({ X: 0, Y: 0 });
- const DownLPoint = ref<TPoint>({ X: 0, Y: 0 });
- const DownRPoint = ref<TPoint>({ X: 0, Y: 0 });
+ const isImmediateEnabled = ref<boolean>(false);
- const UpLPoint_Rela = ref<TPoint>({ X: 0, Y: 0 });
- const UpRPoint_Rela = ref<TPoint>({ X: 0, Y: 0 });
- const DownLPoint_Rela = ref<TPoint>({ X: 0, Y: 0 });
- const DownRPoint_Rela = ref<TPoint>({ X: 0, Y: 0 });
+ // --- Methods ---
- // Hotkey simulation mapped from WMHotKey
- const WMHotKey = (e: KeyboardEvent) => {
- if (e.ctrlKey && e.key.toLowerCase() === 'd' && isDeleteEnabled.value) {
- e.preventDefault();
- DeleteBtClick();
+ const FormCreate = () => {
+ console.log('ErrlistForm created');
+ // Mock initialization
+ errorItems.value = [
+ { reason: 'OMR 檢查失敗: 區域 1 未填寫', index: 'ERR001' },
+ { reason: 'OMR 檢查失敗: 區域 5 重複填寫', index: 'ERR005' },
+ { reason: '條碼讀取失敗', index: 'BAR002' }
+ ];
+
+ if (errorItems.value.length > 0) {
+ selectedIndex.value = 0;
+ loadErrorDetails(errorItems.value[0].index);
}
};
- onMounted(() => {
- window.addEventListener('keydown', WMHotKey);
- InitialData();
- });
-
- onUnmounted(() => {
- window.removeEventListener('keydown', WMHotKey);
- });
-
- const selectItem = (index: number) => {
- selectedItemIndex.value = index;
- ErrListLVClick();
+ const loadErrorDetails = (id: string) => {
+ console.log('Loading error details for:', id);
+ // Mock loading from INI
+ primaryImage.value = 'assets/CB_IMGPSScanImp.png'; // Mock URL
+ relatedImage.value = 'assets/DocList.png'; // Mock URL
+
+ siteCount.value = 3;
+ relaSiteCount.value = 2;
+ siteIdx.value = 1;
+ relaSiteIdx.value = 1;
+
+ isDeleteEnabled.value = true;
+ isImmediateEnabled.value = errorItems.value.length === 0;
};
- // Delphi Methods
- const InitialData = () => {
- isSitePreEnabled.value = false;
- isSiteNextEnabled.value = false;
- isRelaPreEnabled.value = false;
- isRelaNextEnabled.value = false;
-
- SiteList.value = [];
- RelaSiteList.value = [];
-
- siteIndex.value = 1;
- siteTotal.value = 0;
- relaSiteIndex.value = 1;
- relaSiteTotal.value = 0;
-
- isDeleteEnabled.value = false;
- };
-
- const GetOMRErrini = (Index: string) => {
- console.log(`Getting OMR Err INI for index: ${Index}`);
-
- // Mock data population based on index
- SiteList.value = ['Site1', 'Site2'];
- RelaSiteList.value = ['Rela1'];
- Ingnore.value = true;
-
- siteTotal.value = SiteList.value.length;
- relaSiteTotal.value = RelaSiteList.value.length;
-
- if (RelaSiteList.value.length > 0) {
- showPanel6.value = true;
- } else {
- showPanel6.value = false;
- }
-
- if (SiteList.value.length > 1) isSiteNextEnabled.value = true;
- if (RelaSiteList.value.length > 1) isRelaNextEnabled.value = true;
-
- isDeleteEnabled.value = Ingnore.value;
-
- // Mock showing first errors
- if (SiteList.value.length > 0) ShowOMRErr(siteIndex.value);
- if (RelaSiteList.value.length > 0) ShowRelaOMRErr(relaSiteIndex.value);
- };
-
- const ErrListLVClick = () => {
- InitialData();
- if (selectedItemIndex.value === -1 || !errListItems.value[selectedItemIndex.value]) return;
-
- NowIndex.value = errListItems.value[selectedItemIndex.value].index;
- GetOMRErrini(NowIndex.value);
- };
-
- const ErrListLVKeyUp = (e: KeyboardEvent) => {
- if (e.key === 'ArrowUp' || e.key === 'ArrowDown') {
- ErrListLVClick();
- }
- };
-
- const ErrListLVMouseDown = (e: MouseEvent) => {
- // Right click
- if (e.button === 2) {
- ErrListLVClick();
- }
+ const ErrListLVClick = (index: number) => {
+ selectedIndex.value = index;
+ loadErrorDetails(errorItems.value[index].index);
};
const DeleteBtClick = () => {
- InitialData();
- if (Ingnore.value) {
- console.log(`Writing Del=True to INI for ${NowIndex.value}`);
-
- const idx = selectedItemIndex.value;
- if (idx !== -1) {
- errListItems.value.splice(idx, 1);
-
- if (errListItems.value.length === 0) {
- console.log('All errors deleted, enabling Immediate button and writing OMRCheckOk.dat');
- } else {
- selectedItemIndex.value = Math.min(idx, errListItems.value.length - 1);
- ErrListLVClick();
- }
- }
+ if (selectedIndex.value === -1) return;
+
+ errorItems.value.splice(selectedIndex.value, 1);
+ if (errorItems.value.length === 0) {
+ isImmediateEnabled.value = true;
+ selectedIndex.value = -1;
} else {
- alert('此項目不可刪除或已無可刪除項目');
+ if (selectedIndex.value >= errorItems.value.length) {
+ selectedIndex.value = errorItems.value.length - 1;
+ }
+ loadErrorDetails(errorItems.value[selectedIndex.value].index);
}
};
const EnforceBtClick = () => {
- InitialData();
- let deletedAny = false;
-
- for (let i = errListItems.value.length - 1; i >= 0; i--) {
- const itemIgnorable = true;
-
- if (itemIgnorable) {
- console.log(`Writing Del=True for ${errListItems.value[i].index}`);
- errListItems.value.splice(i, 1);
- deletedAny = true;
- }
- }
-
- if (errListItems.value.length === 0 && deletedAny) {
- console.log('All errors enforced, enabling Immediate button and writing OMRCheckOk.dat');
+ if (confirm('是否確定強制送件?')) {
+ errorItems.value = [];
+ isImmediateEnabled.value = true;
+ selectedIndex.value = -1;
}
};
const ImmediateBtClick = () => {
- console.log('ImmediateBtClick: ' + logTimeString() + ' 立即傳送');
+ console.log('Immediate send triggered');
closeForm('ok');
};
@@ -191,113 +91,45 @@
closeForm('cancel');
};
- const NoteBtClick = () => {
- console.log('Ch_WriteNote = True');
- closeForm('note');
- };
-
- const RejectBtClick = () => {
- if (confirm('是否確定退件??')) {
- console.log('RejectCase = True');
- closeForm('reject');
- }
- };
-
- const Button1Click = () => {
- alert(`UpLPoint=${UpLPoint.value.X},${UpLPoint.value.Y}\n` +
- `UpRPoint=${UpRPoint.value.X},${UpRPoint.value.Y}\n` +
- `DownLPoint=${DownLPoint.value.X},${DownLPoint.value.Y}\n` +
- `DownRPoint=${DownRPoint.value.X},${DownRPoint.value.Y}`);
+ const SitePreBtClick = () => {
+ if (siteIdx.value > 1) siteIdx.value--;
};
const SiteNextBtClick = () => {
- siteIndex.value++;
- ShowOMRErr(siteIndex.value);
-
- isSitePreEnabled.value = false;
- isSiteNextEnabled.value = false;
- if (siteIndex.value > 1) isSitePreEnabled.value = true;
- if (siteIndex.value < siteTotal.value) isSiteNextEnabled.value = true;
- };
-
- const SitePreBtClick = () => {
- siteIndex.value--;
- ShowOMRErr(siteIndex.value);
-
- isSitePreEnabled.value = false;
- isSiteNextEnabled.value = false;
- if (siteIndex.value > 1) isSitePreEnabled.value = true;
- if (siteIndex.value < siteTotal.value) isSiteNextEnabled.value = true;
- };
-
- const RelaNextBtClick = () => {
- relaSiteIndex.value++;
- ShowRelaOMRErr(relaSiteIndex.value);
-
- isRelaPreEnabled.value = false;
- isRelaNextEnabled.value = false;
- if (relaSiteIndex.value > 1) isRelaPreEnabled.value = true;
- if (relaSiteIndex.value < relaSiteTotal.value) isRelaNextEnabled.value = true;
+ if (siteIdx.value < siteCount.value) siteIdx.value++;
};
const RelaPreBtClick = () => {
- relaSiteIndex.value--;
- ShowRelaOMRErr(relaSiteIndex.value);
-
- isRelaPreEnabled.value = false;
- isRelaNextEnabled.value = false;
- if (relaSiteIndex.value > 1) isRelaPreEnabled.value = true;
- if (relaSiteIndex.value < relaSiteTotal.value) isRelaNextEnabled.value = true;
+ if (relaSiteIdx.value > 1) relaSiteIdx.value--;
};
- const ShowOMRErr = (Idx: number) => {
- if (Idx > SiteList.value.length) return;
- console.log(`Showing OMR Error shape for index ${Idx}`);
- };
-
- const ShowRelaOMRErr = (RelaIdx: number) => {
- if (RelaIdx > RelaSiteList.value.length) return;
- console.log(`Showing Related OMR Error shape for index ${RelaIdx}`);
- };
-
- // Missing or external methods mapped
- const logTimeString = (): string => {
- const now = new Date();
- const pad = (n: number) => (n < 10 ? '0' + n : n);
- return `${now.getFullYear()}${pad(now.getMonth()+1)}${pad(now.getDate())} ${pad(now.getHours())}:${pad(now.getMinutes())}:${pad(now.getSeconds())} `;
+ const RelaNextBtClick = () => {
+ if (relaSiteIdx.value < relaSiteCount.value) relaSiteIdx.value++;
};
const closeForm = (result: string) => {
- console.log(`Form closing with result: ${result}`);
+ console.log(`ErrlistForm closing with result: ${result}`);
};
- const startResize = (e: MouseEvent) => {
- console.log('Splitter moving started');
- };
+ onMounted(() => {
+ FormCreate();
+ });
return {
- errListItems,
- selectedItemIndex,
+ // State
+ errorItems,
+ selectedIndex,
+ primaryImage,
+ relatedImage,
+ siteIdx,
+ siteCount,
+ relaSiteIdx,
+ relaSiteCount,
isDeleteEnabled,
+ isImmediateEnabled,
- siteIndex,
- siteTotal,
- isSitePreEnabled,
- isSiteNextEnabled,
-
- relaSiteIndex,
- relaSiteTotal,
- isRelaPreEnabled,
- isRelaNextEnabled,
-
- showPanel6,
- showNoteBtn,
- showRejectBtn,
-
- selectItem,
+ // Actions
ErrListLVClick,
- ErrListLVKeyUp,
- ErrListLVMouseDown,
DeleteBtClick,
EnforceBtClick,
ImmediateBtClick,
@@ -305,10 +137,6 @@
SitePreBtClick,
SiteNextBtClick,
RelaPreBtClick,
- RelaNextBtClick,
- NoteBtClick,
- RejectBtClick,
- Button1Click,
- startResize
+ RelaNextBtClick
};
}
--
Gitblit v1.8.0