번들 확장 20개 전부에 AGENTS.md · README.md · docs/ 를 채우고, 코어가 들고 있던 확장 소유 문서 두 갈래를 그 확장으로 옮긴다. 번들 템플릿의 컴포넌트· 핸들러·레이아웃 상세와 확장이 구독하는 활동 로그 훅 목록이 그 대상이며, 코어에는 총계와 링크만 남아 확장이 기능을 늘릴 때 코어 문서를 고쳐야 하던 역방향 의존이 사라진다. 전수 완비를 확인하고 강제를 조인다 — 문서 동반 룰을 대상 목록 없는 error 로 승격하고, 검사 스크립트가 문서 미보유를 실패로 올리며, 미채움 마커 baseline 을 0 으로 기록한다. 한쪽만 조이면 "새 확장이 문서 없이 들어와도 초록" 인 상태가 남는데 그 결과는 이상 0건과 구분되지 않는다. 집필 과정에서 드러난 생성기 결함 셋을 함께 고친다. 스케줄 주기 열이 계약 키를 읽지 않아 모든 확장에서 '-' 였고, 네임스페이스를 붙인 핸들러 등록 키가 수집에서 통째로 빠졌으며, README 골격이 폐기된 히어로 배지를 계속 찍어내고 있었다. 셋 다 산출물이 아니라 원천이 틀린 것이라, 가드의 모집단에 생성기 출력 자체를 넣어 다음 확장이 같은 상태로 태어나는 경로를 막는다.
29 KiB
이커머스 — 프론트엔드
레이아웃·액션 핸들러·전역 진입점·에셋 · 진입점: AGENTS.md
레이아웃
레이아웃 206개 (루트: resources/layouts).
| 그룹 | 개수 |
|---|---|
admin |
206개 |
| 레이아웃 | 그룹 | 종류 | extends |
|---|---|---|---|
admin_ecommerce_brand_index |
admin |
화면 | _admin_base |
admin_ecommerce_category_index |
admin |
화면 | _admin_base |
admin_ecommerce_deposit_index |
admin |
화면 | _admin_base |
admin_ecommerce_excel_download_index |
admin |
화면 | _admin_base |
admin_ecommerce_main_banner_index |
admin |
화면 | _admin_base |
admin_ecommerce_mileage_transaction_index |
admin |
화면 | _admin_base |
admin_ecommerce_order_detail |
admin |
화면 | _admin_base |
admin_ecommerce_order_index |
admin |
화면 | _admin_base |
admin_ecommerce_order_list |
admin |
화면 | _admin_base |
admin_ecommerce_payment_failure_history |
admin |
화면 | _admin_base |
admin_ecommerce_personal_payment |
admin |
화면 | _admin_base |
admin_ecommerce_personal_payment_create |
admin |
화면 | _admin_base |
admin_ecommerce_personal_payment_detail |
admin |
화면 | _admin_base |
admin_ecommerce_product_common_info_index |
admin |
화면 | _admin_base |
admin_ecommerce_product_form |
admin |
화면 | _admin_base |
admin_ecommerce_product_list |
admin |
화면 | _admin_base |
admin_ecommerce_product_notice_index |
admin |
화면 | _admin_base |
admin_ecommerce_product_review_index |
admin |
화면 | _admin_base |
admin_ecommerce_promotion_coupon_form |
admin |
화면 | _admin_base |
admin_ecommerce_promotion_coupon_list |
admin |
화면 | _admin_base |
admin_ecommerce_promotion_discount_code_create |
admin |
화면 | _admin_base |
admin_ecommerce_promotion_discount_code_index |
admin |
화면 | _admin_base |
admin_ecommerce_settings |
admin |
화면 | _admin_base |
admin_ecommerce_shipping_policy_form |
admin |
화면 | _admin_base |
admin_ecommerce_shipping_policy_list |
admin |
화면 | _admin_base |
_modal_delete_confirm |
admin |
partial | - |
_modal_editing_confirm |
admin |
partial | - |
_panel_brand_list |
admin |
partial | - |
_panel_detail |
admin |
partial | - |
_panel_form |
admin |
partial | - |
_panel_view |
admin |
partial | - |
_modal_delete_confirm |
admin |
partial | - |
_modal_image_preview |
admin |
partial | - |
_panel_category_list |
admin |
partial | - |
_panel_detail |
admin |
partial | - |
_panel_form |
admin |
partial | - |
_panel_view |
admin |
partial | - |
_modal_bulk_match |
admin |
partial | - |
_modal_manual_match |
admin |
partial | - |
_modal_process_history |
admin |
partial | - |
_modal_download_history |
admin |
partial | - |
_modal_delete_confirm |
admin |
partial | - |
_modal_edit_cancel |
admin |
partial | - |
_modal_status_change |
admin |
partial | - |
_partial_banner_detail |
admin |
partial | - |
_partial_banner_form |
admin |
partial | - |
_partial_banner_list |
admin |
partial | - |
_partial_preview_slider |
admin |
partial | - |
_filters |
admin |
partial | - |
_modal_edit_transaction |
admin |
partial | - |
_modal_extend_expiry |
admin |
partial | - |
_modal_manual_transaction |
admin |
partial | - |
_transactions_table |
admin |
partial | - |
_modal_batch_change_confirm |
admin |
partial | - |
_modal_cancel_order |
admin |
partial | - |
_modal_confirm_deposit |
admin |
partial | - |
_modal_issue_cash_receipt |
admin |
partial | - |
_modal_reset_guest_password |
admin |
partial | - |
_modal_send_email |
admin |
partial | - |
_modal_send_sms |
admin |
partial | - |
_partial_activity_log |
admin |
partial | - |
_partial_claim_history |
admin |
partial | - |
_partial_order_info |
admin |
partial | - |
_partial_payment_info |
admin |
partial | - |
_tab_claim_exchange |
admin |
partial | - |
_tab_claim_refund |
admin |
partial | - |
_tab_claim_return |
admin |
partial | - |
_modal_excel_download |
admin |
partial | - |
_modal_preset_manage |
admin |
partial | - |
_modal_preset_save |
admin |
partial | - |
_modal_bulk_confirm |
admin |
partial | - |
_modal_excel_download |
admin |
partial | - |
_modal_preset_delete_confirm |
admin |
partial | - |
_modal_preset_edit |
admin |
partial | - |
_modal_preset_manage |
admin |
partial | - |
_modal_preset_save |
admin |
partial | - |
_partial_bulk_action_section |
admin |
partial | - |
_partial_filter_section |
admin |
partial | - |
_partial_order_datagrid |
admin |
partial | - |
_partial_preset_section |
admin |
partial | - |
_modal_member_search |
admin |
partial | - |
_modal_order_search |
admin |
partial | - |
_modal_content_mode_change |
admin |
partial | - |
_modal_copy_confirm |
admin |
partial | - |
_modal_default_confirm |
admin |
partial | - |
_modal_delete_confirm |
admin |
partial | - |
_modal_editing_confirm |
admin |
partial | - |
_modal_set_default_confirm |
admin |
partial | - |
_panel_detail |
admin |
partial | - |
_panel_form |
admin |
partial | - |
_panel_list |
admin |
partial | - |
_panel_view |
admin |
partial | - |
_partial_common_info_detail |
admin |
partial | - |
_partial_common_info_form |
admin |
partial | - |
_modal_add_language |
admin |
partial | - |
_modal_additional_options_clear |
admin |
partial | - |
_modal_confirm_regenerate |
admin |
partial | - |
_modal_copy_product |
admin |
partial | - |
_modal_delete_confirm |
admin |
partial | - |
_modal_label_delete_confirm |
admin |
partial | - |
_modal_label_form |
admin |
partial | - |
_modal_label_uncheck_confirm |
admin |
partial | - |
_modal_multilingual_tag_edit |
admin |
partial | - |
_modal_notice_bulk_change |
admin |
partial | - |
_modal_notice_template_confirm |
admin |
partial | - |
_modal_save_template |
admin |
partial | - |
_partial_activity_log |
admin |
partial | - |
_partial_basic_info |
admin |
partial | - |
_partial_common_info |
admin |
partial | - |
_partial_description |
admin |
partial | - |
_partial_identification_codes |
admin |
partial | - |
_partial_image_upload |
admin |
partial | - |
_partial_other_info |
admin |
partial | - |
_partial_product_notice |
admin |
partial | - |
_partial_product_options |
admin |
partial | - |
_partial_sales_info |
admin |
partial | - |
_partial_seo_settings |
admin |
partial | - |
_partial_shipping |
admin |
partial | - |
_partial_shopping_integration |
admin |
partial | - |
_modal_bulk_confirm |
admin |
partial | - |
_modal_bulk_price |
admin |
partial | - |
_modal_bulk_stock |
admin |
partial | - |
_modal_copy_product |
admin |
partial | - |
_modal_delete_confirm |
admin |
partial | - |
_modal_excel_download |
admin |
partial | - |
_modal_preset_delete_confirm |
admin |
partial | - |
_modal_preset_edit |
admin |
partial | - |
_modal_preset_manage |
admin |
partial | - |
_modal_preset_save |
admin |
partial | - |
_partial_filter_section |
admin |
partial | - |
_partial_product_datagrid |
admin |
partial | - |
_modal_bulk_change |
admin |
partial | - |
_modal_delete_confirm |
admin |
partial | - |
_modal_editing_confirm |
admin |
partial | - |
_panel_detail |
admin |
partial | - |
_panel_form |
admin |
partial | - |
_panel_list |
admin |
partial | - |
_panel_view |
admin |
partial | - |
_modal_image_preview |
admin |
partial | - |
_modal_reply_delete |
admin |
partial | - |
_modal_status_change |
admin |
partial | - |
_partial_basic_info |
admin |
partial | - |
_partial_benefit_settings |
admin |
partial | - |
_partial_issue_settings |
admin |
partial | - |
_partial_usage_conditions |
admin |
partial | - |
_modal_cancel_issue_confirm |
admin |
partial | - |
_modal_delete_confirm |
admin |
partial | - |
_modal_direct_issue |
admin |
partial | - |
_modal_issue_history |
admin |
partial | - |
_modal_status_change_confirm |
admin |
partial | - |
_partial_coupon_datagrid |
admin |
partial | - |
_partial_filter_section |
admin |
partial | - |
_modal_delete_confirm |
admin |
partial | - |
_modal_status_change |
admin |
partial | - |
_bank_accounts_cards |
admin |
partial | - |
_bank_accounts_table |
admin |
partial | - |
_bank_management_modal |
admin |
partial | - |
_currency_exchange_cards |
admin |
partial | - |
_currency_exchange_table |
admin |
partial | - |
_disable_international_shipping_modal |
admin |
partial | - |
_modal_clear_seo_cache |
admin |
partial | - |
_modal_identity_policy_delete |
admin |
partial | - |
_modal_identity_policy_form |
admin |
partial | - |
_modal_mail_template_edit |
admin |
partial | - |
_modal_notification_definition_reset |
admin |
partial | - |
_modal_notification_template_edit |
admin |
partial | - |
_modal_notification_template_preview |
admin |
partial | - |
_payment_methods_cards |
admin |
partial | - |
_payment_methods_list |
admin |
partial | - |
_refund_reason_cards |
admin |
partial | - |
_refund_reason_section |
admin |
partial | - |
_shipping_carrier_cards |
admin |
partial | - |
_shipping_carrier_section |
admin |
partial | - |
_shipping_country_cards |
admin |
partial | - |
_shipping_country_table |
admin |
partial | - |
_shipping_type_cards |
admin |
partial | - |
_shipping_type_section |
admin |
partial | - |
_tab_basic_info |
admin |
partial | - |
_tab_claim |
admin |
partial | - |
_tab_identity_policies |
admin |
partial | - |
_tab_language_currency |
admin |
partial | - |
_tab_mileage |
admin |
partial | - |
_tab_mileage_basic_card |
admin |
partial | - |
_tab_mileage_currency_cards |
admin |
partial | - |
_tab_mileage_currency_table |
admin |
partial | - |
_tab_mileage_expiry_card |
admin |
partial | - |
_tab_mileage_notification_card |
admin |
partial | - |
_tab_notification_definitions |
admin |
partial | - |
_tab_order_settings |
admin |
partial | - |
_tab_review_settings |
admin |
partial | - |
_tab_seo |
admin |
partial | - |
_tab_shipping |
admin |
partial | - |
_modal_extra_fee_template |
admin |
partial | - |
_partial_basic_info |
admin |
partial | - |
_partial_charge_settings |
admin |
partial | - |
_partial_country_basic_fields |
admin |
partial | - |
_partial_country_tabs |
admin |
partial | - |
_partial_extra_fee |
admin |
partial | - |
_modal_bulk_delete |
admin |
partial | - |
_modal_bulk_toggle |
admin |
partial | - |
_modal_copy |
admin |
partial | - |
_modal_delete |
admin |
partial | - |
_modal_set_default |
admin |
partial | - |
_partial_bulk_actions |
admin |
partial | - |
_partial_datagrid |
admin |
partial | - |
_partial_filter |
admin |
partial | - |
206개가 전부 admin 그룹입니다(화면 25 + 부분 레이아웃 181). resources/layouts/user/
디렉토리는 있지만 비어 있습니다 — 이 모듈이 방문자 쇼핑 화면을 소유하지 않는다는 설계가
디렉토리 구조에 그대로 드러난 자리입니다. 상품 목록·상세·장바구니·주문서·마이페이지는
템플릿(sirsoft-basic)의 레이아웃이며, 그 화면들은 이 모듈의 공개 API 와 아래 액션 핸들러를
씁니다.
화면 25개에 부분 레이아웃 181개가 붙는 비율(1:7)은 화면이 크기 때문입니다. 상품 등록 폼·주문
상세·환경설정처럼 탭이 여러 개인 화면은 탭마다 파일을 나눠 두었습니다
(partials/{화면이름}/_tab_*.json). 화면 하나를 고칠 때는 그 화면 이름의 partials 디렉토리를
함께 열어야 전체가 보입니다.
부분 레이아웃에서는 {{props.*}} 를 쓰지 않고 데이터소스 ID 를 직접 참조합니다. 그리고
부모–자식 레이아웃 사이에 데이터소스 ID 가 겹치면 안 됩니다 — 겹치면 한쪽이 조용히 다른 쪽의
응답을 덮어씁니다.
레이아웃 JSON 만 고쳤다면 빌드는 필요 없고 php artisan module:update sirsoft-ecommerce --force
로 활성 디렉토리에 반영합니다. 다만 새로 쓴 Tailwind 클래스가 빌드된 CSS 에 없으면 그
스타일만 조용히 빠지므로, 기존 레이아웃에 쓰이지 않던 클래스를 도입할 때는 확인이 필요합니다.
액션 핸들러
핸들러 160개 (정의: resources/js/handlers/index.ts).
| 핸들러 | 레이아웃에서 부르는 이름 |
|---|---|
updateProductField |
sirsoft-ecommerce.updateProductField |
updateOptionField |
sirsoft-ecommerce.updateOptionField |
calculateCurrencyPrices |
sirsoft-ecommerce.calculateCurrencyPrices |
initPreferredCurrency |
sirsoft-ecommerce.initPreferredCurrency |
initPreferredShippingCountry |
sirsoft-ecommerce.initPreferredShippingCountry |
setDateRange |
sirsoft-ecommerce.setDateRange |
setDefaultOption |
sirsoft-ecommerce.setDefaultOption |
toggleOption |
sirsoft-ecommerce.toggleOption |
toggleProductOptions |
sirsoft-ecommerce.toggleProductOptions |
toggleAllOptionsInRow |
sirsoft-ecommerce.toggleAllOptionsInRow |
getProductOptionStates |
sirsoft-ecommerce.getProductOptionStates |
syncProductSelection |
sirsoft-ecommerce.syncProductSelection |
loadExpandedOptions |
sirsoft-ecommerce.loadExpandedOptions |
retryExpandedOptions |
sirsoft-ecommerce.retryExpandedOptions |
generateCopyProductCode |
sirsoft-ecommerce.generateCopyProductCode |
copyProduct |
sirsoft-ecommerce.copyProduct |
selectCategory |
sirsoft-ecommerce.selectCategory |
selectCategoryMobile |
sirsoft-ecommerce.selectCategoryMobile |
addCategoryToSelection |
sirsoft-ecommerce.addCategoryToSelection |
removeCategoryFromSelection |
sirsoft-ecommerce.removeCategoryFromSelection |
getCategoryBreadcrumb |
sirsoft-ecommerce.getCategoryBreadcrumb |
validateCategoryPath |
sirsoft-ecommerce.validateCategoryPath |
initCategoryInfosFromProduct |
sirsoft-ecommerce.initCategoryInfosFromProduct |
getBrandName |
sirsoft-ecommerce.getBrandName |
getBrandDescription |
sirsoft-ecommerce.getBrandDescription |
updatePrice |
sirsoft-ecommerce.updatePrice |
calculateTotalOptionStock |
sirsoft-ecommerce.calculateTotalOptionStock |
validatePriceRelation |
sirsoft-ecommerce.validatePriceRelation |
addOptionInput |
sirsoft-ecommerce.addOptionInput |
removeOptionInput |
sirsoft-ecommerce.removeOptionInput |
updateOptionInput |
sirsoft-ecommerce.updateOptionInput |
generateOptions |
sirsoft-ecommerce.generateOptions |
deleteOption |
sirsoft-ecommerce.deleteOption |
applyOptionAddTool |
sirsoft-ecommerce.applyOptionAddTool |
addRequiredItem |
sirsoft-ecommerce.addRequiredItem |
updateRequiredItem |
sirsoft-ecommerce.updateRequiredItem |
removeRequiredItem |
sirsoft-ecommerce.removeRequiredItem |
reorderRequiredItems |
sirsoft-ecommerce.reorderRequiredItems |
addAdditionalOption |
sirsoft-ecommerce.addAdditionalOption |
updateAdditionalOption |
sirsoft-ecommerce.updateAdditionalOption |
removeAdditionalOption |
sirsoft-ecommerce.removeAdditionalOption |
reorderAdditionalOptions |
sirsoft-ecommerce.reorderAdditionalOptions |
clearAdditionalOptions |
sirsoft-ecommerce.clearAdditionalOptions |
addAdditionalOptionValue |
sirsoft-ecommerce.addAdditionalOptionValue |
updateAdditionalOptionValue |
sirsoft-ecommerce.updateAdditionalOptionValue |
removeAdditionalOptionValue |
sirsoft-ecommerce.removeAdditionalOptionValue |
uploadImages |
sirsoft-ecommerce.uploadImages |
setThumbnail |
sirsoft-ecommerce.setThumbnail |
reorderImages |
sirsoft-ecommerce.reorderImages |
updateDescription |
sirsoft-ecommerce.updateDescription |
confirmSelectNoticeTemplate |
sirsoft-ecommerce.confirmSelectNoticeTemplate |
selectNoticeTemplate |
sirsoft-ecommerce.selectNoticeTemplate |
updateNoticeItem |
sirsoft-ecommerce.updateNoticeItem |
removeNoticeItem |
sirsoft-ecommerce.removeNoticeItem |
reorderNoticeItems |
sirsoft-ecommerce.reorderNoticeItems |
fillNoticeWithValue |
sirsoft-ecommerce.fillNoticeWithValue |
switchNoticeMode |
sirsoft-ecommerce.switchNoticeMode |
updateNewTemplateName |
sirsoft-ecommerce.updateNewTemplateName |
addNoticeItem |
sirsoft-ecommerce.addNoticeItem |
updateNoticeItemName |
sirsoft-ecommerce.updateNoticeItemName |
saveAsNoticeTemplate |
sirsoft-ecommerce.saveAsNoticeTemplate |
confirmSaveNoticeTemplate |
sirsoft-ecommerce.confirmSaveNoticeTemplate |
fillTemplateFieldsWithDetailReference |
sirsoft-ecommerce.fillTemplateFieldsWithDetailReference |
fillNoticeItemsWithDetailReference |
sirsoft-ecommerce.fillNoticeItemsWithDetailReference |
toggleLabel |
sirsoft-ecommerce.toggleLabel |
generateProductCode |
sirsoft-ecommerce.generateProductCode |
getShippingPolicyInfo |
sirsoft-ecommerce.getShippingPolicyInfo |
getCommonInfoContent |
sirsoft-ecommerce.getCommonInfoContent |
updateShoppingIntegration |
sirsoft-ecommerce.updateShoppingIntegration |
updateShippingType |
sirsoft-ecommerce.updateShippingType |
updateIdentificationCode |
sirsoft-ecommerce.updateIdentificationCode |
openLabelPeriodModal |
sirsoft-ecommerce.openLabelPeriodModal |
saveLabelPeriod |
sirsoft-ecommerce.saveLabelPeriod |
removeLabelPeriod |
sirsoft-ecommerce.removeLabelPeriod |
updateActivityLogSort |
sirsoft-ecommerce.updateActivityLogSort |
updateActivityLogPerPage |
sirsoft-ecommerce.updateActivityLogPerPage |
setDefaultShippingPolicy |
sirsoft-ecommerce.setDefaultShippingPolicy |
setLabelDatePreset |
sirsoft-ecommerce.setLabelDatePreset |
toggleDefaultShippingPolicy |
sirsoft-ecommerce.toggleDefaultShippingPolicy |
toggleLabelAssignment |
sirsoft-ecommerce.toggleLabelAssignment |
saveLabelSettings |
sirsoft-ecommerce.saveLabelSettings |
deleteLabel |
sirsoft-ecommerce.deleteLabel |
updateLabelPeriodInline |
sirsoft-ecommerce.updateLabelPeriodInline |
setLabelDatePresetInline |
sirsoft-ecommerce.setLabelDatePresetInline |
confirmUncheckLabel |
sirsoft-ecommerce.confirmUncheckLabel |
removeDescriptionLocale |
sirsoft-ecommerce.removeDescriptionLocale |
showAddLocaleModal |
sirsoft-ecommerce.showAddLocaleModal |
addDescriptionLocale |
sirsoft-ecommerce.addDescriptionLocale |
setDefaultOptionFromGrid |
sirsoft-ecommerce.setDefaultOptionFromGrid |
addOptionRow |
sirsoft-ecommerce.addOptionRow |
updateFormOptionField |
sirsoft-ecommerce.updateFormOptionField |
recalculateOptionPriceAdjustments |
sirsoft-ecommerce.recalculateOptionPriceAdjustments |
bulkUpdate |
sirsoft-ecommerce.bulkUpdate |
buildConfirmData |
sirsoft-ecommerce.buildConfirmData |
buildOrderColumns |
sirsoft-ecommerce.buildOrderColumns |
toggleArrayValue |
sirsoft-ecommerce.toggleArrayValue |
toggleVisibleFilter |
sirsoft-ecommerce.toggleVisibleFilter |
syncOrderSelection |
sirsoft-ecommerce.syncOrderSelection |
handleOrderRowAction |
sirsoft-ecommerce.handleOrderRowAction |
processOrderBulkAction |
sirsoft-ecommerce.processOrderBulkAction |
buildOrderBulkConfirmData |
sirsoft-ecommerce.buildOrderBulkConfirmData |
executeOrderBulkAction |
sirsoft-ecommerce.executeOrderBulkAction |
downloadOrderExcel |
sirsoft-ecommerce.downloadOrderExcel |
saveVisibleColumns |
sirsoft-ecommerce.saveVisibleColumns |
loadVisibleColumns |
sirsoft-ecommerce.loadVisibleColumns |
loadVisibleFilters |
sirsoft-ecommerce.loadVisibleFilters |
handleProductRowAction |
sirsoft-ecommerce.handleProductRowAction |
initOrderDetailForm |
sirsoft-ecommerce.initOrderDetailForm |
toggleProductSelection |
sirsoft-ecommerce.toggleProductSelection |
toggleAllProducts |
sirsoft-ecommerce.toggleAllProducts |
buildOrderDetailBulkConfirmData |
sirsoft-ecommerce.buildOrderDetailBulkConfirmData |
processOrderDetailBulkChange |
sirsoft-ecommerce.processOrderDetailBulkChange |
saveAdminMemo |
sirsoft-ecommerce.saveAdminMemo |
updateChangeQuantity |
sirsoft-ecommerce.updateChangeQuantity |
openConfirmDepositModal |
sirsoft-ecommerce.openConfirmDepositModal |
confirmDeposit |
sirsoft-ecommerce.confirmDeposit |
initShippingPolicyForm |
sirsoft-ecommerce.initShippingPolicyForm |
addCountrySetting |
sirsoft-ecommerce.addCountrySetting |
removeCountrySetting |
sirsoft-ecommerce.removeCountrySetting |
switchCountryTab |
sirsoft-ecommerce.switchCountryTab |
updateCountryField |
sirsoft-ecommerce.updateCountryField |
onChargePolicyChange |
sirsoft-ecommerce.onChargePolicyChange |
addRangeTier |
sirsoft-ecommerce.addRangeTier |
removeRangeTier |
sirsoft-ecommerce.removeRangeTier |
updateRangeTierField |
sirsoft-ecommerce.updateRangeTierField |
validateRangeTiers |
sirsoft-ecommerce.validateRangeTiers |
addExtraFeeRow |
sirsoft-ecommerce.addExtraFeeRow |
removeExtraFeeRow |
sirsoft-ecommerce.removeExtraFeeRow |
applyExtraFeeTemplate |
sirsoft-ecommerce.applyExtraFeeTemplate |
updateUnitValue |
sirsoft-ecommerce.updateUnitValue |
addApiRequestField |
sirsoft-ecommerce.addApiRequestField |
updateApiRequestField |
sirsoft-ecommerce.updateApiRequestField |
removeApiRequestField |
sirsoft-ecommerce.removeApiRequestField |
toggleApiRequestField |
sirsoft-ecommerce.toggleApiRequestField |
updateApiConfigField |
sirsoft-ecommerce.updateApiConfigField |
updateApiFieldMap |
sirsoft-ecommerce.updateApiFieldMap |
testShippingApi |
sirsoft-ecommerce.testShippingApi |
updateExtraFeeField |
sirsoft-ecommerce.updateExtraFeeField |
updateCancelQuantity |
sirsoft-ecommerce.updateCancelQuantity |
estimateRefundAmount |
sirsoft-ecommerce.estimateRefundAmount |
changeRefundPriority |
sirsoft-ecommerce.changeRefundPriority |
executeCancelOrder |
sirsoft-ecommerce.executeCancelOrder |
clearCancelOrderTimers |
sirsoft-ecommerce.clearCancelOrderTimers |
toggleItemSelection |
sirsoft-ecommerce.toggleItemSelection |
toggleSelectAllItems |
sirsoft-ecommerce.toggleSelectAllItems |
initUserCancelItems |
sirsoft-ecommerce.initUserCancelItems |
toggleUserCancelItem |
sirsoft-ecommerce.toggleUserCancelItem |
toggleUserCancelSelectAll |
sirsoft-ecommerce.toggleUserCancelSelectAll |
updateUserCancelQuantity |
sirsoft-ecommerce.updateUserCancelQuantity |
estimateUserRefund |
sirsoft-ecommerce.estimateUserRefund |
changeUserRefundPriority |
sirsoft-ecommerce.changeUserRefundPriority |
executeUserCancelOrder |
sirsoft-ecommerce.executeUserCancelOrder |
clearUserCancelOrderTimers |
sirsoft-ecommerce.clearUserCancelOrderTimers |
confirmOrderOption |
sirsoft-ecommerce.confirmOrderOption |
changeShippingAddress |
sirsoft-ecommerce.changeShippingAddress |
submitReview |
sirsoft-ecommerce.submitReview |
initCategoryFromUrl |
sirsoft-ecommerce.initCategoryFromUrl |
initBrandFromUrl |
sirsoft-ecommerce.initBrandFromUrl |
initCommonInfoFromUrl |
sirsoft-ecommerce.initCommonInfoFromUrl |
initNoticeFromUrl |
sirsoft-ecommerce.initNoticeFromUrl |
핸들러 160개는 레이아웃 JSON 에서 sirsoft-ecommerce.{이름} 으로 부릅니다. 관리자 화면 전용이
아니라 템플릿의 방문자 화면도 이 핸들러를 씁니다 — initUserCancelItems ·
toggleUserCancelItem · estimateUserRefund · submitReview · changeShippingAddress ·
confirmOrderOption 처럼 User/user 가 붙은 것들이 그 무리입니다. 그래서 이 핸들러들의
이름·시그니처는 템플릿과의 계약이며, 바꾸면 템플릿 화면이 조용히 무반응이 됩니다.
역할별로 네 무리입니다:
| 무리 | 예 | 하는 일 |
|---|---|---|
| 상품 편집 | updateProductField · toggleOption · loadExpandedOptions |
옵션이 많은 상품 폼의 부분 상태 갱신 |
| 통화 | calculateCurrencyPrices · initPreferredCurrency |
표시 통화 전환과 통화별 가격 재계산 |
| 취소·환불 | updateCancelQuantity · estimateRefundAmount · changeRefundPriority |
옵션 단위 취소 수량 조정과 예상 환불액 조회 (관리자·구매자 두 벌) |
| 배송정책·주소 | testShippingApi · updateExtraFeeField · changeShippingAddress |
외부 배송비 API 시험 호출과 주소 변경 |
핸들러 TS 를 고치면 빌드가 필요합니다 — php artisan module:build 후
module:update --force. 커밋되는 dist/ 는 배포 산출물이므로 --production 으로 굽고
sourceMappingURL 이 남지 않아야 합니다.
전역 진입점
| 항목 | 값 |
|---|---|
| 엔트리 파일 | resources/js/index.ts |
| 전역 객체 | window.__SirsoftEcommerce |
| 재등록 진입점 | initModule() |
로케일 전환 시 코어가 이 진입점을 호출해 핸들러를 다시 등록합니다. 진입점은 핸들러 재등록만 수행하고 1회성 부팅 작업을 포함하지 않습니다.
window.__SirsoftEcommerce.initModule() 이 재등록 진입점입니다. 로케일을 전환하면 코어가 이
함수를 다시 불러 핸들러를 재등록하는데, 이 함수가 없거나 이름이 다르면 로케일 전환 직후
이 모듈의 액션 160개가 전부 무반응이 됩니다 — 오류도 토스트도 없이 버튼만 동작하지 않습니다.
그래서 이 진입점은 핸들러 재등록만 수행합니다. 1회성 부팅 작업(초기 상태 시드·전역 이벤트 구독 등)을 여기 넣으면 로케일을 바꿀 때마다 다시 실행되어 상태가 초기화되거나 리스너가 중복 등록됩니다.
에셋
| 경로 | 구분 |
|---|---|
dist/css/module.css |
빌드 산출물 (커밋 대상) |
dist/js/module.iife.js |
빌드 산출물 (커밋 대상) |
editor-spec.json |
레이아웃 편집기 스펙 (manifest) |
로딩 설정: {"strategy":"global","priority":100,"dependencies":[]}
로딩 전략이 global 이라 이 모듈의 JS·CSS 는 모든 페이지에서 로드됩니다. 관리자 화면
전용이 아니라 템플릿의 방문자 화면도 이 모듈의 핸들러를 쓰기 때문입니다. priority: 100 은
확장 번들 안에서의 실행 순서로, 다른 확장이 이보다 먼저 나가야 한다면 그쪽이 더 작은 값을
선언합니다 — 특정 확장 이름을 지목하는 분기를 두지 않는 것이 규칙입니다.
dist/ 는 커밋되는 배포 산출물입니다. 소스(resources/js/**)를 고치면 --production
으로 다시 굽고 그 결과를 함께 커밋합니다. 새 소스 리터럴이 dist/ 에 없으면 stale 빌드이며,
브라우저가 받는 것은 커밋된 dist/ 이므로 소스만 고친 변경은 사이트에 반영되지 않습니다.
구동에 필요한 제3자 자산은 외부 CDN 에서 받지 않고 확장이 동봉합니다. CDN 도달 실패는 예외도
서버 로그도 남기지 않고 화면 기능만 조용히 사라지기 때문입니다. 자산 URL 을 문자열로 조립하지
않고 G7Core.asset.module 을 쓰는 것도 같은 이유입니다 — 확장자를 정적 location 이 가로채는
서버에서는 조립한 URL 만 404 가 됩니다.