chore: 首次簽入 Thinkyu ASP.NET 專案

- 加入 Visual Studio / ASP.NET .gitignore
- 排除建置輸出、IDE 設定、NuGet packages、大型 MSI 安裝檔
This commit is contained in:
2026-09-10 09:42:37 +08:00
commit 577060bc78
2496 changed files with 501389 additions and 0 deletions
+329
View File
@@ -0,0 +1,329 @@
/* ========================================
* 匯入參加人員頁面專屬樣式
*
* 共同樣式已移至 Site.css
* - 搜尋面板 (.search-panel, .search-row, .search-field-inline, .search-label-inline, .search-input)
* ======================================== */
/* 上傳面板 */
.upload-panel {
display: flex;
flex-direction: column;
gap: var(--spacing-lg);
}
/* 上傳區域 */
.upload-area {
border: 2px dashed #ddd;
border-radius: 8px;
padding: var(--spacing-lg);
text-align: center;
background: #f9f9f9;
transition: all 0.3s ease;
}
.upload-area.dragging {
border-color: #0066cc;
background: #f0f7ff;
}
.upload-area:hover {
border-color: #0066cc;
}
/* 上傳文字 */
.upload-text {
display: block;
color: #999;
font-size: 14px;
margin-top: 8px;
}
/* 檔案資訊 */
.file-info {
display: flex;
align-items: center;
justify-content: center;
gap: 8px;
margin-top: var(--spacing-md);
padding: 12px;
background: white;
border: 1px solid #ddd;
border-radius: 4px;
}
.file-name {
font-weight: 500;
color: #333;
}
.file-size {
color: #999;
font-size: 12px;
}
/* 各步驟區域 */
.upload-section,
.preview-section,
.import-section,
.result-section {
background: white;
border: 1px solid #ddd;
border-radius: 8px;
padding: var(--spacing-lg);
}
/* 區域標題 */
.section-title {
margin: 0 0 var(--spacing-md) 0;
font-size: 16px;
font-weight: 600;
color: #333;
}
/* 驗證摘要 */
.validation-summary {
margin-bottom: var(--spacing-md);
}
.error-box {
background: #fff5f5;
border: 1px solid #ffdbdb;
border-radius: 4px;
padding: var(--spacing-md);
}
.error-title {
color: #d32f2f;
font-weight: 600;
margin-bottom: 8px;
}
.error-list {
max-height: 200px;
overflow-y: auto;
}
.error-item {
color: #d32f2f;
font-size: 13px;
margin-bottom: 4px;
padding-left: 20px;
position: relative;
}
.error-item::before {
content: '\2717 '; /* ✗ */
position: absolute;
left: 0;
color: #d32f2f;
}
/* 預覽資訊 */
.preview-info {
background: #f0f7ff;
border: 1px solid #d4e4f9;
border-radius: 4px;
padding: 12px;
margin-bottom: var(--spacing-md);
color: #0066cc;
font-size: 14px;
font-weight: 500;
}
/* 預覽表格 */
.preview-table-wrapper {
overflow-x: auto;
max-height: 500px;
overflow-y: auto;
border: 1px solid #ddd;
border-radius: 4px;
}
.preview-table {
width: 100%;
border-collapse: collapse;
margin-top: 0;
border: none;
font-size: 14px;
}
.preview-table thead {
background: #f5f5f5;
position: sticky;
top: 0;
z-index: 10;
}
.preview-table th,
.preview-table td {
padding: 10px 12px;
text-align: left;
border: 1px solid #ddd;
}
.preview-table th {
font-weight: 600;
color: #333;
}
.preview-table tbody tr:hover {
background: #f9f9f9;
}
.preview-table tbody tr.error-row {
background: #fff5f5;
}
.preview-table .text-center {
text-align: center;
}
/* 狀態徽章 */
.status-badge {
display: inline-block;
padding: 2px 8px;
border-radius: 3px;
font-size: 13px;
font-weight: 600;
}
.status-badge.ok {
background: #e6f7e6;
color: #2e7d32;
}
.status-badge.error {
background: #ffebee;
color: #d32f2f;
}
/* 匯入選項 */
.import-options {
background: #f9f9f9;
border: 1px solid #e0e0e0;
border-radius: 4px;
padding: var(--spacing-md);
margin-bottom: var(--spacing-md);
}
.checkbox-label {
display: flex;
align-items: center;
gap: 8px;
cursor: pointer;
font-size: 14px;
color: #333;
user-select: none;
}
.checkbox-label input[type="checkbox"] {
cursor: pointer;
width: 18px;
height: 18px;
accent-color: #0066cc;
}
.checkbox-label input[type="checkbox"]:disabled {
opacity: 0.5;
cursor: not-allowed;
}
.checkbox-label:hover {
color: #0066cc;
}
/* 匯入動作 */
.import-section {
display: flex;
gap: var(--spacing-md);
flex-wrap: wrap;
}
.import-section .btn {
flex: 1;
min-width: 150px;
}
/* 結果框 */
.result-section {
margin-top: var(--spacing-lg);
}
.result-box {
border-left: 4px solid #ddd;
padding: var(--spacing-md);
border-radius: 4px;
}
.result-box.success {
background: #f1f8f4;
border-color: #4caf50;
}
.result-box.error {
background: #fff5f5;
border-color: #d32f2f;
}
.result-title {
font-weight: 600;
font-size: 16px;
margin-bottom: 8px;
}
.result-box.success .result-title {
color: #2e7d32;
}
.result-box.error .result-title {
color: #d32f2f;
}
.result-message {
color: #666;
font-size: 14px;
margin-bottom: 8px;
}
.result-details {
font-size: 13px;
color: #999;
}
.result-details span {
margin-right: 16px;
}
/* 跳過記錄部分 */
.skipped-records {
margin-top: var(--spacing-md);
padding-top: var(--spacing-md);
border-top: 1px solid #ddd;
}
.skipped-title {
color: #f57c00;
font-weight: 600;
margin-bottom: 8px;
font-size: 14px;
}
.skipped-list {
max-height: 150px;
overflow-y: auto;
}
.skipped-item {
color: #f57c00;
font-size: 13px;
margin-bottom: 4px;
padding-left: 20px;
position: relative;
}
.skipped-item::before {
content: '⊘ ';
position: absolute;
left: 0;
}