curtis
12小時前 713024ccb5056e76bcfc9389664981da68a5139f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
<template>
  <div class="err-list-form flex flex-col bg-gray-100 font-sans w-[841px] h-[636px] border border-gray-400 relative overflow-hidden text-sm">
    
    <!-- Top Error Reason Panel (Panel 3) -->
    <div class="h-[212px] flex-none border-b border-gray-300 p-1">
      <fieldset class="w-full h-full border border-gray-400 p-0 flex flex-col">
        <legend class="px-1 ml-2 text-base text-black">錯誤原因</legend>
        
        <div class="flex-1 overflow-auto bg-white m-1 border border-gray-300">
          <table class="w-full border-collapse">
            <thead class="sticky top-0 bg-gray-100">
              <tr class="text-left border-b border-gray-300">
                <th class="p-1 border-r border-gray-200">內容</th>
                <th class="p-1 w-[80px]">index</th>
              </tr>
            </thead>
            <tbody>
              <tr v-for="(item, index) in errorItems" 
                  :key="index"
                  :class="['hover:bg-blue-50 cursor-pointer', selectedIndex === index ? 'bg-blue-600 text-white hover:bg-blue-700' : '']"
                  @click="ErrListLVClick(index)">
                <td class="p-1 border-r border-gray-200">{{ item.reason }}</td>
                <td class="p-1">{{ item.index }}</td>
              </tr>
            </tbody>
          </table>
          <div v-if="errorItems.length === 0" class="flex items-center justify-center h-full text-red-600 font-bold text-lg">
            檢核失敗原因已全部清除
          </div>
        </div>
      </fieldset>
    </div>
 
    <!-- Action Buttons Panel (Panel 1) -->
    <div class="h-[41px] flex-none border-b border-gray-300 flex items-center px-4 space-x-2 bg-gray-50">
      <button class="w-[84px] h-[34px] border border-gray-400 bg-gray-200 hover:bg-gray-300 disabled:opacity-50" 
              :disabled="!isDeleteEnabled" @click="DeleteBtClick">
        忽略
      </button>
      <button class="w-[79px] h-[34px] border border-gray-400 bg-gray-200 hover:bg-gray-300" @click="EnforceBtClick">
        強制送件
      </button>
      <div class="flex-1"></div>
      <button class="w-[89px] h-[34px] border border-gray-400 bg-gray-200 hover:bg-gray-300 disabled:opacity-50" 
              :disabled="!isImmediateEnabled" @click="ImmediateBtClick">
        立即傳送
      </button>
      <button class="w-[84px] h-[34px] border border-gray-400 bg-gray-200 hover:bg-gray-300" @click="ExitBtClick">
        離開
      </button>
    </div>
 
    <!-- Image Viewing Area (Panel 4) -->
    <div class="flex-1 flex overflow-hidden">
      <!-- Primary Image View (Panel 5) -->
      <div class="flex-1 flex flex-col border-r border-gray-400 overflow-hidden">
        <div class="h-[28px] bg-gray-200 border-b border-gray-300 flex items-center px-2 space-x-4">
          <button class="w-[29px] h-[23px] border border-gray-400 bg-gray-100 flex items-center justify-center text-xs" 
                  :disabled="siteIdx <= 1" @click="SitePreBtClick">◀</button>
          <span class="text-xs font-mono">{{ siteIdx }}/{{ siteCount }}</span>
          <button class="w-[29px] h-[23px] border border-gray-400 bg-gray-100 flex items-center justify-center text-xs" 
                  :disabled="siteIdx >= siteCount" @click="SiteNextBtClick">▶</button>
        </div>
        <div class="flex-1 bg-gray-800 overflow-auto relative p-2 flex items-center justify-center">
          <img :src="primaryImage" class="max-w-none shadow-xl border border-gray-400" />
          <!-- Mock OMR Error Overlay -->
          <div v-if="siteIdx > 0" class="absolute left-1/2 top-1/4 w-[100px] h-[40px] border-2 border-yellow-400 bg-yellow-200 opacity-40 animate-pulse pointer-events-none"></div>
        </div>
      </div>
 
      <!-- Related Image View (Panel 6) -->
      <div class="w-[427px] flex-none flex flex-col overflow-hidden">
        <div class="h-[28px] bg-gray-200 border-b border-gray-300 flex items-center px-2 space-x-4">
          <button class="w-[31px] h-[23px] border border-gray-400 bg-gray-100 flex items-center justify-center text-xs" 
                  :disabled="relaSiteIdx <= 1" @click="RelaPreBtClick">◀</button>
          <span class="text-xs font-mono">{{ relaSiteIdx }}/{{ relaSiteCount }}</span>
          <button class="w-[31px] h-[23px] border border-gray-400 bg-gray-100 flex items-center justify-center text-xs" 
                  :disabled="relaSiteIdx >= relaSiteCount" @click="RelaNextBtClick">▶</button>
        </div>
        <div class="flex-1 bg-gray-800 overflow-auto relative p-2 flex items-center justify-center">
          <img :src="relatedImage" class="max-w-none shadow-xl border border-gray-400" />
          <!-- Mock Related Error Overlay -->
          <div v-if="relaSiteIdx > 0" class="absolute left-1/3 top-1/3 w-[80px] h-[30px] border-2 border-red-400 bg-red-200 opacity-40 pointer-events-none"></div>
        </div>
      </div>
    </div>
 
    <!-- Visual Reference Overlay -->
    <div class="err-list-layout opacity-20 pointer-events-none absolute left-0 top-0">
      <img src="assets/ErrList.png" class="w-[841px] h-[636px]" />
    </div>
  </div>
</template>
 
<script lang="ts">
import { defineComponent } from 'vue';
import { useErrListLogic } from './ErrList.ts';
 
export default defineComponent({
  name: 'ErrlistForm',
  setup() {
    const logic = useErrListLogic();
    return { ...logic };
  }
});
</script>
 
<style scoped>
.err-list-form {
  user-select: none;
}
.err-list-layout {
  z-index: 1000;
}
</style>