diff --git a/public/js/pages/Cpeprovisioning/Cpeprovisioning.css b/public/js/pages/Cpeprovisioning/Cpeprovisioning.css index 0456872a3..681de24eb 100644 --- a/public/js/pages/Cpeprovisioning/Cpeprovisioning.css +++ b/public/js/pages/Cpeprovisioning/Cpeprovisioning.css @@ -1,20 +1,33 @@ /* Cpeprovisioning.css */ body { - overflow: hidden; + overflow-y: auto; } /* --- Page & Filter Layout --- */ +.cpe-provisioning-page { + padding-bottom: 2rem; +} + +.cpe-provisioning-page .filter-wrapper { + background: #fff; + padding: 1rem; + border-radius: 4px; + box-shadow: 0 1px 3px rgba(0,0,0,0.1); + margin-bottom: 1.5rem; +} + .cpe-provisioning-page .filter-grid { display: grid; - grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); + grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 1rem; align-items: end; } + .cpe-provisioning-page .filter-actions { display: flex; gap: 0.5rem; - padding-bottom: 1rem; } + .loading-indicator, .no-results-indicator { text-align: center; padding: 4rem 2rem; @@ -23,138 +36,264 @@ body { /* --- Cards Container --- */ .cpe-cards-container { - display: grid; - grid-template-columns: 1fr; + display: flex; + flex-direction: column; gap: 1rem; - margin-top: 1.5rem; } /* --- Single Card Styling --- */ .cpe-card { background-color: #fff; border: 1px solid #dee2e6; - border-left: 5px solid transparent; - border-radius: 0.5rem; - transition: box-shadow 0.2s ease-in-out, border-color 0.2s ease-in-out; + border-left: 4px solid #adb5bd; + border-radius: 4px; + box-shadow: 0 1px 2px rgba(0,0,0,0.05); + transition: all 0.2s ease; } .cpe-card.is-dirty { - border-left-color: #f7c423; /* Yellow accent for dirty */ + border-left-color: #fcc419; /* Yellow accent for dirty */ } .cpe-card:hover { - box-shadow: 0 4px 12px rgba(0,0,0,0.08); + box-shadow: 0 4px 12px rgba(0,0,0,0.1); + transform: translateY(-1px); } /* --- Card Header --- */ .cpe-card-header { - display: grid; - grid-template-columns: minmax(200px, 1.5fr) 2fr auto; + display: flex; + justify-content: space-between; align-items: center; - gap: 1.5rem; - padding: 0.75rem 1rem; + padding: 0.5rem 1rem; background-color: #f8f9fa; border-bottom: 1px solid #e9ecef; + gap: 1rem; + flex-wrap: wrap; } -.cpe-card-header .customer-info strong { - color: #005384; - font-size: 1.1rem; + +.customer-info { + flex: 1; + min-width: 250px; } -.cpe-card-header .customer-info small { - display: block; - font-size: 0.8rem; +.customer-info .name { + color: #1864ab; + font-weight: 600; + font-size: 1.05rem; + margin-right: 0.5rem; } -.location-contact-header { +.customer-info .meta { font-size: 0.85rem; color: #495057; - display: grid; - grid-template-columns: repeat(2, 1fr); - gap: 0.1rem 1rem; } + +.location-info { + flex: 2; + display: flex; + flex-wrap: wrap; + gap: 0.5rem 1.5rem; + font-size: 0.85rem; + color: #495057; +} +.location-info div { + display: flex; + align-items: center; +} +.location-info i { + margin-right: 0.4rem; + color: #adb5bd; +} + .header-actions { display: flex; align-items: center; - gap: 1rem; - font-size: 1.1rem; - color: #005384; + gap: 0.75rem; + font-size: 1rem; } -.header-actions a { color: inherit; transition: color 0.2s; } -.header-actions a:hover { color: #f7c423; } +.header-actions a, .header-actions span { + color: #868e96; + transition: color 0.2s; + cursor: pointer; +} +.header-actions a:hover, .header-actions span:hover { color: #228be6; } +.header-actions .text-purple { color: #be4bdb; } /* --- Card Content Grid --- */ .cpe-card-content { - padding: 0.75rem 1rem; + padding: 1rem; display: grid; - grid-template-columns: repeat(4, minmax(280px, 1fr)); /* Changed to 4 columns */ - gap: 1rem 1.5rem; + grid-template-columns: repeat(4, 1fr); + gap: 1.5rem; } .content-column { - padding-top: 0.5rem; display: flex; flex-direction: column; - gap: 0.75rem; -} -.content-column.action-column { - justify-content: space-between; + gap: 0.5rem; + min-width: 0; /* Prevent overflow */ } + .content-column h5 { - font-size: 0.8rem; - font-weight: 600; - color: #005384; + font-size: 0.75rem; + font-weight: 700; + color: #868e96; text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: 0.25rem; + border-bottom: 1px solid #f1f3f5; padding-bottom: 0.25rem; - border-bottom: 1px solid #e9ecef; } -.content-column p { - font-size: 0.9rem; - margin-bottom: 0.25rem; - line-height: 1.4; + +.content-column .form-group { + margin-bottom: 0.5rem; } -.content-column .form-group, .content-column .tt-select-modern { - margin-bottom: 0; +.content-column label { + font-size: 0.75rem; + color: #495057; + margin-bottom: 0.1rem; + font-weight: 500; } -.action-column .btn { - width: 100%; - margin-top: 0.5rem; +.content-column .form-control, .content-column .custom-select { + font-size: 0.85rem; + padding: 0.25rem 0.5rem; + height: auto; } + +/* Specific Column Tweaks */ .shipping-dims { display: grid; grid-template-columns: repeat(2, 1fr); - gap: 0.5rem 0.75rem; + gap: 0.5rem; } -.finish-wrapper { + +.product-info { + background: #f8f9fa; + padding: 0.5rem; + border-radius: 4px; + font-size: 0.85rem; +} +.product-name { + font-weight: 600; + color: #343a40; + display: block; + margin-bottom: 0.25rem; +} +.product-badges { + display: flex; + gap: 0.5rem; + font-size: 0.75rem; +} + +.vlans-container { + display: flex; + flex-wrap: wrap; + gap: 0.4rem; + margin-top: 0.5rem; +} +.vlan-chip { + font-size: 0.75rem; + padding: 2px 8px; + background: #e7f5ff; + color: #1971c2; + border: 1px solid #d0ebff; + border-radius: 12px; + cursor: pointer; + display: flex; + align-items: center; + gap: 4px; + transition: all 0.1s; +} +.vlan-chip:hover { + background: #d0ebff; +} +.vlan-chip input { + margin: 0; +} + +/* Action Column */ +.action-column { + justify-content: space-between; +} +.finish-toggle { display: flex; align-items: center; justify-content: space-between; - padding: 0.25rem; - background-color: #f1f3f5; - border-radius: 0.25rem; + background: #f8f9fa; + padding: 0.5rem; + border-radius: 4px; + margin-top: auto; + margin-bottom: 0.5rem; } -.mt-auto { - margin-top: auto !important; +.finish-toggle label { margin: 0; } + +/* --- Custom Modal --- */ +.custom-modal-overlay { + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: rgba(0,0,0,0.5); + z-index: 1050; + display: flex; + align-items: center; + justify-content: center; +} +.custom-modal-container { + background: #fff; + border-radius: 6px; + box-shadow: 0 10px 25px rgba(0,0,0,0.2); + width: 90%; + max-width: 500px; + overflow: hidden; + animation: modalSlideIn 0.2s ease-out; +} +@keyframes modalSlideIn { + from { opacity: 0; transform: translateY(-20px); } + to { opacity: 1; transform: translateY(0); } +} +.custom-modal-header { + padding: 1rem; + background: #f8f9fa; + border-bottom: 1px solid #e9ecef; + display: flex; + justify-content: space-between; + align-items: center; +} +.custom-modal-header h3 { + margin: 0; + font-size: 1.1rem; + color: #343a40; +} +.custom-modal-close { + background: none; + border: none; + font-size: 1.5rem; + line-height: 1; + color: #adb5bd; + cursor: pointer; +} +.custom-modal-close:hover { color: #495057; } +.custom-modal-body { + padding: 1.5rem; +} +.custom-modal-footer { + padding: 1rem; + border-top: 1px solid #e9ecef; + text-align: right; + background: #f8f9fa; } -/* --- VLAN Chip Styling --- */ -.vlans-container { display: flex; flex-wrap: wrap; gap: 0.5rem; } -.tt-chip { display: inline-flex; align-items: center; padding: 4px 10px; border-radius: 16px; background-color: #f1f3f5; border: 1px solid #dee2e6; font-size: 0.8em; white-space: nowrap; } -.tt-chip.is-checked { background-color: #e7f5ff; border-color: #a5d8ff; color: #1c7ed6; font-weight: 500; } -.tt-chip > * + * { margin-left: 6px; } -.tt-chip input[type="checkbox"] { margin: 0; cursor: pointer; } - -/* Responsive adjustments */ +/* Responsive */ @media (max-width: 1400px) { .cpe-card-content { - grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); + grid-template-columns: 1fr 1fr; } } -@media (max-width: 992px) { - .cpe-card-header { +@media (max-width: 768px) { + .cpe-card-content { grid-template-columns: 1fr; - gap: 0.75rem; } -} - -.tt-switch { - margin-bottom: 0 !important; + .cpe-card-header { + flex-direction: column; + align-items: flex-start; + } } \ No newline at end of file diff --git a/public/js/pages/Cpeprovisioning/Cpeprovisioning.js b/public/js/pages/Cpeprovisioning/Cpeprovisioning.js index 9d01244d0..63e1ad23e 100644 --- a/public/js/pages/Cpeprovisioning/Cpeprovisioning.js +++ b/public/js/pages/Cpeprovisioning/Cpeprovisioning.js @@ -8,18 +8,18 @@ Vue.component('tt-chip', { Vue.component('Cpeprovisioning', { template: `
{{ item.product_name }} {{ item.product_code }}
-- {{ item.access_type }} - {{ item.access_type_down }} - {{ item.access_type_up }} -
-