chore: 首次簽入 Thinkyu ASP.NET 專案
- 加入 Visual Studio / ASP.NET .gitignore - 排除建置輸出、IDE 設定、NuGet packages、大型 MSI 安裝檔
This commit is contained in:
@@ -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;
|
||||
}
|
||||
Reference in New Issue
Block a user