backup: 完成 HR_position_ 表格前綴重命名與欄位對照表整理

變更內容:
- 所有資料表加上 HR_position_ 前綴
- 整理完整欄位顯示名稱與 ID 對照表
- 模組化 JS 檔案 (admin.js, ai.js, csv.js 等)
- 專案結構優化 (docs/, scripts/, tests/ 等)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
2025-12-09 12:05:20 +08:00
parent a068ef9704
commit a6af297623
82 changed files with 8685 additions and 4933 deletions

View File

@@ -3,25 +3,334 @@
* 包含各個頁籤/模組的特定樣式需求
*/
/* ==================== 共用模組樣式 ==================== */
/* 模組頂部工具列 */
.module-toolbar {
display: flex;
justify-content: space-between;
align-items: center;
flex-wrap: wrap;
gap: 12px;
margin-bottom: 20px;
padding: 16px 20px;
background: #f8fafc;
border-radius: var(--radius);
border: 1px solid var(--border);
}
.module-toolbar-left,
.module-toolbar-right {
display: flex;
align-items: center;
gap: 10px;
flex-wrap: wrap;
}
.module-toolbar h2 {
margin: 0;
color: var(--primary);
font-size: 1.1rem;
}
.module-toolbar .hint {
color: var(--text-secondary);
font-size: 0.85rem;
}
/* ==================== 崗位基礎資料模組 ==================== */
/* (目前使用共用元件,無特殊樣式) */
/* CSV 按鈕區塊 */
.csv-buttons {
display: flex;
gap: 10px;
flex-wrap: wrap;
margin-bottom: 15px;
}
/* ==================== 職務基礎資料模組 ==================== */
/* (目前使用共用元件,無特殊樣式) */
/* (使用共用元件) */
/* ==================== 部門職責模組 ==================== */
/* (目前使用共用元件,無特殊樣式) */
/* (使用共用元件) */
/* ==================== 崗位描述模組 ==================== */
/* (目前使用共用元件,無特殊樣式) */
/* (使用共用元件) */
/* ==================== 崗位清單模組 ==================== */
/* (目前使用共用元件,無特殊樣式) */
.position-list-module .module-toolbar {
background: linear-gradient(135deg, rgba(20, 184, 166, 0.05) 0%, rgba(13, 148, 136, 0.05) 100%);
border-color: rgba(20, 184, 166, 0.2);
}
/* 資料表格容器 */
.data-table-container {
overflow-x: auto;
-webkit-overflow-scrolling: touch;
border-radius: var(--radius);
border: 1px solid var(--border);
}
/* 資料表格 */
.data-table {
width: 100%;
border-collapse: collapse;
background: white;
min-width: 700px;
}
.data-table thead {
position: sticky;
top: 0;
z-index: 10;
}
.data-table th {
padding: 14px 16px;
text-align: left;
font-weight: 600;
font-size: 0.85rem;
white-space: nowrap;
background: var(--primary);
color: white;
border-bottom: 2px solid var(--primary-dark);
}
.data-table th.sortable {
cursor: pointer;
user-select: none;
transition: background 0.2s ease;
}
.data-table th.sortable:hover {
background: var(--primary-dark);
}
.data-table th .sort-icon {
margin-left: 6px;
opacity: 0.7;
}
.data-table td {
padding: 12px 16px;
font-size: 0.9rem;
border-bottom: 1px solid var(--border);
vertical-align: middle;
}
.data-table tbody tr:hover {
background: rgba(41, 128, 185, 0.05);
}
.data-table tbody tr:last-child td {
border-bottom: none;
}
/* 空資料提示 */
.data-table .empty-row td {
padding: 48px 20px;
text-align: center;
color: var(--text-secondary);
font-size: 0.95rem;
}
/* 操作按鈕欄 */
.data-table .action-cell {
text-align: center;
white-space: nowrap;
}
.data-table .action-cell .btn {
padding: 6px 12px;
font-size: 0.8rem;
margin: 0 2px;
}
/* 崗位清單專用表格顏色 - 青色 */
.position-list-table thead {
background: linear-gradient(135deg, var(--module-list) 0%, var(--module-list-dark) 100%);
}
.position-list-table th {
background: transparent;
border-bottom-color: var(--module-list-dark);
}
.position-list-table th.sortable:hover {
background: rgba(0, 0, 0, 0.1);
}
/* ==================== 管理者頁面模組 ==================== */
/* (目前使用共用元件,無特殊樣式) */
.admin-module .module-toolbar {
background: linear-gradient(135deg, rgba(244, 63, 94, 0.05) 0%, rgba(225, 29, 72, 0.05) 100%);
border-color: rgba(244, 63, 94, 0.2);
}
/*
* 注意:如果未來各模組需要特定樣式,可在此添加
* 例如:特殊的表格樣式、卡片佈局等
*/
/* 管理者表格專用顏色 - 玫紅色 */
.admin-table thead {
background: linear-gradient(135deg, var(--module-admin) 0%, var(--module-admin-dark) 100%);
}
.admin-table th {
background: transparent;
border-bottom-color: var(--module-admin-dark);
}
/* 權限標籤 */
.permission-badge {
display: inline-block;
padding: 4px 10px;
border-radius: 12px;
font-size: 0.75rem;
font-weight: 500;
white-space: nowrap;
}
.permission-badge.admin-highest {
background: linear-gradient(135deg, #e74c3c 0%, #c0392b 100%);
color: white;
}
.permission-badge.admin {
background: linear-gradient(135deg, #f39c12 0%, #d68910 100%);
color: white;
}
.permission-badge.user {
background: linear-gradient(135deg, #27ae60 0%, #1e8449 100%);
color: white;
}
.permission-badge.viewer {
background: linear-gradient(135deg, #3498db 0%, #2980b9 100%);
color: white;
}
/* ==================== 響應式設計 - 模組專屬 ==================== */
/* Large Tablets (1024px) */
@media (max-width: 1024px) {
.module-toolbar {
padding: 14px 16px;
}
.data-table {
min-width: 600px;
}
.data-table th,
.data-table td {
padding: 12px 14px;
}
}
/* Tablets (768px) */
@media (max-width: 768px) {
.module-toolbar {
flex-direction: column;
align-items: stretch;
gap: 12px;
padding: 12px;
}
.module-toolbar-left,
.module-toolbar-right {
justify-content: center;
}
.module-toolbar h2 {
text-align: center;
font-size: 1rem;
}
.module-toolbar .hint {
display: none;
}
.csv-buttons {
justify-content: center;
}
.data-table {
min-width: 500px;
}
.data-table th,
.data-table td {
padding: 10px 12px;
font-size: 0.85rem;
}
.data-table .action-cell .btn {
padding: 5px 10px;
font-size: 0.75rem;
}
/* 隱藏較不重要的欄位 */
.data-table .hide-tablet {
display: none;
}
.permission-badge {
padding: 3px 8px;
font-size: 0.7rem;
}
}
/* Mobile Phones (480px) */
@media (max-width: 480px) {
.module-toolbar {
padding: 10px;
gap: 10px;
}
.module-toolbar-left,
.module-toolbar-right {
width: 100%;
flex-direction: column;
}
.module-toolbar-left .btn,
.module-toolbar-right .btn {
width: 100%;
justify-content: center;
}
.csv-buttons {
flex-direction: column;
}
.csv-buttons .btn {
width: 100%;
justify-content: center;
}
.data-table {
min-width: 400px;
}
.data-table th,
.data-table td {
padding: 8px 10px;
font-size: 0.8rem;
}
.data-table th {
font-size: 0.75rem;
}
.data-table .action-cell {
display: flex;
flex-direction: column;
gap: 4px;
}
.data-table .action-cell .btn {
width: 100%;
padding: 6px 8px;
}
/* 隱藏更多欄位 */
.data-table .hide-mobile {
display: none;
}
}