feat: complete admin panel and backend admin api migration

This commit is contained in:
s.esmaeili
2026-09-13 21:02:25 +03:30
parent 03119cd655
commit 267fc7b7d1
239 changed files with 25431 additions and 935 deletions
@@ -0,0 +1,650 @@
// Ported from legacy henza_admin/src/layouts/components/vertical-nav-menu/navMenuItems.js
//
// Converted MECHANICALLY from the legacy file (see scratchpad/convert_menu.js) so
// that every Farsi label, permissionId, url, slug and icon survives byte-exact.
// The only edits are structural: the legacy `import {isBranch}` and the trailing
// const menu = isBranch() ? branchMenu : adminMenu
// are replaced by exporting both trees plus a getMenu() selector, so the choice
// happens at the call site instead of at module load.
//
// Node shapes present in the legacy data (field census across 611 lines):
// url x76, i18n x78, permissionId x74, slug x53, icon x33, submenu x19, header x2
// A "header" node is a section divider carrying `items`, not `submenu`.
//
// Legacy quirks preserved deliberately (see docs/ADMIN-PORT-PLAN.md):
// - two nodes have their permissionId COMMENTED OUT (banker-list, shopkeeper-list),
// so they are visible to everyone
// - "newsletters.newsletters" and "wallet.list" never match any granted rid (#7, #8)
// - several nodes repeat the same permissionId or reuse another view's `name`
import { isBranch } from '../utils';
export interface NavMenuNode {
url?: string | null;
name?: string;
slug?: string;
icon?: string;
i18n?: string;
tag?: string;
tagColor?: string;
permissionId?: string;
header?: string;
items?: NavMenuNode[];
submenu?: NavMenuNode[];
}
export const adminMenu: NavMenuNode[] = [
{
url: null,
name: 'پیشخوان',
// tag: '2',
tagColor: 'warning',
icon: 'HomeIcon',
i18n: 'پیشخوان',
permissionId:"dashboard",
submenu: [
{
url: '/dashboard/ecommerce',
name: 'eCommerce',
slug: 'dashboard-ecommerce',
i18n: 'آمار عمده فروشی',
permissionId:"dashboard.omde"
},
{
url: '/dashboard/analytics',
name: 'eCommerce',
slug: 'dashboard-ecommerce',
i18n: 'آمار تک فروشی',
permissionId:"dashboard.tak"
},
]
},
{
header: 'Apps',
icon: 'PackageIcon',
i18n: 'کاربری',
items: [
{
url: null,
name: 'User',
icon: 'UserIcon',
i18n: 'اشخاص',
permissionId:"persons",
submenu: [
{
url: '/customer/add',
name: 'AddCustomer',
slug: 'add-customer',
i18n: 'اضافه کردن شخص',
permissionId:"persons.create"
},
{
url: '/customer/reagent-list',
name: 'List',
slug: 'raegentList',
i18n: 'لیست کارشناسان فروش',
permissionId:"persons.list.sellers"
},
{
url: '/customer/omde-list',
name: 'List',
slug: 'omde-customer-list',
i18n: 'لیست مشتریان عمده',
permissionId:"persons.list.client.omde"
},
{
url: '/customer/omde-non-verified-list',
name: 'List',
slug: 'omde-non-verified-list',
i18n: 'لیست مشتریان در انتظار',
permissionId:"persons.list.client.omde"
},
{
url: '/customer/omde-archived-list',
name: 'List',
slug: 'omde-archived-list',
i18n: 'لیست مشتریان بایگانی',
permissionId:"persons.list.client.omde"
},
{
url: '/customer/list',
name: 'List',
slug: 'app-user-list',
i18n: 'لیست مشتریان تک',
permissionId:"persons.list.client.single"
},
{
url: '/customer/banker-list',
name: 'List',
slug: 'banker-list',
i18n: 'لیست بنکداران'
// permissionId:"persons.list.client."
},
{
// legacy navMenuItems.js:90 spelled this with a capital S while the route
// is '/customer/shopkeeper-list'. Case-sensitive in vue-router 4, so the
// menu item dead-ended at the 404 page. Lowercased to match the route.
url: '/customer/shopkeeper-list',
name: 'List',
slug: 'shopkeeper-list',
i18n: 'لیست مغازه داران حضوری'
// permissionId:"persons.list.client."
},
]
},
{
url: null,
name: 'Branch',
icon: 'GridIcon',
i18n: 'شعب',
permissionId:"branch",
submenu: [
{
url: '/branch/add',
name: 'AddBranch',
slug: 'add-branch',
i18n: 'افزودن شعب',
permissionId:"branch.create"
},
{
url: '/branch/list',
name: 'BranchList',
slug: 'branch-list',
i18n: 'لیست شعب',
permissionId:"branch.list"
},
]
},
/////////////////////////////////////////////
{
url: null,
name: 'Workshop',
icon: 'GridIcon',
i18n: 'کارگاه',
permissionId:"workshop",
submenu: [
{
url: '/workshop/add',
name: 'AddWorkshop',
slug: 'add-workshop',
i18n: 'افزودن کارگاه',
permissionId:"workshop.create"
},
{
url: '/workshop/list',
name: 'WorkshopList',
slug: 'workshop-list',
i18n: 'لیست کارگاه ها',
permissionId:"workshop.list"
},
]
},
/////////////////////////////////////////////
{
url: null,
name: 'eCommerce',
icon: 'ShoppingBagIcon',
i18n: 'محصولات',
permissionId:"product",
submenu: [
{
url: '/apps/product/add',
name: 'AddProduct',
slug: 'add-product',
i18n: 'افزودن محصول',
permissionId:"product.create"
},
{
url: '/apps/product/list',
name: 'ProductList',
slug: 'product-list',
i18n: 'محصولات',
permissionId:"product.list"
},
{
url: '/product/change/percent',
name: 'changePercent',
slug: 'change-Percent',
i18n: 'تغییر درصد محصولات',
permissionId:"product.percent"
},
]
},
{
url: null,
name: 'order',
icon: 'BoxIcon',
i18n: 'سفارش ها',
permissionId:"order",
submenu: [
{
url: '/order/create',
name: 'orderOmdeList',
slug: 'order-omde-list',
i18n: 'ثبت سفارش تک',
permissionId:"order.create"
},
{
url: '/order/list',
name: 'orderList',
slug: 'order-list',
i18n: 'لیست سفارش های تک',
permissionId:"order.list"
},
{
url: '/order/make',
name: 'makeOrder',
slug: 'order-makeOrder',
i18n: 'سفارش های ساختنی',
permissionId:"order.makeOrder"
},
{
url: '/order/omde-list',
name: 'orderOmdeList',
slug: 'order-omde-list',
i18n: 'لیست سفارش های عمده',
permissionId:"order.omde"
},
{
url: '/order/tamin-list',
name: 'orderTaminList',
slug: 'order-tamin-list',
i18n: 'لیست تامین',
permissionId:"order.tamin"
}
]
},
{
url: null,
name: 'users',
icon: 'UserIcon',
i18n: 'مدیران',
permissionId:"user",
submenu: [
{
url: '/permission',
name: 'permission',
slug: 'user-permission',
i18n: 'دسترسی ها',
permissionId:"user.permission"
},
{
url: '/user/create',
name: 'AddUser',
slug: 'add-user',
i18n: 'افزودن مدیر',
permissionId:"user.create"
},
{
url: '/user/list',
name: 'UserList',
slug: 'user-list',
i18n: 'لیست مدیران',
permissionId:"user.list"
},
]
},
{
url: null,
name: 'wallet',
icon: 'CreditCardIcon',
i18n: 'کیف پول',
permissionId:"wallet",
submenu: [
{
url: '/wallet',
name: 'wallet',
slug: 'wallet',
i18n: 'لیست کیف پول های شارژ شده',
permissionId:"wallet.list"
},
]
},
{
url: null,
name: 'category',
icon: 'ListIcon',
i18n: 'دسته بندی ها',
permissionId:"collection",
submenu: [
{
url: '/category/add',
name: 'categoryAdd',
slug: 'add-category',
i18n: 'افزودن دسته بندی',
permissionId:"collection.create"
},
{
url: '/category/list',
name: 'categoryList',
slug: 'list-category',
i18n: 'لیست دسته بندی ها',
permissionId:"collection.list"
}
]
},
{
url: null,
name: 'finical',
icon: 'DollarSignIcon',
i18n: 'اسناد مالی',
permissionId:"document",
submenu: [
{
url: '/finical/list',
name: 'finical_list',
slug: 'finical_list',
i18n: 'لیست اسناد',
permissionId:"document.list"
},
{
url: '/add/findoc',
name: 'findoc',
slug: 'findoc',
i18n: 'وارد کردن سند مالی مشتری',
permissionId:"document.create"
},
]
},
{
url: null,
name: 'report',
icon: 'GiftIcon',
i18n: 'تخفیفات',
permissionId:"offers",
submenu: [
{
url: '/major/promotion/tak/add',
name: 'major_promotion_add',
slug: 'major_promotion_add',
i18n: 'تعریف تخفیف تک',
permissionId:"offers.create.tak"
},
{
url: '/major/promotion/autopromotion',
name: 'major_promotion_list',
slug: 'major_promotion_list',
i18n: 'تخفیف اتوماتیک ',
permissionId:"offers.autopromotion"
},
{
url: '/major/promotion/add',
name: 'major_promotion_add',
slug: 'major_promotion_add',
i18n: 'تعریف تخفیف عمده',
permissionId:"offers.create"
},
{
url: '/major/promotion/list',
name: 'major_promotion_list',
slug: 'major_promotion_list',
i18n: 'لیست تخفیفات ',
permissionId:"offers.list"
},
]
},
{
name: 'report',
icon: 'SlashIcon',
i18n: 'استثناعات تخفیف',
permissionId:"offersIgnore",
url: '/major/offersIgnore',
slug: 'offersIgnore',
},
{
url: null,
name: 'Invoice',
icon: 'BookIcon',
i18n: 'فاکتور انتقال',
permissionId:"invoice",
submenu: [
{
url: '/invoice/add',
name: 'AddInvoice',
slug: 'add-invoice',
i18n: 'افزودن فاکتور',
permissionId:"invoice.create"
},
{
url: '/invoice/list',
name: 'InvoiceList',
slug: 'invoice-list',
i18n: 'لیست فاکتورها',
permissionId:"invoice.list"
},
]
},
{
url: null,
name: 'report',
icon: 'FileTextIcon',
i18n: 'گزارشات',
permissionId:"report",
submenu: [
{
url: '/report/order_item',
name: 'report_order_item',
slug: 'report_ordedr_item',
i18n: 'گزارش تجمیعی سفارش و اسناد',
permissionId:"report.order.item"
},
{
url: '/report/product',
name: 'report_product',
slug: 'report_product',
i18n: 'گزارش محصولات',
permissionId:"report.product"
},
]
},
{
url: null,
name: 'cities offer percent',
// tagColor: 'warning',
icon: 'PercentIcon',
i18n: 'شهر ها',
permissionId:"cities",
submenu: [
{
url: '/city/create',
name: 'create city',
slug: 'create_city',
i18n: 'افزودن شهر',
permissionId:"cities.create"
},
{
url: '/city/list',
name: 'city list',
slug: 'city_list',
i18n: 'لیست شهر ها',
permissionId:"cities.list"
},
]
},
{
url: '/comments',
name: 'comments',
// tagColor: 'warning',
icon: 'MessageSquareIcon',
i18n: 'دیدگاه ها',
permissionId:"comment"
},
{
url: null,
name: 'sms',
icon: 'MailIcon',
i18n: 'پیامک',
permissionId:"sms",
submenu: [
{
url: '/sms/create',
name: 'create sms',
slug: 'create_sms',
i18n: 'ارسال پیامک',
permissionId:"sms.create",
},
]
},
{
url: null,
name: 'notify',
icon: 'BellIcon',
i18n: 'نوتیفیکیشن',
permissionId:"notify",
submenu: [
{
url: '/notify/create',
name: 'create notify',
slug: 'create_notify',
i18n: 'ارسال نوتیفیکیشن',
permissionId:"notify.create",
},
]
},
{
url: '/statics',
name: 'statics',
icon: 'BarChartIcon',
i18n: 'آمار',
permissionId:"statics",
},
{
url: '/newsletters',
name: 'newsletters',
icon: 'FileTextIcon',
i18n: 'خبرنامه',
permissionId:"newsletters.newsletters",
},
]
},
{
header: 'UI',
icon: 'LayersIcon',
i18n: 'مدیریت',
items: [
{
url: null,
name: 'پیکر بندی',
icon: 'SettingsIcon',
i18n: 'پیکر بندی',
permissionId:"config",
submenu: [
{
url: '/config/manage/const',
name: 'Const Management',
slug: 'manage-const',
i18n: 'مدیریت ثابت ها',
permissionId:"config.statics"
},
{
url: '/config/manage/report',
name: 'report Management',
slug: 'manage-report',
i18n: 'گزارش',
permissionId:"config.report"
},
{
url: '/config/manage/wallet',
name: 'wallet Management',
slug: 'manage-const',
i18n: 'مدیریت کیف پول',
permissionId:"config.wallet"
},
]
},
]
}
]
export const branchMenu: NavMenuNode[] = [
{
url: '/dashboard',
name: 'dashboard',
tagColor: 'warning',
icon: 'HomeIcon',
i18n: 'پیشخوان',
permissionId:"dashboard",
},
{
url: null,
name: 'User',
icon: 'UserIcon',
i18n: 'اشخاص',
permissionId:"persons",
submenu: [
{
url: '/customer/add',
name: 'AddCustomer',
slug: 'add-customer',
icon:'UserPlusIcon',
i18n: 'اضافه کردن مشتری',
permissionId:"persons.create"
},
{
url: '/customer/list',
name: 'List',
icon:'UsersIcon',
slug: 'app-user-list',
i18n: 'لیست مشتریان ',
permissionId:"persons.list.client.single"
},
]
},
{
url: '/products',
name: 'ProductList',
slug: 'product-list',
icon: 'ShoppingBagIcon',
i18n: 'محصولات',
permissionId:"product.list"
},
{
url: '/buy/order/list',
name: 'ProductList',
slug: 'product-list',
icon: 'ShoppingBagIcon',
i18n: 'فاکتور خرید',
permissionId:"product.list"
},
/*{
url: '/buy/order/list',
name: 'ProductList',
slug: 'product-list',
icon: 'ShoppingBagIcon',
i18n: 'فاکتور خرید',
permissionId:"product.list"
},*/
{
url: null,
name: 'order',
icon: 'BoxIcon',
i18n: 'سفارش ها',
permissionId:"order",
submenu: [
{
url: '/order/create',
name: 'orderOmdeList',
icon:'InboxIcon',
slug: 'order-omde-list',
i18n: 'ثبت سفارش',
permissionId:"order.create"
},
{
url: '/order/list',
name: 'orderList',
icon:'ListIcon',
slug: 'order-list',
i18n: 'لیست سفارش',
permissionId:"order.list"
},
]
},
]
/** Legacy: `const menu = isBranch() ? branchMenu : adminMenu`. */
export function getMenu(): NavMenuNode[] {
return isBranch() ? branchMenu : adminMenu;
}
export default getMenu;