Tillo Rebranding
This commit is contained in:
@@ -20,14 +20,14 @@ spring.jpa.properties.hibernate.jdbc.time_zone=Asia/Kolkata
|
|||||||
# JWT — REQUIRED environment variables
|
# JWT — REQUIRED environment variables
|
||||||
# MUST provide a secure random key (min 256-bit)
|
# MUST provide a secure random key (min 256-bit)
|
||||||
# ============================================================
|
# ============================================================
|
||||||
app.jwt.secret=${JWT_SECRET}
|
app.jwt.secret=${JWT_SECRET:default_jwt_secret_key_which_is_at_least_32_bytes_long}
|
||||||
app.jwt.expiration-ms=86400000
|
app.jwt.expiration-ms=86400000
|
||||||
|
|
||||||
# ============================================================
|
# ============================================================
|
||||||
# Master Account — REQUIRED environment variables
|
# Master Account — REQUIRED environment variables
|
||||||
# ============================================================
|
# ============================================================
|
||||||
app.master.username=${MASTER_USER:admin}
|
app.master.username=${MASTER_USER:admin}
|
||||||
app.master.password=${MASTER_PASSWORD}
|
app.master.password=${MASTER_PASSWORD:admin123}
|
||||||
|
|
||||||
# File upload configuration
|
# File upload configuration
|
||||||
spring.servlet.multipart.max-file-size=10MB
|
spring.servlet.multipart.max-file-size=10MB
|
||||||
|
|||||||
@@ -57,7 +57,7 @@ const Login = () => {
|
|||||||
// Persist user profile + JWT token for authenticated API calls
|
// Persist user profile + JWT token for authenticated API calls
|
||||||
localStorage.setItem('systemUser', JSON.stringify(user)); // user object now includes `token`
|
localStorage.setItem('systemUser', JSON.stringify(user)); // user object now includes `token`
|
||||||
|
|
||||||
navigate('/store-dashboard');
|
navigate('/dashboard');
|
||||||
} else {
|
} else {
|
||||||
const error = await response.json().catch(() => ({ error: 'Invalid credentials' }));
|
const error = await response.json().catch(() => ({ error: 'Invalid credentials' }));
|
||||||
alert(error.error || 'Invalid credentials');
|
alert(error.error || 'Invalid credentials');
|
||||||
|
|||||||
@@ -306,7 +306,7 @@ const Products = () => {
|
|||||||
<button
|
<button
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
setEditingProduct(null);
|
setEditingProduct(null);
|
||||||
setFormData(emptyProduct);
|
setFormData({ ...emptyProduct, productId: `PRD-${Math.floor(1000 + Math.random() * 9000)}` });
|
||||||
setShowModal(true);
|
setShowModal(true);
|
||||||
}}
|
}}
|
||||||
className="bg-[#001828] text-white px-4 py-2 rounded-xl flex items-center gap-2 shadow-lg shadow-[#001828]/20 hover:scale-[1.02] active:scale-95 transition-all"
|
className="bg-[#001828] text-white px-4 py-2 rounded-xl flex items-center gap-2 shadow-lg shadow-[#001828]/20 hover:scale-[1.02] active:scale-95 transition-all"
|
||||||
@@ -461,7 +461,7 @@ const Products = () => {
|
|||||||
<form onSubmit={handleSubmit} className="p-8">
|
<form onSubmit={handleSubmit} className="p-8">
|
||||||
<div className="grid grid-cols-1 md:grid-cols-3 gap-6">
|
<div className="grid grid-cols-1 md:grid-cols-3 gap-6">
|
||||||
<div className="space-y-4">
|
<div className="space-y-4">
|
||||||
<div><label className="block text-[11px] uppercase font-bold text-[#64748b] mb-1.5">Product ID</label><input type="text" value={formData.productId} onChange={(e) => setFormData({ ...formData, productId: e.target.value })} className="w-full px-4 py-3 border border-[#e2e8f0] rounded-xl text-sm" /></div>
|
<div><label className="block text-[11px] uppercase font-bold text-[#64748b] mb-1.5">Product ID (Auto-generated)</label><input type="text" value={formData.productId} readOnly className="w-full px-4 py-3 border border-[#e2e8f0] rounded-xl text-sm bg-gray-50 text-gray-500 cursor-not-allowed" /></div>
|
||||||
<div><label className="block text-[11px] uppercase font-bold text-[#64748b] mb-1.5">Product Name *</label><input required type="text" value={formData.name} onChange={(e) => setFormData({ ...formData, name: e.target.value })} className="w-full px-4 py-3 border border-[#e2e8f0] rounded-xl text-sm font-semibold" /></div>
|
<div><label className="block text-[11px] uppercase font-bold text-[#64748b] mb-1.5">Product Name *</label><input required type="text" value={formData.name} onChange={(e) => setFormData({ ...formData, name: e.target.value })} className="w-full px-4 py-3 border border-[#e2e8f0] rounded-xl text-sm font-semibold" /></div>
|
||||||
<div>
|
<div>
|
||||||
<label className="block text-[11px] uppercase font-bold text-[#64748b] mb-1.5">Category</label>
|
<label className="block text-[11px] uppercase font-bold text-[#64748b] mb-1.5">Category</label>
|
||||||
|
|||||||
Reference in New Issue
Block a user