New src/components/common/: - BaseFormModal.vue — the standard shell every converted add/edit modal will use: header=title, footer=buttons, body=form. Replaces the ad-hoc 60%/70%/80% <a-modal> widths used across the codebase with 4 named sizes. - ListPageHeader.vue — the add button that goes above every list page, gated on the same rid the create route used (modelled on the one place this already existed, ListUser.vue's add-user button). New src/components/icons.ts: the legacy-Feather-name -> ant-icon map, extracted out of TooltipBtn.vue so the sidebar can resolve the same names through the same map instead of a second copy. New src/composables/useDeleteHandler.ts: the delete-then-refetch-then-toast handler that was copy-pasted verbatim in 6 list views (city/cityList.vue, user/ListUser.vue, apps/category/List.vue, finical/list.vue, apps/product/ProductList.vue, manage/Const.vue). Preserves each site's exact success-message wording and message.success/info choice, and ProductList's irregular POST-based delete endpoint. Verified: pnpm build passes. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
82 lines
2.2 KiB
TypeScript
82 lines
2.2 KiB
TypeScript
// Shared legacy-Feather-name -> ant-design-vue icon map.
|
|
//
|
|
// Originally lived only inside TooltipBtn.vue (row-action icons). Extracted
|
|
// here so the sidebar (navMenuItems.ts icon: values) can resolve the SAME
|
|
// names through the SAME map instead of duplicating it — one source of
|
|
// truth for "legacy Feather icon name" -> "ant component" across the app.
|
|
import {
|
|
AppstoreOutlined,
|
|
BarChartOutlined,
|
|
BellOutlined,
|
|
BlockOutlined,
|
|
BookOutlined,
|
|
CameraOutlined,
|
|
CheckOutlined,
|
|
CloseOutlined,
|
|
CreditCardOutlined,
|
|
DeleteOutlined,
|
|
DollarOutlined,
|
|
EditOutlined,
|
|
EyeOutlined,
|
|
FileOutlined,
|
|
FileTextOutlined,
|
|
GiftOutlined,
|
|
HomeOutlined,
|
|
InboxOutlined,
|
|
MailOutlined,
|
|
MessageOutlined,
|
|
PercentageOutlined,
|
|
PlusOutlined,
|
|
SettingOutlined,
|
|
ShoppingOutlined,
|
|
StopOutlined,
|
|
TeamOutlined,
|
|
UnorderedListOutlined,
|
|
UserAddOutlined,
|
|
UserOutlined,
|
|
} from '@ant-design/icons-vue';
|
|
|
|
/** legacy Feather name -> ant component. */
|
|
export const ICONS: Record<string, unknown> = {
|
|
// row-action icons (TooltipBtn.vue's original set)
|
|
ListIcon: UnorderedListOutlined,
|
|
FileIcon: FileOutlined,
|
|
TrashIcon: DeleteOutlined,
|
|
EditIcon: EditOutlined,
|
|
CheckIcon: CheckOutlined,
|
|
CameraIcon: CameraOutlined,
|
|
EyeIcon: EyeOutlined,
|
|
PlusIcon: PlusOutlined,
|
|
XIcon: CloseOutlined,
|
|
FileTextIcon: FileTextOutlined,
|
|
|
|
// sidebar icons (navMenuItems.ts), added when the sidebar started
|
|
// rendering them for the first time
|
|
HomeIcon: HomeOutlined,
|
|
PackageIcon: InboxOutlined,
|
|
UserIcon: UserOutlined,
|
|
UsersIcon: TeamOutlined,
|
|
UserPlusIcon: UserAddOutlined,
|
|
ShoppingBagIcon: ShoppingOutlined,
|
|
BoxIcon: InboxOutlined,
|
|
GridIcon: AppstoreOutlined,
|
|
LayersIcon: BlockOutlined,
|
|
CreditCardIcon: CreditCardOutlined,
|
|
DollarSignIcon: DollarOutlined,
|
|
PercentIcon: PercentageOutlined,
|
|
GiftIcon: GiftOutlined,
|
|
SlashIcon: StopOutlined,
|
|
BookIcon: BookOutlined,
|
|
MessageSquareIcon: MessageOutlined,
|
|
MailIcon: MailOutlined,
|
|
BellIcon: BellOutlined,
|
|
BarChartIcon: BarChartOutlined,
|
|
SettingsIcon: SettingOutlined,
|
|
InboxIcon: InboxOutlined,
|
|
};
|
|
|
|
export function resolveIcon(name: string | undefined): unknown | undefined {
|
|
if (!name) return undefined;
|
|
return ICONS[name];
|
|
}
|