Files
formipay/src/admin/components/settings/GlobalSettings.css
dwindown 3e6c06178c feat: build Global Settings and Product Editor (F2.18-F2.19)
Settings:
- GlobalSettings page with tabbed interface
- Replace WPCFTO framework with React components
- Tabs: General, Payment, Pages, Customer
- Multicurrency settings with default currency selector
- AJAX save functionality with status feedback

Product Editor:
- VariationPricingTable - Complete recreation of Vue app
- Multi-currency flat pricing (columns mode)
- Multi-currency expanded mode (inner tables per variation)
- Dynamic rows from attribute repeater (MutationObserver + polling)
- Decimal digits per currency (affects step value)
- Required field validation (default currency price required)
- Real-time JSON update to hidden input
- SweetAlert2 integration for validation errors
- Stock and weight fields per variation
- Delete variation support

Migration:
- Preserves data compatibility with Vue app format
- Same data structure: {key, name, stock, weight, active, prices[]}
- Prices array with currency triple format: 'code:::name:::symbol'
- Sorts default currency first in prices array

See MIGRATION_STRATEGY.md for full migration details
2026-04-18 12:33:50 +07:00

111 lines
1.8 KiB
CSS

.formipay-global-settings {
display: flex;
flex-direction: column;
height: 100%;
background: #f6f7f7;
}
.formipay-settings-header {
display: flex;
justify-content: space-between;
align-items: center;
padding: 16px 20px;
background: #fff;
border-bottom: 1px solid #e0e0e0;
}
.formipay-settings-header h1 {
margin: 0;
font-size: 20px;
font-weight: 600;
display: flex;
align-items: center;
gap: 10px;
}
.formipay-settings-header svg {
fill: #1e1e1e;
}
.header-actions {
display: flex;
align-items: center;
gap: 12px;
}
.save-success {
color: #28a745;
font-size: 13px;
font-weight: 600;
}
.save-error {
color: #dc3545;
font-size: 13px;
font-weight: 600;
}
.formipay-settings-content {
display: flex;
flex: 1;
overflow: hidden;
}
.formipay-settings-tabs {
display: flex;
flex-direction: column;
width: 200px;
background: #fff;
border-right: 1px solid #e0e0e0;
}
.tab-button {
display: flex;
align-items: center;
gap: 10px;
padding: 12px 16px;
border: none;
background: transparent;
text-align: left;
cursor: pointer;
transition: background 0.2s;
border-left: 3px solid transparent;
}
.tab-button:hover {
background: #f6f7f7;
}
.tab-button.is-active {
background: #f0f6fc;
border-left-color: #2271b1;
}
.tab-button .dashicons {
font-size: 16px;
width: 16px;
height: 16px;
}
.formipay-settings-panel {
flex: 1;
padding: 20px;
overflow-y: auto;
}
.settings-panel {
max-width: 800px;
}
.settings-panel .components-panel__body {
border: 1px solid #e0e0e0;
}
.form-label {
display: block;
font-size: 13px;
font-weight: 600;
color: #1e1e1e;
margin-bottom: 4px;
}