diff --git a/sysadmin_panel/package-lock.json b/sysadmin_panel/package-lock.json index 3ee4201..50b4475 100644 --- a/sysadmin_panel/package-lock.json +++ b/sysadmin_panel/package-lock.json @@ -9,6 +9,7 @@ "version": "0.0.0", "dependencies": { "axios": "^1.7.9", + "qrcode.react": "^4.2.0", "react": "^18.3.1", "react-dom": "^18.3.1", "react-hot-toast": "^2.4.1", @@ -2472,6 +2473,15 @@ "node": ">=10" } }, + "node_modules/qrcode.react": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/qrcode.react/-/qrcode.react-4.2.0.tgz", + "integrity": "sha512-QpgqWi8rD9DsS9EP3z7BT+5lY5SFhsqGjpgW5DY/i3mK4M9DTBNz3ErMi8BWYEfI3L0d8GIbGmcdFAS1uIRGjA==", + "license": "ISC", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", diff --git a/sysadmin_panel/package.json b/sysadmin_panel/package.json index 632e403..8846332 100644 --- a/sysadmin_panel/package.json +++ b/sysadmin_panel/package.json @@ -10,6 +10,7 @@ }, "dependencies": { "axios": "^1.7.9", + "qrcode.react": "^4.2.0", "react": "^18.3.1", "react-dom": "^18.3.1", "react-hot-toast": "^2.4.1", diff --git a/sysadmin_panel/src/pages/SiteDetailPage.jsx b/sysadmin_panel/src/pages/SiteDetailPage.jsx index 3dabdfb..15ca751 100644 --- a/sysadmin_panel/src/pages/SiteDetailPage.jsx +++ b/sysadmin_panel/src/pages/SiteDetailPage.jsx @@ -1,6 +1,7 @@ import { useState, useEffect, useCallback } from 'react' import { useParams, useNavigate } from 'react-router-dom' import toast from 'react-hot-toast' +import { QRCodeCanvas } from 'qrcode.react' import client, { getManagersBySite, addManagerToSite, removeManagerSiteAccess } from '../api/client' import LicenseStatus from '../components/LicenseStatus' import ConfirmModal from '../components/ConfirmModal' @@ -322,6 +323,49 @@ export default function SiteDetailPage() { + {/* QR Codes */} + {(() => { + const slug = site.site_id + const menuUrl = `https://yourdomain.com/menu/${slug}` + const orderUrl = `https://yourdomain.com/menu/${slug}/order` + + function handleDownload(canvasId, filename) { + const canvas = document.getElementById(canvasId) + if (!canvas) return + const url = canvas.toDataURL('image/png') + const a = document.createElement('a') + a.href = url + a.download = filename + a.click() + } + + return ( +
{label}
+{url}
+ +