mirror of
https://github.com/Sea-Haven-Industries/shoc-frontend-new.git
synced 2026-10-03 03:23:20 +00:00
- Click any column header to sort (toggle asc/desc) - Default sort by Last Updated descending - Sort indicator arrow on active column - Gear icon in pagination bar opens column config panel - Drag to reorder columns in the config panel - Checkbox to show/hide individual columns - Column resize still works (stopPropagation on handle)
680 lines
9.7 KiB
CSS
680 lines
9.7 KiB
CSS
@import url("https://fonts.googleapis.com/css2?family=Dosis:wght@200;300;400;500;600&family=Nunito:ital,wght@0,200;0,300;0,400;0,600;1,200;1,300;1,400;1,600&display=swap");
|
|
|
|
* {
|
|
margin: 0;
|
|
padding: 0;
|
|
z-index: 0;
|
|
box-sizing: border-box;
|
|
}
|
|
|
|
body {
|
|
font-family: "Nunito", sans-serif;
|
|
background-color: #f5f5f5;
|
|
color: #333;
|
|
line-height: 1.5;
|
|
}
|
|
|
|
/* Page Layout */
|
|
.listPage, .contactsPage {
|
|
padding: 20px;
|
|
background: #f5f5f5;
|
|
min-height: 100vh;
|
|
}
|
|
|
|
.pageTitle {
|
|
font-size: 28px;
|
|
font-weight: 600;
|
|
color: #333;
|
|
margin-bottom: 20px;
|
|
}
|
|
|
|
.card, .controlsCard {
|
|
background: white;
|
|
border: 1px solid #ddd;
|
|
border-radius: 4px;
|
|
box-shadow: 0 1px 3px rgba(0,0,0,0.1);
|
|
margin-bottom: 20px;
|
|
}
|
|
|
|
/* Controls */
|
|
.controlsTop {
|
|
display: flex;
|
|
justify-content: space-between;
|
|
align-items: center;
|
|
padding: 15px;
|
|
border-bottom: 1px solid #eee;
|
|
}
|
|
|
|
.leftControls {
|
|
flex: 1;
|
|
}
|
|
|
|
.filter {
|
|
display: flex;
|
|
gap: 10px;
|
|
align-items: center;
|
|
}
|
|
|
|
.filter select, .filter input {
|
|
padding: 8px 12px;
|
|
border: 1px solid #ddd;
|
|
border-radius: 4px;
|
|
font-size: 14px;
|
|
}
|
|
|
|
.filter input {
|
|
flex: 1;
|
|
min-width: 300px;
|
|
}
|
|
|
|
.searchBtn {
|
|
padding: 8px 16px;
|
|
background: #007bff;
|
|
color: white;
|
|
border: none;
|
|
border-radius: 4px;
|
|
cursor: pointer;
|
|
font-weight: 600;
|
|
}
|
|
|
|
.searchBtn:hover {
|
|
background: #0056b3;
|
|
}
|
|
|
|
.rightControls {
|
|
display: flex;
|
|
gap: 8px;
|
|
}
|
|
|
|
.iconSmall {
|
|
width: 36px;
|
|
height: 36px;
|
|
padding: 0;
|
|
border: 1px solid #ddd;
|
|
background: white;
|
|
border-radius: 4px;
|
|
cursor: pointer;
|
|
font-size: 18px;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
transition: all 0.2s;
|
|
}
|
|
|
|
.iconSmall:hover {
|
|
background: #f0f0f0;
|
|
border-color: #999;
|
|
}
|
|
|
|
/* Table Styles */
|
|
.tableContainer {
|
|
padding: 15px;
|
|
}
|
|
|
|
.tableResponsive {
|
|
overflow-x: auto;
|
|
}
|
|
|
|
.dataTable {
|
|
width: 100%;
|
|
border-collapse: collapse;
|
|
font-size: 14px;
|
|
}
|
|
|
|
.dataTable thead {
|
|
background: #f9f9f9;
|
|
}
|
|
|
|
.dataTable th {
|
|
padding: 12px;
|
|
text-align: left;
|
|
font-weight: 600;
|
|
color: #333;
|
|
border-bottom: 2px solid #ddd;
|
|
}
|
|
|
|
.dataTable td {
|
|
padding: 12px;
|
|
border-bottom: 1px solid #eee;
|
|
color: #333;
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
white-space: nowrap;
|
|
}
|
|
|
|
.gridTable {
|
|
display: grid;
|
|
font-size: 14px;
|
|
min-width: 100%;
|
|
}
|
|
|
|
.gridCell {
|
|
padding: 12px;
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
white-space: nowrap;
|
|
display: flex;
|
|
align-items: center;
|
|
border-right: 1px solid #eee;
|
|
}
|
|
|
|
.gridCell:last-child {
|
|
border-right: none;
|
|
}
|
|
|
|
.gridHeader {
|
|
font-weight: 600;
|
|
color: #333;
|
|
background: #f5f6f8;
|
|
border-bottom: 2px solid #ddd;
|
|
border-right: 1px solid #ddd;
|
|
position: relative;
|
|
}
|
|
|
|
.gridHeader:last-child {
|
|
border-right: none;
|
|
}
|
|
|
|
.gridBody {
|
|
border-bottom: 1px solid #eee;
|
|
color: #333;
|
|
}
|
|
|
|
.gridBody:hover {
|
|
background: #f9f9f9;
|
|
}
|
|
|
|
.gridCell a {
|
|
color: #007bff;
|
|
text-decoration: none;
|
|
cursor: pointer;
|
|
}
|
|
|
|
.gridCell a:hover {
|
|
text-decoration: underline;
|
|
}
|
|
|
|
.colConfigBtn {
|
|
font-size: 15px;
|
|
color: #999;
|
|
}
|
|
|
|
.colConfigPanel {
|
|
position: fixed;
|
|
background: #fff;
|
|
border: 1px solid #ddd;
|
|
border-radius: 8px;
|
|
box-shadow: 0 8px 24px rgba(0,0,0,0.15);
|
|
z-index: 99999;
|
|
width: 220px;
|
|
overflow: hidden;
|
|
}
|
|
|
|
.colConfigTitle {
|
|
padding: 10px 14px;
|
|
font-size: 12px;
|
|
font-weight: 600;
|
|
color: #999;
|
|
text-transform: uppercase;
|
|
border-bottom: 1px solid #eee;
|
|
}
|
|
|
|
.colConfigList {
|
|
max-height: 300px;
|
|
overflow-y: auto;
|
|
}
|
|
|
|
.colConfigItem {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 6px;
|
|
padding: 6px 14px;
|
|
cursor: grab;
|
|
border-bottom: 1px solid #f5f5f5;
|
|
font-size: 13px;
|
|
}
|
|
|
|
.colConfigItem:hover {
|
|
background: #f8f9fa;
|
|
}
|
|
|
|
.colConfigItem.dragging {
|
|
opacity: 0.4;
|
|
}
|
|
|
|
.colConfigDragHandle {
|
|
color: #ccc;
|
|
font-size: 14px;
|
|
cursor: grab;
|
|
flex-shrink: 0;
|
|
}
|
|
|
|
.colConfigLabel {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 6px;
|
|
cursor: pointer;
|
|
flex: 1;
|
|
}
|
|
|
|
.colConfigLabel input[type="checkbox"] {
|
|
width: 14px;
|
|
height: 14px;
|
|
}
|
|
|
|
.gridSortable {
|
|
cursor: pointer;
|
|
user-select: none;
|
|
}
|
|
|
|
.gridSortable:hover {
|
|
background: #eef1f4;
|
|
}
|
|
|
|
.gridHeader.sorted {
|
|
background: #e8edf2;
|
|
}
|
|
|
|
.sortArrow {
|
|
font-size: 10px;
|
|
color: #007bff;
|
|
margin-left: 4px;
|
|
}
|
|
|
|
.colConfigBtn {
|
|
margin-right: 8px;
|
|
}
|
|
|
|
.colConfigPanel {
|
|
position: fixed;
|
|
background: #fff;
|
|
border: 1px solid #ddd;
|
|
border-radius: 8px;
|
|
box-shadow: 0 8px 24px rgba(0,0,0,0.15);
|
|
z-index: 99999;
|
|
width: 220px;
|
|
overflow: hidden;
|
|
}
|
|
|
|
.colConfigTitle {
|
|
padding: 10px 14px;
|
|
font-size: 13px;
|
|
font-weight: 600;
|
|
color: #333;
|
|
border-bottom: 1px solid #eee;
|
|
}
|
|
|
|
.colConfigList {
|
|
max-height: 300px;
|
|
overflow-y: auto;
|
|
}
|
|
|
|
.colConfigItem {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 6px;
|
|
padding: 6px 14px;
|
|
font-size: 13px;
|
|
cursor: grab;
|
|
border-bottom: 1px solid #f5f5f5;
|
|
}
|
|
|
|
.colConfigItem:hover {
|
|
background: #f8f9fa;
|
|
}
|
|
|
|
.colConfigItem.dragging {
|
|
opacity: 0.4;
|
|
}
|
|
|
|
.colConfigDragHandle {
|
|
color: #ccc;
|
|
font-size: 14px;
|
|
cursor: grab;
|
|
}
|
|
|
|
.colConfigLabel {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 6px;
|
|
cursor: pointer;
|
|
flex: 1;
|
|
}
|
|
|
|
.colResizeHandle {
|
|
position: absolute;
|
|
top: 0;
|
|
right: 0;
|
|
width: 5px;
|
|
height: 100%;
|
|
cursor: col-resize;
|
|
background: transparent;
|
|
}
|
|
|
|
.colResizeHandle:hover {
|
|
background: #007bff;
|
|
}
|
|
|
|
.dataTable tbody tr:hover {
|
|
background: #f9f9f9;
|
|
}
|
|
|
|
.dataTable a {
|
|
color: #007bff;
|
|
text-decoration: none;
|
|
cursor: pointer;
|
|
}
|
|
|
|
.dataTable a:hover {
|
|
text-decoration: underline;
|
|
}
|
|
|
|
.actionButtons {
|
|
display: flex;
|
|
gap: 8px;
|
|
}
|
|
|
|
.btnIcon {
|
|
padding: 4px 8px;
|
|
background: white;
|
|
border: 1px solid #ddd;
|
|
border-radius: 3px;
|
|
cursor: pointer;
|
|
font-size: 14px;
|
|
transition: all 0.2s;
|
|
}
|
|
|
|
.btnIcon:hover {
|
|
background: #f0f0f0;
|
|
border-color: #999;
|
|
}
|
|
|
|
.btnIcon.edit {
|
|
color: #28a745;
|
|
}
|
|
|
|
.btnIcon.delete {
|
|
color: #dc3545;
|
|
}
|
|
|
|
/* Pagination */
|
|
.paginationBar {
|
|
display: flex;
|
|
justify-content: space-between;
|
|
align-items: center;
|
|
padding: 12px 16px;
|
|
border-bottom: 1px solid #eee;
|
|
font-size: 13px;
|
|
background: #fafafa;
|
|
}
|
|
|
|
.paginationPerPage {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 8px;
|
|
}
|
|
|
|
.paginationLabel {
|
|
color: #999;
|
|
font-size: 12px;
|
|
}
|
|
|
|
.paginationSizeGroup {
|
|
display: flex;
|
|
border: 1px solid #ddd;
|
|
border-radius: 4px;
|
|
overflow: hidden;
|
|
}
|
|
|
|
.paginationSizeBtn {
|
|
padding: 4px 12px;
|
|
border: none;
|
|
border-right: 1px solid #ddd;
|
|
background: #fff;
|
|
font-size: 12px;
|
|
cursor: pointer;
|
|
color: #666;
|
|
}
|
|
|
|
.paginationSizeBtn:last-child {
|
|
border-right: none;
|
|
}
|
|
|
|
.paginationSizeBtn:hover {
|
|
background: #f0f0f0;
|
|
}
|
|
|
|
.paginationSizeBtn.active {
|
|
background: #007bff;
|
|
color: #fff;
|
|
}
|
|
|
|
.paginationNav {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 12px;
|
|
}
|
|
|
|
.paginationInfo {
|
|
color: #999;
|
|
font-size: 12px;
|
|
}
|
|
|
|
.paginationButtons {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 2px;
|
|
}
|
|
|
|
.paginationBtn {
|
|
width: 30px;
|
|
height: 30px;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
border: 1px solid #ddd;
|
|
background: #fff;
|
|
border-radius: 4px;
|
|
cursor: pointer;
|
|
font-size: 14px;
|
|
color: #333;
|
|
}
|
|
|
|
.paginationBtn:hover:not(:disabled) {
|
|
background: #f0f0f0;
|
|
}
|
|
|
|
.paginationBtn:disabled {
|
|
opacity: 0.3;
|
|
cursor: not-allowed;
|
|
}
|
|
|
|
.paginationPage {
|
|
width: 30px;
|
|
height: 30px;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
background: #007bff;
|
|
color: #fff;
|
|
border-radius: 4px;
|
|
font-size: 12px;
|
|
font-weight: 600;
|
|
}
|
|
|
|
/* Form Styles */
|
|
.formWrapper {
|
|
padding: 20px;
|
|
background: #f5f5f5;
|
|
min-height: 100vh;
|
|
}
|
|
|
|
.formCard {
|
|
background: white;
|
|
border: 1px solid #ddd;
|
|
border-radius: 4px;
|
|
max-width: 900px;
|
|
margin: 0 auto;
|
|
box-shadow: 0 1px 3px rgba(0,0,0,0.1);
|
|
}
|
|
|
|
.formHeader {
|
|
padding: 20px;
|
|
border-bottom: 1px solid #ddd;
|
|
background: #f9f9f9;
|
|
}
|
|
|
|
.formHeader h2 {
|
|
margin: 0;
|
|
font-size: 22px;
|
|
color: #333;
|
|
}
|
|
|
|
.dataForm {
|
|
padding: 20px;
|
|
}
|
|
|
|
.section {
|
|
margin-bottom: 25px;
|
|
}
|
|
|
|
.sectionTitle {
|
|
font-size: 16px;
|
|
font-weight: 600;
|
|
color: #333;
|
|
margin-bottom: 15px;
|
|
border-bottom: 2px solid #007bff;
|
|
padding-bottom: 8px;
|
|
}
|
|
|
|
.formBody {
|
|
display: grid;
|
|
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
|
|
gap: 15px;
|
|
margin-bottom: 15px;
|
|
}
|
|
|
|
.formGroup {
|
|
display: flex;
|
|
flex-direction: column;
|
|
}
|
|
|
|
.formLabel {
|
|
font-size: 14px;
|
|
font-weight: 600;
|
|
margin-bottom: 6px;
|
|
color: #333;
|
|
}
|
|
|
|
.required {
|
|
color: #dc3545;
|
|
}
|
|
|
|
.formControl {
|
|
padding: 10px;
|
|
border: 1px solid #ddd;
|
|
border-radius: 4px;
|
|
font-size: 14px;
|
|
font-family: inherit;
|
|
}
|
|
|
|
.formControl:focus {
|
|
outline: none;
|
|
border-color: #007bff;
|
|
box-shadow: 0 0 0 3px rgba(0,123,255,0.1);
|
|
}
|
|
|
|
.formActions {
|
|
display: flex;
|
|
gap: 12px;
|
|
padding-top: 20px;
|
|
border-top: 1px solid #ddd;
|
|
}
|
|
|
|
.btnPrimary {
|
|
padding: 10px 24px;
|
|
background: #007bff;
|
|
color: white;
|
|
border: none;
|
|
border-radius: 4px;
|
|
font-size: 14px;
|
|
font-weight: 600;
|
|
cursor: pointer;
|
|
transition: all 0.2s;
|
|
}
|
|
|
|
.btnPrimary:hover {
|
|
background: #0056b3;
|
|
}
|
|
|
|
.btnPrimary:disabled {
|
|
opacity: 0.6;
|
|
cursor: not-allowed;
|
|
}
|
|
|
|
.btnSecondary {
|
|
padding: 10px 24px;
|
|
background: white;
|
|
color: #333;
|
|
border: 1px solid #ddd;
|
|
border-radius: 4px;
|
|
font-size: 14px;
|
|
font-weight: 600;
|
|
cursor: pointer;
|
|
transition: all 0.2s;
|
|
}
|
|
|
|
.btnSecondary:hover {
|
|
background: #f0f0f0;
|
|
}
|
|
|
|
/* Loading State */
|
|
.loading {
|
|
padding: 40px;
|
|
text-align: center;
|
|
color: #666;
|
|
font-size: 16px;
|
|
}
|
|
|
|
.error {
|
|
padding: 15px;
|
|
background: #f8d7da;
|
|
border: 1px solid #f5c6cb;
|
|
color: #721c24;
|
|
border-radius: 4px;
|
|
margin: 15px;
|
|
}
|
|
|
|
/* Responsive */
|
|
@media (max-width: 768px) {
|
|
.controlsTop {
|
|
flex-direction: column;
|
|
align-items: stretch;
|
|
gap: 12px;
|
|
}
|
|
|
|
.filter {
|
|
flex-direction: column;
|
|
}
|
|
|
|
.filter input, .filter select {
|
|
width: 100%;
|
|
}
|
|
|
|
.dataTable {
|
|
font-size: 12px;
|
|
}
|
|
|
|
.dataTable th, .dataTable td {
|
|
padding: 8px;
|
|
}
|
|
|
|
.paginationContainer {
|
|
flex-direction: column;
|
|
gap: 12px;
|
|
}
|
|
|
|
.formBody {
|
|
grid-template-columns: 1fr;
|
|
}
|
|
}
|