منصة أقطار الخدمات التجارية
إلكترونيات
ملابس
مستلزمات منزلية
أدوات مكتبية
ألعاب وهوايات
منتجات غذائية
صحة وجمال
منتج 1

منتج 1 عالي الجودة

وصف مختصر للمنتج 1 يوضح مواصفاته وفوائده.

200 ريال
منتج 2

منتج 2 مميز

وصف مختصر للمنتج 2 مع تفاصيل عن الاستخدام.

350 ريال
منتج 3

منتج 3 بأسعار تنافسية

شرح مختصر للمنتج 3 مع ميزاته الأساسية.

150 ريال
منتج 4

منتج 4 جديد

تفاصيل مختصرة عن المنتج 4 ومميزاته.

400 ريال

فيديوهات قصيرة ترويجية

منتج 1 في فيديو

منتج 2 في فيديو

نظام الموردين العالمي

تسجيل مورد جديد

قائمة الموردين

جدول يعرض الموردين المسجلين مع إمكانية عرض التفاصيل
اسم المورد الدولة التخصص عرض التفاصيل
ضف عليه منصة محادثة ومكالمات وإنترنت margin: 0; padding: 0; box-sizing: border-box; } body { font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; background-color: #f5f7fa; color: #333; line-height: 1.6; direction: rtl; padding: 20px; max-width: 1200px; margin: auto; } header { background-color: #007a33; padding: 15px 30px; color: white; display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; border-radius: 8px; margin-bottom: 20px; } header .logo { font-size: 1.8em; font-weight: bold; cursor: pointer; } h1 { color: #007a33; margin-bottom: 10px; text-align: center; } /* قسم اختيار القالب */ #templateSelector { max-width: 600px; margin: 0 auto 30px; text-align: center; } #templateSelector label { margin: 0 10px; cursor: pointer; font-weight: 600; color: #007a33; } #templateSelector input[type="radio"] { margin-left: 6px; cursor: pointer; } /* القالب: شبكة */ .products-grid { display: grid; grid-template-columns: repeat(auto-fill,minmax(250px,1fr)); gap: 20px; margin-bottom: 40px; } /* القالب: قائمة */ .products-list { display: flex; flex-direction: column; gap: 15px; margin-bottom: 40px; } .product-list-item { background: white; border-radius: 10px; box-shadow: 0 2px 12px rgba(0,0,0,0.1); padding: 15px; display: flex; align-items: center; gap: 15px; cursor: pointer; transition: background-color 0.3s ease; } .product-list-item:hover { background-color: #e0f2e9; } .product-list-image { width: 120px; height: 90px; object-fit: cover; border-radius: 8px; flex-shrink: 0; } .product-list-details { flex-grow: 1; } .product-list-title { font-weight: 700; font-size: 1.2em; color: #007a33; margin-bottom: 5px; } .product-list-description { font-size: 0.9em; color: #555; margin-bottom: 8px; } .product-list-price { font-weight: 700; color: #e74c3c; font-size: 1.1em; } .product-list-buy-btn { background-color: #007a33; color: white; border: none; padding: 8px 15px; border-radius: 6px; font-weight: 700; cursor: pointer; transition: background-color 0.3s ease; flex-shrink: 0; } .product-list-buy-btn:hover { background-color: #005d24; } /* القالب: بطاقات كبيرة */ .products-large-cards { display: flex; flex-wrap: wrap; gap: 25px; justify-content: center; margin-bottom: 40px; } .product-large-card { background-color: white; border-radius: 15px; box-shadow: 0 4px 20px rgba(0,0,0,0.15); width: 320px; display: flex; flex-direction: column; overflow: hidden; cursor: pointer; transition: transform 0.3s ease; } .product-large-card:hover { transform: translateY(-8px); } .product-large-image { width: 100%; height: 220px; object-fit: cover; } .product-large-details { padding: 20px; flex-grow: 1; display: flex; flex-direction: column; justify-content: space-between; } .product-large-title { font-weight: 800; font-size: 1.3em; color: #007a33; margin-bottom: 12px; } .product-large-description { font-size: 1em; color: #444; margin-bottom: 18px; min-height: 70px; } .product-large-price { font-weight: 900; color: #e74c3c; font-size: 1.4em; margin-bottom: 15px; } .product-large-buy-btn { background-color: #007a33; color: white; border: none; padding: 14px; border-radius: 10px; font-weight: 800; cursor: pointer; transition: background-color 0.3s ease; width: 100%; } .product-large-buy-btn:hover { background-color: #005d24; } /* سلة المشتريات */ #cart { background: white; padding: 20px; border-radius: 10px; box-shadow: 0 2px 12px rgba(0,0,0,0.1); max-width: 800px; margin: 0 auto 40px; } #cart h2 { margin-top: 0; color: #007a33; margin-bottom: 15px; text-align: center; } #cart-items { list-style: none; padding: 0; margin-bottom: 10px; } #cart-items li { display: flex; justify-content: space-between; padding: 8px 0; border-bottom: 1px solid #ddd; font-weight: 600; } #cart-items li button { background: #e74c3c; border: none; color: white; border-radius: 5px; cursor: pointer; padding: 2px 8px; font-size: 0.9em; transition: background-color 0.3s ease; } #cart-items li button:hover { background-color: #c0392b; } #cart-total { font-weight: 700; margin-top: 10px; text-align: right; font-size: 1.2em; color: #27ae60; } #checkoutBtn, #goToCheckoutBtn { margin-top: 15px; background-color: #e67e22; color: white; border: none; padding: 12px 25px; border-radius: 8px; cursor: pointer; font-weight: 700; width: 100%; font-size: 1.1em; transition: background-color 0.3s ease; } #checkoutBtn:hover, #goToCheckoutBtn:hover { background-color: #cf711a; } /* صفحة الدفع (مخفية بشكل افتراضي) */ #checkoutSection { display: none; background: white; padding: 20px; border-radius: 10px; box-shadow: 0 2px 12px rgba(0,0,0,0.1); max-width: 600px; margin: 0 auto 40px; } #checkoutSection h2 { color: #007a33; margin-bottom: 20px; text-align: center; } #checkoutForm label { display: block; margin-top: 15px; font-weight: 600; } #checkoutForm input { width: 100%; padding: 10px; margin-top: 5px; border-radius: 6px; border: 1px solid #ccc; font-size: 1em; box-sizing: border-box; } #checkoutForm button { margin-top: 25px; background-color: #007a33; color: white; border: none; padding: 12px 25px; border-radius: 8px; cursor: pointer; font-weight: 700; width: 100%; font-size: 1.1em; transition: background-color 0.3s ease; } #checkoutForm button:hover { background-color: #005d24; } #checkoutMessage { margin-top: 15px; font-weight: 600; color: red; text-align: center;

متجر أقطار - عرض المنتجات

اختر قالب العرض:

سلة المشتريات

الإجمالي: 0 ريال

إتمام الطلب

مراجعات المنتج

const reviewsModal = document.getElementById('reviewsModal'); const reviewsContent = document.getElementById('reviewsContent'); const closeReviewsBtn = reviewsModal.querySelector('.close-btn'); const reviewForm = document.getElementById('reviewForm'); let currentReviewProductId = null; // فتح النافذة وعرض المراجعات productsContainer.addEventListener('click', e => { if (e.target.classList.contains('reviews-btn')) { const id = e.target.dataset.id; currentReviewProductId = id; const product = products.find(p => p._id === id); if (!product) return; // بناء قائمة المراجعات if (!product.reviews || product.reviews.length === 0) { reviewsContent.innerHTML = '

لا توجد مراجعات لهذا المنتج بعد.

'; } else { reviewsContent.innerHTML = product.reviews.map(r => `
${r.name}
${createStarRating(r.rating)}
${r.text}
`).join(''); } reviewsModal.style.display = 'block'; reviewsModal.focus(); } }); // إغلاق النافذة closeReviewsBtn.addEventListener('click', () => { reviewsModal.style.display = 'none'; reviewForm.reset(); }); // إرسال مراجعة جديدة reviewForm.addEventListener('submit', e => { e.preventDefault(); const name = document.getElementById('reviewerName').value.trim(); const text = document.getElementById('reviewText').value.trim(); const rating = parseInt(document.getElementById('reviewRating').value); if (!name || !text || !rating) { alert('يرجى ملء جميع حقول المراجعة.'); return; } // إرسال مراجعة إلى الخادم (API) - مثال: fetch(`/api/store/${storeDomain}/products/${currentReviewProductId}/reviews`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ name, text, rating }), }) .then(res => res.json()) .then(data => { if (data.success) { alert('تم إضافة المراجعة بنجاح.'); // تحديث المراجعات محلياً (أو إعادة جلب من الخادم) const product = products.find(p => p._id === currentReviewProductId); if (!product.reviews) product.reviews = []; product.reviews.push({ name, text, rating }); reviewForm.reset(); // تحديث عرض المراجعات reviewsContent.innerHTML = product.reviews.map(r => `
${r.name}
${createStarRating(r.rating)}
${r.text}
`).join(''); renderProducts(); // لتحديث التقييم العام في البطاقات } else { alert('حدث خطأ أثناء إضافة المراجعة.'); } }) .catch(() => alert('فشل في الاتصال بالخادم.')); });

لوحة تحكم الطلبات

رقم الطلب العميل البريد الإلكتروني الهاتف الإجمالي الحالة تحديث الحالة تفاصيل
لوحة تحكم المتجر - منصة أقطار

لوحة تحكم المتجر

العنوان الوصف السعر الصورة إجراءات
require('dotenv').config(); const express = require('express'); const cors = require('cors'); const mongoose = require('mongoose'); const bcrypt = require('bcryptjs'); const jwt = require('jsonwebtoken'); const nodemailer = require('nodemailer'); const app = express(); app.use(cors()); app.use(express.json()); // الاتصال بقاعدة البيانات mongoose.connect(process.env.MONGO_URI, { useNewUrlParser: true, useUnifiedTopology: true, }).then(() => console.log('Connected to MongoDB')) .catch(err => console.error('MongoDB connection error:', err)); // نماذج البيانات (Schemas) const userSchema = new mongoose.Schema({ name: String, email: { type: String, unique: true }, passwordHash: String, isVerified: { type: Boolean, default: false }, verificationCode: String, }); const storeSchema = new mongoose.Schema({ owner: { type: mongoose.Schema.Types.ObjectId, ref: 'User' }, name: String, domain: { type: String, unique: true }, description: String, products: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Product' }], }); const productSchema = new mongoose.Schema({ store: { type: mongoose.Schema.Types.ObjectId, ref: 'Store' }, title: String, description: String, price: Number, image: String, }); const User = mongoose.model('User', userSchema); const Store = mongoose.model('Store', storeSchema); const Product = mongoose.model('Product', productSchema); // إعداد خدمة البريد الإلكتروني const transporter = nodemailer.createTransport({ service: process.env.EMAIL_SERVICE, auth: { user: process.env.EMAIL_USER, pass: process.env.EMAIL_PASS, }, }); // دالة إرسال رمز التحقق عبر البريد async function sendVerificationEmail(email, code) { const mailOptions = { from: process.env.EMAIL_USER, to: email, subject: 'رمز التحقق لمنصة أقطار', text: `رمز التحقق الخاص بك هو: ${code}`, }; await transporter.sendMail(mailOptions); } // تسجيل مستخدم جديد مع إرسال رمز تحقق app.post('/api/register', async (req, res) => { try { const { name, email, password } = req.body; if (!name || !email || !password) return res.status(400).json({ message: 'جميع الحقول مطلوبة' }); const existingUser = await User.findOne({ email }); if (existingUser) return res.status(400).json({ message: 'البريد الإلكتروني مستخدم مسبقاً' }); const passwordHash = await bcrypt.hash(password, 10); const verificationCode = Math.floor(100000 + Math.random() * 900000).toString(); const user = new User({ name, email, passwordHash, verificationCode }); await user.save(); await sendVerificationEmail(email, verificationCode); res.status(201).json({ message: 'تم التسجيل، يرجى التحقق من بريدك الإلكتروني' }); } catch (err) { console.error(err); res.status(500).json({ message: 'خطأ في الخادم' }); } }); // تحقق البريد (تستقبل رمز التحقق) app.post('/api/verify-email', async (req, res) => { try { const { email, code } = req.body; const user = await User.findOne({ email }); if (!user) return res.status(400).json({ message: 'البريد غير موجود' }); if (user.isVerified) return res.status(400).json({ message: 'البريد مفعل مسبقاً' }); if (user.verificationCode === code) { user.isVerified = true; user.verificationCode = null; await user.save(); return res.json({ message: 'تم التحقق بنجاح' }); } else { return res.status(400).json({ message: 'رمز التحقق غير صحيح' }); } } catch (err) { res.status(500).json({ message: 'خطأ في الخادم' }); } }); // تسجيل الدخول app.post('/api/login', async (req, res) => { try { const { email, password } = req.body; if (!email || !password) return res.status(400).json({ message: 'جميع الحقول مطلوبة' }); const user = await User.findOne({ email }); if (!user) return res.status(400).json({ message: 'البريد أو كلمة المرور غير صحيحة' }); if (!user.isVerified) return res.status(400).json({ message: 'يرجى التحقق من بريدك الإلكتروني أولاً' }); const isMatch = await bcrypt.compare(password, user.passwordHash); if (!isMatch) return res.status(400).json({ message: 'البريد أو كلمة المرور غير صحيحة' }); const token = jwt.sign({ userId: user._id }, process.env.JWT_SECRET, { expiresIn: '7d' }); res.json({ token, name: user.name }); } catch (err) { res.status(500).json({ message: 'خطأ في الخادم' }); } }); // Middleware للتحقق من التوكن function authMiddleware(req, res, next) { const authHeader = req.headers.authorization; if (!authHeader) return res.status(401).json({ message: 'مطلوب تسجيل الدخول' }); const token = authHeader.split(' ')[1]; if (!token) return res.status(401).json({ message: 'مطلوب تسجيل الدخول' }); try { const decoded = jwt.verify(token, process.env.JWT_SECRET); req.userId = decoded.userId; next(); } catch { return res.status(401).json({ message: 'توكين غير صالح' }); } } // إنشاء متجر جديد app.post('/api/create-store', authMiddleware, async (req, res) => { try { const { storeName, storeDomain, storeDescription } = req.body; if (!storeName || !storeDomain) return res.status(400).json({ message: 'اسم المتجر والنطاق مطلوبان' }); const existing = await Store.findOne({ domain: storeDomain }); if (existing) return res.status(400).json({ message: 'النطاق مستخدم مسبقاً' }); const store = new Store({ owner: req.userId, name: storeName, domain: storeDomain.toLowerCase(), description: storeDescription, products: [], }); await store.save(); res.status(201).json({ message: 'تم إنشاء المتجر بنجاح', store }); } catch (err) { console.error(err); res.status(500).json({ message: 'خطأ في الخادم' }); } }); // إضافة منتج جديد للمتجر app.post('/api/store/:domain/products', authMiddleware, async (req, res) => { try { const { domain } = req.params; const { title, description, price, image } = req.body; const store = await Store.findOne({ domain, owner: req.userId }); if (!store) return res.status(404).json({ message: 'المتجر غير موجود أو لا تملك صلاحية' }); const product = new Product({ store: store._id, title, description, price, image, }); await product.save(); store.products.push(product._id); await store.save(); res.status(201).json({ message: 'تم إضافة المنتج', product }); } catch (err) { res.status(500).json({ message: 'خطأ في الخادم' }); } }); // جلب بيانات المتجر مع المنتجات app.get('/store/:domain', async (req, res) => { try { const { domain } = req.params; const store = await Store.findOne({ domain }).populate('products'); if (!store) return res.status(404).json({ message: 'المتجر غير موجود' }); res.json({ store }); } catch (err) { res.status(500).json({ message: 'خطأ في الخادم' }); } }); // بدء الخادم const PORT = process.env.PORT || 3000; app.listen(PORT, () => console.log(`Server running on port ${PORT}`)); PORT=3000 MONGO_URI=mongodb://localhost:27017/aqtar-platform JWT_SECRET=your_jwt_secret_here EMAIL_USER=your_email@example.com EMAIL_PASS=your_email_password EMAIL_SERVICE=gmail إنشاء متجر إلكتروني جديد - منصة أقطار

إنشاء متجر إلكتروني جديد

تسجيل الدخول / التسجيل - منصة أقطار

تسجيل الدخول

require('dotenv').config(); const express = require('express'); const { Shopify, ApiVersion } = require('@shopify/shopify-api'); const app = express(); const port = 3000; // إعداد Shopify API Shopify.Context.initialize({ API_KEY: process.env.SHOPIFY_API_KEY, API_SECRET_KEY: process.env.SHOPIFY_API_SECRET, SCOPES: process.env.SHOPIFY_SCOPES.split(","), HOST_NAME: process.env.SHOPIFY_HOST.replace(/https?:\/\//, ""), API_VERSION: ApiVersion.July22, IS_EMBEDDED_APP: false, SESSION_STORAGE: new Shopify.Session.MemorySessionStorage(), }); // مسار بدء المصادقة مع شوبيفي app.get('/shopify/auth', async (req, res) => { const shop = req.query.shop; if (!shop) return res.status(400).send('يجب تحديد اسم المتجر shop'); const authRoute = await Shopify.Auth.beginAuth( req, res, shop, '/shopify/callback', false ); return res.redirect(authRoute); }); // مسار استلام رمز المصادقة (callback) app.get('/shopify/callback', async (req, res) => { try { const session = await Shopify.Auth.validateAuthCallback(req, res, req.query); // يتحقق من صحة الطلب // هنا يمكنك حفظ session أو token في قاعدة بياناتك حسب حاجتك res.send('تم تسجيل الدخول بنجاح إلى متجر شوبيفي: ' + session.shop); } catch (error) { console.error(error); res.status(500).send('خطأ في المصادقة'); } }); // باقي الكود الخاص بك (نظام تسجيل الدخول، لوحة التحكم، إلخ) // ... app.listen(port, () => { console.log(`المنصة تعمل على http://localhost:${port}`); }); منصة ربط GitHub - لوحة التحكم

منصة ربط GitHub - لوحة التحكم

الحالة الحالية للمستودع



    

تحديث المستودع



    

سجل آخر 10 Commits



    

تقرير المستودع


  
const express = require('express'); const jwt = require('jsonwebtoken'); const bcrypt = require('bcryptjs'); const bodyParser = require('body-parser'); const cookieParser = require('cookie-parser'); const { exec } = require('child_process'); const path = require('path'); const app = express(); const port = 3000; const SECRET_KEY = 'your_strong_secret_key_here'; // غيّرها لمفتاح قوي وسري const USER = { username: 'admin', passwordHash: '' }; // إنشاء هاش كلمة المرور (نفذ مرة واحدة فقط) (async () => { const hash = await bcrypt.hash('admin123', 10); USER.passwordHash = hash; })(); app.use(bodyParser.json()); app.use(cookieParser()); app.use(express.static(path.join(__dirname, 'public'))); // Middleware للتحقق من التوكن function authenticateToken(req, res, next) { const token = req.cookies.token; if (!token) return res.status(401).send('غير مصرح'); jwt.verify(token, SECRET_KEY, (err, user) => { if (err) return res.status(403).send('غير مصرح'); req.user = user; next(); }); } // تسجيل الدخول app.post('/login', async (req, res) => { const { username, password } = req.body; if (username !== USER.username) return res.status(400).json({ success: false, message: 'اسم المستخدم غير صحيح' }); const valid = await bcrypt.compare(password, USER.passwordHash); if (!valid) return res.status(400).json({ success: false, message: 'كلمة المرور غير صحيحة' }); const token = jwt.sign({ username }, SECRET_KEY, { expiresIn: '1h' }); res.cookie('token', token, { httpOnly: true }); res.json({ success: true, message: 'تم تسجيل الدخول بنجاح' }); }); // تسجيل الخروج app.post('/logout', (req, res) => { res.clearCookie('token'); res.json({ success: true, message: 'تم تسجيل الخروج' }); }); // عرض آخر Commit app.get('/status', authenticateToken, (req, res) => { exec('git log -1 --pretty=format:"%h - %an, %ar : %s"', (err, stdout) => { if (err) return res.status(500).json({ success: false, message: 'خطأ في جلب حالة المستودع' }); res.json({ success: true, data: `آخر Commit: ${stdout}` }); }); }); // سحب التحديثات app.post('/pull', authenticateToken, (req, res) => { exec('git pull', (err, stdout, stderr) => { if (err) return res.status(500).json({ success: false, message: `خطأ في التحديث: ${stderr}` }); res.json({ success: true, message: `تم التحديث بنجاح:\n${stdout}` }); }); }); // عرض سجل آخر 10 commits app.get('/commits', authenticateToken, (req, res) => { exec('git log --pretty=format:"%h - %an, %ar : %s" -n 10', (err, stdout) => { if (err) return res.status(500).json({ success: false, message: 'خطأ في جلب سجل commits' }); const commits = stdout.split('\n'); res.json({ success: true, commits }); }); }); // تقرير مفصل عن المستودع app.get('/report', authenticateToken, (req, res) => { exec('git rev-list --count HEAD', (err, commitCount) => { if (err) return res.status(500).json({ success: false, message: 'خطأ في جلب عدد commits' }); exec('git log -1 --format=%cd', (err2, lastCommitDate) => { if (err2) return res.status(500).json({ success: false, message: 'خطأ في جلب تاريخ آخر commit' }); exec('git diff --shortstat', (err3, diffStat) => { if (err3) return res.status(500).json({ success: false, message: 'خطأ في جلب حالة التغييرات' }); res.json({ success: true, report: { totalCommits: commitCount.trim(), lastCommitDate: lastCommitDate.trim(), changesSummary: diffStat.trim() || 'لا توجد تغييرات غير ملتزمة' } }); }); }); }); }); // توجيه الطلبات غير المعروفة إلى صفحة الواجهة app.get('*', (req, res) => { res.sendFile(path.join(__dirname, 'public', 'index.html')); }); app.listen(port, () => { console.log(`المنصة تعمل على http://localhost:${port}`); }); const express = require('express'); const mongoose = require('mongoose'); const cors = require('cors'); const app = express(); const PORT = process.env.PORT || 3000; // إعدادات Middleware app.use(cors()); app.use(express.json()); // --- الاتصال بقاعدة البيانات --- // غيّر الرابط حسب إعداداتك mongoose.connect('mongodb://localhost:27017/aqtar_store', { useNewUrlParser: true, useUnifiedTopology: true, }) .then(() => console.log('تم الاتصال بقاعدة البيانات')) .catch(err => console.error('خطأ في الاتصال بقاعدة البيانات:', err)); // --- تعريف المخططات --- // مراجعة const ReviewSchema = new mongoose.Schema({ name: String, text: String, rating: { type: Number, min: 1, max: 5 }, createdAt: { type: Date, default: Date.now } }); // منتج const ProductSchema = new mongoose.Schema({ _id: String, // معرف فريد (يمكنك توليده يدوياً أو تلقائياً) title: String, description: String, price: Number, image: String, rating: { type: Number, default: 0 }, reviews: [ReviewSchema] }); // طلب const OrderSchema = new mongoose.Schema({ products: [{ _id: String, title: String, price: Number, quantity: Number, }], customerName: String, customerEmail: String, customerPhone: String, totalPrice: Number, status: { type: String, default: 'جديد' }, // جديد، قيد المعالجة، مكتمل، ملغي createdAt: { type: Date, default: Date.now } }); // متجر const StoreSchema = new mongoose.Schema({ domain: { type: String, unique: true }, store: { name: String, products: [ProductSchema] } }); const Store = mongoose.model('Store', StoreSchema); const Order = mongoose.model('Order', OrderSchema); // --- Middleware للتحقق من صلاحية المسؤول (بسيط) --- function adminAuth(req, res, next) { const auth = req.headers.authorization; // تحقق بسيط: يجب أن يكون header Authorization: "Bearer secret123" if (auth === 'Bearer secret123') { next(); } else { res.status(401).json({ message: 'غير مصرح' }); } } // --- APIs --- // جلب بيانات متجر مع المنتجات app.get('/store/:domain', async (req, res) => { try { const store = await Store.findOne({ domain: req.params.domain }); if (!store) return res.status(404).json({ message: 'المتجر غير موجود' }); res.json(store); } catch (err) { res.status(500).json({ message: 'خطأ في الخادم' }); } }); // إنشاء طلب جديد app.post('/api/store/:domain/orders', async (req, res) => { try { const { products, customerName, customerEmail, customerPhone } = req.body; if (!products || !customerName || !customerEmail || !customerPhone) { return res.status(400).json({ message: 'بيانات غير كاملة' }); } // حساب الإجمالي let totalPrice = 0; products.forEach(p => { totalPrice += p.price * p.quantity; }); const newOrder = new Order({ products, customerName, customerEmail, customerPhone, totalPrice, status: 'جديد' }); await newOrder.save(); res.json({ success: true, orderId: newOrder._id }); } catch (err) { res.status(500).json({ message: 'خطأ في الخادم' }); } }); // جلب كل الطلبات (لوحة تحكم) - محمي app.get('/api/store/:domain/orders', adminAuth, async (req, res) => { try { const orders = await Order.find().sort({ createdAt: -1 }); res.json(orders); } catch (err) { res.status(500).json({ message: 'خطأ في الخادم' }); } }); // تحديث حالة طلب - محمي app.put('/api/store/:domain/orders/:orderId', adminAuth, async (req, res) => { try { const { status } = req.body; if (!status) return res.status(400).json({ message: 'حالة الطلب مطلوبة' }); const order = await Order.findById(req.params.orderId); if (!order) return res.status(404).json({ message: 'الطلب غير موجود' }); order.status = status; await order.save(); res.json({ success: true }); } catch (err) { res.status(500).json({ message: 'خطأ في الخادم' }); } }); // جلب تفاصيل طلب app.get('/api/store/:domain/orders/:orderId', adminAuth, async (req, res) => { try { const order = await Order.findById(req.params.orderId); if (!order) return res.status(404).json({ message: 'الطلب غير موجود' }); res.json(order); } catch (err) { res.status(500).json({ message: 'خطأ في الخادم' }); } }); // إضافة مراجعة لمنتج app.post('/api/store/:domain/products/:productId/reviews', async (req, res) => { try { const { name, text, rating } = req.body; if (!name || !text || !rating) { return res.status(400).json({ message: 'بيانات المراجعة غير كاملة' }); } const store = await Store.findOne({ domain: req.params.domain }); if (!store) return res.status(404).json({ message: 'المتجر غير موجود' }); const product = store.store.products.id(req.params.productId) || store.store.products.find(p => p._id === req.params.productId); if (!product) return res.status(404).json({ message: 'المنتج غير موجود' }); product.reviews.push({ name, text, rating }); // تحديث متوسط التقييم const totalRating = product.reviews.reduce((sum, r) => sum + r.rating, 0); product.rating = totalRating / product.reviews.length; await store.save(); res.json({ success: true }); } catch (err) { res.status(500).json({ message: 'خطأ في الخادم' }); } }); // --- بدء الخادم --- app.listen(PORT, () => { console.log(`الخادم يعمل على المنفذ ${PORT}`); }); لوحة تحكم المتجر - منصة أقطار

لوحة تحكم المتجر

العنوان الوصف السعر الصورة إجراءات
class="page-width-normal card-hover-effect-none"> Skip to content
Your cart is empty

Have an account? Log in to check out faster.

Continue shopping
غنى للطيب والطبيعة | متجر ذكي متطور
منتجات طبيعية 100%
شحن سريع وآمن
عطور فاخرة من الطبيعة
دعم ذكي على مدار الساعة

عطر الطبيعة... رفاهية المستقبل

اكتشف تشكيلتنا الذكية من العطور والزيوت الطبيعية الفاخرة. جودة أصلية، توصيل سريع، ودعم ذكي على مدار الساعة.

تسوق الآن
منتجات مختارة من غنى
عطر الربيع النقي

عطر الربيع النقي

نسمات طبيعية منعشة مستوحاة من أزهار الربيع، ثبات يدوم طويلًا.
220 ر.س
تسوق الآن
زيت الورد العضوي

زيت الورد العضوي

مستخلص نقي 100%، يمنحك نعومة ورائحة فاخرة للبشرة والشعر.
145 ر.س
تسوق الآن
مسك الطهارة الأصلي

مسك الطهارة الأصلي

نقاء المسك الأبيض الطبيعي، انتعاش يدوم طوال اليوم.
99 ر.س
تسوق الآن

عن غنى للطيب والطبيعة

تأسس متجر غنى ليقدم لك تجربة تسوق عصرية تجمع بين أصالة العطور الشرقية ونقاء الزيوت الطبيعية. جميع منتجاتنا مختارة بعناية من مصادر طبيعية وعضوية، مع ضمان الجودة والأمان، لتكون غنى وجهتك الأولى لجمال ورائحة تدوم.

تواصل معنا

جميع الحقوق محفوظة © غنى للطيب والطبيعة 2025
الدخول والتسجيل والبحث - غنى للطيب والطبيعة

غنى للطيب والطبيعة

تسجيل الدخول

ليس لديك حساب؟ سجل الآن
زيت اللافندر الطبيعي

زيت اللافندر الطبيعي

زيت عطري نقي 100% من زهور اللافندر، يساعد على الاسترخاء وتحسين جودة النوم.

35 ر.س
صابونة الكركم

صابونة الكركم الطبيعية

صابون يدوي الصنع بخلاصة الكركم وزيت الزيتون لنضارة البشرة وتوحيد لونها.

20 ر.س
شاي الأعشاب المهدئ

شاي الأعشاب المهدئ

خليط أعشاب طبيعية (بابونج، نعناع، ليمون) لتهدئة الأعصاب وتحسين المزاج.

18 ر.س
ماء الورد الطبيعي

ماء الورد الطبيعي

ماء ورد نقي يستخدم كتونر للبشرة أو معطر طبيعي للجسم والمنزل.

15 ر.س
خلطة زيوت الشعر

خلطة زيوت الشعر المغذية

مزيج من الزيوت الطبيعية (جوز الهند، الأرغان، الخروع) لتغذية وتقوية الشعر.

40 ر.س
غنى للطيب والطبيعة | متجر ذكي متطور
منتجات طبيعية 100%
شحن سريع وآمن
عطور فاخرة من الطبيعة
دعم ذكي على مدار الساعة

عطر الطبيعة... رفاهية المستقبل

اكتشف تشكيلتنا الذكية من العطور والزيوت الطبيعية الفاخرة. جودة أصلية، توصيل سريع، ودعم ذكي على مدار الساعة.

تسوق الآن
منتجات مختارة من غنى
عطر الربيع النقي

عطر الربيع النقي

نسمات طبيعية منعشة مستوحاة من أزهار الربيع، ثبات يدوم طويلًا.
220 ر.س
تسوق الآن
زيت الورد العضوي

زيت الورد العضوي

مستخلص نقي 100%، يمنحك نعومة ورائحة فاخرة للبشرة والشعر.
145 ر.س
تسوق الآن
مسك الطهارة الأصلي

مسك الطهارة الأصلي

نقاء المسك الأبيض الطبيعي، انتعاش يدوم طوال اليوم.
99 ر.س
تسوق الآن

عن غنى للطيب والطبيعة

تأسس متجر غنى ليقدم لك تجربة تسوق عصرية تجمع بين أصالة العطور الشرقية ونقاء الزيوت الطبيعية. جميع منتجاتنا مختارة بعناية من مصادر طبيعية وعضوية، مع ضمان الجودة والأمان، لتكون غنى وجهتك الأولى لجمال ورائحة تدوم.

تواصل معنا

جميع الحقوق محفوظة © غنى للطيب والطبيعة 2025
مدونة غنى للطيب والطبيعة

غنى للطيب والطبيعة

مدونة الصحة والجمال الطبيعي

أحدث المقالات

فوائد الزيوت العطرية
10 يونيو 2025 | بواسطة فريق غنى

فوائد الزيوت العطرية لصحة الجسم والعقل

تعرف على أهم الزيوت العطرية الطبيعية وكيف يمكن أن تساهم في تحسين صحتك النفسية والجسدية بطرق طبيعية وآمنة...

اقرأ المزيد
العناية بالبشرة
28 مايو 2025 | بواسطة غنى للطيب

روتين العناية بالبشرة باستخدام منتجات طبيعية

اكتشفي أفضل الطرق للعناية ببشرتك باستخدام صابون الأعشاب وماء الورد الطبيعي، ونصائح للحفاظ على نضارة وإشراقة وجهك...

اقرأ المزيد
شاي الأعشاب
15 مايو 2025 | بواسطة فريق غنى

أفضل أنواع شاي الأعشاب وفوائدها الصحية

تعرف على أشهر أنواع شاي الأعشاب الطبيعية، وفوائدها في تهدئة الأعصاب وتعزيز صحة الجهاز الهضمي...

اقرأ المزيد
© 2025 غنى للطيب والطبيعة. جميع الحقوق محفوظة.

تسجيل الدخول

ليس لديك حساب؟ سجل الآن
 ◦

سلة المنتجات

الصورة المنتج السعر الكمية المجموع حذف
اسم المنتج اسم المنتج 00 ر.س 00 ر.س
إجمالي المنتجات: 00 ر.س
تكلفة التوصيل: 00 ر.س
الإجمالي الكلي: 00 ر.س

بيانات التوصيل

سلة الشراء والدفع - غنى للطيب والطبيعة

سلة الشراء والدفع

أكمل خطوات الشراء واستمتع بمنتجات غنى الطبيعية

سلة المنتجات

الصورة المنتج السعر الكمية المجموع حذف
زيت اللافندر زيت اللافندر الطبيعي 35 ر.س 35 ر.س
صابونة الكركم صابونة الكركم الطبيعية 20 ر.س 40 ر.س
إجمالي المنتجات: 75 ر.س
تكلفة التوصيل: 15 ر.س
الإجمالي الكلي: 90 ر.س

بيانات التوصيل

مرحبًا بك في متجرك الذكي

اكتشف أحدث المنتجات الذكية بتصميم مستقبلي وتجربة تسوق فريدة وسهلة. جودة، سرعة، وأمان في كل طلب.

تسوق الآن
منتجات مختارة لك
اسم المنتج

سماعة ذكية لاسلكية

جودة صوت عالية، بطارية تدوم طويلًا، تصميم أنيق يناسب جميع الأذواق.
299 ر.س
شراء الآن
اسم المنتج

ساعة ذكية متعددة الوظائف

تابع صحتك، استقبل الإشعارات، وابقَ متصلاً طوال اليوم.
449 ر.س
شراء الآن
اسم المنتج

كاميرا مراقبة ذكية

رؤية ليلية، تحكم من الجوال، أمان منزلك بين يديك.
399 ر.س
شراء الآن
متجر أقطار - عرض المنتجات

متجر أقطار

سلة المشتريات

    الإجمالي: 0 ريال
    لوحة تحكم المتجر - منصة أقطار

    لوحة تحكم المتجر

    العنوان الوصف السعر الصورة إجراءات
    إنشاء متجر إلكتروني جديد - منصة أقطار

    إنشاء متجر إلكتروني جديد

    تسجيل الدخول / التسجيل - منصة أقطار

    تسجيل الدخول

    منصة ربط GitHub

    منصة ربط GitHub

    
    
      

    تحديث المستودع

    
    
      
    
    
    
    
    
      
      منصة ربط GitHub
      
    
    
      

    منصة ربط GitHub

    
    
      

    تحديث المستودع

    
    
      
    
    
    
    
    
      
      منصة ربط GitHub - تسجيل الدخول
      
    
    
      

    منصة ربط GitHub

    الحالة الحالية للمستودع

    
    
        

    تحديث المستودع

    
      
    تسجيل دخول المسؤول - منصة أقطار لوحة تحكم المسؤول

    لوحة تحكم الطلبات

    رقم الطلب العميل البريد الإلكتروني الهاتف الإجمالي (ريال) الحالة تحديث الحالة تفاصيل
    Skip to product information
    Modern Fabric Loveseat Sofa Couch For Living Room, Upholstered Large Size Deep Seat 2-Seat Sofa With 4 Pillows ,White Chenille

    Modern Fabric Loveseat Sofa Couch For Living Room, Upholstered Large Size Deep Seat 2-Seat Sofa With 4 Pillows ,White Chenille

    3,939.30 SAR
    Shipping calculated at checkout.

    Specification

    Product Information

    Item Code:W714S00267

    Product Type:Combo Item

    Product Name:Modern Fabric Loveseat Sofa Couch for Living Room, Upholstered Large Size Deep Seat 2-Seat Sofa with 4 Pillows ,White Chenille

    Main Color:White

    Main Material:Chenille

    Seats:2 Seat

    Product Dimensions

    Assembled Length (in.):Not Applicable

    Assembled Width (in.):Not Applicable

    Assembled Height (in.):Not Applicable

    Weight (lbs.):Not Applicable

    Package Size

    Sub-item 1: W714113418Package Quantity: 131.33 * 23.5 * 7.17 in. 21.2 lbs.

    Sub-item 2: W714113415Package Quantity: 135.83 * 30.31 * 14.57 in. 95.9 lbs.

    Product Features

    • Premium Material - Sturdy solid wood frame, high end breathable Chenille fabric, filled with high quality sponge, making this sofa beautiful and comfort, it can be perfectly support your body shape and give you relaxation feelings after a big day.
    • Flexible Combination - Not just an two-seater sofa, it can combine with armless units to be 3 seater, 4 seater , sofa sets which up to at least 22 kinds of sofa combination. Just need a bit idea then you can spire your living room. You are the best designer for your home.
    • Superior comfort - Upholstered in high-end breathable Chenille fabric and high-quality sponge, with cushioned thick foam at backrest and seat for prime relaxation. Buy one more footrest /ottoman to combine and stretch out your legs on the ottoman when you or guests need more space. It can be perfect match your living room, bedroom, home office, etc.
    • Easy to Assembly - Assembly required, all needed tools included. Wipe regularly with a soft, dry cloth to prevent dust accumulation. 2 packages may arrive separately within a few days, please be patient. If you have any questions, you can ask the customer service for help.

    Size
    CARE & MAINTENANCE

    To maintain the beauty and integrity of your purchase, we recommend treating it with care. Simple maintenance practices, such as gentle washing and proper storage, can effectively preserve the longevity of your favorites. We encourage you to refer to the care instructions included with each item, designed to help you keep your purchase in top condition.

    SHIPPING & RETURNS

    We strive to process and ship all orders in a timely manner, working diligently to ensure that your items are on their way to you as soon as possible. Need to return something? Just let us know.

    Embracing small joys

    Each item is designed to blend harmoniously with your living space while adding a unique touch. We aspire to bring balance and enrichment to everyday life.

    You may also like