forked from wangziqi/gongxue-base
Server: - Add DingTalk attendance import service with SSE progress streaming - Add IntegrationConfig entity & module for multi-tenant DingTalk setup - Add ExpenseType entity & ExpenseTypesModule - Add SeedModule for DB initialization - Add UserDingMapping entity for DingTalk user linkage - Attendance service: import flow with dedup & student auto-mapping - Rooms service: time-range overlap queries - Sync controller/service: DingTalk integration wiring - Permission guard: refactor to pure re-export - Campus scope middleware: tenant-aware filtering Admin UI: - Attendance page: import UI with progress & result summary - All pages: tableStyle/tablePagination standardization - Login page: responsive styling - Sensitive data: useViewSensitive hook for masked viewing - Vite config: path aliases, build optimization - Test infra: vitest config, test utilities Docs: PRD DingTalk batch 1 & 2 design docs
93 lines
1.9 KiB
CSS
93 lines
1.9 KiB
CSS
* {
|
||
margin: 0;
|
||
padding: 0;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
body {
|
||
font-family:
|
||
-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
|
||
-webkit-font-smoothing: antialiased;
|
||
-moz-osx-font-smoothing: grayscale;
|
||
}
|
||
|
||
#root {
|
||
min-height: 100vh;
|
||
}
|
||
|
||
/* === 通用:表格容器横向滚动(防双重滚动条) === */
|
||
.ant-table-wrapper {
|
||
overflow-x: auto;
|
||
overflow-y: hidden;
|
||
}
|
||
|
||
/* ── 表格单元格省略号截断(按需启用) ──
|
||
在 .ant-table-wrapper 上添加 .table-cell-ellipsis 类即可生效:
|
||
<Table className="table-cell-ellipsis" ... /> */
|
||
.table-cell-ellipsis .ant-table-thead > tr > th,
|
||
.table-cell-ellipsis .ant-table-tbody > tr > td {
|
||
white-space: nowrap;
|
||
overflow: hidden;
|
||
text-overflow: ellipsis;
|
||
}
|
||
|
||
/* 操作列按钮不换行 */
|
||
.ant-table-wrapper .ant-table-cell .ant-space {
|
||
flex-wrap: nowrap;
|
||
}
|
||
|
||
/* ── 宿舍总览卡片:Tag 溢出截断 ── */
|
||
.room-card-tag-wrapper {
|
||
overflow: hidden;
|
||
}
|
||
.room-card-tag-wrapper .ant-tag {
|
||
max-width: 100%;
|
||
overflow: hidden;
|
||
text-overflow: ellipsis;
|
||
white-space: nowrap;
|
||
display: inline-flex;
|
||
align-items: center;
|
||
}
|
||
.room-card-tag-wrapper .ant-tag .anticon {
|
||
flex-shrink: 0;
|
||
}
|
||
|
||
/* === 手机 (< 576px) === */
|
||
@media (max-width: 575px) {
|
||
.ant-table {
|
||
font-size: 13px;
|
||
}
|
||
.ant-table-cell {
|
||
padding: 8px 6px !important;
|
||
}
|
||
.ant-descriptions-item-label,
|
||
.ant-descriptions-item-content {
|
||
font-size: 13px;
|
||
}
|
||
.ant-modal {
|
||
max-width: calc(100vw - 24px) !important;
|
||
margin: 12px auto !important;
|
||
}
|
||
.ant-modal .ant-modal-body {
|
||
max-height: 60vh;
|
||
overflow-y: auto;
|
||
}
|
||
h2 {
|
||
font-size: 18px !important;
|
||
}
|
||
.ant-card {
|
||
margin-bottom: 8px;
|
||
}
|
||
.ant-space-item .ant-btn {
|
||
padding: 2px 6px;
|
||
font-size: 12px;
|
||
}
|
||
}
|
||
|
||
/* === 平板 (576-991px) === */
|
||
@media (min-width: 576px) and (max-width: 991px) {
|
||
.ant-modal {
|
||
max-width: calc(100vw - 48px) !important;
|
||
}
|
||
}
|