migrating vendor frontend to new architecture
This commit is contained in:
110
static/vendor/js/login.js
vendored
Normal file
110
static/vendor/js/login.js
vendored
Normal file
@@ -0,0 +1,110 @@
|
||||
// app/static/vendor/js/login.js
|
||||
/**
|
||||
* Vendor login page logic
|
||||
*/
|
||||
|
||||
// ✅ Use centralized logger - ONE LINE!
|
||||
// Create custom logger for login page
|
||||
const loginLog = window.LogConfig.createLogger('LOGIN');
|
||||
|
||||
function vendorLogin() {
|
||||
return {
|
||||
credentials: {
|
||||
username: '',
|
||||
password: ''
|
||||
},
|
||||
vendor: null,
|
||||
vendorCode: null,
|
||||
loading: false,
|
||||
checked: false,
|
||||
error: '',
|
||||
success: '',
|
||||
errors: {},
|
||||
dark: false,
|
||||
|
||||
async init() {
|
||||
// Load theme
|
||||
const theme = localStorage.getItem('theme');
|
||||
if (theme === 'dark') {
|
||||
this.dark = true;
|
||||
}
|
||||
|
||||
// Get vendor code from URL path
|
||||
const pathSegments = window.location.pathname.split('/').filter(Boolean);
|
||||
if (pathSegments[0] === 'vendor' && pathSegments[1]) {
|
||||
this.vendorCode = pathSegments[1];
|
||||
await this.loadVendor();
|
||||
}
|
||||
this.checked = true;
|
||||
},
|
||||
|
||||
async loadVendor() {
|
||||
this.loading = true;
|
||||
try {
|
||||
const response = await apiClient.get(`/vendor/${this.vendorCode}`);
|
||||
this.vendor = response;
|
||||
logInfo('Vendor loaded', this.vendor);
|
||||
} catch (error) {
|
||||
logError('Failed to load vendor', error);
|
||||
this.error = 'Failed to load vendor information';
|
||||
} finally {
|
||||
this.loading = false;
|
||||
}
|
||||
},
|
||||
|
||||
async handleLogin() {
|
||||
this.clearErrors();
|
||||
this.loading = true;
|
||||
|
||||
try {
|
||||
if (!this.credentials.username) {
|
||||
this.errors.username = 'Username is required';
|
||||
}
|
||||
if (!this.credentials.password) {
|
||||
this.errors.password = 'Password is required';
|
||||
}
|
||||
|
||||
if (Object.keys(this.errors).length > 0) {
|
||||
this.loading = false;
|
||||
return;
|
||||
}
|
||||
|
||||
const response = await apiClient.post('/vendor/auth/login', {
|
||||
username: this.credentials.username,
|
||||
password: this.credentials.password,
|
||||
vendor_code: this.vendorCode
|
||||
});
|
||||
|
||||
logInfo('Login successful', response);
|
||||
|
||||
localStorage.setItem('accessToken', response.access_token);
|
||||
localStorage.setItem('currentUser', JSON.stringify(response.user));
|
||||
localStorage.setItem('vendorCode', this.vendorCode);
|
||||
|
||||
this.success = 'Login successful! Redirecting...';
|
||||
|
||||
setTimeout(() => {
|
||||
window.location.href = `/vendor/${this.vendorCode}/dashboard`;
|
||||
}, 1000);
|
||||
|
||||
} catch (error) {
|
||||
logError('Login failed', error);
|
||||
|
||||
if (error.status === 401) {
|
||||
this.error = 'Invalid username or password';
|
||||
} else if (error.status === 403) {
|
||||
this.error = 'Your account does not have access to this vendor';
|
||||
} else {
|
||||
this.error = error.message || 'Login failed. Please try again.';
|
||||
}
|
||||
} finally {
|
||||
this.loading = false;
|
||||
}
|
||||
},
|
||||
|
||||
clearErrors() {
|
||||
this.error = '';
|
||||
this.errors = {};
|
||||
}
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user